@wraps.dev/cli 2.29.0 → 2.29.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.
Binary file
package/dist/cli.js CHANGED
@@ -2424,7 +2424,7 @@ var init_client = __esm({
2424
2424
  console.log("\u{1F4CA} Wraps Platform \u2014 analytics, templates, automations");
2425
2425
  console.log(` From $10/mo \u2192 ${pc2.cyan("https://wraps.dev/platform")}`);
2426
2426
  console.log();
2427
- console.log(`\u{1F4AC} ${pc2.cyan("hey@wraps.sh")}`);
2427
+ console.log(`\u{1F4AC} ${pc2.cyan("hey@wraps.dev")}`);
2428
2428
  console.log(pc2.dim("\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500"));
2429
2429
  return true;
2430
2430
  }
@@ -6480,7 +6480,10 @@ function displaySuccess(outputs) {
6480
6480
  ""
6481
6481
  );
6482
6482
  }
6483
- lines.push(` 2. View dashboard: ${pc10.blue("https://app.wraps.dev")}`, "");
6483
+ lines.push(
6484
+ ` 2. View dashboard: ${pc10.blue(outputs.dashboardUrl ?? getAppBaseUrl())}`,
6485
+ ""
6486
+ );
6484
6487
  clack8.outro(pc10.green("Email infrastructure deployed successfully!"));
6485
6488
  console.log(lines.join("\n"));
6486
6489
  if (outputs.dnsAutoCreated && outputs.domain) {
@@ -6774,8 +6777,10 @@ ${pc10.dim("Run:")} ${pc10.yellow(`wraps email verify --domain ${exampleDomain}`
6774
6777
  `
6775
6778
  );
6776
6779
  }
6777
- console.log(`
6778
- ${pc10.bold("Dashboard:")} ${pc10.blue("https://app.wraps.dev")}`);
6780
+ console.log(
6781
+ `
6782
+ ${pc10.bold("Dashboard:")} ${pc10.blue(status2.dashboardUrl ?? getAppBaseUrl())}`
6783
+ );
6779
6784
  console.log(`${pc10.bold("Docs:")} ${pc10.blue("https://wraps.dev/docs")}
6780
6785
  `);
6781
6786
  }
@@ -6920,6 +6925,7 @@ var init_output = __esm({
6920
6925
  "src/utils/shared/output.ts"() {
6921
6926
  "use strict";
6922
6927
  init_esm_shims();
6928
+ init_config();
6923
6929
  init_json_output();
6924
6930
  DeploymentProgress = class {
6925
6931
  currentSpinner = null;
@@ -40669,6 +40675,21 @@ import * as clack17 from "@clack/prompts";
40669
40675
  import * as pulumi16 from "@pulumi/pulumi";
40670
40676
  import pc19 from "picocolors";
40671
40677
  init_events();
40678
+
40679
+ // src/utils/selfhost/dashboard-url.ts
40680
+ init_esm_shims();
40681
+ init_config();
40682
+ init_metadata();
40683
+ async function resolveDashboardUrl(accountId, region) {
40684
+ try {
40685
+ const metadata = await loadConnectionMetadata(accountId, region);
40686
+ return metadata?.services?.selfhost?.config?.appUrl || getAppBaseUrl();
40687
+ } catch {
40688
+ return getAppBaseUrl();
40689
+ }
40690
+ }
40691
+
40692
+ // src/commands/email/config.ts
40672
40693
  init_aws();
40673
40694
  init_errors();
40674
40695
  init_fs();
@@ -40922,6 +40943,10 @@ ${pc19.bold("Current Configuration:")}
40922
40943
  return;
40923
40944
  }
40924
40945
  displaySuccess({
40946
+ dashboardUrl: await resolveDashboardUrl(
40947
+ identity.accountId,
40948
+ outputs.region
40949
+ ),
40925
40950
  roleArn: outputs.roleArn,
40926
40951
  configSetName: outputs.configSetName,
40927
40952
  region: outputs.region,
@@ -41314,6 +41339,10 @@ ${pc20.dim("\u2500\u2500\u2500 end Pulumi output \u2500\u2500\u2500")}
41314
41339
  return;
41315
41340
  }
41316
41341
  displaySuccess({
41342
+ dashboardUrl: await resolveDashboardUrl(
41343
+ identity.accountId,
41344
+ outputs.region
41345
+ ),
41317
41346
  roleArn: outputs.roleArn,
41318
41347
  configSetName: outputs.configSetName,
41319
41348
  region: outputs.region,
@@ -46566,6 +46595,10 @@ ${pc30.yellow(pc30.bold("Configuration Warnings:"))}`);
46566
46595
  );
46567
46596
  }
46568
46597
  displaySuccess({
46598
+ dashboardUrl: await resolveDashboardUrl(
46599
+ identity.accountId,
46600
+ outputs.region
46601
+ ),
46569
46602
  roleArn: outputs.roleArn,
46570
46603
  configSetName: outputs.configSetName,
46571
46604
  region: outputs.region,
@@ -48264,6 +48297,9 @@ ${pc34.green("\u2713")} ${pc34.bold("Infrastructure removed successfully!")}
48264
48297
  init_esm_shims();
48265
48298
  init_client();
48266
48299
  init_events();
48300
+ import * as clack34 from "@clack/prompts";
48301
+ import * as pulumi24 from "@pulumi/pulumi";
48302
+ import pc35 from "picocolors";
48267
48303
  init_aws();
48268
48304
  init_errors();
48269
48305
  init_fs();
@@ -48271,9 +48307,6 @@ init_json_output();
48271
48307
  init_metadata();
48272
48308
  init_output();
48273
48309
  init_pulumi();
48274
- import * as clack34 from "@clack/prompts";
48275
- import * as pulumi24 from "@pulumi/pulumi";
48276
- import pc35 from "picocolors";
48277
48310
  async function emailStatus(options) {
48278
48311
  await ensurePulumiInstalled();
48279
48312
  const startTime = Date.now();
@@ -48374,6 +48407,7 @@ Run ${pc35.cyan("wraps email init")} to deploy email infrastructure.
48374
48407
  const statusData = {
48375
48408
  integrationLevel,
48376
48409
  region,
48410
+ dashboardUrl: await resolveDashboardUrl(identity.accountId, region),
48377
48411
  domains: domainsWithTokens,
48378
48412
  resources: {
48379
48413
  roleArn: stackOutputs.roleArn?.value,
@@ -52271,6 +52305,10 @@ ${pc39.bold("Cost Impact:")}`);
52271
52305
  }
52272
52306
  const needsCertificateValidation = outputs.httpsTrackingPending || outputs.httpsTrackingEnabled && acmValidationRecords.length > 0 && !outputs.cloudFrontDomain;
52273
52307
  displaySuccess({
52308
+ dashboardUrl: await resolveDashboardUrl(
52309
+ identity.accountId,
52310
+ outputs.region
52311
+ ),
52274
52312
  roleArn: outputs.roleArn,
52275
52313
  configSetName: outputs.configSetName,
52276
52314
  region: outputs.region,
@@ -57157,14 +57195,26 @@ To replace it with the API-only control plane: run ${pc49.cyan("pnpm selfhost:de
57157
57195
  if (!appUrl) {
57158
57196
  const appUrlAnswer = await clack46.text({
57159
57197
  message: "App URL (where your self-hosted dashboard will be served):",
57160
- defaultValue: "https://app.wraps.dev",
57161
- placeholder: "https://app.yourcompany.com"
57198
+ placeholder: "https://app.yourcompany.com",
57199
+ validate: (value) => {
57200
+ if (!value?.trim()) {
57201
+ return "Required \u2014 this URL is baked into every link your deployment emails to recipients.";
57202
+ }
57203
+ const trimmed = value.trim();
57204
+ if (!URL.canParse(trimmed)) {
57205
+ return "Must be a valid URL, for example https://app.yourcompany.com";
57206
+ }
57207
+ const { protocol } = new URL(trimmed);
57208
+ if (protocol !== "https:" && protocol !== "http:") {
57209
+ return "Must be an http(s) URL";
57210
+ }
57211
+ }
57162
57212
  });
57163
57213
  if (clack46.isCancel(appUrlAnswer)) {
57164
57214
  clack46.cancel("Operation cancelled.");
57165
57215
  process.exit(0);
57166
57216
  }
57167
- appUrl = appUrlAnswer || "https://app.wraps.dev";
57217
+ appUrl = appUrlAnswer.trim();
57168
57218
  }
57169
57219
  if (!(options.yes || options.preview)) {
57170
57220
  const confirmed = await clack46.confirm({
@@ -65368,7 +65418,7 @@ async function support() {
65368
65418
  trackCommand("support", { success: true });
65369
65419
  clack64.intro(pc67.bold("Get Help with Wraps"));
65370
65420
  console.log();
65371
- console.log(` ${pc67.bold("Email:")} ${pc67.cyan("hey@wraps.sh")}`);
65421
+ console.log(` ${pc67.bold("Email:")} ${pc67.cyan("hey@wraps.dev")}`);
65372
65422
  console.log(
65373
65423
  ` ${pc67.bold("GitHub:")} ${pc67.cyan("https://github.com/wraps-dev/wraps/issues")}`
65374
65424
  );