@camunda/ccma-api 0.0.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/index.d.ts +97 -0
- package/dist/index.js +153 -0
- package/dist/index.js.map +7 -0
- package/dist/services/accounts/accounts.data-export.service.d.ts +13 -0
- package/dist/services/accounts/accounts.data-export.service.js +41 -0
- package/dist/services/accounts/accounts.data-export.service.js.map +7 -0
- package/dist/services/accounts/accounts.valuemetrics.service.d.ts +8 -0
- package/dist/services/accounts/accounts.valuemetrics.service.js +1 -0
- package/dist/services/accounts/accounts.valuemetrics.service.js.map +7 -0
- package/dist/services/accounts/bot.service.d.ts +21 -0
- package/dist/services/accounts/bot.service.js +74 -0
- package/dist/services/accounts/bot.service.js.map +7 -0
- package/dist/services/accounts/challenge.service.d.ts +296 -0
- package/dist/services/accounts/challenge.service.js +475 -0
- package/dist/services/accounts/challenge.service.js.map +7 -0
- package/dist/services/accounts/connections.service.d.ts +27 -0
- package/dist/services/accounts/connections.service.js +41 -0
- package/dist/services/accounts/connections.service.js.map +7 -0
- package/dist/services/accounts/dashboards.service.d.ts +8 -0
- package/dist/services/accounts/dashboards.service.js +42 -0
- package/dist/services/accounts/dashboards.service.js.map +7 -0
- package/dist/services/accounts/early-access-features.service.d.ts +34 -0
- package/dist/services/accounts/early-access-features.service.js +67 -0
- package/dist/services/accounts/early-access-features.service.js.map +7 -0
- package/dist/services/accounts/genericCache.service.d.ts +13 -0
- package/dist/services/accounts/genericCache.service.js +80 -0
- package/dist/services/accounts/genericCache.service.js.map +7 -0
- package/dist/services/accounts/hdp.service.d.ts +52 -0
- package/dist/services/accounts/hdp.service.js +180 -0
- package/dist/services/accounts/hdp.service.js.map +7 -0
- package/dist/services/accounts/offboarding.service.d.ts +18 -0
- package/dist/services/accounts/offboarding.service.js +48 -0
- package/dist/services/accounts/offboarding.service.js.map +7 -0
- package/dist/services/accounts/organization-members.service.d.ts +68 -0
- package/dist/services/accounts/organization-members.service.js +216 -0
- package/dist/services/accounts/organization-members.service.js.map +7 -0
- package/dist/services/accounts/orgs.service.d.ts +273 -0
- package/dist/services/accounts/orgs.service.js +978 -0
- package/dist/services/accounts/orgs.service.js.map +7 -0
- package/dist/services/accounts/salesplan.service.d.ts +7 -0
- package/dist/services/accounts/salesplan.service.js +40 -0
- package/dist/services/accounts/salesplan.service.js.map +7 -0
- package/dist/services/accounts/spam-detection.service.d.ts +8 -0
- package/dist/services/accounts/spam-detection.service.js +72 -0
- package/dist/services/accounts/spam-detection.service.js.map +7 -0
- package/dist/services/accounts/stats.service.d.ts +7 -0
- package/dist/services/accounts/stats.service.js +40 -0
- package/dist/services/accounts/stats.service.js.map +7 -0
- package/dist/services/accounts/teams.service.d.ts +85 -0
- package/dist/services/accounts/teams.service.js +516 -0
- package/dist/services/accounts/teams.service.js.map +7 -0
- package/dist/services/accounts/usage-alerts.service.d.ts +34 -0
- package/dist/services/accounts/usage-alerts.service.js +112 -0
- package/dist/services/accounts/usage-alerts.service.js.map +7 -0
- package/dist/services/accounts/users.service.d.ts +101 -0
- package/dist/services/accounts/users.service.js +444 -0
- package/dist/services/accounts/users.service.js.map +7 -0
- package/dist/services/alerts/alerts.service.d.ts +59 -0
- package/dist/services/alerts/alerts.service.js +234 -0
- package/dist/services/alerts/alerts.service.js.map +7 -0
- package/dist/services/analytic-bridge/analytic-bridge.service.d.ts +23 -0
- package/dist/services/analytic-bridge/analytic-bridge.service.js +86 -0
- package/dist/services/analytic-bridge/analytic-bridge.service.js.map +7 -0
- package/dist/services/audit-logger/audit-logger.service.d.ts +27 -0
- package/dist/services/audit-logger/audit-logger.service.js +108 -0
- package/dist/services/audit-logger/audit-logger.service.js.map +7 -0
- package/dist/services/auth0/auth0.service.d.ts +15 -0
- package/dist/services/auth0/auth0.service.js +40 -0
- package/dist/services/auth0/auth0.service.js.map +7 -0
- package/dist/services/comm-bridge/comm-bridge.service.d.ts +33 -0
- package/dist/services/comm-bridge/comm-bridge.service.js +40 -0
- package/dist/services/comm-bridge/comm-bridge.service.js.map +7 -0
- package/dist/services/console/console.admin.service.d.ts +328 -0
- package/dist/services/console/console.admin.service.js +1526 -0
- package/dist/services/console/console.admin.service.js.map +7 -0
- package/dist/services/console/console.alerts.service.d.ts +69 -0
- package/dist/services/console/console.alerts.service.js +160 -0
- package/dist/services/console/console.alerts.service.js.map +7 -0
- package/dist/services/console/console.api-clients.service.d.ts +48 -0
- package/dist/services/console/console.api-clients.service.js +123 -0
- package/dist/services/console/console.api-clients.service.js.map +7 -0
- package/dist/services/console/console.backup-schedule.service.d.ts +21 -0
- package/dist/services/console/console.backup-schedule.service.js +67 -0
- package/dist/services/console/console.backup-schedule.service.js.map +7 -0
- package/dist/services/console/console.byok-scripts.service.d.ts +12 -0
- package/dist/services/console/console.byok-scripts.service.js +92 -0
- package/dist/services/console/console.byok-scripts.service.js.map +7 -0
- package/dist/services/console/console.byom-monitoring.service.d.ts +58 -0
- package/dist/services/console/console.byom-monitoring.service.js +177 -0
- package/dist/services/console/console.byom-monitoring.service.js.map +7 -0
- package/dist/services/console/console.cluster-clients.service.d.ts +55 -0
- package/dist/services/console/console.cluster-clients.service.js +123 -0
- package/dist/services/console/console.cluster-clients.service.js.map +7 -0
- package/dist/services/console/console.cluster-parameters.service.d.ts +64 -0
- package/dist/services/console/console.cluster-parameters.service.js +39 -0
- package/dist/services/console/console.cluster-parameters.service.js.map +7 -0
- package/dist/services/console/console.cluster.service.d.ts +114 -0
- package/dist/services/console/console.cluster.service.js +271 -0
- package/dist/services/console/console.cluster.service.js.map +7 -0
- package/dist/services/console/console.clusterBulkOperation.service.d.ts +20 -0
- package/dist/services/console/console.clusterBulkOperation.service.js +199 -0
- package/dist/services/console/console.clusterBulkOperation.service.js.map +7 -0
- package/dist/services/console/console.clusterplan.modification.service.d.ts +33 -0
- package/dist/services/console/console.clusterplan.modification.service.js +231 -0
- package/dist/services/console/console.clusterplan.modification.service.js.map +7 -0
- package/dist/services/console/console.clusterplan.service.d.ts +21 -0
- package/dist/services/console/console.clusterplan.service.js +64 -0
- package/dist/services/console/console.clusterplan.service.js.map +7 -0
- package/dist/services/console/console.connector-secrets.service.d.ts +30 -0
- package/dist/services/console/console.connector-secrets.service.js +125 -0
- package/dist/services/console/console.connector-secrets.service.js.map +7 -0
- package/dist/services/console/console.custommetrics.service.d.ts +10 -0
- package/dist/services/console/console.custommetrics.service.js +43 -0
- package/dist/services/console/console.custommetrics.service.js.map +7 -0
- package/dist/services/console/console.hotbackups.service.d.ts +34 -0
- package/dist/services/console/console.hotbackups.service.js +120 -0
- package/dist/services/console/console.hotbackups.service.js.map +7 -0
- package/dist/services/console/console.ip-whitelist.service.d.ts +15 -0
- package/dist/services/console/console.ip-whitelist.service.js +36 -0
- package/dist/services/console/console.ip-whitelist.service.js.map +7 -0
- package/dist/services/console/console.jobs.saas.service.d.ts +70 -0
- package/dist/services/console/console.jobs.saas.service.js +139 -0
- package/dist/services/console/console.jobs.saas.service.js.map +7 -0
- package/dist/services/console/console.jobs.sm.service.d.ts +57 -0
- package/dist/services/console/console.jobs.sm.service.js +208 -0
- package/dist/services/console/console.jobs.sm.service.js.map +7 -0
- package/dist/services/console/console.m2m.service.d.ts +23 -0
- package/dist/services/console/console.m2m.service.js +94 -0
- package/dist/services/console/console.m2m.service.js.map +7 -0
- package/dist/services/console/console.secure-connectivity.service.d.ts +41 -0
- package/dist/services/console/console.secure-connectivity.service.js +129 -0
- package/dist/services/console/console.secure-connectivity.service.js.map +7 -0
- package/dist/services/console/console.valuemetrics.service.d.ts +17 -0
- package/dist/services/console/console.valuemetrics.service.js +110 -0
- package/dist/services/console/console.valuemetrics.service.js.map +7 -0
- package/dist/services/console/generation.service.d.ts +21 -0
- package/dist/services/console/generation.service.js +106 -0
- package/dist/services/console/generation.service.js.map +7 -0
- package/dist/services/github/github.service.d.ts +73 -0
- package/dist/services/github/github.service.js +272 -0
- package/dist/services/github/github.service.js.map +7 -0
- package/dist/services/hibob/hibob.service.d.ts +74 -0
- package/dist/services/hibob/hibob.service.js +125 -0
- package/dist/services/hibob/hibob.service.js.map +7 -0
- package/dist/services/hubspot/hubspot.service.d.ts +50 -0
- package/dist/services/hubspot/hubspot.service.js +119 -0
- package/dist/services/hubspot/hubspot.service.js.map +7 -0
- package/dist/services/litellm/litellm.service.d.ts +290 -0
- package/dist/services/litellm/litellm.service.js +392 -0
- package/dist/services/litellm/litellm.service.js.map +7 -0
- package/dist/services/login/login.service.d.ts +15 -0
- package/dist/services/login/login.service.js +66 -0
- package/dist/services/login/login.service.js.map +7 -0
- package/dist/services/mixpanel/mixpanel.service.d.ts +16 -0
- package/dist/services/mixpanel/mixpanel.service.js +86 -0
- package/dist/services/mixpanel/mixpanel.service.js.map +7 -0
- package/dist/services/notifications/notifications.service.d.ts +7 -0
- package/dist/services/notifications/notifications.service.js +38 -0
- package/dist/services/notifications/notifications.service.js.map +7 -0
- package/dist/services/slack/slack-blockkit.service.d.ts +28 -0
- package/dist/services/slack/slack-blockkit.service.js +45 -0
- package/dist/services/slack/slack-blockkit.service.js.map +7 -0
- package/dist/services/slack/slack.service.d.ts +31 -0
- package/dist/services/slack/slack.service.js +118 -0
- package/dist/services/slack/slack.service.js.map +7 -0
- package/dist/services/telemetry/telemetry.service.d.ts +16 -0
- package/dist/services/telemetry/telemetry.service.js +85 -0
- package/dist/services/telemetry/telemetry.service.js.map +7 -0
- package/dist/services/token-issuer/token-issuer.jwks.service.d.ts +13 -0
- package/dist/services/token-issuer/token-issuer.jwks.service.js +76 -0
- package/dist/services/token-issuer/token-issuer.jwks.service.js.map +7 -0
- package/dist/services/wordpress/wordpress.service.d.ts +15 -0
- package/dist/services/wordpress/wordpress.service.js +111 -0
- package/dist/services/wordpress/wordpress.service.js.map +7 -0
- package/dist/types/general.types.d.ts +61 -0
- package/dist/types/general.types.js +1 -0
- package/dist/types/general.types.js.map +7 -0
- package/dist/utils/api.d.ts +31 -0
- package/dist/utils/api.js +400 -0
- package/dist/utils/api.js.map +7 -0
- package/dist/utils/cache.d.ts +7 -0
- package/dist/utils/cache.js +25 -0
- package/dist/utils/cache.js.map +7 -0
- package/dist/utils/ccma-metrics.d.ts +18 -0
- package/dist/utils/ccma-metrics.js +37 -0
- package/dist/utils/ccma-metrics.js.map +7 -0
- package/dist/utils/environments.d.ts +11 -0
- package/dist/utils/environments.js +148 -0
- package/dist/utils/environments.js.map +7 -0
- package/dist/utils/errors.d.ts +5 -0
- package/dist/utils/errors.js +11 -0
- package/dist/utils/errors.js.map +7 -0
- package/dist/utils/frontendCache.d.ts +26 -0
- package/dist/utils/frontendCache.js +121 -0
- package/dist/utils/frontendCache.js.map +7 -0
- package/dist/utils/token-issuer.utils.d.ts +8 -0
- package/dist/utils/token-issuer.utils.js +19 -0
- package/dist/utils/token-issuer.utils.js.map +7 -0
- package/package.json +57 -0
|
@@ -0,0 +1,400 @@
|
|
|
1
|
+
import { getEnvParam } from "./environments.js";
|
|
2
|
+
import { frontendCache } from "./frontendCache.js";
|
|
3
|
+
function sendMetrics(payload, type, options) {
|
|
4
|
+
if (payload.config.metrics) {
|
|
5
|
+
if (payload.config.metrics.types.includes(type)) {
|
|
6
|
+
let durationBucket;
|
|
7
|
+
if (options?.duration) {
|
|
8
|
+
if (options.duration < 100) {
|
|
9
|
+
durationBucket = "0 | <100ms";
|
|
10
|
+
} else if (options.duration < 200) {
|
|
11
|
+
durationBucket = "1 | <200ms";
|
|
12
|
+
} else if (options.duration < 500) {
|
|
13
|
+
durationBucket = "2 | <500ms";
|
|
14
|
+
} else if (options.duration < 1e3) {
|
|
15
|
+
durationBucket = "3 | <1s";
|
|
16
|
+
} else {
|
|
17
|
+
durationBucket = "4 | >=1s";
|
|
18
|
+
}
|
|
19
|
+
}
|
|
20
|
+
let error = "other";
|
|
21
|
+
if (options?.error) {
|
|
22
|
+
try {
|
|
23
|
+
const errorMessage = options.error;
|
|
24
|
+
if (errorMessage.startsWith("<!DOCTYPE html>")) {
|
|
25
|
+
error = "html-response";
|
|
26
|
+
} else if (errorMessage.includes("UND_ERR_CONNECT_TIMEOUT")) {
|
|
27
|
+
error = "connect-timeout";
|
|
28
|
+
}
|
|
29
|
+
} catch (_error) {
|
|
30
|
+
}
|
|
31
|
+
} else {
|
|
32
|
+
error = "unset";
|
|
33
|
+
}
|
|
34
|
+
const metrics = {
|
|
35
|
+
...payload.metricsDetails,
|
|
36
|
+
eventType: type,
|
|
37
|
+
durationBucket,
|
|
38
|
+
statusCode: options?.statusCode,
|
|
39
|
+
error
|
|
40
|
+
};
|
|
41
|
+
try {
|
|
42
|
+
payload.config.metrics.callback(metrics);
|
|
43
|
+
} catch (metricsCallbackError) {
|
|
44
|
+
log(payload, "debug", `Failed to send metrics`, {
|
|
45
|
+
error: metricsCallbackError,
|
|
46
|
+
metrics
|
|
47
|
+
});
|
|
48
|
+
}
|
|
49
|
+
}
|
|
50
|
+
}
|
|
51
|
+
}
|
|
52
|
+
function log(payload, type, message, additionalData) {
|
|
53
|
+
if (payload.config.logger) {
|
|
54
|
+
const messageParts = [];
|
|
55
|
+
messageParts.push(payload.metricsDetails?.method?.name);
|
|
56
|
+
messageParts.push(
|
|
57
|
+
`${payload.metricsDetails?.target?.name} (${payload.metricsDetails?.target?.type})`
|
|
58
|
+
);
|
|
59
|
+
messageParts.push(message);
|
|
60
|
+
let body;
|
|
61
|
+
if (payload.body) {
|
|
62
|
+
body = JSON.parse(JSON.stringify(payload.body));
|
|
63
|
+
for (const key of Object.keys(body)) {
|
|
64
|
+
if (key.toLowerCase().includes("password") || key.toLowerCase().includes("secret") || key.toLowerCase().includes("token")) {
|
|
65
|
+
body[key] = "********";
|
|
66
|
+
}
|
|
67
|
+
}
|
|
68
|
+
}
|
|
69
|
+
let fullUrl = "unset";
|
|
70
|
+
if (payload.base) {
|
|
71
|
+
try {
|
|
72
|
+
const base = getEnvParam(payload.base.id, payload.config);
|
|
73
|
+
fullUrl = base ? `${base}/${payload.url}` : payload.url;
|
|
74
|
+
} catch (_error) {
|
|
75
|
+
fullUrl = `failed to get base url for ${payload.base.id}`;
|
|
76
|
+
}
|
|
77
|
+
}
|
|
78
|
+
let url = `${payload.url}`.toLowerCase();
|
|
79
|
+
if (url.includes("secret") || url.includes("password")) {
|
|
80
|
+
url = url.split("?")[0];
|
|
81
|
+
}
|
|
82
|
+
const data = {
|
|
83
|
+
base: payload.base,
|
|
84
|
+
method: payload.method,
|
|
85
|
+
url,
|
|
86
|
+
fullUrl,
|
|
87
|
+
retry: payload.retry,
|
|
88
|
+
body,
|
|
89
|
+
context: payload.metricsDetails,
|
|
90
|
+
...additionalData
|
|
91
|
+
};
|
|
92
|
+
payload.config.logger[type](messageParts.join(" > "), { data });
|
|
93
|
+
}
|
|
94
|
+
}
|
|
95
|
+
function rateLimitWaitingTime(attempt) {
|
|
96
|
+
const noise = Math.random() * 100;
|
|
97
|
+
const waitingTime = 2 ** attempt * 1e3 + noise;
|
|
98
|
+
return Math.floor(waitingTime);
|
|
99
|
+
}
|
|
100
|
+
async function request(payload) {
|
|
101
|
+
log(payload, "debug", "starting request");
|
|
102
|
+
sendMetrics(payload, "request");
|
|
103
|
+
try {
|
|
104
|
+
if (payload.config.frontendCaching?.enabled) {
|
|
105
|
+
frontendCache.configure(payload.config.frontendCaching);
|
|
106
|
+
}
|
|
107
|
+
} catch (_cacheConfigError) {
|
|
108
|
+
}
|
|
109
|
+
let token;
|
|
110
|
+
if (payload.config.auth) {
|
|
111
|
+
token = await payload.config.auth.getToken();
|
|
112
|
+
}
|
|
113
|
+
const headers = payload.headers ?? {};
|
|
114
|
+
if (token) {
|
|
115
|
+
headers.Authorization = `Bearer ${token}`;
|
|
116
|
+
}
|
|
117
|
+
const type = payload.type ?? "json";
|
|
118
|
+
let body;
|
|
119
|
+
if (type) {
|
|
120
|
+
switch (type) {
|
|
121
|
+
case "json":
|
|
122
|
+
headers["Content-Type"] = "application/json";
|
|
123
|
+
body = payload.body ? JSON.stringify(payload.body) : void 0;
|
|
124
|
+
break;
|
|
125
|
+
case "text":
|
|
126
|
+
headers["Content-Type"] = "text/plain";
|
|
127
|
+
body = payload.body ? JSON.stringify(payload.body) : void 0;
|
|
128
|
+
break;
|
|
129
|
+
case "form":
|
|
130
|
+
if (payload.body) {
|
|
131
|
+
const formData = new URLSearchParams();
|
|
132
|
+
Object.keys(payload.body).forEach((key) => {
|
|
133
|
+
formData.append(key, payload.body[key]);
|
|
134
|
+
});
|
|
135
|
+
body = formData;
|
|
136
|
+
}
|
|
137
|
+
break;
|
|
138
|
+
}
|
|
139
|
+
}
|
|
140
|
+
let base;
|
|
141
|
+
if (payload.base) {
|
|
142
|
+
try {
|
|
143
|
+
base = getEnvParam(payload.base.id, payload.config);
|
|
144
|
+
} catch (error) {
|
|
145
|
+
log(payload, "error", `Failed to get base url for ${payload.base.id}`, {
|
|
146
|
+
error
|
|
147
|
+
});
|
|
148
|
+
throw error;
|
|
149
|
+
}
|
|
150
|
+
}
|
|
151
|
+
const url = base ? `${base}/${payload.url}` : payload.url;
|
|
152
|
+
let serveCachedAndReturnAfterNetwork = false;
|
|
153
|
+
if (payload.method === "get" && payload.config.frontendCaching?.enabled) {
|
|
154
|
+
try {
|
|
155
|
+
const cached = await frontendCache.get("get", url);
|
|
156
|
+
if (cached) {
|
|
157
|
+
const fresh = frontendCache.isFresh(cached);
|
|
158
|
+
if (payload.onCachedResponse) {
|
|
159
|
+
payload.onCachedResponse(cached.payload, { fresh, source: "cache" });
|
|
160
|
+
if (!fresh) {
|
|
161
|
+
log(payload, "debug", "cache stale, refreshing in background");
|
|
162
|
+
serveCachedAndReturnAfterNetwork = true;
|
|
163
|
+
} else {
|
|
164
|
+
log(payload, "debug", "cache fresh, returning early");
|
|
165
|
+
sendMetrics(payload, "success", { duration: 0, statusCode: "200" });
|
|
166
|
+
return {
|
|
167
|
+
// eslint-disable-next-line id-length
|
|
168
|
+
ok: true,
|
|
169
|
+
status: 200,
|
|
170
|
+
statusText: "cached",
|
|
171
|
+
body: cached.payload,
|
|
172
|
+
meta: { duration: 0 }
|
|
173
|
+
};
|
|
174
|
+
}
|
|
175
|
+
} else if (fresh) {
|
|
176
|
+
log(payload, "debug", "cache hit, returning cached response");
|
|
177
|
+
sendMetrics(payload, "success", { duration: 0, statusCode: "200" });
|
|
178
|
+
return {
|
|
179
|
+
// eslint-disable-next-line id-length
|
|
180
|
+
ok: true,
|
|
181
|
+
status: 200,
|
|
182
|
+
statusText: "cached",
|
|
183
|
+
body: cached.payload,
|
|
184
|
+
meta: { duration: 0 }
|
|
185
|
+
};
|
|
186
|
+
} else {
|
|
187
|
+
log(payload, "debug", "cache stale, proceeding with network request");
|
|
188
|
+
}
|
|
189
|
+
}
|
|
190
|
+
} catch (_cacheGetError) {
|
|
191
|
+
}
|
|
192
|
+
}
|
|
193
|
+
const start = performance.now();
|
|
194
|
+
const proxyAgent = payload.config.proxyAgent ?? {};
|
|
195
|
+
try {
|
|
196
|
+
const fetchResponse = await fetch(url, {
|
|
197
|
+
signal: payload.config.timeout ? AbortSignal.timeout(payload.config.timeout) : void 0,
|
|
198
|
+
method: payload.method.toUpperCase(),
|
|
199
|
+
headers,
|
|
200
|
+
body,
|
|
201
|
+
...proxyAgent
|
|
202
|
+
});
|
|
203
|
+
const end = performance.now();
|
|
204
|
+
const duration = end - start;
|
|
205
|
+
if ([429].includes(fetchResponse.status)) {
|
|
206
|
+
log(payload, "info", "rate limited");
|
|
207
|
+
sendMetrics(payload, "rate-limit-retry", {
|
|
208
|
+
duration,
|
|
209
|
+
statusCode: String(fetchResponse.status)
|
|
210
|
+
});
|
|
211
|
+
const remaining = payload.retry?.remaining ?? 8;
|
|
212
|
+
const attempts = payload.retry?.attempts ?? 1;
|
|
213
|
+
if (remaining > 0) {
|
|
214
|
+
let waitingTime = rateLimitWaitingTime(attempts);
|
|
215
|
+
if (fetchResponse.headers.has("x-ratelimit-reset")) {
|
|
216
|
+
const rateLimitHeader = fetchResponse.headers.get("x-ratelimit-reset");
|
|
217
|
+
log(
|
|
218
|
+
payload,
|
|
219
|
+
"debug",
|
|
220
|
+
`rate limited, found x-ratelimit-reset header: ${rateLimitHeader}`
|
|
221
|
+
);
|
|
222
|
+
const rateLimitHeaderNumber = Number(rateLimitHeader);
|
|
223
|
+
if (Number.isNaN(rateLimitHeaderNumber)) {
|
|
224
|
+
waitingTime = Date.parse(rateLimitHeader ?? "0") - Date.now();
|
|
225
|
+
} else {
|
|
226
|
+
waitingTime = rateLimitHeaderNumber - Date.now();
|
|
227
|
+
}
|
|
228
|
+
}
|
|
229
|
+
if (waitingTime < 0 || waitingTime > 18e4) {
|
|
230
|
+
waitingTime = rateLimitWaitingTime(attempts);
|
|
231
|
+
}
|
|
232
|
+
log(
|
|
233
|
+
payload,
|
|
234
|
+
"debug",
|
|
235
|
+
`rate limited, attempt ${attempts}, remaining ${remaining}, waiting ${waitingTime}ms`
|
|
236
|
+
);
|
|
237
|
+
await new Promise((resolve) => {
|
|
238
|
+
setTimeout(resolve, waitingTime);
|
|
239
|
+
});
|
|
240
|
+
payload.retry = {
|
|
241
|
+
attempts: attempts + 1,
|
|
242
|
+
remaining: remaining - 1
|
|
243
|
+
};
|
|
244
|
+
return request(payload);
|
|
245
|
+
}
|
|
246
|
+
log(payload, "debug", `rate limited, no more retries`);
|
|
247
|
+
}
|
|
248
|
+
const response = {
|
|
249
|
+
// eslint-disable-next-line id-length
|
|
250
|
+
ok: fetchResponse.ok,
|
|
251
|
+
status: fetchResponse.status,
|
|
252
|
+
statusText: fetchResponse.statusText,
|
|
253
|
+
meta: {
|
|
254
|
+
duration
|
|
255
|
+
}
|
|
256
|
+
};
|
|
257
|
+
const responseType = payload.responseType ?? type;
|
|
258
|
+
if (response.ok) {
|
|
259
|
+
log(payload, "debug", `request successful in ${Math.floor(duration)}ms`, {
|
|
260
|
+
baseUrl: base
|
|
261
|
+
});
|
|
262
|
+
sendMetrics(payload, "success", {
|
|
263
|
+
duration,
|
|
264
|
+
statusCode: String(fetchResponse.status)
|
|
265
|
+
});
|
|
266
|
+
switch (responseType) {
|
|
267
|
+
case "json":
|
|
268
|
+
try {
|
|
269
|
+
response.body = await fetchResponse.json();
|
|
270
|
+
} catch (_error) {
|
|
271
|
+
log(
|
|
272
|
+
payload,
|
|
273
|
+
"debug",
|
|
274
|
+
`Failed to parse json body. Returning empty object.`,
|
|
275
|
+
{
|
|
276
|
+
baseUrl: base
|
|
277
|
+
}
|
|
278
|
+
);
|
|
279
|
+
response.body = {};
|
|
280
|
+
try {
|
|
281
|
+
const responseBodyText = await fetchResponse.text();
|
|
282
|
+
log(payload, "debug", `Response body text`, {
|
|
283
|
+
baseUrl: base,
|
|
284
|
+
responseBodyText,
|
|
285
|
+
status: fetchResponse.status
|
|
286
|
+
});
|
|
287
|
+
} catch (textError) {
|
|
288
|
+
log(payload, "debug", `Failed to parse response body text.`, {
|
|
289
|
+
baseUrl: base,
|
|
290
|
+
status: fetchResponse.status,
|
|
291
|
+
error: textError
|
|
292
|
+
});
|
|
293
|
+
}
|
|
294
|
+
}
|
|
295
|
+
break;
|
|
296
|
+
case "text":
|
|
297
|
+
response.body = await fetchResponse.text();
|
|
298
|
+
break;
|
|
299
|
+
default:
|
|
300
|
+
response.body = await fetchResponse.text();
|
|
301
|
+
}
|
|
302
|
+
if (payload.method === "get" && payload.config.frontendCaching?.enabled && response.body !== void 0) {
|
|
303
|
+
try {
|
|
304
|
+
await frontendCache.set("get", url, response.body);
|
|
305
|
+
log(payload, "debug", "cache store successful");
|
|
306
|
+
} catch (_cacheSetError) {
|
|
307
|
+
}
|
|
308
|
+
}
|
|
309
|
+
} else {
|
|
310
|
+
let statusText = fetchResponse.statusText;
|
|
311
|
+
try {
|
|
312
|
+
statusText = await fetchResponse.text();
|
|
313
|
+
} catch (_error) {
|
|
314
|
+
}
|
|
315
|
+
response.statusText = statusText;
|
|
316
|
+
log(
|
|
317
|
+
payload,
|
|
318
|
+
"debug",
|
|
319
|
+
`request failed with status ${response.status}: ${statusText}`,
|
|
320
|
+
{
|
|
321
|
+
baseUrl: base
|
|
322
|
+
}
|
|
323
|
+
);
|
|
324
|
+
let type2 = "error";
|
|
325
|
+
const noErrorStatusCodes = [];
|
|
326
|
+
switch (payload.metricsDetails.target.name) {
|
|
327
|
+
case "auth0":
|
|
328
|
+
noErrorStatusCodes.push(...[400, 404, 409]);
|
|
329
|
+
break;
|
|
330
|
+
case "accounts":
|
|
331
|
+
case "console":
|
|
332
|
+
noErrorStatusCodes.push(...[404, 409]);
|
|
333
|
+
if (payload.metricsDetails.method.name === "createTemporaryCluster") {
|
|
334
|
+
noErrorStatusCodes.push(...[400, 403, 412]);
|
|
335
|
+
}
|
|
336
|
+
if ([
|
|
337
|
+
"ConsoleM2MService.verifyZeebeClient",
|
|
338
|
+
"ConsoleM2MService.verifyApiClient"
|
|
339
|
+
].includes(payload.metricsDetails.method.name)) {
|
|
340
|
+
noErrorStatusCodes.push(...[401]);
|
|
341
|
+
}
|
|
342
|
+
if (payload.metricsDetails.method.name === "OrgsService.createAndReturnSocialLoginUser") {
|
|
343
|
+
noErrorStatusCodes.push(
|
|
344
|
+
...[
|
|
345
|
+
// onboard user, user already has an org
|
|
346
|
+
400,
|
|
347
|
+
// existing extSSO-connection
|
|
348
|
+
412
|
|
349
|
+
]
|
|
350
|
+
);
|
|
351
|
+
}
|
|
352
|
+
break;
|
|
353
|
+
}
|
|
354
|
+
if (noErrorStatusCodes.includes(response.status)) {
|
|
355
|
+
type2 = "success";
|
|
356
|
+
}
|
|
357
|
+
sendMetrics(payload, type2, {
|
|
358
|
+
duration,
|
|
359
|
+
statusCode: String(fetchResponse.status),
|
|
360
|
+
error: statusText
|
|
361
|
+
});
|
|
362
|
+
}
|
|
363
|
+
if (serveCachedAndReturnAfterNetwork && response.ok) {
|
|
364
|
+
log(payload, "debug", "stale cache updated, returning new data");
|
|
365
|
+
}
|
|
366
|
+
return response;
|
|
367
|
+
} catch (error) {
|
|
368
|
+
log(payload, "error", `request failed with no status`, {
|
|
369
|
+
baseUrl: base,
|
|
370
|
+
error
|
|
371
|
+
});
|
|
372
|
+
const duration = performance.now() - start;
|
|
373
|
+
let errorMessage;
|
|
374
|
+
if (error?.cause?.code) {
|
|
375
|
+
errorMessage = error?.cause?.code;
|
|
376
|
+
} else if (error?.message) {
|
|
377
|
+
errorMessage = error?.message;
|
|
378
|
+
}
|
|
379
|
+
sendMetrics(payload, "error", {
|
|
380
|
+
statusCode: "fetch-error",
|
|
381
|
+
duration,
|
|
382
|
+
error: errorMessage
|
|
383
|
+
});
|
|
384
|
+
const response = {
|
|
385
|
+
// eslint-disable-next-line id-length
|
|
386
|
+
ok: false,
|
|
387
|
+
status: 500,
|
|
388
|
+
statusText: "fetch error",
|
|
389
|
+
meta: {
|
|
390
|
+
duration
|
|
391
|
+
}
|
|
392
|
+
};
|
|
393
|
+
return response;
|
|
394
|
+
}
|
|
395
|
+
}
|
|
396
|
+
export {
|
|
397
|
+
log,
|
|
398
|
+
request
|
|
399
|
+
};
|
|
400
|
+
//# sourceMappingURL=api.js.map
|
|
@@ -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,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;
|