@dynamic-labs-wallet/node 1.0.61 → 1.0.63
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/index.cjs +121 -49
- package/index.esm.js +121 -49
- package/package.json +3 -3
- package/src/authClient.d.ts +18 -3
- package/src/authClient.d.ts.map +1 -1
- package/src/siweUtils.d.ts +25 -0
- package/src/siweUtils.d.ts.map +1 -0
package/index.cjs
CHANGED
|
@@ -2216,6 +2216,49 @@ function decryptDelegatedWebhookData({ privateKeyPem, encryptedDelegatedKeyShare
|
|
|
2216
2216
|
}
|
|
2217
2217
|
}
|
|
2218
2218
|
|
|
2219
|
+
/** Formats an EIP-4361-style sign-in message in the exact shape Dynamic's verifier accepts. */ function formatSiweMessage(params) {
|
|
2220
|
+
var _params_blockchainName;
|
|
2221
|
+
const header = `${params.domain} wants you to sign in with your ${(_params_blockchainName = params.blockchainName) != null ? _params_blockchainName : 'Ethereum'} account:`;
|
|
2222
|
+
var _params_issuedAt;
|
|
2223
|
+
const fields = [
|
|
2224
|
+
`URI: ${params.uri}`,
|
|
2225
|
+
'Version: 1',
|
|
2226
|
+
...params.chainId !== undefined ? [
|
|
2227
|
+
`Chain ID: ${params.chainId}`
|
|
2228
|
+
] : [],
|
|
2229
|
+
`Nonce: ${params.nonce}`,
|
|
2230
|
+
`Issued At: ${(_params_issuedAt = params.issuedAt) != null ? _params_issuedAt : new Date().toISOString()}`
|
|
2231
|
+
].join('\n');
|
|
2232
|
+
// No statement still keeps both blank lines (EIP-4361) — the verifier 400s otherwise.
|
|
2233
|
+
const statement = params.statement ? `${params.statement}\n\n` : '\n';
|
|
2234
|
+
return `${header}\n${params.address}\n\n${statement}${fields}`;
|
|
2235
|
+
}
|
|
2236
|
+
/** Throws unless `address` is a 0x-prefixed 20-byte hex EVM address. SIWS adds a base58 sibling. */ function assertEvmAddress(address) {
|
|
2237
|
+
if (!/^0x[0-9a-fA-F]{40}$/.test(address)) {
|
|
2238
|
+
throw new Error('wallet.signIn requires a 0x-prefixed 20-byte hex address');
|
|
2239
|
+
}
|
|
2240
|
+
}
|
|
2241
|
+
/** Resolves which origin a SIWE sign-in presents as. Throws before any network call. */ function resolveSiweOrigin(appOrigin, params) {
|
|
2242
|
+
if (params.domain && params.uri) return {
|
|
2243
|
+
domain: params.domain,
|
|
2244
|
+
uri: params.uri
|
|
2245
|
+
};
|
|
2246
|
+
if (!appOrigin) {
|
|
2247
|
+
throw new Error('wallet.signIn requires domain/uri — pass them or set appOrigin on createAuthClient');
|
|
2248
|
+
}
|
|
2249
|
+
let parsed;
|
|
2250
|
+
try {
|
|
2251
|
+
parsed = new URL(appOrigin);
|
|
2252
|
+
} catch (e) {
|
|
2253
|
+
throw new Error('createAuthClient appOrigin is not a valid URL');
|
|
2254
|
+
}
|
|
2255
|
+
var _params_domain, _params_uri;
|
|
2256
|
+
return {
|
|
2257
|
+
domain: (_params_domain = params.domain) != null ? _params_domain : parsed.host,
|
|
2258
|
+
uri: (_params_uri = params.uri) != null ? _params_uri : appOrigin
|
|
2259
|
+
};
|
|
2260
|
+
}
|
|
2261
|
+
|
|
2219
2262
|
const toAuthResult = (response)=>{
|
|
2220
2263
|
var _response_user;
|
|
2221
2264
|
if (response.mfaToken && !response.minifiedJwt && !response.jwt) {
|
|
@@ -2268,6 +2311,79 @@ const asAuthError = async (error, operation)=>{
|
|
|
2268
2311
|
},
|
|
2269
2312
|
fetchApi: options.fetchApi
|
|
2270
2313
|
}));
|
|
2314
|
+
const siwePrimitives = {
|
|
2315
|
+
async getNonce () {
|
|
2316
|
+
try {
|
|
2317
|
+
const { nonce } = await api.getNonce({
|
|
2318
|
+
environmentId
|
|
2319
|
+
});
|
|
2320
|
+
if (!nonce) throw new Error('nonce endpoint returned no nonce');
|
|
2321
|
+
return {
|
|
2322
|
+
nonce
|
|
2323
|
+
};
|
|
2324
|
+
} catch (error) {
|
|
2325
|
+
throw await asAuthError(error, 'SIWE nonce request');
|
|
2326
|
+
}
|
|
2327
|
+
},
|
|
2328
|
+
createMessage (params) {
|
|
2329
|
+
return formatSiweMessage(params);
|
|
2330
|
+
},
|
|
2331
|
+
async verify ({ message, signature, walletAddress, sessionPublicKey, walletName = 'unknown', walletProvider = sdkApiCore.WalletProviderEnum.CustodialService, chain = sdkApiCore.ChainEnum.Evm }) {
|
|
2332
|
+
try {
|
|
2333
|
+
const response = await api.verify({
|
|
2334
|
+
environmentId,
|
|
2335
|
+
verifyRequest: {
|
|
2336
|
+
messageToSign: message,
|
|
2337
|
+
signedMessage: signature,
|
|
2338
|
+
publicWalletAddress: walletAddress,
|
|
2339
|
+
chain,
|
|
2340
|
+
walletName,
|
|
2341
|
+
walletProvider,
|
|
2342
|
+
sessionPublicKey
|
|
2343
|
+
}
|
|
2344
|
+
});
|
|
2345
|
+
return toAuthResult(response);
|
|
2346
|
+
} catch (error) {
|
|
2347
|
+
throw await asAuthError(error, 'SIWE sign-in');
|
|
2348
|
+
}
|
|
2349
|
+
}
|
|
2350
|
+
};
|
|
2351
|
+
const signIn = async ({ address, signMessage, sessionPublicKey, domain, uri, chainId = 1, statement, walletName, walletProvider })=>{
|
|
2352
|
+
// A malformed address would only surface as an opaque server-side 400 after signing.
|
|
2353
|
+
assertEvmAddress(address);
|
|
2354
|
+
// Line breaks would corrupt the EIP-4361 message structure (opaque server-side 400).
|
|
2355
|
+
for (const [name, value] of Object.entries({
|
|
2356
|
+
domain,
|
|
2357
|
+
uri,
|
|
2358
|
+
statement
|
|
2359
|
+
})){
|
|
2360
|
+
if (value && /[\r\n]/.test(value)) {
|
|
2361
|
+
throw new Error(`wallet.signIn: ${name} must not contain line breaks`);
|
|
2362
|
+
}
|
|
2363
|
+
}
|
|
2364
|
+
const origin = resolveSiweOrigin(options.appOrigin, {
|
|
2365
|
+
domain,
|
|
2366
|
+
uri
|
|
2367
|
+
});
|
|
2368
|
+
const { nonce } = await siwePrimitives.getNonce();
|
|
2369
|
+
const message = siwePrimitives.createMessage({
|
|
2370
|
+
domain: origin.domain,
|
|
2371
|
+
address,
|
|
2372
|
+
uri: origin.uri,
|
|
2373
|
+
chainId,
|
|
2374
|
+
nonce,
|
|
2375
|
+
statement
|
|
2376
|
+
});
|
|
2377
|
+
const signature = await signMessage(message);
|
|
2378
|
+
return siwePrimitives.verify({
|
|
2379
|
+
message,
|
|
2380
|
+
signature,
|
|
2381
|
+
walletAddress: address,
|
|
2382
|
+
sessionPublicKey,
|
|
2383
|
+
walletName,
|
|
2384
|
+
walletProvider
|
|
2385
|
+
});
|
|
2386
|
+
};
|
|
2271
2387
|
return {
|
|
2272
2388
|
email: {
|
|
2273
2389
|
async sendOtp (email) {
|
|
@@ -2285,14 +2401,14 @@ const asAuthError = async (error, operation)=>{
|
|
|
2285
2401
|
throw await asAuthError(error, 'email OTP request');
|
|
2286
2402
|
}
|
|
2287
2403
|
},
|
|
2288
|
-
async verifyOtp ({ verificationUUID, code,
|
|
2404
|
+
async verifyOtp ({ verificationUUID, code, sessionPublicKey }) {
|
|
2289
2405
|
try {
|
|
2290
2406
|
const response = await api.signInWithEmailVerification({
|
|
2291
2407
|
environmentId,
|
|
2292
2408
|
emailVerificationVerifyRequest: {
|
|
2293
2409
|
verificationUUID,
|
|
2294
2410
|
verificationToken: code,
|
|
2295
|
-
sessionPublicKey
|
|
2411
|
+
sessionPublicKey
|
|
2296
2412
|
}
|
|
2297
2413
|
});
|
|
2298
2414
|
return toAuthResult(response);
|
|
@@ -2301,53 +2417,9 @@ const asAuthError = async (error, operation)=>{
|
|
|
2301
2417
|
}
|
|
2302
2418
|
}
|
|
2303
2419
|
},
|
|
2304
|
-
|
|
2305
|
-
|
|
2306
|
-
|
|
2307
|
-
const { nonce } = await api.getNonce({
|
|
2308
|
-
environmentId
|
|
2309
|
-
});
|
|
2310
|
-
if (!nonce) throw new Error('nonce endpoint returned no nonce');
|
|
2311
|
-
return {
|
|
2312
|
-
nonce
|
|
2313
|
-
};
|
|
2314
|
-
} catch (error) {
|
|
2315
|
-
throw await asAuthError(error, 'SIWE nonce request');
|
|
2316
|
-
}
|
|
2317
|
-
},
|
|
2318
|
-
createMessage (params) {
|
|
2319
|
-
const header = `${params.domain} wants you to sign in with your Ethereum account:`;
|
|
2320
|
-
var _params_issuedAt;
|
|
2321
|
-
const fields = [
|
|
2322
|
-
`URI: ${params.uri}`,
|
|
2323
|
-
'Version: 1',
|
|
2324
|
-
`Chain ID: ${params.chainId}`,
|
|
2325
|
-
`Nonce: ${params.nonce}`,
|
|
2326
|
-
`Issued At: ${(_params_issuedAt = params.issuedAt) != null ? _params_issuedAt : new Date().toISOString()}`
|
|
2327
|
-
].join('\n');
|
|
2328
|
-
const statement = params.statement ? `${params.statement}\n\n` : '';
|
|
2329
|
-
return `${header}\n${params.address}\n\n${statement}${fields}`;
|
|
2330
|
-
},
|
|
2331
|
-
async verify ({ message, signature, walletAddress, sessionPublicKeyHex, walletName = 'unknown', walletProvider = sdkApiCore.WalletProviderEnum.BrowserExtension, chain = sdkApiCore.ChainEnum.Evm }) {
|
|
2332
|
-
try {
|
|
2333
|
-
const response = await api.verify({
|
|
2334
|
-
environmentId,
|
|
2335
|
-
verifyRequest: {
|
|
2336
|
-
messageToSign: message,
|
|
2337
|
-
signedMessage: signature,
|
|
2338
|
-
publicWalletAddress: walletAddress,
|
|
2339
|
-
chain,
|
|
2340
|
-
walletName,
|
|
2341
|
-
walletProvider,
|
|
2342
|
-
sessionPublicKey: sessionPublicKeyHex
|
|
2343
|
-
}
|
|
2344
|
-
});
|
|
2345
|
-
return toAuthResult(response);
|
|
2346
|
-
} catch (error) {
|
|
2347
|
-
throw await asAuthError(error, 'SIWE sign-in');
|
|
2348
|
-
}
|
|
2349
|
-
}
|
|
2350
|
-
}
|
|
2420
|
+
wallet: _extends({}, siwePrimitives, {
|
|
2421
|
+
signIn
|
|
2422
|
+
})
|
|
2351
2423
|
};
|
|
2352
2424
|
}
|
|
2353
2425
|
|
package/index.esm.js
CHANGED
|
@@ -2215,6 +2215,49 @@ function decryptDelegatedWebhookData({ privateKeyPem, encryptedDelegatedKeyShare
|
|
|
2215
2215
|
}
|
|
2216
2216
|
}
|
|
2217
2217
|
|
|
2218
|
+
/** Formats an EIP-4361-style sign-in message in the exact shape Dynamic's verifier accepts. */ function formatSiweMessage(params) {
|
|
2219
|
+
var _params_blockchainName;
|
|
2220
|
+
const header = `${params.domain} wants you to sign in with your ${(_params_blockchainName = params.blockchainName) != null ? _params_blockchainName : 'Ethereum'} account:`;
|
|
2221
|
+
var _params_issuedAt;
|
|
2222
|
+
const fields = [
|
|
2223
|
+
`URI: ${params.uri}`,
|
|
2224
|
+
'Version: 1',
|
|
2225
|
+
...params.chainId !== undefined ? [
|
|
2226
|
+
`Chain ID: ${params.chainId}`
|
|
2227
|
+
] : [],
|
|
2228
|
+
`Nonce: ${params.nonce}`,
|
|
2229
|
+
`Issued At: ${(_params_issuedAt = params.issuedAt) != null ? _params_issuedAt : new Date().toISOString()}`
|
|
2230
|
+
].join('\n');
|
|
2231
|
+
// No statement still keeps both blank lines (EIP-4361) — the verifier 400s otherwise.
|
|
2232
|
+
const statement = params.statement ? `${params.statement}\n\n` : '\n';
|
|
2233
|
+
return `${header}\n${params.address}\n\n${statement}${fields}`;
|
|
2234
|
+
}
|
|
2235
|
+
/** Throws unless `address` is a 0x-prefixed 20-byte hex EVM address. SIWS adds a base58 sibling. */ function assertEvmAddress(address) {
|
|
2236
|
+
if (!/^0x[0-9a-fA-F]{40}$/.test(address)) {
|
|
2237
|
+
throw new Error('wallet.signIn requires a 0x-prefixed 20-byte hex address');
|
|
2238
|
+
}
|
|
2239
|
+
}
|
|
2240
|
+
/** Resolves which origin a SIWE sign-in presents as. Throws before any network call. */ function resolveSiweOrigin(appOrigin, params) {
|
|
2241
|
+
if (params.domain && params.uri) return {
|
|
2242
|
+
domain: params.domain,
|
|
2243
|
+
uri: params.uri
|
|
2244
|
+
};
|
|
2245
|
+
if (!appOrigin) {
|
|
2246
|
+
throw new Error('wallet.signIn requires domain/uri — pass them or set appOrigin on createAuthClient');
|
|
2247
|
+
}
|
|
2248
|
+
let parsed;
|
|
2249
|
+
try {
|
|
2250
|
+
parsed = new URL(appOrigin);
|
|
2251
|
+
} catch (e) {
|
|
2252
|
+
throw new Error('createAuthClient appOrigin is not a valid URL');
|
|
2253
|
+
}
|
|
2254
|
+
var _params_domain, _params_uri;
|
|
2255
|
+
return {
|
|
2256
|
+
domain: (_params_domain = params.domain) != null ? _params_domain : parsed.host,
|
|
2257
|
+
uri: (_params_uri = params.uri) != null ? _params_uri : appOrigin
|
|
2258
|
+
};
|
|
2259
|
+
}
|
|
2260
|
+
|
|
2218
2261
|
const toAuthResult = (response)=>{
|
|
2219
2262
|
var _response_user;
|
|
2220
2263
|
if (response.mfaToken && !response.minifiedJwt && !response.jwt) {
|
|
@@ -2267,6 +2310,79 @@ const asAuthError = async (error, operation)=>{
|
|
|
2267
2310
|
},
|
|
2268
2311
|
fetchApi: options.fetchApi
|
|
2269
2312
|
}));
|
|
2313
|
+
const siwePrimitives = {
|
|
2314
|
+
async getNonce () {
|
|
2315
|
+
try {
|
|
2316
|
+
const { nonce } = await api.getNonce({
|
|
2317
|
+
environmentId
|
|
2318
|
+
});
|
|
2319
|
+
if (!nonce) throw new Error('nonce endpoint returned no nonce');
|
|
2320
|
+
return {
|
|
2321
|
+
nonce
|
|
2322
|
+
};
|
|
2323
|
+
} catch (error) {
|
|
2324
|
+
throw await asAuthError(error, 'SIWE nonce request');
|
|
2325
|
+
}
|
|
2326
|
+
},
|
|
2327
|
+
createMessage (params) {
|
|
2328
|
+
return formatSiweMessage(params);
|
|
2329
|
+
},
|
|
2330
|
+
async verify ({ message, signature, walletAddress, sessionPublicKey, walletName = 'unknown', walletProvider = WalletProviderEnum.CustodialService, chain = ChainEnum.Evm }) {
|
|
2331
|
+
try {
|
|
2332
|
+
const response = await api.verify({
|
|
2333
|
+
environmentId,
|
|
2334
|
+
verifyRequest: {
|
|
2335
|
+
messageToSign: message,
|
|
2336
|
+
signedMessage: signature,
|
|
2337
|
+
publicWalletAddress: walletAddress,
|
|
2338
|
+
chain,
|
|
2339
|
+
walletName,
|
|
2340
|
+
walletProvider,
|
|
2341
|
+
sessionPublicKey
|
|
2342
|
+
}
|
|
2343
|
+
});
|
|
2344
|
+
return toAuthResult(response);
|
|
2345
|
+
} catch (error) {
|
|
2346
|
+
throw await asAuthError(error, 'SIWE sign-in');
|
|
2347
|
+
}
|
|
2348
|
+
}
|
|
2349
|
+
};
|
|
2350
|
+
const signIn = async ({ address, signMessage, sessionPublicKey, domain, uri, chainId = 1, statement, walletName, walletProvider })=>{
|
|
2351
|
+
// A malformed address would only surface as an opaque server-side 400 after signing.
|
|
2352
|
+
assertEvmAddress(address);
|
|
2353
|
+
// Line breaks would corrupt the EIP-4361 message structure (opaque server-side 400).
|
|
2354
|
+
for (const [name, value] of Object.entries({
|
|
2355
|
+
domain,
|
|
2356
|
+
uri,
|
|
2357
|
+
statement
|
|
2358
|
+
})){
|
|
2359
|
+
if (value && /[\r\n]/.test(value)) {
|
|
2360
|
+
throw new Error(`wallet.signIn: ${name} must not contain line breaks`);
|
|
2361
|
+
}
|
|
2362
|
+
}
|
|
2363
|
+
const origin = resolveSiweOrigin(options.appOrigin, {
|
|
2364
|
+
domain,
|
|
2365
|
+
uri
|
|
2366
|
+
});
|
|
2367
|
+
const { nonce } = await siwePrimitives.getNonce();
|
|
2368
|
+
const message = siwePrimitives.createMessage({
|
|
2369
|
+
domain: origin.domain,
|
|
2370
|
+
address,
|
|
2371
|
+
uri: origin.uri,
|
|
2372
|
+
chainId,
|
|
2373
|
+
nonce,
|
|
2374
|
+
statement
|
|
2375
|
+
});
|
|
2376
|
+
const signature = await signMessage(message);
|
|
2377
|
+
return siwePrimitives.verify({
|
|
2378
|
+
message,
|
|
2379
|
+
signature,
|
|
2380
|
+
walletAddress: address,
|
|
2381
|
+
sessionPublicKey,
|
|
2382
|
+
walletName,
|
|
2383
|
+
walletProvider
|
|
2384
|
+
});
|
|
2385
|
+
};
|
|
2270
2386
|
return {
|
|
2271
2387
|
email: {
|
|
2272
2388
|
async sendOtp (email) {
|
|
@@ -2284,14 +2400,14 @@ const asAuthError = async (error, operation)=>{
|
|
|
2284
2400
|
throw await asAuthError(error, 'email OTP request');
|
|
2285
2401
|
}
|
|
2286
2402
|
},
|
|
2287
|
-
async verifyOtp ({ verificationUUID, code,
|
|
2403
|
+
async verifyOtp ({ verificationUUID, code, sessionPublicKey }) {
|
|
2288
2404
|
try {
|
|
2289
2405
|
const response = await api.signInWithEmailVerification({
|
|
2290
2406
|
environmentId,
|
|
2291
2407
|
emailVerificationVerifyRequest: {
|
|
2292
2408
|
verificationUUID,
|
|
2293
2409
|
verificationToken: code,
|
|
2294
|
-
sessionPublicKey
|
|
2410
|
+
sessionPublicKey
|
|
2295
2411
|
}
|
|
2296
2412
|
});
|
|
2297
2413
|
return toAuthResult(response);
|
|
@@ -2300,53 +2416,9 @@ const asAuthError = async (error, operation)=>{
|
|
|
2300
2416
|
}
|
|
2301
2417
|
}
|
|
2302
2418
|
},
|
|
2303
|
-
|
|
2304
|
-
|
|
2305
|
-
|
|
2306
|
-
const { nonce } = await api.getNonce({
|
|
2307
|
-
environmentId
|
|
2308
|
-
});
|
|
2309
|
-
if (!nonce) throw new Error('nonce endpoint returned no nonce');
|
|
2310
|
-
return {
|
|
2311
|
-
nonce
|
|
2312
|
-
};
|
|
2313
|
-
} catch (error) {
|
|
2314
|
-
throw await asAuthError(error, 'SIWE nonce request');
|
|
2315
|
-
}
|
|
2316
|
-
},
|
|
2317
|
-
createMessage (params) {
|
|
2318
|
-
const header = `${params.domain} wants you to sign in with your Ethereum account:`;
|
|
2319
|
-
var _params_issuedAt;
|
|
2320
|
-
const fields = [
|
|
2321
|
-
`URI: ${params.uri}`,
|
|
2322
|
-
'Version: 1',
|
|
2323
|
-
`Chain ID: ${params.chainId}`,
|
|
2324
|
-
`Nonce: ${params.nonce}`,
|
|
2325
|
-
`Issued At: ${(_params_issuedAt = params.issuedAt) != null ? _params_issuedAt : new Date().toISOString()}`
|
|
2326
|
-
].join('\n');
|
|
2327
|
-
const statement = params.statement ? `${params.statement}\n\n` : '';
|
|
2328
|
-
return `${header}\n${params.address}\n\n${statement}${fields}`;
|
|
2329
|
-
},
|
|
2330
|
-
async verify ({ message, signature, walletAddress, sessionPublicKeyHex, walletName = 'unknown', walletProvider = WalletProviderEnum.BrowserExtension, chain = ChainEnum.Evm }) {
|
|
2331
|
-
try {
|
|
2332
|
-
const response = await api.verify({
|
|
2333
|
-
environmentId,
|
|
2334
|
-
verifyRequest: {
|
|
2335
|
-
messageToSign: message,
|
|
2336
|
-
signedMessage: signature,
|
|
2337
|
-
publicWalletAddress: walletAddress,
|
|
2338
|
-
chain,
|
|
2339
|
-
walletName,
|
|
2340
|
-
walletProvider,
|
|
2341
|
-
sessionPublicKey: sessionPublicKeyHex
|
|
2342
|
-
}
|
|
2343
|
-
});
|
|
2344
|
-
return toAuthResult(response);
|
|
2345
|
-
} catch (error) {
|
|
2346
|
-
throw await asAuthError(error, 'SIWE sign-in');
|
|
2347
|
-
}
|
|
2348
|
-
}
|
|
2349
|
-
}
|
|
2419
|
+
wallet: _extends({}, siwePrimitives, {
|
|
2420
|
+
signIn
|
|
2421
|
+
})
|
|
2350
2422
|
};
|
|
2351
2423
|
}
|
|
2352
2424
|
|
package/package.json
CHANGED
|
@@ -1,12 +1,12 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@dynamic-labs-wallet/node",
|
|
3
|
-
"version": "1.0.
|
|
3
|
+
"version": "1.0.63",
|
|
4
4
|
"license": "Licensed under the Dynamic Labs, Inc. Terms Of Service (https://www.dynamic.xyz/terms-conditions)",
|
|
5
5
|
"type": "module",
|
|
6
6
|
"dependencies": {
|
|
7
|
-
"@dynamic-labs-wallet/core": "1.0.
|
|
7
|
+
"@dynamic-labs-wallet/core": "1.0.63",
|
|
8
8
|
"@dynamic-labs-wallet/forward-mpc-client": "1.0.1",
|
|
9
|
-
"@dynamic-labs-wallet/primitives": "1.0.
|
|
9
|
+
"@dynamic-labs-wallet/primitives": "1.0.63",
|
|
10
10
|
"@dynamic-labs/logger": "^4.81.0",
|
|
11
11
|
"@dynamic-labs/sdk-api-core": "^0.0.984",
|
|
12
12
|
"uuid": "11.1.0",
|
package/src/authClient.d.ts
CHANGED
|
@@ -4,6 +4,8 @@ export interface CreateAuthClientOptions {
|
|
|
4
4
|
baseUrl?: string;
|
|
5
5
|
/** Custom fetch implementation (tests, proxies). */
|
|
6
6
|
fetchApi?: FetchAPI;
|
|
7
|
+
/** Origin SIWE sign-ins present as — must be on the environment's allowlisted CORS origins. signIn derives domain/uri from it; per-call params override. */
|
|
8
|
+
appOrigin?: string;
|
|
7
9
|
}
|
|
8
10
|
export interface AuthResult {
|
|
9
11
|
/** Pass to DynamicWalletClient.authenticateJwt. Custody is yours; never log it. */
|
|
@@ -20,10 +22,10 @@ export interface DynamicAuthClient {
|
|
|
20
22
|
verificationUUID: string;
|
|
21
23
|
code: string;
|
|
22
24
|
/** Compressed P-256 hex from generateSessionKeyPair — binds the session key into the minted JWT. */
|
|
23
|
-
|
|
25
|
+
sessionPublicKey?: string;
|
|
24
26
|
}): Promise<AuthResult>;
|
|
25
27
|
};
|
|
26
|
-
|
|
28
|
+
wallet: {
|
|
27
29
|
getNonce(): Promise<{
|
|
28
30
|
nonce: string;
|
|
29
31
|
}>;
|
|
@@ -40,11 +42,24 @@ export interface DynamicAuthClient {
|
|
|
40
42
|
message: string;
|
|
41
43
|
signature: string;
|
|
42
44
|
walletAddress: string;
|
|
43
|
-
|
|
45
|
+
sessionPublicKey?: string;
|
|
44
46
|
walletName?: string;
|
|
45
47
|
walletProvider?: WalletProviderEnum;
|
|
46
48
|
chain?: ChainEnum;
|
|
47
49
|
}): Promise<AuthResult>;
|
|
50
|
+
/** One-call SIWE sign-in: nonce → message (built internally) → your signMessage callback → verify. Key custody stays behind the callback. */
|
|
51
|
+
signIn(params: {
|
|
52
|
+
address: string;
|
|
53
|
+
signMessage: (message: string) => Promise<string>;
|
|
54
|
+
sessionPublicKey?: string;
|
|
55
|
+
domain?: string;
|
|
56
|
+
uri?: string;
|
|
57
|
+
/** EVM-specific. Default 1. */
|
|
58
|
+
chainId?: number;
|
|
59
|
+
statement?: string;
|
|
60
|
+
walletName?: string;
|
|
61
|
+
walletProvider?: WalletProviderEnum;
|
|
62
|
+
}): Promise<AuthResult>;
|
|
48
63
|
};
|
|
49
64
|
}
|
|
50
65
|
/**
|
package/src/authClient.d.ts.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"authClient.d.ts","sourceRoot":"","sources":["../../packages/src/authClient.ts"],"names":[],"mappings":"AAAA,OAAO,EACL,SAAS,EAGT,kBAAkB,EAClB,KAAK,QAAQ,EAEd,MAAM,4BAA4B,CAAC;
|
|
1
|
+
{"version":3,"file":"authClient.d.ts","sourceRoot":"","sources":["../../packages/src/authClient.ts"],"names":[],"mappings":"AAAA,OAAO,EACL,SAAS,EAGT,kBAAkB,EAClB,KAAK,QAAQ,EAEd,MAAM,4BAA4B,CAAC;AAIpC,MAAM,WAAW,uBAAuB;IACtC,aAAa,EAAE,MAAM,CAAC;IACtB,OAAO,CAAC,EAAE,MAAM,CAAC;IACjB,oDAAoD;IACpD,QAAQ,CAAC,EAAE,QAAQ,CAAC;IACpB,4JAA4J;IAC5J,SAAS,CAAC,EAAE,MAAM,CAAC;CACpB;AAED,MAAM,WAAW,UAAU;IACzB,mFAAmF;IACnF,GAAG,EAAE,MAAM,CAAC;IACZ,SAAS,EAAE,MAAM,CAAC;IAClB,MAAM,CAAC,EAAE,MAAM,CAAC;CACjB;AAED,MAAM,WAAW,iBAAiB;IAChC,KAAK,EAAE;QACL,OAAO,CAAC,KAAK,EAAE,MAAM,GAAG,OAAO,CAAC;YAAE,gBAAgB,EAAE,MAAM,CAAA;SAAE,CAAC,CAAC;QAC9D,SAAS,CAAC,MAAM,EAAE;YAChB,gBAAgB,EAAE,MAAM,CAAC;YACzB,IAAI,EAAE,MAAM,CAAC;YACb,oGAAoG;YACpG,gBAAgB,CAAC,EAAE,MAAM,CAAC;SAC3B,GAAG,OAAO,CAAC,UAAU,CAAC,CAAC;KACzB,CAAC;IACF,MAAM,EAAE;QACN,QAAQ,IAAI,OAAO,CAAC;YAAE,KAAK,EAAE,MAAM,CAAA;SAAE,CAAC,CAAC;QACvC,aAAa,CAAC,MAAM,EAAE;YACpB,MAAM,EAAE,MAAM,CAAC;YACf,OAAO,EAAE,MAAM,CAAC;YAChB,GAAG,EAAE,MAAM,CAAC;YACZ,OAAO,EAAE,MAAM,CAAC;YAChB,KAAK,EAAE,MAAM,CAAC;YACd,SAAS,CAAC,EAAE,MAAM,CAAC;YACnB,QAAQ,CAAC,EAAE,MAAM,CAAC;SACnB,GAAG,MAAM,CAAC;QACX,MAAM,CAAC,MAAM,EAAE;YACb,OAAO,EAAE,MAAM,CAAC;YAChB,SAAS,EAAE,MAAM,CAAC;YAClB,aAAa,EAAE,MAAM,CAAC;YACtB,gBAAgB,CAAC,EAAE,MAAM,CAAC;YAC1B,UAAU,CAAC,EAAE,MAAM,CAAC;YACpB,cAAc,CAAC,EAAE,kBAAkB,CAAC;YACpC,KAAK,CAAC,EAAE,SAAS,CAAC;SACnB,GAAG,OAAO,CAAC,UAAU,CAAC,CAAC;QACxB,6IAA6I;QAC7I,MAAM,CAAC,MAAM,EAAE;YACb,OAAO,EAAE,MAAM,CAAC;YAChB,WAAW,EAAE,CAAC,OAAO,EAAE,MAAM,KAAK,OAAO,CAAC,MAAM,CAAC,CAAC;YAClD,gBAAgB,CAAC,EAAE,MAAM,CAAC;YAC1B,MAAM,CAAC,EAAE,MAAM,CAAC;YAChB,GAAG,CAAC,EAAE,MAAM,CAAC;YACb,+BAA+B;YAC/B,OAAO,CAAC,EAAE,MAAM,CAAC;YACjB,SAAS,CAAC,EAAE,MAAM,CAAC;YACnB,UAAU,CAAC,EAAE,MAAM,CAAC;YACpB,cAAc,CAAC,EAAE,kBAAkB,CAAC;SACrC,GAAG,OAAO,CAAC,UAAU,CAAC,CAAC;KACzB,CAAC;CACH;AA8CD;;;GAGG;AACH,wBAAgB,gBAAgB,CAAC,OAAO,EAAE,uBAAuB,GAAG,iBAAiB,CA6HpF"}
|
|
@@ -0,0 +1,25 @@
|
|
|
1
|
+
export interface SiweMessageParams {
|
|
2
|
+
domain: string;
|
|
3
|
+
address: string;
|
|
4
|
+
uri: string;
|
|
5
|
+
/** EVM-specific; omitted from the message when absent (e.g. Solana). */
|
|
6
|
+
chainId?: number;
|
|
7
|
+
nonce: string;
|
|
8
|
+
statement?: string;
|
|
9
|
+
issuedAt?: string;
|
|
10
|
+
/** Chain the account lives on, per the JS SDK's chain-generic formatter. Default 'Ethereum'. */
|
|
11
|
+
blockchainName?: string;
|
|
12
|
+
}
|
|
13
|
+
/** Formats an EIP-4361-style sign-in message in the exact shape Dynamic's verifier accepts. */
|
|
14
|
+
export declare function formatSiweMessage(params: SiweMessageParams): string;
|
|
15
|
+
/** Throws unless `address` is a 0x-prefixed 20-byte hex EVM address. SIWS adds a base58 sibling. */
|
|
16
|
+
export declare function assertEvmAddress(address: string): void;
|
|
17
|
+
/** Resolves which origin a SIWE sign-in presents as. Throws before any network call. */
|
|
18
|
+
export declare function resolveSiweOrigin(appOrigin: string | undefined, params: {
|
|
19
|
+
domain?: string;
|
|
20
|
+
uri?: string;
|
|
21
|
+
}): {
|
|
22
|
+
domain: string;
|
|
23
|
+
uri: string;
|
|
24
|
+
};
|
|
25
|
+
//# sourceMappingURL=siweUtils.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"siweUtils.d.ts","sourceRoot":"","sources":["../../packages/src/siweUtils.ts"],"names":[],"mappings":"AAAA,MAAM,WAAW,iBAAiB;IAChC,MAAM,EAAE,MAAM,CAAC;IACf,OAAO,EAAE,MAAM,CAAC;IAChB,GAAG,EAAE,MAAM,CAAC;IACZ,wEAAwE;IACxE,OAAO,CAAC,EAAE,MAAM,CAAC;IACjB,KAAK,EAAE,MAAM,CAAC;IACd,SAAS,CAAC,EAAE,MAAM,CAAC;IACnB,QAAQ,CAAC,EAAE,MAAM,CAAC;IAClB,gGAAgG;IAChG,cAAc,CAAC,EAAE,MAAM,CAAC;CACzB;AAED,+FAA+F;AAC/F,wBAAgB,iBAAiB,CAAC,MAAM,EAAE,iBAAiB,GAAG,MAAM,CAYnE;AAED,oGAAoG;AACpG,wBAAgB,gBAAgB,CAAC,OAAO,EAAE,MAAM,GAAG,IAAI,CAItD;AAED,wFAAwF;AACxF,wBAAgB,iBAAiB,CAC/B,SAAS,EAAE,MAAM,GAAG,SAAS,EAC7B,MAAM,EAAE;IAAE,MAAM,CAAC,EAAE,MAAM,CAAC;IAAC,GAAG,CAAC,EAAE,MAAM,CAAA;CAAE,GACxC;IAAE,MAAM,EAAE,MAAM,CAAC;IAAC,GAAG,EAAE,MAAM,CAAA;CAAE,CAYjC"}
|