@keboola/api-fixtures 22.0.0 → 26.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/dist/index.js.map CHANGED
@@ -1 +1 @@
1
- {"version":3,"sources":["../src/clients/apps/deployments.ts","../src/clients/apps/apps.ts","../src/clients/apps/runs.ts","../src/clients/storage/tables.ts","../src/fixtures.ts"],"names":["base"],"mappings":"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","file":"index.js","sourcesContent":["import type { Deployment } from '@keboola/api-client/apps/types';\n\n/**\n * Deployment ids are the deterministic Kubernetes CR name — `app-{appId}-dpl-{hash}` —\n * so they are reproduced in that shape rather than as opaque strings.\n */\nexport const APP_ID = '374811';\n\nconst deploymentId = (hash: string) => `app-${APP_ID}-dpl-${hash}`;\n\n// Retired: the row outlives its CR, so it stays in history with `archived: true`.\nconst archivedDeployment = {\n id: deploymentId('350e2cf5287c5665'),\n number: 1,\n configId: '01kz9kny4n49x3xk0e4k8ynpmq',\n configVersion: '14',\n gitCommitSha: null,\n size: 'tiny' as const,\n buildState: 'PREBUILT' 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('7a4c1b9e0d3f2a81'),\n number: 2,\n configId: '01kz9kny4n49x3xk0e4k8ynpmq',\n configVersion: '16',\n gitCommitSha: null,\n size: 'small' as const,\n buildState: 'PREBUILT' 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`: pinned and built, but nothing ever started it.\nconst stagedDeployment = {\n id: deploymentId('c5e83f17b204de96'),\n number: 3,\n configId: '01kz9kny4n49x3xk0e4k8ynpmq',\n configVersion: '18',\n gitCommitSha: null,\n size: 'small' as const,\n buildState: 'PREBUILT' as const,\n runState: 'NEVER_RUN' as const,\n archived: false,\n archivedAt: null,\n createdAt: '2026-08-17T08:41:19+00:00',\n} satisfies Deployment;\n\n// No artifact was produced, so this deployment can never run — a different problem,\n// with a different fix, from a run failure. Not reachable on the platform today\n// (every deployment is `PREBUILT`); the headline table treats it as a contract.\nconst buildFailedDeployment = {\n id: deploymentId('e91d47a8c6b02f35'),\n number: 4,\n configId: '01kz9kny4n49x3xk0e4k8ynpmq',\n configVersion: '19',\n gitCommitSha: null,\n size: 'small' as const,\n buildState: 'FAILED' as const,\n runState: 'NEVER_RUN' 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('2b6f0a94e7d51c83'),\n number: 5,\n configId: '01kz9kny4n49x3xk0e4k8ynpmq',\n configVersion: '20',\n gitCommitSha: null,\n size: 'small' as const,\n buildState: 'PREBUILT' 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 * One continuous history: #1 retired, #2 serving, #3 staged, #4 failed to build, #5 built but its\n * run failed.\n *\n * All five, because `runFixtures.failed` names #5 as its deployment — a list that left the failed\n * ones out could not be joined to the runs, which is the join a timeline is built from.\n *\n * Returned in ascending `number` order. The endpoint does not specify an order, so consumers must\n * sort for themselves — this order is a fixture convention, not a contract to rely on, and it is\n * ascending on purpose: a consumer that assumes newest-first gets the wrong answer here rather\n * than in production.\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 mode: 'prod' as const,\n url: APP_URL,\n};\n\nconst production = (deployment: (typeof deploymentFixtures)[keyof typeof deploymentFixtures]) => ({\n desiredNumber: deployment.number,\n desiredId: deployment.id,\n actualNumber: deployment.number,\n actualId: deployment.id,\n});\n\n// Created through `/v2`, nothing deployed yet: the URL is reserved and publicly 404s.\nconst neverDeployedApp = {\n ...base,\n configVersion: '1',\n production: { desiredNumber: null, desiredId: null, actualNumber: null, actualId: null },\n undeployedChanges: false,\n state: 'NOT_DEPLOYED' as const,\n} satisfies App;\n\n/**\n * Transcribed verbatim from canary on 17 Aug 2026 (AJDA-3140, probe P1): an app created and\n * started through `/v1`, serving real traffic (HTTP 200, 8340 B) at the moment this was read,\n * which `/v2` nonetheless reports as `NOT_DEPLOYED` with an empty `production` because it was\n * 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 id: '374811',\n projectId: '14',\n componentId: 'keboola.data-apps',\n branchId: '6',\n configId: '01kz9kny4n49x3xk0e4k8ynpmq',\n configVersion: '2',\n type: 'streamlit' as const,\n mode: 'dev' as const,\n url: APP_URL,\n production: { desiredNumber: null, desiredId: null, actualNumber: null, actualId: null },\n undeployedChanges: false,\n state: 'NOT_DEPLOYED' as const,\n} satisfies App;\n\n// Serving deployment #2, config unchanged since it was deployed.\nconst runningApp = {\n ...base,\n configVersion: deploymentFixtures.live.configVersion,\n production: production(deploymentFixtures.live),\n undeployedChanges: false,\n state: 'RUNNING' as const,\n} satisfies App;\n\n// Still serving #2 (config v16) while the config has moved on to v18.\nconst appWithUndeployedChanges = {\n ...base,\n configVersion: deploymentFixtures.staged.configVersion,\n production: production(deploymentFixtures.live),\n undeployedChanges: true,\n state: 'RUNNING' as const,\n} satisfies App;\n\n/**\n * A blue/green promotion in flight: #3 has been asked for, #2 is still what traffic reaches.\n * `state` stays `RUNNING` throughout — the rollout is only visible as `desiredId !== actualId`.\n */\nconst promotingApp = {\n ...base,\n configVersion: deploymentFixtures.staged.configVersion,\n production: {\n desiredNumber: deploymentFixtures.staged.number,\n desiredId: deploymentFixtures.staged.id,\n actualNumber: deploymentFixtures.live.number,\n actualId: deploymentFixtures.live.id,\n },\n undeployedChanges: true,\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 sleepingApp = {\n ...base,\n configVersion: deploymentFixtures.live.configVersion,\n production: production(deploymentFixtures.live),\n undeployedChanges: false,\n state: 'SLEEPING' as const,\n} satisfies App;\n\n// Explicitly suspended: a visitor gets a 503 until someone resumes it.\nconst suspendedApp = {\n ...base,\n configVersion: deploymentFixtures.live.configVersion,\n production: production(deploymentFixtures.live),\n undeployedChanges: false,\n state: 'SUSPENDED' as const,\n} satisfies App;\n\nexport const appFixtures = {\n neverDeployed: neverDeployedApp,\n legacyV1Serving: legacyV1ServingApp,\n running: runningApp,\n undeployedChanges: appWithUndeployedChanges,\n promoting: promotingApp,\n sleeping: sleepingApp,\n suspended: suspendedApp,\n} satisfies Record<\n | 'neverDeployed'\n | 'legacyV1Serving'\n | 'running'\n | 'undeployedChanges'\n | 'promoting'\n | 'sleeping'\n | 'suspended',\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 * including the deployment ids inside `production`, which embed the app id.\n */\nconst readdress = (app: App, id: string): App => ({\n ...app,\n id,\n url: `https://data-app-${id}.hub.canary-orion.keboola.dev`,\n production: {\n ...app.production,\n desiredId: app.production.desiredId?.replace(APP_ID, id) ?? null,\n actualId: app.production.actualId?.replace(APP_ID, id) ?? null,\n },\n});\n\nexport const listApps = (): App[] => [\n runningApp,\n readdress(appWithUndeployedChanges, '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 { 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-03-10T08:30:00+0100',\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: null,\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/tables',\n updated: '2024-03-10T08:30:00+0100',\n};\n\n// A freshly created table with no imports yet (non-typed, non-alias variant).\nconst freshTable = {\n id: 'in.c-main.users',\n name: 'users',\n displayName: 'Users',\n primaryKey: ['id'],\n metadata: [],\n columns: ['id', 'email', 'name', 'created_at'],\n columnMetadata: {},\n attributes: [],\n bucket,\n isTyped: false as const,\n isAlias: false as const,\n} satisfies TableDetail;\n\n// A recently updated table with a moderate size (non-typed, non-alias variant).\nconst recentlyUpdatedTable = {\n id: 'in.c-main.orders',\n name: 'orders',\n displayName: '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 attributes: [],\n bucket,\n isTyped: false as const,\n isAlias: false as const,\n} satisfies TableDetail;\n\n// A large table with many rows representing high-volume data (non-typed, non-alias variant).\nconst largeTable = {\n id: 'in.c-main.events',\n name: 'events',\n displayName: 'Events',\n primaryKey: [],\n metadata: [],\n columns: ['event_id', 'user_id', 'event_type', 'properties', 'occurred_at'],\n columnMetadata: {},\n attributes: [],\n bucket,\n isTyped: false as const,\n isAlias: false as const,\n} satisfies TableDetail;\n\n/**\n * Returns a single realistic typed TableDetail (fresh, no imports yet).\n *\n * The explicit return type ensures any divergence from the OpenAPI-derived\n * `TableDetail` in `@keboola/api-client` surfaces 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, no data imported.\n * 2. Recently updated — moderate size, recent import.\n * 3. Large — high row count, large byte size.\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 { getTable, listTables, tableFixtures } from './clients/storage/tables';\n\nexport const fixtures = {\n storage: {\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};\n"]}
1
+ {"version":3,"file":"index.js","names":["base"],"sources":["../src/clients/apps/deployments.ts","../src/clients/apps/apps.ts","../src/clients/apps/runs.ts","../src/clients/developerPortal/apps.ts","../src/clients/storage/tables.ts","../src/fixtures.ts"],"sourcesContent":["import type { Deployment } from '@keboola/api-client/apps/types';\n\n/**\n * Deployment ids are the deterministic Kubernetes CR name — `app-{appId}-dpl-{hash}` —\n * so they are reproduced in that shape rather than as opaque strings.\n */\nexport const APP_ID = '374811';\n\nconst deploymentId = (hash: string) => `app-${APP_ID}-dpl-${hash}`;\n\n// Retired: the row outlives its CR, so it stays in history with `archived: true`.\nconst archivedDeployment = {\n id: deploymentId('350e2cf5287c5665'),\n number: 1,\n configId: '01kz9kny4n49x3xk0e4k8ynpmq',\n configVersion: '14',\n gitCommitSha: null,\n size: 'tiny' as const,\n buildState: 'PREBUILT' 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('7a4c1b9e0d3f2a81'),\n number: 2,\n configId: '01kz9kny4n49x3xk0e4k8ynpmq',\n configVersion: '16',\n gitCommitSha: null,\n size: 'small' as const,\n buildState: 'PREBUILT' 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`: pinned and built, but nothing ever started it.\nconst stagedDeployment = {\n id: deploymentId('c5e83f17b204de96'),\n number: 3,\n configId: '01kz9kny4n49x3xk0e4k8ynpmq',\n configVersion: '18',\n gitCommitSha: null,\n size: 'small' as const,\n buildState: 'PREBUILT' as const,\n runState: 'NEVER_RUN' as const,\n archived: false,\n archivedAt: null,\n createdAt: '2026-08-17T08:41:19+00:00',\n} satisfies Deployment;\n\n// No artifact was produced, so this deployment can never run — a different problem,\n// with a different fix, from a run failure. Not reachable on the platform today\n// (every deployment is `PREBUILT`); the headline table treats it as a contract.\nconst buildFailedDeployment = {\n id: deploymentId('e91d47a8c6b02f35'),\n number: 4,\n configId: '01kz9kny4n49x3xk0e4k8ynpmq',\n configVersion: '19',\n gitCommitSha: null,\n size: 'small' as const,\n buildState: 'FAILED' as const,\n runState: 'NEVER_RUN' 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('2b6f0a94e7d51c83'),\n number: 5,\n configId: '01kz9kny4n49x3xk0e4k8ynpmq',\n configVersion: '20',\n gitCommitSha: null,\n size: 'small' as const,\n buildState: 'PREBUILT' 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 * One continuous history: #1 retired, #2 serving, #3 staged, #4 failed to build, #5 built but its\n * run failed.\n *\n * All five, because `runFixtures.failed` names #5 as its deployment — a list that left the failed\n * ones out could not be joined to the runs, which is the join a timeline is built from.\n *\n * Returned in ascending `number` order. The endpoint does not specify an order, so consumers must\n * sort for themselves — this order is a fixture convention, not a contract to rely on, and it is\n * ascending on purpose: a consumer that assumes newest-first gets the wrong answer here rather\n * than in production.\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 mode: 'prod' as const,\n url: APP_URL,\n};\n\nconst production = (deployment: (typeof deploymentFixtures)[keyof typeof deploymentFixtures]) => ({\n desiredNumber: deployment.number,\n desiredId: deployment.id,\n actualNumber: deployment.number,\n actualId: deployment.id,\n});\n\n// Created through `/v2`, nothing deployed yet: the URL is reserved and publicly 404s.\nconst neverDeployedApp = {\n ...base,\n configVersion: '1',\n production: { desiredNumber: null, desiredId: null, actualNumber: null, actualId: null },\n undeployedChanges: false,\n state: 'NOT_DEPLOYED' as const,\n} satisfies App;\n\n/**\n * Transcribed verbatim from canary on 17 Aug 2026 (AJDA-3140, probe P1): an app created and\n * started through `/v1`, serving real traffic (HTTP 200, 8340 B) at the moment this was read,\n * which `/v2` nonetheless reports as `NOT_DEPLOYED` with an empty `production` because it was\n * 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 id: '374811',\n projectId: '14',\n componentId: 'keboola.data-apps',\n branchId: '6',\n configId: '01kz9kny4n49x3xk0e4k8ynpmq',\n configVersion: '2',\n type: 'streamlit' as const,\n mode: 'dev' as const,\n url: APP_URL,\n production: { desiredNumber: null, desiredId: null, actualNumber: null, actualId: null },\n undeployedChanges: false,\n state: 'NOT_DEPLOYED' as const,\n} satisfies App;\n\n// Serving deployment #2, config unchanged since it was deployed.\nconst runningApp = {\n ...base,\n configVersion: deploymentFixtures.live.configVersion,\n production: production(deploymentFixtures.live),\n undeployedChanges: false,\n state: 'RUNNING' as const,\n} satisfies App;\n\n// Still serving #2 (config v16) while the config has moved on to v18.\nconst appWithUndeployedChanges = {\n ...base,\n configVersion: deploymentFixtures.staged.configVersion,\n production: production(deploymentFixtures.live),\n undeployedChanges: true,\n state: 'RUNNING' as const,\n} satisfies App;\n\n/**\n * A blue/green promotion in flight: #3 has been asked for, #2 is still what traffic reaches.\n * `state` stays `RUNNING` throughout — the rollout is only visible as `desiredId !== actualId`.\n */\nconst promotingApp = {\n ...base,\n configVersion: deploymentFixtures.staged.configVersion,\n production: {\n desiredNumber: deploymentFixtures.staged.number,\n desiredId: deploymentFixtures.staged.id,\n actualNumber: deploymentFixtures.live.number,\n actualId: deploymentFixtures.live.id,\n },\n undeployedChanges: true,\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 sleepingApp = {\n ...base,\n configVersion: deploymentFixtures.live.configVersion,\n production: production(deploymentFixtures.live),\n undeployedChanges: false,\n state: 'SLEEPING' as const,\n} satisfies App;\n\n// Explicitly suspended: a visitor gets a 503 until someone resumes it.\nconst suspendedApp = {\n ...base,\n configVersion: deploymentFixtures.live.configVersion,\n production: production(deploymentFixtures.live),\n undeployedChanges: false,\n state: 'SUSPENDED' as const,\n} satisfies App;\n\nexport const appFixtures = {\n neverDeployed: neverDeployedApp,\n legacyV1Serving: legacyV1ServingApp,\n running: runningApp,\n undeployedChanges: appWithUndeployedChanges,\n promoting: promotingApp,\n sleeping: sleepingApp,\n suspended: suspendedApp,\n} satisfies Record<\n | 'neverDeployed'\n | 'legacyV1Serving'\n | 'running'\n | 'undeployedChanges'\n | 'promoting'\n | 'sleeping'\n | 'suspended',\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 * including the deployment ids inside `production`, which embed the app id.\n */\nconst readdress = (app: App, id: string): App => ({\n ...app,\n id,\n url: `https://data-app-${id}.hub.canary-orion.keboola.dev`,\n production: {\n ...app.production,\n desiredId: app.production.desiredId?.replace(APP_ID, id) ?? null,\n actualId: app.production.actualId?.replace(APP_ID, id) ?? null,\n },\n});\n\nexport const listApps = (): App[] => [\n runningApp,\n readdress(appWithUndeployedChanges, '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 appId: '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 },\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 },\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 { 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-03-10T08:30:00+0100',\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: null,\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/tables',\n updated: '2024-03-10T08:30:00+0100',\n};\n\n// A freshly created table with no imports yet (non-typed, non-alias variant).\nconst freshTable = {\n id: 'in.c-main.users',\n name: 'users',\n displayName: 'Users',\n primaryKey: ['id'],\n metadata: [],\n columns: ['id', 'email', 'name', 'created_at'],\n columnMetadata: {},\n attributes: [],\n bucket,\n isTyped: false as const,\n isAlias: false as const,\n} satisfies TableDetail;\n\n// A recently updated table with a moderate size (non-typed, non-alias variant).\nconst recentlyUpdatedTable = {\n id: 'in.c-main.orders',\n name: 'orders',\n displayName: '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 attributes: [],\n bucket,\n isTyped: false as const,\n isAlias: false as const,\n} satisfies TableDetail;\n\n// A large table with many rows representing high-volume data (non-typed, non-alias variant).\nconst largeTable = {\n id: 'in.c-main.events',\n name: 'events',\n displayName: 'Events',\n primaryKey: [],\n metadata: [],\n columns: ['event_id', 'user_id', 'event_type', 'properties', 'occurred_at'],\n columnMetadata: {},\n attributes: [],\n bucket,\n isTyped: false as const,\n isAlias: false as const,\n} satisfies TableDetail;\n\n/**\n * Returns a single realistic typed TableDetail (fresh, no imports yet).\n *\n * The explicit return type ensures any divergence from the OpenAPI-derived\n * `TableDetail` in `@keboola/api-client` surfaces 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, no data imported.\n * 2. Recently updated — moderate size, recent import.\n * 3. Large — high row count, large byte size.\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 { getTable, listTables, tableFixtures } from './clients/storage/tables';\n\nexport const fixtures = {\n storage: {\n tables: {\n getTable,\n listTables,\n fixtures: tableFixtures,\n },\n },\n apps: {\n apps: {\n getApp,\n listApps,\n fixtures: appFixtures,\n },\n deployments: {\n getDeployment,\n listDeployments,\n fixtures: deploymentFixtures,\n },\n runs: {\n getAppRun,\n listAppRuns,\n fixtures: runFixtures,\n },\n },\n developerPortal: {\n listPublishedApps,\n listVendorApps,\n listAllApps,\n listAllVendors,\n getVendor,\n listVendors,\n listUsers,\n listServiceAccounts,\n listAppChanges,\n fixtures: developerPortalFixtures,\n },\n};\n"],"mappings":"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"}
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@keboola/api-fixtures",
3
- "version": "22.0.0",
3
+ "version": "26.0.0",
4
4
  "description": "Typed test fixtures keyed by Keboola API endpoint",
5
5
  "license": "MIT",
6
6
  "type": "module",
@@ -10,6 +10,7 @@
10
10
  "files": [
11
11
  "dist",
12
12
  "README.md",
13
+ "CHANGELOG.md",
13
14
  "AGENTS.md"
14
15
  ],
15
16
  "publishConfig": {
@@ -48,22 +49,21 @@
48
49
  "typescript"
49
50
  ],
50
51
  "peerDependencies": {
51
- "@keboola/api-client": "^27.0.0"
52
+ "@keboola/api-client": "^31.0.0"
52
53
  },
53
54
  "devDependencies": {
54
55
  "@arethetypeswrong/cli": "^0.18.2",
55
56
  "@types/node": "24.12.0",
56
57
  "@typescript/native": "npm:typescript@^7.0.2",
57
- "esbuild": "^0.28.1",
58
58
  "oxfmt": "^0.57.0",
59
59
  "oxlint": "^1.72.0",
60
- "tsup": "^8.5.1",
60
+ "tsdown": "^0.22.14",
61
61
  "typescript": "npm:@typescript/typescript6@^6.0.2",
62
62
  "vite": "^8.1.5",
63
63
  "vitest": "^4.1.10",
64
- "@keboola/api-client": "^27.0.0",
65
- "@keboola/oxlint-config": "^10.0.1",
66
- "@keboola/tsconfig": "^0.2.0"
64
+ "@keboola/oxlint-config": "^10.0.2",
65
+ "@keboola/tsconfig": "^0.2.1",
66
+ "@keboola/api-client": "^31.0.0"
67
67
  },
68
68
  "scripts": {
69
69
  "type-check": "tsc",
@@ -75,7 +75,7 @@
75
75
  "knip:fix": "pnpm --dir ../.. exec knip --workspace packages/api-fixtures --fix-type types,exports,files",
76
76
  "test": "vitest run --typecheck --passWithNoTests --reporter=dot",
77
77
  "transit": "pnpm build",
78
- "build": "tsup",
79
- "build:check": "attw --pack ."
78
+ "build": "tsdown",
79
+ "build:check": "node ../../tooling/check-dist-exports.mjs && attw --pack ."
80
80
  }
81
81
  }