@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.
- package/dist/aws/infra/api/integration.d.ts +21 -0
- package/dist/aws/infra/api/integration.js.map +1 -0
- package/dist/aws/infra/api/response.d.ts +22 -0
- package/dist/aws/infra/api/response.js.map +1 -0
- package/dist/aws/infra/api/responses.d.ts +39 -0
- package/dist/aws/infra/api/responses.js.map +1 -0
- package/dist/aws/infra/api/static-integration.d.ts +15 -0
- package/dist/aws/infra/api/static-integration.js.map +1 -0
- package/dist/aws/infra/canaries/canary-alarm.d.ts +6 -0
- package/dist/aws/infra/canaries/canary-alarm.js.map +1 -0
- package/dist/aws/infra/canaries/canary-keys.d.ts +3 -0
- package/dist/aws/infra/canaries/canary-keys.js.map +1 -0
- package/dist/aws/infra/canaries/canary-parameters.d.ts +18 -0
- package/dist/aws/infra/canaries/canary-parameters.js.map +1 -0
- package/dist/aws/infra/canaries/canary-role.d.ts +6 -0
- package/dist/aws/infra/canaries/canary-role.js.map +1 -0
- package/dist/aws/infra/canaries/canary.d.ts +8 -0
- package/dist/aws/infra/canaries/canary.js.map +1 -0
- package/dist/aws/infra/canaries/database-canary.d.ts +18 -0
- package/dist/aws/infra/canaries/database-canary.js.map +1 -0
- package/dist/aws/infra/canaries/database-checker.d.ts +21 -0
- package/dist/aws/infra/canaries/database-checker.js.map +1 -0
- package/dist/aws/infra/canaries/url-canary.d.ts +16 -0
- package/dist/aws/infra/canaries/url-canary.js.map +1 -0
- package/dist/aws/infra/canaries/url-checker.d.ts +46 -0
- package/dist/aws/infra/canaries/url-checker.js.map +1 -0
- package/dist/aws/infra/documentation.d.ts +56 -0
- package/dist/aws/infra/documentation.js.map +1 -0
- package/dist/aws/infra/scheduler.d.ts +12 -0
- package/dist/aws/infra/scheduler.js.map +1 -0
- package/dist/aws/infra/security-rule.d.ts +12 -0
- package/dist/aws/infra/security-rule.js.map +1 -0
- package/dist/aws/infra/sqs-integration.d.ts +7 -0
- package/dist/aws/infra/sqs-integration.js.map +1 -0
- package/dist/aws/infra/sqs-queue.d.ts +16 -0
- package/dist/aws/infra/sqs-queue.js.map +1 -0
- package/dist/aws/infra/stack/lambda-configs.d.ts +72 -0
- package/dist/aws/infra/stack/lambda-configs.js.map +1 -0
- package/dist/aws/infra/stack/monitoredfunction.d.ts +84 -0
- package/dist/aws/infra/stack/monitoredfunction.js.map +1 -0
- package/dist/aws/infra/stack/rest_apis.d.ts +41 -0
- package/dist/aws/infra/stack/rest_apis.js +27 -31
- package/dist/aws/infra/stack/rest_apis.js.map +1 -0
- package/dist/aws/infra/stack/stack-checking-aspect.d.ts +21 -0
- package/dist/aws/infra/stack/stack-checking-aspect.js +3 -2
- package/dist/aws/infra/stack/stack-checking-aspect.js.map +1 -0
- package/dist/aws/infra/stack/stack.d.ts +45 -0
- package/dist/aws/infra/stack/stack.js.map +1 -0
- package/dist/aws/infra/stack/subscription.d.ts +17 -0
- package/dist/aws/infra/stack/subscription.js.map +1 -0
- package/dist/aws/infra/usage-plans.d.ts +15 -0
- package/dist/aws/infra/usage-plans.js.map +1 -0
- package/dist/aws/runtime/apikey.d.ts +2 -0
- package/dist/aws/runtime/apikey.js.map +1 -0
- package/dist/aws/runtime/digitraffic-integration-response.d.ts +8 -0
- package/dist/aws/runtime/digitraffic-integration-response.js.map +1 -0
- package/dist/aws/runtime/environment.d.ts +1 -0
- package/dist/aws/runtime/environment.js +4 -1
- package/dist/aws/runtime/environment.js.map +1 -0
- package/dist/aws/runtime/messaging.d.ts +10 -0
- package/dist/aws/runtime/messaging.js.map +1 -0
- package/dist/aws/runtime/s3.d.ts +2 -0
- package/dist/aws/runtime/s3.js.map +1 -0
- package/dist/aws/runtime/secrets/dbsecret.d.ts +54 -0
- package/dist/aws/runtime/secrets/dbsecret.js.map +1 -0
- package/dist/aws/runtime/secrets/proxy-holder.d.ts +9 -0
- package/dist/aws/runtime/secrets/proxy-holder.js.map +1 -0
- package/dist/aws/runtime/secrets/rds-holder.d.ts +9 -0
- package/dist/aws/runtime/secrets/rds-holder.js.map +1 -0
- package/dist/aws/runtime/secrets/secret-holder.d.ts +26 -0
- package/dist/aws/runtime/secrets/secret-holder.js.map +1 -0
- package/dist/aws/runtime/secrets/secret.d.ts +8 -0
- package/dist/aws/runtime/secrets/secret.js.map +1 -0
- package/dist/aws/types/errors.d.ts +8 -0
- package/dist/aws/types/errors.js.map +1 -0
- package/dist/aws/types/lambda-response.d.ts +13 -0
- package/dist/aws/types/lambda-response.js.map +1 -0
- package/dist/aws/types/mediatypes.d.ts +11 -0
- package/dist/aws/types/mediatypes.js +2 -1
- package/dist/aws/types/mediatypes.js.map +1 -0
- package/dist/aws/types/model-with-reference.d.ts +7 -0
- package/dist/aws/types/model-with-reference.js.map +1 -0
- package/dist/aws/types/proxytypes.d.ts +26 -0
- package/dist/aws/types/proxytypes.js.map +1 -0
- package/dist/aws/types/tags.d.ts +2 -0
- package/dist/aws/types/tags.js.map +1 -0
- package/dist/database/cached.d.ts +7 -0
- package/dist/database/cached.js.map +1 -0
- package/dist/database/database.d.ts +19 -0
- package/dist/database/database.js +6 -8
- package/dist/database/database.js.map +1 -0
- package/dist/database/last-updated.d.ts +16 -0
- package/dist/database/last-updated.js.map +1 -0
- package/dist/database/models.d.ts +6 -0
- package/dist/database/models.js.map +1 -0
- package/dist/marine/id_utils.d.ts +3 -0
- package/dist/marine/id_utils.js.map +1 -0
- package/dist/marine/rtz.d.ts +48 -0
- package/dist/marine/rtz.js.map +1 -0
- package/dist/test/asserter.d.ts +11 -0
- package/dist/test/asserter.js.map +1 -0
- package/dist/test/db-testutils.d.ts +3 -0
- package/dist/test/db-testutils.js +5 -1
- package/dist/test/db-testutils.js.map +1 -0
- package/dist/test/httpserver.d.ts +19 -0
- package/dist/test/httpserver.js.map +1 -0
- package/dist/test/secret.d.ts +3 -0
- package/dist/test/secret.js.map +1 -0
- package/dist/test/secrets-manager.d.ts +9 -0
- package/dist/test/secrets-manager.js.map +1 -0
- package/dist/test/testutils.d.ts +12 -0
- package/dist/test/testutils.js.map +1 -0
- package/dist/types/either.d.ts +9 -0
- package/dist/types/either.js.map +1 -0
- package/dist/types/input-error.d.ts +2 -0
- package/dist/types/input-error.js.map +1 -0
- package/dist/types/language.d.ts +5 -0
- package/dist/types/language.js.map +1 -0
- package/dist/types/traffictype.d.ts +8 -0
- package/dist/types/traffictype.js.map +1 -0
- package/dist/types/validator.d.ts +4 -0
- package/dist/types/validator.js.map +1 -0
- package/dist/utils/api-model.d.ts +87 -0
- package/dist/utils/api-model.js.map +1 -0
- package/dist/utils/base64.d.ts +12 -0
- package/dist/utils/base64.js.map +1 -0
- package/dist/utils/date-utils.d.ts +17 -0
- package/dist/utils/date-utils.js.map +1 -0
- package/dist/utils/geojson-types.d.ts +14 -0
- package/dist/utils/geojson-types.js.map +1 -0
- package/dist/utils/geometry.d.ts +36 -0
- package/dist/utils/geometry.js.map +1 -0
- package/dist/utils/retry.d.ts +13 -0
- package/dist/utils/retry.js.map +1 -0
- package/dist/utils/slack.d.ts +5 -0
- package/dist/utils/slack.js.map +1 -0
- package/dist/utils/utils.d.ts +46 -0
- package/dist/utils/utils.js.map +1 -0
- package/package.json +1 -1
- package/src/aws/infra/stack/rest_apis.ts +144 -91
- package/src/aws/infra/stack/stack-checking-aspect.ts +5 -2
- package/src/aws/runtime/environment.ts +5 -1
- package/src/aws/types/mediatypes.ts +2 -1
- package/src/database/database.ts +9 -10
- package/src/test/db-testutils.ts +5 -0
- package/.editorconfig +0 -9
- package/.eslintignore +0 -4
- package/.eslintrc.json +0 -27
- package/.github/CODEOWNERS +0 -2
- package/.github/workflows/build.yml +0 -36
- package/.github/workflows/eslint.yml +0 -38
- package/.github/workflows/mirror.yml +0 -15
- package/.gitignore +0 -29
- package/.husky/pre-commit +0 -4
- package/.prettierrc.json +0 -10
- package/jest.config.js +0 -15
- package/test/marine/id_utils.test.ts +0 -57
- package/test/promise/promise.test.ts +0 -143
- package/test/secrets/dbsecret.test.ts +0 -59
- package/test/secrets/secret-holder.test.ts +0 -143
- package/test/secrets/secret.test.ts +0 -49
- package/test/test/httpserver.test.ts +0 -128
- package/test/utils/date-utils.test.ts +0 -28
- package/test/utils/geometry.test.ts +0 -29
- package/test/utils/utils.test.ts +0 -64
- package/tsconfig.eslint.json +0 -4
- package/tsconfig.json +0 -22
- 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 @@
|
|
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
@@ -4,48 +4,70 @@ import {
|
|
4
4
|
GatewayResponse,
|
5
5
|
ResponseType,
|
6
6
|
EndpointType,
|
7
|
-
RestApiProps,
|
8
|
-
|
9
|
-
|
10
|
-
|
11
|
-
|
12
|
-
|
13
|
-
import {
|
14
|
-
|
15
|
-
|
16
|
-
|
17
|
-
|
18
|
-
|
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,
|
34
|
+
stack: DigitrafficStack,
|
35
|
+
apiId: string,
|
36
|
+
apiName: string,
|
37
|
+
allowFromIpAddresses?: string[] | undefined,
|
38
|
+
config?: Partial<RestApiProps>
|
26
39
|
) {
|
27
|
-
const policyDocument =
|
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
|
-
|
32
|
-
|
46
|
+
const apiConfig = {
|
47
|
+
...{
|
48
|
+
deployOptions: {
|
49
|
+
loggingLevel: MethodLoggingLevel.ERROR,
|
50
|
+
},
|
51
|
+
restApiName: apiName,
|
52
|
+
endpointTypes: [EndpointType.REGIONAL],
|
53
|
+
policy: policyDocument,
|
33
54
|
},
|
34
|
-
|
35
|
-
|
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 =
|
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.${
|
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(
|
69
|
-
|
70
|
-
|
71
|
-
|
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(
|
77
|
-
|
78
|
-
|
79
|
-
|
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(
|
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,
|
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 !==
|
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(
|
104
|
-
|
105
|
-
|
106
|
-
|
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(
|
123
|
-
|
124
|
-
|
125
|
-
|
126
|
-
|
127
|
-
|
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(
|
134
|
-
|
135
|
-
|
136
|
-
|
137
|
-
|
138
|
-
|
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(
|
203
|
+
export function setReturnCodeForMissingAuthenticationToken(
|
204
|
+
returnCode: number,
|
153
205
|
message: string,
|
154
206
|
restApi: RestApi,
|
155
|
-
stack: Construct
|
156
|
-
|
157
|
-
new GatewayResponse(
|
158
|
-
|
159
|
-
|
160
|
-
|
161
|
-
|
162
|
-
|
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(
|
168
|
-
|
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
|
-
|
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
|
-
|
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
|
-
|
266
|
+
IpAddress: {
|
208
267
|
"aws:SourceIp": allowFromIpAddresses,
|
209
268
|
},
|
210
269
|
},
|
211
|
-
actions: [
|
212
|
-
|
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
|
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 (
|
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
|
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
|
}
|
package/src/database/database.ts
CHANGED
@@ -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 =
|
70
|
-
DatabaseEnvironmentKeys.DB_APPLICATION
|
70
|
+
const db_application = envValue(
|
71
|
+
DatabaseEnvironmentKeys.DB_APPLICATION,
|
72
|
+
"unknown-cdk-application"
|
71
73
|
);
|
72
|
-
const
|
73
|
-
|
74
|
-
|
75
|
-
|
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
|
81
|
-
? db_application.value
|
82
|
-
: "unknown-cdk-application",
|
81
|
+
db_application,
|
83
82
|
db_uri
|
84
83
|
);
|
85
84
|
try {
|
package/src/test/db-testutils.ts
CHANGED
@@ -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
package/.eslintignore
DELETED