@keboola/api-fixtures 44.0.0 → 45.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 +7 -0
- package/dist/index.cjs +12 -22
- package/dist/index.cjs.map +1 -1
- package/dist/index.d.cts +2 -22
- package/dist/index.d.ts +2 -22
- package/dist/index.js +12 -22
- package/dist/index.js.map +1 -1
- package/package.json +7 -7
package/CHANGELOG.md
CHANGED
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
|
-
|
|
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
|
-
|
|
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",
|
|
@@ -168,8 +167,7 @@ const listApps = () => [
|
|
|
168
167
|
readdress(suspendedApp, "374812"),
|
|
169
168
|
readdress(neverDeployedApp, "374813")
|
|
170
169
|
];
|
|
171
|
-
|
|
172
|
-
//#region src/clients/apps/runs.ts
|
|
170
|
+
// src/clients/apps/runs.ts
|
|
173
171
|
const base = {
|
|
174
172
|
appId: APP_ID,
|
|
175
173
|
runtimeSize: "small",
|
|
@@ -255,8 +253,7 @@ const listAppRuns = () => [
|
|
|
255
253
|
runningRun,
|
|
256
254
|
finishedRun
|
|
257
255
|
];
|
|
258
|
-
|
|
259
|
-
//#region src/clients/developerPortal/apps.ts
|
|
256
|
+
// src/clients/developerPortal/apps.ts
|
|
260
257
|
const keboolaVendor = {
|
|
261
258
|
id: "keboola",
|
|
262
259
|
name: "Keboola",
|
|
@@ -598,8 +595,7 @@ const developerPortalFixtures = {
|
|
|
598
595
|
},
|
|
599
596
|
changes: { single: appChange }
|
|
600
597
|
};
|
|
601
|
-
|
|
602
|
-
//#region src/clients/management/applicationTokens.ts
|
|
598
|
+
// src/clients/management/applicationTokens.ts
|
|
603
599
|
const usedToken = {
|
|
604
600
|
id: 13702,
|
|
605
601
|
description: "Sandboxes API",
|
|
@@ -663,8 +659,7 @@ const applicationTokenFixtures = {
|
|
|
663
659
|
expiring: expiringToken,
|
|
664
660
|
created: createdToken
|
|
665
661
|
};
|
|
666
|
-
|
|
667
|
-
//#region src/clients/management/uiApps.ts
|
|
662
|
+
// src/clients/management/uiApps.ts
|
|
668
663
|
const activeApp = {
|
|
669
664
|
stringId: "kbc",
|
|
670
665
|
name: "Keboola Connection UI",
|
|
@@ -719,8 +714,7 @@ const uiAppFixtures = {
|
|
|
719
714
|
inactive: inactiveApp,
|
|
720
715
|
detail: appDetail
|
|
721
716
|
};
|
|
722
|
-
|
|
723
|
-
//#region src/clients/storage/bootstrap.ts
|
|
717
|
+
// src/clients/storage/bootstrap.ts
|
|
724
718
|
/** The stack an MSW-backed test points its client at, unless a caller passes its own. */
|
|
725
719
|
const DEFAULT_BASE_URL = "https://connection.test";
|
|
726
720
|
/**
|
|
@@ -753,8 +747,8 @@ const getStackInfo = ({ baseUrl = DEFAULT_BASE_URL, services = Object.values(_ke
|
|
|
753
747
|
/**
|
|
754
748
|
* The verified master token `GET /v2/storage/tokens/verify` returns.
|
|
755
749
|
*
|
|
756
|
-
* - Complete on purpose: `
|
|
757
|
-
* into it (`owner.id`, `admin.role`, `adminOwner.email`), so a partial body surfaces as
|
|
750
|
+
* - Complete on purpose: kbc-ui's `useProject().sapiToken` is this object verbatim and hooks read
|
|
751
|
+
* deep into it (`owner.id`, `admin.role`, `adminOwner.email`), so a partial body surfaces as
|
|
758
752
|
* `undefined`s far from the test that caused them.
|
|
759
753
|
* - Every permission flag is granted; a test needing a restricted token overrides the handler.
|
|
760
754
|
*/
|
|
@@ -844,8 +838,7 @@ const getDevBranches = () => [{
|
|
|
844
838
|
created: "2024-01-01T00:00:00Z",
|
|
845
839
|
creatorToken: []
|
|
846
840
|
}];
|
|
847
|
-
|
|
848
|
-
//#region src/clients/storage/bucketSharing.ts
|
|
841
|
+
// src/clients/storage/bucketSharing.ts
|
|
849
842
|
/**
|
|
850
843
|
* The projects and users `GET /v2/storage/sharing-targets` returns.
|
|
851
844
|
*
|
|
@@ -886,8 +879,7 @@ const getSharingTargets = () => ({
|
|
|
886
879
|
}
|
|
887
880
|
]
|
|
888
881
|
});
|
|
889
|
-
|
|
890
|
-
//#region src/clients/storage/tables.ts
|
|
882
|
+
// src/clients/storage/tables.ts
|
|
891
883
|
const tableBase = {
|
|
892
884
|
transactional: false,
|
|
893
885
|
indexType: null,
|
|
@@ -1040,8 +1032,7 @@ const tableFixtures = {
|
|
|
1040
1032
|
recentlyUpdated: recentlyUpdatedTable,
|
|
1041
1033
|
large: largeTable
|
|
1042
1034
|
};
|
|
1043
|
-
|
|
1044
|
-
//#region src/fixtures.ts
|
|
1035
|
+
// src/fixtures.ts
|
|
1045
1036
|
const fixtures = {
|
|
1046
1037
|
management: {
|
|
1047
1038
|
applicationTokens: {
|
|
@@ -1098,7 +1089,6 @@ const fixtures = {
|
|
|
1098
1089
|
fixtures: developerPortalFixtures
|
|
1099
1090
|
}
|
|
1100
1091
|
};
|
|
1101
|
-
//#endregion
|
|
1102
1092
|
exports.DEFAULT_BASE_URL = DEFAULT_BASE_URL;
|
|
1103
1093
|
exports.appFixtures = appFixtures;
|
|
1104
1094
|
exports.applicationTokenFixtures = applicationTokenFixtures;
|
package/dist/index.cjs.map
CHANGED
|
@@ -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\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: 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;
|
|
@@ -98,8 +97,6 @@ declare const appFixtures: {
|
|
|
98
97
|
};
|
|
99
98
|
declare const getApp: () => App;
|
|
100
99
|
declare const listApps: () => App[];
|
|
101
|
-
//#endregion
|
|
102
|
-
//#region src/clients/apps/deployments.d.ts
|
|
103
100
|
declare const deploymentFixtures: {
|
|
104
101
|
archived: {
|
|
105
102
|
id: string;
|
|
@@ -165,8 +162,6 @@ declare const getDeployment: () => Deployment;
|
|
|
165
162
|
* - Oldest first on purpose: the endpoint specifies no order, so consumers must sort.
|
|
166
163
|
*/
|
|
167
164
|
declare const listDeployments: () => Deployment[];
|
|
168
|
-
//#endregion
|
|
169
|
-
//#region src/clients/apps/runs.d.ts
|
|
170
165
|
declare const runFixtures: {
|
|
171
166
|
running: {
|
|
172
167
|
appId: string;
|
|
@@ -243,8 +238,6 @@ declare const getAppRun: () => AppRun;
|
|
|
243
238
|
* data that happens to contradict it.
|
|
244
239
|
*/
|
|
245
240
|
declare const listAppRuns: () => AppRun[];
|
|
246
|
-
//#endregion
|
|
247
|
-
//#region src/clients/developerPortal/apps.d.ts
|
|
248
241
|
/** The public catalog list: published, non-`other` apps only. */
|
|
249
242
|
declare const listPublishedApps: () => App$1[];
|
|
250
243
|
/** A vendor's own apps, across every publishing state the table renders. */
|
|
@@ -593,8 +586,6 @@ declare const developerPortalFixtures: {
|
|
|
593
586
|
};
|
|
594
587
|
};
|
|
595
588
|
};
|
|
596
|
-
//#endregion
|
|
597
|
-
//#region src/clients/management/applicationTokens.d.ts
|
|
598
589
|
/** A token that has been used and never expires. */
|
|
599
590
|
declare const getApplicationToken: () => ApplicationToken;
|
|
600
591
|
/** Used, never-used and expiring tokens — the three states the list must render. */
|
|
@@ -658,8 +649,6 @@ declare const applicationTokenFixtures: {
|
|
|
658
649
|
token: string;
|
|
659
650
|
};
|
|
660
651
|
};
|
|
661
|
-
//#endregion
|
|
662
|
-
//#region src/clients/management/uiApps.d.ts
|
|
663
652
|
/** One UI application detail with an active and a superseded version. */
|
|
664
653
|
declare const getUiApp: () => UiAppDetail;
|
|
665
654
|
/** An active application and one with no active version, as `includeInactive` returns them. */
|
|
@@ -711,8 +700,6 @@ declare const uiAppFixtures: {
|
|
|
711
700
|
})[];
|
|
712
701
|
};
|
|
713
702
|
};
|
|
714
|
-
//#endregion
|
|
715
|
-
//#region src/clients/storage/bootstrap.d.ts
|
|
716
703
|
/** The stack an MSW-backed test points its client at, unless a caller passes its own. */
|
|
717
704
|
declare const DEFAULT_BASE_URL = "https://connection.test";
|
|
718
705
|
type StackInfoOptions = {
|
|
@@ -740,8 +727,8 @@ declare const getStackInfo: ({ baseUrl, services }?: StackInfoOptions) => StackI
|
|
|
740
727
|
/**
|
|
741
728
|
* The verified master token `GET /v2/storage/tokens/verify` returns.
|
|
742
729
|
*
|
|
743
|
-
* - Complete on purpose: `
|
|
744
|
-
* into it (`owner.id`, `admin.role`, `adminOwner.email`), so a partial body surfaces as
|
|
730
|
+
* - Complete on purpose: kbc-ui's `useProject().sapiToken` is this object verbatim and hooks read
|
|
731
|
+
* deep into it (`owner.id`, `admin.role`, `adminOwner.email`), so a partial body surfaces as
|
|
745
732
|
* `undefined`s far from the test that caused them.
|
|
746
733
|
* - Every permission flag is granted; a test needing a restricted token overrides the handler.
|
|
747
734
|
*/
|
|
@@ -753,8 +740,6 @@ declare const verifyStorageToken: ({ baseUrl, features }?: StorageTokenOptions)
|
|
|
753
740
|
* - The default branch has no creator, which `DevBranch` models as an empty `creatorToken`.
|
|
754
741
|
*/
|
|
755
742
|
declare const getDevBranches: () => DevBranch[];
|
|
756
|
-
//#endregion
|
|
757
|
-
//#region src/clients/storage/bucketSharing.d.ts
|
|
758
743
|
/**
|
|
759
744
|
* The projects and users `GET /v2/storage/sharing-targets` returns.
|
|
760
745
|
*
|
|
@@ -763,8 +748,6 @@ declare const getDevBranches: () => DevBranch[];
|
|
|
763
748
|
* - None is the admin behind `verifyStorageToken()`.
|
|
764
749
|
*/
|
|
765
750
|
declare const getSharingTargets: () => SharingTargets;
|
|
766
|
-
//#endregion
|
|
767
|
-
//#region src/clients/storage/tables.d.ts
|
|
768
751
|
/**
|
|
769
752
|
* Returns a single non-typed, non-alias `TableDetail` (fresh, no imports yet).
|
|
770
753
|
*
|
|
@@ -971,8 +954,6 @@ declare const tableFixtures: {
|
|
|
971
954
|
dataSizeBytes: number;
|
|
972
955
|
};
|
|
973
956
|
};
|
|
974
|
-
//#endregion
|
|
975
|
-
//#region src/fixtures.d.ts
|
|
976
957
|
declare const fixtures: {
|
|
977
958
|
management: {
|
|
978
959
|
applicationTokens: {
|
|
@@ -1867,6 +1848,5 @@ declare const fixtures: {
|
|
|
1867
1848
|
};
|
|
1868
1849
|
};
|
|
1869
1850
|
};
|
|
1870
|
-
//#endregion
|
|
1871
1851
|
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
1852
|
//# sourceMappingURL=index.d.cts.map
|
package/dist/index.d.ts
CHANGED
|
@@ -3,7 +3,6 @@ import { App, AppRun, Deployment } from "@keboola/api-client/apps/types";
|
|
|
3
3
|
import { AdminVendor, App as App$1, AppChange, ServiceAccount, User, Vendor, VendorListItem } from "@keboola/api-client/developerPortal/types";
|
|
4
4
|
import { ApplicationToken, CreatedApplicationToken, UiApp, UiAppDetail } from "@keboola/api-client/management/types";
|
|
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;
|
|
@@ -98,8 +97,6 @@ declare const appFixtures: {
|
|
|
98
97
|
};
|
|
99
98
|
declare const getApp: () => App;
|
|
100
99
|
declare const listApps: () => App[];
|
|
101
|
-
//#endregion
|
|
102
|
-
//#region src/clients/apps/deployments.d.ts
|
|
103
100
|
declare const deploymentFixtures: {
|
|
104
101
|
archived: {
|
|
105
102
|
id: string;
|
|
@@ -165,8 +162,6 @@ declare const getDeployment: () => Deployment;
|
|
|
165
162
|
* - Oldest first on purpose: the endpoint specifies no order, so consumers must sort.
|
|
166
163
|
*/
|
|
167
164
|
declare const listDeployments: () => Deployment[];
|
|
168
|
-
//#endregion
|
|
169
|
-
//#region src/clients/apps/runs.d.ts
|
|
170
165
|
declare const runFixtures: {
|
|
171
166
|
running: {
|
|
172
167
|
appId: string;
|
|
@@ -243,8 +238,6 @@ declare const getAppRun: () => AppRun;
|
|
|
243
238
|
* data that happens to contradict it.
|
|
244
239
|
*/
|
|
245
240
|
declare const listAppRuns: () => AppRun[];
|
|
246
|
-
//#endregion
|
|
247
|
-
//#region src/clients/developerPortal/apps.d.ts
|
|
248
241
|
/** The public catalog list: published, non-`other` apps only. */
|
|
249
242
|
declare const listPublishedApps: () => App$1[];
|
|
250
243
|
/** A vendor's own apps, across every publishing state the table renders. */
|
|
@@ -593,8 +586,6 @@ declare const developerPortalFixtures: {
|
|
|
593
586
|
};
|
|
594
587
|
};
|
|
595
588
|
};
|
|
596
|
-
//#endregion
|
|
597
|
-
//#region src/clients/management/applicationTokens.d.ts
|
|
598
589
|
/** A token that has been used and never expires. */
|
|
599
590
|
declare const getApplicationToken: () => ApplicationToken;
|
|
600
591
|
/** Used, never-used and expiring tokens — the three states the list must render. */
|
|
@@ -658,8 +649,6 @@ declare const applicationTokenFixtures: {
|
|
|
658
649
|
token: string;
|
|
659
650
|
};
|
|
660
651
|
};
|
|
661
|
-
//#endregion
|
|
662
|
-
//#region src/clients/management/uiApps.d.ts
|
|
663
652
|
/** One UI application detail with an active and a superseded version. */
|
|
664
653
|
declare const getUiApp: () => UiAppDetail;
|
|
665
654
|
/** An active application and one with no active version, as `includeInactive` returns them. */
|
|
@@ -711,8 +700,6 @@ declare const uiAppFixtures: {
|
|
|
711
700
|
})[];
|
|
712
701
|
};
|
|
713
702
|
};
|
|
714
|
-
//#endregion
|
|
715
|
-
//#region src/clients/storage/bootstrap.d.ts
|
|
716
703
|
/** The stack an MSW-backed test points its client at, unless a caller passes its own. */
|
|
717
704
|
declare const DEFAULT_BASE_URL = "https://connection.test";
|
|
718
705
|
type StackInfoOptions = {
|
|
@@ -740,8 +727,8 @@ declare const getStackInfo: ({ baseUrl, services }?: StackInfoOptions) => StackI
|
|
|
740
727
|
/**
|
|
741
728
|
* The verified master token `GET /v2/storage/tokens/verify` returns.
|
|
742
729
|
*
|
|
743
|
-
* - Complete on purpose: `
|
|
744
|
-
* into it (`owner.id`, `admin.role`, `adminOwner.email`), so a partial body surfaces as
|
|
730
|
+
* - Complete on purpose: kbc-ui's `useProject().sapiToken` is this object verbatim and hooks read
|
|
731
|
+
* deep into it (`owner.id`, `admin.role`, `adminOwner.email`), so a partial body surfaces as
|
|
745
732
|
* `undefined`s far from the test that caused them.
|
|
746
733
|
* - Every permission flag is granted; a test needing a restricted token overrides the handler.
|
|
747
734
|
*/
|
|
@@ -753,8 +740,6 @@ declare const verifyStorageToken: ({ baseUrl, features }?: StorageTokenOptions)
|
|
|
753
740
|
* - The default branch has no creator, which `DevBranch` models as an empty `creatorToken`.
|
|
754
741
|
*/
|
|
755
742
|
declare const getDevBranches: () => DevBranch[];
|
|
756
|
-
//#endregion
|
|
757
|
-
//#region src/clients/storage/bucketSharing.d.ts
|
|
758
743
|
/**
|
|
759
744
|
* The projects and users `GET /v2/storage/sharing-targets` returns.
|
|
760
745
|
*
|
|
@@ -763,8 +748,6 @@ declare const getDevBranches: () => DevBranch[];
|
|
|
763
748
|
* - None is the admin behind `verifyStorageToken()`.
|
|
764
749
|
*/
|
|
765
750
|
declare const getSharingTargets: () => SharingTargets;
|
|
766
|
-
//#endregion
|
|
767
|
-
//#region src/clients/storage/tables.d.ts
|
|
768
751
|
/**
|
|
769
752
|
* Returns a single non-typed, non-alias `TableDetail` (fresh, no imports yet).
|
|
770
753
|
*
|
|
@@ -971,8 +954,6 @@ declare const tableFixtures: {
|
|
|
971
954
|
dataSizeBytes: number;
|
|
972
955
|
};
|
|
973
956
|
};
|
|
974
|
-
//#endregion
|
|
975
|
-
//#region src/fixtures.d.ts
|
|
976
957
|
declare const fixtures: {
|
|
977
958
|
management: {
|
|
978
959
|
applicationTokens: {
|
|
@@ -1867,6 +1848,5 @@ declare const fixtures: {
|
|
|
1867
1848
|
};
|
|
1868
1849
|
};
|
|
1869
1850
|
};
|
|
1870
|
-
//#endregion
|
|
1871
1851
|
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
1852
|
//# sourceMappingURL=index.d.ts.map
|
package/dist/index.js
CHANGED
|
@@ -1,5 +1,5 @@
|
|
|
1
1
|
import { ServiceId } from "@keboola/api-client/constants";
|
|
2
|
-
|
|
2
|
+
// src/clients/apps/deployments.ts
|
|
3
3
|
const APP_ID = "374811";
|
|
4
4
|
const deploymentId = (suffix) => `019f1c3a-${suffix}-7c1e-b4a2-0d9f3e6a8c15`;
|
|
5
5
|
const archivedDeployment = {
|
|
@@ -78,8 +78,7 @@ const listDeployments = () => [
|
|
|
78
78
|
buildFailedDeployment,
|
|
79
79
|
runFailedDeployment
|
|
80
80
|
];
|
|
81
|
-
|
|
82
|
-
//#region src/clients/apps/apps.ts
|
|
81
|
+
// src/clients/apps/apps.ts
|
|
83
82
|
const base$1 = {
|
|
84
83
|
id: APP_ID,
|
|
85
84
|
projectId: "14",
|
|
@@ -167,8 +166,7 @@ const listApps = () => [
|
|
|
167
166
|
readdress(suspendedApp, "374812"),
|
|
168
167
|
readdress(neverDeployedApp, "374813")
|
|
169
168
|
];
|
|
170
|
-
|
|
171
|
-
//#region src/clients/apps/runs.ts
|
|
169
|
+
// src/clients/apps/runs.ts
|
|
172
170
|
const base = {
|
|
173
171
|
appId: APP_ID,
|
|
174
172
|
runtimeSize: "small",
|
|
@@ -254,8 +252,7 @@ const listAppRuns = () => [
|
|
|
254
252
|
runningRun,
|
|
255
253
|
finishedRun
|
|
256
254
|
];
|
|
257
|
-
|
|
258
|
-
//#region src/clients/developerPortal/apps.ts
|
|
255
|
+
// src/clients/developerPortal/apps.ts
|
|
259
256
|
const keboolaVendor = {
|
|
260
257
|
id: "keboola",
|
|
261
258
|
name: "Keboola",
|
|
@@ -597,8 +594,7 @@ const developerPortalFixtures = {
|
|
|
597
594
|
},
|
|
598
595
|
changes: { single: appChange }
|
|
599
596
|
};
|
|
600
|
-
|
|
601
|
-
//#region src/clients/management/applicationTokens.ts
|
|
597
|
+
// src/clients/management/applicationTokens.ts
|
|
602
598
|
const usedToken = {
|
|
603
599
|
id: 13702,
|
|
604
600
|
description: "Sandboxes API",
|
|
@@ -662,8 +658,7 @@ const applicationTokenFixtures = {
|
|
|
662
658
|
expiring: expiringToken,
|
|
663
659
|
created: createdToken
|
|
664
660
|
};
|
|
665
|
-
|
|
666
|
-
//#region src/clients/management/uiApps.ts
|
|
661
|
+
// src/clients/management/uiApps.ts
|
|
667
662
|
const activeApp = {
|
|
668
663
|
stringId: "kbc",
|
|
669
664
|
name: "Keboola Connection UI",
|
|
@@ -718,8 +713,7 @@ const uiAppFixtures = {
|
|
|
718
713
|
inactive: inactiveApp,
|
|
719
714
|
detail: appDetail
|
|
720
715
|
};
|
|
721
|
-
|
|
722
|
-
//#region src/clients/storage/bootstrap.ts
|
|
716
|
+
// src/clients/storage/bootstrap.ts
|
|
723
717
|
/** The stack an MSW-backed test points its client at, unless a caller passes its own. */
|
|
724
718
|
const DEFAULT_BASE_URL = "https://connection.test";
|
|
725
719
|
/**
|
|
@@ -752,8 +746,8 @@ const getStackInfo = ({ baseUrl = DEFAULT_BASE_URL, services = Object.values(Ser
|
|
|
752
746
|
/**
|
|
753
747
|
* The verified master token `GET /v2/storage/tokens/verify` returns.
|
|
754
748
|
*
|
|
755
|
-
* - Complete on purpose: `
|
|
756
|
-
* into it (`owner.id`, `admin.role`, `adminOwner.email`), so a partial body surfaces as
|
|
749
|
+
* - Complete on purpose: kbc-ui's `useProject().sapiToken` is this object verbatim and hooks read
|
|
750
|
+
* deep into it (`owner.id`, `admin.role`, `adminOwner.email`), so a partial body surfaces as
|
|
757
751
|
* `undefined`s far from the test that caused them.
|
|
758
752
|
* - Every permission flag is granted; a test needing a restricted token overrides the handler.
|
|
759
753
|
*/
|
|
@@ -843,8 +837,7 @@ const getDevBranches = () => [{
|
|
|
843
837
|
created: "2024-01-01T00:00:00Z",
|
|
844
838
|
creatorToken: []
|
|
845
839
|
}];
|
|
846
|
-
|
|
847
|
-
//#region src/clients/storage/bucketSharing.ts
|
|
840
|
+
// src/clients/storage/bucketSharing.ts
|
|
848
841
|
/**
|
|
849
842
|
* The projects and users `GET /v2/storage/sharing-targets` returns.
|
|
850
843
|
*
|
|
@@ -885,8 +878,7 @@ const getSharingTargets = () => ({
|
|
|
885
878
|
}
|
|
886
879
|
]
|
|
887
880
|
});
|
|
888
|
-
|
|
889
|
-
//#region src/clients/storage/tables.ts
|
|
881
|
+
// src/clients/storage/tables.ts
|
|
890
882
|
const tableBase = {
|
|
891
883
|
transactional: false,
|
|
892
884
|
indexType: null,
|
|
@@ -1039,8 +1031,7 @@ const tableFixtures = {
|
|
|
1039
1031
|
recentlyUpdated: recentlyUpdatedTable,
|
|
1040
1032
|
large: largeTable
|
|
1041
1033
|
};
|
|
1042
|
-
|
|
1043
|
-
//#region src/fixtures.ts
|
|
1034
|
+
// src/fixtures.ts
|
|
1044
1035
|
const fixtures = {
|
|
1045
1036
|
management: {
|
|
1046
1037
|
applicationTokens: {
|
|
@@ -1097,7 +1088,6 @@ const fixtures = {
|
|
|
1097
1088
|
fixtures: developerPortalFixtures
|
|
1098
1089
|
}
|
|
1099
1090
|
};
|
|
1100
|
-
//#endregion
|
|
1101
1091
|
export { DEFAULT_BASE_URL, 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 };
|
|
1102
1092
|
|
|
1103
1093
|
//# sourceMappingURL=index.js.map
|
package/dist/index.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.js","names":["base"],"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":";;AAEA,MAAa,SAAS;AAGtB,MAAM,gBAAgB,WAAmB,YAAY,OAAO;AAG5D,MAAM,qBAAqB;CACzB,IAAI,aAAa,MAAM;CACvB,eAAe;CACf,cAAc;CACd,aAAa;CACb,YAAY;CACZ,UAAU;CACV,UAAU;CACV,YAAY;CACZ,WAAW;AACb;AAGA,MAAM,iBAAiB;CACrB,IAAI,aAAa,MAAM;CACvB,eAAe;CACf,cAAc;CACd,aAAa;CACb,YAAY;CACZ,UAAU;CACV,UAAU;CACV,YAAY;CACZ,WAAW;AACb;AAGA,MAAM,mBAAmB;CACvB,IAAI,aAAa,MAAM;CACvB,eAAe;CACf,cAAc;CACd,aAAa;CACb,YAAY;CACZ,UAAU;CACV,UAAU;CACV,YAAY;CACZ,WAAW;AACb;AAIA,MAAM,wBAAwB;CAC5B,IAAI,aAAa,MAAM;CACvB,eAAe;CACf,cAAc;CACd,aAAa;CACb,YAAY;CACZ,UAAU;CACV,UAAU;CACV,YAAY;CACZ,WAAW;AACb;AAGA,MAAM,sBAAsB;CAC1B,IAAI,aAAa,MAAM;CACvB,eAAe;CACf,cAAc;CACd,aAAa;CACb,YAAY;CACZ,UAAU;CACV,UAAU;CACV,YAAY;CACZ,WAAW;AACb;AAEA,MAAa,qBAAqB;CAChC,UAAU;CACV,MAAM;CACN,QAAQ;CACR,aAAa;CACb,WAAW;AACb;AAEA,MAAa,sBAAkC;;;;;;;AAQ/C,MAAa,wBAAsC;CACjD;CACA;CACA;CACA;CACA;AACF;;;ACzFA,MAAMA,SAAO;CACX,IAAI;CACJ,WAAW;CACX,aAAa;CACb,UAAU;CACV,UAAU;CACV,MAAM;CACN,KAAK;CACL,mBAAmB;AACrB;AAEA,MAAM,cAAc,gBAA8E;CAChG,qBAAqB,WAAW;CAChC,oBAAoB,WAAW;AACjC;AAEA,MAAM,wBAAwB;CAAE,qBAAqB;CAAM,oBAAoB;AAAK;AAGpF,MAAM,mBAAmB;CACvB,GAAGA;CACH,YAAY;CACZ,OAAO;AACT;;;;;;;;;AAUA,MAAM,qBAAqB;CACzB,GAAGA;CACH,IAAI;CACJ,YAAY;CACZ,OAAO;AACT;AAGA,MAAM,aAAa;CACjB,GAAGA;CACH,YAAY,WAAW,mBAAmB,IAAI;CAC9C,OAAO;AACT;;;;;;AAOA,MAAM,eAAe;CACnB,GAAGA;CACH,YAAY;EACV,qBAAqB,mBAAmB,OAAO;EAC/C,oBAAoB,mBAAmB,KAAK;CAC9C;CACA,OAAO;AACT;AAGA,MAAM,eAAe;CACnB,GAAGA;CACH,YAAY,WAAW,mBAAmB,IAAI;CAC9C,OAAO;AACT;AAUA,MAAa,cAAc;CACzB,eAAe;CACf,iBAAiB;CACjB,SAAS;CACT,WAAW;CACX,WAAW;CACX,UAAU;EAXV,GAAGA;EACH,YAAY,WAAW,mBAAmB,SAAS;EACnD,OAAO;CASG;AACZ;AAKA,MAAa,eAAoB;;;;;AAMjC,MAAM,aAAa,KAAU,QAAqB;CAChD,GAAG;CACH;CACA,KAAK,oBAAoB,GAAG;AAC9B;AAEA,MAAa,iBAAwB;CACnC;CACA,UAAU,cAAc,QAAQ;CAChC,UAAU,kBAAkB,QAAQ;AACtC;;;AC1GA,MAAM,OAAO;CACX,OAAO;CACP,aAAa;CACb,oBAAoB;CACpB,cAAc;CACd,MAAM;AACR;AAEA,MAAM,aAAa;CACjB,GAAG;CACH,IAAI;CACJ,cAAc,mBAAmB,KAAK;CACtC,eAAe,mBAAmB,KAAK;CACvC,OAAO;CACP,WAAW;CACX,WAAW;CACX,WAAW;CACX,aAAa;CACb,eAAe;AACjB;AAEA,MAAM,cAAc;CAClB,GAAG;CACH,IAAI;CACJ,cAAc,mBAAmB,SAAS;CAC1C,eAAe,mBAAmB,SAAS;CAC3C,OAAO;CACP,WAAW;CACX,WAAW;CACX,WAAW;CACX,aAAa;CACb,eAAe;AACjB;;;;;;AAOA,MAAM,YAAY;CAChB,GAAG;CACH,IAAI;CACJ,cAAc,mBAAmB,UAAU;CAC3C,eAAe,mBAAmB,UAAU;CAC5C,OAAO;CACP,WAAW;CACX,WAAW;CACX,WAAW;CACX,aACE;CACF,eAAe;EACb,QAAQ;EACR,SAAS;CACX;AACF;;;;;AAMA,MAAM,YAAY;CAChB,GAAG;CACH,IAAI;CACJ,cAAc;CACd,eAAe;CACf,OAAO;CACP,WAAW;CACX,WAAW;CACX,WAAW;CACX,aAAa;CACb,eAAe;AACjB;AAEA,MAAa,cAAc;CACzB,SAAS;CACT,UAAU;CACV,QAAQ;CACR,QAAQ;AACV;AAEA,MAAa,kBAA0B;;;;;;AAOvC,MAAa,oBAA8B;CAAC;CAAW;CAAW;CAAY;AAAW;;;ACzEzF,MAAM,gBAAgB;CACpB,IAAI;CACJ,MAAM;CACN,OAAO;CACP,SAAS;CACT,MAAM;CACN,YAAY;CACZ,WAAW;AACb;AAEA,MAAM,mBAAmB;CACvB,IAAI;CACJ,MAAM;CACN,OAAO;CACP,SAAS;CACT,YAAY;CACZ,MAAM;CACN,WAAW;AACb;;AAGA,MAAM,eAAe;CACnB,GAAG;CACH,WAAW;AACb;AAKA,MAAM,gBAAgB;CACpB,IAAI;CACJ,MAAM;CACN,OAAO;CACP,SAAS;CACT,MAAM;CACN,YAAY;CACZ,YAAY;CACZ,UAAU;CACV,WAAW;AACb;AAKA,MAAM,qBAAqB;CACzB,GAAG;CACH,YAAY;CACZ,UAAU;CACV,WAAW;AACb;AAEA,MAAM,wBAAwB;CAC5B,GAAG;CACH,YAAY;CACZ,UAAU;CACV,WAAW;AACb;AAGA,MAAM,aAAa,YAAuC;CACxD,IAAI,OAAO;CACX,MAAM,OAAO;CACb,SAAS,OAAO;CAChB,OAAO,OAAO;CACd,MAAM,OAAO;AACf;;AAGA,MAAM,qBAAqB;CACzB,IAAI;CACJ,QAAQ,UAAU,aAAa;CAC/B,MAAM;CACN,MAAM;CACN,kBAAkB;CAClB,iBAAiB;CACjB,YAAY;CACZ,kBAAkB;CAClB,eAAe;CACf,YAAY,CAAC,UAAU;CACvB,YAAY;CACZ,WAAW,CAAC,iBAAiB;CAC7B,eAAe;CACf,oBAAoB;CACpB,qBAAqB;CACrB,sBAAsB;CACtB,QAAQ;CACR,UAAU;CACV,cAAc;CACd,MAAM;CACN,YAAY;EAAE,MAAM;EAAO,KAAK;EAA2B,KAAK;CAAQ;CAGxE,MAAM;EACJ,MAAM;EACN,OACE;CACJ;CACA,SAAS;CACT,WAAW;CACX,WAAW;CACX,KAAK;CACL,aAAa;CACb,kBAAkB;CAClB,kBAAkB;AACpB;;AAGA,MAAM,eAAe;CACnB,IAAI;CACJ,QAAQ,UAAU,gBAAgB;CAClC,MAAM;CACN,MAAM;CACN,kBAAkB;CAClB,iBAAiB;CACjB,YAAY;CACZ,kBAAkB;CAClB,WAAW,CAAC,iBAAiB;CAC7B,YAAY;EAAE,MAAM;EAAQ,KAAK;EAAmB,KAAK;CAAQ;CACjE,MAAM;EACJ,MAAM;EACN,OACE;CACJ;CACA,UAAU;CACV,cAAc;CACd,SAAS;CACT,WAAW;CACX,WAAW;CACX,KAAK;CACL,aAAa;CACb,kBAAkB;CAClB,mBAAmB;EAAE,WAAW;EAA4B,iBAAiB;CAAK;AACpF;;AAGA,MAAM,cAAc;CAClB,IAAI;CACJ,QAAQ,UAAU,gBAAgB;CAClC,MAAM;CACN,MAAM;CACN,kBAAkB;CAClB,UAAU;CACV,cAAc;CACd,SAAS;CACT,WAAW;CACX,KAAK;CACL,aAAa;CACb,kBAAkB;CAClB,mBAAmB;EACjB,WAAW;EACX,iBAAiB;CACnB;AACF;;AAGA,MAAM,gBAAgB;CACpB,IAAI;CACJ,QAAQ,UAAU,aAAa;CAC/B,MAAM;CACN,MAAM;CACN,kBAAkB;CAClB,UAAU;CACV,cAAc;CACd,WAAW;CACX,gBAAgB;CAChB,SAAS;CACT,KAAK;CACL,aAAa;CACb,kBAAkB;CAClB,kBAAkB;AACpB;;;;;AAMA,MAAM,UAAU;CACd,IAAI;CACJ,QAAQ,UAAU,gBAAgB;CAClC,MAAM;CACN,MAAM;CACN,kBAAkB;CAClB,UAAU;CACV,cAAc;CACd,SAAS;CACT,KAAK;CACL,aAAa;CACb,kBAAkB;AACpB;;AAGA,MAAM,iBAAiB;CACrB,IAAI;CACJ,QAAQ,UAAU,gBAAgB;CAClC,MAAM;CACN,MAAM;CACN,kBAAkB;CAClB,SAAS,CAAC,UAAU;CACpB,qBAAqB,EAAE,sBAAsB,CAAC,kCAAkC,EAAE;CAClF,UAAU;CACV,SAAS;CACT,KAAK;CACL,aAAa;CACb,kBAAkB;AACpB;;;;;AAMA,MAAM,eAAe;CACnB,IAAI;CACJ,QAAQ,UAAU,gBAAgB;CAClC,MAAM;CACN,MAAM;CACN,UAAU;CACV,SAAS;CACT,KAAK;CACL,aAAa;CACb,kBAAkB;CAClB,kBAAkB;AACpB;AAIA,MAAM,YAAY;CAChB,UAAU;CACV,MAAM;CACN,SAAS,CAAC,MAAM;CAChB,WAAW;AACb;;AAGA,MAAM,aAAa;CACjB,UAAU;CACV,MAAM;CACN,SAAS,CAAC,MAAM;CAChB,WAAW;AACb;;AAGA,MAAM,iBAAiB;CACrB,UAAU;CACV,MAAM;CACN,SAAS,CAAC;CACV,WAAW;AACb;;AAGA,MAAM,mBAAmB;CACvB,UAAU;CACV,MAAM;CACN,SAAS,CAAC,SAAS;CACnB,WAAW;AACb;;AAGA,MAAM,oBAAoB;CACxB,UAAU;CACV,aAAa;CACb,WAAW;CACX,UAAU;AACZ;;AAGA,MAAM,yBAAyB;CAC7B,UAAU;CACV,aAAa;CACb,WAAW;AACb;AAEA,MAAM,YAAY;CAChB,IAAI;CACJ,WAAW;CACX,WAAW;CACX,SAAS,CACP;EACE,WAAW;EACX,UAAU;EACV,UAAU;EACV,aAAa;CACf,GACA;EACE,WAAW;EACX,UAAU;GAAE,MAAM;GAAQ,KAAK;GAAmB,KAAK;EAAQ;EAC/D,UAAU;GAAE,MAAM;GAAQ,KAAK;GAAmB,KAAK;EAAQ;EAC/D,aAAa;CACf,CACF;AACF;;AAGA,MAAa,0BAAiC,CAAC,oBAAoB,aAAa;;AAGhF,MAAa,uBAA8B;CAAC;CAAc;CAAa;CAAS;AAAc;;AAG9F,MAAa,oBAA2B;CACtC;CACA;CACA;CACA;CACA;CACA;CACA;AACF;;AAGA,MAAa,oBAAsC,CAAC,eAAe,gBAAgB;;AAGnF,MAAa,kBAA0B;;AAGvC,MAAa,uBAAsC;CACjD;CACA;CACA;AACF;AAEA,MAAa,kBAA0B;CAAC;CAAW;CAAY;CAAgB;AAAgB;AAE/F,MAAa,4BAA8C,CAAC,sBAAsB;AAElF,MAAa,uBAAoC,CAAC,SAAS;;AAG3D,MAAa,0BAA0B;CACrC,MAAM;EACJ,WAAW;EACX,WAAW;EACX,UAAU;EACV,YAAY;EACZ;EACA,aAAa;EACb,WAAW;CACb;CACA,SAAS;EACP,SAAS;EACT,YAAY;EACZ,QAAQ;EACR,SAAS;EACT,cAAc;EACd,iBAAiB;CACnB;CACA,OAAO;EACL,OAAO;EACP,QAAQ;EACR,YAAY;EACZ,cAAc;CAChB;CACA,iBAAiB;EACf,SAAS;EACT,UAAU;CACZ;CACA,SAAS,EAAE,QAAQ,UAAU;AAC/B;;;AClXA,MAAM,YAAY;CAChB,IAAI;CACJ,aAAa;CACb,SAAS;CACT,UAAU;CACV,SAAS;CACT,YAAY;CACZ,WAAW;CACX,QAAQ,CAAC,iBAAiB,uBAAuB;CACjD,SAAS;EAAE,IAAI;EAAM,MAAM;CAAW;AACxC;AAGA,MAAM,iBAAiB;CACrB,IAAI;CACJ,aAAa;CACb,SAAS;CACT,UAAU;CACV,SAAS;CACT,YAAY;CACZ,WAAW;CACX,QAAQ,CAAC;CACT,SAAS;EAAE,IAAI;EAAM,MAAM;CAAK;AAClC;AAEA,MAAM,gBAAgB;CACpB,IAAI;CACJ,aAAa;CACb,SAAS;CACT,UAAU;CACV,SAAS;CACT,YAAY;CACZ,WAAW;CACX,QAAQ,CAAC,uBAAuB;CAChC,SAAS;EAAE,IAAI;EAAM,MAAM;CAAW;AACxC;AAGA,MAAM,eAAe;CACnB,GAAG;CACH,IAAI;CACJ,aAAa;CACb,UAAU;CACV,OAAO;AACT;;AAGA,MAAa,4BAA8C;;AAG3D,MAAa,6BAAiD;CAC5D;CACA;CACA;AACF;AAEA,MAAa,2BAA2B;CACtC,MAAM;CACN,WAAW;CACX,UAAU;CACV,SAAS;AACX;;;AChEA,MAAM,YAAY;CAChB,UAAU;CACV,MAAM;CACN,SAAS;CACT,UAAU;CACV,MAAM;CACN,SAAS,CAAC,0DAA0D;CACpE,QAAQ,CAAC,0DAA0D;CACnE,YAAY;CACZ,WAAW;AACb;AAGA,MAAM,cAAc;CAClB,UAAU;CACV,MAAM;CACN,SAAS;CACT,UAAU;CACV,MAAM;CACN,SAAS,CAAC;CACV,QAAQ,CAAC;CACT,YAAY;CACZ,WAAW;AACb;AAEA,MAAM,YAAY;CAChB,IAAI;CACJ,UAAU;CACV,MAAM;CACN,SAAS;CACT,UAAU,CACR;EACE,IAAI;EACJ,SAAS;EACT,SAAS;EACT,UAAU;EACV,YAAY;EACZ,UAAU;EACV,WAAW;CACb,GACA;EACE,IAAI;EACJ,SAAS;EACT,SAAS;EACT,UAAU;EACV,YAAY;EACZ,UAAU;EACV,WAAW;CACb,CACF;AACF;;AAGA,MAAa,iBAA8B;;AAG3C,MAAa,kBAA2B,CAAC,WAAW,WAAW;AAE/D,MAAa,gBAAgB;CAC3B,QAAQ;CACR,UAAU;CACV,QAAQ;AACV;;;;AC5DA,MAAa,mBAAmB;;;;;;;;;;AAyBhC,MAAa,gBAAgB,EAC3B,UAAU,kBACV,WAAW,OAAO,OAAO,SAAS,MACd,CAAC,MAAiB;CACtC,MAAM,EAAE,SAAS,IAAI,IAAI,OAAO;CAEhC,OAAO;EACL,KAAK;EACL,eAAe;EACf;EACA,UAAU;EACV,OAAO;EACP,SAAS;EACT,cAAc,EAAE,kBAAkB,GAAG;EACrC,UAAU,SAAS,KAAK,QAAQ;GAAE;GAAI,KAAK,WAAW,GAAG,GAAG;EAAO,EAAE;EACrE,YAAY,CAAC;EACb,UAAU,CAAC;CACb;AACF;;;;;;;;;AAUA,MAAa,sBAAsB,EACjC,UAAU,kBACV,WAAW,CAAC,MACW,CAAC,OAAqB;CAC7C,IAAI;CACJ,SAAS;CACT,WAAW;CACX,aAAa;CACb,KAAK;CACL,eAAe;CACf,kBAAkB;CAClB,iBAAiB;CACjB,uBAAuB;CACvB,eAAe;CACf,iCAAiC;CACjC,eAAe;CACf,yBAAyB;CACzB,sBAAsB;CACtB,cAAc;EAAE,IAAI;EAAI,aAAa;CAAa;CAClD,SAAS;CACT,WAAW;CACX,YAAY;CACZ,SAAS;CACT,eAAe;CACf,mBAAmB,CAAC;CACpB,OAAO;EACL,IAAI;EACJ,MAAM;EACN,MAAM;EACN,QAAQ;EACR,SAAS;EACT,SAAS;EACT;EACA,eAAe;EACf,WAAW;EACX,UAAU;EACV,YAAY;EACZ,cAAc;EACd,WAAW;EACX,aAAa;EACb,aAAa;EACb,gBAAgB;EAChB,cAAc;EACd,QAAQ,CAAC;EACT,SAAS,CAAC;EACV,YAAY;EACZ,oBAAoB;EACpB,yBAAyB;EACzB,kBAAkB,CAAC,WAAW;EAC9B,qBAAqB;EACrB,UAAU;EACV,SAAS;EACT,YAAY;CACd;CACA,cAAc;EAAE,IAAI;EAAS,SAAS;CAAK;CAC3C,OAAO;EACL,IAAI;EACJ,MAAM;EACN,UAAU,CAAC;EACX,sBAAsB;EACtB,MAAM;EACN,aAAa;CACf;CACA,YAAY;EAAE,IAAI;EAAK,MAAM;EAAc,OAAO;CAAoB;AACxE;;;;;;;AAQA,MAAa,uBAAoC,CAC/C;CACE,IAAI;CACJ,MAAM;CACN,aAAa;CACb,WAAW;CACX,SAAS;CACT,cAAc,CAAC;AACjB,CACF;;;;;;;;;;ACjIA,MAAa,2BAA2C;CACtD,UAAU;EACR;GAAE,IAAI;GAAG,MAAM;EAAiB;EAChC;GAAE,IAAI;GAAI,MAAM;EAAgB;EAChC;GAAE,IAAI;GAAK,MAAM;EAAQ;CAC3B;CACA,OAAO;EACL;GAAE,IAAI;GAAI,MAAM;GAAQ,OAAO;EAAmB;EAClD;GAAE,IAAI;GAAI,MAAM;GAAS,OAAO;EAAoB;EACpD;GAAE,IAAI;GAAG,MAAM;GAAS,OAAO;EAAoB;CACrD;AACF;;;ACYA,MAAM,YAAY;CAChB,eAAe;CACf,WAAW;CACX,UAAU,CAAC;CACX,kBAAkB;CAClB,iBAAiB,CAAC;CAClB,4BAA4B;CAC5B,aAAa;CACb,4BAA4B;CAC5B,eAAe;CACf,WAAW;CACX,YAAY,CAAC;CACb,QAAA;EAzCA,IAAI;EACJ,MAAM;EACN,aAAa;EACb,OAAO;EACP,aAAa;EACb,SAAS;EACT,gBAAgB;EAChB,eAAe;EACf,YAAY;EACZ,2BAA2B;EAC3B,mBAAmB;EACnB,WAAW;EACX,eAAe;EACf,KAAK;EACL,SAAS;EACT,aAAa,CAAC;EACd,cAAc;EACd,OAAO;EACP,UAAU;EACV,OAAO;EACP,SAAS;EACT,MAAM;EACN,QAAQ;EACR,SAAS;EACT,gBAAgB;EAChB,sBAAsB;CAgBjB;CACL,SAAS;CACT,SAAS;AACX;AAGA,MAAM,aAAa;CACjB,GAAG;CACH,KAAK;CACL,IAAI;CACJ,MAAM;CACN,aAAa;CACb,MAAM;CACN,YAAY,CAAC,IAAI;CACjB,UAAU,CAAC;CACX,SAAS;EAAC;EAAM;EAAS;EAAQ;CAAY;CAC7C,gBAAgB,CAAC;CACjB,SAAS;CACT,gBAAgB;CAChB,gBAAgB;CAChB,WAAW;CACX,eAAe;AACjB;AAGA,MAAM,uBAAuB;CAC3B,GAAG;CACH,KAAK;CACL,IAAI;CACJ,MAAM;CACN,aAAa;CACb,MAAM;CACN,YAAY,CAAC,UAAU;CACvB,UAAU,CACR;EACE,IAAI;EACJ,KAAK;EACL,OAAO;EACP,UAAU;EACV,WAAW;CACb,CACF;CACA,SAAS;EAAC;EAAY;EAAW;EAAS;EAAU;EAAc;CAAY;CAC9E,gBAAgB,EACd,UAAU,CACR;EACE,IAAI;EACJ,KAAK;EACL,OAAO;EACP,UAAU;EACV,WAAW;CACb,CACF,EACF;CACA,SAAS;CACT,gBAAgB;CAChB,gBAAgB;CAChB,WAAW;CACX,eAAe;AACjB;AAGA,MAAM,aAAa;CACjB,GAAG;CACH,KAAK;CACL,IAAI;CACJ,MAAM;CACN,aAAa;CACb,MAAM;CACN,YAAY,CAAC;CACb,UAAU,CAAC;CACX,SAAS;EAAC;EAAY;EAAW;EAAc;EAAc;CAAa;CAC1E,gBAAgB,CAAC;CACjB,SAAS;CACT,gBAAgB;CAChB,gBAAgB;CAChB,WAAW;CACX,eAAe;AACjB;;;;;;AAOA,MAAa,iBAA8B;;;;;;;;;;AAW3C,MAAa,mBAAkC;CAAC;CAAY;CAAsB;AAAU;;;;AAK5F,MAAa,gBAAgB;CAC3B,OAAO;CACP,iBAAiB;CACjB,OAAO;AACT;;;AC5HA,MAAa,WAAW;CACtB,YAAY;EACV,mBAAmB;GACjB;GACA;GACA,UAAU;EACZ;EACA,QAAQ;GACN;GACA;GACA,UAAU;EACZ;CACF;CACA,SAAS;EACP,WAAW;GACT;GACA;GACA;EACF;EACA,eAAe,EACb,kBACF;EACA,QAAQ;GACN;GACA;GACA,UAAU;EACZ;CACF;CACA,MAAM;EACJ,MAAM;GACJ;GACA;GACA,UAAU;EACZ;EACA,aAAa;GACX;GACA;GACA,UAAU;EACZ;EACA,MAAM;GACJ;GACA;GACA,UAAU;EACZ;CACF;CACA,iBAAiB;EACf;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA,UAAU;CACZ;AACF"}
|
|
1
|
+
{"version":3,"file":"index.js","names":["base"],"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: 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/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@keboola/api-fixtures",
|
|
3
|
-
"version": "
|
|
3
|
+
"version": "45.0.0",
|
|
4
4
|
"description": "Typed test fixtures keyed by Keboola API endpoint",
|
|
5
5
|
"license": "MIT",
|
|
6
6
|
"type": "module",
|
|
@@ -49,22 +49,22 @@
|
|
|
49
49
|
"typescript"
|
|
50
50
|
],
|
|
51
51
|
"peerDependencies": {
|
|
52
|
-
"@keboola/api-client": "^
|
|
52
|
+
"@keboola/api-client": "^50.0.0"
|
|
53
53
|
},
|
|
54
54
|
"devDependencies": {
|
|
55
55
|
"@arethetypeswrong/cli": "^0.18.2",
|
|
56
|
-
"@keboola/api-client": "^
|
|
57
|
-
"@keboola/eslint-plugin-design": "^0.
|
|
56
|
+
"@keboola/api-client": "^50.0.0",
|
|
57
|
+
"@keboola/eslint-plugin-design": "^0.6.0",
|
|
58
58
|
"@keboola/oxlint-config": "^10.2.0",
|
|
59
59
|
"@keboola/tsconfig": "^0.2.1",
|
|
60
60
|
"@types/node": "24.12.0",
|
|
61
61
|
"@typescript/native": "npm:typescript@^7.0.2",
|
|
62
62
|
"oxfmt": "^0.66.0",
|
|
63
|
-
"oxlint": "^1.
|
|
63
|
+
"oxlint": "^1.89.0",
|
|
64
64
|
"tsdown": "^0.22.14",
|
|
65
65
|
"typescript": "npm:@typescript/typescript6@^6.0.2",
|
|
66
|
-
"vite": "^8.3.
|
|
67
|
-
"vitest": "^5.0.
|
|
66
|
+
"vite": "^8.3.5",
|
|
67
|
+
"vitest": "^5.0.5"
|
|
68
68
|
},
|
|
69
69
|
"scripts": {
|
|
70
70
|
"type-check": "tsc",
|