@squiz/dx-common-lib 1.2.12 → 1.2.13-alpha.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.
Files changed (104) hide show
  1. package/CHANGELOG.md +9 -69
  2. package/lib/api-key-validation/ApiKeyValidationService.d.ts +4 -0
  3. package/lib/api-key-validation/ApiKeyValidationService.js +3 -0
  4. package/lib/api-key-validation/ApiKeyValidationService.js.map +1 -0
  5. package/lib/api-key-validation/CloudflareApiKeyService.d.ts +17 -0
  6. package/lib/api-key-validation/CloudflareApiKeyService.js +72 -0
  7. package/lib/api-key-validation/CloudflareApiKeyService.js.map +1 -0
  8. package/lib/api-key-validation/CloudflareApiKeyService.spec.d.ts +1 -0
  9. package/lib/api-key-validation/CloudflareApiKeyService.spec.js +93 -0
  10. package/lib/api-key-validation/CloudflareApiKeyService.spec.js.map +1 -0
  11. package/lib/api-key-validation/DevelopmentApiKeyService.d.ts +5 -0
  12. package/lib/api-key-validation/DevelopmentApiKeyService.js +13 -0
  13. package/lib/api-key-validation/DevelopmentApiKeyService.js.map +1 -0
  14. package/lib/api-key-validation/DevelopmentApiKeyService.spec.d.ts +1 -0
  15. package/lib/api-key-validation/DevelopmentApiKeyService.spec.js +17 -0
  16. package/lib/api-key-validation/DevelopmentApiKeyService.spec.js.map +1 -0
  17. package/lib/api-key-validation/getApiKeyService.d.ts +6 -0
  18. package/lib/api-key-validation/getApiKeyService.js +23 -0
  19. package/lib/api-key-validation/getApiKeyService.js.map +1 -0
  20. package/lib/api-key-validation/getApiKeyService.spec.d.ts +1 -0
  21. package/lib/api-key-validation/getApiKeyService.spec.js +24 -0
  22. package/lib/api-key-validation/getApiKeyService.spec.js.map +1 -0
  23. package/lib/cache/applyDefaultRulesToCacheControlObject.d.ts +19 -0
  24. package/lib/cache/applyDefaultRulesToCacheControlObject.js +21 -0
  25. package/lib/cache/applyDefaultRulesToCacheControlObject.js.map +1 -0
  26. package/lib/cache/applyDefaultRulesToCacheControlObject.spec.d.ts +1 -0
  27. package/lib/cache/applyDefaultRulesToCacheControlObject.spec.js +97 -0
  28. package/lib/cache/applyDefaultRulesToCacheControlObject.spec.js.map +1 -0
  29. package/lib/cache/cacheControlToString.d.ts +2 -0
  30. package/lib/cache/cacheControlToString.js +24 -0
  31. package/lib/cache/cacheControlToString.js.map +1 -0
  32. package/lib/cache/cacheControlToString.spec.d.ts +1 -0
  33. package/lib/cache/cacheControlToString.spec.js +34 -0
  34. package/lib/cache/cacheControlToString.spec.js.map +1 -0
  35. package/lib/cache/index.d.ts +4 -0
  36. package/lib/cache/index.js +21 -0
  37. package/lib/cache/index.js.map +1 -0
  38. package/lib/cache/parseAndSanitiseCacheControlHeader.d.ts +5 -0
  39. package/lib/cache/parseAndSanitiseCacheControlHeader.js +26 -0
  40. package/lib/cache/parseAndSanitiseCacheControlHeader.js.map +1 -0
  41. package/lib/cache/parseAndSanitiseCacheControlHeader.spec.d.ts +1 -0
  42. package/lib/cache/parseAndSanitiseCacheControlHeader.spec.js +21 -0
  43. package/lib/cache/parseAndSanitiseCacheControlHeader.spec.js.map +1 -0
  44. package/lib/cache/parseCacheControl.d.ts +19 -0
  45. package/lib/cache/parseCacheControl.js +46 -0
  46. package/lib/cache/parseCacheControl.js.map +1 -0
  47. package/lib/cache/parseCacheControl.spec.d.ts +1 -0
  48. package/lib/cache/parseCacheControl.spec.js +70 -0
  49. package/lib/cache/parseCacheControl.spec.js.map +1 -0
  50. package/lib/error/InvalidTokenError.d.ts +5 -0
  51. package/lib/error/InvalidTokenError.js +12 -0
  52. package/lib/error/InvalidTokenError.js.map +1 -0
  53. package/lib/error/UnAuthenticatedRequestError.d.ts +4 -0
  54. package/lib/error/UnAuthenticatedRequestError.js +11 -0
  55. package/lib/error/UnAuthenticatedRequestError.js.map +1 -0
  56. package/lib/error/UnprivilegedError.d.ts +5 -0
  57. package/lib/error/UnprivilegedError.js +12 -0
  58. package/lib/error/UnprivilegedError.js.map +1 -0
  59. package/lib/error/index.d.ts +3 -0
  60. package/lib/error/index.js +3 -0
  61. package/lib/error/index.js.map +1 -1
  62. package/lib/formatted-text/formattedTextToHtmlSting.d.ts +4 -0
  63. package/lib/formatted-text/formattedTextToHtmlSting.js +85 -0
  64. package/lib/formatted-text/formattedTextToHtmlSting.js.map +1 -0
  65. package/lib/formatted-text/formattedTextToHtmlSting.spec.d.ts +1 -0
  66. package/lib/formatted-text/formattedTextToHtmlSting.spec.js +212 -0
  67. package/lib/formatted-text/formattedTextToHtmlSting.spec.js.map +1 -0
  68. package/lib/index.d.ts +7 -0
  69. package/lib/index.js +7 -0
  70. package/lib/index.js.map +1 -1
  71. package/lib/server-utils/apiKeyMiddleware.d.ts +3 -0
  72. package/lib/server-utils/apiKeyMiddleware.js +20 -0
  73. package/lib/server-utils/apiKeyMiddleware.js.map +1 -0
  74. package/lib/server-utils/apiKeyMiddleware.spec.d.ts +1 -0
  75. package/lib/server-utils/apiKeyMiddleware.spec.js +39 -0
  76. package/lib/server-utils/apiKeyMiddleware.spec.js.map +1 -0
  77. package/package.json +9 -7
  78. package/src/api-key-validation/ApiKeyValidationService.ts +4 -0
  79. package/src/api-key-validation/CloudflareApiKeyService.spec.ts +122 -0
  80. package/src/api-key-validation/CloudflareApiKeyService.ts +96 -0
  81. package/src/api-key-validation/DevelopmentApiKeyService.spec.ts +17 -0
  82. package/src/api-key-validation/DevelopmentApiKeyService.ts +10 -0
  83. package/src/api-key-validation/getApiKeyService.spec.ts +32 -0
  84. package/src/api-key-validation/getApiKeyService.ts +27 -0
  85. package/src/cache/applyDefaultRulesToCacheControlObject.spec.ts +126 -0
  86. package/src/cache/applyDefaultRulesToCacheControlObject.ts +23 -0
  87. package/src/cache/cacheControlToString.spec.ts +43 -0
  88. package/src/cache/cacheControlToString.ts +22 -0
  89. package/src/cache/index.ts +4 -0
  90. package/src/cache/parseAndSanitiseCacheControlHeader.spec.ts +25 -0
  91. package/src/cache/parseAndSanitiseCacheControlHeader.ts +28 -0
  92. package/src/cache/parseCacheControl.spec.ts +89 -0
  93. package/src/cache/parseCacheControl.ts +74 -0
  94. package/src/error/InvalidTokenError.ts +8 -0
  95. package/src/error/UnAuthenticatedRequestError.ts +7 -0
  96. package/src/error/UnprivilegedError.ts +8 -0
  97. package/src/error/index.ts +4 -0
  98. package/src/formatted-text/formattedTextToHtmlSting.spec.ts +235 -0
  99. package/src/formatted-text/formattedTextToHtmlSting.ts +100 -0
  100. package/src/index.ts +7 -0
  101. package/src/server-utils/apiKeyMiddleware.spec.ts +50 -0
  102. package/src/server-utils/apiKeyMiddleware.ts +23 -0
  103. package/tsconfig.json +1 -1
  104. package/tsconfig.tsbuildinfo +1 -1
package/CHANGELOG.md CHANGED
@@ -3,150 +3,90 @@
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.12](https://gitlab.squiz.net/developer-experience/cmp/compare/v1.2.2...v1.2.12) (2022-11-24)
6
+ ## [1.2.13-alpha.1](https://gitlab.squiz.net/developer-experience/cmp/compare/v1.2.2...v1.2.13-alpha.1) (2023-01-13)
7
7
 
8
- **Note:** Version bump only for package @squiz/dx-common-lib
8
+ ### Bug Fixes
9
9
 
10
+ - **deps:** update dependency constructs to v10.1.183 ([def2040](https://gitlab.squiz.net/developer-experience/cmp/commit/def204076fd709282067ccaa09f73f08824bdbf4))
10
11
 
12
+ ## [1.2.13-alpha.0](https://gitlab.squiz.net/developer-experience/cmp/compare/v1.2.2...v1.2.13-alpha.0) (2023-01-13)
11
13
 
14
+ ### Bug Fixes
12
15
 
16
+ - **deps:** update dependency constructs to v10.1.183 ([def2040](https://gitlab.squiz.net/developer-experience/cmp/commit/def204076fd709282067ccaa09f73f08824bdbf4))
13
17
 
14
- ## [1.2.11](https://gitlab.squiz.net/developer-experience/cmp/compare/v1.2.2...v1.2.11) (2022-11-11)
18
+ ## [1.2.12](https://gitlab.squiz.net/developer-experience/cmp/compare/v1.2.2...v1.2.12) (2022-11-24)
15
19
 
16
20
  **Note:** Version bump only for package @squiz/dx-common-lib
17
21
 
22
+ ## [1.2.11](https://gitlab.squiz.net/developer-experience/cmp/compare/v1.2.2...v1.2.11) (2022-11-11)
18
23
 
19
-
20
-
24
+ **Note:** Version bump only for package @squiz/dx-common-lib
21
25
 
22
26
  ## [1.2.10](https://gitlab.squiz.net/developer-experience/cmp/compare/v1.2.2...v1.2.10) (2022-11-09)
23
27
 
24
28
  **Note:** Version bump only for package @squiz/dx-common-lib
25
29
 
26
-
27
-
28
-
29
-
30
30
  ## [1.2.9](https://gitlab.squiz.net/developer-experience/cmp/compare/v1.2.2...v1.2.9) (2022-11-04)
31
31
 
32
32
  **Note:** Version bump only for package @squiz/dx-common-lib
33
33
 
34
-
35
-
36
-
37
-
38
34
  ## [1.2.8](https://gitlab.squiz.net/developer-experience/cmp/compare/v1.2.2...v1.2.8) (2022-10-21)
39
35
 
40
36
  **Note:** Version bump only for package @squiz/dx-common-lib
41
37
 
42
-
43
-
44
-
45
-
46
38
  ## [1.2.7](https://gitlab.squiz.net/developer-experience/cmp/compare/v1.2.2...v1.2.7) (2022-10-20)
47
39
 
48
40
  **Note:** Version bump only for package @squiz/dx-common-lib
49
41
 
50
-
51
-
52
-
53
-
54
42
  ## [1.2.6](https://gitlab.squiz.net/developer-experience/cmp/compare/v1.2.2...v1.2.6) (2022-10-20)
55
43
 
56
44
  **Note:** Version bump only for package @squiz/dx-common-lib
57
45
 
58
-
59
-
60
-
61
-
62
46
  ## [1.2.5](https://gitlab.squiz.net/developer-experience/cmp/compare/v1.2.2...v1.2.5) (2022-10-18)
63
47
 
64
48
  **Note:** Version bump only for package @squiz/dx-common-lib
65
49
 
66
-
67
-
68
-
69
-
70
50
  ## [1.2.2](https://gitlab.squiz.net/developer-experience/cmp/compare/v1.2.1...v1.2.2) (2022-09-26)
71
51
 
72
52
  **Note:** Version bump only for package @squiz/dx-common-lib
73
53
 
74
-
75
-
76
-
77
-
78
54
  ## [1.2.1](https://gitlab.squiz.net/developer-experience/cmp/compare/v1.2.1-alpha.90...v1.2.1) (2022-09-23)
79
55
 
80
56
  **Note:** Version bump only for package @squiz/dx-common-lib
81
57
 
82
-
83
-
84
-
85
-
86
58
  ## [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)
87
59
 
88
60
  **Note:** Version bump only for package @squiz/dx-common-lib
89
61
 
90
-
91
-
92
-
93
-
94
62
  ## [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)
95
63
 
96
64
  **Note:** Version bump only for package @squiz/dx-common-lib
97
65
 
98
-
99
-
100
-
101
-
102
66
  ## [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)
103
67
 
104
68
  **Note:** Version bump only for package @squiz/dx-common-lib
105
69
 
106
-
107
-
108
-
109
-
110
70
  ## [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)
111
71
 
112
72
  **Note:** Version bump only for package @squiz/dx-common-lib
113
73
 
114
-
115
-
116
-
117
-
118
74
  ## [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)
119
75
 
120
76
  **Note:** Version bump only for package @squiz/dx-common-lib
121
77
 
122
-
123
-
124
-
125
-
126
78
  ## [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)
127
79
 
128
80
  **Note:** Version bump only for package @squiz/dx-common-lib
129
81
 
130
-
131
-
132
-
133
-
134
82
  ## [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)
135
83
 
136
84
  **Note:** Version bump only for package @squiz/dx-common-lib
137
85
 
138
-
139
-
140
-
141
-
142
86
  ## [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)
143
87
 
144
88
  **Note:** Version bump only for package @squiz/dx-common-lib
145
89
 
146
-
147
-
148
-
149
-
150
90
  ## [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)
151
91
 
152
92
  **Note:** Version bump only for package @squiz/dx-common-lib
@@ -0,0 +1,4 @@
1
+ export interface ApiKeyValidationService {
2
+ keyIsValid(key: string | undefined): boolean;
3
+ matrixKeyIsValid(key: string | undefined): boolean;
4
+ }
@@ -0,0 +1,3 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ //# sourceMappingURL=ApiKeyValidationService.js.map
@@ -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,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,5 @@
1
+ import { ApiKeyValidationService } from './ApiKeyValidationService';
2
+ export declare class DevelopmentApiKeyService implements ApiKeyValidationService {
3
+ keyIsValid(): boolean;
4
+ matrixKeyIsValid(): boolean;
5
+ }
@@ -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,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"}
@@ -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"}