@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.
- package/CHANGELOG.md +19 -1
- package/dist/device.cjs +345 -0
- package/dist/device.cjs.map +1 -0
- package/dist/device.d.cts +175 -0
- package/dist/device.d.cts.map +1 -0
- package/dist/device.d.mts +175 -0
- package/dist/device.d.mts.map +1 -0
- package/dist/device.mjs +345 -0
- package/dist/device.mjs.map +1 -0
- package/dist/index.cjs +9 -16
- package/dist/index.cjs.map +1 -1
- package/dist/index.d.cts +3 -2
- package/dist/index.d.cts.map +1 -1
- package/dist/index.d.mts +3 -2
- package/dist/index.d.mts.map +1 -1
- package/dist/index.mjs +3 -2
- package/dist/index.mjs.map +1 -1
- package/dist/qr-keyring-deferred-promise-bridge.cjs +76 -0
- package/dist/qr-keyring-deferred-promise-bridge.cjs.map +1 -0
- package/dist/qr-keyring-deferred-promise-bridge.d.cts +46 -0
- package/dist/qr-keyring-deferred-promise-bridge.d.cts.map +1 -0
- package/dist/qr-keyring-deferred-promise-bridge.d.mts +46 -0
- package/dist/qr-keyring-deferred-promise-bridge.d.mts.map +1 -0
- package/dist/qr-keyring-deferred-promise-bridge.mjs +72 -0
- package/dist/qr-keyring-deferred-promise-bridge.mjs.map +1 -0
- package/dist/qr-keyring-scanner-bridge.cjs +2 -2
- package/dist/qr-keyring-scanner-bridge.cjs.map +1 -1
- package/dist/qr-keyring-scanner-bridge.d.cts +3 -3
- package/dist/qr-keyring-scanner-bridge.d.mts +3 -3
- package/dist/qr-keyring-scanner-bridge.mjs +2 -2
- package/dist/qr-keyring-scanner-bridge.mjs.map +1 -1
- package/dist/qr-keyring.cjs +65 -137
- package/dist/qr-keyring.cjs.map +1 -1
- package/dist/qr-keyring.d.cts +17 -4
- package/dist/qr-keyring.d.cts.map +1 -1
- package/dist/qr-keyring.d.mts +17 -4
- package/dist/qr-keyring.d.mts.map +1 -1
- package/dist/qr-keyring.mjs +66 -138
- package/dist/qr-keyring.mjs.map +1 -1
- package/package.json +6 -5
- package/dist/airgapped-signer.cjs +0 -270
- package/dist/airgapped-signer.cjs.map +0 -1
- package/dist/airgapped-signer.d.cts +0 -140
- package/dist/airgapped-signer.d.cts.map +0 -1
- package/dist/airgapped-signer.d.mts +0 -140
- package/dist/airgapped-signer.d.mts.map +0 -1
- package/dist/airgapped-signer.mjs +0 -270
- package/dist/airgapped-signer.mjs.map +0 -1
package/dist/index.mjs.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.mjs","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAAA,
|
|
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
|
|
18
|
-
*
|
|
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 *
|
|
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
|
-
*
|
|
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
|
|
13
|
-
*
|
|
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
|
-
*
|
|
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
|
|
13
|
-
*
|
|
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
|
|
15
|
-
*
|
|
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 *
|
|
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"]}
|