@keboola/api-client 52.0.0 → 54.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.
Files changed (164) hide show
  1. package/AGENTS.md +33 -6
  2. package/API-SURFACE.md +5 -1
  3. package/CHANGELOG.md +39 -0
  4. package/README.md +1 -1
  5. package/dist/{admin-Di-MmGFP.cjs → admin-BZ7knTd0.cjs} +18 -2
  6. package/dist/admin-BZ7knTd0.cjs.map +1 -0
  7. package/dist/{admin-CbMOsfgs.js → admin-xFfHSZHQ.js} +13 -3
  8. package/dist/admin-xFfHSZHQ.js.map +1 -0
  9. package/dist/{componentId-DZP1rBix.js → componentId-Cps6WBy1.js} +1 -2
  10. package/dist/{componentId-DZP1rBix.js.map → componentId-Cps6WBy1.js.map} +1 -1
  11. package/dist/{componentId-olp0tltf.cjs → componentId-_tRhEv6W.cjs} +1 -2
  12. package/dist/{componentId-olp0tltf.cjs.map → componentId-_tRhEv6W.cjs.map} +1 -1
  13. package/dist/{configurations-WI8H4zLk.cjs → configurations-BM63ep1s.cjs} +2 -2
  14. package/dist/{configurations-WI8H4zLk.cjs.map → configurations-BM63ep1s.cjs.map} +1 -1
  15. package/dist/{configurations-Cd6Nsox-.js → configurations-BqvtIQm4.js} +2 -2
  16. package/dist/{configurations-Cd6Nsox-.js.map → configurations-BqvtIQm4.js.map} +1 -1
  17. package/dist/constants/index.cjs +4 -3
  18. package/dist/constants/index.d.cts +1 -1
  19. package/dist/constants/index.d.ts +1 -1
  20. package/dist/constants/index.js +3 -2
  21. package/dist/{constants-Dqi0ewGv.js → constants-DLPkpnGv.js} +4 -32
  22. package/dist/{constants-Dqi0ewGv.js.map → constants-DLPkpnGv.js.map} +1 -1
  23. package/dist/{constants-d0Do9NSN.cjs → constants-Day8CU5i.cjs} +3 -37
  24. package/dist/{constants-d0Do9NSN.cjs.map → constants-Day8CU5i.cjs.map} +1 -1
  25. package/dist/domain/permissions/index.cjs +4 -3
  26. package/dist/domain/permissions/index.d.cts +9 -1
  27. package/dist/domain/permissions/index.d.ts +9 -1
  28. package/dist/domain/permissions/index.js +4 -4
  29. package/dist/encryption/index.d.cts +1 -1
  30. package/dist/encryption/index.d.ts +1 -1
  31. package/dist/encryption/types.d.cts +1 -1
  32. package/dist/encryption/types.d.ts +1 -1
  33. package/dist/{index-Df8lZNSH.d.cts → index-B04rWq_0.d.cts} +2 -2
  34. package/dist/{index-B7el5pJU.d.cts → index-BtvWJBYh.d.cts} +20 -7
  35. package/dist/{index-B5rELADq.d.cts → index-Cd0naVic.d.cts} +2 -2
  36. package/dist/{index-CveF5RFQ.d.ts → index-DCfumWzq.d.ts} +2 -2
  37. package/dist/{index-81wn1jc3.d.cts → index-DX7qciZA.d.cts} +36 -2
  38. package/dist/{index-Dhyrg5zd.d.ts → index-DbStyQKc.d.ts} +2 -2
  39. package/dist/{index-C7JcNvbd.d.ts → index-Df30jjpZ.d.ts} +20 -7
  40. package/dist/{index-JoKfPQND.d.ts → index-DzqHh0lE.d.ts} +36 -2
  41. package/dist/index.cjs +9 -9
  42. package/dist/index.cjs.map +1 -1
  43. package/dist/index.d.cts +2 -2
  44. package/dist/index.d.ts +2 -2
  45. package/dist/index.js +7 -7
  46. package/dist/management/index.cjs +1 -1
  47. package/dist/management/index.d.cts +1 -1
  48. package/dist/management/index.d.ts +1 -1
  49. package/dist/management/index.js +1 -1
  50. package/dist/management/types.d.cts +2 -2
  51. package/dist/management/types.d.ts +2 -2
  52. package/dist/{management-Cz5ut18k.js → management-BAfg8BmK.js} +45 -4
  53. package/dist/management-BAfg8BmK.js.map +1 -0
  54. package/dist/{management-CUXgB2rb.cjs → management-BuNIc7Mr.cjs} +45 -4
  55. package/dist/management-BuNIc7Mr.cjs.map +1 -0
  56. package/dist/metaObject-CSGF3d-o.js +53 -0
  57. package/dist/metaObject-CSGF3d-o.js.map +1 -0
  58. package/dist/metaObject-Ciyow2gr.cjs +64 -0
  59. package/dist/metaObject-Ciyow2gr.cjs.map +1 -0
  60. package/dist/metaObject-ClvW342q.d.ts +35 -0
  61. package/dist/metaObject-D7oudegV.d.cts +35 -0
  62. package/dist/oauth/index.cjs +2 -1
  63. package/dist/oauth/index.d.cts +34 -2
  64. package/dist/oauth/index.d.ts +34 -2
  65. package/dist/oauth/index.js +1 -1
  66. package/dist/oauth/types.d.cts +2 -2
  67. package/dist/oauth/types.d.ts +2 -2
  68. package/dist/{oauth-CSBChWuf.cjs → oauth-CXcrilOp.cjs} +47 -1
  69. package/dist/oauth-CXcrilOp.cjs.map +1 -0
  70. package/dist/{oauth-DOveZKUv.js → oauth-Ci0qeaS2.js} +43 -3
  71. package/dist/oauth-Ci0qeaS2.js.map +1 -0
  72. package/dist/{project-Onf-IcPW.cjs → project-BQ2oD6IW.cjs} +2 -2
  73. package/dist/{project-Onf-IcPW.cjs.map → project-BQ2oD6IW.cjs.map} +1 -1
  74. package/dist/{project-DmuC0bMK.js → project-aAVAOcmx.js} +2 -2
  75. package/dist/{project-DmuC0bMK.js.map → project-aAVAOcmx.js.map} +1 -1
  76. package/dist/queryService/index.d.cts +1 -1
  77. package/dist/queryService/index.d.ts +1 -1
  78. package/dist/queryService/types.d.cts +1 -1
  79. package/dist/queryService/types.d.ts +1 -1
  80. package/dist/queryService-B4h1Ez44.cjs +117 -0
  81. package/dist/queryService-B4h1Ez44.cjs.map +1 -0
  82. package/dist/queryService-DE_yE_S4.js +106 -0
  83. package/dist/queryService-DE_yE_S4.js.map +1 -0
  84. package/dist/queue/index.d.cts +1 -1
  85. package/dist/queue/index.d.ts +1 -1
  86. package/dist/readJwtClaims-CMZ3cNC_.js +28 -0
  87. package/dist/readJwtClaims-CMZ3cNC_.js.map +1 -0
  88. package/dist/readJwtClaims-SVJgo04x.cjs +33 -0
  89. package/dist/readJwtClaims-SVJgo04x.cjs.map +1 -0
  90. package/dist/sdk/configurations/index.cjs +2 -2
  91. package/dist/sdk/configurations/index.d.cts +2 -2
  92. package/dist/sdk/configurations/index.d.ts +2 -2
  93. package/dist/sdk/configurations/index.js +2 -2
  94. package/dist/sdk/dataAppServer/index.cjs +230 -0
  95. package/dist/sdk/dataAppServer/index.cjs.map +1 -0
  96. package/dist/sdk/dataAppServer/index.d.cts +55 -0
  97. package/dist/sdk/dataAppServer/index.d.ts +55 -0
  98. package/dist/sdk/dataAppServer/index.js +228 -0
  99. package/dist/sdk/dataAppServer/index.js.map +1 -0
  100. package/dist/sdk/developerPortal/index.cjs +3 -15
  101. package/dist/sdk/developerPortal/index.cjs.map +1 -1
  102. package/dist/sdk/developerPortal/index.js +3 -15
  103. package/dist/sdk/developerPortal/index.js.map +1 -1
  104. package/dist/sdk/queryService/index.cjs +3 -70
  105. package/dist/sdk/queryService/index.d.cts +2 -2
  106. package/dist/sdk/queryService/index.d.ts +2 -2
  107. package/dist/sdk/queryService/index.js +1 -70
  108. package/dist/sdk/securityPolicy/index.cjs +355 -0
  109. package/dist/sdk/securityPolicy/index.cjs.map +1 -0
  110. package/dist/sdk/securityPolicy/index.d.cts +100 -0
  111. package/dist/sdk/securityPolicy/index.d.ts +100 -0
  112. package/dist/sdk/securityPolicy/index.js +342 -0
  113. package/dist/sdk/securityPolicy/index.js.map +1 -0
  114. package/dist/sdk/securityPolicy/types.cjs +0 -0
  115. package/dist/sdk/securityPolicy/types.d.cts +2 -0
  116. package/dist/sdk/securityPolicy/types.d.ts +2 -0
  117. package/dist/sdk/securityPolicy/types.js +1 -0
  118. package/dist/sdk/semanticLayer/index.cjs +3 -2
  119. package/dist/sdk/semanticLayer/index.d.cts +8 -3
  120. package/dist/sdk/semanticLayer/index.d.ts +8 -3
  121. package/dist/sdk/semanticLayer/index.js +3 -1
  122. package/dist/sdk/semanticLayer/types.d.cts +1 -1
  123. package/dist/sdk/semanticLayer/types.d.ts +1 -1
  124. package/dist/sdk/vault/index.d.cts +1 -1
  125. package/dist/sdk/vault/index.d.ts +1 -1
  126. package/dist/{semanticLayer-djom-J78.cjs → semanticLayer-BVpdWKJn.cjs} +19 -52
  127. package/dist/semanticLayer-BVpdWKJn.cjs.map +1 -0
  128. package/dist/{semanticLayer-BdPW_wLo.js → semanticLayer-Btj1Qy9O.js} +20 -47
  129. package/dist/semanticLayer-Btj1Qy9O.js.map +1 -0
  130. package/dist/serviceIds-Bg1pWiPE.cjs +37 -0
  131. package/dist/serviceIds-Bg1pWiPE.cjs.map +1 -0
  132. package/dist/serviceIds-RAVtP4nK.js +32 -0
  133. package/dist/serviceIds-RAVtP4nK.js.map +1 -0
  134. package/dist/storage/index.d.cts +2 -2
  135. package/dist/storage/index.d.ts +2 -2
  136. package/dist/storage/types.d.cts +2 -2
  137. package/dist/storage/types.d.ts +2 -2
  138. package/dist/syncActions/index.cjs +1 -1
  139. package/dist/syncActions/index.js +1 -1
  140. package/dist/{syncActions-DToUhyP3.cjs → syncActions-CR7xvuIv.cjs} +2 -2
  141. package/dist/{syncActions-DToUhyP3.cjs.map → syncActions-CR7xvuIv.cjs.map} +1 -1
  142. package/dist/{syncActions-DV_aObTQ.js → syncActions-CU4cIGRf.js} +2 -2
  143. package/dist/{syncActions-DV_aObTQ.js.map → syncActions-CU4cIGRf.js.map} +1 -1
  144. package/dist/{types-CLtYOszN.d.cts → types-B7FKoyfy.d.cts} +442 -2
  145. package/dist/{types-iU1Sc1IM.d.ts → types-BDgOF2WN.d.ts} +6 -29
  146. package/dist/types-BXKL0wTI.d.cts +85 -0
  147. package/dist/{types-Ey59ZILC.d.ts → types-COb2O9c1.d.ts} +442 -2
  148. package/dist/{types-DjWubjvP.d.cts → types-CaBcgsT2.d.cts} +121 -53
  149. package/dist/{types-BljDxuWG.d.cts → types-DCARsJWs.d.cts} +6 -29
  150. package/dist/{types-CsVRsObb.d.ts → types-DFcj9YyQ.d.ts} +121 -53
  151. package/dist/types-DK1bSUNr.d.ts +85 -0
  152. package/package.json +40 -1
  153. package/surface/management.md +5 -0
  154. package/surface/sdk.md +2 -0
  155. package/dist/admin-CbMOsfgs.js.map +0 -1
  156. package/dist/admin-Di-MmGFP.cjs.map +0 -1
  157. package/dist/management-CUXgB2rb.cjs.map +0 -1
  158. package/dist/management-Cz5ut18k.js.map +0 -1
  159. package/dist/oauth-CSBChWuf.cjs.map +0 -1
  160. package/dist/oauth-DOveZKUv.js.map +0 -1
  161. package/dist/sdk/queryService/index.cjs.map +0 -1
  162. package/dist/sdk/queryService/index.js.map +0 -1
  163. package/dist/semanticLayer-BdPW_wLo.js.map +0 -1
  164. package/dist/semanticLayer-djom-J78.cjs.map +0 -1
package/AGENTS.md CHANGED
@@ -253,6 +253,7 @@ Import paths:
253
253
  | `@keboola/api-client/sdk/tag` | Tag SDK (composes multiple clients) |
254
254
  | `@keboola/api-client/sdk/developerPortal` | Developer Portal SDK (client + its session) |
255
255
  | `@keboola/api-client/sdk/configurations` | Core configuration SDK |
256
+ | `@keboola/api-client/sdk/dataAppServer` | Data app server: Query Service per signed-in user (Node only) |
256
257
  | `@keboola/api-client/domain/permissions` | Permission primitives |
257
258
 
258
259
  ### Query Service credentials
@@ -266,6 +267,7 @@ Import paths:
266
267
  | `{ type: 'app-user-token', token, storageToken }` | `X-Kbc-App-User-Token` and `X-StorageApi-Token` |
267
268
 
268
269
  ```ts
270
+ import { AsyncLocalStorage } from 'node:async_hooks';
269
271
  import { readFileSync } from 'node:fs';
270
272
 
271
273
  // Static token
@@ -275,23 +277,49 @@ createQueryServiceClient({ baseUrl, auth: { type: 'sapi-token', token } });
275
277
  const storageToken = () => readFileSync(process.env.STORAGE_API_TOKEN_PATH!, 'utf8').trim();
276
278
  createQueryServiceClient({ baseUrl, auth: { type: 'sapi-token', token: storageToken } });
277
279
 
278
- // Request-scoped: the signed-in user when there is one, the app otherwise
280
+ // Request-scoped: the signed-in user when there is one, the app otherwise.
281
+ // A middleware runs each request inside `requestUser.run(req.get('X-Kbc-App-User-Token'), next)`.
282
+ const requestUser = new AsyncLocalStorage<string | undefined>();
279
283
  createQueryServiceClient({
280
284
  baseUrl,
281
- auth: () =>
282
- userToken()
283
- ? { type: 'app-user-token', token: userToken(), storageToken }
284
- : { type: 'sapi-token', token: storageToken },
285
+ auth: () => {
286
+ const userToken = requestUser.getStore();
287
+ return userToken
288
+ ? { type: 'app-user-token', token: userToken, storageToken }
289
+ : { type: 'sapi-token', token: storageToken };
290
+ },
285
291
  });
286
292
  ```
287
293
 
288
294
  - Every token field is a value or a callback (`TokenSource`, sync or async). A provider (`QueryServiceCredentialProvider`) picks the credential. Both are resolved before every request, retries included.
295
+ - A provider for a client shared between users reads request-scoped state, such as an `AsyncLocalStorage`. A variable shared between requests sends one user's token with another user's submit, poll or results call.
289
296
  - A provider or a token callback: every token is checked before each request (empty, spaces, non-ASCII → `ValidationError`, nothing sent), and so is a `bearer` project id. The request carries only that credential's headers; any other credential header is removed.
290
297
  - A credential with only string tokens is sent as fixed default headers, as `createAuthHeaders` does; a header that a middleware sets still goes out. Its `app-user-token` tokens are checked when the client is created; `sapi-token` / `bearer` strings are not.
291
298
  - Types: `QueryServiceCredential`, `QueryServiceCredentialProvider`, `AppUserTokenAuth`, `TokenSource` from `@keboola/api-client/queryService`. The app user token is a Query Service credential only, and it always travels with the app's Storage token.
292
299
  - The app user token works on any workspace; row-level security is a separate matter (`RowLevelSecurityError`).
293
300
  - `healthCheck` sends no credential. `middlewares` is optional here (default `[]`).
294
301
 
302
+ ### Data app server (`sdk/dataAppServer`)
303
+
304
+ A data app's Node server uses `initializeApp` from `@keboola/api-client/sdk/dataAppServer` instead of wiring the provider above itself.
305
+
306
+ ```ts
307
+ import { initializeApp } from '@keboola/api-client/sdk/dataAppServer';
308
+
309
+ const kbc = initializeApp();
310
+ app.use(kbc.server.expressMiddleware()); // first: keeps each request's signed-in user
311
+ app.get('/api/sales', async (_req, res) => {
312
+ res.json(
313
+ await kbc.workspace?.runQuery('SELECT region, SUM(amount) AS total FROM sales GROUP BY 1'),
314
+ );
315
+ });
316
+ app.use(kbc.server.expressErrorHandler()); // last: a row-level security refusal answers 403
317
+ ```
318
+
319
+ - Node only: no other entry imports it (`__tests__/buildOutput.test.ts`), so browser bundles stay free of `node:` modules.
320
+ - Query inside a user request: elsewhere (startup, timers) only the app's Storage token goes out, which a governed workspace refuses.
321
+ - Key a server-side cache by `kbc.server.currentUserKey()`, never share one cached result between users.
322
+
295
323
  ## Consumption Hierarchy
296
324
 
297
325
  When implementing an action that talks to a Keboola API, pick the highest layer that already covers it:
@@ -714,7 +742,6 @@ const getBuckets = async <const I extends readonly BucketInclude[] = []>(
714
742
  - **Both casts are required.** The spec's query has `include?: string`, so the tuple goes out as `query as Get…SchemaQuery`. The return needs `as unknown as …With<I>[]`: a type with keys made required or removed does not overlap the spec's all-optional shape, so a single `as` is refused. A detail read that joins `include` itself (`include?.join(',')`, `getBucket`) sends a plain string and needs no query cast. Together with the spec-defect bridge above, these are the sanctioned uses of `as` in this package.
715
743
  - **`exclude` reshapes, so it is a patch map.** `WithExcludes<T, Map, E>` takes `ExcludeMap<T>`: each value is a patch over `T` where a key replaces that field's type and `never` removes it. `StackInfoExcludes` maps `componentDetails` to `{ components: StackComponent[] }` and `components` to `{ components: never }`; `undefined` returns `T`. The query is `OpenapiExcludeQueryType<Op, E>`, the method takes the same `const E` generic and the same cast.
716
744
  - **Never** a `getXWithY` sibling method, a hand-typed `include?: 'foo'[]` without a map, or a conditional key made required on the base type.
717
- - **Where a `*.types.test.ts` already asserts on such a method, use an instantiation expression**, never a call (the root rules forbid new type-only tests): `expectTypeOf(storage.getStackInfo<'componentDetails'>).returns.resolves.toEqualTypeOf<…>()`. A call fires a real request, which MSW rejects as an unhandled error.
718
745
 
719
746
  ### A method that returns a job ends in `Async`
720
747
 
package/API-SURFACE.md CHANGED
@@ -4,7 +4,7 @@
4
4
 
5
5
  Every namespace and method reachable from a ready `ProjectApi` — one project's api (`createKeboola(...).getProjectApi(id)` / `createLegacyKeboola(...).api`, or `useProjectApi()`). Generated from the TypeScript type checker — see `scripts/gen-surface.mjs`.
6
6
 
7
- 26 top-level namespaces, 701 methods. This index lists method **names** only — full signatures live per namespace under [`surface/`](./surface). Open `surface/<namespace>.md` for the one you need.
7
+ 26 top-level namespaces, 705 methods. This index lists method **names** only — full signatures live per namespace under [`surface/`](./surface). Open `surface/<namespace>.md` for the one you need.
8
8
 
9
9
  ## [`api.ai`](./surface/ai.md)
10
10
 
@@ -233,6 +233,7 @@ Every namespace and method reachable from a ready `ProjectApi` — one project's
233
233
  - `fileStorage.createFileStorageGcs`
234
234
  - `fileStorage.createFileStorageS3`
235
235
  - `fileStorage.deleteFileStorage`
236
+ - `fileStorage.getFileStorageProjects`
236
237
  - `fileStorage.getFileStoragesAbs`
237
238
  - `fileStorage.getFileStoragesGcs`
238
239
  - `fileStorage.getFileStoragesS3`
@@ -331,6 +332,7 @@ Every namespace and method reachable from a ready `ProjectApi` — one project's
331
332
  - `projects.setProjectMetadata`
332
333
  - `projects.setProjectReviewers`
333
334
  - `projects.updateProject`
335
+ - `search.find`
334
336
  - `snowflakePartnerConnect.check`
335
337
  - `snowflakePartnerConnect.unlock`
336
338
  - `storageBackends.activateStorageBackend`
@@ -465,6 +467,8 @@ Every namespace and method reachable from a ready `ProjectApi` — one project's
465
467
  - `semanticLayer.deleteObject`
466
468
  - `semanticLayer.findObjectsByName`
467
469
  - `semanticLayer.getModel`
470
+ - `semanticLayer.listAllObjects`
471
+ - `semanticLayer.listAllObjectsWithUnreadable`
468
472
  - `semanticLayer.listModelChildren`
469
473
  - `semanticLayer.listModels`
470
474
  - `semanticLayer.listMyPendingScopeElevationRequests`
package/CHANGELOG.md CHANGED
@@ -1,5 +1,44 @@
1
1
  # @keboola/api-client
2
2
 
3
+ ## 54.0.0
4
+
5
+ ### Major Changes
6
+
7
+ - `ComponentId.EX_GENERIC_V2_DETAIL` is gone: it named a kbc-ui route, not a component.
8
+
9
+ ### Minor Changes
10
+
11
+ - `@keboola/api-client/sdk/securityPolicy` reads one policy and its history: `getPolicy(type, uuid)` returns a policy by UUID, and `listRevisions(type, uuid)` returns its revisions, newest first.
12
+
13
+ - `@keboola/api-client/sdk/securityPolicy` lists, upserts and deletes row- and column-level security policies (`rls-policy`, `cls-policy`, schema 1.2.0) in the metastore, with write validators for both. An upsert finds the policy by the table it governs among the policies the project owns on `main`, and refuses with `SecurityPolicyAmbiguousError` when there are several, `SecurityPolicyUnreadableError` when a policy of the type cannot be read, `SecurityPolicyLegacyError` when the policy to replace was created under an older schema, or `SecurityPolicyNotFoundError` when a `uuid` names none of them; a delete of a policy that is still referenced throws `SecurityPolicyInUseError`. `canWriteSecurityPolicies(token)` in `domain/permissions` tells whether a token may author them.
14
+
15
+ - Add `management.search.find()` for `GET /manage/search`, which searches projects, organizations, maintainers and users by name, email or exact id, with the `SearchQuery`, `SearchResult` and per-type search item types.
16
+
17
+ - `createOrganizationCredentialsClient` (`@keboola/api-client/oauth`) lists and disconnects a Keboola organization's GitHub connections with the caller's Manage API token, and describes the form that starts connecting one. The management client's `getManageToken` returns the Manage API token it currently sends. The oauth schema is regenerated from oauth-service.
18
+
19
+ - `@keboola/api-client/sdk/queryService` exports `cellParser`, which types a Query Service result cell by its column type, in Node and the browser.
20
+ - `cellParser(type)(cell)` returns a number, boolean, ISO date or timestamp, or the cell string.
21
+ - A Snowflake `datetime` reads like `timestamp_ntz`: ISO without `Z`.
22
+ - `sdk/dataAppServer` `runQuery` types its rows with it.
23
+
24
+ - `StorageBackend` gains an optional `folderId`: the GCP folder id of a BigQuery backend, `null` when it has none
25
+
26
+ ## 53.0.0
27
+
28
+ ### Minor Changes
29
+
30
+ - `@keboola/api-client/sdk/dataAppServer` sets up a data app's Node server: `initializeApp()` reads what the platform provides, sends each request's signed-in user to Query Service with the app's Storage token, and gives `workspace.runQuery(sql)` (typed records), Express middleware and an error handler that answers a row-level security refusal with 403, and `server.currentUser()` / `currentUserKey()` for per-user caches.
31
+
32
+ - `sdk.semanticLayer.listAllObjects(objectType)` lists every object of one child type the project can read, across all models, in one request.
33
+
34
+ - `ComponentId` in `constants` names every component the apps refer to by id: it gains the transformations, the processors, the platform components (`FLOW`, `ORCHESTRATOR`, `STORAGE`, `VARIABLES`, …) and the remaining extractors and writers kbc-ui named in its own constants
35
+
36
+ - `ProjectFeature.RowLevelSecurity` names the `row-level-security` project feature. In projects with it, a data app's advanced settings turn row-level security on with the RLS policies it should run under.
37
+
38
+ - `management.fileStorage.getFileStorageProjects` pages through the projects that use a file storage of any provider, cursor-paginated via `page[limit]` / `page[after]`. New types: `FileStorageProjectsQuery`, `FileStorageProjectsPage`, `FileStorageProject`.
39
+
40
+ - `semanticLayer.listAllObjectsWithUnreadable` lists one child object type across every model, with a ref for each object that does not parse, so a summary can say what it couldn't read (AI-3703)
41
+
3
42
  ## 52.0.0
4
43
 
5
44
  ### Major Changes
package/README.md CHANGED
@@ -510,7 +510,7 @@ Tests are co-located `*.test.ts` files run by Vitest. There are two complementar
510
510
 
511
511
  - **Injected `fetchFn` (`createFetchClient({ fetchFn: vi.fn() })`)** — for pure transport/composition tests where you assert on the `Request` object itself or on middleware ordering, and standing up MSW handlers adds no value. Reference tests: `fetchClient/createFetchClient/createFetchClient.test.ts`, `fetchClient/createFetchClient/middlewareOrdering.test.ts`, `clients/storage/storageTokenMiddleware.test.ts`.
512
512
 
513
- - **`expectTypeOf` type tests** — pin the client's advertised return shapes; enforced by `tsc` (the `type-check` task), not the runtime. Reference: `clients/storage/storageClient.types.test.ts`.
513
+ - **`expectTypeOf` type tests** — only for a computed type rule every generated client depends on, never to restate a return shape; enforced by `tsc` (the `type-check` task), not the runtime. Reference: `fetchClient/types.test.ts`.
514
514
 
515
515
  Publish-time export-shape validation stays in `build:check` via `attw` — orthogonal to the above.
516
516
 
@@ -58,6 +58,8 @@ const assertCanWriteKaiSettings = (token) => {
58
58
  reason: token.isMasterToken ? `role '${token.admin?.role ?? "none"}' may not write Kai settings` : "a limited (non-master) token may not write Kai settings"
59
59
  });
60
60
  };
61
+ /** The roles the metastore maps to `project-admin`; an absent `admin` block never matches. */
62
+ const hasMetastoreProjectAdminRole = (token) => token.admin?.role === require_adminRoles.AdminRole.Admin || token.admin?.role === require_adminRoles.AdminRole.ProductionManager || token.admin?.role === require_adminRoles.AdminRole.Share;
61
63
  /**
62
64
  * Whether this token may write the project's semantic layer in the metastore.
63
65
  *
@@ -66,7 +68,15 @@ const assertCanWriteKaiSettings = (token) => {
66
68
  * - Every other role, and a limited token (no `admin` block), gets a 403.
67
69
  * - Organization-scope promotion is left to the metastore's 403.
68
70
  */
69
- const canWriteSemanticLayer = (token) => token.admin?.role === require_adminRoles.AdminRole.Admin || token.admin?.role === require_adminRoles.AdminRole.ProductionManager || token.admin?.role === require_adminRoles.AdminRole.Share;
71
+ const canWriteSemanticLayer = (token) => hasMetastoreProjectAdminRole(token);
72
+ /**
73
+ * Whether this token may author row- and column-level security policies in the metastore.
74
+ *
75
+ * - Reads `token.admin.role` as the metastore does: `admin`, `productionManager` or `share`.
76
+ * - A limited token has no `admin` block, so it never matches.
77
+ * - `targeted` scope only: `organization` scope and grants are organization-admin, a metastore 403.
78
+ */
79
+ const canWriteSecurityPolicies = (token) => hasMetastoreProjectAdminRole(token);
70
80
  const assertCanAdmin = (token) => {
71
81
  if (!isAdmin(token)) throw new PermissionDeniedError({
72
82
  action: "admin",
@@ -133,6 +143,12 @@ Object.defineProperty(exports, "canWriteKaiSettings", {
133
143
  return canWriteKaiSettings;
134
144
  }
135
145
  });
146
+ Object.defineProperty(exports, "canWriteSecurityPolicies", {
147
+ enumerable: true,
148
+ get: function() {
149
+ return canWriteSecurityPolicies;
150
+ }
151
+ });
136
152
  Object.defineProperty(exports, "canWriteSemanticLayer", {
137
153
  enumerable: true,
138
154
  get: function() {
@@ -182,4 +198,4 @@ Object.defineProperty(exports, "isReadOnlyRole", {
182
198
  }
183
199
  });
184
200
 
185
- //# sourceMappingURL=admin-Di-MmGFP.cjs.map
201
+ //# sourceMappingURL=admin-BZ7knTd0.cjs.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"admin-BZ7knTd0.cjs","names":["AdminRole"],"sources":["../src/domain/permissions/errors.ts","../src/domain/permissions/admin.ts"],"sourcesContent":["/**\n * @module domain/permissions/errors\n *\n * - What every `assertCan*` throws; its public fields are SDK contract — renames break consumers.\n * - `subject` is a debugging hint only — never a `StorageToken`, raw token or secret.\n */\nexport class PermissionDeniedError extends Error {\n public readonly action: string;\n public readonly reason?: string;\n public readonly subject?: string;\n\n constructor({ action, reason, subject }: { action: string; reason?: string; subject?: string }) {\n super(reason ? `Permission denied: ${action} (${reason})` : `Permission denied: ${action}`);\n this.name = 'PermissionDeniedError';\n this.action = action;\n this.reason = reason;\n this.subject = subject;\n }\n}\n","/**\n * @module domain/permissions/admin\n *\n * Admin-role predicates read from `token.admin.role` alone.\n */\nimport type { StorageToken } from '../../clients/storage/tokens/types';\nimport { AdminRole } from '../../constants/adminRoles';\n\nimport { PermissionDeniedError } from './errors';\n\nconst role = (token: StorageToken): AdminRole | null => token.admin.role;\n\nexport const isAdmin = (token: StorageToken): boolean => role(token) === AdminRole.Admin;\n\nexport const isAdminOrShare = (token: StorageToken): boolean =>\n role(token) === AdminRole.Admin || role(token) === AdminRole.Share;\n\nexport const isProductionManager = (token: StorageToken): boolean =>\n role(token) === AdminRole.ProductionManager;\n\nexport const isDeveloperOrReviewer = (token: StorageToken): boolean =>\n role(token) === AdminRole.Developer || role(token) === AdminRole.Reviewer;\n\nexport const isReadOnlyRole = (token: StorageToken): boolean => role(token) === AdminRole.ReadOnly;\n\n/**\n * Whether a role string is a member of `AdminRole` at all.\n *\n * - Failing it means *unrecognized*, not denied — log it loudly.\n */\nexport const isKnownAdminRole = (adminRole: string | null | undefined): boolean =>\n (Object.values(AdminRole) as string[]).includes(adminRole ?? '');\n\n/**\n * Whether an admin role may write Kai's project-wide settings.\n *\n * - `admin` and `share` only: a shared prompt-injection surface is project administration.\n * - `developer`/`reviewer` are denied: `agent_settings` is keyed by `project_id` alone, so a dev-branch edit hits production.\n * - An allowlist, so new upstream `AdminRole` members are denied by default.\n * - Spend caps use `./organization#canWriteKaiSpendCaps`; don't widen this for them.\n */\nexport const isKaiSettingsWriterRole = (adminRole: string | null | undefined): boolean => {\n switch (adminRole) {\n case AdminRole.Admin:\n case AdminRole.Share:\n return true;\n default:\n return false;\n }\n};\n\n/**\n * Whether this token may write Kai's project-wide settings.\n *\n * - A limited (non-master) token never may; its `admin` block is absent despite the type.\n */\nexport const canWriteKaiSettings = (token: StorageToken): boolean =>\n token.isMasterToken && isKaiSettingsWriterRole(token.admin?.role);\n\nexport const assertCanWriteKaiSettings = (token: StorageToken): void => {\n if (!canWriteKaiSettings(token)) {\n throw new PermissionDeniedError({\n action: 'write-kai-settings',\n reason: token.isMasterToken\n ? `role '${token.admin?.role ?? 'none'}' may not write Kai settings`\n : 'a limited (non-master) token may not write Kai settings',\n });\n }\n};\n\n/** The roles the metastore maps to `project-admin`; an absent `admin` block never matches. */\nconst hasMetastoreProjectAdminRole = (token: StorageToken): boolean =>\n token.admin?.role === AdminRole.Admin ||\n token.admin?.role === AdminRole.ProductionManager ||\n token.admin?.role === AdminRole.Share;\n\n/**\n * Whether this token may write the project's semantic layer in the metastore.\n *\n * - Mirrors the metastore's role mapping (go-monorepo `services/metastore/internal/authz`):\n * only a master token with the `admin`, `productionManager` or `share` role gets `project-admin`.\n * - Every other role, and a limited token (no `admin` block), gets a 403.\n * - Organization-scope promotion is left to the metastore's 403.\n */\nexport const canWriteSemanticLayer = (token: StorageToken): boolean =>\n hasMetastoreProjectAdminRole(token);\n\n/**\n * Whether this token may author row- and column-level security policies in the metastore.\n *\n * - Reads `token.admin.role` as the metastore does: `admin`, `productionManager` or `share`.\n * - A limited token has no `admin` block, so it never matches.\n * - `targeted` scope only: `organization` scope and grants are organization-admin, a metastore 403.\n */\nexport const canWriteSecurityPolicies = (token: StorageToken): boolean =>\n hasMetastoreProjectAdminRole(token);\n\nexport const assertCanAdmin = (token: StorageToken): void => {\n if (!isAdmin(token)) {\n throw new PermissionDeniedError({\n action: 'admin',\n reason: `role '${role(token)}' is not admin`,\n });\n }\n};\n\nexport const assertCanAdminOrShare = (token: StorageToken): void => {\n if (!isAdminOrShare(token)) {\n throw new PermissionDeniedError({\n action: 'admin-or-share',\n reason: `role '${role(token)}' is not admin or share`,\n });\n }\n};\n\nexport const assertCanProductionManage = (token: StorageToken): void => {\n if (!isProductionManager(token)) {\n throw new PermissionDeniedError({\n action: 'production-manage',\n reason: `role '${role(token)}' is not productionManager`,\n });\n }\n};\n\nexport const assertCanDevelopOrReview = (token: StorageToken): void => {\n if (!isDeveloperOrReviewer(token)) {\n throw new PermissionDeniedError({\n action: 'develop-or-review',\n reason: `role '${role(token)}' is not developer or reviewer`,\n });\n }\n};\n"],"mappings":";;;;;;;;AAMA,IAAa,wBAAb,cAA2C,MAAM;CAC/C;CACA;CACA;CAEA,YAAY,EAAE,QAAQ,QAAQ,WAAkE;EAC9F,MAAM,SAAS,sBAAsB,OAAO,IAAI,OAAO,KAAK,sBAAsB,QAAQ;EAC1F,KAAK,OAAO;EACZ,KAAK,SAAS;EACd,KAAK,SAAS;EACd,KAAK,UAAU;CACjB;AACF;;ACRA,MAAM,QAAQ,UAA0C,MAAM,MAAM;AAEpE,MAAa,WAAW,UAAiC,KAAK,KAAK,MAAMA,mBAAAA,UAAU;AAEnF,MAAa,kBAAkB,UAC7B,KAAK,KAAK,MAAMA,mBAAAA,UAAU,SAAS,KAAK,KAAK,MAAMA,mBAAAA,UAAU;AAE/D,MAAa,uBAAuB,UAClC,KAAK,KAAK,MAAMA,mBAAAA,UAAU;AAE5B,MAAa,yBAAyB,UACpC,KAAK,KAAK,MAAMA,mBAAAA,UAAU,aAAa,KAAK,KAAK,MAAMA,mBAAAA,UAAU;AAEnE,MAAa,kBAAkB,UAAiC,KAAK,KAAK,MAAMA,mBAAAA,UAAU;;;;;;AAO1F,MAAa,oBAAoB,cAC9B,OAAO,OAAOA,mBAAAA,SAAS,CAAC,CAAc,SAAS,aAAa,EAAE;;;;;;;;;AAUjE,MAAa,2BAA2B,cAAkD;CACxF,QAAQ,WAAR;EACE,KAAKA,mBAAAA,UAAU;EACf,KAAKA,mBAAAA,UAAU,OACb,OAAO;EACT,SACE,OAAO;CACX;AACF;;;;;;AAOA,MAAa,uBAAuB,UAClC,MAAM,iBAAiB,wBAAwB,MAAM,OAAO,IAAI;AAElE,MAAa,6BAA6B,UAA8B;CACtE,IAAI,CAAC,oBAAoB,KAAK,GAC5B,MAAM,IAAI,sBAAsB;EAC9B,QAAQ;EACR,QAAQ,MAAM,gBACV,SAAS,MAAM,OAAO,QAAQ,OAAO,gCACrC;CACN,CAAC;AAEL;;AAGA,MAAM,gCAAgC,UACpC,MAAM,OAAO,SAASA,mBAAAA,UAAU,SAChC,MAAM,OAAO,SAASA,mBAAAA,UAAU,qBAChC,MAAM,OAAO,SAASA,mBAAAA,UAAU;;;;;;;;;AAUlC,MAAa,yBAAyB,UACpC,6BAA6B,KAAK;;;;;;;;AASpC,MAAa,4BAA4B,UACvC,6BAA6B,KAAK;AAEpC,MAAa,kBAAkB,UAA8B;CAC3D,IAAI,CAAC,QAAQ,KAAK,GAChB,MAAM,IAAI,sBAAsB;EAC9B,QAAQ;EACR,QAAQ,SAAS,KAAK,KAAK,EAAE;CAC/B,CAAC;AAEL;AAEA,MAAa,yBAAyB,UAA8B;CAClE,IAAI,CAAC,eAAe,KAAK,GACvB,MAAM,IAAI,sBAAsB;EAC9B,QAAQ;EACR,QAAQ,SAAS,KAAK,KAAK,EAAE;CAC/B,CAAC;AAEL;AAEA,MAAa,6BAA6B,UAA8B;CACtE,IAAI,CAAC,oBAAoB,KAAK,GAC5B,MAAM,IAAI,sBAAsB;EAC9B,QAAQ;EACR,QAAQ,SAAS,KAAK,KAAK,EAAE;CAC/B,CAAC;AAEL;AAEA,MAAa,4BAA4B,UAA8B;CACrE,IAAI,CAAC,sBAAsB,KAAK,GAC9B,MAAM,IAAI,sBAAsB;EAC9B,QAAQ;EACR,QAAQ,SAAS,KAAK,KAAK,EAAE;CAC/B,CAAC;AAEL"}
@@ -58,6 +58,8 @@ const assertCanWriteKaiSettings = (token) => {
58
58
  reason: token.isMasterToken ? `role '${token.admin?.role ?? "none"}' may not write Kai settings` : "a limited (non-master) token may not write Kai settings"
59
59
  });
60
60
  };
61
+ /** The roles the metastore maps to `project-admin`; an absent `admin` block never matches. */
62
+ const hasMetastoreProjectAdminRole = (token) => token.admin?.role === AdminRole.Admin || token.admin?.role === AdminRole.ProductionManager || token.admin?.role === AdminRole.Share;
61
63
  /**
62
64
  * Whether this token may write the project's semantic layer in the metastore.
63
65
  *
@@ -66,7 +68,15 @@ const assertCanWriteKaiSettings = (token) => {
66
68
  * - Every other role, and a limited token (no `admin` block), gets a 403.
67
69
  * - Organization-scope promotion is left to the metastore's 403.
68
70
  */
69
- const canWriteSemanticLayer = (token) => token.admin?.role === AdminRole.Admin || token.admin?.role === AdminRole.ProductionManager || token.admin?.role === AdminRole.Share;
71
+ const canWriteSemanticLayer = (token) => hasMetastoreProjectAdminRole(token);
72
+ /**
73
+ * Whether this token may author row- and column-level security policies in the metastore.
74
+ *
75
+ * - Reads `token.admin.role` as the metastore does: `admin`, `productionManager` or `share`.
76
+ * - A limited token has no `admin` block, so it never matches.
77
+ * - `targeted` scope only: `organization` scope and grants are organization-admin, a metastore 403.
78
+ */
79
+ const canWriteSecurityPolicies = (token) => hasMetastoreProjectAdminRole(token);
70
80
  const assertCanAdmin = (token) => {
71
81
  if (!isAdmin(token)) throw new PermissionDeniedError({
72
82
  action: "admin",
@@ -91,6 +101,6 @@ const assertCanDevelopOrReview = (token) => {
91
101
  reason: `role '${role(token)}' is not developer or reviewer`
92
102
  });
93
103
  };
94
- export { assertCanWriteKaiSettings as a, isAdmin as c, isKaiSettingsWriterRole as d, isKnownAdminRole as f, PermissionDeniedError as h, assertCanProductionManage as i, isAdminOrShare as l, isReadOnlyRole as m, assertCanAdminOrShare as n, canWriteKaiSettings as o, isProductionManager as p, assertCanDevelopOrReview as r, canWriteSemanticLayer as s, assertCanAdmin as t, isDeveloperOrReviewer as u };
104
+ export { assertCanWriteKaiSettings as a, canWriteSemanticLayer as c, isDeveloperOrReviewer as d, isKaiSettingsWriterRole as f, PermissionDeniedError as g, isReadOnlyRole as h, assertCanProductionManage as i, isAdmin as l, isProductionManager as m, assertCanAdminOrShare as n, canWriteKaiSettings as o, isKnownAdminRole as p, assertCanDevelopOrReview as r, canWriteSecurityPolicies as s, assertCanAdmin as t, isAdminOrShare as u };
95
105
 
96
- //# sourceMappingURL=admin-CbMOsfgs.js.map
106
+ //# sourceMappingURL=admin-xFfHSZHQ.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"admin-xFfHSZHQ.js","names":[],"sources":["../src/domain/permissions/errors.ts","../src/domain/permissions/admin.ts"],"sourcesContent":["/**\n * @module domain/permissions/errors\n *\n * - What every `assertCan*` throws; its public fields are SDK contract — renames break consumers.\n * - `subject` is a debugging hint only — never a `StorageToken`, raw token or secret.\n */\nexport class PermissionDeniedError extends Error {\n public readonly action: string;\n public readonly reason?: string;\n public readonly subject?: string;\n\n constructor({ action, reason, subject }: { action: string; reason?: string; subject?: string }) {\n super(reason ? `Permission denied: ${action} (${reason})` : `Permission denied: ${action}`);\n this.name = 'PermissionDeniedError';\n this.action = action;\n this.reason = reason;\n this.subject = subject;\n }\n}\n","/**\n * @module domain/permissions/admin\n *\n * Admin-role predicates read from `token.admin.role` alone.\n */\nimport type { StorageToken } from '../../clients/storage/tokens/types';\nimport { AdminRole } from '../../constants/adminRoles';\n\nimport { PermissionDeniedError } from './errors';\n\nconst role = (token: StorageToken): AdminRole | null => token.admin.role;\n\nexport const isAdmin = (token: StorageToken): boolean => role(token) === AdminRole.Admin;\n\nexport const isAdminOrShare = (token: StorageToken): boolean =>\n role(token) === AdminRole.Admin || role(token) === AdminRole.Share;\n\nexport const isProductionManager = (token: StorageToken): boolean =>\n role(token) === AdminRole.ProductionManager;\n\nexport const isDeveloperOrReviewer = (token: StorageToken): boolean =>\n role(token) === AdminRole.Developer || role(token) === AdminRole.Reviewer;\n\nexport const isReadOnlyRole = (token: StorageToken): boolean => role(token) === AdminRole.ReadOnly;\n\n/**\n * Whether a role string is a member of `AdminRole` at all.\n *\n * - Failing it means *unrecognized*, not denied — log it loudly.\n */\nexport const isKnownAdminRole = (adminRole: string | null | undefined): boolean =>\n (Object.values(AdminRole) as string[]).includes(adminRole ?? '');\n\n/**\n * Whether an admin role may write Kai's project-wide settings.\n *\n * - `admin` and `share` only: a shared prompt-injection surface is project administration.\n * - `developer`/`reviewer` are denied: `agent_settings` is keyed by `project_id` alone, so a dev-branch edit hits production.\n * - An allowlist, so new upstream `AdminRole` members are denied by default.\n * - Spend caps use `./organization#canWriteKaiSpendCaps`; don't widen this for them.\n */\nexport const isKaiSettingsWriterRole = (adminRole: string | null | undefined): boolean => {\n switch (adminRole) {\n case AdminRole.Admin:\n case AdminRole.Share:\n return true;\n default:\n return false;\n }\n};\n\n/**\n * Whether this token may write Kai's project-wide settings.\n *\n * - A limited (non-master) token never may; its `admin` block is absent despite the type.\n */\nexport const canWriteKaiSettings = (token: StorageToken): boolean =>\n token.isMasterToken && isKaiSettingsWriterRole(token.admin?.role);\n\nexport const assertCanWriteKaiSettings = (token: StorageToken): void => {\n if (!canWriteKaiSettings(token)) {\n throw new PermissionDeniedError({\n action: 'write-kai-settings',\n reason: token.isMasterToken\n ? `role '${token.admin?.role ?? 'none'}' may not write Kai settings`\n : 'a limited (non-master) token may not write Kai settings',\n });\n }\n};\n\n/** The roles the metastore maps to `project-admin`; an absent `admin` block never matches. */\nconst hasMetastoreProjectAdminRole = (token: StorageToken): boolean =>\n token.admin?.role === AdminRole.Admin ||\n token.admin?.role === AdminRole.ProductionManager ||\n token.admin?.role === AdminRole.Share;\n\n/**\n * Whether this token may write the project's semantic layer in the metastore.\n *\n * - Mirrors the metastore's role mapping (go-monorepo `services/metastore/internal/authz`):\n * only a master token with the `admin`, `productionManager` or `share` role gets `project-admin`.\n * - Every other role, and a limited token (no `admin` block), gets a 403.\n * - Organization-scope promotion is left to the metastore's 403.\n */\nexport const canWriteSemanticLayer = (token: StorageToken): boolean =>\n hasMetastoreProjectAdminRole(token);\n\n/**\n * Whether this token may author row- and column-level security policies in the metastore.\n *\n * - Reads `token.admin.role` as the metastore does: `admin`, `productionManager` or `share`.\n * - A limited token has no `admin` block, so it never matches.\n * - `targeted` scope only: `organization` scope and grants are organization-admin, a metastore 403.\n */\nexport const canWriteSecurityPolicies = (token: StorageToken): boolean =>\n hasMetastoreProjectAdminRole(token);\n\nexport const assertCanAdmin = (token: StorageToken): void => {\n if (!isAdmin(token)) {\n throw new PermissionDeniedError({\n action: 'admin',\n reason: `role '${role(token)}' is not admin`,\n });\n }\n};\n\nexport const assertCanAdminOrShare = (token: StorageToken): void => {\n if (!isAdminOrShare(token)) {\n throw new PermissionDeniedError({\n action: 'admin-or-share',\n reason: `role '${role(token)}' is not admin or share`,\n });\n }\n};\n\nexport const assertCanProductionManage = (token: StorageToken): void => {\n if (!isProductionManager(token)) {\n throw new PermissionDeniedError({\n action: 'production-manage',\n reason: `role '${role(token)}' is not productionManager`,\n });\n }\n};\n\nexport const assertCanDevelopOrReview = (token: StorageToken): void => {\n if (!isDeveloperOrReviewer(token)) {\n throw new PermissionDeniedError({\n action: 'develop-or-review',\n reason: `role '${role(token)}' is not developer or reviewer`,\n });\n }\n};\n"],"mappings":";;;;;;;;AAMA,IAAa,wBAAb,cAA2C,MAAM;CAC/C;CACA;CACA;CAEA,YAAY,EAAE,QAAQ,QAAQ,WAAkE;EAC9F,MAAM,SAAS,sBAAsB,OAAO,IAAI,OAAO,KAAK,sBAAsB,QAAQ;EAC1F,KAAK,OAAO;EACZ,KAAK,SAAS;EACd,KAAK,SAAS;EACd,KAAK,UAAU;CACjB;AACF;;ACRA,MAAM,QAAQ,UAA0C,MAAM,MAAM;AAEpE,MAAa,WAAW,UAAiC,KAAK,KAAK,MAAM,UAAU;AAEnF,MAAa,kBAAkB,UAC7B,KAAK,KAAK,MAAM,UAAU,SAAS,KAAK,KAAK,MAAM,UAAU;AAE/D,MAAa,uBAAuB,UAClC,KAAK,KAAK,MAAM,UAAU;AAE5B,MAAa,yBAAyB,UACpC,KAAK,KAAK,MAAM,UAAU,aAAa,KAAK,KAAK,MAAM,UAAU;AAEnE,MAAa,kBAAkB,UAAiC,KAAK,KAAK,MAAM,UAAU;;;;;;AAO1F,MAAa,oBAAoB,cAC9B,OAAO,OAAO,SAAS,CAAC,CAAc,SAAS,aAAa,EAAE;;;;;;;;;AAUjE,MAAa,2BAA2B,cAAkD;CACxF,QAAQ,WAAR;EACE,KAAK,UAAU;EACf,KAAK,UAAU,OACb,OAAO;EACT,SACE,OAAO;CACX;AACF;;;;;;AAOA,MAAa,uBAAuB,UAClC,MAAM,iBAAiB,wBAAwB,MAAM,OAAO,IAAI;AAElE,MAAa,6BAA6B,UAA8B;CACtE,IAAI,CAAC,oBAAoB,KAAK,GAC5B,MAAM,IAAI,sBAAsB;EAC9B,QAAQ;EACR,QAAQ,MAAM,gBACV,SAAS,MAAM,OAAO,QAAQ,OAAO,gCACrC;CACN,CAAC;AAEL;;AAGA,MAAM,gCAAgC,UACpC,MAAM,OAAO,SAAS,UAAU,SAChC,MAAM,OAAO,SAAS,UAAU,qBAChC,MAAM,OAAO,SAAS,UAAU;;;;;;;;;AAUlC,MAAa,yBAAyB,UACpC,6BAA6B,KAAK;;;;;;;;AASpC,MAAa,4BAA4B,UACvC,6BAA6B,KAAK;AAEpC,MAAa,kBAAkB,UAA8B;CAC3D,IAAI,CAAC,QAAQ,KAAK,GAChB,MAAM,IAAI,sBAAsB;EAC9B,QAAQ;EACR,QAAQ,SAAS,KAAK,KAAK,EAAE;CAC/B,CAAC;AAEL;AAEA,MAAa,yBAAyB,UAA8B;CAClE,IAAI,CAAC,eAAe,KAAK,GACvB,MAAM,IAAI,sBAAsB;EAC9B,QAAQ;EACR,QAAQ,SAAS,KAAK,KAAK,EAAE;CAC/B,CAAC;AAEL;AAEA,MAAa,6BAA6B,UAA8B;CACtE,IAAI,CAAC,oBAAoB,KAAK,GAC5B,MAAM,IAAI,sBAAsB;EAC9B,QAAQ;EACR,QAAQ,SAAS,KAAK,KAAK,EAAE;CAC/B,CAAC;AAEL;AAEA,MAAa,4BAA4B,UAA8B;CACrE,IAAI,CAAC,sBAAsB,KAAK,GAC9B,MAAM,IAAI,sBAAsB;EAC9B,QAAQ;EACR,QAAQ,SAAS,KAAK,KAAK,EAAE;CAC/B,CAAC;AAEL"}
@@ -122,7 +122,6 @@ const ComponentId = {
122
122
  EX_MONGODB: "keboola.ex-mongodb",
123
123
  EX_SNOWFLAKE_QUERY_HISTORY: "keboola.ex-snowflake-query-history",
124
124
  EX_SNOWFLAKE_PARAMETERS: "keboola.ex-snowflake-parameters",
125
- EX_GENERIC_V2_DETAIL: "ex-generic-v2-detail",
126
125
  APAC_EX_GMAIL_ATTACHMENTS: "apac.ex-gmail-attachments",
127
126
  GENEEA_NLP_ANALYSIS_V2: "geneea.nlp-analysis-v2",
128
127
  KDS_APP_CUSTOM_PYTHON: "kds-team.app-custom-python",
@@ -136,4 +135,4 @@ const ComponentId = {
136
135
  };
137
136
  export { ComponentId as t };
138
137
 
139
- //# sourceMappingURL=componentId-DZP1rBix.js.map
138
+ //# sourceMappingURL=componentId-Cps6WBy1.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"componentId-DZP1rBix.js","names":[],"sources":["../src/constants/componentId.ts"],"sourcesContent":["export const ComponentId = {\n WR_DB_MYSQL: 'keboola.wr-db-mysql',\n WR_DB_PGSQL: 'keboola.wr-db-pgsql',\n WR_DB_ORACLE: 'keboola.wr-db-oracle',\n WR_DB_SNOWFLAKE: 'keboola.wr-db-snowflake',\n WR_DB_SNOWFLAKE_GCS: 'keboola.wr-db-snowflake-gcs',\n WR_DB_SNOWFLAKE_GCS_S3: 'keboola.wr-db-snowflake-gcs-s3',\n WR_SNOWFLAKE_BLOB_STORAGE: 'keboola.wr-snowflake-blob-storage',\n WR_LOOKER_V2: 'keboola.wr-looker-v2',\n APP_DATA_GATEWAY: 'keboola.app-data-gateway',\n WR_SYNAPSE: 'keboola.wr-synapse',\n WR_REDSHIFT: 'keboola.wr-redshift-v2',\n WR_DB_MSSQL: 'keboola.wr-db-mssql-v2',\n WR_DB_HIVE: 'keboola.wr-db-hive',\n WR_DB_IMPALA: 'keboola.wr-db-impala',\n WR_PAIRITY: 'kds-team.wr-pairity',\n WR_EXASOL: 'kds-team.wr-exasol',\n WR_FIREBOLT: 'kds-team.wr-firebolt',\n WR_HIVE_CSAS: 'kds-team.wr-hive-csas',\n WR_THOUGHTSPOT: 'keboola.wr-thoughtspot',\n WR_SISENSE: 'keboola.wr-sisense',\n WR_AWS_S3: 'keboola.wr-aws-s3',\n WR_STORAGE: 'keboola.wr-storage',\n WR_GOOGLE_BIGQUERY_V2: 'keboola.wr-google-bigquery-v2',\n SCHEDULER: 'keboola.scheduler',\n\n // App-specific writers (bespoke credential blocks)\n APP_SNOWFLAKE_DWH_MANAGER: 'keboola.app-snowflake-dwh-manager',\n GOODDATA_WRITER: 'keboola.gooddata-writer',\n\n // DB extractors (ex-db-generic family)\n EX_DB_MYSQL: 'keboola.ex-db-mysql',\n EX_DB_PGSQL: 'keboola.ex-db-pgsql',\n EX_DB_REDSHIFT: 'keboola.ex-db-redshift',\n EX_DB_FIREBIRD: 'keboola.ex-db-firebird',\n EX_DB_DB2: 'keboola.ex-db-db2',\n EX_DB_DB2_BATA: 'keboola.ex-db-db2-bata',\n EX_DB_MSSQL: 'keboola.ex-db-mssql',\n EX_DB_MSSQL_CDATA: 'keboola.ex-db-mssql-cdata',\n EX_DB_ORACLE: 'keboola.ex-db-oracle',\n EX_DB_SNOWFLAKE: 'keboola.ex-db-snowflake',\n EX_DB_NETSUITE: 'keboola.ex-db-netsuite',\n EX_DB_INFORMIX: 'keboola.ex-db-informix',\n EX_DB_IMPALA: 'keboola.ex-db-impala',\n EX_DB_HIVE: 'keboola.ex-db-hive',\n EX_DB_HIVE_CSAS: 'keboola.ex-db-hive-csas',\n EX_DB_HIVE_CSAS_TEST: 'keboola.ex-db-hive-csas-test',\n EX_TERADATA: 'keboola.ex-teradata',\n KDS_EX_NETSUITE: 'kds-team.ex-netsuite',\n KDS_EX_PROGRESS_DB: 'kds-team.ex-progress-db',\n\n // Google (OAuth) components\n EX_GOOGLE_ADS: 'keboola.ex-google-ads',\n EX_GOOGLE_ANALYTICS_V4: 'keboola.ex-google-analytics-v4',\n WR_GOOGLE_DRIVE: 'keboola.wr-google-drive',\n WR_GOOGLE_SHEETS: 'keboola.wr-google-sheets',\n\n // Meta (OAuth) components\n EX_FACEBOOK: 'keboola.ex-facebook',\n EX_FACEBOOK_ADS: 'keboola.ex-facebook-ads',\n EX_FACEBOOK_ADS_V2: 'keboola.ex-facebook-ads-v2',\n EX_FACEBOOK_PAGES: 'keboola.ex-facebook-pages',\n EX_INSTAGRAM: 'keboola.ex-instagram',\n EX_INSTAGRAM_V2: 'keboola.ex-instagram-v2',\n\n // Microsoft OneDrive (OAuth) components\n EX_ONEDRIVE: 'keboola.ex-onedrive',\n WR_ONEDRIVE: 'keboola.wr-onedrive',\n\n // File/connection extractors (ex family, no shared credential base)\n EX_HTTP: 'keboola.ex-http',\n EX_FTP: 'keboola.ex-ftp',\n EX_FTP_CSAS: 'keboola.ex-ftp-csas',\n EX_EMAIL_ATTACHMENTS: 'keboola.ex-email-attachments',\n EX_AWS_S3: 'keboola.ex-aws-s3',\n KDS_EX_AZURE_BLOB_STORAGE_V2: 'kds-team.ex-azure-blob-storage-v2',\n KDS_EX_AZURE_DATA_LAKE_GEN2: 'kds-team.ex-azure-data-lake-gen2',\n APIFY: 'apify.apify',\n EX_GENERIC_V2: 'ex-generic-v2',\n EX_GOOGLE_BIGQUERY_V2: 'keboola.ex-google-bigquery-v2',\n EX_STORAGE: 'keboola.ex-storage',\n\n // Data-app family — a git repository lives under `parameters.dataApp.git`\n DATA_APPS: 'keboola.data-apps',\n SANDBOXES: 'keboola.sandboxes',\n\n // dbt transformations — a git repository lives under `parameters.git`\n DBT_TEST_CORE_KEY_PAIR: 'keboola-test.dbt-core-key-pair',\n DBT_TEST_REMOTE_SNOWFLAKE: 'keboola-test.dbt-remote-snowflake',\n DBT_TEST_TRANSFORMATION: 'keboola-test.dbt-transformation',\n DBT_TRANSFORMATION: 'keboola.dbt-transformation',\n DBT_TRANSFORMATION_LOCAL_BIGQUERY: 'keboola.dbt-transformation-local-bigquery',\n DBT_TRANSFORMATION_REMOTE_BIGQUERY: 'keboola.dbt-transformation-remote-bigquery',\n DBT_TRANSFORMATION_REMOTE_MSSQL: 'keboola.dbt-transformation-remote-mssql',\n DBT_TRANSFORMATION_REMOTE_POSTGRESQL: 'keboola.dbt-transformation-remote-postgresql',\n DBT_TRANSFORMATION_REMOTE_REDSHIFT: 'keboola.dbt-transformation-remote-redshift',\n DBT_TRANSFORMATION_REMOTE_SNOWFLAKE: 'keboola.dbt-transformation-remote-snowflake',\n\n APP_CONFIGURATION_MIGRATION_TOOL: 'keboola.app-configuration-migration-tool',\n FLOW_MIGRATION_TOOL: 'keboola.flow-migration-tool',\n\n // Utility components, called only for their sync actions\n SSH_KEYGEN_V2: 'keboola.ssh-keygen-v2',\n\n // Transformations\n LEGACY_TRANSFORMATION: 'keboola.legacy-transformation',\n SNOWFLAKE_TRANSFORMATION: 'keboola.snowflake-transformation',\n PYTHON_TRANSFORMATION_V2: 'keboola.python-transformation-v2',\n CSAS_PYTHON_TRANSFORMATION_V2: 'keboola.csas-python-transformation-v2',\n R_TRANSFORMATION_V2: 'keboola.r-transformation-v2',\n GOOGLE_BIGQUERY_TRANSFORMATION: 'keboola.google-bigquery-transformation',\n DUCKDB_TRANSFORMATION: 'keboola.duckdb-transformation',\n ORACLE_TRANSFORMATION: 'keboola.oracle-transformation',\n\n // Processors\n PROCESSOR_SPLIT_TABLE: 'keboola.processor-split-table',\n PROCESSOR_ADD_FILENAME_COLUMN: 'keboola.processor-add-filename-column',\n PROCESSOR_ADD_ROW_NUMBER_COLUMN: 'keboola.processor-add-row-number-column',\n PROCESSOR_CREATE_MANIFEST: 'keboola.processor-create-manifest',\n PROCESSOR_DECOMPRESS: 'keboola.processor-decompress',\n PROCESSOR_FLATTEN_FOLDERS: 'keboola.processor-flatten-folders',\n PROCESSOR_MOVE_FILES: 'keboola.processor-move-files',\n PROCESSOR_SKIP_LINES: 'keboola.processor-skip-lines',\n KDS_PROCESSOR_CSV2XLS: 'kds-team.processor-csv2xls',\n KDS_PROCESSOR_CREATE_FILE_MANIFEST: 'kds-team.processor-create-file-manifest',\n KDS_PROCESSOR_CONVERT_COLUMN_CASE: 'kds-team.processor-convert-column-case',\n\n // Platform components\n FLOW: 'keboola.flow',\n ORCHESTRATOR: 'keboola.orchestrator',\n STORAGE: 'keboola.storage', // component to get icon and name\n VARIABLES: 'keboola.variables',\n SHARED_CODE: 'keboola.shared-code',\n DATA_APP_CONTROL: 'keboola.data-app-control',\n MCP_SERVER_TOOL: 'keboola.mcp-server-tool',\n PROJECT_BACKUP: 'keboola.project-backup',\n KEBOOLA_AS_CODE: 'keboola.keboola-as-code',\n APP_MERGE_BRANCH_STORAGE: 'keboola.app-merge-branch-storage',\n SAPI_MERGED_EXPORT: 'keboola.sapi-merged-export',\n SLICED_FILES_DOWNLOADER: 'keboola.sliced-files-downloader',\n CSV_IMPORT: 'keboola.csv-import',\n EX_SAMPLE_DATA: 'keboola.ex-sample-data',\n\n // Other components\n EX_GOOGLE_DRIVE: 'keboola.ex-google-drive',\n EX_GOOGLE_BIGQUERY_V2_AVRO_FILES: 'keboola.ex-google-bigquery-v2-avro-files',\n EX_GMAIL: 'keboola.ex-gmail',\n EX_MONGODB: 'keboola.ex-mongodb',\n EX_SNOWFLAKE_QUERY_HISTORY: 'keboola.ex-snowflake-query-history',\n EX_SNOWFLAKE_PARAMETERS: 'keboola.ex-snowflake-parameters',\n EX_GENERIC_V2_DETAIL: 'ex-generic-v2-detail',\n APAC_EX_GMAIL_ATTACHMENTS: 'apac.ex-gmail-attachments',\n GENEEA_NLP_ANALYSIS_V2: 'geneea.nlp-analysis-v2',\n KDS_APP_CUSTOM_PYTHON: 'kds-team.app-custom-python',\n KDS_EX_DV360: 'kds-team.ex-dv360',\n KDS_EX_YOUTUBE_ANALYTICS: 'kds-team.ex-youtube-analytics',\n KDS_EX_AWS_COST_AND_USAGE_REPORTS: 'kds-team.ex-aws-cost-and-usage-reports',\n KDS_EX_ZOHO: 'kds-team.ex-zoho',\n SMETRIC_EX_SIMPRO_API: 'smetric.ex-simpro-api',\n SMETRIC_EX_VEND_API: 'smetric.ex-vend-api',\n TDE_EXPORTER: 'tde-exporter',\n} as const;\n\nexport type ComponentId = (typeof ComponentId)[keyof typeof ComponentId];\n"],"mappings":";AAAA,MAAa,cAAc;CACzB,aAAa;CACb,aAAa;CACb,cAAc;CACd,iBAAiB;CACjB,qBAAqB;CACrB,wBAAwB;CACxB,2BAA2B;CAC3B,cAAc;CACd,kBAAkB;CAClB,YAAY;CACZ,aAAa;CACb,aAAa;CACb,YAAY;CACZ,cAAc;CACd,YAAY;CACZ,WAAW;CACX,aAAa;CACb,cAAc;CACd,gBAAgB;CAChB,YAAY;CACZ,WAAW;CACX,YAAY;CACZ,uBAAuB;CACvB,WAAW;CAGX,2BAA2B;CAC3B,iBAAiB;CAGjB,aAAa;CACb,aAAa;CACb,gBAAgB;CAChB,gBAAgB;CAChB,WAAW;CACX,gBAAgB;CAChB,aAAa;CACb,mBAAmB;CACnB,cAAc;CACd,iBAAiB;CACjB,gBAAgB;CAChB,gBAAgB;CAChB,cAAc;CACd,YAAY;CACZ,iBAAiB;CACjB,sBAAsB;CACtB,aAAa;CACb,iBAAiB;CACjB,oBAAoB;CAGpB,eAAe;CACf,wBAAwB;CACxB,iBAAiB;CACjB,kBAAkB;CAGlB,aAAa;CACb,iBAAiB;CACjB,oBAAoB;CACpB,mBAAmB;CACnB,cAAc;CACd,iBAAiB;CAGjB,aAAa;CACb,aAAa;CAGb,SAAS;CACT,QAAQ;CACR,aAAa;CACb,sBAAsB;CACtB,WAAW;CACX,8BAA8B;CAC9B,6BAA6B;CAC7B,OAAO;CACP,eAAe;CACf,uBAAuB;CACvB,YAAY;CAGZ,WAAW;CACX,WAAW;CAGX,wBAAwB;CACxB,2BAA2B;CAC3B,yBAAyB;CACzB,oBAAoB;CACpB,mCAAmC;CACnC,oCAAoC;CACpC,iCAAiC;CACjC,sCAAsC;CACtC,oCAAoC;CACpC,qCAAqC;CAErC,kCAAkC;CAClC,qBAAqB;CAGrB,eAAe;CAGf,uBAAuB;CACvB,0BAA0B;CAC1B,0BAA0B;CAC1B,+BAA+B;CAC/B,qBAAqB;CACrB,gCAAgC;CAChC,uBAAuB;CACvB,uBAAuB;CAGvB,uBAAuB;CACvB,+BAA+B;CAC/B,iCAAiC;CACjC,2BAA2B;CAC3B,sBAAsB;CACtB,2BAA2B;CAC3B,sBAAsB;CACtB,sBAAsB;CACtB,uBAAuB;CACvB,oCAAoC;CACpC,mCAAmC;CAGnC,MAAM;CACN,cAAc;CACd,SAAS;CACT,WAAW;CACX,aAAa;CACb,kBAAkB;CAClB,iBAAiB;CACjB,gBAAgB;CAChB,iBAAiB;CACjB,0BAA0B;CAC1B,oBAAoB;CACpB,yBAAyB;CACzB,YAAY;CACZ,gBAAgB;CAGhB,iBAAiB;CACjB,kCAAkC;CAClC,UAAU;CACV,YAAY;CACZ,4BAA4B;CAC5B,yBAAyB;CACzB,sBAAsB;CACtB,2BAA2B;CAC3B,wBAAwB;CACxB,uBAAuB;CACvB,cAAc;CACd,0BAA0B;CAC1B,mCAAmC;CACnC,aAAa;CACb,uBAAuB;CACvB,qBAAqB;CACrB,cAAc;AAChB"}
1
+ {"version":3,"file":"componentId-Cps6WBy1.js","names":[],"sources":["../src/constants/componentId.ts"],"sourcesContent":["export const ComponentId = {\n WR_DB_MYSQL: 'keboola.wr-db-mysql',\n WR_DB_PGSQL: 'keboola.wr-db-pgsql',\n WR_DB_ORACLE: 'keboola.wr-db-oracle',\n WR_DB_SNOWFLAKE: 'keboola.wr-db-snowflake',\n WR_DB_SNOWFLAKE_GCS: 'keboola.wr-db-snowflake-gcs',\n WR_DB_SNOWFLAKE_GCS_S3: 'keboola.wr-db-snowflake-gcs-s3',\n WR_SNOWFLAKE_BLOB_STORAGE: 'keboola.wr-snowflake-blob-storage',\n WR_LOOKER_V2: 'keboola.wr-looker-v2',\n APP_DATA_GATEWAY: 'keboola.app-data-gateway',\n WR_SYNAPSE: 'keboola.wr-synapse',\n WR_REDSHIFT: 'keboola.wr-redshift-v2',\n WR_DB_MSSQL: 'keboola.wr-db-mssql-v2',\n WR_DB_HIVE: 'keboola.wr-db-hive',\n WR_DB_IMPALA: 'keboola.wr-db-impala',\n WR_PAIRITY: 'kds-team.wr-pairity',\n WR_EXASOL: 'kds-team.wr-exasol',\n WR_FIREBOLT: 'kds-team.wr-firebolt',\n WR_HIVE_CSAS: 'kds-team.wr-hive-csas',\n WR_THOUGHTSPOT: 'keboola.wr-thoughtspot',\n WR_SISENSE: 'keboola.wr-sisense',\n WR_AWS_S3: 'keboola.wr-aws-s3',\n WR_STORAGE: 'keboola.wr-storage',\n WR_GOOGLE_BIGQUERY_V2: 'keboola.wr-google-bigquery-v2',\n SCHEDULER: 'keboola.scheduler',\n\n // App-specific writers (bespoke credential blocks)\n APP_SNOWFLAKE_DWH_MANAGER: 'keboola.app-snowflake-dwh-manager',\n GOODDATA_WRITER: 'keboola.gooddata-writer',\n\n // DB extractors (ex-db-generic family)\n EX_DB_MYSQL: 'keboola.ex-db-mysql',\n EX_DB_PGSQL: 'keboola.ex-db-pgsql',\n EX_DB_REDSHIFT: 'keboola.ex-db-redshift',\n EX_DB_FIREBIRD: 'keboola.ex-db-firebird',\n EX_DB_DB2: 'keboola.ex-db-db2',\n EX_DB_DB2_BATA: 'keboola.ex-db-db2-bata',\n EX_DB_MSSQL: 'keboola.ex-db-mssql',\n EX_DB_MSSQL_CDATA: 'keboola.ex-db-mssql-cdata',\n EX_DB_ORACLE: 'keboola.ex-db-oracle',\n EX_DB_SNOWFLAKE: 'keboola.ex-db-snowflake',\n EX_DB_NETSUITE: 'keboola.ex-db-netsuite',\n EX_DB_INFORMIX: 'keboola.ex-db-informix',\n EX_DB_IMPALA: 'keboola.ex-db-impala',\n EX_DB_HIVE: 'keboola.ex-db-hive',\n EX_DB_HIVE_CSAS: 'keboola.ex-db-hive-csas',\n EX_DB_HIVE_CSAS_TEST: 'keboola.ex-db-hive-csas-test',\n EX_TERADATA: 'keboola.ex-teradata',\n KDS_EX_NETSUITE: 'kds-team.ex-netsuite',\n KDS_EX_PROGRESS_DB: 'kds-team.ex-progress-db',\n\n // Google (OAuth) components\n EX_GOOGLE_ADS: 'keboola.ex-google-ads',\n EX_GOOGLE_ANALYTICS_V4: 'keboola.ex-google-analytics-v4',\n WR_GOOGLE_DRIVE: 'keboola.wr-google-drive',\n WR_GOOGLE_SHEETS: 'keboola.wr-google-sheets',\n\n // Meta (OAuth) components\n EX_FACEBOOK: 'keboola.ex-facebook',\n EX_FACEBOOK_ADS: 'keboola.ex-facebook-ads',\n EX_FACEBOOK_ADS_V2: 'keboola.ex-facebook-ads-v2',\n EX_FACEBOOK_PAGES: 'keboola.ex-facebook-pages',\n EX_INSTAGRAM: 'keboola.ex-instagram',\n EX_INSTAGRAM_V2: 'keboola.ex-instagram-v2',\n\n // Microsoft OneDrive (OAuth) components\n EX_ONEDRIVE: 'keboola.ex-onedrive',\n WR_ONEDRIVE: 'keboola.wr-onedrive',\n\n // File/connection extractors (ex family, no shared credential base)\n EX_HTTP: 'keboola.ex-http',\n EX_FTP: 'keboola.ex-ftp',\n EX_FTP_CSAS: 'keboola.ex-ftp-csas',\n EX_EMAIL_ATTACHMENTS: 'keboola.ex-email-attachments',\n EX_AWS_S3: 'keboola.ex-aws-s3',\n KDS_EX_AZURE_BLOB_STORAGE_V2: 'kds-team.ex-azure-blob-storage-v2',\n KDS_EX_AZURE_DATA_LAKE_GEN2: 'kds-team.ex-azure-data-lake-gen2',\n APIFY: 'apify.apify',\n EX_GENERIC_V2: 'ex-generic-v2',\n EX_GOOGLE_BIGQUERY_V2: 'keboola.ex-google-bigquery-v2',\n EX_STORAGE: 'keboola.ex-storage',\n\n // Data-app family — a git repository lives under `parameters.dataApp.git`\n DATA_APPS: 'keboola.data-apps',\n SANDBOXES: 'keboola.sandboxes',\n\n // dbt transformations — a git repository lives under `parameters.git`\n DBT_TEST_CORE_KEY_PAIR: 'keboola-test.dbt-core-key-pair',\n DBT_TEST_REMOTE_SNOWFLAKE: 'keboola-test.dbt-remote-snowflake',\n DBT_TEST_TRANSFORMATION: 'keboola-test.dbt-transformation',\n DBT_TRANSFORMATION: 'keboola.dbt-transformation',\n DBT_TRANSFORMATION_LOCAL_BIGQUERY: 'keboola.dbt-transformation-local-bigquery',\n DBT_TRANSFORMATION_REMOTE_BIGQUERY: 'keboola.dbt-transformation-remote-bigquery',\n DBT_TRANSFORMATION_REMOTE_MSSQL: 'keboola.dbt-transformation-remote-mssql',\n DBT_TRANSFORMATION_REMOTE_POSTGRESQL: 'keboola.dbt-transformation-remote-postgresql',\n DBT_TRANSFORMATION_REMOTE_REDSHIFT: 'keboola.dbt-transformation-remote-redshift',\n DBT_TRANSFORMATION_REMOTE_SNOWFLAKE: 'keboola.dbt-transformation-remote-snowflake',\n\n APP_CONFIGURATION_MIGRATION_TOOL: 'keboola.app-configuration-migration-tool',\n FLOW_MIGRATION_TOOL: 'keboola.flow-migration-tool',\n\n // Utility components, called only for their sync actions\n SSH_KEYGEN_V2: 'keboola.ssh-keygen-v2',\n\n // Transformations\n LEGACY_TRANSFORMATION: 'keboola.legacy-transformation',\n SNOWFLAKE_TRANSFORMATION: 'keboola.snowflake-transformation',\n PYTHON_TRANSFORMATION_V2: 'keboola.python-transformation-v2',\n CSAS_PYTHON_TRANSFORMATION_V2: 'keboola.csas-python-transformation-v2',\n R_TRANSFORMATION_V2: 'keboola.r-transformation-v2',\n GOOGLE_BIGQUERY_TRANSFORMATION: 'keboola.google-bigquery-transformation',\n DUCKDB_TRANSFORMATION: 'keboola.duckdb-transformation',\n ORACLE_TRANSFORMATION: 'keboola.oracle-transformation',\n\n // Processors\n PROCESSOR_SPLIT_TABLE: 'keboola.processor-split-table',\n PROCESSOR_ADD_FILENAME_COLUMN: 'keboola.processor-add-filename-column',\n PROCESSOR_ADD_ROW_NUMBER_COLUMN: 'keboola.processor-add-row-number-column',\n PROCESSOR_CREATE_MANIFEST: 'keboola.processor-create-manifest',\n PROCESSOR_DECOMPRESS: 'keboola.processor-decompress',\n PROCESSOR_FLATTEN_FOLDERS: 'keboola.processor-flatten-folders',\n PROCESSOR_MOVE_FILES: 'keboola.processor-move-files',\n PROCESSOR_SKIP_LINES: 'keboola.processor-skip-lines',\n KDS_PROCESSOR_CSV2XLS: 'kds-team.processor-csv2xls',\n KDS_PROCESSOR_CREATE_FILE_MANIFEST: 'kds-team.processor-create-file-manifest',\n KDS_PROCESSOR_CONVERT_COLUMN_CASE: 'kds-team.processor-convert-column-case',\n\n // Platform components\n FLOW: 'keboola.flow',\n ORCHESTRATOR: 'keboola.orchestrator',\n STORAGE: 'keboola.storage', // component to get icon and name\n VARIABLES: 'keboola.variables',\n SHARED_CODE: 'keboola.shared-code',\n DATA_APP_CONTROL: 'keboola.data-app-control',\n MCP_SERVER_TOOL: 'keboola.mcp-server-tool',\n PROJECT_BACKUP: 'keboola.project-backup',\n KEBOOLA_AS_CODE: 'keboola.keboola-as-code',\n APP_MERGE_BRANCH_STORAGE: 'keboola.app-merge-branch-storage',\n SAPI_MERGED_EXPORT: 'keboola.sapi-merged-export',\n SLICED_FILES_DOWNLOADER: 'keboola.sliced-files-downloader',\n CSV_IMPORT: 'keboola.csv-import',\n EX_SAMPLE_DATA: 'keboola.ex-sample-data',\n\n // Other components\n EX_GOOGLE_DRIVE: 'keboola.ex-google-drive',\n EX_GOOGLE_BIGQUERY_V2_AVRO_FILES: 'keboola.ex-google-bigquery-v2-avro-files',\n EX_GMAIL: 'keboola.ex-gmail',\n EX_MONGODB: 'keboola.ex-mongodb',\n EX_SNOWFLAKE_QUERY_HISTORY: 'keboola.ex-snowflake-query-history',\n EX_SNOWFLAKE_PARAMETERS: 'keboola.ex-snowflake-parameters',\n APAC_EX_GMAIL_ATTACHMENTS: 'apac.ex-gmail-attachments',\n GENEEA_NLP_ANALYSIS_V2: 'geneea.nlp-analysis-v2',\n KDS_APP_CUSTOM_PYTHON: 'kds-team.app-custom-python',\n KDS_EX_DV360: 'kds-team.ex-dv360',\n KDS_EX_YOUTUBE_ANALYTICS: 'kds-team.ex-youtube-analytics',\n KDS_EX_AWS_COST_AND_USAGE_REPORTS: 'kds-team.ex-aws-cost-and-usage-reports',\n KDS_EX_ZOHO: 'kds-team.ex-zoho',\n SMETRIC_EX_SIMPRO_API: 'smetric.ex-simpro-api',\n SMETRIC_EX_VEND_API: 'smetric.ex-vend-api',\n TDE_EXPORTER: 'tde-exporter',\n} as const;\n\nexport type ComponentId = (typeof ComponentId)[keyof typeof ComponentId];\n"],"mappings":";AAAA,MAAa,cAAc;CACzB,aAAa;CACb,aAAa;CACb,cAAc;CACd,iBAAiB;CACjB,qBAAqB;CACrB,wBAAwB;CACxB,2BAA2B;CAC3B,cAAc;CACd,kBAAkB;CAClB,YAAY;CACZ,aAAa;CACb,aAAa;CACb,YAAY;CACZ,cAAc;CACd,YAAY;CACZ,WAAW;CACX,aAAa;CACb,cAAc;CACd,gBAAgB;CAChB,YAAY;CACZ,WAAW;CACX,YAAY;CACZ,uBAAuB;CACvB,WAAW;CAGX,2BAA2B;CAC3B,iBAAiB;CAGjB,aAAa;CACb,aAAa;CACb,gBAAgB;CAChB,gBAAgB;CAChB,WAAW;CACX,gBAAgB;CAChB,aAAa;CACb,mBAAmB;CACnB,cAAc;CACd,iBAAiB;CACjB,gBAAgB;CAChB,gBAAgB;CAChB,cAAc;CACd,YAAY;CACZ,iBAAiB;CACjB,sBAAsB;CACtB,aAAa;CACb,iBAAiB;CACjB,oBAAoB;CAGpB,eAAe;CACf,wBAAwB;CACxB,iBAAiB;CACjB,kBAAkB;CAGlB,aAAa;CACb,iBAAiB;CACjB,oBAAoB;CACpB,mBAAmB;CACnB,cAAc;CACd,iBAAiB;CAGjB,aAAa;CACb,aAAa;CAGb,SAAS;CACT,QAAQ;CACR,aAAa;CACb,sBAAsB;CACtB,WAAW;CACX,8BAA8B;CAC9B,6BAA6B;CAC7B,OAAO;CACP,eAAe;CACf,uBAAuB;CACvB,YAAY;CAGZ,WAAW;CACX,WAAW;CAGX,wBAAwB;CACxB,2BAA2B;CAC3B,yBAAyB;CACzB,oBAAoB;CACpB,mCAAmC;CACnC,oCAAoC;CACpC,iCAAiC;CACjC,sCAAsC;CACtC,oCAAoC;CACpC,qCAAqC;CAErC,kCAAkC;CAClC,qBAAqB;CAGrB,eAAe;CAGf,uBAAuB;CACvB,0BAA0B;CAC1B,0BAA0B;CAC1B,+BAA+B;CAC/B,qBAAqB;CACrB,gCAAgC;CAChC,uBAAuB;CACvB,uBAAuB;CAGvB,uBAAuB;CACvB,+BAA+B;CAC/B,iCAAiC;CACjC,2BAA2B;CAC3B,sBAAsB;CACtB,2BAA2B;CAC3B,sBAAsB;CACtB,sBAAsB;CACtB,uBAAuB;CACvB,oCAAoC;CACpC,mCAAmC;CAGnC,MAAM;CACN,cAAc;CACd,SAAS;CACT,WAAW;CACX,aAAa;CACb,kBAAkB;CAClB,iBAAiB;CACjB,gBAAgB;CAChB,iBAAiB;CACjB,0BAA0B;CAC1B,oBAAoB;CACpB,yBAAyB;CACzB,YAAY;CACZ,gBAAgB;CAGhB,iBAAiB;CACjB,kCAAkC;CAClC,UAAU;CACV,YAAY;CACZ,4BAA4B;CAC5B,yBAAyB;CACzB,2BAA2B;CAC3B,wBAAwB;CACxB,uBAAuB;CACvB,cAAc;CACd,0BAA0B;CAC1B,mCAAmC;CACnC,aAAa;CACb,uBAAuB;CACvB,qBAAqB;CACrB,cAAc;AAChB"}
@@ -122,7 +122,6 @@ const ComponentId = {
122
122
  EX_MONGODB: "keboola.ex-mongodb",
123
123
  EX_SNOWFLAKE_QUERY_HISTORY: "keboola.ex-snowflake-query-history",
124
124
  EX_SNOWFLAKE_PARAMETERS: "keboola.ex-snowflake-parameters",
125
- EX_GENERIC_V2_DETAIL: "ex-generic-v2-detail",
126
125
  APAC_EX_GMAIL_ATTACHMENTS: "apac.ex-gmail-attachments",
127
126
  GENEEA_NLP_ANALYSIS_V2: "geneea.nlp-analysis-v2",
128
127
  KDS_APP_CUSTOM_PYTHON: "kds-team.app-custom-python",
@@ -141,4 +140,4 @@ Object.defineProperty(exports, "ComponentId", {
141
140
  }
142
141
  });
143
142
 
144
- //# sourceMappingURL=componentId-olp0tltf.cjs.map
143
+ //# sourceMappingURL=componentId-_tRhEv6W.cjs.map
@@ -1 +1 @@
1
- {"version":3,"file":"componentId-olp0tltf.cjs","names":[],"sources":["../src/constants/componentId.ts"],"sourcesContent":["export const ComponentId = {\n WR_DB_MYSQL: 'keboola.wr-db-mysql',\n WR_DB_PGSQL: 'keboola.wr-db-pgsql',\n WR_DB_ORACLE: 'keboola.wr-db-oracle',\n WR_DB_SNOWFLAKE: 'keboola.wr-db-snowflake',\n WR_DB_SNOWFLAKE_GCS: 'keboola.wr-db-snowflake-gcs',\n WR_DB_SNOWFLAKE_GCS_S3: 'keboola.wr-db-snowflake-gcs-s3',\n WR_SNOWFLAKE_BLOB_STORAGE: 'keboola.wr-snowflake-blob-storage',\n WR_LOOKER_V2: 'keboola.wr-looker-v2',\n APP_DATA_GATEWAY: 'keboola.app-data-gateway',\n WR_SYNAPSE: 'keboola.wr-synapse',\n WR_REDSHIFT: 'keboola.wr-redshift-v2',\n WR_DB_MSSQL: 'keboola.wr-db-mssql-v2',\n WR_DB_HIVE: 'keboola.wr-db-hive',\n WR_DB_IMPALA: 'keboola.wr-db-impala',\n WR_PAIRITY: 'kds-team.wr-pairity',\n WR_EXASOL: 'kds-team.wr-exasol',\n WR_FIREBOLT: 'kds-team.wr-firebolt',\n WR_HIVE_CSAS: 'kds-team.wr-hive-csas',\n WR_THOUGHTSPOT: 'keboola.wr-thoughtspot',\n WR_SISENSE: 'keboola.wr-sisense',\n WR_AWS_S3: 'keboola.wr-aws-s3',\n WR_STORAGE: 'keboola.wr-storage',\n WR_GOOGLE_BIGQUERY_V2: 'keboola.wr-google-bigquery-v2',\n SCHEDULER: 'keboola.scheduler',\n\n // App-specific writers (bespoke credential blocks)\n APP_SNOWFLAKE_DWH_MANAGER: 'keboola.app-snowflake-dwh-manager',\n GOODDATA_WRITER: 'keboola.gooddata-writer',\n\n // DB extractors (ex-db-generic family)\n EX_DB_MYSQL: 'keboola.ex-db-mysql',\n EX_DB_PGSQL: 'keboola.ex-db-pgsql',\n EX_DB_REDSHIFT: 'keboola.ex-db-redshift',\n EX_DB_FIREBIRD: 'keboola.ex-db-firebird',\n EX_DB_DB2: 'keboola.ex-db-db2',\n EX_DB_DB2_BATA: 'keboola.ex-db-db2-bata',\n EX_DB_MSSQL: 'keboola.ex-db-mssql',\n EX_DB_MSSQL_CDATA: 'keboola.ex-db-mssql-cdata',\n EX_DB_ORACLE: 'keboola.ex-db-oracle',\n EX_DB_SNOWFLAKE: 'keboola.ex-db-snowflake',\n EX_DB_NETSUITE: 'keboola.ex-db-netsuite',\n EX_DB_INFORMIX: 'keboola.ex-db-informix',\n EX_DB_IMPALA: 'keboola.ex-db-impala',\n EX_DB_HIVE: 'keboola.ex-db-hive',\n EX_DB_HIVE_CSAS: 'keboola.ex-db-hive-csas',\n EX_DB_HIVE_CSAS_TEST: 'keboola.ex-db-hive-csas-test',\n EX_TERADATA: 'keboola.ex-teradata',\n KDS_EX_NETSUITE: 'kds-team.ex-netsuite',\n KDS_EX_PROGRESS_DB: 'kds-team.ex-progress-db',\n\n // Google (OAuth) components\n EX_GOOGLE_ADS: 'keboola.ex-google-ads',\n EX_GOOGLE_ANALYTICS_V4: 'keboola.ex-google-analytics-v4',\n WR_GOOGLE_DRIVE: 'keboola.wr-google-drive',\n WR_GOOGLE_SHEETS: 'keboola.wr-google-sheets',\n\n // Meta (OAuth) components\n EX_FACEBOOK: 'keboola.ex-facebook',\n EX_FACEBOOK_ADS: 'keboola.ex-facebook-ads',\n EX_FACEBOOK_ADS_V2: 'keboola.ex-facebook-ads-v2',\n EX_FACEBOOK_PAGES: 'keboola.ex-facebook-pages',\n EX_INSTAGRAM: 'keboola.ex-instagram',\n EX_INSTAGRAM_V2: 'keboola.ex-instagram-v2',\n\n // Microsoft OneDrive (OAuth) components\n EX_ONEDRIVE: 'keboola.ex-onedrive',\n WR_ONEDRIVE: 'keboola.wr-onedrive',\n\n // File/connection extractors (ex family, no shared credential base)\n EX_HTTP: 'keboola.ex-http',\n EX_FTP: 'keboola.ex-ftp',\n EX_FTP_CSAS: 'keboola.ex-ftp-csas',\n EX_EMAIL_ATTACHMENTS: 'keboola.ex-email-attachments',\n EX_AWS_S3: 'keboola.ex-aws-s3',\n KDS_EX_AZURE_BLOB_STORAGE_V2: 'kds-team.ex-azure-blob-storage-v2',\n KDS_EX_AZURE_DATA_LAKE_GEN2: 'kds-team.ex-azure-data-lake-gen2',\n APIFY: 'apify.apify',\n EX_GENERIC_V2: 'ex-generic-v2',\n EX_GOOGLE_BIGQUERY_V2: 'keboola.ex-google-bigquery-v2',\n EX_STORAGE: 'keboola.ex-storage',\n\n // Data-app family — a git repository lives under `parameters.dataApp.git`\n DATA_APPS: 'keboola.data-apps',\n SANDBOXES: 'keboola.sandboxes',\n\n // dbt transformations — a git repository lives under `parameters.git`\n DBT_TEST_CORE_KEY_PAIR: 'keboola-test.dbt-core-key-pair',\n DBT_TEST_REMOTE_SNOWFLAKE: 'keboola-test.dbt-remote-snowflake',\n DBT_TEST_TRANSFORMATION: 'keboola-test.dbt-transformation',\n DBT_TRANSFORMATION: 'keboola.dbt-transformation',\n DBT_TRANSFORMATION_LOCAL_BIGQUERY: 'keboola.dbt-transformation-local-bigquery',\n DBT_TRANSFORMATION_REMOTE_BIGQUERY: 'keboola.dbt-transformation-remote-bigquery',\n DBT_TRANSFORMATION_REMOTE_MSSQL: 'keboola.dbt-transformation-remote-mssql',\n DBT_TRANSFORMATION_REMOTE_POSTGRESQL: 'keboola.dbt-transformation-remote-postgresql',\n DBT_TRANSFORMATION_REMOTE_REDSHIFT: 'keboola.dbt-transformation-remote-redshift',\n DBT_TRANSFORMATION_REMOTE_SNOWFLAKE: 'keboola.dbt-transformation-remote-snowflake',\n\n APP_CONFIGURATION_MIGRATION_TOOL: 'keboola.app-configuration-migration-tool',\n FLOW_MIGRATION_TOOL: 'keboola.flow-migration-tool',\n\n // Utility components, called only for their sync actions\n SSH_KEYGEN_V2: 'keboola.ssh-keygen-v2',\n\n // Transformations\n LEGACY_TRANSFORMATION: 'keboola.legacy-transformation',\n SNOWFLAKE_TRANSFORMATION: 'keboola.snowflake-transformation',\n PYTHON_TRANSFORMATION_V2: 'keboola.python-transformation-v2',\n CSAS_PYTHON_TRANSFORMATION_V2: 'keboola.csas-python-transformation-v2',\n R_TRANSFORMATION_V2: 'keboola.r-transformation-v2',\n GOOGLE_BIGQUERY_TRANSFORMATION: 'keboola.google-bigquery-transformation',\n DUCKDB_TRANSFORMATION: 'keboola.duckdb-transformation',\n ORACLE_TRANSFORMATION: 'keboola.oracle-transformation',\n\n // Processors\n PROCESSOR_SPLIT_TABLE: 'keboola.processor-split-table',\n PROCESSOR_ADD_FILENAME_COLUMN: 'keboola.processor-add-filename-column',\n PROCESSOR_ADD_ROW_NUMBER_COLUMN: 'keboola.processor-add-row-number-column',\n PROCESSOR_CREATE_MANIFEST: 'keboola.processor-create-manifest',\n PROCESSOR_DECOMPRESS: 'keboola.processor-decompress',\n PROCESSOR_FLATTEN_FOLDERS: 'keboola.processor-flatten-folders',\n PROCESSOR_MOVE_FILES: 'keboola.processor-move-files',\n PROCESSOR_SKIP_LINES: 'keboola.processor-skip-lines',\n KDS_PROCESSOR_CSV2XLS: 'kds-team.processor-csv2xls',\n KDS_PROCESSOR_CREATE_FILE_MANIFEST: 'kds-team.processor-create-file-manifest',\n KDS_PROCESSOR_CONVERT_COLUMN_CASE: 'kds-team.processor-convert-column-case',\n\n // Platform components\n FLOW: 'keboola.flow',\n ORCHESTRATOR: 'keboola.orchestrator',\n STORAGE: 'keboola.storage', // component to get icon and name\n VARIABLES: 'keboola.variables',\n SHARED_CODE: 'keboola.shared-code',\n DATA_APP_CONTROL: 'keboola.data-app-control',\n MCP_SERVER_TOOL: 'keboola.mcp-server-tool',\n PROJECT_BACKUP: 'keboola.project-backup',\n KEBOOLA_AS_CODE: 'keboola.keboola-as-code',\n APP_MERGE_BRANCH_STORAGE: 'keboola.app-merge-branch-storage',\n SAPI_MERGED_EXPORT: 'keboola.sapi-merged-export',\n SLICED_FILES_DOWNLOADER: 'keboola.sliced-files-downloader',\n CSV_IMPORT: 'keboola.csv-import',\n EX_SAMPLE_DATA: 'keboola.ex-sample-data',\n\n // Other components\n EX_GOOGLE_DRIVE: 'keboola.ex-google-drive',\n EX_GOOGLE_BIGQUERY_V2_AVRO_FILES: 'keboola.ex-google-bigquery-v2-avro-files',\n EX_GMAIL: 'keboola.ex-gmail',\n EX_MONGODB: 'keboola.ex-mongodb',\n EX_SNOWFLAKE_QUERY_HISTORY: 'keboola.ex-snowflake-query-history',\n EX_SNOWFLAKE_PARAMETERS: 'keboola.ex-snowflake-parameters',\n EX_GENERIC_V2_DETAIL: 'ex-generic-v2-detail',\n APAC_EX_GMAIL_ATTACHMENTS: 'apac.ex-gmail-attachments',\n GENEEA_NLP_ANALYSIS_V2: 'geneea.nlp-analysis-v2',\n KDS_APP_CUSTOM_PYTHON: 'kds-team.app-custom-python',\n KDS_EX_DV360: 'kds-team.ex-dv360',\n KDS_EX_YOUTUBE_ANALYTICS: 'kds-team.ex-youtube-analytics',\n KDS_EX_AWS_COST_AND_USAGE_REPORTS: 'kds-team.ex-aws-cost-and-usage-reports',\n KDS_EX_ZOHO: 'kds-team.ex-zoho',\n SMETRIC_EX_SIMPRO_API: 'smetric.ex-simpro-api',\n SMETRIC_EX_VEND_API: 'smetric.ex-vend-api',\n TDE_EXPORTER: 'tde-exporter',\n} as const;\n\nexport type ComponentId = (typeof ComponentId)[keyof typeof ComponentId];\n"],"mappings":";AAAA,MAAa,cAAc;CACzB,aAAa;CACb,aAAa;CACb,cAAc;CACd,iBAAiB;CACjB,qBAAqB;CACrB,wBAAwB;CACxB,2BAA2B;CAC3B,cAAc;CACd,kBAAkB;CAClB,YAAY;CACZ,aAAa;CACb,aAAa;CACb,YAAY;CACZ,cAAc;CACd,YAAY;CACZ,WAAW;CACX,aAAa;CACb,cAAc;CACd,gBAAgB;CAChB,YAAY;CACZ,WAAW;CACX,YAAY;CACZ,uBAAuB;CACvB,WAAW;CAGX,2BAA2B;CAC3B,iBAAiB;CAGjB,aAAa;CACb,aAAa;CACb,gBAAgB;CAChB,gBAAgB;CAChB,WAAW;CACX,gBAAgB;CAChB,aAAa;CACb,mBAAmB;CACnB,cAAc;CACd,iBAAiB;CACjB,gBAAgB;CAChB,gBAAgB;CAChB,cAAc;CACd,YAAY;CACZ,iBAAiB;CACjB,sBAAsB;CACtB,aAAa;CACb,iBAAiB;CACjB,oBAAoB;CAGpB,eAAe;CACf,wBAAwB;CACxB,iBAAiB;CACjB,kBAAkB;CAGlB,aAAa;CACb,iBAAiB;CACjB,oBAAoB;CACpB,mBAAmB;CACnB,cAAc;CACd,iBAAiB;CAGjB,aAAa;CACb,aAAa;CAGb,SAAS;CACT,QAAQ;CACR,aAAa;CACb,sBAAsB;CACtB,WAAW;CACX,8BAA8B;CAC9B,6BAA6B;CAC7B,OAAO;CACP,eAAe;CACf,uBAAuB;CACvB,YAAY;CAGZ,WAAW;CACX,WAAW;CAGX,wBAAwB;CACxB,2BAA2B;CAC3B,yBAAyB;CACzB,oBAAoB;CACpB,mCAAmC;CACnC,oCAAoC;CACpC,iCAAiC;CACjC,sCAAsC;CACtC,oCAAoC;CACpC,qCAAqC;CAErC,kCAAkC;CAClC,qBAAqB;CAGrB,eAAe;CAGf,uBAAuB;CACvB,0BAA0B;CAC1B,0BAA0B;CAC1B,+BAA+B;CAC/B,qBAAqB;CACrB,gCAAgC;CAChC,uBAAuB;CACvB,uBAAuB;CAGvB,uBAAuB;CACvB,+BAA+B;CAC/B,iCAAiC;CACjC,2BAA2B;CAC3B,sBAAsB;CACtB,2BAA2B;CAC3B,sBAAsB;CACtB,sBAAsB;CACtB,uBAAuB;CACvB,oCAAoC;CACpC,mCAAmC;CAGnC,MAAM;CACN,cAAc;CACd,SAAS;CACT,WAAW;CACX,aAAa;CACb,kBAAkB;CAClB,iBAAiB;CACjB,gBAAgB;CAChB,iBAAiB;CACjB,0BAA0B;CAC1B,oBAAoB;CACpB,yBAAyB;CACzB,YAAY;CACZ,gBAAgB;CAGhB,iBAAiB;CACjB,kCAAkC;CAClC,UAAU;CACV,YAAY;CACZ,4BAA4B;CAC5B,yBAAyB;CACzB,sBAAsB;CACtB,2BAA2B;CAC3B,wBAAwB;CACxB,uBAAuB;CACvB,cAAc;CACd,0BAA0B;CAC1B,mCAAmC;CACnC,aAAa;CACb,uBAAuB;CACvB,qBAAqB;CACrB,cAAc;AAChB"}
1
+ {"version":3,"file":"componentId-_tRhEv6W.cjs","names":[],"sources":["../src/constants/componentId.ts"],"sourcesContent":["export const ComponentId = {\n WR_DB_MYSQL: 'keboola.wr-db-mysql',\n WR_DB_PGSQL: 'keboola.wr-db-pgsql',\n WR_DB_ORACLE: 'keboola.wr-db-oracle',\n WR_DB_SNOWFLAKE: 'keboola.wr-db-snowflake',\n WR_DB_SNOWFLAKE_GCS: 'keboola.wr-db-snowflake-gcs',\n WR_DB_SNOWFLAKE_GCS_S3: 'keboola.wr-db-snowflake-gcs-s3',\n WR_SNOWFLAKE_BLOB_STORAGE: 'keboola.wr-snowflake-blob-storage',\n WR_LOOKER_V2: 'keboola.wr-looker-v2',\n APP_DATA_GATEWAY: 'keboola.app-data-gateway',\n WR_SYNAPSE: 'keboola.wr-synapse',\n WR_REDSHIFT: 'keboola.wr-redshift-v2',\n WR_DB_MSSQL: 'keboola.wr-db-mssql-v2',\n WR_DB_HIVE: 'keboola.wr-db-hive',\n WR_DB_IMPALA: 'keboola.wr-db-impala',\n WR_PAIRITY: 'kds-team.wr-pairity',\n WR_EXASOL: 'kds-team.wr-exasol',\n WR_FIREBOLT: 'kds-team.wr-firebolt',\n WR_HIVE_CSAS: 'kds-team.wr-hive-csas',\n WR_THOUGHTSPOT: 'keboola.wr-thoughtspot',\n WR_SISENSE: 'keboola.wr-sisense',\n WR_AWS_S3: 'keboola.wr-aws-s3',\n WR_STORAGE: 'keboola.wr-storage',\n WR_GOOGLE_BIGQUERY_V2: 'keboola.wr-google-bigquery-v2',\n SCHEDULER: 'keboola.scheduler',\n\n // App-specific writers (bespoke credential blocks)\n APP_SNOWFLAKE_DWH_MANAGER: 'keboola.app-snowflake-dwh-manager',\n GOODDATA_WRITER: 'keboola.gooddata-writer',\n\n // DB extractors (ex-db-generic family)\n EX_DB_MYSQL: 'keboola.ex-db-mysql',\n EX_DB_PGSQL: 'keboola.ex-db-pgsql',\n EX_DB_REDSHIFT: 'keboola.ex-db-redshift',\n EX_DB_FIREBIRD: 'keboola.ex-db-firebird',\n EX_DB_DB2: 'keboola.ex-db-db2',\n EX_DB_DB2_BATA: 'keboola.ex-db-db2-bata',\n EX_DB_MSSQL: 'keboola.ex-db-mssql',\n EX_DB_MSSQL_CDATA: 'keboola.ex-db-mssql-cdata',\n EX_DB_ORACLE: 'keboola.ex-db-oracle',\n EX_DB_SNOWFLAKE: 'keboola.ex-db-snowflake',\n EX_DB_NETSUITE: 'keboola.ex-db-netsuite',\n EX_DB_INFORMIX: 'keboola.ex-db-informix',\n EX_DB_IMPALA: 'keboola.ex-db-impala',\n EX_DB_HIVE: 'keboola.ex-db-hive',\n EX_DB_HIVE_CSAS: 'keboola.ex-db-hive-csas',\n EX_DB_HIVE_CSAS_TEST: 'keboola.ex-db-hive-csas-test',\n EX_TERADATA: 'keboola.ex-teradata',\n KDS_EX_NETSUITE: 'kds-team.ex-netsuite',\n KDS_EX_PROGRESS_DB: 'kds-team.ex-progress-db',\n\n // Google (OAuth) components\n EX_GOOGLE_ADS: 'keboola.ex-google-ads',\n EX_GOOGLE_ANALYTICS_V4: 'keboola.ex-google-analytics-v4',\n WR_GOOGLE_DRIVE: 'keboola.wr-google-drive',\n WR_GOOGLE_SHEETS: 'keboola.wr-google-sheets',\n\n // Meta (OAuth) components\n EX_FACEBOOK: 'keboola.ex-facebook',\n EX_FACEBOOK_ADS: 'keboola.ex-facebook-ads',\n EX_FACEBOOK_ADS_V2: 'keboola.ex-facebook-ads-v2',\n EX_FACEBOOK_PAGES: 'keboola.ex-facebook-pages',\n EX_INSTAGRAM: 'keboola.ex-instagram',\n EX_INSTAGRAM_V2: 'keboola.ex-instagram-v2',\n\n // Microsoft OneDrive (OAuth) components\n EX_ONEDRIVE: 'keboola.ex-onedrive',\n WR_ONEDRIVE: 'keboola.wr-onedrive',\n\n // File/connection extractors (ex family, no shared credential base)\n EX_HTTP: 'keboola.ex-http',\n EX_FTP: 'keboola.ex-ftp',\n EX_FTP_CSAS: 'keboola.ex-ftp-csas',\n EX_EMAIL_ATTACHMENTS: 'keboola.ex-email-attachments',\n EX_AWS_S3: 'keboola.ex-aws-s3',\n KDS_EX_AZURE_BLOB_STORAGE_V2: 'kds-team.ex-azure-blob-storage-v2',\n KDS_EX_AZURE_DATA_LAKE_GEN2: 'kds-team.ex-azure-data-lake-gen2',\n APIFY: 'apify.apify',\n EX_GENERIC_V2: 'ex-generic-v2',\n EX_GOOGLE_BIGQUERY_V2: 'keboola.ex-google-bigquery-v2',\n EX_STORAGE: 'keboola.ex-storage',\n\n // Data-app family — a git repository lives under `parameters.dataApp.git`\n DATA_APPS: 'keboola.data-apps',\n SANDBOXES: 'keboola.sandboxes',\n\n // dbt transformations — a git repository lives under `parameters.git`\n DBT_TEST_CORE_KEY_PAIR: 'keboola-test.dbt-core-key-pair',\n DBT_TEST_REMOTE_SNOWFLAKE: 'keboola-test.dbt-remote-snowflake',\n DBT_TEST_TRANSFORMATION: 'keboola-test.dbt-transformation',\n DBT_TRANSFORMATION: 'keboola.dbt-transformation',\n DBT_TRANSFORMATION_LOCAL_BIGQUERY: 'keboola.dbt-transformation-local-bigquery',\n DBT_TRANSFORMATION_REMOTE_BIGQUERY: 'keboola.dbt-transformation-remote-bigquery',\n DBT_TRANSFORMATION_REMOTE_MSSQL: 'keboola.dbt-transformation-remote-mssql',\n DBT_TRANSFORMATION_REMOTE_POSTGRESQL: 'keboola.dbt-transformation-remote-postgresql',\n DBT_TRANSFORMATION_REMOTE_REDSHIFT: 'keboola.dbt-transformation-remote-redshift',\n DBT_TRANSFORMATION_REMOTE_SNOWFLAKE: 'keboola.dbt-transformation-remote-snowflake',\n\n APP_CONFIGURATION_MIGRATION_TOOL: 'keboola.app-configuration-migration-tool',\n FLOW_MIGRATION_TOOL: 'keboola.flow-migration-tool',\n\n // Utility components, called only for their sync actions\n SSH_KEYGEN_V2: 'keboola.ssh-keygen-v2',\n\n // Transformations\n LEGACY_TRANSFORMATION: 'keboola.legacy-transformation',\n SNOWFLAKE_TRANSFORMATION: 'keboola.snowflake-transformation',\n PYTHON_TRANSFORMATION_V2: 'keboola.python-transformation-v2',\n CSAS_PYTHON_TRANSFORMATION_V2: 'keboola.csas-python-transformation-v2',\n R_TRANSFORMATION_V2: 'keboola.r-transformation-v2',\n GOOGLE_BIGQUERY_TRANSFORMATION: 'keboola.google-bigquery-transformation',\n DUCKDB_TRANSFORMATION: 'keboola.duckdb-transformation',\n ORACLE_TRANSFORMATION: 'keboola.oracle-transformation',\n\n // Processors\n PROCESSOR_SPLIT_TABLE: 'keboola.processor-split-table',\n PROCESSOR_ADD_FILENAME_COLUMN: 'keboola.processor-add-filename-column',\n PROCESSOR_ADD_ROW_NUMBER_COLUMN: 'keboola.processor-add-row-number-column',\n PROCESSOR_CREATE_MANIFEST: 'keboola.processor-create-manifest',\n PROCESSOR_DECOMPRESS: 'keboola.processor-decompress',\n PROCESSOR_FLATTEN_FOLDERS: 'keboola.processor-flatten-folders',\n PROCESSOR_MOVE_FILES: 'keboola.processor-move-files',\n PROCESSOR_SKIP_LINES: 'keboola.processor-skip-lines',\n KDS_PROCESSOR_CSV2XLS: 'kds-team.processor-csv2xls',\n KDS_PROCESSOR_CREATE_FILE_MANIFEST: 'kds-team.processor-create-file-manifest',\n KDS_PROCESSOR_CONVERT_COLUMN_CASE: 'kds-team.processor-convert-column-case',\n\n // Platform components\n FLOW: 'keboola.flow',\n ORCHESTRATOR: 'keboola.orchestrator',\n STORAGE: 'keboola.storage', // component to get icon and name\n VARIABLES: 'keboola.variables',\n SHARED_CODE: 'keboola.shared-code',\n DATA_APP_CONTROL: 'keboola.data-app-control',\n MCP_SERVER_TOOL: 'keboola.mcp-server-tool',\n PROJECT_BACKUP: 'keboola.project-backup',\n KEBOOLA_AS_CODE: 'keboola.keboola-as-code',\n APP_MERGE_BRANCH_STORAGE: 'keboola.app-merge-branch-storage',\n SAPI_MERGED_EXPORT: 'keboola.sapi-merged-export',\n SLICED_FILES_DOWNLOADER: 'keboola.sliced-files-downloader',\n CSV_IMPORT: 'keboola.csv-import',\n EX_SAMPLE_DATA: 'keboola.ex-sample-data',\n\n // Other components\n EX_GOOGLE_DRIVE: 'keboola.ex-google-drive',\n EX_GOOGLE_BIGQUERY_V2_AVRO_FILES: 'keboola.ex-google-bigquery-v2-avro-files',\n EX_GMAIL: 'keboola.ex-gmail',\n EX_MONGODB: 'keboola.ex-mongodb',\n EX_SNOWFLAKE_QUERY_HISTORY: 'keboola.ex-snowflake-query-history',\n EX_SNOWFLAKE_PARAMETERS: 'keboola.ex-snowflake-parameters',\n APAC_EX_GMAIL_ATTACHMENTS: 'apac.ex-gmail-attachments',\n GENEEA_NLP_ANALYSIS_V2: 'geneea.nlp-analysis-v2',\n KDS_APP_CUSTOM_PYTHON: 'kds-team.app-custom-python',\n KDS_EX_DV360: 'kds-team.ex-dv360',\n KDS_EX_YOUTUBE_ANALYTICS: 'kds-team.ex-youtube-analytics',\n KDS_EX_AWS_COST_AND_USAGE_REPORTS: 'kds-team.ex-aws-cost-and-usage-reports',\n KDS_EX_ZOHO: 'kds-team.ex-zoho',\n SMETRIC_EX_SIMPRO_API: 'smetric.ex-simpro-api',\n SMETRIC_EX_VEND_API: 'smetric.ex-vend-api',\n TDE_EXPORTER: 'tde-exporter',\n} as const;\n\nexport type ComponentId = (typeof ComponentId)[keyof typeof ComponentId];\n"],"mappings":";AAAA,MAAa,cAAc;CACzB,aAAa;CACb,aAAa;CACb,cAAc;CACd,iBAAiB;CACjB,qBAAqB;CACrB,wBAAwB;CACxB,2BAA2B;CAC3B,cAAc;CACd,kBAAkB;CAClB,YAAY;CACZ,aAAa;CACb,aAAa;CACb,YAAY;CACZ,cAAc;CACd,YAAY;CACZ,WAAW;CACX,aAAa;CACb,cAAc;CACd,gBAAgB;CAChB,YAAY;CACZ,WAAW;CACX,YAAY;CACZ,uBAAuB;CACvB,WAAW;CAGX,2BAA2B;CAC3B,iBAAiB;CAGjB,aAAa;CACb,aAAa;CACb,gBAAgB;CAChB,gBAAgB;CAChB,WAAW;CACX,gBAAgB;CAChB,aAAa;CACb,mBAAmB;CACnB,cAAc;CACd,iBAAiB;CACjB,gBAAgB;CAChB,gBAAgB;CAChB,cAAc;CACd,YAAY;CACZ,iBAAiB;CACjB,sBAAsB;CACtB,aAAa;CACb,iBAAiB;CACjB,oBAAoB;CAGpB,eAAe;CACf,wBAAwB;CACxB,iBAAiB;CACjB,kBAAkB;CAGlB,aAAa;CACb,iBAAiB;CACjB,oBAAoB;CACpB,mBAAmB;CACnB,cAAc;CACd,iBAAiB;CAGjB,aAAa;CACb,aAAa;CAGb,SAAS;CACT,QAAQ;CACR,aAAa;CACb,sBAAsB;CACtB,WAAW;CACX,8BAA8B;CAC9B,6BAA6B;CAC7B,OAAO;CACP,eAAe;CACf,uBAAuB;CACvB,YAAY;CAGZ,WAAW;CACX,WAAW;CAGX,wBAAwB;CACxB,2BAA2B;CAC3B,yBAAyB;CACzB,oBAAoB;CACpB,mCAAmC;CACnC,oCAAoC;CACpC,iCAAiC;CACjC,sCAAsC;CACtC,oCAAoC;CACpC,qCAAqC;CAErC,kCAAkC;CAClC,qBAAqB;CAGrB,eAAe;CAGf,uBAAuB;CACvB,0BAA0B;CAC1B,0BAA0B;CAC1B,+BAA+B;CAC/B,qBAAqB;CACrB,gCAAgC;CAChC,uBAAuB;CACvB,uBAAuB;CAGvB,uBAAuB;CACvB,+BAA+B;CAC/B,iCAAiC;CACjC,2BAA2B;CAC3B,sBAAsB;CACtB,2BAA2B;CAC3B,sBAAsB;CACtB,sBAAsB;CACtB,uBAAuB;CACvB,oCAAoC;CACpC,mCAAmC;CAGnC,MAAM;CACN,cAAc;CACd,SAAS;CACT,WAAW;CACX,aAAa;CACb,kBAAkB;CAClB,iBAAiB;CACjB,gBAAgB;CAChB,iBAAiB;CACjB,0BAA0B;CAC1B,oBAAoB;CACpB,yBAAyB;CACzB,YAAY;CACZ,gBAAgB;CAGhB,iBAAiB;CACjB,kCAAkC;CAClC,UAAU;CACV,YAAY;CACZ,4BAA4B;CAC5B,yBAAyB;CACzB,2BAA2B;CAC3B,wBAAwB;CACxB,uBAAuB;CACvB,cAAc;CACd,0BAA0B;CAC1B,mCAAmC;CACnC,aAAa;CACb,uBAAuB;CACvB,qBAAqB;CACrB,cAAc;AAChB"}
@@ -1,4 +1,4 @@
1
- const require_admin = require("./admin-Di-MmGFP.cjs");
1
+ const require_admin = require("./admin-BZ7knTd0.cjs");
2
2
  // src/domain/permissions/configurations.ts
3
3
  const meetsBaseRule = (token, ctx) => ctx.isDevModeActive ? require_admin.isDeveloperOrReviewer(token) : require_admin.isProductionManager(token);
4
4
  const baseDenialReason = (ctx) => ctx.isDevModeActive ? "dev branch requires developer or reviewer role" : "production requires productionManager role";
@@ -117,4 +117,4 @@ Object.defineProperty(exports, "canUpdateConfiguration", {
117
117
  }
118
118
  });
119
119
 
120
- //# sourceMappingURL=configurations-WI8H4zLk.cjs.map
120
+ //# sourceMappingURL=configurations-BM63ep1s.cjs.map
@@ -1 +1 @@
1
- {"version":3,"file":"configurations-WI8H4zLk.cjs","names":["isDeveloperOrReviewer","isProductionManager","isAdmin","PermissionDeniedError"],"sources":["../src/domain/permissions/configurations.ts"],"sourcesContent":["/**\n * @module domain/permissions/configurations\n *\n * - Dev branch → developer or reviewer; production → production manager.\n * - Purge is admin-only in any branch mode; its `ctx` is ignored.\n */\nimport type { StorageToken } from '../../clients/storage/tokens/types';\n\nimport { isAdmin, isDeveloperOrReviewer, isProductionManager } from './admin';\nimport { PermissionDeniedError } from './errors';\n\n/**\n * Caller-supplied context for configuration predicates.\n *\n * @property isDevModeActive — `true` on any branch other than the default (`isDefault`) one.\n */\nexport type ConfigurationCtx = {\n isDevModeActive: boolean;\n};\n\nconst meetsBaseRule = (token: StorageToken, ctx: ConfigurationCtx): boolean =>\n ctx.isDevModeActive ? isDeveloperOrReviewer(token) : isProductionManager(token);\n\nconst baseDenialReason = (ctx: ConfigurationCtx): string =>\n ctx.isDevModeActive\n ? 'dev branch requires developer or reviewer role'\n : 'production requires productionManager role';\n\nexport const canCreateConfiguration = (token: StorageToken, ctx: ConfigurationCtx): boolean =>\n meetsBaseRule(token, ctx);\n\nexport const canUpdateConfiguration = (token: StorageToken, ctx: ConfigurationCtx): boolean =>\n meetsBaseRule(token, ctx);\n\nexport const canCopyConfiguration = (token: StorageToken, ctx: ConfigurationCtx): boolean =>\n meetsBaseRule(token, ctx);\n\nexport const canMigrateFromTemplate = (token: StorageToken, ctx: ConfigurationCtx): boolean =>\n meetsBaseRule(token, ctx);\n\nexport const canPurgeConfiguration: (token: StorageToken, ctx: ConfigurationCtx) => boolean = (\n token,\n) => isAdmin(token);\n\nexport const canAssignFolder = (token: StorageToken, ctx: ConfigurationCtx): boolean =>\n meetsBaseRule(token, ctx);\n\nexport const assertCanCreateConfiguration = (token: StorageToken, ctx: ConfigurationCtx): void => {\n if (!canCreateConfiguration(token, ctx)) {\n throw new PermissionDeniedError({\n action: 'create-configuration',\n reason: baseDenialReason(ctx),\n });\n }\n};\n\nexport const assertCanUpdateConfiguration = (token: StorageToken, ctx: ConfigurationCtx): void => {\n if (!canUpdateConfiguration(token, ctx)) {\n throw new PermissionDeniedError({\n action: 'update-configuration',\n reason: baseDenialReason(ctx),\n });\n }\n};\n\nexport const assertCanCopyConfiguration = (token: StorageToken, ctx: ConfigurationCtx): void => {\n if (!canCopyConfiguration(token, ctx)) {\n throw new PermissionDeniedError({\n action: 'copy-configuration',\n reason: baseDenialReason(ctx),\n });\n }\n};\n\nexport const assertCanMigrateFromTemplate = (token: StorageToken, ctx: ConfigurationCtx): void => {\n if (!canMigrateFromTemplate(token, ctx)) {\n throw new PermissionDeniedError({\n action: 'migrate-from-template',\n reason: baseDenialReason(ctx),\n });\n }\n};\n\nexport const assertCanPurgeConfiguration = (token: StorageToken, ctx: ConfigurationCtx): void => {\n if (!canPurgeConfiguration(token, ctx)) {\n throw new PermissionDeniedError({\n action: 'purge-configuration',\n reason: 'purge requires admin role',\n });\n }\n};\n\nexport const assertCanAssignFolder = (token: StorageToken, ctx: ConfigurationCtx): void => {\n if (!canAssignFolder(token, ctx)) {\n throw new PermissionDeniedError({\n action: 'assign-folder',\n reason: baseDenialReason(ctx),\n });\n }\n};\n"],"mappings":";;AAoBA,MAAM,iBAAiB,OAAqB,QAC1C,IAAI,kBAAkBA,cAAAA,sBAAsB,KAAK,IAAIC,cAAAA,oBAAoB,KAAK;AAEhF,MAAM,oBAAoB,QACxB,IAAI,kBACA,mDACA;AAEN,MAAa,0BAA0B,OAAqB,QAC1D,cAAc,OAAO,GAAG;AAE1B,MAAa,0BAA0B,OAAqB,QAC1D,cAAc,OAAO,GAAG;AAE1B,MAAa,wBAAwB,OAAqB,QACxD,cAAc,OAAO,GAAG;AAE1B,MAAa,0BAA0B,OAAqB,QAC1D,cAAc,OAAO,GAAG;AAE1B,MAAa,yBACX,UACGC,cAAAA,QAAQ,KAAK;AAElB,MAAa,mBAAmB,OAAqB,QACnD,cAAc,OAAO,GAAG;AAE1B,MAAa,gCAAgC,OAAqB,QAAgC;CAChG,IAAI,CAAC,uBAAuB,OAAO,GAAG,GACpC,MAAM,IAAIC,cAAAA,sBAAsB;EAC9B,QAAQ;EACR,QAAQ,iBAAiB,GAAG;CAC9B,CAAC;AAEL;AAEA,MAAa,gCAAgC,OAAqB,QAAgC;CAChG,IAAI,CAAC,uBAAuB,OAAO,GAAG,GACpC,MAAM,IAAIA,cAAAA,sBAAsB;EAC9B,QAAQ;EACR,QAAQ,iBAAiB,GAAG;CAC9B,CAAC;AAEL;AAEA,MAAa,8BAA8B,OAAqB,QAAgC;CAC9F,IAAI,CAAC,qBAAqB,OAAO,GAAG,GAClC,MAAM,IAAIA,cAAAA,sBAAsB;EAC9B,QAAQ;EACR,QAAQ,iBAAiB,GAAG;CAC9B,CAAC;AAEL;AAEA,MAAa,gCAAgC,OAAqB,QAAgC;CAChG,IAAI,CAAC,uBAAuB,OAAO,GAAG,GACpC,MAAM,IAAIA,cAAAA,sBAAsB;EAC9B,QAAQ;EACR,QAAQ,iBAAiB,GAAG;CAC9B,CAAC;AAEL;AAEA,MAAa,+BAA+B,OAAqB,QAAgC;CAC/F,IAAI,CAAC,sBAAsB,OAAO,GAAG,GACnC,MAAM,IAAIA,cAAAA,sBAAsB;EAC9B,QAAQ;EACR,QAAQ;CACV,CAAC;AAEL;AAEA,MAAa,yBAAyB,OAAqB,QAAgC;CACzF,IAAI,CAAC,gBAAgB,OAAO,GAAG,GAC7B,MAAM,IAAIA,cAAAA,sBAAsB;EAC9B,QAAQ;EACR,QAAQ,iBAAiB,GAAG;CAC9B,CAAC;AAEL"}
1
+ {"version":3,"file":"configurations-BM63ep1s.cjs","names":["isDeveloperOrReviewer","isProductionManager","isAdmin","PermissionDeniedError"],"sources":["../src/domain/permissions/configurations.ts"],"sourcesContent":["/**\n * @module domain/permissions/configurations\n *\n * - Dev branch → developer or reviewer; production → production manager.\n * - Purge is admin-only in any branch mode; its `ctx` is ignored.\n */\nimport type { StorageToken } from '../../clients/storage/tokens/types';\n\nimport { isAdmin, isDeveloperOrReviewer, isProductionManager } from './admin';\nimport { PermissionDeniedError } from './errors';\n\n/**\n * Caller-supplied context for configuration predicates.\n *\n * @property isDevModeActive — `true` on any branch other than the default (`isDefault`) one.\n */\nexport type ConfigurationCtx = {\n isDevModeActive: boolean;\n};\n\nconst meetsBaseRule = (token: StorageToken, ctx: ConfigurationCtx): boolean =>\n ctx.isDevModeActive ? isDeveloperOrReviewer(token) : isProductionManager(token);\n\nconst baseDenialReason = (ctx: ConfigurationCtx): string =>\n ctx.isDevModeActive\n ? 'dev branch requires developer or reviewer role'\n : 'production requires productionManager role';\n\nexport const canCreateConfiguration = (token: StorageToken, ctx: ConfigurationCtx): boolean =>\n meetsBaseRule(token, ctx);\n\nexport const canUpdateConfiguration = (token: StorageToken, ctx: ConfigurationCtx): boolean =>\n meetsBaseRule(token, ctx);\n\nexport const canCopyConfiguration = (token: StorageToken, ctx: ConfigurationCtx): boolean =>\n meetsBaseRule(token, ctx);\n\nexport const canMigrateFromTemplate = (token: StorageToken, ctx: ConfigurationCtx): boolean =>\n meetsBaseRule(token, ctx);\n\nexport const canPurgeConfiguration: (token: StorageToken, ctx: ConfigurationCtx) => boolean = (\n token,\n) => isAdmin(token);\n\nexport const canAssignFolder = (token: StorageToken, ctx: ConfigurationCtx): boolean =>\n meetsBaseRule(token, ctx);\n\nexport const assertCanCreateConfiguration = (token: StorageToken, ctx: ConfigurationCtx): void => {\n if (!canCreateConfiguration(token, ctx)) {\n throw new PermissionDeniedError({\n action: 'create-configuration',\n reason: baseDenialReason(ctx),\n });\n }\n};\n\nexport const assertCanUpdateConfiguration = (token: StorageToken, ctx: ConfigurationCtx): void => {\n if (!canUpdateConfiguration(token, ctx)) {\n throw new PermissionDeniedError({\n action: 'update-configuration',\n reason: baseDenialReason(ctx),\n });\n }\n};\n\nexport const assertCanCopyConfiguration = (token: StorageToken, ctx: ConfigurationCtx): void => {\n if (!canCopyConfiguration(token, ctx)) {\n throw new PermissionDeniedError({\n action: 'copy-configuration',\n reason: baseDenialReason(ctx),\n });\n }\n};\n\nexport const assertCanMigrateFromTemplate = (token: StorageToken, ctx: ConfigurationCtx): void => {\n if (!canMigrateFromTemplate(token, ctx)) {\n throw new PermissionDeniedError({\n action: 'migrate-from-template',\n reason: baseDenialReason(ctx),\n });\n }\n};\n\nexport const assertCanPurgeConfiguration = (token: StorageToken, ctx: ConfigurationCtx): void => {\n if (!canPurgeConfiguration(token, ctx)) {\n throw new PermissionDeniedError({\n action: 'purge-configuration',\n reason: 'purge requires admin role',\n });\n }\n};\n\nexport const assertCanAssignFolder = (token: StorageToken, ctx: ConfigurationCtx): void => {\n if (!canAssignFolder(token, ctx)) {\n throw new PermissionDeniedError({\n action: 'assign-folder',\n reason: baseDenialReason(ctx),\n });\n }\n};\n"],"mappings":";;AAoBA,MAAM,iBAAiB,OAAqB,QAC1C,IAAI,kBAAkBA,cAAAA,sBAAsB,KAAK,IAAIC,cAAAA,oBAAoB,KAAK;AAEhF,MAAM,oBAAoB,QACxB,IAAI,kBACA,mDACA;AAEN,MAAa,0BAA0B,OAAqB,QAC1D,cAAc,OAAO,GAAG;AAE1B,MAAa,0BAA0B,OAAqB,QAC1D,cAAc,OAAO,GAAG;AAE1B,MAAa,wBAAwB,OAAqB,QACxD,cAAc,OAAO,GAAG;AAE1B,MAAa,0BAA0B,OAAqB,QAC1D,cAAc,OAAO,GAAG;AAE1B,MAAa,yBACX,UACGC,cAAAA,QAAQ,KAAK;AAElB,MAAa,mBAAmB,OAAqB,QACnD,cAAc,OAAO,GAAG;AAE1B,MAAa,gCAAgC,OAAqB,QAAgC;CAChG,IAAI,CAAC,uBAAuB,OAAO,GAAG,GACpC,MAAM,IAAIC,cAAAA,sBAAsB;EAC9B,QAAQ;EACR,QAAQ,iBAAiB,GAAG;CAC9B,CAAC;AAEL;AAEA,MAAa,gCAAgC,OAAqB,QAAgC;CAChG,IAAI,CAAC,uBAAuB,OAAO,GAAG,GACpC,MAAM,IAAIA,cAAAA,sBAAsB;EAC9B,QAAQ;EACR,QAAQ,iBAAiB,GAAG;CAC9B,CAAC;AAEL;AAEA,MAAa,8BAA8B,OAAqB,QAAgC;CAC9F,IAAI,CAAC,qBAAqB,OAAO,GAAG,GAClC,MAAM,IAAIA,cAAAA,sBAAsB;EAC9B,QAAQ;EACR,QAAQ,iBAAiB,GAAG;CAC9B,CAAC;AAEL;AAEA,MAAa,gCAAgC,OAAqB,QAAgC;CAChG,IAAI,CAAC,uBAAuB,OAAO,GAAG,GACpC,MAAM,IAAIA,cAAAA,sBAAsB;EAC9B,QAAQ;EACR,QAAQ,iBAAiB,GAAG;CAC9B,CAAC;AAEL;AAEA,MAAa,+BAA+B,OAAqB,QAAgC;CAC/F,IAAI,CAAC,sBAAsB,OAAO,GAAG,GACnC,MAAM,IAAIA,cAAAA,sBAAsB;EAC9B,QAAQ;EACR,QAAQ;CACV,CAAC;AAEL;AAEA,MAAa,yBAAyB,OAAqB,QAAgC;CACzF,IAAI,CAAC,gBAAgB,OAAO,GAAG,GAC7B,MAAM,IAAIA,cAAAA,sBAAsB;EAC9B,QAAQ;EACR,QAAQ,iBAAiB,GAAG;CAC9B,CAAC;AAEL"}
@@ -1,4 +1,4 @@
1
- import { c as isAdmin, h as PermissionDeniedError, p as isProductionManager, u as isDeveloperOrReviewer } from "./admin-CbMOsfgs.js";
1
+ import { d as isDeveloperOrReviewer, g as PermissionDeniedError, l as isAdmin, m as isProductionManager } from "./admin-xFfHSZHQ.js";
2
2
  // src/domain/permissions/configurations.ts
3
3
  const meetsBaseRule = (token, ctx) => ctx.isDevModeActive ? isDeveloperOrReviewer(token) : isProductionManager(token);
4
4
  const baseDenialReason = (ctx) => ctx.isDevModeActive ? "dev branch requires developer or reviewer role" : "production requires productionManager role";
@@ -46,4 +46,4 @@ const assertCanAssignFolder = (token, ctx) => {
46
46
  };
47
47
  export { assertCanPurgeConfiguration as a, canCopyConfiguration as c, canPurgeConfiguration as d, canUpdateConfiguration as f, assertCanMigrateFromTemplate as i, canCreateConfiguration as l, assertCanCopyConfiguration as n, assertCanUpdateConfiguration as o, assertCanCreateConfiguration as r, canAssignFolder as s, assertCanAssignFolder as t, canMigrateFromTemplate as u };
48
48
 
49
- //# sourceMappingURL=configurations-Cd6Nsox-.js.map
49
+ //# sourceMappingURL=configurations-BqvtIQm4.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"configurations-Cd6Nsox-.js","names":[],"sources":["../src/domain/permissions/configurations.ts"],"sourcesContent":["/**\n * @module domain/permissions/configurations\n *\n * - Dev branch → developer or reviewer; production → production manager.\n * - Purge is admin-only in any branch mode; its `ctx` is ignored.\n */\nimport type { StorageToken } from '../../clients/storage/tokens/types';\n\nimport { isAdmin, isDeveloperOrReviewer, isProductionManager } from './admin';\nimport { PermissionDeniedError } from './errors';\n\n/**\n * Caller-supplied context for configuration predicates.\n *\n * @property isDevModeActive — `true` on any branch other than the default (`isDefault`) one.\n */\nexport type ConfigurationCtx = {\n isDevModeActive: boolean;\n};\n\nconst meetsBaseRule = (token: StorageToken, ctx: ConfigurationCtx): boolean =>\n ctx.isDevModeActive ? isDeveloperOrReviewer(token) : isProductionManager(token);\n\nconst baseDenialReason = (ctx: ConfigurationCtx): string =>\n ctx.isDevModeActive\n ? 'dev branch requires developer or reviewer role'\n : 'production requires productionManager role';\n\nexport const canCreateConfiguration = (token: StorageToken, ctx: ConfigurationCtx): boolean =>\n meetsBaseRule(token, ctx);\n\nexport const canUpdateConfiguration = (token: StorageToken, ctx: ConfigurationCtx): boolean =>\n meetsBaseRule(token, ctx);\n\nexport const canCopyConfiguration = (token: StorageToken, ctx: ConfigurationCtx): boolean =>\n meetsBaseRule(token, ctx);\n\nexport const canMigrateFromTemplate = (token: StorageToken, ctx: ConfigurationCtx): boolean =>\n meetsBaseRule(token, ctx);\n\nexport const canPurgeConfiguration: (token: StorageToken, ctx: ConfigurationCtx) => boolean = (\n token,\n) => isAdmin(token);\n\nexport const canAssignFolder = (token: StorageToken, ctx: ConfigurationCtx): boolean =>\n meetsBaseRule(token, ctx);\n\nexport const assertCanCreateConfiguration = (token: StorageToken, ctx: ConfigurationCtx): void => {\n if (!canCreateConfiguration(token, ctx)) {\n throw new PermissionDeniedError({\n action: 'create-configuration',\n reason: baseDenialReason(ctx),\n });\n }\n};\n\nexport const assertCanUpdateConfiguration = (token: StorageToken, ctx: ConfigurationCtx): void => {\n if (!canUpdateConfiguration(token, ctx)) {\n throw new PermissionDeniedError({\n action: 'update-configuration',\n reason: baseDenialReason(ctx),\n });\n }\n};\n\nexport const assertCanCopyConfiguration = (token: StorageToken, ctx: ConfigurationCtx): void => {\n if (!canCopyConfiguration(token, ctx)) {\n throw new PermissionDeniedError({\n action: 'copy-configuration',\n reason: baseDenialReason(ctx),\n });\n }\n};\n\nexport const assertCanMigrateFromTemplate = (token: StorageToken, ctx: ConfigurationCtx): void => {\n if (!canMigrateFromTemplate(token, ctx)) {\n throw new PermissionDeniedError({\n action: 'migrate-from-template',\n reason: baseDenialReason(ctx),\n });\n }\n};\n\nexport const assertCanPurgeConfiguration = (token: StorageToken, ctx: ConfigurationCtx): void => {\n if (!canPurgeConfiguration(token, ctx)) {\n throw new PermissionDeniedError({\n action: 'purge-configuration',\n reason: 'purge requires admin role',\n });\n }\n};\n\nexport const assertCanAssignFolder = (token: StorageToken, ctx: ConfigurationCtx): void => {\n if (!canAssignFolder(token, ctx)) {\n throw new PermissionDeniedError({\n action: 'assign-folder',\n reason: baseDenialReason(ctx),\n });\n }\n};\n"],"mappings":";;AAoBA,MAAM,iBAAiB,OAAqB,QAC1C,IAAI,kBAAkB,sBAAsB,KAAK,IAAI,oBAAoB,KAAK;AAEhF,MAAM,oBAAoB,QACxB,IAAI,kBACA,mDACA;AAEN,MAAa,0BAA0B,OAAqB,QAC1D,cAAc,OAAO,GAAG;AAE1B,MAAa,0BAA0B,OAAqB,QAC1D,cAAc,OAAO,GAAG;AAE1B,MAAa,wBAAwB,OAAqB,QACxD,cAAc,OAAO,GAAG;AAE1B,MAAa,0BAA0B,OAAqB,QAC1D,cAAc,OAAO,GAAG;AAE1B,MAAa,yBACX,UACG,QAAQ,KAAK;AAElB,MAAa,mBAAmB,OAAqB,QACnD,cAAc,OAAO,GAAG;AAE1B,MAAa,gCAAgC,OAAqB,QAAgC;CAChG,IAAI,CAAC,uBAAuB,OAAO,GAAG,GACpC,MAAM,IAAI,sBAAsB;EAC9B,QAAQ;EACR,QAAQ,iBAAiB,GAAG;CAC9B,CAAC;AAEL;AAEA,MAAa,gCAAgC,OAAqB,QAAgC;CAChG,IAAI,CAAC,uBAAuB,OAAO,GAAG,GACpC,MAAM,IAAI,sBAAsB;EAC9B,QAAQ;EACR,QAAQ,iBAAiB,GAAG;CAC9B,CAAC;AAEL;AAEA,MAAa,8BAA8B,OAAqB,QAAgC;CAC9F,IAAI,CAAC,qBAAqB,OAAO,GAAG,GAClC,MAAM,IAAI,sBAAsB;EAC9B,QAAQ;EACR,QAAQ,iBAAiB,GAAG;CAC9B,CAAC;AAEL;AAEA,MAAa,gCAAgC,OAAqB,QAAgC;CAChG,IAAI,CAAC,uBAAuB,OAAO,GAAG,GACpC,MAAM,IAAI,sBAAsB;EAC9B,QAAQ;EACR,QAAQ,iBAAiB,GAAG;CAC9B,CAAC;AAEL;AAEA,MAAa,+BAA+B,OAAqB,QAAgC;CAC/F,IAAI,CAAC,sBAAsB,OAAO,GAAG,GACnC,MAAM,IAAI,sBAAsB;EAC9B,QAAQ;EACR,QAAQ;CACV,CAAC;AAEL;AAEA,MAAa,yBAAyB,OAAqB,QAAgC;CACzF,IAAI,CAAC,gBAAgB,OAAO,GAAG,GAC7B,MAAM,IAAI,sBAAsB;EAC9B,QAAQ;EACR,QAAQ,iBAAiB,GAAG;CAC9B,CAAC;AAEL"}
1
+ {"version":3,"file":"configurations-BqvtIQm4.js","names":[],"sources":["../src/domain/permissions/configurations.ts"],"sourcesContent":["/**\n * @module domain/permissions/configurations\n *\n * - Dev branch → developer or reviewer; production → production manager.\n * - Purge is admin-only in any branch mode; its `ctx` is ignored.\n */\nimport type { StorageToken } from '../../clients/storage/tokens/types';\n\nimport { isAdmin, isDeveloperOrReviewer, isProductionManager } from './admin';\nimport { PermissionDeniedError } from './errors';\n\n/**\n * Caller-supplied context for configuration predicates.\n *\n * @property isDevModeActive — `true` on any branch other than the default (`isDefault`) one.\n */\nexport type ConfigurationCtx = {\n isDevModeActive: boolean;\n};\n\nconst meetsBaseRule = (token: StorageToken, ctx: ConfigurationCtx): boolean =>\n ctx.isDevModeActive ? isDeveloperOrReviewer(token) : isProductionManager(token);\n\nconst baseDenialReason = (ctx: ConfigurationCtx): string =>\n ctx.isDevModeActive\n ? 'dev branch requires developer or reviewer role'\n : 'production requires productionManager role';\n\nexport const canCreateConfiguration = (token: StorageToken, ctx: ConfigurationCtx): boolean =>\n meetsBaseRule(token, ctx);\n\nexport const canUpdateConfiguration = (token: StorageToken, ctx: ConfigurationCtx): boolean =>\n meetsBaseRule(token, ctx);\n\nexport const canCopyConfiguration = (token: StorageToken, ctx: ConfigurationCtx): boolean =>\n meetsBaseRule(token, ctx);\n\nexport const canMigrateFromTemplate = (token: StorageToken, ctx: ConfigurationCtx): boolean =>\n meetsBaseRule(token, ctx);\n\nexport const canPurgeConfiguration: (token: StorageToken, ctx: ConfigurationCtx) => boolean = (\n token,\n) => isAdmin(token);\n\nexport const canAssignFolder = (token: StorageToken, ctx: ConfigurationCtx): boolean =>\n meetsBaseRule(token, ctx);\n\nexport const assertCanCreateConfiguration = (token: StorageToken, ctx: ConfigurationCtx): void => {\n if (!canCreateConfiguration(token, ctx)) {\n throw new PermissionDeniedError({\n action: 'create-configuration',\n reason: baseDenialReason(ctx),\n });\n }\n};\n\nexport const assertCanUpdateConfiguration = (token: StorageToken, ctx: ConfigurationCtx): void => {\n if (!canUpdateConfiguration(token, ctx)) {\n throw new PermissionDeniedError({\n action: 'update-configuration',\n reason: baseDenialReason(ctx),\n });\n }\n};\n\nexport const assertCanCopyConfiguration = (token: StorageToken, ctx: ConfigurationCtx): void => {\n if (!canCopyConfiguration(token, ctx)) {\n throw new PermissionDeniedError({\n action: 'copy-configuration',\n reason: baseDenialReason(ctx),\n });\n }\n};\n\nexport const assertCanMigrateFromTemplate = (token: StorageToken, ctx: ConfigurationCtx): void => {\n if (!canMigrateFromTemplate(token, ctx)) {\n throw new PermissionDeniedError({\n action: 'migrate-from-template',\n reason: baseDenialReason(ctx),\n });\n }\n};\n\nexport const assertCanPurgeConfiguration = (token: StorageToken, ctx: ConfigurationCtx): void => {\n if (!canPurgeConfiguration(token, ctx)) {\n throw new PermissionDeniedError({\n action: 'purge-configuration',\n reason: 'purge requires admin role',\n });\n }\n};\n\nexport const assertCanAssignFolder = (token: StorageToken, ctx: ConfigurationCtx): void => {\n if (!canAssignFolder(token, ctx)) {\n throw new PermissionDeniedError({\n action: 'assign-folder',\n reason: baseDenialReason(ctx),\n });\n }\n};\n"],"mappings":";;AAoBA,MAAM,iBAAiB,OAAqB,QAC1C,IAAI,kBAAkB,sBAAsB,KAAK,IAAI,oBAAoB,KAAK;AAEhF,MAAM,oBAAoB,QACxB,IAAI,kBACA,mDACA;AAEN,MAAa,0BAA0B,OAAqB,QAC1D,cAAc,OAAO,GAAG;AAE1B,MAAa,0BAA0B,OAAqB,QAC1D,cAAc,OAAO,GAAG;AAE1B,MAAa,wBAAwB,OAAqB,QACxD,cAAc,OAAO,GAAG;AAE1B,MAAa,0BAA0B,OAAqB,QAC1D,cAAc,OAAO,GAAG;AAE1B,MAAa,yBACX,UACG,QAAQ,KAAK;AAElB,MAAa,mBAAmB,OAAqB,QACnD,cAAc,OAAO,GAAG;AAE1B,MAAa,gCAAgC,OAAqB,QAAgC;CAChG,IAAI,CAAC,uBAAuB,OAAO,GAAG,GACpC,MAAM,IAAI,sBAAsB;EAC9B,QAAQ;EACR,QAAQ,iBAAiB,GAAG;CAC9B,CAAC;AAEL;AAEA,MAAa,gCAAgC,OAAqB,QAAgC;CAChG,IAAI,CAAC,uBAAuB,OAAO,GAAG,GACpC,MAAM,IAAI,sBAAsB;EAC9B,QAAQ;EACR,QAAQ,iBAAiB,GAAG;CAC9B,CAAC;AAEL;AAEA,MAAa,8BAA8B,OAAqB,QAAgC;CAC9F,IAAI,CAAC,qBAAqB,OAAO,GAAG,GAClC,MAAM,IAAI,sBAAsB;EAC9B,QAAQ;EACR,QAAQ,iBAAiB,GAAG;CAC9B,CAAC;AAEL;AAEA,MAAa,gCAAgC,OAAqB,QAAgC;CAChG,IAAI,CAAC,uBAAuB,OAAO,GAAG,GACpC,MAAM,IAAI,sBAAsB;EAC9B,QAAQ;EACR,QAAQ,iBAAiB,GAAG;CAC9B,CAAC;AAEL;AAEA,MAAa,+BAA+B,OAAqB,QAAgC;CAC/F,IAAI,CAAC,sBAAsB,OAAO,GAAG,GACnC,MAAM,IAAI,sBAAsB;EAC9B,QAAQ;EACR,QAAQ;CACV,CAAC;AAEL;AAEA,MAAa,yBAAyB,OAAqB,QAAgC;CACzF,IAAI,CAAC,gBAAgB,OAAO,GAAG,GAC7B,MAAM,IAAI,sBAAsB;EAC9B,QAAQ;EACR,QAAQ,iBAAiB,GAAG;CAC9B,CAAC;AAEL"}
@@ -1,6 +1,7 @@
1
1
  Object.defineProperty(exports, Symbol.toStringTag, { value: "Module" });
2
- const require_constants = require("../constants-d0Do9NSN.cjs");
3
- const require_componentId = require("../componentId-olp0tltf.cjs");
2
+ const require_serviceIds = require("../serviceIds-Bg1pWiPE.cjs");
3
+ const require_componentId = require("../componentId-_tRhEv6W.cjs");
4
+ const require_constants = require("../constants-Day8CU5i.cjs");
4
5
  const require_adminRoles = require("../adminRoles-DnFpO_2W.cjs");
5
6
  exports.AdminFeature = require_constants.AdminFeature;
6
7
  exports.AdminRole = require_adminRoles.AdminRole;
@@ -11,6 +12,6 @@ exports.ManageErrorCode = require_constants.ManageErrorCode;
11
12
  exports.ProjectFeature = require_constants.ProjectFeature;
12
13
  exports.Provider = require_constants.Provider;
13
14
  exports.STACKS = require_constants.STACKS;
14
- exports.ServiceId = require_constants.ServiceId;
15
+ exports.ServiceId = require_serviceIds.ServiceId;
15
16
  exports.StackFeature = require_constants.StackFeature;
16
17
  exports.URLS = require_constants.URLS;
@@ -1,5 +1,5 @@
1
1
  import { ai as ManageErrorCode } from "../index-FrsEkDvX.cjs";
2
- import { a as STACKS, c as ProjectFeature, i as Provider, l as ComponentId, n as Continent, o as AdminFeature, r as KeboolaStack, s as StackFeature, t as URLS, u as ServiceId } from "../index-B5rELADq.cjs";
2
+ import { a as STACKS, c as ProjectFeature, i as Provider, l as ComponentId, n as Continent, o as AdminFeature, r as KeboolaStack, s as StackFeature, t as URLS, u as ServiceId } from "../index-Cd0naVic.cjs";
3
3
  import { t as AdminRole } from "../adminRoles-BTKVwEy8.cjs";
4
4
  import { t as Backend } from "../backends-BHotIdL0.cjs";
5
5
  export { AdminFeature, AdminRole, Backend, ComponentId, Continent, type KeboolaStack, ManageErrorCode, ProjectFeature, Provider, STACKS, ServiceId, StackFeature, URLS };
@@ -1,5 +1,5 @@
1
1
  import { ai as ManageErrorCode } from "../index-FrsEkDvX.js";
2
- import { a as STACKS, c as ProjectFeature, i as Provider, l as ComponentId, n as Continent, o as AdminFeature, r as KeboolaStack, s as StackFeature, t as URLS, u as ServiceId } from "../index-Dhyrg5zd.js";
2
+ import { a as STACKS, c as ProjectFeature, i as Provider, l as ComponentId, n as Continent, o as AdminFeature, r as KeboolaStack, s as StackFeature, t as URLS, u as ServiceId } from "../index-DbStyQKc.js";
3
3
  import { t as AdminRole } from "../adminRoles-Cm513r1G.js";
4
4
  import { t as Backend } from "../backends-BHotIdL0.js";
5
5
  export { AdminFeature, AdminRole, Backend, ComponentId, Continent, type KeboolaStack, ManageErrorCode, ProjectFeature, Provider, STACKS, ServiceId, StackFeature, URLS };
@@ -1,4 +1,5 @@
1
- import { a as Backend, c as ProjectFeature, i as STACKS, l as ManageErrorCode, n as Continent, o as AdminFeature, r as Provider, s as StackFeature, t as URLS, u as ServiceId } from "../constants-Dqi0ewGv.js";
2
- import { t as ComponentId } from "../componentId-DZP1rBix.js";
1
+ import { t as ServiceId } from "../serviceIds-RAVtP4nK.js";
2
+ import { t as ComponentId } from "../componentId-Cps6WBy1.js";
3
+ import { a as Backend, c as ProjectFeature, i as STACKS, l as ManageErrorCode, n as Continent, o as AdminFeature, r as Provider, s as StackFeature, t as URLS } from "../constants-DLPkpnGv.js";
3
4
  import { t as AdminRole } from "../adminRoles-asa-MhDD.js";
4
5
  export { AdminFeature, AdminRole, Backend, ComponentId, Continent, ManageErrorCode, ProjectFeature, Provider, STACKS, ServiceId, StackFeature, URLS };
@@ -1,32 +1,3 @@
1
- // src/constants/serviceIds.ts
2
- /**
3
- * Every service a Keboola stack can announce in its `GET /v2/storage` index.
4
- *
5
- * - The values are the `id`s the stack reports; the service-client registry and `createStack`'s
6
- * lookups narrow on them. The index itself stays `string` — a stack may announce more.
7
- * - Callers enumerate them at runtime — a test double announcing every service, for one.
8
- */
9
- const ServiceId = {
10
- Vault: "vault",
11
- DataScience: "data-science",
12
- Encryption: "encryption",
13
- Telemetry: "telemetry",
14
- Ai: "ai",
15
- Editor: "editor",
16
- Import: "import",
17
- Oauth: "oauth",
18
- Query: "query",
19
- Queue: "queue",
20
- KaiAssistant: "kai-assistant",
21
- KaiAgent: "kai-agent",
22
- ComponentsMcp: "components-mcp",
23
- SyncActions: "sync-actions",
24
- Stream: "stream",
25
- Notification: "notification",
26
- Scheduler: "scheduler",
27
- Metastore: "metastore",
28
- Billing: "billing"
29
- };
30
1
  // src/constants/manageErrorCodes.ts
31
2
  const ManageErrorCode = {
32
3
  ProgrammaticProjectInvalidClaim: "manage.programmaticProjects.invalidClaim",
@@ -77,7 +48,8 @@ const ProjectFeature = {
77
48
  AllowSharedSnowflakeAccess: "allow-shared-snowflake-access",
78
49
  BigqueryDefaultImView: "bigquery-default-im-view",
79
50
  BigqueryPolicyTags: "bigquery-policy-tags",
80
- DataAppsDisabled: "data-apps-disabled"
51
+ DataAppsDisabled: "data-apps-disabled",
52
+ RowLevelSecurity: "row-level-security"
81
53
  };
82
54
  // src/constants/stackFeatures.ts
83
55
  const StackFeature = {
@@ -295,6 +267,6 @@ const URLS = {
295
267
  CLIENT_MAKE_GET_STARTED: "https://help.make.com/get-started",
296
268
  CLIENT_DEVIN_DESKTOP: "https://docs.devin.ai/desktop/getting-started"
297
269
  };
298
- export { Backend as a, ProjectFeature as c, STACKS as i, ManageErrorCode as l, Continent as n, AdminFeature as o, Provider as r, StackFeature as s, URLS as t, ServiceId as u };
270
+ export { Backend as a, ProjectFeature as c, STACKS as i, ManageErrorCode as l, Continent as n, AdminFeature as o, Provider as r, StackFeature as s, URLS as t };
299
271
 
300
- //# sourceMappingURL=constants-Dqi0ewGv.js.map
272
+ //# sourceMappingURL=constants-DLPkpnGv.js.map