@opengeni/api-router 3.1.3-canary.38890816741001 → 3.2.2

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.
@@ -13789,7 +13789,90 @@ function registerSessionHistoryImportRoutes(app, deps) {
13789
13789
  }
13790
13790
 
13791
13791
  // src/routes/vault-providers.ts
13792
+ import { isDeepStrictEqual } from "util";
13792
13793
  import { HTTPException as HTTPException20 } from "hono/http-exception";
13794
+
13795
+ // src/integrations/external-vault-providers.ts
13796
+ import { pinnedFetch } from "@opengeni/network";
13797
+ import { VaultProviderError } from "@opengeni/vaults";
13798
+ function createNativeExternalVaultFactories(settings, options = {}) {
13799
+ const factories = {
13800
+ keeper: keeperFactory(settings, options.keeper ?? {})
13801
+ };
13802
+ const cliPath = settings.protonPassCliPath;
13803
+ if (cliPath) factories.protonpass = protonPassFactory(cliPath, options.protonpass ?? {});
13804
+ return factories;
13805
+ }
13806
+ async function closeNativeExternalVaultProviders() {
13807
+ const pools = [...protonPools.values()];
13808
+ protonPools.clear();
13809
+ await Promise.all(pools.map(async (pool) => (await pool.catch(() => null))?.close()));
13810
+ }
13811
+ function mismatch() {
13812
+ throw new VaultProviderError(
13813
+ "provider_unavailable",
13814
+ "The configured adapter does not match this connection."
13815
+ );
13816
+ }
13817
+ function nativeKeeperFetch(settings, pinned = {}) {
13818
+ return (input, init) => pinnedFetch(input, init, settings, {
13819
+ ...pinned,
13820
+ label: "Keeper Secrets Manager",
13821
+ requireHttpsOutsideLocalTest: true
13822
+ });
13823
+ }
13824
+ function keeperFactory(settings, seams) {
13825
+ const fetch2 = nativeKeeperFetch(settings);
13826
+ return async (input) => {
13827
+ const credentials = input.credentials;
13828
+ if (credentials.provider !== "keeper") mismatch();
13829
+ const persist = input.persistCredentials;
13830
+ const { openKeeperConnection } = await import("@opengeni/vaults-keeper");
13831
+ const opened = await openKeeperConnection({
13832
+ credentials: "oneTimeToken" in credentials ? {
13833
+ oneTimeToken: credentials.oneTimeToken,
13834
+ ...credentials.hostname ? { hostname: credentials.hostname } : {}
13835
+ } : { configuration: credentials.configuration },
13836
+ // Without it openKeeperConnection refuses: a redeemed token or rotated
13837
+ // key must never live only in memory.
13838
+ ...persist ? {
13839
+ persistConfiguration: (configuration) => persist({ provider: "keeper", configuration })
13840
+ } : {},
13841
+ ...input.operations ? { operations: input.operations } : {},
13842
+ // Cancels a pending bootstrap; a stored configuration opens without a request.
13843
+ ...input.signal ? { signal: input.signal } : {},
13844
+ fetch: fetch2,
13845
+ ...seams
13846
+ });
13847
+ const stored = {
13848
+ provider: "keeper",
13849
+ configuration: opened.configuration
13850
+ };
13851
+ return { provider: opened.provider, credentials: stored };
13852
+ };
13853
+ }
13854
+ var protonPools = /* @__PURE__ */ new Map();
13855
+ function protonPassFactory(binaryPath, seams) {
13856
+ return async (input) => {
13857
+ const credentials = input.credentials;
13858
+ if (credentials.provider !== "protonpass") mismatch();
13859
+ let pool = protonPools.get(binaryPath);
13860
+ if (!pool) {
13861
+ pool = import("@opengeni/vaults-protonpass").then(
13862
+ ({ createProtonPassProviderPool }) => createProtonPassProviderPool({ ...seams, binaryPath })
13863
+ );
13864
+ protonPools.set(binaryPath, pool);
13865
+ pool.catch(() => protonPools.delete(binaryPath));
13866
+ }
13867
+ const provider = (await pool).provider(credentials.token, {
13868
+ ...input.connectionId === void 0 ? {} : { connectionId: input.connectionId },
13869
+ ...input.operations ? { operations: input.operations } : {}
13870
+ });
13871
+ return { provider, credentials: { provider: "protonpass", token: credentials.token } };
13872
+ };
13873
+ }
13874
+
13875
+ // src/routes/vault-providers.ts
13793
13876
  import {
13794
13877
  CreateManagedProviderVaultRequest,
13795
13878
  DisconnectOnePasswordResponse,
@@ -13800,15 +13883,22 @@ import {
13800
13883
  OnePasswordConnectionSummary,
13801
13884
  ProviderVaultMeta,
13802
13885
  ReplaceOnePasswordTokenRequest,
13886
+ InstallVaultProviderRequest,
13887
+ InstallVaultProviderResponse,
13888
+ ListVaultProviderConnectionsResponse,
13889
+ ReplaceVaultProviderCredentialsRequest,
13890
+ DisconnectVaultProviderResponse,
13803
13891
  VAULT_ERROR_HTTP_STATUS
13804
13892
  } from "@opengeni/contracts";
13805
13893
  import {
13806
13894
  ONEPASSWORD_CREDENTIAL_ROLE,
13807
13895
  ONEPASSWORD_PROVIDER_DOMAIN,
13808
13896
  createWorkspaceVaultProviderRegistry,
13897
+ createRemoteExternalVaultFactories,
13809
13898
  externalActorContinuationForAuthorization as externalActorContinuationForAuthorization4,
13810
13899
  hasPermission as hasPermission6,
13811
13900
  isVaultError,
13901
+ VaultError,
13812
13902
  providerSecretName,
13813
13903
  requirePermission as requirePermission2,
13814
13904
  syncLinkedProviderVault,
@@ -13820,7 +13910,15 @@ import {
13820
13910
  onePasswordConnectionMetadata,
13821
13911
  requireAccessGrantAuthorization as requireAccessGrantAuthorization4,
13822
13912
  requireEnvironmentEncryption as requireEnvironmentEncryption3,
13823
- vaultErrorCodeForProvider
13913
+ vaultErrorCodeForProvider,
13914
+ externalVaultConnectionDetails,
13915
+ externalVaultConnectionMetadata,
13916
+ externalVaultProviderDomain,
13917
+ externalVaultProviderForConnection,
13918
+ isExternalVaultConnection,
13919
+ StoredVaultProviderCredentials,
13920
+ loadExternalVaultConnection,
13921
+ pendingVaultCredentialBundle
13824
13922
  } from "@opengeni/core";
13825
13923
  import {
13826
13924
  createConnection,
@@ -13829,6 +13927,7 @@ import {
13829
13927
  getConnectionMetadata,
13830
13928
  getVault,
13831
13929
  linkProviderVault,
13930
+ preflightProviderVaultLink,
13832
13931
  listConnectionsMetadata,
13833
13932
  listVaultsForSubject,
13834
13933
  revokeConnection,
@@ -13836,7 +13935,10 @@ import {
13836
13935
  } from "@opengeni/db";
13837
13936
  import {
13838
13937
  isVaultProviderError,
13839
- VaultProviderError
13938
+ VaultProviderError as VaultProviderError2,
13939
+ createProviderCallBudget,
13940
+ listProviderVaults,
13941
+ providerOperations
13840
13942
  } from "@opengeni/vaults";
13841
13943
 
13842
13944
  // src/connection-ownership.ts
@@ -14059,8 +14161,54 @@ function vaultProviderRegistryFor(deps, input) {
14059
14161
  workspaceId: input.workspaceId,
14060
14162
  subjectId: input.subjectId,
14061
14163
  hostVaultProvider: deps.connectionCredentials?.vaultProvider ?? null,
14062
- onePasswordVaultProvider: deps.onePasswordVaultProvider === null ? null : onePasswordFactoryFor(deps)
14063
- });
14164
+ onePasswordVaultProvider: deps.onePasswordVaultProvider === null ? null : onePasswordFactoryFor(deps),
14165
+ externalVaultProviders: externalVaultFactoriesFor(deps),
14166
+ ...input.executionContext ? { executionContext: input.executionContext } : {}
14167
+ });
14168
+ }
14169
+ var defaultExternalVaultFactories = /* @__PURE__ */ new WeakMap();
14170
+ function externalVaultFactoriesFor(deps) {
14171
+ if (deps.externalVaultProviders !== void 0) return deps.externalVaultProviders ?? {};
14172
+ let factories = defaultExternalVaultFactories.get(deps);
14173
+ if (!factories) {
14174
+ factories = {
14175
+ ...createRemoteExternalVaultFactories(deps.settings),
14176
+ ...createNativeExternalVaultFactories(deps.settings)
14177
+ };
14178
+ defaultExternalVaultFactories.set(deps, factories);
14179
+ }
14180
+ return factories;
14181
+ }
14182
+ async function providerForConnection(deps, input) {
14183
+ const connection = await getConnectionMetadata(
14184
+ deps.db,
14185
+ input.workspaceId,
14186
+ input.connectionId,
14187
+ input.subjectId
14188
+ );
14189
+ if (connection && isOnePasswordConnection(connection)) {
14190
+ return { ...await onePasswordProviderForConnection(deps, input), source: "onepassword" };
14191
+ }
14192
+ if (!connection || !isExternalVaultConnection(connection) || connection.status === "revoked") {
14193
+ throw new HTTPException20(404, { message: "Vault connection not found" });
14194
+ }
14195
+ const details = externalVaultConnectionDetails(connection.metadata);
14196
+ const factory = externalVaultFactoriesFor(deps)[details.provider];
14197
+ if (!factory)
14198
+ throw new VaultProviderError2(
14199
+ "provider_unavailable",
14200
+ "This vault provider is not available in this deployment."
14201
+ );
14202
+ return {
14203
+ source: details.provider,
14204
+ provider: await externalVaultProviderForConnection({
14205
+ ...input,
14206
+ db: deps.db,
14207
+ settings: deps.settings,
14208
+ provider: details.provider,
14209
+ factory
14210
+ })
14211
+ };
14064
14212
  }
14065
14213
  function vaultContextFor(authorization, workspaceId) {
14066
14214
  return {
@@ -14132,7 +14280,7 @@ function vaultRouteError(c, error, write = false) {
14132
14280
  function findProviderVault(vaults, externalVaultId) {
14133
14281
  const found = vaults.find((vault) => vault.externalVaultId === externalVaultId);
14134
14282
  if (!found) {
14135
- throw new VaultProviderError(
14283
+ throw new VaultProviderError2(
14136
14284
  "provider_not_found",
14137
14285
  "that vault does not exist or is not shared with this connection"
14138
14286
  );
@@ -14145,7 +14293,7 @@ function registerVaultProviderRoutes(app, deps, options = {}) {
14145
14293
  const rows3 = await listVaultsForSubject(db, context, { workspaceId });
14146
14294
  return new Map(
14147
14295
  rows3.filter(
14148
- (row) => row.source === "onepassword" && row.providerConnectionId === connectionId && row.providerVaultRef
14296
+ (row) => row.source !== "opengeni" && row.providerConnectionId === connectionId && row.providerVaultRef
14149
14297
  ).map((row) => [row.providerVaultRef, row.id])
14150
14298
  );
14151
14299
  });
@@ -14181,7 +14329,7 @@ function registerVaultProviderRoutes(app, deps, options = {}) {
14181
14329
  planTier: payload.planTier,
14182
14330
  allowFakeTokens: settings.onePasswordFakeTokens
14183
14331
  });
14184
- vaults = await provider.listVaults(routeProviderContext(null));
14332
+ vaults = await listProviderVaults(provider, routeProviderContext(null));
14185
14333
  } catch (error) {
14186
14334
  return providerErrorResponse(c, error);
14187
14335
  }
@@ -14244,13 +14392,13 @@ function registerVaultProviderRoutes(app, deps, options = {}) {
14244
14392
  );
14245
14393
  const { grant } = authorization;
14246
14394
  try {
14247
- const { provider } = await onePasswordProviderForConnection(deps, {
14395
+ const { provider } = await providerForConnection(deps, {
14248
14396
  workspaceId,
14249
14397
  connectionId,
14250
14398
  subjectId: grant.subjectId
14251
14399
  });
14252
14400
  const [vaults, linked] = await Promise.all([
14253
- provider.listVaults(routeProviderContext(connectionId)),
14401
+ listProviderVaults(provider, routeProviderContext(connectionId)),
14254
14402
  linkedVaults({
14255
14403
  workspaceId,
14256
14404
  connectionId,
@@ -14263,7 +14411,9 @@ function registerVaultProviderRoutes(app, deps, options = {}) {
14263
14411
  externalVaultId: vault.externalVaultId,
14264
14412
  name: vault.name,
14265
14413
  itemCount: vault.itemCount,
14266
- linkedVaultId: linked.get(vault.externalVaultId) ?? null
14414
+ linkedVaultId: linked.get(vault.externalVaultId) ?? null,
14415
+ writeAccess: vault.writeAccess ?? "unknown",
14416
+ operations: providerOperations(provider.capabilities(), vault)
14267
14417
  })
14268
14418
  )
14269
14419
  });
@@ -14282,33 +14432,38 @@ function registerVaultProviderRoutes(app, deps, options = {}) {
14282
14432
  const context = vaultContextFor(authorization, workspaceId);
14283
14433
  try {
14284
14434
  let provider;
14285
- if (payload.provider === "onepassword") {
14435
+ if (payload.provider !== "host") {
14286
14436
  if (!payload.connectionId) {
14287
- throw new HTTPException20(422, { message: "connectionId is required for 1Password" });
14437
+ throw new HTTPException20(422, {
14438
+ message: "connectionId is required for a connected provider"
14439
+ });
14288
14440
  }
14289
- ({ provider } = await onePasswordProviderForConnection(deps, {
14441
+ const resolved = await providerForConnection(deps, {
14290
14442
  workspaceId,
14291
14443
  connectionId: payload.connectionId,
14292
14444
  subjectId: authorization.grant.subjectId
14293
- }));
14445
+ });
14446
+ if (resolved.source !== payload.provider)
14447
+ throw new HTTPException20(422, { message: "Connection provider does not match" });
14448
+ provider = resolved.provider;
14294
14449
  } else {
14295
14450
  const host = deps.connectionCredentials?.vaultProvider;
14296
14451
  if (!host) {
14297
- throw new VaultProviderError(
14452
+ throw new VaultProviderError2(
14298
14453
  "provider_unavailable",
14299
14454
  "this deployment has no host vault provider"
14300
14455
  );
14301
14456
  }
14302
14457
  provider = host;
14303
14458
  }
14304
- const connectionId = payload.provider === "onepassword" ? payload.connectionId : null;
14459
+ const connectionId = payload.provider !== "host" ? payload.connectionId : null;
14305
14460
  const providerVault = findProviderVault(
14306
- await provider.listVaults(routeProviderContext(connectionId)),
14461
+ await listProviderVaults(provider, routeProviderContext(connectionId)),
14307
14462
  payload.externalVaultId
14308
14463
  );
14309
14464
  const row = await linkProviderVault(db, context, {
14310
14465
  ownerKind: payload.ownerKind,
14311
- name: payload.name ?? providerSecretName(providerVault.name, "1Password vault"),
14466
+ name: payload.name ?? providerSecretName(providerVault.name, "Connected vault"),
14312
14467
  source: payload.provider,
14313
14468
  providerConnectionId: connectionId,
14314
14469
  providerVaultRef: providerVault.externalVaultId,
@@ -14344,7 +14499,8 @@ function registerVaultProviderRoutes(app, deps, options = {}) {
14344
14499
  providers: vaultProviderRegistryFor(deps, {
14345
14500
  workspaceId,
14346
14501
  subjectId: authorization.grant.subjectId
14347
- })
14502
+ }),
14503
+ force: true
14348
14504
  });
14349
14505
  const rateLimitedUntil = result2.status === "skipped_rate_limited" || result2.status === "failed" && result2.rateLimitedUntil ? result2.rateLimitedUntil : null;
14350
14506
  if (rateLimitedUntil) {
@@ -14368,45 +14524,100 @@ function registerVaultProviderRoutes(app, deps, options = {}) {
14368
14524
  throw new HTTPException20(403, { message: "missing permission: account:admin" });
14369
14525
  }
14370
14526
  const context = vaultContextFor(authorization, workspaceId);
14527
+ let created;
14528
+ let linked;
14529
+ let sharingFailure;
14371
14530
  try {
14531
+ const { connection, metadata } = await requireOnePasswordConnection(
14532
+ deps,
14533
+ authorization,
14534
+ workspaceId,
14535
+ connectionId
14536
+ );
14537
+ const ownership = connection.subjectId !== null ? "user" : metadata.ownership;
14538
+ if (ownership !== payload.ownerKind || ownership === "user" && connection.subjectId !== authorization.grant.subjectId) {
14539
+ throw new VaultError(
14540
+ "vault_permission_denied",
14541
+ `A ${ownership} 1Password connection backs only ${ownership} vaults`,
14542
+ { connectionId, connectionOwnership: ownership, ownerKind: payload.ownerKind }
14543
+ );
14544
+ }
14545
+ const link = {
14546
+ ownerKind: payload.ownerKind,
14547
+ name: payload.name,
14548
+ source: "onepassword",
14549
+ providerConnectionId: connectionId,
14550
+ mode: "read_write",
14551
+ allowOrganization: isAccountAdmin(authorization)
14552
+ };
14553
+ await preflightProviderVaultLink(db, context, link);
14372
14554
  const { provider } = await onePasswordProviderForConnection(deps, {
14373
14555
  workspaceId,
14374
14556
  connectionId,
14375
14557
  subjectId: authorization.grant.subjectId
14376
14558
  });
14377
14559
  if (!provider.createVault || !provider.capabilities().createVault) {
14378
- throw new VaultProviderError(
14560
+ throw new VaultProviderError2(
14379
14561
  "provider_unavailable",
14380
14562
  "this 1Password connection cannot create vaults"
14381
14563
  );
14382
14564
  }
14383
- const created = await provider.createVault(routeProviderContext(connectionId), {
14384
- name: payload.name,
14385
- description: "Managed by Opengeni",
14386
- allowAdminsAccess: true,
14387
- ...payload.groupId ? { groupId: payload.groupId } : {}
14388
- });
14389
- const row = await linkProviderVault(db, context, {
14390
- ownerKind: payload.ownerKind,
14391
- name: payload.name,
14392
- source: "onepassword",
14393
- providerConnectionId: connectionId,
14394
- providerVaultRef: created.externalVaultId,
14395
- mode: "read_write",
14396
- allowOrganization: isAccountAdmin(authorization)
14565
+ const { OnePasswordVaultCreatedError } = await loadOnePasswordModule();
14566
+ try {
14567
+ created = await provider.createVault(routeProviderContext(connectionId), {
14568
+ name: payload.name,
14569
+ description: "Managed by Opengeni",
14570
+ allowAdminsAccess: true,
14571
+ ...payload.groupId ? { groupId: payload.groupId } : {}
14572
+ });
14573
+ } catch (error) {
14574
+ if (error instanceof OnePasswordVaultCreatedError) {
14575
+ created = error.createdVault;
14576
+ sharingFailure = error;
14577
+ } else if (isVaultProviderError(error)) {
14578
+ throw error;
14579
+ } else {
14580
+ throw new VaultProviderError2(
14581
+ "provider_outcome_unknown",
14582
+ "1Password did not confirm vault creation; it may have been applied. Check the connection's vault list before creating again."
14583
+ );
14584
+ }
14585
+ }
14586
+ linked = await linkProviderVault(db, context, {
14587
+ ...link,
14588
+ providerVaultRef: created.externalVaultId
14397
14589
  });
14398
14590
  await syncLinkedProviderVault({
14399
14591
  db,
14400
14592
  context,
14401
- vaultId: row.id,
14593
+ vaultId: linked.id,
14402
14594
  providers: vaultProviderRegistryFor(deps, {
14403
14595
  workspaceId,
14404
14596
  subjectId: authorization.grant.subjectId
14405
14597
  }),
14406
14598
  force: true
14407
14599
  });
14408
- return c.json(await vaultSummaryFor(deps, authorization, workspaceId, row.id), 201);
14600
+ if (sharingFailure) throw sharingFailure;
14601
+ return c.json(await vaultSummaryFor(deps, authorization, workspaceId, linked.id), 201);
14409
14602
  } catch (error) {
14603
+ if (created) {
14604
+ const local = isVaultError(error) ? error : vaultErrorFromDatabase(error);
14605
+ const code = local?.code ?? (isVaultProviderError(error) ? vaultErrorCodeForProvider(error.code, "write") : "provider_unavailable");
14606
+ const message = linked ? sharingFailure ? "The vault was created and linked, but its group access could not be confirmed. Check sharing in 1Password. Do not create it again." : "The vault was created and linked, but its refresh could not be confirmed. Refresh the linked vault. Do not create it again." : "The vault was created in 1Password, but its local link could not be confirmed. Use Link on the existing provider vault after resolving the local refusal. Do not create it again.";
14607
+ return vaultRouteError(
14608
+ c,
14609
+ new VaultError(code, message, {
14610
+ created: true,
14611
+ // A lost DB acknowledgement is not proof that the link rolled back.
14612
+ linked: linked ? true : local ? false : null,
14613
+ connectionId,
14614
+ externalVaultId: created.externalVaultId,
14615
+ ...linked ? { vaultId: linked.id } : {},
14616
+ ...sharingFailure ? { groupGrantConfirmed: false } : {}
14617
+ }),
14618
+ true
14619
+ );
14620
+ }
14410
14621
  return vaultRouteError(c, error, true);
14411
14622
  }
14412
14623
  });
@@ -14472,7 +14683,7 @@ function registerVaultProviderRoutes(app, deps, options = {}) {
14472
14683
  planTier,
14473
14684
  allowFakeTokens: settings.onePasswordFakeTokens
14474
14685
  });
14475
- vaults = await provider.listVaults(routeProviderContext(connectionId));
14686
+ vaults = await listProviderVaults(provider, routeProviderContext(connectionId));
14476
14687
  } catch (error) {
14477
14688
  return providerErrorResponse(c, error);
14478
14689
  }
@@ -14578,10 +14789,515 @@ function registerVaultProviderRoutes(app, deps, options = {}) {
14578
14789
  }
14579
14790
  return c.json(DisconnectOnePasswordResponse.parse({ unlinkedVaultIds }));
14580
14791
  });
14792
+ app.get("/v1/workspaces/:workspaceId/vault-providers/connections", async (c) => {
14793
+ const workspaceId = c.req.param("workspaceId");
14794
+ const authorization = await requireAccessGrantAuthorization4(
14795
+ c,
14796
+ deps,
14797
+ workspaceId,
14798
+ "secrets:list"
14799
+ );
14800
+ const factories = externalVaultFactoriesFor(deps);
14801
+ const rows3 = await listConnectionsMetadata(db, workspaceId, authorization.grant.subjectId);
14802
+ const connections = rows3.filter((row) => row.status !== "revoked").flatMap((row) => {
14803
+ if (isOnePasswordConnection(row)) {
14804
+ return [
14805
+ {
14806
+ ...onePasswordConnectionSummary(authorization, row),
14807
+ provider: "onepassword",
14808
+ // The published legacy 1Password port has no granular override.
14809
+ operations: providerOperations({
14810
+ write: true,
14811
+ createVault: true,
14812
+ totp: true,
14813
+ files: false,
14814
+ groupGrants: true,
14815
+ passkeys: false
14816
+ }),
14817
+ available: deps.onePasswordVaultProvider !== null
14818
+ }
14819
+ ];
14820
+ }
14821
+ if (!isExternalVaultConnection(row)) return [];
14822
+ const details = externalVaultConnectionDetails(row.metadata);
14823
+ return [
14824
+ {
14825
+ id: row.id,
14826
+ provider: details.provider,
14827
+ ownership: details.ownership,
14828
+ accountName: details.accountName,
14829
+ label: details.label,
14830
+ verifiedAt: details.verifiedAt,
14831
+ createdAt: row.createdAt,
14832
+ createdBySubjectId: row.createdBySubjectId,
14833
+ canManage: canManageExternal(authorization, row, details),
14834
+ operations: details.operations,
14835
+ available: Boolean(factories[details.provider]),
14836
+ verificationStatus: details.verificationStatus ?? "ready"
14837
+ }
14838
+ ];
14839
+ });
14840
+ const providers = ["onepassword", "external", "protonpass", "keeper", "bitwarden"].map((provider) => {
14841
+ const available = provider === "onepassword" ? deps.onePasswordVaultProvider !== null : Boolean(factories[provider]);
14842
+ return { provider, available, reason: available ? null : "not_enabled" };
14843
+ });
14844
+ return c.json(ListVaultProviderConnectionsResponse.parse({ connections, providers }));
14845
+ });
14846
+ app.post("/v1/workspaces/:workspaceId/vault-providers/connections", async (c) => {
14847
+ const workspaceId = c.req.param("workspaceId");
14848
+ const authorization = await requireSetupAuthority(c, workspaceId);
14849
+ const { grant } = authorization;
14850
+ const payload = await parseRequestJson(c, InstallVaultProviderRequest);
14851
+ requireOwnership(authorization, payload.ownership);
14852
+ const key2 = requireEnvironmentEncryption3(settings);
14853
+ if (!externalVaultFactoriesFor(deps)[payload.credentials.provider]) {
14854
+ return vaultRouteError(
14855
+ c,
14856
+ new VaultProviderError2(
14857
+ "provider_unavailable",
14858
+ "This vault provider is not available in this deployment."
14859
+ )
14860
+ );
14861
+ }
14862
+ const details = {
14863
+ version: 1,
14864
+ provider: payload.credentials.provider,
14865
+ ownership: payload.ownership,
14866
+ accountId: null,
14867
+ accountName: null,
14868
+ label: payload.label ?? null,
14869
+ verifiedAt: (/* @__PURE__ */ new Date()).toISOString(),
14870
+ verificationStatus: "pending",
14871
+ operations: providerOperations({
14872
+ write: false,
14873
+ createVault: false,
14874
+ totp: false,
14875
+ files: false,
14876
+ groupGrants: false,
14877
+ passkeys: false
14878
+ })
14879
+ };
14880
+ const continuation = externalActorContinuationForAuthorization4(authorization);
14881
+ const connection = await db.transaction(async (tx) => {
14882
+ await requireConnectOwnerAuthority(tx, {
14883
+ accountId: grant.accountId,
14884
+ workspaceId,
14885
+ subjectId: grant.subjectId,
14886
+ personalOwnerVerified: isPersonalConnectionOwnerPrincipal(authorization),
14887
+ ...continuation ? { externalContinuation: continuation } : {}
14888
+ });
14889
+ return createConnection(tx, {
14890
+ accountId: grant.accountId,
14891
+ workspaceId,
14892
+ subjectId: payload.ownership === "user" ? grant.subjectId : null,
14893
+ providerDomain: externalVaultProviderDomain(details.provider),
14894
+ kind: "api_key",
14895
+ status: "needs_reauth",
14896
+ credentialEncrypted: encryptEnvironmentValue2(key2, "{}"),
14897
+ grantedScopes: [],
14898
+ expiresAt: null,
14899
+ metadata: externalVaultConnectionMetadata(details),
14900
+ createdBySubjectId: grant.subjectId
14901
+ });
14902
+ });
14903
+ try {
14904
+ const result2 = await finishExternalSetup({
14905
+ authorization,
14906
+ workspaceId,
14907
+ connection,
14908
+ credentials: payload.credentials,
14909
+ currentCredentials: null,
14910
+ isNew: true
14911
+ });
14912
+ return c.json(result2.body, result2.status);
14913
+ } catch (error) {
14914
+ return vaultRouteError(c, error);
14915
+ }
14916
+ });
14917
+ app.put(
14918
+ "/v1/workspaces/:workspaceId/vault-providers/connections/:connectionId/credentials",
14919
+ async (c) => {
14920
+ const workspaceId = c.req.param("workspaceId");
14921
+ const connectionId = c.req.param("connectionId");
14922
+ const authorization = await requireSetupAuthority(c, workspaceId);
14923
+ const { grant } = authorization;
14924
+ const connection = await getConnectionMetadata(
14925
+ db,
14926
+ workspaceId,
14927
+ connectionId,
14928
+ grant.subjectId
14929
+ );
14930
+ if (!connection || !isExternalVaultConnection(connection) || connection.status === "revoked") {
14931
+ throw new HTTPException20(404, { message: "Vault connection not found" });
14932
+ }
14933
+ const details = externalVaultConnectionDetails(connection.metadata);
14934
+ if (!canManageExternal(authorization, connection, details))
14935
+ throw new HTTPException20(403, { message: "You cannot change this vault connection" });
14936
+ requireOwnership(authorization, details.ownership);
14937
+ const payload = await parseRequestJson(c, ReplaceVaultProviderCredentialsRequest);
14938
+ if (payload.credentials.provider !== details.provider)
14939
+ throw new HTTPException20(422, { message: "Connection provider does not match" });
14940
+ try {
14941
+ const loaded = await loadExternalVaultConnection(db, settings, {
14942
+ workspaceId,
14943
+ connectionId,
14944
+ subjectId: grant.subjectId,
14945
+ provider: details.provider,
14946
+ allowPendingVerification: true
14947
+ });
14948
+ const result2 = await finishExternalSetup({
14949
+ authorization,
14950
+ workspaceId,
14951
+ connection: loaded.connection,
14952
+ credentials: payload.credentials,
14953
+ currentCredentials: loaded.currentCredentials,
14954
+ pendingCredentials: loaded.pendingCredentials,
14955
+ isNew: false
14956
+ });
14957
+ return c.json(result2.body, result2.status);
14958
+ } catch (error) {
14959
+ return vaultRouteError(c, error);
14960
+ }
14961
+ }
14962
+ );
14963
+ app.post(
14964
+ "/v1/workspaces/:workspaceId/vault-providers/connections/:connectionId/verify",
14965
+ async (c) => {
14966
+ const workspaceId = c.req.param("workspaceId");
14967
+ const connectionId = c.req.param("connectionId");
14968
+ const authorization = await requireSetupAuthority(c, workspaceId);
14969
+ const connection = await getConnectionMetadata(
14970
+ db,
14971
+ workspaceId,
14972
+ connectionId,
14973
+ authorization.grant.subjectId
14974
+ );
14975
+ if (!connection || !isExternalVaultConnection(connection) || connection.status === "revoked")
14976
+ throw new HTTPException20(404, { message: "Vault connection not found" });
14977
+ const details = externalVaultConnectionDetails(connection.metadata);
14978
+ if (!canManageExternal(authorization, connection, details))
14979
+ throw new HTTPException20(403, { message: "You cannot verify this vault connection" });
14980
+ requireOwnership(authorization, details.ownership);
14981
+ try {
14982
+ const loaded = await loadExternalVaultConnection(db, settings, {
14983
+ workspaceId,
14984
+ connectionId,
14985
+ subjectId: authorization.grant.subjectId,
14986
+ provider: details.provider,
14987
+ allowPendingVerification: true
14988
+ });
14989
+ const result2 = await finishExternalSetup({
14990
+ authorization,
14991
+ workspaceId,
14992
+ connection: loaded.connection,
14993
+ credentials: loaded.credentials,
14994
+ currentCredentials: loaded.currentCredentials,
14995
+ pendingCredentials: loaded.pendingCredentials,
14996
+ isNew: false
14997
+ });
14998
+ return c.json(result2.body, result2.status);
14999
+ } catch (error) {
15000
+ return vaultRouteError(c, error);
15001
+ }
15002
+ }
15003
+ );
15004
+ app.delete("/v1/workspaces/:workspaceId/vault-providers/connections/:connectionId", async (c) => {
15005
+ const workspaceId = c.req.param("workspaceId");
15006
+ const connectionId = c.req.param("connectionId");
15007
+ const authorization = await requireSetupAuthority(c, workspaceId);
15008
+ const { grant } = authorization;
15009
+ const connection = await getConnectionMetadata(db, workspaceId, connectionId, grant.subjectId);
15010
+ if (!connection || connection.status === "revoked")
15011
+ throw new HTTPException20(404, { message: "Vault connection not found" });
15012
+ if (isOnePasswordConnection(connection)) {
15013
+ requireManageOnePasswordConnection(
15014
+ authorization,
15015
+ connection,
15016
+ onePasswordConnectionMetadata(connection.metadata)
15017
+ );
15018
+ } else {
15019
+ const details = externalVaultConnectionDetails(connection.metadata);
15020
+ if (!details || !isExternalVaultConnection(connection))
15021
+ throw new HTTPException20(404, { message: "Vault connection not found" });
15022
+ if (!canManageExternal(authorization, connection, details))
15023
+ throw new HTTPException20(403, { message: "You cannot disconnect this vault connection" });
15024
+ }
15025
+ try {
15026
+ const unlinkedVaultIds = await db.transaction(async (tx) => {
15027
+ const context = vaultContextFor(authorization, workspaceId);
15028
+ const rows3 = await listVaultsForSubject(tx, context, { workspaceId });
15029
+ const unlinked = [];
15030
+ for (const row of rows3.filter(
15031
+ (candidate) => candidate.providerConnectionId === connectionId
15032
+ )) {
15033
+ await deleteVault(tx, context, {
15034
+ vaultId: row.id,
15035
+ confirmName: row.name,
15036
+ allowOrganization: isAccountAdmin(authorization)
15037
+ });
15038
+ unlinked.push(row.id);
15039
+ }
15040
+ const revoked = await revokeConnection(
15041
+ tx,
15042
+ workspaceId,
15043
+ connectionId,
15044
+ grant.subjectId,
15045
+ connection.version
15046
+ );
15047
+ if (!revoked)
15048
+ throw new HTTPException20(409, {
15049
+ message: "This vault connection changed. Reload it before disconnecting."
15050
+ });
15051
+ return unlinked;
15052
+ });
15053
+ return c.json(DisconnectVaultProviderResponse.parse({ unlinkedVaultIds }));
15054
+ } catch (error) {
15055
+ return vaultRouteError(c, error);
15056
+ }
15057
+ });
15058
+ async function requireSetupAuthority(c, workspaceId) {
15059
+ const authorization = await requireAccessGrantAuthorization4(
15060
+ c,
15061
+ deps,
15062
+ workspaceId,
15063
+ "connections:write"
15064
+ );
15065
+ requirePermission2(authorization.grant, "secrets:write");
15066
+ return authorization;
15067
+ }
15068
+ function requireOwnership(authorization, ownership) {
15069
+ if (ownership === "organization" && !isAccountAdmin(authorization))
15070
+ throw new HTTPException20(403, { message: "missing permission: account:admin" });
15071
+ if (ownership === "user" && !isPersonalConnectionOwnerPrincipal(authorization))
15072
+ throw new HTTPException20(403, {
15073
+ message: "Only a signed-in person can manage a personal vault connection"
15074
+ });
15075
+ }
15076
+ function canManageExternal(authorization, connection, details) {
15077
+ const grant = authorization.grant;
15078
+ return hasPermission6(grant.permissions, "connections:write", grant.permissionMode) && hasPermission6(grant.permissions, "secrets:write", grant.permissionMode) && (connection.subjectId !== null ? connection.subjectId === grant.subjectId && isPersonalConnectionOwnerPrincipal(authorization) : details.ownership !== "organization" || isAccountAdmin(authorization));
15079
+ }
15080
+ function catalogVault(provider, vault, linkedVaultId) {
15081
+ return {
15082
+ externalVaultId: vault.externalVaultId,
15083
+ name: vault.name,
15084
+ itemCount: vault.itemCount,
15085
+ linkedVaultId,
15086
+ writeAccess: vault.writeAccess ?? "unknown",
15087
+ operations: providerOperations(provider.capabilities(), vault)
15088
+ };
15089
+ }
15090
+ async function finishExternalSetup(input) {
15091
+ const { authorization, workspaceId } = input;
15092
+ const { grant } = authorization;
15093
+ const key2 = requireEnvironmentEncryption3(settings);
15094
+ const details = externalVaultConnectionDetails(input.connection.metadata);
15095
+ const context = vaultContextFor(authorization, workspaceId);
15096
+ const linked = await linkedVaultRows(context, workspaceId, input.connection.id);
15097
+ let connection = input.connection;
15098
+ let saved = false;
15099
+ let hasPending = Boolean(input.pendingCredentials);
15100
+ let rejectedAccount;
15101
+ let storedBundle = input.pendingCredentials ? pendingVaultCredentialBundle(input.currentCredentials, input.pendingCredentials) : input.currentCredentials ?? {};
15102
+ const continuation = externalActorContinuationForAuthorization4(authorization);
15103
+ const persist = async (credentials, ready) => {
15104
+ const unchangedCurrent = input.currentCredentials !== null && isDeepStrictEqual(credentials, input.currentCredentials);
15105
+ const pending2 = !ready && !unchangedCurrent;
15106
+ const nextMetadata = ready ?? {
15107
+ ...details,
15108
+ verificationStatus: pending2 ? "pending" : "ready"
15109
+ };
15110
+ const nextBundle = pending2 ? pendingVaultCredentialBundle(input.currentCredentials, credentials) : credentials;
15111
+ const nextStatus = pending2 ? connection.status : "active";
15112
+ const previousDetails = externalVaultConnectionDetails(connection.metadata);
15113
+ const generationChanged = !isDeepStrictEqual(nextBundle, storedBundle) || nextStatus !== connection.status || !isDeepStrictEqual(previousDetails?.operations, nextMetadata.operations);
15114
+ if (!generationChanged && isDeepStrictEqual(previousDetails, nextMetadata)) {
15115
+ saved = true;
15116
+ hasPending = pending2;
15117
+ return;
15118
+ }
15119
+ const updated = await db.transaction(async (tx) => {
15120
+ await requireConnectOwnerAuthority(tx, {
15121
+ accountId: grant.accountId,
15122
+ workspaceId,
15123
+ subjectId: grant.subjectId,
15124
+ personalOwnerVerified: isPersonalConnectionOwnerPrincipal(authorization),
15125
+ ...continuation ? { externalContinuation: continuation } : {}
15126
+ });
15127
+ return updateConnection(tx, {
15128
+ workspaceId,
15129
+ connectionId: connection.id,
15130
+ visibleToSubjectId: grant.subjectId,
15131
+ expectedVersion: connection.version,
15132
+ status: nextStatus,
15133
+ ...generationChanged ? { credentialEncrypted: encryptEnvironmentValue2(key2, JSON.stringify(nextBundle)) } : {},
15134
+ metadata: { ...connection.metadata, ...externalVaultConnectionMetadata(nextMetadata) },
15135
+ updatedBySubjectId: grant.subjectId
15136
+ });
15137
+ });
15138
+ if (!updated)
15139
+ throw new HTTPException20(409, {
15140
+ message: "This vault connection changed. Reload it before continuing setup."
15141
+ });
15142
+ connection = updated;
15143
+ saved = true;
15144
+ hasPending = pending2;
15145
+ storedBundle = nextBundle;
15146
+ };
15147
+ try {
15148
+ const checked = await prepareExternal(
15149
+ input.credentials,
15150
+ authorization,
15151
+ workspaceId,
15152
+ connection.id,
15153
+ persist
15154
+ );
15155
+ const sameAccount = details.accountId !== null ? checked.accountId === details.accountId : linked.length === 0 || linked.every(
15156
+ (row) => checked.vaults.some((vault) => vault.externalVaultId === row.providerVaultRef)
15157
+ );
15158
+ if (!sameAccount) {
15159
+ rejectedAccount = new VaultProviderError2(
15160
+ "provider_conflict",
15161
+ "These credentials do not reach the same account and linked vaults. Connect them separately instead."
15162
+ );
15163
+ throw rejectedAccount;
15164
+ }
15165
+ const ready = {
15166
+ ...details,
15167
+ accountId: checked.accountId ?? details.accountId,
15168
+ accountName: checked.accountName,
15169
+ operations: checked.operations,
15170
+ verifiedAt: (/* @__PURE__ */ new Date()).toISOString(),
15171
+ verificationStatus: "ready"
15172
+ };
15173
+ await persist(checked.credentials, ready);
15174
+ const providers = vaultProviderRegistryFor(deps, { workspaceId, subjectId: grant.subjectId });
15175
+ for (const row of linked) {
15176
+ await syncLinkedProviderVault({
15177
+ db,
15178
+ context,
15179
+ vaultId: row.id,
15180
+ providers,
15181
+ force: true
15182
+ }).catch(() => void 0);
15183
+ }
15184
+ const linkedIds = new Map(linked.map((row) => [row.providerVaultRef, row.id]));
15185
+ return {
15186
+ status: input.isNew ? 201 : 200,
15187
+ body: InstallVaultProviderResponse.parse({
15188
+ connectionId: connection.id,
15189
+ provider: details.provider,
15190
+ accountName: ready.accountName,
15191
+ operations: ready.operations,
15192
+ vaults: checked.vaults.map(
15193
+ (vault) => catalogVault(checked.provider, vault, linkedIds.get(vault.externalVaultId) ?? null)
15194
+ )
15195
+ })
15196
+ };
15197
+ } catch (error) {
15198
+ if (rejectedAccount && error === rejectedAccount && hasPending) {
15199
+ if (input.currentCredentials) {
15200
+ await persist(input.currentCredentials, { ...details, verificationStatus: "ready" });
15201
+ } else {
15202
+ await revokeConnection(
15203
+ db,
15204
+ workspaceId,
15205
+ connection.id,
15206
+ grant.subjectId,
15207
+ connection.version
15208
+ );
15209
+ }
15210
+ throw error;
15211
+ }
15212
+ if (saved && hasPending && isVaultProviderError(error)) {
15213
+ return {
15214
+ status: 202,
15215
+ body: InstallVaultProviderResponse.parse({
15216
+ connectionId: connection.id,
15217
+ provider: details.provider,
15218
+ accountName: details.accountName,
15219
+ operations: details.operations,
15220
+ vaults: [],
15221
+ discoveryPending: true,
15222
+ errorCode: error.code
15223
+ })
15224
+ };
15225
+ }
15226
+ if (!saved && input.isNew) {
15227
+ await revokeConnection(db, workspaceId, connection.id, grant.subjectId, connection.version);
15228
+ }
15229
+ throw error;
15230
+ }
15231
+ }
15232
+ async function prepareExternal(credentials, authorization, workspaceId, connectionId, persistCredentials) {
15233
+ const factory = externalVaultFactoriesFor(deps)[credentials.provider];
15234
+ if (!factory)
15235
+ throw new VaultProviderError2(
15236
+ "provider_unavailable",
15237
+ "This vault provider is not available in this deployment."
15238
+ );
15239
+ let rotated;
15240
+ const signal = AbortSignal.timeout(3e4);
15241
+ const prepared = await factory({
15242
+ credentials,
15243
+ ...connectionId ? { connectionId } : {},
15244
+ signal,
15245
+ persistCredentials: async (next) => {
15246
+ const parsed = StoredVaultProviderCredentials.safeParse(next);
15247
+ if (!parsed.success || parsed.data.provider !== credentials.provider)
15248
+ throw new VaultProviderError2(
15249
+ "provider_unavailable",
15250
+ "The provider returned invalid connection state."
15251
+ );
15252
+ rotated = parsed.data;
15253
+ await persistCredentials(parsed.data);
15254
+ }
15255
+ });
15256
+ if (prepared.provider.id !== credentials.provider)
15257
+ throw new VaultProviderError2(
15258
+ "provider_unavailable",
15259
+ "The configured adapter does not match this connection."
15260
+ );
15261
+ const preparedCredentials = StoredVaultProviderCredentials.safeParse(prepared.credentials);
15262
+ if (!preparedCredentials.success || preparedCredentials.data.provider !== credentials.provider)
15263
+ throw new VaultProviderError2(
15264
+ "provider_unavailable",
15265
+ "The provider returned invalid connection state."
15266
+ );
15267
+ if (!rotated) await persistCredentials(preparedCredentials.data);
15268
+ const ctx = {
15269
+ connectionId,
15270
+ budget: createProviderCallBudget(50),
15271
+ signal,
15272
+ forceRefresh: true,
15273
+ authority: {
15274
+ accountId: authorization.grant.accountId,
15275
+ workspaceId,
15276
+ connectionWorkspaceId: workspaceId,
15277
+ subjectId: authorization.grant.subjectId
15278
+ }
15279
+ };
15280
+ const validated = await prepared.provider.validate(ctx);
15281
+ const vaults = await listProviderVaults(prepared.provider, ctx);
15282
+ const stored = StoredVaultProviderCredentials.safeParse(rotated ?? prepared.credentials);
15283
+ if (!stored.success || stored.data.provider !== credentials.provider)
15284
+ throw new VaultProviderError2(
15285
+ "provider_unavailable",
15286
+ "The provider returned invalid connection state."
15287
+ );
15288
+ return {
15289
+ provider: prepared.provider,
15290
+ credentials: stored.data,
15291
+ vaults,
15292
+ accountId: validated.accountId ?? null,
15293
+ accountName: validated.accountName,
15294
+ operations: providerOperations(prepared.provider.capabilities())
15295
+ };
15296
+ }
14581
15297
  async function linkedVaultRows(context, workspaceId, connectionId) {
14582
15298
  const rows3 = await listVaultsForSubject(db, context, { workspaceId });
14583
15299
  return rows3.filter(
14584
- (row) => row.source === "onepassword" && row.providerConnectionId === connectionId && row.providerVaultRef !== null
15300
+ (row) => row.source !== "opengeni" && row.providerConnectionId === connectionId && row.providerVaultRef !== null
14585
15301
  );
14586
15302
  }
14587
15303
  }
@@ -15017,12 +15733,12 @@ import {
15017
15733
  } from "@opengeni/contracts";
15018
15734
  import {
15019
15735
  encryptEnvironmentValue as encryptEnvironmentValue3,
15020
- VaultError
15736
+ VaultError as VaultError2
15021
15737
  } from "@opengeni/db";
15022
15738
  function encrypted(key2, plaintext) {
15023
15739
  const valueSize = Buffer.byteLength(plaintext, "utf8");
15024
15740
  if (valueSize > VAULT_LIMITS.textValueMaxBytes) {
15025
- throw new VaultError(
15741
+ throw new VaultError2(
15026
15742
  "secret_value_too_large",
15027
15743
  `the value is larger than ${VAULT_LIMITS.textValueMaxBytes} bytes`,
15028
15744
  { limit: VAULT_LIMITS.textValueMaxBytes }
@@ -15039,7 +15755,7 @@ function prepareSecretAnswers(settings, answers, source) {
15039
15755
  }
15040
15756
  const key2 = environmentsEncryptionKeyBytes3(settings);
15041
15757
  if (!key2) {
15042
- throw new VaultError(
15758
+ throw new VaultError2(
15043
15759
  "encryption_key_missing",
15044
15760
  "vaults require OPENGENI_ENVIRONMENTS_ENCRYPTION_KEY"
15045
15761
  );
@@ -17934,7 +18650,7 @@ async function projectWorkspaceArtifactMutationProvenance(response, canReadSessi
17934
18650
  }
17935
18651
 
17936
18652
  // src/integrations/social-api.ts
17937
- import { OAUTH_MAX_RESPONSE_BYTES as OAUTH_MAX_RESPONSE_BYTES4, pinnedFetch as pinnedFetch3, readResponseJsonBounded as readResponseJsonBounded3 } from "@opengeni/network";
18653
+ import { OAUTH_MAX_RESPONSE_BYTES as OAUTH_MAX_RESPONSE_BYTES4, pinnedFetch as pinnedFetch4, readResponseJsonBounded as readResponseJsonBounded3 } from "@opengeni/network";
17938
18654
 
17939
18655
  // src/integrations/social-oauth.ts
17940
18656
  import { withOrganizationIntegrationAcquisition as withOrganizationIntegrationAcquisition2 } from "@opengeni/db/organization-integration-policy";
@@ -18002,7 +18718,7 @@ import {
18002
18718
  RequestDeadlineError,
18003
18719
  isLocalTestEnvironment,
18004
18720
  parseMcpOAuthChallenge,
18005
- pinnedFetch,
18721
+ pinnedFetch as pinnedFetch2,
18006
18722
  readResponseJsonBounded,
18007
18723
  resolveMcpOAuthDiscovery,
18008
18724
  validateHttpUrl
@@ -20425,7 +21141,7 @@ async function fetchOAuth(rawUrl, settings, init = {}, hop = 0) {
20425
21141
  let response;
20426
21142
  try {
20427
21143
  const endpoint = oauthEndpointUrl(rawUrl, settings, "OAuth endpoint");
20428
- response = await pinnedFetch(endpoint, init, settings, {
21144
+ response = await pinnedFetch2(endpoint, init, settings, {
20429
21145
  label: "OAuth discovery",
20430
21146
  requireHttpsOutsideLocalTest: true
20431
21147
  });
@@ -20572,7 +21288,7 @@ import {
20572
21288
  getConnectAttempt as getConnectAttempt2
20573
21289
  } from "@opengeni/db";
20574
21290
  import { createSignedState as createSignedState3, readSignedState as readSignedState3 } from "@opengeni/github";
20575
- import { OAUTH_MAX_RESPONSE_BYTES as OAUTH_MAX_RESPONSE_BYTES3, pinnedFetch as pinnedFetch2, readResponseJsonBounded as readResponseJsonBounded2 } from "@opengeni/network";
21291
+ import { OAUTH_MAX_RESPONSE_BYTES as OAUTH_MAX_RESPONSE_BYTES3, pinnedFetch as pinnedFetch3, readResponseJsonBounded as readResponseJsonBounded2 } from "@opengeni/network";
20576
21292
  import { Buffer as Buffer3 } from "buffer";
20577
21293
  import { createHash as createHash8, randomBytes as randomBytes4 } from "crypto";
20578
21294
  import { HTTPException as HTTPException28 } from "hono/http-exception";
@@ -20613,7 +21329,7 @@ function socialProviderFetch(deps, url, init, label) {
20613
21329
  if (deps.providerFetch) {
20614
21330
  return deps.providerFetch(url, init, label);
20615
21331
  }
20616
- return pinnedFetch2(url, init, deps.settings, {
21332
+ return pinnedFetch3(url, init, deps.settings, {
20617
21333
  label,
20618
21334
  requireHttpsOutsideLocalTest: true
20619
21335
  });
@@ -21460,7 +22176,7 @@ function socialApiHeaders(bundle) {
21460
22176
  async function socialApiRequest(deps, ref, bundle, url, init) {
21461
22177
  const requestInit = { ...init, signal: AbortSignal.timeout(SOCIAL_TIMEOUT_MS) };
21462
22178
  const label = `social ${bundle.provider} API`;
21463
- const response = deps.providerFetch ? await deps.providerFetch(url.toString(), requestInit, label) : await pinnedFetch3(url.toString(), requestInit, deps.settings, {
22179
+ const response = deps.providerFetch ? await deps.providerFetch(url.toString(), requestInit, label) : await pinnedFetch4(url.toString(), requestInit, deps.settings, {
21464
22180
  label,
21465
22181
  requireHttpsOutsideLocalTest: true
21466
22182
  });
@@ -34305,7 +35021,10 @@ var ACTION_CATALOG = [
34305
35021
  "request": [],
34306
35022
  "response": [
34307
35023
  "DisconnectOnePasswordResponse",
35024
+ "DisconnectVaultProviderResponse",
34308
35025
  "InstallOnePasswordResponse",
35026
+ "InstallVaultProviderResponse",
35027
+ "ListVaultProviderConnectionsResponse",
34309
35028
  "OnePasswordConnectionSummary",
34310
35029
  "ProviderVaultMeta",
34311
35030
  "RevealVaultFieldResponse",
@@ -34313,6 +35032,7 @@ var ACTION_CATALOG = [
34313
35032
  "VaultFieldVersionMeta",
34314
35033
  "VaultItem",
34315
35034
  "VaultItemSummary",
35035
+ "VaultProviderConnectionSummary",
34316
35036
  "VaultSummary"
34317
35037
  ]
34318
35038
  },
@@ -34330,6 +35050,28 @@ var ACTION_CATALOG = [
34330
35050
  "request": [],
34331
35051
  "response": []
34332
35052
  },
35053
+ {
35054
+ "id": "DELETE /v1/workspaces/:workspaceId/vault-providers/connections/:connectionId",
35055
+ "method": "DELETE",
35056
+ "path": "/v1/workspaces/:workspaceId/vault-providers/connections/:connectionId",
35057
+ "request": [],
35058
+ "response": [
35059
+ "DisconnectOnePasswordResponse",
35060
+ "DisconnectVaultProviderResponse",
35061
+ "InstallOnePasswordResponse",
35062
+ "InstallVaultProviderResponse",
35063
+ "ListVaultProviderConnectionsResponse",
35064
+ "OnePasswordConnectionSummary",
35065
+ "ProviderVaultMeta",
35066
+ "RevealVaultFieldResponse",
35067
+ "SessionSecretsView",
35068
+ "VaultFieldVersionMeta",
35069
+ "VaultItem",
35070
+ "VaultItemSummary",
35071
+ "VaultProviderConnectionSummary",
35072
+ "VaultSummary"
35073
+ ]
35074
+ },
34333
35075
  {
34334
35076
  "id": "DELETE /v1/workspaces/:workspaceId/vaults/:vaultId",
34335
35077
  "method": "DELETE",
@@ -34337,7 +35079,10 @@ var ACTION_CATALOG = [
34337
35079
  "request": [],
34338
35080
  "response": [
34339
35081
  "DisconnectOnePasswordResponse",
35082
+ "DisconnectVaultProviderResponse",
34340
35083
  "InstallOnePasswordResponse",
35084
+ "InstallVaultProviderResponse",
35085
+ "ListVaultProviderConnectionsResponse",
34341
35086
  "OnePasswordConnectionSummary",
34342
35087
  "ProviderVaultMeta",
34343
35088
  "RevealVaultFieldResponse",
@@ -34345,6 +35090,7 @@ var ACTION_CATALOG = [
34345
35090
  "VaultFieldVersionMeta",
34346
35091
  "VaultItem",
34347
35092
  "VaultItemSummary",
35093
+ "VaultProviderConnectionSummary",
34348
35094
  "VaultSummary"
34349
35095
  ]
34350
35096
  },
@@ -34535,7 +35281,10 @@ var ACTION_CATALOG = [
34535
35281
  "request": [],
34536
35282
  "response": [
34537
35283
  "DisconnectOnePasswordResponse",
35284
+ "DisconnectVaultProviderResponse",
34538
35285
  "InstallOnePasswordResponse",
35286
+ "InstallVaultProviderResponse",
35287
+ "ListVaultProviderConnectionsResponse",
34539
35288
  "OnePasswordConnectionSummary",
34540
35289
  "ProviderVaultMeta",
34541
35290
  "RevealVaultFieldResponse",
@@ -34543,6 +35292,7 @@ var ACTION_CATALOG = [
34543
35292
  "VaultFieldVersionMeta",
34544
35293
  "VaultItem",
34545
35294
  "VaultItemSummary",
35295
+ "VaultProviderConnectionSummary",
34546
35296
  "VaultSummary"
34547
35297
  ]
34548
35298
  },
@@ -34834,8 +35584,11 @@ var ACTION_CATALOG = [
34834
35584
  ],
34835
35585
  "response": [
34836
35586
  "DisconnectOnePasswordResponse",
35587
+ "DisconnectVaultProviderResponse",
34837
35588
  "EnsureWorkspaceResponse",
34838
35589
  "InstallOnePasswordResponse",
35590
+ "InstallVaultProviderResponse",
35591
+ "ListVaultProviderConnectionsResponse",
34839
35592
  "OnePasswordConnectionSummary",
34840
35593
  "ProviderVaultMeta",
34841
35594
  "RevealVaultFieldResponse",
@@ -34843,6 +35596,7 @@ var ACTION_CATALOG = [
34843
35596
  "VaultFieldVersionMeta",
34844
35597
  "VaultItem",
34845
35598
  "VaultItemSummary",
35599
+ "VaultProviderConnectionSummary",
34846
35600
  "VaultSummary"
34847
35601
  ]
34848
35602
  },
@@ -35098,7 +35852,10 @@ var ACTION_CATALOG = [
35098
35852
  "request": [],
35099
35853
  "response": [
35100
35854
  "DisconnectOnePasswordResponse",
35855
+ "DisconnectVaultProviderResponse",
35101
35856
  "InstallOnePasswordResponse",
35857
+ "InstallVaultProviderResponse",
35858
+ "ListVaultProviderConnectionsResponse",
35102
35859
  "OnePasswordConnectionSummary",
35103
35860
  "ProviderVaultMeta",
35104
35861
  "RevealVaultFieldResponse",
@@ -35106,6 +35863,7 @@ var ACTION_CATALOG = [
35106
35863
  "VaultFieldVersionMeta",
35107
35864
  "VaultItem",
35108
35865
  "VaultItemSummary",
35866
+ "VaultProviderConnectionSummary",
35109
35867
  "VaultSummary"
35110
35868
  ]
35111
35869
  },
@@ -35116,7 +35874,10 @@ var ACTION_CATALOG = [
35116
35874
  "request": [],
35117
35875
  "response": [
35118
35876
  "DisconnectOnePasswordResponse",
35877
+ "DisconnectVaultProviderResponse",
35119
35878
  "InstallOnePasswordResponse",
35879
+ "InstallVaultProviderResponse",
35880
+ "ListVaultProviderConnectionsResponse",
35120
35881
  "OnePasswordConnectionSummary",
35121
35882
  "ProviderVaultMeta",
35122
35883
  "RevealVaultFieldResponse",
@@ -35124,6 +35885,7 @@ var ACTION_CATALOG = [
35124
35885
  "VaultFieldVersionMeta",
35125
35886
  "VaultItem",
35126
35887
  "VaultItemSummary",
35888
+ "VaultProviderConnectionSummary",
35127
35889
  "VaultSummary"
35128
35890
  ]
35129
35891
  },
@@ -35262,7 +36024,10 @@ var ACTION_CATALOG = [
35262
36024
  "request": [],
35263
36025
  "response": [
35264
36026
  "DisconnectOnePasswordResponse",
36027
+ "DisconnectVaultProviderResponse",
35265
36028
  "InstallOnePasswordResponse",
36029
+ "InstallVaultProviderResponse",
36030
+ "ListVaultProviderConnectionsResponse",
35266
36031
  "OnePasswordConnectionSummary",
35267
36032
  "ProviderVaultMeta",
35268
36033
  "RevealVaultFieldResponse",
@@ -35270,6 +36035,7 @@ var ACTION_CATALOG = [
35270
36035
  "VaultFieldVersionMeta",
35271
36036
  "VaultItem",
35272
36037
  "VaultItemSummary",
36038
+ "VaultProviderConnectionSummary",
35273
36039
  "VaultSummary"
35274
36040
  ]
35275
36041
  },
@@ -35311,6 +36077,28 @@ var ACTION_CATALOG = [
35311
36077
  "ToolGatewayDeclarationsResponse"
35312
36078
  ]
35313
36079
  },
36080
+ {
36081
+ "id": "GET /v1/workspaces/:workspaceId/vault-providers/connections",
36082
+ "method": "GET",
36083
+ "path": "/v1/workspaces/:workspaceId/vault-providers/connections",
36084
+ "request": [],
36085
+ "response": [
36086
+ "DisconnectOnePasswordResponse",
36087
+ "DisconnectVaultProviderResponse",
36088
+ "InstallOnePasswordResponse",
36089
+ "InstallVaultProviderResponse",
36090
+ "ListVaultProviderConnectionsResponse",
36091
+ "OnePasswordConnectionSummary",
36092
+ "ProviderVaultMeta",
36093
+ "RevealVaultFieldResponse",
36094
+ "SessionSecretsView",
36095
+ "VaultFieldVersionMeta",
36096
+ "VaultItem",
36097
+ "VaultItemSummary",
36098
+ "VaultProviderConnectionSummary",
36099
+ "VaultSummary"
36100
+ ]
36101
+ },
35314
36102
  {
35315
36103
  "id": "GET /v1/workspaces/:workspaceId/vaults",
35316
36104
  "method": "GET",
@@ -35318,7 +36106,10 @@ var ACTION_CATALOG = [
35318
36106
  "request": [],
35319
36107
  "response": [
35320
36108
  "DisconnectOnePasswordResponse",
36109
+ "DisconnectVaultProviderResponse",
35321
36110
  "InstallOnePasswordResponse",
36111
+ "InstallVaultProviderResponse",
36112
+ "ListVaultProviderConnectionsResponse",
35322
36113
  "OnePasswordConnectionSummary",
35323
36114
  "ProviderVaultMeta",
35324
36115
  "RevealVaultFieldResponse",
@@ -35326,6 +36117,7 @@ var ACTION_CATALOG = [
35326
36117
  "VaultFieldVersionMeta",
35327
36118
  "VaultItem",
35328
36119
  "VaultItemSummary",
36120
+ "VaultProviderConnectionSummary",
35329
36121
  "VaultSummary"
35330
36122
  ]
35331
36123
  },
@@ -35336,7 +36128,10 @@ var ACTION_CATALOG = [
35336
36128
  "request": [],
35337
36129
  "response": [
35338
36130
  "DisconnectOnePasswordResponse",
36131
+ "DisconnectVaultProviderResponse",
35339
36132
  "InstallOnePasswordResponse",
36133
+ "InstallVaultProviderResponse",
36134
+ "ListVaultProviderConnectionsResponse",
35340
36135
  "OnePasswordConnectionSummary",
35341
36136
  "ProviderVaultMeta",
35342
36137
  "RevealVaultFieldResponse",
@@ -35344,6 +36139,7 @@ var ACTION_CATALOG = [
35344
36139
  "VaultFieldVersionMeta",
35345
36140
  "VaultItem",
35346
36141
  "VaultItemSummary",
36142
+ "VaultProviderConnectionSummary",
35347
36143
  "VaultSummary"
35348
36144
  ]
35349
36145
  },
@@ -35373,7 +36169,22 @@ var ACTION_CATALOG = [
35373
36169
  "method": "GET",
35374
36170
  "path": "/v1/workspaces/external/:workspaceSource/:workspaceExternalId/allowance",
35375
36171
  "request": [],
35376
- "response": []
36172
+ "response": [
36173
+ "DisconnectOnePasswordResponse",
36174
+ "DisconnectVaultProviderResponse",
36175
+ "InstallOnePasswordResponse",
36176
+ "InstallVaultProviderResponse",
36177
+ "ListVaultProviderConnectionsResponse",
36178
+ "OnePasswordConnectionSummary",
36179
+ "ProviderVaultMeta",
36180
+ "RevealVaultFieldResponse",
36181
+ "SessionSecretsView",
36182
+ "VaultFieldVersionMeta",
36183
+ "VaultItem",
36184
+ "VaultItemSummary",
36185
+ "VaultProviderConnectionSummary",
36186
+ "VaultSummary"
36187
+ ]
35377
36188
  },
35378
36189
  {
35379
36190
  "id": "GET /v1/workspaces/external/:workspaceSource/:workspaceExternalId/allowance/state",
@@ -35387,7 +36198,22 @@ var ACTION_CATALOG = [
35387
36198
  "method": "GET",
35388
36199
  "path": "/v1/workspaces/external/:workspaceSource/:workspaceExternalId/usage",
35389
36200
  "request": [],
35390
- "response": []
36201
+ "response": [
36202
+ "DisconnectOnePasswordResponse",
36203
+ "DisconnectVaultProviderResponse",
36204
+ "InstallOnePasswordResponse",
36205
+ "InstallVaultProviderResponse",
36206
+ "ListVaultProviderConnectionsResponse",
36207
+ "OnePasswordConnectionSummary",
36208
+ "ProviderVaultMeta",
36209
+ "RevealVaultFieldResponse",
36210
+ "SessionSecretsView",
36211
+ "VaultFieldVersionMeta",
36212
+ "VaultItem",
36213
+ "VaultItemSummary",
36214
+ "VaultProviderConnectionSummary",
36215
+ "VaultSummary"
36216
+ ]
35391
36217
  },
35392
36218
  {
35393
36219
  "id": "GET /v1/workspaces/external/:workspaceSource/:workspaceExternalId/usage/me",
@@ -35609,7 +36435,10 @@ var ACTION_CATALOG = [
35609
36435
  "ConnectionMetadata",
35610
36436
  "ConnectionResponse",
35611
36437
  "DisconnectOnePasswordResponse",
36438
+ "DisconnectVaultProviderResponse",
35612
36439
  "InstallOnePasswordResponse",
36440
+ "InstallVaultProviderResponse",
36441
+ "ListVaultProviderConnectionsResponse",
35613
36442
  "OnePasswordConnectionSummary",
35614
36443
  "ProviderVaultMeta",
35615
36444
  "RevealVaultFieldResponse",
@@ -35617,6 +36446,7 @@ var ACTION_CATALOG = [
35617
36446
  "VaultFieldVersionMeta",
35618
36447
  "VaultItem",
35619
36448
  "VaultItemSummary",
36449
+ "VaultProviderConnectionSummary",
35620
36450
  "VaultSummary"
35621
36451
  ]
35622
36452
  },
@@ -36379,7 +37209,10 @@ var ACTION_CATALOG = [
36379
37209
  "request": [],
36380
37210
  "response": [
36381
37211
  "DisconnectOnePasswordResponse",
37212
+ "DisconnectVaultProviderResponse",
36382
37213
  "InstallOnePasswordResponse",
37214
+ "InstallVaultProviderResponse",
37215
+ "ListVaultProviderConnectionsResponse",
36383
37216
  "OnePasswordConnectionSummary",
36384
37217
  "ProviderVaultMeta",
36385
37218
  "RevealVaultFieldResponse",
@@ -36387,6 +37220,7 @@ var ACTION_CATALOG = [
36387
37220
  "VaultFieldVersionMeta",
36388
37221
  "VaultItem",
36389
37222
  "VaultItemSummary",
37223
+ "VaultProviderConnectionSummary",
36390
37224
  "VaultSummary",
36391
37225
  "Workspace"
36392
37226
  ]
@@ -36710,7 +37544,21 @@ var ACTION_CATALOG = [
36710
37544
  "ImportArchivedSessionRequest"
36711
37545
  ],
36712
37546
  "response": [
36713
- "ImportArchivedSessionResponse"
37547
+ "DisconnectOnePasswordResponse",
37548
+ "DisconnectVaultProviderResponse",
37549
+ "ImportArchivedSessionResponse",
37550
+ "InstallOnePasswordResponse",
37551
+ "InstallVaultProviderResponse",
37552
+ "ListVaultProviderConnectionsResponse",
37553
+ "OnePasswordConnectionSummary",
37554
+ "ProviderVaultMeta",
37555
+ "RevealVaultFieldResponse",
37556
+ "SessionSecretsView",
37557
+ "VaultFieldVersionMeta",
37558
+ "VaultItem",
37559
+ "VaultItemSummary",
37560
+ "VaultProviderConnectionSummary",
37561
+ "VaultSummary"
36714
37562
  ]
36715
37563
  },
36716
37564
  {
@@ -38125,7 +38973,10 @@ var ACTION_CATALOG = [
38125
38973
  "request": [],
38126
38974
  "response": [
38127
38975
  "DisconnectOnePasswordResponse",
38976
+ "DisconnectVaultProviderResponse",
38128
38977
  "InstallOnePasswordResponse",
38978
+ "InstallVaultProviderResponse",
38979
+ "ListVaultProviderConnectionsResponse",
38129
38980
  "OnePasswordConnectionSummary",
38130
38981
  "ProviderVaultMeta",
38131
38982
  "RevealVaultFieldResponse",
@@ -38133,6 +38984,7 @@ var ACTION_CATALOG = [
38133
38984
  "VaultFieldVersionMeta",
38134
38985
  "VaultItem",
38135
38986
  "VaultItemSummary",
38987
+ "VaultProviderConnectionSummary",
38136
38988
  "VaultSummary"
38137
38989
  ]
38138
38990
  },
@@ -38258,7 +39110,10 @@ var ACTION_CATALOG = [
38258
39110
  "request": [],
38259
39111
  "response": [
38260
39112
  "DisconnectOnePasswordResponse",
39113
+ "DisconnectVaultProviderResponse",
38261
39114
  "InstallOnePasswordResponse",
39115
+ "InstallVaultProviderResponse",
39116
+ "ListVaultProviderConnectionsResponse",
38262
39117
  "OnePasswordConnectionSummary",
38263
39118
  "ProviderVaultMeta",
38264
39119
  "RevealVaultFieldResponse",
@@ -38266,6 +39121,7 @@ var ACTION_CATALOG = [
38266
39121
  "VaultFieldVersionMeta",
38267
39122
  "VaultItem",
38268
39123
  "VaultItemSummary",
39124
+ "VaultProviderConnectionSummary",
38269
39125
  "VaultSummary"
38270
39126
  ]
38271
39127
  },
@@ -38276,7 +39132,10 @@ var ACTION_CATALOG = [
38276
39132
  "request": [],
38277
39133
  "response": [
38278
39134
  "DisconnectOnePasswordResponse",
39135
+ "DisconnectVaultProviderResponse",
38279
39136
  "InstallOnePasswordResponse",
39137
+ "InstallVaultProviderResponse",
39138
+ "ListVaultProviderConnectionsResponse",
38280
39139
  "OnePasswordConnectionSummary",
38281
39140
  "ProviderVaultMeta",
38282
39141
  "RevealVaultFieldResponse",
@@ -38284,6 +39143,7 @@ var ACTION_CATALOG = [
38284
39143
  "VaultFieldVersionMeta",
38285
39144
  "VaultItem",
38286
39145
  "VaultItemSummary",
39146
+ "VaultProviderConnectionSummary",
38287
39147
  "VaultSummary"
38288
39148
  ]
38289
39149
  },
@@ -38535,6 +39395,52 @@ var ACTION_CATALOG = [
38535
39395
  "ToolGatewayTargetApprovalResponse"
38536
39396
  ]
38537
39397
  },
39398
+ {
39399
+ "id": "POST /v1/workspaces/:workspaceId/vault-providers/connections",
39400
+ "method": "POST",
39401
+ "path": "/v1/workspaces/:workspaceId/vault-providers/connections",
39402
+ "request": [
39403
+ "InstallVaultProviderRequest"
39404
+ ],
39405
+ "response": [
39406
+ "DisconnectOnePasswordResponse",
39407
+ "DisconnectVaultProviderResponse",
39408
+ "InstallOnePasswordResponse",
39409
+ "InstallVaultProviderResponse",
39410
+ "ListVaultProviderConnectionsResponse",
39411
+ "OnePasswordConnectionSummary",
39412
+ "ProviderVaultMeta",
39413
+ "RevealVaultFieldResponse",
39414
+ "SessionSecretsView",
39415
+ "VaultFieldVersionMeta",
39416
+ "VaultItem",
39417
+ "VaultItemSummary",
39418
+ "VaultProviderConnectionSummary",
39419
+ "VaultSummary"
39420
+ ]
39421
+ },
39422
+ {
39423
+ "id": "POST /v1/workspaces/:workspaceId/vault-providers/connections/:connectionId/verify",
39424
+ "method": "POST",
39425
+ "path": "/v1/workspaces/:workspaceId/vault-providers/connections/:connectionId/verify",
39426
+ "request": [],
39427
+ "response": [
39428
+ "DisconnectOnePasswordResponse",
39429
+ "DisconnectVaultProviderResponse",
39430
+ "InstallOnePasswordResponse",
39431
+ "InstallVaultProviderResponse",
39432
+ "ListVaultProviderConnectionsResponse",
39433
+ "OnePasswordConnectionSummary",
39434
+ "ProviderVaultMeta",
39435
+ "RevealVaultFieldResponse",
39436
+ "SessionSecretsView",
39437
+ "VaultFieldVersionMeta",
39438
+ "VaultItem",
39439
+ "VaultItemSummary",
39440
+ "VaultProviderConnectionSummary",
39441
+ "VaultSummary"
39442
+ ]
39443
+ },
38538
39444
  {
38539
39445
  "id": "POST /v1/workspaces/:workspaceId/vaults",
38540
39446
  "method": "POST",
@@ -38542,7 +39448,10 @@ var ACTION_CATALOG = [
38542
39448
  "request": [],
38543
39449
  "response": [
38544
39450
  "DisconnectOnePasswordResponse",
39451
+ "DisconnectVaultProviderResponse",
38545
39452
  "InstallOnePasswordResponse",
39453
+ "InstallVaultProviderResponse",
39454
+ "ListVaultProviderConnectionsResponse",
38546
39455
  "OnePasswordConnectionSummary",
38547
39456
  "ProviderVaultMeta",
38548
39457
  "RevealVaultFieldResponse",
@@ -38550,6 +39459,7 @@ var ACTION_CATALOG = [
38550
39459
  "VaultFieldVersionMeta",
38551
39460
  "VaultItem",
38552
39461
  "VaultItemSummary",
39462
+ "VaultProviderConnectionSummary",
38553
39463
  "VaultSummary"
38554
39464
  ]
38555
39465
  },
@@ -38602,7 +39512,10 @@ var ACTION_CATALOG = [
38602
39512
  "request": [],
38603
39513
  "response": [
38604
39514
  "DisconnectOnePasswordResponse",
39515
+ "DisconnectVaultProviderResponse",
38605
39516
  "InstallOnePasswordResponse",
39517
+ "InstallVaultProviderResponse",
39518
+ "ListVaultProviderConnectionsResponse",
38606
39519
  "OnePasswordConnectionSummary",
38607
39520
  "ProviderVaultMeta",
38608
39521
  "RevealVaultFieldResponse",
@@ -38610,6 +39523,7 @@ var ACTION_CATALOG = [
38610
39523
  "VaultFieldVersionMeta",
38611
39524
  "VaultItem",
38612
39525
  "VaultItemSummary",
39526
+ "VaultProviderConnectionSummary",
38613
39527
  "VaultSummary"
38614
39528
  ]
38615
39529
  },
@@ -38820,7 +39734,10 @@ var ACTION_CATALOG = [
38820
39734
  "request": [],
38821
39735
  "response": [
38822
39736
  "DisconnectOnePasswordResponse",
39737
+ "DisconnectVaultProviderResponse",
38823
39738
  "InstallOnePasswordResponse",
39739
+ "InstallVaultProviderResponse",
39740
+ "ListVaultProviderConnectionsResponse",
38824
39741
  "OnePasswordConnectionSummary",
38825
39742
  "ProviderVaultMeta",
38826
39743
  "RevealVaultFieldResponse",
@@ -38828,6 +39745,7 @@ var ACTION_CATALOG = [
38828
39745
  "VaultFieldVersionMeta",
38829
39746
  "VaultItem",
38830
39747
  "VaultItemSummary",
39748
+ "VaultProviderConnectionSummary",
38831
39749
  "VaultSummary"
38832
39750
  ]
38833
39751
  },
@@ -38861,7 +39779,10 @@ var ACTION_CATALOG = [
38861
39779
  "request": [],
38862
39780
  "response": [
38863
39781
  "DisconnectOnePasswordResponse",
39782
+ "DisconnectVaultProviderResponse",
38864
39783
  "InstallOnePasswordResponse",
39784
+ "InstallVaultProviderResponse",
39785
+ "ListVaultProviderConnectionsResponse",
38865
39786
  "OnePasswordConnectionSummary",
38866
39787
  "ProviderVaultMeta",
38867
39788
  "RevealVaultFieldResponse",
@@ -38869,6 +39790,7 @@ var ACTION_CATALOG = [
38869
39790
  "VaultFieldVersionMeta",
38870
39791
  "VaultItem",
38871
39792
  "VaultItemSummary",
39793
+ "VaultProviderConnectionSummary",
38872
39794
  "VaultSummary"
38873
39795
  ]
38874
39796
  },
@@ -38879,12 +39801,51 @@ var ACTION_CATALOG = [
38879
39801
  "request": [],
38880
39802
  "response": []
38881
39803
  },
39804
+ {
39805
+ "id": "PUT /v1/workspaces/:workspaceId/vault-providers/connections/:connectionId/credentials",
39806
+ "method": "PUT",
39807
+ "path": "/v1/workspaces/:workspaceId/vault-providers/connections/:connectionId/credentials",
39808
+ "request": [
39809
+ "ReplaceVaultProviderCredentialsRequest"
39810
+ ],
39811
+ "response": [
39812
+ "DisconnectOnePasswordResponse",
39813
+ "DisconnectVaultProviderResponse",
39814
+ "InstallOnePasswordResponse",
39815
+ "InstallVaultProviderResponse",
39816
+ "ListVaultProviderConnectionsResponse",
39817
+ "OnePasswordConnectionSummary",
39818
+ "ProviderVaultMeta",
39819
+ "RevealVaultFieldResponse",
39820
+ "SessionSecretsView",
39821
+ "VaultFieldVersionMeta",
39822
+ "VaultItem",
39823
+ "VaultItemSummary",
39824
+ "VaultProviderConnectionSummary",
39825
+ "VaultSummary"
39826
+ ]
39827
+ },
38882
39828
  {
38883
39829
  "id": "PUT /v1/workspaces/external/:workspaceSource/:workspaceExternalId/allowance",
38884
39830
  "method": "PUT",
38885
39831
  "path": "/v1/workspaces/external/:workspaceSource/:workspaceExternalId/allowance",
38886
39832
  "request": [],
38887
- "response": []
39833
+ "response": [
39834
+ "DisconnectOnePasswordResponse",
39835
+ "DisconnectVaultProviderResponse",
39836
+ "InstallOnePasswordResponse",
39837
+ "InstallVaultProviderResponse",
39838
+ "ListVaultProviderConnectionsResponse",
39839
+ "OnePasswordConnectionSummary",
39840
+ "ProviderVaultMeta",
39841
+ "RevealVaultFieldResponse",
39842
+ "SessionSecretsView",
39843
+ "VaultFieldVersionMeta",
39844
+ "VaultItem",
39845
+ "VaultItemSummary",
39846
+ "VaultProviderConnectionSummary",
39847
+ "VaultSummary"
39848
+ ]
38888
39849
  },
38889
39850
  {
38890
39851
  "id": "PUT /v1/workspaces/external/:workspaceSource/:workspaceExternalId/members/:subjectId/allowance",
@@ -40882,7 +41843,10 @@ var ACTION_CATALOG = [
40882
41843
  ],
40883
41844
  "response": [
40884
41845
  "DisconnectOnePasswordResponse",
41846
+ "DisconnectVaultProviderResponse",
40885
41847
  "InstallOnePasswordResponse",
41848
+ "InstallVaultProviderResponse",
41849
+ "ListVaultProviderConnectionsResponse",
40886
41850
  "OnePasswordConnectionSummary",
40887
41851
  "ProviderVaultMeta",
40888
41852
  "RevealVaultFieldResponse",
@@ -40890,6 +41854,7 @@ var ACTION_CATALOG = [
40890
41854
  "VaultFieldVersionMeta",
40891
41855
  "VaultItem",
40892
41856
  "VaultItemSummary",
41857
+ "VaultProviderConnectionSummary",
40893
41858
  "VaultSummary",
40894
41859
  "Workspace"
40895
41860
  ]
@@ -41038,7 +42003,7 @@ var ACTION_CATALOG = [
41038
42003
  ];
41039
42004
 
41040
42005
  // src/mcp/action-schema-imports.gen.ts
41041
- import { AcceptOrganizationInvitationRequest, AcceptOrganizationRecoveryCustodyRequest, AcknowledgeStreamRequest, ActivateCodexRealtimeConnectionRequest, ActivateCompanyProfileRevisionRequest, ActivatePreferenceRegistryRevisionRequest, ActivateWorkspaceInstructionPolicyRequest, AddDocumentRequest, AddWorkspaceMemberRequest, AgentInstructionReviewRequest, AgentLearningContext, ApiIntegrationOAuthStartRequest, AppendArchivedSessionEventsRequest as AppendArchivedSessionEventsRequest2, ApplySessionGoalRevisionRequest, ApproveSlackUserLinkAccessRequest, ArtifactCatalogKind, AtlassianLifecycleActionRequest, AttachViewerRequest, BeginSessionRealtimeRequest, BrowserActionRequest, BrowserDomReadRequest, BrowserDownloadSaveRequest, BrowserOpenTargetRequest, BrowserSessionAttachmentRequest, BrowserSessionLifecycleRequest, ChangeMachineAudienceRequest, ChangePreferenceRegistryScopeRequest, ClaudeSubscriptionOAuthCompleteRequest, ClaudeSubscriptionOAuthStartRequest, ClaudeSubscriptionSetupTokenRequest as ClaudeSubscriptionSetupTokenRequest2, ClearWorkspaceAllowanceRequest, CodexAppsDesignationRequest as CodexAppsDesignationRequest2, CodexRealtimeWebrtcRequest, CodexSourceRequest as CodexSourceRequest2, CompanyProfileDiffRequest, ComputerActionRequest, ComputerNativeCallRequest, ComputerSessionAttachmentRequest, ComputerSessionLifecycleRequest, ConfigureOrganizationRecoveryPolicyRequest, CorrectPreferenceRegistryRequest, CreateAdditionalOrganizationRequest, CreateApiKeyRequest, CreateAutomationSourceRequest, CreateAutomationTriggerRequest, CreateBillingPortalRequest, CreateBrowserIdentityRequest, CreateBrowserSessionRequest, CreateCapabilityCatalogItemRequest, CreateChannelRequest, CreateCheckoutRequest, CreateComputerSessionRequest, CreateConnectionRequest, CreateDocumentBaseRequest, CreateFeedbackRequest, CreateFileUploadRequest as CreateFileUploadRequest2, CreateInteractionInterventionRequest, CreateKnowledgeDropRequest, CreateNetworkRouteRequest, CreateOrganizationApiKeyRequest, CreateOrganizationInvitationRequest, CreateOrganizationProviderCustomModelRequest, CreateOrganizationRequest, CreateOrganizationServiceAccountRequest, CreateOrganizationWebhookRequest, CreateOrganizationWorkspaceRequest, CreatePersonalApiKeyRequest, CreatePrReviewAppRegistrationRequest, CreatePrReviewRepositoryBindingRequest, CreatePreferenceRegistryProposalRequest, CreateRigRequest, CreateScheduledTaskRequest as CreateScheduledTaskRequest2, CreateSessionRequest, CreateSiteAuthConnectionRequest, CreateWorkspaceArtifactRequest, CreateWorkspaceGatewayCustomModelRequest as CreateWorkspaceGatewayCustomModelRequest2, CreateWorkspaceInstructionPolicyDraftRequest, CreateWorkspaceInstructionPolicyOnboardingProposalRequest, CreateWorkspaceOpenRouterCustomModelRequest, CreateWorkspaceOpperCustomModelRequest, CreateWorkspaceRequest, CreateWorkspaceWebhookRequest, DeactivatePreferenceRegistryRequest, DeleteOrganizationProviderCustomModelRequest, DeleteSessionQueueItemRequest, DeleteWorkspaceGatewayCustomModelRequest as DeleteWorkspaceGatewayCustomModelRequest2, DeleteWorkspaceOpenRouterCustomModelRequest, DeleteWorkspaceOpperCustomModelRequest, DeviceEnrollmentApproveRequest, DisableOrganizationRecoveryPolicyRequest, EditSessionQueueItemRequest, EnableCapabilityRequest, EndSessionRealtimeRequest, EnsureWorkspaceRequest, ExternalAuthInteractiveRequest, ExternalAuthRunRequest, FikenInstallRequest as FikenInstallRequest2, FikenOAuthStartRequest, FileListRequest as FileListRequest2, ForkSessionRequest, FsDeleteRequest, FsListBatchRequest, FsListRequest, FsMkdirRequest, FsMoveRequest, FsReadRequest, FsWriteRequest, GatewayRealtimeConnectRequest, GetMyUsageRequest, GetUsageRequest, GitDiffRequest, GitLogRequest, GitReadBatchRequest, GitShowRequest, GitStatusRequest, GrantSessionAdminAccessRequest, GrantWorkspaceCreditsRequest, ImportArchivedSessionRequest as ImportArchivedSessionRequest2, ImportLegacyWorkspaceInstructionPolicyDraftRequest, InboxItem, InboxSettings, InsightsRange, InstallApiIntegrationRequest, InstallLibrarySkillRequest, InstallPluginRequest, InstallSkillRequest, IssueUserResourceGrantRequest, KnowledgeEntryBatchReviewRequest, KnowledgeEntryListRequest as KnowledgeEntryListRequest3, KnowledgeEntryRestoreRequest, KnowledgeEntryReviewRequest, KnowledgeEntrySaveRequest as KnowledgeEntrySaveRequest2, KnowledgeReviewBatchListRequest, KnowledgeSavePreparationRequest as KnowledgeSavePreparationRequest2, MachineAudiencePreviewRequest, McpConnectionDecision, MemberNotificationsSetting, MemorySlackPublicationActionRequest, MintEnrollTokenRequest, ModelConnectionAccessPolicy, MoveDocumentRequest, MoveSessionQueueItemRequest, MutateIntegrationFacetRequest, OAuthStartRequest, OpenGeniSlackBotInstallRequest, OpenMachinePrivacySettingsRequest, OrganizationModelProviderKind, OrganizationRecoveryOperationCommandRequest, OrganizationUsagePeriod, PrepareSlackUserLinkAccessRequest, PreviewApiIntegrationRequest, PreviewPluginRequest, PreviewSkillImportRequest, ProposeRigChangeRequest, PtyCloseRequest, PtyOpenRequest, PtyResizeRequest, PtyWriteRequest, PublishBrowserRevisionRequest, PublishSandboxFileArtifactRequest, PublishWorkspaceArtifactVersionRequest, PutOrganizationCredentialProviderRequest, PutOrganizationWorkspaceMemberRequest, PutWorkspaceCredentialProviderRequest, ReclassifyDocumentAuthorityRequest, RefreshScheduledTaskAccessRequest, RejectPreferenceRegistryProposalRequest, RejectSessionGoalRevisionRequest, RemoveEnrollmentRequest, RenewSessionRealtimeRequest, ReorderChannelsRequest, ReportAuthRunRequest, ResolveInteractionInterventionRequest, RetryOrganizationUserSetupDeliveryRequest, RevokeOrganizationInvitationRequest, RevokeOrganizationModelProviderConnectionRequest, RevokeOrganizationWorkspaceMemberRequest, RollbackCompanyProfileRequest, RollbackSessionGoalRevisionRequest, RollbackWorkspaceArtifactRequest, RollbackWorkspaceInstructionPolicyRequest, RotateSessionMcpCredentialsRequest, RunDocumentDefaultCollectionBackfillRequest, SandboxRecoveryRequest, SaveAtlassianSourcesRequest as SaveAtlassianSourcesRequest2, SaveComposerDraftRequest, SaveNewSessionDraftRequest, SessionCodexAccountPinRequest, SessionControlRequest, SessionHumanInputRequest, SessionInboxMute, SessionMessageSearchRequest, SessionRetryRequest, SessionScopeSubjectId, SessionStatus, SessionVisibility, SetMemberAllowanceRequest, SetSessionModelAccountChoiceRequest, SetSessionUsageLimitRequest, SetWorkspaceAllowanceRequest, SetWorkspaceArtifactStatusRequest, SetWorkspaceDefaultRigRequest, SiteDataCollectionDefinitionRequest as SiteDataCollectionDefinitionRequest3, SiteDataImportRequest as SiteDataImportRequest3, SiteDataQueryRequest as SiteDataQueryRequest3, SiteDataWriteRequest as SiteDataWriteRequest3, SiteLimitProfile, SitePublishWarningFix as SitePublishWarningFix2, SiteSqlExportFormat as SiteSqlExportFormat3, SiteSqlImportRequest as SiteSqlImportRequest3, SiteSqlMigrationRequest as SiteSqlMigrationRequest2, SiteSqlQueryDefinitionRequest as SiteSqlQueryDefinitionRequest3, SiteSqlRunRequest as SiteSqlRunRequest3, SiteSqlSettingsRequest as SiteSqlSettingsRequest2, SiteSqlStatementRequest as SiteSqlStatementRequest3, SiteTakedownRequest, SlackUserLinkAccessMutationRequest, SocialOAuthStartRequest, StartAuthRunRequest, StartOrganizationRecoveryOperationRequest, SteerSessionQueueItemRequest, SubmitComposerDraftRequest, SubscriptionAccountRenameRequest as SubscriptionAccountRenameRequest2, SubscriptionAccountToggleRequest as SubscriptionAccountToggleRequest3, SubscriptionConnectPollRequest, SubscriptionRotationSettingsRequest as SubscriptionRotationSettingsRequest3, SupergrokConnectStartRequest, SupersedePreferenceRegistryRequest, SwapActiveSandboxRequest, SyncSessionRealtimeLedgerRequest, TerminalExecRequest, TriggerAutomationManuallyRequest, UninstallApiIntegrationRequest, UninstallPluginRequest, UninstallSkillRequest, UpdateAutomationSourceRequest, UpdateAutomationTriggerRequest, UpdateBrowserIdentityRequest, UpdateChannelRequest, UpdateCompanyProfileAgentPolicyRequest, UpdateCompanyProfileRequest, UpdateConnectionRequest, UpdateConnectorToolPermissionsRequest, UpdateGitHubActionPolicyRequest, UpdateMachineOperationPolicyRequest, UpdateMemorySlackPublicationConfigurationRequest, UpdateModelAccountPreferencesRequest, UpdateNetworkRouteRequest, UpdateOpenGeniSlackBotOrganizationAccess, UpdateOrganizationAgentAdminAccessRequest, UpdateOrganizationApiKeyRequest, UpdateOrganizationIntegrationPolicyRequest, UpdateOrganizationMcpConnectionRequest, UpdateOrganizationMemberRequest, UpdateOrganizationModelAccountSettingsRequest, UpdateOrganizationModelDefaultsRequest, UpdateOrganizationNameRequest, UpdateOrganizationPrivacySettingsRequest, UpdateOrganizationPrivateSessionSettingsRequest, UpdateOrganizationRetentionPolicyRequest, UpdateOrganizationServiceAccountRequest, UpdateOrganizationWebhookRequest, UpdateOrganizationWorkspaceRequest, UpdatePrReviewAppRegistrationRequest, UpdatePrReviewRepositoryBindingRequest, UpdateRigRequest, UpdateScheduledTaskRequest, UpdateSessionAgentRequest, UpdateSessionArchiveRequest, UpdateSessionAttentionRequest, UpdateSessionChannelRequest, UpdateSessionGoalRequest, UpdateSessionMcpApprovalPolicyRequest, UpdateSessionMcpToolPermissionsRequest, UpdateSessionPinRequest, UpdateSessionRequest, UpdateSessionRetentionRequest, UpdateSessionSkillsRequest, UpdateSessionToolPolicyRequest, UpdateSessionVisibilityRequest, UpdateSiteAuthConnectionRequest, UpdateSlackChannelRoutesRequest, UpdateVideoGenerationPolicyRequest, UpdateWorkspaceArtifactVisibilityRequest, UpdateWorkspaceMemberRequest, UpdateWorkspaceModelAccountSettingsRequest, UpdateWorkspaceModelPolicyRequest, UpdateWorkspaceRequest, UpdateWorkspaceSettingsRequest, UpdateWorkspaceWebhookRequest, UpsertIntegrationFacetRequest, UpsertOrganizationModelProviderConnectionRequest, UpsertSitePublicationRequest as UpsertSitePublicationRequest2, VerifyAuthRunRequest, ViewerHeartbeatRequest, WorkClaimSubjectType, WorkspaceInstructionPolicyDiffRequest, WorkspacePauseTimerRequest } from "@opengeni/contracts";
42006
+ import { AcceptOrganizationInvitationRequest, AcceptOrganizationRecoveryCustodyRequest, AcknowledgeStreamRequest, ActivateCodexRealtimeConnectionRequest, ActivateCompanyProfileRevisionRequest, ActivatePreferenceRegistryRevisionRequest, ActivateWorkspaceInstructionPolicyRequest, AddDocumentRequest, AddWorkspaceMemberRequest, AgentInstructionReviewRequest, AgentLearningContext, ApiIntegrationOAuthStartRequest, AppendArchivedSessionEventsRequest as AppendArchivedSessionEventsRequest2, ApplySessionGoalRevisionRequest, ApproveSlackUserLinkAccessRequest, ArtifactCatalogKind, AtlassianLifecycleActionRequest, AttachViewerRequest, BeginSessionRealtimeRequest, BrowserActionRequest, BrowserDomReadRequest, BrowserDownloadSaveRequest, BrowserOpenTargetRequest, BrowserSessionAttachmentRequest, BrowserSessionLifecycleRequest, ChangeMachineAudienceRequest, ChangePreferenceRegistryScopeRequest, ClaudeSubscriptionOAuthCompleteRequest, ClaudeSubscriptionOAuthStartRequest, ClaudeSubscriptionSetupTokenRequest as ClaudeSubscriptionSetupTokenRequest2, ClearWorkspaceAllowanceRequest, CodexAppsDesignationRequest as CodexAppsDesignationRequest2, CodexRealtimeWebrtcRequest, CodexSourceRequest as CodexSourceRequest2, CompanyProfileDiffRequest, ComputerActionRequest, ComputerNativeCallRequest, ComputerSessionAttachmentRequest, ComputerSessionLifecycleRequest, ConfigureOrganizationRecoveryPolicyRequest, CorrectPreferenceRegistryRequest, CreateAdditionalOrganizationRequest, CreateApiKeyRequest, CreateAutomationSourceRequest, CreateAutomationTriggerRequest, CreateBillingPortalRequest, CreateBrowserIdentityRequest, CreateBrowserSessionRequest, CreateCapabilityCatalogItemRequest, CreateChannelRequest, CreateCheckoutRequest, CreateComputerSessionRequest, CreateConnectionRequest, CreateDocumentBaseRequest, CreateFeedbackRequest, CreateFileUploadRequest as CreateFileUploadRequest2, CreateInteractionInterventionRequest, CreateKnowledgeDropRequest, CreateNetworkRouteRequest, CreateOrganizationApiKeyRequest, CreateOrganizationInvitationRequest, CreateOrganizationProviderCustomModelRequest, CreateOrganizationRequest, CreateOrganizationServiceAccountRequest, CreateOrganizationWebhookRequest, CreateOrganizationWorkspaceRequest, CreatePersonalApiKeyRequest, CreatePrReviewAppRegistrationRequest, CreatePrReviewRepositoryBindingRequest, CreatePreferenceRegistryProposalRequest, CreateRigRequest, CreateScheduledTaskRequest as CreateScheduledTaskRequest2, CreateSessionRequest, CreateSiteAuthConnectionRequest, CreateWorkspaceArtifactRequest, CreateWorkspaceGatewayCustomModelRequest as CreateWorkspaceGatewayCustomModelRequest2, CreateWorkspaceInstructionPolicyDraftRequest, CreateWorkspaceInstructionPolicyOnboardingProposalRequest, CreateWorkspaceOpenRouterCustomModelRequest, CreateWorkspaceOpperCustomModelRequest, CreateWorkspaceRequest, CreateWorkspaceWebhookRequest, DeactivatePreferenceRegistryRequest, DeleteOrganizationProviderCustomModelRequest, DeleteSessionQueueItemRequest, DeleteWorkspaceGatewayCustomModelRequest as DeleteWorkspaceGatewayCustomModelRequest2, DeleteWorkspaceOpenRouterCustomModelRequest, DeleteWorkspaceOpperCustomModelRequest, DeviceEnrollmentApproveRequest, DisableOrganizationRecoveryPolicyRequest, EditSessionQueueItemRequest, EnableCapabilityRequest, EndSessionRealtimeRequest, EnsureWorkspaceRequest, ExternalAuthInteractiveRequest, ExternalAuthRunRequest, FikenInstallRequest as FikenInstallRequest2, FikenOAuthStartRequest, FileListRequest as FileListRequest2, ForkSessionRequest, FsDeleteRequest, FsListBatchRequest, FsListRequest, FsMkdirRequest, FsMoveRequest, FsReadRequest, FsWriteRequest, GatewayRealtimeConnectRequest, GetMyUsageRequest, GetUsageRequest, GitDiffRequest, GitLogRequest, GitReadBatchRequest, GitShowRequest, GitStatusRequest, GrantSessionAdminAccessRequest, GrantWorkspaceCreditsRequest, ImportArchivedSessionRequest as ImportArchivedSessionRequest2, ImportLegacyWorkspaceInstructionPolicyDraftRequest, InboxItem, InboxSettings, InsightsRange, InstallApiIntegrationRequest, InstallLibrarySkillRequest, InstallPluginRequest, InstallSkillRequest, InstallVaultProviderRequest as InstallVaultProviderRequest2, IssueUserResourceGrantRequest, KnowledgeEntryBatchReviewRequest, KnowledgeEntryListRequest as KnowledgeEntryListRequest3, KnowledgeEntryRestoreRequest, KnowledgeEntryReviewRequest, KnowledgeEntrySaveRequest as KnowledgeEntrySaveRequest2, KnowledgeReviewBatchListRequest, KnowledgeSavePreparationRequest as KnowledgeSavePreparationRequest2, MachineAudiencePreviewRequest, McpConnectionDecision, MemberNotificationsSetting, MemorySlackPublicationActionRequest, MintEnrollTokenRequest, ModelConnectionAccessPolicy, MoveDocumentRequest, MoveSessionQueueItemRequest, MutateIntegrationFacetRequest, OAuthStartRequest, OpenGeniSlackBotInstallRequest, OpenMachinePrivacySettingsRequest, OrganizationModelProviderKind, OrganizationRecoveryOperationCommandRequest, OrganizationUsagePeriod, PrepareSlackUserLinkAccessRequest, PreviewApiIntegrationRequest, PreviewPluginRequest, PreviewSkillImportRequest, ProposeRigChangeRequest, PtyCloseRequest, PtyOpenRequest, PtyResizeRequest, PtyWriteRequest, PublishBrowserRevisionRequest, PublishSandboxFileArtifactRequest, PublishWorkspaceArtifactVersionRequest, PutOrganizationCredentialProviderRequest, PutOrganizationWorkspaceMemberRequest, PutWorkspaceCredentialProviderRequest, ReclassifyDocumentAuthorityRequest, RefreshScheduledTaskAccessRequest, RejectPreferenceRegistryProposalRequest, RejectSessionGoalRevisionRequest, RemoveEnrollmentRequest, RenewSessionRealtimeRequest, ReorderChannelsRequest, ReplaceVaultProviderCredentialsRequest as ReplaceVaultProviderCredentialsRequest2, ReportAuthRunRequest, ResolveInteractionInterventionRequest, RetryOrganizationUserSetupDeliveryRequest, RevokeOrganizationInvitationRequest, RevokeOrganizationModelProviderConnectionRequest, RevokeOrganizationWorkspaceMemberRequest, RollbackCompanyProfileRequest, RollbackSessionGoalRevisionRequest, RollbackWorkspaceArtifactRequest, RollbackWorkspaceInstructionPolicyRequest, RotateSessionMcpCredentialsRequest, RunDocumentDefaultCollectionBackfillRequest, SandboxRecoveryRequest, SaveAtlassianSourcesRequest as SaveAtlassianSourcesRequest2, SaveComposerDraftRequest, SaveNewSessionDraftRequest, SessionCodexAccountPinRequest, SessionControlRequest, SessionHumanInputRequest, SessionInboxMute, SessionMessageSearchRequest, SessionRetryRequest, SessionScopeSubjectId, SessionStatus, SessionVisibility, SetMemberAllowanceRequest, SetSessionModelAccountChoiceRequest, SetSessionUsageLimitRequest, SetWorkspaceAllowanceRequest, SetWorkspaceArtifactStatusRequest, SetWorkspaceDefaultRigRequest, SiteDataCollectionDefinitionRequest as SiteDataCollectionDefinitionRequest3, SiteDataImportRequest as SiteDataImportRequest3, SiteDataQueryRequest as SiteDataQueryRequest3, SiteDataWriteRequest as SiteDataWriteRequest3, SiteLimitProfile, SitePublishWarningFix as SitePublishWarningFix2, SiteSqlExportFormat as SiteSqlExportFormat3, SiteSqlImportRequest as SiteSqlImportRequest3, SiteSqlMigrationRequest as SiteSqlMigrationRequest2, SiteSqlQueryDefinitionRequest as SiteSqlQueryDefinitionRequest3, SiteSqlRunRequest as SiteSqlRunRequest3, SiteSqlSettingsRequest as SiteSqlSettingsRequest2, SiteSqlStatementRequest as SiteSqlStatementRequest3, SiteTakedownRequest, SlackUserLinkAccessMutationRequest, SocialOAuthStartRequest, StartAuthRunRequest, StartOrganizationRecoveryOperationRequest, SteerSessionQueueItemRequest, SubmitComposerDraftRequest, SubscriptionAccountRenameRequest as SubscriptionAccountRenameRequest2, SubscriptionAccountToggleRequest as SubscriptionAccountToggleRequest3, SubscriptionConnectPollRequest, SubscriptionRotationSettingsRequest as SubscriptionRotationSettingsRequest3, SupergrokConnectStartRequest, SupersedePreferenceRegistryRequest, SwapActiveSandboxRequest, SyncSessionRealtimeLedgerRequest, TerminalExecRequest, TriggerAutomationManuallyRequest, UninstallApiIntegrationRequest, UninstallPluginRequest, UninstallSkillRequest, UpdateAutomationSourceRequest, UpdateAutomationTriggerRequest, UpdateBrowserIdentityRequest, UpdateChannelRequest, UpdateCompanyProfileAgentPolicyRequest, UpdateCompanyProfileRequest, UpdateConnectionRequest, UpdateConnectorToolPermissionsRequest, UpdateGitHubActionPolicyRequest, UpdateMachineOperationPolicyRequest, UpdateMemorySlackPublicationConfigurationRequest, UpdateModelAccountPreferencesRequest, UpdateNetworkRouteRequest, UpdateOpenGeniSlackBotOrganizationAccess, UpdateOrganizationAgentAdminAccessRequest, UpdateOrganizationApiKeyRequest, UpdateOrganizationIntegrationPolicyRequest, UpdateOrganizationMcpConnectionRequest, UpdateOrganizationMemberRequest, UpdateOrganizationModelAccountSettingsRequest, UpdateOrganizationModelDefaultsRequest, UpdateOrganizationNameRequest, UpdateOrganizationPrivacySettingsRequest, UpdateOrganizationPrivateSessionSettingsRequest, UpdateOrganizationRetentionPolicyRequest, UpdateOrganizationServiceAccountRequest, UpdateOrganizationWebhookRequest, UpdateOrganizationWorkspaceRequest, UpdatePrReviewAppRegistrationRequest, UpdatePrReviewRepositoryBindingRequest, UpdateRigRequest, UpdateScheduledTaskRequest, UpdateSessionAgentRequest, UpdateSessionArchiveRequest, UpdateSessionAttentionRequest, UpdateSessionChannelRequest, UpdateSessionGoalRequest, UpdateSessionMcpApprovalPolicyRequest, UpdateSessionMcpToolPermissionsRequest, UpdateSessionPinRequest, UpdateSessionRequest, UpdateSessionRetentionRequest, UpdateSessionSkillsRequest, UpdateSessionToolPolicyRequest, UpdateSessionVisibilityRequest, UpdateSiteAuthConnectionRequest, UpdateSlackChannelRoutesRequest, UpdateVideoGenerationPolicyRequest, UpdateWorkspaceArtifactVisibilityRequest, UpdateWorkspaceMemberRequest, UpdateWorkspaceModelAccountSettingsRequest, UpdateWorkspaceModelPolicyRequest, UpdateWorkspaceRequest, UpdateWorkspaceSettingsRequest, UpdateWorkspaceWebhookRequest, UpsertIntegrationFacetRequest, UpsertOrganizationModelProviderConnectionRequest, UpsertSitePublicationRequest as UpsertSitePublicationRequest2, VerifyAuthRunRequest, ViewerHeartbeatRequest, WorkClaimSubjectType, WorkspaceInstructionPolicyDiffRequest, WorkspacePauseTimerRequest } from "@opengeni/contracts";
41042
42007
  var ACTION_REQUEST_SCHEMAS = {
41043
42008
  AcceptOrganizationInvitationRequest,
41044
42009
  AcceptOrganizationRecoveryCustodyRequest,
@@ -41166,6 +42131,7 @@ var ACTION_REQUEST_SCHEMAS = {
41166
42131
  InstallLibrarySkillRequest,
41167
42132
  InstallPluginRequest,
41168
42133
  InstallSkillRequest,
42134
+ InstallVaultProviderRequest: InstallVaultProviderRequest2,
41169
42135
  IssueUserResourceGrantRequest,
41170
42136
  KnowledgeEntryBatchReviewRequest,
41171
42137
  KnowledgeEntryListRequest: KnowledgeEntryListRequest3,
@@ -41211,6 +42177,7 @@ var ACTION_REQUEST_SCHEMAS = {
41211
42177
  RemoveEnrollmentRequest,
41212
42178
  RenewSessionRealtimeRequest,
41213
42179
  ReorderChannelsRequest,
42180
+ ReplaceVaultProviderCredentialsRequest: ReplaceVaultProviderCredentialsRequest2,
41214
42181
  ReportAuthRunRequest,
41215
42182
  ResolveInteractionInterventionRequest,
41216
42183
  RetryOrganizationUserSetupDeliveryRequest,
@@ -41348,6 +42315,31 @@ var PROVIDERS = {
41348
42315
  supergrok: "SuperGrok (xAI)"
41349
42316
  };
41350
42317
  var RULES = [
42318
+ {
42319
+ method: "GET",
42320
+ pattern: /\/vault-providers\/connections$/,
42321
+ text: () => "List connected password managers and deployment availability: 1Password, Proton Pass, Keeper, Bitwarden and external vaults. Returns connection metadata and setup status, not secret values; does not contact providers."
42322
+ },
42323
+ {
42324
+ method: "POST",
42325
+ pattern: /\/vault-providers\/connections$/,
42326
+ text: () => "Connect Proton Pass, Keeper Secrets Manager, a customer-controlled Bitwarden bridge or an external vault. Set ownership and provider-specific credentials. Saved-but-pending setup returns a connection ID; register it with a remote host if needed, then verify using the saved credentials."
42327
+ },
42328
+ {
42329
+ method: "PUT",
42330
+ pattern: /\/vault-providers\/connections\/:connectionId\/credentials$/,
42331
+ text: () => "Replace a connected password manager's credentials without changing its vault links. The same upstream account must verify successfully; pending verification keeps the previously working credential. Never repeat a consumed Keeper one-time token."
42332
+ },
42333
+ {
42334
+ method: "POST",
42335
+ pattern: /\/vault-providers\/connections\/:connectionId\/verify$/,
42336
+ text: () => "Finish a pending vault connection using its already saved credentials. Checks the provider and discovers available vaults without resubmitting a Keeper bootstrap token or remote signing key."
42337
+ },
42338
+ {
42339
+ method: "DELETE",
42340
+ pattern: /\/vault-providers\/connections\/:connectionId$/,
42341
+ text: () => "Disconnect a password manager and unlink its local vault mirrors. Removes Opengeni's stored access; never deletes upstream vaults or items."
42342
+ },
41351
42343
  {
41352
42344
  method: "GET",
41353
42345
  pattern: /\/(codex|claude|supergrok)\/accounts$/,
@@ -48129,7 +49121,9 @@ function workspaceGatewaySecretArguments(input) {
48129
49121
  workspaceGatewaySecretPrincipal(input.grant, site),
48130
49122
  {
48131
49123
  capabilityEnabled: true,
48132
- ...input.providersForSubject ? { providersForSubject: input.providersForSubject } : {}
49124
+ ...input.providersForSubject ? {
49125
+ providersForSubject: (subjectId) => input.providersForSubject(subjectId, site)
49126
+ } : {}
48133
49127
  }
48134
49128
  );
48135
49129
  const hook = createSecretArgumentResolver({
@@ -48854,7 +49848,11 @@ async function prepareWorkspaceToolGatewayForGrantInternal(routeDeps, grant, all
48854
49848
  db: routeDeps.db,
48855
49849
  settings: gatewaySettings,
48856
49850
  grant,
48857
- providersForSubject: (subjectId) => vaultProviderRegistryFor(routeDeps, { workspaceId: grant.workspaceId, subjectId })
49851
+ providersForSubject: (subjectId, site) => vaultProviderRegistryFor(routeDeps, {
49852
+ workspaceId: grant.workspaceId,
49853
+ subjectId,
49854
+ ...site ? { executionContext: { siteId: site.siteId } } : {}
49855
+ })
48858
49856
  }),
48859
49857
  mapDefinition: (definition) => {
48860
49858
  if (options.target && definition.approvalAuthorityDigest === void 0) {
@@ -51271,7 +52269,7 @@ import {
51271
52269
  } from "@opengeni/contracts";
51272
52270
  import {
51273
52271
  DestinationPolicyError as DestinationPolicyError2,
51274
- pinnedFetch as pinnedFetch4
52272
+ pinnedFetch as pinnedFetch5
51275
52273
  } from "@opengeni/network";
51276
52274
  var RESPONSE_EXCERPT_BYTES = 1024;
51277
52275
  var PROVIDER_RESPONSE_BYTES = 5 * 1024 * 1024;
@@ -51393,7 +52391,7 @@ async function sendIntegrationEndpointTest(input) {
51393
52391
  const base = { request: input.body, credentials: null };
51394
52392
  let response;
51395
52393
  try {
51396
- response = await (input.fetch ?? pinnedFetch4)(
52394
+ response = await (input.fetch ?? pinnedFetch5)(
51397
52395
  input.url,
51398
52396
  {
51399
52397
  method: "POST",
@@ -88509,6 +89507,7 @@ import {
88509
89507
  listOwnConnectionAccountsForGrant,
88510
89508
  hasReservedFikenMetadata,
88511
89509
  ONEPASSWORD_CREDENTIAL_ROLE as ONEPASSWORD_CREDENTIAL_ROLE2,
89510
+ EXTERNAL_VAULT_CREDENTIAL_ROLE,
88512
89511
  hasReservedOpenGeniSlackBotMetadata,
88513
89512
  isOpenGeniSlackBotConnection as isOpenGeniSlackBotConnection3,
88514
89513
  openGeniSlackBotMetadata as openGeniSlackBotMetadata2,
@@ -88574,7 +89573,7 @@ import {
88574
89573
  import { createSignedState as createSignedState10, readSignedState as readSignedState9 } from "@opengeni/github";
88575
89574
  import {
88576
89575
  OAUTH_MAX_RESPONSE_BYTES as OAUTH_MAX_RESPONSE_BYTES5,
88577
- pinnedFetch as pinnedFetch5,
89576
+ pinnedFetch as pinnedFetch6,
88578
89577
  readResponseJsonBounded as readResponseJsonBounded10
88579
89578
  } from "@opengeni/network";
88580
89579
  import { HTTPException as HTTPException62 } from "hono/http-exception";
@@ -89145,7 +90144,7 @@ async function verifyProviderIdentity(deps, definition, token) {
89145
90144
  }
89146
90145
  async function providerFetch3(deps, url, init) {
89147
90146
  try {
89148
- return await pinnedFetch5(
90147
+ return await pinnedFetch6(
89149
90148
  url,
89150
90149
  {
89151
90150
  ...init,
@@ -90630,6 +91629,7 @@ function registerConnectionRoutes(app, deps) {
90630
91629
  c.req.param("connectionId"),
90631
91630
  grant.subjectId
90632
91631
  );
91632
+ assertNotReservedExternalVaultMetadata(existing?.metadata);
90633
91633
  if (existing && isOpenGeniSlackBotConnection3(existing)) {
90634
91634
  const destination = ConnectorDocumentDestinationSelection.safeParse(
90635
91635
  payload.metadata?.documentDestination
@@ -90863,6 +91863,7 @@ function registerConnectionRoutes(app, deps) {
90863
91863
  if (!existing) {
90864
91864
  throw new HTTPException64(404, { message: "connection not found" });
90865
91865
  }
91866
+ assertNotReservedExternalVaultMetadata(existing.metadata);
90866
91867
  const expectedVersion = c.req.query("expectedVersion");
90867
91868
  if (expectedVersion !== void 0) {
90868
91869
  if (!/^[1-9]\d*$/.test(expectedVersion) || !Number.isSafeInteger(Number(expectedVersion))) {
@@ -91305,12 +92306,20 @@ function assertNotReservedFikenMetadata(metadata) {
91305
92306
  }
91306
92307
  }
91307
92308
  function assertNotReservedOnePasswordMetadata(metadata) {
92309
+ assertNotReservedExternalVaultMetadata(metadata);
91308
92310
  if (metadata?.credentialRole === ONEPASSWORD_CREDENTIAL_ROLE2) {
91309
92311
  throw new HTTPException64(422, {
91310
92312
  message: "1Password connections are created by the verified 1Password install flow"
91311
92313
  });
91312
92314
  }
91313
92315
  }
92316
+ function assertNotReservedExternalVaultMetadata(metadata) {
92317
+ if (metadata?.credentialRole === EXTERNAL_VAULT_CREDENTIAL_ROLE || metadata?.vaultProvider !== void 0) {
92318
+ throw new HTTPException64(422, {
92319
+ message: "Vault connections are managed through the verified vault connection flow"
92320
+ });
92321
+ }
92322
+ }
91314
92323
  function assertNotReservedApiIntegrationOAuthMetadata(metadata) {
91315
92324
  if (metadata?.credentialRole === API_INTEGRATION_OAUTH_CREDENTIAL_ROLE3) {
91316
92325
  throw new HTTPException64(422, {
@@ -97677,7 +98686,7 @@ import {
97677
98686
  requireSessionAuthorization as requireSessionAuthorization11,
97678
98687
  SessionAuthorizationDeniedError as SessionAuthorizationDeniedError10,
97679
98688
  SessionAuthorizationUnavailableError as SessionAuthorizationUnavailableError9,
97680
- VaultError as VaultError2,
98689
+ VaultError as VaultError3,
97681
98690
  vaultErrorFromDatabase as vaultErrorFromDatabase4
97682
98691
  } from "@opengeni/core";
97683
98692
  var PREFIX = "/v1/workspaces/:workspaceId";
@@ -97696,7 +98705,7 @@ function requireRevealAuthority(grant) {
97696
98705
  return;
97697
98706
  }
97698
98707
  if (grant.principalKind !== "human_session" || grant.serviceInitiator) {
97699
- throw new VaultError2(
98708
+ throw new VaultError3(
97700
98709
  "vault_reveal_requires_human",
97701
98710
  "revealing a value needs a person signed in, or an API key with secrets:read"
97702
98711
  );
@@ -97762,7 +98771,7 @@ function registerVaultRoutes(app, deps) {
97762
98771
  async function itemInVault(actor, workspaceId, vaultId, itemId) {
97763
98772
  const item = await vaults().getItem(actor, workspaceId, itemId);
97764
98773
  if (item.vaultId !== vaultId) {
97765
- throw new VaultError2("vault_item_not_found", "item not found", { itemId });
98774
+ throw new VaultError3("vault_item_not_found", "item not found", { itemId });
97766
98775
  }
97767
98776
  return item;
97768
98777
  }
@@ -97908,7 +98917,9 @@ function registerVaultRoutes(app, deps) {
97908
98917
  const payload = await parseRequestJson(c, MoveVaultItemRequest);
97909
98918
  const itemId = c.req.param("itemId");
97910
98919
  await itemInVault(actor, workspaceId, c.req.param("vaultId"), itemId);
97911
- return c.json(await vaults().moveItem(actor, workspaceId, itemId, payload));
98920
+ return c.json(
98921
+ await vaultsWithProviders(actor, workspaceId).moveItem(actor, workspaceId, itemId, payload)
98922
+ );
97912
98923
  })
97913
98924
  );
97914
98925
  app.post(
@@ -97947,7 +98958,7 @@ function registerVaultRoutes(app, deps) {
97947
98958
  );
97948
98959
  const fieldId = c.req.param("fieldId");
97949
98960
  if (!item.fields.some((field) => field.id === fieldId)) {
97950
- throw new VaultError2("vault_field_not_found", "field not found", { fieldId });
98961
+ throw new VaultError3("vault_field_not_found", "field not found", { fieldId });
97951
98962
  }
97952
98963
  return c.json({ versions: await vaults().listFieldVersions(actor, workspaceId, fieldId) });
97953
98964
  })
@@ -106929,7 +107940,7 @@ function createVaultInteractionSecretsPort(deps) {
106929
107940
  return createSecretResolver2({ db: deps.db, encryptionKey }, principal, {
106930
107941
  capabilityEnabled: await secretsEnabled(principal),
106931
107942
  ...providersFor ? {
106932
- providersForSubject: (subjectId) => providersFor(principal.workspaceId, subjectId)
107943
+ providersForSubject: (subjectId) => providersFor(principal.workspaceId, subjectId, principal)
106933
107944
  } : {}
106934
107945
  });
106935
107946
  },
@@ -111181,7 +112192,7 @@ import { HTTPException as HTTPException94 } from "hono/http-exception";
111181
112192
 
111182
112193
  // src/integrations/pr-review-provider.ts
111183
112194
  import {
111184
- pinnedFetch as pinnedFetch6,
112195
+ pinnedFetch as pinnedFetch7,
111185
112196
  readResponseJsonBounded as readResponseJsonBounded12,
111186
112197
  readResponseTextBounded as readResponseTextBounded3
111187
112198
  } from "@opengeni/network";
@@ -111273,7 +112284,7 @@ async function providerJson2(input, url, headers) {
111273
112284
  headers: { accept: "application/json", ...headers },
111274
112285
  signal
111275
112286
  };
111276
- response = input.fetchImpl ? await input.fetchImpl(url, requestInit) : await pinnedFetch6(url, requestInit, input.settings, {
112287
+ response = input.fetchImpl ? await input.fetchImpl(url, requestInit) : await pinnedFetch7(url, requestInit, input.settings, {
111277
112288
  label: `${input.provider} PR Review repository verification`,
111278
112289
  requireHttpsOutsideLocalTest: true
111279
112290
  });
@@ -144701,7 +145712,17 @@ function createAppComposition(deps) {
144701
145712
  const interactionSecrets = createVaultInteractionSecretsPort({
144702
145713
  db: routeDeps.db,
144703
145714
  encryptionKey: environmentsEncryptionKeyBytes14(routeDeps.settings) ?? null,
144704
- providersFor: (workspaceId, subjectId) => vaultProviderRegistryFor(routeDeps, { workspaceId, subjectId })
145715
+ providersFor: (workspaceId, subjectId, principal) => vaultProviderRegistryFor(routeDeps, {
145716
+ workspaceId,
145717
+ subjectId,
145718
+ ...principal ? {
145719
+ executionContext: {
145720
+ sessionId: principal.sessionId,
145721
+ turnId: principal.turnId,
145722
+ attemptId: principal.attemptId
145723
+ }
145724
+ } : {}
145725
+ })
144705
145726
  });
144706
145727
  registerBrowserSessionRoutes(app, routeDeps, { interactionSecrets });
144707
145728
  registerComputerSessionRoutes(app, routeDeps, { interactionSecrets });
@@ -146289,6 +147310,7 @@ export {
146289
147310
  apiRequestBindingsForTransportPeer,
146290
147311
  reconcileScreenControlOnHello,
146291
147312
  withAccessGrantSessionRlsContext,
147313
+ closeNativeExternalVaultProviders,
146292
147314
  SlackBotProviderError,
146293
147315
  createOpenGeniSlackBotInteractionClient,
146294
147316
  startTemporalScheduleCleanupPump,
@@ -146329,4 +147351,4 @@ export {
146329
147351
  withDefaultEnabledCapabilityMcpTools,
146330
147352
  workflowIdForSession4 as workflowIdForSession
146331
147353
  };
146332
- //# sourceMappingURL=chunk-OT56OY4V.js.map
147354
+ //# sourceMappingURL=chunk-PQBHZ2YH.js.map