@cube-dev/platform-client 0.19.0 → 0.20.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
package/dist/schema.d.ts CHANGED
@@ -427,7 +427,7 @@ export interface paths {
427
427
  *
428
428
  * Pass `filters`, `timeGrains` and `memberSwitchers` to render the board with specific control values, exactly as a scheduled notification does; omit them to render its saved defaults.
429
429
  *
430
- * Pass `layout: print` with `format: pdf` for the paginated A4 document the dashboard's "Print version" menu item produces — one column, every table row, the filter state as a summary line — instead of the default `screenshot` of the board. `print` with `format: png` returns `400`.
430
+ * Pass `layout: print` with `format: pdf` for the paginated A4 document the dashboard's "Download print version" menu item produces — one column, every table row, the filter state as a summary line — instead of the default `screenshot` of the board. `print` with `format: png` returns `400`.
431
431
  *
432
432
  * By default the dashboard renders under the calling user's own security context, so the file shows what that user would see. Requires **manage** access to the dashboard's workbook — the same permission the console's own "Download as PNG / PDF" actions require, because a whole-dashboard render is a bulk data export.
433
433
  *
@@ -1100,6 +1100,84 @@ export interface paths {
1100
1100
  patch?: never;
1101
1101
  trace?: never;
1102
1102
  };
1103
+ "/api/v1/deployments/{deploymentId}/ossie-conversions": {
1104
+ parameters: {
1105
+ query?: never;
1106
+ header?: never;
1107
+ path?: never;
1108
+ cookie?: never;
1109
+ };
1110
+ get?: never;
1111
+ put?: never;
1112
+ /**
1113
+ * Start an Apache Ossie conversion
1114
+ * @description Converts between a Cube data model and an [Apache Ossie (Open Semantic Interchange)](https://github.com/apache/ossie) model, and returns polling URLs immediately. An export converts the YAML data model of the deployment's latest successful build, or uploaded YAML files, to one Ossie model; an import converts an uploaded Ossie model to Cube data model files. Neither changes the deployment. Only static YAML model files are converted; JavaScript models and Jinja-templated files are skipped. Uploads are limited to 512 files of at most 2 MiB each and 20 MiB in total. Requests and results are kept for at most one day. Requires `SchemaRead` or `SchemaUpdate` access. This is currently in preview — reach out to the Cube support team to activate it for your account.
1115
+ */
1116
+ post: operations["OssieConversionPublicController.startConversion"];
1117
+ delete?: never;
1118
+ options?: never;
1119
+ head?: never;
1120
+ patch?: never;
1121
+ trace?: never;
1122
+ };
1123
+ "/api/v1/deployments/{deploymentId}/ossie-conversions/{conversionId}": {
1124
+ parameters: {
1125
+ query?: never;
1126
+ header?: never;
1127
+ path?: never;
1128
+ cookie?: never;
1129
+ };
1130
+ /** Get an Apache Ossie conversion status */
1131
+ get: operations["OssieConversionPublicController.conversionStatus"];
1132
+ put?: never;
1133
+ post?: never;
1134
+ /** Cancel an Apache Ossie conversion */
1135
+ delete: operations["OssieConversionPublicController.cancelConversion"];
1136
+ options?: never;
1137
+ head?: never;
1138
+ patch?: never;
1139
+ trace?: never;
1140
+ };
1141
+ "/api/v1/deployments/{deploymentId}/ossie-conversions/{conversionId}/files": {
1142
+ parameters: {
1143
+ query?: never;
1144
+ header?: never;
1145
+ path?: never;
1146
+ cookie?: never;
1147
+ };
1148
+ /**
1149
+ * Get the files of an Apache Ossie conversion
1150
+ * @description Returns `ossie.yaml` for an export, or the generated Cube data model files for an import; empty when the conversion failed. Returns 409 while the conversion is still running or if it ended without a result.
1151
+ */
1152
+ get: operations["OssieConversionPublicController.conversionFiles"];
1153
+ put?: never;
1154
+ post?: never;
1155
+ delete?: never;
1156
+ options?: never;
1157
+ head?: never;
1158
+ patch?: never;
1159
+ trace?: never;
1160
+ };
1161
+ "/api/v1/deployments/{deploymentId}/ossie-conversions/{conversionId}/result": {
1162
+ parameters: {
1163
+ query?: never;
1164
+ header?: never;
1165
+ path?: never;
1166
+ cookie?: never;
1167
+ };
1168
+ /**
1169
+ * Get an Apache Ossie conversion result
1170
+ * @description Returns the outcome, counts, issues and converter versions of a completed conversion. Returns 409 while the conversion is still running or if it ended without a result. Read the converted files from `/files`.
1171
+ */
1172
+ get: operations["OssieConversionPublicController.conversionResult"];
1173
+ put?: never;
1174
+ post?: never;
1175
+ delete?: never;
1176
+ options?: never;
1177
+ head?: never;
1178
+ patch?: never;
1179
+ trace?: never;
1180
+ };
1103
1181
  "/api/v1/deployments/{deploymentId}/pods": {
1104
1182
  parameters: {
1105
1183
  query?: never;
@@ -1329,7 +1407,7 @@ export interface paths {
1329
1407
  *
1330
1408
  * `source` is **create-only**: it is recorded when the report is first created and ignored on subsequent updates (it describes where the report originated, not its current definition).
1331
1409
  *
1332
- * Access: updating requires **edit** access to the existing report; creating requires the same access as `POST /reports`.
1410
+ * Access: updating requires **edit** access to the existing report; moving it to a different parent requires **manage** access to the report and **edit** access to the destination. Creating requires the same access as `POST /reports`.
1333
1411
  */
1334
1412
  put: operations["ReportsPublicController.upsertReportByPublicId"];
1335
1413
  post?: never;
@@ -1356,7 +1434,7 @@ export interface paths {
1356
1434
  *
1357
1435
  * The id you assign must be one you chose (any distinct 12-character `[0-9A-Za-z]` id). The auto-generated placeholder id shown for a report that has no stable id yet cannot be assigned — it is not unique — and is rejected with `400`.
1358
1436
  *
1359
- * Requires **edit** access to the report.
1437
+ * Requires **edit** access to the report. Moving it to a different parent requires **manage** access to the report and **edit** access to the destination.
1360
1438
  */
1361
1439
  put: operations["ReportsPublicController.updateReport"];
1362
1440
  post?: never;
@@ -1794,7 +1872,7 @@ export interface paths {
1794
1872
  *
1795
1873
  * If a workbook with this slug exists in the deployment, it is updated: only the fields you send are changed, and `meta` is merged into the existing metadata (a `meta.dashboardDraft` is validated like everywhere else). Otherwise a new workbook is created with this slug. The slug is normalized (trimmed, lowercased) before matching. Re-applying the same request is a no-op.
1796
1874
  *
1797
- * Access: updating requires **edit** access to the workbook holding the slug (requests that include `folderId` require **manage** access, plus **edit** access to the destination folder); creating requires the same access as `POST /workbooks` (AI BI User role or higher).
1875
+ * Access: updating requires **edit** access to the workbook holding the slug (requests that include `folderId` require **manage** access, plus **edit** access to the destination folder); creating requires the same access as `POST /workbooks` (AI BI User role or higher, plus **edit** access to a supplied destination folder).
1798
1876
  *
1799
1877
  * Whether this request creates or updates is decided — and access-checked — before it is applied. If another writer changes that in between (creates or deletes the workbook holding this slug), the request is rejected with `409` and `code: "upsert_branch_changed"` rather than applied under the wrong permission check. This is **transient: retry the request**. It only happens when two writers target the same slug concurrently — for example two pipeline runs applying the same bundle at once, where one creates the workbook and the other must then retry into the update path.
1800
1878
  *
@@ -2075,7 +2153,7 @@ export interface paths {
2075
2153
  * Supported query parameters:
2076
2154
  * - `folderId` — list the contents of this folder (omit for the root).
2077
2155
  * - `types` — restrict the results to one or more item types (`FOLDER`, `WORKBOOK`, `REPORT`). Repeat the parameter to pass several.
2078
- * - `search` — case-insensitive substring match on item names; searches across all folders, not just the current level.
2156
+ * - `search` — case-insensitive substring match on item names; searches across all folders, not just the current level. A workbook also matches when a report inside it does, so a search finds a dashboard by the name of a chart on it. Use this to find an item by name instead of walking folders.
2079
2157
  * - `orderByField` / `orderByDirection` — sort the non-folder items (e.g. by `name`, `updated_at`, `created_at`, or `viewer_last_viewed_at`).
2080
2158
  * - `first` / `after` — cursor-based pagination.
2081
2159
  *
@@ -2164,19 +2242,7 @@ export interface paths {
2164
2242
  put?: never;
2165
2243
  /**
2166
2244
  * Move a workspace item
2167
- * @description Move any workspace item — a workbook, report, or folder — into a folder, in one unified endpoint. Returns the moved item.
2168
- *
2169
- * Request body:
2170
- * - `type` — the item type: `WORKBOOK`, `REPORT`, or `FOLDER`.
2171
- * - `id` — the id of the item to move.
2172
- * - `folderId` — the destination folder id, or `null` to move the item to the workspace root. For a folder, this becomes its new parent.
2173
- *
2174
- * Access requirements depend on the item type and mirror the per-type rules:
2175
- * - **Workbook** — manage access to the workbook, plus edit access to the destination folder when moving into one.
2176
- * - **Report** — edit access to the report (with the report-manage permission).
2177
- * - **Folder** — manage access to the folder being moved, plus manage or edit access to the destination parent folder.
2178
- *
2179
- * Moving a folder into one of its own descendants, or exceeding the maximum folder depth, is rejected with `400`. Returns `404` if the item does not exist or belongs to a different deployment.
2245
+ * @description Move a workbook, report, or folder to folderId (null for root). Source and destination permissions are checked, and a report's destination must be in the route deployment.
2180
2246
  */
2181
2247
  post: operations["WorkspacePublicController.moveWorkspaceObject"];
2182
2248
  delete?: never;
@@ -3089,6 +3155,160 @@ export interface paths {
3089
3155
  patch?: never;
3090
3156
  trace?: never;
3091
3157
  };
3158
+ "/api/v1/roles/": {
3159
+ parameters: {
3160
+ query?: never;
3161
+ header?: never;
3162
+ path?: never;
3163
+ cookie?: never;
3164
+ };
3165
+ /**
3166
+ * List custom roles
3167
+ * @description **🔒 Admin only.** Requires administrator privileges — the authenticated principal (API key, embed JWT, or any bearer token) must belong to a user with the admin role.
3168
+ *
3169
+ * Lists the tenant's custom roles, newest first, cursor-paginated via `first`/`after`. Cube's built-in roles are not included — they are not tenant data.
3170
+ *
3171
+ * An API key scoped to specific deployments answers `403` here.
3172
+ */
3173
+ get: operations["RolesPublicController.getRoles"];
3174
+ put?: never;
3175
+ /**
3176
+ * Create a custom role
3177
+ * @description **🔒 Admin only.** Requires administrator privileges — the authenticated principal (API key, embed JWT, or any bearer token) must belong to a user with the admin role.
3178
+ *
3179
+ * Creates a role and returns it with the `id` to assign it by. Role names are unique, so recreating one that already exists answers `409`.
3180
+ *
3181
+ * To scope the role to specific deployments, send a `Deployment` policy whose `resources` are the deployment ids as strings. A role usually also needs a `Global` policy naming the holder's license tier — `AIBIView`, `AIBIExplore` or `AIBIDevelop` — which is what the console calls the role's Base Role. Pick a tier that covers the deployment actions you grant: the console forces Developer (`AIBIDevelop`) for every deployment action except `DeploymentRead`, `DeploymentAgentRead`, `DownloadData` and `ChatHistoryRead`, so a lower tier here produces a role its role builder would not have let you save:
3182
+ *
3183
+ * ```json
3184
+ * {
3185
+ * "name": "team-analytics",
3186
+ * "policies": [
3187
+ * {
3188
+ * "resourceType": "Global",
3189
+ * "actions": ["AIBIDevelop"],
3190
+ * "resources": ["All"]
3191
+ * },
3192
+ * {
3193
+ * "resourceType": "Deployment",
3194
+ * "actions": ["DeploymentRead", "SchemaRead", "SqlRunnerRead"],
3195
+ * "resources": ["1734"]
3196
+ * }
3197
+ * ]
3198
+ * }
3199
+ * ```
3200
+ *
3201
+ * The tier is **not** required and is **not** derived from the deployment actions: a role sent without one is accepted and simply confers no tier, so a user holding only that role gets the deployment grants and still cannot use the product. That is deliberate — a user holds the union of their roles, so a role that only adds a deployment scope beside another role carrying the tier is valid — but it means nothing warns you. Omit the `Global` policy only when some other role supplies the tier. Note the console does require one on every role it writes, so a role created here without a tier shows an unset Base Role when opened in the role builder.
3202
+ *
3203
+ * Use `["All"]` as `resources` to cover every deployment, and `"All"` as the single action for full access to the deployments in scope. A policy is rejected when it grants no action, when it names no resource, or when a `Deployment` resource is not a deployment id — pass the numeric id returned by POST /build/api/v1/deployments, not a slug or a name. Ids are checked for shape, not existence, so an id whose deployment was since deleted is kept and simply grants nothing.
3204
+ *
3205
+ * An API key scoped to specific deployments answers `403` here.
3206
+ */
3207
+ post: operations["RolesPublicController.createRole"];
3208
+ delete?: never;
3209
+ options?: never;
3210
+ head?: never;
3211
+ patch?: never;
3212
+ trace?: never;
3213
+ };
3214
+ "/api/v1/roles/{roleId}": {
3215
+ parameters: {
3216
+ query?: never;
3217
+ header?: never;
3218
+ path?: never;
3219
+ cookie?: never;
3220
+ };
3221
+ /**
3222
+ * Get a custom role
3223
+ * @description **🔒 Admin only.** Requires administrator privileges — the authenticated principal (API key, embed JWT, or any bearer token) must belong to a user with the admin role.
3224
+ *
3225
+ * Returns one custom role by id, with its policies.
3226
+ *
3227
+ * An API key scoped to specific deployments answers `403` here.
3228
+ */
3229
+ get: operations["RolesPublicController.getRole"];
3230
+ /**
3231
+ * Update a custom role
3232
+ * @description **🔒 Admin only.** Requires administrator privileges — the authenticated principal (API key, embed JWT, or any bearer token) must belong to a user with the admin role.
3233
+ *
3234
+ * Updates the fields present in the body and leaves the rest alone. Sending `policies` replaces the role's policies outright, so read the role first if you mean to add one rather than start over. Renaming to a name another role already holds answers `409`. Built-in roles cannot be updated.
3235
+ *
3236
+ * An API key scoped to specific deployments answers `403` here.
3237
+ */
3238
+ put: operations["RolesPublicController.updateRole"];
3239
+ post?: never;
3240
+ /**
3241
+ * Delete a custom role
3242
+ * @description **🔒 Admin only.** Requires administrator privileges — the authenticated principal (API key, embed JWT, or any bearer token) must belong to a user with the admin role.
3243
+ *
3244
+ * Deletes the role and every assignment of it, from users and from groups. Built-in roles cannot be deleted.
3245
+ *
3246
+ * An API key scoped to specific deployments answers `403` here.
3247
+ */
3248
+ delete: operations["RolesPublicController.deleteRole"];
3249
+ options?: never;
3250
+ head?: never;
3251
+ patch?: never;
3252
+ trace?: never;
3253
+ };
3254
+ "/api/v1/roles/{roleId}/users": {
3255
+ parameters: {
3256
+ query?: never;
3257
+ header?: never;
3258
+ path?: never;
3259
+ cookie?: never;
3260
+ };
3261
+ /**
3262
+ * List the users holding a role
3263
+ * @description **🔒 Admin only.** Requires administrator privileges — the authenticated principal (API key, embed JWT, or any bearer token) must belong to a user with the admin role.
3264
+ *
3265
+ * Lists every user holding the role, directly or through a group, newest first, cursor-paginated via `first`/`after`. Accepts built-in role ids. Each user carries every role they hold, so a combination such as "holds Explorer but not my custom role" is one pass over these pages. Deactivated users are included.
3266
+ *
3267
+ * An API key scoped to specific deployments answers `403` here.
3268
+ */
3269
+ get: operations["RolesPublicController.getRoleHolders"];
3270
+ put?: never;
3271
+ post?: never;
3272
+ delete?: never;
3273
+ options?: never;
3274
+ head?: never;
3275
+ patch?: never;
3276
+ trace?: never;
3277
+ };
3278
+ "/api/v1/roles/{roleId}/users/{userId}": {
3279
+ parameters: {
3280
+ query?: never;
3281
+ header?: never;
3282
+ path?: never;
3283
+ cookie?: never;
3284
+ };
3285
+ get?: never;
3286
+ /**
3287
+ * Assign a role to a user
3288
+ * @description **🔒 Admin only.** Requires administrator privileges — the authenticated principal (API key, embed JWT, or any bearer token) must belong to a user with the admin role.
3289
+ *
3290
+ * Gives the user everything the role grants. Idempotent — assigning a role the user already holds changes nothing. Returns `404` if either the user or the role is unknown.
3291
+ *
3292
+ * Unlike the other endpoints here, this one is not limited to your custom roles: it also accepts the id of a built-in role, and assigning one grants everything that role confers. **Cube's Admin role is the exception and cannot be granted this way** — it is not among the built-in roles this endpoint resolves, so its id returns `404`. No call to this endpoint can make a user an account-wide administrator.
3293
+ *
3294
+ * An API key scoped to specific deployments answers `403` here.
3295
+ */
3296
+ put: operations["RolesPublicController.assignRoleToUser"];
3297
+ post?: never;
3298
+ /**
3299
+ * Remove a role from a user
3300
+ * @description **🔒 Admin only.** Requires administrator privileges — the authenticated principal (API key, embed JWT, or any bearer token) must belong to a user with the admin role.
3301
+ *
3302
+ * Takes the role away from the user. Idempotent — removing a role the user does not hold changes nothing. Returns `404` if the user is unknown.
3303
+ *
3304
+ * An API key scoped to specific deployments answers `403` here.
3305
+ */
3306
+ delete: operations["RolesPublicController.removeRoleFromUser"];
3307
+ options?: never;
3308
+ head?: never;
3309
+ patch?: never;
3310
+ trace?: never;
3311
+ };
3092
3312
  "/api/v1/spec": {
3093
3313
  parameters: {
3094
3314
  query?: never;
@@ -3351,6 +3571,8 @@ export interface paths {
3351
3571
  * - A tenant must always keep at least one active, direct admin, so the action that would remove the last one fails with `403` while the rest of the batch still applies.
3352
3572
  *
3353
3573
  * Reapplying an action a user is already in (deactivating a deactivated user) succeeds as a no-op.
3574
+ *
3575
+ * An API key scoped to specific deployments answers `403` here.
3354
3576
  */
3355
3577
  post: operations["UsersAdminPublicController.bulkUserAction"];
3356
3578
  delete?: never;
@@ -3408,7 +3630,7 @@ export interface paths {
3408
3630
  head?: never;
3409
3631
  /**
3410
3632
  * Update my settings
3411
- * @description Merge a partial patch into the authenticated user's own settings. Omitted fields are left as they are; `sheets` merges field-by-field, and an explicit `null` clears it.
3633
+ * @description Merge a partial patch into the authenticated user's own settings. Omitted fields are left as they are; `sheets` and `memory` merge field-by-field, and an explicit `null` clears one.
3412
3634
  */
3413
3635
  patch: operations["UsersPublicController.updateMySettings"];
3414
3636
  trace?: never;
@@ -3431,6 +3653,30 @@ export interface paths {
3431
3653
  patch?: never;
3432
3654
  trace?: never;
3433
3655
  };
3656
+ "/api/v1/users/{id}/roles": {
3657
+ parameters: {
3658
+ query?: never;
3659
+ header?: never;
3660
+ path?: never;
3661
+ cookie?: never;
3662
+ };
3663
+ /**
3664
+ * List a user's roles
3665
+ * @description **🔒 Admin only.** Requires administrator privileges — the authenticated principal (API key, embed JWT, or any bearer token) must belong to a user with the admin role.
3666
+ *
3667
+ * Every role the user holds, built-in and custom, whether assigned directly or through a group. Only a direct assignment can be removed with `DELETE /api/v1/roles/{roleId}/users/{userId}`.
3668
+ *
3669
+ * An API key scoped to specific deployments answers `403` here.
3670
+ */
3671
+ get: operations["UsersAdminPublicController.getUserRoles"];
3672
+ put?: never;
3673
+ post?: never;
3674
+ delete?: never;
3675
+ options?: never;
3676
+ head?: never;
3677
+ patch?: never;
3678
+ trace?: never;
3679
+ };
3434
3680
  "/build/api/v1/deployments/": {
3435
3681
  parameters: {
3436
3682
  query?: never;
@@ -3744,6 +3990,7 @@ export interface components {
3744
3990
  graphqlToken?: string | null;
3745
3991
  hasAgentAccess?: any | null;
3746
3992
  mcpToken?: string | null;
3993
+ memoryGenerationEnabled?: boolean | null;
3747
3994
  resolvedTimezone?: string | null;
3748
3995
  scheduledTaskPolicies?: components["schemas"]["ChatThreadPolicy"][] | null;
3749
3996
  timezoneSettings?: components["schemas"]["TimezoneSettings"] | null;
@@ -3770,6 +4017,7 @@ export interface components {
3770
4017
  createdAt: string;
3771
4018
  dedicatedAiEngineerRegion?: string | null;
3772
4019
  deploymentId?: number | null;
4020
+ displayName?: string | null;
3773
4021
  embeddingLlm?: components["schemas"]["AgentLlm"] | null;
3774
4022
  embeddingUrl?: string | null;
3775
4023
  id: number;
@@ -4244,7 +4492,7 @@ export interface components {
4244
4492
  timezone?: string | null;
4245
4493
  };
4246
4494
  /** @enum {string} */
4247
- CreateNotificationInputNotificationFormat: "png" | "pdf";
4495
+ CreateNotificationInputNotificationFormat: "png" | "pdf" | "pdf_print";
4248
4496
  /** @enum {string} */
4249
4497
  CreateNotificationInputScheduleType: "HOURLY" | "DAILY" | "WEEKLY" | "MONTHLY" | "CUSTOM";
4250
4498
  CreateOAuthIntegrationInput: {
@@ -4319,6 +4567,8 @@ export interface components {
4319
4567
  CreateScheduledTaskInput: {
4320
4568
  /** @description The agent that runs the task. Omit for the deployment default. */
4321
4569
  agentId?: number | null;
4570
+ /** @description Notify only when: on each fire the measure is read once, before the agent runs, and the agent runs only when the condition starts to hold, with the crossing facts at the top of its thread; it runs again only after the condition has stopped holding. A `change` or `anomaly` rule needs `timeDimension` and `granularity`. The creator gets an inbox row only with `notificationEnabled: true`. Omit to run the agent on every fire. */
4571
+ condition?: components["schemas"]["ScheduledTaskCondition"] | null;
4322
4572
  /** @description Standard 5-field cron (minute hour day-of-month month day-of-week), e.g. `0 9 * * 1-5` for 9:00 on weekdays. A task runs at most once an hour, so the minute field is a single number. Null or omitted makes the task Manual: it runs only when started with `POST /scheduled-tasks/{taskId}/run`. */
4323
4573
  cronExpression?: string | null;
4324
4574
  description?: string | null;
@@ -4551,17 +4801,17 @@ export interface components {
4551
4801
  endInclusive?: any | null;
4552
4802
  /** @description Dimension path, e.g. "Orders.status" */
4553
4803
  member: string;
4554
- /** @description Filter operator (defaults to "equals") */
4804
+ /** @description Filter operator (defaults to "equals"; with an empty value, omitting it clears the control instead) */
4555
4805
  operator?: components["schemas"]["DashboardFilterInputOperator"] | null;
4556
4806
  /** @description For between filters: whether the start bound is inclusive */
4557
4807
  startInclusive?: any | null;
4558
- /** @description Filter value. Omit for is_null / is_not_null / is_empty / is_not_empty; provide a 2-element [start, end] array for between. */
4808
+ /** @description Filter value. Omit for is_null / is_not_null / is_empty / is_not_empty; provide a 2-element [start, end] array for between. An empty array or empty string with no operator renders the filter cleared; with an operator, the filter keeps that operator. */
4559
4809
  value?: (string | number | boolean | unknown[]) | null;
4560
4810
  };
4561
4811
  /** @enum {string} */
4562
- DashboardFilterInputOperator: "equals" | "not_equals" | "greater_than" | "greater_than_or_equal" | "less_than" | "less_than_or_equal" | "contains" | "not_contains" | "starts_with" | "not_starts_with" | "ends_with" | "not_ends_with" | "is_null" | "is_not_null" | "is_empty" | "is_not_empty" | "between" | "custom";
4812
+ DashboardFilterInputOperator: "equals" | "not_equals" | "greater_than" | "greater_than_or_equal" | "less_than" | "less_than_or_equal" | "contains" | "not_contains" | "starts_with" | "not_starts_with" | "ends_with" | "not_ends_with" | "in_month" | "not_in_month" | "in_quarter" | "not_in_quarter" | "in_year" | "not_in_year" | "is_null" | "is_not_null" | "is_empty" | "is_not_empty" | "between" | "custom";
4563
4813
  /** @enum {string} */
4564
- DashboardFilterOperator: "equals" | "not_equals" | "greater_than" | "greater_than_or_equal" | "less_than" | "less_than_or_equal" | "contains" | "not_contains" | "starts_with" | "not_starts_with" | "ends_with" | "not_ends_with" | "is_null" | "is_not_null" | "is_empty" | "is_not_empty" | "between" | "custom";
4814
+ DashboardFilterOperator: "equals" | "not_equals" | "greater_than" | "greater_than_or_equal" | "less_than" | "less_than_or_equal" | "contains" | "not_contains" | "starts_with" | "not_starts_with" | "ends_with" | "not_ends_with" | "in_month" | "not_in_month" | "in_quarter" | "not_in_quarter" | "in_year" | "not_in_year" | "is_null" | "is_not_null" | "is_empty" | "is_not_empty" | "between" | "custom";
4565
4815
  DashboardLayout: {
4566
4816
  breakpoints?: components["schemas"]["DashboardBreakpoints"] | null;
4567
4817
  cols?: components["schemas"]["DashboardBreakpointCols"] | null;
@@ -4618,7 +4868,7 @@ export interface components {
4618
4868
  member: string;
4619
4869
  };
4620
4870
  DashboardTimeGrainInput: {
4621
- /** @description Granularity, e.g. "day", "week", "month" */
4871
+ /** @description Granularity, e.g. "day", "week", "month". An empty string renders the control cleared. */
4622
4872
  grain: string;
4623
4873
  /** @description Time dimension path, e.g. "Orders.created_at" */
4624
4874
  member: string;
@@ -5470,11 +5720,21 @@ export interface components {
5470
5720
  pageInfo?: components["schemas"]["PageInfo"] | null;
5471
5721
  };
5472
5722
  EvaluationResultResponse: {
5723
+ /** @description The agent's text answer, which may be truncated. */
5724
+ agentResponse?: string | null;
5725
+ /** @description The SQL the agent ran to answer the question. */
5726
+ agentSql?: string | null;
5727
+ /** @description The grader's explanation of the verdict: why the question failed or errored, a note for a result that needs review, or the AI check's rationale. */
5728
+ analysis?: string | null;
5473
5729
  createdAt: string;
5474
5730
  evaluationId: number;
5731
+ /** @description The ground-truth SQL the agent result was compared against. */
5732
+ groundTruthSql?: string | null;
5475
5733
  id: number;
5476
5734
  questionTextSnapshot: string;
5477
5735
  score?: number | null;
5736
+ /** @description Short categories for a non-passing verdict, such as "Row count mismatch" or "Query error". Empty when the question passed. */
5737
+ scoreReasons: string[];
5478
5738
  updatedAt: string;
5479
5739
  /** @description Question outcome: pass, fail, review, skipped, or error. */
5480
5740
  verdict?: string | null;
@@ -5739,6 +5999,9 @@ export interface components {
5739
5999
  locale: string;
5740
6000
  value: string;
5741
6001
  };
6002
+ MemoryUserSettingsInput: {
6003
+ generateFromChats?: boolean | null;
6004
+ };
5742
6005
  MergeIntoParentBranchRequest: {
5743
6006
  branchId?: number;
5744
6007
  branchName?: string;
@@ -5875,6 +6138,122 @@ export interface components {
5875
6138
  };
5876
6139
  /** @enum {string} */
5877
6140
  OidcTokenConfigDTOSubjectType: "deployment" | "user";
6141
+ OssieConversionCounts: {
6142
+ /** @description Cube cubes. */
6143
+ cubes: number;
6144
+ /** @description Ossie datasets. */
6145
+ datasets: number;
6146
+ /** @description Ossie dataset fields. */
6147
+ fields: number;
6148
+ /** @description Cube data model files. */
6149
+ files: number;
6150
+ issues: components["schemas"]["OssieConversionIssueCounts"];
6151
+ /** @description Ossie metrics. */
6152
+ metrics: number;
6153
+ /** @description Ossie relationships. */
6154
+ relationships: number;
6155
+ /** @description Cube views. */
6156
+ views: number;
6157
+ };
6158
+ OssieConversionFile: {
6159
+ content: string;
6160
+ /** @description For an export, `ossie.yaml`. For an import, the path of the generated file within the data model project. */
6161
+ path: string;
6162
+ };
6163
+ OssieConversionFilesListResponse: {
6164
+ /** @description The converted files, empty when the conversion failed. */
6165
+ items: components["schemas"]["OssieConversionFile"][];
6166
+ pageInfo: components["schemas"]["PageInfo"];
6167
+ };
6168
+ OssieConversionInput: {
6169
+ /** @description Import only. The dataset the generated view is rooted at, for an Ossie model whose relationships do not determine one. */
6170
+ baseCube?: string | null;
6171
+ /** @description Import only. The warehouse dialect whose expressions are preferred where the Ossie model has several; ANSI_SQL is always the fallback. Defaults to the dialect of the deployment's default data source, or ANSI_SQL. */
6172
+ dialect?: components["schemas"]["OssieConversionInputDialect"] | null;
6173
+ /** @description 'export' converts a Cube data model to an Ossie model; 'import' converts an Ossie model to Cube data model files. */
6174
+ direction: components["schemas"]["OssieConversionInputDirection"];
6175
+ /** @description Export with source 'files' only. Relative `.yml`/`.yaml` paths mapped to their contents, such as a local checkout of the data model. Other files are not accepted. */
6176
+ files?: {
6177
+ [key: string]: string;
6178
+ } | null;
6179
+ /** @description Import only. The Ossie YAML document to convert. */
6180
+ ossieYaml?: string | null;
6181
+ /** @description Export only. 'deployment' (the default) converts the YAML data model of the deployment's latest successful build; 'files' converts the `files` sent with the request. */
6182
+ source?: components["schemas"]["OssieConversionInputSource"] | null;
6183
+ /** @description Export only. Refuse a metric whose value join fan-out could change, instead of converting it with a warning. Defaults to false for a whole-model export and true for a view export. */
6184
+ strictFanout?: boolean | null;
6185
+ /** @description Export only. Convert just this view's public members instead of the whole model. */
6186
+ view?: string | null;
6187
+ };
6188
+ /** @enum {string} */
6189
+ OssieConversionInputDialect: "ANSI_SQL" | "SNOWFLAKE" | "DATABRICKS" | "BIGQUERY";
6190
+ /** @enum {string} */
6191
+ OssieConversionInputDirection: "export" | "import";
6192
+ /** @enum {string} */
6193
+ OssieConversionInputSource: "deployment" | "files";
6194
+ OssieConversionIssue: {
6195
+ /** @description The converter issue type, such as DROPPED_MEASURE or CONVERSION_FAILED. */
6196
+ code: string;
6197
+ /** @description The model element the issue is about. */
6198
+ element?: string | null;
6199
+ message: string;
6200
+ /** @description ERROR fails the conversion. WARNING marks something dropped or changed. INFO marks something kept in another form. */
6201
+ severity: components["schemas"]["OssieConversionIssueSeverity"];
6202
+ };
6203
+ OssieConversionIssueCounts: {
6204
+ error: number;
6205
+ info: number;
6206
+ warning: number;
6207
+ };
6208
+ /** @enum {string} */
6209
+ OssieConversionIssueSeverity: "ERROR" | "WARNING" | "INFO";
6210
+ OssieConversionResultResponse: {
6211
+ completedAt: string;
6212
+ conversionId: string;
6213
+ counts: components["schemas"]["OssieConversionCounts"];
6214
+ deploymentId: number;
6215
+ direction: components["schemas"]["OssieConversionResultResponseDirection"];
6216
+ durationMs: number;
6217
+ issues: components["schemas"]["OssieConversionIssue"][];
6218
+ /** @description 'failed' exactly when an issue has severity ERROR. */
6219
+ outcome: components["schemas"]["OssieConversionResultResponseOutcome"];
6220
+ runtime: components["schemas"]["OssieConversionRuntime"];
6221
+ /** @description SHA-256 of the converted input. */
6222
+ sourceSha256: string;
6223
+ };
6224
+ /** @enum {string} */
6225
+ OssieConversionResultResponseDirection: "export" | "import";
6226
+ /** @enum {string} */
6227
+ OssieConversionResultResponseOutcome: "success" | "failed";
6228
+ OssieConversionRuntime: {
6229
+ cubeConverterVersion: string;
6230
+ /** @description The apache/ossie commit the converter was built from. */
6231
+ ossieCommit: string;
6232
+ ossieCoreVersion: string;
6233
+ };
6234
+ OssieConversionStartResponse: {
6235
+ conversionId: string;
6236
+ resultUrl: string;
6237
+ status: components["schemas"]["OssieConversionStartResponseStatus"];
6238
+ statusUrl: string;
6239
+ };
6240
+ /** @enum {string} */
6241
+ OssieConversionStartResponseStatus: "QUEUED";
6242
+ OssieConversionStatusResponse: {
6243
+ conversionId: string;
6244
+ deploymentId: number;
6245
+ direction: components["schemas"]["OssieConversionStatusResponseDirection"];
6246
+ /** @description Why the job ended without a result. */
6247
+ error?: string | null;
6248
+ startedAt: string;
6249
+ /** @description One of QUEUED, RUNNING, COMPLETED, FAILED or CANCELLED. COMPLETED means a result is available, even when the conversion itself failed; read its outcome. FAILED means the job ended without a result. */
6250
+ status: components["schemas"]["OssieConversionStatusResponseStatus"];
6251
+ updatedAt: string;
6252
+ };
6253
+ /** @enum {string} */
6254
+ OssieConversionStatusResponseDirection: "export" | "import";
6255
+ /** @enum {string} */
6256
+ OssieConversionStatusResponseStatus: "QUEUED" | "RUNNING" | "COMPLETED" | "FAILED" | "CANCELLED";
5878
6257
  PageInfo: {
5879
6258
  endCursor?: string | null;
5880
6259
  hasNextPage: boolean;
@@ -6468,11 +6847,49 @@ export interface components {
6468
6847
  /** @description The session id returned by `POST /api/v1/embed/generate-session`. Works whether or not the session has already been exchanged for a token. */
6469
6848
  sessionId: string;
6470
6849
  };
6850
+ Role: {
6851
+ description?: string | null;
6852
+ id: number;
6853
+ name: string;
6854
+ policies: components["schemas"]["Policy"][];
6855
+ };
6856
+ RoleCreateBody: {
6857
+ description?: string | null;
6858
+ /** @description Unique role name. Cannot be one of the built-in role names, which are rejected with `400`: `Admin`, `Developer`, `AIBIDeveloper`, `D3User`, `AIBIUser`, `AIBIViewer`, `Guest`, `EmbedUser`. (The console additionally refuses `None` and `All` in its own role builder; those are accepted here.) */
6859
+ name: string;
6860
+ /** @description What the role grants. Scope a policy to specific deployments by setting `resourceType` to `Deployment` and listing the deployment ids — as returned by POST /build/api/v1/deployments — in `resources`, or `["All"]` for every deployment. An empty `policies` list is accepted and creates a role that grants nothing yet; an individual policy with no actions, or none naming a resource, is rejected. */
6861
+ policies: components["schemas"]["Policy"][];
6862
+ };
6863
+ RoleHolder: {
6864
+ email: string;
6865
+ firstName?: string | null;
6866
+ id: number;
6867
+ /** @description Set by the user's own Admin flag or by a group granting Admin. */
6868
+ isAdmin: boolean;
6869
+ isDeactivated: boolean;
6870
+ roles: components["schemas"]["UserRoleAssignmentResponse"][];
6871
+ };
6872
+ RoleHoldersListResponse: {
6873
+ items: components["schemas"]["RoleHolder"][];
6874
+ pageInfo: components["schemas"]["PageInfo"];
6875
+ };
6876
+ RoleUpdateBody: {
6877
+ /** @description Omit to leave the description unchanged; `null` clears it. */
6878
+ description?: string | null;
6879
+ /** @description Omit to leave the name unchanged. `null` is rejected. */
6880
+ name?: string;
6881
+ /** @description Replaces the role's policies outright when present — there is no per-policy merge. Omit it to leave them unchanged, or send `[]` to remove them all. `null` is rejected, so a partly-filled client object cannot strip a role's grants by accident. */
6882
+ policies?: components["schemas"]["Policy"][];
6883
+ };
6471
6884
  RoleWithAccess: {
6472
6885
  actions: ("All" | "DeploymentsManage" | "DeploymentCreate" | "DeploymentRead" | "DeploymentUpdate" | "DeploymentDelete" | "SecretsManage" | "DownloadData" | "PlaygroundRead" | "SchemaRead" | "SchemaUpdate" | "SchemaUpdateDevBranches" | "APMRead" | "ChatHistoryRead" | "PreAggregationRead" | "PreAggregationBuild" | "AlertsCreate" | "AlertsRead" | "AlertsUpdate" | "AlertsDelete" | "AuditLogManage" | "BillingRead" | "SqlRunnerRead" | "DataAssetsRead" | "DataAssetsManage" | "CubeNetworkConnect" | "ReportRead" | "ReportEdit" | "ReportManage" | "WorkbookManage" | "WorkbookRead" | "WorkbookEdit" | "ChatThreadRead" | "AgentManage" | "AgentRead" | "AgentSpaceManage" | "AgentAdmin" | "DeploymentAgentRead" | "ScheduledTasksCreate" | "ScheduledTaskRead" | "OAuthIntegrationsManage" | "OAuthIntegrationsIssueTokens" | "McpToolsManage" | "AIBIDevelop" | "AIBIExplore" | "AIBIView" | "ChartPalettesManage" | "DashboardThemesManage" | "AIBIDeveloper" | "AIBIUser" | "AIBIViewer" | "EmbedDeploymentRead" | "EmbedDashboardRead" | "FolderRead" | "FolderEdit" | "FolderManage")[];
6473
6886
  id: number;
6474
6887
  name: string;
6475
6888
  };
6889
+ RolesListResponse: {
6890
+ items: components["schemas"]["Role"][];
6891
+ pageInfo: components["schemas"]["PageInfo"];
6892
+ };
6476
6893
  RunScheduledTaskResponse: {
6477
6894
  /** @description The chat thread this run writes to. */
6478
6895
  chatThreadUuid: string;
@@ -6499,6 +6916,61 @@ export interface components {
6499
6916
  SaveDatabricksMetricViewIntegrationInputDeletionPolicy: "retain" | "delete-managed";
6500
6917
  /** @enum {string} */
6501
6918
  SaveDatabricksMetricViewIntegrationInputSelectionMode: "all" | "selected" | "pattern";
6919
+ ScheduledTaskCondition: {
6920
+ granularity?: components["schemas"]["ScheduledTaskConditionGranularity"] | null;
6921
+ /** @description Changes whenever the condition does. Read-only. */
6922
+ id?: string | null;
6923
+ /** @description Full measure name, e.g. `orders.revenue`. */
6924
+ measure: string;
6925
+ measureTitle?: string | null;
6926
+ rule: components["schemas"]["ScheduledTaskConditionRule"];
6927
+ /** @description Full time dimension name, e.g. `orders.created_at`. */
6928
+ timeDimension?: string | null;
6929
+ timeDimensionTitle?: string | null;
6930
+ };
6931
+ ScheduledTaskConditionBand: {
6932
+ high: number;
6933
+ low: number;
6934
+ median: number;
6935
+ };
6936
+ /** @enum {string} */
6937
+ ScheduledTaskConditionGranularity: "day" | "week" | "month" | "quarter" | "year";
6938
+ ScheduledTaskConditionRule: {
6939
+ /** @description For `change`: increases, decreases, or changes either way. */
6940
+ direction?: components["schemas"]["ScheduledTaskConditionRuleDirection"] | null;
6941
+ /** @description For `threshold`: above, below or equal to. */
6942
+ operator?: components["schemas"]["ScheduledTaskConditionRuleOperator"] | null;
6943
+ /** @description For `change`: the percentage, greater than 0, e.g. `5` for 5 %. */
6944
+ percent?: number | null;
6945
+ /** @description `threshold`: the last complete period (or the total, with no time dimension) is above, below or equal to `value`. `change`: the last complete period moved by at least `percent` % from the one before it. `anomaly`: the last complete period lies outside median ± 3·MAD of the at least 8 complete periods before it. */
6946
+ type: components["schemas"]["ScheduledTaskConditionRuleType"];
6947
+ /** @description For `threshold`: the number compared with. */
6948
+ value?: number | null;
6949
+ };
6950
+ /** @enum {string} */
6951
+ ScheduledTaskConditionRuleDirection: "up" | "down" | "either";
6952
+ /** @enum {string} */
6953
+ ScheduledTaskConditionRuleOperator: "gt" | "lt" | "eq";
6954
+ /** @enum {string} */
6955
+ ScheduledTaskConditionRuleType: "threshold" | "change" | "anomaly";
6956
+ ScheduledTaskLastConditionCheck: {
6957
+ /** @description When the check ran (ISO 8601). */
6958
+ at: string;
6959
+ band?: components["schemas"]["ScheduledTaskConditionBand"] | null;
6960
+ changePercent?: number | null;
6961
+ conditionId: string;
6962
+ notifiedAt?: string | null;
6963
+ /** @description Start of the period read, `YYYY-MM-DD`. */
6964
+ period?: string | null;
6965
+ previous?: number | null;
6966
+ previousPeriod?: string | null;
6967
+ reason?: string | null;
6968
+ /** @description `held-notified` ran the agent; `held-already-notified` was still holding since an earlier notification; `cannot-evaluate` carries a `reason` code; an `error` carries its text in `reason` to the task's creator only, as do the figures the check read. */
6969
+ status: components["schemas"]["ScheduledTaskLastConditionCheckStatus"];
6970
+ value?: number | null;
6971
+ };
6972
+ /** @enum {string} */
6973
+ ScheduledTaskLastConditionCheckStatus: "not-held" | "held-notified" | "held-already-notified" | "cannot-evaluate" | "error";
6502
6974
  ScheduledTaskListResponse: {
6503
6975
  items: components["schemas"]["ScheduledTaskResponse"][];
6504
6976
  pageInfo: components["schemas"]["PageInfo"];
@@ -6506,6 +6978,8 @@ export interface components {
6506
6978
  ScheduledTaskResponse: {
6507
6979
  /** @description The agent that runs the task; null runs the deployment default. */
6508
6980
  agentId?: number | null;
6981
+ /** @description Notify only when: on each fire the measure is read once, before the agent runs, and the agent runs only when the condition starts to hold, with the crossing facts at the top of its thread; it runs again only after the condition has stopped holding. A `change` or `anomaly` rule needs `timeDimension` and `granularity`. The creator gets an inbox row only with `notificationEnabled: true`. Null runs the agent on every fire. */
6982
+ condition?: components["schemas"]["ScheduledTaskCondition"] | null;
6509
6983
  /** @description Standard 5-field cron (minute hour day-of-month month day-of-week), e.g. `0 9 * * 1-5` for 9:00 on weekdays. Null when the task is Manual: it runs only when started with `POST /scheduled-tasks/{taskId}/run`. */
6510
6984
  cronExpression?: string | null;
6511
6985
  deploymentId: number;
@@ -6513,6 +6987,8 @@ export interface components {
6513
6987
  id: number;
6514
6988
  /** @description False while the schedule is paused. */
6515
6989
  isEnabled: boolean;
6990
+ /** @description The latest condition check; null before the first one. */
6991
+ lastConditionCheck?: components["schemas"]["ScheduledTaskLastConditionCheck"] | null;
6516
6992
  name: string;
6517
6993
  /** @description When the schedule next fires (ISO 8601, UTC); null for a Manual or paused task. */
6518
6994
  nextRunAt?: string | null;
@@ -6618,7 +7094,7 @@ export interface components {
6618
7094
  /** @description Output format: `png` or `pdf`. */
6619
7095
  format: components["schemas"]["StartDashboardExportInputFormat"];
6620
7096
  /**
6621
- * @description How the dashboard is laid out. `screenshot` (the default) renders the board as it looks on screen. `print` renders the paginated A4 document the dashboard's 'Print version' menu item produces: one column, every table row, and the filter state as a summary line instead of filter controls. `print` is available for `format: 'pdf'` only.
7097
+ * @description How the dashboard is laid out. `screenshot` (the default) renders the board as it looks on screen. `print` renders the paginated A4 document the dashboard's 'Download print version' menu item produces: one column, every table row, and the filter state as a summary line instead of filter controls. `print` is available for `format: 'pdf'` only.
6622
7098
  * @default screenshot
6623
7099
  */
6624
7100
  layout?: components["schemas"]["StartDashboardExportInputLayout"] | null;
@@ -6664,6 +7140,10 @@ export interface components {
6664
7140
  branchName: string;
6665
7141
  /** @description Path of one eval-question YAML file to run, relative to the agents directory. Omit to run the complete eval set. */
6666
7142
  questionFile?: string | null;
7143
+ /** @description Security context to evaluate under, merged over the caller's own. Applies to the ground-truth queries, and to the agent's queries when the run's agent is defined in the deployment's agent config; the default `auto` agent queries under the caller's own context. Requires deployment edit access; a `cubeCloud` key requires an admin. */
7144
+ securityContext?: {
7145
+ [key: string]: any;
7146
+ } | null;
6667
7147
  };
6668
7148
  StartReportDeliveryRunResponse: {
6669
7149
  /** @description Id of the run, which writes the sheet in the background; poll it for the outcome. */
@@ -6830,7 +7310,7 @@ export interface components {
6830
7310
  timezone?: string | null;
6831
7311
  };
6832
7312
  /** @enum {string} */
6833
- UpdateNotificationInputNotificationFormat: "png" | "pdf";
7313
+ UpdateNotificationInputNotificationFormat: "png" | "pdf" | "pdf_print";
6834
7314
  /** @enum {string} */
6835
7315
  UpdateNotificationInputScheduleType: "HOURLY" | "DAILY" | "WEEKLY" | "MONTHLY" | "CUSTOM";
6836
7316
  UpdateOAuthIntegrationInput: {
@@ -6928,6 +7408,8 @@ export interface components {
6928
7408
  UpdateScheduledTaskInput: {
6929
7409
  /** @description The agent that runs the task. Omit to leave unchanged; null resets it to the deployment default. */
6930
7410
  agentId?: number | null;
7411
+ /** @description Notify only when: on each fire the measure is read once, before the agent runs, and the agent runs only when the condition starts to hold, with the crossing facts at the top of its thread; it runs again only after the condition has stopped holding. A `change` or `anomaly` rule needs `timeDimension` and `granularity`. The creator gets an inbox row only with `notificationEnabled: true`. Omit to leave unchanged; null removes it. A changed condition starts its breach state fresh. */
7412
+ condition?: components["schemas"]["ScheduledTaskCondition"] | null;
6931
7413
  /** @description New standard 5-field cron, at most hourly (the minute field is a single number). Omit it to keep the current schedule; send null to make the task Manual. */
6932
7414
  cronExpression?: string | null;
6933
7415
  /** @description Omit to leave unchanged. Send null to clear the description. */
@@ -7114,6 +7596,22 @@ export interface components {
7114
7596
  updatedAt: string;
7115
7597
  userId: number;
7116
7598
  };
7599
+ UserRoleAssignmentResponse: {
7600
+ builtIn: boolean;
7601
+ description?: string | null;
7602
+ /** @description Assigned to the user directly — the assignment `DELETE /api/v1/roles/{roleId}/users/{userId}` removes. */
7603
+ direct: boolean;
7604
+ /** @description Groups that grant the role. Removing it from the user does not touch these; change the group instead. */
7605
+ groupIds: number[];
7606
+ /** @description Role id. Built-in roles have fixed negative ids. */
7607
+ id: number;
7608
+ name: string;
7609
+ };
7610
+ UserRolesResponse: {
7611
+ /** @description Set by the user's own Admin flag or by a group granting Admin. */
7612
+ isAdmin: boolean;
7613
+ roles: components["schemas"]["UserRoleAssignmentResponse"][];
7614
+ };
7117
7615
  UserSettingsInput: {
7118
7616
  alternatingRowColors?: boolean | null;
7119
7617
  defaultDeploymentId?: number | null;
@@ -7123,6 +7621,7 @@ export interface components {
7123
7621
  */
7124
7622
  lastSeenChangelogId?: number | null;
7125
7623
  locale?: string | null;
7624
+ memory?: components["schemas"]["MemoryUserSettingsInput"] | null;
7126
7625
  sheets?: components["schemas"]["SheetsUserSettingsInput"] | null;
7127
7626
  theme?: string | null;
7128
7627
  timezone?: string | null;
@@ -9256,9 +9755,134 @@ export interface operations {
9256
9755
  };
9257
9756
  };
9258
9757
  };
9259
- "DeploymentsPublicController.pods": {
9758
+ "OssieConversionPublicController.startConversion": {
9260
9759
  parameters: {
9261
- query?: {
9760
+ query?: never;
9761
+ header?: never;
9762
+ path: {
9763
+ deploymentId: number;
9764
+ };
9765
+ cookie?: never;
9766
+ };
9767
+ /** @description OssieConversionInput */
9768
+ requestBody: {
9769
+ content: {
9770
+ "application/json": components["schemas"]["OssieConversionInput"];
9771
+ };
9772
+ };
9773
+ responses: {
9774
+ 202: {
9775
+ headers: {
9776
+ [name: string]: any;
9777
+ };
9778
+ content: {
9779
+ "application/json": components["schemas"]["OssieConversionStartResponse"];
9780
+ };
9781
+ };
9782
+ };
9783
+ };
9784
+ "OssieConversionPublicController.conversionStatus": {
9785
+ parameters: {
9786
+ query?: never;
9787
+ header?: never;
9788
+ path: {
9789
+ deploymentId: number;
9790
+ conversionId: string;
9791
+ };
9792
+ cookie?: never;
9793
+ };
9794
+ requestBody?: never;
9795
+ responses: {
9796
+ 200: {
9797
+ headers: {
9798
+ [name: string]: any;
9799
+ };
9800
+ content: {
9801
+ "application/json": components["schemas"]["OssieConversionStatusResponse"];
9802
+ };
9803
+ };
9804
+ };
9805
+ };
9806
+ "OssieConversionPublicController.cancelConversion": {
9807
+ parameters: {
9808
+ query?: never;
9809
+ header?: never;
9810
+ path: {
9811
+ deploymentId: number;
9812
+ conversionId: string;
9813
+ };
9814
+ cookie?: never;
9815
+ };
9816
+ requestBody?: never;
9817
+ responses: {
9818
+ /** @description Successful response */
9819
+ 200: {
9820
+ headers: {
9821
+ [name: string]: any;
9822
+ };
9823
+ content: {
9824
+ "application/json": any;
9825
+ };
9826
+ };
9827
+ /** @description Cancelled, or already finished. */
9828
+ 204: {
9829
+ headers: {
9830
+ [name: string]: any;
9831
+ };
9832
+ content?: never;
9833
+ };
9834
+ };
9835
+ };
9836
+ "OssieConversionPublicController.conversionFiles": {
9837
+ parameters: {
9838
+ query?: {
9839
+ after?: string | null;
9840
+ first?: number | null;
9841
+ };
9842
+ header?: never;
9843
+ path: {
9844
+ deploymentId: number;
9845
+ conversionId: string;
9846
+ };
9847
+ cookie?: never;
9848
+ };
9849
+ requestBody?: never;
9850
+ responses: {
9851
+ 200: {
9852
+ headers: {
9853
+ [name: string]: any;
9854
+ };
9855
+ content: {
9856
+ "application/json": components["schemas"]["OssieConversionFilesListResponse"];
9857
+ };
9858
+ };
9859
+ };
9860
+ };
9861
+ "OssieConversionPublicController.conversionResult": {
9862
+ parameters: {
9863
+ query?: never;
9864
+ header?: never;
9865
+ path: {
9866
+ deploymentId: number;
9867
+ conversionId: string;
9868
+ };
9869
+ cookie?: never;
9870
+ };
9871
+ requestBody?: never;
9872
+ responses: {
9873
+ 200: {
9874
+ headers: {
9875
+ [name: string]: any;
9876
+ };
9877
+ content: {
9878
+ "application/json": components["schemas"]["OssieConversionResultResponse"];
9879
+ };
9880
+ };
9881
+ };
9882
+ };
9883
+ "DeploymentsPublicController.pods": {
9884
+ parameters: {
9885
+ query?: {
9262
9886
  after?: string | null;
9263
9887
  first?: number | null;
9264
9888
  };
@@ -12298,6 +12922,282 @@ export interface operations {
12298
12922
  };
12299
12923
  };
12300
12924
  };
12925
+ "RolesPublicController.getRoles": {
12926
+ parameters: {
12927
+ query?: {
12928
+ after?: string | null;
12929
+ first?: number | null;
12930
+ };
12931
+ header?: never;
12932
+ path?: never;
12933
+ cookie?: never;
12934
+ };
12935
+ requestBody?: never;
12936
+ responses: {
12937
+ 200: {
12938
+ headers: {
12939
+ [name: string]: any;
12940
+ };
12941
+ content: {
12942
+ "application/json": components["schemas"]["RolesListResponse"];
12943
+ };
12944
+ };
12945
+ };
12946
+ };
12947
+ "RolesPublicController.createRole": {
12948
+ parameters: {
12949
+ query?: never;
12950
+ header?: never;
12951
+ path?: never;
12952
+ cookie?: never;
12953
+ };
12954
+ /** @description RoleCreateBody */
12955
+ requestBody?: {
12956
+ content: {
12957
+ "application/json": components["schemas"]["RoleCreateBody"];
12958
+ };
12959
+ };
12960
+ responses: {
12961
+ 200: {
12962
+ headers: {
12963
+ [name: string]: any;
12964
+ };
12965
+ content: {
12966
+ "application/json": components["schemas"]["Role"];
12967
+ };
12968
+ };
12969
+ /** @description The name is one of the built-in role names, or a policy grants no action, names no resource, or scopes a `Deployment` to something that is not a deployment id. */
12970
+ 400: {
12971
+ headers: {
12972
+ [name: string]: any;
12973
+ };
12974
+ content?: never;
12975
+ };
12976
+ /** @description A role with that name already exists. */
12977
+ 409: {
12978
+ headers: {
12979
+ [name: string]: any;
12980
+ };
12981
+ content?: never;
12982
+ };
12983
+ };
12984
+ };
12985
+ "RolesPublicController.getRole": {
12986
+ parameters: {
12987
+ query?: never;
12988
+ header?: never;
12989
+ path: {
12990
+ roleId: number;
12991
+ };
12992
+ cookie?: never;
12993
+ };
12994
+ requestBody?: never;
12995
+ responses: {
12996
+ 200: {
12997
+ headers: {
12998
+ [name: string]: any;
12999
+ };
13000
+ content: {
13001
+ "application/json": components["schemas"]["Role"];
13002
+ };
13003
+ };
13004
+ /** @description No custom role has that id. */
13005
+ 404: {
13006
+ headers: {
13007
+ [name: string]: any;
13008
+ };
13009
+ content?: never;
13010
+ };
13011
+ };
13012
+ };
13013
+ "RolesPublicController.updateRole": {
13014
+ parameters: {
13015
+ query?: never;
13016
+ header?: never;
13017
+ path: {
13018
+ roleId: number;
13019
+ };
13020
+ cookie?: never;
13021
+ };
13022
+ /** @description RoleUpdateBody */
13023
+ requestBody?: {
13024
+ content: {
13025
+ "application/json": components["schemas"]["RoleUpdateBody"];
13026
+ };
13027
+ };
13028
+ responses: {
13029
+ 200: {
13030
+ headers: {
13031
+ [name: string]: any;
13032
+ };
13033
+ content: {
13034
+ "application/json": components["schemas"]["Role"];
13035
+ };
13036
+ };
13037
+ /** @description `name` or `policies` was `null`, the new name is one of the built-in role names, or a policy is not a valid one. */
13038
+ 400: {
13039
+ headers: {
13040
+ [name: string]: any;
13041
+ };
13042
+ content?: never;
13043
+ };
13044
+ /** @description No custom role has that id. */
13045
+ 404: {
13046
+ headers: {
13047
+ [name: string]: any;
13048
+ };
13049
+ content?: never;
13050
+ };
13051
+ /** @description A role with that name already exists. */
13052
+ 409: {
13053
+ headers: {
13054
+ [name: string]: any;
13055
+ };
13056
+ content?: never;
13057
+ };
13058
+ };
13059
+ };
13060
+ "RolesPublicController.deleteRole": {
13061
+ parameters: {
13062
+ query?: never;
13063
+ header?: never;
13064
+ path: {
13065
+ roleId: number;
13066
+ };
13067
+ cookie?: never;
13068
+ };
13069
+ requestBody?: never;
13070
+ responses: {
13071
+ /** @description Successful response */
13072
+ 200: {
13073
+ headers: {
13074
+ [name: string]: any;
13075
+ };
13076
+ content: {
13077
+ "application/json": any;
13078
+ };
13079
+ };
13080
+ /** @description Role deleted. */
13081
+ 204: {
13082
+ headers: {
13083
+ [name: string]: any;
13084
+ };
13085
+ content?: never;
13086
+ };
13087
+ /** @description No custom role has that id. */
13088
+ 404: {
13089
+ headers: {
13090
+ [name: string]: any;
13091
+ };
13092
+ content?: never;
13093
+ };
13094
+ };
13095
+ };
13096
+ "RolesPublicController.getRoleHolders": {
13097
+ parameters: {
13098
+ query?: {
13099
+ after?: string | null;
13100
+ first?: number | null;
13101
+ };
13102
+ header?: never;
13103
+ path: {
13104
+ roleId: number;
13105
+ };
13106
+ cookie?: never;
13107
+ };
13108
+ requestBody?: never;
13109
+ responses: {
13110
+ 200: {
13111
+ headers: {
13112
+ [name: string]: any;
13113
+ };
13114
+ content: {
13115
+ "application/json": components["schemas"]["RoleHoldersListResponse"];
13116
+ };
13117
+ };
13118
+ /** @description No role has that id. Cube's Admin role answers `404` too. */
13119
+ 404: {
13120
+ headers: {
13121
+ [name: string]: any;
13122
+ };
13123
+ content?: never;
13124
+ };
13125
+ };
13126
+ };
13127
+ "RolesPublicController.assignRoleToUser": {
13128
+ parameters: {
13129
+ query?: never;
13130
+ header?: never;
13131
+ path: {
13132
+ roleId: number;
13133
+ userId: number;
13134
+ };
13135
+ cookie?: never;
13136
+ };
13137
+ requestBody?: never;
13138
+ responses: {
13139
+ /** @description Successful response */
13140
+ 200: {
13141
+ headers: {
13142
+ [name: string]: any;
13143
+ };
13144
+ content: {
13145
+ "application/json": any;
13146
+ };
13147
+ };
13148
+ /** @description Role assigned, or already held. */
13149
+ 204: {
13150
+ headers: {
13151
+ [name: string]: any;
13152
+ };
13153
+ content?: never;
13154
+ };
13155
+ /** @description The user or the role is unknown. Cube's Admin role is not resolvable here, so its id answers `404` as well. */
13156
+ 404: {
13157
+ headers: {
13158
+ [name: string]: any;
13159
+ };
13160
+ content?: never;
13161
+ };
13162
+ };
13163
+ };
13164
+ "RolesPublicController.removeRoleFromUser": {
13165
+ parameters: {
13166
+ query?: never;
13167
+ header?: never;
13168
+ path: {
13169
+ roleId: number;
13170
+ userId: number;
13171
+ };
13172
+ cookie?: never;
13173
+ };
13174
+ requestBody?: never;
13175
+ responses: {
13176
+ /** @description Successful response */
13177
+ 200: {
13178
+ headers: {
13179
+ [name: string]: any;
13180
+ };
13181
+ content: {
13182
+ "application/json": any;
13183
+ };
13184
+ };
13185
+ /** @description Role removed, or was not held. */
13186
+ 204: {
13187
+ headers: {
13188
+ [name: string]: any;
13189
+ };
13190
+ content?: never;
13191
+ };
13192
+ /** @description The user is unknown. */
13193
+ 404: {
13194
+ headers: {
13195
+ [name: string]: any;
13196
+ };
13197
+ content?: never;
13198
+ };
13199
+ };
13200
+ };
12301
13201
  "OpenApiSpecPublicController.getSpec": {
12302
13202
  parameters: {
12303
13203
  query?: never;
@@ -12813,6 +13713,34 @@ export interface operations {
12813
13713
  };
12814
13714
  };
12815
13715
  };
13716
+ "UsersAdminPublicController.getUserRoles": {
13717
+ parameters: {
13718
+ query?: never;
13719
+ header?: never;
13720
+ path: {
13721
+ id: number;
13722
+ };
13723
+ cookie?: never;
13724
+ };
13725
+ requestBody?: never;
13726
+ responses: {
13727
+ 200: {
13728
+ headers: {
13729
+ [name: string]: any;
13730
+ };
13731
+ content: {
13732
+ "application/json": components["schemas"]["UserRolesResponse"];
13733
+ };
13734
+ };
13735
+ /** @description The user is unknown. */
13736
+ 404: {
13737
+ headers: {
13738
+ [name: string]: any;
13739
+ };
13740
+ content?: never;
13741
+ };
13742
+ };
13743
+ };
12816
13744
  "DeploymentsBuildPublicController.createDeployment": {
12817
13745
  parameters: {
12818
13746
  query?: never;