@tekcify/auth-backend 1.0.0 → 1.0.3

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 (56) hide show
  1. package/README.md +414 -22
  2. package/dist/application-management.d.ts +62 -0
  3. package/dist/application-management.d.ts.map +1 -0
  4. package/dist/application-management.js +133 -0
  5. package/dist/application-management.js.map +1 -0
  6. package/{src/express/index.ts → dist/express/index.d.ts} +1 -0
  7. package/dist/express/index.d.ts.map +1 -0
  8. package/dist/express/index.js +6 -0
  9. package/dist/express/index.js.map +1 -0
  10. package/dist/express/middleware.d.ts +16 -0
  11. package/dist/express/middleware.d.ts.map +1 -0
  12. package/dist/express/middleware.js +39 -0
  13. package/dist/express/middleware.js.map +1 -0
  14. package/{src/index.ts → dist/index.d.ts} +3 -0
  15. package/dist/index.d.ts.map +1 -0
  16. package/dist/index.js +24 -0
  17. package/dist/index.js.map +1 -0
  18. package/dist/nestjs/decorator.d.ts +2 -0
  19. package/dist/nestjs/decorator.d.ts.map +1 -0
  20. package/dist/nestjs/decorator.js +11 -0
  21. package/dist/nestjs/decorator.js.map +1 -0
  22. package/dist/nestjs/guard.d.ts +13 -0
  23. package/dist/nestjs/guard.d.ts.map +1 -0
  24. package/dist/nestjs/guard.js +56 -0
  25. package/dist/nestjs/guard.js.map +1 -0
  26. package/{src/nestjs/index.ts → dist/nestjs/index.d.ts} +1 -0
  27. package/dist/nestjs/index.d.ts.map +1 -0
  28. package/dist/nestjs/index.js +8 -0
  29. package/dist/nestjs/index.js.map +1 -0
  30. package/dist/types.d.ts +22 -0
  31. package/dist/types.d.ts.map +1 -0
  32. package/dist/types.js +3 -0
  33. package/dist/types.js.map +1 -0
  34. package/dist/user-profile.d.ts +18 -0
  35. package/dist/user-profile.d.ts.map +1 -0
  36. package/dist/user-profile.js +78 -0
  37. package/dist/user-profile.js.map +1 -0
  38. package/dist/userinfo.d.ts +9 -0
  39. package/dist/userinfo.d.ts.map +1 -0
  40. package/dist/userinfo.js +16 -0
  41. package/dist/userinfo.js.map +1 -0
  42. package/dist/verify.d.ts +4 -0
  43. package/dist/verify.d.ts.map +1 -0
  44. package/dist/verify.js +38 -0
  45. package/dist/verify.js.map +1 -0
  46. package/package.json +13 -10
  47. package/src/__tests__/verify.test.ts +0 -80
  48. package/src/express/middleware.ts +0 -61
  49. package/src/nestjs/decorator.ts +0 -12
  50. package/src/nestjs/guard.ts +0 -57
  51. package/src/types.ts +0 -24
  52. package/src/userinfo.ts +0 -26
  53. package/src/verify.ts +0 -36
  54. package/tsconfig.json +0 -11
  55. package/tsconfig.tsbuildinfo +0 -1
  56. package/vitest.config.ts +0 -9
@@ -0,0 +1 @@
1
+ {"version":3,"file":"application-management.js","sourceRoot":"","sources":["../src/application-management.ts"],"names":[],"mappings":"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"}
@@ -1,2 +1,3 @@
1
1
  export { createAuthMiddleware } from './middleware';
2
2
  export type { ExpressAuthOptions } from './middleware';
3
+ //# sourceMappingURL=index.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/express/index.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,oBAAoB,EAAE,MAAM,cAAc,CAAC;AACpD,YAAY,EAAE,kBAAkB,EAAE,MAAM,cAAc,CAAC"}
@@ -0,0 +1,6 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.createAuthMiddleware = void 0;
4
+ var middleware_1 = require("./middleware");
5
+ Object.defineProperty(exports, "createAuthMiddleware", { enumerable: true, get: function () { return middleware_1.createAuthMiddleware; } });
6
+ //# sourceMappingURL=index.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/express/index.ts"],"names":[],"mappings":";;;AAAA,2CAAoD;AAA3C,kHAAA,oBAAoB,OAAA"}
@@ -0,0 +1,16 @@
1
+ import type { Request, Response, NextFunction } from 'express';
2
+ import type { VerifyTokenOptions, UserPayload } from '../types';
3
+ export interface ExpressAuthOptions extends VerifyTokenOptions {
4
+ getUserInfo?: (userId: string) => Promise<{
5
+ email: string;
6
+ } | null>;
7
+ }
8
+ declare global {
9
+ namespace Express {
10
+ interface Request {
11
+ user?: UserPayload;
12
+ }
13
+ }
14
+ }
15
+ export declare function createAuthMiddleware(options: ExpressAuthOptions): (req: Request, res: Response, next: NextFunction) => Promise<void>;
16
+ //# sourceMappingURL=middleware.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"middleware.d.ts","sourceRoot":"","sources":["../../src/express/middleware.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,OAAO,EAAE,QAAQ,EAAE,YAAY,EAAE,MAAM,SAAS,CAAC;AAE/D,OAAO,KAAK,EAAE,kBAAkB,EAAE,WAAW,EAAE,MAAM,UAAU,CAAC;AAEhE,MAAM,WAAW,kBAAmB,SAAQ,kBAAkB;IAC5D,WAAW,CAAC,EAAE,CAAC,MAAM,EAAE,MAAM,KAAK,OAAO,CAAC;QAAE,KAAK,EAAE,MAAM,CAAA;KAAE,GAAG,IAAI,CAAC,CAAC;CACrE;AAED,OAAO,CAAC,MAAM,CAAC;IAEb,UAAU,OAAO,CAAC;QAChB,UAAU,OAAO;YACf,IAAI,CAAC,EAAE,WAAW,CAAC;SACpB;KACF;CACF;AAED,wBAAgB,oBAAoB,CAAC,OAAO,EAAE,kBAAkB,IAE5D,KAAK,OAAO,EACZ,KAAK,QAAQ,EACb,MAAM,YAAY,KACjB,OAAO,CAAC,IAAI,CAAC,CAsCjB"}
@@ -0,0 +1,39 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.createAuthMiddleware = createAuthMiddleware;
4
+ const verify_1 = require("../verify");
5
+ function createAuthMiddleware(options) {
6
+ return async (req, res, next) => {
7
+ const authHeader = req.headers.authorization;
8
+ if (!authHeader?.startsWith('Bearer ')) {
9
+ res
10
+ .status(401)
11
+ .json({ message: 'Missing or invalid authorization header' });
12
+ return;
13
+ }
14
+ const token = authHeader.substring(7);
15
+ const verified = (0, verify_1.verifyAccessToken)(token, options);
16
+ if (!verified.valid) {
17
+ res.status(401).json({ message: 'Invalid or expired token' });
18
+ return;
19
+ }
20
+ let email = '';
21
+ if (options.getUserInfo) {
22
+ const userInfo = await options.getUserInfo(verified.payload.sub);
23
+ if (!userInfo) {
24
+ res.status(401).json({ message: 'User not found' });
25
+ return;
26
+ }
27
+ email = userInfo.email;
28
+ }
29
+ req.user = {
30
+ userId: verified.payload.sub,
31
+ email,
32
+ scopes: Array.isArray(verified.payload.scopes)
33
+ ? verified.payload.scopes
34
+ : [],
35
+ };
36
+ next();
37
+ };
38
+ }
39
+ //# sourceMappingURL=middleware.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"middleware.js","sourceRoot":"","sources":["../../src/express/middleware.ts"],"names":[],"mappings":";;AAiBA,oDA2CC;AA3DD,sCAA8C;AAgB9C,SAAgB,oBAAoB,CAAC,OAA2B;IAC9D,OAAO,KAAK,EACV,GAAY,EACZ,GAAa,EACb,IAAkB,EACH,EAAE;QACjB,MAAM,UAAU,GAAG,GAAG,CAAC,OAAO,CAAC,aAAmC,CAAC;QAEnE,IAAI,CAAC,UAAU,EAAE,UAAU,CAAC,SAAS,CAAC,EAAE,CAAC;YACvC,GAAG;iBACA,MAAM,CAAC,GAAG,CAAC;iBACX,IAAI,CAAC,EAAE,OAAO,EAAE,yCAAyC,EAAE,CAAC,CAAC;YAChE,OAAO;QACT,CAAC;QAED,MAAM,KAAK,GAAG,UAAU,CAAC,SAAS,CAAC,CAAC,CAAC,CAAC;QACtC,MAAM,QAAQ,GAAG,IAAA,0BAAiB,EAAC,KAAK,EAAE,OAAO,CAAC,CAAC;QAEnD,IAAI,CAAC,QAAQ,CAAC,KAAK,EAAE,CAAC;YACpB,GAAG,CAAC,MAAM,CAAC,GAAG,CAAC,CAAC,IAAI,CAAC,EAAE,OAAO,EAAE,0BAA0B,EAAE,CAAC,CAAC;YAC9D,OAAO;QACT,CAAC;QAED,IAAI,KAAK,GAAG,EAAE,CAAC;QACf,IAAI,OAAO,CAAC,WAAW,EAAE,CAAC;YACxB,MAAM,QAAQ,GAAG,MAAM,OAAO,CAAC,WAAW,CAAC,QAAQ,CAAC,OAAO,CAAC,GAAG,CAAC,CAAC;YACjE,IAAI,CAAC,QAAQ,EAAE,CAAC;gBACd,GAAG,CAAC,MAAM,CAAC,GAAG,CAAC,CAAC,IAAI,CAAC,EAAE,OAAO,EAAE,gBAAgB,EAAE,CAAC,CAAC;gBACpD,OAAO;YACT,CAAC;YACD,KAAK,GAAG,QAAQ,CAAC,KAAK,CAAC;QACzB,CAAC;QAED,GAAG,CAAC,IAAI,GAAG;YACT,MAAM,EAAE,QAAQ,CAAC,OAAO,CAAC,GAAG;YAC5B,KAAK;YACL,MAAM,EAAE,KAAK,CAAC,OAAO,CAAC,QAAQ,CAAC,OAAO,CAAC,MAAM,CAAC;gBAC5C,CAAC,CAAC,QAAQ,CAAC,OAAO,CAAC,MAAM;gBACzB,CAAC,CAAC,EAAE;SACP,CAAC;QAEF,IAAI,EAAE,CAAC;IACT,CAAC,CAAC;AACJ,CAAC"}
@@ -1,5 +1,8 @@
1
1
  export * from './types';
2
2
  export * from './verify';
3
3
  export * from './userinfo';
4
+ export * from './user-profile';
5
+ export * from './application-management';
4
6
  export * from './nestjs';
5
7
  export * from './express';
8
+ //# sourceMappingURL=index.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAAA,cAAc,SAAS,CAAC;AACxB,cAAc,UAAU,CAAC;AACzB,cAAc,YAAY,CAAC;AAC3B,cAAc,gBAAgB,CAAC;AAC/B,cAAc,0BAA0B,CAAC;AACzC,cAAc,UAAU,CAAC;AACzB,cAAc,WAAW,CAAC"}
package/dist/index.js ADDED
@@ -0,0 +1,24 @@
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("./types"), exports);
18
+ __exportStar(require("./verify"), exports);
19
+ __exportStar(require("./userinfo"), exports);
20
+ __exportStar(require("./user-profile"), exports);
21
+ __exportStar(require("./application-management"), exports);
22
+ __exportStar(require("./nestjs"), exports);
23
+ __exportStar(require("./express"), exports);
24
+ //# sourceMappingURL=index.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":";;;;;;;;;;;;;;;;AAAA,0CAAwB;AACxB,2CAAyB;AACzB,6CAA2B;AAC3B,iDAA+B;AAC/B,2DAAyC;AACzC,2CAAyB;AACzB,4CAA0B"}
@@ -0,0 +1,2 @@
1
+ export declare const CurrentUser: (...dataOrPipes: unknown[]) => ParameterDecorator;
2
+ //# sourceMappingURL=decorator.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"decorator.d.ts","sourceRoot":"","sources":["../../src/nestjs/decorator.ts"],"names":[],"mappings":"AAIA,eAAO,MAAM,WAAW,mDAOvB,CAAC"}
@@ -0,0 +1,11 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.CurrentUser = void 0;
4
+ const common_1 = require("@nestjs/common");
5
+ exports.CurrentUser = (0, common_1.createParamDecorator)((data, ctx) => {
6
+ const request = ctx
7
+ .switchToHttp()
8
+ .getRequest();
9
+ return request.user;
10
+ });
11
+ //# sourceMappingURL=decorator.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"decorator.js","sourceRoot":"","sources":["../../src/nestjs/decorator.ts"],"names":[],"mappings":";;;AAAA,2CAAwE;AAI3D,QAAA,WAAW,GAAG,IAAA,6BAAoB,EAC7C,CAAC,IAAa,EAAE,GAAqB,EAA2B,EAAE;IAChE,MAAM,OAAO,GAAG,GAAG;SAChB,YAAY,EAAE;SACd,UAAU,EAAoC,CAAC;IAClD,OAAO,OAAO,CAAC,IAAI,CAAC;AACtB,CAAC,CACF,CAAC"}
@@ -0,0 +1,13 @@
1
+ import { CanActivate, ExecutionContext } from '@nestjs/common';
2
+ import type { VerifyTokenOptions } from '../types';
3
+ export interface JwtAuthGuardOptions extends VerifyTokenOptions {
4
+ getUserInfo?: (userId: string) => Promise<{
5
+ email: string;
6
+ } | null>;
7
+ }
8
+ export declare class JwtAuthGuard implements CanActivate {
9
+ private readonly options;
10
+ constructor(options: JwtAuthGuardOptions);
11
+ canActivate(context: ExecutionContext): Promise<boolean>;
12
+ }
13
+ //# sourceMappingURL=guard.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"guard.d.ts","sourceRoot":"","sources":["../../src/nestjs/guard.ts"],"names":[],"mappings":"AAAA,OAAO,EAEL,WAAW,EACX,gBAAgB,EAEjB,MAAM,gBAAgB,CAAC;AAGxB,OAAO,KAAK,EAAE,kBAAkB,EAAe,MAAM,UAAU,CAAC;AAEhE,MAAM,WAAW,mBAAoB,SAAQ,kBAAkB;IAC7D,WAAW,CAAC,EAAE,CAAC,MAAM,EAAE,MAAM,KAAK,OAAO,CAAC;QAAE,KAAK,EAAE,MAAM,CAAA;KAAE,GAAG,IAAI,CAAC,CAAC;CACrE;AAED,qBACa,YAAa,YAAW,WAAW;IAClC,OAAO,CAAC,QAAQ,CAAC,OAAO;gBAAP,OAAO,EAAE,mBAAmB;IAEnD,WAAW,CAAC,OAAO,EAAE,gBAAgB,GAAG,OAAO,CAAC,OAAO,CAAC;CAsC/D"}
@@ -0,0 +1,56 @@
1
+ "use strict";
2
+ var __decorate = (this && this.__decorate) || function (decorators, target, key, desc) {
3
+ var c = arguments.length, r = c < 3 ? target : desc === null ? desc = Object.getOwnPropertyDescriptor(target, key) : desc, d;
4
+ if (typeof Reflect === "object" && typeof Reflect.decorate === "function") r = Reflect.decorate(decorators, target, key, desc);
5
+ 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;
6
+ return c > 3 && r && Object.defineProperty(target, key, r), r;
7
+ };
8
+ var __metadata = (this && this.__metadata) || function (k, v) {
9
+ if (typeof Reflect === "object" && typeof Reflect.metadata === "function") return Reflect.metadata(k, v);
10
+ };
11
+ Object.defineProperty(exports, "__esModule", { value: true });
12
+ exports.JwtAuthGuard = void 0;
13
+ const common_1 = require("@nestjs/common");
14
+ const verify_1 = require("../verify");
15
+ let JwtAuthGuard = class JwtAuthGuard {
16
+ options;
17
+ constructor(options) {
18
+ this.options = options;
19
+ }
20
+ async canActivate(context) {
21
+ const request = context
22
+ .switchToHttp()
23
+ .getRequest();
24
+ const authHeader = request.headers.authorization;
25
+ if (!authHeader?.startsWith('Bearer ')) {
26
+ throw new common_1.UnauthorizedException('Missing or invalid authorization header');
27
+ }
28
+ const token = authHeader.substring(7);
29
+ const verified = (0, verify_1.verifyAccessToken)(token, this.options);
30
+ if (!verified.valid) {
31
+ throw new common_1.UnauthorizedException('Invalid or expired token');
32
+ }
33
+ let email = '';
34
+ if (this.options.getUserInfo) {
35
+ const userInfo = await this.options.getUserInfo(verified.payload.sub);
36
+ if (!userInfo) {
37
+ throw new common_1.UnauthorizedException('User not found');
38
+ }
39
+ email = userInfo.email;
40
+ }
41
+ request.user = {
42
+ userId: verified.payload.sub,
43
+ email,
44
+ scopes: Array.isArray(verified.payload.scopes)
45
+ ? verified.payload.scopes
46
+ : [],
47
+ };
48
+ return true;
49
+ }
50
+ };
51
+ exports.JwtAuthGuard = JwtAuthGuard;
52
+ exports.JwtAuthGuard = JwtAuthGuard = __decorate([
53
+ (0, common_1.Injectable)(),
54
+ __metadata("design:paramtypes", [Object])
55
+ ], JwtAuthGuard);
56
+ //# sourceMappingURL=guard.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"guard.js","sourceRoot":"","sources":["../../src/nestjs/guard.ts"],"names":[],"mappings":";;;;;;;;;;;;AAAA,2CAKwB;AAExB,sCAA8C;AAQvC,IAAM,YAAY,GAAlB,MAAM,YAAY;IACM;IAA7B,YAA6B,OAA4B;QAA5B,YAAO,GAAP,OAAO,CAAqB;IAAG,CAAC;IAE7D,KAAK,CAAC,WAAW,CAAC,OAAyB;QACzC,MAAM,OAAO,GAAG,OAAO;aACpB,YAAY,EAAE;aACd,UAAU,EAAoC,CAAC;QAClD,MAAM,UAAU,GAAG,OAAO,CAAC,OAAO,CAAC,aAAmC,CAAC;QAEvE,IAAI,CAAC,UAAU,EAAE,UAAU,CAAC,SAAS,CAAC,EAAE,CAAC;YACvC,MAAM,IAAI,8BAAqB,CAC7B,yCAAyC,CAC1C,CAAC;QACJ,CAAC;QAED,MAAM,KAAK,GAAG,UAAU,CAAC,SAAS,CAAC,CAAC,CAAC,CAAC;QACtC,MAAM,QAAQ,GAAG,IAAA,0BAAiB,EAAC,KAAK,EAAE,IAAI,CAAC,OAAO,CAAC,CAAC;QAExD,IAAI,CAAC,QAAQ,CAAC,KAAK,EAAE,CAAC;YACpB,MAAM,IAAI,8BAAqB,CAAC,0BAA0B,CAAC,CAAC;QAC9D,CAAC;QAED,IAAI,KAAK,GAAG,EAAE,CAAC;QACf,IAAI,IAAI,CAAC,OAAO,CAAC,WAAW,EAAE,CAAC;YAC7B,MAAM,QAAQ,GAAG,MAAM,IAAI,CAAC,OAAO,CAAC,WAAW,CAAC,QAAQ,CAAC,OAAO,CAAC,GAAG,CAAC,CAAC;YACtE,IAAI,CAAC,QAAQ,EAAE,CAAC;gBACd,MAAM,IAAI,8BAAqB,CAAC,gBAAgB,CAAC,CAAC;YACpD,CAAC;YACD,KAAK,GAAG,QAAQ,CAAC,KAAK,CAAC;QACzB,CAAC;QAED,OAAO,CAAC,IAAI,GAAG;YACb,MAAM,EAAE,QAAQ,CAAC,OAAO,CAAC,GAAG;YAC5B,KAAK;YACL,MAAM,EAAE,KAAK,CAAC,OAAO,CAAC,QAAQ,CAAC,OAAO,CAAC,MAAM,CAAC;gBAC5C,CAAC,CAAC,QAAQ,CAAC,OAAO,CAAC,MAAM;gBACzB,CAAC,CAAC,EAAE;SACP,CAAC;QAEF,OAAO,IAAI,CAAC;IACd,CAAC;CACF,CAAA;AAzCY,oCAAY;uBAAZ,YAAY;IADxB,IAAA,mBAAU,GAAE;;GACA,YAAY,CAyCxB"}
@@ -2,3 +2,4 @@ export { JwtAuthGuard } from './guard';
2
2
  export type { JwtAuthGuardOptions } from './guard';
3
3
  export { CurrentUser } from './decorator';
4
4
  export type { UserPayload } from '../types';
5
+ //# sourceMappingURL=index.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/nestjs/index.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,YAAY,EAAE,MAAM,SAAS,CAAC;AACvC,YAAY,EAAE,mBAAmB,EAAE,MAAM,SAAS,CAAC;AACnD,OAAO,EAAE,WAAW,EAAE,MAAM,aAAa,CAAC;AAC1C,YAAY,EAAE,WAAW,EAAE,MAAM,UAAU,CAAC"}
@@ -0,0 +1,8 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.CurrentUser = exports.JwtAuthGuard = void 0;
4
+ var guard_1 = require("./guard");
5
+ Object.defineProperty(exports, "JwtAuthGuard", { enumerable: true, get: function () { return guard_1.JwtAuthGuard; } });
6
+ var decorator_1 = require("./decorator");
7
+ Object.defineProperty(exports, "CurrentUser", { enumerable: true, get: function () { return decorator_1.CurrentUser; } });
8
+ //# sourceMappingURL=index.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/nestjs/index.ts"],"names":[],"mappings":";;;AAAA,iCAAuC;AAA9B,qGAAA,YAAY,OAAA;AAErB,yCAA0C;AAAjC,wGAAA,WAAW,OAAA"}
@@ -0,0 +1,22 @@
1
+ export interface TokenPayload {
2
+ sub: string;
3
+ type: 'access' | 'refresh' | 'temp';
4
+ scopes?: string[];
5
+ clientId?: string;
6
+ [key: string]: unknown;
7
+ }
8
+ export interface VerifyTokenOptions {
9
+ secret: string;
10
+ issuer?: string;
11
+ audience?: string;
12
+ }
13
+ export interface VerifiedToken {
14
+ payload: TokenPayload;
15
+ valid: boolean;
16
+ }
17
+ export interface UserPayload {
18
+ userId: string;
19
+ email: string;
20
+ scopes?: string[];
21
+ }
22
+ //# sourceMappingURL=types.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"types.d.ts","sourceRoot":"","sources":["../src/types.ts"],"names":[],"mappings":"AAAA,MAAM,WAAW,YAAY;IAC3B,GAAG,EAAE,MAAM,CAAC;IACZ,IAAI,EAAE,QAAQ,GAAG,SAAS,GAAG,MAAM,CAAC;IACpC,MAAM,CAAC,EAAE,MAAM,EAAE,CAAC;IAClB,QAAQ,CAAC,EAAE,MAAM,CAAC;IAClB,CAAC,GAAG,EAAE,MAAM,GAAG,OAAO,CAAC;CACxB;AAED,MAAM,WAAW,kBAAkB;IACjC,MAAM,EAAE,MAAM,CAAC;IACf,MAAM,CAAC,EAAE,MAAM,CAAC;IAChB,QAAQ,CAAC,EAAE,MAAM,CAAC;CACnB;AAED,MAAM,WAAW,aAAa;IAC5B,OAAO,EAAE,YAAY,CAAC;IACtB,KAAK,EAAE,OAAO,CAAC;CAChB;AAED,MAAM,WAAW,WAAW;IAC1B,MAAM,EAAE,MAAM,CAAC;IACf,KAAK,EAAE,MAAM,CAAC;IACd,MAAM,CAAC,EAAE,MAAM,EAAE,CAAC;CACnB"}
package/dist/types.js ADDED
@@ -0,0 +1,3 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ //# sourceMappingURL=types.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"types.js","sourceRoot":"","sources":["../src/types.ts"],"names":[],"mappings":""}
@@ -0,0 +1,18 @@
1
+ export interface UserProfile {
2
+ userId: string;
3
+ email: string;
4
+ firstName: string | null;
5
+ lastName: string | null;
6
+ avatarUrl: string | null;
7
+ }
8
+ export interface UpdateProfileDto {
9
+ firstName?: string;
10
+ lastName?: string;
11
+ }
12
+ export interface UploadResponse {
13
+ avatarUrl: string;
14
+ }
15
+ export declare function getUserProfile(accessToken: string): Promise<UserProfile>;
16
+ export declare function updateUserProfile(accessToken: string, data: UpdateProfileDto): Promise<UserProfile>;
17
+ export declare function uploadProfilePicture(accessToken: string, file: Blob | File, fileName?: string): Promise<UploadResponse>;
18
+ //# sourceMappingURL=user-profile.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"user-profile.d.ts","sourceRoot":"","sources":["../src/user-profile.ts"],"names":[],"mappings":"AAEA,MAAM,WAAW,WAAW;IAC1B,MAAM,EAAE,MAAM,CAAC;IACf,KAAK,EAAE,MAAM,CAAC;IACd,SAAS,EAAE,MAAM,GAAG,IAAI,CAAC;IACzB,QAAQ,EAAE,MAAM,GAAG,IAAI,CAAC;IACxB,SAAS,EAAE,MAAM,GAAG,IAAI,CAAC;CAC1B;AAED,MAAM,WAAW,gBAAgB;IAC/B,SAAS,CAAC,EAAE,MAAM,CAAC;IACnB,QAAQ,CAAC,EAAE,MAAM,CAAC;CACnB;AAED,MAAM,WAAW,cAAc;IAC7B,SAAS,EAAE,MAAM,CAAC;CACnB;AAED,wBAAsB,cAAc,CAClC,WAAW,EAAE,MAAM,GAClB,OAAO,CAAC,WAAW,CAAC,CAuBtB;AAED,wBAAsB,iBAAiB,CACrC,WAAW,EAAE,MAAM,EACnB,IAAI,EAAE,gBAAgB,GACrB,OAAO,CAAC,WAAW,CAAC,CAwBtB;AAED,wBAAsB,oBAAoB,CACxC,WAAW,EAAE,MAAM,EACnB,IAAI,EAAE,IAAI,GAAG,IAAI,EACjB,QAAQ,CAAC,EAAE,MAAM,GAChB,OAAO,CAAC,cAAc,CAAC,CA+BzB"}
@@ -0,0 +1,78 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.getUserProfile = getUserProfile;
4
+ exports.updateUserProfile = updateUserProfile;
5
+ exports.uploadProfilePicture = uploadProfilePicture;
6
+ const auth_core_client_1 = require("@tekcify/auth-core-client");
7
+ async function getUserProfile(accessToken) {
8
+ const response = await fetch(`${auth_core_client_1.AUTH_SERVER_URL}/api/user/profile`, {
9
+ method: 'GET',
10
+ headers: {
11
+ Authorization: `Bearer ${accessToken}`,
12
+ 'Content-Type': 'application/json',
13
+ },
14
+ });
15
+ if (!response.ok) {
16
+ const error = await response
17
+ .json()
18
+ .catch(() => ({ message: response.statusText }));
19
+ const errorMessage = error?.message &&
20
+ typeof error.message === 'string' &&
21
+ error.message.trim()
22
+ ? error.message
23
+ : `Failed to get user profile: ${response.statusText} (Status: ${response.status})`;
24
+ throw new Error(errorMessage);
25
+ }
26
+ return response.json();
27
+ }
28
+ async function updateUserProfile(accessToken, data) {
29
+ const response = await fetch(`${auth_core_client_1.AUTH_SERVER_URL}/api/user/profile`, {
30
+ method: 'PUT',
31
+ headers: {
32
+ Authorization: `Bearer ${accessToken}`,
33
+ 'Content-Type': 'application/json',
34
+ },
35
+ body: JSON.stringify(data),
36
+ });
37
+ if (!response.ok) {
38
+ const error = await response
39
+ .json()
40
+ .catch(() => ({ message: response.statusText }));
41
+ const errorMessage = error?.message &&
42
+ typeof error.message === 'string' &&
43
+ error.message.trim()
44
+ ? error.message
45
+ : `Failed to update user profile: ${response.statusText} (Status: ${response.status})`;
46
+ throw new Error(errorMessage);
47
+ }
48
+ return response.json();
49
+ }
50
+ async function uploadProfilePicture(accessToken, file, fileName) {
51
+ const formData = new FormData();
52
+ if (fileName && !(file instanceof File)) {
53
+ formData.append('file', file, fileName);
54
+ }
55
+ else {
56
+ formData.append('file', file);
57
+ }
58
+ const response = await fetch(`${auth_core_client_1.AUTH_SERVER_URL}/api/user/profile/picture`, {
59
+ method: 'POST',
60
+ headers: {
61
+ Authorization: `Bearer ${accessToken}`,
62
+ },
63
+ body: formData,
64
+ });
65
+ if (!response.ok) {
66
+ const error = await response
67
+ .json()
68
+ .catch(() => ({ message: response.statusText }));
69
+ const errorMessage = error?.message &&
70
+ typeof error.message === 'string' &&
71
+ error.message.trim()
72
+ ? error.message
73
+ : `Failed to upload profile picture: ${response.statusText} (Status: ${response.status})`;
74
+ throw new Error(errorMessage);
75
+ }
76
+ return response.json();
77
+ }
78
+ //# sourceMappingURL=user-profile.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"user-profile.js","sourceRoot":"","sources":["../src/user-profile.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,9 @@
1
+ import type { UserInfo, IntrospectResult } from '@tekcify/auth-core-client';
2
+ export declare function fetchUserInfo(accessToken: string): Promise<UserInfo>;
3
+ export interface IntrospectTokenOptions {
4
+ token: string;
5
+ clientId?: string;
6
+ clientSecret?: string;
7
+ }
8
+ export declare function introspectAccessToken(options: IntrospectTokenOptions): Promise<IntrospectResult>;
9
+ //# sourceMappingURL=userinfo.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"userinfo.d.ts","sourceRoot":"","sources":["../src/userinfo.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,QAAQ,EAAE,gBAAgB,EAAE,MAAM,2BAA2B,CAAC;AAG5E,wBAAsB,aAAa,CAAC,WAAW,EAAE,MAAM,GAAG,OAAO,CAAC,QAAQ,CAAC,CAE1E;AAED,MAAM,WAAW,sBAAsB;IACrC,KAAK,EAAE,MAAM,CAAC;IACd,QAAQ,CAAC,EAAE,MAAM,CAAC;IAClB,YAAY,CAAC,EAAE,MAAM,CAAC;CACvB;AAED,wBAAsB,qBAAqB,CACzC,OAAO,EAAE,sBAAsB,GAC9B,OAAO,CAAC,gBAAgB,CAAC,CAM3B"}
@@ -0,0 +1,16 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.fetchUserInfo = fetchUserInfo;
4
+ exports.introspectAccessToken = introspectAccessToken;
5
+ const auth_core_client_1 = require("@tekcify/auth-core-client");
6
+ async function fetchUserInfo(accessToken) {
7
+ return (0, auth_core_client_1.getUserInfo)(accessToken);
8
+ }
9
+ async function introspectAccessToken(options) {
10
+ return (0, auth_core_client_1.introspectToken)({
11
+ token: options.token,
12
+ clientId: options.clientId,
13
+ clientSecret: options.clientSecret,
14
+ });
15
+ }
16
+ //# sourceMappingURL=userinfo.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"userinfo.js","sourceRoot":"","sources":["../src/userinfo.ts"],"names":[],"mappings":";;AAGA,sCAEC;AAQD,sDAQC;AApBD,gEAAyE;AAElE,KAAK,UAAU,aAAa,CAAC,WAAmB;IACrD,OAAO,IAAA,8BAAW,EAAC,WAAW,CAAC,CAAC;AAClC,CAAC;AAQM,KAAK,UAAU,qBAAqB,CACzC,OAA+B;IAE/B,OAAO,IAAA,kCAAe,EAAC;QACrB,KAAK,EAAE,OAAO,CAAC,KAAK;QACpB,QAAQ,EAAE,OAAO,CAAC,QAAQ;QAC1B,YAAY,EAAE,OAAO,CAAC,YAAY;KACnC,CAAC,CAAC;AACL,CAAC"}
@@ -0,0 +1,4 @@
1
+ import type { TokenPayload, VerifyTokenOptions, VerifiedToken } from './types';
2
+ export declare function verifyAccessToken(token: string, options: VerifyTokenOptions): VerifiedToken;
3
+ export declare function decodeToken(token: string): TokenPayload | null;
4
+ //# sourceMappingURL=verify.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"verify.d.ts","sourceRoot":"","sources":["../src/verify.ts"],"names":[],"mappings":"AACA,OAAO,KAAK,EAAE,YAAY,EAAE,kBAAkB,EAAE,aAAa,EAAE,MAAM,SAAS,CAAC;AAE/E,wBAAgB,iBAAiB,CAC/B,KAAK,EAAE,MAAM,EACb,OAAO,EAAE,kBAAkB,GAC1B,aAAa,CAqBf;AAED,wBAAgB,WAAW,CAAC,KAAK,EAAE,MAAM,GAAG,YAAY,GAAG,IAAI,CAM9D"}
package/dist/verify.js ADDED
@@ -0,0 +1,38 @@
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.verifyAccessToken = verifyAccessToken;
7
+ exports.decodeToken = decodeToken;
8
+ const jsonwebtoken_1 = __importDefault(require("jsonwebtoken"));
9
+ function verifyAccessToken(token, options) {
10
+ try {
11
+ const decoded = jsonwebtoken_1.default.verify(token, options.secret, {
12
+ issuer: options.issuer ?? 'tekcify-auth',
13
+ audience: options.audience ?? 'tekcify-api',
14
+ });
15
+ if (decoded.type !== 'access') {
16
+ return { payload: decoded, valid: false };
17
+ }
18
+ return { payload: decoded, valid: true };
19
+ }
20
+ catch (error) {
21
+ if (error instanceof jsonwebtoken_1.default.JsonWebTokenError) {
22
+ return { payload: {}, valid: false };
23
+ }
24
+ if (error instanceof jsonwebtoken_1.default.TokenExpiredError) {
25
+ return { payload: {}, valid: false };
26
+ }
27
+ throw error;
28
+ }
29
+ }
30
+ function decodeToken(token) {
31
+ try {
32
+ return jsonwebtoken_1.default.decode(token);
33
+ }
34
+ catch {
35
+ return null;
36
+ }
37
+ }
38
+ //# sourceMappingURL=verify.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"verify.js","sourceRoot":"","sources":["../src/verify.ts"],"names":[],"mappings":";;;;;AAGA,8CAwBC;AAED,kCAMC;AAnCD,gEAA+B;AAG/B,SAAgB,iBAAiB,CAC/B,KAAa,EACb,OAA2B;IAE3B,IAAI,CAAC;QACH,MAAM,OAAO,GAAG,sBAAG,CAAC,MAAM,CAAC,KAAK,EAAE,OAAO,CAAC,MAAM,EAAE;YAChD,MAAM,EAAE,OAAO,CAAC,MAAM,IAAI,cAAc;YACxC,QAAQ,EAAE,OAAO,CAAC,QAAQ,IAAI,aAAa;SAC5C,CAAiB,CAAC;QAEnB,IAAI,OAAO,CAAC,IAAI,KAAK,QAAQ,EAAE,CAAC;YAC9B,OAAO,EAAE,OAAO,EAAE,OAAO,EAAE,KAAK,EAAE,KAAK,EAAE,CAAC;QAC5C,CAAC;QAED,OAAO,EAAE,OAAO,EAAE,OAAO,EAAE,KAAK,EAAE,IAAI,EAAE,CAAC;IAC3C,CAAC;IAAC,OAAO,KAAK,EAAE,CAAC;QACf,IAAI,KAAK,YAAY,sBAAG,CAAC,iBAAiB,EAAE,CAAC;YAC3C,OAAO,EAAE,OAAO,EAAE,EAAkB,EAAE,KAAK,EAAE,KAAK,EAAE,CAAC;QACvD,CAAC;QACD,IAAI,KAAK,YAAY,sBAAG,CAAC,iBAAiB,EAAE,CAAC;YAC3C,OAAO,EAAE,OAAO,EAAE,EAAkB,EAAE,KAAK,EAAE,KAAK,EAAE,CAAC;QACvD,CAAC;QACD,MAAM,KAAK,CAAC;IACd,CAAC;AACH,CAAC;AAED,SAAgB,WAAW,CAAC,KAAa;IACvC,IAAI,CAAC;QACH,OAAO,sBAAG,CAAC,MAAM,CAAC,KAAK,CAAwB,CAAC;IAClD,CAAC;IAAC,MAAM,CAAC;QACP,OAAO,IAAI,CAAC;IACd,CAAC;AACH,CAAC"}
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@tekcify/auth-backend",
3
- "version": "1.0.0",
3
+ "version": "1.0.3",
4
4
  "description": "Backend authentication helpers for Tekcify Auth. Provides middleware, guards, and utilities for validating JWT tokens and protecting API routes in NestJS and Express applications.",
5
5
  "author": "Tekcify",
6
6
  "main": "./dist/index.js",
@@ -31,7 +31,7 @@
31
31
  }
32
32
  },
33
33
  "scripts": {
34
- "build": "tsc",
34
+ "build": "tsc -p tsconfig.build.json",
35
35
  "clean": "rm -rf dist",
36
36
  "lint": "eslint \"src/**/*.ts\" --max-warnings=0",
37
37
  "test": "vitest run",
@@ -44,18 +44,22 @@
44
44
  "jwt",
45
45
  "auth"
46
46
  ],
47
+ "files": [
48
+ "dist",
49
+ "README.md"
50
+ ],
47
51
  "license": "MIT",
48
52
  "dependencies": {
49
- "@tekcify/auth-core-client": "^1.0.0",
50
- "jsonwebtoken": "^9.0.2"
53
+ "@tekcify/auth-core-client": "^1.0.6",
54
+ "jsonwebtoken": "^9.0.3"
51
55
  },
52
56
  "devDependencies": {
53
- "@nestjs/common": "^11.0.1",
54
- "@nestjs/core": "^11.0.1",
55
- "@types/express": "^5.0.0",
57
+ "@nestjs/common": "^11.1.9",
58
+ "@nestjs/core": "^11.1.9",
59
+ "@types/express": "^5.0.6",
56
60
  "@types/jsonwebtoken": "^9.0.10",
57
- "@types/node": "^22.10.7",
58
- "typescript": "^5.7.3",
61
+ "@types/node": "^24.10.1",
62
+ "typescript": "^5.9.3",
59
63
  "vitest": "^4.0.15"
60
64
  },
61
65
  "peerDependencies": {
@@ -63,4 +67,3 @@
63
67
  "@nestjs/core": "^11.0.0"
64
68
  }
65
69
  }
66
-
@@ -1,80 +0,0 @@
1
- import { describe, it, expect } from 'vitest';
2
- import jwt from 'jsonwebtoken';
3
- import { verifyAccessToken } from '../verify';
4
-
5
- describe('verifyAccessToken', () => {
6
- const secret = 'test-secret';
7
- const issuer = 'tekcify-auth';
8
- const audience = 'tekcify-api';
9
-
10
- it('should verify a valid access token', () => {
11
- const payload = {
12
- sub: 'user-123',
13
- type: 'access',
14
- scopes: ['read:profile'],
15
- };
16
-
17
- const token = jwt.sign(payload, secret, {
18
- issuer,
19
- audience,
20
- expiresIn: '1h',
21
- });
22
-
23
- const result = verifyAccessToken(token, { secret, issuer, audience });
24
-
25
- expect(result.valid).toBe(true);
26
- expect(result.payload.sub).toBe('user-123');
27
- expect(result.payload.type).toBe('access');
28
- });
29
-
30
- it('should reject a refresh token', () => {
31
- const payload = {
32
- sub: 'user-123',
33
- type: 'refresh',
34
- };
35
-
36
- const token = jwt.sign(payload, secret, {
37
- issuer,
38
- audience,
39
- expiresIn: '7d',
40
- });
41
-
42
- const result = verifyAccessToken(token, { secret, issuer, audience });
43
-
44
- expect(result.valid).toBe(false);
45
- });
46
-
47
- it('should reject an expired token', () => {
48
- const payload = {
49
- sub: 'user-123',
50
- type: 'access',
51
- };
52
-
53
- const token = jwt.sign(payload, secret, {
54
- issuer,
55
- audience,
56
- expiresIn: '-1h',
57
- });
58
-
59
- const result = verifyAccessToken(token, { secret, issuer, audience });
60
-
61
- expect(result.valid).toBe(false);
62
- });
63
-
64
- it('should reject a token with wrong secret', () => {
65
- const payload = {
66
- sub: 'user-123',
67
- type: 'access',
68
- };
69
-
70
- const token = jwt.sign(payload, 'wrong-secret', {
71
- issuer,
72
- audience,
73
- expiresIn: '1h',
74
- });
75
-
76
- const result = verifyAccessToken(token, { secret, issuer, audience });
77
-
78
- expect(result.valid).toBe(false);
79
- });
80
- });