@nestlab/google-recaptcha 3.0.2 → 3.1.1
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/CONTRIBUTING.md +9 -3
- package/LICENSE +1 -1
- package/README.md +64 -4
- package/decorators/recaptcha-result.js +4 -2
- package/decorators/recaptcha-result.js.map +1 -1
- package/enums/classification-reason.d.ts +8 -0
- package/enums/classification-reason.js +13 -0
- package/enums/classification-reason.js.map +1 -0
- package/enums/error-code.d.ts +3 -1
- package/enums/error-code.js +3 -0
- package/enums/error-code.js.map +1 -1
- package/enums/google-recaptcha-context.d.ts +4 -0
- package/enums/google-recaptcha-context.js +9 -0
- package/enums/google-recaptcha-context.js.map +1 -0
- package/enums/google-recaptcha-enterprise-reason.d.ts +10 -0
- package/enums/google-recaptcha-enterprise-reason.js +15 -0
- package/enums/google-recaptcha-enterprise-reason.js.map +1 -0
- package/exceptions/google-recaptcha.exception.js +4 -0
- package/exceptions/google-recaptcha.exception.js.map +1 -1
- package/google-recaptcha.module.d.ts +1 -0
- package/google-recaptcha.module.js +35 -15
- package/google-recaptcha.module.js.map +1 -1
- package/guards/google-recaptcha.guard.d.ts +4 -3
- package/guards/google-recaptcha.guard.js +16 -8
- package/guards/google-recaptcha.guard.js.map +1 -1
- package/helpers/load-module.d.ts +2 -1
- package/helpers/load-module.js.map +1 -1
- package/helpers/xor.d.ts +1 -0
- package/helpers/xor.js +8 -0
- package/helpers/xor.js.map +1 -0
- package/index.d.ts +4 -0
- package/index.js +9 -1
- package/index.js.map +1 -1
- package/interfaces/google-recaptcha-enterprise-options.d.ts +5 -0
- package/interfaces/google-recaptcha-enterprise-options.js +3 -0
- package/interfaces/google-recaptcha-enterprise-options.js.map +1 -0
- package/interfaces/google-recaptcha-guard-options.d.ts +1 -1
- package/interfaces/google-recaptcha-module-options.d.ts +4 -2
- package/interfaces/google-recaptcha-validator-options.d.ts +3 -1
- package/interfaces/verify-response-enterprise.d.ts +29 -0
- package/interfaces/{google-recaptcha-validation-result.js → verify-response-enterprise.js} +1 -1
- package/interfaces/verify-response-enterprise.js.map +1 -0
- package/models/recaptcha-verification-result.d.ts +21 -5
- package/models/recaptcha-verification-result.js +15 -4
- package/models/recaptcha-verification-result.js.map +1 -1
- package/package.json +21 -8
- package/services/enterprise-reason.transformer.d.ts +5 -0
- package/services/enterprise-reason.transformer.js +40 -0
- package/services/enterprise-reason.transformer.js.map +1 -0
- package/services/recaptcha-request.resolver.d.ts +1 -1
- package/services/recaptcha-request.resolver.js +4 -2
- package/services/recaptcha-request.resolver.js.map +1 -1
- package/services/recaptcha-validator.resolver.d.ts +11 -0
- package/services/recaptcha-validator.resolver.js +44 -0
- package/services/recaptcha-validator.resolver.js.map +1 -0
- package/services/validators/abstract-google-recaptcha-validator.d.ts +11 -0
- package/services/validators/abstract-google-recaptcha-validator.js +28 -0
- package/services/validators/abstract-google-recaptcha-validator.js.map +1 -0
- package/services/validators/google-recaptcha-enterprise.validator.d.ts +17 -0
- package/services/validators/google-recaptcha-enterprise.validator.js +114 -0
- package/services/validators/google-recaptcha-enterprise.validator.js.map +1 -0
- package/services/validators/google-recaptcha.validator.d.ts +21 -0
- package/services/{google-recaptcha.validator.js → validators/google-recaptcha.validator.js} +21 -29
- package/services/validators/google-recaptcha.validator.js.map +1 -0
- package/constants.d.ts +0 -1
- package/constants.js +0 -5
- package/constants.js.map +0 -1
- package/interfaces/google-recaptcha-validation-result.d.ts +0 -9
- package/interfaces/google-recaptcha-validation-result.js.map +0 -1
- package/services/google-recaptcha.validator.d.ts +0 -22
- package/services/google-recaptcha.validator.js.map +0 -1
|
@@ -2,6 +2,8 @@ import { GoogleRecaptchaGuardOptions } from './google-recaptcha-guard-options';
|
|
|
2
2
|
import { GoogleRecaptchaValidatorOptions } from './google-recaptcha-validator-options';
|
|
3
3
|
import { ModuleMetadata, Type } from '@nestjs/common/interfaces';
|
|
4
4
|
import { Logger } from '@nestjs/common';
|
|
5
|
+
import { InjectionToken } from '@nestjs/common/interfaces/modules/injection-token.interface';
|
|
6
|
+
import { OptionalFactoryDependency } from '@nestjs/common/interfaces/modules/optional-factory-dependency.interface';
|
|
5
7
|
export interface GoogleRecaptchaModuleOptions extends GoogleRecaptchaValidatorOptions, GoogleRecaptchaGuardOptions {
|
|
6
8
|
debug?: boolean;
|
|
7
9
|
logger?: Logger;
|
|
@@ -10,8 +12,8 @@ export interface GoogleRecaptchaOptionsFactory {
|
|
|
10
12
|
createGoogleRecaptchaOptions(): Promise<GoogleRecaptchaModuleOptions> | GoogleRecaptchaModuleOptions;
|
|
11
13
|
}
|
|
12
14
|
export interface GoogleRecaptchaModuleAsyncOptions extends Pick<ModuleMetadata, 'imports'> {
|
|
13
|
-
inject?:
|
|
15
|
+
inject?: Array<InjectionToken | OptionalFactoryDependency>;
|
|
14
16
|
useClass?: Type<GoogleRecaptchaOptionsFactory>;
|
|
15
17
|
useExisting?: Type<GoogleRecaptchaOptionsFactory>;
|
|
16
|
-
useFactory?: (...args:
|
|
18
|
+
useFactory?: (...args: unknown[]) => Promise<GoogleRecaptchaModuleOptions> | GoogleRecaptchaModuleOptions;
|
|
17
19
|
}
|
|
@@ -1,8 +1,9 @@
|
|
|
1
1
|
import { GoogleRecaptchaNetwork } from '../enums/google-recaptcha-network';
|
|
2
2
|
import { ScoreValidator } from '../types';
|
|
3
3
|
import { AxiosRequestConfig } from 'axios';
|
|
4
|
+
import { GoogleRecaptchaEnterpriseOptions } from './google-recaptcha-enterprise-options';
|
|
4
5
|
export interface GoogleRecaptchaValidatorOptions {
|
|
5
|
-
secretKey
|
|
6
|
+
secretKey?: string;
|
|
6
7
|
actions?: string[];
|
|
7
8
|
score?: ScoreValidator;
|
|
8
9
|
/**
|
|
@@ -13,4 +14,5 @@ export interface GoogleRecaptchaValidatorOptions {
|
|
|
13
14
|
*/
|
|
14
15
|
network?: GoogleRecaptchaNetwork | string;
|
|
15
16
|
axiosConfig?: AxiosRequestConfig;
|
|
17
|
+
enterprise?: GoogleRecaptchaEnterpriseOptions;
|
|
16
18
|
}
|
|
@@ -0,0 +1,29 @@
|
|
|
1
|
+
import { GoogleRecaptchaEnterpriseReason } from '../enums/google-recaptcha-enterprise-reason';
|
|
2
|
+
import { ClassificationReason } from '../enums/classification-reason';
|
|
3
|
+
export interface VerifyResponseEnterprise {
|
|
4
|
+
tokenProperties: VerifyResponseEnterpriseTokenProperties;
|
|
5
|
+
riskAnalysis: VerifyResponseEnterpriseRiskAnalysis;
|
|
6
|
+
event: VerifyTokenEnterpriseResponseEvent;
|
|
7
|
+
name: string;
|
|
8
|
+
}
|
|
9
|
+
export interface VerifyTokenEnterpriseEvent {
|
|
10
|
+
token: string;
|
|
11
|
+
siteKey: string;
|
|
12
|
+
expectedAction: string;
|
|
13
|
+
}
|
|
14
|
+
export interface VerifyTokenEnterpriseResponseEvent extends VerifyTokenEnterpriseEvent {
|
|
15
|
+
userAgent: string;
|
|
16
|
+
userIpAddress: string;
|
|
17
|
+
hashedAccountId: string;
|
|
18
|
+
}
|
|
19
|
+
export interface VerifyResponseEnterpriseTokenProperties {
|
|
20
|
+
valid: boolean;
|
|
21
|
+
invalidReason?: GoogleRecaptchaEnterpriseReason;
|
|
22
|
+
hostname: string;
|
|
23
|
+
action: string;
|
|
24
|
+
createTime: string;
|
|
25
|
+
}
|
|
26
|
+
export interface VerifyResponseEnterpriseRiskAnalysis {
|
|
27
|
+
score: number;
|
|
28
|
+
reasons: ClassificationReason[];
|
|
29
|
+
}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"verify-response-enterprise.js","sourceRoot":"","sources":["../../src/interfaces/verify-response-enterprise.ts"],"names":[],"mappings":""}
|
|
@@ -1,7 +1,23 @@
|
|
|
1
|
-
import {
|
|
2
|
-
|
|
3
|
-
|
|
4
|
-
|
|
1
|
+
import { ErrorCode } from '../enums/error-code';
|
|
2
|
+
import { VerifyResponseEnterprise } from '../interfaces/verify-response-enterprise';
|
|
3
|
+
import { LiteralObject } from '@nestjs/common';
|
|
4
|
+
export interface RecaptchaVerificationResultOptions<Res> {
|
|
5
|
+
success: boolean;
|
|
6
|
+
nativeResponse: Res;
|
|
7
|
+
hostname: string;
|
|
8
|
+
action?: string;
|
|
9
|
+
score?: number;
|
|
10
|
+
errors: ErrorCode[];
|
|
11
|
+
}
|
|
12
|
+
export declare class RecaptchaVerificationResult<Res = LiteralObject> {
|
|
13
|
+
private readonly options;
|
|
14
|
+
readonly success: boolean;
|
|
5
15
|
readonly hostname: string;
|
|
6
|
-
|
|
16
|
+
readonly action: string | undefined;
|
|
17
|
+
readonly score: number | undefined;
|
|
18
|
+
readonly nativeResponse: Res;
|
|
19
|
+
readonly errors: ErrorCode[];
|
|
20
|
+
constructor(options: RecaptchaVerificationResultOptions<Res>);
|
|
21
|
+
getResponse(): Res;
|
|
22
|
+
getEnterpriseRiskAnalytics(): VerifyResponseEnterprise | null;
|
|
7
23
|
}
|
|
@@ -2,10 +2,21 @@
|
|
|
2
2
|
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
3
|
exports.RecaptchaVerificationResult = void 0;
|
|
4
4
|
class RecaptchaVerificationResult {
|
|
5
|
-
constructor(
|
|
6
|
-
this.
|
|
7
|
-
this.
|
|
8
|
-
this.hostname =
|
|
5
|
+
constructor(options) {
|
|
6
|
+
this.options = options;
|
|
7
|
+
this.success = options.success;
|
|
8
|
+
this.hostname = options.hostname;
|
|
9
|
+
this.action = options.action;
|
|
10
|
+
this.score = options.score;
|
|
11
|
+
this.errors = options.errors;
|
|
12
|
+
this.nativeResponse = options.nativeResponse;
|
|
13
|
+
}
|
|
14
|
+
getResponse() {
|
|
15
|
+
return this.nativeResponse;
|
|
16
|
+
}
|
|
17
|
+
getEnterpriseRiskAnalytics() {
|
|
18
|
+
const res = this.getResponse();
|
|
19
|
+
return res['riskAnalysis'] || null;
|
|
9
20
|
}
|
|
10
21
|
}
|
|
11
22
|
exports.RecaptchaVerificationResult = RecaptchaVerificationResult;
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"recaptcha-verification-result.js","sourceRoot":"","sources":["../../src/models/recaptcha-verification-result.ts"],"names":[],"mappings":";;;
|
|
1
|
+
{"version":3,"file":"recaptcha-verification-result.js","sourceRoot":"","sources":["../../src/models/recaptcha-verification-result.ts"],"names":[],"mappings":";;;AAaA,MAAa,2BAA2B;IAapC,YAA6B,OAAgD;QAAhD,YAAO,GAAP,OAAO,CAAyC;QACzE,IAAI,CAAC,OAAO,GAAG,OAAO,CAAC,OAAO,CAAC;QAC/B,IAAI,CAAC,QAAQ,GAAG,OAAO,CAAC,QAAQ,CAAC;QACjC,IAAI,CAAC,MAAM,GAAG,OAAO,CAAC,MAAM,CAAC;QAC7B,IAAI,CAAC,KAAK,GAAG,OAAO,CAAC,KAAK,CAAC;QAC3B,IAAI,CAAC,MAAM,GAAG,OAAO,CAAC,MAAM,CAAC;QAC7B,IAAI,CAAC,cAAc,GAAG,OAAO,CAAC,cAAc,CAAC;IACjD,CAAC;IAED,WAAW;QACP,OAAO,IAAI,CAAC,cAAc,CAAC;IAC/B,CAAC;IAED,0BAA0B;QACtB,MAAM,GAAG,GAAG,IAAI,CAAC,WAAW,EAAE,CAAC;QAE/B,OAAO,GAAG,CAAC,cAAc,CAAC,IAAI,IAAI,CAAC;IACvC,CAAC;CACJ;AA/BD,kEA+BC"}
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@nestlab/google-recaptcha",
|
|
3
|
-
"version": "3.
|
|
3
|
+
"version": "3.1.1",
|
|
4
4
|
"description": "Google recaptcha module for NestJS.",
|
|
5
5
|
"keywords": [
|
|
6
6
|
"nest",
|
|
@@ -17,8 +17,13 @@
|
|
|
17
17
|
],
|
|
18
18
|
"private": false,
|
|
19
19
|
"main": "index.js",
|
|
20
|
+
"module": "index.js",
|
|
21
|
+
"types": "index.d.ts",
|
|
22
|
+
"readme": "README.md",
|
|
20
23
|
"scripts": {
|
|
21
24
|
"build": "rimraf dist && tsc && cp package.json dist && cp README.md dist && cp LICENSE dist && cp CONTRIBUTING.md dist",
|
|
25
|
+
"lint:fix": "eslint . --fix",
|
|
26
|
+
"lint:check": "eslint . --max-warnings=0",
|
|
22
27
|
"test": "jest --silent=false",
|
|
23
28
|
"test:cov": "jest --coverage"
|
|
24
29
|
},
|
|
@@ -37,20 +42,28 @@
|
|
|
37
42
|
"@nestjs/common": ">=8.0.0 <10.0.0",
|
|
38
43
|
"@nestjs/core": ">=8.0.0 <10.0.0"
|
|
39
44
|
},
|
|
45
|
+
"peerDependenciesMeta": {
|
|
46
|
+
"@nestjs/graphql": {
|
|
47
|
+
"optional": true
|
|
48
|
+
}
|
|
49
|
+
},
|
|
40
50
|
"devDependencies": {
|
|
41
51
|
"@nestjs/axios": "^0.1.0",
|
|
42
|
-
"@nestjs/common": "^9.0.
|
|
43
|
-
"@nestjs/core": "^9.0.
|
|
52
|
+
"@nestjs/common": "^9.0.11",
|
|
53
|
+
"@nestjs/core": "^9.0.11",
|
|
44
54
|
"@nestjs/graphql": "^10.0.21",
|
|
45
|
-
"@nestjs/platform-express": "^9.0.
|
|
46
|
-
"@nestjs/testing": "^9.0.
|
|
55
|
+
"@nestjs/platform-express": "^9.0.11",
|
|
56
|
+
"@nestjs/testing": "^9.0.11",
|
|
47
57
|
"@types/express": "^4.17.13",
|
|
48
|
-
"@types/jest": "^28.1.
|
|
49
|
-
"@types/node": "^18.
|
|
58
|
+
"@types/jest": "^28.1.7",
|
|
59
|
+
"@types/node": "^18.7.6",
|
|
60
|
+
"@typescript-eslint/eslint-plugin": "^5.33.1",
|
|
61
|
+
"@typescript-eslint/parser": "^5.33.1",
|
|
62
|
+
"eslint": "^8.22.0",
|
|
50
63
|
"jest": "^28.1.3",
|
|
51
64
|
"reflect-metadata": "^0.1.13",
|
|
52
65
|
"rxjs": "^7.5.6",
|
|
53
|
-
"ts-jest": "^28.0.
|
|
66
|
+
"ts-jest": "^28.0.8",
|
|
54
67
|
"ts-loader": "^9.3.1",
|
|
55
68
|
"ts-node": "^10.9.1",
|
|
56
69
|
"typescript": "^4.7.4"
|
|
@@ -0,0 +1,40 @@
|
|
|
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
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
9
|
+
exports.EnterpriseReasonTransformer = void 0;
|
|
10
|
+
const common_1 = require("@nestjs/common");
|
|
11
|
+
const google_recaptcha_enterprise_reason_1 = require("../enums/google-recaptcha-enterprise-reason");
|
|
12
|
+
const error_code_1 = require("../enums/error-code");
|
|
13
|
+
let EnterpriseReasonTransformer = class EnterpriseReasonTransformer {
|
|
14
|
+
transform(errCode) {
|
|
15
|
+
switch (errCode) {
|
|
16
|
+
case google_recaptcha_enterprise_reason_1.GoogleRecaptchaEnterpriseReason.BrowserError:
|
|
17
|
+
return error_code_1.ErrorCode.BrowserError;
|
|
18
|
+
case google_recaptcha_enterprise_reason_1.GoogleRecaptchaEnterpriseReason.UnknownInvalidReason:
|
|
19
|
+
return error_code_1.ErrorCode.UnknownError;
|
|
20
|
+
case google_recaptcha_enterprise_reason_1.GoogleRecaptchaEnterpriseReason.SiteMismatch:
|
|
21
|
+
return error_code_1.ErrorCode.SiteMismatch;
|
|
22
|
+
case google_recaptcha_enterprise_reason_1.GoogleRecaptchaEnterpriseReason.Expired:
|
|
23
|
+
case google_recaptcha_enterprise_reason_1.GoogleRecaptchaEnterpriseReason.Dupe:
|
|
24
|
+
return error_code_1.ErrorCode.TimeoutOrDuplicate;
|
|
25
|
+
case google_recaptcha_enterprise_reason_1.GoogleRecaptchaEnterpriseReason.Malformed:
|
|
26
|
+
return error_code_1.ErrorCode.InvalidInputResponse;
|
|
27
|
+
case google_recaptcha_enterprise_reason_1.GoogleRecaptchaEnterpriseReason.Missing:
|
|
28
|
+
return error_code_1.ErrorCode.MissingInputResponse;
|
|
29
|
+
case google_recaptcha_enterprise_reason_1.GoogleRecaptchaEnterpriseReason.InvalidReasonUnspecified:
|
|
30
|
+
return error_code_1.ErrorCode.UnknownError;
|
|
31
|
+
default:
|
|
32
|
+
return error_code_1.ErrorCode.UnknownError;
|
|
33
|
+
}
|
|
34
|
+
}
|
|
35
|
+
};
|
|
36
|
+
EnterpriseReasonTransformer = __decorate([
|
|
37
|
+
(0, common_1.Injectable)()
|
|
38
|
+
], EnterpriseReasonTransformer);
|
|
39
|
+
exports.EnterpriseReasonTransformer = EnterpriseReasonTransformer;
|
|
40
|
+
//# sourceMappingURL=enterprise-reason.transformer.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"enterprise-reason.transformer.js","sourceRoot":"","sources":["../../src/services/enterprise-reason.transformer.ts"],"names":[],"mappings":";;;;;;;;;AAAA,2CAA4C;AAC5C,oGAA8F;AAC9F,oDAAgD;AAGhD,IAAa,2BAA2B,GAAxC,MAAa,2BAA2B;IACpC,SAAS,CAAC,OAAwC;QAC9C,QAAQ,OAAO,EAAE;YACb,KAAK,oEAA+B,CAAC,YAAY;gBAC7C,OAAO,sBAAS,CAAC,YAAY,CAAC;YAElC,KAAK,oEAA+B,CAAC,oBAAoB;gBACrD,OAAO,sBAAS,CAAC,YAAY,CAAC;YAElC,KAAK,oEAA+B,CAAC,YAAY;gBAC7C,OAAO,sBAAS,CAAC,YAAY,CAAC;YAElC,KAAK,oEAA+B,CAAC,OAAO,CAAC;YAC7C,KAAK,oEAA+B,CAAC,IAAI;gBACrC,OAAO,sBAAS,CAAC,kBAAkB,CAAC;YAExC,KAAK,oEAA+B,CAAC,SAAS;gBAC1C,OAAO,sBAAS,CAAC,oBAAoB,CAAC;YAE1C,KAAK,oEAA+B,CAAC,OAAO;gBACxC,OAAO,sBAAS,CAAC,oBAAoB,CAAC;YAE1C,KAAK,oEAA+B,CAAC,wBAAwB;gBACzD,OAAO,sBAAS,CAAC,YAAY,CAAC;YAElC;gBACI,OAAO,sBAAS,CAAC,YAAY,CAAC;SACrC;IACL,CAAC;CACJ,CAAA;AA7BY,2BAA2B;IADvC,IAAA,mBAAU,GAAE;GACA,2BAA2B,CA6BvC;AA7BY,kEAA2B"}
|
|
@@ -17,8 +17,10 @@ let RecaptchaRequestResolver = class RecaptchaRequestResolver {
|
|
|
17
17
|
case 'http':
|
|
18
18
|
return context.switchToHttp().getRequest();
|
|
19
19
|
case 'graphql':
|
|
20
|
-
|
|
21
|
-
|
|
20
|
+
return (_c = (_b = (_a = (0, load_module_1.loadModule)('@nestjs/graphql', true)
|
|
21
|
+
.GqlExecutionContext
|
|
22
|
+
.create(context)
|
|
23
|
+
.getContext().req) === null || _a === void 0 ? void 0 : _a.socket) === null || _b === void 0 ? void 0 : _b._httpMessage) === null || _c === void 0 ? void 0 : _c.req;
|
|
22
24
|
default:
|
|
23
25
|
throw new Error(`Unsupported request type '${contextType}'.`);
|
|
24
26
|
}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"recaptcha-request.resolver.js","sourceRoot":"","sources":["../../src/services/recaptcha-request.resolver.ts"],"names":[],"mappings":";;;;;;;;;AAAA,2CAA8D;AAC9D,wDAAoD;AAIpD,IAAa,wBAAwB,GAArC,MAAa,wBAAwB;IACjC,OAAO,
|
|
1
|
+
{"version":3,"file":"recaptcha-request.resolver.js","sourceRoot":"","sources":["../../src/services/recaptcha-request.resolver.ts"],"names":[],"mappings":";;;;;;;;;AAAA,2CAA8D;AAC9D,wDAAoD;AAIpD,IAAa,wBAAwB,GAArC,MAAa,wBAAwB;IACjC,OAAO,CAAI,OAAyB;;QAChC,MAAM,WAAW,GAAyB,OAAO,CAAC,OAAO,EAAE,CAAC;QAE5D,QAAQ,WAAW,EAAE;YACjB,KAAK,MAAM;gBACP,OAAO,OAAO,CAAC,YAAY,EAAE,CAAC,UAAU,EAAE,CAAC;YAE/C,KAAK,SAAS;gBACV,OAAO,MAAA,MAAA,MAAA,IAAA,wBAAU,EAAC,iBAAiB,EAAE,IAAI,CAAC;qBACrC,mBAAmB;qBACnB,MAAM,CAAC,OAAO,CAAC;qBACf,UAAU,EAAE,CAAC,GAAG,0CAAE,MAAM,0CAAE,YAAY,0CAAE,GAAG,CAAC;YACrD;gBACI,MAAM,IAAI,KAAK,CAAC,6BAA6B,WAAW,IAAI,CAAC,CAAC;SACrE;IACL,CAAC;CACJ,CAAA;AAjBY,wBAAwB;IADpC,IAAA,mBAAU,GAAE;GACA,wBAAwB,CAiBpC;AAjBY,4DAAwB"}
|
|
@@ -0,0 +1,11 @@
|
|
|
1
|
+
import { AbstractGoogleRecaptchaValidator } from './validators/abstract-google-recaptcha-validator';
|
|
2
|
+
import { GoogleRecaptchaModuleOptions } from '../interfaces/google-recaptcha-module-options';
|
|
3
|
+
import { GoogleRecaptchaValidator } from './validators/google-recaptcha.validator';
|
|
4
|
+
import { GoogleRecaptchaEnterpriseValidator } from './validators/google-recaptcha-enterprise.validator';
|
|
5
|
+
export declare class RecaptchaValidatorResolver {
|
|
6
|
+
private readonly options;
|
|
7
|
+
protected readonly googleRecaptchaValidator: GoogleRecaptchaValidator;
|
|
8
|
+
protected readonly googleRecaptchaEnterpriseValidator: GoogleRecaptchaEnterpriseValidator;
|
|
9
|
+
constructor(options: GoogleRecaptchaModuleOptions, googleRecaptchaValidator: GoogleRecaptchaValidator, googleRecaptchaEnterpriseValidator: GoogleRecaptchaEnterpriseValidator);
|
|
10
|
+
resolve(): AbstractGoogleRecaptchaValidator<unknown>;
|
|
11
|
+
}
|
|
@@ -0,0 +1,44 @@
|
|
|
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
|
+
var __param = (this && this.__param) || function (paramIndex, decorator) {
|
|
12
|
+
return function (target, key) { decorator(target, key, paramIndex); }
|
|
13
|
+
};
|
|
14
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
15
|
+
exports.RecaptchaValidatorResolver = void 0;
|
|
16
|
+
const common_1 = require("@nestjs/common");
|
|
17
|
+
const provider_declarations_1 = require("../provider.declarations");
|
|
18
|
+
const google_recaptcha_validator_1 = require("./validators/google-recaptcha.validator");
|
|
19
|
+
const google_recaptcha_enterprise_validator_1 = require("./validators/google-recaptcha-enterprise.validator");
|
|
20
|
+
let RecaptchaValidatorResolver = class RecaptchaValidatorResolver {
|
|
21
|
+
constructor(options, googleRecaptchaValidator, googleRecaptchaEnterpriseValidator) {
|
|
22
|
+
this.options = options;
|
|
23
|
+
this.googleRecaptchaValidator = googleRecaptchaValidator;
|
|
24
|
+
this.googleRecaptchaEnterpriseValidator = googleRecaptchaEnterpriseValidator;
|
|
25
|
+
}
|
|
26
|
+
resolve() {
|
|
27
|
+
var _a;
|
|
28
|
+
if (this.options.secretKey) {
|
|
29
|
+
return this.googleRecaptchaValidator;
|
|
30
|
+
}
|
|
31
|
+
if ((_a = Object.keys(this.options.enterprise || {})) === null || _a === void 0 ? void 0 : _a.length) {
|
|
32
|
+
return this.googleRecaptchaEnterpriseValidator;
|
|
33
|
+
}
|
|
34
|
+
throw new Error('Cannot resolve google recaptcha validator');
|
|
35
|
+
}
|
|
36
|
+
};
|
|
37
|
+
RecaptchaValidatorResolver = __decorate([
|
|
38
|
+
(0, common_1.Injectable)(),
|
|
39
|
+
__param(0, (0, common_1.Inject)(provider_declarations_1.RECAPTCHA_OPTIONS)),
|
|
40
|
+
__metadata("design:paramtypes", [Object, google_recaptcha_validator_1.GoogleRecaptchaValidator,
|
|
41
|
+
google_recaptcha_enterprise_validator_1.GoogleRecaptchaEnterpriseValidator])
|
|
42
|
+
], RecaptchaValidatorResolver);
|
|
43
|
+
exports.RecaptchaValidatorResolver = RecaptchaValidatorResolver;
|
|
44
|
+
//# sourceMappingURL=recaptcha-validator.resolver.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"recaptcha-validator.resolver.js","sourceRoot":"","sources":["../../src/services/recaptcha-validator.resolver.ts"],"names":[],"mappings":";;;;;;;;;;;;;;;AAAA,2CAAoD;AAEpD,oEAA6D;AAE7D,wFAAmF;AACnF,8GAAwG;AAGxG,IAAa,0BAA0B,GAAvC,MAAa,0BAA0B;IACnC,YAAwD,OAAqC,EAC9D,wBAAkD,EAClD,kCAAsE;QAF7C,YAAO,GAAP,OAAO,CAA8B;QAC9D,6BAAwB,GAAxB,wBAAwB,CAA0B;QAClD,uCAAkC,GAAlC,kCAAkC,CAAoC;IACrG,CAAC;IAED,OAAO;;QACH,IAAI,IAAI,CAAC,OAAO,CAAC,SAAS,EAAE;YACxB,OAAO,IAAI,CAAC,wBAAwB,CAAC;SACxC;QAED,IAAI,MAAA,MAAM,CAAC,IAAI,CAAC,IAAI,CAAC,OAAO,CAAC,UAAU,IAAI,EAAE,CAAC,0CAAE,MAAM,EAAE;YACpD,OAAO,IAAI,CAAC,kCAAkC,CAAC;SAClD;QAED,MAAM,IAAI,KAAK,CAAC,2CAA2C,CAAC,CAAC;IACjE,CAAC;CACJ,CAAA;AAjBY,0BAA0B;IADtC,IAAA,mBAAU,GAAE;IAEI,WAAA,IAAA,eAAM,EAAC,yCAAiB,CAAC,CAAA;6CACmB,qDAAwB;QACd,0EAAkC;GAH5F,0BAA0B,CAiBtC;AAjBY,gEAA0B"}
|
|
@@ -0,0 +1,11 @@
|
|
|
1
|
+
import { VerifyResponseOptions } from '../../interfaces/verify-response-decorator-options';
|
|
2
|
+
import { ScoreValidator } from '../../types';
|
|
3
|
+
import { GoogleRecaptchaModuleOptions } from '../../interfaces/google-recaptcha-module-options';
|
|
4
|
+
import { RecaptchaVerificationResult } from '../../models/recaptcha-verification-result';
|
|
5
|
+
export declare abstract class AbstractGoogleRecaptchaValidator<Res> {
|
|
6
|
+
protected readonly options: GoogleRecaptchaModuleOptions;
|
|
7
|
+
protected constructor(options: GoogleRecaptchaModuleOptions);
|
|
8
|
+
abstract validate(options: VerifyResponseOptions): Promise<RecaptchaVerificationResult<Res>>;
|
|
9
|
+
protected isValidAction(action: string, options?: VerifyResponseOptions): boolean;
|
|
10
|
+
protected isValidScore(score: number, validator?: ScoreValidator): boolean;
|
|
11
|
+
}
|
|
@@ -0,0 +1,28 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
+
exports.AbstractGoogleRecaptchaValidator = void 0;
|
|
4
|
+
class AbstractGoogleRecaptchaValidator {
|
|
5
|
+
constructor(options) {
|
|
6
|
+
this.options = options;
|
|
7
|
+
}
|
|
8
|
+
isValidAction(action, options) {
|
|
9
|
+
if (options.action) {
|
|
10
|
+
return options.action === action;
|
|
11
|
+
}
|
|
12
|
+
return this.options.actions
|
|
13
|
+
? this.options.actions.includes(action)
|
|
14
|
+
: true;
|
|
15
|
+
}
|
|
16
|
+
isValidScore(score, validator) {
|
|
17
|
+
const finalValidator = validator || this.options.score;
|
|
18
|
+
if (finalValidator) {
|
|
19
|
+
if (typeof finalValidator === 'function') {
|
|
20
|
+
return finalValidator(score);
|
|
21
|
+
}
|
|
22
|
+
return score >= finalValidator;
|
|
23
|
+
}
|
|
24
|
+
return true;
|
|
25
|
+
}
|
|
26
|
+
}
|
|
27
|
+
exports.AbstractGoogleRecaptchaValidator = AbstractGoogleRecaptchaValidator;
|
|
28
|
+
//# sourceMappingURL=abstract-google-recaptcha-validator.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"abstract-google-recaptcha-validator.js","sourceRoot":"","sources":["../../../src/services/validators/abstract-google-recaptcha-validator.ts"],"names":[],"mappings":";;;AAKA,MAAsB,gCAAgC;IAClD,YAAyC,OAAqC;QAArC,YAAO,GAAP,OAAO,CAA8B;IAC9E,CAAC;IAIS,aAAa,CAAC,MAAc,EAAE,OAA+B;QACnE,IAAI,OAAO,CAAC,MAAM,EAAE;YAChB,OAAO,OAAO,CAAC,MAAM,KAAK,MAAM,CAAC;SACpC;QAED,OAAO,IAAI,CAAC,OAAO,CAAC,OAAO;YACvB,CAAC,CAAC,IAAI,CAAC,OAAO,CAAC,OAAO,CAAC,QAAQ,CAAC,MAAM,CAAC;YACvC,CAAC,CAAC,IAAI,CAAC;IACf,CAAC;IAES,YAAY,CAAC,KAAa,EAAE,SAA0B;QAC5D,MAAM,cAAc,GAAG,SAAS,IAAI,IAAI,CAAC,OAAO,CAAC,KAAK,CAAC;QAEvD,IAAI,cAAc,EAAE;YAChB,IAAI,OAAO,cAAc,KAAK,UAAU,EAAE;gBACtC,OAAO,cAAc,CAAC,KAAK,CAAC,CAAC;aAChC;YAED,OAAO,KAAK,IAAI,cAAc,CAAC;SAClC;QAED,OAAO,IAAI,CAAC;IAChB,CAAC;CACJ;AA7BD,4EA6BC"}
|
|
@@ -0,0 +1,17 @@
|
|
|
1
|
+
import { Logger } from '@nestjs/common';
|
|
2
|
+
import { HttpService } from '@nestjs/axios';
|
|
3
|
+
import { GoogleRecaptchaModuleOptions } from '../../interfaces/google-recaptcha-module-options';
|
|
4
|
+
import { VerifyResponseOptions } from '../../interfaces/verify-response-decorator-options';
|
|
5
|
+
import { AbstractGoogleRecaptchaValidator } from './abstract-google-recaptcha-validator';
|
|
6
|
+
import { RecaptchaVerificationResult } from '../../models/recaptcha-verification-result';
|
|
7
|
+
import { VerifyResponseEnterprise } from '../../interfaces/verify-response-enterprise';
|
|
8
|
+
import { EnterpriseReasonTransformer } from '../enterprise-reason.transformer';
|
|
9
|
+
export declare class GoogleRecaptchaEnterpriseValidator extends AbstractGoogleRecaptchaValidator<VerifyResponseEnterprise> {
|
|
10
|
+
private readonly http;
|
|
11
|
+
private readonly logger;
|
|
12
|
+
private readonly enterpriseReasonTransformer;
|
|
13
|
+
private readonly headers;
|
|
14
|
+
constructor(http: HttpService, logger: Logger, options: GoogleRecaptchaModuleOptions, enterpriseReasonTransformer: EnterpriseReasonTransformer);
|
|
15
|
+
validate(options: VerifyResponseOptions): Promise<RecaptchaVerificationResult<VerifyResponseEnterprise>>;
|
|
16
|
+
private verifyResponse;
|
|
17
|
+
}
|
|
@@ -0,0 +1,114 @@
|
|
|
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
|
+
var __param = (this && this.__param) || function (paramIndex, decorator) {
|
|
12
|
+
return function (target, key) { decorator(target, key, paramIndex); }
|
|
13
|
+
};
|
|
14
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
15
|
+
exports.GoogleRecaptchaEnterpriseValidator = void 0;
|
|
16
|
+
const common_1 = require("@nestjs/common");
|
|
17
|
+
const provider_declarations_1 = require("../../provider.declarations");
|
|
18
|
+
const axios_1 = require("@nestjs/axios");
|
|
19
|
+
const abstract_google_recaptcha_validator_1 = require("./abstract-google-recaptcha-validator");
|
|
20
|
+
const recaptcha_verification_result_1 = require("../../models/recaptcha-verification-result");
|
|
21
|
+
const error_code_1 = require("../../enums/error-code");
|
|
22
|
+
const google_recaptcha_network_exception_1 = require("../../exceptions/google-recaptcha-network.exception");
|
|
23
|
+
const google_recaptcha_context_1 = require("../../enums/google-recaptcha-context");
|
|
24
|
+
const enterprise_reason_transformer_1 = require("../enterprise-reason.transformer");
|
|
25
|
+
const rxjs_1 = require("rxjs");
|
|
26
|
+
let GoogleRecaptchaEnterpriseValidator = class GoogleRecaptchaEnterpriseValidator extends abstract_google_recaptcha_validator_1.AbstractGoogleRecaptchaValidator {
|
|
27
|
+
constructor(http, logger, options, enterpriseReasonTransformer) {
|
|
28
|
+
super(options);
|
|
29
|
+
this.http = http;
|
|
30
|
+
this.logger = logger;
|
|
31
|
+
this.enterpriseReasonTransformer = enterpriseReasonTransformer;
|
|
32
|
+
this.headers = { 'Content-Type': 'application/json' };
|
|
33
|
+
}
|
|
34
|
+
async validate(options) {
|
|
35
|
+
var _a, _b, _c;
|
|
36
|
+
const [result, errorDetails] = await this.verifyResponse(options.response, options.action);
|
|
37
|
+
const errors = [];
|
|
38
|
+
let success = result.tokenProperties.valid;
|
|
39
|
+
if (result.tokenProperties.invalidReason) {
|
|
40
|
+
errors.push(this.enterpriseReasonTransformer.transform(result.tokenProperties.invalidReason));
|
|
41
|
+
}
|
|
42
|
+
if (errorDetails) {
|
|
43
|
+
errors.push(error_code_1.ErrorCode.UnknownError);
|
|
44
|
+
}
|
|
45
|
+
if (!result) {
|
|
46
|
+
if (!this.isValidAction(result.tokenProperties.action, options)) {
|
|
47
|
+
success = false;
|
|
48
|
+
errors.push(error_code_1.ErrorCode.ForbiddenAction);
|
|
49
|
+
}
|
|
50
|
+
if (!this.isValidScore(result.riskAnalysis.score, options.score)) {
|
|
51
|
+
success = false;
|
|
52
|
+
errors.push(error_code_1.ErrorCode.LowScore);
|
|
53
|
+
}
|
|
54
|
+
}
|
|
55
|
+
return new recaptcha_verification_result_1.RecaptchaVerificationResult({
|
|
56
|
+
success,
|
|
57
|
+
errors,
|
|
58
|
+
nativeResponse: result,
|
|
59
|
+
score: (_a = result === null || result === void 0 ? void 0 : result.riskAnalysis) === null || _a === void 0 ? void 0 : _a.score,
|
|
60
|
+
action: (_b = result === null || result === void 0 ? void 0 : result.tokenProperties) === null || _b === void 0 ? void 0 : _b.action,
|
|
61
|
+
hostname: ((_c = result === null || result === void 0 ? void 0 : result.tokenProperties) === null || _c === void 0 ? void 0 : _c.hostname) || '',
|
|
62
|
+
});
|
|
63
|
+
}
|
|
64
|
+
verifyResponse(response, expectedAction) {
|
|
65
|
+
const projectId = this.options.enterprise.projectId;
|
|
66
|
+
const body = {
|
|
67
|
+
event: {
|
|
68
|
+
expectedAction,
|
|
69
|
+
siteKey: this.options.enterprise.siteKey,
|
|
70
|
+
token: response,
|
|
71
|
+
},
|
|
72
|
+
};
|
|
73
|
+
const url = `https://recaptchaenterprise.googleapis.com/v1/projects/${projectId}/assessments`;
|
|
74
|
+
const config = {
|
|
75
|
+
headers: this.headers,
|
|
76
|
+
params: {
|
|
77
|
+
key: this.options.enterprise.apiKey,
|
|
78
|
+
},
|
|
79
|
+
};
|
|
80
|
+
if (this.options.debug) {
|
|
81
|
+
this.logger.debug({ body }, `${google_recaptcha_context_1.GoogleRecaptchaContext.GoogleRecaptchaEnterprise}.request`);
|
|
82
|
+
}
|
|
83
|
+
return (0, rxjs_1.firstValueFrom)(this.http.post(url, body, config))
|
|
84
|
+
.then(res => res.data)
|
|
85
|
+
.then((data) => {
|
|
86
|
+
if (this.options.debug) {
|
|
87
|
+
this.logger.debug(data, `${google_recaptcha_context_1.GoogleRecaptchaContext.GoogleRecaptchaEnterprise}.response`);
|
|
88
|
+
}
|
|
89
|
+
return [data, null];
|
|
90
|
+
})
|
|
91
|
+
.catch((err) => {
|
|
92
|
+
var _a, _b;
|
|
93
|
+
if (this.options.debug) {
|
|
94
|
+
this.logger.debug(((_a = err === null || err === void 0 ? void 0 : err.response) === null || _a === void 0 ? void 0 : _a.data) || err.code || { error: `${err === null || err === void 0 ? void 0 : err.name}: ${err === null || err === void 0 ? void 0 : err.message}`, stack: err === null || err === void 0 ? void 0 : err.stack }, `${google_recaptcha_context_1.GoogleRecaptchaContext.GoogleRecaptchaEnterprise}.error`);
|
|
95
|
+
}
|
|
96
|
+
const networkErrorCode = err.isAxiosError && err.code;
|
|
97
|
+
if (networkErrorCode) {
|
|
98
|
+
throw new google_recaptcha_network_exception_1.GoogleRecaptchaNetworkException(networkErrorCode);
|
|
99
|
+
}
|
|
100
|
+
const errData = (_b = err.response) === null || _b === void 0 ? void 0 : _b.data;
|
|
101
|
+
return [null, errData];
|
|
102
|
+
});
|
|
103
|
+
}
|
|
104
|
+
};
|
|
105
|
+
GoogleRecaptchaEnterpriseValidator = __decorate([
|
|
106
|
+
(0, common_1.Injectable)(),
|
|
107
|
+
__param(0, (0, common_1.Inject)(provider_declarations_1.RECAPTCHA_HTTP_SERVICE)),
|
|
108
|
+
__param(1, (0, common_1.Inject)(provider_declarations_1.RECAPTCHA_LOGGER)),
|
|
109
|
+
__param(2, (0, common_1.Inject)(provider_declarations_1.RECAPTCHA_OPTIONS)),
|
|
110
|
+
__metadata("design:paramtypes", [axios_1.HttpService,
|
|
111
|
+
common_1.Logger, Object, enterprise_reason_transformer_1.EnterpriseReasonTransformer])
|
|
112
|
+
], GoogleRecaptchaEnterpriseValidator);
|
|
113
|
+
exports.GoogleRecaptchaEnterpriseValidator = GoogleRecaptchaEnterpriseValidator;
|
|
114
|
+
//# sourceMappingURL=google-recaptcha-enterprise.validator.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"google-recaptcha-enterprise.validator.js","sourceRoot":"","sources":["../../../src/services/validators/google-recaptcha-enterprise.validator.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,21 @@
|
|
|
1
|
+
import { Logger } from '@nestjs/common';
|
|
2
|
+
import { VerifyResponseOptions } from '../../interfaces/verify-response-decorator-options';
|
|
3
|
+
import { VerifyResponseV3 } from '../../interfaces/verify-response';
|
|
4
|
+
import { HttpService } from "@nestjs/axios";
|
|
5
|
+
import { GoogleRecaptchaModuleOptions } from '../../interfaces/google-recaptcha-module-options';
|
|
6
|
+
import { AbstractGoogleRecaptchaValidator } from './abstract-google-recaptcha-validator';
|
|
7
|
+
import { RecaptchaVerificationResult } from '../../models/recaptcha-verification-result';
|
|
8
|
+
export declare class GoogleRecaptchaValidator extends AbstractGoogleRecaptchaValidator<VerifyResponseV3> {
|
|
9
|
+
private readonly http;
|
|
10
|
+
private readonly logger;
|
|
11
|
+
private readonly defaultNetwork;
|
|
12
|
+
private readonly headers;
|
|
13
|
+
constructor(http: HttpService, logger: Logger, options: GoogleRecaptchaModuleOptions);
|
|
14
|
+
/**
|
|
15
|
+
* @throws GoogleRecaptchaNetworkException
|
|
16
|
+
* @param {VerifyResponseOptions} options
|
|
17
|
+
*/
|
|
18
|
+
validate(options: VerifyResponseOptions): Promise<RecaptchaVerificationResult<VerifyResponseV3>>;
|
|
19
|
+
private verifyResponse;
|
|
20
|
+
private isUseV3;
|
|
21
|
+
}
|