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