@keboola/api-client 53.0.0 → 55.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 (169) hide show
  1. package/API-SURFACE.md +2 -1
  2. package/CHANGELOG.md +68 -0
  3. package/README.md +1 -1
  4. package/dist/{admin-Di-MmGFP.cjs → admin-BZ7knTd0.cjs} +18 -2
  5. package/dist/admin-BZ7knTd0.cjs.map +1 -0
  6. package/dist/{admin-CbMOsfgs.js → admin-xFfHSZHQ.js} +13 -3
  7. package/dist/admin-xFfHSZHQ.js.map +1 -0
  8. package/dist/{componentId-DZP1rBix.js → componentId-Ba4gsJ9O.js} +3 -2
  9. package/dist/componentId-Ba4gsJ9O.js.map +1 -0
  10. package/dist/{componentId-olp0tltf.cjs → componentId-Ba_1Gv_A.cjs} +3 -2
  11. package/dist/componentId-Ba_1Gv_A.cjs.map +1 -0
  12. package/dist/{configurations-WI8H4zLk.cjs → configurations-BM63ep1s.cjs} +2 -2
  13. package/dist/{configurations-WI8H4zLk.cjs.map → configurations-BM63ep1s.cjs.map} +1 -1
  14. package/dist/{configurations-Cd6Nsox-.js → configurations-BqvtIQm4.js} +2 -2
  15. package/dist/{configurations-Cd6Nsox-.js.map → configurations-BqvtIQm4.js.map} +1 -1
  16. package/dist/constants/index.cjs +3 -2
  17. package/dist/constants/index.d.cts +2 -2
  18. package/dist/constants/index.d.ts +2 -2
  19. package/dist/constants/index.js +3 -3
  20. package/dist/{constants-DLPkpnGv.js → constants-HccvU5kx.js} +9 -2
  21. package/dist/constants-HccvU5kx.js.map +1 -0
  22. package/dist/{constants-Day8CU5i.cjs → constants-V9hAyPTo.cjs} +14 -1
  23. package/dist/constants-V9hAyPTo.cjs.map +1 -0
  24. package/dist/domain/permissions/index.cjs +4 -3
  25. package/dist/domain/permissions/index.d.cts +9 -1
  26. package/dist/domain/permissions/index.d.ts +9 -1
  27. package/dist/domain/permissions/index.js +4 -4
  28. package/dist/encryption/index.d.cts +1 -1
  29. package/dist/encryption/index.d.ts +1 -1
  30. package/dist/encryption/types.d.cts +1 -1
  31. package/dist/encryption/types.d.ts +1 -1
  32. package/dist/{index-B0prazAi.d.cts → index-BE6qM0vu.d.cts} +551 -30
  33. package/dist/{index-BoKrc8wy.d.ts → index-BGsP2QBc.d.ts} +2 -2
  34. package/dist/{index-BxgHNJ3Q.d.ts → index-CQPs3hrp.d.ts} +25 -40
  35. package/dist/{index-BL7uXOiY.d.cts → index-CWowDl63.d.cts} +2 -2
  36. package/dist/{index-BNwo-zaJ.d.cts → index-CYk7Aa8u.d.cts} +11 -3
  37. package/dist/{index-BUKMdbKh.d.cts → index-CmyFWQXn.d.cts} +25 -40
  38. package/dist/{index-CwUurckF.d.ts → index-D3hWR_e4.d.ts} +11 -3
  39. package/dist/{index-D0Gnp2QM.d.ts → index-DeWeUUfE.d.ts} +551 -30
  40. package/dist/index.cjs +12 -17
  41. package/dist/index.cjs.map +1 -1
  42. package/dist/index.d.cts +2 -2
  43. package/dist/index.d.ts +2 -2
  44. package/dist/index.js +11 -16
  45. package/dist/index.js.map +1 -1
  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-CmgsWmf0.js → management-BlMQnPNS.js} +40 -19
  53. package/dist/management-BlMQnPNS.js.map +1 -0
  54. package/dist/{management-Drs5G-hf.cjs → management-dIMrTTpI.cjs} +40 -19
  55. package/dist/management-dIMrTTpI.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 +41 -2
  64. package/dist/oauth/index.d.ts +41 -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-CEW2AvDV.cjs} +55 -1
  69. package/dist/oauth-CEW2AvDV.cjs.map +1 -0
  70. package/dist/{oauth-DOveZKUv.js → oauth-Fri6IthS.js} +51 -3
  71. package/dist/oauth-Fri6IthS.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/sdk/configurations/index.cjs +48 -3
  87. package/dist/sdk/configurations/index.cjs.map +1 -1
  88. package/dist/sdk/configurations/index.d.cts +230 -2
  89. package/dist/sdk/configurations/index.d.ts +230 -2
  90. package/dist/sdk/configurations/index.js +48 -3
  91. package/dist/sdk/configurations/index.js.map +1 -1
  92. package/dist/sdk/dataAppServer/index.cjs +4 -40
  93. package/dist/sdk/dataAppServer/index.cjs.map +1 -1
  94. package/dist/sdk/dataAppServer/index.d.cts +1 -1
  95. package/dist/sdk/dataAppServer/index.d.ts +1 -1
  96. package/dist/sdk/dataAppServer/index.js +2 -38
  97. package/dist/sdk/dataAppServer/index.js.map +1 -1
  98. package/dist/sdk/queryService/index.cjs +3 -70
  99. package/dist/sdk/queryService/index.d.cts +2 -2
  100. package/dist/sdk/queryService/index.d.ts +2 -2
  101. package/dist/sdk/queryService/index.js +1 -70
  102. package/dist/sdk/securityPolicy/index.cjs +365 -0
  103. package/dist/sdk/securityPolicy/index.cjs.map +1 -0
  104. package/dist/sdk/securityPolicy/index.d.cts +110 -0
  105. package/dist/sdk/securityPolicy/index.d.ts +110 -0
  106. package/dist/sdk/securityPolicy/index.js +350 -0
  107. package/dist/sdk/securityPolicy/index.js.map +1 -0
  108. package/dist/sdk/securityPolicy/types.cjs +0 -0
  109. package/dist/sdk/securityPolicy/types.d.cts +2 -0
  110. package/dist/sdk/securityPolicy/types.d.ts +2 -0
  111. package/dist/sdk/securityPolicy/types.js +1 -0
  112. package/dist/sdk/semanticLayer/index.cjs +3 -2
  113. package/dist/sdk/semanticLayer/index.d.cts +3 -3
  114. package/dist/sdk/semanticLayer/index.d.ts +3 -3
  115. package/dist/sdk/semanticLayer/index.js +3 -1
  116. package/dist/sdk/semanticLayer/types.d.cts +1 -1
  117. package/dist/sdk/semanticLayer/types.d.ts +1 -1
  118. package/dist/sdk/vault/index.cjs +3 -12
  119. package/dist/sdk/vault/index.cjs.map +1 -1
  120. package/dist/sdk/vault/index.d.cts +1 -1
  121. package/dist/sdk/vault/index.d.ts +1 -1
  122. package/dist/sdk/vault/index.js +3 -12
  123. package/dist/sdk/vault/index.js.map +1 -1
  124. package/dist/{semanticLayer-D8D_3hk-.cjs → semanticLayer-BVpdWKJn.cjs} +4 -52
  125. package/dist/semanticLayer-BVpdWKJn.cjs.map +1 -0
  126. package/dist/{semanticLayer-CfjDnmsY.js → semanticLayer-Btj1Qy9O.js} +5 -47
  127. package/dist/semanticLayer-Btj1Qy9O.js.map +1 -0
  128. package/dist/storage/index.cjs +1 -1
  129. package/dist/storage/index.d.cts +2 -2
  130. package/dist/storage/index.d.ts +2 -2
  131. package/dist/storage/index.js +1 -1
  132. package/dist/storage/types.d.cts +2 -2
  133. package/dist/storage/types.d.ts +2 -2
  134. package/dist/{storage-BMrYlyLB.cjs → storage-BL-TfHp8.cjs} +2 -2
  135. package/dist/storage-BL-TfHp8.cjs.map +1 -0
  136. package/dist/{storage--2FvvLAw.js → storage-DEJN8sw-.js} +2 -2
  137. package/dist/storage-DEJN8sw-.js.map +1 -0
  138. package/dist/syncActions/index.cjs +1 -1
  139. package/dist/syncActions/index.js +1 -1
  140. package/dist/{syncActions-DToUhyP3.cjs → syncActions-B9JTiSao.cjs} +2 -2
  141. package/dist/{syncActions-DToUhyP3.cjs.map → syncActions-B9JTiSao.cjs.map} +1 -1
  142. package/dist/{syncActions-DV_aObTQ.js → syncActions-W98Jme2Z.js} +2 -2
  143. package/dist/{syncActions-DV_aObTQ.js.map → syncActions-W98Jme2Z.js.map} +1 -1
  144. package/dist/{types-iU1Sc1IM.d.ts → types-BDgOF2WN.d.ts} +6 -29
  145. package/dist/types-BXKL0wTI.d.cts +85 -0
  146. package/dist/{types-CsRfoHQw.d.cts → types-Bwvss_gW.d.cts} +1111 -412
  147. package/dist/{types-BljDxuWG.d.cts → types-DCARsJWs.d.cts} +6 -29
  148. package/dist/types-DK1bSUNr.d.ts +85 -0
  149. package/dist/{types-DjWubjvP.d.cts → types-DMhgKHCP.d.cts} +309 -74
  150. package/dist/{types-DNldEa7i.d.ts → types-J_dgwMjP.d.ts} +1111 -412
  151. package/dist/{types-CsVRsObb.d.ts → types-p_lWvuQJ.d.ts} +309 -74
  152. package/package.json +29 -3
  153. package/surface/management.md +29 -25
  154. package/dist/admin-CbMOsfgs.js.map +0 -1
  155. package/dist/admin-Di-MmGFP.cjs.map +0 -1
  156. package/dist/componentId-DZP1rBix.js.map +0 -1
  157. package/dist/componentId-olp0tltf.cjs.map +0 -1
  158. package/dist/constants-DLPkpnGv.js.map +0 -1
  159. package/dist/constants-Day8CU5i.cjs.map +0 -1
  160. package/dist/management-CmgsWmf0.js.map +0 -1
  161. package/dist/management-Drs5G-hf.cjs.map +0 -1
  162. package/dist/oauth-CSBChWuf.cjs.map +0 -1
  163. package/dist/oauth-DOveZKUv.js.map +0 -1
  164. package/dist/sdk/queryService/index.cjs.map +0 -1
  165. package/dist/sdk/queryService/index.js.map +0 -1
  166. package/dist/semanticLayer-CfjDnmsY.js.map +0 -1
  167. package/dist/semanticLayer-D8D_3hk-.cjs.map +0 -1
  168. package/dist/storage--2FvvLAw.js.map +0 -1
  169. package/dist/storage-BMrYlyLB.cjs.map +0 -1
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, 704 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
 
@@ -332,6 +332,7 @@ Every namespace and method reachable from a ready `ProjectApi` — one project's
332
332
  - `projects.setProjectMetadata`
333
333
  - `projects.setProjectReviewers`
334
334
  - `projects.updateProject`
335
+ - `search.find`
335
336
  - `snowflakePartnerConnect.check`
336
337
  - `snowflakePartnerConnect.unlock`
337
338
  - `storageBackends.activateStorageBackend`
package/CHANGELOG.md CHANGED
@@ -1,5 +1,73 @@
1
1
  # @keboola/api-client
2
2
 
3
+ ## 55.0.0
4
+
5
+ ### Major Changes
6
+
7
+ - `createAdminAccount` takes a `ManagementSessionToken` (new, from `@keboola/api-client/management/types`): a Manage token that carries its `user`, so `AdminAccount.user` is always present. It no longer accepts `null` or a token without a user.
8
+
9
+ - `management.projects` types derive from the regenerated Manage schema.
10
+
11
+ - `getProjectUsers` resolves `ProjectMember[]`: the membership the endpoint sends, with `created`, `expires`, `reason`, `invitor` and `approver` on top of the user.
12
+ - `Project` is the generated project detail.
13
+ - `backends` has one optional key per backend, each with `technicalOwner`. BigQuery carries `credentials` and `folderId` instead of `host` and `region`, and Synapse has no `region`.
14
+ - `fileStorage` is the S3, ABS or GCS shape, with a nullable `creator`.
15
+ - `metrics` items are typed `{ name, value }`, and `usersCount` is always present.
16
+ - `addProjectFeature` resolves the project with the optional `warnings`; `setProjectLimits`, `updateProject`, `moveProject`, `setProjectDisabled` and `getProjectReviewers` resolve their generated responses.
17
+ - Bodies accept what the endpoints accept: the SOX roles on invite, add and role change, `reason` and `expirationSeconds` on invite and add, `canApproveMergeRequests` on role change.
18
+ - Removed: `ProjectBase`, `ProjectWithFeatureWarnings`, `Reviewer`, `ProjectPath` and `ProjectJoinRequestPath`. Each method takes its endpoint's own `*Path` type (`UpdateProjectPath`, `GetProjectJoinRequestPath`, …).
19
+ - `ProjectMetric` in `@keboola/api-client/constants` names the metrics Connection snapshots per project: `kbc.adminsCount`, `storage.dataSizeBytes`, `storage.rowsCount`.
20
+ - `createProjectInvitation` no longer takes `landingApp`: Connection never read it, and the Business Workspace app it named is gone.
21
+ - The regenerated schema makes organization, project and user metadata `value` nullable, a join request's `user` required, and `requestProjectAccess` resolve the request with its `project`.
22
+
23
+ ### Minor Changes
24
+
25
+ - `@keboola/api-client/sdk/securityPolicy` exports `isLegacySecurityPolicy(meta)`: whether a policy is stored under an older rule schema, so a UI can show it read-only instead of failing on save.
26
+
27
+ It also exports `isReplaceableSecurityPolicy(policy, projectId)`: whether creating a policy for the same table replaces this one, so a UI can tell an edit from a new policy before it writes.
28
+
29
+ - `createOrganizationCredentialsClient` lists the GitHub Apps an organization can connect to.
30
+
31
+ - `getOrganizationGitHubApps` calls `GET /organizations/{organizationId}/github-apps` with the caller's Manage token and resolves `OrganizationGitHubApp[]`: each host's App and its install page (`installUrl`, `null` on GitHub Enterprise Cloud).
32
+ - `OrganizationConnectErrorCode` names the `error` codes oauth-service adds to `returnUrl` when connecting an organization fails.
33
+
34
+ - New component IDs `WR_DB_ORACLE_ADW` (`keboola.wr-db-oracle-adw`) and `EX_DB_ORACLE_ADW` (`keboola.ex-db-oracle-adw`) with configuration schemas `wrDbOracleAdwSchema` and `exDbOracleAdwSchema`. They accept every `keboola.wr-db-oracle` / `keboola.ex-db-oracle` connection plus an Oracle Cloud Autonomous Database wallet connection: `walletServiceName` with `walletFileId`.
35
+
36
+ - The writer schema is a union of a host/port/database connection and a wallet connection. Wallet mode rejects `host`.
37
+ - The extractor schema adds both fields as optional, next to `tnsnames`.
38
+
39
+ ### Patch Changes
40
+
41
+ - Internal code satisfies the `anti-slop` lint rules; public APIs and behaviour are unchanged.
42
+
43
+ - `Reflect.get`, parameters typed `object` and accumulator-copying reducers give way to narrowing, precise types, `filter` and `flatMap`.
44
+ - `@keboola/api-client` keeps its `as unknown as` bridges from OpenAPI to domain types.
45
+
46
+ - Configuration folders use the configuration's `folder` field instead of the `KBC.configuration.folderName` metadata key. `@keboola/api-client` types `folder` on a read configuration and on the create and update bodies; kbc-ui reads and writes the folder through it.
47
+
48
+ ## 54.0.0
49
+
50
+ ### Major Changes
51
+
52
+ - `ComponentId.EX_GENERIC_V2_DETAIL` is gone: it named a kbc-ui route, not a component.
53
+
54
+ ### Minor Changes
55
+
56
+ - `@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.
57
+
58
+ - `@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.
59
+
60
+ - 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.
61
+
62
+ - `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.
63
+
64
+ - `@keboola/api-client/sdk/queryService` exports `cellParser`, which types a Query Service result cell by its column type, in Node and the browser.
65
+ - `cellParser(type)(cell)` returns a number, boolean, ISO date or timestamp, or the cell string.
66
+ - A Snowflake `datetime` reads like `timestamp_ntz`: ISO without `Z`.
67
+ - `sdk/dataAppServer` `runQuery` types its rows with it.
68
+
69
+ - `StorageBackend` gains an optional `folderId`: the GCP folder id of a BigQuery backend, `null` when it has none
70
+
3
71
  ## 53.0.0
4
72
 
5
73
  ### Minor Changes
package/README.md CHANGED
@@ -458,7 +458,7 @@ Bug reports and feature requests: [`keboola/ui` issues](https://github.com/keboo
458
458
 
459
459
  ## Live E2E smoke
460
460
 
461
- A nightly live smoke (kept off PR CI, not published to npm) exercises the SDK against a real Keboola backend. See [`integration/README.md`](./integration/README.md) for the suites, local runs, CI configuration, and the secret-rotation playbook.
461
+ A nightly live smoke (kept off PR CI, not published to npm) exercises the SDK against a real Keboola backend. See [`integration/README.md`](./integration/README.md) for the suites, local runs and CI configuration.
462
462
 
463
463
  ## License
464
464
 
@@ -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"}
@@ -3,6 +3,7 @@ const ComponentId = {
3
3
  WR_DB_MYSQL: "keboola.wr-db-mysql",
4
4
  WR_DB_PGSQL: "keboola.wr-db-pgsql",
5
5
  WR_DB_ORACLE: "keboola.wr-db-oracle",
6
+ WR_DB_ORACLE_ADW: "keboola.wr-db-oracle-adw",
6
7
  WR_DB_SNOWFLAKE: "keboola.wr-db-snowflake",
7
8
  WR_DB_SNOWFLAKE_GCS: "keboola.wr-db-snowflake-gcs",
8
9
  WR_DB_SNOWFLAKE_GCS_S3: "keboola.wr-db-snowflake-gcs-s3",
@@ -35,6 +36,7 @@ const ComponentId = {
35
36
  EX_DB_MSSQL: "keboola.ex-db-mssql",
36
37
  EX_DB_MSSQL_CDATA: "keboola.ex-db-mssql-cdata",
37
38
  EX_DB_ORACLE: "keboola.ex-db-oracle",
39
+ EX_DB_ORACLE_ADW: "keboola.ex-db-oracle-adw",
38
40
  EX_DB_SNOWFLAKE: "keboola.ex-db-snowflake",
39
41
  EX_DB_NETSUITE: "keboola.ex-db-netsuite",
40
42
  EX_DB_INFORMIX: "keboola.ex-db-informix",
@@ -122,7 +124,6 @@ const ComponentId = {
122
124
  EX_MONGODB: "keboola.ex-mongodb",
123
125
  EX_SNOWFLAKE_QUERY_HISTORY: "keboola.ex-snowflake-query-history",
124
126
  EX_SNOWFLAKE_PARAMETERS: "keboola.ex-snowflake-parameters",
125
- EX_GENERIC_V2_DETAIL: "ex-generic-v2-detail",
126
127
  APAC_EX_GMAIL_ATTACHMENTS: "apac.ex-gmail-attachments",
127
128
  GENEEA_NLP_ANALYSIS_V2: "geneea.nlp-analysis-v2",
128
129
  KDS_APP_CUSTOM_PYTHON: "kds-team.app-custom-python",
@@ -136,4 +137,4 @@ const ComponentId = {
136
137
  };
137
138
  export { ComponentId as t };
138
139
 
139
- //# sourceMappingURL=componentId-DZP1rBix.js.map
140
+ //# sourceMappingURL=componentId-Ba4gsJ9O.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"componentId-Ba4gsJ9O.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_ORACLE_ADW: 'keboola.wr-db-oracle-adw',\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_ORACLE_ADW: 'keboola.ex-db-oracle-adw',\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,kBAAkB;CAClB,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,kBAAkB;CAClB,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"}
@@ -3,6 +3,7 @@ const ComponentId = {
3
3
  WR_DB_MYSQL: "keboola.wr-db-mysql",
4
4
  WR_DB_PGSQL: "keboola.wr-db-pgsql",
5
5
  WR_DB_ORACLE: "keboola.wr-db-oracle",
6
+ WR_DB_ORACLE_ADW: "keboola.wr-db-oracle-adw",
6
7
  WR_DB_SNOWFLAKE: "keboola.wr-db-snowflake",
7
8
  WR_DB_SNOWFLAKE_GCS: "keboola.wr-db-snowflake-gcs",
8
9
  WR_DB_SNOWFLAKE_GCS_S3: "keboola.wr-db-snowflake-gcs-s3",
@@ -35,6 +36,7 @@ const ComponentId = {
35
36
  EX_DB_MSSQL: "keboola.ex-db-mssql",
36
37
  EX_DB_MSSQL_CDATA: "keboola.ex-db-mssql-cdata",
37
38
  EX_DB_ORACLE: "keboola.ex-db-oracle",
39
+ EX_DB_ORACLE_ADW: "keboola.ex-db-oracle-adw",
38
40
  EX_DB_SNOWFLAKE: "keboola.ex-db-snowflake",
39
41
  EX_DB_NETSUITE: "keboola.ex-db-netsuite",
40
42
  EX_DB_INFORMIX: "keboola.ex-db-informix",
@@ -122,7 +124,6 @@ const ComponentId = {
122
124
  EX_MONGODB: "keboola.ex-mongodb",
123
125
  EX_SNOWFLAKE_QUERY_HISTORY: "keboola.ex-snowflake-query-history",
124
126
  EX_SNOWFLAKE_PARAMETERS: "keboola.ex-snowflake-parameters",
125
- EX_GENERIC_V2_DETAIL: "ex-generic-v2-detail",
126
127
  APAC_EX_GMAIL_ATTACHMENTS: "apac.ex-gmail-attachments",
127
128
  GENEEA_NLP_ANALYSIS_V2: "geneea.nlp-analysis-v2",
128
129
  KDS_APP_CUSTOM_PYTHON: "kds-team.app-custom-python",
@@ -141,4 +142,4 @@ Object.defineProperty(exports, "ComponentId", {
141
142
  }
142
143
  });
143
144
 
144
- //# sourceMappingURL=componentId-olp0tltf.cjs.map
145
+ //# sourceMappingURL=componentId-Ba_1Gv_A.cjs.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"componentId-Ba_1Gv_A.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_ORACLE_ADW: 'keboola.wr-db-oracle-adw',\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_ORACLE_ADW: 'keboola.ex-db-oracle-adw',\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,kBAAkB;CAClB,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,kBAAkB;CAClB,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,7 +1,7 @@
1
1
  Object.defineProperty(exports, Symbol.toStringTag, { value: "Module" });
2
2
  const require_serviceIds = require("../serviceIds-Bg1pWiPE.cjs");
3
- const require_componentId = require("../componentId-olp0tltf.cjs");
4
- const require_constants = require("../constants-Day8CU5i.cjs");
3
+ const require_componentId = require("../componentId-Ba_1Gv_A.cjs");
4
+ const require_constants = require("../constants-V9hAyPTo.cjs");
5
5
  const require_adminRoles = require("../adminRoles-DnFpO_2W.cjs");
6
6
  exports.AdminFeature = require_constants.AdminFeature;
7
7
  exports.AdminRole = require_adminRoles.AdminRole;
@@ -10,6 +10,7 @@ exports.ComponentId = require_componentId.ComponentId;
10
10
  exports.Continent = require_constants.Continent;
11
11
  exports.ManageErrorCode = require_constants.ManageErrorCode;
12
12
  exports.ProjectFeature = require_constants.ProjectFeature;
13
+ exports.ProjectMetric = require_constants.ProjectMetric;
13
14
  exports.Provider = require_constants.Provider;
14
15
  exports.STACKS = require_constants.STACKS;
15
16
  exports.ServiceId = require_serviceIds.ServiceId;
@@ -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-BNwo-zaJ.cjs";
2
+ import { a as STACKS, c as ProjectMetric, d as ServiceId, i as Provider, l as ProjectFeature, n as Continent, o as AdminFeature, r as KeboolaStack, s as StackFeature, t as URLS, u as ComponentId } from "../index-CYk7Aa8u.cjs";
3
3
  import { t as AdminRole } from "../adminRoles-BTKVwEy8.cjs";
4
4
  import { t as Backend } from "../backends-BHotIdL0.cjs";
5
- export { AdminFeature, AdminRole, Backend, ComponentId, Continent, type KeboolaStack, ManageErrorCode, ProjectFeature, Provider, STACKS, ServiceId, StackFeature, URLS };
5
+ export { AdminFeature, AdminRole, Backend, ComponentId, Continent, type KeboolaStack, ManageErrorCode, ProjectFeature, ProjectMetric, 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-CwUurckF.js";
2
+ import { a as STACKS, c as ProjectMetric, d as ServiceId, i as Provider, l as ProjectFeature, n as Continent, o as AdminFeature, r as KeboolaStack, s as StackFeature, t as URLS, u as ComponentId } from "../index-D3hWR_e4.js";
3
3
  import { t as AdminRole } from "../adminRoles-Cm513r1G.js";
4
4
  import { t as Backend } from "../backends-BHotIdL0.js";
5
- export { AdminFeature, AdminRole, Backend, ComponentId, Continent, type KeboolaStack, ManageErrorCode, ProjectFeature, Provider, STACKS, ServiceId, StackFeature, URLS };
5
+ export { AdminFeature, AdminRole, Backend, ComponentId, Continent, type KeboolaStack, ManageErrorCode, ProjectFeature, ProjectMetric, Provider, STACKS, ServiceId, StackFeature, URLS };
@@ -1,5 +1,5 @@
1
1
  import { t as ServiceId } from "../serviceIds-RAVtP4nK.js";
2
- import { t as ComponentId } from "../componentId-DZP1rBix.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";
2
+ import { t as ComponentId } from "../componentId-Ba4gsJ9O.js";
3
+ import { a as Backend, c as ProjectMetric, i as STACKS, l as ProjectFeature, n as Continent, o as AdminFeature, r as Provider, s as StackFeature, t as URLS, u as ManageErrorCode } from "../constants-HccvU5kx.js";
4
4
  import { t as AdminRole } from "../adminRoles-asa-MhDD.js";
5
- export { AdminFeature, AdminRole, Backend, ComponentId, Continent, ManageErrorCode, ProjectFeature, Provider, STACKS, ServiceId, StackFeature, URLS };
5
+ export { AdminFeature, AdminRole, Backend, ComponentId, Continent, ManageErrorCode, ProjectFeature, ProjectMetric, Provider, STACKS, ServiceId, StackFeature, URLS };
@@ -51,6 +51,13 @@ const ProjectFeature = {
51
51
  DataAppsDisabled: "data-apps-disabled",
52
52
  RowLevelSecurity: "row-level-security"
53
53
  };
54
+ // src/constants/projectMetrics.ts
55
+ /** The metrics Connection snapshots for every project; the keys of a project's `metrics`. */
56
+ const ProjectMetric = {
57
+ AdminsCount: "kbc.adminsCount",
58
+ DataSizeBytes: "storage.dataSizeBytes",
59
+ RowsCount: "storage.rowsCount"
60
+ };
54
61
  // src/constants/stackFeatures.ts
55
62
  const StackFeature = {
56
63
  SingleTenant: "single-tenant",
@@ -267,6 +274,6 @@ const URLS = {
267
274
  CLIENT_MAKE_GET_STARTED: "https://help.make.com/get-started",
268
275
  CLIENT_DEVIN_DESKTOP: "https://docs.devin.ai/desktop/getting-started"
269
276
  };
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 };
277
+ export { Backend as a, ProjectMetric as c, STACKS as i, ProjectFeature as l, Continent as n, AdminFeature as o, Provider as r, StackFeature as s, URLS as t, ManageErrorCode as u };
271
278
 
272
- //# sourceMappingURL=constants-DLPkpnGv.js.map
279
+ //# sourceMappingURL=constants-HccvU5kx.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"constants-HccvU5kx.js","names":[],"sources":["../src/constants/manageErrorCodes.ts","../src/constants/projectFeatures.ts","../src/constants/projectMetrics.ts","../src/constants/stackFeatures.ts","../src/constants/adminFeatures.ts","../src/constants/backends.ts","../src/constants/stacks.ts","../src/constants/index.ts"],"sourcesContent":["export const ManageErrorCode = {\n ProgrammaticProjectInvalidClaim: 'manage.programmaticProjects.invalidClaim',\n ProgrammaticProjectRateLimited: 'manage.programmaticProjects.rateLimited',\n ProgrammaticProjectProvisioningFailed: 'manage.programmaticProjects.provisioningFailed',\n} as const;\n\nexport type ManageErrorCode = (typeof ManageErrorCode)[keyof typeof ManageErrorCode];\n","export const ProjectFeature = {\n SandboxesPythonSpark: 'sandboxes-python-spark',\n GcpMarketplaceByodb: 'gcp-marketplace-byodb',\n GcpMarketplaceByodbEmpty: 'gcp-marketplace-byodb-empty',\n FrontendLogin: 'frontend-login',\n ComponentsMcp: 'ai-components-mcp',\n PayAsYouGo: 'pay-as-you-go',\n ShowVault: 'show-vault',\n DeprecatedGoogleDriveTranspose: 'deprecated-google-drive-transpose',\n SandboxesPersistentVolume: 'sandboxes-persistent-volume',\n WorkspaceSnowflakeDynamicBackendSize: 'workspace-snowflake-dynamic-backend-size',\n DynamicBackendJobs: 'dynamic-backend-jobs',\n HasSimplifiedComponents: 'has-simplified-components',\n FlowMigration: 'flow-migration',\n FlowMigrationBatch1: 'flow-migration-batch1',\n FlowMigrationBatch2: 'flow-migration-batch2',\n FlowMigrationBatch3: 'flow-migration-batch3',\n OracleTransformations: 'oracle-transformations',\n ExternalBuckets: 'external-buckets',\n InputMappingReadOnlyStorage: 'input-mapping-read-only-storage',\n Artifacts: 'artifacts',\n SnowflakePartnerConnect: 'snowflake-partner-connect',\n SnowflakePartnerConnectLimited: 'snowflake-partner-connect-limited',\n NewNativeTypes: 'new-native-types',\n DisableLegacyBucketPrefix: 'disable-legacy-bucket-prefix',\n SoxProtectedDefaultBranch: 'protected-default-branch',\n StorageBranches: 'storage-branches',\n DataStreams: 'data-streams',\n AiLineage: 'ai-lineage',\n AiComponentSuggestion: 'ai-component-suggestion',\n AgentChat: 'agent-chat',\n AgentChatUseKaiAgentUrl: 'agent-chat-use-kai-agent-url',\n AgentChatModelTiers: 'agent-chat-model-tiers',\n BucketExposure: 'bucket-exposure',\n WebMcp: 'webmcp',\n SnowflakeRegisterExternalSecureDataShare: 'snowflake-register-external-secure-data-share',\n DirectGrantOutputMapping: 'direct-grant-output-mapping',\n EditorWithoutReadOnlyStorage: 'editor-without-read-only-storage',\n BranchesMergeRequests: 'branches-merge-requests',\n DenyExternalDatasetInputMapping: 'deny-external-dataset-input-mapping',\n AllowSharedSnowflakeAccess: 'allow-shared-snowflake-access',\n BigqueryDefaultImView: 'bigquery-default-im-view',\n BigqueryPolicyTags: 'bigquery-policy-tags',\n DataAppsDisabled: 'data-apps-disabled',\n RowLevelSecurity: 'row-level-security',\n} as const;\n\nexport type ProjectFeature = (typeof ProjectFeature)[keyof typeof ProjectFeature];\n","/** The metrics Connection snapshots for every project; the keys of a project's `metrics`. */\nexport const ProjectMetric = {\n AdminsCount: 'kbc.adminsCount',\n DataSizeBytes: 'storage.dataSizeBytes',\n RowsCount: 'storage.rowsCount',\n} as const;\n\nexport type ProjectMetric = (typeof ProjectMetric)[keyof typeof ProjectMetric];\n","export const StackFeature = {\n SingleTenant: 'single-tenant',\n CanaryStack: 'canary-stack',\n DisableJuliaAndR: 'disable-julia-and-r',\n SamlRoles: 'saml-roles',\n NewOauthService: 'new-oauth-service-enabled',\n DataAppsEnforceAuth: 'data-apps-enforce-auth',\n AllowAi: 'allow-ai',\n UserWorkspaceDynamicBackendEnabled: 'user-workspace-dynamic-backend-enabled',\n McpEnabled: 'mcp-enabled',\n KaiEnabled: 'kai-enabled',\n AgentProvisioning: 'agent-provisioning',\n SandboxesPythonSpark: 'sandboxes-python-spark',\n} as const;\n\nexport type StackFeature = (typeof StackFeature)[keyof typeof StackFeature];\n","export const AdminFeature = {\n DisableAutosavingInFlows: 'disable-autosaving-in-flows',\n CanUpdateProjectSettings: 'can-update-project-settings',\n CanManageFeatures: 'can-manage-features',\n CanManageUsers: 'can-manage-users',\n CanManageDeletedProjects: 'can-manage-deleted-projects',\n CanManageProjectLimits: 'can-manage-project-limits',\n CanManageMaintainers: 'can-manage-maintainers',\n CanDisableProjects: 'can-disable-projects',\n CanReactivateWorkspaces: 'can-reactivate-workspaces',\n PowerUser: 'power-user',\n MuteSoundNotifications: 'mute-sound-notifications',\n} as const;\n\nexport type AdminFeature = (typeof AdminFeature)[keyof typeof AdminFeature];\n","export const Backend = {\n Snowflake: 'snowflake',\n Bigquery: 'bigquery',\n} as const;\n\nexport type Backend = (typeof Backend)[keyof typeof Backend];\n","export const Provider = {\n Aws: 'aws',\n Azure: 'azure',\n Gcp: 'gcp',\n} as const;\n\nexport type Provider = (typeof Provider)[keyof typeof Provider];\n\nexport const Continent = {\n Us: 'us',\n Europe: 'europe',\n} as const;\n\nexport type Continent = (typeof Continent)[keyof typeof Continent];\n\nexport type KeboolaStack = {\n id: string;\n host: string;\n isSingleTenant?: boolean;\n isTesting?: boolean;\n isPayg?: boolean;\n provider?: Provider;\n continent?: Continent;\n region?: string;\n isCanary?: boolean;\n};\n\nconst stacks = {\n NORTH_EUROPE_AZURE: {\n id: 'com-keboola-azure-north-europe',\n region: 'north-europe',\n host: 'connection.north-europe.azure.keboola.com',\n provider: 'azure',\n continent: 'europe',\n isPayg: true,\n },\n EU_CENTRAL_1_AWS: {\n id: 'kbc-eu-central-1',\n region: 'eu-central-1',\n host: 'connection.eu-central-1.keboola.com',\n provider: 'aws',\n continent: 'europe',\n },\n US_EAST_1_AWS: {\n id: 'kbc-us-east-1',\n region: 'us-east-1',\n host: 'connection.keboola.com',\n provider: 'aws',\n continent: 'us',\n },\n EUROPE_WEST3_GCP: {\n id: 'com-keboola-gcp-europe-west3',\n region: 'europe-west3',\n host: 'connection.europe-west3.gcp.keboola.com',\n provider: 'gcp',\n continent: 'europe',\n },\n US_EAST_4_GCP: {\n id: 'com-keboola-gcp-us-east4',\n region: 'us-east4',\n host: 'connection.us-east4.gcp.keboola.com',\n provider: 'gcp',\n continent: 'us',\n isPayg: true,\n },\n\n /* PRIVATE SINGLE TENANT STACKS\n ---------------------------- */\n HCI: {\n id: 'cloud-keboola-hci',\n host: 'connection.hci.keboola.cloud',\n isSingleTenant: true,\n },\n CSAS_PROD: {\n id: 'cloud-keboola-cs',\n host: 'connection.cs.keboola.cloud',\n isSingleTenant: true,\n },\n CSAS_TEST: {\n id: 'cloud-keboola-cs-test',\n host: 'connection.cs-test.keboola.cloud',\n isSingleTenant: true,\n },\n INNOGY: {\n id: 'cloud-keboola-innogy-hub',\n host: 'connection.innogy-hub.keboola.cloud',\n isSingleTenant: true,\n },\n GROUPON: {\n id: 'cloud-keboola-groupon',\n host: 'connection.groupon.keboola.cloud',\n isSingleTenant: true,\n },\n CREDIT_INFO: {\n id: 'cloud-keboola-creditinfo',\n host: 'connection.creditinfo.keboola.cloud',\n isSingleTenant: true,\n },\n COATES: {\n id: 'cloud-keboola-coates',\n host: 'connection.coates.keboola.cloud',\n isSingleTenant: true,\n },\n SLSP: {\n id: 'cloud-keboola-slsp',\n host: 'connection.slsp.keboola.cloud',\n isSingleTenant: true,\n },\n HCKZ: {\n id: 'cloud-keboola-hckz',\n host: 'connection.hckz.keboola.cloud',\n isSingleTenant: true,\n },\n PASHA: {\n id: 'cloud-keboola-pasha',\n host: 'connection.pasha.keboola.cloud',\n isSingleTenant: true,\n },\n RBI: {\n id: 'cloud-keboola-rbi',\n host: 'connection.rbi.keboola.cloud',\n isSingleTenant: true,\n },\n NAH: {\n id: 'cloud-keboola-nah',\n host: 'connection.nah.keboola.cloud',\n isSingleTenant: true,\n provider: 'azure',\n continent: 'us',\n },\n\n /* DEV STACKS\n ---------------------------- */\n DEV_US_CENTRAL_1_GCP: {\n id: 'dev-keboola-gcp-us-central1',\n region: 'us-central1',\n host: 'connection.us-central1.gcp.keboola.dev',\n provider: 'gcp',\n continent: 'us',\n isTesting: true,\n },\n DEV_EU_WEST_1_AWS: {\n id: 'dev-keboola-aws-eu-west-1',\n region: 'eu-west-1',\n host: 'connection.eu-west-1.aws.keboola.dev',\n provider: 'aws',\n continent: 'europe',\n isTesting: true,\n },\n DEV_US_EAST_1_AWS_E2E: {\n id: 'dev-keboola-aws-us-east-1-e2e',\n region: 'us-east-1',\n host: 'connection.e2e.us-east-1.aws.keboola.dev',\n provider: 'aws',\n continent: 'us',\n isTesting: true,\n },\n DEV_US_EAST_2_AZURE: {\n id: 'kbc-testing-azure-east-us-2',\n region: 'east-us-2',\n host: 'connection.east-us-2.azure.keboola-testing.com',\n provider: 'azure',\n continent: 'us',\n isTesting: true,\n },\n DEV_KEBOOLA_CANARY_ORION: {\n id: 'dev-keboola-canary-orion',\n region: 'europe-west3',\n host: 'connection.canary-orion.keboola.dev',\n provider: 'gcp',\n continent: 'europe',\n isCanary: true,\n },\n} satisfies Record<string, Readonly<KeboolaStack>>;\n\n/**\n * Every stack the platform knows, keyed by name.\n *\n * - The key set is literal, so a name that is not in the object is a compile error at the call site\n * rather than an `undefined` to fall back from.\n * - The value type stays the uniform `KeboolaStack`, so `stack.isCanary` reads on any entry, not\n * only on the ones that carry the flag.\n */\nexport const STACKS: Record<keyof typeof stacks, Readonly<KeboolaStack>> = stacks;\n","export { ComponentId } from './componentId';\nexport { ManageErrorCode } from './manageErrorCodes';\nexport { ProjectFeature } from './projectFeatures';\nexport { ProjectMetric } from './projectMetrics';\nexport { StackFeature } from './stackFeatures';\nexport { AdminFeature } from './adminFeatures';\nexport { Backend } from './backends';\nexport { AdminRole } from './adminRoles';\nexport { ServiceId } from './serviceIds';\nexport { Continent, Provider, STACKS } from './stacks';\nexport type { KeboolaStack } from './stacks';\n\nexport const URLS = {\n USER_DOCUMENTATION: 'https://help.keboola.com',\n COMPONENTS: 'https://components.keboola.com',\n DEVELOPERS_DOCUMENTATION: 'https://developers.keboola.com',\n ACADEMY: 'https://academy.keboola.com',\n SALES_CONTACT_FORM: 'https://keboola.com/contact',\n SNOWFLAKE: 'https://www.snowflake.com',\n SNOWFLAKE_DOCS: 'https://docs.snowflake.com',\n MCP: 'https://www.keboola.com/mcp',\n CLI: 'https://www.keboola.com/cli',\n NODE_JS: 'https://nodejs.org/en',\n CLAUDE_CONNECTORS: 'https://claude.ai/customize/connectors',\n // Vendor \"how do I get this client\" pages linked from the connect surfaces.\n CLIENT_CLAUDE_CODE_QUICKSTART: 'https://code.claude.com/docs/en/quickstart',\n CLIENT_CLAUDE_AI: 'https://claude.ai',\n CLIENT_CLAUDE_DESKTOP_DOWNLOAD: 'https://claude.com/download',\n CLIENT_CURSOR_QUICKSTART: 'https://cursor.com/docs/get-started/quickstart',\n CLIENT_VS_CODE_SETUP: 'https://code.visualstudio.com/docs/setup/setup-overview',\n CLIENT_CODEX_QUICKSTART: 'https://developers.openai.com/codex/cli',\n CLIENT_CHATGPT_DOWNLOAD: 'https://chatgpt.com/download',\n CLIENT_MAKE_GET_STARTED: 'https://help.make.com/get-started',\n CLIENT_DEVIN_DESKTOP: 'https://docs.devin.ai/desktop/getting-started',\n} as const;\n"],"mappings":";AAAA,MAAa,kBAAkB;CAC7B,iCAAiC;CACjC,gCAAgC;CAChC,uCAAuC;AACzC;;ACJA,MAAa,iBAAiB;CAC5B,sBAAsB;CACtB,qBAAqB;CACrB,0BAA0B;CAC1B,eAAe;CACf,eAAe;CACf,YAAY;CACZ,WAAW;CACX,gCAAgC;CAChC,2BAA2B;CAC3B,sCAAsC;CACtC,oBAAoB;CACpB,yBAAyB;CACzB,eAAe;CACf,qBAAqB;CACrB,qBAAqB;CACrB,qBAAqB;CACrB,uBAAuB;CACvB,iBAAiB;CACjB,6BAA6B;CAC7B,WAAW;CACX,yBAAyB;CACzB,gCAAgC;CAChC,gBAAgB;CAChB,2BAA2B;CAC3B,2BAA2B;CAC3B,iBAAiB;CACjB,aAAa;CACb,WAAW;CACX,uBAAuB;CACvB,WAAW;CACX,yBAAyB;CACzB,qBAAqB;CACrB,gBAAgB;CAChB,QAAQ;CACR,0CAA0C;CAC1C,0BAA0B;CAC1B,8BAA8B;CAC9B,uBAAuB;CACvB,iCAAiC;CACjC,4BAA4B;CAC5B,uBAAuB;CACvB,oBAAoB;CACpB,kBAAkB;CAClB,kBAAkB;AACpB;;;AC5CA,MAAa,gBAAgB;CAC3B,aAAa;CACb,eAAe;CACf,WAAW;AACb;;ACLA,MAAa,eAAe;CAC1B,cAAc;CACd,aAAa;CACb,kBAAkB;CAClB,WAAW;CACX,iBAAiB;CACjB,qBAAqB;CACrB,SAAS;CACT,oCAAoC;CACpC,YAAY;CACZ,YAAY;CACZ,mBAAmB;CACnB,sBAAsB;AACxB;;ACbA,MAAa,eAAe;CAC1B,0BAA0B;CAC1B,0BAA0B;CAC1B,mBAAmB;CACnB,gBAAgB;CAChB,0BAA0B;CAC1B,wBAAwB;CACxB,sBAAsB;CACtB,oBAAoB;CACpB,yBAAyB;CACzB,WAAW;CACX,wBAAwB;AAC1B;;ACZA,MAAa,UAAU;CACrB,WAAW;CACX,UAAU;AACZ;;ACHA,MAAa,WAAW;CACtB,KAAK;CACL,OAAO;CACP,KAAK;AACP;AAIA,MAAa,YAAY;CACvB,IAAI;CACJ,QAAQ;AACV;;;;;;;;;AA4KA,MAAa,SAA8D;CA3JzE,oBAAoB;EAClB,IAAI;EACJ,QAAQ;EACR,MAAM;EACN,UAAU;EACV,WAAW;EACX,QAAQ;CACV;CACA,kBAAkB;EAChB,IAAI;EACJ,QAAQ;EACR,MAAM;EACN,UAAU;EACV,WAAW;CACb;CACA,eAAe;EACb,IAAI;EACJ,QAAQ;EACR,MAAM;EACN,UAAU;EACV,WAAW;CACb;CACA,kBAAkB;EAChB,IAAI;EACJ,QAAQ;EACR,MAAM;EACN,UAAU;EACV,WAAW;CACb;CACA,eAAe;EACb,IAAI;EACJ,QAAQ;EACR,MAAM;EACN,UAAU;EACV,WAAW;EACX,QAAQ;CACV;CAIA,KAAK;EACH,IAAI;EACJ,MAAM;EACN,gBAAgB;CAClB;CACA,WAAW;EACT,IAAI;EACJ,MAAM;EACN,gBAAgB;CAClB;CACA,WAAW;EACT,IAAI;EACJ,MAAM;EACN,gBAAgB;CAClB;CACA,QAAQ;EACN,IAAI;EACJ,MAAM;EACN,gBAAgB;CAClB;CACA,SAAS;EACP,IAAI;EACJ,MAAM;EACN,gBAAgB;CAClB;CACA,aAAa;EACX,IAAI;EACJ,MAAM;EACN,gBAAgB;CAClB;CACA,QAAQ;EACN,IAAI;EACJ,MAAM;EACN,gBAAgB;CAClB;CACA,MAAM;EACJ,IAAI;EACJ,MAAM;EACN,gBAAgB;CAClB;CACA,MAAM;EACJ,IAAI;EACJ,MAAM;EACN,gBAAgB;CAClB;CACA,OAAO;EACL,IAAI;EACJ,MAAM;EACN,gBAAgB;CAClB;CACA,KAAK;EACH,IAAI;EACJ,MAAM;EACN,gBAAgB;CAClB;CACA,KAAK;EACH,IAAI;EACJ,MAAM;EACN,gBAAgB;EAChB,UAAU;EACV,WAAW;CACb;CAIA,sBAAsB;EACpB,IAAI;EACJ,QAAQ;EACR,MAAM;EACN,UAAU;EACV,WAAW;EACX,WAAW;CACb;CACA,mBAAmB;EACjB,IAAI;EACJ,QAAQ;EACR,MAAM;EACN,UAAU;EACV,WAAW;EACX,WAAW;CACb;CACA,uBAAuB;EACrB,IAAI;EACJ,QAAQ;EACR,MAAM;EACN,UAAU;EACV,WAAW;EACX,WAAW;CACb;CACA,qBAAqB;EACnB,IAAI;EACJ,QAAQ;EACR,MAAM;EACN,UAAU;EACV,WAAW;EACX,WAAW;CACb;CACA,0BAA0B;EACxB,IAAI;EACJ,QAAQ;EACR,MAAM;EACN,UAAU;EACV,WAAW;EACX,UAAU;CACZ;AAWyE;;AC3K3E,MAAa,OAAO;CAClB,oBAAoB;CACpB,YAAY;CACZ,0BAA0B;CAC1B,SAAS;CACT,oBAAoB;CACpB,WAAW;CACX,gBAAgB;CAChB,KAAK;CACL,KAAK;CACL,SAAS;CACT,mBAAmB;CAEnB,+BAA+B;CAC/B,kBAAkB;CAClB,gCAAgC;CAChC,0BAA0B;CAC1B,sBAAsB;CACtB,yBAAyB;CACzB,yBAAyB;CACzB,yBAAyB;CACzB,sBAAsB;AACxB"}
@@ -51,6 +51,13 @@ const ProjectFeature = {
51
51
  DataAppsDisabled: "data-apps-disabled",
52
52
  RowLevelSecurity: "row-level-security"
53
53
  };
54
+ // src/constants/projectMetrics.ts
55
+ /** The metrics Connection snapshots for every project; the keys of a project's `metrics`. */
56
+ const ProjectMetric = {
57
+ AdminsCount: "kbc.adminsCount",
58
+ DataSizeBytes: "storage.dataSizeBytes",
59
+ RowsCount: "storage.rowsCount"
60
+ };
54
61
  // src/constants/stackFeatures.ts
55
62
  const StackFeature = {
56
63
  SingleTenant: "single-tenant",
@@ -297,6 +304,12 @@ Object.defineProperty(exports, "ProjectFeature", {
297
304
  return ProjectFeature;
298
305
  }
299
306
  });
307
+ Object.defineProperty(exports, "ProjectMetric", {
308
+ enumerable: true,
309
+ get: function() {
310
+ return ProjectMetric;
311
+ }
312
+ });
300
313
  Object.defineProperty(exports, "Provider", {
301
314
  enumerable: true,
302
315
  get: function() {
@@ -322,4 +335,4 @@ Object.defineProperty(exports, "URLS", {
322
335
  }
323
336
  });
324
337
 
325
- //# sourceMappingURL=constants-Day8CU5i.cjs.map
338
+ //# sourceMappingURL=constants-V9hAyPTo.cjs.map