@shohaghinfo/aerojs 0.2.0 → 0.4.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 (125) hide show
  1. package/AGENTS.md +226 -0
  2. package/README.md +250 -0
  3. package/dist/auth/index.d.ts +1 -0
  4. package/dist/auth/index.d.ts.map +1 -1
  5. package/dist/auth/index.js +1 -0
  6. package/dist/auth/index.js.map +1 -1
  7. package/dist/auth/oauth/github-driver.d.ts +16 -0
  8. package/dist/auth/oauth/github-driver.d.ts.map +1 -0
  9. package/dist/auth/oauth/github-driver.js +79 -0
  10. package/dist/auth/oauth/github-driver.js.map +1 -0
  11. package/dist/auth/oauth/google-driver.d.ts +16 -0
  12. package/dist/auth/oauth/google-driver.d.ts.map +1 -0
  13. package/dist/auth/oauth/google-driver.js +63 -0
  14. package/dist/auth/oauth/google-driver.js.map +1 -0
  15. package/dist/auth/oauth/index.d.ts +9 -0
  16. package/dist/auth/oauth/index.d.ts.map +1 -0
  17. package/dist/auth/oauth/index.js +9 -0
  18. package/dist/auth/oauth/index.js.map +1 -0
  19. package/dist/auth/oauth/oauth-driver.d.ts +35 -0
  20. package/dist/auth/oauth/oauth-driver.d.ts.map +1 -0
  21. package/dist/auth/oauth/oauth-driver.js +6 -0
  22. package/dist/auth/oauth/oauth-driver.js.map +1 -0
  23. package/dist/auth/oauth/oauth-manager.d.ts +26 -0
  24. package/dist/auth/oauth/oauth-manager.d.ts.map +1 -0
  25. package/dist/auth/oauth/oauth-manager.js +86 -0
  26. package/dist/auth/oauth/oauth-manager.js.map +1 -0
  27. package/dist/cli/commands/make.d.ts +5 -0
  28. package/dist/cli/commands/make.d.ts.map +1 -1
  29. package/dist/cli/commands/make.js +119 -0
  30. package/dist/cli/commands/make.js.map +1 -1
  31. package/dist/cli/runner.d.ts.map +1 -1
  32. package/dist/cli/runner.js +56 -1
  33. package/dist/cli/runner.js.map +1 -1
  34. package/dist/core/application.d.ts +15 -0
  35. package/dist/core/application.d.ts.map +1 -1
  36. package/dist/core/application.js +25 -0
  37. package/dist/core/application.js.map +1 -1
  38. package/dist/core/context.d.ts +5 -0
  39. package/dist/core/context.d.ts.map +1 -1
  40. package/dist/core/context.js +11 -0
  41. package/dist/core/context.js.map +1 -1
  42. package/dist/database/connection.d.ts +32 -0
  43. package/dist/database/connection.d.ts.map +1 -1
  44. package/dist/database/connection.js +51 -0
  45. package/dist/database/connection.js.map +1 -1
  46. package/dist/database/index.d.ts +1 -1
  47. package/dist/database/index.d.ts.map +1 -1
  48. package/dist/database/index.js +1 -1
  49. package/dist/database/index.js.map +1 -1
  50. package/dist/database/model.d.ts +16 -0
  51. package/dist/database/model.d.ts.map +1 -1
  52. package/dist/database/model.js +91 -13
  53. package/dist/database/model.js.map +1 -1
  54. package/dist/database/query-builder.d.ts +18 -0
  55. package/dist/database/query-builder.d.ts.map +1 -1
  56. package/dist/database/query-builder.js +82 -30
  57. package/dist/database/query-builder.js.map +1 -1
  58. package/dist/index.d.ts +3 -2
  59. package/dist/index.d.ts.map +1 -1
  60. package/dist/index.js +3 -2
  61. package/dist/index.js.map +1 -1
  62. package/dist/notifications/index.d.ts +7 -0
  63. package/dist/notifications/index.d.ts.map +1 -0
  64. package/dist/notifications/index.js +7 -0
  65. package/dist/notifications/index.js.map +1 -0
  66. package/dist/notifications/notification-manager.d.ts +39 -0
  67. package/dist/notifications/notification-manager.d.ts.map +1 -0
  68. package/dist/notifications/notification-manager.js +130 -0
  69. package/dist/notifications/notification-manager.js.map +1 -0
  70. package/dist/notifications/notification.d.ts +48 -0
  71. package/dist/notifications/notification.d.ts.map +1 -0
  72. package/dist/notifications/notification.js +9 -0
  73. package/dist/notifications/notification.js.map +1 -0
  74. package/dist/queue/dashboard.d.ts +30 -0
  75. package/dist/queue/dashboard.d.ts.map +1 -0
  76. package/dist/queue/dashboard.js +371 -0
  77. package/dist/queue/dashboard.js.map +1 -0
  78. package/dist/queue/index.d.ts +1 -0
  79. package/dist/queue/index.d.ts.map +1 -1
  80. package/dist/queue/index.js +1 -0
  81. package/dist/queue/index.js.map +1 -1
  82. package/dist/queue/queue-manager.d.ts +31 -1
  83. package/dist/queue/queue-manager.d.ts.map +1 -1
  84. package/dist/queue/queue-manager.js +60 -0
  85. package/dist/queue/queue-manager.js.map +1 -1
  86. package/dist/queue/worker.d.ts +3 -0
  87. package/dist/queue/worker.d.ts.map +1 -1
  88. package/dist/queue/worker.js +9 -0
  89. package/dist/queue/worker.js.map +1 -1
  90. package/dist/security/encryption.d.ts +60 -0
  91. package/dist/security/encryption.d.ts.map +1 -0
  92. package/dist/security/encryption.js +120 -0
  93. package/dist/security/encryption.js.map +1 -0
  94. package/dist/security/fingerprint.d.ts +47 -0
  95. package/dist/security/fingerprint.d.ts.map +1 -0
  96. package/dist/security/fingerprint.js +83 -0
  97. package/dist/security/fingerprint.js.map +1 -0
  98. package/dist/security/index.d.ts +3 -0
  99. package/dist/security/index.d.ts.map +1 -1
  100. package/dist/security/index.js +3 -0
  101. package/dist/security/index.js.map +1 -1
  102. package/dist/security/signed-url.d.ts +29 -0
  103. package/dist/security/signed-url.d.ts.map +1 -0
  104. package/dist/security/signed-url.js +86 -0
  105. package/dist/security/signed-url.js.map +1 -0
  106. package/dist/session/cookie-session-driver.d.ts +34 -0
  107. package/dist/session/cookie-session-driver.d.ts.map +1 -0
  108. package/dist/session/cookie-session-driver.js +57 -0
  109. package/dist/session/cookie-session-driver.js.map +1 -0
  110. package/dist/session/index.d.ts +8 -0
  111. package/dist/session/index.d.ts.map +1 -0
  112. package/dist/session/index.js +8 -0
  113. package/dist/session/index.js.map +1 -0
  114. package/dist/session/session-manager.d.ts.map +1 -1
  115. package/dist/session/session-manager.js +7 -2
  116. package/dist/session/session-manager.js.map +1 -1
  117. package/dist/storage/drivers/local-driver.d.ts +1 -0
  118. package/dist/storage/drivers/local-driver.d.ts.map +1 -1
  119. package/dist/storage/drivers/local-driver.js +5 -0
  120. package/dist/storage/drivers/local-driver.js.map +1 -1
  121. package/dist/storage/drivers/memory-driver.d.ts +1 -0
  122. package/dist/storage/drivers/memory-driver.d.ts.map +1 -1
  123. package/dist/storage/drivers/memory-driver.js +5 -0
  124. package/dist/storage/drivers/memory-driver.js.map +1 -1
  125. package/package.json +9 -1
@@ -0,0 +1,60 @@
1
+ /**
2
+ * @file encryption.ts
3
+ * @description Enterprise-grade authenticated encryption (AES-256-GCM) for AeroJS.
4
+ * Supports transparent model field encryption, arbitrary object encryption, and secure key derivation.
5
+ */
6
+ export interface EncrypterOptions {
7
+ key?: string;
8
+ cipher?: string;
9
+ }
10
+ export declare class Encrypter {
11
+ private keyBuffer;
12
+ readonly cipher: string;
13
+ private static defaultInstance?;
14
+ constructor(key?: string);
15
+ /**
16
+ * Generates a cryptographically random 32-byte key encoded as a hex string.
17
+ */
18
+ static generateKey(): string;
19
+ /**
20
+ * Normalizes any key string into a 32-byte Buffer.
21
+ */
22
+ static normalizeKey(key: string): Buffer;
23
+ /**
24
+ * Encrypts any serializable value (string, object, number, boolean) using AES-256-GCM.
25
+ * Returns a compact token formatted as `aero:enc:<iv>:<authTag>:<ciphertext>`.
26
+ */
27
+ encrypt(value: unknown): string;
28
+ /**
29
+ * Decrypts an AES-256-GCM encrypted payload produced by `encrypt`.
30
+ */
31
+ decrypt<T = any>(payload: string): T;
32
+ /**
33
+ * Encrypts a string directly.
34
+ */
35
+ encryptString(text: string): string;
36
+ /**
37
+ * Decrypts an encrypted string directly.
38
+ */
39
+ decryptString(payload: string): string;
40
+ /**
41
+ * Checks whether a value is an encrypted payload string.
42
+ */
43
+ static isEncrypted(value: unknown): boolean;
44
+ /**
45
+ * Returns the shared singleton instance.
46
+ */
47
+ static getInstance(): Encrypter;
48
+ }
49
+ /**
50
+ * Global Crypt facade for easy application-wide encryption and decryption.
51
+ */
52
+ export declare const Crypt: {
53
+ encrypt: (value: unknown, key?: string) => string;
54
+ decrypt: <T = any>(payload: string, key?: string) => T;
55
+ encryptString: (text: string, key?: string) => string;
56
+ decryptString: (payload: string, key?: string) => string;
57
+ generateKey: () => string;
58
+ isEncrypted: (value: unknown) => boolean;
59
+ };
60
+ //# sourceMappingURL=encryption.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"encryption.d.ts","sourceRoot":"","sources":["../../src/security/encryption.ts"],"names":[],"mappings":"AAAA;;;;GAIG;AAIH,MAAM,WAAW,gBAAgB;IAC/B,GAAG,CAAC,EAAE,MAAM,CAAC;IACb,MAAM,CAAC,EAAE,MAAM,CAAC;CACjB;AAED,qBAAa,SAAS;IACpB,OAAO,CAAC,SAAS,CAAS;IAC1B,SAAgB,MAAM,EAAE,MAAM,CAAiB;IAC/C,OAAO,CAAC,MAAM,CAAC,eAAe,CAAC,CAAY;gBAE/B,GAAG,CAAC,EAAE,MAAM;IAKxB;;OAEG;WACW,WAAW,IAAI,MAAM;IAInC;;OAEG;WACW,YAAY,CAAC,GAAG,EAAE,MAAM,GAAG,MAAM;IAe/C;;;OAGG;IACI,OAAO,CAAC,KAAK,EAAE,OAAO,GAAG,MAAM;IAYtC;;OAEG;IACI,OAAO,CAAC,CAAC,GAAG,GAAG,EAAE,OAAO,EAAE,MAAM,GAAG,CAAC;IAuB3C;;OAEG;IACI,aAAa,CAAC,IAAI,EAAE,MAAM,GAAG,MAAM;IAI1C;;OAEG;IACI,aAAa,CAAC,OAAO,EAAE,MAAM,GAAG,MAAM;IAI7C;;OAEG;WACW,WAAW,CAAC,KAAK,EAAE,OAAO,GAAG,OAAO;IAIlD;;OAEG;WACW,WAAW,IAAI,SAAS;CAMvC;AAED;;GAEG;AACH,eAAO,MAAM,KAAK;qBACC,OAAO,QAAQ,MAAM,KAAG,MAAM;cAGrC,CAAC,iBAAiB,MAAM,QAAQ,MAAM,KAAG,CAAC;0BAG9B,MAAM,QAAQ,MAAM,KAAG,MAAM;6BAG1B,MAAM,QAAQ,MAAM,KAAG,MAAM;uBAGrC,MAAM;yBACF,OAAO,KAAG,OAAO;CACvC,CAAC"}
@@ -0,0 +1,120 @@
1
+ /**
2
+ * @file encryption.ts
3
+ * @description Enterprise-grade authenticated encryption (AES-256-GCM) for AeroJS.
4
+ * Supports transparent model field encryption, arbitrary object encryption, and secure key derivation.
5
+ */
6
+ import * as crypto from 'node:crypto';
7
+ export class Encrypter {
8
+ keyBuffer;
9
+ cipher = 'aes-256-gcm';
10
+ static defaultInstance;
11
+ constructor(key) {
12
+ const rawKey = key || process.env['APP_KEY'] || process.env['AERO_KEY'] || 'aerojs-default-encryption-secret-key-32bytes!';
13
+ this.keyBuffer = Encrypter.normalizeKey(rawKey);
14
+ }
15
+ /**
16
+ * Generates a cryptographically random 32-byte key encoded as a hex string.
17
+ */
18
+ static generateKey() {
19
+ return crypto.randomBytes(32).toString('hex');
20
+ }
21
+ /**
22
+ * Normalizes any key string into a 32-byte Buffer.
23
+ */
24
+ static normalizeKey(key) {
25
+ if (key.startsWith('base64:')) {
26
+ const buf = Buffer.from(key.slice(7), 'base64');
27
+ if (buf.length === 32)
28
+ return buf;
29
+ }
30
+ // If it's a 64-char hex string
31
+ if (/^[0-9a-fA-F]{64}$/.test(key)) {
32
+ return Buffer.from(key, 'hex');
33
+ }
34
+ const buf = Buffer.from(key, 'utf8');
35
+ if (buf.length === 32)
36
+ return buf;
37
+ // Otherwise hash to 32 bytes with SHA-256
38
+ return crypto.createHash('sha256').update(key).digest();
39
+ }
40
+ /**
41
+ * Encrypts any serializable value (string, object, number, boolean) using AES-256-GCM.
42
+ * Returns a compact token formatted as `aero:enc:<iv>:<authTag>:<ciphertext>`.
43
+ */
44
+ encrypt(value) {
45
+ const serialized = JSON.stringify(value);
46
+ const iv = crypto.randomBytes(12); // standard 96-bit IV
47
+ const cipher = crypto.createCipheriv(this.cipher, this.keyBuffer, iv);
48
+ let encrypted = cipher.update(serialized, 'utf8', 'hex');
49
+ encrypted += cipher.final('hex');
50
+ const authTag = cipher.getAuthTag().toString('hex');
51
+ return `aero:enc:${iv.toString('hex')}:${authTag}:${encrypted}`;
52
+ }
53
+ /**
54
+ * Decrypts an AES-256-GCM encrypted payload produced by `encrypt`.
55
+ */
56
+ decrypt(payload) {
57
+ if (!Encrypter.isEncrypted(payload)) {
58
+ throw new Error('Invalid encryption payload: missing aero:enc prefix');
59
+ }
60
+ const parts = payload.slice(9).split(':');
61
+ if (parts.length !== 3) {
62
+ throw new Error('Invalid encryption payload format. Expected iv:authTag:ciphertext');
63
+ }
64
+ const [ivHex, authTagHex, encryptedHex] = parts;
65
+ const iv = Buffer.from(ivHex, 'hex');
66
+ const authTag = Buffer.from(authTagHex, 'hex');
67
+ const decipher = crypto.createDecipheriv(this.cipher, this.keyBuffer, iv, { authTagLength: 16 });
68
+ decipher.setAuthTag(authTag);
69
+ let decrypted = decipher.update(encryptedHex, 'hex', 'utf8');
70
+ decrypted += decipher.final('utf8');
71
+ return JSON.parse(decrypted);
72
+ }
73
+ /**
74
+ * Encrypts a string directly.
75
+ */
76
+ encryptString(text) {
77
+ return this.encrypt(text);
78
+ }
79
+ /**
80
+ * Decrypts an encrypted string directly.
81
+ */
82
+ decryptString(payload) {
83
+ return this.decrypt(payload);
84
+ }
85
+ /**
86
+ * Checks whether a value is an encrypted payload string.
87
+ */
88
+ static isEncrypted(value) {
89
+ return typeof value === 'string' && value.startsWith('aero:enc:');
90
+ }
91
+ /**
92
+ * Returns the shared singleton instance.
93
+ */
94
+ static getInstance() {
95
+ if (!this.defaultInstance) {
96
+ this.defaultInstance = new Encrypter();
97
+ }
98
+ return this.defaultInstance;
99
+ }
100
+ }
101
+ /**
102
+ * Global Crypt facade for easy application-wide encryption and decryption.
103
+ */
104
+ export const Crypt = {
105
+ encrypt: (value, key) => {
106
+ return key ? new Encrypter(key).encrypt(value) : Encrypter.getInstance().encrypt(value);
107
+ },
108
+ decrypt: (payload, key) => {
109
+ return key ? new Encrypter(key).decrypt(payload) : Encrypter.getInstance().decrypt(payload);
110
+ },
111
+ encryptString: (text, key) => {
112
+ return key ? new Encrypter(key).encryptString(text) : Encrypter.getInstance().encryptString(text);
113
+ },
114
+ decryptString: (payload, key) => {
115
+ return key ? new Encrypter(key).decryptString(payload) : Encrypter.getInstance().decryptString(payload);
116
+ },
117
+ generateKey: () => Encrypter.generateKey(),
118
+ isEncrypted: (value) => Encrypter.isEncrypted(value),
119
+ };
120
+ //# sourceMappingURL=encryption.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"encryption.js","sourceRoot":"","sources":["../../src/security/encryption.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,47 @@
1
+ /**
2
+ * @file fingerprint.ts
3
+ * @description Client Request Fingerprinting and Anti-Session Hijacking protection for AeroJS.
4
+ * Computes deterministic cryptographic hashes of client browser, network, and header signatures.
5
+ */
6
+ import type { AeroContext } from '../core/context.js';
7
+ import type { Middleware } from '../core/types.js';
8
+ export interface FingerprintOptions {
9
+ /**
10
+ * Include client IP address in fingerprint. Default: true.
11
+ */
12
+ ip?: boolean;
13
+ /**
14
+ * Include User-Agent header. Default: true.
15
+ */
16
+ userAgent?: boolean;
17
+ /**
18
+ * Include Accept-Language header. Default: true.
19
+ */
20
+ acceptLanguage?: boolean;
21
+ /**
22
+ * Custom application salt for the hash.
23
+ */
24
+ salt?: string;
25
+ /**
26
+ * Additional header names to include in the signature.
27
+ */
28
+ additionalHeaders?: string[];
29
+ }
30
+ export declare class RequestFingerprint {
31
+ /**
32
+ * Generates a deterministic SHA-256 fingerprint hash of the request client traits.
33
+ */
34
+ static generate(ctx: AeroContext, options?: FingerprintOptions): string;
35
+ /**
36
+ * Verifies whether an incoming request matches the expected fingerprint hash.
37
+ */
38
+ static verify(ctx: AeroContext, expectedFingerprint: string, options?: FingerprintOptions): boolean;
39
+ }
40
+ /**
41
+ * Middleware that binds client fingerprinting to AeroContext and validates session integrity.
42
+ * If session hijacking is detected (mismatched device fingerprint), access is rejected with 401.
43
+ */
44
+ export declare function fingerprintGuard(options?: FingerprintOptions & {
45
+ onMismatch?: (ctx: AeroContext) => void | Promise<void>;
46
+ }): Middleware;
47
+ //# sourceMappingURL=fingerprint.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"fingerprint.d.ts","sourceRoot":"","sources":["../../src/security/fingerprint.ts"],"names":[],"mappings":"AAAA;;;;GAIG;AAGH,OAAO,KAAK,EAAE,WAAW,EAAE,MAAM,oBAAoB,CAAC;AACtD,OAAO,KAAK,EAAE,UAAU,EAAE,MAAM,kBAAkB,CAAC;AAEnD,MAAM,WAAW,kBAAkB;IACjC;;OAEG;IACH,EAAE,CAAC,EAAE,OAAO,CAAC;IACb;;OAEG;IACH,SAAS,CAAC,EAAE,OAAO,CAAC;IACpB;;OAEG;IACH,cAAc,CAAC,EAAE,OAAO,CAAC;IACzB;;OAEG;IACH,IAAI,CAAC,EAAE,MAAM,CAAC;IACd;;OAEG;IACH,iBAAiB,CAAC,EAAE,MAAM,EAAE,CAAC;CAC9B;AAED,qBAAa,kBAAkB;IAC7B;;OAEG;WACW,QAAQ,CAAC,GAAG,EAAE,WAAW,EAAE,OAAO,GAAE,kBAAuB,GAAG,MAAM;IAsClF;;OAEG;WACW,MAAM,CAAC,GAAG,EAAE,WAAW,EAAE,mBAAmB,EAAE,MAAM,EAAE,OAAO,GAAE,kBAAuB,GAAG,OAAO;CAK/G;AAED;;;GAGG;AACH,wBAAgB,gBAAgB,CAAC,OAAO,GAAE,kBAAkB,GAAG;IAC7D,UAAU,CAAC,EAAE,CAAC,GAAG,EAAE,WAAW,KAAK,IAAI,GAAG,OAAO,CAAC,IAAI,CAAC,CAAC;CACpD,GAAG,UAAU,CA2BlB"}
@@ -0,0 +1,83 @@
1
+ /**
2
+ * @file fingerprint.ts
3
+ * @description Client Request Fingerprinting and Anti-Session Hijacking protection for AeroJS.
4
+ * Computes deterministic cryptographic hashes of client browser, network, and header signatures.
5
+ */
6
+ import * as crypto from 'node:crypto';
7
+ export class RequestFingerprint {
8
+ /**
9
+ * Generates a deterministic SHA-256 fingerprint hash of the request client traits.
10
+ */
11
+ static generate(ctx, options = {}) {
12
+ const includeIp = options.ip !== false;
13
+ const includeUa = options.userAgent !== false;
14
+ const includeLang = options.acceptLanguage !== false;
15
+ const salt = options.salt || 'aero-fingerprint-salt';
16
+ const components = [];
17
+ if (includeUa) {
18
+ const ua = ctx.req.headers['user-agent'];
19
+ components.push(Array.isArray(ua) ? ua.join(',') : ua || 'unknown-ua');
20
+ }
21
+ if (includeLang) {
22
+ const lang = ctx.req.headers['accept-language'];
23
+ components.push(Array.isArray(lang) ? lang.join(',') : lang || 'unknown-lang');
24
+ }
25
+ if (includeIp) {
26
+ // Resolve client IP from headers or request IP
27
+ const forwarded = ctx.req.headers['x-forwarded-for'];
28
+ const rawIp = typeof forwarded === 'string'
29
+ ? forwarded.split(',')[0]?.trim()
30
+ : (ctx.ip || ctx.req.raw?.socket?.remoteAddress || '127.0.0.1');
31
+ components.push(rawIp || '127.0.0.1');
32
+ }
33
+ if (options.additionalHeaders) {
34
+ for (const h of options.additionalHeaders) {
35
+ const val = ctx.req.headers[h.toLowerCase()];
36
+ components.push(Array.isArray(val) ? val.join(',') : val || '');
37
+ }
38
+ }
39
+ const payload = `${salt}::${components.join('||')}`;
40
+ return crypto.createHash('sha256').update(payload).digest('hex');
41
+ }
42
+ /**
43
+ * Verifies whether an incoming request matches the expected fingerprint hash.
44
+ */
45
+ static verify(ctx, expectedFingerprint, options = {}) {
46
+ const current = this.generate(ctx, options);
47
+ if (current.length !== expectedFingerprint.length)
48
+ return false;
49
+ return crypto.timingSafeEqual(Buffer.from(current), Buffer.from(expectedFingerprint));
50
+ }
51
+ }
52
+ /**
53
+ * Middleware that binds client fingerprinting to AeroContext and validates session integrity.
54
+ * If session hijacking is detected (mismatched device fingerprint), access is rejected with 401.
55
+ */
56
+ export function fingerprintGuard(options = {}) {
57
+ return async (ctx, next) => {
58
+ const currentFingerprint = RequestFingerprint.generate(ctx, options);
59
+ ctx.fingerprint = currentFingerprint;
60
+ // If session is active, bind and verify fingerprint
61
+ const session = ctx.session;
62
+ if (session && typeof session.get === 'function') {
63
+ const stored = await session.get('_fingerprint');
64
+ if (!stored) {
65
+ // First visit in this session -> bind fingerprint
66
+ await session.put('_fingerprint', currentFingerprint);
67
+ }
68
+ else if (stored !== currentFingerprint) {
69
+ // Anomaly / Session Hijack detected!
70
+ if (options.onMismatch) {
71
+ await options.onMismatch(ctx);
72
+ return;
73
+ }
74
+ ctx.status(401).json({
75
+ error: 'Unauthorized: Session fingerprint mismatch (Potential Session Hijack)',
76
+ });
77
+ return;
78
+ }
79
+ }
80
+ await next();
81
+ };
82
+ }
83
+ //# sourceMappingURL=fingerprint.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"fingerprint.js","sourceRoot":"","sources":["../../src/security/fingerprint.ts"],"names":[],"mappings":"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"}
@@ -10,4 +10,7 @@ export { Hash, hash, hashVerify, type ScryptOptions, } from './hash.js';
10
10
  export { cors, type CorsOptions, } from '../middleware/cors.js';
11
11
  export * from './totp.js';
12
12
  export * from './vault.js';
13
+ export * from './signed-url.js';
14
+ export * from './encryption.js';
15
+ export * from './fingerprint.js';
13
16
  //# sourceMappingURL=index.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/security/index.ts"],"names":[],"mappings":"AAAA;;;GAGG;AAEH,OAAO,EACL,GAAG,EACH,IAAI,EACJ,MAAM,EACN,MAAM,EACN,OAAO,EACP,aAAa,EACb,iBAAiB,EACjB,iBAAiB,EACjB,cAAc,EACd,KAAK,YAAY,EACjB,KAAK,SAAS,EACd,KAAK,UAAU,EACf,KAAK,cAAc,EACnB,KAAK,gBAAgB,EACrB,KAAK,cAAc,GACpB,MAAM,UAAU,CAAC;AAElB,OAAO,EACL,SAAS,EACT,oBAAoB,EACpB,mBAAmB,EACnB,oBAAoB,EACpB,KAAK,gBAAgB,EACrB,KAAK,cAAc,EACnB,KAAK,aAAa,EAClB,KAAK,0BAA0B,GAChC,MAAM,mBAAmB,CAAC;AAE3B,OAAO,EACL,eAAe,EACf,KAAK,sBAAsB,EAC3B,KAAK,WAAW,EAChB,KAAK,+BAA+B,GACrC,MAAM,cAAc,CAAC;AAEtB,OAAO,EACL,IAAI,EACJ,KAAK,WAAW,GACjB,MAAM,WAAW,CAAC;AAEnB,OAAO,EACL,IAAI,EACJ,IAAI,EACJ,UAAU,EACV,KAAK,aAAa,GACnB,MAAM,WAAW,CAAC;AAEnB,OAAO,EACL,IAAI,EACJ,KAAK,WAAW,GACjB,MAAM,uBAAuB,CAAC;AAE/B,cAAc,WAAW,CAAC;AAC1B,cAAc,YAAY,CAAC"}
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/security/index.ts"],"names":[],"mappings":"AAAA;;;GAGG;AAEH,OAAO,EACL,GAAG,EACH,IAAI,EACJ,MAAM,EACN,MAAM,EACN,OAAO,EACP,aAAa,EACb,iBAAiB,EACjB,iBAAiB,EACjB,cAAc,EACd,KAAK,YAAY,EACjB,KAAK,SAAS,EACd,KAAK,UAAU,EACf,KAAK,cAAc,EACnB,KAAK,gBAAgB,EACrB,KAAK,cAAc,GACpB,MAAM,UAAU,CAAC;AAElB,OAAO,EACL,SAAS,EACT,oBAAoB,EACpB,mBAAmB,EACnB,oBAAoB,EACpB,KAAK,gBAAgB,EACrB,KAAK,cAAc,EACnB,KAAK,aAAa,EAClB,KAAK,0BAA0B,GAChC,MAAM,mBAAmB,CAAC;AAE3B,OAAO,EACL,eAAe,EACf,KAAK,sBAAsB,EAC3B,KAAK,WAAW,EAChB,KAAK,+BAA+B,GACrC,MAAM,cAAc,CAAC;AAEtB,OAAO,EACL,IAAI,EACJ,KAAK,WAAW,GACjB,MAAM,WAAW,CAAC;AAEnB,OAAO,EACL,IAAI,EACJ,IAAI,EACJ,UAAU,EACV,KAAK,aAAa,GACnB,MAAM,WAAW,CAAC;AAEnB,OAAO,EACL,IAAI,EACJ,KAAK,WAAW,GACjB,MAAM,uBAAuB,CAAC;AAE/B,cAAc,WAAW,CAAC;AAC1B,cAAc,YAAY,CAAC;AAC3B,cAAc,iBAAiB,CAAC;AAChC,cAAc,iBAAiB,CAAC;AAChC,cAAc,kBAAkB,CAAC"}
@@ -10,4 +10,7 @@ export { Hash, hash, hashVerify, } from './hash.js';
10
10
  export { cors, } from '../middleware/cors.js';
11
11
  export * from './totp.js';
12
12
  export * from './vault.js';
13
+ export * from './signed-url.js';
14
+ export * from './encryption.js';
15
+ export * from './fingerprint.js';
13
16
  //# sourceMappingURL=index.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/security/index.ts"],"names":[],"mappings":"AAAA;;;GAGG;AAEH,OAAO,EACL,GAAG,EACH,IAAI,EACJ,MAAM,EACN,MAAM,EACN,OAAO,EACP,aAAa,EACb,iBAAiB,EACjB,iBAAiB,EACjB,cAAc,GAOf,MAAM,UAAU,CAAC;AAElB,OAAO,EACL,SAAS,EACT,oBAAoB,EACpB,mBAAmB,EACnB,oBAAoB,GAKrB,MAAM,mBAAmB,CAAC;AAE3B,OAAO,EACL,eAAe,GAIhB,MAAM,cAAc,CAAC;AAEtB,OAAO,EACL,IAAI,GAEL,MAAM,WAAW,CAAC;AAEnB,OAAO,EACL,IAAI,EACJ,IAAI,EACJ,UAAU,GAEX,MAAM,WAAW,CAAC;AAEnB,OAAO,EACL,IAAI,GAEL,MAAM,uBAAuB,CAAC;AAE/B,cAAc,WAAW,CAAC;AAC1B,cAAc,YAAY,CAAC"}
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/security/index.ts"],"names":[],"mappings":"AAAA;;;GAGG;AAEH,OAAO,EACL,GAAG,EACH,IAAI,EACJ,MAAM,EACN,MAAM,EACN,OAAO,EACP,aAAa,EACb,iBAAiB,EACjB,iBAAiB,EACjB,cAAc,GAOf,MAAM,UAAU,CAAC;AAElB,OAAO,EACL,SAAS,EACT,oBAAoB,EACpB,mBAAmB,EACnB,oBAAoB,GAKrB,MAAM,mBAAmB,CAAC;AAE3B,OAAO,EACL,eAAe,GAIhB,MAAM,cAAc,CAAC;AAEtB,OAAO,EACL,IAAI,GAEL,MAAM,WAAW,CAAC;AAEnB,OAAO,EACL,IAAI,EACJ,IAAI,EACJ,UAAU,GAEX,MAAM,WAAW,CAAC;AAEnB,OAAO,EACL,IAAI,GAEL,MAAM,uBAAuB,CAAC;AAE/B,cAAc,WAAW,CAAC;AAC1B,cAAc,YAAY,CAAC;AAC3B,cAAc,iBAAiB,CAAC;AAChC,cAAc,iBAAiB,CAAC;AAChC,cAAc,kBAAkB,CAAC"}
@@ -0,0 +1,29 @@
1
+ /**
2
+ * @file signed-url.ts
3
+ * @description Tamper-proof HMAC URL Signing & Validation for AeroJS.
4
+ * Supports temporary expiring signed URLs for private downloads, password resets, and webhooks.
5
+ */
6
+ import type { Middleware } from '../core/types.js';
7
+ export interface SignUrlOptions {
8
+ expiresIn?: number;
9
+ key?: string;
10
+ }
11
+ export declare class UrlSigner {
12
+ private static defaultKey;
13
+ static setDefaultKey(key: string): void;
14
+ static getDefaultKey(): string;
15
+ /**
16
+ * Generates a signed URL with timestamp and HMAC signature.
17
+ */
18
+ static sign(url: string, options?: SignUrlOptions): string;
19
+ /**
20
+ * Verifies if a given URL has a valid and unexpired HMAC signature.
21
+ */
22
+ static hasValidSignature(url: string, key?: string): boolean;
23
+ private static getPayload;
24
+ }
25
+ /**
26
+ * Middleware that validates the incoming request has a valid, non-expired signed URL.
27
+ */
28
+ export declare function validateSignedUrl(key?: string): Middleware;
29
+ //# sourceMappingURL=signed-url.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"signed-url.d.ts","sourceRoot":"","sources":["../../src/security/signed-url.ts"],"names":[],"mappings":"AAAA;;;;GAIG;AAGH,OAAO,KAAK,EAAE,UAAU,EAAgB,MAAM,kBAAkB,CAAC;AAIjE,MAAM,WAAW,cAAc;IAC7B,SAAS,CAAC,EAAE,MAAM,CAAC;IACnB,GAAG,CAAC,EAAE,MAAM,CAAC;CACd;AAED,qBAAa,SAAS;IACpB,OAAO,CAAC,MAAM,CAAC,UAAU,CAAoG;WAE/G,aAAa,CAAC,GAAG,EAAE,MAAM,GAAG,IAAI;WAIhC,aAAa,IAAI,MAAM;IAIrC;;OAEG;WACW,IAAI,CAAC,GAAG,EAAE,MAAM,EAAE,OAAO,GAAE,cAAmB,GAAG,MAAM;IAsBrE;;OAEG;WACW,iBAAiB,CAAC,GAAG,EAAE,MAAM,EAAE,GAAG,CAAC,EAAE,MAAM,GAAG,OAAO;IAmCnE,OAAO,CAAC,MAAM,CAAC,UAAU;CAM1B;AAED;;GAEG;AACH,wBAAgB,iBAAiB,CAAC,GAAG,CAAC,EAAE,MAAM,GAAG,UAAU,CAW1D"}
@@ -0,0 +1,86 @@
1
+ /**
2
+ * @file signed-url.ts
3
+ * @description Tamper-proof HMAC URL Signing & Validation for AeroJS.
4
+ * Supports temporary expiring signed URLs for private downloads, password resets, and webhooks.
5
+ */
6
+ import * as crypto from 'node:crypto';
7
+ import { ForbiddenError } from '../core/errors.js';
8
+ export class UrlSigner {
9
+ static defaultKey = process.env.APP_KEY || process.env.AERO_KEY || 'aero-default-signing-secret-key-32chars';
10
+ static setDefaultKey(key) {
11
+ this.defaultKey = key;
12
+ }
13
+ static getDefaultKey() {
14
+ return this.defaultKey;
15
+ }
16
+ /**
17
+ * Generates a signed URL with timestamp and HMAC signature.
18
+ */
19
+ static sign(url, options = {}) {
20
+ const key = options.key || this.defaultKey;
21
+ const urlObj = new URL(url, 'http://localhost');
22
+ const expiresIn = options.expiresIn ?? 3600; // Default: 1 hour
23
+ const expiresAt = Math.floor(Date.now() / 1000) + expiresIn;
24
+ urlObj.searchParams.set('expires', String(expiresAt));
25
+ // Remove old signature if present
26
+ urlObj.searchParams.delete('signature');
27
+ // Create signature payload: pathname + sorted query string
28
+ const payload = this.getPayload(urlObj);
29
+ const signature = crypto.createHmac('sha256', key).update(payload).digest('hex');
30
+ urlObj.searchParams.set('signature', signature);
31
+ if (url.startsWith('http://') || url.startsWith('https://')) {
32
+ return urlObj.toString();
33
+ }
34
+ return `${urlObj.pathname}${urlObj.search}`;
35
+ }
36
+ /**
37
+ * Verifies if a given URL has a valid and unexpired HMAC signature.
38
+ */
39
+ static hasValidSignature(url, key) {
40
+ const secret = key || this.defaultKey;
41
+ const urlObj = new URL(url, 'http://localhost');
42
+ const signature = urlObj.searchParams.get('signature');
43
+ const expiresStr = urlObj.searchParams.get('expires');
44
+ if (!signature || !expiresStr) {
45
+ return false;
46
+ }
47
+ const expires = parseInt(expiresStr, 10);
48
+ if (isNaN(expires)) {
49
+ return false;
50
+ }
51
+ // Check expiration
52
+ const now = Math.floor(Date.now() / 1000);
53
+ if (now > expires) {
54
+ return false;
55
+ }
56
+ // Remove signature to compute expected signature
57
+ urlObj.searchParams.delete('signature');
58
+ const payload = this.getPayload(urlObj);
59
+ const expectedSignature = crypto.createHmac('sha256', secret).update(payload).digest('hex');
60
+ // Constant-time comparison to prevent timing attacks
61
+ if (signature.length !== expectedSignature.length) {
62
+ return false;
63
+ }
64
+ return crypto.timingSafeEqual(Buffer.from(signature), Buffer.from(expectedSignature));
65
+ }
66
+ static getPayload(urlObj) {
67
+ // Sort query keys for consistent hashing
68
+ const params = Array.from(urlObj.searchParams.entries()).sort(([a], [b]) => a.localeCompare(b));
69
+ const sortedQuery = params.map(([k, v]) => `${encodeURIComponent(k)}=${encodeURIComponent(v)}`).join('&');
70
+ return `${urlObj.pathname}?${sortedQuery}`;
71
+ }
72
+ }
73
+ /**
74
+ * Middleware that validates the incoming request has a valid, non-expired signed URL.
75
+ */
76
+ export function validateSignedUrl(key) {
77
+ return async (ctx, next) => {
78
+ const fullUrl = ctx.req.url || '/';
79
+ const isValid = UrlSigner.hasValidSignature(fullUrl, key);
80
+ if (!isValid) {
81
+ throw new ForbiddenError('Invalid or expired URL signature.');
82
+ }
83
+ await next();
84
+ };
85
+ }
86
+ //# sourceMappingURL=signed-url.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"signed-url.js","sourceRoot":"","sources":["../../src/security/signed-url.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,34 @@
1
+ /**
2
+ * @file cookie-session-driver.ts
3
+ * @description Encrypted client-side cookie session driver for AeroJS.
4
+ * Serializes and encrypts session state into an authenticated AES-256-GCM cookie.
5
+ * Zero-dependency, stateless, and ideal for serverless / edge deployments.
6
+ */
7
+ import type { SessionDriver } from './session-driver.js';
8
+ export declare class CookieSessionDriver implements SessionDriver {
9
+ readonly isClientSide = true;
10
+ private encrypter;
11
+ private lastPayload;
12
+ constructor(key?: string);
13
+ /**
14
+ * Reads and decrypts session data from the encrypted cookie payload.
15
+ */
16
+ read(sessionIdOrPayload: string): Promise<Record<string, unknown>>;
17
+ /**
18
+ * Encrypts the session state for writing to the client cookie.
19
+ */
20
+ write(sessionId: string, data: Record<string, unknown>, _ttl: number): Promise<void>;
21
+ /**
22
+ * Returns the encrypted cookie ciphertext string for the given session state.
23
+ */
24
+ getEncryptedCookieValue(data: Record<string, unknown>): string;
25
+ /**
26
+ * Destroys the session state.
27
+ */
28
+ destroy(_sessionId: string): Promise<void>;
29
+ /**
30
+ * Garbage collection is a no-op for client-side cookies as browsers manage expiry.
31
+ */
32
+ gc(): Promise<void>;
33
+ }
34
+ //# sourceMappingURL=cookie-session-driver.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"cookie-session-driver.d.ts","sourceRoot":"","sources":["../../src/session/cookie-session-driver.ts"],"names":[],"mappings":"AAAA;;;;;GAKG;AAEH,OAAO,KAAK,EAAE,aAAa,EAAE,MAAM,qBAAqB,CAAC;AAGzD,qBAAa,mBAAoB,YAAW,aAAa;IACvD,SAAgB,YAAY,QAAQ;IACpC,OAAO,CAAC,SAAS,CAAY;IAC7B,OAAO,CAAC,WAAW,CAAM;gBAEb,GAAG,CAAC,EAAE,MAAM;IAIxB;;OAEG;IACU,IAAI,CAAC,kBAAkB,EAAE,MAAM,GAAG,OAAO,CAAC,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAAC;IAgB/E;;OAEG;IACU,KAAK,CAAC,SAAS,EAAE,MAAM,EAAE,IAAI,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,EAAE,IAAI,EAAE,MAAM,GAAG,OAAO,CAAC,IAAI,CAAC;IAIjG;;OAEG;IACI,uBAAuB,CAAC,IAAI,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,GAAG,MAAM;IAIrE;;OAEG;IACU,OAAO,CAAC,UAAU,EAAE,MAAM,GAAG,OAAO,CAAC,IAAI,CAAC;IAIvD;;OAEG;IACU,EAAE,IAAI,OAAO,CAAC,IAAI,CAAC;CACjC"}
@@ -0,0 +1,57 @@
1
+ /**
2
+ * @file cookie-session-driver.ts
3
+ * @description Encrypted client-side cookie session driver for AeroJS.
4
+ * Serializes and encrypts session state into an authenticated AES-256-GCM cookie.
5
+ * Zero-dependency, stateless, and ideal for serverless / edge deployments.
6
+ */
7
+ import { Encrypter } from '../security/encryption.js';
8
+ export class CookieSessionDriver {
9
+ isClientSide = true;
10
+ encrypter;
11
+ lastPayload = '';
12
+ constructor(key) {
13
+ this.encrypter = new Encrypter(key);
14
+ }
15
+ /**
16
+ * Reads and decrypts session data from the encrypted cookie payload.
17
+ */
18
+ async read(sessionIdOrPayload) {
19
+ if (!sessionIdOrPayload || !Encrypter.isEncrypted(sessionIdOrPayload)) {
20
+ return {};
21
+ }
22
+ try {
23
+ const data = this.encrypter.decrypt(sessionIdOrPayload);
24
+ if (data && typeof data === 'object') {
25
+ return data;
26
+ }
27
+ return {};
28
+ }
29
+ catch {
30
+ // Tampered or invalid ciphertext -> reset session
31
+ return {};
32
+ }
33
+ }
34
+ /**
35
+ * Encrypts the session state for writing to the client cookie.
36
+ */
37
+ async write(sessionId, data, _ttl) {
38
+ this.lastPayload = this.encrypter.encrypt(data);
39
+ }
40
+ /**
41
+ * Returns the encrypted cookie ciphertext string for the given session state.
42
+ */
43
+ getEncryptedCookieValue(data) {
44
+ return this.encrypter.encrypt(data);
45
+ }
46
+ /**
47
+ * Destroys the session state.
48
+ */
49
+ async destroy(_sessionId) {
50
+ this.lastPayload = '';
51
+ }
52
+ /**
53
+ * Garbage collection is a no-op for client-side cookies as browsers manage expiry.
54
+ */
55
+ async gc() { }
56
+ }
57
+ //# sourceMappingURL=cookie-session-driver.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"cookie-session-driver.js","sourceRoot":"","sources":["../../src/session/cookie-session-driver.ts"],"names":[],"mappings":"AAAA;;;;;GAKG;AAGH,OAAO,EAAE,SAAS,EAAE,MAAM,2BAA2B,CAAC;AAEtD,MAAM,OAAO,mBAAmB;IACd,YAAY,GAAG,IAAI,CAAC;IAC5B,SAAS,CAAY;IACrB,WAAW,GAAG,EAAE,CAAC;IAEzB,YAAY,GAAY;QACtB,IAAI,CAAC,SAAS,GAAG,IAAI,SAAS,CAAC,GAAG,CAAC,CAAC;IACtC,CAAC;IAED;;OAEG;IACI,KAAK,CAAC,IAAI,CAAC,kBAA0B;QAC1C,IAAI,CAAC,kBAAkB,IAAI,CAAC,SAAS,CAAC,WAAW,CAAC,kBAAkB,CAAC,EAAE,CAAC;YACtE,OAAO,EAAE,CAAC;QACZ,CAAC;QACD,IAAI,CAAC;YACH,MAAM,IAAI,GAAG,IAAI,CAAC,SAAS,CAAC,OAAO,CAA0B,kBAAkB,CAAC,CAAC;YACjF,IAAI,IAAI,IAAI,OAAO,IAAI,KAAK,QAAQ,EAAE,CAAC;gBACrC,OAAO,IAAI,CAAC;YACd,CAAC;YACD,OAAO,EAAE,CAAC;QACZ,CAAC;QAAC,MAAM,CAAC;YACP,kDAAkD;YAClD,OAAO,EAAE,CAAC;QACZ,CAAC;IACH,CAAC;IAED;;OAEG;IACI,KAAK,CAAC,KAAK,CAAC,SAAiB,EAAE,IAA6B,EAAE,IAAY;QAC/E,IAAI,CAAC,WAAW,GAAG,IAAI,CAAC,SAAS,CAAC,OAAO,CAAC,IAAI,CAAC,CAAC;IAClD,CAAC;IAED;;OAEG;IACI,uBAAuB,CAAC,IAA6B;QAC1D,OAAO,IAAI,CAAC,SAAS,CAAC,OAAO,CAAC,IAAI,CAAC,CAAC;IACtC,CAAC;IAED;;OAEG;IACI,KAAK,CAAC,OAAO,CAAC,UAAkB;QACrC,IAAI,CAAC,WAAW,GAAG,EAAE,CAAC;IACxB,CAAC;IAED;;OAEG;IACI,KAAK,CAAC,EAAE,KAAmB,CAAC;CACpC"}
@@ -0,0 +1,8 @@
1
+ /**
2
+ * @file index.ts
3
+ * @description AeroJS Session Management and Drivers.
4
+ */
5
+ export * from './session-driver.js';
6
+ export * from './cookie-session-driver.js';
7
+ export * from './session-manager.js';
8
+ //# sourceMappingURL=index.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/session/index.ts"],"names":[],"mappings":"AAAA;;;GAGG;AAEH,cAAc,qBAAqB,CAAC;AACpC,cAAc,4BAA4B,CAAC;AAC3C,cAAc,sBAAsB,CAAC"}
@@ -0,0 +1,8 @@
1
+ /**
2
+ * @file index.ts
3
+ * @description AeroJS Session Management and Drivers.
4
+ */
5
+ export * from './session-driver.js';
6
+ export * from './cookie-session-driver.js';
7
+ export * from './session-manager.js';
8
+ //# sourceMappingURL=index.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/session/index.ts"],"names":[],"mappings":"AAAA;;;GAGG;AAEH,cAAc,qBAAqB,CAAC;AACpC,cAAc,4BAA4B,CAAC;AAC3C,cAAc,sBAAsB,CAAC"}
@@ -1 +1 @@
1
- {"version":3,"file":"session-manager.d.ts","sourceRoot":"","sources":["../../src/session/session-manager.ts"],"names":[],"mappings":"AAAA;;;;;GAKG;AAGH,OAAO,KAAK,EAAE,WAAW,EAAE,MAAM,oBAAoB,CAAC;AACtD,OAAO,KAAK,EAAE,aAAa,EAAE,MAAM,qBAAqB,CAAC;AAEzD,OAAO,KAAK,EAAE,UAAU,EAAE,MAAM,kBAAkB,CAAC;AAEnD,MAAM,WAAW,aAAa;IAC5B;;OAEG;IACH,MAAM,CAAC,EAAE,aAAa,CAAC;IAEvB;;OAEG;IACH,UAAU,CAAC,EAAE,MAAM,CAAC;IAEpB;;OAEG;IACH,QAAQ,CAAC,EAAE,MAAM,CAAC;IAElB;;OAEG;IACH,MAAM,CAAC,EAAE;QACP,QAAQ,CAAC,EAAE,OAAO,CAAC;QACnB,MAAM,CAAC,EAAE,OAAO,CAAC;QACjB,QAAQ,CAAC,EAAE,QAAQ,GAAG,KAAK,GAAG,MAAM,GAAG,OAAO,CAAC;QAC/C,IAAI,CAAC,EAAE,MAAM,CAAC;QACd,MAAM,CAAC,EAAE,MAAM,CAAC;KACjB,CAAC;CACH;AAED;;;GAGG;AACH,qBAAa,cAAc;IACzB,OAAO,CAAC,SAAS,CAAS;IAC1B,OAAO,CAAC,IAAI,CAA+B;IAC3C,OAAO,CAAC,OAAO,CAAS;IACxB,OAAO,CAAC,MAAM,CAAS;IACvB,OAAO,CAAC,QAAQ,CAAC,MAAM,CAAgB;IACvC,OAAO,CAAC,QAAQ,CAAC,MAAM,CAA0B;IACjD,OAAO,CAAC,QAAQ,CAAC,GAAG,CAAc;gBAEtB,GAAG,EAAE,WAAW,EAAE,SAAS,EAAE,MAAM,EAAE,MAAM,EAAE,QAAQ,CAAC,aAAa,CAAC;IAOhF;;OAEG;YACW,YAAY;IAM1B,2BAA2B;IACd,GAAG,CAAC,CAAC,GAAG,OAAO,EAAE,GAAG,EAAE,MAAM,GAAG,OAAO,CAAC,CAAC,GAAG,SAAS,CAAC;IAKlE,4BAA4B;IACf,GAAG,IAAI,OAAO,CAAC,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAAC;IAKpD,2BAA2B;IACd,GAAG,CAAC,GAAG,EAAE,MAAM,EAAE,KAAK,EAAE,OAAO,GAAG,OAAO,CAAC,IAAI,CAAC;IAM5D,qCAAqC;IACxB,GAAG,CAAC,GAAG,EAAE,MAAM,GAAG,OAAO,CAAC,OAAO,CAAC;IAK/C,4BAA4B;IACf,MAAM,CAAC,GAAG,EAAE,MAAM,GAAG,OAAO,CAAC,IAAI,CAAC;IAM/C,8BAA8B;IACjB,KAAK,IAAI,OAAO,CAAC,IAAI,CAAC;IAMnC;;;OAGG;IACU,KAAK,CAAC,GAAG,EAAE,MAAM,EAAE,KAAK,CAAC,EAAE,OAAO,GAAG,OAAO,CAAC,OAAO,CAAC;IAclE;;OAEG;IACU,SAAS,CAAC,QAAQ,EAAE,MAAM,GAAG,OAAO,CAAC,IAAI,CAAC;IAKvD;;;OAGG;IACU,UAAU,IAAI,OAAO,CAAC,IAAI,CAAC;IAaxC;;OAEG;IACU,OAAO,IAAI,OAAO,CAAC,IAAI,CAAC;IASrC;;OAEG;IACU,MAAM,IAAI,OAAO,CAAC,IAAI,CAAC;IAQpC,OAAO,CAAC,kBAAkB;IAUnB,KAAK,IAAI,MAAM;CAGvB;AAED;;;;;;;;;;GAUG;AACH,wBAAgB,aAAa,CAAC,MAAM,GAAE,aAAkB,GAAG,UAAU,CA+BpE"}
1
+ {"version":3,"file":"session-manager.d.ts","sourceRoot":"","sources":["../../src/session/session-manager.ts"],"names":[],"mappings":"AAAA;;;;;GAKG;AAGH,OAAO,KAAK,EAAE,WAAW,EAAE,MAAM,oBAAoB,CAAC;AACtD,OAAO,KAAK,EAAE,aAAa,EAAE,MAAM,qBAAqB,CAAC;AAEzD,OAAO,KAAK,EAAE,UAAU,EAAE,MAAM,kBAAkB,CAAC;AAEnD,MAAM,WAAW,aAAa;IAC5B;;OAEG;IACH,MAAM,CAAC,EAAE,aAAa,CAAC;IAEvB;;OAEG;IACH,UAAU,CAAC,EAAE,MAAM,CAAC;IAEpB;;OAEG;IACH,QAAQ,CAAC,EAAE,MAAM,CAAC;IAElB;;OAEG;IACH,MAAM,CAAC,EAAE;QACP,QAAQ,CAAC,EAAE,OAAO,CAAC;QACnB,MAAM,CAAC,EAAE,OAAO,CAAC;QACjB,QAAQ,CAAC,EAAE,QAAQ,GAAG,KAAK,GAAG,MAAM,GAAG,OAAO,CAAC;QAC/C,IAAI,CAAC,EAAE,MAAM,CAAC;QACd,MAAM,CAAC,EAAE,MAAM,CAAC;KACjB,CAAC;CACH;AAED;;;GAGG;AACH,qBAAa,cAAc;IACzB,OAAO,CAAC,SAAS,CAAS;IAC1B,OAAO,CAAC,IAAI,CAA+B;IAC3C,OAAO,CAAC,OAAO,CAAS;IACxB,OAAO,CAAC,MAAM,CAAS;IACvB,OAAO,CAAC,QAAQ,CAAC,MAAM,CAAgB;IACvC,OAAO,CAAC,QAAQ,CAAC,MAAM,CAA0B;IACjD,OAAO,CAAC,QAAQ,CAAC,GAAG,CAAc;gBAEtB,GAAG,EAAE,WAAW,EAAE,SAAS,EAAE,MAAM,EAAE,MAAM,EAAE,QAAQ,CAAC,aAAa,CAAC;IAOhF;;OAEG;YACW,YAAY;IAM1B,2BAA2B;IACd,GAAG,CAAC,CAAC,GAAG,OAAO,EAAE,GAAG,EAAE,MAAM,GAAG,OAAO,CAAC,CAAC,GAAG,SAAS,CAAC;IAKlE,4BAA4B;IACf,GAAG,IAAI,OAAO,CAAC,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAAC;IAKpD,2BAA2B;IACd,GAAG,CAAC,GAAG,EAAE,MAAM,EAAE,KAAK,EAAE,OAAO,GAAG,OAAO,CAAC,IAAI,CAAC;IAM5D,qCAAqC;IACxB,GAAG,CAAC,GAAG,EAAE,MAAM,GAAG,OAAO,CAAC,OAAO,CAAC;IAK/C,4BAA4B;IACf,MAAM,CAAC,GAAG,EAAE,MAAM,GAAG,OAAO,CAAC,IAAI,CAAC;IAM/C,8BAA8B;IACjB,KAAK,IAAI,OAAO,CAAC,IAAI,CAAC;IAMnC;;;OAGG;IACU,KAAK,CAAC,GAAG,EAAE,MAAM,EAAE,KAAK,CAAC,EAAE,OAAO,GAAG,OAAO,CAAC,OAAO,CAAC;IAclE;;OAEG;IACU,SAAS,CAAC,QAAQ,EAAE,MAAM,GAAG,OAAO,CAAC,IAAI,CAAC;IAKvD;;;OAGG;IACU,UAAU,IAAI,OAAO,CAAC,IAAI,CAAC;IAaxC;;OAEG;IACU,OAAO,IAAI,OAAO,CAAC,IAAI,CAAC;IASrC;;OAEG;IACU,MAAM,IAAI,OAAO,CAAC,IAAI,CAAC;IAWpC,OAAO,CAAC,kBAAkB;IAUnB,KAAK,IAAI,MAAM;CAGvB;AAED;;;;;;;;;;GAUG;AACH,wBAAgB,aAAa,CAAC,MAAM,GAAE,aAAkB,GAAG,UAAU,CAmCpE"}