@vercube/auth 0.0.1-alpha.15

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.
@@ -0,0 +1,7 @@
1
+ import { AuthenticationTypes } from "../Types/AuthenticationTypes.js";
2
+ /**
3
+ * Authentication decorator that adds middleware to protect routes or controllers
4
+ * @param options Optional options for the authentication middleware
5
+ * @returns A decorator function that adds authentication middleware to the target
6
+ */
7
+ export declare function Authenticate(options?: AuthenticationTypes.MiddlewareOptions): Function;
@@ -0,0 +1,8 @@
1
+ import { AuthorizationTypes } from "../Types/AuthorizationTypes.js";
2
+ /**
3
+ * Authorization decorator that adds middleware to protect routes or controllers
4
+ * @param params Parameters for the authorization middleware
5
+ * @param options Optional options for the authorization middleware
6
+ * @returns A decorator function that adds authorization middleware to the target
7
+ */
8
+ export declare function Authorize<T>(params: T, options?: AuthorizationTypes.MiddlewareOptions<T>): Function;
@@ -0,0 +1,24 @@
1
+ import { type BaseMiddleware, type MiddlewareOptions } from "@vercube/core";
2
+ import { AuthenticationTypes } from "../Types/AuthenticationTypes.js";
3
+ /**
4
+ * Middleware for authentication
5
+ * @class AuthenticationMiddleware
6
+ * @implements {BaseMiddleware}
7
+ * @description Authenticates incoming request
8
+ * @example
9
+ * const middleware = new AuthenticationMiddleware();
10
+ * await middleware.use(event);
11
+ */
12
+ export declare class AuthenticationMiddleware implements BaseMiddleware<AuthenticationTypes.MiddlewareOptions> {
13
+ private gContainer;
14
+ private gAuthenticationProvider;
15
+ /**
16
+ * Middleware function that processes the HTTP event.
17
+ *
18
+ * @param {Request} request - The HTTP request to be processed
19
+ * @param {Response} response - The HTTP response to be processed
20
+ * @param {MiddlewareOptions} args - Additional arguments for the middleware
21
+ * @returns {Promise<void>} - A promise that resolves when the processing is complete.
22
+ */
23
+ onRequest(request: Request, response: Response, args: MiddlewareOptions<AuthenticationTypes.MiddlewareOptions>): Promise<void>;
24
+ }
@@ -0,0 +1,27 @@
1
+ import { type BaseMiddleware, type MiddlewareOptions } from "@vercube/core";
2
+ import { AuthorizationTypes } from "../Types/AuthorizationTypes.js";
3
+ /**
4
+ * Middleware for authorization
5
+ * @class AuthorizationMiddleware
6
+ * @implements {BaseMiddleware}
7
+ * @description Authorizes incoming request
8
+ * @example
9
+ * const middleware = new AuthorizationMiddleware<UserType>();
10
+ * await middleware.use(event, args);
11
+ */
12
+ export declare class AuthorizationMiddleware<T> implements BaseMiddleware {
13
+ private gContainer;
14
+ private gAuthorizationProvider;
15
+ /**
16
+ * Middleware function that processes the HTTP event.
17
+ *
18
+ * @param {Request} request - The HTTP request event.
19
+ * @param {Response} response - The HTTP response event.
20
+ * @param {MiddlewareOptions} args - Additional arguments for the middleware
21
+ * @returns {Promise<void>} - A promise that resolves when the processing is complete.
22
+ */
23
+ onRequest(request: Request, response: Response, args: MiddlewareOptions<{
24
+ options: AuthorizationTypes.MiddlewareOptions
25
+ params: T
26
+ }>): Promise<void>;
27
+ }
@@ -0,0 +1,15 @@
1
+ /**
2
+ * Abstract class representing an authentication provider
3
+ * Provides a common interface for different authentication implementations
4
+ *
5
+ * @abstract
6
+ * @class AuthenticationProvider
7
+ */
8
+ export declare abstract class AuthenticationProvider {
9
+ /**
10
+ * Authenticates based on the HTTP event
11
+ * @param request - The HTTP event containing the request
12
+ * @returns An error string or Promise of error string, null or Promise of null if authentication is successful
13
+ */
14
+ abstract authenticate(request: Request): Promise<string | null> | string | null;
15
+ }
@@ -0,0 +1,16 @@
1
+ /**
2
+ * Abstract class representing an authorization provider
3
+ * Provides a common interface for different authorization implementations
4
+ *
5
+ * @abstract
6
+ * @class AuthorizationProvider
7
+ */
8
+ export declare abstract class AuthorizationProvider<T> {
9
+ /**
10
+ * Authorizes based on given params
11
+ * @param {Request} request - The request object
12
+ * @param {T} params - Additional parameters
13
+ * @returns An error string or Promise of error string, null or Promise of null if authentication is successful
14
+ */
15
+ abstract authorize(request: Request, params: T): Promise<string | null> | string | null;
16
+ }
package/dist/index.cjs ADDED
@@ -0,0 +1,143 @@
1
+ //#region rolldown:runtime
2
+ var __create = Object.create;
3
+ var __defProp = Object.defineProperty;
4
+ var __getOwnPropDesc = Object.getOwnPropertyDescriptor;
5
+ var __getOwnPropNames = Object.getOwnPropertyNames;
6
+ var __getProtoOf = Object.getPrototypeOf;
7
+ var __hasOwnProp = Object.prototype.hasOwnProperty;
8
+ var __commonJS = (cb, mod) => function() {
9
+ return mod || (0, cb[__getOwnPropNames(cb)[0]])((mod = { exports: {} }).exports, mod), mod.exports;
10
+ };
11
+ var __copyProps = (to, from, except, desc) => {
12
+ if (from && typeof from === "object" || typeof from === "function") for (var keys = __getOwnPropNames(from), i = 0, n = keys.length, key; i < n; i++) {
13
+ key = keys[i];
14
+ if (!__hasOwnProp.call(to, key) && key !== except) __defProp(to, key, {
15
+ get: ((k) => from[k]).bind(null, key),
16
+ enumerable: !(desc = __getOwnPropDesc(from, key)) || desc.enumerable
17
+ });
18
+ }
19
+ return to;
20
+ };
21
+ var __toESM = (mod, isNodeMode, target) => (target = mod != null ? __create(__getProtoOf(mod)) : {}, __copyProps(isNodeMode || !mod || !mod.__esModule ? __defProp(target, "default", {
22
+ value: mod,
23
+ enumerable: true
24
+ }) : target, mod));
25
+
26
+ //#endregion
27
+ const __vercube_core = __toESM(require("@vercube/core"));
28
+ const __vercube_di = __toESM(require("@vercube/di"));
29
+
30
+ //#region packages/auth/src/Services/AuthenticationProvider.ts
31
+ var AuthenticationProvider = class {};
32
+
33
+ //#endregion
34
+ //#region node_modules/.pnpm/@oxc-project+runtime@0.62.0/node_modules/@oxc-project/runtime/src/helpers/decorate.js
35
+ var require_decorate = __commonJS({ "node_modules/.pnpm/@oxc-project+runtime@0.62.0/node_modules/@oxc-project/runtime/src/helpers/decorate.js"(exports, module) {
36
+ function __decorate(decorators, target, key, desc) {
37
+ var c = arguments.length, r = c < 3 ? target : desc === null ? desc = Object.getOwnPropertyDescriptor(target, key) : desc, d;
38
+ if (typeof Reflect === "object" && typeof Reflect.decorate === "function") r = Reflect.decorate(decorators, target, key, desc);
39
+ 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;
40
+ return c > 3 && r && Object.defineProperty(target, key, r), r;
41
+ }
42
+ module.exports = __decorate, module.exports.__esModule = true, module.exports["default"] = module.exports;
43
+ } });
44
+ var import_decorate = __toESM(require_decorate(), 1);
45
+
46
+ //#endregion
47
+ //#region packages/auth/src/Middleware/AuthenticationMiddleware.ts
48
+ var AuthenticationMiddleware = class {
49
+ gContainer;
50
+ gAuthenticationProvider;
51
+ /**
52
+ * Middleware function that processes the HTTP event.
53
+ *
54
+ * @param {Request} request - The HTTP request to be processed
55
+ * @param {Response} response - The HTTP response to be processed
56
+ * @param {MiddlewareOptions} args - Additional arguments for the middleware
57
+ * @returns {Promise<void>} - A promise that resolves when the processing is complete.
58
+ */
59
+ async onRequest(request, response, args) {
60
+ let provider = this.gAuthenticationProvider;
61
+ if (args?.middlewareArgs?.provider) provider = this.gContainer.getOptional(args.middlewareArgs.provider);
62
+ if (!provider) {
63
+ console.warn("AuthenticationMiddleware::AuthenticationProvider is not registered");
64
+ return;
65
+ }
66
+ const authenticationError = await provider.authenticate(request);
67
+ if (authenticationError) throw new __vercube_core.UnauthorizedError(authenticationError);
68
+ }
69
+ };
70
+ (0, import_decorate.default)([(0, __vercube_di.Inject)(__vercube_di.Container)], AuthenticationMiddleware.prototype, "gContainer", void 0);
71
+ (0, import_decorate.default)([(0, __vercube_di.InjectOptional)(AuthenticationProvider)], AuthenticationMiddleware.prototype, "gAuthenticationProvider", void 0);
72
+
73
+ //#endregion
74
+ //#region packages/auth/src/Decorators/Authenticate.ts
75
+ function Authenticate(options) {
76
+ return function internalDecorator(target, propertyName) {
77
+ const meta = (0, __vercube_core.initializeMetadata)(propertyName ? target : target.prototype);
78
+ if (propertyName) (0, __vercube_core.initializeMetadataMethod)(target, propertyName);
79
+ meta.__middlewares.push({
80
+ target: propertyName ?? "__global__",
81
+ priority: -999,
82
+ middleware: AuthenticationMiddleware,
83
+ args: { ...options }
84
+ });
85
+ };
86
+ }
87
+
88
+ //#endregion
89
+ //#region packages/auth/src/Services/AuthorizationProvider.ts
90
+ var AuthorizationProvider = class {};
91
+
92
+ //#endregion
93
+ //#region packages/auth/src/Middleware/AuthorizationMiddleware.ts
94
+ var AuthorizationMiddleware = class {
95
+ gContainer;
96
+ gAuthorizationProvider;
97
+ /**
98
+ * Middleware function that processes the HTTP event.
99
+ *
100
+ * @param {Request} request - The HTTP request event.
101
+ * @param {Response} response - The HTTP response event.
102
+ * @param {MiddlewareOptions} args - Additional arguments for the middleware
103
+ * @returns {Promise<void>} - A promise that resolves when the processing is complete.
104
+ */
105
+ async onRequest(request, response, args) {
106
+ let provider = this.gAuthorizationProvider;
107
+ if (args.middlewareArgs?.options?.provider) provider = this.gContainer.getOptional(args.middlewareArgs.options.provider);
108
+ if (!provider) {
109
+ console.warn("AuthorizationMiddleware::AuthorizationProvider is not registered");
110
+ return;
111
+ }
112
+ const authorizationError = await provider.authorize(request, args.middlewareArgs.params);
113
+ if (authorizationError) throw new __vercube_core.ForbiddenError(authorizationError);
114
+ }
115
+ };
116
+ (0, import_decorate.default)([(0, __vercube_di.Inject)(__vercube_di.Container)], AuthorizationMiddleware.prototype, "gContainer", void 0);
117
+ (0, import_decorate.default)([(0, __vercube_di.InjectOptional)(AuthorizationProvider)], AuthorizationMiddleware.prototype, "gAuthorizationProvider", void 0);
118
+
119
+ //#endregion
120
+ //#region packages/auth/src/Decorators/Authorize.ts
121
+ function Authorize(params, options) {
122
+ return function internalDecorator(target, propertyName) {
123
+ const meta = (0, __vercube_core.initializeMetadata)(propertyName ? target : target.prototype);
124
+ if (propertyName) (0, __vercube_core.initializeMetadataMethod)(target, propertyName);
125
+ meta.__middlewares.push({
126
+ target: propertyName ?? "__global__",
127
+ priority: -998,
128
+ middleware: AuthorizationMiddleware,
129
+ args: {
130
+ params,
131
+ options
132
+ }
133
+ });
134
+ };
135
+ }
136
+
137
+ //#endregion
138
+ exports.Authenticate = Authenticate
139
+ exports.AuthenticationMiddleware = AuthenticationMiddleware
140
+ exports.AuthenticationProvider = AuthenticationProvider
141
+ exports.AuthorizationMiddleware = AuthorizationMiddleware
142
+ exports.AuthorizationProvider = AuthorizationProvider
143
+ exports.Authorize = Authorize
@@ -0,0 +1,6 @@
1
+ export * from "./Decorators/Authenticate.js";
2
+ export * from "./Decorators/Authorize.js";
3
+ export * from "./Middleware/AuthenticationMiddleware.js";
4
+ export * from "./Middleware/AuthorizationMiddleware.js";
5
+ export * from "./Services/AuthenticationProvider.js";
6
+ export * from "./Services/AuthorizationProvider.js";
package/dist/index.mjs ADDED
@@ -0,0 +1,108 @@
1
+ import { ForbiddenError, UnauthorizedError, initializeMetadata, initializeMetadataMethod } from "@vercube/core";
2
+ import { Container, Inject, InjectOptional } from "@vercube/di";
3
+
4
+ //#region packages/auth/src/Services/AuthenticationProvider.ts
5
+ var AuthenticationProvider = class {};
6
+
7
+ //#endregion
8
+ //#region node_modules/.pnpm/@oxc-project+runtime@0.62.0/node_modules/@oxc-project/runtime/src/helpers/esm/decorate.js
9
+ function __decorate(decorators, target, key, desc) {
10
+ var c = arguments.length, r = c < 3 ? target : desc === null ? desc = Object.getOwnPropertyDescriptor(target, key) : desc, d;
11
+ if (typeof Reflect === "object" && typeof Reflect.decorate === "function") r = Reflect.decorate(decorators, target, key, desc);
12
+ 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;
13
+ return c > 3 && r && Object.defineProperty(target, key, r), r;
14
+ }
15
+
16
+ //#endregion
17
+ //#region packages/auth/src/Middleware/AuthenticationMiddleware.ts
18
+ var AuthenticationMiddleware = class {
19
+ gContainer;
20
+ gAuthenticationProvider;
21
+ /**
22
+ * Middleware function that processes the HTTP event.
23
+ *
24
+ * @param {Request} request - The HTTP request to be processed
25
+ * @param {Response} response - The HTTP response to be processed
26
+ * @param {MiddlewareOptions} args - Additional arguments for the middleware
27
+ * @returns {Promise<void>} - A promise that resolves when the processing is complete.
28
+ */
29
+ async onRequest(request, response, args) {
30
+ let provider = this.gAuthenticationProvider;
31
+ if (args?.middlewareArgs?.provider) provider = this.gContainer.getOptional(args.middlewareArgs.provider);
32
+ if (!provider) {
33
+ console.warn("AuthenticationMiddleware::AuthenticationProvider is not registered");
34
+ return;
35
+ }
36
+ const authenticationError = await provider.authenticate(request);
37
+ if (authenticationError) throw new UnauthorizedError(authenticationError);
38
+ }
39
+ };
40
+ __decorate([Inject(Container)], AuthenticationMiddleware.prototype, "gContainer", void 0);
41
+ __decorate([InjectOptional(AuthenticationProvider)], AuthenticationMiddleware.prototype, "gAuthenticationProvider", void 0);
42
+
43
+ //#endregion
44
+ //#region packages/auth/src/Decorators/Authenticate.ts
45
+ function Authenticate(options) {
46
+ return function internalDecorator(target, propertyName) {
47
+ const meta = initializeMetadata(propertyName ? target : target.prototype);
48
+ if (propertyName) initializeMetadataMethod(target, propertyName);
49
+ meta.__middlewares.push({
50
+ target: propertyName ?? "__global__",
51
+ priority: -999,
52
+ middleware: AuthenticationMiddleware,
53
+ args: { ...options }
54
+ });
55
+ };
56
+ }
57
+
58
+ //#endregion
59
+ //#region packages/auth/src/Services/AuthorizationProvider.ts
60
+ var AuthorizationProvider = class {};
61
+
62
+ //#endregion
63
+ //#region packages/auth/src/Middleware/AuthorizationMiddleware.ts
64
+ var AuthorizationMiddleware = class {
65
+ gContainer;
66
+ gAuthorizationProvider;
67
+ /**
68
+ * Middleware function that processes the HTTP event.
69
+ *
70
+ * @param {Request} request - The HTTP request event.
71
+ * @param {Response} response - The HTTP response event.
72
+ * @param {MiddlewareOptions} args - Additional arguments for the middleware
73
+ * @returns {Promise<void>} - A promise that resolves when the processing is complete.
74
+ */
75
+ async onRequest(request, response, args) {
76
+ let provider = this.gAuthorizationProvider;
77
+ if (args.middlewareArgs?.options?.provider) provider = this.gContainer.getOptional(args.middlewareArgs.options.provider);
78
+ if (!provider) {
79
+ console.warn("AuthorizationMiddleware::AuthorizationProvider is not registered");
80
+ return;
81
+ }
82
+ const authorizationError = await provider.authorize(request, args.middlewareArgs.params);
83
+ if (authorizationError) throw new ForbiddenError(authorizationError);
84
+ }
85
+ };
86
+ __decorate([Inject(Container)], AuthorizationMiddleware.prototype, "gContainer", void 0);
87
+ __decorate([InjectOptional(AuthorizationProvider)], AuthorizationMiddleware.prototype, "gAuthorizationProvider", void 0);
88
+
89
+ //#endregion
90
+ //#region packages/auth/src/Decorators/Authorize.ts
91
+ function Authorize(params, options) {
92
+ return function internalDecorator(target, propertyName) {
93
+ const meta = initializeMetadata(propertyName ? target : target.prototype);
94
+ if (propertyName) initializeMetadataMethod(target, propertyName);
95
+ meta.__middlewares.push({
96
+ target: propertyName ?? "__global__",
97
+ priority: -998,
98
+ middleware: AuthorizationMiddleware,
99
+ args: {
100
+ params,
101
+ options
102
+ }
103
+ });
104
+ };
105
+ }
106
+
107
+ //#endregion
108
+ export { Authenticate, AuthenticationMiddleware, AuthenticationProvider, AuthorizationMiddleware, AuthorizationProvider, Authorize };
package/package.json ADDED
@@ -0,0 +1,30 @@
1
+ {
2
+ "name": "@vercube/auth",
3
+ "version": "0.0.1-alpha.15",
4
+ "description": "Auth module for Vercube framework",
5
+ "repository": "@vercube/auth",
6
+ "license": "MIT",
7
+ "sideEffects": false,
8
+ "type": "module",
9
+ "exports": {
10
+ ".": {
11
+ "types": "./dist/index.d.ts",
12
+ "import": "./dist/index.mjs",
13
+ "require": "./dist/index.cjs"
14
+ }
15
+ },
16
+ "main": "./dist/index.cjs",
17
+ "module": "./dist/index.mjs",
18
+ "types": "./dist/index.d.ts",
19
+ "files": [
20
+ "dist"
21
+ ],
22
+ "dependencies": {
23
+ "@vercube/di": "0.0.1-alpha.15",
24
+ "@vercube/core": "0.0.1-alpha.15"
25
+ },
26
+ "devDependencies": {},
27
+ "publishConfig": {
28
+ "access": "public"
29
+ }
30
+ }