@originals/auth 1.5.0

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 (59) hide show
  1. package/.turbo/turbo-build.log +1 -0
  2. package/dist/client/index.d.ts +22 -0
  3. package/dist/client/index.d.ts.map +1 -0
  4. package/dist/client/index.js +22 -0
  5. package/dist/client/index.js.map +1 -0
  6. package/dist/client/turnkey-client.d.ts +53 -0
  7. package/dist/client/turnkey-client.d.ts.map +1 -0
  8. package/dist/client/turnkey-client.js +268 -0
  9. package/dist/client/turnkey-client.js.map +1 -0
  10. package/dist/client/turnkey-did-signer.d.ts +54 -0
  11. package/dist/client/turnkey-did-signer.d.ts.map +1 -0
  12. package/dist/client/turnkey-did-signer.js +125 -0
  13. package/dist/client/turnkey-did-signer.js.map +1 -0
  14. package/dist/index.d.ts +23 -0
  15. package/dist/index.d.ts.map +1 -0
  16. package/dist/index.js +27 -0
  17. package/dist/index.js.map +1 -0
  18. package/dist/server/email-auth.d.ts +42 -0
  19. package/dist/server/email-auth.d.ts.map +1 -0
  20. package/dist/server/email-auth.js +187 -0
  21. package/dist/server/email-auth.js.map +1 -0
  22. package/dist/server/index.d.ts +22 -0
  23. package/dist/server/index.d.ts.map +1 -0
  24. package/dist/server/index.js +22 -0
  25. package/dist/server/index.js.map +1 -0
  26. package/dist/server/jwt.d.ts +49 -0
  27. package/dist/server/jwt.d.ts.map +1 -0
  28. package/dist/server/jwt.js +113 -0
  29. package/dist/server/jwt.js.map +1 -0
  30. package/dist/server/middleware.d.ts +39 -0
  31. package/dist/server/middleware.d.ts.map +1 -0
  32. package/dist/server/middleware.js +110 -0
  33. package/dist/server/middleware.js.map +1 -0
  34. package/dist/server/turnkey-client.d.ts +24 -0
  35. package/dist/server/turnkey-client.d.ts.map +1 -0
  36. package/dist/server/turnkey-client.js +118 -0
  37. package/dist/server/turnkey-client.js.map +1 -0
  38. package/dist/server/turnkey-signer.d.ts +40 -0
  39. package/dist/server/turnkey-signer.d.ts.map +1 -0
  40. package/dist/server/turnkey-signer.js +121 -0
  41. package/dist/server/turnkey-signer.js.map +1 -0
  42. package/dist/types.d.ts +155 -0
  43. package/dist/types.d.ts.map +1 -0
  44. package/dist/types.js +5 -0
  45. package/dist/types.js.map +1 -0
  46. package/package.json +79 -0
  47. package/src/client/index.ts +37 -0
  48. package/src/client/turnkey-client.ts +340 -0
  49. package/src/client/turnkey-did-signer.ts +189 -0
  50. package/src/index.ts +32 -0
  51. package/src/server/email-auth.ts +258 -0
  52. package/src/server/index.ts +38 -0
  53. package/src/server/jwt.ts +154 -0
  54. package/src/server/middleware.ts +136 -0
  55. package/src/server/turnkey-client.ts +152 -0
  56. package/src/server/turnkey-signer.ts +170 -0
  57. package/src/types.ts +168 -0
  58. package/tests/index.test.ts +25 -0
  59. package/tsconfig.json +28 -0
@@ -0,0 +1 @@
1
+ $ bunx tsc && bunx tsc-alias
@@ -0,0 +1,22 @@
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
+ //# sourceMappingURL=index.d.ts.map
@@ -0,0 +1 @@
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"}
@@ -0,0 +1,22 @@
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
+ //# sourceMappingURL=index.js.map
@@ -0,0 +1 @@
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"}
@@ -0,0 +1,53 @@
1
+ /**
2
+ * Client-side Turnkey utilities
3
+ * Handles Turnkey client initialization and authentication flow in the browser
4
+ */
5
+ import { TurnkeyClient, WalletAccount } from '@turnkey/core';
6
+ import type { TurnkeyWallet } 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 client with auth proxy configuration
19
+ */
20
+ export declare function initializeTurnkeyClient(): TurnkeyClient;
21
+ /**
22
+ * Send OTP code to email
23
+ */
24
+ export declare function initOtp(turnkeyClient: TurnkeyClient, email: string): Promise<string>;
25
+ /**
26
+ * Complete OTP authentication flow (verifies OTP and logs in/signs up)
27
+ */
28
+ export declare function completeOtp(turnkeyClient: TurnkeyClient, otpId: string, otpCode: string, email: string): Promise<{
29
+ sessionToken: string;
30
+ userId: string;
31
+ action: 'login' | 'signup';
32
+ }>;
33
+ /**
34
+ * Fetch user information
35
+ */
36
+ export declare function fetchUser(turnkeyClient: TurnkeyClient, onExpired?: () => void): Promise<unknown>;
37
+ /**
38
+ * Fetch user's wallets
39
+ */
40
+ export declare function fetchWallets(turnkeyClient: TurnkeyClient, onExpired?: () => void): Promise<TurnkeyWallet[]>;
41
+ /**
42
+ * Get key by curve type
43
+ */
44
+ export declare function getKeyByCurve(wallets: TurnkeyWallet[], curve: 'CURVE_SECP256K1' | 'CURVE_ED25519'): WalletAccount | null;
45
+ /**
46
+ * Create a wallet with the required accounts for DID creation
47
+ */
48
+ export declare function createWalletWithAccounts(turnkeyClient: TurnkeyClient, onExpired?: () => void): Promise<TurnkeyWallet>;
49
+ /**
50
+ * Ensure user has a wallet with the required accounts for DID creation
51
+ */
52
+ export declare function ensureWalletWithAccounts(turnkeyClient: TurnkeyClient, onExpired?: () => void): Promise<TurnkeyWallet[]>;
53
+ //# sourceMappingURL=turnkey-client.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"turnkey-client.d.ts","sourceRoot":"","sources":["../../src/client/turnkey-client.ts"],"names":[],"mappings":"AAAA;;;GAGG;AAEH,OAAO,EAAE,aAAa,EAAW,aAAa,EAAE,MAAM,eAAe,CAAC;AACtE,OAAO,KAAK,EAAE,aAAa,EAAE,MAAM,UAAU,CAAC;AAE9C;;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;;GAEG;AACH,wBAAgB,uBAAuB,IAAI,aAAa,CAcvD;AAED;;GAEG;AACH,wBAAsB,OAAO,CAAC,aAAa,EAAE,aAAa,EAAE,KAAK,EAAE,MAAM,GAAG,OAAO,CAAC,MAAM,CAAC,CAkB1F;AAED;;GAEG;AACH,wBAAsB,WAAW,CAC/B,aAAa,EAAE,aAAa,EAC5B,KAAK,EAAE,MAAM,EACb,OAAO,EAAE,MAAM,EACf,KAAK,EAAE,MAAM,GACZ,OAAO,CAAC;IAAE,YAAY,EAAE,MAAM,CAAC;IAAC,MAAM,EAAE,MAAM,CAAC;IAAC,MAAM,EAAE,OAAO,GAAG,QAAQ,CAAA;CAAE,CAAC,CA2B/E;AAED;;GAEG;AACH,wBAAsB,SAAS,CAC7B,aAAa,EAAE,aAAa,EAC5B,SAAS,CAAC,EAAE,MAAM,IAAI,GACrB,OAAO,CAAC,OAAO,CAAC,CAYlB;AAED;;GAEG;AACH,wBAAsB,YAAY,CAChC,aAAa,EAAE,aAAa,EAC5B,SAAS,CAAC,EAAE,MAAM,IAAI,GACrB,OAAO,CAAC,aAAa,EAAE,CAAC,CAgC1B;AAED;;GAEG;AACH,wBAAgB,aAAa,CAC3B,OAAO,EAAE,aAAa,EAAE,EACxB,KAAK,EAAE,iBAAiB,GAAG,eAAe,GACzC,aAAa,GAAG,IAAI,CAStB;AAED;;GAEG;AACH,wBAAsB,wBAAwB,CAC5C,aAAa,EAAE,aAAa,EAC5B,SAAS,CAAC,EAAE,MAAM,IAAI,GACrB,OAAO,CAAC,aAAa,CAAC,CAwDxB;AAED;;GAEG;AACH,wBAAsB,wBAAwB,CAC5C,aAAa,EAAE,aAAa,EAC5B,SAAS,CAAC,EAAE,MAAM,IAAI,GACrB,OAAO,CAAC,aAAa,EAAE,CAAC,CAoE1B"}
@@ -0,0 +1,268 @@
1
+ /**
2
+ * Client-side Turnkey utilities
3
+ * Handles Turnkey client initialization and authentication flow in the browser
4
+ */
5
+ import { TurnkeyClient, OtpType } from '@turnkey/core';
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 client with auth proxy configuration
38
+ */
39
+ export function initializeTurnkeyClient() {
40
+ // Access Vite environment variables
41
+ const env = import.meta.env;
42
+ const authProxyConfigId = env?.VITE_TURNKEY_AUTH_PROXY_CONFIG_ID;
43
+ const organizationId = env?.VITE_TURNKEY_ORGANIZATION_ID ?? '';
44
+ if (!authProxyConfigId) {
45
+ throw new Error('VITE_TURNKEY_AUTH_PROXY_CONFIG_ID environment variable not set');
46
+ }
47
+ return new TurnkeyClient({
48
+ authProxyConfigId,
49
+ organizationId,
50
+ });
51
+ }
52
+ /**
53
+ * Send OTP code to email
54
+ */
55
+ export async function initOtp(turnkeyClient, email) {
56
+ try {
57
+ const response = await turnkeyClient.initOtp({
58
+ otpType: OtpType.Email,
59
+ contact: email,
60
+ });
61
+ if (!response || typeof response !== 'string') {
62
+ throw new Error('No OTP ID returned from Turnkey');
63
+ }
64
+ return response;
65
+ }
66
+ catch (error) {
67
+ console.error('Error initializing OTP:', error);
68
+ throw new Error(`Failed to send OTP: ${error instanceof Error ? error.message : String(error)}`);
69
+ }
70
+ }
71
+ /**
72
+ * Complete OTP authentication flow (verifies OTP and logs in/signs up)
73
+ */
74
+ export async function completeOtp(turnkeyClient, otpId, otpCode, email) {
75
+ try {
76
+ const response = await turnkeyClient.completeOtp({
77
+ otpId,
78
+ otpCode,
79
+ contact: email,
80
+ otpType: OtpType.Email,
81
+ });
82
+ if (!response.sessionToken) {
83
+ throw new Error('No session token returned from completeOtp');
84
+ }
85
+ // Fetch user info to get stable identifiers
86
+ const userInfo = await turnkeyClient.fetchUser();
87
+ return {
88
+ sessionToken: response.sessionToken,
89
+ userId: userInfo.userId,
90
+ action: response.action === 'LOGIN' ? 'login' : 'signup',
91
+ };
92
+ }
93
+ catch (error) {
94
+ console.error('Error completing OTP:', error);
95
+ throw new Error(`Failed to complete OTP: ${error instanceof Error ? error.message : String(error)}`);
96
+ }
97
+ }
98
+ /**
99
+ * Fetch user information
100
+ */
101
+ export async function fetchUser(turnkeyClient, onExpired) {
102
+ return withTokenExpiration(async () => {
103
+ try {
104
+ const response = await turnkeyClient.fetchUser();
105
+ return response;
106
+ }
107
+ catch (error) {
108
+ console.error('Error fetching user:', error);
109
+ throw new Error(`Failed to fetch user: ${error instanceof Error ? error.message : String(error)}`);
110
+ }
111
+ }, onExpired);
112
+ }
113
+ /**
114
+ * Fetch user's wallets
115
+ */
116
+ export async function fetchWallets(turnkeyClient, onExpired) {
117
+ return withTokenExpiration(async () => {
118
+ try {
119
+ const response = await turnkeyClient.fetchWallets();
120
+ const wallets = [];
121
+ for (const wallet of response || []) {
122
+ const accountsResponse = await turnkeyClient.fetchWalletAccounts({
123
+ wallet: wallet,
124
+ });
125
+ wallets.push({
126
+ walletId: wallet.walletId,
127
+ walletName: wallet.walletName,
128
+ accounts: accountsResponse.map((acc) => ({
129
+ address: acc.address,
130
+ curve: acc.curve,
131
+ path: acc.path,
132
+ addressFormat: acc.addressFormat,
133
+ })),
134
+ });
135
+ }
136
+ return wallets;
137
+ }
138
+ catch (error) {
139
+ console.error('Error fetching wallets:', error);
140
+ throw new Error(`Failed to fetch wallets: ${error instanceof Error ? error.message : String(error)}`);
141
+ }
142
+ }, onExpired);
143
+ }
144
+ /**
145
+ * Get key by curve type
146
+ */
147
+ export function getKeyByCurve(wallets, curve) {
148
+ for (const wallet of wallets) {
149
+ for (const account of wallet.accounts) {
150
+ if (account.curve === curve) {
151
+ return account;
152
+ }
153
+ }
154
+ }
155
+ return null;
156
+ }
157
+ /**
158
+ * Create a wallet with the required accounts for DID creation
159
+ */
160
+ export async function createWalletWithAccounts(turnkeyClient, onExpired) {
161
+ return withTokenExpiration(async () => {
162
+ try {
163
+ const response = await turnkeyClient.createWallet({
164
+ walletName: 'default-wallet',
165
+ accounts: [
166
+ {
167
+ curve: 'CURVE_SECP256K1',
168
+ pathFormat: 'PATH_FORMAT_BIP32',
169
+ path: "m/44'/0'/0'/0/0",
170
+ addressFormat: 'ADDRESS_FORMAT_BITCOIN_MAINNET_P2TR',
171
+ },
172
+ {
173
+ curve: 'CURVE_ED25519',
174
+ pathFormat: 'PATH_FORMAT_BIP32',
175
+ path: "m/44'/501'/0'/0'",
176
+ addressFormat: 'ADDRESS_FORMAT_SOLANA',
177
+ },
178
+ {
179
+ curve: 'CURVE_ED25519',
180
+ pathFormat: 'PATH_FORMAT_BIP32',
181
+ path: "m/44'/501'/1'/0'",
182
+ addressFormat: 'ADDRESS_FORMAT_SOLANA',
183
+ },
184
+ ],
185
+ });
186
+ let walletId;
187
+ if (typeof response === 'string') {
188
+ walletId = response;
189
+ }
190
+ else {
191
+ walletId = response?.walletId ?? '';
192
+ }
193
+ if (!walletId) {
194
+ throw new Error('No wallet ID returned from createWallet');
195
+ }
196
+ // Wait for wallet to be created, then fetch it
197
+ await new Promise((resolve) => setTimeout(resolve, 500));
198
+ const wallets = await fetchWallets(turnkeyClient, onExpired);
199
+ const createdWallet = wallets.find((w) => w.walletId === walletId);
200
+ if (!createdWallet) {
201
+ throw new Error('Failed to fetch created wallet');
202
+ }
203
+ return createdWallet;
204
+ }
205
+ catch (error) {
206
+ console.error('Error creating wallet:', error);
207
+ throw new Error(`Failed to create wallet: ${error instanceof Error ? error.message : String(error)}`);
208
+ }
209
+ }, onExpired);
210
+ }
211
+ /**
212
+ * Ensure user has a wallet with the required accounts for DID creation
213
+ */
214
+ export async function ensureWalletWithAccounts(turnkeyClient, onExpired) {
215
+ return withTokenExpiration(async () => {
216
+ try {
217
+ let wallets = await fetchWallets(turnkeyClient, onExpired);
218
+ if (wallets.length === 0) {
219
+ console.log('No wallets found, creating new wallet with accounts...');
220
+ const newWallet = await createWalletWithAccounts(turnkeyClient, onExpired);
221
+ wallets = [newWallet];
222
+ return wallets;
223
+ }
224
+ const defaultWallet = wallets[0];
225
+ const allAccounts = defaultWallet.accounts;
226
+ const secp256k1Accounts = allAccounts.filter((acc) => acc.curve === 'CURVE_SECP256K1');
227
+ const ed25519Accounts = allAccounts.filter((acc) => acc.curve === 'CURVE_ED25519');
228
+ // Check if we need more accounts
229
+ if (secp256k1Accounts.length >= 1 && ed25519Accounts.length >= 2) {
230
+ return wallets;
231
+ }
232
+ // Need to create additional accounts
233
+ const accountsToCreate = [];
234
+ if (secp256k1Accounts.length === 0) {
235
+ accountsToCreate.push({
236
+ curve: 'CURVE_SECP256K1',
237
+ pathFormat: 'PATH_FORMAT_BIP32',
238
+ path: "m/44'/0'/0'/0/0",
239
+ addressFormat: 'ADDRESS_FORMAT_BITCOIN_MAINNET_P2TR',
240
+ });
241
+ }
242
+ const ed25519Needed = 2 - ed25519Accounts.length;
243
+ for (let i = 0; i < ed25519Needed; i++) {
244
+ const pathIndex = ed25519Accounts.length + i;
245
+ accountsToCreate.push({
246
+ curve: 'CURVE_ED25519',
247
+ pathFormat: 'PATH_FORMAT_BIP32',
248
+ path: pathIndex === 0 ? "m/44'/501'/0'/0'" : "m/44'/501'/1'/0'",
249
+ addressFormat: 'ADDRESS_FORMAT_SOLANA',
250
+ });
251
+ }
252
+ if (accountsToCreate.length > 0) {
253
+ console.log(`Creating ${accountsToCreate.length} missing account(s)...`);
254
+ await turnkeyClient.createWalletAccounts({
255
+ walletId: defaultWallet.walletId,
256
+ accounts: accountsToCreate,
257
+ });
258
+ wallets = await fetchWallets(turnkeyClient, onExpired);
259
+ }
260
+ return wallets;
261
+ }
262
+ catch (error) {
263
+ console.error('Error ensuring wallet with accounts:', error);
264
+ throw new Error(`Failed to ensure wallet with accounts: ${error instanceof Error ? error.message : String(error)}`);
265
+ }
266
+ }, onExpired);
267
+ }
268
+ //# sourceMappingURL=turnkey-client.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"turnkey-client.js","sourceRoot":"","sources":["../../src/client/turnkey-client.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,54 @@
1
+ /**
2
+ * Turnkey DID Signer Adapter
3
+ * Adapts Turnkey signing to work with didwebvh-ts signer interface
4
+ */
5
+ import { TurnkeyClient, WalletAccount } from '@turnkey/core';
6
+ interface SigningInput {
7
+ document: Record<string, unknown>;
8
+ proof: Record<string, unknown>;
9
+ }
10
+ interface SigningOutput {
11
+ proofValue: string;
12
+ }
13
+ /**
14
+ * Signer that uses Turnkey for signing DID documents
15
+ * Compatible with didwebvh-ts signer interface
16
+ */
17
+ export declare class TurnkeyDIDSigner {
18
+ private turnkeyClient;
19
+ private walletAccount;
20
+ private publicKeyMultibase;
21
+ private onExpired?;
22
+ constructor(turnkeyClient: TurnkeyClient, walletAccount: WalletAccount, publicKeyMultibase: string, onExpired?: () => void);
23
+ /**
24
+ * Sign the document and proof using Turnkey
25
+ */
26
+ sign(input: SigningInput): Promise<SigningOutput>;
27
+ /**
28
+ * Get the verification method ID for this signer
29
+ */
30
+ getVerificationMethodId(): string;
31
+ /**
32
+ * Verify a signature
33
+ */
34
+ verify(signature: Uint8Array, message: Uint8Array, publicKey: Uint8Array): Promise<boolean>;
35
+ }
36
+ /**
37
+ * Create a DID:WebVH using OriginalsSDK.createDIDOriginal() with Turnkey signing
38
+ */
39
+ export declare function createDIDWithTurnkey(params: {
40
+ turnkeyClient: TurnkeyClient;
41
+ updateKeyAccount: WalletAccount;
42
+ authKeyPublic: string;
43
+ assertionKeyPublic: string;
44
+ updateKeyPublic: string;
45
+ domain: string;
46
+ slug: string;
47
+ onExpired?: () => void;
48
+ }): Promise<{
49
+ did: string;
50
+ didDocument: unknown;
51
+ didLog: unknown;
52
+ }>;
53
+ export {};
54
+ //# sourceMappingURL=turnkey-did-signer.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"turnkey-did-signer.d.ts","sourceRoot":"","sources":["../../src/client/turnkey-did-signer.ts"],"names":[],"mappings":"AAAA;;;GAGG;AAEH,OAAO,EAAE,aAAa,EAAE,aAAa,EAAE,MAAM,eAAe,CAAC;AAI7D,UAAU,YAAY;IACpB,QAAQ,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAAC;IAClC,KAAK,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAAC;CAChC;AAED,UAAU,aAAa;IACrB,UAAU,EAAE,MAAM,CAAC;CACpB;AAED;;;GAGG;AACH,qBAAa,gBAAgB;IAC3B,OAAO,CAAC,aAAa,CAAgB;IACrC,OAAO,CAAC,aAAa,CAAgB;IACrC,OAAO,CAAC,kBAAkB,CAAS;IACnC,OAAO,CAAC,SAAS,CAAC,CAAa;gBAG7B,aAAa,EAAE,aAAa,EAC5B,aAAa,EAAE,aAAa,EAC5B,kBAAkB,EAAE,MAAM,EAC1B,SAAS,CAAC,EAAE,MAAM,IAAI;IAQxB;;OAEG;IACG,IAAI,CAAC,KAAK,EAAE,YAAY,GAAG,OAAO,CAAC,aAAa,CAAC;IAuDvD;;OAEG;IACH,uBAAuB,IAAI,MAAM;IAIjC;;OAEG;IACG,MAAM,CACV,SAAS,EAAE,UAAU,EACrB,OAAO,EAAE,UAAU,EACnB,SAAS,EAAE,UAAU,GACpB,OAAO,CAAC,OAAO,CAAC;CAQpB;AAED;;GAEG;AACH,wBAAsB,oBAAoB,CAAC,MAAM,EAAE;IACjD,aAAa,EAAE,aAAa,CAAC;IAC7B,gBAAgB,EAAE,aAAa,CAAC;IAChC,aAAa,EAAE,MAAM,CAAC;IACtB,kBAAkB,EAAE,MAAM,CAAC;IAC3B,eAAe,EAAE,MAAM,CAAC;IACxB,MAAM,EAAE,MAAM,CAAC;IACf,IAAI,EAAE,MAAM,CAAC;IACb,SAAS,CAAC,EAAE,MAAM,IAAI,CAAC;CACxB,GAAG,OAAO,CAAC;IACV,GAAG,EAAE,MAAM,CAAC;IACZ,WAAW,EAAE,OAAO,CAAC;IACrB,MAAM,EAAE,OAAO,CAAC;CACjB,CAAC,CA+CD"}
@@ -0,0 +1,125 @@
1
+ /**
2
+ * Turnkey DID Signer Adapter
3
+ * Adapts Turnkey signing to work with didwebvh-ts signer interface
4
+ */
5
+ import { OriginalsSDK, encoding } from '@originals/sdk';
6
+ import { TurnkeySessionExpiredError, withTokenExpiration } from './turnkey-client';
7
+ /**
8
+ * Signer that uses Turnkey for signing DID documents
9
+ * Compatible with didwebvh-ts signer interface
10
+ */
11
+ export class TurnkeyDIDSigner {
12
+ turnkeyClient;
13
+ walletAccount;
14
+ publicKeyMultibase;
15
+ onExpired;
16
+ constructor(turnkeyClient, walletAccount, publicKeyMultibase, onExpired) {
17
+ this.turnkeyClient = turnkeyClient;
18
+ this.walletAccount = walletAccount;
19
+ this.publicKeyMultibase = publicKeyMultibase;
20
+ this.onExpired = onExpired;
21
+ }
22
+ /**
23
+ * Sign the document and proof using Turnkey
24
+ */
25
+ async sign(input) {
26
+ return withTokenExpiration(async () => {
27
+ try {
28
+ // Use SDK's prepareDIDDataForSigning
29
+ const dataToSign = await OriginalsSDK.prepareDIDDataForSigning(input.document, input.proof);
30
+ // Sign with Turnkey
31
+ const response = await this.turnkeyClient.httpClient.signRawPayload({
32
+ signWith: this.walletAccount.address,
33
+ payload: Buffer.from(dataToSign).toString('hex'),
34
+ encoding: 'PAYLOAD_ENCODING_HEXADECIMAL',
35
+ hashFunction: 'HASH_FUNCTION_NOT_APPLICABLE',
36
+ });
37
+ if (!response.r || !response.s) {
38
+ throw new Error('Invalid signature response from Turnkey');
39
+ }
40
+ // For Ed25519, combine r+s only (64 bytes total)
41
+ const cleanR = response.r.startsWith('0x') ? response.r.slice(2) : response.r;
42
+ const cleanS = response.s.startsWith('0x') ? response.s.slice(2) : response.s;
43
+ const combinedHex = cleanR + cleanS;
44
+ const signatureBytes = Buffer.from(combinedHex, 'hex');
45
+ if (signatureBytes.length !== 64) {
46
+ throw new Error(`Invalid Ed25519 signature length: ${signatureBytes.length} (expected 64 bytes)`);
47
+ }
48
+ const proofValue = encoding.multibase.encode(signatureBytes, 'base58btc');
49
+ return { proofValue };
50
+ }
51
+ catch (error) {
52
+ console.error('[TurnkeyDIDSigner] Error signing with Turnkey:', error);
53
+ const errorStr = JSON.stringify(error);
54
+ if (errorStr.toLowerCase().includes('api_key_expired') ||
55
+ errorStr.toLowerCase().includes('expired api key') ||
56
+ errorStr.toLowerCase().includes('"code":16')) {
57
+ console.warn('Detected expired API key in sign method, calling onExpired');
58
+ if (this.onExpired) {
59
+ this.onExpired();
60
+ }
61
+ throw new TurnkeySessionExpiredError();
62
+ }
63
+ throw error;
64
+ }
65
+ }, this.onExpired);
66
+ }
67
+ /**
68
+ * Get the verification method ID for this signer
69
+ */
70
+ getVerificationMethodId() {
71
+ return `did:key:${this.publicKeyMultibase}`;
72
+ }
73
+ /**
74
+ * Verify a signature
75
+ */
76
+ async verify(signature, message, publicKey) {
77
+ try {
78
+ return await OriginalsSDK.verifyDIDSignature(signature, message, publicKey);
79
+ }
80
+ catch (error) {
81
+ console.error('[TurnkeyDIDSigner] Error verifying signature:', error);
82
+ return false;
83
+ }
84
+ }
85
+ }
86
+ /**
87
+ * Create a DID:WebVH using OriginalsSDK.createDIDOriginal() with Turnkey signing
88
+ */
89
+ export async function createDIDWithTurnkey(params) {
90
+ const { turnkeyClient, updateKeyAccount, authKeyPublic, assertionKeyPublic, updateKeyPublic, domain, slug, onExpired, } = params;
91
+ // Create Turnkey signer for the update key
92
+ const signer = new TurnkeyDIDSigner(turnkeyClient, updateKeyAccount, updateKeyPublic, onExpired);
93
+ // Use SDK's createDIDOriginal
94
+ const result = await OriginalsSDK.createDIDOriginal({
95
+ type: 'did',
96
+ domain,
97
+ signer,
98
+ verifier: signer,
99
+ updateKeys: [signer.getVerificationMethodId()],
100
+ verificationMethods: [
101
+ {
102
+ id: '#key-0',
103
+ type: 'Multikey',
104
+ controller: '',
105
+ publicKeyMultibase: authKeyPublic,
106
+ },
107
+ {
108
+ id: '#key-1',
109
+ type: 'Multikey',
110
+ controller: '',
111
+ publicKeyMultibase: assertionKeyPublic,
112
+ },
113
+ ],
114
+ paths: [slug],
115
+ portable: false,
116
+ authentication: ['#key-0'],
117
+ assertionMethod: ['#key-1'],
118
+ });
119
+ return {
120
+ did: result.did,
121
+ didDocument: result.doc,
122
+ didLog: result.log,
123
+ };
124
+ }
125
+ //# sourceMappingURL=turnkey-did-signer.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"turnkey-did-signer.js","sourceRoot":"","sources":["../../src/client/turnkey-did-signer.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,23 @@
1
+ /**
2
+ * @originals/auth - Turnkey-based authentication for the Originals Protocol
3
+ *
4
+ * This package provides authentication utilities for both server and client applications.
5
+ *
6
+ * Server-side:
7
+ * ```typescript
8
+ * import { createAuthMiddleware, initiateEmailAuth, verifyEmailAuth } from '@originals/auth/server';
9
+ * ```
10
+ *
11
+ * Client-side (pure functions, no React):
12
+ * ```typescript
13
+ * import { initializeTurnkeyClient, initOtp, completeOtp, fetchWallets } from '@originals/auth/client';
14
+ * ```
15
+ *
16
+ * Types:
17
+ * ```typescript
18
+ * import type { AuthUser, TokenPayload, TurnkeyWallet } from '@originals/auth/types';
19
+ * ```
20
+ */
21
+ export * from './types';
22
+ export * from './server';
23
+ //# sourceMappingURL=index.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;;;GAmBG;AAGH,cAAc,SAAS,CAAC;AAGxB,cAAc,UAAU,CAAC"}
package/dist/index.js ADDED
@@ -0,0 +1,27 @@
1
+ /**
2
+ * @originals/auth - Turnkey-based authentication for the Originals Protocol
3
+ *
4
+ * This package provides authentication utilities for both server and client applications.
5
+ *
6
+ * Server-side:
7
+ * ```typescript
8
+ * import { createAuthMiddleware, initiateEmailAuth, verifyEmailAuth } from '@originals/auth/server';
9
+ * ```
10
+ *
11
+ * Client-side (pure functions, no React):
12
+ * ```typescript
13
+ * import { initializeTurnkeyClient, initOtp, completeOtp, fetchWallets } from '@originals/auth/client';
14
+ * ```
15
+ *
16
+ * Types:
17
+ * ```typescript
18
+ * import type { AuthUser, TokenPayload, TurnkeyWallet } from '@originals/auth/types';
19
+ * ```
20
+ */
21
+ // Re-export types
22
+ export * from './types';
23
+ // Re-export server utilities (for convenience, though subpath is preferred)
24
+ export * from './server';
25
+ // Note: Client utilities should be imported from '@originals/auth/client'
26
+ // to avoid bundling React in server environments
27
+ //# sourceMappingURL=index.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;;;GAmBG;AAEH,kBAAkB;AAClB,cAAc,SAAS,CAAC;AAExB,4EAA4E;AAC5E,cAAc,UAAU,CAAC;AAEzB,0EAA0E;AAC1E,iDAAiD"}