@kurdel/auth 0.1.0-beta.4 → 0.1.0-beta.6

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 (74) hide show
  1. package/README.md +28 -24
  2. package/lib/domain/auth-context.d.ts +16 -1
  3. package/lib/domain/auth-event-sink-provider.d.ts +10 -0
  4. package/lib/domain/auth-event.d.ts +34 -3
  5. package/lib/domain/auth-event.js +8 -1
  6. package/lib/domain/auth-event.js.map +1 -1
  7. package/lib/domain/auth-strategy-provider.d.ts +17 -0
  8. package/lib/domain/auth-strategy.d.ts +17 -7
  9. package/lib/domain/authorization-policy-composition.d.ts +20 -3
  10. package/lib/domain/authorization-policy-composition.js +24 -3
  11. package/lib/domain/authorization-policy-composition.js.map +1 -1
  12. package/lib/domain/authorization-policy-provider.d.ts +17 -0
  13. package/lib/domain/authorization-policy.d.ts +39 -3
  14. package/lib/domain/authorization-policy.js +8 -2
  15. package/lib/domain/authorization-policy.js.map +1 -1
  16. package/lib/domain/permission.d.ts +12 -2
  17. package/lib/domain/permission.js +16 -3
  18. package/lib/domain/permission.js.map +1 -1
  19. package/lib/infra/in-memory/in-memory-api-key-repository.d.ts +11 -1
  20. package/lib/infra/in-memory/in-memory-api-key-repository.js +11 -1
  21. package/lib/infra/in-memory/in-memory-api-key-repository.js.map +1 -1
  22. package/lib/infra/in-memory/in-memory-auth-user-repository.d.ts +11 -1
  23. package/lib/infra/in-memory/in-memory-auth-user-repository.js +11 -1
  24. package/lib/infra/in-memory/in-memory-auth-user-repository.js.map +1 -1
  25. package/lib/infra/in-memory/in-memory-jwt-repository.d.ts +5 -1
  26. package/lib/infra/in-memory/in-memory-jwt-repository.js +5 -1
  27. package/lib/infra/in-memory/in-memory-jwt-repository.js.map +1 -1
  28. package/lib/password/password-authentication-service.d.ts +29 -0
  29. package/lib/password/password-authentication-service.js +31 -1
  30. package/lib/password/password-authentication-service.js.map +1 -1
  31. package/lib/password/password-hasher.d.ts +18 -0
  32. package/lib/password/scrypt-password-hasher.d.ts +46 -1
  33. package/lib/password/scrypt-password-hasher.js +33 -1
  34. package/lib/password/scrypt-password-hasher.js.map +1 -1
  35. package/lib/repositories/api-key/api-key-repository.d.ts +22 -12
  36. package/lib/repositories/api-key/api-key-usage-recorder.d.ts +12 -1
  37. package/lib/repositories/jwt/jwt-repository.d.ts +7 -1
  38. package/lib/repositories/jwt/jwt-session-repository.d.ts +27 -3
  39. package/lib/repositories/password/password-credential-repository.d.ts +25 -1
  40. package/lib/repositories/user/auth-user-repository.d.ts +16 -4
  41. package/lib/runtime/auth-module.d.ts +32 -28
  42. package/lib/runtime/auth-module.js +26 -12
  43. package/lib/runtime/auth-module.js.map +1 -1
  44. package/lib/runtime/auth-strategy-registry.d.ts +24 -7
  45. package/lib/runtime/auth-strategy-registry.js +24 -7
  46. package/lib/runtime/auth-strategy-registry.js.map +1 -1
  47. package/lib/runtime/authorization-policy-registry.d.ts +35 -1
  48. package/lib/runtime/authorization-policy-registry.js +35 -1
  49. package/lib/runtime/authorization-policy-registry.js.map +1 -1
  50. package/lib/runtime/create-auth-middleware.d.ts +32 -0
  51. package/lib/runtime/create-auth-middleware.js +41 -2
  52. package/lib/runtime/create-auth-middleware.js.map +1 -1
  53. package/lib/strategies/api-key/api-key-strategy-provider.d.ts +18 -0
  54. package/lib/strategies/api-key/api-key-strategy-provider.js +30 -0
  55. package/lib/strategies/api-key/api-key-strategy-provider.js.map +1 -0
  56. package/lib/strategies/api-key/api-key-strategy.d.ts +39 -1
  57. package/lib/strategies/api-key/api-key-strategy.js +34 -1
  58. package/lib/strategies/api-key/api-key-strategy.js.map +1 -1
  59. package/lib/strategies/api-key/index.d.ts +1 -0
  60. package/lib/strategies/api-key/index.js +1 -0
  61. package/lib/strategies/api-key/index.js.map +1 -1
  62. package/lib/strategies/jwt/index.d.ts +1 -0
  63. package/lib/strategies/jwt/index.js +1 -0
  64. package/lib/strategies/jwt/index.js.map +1 -1
  65. package/lib/strategies/jwt/jwt-service.d.ts +61 -10
  66. package/lib/strategies/jwt/jwt-service.js +38 -9
  67. package/lib/strategies/jwt/jwt-service.js.map +1 -1
  68. package/lib/strategies/jwt/jwt-strategy-provider.d.ts +18 -0
  69. package/lib/strategies/jwt/jwt-strategy-provider.js +27 -0
  70. package/lib/strategies/jwt/jwt-strategy-provider.js.map +1 -0
  71. package/lib/strategies/jwt/jwt-strategy.d.ts +43 -4
  72. package/lib/strategies/jwt/jwt-strategy.js +26 -2
  73. package/lib/strategies/jwt/jwt-strategy.js.map +1 -1
  74. package/package.json +4 -4
@@ -2,15 +2,33 @@ import crypto from 'node:crypto';
2
2
  /**
3
3
  * ## JwtService
4
4
  *
5
- * Lightweight JWT (HS256) implementation with zero dependencies.
6
- * Provides signing, decoding and verification.
5
+ * Signs and verifies JSON Web Tokens using the HS256 algorithm.
6
+ *
7
+ * Responsibilities:
8
+ * - create signed JWT tokens
9
+ * - verify token integrity and registered claims
10
+ * - decode JWT payloads without verification when explicitly requested
11
+ *
12
+ * Guarantees:
13
+ * - every generated token is signed with the configured secret
14
+ * - verification validates the signature before returning claims
15
+ * - configured issuer, audience, and lifetime constraints are enforced
16
+ *
17
+ * Non-responsibilities:
18
+ * - user authentication
19
+ * - authorization
20
+ * - session persistence
21
+ * - key rotation
7
22
  */
8
23
  export class JwtService {
9
24
  constructor(opts) {
10
25
  this.opts = opts;
11
26
  }
12
27
  /**
13
- * Signs a new JWT token with the configured HS256 secret.
28
+ * Creates and signs a JWT.
29
+ *
30
+ * Standard claims (`iat`, `exp`, `iss`, `aud`) are populated
31
+ * automatically from the configured options.
14
32
  */
15
33
  sign(payload) {
16
34
  const header = { alg: 'HS256', typ: 'JWT' };
@@ -29,9 +47,11 @@ export class JwtService {
29
47
  return `${encodedHeader}.${encodedPayload}.${signature}`;
30
48
  }
31
49
  /**
32
- * Decodes the payload **without validating the signature**.
33
- * Useful for debugging or optional preview.
34
- */
50
+ * Decodes a JWT payload without verifying its signature.
51
+ *
52
+ * The returned payload must be treated as untrusted until
53
+ * {@link verify} succeeds.
54
+ */
35
55
  decode(token) {
36
56
  const parts = token.split('.');
37
57
  if (parts.length !== 3)
@@ -44,8 +64,18 @@ export class JwtService {
44
64
  }
45
65
  }
46
66
  /**
47
- * Verifies signature + exp/nbf/iss/aud constraints.
48
- * Returns the decoded payload or throws an Error.
67
+ * Verifies a JWT and returns its decoded payload.
68
+ *
69
+ * Validation includes:
70
+ * - signature
71
+ * - expiration (`exp`)
72
+ * - not-before (`nbf`)
73
+ * - issuer (`iss`) when configured
74
+ * - audience (`aud`) when configured
75
+ *
76
+ * @throws Error
77
+ * If the token is malformed, has an invalid signature,
78
+ * or violates any configured validation constraint.
49
79
  */
50
80
  verify(token) {
51
81
  const parts = token.split('.');
@@ -73,7 +103,6 @@ export class JwtService {
73
103
  }
74
104
  return payload;
75
105
  }
76
- // ─────────────────────────────────────────────
77
106
  b64(str) {
78
107
  return Buffer.from(str).toString('base64url');
79
108
  }
@@ -1 +1 @@
1
- {"version":3,"file":"jwt-service.js","sourceRoot":"","sources":["../../../src/strategies/jwt/jwt-service.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"jwt-service.js","sourceRoot":"","sources":["../../../src/strategies/jwt/jwt-service.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,18 @@
1
+ import type { AuthStrategyProvider } from '../../domain/auth-strategy-provider.js';
2
+ import type { JwtSessionRepository } from '../../repositories/jwt/jwt-session-repository.js';
3
+ import { type JwtStrategyOptions } from './jwt-strategy.js';
4
+ /** Declarative options for the built-in JWT strategy provider. */
5
+ export type JwtStrategyProviderOptions = Omit<JwtStrategyOptions, 'sessions'> & {
6
+ /**
7
+ * Enables server-side session validation or supplies a custom repository.
8
+ * Set to `true` to resolve the registered repository from the container.
9
+ */
10
+ sessions?: boolean | JwtSessionRepository;
11
+ };
12
+ /**
13
+ * Creates a DI-backed JWT authentication strategy provider.
14
+ *
15
+ * The application only declares transport and session behavior. Framework
16
+ * services and the current-user repository are resolved from the container.
17
+ */
18
+ export declare function jwtStrategy(options?: JwtStrategyProviderOptions): AuthStrategyProvider;
@@ -0,0 +1,27 @@
1
+ import { AUTH_TOKENS } from '../../tokens.js';
2
+ import { JwtStrategy } from './jwt-strategy.js';
3
+ /**
4
+ * Creates a DI-backed JWT authentication strategy provider.
5
+ *
6
+ * The application only declares transport and session behavior. Framework
7
+ * services and the current-user repository are resolved from the container.
8
+ */
9
+ export function jwtStrategy(options = {}) {
10
+ return {
11
+ name: 'jwt',
12
+ useFactory(container) {
13
+ const { sessions, ...strategyOptions } = options;
14
+ return new JwtStrategy(container.get(AUTH_TOKENS.JwtService), container.get(AUTH_TOKENS.UserRepository), {
15
+ ...strategyOptions,
16
+ ...(sessions
17
+ ? {
18
+ sessions: sessions === true
19
+ ? container.get(AUTH_TOKENS.JwtSessionRepository)
20
+ : sessions,
21
+ }
22
+ : {}),
23
+ });
24
+ },
25
+ };
26
+ }
27
+ //# sourceMappingURL=jwt-strategy-provider.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"jwt-strategy-provider.js","sourceRoot":"","sources":["../../../src/strategies/jwt/jwt-strategy-provider.ts"],"names":[],"mappings":"AAIA,OAAO,EAAE,WAAW,EAAE,MAAM,iBAAiB,CAAC;AAC9C,OAAO,EAAE,WAAW,EAA2B,MAAM,mBAAmB,CAAC;AAWzE;;;;;GAKG;AACH,MAAM,UAAU,WAAW,CACzB,UAAsC,EAAE;IAExC,OAAO;QACL,IAAI,EAAE,KAAK;QACX,UAAU,CAAC,SAAoB;YAC7B,MAAM,EAAE,QAAQ,EAAE,GAAG,eAAe,EAAE,GAAG,OAAO,CAAC;YACjD,OAAO,IAAI,WAAW,CACpB,SAAS,CAAC,GAAG,CAAC,WAAW,CAAC,UAAU,CAAC,EACrC,SAAS,CAAC,GAAG,CAAC,WAAW,CAAC,cAAc,CAAC,EACzC;gBACE,GAAG,eAAe;gBAClB,GAAG,CAAC,QAAQ;oBACV,CAAC,CAAC;wBACE,QAAQ,EAAE,QAAQ,KAAK,IAAI;4BACzB,CAAC,CAAC,SAAS,CAAC,GAAG,CAAC,WAAW,CAAC,oBAAoB,CAAC;4BACjD,CAAC,CAAC,QAAQ;qBACb;oBACH,CAAC,CAAC,EAAE,CAAC;aACR,CACF,CAAC;QACJ,CAAC;KACF,CAAC;AACJ,CAAC"}
@@ -5,19 +5,51 @@ import type { JwtService } from '../../strategies/index.js';
5
5
  /**
6
6
  * ## JwtStrategyOptions
7
7
  *
8
- * Configures how the strategy extracts and validates JWT tokens.
8
+ * Configures JWT authentication.
9
9
  */
10
10
  export interface JwtStrategyOptions {
11
+ /**
12
+ * Request header containing the JWT.
13
+ *
14
+ * @default "authorization"
15
+ */
11
16
  header?: string;
17
+ /**
18
+ * Authentication scheme expected in the header.
19
+ *
20
+ * @default "Bearer"
21
+ */
12
22
  prefix?: string;
13
- /** When configured, every token must reference an active session through `jti`. */
23
+ /**
24
+ * Optional repository for server-side session validation.
25
+ *
26
+ * When configured, every JWT must reference an active session
27
+ * through its `jti` claim.
28
+ */
14
29
  sessions?: JwtSessionRepository;
15
30
  }
16
31
  /**
17
32
  * ## JwtStrategy
18
33
  *
19
- * Authentication strategy that validates a JWT token from
20
- * the HttpRequest and returns an AuthUser.
34
+ * Authenticates requests using JSON Web Tokens.
35
+ *
36
+ * Responsibilities:
37
+ * - extract a JWT from the configured request header
38
+ * - verify the token signature and claims
39
+ * - optionally validate the referenced server-side session
40
+ * - resolve the current authenticated user
41
+ *
42
+ * Guarantees:
43
+ * - invalid tokens never authenticate
44
+ * - revoked or expired sessions never authenticate
45
+ * - inactive or missing users never authenticate
46
+ * - verified JWT claims are exposed through the authentication result
47
+ *
48
+ * Non-responsibilities:
49
+ * - JWT creation
50
+ * - session persistence
51
+ * - authorization policy evaluation
52
+ * - user management
21
53
  */
22
54
  export declare class JwtStrategy implements AuthStrategy {
23
55
  private readonly service;
@@ -26,5 +58,12 @@ export declare class JwtStrategy implements AuthStrategy {
26
58
  private readonly prefix;
27
59
  private readonly sessions?;
28
60
  constructor(service: JwtService, users: AuthUserRepository, opts?: JwtStrategyOptions);
61
+ /**
62
+ * Authenticates a request using the configured JWT header.
63
+ *
64
+ * Returns `null` when the token is missing, malformed, invalid,
65
+ * references a revoked or expired session, or its associated
66
+ * user cannot be authenticated.
67
+ */
29
68
  authenticate(req: HttpRequest): Promise<AuthenticationResult | null>;
30
69
  }
@@ -1,8 +1,25 @@
1
1
  /**
2
2
  * ## JwtStrategy
3
3
  *
4
- * Authentication strategy that validates a JWT token from
5
- * the HttpRequest and returns an AuthUser.
4
+ * Authenticates requests using JSON Web Tokens.
5
+ *
6
+ * Responsibilities:
7
+ * - extract a JWT from the configured request header
8
+ * - verify the token signature and claims
9
+ * - optionally validate the referenced server-side session
10
+ * - resolve the current authenticated user
11
+ *
12
+ * Guarantees:
13
+ * - invalid tokens never authenticate
14
+ * - revoked or expired sessions never authenticate
15
+ * - inactive or missing users never authenticate
16
+ * - verified JWT claims are exposed through the authentication result
17
+ *
18
+ * Non-responsibilities:
19
+ * - JWT creation
20
+ * - session persistence
21
+ * - authorization policy evaluation
22
+ * - user management
6
23
  */
7
24
  export class JwtStrategy {
8
25
  constructor(service, users, opts = {}) {
@@ -12,6 +29,13 @@ export class JwtStrategy {
12
29
  this.prefix = (opts.prefix ?? 'Bearer').toLowerCase();
13
30
  this.sessions = opts.sessions;
14
31
  }
32
+ /**
33
+ * Authenticates a request using the configured JWT header.
34
+ *
35
+ * Returns `null` when the token is missing, malformed, invalid,
36
+ * references a revoked or expired session, or its associated
37
+ * user cannot be authenticated.
38
+ */
15
39
  async authenticate(req) {
16
40
  const raw = req.headers?.[this.header];
17
41
  if (!raw)
@@ -1 +1 @@
1
- {"version":3,"file":"jwt-strategy.js","sourceRoot":"","sources":["../../../src/strategies/jwt/jwt-strategy.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"jwt-strategy.js","sourceRoot":"","sources":["../../../src/strategies/jwt/jwt-strategy.ts"],"names":[],"mappings":"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"}
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@kurdel/auth",
3
- "version": "0.1.0-beta.4",
3
+ "version": "0.1.0-beta.6",
4
4
  "description": "Authentication and authorization primitives for Kurdel applications",
5
5
  "type": "module",
6
6
  "exports": {
@@ -49,8 +49,8 @@
49
49
  "tsc-alias": "^1.8.16"
50
50
  },
51
51
  "dependencies": {
52
- "@kurdel/common": "0.1.0-beta.4",
53
- "@kurdel/core": "0.1.0-beta.4",
54
- "@kurdel/ioc": "0.1.0-beta.4"
52
+ "@kurdel/common": "0.1.0-beta.6",
53
+ "@kurdel/core": "0.1.0-beta.6",
54
+ "@kurdel/ioc": "0.1.0-beta.6"
55
55
  }
56
56
  }