@nestjs-kitchen/authz 1.0.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 (66) hide show
  1. package/README.md +0 -0
  2. package/dist/authz.provider.d.ts +7 -0
  3. package/dist/authz.provider.js +34 -0
  4. package/dist/constants.d.ts +11 -0
  5. package/dist/constants.js +46 -0
  6. package/dist/errors.d.ts +12 -0
  7. package/dist/errors.js +60 -0
  8. package/dist/index.d.ts +21 -0
  9. package/dist/index.js +43 -0
  10. package/dist/jwt/extract-jwt.d.ts +71 -0
  11. package/dist/jwt/extract-jwt.js +162 -0
  12. package/dist/jwt/index.d.ts +16 -0
  13. package/dist/jwt/index.js +30 -0
  14. package/dist/jwt/jwt-authz-als.middleware.d.ts +28 -0
  15. package/dist/jwt/jwt-authz-als.middleware.js +83 -0
  16. package/dist/jwt/jwt-authz.guard.d.ts +60 -0
  17. package/dist/jwt/jwt-authz.guard.js +182 -0
  18. package/dist/jwt/jwt-authz.interface.d.ts +58 -0
  19. package/dist/jwt/jwt-authz.interface.js +94 -0
  20. package/dist/jwt/jwt-authz.module.d.ts +80 -0
  21. package/dist/jwt/jwt-authz.module.js +244 -0
  22. package/dist/jwt/jwt-authz.service.d.ts +33 -0
  23. package/dist/jwt/jwt-authz.service.js +144 -0
  24. package/dist/jwt/jwt-authz.strategy.d.ts +40 -0
  25. package/dist/jwt/jwt-authz.strategy.js +194 -0
  26. package/dist/session/index.d.ts +12 -0
  27. package/dist/session/index.js +27 -0
  28. package/dist/session/session-authz-als.middleware.d.ts +25 -0
  29. package/dist/session/session-authz-als.middleware.js +134 -0
  30. package/dist/session/session-authz.guard.d.ts +43 -0
  31. package/dist/session/session-authz.guard.js +142 -0
  32. package/dist/session/session-authz.interface.d.ts +23 -0
  33. package/dist/session/session-authz.interface.js +43 -0
  34. package/dist/session/session-authz.module.d.ts +71 -0
  35. package/dist/session/session-authz.module.js +245 -0
  36. package/dist/session/session-authz.service.d.ts +20 -0
  37. package/dist/session/session-authz.service.js +93 -0
  38. package/dist/session/session-authz.strategy.d.ts +24 -0
  39. package/dist/session/session-authz.strategy.js +107 -0
  40. package/dist/user.decorator.d.ts +6 -0
  41. package/dist/user.decorator.js +36 -0
  42. package/dist/utils/cookie-parsers.d.ts +12 -0
  43. package/dist/utils/cookie-parsers.js +77 -0
  44. package/dist/utils/create-authz-decorator-factory.d.ts +9 -0
  45. package/dist/utils/create-authz-decorator-factory.js +56 -0
  46. package/dist/utils/create-set-cookie-fn.d.ts +9 -0
  47. package/dist/utils/create-set-cookie-fn.js +46 -0
  48. package/dist/utils/generics.d.ts +6 -0
  49. package/dist/utils/generics.js +66 -0
  50. package/dist/utils/get-allow-anonymous.d.ts +11 -0
  51. package/dist/utils/get-allow-anonymous.js +30 -0
  52. package/dist/utils/get-als-store.d.ts +5 -0
  53. package/dist/utils/get-als-store.js +35 -0
  54. package/dist/utils/get-context-authz-meta-params-list.d.ts +12 -0
  55. package/dist/utils/get-context-authz-meta-params-list.js +36 -0
  56. package/dist/utils/get-passport-property.d.ts +3 -0
  57. package/dist/utils/get-passport-property.js +31 -0
  58. package/dist/utils/index.d.ts +16 -0
  59. package/dist/utils/index.js +41 -0
  60. package/dist/utils/merge-dynamic-module-configs.d.ts +5 -0
  61. package/dist/utils/merge-dynamic-module-configs.js +50 -0
  62. package/dist/utils/msgpackrs.d.ts +4 -0
  63. package/dist/utils/msgpackrs.js +37 -0
  64. package/dist/utils/types.d.ts +56 -0
  65. package/dist/utils/types.js +15 -0
  66. package/package.json +68 -0
@@ -0,0 +1,27 @@
1
+ var __defProp = Object.defineProperty;
2
+ var __getOwnPropDesc = Object.getOwnPropertyDescriptor;
3
+ var __getOwnPropNames = Object.getOwnPropertyNames;
4
+ var __hasOwnProp = Object.prototype.hasOwnProperty;
5
+ var __export = (target, all) => {
6
+ for (var name in all)
7
+ __defProp(target, name, { get: all[name], enumerable: true });
8
+ };
9
+ var __copyProps = (to, from, except, desc) => {
10
+ if (from && typeof from === "object" || typeof from === "function") {
11
+ for (let key of __getOwnPropNames(from))
12
+ if (!__hasOwnProp.call(to, key) && key !== except)
13
+ __defProp(to, key, { get: () => from[key], enumerable: !(desc = __getOwnPropDesc(from, key)) || desc.enumerable });
14
+ }
15
+ return to;
16
+ };
17
+ var __toCommonJS = (mod) => __copyProps(__defProp({}, "__esModule", { value: true }), mod);
18
+ var session_exports = {};
19
+ __export(session_exports, {
20
+ cereateSessionAuthzModule: () => import_session_authz.cereateSessionAuthzModule
21
+ });
22
+ module.exports = __toCommonJS(session_exports);
23
+ var import_session_authz = require("./session-authz.module");
24
+ // Annotate the CommonJS export names for ESM import in node:
25
+ 0 && (module.exports = {
26
+ cereateSessionAuthzModule
27
+ });
@@ -0,0 +1,25 @@
1
+ import * as _nestjs_common from '@nestjs/common';
2
+ import { AsyncLocalStorage } from 'node:async_hooks';
3
+ import { Request, Response, NextFunction } from 'express';
4
+ import { CookieOptionsWithSecret } from '../utils/types.js';
5
+ import { SessionAuthzOptions } from './session-authz.interface.js';
6
+ import '@nestjs/common/interfaces';
7
+ import '../authz.provider.js';
8
+ import 'express-session';
9
+
10
+ interface SessionAlsType<P, U> {
11
+ user?: U;
12
+ allowAnonymous?: boolean;
13
+ guardResult?: boolean;
14
+ authOptions: SessionAuthzOptions;
15
+ logIn: (user: P) => Promise<void>;
16
+ logOut: () => Promise<void>;
17
+ setCookie: (name: string, value: string, options?: CookieOptionsWithSecret) => void;
18
+ }
19
+ declare const createSessionAuthzAlsMiddleware: ([ALS_PROVIDER, SESSION_AUTHZ_OPTIONS]: [any, any]) => _nestjs_common.Type<Omit<{
20
+ readonly als: AsyncLocalStorage<SessionAlsType<unknown, unknown>>;
21
+ readonly sessionAuthzOptions: SessionAuthzOptions;
22
+ use(req: Request, res: Response, next: NextFunction): void;
23
+ }, "als" | "sessionAuthzOptions">>;
24
+
25
+ export { type SessionAlsType, createSessionAuthzAlsMiddleware };
@@ -0,0 +1,134 @@
1
+ var __defProp = Object.defineProperty;
2
+ var __getOwnPropDesc = Object.getOwnPropertyDescriptor;
3
+ var __getOwnPropNames = Object.getOwnPropertyNames;
4
+ var __hasOwnProp = Object.prototype.hasOwnProperty;
5
+ var __defNormalProp = (obj, key, value) => key in obj ? __defProp(obj, key, { enumerable: true, configurable: true, writable: true, value }) : obj[key] = value;
6
+ var __name = (target, value) => __defProp(target, "name", { value, configurable: true });
7
+ var __export = (target, all) => {
8
+ for (var name in all)
9
+ __defProp(target, name, { get: all[name], enumerable: true });
10
+ };
11
+ var __copyProps = (to, from, except, desc) => {
12
+ if (from && typeof from === "object" || typeof from === "function") {
13
+ for (let key of __getOwnPropNames(from))
14
+ if (!__hasOwnProp.call(to, key) && key !== except)
15
+ __defProp(to, key, { get: () => from[key], enumerable: !(desc = __getOwnPropDesc(from, key)) || desc.enumerable });
16
+ }
17
+ return to;
18
+ };
19
+ var __toCommonJS = (mod) => __copyProps(__defProp({}, "__esModule", { value: true }), mod);
20
+ var __publicField = (obj, key, value) => __defNormalProp(obj, typeof key !== "symbol" ? key + "" : key, value);
21
+ var session_authz_als_middleware_exports = {};
22
+ __export(session_authz_als_middleware_exports, {
23
+ createSessionAuthzAlsMiddleware: () => createSessionAuthzAlsMiddleware
24
+ });
25
+ module.exports = __toCommonJS(session_authz_als_middleware_exports);
26
+ var import_node_async_hooks = require("node:async_hooks");
27
+ var import_common = require("@nestjs/common");
28
+ var import_constants = require("../constants");
29
+ var import_errors = require("../errors");
30
+ var import_utils = require("../utils");
31
+ function _ts_decorate(decorators, target, key, desc) {
32
+ var c = arguments.length, r = c < 3 ? target : desc === null ? desc = Object.getOwnPropertyDescriptor(target, key) : desc, d;
33
+ if (typeof Reflect === "object" && typeof Reflect.decorate === "function") r = Reflect.decorate(decorators, target, key, desc);
34
+ else for (var i = decorators.length - 1; i >= 0; i--) if (d = decorators[i]) r = (c < 3 ? d(r) : c > 3 ? d(target, key, r) : d(target, key)) || r;
35
+ return c > 3 && r && Object.defineProperty(target, key, r), r;
36
+ }
37
+ __name(_ts_decorate, "_ts_decorate");
38
+ function _ts_metadata(k, v) {
39
+ if (typeof Reflect === "object" && typeof Reflect.metadata === "function") return Reflect.metadata(k, v);
40
+ }
41
+ __name(_ts_metadata, "_ts_metadata");
42
+ function _ts_param(paramIndex, decorator) {
43
+ return function(target, key) {
44
+ decorator(target, key, paramIndex);
45
+ };
46
+ }
47
+ __name(_ts_param, "_ts_param");
48
+ const createSessionAuthzAlsMiddleware = /* @__PURE__ */ __name(([ALS_PROVIDER, SESSION_AUTHZ_OPTIONS]) => {
49
+ var _a;
50
+ let SessionAuthzAlsMiddleware = (_a = class {
51
+ constructor(als, sessionAuthzOptions) {
52
+ __publicField(this, "als");
53
+ __publicField(this, "sessionAuthzOptions");
54
+ this.als = als;
55
+ this.sessionAuthzOptions = sessionAuthzOptions;
56
+ }
57
+ use(req, res, next) {
58
+ const keepSessionInfo = Boolean(this.sessionAuthzOptions.keepSessionInfo);
59
+ if (!req.session) {
60
+ return next(new import_errors.AuthzError("Login sessions require session support. Did you forget to use `express-session` middleware?"));
61
+ }
62
+ const prevSession = req.session;
63
+ const store = {
64
+ user: void 0,
65
+ allowAnonymous: void 0,
66
+ guardResult: void 0,
67
+ authOptions: this.sessionAuthzOptions,
68
+ // ref: https://github.com/jaredhanson/passport/blob/217018dbc46dcd4118dd6f2c60c8d97010c587f8/lib/sessionmanager.js#L14
69
+ logIn: /* @__PURE__ */ __name((user) => {
70
+ return new Promise((resolve, reject) => {
71
+ req.session.regenerate(function(err) {
72
+ if (err) {
73
+ return reject(err);
74
+ }
75
+ if (keepSessionInfo) {
76
+ (0, import_utils.merge)(req.session, prevSession);
77
+ }
78
+ if (!req.session[import_constants.SESSION_PASSPORT_KEY]) {
79
+ req.session[import_constants.SESSION_PASSPORT_KEY] = {};
80
+ }
81
+ req.session[import_constants.SESSION_PASSPORT_KEY].user = user;
82
+ req.session.save(function(err2) {
83
+ if (err2) {
84
+ return reject(err2);
85
+ }
86
+ resolve();
87
+ });
88
+ });
89
+ });
90
+ }, "logIn"),
91
+ // ref: https://github.com/jaredhanson/passport/blob/217018dbc46dcd4118dd6f2c60c8d97010c587f8/lib/sessionmanager.js#L57
92
+ logOut: /* @__PURE__ */ __name(() => {
93
+ return new Promise((resolve, reject) => {
94
+ if (req.session[import_constants.SESSION_PASSPORT_KEY]) {
95
+ delete req.session[import_constants.SESSION_PASSPORT_KEY].user;
96
+ }
97
+ req.session.save(function(err) {
98
+ if (err) {
99
+ return reject(err);
100
+ }
101
+ req.session.regenerate(function(err2) {
102
+ if (err2) {
103
+ return reject(err2);
104
+ }
105
+ if (keepSessionInfo) {
106
+ (0, import_utils.merge)(req.session, prevSession);
107
+ }
108
+ resolve();
109
+ });
110
+ });
111
+ });
112
+ }, "logOut"),
113
+ setCookie: (0, import_utils.createSetCookieFn)(req, res)
114
+ };
115
+ this.als.run(store, () => {
116
+ next();
117
+ });
118
+ }
119
+ }, __name(_a, "SessionAuthzAlsMiddleware"), _a);
120
+ SessionAuthzAlsMiddleware = _ts_decorate([
121
+ _ts_param(0, (0, import_common.Inject)(ALS_PROVIDER)),
122
+ _ts_param(1, (0, import_common.Inject)(SESSION_AUTHZ_OPTIONS)),
123
+ _ts_metadata("design:type", Function),
124
+ _ts_metadata("design:paramtypes", [
125
+ typeof import_node_async_hooks.AsyncLocalStorage === "undefined" ? Object : import_node_async_hooks.AsyncLocalStorage,
126
+ typeof SessionAuthzOptions === "undefined" ? Object : SessionAuthzOptions
127
+ ])
128
+ ], SessionAuthzAlsMiddleware);
129
+ return (0, import_common.mixin)(SessionAuthzAlsMiddleware);
130
+ }, "createSessionAuthzAlsMiddleware");
131
+ // Annotate the CommonJS export names for ESM import in node:
132
+ 0 && (module.exports = {
133
+ createSessionAuthzAlsMiddleware
134
+ });
@@ -0,0 +1,43 @@
1
+ import * as _nestjs_common from '@nestjs/common';
2
+ import { ExecutionContext } from '@nestjs/common';
3
+ import { Reflector } from '@nestjs/core';
4
+ import { AsyncLocalStorage } from 'async_hooks';
5
+ import { AuthzProviderClass } from '../authz.provider.js';
6
+ import { AuthzError } from '../errors.js';
7
+ import { SessionAlsType } from './session-authz-als.middleware.js';
8
+ import { SessionAuthzOptions } from './session-authz.interface.js';
9
+ import 'node:async_hooks';
10
+ import 'express';
11
+ import '../utils/types.js';
12
+ import '@nestjs/common/interfaces';
13
+ import 'express-session';
14
+
15
+ declare const createSessionAuthzGuard: ([SESSION_STRATEGY, AUTHZ_PROVIDER, SESSION_AUTHZ_OPTIONS, ALS_PROVIDER, SESSION_META_KEY]: [string, any, any, any, any]) => _nestjs_common.Type<Omit<{
16
+ readonly reflector: Reflector;
17
+ readonly authzProvider: AuthzProviderClass<unknown, unknown>;
18
+ readonly sessionAuthzOptions: SessionAuthzOptions;
19
+ readonly als: AsyncLocalStorage<SessionAlsType<unknown, unknown>>;
20
+ getAuthenticateOptions(): {
21
+ property: string;
22
+ session: boolean;
23
+ };
24
+ /**
25
+ *
26
+ * recives err, user, info from JwtStrategy.validate
27
+ *
28
+ * will return request.user=null if allowAnonymous=true
29
+ *
30
+ * @param _err will always be null
31
+ * @param user if user is null, then info will be AuthError. if user is defined, then info will be undefined.
32
+ * @param info AuthzError or undefined
33
+ * @returns
34
+ */
35
+ handleRequest<T>(_err: unknown, user: T, info?: AuthzError): T;
36
+ canActivate(context: ExecutionContext): Promise<boolean>;
37
+ logIn<TRequest extends {
38
+ logIn: Function;
39
+ } = any>(request: TRequest): Promise<void>;
40
+ getRequest(context: ExecutionContext): any;
41
+ }, "als" | "reflector" | "authzProvider" | "sessionAuthzOptions">>;
42
+
43
+ export { createSessionAuthzGuard };
@@ -0,0 +1,142 @@
1
+ var __defProp = Object.defineProperty;
2
+ var __getOwnPropDesc = Object.getOwnPropertyDescriptor;
3
+ var __getOwnPropNames = Object.getOwnPropertyNames;
4
+ var __hasOwnProp = Object.prototype.hasOwnProperty;
5
+ var __defNormalProp = (obj, key, value) => key in obj ? __defProp(obj, key, { enumerable: true, configurable: true, writable: true, value }) : obj[key] = value;
6
+ var __name = (target, value) => __defProp(target, "name", { value, configurable: true });
7
+ var __export = (target, all) => {
8
+ for (var name in all)
9
+ __defProp(target, name, { get: all[name], enumerable: true });
10
+ };
11
+ var __copyProps = (to, from, except, desc) => {
12
+ if (from && typeof from === "object" || typeof from === "function") {
13
+ for (let key of __getOwnPropNames(from))
14
+ if (!__hasOwnProp.call(to, key) && key !== except)
15
+ __defProp(to, key, { get: () => from[key], enumerable: !(desc = __getOwnPropDesc(from, key)) || desc.enumerable });
16
+ }
17
+ return to;
18
+ };
19
+ var __toCommonJS = (mod) => __copyProps(__defProp({}, "__esModule", { value: true }), mod);
20
+ var __publicField = (obj, key, value) => __defNormalProp(obj, typeof key !== "symbol" ? key + "" : key, value);
21
+ var session_authz_guard_exports = {};
22
+ __export(session_authz_guard_exports, {
23
+ createSessionAuthzGuard: () => createSessionAuthzGuard
24
+ });
25
+ module.exports = __toCommonJS(session_authz_guard_exports);
26
+ var import_common = require("@nestjs/common");
27
+ var import_core = require("@nestjs/core");
28
+ var import_passport = require("@nestjs/passport");
29
+ var import_authz = require("../authz.provider");
30
+ var import_errors = require("../errors");
31
+ var import_utils = require("../utils");
32
+ function _ts_decorate(decorators, target, key, desc) {
33
+ var c = arguments.length, r = c < 3 ? target : desc === null ? desc = Object.getOwnPropertyDescriptor(target, key) : desc, d;
34
+ if (typeof Reflect === "object" && typeof Reflect.decorate === "function") r = Reflect.decorate(decorators, target, key, desc);
35
+ else for (var i = decorators.length - 1; i >= 0; i--) if (d = decorators[i]) r = (c < 3 ? d(r) : c > 3 ? d(target, key, r) : d(target, key)) || r;
36
+ return c > 3 && r && Object.defineProperty(target, key, r), r;
37
+ }
38
+ __name(_ts_decorate, "_ts_decorate");
39
+ function _ts_metadata(k, v) {
40
+ if (typeof Reflect === "object" && typeof Reflect.metadata === "function") return Reflect.metadata(k, v);
41
+ }
42
+ __name(_ts_metadata, "_ts_metadata");
43
+ function _ts_param(paramIndex, decorator) {
44
+ return function(target, key) {
45
+ decorator(target, key, paramIndex);
46
+ };
47
+ }
48
+ __name(_ts_param, "_ts_param");
49
+ const createSessionAuthzGuard = /* @__PURE__ */ __name(([SESSION_STRATEGY, AUTHZ_PROVIDER, SESSION_AUTHZ_OPTIONS, ALS_PROVIDER, SESSION_META_KEY]) => {
50
+ var _a;
51
+ let SessionAuthzGuard = (_a = class extends (0, import_passport.AuthGuard)(SESSION_STRATEGY) {
52
+ constructor(reflector, authzProvider, sessionAuthzOptions, als) {
53
+ super();
54
+ __publicField(this, "reflector");
55
+ __publicField(this, "authzProvider");
56
+ __publicField(this, "sessionAuthzOptions");
57
+ __publicField(this, "als");
58
+ this.reflector = reflector, this.authzProvider = authzProvider, this.sessionAuthzOptions = sessionAuthzOptions, this.als = als;
59
+ }
60
+ getAuthenticateOptions() {
61
+ return {
62
+ property: this.sessionAuthzOptions.passportProperty,
63
+ session: false
64
+ };
65
+ }
66
+ /**
67
+ *
68
+ * recives err, user, info from JwtStrategy.validate
69
+ *
70
+ * will return request.user=null if allowAnonymous=true
71
+ *
72
+ * @param _err will always be null
73
+ * @param user if user is null, then info will be AuthError. if user is defined, then info will be undefined.
74
+ * @param info AuthzError or undefined
75
+ * @returns
76
+ */
77
+ handleRequest(_err, user, info) {
78
+ const store = (0, import_utils.getAlsStore)(this.als);
79
+ if (info) {
80
+ if (store.allowAnonymous && info.name === import_errors.AuthzAnonymousError.name) {
81
+ return user;
82
+ }
83
+ store.guardResult = false;
84
+ throw info;
85
+ }
86
+ return user;
87
+ }
88
+ async canActivate(context) {
89
+ const store = (0, import_utils.getAlsStore)(this.als);
90
+ if ((0, import_utils.isNotFalsy)(store.guardResult)) {
91
+ return store.guardResult;
92
+ }
93
+ const paramsList = (0, import_utils.normalizedArray)(this.reflector.getAll(SESSION_META_KEY, [
94
+ context.getClass(),
95
+ context.getHandler()
96
+ ]));
97
+ const contextParamsList = (0, import_utils.getContextAuthzMetaParamsList)(paramsList, {
98
+ defaultOverride: this.sessionAuthzOptions.defaultOverride,
99
+ skipFalsyMetadata: this.sessionAuthzOptions.skipFalsyMetadata
100
+ });
101
+ if (!contextParamsList.length) {
102
+ return true;
103
+ }
104
+ const req = context.switchToHttp().getRequest();
105
+ store.allowAnonymous = (0, import_utils.getAllowAnonymous)(contextParamsList, {
106
+ defaultAllowAnonymous: this.sessionAuthzOptions.defaultAllowAnonymous
107
+ });
108
+ await super.canActivate(context);
109
+ if (typeof this.authzProvider.authorize !== "function") {
110
+ store.guardResult = true;
111
+ return true;
112
+ }
113
+ const user = (0, import_utils.getPassportProperty)(req);
114
+ if (!user && store.allowAnonymous) {
115
+ return true;
116
+ }
117
+ for (const ele of contextParamsList) {
118
+ if (!await this.authzProvider.authorize(user, ele.metaData)) {
119
+ return false;
120
+ }
121
+ }
122
+ return true;
123
+ }
124
+ }, __name(_a, "SessionAuthzGuard"), _a);
125
+ SessionAuthzGuard = _ts_decorate([
126
+ _ts_param(1, (0, import_common.Inject)(AUTHZ_PROVIDER)),
127
+ _ts_param(2, (0, import_common.Inject)(SESSION_AUTHZ_OPTIONS)),
128
+ _ts_param(3, (0, import_common.Inject)(ALS_PROVIDER)),
129
+ _ts_metadata("design:type", Function),
130
+ _ts_metadata("design:paramtypes", [
131
+ typeof import_core.Reflector === "undefined" ? Object : import_core.Reflector,
132
+ typeof import_authz.AuthzProviderClass === "undefined" ? Object : import_authz.AuthzProviderClass,
133
+ typeof SessionAuthzOptions === "undefined" ? Object : SessionAuthzOptions,
134
+ typeof AsyncLocalStorage === "undefined" ? Object : AsyncLocalStorage
135
+ ])
136
+ ], SessionAuthzGuard);
137
+ return (0, import_common.mixin)(SessionAuthzGuard);
138
+ }, "createSessionAuthzGuard");
139
+ // Annotate the CommonJS export names for ESM import in node:
140
+ 0 && (module.exports = {
141
+ createSessionAuthzGuard
142
+ });
@@ -0,0 +1,23 @@
1
+ import { SessionOptions } from 'express-session';
2
+ import { AuthzModuleBaseOptions } from '../utils/types.js';
3
+ import '@nestjs/common';
4
+ import '@nestjs/common/interfaces';
5
+ import 'express';
6
+ import '../authz.provider.js';
7
+
8
+ type SessionAuthzModuleOptions = Partial<AuthzModuleBaseOptions> & {
9
+ session: SessionOptions & {
10
+ keepSessionInfo?: boolean;
11
+ };
12
+ };
13
+ declare const normalizedSessionAuthzModuleOptions: (options?: Partial<SessionAuthzModuleOptions>) => {
14
+ defaultOverride: boolean;
15
+ passportProperty: string;
16
+ skipFalsyMetadata: boolean;
17
+ defaultAllowAnonymous: boolean;
18
+ keepSessionInfo: boolean | undefined;
19
+ session: SessionOptions;
20
+ };
21
+ type SessionAuthzOptions = ReturnType<typeof normalizedSessionAuthzModuleOptions>;
22
+
23
+ export { type SessionAuthzModuleOptions, type SessionAuthzOptions, normalizedSessionAuthzModuleOptions };
@@ -0,0 +1,43 @@
1
+ var __defProp = Object.defineProperty;
2
+ var __getOwnPropDesc = Object.getOwnPropertyDescriptor;
3
+ var __getOwnPropNames = Object.getOwnPropertyNames;
4
+ var __hasOwnProp = Object.prototype.hasOwnProperty;
5
+ var __name = (target, value) => __defProp(target, "name", { value, configurable: true });
6
+ var __export = (target, all) => {
7
+ for (var name in all)
8
+ __defProp(target, name, { get: all[name], enumerable: true });
9
+ };
10
+ var __copyProps = (to, from, except, desc) => {
11
+ if (from && typeof from === "object" || typeof from === "function") {
12
+ for (let key of __getOwnPropNames(from))
13
+ if (!__hasOwnProp.call(to, key) && key !== except)
14
+ __defProp(to, key, { get: () => from[key], enumerable: !(desc = __getOwnPropDesc(from, key)) || desc.enumerable });
15
+ }
16
+ return to;
17
+ };
18
+ var __toCommonJS = (mod) => __copyProps(__defProp({}, "__esModule", { value: true }), mod);
19
+ var session_authz_interface_exports = {};
20
+ __export(session_authz_interface_exports, {
21
+ normalizedSessionAuthzModuleOptions: () => normalizedSessionAuthzModuleOptions
22
+ });
23
+ module.exports = __toCommonJS(session_authz_interface_exports);
24
+ var import_constants = require("../constants");
25
+ const normalizedSessionAuthzModuleOptions = /* @__PURE__ */ __name((options = {}) => {
26
+ const { keepSessionInfo, ...sessionOpts } = options.session ?? {};
27
+ return {
28
+ defaultOverride: options.defaultOverride || false,
29
+ passportProperty: options.passportProperty || import_constants.DEFAULT_PASSPORT_PROPERTY_VALUE,
30
+ skipFalsyMetadata: options.skipFalsyMetadata || false,
31
+ defaultAllowAnonymous: options.defaultAllowAnonymous || false,
32
+ keepSessionInfo,
33
+ session: {
34
+ resave: false,
35
+ saveUninitialized: false,
36
+ ...sessionOpts
37
+ }
38
+ };
39
+ }, "normalizedSessionAuthzModuleOptions");
40
+ // Annotate the CommonJS export names for ESM import in node:
41
+ 0 && (module.exports = {
42
+ normalizedSessionAuthzModuleOptions
43
+ });
@@ -0,0 +1,71 @@
1
+ import * as _nestjs_core from '@nestjs/core';
2
+ import { AuthzProviderClass } from '../authz.provider.js';
3
+ import { AbstractConstructor, RoutesOptions, AuthzDecoParams, MethodParameters, ApplyDecorators, CookieOptionsWithSecret, AuthzModuleRoutesOptions, AuthzModuleBaseOptions } from '../utils/types.js';
4
+ import { AsyncLocalStorage } from 'node:async_hooks';
5
+ import * as _nestjs_common from '@nestjs/common';
6
+ import { MiddlewareConsumer, DynamicModule, Type } from '@nestjs/common';
7
+ import session from 'express-session';
8
+ import { AuthzError } from '../errors.js';
9
+ import { SessionAlsType } from './session-authz-als.middleware.js';
10
+ import { SessionAuthzOptions, SessionAuthzModuleOptions } from './session-authz.interface.js';
11
+ import '@nestjs/common/interfaces';
12
+ import 'express';
13
+
14
+ declare const ASYNC_OPTIONS_TYPE: _nestjs_common.ConfigurableModuleAsyncOptions<SessionAuthzModuleOptions, "createSessionAuthzModuleOptions"> & Partial<{
15
+ authzProvider?: Type<AuthzProviderClass<unknown, unknown>>;
16
+ } & AuthzModuleRoutesOptions>;
17
+ declare const OPTIONS_TYPE: Partial<AuthzModuleBaseOptions> & {
18
+ session: session.SessionOptions & {
19
+ keepSessionInfo?: boolean;
20
+ };
21
+ } & Partial<{
22
+ authzProvider?: Type<AuthzProviderClass<unknown, unknown>>;
23
+ } & AuthzModuleRoutesOptions>;
24
+ declare const cereateSessionAuthzModule: <P, U, T extends AuthzProviderClass<P, U>>(authzProvider: AbstractConstructor<T, P, U>) => {
25
+ AuthzModule: {
26
+ new (routesOpt: RoutesOptions, sessionAuthzOptions: SessionAuthzOptions): {
27
+ [x: string]: any;
28
+ readonly routesOpt: RoutesOptions;
29
+ readonly sessionAuthzOptions: SessionAuthzOptions;
30
+ configure(consumer: MiddlewareConsumer): void;
31
+ };
32
+ /**
33
+ * Note: DO NOT register the same route in multiple session authz modules, or import the same session authz module in the same module multiple times, express-session middleware will not work properly.
34
+ */
35
+ register(options: Omit<typeof OPTIONS_TYPE, "authzProvider">): DynamicModule;
36
+ /**
37
+ * Note: DO NOT register the same route in multiple session authz modules, express-session middleware will not work properly.
38
+ */
39
+ registerAsync(options: typeof ASYNC_OPTIONS_TYPE): DynamicModule;
40
+ };
41
+ AuthzGuard: Type<Omit<{
42
+ readonly reflector: _nestjs_core.Reflector;
43
+ readonly authzProvider: AuthzProviderClass<unknown, unknown>;
44
+ readonly sessionAuthzOptions: SessionAuthzOptions;
45
+ readonly als: AsyncLocalStorage<SessionAlsType<unknown, unknown>>;
46
+ getAuthenticateOptions(): {
47
+ property: string;
48
+ session: boolean;
49
+ };
50
+ handleRequest<T_1>(_err: unknown, user: T_1, info?: AuthzError): T_1;
51
+ canActivate(context: _nestjs_common.ExecutionContext): Promise<boolean>;
52
+ logIn<TRequest extends {
53
+ logIn: Function;
54
+ } = any>(request: TRequest): Promise<void>;
55
+ getRequest(context: _nestjs_common.ExecutionContext): any;
56
+ }, "als" | "reflector" | "authzProvider" | "sessionAuthzOptions">> & {
57
+ Verify: (...args: AuthzDecoParams<MethodParameters<T, "authorize">[1]>) => ApplyDecorators;
58
+ NoVerify: () => MethodDecorator & ClassDecorator;
59
+ Apply: (...rest: Parameters<(...args: AuthzDecoParams<MethodParameters<T, "authorize">[1]>) => ApplyDecorators>) => <TFunction extends Function, Y>(target: TFunction | object, propertyKey?: string | symbol, descriptor?: TypedPropertyDescriptor<Y>) => void;
60
+ };
61
+ AuthzService: Type<Omit<{
62
+ readonly authzProvider: AuthzProviderClass<P, U>;
63
+ readonly als: AsyncLocalStorage<SessionAlsType<P, U>>;
64
+ logIn(user: U): Promise<void>;
65
+ logOut(): Promise<void>;
66
+ setCookie(name: string, value: string, options?: CookieOptionsWithSecret | undefined): void;
67
+ getUser(): U | undefined;
68
+ }, "als" | "authzProvider">>;
69
+ };
70
+
71
+ export { cereateSessionAuthzModule };