@c9up/warden 0.1.20 → 0.1.22
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.
- package/dist/AuthManager.d.ts +0 -3
- package/dist/AuthManager.d.ts.map +1 -1
- package/dist/AuthManager.js +21 -21
- package/dist/AuthManager.js.map +1 -1
- package/dist/AuthRateLimiter.d.ts +1 -6
- package/dist/AuthRateLimiter.d.ts.map +1 -1
- package/dist/AuthRateLimiter.js +31 -31
- package/dist/AuthRateLimiter.js.map +1 -1
- package/dist/RefreshTokenStore.d.ts +1 -1
- package/dist/RefreshTokenStore.d.ts.map +1 -1
- package/dist/RefreshTokenStore.js +9 -9
- package/dist/RefreshTokenStore.js.map +1 -1
- package/dist/TokenBlacklist.d.ts +1 -1
- package/dist/TokenBlacklist.d.ts.map +1 -1
- package/dist/TokenBlacklist.js +6 -6
- package/dist/TokenBlacklist.js.map +1 -1
- package/dist/augmentations.d.ts +0 -1
- package/dist/augmentations.d.ts.map +1 -1
- package/dist/bouncer/AuthorizationResponse.d.ts +6 -0
- package/dist/bouncer/AuthorizationResponse.d.ts.map +1 -1
- package/dist/bouncer/AuthorizationResponse.js +6 -0
- package/dist/bouncer/AuthorizationResponse.js.map +1 -1
- package/dist/native/generated.d.ts +8 -0
- package/dist/native/generated.d.ts.map +1 -0
- package/dist/native/generated.js +7 -0
- package/dist/native/generated.js.map +1 -0
- package/dist/native.d.ts +8 -9
- package/dist/native.d.ts.map +1 -1
- package/dist/native.js.map +1 -1
- package/dist/rights/MemoryRightsStore.d.ts +1 -6
- package/dist/rights/MemoryRightsStore.d.ts.map +1 -1
- package/dist/rights/MemoryRightsStore.js +10 -10
- package/dist/rights/MemoryRightsStore.js.map +1 -1
- package/index.win32-x64-msvc.node +0 -0
- package/package.json +3 -2
- package/scripts/build-napi-types.mjs +68 -0
- package/scripts/generate-napi-types.mjs +153 -0
- package/src/AuthManager.ts +21 -21
- package/src/AuthRateLimiter.ts +29 -29
- package/src/RefreshTokenStore.ts +9 -9
- package/src/TokenBlacklist.ts +6 -6
- package/src/augmentations.ts +0 -2
- package/src/bouncer/AuthorizationResponse.ts +6 -0
- package/src/native/generated.ts +23 -0
- package/src/native.ts +8 -9
- package/src/rights/MemoryRightsStore.ts +10 -10
package/dist/AuthManager.d.ts
CHANGED
|
@@ -111,9 +111,6 @@ export interface WardenEmitter {
|
|
|
111
111
|
}
|
|
112
112
|
export declare class AuthManager {
|
|
113
113
|
#private;
|
|
114
|
-
private guards;
|
|
115
|
-
private default;
|
|
116
|
-
private readonly rights;
|
|
117
114
|
/**
|
|
118
115
|
* Publish auth events on `emitter`. AdonisJS emits six of them from its
|
|
119
116
|
* session guard, and an app that audits logins reads exactly those.
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"AuthManager.d.ts","sourceRoot":"","sources":["../src/AuthManager.ts"],"names":[],"mappings":"AAAA;;;;GAIG;AAEH,OAAO,EAAE,aAAa,EAAE,MAAM,oBAAoB,CAAC;AAEnD,OAAO,KAAK,EAAE,aAAa,EAAE,MAAM,iBAAiB,CAAC;AACrD,OAAO,EAAE,eAAe,EAAE,MAAM,eAAe,CAAC;AAEhD,OAAO,EAAE,eAAe,EAAE,CAAC;AAG3B,OAAO,EAAE,cAAc,EAAE,MAAM,4BAA4B,CAAC;AAC5D,OAAO,KAAK,EAAE,oBAAoB,EAAE,KAAK,EAAE,MAAM,mBAAmB,CAAC;AACrE,OAAO,KAAK,EAAE,YAAY,EAAE,MAAM,iCAAiC,CAAC;AAEpE,MAAM,WAAW,WAAW;IAC3B,EAAE,EAAE,MAAM,CAAC;IACX,KAAK,CAAC,EAAE,MAAM,EAAE,CAAC;IACjB,WAAW,CAAC,EAAE,MAAM,EAAE,CAAC;IACvB,CAAC,GAAG,EAAE,MAAM,GAAG,OAAO,CAAC;CACvB;AAED,MAAM,WAAW,UAAU;IAC1B,aAAa,EAAE,OAAO,CAAC;IACvB,IAAI,CAAC,EAAE,WAAW,CAAC;IACnB,KAAK,CAAC,EAAE,MAAM,CAAC;IACf;;;;;;OAMG;IACH,aAAa,CAAC,EAAE,IAAI,CAAC;CACrB;AAED;;;;;;GAMG;AACH,MAAM,WAAW,kBAAkB;IAClC,qCAAqC;IACrC,OAAO,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,CAAC;IACjC,iDAAiD;IACjD,OAAO,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAAC;IAClC,uBAAuB;IACvB,OAAO,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,CAAC;CACjC;AAED;;;;;;;;;;;;;GAaG;AACH,wBAAgB,eAAe,CAAC,UAAU,EAAE,MAAM,GAAG,SAAS,GAAG,MAAM,CAGtE;AAED,MAAM,WAAW,YAAY;IAC5B,IAAI,EAAE,MAAM,CAAC;IACb,YAAY,CAAC,WAAW,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,GAAG,OAAO,CAAC,UAAU,CAAC,CAAC;IACxE,MAAM,CAAC,KAAK,EAAE,MAAM,EAAE,OAAO,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,GAAG,OAAO,CAAC,UAAU,CAAC,CAAC;IAC9E;;;;OAIG;IACH,oBAAoB,CAAC,CACpB,GAAG,IAAI,EAAE,KAAK,EAAE,GACd,OAAO,CAAC,kBAAkB,CAAC,GAAG,kBAAkB,CAAC;CACpD;AAED;;;;;;;;;;GAUG;AACH,MAAM,WAAW,UAAU;IAC1B,2CAA2C;IAC3C,OAAO,CAAC,EAAE,MAAM,CAAC;IACjB,yDAAyD;IACzD,MAAM,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,YAAY,CAAC,CAAC;IACtC,mDAAmD;IACnD,eAAe,CAAC,EAAE,MAAM,CAAC;IACzB,kDAAkD;IAClD,UAAU,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,YAAY,CAAC,CAAC;IAC1C;;;;;;OAMG;IACH,MAAM,CAAC,EAAE,cAAc,CAAC;CACxB;AAkBD;;GAEG;AACH;;;GAGG;AACH,MAAM,WAAW,aAAa;IAC7B,IAAI,CAAC,KAAK,EAAE,MAAM,EAAE,IAAI,EAAE,OAAO,GAAG,OAAO,CAAC;CAC5C;AAED,qBAAa,WAAW;;
|
|
1
|
+
{"version":3,"file":"AuthManager.d.ts","sourceRoot":"","sources":["../src/AuthManager.ts"],"names":[],"mappings":"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"}
|
package/dist/AuthManager.js
CHANGED
|
@@ -39,9 +39,9 @@ function isTokenIssuer(strategy) {
|
|
|
39
39
|
export class AuthManager {
|
|
40
40
|
// AdonisJS names: `guards` (name → strategy) and `default` (the guard used
|
|
41
41
|
// when none is named). Renamed from the previous `strategies`/`defaultStrategy`.
|
|
42
|
-
guards = new Map();
|
|
43
|
-
default;
|
|
44
|
-
rights;
|
|
42
|
+
#guards = new Map();
|
|
43
|
+
#default;
|
|
44
|
+
#rights;
|
|
45
45
|
/**
|
|
46
46
|
* Where auth events go. Structural and optional: warden is a leaf and must
|
|
47
47
|
* not import an emitter — a host wires its own through `setEmitter`, and one
|
|
@@ -81,10 +81,10 @@ export class AuthManager {
|
|
|
81
81
|
if (!guards || defaultGuard === undefined) {
|
|
82
82
|
throw new WardenError("INVALID_CONFIG", "AuthManager: config must supply `default` + `guards` (or the legacy `defaultStrategy` + `strategies`).");
|
|
83
83
|
}
|
|
84
|
-
this
|
|
85
|
-
this
|
|
84
|
+
this.#default = defaultGuard;
|
|
85
|
+
this.#rights = config.rights ?? new RightsResolver(new MemoryRightsStore());
|
|
86
86
|
for (const [name, strategy] of Object.entries(guards)) {
|
|
87
|
-
this
|
|
87
|
+
this.#guards.set(name, strategy);
|
|
88
88
|
}
|
|
89
89
|
// Fail-fast at construction: an AuthManager with zero guards is a
|
|
90
90
|
// configuration bug. Previously, an empty `guards: {}` passed the
|
|
@@ -92,10 +92,10 @@ export class AuthManager {
|
|
|
92
92
|
// runtime when `getStrategy('jwt')` threw — opaque 401 or 500 instead
|
|
93
93
|
// of a boot-time INVALID_CONFIG that points the operator at the missing
|
|
94
94
|
// `config.auth.jwt` (or other guard).
|
|
95
|
-
if (this
|
|
95
|
+
if (this.#guards.size === 0) {
|
|
96
96
|
throw new WardenError("INVALID_CONFIG", `AuthManager: no authentication guards registered. Configure at least one guard (e.g. config.warden.auth.jwt) before booting WardenProvider.`);
|
|
97
97
|
}
|
|
98
|
-
if (!this
|
|
98
|
+
if (!this.#guards.has(defaultGuard)) {
|
|
99
99
|
throw new WardenError("INVALID_CONFIG", `default guard '${defaultGuard}' is not present in guards`);
|
|
100
100
|
}
|
|
101
101
|
}
|
|
@@ -157,7 +157,7 @@ export class AuthManager {
|
|
|
157
157
|
issueFor(user, strategyName) {
|
|
158
158
|
const strategy = this.getStrategy(strategyName);
|
|
159
159
|
if (!isTokenIssuer(strategy)) {
|
|
160
|
-
throw new WardenError("STRATEGY_CANNOT_ISSUE", `Auth strategy '${strategyName ?? this
|
|
160
|
+
throw new WardenError("STRATEGY_CANNOT_ISSUE", `Auth strategy '${strategyName ?? this.#default}' cannot issue tokens.`, {
|
|
161
161
|
hint: "issueFor() needs a token-minting strategy (e.g. JwtStrategy with signToken). Session / API-key strategies don't mint tokens.",
|
|
162
162
|
});
|
|
163
163
|
}
|
|
@@ -172,7 +172,7 @@ export class AuthManager {
|
|
|
172
172
|
* same `(user, scope)` (the single unification point — AC-E3).
|
|
173
173
|
*/
|
|
174
174
|
resolvePermissions(user, scope = "global") {
|
|
175
|
-
return this
|
|
175
|
+
return this.#rights.resolve(user, scope);
|
|
176
176
|
}
|
|
177
177
|
/**
|
|
178
178
|
* Check if a user has a specific role within a scope (default `"global"`).
|
|
@@ -222,7 +222,7 @@ export class AuthManager {
|
|
|
222
222
|
const strategy = this.getStrategy(guard);
|
|
223
223
|
const seam = strategy.authenticateAsClient?.bind(strategy);
|
|
224
224
|
if (!seam) {
|
|
225
|
-
throw new WardenError("STRATEGY_HAS_NO_CLIENT", `Auth strategy '${guard ?? this
|
|
225
|
+
throw new WardenError("STRATEGY_HAS_NO_CLIENT", `Auth strategy '${guard ?? this.#default}' has no authenticateAsClient() — it cannot forge a client request.`, {
|
|
226
226
|
hint: "Implement authenticateAsClient() on the strategy, or authenticate through a real login in the test.",
|
|
227
227
|
});
|
|
228
228
|
}
|
|
@@ -244,8 +244,8 @@ export class AuthManager {
|
|
|
244
244
|
}
|
|
245
245
|
}
|
|
246
246
|
getStrategy(name) {
|
|
247
|
-
const strategyName = name ?? this
|
|
248
|
-
const strategy = this
|
|
247
|
+
const strategyName = name ?? this.#default;
|
|
248
|
+
const strategy = this.#guards.get(strategyName);
|
|
249
249
|
if (!strategy) {
|
|
250
250
|
throw new WardenError("STRATEGY_NOT_FOUND", `Auth strategy '${strategyName}' not registered`, {
|
|
251
251
|
hint: "Call registerStrategy() before using this strategy name.",
|
|
@@ -259,15 +259,15 @@ export class AuthManager {
|
|
|
259
259
|
* declares none.
|
|
260
260
|
*/
|
|
261
261
|
get defaultStrategyName() {
|
|
262
|
-
return this
|
|
262
|
+
return this.#default;
|
|
263
263
|
}
|
|
264
264
|
/** Register a new strategy at runtime. */
|
|
265
265
|
registerStrategy(name, strategy) {
|
|
266
|
-
this
|
|
266
|
+
this.#guards.set(name, strategy);
|
|
267
267
|
}
|
|
268
268
|
/** Get all registered strategy names. */
|
|
269
269
|
getStrategyNames() {
|
|
270
|
-
return [...this
|
|
270
|
+
return [...this.#guards.keys()];
|
|
271
271
|
}
|
|
272
272
|
/**
|
|
273
273
|
* Log a user in through a session-capable guard (AdonisJS
|
|
@@ -282,18 +282,18 @@ export class AuthManager {
|
|
|
282
282
|
async login(user, session, strategyName) {
|
|
283
283
|
const strategy = this.getStrategy(strategyName);
|
|
284
284
|
if (!isLoginCapable(strategy)) {
|
|
285
|
-
throw new WardenError("STRATEGY_CANNOT_LOGIN", `Auth strategy '${strategyName ?? this
|
|
285
|
+
throw new WardenError("STRATEGY_CANNOT_LOGIN", `Auth strategy '${strategyName ?? this.#default}' does not support session login.`, {
|
|
286
286
|
hint: "login()/logout() need a stateful guard (e.g. SessionStrategy). JWT / API-key guards are stateless — mint a token with issueFor() instead.",
|
|
287
287
|
});
|
|
288
288
|
}
|
|
289
289
|
const prefix = authEventPrefix(strategy.name);
|
|
290
290
|
this.#emit(`${prefix}:login_attempted`, {
|
|
291
|
-
guardName: strategyName ?? this
|
|
291
|
+
guardName: strategyName ?? this.#default,
|
|
292
292
|
user,
|
|
293
293
|
});
|
|
294
294
|
await strategy.login(user, session);
|
|
295
295
|
this.#emit(`${prefix}:login_succeeded`, {
|
|
296
|
-
guardName: strategyName ?? this
|
|
296
|
+
guardName: strategyName ?? this.#default,
|
|
297
297
|
user,
|
|
298
298
|
sessionId: undefined,
|
|
299
299
|
});
|
|
@@ -306,11 +306,11 @@ export class AuthManager {
|
|
|
306
306
|
async logout(session, strategyName) {
|
|
307
307
|
const strategy = this.getStrategy(strategyName);
|
|
308
308
|
if (!isLoginCapable(strategy)) {
|
|
309
|
-
throw new WardenError("STRATEGY_CANNOT_LOGIN", `Auth strategy '${strategyName ?? this
|
|
309
|
+
throw new WardenError("STRATEGY_CANNOT_LOGIN", `Auth strategy '${strategyName ?? this.#default}' does not support session logout.`);
|
|
310
310
|
}
|
|
311
311
|
await strategy.logout(session);
|
|
312
312
|
this.#emit(`${authEventPrefix(strategy.name)}:logged_out`, {
|
|
313
|
-
guardName: strategyName ?? this
|
|
313
|
+
guardName: strategyName ?? this.#default,
|
|
314
314
|
user: null,
|
|
315
315
|
error: null,
|
|
316
316
|
});
|
package/dist/AuthManager.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"AuthManager.js","sourceRoot":"","sources":["../src/AuthManager.ts"],"names":[],"mappings":"AAAA;;;;GAIG;AAEH,OAAO,EAAE,aAAa,EAAE,MAAM,oBAAoB,CAAC;AACnD,OAAO,EAAE,WAAW,EAAE,MAAM,aAAa,CAAC;AAE1C,OAAO,EAAE,eAAe,EAAE,MAAM,eAAe,CAAC;AAEhD,OAAO,EAAE,eAAe,EAAE,CAAC;AAE3B,OAAO,EAAE,iBAAiB,EAAE,MAAM,+BAA+B,CAAC;AAClE,OAAO,EAAE,cAAc,EAAE,MAAM,4BAA4B,CAAC;AAyC5D;;;;;;;;;;;;;GAaG;AACH,MAAM,UAAU,eAAe,CAAC,UAA8B;IAC7D,IAAI,CAAC,UAAU;QAAE,OAAO,cAAc,CAAC;IACvC,OAAO,UAAU,CAAC,QAAQ,CAAC,OAAO,CAAC,CAAC,CAAC,CAAC,UAAU,CAAC,CAAC,CAAC,GAAG,UAAU,OAAO,CAAC;AACzE,CAAC;AAmDD;;;;GAIG;AACH,SAAS,aAAa,CACrB,QAAsB;IAEtB,OAAO,WAAW,IAAI,QAAQ,IAAI,OAAO,QAAQ,CAAC,SAAS,KAAK,UAAU,CAAC;AAC5E,CAAC;AAaD,MAAM,OAAO,WAAW;IACvB,2EAA2E;IAC3E,iFAAiF;
|
|
1
|
+
{"version":3,"file":"AuthManager.js","sourceRoot":"","sources":["../src/AuthManager.ts"],"names":[],"mappings":"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"}
|
|
@@ -10,10 +10,7 @@ export interface AuthRateLimiterConfig {
|
|
|
10
10
|
windowSeconds?: number;
|
|
11
11
|
}
|
|
12
12
|
export declare class AuthRateLimiter {
|
|
13
|
-
private
|
|
14
|
-
private window;
|
|
15
|
-
private store;
|
|
16
|
-
private maxStoreSize;
|
|
13
|
+
#private;
|
|
17
14
|
constructor(config?: AuthRateLimiterConfig);
|
|
18
15
|
/** Check if an attempt is allowed. Returns false if rate limited. */
|
|
19
16
|
check(ip: string, identifier: string): boolean;
|
|
@@ -23,7 +20,5 @@ export declare class AuthRateLimiter {
|
|
|
23
20
|
recordSuccess(ip: string, identifier: string): void;
|
|
24
21
|
/** Get remaining attempts for an identifier. */
|
|
25
22
|
remaining(ip: string, identifier: string): number;
|
|
26
|
-
private checkKey;
|
|
27
|
-
private increment;
|
|
28
23
|
}
|
|
29
24
|
//# sourceMappingURL=AuthRateLimiter.d.ts.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"AuthRateLimiter.d.ts","sourceRoot":"","sources":["../src/AuthRateLimiter.ts"],"names":[],"mappings":"AAAA;;;;;;GAMG;AAEH,MAAM,WAAW,qBAAqB;IACrC,WAAW,CAAC,EAAE,MAAM,CAAC;IACrB,aAAa,CAAC,EAAE,MAAM,CAAC;CACvB;AAOD,qBAAa,eAAe
|
|
1
|
+
{"version":3,"file":"AuthRateLimiter.d.ts","sourceRoot":"","sources":["../src/AuthRateLimiter.ts"],"names":[],"mappings":"AAAA;;;;;;GAMG;AAEH,MAAM,WAAW,qBAAqB;IACrC,WAAW,CAAC,EAAE,MAAM,CAAC;IACrB,aAAa,CAAC,EAAE,MAAM,CAAC;CACvB;AAOD,qBAAa,eAAe;;gBAMf,MAAM,CAAC,EAAE,qBAAqB;IAO1C,qEAAqE;IACrE,KAAK,CAAC,EAAE,EAAE,MAAM,EAAE,UAAU,EAAE,MAAM,GAAG,OAAO;IAW9C,+BAA+B;IAC/B,aAAa,CAAC,EAAE,EAAE,MAAM,EAAE,UAAU,EAAE,MAAM,GAAG,IAAI;IAQnD,0CAA0C;IAC1C,aAAa,CAAC,EAAE,EAAE,MAAM,EAAE,UAAU,EAAE,MAAM,GAAG,IAAI;IAOnD,gDAAgD;IAChD,SAAS,CAAC,EAAE,EAAE,MAAM,EAAE,UAAU,EAAE,MAAM,GAAG,MAAM;CAmCjD"}
|
package/dist/AuthRateLimiter.js
CHANGED
|
@@ -6,17 +6,17 @@
|
|
|
6
6
|
* @implements MISS-26
|
|
7
7
|
*/
|
|
8
8
|
export class AuthRateLimiter {
|
|
9
|
-
maxAttempts;
|
|
10
|
-
window;
|
|
11
|
-
store = new Map();
|
|
12
|
-
maxStoreSize = 100_000;
|
|
9
|
+
#maxAttempts;
|
|
10
|
+
#window;
|
|
11
|
+
#store = new Map();
|
|
12
|
+
#maxStoreSize = 100_000;
|
|
13
13
|
constructor(config) {
|
|
14
|
-
this
|
|
15
|
-
if (this
|
|
16
|
-
this
|
|
17
|
-
this
|
|
18
|
-
if (this
|
|
19
|
-
this
|
|
14
|
+
this.#maxAttempts = config?.maxAttempts ?? 5;
|
|
15
|
+
if (this.#maxAttempts <= 0)
|
|
16
|
+
this.#maxAttempts = 1;
|
|
17
|
+
this.#window = (config?.windowSeconds ?? 900) * 1000;
|
|
18
|
+
if (this.#window <= 0)
|
|
19
|
+
this.#window = 900_000; // prevent bypass via 0/negative
|
|
20
20
|
}
|
|
21
21
|
/** Check if an attempt is allowed. Returns false if rate limited. */
|
|
22
22
|
check(ip, identifier) {
|
|
@@ -26,55 +26,55 @@ export class AuthRateLimiter {
|
|
|
26
26
|
// Dual key: limit both by IP and by identifier (email)
|
|
27
27
|
const ipKey = `ip:${ipNorm}`;
|
|
28
28
|
const idKey = `id:${identifierNorm}`;
|
|
29
|
-
return this
|
|
29
|
+
return this.#checkKey(ipKey, now) && this.#checkKey(idKey, now);
|
|
30
30
|
}
|
|
31
31
|
/** Record a failed attempt. */
|
|
32
32
|
recordFailure(ip, identifier) {
|
|
33
33
|
const now = Date.now();
|
|
34
34
|
const ipNorm = normalizeIp(ip);
|
|
35
35
|
const identifierNorm = normalizeIdentifier(identifier);
|
|
36
|
-
this
|
|
37
|
-
this
|
|
36
|
+
this.#increment(`ip:${ipNorm}`, now);
|
|
37
|
+
this.#increment(`id:${identifierNorm}`, now);
|
|
38
38
|
}
|
|
39
39
|
/** Reset counters on successful login. */
|
|
40
40
|
recordSuccess(ip, identifier) {
|
|
41
41
|
const ipNorm = normalizeIp(ip);
|
|
42
42
|
const identifierNorm = normalizeIdentifier(identifier);
|
|
43
|
-
this
|
|
44
|
-
this
|
|
43
|
+
this.#store.delete(`ip:${ipNorm}`);
|
|
44
|
+
this.#store.delete(`id:${identifierNorm}`);
|
|
45
45
|
}
|
|
46
46
|
/** Get remaining attempts for an identifier. */
|
|
47
47
|
remaining(ip, identifier) {
|
|
48
48
|
const ipNorm = normalizeIp(ip);
|
|
49
49
|
const identifierNorm = normalizeIdentifier(identifier);
|
|
50
|
-
const ipEntry = this
|
|
51
|
-
const idEntry = this
|
|
50
|
+
const ipEntry = this.#store.get(`ip:${ipNorm}`);
|
|
51
|
+
const idEntry = this.#store.get(`id:${identifierNorm}`);
|
|
52
52
|
const ipRemaining = ipEntry
|
|
53
|
-
? Math.max(0, this
|
|
54
|
-
: this
|
|
53
|
+
? Math.max(0, this.#maxAttempts - ipEntry.count)
|
|
54
|
+
: this.#maxAttempts;
|
|
55
55
|
const idRemaining = idEntry
|
|
56
|
-
? Math.max(0, this
|
|
57
|
-
: this
|
|
56
|
+
? Math.max(0, this.#maxAttempts - idEntry.count)
|
|
57
|
+
: this.#maxAttempts;
|
|
58
58
|
return Math.min(ipRemaining, idRemaining);
|
|
59
59
|
}
|
|
60
|
-
checkKey(key, now) {
|
|
61
|
-
const entry = this
|
|
60
|
+
#checkKey(key, now) {
|
|
61
|
+
const entry = this.#store.get(key);
|
|
62
62
|
if (!entry || entry.resetAt < now)
|
|
63
63
|
return true;
|
|
64
|
-
return entry.count < this
|
|
64
|
+
return entry.count < this.#maxAttempts;
|
|
65
65
|
}
|
|
66
|
-
increment(key, now) {
|
|
66
|
+
#increment(key, now) {
|
|
67
67
|
// Evict expired entries when store grows too large (prevent OOM)
|
|
68
|
-
if (this
|
|
69
|
-
for (const [k, v] of this
|
|
68
|
+
if (this.#store.size > this.#maxStoreSize) {
|
|
69
|
+
for (const [k, v] of this.#store) {
|
|
70
70
|
if (v.resetAt < now)
|
|
71
|
-
this
|
|
71
|
+
this.#store.delete(k);
|
|
72
72
|
}
|
|
73
73
|
}
|
|
74
|
-
let entry = this
|
|
74
|
+
let entry = this.#store.get(key);
|
|
75
75
|
if (!entry || entry.resetAt < now) {
|
|
76
|
-
entry = { count: 0, resetAt: now + this
|
|
77
|
-
this
|
|
76
|
+
entry = { count: 0, resetAt: now + this.#window };
|
|
77
|
+
this.#store.set(key, entry);
|
|
78
78
|
}
|
|
79
79
|
entry.count++;
|
|
80
80
|
}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"AuthRateLimiter.js","sourceRoot":"","sources":["../src/AuthRateLimiter.ts"],"names":[],"mappings":"AAAA;;;;;;GAMG;AAYH,MAAM,OAAO,eAAe;
|
|
1
|
+
{"version":3,"file":"AuthRateLimiter.js","sourceRoot":"","sources":["../src/AuthRateLimiter.ts"],"names":[],"mappings":"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"}
|
|
@@ -22,7 +22,7 @@ export interface RefreshTokenDriver {
|
|
|
22
22
|
}
|
|
23
23
|
/** In-memory driver for development. */
|
|
24
24
|
export declare class MemoryRefreshTokenDriver implements RefreshTokenDriver {
|
|
25
|
-
private
|
|
25
|
+
#private;
|
|
26
26
|
store(token: StoredRefreshToken): Promise<void>;
|
|
27
27
|
find(token: string): Promise<StoredRefreshToken | null>;
|
|
28
28
|
revoke(token: string): Promise<void>;
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"RefreshTokenStore.d.ts","sourceRoot":"","sources":["../src/RefreshTokenStore.ts"],"names":[],"mappings":"AAAA;;;;;;;;GAQG;AAIH,MAAM,WAAW,kBAAkB;IAClC,KAAK,EAAE,MAAM,CAAC;IACd,MAAM,EAAE,MAAM,GAAG,MAAM,CAAC;IACxB,SAAS,EAAE,MAAM,CAAC;IAClB,SAAS,EAAE,MAAM,CAAC;CAClB;AAED,MAAM,WAAW,kBAAkB;IAClC,KAAK,CAAC,KAAK,EAAE,kBAAkB,GAAG,OAAO,CAAC,IAAI,CAAC,CAAC;IAChD,IAAI,CAAC,KAAK,EAAE,MAAM,GAAG,OAAO,CAAC,kBAAkB,GAAG,IAAI,CAAC,CAAC;IACxD,MAAM,CAAC,KAAK,EAAE,MAAM,GAAG,OAAO,CAAC,IAAI,CAAC,CAAC;IACrC,gBAAgB,CAAC,MAAM,EAAE,MAAM,GAAG,MAAM,GAAG,OAAO,CAAC,IAAI,CAAC,CAAC;IACzD,OAAO,IAAI,OAAO,CAAC,IAAI,CAAC,CAAC;CACzB;AAED,wCAAwC;AACxC,qBAAa,wBAAyB,YAAW,kBAAkB
|
|
1
|
+
{"version":3,"file":"RefreshTokenStore.d.ts","sourceRoot":"","sources":["../src/RefreshTokenStore.ts"],"names":[],"mappings":"AAAA;;;;;;;;GAQG;AAIH,MAAM,WAAW,kBAAkB;IAClC,KAAK,EAAE,MAAM,CAAC;IACd,MAAM,EAAE,MAAM,GAAG,MAAM,CAAC;IACxB,SAAS,EAAE,MAAM,CAAC;IAClB,SAAS,EAAE,MAAM,CAAC;CAClB;AAED,MAAM,WAAW,kBAAkB;IAClC,KAAK,CAAC,KAAK,EAAE,kBAAkB,GAAG,OAAO,CAAC,IAAI,CAAC,CAAC;IAChD,IAAI,CAAC,KAAK,EAAE,MAAM,GAAG,OAAO,CAAC,kBAAkB,GAAG,IAAI,CAAC,CAAC;IACxD,MAAM,CAAC,KAAK,EAAE,MAAM,GAAG,OAAO,CAAC,IAAI,CAAC,CAAC;IACrC,gBAAgB,CAAC,MAAM,EAAE,MAAM,GAAG,MAAM,GAAG,OAAO,CAAC,IAAI,CAAC,CAAC;IACzD,OAAO,IAAI,OAAO,CAAC,IAAI,CAAC,CAAC;CACzB;AAED,wCAAwC;AACxC,qBAAa,wBAAyB,YAAW,kBAAkB;;IAG5D,KAAK,CAAC,KAAK,EAAE,kBAAkB,GAAG,OAAO,CAAC,IAAI,CAAC;IAI/C,IAAI,CAAC,KAAK,EAAE,MAAM,GAAG,OAAO,CAAC,kBAAkB,GAAG,IAAI,CAAC;IAUvD,MAAM,CAAC,KAAK,EAAE,MAAM,GAAG,OAAO,CAAC,IAAI,CAAC;IAIpC,gBAAgB,CAAC,MAAM,EAAE,MAAM,GAAG,MAAM,GAAG,OAAO,CAAC,IAAI,CAAC;IAMxD,OAAO,IAAI,OAAO,CAAC,IAAI,CAAC;CAM9B;AAED,wCAAwC;AACxC,wBAAgB,oBAAoB,IAAI,MAAM,CAE7C"}
|
|
@@ -10,34 +10,34 @@
|
|
|
10
10
|
import { randomBytes } from "node:crypto";
|
|
11
11
|
/** In-memory driver for development. */
|
|
12
12
|
export class MemoryRefreshTokenDriver {
|
|
13
|
-
tokens = new Map();
|
|
13
|
+
#tokens = new Map();
|
|
14
14
|
async store(token) {
|
|
15
|
-
this
|
|
15
|
+
this.#tokens.set(token.token, token);
|
|
16
16
|
}
|
|
17
17
|
async find(token) {
|
|
18
|
-
const stored = this
|
|
18
|
+
const stored = this.#tokens.get(token);
|
|
19
19
|
if (!stored)
|
|
20
20
|
return null;
|
|
21
21
|
if (stored.expiresAt < Date.now()) {
|
|
22
|
-
this
|
|
22
|
+
this.#tokens.delete(token);
|
|
23
23
|
return null;
|
|
24
24
|
}
|
|
25
25
|
return stored;
|
|
26
26
|
}
|
|
27
27
|
async revoke(token) {
|
|
28
|
-
this
|
|
28
|
+
this.#tokens.delete(token);
|
|
29
29
|
}
|
|
30
30
|
async revokeAllForUser(userId) {
|
|
31
|
-
for (const [key, val] of this
|
|
31
|
+
for (const [key, val] of this.#tokens) {
|
|
32
32
|
if (val.userId === userId)
|
|
33
|
-
this
|
|
33
|
+
this.#tokens.delete(key);
|
|
34
34
|
}
|
|
35
35
|
}
|
|
36
36
|
async cleanup() {
|
|
37
37
|
const now = Date.now();
|
|
38
|
-
for (const [key, val] of this
|
|
38
|
+
for (const [key, val] of this.#tokens) {
|
|
39
39
|
if (val.expiresAt < now)
|
|
40
|
-
this
|
|
40
|
+
this.#tokens.delete(key);
|
|
41
41
|
}
|
|
42
42
|
}
|
|
43
43
|
}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"RefreshTokenStore.js","sourceRoot":"","sources":["../src/RefreshTokenStore.ts"],"names":[],"mappings":"AAAA;;;;;;;;GAQG;AAEH,OAAO,EAAE,WAAW,EAAE,MAAM,aAAa,CAAC;AAiB1C,wCAAwC;AACxC,MAAM,OAAO,wBAAwB;
|
|
1
|
+
{"version":3,"file":"RefreshTokenStore.js","sourceRoot":"","sources":["../src/RefreshTokenStore.ts"],"names":[],"mappings":"AAAA;;;;;;;;GAQG;AAEH,OAAO,EAAE,WAAW,EAAE,MAAM,aAAa,CAAC;AAiB1C,wCAAwC;AACxC,MAAM,OAAO,wBAAwB;IACpC,OAAO,GAAoC,IAAI,GAAG,EAAE,CAAC;IAErD,KAAK,CAAC,KAAK,CAAC,KAAyB;QACpC,IAAI,CAAC,OAAO,CAAC,GAAG,CAAC,KAAK,CAAC,KAAK,EAAE,KAAK,CAAC,CAAC;IACtC,CAAC;IAED,KAAK,CAAC,IAAI,CAAC,KAAa;QACvB,MAAM,MAAM,GAAG,IAAI,CAAC,OAAO,CAAC,GAAG,CAAC,KAAK,CAAC,CAAC;QACvC,IAAI,CAAC,MAAM;YAAE,OAAO,IAAI,CAAC;QACzB,IAAI,MAAM,CAAC,SAAS,GAAG,IAAI,CAAC,GAAG,EAAE,EAAE,CAAC;YACnC,IAAI,CAAC,OAAO,CAAC,MAAM,CAAC,KAAK,CAAC,CAAC;YAC3B,OAAO,IAAI,CAAC;QACb,CAAC;QACD,OAAO,MAAM,CAAC;IACf,CAAC;IAED,KAAK,CAAC,MAAM,CAAC,KAAa;QACzB,IAAI,CAAC,OAAO,CAAC,MAAM,CAAC,KAAK,CAAC,CAAC;IAC5B,CAAC;IAED,KAAK,CAAC,gBAAgB,CAAC,MAAuB;QAC7C,KAAK,MAAM,CAAC,GAAG,EAAE,GAAG,CAAC,IAAI,IAAI,CAAC,OAAO,EAAE,CAAC;YACvC,IAAI,GAAG,CAAC,MAAM,KAAK,MAAM;gBAAE,IAAI,CAAC,OAAO,CAAC,MAAM,CAAC,GAAG,CAAC,CAAC;QACrD,CAAC;IACF,CAAC;IAED,KAAK,CAAC,OAAO;QACZ,MAAM,GAAG,GAAG,IAAI,CAAC,GAAG,EAAE,CAAC;QACvB,KAAK,MAAM,CAAC,GAAG,EAAE,GAAG,CAAC,IAAI,IAAI,CAAC,OAAO,EAAE,CAAC;YACvC,IAAI,GAAG,CAAC,SAAS,GAAG,GAAG;gBAAE,IAAI,CAAC,OAAO,CAAC,MAAM,CAAC,GAAG,CAAC,CAAC;QACnD,CAAC;IACF,CAAC;CACD;AAED,wCAAwC;AACxC,MAAM,UAAU,oBAAoB;IACnC,OAAO,WAAW,CAAC,EAAE,CAAC,CAAC,QAAQ,CAAC,WAAW,CAAC,CAAC;AAC9C,CAAC"}
|
package/dist/TokenBlacklist.d.ts
CHANGED
|
@@ -16,7 +16,7 @@ export interface BlacklistDriver {
|
|
|
16
16
|
}
|
|
17
17
|
/** In-memory blacklist for development. */
|
|
18
18
|
export declare class MemoryBlacklistDriver implements BlacklistDriver {
|
|
19
|
-
private
|
|
19
|
+
#private;
|
|
20
20
|
add(jti: string, expiresAt: number): Promise<void>;
|
|
21
21
|
has(jti: string): Promise<boolean>;
|
|
22
22
|
cleanup(): Promise<void>;
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"TokenBlacklist.d.ts","sourceRoot":"","sources":["../src/TokenBlacklist.ts"],"names":[],"mappings":"AAAA;;;;;;GAMG;AAEH,MAAM,WAAW,eAAe;IAC/B,GAAG,CAAC,GAAG,EAAE,MAAM,EAAE,SAAS,EAAE,MAAM,GAAG,OAAO,CAAC,IAAI,CAAC,CAAC;IACnD,GAAG,CAAC,GAAG,EAAE,MAAM,GAAG,OAAO,CAAC,OAAO,CAAC,CAAC;IACnC;;;OAGG;IACH,OAAO,CAAC,IAAI,OAAO,CAAC,IAAI,CAAC,CAAC;CAC1B;AAED,2CAA2C;AAC3C,qBAAa,qBAAsB,YAAW,eAAe
|
|
1
|
+
{"version":3,"file":"TokenBlacklist.d.ts","sourceRoot":"","sources":["../src/TokenBlacklist.ts"],"names":[],"mappings":"AAAA;;;;;;GAMG;AAEH,MAAM,WAAW,eAAe;IAC/B,GAAG,CAAC,GAAG,EAAE,MAAM,EAAE,SAAS,EAAE,MAAM,GAAG,OAAO,CAAC,IAAI,CAAC,CAAC;IACnD,GAAG,CAAC,GAAG,EAAE,MAAM,GAAG,OAAO,CAAC,OAAO,CAAC,CAAC;IACnC;;;OAGG;IACH,OAAO,CAAC,IAAI,OAAO,CAAC,IAAI,CAAC,CAAC;CAC1B;AAED,2CAA2C;AAC3C,qBAAa,qBAAsB,YAAW,eAAe;;IAGtD,GAAG,CAAC,GAAG,EAAE,MAAM,EAAE,SAAS,EAAE,MAAM,GAAG,OAAO,CAAC,IAAI,CAAC;IAIlD,GAAG,CAAC,GAAG,EAAE,MAAM,GAAG,OAAO,CAAC,OAAO,CAAC;IAUlC,OAAO,IAAI,OAAO,CAAC,IAAI,CAAC;CAM9B;AAED,qBAAa,cAAc;IACd,OAAO,CAAC,MAAM;gBAAN,MAAM,EAAE,eAAe;IAE3C,uCAAuC;IACjC,MAAM,CAAC,GAAG,EAAE,MAAM,EAAE,SAAS,EAAE,MAAM,GAAG,OAAO,CAAC,IAAI,CAAC;IAI3D,2CAA2C;IACrC,SAAS,CAAC,GAAG,EAAE,MAAM,GAAG,OAAO,CAAC,OAAO,CAAC;IAI9C,2EAA2E;IACrE,OAAO,IAAI,OAAO,CAAC,IAAI,CAAC;CAG9B"}
|
package/dist/TokenBlacklist.js
CHANGED
|
@@ -7,25 +7,25 @@
|
|
|
7
7
|
*/
|
|
8
8
|
/** In-memory blacklist for development. */
|
|
9
9
|
export class MemoryBlacklistDriver {
|
|
10
|
-
entries = new Map();
|
|
10
|
+
#entries = new Map();
|
|
11
11
|
async add(jti, expiresAt) {
|
|
12
|
-
this
|
|
12
|
+
this.#entries.set(jti, expiresAt);
|
|
13
13
|
}
|
|
14
14
|
async has(jti) {
|
|
15
|
-
const expiresAt = this
|
|
15
|
+
const expiresAt = this.#entries.get(jti);
|
|
16
16
|
if (expiresAt === undefined)
|
|
17
17
|
return false;
|
|
18
18
|
if (expiresAt < Date.now()) {
|
|
19
|
-
this
|
|
19
|
+
this.#entries.delete(jti);
|
|
20
20
|
return false;
|
|
21
21
|
}
|
|
22
22
|
return true;
|
|
23
23
|
}
|
|
24
24
|
async cleanup() {
|
|
25
25
|
const now = Date.now();
|
|
26
|
-
for (const [jti, exp] of this
|
|
26
|
+
for (const [jti, exp] of this.#entries) {
|
|
27
27
|
if (exp < now)
|
|
28
|
-
this
|
|
28
|
+
this.#entries.delete(jti);
|
|
29
29
|
}
|
|
30
30
|
}
|
|
31
31
|
}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"TokenBlacklist.js","sourceRoot":"","sources":["../src/TokenBlacklist.ts"],"names":[],"mappings":"AAAA;;;;;;GAMG;AAYH,2CAA2C;AAC3C,MAAM,OAAO,qBAAqB;
|
|
1
|
+
{"version":3,"file":"TokenBlacklist.js","sourceRoot":"","sources":["../src/TokenBlacklist.ts"],"names":[],"mappings":"AAAA;;;;;;GAMG;AAYH,2CAA2C;AAC3C,MAAM,OAAO,qBAAqB;IACjC,QAAQ,GAAwB,IAAI,GAAG,EAAE,CAAC;IAE1C,KAAK,CAAC,GAAG,CAAC,GAAW,EAAE,SAAiB;QACvC,IAAI,CAAC,QAAQ,CAAC,GAAG,CAAC,GAAG,EAAE,SAAS,CAAC,CAAC;IACnC,CAAC;IAED,KAAK,CAAC,GAAG,CAAC,GAAW;QACpB,MAAM,SAAS,GAAG,IAAI,CAAC,QAAQ,CAAC,GAAG,CAAC,GAAG,CAAC,CAAC;QACzC,IAAI,SAAS,KAAK,SAAS;YAAE,OAAO,KAAK,CAAC;QAC1C,IAAI,SAAS,GAAG,IAAI,CAAC,GAAG,EAAE,EAAE,CAAC;YAC5B,IAAI,CAAC,QAAQ,CAAC,MAAM,CAAC,GAAG,CAAC,CAAC;YAC1B,OAAO,KAAK,CAAC;QACd,CAAC;QACD,OAAO,IAAI,CAAC;IACb,CAAC;IAED,KAAK,CAAC,OAAO;QACZ,MAAM,GAAG,GAAG,IAAI,CAAC,GAAG,EAAE,CAAC;QACvB,KAAK,MAAM,CAAC,GAAG,EAAE,GAAG,CAAC,IAAI,IAAI,CAAC,QAAQ,EAAE,CAAC;YACxC,IAAI,GAAG,GAAG,GAAG;gBAAE,IAAI,CAAC,QAAQ,CAAC,MAAM,CAAC,GAAG,CAAC,CAAC;QAC1C,CAAC;IACF,CAAC;CACD;AAED,MAAM,OAAO,cAAc;IACN;IAApB,YAAoB,MAAuB;QAAvB,WAAM,GAAN,MAAM,CAAiB;IAAG,CAAC;IAE/C,uCAAuC;IACvC,KAAK,CAAC,MAAM,CAAC,GAAW,EAAE,SAAiB;QAC1C,MAAM,IAAI,CAAC,MAAM,CAAC,GAAG,CAAC,GAAG,EAAE,SAAS,CAAC,CAAC;IACvC,CAAC;IAED,2CAA2C;IAC3C,KAAK,CAAC,SAAS,CAAC,GAAW;QAC1B,OAAO,IAAI,CAAC,MAAM,CAAC,GAAG,CAAC,GAAG,CAAC,CAAC;IAC7B,CAAC;IAED,2EAA2E;IAC3E,KAAK,CAAC,OAAO;QACZ,MAAM,IAAI,CAAC,MAAM,CAAC,OAAO,EAAE,EAAE,CAAC;IAC/B,CAAC;CACD"}
|
package/dist/augmentations.d.ts
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"augmentations.d.ts","sourceRoot":"","sources":["../src/augmentations.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;GAcG;AAIH,OAAO,KAAK,EAAE,aAAa,EAAE,MAAM,oBAAoB,CAAC;AAExD,OAAO,QAAQ,kBAAkB,CAAC;IACjC,UAAU,cAAc;QACvB,CAAC,SAAS,EAAE,MAAM,GAAG,aAAa,CAAC;KACnC;CACD
|
|
1
|
+
{"version":3,"file":"augmentations.d.ts","sourceRoot":"","sources":["../src/augmentations.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;GAcG;AAIH,OAAO,KAAK,EAAE,aAAa,EAAE,MAAM,oBAAoB,CAAC;AAExD,OAAO,QAAQ,kBAAkB,CAAC;IACjC,UAAU,cAAc;QACvB,CAAC,SAAS,EAAE,MAAM,GAAG,aAAa,CAAC;KACnC;CACD"}
|
|
@@ -17,6 +17,12 @@ export declare class AuthorizationResponse {
|
|
|
17
17
|
identifier: string;
|
|
18
18
|
data?: Record<string, unknown>;
|
|
19
19
|
};
|
|
20
|
+
/**
|
|
21
|
+
* Private because a response is only ever built through allow() / deny(), so the pair stays consistent.
|
|
22
|
+
*
|
|
23
|
+
* `private` and not `#`: a private CONSTRUCTOR has no native form. It is the
|
|
24
|
+
* one place the keyword expresses something `#` cannot.
|
|
25
|
+
*/
|
|
20
26
|
private constructor();
|
|
21
27
|
/** Authorized response (no status). */
|
|
22
28
|
static allow(): AuthorizationResponse;
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"AuthorizationResponse.d.ts","sourceRoot":"","sources":["../../src/bouncer/AuthorizationResponse.ts"],"names":[],"mappings":"AAAA;;;;;;;;;GASG;AACH,qBAAa,qBAAqB;IACjC,QAAQ,CAAC,UAAU,EAAE,OAAO,CAAC;IAC7B,OAAO,CAAC,EAAE,MAAM,CAAC;IACjB,MAAM,CAAC,EAAE,MAAM,CAAC;IAChB,yEAAyE;IACzE,WAAW,CAAC,EAAE;QAAE,UAAU,EAAE,MAAM,CAAC;QAAC,IAAI,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAAA;KAAE,CAAC;IAErE,OAAO;IAMP,uCAAuC;IACvC,MAAM,CAAC,KAAK,IAAI,qBAAqB;IAIrC;;;;OAIG;IACH,MAAM,CAAC,IAAI,CAAC,OAAO,CAAC,EAAE,MAAM,EAAE,MAAM,CAAC,EAAE,MAAM,GAAG,qBAAqB;IAIrE;;;OAGG;IACH,CAAC,CAAC,UAAU,EAAE,MAAM,EAAE,IAAI,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,GAAG,IAAI;CAI3D"}
|
|
1
|
+
{"version":3,"file":"AuthorizationResponse.d.ts","sourceRoot":"","sources":["../../src/bouncer/AuthorizationResponse.ts"],"names":[],"mappings":"AAAA;;;;;;;;;GASG;AACH,qBAAa,qBAAqB;IACjC,QAAQ,CAAC,UAAU,EAAE,OAAO,CAAC;IAC7B,OAAO,CAAC,EAAE,MAAM,CAAC;IACjB,MAAM,CAAC,EAAE,MAAM,CAAC;IAChB,yEAAyE;IACzE,WAAW,CAAC,EAAE;QAAE,UAAU,EAAE,MAAM,CAAC;QAAC,IAAI,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAAA;KAAE,CAAC;IAErE;;;;;OAKG;IACH,OAAO;IAMP,uCAAuC;IACvC,MAAM,CAAC,KAAK,IAAI,qBAAqB;IAIrC;;;;OAIG;IACH,MAAM,CAAC,IAAI,CAAC,OAAO,CAAC,EAAE,MAAM,EAAE,MAAM,CAAC,EAAE,MAAM,GAAG,qBAAqB;IAIrE;;;OAGG;IACH,CAAC,CAAC,UAAU,EAAE,MAAM,EAAE,IAAI,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,GAAG,IAAI;CAI3D"}
|
|
@@ -14,6 +14,12 @@ export class AuthorizationResponse {
|
|
|
14
14
|
status;
|
|
15
15
|
/** i18n binding set via {@link t} (Adonis `AuthorizationResponse.t`). */
|
|
16
16
|
translation;
|
|
17
|
+
/**
|
|
18
|
+
* Private because a response is only ever built through allow() / deny(), so the pair stays consistent.
|
|
19
|
+
*
|
|
20
|
+
* `private` and not `#`: a private CONSTRUCTOR has no native form. It is the
|
|
21
|
+
* one place the keyword expresses something `#` cannot.
|
|
22
|
+
*/
|
|
17
23
|
constructor(authorized, message, status) {
|
|
18
24
|
this.authorized = authorized;
|
|
19
25
|
this.message = message;
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"AuthorizationResponse.js","sourceRoot":"","sources":["../../src/bouncer/AuthorizationResponse.ts"],"names":[],"mappings":"AAAA;;;;;;;;;GASG;AACH,MAAM,OAAO,qBAAqB;IACxB,UAAU,CAAU;IAC7B,OAAO,CAAU;IACjB,MAAM,CAAU;IAChB,yEAAyE;IACzE,WAAW,CAA0D;IAErE,YAAoB,UAAmB,EAAE,OAAgB,EAAE,MAAe;QACzE,IAAI,CAAC,UAAU,GAAG,UAAU,CAAC;QAC7B,IAAI,CAAC,OAAO,GAAG,OAAO,CAAC;QACvB,IAAI,CAAC,MAAM,GAAG,MAAM,CAAC;IACtB,CAAC;IAED,uCAAuC;IACvC,MAAM,CAAC,KAAK;QACX,OAAO,IAAI,qBAAqB,CAAC,IAAI,CAAC,CAAC;IACxC,CAAC;IAED;;;;OAIG;IACH,MAAM,CAAC,IAAI,CAAC,OAAgB,EAAE,MAAe;QAC5C,OAAO,IAAI,qBAAqB,CAAC,KAAK,EAAE,OAAO,EAAE,MAAM,CAAC,CAAC;IAC1D,CAAC;IAED;;;OAGG;IACH,CAAC,CAAC,UAAkB,EAAE,IAA8B;QACnD,IAAI,CAAC,WAAW,GAAG,EAAE,UAAU,EAAE,IAAI,EAAE,CAAC;QACxC,OAAO,IAAI,CAAC;IACb,CAAC;CACD"}
|
|
1
|
+
{"version":3,"file":"AuthorizationResponse.js","sourceRoot":"","sources":["../../src/bouncer/AuthorizationResponse.ts"],"names":[],"mappings":"AAAA;;;;;;;;;GASG;AACH,MAAM,OAAO,qBAAqB;IACxB,UAAU,CAAU;IAC7B,OAAO,CAAU;IACjB,MAAM,CAAU;IAChB,yEAAyE;IACzE,WAAW,CAA0D;IAErE;;;;;OAKG;IACH,YAAoB,UAAmB,EAAE,OAAgB,EAAE,MAAe;QACzE,IAAI,CAAC,UAAU,GAAG,UAAU,CAAC;QAC7B,IAAI,CAAC,OAAO,GAAG,OAAO,CAAC;QACvB,IAAI,CAAC,MAAM,GAAG,MAAM,CAAC;IACtB,CAAC;IAED,uCAAuC;IACvC,MAAM,CAAC,KAAK;QACX,OAAO,IAAI,qBAAqB,CAAC,IAAI,CAAC,CAAC;IACxC,CAAC;IAED;;;;OAIG;IACH,MAAM,CAAC,IAAI,CAAC,OAAgB,EAAE,MAAe;QAC5C,OAAO,IAAI,qBAAqB,CAAC,KAAK,EAAE,OAAO,EAAE,MAAM,CAAC,CAAC;IAC1D,CAAC;IAED;;;OAGG;IACH,CAAC,CAAC,UAAkB,EAAE,IAA8B;QACnD,IAAI,CAAC,WAAW,GAAG,EAAE,UAAU,EAAE,IAAI,EAAE,CAAC;QACxC,OAAO,IAAI,CAAC;IACb,CAAC;CACD"}
|
|
@@ -0,0 +1,8 @@
|
|
|
1
|
+
export declare function jwtSign(payload: string, secret: string): string;
|
|
2
|
+
export declare function jwtVerify(token: string, secret: string): string;
|
|
3
|
+
export declare function constantTimeEq(a: string, b: string): boolean;
|
|
4
|
+
export declare function hmacSign(data: string, secret: string): string;
|
|
5
|
+
export declare function hmacVerify(data: string, signature: string, secret: string): boolean;
|
|
6
|
+
export declare function randomBytes(len: number): string;
|
|
7
|
+
export declare function randomHex(len: number): string;
|
|
8
|
+
//# sourceMappingURL=generated.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"generated.d.ts","sourceRoot":"","sources":["../../src/native/generated.ts"],"names":[],"mappings":"AAMA,MAAM,CAAC,OAAO,UAAU,OAAO,CAAC,OAAO,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM,GAAG,MAAM,CAAC;AAEzE,MAAM,CAAC,OAAO,UAAU,SAAS,CAAC,KAAK,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM,GAAG,MAAM,CAAC;AAEzE,MAAM,CAAC,OAAO,UAAU,cAAc,CAAC,CAAC,EAAE,MAAM,EAAE,CAAC,EAAE,MAAM,GAAG,OAAO,CAAC;AAEtE,MAAM,CAAC,OAAO,UAAU,QAAQ,CAAC,IAAI,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM,GAAG,MAAM,CAAC;AAEvE,MAAM,CAAC,OAAO,UAAU,UAAU,CACjC,IAAI,EAAE,MAAM,EACZ,SAAS,EAAE,MAAM,EACjB,MAAM,EAAE,MAAM,GACZ,OAAO,CAAC;AAEX,MAAM,CAAC,OAAO,UAAU,WAAW,CAAC,GAAG,EAAE,MAAM,GAAG,MAAM,CAAC;AAEzD,MAAM,CAAC,OAAO,UAAU,SAAS,CAAC,GAAG,EAAE,MAAM,GAAG,MAAM,CAAC"}
|
|
@@ -0,0 +1,7 @@
|
|
|
1
|
+
// GENERATED FROM THE RUST — do not edit.
|
|
2
|
+
//
|
|
3
|
+
// Produced by scripts/generate-napi-types.mjs from napi-derive's type-def
|
|
4
|
+
// output. Editing this file by hand puts it back where it started: a
|
|
5
|
+
// description that can disagree with the code it describes.
|
|
6
|
+
export {};
|
|
7
|
+
//# sourceMappingURL=generated.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"generated.js","sourceRoot":"","sources":["../../src/native/generated.ts"],"names":[],"mappings":"AAAA,yCAAyC;AACzC,EAAE;AACF,0EAA0E;AAC1E,qEAAqE;AACrE,4DAA4D"}
|
package/dist/native.d.ts
CHANGED
|
@@ -1,12 +1,11 @@
|
|
|
1
|
-
|
|
2
|
-
|
|
3
|
-
|
|
4
|
-
|
|
5
|
-
|
|
6
|
-
|
|
7
|
-
|
|
8
|
-
|
|
9
|
-
}
|
|
1
|
+
/**
|
|
2
|
+
* The engine's surface, as the Rust declares it.
|
|
3
|
+
*
|
|
4
|
+
* Derived from `./native/generated.js` — written by `pnpm build:napi-types`
|
|
5
|
+
* from napi-derive's own `type-def` output — rather than restated here, where
|
|
6
|
+
* nothing would notice a `pub fn` gaining a parameter or changing its return.
|
|
7
|
+
*/
|
|
8
|
+
export type NativeWarden = typeof import("./native/generated.js");
|
|
10
9
|
/** Whether the Rust NAPI engine loaded. */
|
|
11
10
|
export declare function isNativeAvailable(): boolean;
|
|
12
11
|
/** Get the native engine. Returns undefined if not loaded — caller must throw. */
|
package/dist/native.d.ts.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"native.d.ts","sourceRoot":"","sources":["../src/native.ts"],"names":[],"mappings":"AAuBA
|
|
1
|
+
{"version":3,"file":"native.d.ts","sourceRoot":"","sources":["../src/native.ts"],"names":[],"mappings":"AAuBA;;;;;;GAMG;AACH,MAAM,MAAM,YAAY,GAAG,cAAc,uBAAuB,CAAC,CAAC;AAalE,2CAA2C;AAC3C,wBAAgB,iBAAiB,IAAI,OAAO,CAE3C;AAED,kFAAkF;AAClF,wBAAgB,YAAY,IAAI,YAAY,GAAG,SAAS,CAEvD"}
|
package/dist/native.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"native.js","sourceRoot":"","sources":["../src/native.ts"],"names":[],"mappings":"AAAA;;;;;;GAMG;AACH,OAAO,EAAE,aAAa,EAAE,MAAM,aAAa,CAAC;AAC5C,OAAO,EAAE,OAAO,EAAE,IAAI,EAAE,MAAM,WAAW,CAAC;AAC1C,OAAO,EAAE,IAAI,EAAE,QAAQ,EAAE,MAAM,cAAc,CAAC;AAC9C,OAAO,EAAE,aAAa,EAAE,MAAM,UAAU,CAAC;AAEzC,MAAM,WAAW,GAAG,aAAa,CAAC,MAAM,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC;AACnD,MAAM,UAAU,GAAG,OAAO,CAAC,aAAa,CAAC,MAAM,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC,CAAC;AAE3D,MAAM,WAAW,GAA2B;IAC3C,WAAW,EAAE,eAAe;IAC5B,aAAa,EAAE,iBAAiB;IAChC,YAAY,EAAE,YAAY;IAC1B,cAAc,EAAE,cAAc;IAC9B,WAAW,EAAE,gBAAgB;CAC7B,CAAC;
|
|
1
|
+
{"version":3,"file":"native.js","sourceRoot":"","sources":["../src/native.ts"],"names":[],"mappings":"AAAA;;;;;;GAMG;AACH,OAAO,EAAE,aAAa,EAAE,MAAM,aAAa,CAAC;AAC5C,OAAO,EAAE,OAAO,EAAE,IAAI,EAAE,MAAM,WAAW,CAAC;AAC1C,OAAO,EAAE,IAAI,EAAE,QAAQ,EAAE,MAAM,cAAc,CAAC;AAC9C,OAAO,EAAE,aAAa,EAAE,MAAM,UAAU,CAAC;AAEzC,MAAM,WAAW,GAAG,aAAa,CAAC,MAAM,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC;AACnD,MAAM,UAAU,GAAG,OAAO,CAAC,aAAa,CAAC,MAAM,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC,CAAC;AAE3D,MAAM,WAAW,GAA2B;IAC3C,WAAW,EAAE,eAAe;IAC5B,aAAa,EAAE,iBAAiB;IAChC,YAAY,EAAE,YAAY;IAC1B,cAAc,EAAE,cAAc;IAC9B,WAAW,EAAE,gBAAgB;CAC7B,CAAC;AAWF,IAAI,MAAgC,CAAC;AAErC,IAAI,CAAC;IACJ,MAAM,MAAM,GAAG,WAAW,CAAC,GAAG,QAAQ,IAAI,IAAI,EAAE,CAAC,CAAC;IAClD,IAAI,MAAM,EAAE,CAAC;QACZ,MAAM,GAAG,WAAW,CAAC,IAAI,CAAC,UAAU,EAAE,YAAY,MAAM,OAAO,CAAC,CAAC,CAAC;IACnE,CAAC;AACF,CAAC;AAAC,MAAM,CAAC;IACR,kFAAkF;AACnF,CAAC;AAED,2CAA2C;AAC3C,MAAM,UAAU,iBAAiB;IAChC,OAAO,MAAM,KAAK,SAAS,CAAC;AAC7B,CAAC;AAED,kFAAkF;AAClF,MAAM,UAAU,YAAY;IAC3B,OAAO,MAAM,CAAC;AACf,CAAC"}
|