@keboola/api-fixtures 44.0.0 → 46.0.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
package/CHANGELOG.md CHANGED
@@ -1,5 +1,23 @@
1
1
  # @keboola/api-fixtures
2
2
 
3
+ ## 46.0.0
4
+
5
+ ### Minor Changes
6
+
7
+ - App fixtures name their production config versions: `production` carries `desiredConfigVersion`, `actualConfigVersion` and `desiredCreatedAt` from the deployments it points at, `null` when nothing is deployed.
8
+
9
+ ### Patch Changes
10
+
11
+ - Updated dependencies:
12
+ - @keboola/api-client@51.0.0
13
+
14
+ ## 45.0.0
15
+
16
+ ### Patch Changes
17
+
18
+ - Updated dependencies:
19
+ - @keboola/api-client@50.0.0
20
+
3
21
  ## 44.0.0
4
22
 
5
23
  ### Minor Changes
package/dist/index.cjs CHANGED
@@ -1,6 +1,6 @@
1
1
  Object.defineProperty(exports, Symbol.toStringTag, { value: "Module" });
2
2
  let _keboola_api_client_constants = require("@keboola/api-client/constants");
3
- //#region src/clients/apps/deployments.ts
3
+ // src/clients/apps/deployments.ts
4
4
  const APP_ID = "374811";
5
5
  const deploymentId = (suffix) => `019f1c3a-${suffix}-7c1e-b4a2-0d9f3e6a8c15`;
6
6
  const archivedDeployment = {
@@ -79,8 +79,7 @@ const listDeployments = () => [
79
79
  buildFailedDeployment,
80
80
  runFailedDeployment
81
81
  ];
82
- //#endregion
83
- //#region src/clients/apps/apps.ts
82
+ // src/clients/apps/apps.ts
84
83
  const base$1 = {
85
84
  id: APP_ID,
86
85
  projectId: "14",
@@ -91,13 +90,19 @@ const base$1 = {
91
90
  url: "https://hello-dashboard-374811.hub.canary-orion.keboola.dev",
92
91
  hasManagedGitRepo: false
93
92
  };
94
- const production = (deployment) => ({
95
- desiredDeploymentId: deployment.id,
96
- actualDeploymentId: deployment.id
93
+ const production = (desired, actual = desired) => ({
94
+ desiredDeploymentId: desired.id,
95
+ actualDeploymentId: actual.id,
96
+ desiredConfigVersion: desired.configVersion,
97
+ actualConfigVersion: actual.configVersion,
98
+ desiredCreatedAt: desired.createdAt
97
99
  });
98
100
  const NOTHING_IN_PRODUCTION = {
99
101
  desiredDeploymentId: null,
100
- actualDeploymentId: null
102
+ actualDeploymentId: null,
103
+ desiredConfigVersion: null,
104
+ actualConfigVersion: null,
105
+ desiredCreatedAt: null
101
106
  };
102
107
  const neverDeployedApp = {
103
108
  ...base$1,
@@ -130,10 +135,7 @@ const runningApp = {
130
135
  */
131
136
  const promotingApp = {
132
137
  ...base$1,
133
- production: {
134
- desiredDeploymentId: deploymentFixtures.staged.id,
135
- actualDeploymentId: deploymentFixtures.live.id
136
- },
138
+ production: production(deploymentFixtures.staged, deploymentFixtures.live),
137
139
  state: "running"
138
140
  };
139
141
  const suspendedApp = {
@@ -168,8 +170,7 @@ const listApps = () => [
168
170
  readdress(suspendedApp, "374812"),
169
171
  readdress(neverDeployedApp, "374813")
170
172
  ];
171
- //#endregion
172
- //#region src/clients/apps/runs.ts
173
+ // src/clients/apps/runs.ts
173
174
  const base = {
174
175
  appId: APP_ID,
175
176
  runtimeSize: "small",
@@ -255,8 +256,7 @@ const listAppRuns = () => [
255
256
  runningRun,
256
257
  finishedRun
257
258
  ];
258
- //#endregion
259
- //#region src/clients/developerPortal/apps.ts
259
+ // src/clients/developerPortal/apps.ts
260
260
  const keboolaVendor = {
261
261
  id: "keboola",
262
262
  name: "Keboola",
@@ -598,8 +598,7 @@ const developerPortalFixtures = {
598
598
  },
599
599
  changes: { single: appChange }
600
600
  };
601
- //#endregion
602
- //#region src/clients/management/applicationTokens.ts
601
+ // src/clients/management/applicationTokens.ts
603
602
  const usedToken = {
604
603
  id: 13702,
605
604
  description: "Sandboxes API",
@@ -663,8 +662,7 @@ const applicationTokenFixtures = {
663
662
  expiring: expiringToken,
664
663
  created: createdToken
665
664
  };
666
- //#endregion
667
- //#region src/clients/management/uiApps.ts
665
+ // src/clients/management/uiApps.ts
668
666
  const activeApp = {
669
667
  stringId: "kbc",
670
668
  name: "Keboola Connection UI",
@@ -719,8 +717,7 @@ const uiAppFixtures = {
719
717
  inactive: inactiveApp,
720
718
  detail: appDetail
721
719
  };
722
- //#endregion
723
- //#region src/clients/storage/bootstrap.ts
720
+ // src/clients/storage/bootstrap.ts
724
721
  /** The stack an MSW-backed test points its client at, unless a caller passes its own. */
725
722
  const DEFAULT_BASE_URL = "https://connection.test";
726
723
  /**
@@ -753,8 +750,8 @@ const getStackInfo = ({ baseUrl = DEFAULT_BASE_URL, services = Object.values(_ke
753
750
  /**
754
751
  * The verified master token `GET /v2/storage/tokens/verify` returns.
755
752
  *
756
- * - Complete on purpose: `api.context.project.sapiToken` is this object verbatim and hooks read deep
757
- * into it (`owner.id`, `admin.role`, `adminOwner.email`), so a partial body surfaces as
753
+ * - Complete on purpose: kbc-ui's `useProject().sapiToken` is this object verbatim and hooks read
754
+ * deep into it (`owner.id`, `admin.role`, `adminOwner.email`), so a partial body surfaces as
758
755
  * `undefined`s far from the test that caused them.
759
756
  * - Every permission flag is granted; a test needing a restricted token overrides the handler.
760
757
  */
@@ -844,8 +841,7 @@ const getDevBranches = () => [{
844
841
  created: "2024-01-01T00:00:00Z",
845
842
  creatorToken: []
846
843
  }];
847
- //#endregion
848
- //#region src/clients/storage/bucketSharing.ts
844
+ // src/clients/storage/bucketSharing.ts
849
845
  /**
850
846
  * The projects and users `GET /v2/storage/sharing-targets` returns.
851
847
  *
@@ -886,8 +882,7 @@ const getSharingTargets = () => ({
886
882
  }
887
883
  ]
888
884
  });
889
- //#endregion
890
- //#region src/clients/storage/tables.ts
885
+ // src/clients/storage/tables.ts
891
886
  const tableBase = {
892
887
  transactional: false,
893
888
  indexType: null,
@@ -1040,8 +1035,7 @@ const tableFixtures = {
1040
1035
  recentlyUpdated: recentlyUpdatedTable,
1041
1036
  large: largeTable
1042
1037
  };
1043
- //#endregion
1044
- //#region src/fixtures.ts
1038
+ // src/fixtures.ts
1045
1039
  const fixtures = {
1046
1040
  management: {
1047
1041
  applicationTokens: {
@@ -1098,7 +1092,6 @@ const fixtures = {
1098
1092
  fixtures: developerPortalFixtures
1099
1093
  }
1100
1094
  };
1101
- //#endregion
1102
1095
  exports.DEFAULT_BASE_URL = DEFAULT_BASE_URL;
1103
1096
  exports.appFixtures = appFixtures;
1104
1097
  exports.applicationTokenFixtures = applicationTokenFixtures;
@@ -1 +1 @@
1
- {"version":3,"file":"index.cjs","names":["base","ServiceId"],"sources":["../src/clients/apps/deployments.ts","../src/clients/apps/apps.ts","../src/clients/apps/runs.ts","../src/clients/developerPortal/apps.ts","../src/clients/management/applicationTokens.ts","../src/clients/management/uiApps.ts","../src/clients/storage/bootstrap.ts","../src/clients/storage/bucketSharing.ts","../src/clients/storage/tables.ts","../src/fixtures.ts"],"sourcesContent":["import type { Deployment } from '@keboola/api-client/apps/types';\n\nexport const APP_ID = '374811';\n\n// UUIDv7: ids sort in creation order.\nconst deploymentId = (suffix: string) => `019f1c3a-${suffix}-7c1e-b4a2-0d9f3e6a8c15`;\n\n// Deleted: the row outlives its workload and stays in history.\nconst archivedDeployment = {\n id: deploymentId('0a41'),\n configVersion: '14',\n gitCommitSha: null,\n runtimeSize: 'tiny' as const,\n buildState: 'ready' as const,\n runState: 'stopped' as const,\n archived: true,\n archivedAt: '2026-08-15T11:03:02+00:00',\n createdAt: '2026-08-10T09:12:44+00:00',\n} satisfies Deployment;\n\n// Serving production — the one `appFixtures.running.production` points at.\nconst liveDeployment = {\n id: deploymentId('1b52'),\n configVersion: '16',\n gitCommitSha: null,\n runtimeSize: 'small' as const,\n buildState: 'ready' as const,\n runState: 'running' as const,\n archived: false,\n archivedAt: null,\n createdAt: '2026-08-15T11:02:58+00:00',\n} satisfies Deployment;\n\n// Created with `promote: false`: built, never started.\nconst stagedDeployment = {\n id: deploymentId('2c63'),\n configVersion: '18',\n gitCommitSha: null,\n runtimeSize: 'small' as const,\n buildState: 'ready' as const,\n runState: 'neverRun' as const,\n archived: false,\n archivedAt: null,\n createdAt: '2026-08-17T08:41:19+00:00',\n} satisfies Deployment;\n\n// Can never run — distinct from a run failure. Unreachable today (deployments start from a\n// ready image); the headline table treats it as a contract.\nconst buildFailedDeployment = {\n id: deploymentId('3d74'),\n configVersion: '19',\n gitCommitSha: null,\n runtimeSize: 'small' as const,\n buildState: 'failed' as const,\n runState: 'neverRun' as const,\n archived: false,\n archivedAt: null,\n createdAt: '2026-08-17T09:05:33+00:00',\n} satisfies Deployment;\n\n// Built fine, crashed on every run — `getAppRuns` carries the cause.\nconst runFailedDeployment = {\n id: deploymentId('4e85'),\n configVersion: '20',\n gitCommitSha: null,\n runtimeSize: 'small' as const,\n buildState: 'ready' as const,\n runState: 'failed' as const,\n archived: false,\n archivedAt: null,\n createdAt: '2026-08-17T09:31:07+00:00',\n} satisfies Deployment;\n\nexport const deploymentFixtures = {\n archived: archivedDeployment,\n live: liveDeployment,\n staged: stagedDeployment,\n buildFailed: buildFailedDeployment,\n runFailed: runFailedDeployment,\n} satisfies Record<'archived' | 'live' | 'staged' | 'buildFailed' | 'runFailed', Deployment>;\n\nexport const getDeployment = (): Deployment => liveDeployment;\n\n/**\n * All deployments as one history.\n *\n * - Includes the failed ones: `runFixtures.failed` joins to the last.\n * - Oldest first on purpose: the endpoint specifies no order, so consumers must sort.\n */\nexport const listDeployments = (): Deployment[] => [\n archivedDeployment,\n liveDeployment,\n stagedDeployment,\n buildFailedDeployment,\n runFailedDeployment,\n];\n","import type { App } from '@keboola/api-client/apps/types';\n\nimport { APP_ID, deploymentFixtures } from './deployments';\n\nconst APP_URL = 'https://hello-dashboard-374811.hub.canary-orion.keboola.dev';\n\nconst base = {\n id: APP_ID,\n projectId: '14',\n componentId: 'keboola.data-apps',\n branchId: '6',\n configId: '01kz9kny4n49x3xk0e4k8ynpmq',\n type: 'streamlit' as const,\n url: APP_URL,\n hasManagedGitRepo: false,\n};\n\nconst production = (deployment: (typeof deploymentFixtures)[keyof typeof deploymentFixtures]) => ({\n desiredDeploymentId: deployment.id,\n actualDeploymentId: deployment.id,\n});\n\nconst NOTHING_IN_PRODUCTION = { desiredDeploymentId: null, actualDeploymentId: null };\n\n// Created through `/v2`, nothing deployed yet: the URL is reserved and publicly 404s.\nconst neverDeployedApp = {\n ...base,\n production: NOTHING_IN_PRODUCTION,\n state: 'notDeployed' as const,\n} satisfies App;\n\n/**\n * An app created and started through `/v1`, serving real traffic (AJDA-3140, probe P1: HTTP 200,\n * 8340 B at the moment this was read), which `/v2` nonetheless reports as `notDeployed` with an\n * empty `production` because it was never adopted into the deployments model.\n *\n * The Builder must never read \"is this app serving\" off `state` alone — here that answer is\n * wrong in the most damaging direction.\n */\nconst legacyV1ServingApp = {\n ...base,\n id: '374899',\n production: NOTHING_IN_PRODUCTION,\n state: 'notDeployed' as const,\n} satisfies App;\n\n// Serving the live deployment.\nconst runningApp = {\n ...base,\n production: production(deploymentFixtures.live),\n state: 'running' as const,\n} satisfies App;\n\n/**\n * A blue/green promotion in flight: the staged deployment has been asked for, the live one is still\n * what traffic reaches. `state` stays `running` throughout — the rollout is only visible as\n * `desiredDeploymentId !== actualDeploymentId`.\n */\nconst promotingApp = {\n ...base,\n production: {\n desiredDeploymentId: deploymentFixtures.staged.id,\n actualDeploymentId: deploymentFixtures.live.id,\n },\n state: 'running' as const,\n} satisfies App;\n\n// Idle between visits and armed to wake on the next request — normal, not an outage.\nconst suspendedApp = {\n ...base,\n production: production(deploymentFixtures.live),\n state: 'suspended' as const,\n} satisfies App;\n\n// Stopped by a failure and will not auto-wake: a visitor sees the restart-disabled page until\n// someone starts it explicitly.\nconst disabledApp = {\n ...base,\n production: production(deploymentFixtures.runFailed),\n state: 'disabled' as const,\n} satisfies App;\n\nexport const appFixtures = {\n neverDeployed: neverDeployedApp,\n legacyV1Serving: legacyV1ServingApp,\n running: runningApp,\n promoting: promotingApp,\n suspended: suspendedApp,\n disabled: disabledApp,\n} satisfies Record<\n 'neverDeployed' | 'legacyV1Serving' | 'running' | 'promoting' | 'suspended' | 'disabled',\n App\n>;\n\nexport const getApp = (): App => runningApp;\n\n/**\n * The named fixtures above are all the *same* app in different states, which is what a detail\n * page shows. A listing shows different apps, so each entry past the first is re-addressed.\n */\nconst readdress = (app: App, id: string): App => ({\n ...app,\n id,\n url: `https://data-app-${id}.hub.canary-orion.keboola.dev`,\n});\n\nexport const listApps = (): App[] => [\n runningApp,\n readdress(suspendedApp, '374812'),\n readdress(neverDeployedApp, '374813'),\n];\n","import type { AppRun } from '@keboola/api-client/apps/types';\n\nimport { APP_ID, deploymentFixtures } from './deployments';\n\nconst base = {\n appId: APP_ID,\n runtimeSize: 'small',\n runtimeBackendType: 'streamlit',\n imageVersion: '1.14.2',\n mode: 'prod',\n};\n\nconst runningRun = {\n ...base,\n id: '4f2d8c1a-0b76-4e35-9a12-5c8e7d3b0f41',\n deploymentId: deploymentFixtures.live.id,\n configVersion: deploymentFixtures.live.configVersion,\n state: 'running' as const,\n createdAt: '2026-08-15T11:02:58+00:00',\n startedAt: '2026-08-15T11:03:41+00:00',\n stoppedAt: null,\n startupLogs: null,\n failureReason: null,\n} satisfies AppRun;\n\nconst finishedRun = {\n ...base,\n id: '9c0a7e42-31bd-4f88-b6d5-2ea41f907c3b',\n deploymentId: deploymentFixtures.archived.id,\n configVersion: deploymentFixtures.archived.configVersion,\n state: 'finished' as const,\n createdAt: '2026-08-10T09:12:44+00:00',\n startedAt: '2026-08-10T09:13:29+00:00',\n stoppedAt: '2026-08-15T11:03:02+00:00',\n startupLogs: null,\n failureReason: null,\n} satisfies AppRun;\n\n/**\n * A classified failure transcribed from canary (AJDA-3140, probe P1). `startedAt` is `null`\n * even though a cause was attributed — the container executed but its startup probe never\n * passed, so a classified failure says nothing about how far the run got.\n */\nconst failedRun = {\n ...base,\n id: 'ba53f9d0-7c41-4a2e-8f16-d0b9e254a7c6',\n deploymentId: deploymentFixtures.runFailed.id,\n configVersion: deploymentFixtures.runFailed.configVersion,\n state: 'failed' as const,\n createdAt: '2026-08-17T09:31:07+00:00',\n startedAt: null,\n stoppedAt: '2026-08-17T09:33:52+00:00',\n startupLogs:\n '[INFO] Starting app\\n[ERROR] App must have keboola-config/nginx/ directory. Missing: /app/keboola-config/nginx\\n',\n failureReason: {\n reason: 'StartupProbeFailed',\n message: 'App must have keboola-config/nginx/ directory. Missing: /app/keboola-config/nginx',\n },\n} satisfies AppRun;\n\n/**\n * A run that belongs to the app itself rather than to a deployment — what every run of a\n * `/v1`-created app looks like. `deploymentId: null` is permanent for these, not drift.\n */\nconst legacyRun = {\n ...base,\n id: '1d7b4e05-8a92-4c63-b0f7-3e6a5c8192d4',\n deploymentId: null,\n configVersion: '2',\n state: 'running' as const,\n createdAt: '2026-08-17T10:02:11+00:00',\n startedAt: '2026-08-17T10:02:51+00:00',\n stoppedAt: null,\n startupLogs: null,\n failureReason: null,\n} satisfies AppRun;\n\nexport const runFixtures = {\n running: runningRun,\n finished: finishedRun,\n failed: failedRun,\n legacy: legacyRun,\n} satisfies Record<'running' | 'finished' | 'failed' | 'legacy', AppRun>;\n\nexport const getAppRun = (): AppRun => runningRun;\n\n/**\n * Every run this app has, newest first — the order the endpoint documents, so a consumer that\n * relies on it (`[latest] = runs`) is exercised against data that keeps the promise rather than\n * data that happens to contradict it.\n */\nexport const listAppRuns = (): AppRun[] => [legacyRun, failedRun, runningRun, finishedRun];\n","import type {\n AdminVendor,\n App,\n AppChange,\n AppVendor,\n ServiceAccount,\n User,\n Vendor,\n VendorListItem,\n} from '@keboola/api-client/developerPortal/types';\n\n// `isTrusted` is the raw tinyint here and a boolean in `vendorDetail` below. That is not a fixture\n// inconsistency: `GET /vendors` returns the row unconverted, every other vendor endpoint runs it\n// through `publicGetVendor`. A fixture that smoothed it over would hide the difference consumers\n// have to handle.\n//\n// `type: 'keboola'` is what the public catalog's \"Supported by Keboola\" filter matches on — NOT\n// `id`, so a fixture that only set the id would silently fail to exercise that filter.\nconst keboolaVendor = {\n id: 'keboola',\n name: 'Keboola',\n email: 'support@keboola.com',\n address: 'Prague, Czech Republic',\n type: 'keboola',\n projectUrl: null,\n isTrusted: 1,\n} satisfies VendorListItem;\n\nconst thirdPartyVendor = {\n id: 'acme',\n name: 'Acme Co.',\n email: 'dev@acme.example',\n address: 'Springfield',\n projectUrl: 'https://connection.keboola.com/admin/projects/1234',\n type: 'other',\n isTrusted: 0,\n} satisfies VendorListItem;\n\n/** The same vendor as `GET /vendors/{vendor}` returns it — `isTrusted` converted to a boolean. */\nconst vendorDetail = {\n ...thirdPartyVendor,\n isTrusted: false,\n} satisfies Vendor;\n\n// A pending, self-registered vendor. The `_v` id prefix is the marker that keeps it out of the\n// user-selectable vendor list until an admin approves and renames it. Only `GET /admin/vendors`\n// returns it — the public list filters on `isApproved`, and is the only response carrying the flag.\nconst pendingVendor = {\n id: '_v1699999999999',\n name: 'Pending Startup',\n email: 'hello@pending.example',\n address: 'Berlin',\n type: 'other',\n projectUrl: null,\n isApproved: false,\n isPublic: false,\n isTrusted: false,\n} satisfies AdminVendor;\n\n// The two public vendors as `GET /admin/vendors` returns them: approved, and `isTrusted` converted\n// to a boolean. They exist so the admin list is not a single pending row — a test that only ever\n// sees `pendingVendor` never exercises the approved path the admin table mostly renders.\nconst keboolaAdminVendor = {\n ...keboolaVendor,\n isApproved: true,\n isPublic: true,\n isTrusted: true,\n} satisfies AdminVendor;\n\nconst thirdPartyAdminVendor = {\n ...thirdPartyVendor,\n isApproved: true,\n isPublic: true,\n isTrusted: false,\n} satisfies AdminVendor;\n\n// The vendor as it arrives joined onto an app: five columns, none of the flags.\nconst appVendor = (vendor: VendorListItem): AppVendor => ({\n id: vendor.id,\n name: vendor.name,\n address: vendor.address,\n email: vendor.email,\n type: vendor.type,\n});\n\n/** A published, fully-populated extractor — the shape that passes `hasAllFieldsForPublishing`. */\nconst publishedExtractor = {\n id: 'keboola.ex-db-snowflake',\n vendor: appVendor(keboolaVendor),\n name: 'Snowflake',\n type: 'extractor',\n shortDescription: 'Extract data from Snowflake',\n longDescription: '## Snowflake extractor\\n\\nExtracts tables from a Snowflake database.',\n licenseUrl: 'https://github.com/keboola/ex-db-snowflake/blob/master/LICENSE.md',\n documentationUrl: 'https://help.keboola.com/components/extractors/database/snowflake/',\n sourceCodeUrl: 'https://github.com/keboola/ex-db-snowflake',\n categories: ['Database'],\n complexity: 'easy',\n uiOptions: ['genericDockerUI'],\n defaultBucket: true,\n defaultBucketStage: 'in',\n stagingStorageInput: 'local',\n stagingStorageOutput: 'local',\n logger: 'standard',\n isPublic: true,\n isDeprecated: false,\n fees: false,\n repository: { type: 'ecr', uri: 'keboola/ex-db-snowflake', tag: '1.9.0' },\n // The 128 filename ends in a 13-digit millisecond timestamp, so `getIcon` uses it. A legacy\n // incremental filename here would make `getIcon` fall back to the 64px variant.\n icon: {\n '64': 'https://ui.keboola-assets.com/developer-portal/icons/keboola.ex-db-snowflake/64/1699999999999.png',\n '128':\n 'https://ui.keboola-assets.com/developer-portal/icons/keboola.ex-db-snowflake/128/1699999999999.png',\n },\n version: 12,\n createdBy: 'support@keboola.com',\n updatedOn: '2024-06-01T09:00:00+0200',\n uri: 'docker/keboola.ex-db-snowflake',\n isPublished: true,\n publishedVersion: 12,\n publishingStatus: 'public',\n} satisfies App;\n\n/** A private third-party app with a pending publishing request. */\nconst requestedApp = {\n id: 'acme.wr-widgets',\n vendor: appVendor(thirdPartyVendor),\n name: 'Widget Writer',\n type: 'writer',\n shortDescription: 'Write data to Widgets',\n longDescription: 'Pushes tables into the Widgets API.',\n licenseUrl: 'https://acme.example/license',\n documentationUrl: 'https://acme.example/docs',\n uiOptions: ['genericDockerUI'],\n repository: { type: 'quay', uri: 'acme/wr-widgets', tag: '0.3.1' },\n icon: {\n '64': 'https://ui.keboola-assets.com/developer-portal/icons/acme.wr-widgets/64/1699999999998.png',\n '128':\n 'https://ui.keboola-assets.com/developer-portal/icons/acme.wr-widgets/128/1699999999998.png',\n },\n isPublic: false,\n isDeprecated: false,\n version: 3,\n createdBy: 'dev@acme.example',\n updatedOn: '2024-05-20T14:12:00+0200',\n uri: 'docker/acme.wr-widgets',\n isPublished: false,\n publishingStatus: 'requested',\n publishingRequest: { createdOn: '2024-05-20T14:12:00+0200', rejectionReason: null },\n} satisfies App;\n\n/** A rejected app — carries the reason the vendor sees on its detail page. */\nconst rejectedApp = {\n id: 'acme.app-analyzer',\n vendor: appVendor(thirdPartyVendor),\n name: 'Analyzer',\n type: 'application',\n shortDescription: 'Analyze things',\n isPublic: false,\n isDeprecated: false,\n version: 1,\n createdBy: 'dev@acme.example',\n uri: 'docker/acme.app-analyzer',\n isPublished: false,\n publishingStatus: 'rejected',\n publishingRequest: {\n createdOn: '2024-04-02T11:00:00+0200',\n rejectionReason: 'Documentation URL is missing and the icon is not 256×256.',\n },\n} satisfies App;\n\n/** A deprecated app with an expiry date and a suggested replacement. */\nconst deprecatedApp = {\n id: 'keboola.ex-legacy',\n vendor: appVendor(keboolaVendor),\n name: 'Legacy Extractor',\n type: 'extractor',\n shortDescription: 'Superseded',\n isPublic: true,\n isDeprecated: true,\n expiredOn: '2025-01-01',\n replacementApp: 'keboola.ex-db-snowflake',\n version: 40,\n uri: 'docker/keboola.ex-legacy',\n isPublished: true,\n publishedVersion: 38,\n publishingStatus: 'public',\n} satisfies App;\n\n/**\n * A `data-app`, the type whose edit form hides ~14 fields. Deliberately minimal: a fixture carrying\n * `configurationSchema` or `actions` here would misrepresent what the form can produce.\n */\nconst dataApp = {\n id: 'acme.data-app-dashboard',\n vendor: appVendor(thirdPartyVendor),\n name: 'Dashboard',\n type: 'data-app',\n shortDescription: 'A Streamlit dashboard',\n isPublic: false,\n isDeprecated: false,\n version: 2,\n uri: 'docker/acme.data-app-dashboard',\n isPublished: false,\n publishingStatus: 'private',\n} satisfies App;\n\n/** A `code-pattern`, whose `configurationSchema.supported_components` must be a non-empty array. */\nconst codePatternApp = {\n id: 'acme.code-pattern-etl',\n vendor: appVendor(thirdPartyVendor),\n name: 'ETL Pattern',\n type: 'code-pattern',\n shortDescription: 'Generates ETL code',\n actions: ['generate'],\n configurationSchema: { supported_components: ['keboola.snowflake-transformation'] },\n isPublic: false,\n version: 1,\n uri: 'docker/acme.code-pattern-etl',\n isPublished: false,\n publishingStatus: 'private',\n} satisfies App;\n\n/**\n * An app typed `other`. The public catalog excludes it entirely, so it exists to prove that\n * exclusion rather than to be rendered.\n */\nconst otherTypeApp = {\n id: 'acme.misc-thing',\n vendor: appVendor(thirdPartyVendor),\n name: 'Misc Thing',\n type: 'other',\n isPublic: true,\n version: 1,\n uri: 'docker/acme.misc-thing',\n isPublished: true,\n publishedVersion: 1,\n publishingStatus: 'public',\n} satisfies App;\n\n// `username` is the Cognito login, which is the user's email — the list endpoints return no\n// separate `email`, and no account state (`status`, `isEnabled`, `mfa`) either.\nconst humanUser = {\n username: 'dev@acme.example',\n name: 'Dev Eloper',\n vendors: ['acme'],\n createdOn: '2024-01-10T08:00:00+0100',\n} satisfies User;\n\n/** A recently added member, for a test that orders the list by `createdOn`. */\nconst newestUser = {\n username: 'new@acme.example',\n name: 'New Hire',\n vendors: ['acme'],\n createdOn: '2024-06-25T08:00:00+0200',\n} satisfies User;\n\n/** A member of no vendor — reachable only through the admin list. */\nconst vendorlessUser = {\n username: 'gone@acme.example',\n name: 'Alan Gone',\n vendors: [],\n createdOn: '2023-02-01T08:00:00+0100',\n} satisfies User;\n\n/** A Keboola staff member — eligible for \"make admin\" because they belong to the `keboola` vendor. */\nconst keboolaStaffUser = {\n username: 'staff@keboola.com',\n name: 'Kai Staff',\n vendors: ['keboola'],\n createdOn: '2023-09-14T08:00:00+0200',\n} satisfies User;\n\n/** A freshly created service account, including the one-time `password`. */\nconst newServiceAccount = {\n username: 'acme+ci',\n description: 'CI deploy pipeline',\n createdOn: '2024-07-01T10:00:00+0200',\n password: 'one-time-secret-shown-once',\n} satisfies ServiceAccount;\n\n/** The same account as later listed — note there is no `password`; it is unreadable after creation. */\nconst existingServiceAccount = {\n username: 'acme+release',\n description: 'Release automation',\n createdOn: '2024-03-11T10:00:00+0100',\n} satisfies ServiceAccount;\n\nconst appChange = {\n id: 'acme.wr-widgets',\n createdOn: '2024-05-20T14:12:00+0200',\n createdBy: 'dev@acme.example',\n changes: [\n {\n attribute: 'shortDescription',\n oldValue: 'Writes widgets',\n newValue: 'Write data to Widgets',\n description: 'Attribute shortDescription changed',\n },\n {\n attribute: 'repository',\n oldValue: { type: 'quay', uri: 'acme/wr-widgets', tag: '0.3.0' },\n newValue: { type: 'quay', uri: 'acme/wr-widgets', tag: '0.3.1' },\n description: 'Attribute repository changed',\n },\n ],\n} satisfies AppChange;\n\n/** The public catalog list: published, non-`other` apps only. */\nexport const listPublishedApps = (): App[] => [publishedExtractor, deprecatedApp];\n\n/** A vendor's own apps, across every publishing state the table renders. */\nexport const listVendorApps = (): App[] => [requestedApp, rejectedApp, dataApp, codePatternApp];\n\n/** The admin list — every vendor, plus the `other`-typed app the public catalog drops. */\nexport const listAllApps = (): App[] => [\n publishedExtractor,\n requestedApp,\n rejectedApp,\n deprecatedApp,\n dataApp,\n codePatternApp,\n otherTypeApp,\n];\n\n/** `GET /vendors` — approved and public only, so the pending vendor cannot appear here. */\nexport const listVendors = (): VendorListItem[] => [keboolaVendor, thirdPartyVendor];\n\n/** `GET /vendors/{vendor}` — the converted shape. */\nexport const getVendor = (): Vendor => vendorDetail;\n\n/** `GET /admin/vendors` — every vendor, and the only response carrying the approval flags. */\nexport const listAllVendors = (): AdminVendor[] => [\n keboolaAdminVendor,\n thirdPartyAdminVendor,\n pendingVendor,\n];\n\nexport const listUsers = (): User[] => [humanUser, newestUser, vendorlessUser, keboolaStaffUser];\n\nexport const listServiceAccounts = (): ServiceAccount[] => [existingServiceAccount];\n\nexport const listAppChanges = (): AppChange[] => [appChange];\n\n/** Named fixtures, for a test that needs one specific state. */\nexport const developerPortalFixtures = {\n apps: {\n published: publishedExtractor,\n requested: requestedApp,\n rejected: rejectedApp,\n deprecated: deprecatedApp,\n dataApp,\n codePattern: codePatternApp,\n otherType: otherTypeApp,\n },\n vendors: {\n keboola: keboolaVendor,\n thirdParty: thirdPartyVendor,\n detail: vendorDetail,\n pending: pendingVendor,\n keboolaAdmin: keboolaAdminVendor,\n thirdPartyAdmin: thirdPartyAdminVendor,\n },\n users: {\n human: humanUser,\n newest: newestUser,\n vendorless: vendorlessUser,\n keboolaStaff: keboolaStaffUser,\n },\n serviceAccounts: {\n created: newServiceAccount,\n existing: existingServiceAccount,\n },\n changes: { single: appChange },\n};\n","import type {\n ApplicationToken,\n CreatedApplicationToken,\n} from '@keboola/api-client/management/types';\n\nconst usedToken = {\n id: 13702,\n description: 'Sandboxes API',\n created: '2021-06-28T22:27:28+02:00',\n lastUsed: '2026-09-20T09:14:02+02:00',\n expires: null,\n isDisabled: false,\n isExpired: false,\n scopes: ['projects:read', 'manage:storage-tokens'],\n creator: { id: 7919, name: 'John Doe' },\n} satisfies ApplicationToken;\n\n// Never used — the only signal an operator has that deleting it is safe.\nconst neverUsedToken = {\n id: 13703,\n description: 'Job Runner (staging)',\n created: '2026-02-01T10:00:00+01:00',\n lastUsed: null,\n expires: null,\n isDisabled: false,\n isExpired: false,\n scopes: [],\n creator: { id: null, name: null },\n} satisfies ApplicationToken;\n\nconst expiringToken = {\n id: 13704,\n description: 'One-off migration',\n created: '2026-09-01T08:00:00+02:00',\n lastUsed: '2026-09-02T08:00:00+02:00',\n expires: '2026-10-01T08:00:00+02:00',\n isDisabled: false,\n isExpired: false,\n scopes: ['deleted-projects:read'],\n creator: { id: 7919, name: 'John Doe' },\n} satisfies ApplicationToken;\n\n// The create response — the only moment the plaintext secret exists.\nconst createdToken = {\n ...usedToken,\n id: 13705,\n description: 'Newly issued',\n lastUsed: null,\n token: '13705-abcdef0123456789abcdef0123456789abcdef01',\n} satisfies CreatedApplicationToken;\n\n/** A token that has been used and never expires. */\nexport const getApplicationToken = (): ApplicationToken => usedToken;\n\n/** Used, never-used and expiring tokens — the three states the list must render. */\nexport const getApplicationTokens = (): ApplicationToken[] => [\n usedToken,\n neverUsedToken,\n expiringToken,\n];\n\nexport const applicationTokenFixtures = {\n used: usedToken,\n neverUsed: neverUsedToken,\n expiring: expiringToken,\n created: createdToken,\n} satisfies {\n used: ApplicationToken;\n neverUsed: ApplicationToken;\n expiring: ApplicationToken;\n created: CreatedApplicationToken;\n};\n\nexport type { ApplicationToken, CreatedApplicationToken };\n","import type { UiApp, UiAppDetail } from '@keboola/api-client/management/types';\n\nconst activeApp = {\n stringId: 'kbc',\n name: 'Keboola Connection UI',\n version: '1.42.0',\n basePath: 'https://ui.keboola-assets.com/kbc/1.42.0/',\n type: 'text/javascript',\n scripts: ['https://ui.keboola-assets.com/kbc/1.42.0/scripts/main.js'],\n styles: ['https://ui.keboola-assets.com/kbc/1.42.0/styles/main.css'],\n isCritical: false,\n commitSha: 'a6bc947f1e2d3c4b5a6bc947f1e2d3c4b5a6bc94',\n} satisfies UiApp;\n\n// An app registered but never activated — only reachable through `includeInactive`.\nconst inactiveApp = {\n stringId: 'kbc.orphan',\n name: 'Orphaned build',\n version: null,\n basePath: null,\n type: null,\n scripts: [],\n styles: [],\n isCritical: false,\n commitSha: null,\n} satisfies UiApp;\n\nconst appDetail = {\n id: 41,\n stringId: 'kbc',\n name: 'Keboola Connection UI',\n created: '2015-02-12 11:10:09',\n versions: [\n {\n id: 1646,\n version: '1.42.0',\n created: '2026-09-01 08:12:44',\n isActive: true,\n isCritical: false,\n buildUrl: 'https://github.com/keboola/kbc-ui/actions/runs/1646',\n commitSha: 'a6bc947f1e2d3c4b5a6bc947f1e2d3c4b5a6bc94',\n },\n {\n id: 1645,\n version: '1.41.0',\n created: '2026-08-25 14:02:10',\n isActive: false,\n isCritical: true,\n buildUrl: 'https://github.com/keboola/kbc-ui/actions/runs/1645',\n commitSha: null,\n },\n ],\n} satisfies UiAppDetail;\n\n/** One UI application detail with an active and a superseded version. */\nexport const getUiApp = (): UiAppDetail => appDetail;\n\n/** An active application and one with no active version, as `includeInactive` returns them. */\nexport const getUiApps = (): UiApp[] => [activeApp, inactiveApp];\n\nexport const uiAppFixtures = {\n active: activeApp,\n inactive: inactiveApp,\n detail: appDetail,\n} satisfies { active: UiApp; inactive: UiApp; detail: UiAppDetail };\n\nexport type { UiApp, UiAppDetail };\n","import { ServiceId } from '@keboola/api-client/constants';\nimport type { DevBranch, StackInfo, StorageToken } from '@keboola/api-client/storage/types';\n\n/** The stack an MSW-backed test points its client at, unless a caller passes its own. */\nexport const DEFAULT_BASE_URL = 'https://connection.test';\n\ntype StackInfoOptions = {\n /** Stack the fixture describes; its host is what the announced service URLs are built on. */\n baseUrl?: string;\n /** Services the stack announces. Narrow it to test what a client does without one. */\n services?: ServiceId[];\n};\n\ntype StorageTokenOptions = {\n /** Stack the token was issued by — its `uri`. */\n baseUrl?: string;\n /** Project features `hasFeature()` should report — the token's `owner.features`. */\n features?: string[];\n};\n\n/**\n * The stack index `GET /v2/storage` returns.\n *\n * - Announces every `ServiceId` by default, each on its own host, so no service client is a dummy\n * that throws `ServiceUnavailableError` — a test for a queue / data-science / vault hook only\n * adds its handler.\n * - Defaulting to `Object.values(ServiceId)` is what keeps that exhaustive: a service added to the\n * client arrives here without an edit.\n */\nexport const getStackInfo = ({\n baseUrl = DEFAULT_BASE_URL,\n services = Object.values(ServiceId),\n}: StackInfoOptions = {}): StackInfo => {\n const { host } = new URL(baseUrl);\n\n return {\n api: host,\n documentation: 'https://developers.keboola.com',\n host,\n revision: 'test-revision',\n stack: 'test-stack',\n version: 'test-version',\n urlTemplates: { orchestrationJob: '' },\n services: services.map((id) => ({ id, url: `https://${id}.${host}` })),\n components: [],\n features: [],\n };\n};\n\n/**\n * The verified master token `GET /v2/storage/tokens/verify` returns.\n *\n * - Complete on purpose: `api.context.project.sapiToken` is this object verbatim and hooks read deep\n * into it (`owner.id`, `admin.role`, `adminOwner.email`), so a partial body surfaces as\n * `undefined`s far from the test that caused them.\n * - Every permission flag is granted; a test needing a restricted token overrides the handler.\n */\nexport const verifyStorageToken = ({\n baseUrl = DEFAULT_BASE_URL,\n features = [],\n}: StorageTokenOptions = {}): StorageToken => ({\n id: 'token-1',\n created: '2024-01-01T00:00:00Z',\n refreshed: '2024-01-01T00:00:00Z',\n description: 'Test token',\n uri: baseUrl,\n isMasterToken: true,\n canManageBuckets: true,\n canManageTokens: true,\n canReadAllFileUploads: true,\n canPurgeTrash: true,\n canManageProtectedDefaultBranch: true,\n canCreateJobs: true,\n canReadAllProjectEvents: true,\n canManageDevBranches: true,\n creatorToken: { id: 42, description: 'Test token' },\n expires: null,\n isExpired: false,\n isDisabled: false,\n isBYODB: false,\n dailyCapacity: 1000,\n bucketPermissions: {},\n owner: {\n id: 42,\n name: 'Test Project',\n type: 'project',\n region: 'us-east-1',\n created: '2024-01-01T00:00:00Z',\n expires: null,\n features,\n dataSizeBytes: 0,\n rowsCount: 0,\n hasMysql: false,\n hasSynapse: false,\n hasSnowflake: true,\n hasExasol: false,\n hasTeradata: false,\n hasBigquery: false,\n defaultBackend: 'snowflake',\n hasTryModeOn: 'false',\n limits: {},\n metrics: {},\n isDisabled: false,\n billedMonthlyPrice: null,\n dataRetentionTimeInDays: 30,\n assignedBackends: ['snowflake'],\n fileStorageProvider: 's3',\n timezone: null,\n isBYODB: false,\n usersCount: 1,\n },\n organization: { id: 'org-1', created: null },\n admin: {\n id: 100,\n name: 'Admin User',\n features: [],\n isOrganizationMember: true,\n role: 'admin',\n isActivated: true,\n },\n adminOwner: { id: 200, name: 'Owner User', email: 'owner@example.com' },\n});\n\n/**\n * The branch list `GET /v2/storage/dev-branches` returns — the default branch alone.\n *\n * - `context.defaultBranch` is read off it, so the entry must stay `isDefault: true`.\n * - The default branch has no creator, which `DevBranch` models as an empty `creatorToken`.\n */\nexport const getDevBranches = (): DevBranch[] => [\n {\n id: 1,\n name: 'Main',\n description: '',\n isDefault: true,\n created: '2024-01-01T00:00:00Z',\n creatorToken: [],\n },\n];\n","import type { SharingTargets } from '@keboola/api-client/storage/types';\n\n/**\n * The projects and users `GET /v2/storage/sharing-targets` returns.\n *\n * - Users come sorted by email, as Connection sorts them; their ids descend, so a list resorted by\n * id shows the wrong order.\n * - None is the admin behind `verifyStorageToken()`.\n */\nexport const getSharingTargets = (): SharingTargets => ({\n projects: [\n { id: 7, name: 'Linked project' },\n { id: 12, name: 'Other project' },\n { id: 100, name: 'Sales' },\n ],\n users: [\n { id: 34, name: 'Adam', email: 'adam@keboola.com' },\n { id: 21, name: 'Beata', email: 'beata@keboola.com' },\n { id: 7, name: 'Cyril', email: 'cyril@keboola.com' },\n ],\n});\n","import type { Table, TableDetail } from '@keboola/api-client/storage/types';\n\nconst bucket = {\n id: 'in.c-main',\n name: 'c-main',\n displayName: 'Main',\n stage: 'in' as const,\n description: 'Main input bucket',\n created: '2024-01-15T10:00:00+0100',\n lastChangeDate: '2024-06-01T09:00:00+0200',\n isMaintenance: false,\n isReadOnly: false,\n isSnowflakeSharedDatabase: false,\n hasExternalSchema: false,\n rowsCount: 150000,\n dataSizeBytes: 52428800,\n uri: 'https://connection.keboola.com/v2/storage/buckets/in.c-main',\n backend: 'snowflake' as const,\n backendPath: [],\n databaseName: 'KEBOOLA_1',\n color: null,\n idBranch: 0,\n owner: null,\n sharing: null,\n path: 'in.c-main',\n tables: 'https://connection.keboola.com/v2/storage/buckets/in.c-main',\n updated: '2024-06-01T09:00:00+0200',\n isLinkedBucket: false,\n bucketSharingAllowed: true,\n};\n\n// What every non-typed, non-alias Snowflake table carries besides its own identity and data.\nconst tableBase = {\n transactional: false,\n indexType: null,\n indexKey: [],\n distributionType: null,\n distributionKey: [],\n syntheticPrimaryKeyEnabled: false,\n isAliasable: true,\n isDescriptionSystemManaged: false,\n timestampType: 'MANAGED' as const,\n tableType: 'table',\n attributes: [],\n bucket,\n isTyped: false as const,\n isAlias: false as const,\n};\n\n// A freshly created table with no imports yet (non-typed, non-alias variant).\nconst freshTable = {\n ...tableBase,\n uri: 'https://connection.keboola.com/v2/storage/tables/in.c-main.users',\n id: 'in.c-main.users',\n name: 'users',\n displayName: 'Users',\n path: 'KEBOOLA_1.c-main.users',\n primaryKey: ['id'],\n metadata: [],\n columns: ['id', 'email', 'name', 'created_at'],\n columnMetadata: {},\n created: '2024-06-01T09:00:00+0200',\n lastImportDate: null,\n lastChangeDate: null,\n rowsCount: 0,\n dataSizeBytes: 0,\n} satisfies TableDetail;\n\n// A recently updated table with a moderate size (non-typed, non-alias variant).\nconst recentlyUpdatedTable = {\n ...tableBase,\n uri: 'https://connection.keboola.com/v2/storage/tables/in.c-main.orders',\n id: 'in.c-main.orders',\n name: 'orders',\n displayName: 'Orders',\n path: 'KEBOOLA_1.c-main.orders',\n primaryKey: ['order_id'],\n metadata: [\n {\n id: 'mt1',\n key: 'KBC.createdBy.component.id',\n value: 'keboola.python-transformation',\n provider: 'keboola',\n timestamp: '2024-06-01T09:00:00+0200',\n },\n ],\n columns: ['order_id', 'user_id', 'total', 'status', 'created_at', 'updated_at'],\n columnMetadata: {\n order_id: [\n {\n id: 'm1',\n key: 'KBC.datatype.type',\n value: 'INTEGER',\n provider: 'keboola',\n timestamp: '2024-06-01T09:00:00+0200',\n },\n ],\n },\n created: '2024-01-15T10:00:00+0100',\n lastImportDate: '2024-06-01T09:00:00+0200',\n lastChangeDate: '2024-06-01T09:00:00+0200',\n rowsCount: 24500,\n dataSizeBytes: 10485760,\n} satisfies TableDetail;\n\n// A large table with many rows representing high-volume data (non-typed, non-alias variant).\nconst largeTable = {\n ...tableBase,\n uri: 'https://connection.keboola.com/v2/storage/tables/in.c-main.events',\n id: 'in.c-main.events',\n name: 'events',\n displayName: 'Events',\n path: 'KEBOOLA_1.c-main.events',\n primaryKey: [],\n metadata: [],\n columns: ['event_id', 'user_id', 'event_type', 'properties', 'occurred_at'],\n columnMetadata: {},\n created: '2024-01-15T10:00:00+0100',\n lastImportDate: '2024-03-10T08:30:00+0100',\n lastChangeDate: '2024-03-10T08:30:00+0100',\n rowsCount: 125500,\n dataSizeBytes: 41943040,\n} satisfies TableDetail;\n\n/**\n * Returns a single non-typed, non-alias `TableDetail` (fresh, no imports yet).\n *\n * - The explicit return type surfaces a drift from `TableDetail` as a TypeScript error.\n */\nexport const getTable = (): TableDetail => freshTable;\n\n/**\n * Returns three TableDetail objects representing different lifecycle states:\n * 1. Fresh — just created, nothing loaded (`lastImportDate: null`, `rowsCount: 0`).\n * 2. Recently updated — 24 500 rows, imported June 2024.\n * 3. Large — 125 500 rows, imported March 2024.\n *\n * The three row counts add up to the shared bucket's own `rowsCount`, and the bucket's\n * `lastChangeDate` is the newest of theirs, as Storage reports it.\n */\nexport const listTables = (): TableDetail[] => [freshTable, recentlyUpdatedTable, largeTable];\n\n/**\n * Named fixtures for targeted access in tests.\n */\nexport const tableFixtures = {\n fresh: freshTable,\n recentlyUpdated: recentlyUpdatedTable,\n large: largeTable,\n} satisfies Record<'fresh' | 'recentlyUpdated' | 'large', TableDetail>;\n\nexport type { Table, TableDetail };\n","import { appFixtures, getApp, listApps } from './clients/apps/apps';\nimport { deploymentFixtures, getDeployment, listDeployments } from './clients/apps/deployments';\nimport { getAppRun, listAppRuns, runFixtures } from './clients/apps/runs';\nimport {\n developerPortalFixtures,\n getVendor,\n listAllApps,\n listAllVendors,\n listAppChanges,\n listPublishedApps,\n listServiceAccounts,\n listUsers,\n listVendorApps,\n listVendors,\n} from './clients/developerPortal/apps';\nimport {\n applicationTokenFixtures,\n getApplicationToken,\n getApplicationTokens,\n} from './clients/management/applicationTokens';\nimport { getUiApp, getUiApps, uiAppFixtures } from './clients/management/uiApps';\nimport { getDevBranches, getStackInfo, verifyStorageToken } from './clients/storage/bootstrap';\nimport { getSharingTargets } from './clients/storage/bucketSharing';\nimport { getTable, listTables, tableFixtures } from './clients/storage/tables';\n\nexport const fixtures = {\n management: {\n applicationTokens: {\n getApplicationToken,\n getApplicationTokens,\n fixtures: applicationTokenFixtures,\n },\n uiApps: {\n getUiApp,\n getUiApps,\n fixtures: uiAppFixtures,\n },\n },\n storage: {\n bootstrap: {\n getStackInfo,\n verifyStorageToken,\n getDevBranches,\n },\n bucketSharing: {\n getSharingTargets,\n },\n tables: {\n getTable,\n listTables,\n fixtures: tableFixtures,\n },\n },\n apps: {\n apps: {\n getApp,\n listApps,\n fixtures: appFixtures,\n },\n deployments: {\n getDeployment,\n listDeployments,\n fixtures: deploymentFixtures,\n },\n runs: {\n getAppRun,\n listAppRuns,\n fixtures: runFixtures,\n },\n },\n developerPortal: {\n listPublishedApps,\n listVendorApps,\n listAllApps,\n listAllVendors,\n getVendor,\n listVendors,\n listUsers,\n listServiceAccounts,\n listAppChanges,\n fixtures: developerPortalFixtures,\n },\n};\n"],"mappings":"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"}
1
+ {"version":3,"file":"index.cjs","names":["base","ServiceId"],"sources":["../src/clients/apps/deployments.ts","../src/clients/apps/apps.ts","../src/clients/apps/runs.ts","../src/clients/developerPortal/apps.ts","../src/clients/management/applicationTokens.ts","../src/clients/management/uiApps.ts","../src/clients/storage/bootstrap.ts","../src/clients/storage/bucketSharing.ts","../src/clients/storage/tables.ts","../src/fixtures.ts"],"sourcesContent":["import type { Deployment } from '@keboola/api-client/apps/types';\n\nexport const APP_ID = '374811';\n\n// UUIDv7: ids sort in creation order.\nconst deploymentId = (suffix: string) => `019f1c3a-${suffix}-7c1e-b4a2-0d9f3e6a8c15`;\n\n// Deleted: the row outlives its workload and stays in history.\nconst archivedDeployment = {\n id: deploymentId('0a41'),\n configVersion: '14',\n gitCommitSha: null,\n runtimeSize: 'tiny' as const,\n buildState: 'ready' as const,\n runState: 'stopped' as const,\n archived: true,\n archivedAt: '2026-08-15T11:03:02+00:00',\n createdAt: '2026-08-10T09:12:44+00:00',\n} satisfies Deployment;\n\n// Serving production — the one `appFixtures.running.production` points at.\nconst liveDeployment = {\n id: deploymentId('1b52'),\n configVersion: '16',\n gitCommitSha: null,\n runtimeSize: 'small' as const,\n buildState: 'ready' as const,\n runState: 'running' as const,\n archived: false,\n archivedAt: null,\n createdAt: '2026-08-15T11:02:58+00:00',\n} satisfies Deployment;\n\n// Created with `promote: false`: built, never started.\nconst stagedDeployment = {\n id: deploymentId('2c63'),\n configVersion: '18',\n gitCommitSha: null,\n runtimeSize: 'small' as const,\n buildState: 'ready' as const,\n runState: 'neverRun' as const,\n archived: false,\n archivedAt: null,\n createdAt: '2026-08-17T08:41:19+00:00',\n} satisfies Deployment;\n\n// Can never run — distinct from a run failure. Unreachable today (deployments start from a\n// ready image); the headline table treats it as a contract.\nconst buildFailedDeployment = {\n id: deploymentId('3d74'),\n configVersion: '19',\n gitCommitSha: null,\n runtimeSize: 'small' as const,\n buildState: 'failed' as const,\n runState: 'neverRun' as const,\n archived: false,\n archivedAt: null,\n createdAt: '2026-08-17T09:05:33+00:00',\n} satisfies Deployment;\n\n// Built fine, crashed on every run — `getAppRuns` carries the cause.\nconst runFailedDeployment = {\n id: deploymentId('4e85'),\n configVersion: '20',\n gitCommitSha: null,\n runtimeSize: 'small' as const,\n buildState: 'ready' as const,\n runState: 'failed' as const,\n archived: false,\n archivedAt: null,\n createdAt: '2026-08-17T09:31:07+00:00',\n} satisfies Deployment;\n\nexport const deploymentFixtures = {\n archived: archivedDeployment,\n live: liveDeployment,\n staged: stagedDeployment,\n buildFailed: buildFailedDeployment,\n runFailed: runFailedDeployment,\n} satisfies Record<'archived' | 'live' | 'staged' | 'buildFailed' | 'runFailed', Deployment>;\n\nexport const getDeployment = (): Deployment => liveDeployment;\n\n/**\n * All deployments as one history.\n *\n * - Includes the failed ones: `runFixtures.failed` joins to the last.\n * - Oldest first on purpose: the endpoint specifies no order, so consumers must sort.\n */\nexport const listDeployments = (): Deployment[] => [\n archivedDeployment,\n liveDeployment,\n stagedDeployment,\n buildFailedDeployment,\n runFailedDeployment,\n];\n","import type { App } from '@keboola/api-client/apps/types';\n\nimport { APP_ID, deploymentFixtures } from './deployments';\n\nconst APP_URL = 'https://hello-dashboard-374811.hub.canary-orion.keboola.dev';\n\nconst base = {\n id: APP_ID,\n projectId: '14',\n componentId: 'keboola.data-apps',\n branchId: '6',\n configId: '01kz9kny4n49x3xk0e4k8ynpmq',\n type: 'streamlit' as const,\n url: APP_URL,\n hasManagedGitRepo: false,\n};\n\ntype DeploymentFixture = (typeof deploymentFixtures)[keyof typeof deploymentFixtures];\n\nconst production = (desired: DeploymentFixture, actual = desired) => ({\n desiredDeploymentId: desired.id,\n actualDeploymentId: actual.id,\n desiredConfigVersion: desired.configVersion,\n actualConfigVersion: actual.configVersion,\n desiredCreatedAt: desired.createdAt,\n});\n\nconst NOTHING_IN_PRODUCTION = {\n desiredDeploymentId: null,\n actualDeploymentId: null,\n desiredConfigVersion: null,\n actualConfigVersion: null,\n desiredCreatedAt: null,\n};\n\n// Created through `/v2`, nothing deployed yet: the URL is reserved and publicly 404s.\nconst neverDeployedApp = {\n ...base,\n production: NOTHING_IN_PRODUCTION,\n state: 'notDeployed' as const,\n} satisfies App;\n\n/**\n * An app created and started through `/v1`, serving real traffic (AJDA-3140, probe P1: HTTP 200,\n * 8340 B at the moment this was read), which `/v2` nonetheless reports as `notDeployed` with an\n * empty `production` because it was never adopted into the deployments model.\n *\n * The Builder must never read \"is this app serving\" off `state` alone — here that answer is\n * wrong in the most damaging direction.\n */\nconst legacyV1ServingApp = {\n ...base,\n id: '374899',\n production: NOTHING_IN_PRODUCTION,\n state: 'notDeployed' as const,\n} satisfies App;\n\n// Serving the live deployment.\nconst runningApp = {\n ...base,\n production: production(deploymentFixtures.live),\n state: 'running' as const,\n} satisfies App;\n\n/**\n * A blue/green promotion in flight: the staged deployment has been asked for, the live one is still\n * what traffic reaches. `state` stays `running` throughout — the rollout is only visible as\n * `desiredDeploymentId !== actualDeploymentId`.\n */\nconst promotingApp = {\n ...base,\n production: production(deploymentFixtures.staged, deploymentFixtures.live),\n state: 'running' as const,\n} satisfies App;\n\n// Idle between visits and armed to wake on the next request — normal, not an outage.\nconst suspendedApp = {\n ...base,\n production: production(deploymentFixtures.live),\n state: 'suspended' as const,\n} satisfies App;\n\n// Stopped by a failure and will not auto-wake: a visitor sees the restart-disabled page until\n// someone starts it explicitly.\nconst disabledApp = {\n ...base,\n production: production(deploymentFixtures.runFailed),\n state: 'disabled' as const,\n} satisfies App;\n\nexport const appFixtures = {\n neverDeployed: neverDeployedApp,\n legacyV1Serving: legacyV1ServingApp,\n running: runningApp,\n promoting: promotingApp,\n suspended: suspendedApp,\n disabled: disabledApp,\n} satisfies Record<\n 'neverDeployed' | 'legacyV1Serving' | 'running' | 'promoting' | 'suspended' | 'disabled',\n App\n>;\n\nexport const getApp = (): App => runningApp;\n\n/**\n * The named fixtures above are all the *same* app in different states, which is what a detail\n * page shows. A listing shows different apps, so each entry past the first is re-addressed.\n */\nconst readdress = (app: App, id: string): App => ({\n ...app,\n id,\n url: `https://data-app-${id}.hub.canary-orion.keboola.dev`,\n});\n\nexport const listApps = (): App[] => [\n runningApp,\n readdress(suspendedApp, '374812'),\n readdress(neverDeployedApp, '374813'),\n];\n","import type { AppRun } from '@keboola/api-client/apps/types';\n\nimport { APP_ID, deploymentFixtures } from './deployments';\n\nconst base = {\n appId: APP_ID,\n runtimeSize: 'small',\n runtimeBackendType: 'streamlit',\n imageVersion: '1.14.2',\n mode: 'prod',\n};\n\nconst runningRun = {\n ...base,\n id: '4f2d8c1a-0b76-4e35-9a12-5c8e7d3b0f41',\n deploymentId: deploymentFixtures.live.id,\n configVersion: deploymentFixtures.live.configVersion,\n state: 'running' as const,\n createdAt: '2026-08-15T11:02:58+00:00',\n startedAt: '2026-08-15T11:03:41+00:00',\n stoppedAt: null,\n startupLogs: null,\n failureReason: null,\n} satisfies AppRun;\n\nconst finishedRun = {\n ...base,\n id: '9c0a7e42-31bd-4f88-b6d5-2ea41f907c3b',\n deploymentId: deploymentFixtures.archived.id,\n configVersion: deploymentFixtures.archived.configVersion,\n state: 'finished' as const,\n createdAt: '2026-08-10T09:12:44+00:00',\n startedAt: '2026-08-10T09:13:29+00:00',\n stoppedAt: '2026-08-15T11:03:02+00:00',\n startupLogs: null,\n failureReason: null,\n} satisfies AppRun;\n\n/**\n * A classified failure transcribed from canary (AJDA-3140, probe P1). `startedAt` is `null`\n * even though a cause was attributed — the container executed but its startup probe never\n * passed, so a classified failure says nothing about how far the run got.\n */\nconst failedRun = {\n ...base,\n id: 'ba53f9d0-7c41-4a2e-8f16-d0b9e254a7c6',\n deploymentId: deploymentFixtures.runFailed.id,\n configVersion: deploymentFixtures.runFailed.configVersion,\n state: 'failed' as const,\n createdAt: '2026-08-17T09:31:07+00:00',\n startedAt: null,\n stoppedAt: '2026-08-17T09:33:52+00:00',\n startupLogs:\n '[INFO] Starting app\\n[ERROR] App must have keboola-config/nginx/ directory. Missing: /app/keboola-config/nginx\\n',\n failureReason: {\n reason: 'StartupProbeFailed',\n message: 'App must have keboola-config/nginx/ directory. Missing: /app/keboola-config/nginx',\n },\n} satisfies AppRun;\n\n/**\n * A run that belongs to the app itself rather than to a deployment — what every run of a\n * `/v1`-created app looks like. `deploymentId: null` is permanent for these, not drift.\n */\nconst legacyRun = {\n ...base,\n id: '1d7b4e05-8a92-4c63-b0f7-3e6a5c8192d4',\n deploymentId: null,\n configVersion: '2',\n state: 'running' as const,\n createdAt: '2026-08-17T10:02:11+00:00',\n startedAt: '2026-08-17T10:02:51+00:00',\n stoppedAt: null,\n startupLogs: null,\n failureReason: null,\n} satisfies AppRun;\n\nexport const runFixtures = {\n running: runningRun,\n finished: finishedRun,\n failed: failedRun,\n legacy: legacyRun,\n} satisfies Record<'running' | 'finished' | 'failed' | 'legacy', AppRun>;\n\nexport const getAppRun = (): AppRun => runningRun;\n\n/**\n * Every run this app has, newest first — the order the endpoint documents, so a consumer that\n * relies on it (`[latest] = runs`) is exercised against data that keeps the promise rather than\n * data that happens to contradict it.\n */\nexport const listAppRuns = (): AppRun[] => [legacyRun, failedRun, runningRun, finishedRun];\n","import type {\n AdminVendor,\n App,\n AppChange,\n AppVendor,\n ServiceAccount,\n User,\n Vendor,\n VendorListItem,\n} from '@keboola/api-client/developerPortal/types';\n\n// `isTrusted` is the raw tinyint here and a boolean in `vendorDetail` below. That is not a fixture\n// inconsistency: `GET /vendors` returns the row unconverted, every other vendor endpoint runs it\n// through `publicGetVendor`. A fixture that smoothed it over would hide the difference consumers\n// have to handle.\n//\n// `type: 'keboola'` is what the public catalog's \"Supported by Keboola\" filter matches on — NOT\n// `id`, so a fixture that only set the id would silently fail to exercise that filter.\nconst keboolaVendor = {\n id: 'keboola',\n name: 'Keboola',\n email: 'support@keboola.com',\n address: 'Prague, Czech Republic',\n type: 'keboola',\n projectUrl: null,\n isTrusted: 1,\n} satisfies VendorListItem;\n\nconst thirdPartyVendor = {\n id: 'acme',\n name: 'Acme Co.',\n email: 'dev@acme.example',\n address: 'Springfield',\n projectUrl: 'https://connection.keboola.com/admin/projects/1234',\n type: 'other',\n isTrusted: 0,\n} satisfies VendorListItem;\n\n/** The same vendor as `GET /vendors/{vendor}` returns it — `isTrusted` converted to a boolean. */\nconst vendorDetail = {\n ...thirdPartyVendor,\n isTrusted: false,\n} satisfies Vendor;\n\n// A pending, self-registered vendor. The `_v` id prefix is the marker that keeps it out of the\n// user-selectable vendor list until an admin approves and renames it. Only `GET /admin/vendors`\n// returns it — the public list filters on `isApproved`, and is the only response carrying the flag.\nconst pendingVendor = {\n id: '_v1699999999999',\n name: 'Pending Startup',\n email: 'hello@pending.example',\n address: 'Berlin',\n type: 'other',\n projectUrl: null,\n isApproved: false,\n isPublic: false,\n isTrusted: false,\n} satisfies AdminVendor;\n\n// The two public vendors as `GET /admin/vendors` returns them: approved, and `isTrusted` converted\n// to a boolean. They exist so the admin list is not a single pending row — a test that only ever\n// sees `pendingVendor` never exercises the approved path the admin table mostly renders.\nconst keboolaAdminVendor = {\n ...keboolaVendor,\n isApproved: true,\n isPublic: true,\n isTrusted: true,\n} satisfies AdminVendor;\n\nconst thirdPartyAdminVendor = {\n ...thirdPartyVendor,\n isApproved: true,\n isPublic: true,\n isTrusted: false,\n} satisfies AdminVendor;\n\n// The vendor as it arrives joined onto an app: five columns, none of the flags.\nconst appVendor = (vendor: VendorListItem): AppVendor => ({\n id: vendor.id,\n name: vendor.name,\n address: vendor.address,\n email: vendor.email,\n type: vendor.type,\n});\n\n/** A published, fully-populated extractor — the shape that passes `hasAllFieldsForPublishing`. */\nconst publishedExtractor = {\n id: 'keboola.ex-db-snowflake',\n vendor: appVendor(keboolaVendor),\n name: 'Snowflake',\n type: 'extractor',\n shortDescription: 'Extract data from Snowflake',\n longDescription: '## Snowflake extractor\\n\\nExtracts tables from a Snowflake database.',\n licenseUrl: 'https://github.com/keboola/ex-db-snowflake/blob/master/LICENSE.md',\n documentationUrl: 'https://help.keboola.com/components/extractors/database/snowflake/',\n sourceCodeUrl: 'https://github.com/keboola/ex-db-snowflake',\n categories: ['Database'],\n complexity: 'easy',\n uiOptions: ['genericDockerUI'],\n defaultBucket: true,\n defaultBucketStage: 'in',\n stagingStorageInput: 'local',\n stagingStorageOutput: 'local',\n logger: 'standard',\n isPublic: true,\n isDeprecated: false,\n fees: false,\n repository: { type: 'ecr', uri: 'keboola/ex-db-snowflake', tag: '1.9.0' },\n // The 128 filename ends in a 13-digit millisecond timestamp, so `getIcon` uses it. A legacy\n // incremental filename here would make `getIcon` fall back to the 64px variant.\n icon: {\n '64': 'https://ui.keboola-assets.com/developer-portal/icons/keboola.ex-db-snowflake/64/1699999999999.png',\n '128':\n 'https://ui.keboola-assets.com/developer-portal/icons/keboola.ex-db-snowflake/128/1699999999999.png',\n },\n version: 12,\n createdBy: 'support@keboola.com',\n updatedOn: '2024-06-01T09:00:00+0200',\n uri: 'docker/keboola.ex-db-snowflake',\n isPublished: true,\n publishedVersion: 12,\n publishingStatus: 'public',\n} satisfies App;\n\n/** A private third-party app with a pending publishing request. */\nconst requestedApp = {\n id: 'acme.wr-widgets',\n vendor: appVendor(thirdPartyVendor),\n name: 'Widget Writer',\n type: 'writer',\n shortDescription: 'Write data to Widgets',\n longDescription: 'Pushes tables into the Widgets API.',\n licenseUrl: 'https://acme.example/license',\n documentationUrl: 'https://acme.example/docs',\n uiOptions: ['genericDockerUI'],\n repository: { type: 'quay', uri: 'acme/wr-widgets', tag: '0.3.1' },\n icon: {\n '64': 'https://ui.keboola-assets.com/developer-portal/icons/acme.wr-widgets/64/1699999999998.png',\n '128':\n 'https://ui.keboola-assets.com/developer-portal/icons/acme.wr-widgets/128/1699999999998.png',\n },\n isPublic: false,\n isDeprecated: false,\n version: 3,\n createdBy: 'dev@acme.example',\n updatedOn: '2024-05-20T14:12:00+0200',\n uri: 'docker/acme.wr-widgets',\n isPublished: false,\n publishingStatus: 'requested',\n publishingRequest: { createdOn: '2024-05-20T14:12:00+0200', rejectionReason: null },\n} satisfies App;\n\n/** A rejected app — carries the reason the vendor sees on its detail page. */\nconst rejectedApp = {\n id: 'acme.app-analyzer',\n vendor: appVendor(thirdPartyVendor),\n name: 'Analyzer',\n type: 'application',\n shortDescription: 'Analyze things',\n isPublic: false,\n isDeprecated: false,\n version: 1,\n createdBy: 'dev@acme.example',\n uri: 'docker/acme.app-analyzer',\n isPublished: false,\n publishingStatus: 'rejected',\n publishingRequest: {\n createdOn: '2024-04-02T11:00:00+0200',\n rejectionReason: 'Documentation URL is missing and the icon is not 256×256.',\n },\n} satisfies App;\n\n/** A deprecated app with an expiry date and a suggested replacement. */\nconst deprecatedApp = {\n id: 'keboola.ex-legacy',\n vendor: appVendor(keboolaVendor),\n name: 'Legacy Extractor',\n type: 'extractor',\n shortDescription: 'Superseded',\n isPublic: true,\n isDeprecated: true,\n expiredOn: '2025-01-01',\n replacementApp: 'keboola.ex-db-snowflake',\n version: 40,\n uri: 'docker/keboola.ex-legacy',\n isPublished: true,\n publishedVersion: 38,\n publishingStatus: 'public',\n} satisfies App;\n\n/**\n * A `data-app`, the type whose edit form hides ~14 fields. Deliberately minimal: a fixture carrying\n * `configurationSchema` or `actions` here would misrepresent what the form can produce.\n */\nconst dataApp = {\n id: 'acme.data-app-dashboard',\n vendor: appVendor(thirdPartyVendor),\n name: 'Dashboard',\n type: 'data-app',\n shortDescription: 'A Streamlit dashboard',\n isPublic: false,\n isDeprecated: false,\n version: 2,\n uri: 'docker/acme.data-app-dashboard',\n isPublished: false,\n publishingStatus: 'private',\n} satisfies App;\n\n/** A `code-pattern`, whose `configurationSchema.supported_components` must be a non-empty array. */\nconst codePatternApp = {\n id: 'acme.code-pattern-etl',\n vendor: appVendor(thirdPartyVendor),\n name: 'ETL Pattern',\n type: 'code-pattern',\n shortDescription: 'Generates ETL code',\n actions: ['generate'],\n configurationSchema: { supported_components: ['keboola.snowflake-transformation'] },\n isPublic: false,\n version: 1,\n uri: 'docker/acme.code-pattern-etl',\n isPublished: false,\n publishingStatus: 'private',\n} satisfies App;\n\n/**\n * An app typed `other`. The public catalog excludes it entirely, so it exists to prove that\n * exclusion rather than to be rendered.\n */\nconst otherTypeApp = {\n id: 'acme.misc-thing',\n vendor: appVendor(thirdPartyVendor),\n name: 'Misc Thing',\n type: 'other',\n isPublic: true,\n version: 1,\n uri: 'docker/acme.misc-thing',\n isPublished: true,\n publishedVersion: 1,\n publishingStatus: 'public',\n} satisfies App;\n\n// `username` is the Cognito login, which is the user's email — the list endpoints return no\n// separate `email`, and no account state (`status`, `isEnabled`, `mfa`) either.\nconst humanUser = {\n username: 'dev@acme.example',\n name: 'Dev Eloper',\n vendors: ['acme'],\n createdOn: '2024-01-10T08:00:00+0100',\n} satisfies User;\n\n/** A recently added member, for a test that orders the list by `createdOn`. */\nconst newestUser = {\n username: 'new@acme.example',\n name: 'New Hire',\n vendors: ['acme'],\n createdOn: '2024-06-25T08:00:00+0200',\n} satisfies User;\n\n/** A member of no vendor — reachable only through the admin list. */\nconst vendorlessUser = {\n username: 'gone@acme.example',\n name: 'Alan Gone',\n vendors: [],\n createdOn: '2023-02-01T08:00:00+0100',\n} satisfies User;\n\n/** A Keboola staff member — eligible for \"make admin\" because they belong to the `keboola` vendor. */\nconst keboolaStaffUser = {\n username: 'staff@keboola.com',\n name: 'Kai Staff',\n vendors: ['keboola'],\n createdOn: '2023-09-14T08:00:00+0200',\n} satisfies User;\n\n/** A freshly created service account, including the one-time `password`. */\nconst newServiceAccount = {\n username: 'acme+ci',\n description: 'CI deploy pipeline',\n createdOn: '2024-07-01T10:00:00+0200',\n password: 'one-time-secret-shown-once',\n} satisfies ServiceAccount;\n\n/** The same account as later listed — note there is no `password`; it is unreadable after creation. */\nconst existingServiceAccount = {\n username: 'acme+release',\n description: 'Release automation',\n createdOn: '2024-03-11T10:00:00+0100',\n} satisfies ServiceAccount;\n\nconst appChange = {\n id: 'acme.wr-widgets',\n createdOn: '2024-05-20T14:12:00+0200',\n createdBy: 'dev@acme.example',\n changes: [\n {\n attribute: 'shortDescription',\n oldValue: 'Writes widgets',\n newValue: 'Write data to Widgets',\n description: 'Attribute shortDescription changed',\n },\n {\n attribute: 'repository',\n oldValue: { type: 'quay', uri: 'acme/wr-widgets', tag: '0.3.0' },\n newValue: { type: 'quay', uri: 'acme/wr-widgets', tag: '0.3.1' },\n description: 'Attribute repository changed',\n },\n ],\n} satisfies AppChange;\n\n/** The public catalog list: published, non-`other` apps only. */\nexport const listPublishedApps = (): App[] => [publishedExtractor, deprecatedApp];\n\n/** A vendor's own apps, across every publishing state the table renders. */\nexport const listVendorApps = (): App[] => [requestedApp, rejectedApp, dataApp, codePatternApp];\n\n/** The admin list — every vendor, plus the `other`-typed app the public catalog drops. */\nexport const listAllApps = (): App[] => [\n publishedExtractor,\n requestedApp,\n rejectedApp,\n deprecatedApp,\n dataApp,\n codePatternApp,\n otherTypeApp,\n];\n\n/** `GET /vendors` — approved and public only, so the pending vendor cannot appear here. */\nexport const listVendors = (): VendorListItem[] => [keboolaVendor, thirdPartyVendor];\n\n/** `GET /vendors/{vendor}` — the converted shape. */\nexport const getVendor = (): Vendor => vendorDetail;\n\n/** `GET /admin/vendors` — every vendor, and the only response carrying the approval flags. */\nexport const listAllVendors = (): AdminVendor[] => [\n keboolaAdminVendor,\n thirdPartyAdminVendor,\n pendingVendor,\n];\n\nexport const listUsers = (): User[] => [humanUser, newestUser, vendorlessUser, keboolaStaffUser];\n\nexport const listServiceAccounts = (): ServiceAccount[] => [existingServiceAccount];\n\nexport const listAppChanges = (): AppChange[] => [appChange];\n\n/** Named fixtures, for a test that needs one specific state. */\nexport const developerPortalFixtures = {\n apps: {\n published: publishedExtractor,\n requested: requestedApp,\n rejected: rejectedApp,\n deprecated: deprecatedApp,\n dataApp,\n codePattern: codePatternApp,\n otherType: otherTypeApp,\n },\n vendors: {\n keboola: keboolaVendor,\n thirdParty: thirdPartyVendor,\n detail: vendorDetail,\n pending: pendingVendor,\n keboolaAdmin: keboolaAdminVendor,\n thirdPartyAdmin: thirdPartyAdminVendor,\n },\n users: {\n human: humanUser,\n newest: newestUser,\n vendorless: vendorlessUser,\n keboolaStaff: keboolaStaffUser,\n },\n serviceAccounts: {\n created: newServiceAccount,\n existing: existingServiceAccount,\n },\n changes: { single: appChange },\n};\n","import type {\n ApplicationToken,\n CreatedApplicationToken,\n} from '@keboola/api-client/management/types';\n\nconst usedToken = {\n id: 13702,\n description: 'Sandboxes API',\n created: '2021-06-28T22:27:28+02:00',\n lastUsed: '2026-09-20T09:14:02+02:00',\n expires: null,\n isDisabled: false,\n isExpired: false,\n scopes: ['projects:read', 'manage:storage-tokens'],\n creator: { id: 7919, name: 'John Doe' },\n} satisfies ApplicationToken;\n\n// Never used — the only signal an operator has that deleting it is safe.\nconst neverUsedToken = {\n id: 13703,\n description: 'Job Runner (staging)',\n created: '2026-02-01T10:00:00+01:00',\n lastUsed: null,\n expires: null,\n isDisabled: false,\n isExpired: false,\n scopes: [],\n creator: { id: null, name: null },\n} satisfies ApplicationToken;\n\nconst expiringToken = {\n id: 13704,\n description: 'One-off migration',\n created: '2026-09-01T08:00:00+02:00',\n lastUsed: '2026-09-02T08:00:00+02:00',\n expires: '2026-10-01T08:00:00+02:00',\n isDisabled: false,\n isExpired: false,\n scopes: ['deleted-projects:read'],\n creator: { id: 7919, name: 'John Doe' },\n} satisfies ApplicationToken;\n\n// The create response — the only moment the plaintext secret exists.\nconst createdToken = {\n ...usedToken,\n id: 13705,\n description: 'Newly issued',\n lastUsed: null,\n token: '13705-abcdef0123456789abcdef0123456789abcdef01',\n} satisfies CreatedApplicationToken;\n\n/** A token that has been used and never expires. */\nexport const getApplicationToken = (): ApplicationToken => usedToken;\n\n/** Used, never-used and expiring tokens — the three states the list must render. */\nexport const getApplicationTokens = (): ApplicationToken[] => [\n usedToken,\n neverUsedToken,\n expiringToken,\n];\n\nexport const applicationTokenFixtures = {\n used: usedToken,\n neverUsed: neverUsedToken,\n expiring: expiringToken,\n created: createdToken,\n} satisfies {\n used: ApplicationToken;\n neverUsed: ApplicationToken;\n expiring: ApplicationToken;\n created: CreatedApplicationToken;\n};\n\nexport type { ApplicationToken, CreatedApplicationToken };\n","import type { UiApp, UiAppDetail } from '@keboola/api-client/management/types';\n\nconst activeApp = {\n stringId: 'kbc',\n name: 'Keboola Connection UI',\n version: '1.42.0',\n basePath: 'https://ui.keboola-assets.com/kbc/1.42.0/',\n type: 'text/javascript',\n scripts: ['https://ui.keboola-assets.com/kbc/1.42.0/scripts/main.js'],\n styles: ['https://ui.keboola-assets.com/kbc/1.42.0/styles/main.css'],\n isCritical: false,\n commitSha: 'a6bc947f1e2d3c4b5a6bc947f1e2d3c4b5a6bc94',\n} satisfies UiApp;\n\n// An app registered but never activated — only reachable through `includeInactive`.\nconst inactiveApp = {\n stringId: 'kbc.orphan',\n name: 'Orphaned build',\n version: null,\n basePath: null,\n type: null,\n scripts: [],\n styles: [],\n isCritical: false,\n commitSha: null,\n} satisfies UiApp;\n\nconst appDetail = {\n id: 41,\n stringId: 'kbc',\n name: 'Keboola Connection UI',\n created: '2015-02-12 11:10:09',\n versions: [\n {\n id: 1646,\n version: '1.42.0',\n created: '2026-09-01 08:12:44',\n isActive: true,\n isCritical: false,\n buildUrl: 'https://github.com/keboola/kbc-ui/actions/runs/1646',\n commitSha: 'a6bc947f1e2d3c4b5a6bc947f1e2d3c4b5a6bc94',\n },\n {\n id: 1645,\n version: '1.41.0',\n created: '2026-08-25 14:02:10',\n isActive: false,\n isCritical: true,\n buildUrl: 'https://github.com/keboola/kbc-ui/actions/runs/1645',\n commitSha: null,\n },\n ],\n} satisfies UiAppDetail;\n\n/** One UI application detail with an active and a superseded version. */\nexport const getUiApp = (): UiAppDetail => appDetail;\n\n/** An active application and one with no active version, as `includeInactive` returns them. */\nexport const getUiApps = (): UiApp[] => [activeApp, inactiveApp];\n\nexport const uiAppFixtures = {\n active: activeApp,\n inactive: inactiveApp,\n detail: appDetail,\n} satisfies { active: UiApp; inactive: UiApp; detail: UiAppDetail };\n\nexport type { UiApp, UiAppDetail };\n","import { ServiceId } from '@keboola/api-client/constants';\nimport type { DevBranch, StackInfo, StorageToken } from '@keboola/api-client/storage/types';\n\n/** The stack an MSW-backed test points its client at, unless a caller passes its own. */\nexport const DEFAULT_BASE_URL = 'https://connection.test';\n\ntype StackInfoOptions = {\n /** Stack the fixture describes; its host is what the announced service URLs are built on. */\n baseUrl?: string;\n /** Services the stack announces. Narrow it to test what a client does without one. */\n services?: ServiceId[];\n};\n\ntype StorageTokenOptions = {\n /** Stack the token was issued by — its `uri`. */\n baseUrl?: string;\n /** Project features `hasFeature()` should report — the token's `owner.features`. */\n features?: string[];\n};\n\n/**\n * The stack index `GET /v2/storage` returns.\n *\n * - Announces every `ServiceId` by default, each on its own host, so no service client is a dummy\n * that throws `ServiceUnavailableError` — a test for a queue / data-science / vault hook only\n * adds its handler.\n * - Defaulting to `Object.values(ServiceId)` is what keeps that exhaustive: a service added to the\n * client arrives here without an edit.\n */\nexport const getStackInfo = ({\n baseUrl = DEFAULT_BASE_URL,\n services = Object.values(ServiceId),\n}: StackInfoOptions = {}): StackInfo => {\n const { host } = new URL(baseUrl);\n\n return {\n api: host,\n documentation: 'https://developers.keboola.com',\n host,\n revision: 'test-revision',\n stack: 'test-stack',\n version: 'test-version',\n urlTemplates: { orchestrationJob: '' },\n services: services.map((id) => ({ id, url: `https://${id}.${host}` })),\n components: [],\n features: [],\n };\n};\n\n/**\n * The verified master token `GET /v2/storage/tokens/verify` returns.\n *\n * - Complete on purpose: kbc-ui's `useProject().sapiToken` is this object verbatim and hooks read\n * deep into it (`owner.id`, `admin.role`, `adminOwner.email`), so a partial body surfaces as\n * `undefined`s far from the test that caused them.\n * - Every permission flag is granted; a test needing a restricted token overrides the handler.\n */\nexport const verifyStorageToken = ({\n baseUrl = DEFAULT_BASE_URL,\n features = [],\n}: StorageTokenOptions = {}): StorageToken => ({\n id: 'token-1',\n created: '2024-01-01T00:00:00Z',\n refreshed: '2024-01-01T00:00:00Z',\n description: 'Test token',\n uri: baseUrl,\n isMasterToken: true,\n canManageBuckets: true,\n canManageTokens: true,\n canReadAllFileUploads: true,\n canPurgeTrash: true,\n canManageProtectedDefaultBranch: true,\n canCreateJobs: true,\n canReadAllProjectEvents: true,\n canManageDevBranches: true,\n creatorToken: { id: 42, description: 'Test token' },\n expires: null,\n isExpired: false,\n isDisabled: false,\n isBYODB: false,\n dailyCapacity: 1000,\n bucketPermissions: {},\n owner: {\n id: 42,\n name: 'Test Project',\n type: 'project',\n region: 'us-east-1',\n created: '2024-01-01T00:00:00Z',\n expires: null,\n features,\n dataSizeBytes: 0,\n rowsCount: 0,\n hasMysql: false,\n hasSynapse: false,\n hasSnowflake: true,\n hasExasol: false,\n hasTeradata: false,\n hasBigquery: false,\n defaultBackend: 'snowflake',\n hasTryModeOn: 'false',\n limits: {},\n metrics: {},\n isDisabled: false,\n billedMonthlyPrice: null,\n dataRetentionTimeInDays: 30,\n assignedBackends: ['snowflake'],\n fileStorageProvider: 's3',\n timezone: null,\n isBYODB: false,\n usersCount: 1,\n },\n organization: { id: 'org-1', created: null },\n admin: {\n id: 100,\n name: 'Admin User',\n features: [],\n isOrganizationMember: true,\n role: 'admin',\n isActivated: true,\n },\n adminOwner: { id: 200, name: 'Owner User', email: 'owner@example.com' },\n});\n\n/**\n * The branch list `GET /v2/storage/dev-branches` returns — the default branch alone.\n *\n * - `context.defaultBranch` is read off it, so the entry must stay `isDefault: true`.\n * - The default branch has no creator, which `DevBranch` models as an empty `creatorToken`.\n */\nexport const getDevBranches = (): DevBranch[] => [\n {\n id: 1,\n name: 'Main',\n description: '',\n isDefault: true,\n created: '2024-01-01T00:00:00Z',\n creatorToken: [],\n },\n];\n","import type { SharingTargets } from '@keboola/api-client/storage/types';\n\n/**\n * The projects and users `GET /v2/storage/sharing-targets` returns.\n *\n * - Users come sorted by email, as Connection sorts them; their ids descend, so a list resorted by\n * id shows the wrong order.\n * - None is the admin behind `verifyStorageToken()`.\n */\nexport const getSharingTargets = (): SharingTargets => ({\n projects: [\n { id: 7, name: 'Linked project' },\n { id: 12, name: 'Other project' },\n { id: 100, name: 'Sales' },\n ],\n users: [\n { id: 34, name: 'Adam', email: 'adam@keboola.com' },\n { id: 21, name: 'Beata', email: 'beata@keboola.com' },\n { id: 7, name: 'Cyril', email: 'cyril@keboola.com' },\n ],\n});\n","import type { Table, TableDetail } from '@keboola/api-client/storage/types';\n\nconst bucket = {\n id: 'in.c-main',\n name: 'c-main',\n displayName: 'Main',\n stage: 'in' as const,\n description: 'Main input bucket',\n created: '2024-01-15T10:00:00+0100',\n lastChangeDate: '2024-06-01T09:00:00+0200',\n isMaintenance: false,\n isReadOnly: false,\n isSnowflakeSharedDatabase: false,\n hasExternalSchema: false,\n rowsCount: 150000,\n dataSizeBytes: 52428800,\n uri: 'https://connection.keboola.com/v2/storage/buckets/in.c-main',\n backend: 'snowflake' as const,\n backendPath: [],\n databaseName: 'KEBOOLA_1',\n color: null,\n idBranch: 0,\n owner: null,\n sharing: null,\n path: 'in.c-main',\n tables: 'https://connection.keboola.com/v2/storage/buckets/in.c-main',\n updated: '2024-06-01T09:00:00+0200',\n isLinkedBucket: false,\n bucketSharingAllowed: true,\n};\n\n// What every non-typed, non-alias Snowflake table carries besides its own identity and data.\nconst tableBase = {\n transactional: false,\n indexType: null,\n indexKey: [],\n distributionType: null,\n distributionKey: [],\n syntheticPrimaryKeyEnabled: false,\n isAliasable: true,\n isDescriptionSystemManaged: false,\n timestampType: 'MANAGED' as const,\n tableType: 'table',\n attributes: [],\n bucket,\n isTyped: false as const,\n isAlias: false as const,\n};\n\n// A freshly created table with no imports yet (non-typed, non-alias variant).\nconst freshTable = {\n ...tableBase,\n uri: 'https://connection.keboola.com/v2/storage/tables/in.c-main.users',\n id: 'in.c-main.users',\n name: 'users',\n displayName: 'Users',\n path: 'KEBOOLA_1.c-main.users',\n primaryKey: ['id'],\n metadata: [],\n columns: ['id', 'email', 'name', 'created_at'],\n columnMetadata: {},\n created: '2024-06-01T09:00:00+0200',\n lastImportDate: null,\n lastChangeDate: null,\n rowsCount: 0,\n dataSizeBytes: 0,\n} satisfies TableDetail;\n\n// A recently updated table with a moderate size (non-typed, non-alias variant).\nconst recentlyUpdatedTable = {\n ...tableBase,\n uri: 'https://connection.keboola.com/v2/storage/tables/in.c-main.orders',\n id: 'in.c-main.orders',\n name: 'orders',\n displayName: 'Orders',\n path: 'KEBOOLA_1.c-main.orders',\n primaryKey: ['order_id'],\n metadata: [\n {\n id: 'mt1',\n key: 'KBC.createdBy.component.id',\n value: 'keboola.python-transformation',\n provider: 'keboola',\n timestamp: '2024-06-01T09:00:00+0200',\n },\n ],\n columns: ['order_id', 'user_id', 'total', 'status', 'created_at', 'updated_at'],\n columnMetadata: {\n order_id: [\n {\n id: 'm1',\n key: 'KBC.datatype.type',\n value: 'INTEGER',\n provider: 'keboola',\n timestamp: '2024-06-01T09:00:00+0200',\n },\n ],\n },\n created: '2024-01-15T10:00:00+0100',\n lastImportDate: '2024-06-01T09:00:00+0200',\n lastChangeDate: '2024-06-01T09:00:00+0200',\n rowsCount: 24500,\n dataSizeBytes: 10485760,\n} satisfies TableDetail;\n\n// A large table with many rows representing high-volume data (non-typed, non-alias variant).\nconst largeTable = {\n ...tableBase,\n uri: 'https://connection.keboola.com/v2/storage/tables/in.c-main.events',\n id: 'in.c-main.events',\n name: 'events',\n displayName: 'Events',\n path: 'KEBOOLA_1.c-main.events',\n primaryKey: [],\n metadata: [],\n columns: ['event_id', 'user_id', 'event_type', 'properties', 'occurred_at'],\n columnMetadata: {},\n created: '2024-01-15T10:00:00+0100',\n lastImportDate: '2024-03-10T08:30:00+0100',\n lastChangeDate: '2024-03-10T08:30:00+0100',\n rowsCount: 125500,\n dataSizeBytes: 41943040,\n} satisfies TableDetail;\n\n/**\n * Returns a single non-typed, non-alias `TableDetail` (fresh, no imports yet).\n *\n * - The explicit return type surfaces a drift from `TableDetail` as a TypeScript error.\n */\nexport const getTable = (): TableDetail => freshTable;\n\n/**\n * Returns three TableDetail objects representing different lifecycle states:\n * 1. Fresh — just created, nothing loaded (`lastImportDate: null`, `rowsCount: 0`).\n * 2. Recently updated — 24 500 rows, imported June 2024.\n * 3. Large — 125 500 rows, imported March 2024.\n *\n * The three row counts add up to the shared bucket's own `rowsCount`, and the bucket's\n * `lastChangeDate` is the newest of theirs, as Storage reports it.\n */\nexport const listTables = (): TableDetail[] => [freshTable, recentlyUpdatedTable, largeTable];\n\n/**\n * Named fixtures for targeted access in tests.\n */\nexport const tableFixtures = {\n fresh: freshTable,\n recentlyUpdated: recentlyUpdatedTable,\n large: largeTable,\n} satisfies Record<'fresh' | 'recentlyUpdated' | 'large', TableDetail>;\n\nexport type { Table, TableDetail };\n","import { appFixtures, getApp, listApps } from './clients/apps/apps';\nimport { deploymentFixtures, getDeployment, listDeployments } from './clients/apps/deployments';\nimport { getAppRun, listAppRuns, runFixtures } from './clients/apps/runs';\nimport {\n developerPortalFixtures,\n getVendor,\n listAllApps,\n listAllVendors,\n listAppChanges,\n listPublishedApps,\n listServiceAccounts,\n listUsers,\n listVendorApps,\n listVendors,\n} from './clients/developerPortal/apps';\nimport {\n applicationTokenFixtures,\n getApplicationToken,\n getApplicationTokens,\n} from './clients/management/applicationTokens';\nimport { getUiApp, getUiApps, uiAppFixtures } from './clients/management/uiApps';\nimport { getDevBranches, getStackInfo, verifyStorageToken } from './clients/storage/bootstrap';\nimport { getSharingTargets } from './clients/storage/bucketSharing';\nimport { getTable, listTables, tableFixtures } from './clients/storage/tables';\n\nexport const fixtures = {\n management: {\n applicationTokens: {\n getApplicationToken,\n getApplicationTokens,\n fixtures: applicationTokenFixtures,\n },\n uiApps: {\n getUiApp,\n getUiApps,\n fixtures: uiAppFixtures,\n },\n },\n storage: {\n bootstrap: {\n getStackInfo,\n verifyStorageToken,\n getDevBranches,\n },\n bucketSharing: {\n getSharingTargets,\n },\n tables: {\n getTable,\n listTables,\n fixtures: tableFixtures,\n },\n },\n apps: {\n apps: {\n getApp,\n listApps,\n fixtures: appFixtures,\n },\n deployments: {\n getDeployment,\n listDeployments,\n fixtures: deploymentFixtures,\n },\n runs: {\n getAppRun,\n listAppRuns,\n fixtures: runFixtures,\n },\n },\n developerPortal: {\n listPublishedApps,\n listVendorApps,\n listAllApps,\n listAllVendors,\n getVendor,\n listVendors,\n listUsers,\n listServiceAccounts,\n listAppChanges,\n fixtures: developerPortalFixtures,\n },\n};\n"],"mappings":"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"}
package/dist/index.d.cts CHANGED
@@ -3,7 +3,6 @@ import { AdminVendor, App as App$1, AppChange, ServiceAccount, User, Vendor, Ven
3
3
  import { ApplicationToken, CreatedApplicationToken, UiApp, UiAppDetail } from "@keboola/api-client/management/types";
4
4
  import { ServiceId } from "@keboola/api-client/constants";
5
5
  import { DevBranch, SharingTargets, StackInfo, StorageToken, Table, TableDetail } from "@keboola/api-client/storage/types";
6
- //#region src/clients/apps/apps.d.ts
7
6
  declare const appFixtures: {
8
7
  neverDeployed: {
9
8
  id: string;
@@ -17,6 +16,9 @@ declare const appFixtures: {
17
16
  production: {
18
17
  desiredDeploymentId: null;
19
18
  actualDeploymentId: null;
19
+ desiredConfigVersion: null;
20
+ actualConfigVersion: null;
21
+ desiredCreatedAt: null;
20
22
  };
21
23
  state: 'notDeployed';
22
24
  };
@@ -32,6 +34,9 @@ declare const appFixtures: {
32
34
  production: {
33
35
  desiredDeploymentId: null;
34
36
  actualDeploymentId: null;
37
+ desiredConfigVersion: null;
38
+ actualConfigVersion: null;
39
+ desiredCreatedAt: null;
35
40
  };
36
41
  state: 'notDeployed';
37
42
  };
@@ -47,6 +52,9 @@ declare const appFixtures: {
47
52
  production: {
48
53
  desiredDeploymentId: string;
49
54
  actualDeploymentId: string;
55
+ desiredConfigVersion: string;
56
+ actualConfigVersion: string;
57
+ desiredCreatedAt: string;
50
58
  };
51
59
  state: 'running';
52
60
  };
@@ -62,6 +70,9 @@ declare const appFixtures: {
62
70
  production: {
63
71
  desiredDeploymentId: string;
64
72
  actualDeploymentId: string;
73
+ desiredConfigVersion: string;
74
+ actualConfigVersion: string;
75
+ desiredCreatedAt: string;
65
76
  };
66
77
  state: 'running';
67
78
  };
@@ -77,6 +88,9 @@ declare const appFixtures: {
77
88
  production: {
78
89
  desiredDeploymentId: string;
79
90
  actualDeploymentId: string;
91
+ desiredConfigVersion: string;
92
+ actualConfigVersion: string;
93
+ desiredCreatedAt: string;
80
94
  };
81
95
  state: 'suspended';
82
96
  };
@@ -92,14 +106,15 @@ declare const appFixtures: {
92
106
  production: {
93
107
  desiredDeploymentId: string;
94
108
  actualDeploymentId: string;
109
+ desiredConfigVersion: string;
110
+ actualConfigVersion: string;
111
+ desiredCreatedAt: string;
95
112
  };
96
113
  state: 'disabled';
97
114
  };
98
115
  };
99
116
  declare const getApp: () => App;
100
117
  declare const listApps: () => App[];
101
- //#endregion
102
- //#region src/clients/apps/deployments.d.ts
103
118
  declare const deploymentFixtures: {
104
119
  archived: {
105
120
  id: string;
@@ -165,8 +180,6 @@ declare const getDeployment: () => Deployment;
165
180
  * - Oldest first on purpose: the endpoint specifies no order, so consumers must sort.
166
181
  */
167
182
  declare const listDeployments: () => Deployment[];
168
- //#endregion
169
- //#region src/clients/apps/runs.d.ts
170
183
  declare const runFixtures: {
171
184
  running: {
172
185
  appId: string;
@@ -243,8 +256,6 @@ declare const getAppRun: () => AppRun;
243
256
  * data that happens to contradict it.
244
257
  */
245
258
  declare const listAppRuns: () => AppRun[];
246
- //#endregion
247
- //#region src/clients/developerPortal/apps.d.ts
248
259
  /** The public catalog list: published, non-`other` apps only. */
249
260
  declare const listPublishedApps: () => App$1[];
250
261
  /** A vendor's own apps, across every publishing state the table renders. */
@@ -593,8 +604,6 @@ declare const developerPortalFixtures: {
593
604
  };
594
605
  };
595
606
  };
596
- //#endregion
597
- //#region src/clients/management/applicationTokens.d.ts
598
607
  /** A token that has been used and never expires. */
599
608
  declare const getApplicationToken: () => ApplicationToken;
600
609
  /** Used, never-used and expiring tokens — the three states the list must render. */
@@ -658,8 +667,6 @@ declare const applicationTokenFixtures: {
658
667
  token: string;
659
668
  };
660
669
  };
661
- //#endregion
662
- //#region src/clients/management/uiApps.d.ts
663
670
  /** One UI application detail with an active and a superseded version. */
664
671
  declare const getUiApp: () => UiAppDetail;
665
672
  /** An active application and one with no active version, as `includeInactive` returns them. */
@@ -711,8 +718,6 @@ declare const uiAppFixtures: {
711
718
  })[];
712
719
  };
713
720
  };
714
- //#endregion
715
- //#region src/clients/storage/bootstrap.d.ts
716
721
  /** The stack an MSW-backed test points its client at, unless a caller passes its own. */
717
722
  declare const DEFAULT_BASE_URL = "https://connection.test";
718
723
  type StackInfoOptions = {
@@ -740,8 +745,8 @@ declare const getStackInfo: ({ baseUrl, services }?: StackInfoOptions) => StackI
740
745
  /**
741
746
  * The verified master token `GET /v2/storage/tokens/verify` returns.
742
747
  *
743
- * - Complete on purpose: `api.context.project.sapiToken` is this object verbatim and hooks read deep
744
- * into it (`owner.id`, `admin.role`, `adminOwner.email`), so a partial body surfaces as
748
+ * - Complete on purpose: kbc-ui's `useProject().sapiToken` is this object verbatim and hooks read
749
+ * deep into it (`owner.id`, `admin.role`, `adminOwner.email`), so a partial body surfaces as
745
750
  * `undefined`s far from the test that caused them.
746
751
  * - Every permission flag is granted; a test needing a restricted token overrides the handler.
747
752
  */
@@ -753,8 +758,6 @@ declare const verifyStorageToken: ({ baseUrl, features }?: StorageTokenOptions)
753
758
  * - The default branch has no creator, which `DevBranch` models as an empty `creatorToken`.
754
759
  */
755
760
  declare const getDevBranches: () => DevBranch[];
756
- //#endregion
757
- //#region src/clients/storage/bucketSharing.d.ts
758
761
  /**
759
762
  * The projects and users `GET /v2/storage/sharing-targets` returns.
760
763
  *
@@ -763,8 +766,6 @@ declare const getDevBranches: () => DevBranch[];
763
766
  * - None is the admin behind `verifyStorageToken()`.
764
767
  */
765
768
  declare const getSharingTargets: () => SharingTargets;
766
- //#endregion
767
- //#region src/clients/storage/tables.d.ts
768
769
  /**
769
770
  * Returns a single non-typed, non-alias `TableDetail` (fresh, no imports yet).
770
771
  *
@@ -971,8 +972,6 @@ declare const tableFixtures: {
971
972
  dataSizeBytes: number;
972
973
  };
973
974
  };
974
- //#endregion
975
- //#region src/fixtures.d.ts
976
975
  declare const fixtures: {
977
976
  management: {
978
977
  applicationTokens: {
@@ -1308,6 +1307,9 @@ declare const fixtures: {
1308
1307
  production: {
1309
1308
  desiredDeploymentId: null;
1310
1309
  actualDeploymentId: null;
1310
+ desiredConfigVersion: null;
1311
+ actualConfigVersion: null;
1312
+ desiredCreatedAt: null;
1311
1313
  };
1312
1314
  state: 'notDeployed';
1313
1315
  };
@@ -1323,6 +1325,9 @@ declare const fixtures: {
1323
1325
  production: {
1324
1326
  desiredDeploymentId: null;
1325
1327
  actualDeploymentId: null;
1328
+ desiredConfigVersion: null;
1329
+ actualConfigVersion: null;
1330
+ desiredCreatedAt: null;
1326
1331
  };
1327
1332
  state: 'notDeployed';
1328
1333
  };
@@ -1338,6 +1343,9 @@ declare const fixtures: {
1338
1343
  production: {
1339
1344
  desiredDeploymentId: string;
1340
1345
  actualDeploymentId: string;
1346
+ desiredConfigVersion: string;
1347
+ actualConfigVersion: string;
1348
+ desiredCreatedAt: string;
1341
1349
  };
1342
1350
  state: 'running';
1343
1351
  };
@@ -1353,6 +1361,9 @@ declare const fixtures: {
1353
1361
  production: {
1354
1362
  desiredDeploymentId: string;
1355
1363
  actualDeploymentId: string;
1364
+ desiredConfigVersion: string;
1365
+ actualConfigVersion: string;
1366
+ desiredCreatedAt: string;
1356
1367
  };
1357
1368
  state: 'running';
1358
1369
  };
@@ -1368,6 +1379,9 @@ declare const fixtures: {
1368
1379
  production: {
1369
1380
  desiredDeploymentId: string;
1370
1381
  actualDeploymentId: string;
1382
+ desiredConfigVersion: string;
1383
+ actualConfigVersion: string;
1384
+ desiredCreatedAt: string;
1371
1385
  };
1372
1386
  state: 'suspended';
1373
1387
  };
@@ -1383,6 +1397,9 @@ declare const fixtures: {
1383
1397
  production: {
1384
1398
  desiredDeploymentId: string;
1385
1399
  actualDeploymentId: string;
1400
+ desiredConfigVersion: string;
1401
+ actualConfigVersion: string;
1402
+ desiredCreatedAt: string;
1386
1403
  };
1387
1404
  state: 'disabled';
1388
1405
  };
@@ -1867,6 +1884,5 @@ declare const fixtures: {
1867
1884
  };
1868
1885
  };
1869
1886
  };
1870
- //#endregion
1871
1887
  export { type ApplicationToken, type CreatedApplicationToken, DEFAULT_BASE_URL, type Table, type TableDetail, type UiApp, type UiAppDetail, appFixtures, applicationTokenFixtures, deploymentFixtures, developerPortalFixtures, fixtures, getApp, getAppRun, getApplicationToken, getApplicationTokens, getDeployment, getDevBranches, getSharingTargets, getStackInfo, getTable, getUiApp, getUiApps, getVendor, listAllApps, listAllVendors, listAppChanges, listAppRuns, listApps, listDeployments, listPublishedApps, listServiceAccounts, listTables, listUsers, listVendorApps, listVendors, runFixtures, tableFixtures, uiAppFixtures, verifyStorageToken };
1872
1888
  //# sourceMappingURL=index.d.cts.map