@ambushsoftworks/nestjs-auth-graphql 0.10.0 → 0.11.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 (63) hide show
  1. package/CHANGELOG.md +111 -0
  2. package/README.md +81 -4
  3. package/dist/auth.module.d.ts +5 -0
  4. package/dist/auth.module.d.ts.map +1 -1
  5. package/dist/auth.module.js +47 -0
  6. package/dist/auth.module.js.map +1 -1
  7. package/dist/guards/create-auth-guard.d.ts.map +1 -1
  8. package/dist/guards/create-auth-guard.js +3 -6
  9. package/dist/guards/create-auth-guard.js.map +1 -1
  10. package/dist/guards/csrf.guard.d.ts +2 -0
  11. package/dist/guards/csrf.guard.d.ts.map +1 -1
  12. package/dist/guards/csrf.guard.js +26 -5
  13. package/dist/guards/csrf.guard.js.map +1 -1
  14. package/dist/guards/jwt-auth.guard.d.ts +2 -1
  15. package/dist/guards/jwt-auth.guard.d.ts.map +1 -1
  16. package/dist/guards/jwt-auth.guard.js +4 -0
  17. package/dist/guards/jwt-auth.guard.js.map +1 -1
  18. package/dist/guards/permission.guard.js +2 -2
  19. package/dist/guards/permission.guard.js.map +1 -1
  20. package/dist/guards/tenant.guard.d.ts.map +1 -1
  21. package/dist/guards/tenant.guard.js +3 -0
  22. package/dist/guards/tenant.guard.js.map +1 -1
  23. package/dist/index.d.ts +3 -0
  24. package/dist/index.d.ts.map +1 -1
  25. package/dist/index.js +3 -0
  26. package/dist/index.js.map +1 -1
  27. package/dist/interfaces/refresh-retry-cache.interface.d.ts +6 -0
  28. package/dist/interfaces/refresh-retry-cache.interface.d.ts.map +1 -0
  29. package/dist/interfaces/refresh-retry-cache.interface.js +3 -0
  30. package/dist/interfaces/refresh-retry-cache.interface.js.map +1 -0
  31. package/dist/middleware/realm.middleware.d.ts +4 -2
  32. package/dist/middleware/realm.middleware.d.ts.map +1 -1
  33. package/dist/middleware/realm.middleware.js +50 -34
  34. package/dist/middleware/realm.middleware.js.map +1 -1
  35. package/dist/services/auth.service.d.ts +1 -3
  36. package/dist/services/auth.service.d.ts.map +1 -1
  37. package/dist/services/auth.service.js +12 -10
  38. package/dist/services/auth.service.js.map +1 -1
  39. package/dist/services/in-memory-refresh-retry-cache.d.ts +11 -0
  40. package/dist/services/in-memory-refresh-retry-cache.d.ts.map +1 -0
  41. package/dist/services/in-memory-refresh-retry-cache.js +45 -0
  42. package/dist/services/in-memory-refresh-retry-cache.js.map +1 -0
  43. package/dist/services/refresh-token.service.d.ts +13 -14
  44. package/dist/services/refresh-token.service.d.ts.map +1 -1
  45. package/dist/services/refresh-token.service.js +112 -33
  46. package/dist/services/refresh-token.service.js.map +1 -1
  47. package/dist/strategies/jwt.strategy.d.ts +3 -1
  48. package/dist/strategies/jwt.strategy.d.ts.map +1 -1
  49. package/dist/strategies/jwt.strategy.js +15 -11
  50. package/dist/strategies/jwt.strategy.js.map +1 -1
  51. package/dist/test-utils/execution-contexts.d.ts +7 -0
  52. package/dist/test-utils/execution-contexts.d.ts.map +1 -0
  53. package/dist/test-utils/execution-contexts.js +41 -0
  54. package/dist/test-utils/execution-contexts.js.map +1 -0
  55. package/dist/utils/cookies.d.ts +2 -0
  56. package/dist/utils/cookies.d.ts.map +1 -0
  57. package/dist/utils/cookies.js +34 -0
  58. package/dist/utils/cookies.js.map +1 -0
  59. package/dist/utils/execution-context.d.ts +3 -1
  60. package/dist/utils/execution-context.d.ts.map +1 -1
  61. package/dist/utils/execution-context.js +39 -4
  62. package/dist/utils/execution-context.js.map +1 -1
  63. package/package.json +4 -2
@@ -0,0 +1,7 @@
1
+ import { ExecutionContext } from '@nestjs/common';
2
+ type Operation = 'query' | 'mutation' | 'subscription';
3
+ export declare function httpExecutionContext(request: unknown): ExecutionContext;
4
+ export declare function graphqlExecutionContext(gqlContext: unknown, operation?: Operation, operationName?: string): ExecutionContext;
5
+ export declare function graphqlWsConnection(upgradeRequest: Record<string, any>): Record<string, any>;
6
+ export {};
7
+ //# sourceMappingURL=execution-contexts.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"execution-contexts.d.ts","sourceRoot":"","sources":["../../src/test-utils/execution-contexts.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,gBAAgB,EAAE,MAAM,gBAAgB,CAAC;AAElD,KAAK,SAAS,GAAG,OAAO,GAAG,UAAU,GAAG,cAAc,CAAC;AAMvD,wBAAgB,oBAAoB,CAAC,OAAO,EAAE,OAAO,GAAG,gBAAgB,CAUvE;AAMD,wBAAgB,uBAAuB,CACrC,UAAU,EAAE,OAAO,EACnB,SAAS,GAAE,SAAmB,EAC9B,aAAa,CAAC,EAAE,MAAM,GACrB,gBAAgB,CAalB;AAMD,wBAAgB,mBAAmB,CAAC,cAAc,EAAE,MAAM,CAAC,MAAM,EAAE,GAAG,CAAC,GAAG,MAAM,CAAC,MAAM,EAAE,GAAG,CAAC,CAQ5F"}
@@ -0,0 +1,41 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.httpExecutionContext = httpExecutionContext;
4
+ exports.graphqlExecutionContext = graphqlExecutionContext;
5
+ exports.graphqlWsConnection = graphqlWsConnection;
6
+ const handler = () => undefined;
7
+ class Resolver {
8
+ }
9
+ function httpExecutionContext(request) {
10
+ const args = [request, {}, () => undefined];
11
+ return {
12
+ getType: () => 'http',
13
+ getArgs: () => args,
14
+ getArgByIndex: (index) => args[index],
15
+ getHandler: () => handler,
16
+ getClass: () => Resolver,
17
+ switchToHttp: () => ({ getRequest: () => request }),
18
+ };
19
+ }
20
+ function graphqlExecutionContext(gqlContext, operation = 'query', operationName) {
21
+ const info = { operation: { operation, name: operationName ? { value: operationName } : undefined } };
22
+ const args = [{}, {}, gqlContext, info];
23
+ return {
24
+ getType: () => 'graphql',
25
+ getArgs: () => args,
26
+ getArgByIndex: (index) => args[index],
27
+ getHandler: () => handler,
28
+ getClass: () => Resolver,
29
+ switchToHttp: () => ({ getRequest: () => args[0], getResponse: () => args[1], getNext: () => args[2] }),
30
+ };
31
+ }
32
+ function graphqlWsConnection(upgradeRequest) {
33
+ return {
34
+ connectionInitReceived: true,
35
+ acknowledged: true,
36
+ subscriptions: {},
37
+ extra: { socket: {}, request: upgradeRequest },
38
+ connectionParams: {},
39
+ };
40
+ }
41
+ //# sourceMappingURL=execution-contexts.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"execution-contexts.js","sourceRoot":"","sources":["../../src/test-utils/execution-contexts.ts"],"names":[],"mappings":";;AAQA,oDAUC;AAMD,0DAiBC;AAMD,kDAQC;AAnDD,MAAM,OAAO,GAAG,GAAG,EAAE,CAAC,SAAS,CAAC;AAChC,MAAM,QAAQ;CAAG;AAGjB,SAAgB,oBAAoB,CAAC,OAAgB;IACnD,MAAM,IAAI,GAAG,CAAC,OAAO,EAAE,EAAE,EAAE,GAAG,EAAE,CAAC,SAAS,CAAC,CAAC;IAC5C,OAAO;QACL,OAAO,EAAE,GAAG,EAAE,CAAC,MAAM;QACrB,OAAO,EAAE,GAAG,EAAE,CAAC,IAAI;QACnB,aAAa,EAAE,CAAC,KAAa,EAAE,EAAE,CAAC,IAAI,CAAC,KAAK,CAAC;QAC7C,UAAU,EAAE,GAAG,EAAE,CAAC,OAAO;QACzB,QAAQ,EAAE,GAAG,EAAE,CAAC,QAAQ;QACxB,YAAY,EAAE,GAAG,EAAE,CAAC,CAAC,EAAE,UAAU,EAAE,GAAG,EAAE,CAAC,OAAO,EAAE,CAAC;KACrB,CAAC;AACnC,CAAC;AAMD,SAAgB,uBAAuB,CACrC,UAAmB,EACnB,YAAuB,OAAO,EAC9B,aAAsB;IAEtB,MAAM,IAAI,GAAG,EAAE,SAAS,EAAE,EAAE,SAAS,EAAE,IAAI,EAAE,aAAa,CAAC,CAAC,CAAC,EAAE,KAAK,EAAE,aAAa,EAAE,CAAC,CAAC,CAAC,SAAS,EAAE,EAAE,CAAC;IACtG,MAAM,IAAI,GAAG,CAAC,EAAE,EAAE,EAAE,EAAE,UAAU,EAAE,IAAI,CAAC,CAAC;IACxC,OAAO;QACL,OAAO,EAAE,GAAG,EAAE,CAAC,SAAS;QACxB,OAAO,EAAE,GAAG,EAAE,CAAC,IAAI;QACnB,aAAa,EAAE,CAAC,KAAa,EAAE,EAAE,CAAC,IAAI,CAAC,KAAK,CAAC;QAC7C,UAAU,EAAE,GAAG,EAAE,CAAC,OAAO;QACzB,QAAQ,EAAE,GAAG,EAAE,CAAC,QAAQ;QAGxB,YAAY,EAAE,GAAG,EAAE,CAAC,CAAC,EAAE,UAAU,EAAE,GAAG,EAAE,CAAC,IAAI,CAAC,CAAC,CAAC,EAAE,WAAW,EAAE,GAAG,EAAE,CAAC,IAAI,CAAC,CAAC,CAAC,EAAE,OAAO,EAAE,GAAG,EAAE,CAAC,IAAI,CAAC,CAAC,CAAC,EAAE,CAAC;KACzE,CAAC;AACnC,CAAC;AAMD,SAAgB,mBAAmB,CAAC,cAAmC;IACrE,OAAO;QACL,sBAAsB,EAAE,IAAI;QAC5B,YAAY,EAAE,IAAI;QAClB,aAAa,EAAE,EAAE;QACjB,KAAK,EAAE,EAAE,MAAM,EAAE,EAAE,EAAE,OAAO,EAAE,cAAc,EAAE;QAC9C,gBAAgB,EAAE,EAAE;KACrB,CAAC;AACJ,CAAC"}
@@ -0,0 +1,2 @@
1
+ export declare function readCookie(request: Record<string, any> | undefined, name: string): string | null;
2
+ //# sourceMappingURL=cookies.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"cookies.d.ts","sourceRoot":"","sources":["../../src/utils/cookies.ts"],"names":[],"mappings":"AAiBA,wBAAgB,UAAU,CAAC,OAAO,EAAE,MAAM,CAAC,MAAM,EAAE,GAAG,CAAC,GAAG,SAAS,EAAE,IAAI,EAAE,MAAM,GAAG,MAAM,GAAG,IAAI,CAiChG"}
@@ -0,0 +1,34 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.readCookie = readCookie;
4
+ function readCookie(request, name) {
5
+ const parsed = request?.cookies?.[name];
6
+ if (typeof parsed === 'string' && parsed !== '') {
7
+ return parsed;
8
+ }
9
+ const header = request?.headers?.cookie;
10
+ if (typeof header !== 'string') {
11
+ return null;
12
+ }
13
+ for (const pair of header.split(';')) {
14
+ const separator = pair.indexOf('=');
15
+ if (separator === -1 || pair.slice(0, separator).trim() !== name) {
16
+ continue;
17
+ }
18
+ let value = pair.slice(separator + 1).trim();
19
+ if (value.length >= 2 && value.startsWith('"') && value.endsWith('"')) {
20
+ value = value.slice(1, -1);
21
+ }
22
+ if (value === '') {
23
+ return null;
24
+ }
25
+ try {
26
+ return decodeURIComponent(value);
27
+ }
28
+ catch {
29
+ return value;
30
+ }
31
+ }
32
+ return null;
33
+ }
34
+ //# sourceMappingURL=cookies.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"cookies.js","sourceRoot":"","sources":["../../src/utils/cookies.ts"],"names":[],"mappings":";;AAiBA,gCAiCC;AAjCD,SAAgB,UAAU,CAAC,OAAwC,EAAE,IAAY;IAC/E,MAAM,MAAM,GAAG,OAAO,EAAE,OAAO,EAAE,CAAC,IAAI,CAAC,CAAC;IACxC,IAAI,OAAO,MAAM,KAAK,QAAQ,IAAI,MAAM,KAAK,EAAE,EAAE,CAAC;QAChD,OAAO,MAAM,CAAC;IAChB,CAAC;IAED,MAAM,MAAM,GAAG,OAAO,EAAE,OAAO,EAAE,MAAM,CAAC;IACxC,IAAI,OAAO,MAAM,KAAK,QAAQ,EAAE,CAAC;QAC/B,OAAO,IAAI,CAAC;IACd,CAAC;IAED,KAAK,MAAM,IAAI,IAAI,MAAM,CAAC,KAAK,CAAC,GAAG,CAAC,EAAE,CAAC;QACrC,MAAM,SAAS,GAAG,IAAI,CAAC,OAAO,CAAC,GAAG,CAAC,CAAC;QACpC,IAAI,SAAS,KAAK,CAAC,CAAC,IAAI,IAAI,CAAC,KAAK,CAAC,CAAC,EAAE,SAAS,CAAC,CAAC,IAAI,EAAE,KAAK,IAAI,EAAE,CAAC;YACjE,SAAS;QACX,CAAC;QAED,IAAI,KAAK,GAAG,IAAI,CAAC,KAAK,CAAC,SAAS,GAAG,CAAC,CAAC,CAAC,IAAI,EAAE,CAAC;QAC7C,IAAI,KAAK,CAAC,MAAM,IAAI,CAAC,IAAI,KAAK,CAAC,UAAU,CAAC,GAAG,CAAC,IAAI,KAAK,CAAC,QAAQ,CAAC,GAAG,CAAC,EAAE,CAAC;YACtE,KAAK,GAAG,KAAK,CAAC,KAAK,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,CAAC;QAC7B,CAAC;QACD,IAAI,KAAK,KAAK,EAAE,EAAE,CAAC;YACjB,OAAO,IAAI,CAAC;QACd,CAAC;QAED,IAAI,CAAC;YACH,OAAO,kBAAkB,CAAC,KAAK,CAAC,CAAC;QACnC,CAAC;QAAC,MAAM,CAAC;YACP,OAAO,KAAK,CAAC;QACf,CAAC;IACH,CAAC;IAED,OAAO,IAAI,CAAC;AACd,CAAC"}
@@ -1,3 +1,5 @@
1
1
  import { ExecutionContext } from '@nestjs/common';
2
- export declare function getRequestFromContext(context: ExecutionContext): Record<string, any>;
2
+ export declare function getRequestFromContext(context: ExecutionContext): Record<string, any> | undefined;
3
+ export declare function isWebSocketContext(context: ExecutionContext): boolean;
4
+ export declare function requireRequestFromContext(context: ExecutionContext): Record<string, any>;
3
5
  //# sourceMappingURL=execution-context.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"execution-context.d.ts","sourceRoot":"","sources":["../../src/utils/execution-context.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,gBAAgB,EAAE,MAAM,gBAAgB,CAAC;AAOlD,wBAAgB,qBAAqB,CAAC,OAAO,EAAE,gBAAgB,GAAG,MAAM,CAAC,MAAM,EAAE,GAAG,CAAC,CAMpF"}
1
+ {"version":3,"file":"execution-context.d.ts","sourceRoot":"","sources":["../../src/utils/execution-context.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,gBAAgB,EAAiC,MAAM,gBAAgB,CAAC;AAoBjF,wBAAgB,qBAAqB,CAAC,OAAO,EAAE,gBAAgB,GAAG,MAAM,CAAC,MAAM,EAAE,GAAG,CAAC,GAAG,SAAS,CAchG;AASD,wBAAgB,kBAAkB,CAAC,OAAO,EAAE,gBAAgB,GAAG,OAAO,CAYrE;AAWD,wBAAgB,yBAAyB,CAAC,OAAO,EAAE,gBAAgB,GAAG,MAAM,CAAC,MAAM,EAAE,GAAG,CAAC,CAexF"}
@@ -1,12 +1,47 @@
1
1
  "use strict";
2
2
  Object.defineProperty(exports, "__esModule", { value: true });
3
3
  exports.getRequestFromContext = getRequestFromContext;
4
+ exports.isWebSocketContext = isWebSocketContext;
5
+ exports.requireRequestFromContext = requireRequestFromContext;
6
+ const common_1 = require("@nestjs/common");
4
7
  const graphql_1 = require("@nestjs/graphql");
5
8
  function getRequestFromContext(context) {
6
- const contextType = context.getType();
7
- if (contextType === 'graphql') {
8
- return graphql_1.GqlExecutionContext.create(context).getContext().req;
9
+ if (context.getType() !== 'graphql') {
10
+ return context.switchToHttp().getRequest();
9
11
  }
10
- return context.switchToHttp().getRequest();
12
+ const gqlContext = graphql_1.GqlExecutionContext.create(context).getContext();
13
+ const req = gqlContext?.req;
14
+ if (req && !isGraphqlWsContext(req)) {
15
+ return req;
16
+ }
17
+ return gqlContext?.extra?.request ?? req?.extra?.request ?? undefined;
18
+ }
19
+ function isWebSocketContext(context) {
20
+ if (context.getType() !== 'graphql') {
21
+ return false;
22
+ }
23
+ const gqlExecutionContext = graphql_1.GqlExecutionContext.create(context);
24
+ const req = gqlExecutionContext.getContext()?.req;
25
+ if (req && !isGraphqlWsContext(req)) {
26
+ return false;
27
+ }
28
+ return gqlExecutionContext.getInfo()?.operation?.operation === 'subscription';
29
+ }
30
+ let warnedMissingRequest = false;
31
+ function requireRequestFromContext(context) {
32
+ const request = getRequestFromContext(context);
33
+ if (request) {
34
+ return request;
35
+ }
36
+ if (!warnedMissingRequest) {
37
+ warnedMissingRequest = true;
38
+ new common_1.Logger('AuthGuard').warn('An auth guard found no request in the execution context and rejected the operation. ' +
39
+ 'For GraphQL subscriptions on your own graphql-ws server, pass the connection context ' +
40
+ 'through: useServer({ schema, context: (ctx) => ctx }, wsServer).');
41
+ }
42
+ throw new common_1.UnauthorizedException();
43
+ }
44
+ function isGraphqlWsContext(value) {
45
+ return typeof value === 'object' && 'connectionInitReceived' in value && 'extra' in value;
11
46
  }
12
47
  //# sourceMappingURL=execution-context.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"execution-context.js","sourceRoot":"","sources":["../../src/utils/execution-context.ts"],"names":[],"mappings":";;AAOA,sDAMC;AAZD,6CAAsD;AAMtD,SAAgB,qBAAqB,CAAC,OAAyB;IAC7D,MAAM,WAAW,GAAG,OAAO,CAAC,OAAO,EAAU,CAAC;IAC9C,IAAI,WAAW,KAAK,SAAS,EAAE,CAAC;QAC9B,OAAO,6BAAmB,CAAC,MAAM,CAAC,OAAO,CAAC,CAAC,UAAU,EAAE,CAAC,GAAG,CAAC;IAC9D,CAAC;IACD,OAAO,OAAO,CAAC,YAAY,EAAE,CAAC,UAAU,EAAE,CAAC;AAC7C,CAAC"}
1
+ {"version":3,"file":"execution-context.js","sourceRoot":"","sources":["../../src/utils/execution-context.ts"],"names":[],"mappings":";;AAoBA,sDAcC;AASD,gDAYC;AAWD,8DAeC;AAjFD,2CAAiF;AACjF,6CAAsD;AAmBtD,SAAgB,qBAAqB,CAAC,OAAyB;IAC7D,IAAI,OAAO,CAAC,OAAO,EAAU,KAAK,SAAS,EAAE,CAAC;QAC5C,OAAO,OAAO,CAAC,YAAY,EAAE,CAAC,UAAU,EAAE,CAAC;IAC7C,CAAC;IAED,MAAM,UAAU,GAAG,6BAAmB,CAAC,MAAM,CAAC,OAAO,CAAC,CAAC,UAAU,EAAE,CAAC;IACpE,MAAM,GAAG,GAAG,UAAU,EAAE,GAAG,CAAC;IAG5B,IAAI,GAAG,IAAI,CAAC,kBAAkB,CAAC,GAAG,CAAC,EAAE,CAAC;QACpC,OAAO,GAAG,CAAC;IACb,CAAC;IAED,OAAO,UAAU,EAAE,KAAK,EAAE,OAAO,IAAI,GAAG,EAAE,KAAK,EAAE,OAAO,IAAI,SAAS,CAAC;AACxE,CAAC;AASD,SAAgB,kBAAkB,CAAC,OAAyB;IAC1D,IAAI,OAAO,CAAC,OAAO,EAAU,KAAK,SAAS,EAAE,CAAC;QAC5C,OAAO,KAAK,CAAC;IACf,CAAC;IAED,MAAM,mBAAmB,GAAG,6BAAmB,CAAC,MAAM,CAAC,OAAO,CAAC,CAAC;IAChE,MAAM,GAAG,GAAG,mBAAmB,CAAC,UAAU,EAAE,EAAE,GAAG,CAAC;IAClD,IAAI,GAAG,IAAI,CAAC,kBAAkB,CAAC,GAAG,CAAC,EAAE,CAAC;QACpC,OAAO,KAAK,CAAC;IACf,CAAC;IAED,OAAO,mBAAmB,CAAC,OAAO,EAAE,EAAE,SAAS,EAAE,SAAS,KAAK,cAAc,CAAC;AAChF,CAAC;AAED,IAAI,oBAAoB,GAAG,KAAK,CAAC;AASjC,SAAgB,yBAAyB,CAAC,OAAyB;IACjE,MAAM,OAAO,GAAG,qBAAqB,CAAC,OAAO,CAAC,CAAC;IAC/C,IAAI,OAAO,EAAE,CAAC;QACZ,OAAO,OAAO,CAAC;IACjB,CAAC;IAED,IAAI,CAAC,oBAAoB,EAAE,CAAC;QAC1B,oBAAoB,GAAG,IAAI,CAAC;QAC5B,IAAI,eAAM,CAAC,WAAW,CAAC,CAAC,IAAI,CAC1B,sFAAsF;YACpF,uFAAuF;YACvF,kEAAkE,CACrE,CAAC;IACJ,CAAC;IACD,MAAM,IAAI,8BAAqB,EAAE,CAAC;AACpC,CAAC;AAGD,SAAS,kBAAkB,CAAC,KAA0B;IACpD,OAAO,OAAO,KAAK,KAAK,QAAQ,IAAI,wBAAwB,IAAI,KAAK,IAAI,OAAO,IAAI,KAAK,CAAC;AAC5F,CAAC"}
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@ambushsoftworks/nestjs-auth-graphql",
3
- "version": "0.10.0",
3
+ "version": "0.11.0",
4
4
  "description": "Production-grade authentication package for NestJS with GraphQL, supporting JWT, OAuth, email/SMS verification, and biometric auth",
5
5
  "main": "dist/index.js",
6
6
  "types": "dist/index.d.ts",
@@ -96,13 +96,15 @@
96
96
  "eslint-config-prettier": "^9.1.0",
97
97
  "eslint-plugin-prettier": "^5.1.3",
98
98
  "graphql": "^16.12.0",
99
+ "graphql-ws": "^5.16.2",
99
100
  "jest": "^29.7.0",
100
101
  "prettier": "^3.2.4",
101
102
  "reflect-metadata": "^0.2.2",
102
103
  "rxjs": "^7.8.2",
103
104
  "supertest": "^7.2.2",
104
105
  "ts-jest": "^29.1.1",
105
- "typescript": "^5.3.3"
106
+ "typescript": "^5.3.3",
107
+ "ws": "^8.21.3"
106
108
  },
107
109
  "jest": {
108
110
  "moduleFileExtensions": [