perimeterx-js-core 0.35.1 → 0.36.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/lib/cjs/blocker/model/BlockAction.js +1 -0
- package/lib/cjs/blocker/model/BlockActionToWordMap.js +1 -0
- package/lib/cjs/products/bot_defender/block/DefaultBotDefenderBlocker.js +15 -0
- package/lib/cjs/products/bot_defender/block/captcha/JsonCaptchaBlocker.js +3 -1
- package/lib/cjs/products/bot_defender/block/templates/hard_block_template.js +4 -0
- package/lib/cjs/products/bot_defender/block/templates/index.js +1 -0
- package/lib/cjs/utils/constants.js +1 -1
- package/lib/esm/blocker/model/BlockAction.js +1 -0
- package/lib/esm/blocker/model/BlockActionToWordMap.js +1 -0
- package/lib/esm/products/bot_defender/block/DefaultBotDefenderBlocker.js +17 -2
- package/lib/esm/products/bot_defender/block/captcha/JsonCaptchaBlocker.js +3 -1
- package/lib/esm/products/bot_defender/block/templates/hard_block_template.js +109 -0
- package/lib/esm/products/bot_defender/block/templates/index.js +1 -0
- package/lib/esm/utils/constants.js +1 -1
- package/lib/types/blocker/model/BlockAction.d.ts +1 -0
- package/lib/types/products/bot_defender/block/DefaultBotDefenderBlocker.d.ts +2 -0
- package/lib/types/products/bot_defender/block/templates/hard_block_template.d.ts +1 -0
- package/lib/types/products/bot_defender/block/templates/index.d.ts +1 -0
- package/lib/types/utils/constants.d.ts +1 -1
- package/package.json +1 -1
|
@@ -3,6 +3,7 @@ Object.defineProperty(exports, "__esModule", { value: true });
|
|
|
3
3
|
exports.BlockAction = void 0;
|
|
4
4
|
var BlockAction;
|
|
5
5
|
(function (BlockAction) {
|
|
6
|
+
BlockAction["BLOCK"] = "b";
|
|
6
7
|
BlockAction["CAPTCHA"] = "c";
|
|
7
8
|
BlockAction["RATE_LIMIT"] = "r";
|
|
8
9
|
BlockAction["CHALLENGE"] = "j";
|
|
@@ -3,6 +3,7 @@ Object.defineProperty(exports, "__esModule", { value: true });
|
|
|
3
3
|
exports.BLOCK_ACTION_TO_WORD_MAP = void 0;
|
|
4
4
|
var BlockAction_1 = require("./BlockAction.js");
|
|
5
5
|
exports.BLOCK_ACTION_TO_WORD_MAP = new Map([
|
|
6
|
+
[BlockAction_1.BlockAction.BLOCK, 'block'],
|
|
6
7
|
[BlockAction_1.BlockAction.CAPTCHA, 'captcha'],
|
|
7
8
|
[BlockAction_1.BlockAction.RATE_LIMIT, 'ratelimit'],
|
|
8
9
|
[BlockAction_1.BlockAction.CHALLENGE, 'challenge'],
|
|
@@ -14,6 +14,7 @@ var DefaultBotDefenderBlocker = /** @class */ (function () {
|
|
|
14
14
|
this.captchaBlocker = options.captchaBlocker;
|
|
15
15
|
}
|
|
16
16
|
else {
|
|
17
|
+
this.base64Utils = options.base64Utils;
|
|
17
18
|
this.captchaBlocker = new captcha_1.CaptchaBlocker({
|
|
18
19
|
config: config,
|
|
19
20
|
base64Utils: options.base64Utils,
|
|
@@ -27,6 +28,8 @@ var DefaultBotDefenderBlocker = /** @class */ (function () {
|
|
|
27
28
|
};
|
|
28
29
|
DefaultBotDefenderBlocker.prototype.createBlockResponse = function (context) {
|
|
29
30
|
switch (context.blockAction) {
|
|
31
|
+
case blocker_1.BlockAction.BLOCK:
|
|
32
|
+
return this.createHardBlockResponse(context);
|
|
30
33
|
case blocker_1.BlockAction.RATE_LIMIT:
|
|
31
34
|
return this.createRateLimitResponse();
|
|
32
35
|
case blocker_1.BlockAction.CHALLENGE:
|
|
@@ -35,6 +38,18 @@ var DefaultBotDefenderBlocker = /** @class */ (function () {
|
|
|
35
38
|
return this.createCaptchaResponse(context);
|
|
36
39
|
}
|
|
37
40
|
};
|
|
41
|
+
DefaultBotDefenderBlocker.prototype.createHardBlockResponse = function (context) {
|
|
42
|
+
var _a;
|
|
43
|
+
var blockData = this.base64Utils ? (0, blocker_1.createBlockData)(this.config, context, this.base64Utils) : undefined;
|
|
44
|
+
var body = (0, blocker_1.renderHtml)(templates_1.HARD_BLOCK_TEMPLATE, blockData);
|
|
45
|
+
return new http_1.MinimalResponseImpl({
|
|
46
|
+
body: body,
|
|
47
|
+
status: 403,
|
|
48
|
+
headers: (_a = {},
|
|
49
|
+
_a[http_1.CONTENT_TYPE_HEADER_NAME] = [http_1.ContentType.TEXT_HTML],
|
|
50
|
+
_a),
|
|
51
|
+
});
|
|
52
|
+
};
|
|
38
53
|
DefaultBotDefenderBlocker.prototype.createRateLimitResponse = function () {
|
|
39
54
|
var _a;
|
|
40
55
|
var status = 429;
|
|
@@ -29,7 +29,9 @@ var JsonCaptchaBlocker = /** @class */ (function (_super) {
|
|
|
29
29
|
if (!this.config.advancedBlockingResponseEnabled) {
|
|
30
30
|
return false;
|
|
31
31
|
}
|
|
32
|
-
return context.blockAction !== blocker_1.BlockAction.RATE_LIMIT &&
|
|
32
|
+
return (context.blockAction !== blocker_1.BlockAction.RATE_LIMIT &&
|
|
33
|
+
context.blockAction !== blocker_1.BlockAction.BLOCK &&
|
|
34
|
+
_super.prototype.shouldBlock.call(this, context));
|
|
33
35
|
};
|
|
34
36
|
JsonCaptchaBlocker.prototype.createJsonPayload = function (context) {
|
|
35
37
|
var _a, _b;
|
|
@@ -0,0 +1,4 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
+
exports.HARD_BLOCK_TEMPLATE = void 0;
|
|
4
|
+
exports.HARD_BLOCK_TEMPLATE = "<!DOCTYPE html>\n<html lang=\"en\">\n<head>\n <meta charset=\"utf-8\">\n <meta name=\"viewport\" content=\"width=device-width, initial-scale=1\">\n <meta name=\"description\" content=\"px-hard-block\">\n <title>Access Denied</title>\n {{cssRef}}\n <style>\n @import url('https://fonts.googleapis.com/css2?family=Roboto:wght@300;400;500&display=swap');\n body {\n background-color: #fafbfc;\n margin: 0;\n padding: 0;\n }\n .px-hard-block-container {\n position: fixed;\n background-color: #fff;\n font-family: Roboto, sans-serif;\n }\n .px-hard-block-logo {\n text-align: center;\n margin: 30px 0 0;\n }\n .px-hard-block-logo img {\n max-height: 50px;\n }\n .px-hard-block-logo img[src=\"\"] {\n display: none;\n }\n .px-hard-block-header {\n color: #000;\n font-size: 29px;\n margin: 35px 0 20px;\n font-weight: 500;\n line-height: 1;\n text-align: center;\n }\n .px-hard-block-message {\n color: #646464;\n font-size: 16px;\n margin: 0 30px 25px;\n line-height: 1.4;\n text-align: center;\n }\n .px-hard-block-refid {\n border-top: solid 1px #f0eeee;\n height: 27px;\n margin: 15px 0 0;\n border-radius: 0 0 3px 3px;\n background-color: #fafbfc;\n font-size: 10px;\n line-height: 2.5;\n text-align: center;\n color: #b1b5b8;\n }\n @media (min-width: 620px) {\n .px-hard-block-container {\n width: 530px;\n top: 50%;\n left: 50%;\n margin-top: -150px;\n margin-left: -265px;\n border-radius: 3px;\n box-shadow: 0 2px 9px -1px rgba(0,0,0,.13);\n }\n }\n @media (min-width: 481px) and (max-width: 619px) {\n .px-hard-block-container {\n width: 85%;\n top: 50%;\n left: 50%;\n margin-top: -150px;\n margin-left: -42.5%;\n border-radius: 3px;\n box-shadow: 0 2px 9px -1px rgba(0,0,0,.13);\n }\n }\n @media (max-width: 480px) {\n body { background-color: #fff; }\n .px-hard-block-container {\n width: 100%;\n top: 50%;\n left: 0;\n margin-top: -150px;\n }\n .px-hard-block-refid {\n position: fixed;\n width: 100%;\n left: 0;\n bottom: 0;\n border-radius: 0;\n font-size: 14px;\n line-height: 2;\n }\n }\n </style>\n</head>\n<body>\n <div class=\"px-hard-block-container\">\n <div class=\"px-hard-block-logo\"><img src=\"{{customLogo}}\" alt=\"\"></div>\n <div class=\"px-hard-block-header\">Access Denied</div>\n <div class=\"px-hard-block-message\">Access to this page has been denied.<br>Please contact the site administrator if you believe this is an error.</div>\n <div class=\"px-hard-block-refid\">Reference ID: {{uuid}}</div>\n </div>\n {{jsRef}}\n</body>\n</html>\n";
|
|
@@ -15,4 +15,5 @@ var __exportStar = (this && this.__exportStar) || function(m, exports) {
|
|
|
15
15
|
};
|
|
16
16
|
Object.defineProperty(exports, "__esModule", { value: true });
|
|
17
17
|
__exportStar(require("./captcha_template.js"), exports);
|
|
18
|
+
__exportStar(require("./hard_block_template.js"), exports);
|
|
18
19
|
__exportStar(require("./rate_limit_template.js"), exports);
|
|
@@ -15,4 +15,4 @@ exports.PUSH_DATA_FEATURE_HEADER_NAME = 'x-px-feature';
|
|
|
15
15
|
exports.EMAIL_ADDRESS_REGEX = /^[a-zA-Z0-9_+&*-]+(?:\.[a-zA-Z0-9_+&*-]+)*@(?:[a-zA-Z0-9-]+\.)+[a-zA-Z]{2,7}$/;
|
|
16
16
|
exports.URL_REGEX = /^(https?:)\/\/(([^@\s:\/]+):?([^@\s\/]*)@)?(([^:\/?#]*)(?:\:([0-9]+))?)(\/?[^?#]*)(\?[^#]*|)(#.*|)$/;
|
|
17
17
|
exports.REGEX_STRUCTURE = /^\/(.+?)\/([gimsuyvd]*)$/;
|
|
18
|
-
exports.CORE_MODULE_VERSION = 'JS Core 0.
|
|
18
|
+
exports.CORE_MODULE_VERSION = 'JS Core 0.36.0';
|
|
@@ -1,18 +1,20 @@
|
|
|
1
1
|
import { Action } from '../../../action/index.js';
|
|
2
|
-
import { BlockAction } from '../../../blocker/index.js';
|
|
2
|
+
import { BlockAction, createBlockData, renderHtml } from '../../../blocker/index.js';
|
|
3
3
|
import { ContentType, CONTENT_TYPE_HEADER_NAME, MinimalResponseImpl } from '../../../http/index.js';
|
|
4
4
|
import { ProductName } from '../../utils/index.js';
|
|
5
5
|
import { CaptchaBlocker } from './captcha/index.js';
|
|
6
|
-
import { CAPTCHA_TEMPLATE, RATE_LIMIT_TEMPLATE } from './templates/index.js';
|
|
6
|
+
import { CAPTCHA_TEMPLATE, HARD_BLOCK_TEMPLATE, RATE_LIMIT_TEMPLATE } from './templates/index.js';
|
|
7
7
|
export class DefaultBotDefenderBlocker {
|
|
8
8
|
config;
|
|
9
9
|
captchaBlocker;
|
|
10
|
+
base64Utils;
|
|
10
11
|
constructor(config, options) {
|
|
11
12
|
this.config = config;
|
|
12
13
|
if ('captchaBlocker' in options) {
|
|
13
14
|
this.captchaBlocker = options.captchaBlocker;
|
|
14
15
|
}
|
|
15
16
|
else {
|
|
17
|
+
this.base64Utils = options.base64Utils;
|
|
16
18
|
this.captchaBlocker = new CaptchaBlocker({
|
|
17
19
|
config,
|
|
18
20
|
base64Utils: options.base64Utils,
|
|
@@ -25,6 +27,8 @@ export class DefaultBotDefenderBlocker {
|
|
|
25
27
|
}
|
|
26
28
|
createBlockResponse(context) {
|
|
27
29
|
switch (context.blockAction) {
|
|
30
|
+
case BlockAction.BLOCK:
|
|
31
|
+
return this.createHardBlockResponse(context);
|
|
28
32
|
case BlockAction.RATE_LIMIT:
|
|
29
33
|
return this.createRateLimitResponse();
|
|
30
34
|
case BlockAction.CHALLENGE:
|
|
@@ -33,6 +37,17 @@ export class DefaultBotDefenderBlocker {
|
|
|
33
37
|
return this.createCaptchaResponse(context);
|
|
34
38
|
}
|
|
35
39
|
}
|
|
40
|
+
createHardBlockResponse(context) {
|
|
41
|
+
const blockData = this.base64Utils ? createBlockData(this.config, context, this.base64Utils) : undefined;
|
|
42
|
+
const body = renderHtml(HARD_BLOCK_TEMPLATE, blockData);
|
|
43
|
+
return new MinimalResponseImpl({
|
|
44
|
+
body,
|
|
45
|
+
status: 403,
|
|
46
|
+
headers: {
|
|
47
|
+
[CONTENT_TYPE_HEADER_NAME]: [ContentType.TEXT_HTML],
|
|
48
|
+
},
|
|
49
|
+
});
|
|
50
|
+
}
|
|
36
51
|
createRateLimitResponse() {
|
|
37
52
|
const status = 429;
|
|
38
53
|
const headers = {
|
|
@@ -11,7 +11,9 @@ export class JsonCaptchaBlocker extends JsonBlockerBase {
|
|
|
11
11
|
if (!this.config.advancedBlockingResponseEnabled) {
|
|
12
12
|
return false;
|
|
13
13
|
}
|
|
14
|
-
return context.blockAction !== BlockAction.RATE_LIMIT &&
|
|
14
|
+
return (context.blockAction !== BlockAction.RATE_LIMIT &&
|
|
15
|
+
context.blockAction !== BlockAction.BLOCK &&
|
|
16
|
+
super.shouldBlock(context));
|
|
15
17
|
}
|
|
16
18
|
createJsonPayload(context) {
|
|
17
19
|
const blockData = createBlockData(this.config, context, this.base64Utils);
|
|
@@ -0,0 +1,109 @@
|
|
|
1
|
+
export const HARD_BLOCK_TEMPLATE = `<!DOCTYPE html>
|
|
2
|
+
<html lang="en">
|
|
3
|
+
<head>
|
|
4
|
+
<meta charset="utf-8">
|
|
5
|
+
<meta name="viewport" content="width=device-width, initial-scale=1">
|
|
6
|
+
<meta name="description" content="px-hard-block">
|
|
7
|
+
<title>Access Denied</title>
|
|
8
|
+
{{cssRef}}
|
|
9
|
+
<style>
|
|
10
|
+
@import url('https://fonts.googleapis.com/css2?family=Roboto:wght@300;400;500&display=swap');
|
|
11
|
+
body {
|
|
12
|
+
background-color: #fafbfc;
|
|
13
|
+
margin: 0;
|
|
14
|
+
padding: 0;
|
|
15
|
+
}
|
|
16
|
+
.px-hard-block-container {
|
|
17
|
+
position: fixed;
|
|
18
|
+
background-color: #fff;
|
|
19
|
+
font-family: Roboto, sans-serif;
|
|
20
|
+
}
|
|
21
|
+
.px-hard-block-logo {
|
|
22
|
+
text-align: center;
|
|
23
|
+
margin: 30px 0 0;
|
|
24
|
+
}
|
|
25
|
+
.px-hard-block-logo img {
|
|
26
|
+
max-height: 50px;
|
|
27
|
+
}
|
|
28
|
+
.px-hard-block-logo img[src=""] {
|
|
29
|
+
display: none;
|
|
30
|
+
}
|
|
31
|
+
.px-hard-block-header {
|
|
32
|
+
color: #000;
|
|
33
|
+
font-size: 29px;
|
|
34
|
+
margin: 35px 0 20px;
|
|
35
|
+
font-weight: 500;
|
|
36
|
+
line-height: 1;
|
|
37
|
+
text-align: center;
|
|
38
|
+
}
|
|
39
|
+
.px-hard-block-message {
|
|
40
|
+
color: #646464;
|
|
41
|
+
font-size: 16px;
|
|
42
|
+
margin: 0 30px 25px;
|
|
43
|
+
line-height: 1.4;
|
|
44
|
+
text-align: center;
|
|
45
|
+
}
|
|
46
|
+
.px-hard-block-refid {
|
|
47
|
+
border-top: solid 1px #f0eeee;
|
|
48
|
+
height: 27px;
|
|
49
|
+
margin: 15px 0 0;
|
|
50
|
+
border-radius: 0 0 3px 3px;
|
|
51
|
+
background-color: #fafbfc;
|
|
52
|
+
font-size: 10px;
|
|
53
|
+
line-height: 2.5;
|
|
54
|
+
text-align: center;
|
|
55
|
+
color: #b1b5b8;
|
|
56
|
+
}
|
|
57
|
+
@media (min-width: 620px) {
|
|
58
|
+
.px-hard-block-container {
|
|
59
|
+
width: 530px;
|
|
60
|
+
top: 50%;
|
|
61
|
+
left: 50%;
|
|
62
|
+
margin-top: -150px;
|
|
63
|
+
margin-left: -265px;
|
|
64
|
+
border-radius: 3px;
|
|
65
|
+
box-shadow: 0 2px 9px -1px rgba(0,0,0,.13);
|
|
66
|
+
}
|
|
67
|
+
}
|
|
68
|
+
@media (min-width: 481px) and (max-width: 619px) {
|
|
69
|
+
.px-hard-block-container {
|
|
70
|
+
width: 85%;
|
|
71
|
+
top: 50%;
|
|
72
|
+
left: 50%;
|
|
73
|
+
margin-top: -150px;
|
|
74
|
+
margin-left: -42.5%;
|
|
75
|
+
border-radius: 3px;
|
|
76
|
+
box-shadow: 0 2px 9px -1px rgba(0,0,0,.13);
|
|
77
|
+
}
|
|
78
|
+
}
|
|
79
|
+
@media (max-width: 480px) {
|
|
80
|
+
body { background-color: #fff; }
|
|
81
|
+
.px-hard-block-container {
|
|
82
|
+
width: 100%;
|
|
83
|
+
top: 50%;
|
|
84
|
+
left: 0;
|
|
85
|
+
margin-top: -150px;
|
|
86
|
+
}
|
|
87
|
+
.px-hard-block-refid {
|
|
88
|
+
position: fixed;
|
|
89
|
+
width: 100%;
|
|
90
|
+
left: 0;
|
|
91
|
+
bottom: 0;
|
|
92
|
+
border-radius: 0;
|
|
93
|
+
font-size: 14px;
|
|
94
|
+
line-height: 2;
|
|
95
|
+
}
|
|
96
|
+
}
|
|
97
|
+
</style>
|
|
98
|
+
</head>
|
|
99
|
+
<body>
|
|
100
|
+
<div class="px-hard-block-container">
|
|
101
|
+
<div class="px-hard-block-logo"><img src="{{customLogo}}" alt=""></div>
|
|
102
|
+
<div class="px-hard-block-header">Access Denied</div>
|
|
103
|
+
<div class="px-hard-block-message">Access to this page has been denied.<br>Please contact the site administrator if you believe this is an error.</div>
|
|
104
|
+
<div class="px-hard-block-refid">Reference ID: {{uuid}}</div>
|
|
105
|
+
</div>
|
|
106
|
+
{{jsRef}}
|
|
107
|
+
</body>
|
|
108
|
+
</html>
|
|
109
|
+
`;
|
|
@@ -12,4 +12,4 @@ export const PUSH_DATA_FEATURE_HEADER_NAME = 'x-px-feature';
|
|
|
12
12
|
export const EMAIL_ADDRESS_REGEX = /^[a-zA-Z0-9_+&*-]+(?:\.[a-zA-Z0-9_+&*-]+)*@(?:[a-zA-Z0-9-]+\.)+[a-zA-Z]{2,7}$/;
|
|
13
13
|
export const URL_REGEX = /^(https?:)\/\/(([^@\s:\/]+):?([^@\s\/]*)@)?(([^:\/?#]*)(?:\:([0-9]+))?)(\/?[^?#]*)(\?[^#]*|)(#.*|)$/;
|
|
14
14
|
export const REGEX_STRUCTURE = /^\/(.+?)\/([gimsuyvd]*)$/;
|
|
15
|
-
export const CORE_MODULE_VERSION = 'JS Core 0.
|
|
15
|
+
export const CORE_MODULE_VERSION = 'JS Core 0.36.0';
|
|
@@ -11,9 +11,11 @@ export type DefaultBotDefenderBlockerConstructorOptions<Req, Res> = {
|
|
|
11
11
|
export declare class DefaultBotDefenderBlocker<Req, Res, Supported extends string, Added> implements IConditionalBlocker<Req, Res> {
|
|
12
12
|
protected readonly config: IConfiguration<Req, Res, Supported, Added>;
|
|
13
13
|
protected readonly captchaBlocker: IBlocker<Req, Res>;
|
|
14
|
+
protected readonly base64Utils?: IBase64Utils;
|
|
14
15
|
constructor(config: IConfiguration<Req, Res, Supported, Added>, options: DefaultBotDefenderBlockerConstructorOptions<Req, Res>);
|
|
15
16
|
shouldBlock({ action, reasons }: ReadonlyContext<Req, Res>): boolean;
|
|
16
17
|
createBlockResponse(context: ReadonlyContext<Req, Res>): IMinimalResponse;
|
|
18
|
+
protected createHardBlockResponse(context: ReadonlyContext<Req, Res>): IMinimalResponse;
|
|
17
19
|
protected createRateLimitResponse(): IMinimalResponse;
|
|
18
20
|
private createCaptchaResponse;
|
|
19
21
|
}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
export declare const HARD_BLOCK_TEMPLATE = "<!DOCTYPE html>\n<html lang=\"en\">\n<head>\n <meta charset=\"utf-8\">\n <meta name=\"viewport\" content=\"width=device-width, initial-scale=1\">\n <meta name=\"description\" content=\"px-hard-block\">\n <title>Access Denied</title>\n {{cssRef}}\n <style>\n @import url('https://fonts.googleapis.com/css2?family=Roboto:wght@300;400;500&display=swap');\n body {\n background-color: #fafbfc;\n margin: 0;\n padding: 0;\n }\n .px-hard-block-container {\n position: fixed;\n background-color: #fff;\n font-family: Roboto, sans-serif;\n }\n .px-hard-block-logo {\n text-align: center;\n margin: 30px 0 0;\n }\n .px-hard-block-logo img {\n max-height: 50px;\n }\n .px-hard-block-logo img[src=\"\"] {\n display: none;\n }\n .px-hard-block-header {\n color: #000;\n font-size: 29px;\n margin: 35px 0 20px;\n font-weight: 500;\n line-height: 1;\n text-align: center;\n }\n .px-hard-block-message {\n color: #646464;\n font-size: 16px;\n margin: 0 30px 25px;\n line-height: 1.4;\n text-align: center;\n }\n .px-hard-block-refid {\n border-top: solid 1px #f0eeee;\n height: 27px;\n margin: 15px 0 0;\n border-radius: 0 0 3px 3px;\n background-color: #fafbfc;\n font-size: 10px;\n line-height: 2.5;\n text-align: center;\n color: #b1b5b8;\n }\n @media (min-width: 620px) {\n .px-hard-block-container {\n width: 530px;\n top: 50%;\n left: 50%;\n margin-top: -150px;\n margin-left: -265px;\n border-radius: 3px;\n box-shadow: 0 2px 9px -1px rgba(0,0,0,.13);\n }\n }\n @media (min-width: 481px) and (max-width: 619px) {\n .px-hard-block-container {\n width: 85%;\n top: 50%;\n left: 50%;\n margin-top: -150px;\n margin-left: -42.5%;\n border-radius: 3px;\n box-shadow: 0 2px 9px -1px rgba(0,0,0,.13);\n }\n }\n @media (max-width: 480px) {\n body { background-color: #fff; }\n .px-hard-block-container {\n width: 100%;\n top: 50%;\n left: 0;\n margin-top: -150px;\n }\n .px-hard-block-refid {\n position: fixed;\n width: 100%;\n left: 0;\n bottom: 0;\n border-radius: 0;\n font-size: 14px;\n line-height: 2;\n }\n }\n </style>\n</head>\n<body>\n <div class=\"px-hard-block-container\">\n <div class=\"px-hard-block-logo\"><img src=\"{{customLogo}}\" alt=\"\"></div>\n <div class=\"px-hard-block-header\">Access Denied</div>\n <div class=\"px-hard-block-message\">Access to this page has been denied.<br>Please contact the site administrator if you believe this is an error.</div>\n <div class=\"px-hard-block-refid\">Reference ID: {{uuid}}</div>\n </div>\n {{jsRef}}\n</body>\n</html>\n";
|
|
@@ -12,4 +12,4 @@ export declare const PUSH_DATA_FEATURE_HEADER_NAME = "x-px-feature";
|
|
|
12
12
|
export declare const EMAIL_ADDRESS_REGEX: RegExp;
|
|
13
13
|
export declare const URL_REGEX: RegExp;
|
|
14
14
|
export declare const REGEX_STRUCTURE: RegExp;
|
|
15
|
-
export declare const CORE_MODULE_VERSION = "JS Core 0.
|
|
15
|
+
export declare const CORE_MODULE_VERSION = "JS Core 0.36.0";
|