@openhi/constructs 0.0.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/README.md +3 -0
- package/lib/app/index.d.ts +4 -0
- package/lib/app/index.js +21 -0
- package/lib/app/open-hi-app.d.ts +85 -0
- package/lib/app/open-hi-app.js +127 -0
- package/lib/app/open-hi-environment.d.ts +59 -0
- package/lib/app/open-hi-environment.js +72 -0
- package/lib/app/open-hi-service.d.ts +169 -0
- package/lib/app/open-hi-service.js +195 -0
- package/lib/app/open-hi-stage.d.ts +71 -0
- package/lib/app/open-hi-stage.js +70 -0
- package/lib/components/acm/root-wildcard-certificate.d.ts +15 -0
- package/lib/components/acm/root-wildcard-certificate.js +35 -0
- package/lib/components/api-gateway/core-http-api.d.ts +10 -0
- package/lib/components/api-gateway/core-http-api.js +44 -0
- package/lib/components/api-gateway/http-lambda-integration-no-permissions.d.ts +18 -0
- package/lib/components/api-gateway/http-lambda-integration-no-permissions.js +26 -0
- package/lib/components/app-sync/core-graphql-api.d.ts +12 -0
- package/lib/components/app-sync/core-graphql-api.js +54 -0
- package/lib/components/auth.d.ts +75 -0
- package/lib/components/auth.js +100 -0
- package/lib/components/cognito/core-user-pool-client.d.ts +10 -0
- package/lib/components/cognito/core-user-pool-client.js +47 -0
- package/lib/components/cognito/core-user-pool-domain.d.ts +10 -0
- package/lib/components/cognito/core-user-pool-domain.js +41 -0
- package/lib/components/cognito/core-user-pool-kms-key.d.ts +10 -0
- package/lib/components/cognito/core-user-pool-kms-key.js +37 -0
- package/lib/components/cognito/core-user-pool.d.ts +10 -0
- package/lib/components/cognito/core-user-pool.js +54 -0
- package/lib/components/core.d.ts +102 -0
- package/lib/components/core.js +79 -0
- package/lib/components/dynamodb/dynamo-db-data-store.d.ts +33 -0
- package/lib/components/dynamodb/dynamo-db-data-store.js +107 -0
- package/lib/components/event-bridge/data-event-bus.d.ts +19 -0
- package/lib/components/event-bridge/data-event-bus.js +34 -0
- package/lib/components/event-bridge/ops-event-bus.d.ts +19 -0
- package/lib/components/event-bridge/ops-event-bus.js +34 -0
- package/lib/components/global.d.ts +36 -0
- package/lib/components/global.js +63 -0
- package/lib/components/index.d.ts +1 -0
- package/lib/components/index.js +18 -0
- package/lib/components/route-53/child-hosted-zone.d.ts +20 -0
- package/lib/components/route-53/child-hosted-zone.js +48 -0
- package/lib/components/route-53/root-hosted-zone.d.ts +10 -0
- package/lib/components/route-53/root-hosted-zone.js +20 -0
- package/lib/components/ssm/discoverable-string-parameter.d.ts +59 -0
- package/lib/components/ssm/discoverable-string-parameter.js +50 -0
- package/lib/components/ssm/index.d.ts +1 -0
- package/lib/components/ssm/index.js +18 -0
- package/lib/data/dynamo/ehr/r4/Patient.d.ts +180 -0
- package/lib/data/dynamo/ehr/r4/Patient.js +192 -0
- package/lib/data/dynamo/ehr/r4/ehr-r4-data-service.d.ts +162 -0
- package/lib/data/dynamo/ehr/r4/ehr-r4-data-service.js +37 -0
- package/lib/data/hello-world.d.ts +39 -0
- package/lib/data/hello-world.js +59 -0
- package/lib/data/import-patient-with-dynalite.d.ts +1 -0
- package/lib/data/import-patient-with-dynalite.js +87 -0
- package/lib/data/import-patient.d.ts +47 -0
- package/lib/data/import-patient.js +158 -0
- package/lib/data/lambda/rest-api-lambda.d.ts +13 -0
- package/lib/data/lambda/rest-api-lambda.handler.d.ts +1 -0
- package/lib/data/lambda/rest-api-lambda.handler.js +10 -0
- package/lib/data/lambda/rest-api-lambda.js +22 -0
- package/lib/data/middleware/open-hi-context.d.ts +13 -0
- package/lib/data/middleware/open-hi-context.js +31 -0
- package/lib/data/rest-api/ehr/r4/Patient.d.ts +16 -0
- package/lib/data/rest-api/ehr/r4/Patient.js +234 -0
- package/lib/data/rest-api/rest-api-local.d.ts +1 -0
- package/lib/data/rest-api/rest-api-local.js +8 -0
- package/lib/data/rest-api/rest-api-mockdata.d.ts +7 -0
- package/lib/data/rest-api/rest-api-mockdata.js +585 -0
- package/lib/data/rest-api/rest-api.d.ts +3 -0
- package/lib/data/rest-api/rest-api.js +26 -0
- package/lib/index.d.ts +3 -0
- package/lib/index.js +20 -0
- package/lib/lib/compression.d.ts +27 -0
- package/lib/lib/compression.js +87 -0
- package/lib/services/index.d.ts +5 -0
- package/lib/services/index.js +22 -0
- package/lib/services/open-hi-auth-service.d.ts +31 -0
- package/lib/services/open-hi-auth-service.js +31 -0
- package/lib/services/open-hi-core-service.d.ts +15 -0
- package/lib/services/open-hi-core-service.js +38 -0
- package/lib/services/open-hi-data-service.d.ts +18 -0
- package/lib/services/open-hi-data-service.js +18 -0
- package/lib/services/open-hi-global-service.d.ts +15 -0
- package/lib/services/open-hi-global-service.js +44 -0
- package/lib/services/open-hi-rest-api-service.d.ts +17 -0
- package/lib/services/open-hi-rest-api-service.js +107 -0
- package/package.json +67 -0
package/lib/index.d.ts
ADDED
package/lib/index.js
ADDED
|
@@ -0,0 +1,20 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
var __createBinding = (this && this.__createBinding) || (Object.create ? (function(o, m, k, k2) {
|
|
3
|
+
if (k2 === undefined) k2 = k;
|
|
4
|
+
var desc = Object.getOwnPropertyDescriptor(m, k);
|
|
5
|
+
if (!desc || ("get" in desc ? !m.__esModule : desc.writable || desc.configurable)) {
|
|
6
|
+
desc = { enumerable: true, get: function() { return m[k]; } };
|
|
7
|
+
}
|
|
8
|
+
Object.defineProperty(o, k2, desc);
|
|
9
|
+
}) : (function(o, m, k, k2) {
|
|
10
|
+
if (k2 === undefined) k2 = k;
|
|
11
|
+
o[k2] = m[k];
|
|
12
|
+
}));
|
|
13
|
+
var __exportStar = (this && this.__exportStar) || function(m, exports) {
|
|
14
|
+
for (var p in m) if (p !== "default" && !Object.prototype.hasOwnProperty.call(exports, p)) __createBinding(exports, m, p);
|
|
15
|
+
};
|
|
16
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
17
|
+
__exportStar(require("./app"), exports);
|
|
18
|
+
__exportStar(require("./components"), exports);
|
|
19
|
+
__exportStar(require("./services"), exports);
|
|
20
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiaW5kZXguanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi9zcmMvaW5kZXgudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6Ijs7Ozs7Ozs7Ozs7Ozs7OztBQUFBLHdDQUFzQjtBQUN0QiwrQ0FBNkI7QUFDN0IsNkNBQTJCIiwic291cmNlc0NvbnRlbnQiOlsiZXhwb3J0ICogZnJvbSBcIi4vYXBwXCI7XG5leHBvcnQgKiBmcm9tIFwiLi9jb21wb25lbnRzXCI7XG5leHBvcnQgKiBmcm9tIFwiLi9zZXJ2aWNlc1wiO1xuIl19
|
|
@@ -0,0 +1,27 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Compression algorithm identifiers supported by the envelope (string values).
|
|
3
|
+
* Only algos that Node.js supports out of the box (zlib): gzip, brotli, deflate.
|
|
4
|
+
* "none" = uncompressed payload. zstd was considered in the ADR but requires native addon/WASM.
|
|
5
|
+
*/
|
|
6
|
+
export declare const COMPRESSION_ALGOS: {
|
|
7
|
+
readonly NONE: "none";
|
|
8
|
+
readonly GZIP: "gzip";
|
|
9
|
+
readonly BROTLI: "brotli";
|
|
10
|
+
readonly DEFLATE: "deflate";
|
|
11
|
+
};
|
|
12
|
+
/** Algorithm value for envelope `algo`; only gzip and none are implemented today. */
|
|
13
|
+
export type CompressionAlgo = (typeof COMPRESSION_ALGOS)[keyof typeof COMPRESSION_ALGOS];
|
|
14
|
+
/**
|
|
15
|
+
* Compresses a JSON string (e.g. serialized FHIR resource) for storage in DynamoDB.
|
|
16
|
+
* Uses a versioned envelope: { v, algo, payload } with gzip+base64 in payload.
|
|
17
|
+
* Used by the data layer on write; see REST API docs (compression in data layer).
|
|
18
|
+
* Optional compression: pass `{ algo: COMPRESSION_ALGOS.NONE }` to store in envelope without compressing.
|
|
19
|
+
*/
|
|
20
|
+
export declare function compressResource(jsonString: string, options?: {
|
|
21
|
+
algo?: CompressionAlgo;
|
|
22
|
+
}): string;
|
|
23
|
+
/**
|
|
24
|
+
* Decompresses a stored value: versioned envelope (v, algo, payload) or legacy gzip+base64 / raw.
|
|
25
|
+
* If the value is not valid envelope JSON, falls back to legacy: try gzip magic on base64, else return as-is.
|
|
26
|
+
*/
|
|
27
|
+
export declare function decompressResource(compressedOrRaw: string): string;
|
|
@@ -0,0 +1,87 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
+
exports.COMPRESSION_ALGOS = void 0;
|
|
4
|
+
exports.compressResource = compressResource;
|
|
5
|
+
exports.decompressResource = decompressResource;
|
|
6
|
+
const node_zlib_1 = require("node:zlib");
|
|
7
|
+
/** Envelope format version. See ADR 2026-02-15-02 (data layer compression). */
|
|
8
|
+
const ENVELOPE_VERSION = 1;
|
|
9
|
+
/**
|
|
10
|
+
* Compression algorithm identifiers supported by the envelope (string values).
|
|
11
|
+
* Only algos that Node.js supports out of the box (zlib): gzip, brotli, deflate.
|
|
12
|
+
* "none" = uncompressed payload. zstd was considered in the ADR but requires native addon/WASM.
|
|
13
|
+
*/
|
|
14
|
+
exports.COMPRESSION_ALGOS = {
|
|
15
|
+
NONE: "none",
|
|
16
|
+
GZIP: "gzip",
|
|
17
|
+
BROTLI: "brotli",
|
|
18
|
+
DEFLATE: "deflate",
|
|
19
|
+
};
|
|
20
|
+
function isEnvelope(obj) {
|
|
21
|
+
return (typeof obj === "object" &&
|
|
22
|
+
obj !== null &&
|
|
23
|
+
"v" in obj &&
|
|
24
|
+
"algo" in obj &&
|
|
25
|
+
"payload" in obj &&
|
|
26
|
+
typeof obj.payload === "string");
|
|
27
|
+
}
|
|
28
|
+
/**
|
|
29
|
+
* Compresses a JSON string (e.g. serialized FHIR resource) for storage in DynamoDB.
|
|
30
|
+
* Uses a versioned envelope: { v, algo, payload } with gzip+base64 in payload.
|
|
31
|
+
* Used by the data layer on write; see REST API docs (compression in data layer).
|
|
32
|
+
* Optional compression: pass `{ algo: COMPRESSION_ALGOS.NONE }` to store in envelope without compressing.
|
|
33
|
+
*/
|
|
34
|
+
function compressResource(jsonString, options) {
|
|
35
|
+
const algo = options?.algo ?? exports.COMPRESSION_ALGOS.GZIP;
|
|
36
|
+
if (algo === exports.COMPRESSION_ALGOS.NONE) {
|
|
37
|
+
const envelope = {
|
|
38
|
+
v: ENVELOPE_VERSION,
|
|
39
|
+
algo: exports.COMPRESSION_ALGOS.NONE,
|
|
40
|
+
payload: jsonString,
|
|
41
|
+
};
|
|
42
|
+
return JSON.stringify(envelope);
|
|
43
|
+
}
|
|
44
|
+
const buf = Buffer.from(jsonString, "utf-8");
|
|
45
|
+
const payload = (0, node_zlib_1.gzipSync)(buf).toString("base64");
|
|
46
|
+
const envelope = {
|
|
47
|
+
v: ENVELOPE_VERSION,
|
|
48
|
+
algo: exports.COMPRESSION_ALGOS.GZIP,
|
|
49
|
+
payload,
|
|
50
|
+
};
|
|
51
|
+
return JSON.stringify(envelope);
|
|
52
|
+
}
|
|
53
|
+
/**
|
|
54
|
+
* Decompresses a stored value: versioned envelope (v, algo, payload) or legacy gzip+base64 / raw.
|
|
55
|
+
* If the value is not valid envelope JSON, falls back to legacy: try gzip magic on base64, else return as-is.
|
|
56
|
+
*/
|
|
57
|
+
function decompressResource(compressedOrRaw) {
|
|
58
|
+
try {
|
|
59
|
+
const parsed = JSON.parse(compressedOrRaw);
|
|
60
|
+
if (isEnvelope(parsed)) {
|
|
61
|
+
if (parsed.algo === exports.COMPRESSION_ALGOS.GZIP) {
|
|
62
|
+
const buf = Buffer.from(parsed.payload, "base64");
|
|
63
|
+
return (0, node_zlib_1.gunzipSync)(buf).toString("utf-8");
|
|
64
|
+
}
|
|
65
|
+
if (parsed.algo === exports.COMPRESSION_ALGOS.NONE) {
|
|
66
|
+
return parsed.payload;
|
|
67
|
+
}
|
|
68
|
+
// Unknown algo: return payload as-is (safe fallback per ADR)
|
|
69
|
+
return parsed.payload;
|
|
70
|
+
}
|
|
71
|
+
}
|
|
72
|
+
catch {
|
|
73
|
+
// Not valid envelope JSON — legacy path
|
|
74
|
+
}
|
|
75
|
+
// Legacy: pre-envelope gzip+base64 or raw
|
|
76
|
+
try {
|
|
77
|
+
const buf = Buffer.from(compressedOrRaw, "base64");
|
|
78
|
+
if (buf.length >= 2 && buf[0] === 0x1f && buf[1] === 0x8b) {
|
|
79
|
+
return (0, node_zlib_1.gunzipSync)(buf).toString("utf-8");
|
|
80
|
+
}
|
|
81
|
+
}
|
|
82
|
+
catch {
|
|
83
|
+
// not base64 or gunzip failed
|
|
84
|
+
}
|
|
85
|
+
return compressedOrRaw;
|
|
86
|
+
}
|
|
87
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiY29tcHJlc3Npb24uanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi9zcmMvbGliL2NvbXByZXNzaW9uLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiI7OztBQTZDQSw0Q0FxQkM7QUFNRCxnREE0QkM7QUFwR0QseUNBQWlEO0FBRWpELCtFQUErRTtBQUMvRSxNQUFNLGdCQUFnQixHQUFHLENBQUMsQ0FBQztBQUUzQjs7OztHQUlHO0FBQ1UsUUFBQSxpQkFBaUIsR0FBRztJQUMvQixJQUFJLEVBQUUsTUFBTTtJQUNaLElBQUksRUFBRSxNQUFNO0lBQ1osTUFBTSxFQUFFLFFBQVE7SUFDaEIsT0FBTyxFQUFFLFNBQVM7Q0FDVixDQUFDO0FBYVgsU0FBUyxVQUFVLENBQUMsR0FBWTtJQUM5QixPQUFPLENBQ0wsT0FBTyxHQUFHLEtBQUssUUFBUTtRQUN2QixHQUFHLEtBQUssSUFBSTtRQUNaLEdBQUcsSUFBSSxHQUFHO1FBQ1YsTUFBTSxJQUFJLEdBQUc7UUFDYixTQUFTLElBQUksR0FBRztRQUNoQixPQUFRLEdBQTJCLENBQUMsT0FBTyxLQUFLLFFBQVEsQ0FDekQsQ0FBQztBQUNKLENBQUM7QUFFRDs7Ozs7R0FLRztBQUNILFNBQWdCLGdCQUFnQixDQUM5QixVQUFrQixFQUNsQixPQUFvQztJQUVwQyxNQUFNLElBQUksR0FBRyxPQUFPLEVBQUUsSUFBSSxJQUFJLHlCQUFpQixDQUFDLElBQUksQ0FBQztJQUNyRCxJQUFJLElBQUksS0FBSyx5QkFBaUIsQ0FBQyxJQUFJLEVBQUUsQ0FBQztRQUNwQyxNQUFNLFFBQVEsR0FBd0I7WUFDcEMsQ0FBQyxFQUFFLGdCQUFnQjtZQUNuQixJQUFJLEVBQUUseUJBQWlCLENBQUMsSUFBSTtZQUM1QixPQUFPLEVBQUUsVUFBVTtTQUNwQixDQUFDO1FBQ0YsT0FBTyxJQUFJLENBQUMsU0FBUyxDQUFDLFFBQVEsQ0FBQyxDQUFDO0lBQ2xDLENBQUM7SUFDRCxNQUFNLEdBQUcsR0FBRyxNQUFNLENBQUMsSUFBSSxDQUFDLFVBQVUsRUFBRSxPQUFPLENBQUMsQ0FBQztJQUM3QyxNQUFNLE9BQU8sR0FBRyxJQUFBLG9CQUFRLEVBQUMsR0FBRyxDQUFDLENBQUMsUUFBUSxDQUFDLFFBQVEsQ0FBQyxDQUFDO0lBQ2pELE1BQU0sUUFBUSxHQUF3QjtRQUNwQyxDQUFDLEVBQUUsZ0JBQWdCO1FBQ25CLElBQUksRUFBRSx5QkFBaUIsQ0FBQyxJQUFJO1FBQzVCLE9BQU87S0FDUixDQUFDO0lBQ0YsT0FBTyxJQUFJLENBQUMsU0FBUyxDQUFDLFFBQVEsQ0FBQyxDQUFDO0FBQ2xDLENBQUM7QUFFRDs7O0dBR0c7QUFDSCxTQUFnQixrQkFBa0IsQ0FBQyxlQUF1QjtJQUN4RCxJQUFJLENBQUM7UUFDSCxNQUFNLE1BQU0sR0FBRyxJQUFJLENBQUMsS0FBSyxDQUFDLGVBQWUsQ0FBWSxDQUFDO1FBQ3RELElBQUksVUFBVSxDQUFDLE1BQU0sQ0FBQyxFQUFFLENBQUM7WUFDdkIsSUFBSSxNQUFNLENBQUMsSUFBSSxLQUFLLHlCQUFpQixDQUFDLElBQUksRUFBRSxDQUFDO2dCQUMzQyxNQUFNLEdBQUcsR0FBRyxNQUFNLENBQUMsSUFBSSxDQUFDLE1BQU0sQ0FBQyxPQUFPLEVBQUUsUUFBUSxDQUFDLENBQUM7Z0JBQ2xELE9BQU8sSUFBQSxzQkFBVSxFQUFDLEdBQUcsQ0FBQyxDQUFDLFFBQVEsQ0FBQyxPQUFPLENBQUMsQ0FBQztZQUMzQyxDQUFDO1lBQ0QsSUFBSSxNQUFNLENBQUMsSUFBSSxLQUFLLHlCQUFpQixDQUFDLElBQUksRUFBRSxDQUFDO2dCQUMzQyxPQUFPLE1BQU0sQ0FBQyxPQUFPLENBQUM7WUFDeEIsQ0FBQztZQUNELDZEQUE2RDtZQUM3RCxPQUFPLE1BQU0sQ0FBQyxPQUFPLENBQUM7UUFDeEIsQ0FBQztJQUNILENBQUM7SUFBQyxNQUFNLENBQUM7UUFDUCx3Q0FBd0M7SUFDMUMsQ0FBQztJQUVELDBDQUEwQztJQUMxQyxJQUFJLENBQUM7UUFDSCxNQUFNLEdBQUcsR0FBRyxNQUFNLENBQUMsSUFBSSxDQUFDLGVBQWUsRUFBRSxRQUFRLENBQUMsQ0FBQztRQUNuRCxJQUFJLEdBQUcsQ0FBQyxNQUFNLElBQUksQ0FBQyxJQUFJLEdBQUcsQ0FBQyxDQUFDLENBQUMsS0FBSyxJQUFJLElBQUksR0FBRyxDQUFDLENBQUMsQ0FBQyxLQUFLLElBQUksRUFBRSxDQUFDO1lBQzFELE9BQU8sSUFBQSxzQkFBVSxFQUFDLEdBQUcsQ0FBQyxDQUFDLFFBQVEsQ0FBQyxPQUFPLENBQUMsQ0FBQztRQUMzQyxDQUFDO0lBQ0gsQ0FBQztJQUFDLE1BQU0sQ0FBQztRQUNQLDhCQUE4QjtJQUNoQyxDQUFDO0lBQ0QsT0FBTyxlQUFlLENBQUM7QUFDekIsQ0FBQyIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IGd6aXBTeW5jLCBndW56aXBTeW5jIH0gZnJvbSBcIm5vZGU6emxpYlwiO1xuXG4vKiogRW52ZWxvcGUgZm9ybWF0IHZlcnNpb24uIFNlZSBBRFIgMjAyNi0wMi0xNS0wMiAoZGF0YSBsYXllciBjb21wcmVzc2lvbikuICovXG5jb25zdCBFTlZFTE9QRV9WRVJTSU9OID0gMTtcblxuLyoqXG4gKiBDb21wcmVzc2lvbiBhbGdvcml0aG0gaWRlbnRpZmllcnMgc3VwcG9ydGVkIGJ5IHRoZSBlbnZlbG9wZSAoc3RyaW5nIHZhbHVlcykuXG4gKiBPbmx5IGFsZ29zIHRoYXQgTm9kZS5qcyBzdXBwb3J0cyBvdXQgb2YgdGhlIGJveCAoemxpYik6IGd6aXAsIGJyb3RsaSwgZGVmbGF0ZS5cbiAqIFwibm9uZVwiID0gdW5jb21wcmVzc2VkIHBheWxvYWQuIHpzdGQgd2FzIGNvbnNpZGVyZWQgaW4gdGhlIEFEUiBidXQgcmVxdWlyZXMgbmF0aXZlIGFkZG9uL1dBU00uXG4gKi9cbmV4cG9ydCBjb25zdCBDT01QUkVTU0lPTl9BTEdPUyA9IHtcbiAgTk9ORTogXCJub25lXCIsXG4gIEdaSVA6IFwiZ3ppcFwiLFxuICBCUk9UTEk6IFwiYnJvdGxpXCIsXG4gIERFRkxBVEU6IFwiZGVmbGF0ZVwiLFxufSBhcyBjb25zdDtcblxuLyoqIEFsZ29yaXRobSB2YWx1ZSBmb3IgZW52ZWxvcGUgYGFsZ29gOyBvbmx5IGd6aXAgYW5kIG5vbmUgYXJlIGltcGxlbWVudGVkIHRvZGF5LiAqL1xuZXhwb3J0IHR5cGUgQ29tcHJlc3Npb25BbGdvID1cbiAgKHR5cGVvZiBDT01QUkVTU0lPTl9BTEdPUylba2V5b2YgdHlwZW9mIENPTVBSRVNTSU9OX0FMR09TXTtcblxuLyoqIFN0b3JlZCB2YWx1ZSBpcyBhIEpTT04gc3RyaW5nIG9mIHRoaXMgZW52ZWxvcGUuICovXG5pbnRlcmZhY2UgQ29tcHJlc3Npb25FbnZlbG9wZSB7XG4gIHY6IG51bWJlcjtcbiAgYWxnbzogc3RyaW5nO1xuICBwYXlsb2FkOiBzdHJpbmc7XG59XG5cbmZ1bmN0aW9uIGlzRW52ZWxvcGUob2JqOiB1bmtub3duKTogb2JqIGlzIENvbXByZXNzaW9uRW52ZWxvcGUge1xuICByZXR1cm4gKFxuICAgIHR5cGVvZiBvYmogPT09IFwib2JqZWN0XCIgJiZcbiAgICBvYmogIT09IG51bGwgJiZcbiAgICBcInZcIiBpbiBvYmogJiZcbiAgICBcImFsZ29cIiBpbiBvYmogJiZcbiAgICBcInBheWxvYWRcIiBpbiBvYmogJiZcbiAgICB0eXBlb2YgKG9iaiBhcyBDb21wcmVzc2lvbkVudmVsb3BlKS5wYXlsb2FkID09PSBcInN0cmluZ1wiXG4gICk7XG59XG5cbi8qKlxuICogQ29tcHJlc3NlcyBhIEpTT04gc3RyaW5nIChlLmcuIHNlcmlhbGl6ZWQgRkhJUiByZXNvdXJjZSkgZm9yIHN0b3JhZ2UgaW4gRHluYW1vREIuXG4gKiBVc2VzIGEgdmVyc2lvbmVkIGVudmVsb3BlOiB7IHYsIGFsZ28sIHBheWxvYWQgfSB3aXRoIGd6aXArYmFzZTY0IGluIHBheWxvYWQuXG4gKiBVc2VkIGJ5IHRoZSBkYXRhIGxheWVyIG9uIHdyaXRlOyBzZWUgUkVTVCBBUEkgZG9jcyAoY29tcHJlc3Npb24gaW4gZGF0YSBsYXllcikuXG4gKiBPcHRpb25hbCBjb21wcmVzc2lvbjogcGFzcyBgeyBhbGdvOiBDT01QUkVTU0lPTl9BTEdPUy5OT05FIH1gIHRvIHN0b3JlIGluIGVudmVsb3BlIHdpdGhvdXQgY29tcHJlc3NpbmcuXG4gKi9cbmV4cG9ydCBmdW5jdGlvbiBjb21wcmVzc1Jlc291cmNlKFxuICBqc29uU3RyaW5nOiBzdHJpbmcsXG4gIG9wdGlvbnM/OiB7IGFsZ28/OiBDb21wcmVzc2lvbkFsZ28gfSxcbik6IHN0cmluZyB7XG4gIGNvbnN0IGFsZ28gPSBvcHRpb25zPy5hbGdvID8/IENPTVBSRVNTSU9OX0FMR09TLkdaSVA7XG4gIGlmIChhbGdvID09PSBDT01QUkVTU0lPTl9BTEdPUy5OT05FKSB7XG4gICAgY29uc3QgZW52ZWxvcGU6IENvbXByZXNzaW9uRW52ZWxvcGUgPSB7XG4gICAgICB2OiBFTlZFTE9QRV9WRVJTSU9OLFxuICAgICAgYWxnbzogQ09NUFJFU1NJT05fQUxHT1MuTk9ORSxcbiAgICAgIHBheWxvYWQ6IGpzb25TdHJpbmcsXG4gICAgfTtcbiAgICByZXR1cm4gSlNPTi5zdHJpbmdpZnkoZW52ZWxvcGUpO1xuICB9XG4gIGNvbnN0IGJ1ZiA9IEJ1ZmZlci5mcm9tKGpzb25TdHJpbmcsIFwidXRmLThcIik7XG4gIGNvbnN0IHBheWxvYWQgPSBnemlwU3luYyhidWYpLnRvU3RyaW5nKFwiYmFzZTY0XCIpO1xuICBjb25zdCBlbnZlbG9wZTogQ29tcHJlc3Npb25FbnZlbG9wZSA9IHtcbiAgICB2OiBFTlZFTE9QRV9WRVJTSU9OLFxuICAgIGFsZ286IENPTVBSRVNTSU9OX0FMR09TLkdaSVAsXG4gICAgcGF5bG9hZCxcbiAgfTtcbiAgcmV0dXJuIEpTT04uc3RyaW5naWZ5KGVudmVsb3BlKTtcbn1cblxuLyoqXG4gKiBEZWNvbXByZXNzZXMgYSBzdG9yZWQgdmFsdWU6IHZlcnNpb25lZCBlbnZlbG9wZSAodiwgYWxnbywgcGF5bG9hZCkgb3IgbGVnYWN5IGd6aXArYmFzZTY0IC8gcmF3LlxuICogSWYgdGhlIHZhbHVlIGlzIG5vdCB2YWxpZCBlbnZlbG9wZSBKU09OLCBmYWxscyBiYWNrIHRvIGxlZ2FjeTogdHJ5IGd6aXAgbWFnaWMgb24gYmFzZTY0LCBlbHNlIHJldHVybiBhcy1pcy5cbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIGRlY29tcHJlc3NSZXNvdXJjZShjb21wcmVzc2VkT3JSYXc6IHN0cmluZyk6IHN0cmluZyB7XG4gIHRyeSB7XG4gICAgY29uc3QgcGFyc2VkID0gSlNPTi5wYXJzZShjb21wcmVzc2VkT3JSYXcpIGFzIHVua25vd247XG4gICAgaWYgKGlzRW52ZWxvcGUocGFyc2VkKSkge1xuICAgICAgaWYgKHBhcnNlZC5hbGdvID09PSBDT01QUkVTU0lPTl9BTEdPUy5HWklQKSB7XG4gICAgICAgIGNvbnN0IGJ1ZiA9IEJ1ZmZlci5mcm9tKHBhcnNlZC5wYXlsb2FkLCBcImJhc2U2NFwiKTtcbiAgICAgICAgcmV0dXJuIGd1bnppcFN5bmMoYnVmKS50b1N0cmluZyhcInV0Zi04XCIpO1xuICAgICAgfVxuICAgICAgaWYgKHBhcnNlZC5hbGdvID09PSBDT01QUkVTU0lPTl9BTEdPUy5OT05FKSB7XG4gICAgICAgIHJldHVybiBwYXJzZWQucGF5bG9hZDtcbiAgICAgIH1cbiAgICAgIC8vIFVua25vd24gYWxnbzogcmV0dXJuIHBheWxvYWQgYXMtaXMgKHNhZmUgZmFsbGJhY2sgcGVyIEFEUilcbiAgICAgIHJldHVybiBwYXJzZWQucGF5bG9hZDtcbiAgICB9XG4gIH0gY2F0Y2gge1xuICAgIC8vIE5vdCB2YWxpZCBlbnZlbG9wZSBKU09OIOKAlCBsZWdhY3kgcGF0aFxuICB9XG5cbiAgLy8gTGVnYWN5OiBwcmUtZW52ZWxvcGUgZ3ppcCtiYXNlNjQgb3IgcmF3XG4gIHRyeSB7XG4gICAgY29uc3QgYnVmID0gQnVmZmVyLmZyb20oY29tcHJlc3NlZE9yUmF3LCBcImJhc2U2NFwiKTtcbiAgICBpZiAoYnVmLmxlbmd0aCA+PSAyICYmIGJ1ZlswXSA9PT0gMHgxZiAmJiBidWZbMV0gPT09IDB4OGIpIHtcbiAgICAgIHJldHVybiBndW56aXBTeW5jKGJ1ZikudG9TdHJpbmcoXCJ1dGYtOFwiKTtcbiAgICB9XG4gIH0gY2F0Y2gge1xuICAgIC8vIG5vdCBiYXNlNjQgb3IgZ3VuemlwIGZhaWxlZFxuICB9XG4gIHJldHVybiBjb21wcmVzc2VkT3JSYXc7XG59XG4iXX0=
|
|
@@ -0,0 +1,22 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
var __createBinding = (this && this.__createBinding) || (Object.create ? (function(o, m, k, k2) {
|
|
3
|
+
if (k2 === undefined) k2 = k;
|
|
4
|
+
var desc = Object.getOwnPropertyDescriptor(m, k);
|
|
5
|
+
if (!desc || ("get" in desc ? !m.__esModule : desc.writable || desc.configurable)) {
|
|
6
|
+
desc = { enumerable: true, get: function() { return m[k]; } };
|
|
7
|
+
}
|
|
8
|
+
Object.defineProperty(o, k2, desc);
|
|
9
|
+
}) : (function(o, m, k, k2) {
|
|
10
|
+
if (k2 === undefined) k2 = k;
|
|
11
|
+
o[k2] = m[k];
|
|
12
|
+
}));
|
|
13
|
+
var __exportStar = (this && this.__exportStar) || function(m, exports) {
|
|
14
|
+
for (var p in m) if (p !== "default" && !Object.prototype.hasOwnProperty.call(exports, p)) __createBinding(exports, m, p);
|
|
15
|
+
};
|
|
16
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
17
|
+
__exportStar(require("./open-hi-core-service"), exports);
|
|
18
|
+
__exportStar(require("./open-hi-auth-service"), exports);
|
|
19
|
+
__exportStar(require("./open-hi-global-service"), exports);
|
|
20
|
+
__exportStar(require("./open-hi-rest-api-service"), exports);
|
|
21
|
+
__exportStar(require("./open-hi-data-service"), exports);
|
|
22
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiaW5kZXguanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi9zcmMvc2VydmljZXMvaW5kZXgudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6Ijs7Ozs7Ozs7Ozs7Ozs7OztBQUFBLHlEQUF1QztBQUN2Qyx5REFBdUM7QUFDdkMsMkRBQXlDO0FBQ3pDLDZEQUEyQztBQUMzQyx5REFBdUMiLCJzb3VyY2VzQ29udGVudCI6WyJleHBvcnQgKiBmcm9tIFwiLi9vcGVuLWhpLWNvcmUtc2VydmljZVwiO1xuZXhwb3J0ICogZnJvbSBcIi4vb3Blbi1oaS1hdXRoLXNlcnZpY2VcIjtcbmV4cG9ydCAqIGZyb20gXCIuL29wZW4taGktZ2xvYmFsLXNlcnZpY2VcIjtcbmV4cG9ydCAqIGZyb20gXCIuL29wZW4taGktcmVzdC1hcGktc2VydmljZVwiO1xuZXhwb3J0ICogZnJvbSBcIi4vb3Blbi1oaS1kYXRhLXNlcnZpY2VcIjtcbiJdfQ==
|
|
@@ -0,0 +1,31 @@
|
|
|
1
|
+
import { OpenHiEnvironment } from "../app/open-hi-environment";
|
|
2
|
+
import { OpenHiService, OpenHiServiceProps } from "../app/open-hi-service";
|
|
3
|
+
import { Auth, AuthProps } from "../components/auth";
|
|
4
|
+
export interface OpenHiAuthServiceProps extends OpenHiServiceProps {
|
|
5
|
+
/**
|
|
6
|
+
* Optional props for the auth construct.
|
|
7
|
+
*/
|
|
8
|
+
readonly authProps?: AuthProps;
|
|
9
|
+
}
|
|
10
|
+
/**
|
|
11
|
+
* OpenHI Auth Service stack.
|
|
12
|
+
*
|
|
13
|
+
* @remarks
|
|
14
|
+
* The Auth service manages authentication infrastructure including:
|
|
15
|
+
* - Cognito User Pool for user management and authentication
|
|
16
|
+
* - User Pool Client for application integration
|
|
17
|
+
* - User Pool Domain for hosting the Cognito hosted UI
|
|
18
|
+
* - KMS Key for Cognito User Pool encryption
|
|
19
|
+
*
|
|
20
|
+
* Only one instance of the auth service should exist per environment.
|
|
21
|
+
*
|
|
22
|
+
* @public
|
|
23
|
+
*/
|
|
24
|
+
export declare class OpenHiAuthService extends OpenHiService {
|
|
25
|
+
props: OpenHiAuthServiceProps;
|
|
26
|
+
/**
|
|
27
|
+
* Auth construct containing authentication resources.
|
|
28
|
+
*/
|
|
29
|
+
readonly auth: Auth;
|
|
30
|
+
constructor(ohEnv: OpenHiEnvironment, props?: OpenHiAuthServiceProps);
|
|
31
|
+
}
|
|
@@ -0,0 +1,31 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
+
exports.OpenHiAuthService = void 0;
|
|
4
|
+
const open_hi_service_1 = require("../app/open-hi-service");
|
|
5
|
+
const auth_1 = require("../components/auth");
|
|
6
|
+
/**
|
|
7
|
+
* OpenHI Auth Service stack.
|
|
8
|
+
*
|
|
9
|
+
* @remarks
|
|
10
|
+
* The Auth service manages authentication infrastructure including:
|
|
11
|
+
* - Cognito User Pool for user management and authentication
|
|
12
|
+
* - User Pool Client for application integration
|
|
13
|
+
* - User Pool Domain for hosting the Cognito hosted UI
|
|
14
|
+
* - KMS Key for Cognito User Pool encryption
|
|
15
|
+
*
|
|
16
|
+
* Only one instance of the auth service should exist per environment.
|
|
17
|
+
*
|
|
18
|
+
* @public
|
|
19
|
+
*/
|
|
20
|
+
class OpenHiAuthService extends open_hi_service_1.OpenHiService {
|
|
21
|
+
constructor(ohEnv, props = {}) {
|
|
22
|
+
super(ohEnv, open_hi_service_1.OPEN_HI_SERVICE_TYPE.AUTH, props);
|
|
23
|
+
this.props = props;
|
|
24
|
+
/**
|
|
25
|
+
* Create the Auth construct that manages authentication resources.
|
|
26
|
+
*/
|
|
27
|
+
this.auth = new auth_1.Auth(this, props.authProps);
|
|
28
|
+
}
|
|
29
|
+
}
|
|
30
|
+
exports.OpenHiAuthService = OpenHiAuthService;
|
|
31
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoib3Blbi1oaS1hdXRoLXNlcnZpY2UuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi9zcmMvc2VydmljZXMvb3Blbi1oaS1hdXRoLXNlcnZpY2UudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6Ijs7O0FBQ0EsNERBSWdDO0FBQ2hDLDZDQUFxRDtBQVNyRDs7Ozs7Ozs7Ozs7OztHQWFHO0FBQ0gsTUFBYSxpQkFBa0IsU0FBUSwrQkFBYTtJQU1sRCxZQUNFLEtBQXdCLEVBQ2pCLFFBQWdDLEVBQUU7UUFFekMsS0FBSyxDQUFDLEtBQUssRUFBRSxzQ0FBb0IsQ0FBQyxJQUFJLEVBQUUsS0FBSyxDQUFDLENBQUM7UUFGeEMsVUFBSyxHQUFMLEtBQUssQ0FBNkI7UUFJekM7O1dBRUc7UUFDSCxJQUFJLENBQUMsSUFBSSxHQUFHLElBQUksV0FBSSxDQUFDLElBQUksRUFBRSxLQUFLLENBQUMsU0FBUyxDQUFDLENBQUM7SUFDOUMsQ0FBQztDQUNGO0FBakJELDhDQWlCQyIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IE9wZW5IaUVudmlyb25tZW50IH0gZnJvbSBcIi4uL2FwcC9vcGVuLWhpLWVudmlyb25tZW50XCI7XG5pbXBvcnQge1xuICBPUEVOX0hJX1NFUlZJQ0VfVFlQRSxcbiAgT3BlbkhpU2VydmljZSxcbiAgT3BlbkhpU2VydmljZVByb3BzLFxufSBmcm9tIFwiLi4vYXBwL29wZW4taGktc2VydmljZVwiO1xuaW1wb3J0IHsgQXV0aCwgQXV0aFByb3BzIH0gZnJvbSBcIi4uL2NvbXBvbmVudHMvYXV0aFwiO1xuXG5leHBvcnQgaW50ZXJmYWNlIE9wZW5IaUF1dGhTZXJ2aWNlUHJvcHMgZXh0ZW5kcyBPcGVuSGlTZXJ2aWNlUHJvcHMge1xuICAvKipcbiAgICogT3B0aW9uYWwgcHJvcHMgZm9yIHRoZSBhdXRoIGNvbnN0cnVjdC5cbiAgICovXG4gIHJlYWRvbmx5IGF1dGhQcm9wcz86IEF1dGhQcm9wcztcbn1cblxuLyoqXG4gKiBPcGVuSEkgQXV0aCBTZXJ2aWNlIHN0YWNrLlxuICpcbiAqIEByZW1hcmtzXG4gKiBUaGUgQXV0aCBzZXJ2aWNlIG1hbmFnZXMgYXV0aGVudGljYXRpb24gaW5mcmFzdHJ1Y3R1cmUgaW5jbHVkaW5nOlxuICogLSBDb2duaXRvIFVzZXIgUG9vbCBmb3IgdXNlciBtYW5hZ2VtZW50IGFuZCBhdXRoZW50aWNhdGlvblxuICogLSBVc2VyIFBvb2wgQ2xpZW50IGZvciBhcHBsaWNhdGlvbiBpbnRlZ3JhdGlvblxuICogLSBVc2VyIFBvb2wgRG9tYWluIGZvciBob3N0aW5nIHRoZSBDb2duaXRvIGhvc3RlZCBVSVxuICogLSBLTVMgS2V5IGZvciBDb2duaXRvIFVzZXIgUG9vbCBlbmNyeXB0aW9uXG4gKlxuICogT25seSBvbmUgaW5zdGFuY2Ugb2YgdGhlIGF1dGggc2VydmljZSBzaG91bGQgZXhpc3QgcGVyIGVudmlyb25tZW50LlxuICpcbiAqIEBwdWJsaWNcbiAqL1xuZXhwb3J0IGNsYXNzIE9wZW5IaUF1dGhTZXJ2aWNlIGV4dGVuZHMgT3BlbkhpU2VydmljZSB7XG4gIC8qKlxuICAgKiBBdXRoIGNvbnN0cnVjdCBjb250YWluaW5nIGF1dGhlbnRpY2F0aW9uIHJlc291cmNlcy5cbiAgICovXG4gIHB1YmxpYyByZWFkb25seSBhdXRoOiBBdXRoO1xuXG4gIGNvbnN0cnVjdG9yKFxuICAgIG9oRW52OiBPcGVuSGlFbnZpcm9ubWVudCxcbiAgICBwdWJsaWMgcHJvcHM6IE9wZW5IaUF1dGhTZXJ2aWNlUHJvcHMgPSB7fSxcbiAgKSB7XG4gICAgc3VwZXIob2hFbnYsIE9QRU5fSElfU0VSVklDRV9UWVBFLkFVVEgsIHByb3BzKTtcblxuICAgIC8qKlxuICAgICAqIENyZWF0ZSB0aGUgQXV0aCBjb25zdHJ1Y3QgdGhhdCBtYW5hZ2VzIGF1dGhlbnRpY2F0aW9uIHJlc291cmNlcy5cbiAgICAgKi9cbiAgICB0aGlzLmF1dGggPSBuZXcgQXV0aCh0aGlzLCBwcm9wcy5hdXRoUHJvcHMpO1xuICB9XG59XG4iXX0=
|
|
@@ -0,0 +1,15 @@
|
|
|
1
|
+
import { OpenHiEnvironment } from "../app";
|
|
2
|
+
import { OpenHiService, OpenHiServiceProps } from "../app/open-hi-service";
|
|
3
|
+
export interface OpenHiCoreServiceProps extends OpenHiServiceProps {
|
|
4
|
+
}
|
|
5
|
+
export declare class OpenHiCoreService extends OpenHiService {
|
|
6
|
+
/*****************************************************************************
|
|
7
|
+
*
|
|
8
|
+
* PROPS
|
|
9
|
+
*
|
|
10
|
+
* Final props calculated from inputs combined with default values.
|
|
11
|
+
*
|
|
12
|
+
****************************************************************************/
|
|
13
|
+
readonly props: OpenHiCoreServiceProps;
|
|
14
|
+
constructor(ohEnv: OpenHiEnvironment, props?: OpenHiCoreServiceProps);
|
|
15
|
+
}
|
|
@@ -0,0 +1,38 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
+
exports.OpenHiCoreService = void 0;
|
|
4
|
+
const aws_lambda_1 = require("aws-cdk-lib/aws-lambda");
|
|
5
|
+
const open_hi_service_1 = require("../app/open-hi-service");
|
|
6
|
+
class OpenHiCoreService extends open_hi_service_1.OpenHiService {
|
|
7
|
+
constructor(ohEnv, props = {}) {
|
|
8
|
+
/**
|
|
9
|
+
* Force concrete version of all core resources to be created in this
|
|
10
|
+
* service. In all other stacks, imported versions will be used.
|
|
11
|
+
*/
|
|
12
|
+
props = {
|
|
13
|
+
...props,
|
|
14
|
+
};
|
|
15
|
+
super(ohEnv, open_hi_service_1.OPEN_HI_SERVICE_TYPE.CORE, props);
|
|
16
|
+
/**
|
|
17
|
+
* Store the props in case they are needed later. Mostly this is just a
|
|
18
|
+
* resource of what was passed in, combined with any custom or default
|
|
19
|
+
* settings, if any.
|
|
20
|
+
*/
|
|
21
|
+
this.props = props;
|
|
22
|
+
// A Lambda to integrate
|
|
23
|
+
new aws_lambda_1.Function(this, "test-fn", {
|
|
24
|
+
runtime: aws_lambda_1.Runtime.NODEJS_LATEST,
|
|
25
|
+
handler: "index.handler",
|
|
26
|
+
code: aws_lambda_1.Code.fromInline('exports.handler = async () => { return {statusCode:200, body:"ok"} }'),
|
|
27
|
+
});
|
|
28
|
+
// Create a Lambda integration
|
|
29
|
+
// const integration = new HttpLambdaIntegration("test-integration", fn);
|
|
30
|
+
// new HttpRoute(this, "test-route", {
|
|
31
|
+
// httpApi: this.core.httpApi,
|
|
32
|
+
// routeKey: HttpRouteKey.with(`/hello-world`, HttpMethod.GET),
|
|
33
|
+
// integration,
|
|
34
|
+
// });
|
|
35
|
+
}
|
|
36
|
+
}
|
|
37
|
+
exports.OpenHiCoreService = OpenHiCoreService;
|
|
38
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoib3Blbi1oaS1jb3JlLXNlcnZpY2UuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi9zcmMvc2VydmljZXMvb3Blbi1oaS1jb3JlLXNlcnZpY2UudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6Ijs7O0FBQUEsdURBQWlFO0FBRWpFLDREQUlnQztBQUloQyxNQUFhLGlCQUFrQixTQUFRLCtCQUFhO0lBV2xELFlBQVksS0FBd0IsRUFBRSxRQUFnQyxFQUFFO1FBQ3RFOzs7V0FHRztRQUNILEtBQUssR0FBRztZQUNOLEdBQUcsS0FBSztTQUNULENBQUM7UUFFRixLQUFLLENBQUMsS0FBSyxFQUFFLHNDQUFvQixDQUFDLElBQUksRUFBRSxLQUFLLENBQUMsQ0FBQztRQUUvQzs7OztXQUlHO1FBQ0gsSUFBSSxDQUFDLEtBQUssR0FBRyxLQUFLLENBQUM7UUFFbkIsd0JBQXdCO1FBQ3hCLElBQUkscUJBQVEsQ0FBQyxJQUFJLEVBQUUsU0FBUyxFQUFFO1lBQzVCLE9BQU8sRUFBRSxvQkFBTyxDQUFDLGFBQWE7WUFDOUIsT0FBTyxFQUFFLGVBQWU7WUFDeEIsSUFBSSxFQUFFLGlCQUFJLENBQUMsVUFBVSxDQUNuQixzRUFBc0UsQ0FDdkU7U0FDRixDQUFDLENBQUM7UUFFSCw4QkFBOEI7UUFDOUIseUVBQXlFO1FBRXpFLHNDQUFzQztRQUN0QyxnQ0FBZ0M7UUFDaEMsaUVBQWlFO1FBQ2pFLGlCQUFpQjtRQUNqQixNQUFNO0lBQ1IsQ0FBQztDQUNGO0FBL0NELDhDQStDQyIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IENvZGUsIEZ1bmN0aW9uLCBSdW50aW1lIH0gZnJvbSBcImF3cy1jZGstbGliL2F3cy1sYW1iZGFcIjtcbmltcG9ydCB7IE9wZW5IaUVudmlyb25tZW50IH0gZnJvbSBcIi4uL2FwcFwiO1xuaW1wb3J0IHtcbiAgT1BFTl9ISV9TRVJWSUNFX1RZUEUsXG4gIE9wZW5IaVNlcnZpY2UsXG4gIE9wZW5IaVNlcnZpY2VQcm9wcyxcbn0gZnJvbSBcIi4uL2FwcC9vcGVuLWhpLXNlcnZpY2VcIjtcblxuZXhwb3J0IGludGVyZmFjZSBPcGVuSGlDb3JlU2VydmljZVByb3BzIGV4dGVuZHMgT3BlbkhpU2VydmljZVByb3BzIHt9XG5cbmV4cG9ydCBjbGFzcyBPcGVuSGlDb3JlU2VydmljZSBleHRlbmRzIE9wZW5IaVNlcnZpY2Uge1xuICAvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKipcbiAgICpcbiAgICogUFJPUFNcbiAgICpcbiAgICogRmluYWwgcHJvcHMgY2FsY3VsYXRlZCBmcm9tIGlucHV0cyBjb21iaW5lZCB3aXRoIGRlZmF1bHQgdmFsdWVzLlxuICAgKlxuICAgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi9cblxuICBwdWJsaWMgcmVhZG9ubHkgcHJvcHM6IE9wZW5IaUNvcmVTZXJ2aWNlUHJvcHM7XG5cbiAgY29uc3RydWN0b3Iob2hFbnY6IE9wZW5IaUVudmlyb25tZW50LCBwcm9wczogT3BlbkhpQ29yZVNlcnZpY2VQcm9wcyA9IHt9KSB7XG4gICAgLyoqXG4gICAgICogRm9yY2UgY29uY3JldGUgdmVyc2lvbiBvZiBhbGwgY29yZSByZXNvdXJjZXMgdG8gYmUgY3JlYXRlZCBpbiB0aGlzXG4gICAgICogc2VydmljZS4gSW4gYWxsIG90aGVyIHN0YWNrcywgaW1wb3J0ZWQgdmVyc2lvbnMgd2lsbCBiZSB1c2VkLlxuICAgICAqL1xuICAgIHByb3BzID0ge1xuICAgICAgLi4ucHJvcHMsXG4gICAgfTtcblxuICAgIHN1cGVyKG9oRW52LCBPUEVOX0hJX1NFUlZJQ0VfVFlQRS5DT1JFLCBwcm9wcyk7XG5cbiAgICAvKipcbiAgICAgKiBTdG9yZSB0aGUgcHJvcHMgaW4gY2FzZSB0aGV5IGFyZSBuZWVkZWQgbGF0ZXIuIE1vc3RseSB0aGlzIGlzIGp1c3QgYVxuICAgICAqIHJlc291cmNlIG9mIHdoYXQgd2FzIHBhc3NlZCBpbiwgY29tYmluZWQgd2l0aCBhbnkgY3VzdG9tIG9yIGRlZmF1bHRcbiAgICAgKiBzZXR0aW5ncywgaWYgYW55LlxuICAgICAqL1xuICAgIHRoaXMucHJvcHMgPSBwcm9wcztcblxuICAgIC8vIEEgTGFtYmRhIHRvIGludGVncmF0ZVxuICAgIG5ldyBGdW5jdGlvbih0aGlzLCBcInRlc3QtZm5cIiwge1xuICAgICAgcnVudGltZTogUnVudGltZS5OT0RFSlNfTEFURVNULFxuICAgICAgaGFuZGxlcjogXCJpbmRleC5oYW5kbGVyXCIsXG4gICAgICBjb2RlOiBDb2RlLmZyb21JbmxpbmUoXG4gICAgICAgICdleHBvcnRzLmhhbmRsZXIgPSBhc3luYyAoKSA9PiB7IHJldHVybiB7c3RhdHVzQ29kZToyMDAsIGJvZHk6XCJva1wifSB9JyxcbiAgICAgICksXG4gICAgfSk7XG5cbiAgICAvLyBDcmVhdGUgYSBMYW1iZGEgaW50ZWdyYXRpb25cbiAgICAvLyBjb25zdCBpbnRlZ3JhdGlvbiA9IG5ldyBIdHRwTGFtYmRhSW50ZWdyYXRpb24oXCJ0ZXN0LWludGVncmF0aW9uXCIsIGZuKTtcblxuICAgIC8vIG5ldyBIdHRwUm91dGUodGhpcywgXCJ0ZXN0LXJvdXRlXCIsIHtcbiAgICAvLyAgIGh0dHBBcGk6IHRoaXMuY29yZS5odHRwQXBpLFxuICAgIC8vICAgcm91dGVLZXk6IEh0dHBSb3V0ZUtleS53aXRoKGAvaGVsbG8td29ybGRgLCBIdHRwTWV0aG9kLkdFVCksXG4gICAgLy8gICBpbnRlZ3JhdGlvbixcbiAgICAvLyB9KTtcbiAgfVxufVxuIl19
|
|
@@ -0,0 +1,18 @@
|
|
|
1
|
+
import { ITable } from "aws-cdk-lib/aws-dynamodb";
|
|
2
|
+
import { OpenHiEnvironment } from "../app/open-hi-environment";
|
|
3
|
+
import { OpenHiService, OpenHiServiceProps } from "../app/open-hi-service";
|
|
4
|
+
export interface OpenHiDataServiceProps extends OpenHiServiceProps {
|
|
5
|
+
}
|
|
6
|
+
/**
|
|
7
|
+
* Data storage service stack: centralizes DynamoDB, S3, and other persistence
|
|
8
|
+
* resources for OpenHI. Creates the single-table data store (CRM, CMS, ERP,
|
|
9
|
+
* EHR); add buckets or other resources as needed.
|
|
10
|
+
*/
|
|
11
|
+
export declare class OpenHiDataService extends OpenHiService {
|
|
12
|
+
/**
|
|
13
|
+
* The single-table DynamoDB data store. Use {@link DynamoDbDataStore.fromConstruct}
|
|
14
|
+
* from other stacks to obtain an ITable reference by name.
|
|
15
|
+
*/
|
|
16
|
+
readonly dataStore: ITable;
|
|
17
|
+
constructor(ohEnv: OpenHiEnvironment, props?: OpenHiDataServiceProps);
|
|
18
|
+
}
|
|
@@ -0,0 +1,18 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
+
exports.OpenHiDataService = void 0;
|
|
4
|
+
const open_hi_service_1 = require("../app/open-hi-service");
|
|
5
|
+
const dynamo_db_data_store_1 = require("../components/dynamodb/dynamo-db-data-store");
|
|
6
|
+
/**
|
|
7
|
+
* Data storage service stack: centralizes DynamoDB, S3, and other persistence
|
|
8
|
+
* resources for OpenHI. Creates the single-table data store (CRM, CMS, ERP,
|
|
9
|
+
* EHR); add buckets or other resources as needed.
|
|
10
|
+
*/
|
|
11
|
+
class OpenHiDataService extends open_hi_service_1.OpenHiService {
|
|
12
|
+
constructor(ohEnv, props = {}) {
|
|
13
|
+
super(ohEnv, open_hi_service_1.OPEN_HI_SERVICE_TYPE.DATA, props);
|
|
14
|
+
this.dataStore = new dynamo_db_data_store_1.DynamoDbDataStore(this, "dynamo-db-data-store");
|
|
15
|
+
}
|
|
16
|
+
}
|
|
17
|
+
exports.OpenHiDataService = OpenHiDataService;
|
|
18
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoib3Blbi1oaS1kYXRhLXNlcnZpY2UuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi9zcmMvc2VydmljZXMvb3Blbi1oaS1kYXRhLXNlcnZpY2UudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6Ijs7O0FBRUEsNERBSWdDO0FBQ2hDLHNGQUFnRjtBQUloRjs7OztHQUlHO0FBQ0gsTUFBYSxpQkFBa0IsU0FBUSwrQkFBYTtJQU9sRCxZQUFZLEtBQXdCLEVBQUUsUUFBZ0MsRUFBRTtRQUN0RSxLQUFLLENBQUMsS0FBSyxFQUFFLHNDQUFvQixDQUFDLElBQUksRUFBRSxLQUFLLENBQUMsQ0FBQztRQUUvQyxJQUFJLENBQUMsU0FBUyxHQUFHLElBQUksd0NBQWlCLENBQUMsSUFBSSxFQUFFLHNCQUFzQixDQUFDLENBQUM7SUFDdkUsQ0FBQztDQUNGO0FBWkQsOENBWUMiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBJVGFibGUgfSBmcm9tIFwiYXdzLWNkay1saWIvYXdzLWR5bmFtb2RiXCI7XG5pbXBvcnQgeyBPcGVuSGlFbnZpcm9ubWVudCB9IGZyb20gXCIuLi9hcHAvb3Blbi1oaS1lbnZpcm9ubWVudFwiO1xuaW1wb3J0IHtcbiAgT1BFTl9ISV9TRVJWSUNFX1RZUEUsXG4gIE9wZW5IaVNlcnZpY2UsXG4gIE9wZW5IaVNlcnZpY2VQcm9wcyxcbn0gZnJvbSBcIi4uL2FwcC9vcGVuLWhpLXNlcnZpY2VcIjtcbmltcG9ydCB7IER5bmFtb0RiRGF0YVN0b3JlIH0gZnJvbSBcIi4uL2NvbXBvbmVudHMvZHluYW1vZGIvZHluYW1vLWRiLWRhdGEtc3RvcmVcIjtcblxuZXhwb3J0IGludGVyZmFjZSBPcGVuSGlEYXRhU2VydmljZVByb3BzIGV4dGVuZHMgT3BlbkhpU2VydmljZVByb3BzIHt9XG5cbi8qKlxuICogRGF0YSBzdG9yYWdlIHNlcnZpY2Ugc3RhY2s6IGNlbnRyYWxpemVzIER5bmFtb0RCLCBTMywgYW5kIG90aGVyIHBlcnNpc3RlbmNlXG4gKiByZXNvdXJjZXMgZm9yIE9wZW5ISS4gQ3JlYXRlcyB0aGUgc2luZ2xlLXRhYmxlIGRhdGEgc3RvcmUgKENSTSwgQ01TLCBFUlAsXG4gKiBFSFIpOyBhZGQgYnVja2V0cyBvciBvdGhlciByZXNvdXJjZXMgYXMgbmVlZGVkLlxuICovXG5leHBvcnQgY2xhc3MgT3BlbkhpRGF0YVNlcnZpY2UgZXh0ZW5kcyBPcGVuSGlTZXJ2aWNlIHtcbiAgLyoqXG4gICAqIFRoZSBzaW5nbGUtdGFibGUgRHluYW1vREIgZGF0YSBzdG9yZS4gVXNlIHtAbGluayBEeW5hbW9EYkRhdGFTdG9yZS5mcm9tQ29uc3RydWN0fVxuICAgKiBmcm9tIG90aGVyIHN0YWNrcyB0byBvYnRhaW4gYW4gSVRhYmxlIHJlZmVyZW5jZSBieSBuYW1lLlxuICAgKi9cbiAgcHVibGljIHJlYWRvbmx5IGRhdGFTdG9yZTogSVRhYmxlO1xuXG4gIGNvbnN0cnVjdG9yKG9oRW52OiBPcGVuSGlFbnZpcm9ubWVudCwgcHJvcHM6IE9wZW5IaURhdGFTZXJ2aWNlUHJvcHMgPSB7fSkge1xuICAgIHN1cGVyKG9oRW52LCBPUEVOX0hJX1NFUlZJQ0VfVFlQRS5EQVRBLCBwcm9wcyk7XG5cbiAgICB0aGlzLmRhdGFTdG9yZSA9IG5ldyBEeW5hbW9EYkRhdGFTdG9yZSh0aGlzLCBcImR5bmFtby1kYi1kYXRhLXN0b3JlXCIpO1xuICB9XG59XG4iXX0=
|
|
@@ -0,0 +1,15 @@
|
|
|
1
|
+
import { OpenHiEnvironment } from "../app/open-hi-environment";
|
|
2
|
+
import { OpenHiService, OpenHiServiceProps } from "../app/open-hi-service";
|
|
3
|
+
import { Global } from "../components/global";
|
|
4
|
+
export interface OpenHiGlobalServiceProps extends OpenHiServiceProps {
|
|
5
|
+
}
|
|
6
|
+
/**
|
|
7
|
+
* Global Infrastructure stack: owns global DNS and certificates
|
|
8
|
+
*/
|
|
9
|
+
export declare class OpenHiGlobalService extends OpenHiService {
|
|
10
|
+
/**
|
|
11
|
+
* Global construct.
|
|
12
|
+
*/
|
|
13
|
+
readonly global: Global;
|
|
14
|
+
constructor(ohEnv: OpenHiEnvironment, props?: OpenHiGlobalServiceProps);
|
|
15
|
+
}
|
|
@@ -0,0 +1,44 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
+
exports.OpenHiGlobalService = void 0;
|
|
4
|
+
const open_hi_service_1 = require("../app/open-hi-service");
|
|
5
|
+
const global_1 = require("../components/global");
|
|
6
|
+
/**
|
|
7
|
+
* Global Infrastructure stack: owns global DNS and certificates
|
|
8
|
+
*/
|
|
9
|
+
class OpenHiGlobalService extends open_hi_service_1.OpenHiService {
|
|
10
|
+
constructor(ohEnv, props = {}) {
|
|
11
|
+
super(ohEnv, open_hi_service_1.OPEN_HI_SERVICE_TYPE.GLOBAL, props);
|
|
12
|
+
/**
|
|
13
|
+
* Unpack some incoming props. Don't pass config into constructs,
|
|
14
|
+
* deconstruct what you need and pass those values into the construct.
|
|
15
|
+
*/
|
|
16
|
+
const { config } = props;
|
|
17
|
+
if (!config) {
|
|
18
|
+
throw new Error("Config is required");
|
|
19
|
+
}
|
|
20
|
+
if (!config.zoneName) {
|
|
21
|
+
throw new Error("Zone name is required to import the root zone");
|
|
22
|
+
}
|
|
23
|
+
if (!config.hostedZoneId) {
|
|
24
|
+
throw new Error("Hosted zone ID is required to import the root zone");
|
|
25
|
+
}
|
|
26
|
+
/**
|
|
27
|
+
* Create a global construct containing root and child zones
|
|
28
|
+
*/
|
|
29
|
+
this.global = new global_1.Global(this, "global", {
|
|
30
|
+
rootHostedZoneAttributes: {
|
|
31
|
+
zoneName: config.zoneName,
|
|
32
|
+
hostedZoneId: config.hostedZoneId,
|
|
33
|
+
},
|
|
34
|
+
/*
|
|
35
|
+
childHostedZoneAttributes: {
|
|
36
|
+
zoneName: `${this.childZonePrefix}.${config.zoneName}`,
|
|
37
|
+
hostedZoneId: config.hostedZoneId,
|
|
38
|
+
},
|
|
39
|
+
*/
|
|
40
|
+
});
|
|
41
|
+
}
|
|
42
|
+
}
|
|
43
|
+
exports.OpenHiGlobalService = OpenHiGlobalService;
|
|
44
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoib3Blbi1oaS1nbG9iYWwtc2VydmljZS5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uL3NyYy9zZXJ2aWNlcy9vcGVuLWhpLWdsb2JhbC1zZXJ2aWNlLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiI7OztBQUNBLDREQUlnQztBQUNoQyxpREFBOEM7QUFJOUM7O0dBRUc7QUFDSCxNQUFhLG1CQUFvQixTQUFRLCtCQUFhO0lBTXBELFlBQVksS0FBd0IsRUFBRSxRQUFrQyxFQUFFO1FBQ3hFLEtBQUssQ0FBQyxLQUFLLEVBQUUsc0NBQW9CLENBQUMsTUFBTSxFQUFFLEtBQUssQ0FBQyxDQUFDO1FBRWpEOzs7V0FHRztRQUNILE1BQU0sRUFBRSxNQUFNLEVBQUUsR0FBRyxLQUFLLENBQUM7UUFFekIsSUFBSSxDQUFDLE1BQU0sRUFBRSxDQUFDO1lBQ1osTUFBTSxJQUFJLEtBQUssQ0FBQyxvQkFBb0IsQ0FBQyxDQUFDO1FBQ3hDLENBQUM7UUFDRCxJQUFJLENBQUMsTUFBTSxDQUFDLFFBQVEsRUFBRSxDQUFDO1lBQ3JCLE1BQU0sSUFBSSxLQUFLLENBQUMsK0NBQStDLENBQUMsQ0FBQztRQUNuRSxDQUFDO1FBQ0QsSUFBSSxDQUFDLE1BQU0sQ0FBQyxZQUFZLEVBQUUsQ0FBQztZQUN6QixNQUFNLElBQUksS0FBSyxDQUFDLG9EQUFvRCxDQUFDLENBQUM7UUFDeEUsQ0FBQztRQUVEOztXQUVHO1FBQ0gsSUFBSSxDQUFDLE1BQU0sR0FBRyxJQUFJLGVBQU0sQ0FBQyxJQUFJLEVBQUUsUUFBUSxFQUFFO1lBQ3ZDLHdCQUF3QixFQUFFO2dCQUN4QixRQUFRLEVBQUUsTUFBTSxDQUFDLFFBQVE7Z0JBQ3pCLFlBQVksRUFBRSxNQUFNLENBQUMsWUFBWTthQUNsQztZQUNEOzs7OztjQUtFO1NBQ0gsQ0FBQyxDQUFDO0lBQ0wsQ0FBQztDQUNGO0FBekNELGtEQXlDQyIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IE9wZW5IaUVudmlyb25tZW50IH0gZnJvbSBcIi4uL2FwcC9vcGVuLWhpLWVudmlyb25tZW50XCI7XG5pbXBvcnQge1xuICBPUEVOX0hJX1NFUlZJQ0VfVFlQRSxcbiAgT3BlbkhpU2VydmljZSxcbiAgT3BlbkhpU2VydmljZVByb3BzLFxufSBmcm9tIFwiLi4vYXBwL29wZW4taGktc2VydmljZVwiO1xuaW1wb3J0IHsgR2xvYmFsIH0gZnJvbSBcIi4uL2NvbXBvbmVudHMvZ2xvYmFsXCI7XG5cbmV4cG9ydCBpbnRlcmZhY2UgT3BlbkhpR2xvYmFsU2VydmljZVByb3BzIGV4dGVuZHMgT3BlbkhpU2VydmljZVByb3BzIHt9XG5cbi8qKlxuICogR2xvYmFsIEluZnJhc3RydWN0dXJlIHN0YWNrOiBvd25zIGdsb2JhbCBETlMgYW5kIGNlcnRpZmljYXRlc1xuICovXG5leHBvcnQgY2xhc3MgT3BlbkhpR2xvYmFsU2VydmljZSBleHRlbmRzIE9wZW5IaVNlcnZpY2Uge1xuICAvKipcbiAgICogR2xvYmFsIGNvbnN0cnVjdC5cbiAgICovXG4gIHB1YmxpYyByZWFkb25seSBnbG9iYWw6IEdsb2JhbDtcblxuICBjb25zdHJ1Y3RvcihvaEVudjogT3BlbkhpRW52aXJvbm1lbnQsIHByb3BzOiBPcGVuSGlHbG9iYWxTZXJ2aWNlUHJvcHMgPSB7fSkge1xuICAgIHN1cGVyKG9oRW52LCBPUEVOX0hJX1NFUlZJQ0VfVFlQRS5HTE9CQUwsIHByb3BzKTtcblxuICAgIC8qKlxuICAgICAqIFVucGFjayBzb21lIGluY29taW5nIHByb3BzLiBEb24ndCBwYXNzIGNvbmZpZyBpbnRvIGNvbnN0cnVjdHMsXG4gICAgICogZGVjb25zdHJ1Y3Qgd2hhdCB5b3UgbmVlZCBhbmQgcGFzcyB0aG9zZSB2YWx1ZXMgaW50byB0aGUgY29uc3RydWN0LlxuICAgICAqL1xuICAgIGNvbnN0IHsgY29uZmlnIH0gPSBwcm9wcztcblxuICAgIGlmICghY29uZmlnKSB7XG4gICAgICB0aHJvdyBuZXcgRXJyb3IoXCJDb25maWcgaXMgcmVxdWlyZWRcIik7XG4gICAgfVxuICAgIGlmICghY29uZmlnLnpvbmVOYW1lKSB7XG4gICAgICB0aHJvdyBuZXcgRXJyb3IoXCJab25lIG5hbWUgaXMgcmVxdWlyZWQgdG8gaW1wb3J0IHRoZSByb290IHpvbmVcIik7XG4gICAgfVxuICAgIGlmICghY29uZmlnLmhvc3RlZFpvbmVJZCkge1xuICAgICAgdGhyb3cgbmV3IEVycm9yKFwiSG9zdGVkIHpvbmUgSUQgaXMgcmVxdWlyZWQgdG8gaW1wb3J0IHRoZSByb290IHpvbmVcIik7XG4gICAgfVxuXG4gICAgLyoqXG4gICAgICogQ3JlYXRlIGEgZ2xvYmFsIGNvbnN0cnVjdCBjb250YWluaW5nIHJvb3QgYW5kIGNoaWxkIHpvbmVzXG4gICAgICovXG4gICAgdGhpcy5nbG9iYWwgPSBuZXcgR2xvYmFsKHRoaXMsIFwiZ2xvYmFsXCIsIHtcbiAgICAgIHJvb3RIb3N0ZWRab25lQXR0cmlidXRlczoge1xuICAgICAgICB6b25lTmFtZTogY29uZmlnLnpvbmVOYW1lLFxuICAgICAgICBob3N0ZWRab25lSWQ6IGNvbmZpZy5ob3N0ZWRab25lSWQsXG4gICAgICB9LFxuICAgICAgLypcbiAgICAgIGNoaWxkSG9zdGVkWm9uZUF0dHJpYnV0ZXM6IHtcbiAgICAgICAgem9uZU5hbWU6IGAke3RoaXMuY2hpbGRab25lUHJlZml4fS4ke2NvbmZpZy56b25lTmFtZX1gLFxuICAgICAgICBob3N0ZWRab25lSWQ6IGNvbmZpZy5ob3N0ZWRab25lSWQsXG4gICAgICB9LFxuICAgICAgKi9cbiAgICB9KTtcbiAgfVxufVxuIl19
|
|
@@ -0,0 +1,17 @@
|
|
|
1
|
+
import { OpenHiEnvironment } from "../app/open-hi-environment";
|
|
2
|
+
import { OpenHiService, OpenHiServiceProps } from "../app/open-hi-service";
|
|
3
|
+
import { CoreHttpApi } from "../components/api-gateway/core-http-api";
|
|
4
|
+
export interface OpenHiRestApiServiceProps extends OpenHiServiceProps {
|
|
5
|
+
}
|
|
6
|
+
/**
|
|
7
|
+
* SSM parameter name suffix for the REST API base URL.
|
|
8
|
+
* Full parameter name is built via buildParameterName with serviceType REST_API.
|
|
9
|
+
*/
|
|
10
|
+
export declare const REST_API_BASE_URL_SSM_NAME = "REST_API_BASE_URL";
|
|
11
|
+
/**
|
|
12
|
+
* REST API service stack: HTTP API, custom domain, and Lambda; exports base URL via SSM.
|
|
13
|
+
*/
|
|
14
|
+
export declare class OpenHiRestApiService extends OpenHiService {
|
|
15
|
+
readonly coreHttpApi: CoreHttpApi;
|
|
16
|
+
constructor(ohEnv: OpenHiEnvironment, props?: OpenHiRestApiServiceProps);
|
|
17
|
+
}
|
|
@@ -0,0 +1,107 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
+
exports.OpenHiRestApiService = exports.REST_API_BASE_URL_SSM_NAME = void 0;
|
|
4
|
+
const aws_apigatewayv2_1 = require("aws-cdk-lib/aws-apigatewayv2");
|
|
5
|
+
const aws_apigatewayv2_integrations_1 = require("aws-cdk-lib/aws-apigatewayv2-integrations");
|
|
6
|
+
const aws_route53_1 = require("aws-cdk-lib/aws-route53");
|
|
7
|
+
const aws_route53_targets_1 = require("aws-cdk-lib/aws-route53-targets");
|
|
8
|
+
const open_hi_service_1 = require("../app/open-hi-service");
|
|
9
|
+
const root_wildcard_certificate_1 = require("../components/acm/root-wildcard-certificate");
|
|
10
|
+
const core_http_api_1 = require("../components/api-gateway/core-http-api");
|
|
11
|
+
const dynamo_db_data_store_1 = require("../components/dynamodb/dynamo-db-data-store");
|
|
12
|
+
const ssm_1 = require("../components/ssm");
|
|
13
|
+
const rest_api_lambda_1 = require("../data/lambda/rest-api-lambda");
|
|
14
|
+
/**
|
|
15
|
+
* SSM parameter name suffix for the REST API base URL.
|
|
16
|
+
* Full parameter name is built via buildParameterName with serviceType REST_API.
|
|
17
|
+
*/
|
|
18
|
+
exports.REST_API_BASE_URL_SSM_NAME = "REST_API_BASE_URL";
|
|
19
|
+
/**
|
|
20
|
+
* REST API service stack: HTTP API, custom domain, and Lambda; exports base URL via SSM.
|
|
21
|
+
*/
|
|
22
|
+
class OpenHiRestApiService extends open_hi_service_1.OpenHiService {
|
|
23
|
+
constructor(ohEnv, props = {}) {
|
|
24
|
+
super(ohEnv, open_hi_service_1.OPEN_HI_SERVICE_TYPE.REST_API, props);
|
|
25
|
+
/**
|
|
26
|
+
* Unpack some incoming props. Don't pass config into constructs,
|
|
27
|
+
* deconstruct what you need and pass those values into the construct.
|
|
28
|
+
*/
|
|
29
|
+
const { config } = props;
|
|
30
|
+
if (!config) {
|
|
31
|
+
throw new Error("Config is required");
|
|
32
|
+
}
|
|
33
|
+
if (!config.hostedZoneId) {
|
|
34
|
+
throw new Error("Hosted zone ID is required");
|
|
35
|
+
}
|
|
36
|
+
if (!config.zoneName) {
|
|
37
|
+
throw new Error("Zone name is required");
|
|
38
|
+
}
|
|
39
|
+
/***************************************************************************
|
|
40
|
+
*
|
|
41
|
+
* DNS for the API Endpoint
|
|
42
|
+
*
|
|
43
|
+
**************************************************************************/
|
|
44
|
+
const hostedZone = aws_route53_1.HostedZone.fromHostedZoneAttributes(this, "root-zone", {
|
|
45
|
+
hostedZoneId: config.hostedZoneId,
|
|
46
|
+
zoneName: config.zoneName,
|
|
47
|
+
});
|
|
48
|
+
const certificate = root_wildcard_certificate_1.RootWildcardCertificate.fromConstruct(this);
|
|
49
|
+
const apiPrefix = this.branchName === "main" ? `api` : `api-${this.childZonePrefix}`;
|
|
50
|
+
const apiDomainName = [apiPrefix, hostedZone.zoneName].join(".");
|
|
51
|
+
const restApiBaseUrl = `https://${apiDomainName}`;
|
|
52
|
+
new ssm_1.DiscoverableStringParameter(this, "rest-api-base-url-param", {
|
|
53
|
+
ssmParamName: exports.REST_API_BASE_URL_SSM_NAME,
|
|
54
|
+
stringValue: restApiBaseUrl,
|
|
55
|
+
description: "REST API base URL for this deployment (E2E, scripts)",
|
|
56
|
+
});
|
|
57
|
+
const domainName = new aws_apigatewayv2_1.DomainName(this, "domain", {
|
|
58
|
+
domainName: apiDomainName,
|
|
59
|
+
certificate,
|
|
60
|
+
});
|
|
61
|
+
/***************************************************************************
|
|
62
|
+
*
|
|
63
|
+
* Core Data API Definition
|
|
64
|
+
*
|
|
65
|
+
**************************************************************************/
|
|
66
|
+
this.coreHttpApi = new core_http_api_1.CoreHttpApi(this, {
|
|
67
|
+
defaultDomainMapping: {
|
|
68
|
+
domainName,
|
|
69
|
+
mappingKey: undefined, // serve at root of domain
|
|
70
|
+
},
|
|
71
|
+
});
|
|
72
|
+
/**
|
|
73
|
+
* Create a Lambda function
|
|
74
|
+
*/
|
|
75
|
+
const dataStoreTable = dynamo_db_data_store_1.DynamoDbDataStore.fromConstruct(this);
|
|
76
|
+
const { lambda } = new rest_api_lambda_1.RestApiLambda(this, {
|
|
77
|
+
dynamoTableName: dataStoreTable.tableName,
|
|
78
|
+
});
|
|
79
|
+
// Explicit DynamoDB actions only; Scan is intentionally omitted to enforce query-only access.
|
|
80
|
+
dataStoreTable.grant(lambda, "dynamodb:GetItem", "dynamodb:Query", "dynamodb:BatchGetItem", "dynamodb:ConditionCheckItem", "dynamodb:DescribeTable", "dynamodb:BatchWriteItem", "dynamodb:PutItem", "dynamodb:UpdateItem", "dynamodb:DeleteItem");
|
|
81
|
+
/**
|
|
82
|
+
* Integrate Lambda with HTTP API
|
|
83
|
+
*/
|
|
84
|
+
const integration = new aws_apigatewayv2_integrations_1.HttpLambdaIntegration("lambda-integration", lambda);
|
|
85
|
+
/**
|
|
86
|
+
* Proxy all requests to the Lambda (root and all paths)
|
|
87
|
+
*/
|
|
88
|
+
new aws_apigatewayv2_1.HttpRoute(this, "proxy-route-root", {
|
|
89
|
+
httpApi: this.coreHttpApi,
|
|
90
|
+
routeKey: aws_apigatewayv2_1.HttpRouteKey.with("/", aws_apigatewayv2_1.HttpMethod.ANY),
|
|
91
|
+
integration,
|
|
92
|
+
});
|
|
93
|
+
new aws_apigatewayv2_1.HttpRoute(this, "proxy-route", {
|
|
94
|
+
httpApi: this.coreHttpApi,
|
|
95
|
+
routeKey: aws_apigatewayv2_1.HttpRouteKey.with("/{proxy+}", aws_apigatewayv2_1.HttpMethod.ANY),
|
|
96
|
+
integration,
|
|
97
|
+
});
|
|
98
|
+
// Point DNS at the API Gateway custom domain
|
|
99
|
+
new aws_route53_1.ARecord(this, "api-a-record", {
|
|
100
|
+
zone: hostedZone,
|
|
101
|
+
recordName: apiPrefix,
|
|
102
|
+
target: aws_route53_1.RecordTarget.fromAlias(new aws_route53_targets_1.ApiGatewayv2DomainProperties(domainName.regionalDomainName, domainName.regionalHostedZoneId)),
|
|
103
|
+
});
|
|
104
|
+
}
|
|
105
|
+
}
|
|
106
|
+
exports.OpenHiRestApiService = OpenHiRestApiService;
|
|
107
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoib3Blbi1oaS1yZXN0LWFwaS1zZXJ2aWNlLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vc3JjL3NlcnZpY2VzL29wZW4taGktcmVzdC1hcGktc2VydmljZS50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiOzs7QUFBQSxtRUFLc0M7QUFDdEMsNkZBQWtGO0FBQ2xGLHlEQUE0RTtBQUM1RSx5RUFBK0U7QUFFL0UsNERBSWdDO0FBQ2hDLDJGQUFzRjtBQUN0RiwyRUFBc0U7QUFDdEUsc0ZBQWdGO0FBQ2hGLDJDQUFnRTtBQUNoRSxvRUFBK0Q7QUFJL0Q7OztHQUdHO0FBQ1UsUUFBQSwwQkFBMEIsR0FBRyxtQkFBbUIsQ0FBQztBQUU5RDs7R0FFRztBQUNILE1BQWEsb0JBQXFCLFNBQVEsK0JBQWE7SUFHckQsWUFBWSxLQUF3QixFQUFFLFFBQW1DLEVBQUU7UUFDekUsS0FBSyxDQUFDLEtBQUssRUFBRSxzQ0FBb0IsQ0FBQyxRQUFRLEVBQUUsS0FBSyxDQUFDLENBQUM7UUFFbkQ7OztXQUdHO1FBQ0gsTUFBTSxFQUFFLE1BQU0sRUFBRSxHQUFHLEtBQUssQ0FBQztRQUV6QixJQUFJLENBQUMsTUFBTSxFQUFFLENBQUM7WUFDWixNQUFNLElBQUksS0FBSyxDQUFDLG9CQUFvQixDQUFDLENBQUM7UUFDeEMsQ0FBQztRQUNELElBQUksQ0FBQyxNQUFNLENBQUMsWUFBWSxFQUFFLENBQUM7WUFDekIsTUFBTSxJQUFJLEtBQUssQ0FBQyw0QkFBNEIsQ0FBQyxDQUFDO1FBQ2hELENBQUM7UUFDRCxJQUFJLENBQUMsTUFBTSxDQUFDLFFBQVEsRUFBRSxDQUFDO1lBQ3JCLE1BQU0sSUFBSSxLQUFLLENBQUMsdUJBQXVCLENBQUMsQ0FBQztRQUMzQyxDQUFDO1FBRUQ7Ozs7b0ZBSTRFO1FBRTVFLE1BQU0sVUFBVSxHQUFHLHdCQUFVLENBQUMsd0JBQXdCLENBQUMsSUFBSSxFQUFFLFdBQVcsRUFBRTtZQUN4RSxZQUFZLEVBQUUsTUFBTSxDQUFDLFlBQVk7WUFDakMsUUFBUSxFQUFFLE1BQU0sQ0FBQyxRQUFRO1NBQzFCLENBQUMsQ0FBQztRQUVILE1BQU0sV0FBVyxHQUFHLG1EQUF1QixDQUFDLGFBQWEsQ0FBQyxJQUFJLENBQUMsQ0FBQztRQUVoRSxNQUFNLFNBQVMsR0FDYixJQUFJLENBQUMsVUFBVSxLQUFLLE1BQU0sQ0FBQyxDQUFDLENBQUMsS0FBSyxDQUFDLENBQUMsQ0FBQyxPQUFPLElBQUksQ0FBQyxlQUFlLEVBQUUsQ0FBQztRQUNyRSxNQUFNLGFBQWEsR0FBRyxDQUFDLFNBQVMsRUFBRSxVQUFVLENBQUMsUUFBUSxDQUFDLENBQUMsSUFBSSxDQUFDLEdBQUcsQ0FBQyxDQUFDO1FBQ2pFLE1BQU0sY0FBYyxHQUFHLFdBQVcsYUFBYSxFQUFFLENBQUM7UUFFbEQsSUFBSSxpQ0FBMkIsQ0FBQyxJQUFJLEVBQUUseUJBQXlCLEVBQUU7WUFDL0QsWUFBWSxFQUFFLGtDQUEwQjtZQUN4QyxXQUFXLEVBQUUsY0FBYztZQUMzQixXQUFXLEVBQUUsc0RBQXNEO1NBQ3BFLENBQUMsQ0FBQztRQUVILE1BQU0sVUFBVSxHQUFHLElBQUksNkJBQVUsQ0FBQyxJQUFJLEVBQUUsUUFBUSxFQUFFO1lBQ2hELFVBQVUsRUFBRSxhQUFhO1lBQ3pCLFdBQVc7U0FDWixDQUFDLENBQUM7UUFFSDs7OztvRkFJNEU7UUFFNUUsSUFBSSxDQUFDLFdBQVcsR0FBRyxJQUFJLDJCQUFXLENBQUMsSUFBSSxFQUFFO1lBQ3ZDLG9CQUFvQixFQUFFO2dCQUNwQixVQUFVO2dCQUNWLFVBQVUsRUFBRSxTQUFTLEVBQUUsMEJBQTBCO2FBQ2xEO1NBQ0YsQ0FBQyxDQUFDO1FBRUg7O1dBRUc7UUFDSCxNQUFNLGNBQWMsR0FBRyx3Q0FBaUIsQ0FBQyxhQUFhLENBQUMsSUFBSSxDQUFDLENBQUM7UUFDN0QsTUFBTSxFQUFFLE1BQU0sRUFBRSxHQUFHLElBQUksK0JBQWEsQ0FBQyxJQUFJLEVBQUU7WUFDekMsZUFBZSxFQUFFLGNBQWMsQ0FBQyxTQUFTO1NBQzFDLENBQUMsQ0FBQztRQUNILDhGQUE4RjtRQUM5RixjQUFjLENBQUMsS0FBSyxDQUNsQixNQUFNLEVBQ04sa0JBQWtCLEVBQ2xCLGdCQUFnQixFQUNoQix1QkFBdUIsRUFDdkIsNkJBQTZCLEVBQzdCLHdCQUF3QixFQUN4Qix5QkFBeUIsRUFDekIsa0JBQWtCLEVBQ2xCLHFCQUFxQixFQUNyQixxQkFBcUIsQ0FDdEIsQ0FBQztRQUVGOztXQUVHO1FBQ0gsTUFBTSxXQUFXLEdBQUcsSUFBSSxxREFBcUIsQ0FBQyxvQkFBb0IsRUFBRSxNQUFNLENBQUMsQ0FBQztRQUU1RTs7V0FFRztRQUNILElBQUksNEJBQVMsQ0FBQyxJQUFJLEVBQUUsa0JBQWtCLEVBQUU7WUFDdEMsT0FBTyxFQUFFLElBQUksQ0FBQyxXQUFXO1lBQ3pCLFFBQVEsRUFBRSwrQkFBWSxDQUFDLElBQUksQ0FBQyxHQUFHLEVBQUUsNkJBQVUsQ0FBQyxHQUFHLENBQUM7WUFDaEQsV0FBVztTQUNaLENBQUMsQ0FBQztRQUNILElBQUksNEJBQVMsQ0FBQyxJQUFJLEVBQUUsYUFBYSxFQUFFO1lBQ2pDLE9BQU8sRUFBRSxJQUFJLENBQUMsV0FBVztZQUN6QixRQUFRLEVBQUUsK0JBQVksQ0FBQyxJQUFJLENBQUMsV0FBVyxFQUFFLDZCQUFVLENBQUMsR0FBRyxDQUFDO1lBQ3hELFdBQVc7U0FDWixDQUFDLENBQUM7UUFFSCw4Q0FBOEM7UUFDOUMsSUFBSSxxQkFBTyxDQUFDLElBQUksRUFBRSxjQUFjLEVBQUU7WUFDaEMsSUFBSSxFQUFFLFVBQVU7WUFDaEIsVUFBVSxFQUFFLFNBQVM7WUFDckIsTUFBTSxFQUFFLDBCQUFZLENBQUMsU0FBUyxDQUM1QixJQUFJLGtEQUE0QixDQUM5QixVQUFVLENBQUMsa0JBQWtCLEVBQzdCLFVBQVUsQ0FBQyxvQkFBb0IsQ0FDaEMsQ0FDRjtTQUNGLENBQUMsQ0FBQztJQUNMLENBQUM7Q0FDRjtBQXBIRCxvREFvSEMiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQge1xuICBEb21haW5OYW1lLFxuICBIdHRwTWV0aG9kLFxuICBIdHRwUm91dGUsXG4gIEh0dHBSb3V0ZUtleSxcbn0gZnJvbSBcImF3cy1jZGstbGliL2F3cy1hcGlnYXRld2F5djJcIjtcbmltcG9ydCB7IEh0dHBMYW1iZGFJbnRlZ3JhdGlvbiB9IGZyb20gXCJhd3MtY2RrLWxpYi9hd3MtYXBpZ2F0ZXdheXYyLWludGVncmF0aW9uc1wiO1xuaW1wb3J0IHsgQVJlY29yZCwgSG9zdGVkWm9uZSwgUmVjb3JkVGFyZ2V0IH0gZnJvbSBcImF3cy1jZGstbGliL2F3cy1yb3V0ZTUzXCI7XG5pbXBvcnQgeyBBcGlHYXRld2F5djJEb21haW5Qcm9wZXJ0aWVzIH0gZnJvbSBcImF3cy1jZGstbGliL2F3cy1yb3V0ZTUzLXRhcmdldHNcIjtcbmltcG9ydCB7IE9wZW5IaUVudmlyb25tZW50IH0gZnJvbSBcIi4uL2FwcC9vcGVuLWhpLWVudmlyb25tZW50XCI7XG5pbXBvcnQge1xuICBPUEVOX0hJX1NFUlZJQ0VfVFlQRSxcbiAgT3BlbkhpU2VydmljZSxcbiAgT3BlbkhpU2VydmljZVByb3BzLFxufSBmcm9tIFwiLi4vYXBwL29wZW4taGktc2VydmljZVwiO1xuaW1wb3J0IHsgUm9vdFdpbGRjYXJkQ2VydGlmaWNhdGUgfSBmcm9tIFwiLi4vY29tcG9uZW50cy9hY20vcm9vdC13aWxkY2FyZC1jZXJ0aWZpY2F0ZVwiO1xuaW1wb3J0IHsgQ29yZUh0dHBBcGkgfSBmcm9tIFwiLi4vY29tcG9uZW50cy9hcGktZ2F0ZXdheS9jb3JlLWh0dHAtYXBpXCI7XG5pbXBvcnQgeyBEeW5hbW9EYkRhdGFTdG9yZSB9IGZyb20gXCIuLi9jb21wb25lbnRzL2R5bmFtb2RiL2R5bmFtby1kYi1kYXRhLXN0b3JlXCI7XG5pbXBvcnQgeyBEaXNjb3ZlcmFibGVTdHJpbmdQYXJhbWV0ZXIgfSBmcm9tIFwiLi4vY29tcG9uZW50cy9zc21cIjtcbmltcG9ydCB7IFJlc3RBcGlMYW1iZGEgfSBmcm9tIFwiLi4vZGF0YS9sYW1iZGEvcmVzdC1hcGktbGFtYmRhXCI7XG5cbmV4cG9ydCBpbnRlcmZhY2UgT3BlbkhpUmVzdEFwaVNlcnZpY2VQcm9wcyBleHRlbmRzIE9wZW5IaVNlcnZpY2VQcm9wcyB7fVxuXG4vKipcbiAqIFNTTSBwYXJhbWV0ZXIgbmFtZSBzdWZmaXggZm9yIHRoZSBSRVNUIEFQSSBiYXNlIFVSTC5cbiAqIEZ1bGwgcGFyYW1ldGVyIG5hbWUgaXMgYnVpbHQgdmlhIGJ1aWxkUGFyYW1ldGVyTmFtZSB3aXRoIHNlcnZpY2VUeXBlIFJFU1RfQVBJLlxuICovXG5leHBvcnQgY29uc3QgUkVTVF9BUElfQkFTRV9VUkxfU1NNX05BTUUgPSBcIlJFU1RfQVBJX0JBU0VfVVJMXCI7XG5cbi8qKlxuICogUkVTVCBBUEkgc2VydmljZSBzdGFjazogSFRUUCBBUEksIGN1c3RvbSBkb21haW4sIGFuZCBMYW1iZGE7IGV4cG9ydHMgYmFzZSBVUkwgdmlhIFNTTS5cbiAqL1xuZXhwb3J0IGNsYXNzIE9wZW5IaVJlc3RBcGlTZXJ2aWNlIGV4dGVuZHMgT3BlbkhpU2VydmljZSB7XG4gIHB1YmxpYyByZWFkb25seSBjb3JlSHR0cEFwaTogQ29yZUh0dHBBcGk7XG5cbiAgY29uc3RydWN0b3Iob2hFbnY6IE9wZW5IaUVudmlyb25tZW50LCBwcm9wczogT3BlbkhpUmVzdEFwaVNlcnZpY2VQcm9wcyA9IHt9KSB7XG4gICAgc3VwZXIob2hFbnYsIE9QRU5fSElfU0VSVklDRV9UWVBFLlJFU1RfQVBJLCBwcm9wcyk7XG5cbiAgICAvKipcbiAgICAgKiBVbnBhY2sgc29tZSBpbmNvbWluZyBwcm9wcy4gRG9uJ3QgcGFzcyBjb25maWcgaW50byBjb25zdHJ1Y3RzLFxuICAgICAqIGRlY29uc3RydWN0IHdoYXQgeW91IG5lZWQgYW5kIHBhc3MgdGhvc2UgdmFsdWVzIGludG8gdGhlIGNvbnN0cnVjdC5cbiAgICAgKi9cbiAgICBjb25zdCB7IGNvbmZpZyB9ID0gcHJvcHM7XG5cbiAgICBpZiAoIWNvbmZpZykge1xuICAgICAgdGhyb3cgbmV3IEVycm9yKFwiQ29uZmlnIGlzIHJlcXVpcmVkXCIpO1xuICAgIH1cbiAgICBpZiAoIWNvbmZpZy5ob3N0ZWRab25lSWQpIHtcbiAgICAgIHRocm93IG5ldyBFcnJvcihcIkhvc3RlZCB6b25lIElEIGlzIHJlcXVpcmVkXCIpO1xuICAgIH1cbiAgICBpZiAoIWNvbmZpZy56b25lTmFtZSkge1xuICAgICAgdGhyb3cgbmV3IEVycm9yKFwiWm9uZSBuYW1lIGlzIHJlcXVpcmVkXCIpO1xuICAgIH1cblxuICAgIC8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKipcbiAgICAgKlxuICAgICAqIEROUyBmb3IgdGhlIEFQSSBFbmRwb2ludFxuICAgICAqXG4gICAgICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqL1xuXG4gICAgY29uc3QgaG9zdGVkWm9uZSA9IEhvc3RlZFpvbmUuZnJvbUhvc3RlZFpvbmVBdHRyaWJ1dGVzKHRoaXMsIFwicm9vdC16b25lXCIsIHtcbiAgICAgIGhvc3RlZFpvbmVJZDogY29uZmlnLmhvc3RlZFpvbmVJZCxcbiAgICAgIHpvbmVOYW1lOiBjb25maWcuem9uZU5hbWUsXG4gICAgfSk7XG5cbiAgICBjb25zdCBjZXJ0aWZpY2F0ZSA9IFJvb3RXaWxkY2FyZENlcnRpZmljYXRlLmZyb21Db25zdHJ1Y3QodGhpcyk7XG5cbiAgICBjb25zdCBhcGlQcmVmaXggPVxuICAgICAgdGhpcy5icmFuY2hOYW1lID09PSBcIm1haW5cIiA/IGBhcGlgIDogYGFwaS0ke3RoaXMuY2hpbGRab25lUHJlZml4fWA7XG4gICAgY29uc3QgYXBpRG9tYWluTmFtZSA9IFthcGlQcmVmaXgsIGhvc3RlZFpvbmUuem9uZU5hbWVdLmpvaW4oXCIuXCIpO1xuICAgIGNvbnN0IHJlc3RBcGlCYXNlVXJsID0gYGh0dHBzOi8vJHthcGlEb21haW5OYW1lfWA7XG5cbiAgICBuZXcgRGlzY292ZXJhYmxlU3RyaW5nUGFyYW1ldGVyKHRoaXMsIFwicmVzdC1hcGktYmFzZS11cmwtcGFyYW1cIiwge1xuICAgICAgc3NtUGFyYW1OYW1lOiBSRVNUX0FQSV9CQVNFX1VSTF9TU01fTkFNRSxcbiAgICAgIHN0cmluZ1ZhbHVlOiByZXN0QXBpQmFzZVVybCxcbiAgICAgIGRlc2NyaXB0aW9uOiBcIlJFU1QgQVBJIGJhc2UgVVJMIGZvciB0aGlzIGRlcGxveW1lbnQgKEUyRSwgc2NyaXB0cylcIixcbiAgICB9KTtcblxuICAgIGNvbnN0IGRvbWFpbk5hbWUgPSBuZXcgRG9tYWluTmFtZSh0aGlzLCBcImRvbWFpblwiLCB7XG4gICAgICBkb21haW5OYW1lOiBhcGlEb21haW5OYW1lLFxuICAgICAgY2VydGlmaWNhdGUsXG4gICAgfSk7XG5cbiAgICAvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqXG4gICAgICpcbiAgICAgKiBDb3JlIERhdGEgQVBJIERlZmluaXRpb25cbiAgICAgKlxuICAgICAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi9cblxuICAgIHRoaXMuY29yZUh0dHBBcGkgPSBuZXcgQ29yZUh0dHBBcGkodGhpcywge1xuICAgICAgZGVmYXVsdERvbWFpbk1hcHBpbmc6IHtcbiAgICAgICAgZG9tYWluTmFtZSxcbiAgICAgICAgbWFwcGluZ0tleTogdW5kZWZpbmVkLCAvLyBzZXJ2ZSBhdCByb290IG9mIGRvbWFpblxuICAgICAgfSxcbiAgICB9KTtcblxuICAgIC8qKlxuICAgICAqIENyZWF0ZSBhIExhbWJkYSBmdW5jdGlvblxuICAgICAqL1xuICAgIGNvbnN0IGRhdGFTdG9yZVRhYmxlID0gRHluYW1vRGJEYXRhU3RvcmUuZnJvbUNvbnN0cnVjdCh0aGlzKTtcbiAgICBjb25zdCB7IGxhbWJkYSB9ID0gbmV3IFJlc3RBcGlMYW1iZGEodGhpcywge1xuICAgICAgZHluYW1vVGFibGVOYW1lOiBkYXRhU3RvcmVUYWJsZS50YWJsZU5hbWUsXG4gICAgfSk7XG4gICAgLy8gRXhwbGljaXQgRHluYW1vREIgYWN0aW9ucyBvbmx5OyBTY2FuIGlzIGludGVudGlvbmFsbHkgb21pdHRlZCB0byBlbmZvcmNlIHF1ZXJ5LW9ubHkgYWNjZXNzLlxuICAgIGRhdGFTdG9yZVRhYmxlLmdyYW50KFxuICAgICAgbGFtYmRhLFxuICAgICAgXCJkeW5hbW9kYjpHZXRJdGVtXCIsXG4gICAgICBcImR5bmFtb2RiOlF1ZXJ5XCIsXG4gICAgICBcImR5bmFtb2RiOkJhdGNoR2V0SXRlbVwiLFxuICAgICAgXCJkeW5hbW9kYjpDb25kaXRpb25DaGVja0l0ZW1cIixcbiAgICAgIFwiZHluYW1vZGI6RGVzY3JpYmVUYWJsZVwiLFxuICAgICAgXCJkeW5hbW9kYjpCYXRjaFdyaXRlSXRlbVwiLFxuICAgICAgXCJkeW5hbW9kYjpQdXRJdGVtXCIsXG4gICAgICBcImR5bmFtb2RiOlVwZGF0ZUl0ZW1cIixcbiAgICAgIFwiZHluYW1vZGI6RGVsZXRlSXRlbVwiLFxuICAgICk7XG5cbiAgICAvKipcbiAgICAgKiBJbnRlZ3JhdGUgTGFtYmRhIHdpdGggSFRUUCBBUElcbiAgICAgKi9cbiAgICBjb25zdCBpbnRlZ3JhdGlvbiA9IG5ldyBIdHRwTGFtYmRhSW50ZWdyYXRpb24oXCJsYW1iZGEtaW50ZWdyYXRpb25cIiwgbGFtYmRhKTtcblxuICAgIC8qKlxuICAgICAqIFByb3h5IGFsbCByZXF1ZXN0cyB0byB0aGUgTGFtYmRhIChyb290IGFuZCBhbGwgcGF0aHMpXG4gICAgICovXG4gICAgbmV3IEh0dHBSb3V0ZSh0aGlzLCBcInByb3h5LXJvdXRlLXJvb3RcIiwge1xuICAgICAgaHR0cEFwaTogdGhpcy5jb3JlSHR0cEFwaSxcbiAgICAgIHJvdXRlS2V5OiBIdHRwUm91dGVLZXkud2l0aChcIi9cIiwgSHR0cE1ldGhvZC5BTlkpLFxuICAgICAgaW50ZWdyYXRpb24sXG4gICAgfSk7XG4gICAgbmV3IEh0dHBSb3V0ZSh0aGlzLCBcInByb3h5LXJvdXRlXCIsIHtcbiAgICAgIGh0dHBBcGk6IHRoaXMuY29yZUh0dHBBcGksXG4gICAgICByb3V0ZUtleTogSHR0cFJvdXRlS2V5LndpdGgoXCIve3Byb3h5K31cIiwgSHR0cE1ldGhvZC5BTlkpLFxuICAgICAgaW50ZWdyYXRpb24sXG4gICAgfSk7XG5cbiAgICAvLyBQb2ludCBETlMgIGF0IHRoZSBBUEkgR2F0ZXdheSBjdXN0b20gZG9tYWluXG4gICAgbmV3IEFSZWNvcmQodGhpcywgXCJhcGktYS1yZWNvcmRcIiwge1xuICAgICAgem9uZTogaG9zdGVkWm9uZSxcbiAgICAgIHJlY29yZE5hbWU6IGFwaVByZWZpeCxcbiAgICAgIHRhcmdldDogUmVjb3JkVGFyZ2V0LmZyb21BbGlhcyhcbiAgICAgICAgbmV3IEFwaUdhdGV3YXl2MkRvbWFpblByb3BlcnRpZXMoXG4gICAgICAgICAgZG9tYWluTmFtZS5yZWdpb25hbERvbWFpbk5hbWUsXG4gICAgICAgICAgZG9tYWluTmFtZS5yZWdpb25hbEhvc3RlZFpvbmVJZCxcbiAgICAgICAgKSxcbiAgICAgICksXG4gICAgfSk7XG4gIH1cbn1cbiJdfQ==
|
package/package.json
ADDED
|
@@ -0,0 +1,67 @@
|
|
|
1
|
+
{
|
|
2
|
+
"name": "@openhi/constructs",
|
|
3
|
+
"scripts": {
|
|
4
|
+
"build": "npx projen build",
|
|
5
|
+
"compile": "npx projen compile",
|
|
6
|
+
"default": "npx projen default",
|
|
7
|
+
"eslint": "npx projen eslint",
|
|
8
|
+
"import-patient": "npx projen import-patient",
|
|
9
|
+
"package": "npx projen package",
|
|
10
|
+
"post-compile": "npx projen post-compile",
|
|
11
|
+
"post-upgrade": "npx projen post-upgrade",
|
|
12
|
+
"pre-compile": "npx projen pre-compile",
|
|
13
|
+
"reset": "npx projen reset",
|
|
14
|
+
"run-lambda-local": "npx projen run-lambda-local",
|
|
15
|
+
"test": "npx projen test",
|
|
16
|
+
"test:watch": "npx projen test:watch",
|
|
17
|
+
"upgrade": "npx projen upgrade",
|
|
18
|
+
"watch": "npx projen watch",
|
|
19
|
+
"projen": "npx projen"
|
|
20
|
+
},
|
|
21
|
+
"devDependencies": {
|
|
22
|
+
"@swc/core": "^1.15.11",
|
|
23
|
+
"@swc/jest": "^0.2.39",
|
|
24
|
+
"@types/cors": "^2.8.19",
|
|
25
|
+
"@types/express": "5.0.6",
|
|
26
|
+
"@types/jest": "^30.0.0",
|
|
27
|
+
"@types/node": "^22.19.11",
|
|
28
|
+
"@typescript-eslint/eslint-plugin": "^8",
|
|
29
|
+
"@typescript-eslint/parser": "^8",
|
|
30
|
+
"aws-cdk-lib": "catalog:",
|
|
31
|
+
"constructs": "catalog:",
|
|
32
|
+
"copyfiles": "^2.4.1",
|
|
33
|
+
"eslint": "^9",
|
|
34
|
+
"eslint-config-prettier": "^10.1.8",
|
|
35
|
+
"eslint-import-resolver-typescript": "^4.4.4",
|
|
36
|
+
"eslint-plugin-import": "^2.32.0",
|
|
37
|
+
"eslint-plugin-prettier": "^5.5.5",
|
|
38
|
+
"jest": "^30.2.0",
|
|
39
|
+
"jest-dynalite": "^3.6.1",
|
|
40
|
+
"jest-junit": "^16",
|
|
41
|
+
"prettier": "^3.8.1",
|
|
42
|
+
"typescript": "^5.9.3"
|
|
43
|
+
},
|
|
44
|
+
"peerDependencies": {
|
|
45
|
+
"aws-cdk-lib": "catalog:",
|
|
46
|
+
"constructs": "catalog:"
|
|
47
|
+
},
|
|
48
|
+
"dependencies": {
|
|
49
|
+
"@aws-sdk/client-dynamodb": "^3.990.0",
|
|
50
|
+
"@codedrifters/utils": "^0.0.0",
|
|
51
|
+
"@codegenie/serverless-express": "^4.17.1",
|
|
52
|
+
"@openhi/config": "workspace:*",
|
|
53
|
+
"@types/aws-lambda": "^8.10.160",
|
|
54
|
+
"awscdk-appsync-utils": "^0.0.850",
|
|
55
|
+
"change-case": "^4.0",
|
|
56
|
+
"cors": "^2.8.6",
|
|
57
|
+
"electrodb": "^3.5.3",
|
|
58
|
+
"express": "^5.2.1",
|
|
59
|
+
"type-fest": "^4"
|
|
60
|
+
},
|
|
61
|
+
"main": "lib/index.js",
|
|
62
|
+
"license": "UNLICENSED",
|
|
63
|
+
"version": "0.0.0",
|
|
64
|
+
"types": "lib/index.d.ts",
|
|
65
|
+
"packageManager": "pnpm@10.29.3",
|
|
66
|
+
"//": "~~ Generated by projen. To modify, edit .projenrc.js and run \"npx projen\"."
|
|
67
|
+
}
|