@originals/auth 1.8.0 → 1.8.2
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/package.json +15 -12
- package/.turbo/turbo-build.log +0 -1
- package/dist/client/index.d.ts +0 -23
- package/dist/client/index.d.ts.map +0 -1
- package/dist/client/index.js +0 -23
- package/dist/client/index.js.map +0 -1
- package/dist/client/server-auth.d.ts +0 -61
- package/dist/client/server-auth.d.ts.map +0 -1
- package/dist/client/server-auth.js +0 -77
- package/dist/client/server-auth.js.map +0 -1
- package/dist/client/turnkey-client.d.ts +0 -59
- package/dist/client/turnkey-client.d.ts.map +0 -1
- package/dist/client/turnkey-client.js +0 -279
- package/dist/client/turnkey-client.js.map +0 -1
- package/dist/client/turnkey-did-signer.d.ts +0 -58
- package/dist/client/turnkey-did-signer.d.ts.map +0 -1
- package/dist/client/turnkey-did-signer.js +0 -131
- package/dist/client/turnkey-did-signer.js.map +0 -1
- package/dist/index.d.ts +0 -23
- package/dist/index.d.ts.map +0 -1
- package/dist/index.js +0 -27
- package/dist/index.js.map +0 -1
- package/dist/server/email-auth.d.ts +0 -42
- package/dist/server/email-auth.d.ts.map +0 -1
- package/dist/server/email-auth.js +0 -187
- package/dist/server/email-auth.js.map +0 -1
- package/dist/server/index.d.ts +0 -22
- package/dist/server/index.d.ts.map +0 -1
- package/dist/server/index.js +0 -22
- package/dist/server/index.js.map +0 -1
- package/dist/server/jwt.d.ts +0 -49
- package/dist/server/jwt.d.ts.map +0 -1
- package/dist/server/jwt.js +0 -113
- package/dist/server/jwt.js.map +0 -1
- package/dist/server/middleware.d.ts +0 -39
- package/dist/server/middleware.d.ts.map +0 -1
- package/dist/server/middleware.js +0 -112
- package/dist/server/middleware.js.map +0 -1
- package/dist/server/turnkey-client.d.ts +0 -24
- package/dist/server/turnkey-client.d.ts.map +0 -1
- package/dist/server/turnkey-client.js +0 -118
- package/dist/server/turnkey-client.js.map +0 -1
- package/dist/server/turnkey-signer.d.ts +0 -40
- package/dist/server/turnkey-signer.d.ts.map +0 -1
- package/dist/server/turnkey-signer.js +0 -121
- package/dist/server/turnkey-signer.js.map +0 -1
- package/dist/types.d.ts +0 -155
- package/dist/types.d.ts.map +0 -1
- package/dist/types.js +0 -5
- package/dist/types.js.map +0 -1
- package/eslint.config.js +0 -32
- package/tests/index.test.ts +0 -29
- package/tests/server-auth.test.ts +0 -167
- package/tsconfig.json +0 -32
package/package.json
CHANGED
|
@@ -1,26 +1,29 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@originals/auth",
|
|
3
|
-
"version": "1.8.
|
|
3
|
+
"version": "1.8.2",
|
|
4
4
|
"description": "Turnkey-based authentication for the Originals Protocol",
|
|
5
5
|
"type": "module",
|
|
6
|
-
"main": "
|
|
7
|
-
"types": "
|
|
6
|
+
"main": "src/index.ts",
|
|
7
|
+
"types": "src/index.ts",
|
|
8
|
+
"files": [
|
|
9
|
+
"src"
|
|
10
|
+
],
|
|
8
11
|
"exports": {
|
|
9
12
|
".": {
|
|
10
|
-
"types": "./
|
|
11
|
-
"import": "./
|
|
13
|
+
"types": "./src/index.ts",
|
|
14
|
+
"import": "./src/index.ts"
|
|
12
15
|
},
|
|
13
16
|
"./server": {
|
|
14
|
-
"types": "./
|
|
15
|
-
"import": "./
|
|
17
|
+
"types": "./src/server/index.ts",
|
|
18
|
+
"import": "./src/server/index.ts"
|
|
16
19
|
},
|
|
17
20
|
"./client": {
|
|
18
|
-
"types": "./
|
|
19
|
-
"import": "./
|
|
21
|
+
"types": "./src/client/index.ts",
|
|
22
|
+
"import": "./src/client/index.ts"
|
|
20
23
|
},
|
|
21
24
|
"./types": {
|
|
22
|
-
"types": "./
|
|
23
|
-
"import": "./
|
|
25
|
+
"types": "./src/types.ts",
|
|
26
|
+
"import": "./src/types.ts"
|
|
24
27
|
}
|
|
25
28
|
},
|
|
26
29
|
"scripts": {
|
|
@@ -48,7 +51,7 @@
|
|
|
48
51
|
},
|
|
49
52
|
"dependencies": {
|
|
50
53
|
"@turnkey/sdk-server": "^5.0.0",
|
|
51
|
-
"@originals/sdk": "^1.
|
|
54
|
+
"@originals/sdk": "^1.8.1",
|
|
52
55
|
"jsonwebtoken": "^9.0.2",
|
|
53
56
|
"@noble/hashes": "^2.0.1",
|
|
54
57
|
"@noble/ed25519": "^2.0.0"
|
package/.turbo/turbo-build.log
DELETED
|
@@ -1 +0,0 @@
|
|
|
1
|
-
$ bunx tsc && bunx tsc-alias
|
package/dist/client/index.d.ts
DELETED
|
@@ -1,23 +0,0 @@
|
|
|
1
|
-
/**
|
|
2
|
-
* Client-side authentication utilities
|
|
3
|
-
*
|
|
4
|
-
* Pure library functions for Turnkey authentication.
|
|
5
|
-
* No React dependencies - consuming apps should create their own hooks.
|
|
6
|
-
*
|
|
7
|
-
* @example
|
|
8
|
-
* ```typescript
|
|
9
|
-
* import {
|
|
10
|
-
* initializeTurnkeyClient,
|
|
11
|
-
* initOtp,
|
|
12
|
-
* completeOtp,
|
|
13
|
-
* fetchUser,
|
|
14
|
-
* fetchWallets,
|
|
15
|
-
* TurnkeyDIDSigner,
|
|
16
|
-
* createDIDWithTurnkey
|
|
17
|
-
* } from '@originals/auth/client';
|
|
18
|
-
* ```
|
|
19
|
-
*/
|
|
20
|
-
export { initializeTurnkeyClient, initOtp, completeOtp, fetchUser, fetchWallets, getKeyByCurve, createWalletWithAccounts, ensureWalletWithAccounts, TurnkeySessionExpiredError, withTokenExpiration, } from './turnkey-client';
|
|
21
|
-
export { TurnkeyDIDSigner, createDIDWithTurnkey } from './turnkey-did-signer';
|
|
22
|
-
export { sendOtp, verifyOtp, type ServerAuthOptions } from './server-auth';
|
|
23
|
-
//# sourceMappingURL=index.d.ts.map
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/client/index.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;;GAkBG;AAEH,OAAO,EACL,uBAAuB,EACvB,OAAO,EACP,WAAW,EACX,SAAS,EACT,YAAY,EACZ,aAAa,EACb,wBAAwB,EACxB,wBAAwB,EACxB,0BAA0B,EAC1B,mBAAmB,GACpB,MAAM,kBAAkB,CAAC;AAE1B,OAAO,EAAE,gBAAgB,EAAE,oBAAoB,EAAE,MAAM,sBAAsB,CAAC;AAE9E,OAAO,EAAE,OAAO,EAAE,SAAS,EAAE,KAAK,iBAAiB,EAAE,MAAM,eAAe,CAAC"}
|
package/dist/client/index.js
DELETED
|
@@ -1,23 +0,0 @@
|
|
|
1
|
-
/**
|
|
2
|
-
* Client-side authentication utilities
|
|
3
|
-
*
|
|
4
|
-
* Pure library functions for Turnkey authentication.
|
|
5
|
-
* No React dependencies - consuming apps should create their own hooks.
|
|
6
|
-
*
|
|
7
|
-
* @example
|
|
8
|
-
* ```typescript
|
|
9
|
-
* import {
|
|
10
|
-
* initializeTurnkeyClient,
|
|
11
|
-
* initOtp,
|
|
12
|
-
* completeOtp,
|
|
13
|
-
* fetchUser,
|
|
14
|
-
* fetchWallets,
|
|
15
|
-
* TurnkeyDIDSigner,
|
|
16
|
-
* createDIDWithTurnkey
|
|
17
|
-
* } from '@originals/auth/client';
|
|
18
|
-
* ```
|
|
19
|
-
*/
|
|
20
|
-
export { initializeTurnkeyClient, initOtp, completeOtp, fetchUser, fetchWallets, getKeyByCurve, createWalletWithAccounts, ensureWalletWithAccounts, TurnkeySessionExpiredError, withTokenExpiration, } from './turnkey-client';
|
|
21
|
-
export { TurnkeyDIDSigner, createDIDWithTurnkey } from './turnkey-did-signer';
|
|
22
|
-
export { sendOtp, verifyOtp } from './server-auth';
|
|
23
|
-
//# sourceMappingURL=index.js.map
|
package/dist/client/index.js.map
DELETED
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/client/index.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;;GAkBG;AAEH,OAAO,EACL,uBAAuB,EACvB,OAAO,EACP,WAAW,EACX,SAAS,EACT,YAAY,EACZ,aAAa,EACb,wBAAwB,EACxB,wBAAwB,EACxB,0BAA0B,EAC1B,mBAAmB,GACpB,MAAM,kBAAkB,CAAC;AAE1B,OAAO,EAAE,gBAAgB,EAAE,oBAAoB,EAAE,MAAM,sBAAsB,CAAC;AAE9E,OAAO,EAAE,OAAO,EAAE,SAAS,EAA0B,MAAM,eAAe,CAAC"}
|
|
@@ -1,61 +0,0 @@
|
|
|
1
|
-
/**
|
|
2
|
-
* Client-side helpers for server-proxied authentication
|
|
3
|
-
* Use these when your server handles Turnkey API keys
|
|
4
|
-
*
|
|
5
|
-
* @example
|
|
6
|
-
* ```typescript
|
|
7
|
-
* import { sendOtp, verifyOtp } from '@originals/auth/client';
|
|
8
|
-
*
|
|
9
|
-
* // Send OTP to user's email via your server
|
|
10
|
-
* const { sessionId } = await sendOtp('user@example.com');
|
|
11
|
-
*
|
|
12
|
-
* // Verify the code they enter
|
|
13
|
-
* const { verified, email, subOrgId } = await verifyOtp(sessionId, '123456');
|
|
14
|
-
* ```
|
|
15
|
-
*/
|
|
16
|
-
import type { InitiateAuthResult, VerifyAuthResult } from '../types';
|
|
17
|
-
/**
|
|
18
|
-
* Options for server-proxied auth functions
|
|
19
|
-
*/
|
|
20
|
-
export interface ServerAuthOptions {
|
|
21
|
-
/** Custom fetch function (for testing) */
|
|
22
|
-
fetch?: typeof fetch;
|
|
23
|
-
}
|
|
24
|
-
/**
|
|
25
|
-
* Send OTP via your server endpoint
|
|
26
|
-
* Server should call initiateEmailAuth() from @originals/auth/server
|
|
27
|
-
*
|
|
28
|
-
* @param email - User's email address
|
|
29
|
-
* @param endpoint - Server endpoint URL (default: '/api/auth/send-otp')
|
|
30
|
-
* @param options - Optional configuration
|
|
31
|
-
* @returns Promise with sessionId and message
|
|
32
|
-
*
|
|
33
|
-
* @example
|
|
34
|
-
* ```typescript
|
|
35
|
-
* const { sessionId, message } = await sendOtp('user@example.com');
|
|
36
|
-
* // sessionId is used for verification step
|
|
37
|
-
* // message is user-friendly text to display
|
|
38
|
-
* ```
|
|
39
|
-
*/
|
|
40
|
-
export declare function sendOtp(email: string, endpoint?: string, options?: ServerAuthOptions): Promise<InitiateAuthResult>;
|
|
41
|
-
/**
|
|
42
|
-
* Verify OTP via your server endpoint
|
|
43
|
-
* Server should call verifyEmailAuth() from @originals/auth/server
|
|
44
|
-
*
|
|
45
|
-
* @param sessionId - Session ID from sendOtp result
|
|
46
|
-
* @param code - OTP code entered by user
|
|
47
|
-
* @param endpoint - Server endpoint URL (default: '/api/auth/verify-otp')
|
|
48
|
-
* @param options - Optional configuration
|
|
49
|
-
* @returns Promise with verification result
|
|
50
|
-
*
|
|
51
|
-
* @example
|
|
52
|
-
* ```typescript
|
|
53
|
-
* const { verified, email, subOrgId } = await verifyOtp(sessionId, '123456');
|
|
54
|
-
* if (verified) {
|
|
55
|
-
* // User is authenticated
|
|
56
|
-
* console.log(`Authenticated: ${email}`);
|
|
57
|
-
* }
|
|
58
|
-
* ```
|
|
59
|
-
*/
|
|
60
|
-
export declare function verifyOtp(sessionId: string, code: string, endpoint?: string, options?: ServerAuthOptions): Promise<VerifyAuthResult>;
|
|
61
|
-
//# sourceMappingURL=server-auth.d.ts.map
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"server-auth.d.ts","sourceRoot":"","sources":["../../src/client/server-auth.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;GAcG;AAEH,OAAO,KAAK,EAAE,kBAAkB,EAAE,gBAAgB,EAAE,MAAM,UAAU,CAAC;AAErE;;GAEG;AACH,MAAM,WAAW,iBAAiB;IAChC,0CAA0C;IAC1C,KAAK,CAAC,EAAE,OAAO,KAAK,CAAC;CACtB;AAED;;;;;;;;;;;;;;;GAeG;AACH,wBAAsB,OAAO,CAC3B,KAAK,EAAE,MAAM,EACb,QAAQ,SAAuB,EAC/B,OAAO,CAAC,EAAE,iBAAiB,GAC1B,OAAO,CAAC,kBAAkB,CAAC,CAc7B;AAED;;;;;;;;;;;;;;;;;;GAkBG;AACH,wBAAsB,SAAS,CAC7B,SAAS,EAAE,MAAM,EACjB,IAAI,EAAE,MAAM,EACZ,QAAQ,SAAyB,EACjC,OAAO,CAAC,EAAE,iBAAiB,GAC1B,OAAO,CAAC,gBAAgB,CAAC,CAc3B"}
|
|
@@ -1,77 +0,0 @@
|
|
|
1
|
-
/**
|
|
2
|
-
* Client-side helpers for server-proxied authentication
|
|
3
|
-
* Use these when your server handles Turnkey API keys
|
|
4
|
-
*
|
|
5
|
-
* @example
|
|
6
|
-
* ```typescript
|
|
7
|
-
* import { sendOtp, verifyOtp } from '@originals/auth/client';
|
|
8
|
-
*
|
|
9
|
-
* // Send OTP to user's email via your server
|
|
10
|
-
* const { sessionId } = await sendOtp('user@example.com');
|
|
11
|
-
*
|
|
12
|
-
* // Verify the code they enter
|
|
13
|
-
* const { verified, email, subOrgId } = await verifyOtp(sessionId, '123456');
|
|
14
|
-
* ```
|
|
15
|
-
*/
|
|
16
|
-
/**
|
|
17
|
-
* Send OTP via your server endpoint
|
|
18
|
-
* Server should call initiateEmailAuth() from @originals/auth/server
|
|
19
|
-
*
|
|
20
|
-
* @param email - User's email address
|
|
21
|
-
* @param endpoint - Server endpoint URL (default: '/api/auth/send-otp')
|
|
22
|
-
* @param options - Optional configuration
|
|
23
|
-
* @returns Promise with sessionId and message
|
|
24
|
-
*
|
|
25
|
-
* @example
|
|
26
|
-
* ```typescript
|
|
27
|
-
* const { sessionId, message } = await sendOtp('user@example.com');
|
|
28
|
-
* // sessionId is used for verification step
|
|
29
|
-
* // message is user-friendly text to display
|
|
30
|
-
* ```
|
|
31
|
-
*/
|
|
32
|
-
export async function sendOtp(email, endpoint = '/api/auth/send-otp', options) {
|
|
33
|
-
const fetchFn = options?.fetch ?? fetch;
|
|
34
|
-
const response = await fetchFn(endpoint, {
|
|
35
|
-
method: 'POST',
|
|
36
|
-
headers: { 'Content-Type': 'application/json' },
|
|
37
|
-
body: JSON.stringify({ email }),
|
|
38
|
-
});
|
|
39
|
-
if (!response.ok) {
|
|
40
|
-
const error = await response.json().catch(() => ({ message: 'Failed to send OTP' }));
|
|
41
|
-
throw new Error(error.message ?? `HTTP ${response.status}`);
|
|
42
|
-
}
|
|
43
|
-
return response.json();
|
|
44
|
-
}
|
|
45
|
-
/**
|
|
46
|
-
* Verify OTP via your server endpoint
|
|
47
|
-
* Server should call verifyEmailAuth() from @originals/auth/server
|
|
48
|
-
*
|
|
49
|
-
* @param sessionId - Session ID from sendOtp result
|
|
50
|
-
* @param code - OTP code entered by user
|
|
51
|
-
* @param endpoint - Server endpoint URL (default: '/api/auth/verify-otp')
|
|
52
|
-
* @param options - Optional configuration
|
|
53
|
-
* @returns Promise with verification result
|
|
54
|
-
*
|
|
55
|
-
* @example
|
|
56
|
-
* ```typescript
|
|
57
|
-
* const { verified, email, subOrgId } = await verifyOtp(sessionId, '123456');
|
|
58
|
-
* if (verified) {
|
|
59
|
-
* // User is authenticated
|
|
60
|
-
* console.log(`Authenticated: ${email}`);
|
|
61
|
-
* }
|
|
62
|
-
* ```
|
|
63
|
-
*/
|
|
64
|
-
export async function verifyOtp(sessionId, code, endpoint = '/api/auth/verify-otp', options) {
|
|
65
|
-
const fetchFn = options?.fetch ?? fetch;
|
|
66
|
-
const response = await fetchFn(endpoint, {
|
|
67
|
-
method: 'POST',
|
|
68
|
-
headers: { 'Content-Type': 'application/json' },
|
|
69
|
-
body: JSON.stringify({ sessionId, code }),
|
|
70
|
-
});
|
|
71
|
-
if (!response.ok) {
|
|
72
|
-
const error = await response.json().catch(() => ({ message: 'Verification failed' }));
|
|
73
|
-
throw new Error(error.message ?? `HTTP ${response.status}`);
|
|
74
|
-
}
|
|
75
|
-
return response.json();
|
|
76
|
-
}
|
|
77
|
-
//# sourceMappingURL=server-auth.js.map
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"server-auth.js","sourceRoot":"","sources":["../../src/client/server-auth.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;GAcG;AAYH;;;;;;;;;;;;;;;GAeG;AACH,MAAM,CAAC,KAAK,UAAU,OAAO,CAC3B,KAAa,EACb,QAAQ,GAAG,oBAAoB,EAC/B,OAA2B;IAE3B,MAAM,OAAO,GAAG,OAAO,EAAE,KAAK,IAAI,KAAK,CAAC;IACxC,MAAM,QAAQ,GAAG,MAAM,OAAO,CAAC,QAAQ,EAAE;QACvC,MAAM,EAAE,MAAM;QACd,OAAO,EAAE,EAAE,cAAc,EAAE,kBAAkB,EAAE;QAC/C,IAAI,EAAE,IAAI,CAAC,SAAS,CAAC,EAAE,KAAK,EAAE,CAAC;KAChC,CAAC,CAAC;IAEH,IAAI,CAAC,QAAQ,CAAC,EAAE,EAAE,CAAC;QACjB,MAAM,KAAK,GAAG,MAAM,QAAQ,CAAC,IAAI,EAAE,CAAC,KAAK,CAAC,GAAG,EAAE,CAAC,CAAC,EAAE,OAAO,EAAE,oBAAoB,EAAE,CAAC,CAAyB,CAAC;QAC7G,MAAM,IAAI,KAAK,CAAC,KAAK,CAAC,OAAO,IAAI,QAAQ,QAAQ,CAAC,MAAM,EAAE,CAAC,CAAC;IAC9D,CAAC;IAED,OAAO,QAAQ,CAAC,IAAI,EAAiC,CAAC;AACxD,CAAC;AAED;;;;;;;;;;;;;;;;;;GAkBG;AACH,MAAM,CAAC,KAAK,UAAU,SAAS,CAC7B,SAAiB,EACjB,IAAY,EACZ,QAAQ,GAAG,sBAAsB,EACjC,OAA2B;IAE3B,MAAM,OAAO,GAAG,OAAO,EAAE,KAAK,IAAI,KAAK,CAAC;IACxC,MAAM,QAAQ,GAAG,MAAM,OAAO,CAAC,QAAQ,EAAE;QACvC,MAAM,EAAE,MAAM;QACd,OAAO,EAAE,EAAE,cAAc,EAAE,kBAAkB,EAAE;QAC/C,IAAI,EAAE,IAAI,CAAC,SAAS,CAAC,EAAE,SAAS,EAAE,IAAI,EAAE,CAAC;KAC1C,CAAC,CAAC;IAEH,IAAI,CAAC,QAAQ,CAAC,EAAE,EAAE,CAAC;QACjB,MAAM,KAAK,GAAG,MAAM,QAAQ,CAAC,IAAI,EAAE,CAAC,KAAK,CAAC,GAAG,EAAE,CAAC,CAAC,EAAE,OAAO,EAAE,qBAAqB,EAAE,CAAC,CAAyB,CAAC;QAC9G,MAAM,IAAI,KAAK,CAAC,KAAK,CAAC,OAAO,IAAI,QAAQ,QAAQ,CAAC,MAAM,EAAE,CAAC,CAAC;IAC9D,CAAC;IAED,OAAO,QAAQ,CAAC,IAAI,EAA+B,CAAC;AACtD,CAAC"}
|
|
@@ -1,59 +0,0 @@
|
|
|
1
|
-
/**
|
|
2
|
-
* Client-side Turnkey utilities
|
|
3
|
-
* Uses @turnkey/sdk-server for all Turnkey operations (no viem/ethers dependency)
|
|
4
|
-
*/
|
|
5
|
-
import { Turnkey } from '@turnkey/sdk-server';
|
|
6
|
-
import type { TurnkeyWallet, TurnkeyWalletAccount } from '../types';
|
|
7
|
-
/**
|
|
8
|
-
* Session expired error for handling token expiration
|
|
9
|
-
*/
|
|
10
|
-
export declare class TurnkeySessionExpiredError extends Error {
|
|
11
|
-
constructor(message?: string);
|
|
12
|
-
}
|
|
13
|
-
/**
|
|
14
|
-
* Wrapper to handle token expiration errors
|
|
15
|
-
*/
|
|
16
|
-
export declare function withTokenExpiration<T>(fn: () => Promise<T>, onExpired?: () => void): Promise<T>;
|
|
17
|
-
/**
|
|
18
|
-
* Initialize Turnkey server client
|
|
19
|
-
* Reads from environment variables or provided config
|
|
20
|
-
*/
|
|
21
|
-
export declare function initializeTurnkeyClient(config?: {
|
|
22
|
-
apiBaseUrl?: string;
|
|
23
|
-
apiPublicKey?: string;
|
|
24
|
-
apiPrivateKey?: string;
|
|
25
|
-
organizationId?: string;
|
|
26
|
-
}): Turnkey;
|
|
27
|
-
/**
|
|
28
|
-
* Send OTP code to email via Turnkey
|
|
29
|
-
*/
|
|
30
|
-
export declare function initOtp(turnkeyClient: Turnkey, email: string, subOrgId?: string): Promise<string>;
|
|
31
|
-
/**
|
|
32
|
-
* Complete OTP verification flow
|
|
33
|
-
* Returns verification token and sub-org ID
|
|
34
|
-
*/
|
|
35
|
-
export declare function completeOtp(turnkeyClient: Turnkey, otpId: string, otpCode: string, subOrgId: string): Promise<{
|
|
36
|
-
verificationToken: string;
|
|
37
|
-
subOrgId: string;
|
|
38
|
-
}>;
|
|
39
|
-
/**
|
|
40
|
-
* Fetch users in a sub-organization
|
|
41
|
-
*/
|
|
42
|
-
export declare function fetchUser(turnkeyClient: Turnkey, subOrgId: string, onExpired?: () => void): Promise<unknown>;
|
|
43
|
-
/**
|
|
44
|
-
* Fetch user's wallets with accounts
|
|
45
|
-
*/
|
|
46
|
-
export declare function fetchWallets(turnkeyClient: Turnkey, subOrgId: string, onExpired?: () => void): Promise<TurnkeyWallet[]>;
|
|
47
|
-
/**
|
|
48
|
-
* Get key by curve type from wallets
|
|
49
|
-
*/
|
|
50
|
-
export declare function getKeyByCurve(wallets: TurnkeyWallet[], curve: 'CURVE_SECP256K1' | 'CURVE_ED25519'): TurnkeyWalletAccount | null;
|
|
51
|
-
/**
|
|
52
|
-
* Create a wallet with the required accounts for DID creation
|
|
53
|
-
*/
|
|
54
|
-
export declare function createWalletWithAccounts(turnkeyClient: Turnkey, subOrgId: string, onExpired?: () => void): Promise<TurnkeyWallet>;
|
|
55
|
-
/**
|
|
56
|
-
* Ensure user has a wallet with the required accounts for DID creation
|
|
57
|
-
*/
|
|
58
|
-
export declare function ensureWalletWithAccounts(turnkeyClient: Turnkey, subOrgId: string, onExpired?: () => void): Promise<TurnkeyWallet[]>;
|
|
59
|
-
//# sourceMappingURL=turnkey-client.d.ts.map
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"turnkey-client.d.ts","sourceRoot":"","sources":["../../src/client/turnkey-client.ts"],"names":[],"mappings":"AAAA;;;GAGG;AAEH,OAAO,EAAE,OAAO,EAAE,MAAM,qBAAqB,CAAC;AAC9C,OAAO,KAAK,EAAE,aAAa,EAAE,oBAAoB,EAAE,MAAM,UAAU,CAAC;AAEpE;;GAEG;AACH,qBAAa,0BAA2B,SAAQ,KAAK;gBACvC,OAAO,GAAE,MAAiE;CAIvF;AAED;;GAEG;AACH,wBAAsB,mBAAmB,CAAC,CAAC,EACzC,EAAE,EAAE,MAAM,OAAO,CAAC,CAAC,CAAC,EACpB,SAAS,CAAC,EAAE,MAAM,IAAI,GACrB,OAAO,CAAC,CAAC,CAAC,CAkBZ;AAED;;;GAGG;AACH,wBAAgB,uBAAuB,CAAC,MAAM,CAAC,EAAE;IAC/C,UAAU,CAAC,EAAE,MAAM,CAAC;IACpB,YAAY,CAAC,EAAE,MAAM,CAAC;IACtB,aAAa,CAAC,EAAE,MAAM,CAAC;IACvB,cAAc,CAAC,EAAE,MAAM,CAAC;CACzB,GAAG,OAAO,CAqBV;AAED;;GAEG;AACH,wBAAsB,OAAO,CAC3B,aAAa,EAAE,OAAO,EACtB,KAAK,EAAE,MAAM,EACb,QAAQ,CAAC,EAAE,MAAM,GAChB,OAAO,CAAC,MAAM,CAAC,CAqBjB;AAED;;;GAGG;AACH,wBAAsB,WAAW,CAC/B,aAAa,EAAE,OAAO,EACtB,KAAK,EAAE,MAAM,EACb,OAAO,EAAE,MAAM,EACf,QAAQ,EAAE,MAAM,GACf,OAAO,CAAC;IAAE,iBAAiB,EAAE,MAAM,CAAC;IAAC,QAAQ,EAAE,MAAM,CAAA;CAAE,CAAC,CAuB1D;AAED;;GAEG;AACH,wBAAsB,SAAS,CAC7B,aAAa,EAAE,OAAO,EACtB,QAAQ,EAAE,MAAM,EAChB,SAAS,CAAC,EAAE,MAAM,IAAI,GACrB,OAAO,CAAC,OAAO,CAAC,CAelB;AAED;;GAEG;AACH,wBAAsB,YAAY,CAChC,aAAa,EAAE,OAAO,EACtB,QAAQ,EAAE,MAAM,EAChB,SAAS,CAAC,EAAE,MAAM,IAAI,GACrB,OAAO,CAAC,aAAa,EAAE,CAAC,CAqC1B;AAED;;GAEG;AACH,wBAAgB,aAAa,CAC3B,OAAO,EAAE,aAAa,EAAE,EACxB,KAAK,EAAE,iBAAiB,GAAG,eAAe,GACzC,oBAAoB,GAAG,IAAI,CAS7B;AAED;;GAEG;AACH,wBAAsB,wBAAwB,CAC5C,aAAa,EAAE,OAAO,EACtB,QAAQ,EAAE,MAAM,EAChB,SAAS,CAAC,EAAE,MAAM,IAAI,GACrB,OAAO,CAAC,aAAa,CAAC,CAmDxB;AAED;;GAEG;AACH,wBAAsB,wBAAwB,CAC5C,aAAa,EAAE,OAAO,EACtB,QAAQ,EAAE,MAAM,EAChB,SAAS,CAAC,EAAE,MAAM,IAAI,GACrB,OAAO,CAAC,aAAa,EAAE,CAAC,CAqE1B"}
|
|
@@ -1,279 +0,0 @@
|
|
|
1
|
-
/**
|
|
2
|
-
* Client-side Turnkey utilities
|
|
3
|
-
* Uses @turnkey/sdk-server for all Turnkey operations (no viem/ethers dependency)
|
|
4
|
-
*/
|
|
5
|
-
import { Turnkey } from '@turnkey/sdk-server';
|
|
6
|
-
/**
|
|
7
|
-
* Session expired error for handling token expiration
|
|
8
|
-
*/
|
|
9
|
-
export class TurnkeySessionExpiredError extends Error {
|
|
10
|
-
constructor(message = 'Your Turnkey session has expired. Please log in again.') {
|
|
11
|
-
super(message);
|
|
12
|
-
this.name = 'TurnkeySessionExpiredError';
|
|
13
|
-
}
|
|
14
|
-
}
|
|
15
|
-
/**
|
|
16
|
-
* Wrapper to handle token expiration errors
|
|
17
|
-
*/
|
|
18
|
-
export async function withTokenExpiration(fn, onExpired) {
|
|
19
|
-
try {
|
|
20
|
-
return await fn();
|
|
21
|
-
}
|
|
22
|
-
catch (error) {
|
|
23
|
-
const errorStr = JSON.stringify(error);
|
|
24
|
-
if (errorStr.toLowerCase().includes('api_key_expired') ||
|
|
25
|
-
errorStr.toLowerCase().includes('expired api key') ||
|
|
26
|
-
errorStr.toLowerCase().includes('"code":16')) {
|
|
27
|
-
console.warn('Detected expired API key, calling onExpired');
|
|
28
|
-
if (onExpired) {
|
|
29
|
-
onExpired();
|
|
30
|
-
}
|
|
31
|
-
throw new TurnkeySessionExpiredError();
|
|
32
|
-
}
|
|
33
|
-
throw error;
|
|
34
|
-
}
|
|
35
|
-
}
|
|
36
|
-
/**
|
|
37
|
-
* Initialize Turnkey server client
|
|
38
|
-
* Reads from environment variables or provided config
|
|
39
|
-
*/
|
|
40
|
-
export function initializeTurnkeyClient(config) {
|
|
41
|
-
const apiPublicKey = config?.apiPublicKey ?? process.env.TURNKEY_API_PUBLIC_KEY;
|
|
42
|
-
const apiPrivateKey = config?.apiPrivateKey ?? process.env.TURNKEY_API_PRIVATE_KEY;
|
|
43
|
-
const organizationId = config?.organizationId ?? process.env.TURNKEY_ORGANIZATION_ID;
|
|
44
|
-
if (!apiPublicKey) {
|
|
45
|
-
throw new Error('TURNKEY_API_PUBLIC_KEY is required');
|
|
46
|
-
}
|
|
47
|
-
if (!apiPrivateKey) {
|
|
48
|
-
throw new Error('TURNKEY_API_PRIVATE_KEY is required');
|
|
49
|
-
}
|
|
50
|
-
if (!organizationId) {
|
|
51
|
-
throw new Error('TURNKEY_ORGANIZATION_ID is required');
|
|
52
|
-
}
|
|
53
|
-
return new Turnkey({
|
|
54
|
-
apiBaseUrl: config?.apiBaseUrl ?? 'https://api.turnkey.com',
|
|
55
|
-
apiPublicKey,
|
|
56
|
-
apiPrivateKey,
|
|
57
|
-
defaultOrganizationId: organizationId,
|
|
58
|
-
});
|
|
59
|
-
}
|
|
60
|
-
/**
|
|
61
|
-
* Send OTP code to email via Turnkey
|
|
62
|
-
*/
|
|
63
|
-
export async function initOtp(turnkeyClient, email, subOrgId) {
|
|
64
|
-
try {
|
|
65
|
-
const result = await turnkeyClient.apiClient().initOtp({
|
|
66
|
-
otpType: 'OTP_TYPE_EMAIL',
|
|
67
|
-
contact: email,
|
|
68
|
-
appName: 'Originals',
|
|
69
|
-
...(subOrgId ? { organizationId: subOrgId } : {}),
|
|
70
|
-
});
|
|
71
|
-
const otpId = result.otpId;
|
|
72
|
-
if (!otpId) {
|
|
73
|
-
throw new Error('No OTP ID returned from Turnkey');
|
|
74
|
-
}
|
|
75
|
-
return otpId;
|
|
76
|
-
}
|
|
77
|
-
catch (error) {
|
|
78
|
-
console.error('Error initializing OTP:', error);
|
|
79
|
-
throw new Error(`Failed to send OTP: ${error instanceof Error ? error.message : String(error)}`);
|
|
80
|
-
}
|
|
81
|
-
}
|
|
82
|
-
/**
|
|
83
|
-
* Complete OTP verification flow
|
|
84
|
-
* Returns verification token and sub-org ID
|
|
85
|
-
*/
|
|
86
|
-
export async function completeOtp(turnkeyClient, otpId, otpCode, subOrgId) {
|
|
87
|
-
try {
|
|
88
|
-
const result = await turnkeyClient.apiClient().verifyOtp({
|
|
89
|
-
otpId,
|
|
90
|
-
otpCode,
|
|
91
|
-
expirationSeconds: '900',
|
|
92
|
-
organizationId: subOrgId,
|
|
93
|
-
});
|
|
94
|
-
if (!result.verificationToken) {
|
|
95
|
-
throw new Error('OTP verification failed - no verification token returned');
|
|
96
|
-
}
|
|
97
|
-
return {
|
|
98
|
-
verificationToken: result.verificationToken,
|
|
99
|
-
subOrgId,
|
|
100
|
-
};
|
|
101
|
-
}
|
|
102
|
-
catch (error) {
|
|
103
|
-
console.error('Error completing OTP:', error);
|
|
104
|
-
throw new Error(`Failed to complete OTP: ${error instanceof Error ? error.message : String(error)}`);
|
|
105
|
-
}
|
|
106
|
-
}
|
|
107
|
-
/**
|
|
108
|
-
* Fetch users in a sub-organization
|
|
109
|
-
*/
|
|
110
|
-
export async function fetchUser(turnkeyClient, subOrgId, onExpired) {
|
|
111
|
-
return withTokenExpiration(async () => {
|
|
112
|
-
try {
|
|
113
|
-
const response = await turnkeyClient.apiClient().getUsers({
|
|
114
|
-
organizationId: subOrgId,
|
|
115
|
-
});
|
|
116
|
-
const users = response.users ?? [];
|
|
117
|
-
return users[0] ?? null;
|
|
118
|
-
}
|
|
119
|
-
catch (error) {
|
|
120
|
-
console.error('Error fetching user:', error);
|
|
121
|
-
throw new Error(`Failed to fetch user: ${error instanceof Error ? error.message : String(error)}`);
|
|
122
|
-
}
|
|
123
|
-
}, onExpired);
|
|
124
|
-
}
|
|
125
|
-
/**
|
|
126
|
-
* Fetch user's wallets with accounts
|
|
127
|
-
*/
|
|
128
|
-
export async function fetchWallets(turnkeyClient, subOrgId, onExpired) {
|
|
129
|
-
return withTokenExpiration(async () => {
|
|
130
|
-
try {
|
|
131
|
-
const response = await turnkeyClient.apiClient().getWallets({
|
|
132
|
-
organizationId: subOrgId,
|
|
133
|
-
});
|
|
134
|
-
const wallets = [];
|
|
135
|
-
for (const wallet of response.wallets || []) {
|
|
136
|
-
const accountsResponse = await turnkeyClient.apiClient().getWalletAccounts({
|
|
137
|
-
organizationId: subOrgId,
|
|
138
|
-
walletId: wallet.walletId,
|
|
139
|
-
});
|
|
140
|
-
wallets.push({
|
|
141
|
-
walletId: wallet.walletId,
|
|
142
|
-
walletName: wallet.walletName,
|
|
143
|
-
accounts: (accountsResponse.accounts || []).map((acc) => ({
|
|
144
|
-
address: acc.address,
|
|
145
|
-
curve: acc.curve,
|
|
146
|
-
path: acc.path,
|
|
147
|
-
addressFormat: acc.addressFormat,
|
|
148
|
-
})),
|
|
149
|
-
});
|
|
150
|
-
}
|
|
151
|
-
return wallets;
|
|
152
|
-
}
|
|
153
|
-
catch (error) {
|
|
154
|
-
console.error('Error fetching wallets:', error);
|
|
155
|
-
throw new Error(`Failed to fetch wallets: ${error instanceof Error ? error.message : String(error)}`);
|
|
156
|
-
}
|
|
157
|
-
}, onExpired);
|
|
158
|
-
}
|
|
159
|
-
/**
|
|
160
|
-
* Get key by curve type from wallets
|
|
161
|
-
*/
|
|
162
|
-
export function getKeyByCurve(wallets, curve) {
|
|
163
|
-
for (const wallet of wallets) {
|
|
164
|
-
for (const account of wallet.accounts) {
|
|
165
|
-
if (account.curve === curve) {
|
|
166
|
-
return account;
|
|
167
|
-
}
|
|
168
|
-
}
|
|
169
|
-
}
|
|
170
|
-
return null;
|
|
171
|
-
}
|
|
172
|
-
/**
|
|
173
|
-
* Create a wallet with the required accounts for DID creation
|
|
174
|
-
*/
|
|
175
|
-
export async function createWalletWithAccounts(turnkeyClient, subOrgId, onExpired) {
|
|
176
|
-
return withTokenExpiration(async () => {
|
|
177
|
-
try {
|
|
178
|
-
const response = await turnkeyClient.apiClient().createWallet({
|
|
179
|
-
walletName: 'default-wallet',
|
|
180
|
-
accounts: [
|
|
181
|
-
{
|
|
182
|
-
curve: 'CURVE_SECP256K1',
|
|
183
|
-
pathFormat: 'PATH_FORMAT_BIP32',
|
|
184
|
-
path: "m/44'/0'/0'/0/0",
|
|
185
|
-
addressFormat: 'ADDRESS_FORMAT_BITCOIN_MAINNET_P2TR',
|
|
186
|
-
},
|
|
187
|
-
{
|
|
188
|
-
curve: 'CURVE_ED25519',
|
|
189
|
-
pathFormat: 'PATH_FORMAT_BIP32',
|
|
190
|
-
path: "m/44'/501'/0'/0'",
|
|
191
|
-
addressFormat: 'ADDRESS_FORMAT_SOLANA',
|
|
192
|
-
},
|
|
193
|
-
{
|
|
194
|
-
curve: 'CURVE_ED25519',
|
|
195
|
-
pathFormat: 'PATH_FORMAT_BIP32',
|
|
196
|
-
path: "m/44'/501'/1'/0'",
|
|
197
|
-
addressFormat: 'ADDRESS_FORMAT_SOLANA',
|
|
198
|
-
},
|
|
199
|
-
],
|
|
200
|
-
organizationId: subOrgId,
|
|
201
|
-
});
|
|
202
|
-
const walletId = response.walletId;
|
|
203
|
-
if (!walletId) {
|
|
204
|
-
throw new Error('No wallet ID returned from createWallet');
|
|
205
|
-
}
|
|
206
|
-
// Wait for wallet to be created, then fetch it
|
|
207
|
-
await new Promise((resolve) => setTimeout(resolve, 500));
|
|
208
|
-
const wallets = await fetchWallets(turnkeyClient, subOrgId, onExpired);
|
|
209
|
-
const createdWallet = wallets.find((w) => w.walletId === walletId);
|
|
210
|
-
if (!createdWallet) {
|
|
211
|
-
throw new Error('Failed to fetch created wallet');
|
|
212
|
-
}
|
|
213
|
-
return createdWallet;
|
|
214
|
-
}
|
|
215
|
-
catch (error) {
|
|
216
|
-
console.error('Error creating wallet:', error);
|
|
217
|
-
throw new Error(`Failed to create wallet: ${error instanceof Error ? error.message : String(error)}`);
|
|
218
|
-
}
|
|
219
|
-
}, onExpired);
|
|
220
|
-
}
|
|
221
|
-
/**
|
|
222
|
-
* Ensure user has a wallet with the required accounts for DID creation
|
|
223
|
-
*/
|
|
224
|
-
export async function ensureWalletWithAccounts(turnkeyClient, subOrgId, onExpired) {
|
|
225
|
-
return withTokenExpiration(async () => {
|
|
226
|
-
try {
|
|
227
|
-
let wallets = await fetchWallets(turnkeyClient, subOrgId, onExpired);
|
|
228
|
-
if (wallets.length === 0) {
|
|
229
|
-
console.log('No wallets found, creating new wallet with accounts...');
|
|
230
|
-
const newWallet = await createWalletWithAccounts(turnkeyClient, subOrgId, onExpired);
|
|
231
|
-
wallets = [newWallet];
|
|
232
|
-
return wallets;
|
|
233
|
-
}
|
|
234
|
-
const defaultWallet = wallets[0];
|
|
235
|
-
const allAccounts = defaultWallet.accounts;
|
|
236
|
-
const secp256k1Accounts = allAccounts.filter((acc) => acc.curve === 'CURVE_SECP256K1');
|
|
237
|
-
const ed25519Accounts = allAccounts.filter((acc) => acc.curve === 'CURVE_ED25519');
|
|
238
|
-
// Check if we need more accounts
|
|
239
|
-
if (secp256k1Accounts.length >= 1 && ed25519Accounts.length >= 2) {
|
|
240
|
-
return wallets;
|
|
241
|
-
}
|
|
242
|
-
// Need to create additional accounts
|
|
243
|
-
const accountsToCreate = [];
|
|
244
|
-
if (secp256k1Accounts.length === 0) {
|
|
245
|
-
accountsToCreate.push({
|
|
246
|
-
curve: 'CURVE_SECP256K1',
|
|
247
|
-
pathFormat: 'PATH_FORMAT_BIP32',
|
|
248
|
-
path: "m/44'/0'/0'/0/0",
|
|
249
|
-
addressFormat: 'ADDRESS_FORMAT_BITCOIN_MAINNET_P2TR',
|
|
250
|
-
});
|
|
251
|
-
}
|
|
252
|
-
const ed25519Needed = 2 - ed25519Accounts.length;
|
|
253
|
-
for (let i = 0; i < ed25519Needed; i++) {
|
|
254
|
-
const pathIndex = ed25519Accounts.length + i;
|
|
255
|
-
accountsToCreate.push({
|
|
256
|
-
curve: 'CURVE_ED25519',
|
|
257
|
-
pathFormat: 'PATH_FORMAT_BIP32',
|
|
258
|
-
path: pathIndex === 0 ? "m/44'/501'/0'/0'" : "m/44'/501'/1'/0'",
|
|
259
|
-
addressFormat: 'ADDRESS_FORMAT_SOLANA',
|
|
260
|
-
});
|
|
261
|
-
}
|
|
262
|
-
if (accountsToCreate.length > 0) {
|
|
263
|
-
console.log(`Creating ${accountsToCreate.length} missing account(s)...`);
|
|
264
|
-
await turnkeyClient.apiClient().createWalletAccounts({
|
|
265
|
-
walletId: defaultWallet.walletId,
|
|
266
|
-
accounts: accountsToCreate,
|
|
267
|
-
organizationId: subOrgId,
|
|
268
|
-
});
|
|
269
|
-
wallets = await fetchWallets(turnkeyClient, subOrgId, onExpired);
|
|
270
|
-
}
|
|
271
|
-
return wallets;
|
|
272
|
-
}
|
|
273
|
-
catch (error) {
|
|
274
|
-
console.error('Error ensuring wallet with accounts:', error);
|
|
275
|
-
throw new Error(`Failed to ensure wallet with accounts: ${error instanceof Error ? error.message : String(error)}`);
|
|
276
|
-
}
|
|
277
|
-
}, onExpired);
|
|
278
|
-
}
|
|
279
|
-
//# sourceMappingURL=turnkey-client.js.map
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"turnkey-client.js","sourceRoot":"","sources":["../../src/client/turnkey-client.ts"],"names":[],"mappings":"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"}
|