@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.
Files changed (109) hide show
  1. package/CHANGELOG.md +8 -66
  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/assertions/assertAssignWithDefaultUndefinedValue.d.ts +0 -1
  24. package/lib/assertions/assertAssignWithDefaultUndefinedValue.js +1 -3
  25. package/lib/assertions/assertAssignWithDefaultUndefinedValue.js.map +1 -1
  26. package/lib/cache/applyDefaultRulesToCacheControlObject.d.ts +19 -0
  27. package/lib/cache/applyDefaultRulesToCacheControlObject.js +21 -0
  28. package/lib/cache/applyDefaultRulesToCacheControlObject.js.map +1 -0
  29. package/lib/cache/applyDefaultRulesToCacheControlObject.spec.d.ts +1 -0
  30. package/lib/cache/applyDefaultRulesToCacheControlObject.spec.js +97 -0
  31. package/lib/cache/applyDefaultRulesToCacheControlObject.spec.js.map +1 -0
  32. package/lib/cache/cacheControlToString.d.ts +2 -0
  33. package/lib/cache/cacheControlToString.js +24 -0
  34. package/lib/cache/cacheControlToString.js.map +1 -0
  35. package/lib/cache/cacheControlToString.spec.d.ts +1 -0
  36. package/lib/cache/cacheControlToString.spec.js +34 -0
  37. package/lib/cache/cacheControlToString.spec.js.map +1 -0
  38. package/lib/cache/index.d.ts +4 -0
  39. package/lib/cache/index.js +21 -0
  40. package/lib/cache/index.js.map +1 -0
  41. package/lib/cache/parseAndSanitiseCacheControlHeader.d.ts +5 -0
  42. package/lib/cache/parseAndSanitiseCacheControlHeader.js +26 -0
  43. package/lib/cache/parseAndSanitiseCacheControlHeader.js.map +1 -0
  44. package/lib/cache/parseAndSanitiseCacheControlHeader.spec.d.ts +1 -0
  45. package/lib/cache/parseAndSanitiseCacheControlHeader.spec.js +21 -0
  46. package/lib/cache/parseAndSanitiseCacheControlHeader.spec.js.map +1 -0
  47. package/lib/cache/parseCacheControl.d.ts +19 -0
  48. package/lib/cache/parseCacheControl.js +46 -0
  49. package/lib/cache/parseCacheControl.js.map +1 -0
  50. package/lib/cache/parseCacheControl.spec.d.ts +1 -0
  51. package/lib/cache/parseCacheControl.spec.js +70 -0
  52. package/lib/cache/parseCacheControl.spec.js.map +1 -0
  53. package/lib/error/InvalidTokenError.d.ts +5 -0
  54. package/lib/error/InvalidTokenError.js +12 -0
  55. package/lib/error/InvalidTokenError.js.map +1 -0
  56. package/lib/error/UnAuthenticatedRequestError.d.ts +4 -0
  57. package/lib/error/UnAuthenticatedRequestError.js +11 -0
  58. package/lib/error/UnAuthenticatedRequestError.js.map +1 -0
  59. package/lib/error/UnprivilegedError.d.ts +5 -0
  60. package/lib/error/UnprivilegedError.js +12 -0
  61. package/lib/error/UnprivilegedError.js.map +1 -0
  62. package/lib/error/index.d.ts +3 -0
  63. package/lib/error/index.js +3 -0
  64. package/lib/error/index.js.map +1 -1
  65. package/lib/formatted-text/formattedTextToHtmlSting.d.ts +4 -0
  66. package/lib/formatted-text/formattedTextToHtmlSting.js +85 -0
  67. package/lib/formatted-text/formattedTextToHtmlSting.js.map +1 -0
  68. package/lib/formatted-text/formattedTextToHtmlSting.spec.d.ts +1 -0
  69. package/lib/formatted-text/formattedTextToHtmlSting.spec.js +212 -0
  70. package/lib/formatted-text/formattedTextToHtmlSting.spec.js.map +1 -0
  71. package/lib/index.d.ts +7 -0
  72. package/lib/index.js +7 -0
  73. package/lib/index.js.map +1 -1
  74. package/lib/server-utils/apiKeyMiddleware.d.ts +3 -0
  75. package/lib/server-utils/apiKeyMiddleware.js +20 -0
  76. package/lib/server-utils/apiKeyMiddleware.js.map +1 -0
  77. package/lib/server-utils/apiKeyMiddleware.spec.d.ts +1 -0
  78. package/lib/server-utils/apiKeyMiddleware.spec.js +39 -0
  79. package/lib/server-utils/apiKeyMiddleware.spec.js.map +1 -0
  80. package/lib/util/getPageInfo.d.ts +2 -2
  81. package/package.json +10 -8
  82. package/src/api-key-validation/ApiKeyValidationService.ts +4 -0
  83. package/src/api-key-validation/CloudflareApiKeyService.spec.ts +122 -0
  84. package/src/api-key-validation/CloudflareApiKeyService.ts +96 -0
  85. package/src/api-key-validation/DevelopmentApiKeyService.spec.ts +17 -0
  86. package/src/api-key-validation/DevelopmentApiKeyService.ts +10 -0
  87. package/src/api-key-validation/getApiKeyService.spec.ts +32 -0
  88. package/src/api-key-validation/getApiKeyService.ts +27 -0
  89. package/src/assertions/assertAssignWithDefaultUndefinedValue.ts +0 -5
  90. package/src/cache/applyDefaultRulesToCacheControlObject.spec.ts +126 -0
  91. package/src/cache/applyDefaultRulesToCacheControlObject.ts +23 -0
  92. package/src/cache/cacheControlToString.spec.ts +43 -0
  93. package/src/cache/cacheControlToString.ts +22 -0
  94. package/src/cache/index.ts +4 -0
  95. package/src/cache/parseAndSanitiseCacheControlHeader.spec.ts +25 -0
  96. package/src/cache/parseAndSanitiseCacheControlHeader.ts +28 -0
  97. package/src/cache/parseCacheControl.spec.ts +89 -0
  98. package/src/cache/parseCacheControl.ts +74 -0
  99. package/src/error/InvalidTokenError.ts +8 -0
  100. package/src/error/UnAuthenticatedRequestError.ts +7 -0
  101. package/src/error/UnprivilegedError.ts +8 -0
  102. package/src/error/index.ts +4 -0
  103. package/src/formatted-text/formattedTextToHtmlSting.spec.ts +235 -0
  104. package/src/formatted-text/formattedTextToHtmlSting.ts +100 -0
  105. package/src/index.ts +7 -0
  106. package/src/server-utils/apiKeyMiddleware.spec.ts +50 -0
  107. package/src/server-utils/apiKeyMiddleware.ts +23 -0
  108. package/tsconfig.json +1 -1
  109. 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.11](https://gitlab.squiz.net/developer-experience/cmp/compare/v1.2.2...v1.2.11) (2022-11-11)
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,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"}
@@ -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.isSomeEnum = exports.assertAssignWithDefaultUndefinedValue = void 0;
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;AAEM,MAAM,UAAU,GACrB,CAAQ,QAAe,EAAE,EAAE,CAC3B,CAAC,KAAc,EAA+B,EAAE,CAC9C,MAAM,CAAC,MAAM,CAAC,QAAQ,CAAC,CAAC,QAAQ,CAAC,KAA2B,CAAC,CAAC;AAHrD,QAAA,UAAU,cAG2C"}
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"}