@enbox/browser 0.3.77 → 0.3.78
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/dist/browser.mjs +5 -5
- package/dist/browser.mjs.map +3 -3
- package/dist/esm/dweb-connect-wallet.js +72 -27
- package/dist/esm/dweb-connect-wallet.js.map +1 -1
- package/dist/types/dweb-connect-wallet.d.ts +8 -1
- package/dist/types/dweb-connect-wallet.d.ts.map +1 -1
- package/package.json +10 -10
- package/src/dweb-connect-wallet.ts +66 -26
|
@@ -53,7 +53,9 @@ const DEFAULT_ACK_TIMEOUT_MS = 5000;
|
|
|
53
53
|
*/
|
|
54
54
|
export class WalletPostMessageTransport {
|
|
55
55
|
constructor(params) {
|
|
56
|
+
this._closed = false;
|
|
56
57
|
this._requestReceived = false;
|
|
58
|
+
this._requestSettled = false;
|
|
57
59
|
this._dappOrigin = params.dappOrigin;
|
|
58
60
|
this._dappWindow = params.dappWindow;
|
|
59
61
|
this._recipientPrivateKey = params.recipientPrivateKey;
|
|
@@ -66,8 +68,7 @@ export class WalletPostMessageTransport {
|
|
|
66
68
|
this._messageListener = (event) => { this.onMessage(event); };
|
|
67
69
|
window.addEventListener('message', this._messageListener);
|
|
68
70
|
this._timeoutId = setTimeout(() => {
|
|
69
|
-
this.
|
|
70
|
-
this._rejectRequest(new Error('[@enbox/browser] Timed out waiting for the connect request from the dapp.'));
|
|
71
|
+
this.settleRequest(new Error('[@enbox/browser] Timed out waiting for the connect request from the dapp.'));
|
|
71
72
|
}, params.timeoutMs);
|
|
72
73
|
}
|
|
73
74
|
/**
|
|
@@ -97,12 +98,18 @@ export class WalletPostMessageTransport {
|
|
|
97
98
|
recipientPrivateKey,
|
|
98
99
|
timeoutMs: (_b = options.timeoutMs) !== null && _b !== void 0 ? _b : DEFAULT_REQUEST_TIMEOUT_MS,
|
|
99
100
|
});
|
|
100
|
-
|
|
101
|
-
|
|
102
|
-
|
|
103
|
-
|
|
104
|
-
|
|
105
|
-
|
|
101
|
+
try {
|
|
102
|
+
// The listener is registered, so the beacon cannot race the request.
|
|
103
|
+
dappWindow.postMessage({
|
|
104
|
+
type: DWEB_CONNECT_LOADED_MESSAGE_TYPE,
|
|
105
|
+
walletEpk,
|
|
106
|
+
walletOrigin: globalThis.location.origin,
|
|
107
|
+
}, dappOrigin);
|
|
108
|
+
}
|
|
109
|
+
catch (error) {
|
|
110
|
+
transport.close();
|
|
111
|
+
throw error;
|
|
112
|
+
}
|
|
106
113
|
return transport;
|
|
107
114
|
});
|
|
108
115
|
}
|
|
@@ -130,11 +137,13 @@ export class WalletPostMessageTransport {
|
|
|
130
137
|
* @param idToken - The sealed response JWE, or the literal deny token.
|
|
131
138
|
*/
|
|
132
139
|
sendResponse(idToken) {
|
|
133
|
-
this.
|
|
134
|
-
|
|
135
|
-
|
|
136
|
-
}
|
|
137
|
-
|
|
140
|
+
this.assertOpen();
|
|
141
|
+
try {
|
|
142
|
+
this.postResponse(idToken);
|
|
143
|
+
}
|
|
144
|
+
finally {
|
|
145
|
+
this.close();
|
|
146
|
+
}
|
|
138
147
|
}
|
|
139
148
|
/**
|
|
140
149
|
* Posts the sealed response JWE back to the dapp like
|
|
@@ -155,38 +164,59 @@ export class WalletPostMessageTransport {
|
|
|
155
164
|
sendResponseAwaitingAck(idToken_1) {
|
|
156
165
|
return __awaiter(this, arguments, void 0, function* (idToken, options = {}) {
|
|
157
166
|
var _a;
|
|
167
|
+
this.assertOpen();
|
|
168
|
+
if (this._resolveAck !== undefined) {
|
|
169
|
+
throw new Error('[@enbox/browser] A connect response is already awaiting acknowledgement.');
|
|
170
|
+
}
|
|
158
171
|
const ackPromise = new Promise((resolve) => {
|
|
159
172
|
this._resolveAck = resolve;
|
|
160
173
|
});
|
|
161
|
-
|
|
162
|
-
|
|
163
|
-
|
|
164
|
-
|
|
165
|
-
|
|
166
|
-
|
|
167
|
-
(_a =
|
|
168
|
-
|
|
169
|
-
|
|
170
|
-
|
|
171
|
-
|
|
172
|
-
|
|
173
|
-
|
|
174
|
+
let ackTimeoutId;
|
|
175
|
+
try {
|
|
176
|
+
this.postResponse(idToken);
|
|
177
|
+
ackTimeoutId = setTimeout(() => {
|
|
178
|
+
var _a;
|
|
179
|
+
(_a = this._resolveAck) === null || _a === void 0 ? void 0 : _a.call(this, false);
|
|
180
|
+
}, (_a = options.timeoutMs) !== null && _a !== void 0 ? _a : DEFAULT_ACK_TIMEOUT_MS);
|
|
181
|
+
return yield ackPromise;
|
|
182
|
+
}
|
|
183
|
+
finally {
|
|
184
|
+
clearTimeout(ackTimeoutId);
|
|
185
|
+
this.close();
|
|
186
|
+
}
|
|
174
187
|
});
|
|
175
188
|
}
|
|
176
189
|
/** Posts the deny token back to the dapp — the user rejected the request. */
|
|
177
190
|
deny() {
|
|
178
191
|
this.sendResponse(CONNECT_DENIED_TOKEN);
|
|
179
192
|
}
|
|
180
|
-
/**
|
|
193
|
+
/**
|
|
194
|
+
* Stops listening and releases the session's timers. A request or response
|
|
195
|
+
* acknowledgement still pending at close is settled immediately. Idempotent.
|
|
196
|
+
*/
|
|
181
197
|
close() {
|
|
198
|
+
if (this._closed) {
|
|
199
|
+
return;
|
|
200
|
+
}
|
|
201
|
+
this._closed = true;
|
|
182
202
|
clearTimeout(this._timeoutId);
|
|
183
203
|
if (this._messageListener !== undefined) {
|
|
184
204
|
window.removeEventListener('message', this._messageListener);
|
|
185
205
|
this._messageListener = undefined;
|
|
186
206
|
}
|
|
207
|
+
if (!this._requestSettled) {
|
|
208
|
+
this._requestSettled = true;
|
|
209
|
+
this._rejectRequest(new Error('[@enbox/browser] Wallet connect transport closed before receiving a request.'));
|
|
210
|
+
}
|
|
211
|
+
const resolveAck = this._resolveAck;
|
|
212
|
+
this._resolveAck = undefined;
|
|
213
|
+
resolveAck === null || resolveAck === void 0 ? void 0 : resolveAck(false);
|
|
187
214
|
}
|
|
188
215
|
onMessage(event) {
|
|
189
216
|
var _a;
|
|
217
|
+
if (this._closed) {
|
|
218
|
+
return;
|
|
219
|
+
}
|
|
190
220
|
const message = getTrustedMessage(event, this._dappOrigin, this._dappWindow);
|
|
191
221
|
if (message === undefined) {
|
|
192
222
|
return;
|
|
@@ -228,6 +258,10 @@ export class WalletPostMessageTransport {
|
|
|
228
258
|
});
|
|
229
259
|
}
|
|
230
260
|
settleRequest(outcome) {
|
|
261
|
+
if (this._requestSettled) {
|
|
262
|
+
return;
|
|
263
|
+
}
|
|
264
|
+
this._requestSettled = true;
|
|
231
265
|
clearTimeout(this._timeoutId);
|
|
232
266
|
if (outcome instanceof Error) {
|
|
233
267
|
this.close();
|
|
@@ -236,6 +270,17 @@ export class WalletPostMessageTransport {
|
|
|
236
270
|
}
|
|
237
271
|
this._resolveRequest(outcome);
|
|
238
272
|
}
|
|
273
|
+
assertOpen() {
|
|
274
|
+
if (this._closed) {
|
|
275
|
+
throw new Error('[@enbox/browser] Wallet connect transport is closed.');
|
|
276
|
+
}
|
|
277
|
+
}
|
|
278
|
+
postResponse(idToken) {
|
|
279
|
+
this._dappWindow.postMessage({
|
|
280
|
+
type: DWEB_CONNECT_RESPONSE_MESSAGE_TYPE,
|
|
281
|
+
payload: idToken,
|
|
282
|
+
}, this._dappOrigin);
|
|
283
|
+
}
|
|
239
284
|
}
|
|
240
285
|
/**
|
|
241
286
|
* Resolves the dapp origin to pin: the explicit option when provided,
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"dweb-connect-wallet.js","sourceRoot":"","sources":["../../src/dweb-connect-wallet.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;;;;;;;GAuBG;;;;;;;;;;AAKH,OAAO,EAAE,MAAM,EAAE,MAAM,eAAe,CAAC;AACvC,OAAO,EAAE,oBAAoB,EAAE,eAAe,EAAE,MAAM,gBAAgB,CAAC;AAEvE,OAAO,EAAE,qBAAqB,EAAE,MAAM,uBAAuB,CAAC;AAC9D,OAAO,EACL,6BAA6B,EAC7B,gCAAgC,EAChC,iCAAiC,EACjC,kCAAkC,EAClC,iBAAiB,GAClB,MAAM,4BAA4B,CAAC;AAEpC,6DAA6D;AAC7D,MAAM,0BAA0B,GAAG,MAAO,CAAC;AAE3C,8EAA8E;AAC9E,MAAM,sBAAsB,GAAG,IAAK,CAAC;AAwBrC;;;;;;;;;;;GAWG;AACH,MAAM,OAAO,0BAA0B;
|
|
1
|
+
{"version":3,"file":"dweb-connect-wallet.js","sourceRoot":"","sources":["../../src/dweb-connect-wallet.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;;;;;;;GAuBG;;;;;;;;;;AAKH,OAAO,EAAE,MAAM,EAAE,MAAM,eAAe,CAAC;AACvC,OAAO,EAAE,oBAAoB,EAAE,eAAe,EAAE,MAAM,gBAAgB,CAAC;AAEvE,OAAO,EAAE,qBAAqB,EAAE,MAAM,uBAAuB,CAAC;AAC9D,OAAO,EACL,6BAA6B,EAC7B,gCAAgC,EAChC,iCAAiC,EACjC,kCAAkC,EAClC,iBAAiB,GAClB,MAAM,4BAA4B,CAAC;AAEpC,6DAA6D;AAC7D,MAAM,0BAA0B,GAAG,MAAO,CAAC;AAE3C,8EAA8E;AAC9E,MAAM,sBAAsB,GAAG,IAAK,CAAC;AAwBrC;;;;;;;;;;;GAWG;AACH,MAAM,OAAO,0BAA0B;IAgBrC,YAAoB,MAA+F;QAX3G,YAAO,GAAG,KAAK,CAAC;QAChB,qBAAgB,GAAG,KAAK,CAAC;QACzB,oBAAe,GAAG,KAAK,CAAC;QAU9B,IAAI,CAAC,WAAW,GAAG,MAAM,CAAC,UAAU,CAAC;QACrC,IAAI,CAAC,WAAW,GAAG,MAAM,CAAC,UAAU,CAAC;QACrC,IAAI,CAAC,oBAAoB,GAAG,MAAM,CAAC,mBAAmB,CAAC;QAEvD,mEAAmE;QACnE,oEAAoE;QACpE,MAAM,OAAO,GAAG,qBAAqB,EAAkB,CAAC;QACxD,IAAI,CAAC,eAAe,GAAG,OAAO,CAAC,OAAO,CAAC;QACvC,IAAI,CAAC,eAAe,GAAG,OAAO,CAAC,OAAO,CAAC;QACvC,IAAI,CAAC,cAAc,GAAG,OAAO,CAAC,MAAM,CAAC;QAErC,IAAI,CAAC,gBAAgB,GAAG,CAAC,KAAmB,EAAQ,EAAE,GAAG,IAAI,CAAC,SAAS,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC,CAAC;QAClF,MAAM,CAAC,gBAAgB,CAAC,SAAS,EAAE,IAAI,CAAC,gBAAgB,CAAC,CAAC;QAE1D,IAAI,CAAC,UAAU,GAAG,UAAU,CAAC,GAAS,EAAE;YACtC,IAAI,CAAC,aAAa,CAAC,IAAI,KAAK,CAAC,2EAA2E,CAAC,CAAC,CAAC;QAC7G,CAAC,EAAE,MAAM,CAAC,SAAS,CAAC,CAAC;IACvB,CAAC;IAED;;;;;;;OAOG;IACI,MAAM,CAAO,MAAM;6DAAC,UAA6C,EAAE;;YACxE,IAAI,OAAO,MAAM,KAAK,WAAW,EAAE,CAAC;gBAClC,MAAM,IAAI,SAAS,CAAC,wFAAwF,CAAC,CAAC;YAChH,CAAC;YAED,MAAM,UAAU,GAAG,MAAA,OAAO,CAAC,UAAU,mCAAI,MAAM,CAAC,MAAuB,CAAC;YACxE,IAAI,CAAC,UAAU,EAAE,CAAC;gBAChB,MAAM,IAAI,KAAK,CAAC,iGAAiG,CAAC,CAAC;YACrH,CAAC;YAED,MAAM,UAAU,GAAG,iBAAiB,CAAC,OAAO,CAAC,UAAU,CAAC,CAAC;YAEzD,MAAM,mBAAmB,GAAG,MAAM,MAAM,CAAC,WAAW,EAAE,CAAC;YACvD,MAAM,SAAS,GAAQ,EAAE,GAAG,EAAE,KAAK,EAAE,GAAG,EAAE,QAAQ,EAAE,CAAC,EAAE,mBAAmB,CAAC,CAAC,EAAE,CAAC;YAE/E,MAAM,SAAS,GAAG,IAAI,0BAA0B,CAAC;gBAC/C,UAAU;gBACV,UAAU;gBACV,mBAAmB;gBACnB,SAAS,EAAE,MAAA,OAAO,CAAC,SAAS,mCAAI,0BAA0B;aAC3D,CAAC,CAAC;YAEH,IAAI,CAAC;gBACH,qEAAqE;gBACrE,UAAU,CAAC,WAAW,CAAC;oBACrB,IAAI,EAAW,gCAAgC;oBAC/C,SAAS;oBACT,YAAY,EAAG,UAAU,CAAC,QAAQ,CAAC,MAAM;iBAC1C,EAAE,UAAU,CAAC,CAAC;YACjB,CAAC;YAAC,OAAO,KAAK,EAAE,CAAC;gBACf,SAAS,CAAC,KAAK,EAAE,CAAC;gBAClB,MAAM,KAAK,CAAC;YACd,CAAC;YAED,OAAO,SAAS,CAAC;QACnB,CAAC;KAAA;IAED,4EAA4E;IAC5E,IAAW,UAAU;QACnB,OAAO,IAAI,CAAC,WAAW,CAAC;IAC1B,CAAC;IAED;;;;;;OAMG;IACU,YAAY;;YACvB,OAAO,MAAM,IAAI,CAAC,eAAe,CAAC;QACpC,CAAC;KAAA;IAED;;;;;;OAMG;IACI,YAAY,CAAC,OAAe;QACjC,IAAI,CAAC,UAAU,EAAE,CAAC;QAClB,IAAI,CAAC;YACH,IAAI,CAAC,YAAY,CAAC,OAAO,CAAC,CAAC;QAC7B,CAAC;gBAAS,CAAC;YACT,IAAI,CAAC,KAAK,EAAE,CAAC;QACf,CAAC;IACH,CAAC;IAED;;;;;;;;;;;;;;;OAeG;IACU,uBAAuB;6DAAC,OAAe,EAAE,UAAkC,EAAE;;YACxF,IAAI,CAAC,UAAU,EAAE,CAAC;YAClB,IAAI,IAAI,CAAC,WAAW,KAAK,SAAS,EAAE,CAAC;gBACnC,MAAM,IAAI,KAAK,CAAC,0EAA0E,CAAC,CAAC;YAC9F,CAAC;YAED,MAAM,UAAU,GAAG,IAAI,OAAO,CAAU,CAAC,OAAO,EAAQ,EAAE;gBACxD,IAAI,CAAC,WAAW,GAAG,OAAO,CAAC;YAC7B,CAAC,CAAC,CAAC;YAEH,IAAI,YAAuD,CAAC;YAC5D,IAAI,CAAC;gBACH,IAAI,CAAC,YAAY,CAAC,OAAO,CAAC,CAAC;gBAE3B,YAAY,GAAG,UAAU,CAAC,GAAS,EAAE;;oBACnC,MAAA,IAAI,CAAC,WAAW,qDAAG,KAAK,CAAC,CAAC;gBAC5B,CAAC,EAAE,MAAA,OAAO,CAAC,SAAS,mCAAI,sBAAsB,CAAC,CAAC;gBAEhD,OAAO,MAAM,UAAU,CAAC;YAC1B,CAAC;oBAAS,CAAC;gBACT,YAAY,CAAC,YAAY,CAAC,CAAC;gBAC3B,IAAI,CAAC,KAAK,EAAE,CAAC;YACf,CAAC;QACH,CAAC;KAAA;IAED,6EAA6E;IACtE,IAAI;QACT,IAAI,CAAC,YAAY,CAAC,oBAAoB,CAAC,CAAC;IAC1C,CAAC;IAED;;;OAGG;IACI,KAAK;QACV,IAAI,IAAI,CAAC,OAAO,EAAE,CAAC;YAAC,OAAO;QAAC,CAAC;QAC7B,IAAI,CAAC,OAAO,GAAG,IAAI,CAAC;QACpB,YAAY,CAAC,IAAI,CAAC,UAAU,CAAC,CAAC;QAC9B,IAAI,IAAI,CAAC,gBAAgB,KAAK,SAAS,EAAE,CAAC;YACxC,MAAM,CAAC,mBAAmB,CAAC,SAAS,EAAE,IAAI,CAAC,gBAAgB,CAAC,CAAC;YAC7D,IAAI,CAAC,gBAAgB,GAAG,SAAS,CAAC;QACpC,CAAC;QAED,IAAI,CAAC,IAAI,CAAC,eAAe,EAAE,CAAC;YAC1B,IAAI,CAAC,eAAe,GAAG,IAAI,CAAC;YAC5B,IAAI,CAAC,cAAc,CAAC,IAAI,KAAK,CAAC,8EAA8E,CAAC,CAAC,CAAC;QACjH,CAAC;QACD,MAAM,UAAU,GAAG,IAAI,CAAC,WAAW,CAAC;QACpC,IAAI,CAAC,WAAW,GAAG,SAAS,CAAC;QAC7B,UAAU,aAAV,UAAU,uBAAV,UAAU,CAAG,KAAK,CAAC,CAAC;IACtB,CAAC;IAEO,SAAS,CAAC,KAAmB;;QACnC,IAAI,IAAI,CAAC,OAAO,EAAE,CAAC;YAAC,OAAO;QAAC,CAAC;QAC7B,MAAM,OAAO,GAAG,iBAAiB,CAAC,KAAK,EAAE,IAAI,CAAC,WAAW,EAAE,IAAI,CAAC,WAAW,CAAC,CAAC;QAC7E,IAAI,OAAO,KAAK,SAAS,EAAE,CAAC;YAAC,OAAO;QAAC,CAAC;QAEtC,IAAI,OAAO,CAAC,IAAI,KAAK,6BAA6B,EAAE,CAAC;YACnD,MAAA,IAAI,CAAC,WAAW,qDAAG,IAAI,CAAC,CAAC;YACzB,OAAO;QACT,CAAC;QAED,IAAI,OAAO,CAAC,IAAI,KAAK,iCAAiC,IAAI,IAAI,CAAC,gBAAgB,EAAE,CAAC;YAAC,OAAO;QAAC,CAAC;QAC5F,IAAI,CAAC,gBAAgB,GAAG,IAAI,CAAC;QAE7B,IAAI,OAAO,OAAO,CAAC,GAAG,KAAK,QAAQ,EAAE,CAAC;YACpC,IAAI,CAAC,aAAa,CAAC,IAAI,KAAK,CAAC,8EAA8E,CAAC,CAAC,CAAC;YAC9G,OAAO;QACT,CAAC;QAED,KAAK,IAAI,CAAC,WAAW,CAAC,OAAO,CAAC,GAAG,CAAC,CAAC;IACrC,CAAC;IAEa,WAAW,CAAC,GAAW;;YACnC,IAAI,CAAC;gBACH,MAAM,OAAO,GAAG,MAAM,eAAe,CAAC,WAAW,CAAC;oBAChD,GAAG;oBACH,UAAU,EAAE;wBACV,IAAI,EAAkB,SAAS;wBAC/B,mBAAmB,EAAG,IAAI,CAAC,oBAAoB;wBAC/C,YAAY,EAAU,UAAU,CAAC,QAAQ,CAAC,MAAM;qBACjD;iBACF,CAAC,CAAC;gBAEH,IAAI,OAAO,CAAC,KAAK,CAAC,IAAI,KAAK,cAAc,EAAE,CAAC;oBAC1C,IAAI,CAAC,aAAa,CAAC,IAAI,KAAK,CAAC,iGAAiG,CAAC,CAAC,CAAC;oBACjI,OAAO;gBACT,CAAC;gBAED,IAAI,CAAC,aAAa,CAAC,OAAO,CAAC,CAAC;YAC9B,CAAC;YAAC,OAAO,KAAK,EAAE,CAAC;gBACf,IAAI,CAAC,aAAa,CAAC,KAAK,YAAY,KAAK,CAAC,CAAC,CAAC,KAAK,CAAC,CAAC,CAAC,IAAI,KAAK,CAAC,MAAM,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC;YAChF,CAAC;QACH,CAAC;KAAA;IAEO,aAAa,CAAC,OAA+B;QACnD,IAAI,IAAI,CAAC,eAAe,EAAE,CAAC;YAAC,OAAO;QAAC,CAAC;QACrC,IAAI,CAAC,eAAe,GAAG,IAAI,CAAC;QAC5B,YAAY,CAAC,IAAI,CAAC,UAAU,CAAC,CAAC;QAC9B,IAAI,OAAO,YAAY,KAAK,EAAE,CAAC;YAC7B,IAAI,CAAC,KAAK,EAAE,CAAC;YACb,IAAI,CAAC,cAAc,CAAC,OAAO,CAAC,CAAC;YAC7B,OAAO;QACT,CAAC;QACD,IAAI,CAAC,eAAe,CAAC,OAAO,CAAC,CAAC;IAChC,CAAC;IAEO,UAAU;QAChB,IAAI,IAAI,CAAC,OAAO,EAAE,CAAC;YACjB,MAAM,IAAI,KAAK,CAAC,sDAAsD,CAAC,CAAC;QAC1E,CAAC;IACH,CAAC;IAEO,YAAY,CAAC,OAAe;QAClC,IAAI,CAAC,WAAW,CAAC,WAAW,CAAC;YAC3B,IAAI,EAAM,kCAAkC;YAC5C,OAAO,EAAG,OAAO;SAClB,EAAE,IAAI,CAAC,WAAW,CAAC,CAAC;IACvB,CAAC;CACF;AAED;;;GAGG;AACH,SAAS,iBAAiB,CAAC,cAAkC;IAC3D,IAAI,cAAc,KAAK,SAAS,EAAE,CAAC;QACjC,OAAO,IAAI,GAAG,CAAC,cAAc,CAAC,CAAC,MAAM,CAAC;IACxC,CAAC;IAED,IAAI,QAAQ,CAAC,QAAQ,EAAE,CAAC;QACtB,OAAO,IAAI,GAAG,CAAC,QAAQ,CAAC,QAAQ,CAAC,CAAC,MAAM,CAAC;IAC3C,CAAC;IAED,MAAM,IAAI,KAAK,CACb,6HAA6H,CAC9H,CAAC;AACJ,CAAC"}
|
|
@@ -58,7 +58,9 @@ export declare class WalletPostMessageTransport {
|
|
|
58
58
|
private readonly _dappOrigin;
|
|
59
59
|
private readonly _dappWindow;
|
|
60
60
|
private readonly _recipientPrivateKey;
|
|
61
|
+
private _closed;
|
|
61
62
|
private _requestReceived;
|
|
63
|
+
private _requestSettled;
|
|
62
64
|
private readonly _timeoutId?;
|
|
63
65
|
private _messageListener?;
|
|
64
66
|
private _resolveAck?;
|
|
@@ -114,10 +116,15 @@ export declare class WalletPostMessageTransport {
|
|
|
114
116
|
}): Promise<boolean>;
|
|
115
117
|
/** Posts the deny token back to the dapp — the user rejected the request. */
|
|
116
118
|
deny(): void;
|
|
117
|
-
/**
|
|
119
|
+
/**
|
|
120
|
+
* Stops listening and releases the session's timers. A request or response
|
|
121
|
+
* acknowledgement still pending at close is settled immediately. Idempotent.
|
|
122
|
+
*/
|
|
118
123
|
close(): void;
|
|
119
124
|
private onMessage;
|
|
120
125
|
private openRequest;
|
|
121
126
|
private settleRequest;
|
|
127
|
+
private assertOpen;
|
|
128
|
+
private postResponse;
|
|
122
129
|
}
|
|
123
130
|
//# sourceMappingURL=dweb-connect-wallet.d.ts.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"dweb-connect-wallet.d.ts","sourceRoot":"","sources":["../../src/dweb-connect-wallet.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;;;;;;;GAuBG;AAEH,OAAO,KAAK,EAAE,cAAc,EAAE,MAAM,gBAAgB,CAAC;AAqBrD,iEAAiE;AACjE,MAAM,MAAM,iCAAiC,GAAG;IAC9C;;;;OAIG;IACH,UAAU,CAAC,EAAE,MAAM,CAAC;IAEpB;;;OAGG;IACH,UAAU,CAAC,EAAE,MAAM,CAAC;IAEpB;;;OAGG;IACH,SAAS,CAAC,EAAE,MAAM,CAAC;CACpB,CAAC;AAEF;;;;;;;;;;;GAWG;AACH,qBAAa,0BAA0B;IACrC,OAAO,CAAC,QAAQ,CAAC,WAAW,CAAS;IACrC,OAAO,CAAC,QAAQ,CAAC,WAAW,CAAS;IACrC,OAAO,CAAC,QAAQ,CAAC,oBAAoB,CAAM;IAE3C,OAAO,CAAC,gBAAgB,CAAS;IACjC,OAAO,CAAC,QAAQ,CAAC,UAAU,CAAC,CAAgC;IAC5D,OAAO,CAAC,gBAAgB,CAAC,CAAgC;IACzD,OAAO,CAAC,WAAW,CAAC,CAA2B;IAE/C,OAAO,CAAC,QAAQ,CAAC,eAAe,CAA0B;IAC1D,OAAO,CAAC,QAAQ,CAAC,eAAe,CAAoC;IACpE,OAAO,CAAC,QAAQ,CAAC,cAAc,CAAyB;IAExD,OAAO;
|
|
1
|
+
{"version":3,"file":"dweb-connect-wallet.d.ts","sourceRoot":"","sources":["../../src/dweb-connect-wallet.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;;;;;;;GAuBG;AAEH,OAAO,KAAK,EAAE,cAAc,EAAE,MAAM,gBAAgB,CAAC;AAqBrD,iEAAiE;AACjE,MAAM,MAAM,iCAAiC,GAAG;IAC9C;;;;OAIG;IACH,UAAU,CAAC,EAAE,MAAM,CAAC;IAEpB;;;OAGG;IACH,UAAU,CAAC,EAAE,MAAM,CAAC;IAEpB;;;OAGG;IACH,SAAS,CAAC,EAAE,MAAM,CAAC;CACpB,CAAC;AAEF;;;;;;;;;;;GAWG;AACH,qBAAa,0BAA0B;IACrC,OAAO,CAAC,QAAQ,CAAC,WAAW,CAAS;IACrC,OAAO,CAAC,QAAQ,CAAC,WAAW,CAAS;IACrC,OAAO,CAAC,QAAQ,CAAC,oBAAoB,CAAM;IAE3C,OAAO,CAAC,OAAO,CAAS;IACxB,OAAO,CAAC,gBAAgB,CAAS;IACjC,OAAO,CAAC,eAAe,CAAS;IAChC,OAAO,CAAC,QAAQ,CAAC,UAAU,CAAC,CAAgC;IAC5D,OAAO,CAAC,gBAAgB,CAAC,CAAgC;IACzD,OAAO,CAAC,WAAW,CAAC,CAA2B;IAE/C,OAAO,CAAC,QAAQ,CAAC,eAAe,CAA0B;IAC1D,OAAO,CAAC,QAAQ,CAAC,eAAe,CAAoC;IACpE,OAAO,CAAC,QAAQ,CAAC,cAAc,CAAyB;IAExD,OAAO;IAoBP;;;;;;;OAOG;WACiB,MAAM,CAAC,OAAO,GAAE,iCAAsC,GAAG,OAAO,CAAC,0BAA0B,CAAC;IAqChH,4EAA4E;IAC5E,IAAW,UAAU,IAAI,MAAM,CAE9B;IAED;;;;;;OAMG;IACU,YAAY,IAAI,OAAO,CAAC,cAAc,CAAC;IAIpD;;;;;;OAMG;IACI,YAAY,CAAC,OAAO,EAAE,MAAM,GAAG,IAAI;IAS1C;;;;;;;;;;;;;;;OAeG;IACU,uBAAuB,CAAC,OAAO,EAAE,MAAM,EAAE,OAAO,GAAE;QAAE,SAAS,CAAC,EAAE,MAAM,CAAA;KAAO,GAAG,OAAO,CAAC,OAAO,CAAC;IAyB7G,6EAA6E;IACtE,IAAI,IAAI,IAAI;IAInB;;;OAGG;IACI,KAAK,IAAI,IAAI;IAkBpB,OAAO,CAAC,SAAS;YAqBH,WAAW;IAsBzB,OAAO,CAAC,aAAa;IAYrB,OAAO,CAAC,UAAU;IAMlB,OAAO,CAAC,YAAY;CAMrB"}
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@enbox/browser",
|
|
3
|
-
"version": "0.3.
|
|
3
|
+
"version": "0.3.78",
|
|
4
4
|
"description": "Enbox tools and features to use in the browser",
|
|
5
5
|
"type": "module",
|
|
6
6
|
"main": "./dist/esm/index.js",
|
|
@@ -66,15 +66,15 @@
|
|
|
66
66
|
"access": "public"
|
|
67
67
|
},
|
|
68
68
|
"dependencies": {
|
|
69
|
-
"@enbox/agent": "0.8.
|
|
70
|
-
"@enbox/api": "0.6.
|
|
71
|
-
"@enbox/auth": "0.6.
|
|
72
|
-
"@enbox/common": "0.1.
|
|
73
|
-
"@enbox/connect": "0.1.
|
|
74
|
-
"@enbox/crypto": "0.1.
|
|
75
|
-
"@enbox/dids": "0.1.
|
|
76
|
-
"@enbox/dwn-sdk-js": "0.4.
|
|
77
|
-
"@enbox/protocols": "0.2.
|
|
69
|
+
"@enbox/agent": "0.8.47",
|
|
70
|
+
"@enbox/api": "0.6.86",
|
|
71
|
+
"@enbox/auth": "0.6.93",
|
|
72
|
+
"@enbox/common": "0.1.8",
|
|
73
|
+
"@enbox/connect": "0.1.23",
|
|
74
|
+
"@enbox/crypto": "0.1.11",
|
|
75
|
+
"@enbox/dids": "0.1.12",
|
|
76
|
+
"@enbox/dwn-sdk-js": "0.4.27",
|
|
77
|
+
"@enbox/protocols": "0.2.113"
|
|
78
78
|
},
|
|
79
79
|
"devDependencies": {
|
|
80
80
|
"@types/qrcode": "^1.5.6",
|
|
@@ -83,7 +83,9 @@ export class WalletPostMessageTransport {
|
|
|
83
83
|
private readonly _dappWindow: Window;
|
|
84
84
|
private readonly _recipientPrivateKey: Jwk;
|
|
85
85
|
|
|
86
|
+
private _closed = false;
|
|
86
87
|
private _requestReceived = false;
|
|
88
|
+
private _requestSettled = false;
|
|
87
89
|
private readonly _timeoutId?: ReturnType<typeof setTimeout>;
|
|
88
90
|
private _messageListener?: (event: MessageEvent) => void;
|
|
89
91
|
private _resolveAck?: (acked: boolean) => void;
|
|
@@ -108,8 +110,7 @@ export class WalletPostMessageTransport {
|
|
|
108
110
|
window.addEventListener('message', this._messageListener);
|
|
109
111
|
|
|
110
112
|
this._timeoutId = setTimeout((): void => {
|
|
111
|
-
this.
|
|
112
|
-
this._rejectRequest(new Error('[@enbox/browser] Timed out waiting for the connect request from the dapp.'));
|
|
113
|
+
this.settleRequest(new Error('[@enbox/browser] Timed out waiting for the connect request from the dapp.'));
|
|
113
114
|
}, params.timeoutMs);
|
|
114
115
|
}
|
|
115
116
|
|
|
@@ -143,12 +144,17 @@ export class WalletPostMessageTransport {
|
|
|
143
144
|
timeoutMs: options.timeoutMs ?? DEFAULT_REQUEST_TIMEOUT_MS,
|
|
144
145
|
});
|
|
145
146
|
|
|
146
|
-
|
|
147
|
-
|
|
148
|
-
|
|
149
|
-
|
|
150
|
-
|
|
151
|
-
|
|
147
|
+
try {
|
|
148
|
+
// The listener is registered, so the beacon cannot race the request.
|
|
149
|
+
dappWindow.postMessage({
|
|
150
|
+
type : DWEB_CONNECT_LOADED_MESSAGE_TYPE,
|
|
151
|
+
walletEpk,
|
|
152
|
+
walletOrigin : globalThis.location.origin,
|
|
153
|
+
}, dappOrigin);
|
|
154
|
+
} catch (error) {
|
|
155
|
+
transport.close();
|
|
156
|
+
throw error;
|
|
157
|
+
}
|
|
152
158
|
|
|
153
159
|
return transport;
|
|
154
160
|
}
|
|
@@ -177,11 +183,12 @@ export class WalletPostMessageTransport {
|
|
|
177
183
|
* @param idToken - The sealed response JWE, or the literal deny token.
|
|
178
184
|
*/
|
|
179
185
|
public sendResponse(idToken: string): void {
|
|
180
|
-
this.
|
|
181
|
-
|
|
182
|
-
|
|
183
|
-
}
|
|
184
|
-
|
|
186
|
+
this.assertOpen();
|
|
187
|
+
try {
|
|
188
|
+
this.postResponse(idToken);
|
|
189
|
+
} finally {
|
|
190
|
+
this.close();
|
|
191
|
+
}
|
|
185
192
|
}
|
|
186
193
|
|
|
187
194
|
/**
|
|
@@ -201,24 +208,28 @@ export class WalletPostMessageTransport {
|
|
|
201
208
|
* @returns Whether the dapp acknowledged completion within the budget.
|
|
202
209
|
*/
|
|
203
210
|
public async sendResponseAwaitingAck(idToken: string, options: { timeoutMs?: number } = {}): Promise<boolean> {
|
|
211
|
+
this.assertOpen();
|
|
212
|
+
if (this._resolveAck !== undefined) {
|
|
213
|
+
throw new Error('[@enbox/browser] A connect response is already awaiting acknowledgement.');
|
|
214
|
+
}
|
|
215
|
+
|
|
204
216
|
const ackPromise = new Promise<boolean>((resolve): void => {
|
|
205
217
|
this._resolveAck = resolve;
|
|
206
218
|
});
|
|
207
219
|
|
|
208
|
-
|
|
209
|
-
|
|
210
|
-
|
|
211
|
-
}, this._dappOrigin);
|
|
220
|
+
let ackTimeoutId: ReturnType<typeof setTimeout> | undefined;
|
|
221
|
+
try {
|
|
222
|
+
this.postResponse(idToken);
|
|
212
223
|
|
|
213
|
-
|
|
214
|
-
|
|
215
|
-
|
|
224
|
+
ackTimeoutId = setTimeout((): void => {
|
|
225
|
+
this._resolveAck?.(false);
|
|
226
|
+
}, options.timeoutMs ?? DEFAULT_ACK_TIMEOUT_MS);
|
|
216
227
|
|
|
217
|
-
|
|
218
|
-
|
|
219
|
-
|
|
220
|
-
|
|
221
|
-
|
|
228
|
+
return await ackPromise;
|
|
229
|
+
} finally {
|
|
230
|
+
clearTimeout(ackTimeoutId);
|
|
231
|
+
this.close();
|
|
232
|
+
}
|
|
222
233
|
}
|
|
223
234
|
|
|
224
235
|
/** Posts the deny token back to the dapp — the user rejected the request. */
|
|
@@ -226,16 +237,30 @@ export class WalletPostMessageTransport {
|
|
|
226
237
|
this.sendResponse(CONNECT_DENIED_TOKEN);
|
|
227
238
|
}
|
|
228
239
|
|
|
229
|
-
/**
|
|
240
|
+
/**
|
|
241
|
+
* Stops listening and releases the session's timers. A request or response
|
|
242
|
+
* acknowledgement still pending at close is settled immediately. Idempotent.
|
|
243
|
+
*/
|
|
230
244
|
public close(): void {
|
|
245
|
+
if (this._closed) { return; }
|
|
246
|
+
this._closed = true;
|
|
231
247
|
clearTimeout(this._timeoutId);
|
|
232
248
|
if (this._messageListener !== undefined) {
|
|
233
249
|
window.removeEventListener('message', this._messageListener);
|
|
234
250
|
this._messageListener = undefined;
|
|
235
251
|
}
|
|
252
|
+
|
|
253
|
+
if (!this._requestSettled) {
|
|
254
|
+
this._requestSettled = true;
|
|
255
|
+
this._rejectRequest(new Error('[@enbox/browser] Wallet connect transport closed before receiving a request.'));
|
|
256
|
+
}
|
|
257
|
+
const resolveAck = this._resolveAck;
|
|
258
|
+
this._resolveAck = undefined;
|
|
259
|
+
resolveAck?.(false);
|
|
236
260
|
}
|
|
237
261
|
|
|
238
262
|
private onMessage(event: MessageEvent): void {
|
|
263
|
+
if (this._closed) { return; }
|
|
239
264
|
const message = getTrustedMessage(event, this._dappOrigin, this._dappWindow);
|
|
240
265
|
if (message === undefined) { return; }
|
|
241
266
|
|
|
@@ -278,6 +303,8 @@ export class WalletPostMessageTransport {
|
|
|
278
303
|
}
|
|
279
304
|
|
|
280
305
|
private settleRequest(outcome: ConnectRequest | Error): void {
|
|
306
|
+
if (this._requestSettled) { return; }
|
|
307
|
+
this._requestSettled = true;
|
|
281
308
|
clearTimeout(this._timeoutId);
|
|
282
309
|
if (outcome instanceof Error) {
|
|
283
310
|
this.close();
|
|
@@ -286,6 +313,19 @@ export class WalletPostMessageTransport {
|
|
|
286
313
|
}
|
|
287
314
|
this._resolveRequest(outcome);
|
|
288
315
|
}
|
|
316
|
+
|
|
317
|
+
private assertOpen(): void {
|
|
318
|
+
if (this._closed) {
|
|
319
|
+
throw new Error('[@enbox/browser] Wallet connect transport is closed.');
|
|
320
|
+
}
|
|
321
|
+
}
|
|
322
|
+
|
|
323
|
+
private postResponse(idToken: string): void {
|
|
324
|
+
this._dappWindow.postMessage({
|
|
325
|
+
type : DWEB_CONNECT_RESPONSE_MESSAGE_TYPE,
|
|
326
|
+
payload : idToken,
|
|
327
|
+
}, this._dappOrigin);
|
|
328
|
+
}
|
|
289
329
|
}
|
|
290
330
|
|
|
291
331
|
/**
|