@coinbase/cdp-core 0.0.15 → 0.0.16

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/esm/index.js CHANGED
@@ -1,23 +1,31 @@
1
- import { exportEvmAccount as t, getCurrentUser as i, initialize as n, isSignedIn as o, onAuthStateChange as a, sendEvmTransaction as m, signEvmHash as s, signEvmMessage as E, signEvmTransaction as g, signEvmTypedData as v, signInWithEmail as c, signOut as d, verifyEmailOTP as p } from "./index2.js";
2
- import { createCDPEmbeddedWallet as l } from "./index3.js";
3
- import { EIP1193ProviderError as x, STANDARD_ERROR_CODES as A } from "./index4.js";
4
- import { toViemAccount as T } from "./index5.js";
1
+ import { exportEvmAccount as n, getCurrentUser as m, initialize as E, isSignedIn as a, onAuthStateChange as s, sendEvmTransaction as p, signEvmHash as c, signEvmMessage as d, signEvmTransaction as g, signEvmTypedData as v, signInWithEmail as T, signOut as A, verifyEmailOTP as f } from "./index2.js";
2
+ import { APIError as x, ErrorType as h, HttpErrorType as l, SendEvmTransactionWithEndUserAccountBodyNetwork as y } from "@coinbase/cdp-api-client";
3
+ import "viem";
4
+ import { createCDPEmbeddedWallet as P } from "./index3.js";
5
+ import { EIP1193ProviderError as C, STANDARD_ERROR_CODES as I } from "./index4.js";
6
+ import "ox";
7
+ import "zustand";
8
+ import { toViemAccount as R } from "./index5.js";
5
9
  export {
6
- x as EIP1193ProviderError,
7
- A as STANDARD_ERROR_CODES,
8
- l as createCDPEmbeddedWallet,
9
- t as exportEvmAccount,
10
- i as getCurrentUser,
11
- n as initialize,
12
- o as isSignedIn,
13
- a as onAuthStateChange,
14
- m as sendEvmTransaction,
15
- s as signEvmHash,
16
- E as signEvmMessage,
10
+ x as APIError,
11
+ C as EIP1193ProviderError,
12
+ h as ErrorType,
13
+ l as HttpErrorType,
14
+ I as STANDARD_ERROR_CODES,
15
+ y as SendEvmTransactionWithEndUserAccountBodyNetwork,
16
+ P as createCDPEmbeddedWallet,
17
+ n as exportEvmAccount,
18
+ m as getCurrentUser,
19
+ E as initialize,
20
+ a as isSignedIn,
21
+ s as onAuthStateChange,
22
+ p as sendEvmTransaction,
23
+ c as signEvmHash,
24
+ d as signEvmMessage,
17
25
  g as signEvmTransaction,
18
26
  v as signEvmTypedData,
19
- c as signInWithEmail,
20
- d as signOut,
21
- T as toViemAccount,
22
- p as verifyEmailOTP
27
+ T as signInWithEmail,
28
+ A as signOut,
29
+ R as toViemAccount,
30
+ f as verifyEmailOTP
23
31
  };
@@ -1,5 +1,7 @@
1
+ import "@coinbase/cdp-api-client";
2
+ import "viem";
1
3
  import { mockUser as e } from "./index12.js";
2
- class h {
4
+ class r {
3
5
  authState = null;
4
6
  authStateChangeCallback = null;
5
7
  /**
@@ -115,5 +117,5 @@ class h {
115
117
  }
116
118
  }
117
119
  export {
118
- h as MockAuthManager
120
+ r as MockAuthManager
119
121
  };
@@ -1,6 +1,8 @@
1
- const e = "0x0000000000000000000000000000000000000000", t = {
1
+ import "@coinbase/cdp-api-client";
2
+ import "viem";
3
+ const t = "0x0000000000000000000000000000000000000000", s = {
2
4
  userId: "mock-user-id",
3
- evmAccounts: [e],
5
+ evmAccounts: [t],
4
6
  authenticationMethods: {
5
7
  email: {
6
8
  type: "email",
@@ -9,6 +11,6 @@ const e = "0x0000000000000000000000000000000000000000", t = {
9
11
  }
10
12
  };
11
13
  export {
12
- e as mockAddress,
13
- t as mockUser
14
+ t as mockAddress,
15
+ s as mockUser
14
16
  };
@@ -1,20 +1,22 @@
1
- let n = null, e = null;
2
- const r = (t) => {
1
+ import "@coinbase/cdp-api-client";
2
+ import "viem";
3
+ let n = null, r = null;
4
+ const i = (t) => {
3
5
  n = t;
4
- }, o = () => {
6
+ }, a = () => {
5
7
  if (!n)
6
8
  throw new Error("SDK not initialized");
7
9
  return n;
8
- }, i = (t) => {
9
- e = t;
10
- }, a = () => {
11
- if (!e)
10
+ }, g = (t) => {
11
+ r = t;
12
+ }, l = () => {
13
+ if (!r)
12
14
  throw new Error("SDK not initialized");
13
- return e;
15
+ return r;
14
16
  };
15
17
  export {
16
- o as getConfig,
17
- a as getCoreAuthManager,
18
- r as setConfig,
19
- i as setCoreAuthManager
18
+ a as getConfig,
19
+ l as getCoreAuthManager,
20
+ i as setConfig,
21
+ g as setCoreAuthManager
20
22
  };
@@ -1,162 +1,43 @@
1
- const H = (m) => (h, n, r) => {
2
- const s = r.subscribe;
3
- return r.subscribe = (c, i, a) => {
4
- let l = c;
5
- if (i) {
6
- const g = a?.equalityFn || Object.is;
7
- let v = c(r.getState());
8
- l = (f) => {
9
- const u = c(f);
10
- if (!g(v, u)) {
11
- const y = v;
12
- i(v = u, y);
13
- }
14
- }, a?.fireImmediately && i(v, v);
15
- }
16
- return s(l);
17
- }, m(h, n, r);
18
- }, R = H;
19
- function F(m, h) {
20
- let n;
21
- try {
22
- n = m();
23
- } catch {
24
- return;
1
+ import { CompactSign as i } from "./index70.js";
2
+ import { JWTInvalid as r } from "./index71.js";
3
+ import { JWTClaimsBuilder as n } from "./index72.js";
4
+ class d {
5
+ #s;
6
+ #t;
7
+ constructor(t = {}) {
8
+ this.#t = new n(t);
25
9
  }
26
- return {
27
- getItem: (s) => {
28
- var e;
29
- const c = (a) => a === null ? null : JSON.parse(a, void 0), i = (e = n.getItem(s)) != null ? e : null;
30
- return i instanceof Promise ? i.then(c) : c(i);
31
- },
32
- setItem: (s, e) => n.setItem(s, JSON.stringify(e, void 0)),
33
- removeItem: (s) => n.removeItem(s)
34
- };
35
- }
36
- const p = (m) => (h) => {
37
- try {
38
- const n = m(h);
39
- return n instanceof Promise ? n : {
40
- then(r) {
41
- return p(r)(n);
42
- },
43
- catch(r) {
44
- return this;
45
- }
46
- };
47
- } catch (n) {
48
- return {
49
- then(r) {
50
- return this;
51
- },
52
- catch(r) {
53
- return p(r)(n);
54
- }
55
- };
10
+ setIssuer(t) {
11
+ return this.#t.iss = t, this;
12
+ }
13
+ setSubject(t) {
14
+ return this.#t.sub = t, this;
15
+ }
16
+ setAudience(t) {
17
+ return this.#t.aud = t, this;
18
+ }
19
+ setJti(t) {
20
+ return this.#t.jti = t, this;
21
+ }
22
+ setNotBefore(t) {
23
+ return this.#t.nbf = t, this;
56
24
  }
57
- }, O = (m, h) => (n, r, s) => {
58
- let e = {
59
- storage: F(() => localStorage),
60
- partialize: (t) => t,
61
- version: 0,
62
- merge: (t, S) => ({
63
- ...S,
64
- ...t
65
- }),
66
- ...h
67
- }, c = !1;
68
- const i = /* @__PURE__ */ new Set(), a = /* @__PURE__ */ new Set();
69
- let l = e.storage;
70
- if (!l)
71
- return m(
72
- (...t) => {
73
- console.warn(
74
- `[zustand persist middleware] Unable to update item '${e.name}', the given storage is currently unavailable.`
75
- ), n(...t);
76
- },
77
- r,
78
- s
79
- );
80
- const g = () => {
81
- const t = e.partialize({ ...r() });
82
- return l.setItem(e.name, {
83
- state: t,
84
- version: e.version
85
- });
86
- }, v = s.setState;
87
- s.setState = (t, S) => {
88
- v(t, S), g();
89
- };
90
- const f = m(
91
- (...t) => {
92
- n(...t), g();
93
- },
94
- r,
95
- s
96
- );
97
- s.getInitialState = () => f;
98
- let u;
99
- const y = () => {
100
- var t, S;
101
- if (!l) return;
102
- c = !1, i.forEach((o) => {
103
- var d;
104
- return o((d = r()) != null ? d : f);
105
- });
106
- const b = ((S = e.onRehydrateStorage) == null ? void 0 : S.call(e, (t = r()) != null ? t : f)) || void 0;
107
- return p(l.getItem.bind(l))(e.name).then((o) => {
108
- if (o)
109
- if (typeof o.version == "number" && o.version !== e.version) {
110
- if (e.migrate) {
111
- const d = e.migrate(
112
- o.state,
113
- o.version
114
- );
115
- return d instanceof Promise ? d.then((I) => [!0, I]) : [!0, d];
116
- }
117
- console.error(
118
- "State loaded from storage couldn't be migrated since no migrate function was provided"
119
- );
120
- } else
121
- return [!1, o.state];
122
- return [!1, void 0];
123
- }).then((o) => {
124
- var d;
125
- const [I, _] = o;
126
- if (u = e.merge(
127
- _,
128
- (d = r()) != null ? d : f
129
- ), n(u, !0), I)
130
- return g();
131
- }).then(() => {
132
- b?.(u, void 0), u = r(), c = !0, a.forEach((o) => o(u));
133
- }).catch((o) => {
134
- b?.(void 0, o);
135
- });
136
- };
137
- return s.persist = {
138
- setOptions: (t) => {
139
- e = {
140
- ...e,
141
- ...t
142
- }, t.storage && (l = t.storage);
143
- },
144
- clearStorage: () => {
145
- l?.removeItem(e.name);
146
- },
147
- getOptions: () => e,
148
- rehydrate: () => y(),
149
- hasHydrated: () => c,
150
- onHydrate: (t) => (i.add(t), () => {
151
- i.delete(t);
152
- }),
153
- onFinishHydration: (t) => (a.add(t), () => {
154
- a.delete(t);
155
- })
156
- }, e.skipHydration || y(), u || f;
157
- }, w = O;
25
+ setExpirationTime(t) {
26
+ return this.#t.exp = t, this;
27
+ }
28
+ setIssuedAt(t) {
29
+ return this.#t.iat = t, this;
30
+ }
31
+ setProtectedHeader(t) {
32
+ return this.#s = t, this;
33
+ }
34
+ async sign(t, e) {
35
+ const s = new i(this.#t.data());
36
+ if (s.setProtectedHeader(this.#s), Array.isArray(this.#s?.crit) && this.#s.crit.includes("b64") && this.#s.b64 === !1)
37
+ throw new r("JWTs MUST NOT use unencoded payload");
38
+ return s.sign(t, e);
39
+ }
40
+ }
158
41
  export {
159
- F as createJSONStorage,
160
- w as persist,
161
- R as subscribeWithSelector
42
+ d as SignJWT
162
43
  };
@@ -1,50 +1,19 @@
1
- class n {
2
- events = {};
3
- /**
4
- * Add an event listener.
5
- *
6
- * @param event - The name of the event to listen for.
7
- * @param listener - The function to call when the event is emitted.
8
- */
9
- on(e, s) {
10
- this.events[e] || (this.events[e] = []), this.events[e].push(s);
11
- }
12
- /**
13
- * Remove an event listener.
14
- *
15
- * @param event - The name of the event to remove the listener from.
16
- * @param listener - The function to remove from the event listeners.
17
- */
18
- removeListener(e, s) {
19
- if (!this.events[e])
20
- return;
21
- const t = this.events[e].indexOf(s);
22
- t > -1 && this.events[e].splice(t, 1);
23
- }
24
- /**
25
- * Emit an event.
26
- *
27
- * @param event - The name of the event to emit.
28
- * @param args - The arguments to pass to the event listeners.
29
- */
30
- emit(e, ...s) {
31
- this.events[e] && this.events[e].forEach((t) => {
32
- try {
33
- t(...s);
34
- } catch (i) {
35
- console.error(`Error in event listener for ${e}:`, i);
36
- }
37
- });
38
- }
39
- /**
40
- * Remove all listeners for an event.
41
- *
42
- * @param event - The name of the event to remove all listeners from. If not provided, removes all listeners for all events.
43
- */
44
- removeAllListeners(e) {
45
- e ? delete this.events[e] : this.events = {};
46
- }
1
+ async function n() {
2
+ const e = await window.crypto.subtle.generateKey(
3
+ {
4
+ name: "ECDSA",
5
+ namedCurve: "P-256"
6
+ // secp256r1
7
+ },
8
+ !1,
9
+ // Do not allow key export.
10
+ ["sign", "verify"]
11
+ // Key usages
12
+ ), r = await window.crypto.subtle.exportKey("spki", e.publicKey), t = new Uint8Array(r), a = btoa(
13
+ Array.from(t).map((i) => String.fromCharCode(i)).join("")
14
+ );
15
+ return { privateKey: e.privateKey, publicKeyBase64: a };
47
16
  }
48
17
  export {
49
- n as EventEmitter
18
+ n as createKeyPair
50
19
  };
@@ -1,153 +1,7 @@
1
- import { Hex as y } from "ox";
2
- import { createWalletClient as I } from "viem";
3
- import { signEvmTypedData as E, signEvmHash as S, getCurrentUser as f, signOut as P, sendEvmTransaction as R, signEvmTransaction as T, signEvmMessage as A } from "./index2.js";
4
- import "./index3.js";
5
- import { validateUserOwnsAddress as m, EIP1193ProviderError as l, STANDARD_ERROR_CODES as s, RPCRequestError as o, validateUserHasEvmAccount as x, validateUserConnected as C } from "./index4.js";
6
- import { isChainIdSupportedForCDPSends as D, chainIdToNameMapping as b } from "./index13.js";
7
- function g(e) {
8
- return {
9
- to: e.to,
10
- data: e.data,
11
- value: e.value ? BigInt(e.value) : void 0,
12
- nonce: e.nonce ? Number(e.nonce) : void 0,
13
- gas: e.gas ? BigInt(e.gas) : void 0,
14
- maxFeePerGas: e.maxFeePerGas ? BigInt(e.maxFeePerGas) : void 0,
15
- maxPriorityFeePerGas: e.maxPriorityFeePerGas ? BigInt(e.maxPriorityFeePerGas) : void 0,
16
- type: "eip1559"
17
- };
18
- }
19
- async function U() {
20
- return (await f())?.evmAccounts || [];
21
- }
22
- async function H(e, n) {
23
- const a = await C();
24
- return e.emit("connect", {
25
- chainId: y.fromNumber(n.getState().chainId)
26
- }), a.evmAccounts || [];
27
- }
28
- async function M(e) {
29
- const [n, a] = e;
30
- await m(a);
31
- const t = Buffer.from(n.slice(2), "hex").toString();
32
- try {
33
- return (await A({
34
- evmAccount: a,
35
- message: t
36
- })).signature;
37
- } catch (c) {
38
- throw new l(
39
- s.provider.userRejectedRequest,
40
- c instanceof Error ? c.message : "Signing failed"
41
- );
42
- }
43
- }
44
- async function _(e) {
45
- const [n, a] = e;
46
- await m(n);
47
- try {
48
- return (await E({
49
- evmAccount: n,
50
- typedData: JSON.parse(a)
51
- })).signature;
52
- } catch (t) {
53
- throw new l(
54
- s.provider.userRejectedRequest,
55
- t instanceof Error ? t.message : "Signing failed"
56
- );
57
- }
58
- }
59
- async function k(e, n, a) {
60
- const [t] = e;
61
- if (!t || typeof t != "object")
62
- throw new o(
63
- s.rpc.invalidParams,
64
- "Transaction parameter must be an object"
65
- );
66
- if (!t.to)
67
- throw new o(
68
- s.rpc.invalidParams,
69
- "Transaction must include 'to' field"
70
- );
71
- const d = (await x()).evmAccounts?.[0], u = n.getState(), i = t.chainId ? Number(t.chainId) : u.chainId;
72
- if (!d)
73
- throw new o(
74
- s.rpc.invalidParams,
75
- "User does not have an EVM account"
76
- );
77
- if (D(i))
78
- try {
79
- return (await R({
80
- evmAccount: d,
81
- transaction: { ...g(t), chainId: i },
82
- network: b[i]
83
- })).transactionHash;
84
- } catch (r) {
85
- throw console.log("Transaction failed", r), new o(
86
- s.rpc.transactionRejected,
87
- r instanceof Error ? r.message : "Transaction failed"
88
- );
89
- }
90
- else
91
- try {
92
- const r = I({
93
- // Safe as we check before calling this handler that chainId is configured
94
- chain: u.chains.find((h) => h.id === i),
95
- transport: a[i],
96
- account: d
97
- }), p = u.chains.find((h) => h.id === i), w = await r.prepareTransactionRequest({
98
- ...g(t),
99
- chain: p
100
- }), v = await T({
101
- evmAccount: d,
102
- transaction: {
103
- ...w,
104
- type: "eip1559"
105
- }
106
- });
107
- return await r.sendRawTransaction({
108
- serializedTransaction: v.signedTransaction
109
- });
110
- } catch (r) {
111
- throw new o(
112
- s.rpc.transactionRejected,
113
- r instanceof Error ? r.message : "Transaction failed"
114
- );
115
- }
116
- }
117
- async function z(e) {
118
- const [n, a] = e;
119
- await m(a);
120
- try {
121
- return (await S({
122
- evmAccount: a,
123
- hash: n
124
- })).signature;
125
- } catch (t) {
126
- throw new l(
127
- s.provider.userRejectedRequest,
128
- t instanceof Error ? t.message : "Signing failed"
129
- );
130
- }
131
- }
132
- async function J(e) {
133
- return `0x${e.getState().chainId.toString(16)}`;
134
- }
135
- async function V() {
136
- await f() && await P();
137
- }
138
- function W(e, n) {
139
- const a = Number.parseInt(e[0].chainId, 16);
140
- n.getState().setChainId(a);
1
+ async function t() {
2
+ const r = new Uint8Array(16);
3
+ return window.crypto.getRandomValues(r), Array.from(r, (n) => n.toString(16).padStart(2, "0")).join("");
141
4
  }
142
5
  export {
143
- U as handleAccounts,
144
- J as handleChainId,
145
- V as handleDisconnect,
146
- z as handleEthSign,
147
- M as handlePersonalSign,
148
- H as handleRequestAccounts,
149
- k as handleSendTransaction,
150
- _ as handleSignTypedData,
151
- W as handleSwitchEthereumChain,
152
- g as shimProviderTxRequest
6
+ t as generateRandomId
153
7
  };
@@ -8,8 +8,9 @@ import { MockAuthManager as C } from "./index11.js";
8
8
  import { mockUser as d } from "./index12.js";
9
9
  import { isChainSupportedForCDPSends as T } from "./index13.js";
10
10
  import { getConfig as r, setCoreAuthManager as g, getCoreAuthManager as n, setConfig as j } from "./index14.js";
11
+ import "viem";
11
12
  import { serializeTransaction as m } from "./index15.js";
12
- const $ = async (e) => {
13
+ const q = async (e) => {
13
14
  if (!e.projectId)
14
15
  throw new Error("Project ID is required");
15
16
  let s;
@@ -30,7 +31,7 @@ const $ = async (e) => {
30
31
  g(t), w(t);
31
32
  }
32
33
  await n().ensureInitialized();
33
- }, q = async (e) => {
34
+ }, B = async (e) => {
34
35
  if (r().useMock)
35
36
  return {
36
37
  message: "Mock sign in initiated",
@@ -46,7 +47,7 @@ const $ = async (e) => {
46
47
  flowId: t.flowId,
47
48
  message: t.message
48
49
  };
49
- }, B = async (e) => {
50
+ }, V = async (e) => {
50
51
  if (r().useMock)
51
52
  return await n().setAuthState({
52
53
  accessToken: "mock-access-token",
@@ -80,7 +81,7 @@ const $ = async (e) => {
80
81
  user: c,
81
82
  isNewUser: t.isNewEndUser
82
83
  };
83
- }, V = async () => n().getUser(), G = async () => n().isSignedIn(), J = async () => {
84
+ }, G = async () => n().getUser(), J = async () => n().isSignedIn(), L = async () => {
84
85
  if (r().useMock) {
85
86
  await n().signOut();
86
87
  return;
@@ -88,15 +89,15 @@ const $ = async (e) => {
88
89
  if (!await n().isSignedIn())
89
90
  throw new Error("User not signed in");
90
91
  await n().signOut();
91
- }, L = (e) => {
92
+ }, Q = (e) => {
92
93
  n().addAuthStateChangeCallback(e);
93
- }, Q = async (e) => r().useMock ? { signature: "0x0" } : i(e, n(), async ({ user: s, walletSecretId: t }) => ({
94
+ }, R = async (e) => r().useMock ? { signature: "0x0" } : i(e, n(), async ({ user: s, walletSecretId: t }) => ({
94
95
  signature: (await I(r().projectId, s.userId, {
95
96
  hash: e.hash,
96
97
  address: e.evmAccount,
97
98
  walletSecretId: t
98
99
  })).signature
99
- })), R = async (e) => r().useMock ? { signedTransaction: "0x0" } : i(e, n(), async ({ user: s, walletSecretId: t }) => {
100
+ })), X = async (e) => r().useMock ? { signedTransaction: "0x0" } : i(e, n(), async ({ user: s, walletSecretId: t }) => {
100
101
  const a = m(e.transaction);
101
102
  return {
102
103
  signedTransaction: (await l(
@@ -109,7 +110,7 @@ const $ = async (e) => {
109
110
  }
110
111
  )).signedTransaction
111
112
  };
112
- }), X = async (e) => {
113
+ }), Y = async (e) => {
113
114
  if (!T(e.network))
114
115
  throw new Error(`Chain ${e.network} is not supported by the CDP Apis`);
115
116
  if (r().useMock)
@@ -127,19 +128,19 @@ const $ = async (e) => {
127
128
  }
128
129
  )).transactionHash
129
130
  }));
130
- }, Y = async (e) => r().useMock ? { signature: "0x0" } : i(e, n(), async ({ user: s, walletSecretId: t }) => ({
131
+ }, Z = async (e) => r().useMock ? { signature: "0x0" } : i(e, n(), async ({ user: s, walletSecretId: t }) => ({
131
132
  signature: (await A(r().projectId, s.userId, {
132
133
  message: e.message,
133
134
  address: e.evmAccount,
134
135
  walletSecretId: t
135
136
  })).signature
136
- })), Z = async (e) => r().useMock ? { signature: "0x0" } : i(e, n(), async ({ user: s, walletSecretId: t }) => ({
137
+ })), _ = async (e) => r().useMock ? { signature: "0x0" } : i(e, n(), async ({ user: s, walletSecretId: t }) => ({
137
138
  signature: (await E(r().projectId, s.userId, {
138
139
  typedData: e.typedData,
139
140
  address: e.evmAccount,
140
141
  walletSecretId: t
141
142
  })).signature
142
- })), _ = async (e) => {
143
+ })), ee = async (e) => {
143
144
  if (r().useMock)
144
145
  return {
145
146
  privateKey: "mock-private-key"
@@ -160,17 +161,17 @@ const $ = async (e) => {
160
161
  });
161
162
  };
162
163
  export {
163
- _ as exportEvmAccount,
164
- V as getCurrentUser,
165
- $ as initialize,
166
- G as isSignedIn,
167
- L as onAuthStateChange,
168
- X as sendEvmTransaction,
169
- Q as signEvmHash,
170
- Y as signEvmMessage,
171
- R as signEvmTransaction,
172
- Z as signEvmTypedData,
173
- q as signInWithEmail,
174
- J as signOut,
175
- B as verifyEmailOTP
164
+ ee as exportEvmAccount,
165
+ G as getCurrentUser,
166
+ q as initialize,
167
+ J as isSignedIn,
168
+ Q as onAuthStateChange,
169
+ Y as sendEvmTransaction,
170
+ R as signEvmHash,
171
+ Z as signEvmMessage,
172
+ X as signEvmTransaction,
173
+ _ as signEvmTypedData,
174
+ B as signInWithEmail,
175
+ L as signOut,
176
+ V as verifyEmailOTP
176
177
  };