@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/dist/types.d.ts DELETED
@@ -1,155 +0,0 @@
1
- /**
2
- * Shared types for @originals/auth
3
- */
4
- /**
5
- * Authenticated user information
6
- */
7
- export interface AuthUser {
8
- /** Database user ID */
9
- id: string;
10
- /** User's email address */
11
- email: string;
12
- /** User's DID identifier */
13
- did: string;
14
- /** Turnkey sub-organization ID */
15
- turnkeySubOrgId: string;
16
- }
17
- /**
18
- * JWT token payload structure
19
- */
20
- export interface TokenPayload {
21
- /** Subject - Turnkey sub-organization ID (stable identifier) */
22
- sub: string;
23
- /** User email (metadata) */
24
- email: string;
25
- /** Optional Turnkey session token for user authentication */
26
- sessionToken?: string;
27
- /** Issued at timestamp */
28
- iat: number;
29
- /** Expiration timestamp */
30
- exp: number;
31
- }
32
- /**
33
- * Options for creating auth middleware
34
- */
35
- export interface AuthMiddlewareOptions {
36
- /** Function to look up user by Turnkey sub-org ID */
37
- getUserByTurnkeyId: (turnkeyId: string) => Promise<AuthUser | null>;
38
- /** Optional function to create user on first auth */
39
- createUser?: (turnkeyId: string, email: string, temporaryDid: string) => Promise<AuthUser>;
40
- /** Cookie name for JWT token (default: 'auth_token') */
41
- cookieName?: string;
42
- /** JWT secret (default: process.env.JWT_SECRET) */
43
- jwtSecret?: string;
44
- }
45
- /**
46
- * Email authentication session
47
- */
48
- export interface EmailAuthSession {
49
- /** User's email address */
50
- email: string;
51
- /** Turnkey sub-organization ID */
52
- subOrgId?: string;
53
- /** Turnkey OTP ID */
54
- otpId?: string;
55
- /** Session creation timestamp */
56
- timestamp: number;
57
- /** Whether the session has been verified */
58
- verified: boolean;
59
- }
60
- /**
61
- * Result of initiating email authentication
62
- */
63
- export interface InitiateAuthResult {
64
- /** Session ID for verification step */
65
- sessionId: string;
66
- /** User-friendly message */
67
- message: string;
68
- }
69
- /**
70
- * Result of verifying email authentication
71
- */
72
- export interface VerifyAuthResult {
73
- /** Whether verification was successful */
74
- verified: boolean;
75
- /** User's email address */
76
- email: string;
77
- /** Turnkey sub-organization ID */
78
- subOrgId: string;
79
- }
80
- /**
81
- * Cookie configuration for auth tokens
82
- */
83
- export interface AuthCookieConfig {
84
- /** Cookie name */
85
- name: string;
86
- /** Cookie value (JWT token) */
87
- value: string;
88
- /** Cookie options */
89
- options: {
90
- httpOnly: boolean;
91
- secure: boolean;
92
- sameSite: 'strict' | 'lax' | 'none';
93
- maxAge: number;
94
- path: string;
95
- };
96
- }
97
- /**
98
- * Turnkey wallet information
99
- */
100
- export interface TurnkeyWallet {
101
- /** Wallet ID */
102
- walletId: string;
103
- /** Wallet name */
104
- walletName: string;
105
- /** Wallet accounts */
106
- accounts: TurnkeyWalletAccount[];
107
- }
108
- /**
109
- * Turnkey wallet account
110
- */
111
- export interface TurnkeyWalletAccount {
112
- /** Account address */
113
- address: string;
114
- /** Cryptographic curve */
115
- curve: 'CURVE_SECP256K1' | 'CURVE_ED25519';
116
- /** Derivation path */
117
- path: string;
118
- /** Address format */
119
- addressFormat: string;
120
- }
121
- /**
122
- * Client-side Turnkey authentication state
123
- */
124
- export interface TurnkeyAuthState {
125
- /** Whether the user is authenticated */
126
- isAuthenticated: boolean;
127
- /** Whether an auth operation is in progress */
128
- isLoading: boolean;
129
- /** Error message if any */
130
- error: string | null;
131
- /** User's email address */
132
- email: string | null;
133
- /** User's wallets */
134
- wallets: TurnkeyWallet[];
135
- /** OTP ID for verification step */
136
- otpId: string | null;
137
- }
138
- /**
139
- * Request context with authenticated user
140
- */
141
- export interface AuthenticatedRequest {
142
- user: {
143
- /** Database user ID */
144
- id: string;
145
- /** Turnkey sub-organization ID */
146
- turnkeySubOrgId: string;
147
- /** User's email */
148
- email: string;
149
- /** User's DID */
150
- did: string;
151
- /** Turnkey session token (if available) */
152
- sessionToken?: string;
153
- };
154
- }
155
- //# sourceMappingURL=types.d.ts.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"types.d.ts","sourceRoot":"","sources":["../src/types.ts"],"names":[],"mappings":"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"}
package/dist/types.js DELETED
@@ -1,5 +0,0 @@
1
- /**
2
- * Shared types for @originals/auth
3
- */
4
- export {};
5
- //# sourceMappingURL=types.js.map
package/dist/types.js.map DELETED
@@ -1 +0,0 @@
1
- {"version":3,"file":"types.js","sourceRoot":"","sources":["../src/types.ts"],"names":[],"mappings":"AAAA;;GAEG"}
package/eslint.config.js DELETED
@@ -1,32 +0,0 @@
1
- import eslint from '@eslint/js';
2
- import tseslint from 'typescript-eslint';
3
-
4
- export default tseslint.config(
5
- eslint.configs.recommended,
6
- ...tseslint.configs.recommendedTypeChecked,
7
- {
8
- languageOptions: {
9
- parserOptions: {
10
- project: true,
11
- tsconfigRootDir: import.meta.dirname,
12
- },
13
- },
14
- rules: {
15
- '@typescript-eslint/no-explicit-any': 'warn',
16
- '@typescript-eslint/no-unused-vars': ['error', { argsIgnorePattern: '^_' }],
17
- '@typescript-eslint/explicit-function-return-type': 'off',
18
- '@typescript-eslint/no-unsafe-assignment': 'warn',
19
- '@typescript-eslint/no-unsafe-member-access': 'warn',
20
- '@typescript-eslint/no-unsafe-call': 'warn',
21
- '@typescript-eslint/no-unsafe-return': 'warn',
22
- '@typescript-eslint/restrict-template-expressions': 'warn',
23
- 'no-console': 'off',
24
- 'no-empty': ['error', { allowEmptyCatch: false }],
25
- 'prefer-const': 'error',
26
- 'no-var': 'error',
27
- },
28
- },
29
- {
30
- ignores: ['dist/', 'node_modules/', '*.js', 'tests/'],
31
- }
32
- );
@@ -1,29 +0,0 @@
1
- import { describe, test, expect } from 'bun:test';
2
-
3
- describe('@originals/auth', () => {
4
- test('package exports are defined', async () => {
5
- // Test that the main exports are accessible
6
- const auth = await import('../src/index');
7
- expect(auth).toBeDefined();
8
- });
9
-
10
- test('server exports are defined', async () => {
11
- const server = await import('../src/server/index');
12
- expect(server).toBeDefined();
13
- });
14
-
15
- test('client exports are defined', async () => {
16
- const client = await import('../src/client/index');
17
- expect(client).toBeDefined();
18
- });
19
-
20
- test('types are defined', async () => {
21
- const types = await import('../src/types');
22
- expect(types).toBeDefined();
23
- });
24
- });
25
-
26
-
27
-
28
-
29
-
@@ -1,167 +0,0 @@
1
- import { describe, test, expect, mock } from 'bun:test';
2
- import { sendOtp, verifyOtp } from '../src/client/server-auth';
3
-
4
- describe('server-auth', () => {
5
- describe('sendOtp', () => {
6
- test('sends email to endpoint and returns result', async () => {
7
- const mockFetch = mock(() =>
8
- Promise.resolve({
9
- ok: true,
10
- json: () => Promise.resolve({ sessionId: 'session_123', message: 'Code sent' }),
11
- })
12
- );
13
- const result = await sendOtp('test@example.com', '/api/auth/send-otp', {
14
- fetch: mockFetch as unknown as typeof fetch,
15
- });
16
- expect(result.sessionId).toBe('session_123');
17
- expect(result.message).toBe('Code sent');
18
- expect(mockFetch).toHaveBeenCalledWith(
19
- '/api/auth/send-otp',
20
- expect.objectContaining({
21
- method: 'POST',
22
- headers: { 'Content-Type': 'application/json' },
23
- body: JSON.stringify({ email: 'test@example.com' }),
24
- })
25
- );
26
- });
27
-
28
- test('throws on non-ok response with server message', async () => {
29
- const mockFetch = mock(() =>
30
- Promise.resolve({
31
- ok: false,
32
- status: 400,
33
- json: () => Promise.resolve({ message: 'Invalid email' }),
34
- })
35
- );
36
- await expect(
37
- sendOtp('bad', '/api/auth/send-otp', { fetch: mockFetch as unknown as typeof fetch })
38
- ).rejects.toThrow('Invalid email');
39
- });
40
-
41
- test('throws with HTTP status when no message in response', async () => {
42
- const mockFetch = mock(() =>
43
- Promise.resolve({
44
- ok: false,
45
- status: 500,
46
- json: () => Promise.resolve({}),
47
- })
48
- );
49
- await expect(
50
- sendOtp('test@example.com', '/api/auth/send-otp', {
51
- fetch: mockFetch as unknown as typeof fetch,
52
- })
53
- ).rejects.toThrow('HTTP 500');
54
- });
55
-
56
- test('throws fallback message when json parsing fails', async () => {
57
- const mockFetch = mock(() =>
58
- Promise.resolve({
59
- ok: false,
60
- status: 502,
61
- json: () => Promise.reject(new Error('Invalid JSON')),
62
- })
63
- );
64
- await expect(
65
- sendOtp('test@example.com', '/api/auth/send-otp', {
66
- fetch: mockFetch as unknown as typeof fetch,
67
- })
68
- ).rejects.toThrow('Failed to send OTP');
69
- });
70
-
71
- test('uses default endpoint when not provided', async () => {
72
- const mockFetch = mock(() =>
73
- Promise.resolve({
74
- ok: true,
75
- json: () => Promise.resolve({ sessionId: 's1', message: 'ok' }),
76
- })
77
- );
78
- await sendOtp('test@example.com', undefined, { fetch: mockFetch as unknown as typeof fetch });
79
- expect(mockFetch).toHaveBeenCalledWith('/api/auth/send-otp', expect.anything());
80
- });
81
- });
82
-
83
- describe('verifyOtp', () => {
84
- test('sends sessionId and code, returns verification result', async () => {
85
- const mockFetch = mock(() =>
86
- Promise.resolve({
87
- ok: true,
88
- json: () =>
89
- Promise.resolve({ verified: true, email: 'test@example.com', subOrgId: 'org_123' }),
90
- })
91
- );
92
- const result = await verifyOtp('session_123', '123456', '/api/auth/verify-otp', {
93
- fetch: mockFetch as unknown as typeof fetch,
94
- });
95
- expect(result.verified).toBe(true);
96
- expect(result.email).toBe('test@example.com');
97
- expect(result.subOrgId).toBe('org_123');
98
- expect(mockFetch).toHaveBeenCalledWith(
99
- '/api/auth/verify-otp',
100
- expect.objectContaining({
101
- method: 'POST',
102
- headers: { 'Content-Type': 'application/json' },
103
- body: JSON.stringify({ sessionId: 'session_123', code: '123456' }),
104
- })
105
- );
106
- });
107
-
108
- test('throws on verification failure with server message', async () => {
109
- const mockFetch = mock(() =>
110
- Promise.resolve({
111
- ok: false,
112
- status: 401,
113
- json: () => Promise.resolve({ message: 'Invalid code' }),
114
- })
115
- );
116
- await expect(
117
- verifyOtp('s1', 'wrong', '/api/auth/verify-otp', {
118
- fetch: mockFetch as unknown as typeof fetch,
119
- })
120
- ).rejects.toThrow('Invalid code');
121
- });
122
-
123
- test('throws with HTTP status when no message in response', async () => {
124
- const mockFetch = mock(() =>
125
- Promise.resolve({
126
- ok: false,
127
- status: 403,
128
- json: () => Promise.resolve({}),
129
- })
130
- );
131
- await expect(
132
- verifyOtp('s1', '123456', '/api/auth/verify-otp', {
133
- fetch: mockFetch as unknown as typeof fetch,
134
- })
135
- ).rejects.toThrow('HTTP 403');
136
- });
137
-
138
- test('throws fallback message when json parsing fails', async () => {
139
- const mockFetch = mock(() =>
140
- Promise.resolve({
141
- ok: false,
142
- status: 500,
143
- json: () => Promise.reject(new Error('Invalid JSON')),
144
- })
145
- );
146
- await expect(
147
- verifyOtp('s1', '123456', '/api/auth/verify-otp', {
148
- fetch: mockFetch as unknown as typeof fetch,
149
- })
150
- ).rejects.toThrow('Verification failed');
151
- });
152
-
153
- test('uses default endpoint when not provided', async () => {
154
- const mockFetch = mock(() =>
155
- Promise.resolve({
156
- ok: true,
157
- json: () =>
158
- Promise.resolve({ verified: true, email: 'test@example.com', subOrgId: 'org_123' }),
159
- })
160
- );
161
- await verifyOtp('session_123', '123456', undefined, {
162
- fetch: mockFetch as unknown as typeof fetch,
163
- });
164
- expect(mockFetch).toHaveBeenCalledWith('/api/auth/verify-otp', expect.anything());
165
- });
166
- });
167
- });
package/tsconfig.json DELETED
@@ -1,32 +0,0 @@
1
- {
2
- "compilerOptions": {
3
- "target": "ES2022",
4
- "module": "ESNext",
5
- "moduleResolution": "bundler",
6
- "declaration": true,
7
- "declarationMap": true,
8
- "sourceMap": true,
9
- "outDir": "./dist",
10
- "rootDir": "./src",
11
- "strict": true,
12
- "esModuleInterop": true,
13
- "skipLibCheck": true,
14
- "forceConsistentCasingInFileNames": true,
15
- "resolveJsonModule": true,
16
- "isolatedModules": true,
17
- "lib": ["ES2022", "DOM"],
18
- "types": ["bun-types"],
19
- "paths": {
20
- "@/*": ["./src/*"]
21
- }
22
- },
23
- "include": ["src/**/*"],
24
- "exclude": ["node_modules", "dist", "tests"]
25
- }
26
-
27
-
28
-
29
-
30
-
31
-
32
-