@squiz/dx-common-lib 1.2.11 → 1.2.13-alpha.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 +8 -66
- package/lib/api-key-validation/ApiKeyValidationService.d.ts +4 -0
- package/lib/api-key-validation/ApiKeyValidationService.js +3 -0
- package/lib/api-key-validation/ApiKeyValidationService.js.map +1 -0
- package/lib/api-key-validation/CloudflareApiKeyService.d.ts +17 -0
- package/lib/api-key-validation/CloudflareApiKeyService.js +72 -0
- package/lib/api-key-validation/CloudflareApiKeyService.js.map +1 -0
- package/lib/api-key-validation/CloudflareApiKeyService.spec.d.ts +1 -0
- package/lib/api-key-validation/CloudflareApiKeyService.spec.js +93 -0
- package/lib/api-key-validation/CloudflareApiKeyService.spec.js.map +1 -0
- package/lib/api-key-validation/DevelopmentApiKeyService.d.ts +5 -0
- package/lib/api-key-validation/DevelopmentApiKeyService.js +13 -0
- package/lib/api-key-validation/DevelopmentApiKeyService.js.map +1 -0
- package/lib/api-key-validation/DevelopmentApiKeyService.spec.d.ts +1 -0
- package/lib/api-key-validation/DevelopmentApiKeyService.spec.js +17 -0
- package/lib/api-key-validation/DevelopmentApiKeyService.spec.js.map +1 -0
- package/lib/api-key-validation/getApiKeyService.d.ts +6 -0
- package/lib/api-key-validation/getApiKeyService.js +23 -0
- package/lib/api-key-validation/getApiKeyService.js.map +1 -0
- package/lib/api-key-validation/getApiKeyService.spec.d.ts +1 -0
- package/lib/api-key-validation/getApiKeyService.spec.js +24 -0
- package/lib/api-key-validation/getApiKeyService.spec.js.map +1 -0
- package/lib/assertions/assertAssignWithDefaultUndefinedValue.d.ts +0 -1
- package/lib/assertions/assertAssignWithDefaultUndefinedValue.js +1 -3
- package/lib/assertions/assertAssignWithDefaultUndefinedValue.js.map +1 -1
- package/lib/cache/applyDefaultRulesToCacheControlObject.d.ts +19 -0
- package/lib/cache/applyDefaultRulesToCacheControlObject.js +21 -0
- package/lib/cache/applyDefaultRulesToCacheControlObject.js.map +1 -0
- package/lib/cache/applyDefaultRulesToCacheControlObject.spec.d.ts +1 -0
- package/lib/cache/applyDefaultRulesToCacheControlObject.spec.js +97 -0
- package/lib/cache/applyDefaultRulesToCacheControlObject.spec.js.map +1 -0
- package/lib/cache/cacheControlToString.d.ts +2 -0
- package/lib/cache/cacheControlToString.js +24 -0
- package/lib/cache/cacheControlToString.js.map +1 -0
- package/lib/cache/cacheControlToString.spec.d.ts +1 -0
- package/lib/cache/cacheControlToString.spec.js +34 -0
- package/lib/cache/cacheControlToString.spec.js.map +1 -0
- package/lib/cache/index.d.ts +4 -0
- package/lib/cache/index.js +21 -0
- package/lib/cache/index.js.map +1 -0
- package/lib/cache/parseAndSanitiseCacheControlHeader.d.ts +5 -0
- package/lib/cache/parseAndSanitiseCacheControlHeader.js +26 -0
- package/lib/cache/parseAndSanitiseCacheControlHeader.js.map +1 -0
- package/lib/cache/parseAndSanitiseCacheControlHeader.spec.d.ts +1 -0
- package/lib/cache/parseAndSanitiseCacheControlHeader.spec.js +21 -0
- package/lib/cache/parseAndSanitiseCacheControlHeader.spec.js.map +1 -0
- package/lib/cache/parseCacheControl.d.ts +19 -0
- package/lib/cache/parseCacheControl.js +46 -0
- package/lib/cache/parseCacheControl.js.map +1 -0
- package/lib/cache/parseCacheControl.spec.d.ts +1 -0
- package/lib/cache/parseCacheControl.spec.js +70 -0
- package/lib/cache/parseCacheControl.spec.js.map +1 -0
- package/lib/error/InvalidTokenError.d.ts +5 -0
- package/lib/error/InvalidTokenError.js +12 -0
- package/lib/error/InvalidTokenError.js.map +1 -0
- package/lib/error/UnAuthenticatedRequestError.d.ts +4 -0
- package/lib/error/UnAuthenticatedRequestError.js +11 -0
- package/lib/error/UnAuthenticatedRequestError.js.map +1 -0
- package/lib/error/UnprivilegedError.d.ts +5 -0
- package/lib/error/UnprivilegedError.js +12 -0
- package/lib/error/UnprivilegedError.js.map +1 -0
- package/lib/error/index.d.ts +3 -0
- package/lib/error/index.js +3 -0
- package/lib/error/index.js.map +1 -1
- package/lib/formatted-text/formattedTextToHtmlSting.d.ts +4 -0
- package/lib/formatted-text/formattedTextToHtmlSting.js +85 -0
- package/lib/formatted-text/formattedTextToHtmlSting.js.map +1 -0
- package/lib/formatted-text/formattedTextToHtmlSting.spec.d.ts +1 -0
- package/lib/formatted-text/formattedTextToHtmlSting.spec.js +212 -0
- package/lib/formatted-text/formattedTextToHtmlSting.spec.js.map +1 -0
- package/lib/index.d.ts +7 -0
- package/lib/index.js +7 -0
- package/lib/index.js.map +1 -1
- package/lib/server-utils/apiKeyMiddleware.d.ts +3 -0
- package/lib/server-utils/apiKeyMiddleware.js +20 -0
- package/lib/server-utils/apiKeyMiddleware.js.map +1 -0
- package/lib/server-utils/apiKeyMiddleware.spec.d.ts +1 -0
- package/lib/server-utils/apiKeyMiddleware.spec.js +39 -0
- package/lib/server-utils/apiKeyMiddleware.spec.js.map +1 -0
- package/lib/util/getPageInfo.d.ts +2 -2
- package/package.json +10 -8
- package/src/api-key-validation/ApiKeyValidationService.ts +4 -0
- package/src/api-key-validation/CloudflareApiKeyService.spec.ts +122 -0
- package/src/api-key-validation/CloudflareApiKeyService.ts +96 -0
- package/src/api-key-validation/DevelopmentApiKeyService.spec.ts +17 -0
- package/src/api-key-validation/DevelopmentApiKeyService.ts +10 -0
- package/src/api-key-validation/getApiKeyService.spec.ts +32 -0
- package/src/api-key-validation/getApiKeyService.ts +27 -0
- package/src/assertions/assertAssignWithDefaultUndefinedValue.ts +0 -5
- package/src/cache/applyDefaultRulesToCacheControlObject.spec.ts +126 -0
- package/src/cache/applyDefaultRulesToCacheControlObject.ts +23 -0
- package/src/cache/cacheControlToString.spec.ts +43 -0
- package/src/cache/cacheControlToString.ts +22 -0
- package/src/cache/index.ts +4 -0
- package/src/cache/parseAndSanitiseCacheControlHeader.spec.ts +25 -0
- package/src/cache/parseAndSanitiseCacheControlHeader.ts +28 -0
- package/src/cache/parseCacheControl.spec.ts +89 -0
- package/src/cache/parseCacheControl.ts +74 -0
- package/src/error/InvalidTokenError.ts +8 -0
- package/src/error/UnAuthenticatedRequestError.ts +7 -0
- package/src/error/UnprivilegedError.ts +8 -0
- package/src/error/index.ts +4 -0
- package/src/formatted-text/formattedTextToHtmlSting.spec.ts +235 -0
- package/src/formatted-text/formattedTextToHtmlSting.ts +100 -0
- package/src/index.ts +7 -0
- package/src/server-utils/apiKeyMiddleware.spec.ts +50 -0
- package/src/server-utils/apiKeyMiddleware.ts +23 -0
- package/tsconfig.json +1 -1
- package/tsconfig.tsbuildinfo +1 -1
package/CHANGELOG.md
CHANGED
@@ -3,142 +3,84 @@
|
|
3
3
|
All notable changes to this project will be documented in this file.
|
4
4
|
See [Conventional Commits](https://conventionalcommits.org) for commit guidelines.
|
5
5
|
|
6
|
-
## [1.2.
|
7
|
-
|
8
|
-
**Note:** Version bump only for package @squiz/dx-common-lib
|
6
|
+
## [1.2.13-alpha.0](https://gitlab.squiz.net/developer-experience/cmp/compare/v1.2.2...v1.2.13-alpha.0) (2023-01-13)
|
9
7
|
|
8
|
+
### Bug Fixes
|
10
9
|
|
10
|
+
- **deps:** update dependency constructs to v10.1.183 ([def2040](https://gitlab.squiz.net/developer-experience/cmp/commit/def204076fd709282067ccaa09f73f08824bdbf4))
|
11
11
|
|
12
|
-
|
13
|
-
|
14
|
-
## [1.2.10](https://gitlab.squiz.net/developer-experience/cmp/compare/v1.2.2...v1.2.10) (2022-11-09)
|
12
|
+
## [1.2.12](https://gitlab.squiz.net/developer-experience/cmp/compare/v1.2.2...v1.2.12) (2022-11-24)
|
15
13
|
|
16
14
|
**Note:** Version bump only for package @squiz/dx-common-lib
|
17
15
|
|
16
|
+
## [1.2.11](https://gitlab.squiz.net/developer-experience/cmp/compare/v1.2.2...v1.2.11) (2022-11-11)
|
18
17
|
|
18
|
+
**Note:** Version bump only for package @squiz/dx-common-lib
|
19
19
|
|
20
|
+
## [1.2.10](https://gitlab.squiz.net/developer-experience/cmp/compare/v1.2.2...v1.2.10) (2022-11-09)
|
20
21
|
|
22
|
+
**Note:** Version bump only for package @squiz/dx-common-lib
|
21
23
|
|
22
24
|
## [1.2.9](https://gitlab.squiz.net/developer-experience/cmp/compare/v1.2.2...v1.2.9) (2022-11-04)
|
23
25
|
|
24
26
|
**Note:** Version bump only for package @squiz/dx-common-lib
|
25
27
|
|
26
|
-
|
27
|
-
|
28
|
-
|
29
|
-
|
30
28
|
## [1.2.8](https://gitlab.squiz.net/developer-experience/cmp/compare/v1.2.2...v1.2.8) (2022-10-21)
|
31
29
|
|
32
30
|
**Note:** Version bump only for package @squiz/dx-common-lib
|
33
31
|
|
34
|
-
|
35
|
-
|
36
|
-
|
37
|
-
|
38
32
|
## [1.2.7](https://gitlab.squiz.net/developer-experience/cmp/compare/v1.2.2...v1.2.7) (2022-10-20)
|
39
33
|
|
40
34
|
**Note:** Version bump only for package @squiz/dx-common-lib
|
41
35
|
|
42
|
-
|
43
|
-
|
44
|
-
|
45
|
-
|
46
36
|
## [1.2.6](https://gitlab.squiz.net/developer-experience/cmp/compare/v1.2.2...v1.2.6) (2022-10-20)
|
47
37
|
|
48
38
|
**Note:** Version bump only for package @squiz/dx-common-lib
|
49
39
|
|
50
|
-
|
51
|
-
|
52
|
-
|
53
|
-
|
54
40
|
## [1.2.5](https://gitlab.squiz.net/developer-experience/cmp/compare/v1.2.2...v1.2.5) (2022-10-18)
|
55
41
|
|
56
42
|
**Note:** Version bump only for package @squiz/dx-common-lib
|
57
43
|
|
58
|
-
|
59
|
-
|
60
|
-
|
61
|
-
|
62
44
|
## [1.2.2](https://gitlab.squiz.net/developer-experience/cmp/compare/v1.2.1...v1.2.2) (2022-09-26)
|
63
45
|
|
64
46
|
**Note:** Version bump only for package @squiz/dx-common-lib
|
65
47
|
|
66
|
-
|
67
|
-
|
68
|
-
|
69
|
-
|
70
48
|
## [1.2.1](https://gitlab.squiz.net/developer-experience/cmp/compare/v1.2.1-alpha.90...v1.2.1) (2022-09-23)
|
71
49
|
|
72
50
|
**Note:** Version bump only for package @squiz/dx-common-lib
|
73
51
|
|
74
|
-
|
75
|
-
|
76
|
-
|
77
|
-
|
78
52
|
## [1.2.1-alpha.107](https://gitlab.squiz.net/developer-experience/cmp/compare/v1.2.1-alpha.90...v1.2.1-alpha.107) (2022-09-21)
|
79
53
|
|
80
54
|
**Note:** Version bump only for package @squiz/dx-common-lib
|
81
55
|
|
82
|
-
|
83
|
-
|
84
|
-
|
85
|
-
|
86
56
|
## [1.2.1-alpha.106](https://gitlab.squiz.net/developer-experience/cmp/compare/v1.2.1-alpha.90...v1.2.1-alpha.106) (2022-09-02)
|
87
57
|
|
88
58
|
**Note:** Version bump only for package @squiz/dx-common-lib
|
89
59
|
|
90
|
-
|
91
|
-
|
92
|
-
|
93
|
-
|
94
60
|
## [1.2.1-alpha.105](https://gitlab.squiz.net/developer-experience/cmp/compare/v1.2.1-alpha.90...v1.2.1-alpha.105) (2022-08-26)
|
95
61
|
|
96
62
|
**Note:** Version bump only for package @squiz/dx-common-lib
|
97
63
|
|
98
|
-
|
99
|
-
|
100
|
-
|
101
|
-
|
102
64
|
## [1.2.1-alpha.104](https://gitlab.squiz.net/developer-experience/cmp/compare/v1.2.1-alpha.90...v1.2.1-alpha.104) (2022-08-23)
|
103
65
|
|
104
66
|
**Note:** Version bump only for package @squiz/dx-common-lib
|
105
67
|
|
106
|
-
|
107
|
-
|
108
|
-
|
109
|
-
|
110
68
|
## [1.2.1-alpha.103](https://gitlab.squiz.net/developer-experience/cmp/compare/v1.2.1-alpha.90...v1.2.1-alpha.103) (2022-08-23)
|
111
69
|
|
112
70
|
**Note:** Version bump only for package @squiz/dx-common-lib
|
113
71
|
|
114
|
-
|
115
|
-
|
116
|
-
|
117
|
-
|
118
72
|
## [1.2.1-alpha.102](https://gitlab.squiz.net/developer-experience/cmp/compare/v1.2.1-alpha.90...v1.2.1-alpha.102) (2022-08-23)
|
119
73
|
|
120
74
|
**Note:** Version bump only for package @squiz/dx-common-lib
|
121
75
|
|
122
|
-
|
123
|
-
|
124
|
-
|
125
|
-
|
126
76
|
## [1.2.1-alpha.101](https://gitlab.squiz.net/developer-experience/cmp/compare/v1.2.1-alpha.90...v1.2.1-alpha.101) (2022-08-19)
|
127
77
|
|
128
78
|
**Note:** Version bump only for package @squiz/dx-common-lib
|
129
79
|
|
130
|
-
|
131
|
-
|
132
|
-
|
133
|
-
|
134
80
|
## [1.2.1-alpha.100](https://gitlab.squiz.net/developer-experience/cmp/compare/v1.2.1-alpha.90...v1.2.1-alpha.100) (2022-08-18)
|
135
81
|
|
136
82
|
**Note:** Version bump only for package @squiz/dx-common-lib
|
137
83
|
|
138
|
-
|
139
|
-
|
140
|
-
|
141
|
-
|
142
84
|
## [1.2.1-alpha.99](https://gitlab.squiz.net/developer-experience/cmp/compare/v1.2.1-alpha.90...v1.2.1-alpha.99) (2022-08-18)
|
143
85
|
|
144
86
|
**Note:** Version bump only for package @squiz/dx-common-lib
|
@@ -0,0 +1 @@
|
|
1
|
+
{"version":3,"file":"ApiKeyValidationService.js","sourceRoot":"","sources":["../../src/api-key-validation/ApiKeyValidationService.ts"],"names":[],"mappings":""}
|
@@ -0,0 +1,17 @@
|
|
1
|
+
import { SecretsManagerClient } from '@aws-sdk/client-secrets-manager';
|
2
|
+
import { ApiKeyValidationService } from './ApiKeyValidationService';
|
3
|
+
import { Logger } from '@squiz/dx-logger-lib';
|
4
|
+
export interface CloudFlareKeys {
|
5
|
+
keys: string[];
|
6
|
+
'matrix-keys': string[];
|
7
|
+
}
|
8
|
+
export declare class CloudflareApiKeyService implements ApiKeyValidationService {
|
9
|
+
protected secretName: string;
|
10
|
+
protected secretsClient: SecretsManagerClient;
|
11
|
+
protected logger: Logger;
|
12
|
+
constructor(secretName: string, logger?: Logger);
|
13
|
+
keyIsValid(key: string): boolean;
|
14
|
+
matrixKeyIsValid(key: string): boolean;
|
15
|
+
protected getValidApiKeys(): Promise<CloudFlareKeys>;
|
16
|
+
refreshApiKeys(): Promise<void>;
|
17
|
+
}
|
@@ -0,0 +1,72 @@
|
|
1
|
+
"use strict";
|
2
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
3
|
+
exports.CloudflareApiKeyService = void 0;
|
4
|
+
const client_secrets_manager_1 = require("@aws-sdk/client-secrets-manager");
|
5
|
+
const UnAuthenticatedRequestError_1 = require("../error/UnAuthenticatedRequestError");
|
6
|
+
const dx_logger_lib_1 = require("@squiz/dx-logger-lib");
|
7
|
+
let validKeys = {
|
8
|
+
keys: [],
|
9
|
+
'matrix-keys': [],
|
10
|
+
};
|
11
|
+
let refreshInterval;
|
12
|
+
// number must be smaller than 24 days.
|
13
|
+
// This is because the value is int32 and maxes at than 2^31-1 milliseconds
|
14
|
+
const REFRESH_TIMER = 7 * 24 * 3600 * 1000; // days, hours, seconds, milliseconds
|
15
|
+
class CloudflareApiKeyService {
|
16
|
+
constructor(secretName, logger) {
|
17
|
+
this.secretName = secretName;
|
18
|
+
this.secretsClient = new client_secrets_manager_1.SecretsManagerClient({
|
19
|
+
region: 'ap-southeast-2',
|
20
|
+
});
|
21
|
+
if (!logger) {
|
22
|
+
logger = (0, dx_logger_lib_1.getLogger)({ name: 'CloudflareApiKeyService' });
|
23
|
+
}
|
24
|
+
this.logger = logger;
|
25
|
+
}
|
26
|
+
keyIsValid(key) {
|
27
|
+
if (validKeys.keys.length == 0) {
|
28
|
+
throw new UnAuthenticatedRequestError_1.UnAuthenticatedRequestError('No api keys to check against');
|
29
|
+
}
|
30
|
+
return validKeys.keys.includes(key);
|
31
|
+
}
|
32
|
+
matrixKeyIsValid(key) {
|
33
|
+
if (validKeys['matrix-keys'].length == 0) {
|
34
|
+
throw new UnAuthenticatedRequestError_1.UnAuthenticatedRequestError('No api keys to check against');
|
35
|
+
}
|
36
|
+
return validKeys['matrix-keys'].includes(key);
|
37
|
+
}
|
38
|
+
async getValidApiKeys() {
|
39
|
+
let secretValue;
|
40
|
+
try {
|
41
|
+
secretValue = await this.secretsClient.send(new client_secrets_manager_1.GetSecretValueCommand({
|
42
|
+
SecretId: this.secretName,
|
43
|
+
}));
|
44
|
+
}
|
45
|
+
catch (e) {
|
46
|
+
console.error(e);
|
47
|
+
throw new Error('Failed to request api key from aws' + e.message);
|
48
|
+
}
|
49
|
+
try {
|
50
|
+
const secret = JSON.parse(secretValue.SecretString);
|
51
|
+
if (secret.keys) {
|
52
|
+
return secret;
|
53
|
+
}
|
54
|
+
throw new Error('api keys retrieved and decoded successfully but contained no values');
|
55
|
+
}
|
56
|
+
catch (e) {
|
57
|
+
throw new Error('failed to decode cloudflare api key values');
|
58
|
+
}
|
59
|
+
}
|
60
|
+
async refreshApiKeys() {
|
61
|
+
this.logger.info('refreshing keys');
|
62
|
+
validKeys = await this.getValidApiKeys();
|
63
|
+
this.logger.info(`number of valid keys found: ${validKeys.keys.length}`);
|
64
|
+
if (!refreshInterval) {
|
65
|
+
refreshInterval = setInterval(async () => {
|
66
|
+
await this.refreshApiKeys();
|
67
|
+
}, REFRESH_TIMER);
|
68
|
+
}
|
69
|
+
}
|
70
|
+
}
|
71
|
+
exports.CloudflareApiKeyService = CloudflareApiKeyService;
|
72
|
+
//# sourceMappingURL=CloudflareApiKeyService.js.map
|
@@ -0,0 +1 @@
|
|
1
|
+
{"version":3,"file":"CloudflareApiKeyService.js","sourceRoot":"","sources":["../../src/api-key-validation/CloudflareApiKeyService.ts"],"names":[],"mappings":";;;AAAA,4EAIyC;AACzC,sFAAmF;AAEnF,wDAAyD;AAOzD,IAAI,SAAS,GAAmB;IAC9B,IAAI,EAAE,EAAE;IACR,aAAa,EAAE,EAAE;CAClB,CAAC;AAEF,IAAI,eAA+C,CAAC;AACpD,uCAAuC;AACvC,2EAA2E;AAC3E,MAAM,aAAa,GAAG,CAAC,GAAG,EAAE,GAAG,IAAI,GAAG,IAAI,CAAC,CAAC,qCAAqC;AAEjF,MAAa,uBAAuB;IAIlC,YAAsB,UAAkB,EAAE,MAAe;QAAnC,eAAU,GAAV,UAAU,CAAQ;QACtC,IAAI,CAAC,aAAa,GAAG,IAAI,6CAAoB,CAAC;YAC5C,MAAM,EAAE,gBAAgB;SACzB,CAAC,CAAC;QAEH,IAAI,CAAC,MAAM,EAAE;YACX,MAAM,GAAG,IAAA,yBAAS,EAAC,EAAE,IAAI,EAAE,yBAAyB,EAAE,CAAC,CAAC;SACzD;QAED,IAAI,CAAC,MAAM,GAAG,MAAM,CAAC;IACvB,CAAC;IAEM,UAAU,CAAC,GAAW;QAC3B,IAAI,SAAS,CAAC,IAAI,CAAC,MAAM,IAAI,CAAC,EAAE;YAC9B,MAAM,IAAI,yDAA2B,CAAC,8BAA8B,CAAC,CAAC;SACvE;QAED,OAAO,SAAS,CAAC,IAAI,CAAC,QAAQ,CAAC,GAAG,CAAC,CAAC;IACtC,CAAC;IAEM,gBAAgB,CAAC,GAAW;QACjC,IAAI,SAAS,CAAC,aAAa,CAAC,CAAC,MAAM,IAAI,CAAC,EAAE;YACxC,MAAM,IAAI,yDAA2B,CAAC,8BAA8B,CAAC,CAAC;SACvE;QAED,OAAO,SAAS,CAAC,aAAa,CAAC,CAAC,QAAQ,CAAC,GAAG,CAAC,CAAC;IAChD,CAAC;IAES,KAAK,CAAC,eAAe;QAC7B,IAAI,WAAwC,CAAC;QAE7C,IAAI;YACF,WAAW,GAAG,MAAM,IAAI,CAAC,aAAa,CAAC,IAAI,CACzC,IAAI,8CAAqB,CAAC;gBACxB,QAAQ,EAAE,IAAI,CAAC,UAAU;aAC1B,CAAC,CACH,CAAC;SACH;QAAC,OAAO,CAAM,EAAE;YACf,OAAO,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC;YACjB,MAAM,IAAI,KAAK,CAAC,oCAAoC,GAAG,CAAC,CAAC,OAAO,CAAC,CAAC;SACnE;QAED,IAAI;YACF,MAAM,MAAM,GAAG,IAAI,CAAC,KAAK,CAAC,WAAW,CAAC,YAAa,CAAC,CAAC;YAErD,IAAI,MAAM,CAAC,IAAI,EAAE;gBACf,OAAO,MAAM,CAAC;aACf;YAED,MAAM,IAAI,KAAK,CAAC,qEAAqE,CAAC,CAAC;SACxF;QAAC,OAAO,CAAC,EAAE;YACV,MAAM,IAAI,KAAK,CAAC,4CAA4C,CAAC,CAAC;SAC/D;IACH,CAAC;IAEM,KAAK,CAAC,cAAc;QACzB,IAAI,CAAC,MAAM,CAAC,IAAI,CAAC,iBAAiB,CAAC,CAAC;QACpC,SAAS,GAAG,MAAM,IAAI,CAAC,eAAe,EAAE,CAAC;QAEzC,IAAI,CAAC,MAAM,CAAC,IAAI,CAAC,+BAA+B,SAAS,CAAC,IAAI,CAAC,MAAM,EAAE,CAAC,CAAC;QAEzE,IAAI,CAAC,eAAe,EAAE;YACpB,eAAe,GAAG,WAAW,CAAC,KAAK,IAAI,EAAE;gBACvC,MAAM,IAAI,CAAC,cAAc,EAAE,CAAC;YAC9B,CAAC,EAAE,aAAa,CAAC,CAAC;SACnB;IACH,CAAC;CACF;AAvED,0DAuEC"}
|
@@ -0,0 +1 @@
|
|
1
|
+
export {};
|
@@ -0,0 +1,93 @@
|
|
1
|
+
"use strict";
|
2
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
3
|
+
const client_secrets_manager_1 = require("@aws-sdk/client-secrets-manager");
|
4
|
+
const UnAuthenticatedRequestError_1 = require("../error/UnAuthenticatedRequestError");
|
5
|
+
const CloudflareApiKeyService_1 = require("./CloudflareApiKeyService");
|
6
|
+
const sendSpy = jest.spyOn(client_secrets_manager_1.SecretsManagerClient.prototype, 'send');
|
7
|
+
jest.useFakeTimers();
|
8
|
+
jest.spyOn(global, 'setInterval');
|
9
|
+
describe('CloudflareApiKeyService', () => {
|
10
|
+
const service = new CloudflareApiKeyService_1.CloudflareApiKeyService('my-secret-name');
|
11
|
+
describe('refreshApiKeys', () => {
|
12
|
+
it('should throw an error if the secret value is not in the expected format', async () => {
|
13
|
+
sendSpy.mockImplementationOnce(() => Promise.resolve({ SecretString: 'bad json' }));
|
14
|
+
await expect(service.refreshApiKeys()).rejects.toThrowError(new Error('failed to decode cloudflare api key values'));
|
15
|
+
});
|
16
|
+
it('should make a request to the aws secrets manager when refreshing the keys', async () => {
|
17
|
+
sendSpy.mockClear();
|
18
|
+
sendSpy.mockImplementationOnce(() => Promise.resolve({ SecretString: '{"keys":[]}' }));
|
19
|
+
await service.refreshApiKeys();
|
20
|
+
expect(sendSpy.mock.lastCall[0].input).toEqual({ SecretId: 'my-secret-name' });
|
21
|
+
expect(sendSpy.mock.lastCall[0]).toBeInstanceOf(client_secrets_manager_1.GetSecretValueCommand);
|
22
|
+
});
|
23
|
+
it('should start a refresh timer once called, but only once', (done) => {
|
24
|
+
sendSpy.mockClear();
|
25
|
+
sendSpy.mockImplementationOnce(() => Promise.resolve({ SecretString: '{"keys":["my-new-key"]}' }));
|
26
|
+
const spy = jest.spyOn(service, 'refreshApiKeys');
|
27
|
+
expect(spy).not.toBeCalled();
|
28
|
+
expect(setInterval).toHaveBeenCalledTimes(1); // for the above 2 tests
|
29
|
+
jest.runOnlyPendingTimers();
|
30
|
+
expect(spy).toHaveBeenCalled();
|
31
|
+
jest.useRealTimers();
|
32
|
+
setTimeout(() => {
|
33
|
+
expect(service.keyIsValid('my-new-key')).toEqual(true);
|
34
|
+
done();
|
35
|
+
}, 5);
|
36
|
+
});
|
37
|
+
});
|
38
|
+
describe('keyIsValid', () => {
|
39
|
+
describe('when there are no api keys', () => {
|
40
|
+
beforeAll(async () => {
|
41
|
+
sendSpy.mockImplementation(() => Promise.resolve({ SecretString: '{"keys":[]}' }));
|
42
|
+
await service.refreshApiKeys();
|
43
|
+
});
|
44
|
+
it('should throw an unauthenticated request error when validating a key if there are no keys to validate against', () => {
|
45
|
+
expect(() => service.keyIsValid('anything')).toThrowError(new UnAuthenticatedRequestError_1.UnAuthenticatedRequestError('No api keys to check against'));
|
46
|
+
});
|
47
|
+
});
|
48
|
+
describe('when there are api keys', () => {
|
49
|
+
beforeAll(async () => {
|
50
|
+
sendSpy.mockImplementation(() => Promise.resolve({ SecretString: '{"keys":["my-key", "my-other-key"], "matrix-keys":["my-matrix-key"]}' }));
|
51
|
+
await service.refreshApiKeys();
|
52
|
+
});
|
53
|
+
it('should return true when there are keys loaded and the input key is in the list of valid keys', () => {
|
54
|
+
expect(service.keyIsValid('my-key')).toEqual(true);
|
55
|
+
expect(service.keyIsValid('my-other-key')).toEqual(true);
|
56
|
+
});
|
57
|
+
it('should return false when there are keys loaded and the input key is not in the list of valid keys', async () => {
|
58
|
+
expect(service.keyIsValid('not-my-key')).toEqual(false);
|
59
|
+
});
|
60
|
+
it('should return false if trying to validate a matrix key', () => {
|
61
|
+
expect(service.keyIsValid('my-matrix-key')).toEqual(false);
|
62
|
+
});
|
63
|
+
});
|
64
|
+
});
|
65
|
+
describe('matrixKeyIsValid', () => {
|
66
|
+
describe('when there are no api keys', () => {
|
67
|
+
beforeAll(async () => {
|
68
|
+
sendSpy.mockImplementation(() => Promise.resolve({ SecretString: '{"keys":[], "matrix-keys":[]}' }));
|
69
|
+
await service.refreshApiKeys();
|
70
|
+
});
|
71
|
+
it('should throw an unauthenticated request error when validating a key if there are no keys to validate against', () => {
|
72
|
+
expect(() => service.matrixKeyIsValid('anything')).toThrowError(new UnAuthenticatedRequestError_1.UnAuthenticatedRequestError('No api keys to check against'));
|
73
|
+
});
|
74
|
+
});
|
75
|
+
describe('when there are api keys', () => {
|
76
|
+
beforeAll(async () => {
|
77
|
+
sendSpy.mockImplementation(() => Promise.resolve({ SecretString: '{"keys":["my-key", "my-other-key"], "matrix-keys":["my-matrix-key"]}' }));
|
78
|
+
await service.refreshApiKeys();
|
79
|
+
});
|
80
|
+
it('should return true when there are keys loaded and the input key is in the list of valid matrix keys', () => {
|
81
|
+
expect(service.matrixKeyIsValid('my-matrix-key')).toEqual(true);
|
82
|
+
});
|
83
|
+
it('should return false when there are keys loaded and the input key is not in the list of valid matrix keys', async () => {
|
84
|
+
expect(service.matrixKeyIsValid('not-my-key')).toEqual(false);
|
85
|
+
});
|
86
|
+
it('should return false when using non matrix keys', async () => {
|
87
|
+
expect(service.matrixKeyIsValid('my-key')).toEqual(false);
|
88
|
+
expect(service.matrixKeyIsValid('my-other-key')).toEqual(false);
|
89
|
+
});
|
90
|
+
});
|
91
|
+
});
|
92
|
+
});
|
93
|
+
//# sourceMappingURL=CloudflareApiKeyService.spec.js.map
|
@@ -0,0 +1 @@
|
|
1
|
+
{"version":3,"file":"CloudflareApiKeyService.spec.js","sourceRoot":"","sources":["../../src/api-key-validation/CloudflareApiKeyService.spec.ts"],"names":[],"mappings":"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"}
|
@@ -0,0 +1,13 @@
|
|
1
|
+
"use strict";
|
2
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
3
|
+
exports.DevelopmentApiKeyService = void 0;
|
4
|
+
class DevelopmentApiKeyService {
|
5
|
+
keyIsValid() {
|
6
|
+
return true;
|
7
|
+
}
|
8
|
+
matrixKeyIsValid() {
|
9
|
+
return true;
|
10
|
+
}
|
11
|
+
}
|
12
|
+
exports.DevelopmentApiKeyService = DevelopmentApiKeyService;
|
13
|
+
//# sourceMappingURL=DevelopmentApiKeyService.js.map
|
@@ -0,0 +1 @@
|
|
1
|
+
{"version":3,"file":"DevelopmentApiKeyService.js","sourceRoot":"","sources":["../../src/api-key-validation/DevelopmentApiKeyService.ts"],"names":[],"mappings":";;;AAEA,MAAa,wBAAwB;IAC5B,UAAU;QACf,OAAO,IAAI,CAAC;IACd,CAAC;IACM,gBAAgB;QACrB,OAAO,IAAI,CAAC;IACd,CAAC;CACF;AAPD,4DAOC"}
|
@@ -0,0 +1 @@
|
|
1
|
+
export {};
|
@@ -0,0 +1,17 @@
|
|
1
|
+
"use strict";
|
2
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
3
|
+
const DevelopmentApiKeyService_1 = require("./DevelopmentApiKeyService");
|
4
|
+
describe('DevelopmentApiKeyService', () => {
|
5
|
+
const service = new DevelopmentApiKeyService_1.DevelopmentApiKeyService();
|
6
|
+
describe('keyIsValid', () => {
|
7
|
+
it('should always return true', () => {
|
8
|
+
expect(service.keyIsValid()).toEqual(true);
|
9
|
+
});
|
10
|
+
});
|
11
|
+
describe('matrixKeyIsValid', () => {
|
12
|
+
it('should always return true', () => {
|
13
|
+
expect(service.matrixKeyIsValid()).toEqual(true);
|
14
|
+
});
|
15
|
+
});
|
16
|
+
});
|
17
|
+
//# sourceMappingURL=DevelopmentApiKeyService.spec.js.map
|
@@ -0,0 +1 @@
|
|
1
|
+
{"version":3,"file":"DevelopmentApiKeyService.spec.js","sourceRoot":"","sources":["../../src/api-key-validation/DevelopmentApiKeyService.spec.ts"],"names":[],"mappings":";;AAAA,yEAAsE;AAEtE,QAAQ,CAAC,0BAA0B,EAAE,GAAG,EAAE;IACxC,MAAM,OAAO,GAAG,IAAI,mDAAwB,EAAE,CAAC;IAE/C,QAAQ,CAAC,YAAY,EAAE,GAAG,EAAE;QAC1B,EAAE,CAAC,2BAA2B,EAAE,GAAG,EAAE;YACnC,MAAM,CAAC,OAAO,CAAC,UAAU,EAAE,CAAC,CAAC,OAAO,CAAC,IAAI,CAAC,CAAC;QAC7C,CAAC,CAAC,CAAC;IACL,CAAC,CAAC,CAAC;IAEH,QAAQ,CAAC,kBAAkB,EAAE,GAAG,EAAE;QAChC,EAAE,CAAC,2BAA2B,EAAE,GAAG,EAAE;YACnC,MAAM,CAAC,OAAO,CAAC,gBAAgB,EAAE,CAAC,CAAC,OAAO,CAAC,IAAI,CAAC,CAAC;QACnD,CAAC,CAAC,CAAC;IACL,CAAC,CAAC,CAAC;AACL,CAAC,CAAC,CAAC"}
|
@@ -0,0 +1,6 @@
|
|
1
|
+
import { CloudflareApiKeyService } from './CloudflareApiKeyService';
|
2
|
+
import { DevelopmentApiKeyService } from './DevelopmentApiKeyService';
|
3
|
+
export declare function getApiKeyService(prodEnv?: {
|
4
|
+
deploymentEnvironment: string;
|
5
|
+
squizRegion: string;
|
6
|
+
}): DevelopmentApiKeyService | CloudflareApiKeyService;
|
@@ -0,0 +1,23 @@
|
|
1
|
+
"use strict";
|
2
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
3
|
+
exports.getApiKeyService = void 0;
|
4
|
+
const util_1 = require("../util");
|
5
|
+
const CloudflareApiKeyService_1 = require("./CloudflareApiKeyService");
|
6
|
+
const DevelopmentApiKeyService_1 = require("./DevelopmentApiKeyService");
|
7
|
+
function getApiKeyService(prodEnv) {
|
8
|
+
const env = (0, util_1.getNodeEnv)();
|
9
|
+
switch (env) {
|
10
|
+
// this the DX team dev environment
|
11
|
+
case 'development':
|
12
|
+
return new DevelopmentApiKeyService_1.DevelopmentApiKeyService();
|
13
|
+
case 'production':
|
14
|
+
if (prodEnv == undefined) {
|
15
|
+
throw new Error(`invalid production state, need to have deploymentEnvironment and squiz region set`);
|
16
|
+
}
|
17
|
+
return new CloudflareApiKeyService_1.CloudflareApiKeyService(`dx-${prodEnv.deploymentEnvironment}-${prodEnv.squizRegion}-cmp-cloudflare-keys`);
|
18
|
+
default:
|
19
|
+
(0, util_1.never)(env);
|
20
|
+
}
|
21
|
+
}
|
22
|
+
exports.getApiKeyService = getApiKeyService;
|
23
|
+
//# sourceMappingURL=getApiKeyService.js.map
|
@@ -0,0 +1 @@
|
|
1
|
+
{"version":3,"file":"getApiKeyService.js","sourceRoot":"","sources":["../../src/api-key-validation/getApiKeyService.ts"],"names":[],"mappings":";;;AAAA,kCAA4C;AAC5C,uEAAoE;AACpE,yEAAsE;AAEtE,SAAgB,gBAAgB,CAAC,OAGhC;IACC,MAAM,GAAG,GAAG,IAAA,iBAAU,GAAE,CAAC;IAEzB,QAAQ,GAAG,EAAE;QACX,mCAAmC;QACnC,KAAK,aAAa;YAChB,OAAO,IAAI,mDAAwB,EAAE,CAAC;QACxC,KAAK,YAAY;YACf,IAAI,OAAO,IAAI,SAAS,EAAE;gBACxB,MAAM,IAAI,KAAK,CAAC,mFAAmF,CAAC,CAAC;aACtG;YAED,OAAO,IAAI,iDAAuB,CAChC,MAAM,OAAO,CAAC,qBAAqB,IAAI,OAAO,CAAC,WAAW,sBAAsB,CACjF,CAAC;QAEJ;YACE,IAAA,YAAK,EAAC,GAAG,CAAC,CAAC;KACd;AACH,CAAC;AAtBD,4CAsBC"}
|
@@ -0,0 +1 @@
|
|
1
|
+
export {};
|
@@ -0,0 +1,24 @@
|
|
1
|
+
"use strict";
|
2
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
3
|
+
const CloudflareApiKeyService_1 = require("./CloudflareApiKeyService");
|
4
|
+
const DevelopmentApiKeyService_1 = require("./DevelopmentApiKeyService");
|
5
|
+
const getApiKeyService_1 = require("./getApiKeyService");
|
6
|
+
describe('getApiKeyService', () => {
|
7
|
+
it('should return an instance of DevelopmentApiKeyService when NODE_ENV is development', () => {
|
8
|
+
process.env.NODE_ENV = 'development';
|
9
|
+
expect((0, getApiKeyService_1.getApiKeyService)()).toBeInstanceOf(DevelopmentApiKeyService_1.DevelopmentApiKeyService);
|
10
|
+
});
|
11
|
+
it('should return an instance of CloudflareApiKeyService when NODE_ENV is production', () => {
|
12
|
+
process.env.NODE_ENV = 'production';
|
13
|
+
expect((0, getApiKeyService_1.getApiKeyService)({ deploymentEnvironment: 'any', squizRegion: 'value' })).toBeInstanceOf(CloudflareApiKeyService_1.CloudflareApiKeyService);
|
14
|
+
});
|
15
|
+
it('should throw an error if no prodEnv values available', () => {
|
16
|
+
process.env.NODE_ENV = 'production';
|
17
|
+
expect(() => (0, getApiKeyService_1.getApiKeyService)()).toThrow(new Error(`invalid production state, need to have deploymentEnvironment and squiz region set`));
|
18
|
+
});
|
19
|
+
it('should throw an error if NODE_ENV is anything other than development or production', () => {
|
20
|
+
process.env.NODE_ENV = 'something invalid';
|
21
|
+
expect(() => (0, getApiKeyService_1.getApiKeyService)()).toThrow(new Error(`NODE_ENV env var can only be values "production" or "development"`));
|
22
|
+
});
|
23
|
+
});
|
24
|
+
//# sourceMappingURL=getApiKeyService.spec.js.map
|
@@ -0,0 +1 @@
|
|
1
|
+
{"version":3,"file":"getApiKeyService.spec.js","sourceRoot":"","sources":["../../src/api-key-validation/getApiKeyService.spec.ts"],"names":[],"mappings":";;AAAA,uEAAoE;AACpE,yEAAsE;AACtE,yDAAsD;AAEtD,QAAQ,CAAC,kBAAkB,EAAE,GAAG,EAAE;IAChC,EAAE,CAAC,oFAAoF,EAAE,GAAG,EAAE;QAC5F,OAAO,CAAC,GAAG,CAAC,QAAQ,GAAG,aAAa,CAAC;QACrC,MAAM,CAAC,IAAA,mCAAgB,GAAE,CAAC,CAAC,cAAc,CAAC,mDAAwB,CAAC,CAAC;IACtE,CAAC,CAAC,CAAC;IAEH,EAAE,CAAC,kFAAkF,EAAE,GAAG,EAAE;QAC1F,OAAO,CAAC,GAAG,CAAC,QAAQ,GAAG,YAAY,CAAC;QACpC,MAAM,CAAC,IAAA,mCAAgB,EAAC,EAAE,qBAAqB,EAAE,KAAK,EAAE,WAAW,EAAE,OAAO,EAAE,CAAC,CAAC,CAAC,cAAc,CAC7F,iDAAuB,CACxB,CAAC;IACJ,CAAC,CAAC,CAAC;IAEH,EAAE,CAAC,sDAAsD,EAAE,GAAG,EAAE;QAC9D,OAAO,CAAC,GAAG,CAAC,QAAQ,GAAG,YAAY,CAAC;QACpC,MAAM,CAAC,GAAG,EAAE,CAAC,IAAA,mCAAgB,GAAE,CAAC,CAAC,OAAO,CACtC,IAAI,KAAK,CAAC,mFAAmF,CAAC,CAC/F,CAAC;IACJ,CAAC,CAAC,CAAC;IAEH,EAAE,CAAC,oFAAoF,EAAE,GAAG,EAAE;QAC5F,OAAO,CAAC,GAAG,CAAC,QAAQ,GAAG,mBAAmB,CAAC;QAE3C,MAAM,CAAC,GAAG,EAAE,CAAC,IAAA,mCAAgB,GAAE,CAAC,CAAC,OAAO,CACtC,IAAI,KAAK,CAAC,mEAAmE,CAAC,CAC/E,CAAC;IACJ,CAAC,CAAC,CAAC;AACL,CAAC,CAAC,CAAC"}
|
@@ -2,4 +2,3 @@
|
|
2
2
|
* If value is undefined, return default value otherwise assert it meets assertion rule
|
3
3
|
*/
|
4
4
|
export declare function assertAssignWithDefaultUndefinedValue<T>(value: unknown, assertionFunc: (val: unknown) => asserts val is T, defaultValue: T, errorMessage?: string): T;
|
5
|
-
export declare const isSomeEnum: <TEnum>(enumType: TEnum) => (token: unknown) => token is TEnum[keyof TEnum];
|
@@ -1,6 +1,6 @@
|
|
1
1
|
"use strict";
|
2
2
|
Object.defineProperty(exports, "__esModule", { value: true });
|
3
|
-
exports.
|
3
|
+
exports.assertAssignWithDefaultUndefinedValue = void 0;
|
4
4
|
const assertAssign_1 = require("./assertAssign");
|
5
5
|
/**
|
6
6
|
* If value is undefined, return default value otherwise assert it meets assertion rule
|
@@ -12,6 +12,4 @@ function assertAssignWithDefaultUndefinedValue(value, assertionFunc, defaultValu
|
|
12
12
|
return (0, assertAssign_1.assertAssign)(value, assertionFunc, errorMessage);
|
13
13
|
}
|
14
14
|
exports.assertAssignWithDefaultUndefinedValue = assertAssignWithDefaultUndefinedValue;
|
15
|
-
const isSomeEnum = (enumType) => (token) => Object.values(enumType).includes(token);
|
16
|
-
exports.isSomeEnum = isSomeEnum;
|
17
15
|
//# sourceMappingURL=assertAssignWithDefaultUndefinedValue.js.map
|
@@ -1 +1 @@
|
|
1
|
-
{"version":3,"file":"assertAssignWithDefaultUndefinedValue.js","sourceRoot":"","sources":["../../src/assertions/assertAssignWithDefaultUndefinedValue.ts"],"names":[],"mappings":";;;AAAA,iDAA8C;AAE9C;;GAEG;AACH,SAAgB,qCAAqC,CACnD,KAAc,EACd,aAAiD,EACjD,YAAe,EACf,YAAqB;IAErB,IAAI,KAAK,KAAK,SAAS,IAAI,KAAK,KAAK,IAAI,EAAE;QACzC,OAAO,YAAY,CAAC;KACrB;IAED,OAAO,IAAA,2BAAY,EAAC,KAAK,EAAE,aAAa,EAAE,YAAY,CAAC,CAAC;AAC1D,CAAC;AAXD,sFAWC
|
1
|
+
{"version":3,"file":"assertAssignWithDefaultUndefinedValue.js","sourceRoot":"","sources":["../../src/assertions/assertAssignWithDefaultUndefinedValue.ts"],"names":[],"mappings":";;;AAAA,iDAA8C;AAE9C;;GAEG;AACH,SAAgB,qCAAqC,CACnD,KAAc,EACd,aAAiD,EACjD,YAAe,EACf,YAAqB;IAErB,IAAI,KAAK,KAAK,SAAS,IAAI,KAAK,KAAK,IAAI,EAAE;QACzC,OAAO,YAAY,CAAC;KACrB;IAED,OAAO,IAAA,2BAAY,EAAC,KAAK,EAAE,aAAa,EAAE,YAAY,CAAC,CAAC;AAC1D,CAAC;AAXD,sFAWC"}
|
@@ -0,0 +1,19 @@
|
|
1
|
+
import { CacheControl } from './parseCacheControl';
|
2
|
+
export declare function applyDefaultRulesToCacheControlObject(cacheControlInput: CacheControl): {
|
3
|
+
[x: string]: string | number | boolean | undefined;
|
4
|
+
'max-age'?: number | undefined;
|
5
|
+
's-maxage'?: number | undefined;
|
6
|
+
'min-fresh'?: number | undefined;
|
7
|
+
'stale-while-revalidate'?: number | undefined;
|
8
|
+
'stale-if-error'?: number | undefined;
|
9
|
+
public?: true | undefined;
|
10
|
+
private?: true | undefined;
|
11
|
+
'no-store'?: true | undefined;
|
12
|
+
'no-cache'?: true | undefined;
|
13
|
+
'no-transform'?: true | undefined;
|
14
|
+
'must-revalidate'?: true | undefined;
|
15
|
+
'proxy-revalidate'?: true | undefined;
|
16
|
+
'must-understand'?: true | undefined;
|
17
|
+
immutable?: true | undefined;
|
18
|
+
extension?: string | undefined;
|
19
|
+
};
|
@@ -0,0 +1,21 @@
|
|
1
|
+
"use strict";
|
2
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
3
|
+
exports.applyDefaultRulesToCacheControlObject = void 0;
|
4
|
+
const parseAndSanitiseCacheControlHeader_1 = require("./parseAndSanitiseCacheControlHeader");
|
5
|
+
function applyDefaultRulesToCacheControlObject(cacheControlInput) {
|
6
|
+
const cacheControl = { ...cacheControlInput };
|
7
|
+
if (cacheControl['max-age'] !== undefined) {
|
8
|
+
cacheControl['max-age'] = (0, parseAndSanitiseCacheControlHeader_1.ensureBetween)(cacheControl['max-age'], parseAndSanitiseCacheControlHeader_1.MIN_CACHE_SECONDS, parseAndSanitiseCacheControlHeader_1.MAX_CACHE_SECONDS);
|
9
|
+
}
|
10
|
+
if (cacheControl['s-maxage'] !== undefined) {
|
11
|
+
cacheControl['s-maxage'] = (0, parseAndSanitiseCacheControlHeader_1.ensureBetween)(cacheControl['s-maxage'], parseAndSanitiseCacheControlHeader_1.MIN_CACHE_SECONDS, parseAndSanitiseCacheControlHeader_1.MAX_CACHE_SECONDS);
|
12
|
+
}
|
13
|
+
if (cacheControl['min-fresh'] !== undefined) {
|
14
|
+
cacheControl['min-fresh'] = (0, parseAndSanitiseCacheControlHeader_1.ensureBetween)(cacheControl['min-fresh'], parseAndSanitiseCacheControlHeader_1.MIN_CACHE_SECONDS, parseAndSanitiseCacheControlHeader_1.MAX_CACHE_SECONDS);
|
15
|
+
}
|
16
|
+
delete cacheControl['no-store'];
|
17
|
+
delete cacheControl['no-cache'];
|
18
|
+
return cacheControl;
|
19
|
+
}
|
20
|
+
exports.applyDefaultRulesToCacheControlObject = applyDefaultRulesToCacheControlObject;
|
21
|
+
//# sourceMappingURL=applyDefaultRulesToCacheControlObject.js.map
|
@@ -0,0 +1 @@
|
|
1
|
+
{"version":3,"file":"applyDefaultRulesToCacheControlObject.js","sourceRoot":"","sources":["../../src/cache/applyDefaultRulesToCacheControlObject.ts"],"names":[],"mappings":";;;AACA,6FAA2G;AAE3G,SAAgB,qCAAqC,CAAC,iBAA+B;IACnF,MAAM,YAAY,GAAG,EAAE,GAAG,iBAAiB,EAAE,CAAC;IAE9C,IAAI,YAAY,CAAC,SAAS,CAAC,KAAK,SAAS,EAAE;QACzC,YAAY,CAAC,SAAS,CAAC,GAAG,IAAA,kDAAa,EAAC,YAAY,CAAC,SAAS,CAAC,EAAE,sDAAiB,EAAE,sDAAiB,CAAC,CAAC;KACxG;IAED,IAAI,YAAY,CAAC,UAAU,CAAC,KAAK,SAAS,EAAE;QAC1C,YAAY,CAAC,UAAU,CAAC,GAAG,IAAA,kDAAa,EAAC,YAAY,CAAC,UAAU,CAAC,EAAE,sDAAiB,EAAE,sDAAiB,CAAC,CAAC;KAC1G;IAED,IAAI,YAAY,CAAC,WAAW,CAAC,KAAK,SAAS,EAAE;QAC3C,YAAY,CAAC,WAAW,CAAC,GAAG,IAAA,kDAAa,EAAC,YAAY,CAAC,WAAW,CAAC,EAAE,sDAAiB,EAAE,sDAAiB,CAAC,CAAC;KAC5G;IAED,OAAO,YAAY,CAAC,UAAU,CAAC,CAAC;IAChC,OAAO,YAAY,CAAC,UAAU,CAAC,CAAC;IAEhC,OAAO,YAAY,CAAC;AACtB,CAAC;AAnBD,sFAmBC"}
|
@@ -0,0 +1 @@
|
|
1
|
+
export {};
|