openship 0.7.0 → 0.7.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 (56) hide show
  1. package/dist/bare-AB4SMTNJ.js +29 -0
  2. package/dist/{chunk-J2NDOB7D.js → chunk-2BAKEGGF.js} +1 -1
  3. package/dist/{chunk-JAKVPLHT.js → chunk-2YAY5XHK.js} +1 -1
  4. package/dist/{chunk-YGA52DHX.js → chunk-37XZTLBJ.js} +3 -3
  5. package/dist/{chunk-GYDROM4W.js → chunk-3K65MMYV.js} +1 -1
  6. package/dist/{chunk-XQC6KYZD.js → chunk-3WBKLDGC.js} +3 -3
  7. package/dist/{chunk-5CFUYMPE.js → chunk-3YSSXSC2.js} +12 -12
  8. package/dist/{chunk-TPGBT5UR.js → chunk-7MCPDYKP.js} +621 -94
  9. package/dist/{chunk-CMGRMPRQ.js → chunk-7TQP6723.js} +2 -2
  10. package/dist/{chunk-MZYD3LFP.js → chunk-AMADTKC6.js} +1 -1
  11. package/dist/{chunk-JWW5YAFL.js → chunk-B2BQX6JX.js} +3 -3
  12. package/dist/{chunk-DZBXOF5Q.js → chunk-BBPKAQ54.js} +6 -6
  13. package/dist/{chunk-IVRTIKNZ.js → chunk-COI4VFRW.js} +34 -2
  14. package/dist/{chunk-ZFA3MZ5N.js → chunk-CQ2JOXEQ.js} +3 -3
  15. package/dist/{chunk-BOD2IQ3P.js → chunk-DQR5TPFB.js} +5 -5
  16. package/dist/{chunk-AUBB5DLY.js → chunk-ETK6IBCH.js} +6 -6
  17. package/dist/{chunk-RHHCAWW3.js → chunk-FNWNUYS3.js} +3 -3
  18. package/dist/{chunk-3KUW2UC6.js → chunk-GPTBEPUE.js} +21 -14
  19. package/dist/{chunk-TT7P5ZZ3.js → chunk-H36ASAYI.js} +8 -8
  20. package/dist/{chunk-SYQ3FOLE.js → chunk-IVMPA6RC.js} +2 -2
  21. package/dist/{chunk-SPR7N2EK.js → chunk-IXBOV7BE.js} +9 -9
  22. package/dist/{chunk-3LWGDMJU.js → chunk-KATXZ5AB.js} +1 -1
  23. package/dist/{chunk-J4SYG2LC.js → chunk-KCMEWNP7.js} +1 -1
  24. package/dist/{chunk-N5YZMO33.js → chunk-L4DRH6ZA.js} +12 -1
  25. package/dist/{chunk-GEHV7JBS.js → chunk-NF7NQOAP.js} +2 -2
  26. package/dist/{chunk-KYTTPWRP.js → chunk-NIOLZENU.js} +9 -9
  27. package/dist/{chunk-LL7M7GL4.js → chunk-OEYXXSAM.js} +4 -4
  28. package/dist/{chunk-QNQFS37A.js → chunk-S5GU345P.js} +3 -3
  29. package/dist/{chunk-HBQWOJRP.js → chunk-TKK5NPDQ.js} +2 -2
  30. package/dist/{chunk-5D27WZBW.js → chunk-WG5PDWZ3.js} +5 -5
  31. package/dist/{chunk-7MKZP4TW.js → chunk-XJSLJLNY.js} +14 -14
  32. package/dist/{cloud-RFZSO6P5.js → cloud-T2JOFEQL.js} +20 -20
  33. package/dist/{detect-NXD3PYBM.js → detect-SWLZURYX.js} +5 -5
  34. package/dist/{docker-U5APUZBI.js → docker-SQNZRZXN.js} +11 -11
  35. package/dist/{docker-edge-executor-HUQOWFQU.js → docker-edge-executor-BSSQQS76.js} +8 -8
  36. package/dist/{edge-import-UXD52WQR.js → edge-import-LUDX77C2.js} +27 -27
  37. package/dist/{edge-preflight-3PMJ5BWM.js → edge-preflight-JAEFWBRI.js} +14 -14
  38. package/dist/{ensure-container-edge-GDPY7UJD.js → ensure-container-edge-U7FTLFVJ.js} +12 -12
  39. package/dist/{executor-XOVSO6QZ.js → executor-GYRZ7RIU.js} +7 -7
  40. package/dist/host-channel-preflight-U4IZCRXR.js +54 -0
  41. package/dist/index.js +45 -45
  42. package/dist/{local-executor-KR7BFCJP.js → local-executor-JCR46VAP.js} +3 -3
  43. package/dist/{nginx-JMLAS7YS.js → nginx-YA6IRPJT.js} +10 -10
  44. package/dist/{openresty-lua-FJH3KEC4.js → openresty-lua-DUOB64TP.js} +8 -8
  45. package/dist/{privilege-H2QTJ5TE.js → privilege-4B2TMVW2.js} +6 -6
  46. package/dist/server/index.js +3719 -1002
  47. package/dist/server/migrations/0122_data_transfer_staging.sql +45 -0
  48. package/dist/server/migrations/meta/_journal.json +7 -0
  49. package/dist/setup-T3WN3HRS.js +25 -0
  50. package/dist/{ssh-client-WVLLOAYK.js → ssh-client-FZDWP5PQ.js} +3 -3
  51. package/dist/up-U73RUN5R.js +61 -0
  52. package/package.json +1 -1
  53. package/dist/bare-3POKLHTW.js +0 -29
  54. package/dist/host-channel-preflight-T2QUDQXU.js +0 -54
  55. package/dist/setup-ERGE5XNW.js +0 -25
  56. package/dist/up-EFCE6KA6.js +0 -61
@@ -6,11 +6,11 @@ import {
6
6
  formatDuration,
7
7
  isRemoteConnectionError,
8
8
  systemDebug
9
- } from "./chunk-N5YZMO33.js";
9
+ } from "./chunk-L4DRH6ZA.js";
10
10
  import {
11
11
  safeErrorMessage,
12
12
  shellQuote
13
- } from "./chunk-IVRTIKNZ.js";
13
+ } from "./chunk-COI4VFRW.js";
14
14
 
15
15
  // ../../packages/adapters/src/system/probe-exec.ts
16
16
  async function tryExec(executor, command, opts) {
@@ -4,7 +4,7 @@ import { createRequire as __ospCreateRequire } from "node:module";
4
4
  const require = __ospCreateRequire(import.meta.url);
5
5
  import {
6
6
  sq
7
- } from "./chunk-J2NDOB7D.js";
7
+ } from "./chunk-2BAKEGGF.js";
8
8
 
9
9
  // ../../packages/adapters/src/runtime/managed-artifact.ts
10
10
  var MANAGED_ARTIFACT_BASE = "/opt/openship";
@@ -4,12 +4,12 @@ import { createRequire as __ospCreateRequire } from "node:module";
4
4
  const require = __ospCreateRequire(import.meta.url);
5
5
  import {
6
6
  sq
7
- } from "./chunk-J2NDOB7D.js";
7
+ } from "./chunk-2BAKEGGF.js";
8
8
  import {
9
9
  formatDuration,
10
10
  isRemoteConnectionError,
11
11
  systemDebug
12
- } from "./chunk-N5YZMO33.js";
12
+ } from "./chunk-L4DRH6ZA.js";
13
13
  import {
14
14
  assessHostSupport,
15
15
  classifyDistro,
@@ -17,7 +17,7 @@ import {
17
17
  parseSystemArch,
18
18
  parseSystemOs,
19
19
  safeErrorMessage
20
- } from "./chunk-IVRTIKNZ.js";
20
+ } from "./chunk-COI4VFRW.js";
21
21
 
22
22
  // ../../packages/adapters/src/system/elevated-executor.ts
23
23
  import { randomBytes } from "crypto";
@@ -5,17 +5,17 @@ const require = __ospCreateRequire(import.meta.url);
5
5
  import {
6
6
  checkGit,
7
7
  installGit
8
- } from "./chunk-7MKZP4TW.js";
8
+ } from "./chunk-XJSLJLNY.js";
9
9
  import {
10
10
  createDockerBuildContext,
11
11
  resolveDockerBuildArgs
12
- } from "./chunk-QNQFS37A.js";
12
+ } from "./chunk-S5GU345P.js";
13
13
  import {
14
14
  prepareStackOutput,
15
15
  resolveProjectDir,
16
16
  resolveStaticOutputPath,
17
17
  runLocalBuild
18
- } from "./chunk-ZFA3MZ5N.js";
18
+ } from "./chunk-CQ2JOXEQ.js";
19
19
  import {
20
20
  BuildLogger,
21
21
  dockerBuildContextDirectory,
@@ -29,10 +29,10 @@ import {
29
29
  splitRuntimeEnv,
30
30
  sq,
31
31
  transferLocalDirectory
32
- } from "./chunk-SYQ3FOLE.js";
32
+ } from "./chunk-IVMPA6RC.js";
33
33
  import {
34
34
  isRuntimeNotFoundError
35
- } from "./chunk-N5YZMO33.js";
35
+ } from "./chunk-L4DRH6ZA.js";
36
36
  import {
37
37
  PRICING,
38
38
  STACKS,
@@ -44,7 +44,7 @@ import {
44
44
  packageManagerEnsureCommand,
45
45
  safeErrorMessage,
46
46
  shellSplitWords
47
- } from "./chunk-IVRTIKNZ.js";
47
+ } from "./chunk-COI4VFRW.js";
48
48
 
49
49
  // ../../packages/adapters/src/runtime/cloud.ts
50
50
  import { readFile } from "fs/promises";
@@ -1418,6 +1418,26 @@ function parseEnv(ctx, v, path) {
1418
1418
  }
1419
1419
  return out;
1420
1420
  }
1421
+ function parseBuildArgs(ctx, v, path) {
1422
+ if (v === void 0) return void 0;
1423
+ if (!ctx.isObj(v)) {
1424
+ ctx.err(path, "must be an object of string or null build arguments");
1425
+ return void 0;
1426
+ }
1427
+ const out = {};
1428
+ for (const [key, value] of Object.entries(v)) {
1429
+ if (!isValidEnvKey(key)) {
1430
+ ctx.err(`${path}.${key}`, "has an invalid build argument name");
1431
+ continue;
1432
+ }
1433
+ if (value === null || typeof value === "string") {
1434
+ out[key] = value;
1435
+ } else {
1436
+ ctx.err(`${path}.${key}`, "must be a string or null");
1437
+ }
1438
+ }
1439
+ return out;
1440
+ }
1421
1441
  function parseDomains(ctx, v, path) {
1422
1442
  if (v === void 0) return void 0;
1423
1443
  if (!Array.isArray(v)) {
@@ -1488,7 +1508,10 @@ function parseRoutes(ctx, v, path) {
1488
1508
  const source = ctx.str(h.source, `${p}.source`);
1489
1509
  const list = Array.isArray(h.headers) ? h.headers.map((kv, j) => {
1490
1510
  const key = ctx.str(kv?.key, `${p}.headers[${j}].key`);
1491
- const value = ctx.str(kv?.value, `${p}.headers[${j}].value`);
1511
+ const value = ctx.str(
1512
+ kv?.value,
1513
+ `${p}.headers[${j}].value`
1514
+ );
1492
1515
  return key && value !== void 0 ? { key, value } : null;
1493
1516
  }).filter(Boolean) : [];
1494
1517
  return source ? { source, headers: list } : null;
@@ -1569,6 +1592,7 @@ function parseServices(ctx, v, path) {
1569
1592
  image: ctx.str(item.image, `${p}.image`),
1570
1593
  build: ctx.str(item.build, `${p}.build`),
1571
1594
  dockerfile: ctx.str(item.dockerfile, `${p}.dockerfile`),
1595
+ buildArgs: parseBuildArgs(ctx, item.buildArgs, `${p}.buildArgs`),
1572
1596
  ports: ctx.strArray(item.ports, `${p}.ports`),
1573
1597
  volumes: ctx.strArray(item.volumes, `${p}.volumes`),
1574
1598
  dependsOn: ctx.strArray(item.dependsOn, `${p}.dependsOn`),
@@ -4070,6 +4094,7 @@ var catalog_default = {
4070
4094
  GOTRUE_API_HOST: "0.0.0.0",
4071
4095
  GOTRUE_API_PORT: "9999",
4072
4096
  API_EXTERNAL_URL: "{{publicUrl:kong}}",
4097
+ GOTRUE_SAML_EXTERNAL_URL: "{{publicUrl:kong}}/auth/v1",
4073
4098
  GOTRUE_DB_DRIVER: "postgres",
4074
4099
  GOTRUE_DB_DATABASE_URL: "postgres://supabase_auth_admin:{{config:POSTGRES_PASSWORD}}@db:5432/postgres",
4075
4100
  GOTRUE_SITE_URL: "{{publicUrl:kong}}",
@@ -4326,7 +4351,7 @@ var catalog_default = {
4326
4351
  {
4327
4352
  service: "kong",
4328
4353
  path: "/usr/local/kong/kong.yml",
4329
- content: '_format_version: "3.0"\n_transform: true\n\nconsumers:\n - username: DASHBOARD\n - username: anon\n keyauth_credentials:\n - key: {{config:ANON_KEY}}\n - username: service_role\n keyauth_credentials:\n - key: {{config:SERVICE_ROLE_KEY}}\n\nacls:\n - consumer: anon\n group: anon\n - consumer: service_role\n group: admin\n\nbasicauth_credentials:\n - consumer: DASHBOARD\n username: {{config:DASHBOARD_USERNAME}}\n password: {{config:DASHBOARD_PASSWORD}}\n\nservices:\n - name: auth-v1-open\n url: http://auth:9999/verify\n routes:\n - name: auth-v1-open\n strip_path: true\n paths:\n - /auth/v1/verify\n plugins:\n - name: cors\n - name: auth-v1-open-callback\n url: http://auth:9999/callback\n routes:\n - name: auth-v1-open-callback\n strip_path: true\n paths:\n - /auth/v1/callback\n plugins:\n - name: cors\n - name: auth-v1-open-authorize\n url: http://auth:9999/authorize\n routes:\n - name: auth-v1-open-authorize\n strip_path: true\n paths:\n - /auth/v1/authorize\n plugins:\n - name: cors\n - name: auth-v1\n url: http://auth:9999/\n routes:\n - name: auth-v1-all\n strip_path: true\n paths:\n - /auth/v1/\n plugins:\n - name: cors\n - name: key-auth\n config:\n hide_credentials: false\n - name: acl\n config:\n hide_groups_header: true\n allow:\n - admin\n - anon\n - name: rest-v1\n url: http://rest:3000/\n routes:\n - name: rest-v1-all\n strip_path: true\n paths:\n - /rest/v1/\n plugins:\n - name: cors\n - name: key-auth\n config:\n hide_credentials: true\n - name: acl\n config:\n hide_groups_header: true\n allow:\n - admin\n - anon\n - name: graphql-v1\n url: http://rest:3000/rpc/graphql\n routes:\n - name: graphql-v1-all\n strip_path: true\n paths:\n - /graphql/v1\n plugins:\n - name: cors\n - name: key-auth\n config:\n hide_credentials: true\n - name: request-transformer\n config:\n add:\n headers:\n - Content-Profile:graphql_public\n - name: acl\n config:\n hide_groups_header: true\n allow:\n - admin\n - anon\n - name: realtime-v1-ws\n url: http://realtime-dev.supabase-realtime:4000/socket/\n routes:\n - name: realtime-v1-ws\n strip_path: true\n paths:\n - /realtime/v1/\n plugins:\n - name: cors\n - name: key-auth\n config:\n hide_credentials: false\n - name: acl\n config:\n hide_groups_header: true\n allow:\n - admin\n - anon\n - name: storage-v1\n url: http://storage:5000/\n routes:\n - name: storage-v1-all\n strip_path: true\n paths:\n - /storage/v1/\n plugins:\n - name: cors\n - name: meta\n url: http://meta:8080/\n routes:\n - name: meta-all\n strip_path: true\n paths:\n - /pg/\n plugins:\n - name: key-auth\n config:\n hide_credentials: false\n - name: acl\n config:\n hide_groups_header: true\n allow:\n - admin\n - name: dashboard\n url: http://studio:3000/\n routes:\n - name: dashboard-all\n strip_path: true\n paths:\n - /\n plugins:\n - name: cors\n - name: basic-auth\n config:\n hide_credentials: true\n'
4354
+ content: '_format_version: "3.0"\n_transform: true\n\nconsumers:\n - username: DASHBOARD\n - username: anon\n keyauth_credentials:\n - key: {{config:ANON_KEY}}\n - username: service_role\n keyauth_credentials:\n - key: {{config:SERVICE_ROLE_KEY}}\n\nacls:\n - consumer: anon\n group: anon\n - consumer: service_role\n group: admin\n\nbasicauth_credentials:\n - consumer: DASHBOARD\n username: {{config:DASHBOARD_USERNAME}}\n password: {{config:DASHBOARD_PASSWORD}}\n\nservices:\n - name: auth-v1-open\n url: http://auth:9999/verify\n routes:\n - name: auth-v1-open\n strip_path: true\n paths:\n - /auth/v1/verify\n plugins:\n - name: cors\n - name: auth-v1-open-callback\n url: http://auth:9999/callback\n routes:\n - name: auth-v1-open-callback\n strip_path: true\n paths:\n - /auth/v1/callback\n plugins:\n - name: cors\n - name: auth-v1-open-authorize\n url: http://auth:9999/authorize\n routes:\n - name: auth-v1-open-authorize\n strip_path: true\n paths:\n - /auth/v1/authorize\n plugins:\n - name: cors\n - name: auth-v1-open-sso-acs\n url: http://auth:9999/sso/saml/acs\n routes:\n - name: auth-v1-open-sso-acs\n strip_path: true\n paths:\n - /auth/v1/sso/saml/acs\n plugins:\n - name: cors\n - name: auth-v1-open-sso-metadata\n url: http://auth:9999/sso/saml/metadata\n routes:\n - name: auth-v1-open-sso-metadata\n strip_path: true\n paths:\n - /auth/v1/sso/saml/metadata\n plugins:\n - name: cors\n - name: auth-v1\n url: http://auth:9999/\n routes:\n - name: auth-v1-all\n strip_path: true\n paths:\n - /auth/v1/\n plugins:\n - name: cors\n - name: key-auth\n config:\n hide_credentials: false\n - name: acl\n config:\n hide_groups_header: true\n allow:\n - admin\n - anon\n - name: rest-v1\n url: http://rest:3000/\n routes:\n - name: rest-v1-all\n strip_path: true\n paths:\n - /rest/v1/\n plugins:\n - name: cors\n - name: key-auth\n config:\n hide_credentials: true\n - name: acl\n config:\n hide_groups_header: true\n allow:\n - admin\n - anon\n - name: graphql-v1\n url: http://rest:3000/rpc/graphql\n routes:\n - name: graphql-v1-all\n strip_path: true\n paths:\n - /graphql/v1\n plugins:\n - name: cors\n - name: key-auth\n config:\n hide_credentials: true\n - name: request-transformer\n config:\n add:\n headers:\n - Content-Profile:graphql_public\n - name: acl\n config:\n hide_groups_header: true\n allow:\n - admin\n - anon\n - name: realtime-v1-ws\n url: http://realtime-dev.supabase-realtime:4000/socket/\n routes:\n - name: realtime-v1-ws\n strip_path: true\n paths:\n - /realtime/v1/\n plugins:\n - name: cors\n - name: key-auth\n config:\n hide_credentials: false\n - name: acl\n config:\n hide_groups_header: true\n allow:\n - admin\n - anon\n - name: storage-v1\n url: http://storage:5000/\n routes:\n - name: storage-v1-all\n strip_path: true\n paths:\n - /storage/v1/\n plugins:\n - name: cors\n - name: meta\n url: http://meta:8080/\n routes:\n - name: meta-all\n strip_path: true\n paths:\n - /pg/\n plugins:\n - name: key-auth\n config:\n hide_credentials: false\n - name: acl\n config:\n hide_groups_header: true\n allow:\n - admin\n - name: dashboard\n url: http://studio:3000/\n routes:\n - name: dashboard-all\n strip_path: true\n paths:\n - /\n plugins:\n - name: cors\n - name: basic-auth\n config:\n hide_credentials: true\n'
4330
4355
  },
4331
4356
  {
4332
4357
  service: "db",
@@ -25441,6 +25466,13 @@ var AUDIT_EVENTS = {
25441
25466
  tone: "warning",
25442
25467
  description: "Cleanup did not complete, so the app record was kept for a safe retry."
25443
25468
  },
25469
+ "project.build_cache.cleared": {
25470
+ category: "apps",
25471
+ action: "cleared the Docker build cache for",
25472
+ label: "Build cache cleared",
25473
+ tone: "warning",
25474
+ description: "Unused build cache was removed from the app's Docker host."
25475
+ },
25444
25476
  "project:write": {
25445
25477
  category: "apps",
25446
25478
  action: "changed",
@@ -6,13 +6,13 @@ import {
6
6
  detectBuildKillHint,
7
7
  runBuildPipeline,
8
8
  transferLocalDirectory
9
- } from "./chunk-SYQ3FOLE.js";
9
+ } from "./chunk-IVMPA6RC.js";
10
10
  import {
11
11
  LocalExecutor
12
- } from "./chunk-J4SYG2LC.js";
12
+ } from "./chunk-KCMEWNP7.js";
13
13
  import {
14
14
  wrapLocalBuildCommand
15
- } from "./chunk-J2NDOB7D.js";
15
+ } from "./chunk-2BAKEGGF.js";
16
16
 
17
17
  // ../../packages/adapters/src/runtime/local-build.ts
18
18
  var LOCAL_BUILD_DIR = "/tmp/openship/.builds";
@@ -5,23 +5,23 @@ const require = __ospCreateRequire(import.meta.url);
5
5
  import {
6
6
  envOps,
7
7
  opScript
8
- } from "./chunk-3LWGDMJU.js";
8
+ } from "./chunk-KATXZ5AB.js";
9
9
  import {
10
10
  resolveEnvironment
11
- } from "./chunk-JWW5YAFL.js";
11
+ } from "./chunk-B2BQX6JX.js";
12
12
  import {
13
13
  sq
14
- } from "./chunk-J2NDOB7D.js";
14
+ } from "./chunk-2BAKEGGF.js";
15
15
  import {
16
16
  describeProcess,
17
17
  probeListeningPortOwners
18
- } from "./chunk-GEHV7JBS.js";
18
+ } from "./chunk-NF7NQOAP.js";
19
19
  import {
20
20
  SYSTEM,
21
21
  answered,
22
22
  refused,
23
23
  safeErrorMessage
24
- } from "./chunk-IVRTIKNZ.js";
24
+ } from "./chunk-COI4VFRW.js";
25
25
 
26
26
  // ../../packages/adapters/src/infra/openresty-lua.ts
27
27
  import { createHash, randomBytes } from "crypto";
@@ -19,7 +19,7 @@ import {
19
19
  isCloudFrontedHost,
20
20
  luaSourceAvailable,
21
21
  reloadBareOpenResty
22
- } from "./chunk-BOD2IQ3P.js";
22
+ } from "./chunk-DQR5TPFB.js";
23
23
  import {
24
24
  edgeDownExplanation,
25
25
  explainEdgeDown,
@@ -30,17 +30,17 @@ import {
30
30
  } from "./chunk-R4VDPFLS.js";
31
31
  import {
32
32
  EXECUTOR_DELEGATE
33
- } from "./chunk-JWW5YAFL.js";
33
+ } from "./chunk-B2BQX6JX.js";
34
34
  import {
35
35
  logEntry,
36
36
  sq
37
- } from "./chunk-J2NDOB7D.js";
37
+ } from "./chunk-2BAKEGGF.js";
38
38
  import {
39
39
  edgeFailureReason
40
- } from "./chunk-YGA52DHX.js";
40
+ } from "./chunk-37XZTLBJ.js";
41
41
  import {
42
42
  probeListeningPort
43
- } from "./chunk-GEHV7JBS.js";
43
+ } from "./chunk-NF7NQOAP.js";
44
44
  import {
45
45
  PROXY_DIRECTIVES,
46
46
  parseProxyValue,
@@ -48,7 +48,7 @@ import {
48
48
  resolveRedirectStatus,
49
49
  safeErrorMessage,
50
50
  sanitizeProxySettings
51
- } from "./chunk-IVRTIKNZ.js";
51
+ } from "./chunk-COI4VFRW.js";
52
52
 
53
53
  // ../../packages/adapters/src/infra/nginx.ts
54
54
  import {
@@ -4,15 +4,15 @@ import { createRequire as __ospCreateRequire } from "node:module";
4
4
  const require = __ospCreateRequire(import.meta.url);
5
5
  import {
6
6
  hostRefusal
7
- } from "./chunk-3LWGDMJU.js";
7
+ } from "./chunk-KATXZ5AB.js";
8
8
  import {
9
9
  elevatedExecutor,
10
10
  resolveEnvironment
11
- } from "./chunk-JWW5YAFL.js";
11
+ } from "./chunk-B2BQX6JX.js";
12
12
  import {
13
13
  answered,
14
14
  refused
15
- } from "./chunk-IVRTIKNZ.js";
15
+ } from "./chunk-COI4VFRW.js";
16
16
 
17
17
  // ../../packages/adapters/src/system/privilege.ts
18
18
  function rootChecked(executor, why) {
@@ -8,30 +8,32 @@ import {
8
8
  import {
9
9
  getTarCreateEnv,
10
10
  prepareSourceTarArgs
11
- } from "./chunk-JAKVPLHT.js";
11
+ } from "./chunk-2YAY5XHK.js";
12
12
  import {
13
13
  connectSshClient,
14
14
  openDockerDialStdioChannel,
15
15
  openSftp,
16
16
  openSshUnixSocket,
17
17
  reconcileKnownHosts
18
- } from "./chunk-HBQWOJRP.js";
18
+ } from "./chunk-TKK5NPDQ.js";
19
19
  import {
20
20
  LocalExecutor
21
- } from "./chunk-J4SYG2LC.js";
21
+ } from "./chunk-KCMEWNP7.js";
22
22
  import {
23
23
  emitBufferedLines,
24
24
  flushBufferedLines,
25
25
  hasLocalCommand,
26
26
  logEntry,
27
27
  sq
28
- } from "./chunk-J2NDOB7D.js";
28
+ } from "./chunk-2BAKEGGF.js";
29
29
  import {
30
30
  HostChannelUnavailableError,
31
31
  SshDisconnectedError,
32
+ SshExecRequestError,
32
33
  commandForError,
33
- isSshAuthError
34
- } from "./chunk-N5YZMO33.js";
34
+ isSshAuthError,
35
+ isSshExecRequestError
36
+ } from "./chunk-L4DRH6ZA.js";
35
37
  import {
36
38
  HOST_CHANNEL_AUTH_REJECTED,
37
39
  HOST_CHANNEL_NOT_PROVISIONED,
@@ -42,7 +44,7 @@ import {
42
44
  hostChannelAccount,
43
45
  hostFirewallRule,
44
46
  safeErrorMessage
45
- } from "./chunk-IVRTIKNZ.js";
47
+ } from "./chunk-COI4VFRW.js";
46
48
 
47
49
  // ../../packages/adapters/src/system/executor.ts
48
50
  import { existsSync, readFileSync } from "fs";
@@ -254,6 +256,9 @@ var remoteDirname = posix.dirname;
254
256
  var SFTP_OPERATION_TIMEOUT_MS = 3e4;
255
257
  var CHANNEL_CLOSE_GRACE_MS = 750;
256
258
  var TRANSPORT_CLOSE_GRACE_MS = 250;
259
+ function tagExecRequestError(error) {
260
+ return error.message === "Unable to exec" ? new SshExecRequestError(error) : error;
261
+ }
257
262
  function abortError(operation, signal) {
258
263
  const reason = signal.reason;
259
264
  const suffix = reason instanceof Error && reason.message ? `: ${reason.message}` : "";
@@ -619,18 +624,20 @@ var SshExecutor = class _SshExecutor {
619
624
  if (this.inflight.size > 0) this.dropSftp();
620
625
  else this.resetConnection();
621
626
  }
622
- /** Returns true if the error is an SSH channel-open failure. */
627
+ /** Returns true if the error is an SSH channel-open or channel-exec failure. */
623
628
  static isChannelError(err) {
624
629
  if (!(err instanceof Error)) return false;
630
+ if (isSshExecRequestError(err)) return true;
625
631
  const msg = err.message.toLowerCase();
626
632
  return msg.includes("channel open failure") || msg.includes("open failed");
627
633
  }
628
634
  /**
629
635
  * Run an operation, and if it fails opening an SSH channel on a half-dead
630
636
  * cached connection ("Channel open failure: open failed" — common after the
631
- * idle timeout drops the socket), drop the connection and retry ONCE on a
632
- * fresh one. This is why `exec` survives a stale connection; the SFTP-based
633
- * ops (writeFile/readFile/exists) must go through it too, or a deploy's route
637
+ * idle timeout drops the socket), recover channel capacity and retry ONCE.
638
+ * An idle connection is replaced; a busy one stays alive so its other command
639
+ * is not aborted (see recoverFromChannelError). The SFTP-based ops
640
+ * (writeFile/readFile/exists) must go through this too, or a deploy's route
634
641
  * write fails spuriously and only succeeds on a manual redeploy.
635
642
  */
636
643
  async withChannelRetry(fn) {
@@ -703,7 +710,7 @@ var SshExecutor = class _SshExecutor {
703
710
  );
704
711
  timer.unref?.();
705
712
  client.exec(_SshExecutor.ENV_PREFIX + command, (err, stream) => {
706
- if (err) return finish(() => reject(err));
713
+ if (err) return finish(() => reject(tagExecRequestError(err)));
707
714
  channel = stream;
708
715
  if (terminating) {
709
716
  try {
@@ -788,7 +795,7 @@ var SshExecutor = class _SshExecutor {
788
795
  return;
789
796
  }
790
797
  client.exec(_SshExecutor.ENV_PREFIX + command, (err, stream) => {
791
- if (err) return finish(() => reject(err));
798
+ if (err) return finish(() => reject(tagExecRequestError(err)));
792
799
  channel = stream;
793
800
  if (terminating || signal?.aborted) {
794
801
  try {
@@ -2102,7 +2109,7 @@ async function verifyHostChannelAuth(config) {
2102
2109
  let hint = null;
2103
2110
  let forwarding = "unknown";
2104
2111
  try {
2105
- const { connectSshClient: connectSshClient2 } = await import("./ssh-client-WVLLOAYK.js");
2112
+ const { connectSshClient: connectSshClient2 } = await import("./ssh-client-FZDWP5PQ.js");
2106
2113
  const client = await connectSshClient2({
2107
2114
  host: config.host,
2108
2115
  port: config.port,
@@ -10,28 +10,28 @@ import {
10
10
  readComposeEnvFile,
11
11
  resolveLocalEnvironmentSync,
12
12
  thisHost
13
- } from "./chunk-SPR7N2EK.js";
13
+ } from "./chunk-IXBOV7BE.js";
14
14
  import {
15
15
  OS_DIR
16
16
  } from "./chunk-ELGRMZOW.js";
17
17
  import {
18
18
  systemCatalog
19
- } from "./chunk-7MKZP4TW.js";
19
+ } from "./chunk-XJSLJLNY.js";
20
20
  import {
21
21
  EDGE_CONTAINER_MOUNTS,
22
22
  EDGE_HOST_STATE_DIR
23
- } from "./chunk-BOD2IQ3P.js";
23
+ } from "./chunk-DQR5TPFB.js";
24
24
  import {
25
25
  DEFAULT_DOCKER_SOCKET_PATH,
26
26
  resolveLocalDockerSocketPath
27
- } from "./chunk-TPGBT5UR.js";
27
+ } from "./chunk-7MCPDYKP.js";
28
28
  import {
29
29
  LocalExecutor
30
- } from "./chunk-J4SYG2LC.js";
30
+ } from "./chunk-KCMEWNP7.js";
31
31
  import {
32
32
  invalidateEdgeContainer,
33
33
  sanitizeEdgeVhosts
34
- } from "./chunk-YGA52DHX.js";
34
+ } from "./chunk-37XZTLBJ.js";
35
35
  import {
36
36
  DEFAULT_IMAGE_REGISTRY,
37
37
  HOST_CHANNEL_BLOCKED,
@@ -51,7 +51,7 @@ import {
51
51
  hostFirewallRule,
52
52
  hostFirewallRuleRemoval,
53
53
  wrapText
54
- } from "./chunk-IVRTIKNZ.js";
54
+ } from "./chunk-COI4VFRW.js";
55
55
 
56
56
  // src/lib/host-channel-preflight.ts
57
57
  import { spawnSync as spawnSync4 } from "child_process";
@@ -1627,7 +1627,7 @@ function operatorEnvPassthrough(managed, prev) {
1627
1627
  }
1628
1628
  var PRESERVED_ENV_HEADER = "# Preserved from your existing .env \u2014 set by you, not by `openship up` (#485).";
1629
1629
  function resolveImageVersion(opts) {
1630
- return opts.version?.trim() || process.env.OPENSHIP_VERSION?.trim() || (true ? "0.7.0" : "latest");
1630
+ return opts.version?.trim() || process.env.OPENSHIP_VERSION?.trim() || (true ? "0.7.1" : "latest");
1631
1631
  }
1632
1632
  function managedEnvLines(opts, host, cfg, prev) {
1633
1633
  const lines = [
@@ -5,7 +5,7 @@ const require = __ospCreateRequire(import.meta.url);
5
5
  import {
6
6
  getTarCreateEnv,
7
7
  prepareSourceTarArgs
8
- } from "./chunk-JAKVPLHT.js";
8
+ } from "./chunk-2YAY5XHK.js";
9
9
  import {
10
10
  TRANSFER_EXCLUDES,
11
11
  nodeBinDirs,
@@ -13,7 +13,7 @@ import {
13
13
  packageManagerEnsureCommand,
14
14
  safeErrorMessage,
15
15
  shellQuote
16
- } from "./chunk-IVRTIKNZ.js";
16
+ } from "./chunk-COI4VFRW.js";
17
17
 
18
18
  // ../../packages/adapters/src/runtime/git-clone.ts
19
19
  var sq = shellQuote;
@@ -134,10 +134,10 @@ import {
134
134
  } from "./chunk-ZWLDLTJP.js";
135
135
  import {
136
136
  CloudRuntime
137
- } from "./chunk-DZBXOF5Q.js";
137
+ } from "./chunk-BBPKAQ54.js";
138
138
  import {
139
139
  OPENRESTY_DEFAULT_PATHS
140
- } from "./chunk-BOD2IQ3P.js";
140
+ } from "./chunk-DQR5TPFB.js";
141
141
  import {
142
142
  DockerRuntime,
143
143
  daemonConnectionFrom,
@@ -146,26 +146,26 @@ import {
146
146
  resolveExecExitCode,
147
147
  startAttachStream,
148
148
  startExecStream
149
- } from "./chunk-TPGBT5UR.js";
149
+ } from "./chunk-7MCPDYKP.js";
150
150
  import {
151
151
  BareRuntime
152
- } from "./chunk-5CFUYMPE.js";
152
+ } from "./chunk-3YSSXSC2.js";
153
153
  import {
154
154
  createExecutor
155
- } from "./chunk-3KUW2UC6.js";
155
+ } from "./chunk-GPTBEPUE.js";
156
156
  import {
157
157
  envOps
158
- } from "./chunk-3LWGDMJU.js";
158
+ } from "./chunk-KATXZ5AB.js";
159
159
  import {
160
160
  ENVIRONMENT_PROBE_SCRIPT,
161
161
  ENVIRONMENT_PROBE_TIMEOUT_MS,
162
162
  cacheEnvironment,
163
163
  parseEnvironmentProbe,
164
164
  profileIsFresh
165
- } from "./chunk-JWW5YAFL.js";
165
+ } from "./chunk-B2BQX6JX.js";
166
166
  import {
167
167
  MAIL_HOST_STATE_DIR
168
- } from "./chunk-CMGRMPRQ.js";
168
+ } from "./chunk-7TQP6723.js";
169
169
  import {
170
170
  FAMILY_BY_DISTRO,
171
171
  isAwsS3Endpoint,
@@ -177,7 +177,7 @@ import {
177
177
  validateBackupPath,
178
178
  validateClearPath,
179
179
  withTimeout
180
- } from "./chunk-IVRTIKNZ.js";
180
+ } from "./chunk-COI4VFRW.js";
181
181
 
182
182
  // ../../packages/adapters/src/runtime/image-transfer.ts
183
183
  import { Transform } from "stream";
@@ -9,7 +9,7 @@ import {
9
9
  firewallPersists,
10
10
  refused,
11
11
  shellQuote
12
- } from "./chunk-IVRTIKNZ.js";
12
+ } from "./chunk-COI4VFRW.js";
13
13
 
14
14
  // ../../packages/adapters/src/system/environment-ops.ts
15
15
  function opScript(steps) {
@@ -8,7 +8,7 @@ import {
8
8
  getLocalShellPath,
9
9
  logEntry,
10
10
  sq
11
- } from "./chunk-J2NDOB7D.js";
11
+ } from "./chunk-2BAKEGGF.js";
12
12
 
13
13
  // ../../packages/adapters/src/system/local-executor.ts
14
14
  import { exec, spawn } from "child_process";
@@ -44,6 +44,15 @@ var SshDisconnectedError = class extends Error {
44
44
  this.name = "SshDisconnectedError";
45
45
  }
46
46
  };
47
+ var SshExecRequestError = class extends Error {
48
+ constructor(cause) {
49
+ super(cause.message, { cause });
50
+ this.name = "SshExecRequestError";
51
+ }
52
+ };
53
+ function isSshExecRequestError(err) {
54
+ return err instanceof SshExecRequestError || err instanceof Error && err.name === "SshExecRequestError";
55
+ }
47
56
  function isSshDisconnectedError(err) {
48
57
  return err instanceof SshDisconnectedError || err instanceof Error && err.name === "SshDisconnectedError";
49
58
  }
@@ -67,7 +76,7 @@ function isRetryableRemoteConnectionError(err) {
67
76
  );
68
77
  }
69
78
  function isRemoteConnectionError(err) {
70
- return isSshAuthError(err) || isRetryableRemoteConnectionError(err);
79
+ return isSshAuthError(err) || isRetryableRemoteConnectionError(err) || isSshExecRequestError(err);
71
80
  }
72
81
  var MAX_COMMAND_CHARS = 120;
73
82
  function commandForError(command) {
@@ -100,6 +109,8 @@ function formatDuration(startMs) {
100
109
 
101
110
  export {
102
111
  SshDisconnectedError,
112
+ SshExecRequestError,
113
+ isSshExecRequestError,
103
114
  isSshAuthError,
104
115
  HostChannelUnavailableError,
105
116
  isRetryableRemoteConnectionError,
@@ -7,10 +7,10 @@ import {
7
7
  isContainerPortForwarder,
8
8
  managedDeploymentIdFromUnit,
9
9
  tryExec
10
- } from "./chunk-CMGRMPRQ.js";
10
+ } from "./chunk-7TQP6723.js";
11
11
  import {
12
12
  shellQuote
13
- } from "./chunk-IVRTIKNZ.js";
13
+ } from "./chunk-COI4VFRW.js";
14
14
 
15
15
  // ../../packages/adapters/src/system/port-listen.ts
16
16
  var PROC_NET_TCP_FILES = ["/proc/net/tcp", "/proc/net/tcp6"];
@@ -28,7 +28,7 @@ import {
28
28
  resolvePorts,
29
29
  sourceBuildDir,
30
30
  verifyHostChannel
31
- } from "./chunk-TT7P5ZZ3.js";
31
+ } from "./chunk-H36ASAYI.js";
32
32
  import {
33
33
  bootstrapAdmin,
34
34
  importMigratedSites,
@@ -36,18 +36,18 @@ import {
36
36
  internalPost,
37
37
  mintBareInternalToken,
38
38
  waitHealthy
39
- } from "./chunk-LL7M7GL4.js";
39
+ } from "./chunk-OEYXXSAM.js";
40
40
  import {
41
41
  startUnitHint,
42
42
  thisHost
43
- } from "./chunk-SPR7N2EK.js";
43
+ } from "./chunk-IXBOV7BE.js";
44
44
  import {
45
45
  completeHostEdge,
46
46
  markStoppedProxyImported,
47
47
  planAndApplyHostEdge,
48
48
  previewHostEdge,
49
49
  rollbackHostEdge
50
- } from "./chunk-5D27WZBW.js";
50
+ } from "./chunk-WG5PDWZ3.js";
51
51
  import {
52
52
  AUTH_SECRET_FILE,
53
53
  DATA_DIR,
@@ -58,17 +58,17 @@ import {
58
58
  } from "./chunk-ELGRMZOW.js";
59
59
  import {
60
60
  LocalExecutor
61
- } from "./chunk-J4SYG2LC.js";
61
+ } from "./chunk-KCMEWNP7.js";
62
62
  import {
63
63
  edgeCrashReason,
64
64
  edgeIsBroken
65
- } from "./chunk-YGA52DHX.js";
65
+ } from "./chunk-37XZTLBJ.js";
66
66
  import {
67
67
  EDGE_CONTAINER_NAME
68
- } from "./chunk-CMGRMPRQ.js";
68
+ } from "./chunk-7TQP6723.js";
69
69
  import {
70
70
  isValidEmail
71
- } from "./chunk-IVRTIKNZ.js";
71
+ } from "./chunk-COI4VFRW.js";
72
72
 
73
73
  // src/commands/up.ts
74
74
  import { Command } from "commander";
@@ -1564,7 +1564,7 @@ async function runForeground(opts, source) {
1564
1564
  const uiSpinner = ora("Preparing the dashboard\u2026").start();
1565
1565
  try {
1566
1566
  const bundle = await ensureDashboard({
1567
- tag: source ? "local" : opts.uiVersion || `v${"0.7.0"}`,
1567
+ tag: source ? "local" : opts.uiVersion || `v${"0.7.1"}`,
1568
1568
  onProgress: (received, total) => {
1569
1569
  if (total) {
1570
1570
  uiSpinner.text = `Downloading dashboard\u2026 ${Math.round(received / total * 100)}%`;