@zerodev/wallet-core 0.0.1-alpha.23 → 0.0.1-alpha.24
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 -29
- package/dist/_cjs/actions/auth/authenticateWithEmail.js +1 -2
- package/dist/_cjs/actions/auth/authenticateWithEmail.js.map +1 -1
- package/dist/_cjs/actions/auth/getAuthenticators.js +3 -6
- package/dist/_cjs/actions/auth/getAuthenticators.js.map +1 -1
- package/dist/_cjs/actions/auth/index.js.map +1 -1
- package/dist/_cjs/actions/auth/loginWithStamp.js.map +1 -1
- package/dist/_cjs/actions/auth/registerWithOTP.js +1 -7
- package/dist/_cjs/actions/auth/registerWithOTP.js.map +1 -1
- package/dist/_cjs/actions/auth/registerWithPasskey.js.map +1 -1
- package/dist/_cjs/actions/index.js.map +1 -1
- package/dist/_cjs/actions/wallet/getUserWallet.js +3 -5
- package/dist/_cjs/actions/wallet/getUserWallet.js.map +1 -1
- package/dist/_cjs/client/transports/rest.js +33 -21
- package/dist/_cjs/client/transports/rest.js.map +1 -1
- package/dist/_cjs/core/createZeroDevWalletCore.js +1 -9
- package/dist/_cjs/core/createZeroDevWalletCore.js.map +1 -1
- package/dist/_cjs/index.js.map +1 -1
- package/dist/_cjs/index.native.js.map +1 -1
- package/dist/_esm/actions/auth/authenticateWithEmail.js +1 -2
- package/dist/_esm/actions/auth/authenticateWithEmail.js.map +1 -1
- package/dist/_esm/actions/auth/getAuthenticators.js +6 -6
- package/dist/_esm/actions/auth/getAuthenticators.js.map +1 -1
- package/dist/_esm/actions/auth/index.js.map +1 -1
- package/dist/_esm/actions/auth/loginWithStamp.js.map +1 -1
- package/dist/_esm/actions/auth/registerWithOTP.js +5 -7
- package/dist/_esm/actions/auth/registerWithOTP.js.map +1 -1
- package/dist/_esm/actions/auth/registerWithPasskey.js.map +1 -1
- package/dist/_esm/actions/index.js.map +1 -1
- package/dist/_esm/actions/wallet/getUserWallet.js +5 -5
- package/dist/_esm/actions/wallet/getUserWallet.js.map +1 -1
- package/dist/_esm/client/transports/rest.js +37 -22
- package/dist/_esm/client/transports/rest.js.map +1 -1
- package/dist/_esm/core/createZeroDevWalletCore.js +4 -9
- package/dist/_esm/core/createZeroDevWalletCore.js.map +1 -1
- package/dist/_esm/index.js.map +1 -1
- package/dist/_esm/index.native.js.map +1 -1
- package/dist/_types/actions/auth/authenticateWithEmail.d.ts +0 -6
- package/dist/_types/actions/auth/authenticateWithEmail.d.ts.map +1 -1
- package/dist/_types/actions/auth/index.d.ts +2 -2
- package/dist/_types/actions/auth/index.d.ts.map +1 -1
- package/dist/_types/actions/auth/loginWithStamp.d.ts +0 -4
- package/dist/_types/actions/auth/loginWithStamp.d.ts.map +1 -1
- package/dist/_types/actions/auth/registerWithOTP.d.ts +4 -11
- package/dist/_types/actions/auth/registerWithOTP.d.ts.map +1 -1
- package/dist/_types/actions/auth/registerWithPasskey.d.ts +0 -4
- package/dist/_types/actions/auth/registerWithPasskey.d.ts.map +1 -1
- package/dist/_types/actions/index.d.ts +1 -1
- package/dist/_types/actions/index.d.ts.map +1 -1
- package/dist/_types/client/transports/rest.d.ts +8 -1
- package/dist/_types/client/transports/rest.d.ts.map +1 -1
- package/dist/_types/core/createZeroDevWalletCore.d.ts +0 -6
- package/dist/_types/core/createZeroDevWalletCore.d.ts.map +1 -1
- package/dist/_types/index.d.ts +1 -1
- package/dist/_types/index.d.ts.map +1 -1
- package/dist/_types/index.native.d.ts +1 -1
- package/dist/_types/index.native.d.ts.map +1 -1
- package/dist/tsconfig.build.tsbuildinfo +1 -1
- package/package.json +1 -4
- package/src/actions/auth/authenticateWithEmail.ts +1 -9
- package/src/actions/auth/getAuthenticators.ts +6 -6
- package/src/actions/auth/index.ts +0 -2
- package/src/actions/auth/loginWithStamp.ts +0 -5
- package/src/actions/auth/registerWithOTP.ts +5 -28
- package/src/actions/auth/registerWithPasskey.ts +0 -5
- package/src/actions/index.ts +0 -1
- package/src/actions/wallet/getUserWallet.ts +5 -5
- package/src/client/transports/rest.ts +45 -23
- package/src/core/createZeroDevWalletCore.ts +4 -20
- package/src/index.native.ts +0 -1
- package/src/index.ts +0 -1
package/package.json
CHANGED
|
@@ -1,10 +1,7 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@zerodev/wallet-core",
|
|
3
|
-
"version": "0.0.1-alpha.
|
|
3
|
+
"version": "0.0.1-alpha.24",
|
|
4
4
|
"description": "ZeroDev Wallet SDK built on Turnkey",
|
|
5
|
-
"publishConfig": {
|
|
6
|
-
"tag": "alpha"
|
|
7
|
-
},
|
|
8
5
|
"sideEffects": false,
|
|
9
6
|
"main": "./dist/_cjs/index.js",
|
|
10
7
|
"module": "./dist/_esm/index.js",
|
|
@@ -1,10 +1,5 @@
|
|
|
1
1
|
import type { Client } from '../../client/types.js'
|
|
2
2
|
|
|
3
|
-
export type EmailCustomization = {
|
|
4
|
-
/** A template for the URL to be used in a magic link button, e.g. `https://dapp.xyz/%s`. The auth bundle will be interpolated into the `%s`. */
|
|
5
|
-
magicLinkTemplate?: string
|
|
6
|
-
}
|
|
7
|
-
|
|
8
3
|
export type AuthenticateWithEmailParameters = {
|
|
9
4
|
/** The email address to authenticate */
|
|
10
5
|
email: string
|
|
@@ -12,8 +7,6 @@ export type AuthenticateWithEmailParameters = {
|
|
|
12
7
|
projectId: string
|
|
13
8
|
/** Target public key for authentication */
|
|
14
9
|
targetPublicKey: string
|
|
15
|
-
/** Optional email customization settings */
|
|
16
|
-
emailCustomization?: EmailCustomization
|
|
17
10
|
}
|
|
18
11
|
|
|
19
12
|
export type AuthenticateWithEmailReturnType = {
|
|
@@ -37,14 +30,13 @@ export async function authenticateWithEmail(
|
|
|
37
30
|
client: Client,
|
|
38
31
|
params: AuthenticateWithEmailParameters,
|
|
39
32
|
): Promise<AuthenticateWithEmailReturnType> {
|
|
40
|
-
const { email, projectId, targetPublicKey
|
|
33
|
+
const { email, projectId, targetPublicKey } = params
|
|
41
34
|
|
|
42
35
|
return await client.request({
|
|
43
36
|
path: `${projectId}/auth/email-magic`,
|
|
44
37
|
method: 'POST',
|
|
45
38
|
body: {
|
|
46
39
|
email,
|
|
47
|
-
emailCustomization,
|
|
48
40
|
targetPublicKey,
|
|
49
41
|
projectId,
|
|
50
42
|
},
|
|
@@ -72,18 +72,18 @@ export async function getAuthenticators(
|
|
|
72
72
|
client: Client,
|
|
73
73
|
params: GetAuthenticatorsParameters,
|
|
74
74
|
): Promise<GetAuthenticatorsReturnType> {
|
|
75
|
-
const {
|
|
75
|
+
const { projectId, token } = params
|
|
76
76
|
|
|
77
|
+
// GET behind StampCheckUser: the backend resolves the user from the stamped
|
|
78
|
+
// credential (+ session JWT), so no body / sub-org is sent. The stamp signs
|
|
79
|
+
// the X-Timestamp value (see transport `stampPostion: 'timestamp'`).
|
|
77
80
|
return await client.request({
|
|
78
81
|
path: `${projectId}/authenticators`,
|
|
79
|
-
method: '
|
|
80
|
-
body: {
|
|
81
|
-
subOrganizationId,
|
|
82
|
-
},
|
|
82
|
+
method: 'GET',
|
|
83
83
|
headers: {
|
|
84
84
|
Authorization: `Bearer ${token}`,
|
|
85
85
|
},
|
|
86
86
|
stamp: true,
|
|
87
|
-
stampPostion: '
|
|
87
|
+
stampPostion: 'timestamp',
|
|
88
88
|
})
|
|
89
89
|
}
|
|
@@ -2,7 +2,6 @@ export {
|
|
|
2
2
|
type AuthenticateWithEmailParameters,
|
|
3
3
|
type AuthenticateWithEmailReturnType,
|
|
4
4
|
authenticateWithEmail,
|
|
5
|
-
type EmailCustomization,
|
|
6
5
|
} from './authenticateWithEmail.js'
|
|
7
6
|
|
|
8
7
|
export {
|
|
@@ -44,7 +43,6 @@ export {
|
|
|
44
43
|
loginWithStamp,
|
|
45
44
|
} from './loginWithStamp.js'
|
|
46
45
|
export {
|
|
47
|
-
type OtpCodeCustomization,
|
|
48
46
|
type OtpContact,
|
|
49
47
|
type RegisterWithOTPParameters,
|
|
50
48
|
type RegisterWithOTPReturnType,
|
|
@@ -3,11 +3,6 @@ import type { Client } from '../../client/types.js'
|
|
|
3
3
|
import type { Stamp } from '../../stampers/types.js'
|
|
4
4
|
import type { StamperType } from '../../types/session.js'
|
|
5
5
|
|
|
6
|
-
export type EmailCustomization = {
|
|
7
|
-
/** A template for the URL to be used in a magic link button, e.g. `https://dapp.xyz/%s`. The auth bundle will be interpolated into the `%s`. */
|
|
8
|
-
magicLinkTemplate?: string
|
|
9
|
-
}
|
|
10
|
-
|
|
11
6
|
export type LoginWithStampParameters = {
|
|
12
7
|
/** The project ID for the request */
|
|
13
8
|
projectId: string
|
|
@@ -1,5 +1,4 @@
|
|
|
1
1
|
import type { Client } from '../../client/types.js'
|
|
2
|
-
import type { EmailCustomization } from './authenticateWithEmail.js'
|
|
3
2
|
|
|
4
3
|
export type OtpContact = {
|
|
5
4
|
/** The OTP delivery type (currently only 'email' is supported) */
|
|
@@ -8,13 +7,6 @@ export type OtpContact = {
|
|
|
8
7
|
contact: string
|
|
9
8
|
}
|
|
10
9
|
|
|
11
|
-
export type OtpCodeCustomization = {
|
|
12
|
-
/** The length of the OTP code (must be between 6 and 9 inclusive) */
|
|
13
|
-
length: 6 | 7 | 8 | 9
|
|
14
|
-
/** Whether the OTP code should be alphanumeric */
|
|
15
|
-
alphanumeric: boolean
|
|
16
|
-
}
|
|
17
|
-
|
|
18
10
|
export type RegisterWithOTPParameters = {
|
|
19
11
|
/** The email address to register */
|
|
20
12
|
email: string
|
|
@@ -22,10 +14,6 @@ export type RegisterWithOTPParameters = {
|
|
|
22
14
|
contact: OtpContact
|
|
23
15
|
/** The project ID for the request */
|
|
24
16
|
projectId: string
|
|
25
|
-
/** Optional email customization settings */
|
|
26
|
-
emailCustomization?: EmailCustomization
|
|
27
|
-
/** Optional OTP code customization settings */
|
|
28
|
-
otpCodeCustomization?: OtpCodeCustomization
|
|
29
17
|
}
|
|
30
18
|
|
|
31
19
|
export type RegisterWithOTPReturnType = {
|
|
@@ -43,6 +31,10 @@ export type RegisterWithOTPReturnType = {
|
|
|
43
31
|
* Initiates OTP (One-Time Password) authentication
|
|
44
32
|
* This will send an OTP code to the specified contact method
|
|
45
33
|
*
|
|
34
|
+
* OTP code length/format and, when enabled, the magic-link URL template are
|
|
35
|
+
* configured per-project on the backend (`wallet.otp_configs`). The client no
|
|
36
|
+
* longer sends customization fields — they are ignored server-side.
|
|
37
|
+
*
|
|
46
38
|
* @param client - The ZeroDev Wallet client
|
|
47
39
|
* @param params - The parameters for OTP initiation
|
|
48
40
|
* @returns The result including otpId needed for verification
|
|
@@ -65,20 +57,7 @@ export async function registerWithOTP(
|
|
|
65
57
|
client: Client,
|
|
66
58
|
params: RegisterWithOTPParameters,
|
|
67
59
|
): Promise<RegisterWithOTPReturnType> {
|
|
68
|
-
const {
|
|
69
|
-
email,
|
|
70
|
-
contact,
|
|
71
|
-
projectId,
|
|
72
|
-
emailCustomization,
|
|
73
|
-
otpCodeCustomization,
|
|
74
|
-
} = params
|
|
75
|
-
|
|
76
|
-
if (
|
|
77
|
-
otpCodeCustomization &&
|
|
78
|
-
(otpCodeCustomization.length < 6 || otpCodeCustomization.length > 9)
|
|
79
|
-
) {
|
|
80
|
-
throw new Error('OTP code length must be between 6 and 9')
|
|
81
|
-
}
|
|
60
|
+
const { email, contact, projectId } = params
|
|
82
61
|
|
|
83
62
|
return await client.request({
|
|
84
63
|
path: `${projectId}/auth/init/otp`,
|
|
@@ -86,8 +65,6 @@ export async function registerWithOTP(
|
|
|
86
65
|
body: {
|
|
87
66
|
email,
|
|
88
67
|
contact,
|
|
89
|
-
emailCustomization,
|
|
90
|
-
otpCodeCustomization,
|
|
91
68
|
},
|
|
92
69
|
})
|
|
93
70
|
}
|
|
@@ -1,10 +1,5 @@
|
|
|
1
1
|
import type { Client } from '../../client/types.js'
|
|
2
2
|
|
|
3
|
-
export type EmailCustomization = {
|
|
4
|
-
/** A template for the URL to be used in a magic link button, e.g. `https://dapp.xyz/%s`. The auth bundle will be interpolated into the `%s`. */
|
|
5
|
-
magicLinkTemplate?: string
|
|
6
|
-
}
|
|
7
|
-
|
|
8
3
|
export type RegisterWithPasskeyParameters = {
|
|
9
4
|
/** The project ID for the request */
|
|
10
5
|
projectId: string
|
package/src/actions/index.ts
CHANGED
|
@@ -37,17 +37,17 @@ export async function getUserWallet(
|
|
|
37
37
|
client: Client,
|
|
38
38
|
params: GetUserWalletParameters,
|
|
39
39
|
): Promise<GetUserWalletReturnType> {
|
|
40
|
-
const {
|
|
40
|
+
const { projectId, token } = params
|
|
41
41
|
|
|
42
|
+
// GET behind StampCheckUser: user is resolved from the stamped credential
|
|
43
|
+
// (+ session JWT); no body sent. The stamp signs the X-Timestamp value.
|
|
42
44
|
return await client.request({
|
|
43
45
|
path: `${projectId}/user-wallet`,
|
|
44
|
-
|
|
45
|
-
organizationId,
|
|
46
|
-
},
|
|
46
|
+
method: 'GET',
|
|
47
47
|
headers: {
|
|
48
48
|
Authorization: `Bearer ${token}`,
|
|
49
49
|
},
|
|
50
50
|
stamp: true,
|
|
51
|
-
stampPostion: '
|
|
51
|
+
stampPostion: 'timestamp',
|
|
52
52
|
})
|
|
53
53
|
}
|
|
@@ -10,7 +10,14 @@ export type RestRequestArgs = {
|
|
|
10
10
|
headers?: Record<string, string>
|
|
11
11
|
stamp?: boolean
|
|
12
12
|
stampWith?: StamperType
|
|
13
|
-
|
|
13
|
+
/**
|
|
14
|
+
* Where the stamp goes / what it signs:
|
|
15
|
+
* - `body`/`headers`: sign the canonicalized request body (POST endpoints).
|
|
16
|
+
* - `timestamp`: GET endpoints behind StampCheckUser — sign the current
|
|
17
|
+
* unix-millis string, send it as the `X-Timestamp` header plus the stamp
|
|
18
|
+
* header. No request body. Matches the backend's `FormatTimestamp`.
|
|
19
|
+
*/
|
|
20
|
+
stampPostion?: 'body' | 'headers' | 'timestamp'
|
|
14
21
|
/** Include credentials (cookies) in the request */
|
|
15
22
|
credentials?: RequestCredentials
|
|
16
23
|
}
|
|
@@ -49,8 +56,8 @@ export function rest(url: string, cfg: RestTransportConfig): RestTransport {
|
|
|
49
56
|
|
|
50
57
|
try {
|
|
51
58
|
let requestBody = args.body
|
|
52
|
-
let requestHeaders = {
|
|
53
|
-
...(cfg.fetchOptions?.headers ?? {}),
|
|
59
|
+
let requestHeaders: Record<string, string> = {
|
|
60
|
+
...((cfg.fetchOptions?.headers as Record<string, string>) ?? {}),
|
|
54
61
|
...(args.headers ?? {}),
|
|
55
62
|
'content-type': 'application/json',
|
|
56
63
|
}
|
|
@@ -65,32 +72,47 @@ export function rest(url: string, cfg: RestTransportConfig): RestTransport {
|
|
|
65
72
|
} else {
|
|
66
73
|
stamper = cfg.apiKeyStamper
|
|
67
74
|
}
|
|
68
|
-
const { body, apiUrl } = args.body
|
|
69
|
-
const bodyString = canonicalizeEx(body ?? args.body)
|
|
70
|
-
const stamp = await stamper.stamp(bodyString)
|
|
71
75
|
|
|
72
|
-
//
|
|
73
|
-
|
|
76
|
+
// Timestamped stamp for GET endpoints behind StampCheckUser: the
|
|
77
|
+
// signed body is the unix-millis string itself (the backend rebuilds
|
|
78
|
+
// it from the X-Timestamp header via FormatTimestamp). No request body.
|
|
79
|
+
if (args.stampPostion === 'timestamp') {
|
|
80
|
+
const ts = Date.now().toString()
|
|
81
|
+
const stamp = await stamper.stamp(ts)
|
|
74
82
|
requestHeaders = {
|
|
75
83
|
...requestHeaders,
|
|
84
|
+
'X-Timestamp': ts,
|
|
76
85
|
[stamp.stampHeaderName]: stamp.stampHeaderValue,
|
|
77
86
|
}
|
|
78
|
-
|
|
79
|
-
requestBody = {
|
|
80
|
-
body: bodyString,
|
|
81
|
-
stamp: {
|
|
82
|
-
stampHeaderName: stamp.stampHeaderName,
|
|
83
|
-
stampHeaderValue: stamp.stampHeaderValue,
|
|
84
|
-
},
|
|
85
|
-
apiUrl: apiUrl,
|
|
86
|
-
}
|
|
87
|
+
requestBody = undefined
|
|
87
88
|
} else {
|
|
88
|
-
|
|
89
|
-
|
|
90
|
-
|
|
91
|
-
|
|
92
|
-
|
|
93
|
-
|
|
89
|
+
const { body, apiUrl } = args.body
|
|
90
|
+
const bodyString = canonicalizeEx(body ?? args.body)
|
|
91
|
+
const stamp = await stamper.stamp(bodyString)
|
|
92
|
+
|
|
93
|
+
// Restructure request body to match backend expectation
|
|
94
|
+
if (args.stampPostion === 'headers') {
|
|
95
|
+
requestHeaders = {
|
|
96
|
+
...requestHeaders,
|
|
97
|
+
[stamp.stampHeaderName]: stamp.stampHeaderValue,
|
|
98
|
+
}
|
|
99
|
+
} else if (body) {
|
|
100
|
+
requestBody = {
|
|
101
|
+
body: bodyString,
|
|
102
|
+
stamp: {
|
|
103
|
+
stampHeaderName: stamp.stampHeaderName,
|
|
104
|
+
stampHeaderValue: stamp.stampHeaderValue,
|
|
105
|
+
},
|
|
106
|
+
apiUrl: apiUrl,
|
|
107
|
+
}
|
|
108
|
+
} else {
|
|
109
|
+
requestBody = {
|
|
110
|
+
...args.body,
|
|
111
|
+
stamp: {
|
|
112
|
+
stampHeaderName: stamp.stampHeaderName,
|
|
113
|
+
stampHeaderValue: stamp.stampHeaderValue,
|
|
114
|
+
},
|
|
115
|
+
}
|
|
94
116
|
}
|
|
95
117
|
}
|
|
96
118
|
}
|
|
@@ -1,8 +1,4 @@
|
|
|
1
1
|
import type { LocalAccount } from 'viem/accounts'
|
|
2
|
-
import type {
|
|
3
|
-
EmailCustomization,
|
|
4
|
-
OtpCodeCustomization,
|
|
5
|
-
} from '../actions/auth/index.js'
|
|
6
2
|
import { toViemAccount } from '../adapters/viem.js'
|
|
7
3
|
import {
|
|
8
4
|
type CreateTransportOptions,
|
|
@@ -37,8 +33,6 @@ export interface ZeroDevWalletConfigCore {
|
|
|
37
33
|
fetchOptions?: CreateTransportOptions['fetchOptions']
|
|
38
34
|
}
|
|
39
35
|
|
|
40
|
-
// Re-export EmailCustomization for convenience
|
|
41
|
-
export type { EmailCustomization } from '../actions/auth/index.js'
|
|
42
36
|
export type { StorageAdapter, StorageManager } from '../storage/manager.js'
|
|
43
37
|
// Re-export new session types
|
|
44
38
|
export type { StamperType, ZeroDevWalletSession } from '../types/session.js'
|
|
@@ -61,8 +55,6 @@ export type AuthParams =
|
|
|
61
55
|
type: 'email' | 'sms'
|
|
62
56
|
contact: string
|
|
63
57
|
}
|
|
64
|
-
emailCustomization?: EmailCustomization
|
|
65
|
-
otpCodeCustomization?: OtpCodeCustomization
|
|
66
58
|
}
|
|
67
59
|
| {
|
|
68
60
|
type: 'otp'
|
|
@@ -79,8 +71,6 @@ export type AuthParams =
|
|
|
79
71
|
type: 'magicLink'
|
|
80
72
|
mode: 'send'
|
|
81
73
|
email: string
|
|
82
|
-
redirectURL: string
|
|
83
|
-
otpCodeCustomization?: OtpCodeCustomization
|
|
84
74
|
}
|
|
85
75
|
| {
|
|
86
76
|
type: 'magicLink'
|
|
@@ -338,17 +328,14 @@ export async function createZeroDevWalletCore(
|
|
|
338
328
|
let otpParams: Extract<AuthParams, { type: 'otp' }>
|
|
339
329
|
if (params.type === 'magicLink') {
|
|
340
330
|
if (params.mode === 'send') {
|
|
331
|
+
// Magic-link vs plain-OTP delivery and the link URL template are
|
|
332
|
+
// configured per-project on the backend (`wallet.otp_configs`);
|
|
333
|
+
// the client just initiates OTP and the backend decides.
|
|
341
334
|
otpParams = {
|
|
342
335
|
type: 'otp',
|
|
343
336
|
mode: 'sendOtp',
|
|
344
337
|
email: params.email,
|
|
345
338
|
contact: { type: 'email', contact: params.email },
|
|
346
|
-
emailCustomization: {
|
|
347
|
-
magicLinkTemplate: `${params.redirectURL}${params.redirectURL.includes('?') ? '&' : '?'}code=%s`,
|
|
348
|
-
},
|
|
349
|
-
...(params.otpCodeCustomization && {
|
|
350
|
-
otpCodeCustomization: params.otpCodeCustomization,
|
|
351
|
-
}),
|
|
352
339
|
}
|
|
353
340
|
} else {
|
|
354
341
|
otpParams = {
|
|
@@ -364,15 +351,12 @@ export async function createZeroDevWalletCore(
|
|
|
364
351
|
}
|
|
365
352
|
|
|
366
353
|
if (otpParams.mode === 'sendOtp') {
|
|
367
|
-
const { email, contact
|
|
368
|
-
otpParams
|
|
354
|
+
const { email, contact } = otpParams
|
|
369
355
|
|
|
370
356
|
const data = await client.registerWithOTP({
|
|
371
357
|
email,
|
|
372
358
|
contact,
|
|
373
359
|
projectId,
|
|
374
|
-
...(emailCustomization && { emailCustomization }),
|
|
375
|
-
...(otpCodeCustomization && { otpCodeCustomization }),
|
|
376
360
|
})
|
|
377
361
|
|
|
378
362
|
return data
|
package/src/index.native.ts
CHANGED