@originals/auth 1.8.1 → 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 -20
  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
@@ -1,113 +0,0 @@
1
- /**
2
- * JWT Authentication Module
3
- * Implements secure token issuance and validation with HTTP-only cookies
4
- */
5
- import jwt from 'jsonwebtoken';
6
- // 7 days in seconds
7
- const DEFAULT_JWT_EXPIRES_IN = 7 * 24 * 60 * 60;
8
- /**
9
- * Get JWT secret from config or environment
10
- */
11
- function getJwtSecret(configSecret) {
12
- const secret = configSecret ?? process.env.JWT_SECRET;
13
- if (!secret) {
14
- throw new Error('JWT_SECRET environment variable is required');
15
- }
16
- return secret;
17
- }
18
- /**
19
- * Sign a JWT token for a user
20
- * @param subOrgId - Turnkey sub-organization ID (stable identifier)
21
- * @param email - User email (metadata)
22
- * @param sessionToken - Optional Turnkey session token for user authentication
23
- * @param options - Additional options
24
- * @returns Signed JWT token string
25
- */
26
- export function signToken(subOrgId, email, sessionToken, options) {
27
- if (!subOrgId) {
28
- throw new Error('Sub-organization ID is required for token signing');
29
- }
30
- const secret = getJwtSecret(options?.secret);
31
- const payload = {
32
- sub: subOrgId,
33
- email,
34
- };
35
- if (sessionToken) {
36
- payload.sessionToken = sessionToken;
37
- }
38
- const signOptions = {
39
- expiresIn: options?.expiresIn ?? DEFAULT_JWT_EXPIRES_IN,
40
- issuer: options?.issuer ?? 'originals-auth',
41
- audience: options?.audience ?? 'originals-api',
42
- };
43
- return jwt.sign(payload, secret, signOptions);
44
- }
45
- /**
46
- * Verify and decode a JWT token
47
- * @param token - JWT token string
48
- * @param options - Additional options
49
- * @returns Decoded token payload
50
- * @throws Error if token is invalid or expired
51
- */
52
- export function verifyToken(token, options) {
53
- const secret = getJwtSecret(options?.secret);
54
- try {
55
- const payload = jwt.verify(token, secret, {
56
- issuer: options?.issuer ?? 'originals-auth',
57
- audience: options?.audience ?? 'originals-api',
58
- });
59
- if (!payload.sub) {
60
- throw new Error('Token missing sub-organization ID');
61
- }
62
- return payload;
63
- }
64
- catch (error) {
65
- if (error instanceof jwt.TokenExpiredError) {
66
- throw new Error('Token has expired');
67
- }
68
- if (error instanceof jwt.JsonWebTokenError) {
69
- throw new Error('Invalid token');
70
- }
71
- throw error;
72
- }
73
- }
74
- /**
75
- * Generate a secure cookie configuration for authentication tokens
76
- * @param token - JWT token to set in cookie
77
- * @param options - Cookie options
78
- * @returns Cookie configuration object
79
- */
80
- export function getAuthCookieConfig(token, options) {
81
- const isProduction = process.env.NODE_ENV === 'production';
82
- return {
83
- name: options?.cookieName ?? 'auth_token',
84
- value: token,
85
- options: {
86
- httpOnly: true, // Cannot be accessed by JavaScript (XSS protection)
87
- secure: options?.secure ?? isProduction, // HTTPS only in production
88
- sameSite: 'strict', // CSRF protection
89
- maxAge: options?.maxAge ?? 7 * 24 * 60 * 60 * 1000, // 7 days in milliseconds
90
- path: '/', // Available for all routes
91
- },
92
- };
93
- }
94
- /**
95
- * Get cookie configuration for logout (clears the auth cookie)
96
- * @param cookieName - Name of the cookie to clear
97
- * @returns Cookie configuration for clearing
98
- */
99
- export function getClearAuthCookieConfig(cookieName) {
100
- const isProduction = process.env.NODE_ENV === 'production';
101
- return {
102
- name: cookieName ?? 'auth_token',
103
- value: '',
104
- options: {
105
- httpOnly: true,
106
- secure: isProduction,
107
- sameSite: 'strict',
108
- maxAge: 0, // Expire immediately
109
- path: '/',
110
- },
111
- };
112
- }
113
- //# sourceMappingURL=jwt.js.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"jwt.js","sourceRoot":"","sources":["../../src/server/jwt.ts"],"names":[],"mappings":"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"}
@@ -1,39 +0,0 @@
1
- /**
2
- * Express authentication middleware factory
3
- */
4
- import type { Request, Response, NextFunction } from 'express';
5
- import type { AuthMiddlewareOptions } from '../types';
6
- /**
7
- * Create an authentication middleware for Express
8
- *
9
- * @example
10
- * ```typescript
11
- * import { createAuthMiddleware } from '@originals/auth/server';
12
- *
13
- * const authenticateUser = createAuthMiddleware({
14
- * getUserByTurnkeyId: async (turnkeyId) => {
15
- * return db.query.users.findFirst({
16
- * where: eq(users.turnkeySubOrgId, turnkeyId)
17
- * });
18
- * },
19
- * createUser: async (turnkeyId, email, temporaryDid) => {
20
- * return db.insert(users).values({
21
- * turnkeySubOrgId: turnkeyId,
22
- * email,
23
- * did: temporaryDid,
24
- * }).returning().then(rows => rows[0]);
25
- * }
26
- * });
27
- *
28
- * app.get('/api/protected', authenticateUser, (req, res) => {
29
- * res.json({ user: req.user });
30
- * });
31
- * ```
32
- */
33
- export declare function createAuthMiddleware(options: AuthMiddlewareOptions): (req: Request, res: Response, next: NextFunction) => Promise<void | Response>;
34
- /**
35
- * Optional authentication middleware - doesn't fail if not authenticated
36
- * Attaches user to request if valid token exists, otherwise continues without user
37
- */
38
- export declare function createOptionalAuthMiddleware(options: AuthMiddlewareOptions): (req: Request, res: Response, next: NextFunction) => Promise<void>;
39
- //# sourceMappingURL=middleware.d.ts.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"middleware.d.ts","sourceRoot":"","sources":["../../src/server/middleware.ts"],"names":[],"mappings":"AAAA;;GAEG;AAEH,OAAO,KAAK,EAAE,OAAO,EAAE,QAAQ,EAAE,YAAY,EAAE,MAAM,SAAS,CAAC;AAE/D,OAAO,KAAK,EAAE,qBAAqB,EAAkC,MAAM,UAAU,CAAC;AAEtF;;;;;;;;;;;;;;;;;;;;;;;;;;GA0BG;AACH,wBAAgB,oBAAoB,CAClC,OAAO,EAAE,qBAAqB,GAC7B,CAAC,GAAG,EAAE,OAAO,EAAE,GAAG,EAAE,QAAQ,EAAE,IAAI,EAAE,YAAY,KAAK,OAAO,CAAC,IAAI,GAAG,QAAQ,CAAC,CAsD/E;AAED;;;GAGG;AACH,wBAAgB,4BAA4B,CAC1C,OAAO,EAAE,qBAAqB,GAC7B,CAAC,GAAG,EAAE,OAAO,EAAE,GAAG,EAAE,QAAQ,EAAE,IAAI,EAAE,YAAY,KAAK,OAAO,CAAC,IAAI,CAAC,CAmCpE"}
@@ -1,112 +0,0 @@
1
- /**
2
- * Express authentication middleware factory
3
- */
4
- import { verifyToken } from './jwt.js';
5
- /**
6
- * Create an authentication middleware for Express
7
- *
8
- * @example
9
- * ```typescript
10
- * import { createAuthMiddleware } from '@originals/auth/server';
11
- *
12
- * const authenticateUser = createAuthMiddleware({
13
- * getUserByTurnkeyId: async (turnkeyId) => {
14
- * return db.query.users.findFirst({
15
- * where: eq(users.turnkeySubOrgId, turnkeyId)
16
- * });
17
- * },
18
- * createUser: async (turnkeyId, email, temporaryDid) => {
19
- * return db.insert(users).values({
20
- * turnkeySubOrgId: turnkeyId,
21
- * email,
22
- * did: temporaryDid,
23
- * }).returning().then(rows => rows[0]);
24
- * }
25
- * });
26
- *
27
- * app.get('/api/protected', authenticateUser, (req, res) => {
28
- * res.json({ user: req.user });
29
- * });
30
- * ```
31
- */
32
- export function createAuthMiddleware(options) {
33
- const cookieName = options.cookieName ?? 'auth_token';
34
- return async (req, res, next) => {
35
- try {
36
- // Get JWT token from HTTP-only cookie
37
- const cookies = req.cookies;
38
- const token = cookies?.[cookieName];
39
- if (!token) {
40
- return res.status(401).json({ error: 'Not authenticated' });
41
- }
42
- // Verify JWT token
43
- const payload = verifyToken(token, { secret: options.jwtSecret });
44
- const turnkeySubOrgId = payload.sub;
45
- const email = payload.email;
46
- // Check if user already exists
47
- let user = await options.getUserByTurnkeyId(turnkeySubOrgId);
48
- // If user doesn't exist and createUser is provided, create user
49
- if (!user && options.createUser) {
50
- console.log(`Creating user record for ${email}...`);
51
- // Use temporary DID as placeholder until user creates real DID
52
- const temporaryDid = `temp:turnkey:${turnkeySubOrgId}`;
53
- user = await options.createUser(turnkeySubOrgId, email, temporaryDid);
54
- console.log(`✅ User created: ${email}`);
55
- console.log(` Turnkey sub-org ID: ${turnkeySubOrgId}`);
56
- console.log(` Temporary DID: ${temporaryDid}`);
57
- }
58
- if (!user) {
59
- return res.status(401).json({ error: 'User not found' });
60
- }
61
- // Add user info to request
62
- req.user = {
63
- id: user.id,
64
- turnkeySubOrgId,
65
- email,
66
- did: user.did,
67
- sessionToken: payload.sessionToken,
68
- };
69
- next();
70
- }
71
- catch (error) {
72
- console.error('Authentication error:', error);
73
- return res.status(401).json({ error: 'Invalid or expired token' });
74
- }
75
- };
76
- }
77
- /**
78
- * Optional authentication middleware - doesn't fail if not authenticated
79
- * Attaches user to request if valid token exists, otherwise continues without user
80
- */
81
- export function createOptionalAuthMiddleware(options) {
82
- const cookieName = options.cookieName ?? 'auth_token';
83
- return async (req, res, next) => {
84
- try {
85
- const cookies = req.cookies;
86
- const token = cookies?.[cookieName];
87
- if (!token) {
88
- next();
89
- return;
90
- }
91
- const payload = verifyToken(token, { secret: options.jwtSecret });
92
- const turnkeySubOrgId = payload.sub;
93
- const email = payload.email;
94
- const user = await options.getUserByTurnkeyId(turnkeySubOrgId);
95
- if (user) {
96
- req.user = {
97
- id: user.id,
98
- turnkeySubOrgId,
99
- email,
100
- did: user.did,
101
- sessionToken: payload.sessionToken,
102
- };
103
- }
104
- next();
105
- }
106
- catch {
107
- // Token invalid or expired, continue without user
108
- next();
109
- }
110
- };
111
- }
112
- //# sourceMappingURL=middleware.js.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"middleware.js","sourceRoot":"","sources":["../../src/server/middleware.ts"],"names":[],"mappings":"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"}
@@ -1,24 +0,0 @@
1
- /**
2
- * Server-side Turnkey client utilities
3
- */
4
- import { Turnkey } from '@turnkey/sdk-server';
5
- export interface TurnkeyClientConfig {
6
- /** Turnkey API base URL (default: https://api.turnkey.com) */
7
- apiBaseUrl?: string;
8
- /** Turnkey API public key */
9
- apiPublicKey: string;
10
- /** Turnkey API private key */
11
- apiPrivateKey: string;
12
- /** Default organization ID */
13
- organizationId: string;
14
- }
15
- /**
16
- * Create a Turnkey server client
17
- */
18
- export declare function createTurnkeyClient(config?: Partial<TurnkeyClientConfig>): Turnkey;
19
- /**
20
- * Get or create a Turnkey sub-organization for a user
21
- * Creates sub-org with email-only root user and required wallet accounts
22
- */
23
- export declare function getOrCreateTurnkeySubOrg(email: string, turnkeyClient: Turnkey): Promise<string>;
24
- //# sourceMappingURL=turnkey-client.d.ts.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"turnkey-client.d.ts","sourceRoot":"","sources":["../../src/server/turnkey-client.ts"],"names":[],"mappings":"AAAA;;GAEG;AAEH,OAAO,EAAE,OAAO,EAAE,MAAM,qBAAqB,CAAC;AAE9C,MAAM,WAAW,mBAAmB;IAClC,8DAA8D;IAC9D,UAAU,CAAC,EAAE,MAAM,CAAC;IACpB,6BAA6B;IAC7B,YAAY,EAAE,MAAM,CAAC;IACrB,8BAA8B;IAC9B,aAAa,EAAE,MAAM,CAAC;IACtB,8BAA8B;IAC9B,cAAc,EAAE,MAAM,CAAC;CACxB;AAED;;GAEG;AACH,wBAAgB,mBAAmB,CAAC,MAAM,CAAC,EAAE,OAAO,CAAC,mBAAmB,CAAC,GAAG,OAAO,CAqBlF;AAED;;;GAGG;AACH,wBAAsB,wBAAwB,CAC5C,KAAK,EAAE,MAAM,EACb,aAAa,EAAE,OAAO,GACrB,OAAO,CAAC,MAAM,CAAC,CAkGjB"}
@@ -1,118 +0,0 @@
1
- /**
2
- * Server-side Turnkey client utilities
3
- */
4
- import { Turnkey } from '@turnkey/sdk-server';
5
- /**
6
- * Create a Turnkey server client
7
- */
8
- export function createTurnkeyClient(config) {
9
- const apiPublicKey = config?.apiPublicKey ?? process.env.TURNKEY_API_PUBLIC_KEY;
10
- const apiPrivateKey = config?.apiPrivateKey ?? process.env.TURNKEY_API_PRIVATE_KEY;
11
- const organizationId = config?.organizationId ?? process.env.TURNKEY_ORGANIZATION_ID;
12
- if (!apiPublicKey) {
13
- throw new Error('TURNKEY_API_PUBLIC_KEY is required');
14
- }
15
- if (!apiPrivateKey) {
16
- throw new Error('TURNKEY_API_PRIVATE_KEY is required');
17
- }
18
- if (!organizationId) {
19
- throw new Error('TURNKEY_ORGANIZATION_ID is required');
20
- }
21
- return new Turnkey({
22
- apiBaseUrl: config?.apiBaseUrl ?? 'https://api.turnkey.com',
23
- apiPublicKey,
24
- apiPrivateKey,
25
- defaultOrganizationId: organizationId,
26
- });
27
- }
28
- /**
29
- * Get or create a Turnkey sub-organization for a user
30
- * Creates sub-org with email-only root user and required wallet accounts
31
- */
32
- export async function getOrCreateTurnkeySubOrg(email, turnkeyClient) {
33
- const organizationId = process.env.TURNKEY_ORGANIZATION_ID;
34
- if (!organizationId) {
35
- throw new Error('TURNKEY_ORGANIZATION_ID is required');
36
- }
37
- // Generate a consistent base name for lookup
38
- const baseSubOrgName = `user-${email.replace(/[^a-z0-9]/gi, '-').toLowerCase()}`;
39
- console.log(`🔍 Checking for existing sub-organization for ${email}...`);
40
- try {
41
- // Try to get existing sub-organizations by email filter
42
- const subOrgs = await turnkeyClient.apiClient().getSubOrgIds({
43
- organizationId,
44
- filterType: 'EMAIL',
45
- filterValue: email,
46
- });
47
- const subOrgIds = subOrgs.organizationIds || [];
48
- const existingSubOrgId = subOrgIds.length > 0 ? subOrgIds[0] : null;
49
- if (existingSubOrgId) {
50
- console.log(`✅ Found existing sub-organization: ${existingSubOrgId}`);
51
- // Check if this sub-org has a wallet
52
- try {
53
- const walletsCheck = await turnkeyClient.apiClient().getWallets({
54
- organizationId: existingSubOrgId,
55
- });
56
- const walletCount = walletsCheck.wallets?.length || 0;
57
- if (walletCount > 0) {
58
- return existingSubOrgId;
59
- }
60
- console.log(`⚠️ Sub-org has no wallet, creating new sub-org with wallet...`);
61
- }
62
- catch (walletCheckErr) {
63
- console.error('Could not check wallet in sub-org:', walletCheckErr);
64
- return existingSubOrgId;
65
- }
66
- }
67
- }
68
- catch {
69
- console.log(`📝 No existing sub-org found, will create new one`);
70
- }
71
- // Generate a unique name for the new sub-org
72
- const subOrgName = `${baseSubOrgName}-${Date.now()}`;
73
- console.log(`📧 Creating new Turnkey sub-organization for ${email}...`);
74
- // Create sub-organization with wallet containing required keys
75
- const result = await turnkeyClient.apiClient().createSubOrganization({
76
- subOrganizationName: subOrgName,
77
- rootUsers: [
78
- {
79
- userName: email,
80
- userEmail: email,
81
- apiKeys: [],
82
- authenticators: [],
83
- oauthProviders: [],
84
- },
85
- ],
86
- rootQuorumThreshold: 1,
87
- wallet: {
88
- walletName: 'default-wallet',
89
- accounts: [
90
- {
91
- curve: 'CURVE_SECP256K1',
92
- pathFormat: 'PATH_FORMAT_BIP32',
93
- path: "m/44'/0'/0'/0/0", // Bitcoin path for auth-key
94
- addressFormat: 'ADDRESS_FORMAT_ETHEREUM',
95
- },
96
- {
97
- curve: 'CURVE_ED25519',
98
- pathFormat: 'PATH_FORMAT_BIP32',
99
- path: "m/44'/501'/0'/0'", // Ed25519 for assertion-key
100
- addressFormat: 'ADDRESS_FORMAT_SOLANA',
101
- },
102
- {
103
- curve: 'CURVE_ED25519',
104
- pathFormat: 'PATH_FORMAT_BIP32',
105
- path: "m/44'/501'/1'/0'", // Ed25519 for update-key
106
- addressFormat: 'ADDRESS_FORMAT_SOLANA',
107
- },
108
- ],
109
- },
110
- });
111
- const subOrgId = result.activity?.result?.createSubOrganizationResultV7?.subOrganizationId;
112
- if (!subOrgId) {
113
- throw new Error('No sub-organization ID returned from Turnkey');
114
- }
115
- console.log(`✅ Created sub-organization: ${subOrgId}`);
116
- return subOrgId;
117
- }
118
- //# sourceMappingURL=turnkey-client.js.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"turnkey-client.js","sourceRoot":"","sources":["../../src/server/turnkey-client.ts"],"names":[],"mappings":"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"}
@@ -1,40 +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
- import { Turnkey } from '@turnkey/sdk-server';
8
- import { ExternalSigner, ExternalVerifier } from '@originals/sdk';
9
- /**
10
- * Turnkey-based signer for use with Originals SDK
11
- * Implements the ExternalSigner and ExternalVerifier interfaces
12
- */
13
- export declare class TurnkeyWebVHSigner implements ExternalSigner, ExternalVerifier {
14
- private subOrgId;
15
- private keyId;
16
- private publicKeyMultibase;
17
- private turnkeyClient;
18
- private verificationMethodId;
19
- constructor(subOrgId: string, keyId: string, publicKeyMultibase: string, turnkeyClient: Turnkey, verificationMethodId: string);
20
- /**
21
- * Sign data using Turnkey's API
22
- */
23
- sign(input: {
24
- document: Record<string, unknown>;
25
- proof: Record<string, unknown>;
26
- }): Promise<{
27
- proofValue: string;
28
- }>;
29
- /**
30
- * Verify a signature
31
- */
32
- verify(signature: Uint8Array, message: Uint8Array, publicKey: Uint8Array): Promise<boolean>;
33
- getVerificationMethodId(): string;
34
- getPublicKeyMultibase(): string;
35
- }
36
- /**
37
- * Create a Turnkey signer for use with the Originals SDK
38
- */
39
- export declare function createTurnkeySigner(subOrgId: string, keyId: string, turnkeyClient: Turnkey, verificationMethodId: string, publicKeyMultibase: string): TurnkeyWebVHSigner;
40
- //# sourceMappingURL=turnkey-signer.d.ts.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"turnkey-signer.d.ts","sourceRoot":"","sources":["../../src/server/turnkey-signer.ts"],"names":[],"mappings":"AAAA;;;;;GAKG;AAEH,OAAO,EAAE,OAAO,EAAE,MAAM,qBAAqB,CAAC;AAC9C,OAAO,EAAE,cAAc,EAAE,gBAAgB,EAA0B,MAAM,gBAAgB,CAAC;AAwB1F;;;GAGG;AACH,qBAAa,kBAAmB,YAAW,cAAc,EAAE,gBAAgB;IACzE,OAAO,CAAC,QAAQ,CAAS;IACzB,OAAO,CAAC,KAAK,CAAS;IACtB,OAAO,CAAC,kBAAkB,CAAS;IACnC,OAAO,CAAC,aAAa,CAAU;IAC/B,OAAO,CAAC,oBAAoB,CAAS;gBAGnC,QAAQ,EAAE,MAAM,EAChB,KAAK,EAAE,MAAM,EACb,kBAAkB,EAAE,MAAM,EAC1B,aAAa,EAAE,OAAO,EACtB,oBAAoB,EAAE,MAAM;IAS9B;;OAEG;IACG,IAAI,CAAC,KAAK,EAAE;QAChB,QAAQ,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAAC;QAClC,KAAK,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAAC;KAChC,GAAG,OAAO,CAAC;QAAE,UAAU,EAAE,MAAM,CAAA;KAAE,CAAC;IAgDnC;;OAEG;IACG,MAAM,CACV,SAAS,EAAE,UAAU,EACrB,OAAO,EAAE,UAAU,EACnB,SAAS,EAAE,UAAU,GACpB,OAAO,CAAC,OAAO,CAAC;IAwBnB,uBAAuB,IAAI,MAAM;IAIjC,qBAAqB,IAAI,MAAM;CAGhC;AAED;;GAEG;AACH,wBAAgB,mBAAmB,CACjC,QAAQ,EAAE,MAAM,EAChB,KAAK,EAAE,MAAM,EACb,aAAa,EAAE,OAAO,EACtB,oBAAoB,EAAE,MAAM,EAC5B,kBAAkB,EAAE,MAAM,GACzB,kBAAkB,CAQpB"}
@@ -1,121 +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
- import { multikey, OriginalsSDK } from '@originals/sdk';
8
- import { sha512 } from '@noble/hashes/sha2.js';
9
- import { concatBytes, bytesToHex } from '@noble/hashes/utils.js';
10
- import * as ed25519 from '@noble/ed25519';
11
- // Configure @noble/ed25519 with required SHA-512 function
12
- const sha512Fn = (...msgs) => sha512(concatBytes(...msgs));
13
- // Initialize Ed25519 configuration
14
- try {
15
- const ed25519Module = ed25519;
16
- if (ed25519Module.utils) {
17
- ed25519Module.utils.sha512Sync = sha512Fn;
18
- }
19
- if (ed25519Module.etc) {
20
- ed25519Module.etc.sha512Sync = sha512Fn;
21
- }
22
- }
23
- catch (error) {
24
- console.warn('Failed to configure ed25519 utils:', error);
25
- }
26
- /**
27
- * Turnkey-based signer for use with Originals SDK
28
- * Implements the ExternalSigner and ExternalVerifier interfaces
29
- */
30
- export class TurnkeyWebVHSigner {
31
- subOrgId;
32
- keyId;
33
- publicKeyMultibase;
34
- turnkeyClient;
35
- verificationMethodId;
36
- constructor(subOrgId, keyId, publicKeyMultibase, turnkeyClient, verificationMethodId) {
37
- this.subOrgId = subOrgId;
38
- this.keyId = keyId;
39
- this.publicKeyMultibase = publicKeyMultibase;
40
- this.turnkeyClient = turnkeyClient;
41
- this.verificationMethodId = verificationMethodId;
42
- }
43
- /**
44
- * Sign data using Turnkey's API
45
- */
46
- async sign(input) {
47
- try {
48
- // Prepare the data for signing using the SDK's canonical approach
49
- const dataToSign = await OriginalsSDK.prepareDIDDataForSigning(input.document, input.proof);
50
- // Convert canonical data to hex format for Turnkey's sign API
51
- const dataHex = `0x${bytesToHex(dataToSign)}`;
52
- // Sign using Turnkey's API
53
- const result = await this.turnkeyClient.apiClient().signRawPayload({
54
- organizationId: this.subOrgId,
55
- signWith: this.keyId,
56
- payload: dataHex,
57
- encoding: 'PAYLOAD_ENCODING_HEXADECIMAL',
58
- hashFunction: 'HASH_FUNCTION_NO_OP',
59
- });
60
- const signRawResult = result.activity?.result?.signRawPayloadResult;
61
- if (!signRawResult?.r || !signRawResult?.s) {
62
- throw new Error('No signature returned from Turnkey');
63
- }
64
- const signature = signRawResult.r + signRawResult.s;
65
- // Convert signature to bytes
66
- const cleanSig = signature.startsWith('0x') ? signature.slice(2) : signature;
67
- let signatureBytes = Buffer.from(cleanSig, 'hex');
68
- // Ed25519 signatures should be exactly 64 bytes
69
- if (signatureBytes.length === 65) {
70
- signatureBytes = signatureBytes.slice(0, 64);
71
- }
72
- else if (signatureBytes.length !== 64) {
73
- throw new Error(`Invalid Ed25519 signature length: ${signatureBytes.length} (expected 64 bytes)`);
74
- }
75
- // Encode signature as multibase
76
- const proofValue = multikey.encodeMultibase(signatureBytes);
77
- return { proofValue };
78
- }
79
- catch (error) {
80
- console.error('Error signing with Turnkey:', error);
81
- throw new Error(`Failed to sign with Turnkey: ${error instanceof Error ? error.message : String(error)}`);
82
- }
83
- }
84
- /**
85
- * Verify a signature
86
- */
87
- async verify(signature, message, publicKey) {
88
- try {
89
- // Ed25519 public keys must be exactly 32 bytes
90
- let ed25519PublicKey = publicKey;
91
- if (publicKey.length === 33) {
92
- ed25519PublicKey = publicKey.slice(1);
93
- }
94
- else if (publicKey.length !== 32) {
95
- return false;
96
- }
97
- const ed25519Module = ed25519;
98
- if (typeof ed25519Module.utils?.sha512Sync !== 'function') {
99
- ed25519Module.utils.sha512Sync = sha512Fn;
100
- }
101
- return await ed25519.verifyAsync(signature, message, ed25519PublicKey);
102
- }
103
- catch (error) {
104
- console.error('Error verifying signature:', error);
105
- return false;
106
- }
107
- }
108
- getVerificationMethodId() {
109
- return this.verificationMethodId;
110
- }
111
- getPublicKeyMultibase() {
112
- return this.publicKeyMultibase;
113
- }
114
- }
115
- /**
116
- * Create a Turnkey signer for use with the Originals SDK
117
- */
118
- export function createTurnkeySigner(subOrgId, keyId, turnkeyClient, verificationMethodId, publicKeyMultibase) {
119
- return new TurnkeyWebVHSigner(subOrgId, keyId, publicKeyMultibase, turnkeyClient, verificationMethodId);
120
- }
121
- //# sourceMappingURL=turnkey-signer.js.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"turnkey-signer.js","sourceRoot":"","sources":["../../src/server/turnkey-signer.ts"],"names":[],"mappings":"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"}