@cubist-labs/cubesigner-sdk 0.2.2 → 0.2.15

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (55) hide show
  1. package/dist/package.json +68 -0
  2. package/dist/src/api.d.ts +493 -0
  3. package/dist/src/api.js +1166 -0
  4. package/dist/src/client.d.ts +432 -335
  5. package/dist/src/client.js +195 -863
  6. package/dist/src/ethers/index.d.ts +33 -6
  7. package/dist/src/ethers/index.js +59 -12
  8. package/dist/src/index.d.ts +31 -26
  9. package/dist/src/index.js +51 -32
  10. package/dist/src/key.d.ts +28 -21
  11. package/dist/src/key.js +17 -10
  12. package/dist/src/mfa.d.ts +7 -7
  13. package/dist/src/mfa.js +20 -32
  14. package/dist/src/org.d.ts +37 -279
  15. package/dist/src/org.js +48 -194
  16. package/dist/src/paginator.js +1 -1
  17. package/dist/src/response.d.ts +101 -0
  18. package/dist/src/response.js +164 -0
  19. package/dist/src/role.d.ts +11 -9
  20. package/dist/src/role.js +1 -1
  21. package/dist/src/schema.d.ts +586 -10
  22. package/dist/src/schema.js +1 -1
  23. package/dist/src/schema_types.d.ts +6 -0
  24. package/dist/src/schema_types.js +1 -1
  25. package/dist/src/session/cognito_manager.d.ts +15 -3
  26. package/dist/src/session/cognito_manager.js +23 -5
  27. package/dist/src/session/session_manager.d.ts +1 -1
  28. package/dist/src/session/session_manager.js +3 -11
  29. package/dist/src/session/session_storage.js +1 -1
  30. package/dist/src/session/signer_session_manager.d.ts +3 -7
  31. package/dist/src/session/signer_session_manager.js +2 -8
  32. package/dist/src/signer_session.d.ts +8 -266
  33. package/dist/src/signer_session.js +15 -221
  34. package/dist/src/user_export.d.ts +52 -0
  35. package/dist/src/user_export.js +129 -0
  36. package/dist/src/util.d.ts +15 -0
  37. package/dist/src/util.js +33 -11
  38. package/package.json +12 -10
  39. package/src/api.ts +1395 -0
  40. package/src/client.ts +216 -1025
  41. package/src/ethers/index.ts +70 -12
  42. package/src/index.ts +59 -43
  43. package/src/key.ts +19 -12
  44. package/src/mfa.ts +16 -28
  45. package/src/org.ts +49 -204
  46. package/src/response.ts +196 -0
  47. package/src/role.ts +5 -3
  48. package/src/schema.ts +586 -10
  49. package/src/schema_types.ts +7 -0
  50. package/src/session/cognito_manager.ts +33 -6
  51. package/src/session/session_manager.ts +2 -8
  52. package/src/session/signer_session_manager.ts +3 -10
  53. package/src/signer_session.ts +13 -261
  54. package/src/user_export.ts +116 -0
  55. package/src/util.ts +29 -10
@@ -1,89 +1,6 @@
1
- import { CubeSigner, MfaReceipt, KeyInfo } from ".";
2
1
  import { CubeSignerClient } from "./client";
3
- import { AcceptedResponse, NewSessionResponse } from "./schema_types";
2
+ import { KeyInfo } from "./key";
4
3
  import { SignerSessionManager, SignerSessionStorage } from "./session/signer_session_manager";
5
- type Response<U> = U | AcceptedResponse;
6
- type RequestFn<U> = (headers?: HeadersInit) => Promise<Response<U>>;
7
- type MapFn<U, V> = (u: U) => V;
8
- /**
9
- * Takes a {@link Response<U>} and a {@link MapFn<U, V>} function and returns
10
- * a {@link Response<V>} that maps the value of the original response when its status code is 200.
11
- *
12
- * @param {Response<U>} resp Original response
13
- * @param {Map<U, V>} mapFn Map to apply to the response value when its status code is 200.
14
- * @return {Response<V>} Response whose value for status code 200 is mapped from U to V
15
- */
16
- export declare function mapResponse<U, V>(resp: Response<U>, mapFn: MapFn<U, V>): Response<V>;
17
- export interface MfaRequired {
18
- /** Org id */
19
- org_id: string;
20
- /** MFA request id */
21
- id: string;
22
- /** Optional MFA session */
23
- session?: NewSessionResponse | null;
24
- }
25
- /**
26
- * A response of a CubeSigner request.
27
- */
28
- export declare class CubeSignerResponse<U> {
29
- #private;
30
- /** @return {string} The MFA id associated with this request */
31
- mfaId(): string;
32
- /** @return {boolean} True if this request requires an MFA approval */
33
- requiresMfa(): boolean;
34
- /**
35
- * Returns session information to use for any MFA approval requests (if any was included in the response).
36
- * @return {ClientSessionInfo | undefined}
37
- */
38
- mfaSessionInfo(): NewSessionResponse | undefined;
39
- /** @return {U} The response data, if no MFA is required */
40
- data(): U;
41
- /**
42
- * Approves the MFA request using a given session and a TOTP code.
43
- *
44
- * @param {SignerSession} session Signer session to use
45
- * @param {string} code 6-digit TOTP code
46
- * @return {CubeSignerResponse<U>} The result of signing with the approval
47
- */
48
- approveTotp(session: SignerSession, code: string): Promise<CubeSignerResponse<U>>;
49
- /**
50
- * Approves the MFA request using a given `CubeSignerClient` instance (i.e., its session).
51
- *
52
- * @param {CubeSigner} cs CubeSigner whose session to use
53
- * @return {CubeSignerResponse<U>} The result of signing with the approval
54
- */
55
- approve(cs: CubeSigner): Promise<CubeSignerResponse<U>>;
56
- /**
57
- * @param {MfaReceipt} mfaReceipt The MFA receipt
58
- * @return {Promise<CubeSignerResponse<U>>} The result of signing after MFA approval
59
- */
60
- signWithMfaApproval(mfaReceipt: MfaReceipt): Promise<CubeSignerResponse<U>>;
61
- /**
62
- * Constructor.
63
- *
64
- * @param {RequestFn} requestFn
65
- * The signing function that this response is from.
66
- * This argument is used to resend requests with different headers if needed.
67
- * @param {U | AcceptedResponse} resp The response as returned by the OpenAPI client.
68
- */
69
- constructor(requestFn: RequestFn<U>, resp: U | AcceptedResponse);
70
- /**
71
- * Static constructor.
72
- * @param {RequestFn} requestFn
73
- * The request function that this response is from.
74
- * This argument is used to resend requests with different headers if needed.
75
- * @param {MfaReceipt} mfaReceipt Optional MFA receipt
76
- * @return {Promise<CubeSignerResponse<U>>} New instance of this class.
77
- */
78
- static create<U>(requestFn: RequestFn<U>, mfaReceipt?: MfaReceipt): Promise<CubeSignerResponse<U>>;
79
- /**
80
- * Returns HTTP headers containing a given MFA receipt.
81
- *
82
- * @param {MfaReceipt} mfaReceipt MFA receipt
83
- * @return {HeadersInit} Headers including that receipt
84
- */
85
- static getMfaHeaders(mfaReceipt?: MfaReceipt): HeadersInit | undefined;
86
- }
87
4
  /** Signer session info. Can only be used to revoke a token, but not for authentication. */
88
5
  export declare class SignerSessionInfo {
89
6
  #private;
@@ -101,188 +18,9 @@ export declare class SignerSessionInfo {
101
18
  }
102
19
  /**
103
20
  * Signer session.
104
- *
105
- * @deprecated Use {@link CubeSignerClient} instead.
21
+ * Extends {@link CubeSignerClient} and provides a few convenience methods on top.
106
22
  */
107
- export declare class SignerSession {
108
- #private;
109
- /** Deprecated */
110
- get sessionMgr(): SignerSessionManager;
111
- /** Org id */
112
- get orgId(): string;
113
- /**
114
- * Returns the list of keys that this token grants access to.
115
- * @return {KeyInfo[]} The list of keys.
116
- */
117
- keys(): Promise<KeyInfo[]>;
118
- /** Approve a pending MFA request using TOTP. */
119
- get totpApprove(): (mfaId: string, code: string) => Promise<{
120
- expires_at: number;
121
- id: string;
122
- receipt?: {
123
- confirmation: string;
124
- final_approver: string;
125
- timestamp: number;
126
- } | null | undefined;
127
- request: {
128
- body?: Record<string, unknown> | null | undefined;
129
- method: string;
130
- path: string;
131
- };
132
- status: {
133
- allowed_approvers: string[];
134
- allowed_mfa_types?: ("CubeSigner" | "Totp" | "Fido")[] | null | undefined;
135
- approved_by: {
136
- [key: string]: {
137
- [key: string]: {
138
- timestamp: number;
139
- };
140
- };
141
- };
142
- count: number;
143
- num_auth_factors: number;
144
- };
145
- }>;
146
- /** Initiate approval of an existing MFA request using FIDO. */
147
- get fidoApproveStart(): (mfaId: string) => Promise<import("./mfa").MfaFidoChallenge>;
148
- /** Get a pending MFA request by its id. */
149
- get getMfaInfo(): (mfaId: string) => Promise<{
150
- expires_at: number;
151
- id: string;
152
- receipt?: {
153
- confirmation: string;
154
- final_approver: string;
155
- timestamp: number;
156
- } | null | undefined;
157
- request: {
158
- body?: Record<string, unknown> | null | undefined;
159
- method: string;
160
- path: string;
161
- };
162
- status: {
163
- allowed_approvers: string[];
164
- allowed_mfa_types?: ("CubeSigner" | "Totp" | "Fido")[] | null | undefined;
165
- approved_by: {
166
- [key: string]: {
167
- [key: string]: {
168
- timestamp: number;
169
- };
170
- };
171
- };
172
- count: number;
173
- num_auth_factors: number;
174
- };
175
- }>;
176
- /** Submit an EVM sign request. */
177
- get signEvm(): (key: string | import("./key").Key, req: {
178
- chain_id: number;
179
- tx: Record<string, never>;
180
- }, mfaReceipt?: MfaReceipt | undefined) => Promise<CubeSignerResponse<{
181
- rlp_signed_tx: string;
182
- }>>;
183
- /** Submit an 'eth2' sign request. */
184
- get signEth2(): (key: string | import("./key").Key, req: {
185
- eth2_sign_request: Record<string, never>;
186
- network: "mainnet" | "prater" | "goerli" | "holesky";
187
- }, mfaReceipt?: MfaReceipt | undefined) => Promise<CubeSignerResponse<{
188
- signature: string;
189
- }>>;
190
- /** Sign a stake request. */
191
- get stake(): (req: {
192
- chain_id: number;
193
- deposit_type: "Canonical" | "Wrapper";
194
- staking_amount_gwei?: number | undefined;
195
- unsafe_conf?: {
196
- deposit_contract_addr?: string | null | undefined;
197
- genesis_fork_version?: string | null | undefined;
198
- } | null | undefined;
199
- validator_key?: string | null | undefined;
200
- withdrawal_addr: string;
201
- }, mfaReceipt?: MfaReceipt | undefined) => Promise<CubeSignerResponse<{
202
- created_validator_key_id: string;
203
- deposit_tx: {
204
- chain_id: number;
205
- deposit_txn: Record<string, never>;
206
- new_validator_pk: string;
207
- };
208
- }>>;
209
- /** Sign an unstake request. */
210
- get unstake(): (key: string | import("./key").Key, req: {
211
- epoch?: string | null | undefined;
212
- fork: {
213
- current_version: string;
214
- epoch: string;
215
- previous_version: string;
216
- };
217
- genesis_data: {
218
- genesis_fork_version: string;
219
- genesis_time: string;
220
- genesis_validators_root: string;
221
- };
222
- network: "mainnet" | "prater" | "goerli" | "holesky";
223
- validator_index: string;
224
- }, mfaReceipt?: MfaReceipt | undefined) => Promise<CubeSignerResponse<{
225
- message: {
226
- epoch: string;
227
- validator_index: string;
228
- };
229
- signature: string;
230
- }>>;
231
- /** Sign a raw blob.*/
232
- get signBlob(): (key: string | import("./key").Key, req: {
233
- message_base64: string;
234
- }, mfaReceipt?: MfaReceipt | undefined) => Promise<CubeSignerResponse<{
235
- signature: string;
236
- }>>;
237
- /** Sign a bitcoin message. */
238
- get signBtc(): (key: string | import("./key").Key, req: {
239
- sig_kind: {
240
- Segwit: {
241
- input_index: number;
242
- script_code: string;
243
- sighash_type: "All" | "None" | "Single" | "AllPlusAnyoneCanPay" | "NonePlusAnyoneCanPay" | "SinglePlusAnyoneCanPay";
244
- value: number;
245
- };
246
- };
247
- tx: Record<string, never>;
248
- }, mfaReceipt?: MfaReceipt | undefined) => Promise<CubeSignerResponse<{
249
- signature: string;
250
- }>>;
251
- /** Sign a solana message. */
252
- get signSolana(): (key: string | import("./key").Key, req: {
253
- message_base64: string;
254
- }, mfaReceipt?: MfaReceipt | undefined) => Promise<CubeSignerResponse<{
255
- signature: string;
256
- }>>;
257
- /** Sign an Avalanche P- or X-chain message. */
258
- get signAva(): (key: string | import("./key").Key, tx: import("./schema_types").AvaTx, mfaReceipt?: MfaReceipt | undefined) => Promise<CubeSignerResponse<{
259
- signature: string;
260
- }>>;
261
- /**
262
- * Obtain a proof of authentication.
263
- */
264
- get proveIdentity(): () => Promise<{
265
- aud?: string | null | undefined;
266
- email: string;
267
- exp_epoch: number;
268
- identity?: {
269
- iss: string;
270
- sub: string;
271
- } | null | undefined;
272
- user_info?: {
273
- configured_mfa: ({
274
- type: "totp";
275
- } | {
276
- id: string;
277
- name: string;
278
- type: "fido";
279
- })[];
280
- initialized: boolean;
281
- user_id: string;
282
- } | null | undefined;
283
- } & {
284
- id: string;
285
- }>;
23
+ export declare class SignerSession extends CubeSignerClient {
286
24
  /**
287
25
  * Loads an existing signer session from storage.
288
26
  * @param {SignerSessionStorage} storage The session storage to use
@@ -295,5 +33,9 @@ export declare class SignerSession {
295
33
  * @internal
296
34
  */
297
35
  constructor(sessionMgr: SignerSessionManager);
36
+ /**
37
+ * Returns the list of keys that this token grants access to.
38
+ * @return {KeyInfo[]} The list of keys.
39
+ */
40
+ keys(): Promise<KeyInfo[]>;
298
41
  }
299
- export {};
@@ -10,157 +10,12 @@ var __classPrivateFieldSet = (this && this.__classPrivateFieldSet) || function (
10
10
  if (typeof state === "function" ? receiver !== state || !f : !state.has(receiver)) throw new TypeError("Cannot write private member to an object whose class did not declare it");
11
11
  return (kind === "a" ? f.call(receiver, value) : f ? f.value = value : state.set(receiver, value)), value;
12
12
  };
13
- var __importDefault = (this && this.__importDefault) || function (mod) {
14
- return (mod && mod.__esModule) ? mod : { "default": mod };
15
- };
16
- var _CubeSignerResponse_requestFn, _CubeSignerResponse_resp, _CubeSignerResponse_mfaRequired, _SignerSessionInfo_csc, _SignerSessionInfo_sessionId, _SignerSession_csc;
13
+ var _SignerSessionInfo_csc, _SignerSessionInfo_sessionId;
17
14
  Object.defineProperty(exports, "__esModule", { value: true });
18
- exports.SignerSession = exports.SignerSessionInfo = exports.CubeSignerResponse = exports.mapResponse = void 0;
19
- const assert_1 = __importDefault(require("assert"));
20
- const _1 = require(".");
15
+ exports.SignerSession = exports.SignerSessionInfo = void 0;
21
16
  const client_1 = require("./client");
17
+ const key_1 = require("./key");
22
18
  const signer_session_manager_1 = require("./session/signer_session_manager");
23
- /**
24
- * Takes a {@link Response<U>} and a {@link MapFn<U, V>} function and returns
25
- * a {@link Response<V>} that maps the value of the original response when its status code is 200.
26
- *
27
- * @param {Response<U>} resp Original response
28
- * @param {Map<U, V>} mapFn Map to apply to the response value when its status code is 200.
29
- * @return {Response<V>} Response whose value for status code 200 is mapped from U to V
30
- */
31
- function mapResponse(resp, mapFn) {
32
- if (resp.accepted?.MfaRequired) {
33
- return resp;
34
- }
35
- else {
36
- return mapFn(resp);
37
- }
38
- }
39
- exports.mapResponse = mapResponse;
40
- /**
41
- * A response of a CubeSigner request.
42
- */
43
- class CubeSignerResponse {
44
- /** @return {string} The MFA id associated with this request */
45
- mfaId() {
46
- return __classPrivateFieldGet(this, _CubeSignerResponse_mfaRequired, "f").id;
47
- }
48
- /** @return {boolean} True if this request requires an MFA approval */
49
- requiresMfa() {
50
- return __classPrivateFieldGet(this, _CubeSignerResponse_mfaRequired, "f") !== undefined;
51
- }
52
- /**
53
- * Returns session information to use for any MFA approval requests (if any was included in the response).
54
- * @return {ClientSessionInfo | undefined}
55
- */
56
- mfaSessionInfo() {
57
- return __classPrivateFieldGet(this, _CubeSignerResponse_resp, "f").accepted?.MfaRequired?.session ?? undefined;
58
- }
59
- /** @return {U} The response data, if no MFA is required */
60
- data() {
61
- if (this.requiresMfa()) {
62
- throw new Error("Cannot call `data()` while MFA is required");
63
- }
64
- return __classPrivateFieldGet(this, _CubeSignerResponse_resp, "f");
65
- }
66
- /**
67
- * Approves the MFA request using a given session and a TOTP code.
68
- *
69
- * @param {SignerSession} session Signer session to use
70
- * @param {string} code 6-digit TOTP code
71
- * @return {CubeSignerResponse<U>} The result of signing with the approval
72
- */
73
- async approveTotp(session, code) {
74
- (0, assert_1.default)(this.requiresMfa());
75
- const mfaId = this.mfaId();
76
- const mfaOrgId = __classPrivateFieldGet(this, _CubeSignerResponse_mfaRequired, "f").org_id;
77
- const mfaApproval = await session.totpApprove(mfaId, code);
78
- (0, assert_1.default)(mfaApproval.id === mfaId);
79
- const mfaConf = mfaApproval.receipt?.confirmation;
80
- if (!mfaConf) {
81
- return this;
82
- }
83
- return await this.signWithMfaApproval({ mfaId, mfaOrgId, mfaConf });
84
- }
85
- /**
86
- * Approves the MFA request using a given `CubeSignerClient` instance (i.e., its session).
87
- *
88
- * @param {CubeSigner} cs CubeSigner whose session to use
89
- * @return {CubeSignerResponse<U>} The result of signing with the approval
90
- */
91
- async approve(cs) {
92
- (0, assert_1.default)(this.requiresMfa());
93
- const mfaId = __classPrivateFieldGet(this, _CubeSignerResponse_mfaRequired, "f").id;
94
- const mfaOrgId = __classPrivateFieldGet(this, _CubeSignerResponse_mfaRequired, "f").org_id;
95
- const mfaApproval = await cs.mfaApprove(mfaOrgId, mfaId);
96
- (0, assert_1.default)(mfaApproval.id === mfaId);
97
- const mfaConf = mfaApproval.receipt?.confirmation;
98
- if (!mfaConf) {
99
- return this;
100
- }
101
- return await this.signWithMfaApproval({ mfaId, mfaOrgId, mfaConf });
102
- }
103
- /**
104
- * @param {MfaReceipt} mfaReceipt The MFA receipt
105
- * @return {Promise<CubeSignerResponse<U>>} The result of signing after MFA approval
106
- */
107
- async signWithMfaApproval(mfaReceipt) {
108
- const headers = CubeSignerResponse.getMfaHeaders(mfaReceipt);
109
- return new CubeSignerResponse(__classPrivateFieldGet(this, _CubeSignerResponse_requestFn, "f"), await __classPrivateFieldGet(this, _CubeSignerResponse_requestFn, "f").call(this, headers));
110
- }
111
- // --------------------------------------------------------------------------
112
- // -- INTERNAL --------------------------------------------------------------
113
- // --------------------------------------------------------------------------
114
- /**
115
- * Constructor.
116
- *
117
- * @param {RequestFn} requestFn
118
- * The signing function that this response is from.
119
- * This argument is used to resend requests with different headers if needed.
120
- * @param {U | AcceptedResponse} resp The response as returned by the OpenAPI client.
121
- */
122
- constructor(requestFn, resp) {
123
- _CubeSignerResponse_requestFn.set(this, void 0);
124
- _CubeSignerResponse_resp.set(this, void 0);
125
- /**
126
- * Optional MFA id. Only set if there is an MFA request associated with the
127
- * signing request
128
- */
129
- _CubeSignerResponse_mfaRequired.set(this, void 0);
130
- __classPrivateFieldSet(this, _CubeSignerResponse_requestFn, requestFn, "f");
131
- __classPrivateFieldSet(this, _CubeSignerResponse_resp, resp, "f");
132
- __classPrivateFieldSet(this, _CubeSignerResponse_mfaRequired, __classPrivateFieldGet(this, _CubeSignerResponse_resp, "f").accepted?.MfaRequired, "f");
133
- }
134
- /**
135
- * Static constructor.
136
- * @param {RequestFn} requestFn
137
- * The request function that this response is from.
138
- * This argument is used to resend requests with different headers if needed.
139
- * @param {MfaReceipt} mfaReceipt Optional MFA receipt
140
- * @return {Promise<CubeSignerResponse<U>>} New instance of this class.
141
- */
142
- static async create(requestFn, mfaReceipt) {
143
- const seed = await requestFn(this.getMfaHeaders(mfaReceipt));
144
- return new CubeSignerResponse(requestFn, seed);
145
- }
146
- /**
147
- * Returns HTTP headers containing a given MFA receipt.
148
- *
149
- * @param {MfaReceipt} mfaReceipt MFA receipt
150
- * @return {HeadersInit} Headers including that receipt
151
- */
152
- static getMfaHeaders(mfaReceipt) {
153
- return mfaReceipt
154
- ? {
155
- "x-cubist-mfa-id": mfaReceipt.mfaId,
156
- "x-cubist-mfa-org-id": mfaReceipt.mfaOrgId,
157
- "x-cubist-mfa-confirmation": mfaReceipt.mfaConf,
158
- }
159
- : undefined;
160
- }
161
- }
162
- exports.CubeSignerResponse = CubeSignerResponse;
163
- _CubeSignerResponse_requestFn = new WeakMap(), _CubeSignerResponse_resp = new WeakMap(), _CubeSignerResponse_mfaRequired = new WeakMap();
164
19
  /** Signer session info. Can only be used to revoke a token, but not for authentication. */
165
20
  class SignerSessionInfo {
166
21
  /** Revoke this session */
@@ -189,76 +44,9 @@ exports.SignerSessionInfo = SignerSessionInfo;
189
44
  _SignerSessionInfo_csc = new WeakMap(), _SignerSessionInfo_sessionId = new WeakMap();
190
45
  /**
191
46
  * Signer session.
192
- *
193
- * @deprecated Use {@link CubeSignerClient} instead.
47
+ * Extends {@link CubeSignerClient} and provides a few convenience methods on top.
194
48
  */
195
- class SignerSession {
196
- /** Deprecated */
197
- get sessionMgr() {
198
- return __classPrivateFieldGet(this, _SignerSession_csc, "f").sessionMgr;
199
- }
200
- /** Org id */
201
- get orgId() {
202
- return __classPrivateFieldGet(this, _SignerSession_csc, "f").orgId;
203
- }
204
- /**
205
- * Returns the list of keys that this token grants access to.
206
- * @return {KeyInfo[]} The list of keys.
207
- */
208
- async keys() {
209
- const keys = await __classPrivateFieldGet(this, _SignerSession_csc, "f").sessionKeysList();
210
- return keys.map((k) => (0, _1.toKeyInfo)(k));
211
- }
212
- /** Approve a pending MFA request using TOTP. */
213
- get totpApprove() {
214
- return __classPrivateFieldGet(this, _SignerSession_csc, "f").mfaApproveTotp.bind(__classPrivateFieldGet(this, _SignerSession_csc, "f"));
215
- }
216
- /** Initiate approval of an existing MFA request using FIDO. */
217
- get fidoApproveStart() {
218
- return __classPrivateFieldGet(this, _SignerSession_csc, "f").mfaApproveFidoInit.bind(__classPrivateFieldGet(this, _SignerSession_csc, "f"));
219
- }
220
- /** Get a pending MFA request by its id. */
221
- get getMfaInfo() {
222
- return __classPrivateFieldGet(this, _SignerSession_csc, "f").mfaGet.bind(__classPrivateFieldGet(this, _SignerSession_csc, "f"));
223
- }
224
- /** Submit an EVM sign request. */
225
- get signEvm() {
226
- return __classPrivateFieldGet(this, _SignerSession_csc, "f").signEvm.bind(__classPrivateFieldGet(this, _SignerSession_csc, "f"));
227
- }
228
- /** Submit an 'eth2' sign request. */
229
- get signEth2() {
230
- return __classPrivateFieldGet(this, _SignerSession_csc, "f").signEth2.bind(__classPrivateFieldGet(this, _SignerSession_csc, "f"));
231
- }
232
- /** Sign a stake request. */
233
- get stake() {
234
- return __classPrivateFieldGet(this, _SignerSession_csc, "f").signStake.bind(__classPrivateFieldGet(this, _SignerSession_csc, "f"));
235
- }
236
- /** Sign an unstake request. */
237
- get unstake() {
238
- return __classPrivateFieldGet(this, _SignerSession_csc, "f").signUnstake.bind(__classPrivateFieldGet(this, _SignerSession_csc, "f"));
239
- }
240
- /** Sign a raw blob.*/
241
- get signBlob() {
242
- return __classPrivateFieldGet(this, _SignerSession_csc, "f").signBlob.bind(__classPrivateFieldGet(this, _SignerSession_csc, "f"));
243
- }
244
- /** Sign a bitcoin message. */
245
- get signBtc() {
246
- return __classPrivateFieldGet(this, _SignerSession_csc, "f").signBtc.bind(__classPrivateFieldGet(this, _SignerSession_csc, "f"));
247
- }
248
- /** Sign a solana message. */
249
- get signSolana() {
250
- return __classPrivateFieldGet(this, _SignerSession_csc, "f").signSolana.bind(__classPrivateFieldGet(this, _SignerSession_csc, "f"));
251
- }
252
- /** Sign an Avalanche P- or X-chain message. */
253
- get signAva() {
254
- return __classPrivateFieldGet(this, _SignerSession_csc, "f").signAva.bind(__classPrivateFieldGet(this, _SignerSession_csc, "f"));
255
- }
256
- /**
257
- * Obtain a proof of authentication.
258
- */
259
- get proveIdentity() {
260
- return __classPrivateFieldGet(this, _SignerSession_csc, "f").identityProve.bind(__classPrivateFieldGet(this, _SignerSession_csc, "f"));
261
- }
49
+ class SignerSession extends client_1.CubeSignerClient {
262
50
  /**
263
51
  * Loads an existing signer session from storage.
264
52
  * @param {SignerSessionStorage} storage The session storage to use
@@ -274,10 +62,16 @@ class SignerSession {
274
62
  * @internal
275
63
  */
276
64
  constructor(sessionMgr) {
277
- _SignerSession_csc.set(this, void 0);
278
- __classPrivateFieldSet(this, _SignerSession_csc, new client_1.CubeSignerClient(sessionMgr), "f");
65
+ super(sessionMgr);
66
+ }
67
+ /**
68
+ * Returns the list of keys that this token grants access to.
69
+ * @return {KeyInfo[]} The list of keys.
70
+ */
71
+ async keys() {
72
+ const keys = await this.sessionKeysList();
73
+ return keys.map((k) => (0, key_1.toKeyInfo)(k));
279
74
  }
280
75
  }
281
76
  exports.SignerSession = SignerSession;
282
- _SignerSession_csc = new WeakMap();
283
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoic2lnbmVyX3Nlc3Npb24uanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi9zcmMvc2lnbmVyX3Nlc3Npb24udHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6Ijs7Ozs7Ozs7Ozs7Ozs7Ozs7O0FBQUEsb0RBQTRCO0FBQzVCLHdCQUErRDtBQUMvRCxxQ0FBNEM7QUFFNUMsNkVBQThGO0FBTTlGOzs7Ozs7O0dBT0c7QUFDSCxTQUFnQixXQUFXLENBQU8sSUFBaUIsRUFBRSxLQUFrQjtJQUNyRSxJQUFLLElBQXlCLENBQUMsUUFBUSxFQUFFLFdBQVcsRUFBRTtRQUNwRCxPQUFPLElBQXdCLENBQUM7S0FDakM7U0FBTTtRQUNMLE9BQU8sS0FBSyxDQUFDLElBQVMsQ0FBQyxDQUFDO0tBQ3pCO0FBQ0gsQ0FBQztBQU5ELGtDQU1DO0FBV0Q7O0dBRUc7QUFDSCxNQUFhLGtCQUFrQjtJQVM3QiwrREFBK0Q7SUFDL0QsS0FBSztRQUNILE9BQU8sdUJBQUEsSUFBSSx1Q0FBYyxDQUFDLEVBQUUsQ0FBQztJQUMvQixDQUFDO0lBRUQsc0VBQXNFO0lBQ3RFLFdBQVc7UUFDVCxPQUFPLHVCQUFBLElBQUksdUNBQWEsS0FBSyxTQUFTLENBQUM7SUFDekMsQ0FBQztJQUVEOzs7T0FHRztJQUNILGNBQWM7UUFDWixPQUFRLHVCQUFBLElBQUksZ0NBQTJCLENBQUMsUUFBUSxFQUFFLFdBQVcsRUFBRSxPQUFPLElBQUksU0FBUyxDQUFDO0lBQ3RGLENBQUM7SUFFRCwyREFBMkQ7SUFDM0QsSUFBSTtRQUNGLElBQUksSUFBSSxDQUFDLFdBQVcsRUFBRSxFQUFFO1lBQ3RCLE1BQU0sSUFBSSxLQUFLLENBQUMsNENBQTRDLENBQUMsQ0FBQztTQUMvRDtRQUNELE9BQU8sdUJBQUEsSUFBSSxnQ0FBVyxDQUFDO0lBQ3pCLENBQUM7SUFFRDs7Ozs7O09BTUc7SUFDSCxLQUFLLENBQUMsV0FBVyxDQUFDLE9BQXNCLEVBQUUsSUFBWTtRQUNwRCxJQUFBLGdCQUFNLEVBQUMsSUFB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aW1wb3J0IHsgQ3ViZVNpZ25lciwgdG9LZXlJbmZvLCBNZmFSZWNlaXB0LCBLZXlJbmZvIH0gZnJvbSBcIi5cIjtcbmltcG9ydCB7IEN1YmVTaWduZXJDbGllbnQgfSBmcm9tIFwiLi9jbGllbnRcIjtcbmltcG9ydCB7IEFjY2VwdGVkUmVzcG9uc2UsIE5ld1Nlc3Npb25SZXNwb25zZSB9IGZyb20gXCIuL3NjaGVtYV90eXBlc1wiO1xuaW1wb3J0IHsgU2lnbmVyU2Vzc2lvbk1hbmFnZXIsIFNpZ25lclNlc3Npb25TdG9yYWdlIH0gZnJvbSBcIi4vc2Vzc2lvbi9zaWduZXJfc2Vzc2lvbl9tYW5hZ2VyXCI7XG5cbnR5cGUgUmVzcG9uc2U8VT4gPSBVIHwgQWNjZXB0ZWRSZXNwb25zZTtcbnR5cGUgUmVxdWVzdEZuPFU+ID0gKGhlYWRlcnM/OiBIZWFkZXJzSW5pdCkgPT4gUHJvbWlzZTxSZXNwb25zZTxVPj47XG50eXBlIE1hcEZuPFUsIFY+ID0gKHU6IFUpID0+IFY7XG5cbi8qKlxuICogVGFrZXMgYSB7QGxpbmsgUmVzcG9uc2U8VT59IGFuZCBhIHtAbGluayBNYXBGbjxVLCBWPn0gZnVuY3Rpb24gYW5kIHJldHVybnNcbiAqIGEge0BsaW5rIFJlc3BvbnNlPFY+fSB0aGF0IG1hcHMgdGhlIHZhbHVlIG9mIHRoZSBvcmlnaW5hbCByZXNwb25zZSB3aGVuIGl0cyBzdGF0dXMgY29kZSBpcyAyMDAuXG4gKlxuICogQHBhcmFtIHtSZXNwb25zZTxVPn0gcmVzcCBPcmlnaW5hbCByZXNwb25zZVxuICogQHBhcmFtIHtNYXA8VSwgVj59IG1hcEZuIE1hcCB0byBhcHBseSB0byB0aGUgcmVzcG9uc2UgdmFsdWUgd2hlbiBpdHMgc3RhdHVzIGNvZGUgaXMgMjAwLlxuICogQHJldHVybiB7UmVzcG9uc2U8Vj59IFJlc3BvbnNlIHdob3NlIHZhbHVlIGZvciBzdGF0dXMgY29kZSAyMDAgaXMgbWFwcGVkIGZyb20gVSB0byBWXG4gKi9cbmV4cG9ydCBmdW5jdGlvbiBtYXBSZXNwb25zZTxVLCBWPihyZXNwOiBSZXNwb25zZTxVPiwgbWFwRm46IE1hcEZuPFUsIFY+KTogUmVzcG9uc2U8Vj4ge1xuICBpZiAoKHJlc3AgYXMgQWNjZXB0ZWRSZXNwb25zZSkuYWNjZXB0ZWQ/Lk1mYVJlcXVpcmVkKSB7XG4gICAgcmV0dXJuIHJlc3AgYXMgQWNjZXB0ZWRSZXNwb25zZTtcbiAgfSBlbHNlIHtcbiAgICByZXR1cm4gbWFwRm4ocmVzcCBhcyBVKTtcbiAgfVxufVxuXG5leHBvcnQgaW50ZXJmYWNlIE1mYVJlcXVpcmVkIHtcbiAgLyoqIE9yZyBpZCAqL1xuICBvcmdfaWQ6IHN0cmluZztcbiAgLyoqIE1GQSByZXF1ZXN0IGlkICovXG4gIGlkOiBzdHJpbmc7XG4gIC8qKiBPcHRpb25hbCBNRkEgc2Vzc2lvbiAqL1xuICBzZXNzaW9uPzogTmV3U2Vzc2lvblJlc3BvbnNlIHwgbnVsbDtcbn1cblxuLyoqXG4gKiBBIHJlc3BvbnNlIG9mIGEgQ3ViZVNpZ25lciByZXF1ZXN0LlxuICovXG5leHBvcnQgY2xhc3MgQ3ViZVNpZ25lclJlc3BvbnNlPFU+IHtcbiAgcmVhZG9ubHkgI3JlcXVlc3RGbjogUmVxdWVzdEZuPFU+O1xuICByZWFkb25seSAjcmVzcDogVSB8IEFjY2VwdGVkUmVzcG9uc2U7XG4gIC8qKlxuICAgKiBPcHRpb25hbCBNRkEgaWQuIE9ubHkgc2V0IGlmIHRoZXJlIGlzIGFuIE1GQSByZXF1ZXN0IGFzc29jaWF0ZWQgd2l0aCB0aGVcbiAgICogc2lnbmluZyByZXF1ZXN0XG4gICAqL1xuICByZWFkb25seSAjbWZhUmVxdWlyZWQ/OiBNZmFSZXF1aXJlZDtcblxuICAvKiogQHJldHVybiB7c3RyaW5nfSBUaGUgTUZBIGlkIGFzc29jaWF0ZWQgd2l0aCB0aGlzIHJlcXVlc3QgKi9cbiAgbWZhSWQoKTogc3RyaW5nIHtcbiAgICByZXR1cm4gdGhpcy4jbWZhUmVxdWlyZWQhLmlkO1xuICB9XG5cbiAgLyoqIEByZXR1cm4ge2Jvb2xlYW59IFRydWUgaWYgdGhpcyByZXF1ZXN0IHJlcXVpcmVzIGFuIE1GQSBhcHByb3ZhbCAqL1xuICByZXF1aXJlc01mYSgpOiBib29sZWFuIHtcbiAgICByZXR1cm4gdGhpcy4jbWZhUmVxdWlyZWQgIT09IHVuZGVmaW5lZDtcbiAgfVxuXG4gIC8qKlxuICAgKiBSZXR1cm5zIHNlc3Npb24gaW5mb3JtYXRpb24gdG8gdXNlIGZvciBhbnkgTUZBIGFwcHJvdmFsIHJlcXVlc3RzIChpZiBhbnkgd2FzIGluY2x1ZGVkIGluIHRoZSByZXNwb25zZSkuXG4gICAqIEByZXR1cm4ge0NsaWVudFNlc3Npb25JbmZvIHwgdW5kZWZpbmVkfVxuICAgKi9cbiAgbWZhU2Vzc2lvbkluZm8oKTogTmV3U2Vzc2lvblJlc3BvbnNlIHwgdW5kZWZpbmVkIHtcbiAgICByZXR1cm4gKHRoaXMuI3Jlc3AgYXMgQWNjZXB0ZWRSZXNwb25zZSkuYWNjZXB0ZWQ/Lk1mYVJlcXVpcmVkPy5zZXNzaW9uID8/IHVuZGVmaW5lZDtcbiAgfVxuXG4gIC8qKiBAcmV0dXJuIHtVfSBUaGUgcmVzcG9uc2UgZGF0YSwgaWYgbm8gTUZBIGlzIHJlcXVpcmVkICovXG4gIGRhdGEoKTogVSB7XG4gICAgaWYgKHRoaXMucmVxdWlyZXNNZmEoKSkge1xuICAgICAgdGhyb3cgbmV3IEVycm9yKFwiQ2Fubm90IGNhbGwgYGRhdGEoKWAgd2hpbGUgTUZBIGlzIHJlcXVpcmVkXCIpO1xuICAgIH1cbiAgICByZXR1cm4gdGhpcy4jcmVzcCBhcyBVO1xuICB9XG5cbiAgLyoqXG4gICAqIEFwcHJvdmVzIHRoZSBNRkEgcmVxdWVzdCB1c2luZyBhIGdpdmVuIHNlc3Npb24gYW5kIGEgVE9UUCBjb2RlLlxuICAgKlxuICAgKiBAcGFyYW0ge1NpZ25lclNlc3Npb259IHNlc3Npb24gU2lnbmVyIHNlc3Npb24gdG8gdXNlXG4gICAqIEBwYXJhbSB7c3RyaW5nfSBjb2RlIDYtZGlnaXQgVE9UUCBjb2RlXG4gICAqIEByZXR1cm4ge0N1YmVTaWduZXJSZXNwb25zZTxVPn0gVGhlIHJlc3VsdCBvZiBzaWduaW5nIHdpdGggdGhlIGFwcHJvdmFsXG4gICAqL1xuICBhc3luYyBhcHByb3ZlVG90cChzZXNzaW9uOiBTaWduZXJTZXNzaW9uLCBjb2RlOiBzdHJpbmcpOiBQcm9taXNlPEN1YmVTaWduZXJSZXNwb25zZTxVPj4ge1xuICAgIGFzc2VydCh0aGlzLnJlcXVpcmVzTWZhKCkpO1xuICAgIGNvbnN0IG1mYUlkID0gdGhpcy5tZmFJZCgpO1xuICAgIGNvbnN0IG1mYU9yZ0lkID0gdGhpcy4jbWZhUmVxdWlyZWQhLm9yZ19pZDtcbiAgICBjb25zdCBtZmFBcHByb3ZhbCA9IGF3YWl0IHNlc3Npb24udG90cEFwcHJvdmUobWZhSWQsIGNvZGUpO1xuICAgIGFzc2VydChtZmFBcHByb3ZhbC5pZCA9PT0gbWZhSWQpO1xuICAgIGNvbnN0IG1mYUNvbmYgPSBtZmFBcHByb3ZhbC5yZWNlaXB0Py5jb25maXJtYXRpb247XG5cbiAgICBpZiAoIW1mYUNvbmYpIHtcbiAgICAgIHJldHVybiB0aGlzO1xuICAgIH1cblxuICAgIHJldHVybiBhd2FpdCB0aGlzLnNpZ25XaXRoTWZhQXBwcm92YWwoeyBtZmFJZCwgbWZhT3JnSWQsIG1mYUNvbmYgfSk7XG4gIH1cblxuICAvKipcbiAgICogQXBwcm92ZXMgdGhlIE1GQSByZXF1ZXN0IHVzaW5nIGEgZ2l2ZW4gYEN1YmVTaWduZXJDbGllbnRgIGluc3RhbmNlIChpLmUuLCBpdHMgc2Vzc2lvbikuXG4gICAqXG4gICAqIEBwYXJhbSB7Q3ViZVNpZ25lcn0gY3MgQ3ViZVNpZ25lciB3aG9zZSBzZXNzaW9uIHRvIHVzZVxuICAgKiBAcmV0dXJuIHtDdWJlU2lnbmVyUmVzcG9uc2U8VT59IFRoZSByZXN1bHQgb2Ygc2lnbmluZyB3aXRoIHRoZSBhcHByb3ZhbFxuICAgKi9cbiAgYXN5bmMgYXBwcm92ZShjczogQ3ViZVNpZ25lcik6IFByb21pc2U8Q3ViZVNpZ25lclJlc3BvbnNlPFU+PiB7XG4gICAgYXNzZXJ0KHRoaXMucmVxdWlyZXNNZmEoKSk7XG4gICAgY29uc3QgbWZhSWQgPSB0aGlzLiNtZmFSZXF1aXJlZCEuaWQ7XG4gICAgY29uc3QgbWZhT3JnSWQgPSB0aGlzLiNtZmFSZXF1aXJlZCEub3JnX2lkO1xuXG4gICAgY29uc3QgbWZhQXBwcm92YWwgPSBhd2FpdCBjcy5tZmFBcHByb3ZlKG1mYU9yZ0lkLCBtZmFJZCk7XG4gICAgYXNzZXJ0KG1mYUFwcHJvdmFsLmlkID09PSBtZmFJZCk7XG4gICAgY29uc3QgbWZhQ29uZiA9IG1mYUFwcHJvdmFsLnJlY2VpcHQ/LmNvbmZpcm1hdGlvbjtcblxuICAgIGlmICghbWZhQ29uZikge1xuICAgICAgcmV0dXJuIHRoaXM7XG4gICAgfVxuXG4gICAgcmV0dXJuIGF3YWl0IHRoaXMuc2lnbldpdGhNZmFBcHByb3ZhbCh7IG1mYUlkLCBtZmFPcmdJZCwgbWZhQ29uZiB9KTtcbiAgfVxuXG4gIC8qKlxuICAgKiBAcGFyYW0ge01mYVJlY2VpcHR9IG1mYVJlY2VpcHQgVGhlIE1GQSByZWNlaXB0XG4gICAqIEByZXR1cm4ge1Byb21pc2U8Q3ViZVNpZ25lclJlc3BvbnNlPFU+Pn0gVGhlIHJlc3VsdCBvZiBzaWduaW5nIGFmdGVyIE1GQSBhcHByb3ZhbFxuICAgKi9cbiAgYXN5bmMgc2lnbldpdGhNZmFBcHByb3ZhbChtZmFSZWNlaXB0OiBNZmFSZWNlaXB0KTogUHJvbWlzZTxDdWJlU2lnbmVyUmVzcG9uc2U8VT4+IHtcbiAgICBjb25zdCBoZWFkZXJzID0gQ3ViZVNpZ25lclJlc3BvbnNlLmdldE1mYUhlYWRlcnMobWZhUmVjZWlwdCk7XG4gICAgcmV0dXJuIG5ldyBDdWJlU2lnbmVyUmVzcG9uc2UodGhpcy4jcmVxdWVzdEZuLCBhd2FpdCB0aGlzLiNyZXF1ZXN0Rm4oaGVhZGVycykpO1xuICB9XG5cbiAgLy8gLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS1cbiAgLy8gLS0gSU5URVJOQUwgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS1cbiAgLy8gLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS1cblxuICAvKipcbiAgICogQ29uc3RydWN0b3IuXG4gICAqXG4gICAqIEBwYXJhbSB7UmVxdWVzdEZufSByZXF1ZXN0Rm5cbiAgICogICAgVGhlIHNpZ25pbmcgZnVuY3Rpb24gdGhhdCB0aGlzIHJlc3BvbnNlIGlzIGZyb20uXG4gICAqICAgIFRoaXMgYXJndW1lbnQgaXMgdXNlZCB0byByZXNlbmQgcmVxdWVzdHMgd2l0aCBkaWZmZXJlbnQgaGVhZGVycyBpZiBuZWVkZWQuXG4gICAqIEBwYXJhbSB7VSB8IEFjY2VwdGVkUmVzcG9uc2V9IHJlc3AgVGhlIHJlc3BvbnNlIGFzIHJldHVybmVkIGJ5IHRoZSBPcGVuQVBJIGNsaWVudC5cbiAgICovXG4gIGNvbnN0cnVjdG9yKHJlcXVlc3RGbjogUmVxdWVzdEZuPFU+LCByZXNwOiBVIHwgQWNjZXB0ZWRSZXNwb25zZSkge1xuICAgIHRoaXMuI3JlcXVlc3RGbiA9IHJlcXVlc3RGbjtcbiAgICB0aGlzLiNyZXNwID0gcmVzcDtcbiAgICB0aGlzLiNtZmFSZXF1aXJlZCA9ICh0aGlzLiNyZXNwIGFzIEFjY2VwdGVkUmVzcG9uc2UpLmFjY2VwdGVkPy5NZmFSZXF1aXJlZDtcbiAgfVxuXG4gIC8qKlxuICAgKiBTdGF0aWMgY29uc3RydWN0b3IuXG4gICAqIEBwYXJhbSB7UmVxdWVzdEZufSByZXF1ZXN0Rm5cbiAgICogICAgVGhlIHJlcXVlc3QgZnVuY3Rpb24gdGhhdCB0aGlzIHJlc3BvbnNlIGlzIGZyb20uXG4gICAqICAgIFRoaXMgYXJndW1lbnQgaXMgdXNlZCB0byByZXNlbmQgcmVxdWVzdHMgd2l0aCBkaWZmZXJlbnQgaGVhZGVycyBpZiBuZWVkZWQuXG4gICAqIEBwYXJhbSB7TWZhUmVjZWlwdH0gbWZhUmVjZWlwdCBPcHRpb25hbCBNRkEgcmVjZWlwdFxuICAgKiBAcmV0dXJuIHtQcm9taXNlPEN1YmVTaWduZXJSZXNwb25zZTxVPj59IE5ldyBpbnN0YW5jZSBvZiB0aGlzIGNsYXNzLlxuICAgKi9cbiAgc3RhdGljIGFzeW5jIGNyZWF0ZTxVPihcbiAgICByZXF1ZXN0Rm46IFJlcXVlc3RGbjxVPixcbiAgICBtZmFSZWNlaXB0PzogTWZhUmVjZWlwdCxcbiAgKTogUHJvbWlzZTxDdWJlU2lnbmVyUmVzcG9uc2U8VT4+IHtcbiAgICBjb25zdCBzZWVkID0gYXdhaXQgcmVxdWVzdEZuKHRoaXMuZ2V0TWZhSGVhZGVycyhtZmFSZWNlaXB0KSk7XG4gICAgcmV0dXJuIG5ldyBDdWJlU2lnbmVyUmVzcG9uc2UocmVxdWVzdEZuLCBzZWVkKTtcbiAgfVxuXG4gIC8qKlxuICAgKiBSZXR1cm5zIEhUVFAgaGVhZGVycyBjb250YWluaW5nIGEgZ2l2ZW4gTUZBIHJlY2VpcHQuXG4gICAqXG4gICAqIEBwYXJhbSB7TWZhUmVjZWlwdH0gbWZhUmVjZWlwdCBNRkEgcmVjZWlwdFxuICAgKiBAcmV0dXJuIHtIZWFkZXJzSW5pdH0gSGVhZGVycyBpbmNsdWRpbmcgdGhhdCByZWNlaXB0XG4gICAqL1xuICBzdGF0aWMgZ2V0TWZhSGVhZGVycyhtZmFSZWNlaXB0PzogTWZhUmVjZWlwdCk6IEhlYWRlcnNJbml0IHwgdW5kZWZpbmVkIHtcbiAgICByZXR1cm4gbWZhUmVjZWlwdFxuICAgICAgPyB7XG4gICAgICAgICAgXCJ4LWN1YmlzdC1tZmEtaWRcIjogbWZhUmVjZWlwdC5tZmFJZCxcbiAgICAgICAgICBcIngtY3ViaXN0LW1mYS1vcmctaWRcIjogbWZhUmVjZWlwdC5tZmFPcmdJZCxcbiAgICAgICAgICBcIngtY3ViaXN0LW1mYS1jb25maXJtYXRpb25cIjogbWZhUmVjZWlwdC5tZmFDb25mLFxuICAgICAgICB9XG4gICAgICA6IHVuZGVmaW5lZDtcbiAgfVxufVxuXG4vKiogU2lnbmVyIHNlc3Npb24gaW5mby4gQ2FuIG9ubHkgYmUgdXNlZCB0byByZXZva2UgYSB0b2tlbiwgYnV0IG5vdCBmb3IgYXV0aGVudGljYXRpb24uICovXG5leHBvcnQgY2xhc3MgU2lnbmVyU2Vzc2lvbkluZm8ge1xuICByZWFkb25seSAjY3NjOiBDdWJlU2lnbmVyQ2xpZW50O1xuICByZWFkb25seSAjc2Vzc2lvbklkOiBzdHJpbmc7XG4gIHB1YmxpYyByZWFkb25seSBwdXJwb3NlOiBzdHJpbmc7XG5cbiAgLyoqIFJldm9rZSB0aGlzIHNlc3Npb24gKi9cbiAgYXN5bmMgcmV2b2tlKCkge1xuICAgIGF3YWl0IHRoaXMuI2NzYy5zZXNzaW9uUmV2b2tlKHRoaXMuI3Nlc3Npb25JZCk7XG4gIH1cblxuICAvLyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLVxuICAvLyAtLSBJTlRFUk5BTCAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLVxuICAvLyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLVxuXG4gIC8qKlxuICAgKiBJbnRlcm5hbCBjb25zdHJ1Y3Rvci5cbiAgICogQHBhcmFtIHtDdWJlU2lnbmVyQ2xpZW50fSBjcyBDdWJlU2lnbmVyIGluc3RhbmNlIHRvIHVzZSB3aGVuIGNhbGxpbmcgYHJldm9rZWBcbiAgICogQHBhcmFtIHtzdHJpbmd9IHNlc3Npb25JZCBUaGUgSUQgb2YgdGhlIHNlc3Npb247IGNhbiBiZSB1c2VkIGZvciByZXZvY2F0aW9uIGJ1dCBub3QgZm9yIGF1dGhcbiAgICogQHBhcmFtIHtzdHJpbmd9IHB1cnBvc2UgU2Vzc2lvbiBwdXJwb3NlXG4gICAqIEBpbnRlcm5hbFxuICAgKi9cbiAgY29uc3RydWN0b3IoY3M6IEN1YmVTaWduZXJDbGllbnQsIHNlc3Npb25JZDogc3RyaW5nLCBwdXJwb3NlOiBzdHJpbmcpIHtcbiAgICB0aGlzLiNjc2MgPSBjcztcbiAgICB0aGlzLiNzZXNzaW9uSWQgPSBzZXNzaW9uSWQ7XG4gICAgdGhpcy5wdXJwb3NlID0gcHVycG9zZTtcbiAgfVxufVxuXG4vKipcbiAqIFNpZ25lciBzZXNzaW9uLlxuICpcbiAqIEBkZXByZWNhdGVkIFVzZSB7QGxpbmsgQ3ViZVNpZ25lckNsaWVudH0gaW5zdGVhZC5cbiAqL1xuZXhwb3J0IGNsYXNzIFNpZ25lclNlc3Npb24ge1xuICByZWFkb25seSAjY3NjOiBDdWJlU2lnbmVyQ2xpZW50O1xuXG4gIC8qKiBEZXByZWNhdGVkICovXG4gIGdldCBzZXNzaW9uTWdyKCkge1xuICAgIHJldHVybiB0aGlzLiNjc2Muc2Vzc2lvbk1ncjtcbiAgfVxuXG4gIC8qKiBPcmcgaWQgKi9cbiAgZ2V0IG9yZ0lkKCkge1xuICAgIHJldHVybiB0aGlzLiNjc2Mub3JnSWQ7XG4gIH1cblxuICAvKipcbiAgICogUmV0dXJucyB0aGUgbGlzdCBvZiBrZXlzIHRoYXQgdGhpcyB0b2tlbiBncmFudHMgYWNjZXNzIHRvLlxuICAgKiBAcmV0dXJuIHtLZXlJbmZvW119IFRoZSBsaXN0IG9mIGtleXMuXG4gICAqL1xuICBhc3luYyBrZXlzKCk6IFByb21pc2U8S2V5SW5mb1tdPiB7XG4gICAgY29uc3Qga2V5cyA9IGF3YWl0IHRoaXMuI2NzYy5zZXNzaW9uS2V5c0xpc3QoKTtcbiAgICByZXR1cm4ga2V5cy5tYXAoKGspID0+IHRvS2V5SW5mbyhrKSk7XG4gIH1cblxuICAvKiogQXBwcm92ZSBhIHBlbmRpbmcgTUZBIHJlcXVlc3QgdXNpbmcgVE9UUC4gKi9cbiAgZ2V0IHRvdHBBcHByb3ZlKCkge1xuICAgIHJldHVybiB0aGlzLiNjc2MubWZhQXBwcm92ZVRvdHAuYmluZCh0aGlzLiNjc2MpO1xuICB9XG5cbiAgLyoqIEluaXRpYXRlIGFwcHJvdmFsIG9mIGFuIGV4aXN0aW5nIE1GQSByZXF1ZXN0IHVzaW5nIEZJRE8uICovXG4gIGdldCBmaWRvQXBwcm92ZVN0YXJ0KCkge1xuICAgIHJldHVybiB0aGlzLiNjc2MubWZhQXBwcm92ZUZpZG9Jbml0LmJpbmQodGhpcy4jY3NjKTtcbiAgfVxuXG4gIC8qKiBHZXQgYSBwZW5kaW5nIE1GQSByZXF1ZXN0IGJ5IGl0cyBpZC4gKi9cbiAgZ2V0IGdldE1mYUluZm8oKSB7XG4gICAgcmV0dXJuIHRoaXMuI2NzYy5tZmFHZXQuYmluZCh0aGlzLiNjc2MpO1xuICB9XG5cbiAgLyoqIFN1Ym1pdCBhbiBFVk0gc2lnbiByZXF1ZXN0LiAqL1xuICBnZXQgc2lnbkV2bSgpIHtcbiAgICByZXR1cm4gdGhpcy4jY3NjLnNpZ25Fdm0uYmluZCh0aGlzLiNjc2MpO1xuICB9XG5cbiAgLyoqIFN1Ym1pdCBhbiAnZXRoMicgc2lnbiByZXF1ZXN0LiAqL1xuICBnZXQgc2lnbkV0aDIoKSB7XG4gICAgcmV0dXJuIHRoaXMuI2NzYy5zaWduRXRoMi5iaW5kKHRoaXMuI2NzYyk7XG4gIH1cblxuICAvKiogU2lnbiBhIHN0YWtlIHJlcXVlc3QuICovXG4gIGdldCBzdGFrZSgpIHtcbiAgICByZXR1cm4gdGhpcy4jY3NjLnNpZ25TdGFrZS5iaW5kKHRoaXMuI2NzYyk7XG4gIH1cblxuICAvKiogU2lnbiBhbiB1bnN0YWtlIHJlcXVlc3QuICovXG4gIGdldCB1bnN0YWtlKCkge1xuICAgIHJldHVybiB0aGlzLiNjc2Muc2lnblVuc3Rha2UuYmluZCh0aGlzLiNjc2MpO1xuICB9XG5cbiAgLyoqIFNpZ24gYSByYXcgYmxvYi4qL1xuICBnZXQgc2lnbkJsb2IoKSB7XG4gICAgcmV0dXJuIHRoaXMuI2NzYy5zaWduQmxvYi5iaW5kKHRoaXMuI2NzYyk7XG4gIH1cblxuICAvKiogU2lnbiBhIGJpdGNvaW4gbWVzc2FnZS4gKi9cbiAgZ2V0IHNpZ25CdGMoKSB7XG4gICAgcmV0dXJuIHRoaXMuI2NzYy5zaWduQnRjLmJpbmQodGhpcy4jY3NjKTtcbiAgfVxuXG4gIC8qKiBTaWduIGEgc29sYW5hIG1lc3NhZ2UuICovXG4gIGdldCBzaWduU29sYW5hKCkge1xuICAgIHJldHVybiB0aGlzLiNjc2Muc2lnblNvbGFuYS5iaW5kKHRoaXMuI2NzYyk7XG4gIH1cblxuICAvKiogU2lnbiBhbiBBdmFsYW5jaGUgUC0gb3IgWC1jaGFpbiBtZXNzYWdlLiAqL1xuICBnZXQgc2lnbkF2YSgpIHtcbiAgICByZXR1cm4gdGhpcy4jY3NjLnNpZ25BdmEuYmluZCh0aGlzLiNjc2MpO1xuICB9XG5cbiAgLyoqXG4gICAqIE9idGFpbiBhIHByb29mIG9mIGF1dGhlbnRpY2F0aW9uLlxuICAgKi9cbiAgZ2V0IHByb3ZlSWRlbnRpdHkoKSB7XG4gICAgcmV0dXJuIHRoaXMuI2NzYy5pZGVudGl0eVByb3ZlLmJpbmQodGhpcy4jY3NjKTtcbiAgfVxuXG4gIC8qKlxuICAgKiBMb2FkcyBhbiBleGlzdGluZyBzaWduZXIgc2Vzc2lvbiBmcm9tIHN0b3JhZ2UuXG4gICAqIEBwYXJhbSB7U2lnbmVyU2Vzc2lvblN0b3JhZ2V9IHN0b3JhZ2UgVGhlIHNlc3Npb24gc3RvcmFnZSB0byB1c2VcbiAgICogQHJldHVybiB7UHJvbWlzZTxTaW5nZXJTZXNzaW9uPn0gTmV3IHNpZ25lciBzZXNzaW9uXG4gICAqL1xuICBzdGF0aWMgYXN5bmMgbG9hZFNpZ25lclNlc3Npb24oc3RvcmFnZTogU2lnbmVyU2Vzc2lvblN0b3JhZ2UpOiBQcm9taXNlPFNpZ25lclNlc3Npb24+IHtcbiAgICBjb25zdCBtYW5hZ2VyID0gYXdhaXQgU2lnbmVyU2Vzc2lvbk1hbmFnZXIubG9hZEZyb21TdG9yYWdlKHN0b3JhZ2UpO1xuICAgIHJldHVybiBuZXcgU2lnbmVyU2Vzc2lvbihtYW5hZ2VyKTtcbiAgfVxuXG4gIC8qKlxuICAgKiBDb25zdHJ1Y3Rvci5cbiAgICogQHBhcmFtIHtTaWduZXJTZXNzaW9uTWFuYWdlcn0gc2Vzc2lvbk1nciBUaGUgc2Vzc2lvbiBtYW5hZ2VyIHRvIHVzZVxuICAgKiBAaW50ZXJuYWxcbiAgICovXG4gIGNvbnN0cnVjdG9yKHNlc3Npb25NZ3I6IFNpZ25lclNlc3Npb25NYW5hZ2VyKSB7XG4gICAgdGhpcy4jY3NjID0gbmV3IEN1YmVTaWduZXJDbGllbnQoc2Vzc2lvbk1ncik7XG4gIH1cbn1cbiJdfQ==
77
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoic2lnbmVyX3Nlc3Npb24uanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi9zcmMvc2lnbmVyX3Nlc3Npb24udHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6Ijs7Ozs7Ozs7Ozs7Ozs7O0FBQUEscUNBQTRDO0FBQzVDLCtCQUEyQztBQUMzQyw2RUFBOEY7QUFFOUYsMkZBQTJGO0FBQzNGLE1BQWEsaUJBQWlCO0lBSzVCLDBCQUEwQjtJQUMxQixLQUFLLENBQUMsTUFBTTtRQUNWLE1BQU0sdUJBQUEsSUFBSSw4QkFBSyxDQUFDLGFBQWEsQ0FBQyx1QkFBQSxJQUFJLG9DQUFXLENBQUMsQ0FBQztJQUNqRCxDQUFDO0lBRUQsNkVBQTZFO0lBQzdFLDZFQUE2RTtJQUM3RSw2RUFBNkU7SUFFN0U7Ozs7OztPQU1HO0lBQ0gsWUFBWSxFQUFvQixFQUFFLFNBQWlCLEVBQUUsT0FBZTtRQXBCM0QseUNBQXVCO1FBQ3ZCLCtDQUFtQjtRQW9CMUIsdUJBQUEsSUFBSSwwQkFBUSxFQUFFLE1BQUEsQ0FBQztRQUNmLHVCQUFBLElBQUksZ0NBQWMsU0FBUyxNQUFBLENBQUM7UUFDNUIsSUFBSSxDQUFDLE9BQU8sR0FBRyxPQUFPLENBQUM7SUFDekIsQ0FBQztDQUNGO0FBMUJELDhDQTBCQzs7QUFFRDs7O0dBR0c7QUFDSCxNQUFhLGFBQWMsU0FBUSx5QkFBZ0I7SUFDakQ7Ozs7T0FJRztJQUNILE1BQU0sQ0FBQyxLQUFLLENBQUMsaUJBQWlCLENBQUMsT0FBNkI7UUFDMUQsTUFBTSxPQUFPLEdBQUcsTUFBTSw2Q0FBb0IsQ0FBQyxlQUFlLENBQUMsT0FBTyxDQUFDLENBQUM7UUFDcEUsT0FBTyxJQUFJLGFBQWEsQ0FBQyxPQUFPLENBQUMsQ0FBQztJQUNwQyxDQUFDO0lBRUQ7Ozs7T0FJRztJQUNILFlBQVksVUFBZ0M7UUFDMUMsS0FBSyxDQUFDLFVBQVUsQ0FBQyxDQUFDO0lBQ3BCLENBQUM7SUFFRDs7O09BR0c7SUFDSCxLQUFLLENBQUMsSUFBSTtRQUNSLE1BQU0sSUFBSSxHQUFHLE1BQU0sSUFBSSxDQUFDLGVBQWUsRUFBRSxDQUFDO1FBQzFDLE9BQU8sSUFBSSxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUMsRUFBRSxFQUFFLENBQUMsSUFBQSxlQUFTLEVBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQztJQUN2QyxDQUFDO0NBQ0Y7QUE1QkQsc0NBNEJDIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgQ3ViZVNpZ25lckNsaWVudCB9IGZyb20gXCIuL2NsaWVudFwiO1xuaW1wb3J0IHsgS2V5SW5mbywgdG9LZXlJbmZvIH0gZnJvbSBcIi4va2V5XCI7XG5pbXBvcnQgeyBTaWduZXJTZXNzaW9uTWFuYWdlciwgU2lnbmVyU2Vzc2lvblN0b3JhZ2UgfSBmcm9tIFwiLi9zZXNzaW9uL3NpZ25lcl9zZXNzaW9uX21hbmFnZXJcIjtcblxuLyoqIFNpZ25lciBzZXNzaW9uIGluZm8uIENhbiBvbmx5IGJlIHVzZWQgdG8gcmV2b2tlIGEgdG9rZW4sIGJ1dCBub3QgZm9yIGF1dGhlbnRpY2F0aW9uLiAqL1xuZXhwb3J0IGNsYXNzIFNpZ25lclNlc3Npb25JbmZvIHtcbiAgcmVhZG9ubHkgI2NzYzogQ3ViZVNpZ25lckNsaWVudDtcbiAgcmVhZG9ubHkgI3Nlc3Npb25JZDogc3RyaW5nO1xuICBwdWJsaWMgcmVhZG9ubHkgcHVycG9zZTogc3RyaW5nO1xuXG4gIC8qKiBSZXZva2UgdGhpcyBzZXNzaW9uICovXG4gIGFzeW5jIHJldm9rZSgpIHtcbiAgICBhd2FpdCB0aGlzLiNjc2Muc2Vzc2lvblJldm9rZSh0aGlzLiNzZXNzaW9uSWQpO1xuICB9XG5cbiAgLy8gLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS1cbiAgLy8gLS0gSU5URVJOQUwgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS1cbiAgLy8gLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS1cblxuICAvKipcbiAgICogSW50ZXJuYWwgY29uc3RydWN0b3IuXG4gICAqIEBwYXJhbSB7Q3ViZVNpZ25lckNsaWVudH0gY3MgQ3ViZVNpZ25lciBpbnN0YW5jZSB0byB1c2Ugd2hlbiBjYWxsaW5nIGByZXZva2VgXG4gICAqIEBwYXJhbSB7c3RyaW5nfSBzZXNzaW9uSWQgVGhlIElEIG9mIHRoZSBzZXNzaW9uOyBjYW4gYmUgdXNlZCBmb3IgcmV2b2NhdGlvbiBidXQgbm90IGZvciBhdXRoXG4gICAqIEBwYXJhbSB7c3RyaW5nfSBwdXJwb3NlIFNlc3Npb24gcHVycG9zZVxuICAgKiBAaW50ZXJuYWxcbiAgICovXG4gIGNvbnN0cnVjdG9yKGNzOiBDdWJlU2lnbmVyQ2xpZW50LCBzZXNzaW9uSWQ6IHN0cmluZywgcHVycG9zZTogc3RyaW5nKSB7XG4gICAgdGhpcy4jY3NjID0gY3M7XG4gICAgdGhpcy4jc2Vzc2lvbklkID0gc2Vzc2lvbklkO1xuICAgIHRoaXMucHVycG9zZSA9IHB1cnBvc2U7XG4gIH1cbn1cblxuLyoqXG4gKiBTaWduZXIgc2Vzc2lvbi5cbiAqIEV4dGVuZHMge0BsaW5rIEN1YmVTaWduZXJDbGllbnR9IGFuZCBwcm92aWRlcyBhIGZldyBjb252ZW5pZW5jZSBtZXRob2RzIG9uIHRvcC5cbiAqL1xuZXhwb3J0IGNsYXNzIFNpZ25lclNlc3Npb24gZXh0ZW5kcyBDdWJlU2lnbmVyQ2xpZW50IHtcbiAgLyoqXG4gICAqIExvYWRzIGFuIGV4aXN0aW5nIHNpZ25lciBzZXNzaW9uIGZyb20gc3RvcmFnZS5cbiAgICogQHBhcmFtIHtTaWduZXJTZXNzaW9uU3RvcmFnZX0gc3RvcmFnZSBUaGUgc2Vzc2lvbiBzdG9yYWdlIHRvIHVzZVxuICAgKiBAcmV0dXJuIHtQcm9taXNlPFNpbmdlclNlc3Npb24+fSBOZXcgc2lnbmVyIHNlc3Npb25cbiAgICovXG4gIHN0YXRpYyBhc3luYyBsb2FkU2lnbmVyU2Vzc2lvbihzdG9yYWdlOiBTaWduZXJTZXNzaW9uU3RvcmFnZSk6IFByb21pc2U8U2lnbmVyU2Vzc2lvbj4ge1xuICAgIGNvbnN0IG1hbmFnZXIgPSBhd2FpdCBTaWduZXJTZXNzaW9uTWFuYWdlci5sb2FkRnJvbVN0b3JhZ2Uoc3RvcmFnZSk7XG4gICAgcmV0dXJuIG5ldyBTaWduZXJTZXNzaW9uKG1hbmFnZXIpO1xuICB9XG5cbiAgLyoqXG4gICAqIENvbnN0cnVjdG9yLlxuICAgKiBAcGFyYW0ge1NpZ25lclNlc3Npb25NYW5hZ2VyfSBzZXNzaW9uTWdyIFRoZSBzZXNzaW9uIG1hbmFnZXIgdG8gdXNlXG4gICAqIEBpbnRlcm5hbFxuICAgKi9cbiAgY29uc3RydWN0b3Ioc2Vzc2lvbk1ncjogU2lnbmVyU2Vzc2lvbk1hbmFnZXIpIHtcbiAgICBzdXBlcihzZXNzaW9uTWdyKTtcbiAgfVxuXG4gIC8qKlxuICAgKiBSZXR1cm5zIHRoZSBsaXN0IG9mIGtleXMgdGhhdCB0aGlzIHRva2VuIGdyYW50cyBhY2Nlc3MgdG8uXG4gICAqIEByZXR1cm4ge0tleUluZm9bXX0gVGhlIGxpc3Qgb2Yga2V5cy5cbiAgICovXG4gIGFzeW5jIGtleXMoKTogUHJvbWlzZTxLZXlJbmZvW10+IHtcbiAgICBjb25zdCBrZXlzID0gYXdhaXQgdGhpcy5zZXNzaW9uS2V5c0xpc3QoKTtcbiAgICByZXR1cm4ga2V5cy5tYXAoKGspID0+IHRvS2V5SW5mbyhrKSk7XG4gIH1cbn1cbiJdfQ==
@@ -0,0 +1,52 @@
1
+ import { UserExportCompleteResponse, UserExportKeyMaterial } from "./schema_types";
2
+ import type { CipherSuite } from "@hpke/core";
3
+ /** Get the HPKE ciphersuite for user-export decryption.
4
+ *
5
+ * @return {any} The HPKE ciphersuite for user export.
6
+ */
7
+ export declare function userExportCipherSuite(): Promise<CipherSuite>;
8
+ /**
9
+ * Generate a key pair for user export.
10
+ *
11
+ * @return {Promise<CryptoKeyPair>} The newly generated key pair.
12
+ */
13
+ export declare function userExportKeygen(): Promise<CryptoKeyPair>;
14
+ /**
15
+ * Decrypt a user export.
16
+ *
17
+ * @param {CryptoKey} recipientKey The NIST P-256 secret key corresponding to the `publicKey` argument to the `userExportComplete` invocation that returned `response`.
18
+ * @param {UserExportCompleteResponse} response The response from a successful `userExportComplete` request.
19
+ * @return {Promise<UserExportKeyMaterial>} The decrypted key material.
20
+ */
21
+ export declare function userExportDecrypt(recipientKey: CryptoKey, response: UserExportCompleteResponse): Promise<UserExportKeyMaterial>;
22
+ /**
23
+ * Figure out how to load SubtleCrypto in the current environment.
24
+ *
25
+ * This functionality is reproduced from the hpke-js package,
26
+ * https://github.com/dajiaji/hpke-js/
27
+ * which is Copyright (C) 2022 Ajitomi Daisuke and licensed
28
+ * under the MIT License, which follows:
29
+ *
30
+ * MIT License
31
+ *
32
+ * Copyright (c) 2022 Ajitomi Daisuke
33
+ *
34
+ * Permission is hereby granted, free of charge, to any person obtaining a copy
35
+ * of this software and associated documentation files (the "Software"), to deal
36
+ * in the Software without restriction, including without limitation the rights
37
+ * to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
38
+ * copies of the Software, and to permit persons to whom the Software is
39
+ * furnished to do so, subject to the following conditions:
40
+ *
41
+ * The above copyright notice and this permission notice shall be included in all
42
+ * copies or substantial portions of the Software.
43
+ *
44
+ * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
45
+ * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
46
+ * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
47
+ * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
48
+ * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
49
+ * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
50
+ * SOFTWARE.
51
+ */
52
+ export declare function loadSubtleCrypto(): Promise<SubtleCrypto>;