@moon-x/core 0.2.0 → 0.4.0
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/README.md +2 -2
- package/dist/{chunk-CDT4MC7S.mjs → chunk-6LTEG7VN.mjs} +0 -39
- package/dist/{chunk-SOKLPX7V.mjs → chunk-VVL65GIB.mjs} +10 -0
- package/dist/index.d.mts +2 -2
- package/dist/index.d.ts +2 -2
- package/dist/index.js +10 -0
- package/dist/index.mjs +1 -1
- package/dist/interfaces-cdKh3sLA.d.mts +192 -0
- package/dist/interfaces-pNTEOKaK.d.ts +192 -0
- package/dist/lib/index.d.mts +1 -1
- package/dist/lib/index.d.ts +1 -1
- package/dist/lib/index.js +2 -47
- package/dist/lib/index.mjs +3 -15
- package/dist/passkey-cache-WnDFQ-v4.d.mts +26 -0
- package/dist/passkey-cache-WnDFQ-v4.d.ts +26 -0
- package/dist/{post-message-C_99BCBh.d.mts → post-message-CmgAfkOS.d.mts} +2 -0
- package/dist/{post-message-C_99BCBh.d.ts → post-message-CmgAfkOS.d.ts} +2 -0
- package/dist/react/index.d.mts +1 -0
- package/dist/react/index.d.ts +1 -0
- package/dist/react/index.js +2 -1
- package/dist/react/index.mjs +3 -2
- package/dist/sdk/index.d.mts +52 -21
- package/dist/sdk/index.d.ts +52 -21
- package/dist/sdk/index.js +252 -102
- package/dist/sdk/index.mjs +241 -80
- package/dist/types/index.d.mts +19 -12
- package/dist/types/index.d.ts +19 -12
- package/dist/utils/index.d.mts +1 -1
- package/dist/utils/index.d.ts +1 -1
- package/dist/utils/index.js +10 -0
- package/dist/utils/index.mjs +1 -1
- package/dist/web/index.d.mts +2 -2
- package/dist/web/index.d.ts +2 -2
- package/dist/web/index.js +50 -114
- package/dist/web/index.mjs +51 -58
- package/package.json +6 -2
- package/dist/interfaces-9k0eKCc4.d.ts +0 -120
- package/dist/interfaces-fNhwnCeY.d.mts +0 -120
- package/dist/passkey-cache-B9PT3AWX.d.mts +0 -47
- package/dist/passkey-cache-B9PT3AWX.d.ts +0 -47
package/dist/sdk/index.mjs
CHANGED
|
@@ -1,20 +1,16 @@
|
|
|
1
1
|
import {
|
|
2
2
|
PostMessageMethod,
|
|
3
3
|
PostMessageType
|
|
4
|
-
} from "../chunk-
|
|
4
|
+
} from "../chunk-VVL65GIB.mjs";
|
|
5
5
|
import {
|
|
6
6
|
arrayLikeToBytes,
|
|
7
7
|
authState,
|
|
8
8
|
broadcastEthereumRaw,
|
|
9
9
|
broadcastSolanaSigned,
|
|
10
10
|
bs58ToBytes,
|
|
11
|
-
clearParentAssertCache,
|
|
12
|
-
readParentAssertCache,
|
|
13
11
|
serializeEthereumTransaction,
|
|
14
|
-
toB64url
|
|
15
|
-
|
|
16
|
-
writeParentAssertCache
|
|
17
|
-
} from "../chunk-CDT4MC7S.mjs";
|
|
12
|
+
toB64url
|
|
13
|
+
} from "../chunk-6LTEG7VN.mjs";
|
|
18
14
|
import "../chunk-GQKIA37O.mjs";
|
|
19
15
|
|
|
20
16
|
// src/sdk/parent-passkey-assert.ts
|
|
@@ -22,12 +18,8 @@ var assertPasskeyInParent = async ({
|
|
|
22
18
|
transport,
|
|
23
19
|
passkey,
|
|
24
20
|
publishableKey,
|
|
25
|
-
|
|
21
|
+
validateCredentialInAllowList = false
|
|
26
22
|
}) => {
|
|
27
|
-
if (!requireFreshAssertion) {
|
|
28
|
-
const cached = readParentAssertCache();
|
|
29
|
-
if (cached) return cached;
|
|
30
|
-
}
|
|
31
23
|
const dekInfo = await transport.send(
|
|
32
24
|
PostMessageType.AUTH,
|
|
33
25
|
PostMessageMethod.GET_DEK_INFO,
|
|
@@ -48,27 +40,104 @@ var assertPasskeyInParent = async ({
|
|
|
48
40
|
challenge,
|
|
49
41
|
allowCredentials: []
|
|
50
42
|
});
|
|
51
|
-
|
|
43
|
+
if (validateCredentialInAllowList && !allowList.includes(credential.rawIdB64url)) {
|
|
44
|
+
throw new Error("unknown_passkey_for_this_account");
|
|
45
|
+
}
|
|
46
|
+
return {
|
|
52
47
|
userHandleB64url: credential.userHandleB64url,
|
|
53
48
|
credentialIdB64url: credential.rawIdB64url
|
|
54
49
|
};
|
|
55
|
-
|
|
56
|
-
|
|
50
|
+
};
|
|
51
|
+
|
|
52
|
+
// src/sdk/get-presence-token.ts
|
|
53
|
+
var getPresenceToken = async ({
|
|
54
|
+
transport,
|
|
55
|
+
passkey,
|
|
56
|
+
publishableKey,
|
|
57
|
+
relyingPartyOrigin
|
|
58
|
+
}) => {
|
|
59
|
+
const { token, optionsJSON } = await transport.send(
|
|
60
|
+
PostMessageType.AUTH,
|
|
61
|
+
PostMessageMethod.PASSKEY_PRESENCE_BEGIN,
|
|
62
|
+
{ publishableKey, relyingPartyOrigin }
|
|
63
|
+
);
|
|
64
|
+
const response = await passkey.assertForServer({ optionsJSON });
|
|
65
|
+
const verify = await transport.send(
|
|
66
|
+
PostMessageType.AUTH,
|
|
67
|
+
PostMessageMethod.PASSKEY_PRESENCE_VERIFY,
|
|
68
|
+
{
|
|
69
|
+
publishableKey,
|
|
70
|
+
relyingPartyOrigin,
|
|
71
|
+
token,
|
|
72
|
+
response
|
|
73
|
+
}
|
|
74
|
+
);
|
|
75
|
+
return {
|
|
76
|
+
presenceToken: verify.presence_token,
|
|
77
|
+
expiresAt: verify.expires_at
|
|
78
|
+
};
|
|
79
|
+
};
|
|
80
|
+
|
|
81
|
+
// src/sdk/get-internal-presence-tokens.ts
|
|
82
|
+
var getInternalPresenceTokens = async ({
|
|
83
|
+
transport,
|
|
84
|
+
passkey,
|
|
85
|
+
publishableKey,
|
|
86
|
+
relyingPartyOrigin,
|
|
87
|
+
scopes
|
|
88
|
+
}) => {
|
|
89
|
+
const { token, optionsJSON } = await transport.send(
|
|
90
|
+
PostMessageType.AUTH,
|
|
91
|
+
PostMessageMethod.PASSKEY_PRESENCE_BEGIN,
|
|
92
|
+
{ publishableKey, relyingPartyOrigin }
|
|
93
|
+
);
|
|
94
|
+
const { response, userHandleB64url, credentialIdB64url } = await passkey.assertForInternalPresence({ optionsJSON });
|
|
95
|
+
const verify = await transport.send(
|
|
96
|
+
PostMessageType.AUTH,
|
|
97
|
+
PostMessageMethod.PASSKEY_PRESENCE_VERIFY,
|
|
98
|
+
{
|
|
99
|
+
publishableKey,
|
|
100
|
+
relyingPartyOrigin,
|
|
101
|
+
token,
|
|
102
|
+
response,
|
|
103
|
+
purpose: "internal",
|
|
104
|
+
scopes
|
|
105
|
+
}
|
|
106
|
+
);
|
|
107
|
+
const out = {};
|
|
108
|
+
for (const [scope, t] of Object.entries(verify.tokens ?? {})) {
|
|
109
|
+
out[scope] = { token: t.token, expiresAt: t.expires_at };
|
|
110
|
+
}
|
|
111
|
+
return {
|
|
112
|
+
tokens: out,
|
|
113
|
+
userHandleB64url,
|
|
114
|
+
credentialIdB64url
|
|
115
|
+
};
|
|
116
|
+
};
|
|
117
|
+
var flattenPresenceTokens = (result) => {
|
|
118
|
+
const out = {};
|
|
119
|
+
for (const [scope, t] of Object.entries(result.tokens)) {
|
|
120
|
+
out[scope] = t.token;
|
|
121
|
+
}
|
|
122
|
+
return out;
|
|
57
123
|
};
|
|
58
124
|
|
|
59
125
|
// src/sdk/headless-ethereum.ts
|
|
126
|
+
var SCOPES_SIGN = ["keyshare_read", "sign"];
|
|
60
127
|
var getHeadlessEthereumMethods = ({
|
|
61
128
|
transport,
|
|
62
129
|
passkey,
|
|
63
|
-
publishableKey
|
|
130
|
+
publishableKey,
|
|
131
|
+
relyingPartyOrigin
|
|
64
132
|
}) => ({
|
|
65
|
-
signEthereumMessageHeadless: async (params) =>
|
|
133
|
+
signEthereumMessageHeadless: async (params) => {
|
|
66
134
|
if (!transport.isReady()) throw new Error("SDK not ready");
|
|
67
|
-
const { userHandleB64url, credentialIdB64url } = await
|
|
135
|
+
const { userHandleB64url, credentialIdB64url, tokens } = await getInternalPresenceTokens({
|
|
68
136
|
transport,
|
|
69
137
|
passkey,
|
|
70
138
|
publishableKey,
|
|
71
|
-
|
|
139
|
+
relyingPartyOrigin,
|
|
140
|
+
scopes: SCOPES_SIGN
|
|
72
141
|
});
|
|
73
142
|
return transport.send(
|
|
74
143
|
PostMessageType.WALLET,
|
|
@@ -79,17 +148,23 @@ var getHeadlessEthereumMethods = ({
|
|
|
79
148
|
wallet: params.wallet,
|
|
80
149
|
uiOptions: params.options?.uiOptions,
|
|
81
150
|
userHandleB64url,
|
|
82
|
-
credentialIdB64url
|
|
151
|
+
credentialIdB64url,
|
|
152
|
+
presenceTokens: flattenPresenceTokens({
|
|
153
|
+
tokens,
|
|
154
|
+
userHandleB64url,
|
|
155
|
+
credentialIdB64url
|
|
156
|
+
})
|
|
83
157
|
}
|
|
84
158
|
);
|
|
85
|
-
}
|
|
86
|
-
signEthereumTransactionHeadless: async (params) =>
|
|
159
|
+
},
|
|
160
|
+
signEthereumTransactionHeadless: async (params) => {
|
|
87
161
|
if (!transport.isReady()) throw new Error("SDK not ready");
|
|
88
|
-
const { userHandleB64url, credentialIdB64url } = await
|
|
162
|
+
const { userHandleB64url, credentialIdB64url, tokens } = await getInternalPresenceTokens({
|
|
89
163
|
transport,
|
|
90
164
|
passkey,
|
|
91
165
|
publishableKey,
|
|
92
|
-
|
|
166
|
+
relyingPartyOrigin,
|
|
167
|
+
scopes: SCOPES_SIGN
|
|
93
168
|
});
|
|
94
169
|
return transport.send(
|
|
95
170
|
PostMessageType.WALLET,
|
|
@@ -101,17 +176,23 @@ var getHeadlessEthereumMethods = ({
|
|
|
101
176
|
wallet: params.wallet,
|
|
102
177
|
options: params.options,
|
|
103
178
|
userHandleB64url,
|
|
104
|
-
credentialIdB64url
|
|
179
|
+
credentialIdB64url,
|
|
180
|
+
presenceTokens: flattenPresenceTokens({
|
|
181
|
+
tokens,
|
|
182
|
+
userHandleB64url,
|
|
183
|
+
credentialIdB64url
|
|
184
|
+
})
|
|
105
185
|
}
|
|
106
186
|
);
|
|
107
|
-
}
|
|
108
|
-
signEthereumTypedDataHeadless: async (params) =>
|
|
187
|
+
},
|
|
188
|
+
signEthereumTypedDataHeadless: async (params) => {
|
|
109
189
|
if (!transport.isReady()) throw new Error("SDK not ready");
|
|
110
|
-
const { userHandleB64url, credentialIdB64url } = await
|
|
190
|
+
const { userHandleB64url, credentialIdB64url, tokens } = await getInternalPresenceTokens({
|
|
111
191
|
transport,
|
|
112
192
|
passkey,
|
|
113
193
|
publishableKey,
|
|
114
|
-
|
|
194
|
+
relyingPartyOrigin,
|
|
195
|
+
scopes: SCOPES_SIGN
|
|
115
196
|
});
|
|
116
197
|
return transport.send(
|
|
117
198
|
PostMessageType.WALLET,
|
|
@@ -125,17 +206,23 @@ var getHeadlessEthereumMethods = ({
|
|
|
125
206
|
wallet: params.wallet,
|
|
126
207
|
options: params.options,
|
|
127
208
|
userHandleB64url,
|
|
128
|
-
credentialIdB64url
|
|
209
|
+
credentialIdB64url,
|
|
210
|
+
presenceTokens: flattenPresenceTokens({
|
|
211
|
+
tokens,
|
|
212
|
+
userHandleB64url,
|
|
213
|
+
credentialIdB64url
|
|
214
|
+
})
|
|
129
215
|
}
|
|
130
216
|
);
|
|
131
|
-
}
|
|
132
|
-
signEthereumHashHeadless: async (params) =>
|
|
217
|
+
},
|
|
218
|
+
signEthereumHashHeadless: async (params) => {
|
|
133
219
|
if (!transport.isReady()) throw new Error("SDK not ready");
|
|
134
|
-
const { userHandleB64url, credentialIdB64url } = await
|
|
220
|
+
const { userHandleB64url, credentialIdB64url, tokens } = await getInternalPresenceTokens({
|
|
135
221
|
transport,
|
|
136
222
|
passkey,
|
|
137
223
|
publishableKey,
|
|
138
|
-
|
|
224
|
+
relyingPartyOrigin,
|
|
225
|
+
scopes: SCOPES_SIGN
|
|
139
226
|
});
|
|
140
227
|
return transport.send(
|
|
141
228
|
PostMessageType.WALLET,
|
|
@@ -146,17 +233,23 @@ var getHeadlessEthereumMethods = ({
|
|
|
146
233
|
wallet: params.wallet,
|
|
147
234
|
options: params.options,
|
|
148
235
|
userHandleB64url,
|
|
149
|
-
credentialIdB64url
|
|
236
|
+
credentialIdB64url,
|
|
237
|
+
presenceTokens: flattenPresenceTokens({
|
|
238
|
+
tokens,
|
|
239
|
+
userHandleB64url,
|
|
240
|
+
credentialIdB64url
|
|
241
|
+
})
|
|
150
242
|
}
|
|
151
243
|
);
|
|
152
|
-
}
|
|
153
|
-
signEthereum7702AuthorizationHeadless: async (params) =>
|
|
244
|
+
},
|
|
245
|
+
signEthereum7702AuthorizationHeadless: async (params) => {
|
|
154
246
|
if (!transport.isReady()) throw new Error("SDK not ready");
|
|
155
|
-
const { userHandleB64url, credentialIdB64url } = await
|
|
247
|
+
const { userHandleB64url, credentialIdB64url, tokens } = await getInternalPresenceTokens({
|
|
156
248
|
transport,
|
|
157
249
|
passkey,
|
|
158
250
|
publishableKey,
|
|
159
|
-
|
|
251
|
+
relyingPartyOrigin,
|
|
252
|
+
scopes: SCOPES_SIGN
|
|
160
253
|
});
|
|
161
254
|
return transport.send(
|
|
162
255
|
PostMessageType.WALLET,
|
|
@@ -170,17 +263,23 @@ var getHeadlessEthereumMethods = ({
|
|
|
170
263
|
wallet: params.wallet,
|
|
171
264
|
options: params.options,
|
|
172
265
|
userHandleB64url,
|
|
173
|
-
credentialIdB64url
|
|
266
|
+
credentialIdB64url,
|
|
267
|
+
presenceTokens: flattenPresenceTokens({
|
|
268
|
+
tokens,
|
|
269
|
+
userHandleB64url,
|
|
270
|
+
credentialIdB64url
|
|
271
|
+
})
|
|
174
272
|
}
|
|
175
273
|
);
|
|
176
|
-
}
|
|
177
|
-
sendEthereumTransactionHeadless: async (params) =>
|
|
274
|
+
},
|
|
275
|
+
sendEthereumTransactionHeadless: async (params) => {
|
|
178
276
|
if (!transport.isReady()) throw new Error("SDK not ready");
|
|
179
|
-
const { userHandleB64url, credentialIdB64url } = await
|
|
277
|
+
const { userHandleB64url, credentialIdB64url, tokens } = await getInternalPresenceTokens({
|
|
180
278
|
transport,
|
|
181
279
|
passkey,
|
|
182
280
|
publishableKey,
|
|
183
|
-
|
|
281
|
+
relyingPartyOrigin,
|
|
282
|
+
scopes: SCOPES_SIGN
|
|
184
283
|
});
|
|
185
284
|
const serializedTransaction = await serializeEthereumTransaction(
|
|
186
285
|
params.transaction
|
|
@@ -194,7 +293,12 @@ var getHeadlessEthereumMethods = ({
|
|
|
194
293
|
wallet: params.wallet,
|
|
195
294
|
options: params.options,
|
|
196
295
|
userHandleB64url,
|
|
197
|
-
credentialIdB64url
|
|
296
|
+
credentialIdB64url,
|
|
297
|
+
presenceTokens: flattenPresenceTokens({
|
|
298
|
+
tokens,
|
|
299
|
+
userHandleB64url,
|
|
300
|
+
credentialIdB64url
|
|
301
|
+
})
|
|
198
302
|
}
|
|
199
303
|
);
|
|
200
304
|
if (!signed.serializedSigned) {
|
|
@@ -207,7 +311,7 @@ var getHeadlessEthereumMethods = ({
|
|
|
207
311
|
signed.serializedSigned
|
|
208
312
|
);
|
|
209
313
|
return { hash };
|
|
210
|
-
}
|
|
314
|
+
},
|
|
211
315
|
getEthereumBalance: async (params) => {
|
|
212
316
|
if (!transport.isReady()) throw new Error("SDK not ready");
|
|
213
317
|
return transport.send(
|
|
@@ -243,18 +347,21 @@ var getHeadlessEthereumMethods = ({
|
|
|
243
347
|
});
|
|
244
348
|
|
|
245
349
|
// src/sdk/headless-solana.ts
|
|
350
|
+
var SCOPES_SIGN2 = ["keyshare_read", "sign"];
|
|
246
351
|
var getHeadlessSolanaMethods = ({
|
|
247
352
|
transport,
|
|
248
353
|
passkey,
|
|
249
|
-
publishableKey
|
|
354
|
+
publishableKey,
|
|
355
|
+
relyingPartyOrigin
|
|
250
356
|
}) => ({
|
|
251
|
-
signSolanaMessageHeadless: async (params) =>
|
|
357
|
+
signSolanaMessageHeadless: async (params) => {
|
|
252
358
|
if (!transport.isReady()) throw new Error("SDK not ready");
|
|
253
|
-
const { userHandleB64url, credentialIdB64url } = await
|
|
359
|
+
const { userHandleB64url, credentialIdB64url, tokens } = await getInternalPresenceTokens({
|
|
254
360
|
transport,
|
|
255
361
|
passkey,
|
|
256
362
|
publishableKey,
|
|
257
|
-
|
|
363
|
+
relyingPartyOrigin,
|
|
364
|
+
scopes: SCOPES_SIGN2
|
|
258
365
|
});
|
|
259
366
|
const { signature } = await transport.send(
|
|
260
367
|
PostMessageType.WALLET,
|
|
@@ -265,18 +372,24 @@ var getHeadlessSolanaMethods = ({
|
|
|
265
372
|
wallet: params.wallet,
|
|
266
373
|
uiOptions: params.options?.uiOptions,
|
|
267
374
|
userHandleB64url,
|
|
268
|
-
credentialIdB64url
|
|
375
|
+
credentialIdB64url,
|
|
376
|
+
presenceTokens: flattenPresenceTokens({
|
|
377
|
+
tokens,
|
|
378
|
+
userHandleB64url,
|
|
379
|
+
credentialIdB64url
|
|
380
|
+
})
|
|
269
381
|
}
|
|
270
382
|
);
|
|
271
383
|
return { signature: arrayLikeToBytes(signature) };
|
|
272
|
-
}
|
|
273
|
-
signSolanaTransactionHeadless: async (params) =>
|
|
384
|
+
},
|
|
385
|
+
signSolanaTransactionHeadless: async (params) => {
|
|
274
386
|
if (!transport.isReady()) throw new Error("SDK not ready");
|
|
275
|
-
const { userHandleB64url, credentialIdB64url } = await
|
|
387
|
+
const { userHandleB64url, credentialIdB64url, tokens } = await getInternalPresenceTokens({
|
|
276
388
|
transport,
|
|
277
389
|
passkey,
|
|
278
390
|
publishableKey,
|
|
279
|
-
|
|
391
|
+
relyingPartyOrigin,
|
|
392
|
+
scopes: SCOPES_SIGN2
|
|
280
393
|
});
|
|
281
394
|
const { signedTransaction } = await transport.send(
|
|
282
395
|
PostMessageType.WALLET,
|
|
@@ -287,18 +400,24 @@ var getHeadlessSolanaMethods = ({
|
|
|
287
400
|
wallet: params.wallet,
|
|
288
401
|
options: params.options,
|
|
289
402
|
userHandleB64url,
|
|
290
|
-
credentialIdB64url
|
|
403
|
+
credentialIdB64url,
|
|
404
|
+
presenceTokens: flattenPresenceTokens({
|
|
405
|
+
tokens,
|
|
406
|
+
userHandleB64url,
|
|
407
|
+
credentialIdB64url
|
|
408
|
+
})
|
|
291
409
|
}
|
|
292
410
|
);
|
|
293
411
|
return { signedTransaction: await bs58ToBytes(signedTransaction) };
|
|
294
|
-
}
|
|
295
|
-
sendSolanaTransactionHeadless: async (params) =>
|
|
412
|
+
},
|
|
413
|
+
sendSolanaTransactionHeadless: async (params) => {
|
|
296
414
|
if (!transport.isReady()) throw new Error("SDK not ready");
|
|
297
|
-
const { userHandleB64url, credentialIdB64url } = await
|
|
415
|
+
const { userHandleB64url, credentialIdB64url, tokens } = await getInternalPresenceTokens({
|
|
298
416
|
transport,
|
|
299
417
|
passkey,
|
|
300
418
|
publishableKey,
|
|
301
|
-
|
|
419
|
+
relyingPartyOrigin,
|
|
420
|
+
scopes: SCOPES_SIGN2
|
|
302
421
|
});
|
|
303
422
|
const { signedTransaction } = await transport.send(
|
|
304
423
|
PostMessageType.WALLET,
|
|
@@ -309,7 +428,12 @@ var getHeadlessSolanaMethods = ({
|
|
|
309
428
|
wallet: params.wallet,
|
|
310
429
|
options: params.options,
|
|
311
430
|
userHandleB64url,
|
|
312
|
-
credentialIdB64url
|
|
431
|
+
credentialIdB64url,
|
|
432
|
+
presenceTokens: flattenPresenceTokens({
|
|
433
|
+
tokens,
|
|
434
|
+
userHandleB64url,
|
|
435
|
+
credentialIdB64url
|
|
436
|
+
})
|
|
313
437
|
}
|
|
314
438
|
);
|
|
315
439
|
const broadcastSignature = await broadcastSolanaSigned(
|
|
@@ -317,7 +441,7 @@ var getHeadlessSolanaMethods = ({
|
|
|
317
441
|
signedTransaction
|
|
318
442
|
);
|
|
319
443
|
return { signature: await bs58ToBytes(broadcastSignature) };
|
|
320
|
-
}
|
|
444
|
+
},
|
|
321
445
|
getSolanaBalance: async (params) => {
|
|
322
446
|
if (!transport.isReady()) throw new Error("SDK not ready");
|
|
323
447
|
return transport.send(
|
|
@@ -340,13 +464,17 @@ var getHeadlessSolanaMethods = ({
|
|
|
340
464
|
var getHeadlessAuthenticationMethods = ({
|
|
341
465
|
transport,
|
|
342
466
|
publishableKey,
|
|
343
|
-
emailConfig,
|
|
344
467
|
setIsAuthenticated,
|
|
345
468
|
setUser
|
|
346
469
|
}) => ({
|
|
347
|
-
/**
|
|
470
|
+
/**
|
|
471
|
+
* Send a one-time passcode to the user's email address. Returns the
|
|
472
|
+
* server's response — most importantly `expires_at` (unix seconds),
|
|
473
|
+
* which the UI uses to render a countdown that cannot drift from the
|
|
474
|
+
* authoritative server-side TTL.
|
|
475
|
+
*/
|
|
348
476
|
sendCode: async (params) => {
|
|
349
|
-
await transport.send(
|
|
477
|
+
const response = await transport.send(
|
|
350
478
|
PostMessageType.AUTH,
|
|
351
479
|
PostMessageMethod.LOGIN_CREATE,
|
|
352
480
|
{
|
|
@@ -357,6 +485,7 @@ var getHeadlessAuthenticationMethods = ({
|
|
|
357
485
|
);
|
|
358
486
|
authState.clearEmail();
|
|
359
487
|
authState.setEmail(params.email);
|
|
488
|
+
return response;
|
|
360
489
|
},
|
|
361
490
|
/**
|
|
362
491
|
* Verify the OTP and complete the login. The iframe-app handles
|
|
@@ -372,8 +501,7 @@ var getHeadlessAuthenticationMethods = ({
|
|
|
372
501
|
{
|
|
373
502
|
email,
|
|
374
503
|
code: params.code,
|
|
375
|
-
publishableKey
|
|
376
|
-
expiresIn: emailConfig?.expiresIn
|
|
504
|
+
publishableKey
|
|
377
505
|
}
|
|
378
506
|
);
|
|
379
507
|
authState.clearEmail();
|
|
@@ -425,11 +553,15 @@ var getHeadlessAuthenticationMethods = ({
|
|
|
425
553
|
});
|
|
426
554
|
|
|
427
555
|
// src/sdk/headless-general.ts
|
|
556
|
+
var SCOPES_CREATE_WALLET = ["dek_bootstrap", "keyshare_write"];
|
|
557
|
+
var SCOPES_IMPORT_KEY = ["dek_bootstrap", "keyshare_write"];
|
|
558
|
+
var SCOPES_REMOVE_PASSKEY = ["passkey_remove"];
|
|
428
559
|
var getHeadlessGeneralMethods = ({
|
|
429
560
|
transport,
|
|
430
561
|
passkey,
|
|
431
562
|
storage,
|
|
432
563
|
publishableKey,
|
|
564
|
+
relyingPartyOrigin,
|
|
433
565
|
setIsAuthenticated,
|
|
434
566
|
setUser
|
|
435
567
|
}) => ({
|
|
@@ -439,18 +571,34 @@ var getHeadlessGeneralMethods = ({
|
|
|
439
571
|
{ publishableKey }
|
|
440
572
|
),
|
|
441
573
|
removePasskey: async (credentialIdB64url) => {
|
|
574
|
+
const { tokens, userHandleB64url, credentialIdB64url: assertedCredId } = await getInternalPresenceTokens({
|
|
575
|
+
transport,
|
|
576
|
+
passkey,
|
|
577
|
+
publishableKey,
|
|
578
|
+
relyingPartyOrigin,
|
|
579
|
+
scopes: SCOPES_REMOVE_PASSKEY
|
|
580
|
+
});
|
|
442
581
|
await transport.send(
|
|
443
582
|
PostMessageType.AUTH,
|
|
444
583
|
PostMessageMethod.REMOVE_PASSKEY,
|
|
445
|
-
{
|
|
584
|
+
{
|
|
585
|
+
publishableKey,
|
|
586
|
+
credentialIdB64url,
|
|
587
|
+
presenceTokens: flattenPresenceTokens({
|
|
588
|
+
tokens,
|
|
589
|
+
userHandleB64url,
|
|
590
|
+
credentialIdB64url: assertedCredId
|
|
591
|
+
})
|
|
592
|
+
}
|
|
446
593
|
);
|
|
447
594
|
},
|
|
448
|
-
createWallet: (walletType, options) =>
|
|
449
|
-
const { userHandleB64url, credentialIdB64url } = await
|
|
595
|
+
createWallet: async (walletType, options) => {
|
|
596
|
+
const { userHandleB64url, credentialIdB64url, tokens } = await getInternalPresenceTokens({
|
|
450
597
|
transport,
|
|
451
598
|
passkey,
|
|
452
599
|
publishableKey,
|
|
453
|
-
|
|
600
|
+
relyingPartyOrigin,
|
|
601
|
+
scopes: SCOPES_CREATE_WALLET
|
|
454
602
|
});
|
|
455
603
|
const wallet = await transport.send(
|
|
456
604
|
PostMessageType.WALLET,
|
|
@@ -460,17 +608,23 @@ var getHeadlessGeneralMethods = ({
|
|
|
460
608
|
publishableKey,
|
|
461
609
|
options,
|
|
462
610
|
userHandleB64url,
|
|
463
|
-
credentialIdB64url
|
|
611
|
+
credentialIdB64url,
|
|
612
|
+
presenceTokens: flattenPresenceTokens({
|
|
613
|
+
tokens,
|
|
614
|
+
userHandleB64url,
|
|
615
|
+
credentialIdB64url
|
|
616
|
+
})
|
|
464
617
|
}
|
|
465
618
|
);
|
|
466
619
|
return { wallet };
|
|
467
|
-
}
|
|
468
|
-
importKey: (walletType, key
|
|
469
|
-
const { userHandleB64url, credentialIdB64url } = await
|
|
620
|
+
},
|
|
621
|
+
importKey: async (walletType, key) => {
|
|
622
|
+
const { userHandleB64url, credentialIdB64url, tokens } = await getInternalPresenceTokens({
|
|
470
623
|
transport,
|
|
471
624
|
passkey,
|
|
472
625
|
publishableKey,
|
|
473
|
-
|
|
626
|
+
relyingPartyOrigin,
|
|
627
|
+
scopes: SCOPES_IMPORT_KEY
|
|
474
628
|
});
|
|
475
629
|
const wallet = await transport.send(
|
|
476
630
|
PostMessageType.WALLET,
|
|
@@ -480,11 +634,16 @@ var getHeadlessGeneralMethods = ({
|
|
|
480
634
|
publishableKey,
|
|
481
635
|
key,
|
|
482
636
|
userHandleB64url,
|
|
483
|
-
credentialIdB64url
|
|
637
|
+
credentialIdB64url,
|
|
638
|
+
presenceTokens: flattenPresenceTokens({
|
|
639
|
+
tokens,
|
|
640
|
+
userHandleB64url,
|
|
641
|
+
credentialIdB64url
|
|
642
|
+
})
|
|
484
643
|
}
|
|
485
644
|
);
|
|
486
645
|
return { wallet };
|
|
487
|
-
}
|
|
646
|
+
},
|
|
488
647
|
getWallets: async (walletType) => {
|
|
489
648
|
const { wallets } = await transport.send(
|
|
490
649
|
PostMessageType.WALLET,
|
|
@@ -524,7 +683,6 @@ var getHeadlessGeneralMethods = ({
|
|
|
524
683
|
await transport.send(PostMessageType.AUTH, PostMessageMethod.LOGOUT, {
|
|
525
684
|
publishableKey
|
|
526
685
|
});
|
|
527
|
-
clearParentAssertCache();
|
|
528
686
|
await storage.remove("id_token");
|
|
529
687
|
if (setIsAuthenticated) setIsAuthenticated(false);
|
|
530
688
|
if (setUser) setUser(null);
|
|
@@ -572,8 +730,11 @@ var getHeadlessGeneralMethods = ({
|
|
|
572
730
|
});
|
|
573
731
|
export {
|
|
574
732
|
assertPasskeyInParent,
|
|
733
|
+
flattenPresenceTokens,
|
|
575
734
|
getHeadlessAuthenticationMethods,
|
|
576
735
|
getHeadlessEthereumMethods,
|
|
577
736
|
getHeadlessGeneralMethods,
|
|
578
|
-
getHeadlessSolanaMethods
|
|
737
|
+
getHeadlessSolanaMethods,
|
|
738
|
+
getInternalPresenceTokens,
|
|
739
|
+
getPresenceToken
|
|
579
740
|
};
|