@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.
Files changed (54) hide show
  1. package/package.json +15 -12
  2. package/.turbo/turbo-build.log +0 -1
  3. package/dist/client/index.d.ts +0 -23
  4. package/dist/client/index.d.ts.map +0 -1
  5. package/dist/client/index.js +0 -23
  6. package/dist/client/index.js.map +0 -1
  7. package/dist/client/server-auth.d.ts +0 -61
  8. package/dist/client/server-auth.d.ts.map +0 -1
  9. package/dist/client/server-auth.js +0 -77
  10. package/dist/client/server-auth.js.map +0 -1
  11. package/dist/client/turnkey-client.d.ts +0 -59
  12. package/dist/client/turnkey-client.d.ts.map +0 -1
  13. package/dist/client/turnkey-client.js +0 -279
  14. package/dist/client/turnkey-client.js.map +0 -1
  15. package/dist/client/turnkey-did-signer.d.ts +0 -58
  16. package/dist/client/turnkey-did-signer.d.ts.map +0 -1
  17. package/dist/client/turnkey-did-signer.js +0 -131
  18. package/dist/client/turnkey-did-signer.js.map +0 -1
  19. package/dist/index.d.ts +0 -23
  20. package/dist/index.d.ts.map +0 -1
  21. package/dist/index.js +0 -27
  22. package/dist/index.js.map +0 -1
  23. package/dist/server/email-auth.d.ts +0 -42
  24. package/dist/server/email-auth.d.ts.map +0 -1
  25. package/dist/server/email-auth.js +0 -187
  26. package/dist/server/email-auth.js.map +0 -1
  27. package/dist/server/index.d.ts +0 -22
  28. package/dist/server/index.d.ts.map +0 -1
  29. package/dist/server/index.js +0 -22
  30. package/dist/server/index.js.map +0 -1
  31. package/dist/server/jwt.d.ts +0 -49
  32. package/dist/server/jwt.d.ts.map +0 -1
  33. package/dist/server/jwt.js +0 -113
  34. package/dist/server/jwt.js.map +0 -1
  35. package/dist/server/middleware.d.ts +0 -39
  36. package/dist/server/middleware.d.ts.map +0 -1
  37. package/dist/server/middleware.js +0 -112
  38. package/dist/server/middleware.js.map +0 -1
  39. package/dist/server/turnkey-client.d.ts +0 -24
  40. package/dist/server/turnkey-client.d.ts.map +0 -1
  41. package/dist/server/turnkey-client.js +0 -118
  42. package/dist/server/turnkey-client.js.map +0 -1
  43. package/dist/server/turnkey-signer.d.ts +0 -40
  44. package/dist/server/turnkey-signer.d.ts.map +0 -1
  45. package/dist/server/turnkey-signer.js +0 -121
  46. package/dist/server/turnkey-signer.js.map +0 -1
  47. package/dist/types.d.ts +0 -155
  48. package/dist/types.d.ts.map +0 -1
  49. package/dist/types.js +0 -5
  50. package/dist/types.js.map +0 -1
  51. package/eslint.config.js +0 -32
  52. package/tests/index.test.ts +0 -29
  53. package/tests/server-auth.test.ts +0 -167
  54. package/tsconfig.json +0 -32
package/package.json CHANGED
@@ -1,26 +1,29 @@
1
1
  {
2
2
  "name": "@originals/auth",
3
- "version": "1.8.0",
3
+ "version": "1.8.2",
4
4
  "description": "Turnkey-based authentication for the Originals Protocol",
5
5
  "type": "module",
6
- "main": "dist/index.js",
7
- "types": "dist/index.d.ts",
6
+ "main": "src/index.ts",
7
+ "types": "src/index.ts",
8
+ "files": [
9
+ "src"
10
+ ],
8
11
  "exports": {
9
12
  ".": {
10
- "types": "./dist/index.d.ts",
11
- "import": "./dist/index.js"
13
+ "types": "./src/index.ts",
14
+ "import": "./src/index.ts"
12
15
  },
13
16
  "./server": {
14
- "types": "./dist/server/index.d.ts",
15
- "import": "./dist/server/index.js"
17
+ "types": "./src/server/index.ts",
18
+ "import": "./src/server/index.ts"
16
19
  },
17
20
  "./client": {
18
- "types": "./dist/client/index.d.ts",
19
- "import": "./dist/client/index.js"
21
+ "types": "./src/client/index.ts",
22
+ "import": "./src/client/index.ts"
20
23
  },
21
24
  "./types": {
22
- "types": "./dist/types.d.ts",
23
- "import": "./dist/types.js"
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.4.4",
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"
@@ -1 +0,0 @@
1
- $ bunx tsc && bunx tsc-alias
@@ -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"}
@@ -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
@@ -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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"}