modal 0.11.1-dev.8 → 0.11.1-dev.9

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/index.cjs CHANGED
@@ -2236,6 +2236,9 @@ function environmentRoleFromJSON(object) {
2236
2236
  case 3:
2237
2237
  case "ENVIRONMENT_ROLE_NO_ACCESS":
2238
2238
  return 3 /* ENVIRONMENT_ROLE_NO_ACCESS */;
2239
+ case 4:
2240
+ case "ENVIRONMENT_ROLE_MODAL_ADMINISTERED_OBSERVER":
2241
+ return 4 /* ENVIRONMENT_ROLE_MODAL_ADMINISTERED_OBSERVER */;
2239
2242
  case -1:
2240
2243
  case "UNRECOGNIZED":
2241
2244
  default:
@@ -2252,6 +2255,8 @@ function environmentRoleToJSON(object) {
2252
2255
  return "ENVIRONMENT_ROLE_CONTRIBUTOR";
2253
2256
  case 3 /* ENVIRONMENT_ROLE_NO_ACCESS */:
2254
2257
  return "ENVIRONMENT_ROLE_NO_ACCESS";
2258
+ case 4 /* ENVIRONMENT_ROLE_MODAL_ADMINISTERED_OBSERVER */:
2259
+ return "ENVIRONMENT_ROLE_MODAL_ADMINISTERED_OBSERVER";
2255
2260
  case -1 /* UNRECOGNIZED */:
2256
2261
  default:
2257
2262
  return "UNRECOGNIZED";
@@ -64581,7 +64586,7 @@ var SecretService = class {
64581
64586
  "secret_name",
64582
64587
  name
64583
64588
  );
64584
- return new Secret(resp.secretId, name, void 0, resp.metadata?.keys);
64589
+ return new Secret(resp.secretId, name);
64585
64590
  } catch (err) {
64586
64591
  if (err instanceof import_nice_grpc2.ClientError && err.code === import_nice_grpc2.Status.NOT_FOUND)
64587
64592
  throw new NotFoundError(err.details);
@@ -64680,20 +64685,16 @@ var Secret = class {
64680
64685
  // constructed already-hydrated (e.g. from fromName), and not consulted again
64681
64686
  // once secretId is set.
64682
64687
  #hydrator;
64683
- // Names of the env vars a server-side Secret defines, as reported by the
64684
- // control plane on fromName. Undefined when unknown.
64685
- #keys;
64686
64688
  // Caches the single in-flight (or successfully completed) hydration so the
64687
64689
  // ephemeral Secret is created at most once, even if multiple callers hydrate
64688
64690
  // the same Secret concurrently. Cleared on failure so a transient error
64689
64691
  // doesn't permanently break the Secret; subsequent calls can retry.
64690
64692
  #hydratePromise;
64691
64693
  /** @ignore */
64692
- constructor(secretId, name, hydrator, keys) {
64694
+ constructor(secretId, name, hydrator) {
64693
64695
  this.#secretId = secretId;
64694
64696
  this.name = name;
64695
64697
  this.#hydrator = hydrator;
64696
- this.#keys = keys !== void 0 ? new Set(keys) : void 0;
64697
64698
  }
64698
64699
  /** The ID of the server-side Secret, or an empty string if not yet hydrated. */
64699
64700
  get secretId() {
@@ -64709,16 +64710,6 @@ var Secret = class {
64709
64710
  get _hydrator() {
64710
64711
  return this.#hydrator;
64711
64712
  }
64712
- /**
64713
- * Names of the env vars this server-side Secret defines, or `undefined` if
64714
- * unknown (e.g. for lazy fromObject Secrets or Secrets constructed by id).
64715
- *
64716
- * @internal
64717
- * @hidden
64718
- */
64719
- get _keys() {
64720
- return this.#keys;
64721
- }
64722
64713
  /**
64723
64714
  * Lazily create the ephemeral server-side Secret backing a fromObject Secret
64724
64715
  * and populate {@link Secret#secretId secretId}. A no-op once secretId is set
@@ -64778,21 +64769,39 @@ function collectSecretIds(secrets) {
64778
64769
  return secret.secretId;
64779
64770
  });
64780
64771
  }
64781
- function splitEnvDictAndResolvableSecrets(secrets) {
64782
- const envDict = {};
64783
- const resolvable = [];
64784
- for (const secret of secrets) {
64772
+ function resolvableSecrets(secrets) {
64773
+ return secrets.filter(
64774
+ (secret) => secret == null || secretEnvDictHydrator(secret) === void 0
64775
+ );
64776
+ }
64777
+ function secretSources(secrets, env) {
64778
+ const sources = [];
64779
+ secrets.forEach((secret, i) => {
64785
64780
  const hydrator = secret != null ? secretEnvDictHydrator(secret) : void 0;
64786
64781
  if (hydrator !== void 0) {
64787
- Object.assign(envDict, hydrator.envDict);
64788
- } else {
64789
- for (const key of secret?._keys ?? []) {
64790
- delete envDict[key];
64782
+ if (Object.keys(hydrator.envDict).length > 0) {
64783
+ sources.push(
64784
+ SecretSource.create({
64785
+ env: StringMap.create({ contents: hydrator.envDict })
64786
+ })
64787
+ );
64791
64788
  }
64792
- resolvable.push(secret);
64789
+ return;
64793
64790
  }
64791
+ if (secret == null) {
64792
+ throw new InvalidError(`secret at index ${i} must not be null`);
64793
+ }
64794
+ if (secret.secretId === "") {
64795
+ throw new InvalidError(`secret at index ${i} has not been hydrated`);
64796
+ }
64797
+ sources.push(SecretSource.create({ secretId: secret.secretId }));
64798
+ });
64799
+ if (env && Object.keys(env).length > 0) {
64800
+ sources.push(
64801
+ SecretSource.create({ env: StringMap.create({ contents: env }) })
64802
+ );
64794
64803
  }
64795
- return [envDict, resolvable];
64804
+ return sources;
64796
64805
  }
64797
64806
 
64798
64807
  // src/image.ts
@@ -72226,16 +72235,14 @@ var SidecarService = class {
72226
72235
  }
72227
72236
  }
72228
72237
  validateEnvVarKeys(params?.env ?? {});
72229
- const [envDict, resolvableSecrets] = splitEnvDictAndResolvableSecrets(
72230
- params?.secrets ?? []
72231
- );
72232
- Object.assign(envDict, params?.env ?? {});
72238
+ const resolvable = resolvableSecrets(params?.secrets ?? []);
72233
72239
  await hydrateSandboxSecrets(
72234
72240
  this.#access.client,
72235
- resolvableSecrets,
72241
+ resolvable,
72236
72242
  params?.cloudBucketMounts
72237
72243
  );
72238
- const secretIds = collectSecretIds(resolvableSecrets);
72244
+ const secretIds = collectSecretIds(resolvable);
72245
+ const sources = secretSources(params?.secrets ?? [], params?.env);
72239
72246
  const volumeMounts = buildSidecarVolumeMounts(params?.volumes);
72240
72247
  const cloudBucketMounts = buildCloudBucketMountProtos(
72241
72248
  params?.cloudBucketMounts
@@ -72249,7 +72256,6 @@ var SidecarService = class {
72249
72256
  let resp;
72250
72257
  try {
72251
72258
  if (viaControlPlane) {
72252
- const ephemeralSecrets = Object.keys(envDict).length > 0 ? StringMap.create({ contents: envDict }) : void 0;
72253
72259
  resp = await this.#access.client.cpClient.sandboxContainerCreateV2(
72254
72260
  SandboxContainerCreateV2Request.create({
72255
72261
  sandboxId: this.#access.sandboxId,
@@ -72269,7 +72275,7 @@ var SidecarService = class {
72269
72275
  memoryMb: params.experimentalMemoryReserveConsumeMiB
72270
72276
  }) : void 0
72271
72277
  }),
72272
- ephemeralSecrets
72278
+ secretSources: sources
72273
72279
  })
72274
72280
  );
72275
72281
  } else {
@@ -72280,9 +72286,8 @@ var SidecarService = class {
72280
72286
  containerName: name,
72281
72287
  imageId: image.imageId,
72282
72288
  args: command,
72283
- env: envDict,
72284
72289
  workdir: params?.workdir ?? "",
72285
- secretIds,
72290
+ secretSources: sources,
72286
72291
  volumeMounts,
72287
72292
  networkAccess,
72288
72293
  ptyInfo,
@@ -73077,16 +73082,15 @@ async function buildSandboxCreateRequestProto(appId, imageId, params = {}) {
73077
73082
  }
73078
73083
  });
73079
73084
  }
73080
- async function buildSandboxCreateV2RequestProto(appId, imageId, params = {}) {
73085
+ async function buildSandboxCreateV2RequestProto(appId, imageId, params = {}, secretSources2 = []) {
73081
73086
  if (params.gpu) {
73082
73087
  throw new Error("GPUs are not supported by experimentalCreate");
73083
73088
  }
73084
73089
  const req = await buildSandboxCreateRequestProto(appId, imageId, params);
73085
- const ephemeralSecrets = params.env && Object.keys(params.env).length > 0 ? StringMap.create({ contents: params.env }) : void 0;
73086
73090
  return SandboxCreateV2Request.create({
73087
73091
  appId: req.appId,
73088
73092
  definition: req.definition,
73089
- ephemeralSecrets,
73093
+ secretSources: secretSources2,
73090
73094
  tags: req.tags
73091
73095
  });
73092
73096
  }
@@ -73170,27 +73174,17 @@ var SandboxService = class {
73170
73174
  async experimentalCreate(app, image, params = {}) {
73171
73175
  await image.build(app);
73172
73176
  validateEnvVarKeys(params.env ?? {});
73173
- const [envDict, resolvableSecrets] = splitEnvDictAndResolvableSecrets(
73174
- params.secrets ?? []
73175
- );
73176
- Object.assign(envDict, params.env ?? {});
73177
+ const resolvable = resolvableSecrets(params.secrets ?? []);
73177
73178
  await hydrateSandboxSecrets(
73178
73179
  this.#client,
73179
- [
73180
- ...resolvableSecrets,
73181
- ...params.experimentalOutboundPolicy?._secrets() ?? []
73182
- ],
73180
+ [...resolvable, ...params.experimentalOutboundPolicy?._secrets() ?? []],
73183
73181
  params.cloudBucketMounts
73184
73182
  );
73185
- const mergedParams = {
73186
- ...params,
73187
- secrets: resolvableSecrets,
73188
- env: envDict
73189
- };
73190
73183
  const createReq = await buildSandboxCreateV2RequestProto(
73191
73184
  app.appId,
73192
73185
  image.imageId,
73193
- mergedParams
73186
+ { ...params, secrets: resolvable },
73187
+ secretSources(params.secrets ?? [], params.env)
73194
73188
  );
73195
73189
  let createResp;
73196
73190
  try {
@@ -73516,7 +73510,6 @@ function buildTaskExecStartRequestProto(taskId, execId, command, params, contain
73516
73510
  );
73517
73511
  }
73518
73512
  validateWorkdir(params?.workdir);
73519
- const secretIds = (params?.secrets || []).map((secret) => secret.secretId);
73520
73513
  const stdout = params?.stdout ?? "pipe";
73521
73514
  const stderr = params?.stderr ?? "pipe";
73522
73515
  let stdoutConfig;
@@ -73547,8 +73540,7 @@ function buildTaskExecStartRequestProto(taskId, execId, command, params, contain
73547
73540
  stderrConfig,
73548
73541
  timeoutSecs: params?.timeoutMs ? params.timeoutMs / 1e3 : void 0,
73549
73542
  workdir: params?.workdir,
73550
- secretIds,
73551
- env: params?.env ?? {},
73543
+ secretSources: secretSources(params?.secrets ?? [], params?.env),
73552
73544
  ptyInfo,
73553
73545
  runtimeDebug: false,
73554
73546
  containerId: containerId ?? ""
@@ -73821,23 +73813,17 @@ var Sandbox2 = class {
73821
73813
  this.#ensureAttached();
73822
73814
  validateExecArgs(command);
73823
73815
  validateEnvVarKeys(params?.env ?? {});
73824
- const [envDict, resolvableSecrets] = splitEnvDictAndResolvableSecrets(
73825
- params?.secrets ?? []
73816
+ await hydrateSecrets(
73817
+ this.#client,
73818
+ resolvableSecrets(params?.secrets ?? [])
73826
73819
  );
73827
- Object.assign(envDict, params?.env ?? {});
73828
- await hydrateSecrets(this.#client, resolvableSecrets);
73829
- const execParams = {
73830
- ...params,
73831
- env: envDict,
73832
- secrets: resolvableSecrets
73833
- };
73834
73820
  const [taskId, commandRouterClient] = await this.#getCommandRouter();
73835
73821
  const execId = (0, import_uuid2.v4)();
73836
73822
  const request = buildTaskExecStartRequestProto(
73837
73823
  taskId,
73838
73824
  execId,
73839
73825
  command,
73840
- execParams,
73826
+ params,
73841
73827
  containerId
73842
73828
  );
73843
73829
  await commandRouterClient.execStart(request);
@@ -75025,7 +75011,7 @@ var AuthTokenManager = class {
75025
75011
  };
75026
75012
 
75027
75013
  // src/version.ts
75028
- var SDK_VERSION = "0.11.1-dev.8";
75014
+ var SDK_VERSION = "0.11.1-dev.9";
75029
75015
  function getSDKVersion() {
75030
75016
  return SDK_VERSION;
75031
75017
  }
package/dist/index.d.cts CHANGED
@@ -207,6 +207,7 @@ declare enum EnvironmentRole {
207
207
  ENVIRONMENT_ROLE_VIEWER = 1,
208
208
  ENVIRONMENT_ROLE_CONTRIBUTOR = 2,
209
209
  ENVIRONMENT_ROLE_NO_ACCESS = 3,
210
+ ENVIRONMENT_ROLE_MODAL_ADMINISTERED_OBSERVER = 4,
210
211
  UNRECOGNIZED = -1
211
212
  }
212
213
  /**
@@ -7358,7 +7359,7 @@ declare class Secret {
7358
7359
  #private;
7359
7360
  readonly name?: string;
7360
7361
  /** @ignore */
7361
- constructor(secretId: string, name?: string, hydrator?: SecretHydrator, keys?: readonly string[]);
7362
+ constructor(secretId: string, name?: string, hydrator?: SecretHydrator);
7362
7363
  /** The ID of the server-side Secret, or an empty string if not yet hydrated. */
7363
7364
  get secretId(): string;
7364
7365
  /**
@@ -7369,14 +7370,6 @@ declare class Secret {
7369
7370
  * @hidden
7370
7371
  */
7371
7372
  get _hydrator(): SecretHydrator | undefined;
7372
- /**
7373
- * Names of the env vars this server-side Secret defines, or `undefined` if
7374
- * unknown (e.g. for lazy fromObject Secrets or Secrets constructed by id).
7375
- *
7376
- * @internal
7377
- * @hidden
7378
- */
7379
- get _keys(): ReadonlySet<string> | undefined;
7380
7373
  /**
7381
7374
  * Lazily create the ephemeral server-side Secret backing a fromObject Secret
7382
7375
  * and populate {@link Secret#secretId secretId}. A no-op once secretId is set
package/dist/index.d.ts CHANGED
@@ -207,6 +207,7 @@ declare enum EnvironmentRole {
207
207
  ENVIRONMENT_ROLE_VIEWER = 1,
208
208
  ENVIRONMENT_ROLE_CONTRIBUTOR = 2,
209
209
  ENVIRONMENT_ROLE_NO_ACCESS = 3,
210
+ ENVIRONMENT_ROLE_MODAL_ADMINISTERED_OBSERVER = 4,
210
211
  UNRECOGNIZED = -1
211
212
  }
212
213
  /**
@@ -7358,7 +7359,7 @@ declare class Secret {
7358
7359
  #private;
7359
7360
  readonly name?: string;
7360
7361
  /** @ignore */
7361
- constructor(secretId: string, name?: string, hydrator?: SecretHydrator, keys?: readonly string[]);
7362
+ constructor(secretId: string, name?: string, hydrator?: SecretHydrator);
7362
7363
  /** The ID of the server-side Secret, or an empty string if not yet hydrated. */
7363
7364
  get secretId(): string;
7364
7365
  /**
@@ -7369,14 +7370,6 @@ declare class Secret {
7369
7370
  * @hidden
7370
7371
  */
7371
7372
  get _hydrator(): SecretHydrator | undefined;
7372
- /**
7373
- * Names of the env vars this server-side Secret defines, or `undefined` if
7374
- * unknown (e.g. for lazy fromObject Secrets or Secrets constructed by id).
7375
- *
7376
- * @internal
7377
- * @hidden
7378
- */
7379
- get _keys(): ReadonlySet<string> | undefined;
7380
7373
  /**
7381
7374
  * Lazily create the ephemeral server-side Secret backing a fromObject Secret
7382
7375
  * and populate {@link Secret#secretId secretId}. A no-op once secretId is set
package/dist/index.js CHANGED
@@ -2141,6 +2141,9 @@ function environmentRoleFromJSON(object) {
2141
2141
  case 3:
2142
2142
  case "ENVIRONMENT_ROLE_NO_ACCESS":
2143
2143
  return 3 /* ENVIRONMENT_ROLE_NO_ACCESS */;
2144
+ case 4:
2145
+ case "ENVIRONMENT_ROLE_MODAL_ADMINISTERED_OBSERVER":
2146
+ return 4 /* ENVIRONMENT_ROLE_MODAL_ADMINISTERED_OBSERVER */;
2144
2147
  case -1:
2145
2148
  case "UNRECOGNIZED":
2146
2149
  default:
@@ -2157,6 +2160,8 @@ function environmentRoleToJSON(object) {
2157
2160
  return "ENVIRONMENT_ROLE_CONTRIBUTOR";
2158
2161
  case 3 /* ENVIRONMENT_ROLE_NO_ACCESS */:
2159
2162
  return "ENVIRONMENT_ROLE_NO_ACCESS";
2163
+ case 4 /* ENVIRONMENT_ROLE_MODAL_ADMINISTERED_OBSERVER */:
2164
+ return "ENVIRONMENT_ROLE_MODAL_ADMINISTERED_OBSERVER";
2160
2165
  case -1 /* UNRECOGNIZED */:
2161
2166
  default:
2162
2167
  return "UNRECOGNIZED";
@@ -64492,7 +64497,7 @@ var SecretService = class {
64492
64497
  "secret_name",
64493
64498
  name
64494
64499
  );
64495
- return new Secret(resp.secretId, name, void 0, resp.metadata?.keys);
64500
+ return new Secret(resp.secretId, name);
64496
64501
  } catch (err) {
64497
64502
  if (err instanceof ClientError2 && err.code === Status2.NOT_FOUND)
64498
64503
  throw new NotFoundError(err.details);
@@ -64591,20 +64596,16 @@ var Secret = class {
64591
64596
  // constructed already-hydrated (e.g. from fromName), and not consulted again
64592
64597
  // once secretId is set.
64593
64598
  #hydrator;
64594
- // Names of the env vars a server-side Secret defines, as reported by the
64595
- // control plane on fromName. Undefined when unknown.
64596
- #keys;
64597
64599
  // Caches the single in-flight (or successfully completed) hydration so the
64598
64600
  // ephemeral Secret is created at most once, even if multiple callers hydrate
64599
64601
  // the same Secret concurrently. Cleared on failure so a transient error
64600
64602
  // doesn't permanently break the Secret; subsequent calls can retry.
64601
64603
  #hydratePromise;
64602
64604
  /** @ignore */
64603
- constructor(secretId, name, hydrator, keys) {
64605
+ constructor(secretId, name, hydrator) {
64604
64606
  this.#secretId = secretId;
64605
64607
  this.name = name;
64606
64608
  this.#hydrator = hydrator;
64607
- this.#keys = keys !== void 0 ? new Set(keys) : void 0;
64608
64609
  }
64609
64610
  /** The ID of the server-side Secret, or an empty string if not yet hydrated. */
64610
64611
  get secretId() {
@@ -64620,16 +64621,6 @@ var Secret = class {
64620
64621
  get _hydrator() {
64621
64622
  return this.#hydrator;
64622
64623
  }
64623
- /**
64624
- * Names of the env vars this server-side Secret defines, or `undefined` if
64625
- * unknown (e.g. for lazy fromObject Secrets or Secrets constructed by id).
64626
- *
64627
- * @internal
64628
- * @hidden
64629
- */
64630
- get _keys() {
64631
- return this.#keys;
64632
- }
64633
64624
  /**
64634
64625
  * Lazily create the ephemeral server-side Secret backing a fromObject Secret
64635
64626
  * and populate {@link Secret#secretId secretId}. A no-op once secretId is set
@@ -64689,21 +64680,39 @@ function collectSecretIds(secrets) {
64689
64680
  return secret.secretId;
64690
64681
  });
64691
64682
  }
64692
- function splitEnvDictAndResolvableSecrets(secrets) {
64693
- const envDict = {};
64694
- const resolvable = [];
64695
- for (const secret of secrets) {
64683
+ function resolvableSecrets(secrets) {
64684
+ return secrets.filter(
64685
+ (secret) => secret == null || secretEnvDictHydrator(secret) === void 0
64686
+ );
64687
+ }
64688
+ function secretSources(secrets, env) {
64689
+ const sources = [];
64690
+ secrets.forEach((secret, i) => {
64696
64691
  const hydrator = secret != null ? secretEnvDictHydrator(secret) : void 0;
64697
64692
  if (hydrator !== void 0) {
64698
- Object.assign(envDict, hydrator.envDict);
64699
- } else {
64700
- for (const key of secret?._keys ?? []) {
64701
- delete envDict[key];
64693
+ if (Object.keys(hydrator.envDict).length > 0) {
64694
+ sources.push(
64695
+ SecretSource.create({
64696
+ env: StringMap.create({ contents: hydrator.envDict })
64697
+ })
64698
+ );
64702
64699
  }
64703
- resolvable.push(secret);
64700
+ return;
64704
64701
  }
64702
+ if (secret == null) {
64703
+ throw new InvalidError(`secret at index ${i} must not be null`);
64704
+ }
64705
+ if (secret.secretId === "") {
64706
+ throw new InvalidError(`secret at index ${i} has not been hydrated`);
64707
+ }
64708
+ sources.push(SecretSource.create({ secretId: secret.secretId }));
64709
+ });
64710
+ if (env && Object.keys(env).length > 0) {
64711
+ sources.push(
64712
+ SecretSource.create({ env: StringMap.create({ contents: env }) })
64713
+ );
64705
64714
  }
64706
- return [envDict, resolvable];
64715
+ return sources;
64707
64716
  }
64708
64717
 
64709
64718
  // src/image.ts
@@ -72144,16 +72153,14 @@ var SidecarService = class {
72144
72153
  }
72145
72154
  }
72146
72155
  validateEnvVarKeys(params?.env ?? {});
72147
- const [envDict, resolvableSecrets] = splitEnvDictAndResolvableSecrets(
72148
- params?.secrets ?? []
72149
- );
72150
- Object.assign(envDict, params?.env ?? {});
72156
+ const resolvable = resolvableSecrets(params?.secrets ?? []);
72151
72157
  await hydrateSandboxSecrets(
72152
72158
  this.#access.client,
72153
- resolvableSecrets,
72159
+ resolvable,
72154
72160
  params?.cloudBucketMounts
72155
72161
  );
72156
- const secretIds = collectSecretIds(resolvableSecrets);
72162
+ const secretIds = collectSecretIds(resolvable);
72163
+ const sources = secretSources(params?.secrets ?? [], params?.env);
72157
72164
  const volumeMounts = buildSidecarVolumeMounts(params?.volumes);
72158
72165
  const cloudBucketMounts = buildCloudBucketMountProtos(
72159
72166
  params?.cloudBucketMounts
@@ -72167,7 +72174,6 @@ var SidecarService = class {
72167
72174
  let resp;
72168
72175
  try {
72169
72176
  if (viaControlPlane) {
72170
- const ephemeralSecrets = Object.keys(envDict).length > 0 ? StringMap.create({ contents: envDict }) : void 0;
72171
72177
  resp = await this.#access.client.cpClient.sandboxContainerCreateV2(
72172
72178
  SandboxContainerCreateV2Request.create({
72173
72179
  sandboxId: this.#access.sandboxId,
@@ -72187,7 +72193,7 @@ var SidecarService = class {
72187
72193
  memoryMb: params.experimentalMemoryReserveConsumeMiB
72188
72194
  }) : void 0
72189
72195
  }),
72190
- ephemeralSecrets
72196
+ secretSources: sources
72191
72197
  })
72192
72198
  );
72193
72199
  } else {
@@ -72198,9 +72204,8 @@ var SidecarService = class {
72198
72204
  containerName: name,
72199
72205
  imageId: image.imageId,
72200
72206
  args: command,
72201
- env: envDict,
72202
72207
  workdir: params?.workdir ?? "",
72203
- secretIds,
72208
+ secretSources: sources,
72204
72209
  volumeMounts,
72205
72210
  networkAccess,
72206
72211
  ptyInfo,
@@ -72995,16 +73000,15 @@ async function buildSandboxCreateRequestProto(appId, imageId, params = {}) {
72995
73000
  }
72996
73001
  });
72997
73002
  }
72998
- async function buildSandboxCreateV2RequestProto(appId, imageId, params = {}) {
73003
+ async function buildSandboxCreateV2RequestProto(appId, imageId, params = {}, secretSources2 = []) {
72999
73004
  if (params.gpu) {
73000
73005
  throw new Error("GPUs are not supported by experimentalCreate");
73001
73006
  }
73002
73007
  const req = await buildSandboxCreateRequestProto(appId, imageId, params);
73003
- const ephemeralSecrets = params.env && Object.keys(params.env).length > 0 ? StringMap.create({ contents: params.env }) : void 0;
73004
73008
  return SandboxCreateV2Request.create({
73005
73009
  appId: req.appId,
73006
73010
  definition: req.definition,
73007
- ephemeralSecrets,
73011
+ secretSources: secretSources2,
73008
73012
  tags: req.tags
73009
73013
  });
73010
73014
  }
@@ -73088,27 +73092,17 @@ var SandboxService = class {
73088
73092
  async experimentalCreate(app, image, params = {}) {
73089
73093
  await image.build(app);
73090
73094
  validateEnvVarKeys(params.env ?? {});
73091
- const [envDict, resolvableSecrets] = splitEnvDictAndResolvableSecrets(
73092
- params.secrets ?? []
73093
- );
73094
- Object.assign(envDict, params.env ?? {});
73095
+ const resolvable = resolvableSecrets(params.secrets ?? []);
73095
73096
  await hydrateSandboxSecrets(
73096
73097
  this.#client,
73097
- [
73098
- ...resolvableSecrets,
73099
- ...params.experimentalOutboundPolicy?._secrets() ?? []
73100
- ],
73098
+ [...resolvable, ...params.experimentalOutboundPolicy?._secrets() ?? []],
73101
73099
  params.cloudBucketMounts
73102
73100
  );
73103
- const mergedParams = {
73104
- ...params,
73105
- secrets: resolvableSecrets,
73106
- env: envDict
73107
- };
73108
73101
  const createReq = await buildSandboxCreateV2RequestProto(
73109
73102
  app.appId,
73110
73103
  image.imageId,
73111
- mergedParams
73104
+ { ...params, secrets: resolvable },
73105
+ secretSources(params.secrets ?? [], params.env)
73112
73106
  );
73113
73107
  let createResp;
73114
73108
  try {
@@ -73434,7 +73428,6 @@ function buildTaskExecStartRequestProto(taskId, execId, command, params, contain
73434
73428
  );
73435
73429
  }
73436
73430
  validateWorkdir(params?.workdir);
73437
- const secretIds = (params?.secrets || []).map((secret) => secret.secretId);
73438
73431
  const stdout = params?.stdout ?? "pipe";
73439
73432
  const stderr = params?.stderr ?? "pipe";
73440
73433
  let stdoutConfig;
@@ -73465,8 +73458,7 @@ function buildTaskExecStartRequestProto(taskId, execId, command, params, contain
73465
73458
  stderrConfig,
73466
73459
  timeoutSecs: params?.timeoutMs ? params.timeoutMs / 1e3 : void 0,
73467
73460
  workdir: params?.workdir,
73468
- secretIds,
73469
- env: params?.env ?? {},
73461
+ secretSources: secretSources(params?.secrets ?? [], params?.env),
73470
73462
  ptyInfo,
73471
73463
  runtimeDebug: false,
73472
73464
  containerId: containerId ?? ""
@@ -73739,23 +73731,17 @@ var Sandbox2 = class {
73739
73731
  this.#ensureAttached();
73740
73732
  validateExecArgs(command);
73741
73733
  validateEnvVarKeys(params?.env ?? {});
73742
- const [envDict, resolvableSecrets] = splitEnvDictAndResolvableSecrets(
73743
- params?.secrets ?? []
73734
+ await hydrateSecrets(
73735
+ this.#client,
73736
+ resolvableSecrets(params?.secrets ?? [])
73744
73737
  );
73745
- Object.assign(envDict, params?.env ?? {});
73746
- await hydrateSecrets(this.#client, resolvableSecrets);
73747
- const execParams = {
73748
- ...params,
73749
- env: envDict,
73750
- secrets: resolvableSecrets
73751
- };
73752
73738
  const [taskId, commandRouterClient] = await this.#getCommandRouter();
73753
73739
  const execId = uuidv42();
73754
73740
  const request = buildTaskExecStartRequestProto(
73755
73741
  taskId,
73756
73742
  execId,
73757
73743
  command,
73758
- execParams,
73744
+ params,
73759
73745
  containerId
73760
73746
  );
73761
73747
  await commandRouterClient.execStart(request);
@@ -74943,7 +74929,7 @@ var AuthTokenManager = class {
74943
74929
  };
74944
74930
 
74945
74931
  // src/version.ts
74946
- var SDK_VERSION = "0.11.1-dev.8";
74932
+ var SDK_VERSION = "0.11.1-dev.9";
74947
74933
  function getSDKVersion() {
74948
74934
  return SDK_VERSION;
74949
74935
  }
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "modal",
3
- "version": "0.11.1-dev.8",
3
+ "version": "0.11.1-dev.9",
4
4
  "description": "Modal SDK for JavaScript/TypeScript",
5
5
  "license": "Apache-2.0",
6
6
  "homepage": "https://modal.com/docs/guide/sdk-javascript-go",