seamless-cli 0.2.0 → 0.5.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.
Files changed (129) hide show
  1. package/README.md +5 -6
  2. package/dist/commands/help.js +18 -1
  3. package/dist/commands/help.js.map +1 -1
  4. package/dist/commands/init.js +104 -21
  5. package/dist/commands/init.js.map +1 -1
  6. package/dist/commands/verify.js +259 -0
  7. package/dist/commands/verify.js.map +1 -0
  8. package/dist/core/bootstrapSecret.js +12 -4
  9. package/dist/core/bootstrapSecret.js.map +1 -1
  10. package/dist/core/exec.js +2 -1
  11. package/dist/core/exec.js.map +1 -1
  12. package/dist/core/fetch.js +2 -1
  13. package/dist/core/fetch.js.map +1 -1
  14. package/dist/core/images.js +11 -0
  15. package/dist/core/images.js.map +1 -0
  16. package/dist/core/oauthProviders.js +89 -0
  17. package/dist/core/oauthProviders.js.map +1 -0
  18. package/dist/core/templates.js +185 -0
  19. package/dist/core/templates.js.map +1 -0
  20. package/dist/generators/auth/auth.js +40 -19
  21. package/dist/generators/auth/auth.js.map +1 -1
  22. package/dist/generators/config/config.js +3 -4
  23. package/dist/generators/config/config.js.map +1 -1
  24. package/dist/generators/docker/docker.js +51 -31
  25. package/dist/generators/docker/docker.js.map +1 -1
  26. package/dist/index.js +11 -2
  27. package/dist/index.js.map +1 -1
  28. package/dist/prompts/oauthSetup.js +36 -0
  29. package/dist/prompts/oauthSetup.js.map +1 -0
  30. package/dist/prompts/projectSetup.js +43 -19
  31. package/dist/prompts/projectSetup.js.map +1 -1
  32. package/package.json +6 -1
  33. package/verify/adapter-app/Dockerfile +14 -0
  34. package/verify/adapter-app/package.json +13 -0
  35. package/verify/adapter-app/server.mjs +62 -0
  36. package/verify/adapter-app/vendor/.gitignore +3 -0
  37. package/verify/adapter-app/vendor/.gitkeep +0 -0
  38. package/verify/docker-compose.verify.yml +154 -0
  39. package/verify/harness/adapter/emailOtpLogin.spec.ts +12 -0
  40. package/verify/harness/adapter/magicLink.spec.ts +14 -0
  41. package/verify/harness/adapter/oauth.spec.ts +11 -0
  42. package/verify/harness/adapter/registration.spec.ts +11 -0
  43. package/verify/harness/adapter/sessionLifecycle.spec.ts +20 -0
  44. package/verify/harness/api/adminBootstrap.spec.ts +34 -0
  45. package/verify/harness/api/emailOtp.spec.ts +17 -0
  46. package/verify/harness/api/jwks.spec.ts +17 -0
  47. package/verify/harness/api/magicLink.spec.ts +36 -0
  48. package/verify/harness/api/oauth.spec.ts +12 -0
  49. package/verify/harness/api/organizations.spec.ts +28 -0
  50. package/verify/harness/api/phoneOtp.spec.ts +19 -0
  51. package/verify/harness/api/sessionLifecycle.spec.ts +26 -0
  52. package/verify/harness/api/stepUp.spec.ts +39 -0
  53. package/verify/harness/api/totp.spec.ts +24 -0
  54. package/verify/harness/global-setup.ts +45 -0
  55. package/verify/harness/lib/adapterFlows.ts +57 -0
  56. package/verify/harness/lib/client.ts +32 -0
  57. package/verify/harness/lib/env.ts +45 -0
  58. package/verify/harness/lib/fixtures.ts +20 -0
  59. package/verify/harness/lib/flows.ts +204 -0
  60. package/verify/harness/lib/matrixReporter.ts +73 -0
  61. package/verify/harness/lib/reactFlows.ts +117 -0
  62. package/verify/harness/lib/serviceToken.ts +26 -0
  63. package/verify/harness/lib/totp.ts +36 -0
  64. package/verify/harness/mock-oidc.ts +112 -0
  65. package/verify/harness/package-lock.json +93 -0
  66. package/verify/harness/package.json +14 -0
  67. package/verify/harness/playwright.config.ts +30 -0
  68. package/verify/harness/react/emailOtpLogin.spec.ts +13 -0
  69. package/verify/harness/react/logout.spec.ts +17 -0
  70. package/verify/harness/react/magicLinkLogin.spec.ts +29 -0
  71. package/verify/harness/react/oauth.spec.ts +13 -0
  72. package/verify/harness/react/passkeyLogin.spec.ts +24 -0
  73. package/verify/harness/react/passkeyRegister.spec.ts +15 -0
  74. package/verify/harness/react/register.spec.ts +18 -0
  75. package/verify/react-vendor/.gitkeep +0 -0
  76. package/dist/commands/contribute.js +0 -121
  77. package/dist/commands/contribute.js.map +0 -1
  78. package/dist/commands/deploy.js +0 -190
  79. package/dist/commands/deploy.js.map +0 -1
  80. package/dist/commands/destroy.js +0 -122
  81. package/dist/commands/destroy.js.map +0 -1
  82. package/dist/contributor/catalog.js +0 -129
  83. package/dist/contributor/catalog.js.map +0 -1
  84. package/dist/contributor/workspace.js +0 -551
  85. package/dist/contributor/workspace.js.map +0 -1
  86. package/dist/core/acm.js +0 -24
  87. package/dist/core/acm.js.map +0 -1
  88. package/dist/core/aws.js +0 -374
  89. package/dist/core/aws.js.map +0 -1
  90. package/dist/core/buildPush.js +0 -91
  91. package/dist/core/buildPush.js.map +0 -1
  92. package/dist/core/configure.js +0 -25
  93. package/dist/core/configure.js.map +0 -1
  94. package/dist/core/deployConfig.js +0 -66
  95. package/dist/core/deployConfig.js.map +0 -1
  96. package/dist/core/deployManifest.js +0 -163
  97. package/dist/core/deployManifest.js.map +0 -1
  98. package/dist/core/deploySecrets.js +0 -31
  99. package/dist/core/deploySecrets.js.map +0 -1
  100. package/dist/core/destroy.js +0 -38
  101. package/dist/core/destroy.js.map +0 -1
  102. package/dist/core/envDiscovery.js +0 -153
  103. package/dist/core/envDiscovery.js.map +0 -1
  104. package/dist/core/envRegistry.js +0 -76
  105. package/dist/core/envRegistry.js.map +0 -1
  106. package/dist/core/health.js +0 -11
  107. package/dist/core/health.js.map +0 -1
  108. package/dist/core/help.js +0 -75
  109. package/dist/core/help.js.map +0 -1
  110. package/dist/core/preReqs.js +0 -14
  111. package/dist/core/preReqs.js.map +0 -1
  112. package/dist/core/terraform.js +0 -34
  113. package/dist/core/terraform.js.map +0 -1
  114. package/dist/core/tfVars.js +0 -69
  115. package/dist/core/tfVars.js.map +0 -1
  116. package/dist/generators/backend/express.js +0 -13
  117. package/dist/generators/backend/express.js.map +0 -1
  118. package/dist/generators/deploy/aws/dev/files.js +0 -36
  119. package/dist/generators/deploy/aws/dev/files.js.map +0 -1
  120. package/dist/generators/deploy/aws/dev/template.js +0 -1240
  121. package/dist/generators/deploy/aws/dev/template.js.map +0 -1
  122. package/dist/generators/frontend/react.js +0 -13
  123. package/dist/generators/frontend/react.js.map +0 -1
  124. package/dist/prompts/contributeSetup.js +0 -39
  125. package/dist/prompts/contributeSetup.js.map +0 -1
  126. package/dist/prompts/deploySetup.js +0 -244
  127. package/dist/prompts/deploySetup.js.map +0 -1
  128. package/dist/utils/repoUtils.js +0 -23
  129. package/dist/utils/repoUtils.js.map +0 -1
package/dist/core/aws.js DELETED
@@ -1,374 +0,0 @@
1
- import { execCommand } from "./exec.js";
2
- export async function getAwsIdentity(profile, region) {
3
- const result = await execCommand("aws", [
4
- "--profile",
5
- profile,
6
- "--region",
7
- region,
8
- "sts",
9
- "get-caller-identity",
10
- "--output",
11
- "json",
12
- ], { quiet: true });
13
- const parsed = JSON.parse(result.stdout);
14
- return {
15
- accountId: parsed.Account,
16
- arn: parsed.Arn,
17
- userId: parsed.UserId,
18
- };
19
- }
20
- export async function listHostedZones(profile, region) {
21
- const result = await execCommand("aws", [
22
- "--profile",
23
- profile,
24
- "--region",
25
- region,
26
- "route53",
27
- "list-hosted-zones",
28
- "--output",
29
- "json",
30
- ], { quiet: true });
31
- const parsed = JSON.parse(result.stdout);
32
- return (parsed.HostedZones ?? [])
33
- .map((zone) => ({
34
- id: zone.Id.replace("/hostedzone/", ""),
35
- name: zone.Name.replace(/\.$/, ""),
36
- privateZone: Boolean(zone.Config?.PrivateZone),
37
- }))
38
- .filter((zone) => !zone.privateZone)
39
- .sort((a, b) => a.name.localeCompare(b.name));
40
- }
41
- export async function ensureRoute53ZoneExistsByName(profile, region, hostedZoneDomain) {
42
- const zones = await listHostedZones(profile, region);
43
- const match = zones.find((zone) => zone.name === hostedZoneDomain);
44
- if (!match) {
45
- throw new Error(`Route 53 hosted zone not found for domain: ${hostedZoneDomain}`);
46
- }
47
- return match;
48
- }
49
- export async function getEcrLoginPassword(profile, region) {
50
- const result = await execCommand("aws", ["--profile", profile, "--region", region, "ecr", "get-login-password"], { quiet: true });
51
- return result.stdout.trim();
52
- }
53
- export function buildEcrRegistry(accountId, region) {
54
- return `${accountId}.dkr.ecr.${region}.amazonaws.com`;
55
- }
56
- export function buildEcrImageUri(registry, repositoryName, tag) {
57
- return `${registry}/${repositoryName}:${tag}`;
58
- }
59
- export async function describeEcrRepository(profile, region, repositoryName) {
60
- try {
61
- const result = await execCommand("aws", [
62
- "--profile",
63
- profile,
64
- "--region",
65
- region,
66
- "ecr",
67
- "describe-repositories",
68
- "--repository-names",
69
- repositoryName,
70
- "--output",
71
- "json",
72
- ], { quiet: true });
73
- const parsed = JSON.parse(result.stdout);
74
- const repo = parsed.repositories?.[0];
75
- if (!repo)
76
- return null;
77
- return {
78
- repositoryName: repo.repositoryName,
79
- repositoryUri: repo.repositoryUri,
80
- };
81
- }
82
- catch {
83
- return null;
84
- }
85
- }
86
- export async function ensureEcrRepository(profile, region, repositoryName) {
87
- const existing = await describeEcrRepository(profile, region, repositoryName);
88
- if (existing)
89
- return existing;
90
- const result = await execCommand("aws", [
91
- "--profile",
92
- profile,
93
- "--region",
94
- region,
95
- "ecr",
96
- "create-repository",
97
- "--repository-name",
98
- repositoryName,
99
- "--image-tag-mutability",
100
- "MUTABLE",
101
- "--image-scanning-configuration",
102
- "scanOnPush=true",
103
- "--output",
104
- "json",
105
- ], { quiet: true });
106
- const parsed = JSON.parse(result.stdout);
107
- return {
108
- repositoryName: parsed.repository.repositoryName,
109
- repositoryUri: parsed.repository.repositoryUri,
110
- };
111
- }
112
- export async function ensureEcrRepositories(profile, region, repositoryNames) {
113
- const repositories = [];
114
- for (const repositoryName of repositoryNames) {
115
- const repository = await ensureEcrRepository(profile, region, repositoryName);
116
- repositories.push(repository);
117
- }
118
- return repositories;
119
- }
120
- export async function listEcrImages(profile, region, repositoryName) {
121
- try {
122
- const result = await execCommand("aws", [
123
- "--profile",
124
- profile,
125
- "--region",
126
- region,
127
- "ecr",
128
- "list-images",
129
- "--repository-name",
130
- repositoryName,
131
- "--query",
132
- "imageIds[*].imageTag",
133
- "--output",
134
- "json",
135
- ], { quiet: true });
136
- const parsed = JSON.parse(result.stdout);
137
- return parsed.filter((tag) => Boolean(tag));
138
- }
139
- catch {
140
- return [];
141
- }
142
- }
143
- export async function deleteEcrImages(profile, region, repositoryName) {
144
- const result = await execCommand("aws", [
145
- "--profile",
146
- profile,
147
- "--region",
148
- region,
149
- "ecr",
150
- "list-images",
151
- "--repository-name",
152
- repositoryName,
153
- "--output",
154
- "json",
155
- ], { quiet: true });
156
- const parsed = JSON.parse(result.stdout);
157
- const imageIds = parsed.imageIds ?? [];
158
- if (imageIds.length === 0)
159
- return;
160
- const payload = JSON.stringify({
161
- imageIds: imageIds.map((image) => {
162
- if (image.imageDigest) {
163
- return { imageDigest: image.imageDigest };
164
- }
165
- return { imageTag: image.imageTag };
166
- }),
167
- });
168
- await execCommand("aws", [
169
- "--profile",
170
- profile,
171
- "--region",
172
- region,
173
- "ecr",
174
- "batch-delete-image",
175
- "--repository-name",
176
- repositoryName,
177
- "--cli-input-json",
178
- payload,
179
- ], { quiet: true });
180
- }
181
- export async function deleteEcrRepository(profile, region, repositoryName) {
182
- try {
183
- await execCommand("aws", [
184
- "--profile",
185
- profile,
186
- "--region",
187
- region,
188
- "ecr",
189
- "delete-repository",
190
- "--repository-name",
191
- repositoryName,
192
- "--force",
193
- ], { quiet: true });
194
- }
195
- catch { }
196
- }
197
- export async function listAllS3ObjectVersions(profile, region, bucketName) {
198
- const result = await execCommand("aws", [
199
- "--profile",
200
- profile,
201
- "--region",
202
- region,
203
- "s3api",
204
- "list-object-versions",
205
- "--bucket",
206
- bucketName,
207
- "--output",
208
- "json",
209
- ], { quiet: true });
210
- const parsed = JSON.parse(result.stdout);
211
- const versions = (parsed.Versions ?? [])
212
- .filter((item) => Boolean(item.Key) && Boolean(item.VersionId))
213
- .map((item) => ({
214
- Key: item.Key,
215
- VersionId: item.VersionId,
216
- }));
217
- const deleteMarkers = (parsed.DeleteMarkers ?? [])
218
- .filter((item) => Boolean(item.Key) && Boolean(item.VersionId))
219
- .map((item) => ({
220
- Key: item.Key,
221
- VersionId: item.VersionId,
222
- }));
223
- return [...versions, ...deleteMarkers];
224
- }
225
- export async function deleteS3ObjectVersionsBatch(profile, region, bucketName, objects) {
226
- if (objects.length === 0)
227
- return;
228
- const payload = JSON.stringify({
229
- Bucket: bucketName,
230
- Delete: {
231
- Objects: objects.map((item) => ({
232
- Key: item.Key,
233
- VersionId: item.VersionId,
234
- })),
235
- Quiet: true,
236
- },
237
- });
238
- await execCommand("aws", [
239
- "--profile",
240
- profile,
241
- "--region",
242
- region,
243
- "s3api",
244
- "delete-objects",
245
- "--cli-input-json",
246
- payload,
247
- ], { quiet: true });
248
- }
249
- export async function emptyVersionedS3Bucket(profile, region, bucketName) {
250
- while (true) {
251
- const objects = await listAllS3ObjectVersions(profile, region, bucketName);
252
- if (objects.length === 0)
253
- break;
254
- const batchSize = 500;
255
- for (let i = 0; i < objects.length; i += batchSize) {
256
- const batch = objects.slice(i, i + batchSize);
257
- await deleteS3ObjectVersionsBatch(profile, region, bucketName, batch);
258
- }
259
- }
260
- }
261
- export async function findExistingAcmCertificate(profile, region, rootDomain) {
262
- const result = await execCommand("aws", [
263
- "--profile",
264
- profile,
265
- "--region",
266
- region,
267
- "acm",
268
- "list-certificates",
269
- "--output",
270
- "json",
271
- ], { quiet: true });
272
- const parsed = JSON.parse(result.stdout);
273
- const match = (parsed.CertificateSummaryList ?? []).find((cert) => cert.DomainName === rootDomain && cert.CertificateArn);
274
- return match?.CertificateArn ?? null;
275
- }
276
- export async function requestAcmCertificate(profile, region, rootDomain, sans) {
277
- const result = await execCommand("aws", [
278
- "--profile",
279
- profile,
280
- "--region",
281
- region,
282
- "acm",
283
- "request-certificate",
284
- "--domain-name",
285
- rootDomain,
286
- "--subject-alternative-names",
287
- ...sans,
288
- "--validation-method",
289
- "DNS",
290
- "--output",
291
- "json",
292
- ], { quiet: true });
293
- const parsed = JSON.parse(result.stdout);
294
- return parsed.CertificateArn;
295
- }
296
- export async function describeAcmCertificate(profile, region, certificateArn) {
297
- const result = await execCommand("aws", [
298
- "--profile",
299
- profile,
300
- "--region",
301
- region,
302
- "acm",
303
- "describe-certificate",
304
- "--certificate-arn",
305
- certificateArn,
306
- "--output",
307
- "json",
308
- ], { quiet: true });
309
- const parsed = JSON.parse(result.stdout);
310
- const validationRecords = (parsed.Certificate?.DomainValidationOptions ?? [])
311
- .map((option) => option.ResourceRecord)
312
- .filter((record) => Boolean(record?.Name) &&
313
- Boolean(record?.Type) &&
314
- Boolean(record?.Value))
315
- .map((record) => ({
316
- name: record.Name,
317
- type: record.Type,
318
- value: record.Value,
319
- }));
320
- return {
321
- status: parsed.Certificate?.Status ?? "UNKNOWN",
322
- validationRecords,
323
- };
324
- }
325
- export async function upsertRoute53Records(profile, hostedZoneId, records) {
326
- if (records.length === 0) {
327
- throw new Error("No ACM validation records available yet");
328
- }
329
- const payload = JSON.stringify({
330
- Changes: records.map((record) => ({
331
- Action: "UPSERT",
332
- ResourceRecordSet: {
333
- Name: record.name,
334
- Type: record.type,
335
- TTL: 60,
336
- ResourceRecords: [{ Value: record.value }],
337
- },
338
- })),
339
- });
340
- await execCommand("aws", [
341
- "--profile",
342
- profile,
343
- "route53",
344
- "change-resource-record-sets",
345
- "--hosted-zone-id",
346
- hostedZoneId,
347
- "--change-batch",
348
- payload,
349
- ], { quiet: true });
350
- }
351
- export async function waitForAcmValidationRecords(profile, region, certificateArn, maxAttempts = 20) {
352
- for (let attempt = 0; attempt < maxAttempts; attempt += 1) {
353
- const description = await describeAcmCertificate(profile, region, certificateArn);
354
- if (description.validationRecords.length > 0) {
355
- return description.validationRecords;
356
- }
357
- await new Promise((resolve) => setTimeout(resolve, 5000));
358
- }
359
- throw new Error(`Timed out waiting for ACM validation records: ${certificateArn}`);
360
- }
361
- export async function waitForAcmCertificateIssued(profile, region, certificateArn, maxAttempts = 40) {
362
- for (let attempt = 0; attempt < maxAttempts; attempt += 1) {
363
- const description = await describeAcmCertificate(profile, region, certificateArn);
364
- if (description.status === "ISSUED") {
365
- return;
366
- }
367
- if (description.status === "FAILED") {
368
- throw new Error(`ACM certificate failed validation: ${certificateArn}`);
369
- }
370
- await new Promise((resolve) => setTimeout(resolve, 15000));
371
- }
372
- throw new Error(`Timed out waiting for ACM certificate issuance: ${certificateArn}`);
373
- }
374
- //# sourceMappingURL=aws.js.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"aws.js","sourceRoot":"","sources":["../../src/core/aws.ts"],"names":[],"mappings":"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"}
@@ -1,91 +0,0 @@
1
- import path from "node:path";
2
- import { spawn } from "node:child_process";
3
- import { execCommand } from "./exec.js";
4
- import { buildEcrImageUri, buildEcrRegistry, ensureEcrRepositories, getEcrLoginPassword, } from "./aws.js";
5
- import { getAwsDevInfraDir } from "./paths.js";
6
- async function dockerLogin(registry, password) {
7
- await new Promise((resolve, reject) => {
8
- const child = spawn("docker", ["login", "--username", "AWS", "--password-stdin", registry], { stdio: ["pipe", "pipe", "pipe"] });
9
- let stderr = "";
10
- child.stderr.on("data", (chunk) => {
11
- stderr += String(chunk);
12
- });
13
- child.on("error", reject);
14
- child.on("close", (code) => {
15
- if ((code ?? 0) !== 0) {
16
- reject(new Error(`Docker login failed: ${stderr}`));
17
- return;
18
- }
19
- resolve();
20
- });
21
- child.stdin.write(password);
22
- child.stdin.end();
23
- });
24
- }
25
- async function buildAndPushOne(buildDir, imageUri) {
26
- await execCommand("docker", ["build", "-t", imageUri, "."], {
27
- cwd: buildDir,
28
- });
29
- await execCommand("docker", ["push", imageUri], {
30
- cwd: buildDir,
31
- });
32
- }
33
- function requireServicePath(service, name) {
34
- if (!service.path) {
35
- throw new Error(`${name} service is source-backed but no local path was configured`);
36
- }
37
- return service.path;
38
- }
39
- function requireServiceImage(service, name) {
40
- if (!service.image) {
41
- throw new Error(`${name} service is image-backed but no image reference was configured`);
42
- }
43
- return service.image;
44
- }
45
- export async function buildAndPushImages(projectDir, manifest, accountId) {
46
- const reposToEnsure = [
47
- manifest.images.web.repositoryName,
48
- manifest.images.api.repositoryName,
49
- manifest.images.postgres.repositoryName,
50
- ];
51
- if (manifest.services.auth.mode === "source") {
52
- reposToEnsure.push(manifest.images.auth.repositoryName);
53
- }
54
- if (manifest.services.admin.mode === "source") {
55
- reposToEnsure.push(manifest.images.admin.repositoryName);
56
- }
57
- await ensureEcrRepositories(manifest.awsProfile, manifest.region, reposToEnsure);
58
- const registry = buildEcrRegistry(accountId, manifest.region);
59
- const password = await getEcrLoginPassword(manifest.awsProfile, manifest.region);
60
- await dockerLogin(registry, password);
61
- const webImage = buildEcrImageUri(registry, manifest.images.web.repositoryName, manifest.images.web.tag);
62
- const apiImage = buildEcrImageUri(registry, manifest.images.api.repositoryName, manifest.images.api.tag);
63
- const postgresImage = buildEcrImageUri(registry, manifest.images.postgres.repositoryName, manifest.images.postgres.tag);
64
- await buildAndPushOne(path.resolve(projectDir, requireServicePath(manifest.services.web, "web")), webImage);
65
- await buildAndPushOne(path.resolve(projectDir, requireServicePath(manifest.services.api, "api")), apiImage);
66
- await buildAndPushOne(path.join(getAwsDevInfraDir(projectDir), "postgres"), postgresImage);
67
- let authImage = "";
68
- if (manifest.services.auth.mode === "source") {
69
- authImage = buildEcrImageUri(registry, manifest.images.auth.repositoryName, manifest.images.auth.tag);
70
- await buildAndPushOne(path.resolve(projectDir, requireServicePath(manifest.services.auth, "auth")), authImage);
71
- }
72
- else {
73
- authImage = requireServiceImage(manifest.services.auth, "auth");
74
- }
75
- let adminImage = "";
76
- if (manifest.services.admin.mode === "source") {
77
- adminImage = buildEcrImageUri(registry, manifest.images.admin.repositoryName, manifest.images.admin.tag);
78
- await buildAndPushOne(path.resolve(projectDir, requireServicePath(manifest.services.admin, "admin")), adminImage);
79
- }
80
- else {
81
- adminImage = requireServiceImage(manifest.services.admin, "admin");
82
- }
83
- return {
84
- web_image: webImage,
85
- api_image: apiImage,
86
- auth_image: authImage,
87
- admin_image: adminImage,
88
- postgres_image: postgresImage,
89
- };
90
- }
91
- //# sourceMappingURL=buildPush.js.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"buildPush.js","sourceRoot":"","sources":["../../src/core/buildPush.ts"],"names":[],"mappings":"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"}
@@ -1,25 +0,0 @@
1
- import path from "path";
2
- import fs from "fs";
3
- import { parseEnv, writeEnv } from "./env.js";
4
- import { generateSecret } from "./secrets.js";
5
- export function configureApiEnv(root, shared) {
6
- const apiEnvPath = path.join(root, "api", ".env");
7
- if (!fs.existsSync(apiEnvPath))
8
- return;
9
- const env = parseEnv(apiEnvPath);
10
- env.AUTH_SERVER_URL = "http://localhost:5312";
11
- env.API_SERVICE_TOKEN = shared.apiToken;
12
- env.JWKS_KID = shared.kid;
13
- env.COOKIE_SIGNING_KEY = generateSecret(32);
14
- writeEnv(apiEnvPath, env);
15
- }
16
- export function configureWebEnv(root) {
17
- const webEnvPath = path.join(root, "web", ".env");
18
- if (!fs.existsSync(webEnvPath))
19
- return;
20
- const env = parseEnv(webEnvPath);
21
- env.VITE_AUTH_SERVER_URL = "http://localhost:5312";
22
- env.VITE_API_URL = "http://localhost:3000";
23
- writeEnv(webEnvPath, env);
24
- }
25
- //# sourceMappingURL=configure.js.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"configure.js","sourceRoot":"","sources":["../../src/core/configure.ts"],"names":[],"mappings":"AAAA,OAAO,IAAI,MAAM,MAAM,CAAC;AACxB,OAAO,EAAE,MAAM,IAAI,CAAC;AACpB,OAAO,EAAE,QAAQ,EAAE,QAAQ,EAAE,MAAM,UAAU,CAAC;AAC9C,OAAO,EAAE,cAAc,EAAE,MAAM,cAAc,CAAC;AAE9C,MAAM,UAAU,eAAe,CAAC,IAAY,EAAE,MAAW;IACvD,MAAM,UAAU,GAAG,IAAI,CAAC,IAAI,CAAC,IAAI,EAAE,KAAK,EAAE,MAAM,CAAC,CAAC;IAElD,IAAI,CAAC,EAAE,CAAC,UAAU,CAAC,UAAU,CAAC;QAAE,OAAO;IAEvC,MAAM,GAAG,GAAG,QAAQ,CAAC,UAAU,CAAC,CAAC;IAEjC,GAAG,CAAC,eAAe,GAAG,uBAAuB,CAAC;IAC9C,GAAG,CAAC,iBAAiB,GAAG,MAAM,CAAC,QAAQ,CAAC;IACxC,GAAG,CAAC,QAAQ,GAAG,MAAM,CAAC,GAAG,CAAC;IAC1B,GAAG,CAAC,kBAAkB,GAAG,cAAc,CAAC,EAAE,CAAC,CAAC;IAE5C,QAAQ,CAAC,UAAU,EAAE,GAAG,CAAC,CAAC;AAC5B,CAAC;AAED,MAAM,UAAU,eAAe,CAAC,IAAY;IAC1C,MAAM,UAAU,GAAG,IAAI,CAAC,IAAI,CAAC,IAAI,EAAE,KAAK,EAAE,MAAM,CAAC,CAAC;IAElD,IAAI,CAAC,EAAE,CAAC,UAAU,CAAC,UAAU,CAAC;QAAE,OAAO;IAEvC,MAAM,GAAG,GAAG,QAAQ,CAAC,UAAU,CAAC,CAAC;IAEjC,GAAG,CAAC,oBAAoB,GAAG,uBAAuB,CAAC;IACnD,GAAG,CAAC,YAAY,GAAG,uBAAuB,CAAC;IAE3C,QAAQ,CAAC,UAAU,EAAE,GAAG,CAAC,CAAC;AAC5B,CAAC"}
@@ -1,66 +0,0 @@
1
- import fs from "fs";
2
- import path from "path";
3
- export function getSeamlessConfigPath(projectDir) {
4
- return path.join(projectDir, "seamless.config.json");
5
- }
6
- export function readSeamlessConfig(projectDir) {
7
- const configPath = getSeamlessConfigPath(projectDir);
8
- if (!fs.existsSync(configPath)) {
9
- throw new Error(`Missing seamless.config.json in ${projectDir}`);
10
- }
11
- const raw = fs.readFileSync(configPath, "utf8");
12
- return JSON.parse(raw);
13
- }
14
- export function writeSeamlessConfig(projectDir, config) {
15
- const configPath = getSeamlessConfigPath(projectDir);
16
- fs.writeFileSync(configPath, `${JSON.stringify(config, null, 2)}\n`, "utf8");
17
- }
18
- export function mergeDeployConfig(config, deploy) {
19
- return {
20
- ...config,
21
- deploy: {
22
- provider: deploy.provider,
23
- tier: deploy.tier,
24
- region: deploy.region,
25
- awsProfile: deploy.awsProfile,
26
- domain: deploy.domain,
27
- backup: deploy.backup,
28
- },
29
- };
30
- }
31
- export function validateRequiredServices(config) {
32
- const missing = [];
33
- if (!config.services.web)
34
- missing.push("web");
35
- if (!config.services.api)
36
- missing.push("api");
37
- if (!config.services.auth)
38
- missing.push("auth");
39
- if (!config.services.admin)
40
- missing.push("admin");
41
- if (missing.length > 0) {
42
- throw new Error(`Project is missing required services for deploy: ${missing.join(", ")}`);
43
- }
44
- }
45
- export function buildDefaultDomainConfig(root, hostedZoneDomain, hostedZoneId) {
46
- return {
47
- root,
48
- webHost: root,
49
- apiHost: `api.${root}`,
50
- authHost: `auth.${root}`,
51
- adminHost: `admin.${root}`,
52
- hostedZoneDomain: hostedZoneDomain ?? root,
53
- hostedZoneId,
54
- };
55
- }
56
- export function getExistingDeployDefaults(config) {
57
- return {
58
- provider: config.deploy?.provider ?? "aws",
59
- tier: config.deploy?.tier,
60
- region: config.deploy?.region,
61
- awsProfile: config.deploy?.awsProfile,
62
- domain: config.deploy?.domain,
63
- backup: config.deploy?.backup,
64
- };
65
- }
66
- //# sourceMappingURL=deployConfig.js.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"deployConfig.js","sourceRoot":"","sources":["../../src/core/deployConfig.ts"],"names":[],"mappings":"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"}