@metamask-previews/eth-qr-keyring 1.0.0-e4f6caa → 1.1.0-9fbf2ff

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 (48) hide show
  1. package/CHANGELOG.md +19 -1
  2. package/dist/device.cjs +345 -0
  3. package/dist/device.cjs.map +1 -0
  4. package/dist/device.d.cts +175 -0
  5. package/dist/device.d.cts.map +1 -0
  6. package/dist/device.d.mts +175 -0
  7. package/dist/device.d.mts.map +1 -0
  8. package/dist/device.mjs +345 -0
  9. package/dist/device.mjs.map +1 -0
  10. package/dist/index.cjs +9 -16
  11. package/dist/index.cjs.map +1 -1
  12. package/dist/index.d.cts +3 -2
  13. package/dist/index.d.cts.map +1 -1
  14. package/dist/index.d.mts +3 -2
  15. package/dist/index.d.mts.map +1 -1
  16. package/dist/index.mjs +3 -2
  17. package/dist/index.mjs.map +1 -1
  18. package/dist/qr-keyring-deferred-promise-bridge.cjs +76 -0
  19. package/dist/qr-keyring-deferred-promise-bridge.cjs.map +1 -0
  20. package/dist/qr-keyring-deferred-promise-bridge.d.cts +46 -0
  21. package/dist/qr-keyring-deferred-promise-bridge.d.cts.map +1 -0
  22. package/dist/qr-keyring-deferred-promise-bridge.d.mts +46 -0
  23. package/dist/qr-keyring-deferred-promise-bridge.d.mts.map +1 -0
  24. package/dist/qr-keyring-deferred-promise-bridge.mjs +72 -0
  25. package/dist/qr-keyring-deferred-promise-bridge.mjs.map +1 -0
  26. package/dist/qr-keyring-scanner-bridge.cjs +2 -2
  27. package/dist/qr-keyring-scanner-bridge.cjs.map +1 -1
  28. package/dist/qr-keyring-scanner-bridge.d.cts +3 -3
  29. package/dist/qr-keyring-scanner-bridge.d.mts +3 -3
  30. package/dist/qr-keyring-scanner-bridge.mjs +2 -2
  31. package/dist/qr-keyring-scanner-bridge.mjs.map +1 -1
  32. package/dist/qr-keyring.cjs +65 -137
  33. package/dist/qr-keyring.cjs.map +1 -1
  34. package/dist/qr-keyring.d.cts +17 -4
  35. package/dist/qr-keyring.d.cts.map +1 -1
  36. package/dist/qr-keyring.d.mts +17 -4
  37. package/dist/qr-keyring.d.mts.map +1 -1
  38. package/dist/qr-keyring.mjs +66 -138
  39. package/dist/qr-keyring.mjs.map +1 -1
  40. package/package.json +6 -5
  41. package/dist/airgapped-signer.cjs +0 -270
  42. package/dist/airgapped-signer.cjs.map +0 -1
  43. package/dist/airgapped-signer.d.cts +0 -140
  44. package/dist/airgapped-signer.d.cts.map +0 -1
  45. package/dist/airgapped-signer.d.mts +0 -140
  46. package/dist/airgapped-signer.d.mts.map +0 -1
  47. package/dist/airgapped-signer.mjs +0 -270
  48. package/dist/airgapped-signer.mjs.map +0 -1
@@ -1 +1 @@
1
- {"version":3,"file":"index.mjs","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAAA,gDAA4C;AAC5C,iCAA6B","sourcesContent":["export * from './qr-keyring-scanner-bridge';\nexport * from './qr-keyring';\n"]}
1
+ {"version":3,"file":"index.mjs","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAAA,OAAO,EACL,sBAAsB,EAEvB,wCAAoC;AACrC,OAAO,EACL,8BAA8B,EAE/B,iDAA6C;AAC9C,OAAO,EACL,SAAS,EACT,eAAe,EACf,iBAAiB,EAOlB,yBAAqB","sourcesContent":["export {\n QrKeyringScannerBridge,\n type QrKeyringScannerBridgeOptions,\n} from './qr-keyring-scanner-bridge';\nexport {\n QrKeyringDeferredPromiseBridge,\n type QrKeyringDeferredPromiseBridgeOptions,\n} from './qr-keyring-deferred-promise-bridge';\nexport {\n QrKeyring,\n QR_KEYRING_TYPE,\n QrScanRequestType,\n type QrScanRequest,\n type QrKeyringBridge,\n type QrKeyringOptions,\n type QrSignatureRequest,\n type SerializedQrKeyringState,\n type SerializedUR,\n} from './qr-keyring';\n"]}
@@ -0,0 +1,76 @@
1
+ "use strict";
2
+ var __classPrivateFieldSet = (this && this.__classPrivateFieldSet) || function (receiver, state, value, kind, f) {
3
+ if (kind === "m") throw new TypeError("Private method is not writable");
4
+ if (kind === "a" && !f) throw new TypeError("Private accessor was defined without a setter");
5
+ 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");
6
+ return (kind === "a" ? f.call(receiver, value) : f ? f.value = value : state.set(receiver, value)), value;
7
+ };
8
+ var __classPrivateFieldGet = (this && this.__classPrivateFieldGet) || function (receiver, state, kind, f) {
9
+ if (kind === "a" && !f) throw new TypeError("Private accessor was defined without a getter");
10
+ if (typeof state === "function" ? receiver !== state || !f : !state.has(receiver)) throw new TypeError("Cannot read private member from an object whose class did not declare it");
11
+ return kind === "m" ? f : kind === "a" ? f.call(receiver) : f ? f.value : state.get(receiver);
12
+ };
13
+ var _QrKeyringDeferredPromiseBridge_lock, _QrKeyringDeferredPromiseBridge_onScanRequested, _QrKeyringDeferredPromiseBridge_onScanResolved, _QrKeyringDeferredPromiseBridge_onScanRejected, _QrKeyringDeferredPromiseBridge_pendingScan;
14
+ Object.defineProperty(exports, "__esModule", { value: true });
15
+ exports.QrKeyringDeferredPromiseBridge = void 0;
16
+ const utils_1 = require("@metamask/utils");
17
+ const async_mutex_1 = require("async-mutex");
18
+ /**
19
+ * A bridge that turns the scan request into a deferred promise, allowing
20
+ * the consumer to control the resolution and rejection of the scan.
21
+ */
22
+ class QrKeyringDeferredPromiseBridge {
23
+ constructor({ onScanRequested, onScanResolved, onScanRejected, } = {}) {
24
+ _QrKeyringDeferredPromiseBridge_lock.set(this, new async_mutex_1.Mutex());
25
+ _QrKeyringDeferredPromiseBridge_onScanRequested.set(this, void 0);
26
+ _QrKeyringDeferredPromiseBridge_onScanResolved.set(this, void 0);
27
+ _QrKeyringDeferredPromiseBridge_onScanRejected.set(this, void 0);
28
+ _QrKeyringDeferredPromiseBridge_pendingScan.set(this, void 0);
29
+ __classPrivateFieldSet(this, _QrKeyringDeferredPromiseBridge_onScanRequested, onScanRequested, "f");
30
+ __classPrivateFieldSet(this, _QrKeyringDeferredPromiseBridge_onScanResolved, onScanResolved, "f");
31
+ __classPrivateFieldSet(this, _QrKeyringDeferredPromiseBridge_onScanRejected, onScanRejected, "f");
32
+ }
33
+ /**
34
+ * Request a QR code scan, obtaining a CBOR and a type as response.
35
+ *
36
+ * @param request - The type of QR scan request.
37
+ * @returns A promise that resolves with the scanned data as a serialized UR.
38
+ */
39
+ async requestScan(request) {
40
+ return __classPrivateFieldGet(this, _QrKeyringDeferredPromiseBridge_lock, "f").runExclusive(async () => {
41
+ const deferredPromise = (0, utils_1.createDeferredPromise)();
42
+ __classPrivateFieldSet(this, _QrKeyringDeferredPromiseBridge_pendingScan, deferredPromise, "f");
43
+ __classPrivateFieldGet(this, _QrKeyringDeferredPromiseBridge_onScanRequested, "f")?.call(this, request);
44
+ return deferredPromise.promise;
45
+ });
46
+ }
47
+ /**
48
+ * Resolve the pending scan with the given result.
49
+ *
50
+ * @param result - The scanned data as a serialized UR.
51
+ */
52
+ resolvePendingScan(result) {
53
+ if (!__classPrivateFieldGet(this, _QrKeyringDeferredPromiseBridge_pendingScan, "f")) {
54
+ throw new Error('No pending scan to resolve.');
55
+ }
56
+ __classPrivateFieldGet(this, _QrKeyringDeferredPromiseBridge_pendingScan, "f").resolve(result);
57
+ __classPrivateFieldSet(this, _QrKeyringDeferredPromiseBridge_pendingScan, null, "f");
58
+ __classPrivateFieldGet(this, _QrKeyringDeferredPromiseBridge_onScanResolved, "f")?.call(this, result);
59
+ }
60
+ /**
61
+ * Reject the pending scan with the given error.
62
+ *
63
+ * @param error - The error to reject the scan with.
64
+ */
65
+ rejectPendingScan(error) {
66
+ if (!__classPrivateFieldGet(this, _QrKeyringDeferredPromiseBridge_pendingScan, "f")) {
67
+ throw new Error('No pending scan to reject.');
68
+ }
69
+ __classPrivateFieldGet(this, _QrKeyringDeferredPromiseBridge_pendingScan, "f").reject(error);
70
+ __classPrivateFieldSet(this, _QrKeyringDeferredPromiseBridge_pendingScan, null, "f");
71
+ __classPrivateFieldGet(this, _QrKeyringDeferredPromiseBridge_onScanRejected, "f")?.call(this, error);
72
+ }
73
+ }
74
+ exports.QrKeyringDeferredPromiseBridge = QrKeyringDeferredPromiseBridge;
75
+ _QrKeyringDeferredPromiseBridge_lock = new WeakMap(), _QrKeyringDeferredPromiseBridge_onScanRequested = new WeakMap(), _QrKeyringDeferredPromiseBridge_onScanResolved = new WeakMap(), _QrKeyringDeferredPromiseBridge_onScanRejected = new WeakMap(), _QrKeyringDeferredPromiseBridge_pendingScan = new WeakMap();
76
+ //# sourceMappingURL=qr-keyring-deferred-promise-bridge.cjs.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"qr-keyring-deferred-promise-bridge.cjs","sourceRoot":"","sources":["../src/qr-keyring-deferred-promise-bridge.ts"],"names":[],"mappings":";;;;;;;;;;;;;;;AAAA,2CAA8E;AAC9E,6CAAoC;AA0BpC;;;GAGG;AACH,MAAa,8BAA8B;IAWzC,YAAY,EACV,eAAe,EACf,cAAc,EACd,cAAc,MAC2B,EAAE;QAdpC,+CAAQ,IAAI,mBAAK,EAAE,EAAC;QAEpB,kEAAkE;QAElE,iEAA+D;QAE/D,iEAAuD;QAEhE,8DAAoD;QAOlD,uBAAA,IAAI,mDAAoB,eAAe,MAAA,CAAC;QACxC,uBAAA,IAAI,kDAAmB,cAAc,MAAA,CAAC;QACtC,uBAAA,IAAI,kDAAmB,cAAc,MAAA,CAAC;IACxC,CAAC;IAED;;;;;OAKG;IACH,KAAK,CAAC,WAAW,CAAC,OAAsB;QACtC,OAAO,uBAAA,IAAI,4CAAM,CAAC,YAAY,CAAC,KAAK,IAAI,EAAE;YACxC,MAAM,eAAe,GAAG,IAAA,6BAAqB,GAAgB,CAAC;YAC9D,uBAAA,IAAI,+CAAgB,eAAe,MAAA,CAAC;YACpC,uBAAA,IAAI,uDAAiB,EAAE,KAAvB,IAAI,EAAoB,OAAO,CAAC,CAAC;YACjC,OAAO,eAAe,CAAC,OAAO,CAAC;QACjC,CAAC,CAAC,CAAC;IACL,CAAC;IAED;;;;OAIG;IACH,kBAAkB,CAAC,MAAoB;QACrC,IAAI,CAAC,uBAAA,IAAI,mDAAa,EAAE,CAAC;YACvB,MAAM,IAAI,KAAK,CAAC,6BAA6B,CAAC,CAAC;QACjD,CAAC;QACD,uBAAA,IAAI,mDAAa,CAAC,OAAO,CAAC,MAAM,CAAC,CAAC;QAClC,uBAAA,IAAI,+CAAgB,IAAI,MAAA,CAAC;QACzB,uBAAA,IAAI,sDAAgB,EAAE,KAAtB,IAAI,EAAmB,MAAM,CAAC,CAAC;IACjC,CAAC;IAED;;;;OAIG;IACH,iBAAiB,CAAC,KAAY;QAC5B,IAAI,CAAC,uBAAA,IAAI,mDAAa,EAAE,CAAC;YACvB,MAAM,IAAI,KAAK,CAAC,4BAA4B,CAAC,CAAC;QAChD,CAAC;QACD,uBAAA,IAAI,mDAAa,CAAC,MAAM,CAAC,KAAK,CAAC,CAAC;QAChC,uBAAA,IAAI,+CAAgB,IAAI,MAAA,CAAC;QACzB,uBAAA,IAAI,sDAAgB,EAAE,KAAtB,IAAI,EAAmB,KAAK,CAAC,CAAC;IAChC,CAAC;CACF;AA/DD,wEA+DC","sourcesContent":["import { type DeferredPromise, createDeferredPromise } from '@metamask/utils';\nimport { Mutex } from 'async-mutex';\n\nimport type {\n QrKeyringBridge,\n QrScanRequest,\n SerializedUR,\n} from './qr-keyring';\n\nexport type QrKeyringDeferredPromiseBridgeOptions = {\n /**\n * Callback invoked when a scan request is made.\n * This can be used to trigger the actual scanning process.\n */\n onScanRequested?: (request: QrScanRequest) => void;\n /**\n * Callback invoked when a scan is successfully resolved.\n * This can be used to handle the result of the scan.\n */\n onScanResolved?: (result: SerializedUR) => void;\n /**\n * Callback invoked when a scan is rejected with an error.\n * This can be used to handle errors that occur during the scan.\n */\n onScanRejected?: (error: Error) => void;\n};\n\n/**\n * A bridge that turns the scan request into a deferred promise, allowing\n * the consumer to control the resolution and rejection of the scan.\n */\nexport class QrKeyringDeferredPromiseBridge implements QrKeyringBridge {\n readonly #lock = new Mutex();\n\n readonly #onScanRequested?: ((request: QrScanRequest) => void) | undefined;\n\n readonly #onScanResolved?: ((result: SerializedUR) => void) | undefined;\n\n readonly #onScanRejected?: ((error: Error) => void) | undefined;\n\n #pendingScan?: DeferredPromise<SerializedUR> | null;\n\n constructor({\n onScanRequested,\n onScanResolved,\n onScanRejected,\n }: QrKeyringDeferredPromiseBridgeOptions = {}) {\n this.#onScanRequested = onScanRequested;\n this.#onScanResolved = onScanResolved;\n this.#onScanRejected = onScanRejected;\n }\n\n /**\n * Request a QR code scan, obtaining a CBOR and a type as response.\n *\n * @param request - The type of QR scan request.\n * @returns A promise that resolves with the scanned data as a serialized UR.\n */\n async requestScan(request: QrScanRequest): Promise<SerializedUR> {\n return this.#lock.runExclusive(async () => {\n const deferredPromise = createDeferredPromise<SerializedUR>();\n this.#pendingScan = deferredPromise;\n this.#onScanRequested?.(request);\n return deferredPromise.promise;\n });\n }\n\n /**\n * Resolve the pending scan with the given result.\n *\n * @param result - The scanned data as a serialized UR.\n */\n resolvePendingScan(result: SerializedUR): void {\n if (!this.#pendingScan) {\n throw new Error('No pending scan to resolve.');\n }\n this.#pendingScan.resolve(result);\n this.#pendingScan = null;\n this.#onScanResolved?.(result);\n }\n\n /**\n * Reject the pending scan with the given error.\n *\n * @param error - The error to reject the scan with.\n */\n rejectPendingScan(error: Error): void {\n if (!this.#pendingScan) {\n throw new Error('No pending scan to reject.');\n }\n this.#pendingScan.reject(error);\n this.#pendingScan = null;\n this.#onScanRejected?.(error);\n }\n}\n"]}
@@ -0,0 +1,46 @@
1
+ import type { QrKeyringBridge, QrScanRequest, SerializedUR } from "./qr-keyring.cjs";
2
+ export type QrKeyringDeferredPromiseBridgeOptions = {
3
+ /**
4
+ * Callback invoked when a scan request is made.
5
+ * This can be used to trigger the actual scanning process.
6
+ */
7
+ onScanRequested?: (request: QrScanRequest) => void;
8
+ /**
9
+ * Callback invoked when a scan is successfully resolved.
10
+ * This can be used to handle the result of the scan.
11
+ */
12
+ onScanResolved?: (result: SerializedUR) => void;
13
+ /**
14
+ * Callback invoked when a scan is rejected with an error.
15
+ * This can be used to handle errors that occur during the scan.
16
+ */
17
+ onScanRejected?: (error: Error) => void;
18
+ };
19
+ /**
20
+ * A bridge that turns the scan request into a deferred promise, allowing
21
+ * the consumer to control the resolution and rejection of the scan.
22
+ */
23
+ export declare class QrKeyringDeferredPromiseBridge implements QrKeyringBridge {
24
+ #private;
25
+ constructor({ onScanRequested, onScanResolved, onScanRejected, }?: QrKeyringDeferredPromiseBridgeOptions);
26
+ /**
27
+ * Request a QR code scan, obtaining a CBOR and a type as response.
28
+ *
29
+ * @param request - The type of QR scan request.
30
+ * @returns A promise that resolves with the scanned data as a serialized UR.
31
+ */
32
+ requestScan(request: QrScanRequest): Promise<SerializedUR>;
33
+ /**
34
+ * Resolve the pending scan with the given result.
35
+ *
36
+ * @param result - The scanned data as a serialized UR.
37
+ */
38
+ resolvePendingScan(result: SerializedUR): void;
39
+ /**
40
+ * Reject the pending scan with the given error.
41
+ *
42
+ * @param error - The error to reject the scan with.
43
+ */
44
+ rejectPendingScan(error: Error): void;
45
+ }
46
+ //# sourceMappingURL=qr-keyring-deferred-promise-bridge.d.cts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"qr-keyring-deferred-promise-bridge.d.cts","sourceRoot":"","sources":["../src/qr-keyring-deferred-promise-bridge.ts"],"names":[],"mappings":"AAGA,OAAO,KAAK,EACV,eAAe,EACf,aAAa,EACb,YAAY,EACb,yBAAqB;AAEtB,MAAM,MAAM,qCAAqC,GAAG;IAClD;;;OAGG;IACH,eAAe,CAAC,EAAE,CAAC,OAAO,EAAE,aAAa,KAAK,IAAI,CAAC;IACnD;;;OAGG;IACH,cAAc,CAAC,EAAE,CAAC,MAAM,EAAE,YAAY,KAAK,IAAI,CAAC;IAChD;;;OAGG;IACH,cAAc,CAAC,EAAE,CAAC,KAAK,EAAE,KAAK,KAAK,IAAI,CAAC;CACzC,CAAC;AAEF;;;GAGG;AACH,qBAAa,8BAA+B,YAAW,eAAe;;gBAWxD,EACV,eAAe,EACf,cAAc,EACd,cAAc,GACf,GAAE,qCAA0C;IAM7C;;;;;OAKG;IACG,WAAW,CAAC,OAAO,EAAE,aAAa,GAAG,OAAO,CAAC,YAAY,CAAC;IAShE;;;;OAIG;IACH,kBAAkB,CAAC,MAAM,EAAE,YAAY,GAAG,IAAI;IAS9C;;;;OAIG;IACH,iBAAiB,CAAC,KAAK,EAAE,KAAK,GAAG,IAAI;CAQtC"}
@@ -0,0 +1,46 @@
1
+ import type { QrKeyringBridge, QrScanRequest, SerializedUR } from "./qr-keyring.mjs";
2
+ export type QrKeyringDeferredPromiseBridgeOptions = {
3
+ /**
4
+ * Callback invoked when a scan request is made.
5
+ * This can be used to trigger the actual scanning process.
6
+ */
7
+ onScanRequested?: (request: QrScanRequest) => void;
8
+ /**
9
+ * Callback invoked when a scan is successfully resolved.
10
+ * This can be used to handle the result of the scan.
11
+ */
12
+ onScanResolved?: (result: SerializedUR) => void;
13
+ /**
14
+ * Callback invoked when a scan is rejected with an error.
15
+ * This can be used to handle errors that occur during the scan.
16
+ */
17
+ onScanRejected?: (error: Error) => void;
18
+ };
19
+ /**
20
+ * A bridge that turns the scan request into a deferred promise, allowing
21
+ * the consumer to control the resolution and rejection of the scan.
22
+ */
23
+ export declare class QrKeyringDeferredPromiseBridge implements QrKeyringBridge {
24
+ #private;
25
+ constructor({ onScanRequested, onScanResolved, onScanRejected, }?: QrKeyringDeferredPromiseBridgeOptions);
26
+ /**
27
+ * Request a QR code scan, obtaining a CBOR and a type as response.
28
+ *
29
+ * @param request - The type of QR scan request.
30
+ * @returns A promise that resolves with the scanned data as a serialized UR.
31
+ */
32
+ requestScan(request: QrScanRequest): Promise<SerializedUR>;
33
+ /**
34
+ * Resolve the pending scan with the given result.
35
+ *
36
+ * @param result - The scanned data as a serialized UR.
37
+ */
38
+ resolvePendingScan(result: SerializedUR): void;
39
+ /**
40
+ * Reject the pending scan with the given error.
41
+ *
42
+ * @param error - The error to reject the scan with.
43
+ */
44
+ rejectPendingScan(error: Error): void;
45
+ }
46
+ //# sourceMappingURL=qr-keyring-deferred-promise-bridge.d.mts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"qr-keyring-deferred-promise-bridge.d.mts","sourceRoot":"","sources":["../src/qr-keyring-deferred-promise-bridge.ts"],"names":[],"mappings":"AAGA,OAAO,KAAK,EACV,eAAe,EACf,aAAa,EACb,YAAY,EACb,yBAAqB;AAEtB,MAAM,MAAM,qCAAqC,GAAG;IAClD;;;OAGG;IACH,eAAe,CAAC,EAAE,CAAC,OAAO,EAAE,aAAa,KAAK,IAAI,CAAC;IACnD;;;OAGG;IACH,cAAc,CAAC,EAAE,CAAC,MAAM,EAAE,YAAY,KAAK,IAAI,CAAC;IAChD;;;OAGG;IACH,cAAc,CAAC,EAAE,CAAC,KAAK,EAAE,KAAK,KAAK,IAAI,CAAC;CACzC,CAAC;AAEF;;;GAGG;AACH,qBAAa,8BAA+B,YAAW,eAAe;;gBAWxD,EACV,eAAe,EACf,cAAc,EACd,cAAc,GACf,GAAE,qCAA0C;IAM7C;;;;;OAKG;IACG,WAAW,CAAC,OAAO,EAAE,aAAa,GAAG,OAAO,CAAC,YAAY,CAAC;IAShE;;;;OAIG;IACH,kBAAkB,CAAC,MAAM,EAAE,YAAY,GAAG,IAAI;IAS9C;;;;OAIG;IACH,iBAAiB,CAAC,KAAK,EAAE,KAAK,GAAG,IAAI;CAQtC"}
@@ -0,0 +1,72 @@
1
+ var __classPrivateFieldSet = (this && this.__classPrivateFieldSet) || function (receiver, state, value, kind, f) {
2
+ if (kind === "m") throw new TypeError("Private method is not writable");
3
+ if (kind === "a" && !f) throw new TypeError("Private accessor was defined without a setter");
4
+ 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");
5
+ return (kind === "a" ? f.call(receiver, value) : f ? f.value = value : state.set(receiver, value)), value;
6
+ };
7
+ var __classPrivateFieldGet = (this && this.__classPrivateFieldGet) || function (receiver, state, kind, f) {
8
+ if (kind === "a" && !f) throw new TypeError("Private accessor was defined without a getter");
9
+ if (typeof state === "function" ? receiver !== state || !f : !state.has(receiver)) throw new TypeError("Cannot read private member from an object whose class did not declare it");
10
+ return kind === "m" ? f : kind === "a" ? f.call(receiver) : f ? f.value : state.get(receiver);
11
+ };
12
+ var _QrKeyringDeferredPromiseBridge_lock, _QrKeyringDeferredPromiseBridge_onScanRequested, _QrKeyringDeferredPromiseBridge_onScanResolved, _QrKeyringDeferredPromiseBridge_onScanRejected, _QrKeyringDeferredPromiseBridge_pendingScan;
13
+ import { createDeferredPromise } from "@metamask/utils";
14
+ import { Mutex } from "async-mutex";
15
+ /**
16
+ * A bridge that turns the scan request into a deferred promise, allowing
17
+ * the consumer to control the resolution and rejection of the scan.
18
+ */
19
+ export class QrKeyringDeferredPromiseBridge {
20
+ constructor({ onScanRequested, onScanResolved, onScanRejected, } = {}) {
21
+ _QrKeyringDeferredPromiseBridge_lock.set(this, new Mutex());
22
+ _QrKeyringDeferredPromiseBridge_onScanRequested.set(this, void 0);
23
+ _QrKeyringDeferredPromiseBridge_onScanResolved.set(this, void 0);
24
+ _QrKeyringDeferredPromiseBridge_onScanRejected.set(this, void 0);
25
+ _QrKeyringDeferredPromiseBridge_pendingScan.set(this, void 0);
26
+ __classPrivateFieldSet(this, _QrKeyringDeferredPromiseBridge_onScanRequested, onScanRequested, "f");
27
+ __classPrivateFieldSet(this, _QrKeyringDeferredPromiseBridge_onScanResolved, onScanResolved, "f");
28
+ __classPrivateFieldSet(this, _QrKeyringDeferredPromiseBridge_onScanRejected, onScanRejected, "f");
29
+ }
30
+ /**
31
+ * Request a QR code scan, obtaining a CBOR and a type as response.
32
+ *
33
+ * @param request - The type of QR scan request.
34
+ * @returns A promise that resolves with the scanned data as a serialized UR.
35
+ */
36
+ async requestScan(request) {
37
+ return __classPrivateFieldGet(this, _QrKeyringDeferredPromiseBridge_lock, "f").runExclusive(async () => {
38
+ const deferredPromise = createDeferredPromise();
39
+ __classPrivateFieldSet(this, _QrKeyringDeferredPromiseBridge_pendingScan, deferredPromise, "f");
40
+ __classPrivateFieldGet(this, _QrKeyringDeferredPromiseBridge_onScanRequested, "f")?.call(this, request);
41
+ return deferredPromise.promise;
42
+ });
43
+ }
44
+ /**
45
+ * Resolve the pending scan with the given result.
46
+ *
47
+ * @param result - The scanned data as a serialized UR.
48
+ */
49
+ resolvePendingScan(result) {
50
+ if (!__classPrivateFieldGet(this, _QrKeyringDeferredPromiseBridge_pendingScan, "f")) {
51
+ throw new Error('No pending scan to resolve.');
52
+ }
53
+ __classPrivateFieldGet(this, _QrKeyringDeferredPromiseBridge_pendingScan, "f").resolve(result);
54
+ __classPrivateFieldSet(this, _QrKeyringDeferredPromiseBridge_pendingScan, null, "f");
55
+ __classPrivateFieldGet(this, _QrKeyringDeferredPromiseBridge_onScanResolved, "f")?.call(this, result);
56
+ }
57
+ /**
58
+ * Reject the pending scan with the given error.
59
+ *
60
+ * @param error - The error to reject the scan with.
61
+ */
62
+ rejectPendingScan(error) {
63
+ if (!__classPrivateFieldGet(this, _QrKeyringDeferredPromiseBridge_pendingScan, "f")) {
64
+ throw new Error('No pending scan to reject.');
65
+ }
66
+ __classPrivateFieldGet(this, _QrKeyringDeferredPromiseBridge_pendingScan, "f").reject(error);
67
+ __classPrivateFieldSet(this, _QrKeyringDeferredPromiseBridge_pendingScan, null, "f");
68
+ __classPrivateFieldGet(this, _QrKeyringDeferredPromiseBridge_onScanRejected, "f")?.call(this, error);
69
+ }
70
+ }
71
+ _QrKeyringDeferredPromiseBridge_lock = new WeakMap(), _QrKeyringDeferredPromiseBridge_onScanRequested = new WeakMap(), _QrKeyringDeferredPromiseBridge_onScanResolved = new WeakMap(), _QrKeyringDeferredPromiseBridge_onScanRejected = new WeakMap(), _QrKeyringDeferredPromiseBridge_pendingScan = new WeakMap();
72
+ //# sourceMappingURL=qr-keyring-deferred-promise-bridge.mjs.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"qr-keyring-deferred-promise-bridge.mjs","sourceRoot":"","sources":["../src/qr-keyring-deferred-promise-bridge.ts"],"names":[],"mappings":";;;;;;;;;;;;AAAA,OAAO,EAAwB,qBAAqB,EAAE,wBAAwB;AAC9E,OAAO,EAAE,KAAK,EAAE,oBAAoB;AA0BpC;;;GAGG;AACH,MAAM,OAAO,8BAA8B;IAWzC,YAAY,EACV,eAAe,EACf,cAAc,EACd,cAAc,MAC2B,EAAE;QAdpC,+CAAQ,IAAI,KAAK,EAAE,EAAC;QAEpB,kEAAkE;QAElE,iEAA+D;QAE/D,iEAAuD;QAEhE,8DAAoD;QAOlD,uBAAA,IAAI,mDAAoB,eAAe,MAAA,CAAC;QACxC,uBAAA,IAAI,kDAAmB,cAAc,MAAA,CAAC;QACtC,uBAAA,IAAI,kDAAmB,cAAc,MAAA,CAAC;IACxC,CAAC;IAED;;;;;OAKG;IACH,KAAK,CAAC,WAAW,CAAC,OAAsB;QACtC,OAAO,uBAAA,IAAI,4CAAM,CAAC,YAAY,CAAC,KAAK,IAAI,EAAE;YACxC,MAAM,eAAe,GAAG,qBAAqB,EAAgB,CAAC;YAC9D,uBAAA,IAAI,+CAAgB,eAAe,MAAA,CAAC;YACpC,uBAAA,IAAI,uDAAiB,EAAE,KAAvB,IAAI,EAAoB,OAAO,CAAC,CAAC;YACjC,OAAO,eAAe,CAAC,OAAO,CAAC;QACjC,CAAC,CAAC,CAAC;IACL,CAAC;IAED;;;;OAIG;IACH,kBAAkB,CAAC,MAAoB;QACrC,IAAI,CAAC,uBAAA,IAAI,mDAAa,EAAE,CAAC;YACvB,MAAM,IAAI,KAAK,CAAC,6BAA6B,CAAC,CAAC;QACjD,CAAC;QACD,uBAAA,IAAI,mDAAa,CAAC,OAAO,CAAC,MAAM,CAAC,CAAC;QAClC,uBAAA,IAAI,+CAAgB,IAAI,MAAA,CAAC;QACzB,uBAAA,IAAI,sDAAgB,EAAE,KAAtB,IAAI,EAAmB,MAAM,CAAC,CAAC;IACjC,CAAC;IAED;;;;OAIG;IACH,iBAAiB,CAAC,KAAY;QAC5B,IAAI,CAAC,uBAAA,IAAI,mDAAa,EAAE,CAAC;YACvB,MAAM,IAAI,KAAK,CAAC,4BAA4B,CAAC,CAAC;QAChD,CAAC;QACD,uBAAA,IAAI,mDAAa,CAAC,MAAM,CAAC,KAAK,CAAC,CAAC;QAChC,uBAAA,IAAI,+CAAgB,IAAI,MAAA,CAAC;QACzB,uBAAA,IAAI,sDAAgB,EAAE,KAAtB,IAAI,EAAmB,KAAK,CAAC,CAAC;IAChC,CAAC;CACF","sourcesContent":["import { type DeferredPromise, createDeferredPromise } from '@metamask/utils';\nimport { Mutex } from 'async-mutex';\n\nimport type {\n QrKeyringBridge,\n QrScanRequest,\n SerializedUR,\n} from './qr-keyring';\n\nexport type QrKeyringDeferredPromiseBridgeOptions = {\n /**\n * Callback invoked when a scan request is made.\n * This can be used to trigger the actual scanning process.\n */\n onScanRequested?: (request: QrScanRequest) => void;\n /**\n * Callback invoked when a scan is successfully resolved.\n * This can be used to handle the result of the scan.\n */\n onScanResolved?: (result: SerializedUR) => void;\n /**\n * Callback invoked when a scan is rejected with an error.\n * This can be used to handle errors that occur during the scan.\n */\n onScanRejected?: (error: Error) => void;\n};\n\n/**\n * A bridge that turns the scan request into a deferred promise, allowing\n * the consumer to control the resolution and rejection of the scan.\n */\nexport class QrKeyringDeferredPromiseBridge implements QrKeyringBridge {\n readonly #lock = new Mutex();\n\n readonly #onScanRequested?: ((request: QrScanRequest) => void) | undefined;\n\n readonly #onScanResolved?: ((result: SerializedUR) => void) | undefined;\n\n readonly #onScanRejected?: ((error: Error) => void) | undefined;\n\n #pendingScan?: DeferredPromise<SerializedUR> | null;\n\n constructor({\n onScanRequested,\n onScanResolved,\n onScanRejected,\n }: QrKeyringDeferredPromiseBridgeOptions = {}) {\n this.#onScanRequested = onScanRequested;\n this.#onScanResolved = onScanResolved;\n this.#onScanRejected = onScanRejected;\n }\n\n /**\n * Request a QR code scan, obtaining a CBOR and a type as response.\n *\n * @param request - The type of QR scan request.\n * @returns A promise that resolves with the scanned data as a serialized UR.\n */\n async requestScan(request: QrScanRequest): Promise<SerializedUR> {\n return this.#lock.runExclusive(async () => {\n const deferredPromise = createDeferredPromise<SerializedUR>();\n this.#pendingScan = deferredPromise;\n this.#onScanRequested?.(request);\n return deferredPromise.promise;\n });\n }\n\n /**\n * Resolve the pending scan with the given result.\n *\n * @param result - The scanned data as a serialized UR.\n */\n resolvePendingScan(result: SerializedUR): void {\n if (!this.#pendingScan) {\n throw new Error('No pending scan to resolve.');\n }\n this.#pendingScan.resolve(result);\n this.#pendingScan = null;\n this.#onScanResolved?.(result);\n }\n\n /**\n * Reject the pending scan with the given error.\n *\n * @param error - The error to reject the scan with.\n */\n rejectPendingScan(error: Error): void {\n if (!this.#pendingScan) {\n throw new Error('No pending scan to reject.');\n }\n this.#pendingScan.reject(error);\n this.#pendingScan = null;\n this.#onScanRejected?.(error);\n }\n}\n"]}
@@ -14,8 +14,8 @@ var _QrKeyringScannerBridge_requestScan;
14
14
  Object.defineProperty(exports, "__esModule", { value: true });
15
15
  exports.QrKeyringScannerBridge = void 0;
16
16
  /**
17
- * A bridge that allows the QrKeyring to request a QR code scan
18
- * while keeping the implementation defined by the QrKeyring consumer.
17
+ * A generic transport bridge that allows the consumer to inject a scan
18
+ * request hook at construction time.
19
19
  */
20
20
  class QrKeyringScannerBridge {
21
21
  constructor({ requestScan }) {
@@ -1 +1 @@
1
- {"version":3,"file":"qr-keyring-scanner-bridge.cjs","sourceRoot":"","sources":["../src/qr-keyring-scanner-bridge.ts"],"names":[],"mappings":";;;;;;;;;;;;;;;AAgBA;;;GAGG;AACH,MAAa,sBAAsB;IAGjC,YAAY,EAAE,WAAW,EAAiC;QAFjD,sDAA2D;QAGlE,uBAAA,IAAI,uCAAgB,WAAW,MAAA,CAAC;IAClC,CAAC;IAED;;;;;OAKG;IACH,KAAK,CAAC,WAAW,CAAC,OAAsB;QACtC,OAAO,uBAAA,IAAI,2CAAa,MAAjB,IAAI,EAAc,OAAO,CAAC,CAAC;IACpC,CAAC;CACF;AAhBD,wDAgBC","sourcesContent":["import type {\n QrKeyringBridge,\n QrScanRequest,\n SerializedUR,\n} from './qr-keyring';\n\n/**\n * Options for the QrKeyringScannerBridge.\n */\nexport type QrKeyringScannerBridgeOptions = {\n /**\n * An injected function that the bridge uses to request a QR code scan.\n */\n requestScan: (request: QrScanRequest) => Promise<SerializedUR>;\n};\n\n/**\n * A bridge that allows the QrKeyring to request a QR code scan\n * while keeping the implementation defined by the QrKeyring consumer.\n */\nexport class QrKeyringScannerBridge implements QrKeyringBridge {\n readonly #requestScan: QrKeyringScannerBridgeOptions['requestScan'];\n\n constructor({ requestScan }: QrKeyringScannerBridgeOptions) {\n this.#requestScan = requestScan;\n }\n\n /**\n * Request a QR code scan, obtaining a CBOR and a type as response.\n *\n * @param request - The type of QR scan request.\n * @returns The scanned data as a serialized UR.\n */\n async requestScan(request: QrScanRequest): Promise<SerializedUR> {\n return this.#requestScan(request);\n }\n}\n"]}
1
+ {"version":3,"file":"qr-keyring-scanner-bridge.cjs","sourceRoot":"","sources":["../src/qr-keyring-scanner-bridge.ts"],"names":[],"mappings":";;;;;;;;;;;;;;;AAgBA;;;GAGG;AACH,MAAa,sBAAsB;IAGjC,YAAY,EAAE,WAAW,EAAiC;QAFjD,sDAA2D;QAGlE,uBAAA,IAAI,uCAAgB,WAAW,MAAA,CAAC;IAClC,CAAC;IAED;;;;;OAKG;IACH,KAAK,CAAC,WAAW,CAAC,OAAsB;QACtC,OAAO,uBAAA,IAAI,2CAAa,MAAjB,IAAI,EAAc,OAAO,CAAC,CAAC;IACpC,CAAC;CACF;AAhBD,wDAgBC","sourcesContent":["import type {\n QrKeyringBridge,\n QrScanRequest,\n SerializedUR,\n} from './qr-keyring';\n\n/**\n * Options for the QrKeyringScannerBridge.\n */\nexport type QrKeyringScannerBridgeOptions = {\n /**\n * The function that the bridge will use to initiate a QR scan request.\n */\n requestScan: (request: QrScanRequest) => Promise<SerializedUR>;\n};\n\n/**\n * A generic transport bridge that allows the consumer to inject a scan\n * request hook at construction time.\n */\nexport class QrKeyringScannerBridge implements QrKeyringBridge {\n readonly #requestScan: QrKeyringScannerBridgeOptions['requestScan'];\n\n constructor({ requestScan }: QrKeyringScannerBridgeOptions) {\n this.#requestScan = requestScan;\n }\n\n /**\n * Request a QR code scan, obtaining a CBOR and a type as response.\n *\n * @param request - The type of QR scan request.\n * @returns The scanned data as a serialized UR.\n */\n async requestScan(request: QrScanRequest): Promise<SerializedUR> {\n return this.#requestScan(request);\n }\n}\n"]}
@@ -4,13 +4,13 @@ import type { QrKeyringBridge, QrScanRequest, SerializedUR } from "./qr-keyring.
4
4
  */
5
5
  export type QrKeyringScannerBridgeOptions = {
6
6
  /**
7
- * An injected function that the bridge uses to request a QR code scan.
7
+ * The function that the bridge will use to initiate a QR scan request.
8
8
  */
9
9
  requestScan: (request: QrScanRequest) => Promise<SerializedUR>;
10
10
  };
11
11
  /**
12
- * A bridge that allows the QrKeyring to request a QR code scan
13
- * while keeping the implementation defined by the QrKeyring consumer.
12
+ * A generic transport bridge that allows the consumer to inject a scan
13
+ * request hook at construction time.
14
14
  */
15
15
  export declare class QrKeyringScannerBridge implements QrKeyringBridge {
16
16
  #private;
@@ -4,13 +4,13 @@ import type { QrKeyringBridge, QrScanRequest, SerializedUR } from "./qr-keyring.
4
4
  */
5
5
  export type QrKeyringScannerBridgeOptions = {
6
6
  /**
7
- * An injected function that the bridge uses to request a QR code scan.
7
+ * The function that the bridge will use to initiate a QR scan request.
8
8
  */
9
9
  requestScan: (request: QrScanRequest) => Promise<SerializedUR>;
10
10
  };
11
11
  /**
12
- * A bridge that allows the QrKeyring to request a QR code scan
13
- * while keeping the implementation defined by the QrKeyring consumer.
12
+ * A generic transport bridge that allows the consumer to inject a scan
13
+ * request hook at construction time.
14
14
  */
15
15
  export declare class QrKeyringScannerBridge implements QrKeyringBridge {
16
16
  #private;
@@ -11,8 +11,8 @@ var __classPrivateFieldGet = (this && this.__classPrivateFieldGet) || function (
11
11
  };
12
12
  var _QrKeyringScannerBridge_requestScan;
13
13
  /**
14
- * A bridge that allows the QrKeyring to request a QR code scan
15
- * while keeping the implementation defined by the QrKeyring consumer.
14
+ * A generic transport bridge that allows the consumer to inject a scan
15
+ * request hook at construction time.
16
16
  */
17
17
  export class QrKeyringScannerBridge {
18
18
  constructor({ requestScan }) {
@@ -1 +1 @@
1
- {"version":3,"file":"qr-keyring-scanner-bridge.mjs","sourceRoot":"","sources":["../src/qr-keyring-scanner-bridge.ts"],"names":[],"mappings":";;;;;;;;;;;;AAgBA;;;GAGG;AACH,MAAM,OAAO,sBAAsB;IAGjC,YAAY,EAAE,WAAW,EAAiC;QAFjD,sDAA2D;QAGlE,uBAAA,IAAI,uCAAgB,WAAW,MAAA,CAAC;IAClC,CAAC;IAED;;;;;OAKG;IACH,KAAK,CAAC,WAAW,CAAC,OAAsB;QACtC,OAAO,uBAAA,IAAI,2CAAa,MAAjB,IAAI,EAAc,OAAO,CAAC,CAAC;IACpC,CAAC;CACF","sourcesContent":["import type {\n QrKeyringBridge,\n QrScanRequest,\n SerializedUR,\n} from './qr-keyring';\n\n/**\n * Options for the QrKeyringScannerBridge.\n */\nexport type QrKeyringScannerBridgeOptions = {\n /**\n * An injected function that the bridge uses to request a QR code scan.\n */\n requestScan: (request: QrScanRequest) => Promise<SerializedUR>;\n};\n\n/**\n * A bridge that allows the QrKeyring to request a QR code scan\n * while keeping the implementation defined by the QrKeyring consumer.\n */\nexport class QrKeyringScannerBridge implements QrKeyringBridge {\n readonly #requestScan: QrKeyringScannerBridgeOptions['requestScan'];\n\n constructor({ requestScan }: QrKeyringScannerBridgeOptions) {\n this.#requestScan = requestScan;\n }\n\n /**\n * Request a QR code scan, obtaining a CBOR and a type as response.\n *\n * @param request - The type of QR scan request.\n * @returns The scanned data as a serialized UR.\n */\n async requestScan(request: QrScanRequest): Promise<SerializedUR> {\n return this.#requestScan(request);\n }\n}\n"]}
1
+ {"version":3,"file":"qr-keyring-scanner-bridge.mjs","sourceRoot":"","sources":["../src/qr-keyring-scanner-bridge.ts"],"names":[],"mappings":";;;;;;;;;;;;AAgBA;;;GAGG;AACH,MAAM,OAAO,sBAAsB;IAGjC,YAAY,EAAE,WAAW,EAAiC;QAFjD,sDAA2D;QAGlE,uBAAA,IAAI,uCAAgB,WAAW,MAAA,CAAC;IAClC,CAAC;IAED;;;;;OAKG;IACH,KAAK,CAAC,WAAW,CAAC,OAAsB;QACtC,OAAO,uBAAA,IAAI,2CAAa,MAAjB,IAAI,EAAc,OAAO,CAAC,CAAC;IACpC,CAAC;CACF","sourcesContent":["import type {\n QrKeyringBridge,\n QrScanRequest,\n SerializedUR,\n} from './qr-keyring';\n\n/**\n * Options for the QrKeyringScannerBridge.\n */\nexport type QrKeyringScannerBridgeOptions = {\n /**\n * The function that the bridge will use to initiate a QR scan request.\n */\n requestScan: (request: QrScanRequest) => Promise<SerializedUR>;\n};\n\n/**\n * A generic transport bridge that allows the consumer to inject a scan\n * request hook at construction time.\n */\nexport class QrKeyringScannerBridge implements QrKeyringBridge {\n readonly #requestScan: QrKeyringScannerBridgeOptions['requestScan'];\n\n constructor({ requestScan }: QrKeyringScannerBridgeOptions) {\n this.#requestScan = requestScan;\n }\n\n /**\n * Request a QR code scan, obtaining a CBOR and a type as response.\n *\n * @param request - The type of QR scan request.\n * @returns The scanned data as a serialized UR.\n */\n async requestScan(request: QrScanRequest): Promise<SerializedUR> {\n return this.#requestScan(request);\n }\n}\n"]}