Files
yaklang-chrome-extension/src/features/browser-crypto/adapters/contract.ts
T

83 lines
2.6 KiB
TypeScript

import type {
BrowserCryptoProviderKind,
BrowserPageCallableValueEncoding,
BrowserRecordingCallArgument,
BrowserRecordingCrypto,
BrowserRecordingValueEvidence,
} from '@/types/models';
export type CallableOperationKind = 'encrypt' | 'decrypt' | 'sign' | 'verify' | 'digest';
export interface CryptoAdapterManifest {
id: string;
displayName: string;
providerKind: BrowserCryptoProviderKind;
dynamic: boolean;
globalPaths: string[];
}
export interface CryptoAdapterScope {
window: Window;
crypto?: Crypto;
}
export interface CryptoAdapterToolkit {
unique(prefix: string): string;
byteLength(value: unknown): number | undefined;
dataType(value: unknown): string;
fingerprint(value: string): string;
argument(
index: number,
role: BrowserRecordingCallArgument['role'],
value: unknown,
replaceable: boolean,
retained: boolean,
summary?: string,
): BrowserRecordingCallArgument;
collectEvidence(value: unknown, path: string): BrowserRecordingValueEvidence[];
defaultOutputEvidence(value: unknown): BrowserRecordingValueEvidence[];
defaultAdaptInput(value: unknown, originalInput: unknown): unknown;
bytesForInput(value: unknown): Uint8Array | undefined;
bytesToBase64(value: Uint8Array): string;
}
export interface CryptoAdapterInvocationPlan {
crypto: BrowserRecordingCrypto;
inputIndex: number;
arguments: BrowserRecordingCallArgument[];
callableKind?: CallableOperationKind;
outputEncoding?: BrowserPageCallableValueEncoding;
replayInputs?: Array<{
path: string;
name: string;
role: BrowserRecordingCallArgument['role'];
originalInput: unknown;
apply(args: unknown[], value: unknown): void;
}>;
inputEvidence?(value: unknown): BrowserRecordingValueEvidence[];
outputEvidence?(value: unknown): BrowserRecordingValueEvidence[];
outputError?(value: unknown): string | undefined;
adaptInput?(value: unknown): unknown;
discoverResult?(value: unknown): CryptoAdapterOperation[];
}
export interface CryptoAdapterOperation {
id: string;
operation: string;
owner: Record<string, unknown>;
key: string;
invocationMode?: 'call' | 'construct';
resultMode: 'sync' | 'promise';
describe(thisArg: unknown, args: unknown[], toolkit: CryptoAdapterToolkit): CryptoAdapterInvocationPlan;
createWrapper(
original: Function,
invoke: (thisArg: unknown, args: unknown[]) => unknown,
): Function;
}
export interface PageCryptoAdapter {
manifest: CryptoAdapterManifest;
ready?(scope: CryptoAdapterScope): PromiseLike<unknown> | undefined;
discover(scope: CryptoAdapterScope): CryptoAdapterOperation[];
}