@siriux/auth 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.
@@ -0,0 +1,8 @@
1
+ export * from './types';
2
+ export * from './middleware';
3
+ export { AuthenticationError, AuthMiddleware, createAuthMiddleware } from './middleware/auth';
4
+ export { UserRole, JwtPayload, AuthenticatedUser, AuthTokens, AuthConfig } from './types';
5
+ export declare const SIRIUX_AUTH_VERSION = "1.0.0";
6
+ import { AuthConfig } from './types';
7
+ export declare const createDefaultAuthConfig: (overrides: Partial<AuthConfig>) => AuthConfig;
8
+ //# sourceMappingURL=index.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AACA,cAAc,SAAS,CAAC;AACxB,cAAc,cAAc,CAAC;AAG7B,OAAO,EAAE,mBAAmB,EAAE,cAAc,EAAE,oBAAoB,EAAE,MAAM,mBAAmB,CAAC;AAC9F,OAAO,EAAE,QAAQ,EAAE,UAAU,EAAE,iBAAiB,EAAE,UAAU,EAAE,UAAU,EAAE,MAAM,SAAS,CAAC;AAG1F,eAAO,MAAM,mBAAmB,UAAU,CAAC;AAG3C,OAAO,EAAE,UAAU,EAAE,MAAM,SAAS,CAAC;AAErC,eAAO,MAAM,uBAAuB,GAAI,WAAW,OAAO,CAAC,UAAU,CAAC,KAAG,UAWxE,CAAC"}
package/dist/index.js ADDED
@@ -0,0 +1,42 @@
1
+ "use strict";
2
+ var __createBinding = (this && this.__createBinding) || (Object.create ? (function(o, m, k, k2) {
3
+ if (k2 === undefined) k2 = k;
4
+ var desc = Object.getOwnPropertyDescriptor(m, k);
5
+ if (!desc || ("get" in desc ? !m.__esModule : desc.writable || desc.configurable)) {
6
+ desc = { enumerable: true, get: function() { return m[k]; } };
7
+ }
8
+ Object.defineProperty(o, k2, desc);
9
+ }) : (function(o, m, k, k2) {
10
+ if (k2 === undefined) k2 = k;
11
+ o[k2] = m[k];
12
+ }));
13
+ var __exportStar = (this && this.__exportStar) || function(m, exports) {
14
+ for (var p in m) if (p !== "default" && !Object.prototype.hasOwnProperty.call(exports, p)) __createBinding(exports, m, p);
15
+ };
16
+ Object.defineProperty(exports, "__esModule", { value: true });
17
+ exports.createDefaultAuthConfig = exports.SIRIUX_AUTH_VERSION = exports.UserRole = exports.createAuthMiddleware = exports.AuthMiddleware = exports.AuthenticationError = void 0;
18
+ // Core exports
19
+ __exportStar(require("./types"), exports);
20
+ __exportStar(require("./middleware"), exports);
21
+ // Re-export commonly used classes and functions
22
+ var auth_1 = require("./middleware/auth");
23
+ Object.defineProperty(exports, "AuthenticationError", { enumerable: true, get: function () { return auth_1.AuthenticationError; } });
24
+ Object.defineProperty(exports, "AuthMiddleware", { enumerable: true, get: function () { return auth_1.AuthMiddleware; } });
25
+ Object.defineProperty(exports, "createAuthMiddleware", { enumerable: true, get: function () { return auth_1.createAuthMiddleware; } });
26
+ var types_1 = require("./types");
27
+ Object.defineProperty(exports, "UserRole", { enumerable: true, get: function () { return types_1.UserRole; } });
28
+ // Version information
29
+ exports.SIRIUX_AUTH_VERSION = '1.0.0';
30
+ const createDefaultAuthConfig = (overrides) => {
31
+ const defaultConfig = {
32
+ jwtSecret: process.env.JWT_SECRET || 'your-super-secret-jwt-key',
33
+ jwtRefreshSecret: process.env.JWT_REFRESH_SECRET || 'your-super-secret-refresh-key',
34
+ tokenExpiry: '24h',
35
+ refreshExpiry: '7d',
36
+ issuer: 'siriux',
37
+ audience: 'siriux-users'
38
+ };
39
+ return { ...defaultConfig, ...overrides };
40
+ };
41
+ exports.createDefaultAuthConfig = createDefaultAuthConfig;
42
+ //# sourceMappingURL=index.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":";;;;;;;;;;;;;;;;;AAAA,eAAe;AACf,0CAAwB;AACxB,+CAA6B;AAE7B,gDAAgD;AAChD,0CAA8F;AAArF,2GAAA,mBAAmB,OAAA;AAAE,sGAAA,cAAc,OAAA;AAAE,4GAAA,oBAAoB,OAAA;AAClE,iCAA0F;AAAjF,iGAAA,QAAQ,OAAA;AAEjB,sBAAsB;AACT,QAAA,mBAAmB,GAAG,OAAO,CAAC;AAKpC,MAAM,uBAAuB,GAAG,CAAC,SAA8B,EAAc,EAAE;IACpF,MAAM,aAAa,GAAe;QAChC,SAAS,EAAE,OAAO,CAAC,GAAG,CAAC,UAAU,IAAI,2BAA2B;QAChE,gBAAgB,EAAE,OAAO,CAAC,GAAG,CAAC,kBAAkB,IAAI,+BAA+B;QACnF,WAAW,EAAE,KAAK;QAClB,aAAa,EAAE,IAAI;QACnB,MAAM,EAAE,QAAQ;QAChB,QAAQ,EAAE,cAAc;KACzB,CAAC;IAEF,OAAO,EAAE,GAAG,aAAa,EAAE,GAAG,SAAS,EAAE,CAAC;AAC5C,CAAC,CAAC;AAXW,QAAA,uBAAuB,2BAWlC"}
@@ -0,0 +1,56 @@
1
+ import { Request, Response, NextFunction } from 'express';
2
+ import { JwtPayload } from 'jsonwebtoken';
3
+ import { UserRole, AuthenticatedUser, AuthConfig } from '../types';
4
+ export interface AuthenticatedRequest extends Request {
5
+ user?: JwtPayload;
6
+ authenticatedUser?: AuthenticatedUser;
7
+ }
8
+ export declare class AuthenticationError extends Error {
9
+ code: string;
10
+ constructor(message: string, code: string);
11
+ }
12
+ export declare class AuthMiddleware {
13
+ private jwtSecret;
14
+ private config;
15
+ constructor(config: AuthConfig);
16
+ /**
17
+ * Middleware to verify JWT tokens
18
+ */
19
+ tokenAuth: (req: AuthenticatedRequest, res: Response, next: NextFunction) => void | Response;
20
+ /**
21
+ * Middleware to require admin role
22
+ */
23
+ adminAuth: (req: AuthenticatedRequest, res: Response, next: NextFunction) => void | Response;
24
+ /**
25
+ * Middleware to require specific role
26
+ */
27
+ roleAuth: (requiredRole: UserRole) => (req: AuthenticatedRequest, res: Response, next: NextFunction) => void | Response;
28
+ /**
29
+ * Middleware for optional authentication (doesn't fail if no token)
30
+ */
31
+ optionalAuth: (req: AuthenticatedRequest, res: Response, next: NextFunction) => void;
32
+ /**
33
+ * Generate JWT access token
34
+ */
35
+ generateAccessToken(payload: Omit<JwtPayload, 'iat' | 'exp'>): string;
36
+ /**
37
+ * Generate JWT refresh token
38
+ */
39
+ generateRefreshToken(userId: string): string;
40
+ /**
41
+ * Verify refresh token
42
+ */
43
+ verifyRefreshToken(token: string): {
44
+ userId: string;
45
+ type: string;
46
+ };
47
+ /**
48
+ * Generate both access and refresh tokens
49
+ */
50
+ generateTokenPair(user: AuthenticatedUser): {
51
+ accessToken: string;
52
+ refreshToken: string;
53
+ };
54
+ }
55
+ export declare const createAuthMiddleware: (config: AuthConfig) => AuthMiddleware;
56
+ //# sourceMappingURL=auth.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"auth.d.ts","sourceRoot":"","sources":["../../src/middleware/auth.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,OAAO,EAAE,QAAQ,EAAE,YAAY,EAAE,MAAM,SAAS,CAAC;AAC1D,OAAY,EAAE,UAAU,EAAE,MAAM,cAAc,CAAC;AAC/C,OAAO,EAAE,QAAQ,EAAE,iBAAiB,EAAE,UAAU,EAAE,MAAM,UAAU,CAAC;AAEnE,MAAM,WAAW,oBAAqB,SAAQ,OAAO;IACnD,IAAI,CAAC,EAAE,UAAU,CAAC;IAClB,iBAAiB,CAAC,EAAE,iBAAiB,CAAC;CACvC;AAED,qBAAa,mBAAoB,SAAQ,KAAK;IACR,IAAI,EAAE,MAAM;gBAApC,OAAO,EAAE,MAAM,EAAS,IAAI,EAAE,MAAM;CAIjD;AAED,qBAAa,cAAc;IACzB,OAAO,CAAC,SAAS,CAAS;IAC1B,OAAO,CAAC,MAAM,CAAa;gBAEf,MAAM,EAAE,UAAU;IAQ9B;;OAEG;IACI,SAAS,GAAI,KAAK,oBAAoB,EAAE,KAAK,QAAQ,EAAE,MAAM,YAAY,KAAG,IAAI,GAAG,QAAQ,CAuDhG;IAEF;;OAEG;IACI,SAAS,GAAI,KAAK,oBAAoB,EAAE,KAAK,QAAQ,EAAE,MAAM,YAAY,KAAG,IAAI,GAAG,QAAQ,CAShG;IAEF;;OAEG;IACI,QAAQ,GAAI,cAAc,QAAQ,MAC/B,KAAK,oBAAoB,EAAE,KAAK,QAAQ,EAAE,MAAM,YAAY,KAAG,IAAI,GAAG,QAAQ,CAUtF;IAEF;;OAEG;IACI,YAAY,GAAI,KAAK,oBAAoB,EAAE,KAAK,QAAQ,EAAE,MAAM,YAAY,UAcjF;IAEF;;OAEG;IACI,mBAAmB,CAAC,OAAO,EAAE,IAAI,CAAC,UAAU,EAAE,KAAK,GAAG,KAAK,CAAC,GAAG,MAAM;IAQ5E;;OAEG;IACI,oBAAoB,CAAC,MAAM,EAAE,MAAM,GAAG,MAAM;IAQnD;;OAEG;IACI,kBAAkB,CAAC,KAAK,EAAE,MAAM,GAAG;QAAE,MAAM,EAAE,MAAM,CAAC;QAAC,IAAI,EAAE,MAAM,CAAA;KAAE;IAI1E;;OAEG;IACI,iBAAiB,CAAC,IAAI,EAAE,iBAAiB,GAAG;QAAE,WAAW,EAAE,MAAM,CAAC;QAAC,YAAY,EAAE,MAAM,CAAA;KAAE;CAYjG;AAGD,eAAO,MAAM,oBAAoB,GAAI,QAAQ,UAAU,KAAG,cAEzD,CAAC"}
@@ -0,0 +1,171 @@
1
+ "use strict";
2
+ var __importDefault = (this && this.__importDefault) || function (mod) {
3
+ return (mod && mod.__esModule) ? mod : { "default": mod };
4
+ };
5
+ Object.defineProperty(exports, "__esModule", { value: true });
6
+ exports.createAuthMiddleware = exports.AuthMiddleware = exports.AuthenticationError = void 0;
7
+ const jsonwebtoken_1 = __importDefault(require("jsonwebtoken"));
8
+ const types_1 = require("../types");
9
+ class AuthenticationError extends Error {
10
+ constructor(message, code) {
11
+ super(message);
12
+ this.code = code;
13
+ this.name = 'AuthenticationError';
14
+ }
15
+ }
16
+ exports.AuthenticationError = AuthenticationError;
17
+ class AuthMiddleware {
18
+ constructor(config) {
19
+ /**
20
+ * Middleware to verify JWT tokens
21
+ */
22
+ this.tokenAuth = (req, res, next) => {
23
+ try {
24
+ const authHeader = req.headers.authorization;
25
+ const token = typeof authHeader === 'string' ? authHeader.split(' ')[1] : undefined;
26
+ if (!token) {
27
+ throw new AuthenticationError('No token provided', 'TOKEN_MISSING');
28
+ }
29
+ // Validate token format
30
+ if (typeof token !== 'string' || token.split('.').length !== 3) {
31
+ throw new AuthenticationError('Invalid token format', 'INVALID_FORMAT');
32
+ }
33
+ const decoded = jsonwebtoken_1.default.verify(token, this.jwtSecret);
34
+ req.user = decoded;
35
+ next();
36
+ }
37
+ catch (error) {
38
+ if (error instanceof AuthenticationError) {
39
+ return res.status(401).json({
40
+ success: false,
41
+ error: error.message,
42
+ code: error.code
43
+ });
44
+ }
45
+ // Handle specific JWT errors
46
+ if (error instanceof Error) {
47
+ if (error.name === 'JsonWebTokenError') {
48
+ return res.status(401).json({
49
+ success: false,
50
+ error: 'Invalid token specified',
51
+ code: 'INVALID_TOKEN'
52
+ });
53
+ }
54
+ else if (error.name === 'TokenExpiredError') {
55
+ return res.status(401).json({
56
+ success: false,
57
+ error: 'Token expired',
58
+ code: 'TOKEN_EXPIRED'
59
+ });
60
+ }
61
+ else if (error.name === 'NotBeforeError') {
62
+ return res.status(401).json({
63
+ success: false,
64
+ error: 'Token not active',
65
+ code: 'TOKEN_NOT_ACTIVE'
66
+ });
67
+ }
68
+ }
69
+ return res.status(401).json({
70
+ success: false,
71
+ error: 'Token verification failed',
72
+ code: 'VERIFICATION_FAILED'
73
+ });
74
+ }
75
+ };
76
+ /**
77
+ * Middleware to require admin role
78
+ */
79
+ this.adminAuth = (req, res, next) => {
80
+ if (!req.user || req.user.role !== types_1.UserRole.ADMIN) {
81
+ return res.status(403).json({
82
+ success: false,
83
+ error: 'Admin access required',
84
+ code: 'ADMIN_REQUIRED'
85
+ });
86
+ }
87
+ next();
88
+ };
89
+ /**
90
+ * Middleware to require specific role
91
+ */
92
+ this.roleAuth = (requiredRole) => {
93
+ return (req, res, next) => {
94
+ if (!req.user || req.user.role !== requiredRole) {
95
+ return res.status(403).json({
96
+ success: false,
97
+ error: `${requiredRole} access required`,
98
+ code: 'ROLE_REQUIRED'
99
+ });
100
+ }
101
+ next();
102
+ };
103
+ };
104
+ /**
105
+ * Middleware for optional authentication (doesn't fail if no token)
106
+ */
107
+ this.optionalAuth = (req, res, next) => {
108
+ try {
109
+ const authHeader = req.headers.authorization;
110
+ const token = typeof authHeader === 'string' ? authHeader.split(' ')[1] : undefined;
111
+ if (token) {
112
+ const decoded = jsonwebtoken_1.default.verify(token, this.jwtSecret);
113
+ req.user = decoded;
114
+ }
115
+ next();
116
+ }
117
+ catch (error) {
118
+ // Optional auth - continue without user if token is invalid
119
+ next();
120
+ }
121
+ };
122
+ this.config = config;
123
+ this.jwtSecret = config.jwtSecret;
124
+ if (!this.jwtSecret) {
125
+ throw new AuthenticationError('JWT_SECRET is required', 'MISSING_SECRET');
126
+ }
127
+ }
128
+ /**
129
+ * Generate JWT access token
130
+ */
131
+ generateAccessToken(payload) {
132
+ return jsonwebtoken_1.default.sign(payload, this.jwtSecret, {
133
+ expiresIn: '24h',
134
+ issuer: 'siriux',
135
+ audience: 'siriux-users'
136
+ });
137
+ }
138
+ /**
139
+ * Generate JWT refresh token
140
+ */
141
+ generateRefreshToken(userId) {
142
+ return jsonwebtoken_1.default.sign({ userId, type: 'refresh' }, this.config.jwtRefreshSecret || this.jwtSecret, { expiresIn: '7d' });
143
+ }
144
+ /**
145
+ * Verify refresh token
146
+ */
147
+ verifyRefreshToken(token) {
148
+ return jsonwebtoken_1.default.verify(token, this.config.jwtRefreshSecret || this.jwtSecret);
149
+ }
150
+ /**
151
+ * Generate both access and refresh tokens
152
+ */
153
+ generateTokenPair(user) {
154
+ const payload = {
155
+ userId: user.id,
156
+ email: user.email,
157
+ role: user.role
158
+ };
159
+ return {
160
+ accessToken: this.generateAccessToken(payload),
161
+ refreshToken: this.generateRefreshToken(user.id)
162
+ };
163
+ }
164
+ }
165
+ exports.AuthMiddleware = AuthMiddleware;
166
+ // Factory function to create middleware instance
167
+ const createAuthMiddleware = (config) => {
168
+ return new AuthMiddleware(config);
169
+ };
170
+ exports.createAuthMiddleware = createAuthMiddleware;
171
+ //# sourceMappingURL=auth.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"auth.js","sourceRoot":"","sources":["../../src/middleware/auth.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,2 @@
1
+ export * from './auth';
2
+ //# sourceMappingURL=index.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/middleware/index.ts"],"names":[],"mappings":"AAAA,cAAc,QAAQ,CAAC"}
@@ -0,0 +1,18 @@
1
+ "use strict";
2
+ var __createBinding = (this && this.__createBinding) || (Object.create ? (function(o, m, k, k2) {
3
+ if (k2 === undefined) k2 = k;
4
+ var desc = Object.getOwnPropertyDescriptor(m, k);
5
+ if (!desc || ("get" in desc ? !m.__esModule : desc.writable || desc.configurable)) {
6
+ desc = { enumerable: true, get: function() { return m[k]; } };
7
+ }
8
+ Object.defineProperty(o, k2, desc);
9
+ }) : (function(o, m, k, k2) {
10
+ if (k2 === undefined) k2 = k;
11
+ o[k2] = m[k];
12
+ }));
13
+ var __exportStar = (this && this.__exportStar) || function(m, exports) {
14
+ for (var p in m) if (p !== "default" && !Object.prototype.hasOwnProperty.call(exports, p)) __createBinding(exports, m, p);
15
+ };
16
+ Object.defineProperty(exports, "__esModule", { value: true });
17
+ __exportStar(require("./auth"), exports);
18
+ //# sourceMappingURL=index.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/middleware/index.ts"],"names":[],"mappings":";;;;;;;;;;;;;;;;AAAA,yCAAuB"}
@@ -0,0 +1,63 @@
1
+ export declare enum UserRole {
2
+ USER = "user",
3
+ ADMIN = "admin"
4
+ }
5
+ export interface JwtPayload {
6
+ userId: string;
7
+ email: string;
8
+ role: UserRole;
9
+ iat?: number;
10
+ exp?: number;
11
+ iss?: string;
12
+ aud?: string;
13
+ }
14
+ export interface AuthenticatedUser {
15
+ id: string;
16
+ email: string;
17
+ role: UserRole;
18
+ createdAt: Date;
19
+ updatedAt: Date;
20
+ }
21
+ export interface LoginCredentials {
22
+ email: string;
23
+ password: string;
24
+ }
25
+ export interface RegisterData {
26
+ email: string;
27
+ password: string;
28
+ firstName?: string;
29
+ lastName?: string;
30
+ }
31
+ export interface AuthTokens {
32
+ accessToken: string;
33
+ refreshToken: string;
34
+ }
35
+ export interface AuthResponse {
36
+ success: boolean;
37
+ user?: AuthenticatedUser;
38
+ tokens?: AuthTokens;
39
+ error?: string;
40
+ }
41
+ export interface AuthConfig {
42
+ jwtSecret: string;
43
+ jwtRefreshSecret: string;
44
+ tokenExpiry?: string;
45
+ refreshExpiry?: string;
46
+ issuer?: string;
47
+ audience?: string;
48
+ }
49
+ export interface AuthMiddlewareConfig {
50
+ jwtSecret: string;
51
+ jwtRefreshSecret: string;
52
+ database?: {
53
+ type: 'sqlite' | 'postgresql' | 'mysql';
54
+ connection: string;
55
+ options?: Record<string, any>;
56
+ };
57
+ features?: {
58
+ mfa?: boolean;
59
+ sso?: boolean;
60
+ emailVerification?: boolean;
61
+ };
62
+ }
63
+ //# sourceMappingURL=index.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/types/index.ts"],"names":[],"mappings":"AAAA,oBAAY,QAAQ;IAClB,IAAI,SAAS;IACb,KAAK,UAAU;CAChB;AAED,MAAM,WAAW,UAAU;IACzB,MAAM,EAAE,MAAM,CAAC;IACf,KAAK,EAAE,MAAM,CAAC;IACd,IAAI,EAAE,QAAQ,CAAC;IACf,GAAG,CAAC,EAAE,MAAM,CAAC;IACb,GAAG,CAAC,EAAE,MAAM,CAAC;IACb,GAAG,CAAC,EAAE,MAAM,CAAC;IACb,GAAG,CAAC,EAAE,MAAM,CAAC;CACd;AAED,MAAM,WAAW,iBAAiB;IAChC,EAAE,EAAE,MAAM,CAAC;IACX,KAAK,EAAE,MAAM,CAAC;IACd,IAAI,EAAE,QAAQ,CAAC;IACf,SAAS,EAAE,IAAI,CAAC;IAChB,SAAS,EAAE,IAAI,CAAC;CACjB;AAED,MAAM,WAAW,gBAAgB;IAC/B,KAAK,EAAE,MAAM,CAAC;IACd,QAAQ,EAAE,MAAM,CAAC;CAClB;AAED,MAAM,WAAW,YAAY;IAC3B,KAAK,EAAE,MAAM,CAAC;IACd,QAAQ,EAAE,MAAM,CAAC;IACjB,SAAS,CAAC,EAAE,MAAM,CAAC;IACnB,QAAQ,CAAC,EAAE,MAAM,CAAC;CACnB;AAED,MAAM,WAAW,UAAU;IACzB,WAAW,EAAE,MAAM,CAAC;IACpB,YAAY,EAAE,MAAM,CAAC;CACtB;AAED,MAAM,WAAW,YAAY;IAC3B,OAAO,EAAE,OAAO,CAAC;IACjB,IAAI,CAAC,EAAE,iBAAiB,CAAC;IACzB,MAAM,CAAC,EAAE,UAAU,CAAC;IACpB,KAAK,CAAC,EAAE,MAAM,CAAC;CAChB;AAED,MAAM,WAAW,UAAU;IACzB,SAAS,EAAE,MAAM,CAAC;IAClB,gBAAgB,EAAE,MAAM,CAAC;IACzB,WAAW,CAAC,EAAE,MAAM,CAAC;IACrB,aAAa,CAAC,EAAE,MAAM,CAAC;IACvB,MAAM,CAAC,EAAE,MAAM,CAAC;IAChB,QAAQ,CAAC,EAAE,MAAM,CAAC;CACnB;AAED,MAAM,WAAW,oBAAoB;IACnC,SAAS,EAAE,MAAM,CAAC;IAClB,gBAAgB,EAAE,MAAM,CAAC;IACzB,QAAQ,CAAC,EAAE;QACT,IAAI,EAAE,QAAQ,GAAG,YAAY,GAAG,OAAO,CAAC;QACxC,UAAU,EAAE,MAAM,CAAC;QACnB,OAAO,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,GAAG,CAAC,CAAC;KAC/B,CAAC;IACF,QAAQ,CAAC,EAAE;QACT,GAAG,CAAC,EAAE,OAAO,CAAC;QACd,GAAG,CAAC,EAAE,OAAO,CAAC;QACd,iBAAiB,CAAC,EAAE,OAAO,CAAC;KAC7B,CAAC;CACH"}
@@ -0,0 +1,9 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.UserRole = void 0;
4
+ var UserRole;
5
+ (function (UserRole) {
6
+ UserRole["USER"] = "user";
7
+ UserRole["ADMIN"] = "admin";
8
+ })(UserRole || (exports.UserRole = UserRole = {}));
9
+ //# sourceMappingURL=index.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/types/index.ts"],"names":[],"mappings":";;;AAAA,IAAY,QAGX;AAHD,WAAY,QAAQ;IAClB,yBAAa,CAAA;IACb,2BAAe,CAAA;AACjB,CAAC,EAHW,QAAQ,wBAAR,QAAQ,QAGnB"}
package/package.json ADDED
@@ -0,0 +1,52 @@
1
+ {
2
+ "name": "@siriux/auth",
3
+ "version": "1.0.0",
4
+ "description": "Siriux Authentication - JWT authentication and session management",
5
+ "main": "dist/index.js",
6
+ "types": "dist/index.d.ts",
7
+ "scripts": {
8
+ "build": "tsc",
9
+ "dev": "tsc --watch",
10
+ "test": "jest",
11
+ "clean": "rm -rf dist",
12
+ "prepublishOnly": "npm run clean && npm run build"
13
+ },
14
+ "keywords": [
15
+ "siriux",
16
+ "authentication",
17
+ "jwt",
18
+ "express",
19
+ "session",
20
+ "login",
21
+ "register"
22
+ ],
23
+ "author": "jawwad@alsirius.co.uk",
24
+ "license": "MIT",
25
+ "dependencies": {
26
+ "express": "^4.18.2",
27
+ "jsonwebtoken": "^9.0.2",
28
+ "bcryptjs": "^2.4.3",
29
+ "joi": "^17.11.0",
30
+ "cors": "^2.8.5",
31
+ "dotenv": "^16.3.1",
32
+ "uuid": "^9.0.1",
33
+ "winston": "^3.11.0"
34
+ },
35
+ "devDependencies": {
36
+ "@types/node": "^20.10.5",
37
+ "@types/express": "^4.17.21",
38
+ "@types/jsonwebtoken": "^9.0.5",
39
+ "@types/bcryptjs": "^2.4.6",
40
+ "@types/cors": "^2.8.17",
41
+ "@types/uuid": "^9.0.7",
42
+ "typescript": "^5.3.3",
43
+ "jest": "^29.7.0",
44
+ "@types/jest": "^29.5.8"
45
+ },
46
+ "files": [
47
+ "dist/**/*"
48
+ ],
49
+ "publishConfig": {
50
+ "access": "public"
51
+ }
52
+ }