@originals/auth 1.8.2 → 1.8.3

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 (57) hide show
  1. package/{src/client/index.ts → dist/client/index.d.ts} +2 -15
  2. package/dist/client/index.d.ts.map +1 -0
  3. package/dist/client/index.js +23 -0
  4. package/dist/client/index.js.map +1 -0
  5. package/{src/client/server-auth.ts → dist/client/server-auth.d.ts} +5 -45
  6. package/dist/client/server-auth.d.ts.map +1 -0
  7. package/dist/client/server-auth.js +77 -0
  8. package/dist/client/server-auth.js.map +1 -0
  9. package/dist/client/turnkey-client.d.ts +59 -0
  10. package/dist/client/turnkey-client.d.ts.map +1 -0
  11. package/dist/client/turnkey-client.js +279 -0
  12. package/dist/client/turnkey-client.js.map +1 -0
  13. package/dist/client/turnkey-did-signer.d.ts +58 -0
  14. package/dist/client/turnkey-did-signer.d.ts.map +1 -0
  15. package/dist/client/turnkey-did-signer.js +131 -0
  16. package/dist/client/turnkey-did-signer.js.map +1 -0
  17. package/dist/index.d.ts +23 -0
  18. package/dist/index.d.ts.map +1 -0
  19. package/{src/index.ts → dist/index.js} +1 -6
  20. package/dist/index.js.map +1 -0
  21. package/dist/server/email-auth.d.ts +42 -0
  22. package/dist/server/email-auth.d.ts.map +1 -0
  23. package/dist/server/email-auth.js +187 -0
  24. package/dist/server/email-auth.js.map +1 -0
  25. package/dist/server/index.d.ts +22 -0
  26. package/dist/server/index.d.ts.map +1 -0
  27. package/{src/server/index.ts → dist/server/index.js} +3 -23
  28. package/dist/server/index.js.map +1 -0
  29. package/dist/server/jwt.d.ts +49 -0
  30. package/dist/server/jwt.d.ts.map +1 -0
  31. package/dist/server/jwt.js +113 -0
  32. package/dist/server/jwt.js.map +1 -0
  33. package/dist/server/middleware.d.ts +39 -0
  34. package/dist/server/middleware.d.ts.map +1 -0
  35. package/dist/server/middleware.js +112 -0
  36. package/dist/server/middleware.js.map +1 -0
  37. package/dist/server/turnkey-client.d.ts +24 -0
  38. package/dist/server/turnkey-client.d.ts.map +1 -0
  39. package/dist/server/turnkey-client.js +118 -0
  40. package/dist/server/turnkey-client.js.map +1 -0
  41. package/dist/server/turnkey-signer.d.ts +40 -0
  42. package/dist/server/turnkey-signer.d.ts.map +1 -0
  43. package/dist/server/turnkey-signer.js +121 -0
  44. package/dist/server/turnkey-signer.js.map +1 -0
  45. package/dist/types.d.ts +155 -0
  46. package/dist/types.d.ts.map +1 -0
  47. package/dist/types.js +5 -0
  48. package/dist/types.js.map +1 -0
  49. package/package.json +13 -12
  50. package/src/client/turnkey-client.ts +0 -364
  51. package/src/client/turnkey-did-signer.ts +0 -203
  52. package/src/server/email-auth.ts +0 -258
  53. package/src/server/jwt.ts +0 -154
  54. package/src/server/middleware.ts +0 -142
  55. package/src/server/turnkey-client.ts +0 -156
  56. package/src/server/turnkey-signer.ts +0 -170
  57. package/src/types.ts +0 -172
@@ -1,170 +0,0 @@
1
- /**
2
- * Turnkey Signer - Integration between Turnkey key management and Originals SDK
3
- *
4
- * Provides an ExternalSigner implementation that works with Turnkey-managed
5
- * keys for use with the Originals SDK's DID creation and signing operations.
6
- */
7
-
8
- import { Turnkey } from '@turnkey/sdk-server';
9
- import { ExternalSigner, ExternalVerifier, multikey, OriginalsSDK } from '@originals/sdk';
10
- import { sha512 } from '@noble/hashes/sha2.js';
11
- import { concatBytes, bytesToHex } from '@noble/hashes/utils.js';
12
- import * as ed25519 from '@noble/ed25519';
13
-
14
- // Configure @noble/ed25519 with required SHA-512 function
15
- const sha512Fn = (...msgs: Uint8Array[]): Uint8Array => sha512(concatBytes(...msgs));
16
-
17
- // Initialize Ed25519 configuration
18
- try {
19
- const ed25519Module = ed25519 as unknown as {
20
- utils?: { sha512Sync?: typeof sha512Fn };
21
- etc?: { sha512Sync?: typeof sha512Fn };
22
- };
23
- if (ed25519Module.utils) {
24
- ed25519Module.utils.sha512Sync = sha512Fn;
25
- }
26
- if (ed25519Module.etc) {
27
- ed25519Module.etc.sha512Sync = sha512Fn;
28
- }
29
- } catch (error) {
30
- console.warn('Failed to configure ed25519 utils:', error);
31
- }
32
-
33
- /**
34
- * Turnkey-based signer for use with Originals SDK
35
- * Implements the ExternalSigner and ExternalVerifier interfaces
36
- */
37
- export class TurnkeyWebVHSigner implements ExternalSigner, ExternalVerifier {
38
- private subOrgId: string;
39
- private keyId: string;
40
- private publicKeyMultibase: string;
41
- private turnkeyClient: Turnkey;
42
- private verificationMethodId: string;
43
-
44
- constructor(
45
- subOrgId: string,
46
- keyId: string,
47
- publicKeyMultibase: string,
48
- turnkeyClient: Turnkey,
49
- verificationMethodId: string
50
- ) {
51
- this.subOrgId = subOrgId;
52
- this.keyId = keyId;
53
- this.publicKeyMultibase = publicKeyMultibase;
54
- this.turnkeyClient = turnkeyClient;
55
- this.verificationMethodId = verificationMethodId;
56
- }
57
-
58
- /**
59
- * Sign data using Turnkey's API
60
- */
61
- async sign(input: {
62
- document: Record<string, unknown>;
63
- proof: Record<string, unknown>;
64
- }): Promise<{ proofValue: string }> {
65
- try {
66
- // Prepare the data for signing using the SDK's canonical approach
67
- const dataToSign = await OriginalsSDK.prepareDIDDataForSigning(input.document, input.proof);
68
-
69
- // Convert canonical data to hex format for Turnkey's sign API
70
- const dataHex = `0x${bytesToHex(dataToSign)}`;
71
-
72
- // Sign using Turnkey's API
73
- const result = await this.turnkeyClient.apiClient().signRawPayload({
74
- organizationId: this.subOrgId,
75
- signWith: this.keyId,
76
- payload: dataHex,
77
- encoding: 'PAYLOAD_ENCODING_HEXADECIMAL',
78
- hashFunction: 'HASH_FUNCTION_NO_OP',
79
- });
80
-
81
- const signRawResult = result.activity?.result?.signRawPayloadResult;
82
- if (!signRawResult?.r || !signRawResult?.s) {
83
- throw new Error('No signature returned from Turnkey');
84
- }
85
-
86
- const signature = signRawResult.r + signRawResult.s;
87
-
88
- // Convert signature to bytes
89
- const cleanSig = signature.startsWith('0x') ? signature.slice(2) : signature;
90
- let signatureBytes = Buffer.from(cleanSig, 'hex');
91
-
92
- // Ed25519 signatures should be exactly 64 bytes
93
- if (signatureBytes.length === 65) {
94
- signatureBytes = signatureBytes.slice(0, 64);
95
- } else if (signatureBytes.length !== 64) {
96
- throw new Error(
97
- `Invalid Ed25519 signature length: ${signatureBytes.length} (expected 64 bytes)`
98
- );
99
- }
100
-
101
- // Encode signature as multibase
102
- const proofValue = multikey.encodeMultibase(signatureBytes);
103
- return { proofValue };
104
- } catch (error) {
105
- console.error('Error signing with Turnkey:', error);
106
- throw new Error(
107
- `Failed to sign with Turnkey: ${error instanceof Error ? error.message : String(error)}`
108
- );
109
- }
110
- }
111
-
112
- /**
113
- * Verify a signature
114
- */
115
- async verify(
116
- signature: Uint8Array,
117
- message: Uint8Array,
118
- publicKey: Uint8Array
119
- ): Promise<boolean> {
120
- try {
121
- // Ed25519 public keys must be exactly 32 bytes
122
- let ed25519PublicKey = publicKey;
123
- if (publicKey.length === 33) {
124
- ed25519PublicKey = publicKey.slice(1);
125
- } else if (publicKey.length !== 32) {
126
- return false;
127
- }
128
-
129
- const ed25519Module = ed25519 as unknown as {
130
- utils?: { sha512Sync?: typeof sha512Fn };
131
- };
132
- if (typeof ed25519Module.utils?.sha512Sync !== 'function') {
133
- ed25519Module.utils!.sha512Sync = sha512Fn;
134
- }
135
-
136
- return await ed25519.verifyAsync(signature, message, ed25519PublicKey);
137
- } catch (error) {
138
- console.error('Error verifying signature:', error);
139
- return false;
140
- }
141
- }
142
-
143
- getVerificationMethodId(): string {
144
- return this.verificationMethodId;
145
- }
146
-
147
- getPublicKeyMultibase(): string {
148
- return this.publicKeyMultibase;
149
- }
150
- }
151
-
152
- /**
153
- * Create a Turnkey signer for use with the Originals SDK
154
- */
155
- export function createTurnkeySigner(
156
- subOrgId: string,
157
- keyId: string,
158
- turnkeyClient: Turnkey,
159
- verificationMethodId: string,
160
- publicKeyMultibase: string
161
- ): TurnkeyWebVHSigner {
162
- return new TurnkeyWebVHSigner(
163
- subOrgId,
164
- keyId,
165
- publicKeyMultibase,
166
- turnkeyClient,
167
- verificationMethodId
168
- );
169
- }
170
-
package/src/types.ts DELETED
@@ -1,172 +0,0 @@
1
- /**
2
- * Shared types for @originals/auth
3
- */
4
-
5
- /**
6
- * Authenticated user information
7
- */
8
- export interface AuthUser {
9
- /** Database user ID */
10
- id: string;
11
- /** User's email address */
12
- email: string;
13
- /** User's DID identifier */
14
- did: string;
15
- /** Turnkey sub-organization ID */
16
- turnkeySubOrgId: string;
17
- }
18
-
19
- /**
20
- * JWT token payload structure
21
- */
22
- export interface TokenPayload {
23
- /** Subject - Turnkey sub-organization ID (stable identifier) */
24
- sub: string;
25
- /** User email (metadata) */
26
- email: string;
27
- /** Optional Turnkey session token for user authentication */
28
- sessionToken?: string;
29
- /** Issued at timestamp */
30
- iat: number;
31
- /** Expiration timestamp */
32
- exp: number;
33
- }
34
-
35
- /**
36
- * Options for creating auth middleware
37
- */
38
- export interface AuthMiddlewareOptions {
39
- /** Function to look up user by Turnkey sub-org ID */
40
- getUserByTurnkeyId: (turnkeyId: string) => Promise<AuthUser | null>;
41
- /** Optional function to create user on first auth */
42
- createUser?: (turnkeyId: string, email: string, temporaryDid: string) => Promise<AuthUser>;
43
- /** Cookie name for JWT token (default: 'auth_token') */
44
- cookieName?: string;
45
- /** JWT secret (default: process.env.JWT_SECRET) */
46
- jwtSecret?: string;
47
- }
48
-
49
- /**
50
- * Email authentication session
51
- */
52
- export interface EmailAuthSession {
53
- /** User's email address */
54
- email: string;
55
- /** Turnkey sub-organization ID */
56
- subOrgId?: string;
57
- /** Turnkey OTP ID */
58
- otpId?: string;
59
- /** Session creation timestamp */
60
- timestamp: number;
61
- /** Whether the session has been verified */
62
- verified: boolean;
63
- }
64
-
65
- /**
66
- * Result of initiating email authentication
67
- */
68
- export interface InitiateAuthResult {
69
- /** Session ID for verification step */
70
- sessionId: string;
71
- /** User-friendly message */
72
- message: string;
73
- }
74
-
75
- /**
76
- * Result of verifying email authentication
77
- */
78
- export interface VerifyAuthResult {
79
- /** Whether verification was successful */
80
- verified: boolean;
81
- /** User's email address */
82
- email: string;
83
- /** Turnkey sub-organization ID */
84
- subOrgId: string;
85
- }
86
-
87
- /**
88
- * Cookie configuration for auth tokens
89
- */
90
- export interface AuthCookieConfig {
91
- /** Cookie name */
92
- name: string;
93
- /** Cookie value (JWT token) */
94
- value: string;
95
- /** Cookie options */
96
- options: {
97
- httpOnly: boolean;
98
- secure: boolean;
99
- sameSite: 'strict' | 'lax' | 'none';
100
- maxAge: number;
101
- path: string;
102
- };
103
- }
104
-
105
- /**
106
- * Turnkey wallet information
107
- */
108
- export interface TurnkeyWallet {
109
- /** Wallet ID */
110
- walletId: string;
111
- /** Wallet name */
112
- walletName: string;
113
- /** Wallet accounts */
114
- accounts: TurnkeyWalletAccount[];
115
- }
116
-
117
- /**
118
- * Turnkey wallet account
119
- */
120
- export interface TurnkeyWalletAccount {
121
- /** Account address */
122
- address: string;
123
- /** Cryptographic curve */
124
- curve: 'CURVE_SECP256K1' | 'CURVE_ED25519';
125
- /** Derivation path */
126
- path: string;
127
- /** Address format */
128
- addressFormat: string;
129
- }
130
-
131
- /**
132
- * Client-side Turnkey authentication state
133
- */
134
- export interface TurnkeyAuthState {
135
- /** Whether the user is authenticated */
136
- isAuthenticated: boolean;
137
- /** Whether an auth operation is in progress */
138
- isLoading: boolean;
139
- /** Error message if any */
140
- error: string | null;
141
- /** User's email address */
142
- email: string | null;
143
- /** User's wallets */
144
- wallets: TurnkeyWallet[];
145
- /** OTP ID for verification step */
146
- otpId: string | null;
147
- }
148
-
149
- /**
150
- * Request context with authenticated user
151
- */
152
- export interface AuthenticatedRequest {
153
- user: {
154
- /** Database user ID */
155
- id: string;
156
- /** Turnkey sub-organization ID */
157
- turnkeySubOrgId: string;
158
- /** User's email */
159
- email: string;
160
- /** User's DID */
161
- did: string;
162
- /** Turnkey session token (if available) */
163
- sessionToken?: string;
164
- };
165
- }
166
-
167
-
168
-
169
-
170
-
171
-
172
-