@rapidraptor/auth-server 0.2.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 (77) hide show
  1. package/dist/config.d.ts +33 -0
  2. package/dist/config.d.ts.map +1 -0
  3. package/dist/config.js +44 -0
  4. package/dist/config.js.map +1 -0
  5. package/dist/firebase/admin.d.ts +18 -0
  6. package/dist/firebase/admin.d.ts.map +1 -0
  7. package/dist/firebase/admin.js +96 -0
  8. package/dist/firebase/admin.js.map +1 -0
  9. package/dist/index.d.ts +14 -0
  10. package/dist/index.d.ts.map +1 -0
  11. package/dist/index.js +15 -0
  12. package/dist/index.js.map +1 -0
  13. package/dist/middleware/authMiddleware.d.ts +9 -0
  14. package/dist/middleware/authMiddleware.d.ts.map +1 -0
  15. package/dist/middleware/authMiddleware.js +241 -0
  16. package/dist/middleware/authMiddleware.js.map +1 -0
  17. package/dist/middleware/authMiddleware.test.d.ts +2 -0
  18. package/dist/middleware/authMiddleware.test.d.ts.map +1 -0
  19. package/dist/middleware/authMiddleware.test.js +691 -0
  20. package/dist/middleware/authMiddleware.test.js.map +1 -0
  21. package/dist/middleware/logoutHandler.d.ts +9 -0
  22. package/dist/middleware/logoutHandler.d.ts.map +1 -0
  23. package/dist/middleware/logoutHandler.js +54 -0
  24. package/dist/middleware/logoutHandler.js.map +1 -0
  25. package/dist/middleware/logoutHandler.test.d.ts +2 -0
  26. package/dist/middleware/logoutHandler.test.d.ts.map +1 -0
  27. package/dist/middleware/logoutHandler.test.js +103 -0
  28. package/dist/middleware/logoutHandler.test.js.map +1 -0
  29. package/dist/session/firestoreSync.d.ts +37 -0
  30. package/dist/session/firestoreSync.d.ts.map +1 -0
  31. package/dist/session/firestoreSync.js +88 -0
  32. package/dist/session/firestoreSync.js.map +1 -0
  33. package/dist/session/firestoreSync.test.d.ts +2 -0
  34. package/dist/session/firestoreSync.test.d.ts.map +1 -0
  35. package/dist/session/firestoreSync.test.js +142 -0
  36. package/dist/session/firestoreSync.test.js.map +1 -0
  37. package/dist/session/sessionCache.d.ts +37 -0
  38. package/dist/session/sessionCache.d.ts.map +1 -0
  39. package/dist/session/sessionCache.js +63 -0
  40. package/dist/session/sessionCache.js.map +1 -0
  41. package/dist/session/sessionCache.test.d.ts +2 -0
  42. package/dist/session/sessionCache.test.d.ts.map +1 -0
  43. package/dist/session/sessionCache.test.js +117 -0
  44. package/dist/session/sessionCache.test.js.map +1 -0
  45. package/dist/session/sessionService.d.ts +97 -0
  46. package/dist/session/sessionService.d.ts.map +1 -0
  47. package/dist/session/sessionService.js +311 -0
  48. package/dist/session/sessionService.js.map +1 -0
  49. package/dist/session/sessionService.test.d.ts +2 -0
  50. package/dist/session/sessionService.test.d.ts.map +1 -0
  51. package/dist/session/sessionService.test.js +426 -0
  52. package/dist/session/sessionService.test.js.map +1 -0
  53. package/dist/session/types.d.ts +7 -0
  54. package/dist/session/types.d.ts.map +1 -0
  55. package/dist/session/types.js +2 -0
  56. package/dist/session/types.js.map +1 -0
  57. package/dist/tokenVerifier/errors.d.ts +23 -0
  58. package/dist/tokenVerifier/errors.d.ts.map +1 -0
  59. package/dist/tokenVerifier/errors.js +34 -0
  60. package/dist/tokenVerifier/errors.js.map +1 -0
  61. package/dist/tokenVerifier/joseTokenVerifier.d.ts +24 -0
  62. package/dist/tokenVerifier/joseTokenVerifier.d.ts.map +1 -0
  63. package/dist/tokenVerifier/joseTokenVerifier.js +157 -0
  64. package/dist/tokenVerifier/joseTokenVerifier.js.map +1 -0
  65. package/dist/tokenVerifier/types.d.ts +41 -0
  66. package/dist/tokenVerifier/types.d.ts.map +1 -0
  67. package/dist/tokenVerifier/types.js +2 -0
  68. package/dist/tokenVerifier/types.js.map +1 -0
  69. package/dist/types/middleware.d.ts +33 -0
  70. package/dist/types/middleware.d.ts.map +1 -0
  71. package/dist/types/middleware.js +2 -0
  72. package/dist/types/middleware.js.map +1 -0
  73. package/dist/types/session.d.ts +7 -0
  74. package/dist/types/session.d.ts.map +1 -0
  75. package/dist/types/session.js +2 -0
  76. package/dist/types/session.js.map +1 -0
  77. package/package.json +36 -0
@@ -0,0 +1,157 @@
1
+ import * as jose from 'jose';
2
+ import fs from 'fs/promises';
3
+ import { TokenVerificationFailedError, TokenVerifierConfigurationError, } from './errors.js';
4
+ /**
5
+ * Default JWT token verifier implementation using jose library
6
+ * Supports JWKS URIs, static public keys, and skip verification mode
7
+ */
8
+ export class JoseTokenVerifier {
9
+ config;
10
+ logger;
11
+ jwksClient;
12
+ cachedPublicKey;
13
+ constructor(config, logger) {
14
+ this.config = config;
15
+ this.logger = logger;
16
+ // Validate configuration for production mode
17
+ if (!config.skipVerification && !config.publicKey && !config.jwksUri) {
18
+ throw new TokenVerifierConfigurationError('Either publicKey or jwksUri must be provided when skipVerification is false');
19
+ }
20
+ }
21
+ async verify(token, correlationId) {
22
+ if (this.config.skipVerification) {
23
+ // Development/test mode - return mock user
24
+ this.logger?.debug?.('JWT verification skipped - using mock user', {
25
+ event: 'jwt_verification_skipped',
26
+ mockUser: this.config.mockUser,
27
+ correlationId,
28
+ });
29
+ return (this.config.mockUser || {
30
+ sub: 'dev-user',
31
+ email: 'dev@example.com',
32
+ });
33
+ }
34
+ try {
35
+ // Decode JWT for logging
36
+ const payload = jose.decodeJwt(token);
37
+ const protectedHeader = jose.decodeProtectedHeader(token);
38
+ this.logger?.debug?.('JWT token decoded for verification', {
39
+ event: 'jwt_token_decoded',
40
+ header: {
41
+ alg: protectedHeader.alg,
42
+ typ: protectedHeader.typ,
43
+ kid: protectedHeader.kid, // Key ID - safe to log
44
+ },
45
+ payload: {
46
+ sub: payload.sub,
47
+ email: payload.email,
48
+ exp: payload.exp,
49
+ iat: payload.iat,
50
+ },
51
+ config: {
52
+ skipVerification: this.config.skipVerification,
53
+ publicKey: this.config.publicKey ? '[PROVIDED]' : undefined,
54
+ jwksUri: this.config.jwksUri,
55
+ issuer: this.config.issuer,
56
+ audience: this.config.audience,
57
+ },
58
+ correlationId,
59
+ });
60
+ }
61
+ catch (e) {
62
+ this.logger?.warn?.('Could not decode JWT token for logging - may be malformed', {
63
+ event: 'jwt_decode_failed',
64
+ error: e instanceof Error ? e.message : 'Unknown error',
65
+ correlationId,
66
+ });
67
+ }
68
+ try {
69
+ const key = await this.getVerificationKey(correlationId);
70
+ // TypeScript can't infer that the union type matches jwtVerify's expected type
71
+ // but both KeyLike and createRemoteJWKSet return value are valid
72
+ const { payload } = await jose.jwtVerify(token, key, {
73
+ issuer: this.config.issuer,
74
+ audience: this.config.audience,
75
+ });
76
+ this.logger?.info?.('JWT verification successful', {
77
+ event: 'jwt_verification_success',
78
+ userId: payload.sub,
79
+ email: payload.email,
80
+ correlationId,
81
+ });
82
+ return {
83
+ sub: payload.sub,
84
+ email: payload.email,
85
+ name: payload.name,
86
+ };
87
+ }
88
+ catch (error) {
89
+ // Handle expired token specifically
90
+ if (error instanceof jose.errors.JWTExpired) {
91
+ this.logger?.warn?.('JWT token has expired', {
92
+ event: 'jwt_token_expired',
93
+ error: error.message,
94
+ correlationId,
95
+ });
96
+ throw new TokenVerificationFailedError('Token has expired', true, error);
97
+ }
98
+ this.logger?.error?.('JWT verification failed', {
99
+ event: 'jwt_verification_failed',
100
+ error: {
101
+ name: error instanceof Error ? error.name : 'Unknown',
102
+ message: error instanceof Error ? error.message : 'Unknown error',
103
+ },
104
+ correlationId,
105
+ });
106
+ throw new TokenVerificationFailedError(`JWT verification failed: ${error.message}`, false, error instanceof Error ? error : undefined);
107
+ }
108
+ }
109
+ async getVerificationKey(correlationId) {
110
+ // Prefer static public key if provided
111
+ if (this.config.publicKey) {
112
+ if (!this.cachedPublicKey) {
113
+ this.logger?.debug?.('Loading static public key for JWT verification', {
114
+ event: 'jwt_static_key_loading',
115
+ keyType: this.config.publicKey.startsWith('file://') ? 'file' : 'inline',
116
+ correlationId,
117
+ });
118
+ let pem = this.config.publicKey;
119
+ // If value starts with file:// treat as path
120
+ if (pem.startsWith('file://')) {
121
+ const path = pem.replace('file://', '');
122
+ pem = await fs.readFile(path, 'utf-8');
123
+ }
124
+ this.cachedPublicKey = await jose.importSPKI(pem, 'RS256');
125
+ this.logger?.debug?.('Static public key loaded successfully', {
126
+ event: 'jwt_static_key_loaded',
127
+ correlationId,
128
+ });
129
+ }
130
+ return this.cachedPublicKey;
131
+ }
132
+ // Otherwise fallback to remote JWKS
133
+ if (!this.jwksClient) {
134
+ if (!this.config.jwksUri) {
135
+ throw new TokenVerifierConfigurationError('JWKS URI not configured');
136
+ }
137
+ this.logger?.debug?.('Creating remote JWKS client', {
138
+ event: 'jwt_jwks_client_created',
139
+ jwksUri: this.config.jwksUri,
140
+ correlationId,
141
+ });
142
+ this.jwksClient = jose.createRemoteJWKSet(new URL(this.config.jwksUri));
143
+ }
144
+ return this.jwksClient;
145
+ }
146
+ /**
147
+ * Clear cached keys (useful for testing or key rotation)
148
+ */
149
+ clearCache() {
150
+ this.jwksClient = undefined;
151
+ this.cachedPublicKey = undefined;
152
+ this.logger?.debug?.('JWT verification cache cleared', {
153
+ event: 'jwt_cache_cleared',
154
+ });
155
+ }
156
+ }
157
+ //# sourceMappingURL=joseTokenVerifier.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"joseTokenVerifier.js","sourceRoot":"","sources":["../../src/tokenVerifier/joseTokenVerifier.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,41 @@
1
+ /**
2
+ * Configuration for JWT token verification
3
+ */
4
+ export interface TokenVerifierConfig {
5
+ /**
6
+ * Skip verification (development/test mode only)
7
+ * When true, returns a mock user without verifying the token
8
+ */
9
+ skipVerification?: boolean;
10
+ /**
11
+ * Static public key in PEM format for JWT verification
12
+ * Can be provided inline or as a file path (prefix with 'file://')
13
+ * Example: 'file:///path/to/public-key.pem' or '-----BEGIN PUBLIC KEY-----\n...'
14
+ */
15
+ publicKey?: string;
16
+ /**
17
+ * JWKS (JSON Web Key Set) URI for remote key lookup
18
+ * Used for OAuth providers like Firebase, Auth0, etc.
19
+ * Example: 'https://www.googleapis.com/service_accounts/v1/jwk/...'
20
+ */
21
+ jwksUri?: string;
22
+ /**
23
+ * Expected JWT issuer (iss claim)
24
+ * If provided, tokens must have matching issuer
25
+ */
26
+ issuer?: string;
27
+ /**
28
+ * Expected JWT audience (aud claim)
29
+ * If provided, tokens must have matching audience
30
+ */
31
+ audience?: string;
32
+ /**
33
+ * Mock user to return when skipVerification is true
34
+ */
35
+ mockUser?: {
36
+ sub: string;
37
+ email?: string;
38
+ name?: string;
39
+ };
40
+ }
41
+ //# sourceMappingURL=types.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"types.d.ts","sourceRoot":"","sources":["../../src/tokenVerifier/types.ts"],"names":[],"mappings":"AAAA;;GAEG;AACH,MAAM,WAAW,mBAAmB;IAClC;;;OAGG;IACH,gBAAgB,CAAC,EAAE,OAAO,CAAC;IAE3B;;;;OAIG;IACH,SAAS,CAAC,EAAE,MAAM,CAAC;IAEnB;;;;OAIG;IACH,OAAO,CAAC,EAAE,MAAM,CAAC;IAEjB;;;OAGG;IACH,MAAM,CAAC,EAAE,MAAM,CAAC;IAEhB;;;OAGG;IACH,QAAQ,CAAC,EAAE,MAAM,CAAC;IAElB;;OAEG;IACH,QAAQ,CAAC,EAAE;QACT,GAAG,EAAE,MAAM,CAAC;QACZ,KAAK,CAAC,EAAE,MAAM,CAAC;QACf,IAAI,CAAC,EAAE,MAAM,CAAC;KACf,CAAC;CACH"}
@@ -0,0 +1,2 @@
1
+ export {};
2
+ //# sourceMappingURL=types.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"types.js","sourceRoot":"","sources":["../../src/tokenVerifier/types.ts"],"names":[],"mappings":""}
@@ -0,0 +1,33 @@
1
+ /**
2
+ * Interface for user token verifier
3
+ * Implementations should verify JWT tokens (signature, expiration, issuer, audience)
4
+ * and return the user information from the token payload.
5
+ *
6
+ * This is a generic interface that can be implemented by any project using this library.
7
+ * The implementation is provided via dependency injection to createAuthMiddleware().
8
+ */
9
+ export interface UserTokenVerifier {
10
+ verify(token: string, correlationId?: string): Promise<{
11
+ sub: string;
12
+ email?: string;
13
+ name?: string;
14
+ }>;
15
+ }
16
+ /**
17
+ * Interface for user token verification error
18
+ * Implementations should throw errors that match this interface
19
+ */
20
+ export interface UserTokenVerificationError extends Error {
21
+ isExpired?: boolean;
22
+ }
23
+ /**
24
+ * Logger interface (compatible with winston)
25
+ * Uses Record<string, unknown> for type-safe metadata
26
+ */
27
+ export interface Logger {
28
+ debug?: (message: string, meta?: Record<string, unknown>) => void;
29
+ info?: (message: string, meta?: Record<string, unknown>) => void;
30
+ warn?: (message: string, meta?: Record<string, unknown>) => void;
31
+ error?: (message: string, meta?: Record<string, unknown>) => void;
32
+ }
33
+ //# sourceMappingURL=middleware.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"middleware.d.ts","sourceRoot":"","sources":["../../src/types/middleware.ts"],"names":[],"mappings":"AAAA;;;;;;;GAOG;AACH,MAAM,WAAW,iBAAiB;IAChC,MAAM,CAAC,KAAK,EAAE,MAAM,EAAE,aAAa,CAAC,EAAE,MAAM,GAAG,OAAO,CAAC;QAAE,GAAG,EAAE,MAAM,CAAC;QAAC,KAAK,CAAC,EAAE,MAAM,CAAC;QAAC,IAAI,CAAC,EAAE,MAAM,CAAA;KAAE,CAAC,CAAC;CACxG;AAED;;;GAGG;AACH,MAAM,WAAW,0BAA2B,SAAQ,KAAK;IACvD,SAAS,CAAC,EAAE,OAAO,CAAC;CACrB;AAED;;;GAGG;AACH,MAAM,WAAW,MAAM;IACrB,KAAK,CAAC,EAAE,CAAC,OAAO,EAAE,MAAM,EAAE,IAAI,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,KAAK,IAAI,CAAC;IAClE,IAAI,CAAC,EAAE,CAAC,OAAO,EAAE,MAAM,EAAE,IAAI,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,KAAK,IAAI,CAAC;IACjE,IAAI,CAAC,EAAE,CAAC,OAAO,EAAE,MAAM,EAAE,IAAI,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,KAAK,IAAI,CAAC;IACjE,KAAK,CAAC,EAAE,CAAC,OAAO,EAAE,MAAM,EAAE,IAAI,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,KAAK,IAAI,CAAC;CACnE"}
@@ -0,0 +1,2 @@
1
+ export {};
2
+ //# sourceMappingURL=middleware.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"middleware.js","sourceRoot":"","sources":["../../src/types/middleware.ts"],"names":[],"mappings":""}
@@ -0,0 +1,7 @@
1
+ import type { SessionInfo } from '@rapidraptor/auth-shared';
2
+ /**
3
+ * Type alias for session storage maps
4
+ * Used for in-memory caches and write queues
5
+ */
6
+ export type SessionMap = Map<string, SessionInfo>;
7
+ //# sourceMappingURL=session.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"session.d.ts","sourceRoot":"","sources":["../../src/types/session.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,WAAW,EAAE,MAAM,0BAA0B,CAAC;AAE5D;;;GAGG;AACH,MAAM,MAAM,UAAU,GAAG,GAAG,CAAC,MAAM,EAAE,WAAW,CAAC,CAAC"}
@@ -0,0 +1,2 @@
1
+ export {};
2
+ //# sourceMappingURL=session.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"session.js","sourceRoot":"","sources":["../../src/types/session.ts"],"names":[],"mappings":""}
package/package.json ADDED
@@ -0,0 +1,36 @@
1
+ {
2
+ "name": "@rapidraptor/auth-server",
3
+ "version": "0.2.0",
4
+ "description": "Server-side authentication library for Node.js/Express applications",
5
+ "main": "./dist/index.js",
6
+ "types": "./dist/index.d.ts",
7
+ "files": [
8
+ "dist"
9
+ ],
10
+ "exports": {
11
+ ".": {
12
+ "types": "./dist/index.d.ts",
13
+ "default": "./dist/index.js"
14
+ }
15
+ },
16
+ "publishConfig": {
17
+ "access": "public"
18
+ },
19
+ "scripts": {
20
+ "build": "tsc",
21
+ "clean": "rm -rf dist",
22
+ "test": "vitest"
23
+ },
24
+ "dependencies": {
25
+ "@rapidraptor/auth-shared": "file:../shared",
26
+ "firebase-admin": "^12.0.0",
27
+ "jose": "^5.2.0"
28
+ },
29
+ "devDependencies": {
30
+ "@types/express": "^4.17.21",
31
+ "@types/node": "^20.12.12",
32
+ "express": "^4.19.2",
33
+ "typescript": "^5.4.5",
34
+ "vitest": "^1.6.1"
35
+ }
36
+ }