@ambushsoftworks/nestjs-auth-graphql 0.10.0 → 0.12.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.
- package/CHANGELOG.md +248 -0
- package/README.md +212 -7
- package/dist/auth.module.d.ts +11 -1
- package/dist/auth.module.d.ts.map +1 -1
- package/dist/auth.module.js +92 -12
- package/dist/auth.module.js.map +1 -1
- package/dist/constants.d.ts +1 -0
- package/dist/constants.d.ts.map +1 -1
- package/dist/constants.js +2 -1
- package/dist/constants.js.map +1 -1
- package/dist/decorators/require-scopes.decorator.d.ts +2 -0
- package/dist/decorators/require-scopes.decorator.d.ts.map +1 -0
- package/dist/decorators/require-scopes.decorator.js +8 -0
- package/dist/decorators/require-scopes.decorator.js.map +1 -0
- package/dist/guards/create-auth-guard.d.ts.map +1 -1
- package/dist/guards/create-auth-guard.js +3 -6
- package/dist/guards/create-auth-guard.js.map +1 -1
- package/dist/guards/csrf.guard.d.ts +4 -0
- package/dist/guards/csrf.guard.d.ts.map +1 -1
- package/dist/guards/csrf.guard.js +33 -5
- package/dist/guards/csrf.guard.js.map +1 -1
- package/dist/guards/jwt-auth.guard.d.ts +2 -1
- package/dist/guards/jwt-auth.guard.d.ts.map +1 -1
- package/dist/guards/jwt-auth.guard.js +4 -0
- package/dist/guards/jwt-auth.guard.js.map +1 -1
- package/dist/guards/permission.guard.js +2 -2
- package/dist/guards/permission.guard.js.map +1 -1
- package/dist/guards/scope.guard.d.ts +8 -0
- package/dist/guards/scope.guard.d.ts.map +1 -0
- package/dist/guards/scope.guard.js +53 -0
- package/dist/guards/scope.guard.js.map +1 -0
- package/dist/guards/tenant.guard.d.ts.map +1 -1
- package/dist/guards/tenant.guard.js +3 -0
- package/dist/guards/tenant.guard.js.map +1 -1
- package/dist/index.d.ts +6 -0
- package/dist/index.d.ts.map +1 -1
- package/dist/index.js +6 -0
- package/dist/index.js.map +1 -1
- package/dist/interfaces/api-key-repository.interface.d.ts +3 -0
- package/dist/interfaces/api-key-repository.interface.d.ts.map +1 -1
- package/dist/interfaces/refresh-retry-cache.interface.d.ts +6 -0
- package/dist/interfaces/refresh-retry-cache.interface.d.ts.map +1 -0
- package/dist/interfaces/refresh-retry-cache.interface.js +3 -0
- package/dist/interfaces/refresh-retry-cache.interface.js.map +1 -0
- package/dist/middleware/realm.middleware.d.ts +4 -2
- package/dist/middleware/realm.middleware.d.ts.map +1 -1
- package/dist/middleware/realm.middleware.js +50 -34
- package/dist/middleware/realm.middleware.js.map +1 -1
- package/dist/resolvers/base-auth.resolver.d.ts.map +1 -1
- package/dist/resolvers/base-auth.resolver.js +0 -15
- package/dist/resolvers/base-auth.resolver.js.map +1 -1
- package/dist/services/auth.service.d.ts +1 -3
- package/dist/services/auth.service.d.ts.map +1 -1
- package/dist/services/auth.service.js +22 -13
- package/dist/services/auth.service.js.map +1 -1
- package/dist/services/in-memory-refresh-retry-cache.d.ts +11 -0
- package/dist/services/in-memory-refresh-retry-cache.d.ts.map +1 -0
- package/dist/services/in-memory-refresh-retry-cache.js +45 -0
- package/dist/services/in-memory-refresh-retry-cache.js.map +1 -0
- package/dist/services/refresh-token.service.d.ts +13 -14
- package/dist/services/refresh-token.service.d.ts.map +1 -1
- package/dist/services/refresh-token.service.js +112 -33
- package/dist/services/refresh-token.service.js.map +1 -1
- package/dist/services/verification.service.d.ts +2 -1
- package/dist/services/verification.service.d.ts.map +1 -1
- package/dist/services/verification.service.js +38 -8
- package/dist/services/verification.service.js.map +1 -1
- package/dist/strategies/api-key.strategy.d.ts +6 -1
- package/dist/strategies/api-key.strategy.d.ts.map +1 -1
- package/dist/strategies/api-key.strategy.js +40 -6
- package/dist/strategies/api-key.strategy.js.map +1 -1
- package/dist/strategies/external-jwt.strategy.d.ts +19 -0
- package/dist/strategies/external-jwt.strategy.d.ts.map +1 -0
- package/dist/strategies/external-jwt.strategy.js +124 -0
- package/dist/strategies/external-jwt.strategy.js.map +1 -0
- package/dist/strategies/jwt.strategy.d.ts +3 -1
- package/dist/strategies/jwt.strategy.d.ts.map +1 -1
- package/dist/strategies/jwt.strategy.js +16 -11
- package/dist/strategies/jwt.strategy.js.map +1 -1
- package/dist/test-utils/execution-contexts.d.ts +7 -0
- package/dist/test-utils/execution-contexts.d.ts.map +1 -0
- package/dist/test-utils/execution-contexts.js +41 -0
- package/dist/test-utils/execution-contexts.js.map +1 -0
- package/dist/utils/cookies.d.ts +2 -0
- package/dist/utils/cookies.d.ts.map +1 -0
- package/dist/utils/cookies.js +34 -0
- package/dist/utils/cookies.js.map +1 -0
- package/dist/utils/execution-context.d.ts +3 -1
- package/dist/utils/execution-context.d.ts.map +1 -1
- package/dist/utils/execution-context.js +39 -4
- package/dist/utils/execution-context.js.map +1 -1
- package/dist/utils/provider-helpers.d.ts +6 -0
- package/dist/utils/provider-helpers.d.ts.map +1 -1
- package/dist/utils/provider-helpers.js +4 -0
- package/dist/utils/provider-helpers.js.map +1 -1
- package/dist/utils/verification-base-url.d.ts +2 -0
- package/dist/utils/verification-base-url.d.ts.map +1 -0
- package/dist/utils/verification-base-url.js +19 -0
- package/dist/utils/verification-base-url.js.map +1 -0
- package/package.json +4 -2
|
@@ -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,
|
|
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
|
-
|
|
7
|
-
|
|
8
|
-
return graphql_1.GqlExecutionContext.create(context).getContext().req;
|
|
9
|
+
if (context.getType() !== 'graphql') {
|
|
10
|
+
return context.switchToHttp().getRequest();
|
|
9
11
|
}
|
|
10
|
-
|
|
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":";;
|
|
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"}
|
|
@@ -6,7 +6,13 @@ export interface UserAuthFields {
|
|
|
6
6
|
facebookId: string | null;
|
|
7
7
|
appleId: string | null;
|
|
8
8
|
}
|
|
9
|
+
export interface SocialIdentityFields {
|
|
10
|
+
googleId?: string | null;
|
|
11
|
+
facebookId?: string | null;
|
|
12
|
+
appleId?: string | null;
|
|
13
|
+
}
|
|
9
14
|
export declare function getProviderField(provider: SocialProvider): ProviderIdField;
|
|
10
15
|
export declare function hasOtherAuthMethods(user: UserAuthFields, excludeProvider: SocialProvider): boolean;
|
|
16
|
+
export declare function hasSocialIdentity(user: SocialIdentityFields): boolean;
|
|
11
17
|
export declare function countAuthMethods(user: UserAuthFields): number;
|
|
12
18
|
//# sourceMappingURL=provider-helpers.d.ts.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"provider-helpers.d.ts","sourceRoot":"","sources":["../../src/utils/provider-helpers.ts"],"names":[],"mappings":"AAIA,MAAM,MAAM,cAAc,GAAG,QAAQ,GAAG,UAAU,GAAG,OAAO,CAAC;AAC7D,MAAM,MAAM,eAAe,GAAG,UAAU,GAAG,YAAY,GAAG,SAAS,CAAC;AAKpE,MAAM,WAAW,cAAc;IAC7B,YAAY,EAAE,MAAM,GAAG,IAAI,CAAC;IAC5B,QAAQ,EAAE,MAAM,GAAG,IAAI,CAAC;IACxB,UAAU,EAAE,MAAM,GAAG,IAAI,CAAC;IAC1B,OAAO,EAAE,MAAM,GAAG,IAAI,CAAC;CACxB;AAWD,wBAAgB,gBAAgB,CAAC,QAAQ,EAAE,cAAc,GAAG,eAAe,CAO1E;AAYD,wBAAgB,mBAAmB,CACjC,IAAI,EAAE,cAAc,EACpB,eAAe,EAAE,cAAc,GAC9B,OAAO,CAUT;AAQD,wBAAgB,gBAAgB,CAAC,IAAI,EAAE,cAAc,GAAG,MAAM,CAS7D"}
|
|
1
|
+
{"version":3,"file":"provider-helpers.d.ts","sourceRoot":"","sources":["../../src/utils/provider-helpers.ts"],"names":[],"mappings":"AAIA,MAAM,MAAM,cAAc,GAAG,QAAQ,GAAG,UAAU,GAAG,OAAO,CAAC;AAC7D,MAAM,MAAM,eAAe,GAAG,UAAU,GAAG,YAAY,GAAG,SAAS,CAAC;AAKpE,MAAM,WAAW,cAAc;IAC7B,YAAY,EAAE,MAAM,GAAG,IAAI,CAAC;IAC5B,QAAQ,EAAE,MAAM,GAAG,IAAI,CAAC;IACxB,UAAU,EAAE,MAAM,GAAG,IAAI,CAAC;IAC1B,OAAO,EAAE,MAAM,GAAG,IAAI,CAAC;CACxB;AASD,MAAM,WAAW,oBAAoB;IACnC,QAAQ,CAAC,EAAE,MAAM,GAAG,IAAI,CAAC;IACzB,UAAU,CAAC,EAAE,MAAM,GAAG,IAAI,CAAC;IAC3B,OAAO,CAAC,EAAE,MAAM,GAAG,IAAI,CAAC;CACzB;AAWD,wBAAgB,gBAAgB,CAAC,QAAQ,EAAE,cAAc,GAAG,eAAe,CAO1E;AAYD,wBAAgB,mBAAmB,CACjC,IAAI,EAAE,cAAc,EACpB,eAAe,EAAE,cAAc,GAC9B,OAAO,CAUT;AAkBD,wBAAgB,iBAAiB,CAAC,IAAI,EAAE,oBAAoB,GAAG,OAAO,CAIrE;AAQD,wBAAgB,gBAAgB,CAAC,IAAI,EAAE,cAAc,GAAG,MAAM,CAS7D"}
|
|
@@ -2,6 +2,7 @@
|
|
|
2
2
|
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
3
|
exports.getProviderField = getProviderField;
|
|
4
4
|
exports.hasOtherAuthMethods = hasOtherAuthMethods;
|
|
5
|
+
exports.hasSocialIdentity = hasSocialIdentity;
|
|
5
6
|
exports.countAuthMethods = countAuthMethods;
|
|
6
7
|
function getProviderField(provider) {
|
|
7
8
|
const mapping = {
|
|
@@ -18,6 +19,9 @@ function hasOtherAuthMethods(user, excludeProvider) {
|
|
|
18
19
|
const hasApple = excludeProvider !== 'apple' && user.appleId != null;
|
|
19
20
|
return hasPassword || hasGoogle || hasFacebook || hasApple;
|
|
20
21
|
}
|
|
22
|
+
function hasSocialIdentity(user) {
|
|
23
|
+
return (user.googleId != null || user.facebookId != null || user.appleId != null);
|
|
24
|
+
}
|
|
21
25
|
function countAuthMethods(user) {
|
|
22
26
|
let count = 0;
|
|
23
27
|
if (user.passwordHash != null && user.passwordHash.length > 0)
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"provider-helpers.js","sourceRoot":"","sources":["../../src/utils/provider-helpers.ts"],"names":[],"mappings":";;
|
|
1
|
+
{"version":3,"file":"provider-helpers.js","sourceRoot":"","sources":["../../src/utils/provider-helpers.ts"],"names":[],"mappings":";;AAuCA,4CAOC;AAYD,kDAaC;AAkBD,8CAIC;AAQD,4CASC;AAvED,SAAgB,gBAAgB,CAAC,QAAwB;IACvD,MAAM,OAAO,GAA4C;QACvD,MAAM,EAAE,UAAU;QAClB,QAAQ,EAAE,YAAY;QACtB,KAAK,EAAE,SAAS;KACjB,CAAC;IACF,OAAO,OAAO,CAAC,QAAQ,CAAC,CAAC;AAC3B,CAAC;AAYD,SAAgB,mBAAmB,CACjC,IAAoB,EACpB,eAA+B;IAG/B,MAAM,WAAW,GAAG,IAAI,CAAC,YAAY,IAAI,IAAI,IAAI,IAAI,CAAC,YAAY,CAAC,MAAM,GAAG,CAAC,CAAC;IAG9E,MAAM,SAAS,GAAG,eAAe,KAAK,QAAQ,IAAI,IAAI,CAAC,QAAQ,IAAI,IAAI,CAAC;IACxE,MAAM,WAAW,GAAG,eAAe,KAAK,UAAU,IAAI,IAAI,CAAC,UAAU,IAAI,IAAI,CAAC;IAC9E,MAAM,QAAQ,GAAG,eAAe,KAAK,OAAO,IAAI,IAAI,CAAC,OAAO,IAAI,IAAI,CAAC;IAErE,OAAO,WAAW,IAAI,SAAS,IAAI,WAAW,IAAI,QAAQ,CAAC;AAC7D,CAAC;AAkBD,SAAgB,iBAAiB,CAAC,IAA0B;IAC1D,OAAO,CACL,IAAI,CAAC,QAAQ,IAAI,IAAI,IAAI,IAAI,CAAC,UAAU,IAAI,IAAI,IAAI,IAAI,CAAC,OAAO,IAAI,IAAI,CACzE,CAAC;AACJ,CAAC;AAQD,SAAgB,gBAAgB,CAAC,IAAoB;IACnD,IAAI,KAAK,GAAG,CAAC,CAAC;IAEd,IAAI,IAAI,CAAC,YAAY,IAAI,IAAI,IAAI,IAAI,CAAC,YAAY,CAAC,MAAM,GAAG,CAAC;QAAE,KAAK,EAAE,CAAC;IACvE,IAAI,IAAI,CAAC,QAAQ,IAAI,IAAI;QAAE,KAAK,EAAE,CAAC;IACnC,IAAI,IAAI,CAAC,UAAU,IAAI,IAAI;QAAE,KAAK,EAAE,CAAC;IACrC,IAAI,IAAI,CAAC,OAAO,IAAI,IAAI;QAAE,KAAK,EAAE,CAAC;IAElC,OAAO,KAAK,CAAC;AACf,CAAC"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"verification-base-url.d.ts","sourceRoot":"","sources":["../../src/utils/verification-base-url.ts"],"names":[],"mappings":"AAqBA,wBAAgB,mBAAmB,CAAC,OAAO,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM,GAAG,IAAI,CAiBzE"}
|
|
@@ -0,0 +1,19 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
+
exports.assertUsableBaseUrl = assertUsableBaseUrl;
|
|
4
|
+
const invalid_auth_config_exception_1 = require("../exceptions/invalid-auth-config.exception");
|
|
5
|
+
function assertUsableBaseUrl(baseUrl, source) {
|
|
6
|
+
let parsed;
|
|
7
|
+
try {
|
|
8
|
+
parsed = new URL(baseUrl);
|
|
9
|
+
}
|
|
10
|
+
catch {
|
|
11
|
+
throw new invalid_auth_config_exception_1.InvalidAuthConfigException(`[AuthModule] ${source} must be an absolute URL; received "${baseUrl}". ` +
|
|
12
|
+
"Include the scheme and host, e.g. 'https://app.example.com'.");
|
|
13
|
+
}
|
|
14
|
+
if (parsed.protocol !== 'https:' && parsed.protocol !== 'http:') {
|
|
15
|
+
throw new invalid_auth_config_exception_1.InvalidAuthConfigException(`[AuthModule] ${source} must use http or https; received "${baseUrl}". ` +
|
|
16
|
+
'Verification links are opened in a browser from an email client.');
|
|
17
|
+
}
|
|
18
|
+
}
|
|
19
|
+
//# sourceMappingURL=verification-base-url.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"verification-base-url.js","sourceRoot":"","sources":["../../src/utils/verification-base-url.ts"],"names":[],"mappings":";;AAqBA,kDAiBC;AAtCD,+FAAyF;AAqBzF,SAAgB,mBAAmB,CAAC,OAAe,EAAE,MAAc;IACjE,IAAI,MAAW,CAAC;IAChB,IAAI,CAAC;QACH,MAAM,GAAG,IAAI,GAAG,CAAC,OAAO,CAAC,CAAC;IAC5B,CAAC;IAAC,MAAM,CAAC;QACP,MAAM,IAAI,0DAA0B,CAClC,gBAAgB,MAAM,uCAAuC,OAAO,KAAK;YACvE,8DAA8D,CACjE,CAAC;IACJ,CAAC;IAED,IAAI,MAAM,CAAC,QAAQ,KAAK,QAAQ,IAAI,MAAM,CAAC,QAAQ,KAAK,OAAO,EAAE,CAAC;QAChE,MAAM,IAAI,0DAA0B,CAClC,gBAAgB,MAAM,sCAAsC,OAAO,KAAK;YACtE,kEAAkE,CACrE,CAAC;IACJ,CAAC;AACH,CAAC"}
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@ambushsoftworks/nestjs-auth-graphql",
|
|
3
|
-
"version": "0.
|
|
3
|
+
"version": "0.12.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": [
|