@medplum/cdk 2.0.19 → 2.0.21
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/dist/cjs/index.cjs +12 -4
- package/dist/cjs/index.cjs.map +1 -1
- package/package.json +5 -8
- package/rollup.config.mjs +0 -13
- package/src/backend.ts +4 -4
- package/src/frontend.ts +8 -4
- package/src/index.test.ts +42 -0
- package/src/index.ts +1 -1
- package/src/storage.ts +7 -3
- package/dist/cjs/init.cjs +0 -452
- package/dist/cjs/init.cjs.map +0 -1
- package/medplum.prod.config.json +0 -23
- package/medplum.staging.config.json +0 -24
- package/src/__mocks__/@aws-sdk/client-acm.ts +0 -45
- package/src/__mocks__/@aws-sdk/client-ssm.ts +0 -13
- package/src/__mocks__/@aws-sdk/client-sts.ts +0 -18
- package/src/config.ts +0 -45
- package/src/init.test.ts +0 -437
- package/src/init.ts +0 -513
|
@@ -1,18 +0,0 @@
|
|
|
1
|
-
export class GetCallerIdentityCommand {
|
|
2
|
-
constructor(public readonly input: any) {}
|
|
3
|
-
}
|
|
4
|
-
|
|
5
|
-
export class STSClient {
|
|
6
|
-
constructor(readonly config?: any) {}
|
|
7
|
-
|
|
8
|
-
async send(command: any): Promise<any> {
|
|
9
|
-
if (command instanceof GetCallerIdentityCommand) {
|
|
10
|
-
if (this.config?.region === 'us-bad-1') {
|
|
11
|
-
throw new Error('Invalid region');
|
|
12
|
-
}
|
|
13
|
-
return {};
|
|
14
|
-
}
|
|
15
|
-
|
|
16
|
-
return undefined;
|
|
17
|
-
}
|
|
18
|
-
}
|
package/src/config.ts
DELETED
|
@@ -1,45 +0,0 @@
|
|
|
1
|
-
export interface MedplumInfraConfig {
|
|
2
|
-
name: string;
|
|
3
|
-
stackName: string;
|
|
4
|
-
accountNumber: string;
|
|
5
|
-
region: string;
|
|
6
|
-
domainName: string;
|
|
7
|
-
vpcId: string;
|
|
8
|
-
apiPort: number;
|
|
9
|
-
apiDomainName: string;
|
|
10
|
-
apiSslCertArn: string;
|
|
11
|
-
apiInternetFacing?: boolean;
|
|
12
|
-
appDomainName: string;
|
|
13
|
-
appSslCertArn: string;
|
|
14
|
-
appApiProxy?: boolean;
|
|
15
|
-
storageBucketName: string;
|
|
16
|
-
storageDomainName: string;
|
|
17
|
-
storageSslCertArn: string;
|
|
18
|
-
storagePublicKey: string;
|
|
19
|
-
maxAzs: number;
|
|
20
|
-
rdsInstances: number;
|
|
21
|
-
rdsInstanceType: string;
|
|
22
|
-
rdsSecretsArn?: string;
|
|
23
|
-
desiredServerCount: number;
|
|
24
|
-
serverImage: string;
|
|
25
|
-
serverMemory: number;
|
|
26
|
-
serverCpu: number;
|
|
27
|
-
loadBalancerLoggingEnabled: boolean;
|
|
28
|
-
loadBalancerLoggingBucket: string;
|
|
29
|
-
loadBalancerLoggingPrefix: string;
|
|
30
|
-
clamscanEnabled: boolean;
|
|
31
|
-
clamscanLoggingBucket: string;
|
|
32
|
-
clamscanLoggingPrefix: string;
|
|
33
|
-
skipDns?: boolean;
|
|
34
|
-
additionalContainers?: {
|
|
35
|
-
name: string;
|
|
36
|
-
image: string;
|
|
37
|
-
cpu?: number;
|
|
38
|
-
memory?: number;
|
|
39
|
-
essential?: boolean;
|
|
40
|
-
command?: string[];
|
|
41
|
-
environment?: {
|
|
42
|
-
[key: string]: string;
|
|
43
|
-
};
|
|
44
|
-
}[];
|
|
45
|
-
}
|
package/src/init.test.ts
DELETED
|
@@ -1,437 +0,0 @@
|
|
|
1
|
-
import { randomUUID } from 'crypto';
|
|
2
|
-
import { readFileSync, unlinkSync, writeFileSync } from 'fs';
|
|
3
|
-
import readline from 'readline';
|
|
4
|
-
import { main } from './init';
|
|
5
|
-
|
|
6
|
-
jest.mock('@aws-sdk/client-acm');
|
|
7
|
-
jest.mock('@aws-sdk/client-ssm');
|
|
8
|
-
jest.mock('@aws-sdk/client-sts');
|
|
9
|
-
|
|
10
|
-
test('Init tool success', async () => {
|
|
11
|
-
const filename = `test-${randomUUID()}.json`;
|
|
12
|
-
|
|
13
|
-
await main(
|
|
14
|
-
mockReadline(
|
|
15
|
-
'foo',
|
|
16
|
-
filename,
|
|
17
|
-
'us-east-1',
|
|
18
|
-
'account-123',
|
|
19
|
-
'TestStack',
|
|
20
|
-
'test.example.com',
|
|
21
|
-
'support@example.com',
|
|
22
|
-
'', // default API domain
|
|
23
|
-
'', // default app domain
|
|
24
|
-
'', // default storage domain
|
|
25
|
-
'', // default storage bucket
|
|
26
|
-
'', // default availability zones
|
|
27
|
-
'y', // Yes, create a database
|
|
28
|
-
'', // default database instances
|
|
29
|
-
'', // default server instances
|
|
30
|
-
'', // default server memory
|
|
31
|
-
'', // default server cpu
|
|
32
|
-
'', // default server image
|
|
33
|
-
'y', // Yes, request api certificate
|
|
34
|
-
'', // default DNS validation
|
|
35
|
-
'y', // Yes, request app certificate
|
|
36
|
-
'', // default DNS validation
|
|
37
|
-
'y', // Yes, request storage certificate
|
|
38
|
-
'', // default DNS validation
|
|
39
|
-
'y' // Yes, write to Parameter Store
|
|
40
|
-
)
|
|
41
|
-
);
|
|
42
|
-
|
|
43
|
-
const config = JSON.parse(readFileSync(filename, 'utf8'));
|
|
44
|
-
expect(config).toMatchObject({
|
|
45
|
-
apiPort: 8103,
|
|
46
|
-
name: 'foo',
|
|
47
|
-
region: 'us-east-1',
|
|
48
|
-
accountNumber: 'account-123',
|
|
49
|
-
stackName: 'TestStack',
|
|
50
|
-
domainName: 'test.example.com',
|
|
51
|
-
apiDomainName: 'api.test.example.com',
|
|
52
|
-
appDomainName: 'app.test.example.com',
|
|
53
|
-
storageDomainName: 'storage.test.example.com',
|
|
54
|
-
storageBucketName: 'medplum-foo-storage',
|
|
55
|
-
maxAzs: 2,
|
|
56
|
-
rdsInstances: 1,
|
|
57
|
-
desiredServerCount: 1,
|
|
58
|
-
serverMemory: 512,
|
|
59
|
-
serverCpu: 256,
|
|
60
|
-
serverImage: 'medplum/medplum-server:latest',
|
|
61
|
-
storagePublicKey: expect.stringContaining('-----BEGIN PUBLIC KEY-----'),
|
|
62
|
-
apiSslCertArn: 'arn:aws:acm:us-east-1:123456789012:certificate/12345678-1234-1234-1234-123456789012',
|
|
63
|
-
appSslCertArn: 'arn:aws:acm:us-east-1:123456789012:certificate/12345678-1234-1234-1234-123456789012',
|
|
64
|
-
storageSslCertArn: 'arn:aws:acm:us-east-1:123456789012:certificate/12345678-1234-1234-1234-123456789012',
|
|
65
|
-
});
|
|
66
|
-
unlinkSync(filename);
|
|
67
|
-
});
|
|
68
|
-
|
|
69
|
-
test('Overwrite existing file', async () => {
|
|
70
|
-
const filename = `test-${randomUUID()}.json`;
|
|
71
|
-
writeFileSync(filename, '{}', 'utf8');
|
|
72
|
-
|
|
73
|
-
await main(
|
|
74
|
-
mockReadline(
|
|
75
|
-
'foo',
|
|
76
|
-
filename,
|
|
77
|
-
'y', // Yes, overwrite
|
|
78
|
-
'us-east-1',
|
|
79
|
-
'account-123',
|
|
80
|
-
'TestStack',
|
|
81
|
-
'test.example.com',
|
|
82
|
-
'support@example.com',
|
|
83
|
-
'', // default API domain
|
|
84
|
-
'', // default app domain
|
|
85
|
-
'', // default storage domain
|
|
86
|
-
'', // default storage bucket
|
|
87
|
-
'', // default availability zones
|
|
88
|
-
'y', // Yes, create a database
|
|
89
|
-
'', // default database instances
|
|
90
|
-
'', // default server instances
|
|
91
|
-
'', // default server memory
|
|
92
|
-
'', // default server cpu
|
|
93
|
-
'', // default server image
|
|
94
|
-
'y', // Yes, request api certificate
|
|
95
|
-
'', // default DNS validation
|
|
96
|
-
'y', // Yes, request app certificate
|
|
97
|
-
'', // default DNS validation
|
|
98
|
-
'y', // Yes, request storage certificate
|
|
99
|
-
'', // default DNS validation
|
|
100
|
-
'y' // Yes, write to Parameter Store
|
|
101
|
-
)
|
|
102
|
-
);
|
|
103
|
-
|
|
104
|
-
const config = JSON.parse(readFileSync(filename, 'utf8'));
|
|
105
|
-
expect(config).toMatchObject({
|
|
106
|
-
apiPort: 8103,
|
|
107
|
-
name: 'foo',
|
|
108
|
-
region: 'us-east-1',
|
|
109
|
-
accountNumber: 'account-123',
|
|
110
|
-
stackName: 'TestStack',
|
|
111
|
-
domainName: 'test.example.com',
|
|
112
|
-
apiDomainName: 'api.test.example.com',
|
|
113
|
-
appDomainName: 'app.test.example.com',
|
|
114
|
-
storageDomainName: 'storage.test.example.com',
|
|
115
|
-
storageBucketName: 'medplum-foo-storage',
|
|
116
|
-
maxAzs: 2,
|
|
117
|
-
rdsInstances: 1,
|
|
118
|
-
desiredServerCount: 1,
|
|
119
|
-
serverMemory: 512,
|
|
120
|
-
serverCpu: 256,
|
|
121
|
-
serverImage: 'medplum/medplum-server:latest',
|
|
122
|
-
storagePublicKey: expect.stringContaining('-----BEGIN PUBLIC KEY-----'),
|
|
123
|
-
apiSslCertArn: 'arn:aws:acm:us-east-1:123456789012:certificate/12345678-1234-1234-1234-123456789012',
|
|
124
|
-
appSslCertArn: 'arn:aws:acm:us-east-1:123456789012:certificate/12345678-1234-1234-1234-123456789012',
|
|
125
|
-
storageSslCertArn: 'arn:aws:acm:us-east-1:123456789012:certificate/12345678-1234-1234-1234-123456789012',
|
|
126
|
-
});
|
|
127
|
-
unlinkSync(filename);
|
|
128
|
-
});
|
|
129
|
-
|
|
130
|
-
test('Invalid AWS credentials', async () => {
|
|
131
|
-
const filename = `test-${randomUUID()}.json`;
|
|
132
|
-
|
|
133
|
-
console.log = jest.fn();
|
|
134
|
-
|
|
135
|
-
await main(
|
|
136
|
-
mockReadline(
|
|
137
|
-
'foo',
|
|
138
|
-
filename,
|
|
139
|
-
'us-bad-1', // Special fake region for mock clients
|
|
140
|
-
'account-123',
|
|
141
|
-
'TestStack',
|
|
142
|
-
'test.example.com',
|
|
143
|
-
'support@example.com',
|
|
144
|
-
'', // default API domain
|
|
145
|
-
'', // default app domain
|
|
146
|
-
'', // default storage domain
|
|
147
|
-
'', // default storage bucket
|
|
148
|
-
'', // default availability zones
|
|
149
|
-
'y', // Yes, create a database
|
|
150
|
-
'', // default database instances
|
|
151
|
-
'', // default server instances
|
|
152
|
-
'', // default server memory
|
|
153
|
-
'', // default server cpu
|
|
154
|
-
'', // default server image
|
|
155
|
-
'y', // Yes, request api certificate
|
|
156
|
-
'', // default DNS validation
|
|
157
|
-
'y', // Yes, request app certificate
|
|
158
|
-
'', // default DNS validation
|
|
159
|
-
'y', // Yes, request storage certificate
|
|
160
|
-
'', // default DNS validation
|
|
161
|
-
'y' // Yes, write to Parameter Store
|
|
162
|
-
)
|
|
163
|
-
);
|
|
164
|
-
|
|
165
|
-
expect(console.log).toHaveBeenCalledWith('Warning: Unable to get AWS account ID', 'Invalid region');
|
|
166
|
-
|
|
167
|
-
const config = JSON.parse(readFileSync(filename, 'utf8'));
|
|
168
|
-
expect(config).toMatchObject({
|
|
169
|
-
apiPort: 8103,
|
|
170
|
-
name: 'foo',
|
|
171
|
-
region: 'us-bad-1',
|
|
172
|
-
accountNumber: 'account-123',
|
|
173
|
-
stackName: 'TestStack',
|
|
174
|
-
domainName: 'test.example.com',
|
|
175
|
-
apiDomainName: 'api.test.example.com',
|
|
176
|
-
appDomainName: 'app.test.example.com',
|
|
177
|
-
storageDomainName: 'storage.test.example.com',
|
|
178
|
-
storageBucketName: 'medplum-foo-storage',
|
|
179
|
-
maxAzs: 2,
|
|
180
|
-
rdsInstances: 1,
|
|
181
|
-
desiredServerCount: 1,
|
|
182
|
-
serverMemory: 512,
|
|
183
|
-
serverCpu: 256,
|
|
184
|
-
serverImage: 'medplum/medplum-server:latest',
|
|
185
|
-
storagePublicKey: expect.stringContaining('-----BEGIN PUBLIC KEY-----'),
|
|
186
|
-
apiSslCertArn: 'TODO',
|
|
187
|
-
appSslCertArn: 'arn:aws:acm:us-east-1:123456789012:certificate/12345678-1234-1234-1234-123456789012',
|
|
188
|
-
storageSslCertArn: 'arn:aws:acm:us-east-1:123456789012:certificate/12345678-1234-1234-1234-123456789012',
|
|
189
|
-
});
|
|
190
|
-
unlinkSync(filename);
|
|
191
|
-
});
|
|
192
|
-
|
|
193
|
-
test('Bring your own database', async () => {
|
|
194
|
-
const filename = `test-${randomUUID()}.json`;
|
|
195
|
-
|
|
196
|
-
await main(
|
|
197
|
-
mockReadline(
|
|
198
|
-
'foo',
|
|
199
|
-
filename,
|
|
200
|
-
'us-east-1',
|
|
201
|
-
'account-123',
|
|
202
|
-
'TestStack',
|
|
203
|
-
'test.example.com',
|
|
204
|
-
'support@example.com',
|
|
205
|
-
'', // default API domain
|
|
206
|
-
'', // default app domain
|
|
207
|
-
'', // default storage domain
|
|
208
|
-
'', // default storage bucket
|
|
209
|
-
'', // default availability zones
|
|
210
|
-
'n', // No, do not create a database
|
|
211
|
-
'', // default server instances
|
|
212
|
-
'', // default server memory
|
|
213
|
-
'', // default server cpu
|
|
214
|
-
'', // default server image
|
|
215
|
-
'y', // Yes, request api certificate
|
|
216
|
-
'', // default DNS validation
|
|
217
|
-
'y', // Yes, request app certificate
|
|
218
|
-
'', // default DNS validation
|
|
219
|
-
'y', // Yes, request storage certificate
|
|
220
|
-
'', // default DNS validation
|
|
221
|
-
'y' // Yes, write to Parameter Store
|
|
222
|
-
)
|
|
223
|
-
);
|
|
224
|
-
|
|
225
|
-
const config = JSON.parse(readFileSync(filename, 'utf8'));
|
|
226
|
-
expect(config).toMatchObject({
|
|
227
|
-
apiPort: 8103,
|
|
228
|
-
name: 'foo',
|
|
229
|
-
region: 'us-east-1',
|
|
230
|
-
accountNumber: 'account-123',
|
|
231
|
-
stackName: 'TestStack',
|
|
232
|
-
domainName: 'test.example.com',
|
|
233
|
-
apiDomainName: 'api.test.example.com',
|
|
234
|
-
appDomainName: 'app.test.example.com',
|
|
235
|
-
storageDomainName: 'storage.test.example.com',
|
|
236
|
-
storageBucketName: 'medplum-foo-storage',
|
|
237
|
-
maxAzs: 2,
|
|
238
|
-
rdsSecretsArn: 'TODO',
|
|
239
|
-
desiredServerCount: 1,
|
|
240
|
-
serverMemory: 512,
|
|
241
|
-
serverCpu: 256,
|
|
242
|
-
serverImage: 'medplum/medplum-server:latest',
|
|
243
|
-
storagePublicKey: expect.stringContaining('-----BEGIN PUBLIC KEY-----'),
|
|
244
|
-
apiSslCertArn: 'arn:aws:acm:us-east-1:123456789012:certificate/12345678-1234-1234-1234-123456789012',
|
|
245
|
-
appSslCertArn: 'arn:aws:acm:us-east-1:123456789012:certificate/12345678-1234-1234-1234-123456789012',
|
|
246
|
-
storageSslCertArn: 'arn:aws:acm:us-east-1:123456789012:certificate/12345678-1234-1234-1234-123456789012',
|
|
247
|
-
});
|
|
248
|
-
unlinkSync(filename);
|
|
249
|
-
});
|
|
250
|
-
|
|
251
|
-
test('Do not request SSL certs', async () => {
|
|
252
|
-
const filename = `test-${randomUUID()}.json`;
|
|
253
|
-
|
|
254
|
-
await main(
|
|
255
|
-
mockReadline(
|
|
256
|
-
'foo',
|
|
257
|
-
filename,
|
|
258
|
-
'us-east-1',
|
|
259
|
-
'account-123',
|
|
260
|
-
'TestStack',
|
|
261
|
-
'test.example.com',
|
|
262
|
-
'support@example.com',
|
|
263
|
-
'', // default API domain
|
|
264
|
-
'', // default app domain
|
|
265
|
-
'', // default storage domain
|
|
266
|
-
'', // default storage bucket
|
|
267
|
-
'', // default availability zones
|
|
268
|
-
'y', // Yes, create a database
|
|
269
|
-
'', // default database instances
|
|
270
|
-
'', // default server instances
|
|
271
|
-
'', // default server memory
|
|
272
|
-
'', // default server cpu
|
|
273
|
-
'', // default server image
|
|
274
|
-
'n', // No api certificate
|
|
275
|
-
'n', // No app certificate
|
|
276
|
-
'n', // No storage certificate
|
|
277
|
-
'y' // Yes, write to Parameter Store
|
|
278
|
-
)
|
|
279
|
-
);
|
|
280
|
-
|
|
281
|
-
const config = JSON.parse(readFileSync(filename, 'utf8'));
|
|
282
|
-
expect(config).toMatchObject({
|
|
283
|
-
apiPort: 8103,
|
|
284
|
-
name: 'foo',
|
|
285
|
-
region: 'us-east-1',
|
|
286
|
-
accountNumber: 'account-123',
|
|
287
|
-
stackName: 'TestStack',
|
|
288
|
-
domainName: 'test.example.com',
|
|
289
|
-
apiDomainName: 'api.test.example.com',
|
|
290
|
-
appDomainName: 'app.test.example.com',
|
|
291
|
-
storageDomainName: 'storage.test.example.com',
|
|
292
|
-
storageBucketName: 'medplum-foo-storage',
|
|
293
|
-
maxAzs: 2,
|
|
294
|
-
rdsInstances: 1,
|
|
295
|
-
desiredServerCount: 1,
|
|
296
|
-
serverMemory: 512,
|
|
297
|
-
serverCpu: 256,
|
|
298
|
-
serverImage: 'medplum/medplum-server:latest',
|
|
299
|
-
storagePublicKey: expect.stringContaining('-----BEGIN PUBLIC KEY-----'),
|
|
300
|
-
apiSslCertArn: 'TODO',
|
|
301
|
-
appSslCertArn: 'TODO',
|
|
302
|
-
storageSslCertArn: 'TODO',
|
|
303
|
-
});
|
|
304
|
-
unlinkSync(filename);
|
|
305
|
-
});
|
|
306
|
-
|
|
307
|
-
test('Existing SSL certificates', async () => {
|
|
308
|
-
const filename = `test-${randomUUID()}.json`;
|
|
309
|
-
|
|
310
|
-
await main(
|
|
311
|
-
mockReadline(
|
|
312
|
-
'foo',
|
|
313
|
-
filename,
|
|
314
|
-
'us-east-1',
|
|
315
|
-
'account-123',
|
|
316
|
-
'TestStack',
|
|
317
|
-
'existing.example.com',
|
|
318
|
-
'support@example.com',
|
|
319
|
-
'', // default API domain
|
|
320
|
-
'', // default app domain
|
|
321
|
-
'', // default storage domain
|
|
322
|
-
'', // default storage bucket
|
|
323
|
-
'', // default availability zones
|
|
324
|
-
'y', // Yes, create a database
|
|
325
|
-
'', // default database instances
|
|
326
|
-
'', // default server instances
|
|
327
|
-
'', // default server memory
|
|
328
|
-
'', // default server cpu
|
|
329
|
-
'', // default server image
|
|
330
|
-
'y', // Yes, request api certificate
|
|
331
|
-
'', // default DNS validation
|
|
332
|
-
'y', // Yes, request app certificate
|
|
333
|
-
'', // default DNS validation
|
|
334
|
-
'y', // Yes, request storage certificate
|
|
335
|
-
'', // default DNS validation
|
|
336
|
-
'y' // Yes, write to Parameter Store
|
|
337
|
-
)
|
|
338
|
-
);
|
|
339
|
-
|
|
340
|
-
const config = JSON.parse(readFileSync(filename, 'utf8'));
|
|
341
|
-
expect(config).toMatchObject({
|
|
342
|
-
apiPort: 8103,
|
|
343
|
-
name: 'foo',
|
|
344
|
-
region: 'us-east-1',
|
|
345
|
-
accountNumber: 'account-123',
|
|
346
|
-
stackName: 'TestStack',
|
|
347
|
-
domainName: 'existing.example.com',
|
|
348
|
-
apiDomainName: 'api.existing.example.com',
|
|
349
|
-
appDomainName: 'app.existing.example.com',
|
|
350
|
-
storageDomainName: 'storage.existing.example.com',
|
|
351
|
-
storageBucketName: 'medplum-foo-storage',
|
|
352
|
-
maxAzs: 2,
|
|
353
|
-
rdsInstances: 1,
|
|
354
|
-
desiredServerCount: 1,
|
|
355
|
-
serverMemory: 512,
|
|
356
|
-
serverCpu: 256,
|
|
357
|
-
serverImage: 'medplum/medplum-server:latest',
|
|
358
|
-
storagePublicKey: expect.stringContaining('-----BEGIN PUBLIC KEY-----'),
|
|
359
|
-
apiSslCertArn: 'arn:aws:acm:us-east-1:123456789012:certificate/12345678-1234-1234-1234-123456789013',
|
|
360
|
-
appSslCertArn: 'arn:aws:acm:us-east-1:123456789012:certificate/12345678-1234-1234-1234-123456789012',
|
|
361
|
-
storageSslCertArn: 'arn:aws:acm:us-east-1:123456789012:certificate/12345678-1234-1234-1234-123456789012',
|
|
362
|
-
});
|
|
363
|
-
unlinkSync(filename);
|
|
364
|
-
});
|
|
365
|
-
|
|
366
|
-
test('Handle empty support email', async () => {
|
|
367
|
-
const filename = `test-${randomUUID()}.json`;
|
|
368
|
-
|
|
369
|
-
await main(
|
|
370
|
-
mockReadline(
|
|
371
|
-
'foo',
|
|
372
|
-
filename,
|
|
373
|
-
'us-east-1',
|
|
374
|
-
'account-123',
|
|
375
|
-
'TestStack',
|
|
376
|
-
'test.example.com',
|
|
377
|
-
'', // Empty support email -- user will have to set manually later, but don't crash
|
|
378
|
-
'', // default API domain
|
|
379
|
-
'', // default app domain
|
|
380
|
-
'', // default storage domain
|
|
381
|
-
'', // default storage bucket
|
|
382
|
-
'', // default availability zones
|
|
383
|
-
'y', // Yes, create a database
|
|
384
|
-
'', // default database instances
|
|
385
|
-
'', // default server instances
|
|
386
|
-
'', // default server memory
|
|
387
|
-
'', // default server cpu
|
|
388
|
-
'', // default server image
|
|
389
|
-
'y', // Yes, request api certificate
|
|
390
|
-
'', // default DNS validation
|
|
391
|
-
'y', // Yes, request app certificate
|
|
392
|
-
'', // default DNS validation
|
|
393
|
-
'y', // Yes, request storage certificate
|
|
394
|
-
'', // default DNS validation
|
|
395
|
-
'y' // Yes, write to Parameter Store
|
|
396
|
-
)
|
|
397
|
-
);
|
|
398
|
-
|
|
399
|
-
const config = JSON.parse(readFileSync(filename, 'utf8'));
|
|
400
|
-
expect(config).toMatchObject({
|
|
401
|
-
apiPort: 8103,
|
|
402
|
-
name: 'foo',
|
|
403
|
-
region: 'us-east-1',
|
|
404
|
-
accountNumber: 'account-123',
|
|
405
|
-
stackName: 'TestStack',
|
|
406
|
-
domainName: 'test.example.com',
|
|
407
|
-
apiDomainName: 'api.test.example.com',
|
|
408
|
-
appDomainName: 'app.test.example.com',
|
|
409
|
-
storageDomainName: 'storage.test.example.com',
|
|
410
|
-
storageBucketName: 'medplum-foo-storage',
|
|
411
|
-
maxAzs: 2,
|
|
412
|
-
rdsInstances: 1,
|
|
413
|
-
desiredServerCount: 1,
|
|
414
|
-
serverMemory: 512,
|
|
415
|
-
serverCpu: 256,
|
|
416
|
-
serverImage: 'medplum/medplum-server:latest',
|
|
417
|
-
storagePublicKey: expect.stringContaining('-----BEGIN PUBLIC KEY-----'),
|
|
418
|
-
apiSslCertArn: 'arn:aws:acm:us-east-1:123456789012:certificate/12345678-1234-1234-1234-123456789012',
|
|
419
|
-
appSslCertArn: 'arn:aws:acm:us-east-1:123456789012:certificate/12345678-1234-1234-1234-123456789012',
|
|
420
|
-
storageSslCertArn: 'arn:aws:acm:us-east-1:123456789012:certificate/12345678-1234-1234-1234-123456789012',
|
|
421
|
-
});
|
|
422
|
-
unlinkSync(filename);
|
|
423
|
-
});
|
|
424
|
-
|
|
425
|
-
function mockReadline(...answers: string[]): readline.Interface {
|
|
426
|
-
const result = { write: jest.fn(), question: jest.fn() };
|
|
427
|
-
const debug = false;
|
|
428
|
-
for (const answer of answers) {
|
|
429
|
-
result.question.mockImplementationOnce((q: string, cb: (answer: string) => void) => {
|
|
430
|
-
if (debug) {
|
|
431
|
-
console.log(q, answer);
|
|
432
|
-
}
|
|
433
|
-
cb(answer);
|
|
434
|
-
});
|
|
435
|
-
}
|
|
436
|
-
return result as unknown as readline.Interface;
|
|
437
|
-
}
|