@camunda/ccma-shared-types 7.1.0 → 7.3.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/_tests/types/ClusterTtl.type.spec.d.ts +1 -0
- package/dist/dtos/ApprovalJob.dto.d.ts +8 -0
- package/dist/dtos/ApprovalJob.dto.js.map +2 -2
- package/dist/dtos/CommonCluster.dto.d.ts +12 -0
- package/dist/dtos/ControlV2.dto.d.ts +20 -0
- package/dist/enums/AuditEntity.enum.d.ts +1 -0
- package/dist/enums/AuditEntity.enum.js +1 -0
- package/dist/enums/AuditEntity.enum.js.map +2 -2
- package/dist/index.d.ts +4 -2
- package/dist/index.js +38 -0
- package/dist/index.js.map +2 -2
- package/dist/search/cluster-search-fields.d.ts +11 -0
- package/dist/search/cluster-search-fields.js +29 -1
- package/dist/search/cluster-search-fields.js.map +2 -2
- package/dist/search/index.d.ts +1 -1
- package/dist/search/index.js +5 -1
- package/dist/search/index.js.map +2 -2
- package/dist/types/ClusterTtl.type.d.ts +96 -0
- package/dist/types/ClusterTtl.type.js +89 -0
- package/dist/types/ClusterTtl.type.js.map +7 -0
- package/package.json +1 -1
|
@@ -0,0 +1 @@
|
|
|
1
|
+
export {};
|
|
@@ -248,6 +248,14 @@ export interface ApprovalSummaryField {
|
|
|
248
248
|
label: string;
|
|
249
249
|
kind: ApprovalSummaryFieldKind;
|
|
250
250
|
values: ApprovalSummaryValue[];
|
|
251
|
+
/**
|
|
252
|
+
* The values that this request replaces, for a field that changes. A view
|
|
253
|
+
* shows them as removed beside `values` as added. A field with no
|
|
254
|
+
* `previous` is not a change.
|
|
255
|
+
*/
|
|
256
|
+
previous?: ApprovalSummaryValue[];
|
|
257
|
+
/** The count of `previous`, when the list cut it. Like `total`, for `previous`. */
|
|
258
|
+
previousTotal?: number;
|
|
251
259
|
/**
|
|
252
260
|
* How many values the field holds, when `values` holds only the first of
|
|
253
261
|
* them. The list route cuts every field to `APPROVAL_LIST_SUMMARY_VALUES_MAX`
|
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
{
|
|
2
2
|
"version": 3,
|
|
3
3
|
"sources": ["../../src/dtos/ApprovalJob.dto.ts"],
|
|
4
|
-
"sourcesContent": ["/*\n * Copyright Camunda Services GmbH and/or licensed to Camunda Services GmbH\n * under one or more contributor license agreements. Licensed under a commercial license.\n * You may not use this file except in compliance with the commercial license.\n */\n\n/**\n * The wire types of the generic approval mechanism.\n *\n * This file holds no logic and no dependency, because three consumers read it:\n * control-backend, control-frontend and cloudbot. The rules that read these\n * types are in `../approvals/policy.js`, and they are pure for the same reason.\n */\n\n/**\n * Every state that an approval request can hold.\n *\n * A `const` tuple, not an enum, so it is both the union type and the list that\n * validates a status filter at run time.\n *\n * The path of a request: `pending` until it reaches the threshold. Then\n * `executing` (automatic mode) or `approved` (explicit mode, which waits for a\n * person to press the button). `executed` or `failed` after the action ran. A\n * request that never reaches the threshold ends `rejected`, `withdrawn` or\n * `expired`.\n */\nexport const APPROVAL_JOB_STATUSES = [\n 'pending',\n 'approved',\n 'executing',\n 'executed',\n 'failed',\n 'rejected',\n 'withdrawn',\n 'expired',\n] as const\n\nexport type ApprovalJobStatus = (typeof APPROVAL_JOB_STATUSES)[number]\n\n/**\n * The states in which the action of a request is still COMING.\n *\n * `pending` waits for approvals, `approved` waits for a person to press the\n * button, and `executing` is running now. Each of them can still change the\n * world, so two requests for one target must not be in these states together.\n * `dedupeKey` reads this set for that reason.\n *\n * `failed` is NOT here, although a person can run a failed request again. A\n * failed request runs only when a person presses the button, and that person\n * sees the row. Blocking a new request on a failed one would also trap the\n * key: `canWithdraw` accepts `pending` alone, so nobody could close it.\n *\n * `executed`, `rejected`, `withdrawn` and `expired` are the end of a request.\n */\nexport const APPROVAL_LIVE_STATUSES = [\n 'pending',\n 'approved',\n 'executing',\n] as const satisfies readonly ApprovalJobStatus[]\n\n/**\n * How many requests one page of the list holds when the caller asks for no\n * number.\n *\n * The list is a work queue that a Camundi reads, so the page is large: a\n * person wants the whole queue and not ten rows at a time. What the number is\n * for is the ceiling below.\n */\nexport const APPROVAL_PAGE_SIZE_DEFAULT = 500\n\n/**\n * The largest page that the service builds, and the largest that a caller may\n * ask for. The API answers 400 above it.\n *\n * The list had no limit at all. One authenticated caller could then make the\n * service read the whole table into memory, serialize it, and do it again, so\n * the cost of a request grew with the age of the service and with nothing that\n * the caller had to pay for. A ceiling turns that into a fixed cost.\n *\n * It is HERE and not only in the service, because the view must know it: a\n * page that asked for more would get a 400 instead of rows.\n */\nexport const APPROVAL_PAGE_SIZE_MAX = 2000\n\n/**\n * The columns that the queue can be ordered by.\n *\n * A NAME and not an SQL expression: the repository maps each one, so a caller\n * can never name a column that this list does not hold. `status` orders by the\n * EFFECTIVE status, because a `pending` row whose time ran out reads as\n * `expired` everywhere else.\n */\nexport const APPROVAL_SORT_FIELDS = [\n 'createdAt',\n 'expiresAt',\n 'status',\n 'type',\n 'createdBy',\n] as const\n\nexport type ApprovalSortField = (typeof APPROVAL_SORT_FIELDS)[number]\n\nexport type ApprovalSortOrder = 'asc' | 'desc'\n\n/** The default order of the queue: the newest request first. */\nexport const APPROVAL_SORT_DEFAULT: {\n sort: ApprovalSortField\n order: ApprovalSortOrder\n} = { sort: 'createdAt', order: 'desc' }\n\n/**\n * The longest reason that a request, a rejection or a withdrawal accepts.\n *\n * ONE number, because three routes of control-backend hold it and three fields\n * of control-frontend must stop there. A field that let a person write more\n * than the schema accepts turns their sentence into a 400 after they wrote it.\n */\nexport const APPROVAL_REASON_MAX_LENGTH = 2000\n\n/**\n * The largest number of approvals that a caller can ask for.\n *\n * A request that asks for 400 approvals can never reach them, so it is a\n * request that only fills the table and expires. The ceiling turns that into a\n * 400 at the moment a person types it. It is HERE because the form of the\n * bulk operation must stop at the same number as the route.\n */\nexport const APPROVAL_ACKS_MAX = 10\n\n/**\n * The longest search text that the list accepts.\n *\n * A search runs `ILIKE` over the payload of every visible row, so the cost of\n * one call follows the length of the text. Nothing a person types to find a\n * request is near this.\n */\nexport const APPROVAL_SEARCH_MAX_LENGTH = 200\n\n/**\n * The payload field that names the organization a request acts on.\n *\n * It is a CONVENTION, and this constant is what makes the convention readable\n * from both sides. A use case whose action hits one organization puts the id of\n * that organization in this field, and `GET /api/approvals?orgId=\u2026` then finds\n * the request with no knowledge of the use case. The filter reads this one\n * field of the payload, so it matches the whole id and nothing else. The free\n * text search reads the payload as TEXT, which also matches an id that only\n * appears inside another field, and it cannot answer \"the requests of this\n * organization\".\n *\n * The organization page of control-frontend does NOT read this field. It asks\n * the entity-link filter (`entityType=org`), which reads a row that\n * `relatedEntities` of a use case writes \u2014 see `ApprovalEntityRef`. The summary\n * is separate again: the `org` field of a `summarize` result is what a READER\n * follows.\n */\nexport const APPROVAL_PAYLOAD_ORG_FIELD = 'orgId'\n\n/**\n * How many requests each status holds, for the filters of the queue.\n *\n * Every number answers the SAME question as the list beside it: the counts are\n * built with the visibility rule, the action filter and the search text of the\n * caller, and with the lazy expiry. A count that ignored one of those would\n * send a person to a filter that then shows nothing.\n */\nexport interface ApprovalStatusCountsDto {\n /** Every request that matches, whatever its status. */\n all: number\n /** One number for each status. A status with no request is 0, never absent. */\n byStatus: Record<ApprovalJobStatus, number>\n}\n\n/**\n * What happens when a request reaches its threshold.\n *\n * `auto` runs the action immediately. `explicit` holds the request at\n * `approved` and waits for a person to run it.\n */\nexport type ApprovalExecutionMode = 'auto' | 'explicit'\n\n/**\n * WHERE the action runs. It is a separate question from who starts it.\n *\n * - `inline` runs the action inside the call that started it, and the answer\n * already carries the outcome. Right for one call to another service.\n * - `background` answers as soon as the request is claimed, and the action\n * runs on. It reports into `ApprovalJobDto.progress`, and the row is the\n * only place that holds the progress, so a reload and a second person read\n * the same numbers. A pod that stops loses the run, and the reconciler of\n * control-backend recovers the row.\n *\n * An action over thousands of targets MUST be `background`. `inline` would\n * hold one HTTP request for the whole run, and the ingress, the load balancer\n * and the browser each have their own deadline before it finishes.\n *\n * An `inline` action must not read `context.signal`. The runner trusts the\n * result of an `inline` action that returns after a drain, and it would count\n * a partial run as `executed`. An action that stops between targets is\n * `background`.\n */\nexport type ApprovalActionMode = 'inline' | 'background'\n\n/**\n * A person, as an approval request records them.\n *\n * Both keys are kept. The machine then never has to choose one identity key,\n * which is what split the earlier acknowledgement flows: some held an email and\n * some held a user id, and the two could not be compared.\n */\nexport interface ApprovalActor {\n userId: string\n email: string\n}\n\nexport interface ApprovalAck extends ApprovalActor {\n /** An ISO timestamp. It is in a json column, so it is a string, not a Date. */\n date: string\n}\n\n/**\n * Who asked for an action, and who agreed to it.\n *\n * Every route of `api/admin/approvals` takes this envelope, and control-backend\n * builds it from the request that it runs. The envelope exists because the\n * token cannot carry it: the call is machine to machine, so `sub` holds the id\n * of the Auth0 application and not a person. A service that reads the token\n * alone therefore writes \"control-backend\" into its audit record, which hides\n * the two Camundis that the whole mechanism exists to record.\n *\n * `approvedBy` is a list, because a use case can need more than one approval,\n * and the record must name all of them. It can also be EMPTY: how many\n * approvals an action needs is a number of the use case, and `move-cluster-org`\n * holds zero on purpose. The person in `requestedBy` is never in the list: the\n * four-eyes rule is that the person who asks is not the person who agrees, and\n * control-backend holds that rule.\n *\n * Each person carries both keys of `ApprovalActor`. The email is what a route\n * uses to ask Auth0 about the person, and the user id is what an audit record\n * holds, because every other record of the fleet holds an Auth0 `sub`.\n *\n * CAUTION: The envelope is a CLAIM of the caller, and not proof. A route that\n * acts on it must ask Auth0 again whether `requestedBy` may do the action.\n * That means the permission of the action. For a use case with\n * `openToEveryone`, it means that the person is a Camundi, because no\n * permission runs that action. `api/admin/approvals` in accounts-backend does\n * that. See the note on `M2M_CONTROL_APPROVALS`.\n */\nexport interface ApprovalM2mActor {\n /** The id of the approval request, to join the records of both services. */\n requestId: string\n /** The Camundi who opened the request. */\n requestedBy: ApprovalActor\n /** The Camundis who approved it. Empty when the use case needs none. */\n approvedBy: ApprovalActor[]\n}\n\n/**\n * What one value of a summary field is.\n *\n * `text` is what a person reads. `id` is what a link points at, and it is\n * absent when the kind names no entity. The two are separate because the text\n * is a COPY that the request keeps: an organization that gets a new name after\n * the request was opened must still read as the organization that the person\n * chose.\n */\nexport interface ApprovalSummaryValue {\n text: string\n id?: string\n}\n\n/**\n * How a reader must render one field of a summary.\n *\n * `org`, `cluster` and `user` name an entity, so a reader can link to it and\n * can resolve a fresh name. The others are plain: `date` is an ISO timestamp,\n * and `code` is a value that must keep its characters, such as a json fragment.\n */\nexport const APPROVAL_SUMMARY_FIELD_KINDS = [\n 'text',\n 'number',\n 'boolean',\n 'date',\n 'org',\n 'cluster',\n 'user',\n 'code',\n] as const\n\nexport type ApprovalSummaryFieldKind =\n (typeof APPROVAL_SUMMARY_FIELD_KINDS)[number]\n\n/**\n * One labelled field of the payload of a request.\n *\n * This is what makes ONE view able to show EVERY use case. The payload of a\n * request is an object of anything, so a generic view can only print it as\n * json. The use case turns it into labelled fields here, and the view renders\n * a field by its kind: it links an `org`, it formats a `date`, and it lists\n * 300 clusters as 300 links.\n *\n * `values` is always an array. A field that holds one value holds an array of\n * one, so a reader needs no branch for \"one or many\".\n */\nexport interface ApprovalSummaryField {\n label: string\n kind: ApprovalSummaryFieldKind\n values: ApprovalSummaryValue[]\n /**\n * How many values the field holds, when `values` holds only the first of\n * them. The list route cuts every field to `APPROVAL_LIST_SUMMARY_VALUES_MAX`\n * values. The detail route sends every value and no `total`.\n */\n total?: number\n}\n\n/**\n * How many values of one summary field a row of the list carries.\n *\n * A bulk operation names up to 3000 clusters in one field. A page of 100 such\n * rows would carry 300,000 values that no row shows. The view shows at most\n * 12 values of a field, so the list stops there, and `total` holds the count.\n */\nexport const APPROVAL_LIST_SUMMARY_VALUES_MAX = 12\n\n/**\n * The kinds of entity that an approval request can concern.\n *\n * These are the entities that a request is findable by: the org and cluster\n * detail pages ask \"which requests touch me\", and the answer reads a row for\n * each entity. It is a subset of `APPROVAL_SUMMARY_FIELD_KINDS` \u2014 the kinds that\n * name an entity \u2014 because only those carry an id that a page can match.\n */\nexport const APPROVAL_ENTITY_TYPES = ['cluster', 'org', 'user'] as const\n\nexport type ApprovalEntityType = (typeof APPROVAL_ENTITY_TYPES)[number]\n\n/**\n * One entity that an approval request concerns.\n *\n * A use case reports these from its payload, and the service writes one row for\n * each into `approval_job_entity`. That row is what makes a request findable by\n * an entity it touches, without a text search over the payload: a cluster-move\n * request names its cluster, its target organization AND its source\n * organization, so it shows on all three detail pages. The `summary` still\n * carries the words a reader sees; this carries only the ids a page matches.\n */\nexport interface ApprovalEntityRef {\n type: ApprovalEntityType\n id: string\n}\n\n/**\n * How long a run may go quiet before a reader calls it stalled.\n *\n * The pod that runs an action writes its progress and renews its lease on one\n * timer, so a healthy run touches the row well inside this window. A row that\n * is `executing` and older than this held a pod that stopped, and the\n * reconciler of control-backend is on its way to it.\n *\n * It lives here, and not in the config of the service, because a READER needs\n * it: the browser must decide what to show without a second call, and a number\n * that only the backend knew would make the two disagree. `ACTION_LEASE_MS` in\n * `config/index.ts` is held below this on purpose.\n */\nexport const APPROVAL_RUN_STALE_MS = 120_000\n\n/**\n * What an action reports while it runs.\n *\n * This is what makes a long action watchable. Every field is in the DATABASE\n * and not in the answer to the call that started the run, so three readers see\n * the same thing: the person who pressed the button, the same person after a\n * reload, and a second person who opens the request.\n *\n * `total` can be 0 while an action counts its targets, and it stays 0 for an\n * action that cannot count them. A reader must then show that it runs, and no\n * percentage.\n */\nexport interface ApprovalProgress {\n /** Targets in total. 0 means the action did not say. */\n total: number\n /** Targets finished, whatever the outcome of each one. */\n done: number\n /** Targets that finished with an error. Part of `done`. */\n failed: number\n /** One short line for a person, such as the step that runs now. */\n note?: string\n /** An ISO timestamp: when the run started. */\n startedAt: string\n /** An ISO timestamp: when the run last wrote anything. */\n updatedAt: string\n}\n\n/** The share of the work that is finished, or `undefined` with no total. */\nexport function progressFraction(\n progress: ApprovalProgress | undefined,\n): number | undefined {\n if (!progress || progress.total <= 0) {\n return undefined\n }\n return Math.min(1, progress.done / progress.total)\n}\n\n/**\n * Reports whether a running request went quiet.\n *\n * True means that the pod which held the run stopped, or lost the row. It does\n * NOT mean that the action failed: the reconciler either runs it again, or it\n * writes `failed` so that a person can. See `APPROVAL_RUN_STALE_MS`.\n */\nexport function isRunStalled(job: ApprovalJobDto, now: Date): boolean {\n if (job.status !== 'executing') {\n return false\n }\n const lastSign = job.progress?.updatedAt ?? job.executingSince\n if (!lastSign) {\n return false\n }\n return now.getTime() - new Date(lastSign).getTime() > APPROVAL_RUN_STALE_MS\n}\n\n/** One approval request, as the API returns it. */\nexport interface ApprovalJobDto {\n id: string\n type: string\n dedupeKey?: string\n payload: Record<string, unknown>\n /**\n * The payload as labelled fields. See `ApprovalSummaryField`.\n *\n * The use case builds it when the request is opened AND every time the\n * request is read, so a field that a later version of the use case adds\n * appears on a request that is already open.\n */\n summary: ApprovalSummaryField[]\n /** Why the person opened the request. Some use cases demand one. */\n reason?: string\n createdBy: ApprovalActor\n acks: ApprovalAck[]\n /**\n * How many approvals THIS request needs.\n *\n * It is on the request and not only on the use case, because the person who\n * opens one can ask for more than the floor of the use case. A bulk\n * operation over 3000 clusters is the same action as one over 3, and it can\n * still deserve a third pair of eyes. `ApprovalUseCaseDto.minAcks` is the\n * floor that a caller cannot go below.\n */\n requiredAcks: number\n /**\n * What a person must hold to approve, reject or run THIS request.\n *\n * It is on the request and not only on the use case, because a payload can\n * raise the guard: a generation update with `yoloForceUpdate` needs the yolo\n * permission on top of the base one, and the same use case without the flag\n * does not. The set is computed ONE time, when the request is opened, so it\n * is also the record of what the request was guarded by.\n *\n * A person needs EVERY permission in the set, not one of them.\n */\n requiredPermissions: string[]\n executionMode: ApprovalExecutionMode\n actionMode: ApprovalActionMode\n status: ApprovalJobStatus\n closedBy?: ApprovalActor\n closedReason?: string\n /** An ISO timestamp. */\n expiresAt: string\n /**\n * An ISO timestamp: when the current run took the request.\n *\n * It is set every time a run starts, so a run that the reconciler starts\n * again moves it. `attempts` says how many runs there were.\n */\n executingSince?: string\n /** How many times a run started. A recovery raises it. */\n attempts: number\n /**\n * What the action reports while it runs. See `ApprovalProgress`.\n *\n * It stays on the row after the run, so the record of a finished run says\n * how many targets it touched and how many refused.\n */\n progress?: ApprovalProgress\n executedAt?: string\n executionError?: string\n /**\n * What the action reported when it ran.\n *\n * The shape belongs to the use case. An action over many targets puts the\n * result of each target here, which is the difference between \"it failed\"\n * and \"it did 2998 of 3000, and these two refused\".\n */\n executionResult?: Record<string, unknown>\n createdAt: string\n updatedAt: string\n}\n\n/**\n * What a use case is, as the API reports it.\n *\n * The frontend needs `requiredPermission` to run the same rule as the backend.\n * PR #9301 kept this registry a second time, by hand, in the frontend. A\n * registry that the server owns means a new use case needs no frontend deploy.\n */\nexport interface ApprovalUseCaseDto {\n type: string\n /** A short name for a person to read. */\n label: string\n /** One sentence: what the action does, and what it cannot undo. */\n description: string\n /** The approvals a new request asks for when the caller names no number. */\n defaultAcks: number\n /**\n * The floor. A caller can ask for more approvals, never for fewer.\n *\n * It is a separate number from `defaultAcks` because the two answer\n * different questions: the default is what the form offers, and the floor is\n * what the service refuses to go below.\n */\n minAcks: number\n ttlDays: number\n executionMode: ApprovalExecutionMode\n /** See `ApprovalActionMode`. An action over many targets is `background`. */\n actionMode: ApprovalActionMode\n /**\n * True when a run that was interrupted can start again by itself.\n *\n * It is a promise about the ACTION, and the reconciler reads it. Set it only\n * when the action can run a second time over the same payload and do no harm\n * twice: it must read what the first run already finished, out of\n * `ApprovalJobDto.executionResult`, and skip it.\n *\n * False, the default, is the safe answer. An interrupted run then lands in\n * `failed`, which a person can run again from the detail page, and a person\n * decides whether running it twice is safe.\n */\n resumable: boolean\n /**\n * The permission that every request of this use case needs to approve,\n * reject or run. A payload can add more. See\n * `ApprovalJobDto.requiredPermissions`, which is the effective set.\n *\n * It is also the permission to SEE a request of this use case, because a\n * person who cannot act on one has no reason to read it. The person who\n * opened a request always sees that request.\n *\n * The one exception to \"or run\" is a use case with `openToEveryone`. It has\n * no approval, so this permission only decides who sees the requests of\n * other people. Any signed-in person can open and run such a request.\n */\n requiredPermission: string\n /**\n * The permission to open a request. Absent means any signed-in Camundi.\n *\n * Set it when the pool that can ASK must be as small as the pool that can\n * approve. Leave it absent when the approvals alone are the guard, and the\n * proposal is not.\n */\n createPermission?: string\n /** True when a request cannot be opened without a reason. */\n reasonRequired: boolean\n /**\n * True when the ACTION needs the email address of the person who asked.\n *\n * A token can carry no address, and the row then stores\n * `UNKNOWN_ACTOR_EMAIL`. An action that sends that placeholder to another\n * service asks it to find a user that does not exist, so the request can\n * only fail \u2014 and it fails at the END, after other people spent their\n * approvals on it. A use case that carries the creator into its call sets\n * this, and `canCreate` then refuses such a caller at the start.\n *\n * `extend-trial` and `send-to-expired-trial` are two: both send the creator\n * to accounts in an `ApprovalM2mActor`, and accounts reads the permissions\n * of that person again before it acts.\n *\n * `move-cluster-org` does NOT set this. Its envelope reaches console, which\n * reads the user id alone and needs no address.\n */\n creatorEmailRequired?: boolean\n /**\n * A use case with no approval that any signed-in person can open AND run.\n *\n * A request with a floor of zero runs when it is opened, so `canCreate`\n * asks the person to hold `requiredPermission`. This flag lifts that one\n * rule, for an action whose run needs no permission of the person. Set it\n * only when two things hold:\n *\n * - Something else bounds how often a person can ask.\n * - The service that runs the action authorizes the person again at its\n * source, so that nobody can change what is not theirs. The action can\n * touch an organization only when that check lets the person change it.\n *\n * `create-personal-organisation` and the two use cases of customer hardware\n * sizing set it. The two use cases of customer hardware sizing do the second\n * check in two ways:\n *\n * - Creating a plan, and unlinking a plan from one organization, read the\n * role of the person in that organization. Only an OWNER passes.\n * - Deleting a plan reads no role. Console checks that the person created\n * the plan. Accounts reads the organizations that the person is a member\n * of, in any role, and removes the plan from their lists.\n */\n openToEveryone?: boolean\n}\n"],
|
|
5
|
-
"mappings": "AA0BO,MAAM,wBAAwB;AAAA,EACnC;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AACF;AAmBO,MAAM,yBAAyB;AAAA,EACpC;AAAA,EACA;AAAA,EACA;AACF;AAUO,MAAM,6BAA6B;AAcnC,MAAM,yBAAyB;AAU/B,MAAM,uBAAuB;AAAA,EAClC;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AACF;AAOO,MAAM,wBAGT,EAAE,MAAM,aAAa,OAAO,OAAO;AAShC,MAAM,6BAA6B;AAUnC,MAAM,oBAAoB;AAS1B,MAAM,6BAA6B;AAoBnC,MAAM,6BAA6B;AA0HnC,MAAM,+BAA+B;AAAA,EAC1C;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AACF;
|
|
4
|
+
"sourcesContent": ["/*\n * Copyright Camunda Services GmbH and/or licensed to Camunda Services GmbH\n * under one or more contributor license agreements. Licensed under a commercial license.\n * You may not use this file except in compliance with the commercial license.\n */\n\n/**\n * The wire types of the generic approval mechanism.\n *\n * This file holds no logic and no dependency, because three consumers read it:\n * control-backend, control-frontend and cloudbot. The rules that read these\n * types are in `../approvals/policy.js`, and they are pure for the same reason.\n */\n\n/**\n * Every state that an approval request can hold.\n *\n * A `const` tuple, not an enum, so it is both the union type and the list that\n * validates a status filter at run time.\n *\n * The path of a request: `pending` until it reaches the threshold. Then\n * `executing` (automatic mode) or `approved` (explicit mode, which waits for a\n * person to press the button). `executed` or `failed` after the action ran. A\n * request that never reaches the threshold ends `rejected`, `withdrawn` or\n * `expired`.\n */\nexport const APPROVAL_JOB_STATUSES = [\n 'pending',\n 'approved',\n 'executing',\n 'executed',\n 'failed',\n 'rejected',\n 'withdrawn',\n 'expired',\n] as const\n\nexport type ApprovalJobStatus = (typeof APPROVAL_JOB_STATUSES)[number]\n\n/**\n * The states in which the action of a request is still COMING.\n *\n * `pending` waits for approvals, `approved` waits for a person to press the\n * button, and `executing` is running now. Each of them can still change the\n * world, so two requests for one target must not be in these states together.\n * `dedupeKey` reads this set for that reason.\n *\n * `failed` is NOT here, although a person can run a failed request again. A\n * failed request runs only when a person presses the button, and that person\n * sees the row. Blocking a new request on a failed one would also trap the\n * key: `canWithdraw` accepts `pending` alone, so nobody could close it.\n *\n * `executed`, `rejected`, `withdrawn` and `expired` are the end of a request.\n */\nexport const APPROVAL_LIVE_STATUSES = [\n 'pending',\n 'approved',\n 'executing',\n] as const satisfies readonly ApprovalJobStatus[]\n\n/**\n * How many requests one page of the list holds when the caller asks for no\n * number.\n *\n * The list is a work queue that a Camundi reads, so the page is large: a\n * person wants the whole queue and not ten rows at a time. What the number is\n * for is the ceiling below.\n */\nexport const APPROVAL_PAGE_SIZE_DEFAULT = 500\n\n/**\n * The largest page that the service builds, and the largest that a caller may\n * ask for. The API answers 400 above it.\n *\n * The list had no limit at all. One authenticated caller could then make the\n * service read the whole table into memory, serialize it, and do it again, so\n * the cost of a request grew with the age of the service and with nothing that\n * the caller had to pay for. A ceiling turns that into a fixed cost.\n *\n * It is HERE and not only in the service, because the view must know it: a\n * page that asked for more would get a 400 instead of rows.\n */\nexport const APPROVAL_PAGE_SIZE_MAX = 2000\n\n/**\n * The columns that the queue can be ordered by.\n *\n * A NAME and not an SQL expression: the repository maps each one, so a caller\n * can never name a column that this list does not hold. `status` orders by the\n * EFFECTIVE status, because a `pending` row whose time ran out reads as\n * `expired` everywhere else.\n */\nexport const APPROVAL_SORT_FIELDS = [\n 'createdAt',\n 'expiresAt',\n 'status',\n 'type',\n 'createdBy',\n] as const\n\nexport type ApprovalSortField = (typeof APPROVAL_SORT_FIELDS)[number]\n\nexport type ApprovalSortOrder = 'asc' | 'desc'\n\n/** The default order of the queue: the newest request first. */\nexport const APPROVAL_SORT_DEFAULT: {\n sort: ApprovalSortField\n order: ApprovalSortOrder\n} = { sort: 'createdAt', order: 'desc' }\n\n/**\n * The longest reason that a request, a rejection or a withdrawal accepts.\n *\n * ONE number, because three routes of control-backend hold it and three fields\n * of control-frontend must stop there. A field that let a person write more\n * than the schema accepts turns their sentence into a 400 after they wrote it.\n */\nexport const APPROVAL_REASON_MAX_LENGTH = 2000\n\n/**\n * The largest number of approvals that a caller can ask for.\n *\n * A request that asks for 400 approvals can never reach them, so it is a\n * request that only fills the table and expires. The ceiling turns that into a\n * 400 at the moment a person types it. It is HERE because the form of the\n * bulk operation must stop at the same number as the route.\n */\nexport const APPROVAL_ACKS_MAX = 10\n\n/**\n * The longest search text that the list accepts.\n *\n * A search runs `ILIKE` over the payload of every visible row, so the cost of\n * one call follows the length of the text. Nothing a person types to find a\n * request is near this.\n */\nexport const APPROVAL_SEARCH_MAX_LENGTH = 200\n\n/**\n * The payload field that names the organization a request acts on.\n *\n * It is a CONVENTION, and this constant is what makes the convention readable\n * from both sides. A use case whose action hits one organization puts the id of\n * that organization in this field, and `GET /api/approvals?orgId=\u2026` then finds\n * the request with no knowledge of the use case. The filter reads this one\n * field of the payload, so it matches the whole id and nothing else. The free\n * text search reads the payload as TEXT, which also matches an id that only\n * appears inside another field, and it cannot answer \"the requests of this\n * organization\".\n *\n * The organization page of control-frontend does NOT read this field. It asks\n * the entity-link filter (`entityType=org`), which reads a row that\n * `relatedEntities` of a use case writes \u2014 see `ApprovalEntityRef`. The summary\n * is separate again: the `org` field of a `summarize` result is what a READER\n * follows.\n */\nexport const APPROVAL_PAYLOAD_ORG_FIELD = 'orgId'\n\n/**\n * How many requests each status holds, for the filters of the queue.\n *\n * Every number answers the SAME question as the list beside it: the counts are\n * built with the visibility rule, the action filter and the search text of the\n * caller, and with the lazy expiry. A count that ignored one of those would\n * send a person to a filter that then shows nothing.\n */\nexport interface ApprovalStatusCountsDto {\n /** Every request that matches, whatever its status. */\n all: number\n /** One number for each status. A status with no request is 0, never absent. */\n byStatus: Record<ApprovalJobStatus, number>\n}\n\n/**\n * What happens when a request reaches its threshold.\n *\n * `auto` runs the action immediately. `explicit` holds the request at\n * `approved` and waits for a person to run it.\n */\nexport type ApprovalExecutionMode = 'auto' | 'explicit'\n\n/**\n * WHERE the action runs. It is a separate question from who starts it.\n *\n * - `inline` runs the action inside the call that started it, and the answer\n * already carries the outcome. Right for one call to another service.\n * - `background` answers as soon as the request is claimed, and the action\n * runs on. It reports into `ApprovalJobDto.progress`, and the row is the\n * only place that holds the progress, so a reload and a second person read\n * the same numbers. A pod that stops loses the run, and the reconciler of\n * control-backend recovers the row.\n *\n * An action over thousands of targets MUST be `background`. `inline` would\n * hold one HTTP request for the whole run, and the ingress, the load balancer\n * and the browser each have their own deadline before it finishes.\n *\n * An `inline` action must not read `context.signal`. The runner trusts the\n * result of an `inline` action that returns after a drain, and it would count\n * a partial run as `executed`. An action that stops between targets is\n * `background`.\n */\nexport type ApprovalActionMode = 'inline' | 'background'\n\n/**\n * A person, as an approval request records them.\n *\n * Both keys are kept. The machine then never has to choose one identity key,\n * which is what split the earlier acknowledgement flows: some held an email and\n * some held a user id, and the two could not be compared.\n */\nexport interface ApprovalActor {\n userId: string\n email: string\n}\n\nexport interface ApprovalAck extends ApprovalActor {\n /** An ISO timestamp. It is in a json column, so it is a string, not a Date. */\n date: string\n}\n\n/**\n * Who asked for an action, and who agreed to it.\n *\n * Every route of `api/admin/approvals` takes this envelope, and control-backend\n * builds it from the request that it runs. The envelope exists because the\n * token cannot carry it: the call is machine to machine, so `sub` holds the id\n * of the Auth0 application and not a person. A service that reads the token\n * alone therefore writes \"control-backend\" into its audit record, which hides\n * the two Camundis that the whole mechanism exists to record.\n *\n * `approvedBy` is a list, because a use case can need more than one approval,\n * and the record must name all of them. It can also be EMPTY: how many\n * approvals an action needs is a number of the use case, and `move-cluster-org`\n * holds zero on purpose. The person in `requestedBy` is never in the list: the\n * four-eyes rule is that the person who asks is not the person who agrees, and\n * control-backend holds that rule.\n *\n * Each person carries both keys of `ApprovalActor`. The email is what a route\n * uses to ask Auth0 about the person, and the user id is what an audit record\n * holds, because every other record of the fleet holds an Auth0 `sub`.\n *\n * CAUTION: The envelope is a CLAIM of the caller, and not proof. A route that\n * acts on it must ask Auth0 again whether `requestedBy` may do the action.\n * That means the permission of the action. For a use case with\n * `openToEveryone`, it means that the person is a Camundi, because no\n * permission runs that action. `api/admin/approvals` in accounts-backend does\n * that. See the note on `M2M_CONTROL_APPROVALS`.\n */\nexport interface ApprovalM2mActor {\n /** The id of the approval request, to join the records of both services. */\n requestId: string\n /** The Camundi who opened the request. */\n requestedBy: ApprovalActor\n /** The Camundis who approved it. Empty when the use case needs none. */\n approvedBy: ApprovalActor[]\n}\n\n/**\n * What one value of a summary field is.\n *\n * `text` is what a person reads. `id` is what a link points at, and it is\n * absent when the kind names no entity. The two are separate because the text\n * is a COPY that the request keeps: an organization that gets a new name after\n * the request was opened must still read as the organization that the person\n * chose.\n */\nexport interface ApprovalSummaryValue {\n text: string\n id?: string\n}\n\n/**\n * How a reader must render one field of a summary.\n *\n * `org`, `cluster` and `user` name an entity, so a reader can link to it and\n * can resolve a fresh name. The others are plain: `date` is an ISO timestamp,\n * and `code` is a value that must keep its characters, such as a json fragment.\n */\nexport const APPROVAL_SUMMARY_FIELD_KINDS = [\n 'text',\n 'number',\n 'boolean',\n 'date',\n 'org',\n 'cluster',\n 'user',\n 'code',\n] as const\n\nexport type ApprovalSummaryFieldKind =\n (typeof APPROVAL_SUMMARY_FIELD_KINDS)[number]\n\n/**\n * One labelled field of the payload of a request.\n *\n * This is what makes ONE view able to show EVERY use case. The payload of a\n * request is an object of anything, so a generic view can only print it as\n * json. The use case turns it into labelled fields here, and the view renders\n * a field by its kind: it links an `org`, it formats a `date`, and it lists\n * 300 clusters as 300 links.\n *\n * `values` is always an array. A field that holds one value holds an array of\n * one, so a reader needs no branch for \"one or many\".\n */\nexport interface ApprovalSummaryField {\n label: string\n kind: ApprovalSummaryFieldKind\n values: ApprovalSummaryValue[]\n /**\n * The values that this request replaces, for a field that changes. A view\n * shows them as removed beside `values` as added. A field with no\n * `previous` is not a change.\n */\n previous?: ApprovalSummaryValue[]\n /** The count of `previous`, when the list cut it. Like `total`, for `previous`. */\n previousTotal?: number\n /**\n * How many values the field holds, when `values` holds only the first of\n * them. The list route cuts every field to `APPROVAL_LIST_SUMMARY_VALUES_MAX`\n * values. The detail route sends every value and no `total`.\n */\n total?: number\n}\n\n/**\n * How many values of one summary field a row of the list carries.\n *\n * A bulk operation names up to 3000 clusters in one field. A page of 100 such\n * rows would carry 300,000 values that no row shows. The view shows at most\n * 12 values of a field, so the list stops there, and `total` holds the count.\n */\nexport const APPROVAL_LIST_SUMMARY_VALUES_MAX = 12\n\n/**\n * The kinds of entity that an approval request can concern.\n *\n * These are the entities that a request is findable by: the org and cluster\n * detail pages ask \"which requests touch me\", and the answer reads a row for\n * each entity. It is a subset of `APPROVAL_SUMMARY_FIELD_KINDS` \u2014 the kinds that\n * name an entity \u2014 because only those carry an id that a page can match.\n */\nexport const APPROVAL_ENTITY_TYPES = ['cluster', 'org', 'user'] as const\n\nexport type ApprovalEntityType = (typeof APPROVAL_ENTITY_TYPES)[number]\n\n/**\n * One entity that an approval request concerns.\n *\n * A use case reports these from its payload, and the service writes one row for\n * each into `approval_job_entity`. That row is what makes a request findable by\n * an entity it touches, without a text search over the payload: a cluster-move\n * request names its cluster, its target organization AND its source\n * organization, so it shows on all three detail pages. The `summary` still\n * carries the words a reader sees; this carries only the ids a page matches.\n */\nexport interface ApprovalEntityRef {\n type: ApprovalEntityType\n id: string\n}\n\n/**\n * How long a run may go quiet before a reader calls it stalled.\n *\n * The pod that runs an action writes its progress and renews its lease on one\n * timer, so a healthy run touches the row well inside this window. A row that\n * is `executing` and older than this held a pod that stopped, and the\n * reconciler of control-backend is on its way to it.\n *\n * It lives here, and not in the config of the service, because a READER needs\n * it: the browser must decide what to show without a second call, and a number\n * that only the backend knew would make the two disagree. `ACTION_LEASE_MS` in\n * `config/index.ts` is held below this on purpose.\n */\nexport const APPROVAL_RUN_STALE_MS = 120_000\n\n/**\n * What an action reports while it runs.\n *\n * This is what makes a long action watchable. Every field is in the DATABASE\n * and not in the answer to the call that started the run, so three readers see\n * the same thing: the person who pressed the button, the same person after a\n * reload, and a second person who opens the request.\n *\n * `total` can be 0 while an action counts its targets, and it stays 0 for an\n * action that cannot count them. A reader must then show that it runs, and no\n * percentage.\n */\nexport interface ApprovalProgress {\n /** Targets in total. 0 means the action did not say. */\n total: number\n /** Targets finished, whatever the outcome of each one. */\n done: number\n /** Targets that finished with an error. Part of `done`. */\n failed: number\n /** One short line for a person, such as the step that runs now. */\n note?: string\n /** An ISO timestamp: when the run started. */\n startedAt: string\n /** An ISO timestamp: when the run last wrote anything. */\n updatedAt: string\n}\n\n/** The share of the work that is finished, or `undefined` with no total. */\nexport function progressFraction(\n progress: ApprovalProgress | undefined,\n): number | undefined {\n if (!progress || progress.total <= 0) {\n return undefined\n }\n return Math.min(1, progress.done / progress.total)\n}\n\n/**\n * Reports whether a running request went quiet.\n *\n * True means that the pod which held the run stopped, or lost the row. It does\n * NOT mean that the action failed: the reconciler either runs it again, or it\n * writes `failed` so that a person can. See `APPROVAL_RUN_STALE_MS`.\n */\nexport function isRunStalled(job: ApprovalJobDto, now: Date): boolean {\n if (job.status !== 'executing') {\n return false\n }\n const lastSign = job.progress?.updatedAt ?? job.executingSince\n if (!lastSign) {\n return false\n }\n return now.getTime() - new Date(lastSign).getTime() > APPROVAL_RUN_STALE_MS\n}\n\n/** One approval request, as the API returns it. */\nexport interface ApprovalJobDto {\n id: string\n type: string\n dedupeKey?: string\n payload: Record<string, unknown>\n /**\n * The payload as labelled fields. See `ApprovalSummaryField`.\n *\n * The use case builds it when the request is opened AND every time the\n * request is read, so a field that a later version of the use case adds\n * appears on a request that is already open.\n */\n summary: ApprovalSummaryField[]\n /** Why the person opened the request. Some use cases demand one. */\n reason?: string\n createdBy: ApprovalActor\n acks: ApprovalAck[]\n /**\n * How many approvals THIS request needs.\n *\n * It is on the request and not only on the use case, because the person who\n * opens one can ask for more than the floor of the use case. A bulk\n * operation over 3000 clusters is the same action as one over 3, and it can\n * still deserve a third pair of eyes. `ApprovalUseCaseDto.minAcks` is the\n * floor that a caller cannot go below.\n */\n requiredAcks: number\n /**\n * What a person must hold to approve, reject or run THIS request.\n *\n * It is on the request and not only on the use case, because a payload can\n * raise the guard: a generation update with `yoloForceUpdate` needs the yolo\n * permission on top of the base one, and the same use case without the flag\n * does not. The set is computed ONE time, when the request is opened, so it\n * is also the record of what the request was guarded by.\n *\n * A person needs EVERY permission in the set, not one of them.\n */\n requiredPermissions: string[]\n executionMode: ApprovalExecutionMode\n actionMode: ApprovalActionMode\n status: ApprovalJobStatus\n closedBy?: ApprovalActor\n closedReason?: string\n /** An ISO timestamp. */\n expiresAt: string\n /**\n * An ISO timestamp: when the current run took the request.\n *\n * It is set every time a run starts, so a run that the reconciler starts\n * again moves it. `attempts` says how many runs there were.\n */\n executingSince?: string\n /** How many times a run started. A recovery raises it. */\n attempts: number\n /**\n * What the action reports while it runs. See `ApprovalProgress`.\n *\n * It stays on the row after the run, so the record of a finished run says\n * how many targets it touched and how many refused.\n */\n progress?: ApprovalProgress\n executedAt?: string\n executionError?: string\n /**\n * What the action reported when it ran.\n *\n * The shape belongs to the use case. An action over many targets puts the\n * result of each target here, which is the difference between \"it failed\"\n * and \"it did 2998 of 3000, and these two refused\".\n */\n executionResult?: Record<string, unknown>\n createdAt: string\n updatedAt: string\n}\n\n/**\n * What a use case is, as the API reports it.\n *\n * The frontend needs `requiredPermission` to run the same rule as the backend.\n * PR #9301 kept this registry a second time, by hand, in the frontend. A\n * registry that the server owns means a new use case needs no frontend deploy.\n */\nexport interface ApprovalUseCaseDto {\n type: string\n /** A short name for a person to read. */\n label: string\n /** One sentence: what the action does, and what it cannot undo. */\n description: string\n /** The approvals a new request asks for when the caller names no number. */\n defaultAcks: number\n /**\n * The floor. A caller can ask for more approvals, never for fewer.\n *\n * It is a separate number from `defaultAcks` because the two answer\n * different questions: the default is what the form offers, and the floor is\n * what the service refuses to go below.\n */\n minAcks: number\n ttlDays: number\n executionMode: ApprovalExecutionMode\n /** See `ApprovalActionMode`. An action over many targets is `background`. */\n actionMode: ApprovalActionMode\n /**\n * True when a run that was interrupted can start again by itself.\n *\n * It is a promise about the ACTION, and the reconciler reads it. Set it only\n * when the action can run a second time over the same payload and do no harm\n * twice: it must read what the first run already finished, out of\n * `ApprovalJobDto.executionResult`, and skip it.\n *\n * False, the default, is the safe answer. An interrupted run then lands in\n * `failed`, which a person can run again from the detail page, and a person\n * decides whether running it twice is safe.\n */\n resumable: boolean\n /**\n * The permission that every request of this use case needs to approve,\n * reject or run. A payload can add more. See\n * `ApprovalJobDto.requiredPermissions`, which is the effective set.\n *\n * It is also the permission to SEE a request of this use case, because a\n * person who cannot act on one has no reason to read it. The person who\n * opened a request always sees that request.\n *\n * The one exception to \"or run\" is a use case with `openToEveryone`. It has\n * no approval, so this permission only decides who sees the requests of\n * other people. Any signed-in person can open and run such a request.\n */\n requiredPermission: string\n /**\n * The permission to open a request. Absent means any signed-in Camundi.\n *\n * Set it when the pool that can ASK must be as small as the pool that can\n * approve. Leave it absent when the approvals alone are the guard, and the\n * proposal is not.\n */\n createPermission?: string\n /** True when a request cannot be opened without a reason. */\n reasonRequired: boolean\n /**\n * True when the ACTION needs the email address of the person who asked.\n *\n * A token can carry no address, and the row then stores\n * `UNKNOWN_ACTOR_EMAIL`. An action that sends that placeholder to another\n * service asks it to find a user that does not exist, so the request can\n * only fail \u2014 and it fails at the END, after other people spent their\n * approvals on it. A use case that carries the creator into its call sets\n * this, and `canCreate` then refuses such a caller at the start.\n *\n * `extend-trial` and `send-to-expired-trial` are two: both send the creator\n * to accounts in an `ApprovalM2mActor`, and accounts reads the permissions\n * of that person again before it acts.\n *\n * `move-cluster-org` does NOT set this. Its envelope reaches console, which\n * reads the user id alone and needs no address.\n */\n creatorEmailRequired?: boolean\n /**\n * A use case with no approval that any signed-in person can open AND run.\n *\n * A request with a floor of zero runs when it is opened, so `canCreate`\n * asks the person to hold `requiredPermission`. This flag lifts that one\n * rule, for an action whose run needs no permission of the person. Set it\n * only when two things hold:\n *\n * - Something else bounds how often a person can ask.\n * - The service that runs the action authorizes the person again at its\n * source, so that nobody can change what is not theirs. The action can\n * touch an organization only when that check lets the person change it.\n *\n * `create-personal-organisation` and the two use cases of customer hardware\n * sizing set it. The two use cases of customer hardware sizing do the second\n * check in two ways:\n *\n * - Creating a plan, and unlinking a plan from one organization, read the\n * role of the person in that organization. Only an OWNER passes.\n * - Deleting a plan reads no role. Console checks that the person created\n * the plan. Accounts reads the organizations that the person is a member\n * of, in any role, and removes the plan from their lists.\n */\n openToEveryone?: boolean\n}\n"],
|
|
5
|
+
"mappings": "AA0BO,MAAM,wBAAwB;AAAA,EACnC;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AACF;AAmBO,MAAM,yBAAyB;AAAA,EACpC;AAAA,EACA;AAAA,EACA;AACF;AAUO,MAAM,6BAA6B;AAcnC,MAAM,yBAAyB;AAU/B,MAAM,uBAAuB;AAAA,EAClC;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AACF;AAOO,MAAM,wBAGT,EAAE,MAAM,aAAa,OAAO,OAAO;AAShC,MAAM,6BAA6B;AAUnC,MAAM,oBAAoB;AAS1B,MAAM,6BAA6B;AAoBnC,MAAM,6BAA6B;AA0HnC,MAAM,+BAA+B;AAAA,EAC1C;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AACF;AA4CO,MAAM,mCAAmC;AAUzC,MAAM,wBAAwB,CAAC,WAAW,OAAO,MAAM;AAgCvD,MAAM,wBAAwB;AA8B9B,SAAS,iBACd,UACoB;AACpB,MAAI,CAAC,YAAY,SAAS,SAAS,GAAG;AACpC,WAAO;AAAA,EACT;AACA,SAAO,KAAK,IAAI,GAAG,SAAS,OAAO,SAAS,KAAK;AACnD;AASO,SAAS,aAAa,KAAqB,KAAoB;AACpE,MAAI,IAAI,WAAW,aAAa;AAC9B,WAAO;AAAA,EACT;AACA,QAAM,WAAW,IAAI,UAAU,aAAa,IAAI;AAChD,MAAI,CAAC,UAAU;AACb,WAAO;AAAA,EACT;AACA,SAAO,IAAI,QAAQ,IAAI,IAAI,KAAK,QAAQ,EAAE,QAAQ,IAAI;AACxD;",
|
|
6
6
|
"names": []
|
|
7
7
|
}
|
|
@@ -1,3 +1,4 @@
|
|
|
1
|
+
import type { ClusterTtlDto } from '../types/ClusterTtl.type.js';
|
|
1
2
|
import type { ClusterPlanTypeDto } from './ClusterPlanType.dto.js';
|
|
2
3
|
/**
|
|
3
4
|
* The Connectors secrets filter mode
|
|
@@ -180,6 +181,17 @@ export interface CommonClusterDto {
|
|
|
180
181
|
multiTenancyEnabled?: boolean;
|
|
181
182
|
sessionMaxInactiveIntervalMinutes?: number;
|
|
182
183
|
sessionHeartbeatEnabled?: boolean;
|
|
184
|
+
/**
|
|
185
|
+
* The cluster TTL. Present only on dev and int (never on prod), and only
|
|
186
|
+
* when the reader is one of these:
|
|
187
|
+
*
|
|
188
|
+
* - A member of the org for whom the flag `console.clusterTtl` is on.
|
|
189
|
+
* - A Camundi with `canReadAllClusterInfo`, also while the flag is off.
|
|
190
|
+
*
|
|
191
|
+
* Thus an absent `ttl` means "not shown", not "unlimited". See
|
|
192
|
+
* `ClusterTtlDto`.
|
|
193
|
+
*/
|
|
194
|
+
ttl?: ClusterTtlDto;
|
|
183
195
|
externalIdpEnabled?: boolean;
|
|
184
196
|
externalIdpConfig?: ExternalIdpConfig;
|
|
185
197
|
secretSourceProvisioned?: boolean;
|
|
@@ -1,4 +1,5 @@
|
|
|
1
1
|
import type { CamundaClusterStage } from '../types/CamundaClusterLabels.type.js';
|
|
2
|
+
import type { ClusterTtlDto } from '../types/ClusterTtl.type.js';
|
|
2
3
|
import type { SalesPlanType } from '../types/SalesPlanType.type.js';
|
|
3
4
|
import type { LicensingModelType } from './Organization.dto.js';
|
|
4
5
|
/** Generic cursor-paginated response. `nextCursor === null` on the last page. */
|
|
@@ -192,6 +193,13 @@ export interface ClusterListItemV2Dto {
|
|
|
192
193
|
externalMonitoringEnabled?: boolean;
|
|
193
194
|
/** The cluster has a `secure_connectivity` row (AWS PrivateLink). */
|
|
194
195
|
privateConnectivityEnabled?: boolean;
|
|
196
|
+
/**
|
|
197
|
+
* The cluster TTL. Absent where `CommonClusterDto.ttl` is absent for the
|
|
198
|
+
* same reader: on every stage other than dev and int, prod included. Also
|
|
199
|
+
* absent for a member of the org on the org clusters route, and on an older
|
|
200
|
+
* console-backend.
|
|
201
|
+
*/
|
|
202
|
+
ttl?: ClusterTtlDto;
|
|
195
203
|
}
|
|
196
204
|
/** Detail extends the list shape; richer fields are added in Phase 3. */
|
|
197
205
|
export type ClusterDetailV2Dto = ClusterListItemV2Dto;
|
|
@@ -361,8 +369,20 @@ export interface ListClustersV2Params extends CursorParams {
|
|
|
361
369
|
* `filter.status` resolves K8s state to a cluster id set.
|
|
362
370
|
*/
|
|
363
371
|
activity?: ClusterActivityBucket[];
|
|
372
|
+
/**
|
|
373
|
+
* `expiring` keeps the clusters whose TTL has an expiry, `unlimited` the
|
|
374
|
+
* clusters whose TTL is unlimited.
|
|
375
|
+
*/
|
|
376
|
+
ttl?: ClusterTtlFilter;
|
|
377
|
+
/**
|
|
378
|
+
* ISO-8601 upper bound on the TTL expiry. Exclusive, as `createdBefore`
|
|
379
|
+
* is. A cluster with an unlimited TTL never matches.
|
|
380
|
+
*/
|
|
381
|
+
ttlExpiresBefore?: string;
|
|
364
382
|
};
|
|
365
383
|
}
|
|
384
|
+
/** ClusterTtlFilter is the value of `ListClustersV2Params.filter.ttl`. */
|
|
385
|
+
export type ClusterTtlFilter = 'expiring' | 'unlimited';
|
|
366
386
|
export interface ClusterParameterOptionV2Dto {
|
|
367
387
|
id: string;
|
|
368
388
|
name: string;
|
|
@@ -32,6 +32,7 @@ export declare enum AuditEntityAttribute {
|
|
|
32
32
|
CLUSTER_BUSINESS_ID_UNIQUENESS = "Business ID Uniqueness",
|
|
33
33
|
CLUSTER_OPTIONAL_TELEMETRY = "Optional telemetry",
|
|
34
34
|
CLUSTER_NON_SPOT_NODES = "Non-spot nodes",
|
|
35
|
+
CLUSTER_TTL = "Cluster TTL",
|
|
35
36
|
CLUSTER_MULTI_TENANCY = "Multi-tenancy",
|
|
36
37
|
CLUSTER_SESSION_MAX_INACTIVE_INTERVAL = "Session idle timeout",
|
|
37
38
|
CLUSTER_SESSION_HEARTBEAT = "Session heartbeat",
|
|
@@ -33,6 +33,7 @@ var AuditEntityAttribute = /* @__PURE__ */ ((AuditEntityAttribute2) => {
|
|
|
33
33
|
AuditEntityAttribute2["CLUSTER_BUSINESS_ID_UNIQUENESS"] = "Business ID Uniqueness";
|
|
34
34
|
AuditEntityAttribute2["CLUSTER_OPTIONAL_TELEMETRY"] = "Optional telemetry";
|
|
35
35
|
AuditEntityAttribute2["CLUSTER_NON_SPOT_NODES"] = "Non-spot nodes";
|
|
36
|
+
AuditEntityAttribute2["CLUSTER_TTL"] = "Cluster TTL";
|
|
36
37
|
AuditEntityAttribute2["CLUSTER_MULTI_TENANCY"] = "Multi-tenancy";
|
|
37
38
|
AuditEntityAttribute2["CLUSTER_SESSION_MAX_INACTIVE_INTERVAL"] = "Session idle timeout";
|
|
38
39
|
AuditEntityAttribute2["CLUSTER_SESSION_HEARTBEAT"] = "Session heartbeat";
|
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
{
|
|
2
2
|
"version": 3,
|
|
3
3
|
"sources": ["../../src/enums/AuditEntity.enum.ts"],
|
|
4
|
-
"sourcesContent": ["/*\n * Copyright Camunda Services GmbH and/or licensed to Camunda Services GmbH\n * under one or more contributor license agreements. Licensed under a commercial license.\n * You may not use this file except in compliance with the commercial license.\n */\n\n/* eslint-disable no-shadow */\nexport enum AuditEntity {\n CLUSTER = 'Cluster',\n CLIENT = 'Client',\n ALERT_SUBSCRIPTION = 'Alert Subscription',\n API_CLIENT = 'API Client',\n SECURE_CONNECTIVITY_CRD = 'Private networking',\n BYOM_CLIENT = 'External Monitoring Client',\n BYOM_CRD = 'External Monitoring',\n INVITATION = 'Invitation',\n MEMBER = 'Member',\n ORGANIZATION = 'Organization',\n SALES_PLAN = 'SalesPlan',\n CLUSTER_PLAN = 'ClusterPlan',\n GENERATION = 'Generation',\n BILLING = 'Billing',\n USAGE_ALERT = 'Usage Alert',\n ACCEPT_BETA_TERMS = 'Accept Alpha terms',\n TOGGLE_BETA_FEATURE = 'Toggle Alpha feature',\n CONNECTOR_SECRET = 'Connector Secret',\n CLUSTER_MODIFICATION = 'Cluster Modification',\n}\n\nexport enum AuditEntityAttribute {\n CLUSTER_CLUSTER_PLAN = 'ClusterPlan',\n CLUSTER_GENERATION = 'Generation',\n CLUSTER_NAME = 'Name',\n CLUSTER_RBA = 'Resource Based Authorizations',\n CLUSTER_ENFORCE_GROUPS = 'Enforce Group Management',\n CLUSTER_PLAYMODE = 'Cluster Play Mode',\n CLUSTER_MCP_ENABLED = 'MCP Support',\n CLUSTER_SWAGGER = 'Cluster Swagger',\n CLUSTER_SECRETS_FILTER_MODE = 'Secrets Filter Mode',\n CLUSTER_BUSINESS_ID_UNIQUENESS = 'Business ID Uniqueness',\n CLUSTER_OPTIONAL_TELEMETRY = 'Optional telemetry',\n CLUSTER_NON_SPOT_NODES = 'Non-spot nodes',\n CLUSTER_MULTI_TENANCY = 'Multi-tenancy',\n CLUSTER_SESSION_MAX_INACTIVE_INTERVAL = 'Session idle timeout',\n CLUSTER_SESSION_HEARTBEAT = 'Session heartbeat',\n CLUSTER_EXTERNAL_IDP = 'External identity provider',\n CLUSTER_ENABLE_LOW_LATENCY = 'Enable low latency',\n CLUSTER_AUTOUPDATE = 'Auto Update',\n CLUSTER_OWNER = 'Owner',\n CLUSTER_STATUS = 'Status',\n CLUSTER_TASKLIST_V2_ENABLED = 'Taklist V2 Enabled',\n CLUSTER_AUDIT_LOG = 'Audit Log',\n INVITATION_ROLE = 'Role',\n ORGANIZATION_NAME = 'Name',\n SALES_PLAN = 'Plan',\n BILLING_RESERVATION = 'Reservation',\n BILLING_GENERAL_USERS = 'GeneralUsers', // paid cc legaly - only kept for audit logs compatibility\n MEMBER_ROLE = 'Role',\n USAGE_ALERT_THRESHOLD = 'Threshold',\n USAGE_ALERT_STATUS = 'Status',\n CLUSTER_AUDIT_LOGS = 'Audit Logging',\n LLM_BUDGET = 'LLM Budget',\n LLM_KEY_BLOCKED = 'LLM Key Blocked',\n ORGANIZATION_LIMIT = 'Limit',\n ORGANIZATION_CLUSTER_DEFAULT = 'Cluster creation default',\n CLUSTER_MODIFICATION = 'Modification',\n ORGANIZATION_TRIAL_EXPIRES_AT = 'Trial Expiration Date',\n}\n"],
|
|
5
|
-
"mappings": "AAOO,IAAK,cAAL,kBAAKA,iBAAL;AACL,EAAAA,aAAA,aAAU;AACV,EAAAA,aAAA,YAAS;AACT,EAAAA,aAAA,wBAAqB;AACrB,EAAAA,aAAA,gBAAa;AACb,EAAAA,aAAA,6BAA0B;AAC1B,EAAAA,aAAA,iBAAc;AACd,EAAAA,aAAA,cAAW;AACX,EAAAA,aAAA,gBAAa;AACb,EAAAA,aAAA,YAAS;AACT,EAAAA,aAAA,kBAAe;AACf,EAAAA,aAAA,gBAAa;AACb,EAAAA,aAAA,kBAAe;AACf,EAAAA,aAAA,gBAAa;AACb,EAAAA,aAAA,aAAU;AACV,EAAAA,aAAA,iBAAc;AACd,EAAAA,aAAA,uBAAoB;AACpB,EAAAA,aAAA,yBAAsB;AACtB,EAAAA,aAAA,sBAAmB;AACnB,EAAAA,aAAA,0BAAuB;AAnBb,SAAAA;AAAA,GAAA;AAsBL,IAAK,uBAAL,kBAAKC,0BAAL;AACL,EAAAA,sBAAA,0BAAuB;AACvB,EAAAA,sBAAA,wBAAqB;AACrB,EAAAA,sBAAA,kBAAe;AACf,EAAAA,sBAAA,iBAAc;AACd,EAAAA,sBAAA,4BAAyB;AACzB,EAAAA,sBAAA,sBAAmB;AACnB,EAAAA,sBAAA,yBAAsB;AACtB,EAAAA,sBAAA,qBAAkB;AAClB,EAAAA,sBAAA,iCAA8B;AAC9B,EAAAA,sBAAA,oCAAiC;AACjC,EAAAA,sBAAA,gCAA6B;AAC7B,EAAAA,sBAAA,4BAAyB;AACzB,EAAAA,sBAAA,2BAAwB;AACxB,EAAAA,sBAAA,2CAAwC;AACxC,EAAAA,sBAAA,+BAA4B;AAC5B,EAAAA,sBAAA,0BAAuB;AACvB,EAAAA,sBAAA,gCAA6B;AAC7B,EAAAA,sBAAA,wBAAqB;AACrB,EAAAA,sBAAA,mBAAgB;AAChB,EAAAA,sBAAA,oBAAiB;AACjB,EAAAA,sBAAA,iCAA8B;AAC9B,EAAAA,sBAAA,uBAAoB;AACpB,EAAAA,sBAAA,qBAAkB;AAClB,EAAAA,sBAAA,uBAAoB;AACpB,EAAAA,sBAAA,gBAAa;AACb,EAAAA,sBAAA,yBAAsB;AACtB,EAAAA,sBAAA,2BAAwB;AACxB,EAAAA,sBAAA,iBAAc;AACd,EAAAA,sBAAA,2BAAwB;AACxB,EAAAA,sBAAA,wBAAqB;AACrB,EAAAA,sBAAA,wBAAqB;AACrB,EAAAA,sBAAA,gBAAa;AACb,EAAAA,sBAAA,qBAAkB;AAClB,EAAAA,sBAAA,wBAAqB;AACrB,EAAAA,sBAAA,kCAA+B;AAC/B,EAAAA,sBAAA,0BAAuB;AACvB,EAAAA,sBAAA,mCAAgC;
|
|
4
|
+
"sourcesContent": ["/*\n * Copyright Camunda Services GmbH and/or licensed to Camunda Services GmbH\n * under one or more contributor license agreements. Licensed under a commercial license.\n * You may not use this file except in compliance with the commercial license.\n */\n\n/* eslint-disable no-shadow */\nexport enum AuditEntity {\n CLUSTER = 'Cluster',\n CLIENT = 'Client',\n ALERT_SUBSCRIPTION = 'Alert Subscription',\n API_CLIENT = 'API Client',\n SECURE_CONNECTIVITY_CRD = 'Private networking',\n BYOM_CLIENT = 'External Monitoring Client',\n BYOM_CRD = 'External Monitoring',\n INVITATION = 'Invitation',\n MEMBER = 'Member',\n ORGANIZATION = 'Organization',\n SALES_PLAN = 'SalesPlan',\n CLUSTER_PLAN = 'ClusterPlan',\n GENERATION = 'Generation',\n BILLING = 'Billing',\n USAGE_ALERT = 'Usage Alert',\n ACCEPT_BETA_TERMS = 'Accept Alpha terms',\n TOGGLE_BETA_FEATURE = 'Toggle Alpha feature',\n CONNECTOR_SECRET = 'Connector Secret',\n CLUSTER_MODIFICATION = 'Cluster Modification',\n}\n\nexport enum AuditEntityAttribute {\n CLUSTER_CLUSTER_PLAN = 'ClusterPlan',\n CLUSTER_GENERATION = 'Generation',\n CLUSTER_NAME = 'Name',\n CLUSTER_RBA = 'Resource Based Authorizations',\n CLUSTER_ENFORCE_GROUPS = 'Enforce Group Management',\n CLUSTER_PLAYMODE = 'Cluster Play Mode',\n CLUSTER_MCP_ENABLED = 'MCP Support',\n CLUSTER_SWAGGER = 'Cluster Swagger',\n CLUSTER_SECRETS_FILTER_MODE = 'Secrets Filter Mode',\n CLUSTER_BUSINESS_ID_UNIQUENESS = 'Business ID Uniqueness',\n CLUSTER_OPTIONAL_TELEMETRY = 'Optional telemetry',\n CLUSTER_NON_SPOT_NODES = 'Non-spot nodes',\n CLUSTER_TTL = 'Cluster TTL',\n CLUSTER_MULTI_TENANCY = 'Multi-tenancy',\n CLUSTER_SESSION_MAX_INACTIVE_INTERVAL = 'Session idle timeout',\n CLUSTER_SESSION_HEARTBEAT = 'Session heartbeat',\n CLUSTER_EXTERNAL_IDP = 'External identity provider',\n CLUSTER_ENABLE_LOW_LATENCY = 'Enable low latency',\n CLUSTER_AUTOUPDATE = 'Auto Update',\n CLUSTER_OWNER = 'Owner',\n CLUSTER_STATUS = 'Status',\n CLUSTER_TASKLIST_V2_ENABLED = 'Taklist V2 Enabled',\n CLUSTER_AUDIT_LOG = 'Audit Log',\n INVITATION_ROLE = 'Role',\n ORGANIZATION_NAME = 'Name',\n SALES_PLAN = 'Plan',\n BILLING_RESERVATION = 'Reservation',\n BILLING_GENERAL_USERS = 'GeneralUsers', // paid cc legaly - only kept for audit logs compatibility\n MEMBER_ROLE = 'Role',\n USAGE_ALERT_THRESHOLD = 'Threshold',\n USAGE_ALERT_STATUS = 'Status',\n CLUSTER_AUDIT_LOGS = 'Audit Logging',\n LLM_BUDGET = 'LLM Budget',\n LLM_KEY_BLOCKED = 'LLM Key Blocked',\n ORGANIZATION_LIMIT = 'Limit',\n ORGANIZATION_CLUSTER_DEFAULT = 'Cluster creation default',\n CLUSTER_MODIFICATION = 'Modification',\n ORGANIZATION_TRIAL_EXPIRES_AT = 'Trial Expiration Date',\n}\n"],
|
|
5
|
+
"mappings": "AAOO,IAAK,cAAL,kBAAKA,iBAAL;AACL,EAAAA,aAAA,aAAU;AACV,EAAAA,aAAA,YAAS;AACT,EAAAA,aAAA,wBAAqB;AACrB,EAAAA,aAAA,gBAAa;AACb,EAAAA,aAAA,6BAA0B;AAC1B,EAAAA,aAAA,iBAAc;AACd,EAAAA,aAAA,cAAW;AACX,EAAAA,aAAA,gBAAa;AACb,EAAAA,aAAA,YAAS;AACT,EAAAA,aAAA,kBAAe;AACf,EAAAA,aAAA,gBAAa;AACb,EAAAA,aAAA,kBAAe;AACf,EAAAA,aAAA,gBAAa;AACb,EAAAA,aAAA,aAAU;AACV,EAAAA,aAAA,iBAAc;AACd,EAAAA,aAAA,uBAAoB;AACpB,EAAAA,aAAA,yBAAsB;AACtB,EAAAA,aAAA,sBAAmB;AACnB,EAAAA,aAAA,0BAAuB;AAnBb,SAAAA;AAAA,GAAA;AAsBL,IAAK,uBAAL,kBAAKC,0BAAL;AACL,EAAAA,sBAAA,0BAAuB;AACvB,EAAAA,sBAAA,wBAAqB;AACrB,EAAAA,sBAAA,kBAAe;AACf,EAAAA,sBAAA,iBAAc;AACd,EAAAA,sBAAA,4BAAyB;AACzB,EAAAA,sBAAA,sBAAmB;AACnB,EAAAA,sBAAA,yBAAsB;AACtB,EAAAA,sBAAA,qBAAkB;AAClB,EAAAA,sBAAA,iCAA8B;AAC9B,EAAAA,sBAAA,oCAAiC;AACjC,EAAAA,sBAAA,gCAA6B;AAC7B,EAAAA,sBAAA,4BAAyB;AACzB,EAAAA,sBAAA,iBAAc;AACd,EAAAA,sBAAA,2BAAwB;AACxB,EAAAA,sBAAA,2CAAwC;AACxC,EAAAA,sBAAA,+BAA4B;AAC5B,EAAAA,sBAAA,0BAAuB;AACvB,EAAAA,sBAAA,gCAA6B;AAC7B,EAAAA,sBAAA,wBAAqB;AACrB,EAAAA,sBAAA,mBAAgB;AAChB,EAAAA,sBAAA,oBAAiB;AACjB,EAAAA,sBAAA,iCAA8B;AAC9B,EAAAA,sBAAA,uBAAoB;AACpB,EAAAA,sBAAA,qBAAkB;AAClB,EAAAA,sBAAA,uBAAoB;AACpB,EAAAA,sBAAA,gBAAa;AACb,EAAAA,sBAAA,yBAAsB;AACtB,EAAAA,sBAAA,2BAAwB;AACxB,EAAAA,sBAAA,iBAAc;AACd,EAAAA,sBAAA,2BAAwB;AACxB,EAAAA,sBAAA,wBAAqB;AACrB,EAAAA,sBAAA,wBAAqB;AACrB,EAAAA,sBAAA,gBAAa;AACb,EAAAA,sBAAA,qBAAkB;AAClB,EAAAA,sBAAA,wBAAqB;AACrB,EAAAA,sBAAA,kCAA+B;AAC/B,EAAAA,sBAAA,0BAAuB;AACvB,EAAAA,sBAAA,mCAAgC;AAtCtB,SAAAA;AAAA,GAAA;",
|
|
6
6
|
"names": ["AuditEntity", "AuditEntityAttribute"]
|
|
7
7
|
}
|
package/dist/index.d.ts
CHANGED
|
@@ -44,7 +44,7 @@ export type { ChangeClusterPlanTypeResult } from './dtos/ClusterPlanTypeChange.d
|
|
|
44
44
|
export type { ClusterSpecChange, ClusterSpecChangeActor, ClusterSpecHistory, } from './dtos/ClusterSpecHistory.dto.js';
|
|
45
45
|
export type { CommonClusterDto, ExternalIdpConfig, OptimizeFilteringConfig, OptimizeFilteringIncludeExclude, OptimizeFilteringPatch, SecretsFilterMode, } from './dtos/CommonCluster.dto.js';
|
|
46
46
|
export type { ConsoleClusterDto } from './dtos/ConsoleCluster.dto.js';
|
|
47
|
-
export type { ClusterActivityBucket, ClusterActivityTile, ClusterActivityV2Dto, ClusterActivityV2Response, ClusterByClientV2Dto, ClusterDatacenterOptionV2Dto, ClusterDetailV2Dto, ClusterFacetsV2Dto, ClusterListItemV2Dto, ClusterLiveStateV2Dto, ClusterLiveStateV2Entry, ClusterParameterOptionV2Dto, ClusterParametersV2Dto, ControlResolvedPermissions, ControlSessionDto, ControlSessionUser, CursorPage, CursorParams, ListClustersV2Params, ListOrganizationsV2Params, ListOrgMembersV2Params, OrgDetailV2Dto, OrgListItemV2Dto, OrgMemberV2Dto, OrgSummaryV2Dto, } from './dtos/ControlV2.dto.js';
|
|
47
|
+
export type { ClusterActivityBucket, ClusterActivityTile, ClusterActivityV2Dto, ClusterActivityV2Response, ClusterByClientV2Dto, ClusterDatacenterOptionV2Dto, ClusterDetailV2Dto, ClusterFacetsV2Dto, ClusterListItemV2Dto, ClusterLiveStateV2Dto, ClusterLiveStateV2Entry, ClusterParameterOptionV2Dto, ClusterParametersV2Dto, ClusterTtlFilter, ControlResolvedPermissions, ControlSessionDto, ControlSessionUser, CursorPage, CursorParams, ListClustersV2Params, ListOrganizationsV2Params, ListOrgMembersV2Params, OrgDetailV2Dto, OrgListItemV2Dto, OrgMemberV2Dto, OrgSummaryV2Dto, } from './dtos/ControlV2.dto.js';
|
|
48
48
|
export type { DashboardActor, DashboardAnnotationsQuery, DashboardAnnotationsTile, DashboardAnnotationsTileV1, DashboardCatalogue, DashboardCatalogueChartMetric, DashboardCatalogueSearchField, DashboardChartQuery, DashboardChartRender, DashboardChartTile, DashboardChartTileV3, DashboardClusterCard, DashboardClusterDetailQuery, DashboardClusterDetailTile, DashboardClusterDetailTileV2, DashboardDefinition, DashboardDefinitionV1, DashboardDefinitionV2, DashboardDefinitionV3, DashboardDto, DashboardFleetQuery, DashboardFleetQueryTile, DashboardFleetQueryTileV1, DashboardHeadingTile, DashboardHeadingTileV2, DashboardLinkTile, DashboardLinkTileV2, DashboardListDto, DashboardNewTile, DashboardNoteTile, DashboardNoteTileV2, DashboardOrgCard, DashboardOrgDetailQuery, DashboardOrgDetailTile, DashboardOrgDetailTileV2, DashboardSummaryDto, DashboardTile, DashboardTileKind, DashboardTileLayout, DashboardTileV1, DashboardTileV2, DashboardTileV3, StoredDashboardDefinition, } from './dtos/Dashboard.dto.js';
|
|
49
49
|
export { DASHBOARD_CHART_RENDERS, DASHBOARD_CLUSTER_CARDS, DASHBOARD_DEFINITION_BYTES_MAX, DASHBOARD_DEFINITION_VERSION, DASHBOARD_ENTITY_ID_MAX, DASHBOARD_GRID_COLUMNS, DASHBOARD_GRID_ROWS_MAX, DASHBOARD_LINK_URL_MAX, DASHBOARD_NOTE_MAX, DASHBOARD_ORG_CARDS, DASHBOARD_PAGE_SIZE_DEFAULT, DASHBOARD_PAGE_SIZE_MAX, DASHBOARD_TILE_KINDS, DASHBOARD_TILE_ROWS_MAX, DASHBOARD_TILES_MAX, DASHBOARD_TITLE_MAX, } from './dtos/Dashboard.dto.js';
|
|
50
50
|
export type { EarlyAccessFeatureDto } from './dtos/EarlyAccessFeature.dto.js';
|
|
@@ -70,7 +70,7 @@ export type { UpgradeReadinessDto, UpgradeReadinessSource, UpgradeReadinessState
|
|
|
70
70
|
export type { UsageAlertDto } from './dtos/UsageAlert.dto.js';
|
|
71
71
|
export { UsageAlertInitValues, UsageAlertMetric, UsageAlertThresholdLimits, } from './dtos/UsageAlert.dto.js';
|
|
72
72
|
export type { UserMetaDataDto } from './dtos/UserMetaData.dto.js';
|
|
73
|
-
export { type AndNode, CLUSTER_DEFAULT_SEARCH_FIELDS, CLUSTER_SEARCH_FIELDS, type CompileContext, type CompiledQuery, compileQuery, type FieldBinding, findSearchField, idSetPredicate, isLuceneQueryError, joinIdSet, LuceneQueryError, likeArgument, type NotNode, ORG_DEFAULT_SEARCH_FIELDS, ORGANIZATION_SEARCH_FIELDS, type OrNode, parseLuceneQuery, type QueryNode, type RangeNode, type SearchFieldCapability, type SearchFieldSpec, type SearchFieldType, type SearchTermOperator, type SqlDialect, type TermNode, } from './search/index.js';
|
|
73
|
+
export { type AndNode, CLUSTER_DEFAULT_SEARCH_FIELDS, CLUSTER_SEARCH_FIELDS, CLUSTER_TTL_SEARCH_FIELDS, type CompileContext, type CompiledQuery, clusterSearchFieldsForStage, compileQuery, type FieldBinding, findSearchField, idSetPredicate, isLuceneQueryError, joinIdSet, LuceneQueryError, likeArgument, type NotNode, ORG_DEFAULT_SEARCH_FIELDS, ORGANIZATION_SEARCH_FIELDS, type OrNode, parseLuceneQuery, type QueryNode, type RangeNode, type SearchFieldCapability, type SearchFieldSpec, type SearchFieldType, type SearchTermOperator, type SqlDialect, type TermNode, } from './search/index.js';
|
|
74
74
|
export { upgradeGateReason } from './utils/upgradeGateReason.utils.js';
|
|
75
75
|
export { AlertSubscriptionReportType, AlertSubscriptionType, } from './enums/AlertSubscription.enum.js';
|
|
76
76
|
export { AuditEntity, AuditEntityAttribute } from './enums/AuditEntity.enum.js';
|
|
@@ -115,6 +115,8 @@ export { ClusterPlanTypeAvailabilityClass, hasNoAvailabilityClass, sortByAvailab
|
|
|
115
115
|
export { ClusterPlanTypeCategory, hasAvailabilityClass, sortByClusterPlanTypeCategory, } from './types/ClusterPlanTypeCategory.type.js';
|
|
116
116
|
export type { ClusterPlanTypesToConfig } from './types/ClusterPlanTypesToConfig.type.js';
|
|
117
117
|
export type { ClusterPlanTypesToReserved } from './types/ClusterPlanTypesToReserved.type.js';
|
|
118
|
+
export type { ClusterTtlDto, ClusterTtlDuration, ClusterTtlOption, ClusterTtlUnlimited, UpdateClusterTtlBody, } from './types/ClusterTtl.type.js';
|
|
119
|
+
export { CLUSTER_TTL_BACKFILL_REASON, CLUSTER_TTL_DURATION_MS, CLUSTER_TTL_DURATIONS, CLUSTER_TTL_FEATURE_FLAG, CLUSTER_TTL_OPTIONS, CLUSTER_TTL_UNLIMITED_LINK_MAX_LENGTH, CLUSTER_TTL_UNLIMITED_REASON_MAX_LENGTH, clusterTtlExpiresAt, DEFAULT_CLUSTER_TTL_OPTION, extendClusterTtl, isClusterTtlDuration, isClusterTtlOption, isClusterTtlStage, isHttpUrl, isPastClusterTtl, validateClusterTtlUnlimited, } from './types/ClusterTtl.type.js';
|
|
118
120
|
export type { ClusterUsageDataRequest, ClusterUsageMetricsAddRequestByMetricHeap, ClusterUsageMetricsData, ClusterUsageMetricsFilter, ClusterUsageOrgStartDate, } from './types/ClusterUsageMetrics.type.js';
|
|
119
121
|
export { ConsoleSM } from './types/ConsoleSelfManaged.type.js';
|
|
120
122
|
export type { ConsoleSMAdminApi } from './types/ConsoleSelfManagedAdminApi.type.js';
|
package/dist/index.js
CHANGED
|
@@ -298,6 +298,8 @@ import {
|
|
|
298
298
|
import {
|
|
299
299
|
CLUSTER_DEFAULT_SEARCH_FIELDS,
|
|
300
300
|
CLUSTER_SEARCH_FIELDS,
|
|
301
|
+
CLUSTER_TTL_SEARCH_FIELDS,
|
|
302
|
+
clusterSearchFieldsForStage,
|
|
301
303
|
compileQuery,
|
|
302
304
|
findSearchField,
|
|
303
305
|
idSetPredicate,
|
|
@@ -388,6 +390,24 @@ import {
|
|
|
388
390
|
hasAvailabilityClass,
|
|
389
391
|
sortByClusterPlanTypeCategory
|
|
390
392
|
} from "./types/ClusterPlanTypeCategory.type.js";
|
|
393
|
+
import {
|
|
394
|
+
CLUSTER_TTL_BACKFILL_REASON,
|
|
395
|
+
CLUSTER_TTL_DURATION_MS,
|
|
396
|
+
CLUSTER_TTL_DURATIONS,
|
|
397
|
+
CLUSTER_TTL_FEATURE_FLAG,
|
|
398
|
+
CLUSTER_TTL_OPTIONS,
|
|
399
|
+
CLUSTER_TTL_UNLIMITED_LINK_MAX_LENGTH,
|
|
400
|
+
CLUSTER_TTL_UNLIMITED_REASON_MAX_LENGTH,
|
|
401
|
+
clusterTtlExpiresAt,
|
|
402
|
+
DEFAULT_CLUSTER_TTL_OPTION,
|
|
403
|
+
extendClusterTtl,
|
|
404
|
+
isClusterTtlDuration,
|
|
405
|
+
isClusterTtlOption,
|
|
406
|
+
isClusterTtlStage,
|
|
407
|
+
isHttpUrl,
|
|
408
|
+
isPastClusterTtl,
|
|
409
|
+
validateClusterTtlUnlimited
|
|
410
|
+
} from "./types/ClusterTtl.type.js";
|
|
391
411
|
import { ConsoleSM } from "./types/ConsoleSelfManaged.type.js";
|
|
392
412
|
import {
|
|
393
413
|
AlertSubscriptionReportType as AlertSubscriptionReportType2,
|
|
@@ -610,6 +630,14 @@ export {
|
|
|
610
630
|
CLUSTER_SEARCH_FIELDS,
|
|
611
631
|
CLUSTER_SECRETS_LABEL_MIN_VERSION,
|
|
612
632
|
CLUSTER_STATISTICS_CONFIG_MIN_VERSION,
|
|
633
|
+
CLUSTER_TTL_BACKFILL_REASON,
|
|
634
|
+
CLUSTER_TTL_DURATIONS,
|
|
635
|
+
CLUSTER_TTL_DURATION_MS,
|
|
636
|
+
CLUSTER_TTL_FEATURE_FLAG,
|
|
637
|
+
CLUSTER_TTL_OPTIONS,
|
|
638
|
+
CLUSTER_TTL_SEARCH_FIELDS,
|
|
639
|
+
CLUSTER_TTL_UNLIMITED_LINK_MAX_LENGTH,
|
|
640
|
+
CLUSTER_TTL_UNLIMITED_REASON_MAX_LENGTH,
|
|
613
641
|
CONNECTORS_MANAGEMENT_LINK_MIN_VERSION,
|
|
614
642
|
CONNECTOR_MANAGEMENT_METRICS_MIN_VERSION,
|
|
615
643
|
CONNECTOR_SECRET_SYNC_MIN_VERSION,
|
|
@@ -656,6 +684,7 @@ export {
|
|
|
656
684
|
DASHBOARD_TILE_ROWS_MAX,
|
|
657
685
|
DASHBOARD_TITLE_MAX,
|
|
658
686
|
DAY,
|
|
687
|
+
DEFAULT_CLUSTER_TTL_OPTION,
|
|
659
688
|
DEFAULT_ENTERPRISE_DURATION_IN_MONTHS,
|
|
660
689
|
DNS_SUBDOMAIN_MAX_LENGTH,
|
|
661
690
|
ENFORCE_GROUPS_TASKLIST_V2_HIDDEN_MIN_VERSION,
|
|
@@ -819,6 +848,8 @@ export {
|
|
|
819
848
|
clusterBulkRequiredPermissions,
|
|
820
849
|
clusterBulkResultOf,
|
|
821
850
|
clusterPlanWhiteListIds,
|
|
851
|
+
clusterSearchFieldsForStage,
|
|
852
|
+
clusterTtlExpiresAt,
|
|
822
853
|
compareGenerationNamesNewestFirst,
|
|
823
854
|
compileQuery,
|
|
824
855
|
computeOrgStartDate,
|
|
@@ -837,6 +868,7 @@ export {
|
|
|
837
868
|
emptyDashboardDefinition,
|
|
838
869
|
enterpriseConnectionMetadataToOrganizationAssignments,
|
|
839
870
|
expandRolesToPermissions,
|
|
871
|
+
extendClusterTtl,
|
|
840
872
|
extractCamundaUserEmail,
|
|
841
873
|
findChartDimension,
|
|
842
874
|
findChartMetric,
|
|
@@ -877,16 +909,21 @@ export {
|
|
|
877
909
|
isClusterBulkYolo,
|
|
878
910
|
isClusterPlanFieldSpec,
|
|
879
911
|
isClusterTagEligibleForSleepCron,
|
|
912
|
+
isClusterTtlDuration,
|
|
913
|
+
isClusterTtlOption,
|
|
914
|
+
isClusterTtlStage,
|
|
880
915
|
isCustomerHardwareSizingStage,
|
|
881
916
|
isDnsSubdomain,
|
|
882
917
|
isEncryptionStatus,
|
|
883
918
|
isExpired,
|
|
884
919
|
isGenerationResumable,
|
|
920
|
+
isHttpUrl,
|
|
885
921
|
isIsBulkClusterGenerationUpdateIten,
|
|
886
922
|
isLimitKeyEnabled,
|
|
887
923
|
isLimitOfferedOnStage,
|
|
888
924
|
isLuceneQueryError,
|
|
889
925
|
isManager,
|
|
926
|
+
isPastClusterTtl,
|
|
890
927
|
isPastPreprodClusterTtl,
|
|
891
928
|
isPre89AffectedPath,
|
|
892
929
|
isPreprodClusterTtlStage,
|
|
@@ -945,6 +982,7 @@ export {
|
|
|
945
982
|
upgradeDashboardDefinition,
|
|
946
983
|
upgradeGateReason,
|
|
947
984
|
validateChartSpec,
|
|
985
|
+
validateClusterTtlUnlimited,
|
|
948
986
|
validateCronSchedule,
|
|
949
987
|
validateKmsArnForRegion,
|
|
950
988
|
validateLabels
|
package/dist/index.js.map
CHANGED
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
{
|
|
2
2
|
"version": 3,
|
|
3
3
|
"sources": ["../src/index.ts"],
|
|
4
|
-
"sourcesContent": ["/*\n * Copyright Camunda Services GmbH and/or licensed to Camunda Services GmbH\n * under one or more contributor license agreements. Licensed under a commercial license.\n * You may not use this file except in compliance with the commercial license.\n */\n\n// ============================================================================\n// Constants (runtime values)\n// ============================================================================\n\nexport {\n CUSTOMER_HARDWARE_SIZING_BROKER_TOTAL_CAPS,\n CUSTOMER_HARDWARE_SIZING_COUNT_CAPS,\n CUSTOMER_HARDWARE_SIZING_ELASTICSEARCH_TOTAL_CAPS,\n CUSTOMER_HARDWARE_SIZING_MAX_AUTO_RESIZE_INCREASE_GI,\n CUSTOMER_HARDWARE_SIZING_MAX_PLAN_JSON_LENGTH,\n CUSTOMER_HARDWARE_SIZING_MAX_PLANS_PER_REQUESTER,\n CUSTOMER_HARDWARE_SIZING_NAME_MAX_LENGTH,\n CUSTOMER_HARDWARE_SIZING_NAME_MIN_LENGTH,\n CUSTOMER_HARDWARE_SIZING_REPLICA_SET_TOTAL_CAPS,\n CUSTOMER_HARDWARE_SIZING_RESOURCE_CAPS,\n checkCustomerHardwareSizing,\n isCustomerHardwareSizingStage,\n parseKubernetesQuantity,\n} from './constants/customer-hardware-sizing.const.js'\nexport { DAY, HOUR, MINUTE, SECOND, WEEK } from './constants/duration.const.js'\nexport type { Stage } from './constants/misc.const.js'\nexport {\n CAMUNDA_CLAIMS_NAMESPACE,\n CONSOLE_API_USER_ID,\n FIRSTNAME_LASTNAME_MAX_LENGTH,\n HOTBACKUP_MIN_CREATE_PERIOD,\n MAX_HARDWARE_PACKAGE_COUNT,\n MAX_LENGTH_CLUSTER_NAME,\n MINIMUM_EYEPAIRS,\n NAMES_OF_ENTERPRISE_SALESPLANS_WITH_SLEEPING_CLUSTERS,\n SECRETS_MAX_LENGTH,\n STARTING_PRICE_PER_MONTH_IN_EURO,\n TEMPORARY_CLUSTER_NAME,\n UNKNOWN_ACTOR_EMAIL,\n} from './constants/misc.const.js'\nexport {\n getGatewayPropertyHint,\n getGatewayPropertyPath,\n isAffectedByStreamlinedDeployment,\n isPre89AffectedPath,\n PRE89_AFFECTED_PATHS,\n PRE89_AFFECTED_PROPERTY_PREFIXES,\n PRE89_GATEWAY_PROPERTY_PATHS,\n PRE89_GATEWAY_RESOURCE_PREFIXES,\n} from './constants/pre89EnvVarMapping.const.js'\nexport { PRIVATE_LINK_REGIONS } from './constants/privateLinkRegions.const.js'\nexport { SECURE_CONNECTIVITY_ALLOWED_ENTRIES_LIMIT } from './constants/secureConnectivity.const.js'\nexport type {\n TrialExtensionSurveyAnswer,\n TrialExtensionSurveyQuestion,\n} from './constants/trialExtensionSurvey.const.js'\nexport { TRIAL_EXTENSION_SURVEY_QUESTIONS } from './constants/trialExtensionSurvey.const.js'\nexport {\n V2_BODY_IDS_MAX,\n V2_FILTER_IDS_MAX,\n V2_MAX_PAGE_LIMIT,\n} from './constants/v2-list.const.js'\nexport {\n ADMIN_APP_RENAME_MIN_VERSION,\n APP_INTEGRATIONS_89_STREAM_CONNECTOR_BRIDGE_MIN_VERSION,\n APP_INTEGRATIONS_89_STREAM_MINOR,\n APP_INTEGRATIONS_89_STREAM_ZEEBE_MIN_VERSION,\n APP_INTEGRATIONS_MIN_VERSION,\n AUDIT_LOG_TAB_MIN_VERSION,\n AUTHORIZATION_TOGGLE_MIN_VERSION,\n AWS_ONLY_GENERATION_MIN_VERSION,\n BUSINESS_ID_UNIQUENESS_MIN_VERSION,\n BYOIDP_MIN_VERSION,\n CLUSTER_SECRETS_LABEL_MIN_VERSION,\n CLUSTER_STATISTICS_CONFIG_MIN_VERSION,\n CONNECTOR_MANAGEMENT_METRICS_MIN_VERSION,\n CONNECTOR_SECRET_SYNC_MIN_VERSION,\n CONNECTORS_MANAGEMENT_LINK_MIN_VERSION,\n ENFORCE_GROUPS_TASKLIST_V2_HIDDEN_MIN_VERSION,\n ENFORCE_GROUPS_TOGGLE_MIN_VERSION,\n GATEWAY_SPEC_8_9_MIN_VERSION,\n HOT_BACKUP_MIN_VERSION,\n IDENTITY_AUTHORIZATION_MIN_VERSION,\n IDENTITY_AUTHORIZATION_NOTICE_MAX_VERSION,\n IDENTITY_MANAGEMENT_MIN_VERSION,\n INTERNAL_CONNECTORS_MANAGEMENT_MIN_VERSION,\n JOB_DASHBOARD_MIN_VERSION,\n LINE_8_9_MIN_VERSION,\n LINE_8_10_MIN_VERSION,\n MCP_MIN_VERSION,\n MULTI_TENANCY_TOGGLE_MIN_VERSION,\n NEW_CLUSTER_ROLES_MIN_VERSION,\n OPTIMIZE_DEFAULT_ON_MIN_VERSION,\n OPTIMIZE_FILTERING_MIN_VERSION,\n OPTIONAL_TELEMETRY_MIN_VERSION,\n RESOURCE_BASED_AUTHORIZATIONS_MIN_VERSION,\n REST_API_URL_TRANSFORM_MIN_VERSION,\n REST_API_V2_MIN_VERSION,\n RESUME_ALPHA_MIN_VERSION,\n SECRET_SOURCE_MIN_VERSION,\n SECRETS_FILTER_MODE_8_6_MIN_VERSION,\n SECRETS_FILTER_MODE_8_7_MIN_VERSION,\n SECRETS_FILTER_MODE_8_8_MIN_VERSION,\n SECRETS_FILTER_MODE_8_9_MIN_VERSION,\n SECRETS_FILTER_MODE_8_10_MIN_VERSION,\n SESSION_CONFIG_MIN_VERSION,\n SWAGGER_MIN_VERSION,\n SWAGGER_URL_8_9_MIN_VERSION,\n TASKLIST_MODE_TOGGLE_MIN_VERSION,\n TASKLIST_UPGRADE_BANNER_MIN_VERSION,\n TASKLIST_V2_AUTO_ENABLE_FROM_MINOR,\n TASKLIST_V2_AUTO_ENABLE_TO_MINOR,\n TASKLIST_V2_DEFAULT_ON_MIN_VERSION,\n TASKLIST_V2_SETTING_MAX_VERSION,\n TASKLIST_V2_UPGRADE_MIN_VERSION,\n TASKLIST_V2_UPGRADE_TARGET_MIN_VERSION,\n UPGRADE_READINESS_MIN_VERSION,\n ZEEBE_REST_URL_MIN_VERSION,\n} from './constants/version-gates.const.js'\n\n// ============================================================================\n// DTOs - Types (interfaces and type aliases)\n// ============================================================================\n\n// Annotations - the notes and the tags that a Camundi attaches to a fleet\n// entity. The wire types and the rules are pure and browser-safe, so\n// control-backend and control-frontend run the same code.\nexport type {\n AnnotationActorView,\n AnnotationDecision,\n AnnotationDenialCode,\n} from './annotations/policy.js'\nexport {\n ANNOTATION_DENIAL_MESSAGES,\n canEditNote,\n canRemove,\n checkNoteBody,\n checkTagName,\n isAuthor,\n} from './annotations/policy.js'\nexport type {\n ClusterBulkClusterResultDto,\n ClusterBulkFinalStatus,\n ClusterBulkGenerationUpdateSettings,\n ClusterBulkOperationPayloadDto,\n ClusterBulkOperationRule,\n ClusterBulkPlanTypeUpdateSettings,\n ClusterBulkPlanUpdateSettings,\n ClusterBulkSettingsByType,\n ClusterBulkSleepWakeupSettings,\n ClusterBulkStepRequestDto,\n ClusterBulkStepResultDto,\n ClusterBulkTargetDto,\n} from './approvals/cluster-bulk-operation.js'\nexport {\n CLUSTER_BULK_OPERATION_CLUSTER_NAME_MAX_LENGTH,\n CLUSTER_BULK_OPERATION_MAX_CLUSTERS,\n CLUSTER_BULK_OPERATION_MIN_ACKS,\n CLUSTER_BULK_OPERATION_NAME_MAX_LENGTH,\n CLUSTER_BULK_OPERATION_RULES,\n CLUSTER_BULK_OPERATION_TEST_STAGE_MIN_ACKS,\n CLUSTER_BULK_OPERATION_TYPES,\n CLUSTER_BULK_SLEEPING_CLUSTER_DELAY_MS,\n clusterBulkOperationTypeOf,\n clusterBulkParameterOf,\n clusterBulkRequiredPermissions,\n clusterBulkResultOf,\n isClusterBulkYolo,\n} from './approvals/cluster-bulk-operation.js'\nexport {\n DNS_SUBDOMAIN_MAX_LENGTH,\n isDnsSubdomain,\n} from './approvals/dns-subdomain.js'\nexport type { ApprovalExpectedChange } from './approvals/expected-value.js'\nexport {\n isSameApprovalValue,\n staleApprovalKeys,\n} from './approvals/expected-value.js'\nexport type {\n ApprovalActorView,\n ApprovalDecision,\n ApprovalDenialCode,\n} from './approvals/policy.js'\nexport {\n approvalPermissionCheck,\n canAcknowledge,\n canCreate,\n canExecute,\n canReject,\n canView,\n canWithdraw,\n effectiveStatus,\n hasActorEmail,\n hasEveryPermission,\n isExpired,\n isSameActor,\n isSameActorEmail,\n remainingAcks,\n requiredPermissionsOf,\n resolveRequiredAcks,\n} from './approvals/policy.js'\nexport type { ApprovalUseCaseType } from './approvals/use-cases.const.js'\nexport {\n APPROVAL_EMAIL_MAX_LENGTH,\n APPROVAL_EMAIL_PATTERN,\n APPROVAL_USE_CASE_TYPES,\n EXTEND_TRIAL_MAX_DAYS,\n EXTEND_TRIAL_MIN_DAYS,\n FEATURE_FLAG_MIN_ACKS_PROD,\n ORG_LIMIT_TEXT_MAX_LENGTH,\n PERSONAL_ORGANIZATION_MAX_PER_REQUESTER,\n PERSONAL_ORGANIZATION_NAME_MAX_LENGTH,\n PERSONAL_ORGANIZATION_NAME_MIN_LENGTH,\n PLATFORM_ROLE_CHANGE_MAX_ROLES,\n PURGE_USERS_MAX_USERS,\n PURGE_USERS_REQUIRED_PERMISSIONS,\n USER_METADATA_EXPECTED_MAX_LENGTH,\n USER_METADATA_MAX_LENGTH,\n} from './approvals/use-cases.const.js'\n// The chart query of a dashboard tile (catalogue, language, result).\nexport {\n CHART_DAY_GRAIN_MAX_DAYS,\n CHART_FILTER_MAX_LENGTH,\n CHART_GRAIN_DEFAULT,\n CHART_GRAINS,\n CHART_ID_MAX_LENGTH,\n CHART_METRICS,\n CHART_OTHER_SERIES_KEY,\n CHART_QUERY_MAX_LENGTH,\n CHART_TOP_DEFAULT,\n CHART_TOP_MAX,\n CHART_UNKNOWN_SERIES_KEY,\n CHART_WINDOW_AMOUNT_MAX,\n CHART_WINDOW_DEFAULT,\n CHART_WINDOW_UNITS,\n type ChartDimensionSpec,\n type ChartGrain,\n type ChartMetricSpec,\n type ChartPoint,\n type ChartQueryCheck,\n ChartQueryError,\n type ChartQueryErrorKind,\n type ChartQueryOptions,\n type ChartResult,\n type ChartSeries,\n type ChartSpec,\n type ChartUnit,\n type ChartWindow,\n type ChartWindowUnit,\n chartBucketStart,\n chartToday,\n chartWindowRange,\n findChartDimension,\n findChartMetric,\n formatChartSpec,\n isChartQueryError,\n parseChartQuery,\n readChartSpec,\n validateChartSpec,\n} from './charts/index.js'\n// Dashboards - the tiles of a dashboard hold filters and never data. The\n// wire types and the placement rules are pure, so control-backend and\n// control-frontend run the same code.\nexport {\n DASHBOARD_TILE_DEFAULT_SIZE,\n dashboardDefinitionBytes,\n dashboardDefinitionFits,\n dashboardTileDefaultSize,\n emptyDashboardDefinition,\n isSafeDashboardLink,\n placeNewTile,\n placeNewTiles,\n tilesOverlap,\n toStoredDashboardDefinition,\n upgradeDashboardDefinition,\n} from './dashboards/definition.js'\nexport type {\n ALERT_SUBSCRIPTION_REPORT_TYPES,\n ALERT_SUBSCRIPTION_TYPES,\n AlertSubscriptionDto,\n AlertSubscriptionEntryDto,\n AlertSubscriptionWebhookAuth,\n CheckFailedReason,\n} from './dtos/AlertSubscription.dto.js'\n// DTOs - Values (constants)\nexport {\n FORBIDDEN_HOSTNAMES_FOR_WEBHOOK_ALERTS,\n HMAC_HEADER_POSITION,\n HMAC_SUPPORTED_ALGORITHM,\n} from './dtos/AlertSubscription.dto.js'\nexport type {\n AnnotationActor,\n AnnotationDto,\n AnnotationEntityKind,\n AnnotationKind,\n AnnotationLookupDto,\n AnnotationLookupEntryDto,\n AnnotationTagDto,\n EntityAnnotationsDto,\n} from './dtos/Annotation.dto.js'\nexport {\n ANNOTATION_BODY_MAX,\n ANNOTATION_ENTITY_KIND_LABELS,\n ANNOTATION_ENTITY_KINDS,\n ANNOTATION_ENTITY_MAX,\n ANNOTATION_KINDS,\n ANNOTATION_LOOKUP_MAX_ENTITIES,\n ANNOTATION_LOOKUP_TAGS_MAX,\n ANNOTATION_PAGE_SIZE_DEFAULT,\n ANNOTATION_PAGE_SIZE_MAX,\n ANNOTATION_SEARCH_MAX_LENGTH,\n ANNOTATION_TAG_NAME_MAX,\n normalizeTagName,\n} from './dtos/Annotation.dto.js'\n// Approvals - the wire types, and the rules that read them. Both are pure and\n// browser-safe, so control-backend, control-frontend and cloudbot run the same\n// code and cannot disagree.\nexport type {\n ApprovalAck,\n ApprovalActionMode,\n ApprovalActor,\n ApprovalEntityRef,\n ApprovalEntityType,\n ApprovalExecutionMode,\n ApprovalJobDto,\n ApprovalJobStatus,\n ApprovalM2mActor,\n ApprovalProgress,\n ApprovalSortField,\n ApprovalSortOrder,\n ApprovalStatusCountsDto,\n ApprovalSummaryField,\n ApprovalSummaryFieldKind,\n ApprovalSummaryValue,\n ApprovalUseCaseDto,\n} from './dtos/ApprovalJob.dto.js'\nexport {\n APPROVAL_ACKS_MAX,\n APPROVAL_ENTITY_TYPES,\n APPROVAL_JOB_STATUSES,\n APPROVAL_LIST_SUMMARY_VALUES_MAX,\n APPROVAL_LIVE_STATUSES,\n APPROVAL_PAGE_SIZE_DEFAULT,\n APPROVAL_PAGE_SIZE_MAX,\n APPROVAL_PAYLOAD_ORG_FIELD,\n APPROVAL_REASON_MAX_LENGTH,\n APPROVAL_RUN_STALE_MS,\n APPROVAL_SEARCH_MAX_LENGTH,\n APPROVAL_SORT_DEFAULT,\n APPROVAL_SORT_FIELDS,\n APPROVAL_SUMMARY_FIELD_KINDS,\n isRunStalled,\n progressFraction,\n} from './dtos/ApprovalJob.dto.js'\nexport type { AuditDto } from './dtos/Audit.dto.js'\nexport type { Auth0ResourceServerDto } from './dtos/Auth0ResourceServer.dto.js'\nexport type { BackupDto } from './dtos/Backup.dto.js'\nexport type { BackupScheduleDto } from './dtos/BackupSchedule.dto.js'\nexport type { ByomClientDto, ByomStatus } from './dtos/ByomClient.dto.js'\nexport type {\n ClusterCreationDefaultField,\n ClusterCreationDefaultKey,\n ClusterCreationDefaults,\n} from './dtos/ClusterCreationDefaults.dto.js'\nexport { CLUSTER_CREATION_DEFAULT_FIELDS } from './dtos/ClusterCreationDefaults.dto.js'\nexport type {\n ClusterDeferredSpecChange,\n DeferredSpecChangeType,\n} from './dtos/ClusterDeferredSpecChange.dto.js'\nexport type { ClusterIpWhitelistDto } from './dtos/ClusterIpWhitelist.dto.js'\nexport type {\n MoveClusterOwnerResult,\n MoveClusterWarnings,\n} from './dtos/ClusterOwnerMove.dto.js'\nexport type { ClusterPlanDto } from './dtos/ClusterPlan.dto.js'\nexport type { ClusterPlanTypeDto } from './dtos/ClusterPlanType.dto.js'\nexport type { ChangeClusterPlanTypeResult } from './dtos/ClusterPlanTypeChange.dto.js'\nexport type {\n ClusterSpecChange,\n ClusterSpecChangeActor,\n ClusterSpecHistory,\n} from './dtos/ClusterSpecHistory.dto.js'\nexport type {\n CommonClusterDto,\n ExternalIdpConfig,\n OptimizeFilteringConfig,\n OptimizeFilteringIncludeExclude,\n OptimizeFilteringPatch,\n SecretsFilterMode,\n} from './dtos/CommonCluster.dto.js'\nexport type { ConsoleClusterDto } from './dtos/ConsoleCluster.dto.js'\nexport type {\n ClusterActivityBucket,\n ClusterActivityTile,\n ClusterActivityV2Dto,\n ClusterActivityV2Response,\n ClusterByClientV2Dto,\n ClusterDatacenterOptionV2Dto,\n ClusterDetailV2Dto,\n ClusterFacetsV2Dto,\n ClusterListItemV2Dto,\n ClusterLiveStateV2Dto,\n ClusterLiveStateV2Entry,\n ClusterParameterOptionV2Dto,\n ClusterParametersV2Dto,\n ControlResolvedPermissions,\n ControlSessionDto,\n ControlSessionUser,\n CursorPage,\n CursorParams,\n ListClustersV2Params,\n ListOrganizationsV2Params,\n ListOrgMembersV2Params,\n OrgDetailV2Dto,\n OrgListItemV2Dto,\n OrgMemberV2Dto,\n OrgSummaryV2Dto,\n} from './dtos/ControlV2.dto.js'\nexport type {\n DashboardActor,\n DashboardAnnotationsQuery,\n DashboardAnnotationsTile,\n DashboardAnnotationsTileV1,\n DashboardCatalogue,\n DashboardCatalogueChartMetric,\n DashboardCatalogueSearchField,\n DashboardChartQuery,\n DashboardChartRender,\n DashboardChartTile,\n DashboardChartTileV3,\n DashboardClusterCard,\n DashboardClusterDetailQuery,\n DashboardClusterDetailTile,\n DashboardClusterDetailTileV2,\n DashboardDefinition,\n DashboardDefinitionV1,\n DashboardDefinitionV2,\n DashboardDefinitionV3,\n DashboardDto,\n DashboardFleetQuery,\n DashboardFleetQueryTile,\n DashboardFleetQueryTileV1,\n DashboardHeadingTile,\n DashboardHeadingTileV2,\n DashboardLinkTile,\n DashboardLinkTileV2,\n DashboardListDto,\n DashboardNewTile,\n DashboardNoteTile,\n DashboardNoteTileV2,\n DashboardOrgCard,\n DashboardOrgDetailQuery,\n DashboardOrgDetailTile,\n DashboardOrgDetailTileV2,\n DashboardSummaryDto,\n DashboardTile,\n DashboardTileKind,\n DashboardTileLayout,\n DashboardTileV1,\n DashboardTileV2,\n DashboardTileV3,\n StoredDashboardDefinition,\n} from './dtos/Dashboard.dto.js'\nexport {\n DASHBOARD_CHART_RENDERS,\n DASHBOARD_CLUSTER_CARDS,\n DASHBOARD_DEFINITION_BYTES_MAX,\n DASHBOARD_DEFINITION_VERSION,\n DASHBOARD_ENTITY_ID_MAX,\n DASHBOARD_GRID_COLUMNS,\n DASHBOARD_GRID_ROWS_MAX,\n DASHBOARD_LINK_URL_MAX,\n DASHBOARD_NOTE_MAX,\n DASHBOARD_ORG_CARDS,\n DASHBOARD_PAGE_SIZE_DEFAULT,\n DASHBOARD_PAGE_SIZE_MAX,\n DASHBOARD_TILE_KINDS,\n DASHBOARD_TILE_ROWS_MAX,\n DASHBOARD_TILES_MAX,\n DASHBOARD_TITLE_MAX,\n} from './dtos/Dashboard.dto.js'\nexport type { EarlyAccessFeatureDto } from './dtos/EarlyAccessFeature.dto.js'\nexport type {\n CamundaWebApp,\n CamundaWebAppWithZeebe,\n ExternalClickwrapConfigDto,\n ExternalClusterDto,\n ExternalOrganizationDto,\n} from './dtos/ExternalWebapp.dto.js'\nexport type {\n CreateFeatureFlagDto,\n FeatureFlagAnswer,\n FeatureFlagDto,\n FeatureFlagListDto,\n UpdateFeatureFlagDto,\n} from './dtos/FeatureFlags.dto.js'\n// Functions\nexport {\n activeGenerations,\n compareGenerationNamesNewestFirst,\n type GenerationDto,\n type GenerationWithClusterCountDto,\n sortGenerationBySemverOfZeebe,\n type UpgradableGenerationsDto,\n} from './dtos/Generations.dto.js'\n// Namespace (type-only - contains only interfaces)\nexport type { Hdp } from './dtos/Hdp.dto.js'\nexport type {\n K8sBackupConfig,\n K8sConfig,\n K8sConfigLegacyFormat,\n K8sContext,\n K8sContextDto,\n} from './dtos/K8sContext.dto.js'\nexport type { MetaDto } from './dtos/Meta.dto.js'\nexport type {\n AutoJoinAssignment,\n LicensingModelType,\n LlmProviderName,\n OrganizationDto,\n OrganizationMetadata,\n OrgOwner,\n OrgWithNameAndSalesPlan,\n} from './dtos/Organization.dto.js'\nexport {\n LICENSING_MODEL_DISPLAY_NAMES,\n VALID_LICENSING_MODELS,\n} from './dtos/Organization.dto.js'\nexport type { OrganizationMemberDto } from './dtos/OrganizationMember.dto.js'\nexport type { OrganizationToSalesPlanDto } from './dtos/OrganizationToSalesPlan.dto.js'\nexport type {\n ReleaseTrainSanityReport,\n SanityFix,\n SanityRuleInfo,\n SanitySeverity,\n SanityViolation,\n} from './dtos/ReleaseTrainSanity.dto.js'\nexport type { RestoreDto, RestoreState } from './dtos/Restore.dto.js'\n// SalesPlan.dto - Types\nexport type {\n ClusterLimits,\n ConsumptionDataItem,\n Limits,\n SalesPlanDto,\n SalesPlanMetadata,\n} from './dtos/SalesPlan.dto.js'\n// SalesPlan.dto - Values (constants and functions)\nexport {\n allClusterBasedLimits,\n allSalesPlanLimits,\n clusterPlanWhiteListIds,\n deprecatedLimit,\n isLimitKeyEnabled,\n isLimitOfferedOnStage,\n isUnlockedClusterPlansStage,\n MAX_CLUSTER_CLIENTS_DEFAULT,\n MAX_CLUSTER_CLIENTS_DEV,\n RETENTION_LIMIT_DEFAULT,\n RETENTION_LIMIT_MAXIMUM,\n RETENTION_LIMIT_MINIMUM,\n unusedClusterBasedLimits,\n unusedSalesPlanLimits,\n} from './dtos/SalesPlan.dto.js'\nexport type { SecureConnectivityDto } from './dtos/SecureConnectivity.dto.js'\nexport type { SignupDto } from './dtos/Signup.dto.js'\nexport type {\n StorybookConfig,\n StorybookConfigBackup,\n StorybookConfigChannel,\n StorybookConfigDatacenter,\n StorybookConfigGeneration,\n} from './dtos/StorybookConfig.dto.js'\nexport type { SystemAuditDto } from './dtos/SystemAudit.dto.js'\nexport type {\n UpgradeReadinessDto,\n UpgradeReadinessSource,\n UpgradeReadinessState,\n} from './dtos/UpgradeReadiness.dto.js'\n// UsageAlert.dto - Types\nexport type { UsageAlertDto } from './dtos/UsageAlert.dto.js'\n// UsageAlert.dto - Values (enum and constants)\nexport {\n UsageAlertInitValues,\n UsageAlertMetric,\n UsageAlertThresholdLimits,\n} from './dtos/UsageAlert.dto.js'\nexport type { UserMetaDataDto } from './dtos/UserMetaData.dto.js'\n// Lucene-style table search (parser + AST \u2192 SQL compiler + field registries).\nexport {\n type AndNode,\n CLUSTER_DEFAULT_SEARCH_FIELDS,\n CLUSTER_SEARCH_FIELDS,\n type CompileContext,\n type CompiledQuery,\n compileQuery,\n type FieldBinding,\n findSearchField,\n idSetPredicate,\n isLuceneQueryError,\n joinIdSet,\n LuceneQueryError,\n likeArgument,\n type NotNode,\n ORG_DEFAULT_SEARCH_FIELDS,\n ORGANIZATION_SEARCH_FIELDS,\n type OrNode,\n parseLuceneQuery,\n type QueryNode,\n type RangeNode,\n type SearchFieldCapability,\n type SearchFieldSpec,\n type SearchFieldType,\n type SearchTermOperator,\n type SqlDialect,\n type TermNode,\n} from './search/index.js'\nexport { upgradeGateReason } from './utils/upgradeGateReason.utils.js'\n\n// ============================================================================\n// Enums (runtime values)\n// ============================================================================\n\nexport {\n AlertSubscriptionReportType,\n AlertSubscriptionType,\n} from './enums/AlertSubscription.enum.js'\nexport { AuditEntity, AuditEntityAttribute } from './enums/AuditEntity.enum.js'\nexport { AuditService } from './enums/AuditService.enum.js'\nexport { BackupStatus } from './enums/BackupStatus.enum.js'\nexport {\n ClusterBulkOperationStatus,\n ClusterBulkOperationType,\n} from './enums/ClusterBulkOperation.enum.js'\nexport { ClusterClientPermission } from './enums/ClusterClientPermissions.enum.js'\nexport { ClusterEncryptionKey } from './enums/ClusterEncryptionKey.enum.js'\nexport { ClusterStatus } from './enums/ClusterStatus.enum.js'\nexport { ConsoleAPIClientPermission } from './enums/ConsoleApiClientPermission.enum.js'\nexport { ErrorType } from './enums/ErrorType.enum.js'\nexport type {\n AssignableOrganizationRoleType,\n OrganizationRoleType,\n UnassignableOrganizationRoleType,\n} from './enums/OrganizationRole.enum.js'\nexport {\n AssignableOrganizationRole,\n LegacyHeldOrganizationRole,\n OrganizationRole,\n UnassignableOrganizationRole,\n} from './enums/OrganizationRole.enum.js'\nexport { SseEntity, SseType } from './enums/Sse.enum.js'\nexport {\n SystemAuditEntity,\n SystemAuditEntityAttribute,\n} from './enums/SystemAuditEntity.enum.js'\n\n// ============================================================================\n// Permissions - Namespaces (runtime values)\n// ============================================================================\n\nexport { AccountsPermissions } from './permissions/accounts.permissions.js'\nexport { AlertDistributorPermissions } from './permissions/alert-distributor.permissions.js'\nexport { AuditLoggerPermissions } from './permissions/auditlogger.permissions.js'\nexport {\n accountsUserFeaturesFromPermissions,\n consoleUserFeaturesFromPermissions,\n sessionHasPermission,\n sessionPermissionKeysFor,\n} from './permissions/combo.js'\nexport { ConsolePermissions } from './permissions/console.permissions.js'\nexport { NotificationPermissions } from './permissions/notification.permissions.js'\n// profile.permissions - Types\nexport type { OnboardConfig } from './permissions/profile.permissions.js'\n// profile.permissions - Values (constants)\n// NOTE: the `allowed` email lists (CLOUD_TEAM_EMAILS, SRE_TEAM_EMAILS, etc.)\n// intentionally live in the private `@camunda-cloud/shared-backend` package\n// instead of here, since this package is published publicly to npm.\nexport { PROFILES } from './permissions/profile.permissions.js'\nexport { expandRolesToPermissions } from './permissions/roleExpansion.utils.js'\n\n// ============================================================================\n// Types - Type-only exports (interfaces and type aliases)\n// ============================================================================\n\nexport type { AuditData } from './types/AuditData.type.js'\n// AutoSleep.type - Types\nexport type {\n ActivitySleepEligibilityOptions,\n SleepCronEligibilityOptions,\n} from './types/AutoSleep.type.js'\n// AutoSleep.type - Values (constants and functions)\nexport {\n INTERNAL_LOW_HARDWARE_PLAN_NAME,\n isActivitySleepEligible,\n isClusterTagEligibleForSleepCron,\n isSalesPlanEligibleForSleepCron,\n isSleepCronEligible,\n SLEEP_CRON_ELIGIBLE_TAGS,\n} from './types/AutoSleep.type.js'\nexport type {\n BotContext,\n BotOptions,\n BotRequest,\n GetUserDetailsResponse,\n ListRolesForUserResponse,\n UpdateUserRolesRequest,\n UpdateUserRolesResponse,\n UserContext,\n UserDetails,\n} from './types/Bot.types.js'\n// BulkOperation.type - Types\nexport type {\n BulkClusterDeletionContent,\n BulkClusterDeletionItem,\n BulkClusterGenerationUpdateItem,\n BulkClusterPlanTypeUpdateContent,\n BulkClusterPlanTypeUpdateItem,\n BulkClusterPlanUpdateContent,\n BulkClusterPlanUpdateItem,\n BulkGenerationUpdateContent,\n GenericBulkClusterOperationContent,\n GenericBulkOperationContent,\n GenericClusterBulkOperationItem,\n} from './types/BulkOperation.type.js'\n// BulkOperation.type - Functions (type guards)\nexport {\n isBulkClusterDeletionItem,\n isBulkClusterPlanTypeUpdateItem,\n isBulkClusterPlanUpdateItem,\n isIsBulkClusterGenerationUpdateIten,\n} from './types/BulkOperation.type.js'\n// C8ClusterComponentVersions.type - Types\nexport type {\n ImmutableZeebeClusterVersionsDto,\n MutableZeebeClusterVersionsDto,\n ZeebeClusterVersionsDto,\n} from './types/C8ClusterComponentVersions.type.js'\n// C8ClusterComponentVersions.type - Values (constants)\nexport {\n AllThings,\n ImmutableThings,\n MutableThings,\n} from './types/C8ClusterComponentVersions.type.js'\n// CamundaClusterLabels.type - Types\nexport type {\n CamundaClusterStage,\n CamundaClusterStageLabel,\n ClusterLabels,\n} from './types/CamundaClusterLabels.type.js'\n// CamundaClusterLabels.type - Values (constants)\nexport {\n ALLOWED_CAMUNDA_LABELS,\n StageClusterLabels,\n} from './types/CamundaClusterLabels.type.js'\n// Chargebee.type - Types\nexport type { SubscriptionItem } from './types/Chargebee.type.js'\n// Chargebee.type - Values (enums)\nexport { ConsumptionData, ConsumptionDataType } from './types/Chargebee.type.js'\n// ClusterBulkOperation.type - Types\nexport type {\n ClusterBulkOperationAck,\n ClusterBulkOperationClusterDto,\n ClusterBulkOperationContent,\n ClusterBulkOperationDto,\n ClusterBulkOperationGenerationUpdateParameter,\n ClusterBulkOperationParameter,\n ClusterBulkOperationPlanTypeUpdateParameter,\n ClusterBulkOperationPlanUpdateParameter,\n ClusterBulkOperationPostContent,\n ClusterSleepWakeupParameter,\n} from './types/ClusterBulkOperation.type.js'\nexport type {\n ClusterModificationConfigDto,\n ClusterModificationDto,\n} from './types/ClusterModification.type.js'\n// ClusterPlanFields.type - Values (field spec and type guard)\nexport {\n CLUSTER_PLAN_FIELDS,\n type ClusterPlanFieldSpec,\n type ClusterPlanFieldTree,\n isClusterPlanFieldSpec,\n} from './types/ClusterPlanFields.type.js'\nexport type {\n ClusterPlanModificationAck,\n ClusterPlanModificationConfig,\n ClusterPlanModificationDto,\n} from './types/ClusterPlanModification.type.js'\n// ClusterPlanTypeAvailabilityClass.type - Values (enum and function)\nexport {\n ClusterPlanTypeAvailabilityClass,\n hasNoAvailabilityClass,\n sortByAvailabilityClasses,\n} from './types/ClusterPlanTypeAvailabilityClass.type.js'\n// ClusterPlanTypeCategory.type - Values (enum and functions)\nexport {\n ClusterPlanTypeCategory,\n hasAvailabilityClass,\n sortByClusterPlanTypeCategory,\n} from './types/ClusterPlanTypeCategory.type.js'\nexport type { ClusterPlanTypesToConfig } from './types/ClusterPlanTypesToConfig.type.js'\nexport type { ClusterPlanTypesToReserved } from './types/ClusterPlanTypesToReserved.type.js'\nexport type {\n ClusterUsageDataRequest,\n ClusterUsageMetricsAddRequestByMetricHeap,\n ClusterUsageMetricsData,\n ClusterUsageMetricsFilter,\n ClusterUsageOrgStartDate,\n} from './types/ClusterUsageMetrics.type.js'\n// Namespace with runtime values (consts, functions, enums)\nexport { ConsoleSM } from './types/ConsoleSelfManaged.type.js'\n// Namespace (type-only - contains only interfaces)\nexport type { ConsoleSMAdminApi } from './types/ConsoleSelfManagedAdminApi.type.js'\n// Dashboard.types - Types\nexport type {\n DashboardConfig,\n DashboardMappingItem,\n DashboardMappingTarget,\n DashboardResultPrimitive,\n DashboardResultRow,\n EngineeringOperationsDashboardResponse,\n} from './types/Dashboard.types.js'\nexport type { EnterpriseIncludingValueMetrics } from './types/EnterpriseIncludingValueMetrics.type.js'\nexport type {\n HdpTenantUsageBreakdown,\n HdpTenantUsagePerClusterPoint,\n HdpTenantUsagePoint,\n} from './types/HdpTenantUsage.type.js'\n// hdp.types - Types (interfaces)\nexport type {\n AlertSubscription as HdpAlertSubscription,\n Audit as HdpAudit,\n ByomClient as HdpByomClient,\n Channel as HdpChannel,\n Cluster as HdpCluster,\n ClusterBackup as HdpClusterBackup,\n ClusterBackupSchedule as HdpClusterBackupSchedule,\n ClusterBulkOperation as HdpClusterBulkOperation,\n ClusterClient as HdpClusterClient,\n ClusterModification as HdpClusterModification,\n ClusterPlan as HdpClusterPlan,\n ClusterPlanType as HdpClusterPlanType,\n ConnectorSecret as HdpConnectorSecret,\n ConsoleApiClient as HdpConsoleApiClient,\n Datacenter as HdpDatacenter,\n Generation as HdpGeneration,\n HdpBackendChangeEvent,\n HdpClusterModificationConfig,\n HdpDisk,\n HdpEntity,\n HdpPrometheusDataCapacityDataPoint,\n Invite as HdpInvite,\n LlmSpend as HdpLlmSpend,\n Organization as HdpOrganization,\n SecureConnectivity as HdpSecureConnectivity,\n SystemAudit as HdpSystemAudit,\n TelemetryData as HdpTelemetryData,\n UsageAlert as HdpUsageAlert,\n User as HdpUser,\n UserLogin as HdpUserLogin,\n} from './types/hdp.types.js'\n// hdp.types - Values (enums)\nexport {\n AlertSubscriptionReportType as HdpAlertSubscriptionReportType,\n AlertSubscriptionType as HdpAlertSubscriptionType,\n HDP_DISKS,\n} from './types/hdp.types.js'\n// notification.type - Types\nexport type {\n GlobalNotification,\n NotificationDto,\n NotificationMeta,\n NotificationOptions,\n NotificationPermission,\n NotificationSource,\n NotificationState,\n NotificationType,\n OrgNotification,\n UserNotification,\n UserOrgNotification,\n} from './types/notification.type.js'\n// notification.type - Values (enums and constants)\nexport {\n NotificationPermissionValues,\n NotificationSourceEnum,\n NotificationStateEnum,\n NotificationTypeEnum,\n} from './types/notification.type.js'\n// OrganizationPermission.type - Types\nexport type {\n CreateReadUpdateDelete,\n OrganizationPermissions,\n} from './types/OrganizationPermission.type.js'\n// OrganizationPermission.type - Values (constants)\nexport {\n OrganizationPermissionsDescriptions,\n PermissionsForOrganizationRole,\n} from './types/OrganizationPermission.type.js'\nexport {\n getPreprodClusterTtlHours,\n isPastPreprodClusterTtl,\n isPreprodClusterTtlStage,\n parseNumericLimit,\n} from './types/PreprodClusterTtl.type.js'\n// Roles.js - Types\nexport type {\n AccountRoles,\n ConsoleRoles,\n ModelerRoles,\n Roles,\n} from './types/Roles.js'\n// Roles.js - Values (constants)\nexport { SAFE_ROLES } from './types/Roles.js'\n// SalesPlanType.type - Types\nexport type {\n DisplayedSalesPlan,\n RevisitedSalesPlanName,\n} from './types/SalesPlanType.type.js'\n// SalesPlanType.type - Values (enums and functions)\nexport {\n AnalyticsSalesPlanType,\n getAnalyticsSalesPlanFromOrgSalesPlan,\n getDisplayedSalesPlan,\n getRevisitedSalesPlanName,\n OPTIMIZE_DISABLED_PLAN_TYPES,\n SalesPlanType,\n} from './types/SalesPlanType.type.js'\n// SpamDetection.type - Types\nexport type { SpamDetectionPatterns } from './types/SpamDetection.type.js'\n// SpamDetection.type - Values (constants)\nexport { TEERGRUBE_PATTERNS } from './types/SpamDetection.type.js'\nexport type {\n AlertSubscriptionSseEvent,\n BackupSseEvent,\n ClusterClientSseEvent,\n ClusterSseEvent,\n ConnectorSecretsSseEvent,\n ConsoleApiClientSseEvent,\n ConsoleSseEvent,\n MonitoringSseEvent,\n SecureConnectivitySseEvent,\n SseClusterPayload,\n SseMonitoringPayload,\n SseSecureConnectivityPayload,\n} from './types/SseEvent.type.js'\n// Namespace (type-only - contains only interfaces)\nexport type { AccountsStats } from './types/Stats.types.js'\n// Survey.type - Types\nexport type { Persona, SurveyDto } from './types/Survey.type.js'\n// Survey.type - Values (enum)\nexport { FeedbackType } from './types/Survey.type.js'\n// SuspendStrategy.type - Types\nexport type {\n GetSuspendStrategyOptions,\n SuspendStrategy,\n} from './types/SuspendStrategy.type.js'\n// SuspendStrategy.type - Values (function)\nexport { getSuspendStrategy } from './types/SuspendStrategy.type.js'\nexport type { SystemAuditData } from './types/SystemAuditData.type.js'\n\n// Namespace (runtime value)\nexport { Telemetry } from './types/Telemetry.type.js'\n\n// TrialManagement.types - Types\nexport type {\n ExtensionListItem,\n ExtensionListResponse,\n OrgTrialDetail,\n TrialExtensionSource,\n TrialManagementStats,\n} from './types/TrialManagement.types.js'\n\n// User.type - Types\nexport type {\n AccountsData,\n AppMetadata,\n BasicUser,\n BlockedFor,\n Identity,\n OrgMembership,\n User,\n UserMetadata,\n UserRequest,\n} from './types/User.type.js'\n\n// User.type - Values (enum)\nexport { UserMetadataEvent } from './types/User.type.js'\n\nexport type {\n UniqueTaskUser,\n ValueMetrics,\n ValueMetricsPerYearMonth,\n} from './types/ValueMetrics.type.js'\n\n// ============================================================================\n// Utils - Classes (runtime values)\n// ============================================================================\n\nexport {\n CLOUD_PROVIDER_ORDER,\n getCloudProviderLabel,\n getCloudProviderRank,\n} from './utils/cloudProvider.utils.js'\nexport {\n type ConnectivityStatus,\n deriveConnectivityMessage,\n deriveConnectivityStatus,\n} from './utils/connectivityStatus.utils.js'\nexport { ConsoleSelfManagedUtils } from './utils/console-sm.utils.js'\nexport type {\n CronScheduleValidationFailure,\n CronScheduleValidationResult,\n CronScheduleValidationSuccess,\n} from './utils/cronSchedule.utils.js'\nexport {\n BACKUP_SCHEDULE_MIN_INTERVAL_MINUTES,\n validateCronSchedule,\n} from './utils/cronSchedule.utils.js'\nexport {\n canonicalPlan,\n canonicalPlanKey,\n} from './utils/elasticsearchPlanPath.utils.js'\nexport {\n deriveEncryptionStatus,\n type EncryptionStatus,\n isEncryptionStatus,\n} from './utils/encryptionStatus.utils.js'\n// enterprise-connection.utils - Types\nexport type { EnterpriseConnectionOrganizationAssignment } from './utils/enterprise-connection.utils.js'\n// enterprise-connection.utils - Values (functions)\nexport {\n enterpriseConnectionMetadataToOrganizationAssignments,\n organizationAssignmentsToEnterpriseConnectionMetadata,\n} from './utils/enterprise-connection.utils.js'\nexport {\n addMonthsClamped,\n DEFAULT_ENTERPRISE_DURATION_IN_MONTHS,\n diffInWholeMonths,\n type EnterpriseTermWindow,\n getCurrentEnterpriseTerm,\n peakWithinTerm,\n toUtcDayStartMs,\n} from './utils/enterpriseTerm.utils.js'\nexport type { EnvVarEntry } from './utils/envVars.js'\nexport { parseEnvVars, serializeEnvVars } from './utils/envVars.js'\nexport {\n deriveFailoverKeyPolicyPrincipals,\n type FailoverKeyPolicyPrincipals,\n} from './utils/failoverKeyPolicy.utils.js'\nexport {\n KMS_ARN,\n KMS_MRK_ARN,\n type KmsArnValidationError,\n type ParsedKmsArn,\n parseKmsArn,\n validateKmsArnForRegion,\n} from './utils/kmsArn.utils.js'\nexport { validateLabels } from './utils/labelValidator.utils.js'\nexport { ObjectMergeUtils } from './utils/objectMerge.utils.js'\nexport {\n computeOrgStartDate,\n type OrgStartDateInput,\n} from './utils/orgStartDate.utils.js'\nexport {\n getPermissionsByRoles,\n getUserPermissionsForOrg,\n} from './utils/orgs/OrgHelper.js'\n\n// PasswordPolicy - Types\nexport type {\n PasswordPolicyRequest,\n PasswordPolicyResult,\n} from './utils/PasswordPolicy.js'\n\n// PasswordPolicy - Values (constants and function)\nexport {\n MAXLENGTH as PASSWORD_POLICY_MAXLENGTH,\n MINLENGTH as PASSWORD_POLICY_MINLENGTH,\n passwordPolicyCheck,\n} from './utils/PasswordPolicy.js'\nexport { isQaUserEmail, qaUserEmail } from './utils/qa-user.utils.js'\nexport {\n deriveSecondaryStorageStatus,\n type SecondaryStorageStatus,\n} from './utils/secondaryStorageStatus.utils.js'\nexport {\n allSettledResultsCounts,\n getFulfilledPromises,\n getRejectedPromises,\n getSettledSummary,\n} from './utils/settledPromises.util.js'\nexport {\n isValidAwsArn,\n isValidCIDR,\n isValidCIDRList,\n isValidClientName,\n isValidHostname,\n isValidPrivateLinkRegion,\n normalizeCIDRList,\n} from './utils/string-validation.utils.js'\nexport {\n extractCamundaUserEmail,\n guessName,\n isCamundaUserId,\n} from './utils/user.utils.js'\n\n// versionCheck.utils - Values (enum and function)\nexport {\n checkVersion,\n generationImageErrorMessage,\n isAppIntegrationsVersionSupported,\n isGenerationResumable,\n isSecretsFilterModeConfigurable,\n isValidGenerationImage,\n normalizeGenerationVersion,\n stripSecfixPostfix,\n VersionCheckOperator,\n} from './utils/versionCheck.utils.js'\n\n// ============================================================================\n// Config - Configuration files and types\n// ============================================================================\n\nexport { default as CAMUNDI_PERMISSION_RULES } from './config/camundi-permission-rules.js'\nexport type { CamundiPermissionRules } from './config/camundi-permission-rules.types.js'\n\nexport {\n augmentCamundiPermissions,\n getApplicableRolesForEmployee,\n HIBOB_CACHE_KEY,\n HIBOB_CACHE_NAMESPACE,\n isManager,\n} from './utils/camundiPermissionAugmenter.utils.js'\n"],
|
|
5
|
-
"mappings": "AAUA;AAAA,EACE;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,OACK;AACP,SAAS,KAAK,MAAM,QAAQ,QAAQ,YAAY;AAEhD;AAAA,EACE;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,OACK;AACP;AAAA,EACE;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,OACK;AACP,SAAS,4BAA4B;AACrC,SAAS,iDAAiD;AAK1D,SAAS,wCAAwC;AACjD;AAAA,EACE;AAAA,EACA;AAAA,EACA;AAAA,OACK;AACP;AAAA,EACE;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,OACK;AAcP;AAAA,EACE;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,OACK;AAeP;AAAA,EACE;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,OACK;AACP;AAAA,EACE;AAAA,EACA;AAAA,OACK;AAEP;AAAA,EACE;AAAA,EACA;AAAA,OACK;AAMP;AAAA,EACE;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,OACK;AAEP;AAAA,EACE;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,OACK;AAEP;AAAA,EACE;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EAMA;AAAA,EASA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,OACK;AAIP;AAAA,EACE;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,OACK;AAUP;AAAA,EACE;AAAA,EACA;AAAA,EACA;AAAA,OACK;AAWP;AAAA,EACE;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,OACK;AAuBP;AAAA,EACE;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,OACK;AAWP,SAAS,uCAAuC;
|
|
4
|
+
"sourcesContent": ["/*\n * Copyright Camunda Services GmbH and/or licensed to Camunda Services GmbH\n * under one or more contributor license agreements. Licensed under a commercial license.\n * You may not use this file except in compliance with the commercial license.\n */\n\n// ============================================================================\n// Constants (runtime values)\n// ============================================================================\n\nexport {\n CUSTOMER_HARDWARE_SIZING_BROKER_TOTAL_CAPS,\n CUSTOMER_HARDWARE_SIZING_COUNT_CAPS,\n CUSTOMER_HARDWARE_SIZING_ELASTICSEARCH_TOTAL_CAPS,\n CUSTOMER_HARDWARE_SIZING_MAX_AUTO_RESIZE_INCREASE_GI,\n CUSTOMER_HARDWARE_SIZING_MAX_PLAN_JSON_LENGTH,\n CUSTOMER_HARDWARE_SIZING_MAX_PLANS_PER_REQUESTER,\n CUSTOMER_HARDWARE_SIZING_NAME_MAX_LENGTH,\n CUSTOMER_HARDWARE_SIZING_NAME_MIN_LENGTH,\n CUSTOMER_HARDWARE_SIZING_REPLICA_SET_TOTAL_CAPS,\n CUSTOMER_HARDWARE_SIZING_RESOURCE_CAPS,\n checkCustomerHardwareSizing,\n isCustomerHardwareSizingStage,\n parseKubernetesQuantity,\n} from './constants/customer-hardware-sizing.const.js'\nexport { DAY, HOUR, MINUTE, SECOND, WEEK } from './constants/duration.const.js'\nexport type { Stage } from './constants/misc.const.js'\nexport {\n CAMUNDA_CLAIMS_NAMESPACE,\n CONSOLE_API_USER_ID,\n FIRSTNAME_LASTNAME_MAX_LENGTH,\n HOTBACKUP_MIN_CREATE_PERIOD,\n MAX_HARDWARE_PACKAGE_COUNT,\n MAX_LENGTH_CLUSTER_NAME,\n MINIMUM_EYEPAIRS,\n NAMES_OF_ENTERPRISE_SALESPLANS_WITH_SLEEPING_CLUSTERS,\n SECRETS_MAX_LENGTH,\n STARTING_PRICE_PER_MONTH_IN_EURO,\n TEMPORARY_CLUSTER_NAME,\n UNKNOWN_ACTOR_EMAIL,\n} from './constants/misc.const.js'\nexport {\n getGatewayPropertyHint,\n getGatewayPropertyPath,\n isAffectedByStreamlinedDeployment,\n isPre89AffectedPath,\n PRE89_AFFECTED_PATHS,\n PRE89_AFFECTED_PROPERTY_PREFIXES,\n PRE89_GATEWAY_PROPERTY_PATHS,\n PRE89_GATEWAY_RESOURCE_PREFIXES,\n} from './constants/pre89EnvVarMapping.const.js'\nexport { PRIVATE_LINK_REGIONS } from './constants/privateLinkRegions.const.js'\nexport { SECURE_CONNECTIVITY_ALLOWED_ENTRIES_LIMIT } from './constants/secureConnectivity.const.js'\nexport type {\n TrialExtensionSurveyAnswer,\n TrialExtensionSurveyQuestion,\n} from './constants/trialExtensionSurvey.const.js'\nexport { TRIAL_EXTENSION_SURVEY_QUESTIONS } from './constants/trialExtensionSurvey.const.js'\nexport {\n V2_BODY_IDS_MAX,\n V2_FILTER_IDS_MAX,\n V2_MAX_PAGE_LIMIT,\n} from './constants/v2-list.const.js'\nexport {\n ADMIN_APP_RENAME_MIN_VERSION,\n APP_INTEGRATIONS_89_STREAM_CONNECTOR_BRIDGE_MIN_VERSION,\n APP_INTEGRATIONS_89_STREAM_MINOR,\n APP_INTEGRATIONS_89_STREAM_ZEEBE_MIN_VERSION,\n APP_INTEGRATIONS_MIN_VERSION,\n AUDIT_LOG_TAB_MIN_VERSION,\n AUTHORIZATION_TOGGLE_MIN_VERSION,\n AWS_ONLY_GENERATION_MIN_VERSION,\n BUSINESS_ID_UNIQUENESS_MIN_VERSION,\n BYOIDP_MIN_VERSION,\n CLUSTER_SECRETS_LABEL_MIN_VERSION,\n CLUSTER_STATISTICS_CONFIG_MIN_VERSION,\n CONNECTOR_MANAGEMENT_METRICS_MIN_VERSION,\n CONNECTOR_SECRET_SYNC_MIN_VERSION,\n CONNECTORS_MANAGEMENT_LINK_MIN_VERSION,\n ENFORCE_GROUPS_TASKLIST_V2_HIDDEN_MIN_VERSION,\n ENFORCE_GROUPS_TOGGLE_MIN_VERSION,\n GATEWAY_SPEC_8_9_MIN_VERSION,\n HOT_BACKUP_MIN_VERSION,\n IDENTITY_AUTHORIZATION_MIN_VERSION,\n IDENTITY_AUTHORIZATION_NOTICE_MAX_VERSION,\n IDENTITY_MANAGEMENT_MIN_VERSION,\n INTERNAL_CONNECTORS_MANAGEMENT_MIN_VERSION,\n JOB_DASHBOARD_MIN_VERSION,\n LINE_8_9_MIN_VERSION,\n LINE_8_10_MIN_VERSION,\n MCP_MIN_VERSION,\n MULTI_TENANCY_TOGGLE_MIN_VERSION,\n NEW_CLUSTER_ROLES_MIN_VERSION,\n OPTIMIZE_DEFAULT_ON_MIN_VERSION,\n OPTIMIZE_FILTERING_MIN_VERSION,\n OPTIONAL_TELEMETRY_MIN_VERSION,\n RESOURCE_BASED_AUTHORIZATIONS_MIN_VERSION,\n REST_API_URL_TRANSFORM_MIN_VERSION,\n REST_API_V2_MIN_VERSION,\n RESUME_ALPHA_MIN_VERSION,\n SECRET_SOURCE_MIN_VERSION,\n SECRETS_FILTER_MODE_8_6_MIN_VERSION,\n SECRETS_FILTER_MODE_8_7_MIN_VERSION,\n SECRETS_FILTER_MODE_8_8_MIN_VERSION,\n SECRETS_FILTER_MODE_8_9_MIN_VERSION,\n SECRETS_FILTER_MODE_8_10_MIN_VERSION,\n SESSION_CONFIG_MIN_VERSION,\n SWAGGER_MIN_VERSION,\n SWAGGER_URL_8_9_MIN_VERSION,\n TASKLIST_MODE_TOGGLE_MIN_VERSION,\n TASKLIST_UPGRADE_BANNER_MIN_VERSION,\n TASKLIST_V2_AUTO_ENABLE_FROM_MINOR,\n TASKLIST_V2_AUTO_ENABLE_TO_MINOR,\n TASKLIST_V2_DEFAULT_ON_MIN_VERSION,\n TASKLIST_V2_SETTING_MAX_VERSION,\n TASKLIST_V2_UPGRADE_MIN_VERSION,\n TASKLIST_V2_UPGRADE_TARGET_MIN_VERSION,\n UPGRADE_READINESS_MIN_VERSION,\n ZEEBE_REST_URL_MIN_VERSION,\n} from './constants/version-gates.const.js'\n\n// ============================================================================\n// DTOs - Types (interfaces and type aliases)\n// ============================================================================\n\n// Annotations - the notes and the tags that a Camundi attaches to a fleet\n// entity. The wire types and the rules are pure and browser-safe, so\n// control-backend and control-frontend run the same code.\nexport type {\n AnnotationActorView,\n AnnotationDecision,\n AnnotationDenialCode,\n} from './annotations/policy.js'\nexport {\n ANNOTATION_DENIAL_MESSAGES,\n canEditNote,\n canRemove,\n checkNoteBody,\n checkTagName,\n isAuthor,\n} from './annotations/policy.js'\nexport type {\n ClusterBulkClusterResultDto,\n ClusterBulkFinalStatus,\n ClusterBulkGenerationUpdateSettings,\n ClusterBulkOperationPayloadDto,\n ClusterBulkOperationRule,\n ClusterBulkPlanTypeUpdateSettings,\n ClusterBulkPlanUpdateSettings,\n ClusterBulkSettingsByType,\n ClusterBulkSleepWakeupSettings,\n ClusterBulkStepRequestDto,\n ClusterBulkStepResultDto,\n ClusterBulkTargetDto,\n} from './approvals/cluster-bulk-operation.js'\nexport {\n CLUSTER_BULK_OPERATION_CLUSTER_NAME_MAX_LENGTH,\n CLUSTER_BULK_OPERATION_MAX_CLUSTERS,\n CLUSTER_BULK_OPERATION_MIN_ACKS,\n CLUSTER_BULK_OPERATION_NAME_MAX_LENGTH,\n CLUSTER_BULK_OPERATION_RULES,\n CLUSTER_BULK_OPERATION_TEST_STAGE_MIN_ACKS,\n CLUSTER_BULK_OPERATION_TYPES,\n CLUSTER_BULK_SLEEPING_CLUSTER_DELAY_MS,\n clusterBulkOperationTypeOf,\n clusterBulkParameterOf,\n clusterBulkRequiredPermissions,\n clusterBulkResultOf,\n isClusterBulkYolo,\n} from './approvals/cluster-bulk-operation.js'\nexport {\n DNS_SUBDOMAIN_MAX_LENGTH,\n isDnsSubdomain,\n} from './approvals/dns-subdomain.js'\nexport type { ApprovalExpectedChange } from './approvals/expected-value.js'\nexport {\n isSameApprovalValue,\n staleApprovalKeys,\n} from './approvals/expected-value.js'\nexport type {\n ApprovalActorView,\n ApprovalDecision,\n ApprovalDenialCode,\n} from './approvals/policy.js'\nexport {\n approvalPermissionCheck,\n canAcknowledge,\n canCreate,\n canExecute,\n canReject,\n canView,\n canWithdraw,\n effectiveStatus,\n hasActorEmail,\n hasEveryPermission,\n isExpired,\n isSameActor,\n isSameActorEmail,\n remainingAcks,\n requiredPermissionsOf,\n resolveRequiredAcks,\n} from './approvals/policy.js'\nexport type { ApprovalUseCaseType } from './approvals/use-cases.const.js'\nexport {\n APPROVAL_EMAIL_MAX_LENGTH,\n APPROVAL_EMAIL_PATTERN,\n APPROVAL_USE_CASE_TYPES,\n EXTEND_TRIAL_MAX_DAYS,\n EXTEND_TRIAL_MIN_DAYS,\n FEATURE_FLAG_MIN_ACKS_PROD,\n ORG_LIMIT_TEXT_MAX_LENGTH,\n PERSONAL_ORGANIZATION_MAX_PER_REQUESTER,\n PERSONAL_ORGANIZATION_NAME_MAX_LENGTH,\n PERSONAL_ORGANIZATION_NAME_MIN_LENGTH,\n PLATFORM_ROLE_CHANGE_MAX_ROLES,\n PURGE_USERS_MAX_USERS,\n PURGE_USERS_REQUIRED_PERMISSIONS,\n USER_METADATA_EXPECTED_MAX_LENGTH,\n USER_METADATA_MAX_LENGTH,\n} from './approvals/use-cases.const.js'\n// The chart query of a dashboard tile (catalogue, language, result).\nexport {\n CHART_DAY_GRAIN_MAX_DAYS,\n CHART_FILTER_MAX_LENGTH,\n CHART_GRAIN_DEFAULT,\n CHART_GRAINS,\n CHART_ID_MAX_LENGTH,\n CHART_METRICS,\n CHART_OTHER_SERIES_KEY,\n CHART_QUERY_MAX_LENGTH,\n CHART_TOP_DEFAULT,\n CHART_TOP_MAX,\n CHART_UNKNOWN_SERIES_KEY,\n CHART_WINDOW_AMOUNT_MAX,\n CHART_WINDOW_DEFAULT,\n CHART_WINDOW_UNITS,\n type ChartDimensionSpec,\n type ChartGrain,\n type ChartMetricSpec,\n type ChartPoint,\n type ChartQueryCheck,\n ChartQueryError,\n type ChartQueryErrorKind,\n type ChartQueryOptions,\n type ChartResult,\n type ChartSeries,\n type ChartSpec,\n type ChartUnit,\n type ChartWindow,\n type ChartWindowUnit,\n chartBucketStart,\n chartToday,\n chartWindowRange,\n findChartDimension,\n findChartMetric,\n formatChartSpec,\n isChartQueryError,\n parseChartQuery,\n readChartSpec,\n validateChartSpec,\n} from './charts/index.js'\n// Dashboards - the tiles of a dashboard hold filters and never data. The\n// wire types and the placement rules are pure, so control-backend and\n// control-frontend run the same code.\nexport {\n DASHBOARD_TILE_DEFAULT_SIZE,\n dashboardDefinitionBytes,\n dashboardDefinitionFits,\n dashboardTileDefaultSize,\n emptyDashboardDefinition,\n isSafeDashboardLink,\n placeNewTile,\n placeNewTiles,\n tilesOverlap,\n toStoredDashboardDefinition,\n upgradeDashboardDefinition,\n} from './dashboards/definition.js'\nexport type {\n ALERT_SUBSCRIPTION_REPORT_TYPES,\n ALERT_SUBSCRIPTION_TYPES,\n AlertSubscriptionDto,\n AlertSubscriptionEntryDto,\n AlertSubscriptionWebhookAuth,\n CheckFailedReason,\n} from './dtos/AlertSubscription.dto.js'\n// DTOs - Values (constants)\nexport {\n FORBIDDEN_HOSTNAMES_FOR_WEBHOOK_ALERTS,\n HMAC_HEADER_POSITION,\n HMAC_SUPPORTED_ALGORITHM,\n} from './dtos/AlertSubscription.dto.js'\nexport type {\n AnnotationActor,\n AnnotationDto,\n AnnotationEntityKind,\n AnnotationKind,\n AnnotationLookupDto,\n AnnotationLookupEntryDto,\n AnnotationTagDto,\n EntityAnnotationsDto,\n} from './dtos/Annotation.dto.js'\nexport {\n ANNOTATION_BODY_MAX,\n ANNOTATION_ENTITY_KIND_LABELS,\n ANNOTATION_ENTITY_KINDS,\n ANNOTATION_ENTITY_MAX,\n ANNOTATION_KINDS,\n ANNOTATION_LOOKUP_MAX_ENTITIES,\n ANNOTATION_LOOKUP_TAGS_MAX,\n ANNOTATION_PAGE_SIZE_DEFAULT,\n ANNOTATION_PAGE_SIZE_MAX,\n ANNOTATION_SEARCH_MAX_LENGTH,\n ANNOTATION_TAG_NAME_MAX,\n normalizeTagName,\n} from './dtos/Annotation.dto.js'\n// Approvals - the wire types, and the rules that read them. Both are pure and\n// browser-safe, so control-backend, control-frontend and cloudbot run the same\n// code and cannot disagree.\nexport type {\n ApprovalAck,\n ApprovalActionMode,\n ApprovalActor,\n ApprovalEntityRef,\n ApprovalEntityType,\n ApprovalExecutionMode,\n ApprovalJobDto,\n ApprovalJobStatus,\n ApprovalM2mActor,\n ApprovalProgress,\n ApprovalSortField,\n ApprovalSortOrder,\n ApprovalStatusCountsDto,\n ApprovalSummaryField,\n ApprovalSummaryFieldKind,\n ApprovalSummaryValue,\n ApprovalUseCaseDto,\n} from './dtos/ApprovalJob.dto.js'\nexport {\n APPROVAL_ACKS_MAX,\n APPROVAL_ENTITY_TYPES,\n APPROVAL_JOB_STATUSES,\n APPROVAL_LIST_SUMMARY_VALUES_MAX,\n APPROVAL_LIVE_STATUSES,\n APPROVAL_PAGE_SIZE_DEFAULT,\n APPROVAL_PAGE_SIZE_MAX,\n APPROVAL_PAYLOAD_ORG_FIELD,\n APPROVAL_REASON_MAX_LENGTH,\n APPROVAL_RUN_STALE_MS,\n APPROVAL_SEARCH_MAX_LENGTH,\n APPROVAL_SORT_DEFAULT,\n APPROVAL_SORT_FIELDS,\n APPROVAL_SUMMARY_FIELD_KINDS,\n isRunStalled,\n progressFraction,\n} from './dtos/ApprovalJob.dto.js'\nexport type { AuditDto } from './dtos/Audit.dto.js'\nexport type { Auth0ResourceServerDto } from './dtos/Auth0ResourceServer.dto.js'\nexport type { BackupDto } from './dtos/Backup.dto.js'\nexport type { BackupScheduleDto } from './dtos/BackupSchedule.dto.js'\nexport type { ByomClientDto, ByomStatus } from './dtos/ByomClient.dto.js'\nexport type {\n ClusterCreationDefaultField,\n ClusterCreationDefaultKey,\n ClusterCreationDefaults,\n} from './dtos/ClusterCreationDefaults.dto.js'\nexport { CLUSTER_CREATION_DEFAULT_FIELDS } from './dtos/ClusterCreationDefaults.dto.js'\nexport type {\n ClusterDeferredSpecChange,\n DeferredSpecChangeType,\n} from './dtos/ClusterDeferredSpecChange.dto.js'\nexport type { ClusterIpWhitelistDto } from './dtos/ClusterIpWhitelist.dto.js'\nexport type {\n MoveClusterOwnerResult,\n MoveClusterWarnings,\n} from './dtos/ClusterOwnerMove.dto.js'\nexport type { ClusterPlanDto } from './dtos/ClusterPlan.dto.js'\nexport type { ClusterPlanTypeDto } from './dtos/ClusterPlanType.dto.js'\nexport type { ChangeClusterPlanTypeResult } from './dtos/ClusterPlanTypeChange.dto.js'\nexport type {\n ClusterSpecChange,\n ClusterSpecChangeActor,\n ClusterSpecHistory,\n} from './dtos/ClusterSpecHistory.dto.js'\nexport type {\n CommonClusterDto,\n ExternalIdpConfig,\n OptimizeFilteringConfig,\n OptimizeFilteringIncludeExclude,\n OptimizeFilteringPatch,\n SecretsFilterMode,\n} from './dtos/CommonCluster.dto.js'\nexport type { ConsoleClusterDto } from './dtos/ConsoleCluster.dto.js'\nexport type {\n ClusterActivityBucket,\n ClusterActivityTile,\n ClusterActivityV2Dto,\n ClusterActivityV2Response,\n ClusterByClientV2Dto,\n ClusterDatacenterOptionV2Dto,\n ClusterDetailV2Dto,\n ClusterFacetsV2Dto,\n ClusterListItemV2Dto,\n ClusterLiveStateV2Dto,\n ClusterLiveStateV2Entry,\n ClusterParameterOptionV2Dto,\n ClusterParametersV2Dto,\n ClusterTtlFilter,\n ControlResolvedPermissions,\n ControlSessionDto,\n ControlSessionUser,\n CursorPage,\n CursorParams,\n ListClustersV2Params,\n ListOrganizationsV2Params,\n ListOrgMembersV2Params,\n OrgDetailV2Dto,\n OrgListItemV2Dto,\n OrgMemberV2Dto,\n OrgSummaryV2Dto,\n} from './dtos/ControlV2.dto.js'\nexport type {\n DashboardActor,\n DashboardAnnotationsQuery,\n DashboardAnnotationsTile,\n DashboardAnnotationsTileV1,\n DashboardCatalogue,\n DashboardCatalogueChartMetric,\n DashboardCatalogueSearchField,\n DashboardChartQuery,\n DashboardChartRender,\n DashboardChartTile,\n DashboardChartTileV3,\n DashboardClusterCard,\n DashboardClusterDetailQuery,\n DashboardClusterDetailTile,\n DashboardClusterDetailTileV2,\n DashboardDefinition,\n DashboardDefinitionV1,\n DashboardDefinitionV2,\n DashboardDefinitionV3,\n DashboardDto,\n DashboardFleetQuery,\n DashboardFleetQueryTile,\n DashboardFleetQueryTileV1,\n DashboardHeadingTile,\n DashboardHeadingTileV2,\n DashboardLinkTile,\n DashboardLinkTileV2,\n DashboardListDto,\n DashboardNewTile,\n DashboardNoteTile,\n DashboardNoteTileV2,\n DashboardOrgCard,\n DashboardOrgDetailQuery,\n DashboardOrgDetailTile,\n DashboardOrgDetailTileV2,\n DashboardSummaryDto,\n DashboardTile,\n DashboardTileKind,\n DashboardTileLayout,\n DashboardTileV1,\n DashboardTileV2,\n DashboardTileV3,\n StoredDashboardDefinition,\n} from './dtos/Dashboard.dto.js'\nexport {\n DASHBOARD_CHART_RENDERS,\n DASHBOARD_CLUSTER_CARDS,\n DASHBOARD_DEFINITION_BYTES_MAX,\n DASHBOARD_DEFINITION_VERSION,\n DASHBOARD_ENTITY_ID_MAX,\n DASHBOARD_GRID_COLUMNS,\n DASHBOARD_GRID_ROWS_MAX,\n DASHBOARD_LINK_URL_MAX,\n DASHBOARD_NOTE_MAX,\n DASHBOARD_ORG_CARDS,\n DASHBOARD_PAGE_SIZE_DEFAULT,\n DASHBOARD_PAGE_SIZE_MAX,\n DASHBOARD_TILE_KINDS,\n DASHBOARD_TILE_ROWS_MAX,\n DASHBOARD_TILES_MAX,\n DASHBOARD_TITLE_MAX,\n} from './dtos/Dashboard.dto.js'\nexport type { EarlyAccessFeatureDto } from './dtos/EarlyAccessFeature.dto.js'\nexport type {\n CamundaWebApp,\n CamundaWebAppWithZeebe,\n ExternalClickwrapConfigDto,\n ExternalClusterDto,\n ExternalOrganizationDto,\n} from './dtos/ExternalWebapp.dto.js'\nexport type {\n CreateFeatureFlagDto,\n FeatureFlagAnswer,\n FeatureFlagDto,\n FeatureFlagListDto,\n UpdateFeatureFlagDto,\n} from './dtos/FeatureFlags.dto.js'\n// Functions\nexport {\n activeGenerations,\n compareGenerationNamesNewestFirst,\n type GenerationDto,\n type GenerationWithClusterCountDto,\n sortGenerationBySemverOfZeebe,\n type UpgradableGenerationsDto,\n} from './dtos/Generations.dto.js'\n// Namespace (type-only - contains only interfaces)\nexport type { Hdp } from './dtos/Hdp.dto.js'\nexport type {\n K8sBackupConfig,\n K8sConfig,\n K8sConfigLegacyFormat,\n K8sContext,\n K8sContextDto,\n} from './dtos/K8sContext.dto.js'\nexport type { MetaDto } from './dtos/Meta.dto.js'\nexport type {\n AutoJoinAssignment,\n LicensingModelType,\n LlmProviderName,\n OrganizationDto,\n OrganizationMetadata,\n OrgOwner,\n OrgWithNameAndSalesPlan,\n} from './dtos/Organization.dto.js'\nexport {\n LICENSING_MODEL_DISPLAY_NAMES,\n VALID_LICENSING_MODELS,\n} from './dtos/Organization.dto.js'\nexport type { OrganizationMemberDto } from './dtos/OrganizationMember.dto.js'\nexport type { OrganizationToSalesPlanDto } from './dtos/OrganizationToSalesPlan.dto.js'\nexport type {\n ReleaseTrainSanityReport,\n SanityFix,\n SanityRuleInfo,\n SanitySeverity,\n SanityViolation,\n} from './dtos/ReleaseTrainSanity.dto.js'\nexport type { RestoreDto, RestoreState } from './dtos/Restore.dto.js'\n// SalesPlan.dto - Types\nexport type {\n ClusterLimits,\n ConsumptionDataItem,\n Limits,\n SalesPlanDto,\n SalesPlanMetadata,\n} from './dtos/SalesPlan.dto.js'\n// SalesPlan.dto - Values (constants and functions)\nexport {\n allClusterBasedLimits,\n allSalesPlanLimits,\n clusterPlanWhiteListIds,\n deprecatedLimit,\n isLimitKeyEnabled,\n isLimitOfferedOnStage,\n isUnlockedClusterPlansStage,\n MAX_CLUSTER_CLIENTS_DEFAULT,\n MAX_CLUSTER_CLIENTS_DEV,\n RETENTION_LIMIT_DEFAULT,\n RETENTION_LIMIT_MAXIMUM,\n RETENTION_LIMIT_MINIMUM,\n unusedClusterBasedLimits,\n unusedSalesPlanLimits,\n} from './dtos/SalesPlan.dto.js'\nexport type { SecureConnectivityDto } from './dtos/SecureConnectivity.dto.js'\nexport type { SignupDto } from './dtos/Signup.dto.js'\nexport type {\n StorybookConfig,\n StorybookConfigBackup,\n StorybookConfigChannel,\n StorybookConfigDatacenter,\n StorybookConfigGeneration,\n} from './dtos/StorybookConfig.dto.js'\nexport type { SystemAuditDto } from './dtos/SystemAudit.dto.js'\nexport type {\n UpgradeReadinessDto,\n UpgradeReadinessSource,\n UpgradeReadinessState,\n} from './dtos/UpgradeReadiness.dto.js'\n// UsageAlert.dto - Types\nexport type { UsageAlertDto } from './dtos/UsageAlert.dto.js'\n// UsageAlert.dto - Values (enum and constants)\nexport {\n UsageAlertInitValues,\n UsageAlertMetric,\n UsageAlertThresholdLimits,\n} from './dtos/UsageAlert.dto.js'\nexport type { UserMetaDataDto } from './dtos/UserMetaData.dto.js'\n// Lucene-style table search (parser + AST \u2192 SQL compiler + field registries).\nexport {\n type AndNode,\n CLUSTER_DEFAULT_SEARCH_FIELDS,\n CLUSTER_SEARCH_FIELDS,\n CLUSTER_TTL_SEARCH_FIELDS,\n type CompileContext,\n type CompiledQuery,\n clusterSearchFieldsForStage,\n compileQuery,\n type FieldBinding,\n findSearchField,\n idSetPredicate,\n isLuceneQueryError,\n joinIdSet,\n LuceneQueryError,\n likeArgument,\n type NotNode,\n ORG_DEFAULT_SEARCH_FIELDS,\n ORGANIZATION_SEARCH_FIELDS,\n type OrNode,\n parseLuceneQuery,\n type QueryNode,\n type RangeNode,\n type SearchFieldCapability,\n type SearchFieldSpec,\n type SearchFieldType,\n type SearchTermOperator,\n type SqlDialect,\n type TermNode,\n} from './search/index.js'\nexport { upgradeGateReason } from './utils/upgradeGateReason.utils.js'\n\n// ============================================================================\n// Enums (runtime values)\n// ============================================================================\n\nexport {\n AlertSubscriptionReportType,\n AlertSubscriptionType,\n} from './enums/AlertSubscription.enum.js'\nexport { AuditEntity, AuditEntityAttribute } from './enums/AuditEntity.enum.js'\nexport { AuditService } from './enums/AuditService.enum.js'\nexport { BackupStatus } from './enums/BackupStatus.enum.js'\nexport {\n ClusterBulkOperationStatus,\n ClusterBulkOperationType,\n} from './enums/ClusterBulkOperation.enum.js'\nexport { ClusterClientPermission } from './enums/ClusterClientPermissions.enum.js'\nexport { ClusterEncryptionKey } from './enums/ClusterEncryptionKey.enum.js'\nexport { ClusterStatus } from './enums/ClusterStatus.enum.js'\nexport { ConsoleAPIClientPermission } from './enums/ConsoleApiClientPermission.enum.js'\nexport { ErrorType } from './enums/ErrorType.enum.js'\nexport type {\n AssignableOrganizationRoleType,\n OrganizationRoleType,\n UnassignableOrganizationRoleType,\n} from './enums/OrganizationRole.enum.js'\nexport {\n AssignableOrganizationRole,\n LegacyHeldOrganizationRole,\n OrganizationRole,\n UnassignableOrganizationRole,\n} from './enums/OrganizationRole.enum.js'\nexport { SseEntity, SseType } from './enums/Sse.enum.js'\nexport {\n SystemAuditEntity,\n SystemAuditEntityAttribute,\n} from './enums/SystemAuditEntity.enum.js'\n\n// ============================================================================\n// Permissions - Namespaces (runtime values)\n// ============================================================================\n\nexport { AccountsPermissions } from './permissions/accounts.permissions.js'\nexport { AlertDistributorPermissions } from './permissions/alert-distributor.permissions.js'\nexport { AuditLoggerPermissions } from './permissions/auditlogger.permissions.js'\nexport {\n accountsUserFeaturesFromPermissions,\n consoleUserFeaturesFromPermissions,\n sessionHasPermission,\n sessionPermissionKeysFor,\n} from './permissions/combo.js'\nexport { ConsolePermissions } from './permissions/console.permissions.js'\nexport { NotificationPermissions } from './permissions/notification.permissions.js'\n// profile.permissions - Types\nexport type { OnboardConfig } from './permissions/profile.permissions.js'\n// profile.permissions - Values (constants)\n// NOTE: the `allowed` email lists (CLOUD_TEAM_EMAILS, SRE_TEAM_EMAILS, etc.)\n// intentionally live in the private `@camunda-cloud/shared-backend` package\n// instead of here, since this package is published publicly to npm.\nexport { PROFILES } from './permissions/profile.permissions.js'\nexport { expandRolesToPermissions } from './permissions/roleExpansion.utils.js'\n\n// ============================================================================\n// Types - Type-only exports (interfaces and type aliases)\n// ============================================================================\n\nexport type { AuditData } from './types/AuditData.type.js'\n// AutoSleep.type - Types\nexport type {\n ActivitySleepEligibilityOptions,\n SleepCronEligibilityOptions,\n} from './types/AutoSleep.type.js'\n// AutoSleep.type - Values (constants and functions)\nexport {\n INTERNAL_LOW_HARDWARE_PLAN_NAME,\n isActivitySleepEligible,\n isClusterTagEligibleForSleepCron,\n isSalesPlanEligibleForSleepCron,\n isSleepCronEligible,\n SLEEP_CRON_ELIGIBLE_TAGS,\n} from './types/AutoSleep.type.js'\nexport type {\n BotContext,\n BotOptions,\n BotRequest,\n GetUserDetailsResponse,\n ListRolesForUserResponse,\n UpdateUserRolesRequest,\n UpdateUserRolesResponse,\n UserContext,\n UserDetails,\n} from './types/Bot.types.js'\n// BulkOperation.type - Types\nexport type {\n BulkClusterDeletionContent,\n BulkClusterDeletionItem,\n BulkClusterGenerationUpdateItem,\n BulkClusterPlanTypeUpdateContent,\n BulkClusterPlanTypeUpdateItem,\n BulkClusterPlanUpdateContent,\n BulkClusterPlanUpdateItem,\n BulkGenerationUpdateContent,\n GenericBulkClusterOperationContent,\n GenericBulkOperationContent,\n GenericClusterBulkOperationItem,\n} from './types/BulkOperation.type.js'\n// BulkOperation.type - Functions (type guards)\nexport {\n isBulkClusterDeletionItem,\n isBulkClusterPlanTypeUpdateItem,\n isBulkClusterPlanUpdateItem,\n isIsBulkClusterGenerationUpdateIten,\n} from './types/BulkOperation.type.js'\n// C8ClusterComponentVersions.type - Types\nexport type {\n ImmutableZeebeClusterVersionsDto,\n MutableZeebeClusterVersionsDto,\n ZeebeClusterVersionsDto,\n} from './types/C8ClusterComponentVersions.type.js'\n// C8ClusterComponentVersions.type - Values (constants)\nexport {\n AllThings,\n ImmutableThings,\n MutableThings,\n} from './types/C8ClusterComponentVersions.type.js'\n// CamundaClusterLabels.type - Types\nexport type {\n CamundaClusterStage,\n CamundaClusterStageLabel,\n ClusterLabels,\n} from './types/CamundaClusterLabels.type.js'\n// CamundaClusterLabels.type - Values (constants)\nexport {\n ALLOWED_CAMUNDA_LABELS,\n StageClusterLabels,\n} from './types/CamundaClusterLabels.type.js'\n// Chargebee.type - Types\nexport type { SubscriptionItem } from './types/Chargebee.type.js'\n// Chargebee.type - Values (enums)\nexport { ConsumptionData, ConsumptionDataType } from './types/Chargebee.type.js'\n// ClusterBulkOperation.type - Types\nexport type {\n ClusterBulkOperationAck,\n ClusterBulkOperationClusterDto,\n ClusterBulkOperationContent,\n ClusterBulkOperationDto,\n ClusterBulkOperationGenerationUpdateParameter,\n ClusterBulkOperationParameter,\n ClusterBulkOperationPlanTypeUpdateParameter,\n ClusterBulkOperationPlanUpdateParameter,\n ClusterBulkOperationPostContent,\n ClusterSleepWakeupParameter,\n} from './types/ClusterBulkOperation.type.js'\nexport type {\n ClusterModificationConfigDto,\n ClusterModificationDto,\n} from './types/ClusterModification.type.js'\n// ClusterPlanFields.type - Values (field spec and type guard)\nexport {\n CLUSTER_PLAN_FIELDS,\n type ClusterPlanFieldSpec,\n type ClusterPlanFieldTree,\n isClusterPlanFieldSpec,\n} from './types/ClusterPlanFields.type.js'\nexport type {\n ClusterPlanModificationAck,\n ClusterPlanModificationConfig,\n ClusterPlanModificationDto,\n} from './types/ClusterPlanModification.type.js'\n// ClusterPlanTypeAvailabilityClass.type - Values (enum and function)\nexport {\n ClusterPlanTypeAvailabilityClass,\n hasNoAvailabilityClass,\n sortByAvailabilityClasses,\n} from './types/ClusterPlanTypeAvailabilityClass.type.js'\n// ClusterPlanTypeCategory.type - Values (enum and functions)\nexport {\n ClusterPlanTypeCategory,\n hasAvailabilityClass,\n sortByClusterPlanTypeCategory,\n} from './types/ClusterPlanTypeCategory.type.js'\nexport type { ClusterPlanTypesToConfig } from './types/ClusterPlanTypesToConfig.type.js'\nexport type { ClusterPlanTypesToReserved } from './types/ClusterPlanTypesToReserved.type.js'\nexport type {\n ClusterTtlDto,\n ClusterTtlDuration,\n ClusterTtlOption,\n ClusterTtlUnlimited,\n UpdateClusterTtlBody,\n} from './types/ClusterTtl.type.js'\nexport {\n CLUSTER_TTL_BACKFILL_REASON,\n CLUSTER_TTL_DURATION_MS,\n CLUSTER_TTL_DURATIONS,\n CLUSTER_TTL_FEATURE_FLAG,\n CLUSTER_TTL_OPTIONS,\n CLUSTER_TTL_UNLIMITED_LINK_MAX_LENGTH,\n CLUSTER_TTL_UNLIMITED_REASON_MAX_LENGTH,\n clusterTtlExpiresAt,\n DEFAULT_CLUSTER_TTL_OPTION,\n extendClusterTtl,\n isClusterTtlDuration,\n isClusterTtlOption,\n isClusterTtlStage,\n isHttpUrl,\n isPastClusterTtl,\n validateClusterTtlUnlimited,\n} from './types/ClusterTtl.type.js'\nexport type {\n ClusterUsageDataRequest,\n ClusterUsageMetricsAddRequestByMetricHeap,\n ClusterUsageMetricsData,\n ClusterUsageMetricsFilter,\n ClusterUsageOrgStartDate,\n} from './types/ClusterUsageMetrics.type.js'\n// Namespace with runtime values (consts, functions, enums)\nexport { ConsoleSM } from './types/ConsoleSelfManaged.type.js'\n// Namespace (type-only - contains only interfaces)\nexport type { ConsoleSMAdminApi } from './types/ConsoleSelfManagedAdminApi.type.js'\n// Dashboard.types - Types\nexport type {\n DashboardConfig,\n DashboardMappingItem,\n DashboardMappingTarget,\n DashboardResultPrimitive,\n DashboardResultRow,\n EngineeringOperationsDashboardResponse,\n} from './types/Dashboard.types.js'\nexport type { EnterpriseIncludingValueMetrics } from './types/EnterpriseIncludingValueMetrics.type.js'\nexport type {\n HdpTenantUsageBreakdown,\n HdpTenantUsagePerClusterPoint,\n HdpTenantUsagePoint,\n} from './types/HdpTenantUsage.type.js'\n// hdp.types - Types (interfaces)\nexport type {\n AlertSubscription as HdpAlertSubscription,\n Audit as HdpAudit,\n ByomClient as HdpByomClient,\n Channel as HdpChannel,\n Cluster as HdpCluster,\n ClusterBackup as HdpClusterBackup,\n ClusterBackupSchedule as HdpClusterBackupSchedule,\n ClusterBulkOperation as HdpClusterBulkOperation,\n ClusterClient as HdpClusterClient,\n ClusterModification as HdpClusterModification,\n ClusterPlan as HdpClusterPlan,\n ClusterPlanType as HdpClusterPlanType,\n ConnectorSecret as HdpConnectorSecret,\n ConsoleApiClient as HdpConsoleApiClient,\n Datacenter as HdpDatacenter,\n Generation as HdpGeneration,\n HdpBackendChangeEvent,\n HdpClusterModificationConfig,\n HdpDisk,\n HdpEntity,\n HdpPrometheusDataCapacityDataPoint,\n Invite as HdpInvite,\n LlmSpend as HdpLlmSpend,\n Organization as HdpOrganization,\n SecureConnectivity as HdpSecureConnectivity,\n SystemAudit as HdpSystemAudit,\n TelemetryData as HdpTelemetryData,\n UsageAlert as HdpUsageAlert,\n User as HdpUser,\n UserLogin as HdpUserLogin,\n} from './types/hdp.types.js'\n// hdp.types - Values (enums)\nexport {\n AlertSubscriptionReportType as HdpAlertSubscriptionReportType,\n AlertSubscriptionType as HdpAlertSubscriptionType,\n HDP_DISKS,\n} from './types/hdp.types.js'\n// notification.type - Types\nexport type {\n GlobalNotification,\n NotificationDto,\n NotificationMeta,\n NotificationOptions,\n NotificationPermission,\n NotificationSource,\n NotificationState,\n NotificationType,\n OrgNotification,\n UserNotification,\n UserOrgNotification,\n} from './types/notification.type.js'\n// notification.type - Values (enums and constants)\nexport {\n NotificationPermissionValues,\n NotificationSourceEnum,\n NotificationStateEnum,\n NotificationTypeEnum,\n} from './types/notification.type.js'\n// OrganizationPermission.type - Types\nexport type {\n CreateReadUpdateDelete,\n OrganizationPermissions,\n} from './types/OrganizationPermission.type.js'\n// OrganizationPermission.type - Values (constants)\nexport {\n OrganizationPermissionsDescriptions,\n PermissionsForOrganizationRole,\n} from './types/OrganizationPermission.type.js'\nexport {\n getPreprodClusterTtlHours,\n isPastPreprodClusterTtl,\n isPreprodClusterTtlStage,\n parseNumericLimit,\n} from './types/PreprodClusterTtl.type.js'\n// Roles.js - Types\nexport type {\n AccountRoles,\n ConsoleRoles,\n ModelerRoles,\n Roles,\n} from './types/Roles.js'\n// Roles.js - Values (constants)\nexport { SAFE_ROLES } from './types/Roles.js'\n// SalesPlanType.type - Types\nexport type {\n DisplayedSalesPlan,\n RevisitedSalesPlanName,\n} from './types/SalesPlanType.type.js'\n// SalesPlanType.type - Values (enums and functions)\nexport {\n AnalyticsSalesPlanType,\n getAnalyticsSalesPlanFromOrgSalesPlan,\n getDisplayedSalesPlan,\n getRevisitedSalesPlanName,\n OPTIMIZE_DISABLED_PLAN_TYPES,\n SalesPlanType,\n} from './types/SalesPlanType.type.js'\n// SpamDetection.type - Types\nexport type { SpamDetectionPatterns } from './types/SpamDetection.type.js'\n// SpamDetection.type - Values (constants)\nexport { TEERGRUBE_PATTERNS } from './types/SpamDetection.type.js'\nexport type {\n AlertSubscriptionSseEvent,\n BackupSseEvent,\n ClusterClientSseEvent,\n ClusterSseEvent,\n ConnectorSecretsSseEvent,\n ConsoleApiClientSseEvent,\n ConsoleSseEvent,\n MonitoringSseEvent,\n SecureConnectivitySseEvent,\n SseClusterPayload,\n SseMonitoringPayload,\n SseSecureConnectivityPayload,\n} from './types/SseEvent.type.js'\n// Namespace (type-only - contains only interfaces)\nexport type { AccountsStats } from './types/Stats.types.js'\n// Survey.type - Types\nexport type { Persona, SurveyDto } from './types/Survey.type.js'\n// Survey.type - Values (enum)\nexport { FeedbackType } from './types/Survey.type.js'\n// SuspendStrategy.type - Types\nexport type {\n GetSuspendStrategyOptions,\n SuspendStrategy,\n} from './types/SuspendStrategy.type.js'\n// SuspendStrategy.type - Values (function)\nexport { getSuspendStrategy } from './types/SuspendStrategy.type.js'\nexport type { SystemAuditData } from './types/SystemAuditData.type.js'\n\n// Namespace (runtime value)\nexport { Telemetry } from './types/Telemetry.type.js'\n\n// TrialManagement.types - Types\nexport type {\n ExtensionListItem,\n ExtensionListResponse,\n OrgTrialDetail,\n TrialExtensionSource,\n TrialManagementStats,\n} from './types/TrialManagement.types.js'\n\n// User.type - Types\nexport type {\n AccountsData,\n AppMetadata,\n BasicUser,\n BlockedFor,\n Identity,\n OrgMembership,\n User,\n UserMetadata,\n UserRequest,\n} from './types/User.type.js'\n\n// User.type - Values (enum)\nexport { UserMetadataEvent } from './types/User.type.js'\n\nexport type {\n UniqueTaskUser,\n ValueMetrics,\n ValueMetricsPerYearMonth,\n} from './types/ValueMetrics.type.js'\n\n// ============================================================================\n// Utils - Classes (runtime values)\n// ============================================================================\n\nexport {\n CLOUD_PROVIDER_ORDER,\n getCloudProviderLabel,\n getCloudProviderRank,\n} from './utils/cloudProvider.utils.js'\nexport {\n type ConnectivityStatus,\n deriveConnectivityMessage,\n deriveConnectivityStatus,\n} from './utils/connectivityStatus.utils.js'\nexport { ConsoleSelfManagedUtils } from './utils/console-sm.utils.js'\nexport type {\n CronScheduleValidationFailure,\n CronScheduleValidationResult,\n CronScheduleValidationSuccess,\n} from './utils/cronSchedule.utils.js'\nexport {\n BACKUP_SCHEDULE_MIN_INTERVAL_MINUTES,\n validateCronSchedule,\n} from './utils/cronSchedule.utils.js'\nexport {\n canonicalPlan,\n canonicalPlanKey,\n} from './utils/elasticsearchPlanPath.utils.js'\nexport {\n deriveEncryptionStatus,\n type EncryptionStatus,\n isEncryptionStatus,\n} from './utils/encryptionStatus.utils.js'\n// enterprise-connection.utils - Types\nexport type { EnterpriseConnectionOrganizationAssignment } from './utils/enterprise-connection.utils.js'\n// enterprise-connection.utils - Values (functions)\nexport {\n enterpriseConnectionMetadataToOrganizationAssignments,\n organizationAssignmentsToEnterpriseConnectionMetadata,\n} from './utils/enterprise-connection.utils.js'\nexport {\n addMonthsClamped,\n DEFAULT_ENTERPRISE_DURATION_IN_MONTHS,\n diffInWholeMonths,\n type EnterpriseTermWindow,\n getCurrentEnterpriseTerm,\n peakWithinTerm,\n toUtcDayStartMs,\n} from './utils/enterpriseTerm.utils.js'\nexport type { EnvVarEntry } from './utils/envVars.js'\nexport { parseEnvVars, serializeEnvVars } from './utils/envVars.js'\nexport {\n deriveFailoverKeyPolicyPrincipals,\n type FailoverKeyPolicyPrincipals,\n} from './utils/failoverKeyPolicy.utils.js'\nexport {\n KMS_ARN,\n KMS_MRK_ARN,\n type KmsArnValidationError,\n type ParsedKmsArn,\n parseKmsArn,\n validateKmsArnForRegion,\n} from './utils/kmsArn.utils.js'\nexport { validateLabels } from './utils/labelValidator.utils.js'\nexport { ObjectMergeUtils } from './utils/objectMerge.utils.js'\nexport {\n computeOrgStartDate,\n type OrgStartDateInput,\n} from './utils/orgStartDate.utils.js'\nexport {\n getPermissionsByRoles,\n getUserPermissionsForOrg,\n} from './utils/orgs/OrgHelper.js'\n\n// PasswordPolicy - Types\nexport type {\n PasswordPolicyRequest,\n PasswordPolicyResult,\n} from './utils/PasswordPolicy.js'\n\n// PasswordPolicy - Values (constants and function)\nexport {\n MAXLENGTH as PASSWORD_POLICY_MAXLENGTH,\n MINLENGTH as PASSWORD_POLICY_MINLENGTH,\n passwordPolicyCheck,\n} from './utils/PasswordPolicy.js'\nexport { isQaUserEmail, qaUserEmail } from './utils/qa-user.utils.js'\nexport {\n deriveSecondaryStorageStatus,\n type SecondaryStorageStatus,\n} from './utils/secondaryStorageStatus.utils.js'\nexport {\n allSettledResultsCounts,\n getFulfilledPromises,\n getRejectedPromises,\n getSettledSummary,\n} from './utils/settledPromises.util.js'\nexport {\n isValidAwsArn,\n isValidCIDR,\n isValidCIDRList,\n isValidClientName,\n isValidHostname,\n isValidPrivateLinkRegion,\n normalizeCIDRList,\n} from './utils/string-validation.utils.js'\nexport {\n extractCamundaUserEmail,\n guessName,\n isCamundaUserId,\n} from './utils/user.utils.js'\n\n// versionCheck.utils - Values (enum and function)\nexport {\n checkVersion,\n generationImageErrorMessage,\n isAppIntegrationsVersionSupported,\n isGenerationResumable,\n isSecretsFilterModeConfigurable,\n isValidGenerationImage,\n normalizeGenerationVersion,\n stripSecfixPostfix,\n VersionCheckOperator,\n} from './utils/versionCheck.utils.js'\n\n// ============================================================================\n// Config - Configuration files and types\n// ============================================================================\n\nexport { default as CAMUNDI_PERMISSION_RULES } from './config/camundi-permission-rules.js'\nexport type { CamundiPermissionRules } from './config/camundi-permission-rules.types.js'\n\nexport {\n augmentCamundiPermissions,\n getApplicableRolesForEmployee,\n HIBOB_CACHE_KEY,\n HIBOB_CACHE_NAMESPACE,\n isManager,\n} from './utils/camundiPermissionAugmenter.utils.js'\n"],
|
|
5
|
+
"mappings": "AAUA;AAAA,EACE;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,OACK;AACP,SAAS,KAAK,MAAM,QAAQ,QAAQ,YAAY;AAEhD;AAAA,EACE;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,OACK;AACP;AAAA,EACE;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,OACK;AACP,SAAS,4BAA4B;AACrC,SAAS,iDAAiD;AAK1D,SAAS,wCAAwC;AACjD;AAAA,EACE;AAAA,EACA;AAAA,EACA;AAAA,OACK;AACP;AAAA,EACE;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,OACK;AAcP;AAAA,EACE;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,OACK;AAeP;AAAA,EACE;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,OACK;AACP;AAAA,EACE;AAAA,EACA;AAAA,OACK;AAEP;AAAA,EACE;AAAA,EACA;AAAA,OACK;AAMP;AAAA,EACE;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,OACK;AAEP;AAAA,EACE;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,OACK;AAEP;AAAA,EACE;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EAMA;AAAA,EASA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,OACK;AAIP;AAAA,EACE;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,OACK;AAUP;AAAA,EACE;AAAA,EACA;AAAA,EACA;AAAA,OACK;AAWP;AAAA,EACE;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,OACK;AAuBP;AAAA,EACE;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,OACK;AAWP,SAAS,uCAAuC;AAoGhD;AAAA,EACE;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,OACK;AAiBP;AAAA,EACE;AAAA,EACA;AAAA,EAGA;AAAA,OAEK;AAoBP;AAAA,EACE;AAAA,EACA;AAAA,OACK;AAoBP;AAAA,EACE;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,OACK;AAmBP;AAAA,EACE;AAAA,EACA;AAAA,EACA;AAAA,OACK;AAGP;AAAA,EAEE;AAAA,EACA;AAAA,EACA;AAAA,EAGA;AAAA,EACA;AAAA,EAEA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EAEA;AAAA,EACA;AAAA,EAEA;AAAA,OASK;AACP,SAAS,yBAAyB;AAMlC;AAAA,EACE;AAAA,EACA;AAAA,OACK;AACP,SAAS,aAAa,4BAA4B;AAClD,SAAS,oBAAoB;AAC7B,SAAS,oBAAoB;AAC7B;AAAA,EACE;AAAA,EACA;AAAA,OACK;AACP,SAAS,+BAA+B;AACxC,SAAS,4BAA4B;AACrC,SAAS,qBAAqB;AAC9B,SAAS,kCAAkC;AAC3C,SAAS,iBAAiB;AAM1B;AAAA,EACE;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,OACK;AACP,SAAS,WAAW,eAAe;AACnC;AAAA,EACE;AAAA,EACA;AAAA,OACK;AAMP,SAAS,2BAA2B;AACpC,SAAS,mCAAmC;AAC5C,SAAS,8BAA8B;AACvC;AAAA,EACE;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,OACK;AACP,SAAS,0BAA0B;AACnC,SAAS,+BAA+B;AAOxC,SAAS,gBAAgB;AACzB,SAAS,gCAAgC;AAazC;AAAA,EACE;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,OACK;AA2BP;AAAA,EACE;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,OACK;AAQP;AAAA,EACE;AAAA,EACA;AAAA,EACA;AAAA,OACK;AAQP;AAAA,EACE;AAAA,EACA;AAAA,OACK;AAIP,SAAS,iBAAiB,2BAA2B;AAmBrD;AAAA,EACE;AAAA,EAGA;AAAA,OACK;AAOP;AAAA,EACE;AAAA,EACA;AAAA,EACA;AAAA,OACK;AAEP;AAAA,EACE;AAAA,EACA;AAAA,EACA;AAAA,OACK;AAUP;AAAA,EACE;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,OACK;AASP,SAAS,iBAAiB;AAoD1B;AAAA,EACiC,+BAA/BA;AAAA,EACyB,yBAAzBC;AAAA,EACA;AAAA,OACK;AAgBP;AAAA,EACE;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,OACK;AAOP;AAAA,EACE;AAAA,EACA;AAAA,OACK;AACP;AAAA,EACE;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,OACK;AASP,SAAS,kBAAkB;AAO3B;AAAA,EACE;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,OACK;AAIP,SAAS,0BAA0B;AAoBnC,SAAS,oBAAoB;AAO7B,SAAS,0BAA0B;AAInC,SAAS,iBAAiB;AAyB1B,SAAS,yBAAyB;AAYlC;AAAA,EACE;AAAA,EACA;AAAA,EACA;AAAA,OACK;AACP;AAAA,EAEE;AAAA,EACA;AAAA,OACK;AACP,SAAS,+BAA+B;AAMxC;AAAA,EACE;AAAA,EACA;AAAA,OACK;AACP;AAAA,EACE;AAAA,EACA;AAAA,OACK;AACP;AAAA,EACE;AAAA,EAEA;AAAA,OACK;AAIP;AAAA,EACE;AAAA,EACA;AAAA,OACK;AACP;AAAA,EACE;AAAA,EACA;AAAA,EACA;AAAA,EAEA;AAAA,EACA;AAAA,EACA;AAAA,OACK;AAEP,SAAS,cAAc,wBAAwB;AAC/C;AAAA,EACE;AAAA,OAEK;AACP;AAAA,EACE;AAAA,EACA;AAAA,EAGA;AAAA,EACA;AAAA,OACK;AACP,SAAS,sBAAsB;AAC/B,SAAS,wBAAwB;AACjC;AAAA,EACE;AAAA,OAEK;AACP;AAAA,EACE;AAAA,EACA;AAAA,OACK;AASP;AAAA,EACe;AAAA,EACA;AAAA,EACb;AAAA,OACK;AACP,SAAS,eAAe,mBAAmB;AAC3C;AAAA,EACE;AAAA,OAEK;AACP;AAAA,EACE;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,OACK;AACP;AAAA,EACE;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,OACK;AACP;AAAA,EACE;AAAA,EACA;AAAA,EACA;AAAA,OACK;AAGP;AAAA,EACE;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,OACK;AAMP,SAAoB,WAAXC,gBAA2C;AAGpD;AAAA,EACE;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,OACK;",
|
|
6
6
|
"names": ["AlertSubscriptionReportType", "AlertSubscriptionType", "default"]
|
|
7
7
|
}
|
|
@@ -7,5 +7,16 @@ import type { SearchFieldSpec } from './fields.js';
|
|
|
7
7
|
* {@link CLUSTER_DEFAULT_SEARCH_FIELDS}.
|
|
8
8
|
*/
|
|
9
9
|
export declare const CLUSTER_SEARCH_FIELDS: readonly SearchFieldSpec[];
|
|
10
|
+
/**
|
|
11
|
+
* The cluster search fields that read the cluster TTL. console-backend knows
|
|
12
|
+
* them only where the TTL shows, see `isClusterTtlStage`.
|
|
13
|
+
*/
|
|
14
|
+
export declare const CLUSTER_TTL_SEARCH_FIELDS: ReadonlySet<string>;
|
|
15
|
+
/**
|
|
16
|
+
* clusterSearchFieldsForStage gives `CLUSTER_SEARCH_FIELDS` without the TTL
|
|
17
|
+
* fields on a stage where the cluster TTL is off. A list of fields for a
|
|
18
|
+
* reader must come from here, thus prod offers no field that answers 400.
|
|
19
|
+
*/
|
|
20
|
+
export declare function clusterSearchFieldsForStage(stage: string | undefined): readonly SearchFieldSpec[];
|
|
10
21
|
/** Fields a bare term searches for clusters (name substring — matches `q`). */
|
|
11
22
|
export declare const CLUSTER_DEFAULT_SEARCH_FIELDS: readonly ["name"];
|
|
@@ -1,3 +1,4 @@
|
|
|
1
|
+
import { isClusterTtlStage } from "../types/ClusterTtl.type.js";
|
|
1
2
|
const CLUSTER_SEARCH_FIELDS = [
|
|
2
3
|
{
|
|
3
4
|
field: "name",
|
|
@@ -134,11 +135,38 @@ const CLUSTER_SEARCH_FIELDS = [
|
|
|
134
135
|
type: "date",
|
|
135
136
|
capabilities: ["match", "range"],
|
|
136
137
|
example: "created:>2024-01-01"
|
|
138
|
+
},
|
|
139
|
+
{
|
|
140
|
+
field: "hasTtl",
|
|
141
|
+
label: "Has TTL",
|
|
142
|
+
description: "Whether the cluster TTL has an expiry. False means the TTL is unlimited. Only on dev and int.",
|
|
143
|
+
type: "boolean",
|
|
144
|
+
capabilities: ["match"],
|
|
145
|
+
example: "hasTtl:true"
|
|
146
|
+
},
|
|
147
|
+
{
|
|
148
|
+
field: "ttlExpiresAt",
|
|
149
|
+
label: "TTL expiry",
|
|
150
|
+
description: "The time when the cluster TTL ends (ISO, e.g. 2026-10-31). Supports ranges. A cluster with an unlimited TTL never matches. Only on dev and int.",
|
|
151
|
+
type: "date",
|
|
152
|
+
capabilities: ["match", "range"],
|
|
153
|
+
example: "ttlExpiresAt:<2026-11-01"
|
|
137
154
|
}
|
|
138
155
|
];
|
|
156
|
+
const CLUSTER_TTL_SEARCH_FIELDS = /* @__PURE__ */ new Set([
|
|
157
|
+
"hasTtl",
|
|
158
|
+
"ttlExpiresAt"
|
|
159
|
+
]);
|
|
160
|
+
function clusterSearchFieldsForStage(stage) {
|
|
161
|
+
return isClusterTtlStage(stage) ? CLUSTER_SEARCH_FIELDS : CLUSTER_SEARCH_FIELDS.filter(
|
|
162
|
+
(field) => !CLUSTER_TTL_SEARCH_FIELDS.has(field.field)
|
|
163
|
+
);
|
|
164
|
+
}
|
|
139
165
|
const CLUSTER_DEFAULT_SEARCH_FIELDS = ["name"];
|
|
140
166
|
export {
|
|
141
167
|
CLUSTER_DEFAULT_SEARCH_FIELDS,
|
|
142
|
-
CLUSTER_SEARCH_FIELDS
|
|
168
|
+
CLUSTER_SEARCH_FIELDS,
|
|
169
|
+
CLUSTER_TTL_SEARCH_FIELDS,
|
|
170
|
+
clusterSearchFieldsForStage
|
|
143
171
|
};
|
|
144
172
|
//# sourceMappingURL=cluster-search-fields.js.map
|
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
{
|
|
2
2
|
"version": 3,
|
|
3
3
|
"sources": ["../../src/search/cluster-search-fields.ts"],
|
|
4
|
-
"sourcesContent": ["/*\n * Copyright Camunda Services GmbH and/or licensed to Camunda Services GmbH\n * under one or more contributor license agreements. Licensed under a commercial license.\n * You may not use this file except in compliance with the commercial license.\n */\n\nimport type { SearchFieldSpec } from './fields.js'\n\n/**\n * Searchable fields for the Clusters list (mirrors `ListClustersV2Params.filter`\n * \u2014 the fields the endpoint already filters on). `status`, `region`, and\n * `provider` are resolved server-side from live K8s state / context config, so\n * they only support equality. A bare term searches\n * {@link CLUSTER_DEFAULT_SEARCH_FIELDS}.\n */\nexport const CLUSTER_SEARCH_FIELDS: readonly SearchFieldSpec[] = [\n {\n field: 'name',\n label: 'Name',\n description: 'Cluster name (substring match; supports * and ?).',\n type: 'string',\n capabilities: ['match'],\n example: 'name:prod',\n },\n {\n field: 'id',\n label: 'ID',\n description: 'Cluster UUID (substring match).',\n type: 'string',\n capabilities: ['match'],\n example: 'id:9c2b',\n },\n {\n field: 'orgId',\n label: 'Organization ID',\n description: 'Owning organization UUID.',\n type: 'string',\n capabilities: ['match'],\n example: 'orgId:2f1a9c3e-4b7d-4c2a-9f1e-8a6b5c4d3e2f',\n },\n {\n field: 'status',\n label: 'Status',\n description: 'Live cluster health (e.g. healthy, unhealthy, updating).',\n type: 'string',\n capabilities: ['match'],\n example: 'status:healthy',\n },\n {\n field: 'plan',\n label: 'Plan type',\n description: 'Cluster plan-type name (e.g. Trial, Production-S).',\n type: 'string',\n capabilities: ['match'],\n example: 'plan:Production-S',\n },\n {\n field: 'planName',\n label: 'Plan name',\n description: 'The concrete cluster-plan name (not the type).',\n type: 'string',\n capabilities: ['match'],\n example: 'planName:\"Trial Cluster\"',\n },\n {\n field: 'generation',\n label: 'Generation',\n description:\n 'Cluster generation name. More than one generation can carry the same name. Use a full generationId to match exactly one.',\n type: 'string',\n capabilities: ['match'],\n example: 'generation:\"Zeebe 8.6.0\"',\n },\n {\n field: 'generationId',\n label: 'Generation ID',\n description:\n 'Generation UUID. A full UUID matches one generation, even when the name repeats. A value with * or ? can match more.',\n type: 'string',\n capabilities: ['match'],\n example: 'generationId:66e00e17-ed33-469b-90e9-40a02d0e82e6',\n },\n {\n field: 'minorVersion',\n label: 'Minor version',\n description: 'Zeebe minor-version prefix (e.g. 8.7 matches 8.7.x).',\n type: 'string',\n capabilities: ['match'],\n example: 'minorVersion:8.7',\n },\n {\n field: 'channel',\n label: 'Channel',\n description: 'Release channel name.',\n type: 'string',\n capabilities: ['match'],\n example: 'channel:Stable',\n },\n {\n field: 'region',\n label: 'Region',\n description: 'Region name (resolved from the K8s context).',\n type: 'string',\n capabilities: ['match'],\n example: 'region:\"Europe West\"',\n },\n {\n field: 'provider',\n label: 'Cloud provider',\n description: 'Cloud provider (resolved from the K8s context).',\n type: 'string',\n capabilities: ['match'],\n example: 'provider:gcp',\n },\n {\n field: 'k8sContext',\n label: 'K8s context',\n description: 'Exact K8s context UUID.',\n type: 'string',\n capabilities: ['match'],\n example: 'k8sContext:7d3b2a10-9e5f-4c1b-b8a2-1f2e3d4c5b6a',\n },\n {\n field: 'autoUpdate',\n label: 'Auto-update',\n description: 'Whether auto-update is enabled.',\n type: 'boolean',\n capabilities: ['match'],\n example: 'autoUpdate:false',\n },\n {\n field: 'internal',\n label: 'Internal',\n description: 'Whether the cluster is Camunda-owned.',\n type: 'boolean',\n capabilities: ['match'],\n example: 'internal:true',\n },\n {\n field: 'hasActiveModification',\n label: 'Active modification',\n description:\n 'Whether the cluster has an active (non-archived) modification.',\n type: 'boolean',\n capabilities: ['match'],\n example: 'hasActiveModification:true',\n },\n {\n field: 'created',\n label: 'Created',\n description: 'Creation date (ISO, e.g. 2024-01-31). Supports ranges.',\n type: 'date',\n capabilities: ['match', 'range'],\n example: 'created:>2024-01-01',\n },\n] as const\n\n/** Fields a bare term searches for clusters (name substring \u2014 matches `q`). */\nexport const CLUSTER_DEFAULT_SEARCH_FIELDS = ['name'] as const\n"],
|
|
5
|
-
"mappings": "
|
|
4
|
+
"sourcesContent": ["/*\n * Copyright Camunda Services GmbH and/or licensed to Camunda Services GmbH\n * under one or more contributor license agreements. Licensed under a commercial license.\n * You may not use this file except in compliance with the commercial license.\n */\n\nimport { isClusterTtlStage } from '../types/ClusterTtl.type.js'\nimport type { SearchFieldSpec } from './fields.js'\n\n/**\n * Searchable fields for the Clusters list (mirrors `ListClustersV2Params.filter`\n * \u2014 the fields the endpoint already filters on). `status`, `region`, and\n * `provider` are resolved server-side from live K8s state / context config, so\n * they only support equality. A bare term searches\n * {@link CLUSTER_DEFAULT_SEARCH_FIELDS}.\n */\nexport const CLUSTER_SEARCH_FIELDS: readonly SearchFieldSpec[] = [\n {\n field: 'name',\n label: 'Name',\n description: 'Cluster name (substring match; supports * and ?).',\n type: 'string',\n capabilities: ['match'],\n example: 'name:prod',\n },\n {\n field: 'id',\n label: 'ID',\n description: 'Cluster UUID (substring match).',\n type: 'string',\n capabilities: ['match'],\n example: 'id:9c2b',\n },\n {\n field: 'orgId',\n label: 'Organization ID',\n description: 'Owning organization UUID.',\n type: 'string',\n capabilities: ['match'],\n example: 'orgId:2f1a9c3e-4b7d-4c2a-9f1e-8a6b5c4d3e2f',\n },\n {\n field: 'status',\n label: 'Status',\n description: 'Live cluster health (e.g. healthy, unhealthy, updating).',\n type: 'string',\n capabilities: ['match'],\n example: 'status:healthy',\n },\n {\n field: 'plan',\n label: 'Plan type',\n description: 'Cluster plan-type name (e.g. Trial, Production-S).',\n type: 'string',\n capabilities: ['match'],\n example: 'plan:Production-S',\n },\n {\n field: 'planName',\n label: 'Plan name',\n description: 'The concrete cluster-plan name (not the type).',\n type: 'string',\n capabilities: ['match'],\n example: 'planName:\"Trial Cluster\"',\n },\n {\n field: 'generation',\n label: 'Generation',\n description:\n 'Cluster generation name. More than one generation can carry the same name. Use a full generationId to match exactly one.',\n type: 'string',\n capabilities: ['match'],\n example: 'generation:\"Zeebe 8.6.0\"',\n },\n {\n field: 'generationId',\n label: 'Generation ID',\n description:\n 'Generation UUID. A full UUID matches one generation, even when the name repeats. A value with * or ? can match more.',\n type: 'string',\n capabilities: ['match'],\n example: 'generationId:66e00e17-ed33-469b-90e9-40a02d0e82e6',\n },\n {\n field: 'minorVersion',\n label: 'Minor version',\n description: 'Zeebe minor-version prefix (e.g. 8.7 matches 8.7.x).',\n type: 'string',\n capabilities: ['match'],\n example: 'minorVersion:8.7',\n },\n {\n field: 'channel',\n label: 'Channel',\n description: 'Release channel name.',\n type: 'string',\n capabilities: ['match'],\n example: 'channel:Stable',\n },\n {\n field: 'region',\n label: 'Region',\n description: 'Region name (resolved from the K8s context).',\n type: 'string',\n capabilities: ['match'],\n example: 'region:\"Europe West\"',\n },\n {\n field: 'provider',\n label: 'Cloud provider',\n description: 'Cloud provider (resolved from the K8s context).',\n type: 'string',\n capabilities: ['match'],\n example: 'provider:gcp',\n },\n {\n field: 'k8sContext',\n label: 'K8s context',\n description: 'Exact K8s context UUID.',\n type: 'string',\n capabilities: ['match'],\n example: 'k8sContext:7d3b2a10-9e5f-4c1b-b8a2-1f2e3d4c5b6a',\n },\n {\n field: 'autoUpdate',\n label: 'Auto-update',\n description: 'Whether auto-update is enabled.',\n type: 'boolean',\n capabilities: ['match'],\n example: 'autoUpdate:false',\n },\n {\n field: 'internal',\n label: 'Internal',\n description: 'Whether the cluster is Camunda-owned.',\n type: 'boolean',\n capabilities: ['match'],\n example: 'internal:true',\n },\n {\n field: 'hasActiveModification',\n label: 'Active modification',\n description:\n 'Whether the cluster has an active (non-archived) modification.',\n type: 'boolean',\n capabilities: ['match'],\n example: 'hasActiveModification:true',\n },\n {\n field: 'created',\n label: 'Created',\n description: 'Creation date (ISO, e.g. 2024-01-31). Supports ranges.',\n type: 'date',\n capabilities: ['match', 'range'],\n example: 'created:>2024-01-01',\n },\n {\n field: 'hasTtl',\n label: 'Has TTL',\n description:\n 'Whether the cluster TTL has an expiry. False means the TTL is unlimited. Only on dev and int.',\n type: 'boolean',\n capabilities: ['match'],\n example: 'hasTtl:true',\n },\n {\n field: 'ttlExpiresAt',\n label: 'TTL expiry',\n description:\n 'The time when the cluster TTL ends (ISO, e.g. 2026-10-31). Supports ranges. A cluster with an unlimited TTL never matches. Only on dev and int.',\n type: 'date',\n capabilities: ['match', 'range'],\n example: 'ttlExpiresAt:<2026-11-01',\n },\n] as const\n\n/**\n * The cluster search fields that read the cluster TTL. console-backend knows\n * them only where the TTL shows, see `isClusterTtlStage`.\n */\nexport const CLUSTER_TTL_SEARCH_FIELDS: ReadonlySet<string> = new Set([\n 'hasTtl',\n 'ttlExpiresAt',\n])\n\n/**\n * clusterSearchFieldsForStage gives `CLUSTER_SEARCH_FIELDS` without the TTL\n * fields on a stage where the cluster TTL is off. A list of fields for a\n * reader must come from here, thus prod offers no field that answers 400.\n */\nexport function clusterSearchFieldsForStage(\n stage: string | undefined,\n): readonly SearchFieldSpec[] {\n return isClusterTtlStage(stage)\n ? CLUSTER_SEARCH_FIELDS\n : CLUSTER_SEARCH_FIELDS.filter(\n (field) => !CLUSTER_TTL_SEARCH_FIELDS.has(field.field),\n )\n}\n\n/** Fields a bare term searches for clusters (name substring \u2014 matches `q`). */\nexport const CLUSTER_DEFAULT_SEARCH_FIELDS = ['name'] as const\n"],
|
|
5
|
+
"mappings": "AAMA,SAAS,yBAAyB;AAU3B,MAAM,wBAAoD;AAAA,EAC/D;AAAA,IACE,OAAO;AAAA,IACP,OAAO;AAAA,IACP,aAAa;AAAA,IACb,MAAM;AAAA,IACN,cAAc,CAAC,OAAO;AAAA,IACtB,SAAS;AAAA,EACX;AAAA,EACA;AAAA,IACE,OAAO;AAAA,IACP,OAAO;AAAA,IACP,aAAa;AAAA,IACb,MAAM;AAAA,IACN,cAAc,CAAC,OAAO;AAAA,IACtB,SAAS;AAAA,EACX;AAAA,EACA;AAAA,IACE,OAAO;AAAA,IACP,OAAO;AAAA,IACP,aAAa;AAAA,IACb,MAAM;AAAA,IACN,cAAc,CAAC,OAAO;AAAA,IACtB,SAAS;AAAA,EACX;AAAA,EACA;AAAA,IACE,OAAO;AAAA,IACP,OAAO;AAAA,IACP,aAAa;AAAA,IACb,MAAM;AAAA,IACN,cAAc,CAAC,OAAO;AAAA,IACtB,SAAS;AAAA,EACX;AAAA,EACA;AAAA,IACE,OAAO;AAAA,IACP,OAAO;AAAA,IACP,aAAa;AAAA,IACb,MAAM;AAAA,IACN,cAAc,CAAC,OAAO;AAAA,IACtB,SAAS;AAAA,EACX;AAAA,EACA;AAAA,IACE,OAAO;AAAA,IACP,OAAO;AAAA,IACP,aAAa;AAAA,IACb,MAAM;AAAA,IACN,cAAc,CAAC,OAAO;AAAA,IACtB,SAAS;AAAA,EACX;AAAA,EACA;AAAA,IACE,OAAO;AAAA,IACP,OAAO;AAAA,IACP,aACE;AAAA,IACF,MAAM;AAAA,IACN,cAAc,CAAC,OAAO;AAAA,IACtB,SAAS;AAAA,EACX;AAAA,EACA;AAAA,IACE,OAAO;AAAA,IACP,OAAO;AAAA,IACP,aACE;AAAA,IACF,MAAM;AAAA,IACN,cAAc,CAAC,OAAO;AAAA,IACtB,SAAS;AAAA,EACX;AAAA,EACA;AAAA,IACE,OAAO;AAAA,IACP,OAAO;AAAA,IACP,aAAa;AAAA,IACb,MAAM;AAAA,IACN,cAAc,CAAC,OAAO;AAAA,IACtB,SAAS;AAAA,EACX;AAAA,EACA;AAAA,IACE,OAAO;AAAA,IACP,OAAO;AAAA,IACP,aAAa;AAAA,IACb,MAAM;AAAA,IACN,cAAc,CAAC,OAAO;AAAA,IACtB,SAAS;AAAA,EACX;AAAA,EACA;AAAA,IACE,OAAO;AAAA,IACP,OAAO;AAAA,IACP,aAAa;AAAA,IACb,MAAM;AAAA,IACN,cAAc,CAAC,OAAO;AAAA,IACtB,SAAS;AAAA,EACX;AAAA,EACA;AAAA,IACE,OAAO;AAAA,IACP,OAAO;AAAA,IACP,aAAa;AAAA,IACb,MAAM;AAAA,IACN,cAAc,CAAC,OAAO;AAAA,IACtB,SAAS;AAAA,EACX;AAAA,EACA;AAAA,IACE,OAAO;AAAA,IACP,OAAO;AAAA,IACP,aAAa;AAAA,IACb,MAAM;AAAA,IACN,cAAc,CAAC,OAAO;AAAA,IACtB,SAAS;AAAA,EACX;AAAA,EACA;AAAA,IACE,OAAO;AAAA,IACP,OAAO;AAAA,IACP,aAAa;AAAA,IACb,MAAM;AAAA,IACN,cAAc,CAAC,OAAO;AAAA,IACtB,SAAS;AAAA,EACX;AAAA,EACA;AAAA,IACE,OAAO;AAAA,IACP,OAAO;AAAA,IACP,aAAa;AAAA,IACb,MAAM;AAAA,IACN,cAAc,CAAC,OAAO;AAAA,IACtB,SAAS;AAAA,EACX;AAAA,EACA;AAAA,IACE,OAAO;AAAA,IACP,OAAO;AAAA,IACP,aACE;AAAA,IACF,MAAM;AAAA,IACN,cAAc,CAAC,OAAO;AAAA,IACtB,SAAS;AAAA,EACX;AAAA,EACA;AAAA,IACE,OAAO;AAAA,IACP,OAAO;AAAA,IACP,aAAa;AAAA,IACb,MAAM;AAAA,IACN,cAAc,CAAC,SAAS,OAAO;AAAA,IAC/B,SAAS;AAAA,EACX;AAAA,EACA;AAAA,IACE,OAAO;AAAA,IACP,OAAO;AAAA,IACP,aACE;AAAA,IACF,MAAM;AAAA,IACN,cAAc,CAAC,OAAO;AAAA,IACtB,SAAS;AAAA,EACX;AAAA,EACA;AAAA,IACE,OAAO;AAAA,IACP,OAAO;AAAA,IACP,aACE;AAAA,IACF,MAAM;AAAA,IACN,cAAc,CAAC,SAAS,OAAO;AAAA,IAC/B,SAAS;AAAA,EACX;AACF;AAMO,MAAM,4BAAiD,oBAAI,IAAI;AAAA,EACpE;AAAA,EACA;AACF,CAAC;AAOM,SAAS,4BACd,OAC4B;AAC5B,SAAO,kBAAkB,KAAK,IAC1B,wBACA,sBAAsB;AAAA,IACpB,CAAC,UAAU,CAAC,0BAA0B,IAAI,MAAM,KAAK;AAAA,EACvD;AACN;AAGO,MAAM,gCAAgC,CAAC,MAAM;",
|
|
6
6
|
"names": []
|
|
7
7
|
}
|
package/dist/search/index.d.ts
CHANGED
|
@@ -1,5 +1,5 @@
|
|
|
1
1
|
export { type AndNode, isLuceneQueryError, LuceneQueryError, type NotNode, type OrNode, type QueryNode, type RangeNode, type SearchTermOperator, type TermNode, } from './ast.js';
|
|
2
|
-
export { CLUSTER_DEFAULT_SEARCH_FIELDS, CLUSTER_SEARCH_FIELDS, } from './cluster-search-fields.js';
|
|
2
|
+
export { CLUSTER_DEFAULT_SEARCH_FIELDS, CLUSTER_SEARCH_FIELDS, CLUSTER_TTL_SEARCH_FIELDS, clusterSearchFieldsForStage, } from './cluster-search-fields.js';
|
|
3
3
|
export { type CompileContext, type CompiledQuery, compileQuery, type FieldBinding, idSetPredicate, joinIdSet, likeArgument, type SqlDialect, } from './compiler.js';
|
|
4
4
|
export { findSearchField, type SearchFieldCapability, type SearchFieldSpec, type SearchFieldType, } from './fields.js';
|
|
5
5
|
export { ORG_DEFAULT_SEARCH_FIELDS, ORGANIZATION_SEARCH_FIELDS, } from './organization-search-fields.js';
|
package/dist/search/index.js
CHANGED
|
@@ -4,7 +4,9 @@ import {
|
|
|
4
4
|
} from "./ast.js";
|
|
5
5
|
import {
|
|
6
6
|
CLUSTER_DEFAULT_SEARCH_FIELDS,
|
|
7
|
-
CLUSTER_SEARCH_FIELDS
|
|
7
|
+
CLUSTER_SEARCH_FIELDS,
|
|
8
|
+
CLUSTER_TTL_SEARCH_FIELDS,
|
|
9
|
+
clusterSearchFieldsForStage
|
|
8
10
|
} from "./cluster-search-fields.js";
|
|
9
11
|
import {
|
|
10
12
|
compileQuery,
|
|
@@ -23,9 +25,11 @@ import { parseLuceneQuery } from "./parser.js";
|
|
|
23
25
|
export {
|
|
24
26
|
CLUSTER_DEFAULT_SEARCH_FIELDS,
|
|
25
27
|
CLUSTER_SEARCH_FIELDS,
|
|
28
|
+
CLUSTER_TTL_SEARCH_FIELDS,
|
|
26
29
|
LuceneQueryError,
|
|
27
30
|
ORGANIZATION_SEARCH_FIELDS,
|
|
28
31
|
ORG_DEFAULT_SEARCH_FIELDS,
|
|
32
|
+
clusterSearchFieldsForStage,
|
|
29
33
|
compileQuery,
|
|
30
34
|
findSearchField,
|
|
31
35
|
idSetPredicate,
|
package/dist/search/index.js.map
CHANGED
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
{
|
|
2
2
|
"version": 3,
|
|
3
3
|
"sources": ["../../src/search/index.ts"],
|
|
4
|
-
"sourcesContent": ["/*\n * Copyright Camunda Services GmbH and/or licensed to Camunda Services GmbH\n * under one or more contributor license agreements. Licensed under a commercial license.\n * You may not use this file except in compliance with the commercial license.\n */\n\nexport {\n type AndNode,\n isLuceneQueryError,\n LuceneQueryError,\n type NotNode,\n type OrNode,\n type QueryNode,\n type RangeNode,\n type SearchTermOperator,\n type TermNode,\n} from './ast.js'\nexport {\n CLUSTER_DEFAULT_SEARCH_FIELDS,\n CLUSTER_SEARCH_FIELDS,\n} from './cluster-search-fields.js'\nexport {\n type CompileContext,\n type CompiledQuery,\n compileQuery,\n type FieldBinding,\n idSetPredicate,\n joinIdSet,\n likeArgument,\n type SqlDialect,\n} from './compiler.js'\nexport {\n findSearchField,\n type SearchFieldCapability,\n type SearchFieldSpec,\n type SearchFieldType,\n} from './fields.js'\nexport {\n ORG_DEFAULT_SEARCH_FIELDS,\n ORGANIZATION_SEARCH_FIELDS,\n} from './organization-search-fields.js'\nexport { parseLuceneQuery } from './parser.js'\n"],
|
|
5
|
-
"mappings": "AAMA;AAAA,EAEE;AAAA,EACA;AAAA,OAOK;AACP;AAAA,EACE;AAAA,EACA;AAAA,OACK;AACP;AAAA,EAGE;AAAA,EAEA;AAAA,EACA;AAAA,EACA;AAAA,OAEK;AACP;AAAA,EACE;AAAA,OAIK;AACP;AAAA,EACE;AAAA,EACA;AAAA,OACK;AACP,SAAS,wBAAwB;",
|
|
4
|
+
"sourcesContent": ["/*\n * Copyright Camunda Services GmbH and/or licensed to Camunda Services GmbH\n * under one or more contributor license agreements. Licensed under a commercial license.\n * You may not use this file except in compliance with the commercial license.\n */\n\nexport {\n type AndNode,\n isLuceneQueryError,\n LuceneQueryError,\n type NotNode,\n type OrNode,\n type QueryNode,\n type RangeNode,\n type SearchTermOperator,\n type TermNode,\n} from './ast.js'\nexport {\n CLUSTER_DEFAULT_SEARCH_FIELDS,\n CLUSTER_SEARCH_FIELDS,\n CLUSTER_TTL_SEARCH_FIELDS,\n clusterSearchFieldsForStage,\n} from './cluster-search-fields.js'\nexport {\n type CompileContext,\n type CompiledQuery,\n compileQuery,\n type FieldBinding,\n idSetPredicate,\n joinIdSet,\n likeArgument,\n type SqlDialect,\n} from './compiler.js'\nexport {\n findSearchField,\n type SearchFieldCapability,\n type SearchFieldSpec,\n type SearchFieldType,\n} from './fields.js'\nexport {\n ORG_DEFAULT_SEARCH_FIELDS,\n ORGANIZATION_SEARCH_FIELDS,\n} from './organization-search-fields.js'\nexport { parseLuceneQuery } from './parser.js'\n"],
|
|
5
|
+
"mappings": "AAMA;AAAA,EAEE;AAAA,EACA;AAAA,OAOK;AACP;AAAA,EACE;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,OACK;AACP;AAAA,EAGE;AAAA,EAEA;AAAA,EACA;AAAA,EACA;AAAA,OAEK;AACP;AAAA,EACE;AAAA,OAIK;AACP;AAAA,EACE;AAAA,EACA;AAAA,OACK;AACP,SAAS,wBAAwB;",
|
|
6
6
|
"names": []
|
|
7
7
|
}
|
|
@@ -0,0 +1,96 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* CLUSTER_TTL_FEATURE_FLAG gates the TTL of a single cluster. It is not the
|
|
3
|
+
* org-level `preprodClusterTtlHours` limit: both apply, and the earlier one
|
|
4
|
+
* deletes the cluster.
|
|
5
|
+
*/
|
|
6
|
+
export declare const CLUSTER_TTL_FEATURE_FLAG = "console.clusterTtl";
|
|
7
|
+
/**
|
|
8
|
+
* isClusterTtlStage tells if the cluster TTL can be on at the stage `stage`.
|
|
9
|
+
* That is only dev and int. On prod, and on each other stage, the feature is
|
|
10
|
+
* off for every reader, also when the flag is on.
|
|
11
|
+
*/
|
|
12
|
+
export declare const isClusterTtlStage: (stage: string | undefined) => boolean;
|
|
13
|
+
/** CLUSTER_TTL_DURATIONS are the TTLs that end at a time. */
|
|
14
|
+
export declare const CLUSTER_TTL_DURATIONS: readonly ["24h", "3d", "1w", "4w"];
|
|
15
|
+
export type ClusterTtlDuration = (typeof CLUSTER_TTL_DURATIONS)[number];
|
|
16
|
+
/** CLUSTER_TTL_OPTIONS are the choices of the create form, in display order. */
|
|
17
|
+
export declare const CLUSTER_TTL_OPTIONS: readonly ["24h", "3d", "1w", "4w", "unlimited"];
|
|
18
|
+
export type ClusterTtlOption = (typeof CLUSTER_TTL_OPTIONS)[number];
|
|
19
|
+
/** DEFAULT_CLUSTER_TTL_OPTION applies when an eligible create sends no `ttl`. */
|
|
20
|
+
export declare const DEFAULT_CLUSTER_TTL_OPTION: ClusterTtlOption;
|
|
21
|
+
export declare const CLUSTER_TTL_DURATION_MS: Readonly<Record<ClusterTtlDuration, number>>;
|
|
22
|
+
export declare const CLUSTER_TTL_UNLIMITED_REASON_MAX_LENGTH = 500;
|
|
23
|
+
export declare const CLUSTER_TTL_UNLIMITED_LINK_MAX_LENGTH = 2048;
|
|
24
|
+
/**
|
|
25
|
+
* CLUSTER_TTL_BACKFILL_REASON is the reason that the schema migration wrote
|
|
26
|
+
* for each cluster that existed before the TTL. These rows are the only
|
|
27
|
+
* unlimited TTLs with a reason and no link.
|
|
28
|
+
*/
|
|
29
|
+
export declare const CLUSTER_TTL_BACKFILL_REASON = "Created before cluster TTL existed";
|
|
30
|
+
/**
|
|
31
|
+
* ClusterTtlDto is the TTL of one cluster. A response carries it only when
|
|
32
|
+
* the reader may see the feature, thus an absent `ttl` means "not shown", not
|
|
33
|
+
* "unlimited".
|
|
34
|
+
*/
|
|
35
|
+
export interface ClusterTtlDto {
|
|
36
|
+
/** ISO-8601. Absent when the TTL is unlimited. */
|
|
37
|
+
expiresAt?: string;
|
|
38
|
+
/**
|
|
39
|
+
* Why the TTL is unlimited. Absent for a cluster that got no TTL, for
|
|
40
|
+
* example one that a failover or a customer org created.
|
|
41
|
+
*/
|
|
42
|
+
unlimitedReason?: string;
|
|
43
|
+
/** An http(s) URL, for example a GitHub issue. */
|
|
44
|
+
unlimitedLink?: string;
|
|
45
|
+
}
|
|
46
|
+
/** ClusterTtlUnlimited is the input that sets an unlimited TTL. */
|
|
47
|
+
export interface ClusterTtlUnlimited {
|
|
48
|
+
reason: string;
|
|
49
|
+
link: string;
|
|
50
|
+
}
|
|
51
|
+
/**
|
|
52
|
+
* UpdateClusterTtlBody is the body of `PATCH api/admin/clusters/:clusterId/ttl`.
|
|
53
|
+
* Give exactly one of the two fields.
|
|
54
|
+
*/
|
|
55
|
+
export type UpdateClusterTtlBody = {
|
|
56
|
+
extend: ClusterTtlDuration;
|
|
57
|
+
unlimited?: never;
|
|
58
|
+
} | {
|
|
59
|
+
unlimited: ClusterTtlUnlimited;
|
|
60
|
+
extend?: never;
|
|
61
|
+
};
|
|
62
|
+
export declare const isClusterTtlDuration: (value: unknown) => value is ClusterTtlDuration;
|
|
63
|
+
export declare const isClusterTtlOption: (value: unknown) => value is ClusterTtlOption;
|
|
64
|
+
/** clusterTtlExpiresAt gives the expiry of a new TTL that starts at `now`. */
|
|
65
|
+
export declare function clusterTtlExpiresAt(duration: ClusterTtlDuration, now?: Date): Date;
|
|
66
|
+
/**
|
|
67
|
+
* extendClusterTtl gives the expiry after an extension. The extension starts
|
|
68
|
+
* at the current expiry, or at `now` when that is in the past or when the TTL
|
|
69
|
+
* is unlimited (`currentExpiresAt` undefined). Thus an extension never makes
|
|
70
|
+
* the TTL shorter.
|
|
71
|
+
*/
|
|
72
|
+
export declare function extendClusterTtl({ currentExpiresAt, duration, now, }: {
|
|
73
|
+
currentExpiresAt: Date | string | undefined;
|
|
74
|
+
duration: ClusterTtlDuration;
|
|
75
|
+
now?: Date;
|
|
76
|
+
}): Date;
|
|
77
|
+
/**
|
|
78
|
+
* isPastClusterTtl tells if the TTL of a cluster ran out. An unlimited TTL
|
|
79
|
+
* (`expiresAt` undefined) or a value that is not a date never runs out.
|
|
80
|
+
*/
|
|
81
|
+
export declare function isPastClusterTtl({ expiresAt, now, }: {
|
|
82
|
+
expiresAt: Date | string | undefined;
|
|
83
|
+
now?: Date;
|
|
84
|
+
}): boolean;
|
|
85
|
+
/** isHttpUrl accepts an absolute `http:` or `https:` URL with a host. */
|
|
86
|
+
export declare function isHttpUrl(value: unknown): value is string;
|
|
87
|
+
/**
|
|
88
|
+
* validateClusterTtlUnlimited gives the first problem of an unlimited TTL
|
|
89
|
+
* input as a message for the caller, or `undefined` when the input is valid.
|
|
90
|
+
* The reason must hold text, and the link must be an http(s) URL. The length
|
|
91
|
+
* limits apply to the trimmed values, because the server stores those.
|
|
92
|
+
*/
|
|
93
|
+
export declare function validateClusterTtlUnlimited(input: {
|
|
94
|
+
reason?: unknown;
|
|
95
|
+
link?: unknown;
|
|
96
|
+
}): string | undefined;
|
|
@@ -0,0 +1,89 @@
|
|
|
1
|
+
import { DAY, WEEK } from "../constants/duration.const.js";
|
|
2
|
+
const CLUSTER_TTL_FEATURE_FLAG = "console.clusterTtl";
|
|
3
|
+
const isClusterTtlStage = (stage) => stage === "dev" || stage === "int";
|
|
4
|
+
const CLUSTER_TTL_DURATIONS = ["24h", "3d", "1w", "4w"];
|
|
5
|
+
const CLUSTER_TTL_OPTIONS = [
|
|
6
|
+
...CLUSTER_TTL_DURATIONS,
|
|
7
|
+
"unlimited"
|
|
8
|
+
];
|
|
9
|
+
const DEFAULT_CLUSTER_TTL_OPTION = "24h";
|
|
10
|
+
const CLUSTER_TTL_DURATION_MS = {
|
|
11
|
+
"24h": DAY,
|
|
12
|
+
"3d": 3 * DAY,
|
|
13
|
+
"1w": WEEK,
|
|
14
|
+
"4w": 4 * WEEK
|
|
15
|
+
};
|
|
16
|
+
const CLUSTER_TTL_UNLIMITED_REASON_MAX_LENGTH = 500;
|
|
17
|
+
const CLUSTER_TTL_UNLIMITED_LINK_MAX_LENGTH = 2048;
|
|
18
|
+
const CLUSTER_TTL_BACKFILL_REASON = "Created before cluster TTL existed";
|
|
19
|
+
const isClusterTtlDuration = (value) => CLUSTER_TTL_DURATIONS.includes(value);
|
|
20
|
+
const isClusterTtlOption = (value) => CLUSTER_TTL_OPTIONS.includes(value);
|
|
21
|
+
function clusterTtlExpiresAt(duration, now = /* @__PURE__ */ new Date()) {
|
|
22
|
+
return new Date(now.getTime() + CLUSTER_TTL_DURATION_MS[duration]);
|
|
23
|
+
}
|
|
24
|
+
function extendClusterTtl({
|
|
25
|
+
currentExpiresAt,
|
|
26
|
+
duration,
|
|
27
|
+
now = /* @__PURE__ */ new Date()
|
|
28
|
+
}) {
|
|
29
|
+
const currentMs = currentExpiresAt === void 0 ? Number.NaN : new Date(currentExpiresAt).getTime();
|
|
30
|
+
const startMs = Number.isNaN(currentMs) ? now.getTime() : Math.max(now.getTime(), currentMs);
|
|
31
|
+
return new Date(startMs + CLUSTER_TTL_DURATION_MS[duration]);
|
|
32
|
+
}
|
|
33
|
+
function isPastClusterTtl({
|
|
34
|
+
expiresAt,
|
|
35
|
+
now = /* @__PURE__ */ new Date()
|
|
36
|
+
}) {
|
|
37
|
+
if (expiresAt === void 0) return false;
|
|
38
|
+
const expiresMs = new Date(expiresAt).getTime();
|
|
39
|
+
if (Number.isNaN(expiresMs)) return false;
|
|
40
|
+
return expiresMs < now.getTime();
|
|
41
|
+
}
|
|
42
|
+
function isHttpUrl(value) {
|
|
43
|
+
if (typeof value !== "string" || /\s/.test(value)) return false;
|
|
44
|
+
try {
|
|
45
|
+
const url = new URL(value);
|
|
46
|
+
return (url.protocol === "http:" || url.protocol === "https:") && url.hostname.length > 0;
|
|
47
|
+
} catch {
|
|
48
|
+
return false;
|
|
49
|
+
}
|
|
50
|
+
}
|
|
51
|
+
function validateClusterTtlUnlimited(input) {
|
|
52
|
+
const reason = typeof input.reason === "string" ? input.reason.trim() : void 0;
|
|
53
|
+
const link = typeof input.link === "string" ? input.link.trim() : void 0;
|
|
54
|
+
if (!reason) {
|
|
55
|
+
return "An unlimited TTL needs a reason.";
|
|
56
|
+
}
|
|
57
|
+
if (reason.length > CLUSTER_TTL_UNLIMITED_REASON_MAX_LENGTH) {
|
|
58
|
+
return `The reason must not be longer than ${CLUSTER_TTL_UNLIMITED_REASON_MAX_LENGTH} characters.`;
|
|
59
|
+
}
|
|
60
|
+
if (!link) {
|
|
61
|
+
return "An unlimited TTL needs a link.";
|
|
62
|
+
}
|
|
63
|
+
if (link.length > CLUSTER_TTL_UNLIMITED_LINK_MAX_LENGTH) {
|
|
64
|
+
return `The link must not be longer than ${CLUSTER_TTL_UNLIMITED_LINK_MAX_LENGTH} characters.`;
|
|
65
|
+
}
|
|
66
|
+
if (!isHttpUrl(link)) {
|
|
67
|
+
return "The link must be an http or https URL.";
|
|
68
|
+
}
|
|
69
|
+
return void 0;
|
|
70
|
+
}
|
|
71
|
+
export {
|
|
72
|
+
CLUSTER_TTL_BACKFILL_REASON,
|
|
73
|
+
CLUSTER_TTL_DURATIONS,
|
|
74
|
+
CLUSTER_TTL_DURATION_MS,
|
|
75
|
+
CLUSTER_TTL_FEATURE_FLAG,
|
|
76
|
+
CLUSTER_TTL_OPTIONS,
|
|
77
|
+
CLUSTER_TTL_UNLIMITED_LINK_MAX_LENGTH,
|
|
78
|
+
CLUSTER_TTL_UNLIMITED_REASON_MAX_LENGTH,
|
|
79
|
+
DEFAULT_CLUSTER_TTL_OPTION,
|
|
80
|
+
clusterTtlExpiresAt,
|
|
81
|
+
extendClusterTtl,
|
|
82
|
+
isClusterTtlDuration,
|
|
83
|
+
isClusterTtlOption,
|
|
84
|
+
isClusterTtlStage,
|
|
85
|
+
isHttpUrl,
|
|
86
|
+
isPastClusterTtl,
|
|
87
|
+
validateClusterTtlUnlimited
|
|
88
|
+
};
|
|
89
|
+
//# sourceMappingURL=ClusterTtl.type.js.map
|
|
@@ -0,0 +1,7 @@
|
|
|
1
|
+
{
|
|
2
|
+
"version": 3,
|
|
3
|
+
"sources": ["../../src/types/ClusterTtl.type.ts"],
|
|
4
|
+
"sourcesContent": ["/*\n * Copyright Camunda Services GmbH and/or licensed to Camunda Services GmbH\n * under one or more contributor license agreements. Licensed under a commercial license.\n * You may not use this file except in compliance with the commercial license.\n */\n\nimport { DAY, WEEK } from '../constants/duration.const.js'\n\n/**\n * CLUSTER_TTL_FEATURE_FLAG gates the TTL of a single cluster. It is not the\n * org-level `preprodClusterTtlHours` limit: both apply, and the earlier one\n * deletes the cluster.\n */\nexport const CLUSTER_TTL_FEATURE_FLAG = 'console.clusterTtl'\n\n/**\n * isClusterTtlStage tells if the cluster TTL can be on at the stage `stage`.\n * That is only dev and int. On prod, and on each other stage, the feature is\n * off for every reader, also when the flag is on.\n */\nexport const isClusterTtlStage = (stage: string | undefined): boolean =>\n stage === 'dev' || stage === 'int'\n\n/** CLUSTER_TTL_DURATIONS are the TTLs that end at a time. */\nexport const CLUSTER_TTL_DURATIONS = ['24h', '3d', '1w', '4w'] as const\n\nexport type ClusterTtlDuration = (typeof CLUSTER_TTL_DURATIONS)[number]\n\n/** CLUSTER_TTL_OPTIONS are the choices of the create form, in display order. */\nexport const CLUSTER_TTL_OPTIONS = [\n ...CLUSTER_TTL_DURATIONS,\n 'unlimited',\n] as const\n\nexport type ClusterTtlOption = (typeof CLUSTER_TTL_OPTIONS)[number]\n\n/** DEFAULT_CLUSTER_TTL_OPTION applies when an eligible create sends no `ttl`. */\nexport const DEFAULT_CLUSTER_TTL_OPTION: ClusterTtlOption = '24h'\n\nexport const CLUSTER_TTL_DURATION_MS: Readonly<\n Record<ClusterTtlDuration, number>\n> = {\n '24h': DAY,\n '3d': 3 * DAY,\n '1w': WEEK,\n '4w': 4 * WEEK,\n}\n\nexport const CLUSTER_TTL_UNLIMITED_REASON_MAX_LENGTH = 500\nexport const CLUSTER_TTL_UNLIMITED_LINK_MAX_LENGTH = 2048\n\n/**\n * CLUSTER_TTL_BACKFILL_REASON is the reason that the schema migration wrote\n * for each cluster that existed before the TTL. These rows are the only\n * unlimited TTLs with a reason and no link.\n */\nexport const CLUSTER_TTL_BACKFILL_REASON = 'Created before cluster TTL existed'\n\n/**\n * ClusterTtlDto is the TTL of one cluster. A response carries it only when\n * the reader may see the feature, thus an absent `ttl` means \"not shown\", not\n * \"unlimited\".\n */\nexport interface ClusterTtlDto {\n /** ISO-8601. Absent when the TTL is unlimited. */\n expiresAt?: string\n /**\n * Why the TTL is unlimited. Absent for a cluster that got no TTL, for\n * example one that a failover or a customer org created.\n */\n unlimitedReason?: string\n /** An http(s) URL, for example a GitHub issue. */\n unlimitedLink?: string\n}\n\n/** ClusterTtlUnlimited is the input that sets an unlimited TTL. */\nexport interface ClusterTtlUnlimited {\n reason: string\n link: string\n}\n\n/**\n * UpdateClusterTtlBody is the body of `PATCH api/admin/clusters/:clusterId/ttl`.\n * Give exactly one of the two fields.\n */\nexport type UpdateClusterTtlBody =\n | { extend: ClusterTtlDuration; unlimited?: never }\n | { unlimited: ClusterTtlUnlimited; extend?: never }\n\nexport const isClusterTtlDuration = (\n value: unknown,\n): value is ClusterTtlDuration =>\n (CLUSTER_TTL_DURATIONS as readonly unknown[]).includes(value)\n\nexport const isClusterTtlOption = (value: unknown): value is ClusterTtlOption =>\n (CLUSTER_TTL_OPTIONS as readonly unknown[]).includes(value)\n\n/** clusterTtlExpiresAt gives the expiry of a new TTL that starts at `now`. */\nexport function clusterTtlExpiresAt(\n duration: ClusterTtlDuration,\n now: Date = new Date(),\n): Date {\n return new Date(now.getTime() + CLUSTER_TTL_DURATION_MS[duration])\n}\n\n/**\n * extendClusterTtl gives the expiry after an extension. The extension starts\n * at the current expiry, or at `now` when that is in the past or when the TTL\n * is unlimited (`currentExpiresAt` undefined). Thus an extension never makes\n * the TTL shorter.\n */\nexport function extendClusterTtl({\n currentExpiresAt,\n duration,\n now = new Date(),\n}: {\n currentExpiresAt: Date | string | undefined\n duration: ClusterTtlDuration\n now?: Date\n}): Date {\n const currentMs =\n currentExpiresAt === undefined\n ? Number.NaN\n : new Date(currentExpiresAt).getTime()\n const startMs = Number.isNaN(currentMs)\n ? now.getTime()\n : Math.max(now.getTime(), currentMs)\n return new Date(startMs + CLUSTER_TTL_DURATION_MS[duration])\n}\n\n/**\n * isPastClusterTtl tells if the TTL of a cluster ran out. An unlimited TTL\n * (`expiresAt` undefined) or a value that is not a date never runs out.\n */\nexport function isPastClusterTtl({\n expiresAt,\n now = new Date(),\n}: {\n expiresAt: Date | string | undefined\n now?: Date\n}): boolean {\n if (expiresAt === undefined) return false\n const expiresMs = new Date(expiresAt).getTime()\n if (Number.isNaN(expiresMs)) return false\n return expiresMs < now.getTime()\n}\n\n/** isHttpUrl accepts an absolute `http:` or `https:` URL with a host. */\nexport function isHttpUrl(value: unknown): value is string {\n if (typeof value !== 'string' || /\\s/.test(value)) return false\n try {\n const url = new URL(value)\n return (\n (url.protocol === 'http:' || url.protocol === 'https:') &&\n url.hostname.length > 0\n )\n } catch {\n return false\n }\n}\n\n/**\n * validateClusterTtlUnlimited gives the first problem of an unlimited TTL\n * input as a message for the caller, or `undefined` when the input is valid.\n * The reason must hold text, and the link must be an http(s) URL. The length\n * limits apply to the trimmed values, because the server stores those.\n */\nexport function validateClusterTtlUnlimited(input: {\n reason?: unknown\n link?: unknown\n}): string | undefined {\n const reason =\n typeof input.reason === 'string' ? input.reason.trim() : undefined\n const link = typeof input.link === 'string' ? input.link.trim() : undefined\n if (!reason) {\n return 'An unlimited TTL needs a reason.'\n }\n if (reason.length > CLUSTER_TTL_UNLIMITED_REASON_MAX_LENGTH) {\n return `The reason must not be longer than ${CLUSTER_TTL_UNLIMITED_REASON_MAX_LENGTH} characters.`\n }\n if (!link) {\n return 'An unlimited TTL needs a link.'\n }\n if (link.length > CLUSTER_TTL_UNLIMITED_LINK_MAX_LENGTH) {\n return `The link must not be longer than ${CLUSTER_TTL_UNLIMITED_LINK_MAX_LENGTH} characters.`\n }\n if (!isHttpUrl(link)) {\n return 'The link must be an http or https URL.'\n }\n return undefined\n}\n"],
|
|
5
|
+
"mappings": "AAMA,SAAS,KAAK,YAAY;AAOnB,MAAM,2BAA2B;AAOjC,MAAM,oBAAoB,CAAC,UAChC,UAAU,SAAS,UAAU;AAGxB,MAAM,wBAAwB,CAAC,OAAO,MAAM,MAAM,IAAI;AAKtD,MAAM,sBAAsB;AAAA,EACjC,GAAG;AAAA,EACH;AACF;AAKO,MAAM,6BAA+C;AAErD,MAAM,0BAET;AAAA,EACF,OAAO;AAAA,EACP,MAAM,IAAI;AAAA,EACV,MAAM;AAAA,EACN,MAAM,IAAI;AACZ;AAEO,MAAM,0CAA0C;AAChD,MAAM,wCAAwC;AAO9C,MAAM,8BAA8B;AAiCpC,MAAM,uBAAuB,CAClC,UAEC,sBAA6C,SAAS,KAAK;AAEvD,MAAM,qBAAqB,CAAC,UAChC,oBAA2C,SAAS,KAAK;AAGrD,SAAS,oBACd,UACA,MAAY,oBAAI,KAAK,GACf;AACN,SAAO,IAAI,KAAK,IAAI,QAAQ,IAAI,wBAAwB,QAAQ,CAAC;AACnE;AAQO,SAAS,iBAAiB;AAAA,EAC/B;AAAA,EACA;AAAA,EACA,MAAM,oBAAI,KAAK;AACjB,GAIS;AACP,QAAM,YACJ,qBAAqB,SACjB,OAAO,MACP,IAAI,KAAK,gBAAgB,EAAE,QAAQ;AACzC,QAAM,UAAU,OAAO,MAAM,SAAS,IAClC,IAAI,QAAQ,IACZ,KAAK,IAAI,IAAI,QAAQ,GAAG,SAAS;AACrC,SAAO,IAAI,KAAK,UAAU,wBAAwB,QAAQ,CAAC;AAC7D;AAMO,SAAS,iBAAiB;AAAA,EAC/B;AAAA,EACA,MAAM,oBAAI,KAAK;AACjB,GAGY;AACV,MAAI,cAAc,OAAW,QAAO;AACpC,QAAM,YAAY,IAAI,KAAK,SAAS,EAAE,QAAQ;AAC9C,MAAI,OAAO,MAAM,SAAS,EAAG,QAAO;AACpC,SAAO,YAAY,IAAI,QAAQ;AACjC;AAGO,SAAS,UAAU,OAAiC;AACzD,MAAI,OAAO,UAAU,YAAY,KAAK,KAAK,KAAK,EAAG,QAAO;AAC1D,MAAI;AACF,UAAM,MAAM,IAAI,IAAI,KAAK;AACzB,YACG,IAAI,aAAa,WAAW,IAAI,aAAa,aAC9C,IAAI,SAAS,SAAS;AAAA,EAE1B,QAAQ;AACN,WAAO;AAAA,EACT;AACF;AAQO,SAAS,4BAA4B,OAGrB;AACrB,QAAM,SACJ,OAAO,MAAM,WAAW,WAAW,MAAM,OAAO,KAAK,IAAI;AAC3D,QAAM,OAAO,OAAO,MAAM,SAAS,WAAW,MAAM,KAAK,KAAK,IAAI;AAClE,MAAI,CAAC,QAAQ;AACX,WAAO;AAAA,EACT;AACA,MAAI,OAAO,SAAS,yCAAyC;AAC3D,WAAO,sCAAsC,uCAAuC;AAAA,EACtF;AACA,MAAI,CAAC,MAAM;AACT,WAAO;AAAA,EACT;AACA,MAAI,KAAK,SAAS,uCAAuC;AACvD,WAAO,oCAAoC,qCAAqC;AAAA,EAClF;AACA,MAAI,CAAC,UAAU,IAAI,GAAG;AACpB,WAAO;AAAA,EACT;AACA,SAAO;AACT;",
|
|
6
|
+
"names": []
|
|
7
|
+
}
|
package/package.json
CHANGED