@digitraffic/common 2022.10.31-3 → 2022.11.1-1

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (168) hide show
  1. package/dist/aws/infra/api/integration.d.ts +21 -0
  2. package/dist/aws/infra/api/integration.js.map +1 -0
  3. package/dist/aws/infra/api/response.d.ts +22 -0
  4. package/dist/aws/infra/api/response.js.map +1 -0
  5. package/dist/aws/infra/api/responses.d.ts +39 -0
  6. package/dist/aws/infra/api/responses.js.map +1 -0
  7. package/dist/aws/infra/api/static-integration.d.ts +15 -0
  8. package/dist/aws/infra/api/static-integration.js.map +1 -0
  9. package/dist/aws/infra/canaries/canary-alarm.d.ts +6 -0
  10. package/dist/aws/infra/canaries/canary-alarm.js.map +1 -0
  11. package/dist/aws/infra/canaries/canary-keys.d.ts +3 -0
  12. package/dist/aws/infra/canaries/canary-keys.js.map +1 -0
  13. package/dist/aws/infra/canaries/canary-parameters.d.ts +18 -0
  14. package/dist/aws/infra/canaries/canary-parameters.js.map +1 -0
  15. package/dist/aws/infra/canaries/canary-role.d.ts +6 -0
  16. package/dist/aws/infra/canaries/canary-role.js.map +1 -0
  17. package/dist/aws/infra/canaries/canary.d.ts +8 -0
  18. package/dist/aws/infra/canaries/canary.js.map +1 -0
  19. package/dist/aws/infra/canaries/database-canary.d.ts +18 -0
  20. package/dist/aws/infra/canaries/database-canary.js.map +1 -0
  21. package/dist/aws/infra/canaries/database-checker.d.ts +21 -0
  22. package/dist/aws/infra/canaries/database-checker.js.map +1 -0
  23. package/dist/aws/infra/canaries/url-canary.d.ts +16 -0
  24. package/dist/aws/infra/canaries/url-canary.js.map +1 -0
  25. package/dist/aws/infra/canaries/url-checker.d.ts +46 -0
  26. package/dist/aws/infra/canaries/url-checker.js.map +1 -0
  27. package/dist/aws/infra/documentation.d.ts +56 -0
  28. package/dist/aws/infra/documentation.js.map +1 -0
  29. package/dist/aws/infra/scheduler.d.ts +12 -0
  30. package/dist/aws/infra/scheduler.js.map +1 -0
  31. package/dist/aws/infra/security-rule.d.ts +12 -0
  32. package/dist/aws/infra/security-rule.js.map +1 -0
  33. package/dist/aws/infra/sqs-integration.d.ts +7 -0
  34. package/dist/aws/infra/sqs-integration.js.map +1 -0
  35. package/dist/aws/infra/sqs-queue.d.ts +16 -0
  36. package/dist/aws/infra/sqs-queue.js.map +1 -0
  37. package/dist/aws/infra/stack/lambda-configs.d.ts +72 -0
  38. package/dist/aws/infra/stack/lambda-configs.js.map +1 -0
  39. package/dist/aws/infra/stack/monitoredfunction.d.ts +84 -0
  40. package/dist/aws/infra/stack/monitoredfunction.js.map +1 -0
  41. package/dist/aws/infra/stack/rest_apis.d.ts +41 -0
  42. package/dist/aws/infra/stack/rest_apis.js +27 -31
  43. package/dist/aws/infra/stack/rest_apis.js.map +1 -0
  44. package/dist/aws/infra/stack/stack-checking-aspect.d.ts +21 -0
  45. package/dist/aws/infra/stack/stack-checking-aspect.js +3 -2
  46. package/dist/aws/infra/stack/stack-checking-aspect.js.map +1 -0
  47. package/dist/aws/infra/stack/stack.d.ts +45 -0
  48. package/dist/aws/infra/stack/stack.js.map +1 -0
  49. package/dist/aws/infra/stack/subscription.d.ts +17 -0
  50. package/dist/aws/infra/stack/subscription.js.map +1 -0
  51. package/dist/aws/infra/usage-plans.d.ts +15 -0
  52. package/dist/aws/infra/usage-plans.js.map +1 -0
  53. package/dist/aws/runtime/apikey.d.ts +2 -0
  54. package/dist/aws/runtime/apikey.js.map +1 -0
  55. package/dist/aws/runtime/digitraffic-integration-response.d.ts +8 -0
  56. package/dist/aws/runtime/digitraffic-integration-response.js.map +1 -0
  57. package/dist/aws/runtime/environment.d.ts +1 -0
  58. package/dist/aws/runtime/environment.js +4 -1
  59. package/dist/aws/runtime/environment.js.map +1 -0
  60. package/dist/aws/runtime/messaging.d.ts +10 -0
  61. package/dist/aws/runtime/messaging.js.map +1 -0
  62. package/dist/aws/runtime/s3.d.ts +2 -0
  63. package/dist/aws/runtime/s3.js.map +1 -0
  64. package/dist/aws/runtime/secrets/dbsecret.d.ts +54 -0
  65. package/dist/aws/runtime/secrets/dbsecret.js.map +1 -0
  66. package/dist/aws/runtime/secrets/proxy-holder.d.ts +9 -0
  67. package/dist/aws/runtime/secrets/proxy-holder.js.map +1 -0
  68. package/dist/aws/runtime/secrets/rds-holder.d.ts +9 -0
  69. package/dist/aws/runtime/secrets/rds-holder.js.map +1 -0
  70. package/dist/aws/runtime/secrets/secret-holder.d.ts +26 -0
  71. package/dist/aws/runtime/secrets/secret-holder.js.map +1 -0
  72. package/dist/aws/runtime/secrets/secret.d.ts +8 -0
  73. package/dist/aws/runtime/secrets/secret.js.map +1 -0
  74. package/dist/aws/types/errors.d.ts +8 -0
  75. package/dist/aws/types/errors.js.map +1 -0
  76. package/dist/aws/types/lambda-response.d.ts +13 -0
  77. package/dist/aws/types/lambda-response.js.map +1 -0
  78. package/dist/aws/types/mediatypes.d.ts +11 -0
  79. package/dist/aws/types/mediatypes.js +2 -1
  80. package/dist/aws/types/mediatypes.js.map +1 -0
  81. package/dist/aws/types/model-with-reference.d.ts +7 -0
  82. package/dist/aws/types/model-with-reference.js.map +1 -0
  83. package/dist/aws/types/proxytypes.d.ts +26 -0
  84. package/dist/aws/types/proxytypes.js.map +1 -0
  85. package/dist/aws/types/tags.d.ts +2 -0
  86. package/dist/aws/types/tags.js.map +1 -0
  87. package/dist/database/cached.d.ts +7 -0
  88. package/dist/database/cached.js.map +1 -0
  89. package/dist/database/database.d.ts +19 -0
  90. package/dist/database/database.js +6 -8
  91. package/dist/database/database.js.map +1 -0
  92. package/dist/database/last-updated.d.ts +16 -0
  93. package/dist/database/last-updated.js.map +1 -0
  94. package/dist/database/models.d.ts +6 -0
  95. package/dist/database/models.js.map +1 -0
  96. package/dist/marine/id_utils.d.ts +3 -0
  97. package/dist/marine/id_utils.js.map +1 -0
  98. package/dist/marine/rtz.d.ts +48 -0
  99. package/dist/marine/rtz.js.map +1 -0
  100. package/dist/test/asserter.d.ts +11 -0
  101. package/dist/test/asserter.js.map +1 -0
  102. package/dist/test/db-testutils.d.ts +3 -0
  103. package/dist/test/db-testutils.js +5 -1
  104. package/dist/test/db-testutils.js.map +1 -0
  105. package/dist/test/httpserver.d.ts +19 -0
  106. package/dist/test/httpserver.js.map +1 -0
  107. package/dist/test/secret.d.ts +3 -0
  108. package/dist/test/secret.js.map +1 -0
  109. package/dist/test/secrets-manager.d.ts +9 -0
  110. package/dist/test/secrets-manager.js.map +1 -0
  111. package/dist/test/testutils.d.ts +12 -0
  112. package/dist/test/testutils.js.map +1 -0
  113. package/dist/types/either.d.ts +9 -0
  114. package/dist/types/either.js.map +1 -0
  115. package/dist/types/input-error.d.ts +2 -0
  116. package/dist/types/input-error.js.map +1 -0
  117. package/dist/types/language.d.ts +5 -0
  118. package/dist/types/language.js.map +1 -0
  119. package/dist/types/traffictype.d.ts +8 -0
  120. package/dist/types/traffictype.js.map +1 -0
  121. package/dist/types/validator.d.ts +4 -0
  122. package/dist/types/validator.js.map +1 -0
  123. package/dist/utils/api-model.d.ts +87 -0
  124. package/dist/utils/api-model.js.map +1 -0
  125. package/dist/utils/base64.d.ts +12 -0
  126. package/dist/utils/base64.js.map +1 -0
  127. package/dist/utils/date-utils.d.ts +17 -0
  128. package/dist/utils/date-utils.js.map +1 -0
  129. package/dist/utils/geojson-types.d.ts +14 -0
  130. package/dist/utils/geojson-types.js.map +1 -0
  131. package/dist/utils/geometry.d.ts +36 -0
  132. package/dist/utils/geometry.js.map +1 -0
  133. package/dist/utils/retry.d.ts +13 -0
  134. package/dist/utils/retry.js.map +1 -0
  135. package/dist/utils/slack.d.ts +5 -0
  136. package/dist/utils/slack.js.map +1 -0
  137. package/dist/utils/utils.d.ts +46 -0
  138. package/dist/utils/utils.js.map +1 -0
  139. package/package.json +1 -1
  140. package/src/aws/infra/stack/rest_apis.ts +144 -91
  141. package/src/aws/infra/stack/stack-checking-aspect.ts +5 -2
  142. package/src/aws/runtime/environment.ts +5 -1
  143. package/src/aws/types/mediatypes.ts +2 -1
  144. package/src/database/database.ts +9 -10
  145. package/src/test/db-testutils.ts +5 -0
  146. package/.editorconfig +0 -9
  147. package/.eslintignore +0 -4
  148. package/.eslintrc.json +0 -27
  149. package/.github/CODEOWNERS +0 -2
  150. package/.github/workflows/build.yml +0 -36
  151. package/.github/workflows/eslint.yml +0 -38
  152. package/.github/workflows/mirror.yml +0 -15
  153. package/.gitignore +0 -29
  154. package/.husky/pre-commit +0 -4
  155. package/.prettierrc.json +0 -10
  156. package/jest.config.js +0 -15
  157. package/test/marine/id_utils.test.ts +0 -57
  158. package/test/promise/promise.test.ts +0 -143
  159. package/test/secrets/dbsecret.test.ts +0 -59
  160. package/test/secrets/secret-holder.test.ts +0 -143
  161. package/test/secrets/secret.test.ts +0 -49
  162. package/test/test/httpserver.test.ts +0 -128
  163. package/test/utils/date-utils.test.ts +0 -28
  164. package/test/utils/geometry.test.ts +0 -29
  165. package/test/utils/utils.test.ts +0 -64
  166. package/tsconfig.eslint.json +0 -4
  167. package/tsconfig.json +0 -22
  168. package/yarn.lock +0 -4060
@@ -0,0 +1,12 @@
1
+ /// <reference types="node" />
2
+ /**
3
+ * Decode given string from base64 to ascii
4
+ * @param str string
5
+ */
6
+ export declare function decodeBase64ToAscii(str: string): string;
7
+ /**
8
+ * Decode given string from base64 to given encoding
9
+ * @param str
10
+ * @param encoding
11
+ */
12
+ export declare function decodeBase64(str: string, encoding: BufferEncoding): string;
@@ -0,0 +1 @@
1
+ {"version":3,"file":"base64.js","sourceRoot":"","sources":["../../src/utils/base64.ts"],"names":[],"mappings":";;;AAAA;;;GAGG;AACH,SAAgB,mBAAmB,CAAC,GAAW;IAC3C,OAAO,YAAY,CAAC,GAAG,EAAE,OAAO,CAAC,CAAC;AACtC,CAAC;AAFD,kDAEC;AAED;;;;GAIG;AACH,SAAgB,YAAY,CAAC,GAAW,EAAE,QAAwB;IAC9D,OAAO,MAAM,CAAC,IAAI,CAAC,GAAG,EAAE,QAAQ,CAAC,CAAC,QAAQ,CAAC,QAAQ,CAAC,CAAC;AACzD,CAAC;AAFD,oCAEC"}
@@ -0,0 +1,17 @@
1
+ /**
2
+ * Counts difference in milliseconds between dates.
3
+ * @param start
4
+ * @param end
5
+ */
6
+ export declare function countDiffMs(start: Date, end: Date): number;
7
+ /**
8
+ * Counts difference in seconds between dates.
9
+ * @param start
10
+ * @param end
11
+ */
12
+ export declare function countDiffInSeconds(start: Date, end: Date): number;
13
+ /**
14
+ * Converts ISO 8601 date-time -string to Date object
15
+ * @param isoString to convert
16
+ */
17
+ export declare function dateFromIsoString(isoString: string): Date;
@@ -0,0 +1 @@
1
+ {"version":3,"file":"date-utils.js","sourceRoot":"","sources":["../../src/utils/date-utils.ts"],"names":[],"mappings":";;;AACA;;;;GAIG;AACH,SAAgB,WAAW,CAAC,KAAW,EAAE,GAAS;IAC9C,OAAO,GAAG,CAAC,OAAO,EAAE,GAAG,KAAK,CAAC,OAAO,EAAE,CAAC;AAC3C,CAAC;AAFD,kCAEC;AAED;;;;GAIG;AACH,SAAgB,kBAAkB,CAAC,KAAW,EAAE,GAAS;IACrD,OAAO,WAAW,CAAC,KAAK,EAAE,GAAG,CAAC,GAAC,IAAI,CAAC;AACxC,CAAC;AAFD,gDAEC;AAED;;;GAGG;AACH,SAAgB,iBAAiB,CAAC,SAAiB;IAC/C,MAAM,MAAM,GAAG,IAAI,IAAI,CAAC,SAAS,CAAC,CAAC;IACnC,IAAI,CAAC,CAAC,MAAM,YAAY,IAAI,CAAC,IAAI,KAAK,CAAC,MAAM,CAAC,OAAO,EAAE,CAAC,EAAE;QACtD,MAAM,IAAI,KAAK,CAAC,6BAA6B,SAAS,EAAE,CAAC,CAAC;KAC7D;IACD,OAAO,MAAM,CAAC;AAClB,CAAC;AAND,8CAMC"}
@@ -0,0 +1,14 @@
1
+ /**
2
+ * GeoJSON types
3
+ */
4
+ import { LineString, Point, Position } from "geojson";
5
+ export declare class GeoJsonPoint implements Point {
6
+ readonly type = "Point";
7
+ readonly coordinates: Position;
8
+ constructor(coordinates: Position);
9
+ }
10
+ export declare class GeoJsonLineString implements LineString {
11
+ readonly type = "LineString";
12
+ readonly coordinates: Position[];
13
+ constructor(coordinates: Position[]);
14
+ }
@@ -0,0 +1 @@
1
+ {"version":3,"file":"geojson-types.js","sourceRoot":"","sources":["../../src/utils/geojson-types.ts"],"names":[],"mappings":";;;AAKA,MAAa,YAAY;IAIrB,YAAY,WAAqB;QAHxB,SAAI,GAAG,OAAO,CAAC;QAIpB,IAAI,CAAC,WAAW,GAAG,WAAW,CAAC;IACnC,CAAC;CACJ;AAPD,oCAOC;AAED,MAAa,iBAAiB;IAI1B,YAAY,WAAuB;QAH1B,SAAI,GAAG,YAAY,CAAC;QAIzB,IAAI,CAAC,WAAW,GAAG,WAAW,CAAC;IACnC,CAAC;CACJ;AAPD,8CAOC"}
@@ -0,0 +1,36 @@
1
+ /**
2
+ * GeoJSON functions and tools
3
+ */
4
+ import { Feature, FeatureCollection, Geometry, Position } from "geojson";
5
+ export declare const SRID_WGS84 = 4326;
6
+ /**
7
+ * Creates WKT geometry from GeoJSON geometry
8
+ * @param geometry GeoJson geometry to convert to WKT
9
+ */
10
+ export declare function createGeometry(geometry: Geometry): string;
11
+ /**
12
+ * Create a GeoJSON FeatureCollection from a list of GeoJSON features with a 'last updated' property
13
+ * @param features List of Features
14
+ * @param lastUpdated Last updated date
15
+ */
16
+ export declare function createFeatureCollection(features: Feature[], lastUpdated: Date | null): FeatureCollection;
17
+ export declare function isValidGeoJson<T>(json: T): boolean;
18
+ export declare function isFeatureCollection<T>(json: T): boolean;
19
+ /**
20
+ * Calculates distance between two GeoJSON points (WGS84)
21
+ * @param pos1
22
+ * @param pos2
23
+ */
24
+ export declare function distanceBetweenPositionsInKm(pos1: Position, pos2: Position): number;
25
+ export declare function areDistinctPositions(previous: Position, next: Position): boolean;
26
+ /**
27
+ * Calculates distance between two GeoJSON points (WGS84)
28
+ * @param pos1
29
+ * @param pos2
30
+ */
31
+ export declare function distanceBetweenPositionsInM(pos1: Position, pos2: Position): number;
32
+ export declare function createGmlLineString(geometry: Geometry, srsName?: string): {
33
+ srsName: string;
34
+ posList: string;
35
+ };
36
+ export declare function positionToList(position: Position, precision?: number): string;
@@ -0,0 +1 @@
1
+ {"version":3,"file":"geometry.js","sourceRoot":"","sources":["../../src/utils/geometry.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,13 @@
1
+ export declare enum RetryLogError {
2
+ LOG_ALL_AS_ERRORS = 0,
3
+ LOG_LAST_RETRY_AS_ERROR_OTHERS_AS_WARNS = 1,
4
+ NO_LOGGING = 2
5
+ }
6
+ /**
7
+ * Utility function for retrying async functions.
8
+ * @param asyncFn Function
9
+ * @param retries Amount of retries, default is 3. If set to <= 0, no retries will be done. Using non-finite numbers will throw an error. The maximum allowed retry count is 100.
10
+ * @param logError Logging options
11
+ * @return Promise return value
12
+ */
13
+ export declare function retry<T>(asyncFn: () => Promise<T>, retries?: number, logError?: RetryLogError): Promise<T>;
@@ -0,0 +1 @@
1
+ {"version":3,"file":"retry.js","sourceRoot":"","sources":["../../src/utils/retry.ts"],"names":[],"mappings":";;;AAAA,IAAY,aAIX;AAJD,WAAY,aAAa;IACrB,2EAAiB,CAAA;IACjB,uHAAuC,CAAA;IACvC,6DAAU,CAAA;AACd,CAAC,EAJW,aAAa,GAAb,qBAAa,KAAb,qBAAa,QAIxB;AAED;;;;;;GAMG;AACI,KAAK,UAAU,KAAK,CAAI,OAAyB,EACpD,OAAO,GAAG,CAAC,EACX,QAAQ,GAAG,aAAa,CAAC,uCAAuC;IAEhE,IAAI,CAAC,QAAQ,CAAC,OAAO,CAAC,EAAE;QACpB,MAAM,IAAI,KAAK,CAAC,mCAAmC,CAAC,CAAC;KACxD;IACD,IAAI,OAAO,GAAG,GAAG,EAAE;QACf,MAAM,IAAI,KAAK,CAAC,yCAAyC,CAAC,CAAC;KAC9D;IACD,IAAI;QACA,OAAO,MAAM,OAAO,EAAE,CAAC;KAC1B;IAAC,OAAO,KAAK,EAAE;QACZ,MAAM,gBAAgB,GAAG,OAAO,GAAG,CAAC,CAAC;QAErC,MAAM,YAAY,GAAG,oBAAoB,CAAC;QAC1C,IAAI,QAAQ,KAAK,aAAa,CAAC,iBAAiB,EAAE;YAC9C,OAAO,CAAC,KAAK,CAAC,YAAY,EAAE,KAAK,CAAC,CAAC;SACtC;aAAM,IAAI,QAAQ,KAAK,aAAa,CAAC,uCAAuC,EAAE;YAC3E,IAAI,gBAAgB,GAAG,CAAC,EAAE;gBACtB,OAAO,CAAC,KAAK,CAAC,YAAY,EAAE,KAAK,CAAC,CAAC;aACtC;iBAAM;gBACH,OAAO,CAAC,IAAI,CAAC,YAAY,EAAE,KAAK,CAAC,CAAC;aACrC;SACJ;QAED,IAAI,gBAAgB,GAAG,CAAC,EAAE;YACtB,OAAO,CAAC,IAAI,CAAC,8BAA8B,CAAC,CAAC;YAC7C,MAAM,IAAI,KAAK,CAAC,iBAAiB,CAAC,CAAC;SACtC;QACD,OAAO,CAAC,IAAI,CAAC,oEAAoE,EAAE,gBAAgB,CAAC,CAAC;QACrG,OAAO,KAAK,CAAC,OAAO,EAChB,gBAAgB,EAChB,QAAQ,CAAC,CAAC;KACjB;AACL,CAAC;AAnCD,sBAmCC"}
@@ -0,0 +1,5 @@
1
+ export declare class SlackApi {
2
+ private readonly url;
3
+ constructor(url: string);
4
+ notify(text: string): Promise<void>;
5
+ }
@@ -0,0 +1 @@
1
+ {"version":3,"file":"slack.js","sourceRoot":"","sources":["../../src/utils/slack.ts"],"names":[],"mappings":";;;;;;AAAA,kDAA0B;AAE1B,MAAa,QAAQ;IAIjB,YAAY,GAAW;QACnB,IAAI,CAAC,GAAG,GAAG,GAAG,CAAC;IACnB,CAAC;IAED,KAAK,CAAC,MAAM,CAAC,IAAY;QACrB,IAAI;YACA,OAAO,CAAC,IAAI,CAAC,+BAA+B,CAAC,CAAC;YAC9C,MAAM,eAAK,CAAC,IAAI,CAAC,IAAI,CAAC,GAAG,EAAE;gBACvB,IAAI;aACP,CAAC,CAAC;SACN;QAAC,OAAO,KAAK,EAAE;YACZ,OAAO,CAAC,KAAK,CAAC,oCAAoC,CAAC,CAAC;SACvD;IACL,CAAC;CAEJ;AAnBD,4BAmBC"}
@@ -0,0 +1,46 @@
1
+ /**
2
+ * Check if arrays have only elements that also exists also in other array.
3
+ * Individual element count doesn't matter.
4
+ * Function works only for primitive types and for other it just checks the reference to object.
5
+ *
6
+ * Some examples
7
+ * bothArraysHasSameValues( [a, b], [b, a] ) => true
8
+ * bothArraysHasSameValues( [a, a], [a, a, a] ) => true
9
+ * bothArraysHasSameValues( [a, b], [a] ) => false
10
+ *
11
+ * Object references:
12
+ * const o1 = { a: 1, b: 2};
13
+ * const o2 = { a: 1, b: 2};
14
+ * // Arrays has references to same objects
15
+ * bothArraysHasSameValues([o1], [o1])) => true
16
+ * Arrays have references to different objects
17
+ * bothArraysHasSameValues([o1], [o2])) => false
18
+ *
19
+ * @param a first array to compare
20
+ * @param b second array to compare
21
+ */
22
+ import { Either } from "../types/either";
23
+ export declare function bothArraysHasSameValues(a: null | undefined | unknown[], b: null | undefined | unknown[]): boolean;
24
+ /**
25
+ * Returns the last item on the array. If the array is empty, throws an error!
26
+ */
27
+ export declare function getLast<T>(array: T[], sortFunction?: (a: T) => number): T;
28
+ /**
29
+ * Returns the first item on the array. If the array is empty, throws an error!
30
+ */
31
+ export declare function getFirst<T>(array: T[], sortFunction?: (a: T) => number): T;
32
+ /**
33
+ * Gets environment variable. Throws error if variable is not found.
34
+ *
35
+ * @param key Environment key
36
+ * @return string
37
+ */
38
+ export declare function getEnvVariable(key: string): string;
39
+ /**
40
+ * Gets environment variable. Safe version returns object with either ok or error status.
41
+ * Easier to use for recovery than catching an error.
42
+ *
43
+ * @param key Environment key
44
+ * @return Either<string>
45
+ */
46
+ export declare function getEnvVariableSafe(key: string): Either<string>;
@@ -0,0 +1 @@
1
+ {"version":3,"file":"utils.js","sourceRoot":"","sources":["../../src/utils/utils.ts"],"names":[],"mappings":";;;AAuBA,SAAgB,uBAAuB,CACnC,CAA+B,EAC/B,CAA+B;IAE/B,IAAI,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC,EAAE;QACxB,OAAO,KAAK,CAAC;KAChB;SAAM,IAAI,CAAC,CAAC,IAAI,CAAC,CAAC,EAAE;QACjB,OAAO,IAAI,CAAC;KACf;IACD,MAAM,IAAI,GAAG,IAAI,GAAG,CAAC,CAAC,CAAC,CAAC;IACxB,MAAM,IAAI,GAAG,IAAI,GAAG,CAAC,CAAC,CAAC,CAAC;IACxB,IAAI,IAAI,CAAC,IAAI,KAAK,IAAI,CAAC,IAAI,EAAE;QACzB,OAAO,KAAK,CAAC;KAChB;IACD,OAAO,KAAK,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC,KAAK,CAAC,CAAC,KAAK,EAAE,EAAE,CAAC,IAAI,CAAC,GAAG,CAAC,KAAK,CAAC,CAAC,CAAC;AAC9D,CAAC;AAfD,0DAeC;AAED;;GAEG;AACH,SAAgB,OAAO,CAAI,KAAU,EAAE,YAA+B;IAClE,OAAO,cAAc,CAAC,KAAK,EAAE,KAAK,EAAE,YAAY,CAAC,CAAC;AACtD,CAAC;AAFD,0BAEC;AAED;;GAEG;AACH,SAAgB,QAAQ,CAAI,KAAU,EAAE,YAA+B;IACnE,OAAO,cAAc,CAAC,IAAI,EAAE,KAAK,EAAE,YAAY,CAAC,CAAC;AACrD,CAAC;AAFD,4BAEC;AAED,SAAS,cAAc,CACnB,QAAiB,EACjB,KAAU,EACV,YAA+B;IAE/B,IAAI,KAAK,CAAC,MAAM,IAAI,CAAC,EAAE;QACnB,MAAM,IAAI,KAAK,CACX,aAAa,QAAQ,CAAC,CAAC,CAAC,OAAO,CAAC,CAAC,CAAC,MAAM,oBAAoB,CAC/D,CAAC;KACL;IAED,MAAM,KAAK,GAAG,QAAQ,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,KAAK,CAAC,MAAM,GAAG,CAAC,CAAC;IAE9C,IAAI,YAAY,EAAE;QACd,OAAO,KAAK,CAAC,IAAI,CAAC,YAAY,CAAC,CAAC,KAAK,CAAC,CAAC;KAC1C;IAED,OAAO,KAAK,CAAC,KAAK,CAAC,CAAC;AACxB,CAAC;AAED;;;;;GAKG;AACH,SAAgB,cAAc,CAAC,GAAW;IACtC,MAAM,MAAM,GAAG,kBAAkB,CAAC,GAAG,CAAC,CAAC;IACvC,IAAI,MAAM,CAAC,MAAM,KAAK,OAAO,EAAE;QAC3B,MAAM,IAAI,KAAK,CAAC,MAAM,CAAC,OAAO,CAAC,CAAC;KACnC;IACD,OAAO,MAAM,CAAC,KAAK,CAAC;AACxB,CAAC;AAND,wCAMC;AAED;;;;;;GAMG;AACH,SAAgB,kBAAkB,CAAC,GAAW;IAC1C,MAAM,KAAK,GAAG,OAAO,CAAC,GAAG,CAAC,GAAG,CAAC,CAAC;IAC/B,IAAI,KAAK,KAAK,SAAS,EAAE;QACrB,OAAO;YACH,MAAM,EAAE,OAAO;YACf,OAAO,EAAE,gCAAgC,GAAG,iBAAiB;SAChE,CAAC;KACL;IACD,OAAO,EAAE,MAAM,EAAE,IAAI,EAAE,KAAK,EAAE,CAAC;AACnC,CAAC;AATD,gDASC"}
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@digitraffic/common",
3
- "version": "2022.10.31-3",
3
+ "version": "2022.11.1-1",
4
4
  "description": "",
5
5
  "repository": {
6
6
  "type": "git",
@@ -4,48 +4,70 @@ import {
4
4
  GatewayResponse,
5
5
  ResponseType,
6
6
  EndpointType,
7
- RestApiProps, JsonSchema, Model, CfnDocumentationPart, Resource,
8
- } from 'aws-cdk-lib/aws-apigateway';
9
- import {PolicyDocument, PolicyStatement, Effect, AnyPrincipal} from 'aws-cdk-lib/aws-iam';
10
- import {Construct} from "constructs";
11
- import {DigitrafficStack} from "./stack";
12
- import {createDefaultUsagePlan, createUsagePlan} from "../usage-plans";
13
- import {ModelWithReference} from "../../types/model-with-reference";
14
- import {getModelReference} from "../../../utils/api-model";
15
- import {MediaType} from "../../types/mediatypes";
16
- import {DocumentationPart, DocumentationProperties} from "../documentation";
17
-
18
- import R = require('ramda');
7
+ RestApiProps,
8
+ JsonSchema,
9
+ Model,
10
+ CfnDocumentationPart,
11
+ Resource,
12
+ } from "aws-cdk-lib/aws-apigateway";
13
+ import {
14
+ PolicyDocument,
15
+ PolicyStatement,
16
+ Effect,
17
+ AnyPrincipal,
18
+ } from "aws-cdk-lib/aws-iam";
19
+ import { Construct } from "constructs";
20
+ import { DigitrafficStack } from "./stack";
21
+ import { createDefaultUsagePlan, createUsagePlan } from "../usage-plans";
22
+ import { ModelWithReference } from "../../types/model-with-reference";
23
+ import { getModelReference } from "../../../utils/api-model";
24
+ import { MediaType } from "../../types/mediatypes";
25
+ import { DocumentationPart, DocumentationProperties } from "../documentation";
26
+
27
+ import R = require("ramda");
19
28
 
20
29
  export class DigitrafficRestApi extends RestApi {
21
30
  readonly apiKeyIds: string[];
22
31
  readonly enableDocumentation: boolean;
23
32
 
24
33
  constructor(
25
- stack: DigitrafficStack, apiId: string, apiName: string, allowFromIpAddresses?: string[] | undefined, config?: Partial<RestApiProps>,
34
+ stack: DigitrafficStack,
35
+ apiId: string,
36
+ apiName: string,
37
+ allowFromIpAddresses?: string[] | undefined,
38
+ config?: Partial<RestApiProps>
26
39
  ) {
27
- const policyDocument = allowFromIpAddresses == null ? createDefaultPolicyDocument() : createIpRestrictionPolicyDocument(allowFromIpAddresses);
40
+ const policyDocument =
41
+ allowFromIpAddresses == null
42
+ ? createDefaultPolicyDocument()
43
+ : createIpRestrictionPolicyDocument(allowFromIpAddresses);
28
44
 
29
45
  // override default config with given extra config
30
- const apiConfig = {...{
31
- deployOptions: {
32
- loggingLevel: MethodLoggingLevel.ERROR,
46
+ const apiConfig = {
47
+ ...{
48
+ deployOptions: {
49
+ loggingLevel: MethodLoggingLevel.ERROR,
50
+ },
51
+ restApiName: apiName,
52
+ endpointTypes: [EndpointType.REGIONAL],
53
+ policy: policyDocument,
33
54
  },
34
- restApiName: apiName,
35
- endpointTypes: [EndpointType.REGIONAL],
36
- policy: policyDocument,
37
- }, ...config};
55
+ ...config,
56
+ };
38
57
 
39
58
  super(stack, apiId, apiConfig);
40
59
 
41
60
  this.apiKeyIds = [];
42
- this.enableDocumentation = stack.configuration.stackFeatures?.enableDocumentation ?? true;
61
+ this.enableDocumentation =
62
+ stack.configuration.stackFeatures?.enableDocumentation ?? true;
43
63
 
44
64
  add404Support(this, stack);
45
65
  }
46
66
 
47
67
  hostname(): string {
48
- return `${this.restApiId}.execute-api.${(this.stack as DigitrafficStack).region}.amazonaws.com`;
68
+ return `${this.restApiId}.execute-api.${
69
+ (this.stack as DigitrafficStack).region
70
+ }.amazonaws.com`;
49
71
  }
50
72
 
51
73
  createUsagePlan(apiKeyId: string, apiKeyName: string): string {
@@ -65,32 +87,44 @@ export class DigitrafficRestApi extends RestApi {
65
87
  }
66
88
 
67
89
  addJsonModel(modelName: string, schema: JsonSchema) {
68
- return this.getModelWithReference(this.addModel(modelName, {
69
- contentType: MediaType.APPLICATION_JSON,
70
- modelName,
71
- schema,
72
- }));
90
+ return this.getModelWithReference(
91
+ this.addModel(modelName, {
92
+ contentType: MediaType.APPLICATION_JSON,
93
+ modelName,
94
+ schema,
95
+ })
96
+ );
73
97
  }
74
98
 
75
99
  addCSVModel(modelName: string) {
76
- return this.getModelWithReference(this.addModel(modelName, {
77
- contentType: MediaType.TEXT_CSV,
78
- modelName,
79
- schema: {},
80
- }));
100
+ return this.getModelWithReference(
101
+ this.addModel(modelName, {
102
+ contentType: MediaType.TEXT_CSV,
103
+ modelName,
104
+ schema: {},
105
+ })
106
+ );
81
107
  }
82
108
 
83
109
  private getModelWithReference(model: Model): ModelWithReference {
84
- return R.assoc('modelReference', getModelReference(model.modelId, this.restApiId), model) as ModelWithReference;
110
+ return R.assoc(
111
+ "modelReference",
112
+ getModelReference(model.modelId, this.restApiId),
113
+ model
114
+ ) as ModelWithReference;
85
115
  }
86
116
 
87
117
  private addDocumentationPart(
88
- resource: Resource, parameterName: string, resourceName: string, type: string, properties: DocumentationProperties,
118
+ resource: Resource,
119
+ parameterName: string,
120
+ resourceName: string,
121
+ type: string,
122
+ properties: DocumentationProperties
89
123
  ) {
90
124
  const location: CfnDocumentationPart.LocationProperty = {
91
125
  type,
92
126
  path: resource.path,
93
- name: type !== 'METHOD' ? parameterName : undefined,
127
+ name: type !== "METHOD" ? parameterName : undefined,
94
128
  };
95
129
 
96
130
  new CfnDocumentationPart(this.stack, resourceName, {
@@ -100,11 +134,20 @@ export class DigitrafficRestApi extends RestApi {
100
134
  });
101
135
  }
102
136
 
103
- documentResource(resource: Resource, ...documentationPart: DocumentationPart[]) {
104
- if(this.enableDocumentation) {
105
- documentationPart.forEach(dp => this.addDocumentationPart(
106
- resource, dp.parameterName, `${resource.path}.${dp.parameterName}.Documentation`, dp.type, dp.documentationProperties,
107
- ));
137
+ documentResource(
138
+ resource: Resource,
139
+ ...documentationPart: DocumentationPart[]
140
+ ) {
141
+ if (this.enableDocumentation) {
142
+ documentationPart.forEach((dp) =>
143
+ this.addDocumentationPart(
144
+ resource,
145
+ dp.parameterName,
146
+ `${resource.path}.${dp.parameterName}.Documentation`,
147
+ dp.type,
148
+ dp.documentationProperties
149
+ )
150
+ );
108
151
  } else {
109
152
  console.info("Skipping documentation for %s", resource.path);
110
153
  }
@@ -119,25 +162,33 @@ export class DigitrafficRestApi extends RestApi {
119
162
  * @param stack Construct
120
163
  */
121
164
  export function add404Support(restApi: RestApi, stack: Construct) {
122
- new GatewayResponse(stack, `MissingAuthenticationTokenResponse-${restApi.restApiName}`, {
123
- restApi,
124
- type: ResponseType.MISSING_AUTHENTICATION_TOKEN,
125
- statusCode: '404',
126
- templates: {
127
- 'application/json': '{"message": "Not found"}',
128
- },
129
- });
165
+ new GatewayResponse(
166
+ stack,
167
+ `MissingAuthenticationTokenResponse-${restApi.restApiName}`,
168
+ {
169
+ restApi,
170
+ type: ResponseType.MISSING_AUTHENTICATION_TOKEN,
171
+ statusCode: "404",
172
+ templates: {
173
+ [MediaType.APPLICATION_JSON]: '{"message": "Not found"}',
174
+ },
175
+ }
176
+ );
130
177
  }
131
178
 
132
179
  export function add401Support(restApi: RestApi, stack: Construct) {
133
- new GatewayResponse(stack, `AuthenticationFailedResponse-${restApi.restApiName}`, {
134
- restApi,
135
- type: ResponseType.UNAUTHORIZED,
136
- statusCode: "401",
137
- responseHeaders: {
138
- 'WWW-Authenticate': "'Basic'",
139
- },
140
- });
180
+ new GatewayResponse(
181
+ stack,
182
+ `AuthenticationFailedResponse-${restApi.restApiName}`,
183
+ {
184
+ restApi,
185
+ type: ResponseType.UNAUTHORIZED,
186
+ statusCode: "401",
187
+ responseHeaders: {
188
+ "WWW-Authenticate": "'Basic'",
189
+ },
190
+ }
191
+ );
141
192
  }
142
193
 
143
194
  /**
@@ -149,23 +200,36 @@ export function add401Support(restApi: RestApi, stack: Construct) {
149
200
  * @param restApi RestApi
150
201
  * @param stack Construct
151
202
  */
152
- export function setReturnCodeForMissingAuthenticationToken(returnCode: number,
203
+ export function setReturnCodeForMissingAuthenticationToken(
204
+ returnCode: number,
153
205
  message: string,
154
206
  restApi: RestApi,
155
- stack: Construct) {
156
-
157
- new GatewayResponse(stack, `MissingAuthenticationTokenResponse-${restApi.restApiName}`, {
158
- restApi,
159
- type: ResponseType.MISSING_AUTHENTICATION_TOKEN,
160
- statusCode: `${returnCode}`,
161
- templates: {
162
- 'application/json': `{"message": ${message}}`,
163
- },
164
- });
207
+ stack: Construct
208
+ ) {
209
+ new GatewayResponse(
210
+ stack,
211
+ `MissingAuthenticationTokenResponse-${restApi.restApiName}`,
212
+ {
213
+ restApi,
214
+ type: ResponseType.MISSING_AUTHENTICATION_TOKEN,
215
+ statusCode: `${returnCode}`,
216
+ templates: {
217
+ [MediaType.APPLICATION_JSON]: `{"message": ${message}}`,
218
+ },
219
+ }
220
+ );
165
221
  }
166
222
 
167
- export function createRestApi(stack: Construct, apiId: string, apiName: string, allowFromIpAddresses?: string[] | undefined): RestApi {
168
- const policyDocument = allowFromIpAddresses == null ? createDefaultPolicyDocument() : createIpRestrictionPolicyDocument(allowFromIpAddresses);
223
+ export function createRestApi(
224
+ stack: Construct,
225
+ apiId: string,
226
+ apiName: string,
227
+ allowFromIpAddresses?: string[] | undefined
228
+ ): RestApi {
229
+ const policyDocument =
230
+ allowFromIpAddresses == null
231
+ ? createDefaultPolicyDocument()
232
+ : createIpRestrictionPolicyDocument(allowFromIpAddresses);
169
233
  const restApi = new RestApi(stack, apiId, {
170
234
  deployOptions: {
171
235
  loggingLevel: MethodLoggingLevel.ERROR,
@@ -183,40 +247,29 @@ export function createDefaultPolicyDocument() {
183
247
  statements: [
184
248
  new PolicyStatement({
185
249
  effect: Effect.ALLOW,
186
- actions: [
187
- "execute-api:Invoke",
188
- ],
189
- resources: [
190
- "*",
191
- ],
192
- principals: [
193
- new AnyPrincipal(),
194
- ],
250
+ actions: ["execute-api:Invoke"],
251
+ resources: ["*"],
252
+ principals: [new AnyPrincipal()],
195
253
  }),
196
254
  ],
197
255
  });
198
256
  }
199
257
 
200
-
201
- export function createIpRestrictionPolicyDocument(allowFromIpAddresses: string[]): PolicyDocument {
258
+ export function createIpRestrictionPolicyDocument(
259
+ allowFromIpAddresses: string[]
260
+ ): PolicyDocument {
202
261
  return new PolicyDocument({
203
262
  statements: [
204
263
  new PolicyStatement({
205
264
  effect: Effect.ALLOW,
206
265
  conditions: {
207
- "IpAddress": {
266
+ IpAddress: {
208
267
  "aws:SourceIp": allowFromIpAddresses,
209
268
  },
210
269
  },
211
- actions: [
212
- "execute-api:Invoke",
213
- ],
214
- resources: [
215
- "*",
216
- ],
217
- principals: [
218
- new AnyPrincipal(),
219
- ],
270
+ actions: ["execute-api:Invoke"],
271
+ resources: ["*"],
272
+ principals: [new AnyPrincipal()],
220
273
  }),
221
274
  ],
222
275
  });
@@ -10,7 +10,7 @@ import { LogRetention } from "aws-cdk-lib/aws-logs";
10
10
  import IntegrationProperty = CfnMethod.IntegrationProperty;
11
11
 
12
12
  const MAX_CONCURRENCY_LIMIT = 100;
13
- const NODE_RUNTIME = Runtime.NODEJS_14_X.name;
13
+ const NODE_RUNTIMES = [Runtime.NODEJS_14_X.name, Runtime.NODEJS_16_X.name];
14
14
 
15
15
  enum ResourceType {
16
16
  stackName = "STACK_NAME",
@@ -141,7 +141,10 @@ export class StackCheckingAspect implements IAspect {
141
141
  );
142
142
  }
143
143
 
144
- if (node.runtime !== NODE_RUNTIME) {
144
+ if (
145
+ node.runtime !== undefined &&
146
+ !NODE_RUNTIMES.includes(node.runtime)
147
+ ) {
145
148
  this.addAnnotation(
146
149
  node,
147
150
  ResourceType.functionRuntime,
@@ -1,7 +1,11 @@
1
- export function envValue(key: string): string {
1
+ export function envValue(key: string, defaultValue?: string): string {
2
2
  const value = process.env[key];
3
3
 
4
4
  if (value == null) {
5
+ if (defaultValue) {
6
+ return defaultValue;
7
+ }
8
+
5
9
  throw new Error(`Missing environment value ${key}`);
6
10
  }
7
11
 
@@ -1,6 +1,6 @@
1
1
  // charset=UTF-8 is deprecated but mobile applications sometimes needs it
2
2
  export enum MediaType {
3
- APPLICATION_JSON = "application/json;charset=UTF-8",
3
+ APPLICATION_JSON = "application/json",
4
4
  APPLICATION_XML = "application/xml",
5
5
  APPLICATION_GEOJSON = "application/geo+json;charset=UTF-8",
6
6
  IMAGE_SVG = "image/svg+xml",
@@ -8,4 +8,5 @@ export enum MediaType {
8
8
  TEXT_PLAIN = "text/plain",
9
9
  TEXT_HTML = "text/html",
10
10
  TEXT_CSV = "text/csv",
11
+ APPLICATION_JSON_UTF8 = "application/json;charset=UTF-8",
11
12
  }
@@ -1,6 +1,7 @@
1
1
  import { IDatabase, ITask } from "pg-promise";
2
2
  import { DatabaseEnvironmentKeys } from "../aws/runtime/secrets/dbsecret";
3
3
  import { getEnvVariable, getEnvVariableSafe } from "../utils/utils";
4
+ import { envValue } from "../aws/runtime/environment";
4
5
 
5
6
  // eslint-disable-next-line @typescript-eslint/no-var-requires
6
7
  const pgp = require("pg-promise")();
@@ -66,20 +67,18 @@ async function doInDatabase<T>(
66
67
  readonly: boolean,
67
68
  fn: (db: DTDatabase) => Promise<T>
68
69
  ): Promise<T> {
69
- const db_application = getEnvVariableSafe(
70
- DatabaseEnvironmentKeys.DB_APPLICATION
70
+ const db_application = envValue(
71
+ DatabaseEnvironmentKeys.DB_APPLICATION,
72
+ "unknown-cdk-application"
71
73
  );
72
- const db_ro_uri = getEnvVariableSafe(DatabaseEnvironmentKeys.DB_RO_URI);
73
- const db_uri =
74
- db_ro_uri.result === "ok"
75
- ? db_ro_uri.value
76
- : getEnvVariable(DatabaseEnvironmentKeys.DB_URI);
74
+ const db_uri = readonly
75
+ ? envValue(DatabaseEnvironmentKeys.DB_RO_URI)
76
+ : envValue(DatabaseEnvironmentKeys.DB_URI);
77
+
77
78
  const db = initDbConnection(
78
79
  getEnvVariable(DatabaseEnvironmentKeys.DB_USER),
79
80
  getEnvVariable(DatabaseEnvironmentKeys.DB_PASS),
80
- db_application.result === "ok"
81
- ? db_application.value
82
- : "unknown-cdk-application",
81
+ db_application,
83
82
  db_uri
84
83
  );
85
84
  try {
@@ -1,5 +1,10 @@
1
1
  import { DTDatabase, initDbConnection } from "../database/database";
2
2
  import { DatabaseEnvironmentKeys } from "../aws/runtime/secrets/dbsecret";
3
+ import { Countable } from "../database/models";
4
+
5
+ export async function assertCount(db: DTDatabase, sql: string, count: number) {
6
+ await db.one(sql).then((x: Countable) => expect(x.count).toEqual(count));
7
+ }
3
8
 
4
9
  export function dbTestBase(
5
10
  fn: (db: DTDatabase) => void,
package/.editorconfig DELETED
@@ -1,9 +0,0 @@
1
- [*]
2
- charset=utf-8
3
- end_of_line=lf
4
- insert_final_newline=true
5
- indent_style=space
6
- indent_size=4
7
-
8
- [{*.json,*.yml,*.yaml}]
9
- indent_size=2
package/.eslintignore DELETED
@@ -1,4 +0,0 @@
1
- *.js
2
- cdk.out
3
- dist
4
- output