@openhi/constructs 0.0.0 → 0.0.1

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (101) hide show
  1. package/lib/chunk-LZOMFHX3.mjs +38 -0
  2. package/lib/chunk-LZOMFHX3.mjs.map +1 -0
  3. package/lib/index.d.mts +664 -0
  4. package/lib/index.d.ts +745 -3
  5. package/lib/index.js +1133 -19
  6. package/lib/index.js.map +1 -0
  7. package/lib/index.mjs +1120 -0
  8. package/lib/index.mjs.map +1 -0
  9. package/lib/rest-api-lambda.handler.d.mts +6 -0
  10. package/lib/rest-api-lambda.handler.d.ts +6 -0
  11. package/lib/rest-api-lambda.handler.js +677 -0
  12. package/lib/rest-api-lambda.handler.js.map +1 -0
  13. package/lib/rest-api-lambda.handler.mjs +646 -0
  14. package/lib/rest-api-lambda.handler.mjs.map +1 -0
  15. package/package.json +37 -28
  16. package/lib/app/index.d.ts +0 -4
  17. package/lib/app/index.js +0 -21
  18. package/lib/app/open-hi-app.d.ts +0 -85
  19. package/lib/app/open-hi-app.js +0 -127
  20. package/lib/app/open-hi-environment.d.ts +0 -59
  21. package/lib/app/open-hi-environment.js +0 -72
  22. package/lib/app/open-hi-service.d.ts +0 -169
  23. package/lib/app/open-hi-service.js +0 -195
  24. package/lib/app/open-hi-stage.d.ts +0 -71
  25. package/lib/app/open-hi-stage.js +0 -70
  26. package/lib/components/acm/root-wildcard-certificate.d.ts +0 -15
  27. package/lib/components/acm/root-wildcard-certificate.js +0 -35
  28. package/lib/components/api-gateway/core-http-api.d.ts +0 -10
  29. package/lib/components/api-gateway/core-http-api.js +0 -44
  30. package/lib/components/api-gateway/http-lambda-integration-no-permissions.d.ts +0 -18
  31. package/lib/components/api-gateway/http-lambda-integration-no-permissions.js +0 -26
  32. package/lib/components/app-sync/core-graphql-api.d.ts +0 -12
  33. package/lib/components/app-sync/core-graphql-api.js +0 -54
  34. package/lib/components/auth.d.ts +0 -75
  35. package/lib/components/auth.js +0 -100
  36. package/lib/components/cognito/core-user-pool-client.d.ts +0 -10
  37. package/lib/components/cognito/core-user-pool-client.js +0 -47
  38. package/lib/components/cognito/core-user-pool-domain.d.ts +0 -10
  39. package/lib/components/cognito/core-user-pool-domain.js +0 -41
  40. package/lib/components/cognito/core-user-pool-kms-key.d.ts +0 -10
  41. package/lib/components/cognito/core-user-pool-kms-key.js +0 -37
  42. package/lib/components/cognito/core-user-pool.d.ts +0 -10
  43. package/lib/components/cognito/core-user-pool.js +0 -54
  44. package/lib/components/core.d.ts +0 -102
  45. package/lib/components/core.js +0 -79
  46. package/lib/components/dynamodb/dynamo-db-data-store.d.ts +0 -33
  47. package/lib/components/dynamodb/dynamo-db-data-store.js +0 -107
  48. package/lib/components/event-bridge/data-event-bus.d.ts +0 -19
  49. package/lib/components/event-bridge/data-event-bus.js +0 -34
  50. package/lib/components/event-bridge/ops-event-bus.d.ts +0 -19
  51. package/lib/components/event-bridge/ops-event-bus.js +0 -34
  52. package/lib/components/global.d.ts +0 -36
  53. package/lib/components/global.js +0 -63
  54. package/lib/components/index.d.ts +0 -1
  55. package/lib/components/index.js +0 -18
  56. package/lib/components/route-53/child-hosted-zone.d.ts +0 -20
  57. package/lib/components/route-53/child-hosted-zone.js +0 -48
  58. package/lib/components/route-53/root-hosted-zone.d.ts +0 -10
  59. package/lib/components/route-53/root-hosted-zone.js +0 -20
  60. package/lib/components/ssm/discoverable-string-parameter.d.ts +0 -59
  61. package/lib/components/ssm/discoverable-string-parameter.js +0 -50
  62. package/lib/components/ssm/index.d.ts +0 -1
  63. package/lib/components/ssm/index.js +0 -18
  64. package/lib/data/dynamo/ehr/r4/Patient.d.ts +0 -180
  65. package/lib/data/dynamo/ehr/r4/Patient.js +0 -192
  66. package/lib/data/dynamo/ehr/r4/ehr-r4-data-service.d.ts +0 -162
  67. package/lib/data/dynamo/ehr/r4/ehr-r4-data-service.js +0 -37
  68. package/lib/data/hello-world.d.ts +0 -39
  69. package/lib/data/hello-world.js +0 -59
  70. package/lib/data/import-patient-with-dynalite.d.ts +0 -1
  71. package/lib/data/import-patient-with-dynalite.js +0 -87
  72. package/lib/data/import-patient.d.ts +0 -47
  73. package/lib/data/import-patient.js +0 -158
  74. package/lib/data/lambda/rest-api-lambda.d.ts +0 -13
  75. package/lib/data/lambda/rest-api-lambda.handler.d.ts +0 -1
  76. package/lib/data/lambda/rest-api-lambda.handler.js +0 -10
  77. package/lib/data/lambda/rest-api-lambda.js +0 -22
  78. package/lib/data/middleware/open-hi-context.d.ts +0 -13
  79. package/lib/data/middleware/open-hi-context.js +0 -31
  80. package/lib/data/rest-api/ehr/r4/Patient.d.ts +0 -16
  81. package/lib/data/rest-api/ehr/r4/Patient.js +0 -234
  82. package/lib/data/rest-api/rest-api-local.d.ts +0 -1
  83. package/lib/data/rest-api/rest-api-local.js +0 -8
  84. package/lib/data/rest-api/rest-api-mockdata.d.ts +0 -7
  85. package/lib/data/rest-api/rest-api-mockdata.js +0 -585
  86. package/lib/data/rest-api/rest-api.d.ts +0 -3
  87. package/lib/data/rest-api/rest-api.js +0 -26
  88. package/lib/lib/compression.d.ts +0 -27
  89. package/lib/lib/compression.js +0 -87
  90. package/lib/services/index.d.ts +0 -5
  91. package/lib/services/index.js +0 -22
  92. package/lib/services/open-hi-auth-service.d.ts +0 -31
  93. package/lib/services/open-hi-auth-service.js +0 -31
  94. package/lib/services/open-hi-core-service.d.ts +0 -15
  95. package/lib/services/open-hi-core-service.js +0 -38
  96. package/lib/services/open-hi-data-service.d.ts +0 -18
  97. package/lib/services/open-hi-data-service.js +0 -18
  98. package/lib/services/open-hi-global-service.d.ts +0 -15
  99. package/lib/services/open-hi-global-service.js +0 -44
  100. package/lib/services/open-hi-rest-api-service.d.ts +0 -17
  101. package/lib/services/open-hi-rest-api-service.js +0 -107
@@ -1,162 +0,0 @@
1
- import { Service } from "electrodb";
2
- /**
3
- * ElectroDB Service for the single-table data store. Provides access to Patient
4
- * and other entities; use with the data store table (PK, SK, GSI1, GSI2, GSI3, GSI4).
5
- */
6
- export declare const EhrR4DataService: Service<{
7
- patient: import("electrodb").Entity<string, string, string, {
8
- model: {
9
- entity: string;
10
- service: string;
11
- version: string;
12
- };
13
- attributes: {
14
- sk: {
15
- type: "string";
16
- required: true;
17
- default: string;
18
- };
19
- tenantId: {
20
- type: "string";
21
- required: true;
22
- };
23
- workspaceId: {
24
- type: "string";
25
- required: true;
26
- };
27
- id: {
28
- type: "string";
29
- required: true;
30
- };
31
- resource: {
32
- type: "string";
33
- required: true;
34
- };
35
- vid: {
36
- type: "string";
37
- required: true;
38
- };
39
- lastUpdated: {
40
- type: "string";
41
- required: true;
42
- };
43
- deleted: {
44
- type: "boolean";
45
- required: false;
46
- };
47
- bundleId: {
48
- type: "string";
49
- required: false;
50
- };
51
- msgId: {
52
- type: "string";
53
- required: false;
54
- };
55
- identifierSystem: {
56
- type: "string";
57
- required: false;
58
- };
59
- identifierValue: {
60
- type: "string";
61
- required: false;
62
- };
63
- resourcePk: {
64
- type: "string";
65
- required: false;
66
- };
67
- resourceSk: {
68
- type: "string";
69
- required: false;
70
- };
71
- display: {
72
- type: "string";
73
- required: false;
74
- };
75
- status: {
76
- type: "string";
77
- required: false;
78
- };
79
- facilityId: {
80
- type: "string";
81
- required: false;
82
- };
83
- normalizedName: {
84
- type: "string";
85
- required: false;
86
- };
87
- };
88
- indexes: {
89
- record: {
90
- pk: {
91
- field: string;
92
- composite: ("id" | "tenantId" | "workspaceId")[];
93
- template: string;
94
- };
95
- sk: {
96
- field: string;
97
- composite: "sk"[];
98
- };
99
- };
100
- gsi1: {
101
- index: string;
102
- condition: () => boolean;
103
- pk: {
104
- field: string;
105
- composite: ("id" | "tenantId" | "workspaceId")[];
106
- template: string;
107
- };
108
- sk: {
109
- field: string;
110
- composite: never[];
111
- };
112
- };
113
- gsi2: {
114
- index: string;
115
- condition: (attr: Record<string, unknown>) => boolean;
116
- pk: {
117
- field: string;
118
- composite: ("tenantId" | "workspaceId" | "identifierSystem" | "identifierValue")[];
119
- template: string;
120
- };
121
- sk: {
122
- field: string;
123
- composite: "id"[];
124
- template: string;
125
- };
126
- };
127
- gsi3: {
128
- index: string;
129
- condition: (attr: Record<string, unknown>) => boolean;
130
- pk: {
131
- field: string;
132
- composite: ("tenantId" | "workspaceId" | "facilityId")[];
133
- template: string;
134
- };
135
- sk: {
136
- field: string;
137
- composite: ("id" | "normalizedName")[];
138
- template: string;
139
- };
140
- };
141
- gsi4: {
142
- index: string;
143
- condition: () => boolean;
144
- pk: {
145
- field: string;
146
- composite: ("tenantId" | "workspaceId")[];
147
- template: string;
148
- };
149
- sk: {
150
- field: string;
151
- composite: "id"[];
152
- template: string;
153
- };
154
- };
155
- };
156
- }>;
157
- }>;
158
- /**
159
- * Returns an ElectroDB Service for the data store using the given table name.
160
- * Use in tests with a dedicated table (e.g. "data-store-test" in jest-dynalite).
161
- */
162
- export declare function getEhrR4DataService(tableName: string): typeof EhrR4DataService;
@@ -1,37 +0,0 @@
1
- "use strict";
2
- Object.defineProperty(exports, "__esModule", { value: true });
3
- exports.EhrR4DataService = void 0;
4
- exports.getEhrR4DataService = getEhrR4DataService;
5
- const client_dynamodb_1 = require("@aws-sdk/client-dynamodb");
6
- const electrodb_1 = require("electrodb");
7
- const Patient_1 = require("./Patient");
8
- /**
9
- * DynamoDB table name for the data store. Set via DYNAMO_TABLE_NAME at runtime
10
- * (e.g. from Lambda env); defaults for local/test.
11
- */
12
- const table = process.env.DYNAMO_TABLE_NAME ?? "jesttesttable";
13
- /**
14
- * DynamoDB client. When MOCK_DYNAMODB_ENDPOINT is set (e.g. local DynamoDB or
15
- * jest-dynalite), uses that endpoint with no SSL and region "local".
16
- */
17
- const client = new client_dynamodb_1.DynamoDBClient({
18
- ...(process.env.MOCK_DYNAMODB_ENDPOINT && {
19
- endpoint: process.env.MOCK_DYNAMODB_ENDPOINT,
20
- sslEnabled: false,
21
- region: "local",
22
- }),
23
- });
24
- const entities = { patient: Patient_1.Patient };
25
- /**
26
- * ElectroDB Service for the single-table data store. Provides access to Patient
27
- * and other entities; use with the data store table (PK, SK, GSI1, GSI2, GSI3, GSI4).
28
- */
29
- exports.EhrR4DataService = new electrodb_1.Service(entities, { table, client });
30
- /**
31
- * Returns an ElectroDB Service for the data store using the given table name.
32
- * Use in tests with a dedicated table (e.g. "data-store-test" in jest-dynalite).
33
- */
34
- function getEhrR4DataService(tableName) {
35
- return new electrodb_1.Service(entities, { table: tableName, client });
36
- }
37
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZWhyLXI0LWRhdGEtc2VydmljZS5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uL3NyYy9kYXRhL2R5bmFtby9laHIvcjQvZWhyLXI0LWRhdGEtc2VydmljZS50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiOzs7QUFrQ0Esa0RBSUM7QUF0Q0QsOERBQTBEO0FBQzFELHlDQUFvQztBQUNwQyx1Q0FBb0M7QUFFcEM7OztHQUdHO0FBQ0gsTUFBTSxLQUFLLEdBQUcsT0FBTyxDQUFDLEdBQUcsQ0FBQyxpQkFBaUIsSUFBSSxlQUFlLENBQUM7QUFFL0Q7OztHQUdHO0FBQ0gsTUFBTSxNQUFNLEdBQUcsSUFBSSxnQ0FBYyxDQUFDO0lBQ2hDLEdBQUcsQ0FBQyxPQUFPLENBQUMsR0FBRyxDQUFDLHNCQUFzQixJQUFJO1FBQ3hDLFFBQVEsRUFBRSxPQUFPLENBQUMsR0FBRyxDQUFDLHNCQUFzQjtRQUM1QyxVQUFVLEVBQUUsS0FBSztRQUNqQixNQUFNLEVBQUUsT0FBTztLQUNoQixDQUFDO0NBQ0gsQ0FBQyxDQUFDO0FBRUgsTUFBTSxRQUFRLEdBQUcsRUFBRSxPQUFPLEVBQUUsaUJBQU8sRUFBRSxDQUFDO0FBRXRDOzs7R0FHRztBQUNVLFFBQUEsZ0JBQWdCLEdBQUcsSUFBSSxtQkFBTyxDQUFDLFFBQVEsRUFBRSxFQUFFLEtBQUssRUFBRSxNQUFNLEVBQUUsQ0FBQyxDQUFDO0FBRXpFOzs7R0FHRztBQUNILFNBQWdCLG1CQUFtQixDQUNqQyxTQUFpQjtJQUVqQixPQUFPLElBQUksbUJBQU8sQ0FBQyxRQUFRLEVBQUUsRUFBRSxLQUFLLEVBQUUsU0FBUyxFQUFFLE1BQU0sRUFBRSxDQUFDLENBQUM7QUFDN0QsQ0FBQyIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IER5bmFtb0RCQ2xpZW50IH0gZnJvbSBcIkBhd3Mtc2RrL2NsaWVudC1keW5hbW9kYlwiO1xuaW1wb3J0IHsgU2VydmljZSB9IGZyb20gXCJlbGVjdHJvZGJcIjtcbmltcG9ydCB7IFBhdGllbnQgfSBmcm9tIFwiLi9QYXRpZW50XCI7XG5cbi8qKlxuICogRHluYW1vREIgdGFibGUgbmFtZSBmb3IgdGhlIGRhdGEgc3RvcmUuIFNldCB2aWEgRFlOQU1PX1RBQkxFX05BTUUgYXQgcnVudGltZVxuICogKGUuZy4gZnJvbSBMYW1iZGEgZW52KTsgZGVmYXVsdHMgZm9yIGxvY2FsL3Rlc3QuXG4gKi9cbmNvbnN0IHRhYmxlID0gcHJvY2Vzcy5lbnYuRFlOQU1PX1RBQkxFX05BTUUgPz8gXCJqZXN0dGVzdHRhYmxlXCI7XG5cbi8qKlxuICogRHluYW1vREIgY2xpZW50LiBXaGVuIE1PQ0tfRFlOQU1PREJfRU5EUE9JTlQgaXMgc2V0IChlLmcuIGxvY2FsIER5bmFtb0RCIG9yXG4gKiBqZXN0LWR5bmFsaXRlKSwgdXNlcyB0aGF0IGVuZHBvaW50IHdpdGggbm8gU1NMIGFuZCByZWdpb24gXCJsb2NhbFwiLlxuICovXG5jb25zdCBjbGllbnQgPSBuZXcgRHluYW1vREJDbGllbnQoe1xuICAuLi4ocHJvY2Vzcy5lbnYuTU9DS19EWU5BTU9EQl9FTkRQT0lOVCAmJiB7XG4gICAgZW5kcG9pbnQ6IHByb2Nlc3MuZW52Lk1PQ0tfRFlOQU1PREJfRU5EUE9JTlQsXG4gICAgc3NsRW5hYmxlZDogZmFsc2UsXG4gICAgcmVnaW9uOiBcImxvY2FsXCIsXG4gIH0pLFxufSk7XG5cbmNvbnN0IGVudGl0aWVzID0geyBwYXRpZW50OiBQYXRpZW50IH07XG5cbi8qKlxuICogRWxlY3Ryb0RCIFNlcnZpY2UgZm9yIHRoZSBzaW5nbGUtdGFibGUgZGF0YSBzdG9yZS4gUHJvdmlkZXMgYWNjZXNzIHRvIFBhdGllbnRcbiAqIGFuZCBvdGhlciBlbnRpdGllczsgdXNlIHdpdGggdGhlIGRhdGEgc3RvcmUgdGFibGUgKFBLLCBTSywgR1NJMSwgR1NJMiwgR1NJMywgR1NJNCkuXG4gKi9cbmV4cG9ydCBjb25zdCBFaHJSNERhdGFTZXJ2aWNlID0gbmV3IFNlcnZpY2UoZW50aXRpZXMsIHsgdGFibGUsIGNsaWVudCB9KTtcblxuLyoqXG4gKiBSZXR1cm5zIGFuIEVsZWN0cm9EQiBTZXJ2aWNlIGZvciB0aGUgZGF0YSBzdG9yZSB1c2luZyB0aGUgZ2l2ZW4gdGFibGUgbmFtZS5cbiAqIFVzZSBpbiB0ZXN0cyB3aXRoIGEgZGVkaWNhdGVkIHRhYmxlIChlLmcuIFwiZGF0YS1zdG9yZS10ZXN0XCIgaW4gamVzdC1keW5hbGl0ZSkuXG4gKi9cbmV4cG9ydCBmdW5jdGlvbiBnZXRFaHJSNERhdGFTZXJ2aWNlKFxuICB0YWJsZU5hbWU6IHN0cmluZyxcbik6IHR5cGVvZiBFaHJSNERhdGFTZXJ2aWNlIHtcbiAgcmV0dXJuIG5ldyBTZXJ2aWNlKGVudGl0aWVzLCB7IHRhYmxlOiB0YWJsZU5hbWUsIGNsaWVudCB9KTtcbn1cbiJdfQ==
@@ -1,39 +0,0 @@
1
- import { Entity, Service } from "electrodb";
2
- export declare const FooModel: Service<{
3
- user: Entity<string, string, string, {
4
- model: {
5
- entity: string;
6
- service: string;
7
- version: string;
8
- };
9
- attributes: {
10
- /**
11
- * Identifier
12
- */
13
- FooId: {
14
- type: "string";
15
- readOnly: true;
16
- required: true;
17
- default: () => `${string}-${string}-${string}-${string}-${string}`;
18
- };
19
- FirstName: {
20
- type: "string";
21
- };
22
- LastName: {
23
- type: "string";
24
- };
25
- };
26
- indexes: {
27
- record: {
28
- pk: {
29
- field: string;
30
- composite: "FooId"[];
31
- };
32
- sk: {
33
- field: string;
34
- composite: "FooId"[];
35
- };
36
- };
37
- };
38
- }>;
39
- }>;
@@ -1,59 +0,0 @@
1
- "use strict";
2
- Object.defineProperty(exports, "__esModule", { value: true });
3
- exports.FooModel = void 0;
4
- const client_dynamodb_1 = require("@aws-sdk/client-dynamodb");
5
- const electrodb_1 = require("electrodb");
6
- /**
7
- * Define the client and table
8
- */
9
- const table = process.env.DYNAMO_TABLE_NAME || "jesttesttable";
10
- const client = new client_dynamodb_1.DynamoDBClient({
11
- ...(process.env.MOCK_DYNAMODB_ENDPOINT && {
12
- endpoint: process.env.MOCK_DYNAMODB_ENDPOINT,
13
- sslEnabled: false,
14
- region: "local",
15
- }),
16
- });
17
- /**
18
- * One user in Cognito can be associated with multiple tenants.
19
- */
20
- const User = new electrodb_1.Entity({
21
- model: {
22
- entity: "foo",
23
- service: "foo",
24
- version: "01",
25
- },
26
- attributes: {
27
- /**
28
- * Identifier
29
- */
30
- FooId: {
31
- type: "string",
32
- readOnly: true,
33
- required: true,
34
- default: () => crypto.randomUUID(),
35
- },
36
- FirstName: {
37
- type: "string",
38
- },
39
- LastName: {
40
- type: "string",
41
- },
42
- },
43
- indexes: {
44
- record: {
45
- pk: {
46
- field: "pk",
47
- composite: ["FooId"],
48
- },
49
- sk: {
50
- field: "sk",
51
- composite: ["FooId"],
52
- },
53
- },
54
- },
55
- });
56
- exports.FooModel = new electrodb_1.Service({
57
- user: User,
58
- }, { table, client });
59
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiaGVsbG8td29ybGQuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi9zcmMvZGF0YS9oZWxsby13b3JsZC50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiOzs7QUFBQSw4REFBMEQ7QUFDMUQseUNBQTRDO0FBRTVDOztHQUVHO0FBQ0gsTUFBTSxLQUFLLEdBQUcsT0FBTyxDQUFDLEdBQUcsQ0FBQyxpQkFBaUIsSUFBSSxlQUFlLENBQUM7QUFFL0QsTUFBTSxNQUFNLEdBQUcsSUFBSSxnQ0FBYyxDQUFDO0lBQ2hDLEdBQUcsQ0FBQyxPQUFPLENBQUMsR0FBRyxDQUFDLHNCQUFzQixJQUFJO1FBQ3hDLFFBQVEsRUFBRSxPQUFPLENBQUMsR0FBRyxDQUFDLHNCQUFzQjtRQUM1QyxVQUFVLEVBQUUsS0FBSztRQUNqQixNQUFNLEVBQUUsT0FBTztLQUNoQixDQUFDO0NBQ0gsQ0FBQyxDQUFDO0FBRUg7O0dBRUc7QUFDSCxNQUFNLElBQUksR0FBRyxJQUFJLGtCQUFNLENBQ3JCO0lBQ0UsS0FBSyxFQUFFO1FBQ0wsTUFBTSxFQUFFLEtBQUs7UUFDYixPQUFPLEVBQUUsS0FBSztRQUNkLE9BQU8sRUFBRSxJQUFJO0tBQ2Q7SUFDRCxVQUFVLEVBQUU7UUFDVjs7V0FFRztRQUNILEtBQUssRUFBRTtZQUNMLElBQUksRUFBRSxRQUFRO1lBQ2QsUUFBUSxFQUFFLElBQUk7WUFDZCxRQUFRLEVBQUUsSUFBSTtZQUNkLE9BQU8sRUFBRSxHQUFHLEVBQUUsQ0FBQyxNQUFNLENBQUMsVUFBVSxFQUFFO1NBQ25DO1FBQ0QsU0FBUyxFQUFFO1lBQ1QsSUFBSSxFQUFFLFFBQVE7U0FDZjtRQUNELFFBQVEsRUFBRTtZQUNSLElBQUksRUFBRSxRQUFRO1NBQ2Y7S0FDRjtJQUVELE9BQU8sRUFBRTtRQUNQLE1BQU0sRUFBRTtZQUNOLEVBQUUsRUFBRTtnQkFDRixLQUFLLEVBQUUsSUFBSTtnQkFDWCxTQUFTLEVBQUUsQ0FBQyxPQUFPLENBQUM7YUFDckI7WUFDRCxFQUFFLEVBQUU7Z0JBQ0YsS0FBSyxFQUFFLElBQUk7Z0JBQ1gsU0FBUyxFQUFFLENBQUMsT0FBTyxDQUFDO2FBQ3JCO1NBQ0Y7S0FDRjtDQUNGLENBRUYsQ0FBQztBQUVXLFFBQUEsUUFBUSxHQUFHLElBQUksbUJBQU8sQ0FDakM7SUFDRSxJQUFJLEVBQUUsSUFBSTtDQUNYLEVBQ0QsRUFBRSxLQUFLLEVBQUUsTUFBTSxFQUFFLENBQ2xCLENBQUMiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBEeW5hbW9EQkNsaWVudCB9IGZyb20gXCJAYXdzLXNkay9jbGllbnQtZHluYW1vZGJcIjtcbmltcG9ydCB7IEVudGl0eSwgU2VydmljZSB9IGZyb20gXCJlbGVjdHJvZGJcIjtcblxuLyoqXG4gKiBEZWZpbmUgdGhlIGNsaWVudCBhbmQgdGFibGVcbiAqL1xuY29uc3QgdGFibGUgPSBwcm9jZXNzLmVudi5EWU5BTU9fVEFCTEVfTkFNRSB8fCBcImplc3R0ZXN0dGFibGVcIjtcblxuY29uc3QgY2xpZW50ID0gbmV3IER5bmFtb0RCQ2xpZW50KHtcbiAgLi4uKHByb2Nlc3MuZW52Lk1PQ0tfRFlOQU1PREJfRU5EUE9JTlQgJiYge1xuICAgIGVuZHBvaW50OiBwcm9jZXNzLmVudi5NT0NLX0RZTkFNT0RCX0VORFBPSU5ULFxuICAgIHNzbEVuYWJsZWQ6IGZhbHNlLFxuICAgIHJlZ2lvbjogXCJsb2NhbFwiLFxuICB9KSxcbn0pO1xuXG4vKipcbiAqIE9uZSB1c2VyIGluIENvZ25pdG8gY2FuIGJlIGFzc29jaWF0ZWQgd2l0aCBtdWx0aXBsZSB0ZW5hbnRzLlxuICovXG5jb25zdCBVc2VyID0gbmV3IEVudGl0eShcbiAge1xuICAgIG1vZGVsOiB7XG4gICAgICBlbnRpdHk6IFwiZm9vXCIsXG4gICAgICBzZXJ2aWNlOiBcImZvb1wiLFxuICAgICAgdmVyc2lvbjogXCIwMVwiLFxuICAgIH0sXG4gICAgYXR0cmlidXRlczoge1xuICAgICAgLyoqXG4gICAgICAgKiBJZGVudGlmaWVyXG4gICAgICAgKi9cbiAgICAgIEZvb0lkOiB7XG4gICAgICAgIHR5cGU6IFwic3RyaW5nXCIsXG4gICAgICAgIHJlYWRPbmx5OiB0cnVlLFxuICAgICAgICByZXF1aXJlZDogdHJ1ZSxcbiAgICAgICAgZGVmYXVsdDogKCkgPT4gY3J5cHRvLnJhbmRvbVVVSUQoKSxcbiAgICAgIH0sXG4gICAgICBGaXJzdE5hbWU6IHtcbiAgICAgICAgdHlwZTogXCJzdHJpbmdcIixcbiAgICAgIH0sXG4gICAgICBMYXN0TmFtZToge1xuICAgICAgICB0eXBlOiBcInN0cmluZ1wiLFxuICAgICAgfSxcbiAgICB9LFxuXG4gICAgaW5kZXhlczoge1xuICAgICAgcmVjb3JkOiB7XG4gICAgICAgIHBrOiB7XG4gICAgICAgICAgZmllbGQ6IFwicGtcIixcbiAgICAgICAgICBjb21wb3NpdGU6IFtcIkZvb0lkXCJdLFxuICAgICAgICB9LFxuICAgICAgICBzazoge1xuICAgICAgICAgIGZpZWxkOiBcInNrXCIsXG4gICAgICAgICAgY29tcG9zaXRlOiBbXCJGb29JZFwiXSxcbiAgICAgICAgfSxcbiAgICAgIH0sXG4gICAgfSxcbiAgfSxcbiAgLyp7IHRhYmxlLCBjbGllbnQgfSwqL1xuKTtcblxuZXhwb3J0IGNvbnN0IEZvb01vZGVsID0gbmV3IFNlcnZpY2UoXG4gIHtcbiAgICB1c2VyOiBVc2VyLFxuICB9LFxuICB7IHRhYmxlLCBjbGllbnQgfSxcbik7XG4iXX0=
@@ -1 +0,0 @@
1
- export {};
@@ -1,87 +0,0 @@
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 __setModuleDefault = (this && this.__setModuleDefault) || (Object.create ? (function(o, v) {
14
- Object.defineProperty(o, "default", { enumerable: true, value: v });
15
- }) : function(o, v) {
16
- o["default"] = v;
17
- });
18
- var __importStar = (this && this.__importStar) || (function () {
19
- var ownKeys = function(o) {
20
- ownKeys = Object.getOwnPropertyNames || function (o) {
21
- var ar = [];
22
- for (var k in o) if (Object.prototype.hasOwnProperty.call(o, k)) ar[ar.length] = k;
23
- return ar;
24
- };
25
- return ownKeys(o);
26
- };
27
- return function (mod) {
28
- if (mod && mod.__esModule) return mod;
29
- var result = {};
30
- if (mod != null) for (var k = ownKeys(mod), i = 0; i < k.length; i++) if (k[i] !== "default") __createBinding(result, mod, k[i]);
31
- __setModuleDefault(result, mod);
32
- return result;
33
- };
34
- })();
35
- Object.defineProperty(exports, "__esModule", { value: true });
36
- const node_path_1 = require("node:path");
37
- // eslint-disable-next-line import/no-extraneous-dependencies -- dev-only script using test infra (jest-dynalite)
38
- const jest_dynalite_1 = require("jest-dynalite");
39
- const DATA_STORE_TABLE = "data-store-test";
40
- /**
41
- * Runs the single-patient import against a local dynalite instance (same config as tests).
42
- * Setup runs before importing ehr-r4-data-service so MOCK_DYNAMODB_ENDPOINT is set when the client is created.
43
- * Usage: ts-node import-patient-with-dynalite.ts <path-to-patient.json> [tenantId] [workspaceId]
44
- */
45
- async function main() {
46
- const [, , fileArg, tenantId = "tenant-1", workspaceId = "ws-1"] = process.argv;
47
- if (!fileArg) {
48
- console.error("Usage: import-patient-with-dynalite.ts <path-to-patient.json> [tenantId] [workspaceId]");
49
- process.exit(1);
50
- }
51
- // Point jest-dynalite at the package root so it finds jest-dynalite-config.
52
- // Must run before any import of ehr-r4-data-service so the DynamoDB client sees MOCK_DYNAMODB_ENDPOINT.
53
- const packageRoot = (0, node_path_1.resolve)(__dirname, "../..");
54
- (0, jest_dynalite_1.setup)(packageRoot);
55
- await (0, jest_dynalite_1.startDb)();
56
- await (0, jest_dynalite_1.createTables)();
57
- const { importPatientFromFile } = await Promise.resolve().then(() => __importStar(require("./import-patient")));
58
- const { getEhrR4DataService } = await Promise.resolve().then(() => __importStar(require("./dynamo/ehr/r4/ehr-r4-data-service")));
59
- const sk = "CURRENT";
60
- try {
61
- const result = await importPatientFromFile(fileArg, {
62
- tenantId,
63
- workspaceId,
64
- tableName: DATA_STORE_TABLE,
65
- });
66
- console.log(`Imported Patient ${result.id} (tenant=${result.tenantId}, workspace=${result.workspaceId})`);
67
- const service = getEhrR4DataService(DATA_STORE_TABLE);
68
- const getResult = await service.entities.patient
69
- .get({ tenantId, workspaceId, id: result.id, sk })
70
- .go();
71
- if (getResult.data) {
72
- console.log("Read back from dynalite:", JSON.stringify(getResult.data, null, 2));
73
- }
74
- else {
75
- console.log("Read back: no record found");
76
- }
77
- }
78
- catch (err) {
79
- console.error(err);
80
- process.exitCode = 1;
81
- }
82
- finally {
83
- await (0, jest_dynalite_1.stopDb)();
84
- }
85
- }
86
- void main();
87
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiaW1wb3J0LXBhdGllbnQtd2l0aC1keW5hbGl0ZS5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uL3NyYy9kYXRhL2ltcG9ydC1wYXRpZW50LXdpdGgtZHluYWxpdGUudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6Ijs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7QUFBQSx5Q0FBb0M7QUFDcEMsaUhBQWlIO0FBQ2pILGlEQUFxRTtBQUVyRSxNQUFNLGdCQUFnQixHQUFHLGlCQUFpQixDQUFDO0FBRTNDOzs7O0dBSUc7QUFDSCxLQUFLLFVBQVUsSUFBSTtJQUNqQixNQUFNLENBQUMsRUFBRSxBQUFELEVBQUcsT0FBTyxFQUFFLFFBQVEsR0FBRyxVQUFVLEVBQUUsV0FBVyxHQUFHLE1BQU0sQ0FBQyxHQUM5RCxPQUFPLENBQUMsSUFBSSxDQUFDO0lBRWYsSUFBSSxDQUFDLE9BQU8sRUFBRSxDQUFDO1FBQ2IsT0FBTyxDQUFDLEtBQUssQ0FDWCx3RkFBd0YsQ0FDekYsQ0FBQztRQUNGLE9BQU8sQ0FBQyxJQUFJLENBQUMsQ0FBQyxDQUFDLENBQUM7SUFDbEIsQ0FBQztJQUVELDRFQUE0RTtJQUM1RSx3R0FBd0c7SUFDeEcsTUFBTSxXQUFXLEdBQUcsSUFBQSxtQkFBTyxFQUFDLFNBQVMsRUFBRSxPQUFPLENBQUMsQ0FBQztJQUNoRCxJQUFBLHFCQUFLLEVBQUMsV0FBVyxDQUFDLENBQUM7SUFFbkIsTUFBTSxJQUFBLHVCQUFPLEdBQUUsQ0FBQztJQUNoQixNQUFNLElBQUEsNEJBQVksR0FBRSxDQUFDO0lBRXJCLE1BQU0sRUFBRSxxQkFBcUIsRUFBRSxHQUFHLHdEQUFhLGtCQUFrQixHQUFDLENBQUM7SUFDbkUsTUFBTSxFQUFFLG1CQUFtQixFQUFFLEdBQzNCLHdEQUFhLHFDQUFxQyxHQUFDLENBQUM7SUFFdEQsTUFBTSxFQUFFLEdBQUcsU0FBUyxDQUFDO0lBRXJCLElBQUksQ0FBQztRQUNILE1BQU0sTUFBTSxHQUFHLE1BQU0scUJBQXFCLENBQUMsT0FBTyxFQUFFO1lBQ2xELFFBQVE7WUFDUixXQUFXO1lBQ1gsU0FBUyxFQUFFLGdCQUFnQjtTQUM1QixDQUFDLENBQUM7UUFDSCxPQUFPLENBQUMsR0FBRyxDQUNULG9CQUFvQixNQUFNLENBQUMsRUFBRSxZQUFZLE1BQU0sQ0FBQyxRQUFRLGVBQWUsTUFBTSxDQUFDLFdBQVcsR0FBRyxDQUM3RixDQUFDO1FBRUYsTUFBTSxPQUFPLEdBQUcsbUJBQW1CLENBQUMsZ0JBQWdCLENBQUMsQ0FBQztRQUN0RCxNQUFNLFNBQVMsR0FBRyxNQUFNLE9BQU8sQ0FBQyxRQUFRLENBQUMsT0FBTzthQUM3QyxHQUFHLENBQUMsRUFBRSxRQUFRLEVBQUUsV0FBVyxFQUFFLEVBQUUsRUFBRSxNQUFNLENBQUMsRUFBRSxFQUFFLEVBQUUsRUFBRSxDQUFDO2FBQ2pELEVBQUUsRUFBRSxDQUFDO1FBRVIsSUFBSSxTQUFTLENBQUMsSUFBSSxFQUFFLENBQUM7WUFDbkIsT0FBTyxDQUFDLEdBQUcsQ0FDVCwwQkFBMEIsRUFDMUIsSUFBSSxDQUFDLFNBQVMsQ0FBQyxTQUFTLENBQUMsSUFBSSxFQUFFLElBQUksRUFBRSxDQUFDLENBQUMsQ0FDeEMsQ0FBQztRQUNKLENBQUM7YUFBTSxDQUFDO1lBQ04sT0FBTyxDQUFDLEdBQUcsQ0FBQyw0QkFBNEIsQ0FBQyxDQUFDO1FBQzVDLENBQUM7SUFDSCxDQUFDO0lBQUMsT0FBTyxHQUFHLEVBQUUsQ0FBQztRQUNiLE9BQU8sQ0FBQyxLQUFLLENBQUMsR0FBRyxDQUFDLENBQUM7UUFDbkIsT0FBTyxDQUFDLFFBQVEsR0FBRyxDQUFDLENBQUM7SUFDdkIsQ0FBQztZQUFTLENBQUM7UUFDVCxNQUFNLElBQUEsc0JBQU0sR0FBRSxDQUFDO0lBQ2pCLENBQUM7QUFDSCxDQUFDO0FBRUQsS0FBSyxJQUFJLEVBQUUsQ0FBQyIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IHJlc29sdmUgfSBmcm9tIFwibm9kZTpwYXRoXCI7XG4vLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgaW1wb3J0L25vLWV4dHJhbmVvdXMtZGVwZW5kZW5jaWVzIC0tIGRldi1vbmx5IHNjcmlwdCB1c2luZyB0ZXN0IGluZnJhIChqZXN0LWR5bmFsaXRlKVxuaW1wb3J0IHsgc2V0dXAsIHN0YXJ0RGIsIHN0b3BEYiwgY3JlYXRlVGFibGVzIH0gZnJvbSBcImplc3QtZHluYWxpdGVcIjtcblxuY29uc3QgREFUQV9TVE9SRV9UQUJMRSA9IFwiZGF0YS1zdG9yZS10ZXN0XCI7XG5cbi8qKlxuICogUnVucyB0aGUgc2luZ2xlLXBhdGllbnQgaW1wb3J0IGFnYWluc3QgYSBsb2NhbCBkeW5hbGl0ZSBpbnN0YW5jZSAoc2FtZSBjb25maWcgYXMgdGVzdHMpLlxuICogU2V0dXAgcnVucyBiZWZvcmUgaW1wb3J0aW5nIGVoci1yNC1kYXRhLXNlcnZpY2Ugc28gTU9DS19EWU5BTU9EQl9FTkRQT0lOVCBpcyBzZXQgd2hlbiB0aGUgY2xpZW50IGlzIGNyZWF0ZWQuXG4gKiBVc2FnZTogdHMtbm9kZSBpbXBvcnQtcGF0aWVudC13aXRoLWR5bmFsaXRlLnRzIDxwYXRoLXRvLXBhdGllbnQuanNvbj4gW3RlbmFudElkXSBbd29ya3NwYWNlSWRdXG4gKi9cbmFzeW5jIGZ1bmN0aW9uIG1haW4oKTogUHJvbWlzZTx2b2lkPiB7XG4gIGNvbnN0IFssICwgZmlsZUFyZywgdGVuYW50SWQgPSBcInRlbmFudC0xXCIsIHdvcmtzcGFjZUlkID0gXCJ3cy0xXCJdID1cbiAgICBwcm9jZXNzLmFyZ3Y7XG5cbiAgaWYgKCFmaWxlQXJnKSB7XG4gICAgY29uc29sZS5lcnJvcihcbiAgICAgIFwiVXNhZ2U6IGltcG9ydC1wYXRpZW50LXdpdGgtZHluYWxpdGUudHMgPHBhdGgtdG8tcGF0aWVudC5qc29uPiBbdGVuYW50SWRdIFt3b3Jrc3BhY2VJZF1cIixcbiAgICApO1xuICAgIHByb2Nlc3MuZXhpdCgxKTtcbiAgfVxuXG4gIC8vIFBvaW50IGplc3QtZHluYWxpdGUgYXQgdGhlIHBhY2thZ2Ugcm9vdCBzbyBpdCBmaW5kcyBqZXN0LWR5bmFsaXRlLWNvbmZpZy5cbiAgLy8gTXVzdCBydW4gYmVmb3JlIGFueSBpbXBvcnQgb2YgZWhyLXI0LWRhdGEtc2VydmljZSBzbyB0aGUgRHluYW1vREIgY2xpZW50IHNlZXMgTU9DS19EWU5BTU9EQl9FTkRQT0lOVC5cbiAgY29uc3QgcGFja2FnZVJvb3QgPSByZXNvbHZlKF9fZGlybmFtZSwgXCIuLi8uLlwiKTtcbiAgc2V0dXAocGFja2FnZVJvb3QpO1xuXG4gIGF3YWl0IHN0YXJ0RGIoKTtcbiAgYXdhaXQgY3JlYXRlVGFibGVzKCk7XG5cbiAgY29uc3QgeyBpbXBvcnRQYXRpZW50RnJvbUZpbGUgfSA9IGF3YWl0IGltcG9ydChcIi4vaW1wb3J0LXBhdGllbnRcIik7XG4gIGNvbnN0IHsgZ2V0RWhyUjREYXRhU2VydmljZSB9ID1cbiAgICBhd2FpdCBpbXBvcnQoXCIuL2R5bmFtby9laHIvcjQvZWhyLXI0LWRhdGEtc2VydmljZVwiKTtcblxuICBjb25zdCBzayA9IFwiQ1VSUkVOVFwiO1xuXG4gIHRyeSB7XG4gICAgY29uc3QgcmVzdWx0ID0gYXdhaXQgaW1wb3J0UGF0aWVudEZyb21GaWxlKGZpbGVBcmcsIHtcbiAgICAgIHRlbmFudElkLFxuICAgICAgd29ya3NwYWNlSWQsXG4gICAgICB0YWJsZU5hbWU6IERBVEFfU1RPUkVfVEFCTEUsXG4gICAgfSk7XG4gICAgY29uc29sZS5sb2coXG4gICAgICBgSW1wb3J0ZWQgUGF0aWVudCAke3Jlc3VsdC5pZH0gKHRlbmFudD0ke3Jlc3VsdC50ZW5hbnRJZH0sIHdvcmtzcGFjZT0ke3Jlc3VsdC53b3Jrc3BhY2VJZH0pYCxcbiAgICApO1xuXG4gICAgY29uc3Qgc2VydmljZSA9IGdldEVoclI0RGF0YVNlcnZpY2UoREFUQV9TVE9SRV9UQUJMRSk7XG4gICAgY29uc3QgZ2V0UmVzdWx0ID0gYXdhaXQgc2VydmljZS5lbnRpdGllcy5wYXRpZW50XG4gICAgICAuZ2V0KHsgdGVuYW50SWQsIHdvcmtzcGFjZUlkLCBpZDogcmVzdWx0LmlkLCBzayB9KVxuICAgICAgLmdvKCk7XG5cbiAgICBpZiAoZ2V0UmVzdWx0LmRhdGEpIHtcbiAgICAgIGNvbnNvbGUubG9nKFxuICAgICAgICBcIlJlYWQgYmFjayBmcm9tIGR5bmFsaXRlOlwiLFxuICAgICAgICBKU09OLnN0cmluZ2lmeShnZXRSZXN1bHQuZGF0YSwgbnVsbCwgMiksXG4gICAgICApO1xuICAgIH0gZWxzZSB7XG4gICAgICBjb25zb2xlLmxvZyhcIlJlYWQgYmFjazogbm8gcmVjb3JkIGZvdW5kXCIpO1xuICAgIH1cbiAgfSBjYXRjaCAoZXJyKSB7XG4gICAgY29uc29sZS5lcnJvcihlcnIpO1xuICAgIHByb2Nlc3MuZXhpdENvZGUgPSAxO1xuICB9IGZpbmFsbHkge1xuICAgIGF3YWl0IHN0b3BEYigpO1xuICB9XG59XG5cbnZvaWQgbWFpbigpO1xuIl19
@@ -1,47 +0,0 @@
1
- /** Audit fields stored in FHIR resource meta.extension. */
2
- export interface AuditFields {
3
- createdDate?: string;
4
- createdById?: string;
5
- createdByName?: string;
6
- modifiedDate?: string;
7
- modifiedById?: string;
8
- modifiedByName?: string;
9
- deletedDate?: string;
10
- deletedById?: string;
11
- deletedByName?: string;
12
- }
13
- /** Builds meta.extension entries for audit; merges with existing meta. */
14
- export declare function mergeAuditIntoMeta(meta: Record<string, unknown> | undefined, audit: AuditFields): Record<string, unknown>;
15
- /** Minimal FHIR Patient shape needed for import (id and resourceType required). */
16
- interface FhirPatientLike {
17
- resourceType: string;
18
- id: string;
19
- meta?: Record<string, unknown>;
20
- }
21
- export interface ImportPatientOptions {
22
- tenantId: string;
23
- workspaceId: string;
24
- tableName?: string;
25
- /** Audit fields at same level as tenantId/workspaceId; merged with defaults. */
26
- createdDate?: string;
27
- createdById?: string;
28
- createdByName?: string;
29
- modifiedDate?: string;
30
- modifiedById?: string;
31
- modifiedByName?: string;
32
- }
33
- /**
34
- * Maps a FHIR Patient (from JSON) to the attributes required for Patient.put().
35
- * Uses placeholder GSI2/GSI3 fields so ElectroDB index conditions are satisfied.
36
- */
37
- export declare function patientToPutAttrs(patient: FhirPatientLike, options: ImportPatientOptions): Record<string, unknown>;
38
- /**
39
- * Reads a single Patient JSON file and imports it into the FHIR store.
40
- * Table name: options.tableName ?? process.env.DYNAMO_TABLE_NAME ?? "jesttesttable".
41
- */
42
- export declare function importPatientFromFile(filePath: string, options: ImportPatientOptions): Promise<{
43
- id: string;
44
- tenantId: string;
45
- workspaceId: string;
46
- }>;
47
- export {};
@@ -1,158 +0,0 @@
1
- "use strict";
2
- Object.defineProperty(exports, "__esModule", { value: true });
3
- exports.mergeAuditIntoMeta = mergeAuditIntoMeta;
4
- exports.patientToPutAttrs = patientToPutAttrs;
5
- exports.importPatientFromFile = importPatientFromFile;
6
- const node_fs_1 = require("node:fs");
7
- const node_path_1 = require("node:path");
8
- const compression_1 = require("../lib/compression");
9
- const ehr_r4_data_service_1 = require("./dynamo/ehr/r4/ehr-r4-data-service");
10
- /** OpenHI extension URLs for audit in resource meta (per ADR 2026-01-13-06). */
11
- const OPENHI_EXT = "http://openhi.org/fhir/StructureDefinition";
12
- /** Builds meta.extension entries for audit; merges with existing meta. */
13
- function mergeAuditIntoMeta(meta, audit) {
14
- const existing = meta ?? {};
15
- const ext = [
16
- ...(Array.isArray(existing.extension)
17
- ? existing.extension
18
- : []),
19
- ];
20
- const byUrl = new Map(ext.map((e) => [e.url, e]));
21
- function set(url, value, type) {
22
- if (value == null)
23
- return;
24
- byUrl.set(url, { url, [type]: value });
25
- }
26
- set(`${OPENHI_EXT}/created-date`, audit.createdDate, "valueDateTime");
27
- set(`${OPENHI_EXT}/created-by-id`, audit.createdById, "valueString");
28
- set(`${OPENHI_EXT}/created-by-name`, audit.createdByName, "valueString");
29
- set(`${OPENHI_EXT}/modified-date`, audit.modifiedDate, "valueDateTime");
30
- set(`${OPENHI_EXT}/modified-by-id`, audit.modifiedById, "valueString");
31
- set(`${OPENHI_EXT}/modified-by-name`, audit.modifiedByName, "valueString");
32
- set(`${OPENHI_EXT}/deleted-date`, audit.deletedDate, "valueDateTime");
33
- set(`${OPENHI_EXT}/deleted-by-id`, audit.deletedById, "valueString");
34
- set(`${OPENHI_EXT}/deleted-by-name`, audit.deletedByName, "valueString");
35
- return { ...existing, extension: Array.from(byUrl.values()) };
36
- }
37
- /**
38
- * Extracts a Patient from parsed JSON. Accepts either:
39
- * - A standalone Patient resource (root has resourceType "Patient"), or
40
- * - A FHIR Bundle (e.g. Synthea transaction) — uses the first entry whose resource is a Patient.
41
- */
42
- function extractPatient(parsed) {
43
- if (parsed && typeof parsed === "object" && "resourceType" in parsed) {
44
- const root = parsed;
45
- if (root.resourceType === "Patient" && root.id) {
46
- return root;
47
- }
48
- if (root.resourceType === "Bundle" && "entry" in parsed) {
49
- const entries = parsed.entry;
50
- if (Array.isArray(entries)) {
51
- const patientEntry = entries.find((e) => e?.resource?.resourceType === "Patient" && e.resource.id);
52
- if (patientEntry?.resource) {
53
- return patientEntry.resource;
54
- }
55
- }
56
- }
57
- }
58
- throw new Error("File must be a FHIR Patient resource or a Bundle containing at least one Patient entry");
59
- }
60
- const SK = "CURRENT";
61
- /** Default audit values for create/modify when importing. */
62
- const defaultAudit = {
63
- createdDate: new Date().toISOString(),
64
- createdById: "import",
65
- createdByName: "Bulk import",
66
- modifiedDate: new Date().toISOString(),
67
- modifiedById: "import",
68
- modifiedByName: "Bulk import",
69
- };
70
- /**
71
- * Maps a FHIR Patient (from JSON) to the attributes required for Patient.put().
72
- * Uses placeholder GSI2/GSI3 fields so ElectroDB index conditions are satisfied.
73
- */
74
- function patientToPutAttrs(patient, options) {
75
- const { tenantId, workspaceId, createdDate, createdById, createdByName, modifiedDate, modifiedById, modifiedByName, } = options;
76
- const lastUpdated = patient.meta?.lastUpdated ??
77
- modifiedDate ??
78
- defaultAudit.modifiedDate ??
79
- new Date().toISOString();
80
- const auditMerged = {
81
- ...defaultAudit,
82
- ...(createdDate != null && { createdDate }),
83
- ...(createdById != null && { createdById }),
84
- ...(createdByName != null && { createdByName }),
85
- ...(modifiedDate != null && { modifiedDate }),
86
- ...(modifiedById != null && { modifiedById }),
87
- ...(modifiedByName != null && { modifiedByName }),
88
- };
89
- const patientWithMeta = {
90
- ...patient,
91
- meta: mergeAuditIntoMeta(patient.meta, auditMerged),
92
- };
93
- if (lastUpdated && !patientWithMeta.meta.lastUpdated) {
94
- patientWithMeta.meta.lastUpdated = lastUpdated;
95
- }
96
- return {
97
- sk: SK,
98
- tenantId,
99
- workspaceId,
100
- id: patient.id,
101
- resource: (0, compression_1.compressResource)(JSON.stringify(patientWithMeta)),
102
- vid: lastUpdated.replace(/[-:T.Z]/g, "").slice(0, 12) ||
103
- Date.now().toString(36),
104
- lastUpdated,
105
- identifierSystem: "",
106
- identifierValue: "",
107
- facilityId: "",
108
- normalizedName: "",
109
- };
110
- }
111
- /**
112
- * Reads a single Patient JSON file and imports it into the FHIR store.
113
- * Table name: options.tableName ?? process.env.DYNAMO_TABLE_NAME ?? "jesttesttable".
114
- */
115
- async function importPatientFromFile(filePath, options) {
116
- const resolved = (0, node_path_1.resolve)(filePath);
117
- const raw = (0, node_fs_1.readFileSync)(resolved, "utf-8");
118
- const parsed = JSON.parse(raw);
119
- const patient = extractPatient(parsed);
120
- const tableName = options.tableName ?? process.env.DYNAMO_TABLE_NAME ?? "jesttesttable";
121
- const service = (0, ehr_r4_data_service_1.getEhrR4DataService)(tableName);
122
- const attrs = patientToPutAttrs(patient, options);
123
- const result = await service.entities.patient
124
- .put(attrs)
125
- .go();
126
- const data = result.data;
127
- if (!data) {
128
- throw new Error(`Put failed for Patient ${patient.id}`);
129
- }
130
- return {
131
- id: data.id,
132
- tenantId: data.tenantId,
133
- workspaceId: data.workspaceId,
134
- };
135
- }
136
- /** Run as script: node/ts-node import-patient.ts <path-to-patient.json> [tenantId] [workspaceId] */
137
- async function main() {
138
- const [, , fileArg, tenantId = "tenant-1", workspaceId = "ws-1"] = process.argv;
139
- if (!fileArg) {
140
- console.error("Usage: import-patient.ts <path-to-patient.json> [tenantId] [workspaceId]");
141
- process.exit(1);
142
- }
143
- try {
144
- const result = await importPatientFromFile(fileArg, {
145
- tenantId,
146
- workspaceId,
147
- });
148
- console.log(`Imported Patient ${result.id} (tenant=${result.tenantId}, workspace=${result.workspaceId})`);
149
- }
150
- catch (err) {
151
- console.error(err);
152
- process.exit(1);
153
- }
154
- }
155
- if (require.main === module) {
156
- void main();
157
- }
158
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiaW1wb3J0LXBhdGllbnQuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi9zcmMvZGF0YS9pbXBvcnQtcGF0aWVudC50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiOztBQXNCQSxnREFxQ0M7QUFnRkQsOENBb0RDO0FBTUQsc0RBOEJDO0FBbk9ELHFDQUF1QztBQUN2Qyx5Q0FBb0M7QUFDcEMsb0RBQXNEO0FBQ3RELDZFQUEwRTtBQUUxRSxnRkFBZ0Y7QUFDaEYsTUFBTSxVQUFVLEdBQUcsNENBQTRDLENBQUM7QUFlaEUsMEVBQTBFO0FBQzFFLFNBQWdCLGtCQUFrQixDQUNoQyxJQUF5QyxFQUN6QyxLQUFrQjtJQUVsQixNQUFNLFFBQVEsR0FBRyxJQUFJLElBQUksRUFBRSxDQUFDO0lBQzVCLE1BQU0sR0FBRyxHQUlKO1FBQ0gsR0FBRyxDQUFDLEtBQUssQ0FBQyxPQUFPLENBQUMsUUFBUSxDQUFDLFNBQVMsQ0FBQztZQUNuQyxDQUFDLENBQUUsUUFBUSxDQUFDLFNBSVA7WUFDTCxDQUFDLENBQUMsRUFBRSxDQUFDO0tBQ1IsQ0FBQztJQUNGLE1BQU0sS0FBSyxHQUFHLElBQUksR0FBRyxDQUFDLEdBQUcsQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDLEVBQUUsRUFBRSxDQUFDLENBQUMsQ0FBQyxDQUFDLEdBQUcsRUFBRSxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUM7SUFDbEQsU0FBUyxHQUFHLENBQ1YsR0FBVyxFQUNYLEtBQXlCLEVBQ3pCLElBQXFDO1FBRXJDLElBQUksS0FBSyxJQUFJLElBQUk7WUFBRSxPQUFPO1FBQzFCLEtBQUssQ0FBQyxHQUFHLENBQUMsR0FBRyxFQUFFLEVBQUUsR0FBRyxFQUFFLENBQUMsSUFBSSxDQUFDLEVBQUUsS0FBSyxFQUFFLENBQUMsQ0FBQztJQUN6QyxDQUFDO0lBQ0QsR0FBRyxDQUFDLEdBQUcsVUFBVSxlQUFlLEVBQUUsS0FBSyxDQUFDLFdBQVcsRUFBRSxlQUFlLENBQUMsQ0FBQztJQUN0RSxHQUFH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ZnNcIjtcbmltcG9ydCB7IHJlc29sdmUgfSBmcm9tIFwibm9kZTpwYXRoXCI7XG5pbXBvcnQgeyBjb21wcmVzc1Jlc291cmNlIH0gZnJvbSBcIi4uL2xpYi9jb21wcmVzc2lvblwiO1xuaW1wb3J0IHsgZ2V0RWhyUjREYXRhU2VydmljZSB9IGZyb20gXCIuL2R5bmFtby9laHIvcjQvZWhyLXI0LWRhdGEtc2VydmljZVwiO1xuXG4vKiogT3BlbkhJIGV4dGVuc2lvbiBVUkxzIGZvciBhdWRpdCBpbiByZXNvdXJjZSBtZXRhIChwZXIgQURSIDIwMjYtMDEtMTMtMDYpLiAqL1xuY29uc3QgT1BFTkhJX0VYVCA9IFwiaHR0cDovL29wZW5oaS5vcmcvZmhpci9TdHJ1Y3R1cmVEZWZpbml0aW9uXCI7XG5cbi8qKiBBdWRpdCBmaWVsZHMgc3RvcmVkIGluIEZISVIgcmVzb3VyY2UgbWV0YS5leHRlbnNpb24uICovXG5leHBvcnQgaW50ZXJmYWNlIEF1ZGl0RmllbGRzIHtcbiAgY3JlYXRlZERhdGU/OiBzdHJpbmc7XG4gIGNyZWF0ZWRCeUlkPzogc3RyaW5nO1xuICBjcmVhdGVkQnlOYW1lPzogc3RyaW5nO1xuICBtb2RpZmllZERhdGU/OiBzdHJpbmc7XG4gIG1vZGlmaWVkQnlJZD86IHN0cmluZztcbiAgbW9kaWZpZWRCeU5hbWU/OiBzdHJpbmc7XG4gIGRlbGV0ZWREYXRlPzogc3RyaW5nO1xuICBkZWxldGVkQnlJZD86IHN0cmluZztcbiAgZGVsZXRlZEJ5TmFtZT86IHN0cmluZztcbn1cblxuLyoqIEJ1aWxkcyBtZXRhLmV4dGVuc2lvbiBlbnRyaWVzIGZvciBhdWRpdDsgbWVyZ2VzIHdpdGggZXhpc3RpbmcgbWV0YS4gKi9cbmV4cG9ydCBmdW5jdGlvbiBtZXJnZUF1ZGl0SW50b01ldGEoXG4gIG1ldGE6IFJlY29yZDxzdHJpbmcsIHVua25vd24+IHwgdW5kZWZpbmVkLFxuICBhdWRpdDogQXVkaXRGaWVsZHMsXG4pOiBSZWNvcmQ8c3RyaW5nLCB1bmtub3duPiB7XG4gIGNvbnN0IGV4aXN0aW5nID0gbWV0YSA/PyB7fTtcbiAgY29uc3QgZXh0OiBBcnJheTx7XG4gICAgdXJsOiBzdHJpbmc7XG4gICAgdmFsdWVTdHJpbmc/OiBzdHJpbmc7XG4gICAgdmFsdWVEYXRlVGltZT86IHN0cmluZztcbiAgfT4gPSBbXG4gICAgLi4uKEFycmF5LmlzQXJyYXkoZXhpc3RpbmcuZXh0ZW5zaW9uKVxuICAgICAgPyAoZXhpc3RpbmcuZXh0ZW5zaW9uIGFzIEFycmF5PHtcbiAgICAgICAgICB1cmw6IHN0cmluZztcbiAgICAgICAgICB2YWx1ZVN0cmluZz86IHN0cmluZztcbiAgICAgICAgICB2YWx1ZURhdGVUaW1lPzogc3RyaW5nO1xuICAgICAgICB9PilcbiAgICAgIDogW10pLFxuICBdO1xuICBjb25zdCBieVVybCA9IG5ldyBNYXAoZXh0Lm1hcCgoZSkgPT4gW2UudXJsLCBlXSkpO1xuICBmdW5jdGlvbiBzZXQoXG4gICAgdXJsOiBzdHJpbmcsXG4gICAgdmFsdWU6IHN0cmluZyB8IHVuZGVmaW5lZCxcbiAgICB0eXBlOiBcInZhbHVlU3RyaW5nXCIgfCBcInZhbHVlRGF0ZVRpbWVcIixcbiAgKSB7XG4gICAgaWYgKHZhbHVlID09IG51bGwpIHJldHVybjtcbiAgICBieVVybC5zZXQodXJsLCB7IHVybCwgW3R5cGVdOiB2YWx1ZSB9KTtcbiAgfVxuICBzZXQoYCR7T1BFTkhJX0VYVH0vY3JlYXRlZC1kYXRlYCwgYXVkaXQuY3JlYXRlZERhdGUsIFwidmFsdWVEYXRlVGltZVwiKTtcbiAgc2V0KGAke09QRU5ISV9FWFR9L2NyZWF0ZWQtYnktaWRgLCBhdWRpdC5jcmVhdGVkQnlJZCwgXCJ2YWx1ZVN0cmluZ1wiKTtcbiAgc2V0KGAke09QRU5ISV9FWFR9L2NyZWF0ZWQtYnktbmFtZWAsIGF1ZGl0LmNyZWF0ZWRCeU5hbWUsIFwidmFsdWVTdHJpbmdcIik7XG4gIHNldChgJHtPUEVOSElfRVhUfS9tb2RpZmllZC1kYXRlYCwgYXVkaXQubW9kaWZpZWREYXRlLCBcInZhbHVlRGF0ZVRpbWVcIik7XG4gIHNldChgJHtPUEVOSElfRVhUfS9tb2RpZmllZC1ieS1pZGAsIGF1ZGl0Lm1vZGlmaWVkQnlJZCwgXCJ2YWx1ZVN0cmluZ1wiKTtcbiAgc2V0KGAke09QRU5ISV9FWFR9L21vZGlmaWVkLWJ5LW5hbWVgLCBhdWRpdC5tb2RpZmllZEJ5TmFtZSwgXCJ2YWx1ZVN0cmluZ1wiKTtcbiAgc2V0KGAke09QRU5ISV9FWFR9L2RlbGV0ZWQtZGF0ZWAsIGF1ZGl0LmRlbGV0ZWREYXRlLCBcInZhbHVlRGF0ZVRpbWVcIik7XG4gIHNldChgJHtPUEVOSElfRVhUfS9kZWxldGVkLWJ5LWlkYCwgYXVkaXQuZGVsZXRlZEJ5SWQsIFwidmFsdWVTdHJpbmdcIik7XG4gIHNldChgJHtPUEVOSElfRVhUfS9kZWxldGVkLWJ5LW5hbWVgLCBhdWRpdC5kZWxldGVkQnlOYW1lLCBcInZhbHVlU3RyaW5nXCIpO1xuICByZXR1cm4geyAuLi5leGlzdGluZywgZXh0ZW5zaW9uOiBBcnJheS5mcm9tKGJ5VXJsLnZhbHVlcygpKSB9O1xufVxuXG4vKiogTWluaW1hbCBGSElSIFBhdGllbnQgc2hhcGUgbmVlZGVkIGZvciBpbXBvcnQgKGlkIGFuZCByZXNvdXJjZVR5cGUgcmVxdWlyZWQpLiAqL1xuaW50ZXJmYWNlIEZoaXJQYXRpZW50TGlrZSB7XG4gIHJlc291cmNlVHlwZTogc3RyaW5nO1xuICBpZDogc3RyaW5nO1xuICBtZXRhPzogUmVjb3JkPHN0cmluZywgdW5rbm93bj47XG59XG5cbi8qKiBGSElSIEJ1bmRsZSBlbnRyeSAoZS5nLiBTeW50aGVhIHRyYW5zYWN0aW9uIGJ1bmRsZSkuICovXG5pbnRlcmZhY2UgQnVuZGxlRW50cnkge1xuICBmdWxsVXJsPzogc3RyaW5nO1xuICByZXNvdXJjZT86IHtcbiAgICByZXNvdXJjZVR5cGU/OiBzdHJpbmc7XG4gICAgaWQ/OiBzdHJpbmc7XG4gICAgbWV0YT86IHsgbGFzdFVwZGF0ZWQ/OiBzdHJpbmcgfTtcbiAgfTtcbn1cblxuLyoqXG4gKiBFeHRyYWN0cyBhIFBhdGllbnQgZnJvbSBwYXJzZWQgSlNPTi4gQWNjZXB0cyBlaXRoZXI6XG4gKiAtIEEgc3RhbmRhbG9uZSBQYXRpZW50IHJlc291cmNlIChyb290IGhhcyByZXNvdXJjZVR5cGUgXCJQYXRpZW50XCIpLCBvclxuICogLSBBIEZISVIgQnVuZGxlIChlLmcuIFN5bnRoZWEgdHJhbnNhY3Rpb24pIOKAlCB1c2VzIHRoZSBmaXJzdCBlbnRyeSB3aG9zZSByZXNvdXJjZSBpcyBhIFBhdGllbnQuXG4gKi9cbmZ1bmN0aW9uIGV4dHJhY3RQYXRpZW50KHBhcnNlZDogdW5rbm93bik6IEZoaXJQYXRpZW50TGlrZSB7XG4gIGlmIChwYXJzZWQgJiYgdHlwZW9mIHBhcnNlZCA9PT0gXCJvYmplY3RcIiAmJiBcInJlc291cmNlVHlwZVwiIGluIHBhcnNlZCkge1xuICAgIGNvbnN0IHJvb3QgPSBwYXJzZWQgYXMge1xuICAgICAgcmVzb3VyY2VUeXBlPzogc3RyaW5nO1xuICAgICAgaWQ/OiBzdHJpbmc7XG4gICAgICBtZXRhPzogeyBsYXN0VXBkYXRlZD86IHN0cmluZyB9O1xuICAgIH07XG4gICAgaWYgKHJvb3QucmVzb3VyY2VUeXBlID09PSBcIlBhdGllbnRcIiAmJiByb290LmlkKSB7XG4gICAgICByZXR1cm4gcm9vdCBhcyBGaGlyUGF0aWVudExpa2U7XG4gICAgfVxuICAgIGlmIChyb290LnJlc291cmNlVHlwZSA9PT0gXCJCdW5kbGVcIiAmJiBcImVudHJ5XCIgaW4gcGFyc2VkKSB7XG4gICAgICBjb25zdCBlbnRyaWVzID0gKHBhcnNlZCBhcyB7IGVudHJ5PzogQnVuZGxlRW50cnlbXSB9KS5lbnRyeTtcbiAgICAgIGlmIChBcnJheS5pc0FycmF5KGVudHJpZXMpKSB7XG4gICAgICAgIGNvbnN0IHBhdGllbnRFbnRyeSA9IGVudHJpZXMuZmluZChcbiAgICAgICAgICAoZSkgPT4gZT8ucmVzb3VyY2U/LnJlc291cmNlVHlwZSA9PT0gXCJQYXRpZW50XCIgJiYgZS5yZXNvdXJjZS5pZCxcbiAgICAgICAgKTtcbiAgICAgICAgaWYgKHBhdGllbnRFbnRyeT8ucmVzb3VyY2UpIHtcbiAgICAgICAgICByZXR1cm4gcGF0aWVudEVudHJ5LnJlc291cmNlIGFzIEZoaXJQYXRpZW50TGlrZTtcbiAgICAgICAgfVxuICAgICAgfVxuICAgIH1cbiAgfVxuICB0aHJvdyBuZXcgRXJyb3IoXG4gICAgXCJGaWxlIG11c3QgYmUgYSBGSElSIFBhdGllbnQgcmVzb3VyY2Ugb3IgYSBCdW5kbGUgY29udGFpbmluZyBhdCBsZWFzdCBvbmUgUGF0aWVudCBlbnRyeVwiLFxuICApO1xufVxuXG5jb25zdCBTSyA9IFwiQ1VSUkVOVFwiO1xuXG4vKiogRGVmYXVsdCBhdWRpdCB2YWx1ZXMgZm9yIGNyZWF0ZS9tb2RpZnkgd2hlbiBpbXBvcnRpbmcuICovXG5jb25zdCBkZWZhdWx0QXVkaXQgPSB7XG4gIGNyZWF0ZWREYXRlOiBuZXcgRGF0ZSgpLnRvSVNPU3RyaW5nKCksXG4gIGNyZWF0ZWRCeUlkOiBcImltcG9ydFwiLFxuICBjcmVhdGVkQnlOYW1lOiBcIkJ1bGsgaW1wb3J0XCIsXG4gIG1vZGlmaWVkRGF0ZTogbmV3IERhdGUoKS50b0lTT1N0cmluZygpLFxuICBtb2RpZmllZEJ5SWQ6IFwiaW1wb3J0XCIsXG4gIG1vZGlmaWVkQnlOYW1lOiBcIkJ1bGsgaW1wb3J0XCIsXG59O1xuXG5leHBvcnQgaW50ZXJmYWNlIEltcG9ydFBhdGllbnRPcHRpb25zIHtcbiAgdGVuYW50SWQ6IHN0cmluZztcbiAgd29ya3NwYWNlSWQ6IHN0cmluZztcbiAgdGFibGVOYW1lPzogc3RyaW5nO1xuICAvKiogQXVkaXQgZmllbGRzIGF0IHNhbWUgbGV2ZWwgYXMgdGVuYW50SWQvd29ya3NwYWNlSWQ7IG1lcmdlZCB3aXRoIGRlZmF1bHRzLiAqL1xuICBjcmVhdGVkRGF0ZT86IHN0cmluZztcbiAgY3JlYXRlZEJ5SWQ/OiBzdHJpbmc7XG4gIGNyZWF0ZWRCeU5hbWU/OiBzdHJpbmc7XG4gIG1vZGlmaWVkRGF0ZT86IHN0cmluZztcbiAgbW9kaWZpZWRCeUlkPzogc3RyaW5nO1xuICBtb2RpZmllZEJ5TmFtZT86IHN0cmluZztcbn1cblxuLyoqXG4gKiBNYXBzIGEgRkhJUiBQYXRpZW50IChmcm9tIEpTT04pIHRvIHRoZSBhdHRyaWJ1dGVzIHJlcXVpcmVkIGZvciBQYXRpZW50LnB1dCgpLlxuICogVXNlcyBwbGFjZWhvbGRlciBHU0kyL0dTSTMgZmllbGRzIHNvIEVsZWN0cm9EQiBpbmRleCBjb25kaXRpb25zIGFyZSBzYXRpc2ZpZWQuXG4gKi9cbmV4cG9ydCBmdW5jdGlvbiBwYXRpZW50VG9QdXRBdHRycyhcbiAgcGF0aWVudDogRmhpclBhdGllbnRMaWtlLFxuICBvcHRpb25zOiBJbXBvcnRQYXRpZW50T3B0aW9ucyxcbik6IFJlY29yZDxzdHJpbmcsIHVua25vd24+IHtcbiAgY29uc3Qge1xuICAgIHRlbmFudElkLFxuICAgIHdvcmtzcGFjZUlkLFxuICAgIGNyZWF0ZWREYXRlLFxuICAgIGNyZWF0ZWRCeUlkLFxuICAgIGNyZWF0ZWRCeU5hbWUsXG4gICAgbW9kaWZpZWREYXRlLFxuICAgIG1vZGlmaWVkQnlJZCxcbiAgICBtb2RpZmllZEJ5TmFtZSxcbiAgfSA9IG9wdGlvbnM7XG4gIGNvbnN0IGxhc3RVcGRhdGVkID1cbiAgICAocGF0aWVudC5tZXRhPy5sYXN0VXBkYXRlZCBhcyBzdHJpbmcgfCB1bmRlZmluZWQpID8/XG4gICAgbW9kaWZpZWREYXRlID8/XG4gICAgZGVmYXVsdEF1ZGl0Lm1vZGlmaWVkRGF0ZSA/P1xuICAgIG5ldyBEYXRlKCkudG9JU09TdHJpbmcoKTtcbiAgY29uc3QgYXVkaXRNZXJnZWQ6IEF1ZGl0RmllbGRzID0ge1xuICAgIC4uLmRlZmF1bHRBdWRpdCxcbiAgICAuLi4oY3JlYXRlZERhdGUgIT0gbnVsbCAmJiB7IGNyZWF0ZWREYXRlIH0pLFxuICAgIC4uLihjcmVhdGVkQnlJZCAhPSBudWxsICYmIHsgY3JlYXRlZEJ5SWQgfSksXG4gICAgLi4uKGNyZWF0ZWRCeU5hbWUgIT0gbnVsbCAmJiB7IGNyZWF0ZWRCeU5hbWUgfSksXG4gICAgLi4uKG1vZGlmaWVkRGF0ZSAhPSBudWxsICYmIHsgbW9kaWZpZWREYXRlIH0pLFxuICAgIC4uLihtb2RpZmllZEJ5SWQgIT0gbnVsbCAmJiB7IG1vZGlmaWVkQnlJZCB9KSxcbiAgICAuLi4obW9kaWZpZWRCeU5hbWUgIT0gbnVsbCAmJiB7IG1vZGlmaWVkQnlOYW1lIH0pLFxuICB9O1xuXG4gIGNvbnN0IHBhdGllbnRXaXRoTWV0YSA9IHtcbiAgICAuLi5wYXRpZW50LFxuICAgIG1ldGE6IG1lcmdlQXVkaXRJbnRvTWV0YShwYXRpZW50Lm1ldGEsIGF1ZGl0TWVyZ2VkKSxcbiAgfTtcbiAgaWYgKGxhc3RVcGRhdGVkICYmICFwYXRpZW50V2l0aE1ldGEubWV0YS5sYXN0VXBkYXRlZCkge1xuICAgIChwYXRpZW50V2l0aE1ldGEubWV0YSBhcyBSZWNvcmQ8c3RyaW5nLCB1bmtub3duPikubGFzdFVwZGF0ZWQgPSBsYXN0VXBkYXRlZDtcbiAgfVxuXG4gIHJldHVybiB7XG4gICAgc2s6IFNLLFxuICAgIHRlbmFudElkLFxuICAgIHdvcmtzcGFjZUlkLFxuICAgIGlkOiBwYXRpZW50LmlkLFxuICAgIHJlc291cmNlOiBjb21wcmVzc1Jlc291cmNlKEpTT04uc3RyaW5naWZ5KHBhdGllbnRXaXRoTWV0YSkpLFxuICAgIHZpZDpcbiAgICAgIGxhc3RVcGRhdGVkLnJlcGxhY2UoL1stOlQuWl0vZywgXCJcIikuc2xpY2UoMCwgMTIpIHx8XG4gICAgICBEYXRlLm5vdygpLnRvU3RyaW5nKDM2KSxcbiAgICBsYXN0VXBkYXRlZCxcbiAgICBpZGVudGlmaWVyU3lzdGVtOiBcIlwiLFxuICAgIGlkZW50aWZpZXJWYWx1ZTogXCJcIixcbiAgICBmYWNpbGl0eUlkOiBcIlwiLFxuICAgIG5vcm1hbGl6ZWROYW1lOiBcIlwiLFxuICB9O1xufVxuXG4vKipcbiAqIFJlYWRzIGEgc2luZ2xlIFBhdGllbnQgSlNPTiBmaWxlIGFuZCBpbXBvcnRzIGl0IGludG8gdGhlIEZISVIgc3RvcmUuXG4gKiBUYWJsZSBuYW1lOiBvcHRpb25zLnRhYmxlTmFtZSA/PyBwcm9jZXNzLmVudi5EWU5BTU9fVEFCTEVfTkFNRSA/PyBcImplc3R0ZXN0dGFibGVcIi5cbiAqL1xuZXhwb3J0IGFzeW5jIGZ1bmN0aW9uIGltcG9ydFBhdGllbnRGcm9tRmlsZShcbiAgZmlsZVBhdGg6IHN0cmluZyxcbiAgb3B0aW9uczogSW1wb3J0UGF0aWVudE9wdGlvbnMsXG4pOiBQcm9taXNlPHsgaWQ6IHN0cmluZzsgdGVuYW50SWQ6IHN0cmluZzsgd29ya3NwYWNlSWQ6IHN0cmluZyB9PiB7XG4gIGNvbnN0IHJlc29sdmVkID0gcmVzb2x2ZShmaWxlUGF0aCk7XG4gIGNvbnN0IHJhdyA9IHJlYWRGaWxlU3luYyhyZXNvbHZlZCwgXCJ1dGYtOFwiKTtcbiAgY29uc3QgcGFyc2VkOiB1bmtub3duID0gSlNPTi5wYXJzZShyYXcpO1xuICBjb25zdCBwYXRpZW50ID0gZXh0cmFjdFBhdGllbnQocGFyc2VkKTtcblxuICBjb25zdCB0YWJsZU5hbWUgPVxuICAgIG9wdGlvbnMudGFibGVOYW1lID8/IHByb2Nlc3MuZW52LkRZTkFNT19UQUJMRV9OQU1FID8/IFwiamVzdHRlc3R0YWJsZVwiO1xuICBjb25zdCBzZXJ2aWNlID0gZ2V0RWhyUjREYXRhU2VydmljZSh0YWJsZU5hbWUpO1xuICBjb25zdCBhdHRycyA9IHBhdGllbnRUb1B1dEF0dHJzKHBhdGllbnQsIG9wdGlvbnMpO1xuXG4gIGNvbnN0IHJlc3VsdCA9IGF3YWl0IHNlcnZpY2UuZW50aXRpZXMucGF0aWVudFxuICAgIC5wdXQoYXR0cnMgYXMgdW5rbm93biBhcyBQYXJhbWV0ZXJzPHR5cGVvZiBzZXJ2aWNlLmVudGl0aWVzLnBhdGllbnQucHV0PlswXSlcbiAgICAuZ28oKTtcblxuICBjb25zdCBkYXRhID0gKFxuICAgIHJlc3VsdCBhcyB7IGRhdGE/OiB7IGlkOiBzdHJpbmc7IHRlbmFudElkOiBzdHJpbmc7IHdvcmtzcGFjZUlkOiBzdHJpbmcgfSB9XG4gICkuZGF0YTtcbiAgaWYgKCFkYXRhKSB7XG4gICAgdGhyb3cgbmV3IEVycm9yKGBQdXQgZmFpbGVkIGZvciBQYXRpZW50ICR7cGF0aWVudC5pZH1gKTtcbiAgfVxuXG4gIHJldHVybiB7XG4gICAgaWQ6IGRhdGEuaWQsXG4gICAgdGVuYW50SWQ6IGRhdGEudGVuYW50SWQsXG4gICAgd29ya3NwYWNlSWQ6IGRhdGEud29ya3NwYWNlSWQsXG4gIH07XG59XG5cbi8qKiBSdW4gYXMgc2NyaXB0OiBub2RlL3RzLW5vZGUgaW1wb3J0LXBhdGllbnQudHMgPHBhdGgtdG8tcGF0aWVudC5qc29uPiBbdGVuYW50SWRdIFt3b3Jrc3BhY2VJZF0gKi9cbmFzeW5jIGZ1bmN0aW9uIG1haW4oKTogUHJvbWlzZTx2b2lkPiB7XG4gIGNvbnN0IFssICwgZmlsZUFyZywgdGVuYW50SWQgPSBcInRlbmFudC0xXCIsIHdvcmtzcGFjZUlkID0gXCJ3cy0xXCJdID1cbiAgICBwcm9jZXNzLmFyZ3Y7XG5cbiAgaWYgKCFmaWxlQXJnKSB7XG4gICAgY29uc29sZS5lcnJvcihcbiAgICAgIFwiVXNhZ2U6IGltcG9ydC1wYXRpZW50LnRzIDxwYXRoLXRvLXBhdGllbnQuanNvbj4gW3RlbmFudElkXSBbd29ya3NwYWNlSWRdXCIsXG4gICAgKTtcbiAgICBwcm9jZXNzLmV4aXQoMSk7XG4gIH1cblxuICB0cnkge1xuICAgIGNvbnN0IHJlc3VsdCA9IGF3YWl0IGltcG9ydFBhdGllbnRGcm9tRmlsZShmaWxlQXJnLCB7XG4gICAgICB0ZW5hbnRJZCxcbiAgICAgIHdvcmtzcGFjZUlkLFxuICAgIH0pO1xuICAgIGNvbnNvbGUubG9nKFxuICAgICAgYEltcG9ydGVkIFBhdGllbnQgJHtyZXN1bHQuaWR9ICh0ZW5hbnQ9JHtyZXN1bHQudGVuYW50SWR9LCB3b3Jrc3BhY2U9JHtyZXN1bHQud29ya3NwYWNlSWR9KWAsXG4gICAgKTtcbiAgfSBjYXRjaCAoZXJyKSB7XG4gICAgY29uc29sZS5lcnJvcihlcnIpO1xuICAgIHByb2Nlc3MuZXhpdCgxKTtcbiAgfVxufVxuXG5pZiAocmVxdWlyZS5tYWluID09PSBtb2R1bGUpIHtcbiAgdm9pZCBtYWluKCk7XG59XG4iXX0=
@@ -1,13 +0,0 @@
1
- import { NodejsFunction } from "aws-cdk-lib/aws-lambda-nodejs";
2
- import { Construct } from "constructs";
3
- export interface RestApiLambdaProps {
4
- /**
5
- * DynamoDB table name for the data store. The Lambda receives it as the
6
- * environment variable DYNAMO_TABLE_NAME at runtime.
7
- */
8
- readonly dynamoTableName: string;
9
- }
10
- export declare class RestApiLambda extends Construct {
11
- readonly lambda: NodejsFunction;
12
- constructor(scope: Construct, props: RestApiLambdaProps);
13
- }
@@ -1 +0,0 @@
1
- export declare const handler: import("aws-lambda").Handler<any, any> & import("@codegenie/serverless-express/src/configure").ConfigureResult<any, any>;