@camunda/ccma-api 0.0.2 → 0.0.3

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (193) hide show
  1. package/dist/index.d.ts +95 -0
  2. package/dist/index.js +151 -0
  3. package/dist/index.js.map +7 -0
  4. package/dist/services/accounts/accounts.data-export.service.d.ts +13 -0
  5. package/dist/services/accounts/accounts.data-export.service.js +41 -0
  6. package/dist/services/accounts/accounts.data-export.service.js.map +7 -0
  7. package/dist/services/accounts/accounts.valuemetrics.service.d.ts +8 -0
  8. package/dist/services/accounts/accounts.valuemetrics.service.js +1 -0
  9. package/dist/services/accounts/accounts.valuemetrics.service.js.map +7 -0
  10. package/dist/services/accounts/bot.service.d.ts +21 -0
  11. package/dist/services/accounts/bot.service.js +74 -0
  12. package/dist/services/accounts/bot.service.js.map +7 -0
  13. package/dist/services/accounts/challenge.service.d.ts +296 -0
  14. package/dist/services/accounts/challenge.service.js +475 -0
  15. package/dist/services/accounts/challenge.service.js.map +7 -0
  16. package/dist/services/accounts/connections.service.d.ts +27 -0
  17. package/dist/services/accounts/connections.service.js +41 -0
  18. package/dist/services/accounts/connections.service.js.map +7 -0
  19. package/dist/services/accounts/dashboards.service.d.ts +8 -0
  20. package/dist/services/accounts/dashboards.service.js +42 -0
  21. package/dist/services/accounts/dashboards.service.js.map +7 -0
  22. package/dist/services/accounts/early-access-features.service.d.ts +34 -0
  23. package/dist/services/accounts/early-access-features.service.js +67 -0
  24. package/dist/services/accounts/early-access-features.service.js.map +7 -0
  25. package/dist/services/accounts/genericCache.service.d.ts +13 -0
  26. package/dist/services/accounts/genericCache.service.js +80 -0
  27. package/dist/services/accounts/genericCache.service.js.map +7 -0
  28. package/dist/services/accounts/hdp.service.d.ts +52 -0
  29. package/dist/services/accounts/hdp.service.js +180 -0
  30. package/dist/services/accounts/hdp.service.js.map +7 -0
  31. package/dist/services/accounts/offboarding.service.d.ts +18 -0
  32. package/dist/services/accounts/offboarding.service.js +48 -0
  33. package/dist/services/accounts/offboarding.service.js.map +7 -0
  34. package/dist/services/accounts/organization-members.service.d.ts +68 -0
  35. package/dist/services/accounts/organization-members.service.js +216 -0
  36. package/dist/services/accounts/organization-members.service.js.map +7 -0
  37. package/dist/services/accounts/orgs.service.d.ts +273 -0
  38. package/dist/services/accounts/orgs.service.js +978 -0
  39. package/dist/services/accounts/orgs.service.js.map +7 -0
  40. package/dist/services/accounts/salesplan.service.d.ts +7 -0
  41. package/dist/services/accounts/salesplan.service.js +40 -0
  42. package/dist/services/accounts/salesplan.service.js.map +7 -0
  43. package/dist/services/accounts/spam-detection.service.d.ts +8 -0
  44. package/dist/services/accounts/spam-detection.service.js +72 -0
  45. package/dist/services/accounts/spam-detection.service.js.map +7 -0
  46. package/dist/services/accounts/stats.service.d.ts +7 -0
  47. package/dist/services/accounts/stats.service.js +40 -0
  48. package/dist/services/accounts/stats.service.js.map +7 -0
  49. package/dist/services/accounts/usage-alerts.service.d.ts +34 -0
  50. package/dist/services/accounts/usage-alerts.service.js +112 -0
  51. package/dist/services/accounts/usage-alerts.service.js.map +7 -0
  52. package/dist/services/accounts/users.service.d.ts +101 -0
  53. package/dist/services/accounts/users.service.js +444 -0
  54. package/dist/services/accounts/users.service.js.map +7 -0
  55. package/dist/services/alerts/alerts.service.d.ts +59 -0
  56. package/dist/services/alerts/alerts.service.js +234 -0
  57. package/dist/services/alerts/alerts.service.js.map +7 -0
  58. package/dist/services/analytic-bridge/analytic-bridge.service.d.ts +23 -0
  59. package/dist/services/analytic-bridge/analytic-bridge.service.js +86 -0
  60. package/dist/services/analytic-bridge/analytic-bridge.service.js.map +7 -0
  61. package/dist/services/audit-logger/audit-logger.service.d.ts +27 -0
  62. package/dist/services/audit-logger/audit-logger.service.js +108 -0
  63. package/dist/services/audit-logger/audit-logger.service.js.map +7 -0
  64. package/dist/services/auth0/auth0.service.d.ts +15 -0
  65. package/dist/services/auth0/auth0.service.js +40 -0
  66. package/dist/services/auth0/auth0.service.js.map +7 -0
  67. package/dist/services/comm-bridge/comm-bridge.service.d.ts +33 -0
  68. package/dist/services/comm-bridge/comm-bridge.service.js +40 -0
  69. package/dist/services/comm-bridge/comm-bridge.service.js.map +7 -0
  70. package/dist/services/console/console.admin.service.d.ts +328 -0
  71. package/dist/services/console/console.admin.service.js +1526 -0
  72. package/dist/services/console/console.admin.service.js.map +7 -0
  73. package/dist/services/console/console.alerts.service.d.ts +69 -0
  74. package/dist/services/console/console.alerts.service.js +160 -0
  75. package/dist/services/console/console.alerts.service.js.map +7 -0
  76. package/dist/services/console/console.api-clients.service.d.ts +48 -0
  77. package/dist/services/console/console.api-clients.service.js +123 -0
  78. package/dist/services/console/console.api-clients.service.js.map +7 -0
  79. package/dist/services/console/console.backup-schedule.service.d.ts +21 -0
  80. package/dist/services/console/console.backup-schedule.service.js +67 -0
  81. package/dist/services/console/console.backup-schedule.service.js.map +7 -0
  82. package/dist/services/console/console.byok-scripts.service.d.ts +12 -0
  83. package/dist/services/console/console.byok-scripts.service.js +92 -0
  84. package/dist/services/console/console.byok-scripts.service.js.map +7 -0
  85. package/dist/services/console/console.byom-monitoring.service.d.ts +58 -0
  86. package/dist/services/console/console.byom-monitoring.service.js +177 -0
  87. package/dist/services/console/console.byom-monitoring.service.js.map +7 -0
  88. package/dist/services/console/console.cluster-clients.service.d.ts +55 -0
  89. package/dist/services/console/console.cluster-clients.service.js +123 -0
  90. package/dist/services/console/console.cluster-clients.service.js.map +7 -0
  91. package/dist/services/console/console.cluster-parameters.service.d.ts +64 -0
  92. package/dist/services/console/console.cluster-parameters.service.js +39 -0
  93. package/dist/services/console/console.cluster-parameters.service.js.map +7 -0
  94. package/dist/services/console/console.cluster.service.d.ts +114 -0
  95. package/dist/services/console/console.cluster.service.js +271 -0
  96. package/dist/services/console/console.cluster.service.js.map +7 -0
  97. package/dist/services/console/console.clusterBulkOperation.service.d.ts +20 -0
  98. package/dist/services/console/console.clusterBulkOperation.service.js +199 -0
  99. package/dist/services/console/console.clusterBulkOperation.service.js.map +7 -0
  100. package/dist/services/console/console.clusterplan.modification.service.d.ts +33 -0
  101. package/dist/services/console/console.clusterplan.modification.service.js +231 -0
  102. package/dist/services/console/console.clusterplan.modification.service.js.map +7 -0
  103. package/dist/services/console/console.clusterplan.service.d.ts +21 -0
  104. package/dist/services/console/console.clusterplan.service.js +64 -0
  105. package/dist/services/console/console.clusterplan.service.js.map +7 -0
  106. package/dist/services/console/console.connector-secrets.service.d.ts +30 -0
  107. package/dist/services/console/console.connector-secrets.service.js +125 -0
  108. package/dist/services/console/console.connector-secrets.service.js.map +7 -0
  109. package/dist/services/console/console.custommetrics.service.d.ts +10 -0
  110. package/dist/services/console/console.custommetrics.service.js +43 -0
  111. package/dist/services/console/console.custommetrics.service.js.map +7 -0
  112. package/dist/services/console/console.hotbackups.service.d.ts +34 -0
  113. package/dist/services/console/console.hotbackups.service.js +120 -0
  114. package/dist/services/console/console.hotbackups.service.js.map +7 -0
  115. package/dist/services/console/console.ip-whitelist.service.d.ts +15 -0
  116. package/dist/services/console/console.ip-whitelist.service.js +36 -0
  117. package/dist/services/console/console.ip-whitelist.service.js.map +7 -0
  118. package/dist/services/console/console.jobs.saas.service.d.ts +70 -0
  119. package/dist/services/console/console.jobs.saas.service.js +139 -0
  120. package/dist/services/console/console.jobs.saas.service.js.map +7 -0
  121. package/dist/services/console/console.m2m.service.d.ts +23 -0
  122. package/dist/services/console/console.m2m.service.js +94 -0
  123. package/dist/services/console/console.m2m.service.js.map +7 -0
  124. package/dist/services/console/console.secure-connectivity.service.d.ts +41 -0
  125. package/dist/services/console/console.secure-connectivity.service.js +129 -0
  126. package/dist/services/console/console.secure-connectivity.service.js.map +7 -0
  127. package/dist/services/console/console.valuemetrics.service.d.ts +17 -0
  128. package/dist/services/console/console.valuemetrics.service.js +110 -0
  129. package/dist/services/console/console.valuemetrics.service.js.map +7 -0
  130. package/dist/services/console/generation.service.d.ts +29 -0
  131. package/dist/services/console/generation.service.js +166 -0
  132. package/dist/services/console/generation.service.js.map +7 -0
  133. package/dist/services/github/github.service.d.ts +73 -0
  134. package/dist/services/github/github.service.js +272 -0
  135. package/dist/services/github/github.service.js.map +7 -0
  136. package/dist/services/hibob/hibob.service.d.ts +74 -0
  137. package/dist/services/hibob/hibob.service.js +125 -0
  138. package/dist/services/hibob/hibob.service.js.map +7 -0
  139. package/dist/services/hubspot/hubspot.service.d.ts +50 -0
  140. package/dist/services/hubspot/hubspot.service.js +119 -0
  141. package/dist/services/hubspot/hubspot.service.js.map +7 -0
  142. package/dist/services/litellm/litellm.service.d.ts +290 -0
  143. package/dist/services/litellm/litellm.service.js +392 -0
  144. package/dist/services/litellm/litellm.service.js.map +7 -0
  145. package/dist/services/login/login.service.d.ts +15 -0
  146. package/dist/services/login/login.service.js +66 -0
  147. package/dist/services/login/login.service.js.map +7 -0
  148. package/dist/services/mixpanel/mixpanel.service.d.ts +16 -0
  149. package/dist/services/mixpanel/mixpanel.service.js +86 -0
  150. package/dist/services/mixpanel/mixpanel.service.js.map +7 -0
  151. package/dist/services/notifications/notifications.service.d.ts +7 -0
  152. package/dist/services/notifications/notifications.service.js +38 -0
  153. package/dist/services/notifications/notifications.service.js.map +7 -0
  154. package/dist/services/slack/slack-blockkit.service.d.ts +28 -0
  155. package/dist/services/slack/slack-blockkit.service.js +45 -0
  156. package/dist/services/slack/slack-blockkit.service.js.map +7 -0
  157. package/dist/services/slack/slack.service.d.ts +31 -0
  158. package/dist/services/slack/slack.service.js +118 -0
  159. package/dist/services/slack/slack.service.js.map +7 -0
  160. package/dist/services/telemetry/telemetry.service.d.ts +16 -0
  161. package/dist/services/telemetry/telemetry.service.js +85 -0
  162. package/dist/services/telemetry/telemetry.service.js.map +7 -0
  163. package/dist/services/token-issuer/token-issuer.jwks.service.d.ts +13 -0
  164. package/dist/services/token-issuer/token-issuer.jwks.service.js +76 -0
  165. package/dist/services/token-issuer/token-issuer.jwks.service.js.map +7 -0
  166. package/dist/services/wordpress/wordpress.service.d.ts +15 -0
  167. package/dist/services/wordpress/wordpress.service.js +111 -0
  168. package/dist/services/wordpress/wordpress.service.js.map +7 -0
  169. package/dist/types/general.types.d.ts +61 -0
  170. package/dist/types/general.types.js +1 -0
  171. package/dist/types/general.types.js.map +7 -0
  172. package/dist/utils/api.d.ts +31 -0
  173. package/dist/utils/api.js +400 -0
  174. package/dist/utils/api.js.map +7 -0
  175. package/dist/utils/cache.d.ts +7 -0
  176. package/dist/utils/cache.js +25 -0
  177. package/dist/utils/cache.js.map +7 -0
  178. package/dist/utils/ccma-metrics.d.ts +18 -0
  179. package/dist/utils/ccma-metrics.js +37 -0
  180. package/dist/utils/ccma-metrics.js.map +7 -0
  181. package/dist/utils/environments.d.ts +11 -0
  182. package/dist/utils/environments.js +148 -0
  183. package/dist/utils/environments.js.map +7 -0
  184. package/dist/utils/errors.d.ts +5 -0
  185. package/dist/utils/errors.js +11 -0
  186. package/dist/utils/errors.js.map +7 -0
  187. package/dist/utils/frontendCache.d.ts +26 -0
  188. package/dist/utils/frontendCache.js +121 -0
  189. package/dist/utils/frontendCache.js.map +7 -0
  190. package/dist/utils/token-issuer.utils.d.ts +8 -0
  191. package/dist/utils/token-issuer.utils.js +19 -0
  192. package/dist/utils/token-issuer.utils.js.map +7 -0
  193. package/package.json +2 -2
@@ -0,0 +1,7 @@
1
+ {
2
+ "version": 3,
3
+ "sources": ["../../src/utils/api.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 {\n RequestBaseCustomMetricsDetailsType,\n RequestBaseMethodType,\n RequestBaseParams,\n RequestBaseServiceContext,\n} from '../types/general.types.js'\nimport { getEnvParam, type ServiceName } from './environments.js'\nimport { frontendCache } from './frontendCache.js'\n\nexport interface RequestPayload extends RequestBaseParams {\n base?: {\n id: ServiceName\n }\n url: string\n method: RequestBaseMethodType\n headers?: { [key: string]: string }\n type?: 'json' | 'text' | 'form' | 'none'\n responseType?: 'json' | 'text' | 'none'\n retry?: {\n attempts: number\n remaining: number\n }\n body?: any\n metricsDetails: RequestBaseServiceContext\n}\n\nexport interface Response<T> {\n body?: T\n status: number\n statusText?: string\n ok: boolean\n meta: {\n duration: number\n }\n}\n\nfunction sendMetrics(\n payload: RequestPayload,\n type: RequestBaseCustomMetricsDetailsType,\n options?: {\n duration?: number\n statusCode?: string\n error?: string\n },\n) {\n if (payload.config.metrics) {\n if (payload.config.metrics.types.includes(type)) {\n let durationBucket: string | undefined\n if (options?.duration) {\n if (options.duration < 100) {\n durationBucket = '0 | <100ms'\n } else if (options.duration < 200) {\n durationBucket = '1 | <200ms'\n } else if (options.duration < 500) {\n durationBucket = '2 | <500ms'\n } else if (options.duration < 1000) {\n durationBucket = '3 | <1s'\n } else {\n durationBucket = '4 | >=1s'\n }\n }\n\n // only add normalized errors as labels\n let error = 'other'\n if (options?.error) {\n try {\n const errorMessage = options.error\n if (errorMessage.startsWith('<!DOCTYPE html>')) {\n error = 'html-response'\n } else if (errorMessage.includes('UND_ERR_CONNECT_TIMEOUT')) {\n error = 'connect-timeout'\n }\n } catch (_error) {\n // ignore it\n }\n } else {\n error = 'unset'\n }\n\n const metrics: RequestBaseServiceContext = {\n ...payload.metricsDetails,\n eventType: type,\n durationBucket,\n statusCode: options?.statusCode,\n error,\n }\n try {\n payload.config.metrics.callback(metrics)\n } catch (metricsCallbackError) {\n log(payload, 'debug', `Failed to send metrics`, {\n error: metricsCallbackError,\n metrics,\n })\n }\n }\n }\n}\n\nexport function log(\n payload: RequestPayload,\n type: 'debug' | 'info' | 'error',\n message: string,\n additionalData?: any,\n) {\n if (payload.config.logger) {\n const messageParts: string[] = []\n messageParts.push(payload.metricsDetails?.method?.name)\n messageParts.push(\n `${payload.metricsDetails?.target?.name} (${payload.metricsDetails?.target?.type})`,\n )\n messageParts.push(message)\n let body: any\n if (payload.body) {\n body = JSON.parse(JSON.stringify(payload.body))\n for (const key of Object.keys(body)) {\n if (\n key.toLowerCase().includes('password') ||\n key.toLowerCase().includes('secret') ||\n key.toLowerCase().includes('token')\n ) {\n body[key] = '********'\n }\n }\n }\n\n let fullUrl = 'unset'\n\n if (payload.base) {\n try {\n const base = getEnvParam(payload.base.id, payload.config)\n fullUrl = base ? `${base}/${payload.url}` : payload.url\n } catch (_error) {\n fullUrl = `failed to get base url for ${payload.base.id}`\n }\n }\n\n let url = `${payload.url}`.toLowerCase()\n if (url.includes('secret') || url.includes('password')) {\n url = url.split('?')[0]\n }\n\n const data = {\n base: payload.base,\n method: payload.method,\n url,\n fullUrl,\n retry: payload.retry,\n body,\n context: payload.metricsDetails,\n ...additionalData,\n }\n payload.config.logger[type](messageParts.join(' > '), { data })\n }\n}\n\nfunction rateLimitWaitingTime(attempt: number): number {\n const noise = Math.random() * 100\n const waitingTime = 2 ** attempt * 1000 + noise\n return Math.floor(waitingTime)\n}\n\nexport async function request<T>(\n payload: RequestPayload,\n): Promise<Response<T>> {\n log(payload, 'debug', 'starting request')\n sendMetrics(payload, 'request')\n // configure frontend cache if enabled (browser only)\n try {\n if (payload.config.frontendCaching?.enabled) {\n frontendCache.configure(payload.config.frontendCaching)\n }\n } catch (_cacheConfigError) {\n // ignore configuration errors silently\n }\n let token\n if (payload.config.auth) {\n token = await payload.config.auth.getToken()\n }\n const headers: { [key: string]: string } = payload.headers ?? {}\n if (token) {\n headers.Authorization = `Bearer ${token}`\n }\n const type = payload.type ?? 'json'\n let body\n if (type) {\n switch (type) {\n case 'json':\n headers['Content-Type'] = 'application/json'\n body = payload.body ? JSON.stringify(payload.body) : undefined\n break\n case 'text':\n headers['Content-Type'] = 'text/plain'\n body = payload.body ? JSON.stringify(payload.body) : undefined\n break\n case 'form':\n if (payload.body) {\n const formData = new URLSearchParams()\n Object.keys(payload.body).forEach((key) => {\n formData.append(key, payload.body[key])\n })\n body = formData\n }\n break\n }\n }\n let base\n if (payload.base) {\n try {\n base = getEnvParam(payload.base.id, payload.config)\n } catch (error) {\n log(payload, 'error', `Failed to get base url for ${payload.base.id}`, {\n error,\n })\n throw error\n }\n }\n const url = base ? `${base}/${payload.url}` : payload.url\n\n // Attempt cache read for GET requests (stale-while-revalidate when callback supplied)\n let serveCachedAndReturnAfterNetwork = false\n if (payload.method === 'get' && payload.config.frontendCaching?.enabled) {\n try {\n const cached = await frontendCache.get<T>('get', url)\n if (cached) {\n const fresh = frontendCache.isFresh(cached)\n if (payload.onCachedResponse) {\n payload.onCachedResponse(cached.payload, { fresh, source: 'cache' })\n if (!fresh) {\n log(payload, 'debug', 'cache stale, refreshing in background')\n serveCachedAndReturnAfterNetwork = true\n } else {\n log(payload, 'debug', 'cache fresh, returning early')\n sendMetrics(payload, 'success', { duration: 0, statusCode: '200' })\n return {\n // eslint-disable-next-line id-length\n ok: true,\n status: 200,\n statusText: 'cached',\n body: cached.payload,\n meta: { duration: 0 },\n }\n }\n } else if (fresh) {\n // no callback but fresh -> return directly\n log(payload, 'debug', 'cache hit, returning cached response')\n sendMetrics(payload, 'success', { duration: 0, statusCode: '200' })\n return {\n // eslint-disable-next-line id-length\n ok: true,\n status: 200,\n statusText: 'cached',\n body: cached.payload,\n meta: { duration: 0 },\n }\n } else {\n log(payload, 'debug', 'cache stale, proceeding with network request')\n }\n }\n } catch (_cacheGetError) {\n // ignore cache errors\n }\n }\n const start = performance.now()\n const proxyAgent = payload.config.proxyAgent ?? {}\n try {\n const fetchResponse = await fetch(url, {\n signal: payload.config.timeout\n ? AbortSignal.timeout(payload.config.timeout)\n : undefined,\n method: payload.method.toUpperCase(),\n headers,\n body,\n ...proxyAgent,\n })\n const end = performance.now()\n const duration = end - start\n\n if ([429].includes(fetchResponse.status)) {\n // rate limiting, retry\n log(payload, 'info', 'rate limited')\n sendMetrics(payload, 'rate-limit-retry', {\n duration,\n statusCode: String(fetchResponse.status),\n })\n const remaining = payload.retry?.remaining ?? 8\n const attempts = payload.retry?.attempts ?? 1\n if (remaining > 0) {\n let waitingTime = rateLimitWaitingTime(attempts)\n if (fetchResponse.headers.has('x-ratelimit-reset')) {\n const rateLimitHeader = fetchResponse.headers.get('x-ratelimit-reset')\n log(\n payload,\n 'debug',\n `rate limited, found x-ratelimit-reset header: ${rateLimitHeader}`,\n )\n const rateLimitHeaderNumber = Number(rateLimitHeader)\n if (Number.isNaN(rateLimitHeaderNumber)) {\n waitingTime = Date.parse(rateLimitHeader ?? '0') - Date.now()\n } else {\n waitingTime = rateLimitHeaderNumber - Date.now()\n }\n }\n if (waitingTime < 0 || waitingTime > 180000) {\n waitingTime = rateLimitWaitingTime(attempts)\n }\n log(\n payload,\n 'debug',\n `rate limited, attempt ${attempts}, remaining ${remaining}, waiting ${waitingTime}ms`,\n )\n await new Promise((resolve) => {\n setTimeout(resolve, waitingTime)\n })\n // eslint-disable-next-line require-atomic-updates\n payload.retry = {\n attempts: attempts + 1,\n remaining: remaining - 1,\n }\n return request(payload)\n }\n log(payload, 'debug', `rate limited, no more retries`)\n }\n\n const response: Response<T> = {\n // eslint-disable-next-line id-length\n ok: fetchResponse.ok,\n status: fetchResponse.status,\n statusText: fetchResponse.statusText,\n meta: {\n duration,\n },\n }\n\n const responseType = payload.responseType ?? type\n\n if (response.ok) {\n log(payload, 'debug', `request successful in ${Math.floor(duration)}ms`, {\n baseUrl: base,\n })\n sendMetrics(payload, 'success', {\n duration,\n statusCode: String(fetchResponse.status),\n })\n switch (responseType) {\n case 'json':\n try {\n response.body = await fetchResponse.json()\n } catch (_error) {\n log(\n payload,\n 'debug',\n `Failed to parse json body. Returning empty object.`,\n {\n baseUrl: base,\n },\n )\n response.body = {} as T\n try {\n const responseBodyText = await fetchResponse.text()\n log(payload, 'debug', `Response body text`, {\n baseUrl: base,\n responseBodyText,\n status: fetchResponse.status,\n })\n } catch (textError) {\n // this is fine\n log(payload, 'debug', `Failed to parse response body text.`, {\n baseUrl: base,\n status: fetchResponse.status,\n error: textError,\n })\n }\n }\n break\n case 'text':\n response.body = (await fetchResponse.text()) as T\n break\n default:\n response.body = (await fetchResponse.text()) as T\n }\n // store in cache after parsing\n if (\n payload.method === 'get' &&\n payload.config.frontendCaching?.enabled &&\n response.body !== undefined\n ) {\n try {\n await frontendCache.set('get', url, response.body as any)\n log(payload, 'debug', 'cache store successful')\n } catch (_cacheSetError) {\n // ignore cache set error\n }\n }\n } else {\n let statusText = fetchResponse.statusText\n try {\n statusText = await fetchResponse.text()\n } catch (_error) {\n // this is fine\n }\n response.statusText = statusText\n log(\n payload,\n 'debug',\n `request failed with status ${response.status}: ${statusText}`,\n {\n baseUrl: base,\n },\n )\n\n // Special Handling for dedicated target systems to not count special status codes as errors\n // eslint-disable-next-line no-shadow\n let type: RequestBaseCustomMetricsDetailsType = 'error'\n const noErrorStatusCodes: number[] = []\n switch (payload.metricsDetails.target.name) {\n case 'auth0':\n noErrorStatusCodes.push(...[400, 404, 409])\n break\n case 'accounts':\n case 'console':\n noErrorStatusCodes.push(...[404, 409])\n if (payload.metricsDetails.method.name === 'createTemporaryCluster') {\n // case: cannot create temporary cluster\n noErrorStatusCodes.push(...[400, 403, 412])\n }\n if (\n [\n 'ConsoleM2MService.verifyZeebeClient',\n 'ConsoleM2MService.verifyApiClient',\n ].includes(payload.metricsDetails.method.name)\n ) {\n // case: api/zeebe client credentials are invalid\n noErrorStatusCodes.push(...[401])\n }\n if (\n payload.metricsDetails.method.name ===\n 'OrgsService.createAndReturnSocialLoginUser'\n ) {\n noErrorStatusCodes.push(\n ...[\n // onboard user, user already has an org\n 400,\n // existing extSSO-connection\n 412,\n ],\n )\n }\n break\n }\n\n if (noErrorStatusCodes.includes(response.status)) {\n type = 'success'\n }\n\n sendMetrics(payload, type, {\n duration,\n statusCode: String(fetchResponse.status),\n error: statusText,\n })\n }\n if (serveCachedAndReturnAfterNetwork && response.ok) {\n // when we served stale via callback earlier, we now also return the fresh response\n log(payload, 'debug', 'stale cache updated, returning new data')\n }\n return response\n } catch (error: any) {\n log(payload, 'error', `request failed with no status`, {\n baseUrl: base,\n error,\n })\n const duration = performance.now() - start\n let errorMessage: string | undefined\n if (error?.cause?.code) {\n errorMessage = error?.cause?.code\n } else if (error?.message) {\n errorMessage = error?.message\n }\n sendMetrics(payload, 'error', {\n statusCode: 'fetch-error',\n duration,\n error: errorMessage,\n })\n const response: Response<T> = {\n // eslint-disable-next-line id-length\n ok: false,\n status: 500,\n statusText: 'fetch error',\n meta: {\n duration,\n },\n }\n return response\n }\n}\n"],
5
+ "mappings": "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",
6
+ "names": ["type"]
7
+ }
@@ -0,0 +1,7 @@
1
+ export declare class Cache<K, V> {
2
+ private expirationInMilliseconds;
3
+ private data;
4
+ constructor(expirationInMilliseconds: number);
5
+ set(key: K, value: V): void;
6
+ get(key: K): V | undefined;
7
+ }
@@ -0,0 +1,25 @@
1
+ class Cache {
2
+ constructor(expirationInMilliseconds) {
3
+ this.expirationInMilliseconds = expirationInMilliseconds;
4
+ this.data = /* @__PURE__ */ new Map();
5
+ }
6
+ set(key, value) {
7
+ this.data.set(key, {
8
+ value,
9
+ expiresAt: Date.now() + this.expirationInMilliseconds
10
+ });
11
+ }
12
+ get(key) {
13
+ const cached = this.data.get(key);
14
+ if (cached && cached.expiresAt > Date.now()) {
15
+ return cached.value;
16
+ } else if (cached) {
17
+ this.data.delete(key);
18
+ }
19
+ return void 0;
20
+ }
21
+ }
22
+ export {
23
+ Cache
24
+ };
25
+ //# sourceMappingURL=cache.js.map
@@ -0,0 +1,7 @@
1
+ {
2
+ "version": 3,
3
+ "sources": ["../../src/utils/cache.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 class Cache<K, V> {\n private data: Map<K, { value: V; expiresAt: number }> = new Map()\n\n constructor(private expirationInMilliseconds: number) {}\n\n public set(key: K, value: V) {\n this.data.set(key, {\n value,\n expiresAt: Date.now() + this.expirationInMilliseconds,\n })\n }\n public get(key: K): V | undefined {\n const cached = this.data.get(key)\n if (cached && cached.expiresAt > Date.now()) {\n return cached.value\n } else if (cached) {\n this.data.delete(key)\n }\n return undefined\n }\n}\n"],
5
+ "mappings": "AAMO,MAAM,MAAY;AAAA,EAGvB,YAAoB,0BAAkC;AAAlC;AAFpB,SAAQ,OAAgD,oBAAI,IAAI;AAAA,EAET;AAAA,EAEhD,IAAI,KAAQ,OAAU;AAC3B,SAAK,KAAK,IAAI,KAAK;AAAA,MACjB;AAAA,MACA,WAAW,KAAK,IAAI,IAAI,KAAK;AAAA,IAC/B,CAAC;AAAA,EACH;AAAA,EACO,IAAI,KAAuB;AAChC,UAAM,SAAS,KAAK,KAAK,IAAI,GAAG;AAChC,QAAI,UAAU,OAAO,YAAY,KAAK,IAAI,GAAG;AAC3C,aAAO,OAAO;AAAA,IAChB,WAAW,QAAQ;AACjB,WAAK,KAAK,OAAO,GAAG;AAAA,IACtB;AACA,WAAO;AAAA,EACT;AACF;",
6
+ "names": []
7
+ }
@@ -0,0 +1,18 @@
1
+ import type { RequestBaseServiceContext } from '../types/general.types.js';
2
+ export declare namespace CustomMetricsCCMA {
3
+ const PREFIX = "ccma_";
4
+ const LABEL_NAMES: string[];
5
+ function convertServiceContextToMetrics(context: RequestBaseServiceContext): {
6
+ source: string;
7
+ targetName: string;
8
+ sourceToTarget: string;
9
+ targetType: "internal" | "external";
10
+ methodName: string;
11
+ methodUrl: string;
12
+ methodType: import("../types/general.types.js").RequestBaseMethodType;
13
+ eventType: import("../types/general.types.js").RequestBaseCustomMetricsDetailsType | undefined;
14
+ durationBucket: string | undefined;
15
+ statusCode: string | undefined;
16
+ error: string | undefined;
17
+ };
18
+ }
@@ -0,0 +1,37 @@
1
+ var CustomMetricsCCMA;
2
+ ((CustomMetricsCCMA2) => {
3
+ CustomMetricsCCMA2.PREFIX = "ccma_";
4
+ CustomMetricsCCMA2.LABEL_NAMES = [
5
+ "source",
6
+ "targetName",
7
+ "sourceToTarget",
8
+ "targetType",
9
+ "methodName",
10
+ "methodUrl",
11
+ "methodType",
12
+ "eventType",
13
+ "durationBucket",
14
+ "statusCode",
15
+ "error"
16
+ ];
17
+ function convertServiceContextToMetrics(context) {
18
+ return {
19
+ source: context.source,
20
+ targetName: context.target.name,
21
+ sourceToTarget: `${context.source}-->${context.target.name}`,
22
+ targetType: context.target.type,
23
+ methodName: context.method.name,
24
+ methodUrl: context.method.normalizedUrl,
25
+ methodType: context.method.type,
26
+ eventType: context.eventType,
27
+ durationBucket: context.durationBucket,
28
+ statusCode: context.statusCode,
29
+ error: context.error
30
+ };
31
+ }
32
+ CustomMetricsCCMA2.convertServiceContextToMetrics = convertServiceContextToMetrics;
33
+ })(CustomMetricsCCMA || (CustomMetricsCCMA = {}));
34
+ export {
35
+ CustomMetricsCCMA
36
+ };
37
+ //# sourceMappingURL=ccma-metrics.js.map
@@ -0,0 +1,7 @@
1
+ {
2
+ "version": 3,
3
+ "sources": ["../../src/utils/ccma-metrics.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 { RequestBaseServiceContext } from '../types/general.types.js'\n\nexport namespace CustomMetricsCCMA {\n export const PREFIX = 'ccma_'\n\n export const LABEL_NAMES: string[] = [\n 'source',\n 'targetName',\n 'sourceToTarget',\n 'targetType',\n 'methodName',\n 'methodUrl',\n 'methodType',\n 'eventType',\n 'durationBucket',\n 'statusCode',\n 'error',\n ]\n\n export function convertServiceContextToMetrics(\n context: RequestBaseServiceContext,\n ) {\n return {\n source: context.source,\n targetName: context.target.name,\n sourceToTarget: `${context.source}-->${context.target.name}`,\n targetType: context.target.type,\n methodName: context.method.name,\n methodUrl: context.method.normalizedUrl,\n methodType: context.method.type,\n eventType: context.eventType,\n durationBucket: context.durationBucket,\n statusCode: context.statusCode,\n error: context.error,\n }\n }\n}\n"],
5
+ "mappings": "AAQO,IAAU;AAAA,CAAV,CAAUA,uBAAV;AACE,EAAMA,mBAAA,SAAS;AAEf,EAAMA,mBAAA,cAAwB;AAAA,IACnC;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,EACF;AAEO,WAAS,+BACd,SACA;AACA,WAAO;AAAA,MACL,QAAQ,QAAQ;AAAA,MAChB,YAAY,QAAQ,OAAO;AAAA,MAC3B,gBAAgB,GAAG,QAAQ,MAAM,MAAM,QAAQ,OAAO,IAAI;AAAA,MAC1D,YAAY,QAAQ,OAAO;AAAA,MAC3B,YAAY,QAAQ,OAAO;AAAA,MAC3B,WAAW,QAAQ,OAAO;AAAA,MAC1B,YAAY,QAAQ,OAAO;AAAA,MAC3B,WAAW,QAAQ;AAAA,MACnB,gBAAgB,QAAQ;AAAA,MACxB,YAAY,QAAQ;AAAA,MACpB,OAAO,QAAQ;AAAA,IACjB;AAAA,EACF;AAhBO,EAAAA,mBAAS;AAAA,GAjBD;",
6
+ "names": ["CustomMetricsCCMA"]
7
+ }
@@ -0,0 +1,11 @@
1
+ import type { RequestBaseParamsConfig } from '../types/general.types.js';
2
+ export type ServiceName = 'accounts' | 'console' | 'audit-logger' | 'notifications' | 'login' | 'login-internal' | 'comm-bridge' | 'telemetry' | 'mixpanel' | 'alert-distributor' | 'analytic-bridge' | 'wordpress-helpcenter';
3
+ export type ServiceAudience = 'camunda-cloud-audience' | 'comm-bridge-audience' | 'notification-audience' | 'analytics-audience';
4
+ export interface EnvironmentParam {
5
+ id: ServiceName | ServiceAudience;
6
+ dev: string;
7
+ devAws: string;
8
+ int: string;
9
+ prod: string;
10
+ }
11
+ export declare function getEnvParam(id: ServiceName | ServiceAudience, config: RequestBaseParamsConfig): string;
@@ -0,0 +1,148 @@
1
+ const ENV_PARAMS = [
2
+ {
3
+ id: "notifications",
4
+ dev: "https://notifications.cloud.dev.ultrawombat.com",
5
+ devAws: "https://notifications.cloud.dev.ultrawombat.com",
6
+ int: "https://notifications.cloud.ultrawombat.com",
7
+ prod: "https://notifications.cloud.camunda.io"
8
+ },
9
+ {
10
+ id: "console",
11
+ dev: "https://console.cloud.dev.ultrawombat.com",
12
+ devAws: "https://console-aws.cloud.dev.ultrawombat.com",
13
+ int: "https://console.cloud.ultrawombat.com",
14
+ prod: "https://console.cloud.camunda.io"
15
+ },
16
+ {
17
+ id: "accounts",
18
+ dev: "https://accounts.cloud.dev.ultrawombat.com",
19
+ devAws: "https://accounts-aws.cloud.dev.ultrawombat.com",
20
+ int: "https://accounts.cloud.ultrawombat.com",
21
+ prod: "https://accounts.cloud.camunda.io"
22
+ },
23
+ {
24
+ id: "audit-logger",
25
+ dev: "https://audit.cloud.dev.ultrawombat.com",
26
+ devAws: "https://audit-logger.cloud.dev.ultrawombat.com",
27
+ int: "https://audit.cloud.ultrawombat.com",
28
+ prod: "https://audit.cloud.camunda.io"
29
+ },
30
+ {
31
+ id: "analytic-bridge",
32
+ dev: "https://analytics.cloud.dev.ultrawombat.com",
33
+ devAws: "https://analytics-bridge.cloud.dev.ultrawombat.com",
34
+ int: "https://analytics.cloud.ultrawombat.com",
35
+ prod: "https://analytics.cloud.camunda.io"
36
+ },
37
+ {
38
+ id: "login",
39
+ dev: "https://login.cloud.dev.ultrawombat.com",
40
+ devAws: "https://login.cloud.dev.ultrawombat.com",
41
+ int: "https://login.cloud.ultrawombat.com",
42
+ prod: "https://login.cloud.camunda.io"
43
+ },
44
+ {
45
+ id: "login-internal",
46
+ dev: "http://token-issuer.token-issuer.svc.cluster.local:8080",
47
+ devAws: "http://token-issuer.token-issuer.svc.cluster.local:8080",
48
+ int: "http://token-issuer.token-issuer.svc.cluster.local:8080",
49
+ prod: "http://token-issuer.token-issuer.svc.cluster.local:8080"
50
+ },
51
+ {
52
+ id: "comm-bridge",
53
+ dev: "https://comm.cloud.dev.ultrawombat.com",
54
+ devAws: "https://comm.cloud.dev.ultrawombat.com",
55
+ int: "https://comm.cloud.ultrawombat.com",
56
+ prod: "https://comm.cloud.camunda.io"
57
+ },
58
+ {
59
+ id: "telemetry",
60
+ dev: "https://telemetry.cloud.dev.ultrawombat.com",
61
+ devAws: "https://telemetry.cloud.dev.ultrawombat.com",
62
+ int: "https://telemetry.cloud.ultrawombat.com",
63
+ prod: "https://telemetry.cloud.camunda.io"
64
+ },
65
+ {
66
+ id: "mixpanel",
67
+ dev: "https://api.mixpanel.com",
68
+ devAws: "https://api.mixpanel.com",
69
+ int: "https://api.mixpanel.com",
70
+ prod: "https://api.mixpanel.com"
71
+ },
72
+ {
73
+ id: "alert-distributor",
74
+ dev: "https://alert-distributor.cloud.dev.ultrawombat.com",
75
+ devAws: "https://alert-distributor.cloud.dev.ultrawombat.com",
76
+ int: "https://alert-distributor.cloud.ultrawombat.com",
77
+ prod: "https://alert-distributor.cloud.camunda.io"
78
+ },
79
+ {
80
+ id: "wordpress-helpcenter",
81
+ dev: "https://camunda-help-stg.mystagingwebsite.com",
82
+ devAws: "https://camunda-help-stg.mystagingwebsite.com",
83
+ int: "https://camunda-help-stg.mystagingwebsite.com",
84
+ prod: "https://camunda-helpcenter.mystagingwebsite.com"
85
+ },
86
+ // AUDIENCES
87
+ {
88
+ id: "camunda-cloud-audience",
89
+ dev: "cloud.dev.ultrawombat.com",
90
+ devAws: "cloud.dev.ultrawombat.com",
91
+ int: "cloud.ultrawombat.com",
92
+ prod: "cloud.camunda.io"
93
+ },
94
+ {
95
+ id: "comm-bridge-audience",
96
+ dev: "comm.dev.ultrawombat.com",
97
+ devAws: "comm.dev.ultrawombat.com",
98
+ int: "comm.ultrawombat.com",
99
+ prod: "comm.camunda.io"
100
+ },
101
+ {
102
+ id: "notification-audience",
103
+ dev: "notifications.dev.ultrawombat.com",
104
+ devAws: "notifications.dev.ultrawombat.com",
105
+ int: "notifications.ultrawombat.com",
106
+ prod: "notifications.camunda.io"
107
+ },
108
+ {
109
+ id: "analytics-audience",
110
+ dev: "analytics.dev.ultrawombat.com",
111
+ devAws: "analytics.dev.ultrawombat.com",
112
+ int: "analytics.ultrawombat.com",
113
+ prod: "analytics.camunda.io"
114
+ }
115
+ ];
116
+ function getEnvParam(id, config) {
117
+ if (config.envOverride?.[id] && config.envOverride[id].length > 0) {
118
+ return config.envOverride[id];
119
+ }
120
+ if (id === "console" && config.stage === "localconsole" || id === "accounts" && config.stage === "localaccounts") {
121
+ return `http://localhost:8080`;
122
+ }
123
+ const envParam = ENV_PARAMS.find(
124
+ (environmentParam) => environmentParam.id === id
125
+ );
126
+ if (!envParam) {
127
+ throw new Error(`Unknown id: ${id}`);
128
+ }
129
+ switch (config.stage) {
130
+ case "local":
131
+ case "localconsole":
132
+ case "localaccounts":
133
+ case "dev":
134
+ return envParam.dev;
135
+ case "devAws":
136
+ return envParam.devAws;
137
+ case "int":
138
+ return envParam.int;
139
+ case "prod":
140
+ return envParam.prod;
141
+ default:
142
+ throw new Error(`Unknown stage: ${config.stage}`);
143
+ }
144
+ }
145
+ export {
146
+ getEnvParam
147
+ };
148
+ //# sourceMappingURL=environments.js.map
@@ -0,0 +1,7 @@
1
+ {
2
+ "version": 3,
3
+ "sources": ["../../src/utils/environments.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 { RequestBaseParamsConfig } from '../types/general.types.js'\n\nexport type ServiceName =\n | 'accounts'\n | 'console'\n | 'audit-logger'\n | 'notifications'\n | 'login'\n | 'login-internal'\n | 'comm-bridge'\n | 'telemetry'\n | 'mixpanel'\n | 'alert-distributor'\n | 'analytic-bridge'\n | 'wordpress-helpcenter'\n\nexport type ServiceAudience =\n | 'camunda-cloud-audience'\n | 'comm-bridge-audience'\n | 'notification-audience'\n | 'analytics-audience'\n\nexport interface EnvironmentParam {\n id: ServiceName | ServiceAudience\n dev: string\n devAws: string\n int: string\n prod: string\n}\n\nconst ENV_PARAMS: EnvironmentParam[] = [\n {\n id: 'notifications',\n dev: 'https://notifications.cloud.dev.ultrawombat.com',\n devAws: 'https://notifications.cloud.dev.ultrawombat.com',\n int: 'https://notifications.cloud.ultrawombat.com',\n prod: 'https://notifications.cloud.camunda.io',\n },\n {\n id: 'console',\n dev: 'https://console.cloud.dev.ultrawombat.com',\n devAws: 'https://console-aws.cloud.dev.ultrawombat.com',\n int: 'https://console.cloud.ultrawombat.com',\n prod: 'https://console.cloud.camunda.io',\n },\n {\n id: 'accounts',\n dev: 'https://accounts.cloud.dev.ultrawombat.com',\n devAws: 'https://accounts-aws.cloud.dev.ultrawombat.com',\n int: 'https://accounts.cloud.ultrawombat.com',\n prod: 'https://accounts.cloud.camunda.io',\n },\n {\n id: 'audit-logger',\n dev: 'https://audit.cloud.dev.ultrawombat.com',\n devAws: 'https://audit-logger.cloud.dev.ultrawombat.com',\n int: 'https://audit.cloud.ultrawombat.com',\n prod: 'https://audit.cloud.camunda.io',\n },\n {\n id: 'analytic-bridge',\n dev: 'https://analytics.cloud.dev.ultrawombat.com',\n devAws: 'https://analytics-bridge.cloud.dev.ultrawombat.com',\n int: 'https://analytics.cloud.ultrawombat.com',\n prod: 'https://analytics.cloud.camunda.io',\n },\n {\n id: 'login',\n dev: 'https://login.cloud.dev.ultrawombat.com',\n devAws: 'https://login.cloud.dev.ultrawombat.com',\n int: 'https://login.cloud.ultrawombat.com',\n prod: 'https://login.cloud.camunda.io',\n },\n {\n id: 'login-internal',\n dev: 'http://token-issuer.token-issuer.svc.cluster.local:8080',\n devAws: 'http://token-issuer.token-issuer.svc.cluster.local:8080',\n int: 'http://token-issuer.token-issuer.svc.cluster.local:8080',\n prod: 'http://token-issuer.token-issuer.svc.cluster.local:8080',\n },\n {\n id: 'comm-bridge',\n dev: 'https://comm.cloud.dev.ultrawombat.com',\n devAws: 'https://comm.cloud.dev.ultrawombat.com',\n int: 'https://comm.cloud.ultrawombat.com',\n prod: 'https://comm.cloud.camunda.io',\n },\n {\n id: 'telemetry',\n dev: 'https://telemetry.cloud.dev.ultrawombat.com',\n devAws: 'https://telemetry.cloud.dev.ultrawombat.com',\n int: 'https://telemetry.cloud.ultrawombat.com',\n prod: 'https://telemetry.cloud.camunda.io',\n },\n {\n id: 'mixpanel',\n dev: 'https://api.mixpanel.com',\n devAws: 'https://api.mixpanel.com',\n int: 'https://api.mixpanel.com',\n prod: 'https://api.mixpanel.com',\n },\n {\n id: 'alert-distributor',\n dev: 'https://alert-distributor.cloud.dev.ultrawombat.com',\n devAws: 'https://alert-distributor.cloud.dev.ultrawombat.com',\n int: 'https://alert-distributor.cloud.ultrawombat.com',\n prod: 'https://alert-distributor.cloud.camunda.io',\n },\n {\n id: 'wordpress-helpcenter',\n dev: 'https://camunda-help-stg.mystagingwebsite.com',\n devAws: 'https://camunda-help-stg.mystagingwebsite.com',\n int: 'https://camunda-help-stg.mystagingwebsite.com',\n prod: 'https://camunda-helpcenter.mystagingwebsite.com',\n },\n // AUDIENCES\n {\n id: 'camunda-cloud-audience',\n dev: 'cloud.dev.ultrawombat.com',\n devAws: 'cloud.dev.ultrawombat.com',\n int: 'cloud.ultrawombat.com',\n prod: 'cloud.camunda.io',\n },\n {\n id: 'comm-bridge-audience',\n dev: 'comm.dev.ultrawombat.com',\n devAws: 'comm.dev.ultrawombat.com',\n int: 'comm.ultrawombat.com',\n prod: 'comm.camunda.io',\n },\n {\n id: 'notification-audience',\n dev: 'notifications.dev.ultrawombat.com',\n devAws: 'notifications.dev.ultrawombat.com',\n int: 'notifications.ultrawombat.com',\n prod: 'notifications.camunda.io',\n },\n {\n id: 'analytics-audience',\n dev: 'analytics.dev.ultrawombat.com',\n devAws: 'analytics.dev.ultrawombat.com',\n int: 'analytics.ultrawombat.com',\n prod: 'analytics.camunda.io',\n },\n]\n\nexport function getEnvParam(\n id: ServiceName | ServiceAudience,\n config: RequestBaseParamsConfig,\n) {\n if (config.envOverride?.[id] && config.envOverride[id].length > 0) {\n return config.envOverride[id]\n }\n\n if (\n (id === 'console' && config.stage === 'localconsole') ||\n (id === 'accounts' && config.stage === 'localaccounts')\n ) {\n // special handling if running console/accounts frontend and backend locally\n return `http://localhost:8080`\n }\n\n const envParam = ENV_PARAMS.find(\n (environmentParam) => environmentParam.id === id,\n )\n if (!envParam) {\n throw new Error(`Unknown id: ${id}`)\n }\n switch (config.stage) {\n case 'local':\n case 'localconsole':\n case 'localaccounts':\n case 'dev':\n return envParam.dev\n case 'devAws':\n return envParam.devAws\n case 'int':\n return envParam.int\n case 'prod':\n return envParam.prod\n default:\n throw new Error(`Unknown stage: ${config.stage}`)\n }\n}\n"],
5
+ "mappings": "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",
6
+ "names": []
7
+ }
@@ -0,0 +1,5 @@
1
+ export declare class HttpError extends Error {
2
+ status: number;
3
+ statusText: string | undefined;
4
+ constructor(message: string, status: number, statusText?: string);
5
+ }
@@ -0,0 +1,11 @@
1
+ class HttpError extends Error {
2
+ constructor(message, status, statusText) {
3
+ super(statusText);
4
+ this.status = status;
5
+ this.statusText = message;
6
+ }
7
+ }
8
+ export {
9
+ HttpError
10
+ };
11
+ //# sourceMappingURL=errors.js.map
@@ -0,0 +1,7 @@
1
+ {
2
+ "version": 3,
3
+ "sources": ["../../src/utils/errors.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 class HttpError extends Error {\n public status: number\n public statusText: string | undefined\n\n constructor(message: string, status: number, statusText?: string) {\n super(statusText)\n this.status = status\n this.statusText = message\n }\n}\n"],
5
+ "mappings": "AAMO,MAAM,kBAAkB,MAAM;AAAA,EAInC,YAAY,SAAiB,QAAgB,YAAqB;AAChE,UAAM,UAAU;AAChB,SAAK,SAAS;AACd,SAAK,aAAa;AAAA,EACpB;AACF;",
6
+ "names": []
7
+ }
@@ -0,0 +1,26 @@
1
+ import type { RequestBaseParamsConfig } from '../types/general.types.js';
2
+ interface CachedEntry<T> {
3
+ meta: {
4
+ created: number;
5
+ updated: number;
6
+ key: string;
7
+ };
8
+ payload: T;
9
+ }
10
+ declare class FrontendCache {
11
+ private static instance;
12
+ private db;
13
+ private initializing;
14
+ private initPromise;
15
+ private config;
16
+ static getInstance(): FrontendCache;
17
+ private static isBrowser;
18
+ configure(options: RequestBaseParamsConfig['frontendCaching']): void;
19
+ private initDb;
20
+ private static buildKey;
21
+ get<T>(method: string, url: string): Promise<CachedEntry<T> | undefined>;
22
+ set<T>(method: string, url: string, payload: T): Promise<void>;
23
+ isFresh(entry: CachedEntry<any>): boolean;
24
+ }
25
+ export declare const frontendCache: FrontendCache;
26
+ export {};
@@ -0,0 +1,121 @@
1
+ class FrontendCache {
2
+ constructor() {
3
+ this.initializing = false;
4
+ }
5
+ static getInstance() {
6
+ if (!FrontendCache.instance) {
7
+ FrontendCache.instance = new FrontendCache();
8
+ }
9
+ return FrontendCache.instance;
10
+ }
11
+ static isBrowser() {
12
+ return typeof window !== "undefined" && typeof indexedDB !== "undefined";
13
+ }
14
+ configure(options) {
15
+ if (!options || !options.enabled) {
16
+ return;
17
+ }
18
+ if (!FrontendCache.isBrowser()) {
19
+ return;
20
+ }
21
+ this.config = {
22
+ enabled: options.enabled,
23
+ dbName: options.dbName,
24
+ storeName: options.storeName ?? "requests",
25
+ ttl: options.ttl
26
+ };
27
+ }
28
+ async initDb() {
29
+ if (!this.config) {
30
+ throw new Error("FrontendCache not configured");
31
+ }
32
+ if (!FrontendCache.isBrowser()) {
33
+ throw new Error("Not in browser environment");
34
+ }
35
+ if (this.db) {
36
+ return this.db;
37
+ }
38
+ if (this.initializing && this.initPromise) {
39
+ return this.initPromise;
40
+ }
41
+ this.initializing = true;
42
+ this.initPromise = new Promise((resolve, reject) => {
43
+ const request = indexedDB.open(this.config?.dbName ?? "", 1);
44
+ request.onupgradeneeded = () => {
45
+ const db = request.result;
46
+ if (!db.objectStoreNames.contains(this.config?.storeName ?? "")) {
47
+ db.createObjectStore(this.config?.storeName ?? "", {
48
+ keyPath: "meta.key"
49
+ });
50
+ }
51
+ };
52
+ request.onsuccess = () => {
53
+ this.db = request.result;
54
+ resolve(this.db);
55
+ };
56
+ request.onerror = () => {
57
+ reject(request.error);
58
+ };
59
+ });
60
+ try {
61
+ await this.initPromise;
62
+ return this.db ?? (() => {
63
+ throw new Error("DB init failed");
64
+ })();
65
+ } finally {
66
+ this.initializing = false;
67
+ }
68
+ }
69
+ static buildKey(method, url) {
70
+ return `${method.toUpperCase()}::${url}`;
71
+ }
72
+ async get(method, url) {
73
+ if (!this.config || !this.config.enabled) {
74
+ return void 0;
75
+ }
76
+ try {
77
+ const db = await this.initDb();
78
+ const key = FrontendCache.buildKey(method, url);
79
+ return await new Promise((resolve, reject) => {
80
+ const txn = db.transaction(this.config?.storeName ?? "", "readonly");
81
+ const store = txn.objectStore(this.config?.storeName ?? "");
82
+ const req = store.get(key);
83
+ req.onsuccess = () => resolve(req.result);
84
+ req.onerror = () => reject(req.error);
85
+ });
86
+ } catch {
87
+ return void 0;
88
+ }
89
+ }
90
+ async set(method, url, payload) {
91
+ if (!this.config || !this.config.enabled) {
92
+ return;
93
+ }
94
+ try {
95
+ const db = await this.initDb();
96
+ const existing = await this.get(method, url);
97
+ const key = FrontendCache.buildKey(method, url);
98
+ const now = Date.now();
99
+ const entry = existing ? { ...existing, meta: { ...existing.meta, updated: now }, payload } : { meta: { created: now, updated: now, key }, payload };
100
+ await new Promise((resolve, reject) => {
101
+ const txn = db.transaction(this.config?.storeName ?? "", "readwrite");
102
+ const store = txn.objectStore(this.config?.storeName ?? "");
103
+ const req = store.put(entry);
104
+ req.onsuccess = () => resolve();
105
+ req.onerror = () => reject(req.error);
106
+ });
107
+ } catch {
108
+ }
109
+ }
110
+ isFresh(entry) {
111
+ if (!this.config) {
112
+ return false;
113
+ }
114
+ return Date.now() - entry.meta.updated <= this.config.ttl;
115
+ }
116
+ }
117
+ const frontendCache = FrontendCache.getInstance();
118
+ export {
119
+ frontendCache
120
+ };
121
+ //# sourceMappingURL=frontendCache.js.map
@@ -0,0 +1,7 @@
1
+ {
2
+ "version": 3,
3
+ "sources": ["../../src/utils/frontendCache.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 { RequestBaseParamsConfig } from '../types/general.types.js'\n\ninterface CachedEntry<T> {\n meta: {\n created: number\n updated: number\n key: string\n }\n payload: T\n}\n\ninterface FrontendCacheConfig {\n enabled: boolean\n dbName: string\n storeName: string\n ttl: number\n}\n\n// Singleton wrapper\nclass FrontendCache {\n private static instance: FrontendCache | undefined\n private db: IDBDatabase | undefined\n private initializing = false\n private initPromise: Promise<IDBDatabase> | undefined\n private config: FrontendCacheConfig | undefined\n\n static getInstance() {\n if (!FrontendCache.instance) {\n FrontendCache.instance = new FrontendCache()\n }\n return FrontendCache.instance\n }\n\n private static isBrowser() {\n return typeof window !== 'undefined' && typeof indexedDB !== 'undefined'\n }\n\n configure(options: RequestBaseParamsConfig['frontendCaching']) {\n if (!options || !options.enabled) {\n return\n }\n if (!FrontendCache.isBrowser()) {\n return\n }\n this.config = {\n enabled: options.enabled,\n dbName: options.dbName,\n storeName: options.storeName ?? 'requests',\n ttl: options.ttl,\n }\n }\n\n private async initDb(): Promise<IDBDatabase> {\n if (!this.config) {\n throw new Error('FrontendCache not configured')\n }\n if (!FrontendCache.isBrowser()) {\n throw new Error('Not in browser environment')\n }\n if (this.db) {\n return this.db\n }\n if (this.initializing && this.initPromise) {\n return this.initPromise\n }\n this.initializing = true\n this.initPromise = new Promise<IDBDatabase>((resolve, reject) => {\n const request = indexedDB.open(this.config?.dbName ?? '', 1)\n request.onupgradeneeded = () => {\n const db = request.result\n if (!db.objectStoreNames.contains(this.config?.storeName ?? '')) {\n db.createObjectStore(this.config?.storeName ?? '', {\n keyPath: 'meta.key',\n })\n }\n }\n request.onsuccess = () => {\n this.db = request.result\n resolve(this.db)\n }\n request.onerror = () => {\n reject(request.error)\n }\n })\n try {\n await this.initPromise\n return (\n this.db ??\n ((): IDBDatabase => {\n throw new Error('DB init failed')\n })()\n )\n } finally {\n this.initializing = false\n }\n }\n\n private static buildKey(method: string, url: string) {\n return `${method.toUpperCase()}::${url}`\n }\n\n async get<T>(\n method: string,\n url: string,\n ): Promise<CachedEntry<T> | undefined> {\n if (!this.config || !this.config.enabled) {\n return undefined\n }\n try {\n const db = await this.initDb()\n const key = FrontendCache.buildKey(method, url)\n return await new Promise((resolve, reject) => {\n const txn = db.transaction(this.config?.storeName ?? '', 'readonly')\n const store = txn.objectStore(this.config?.storeName ?? '')\n const req = store.get(key)\n req.onsuccess = () => resolve(req.result as CachedEntry<T> | undefined)\n req.onerror = () => reject(req.error)\n })\n } catch {\n return undefined\n }\n }\n\n async set<T>(method: string, url: string, payload: T) {\n if (!this.config || !this.config.enabled) {\n return\n }\n try {\n const db = await this.initDb()\n const existing = await this.get<T>(method, url)\n const key = FrontendCache.buildKey(method, url)\n const now = Date.now()\n const entry: CachedEntry<T> = existing\n ? { ...existing, meta: { ...existing.meta, updated: now }, payload }\n : { meta: { created: now, updated: now, key }, payload }\n await new Promise<void>((resolve, reject) => {\n const txn = db.transaction(this.config?.storeName ?? '', 'readwrite')\n const store = txn.objectStore(this.config?.storeName ?? '')\n const req = store.put(entry)\n req.onsuccess = () => resolve()\n req.onerror = () => reject(req.error)\n })\n } catch {\n // ignore cache errors\n }\n }\n\n isFresh(entry: CachedEntry<any>) {\n if (!this.config) {\n return false\n }\n return Date.now() - entry.meta.updated <= this.config.ttl\n }\n}\n\nexport const frontendCache = FrontendCache.getInstance()\n"],
5
+ "mappings": "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",
6
+ "names": []
7
+ }
@@ -0,0 +1,8 @@
1
+ import type { RequestBaseParams, RequestBaseServiceContext } from '../types/general.types.js';
2
+ import type { ServiceName } from './environments.js';
3
+ export declare class TokenIssuerUtils {
4
+ static getBaseId(options: {
5
+ params: RequestBaseParams;
6
+ serviceContext: RequestBaseServiceContext;
7
+ }): ServiceName;
8
+ }
@@ -0,0 +1,19 @@
1
+ class TokenIssuerUtils {
2
+ static getBaseId(options) {
3
+ let baseId = "login-internal";
4
+ if (options.params.config.stage === "local") {
5
+ baseId = "login";
6
+ }
7
+ if (options.serviceContext.source === "cloudbot") {
8
+ baseId = "login";
9
+ }
10
+ if (options.serviceContext.source === "token-validator") {
11
+ baseId = "login";
12
+ }
13
+ return baseId;
14
+ }
15
+ }
16
+ export {
17
+ TokenIssuerUtils
18
+ };
19
+ //# sourceMappingURL=token-issuer.utils.js.map
@@ -0,0 +1,7 @@
1
+ {
2
+ "version": 3,
3
+ "sources": ["../../src/utils/token-issuer.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\nimport type {\n RequestBaseParams,\n RequestBaseServiceContext,\n} from '../types/general.types.js'\nimport type { ServiceName } from './environments.js'\n\nexport class TokenIssuerUtils {\n public static getBaseId(options: {\n params: RequestBaseParams\n serviceContext: RequestBaseServiceContext\n }): ServiceName {\n // #2014\n let baseId: ServiceName = 'login-internal'\n\n if (options.params.config.stage === 'local') {\n baseId = 'login'\n }\n\n if (options.serviceContext.source === 'cloudbot') {\n // cloudbot uses the public endpoint\n baseId = 'login'\n }\n\n if (options.serviceContext.source === 'token-validator') {\n // token-validator uses the public endpoint\n baseId = 'login'\n }\n\n return baseId\n }\n}\n"],
5
+ "mappings": "AAYO,MAAM,iBAAiB;AAAA,EAC5B,OAAc,UAAU,SAGR;AAEd,QAAI,SAAsB;AAE1B,QAAI,QAAQ,OAAO,OAAO,UAAU,SAAS;AAC3C,eAAS;AAAA,IACX;AAEA,QAAI,QAAQ,eAAe,WAAW,YAAY;AAEhD,eAAS;AAAA,IACX;AAEA,QAAI,QAAQ,eAAe,WAAW,mBAAmB;AAEvD,eAAS;AAAA,IACX;AAEA,WAAO;AAAA,EACT;AACF;",
6
+ "names": []
7
+ }
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@camunda/ccma-api",
3
- "version": "0.0.2",
3
+ "version": "0.0.3",
4
4
  "description": "Centralized API service layer for Camunda Cloud Management Apps",
5
5
  "bugs": {
6
6
  "url": "https://github.com/camunda/camunda-cloud-management-apps/issues"
@@ -45,7 +45,7 @@
45
45
  }
46
46
  },
47
47
  "dependencies": {
48
- "@camunda/ccma-shared-types": "0.0.2"
48
+ "@camunda/ccma-shared-types": "0.0.3"
49
49
  },
50
50
  "scripts": {
51
51
  "build": "node esbuild.mjs && tsc --emitDeclarationOnly --outDir dist",