@camunda/ccma-shared-types 0.0.6 → 0.1.1
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/utils/envVars.spec.d.ts +1 -0
- package/dist/config/camundi-permission-rules.js +2 -0
- package/dist/config/camundi-permission-rules.js.map +2 -2
- package/dist/dtos/Backup.dto.d.ts +9 -0
- package/dist/dtos/CommonCluster.dto.d.ts +9 -0
- package/dist/dtos/Restore.dto.d.ts +8 -0
- package/dist/dtos/Restore.dto.js +1 -0
- package/dist/dtos/Restore.dto.js.map +7 -0
- package/dist/enums/AuditEntity.enum.d.ts +5 -1
- package/dist/enums/AuditEntity.enum.js +4 -0
- package/dist/enums/AuditEntity.enum.js.map +2 -2
- package/dist/enums/ConsoleApiClientPermission.enum.d.ts +1 -0
- package/dist/enums/ConsoleApiClientPermission.enum.js +1 -0
- package/dist/enums/ConsoleApiClientPermission.enum.js.map +2 -2
- package/dist/enums/ErrorType.enum.d.ts +0 -1
- package/dist/enums/ErrorType.enum.js +0 -1
- package/dist/enums/ErrorType.enum.js.map +2 -2
- package/dist/index.d.ts +7 -2
- package/dist/index.js +21 -0
- package/dist/index.js.map +2 -2
- package/dist/permissions/accounts.permissions.js +1 -2
- package/dist/permissions/accounts.permissions.js.map +2 -2
- package/dist/types/OrganizationPermission.type.js +2 -2
- package/dist/types/OrganizationPermission.type.js.map +1 -1
- package/dist/types/SalesPlanType.type.d.ts +1 -0
- package/dist/types/SalesPlanType.type.js +4 -0
- package/dist/types/SalesPlanType.type.js.map +2 -2
- package/dist/types/hdp.types.d.ts +12 -1
- package/dist/types/hdp.types.js.map +2 -2
- package/dist/utils/encryptionStatus.utils.d.ts +15 -0
- package/dist/utils/encryptionStatus.utils.js +17 -0
- package/dist/utils/encryptionStatus.utils.js.map +7 -0
- package/dist/utils/envVars.d.ts +6 -0
- package/dist/utils/envVars.js +91 -0
- package/dist/utils/envVars.js.map +7 -0
- package/dist/utils/kmsArn.utils.d.ts +17 -0
- package/dist/utils/kmsArn.utils.js +28 -0
- package/dist/utils/kmsArn.utils.js.map +7 -0
- package/package.json +2 -2
|
@@ -0,0 +1,7 @@
|
|
|
1
|
+
{
|
|
2
|
+
"version": 3,
|
|
3
|
+
"sources": ["../../src/utils/envVars.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 interface EnvVarEntry {\n name: string\n value: string\n}\n\nexport function parseEnvVars(raw: string | undefined): EnvVarEntry[] {\n if (!raw) return []\n\n const entries: EnvVarEntry[] = []\n const n = raw.length\n let i = 0\n\n const isWhitespace = (ch: string): boolean => /\\s/.test(ch)\n // Permissive name grammar: first char must be a letter or underscore (to\n // disambiguate from values), subsequent chars also allow digits, hyphens,\n // and dots. Real production data contains names like\n // `CAMUNDA_CLIENT_ZEEBE_REST-ADDRESS` (k8s container env names allow `-`\n // and `.`), so we cannot restrict to POSIX shell variable names here.\n const isNameChar = (ch: string): boolean => /[A-Za-z0-9_.-]/.test(ch)\n const isNameStartChar = (ch: string): boolean => /[A-Za-z_]/.test(ch)\n\n while (i < n) {\n while (i < n && isWhitespace(raw[i])) i++\n if (i >= n) break\n\n const nameStart = i\n while (i < n && isNameChar(raw[i])) i++\n const name = raw.slice(nameStart, i)\n\n const nameValid = name.length > 0 && isNameStartChar(name[0])\n\n if (!nameValid || raw[i] !== '=') {\n while (i < n && !isWhitespace(raw[i])) i++\n continue\n }\n i++\n\n let value = ''\n let malformed = false\n while (i < n && !isWhitespace(raw[i])) {\n const ch = raw[i]\n if (ch === '\"') {\n i++\n let closed = false\n while (i < n) {\n const c = raw[i]\n if (c === '\\\\' && i + 1 < n) {\n const next = raw[i + 1]\n if (next === '\"' || next === '\\\\') {\n value += next\n i += 2\n continue\n }\n value += c\n i++\n continue\n }\n if (c === '\"') {\n i++\n closed = true\n break\n }\n value += c\n i++\n }\n if (!closed) {\n malformed = true\n break\n }\n } else if (ch === \"'\") {\n i++\n let closed = false\n while (i < n) {\n if (raw[i] === \"'\") {\n i++\n closed = true\n break\n }\n value += raw[i]\n i++\n }\n if (!closed) {\n malformed = true\n break\n }\n } else {\n value += ch\n i++\n }\n }\n\n if (malformed) continue\n entries.push({ name, value })\n }\n\n return entries\n}\n\nexport function serializeEnvVars(entries: EnvVarEntry[]): string {\n return entries\n .map(({ name, value }) => {\n if (value === '') return `${name}=\"\"`\n if (/^[^\\s\"'=\\\\]+$/.test(value)) return `${name}=${value}`\n const escaped = value.replace(/\\\\/g, '\\\\\\\\').replace(/\"/g, '\\\\\"')\n return `${name}=\"${escaped}\"`\n })\n .join(' ')\n}\n"],
|
|
5
|
+
"mappings": "AAWO,SAAS,aAAa,KAAwC;AACnE,MAAI,CAAC,IAAK,QAAO,CAAC;AAElB,QAAM,UAAyB,CAAC;AAChC,QAAM,IAAI,IAAI;AACd,MAAI,IAAI;AAER,QAAM,eAAe,CAAC,OAAwB,KAAK,KAAK,EAAE;AAM1D,QAAM,aAAa,CAAC,OAAwB,iBAAiB,KAAK,EAAE;AACpE,QAAM,kBAAkB,CAAC,OAAwB,YAAY,KAAK,EAAE;AAEpE,SAAO,IAAI,GAAG;AACZ,WAAO,IAAI,KAAK,aAAa,IAAI,CAAC,CAAC,EAAG;AACtC,QAAI,KAAK,EAAG;AAEZ,UAAM,YAAY;AAClB,WAAO,IAAI,KAAK,WAAW,IAAI,CAAC,CAAC,EAAG;AACpC,UAAM,OAAO,IAAI,MAAM,WAAW,CAAC;AAEnC,UAAM,YAAY,KAAK,SAAS,KAAK,gBAAgB,KAAK,CAAC,CAAC;AAE5D,QAAI,CAAC,aAAa,IAAI,CAAC,MAAM,KAAK;AAChC,aAAO,IAAI,KAAK,CAAC,aAAa,IAAI,CAAC,CAAC,EAAG;AACvC;AAAA,IACF;AACA;AAEA,QAAI,QAAQ;AACZ,QAAI,YAAY;AAChB,WAAO,IAAI,KAAK,CAAC,aAAa,IAAI,CAAC,CAAC,GAAG;AACrC,YAAM,KAAK,IAAI,CAAC;AAChB,UAAI,OAAO,KAAK;AACd;AACA,YAAI,SAAS;AACb,eAAO,IAAI,GAAG;AACZ,gBAAM,IAAI,IAAI,CAAC;AACf,cAAI,MAAM,QAAQ,IAAI,IAAI,GAAG;AAC3B,kBAAM,OAAO,IAAI,IAAI,CAAC;AACtB,gBAAI,SAAS,OAAO,SAAS,MAAM;AACjC,uBAAS;AACT,mBAAK;AACL;AAAA,YACF;AACA,qBAAS;AACT;AACA;AAAA,UACF;AACA,cAAI,MAAM,KAAK;AACb;AACA,qBAAS;AACT;AAAA,UACF;AACA,mBAAS;AACT;AAAA,QACF;AACA,YAAI,CAAC,QAAQ;AACX,sBAAY;AACZ;AAAA,QACF;AAAA,MACF,WAAW,OAAO,KAAK;AACrB;AACA,YAAI,SAAS;AACb,eAAO,IAAI,GAAG;AACZ,cAAI,IAAI,CAAC,MAAM,KAAK;AAClB;AACA,qBAAS;AACT;AAAA,UACF;AACA,mBAAS,IAAI,CAAC;AACd;AAAA,QACF;AACA,YAAI,CAAC,QAAQ;AACX,sBAAY;AACZ;AAAA,QACF;AAAA,MACF,OAAO;AACL,iBAAS;AACT;AAAA,MACF;AAAA,IACF;AAEA,QAAI,UAAW;AACf,YAAQ,KAAK,EAAE,MAAM,MAAM,CAAC;AAAA,EAC9B;AAEA,SAAO;AACT;AAEO,SAAS,iBAAiB,SAAgC;AAC/D,SAAO,QACJ,IAAI,CAAC,EAAE,MAAM,MAAM,MAAM;AACxB,QAAI,UAAU,GAAI,QAAO,GAAG,IAAI;AAChC,QAAI,gBAAgB,KAAK,KAAK,EAAG,QAAO,GAAG,IAAI,IAAI,KAAK;AACxD,UAAM,UAAU,MAAM,QAAQ,OAAO,MAAM,EAAE,QAAQ,MAAM,KAAK;AAChE,WAAO,GAAG,IAAI,KAAK,OAAO;AAAA,EAC5B,CAAC,EACA,KAAK,GAAG;AACb;",
|
|
6
|
+
"names": []
|
|
7
|
+
}
|
|
@@ -0,0 +1,17 @@
|
|
|
1
|
+
export declare const KMS_ARN: RegExp;
|
|
2
|
+
export declare const KMS_MRK_ARN: RegExp;
|
|
3
|
+
export interface ParsedKmsArn {
|
|
4
|
+
region: string;
|
|
5
|
+
isMultiRegion: boolean;
|
|
6
|
+
}
|
|
7
|
+
/**
|
|
8
|
+
* Parse an AWS KMS key ARN. Returns null for malformed input.
|
|
9
|
+
* Accepts both single-region and multi-region key ARNs.
|
|
10
|
+
*/
|
|
11
|
+
export declare function parseKmsArn(arn: string): ParsedKmsArn | null;
|
|
12
|
+
export type KmsArnValidationError = 'INVALID_FORMAT' | 'WRONG_REGION';
|
|
13
|
+
/**
|
|
14
|
+
* Validate that a KMS ARN is well-formed AND its embedded region matches
|
|
15
|
+
* the expected region (case-insensitive). Returns null on success.
|
|
16
|
+
*/
|
|
17
|
+
export declare function validateKmsArnForRegion(arn: string, expectedRegion: string): KmsArnValidationError | null;
|
|
@@ -0,0 +1,28 @@
|
|
|
1
|
+
const KMS_ARN = /^arn:aws:kms:(?<region>[a-z0-9-]+):\d{12}:key\/[a-f0-9-]{36}$/u;
|
|
2
|
+
const KMS_MRK_ARN = /^arn:aws:kms:(?<region>[a-z0-9-]+):\d{12}:key\/mrk-[a-f0-9-]{32}$/u;
|
|
3
|
+
function parseKmsArn(arn) {
|
|
4
|
+
const mrk = KMS_MRK_ARN.exec(arn);
|
|
5
|
+
if (mrk?.groups?.region) {
|
|
6
|
+
return { region: mrk.groups.region, isMultiRegion: true };
|
|
7
|
+
}
|
|
8
|
+
const single = KMS_ARN.exec(arn);
|
|
9
|
+
if (single?.groups?.region) {
|
|
10
|
+
return { region: single.groups.region, isMultiRegion: false };
|
|
11
|
+
}
|
|
12
|
+
return null;
|
|
13
|
+
}
|
|
14
|
+
function validateKmsArnForRegion(arn, expectedRegion) {
|
|
15
|
+
const parsed = parseKmsArn(arn);
|
|
16
|
+
if (!parsed) return "INVALID_FORMAT";
|
|
17
|
+
if (parsed.region.toLowerCase() !== expectedRegion.toLowerCase()) {
|
|
18
|
+
return "WRONG_REGION";
|
|
19
|
+
}
|
|
20
|
+
return null;
|
|
21
|
+
}
|
|
22
|
+
export {
|
|
23
|
+
KMS_ARN,
|
|
24
|
+
KMS_MRK_ARN,
|
|
25
|
+
parseKmsArn,
|
|
26
|
+
validateKmsArnForRegion
|
|
27
|
+
};
|
|
28
|
+
//# sourceMappingURL=kmsArn.utils.js.map
|
|
@@ -0,0 +1,7 @@
|
|
|
1
|
+
{
|
|
2
|
+
"version": 3,
|
|
3
|
+
"sources": ["../../src/utils/kmsArn.utils.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// Single-region KMS key: 36-char UUID with dashes (8-4-4-4-12 hex).\nexport const KMS_ARN =\n /^arn:aws:kms:(?<region>[a-z0-9-]+):\\d{12}:key\\/[a-f0-9-]{36}$/u\n\n// Multi-region KMS key: \"mrk-\" prefix + 32 hex characters.\nexport const KMS_MRK_ARN =\n /^arn:aws:kms:(?<region>[a-z0-9-]+):\\d{12}:key\\/mrk-[a-f0-9-]{32}$/u\n\nexport interface ParsedKmsArn {\n region: string\n isMultiRegion: boolean\n}\n\n/**\n * Parse an AWS KMS key ARN. Returns null for malformed input.\n * Accepts both single-region and multi-region key ARNs.\n */\nexport function parseKmsArn(arn: string): ParsedKmsArn | null {\n const mrk = KMS_MRK_ARN.exec(arn)\n if (mrk?.groups?.region) {\n return { region: mrk.groups.region, isMultiRegion: true }\n }\n const single = KMS_ARN.exec(arn)\n if (single?.groups?.region) {\n return { region: single.groups.region, isMultiRegion: false }\n }\n return null\n}\n\nexport type KmsArnValidationError = 'INVALID_FORMAT' | 'WRONG_REGION'\n/**\n * Validate that a KMS ARN is well-formed AND its embedded region matches\n * the expected region (case-insensitive). Returns null on success.\n */\nexport function validateKmsArnForRegion(\n arn: string,\n expectedRegion: string,\n): KmsArnValidationError | null {\n const parsed = parseKmsArn(arn)\n if (!parsed) return 'INVALID_FORMAT'\n if (parsed.region.toLowerCase() !== expectedRegion.toLowerCase()) {\n return 'WRONG_REGION'\n }\n return null\n}\n"],
|
|
5
|
+
"mappings": "AAOO,MAAM,UACX;AAGK,MAAM,cACX;AAWK,SAAS,YAAY,KAAkC;AAC5D,QAAM,MAAM,YAAY,KAAK,GAAG;AAChC,MAAI,KAAK,QAAQ,QAAQ;AACvB,WAAO,EAAE,QAAQ,IAAI,OAAO,QAAQ,eAAe,KAAK;AAAA,EAC1D;AACA,QAAM,SAAS,QAAQ,KAAK,GAAG;AAC/B,MAAI,QAAQ,QAAQ,QAAQ;AAC1B,WAAO,EAAE,QAAQ,OAAO,OAAO,QAAQ,eAAe,MAAM;AAAA,EAC9D;AACA,SAAO;AACT;AAOO,SAAS,wBACd,KACA,gBAC8B;AAC9B,QAAM,SAAS,YAAY,GAAG;AAC9B,MAAI,CAAC,OAAQ,QAAO;AACpB,MAAI,OAAO,OAAO,YAAY,MAAM,eAAe,YAAY,GAAG;AAChE,WAAO;AAAA,EACT;AACA,SAAO;AACT;",
|
|
6
|
+
"names": []
|
|
7
|
+
}
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@camunda/ccma-shared-types",
|
|
3
|
-
"version": "0.
|
|
3
|
+
"version": "0.1.1",
|
|
4
4
|
"description": "Shared TypeScript types for Camunda Cloud Management Apps",
|
|
5
5
|
"bugs": {
|
|
6
6
|
"url": "https://github.com/camunda/camunda-cloud-management-apps/issues"
|
|
@@ -23,7 +23,7 @@
|
|
|
23
23
|
"registry": "https://registry.npmjs.org/"
|
|
24
24
|
},
|
|
25
25
|
"dependencies": {
|
|
26
|
-
"semver": "7.
|
|
26
|
+
"semver": "7.8.0"
|
|
27
27
|
},
|
|
28
28
|
"scripts": {
|
|
29
29
|
"build": "node esbuild.mjs && tsc --emitDeclarationOnly --outDir dist",
|