@camunda/ccma-api 0.0.2 → 0.0.4
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 +95 -0
- package/dist/index.js +151 -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 +282 -0
- package/dist/services/accounts/orgs.service.js +1012 -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/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 +329 -0
- package/dist/services/console/console.admin.service.js +1527 -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.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 +30 -0
- package/dist/services/console/generation.service.js +166 -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 +2 -6
|
@@ -0,0 +1,7 @@
|
|
|
1
|
+
import type { NotificationOptions } from '@camunda/ccma-shared-types';
|
|
2
|
+
import type { RequestBaseParams } from '../../types/general.types.js';
|
|
3
|
+
export declare class NotificationsService {
|
|
4
|
+
static sendNotification(params: {
|
|
5
|
+
notification: NotificationOptions;
|
|
6
|
+
} & RequestBaseParams): Promise<void>;
|
|
7
|
+
}
|
|
@@ -0,0 +1,38 @@
|
|
|
1
|
+
import { request } from "../../utils/api.js";
|
|
2
|
+
import { HttpError } from "../../utils/errors.js";
|
|
3
|
+
class NotificationsService {
|
|
4
|
+
static async sendNotification(params) {
|
|
5
|
+
const serviceContext = {
|
|
6
|
+
method: {
|
|
7
|
+
name: `NotificationsService.sendNotification`,
|
|
8
|
+
url: `notifications/${params.notification.type}`,
|
|
9
|
+
normalizedUrl: `notifications/:type`,
|
|
10
|
+
type: "post"
|
|
11
|
+
},
|
|
12
|
+
source: params.config.metrics?.source || "unset",
|
|
13
|
+
target: {
|
|
14
|
+
name: "notifications",
|
|
15
|
+
type: "internal"
|
|
16
|
+
}
|
|
17
|
+
};
|
|
18
|
+
const response = await request({
|
|
19
|
+
config: params.config,
|
|
20
|
+
base: { id: "notifications" },
|
|
21
|
+
url: serviceContext.method.url,
|
|
22
|
+
method: serviceContext.method.type,
|
|
23
|
+
metricsDetails: serviceContext,
|
|
24
|
+
body: { notification: params.notification }
|
|
25
|
+
});
|
|
26
|
+
if (!response.ok) {
|
|
27
|
+
throw new HttpError(
|
|
28
|
+
`${serviceContext.method.name}: ${response.status} ${response.statusText}`,
|
|
29
|
+
response.status,
|
|
30
|
+
response.statusText
|
|
31
|
+
);
|
|
32
|
+
}
|
|
33
|
+
}
|
|
34
|
+
}
|
|
35
|
+
export {
|
|
36
|
+
NotificationsService
|
|
37
|
+
};
|
|
38
|
+
//# sourceMappingURL=notifications.service.js.map
|
|
@@ -0,0 +1,7 @@
|
|
|
1
|
+
{
|
|
2
|
+
"version": 3,
|
|
3
|
+
"sources": ["../../../src/services/notifications/notifications.service.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 { NotificationOptions } from '@camunda/ccma-shared-types'\nimport type {\n RequestBaseParams,\n RequestBaseServiceContext,\n} from '../../types/general.types.js'\nimport { request } from '../../utils/api.js'\nimport { HttpError } from '../../utils/errors.js'\n\nexport class NotificationsService {\n public static async sendNotification(\n params: { notification: NotificationOptions } & RequestBaseParams,\n ) {\n const serviceContext: RequestBaseServiceContext = {\n method: {\n name: `NotificationsService.sendNotification`,\n url: `notifications/${params.notification.type}`,\n normalizedUrl: `notifications/:type`,\n type: 'post',\n },\n source: params.config.metrics?.source || 'unset',\n target: {\n name: 'notifications',\n type: 'internal',\n },\n }\n\n const response = await request({\n config: params.config,\n base: { id: 'notifications' },\n url: serviceContext.method.url,\n method: serviceContext.method.type,\n metricsDetails: serviceContext,\n body: { notification: params.notification },\n })\n if (!response.ok) {\n throw new HttpError(\n `${serviceContext.method.name}: ${response.status} ${response.statusText}`,\n response.status,\n response.statusText,\n )\n }\n }\n}\n"],
|
|
5
|
+
"mappings": "AAWA,SAAS,eAAe;AACxB,SAAS,iBAAiB;AAEnB,MAAM,qBAAqB;AAAA,EAChC,aAAoB,iBAClB,QACA;AACA,UAAM,iBAA4C;AAAA,MAChD,QAAQ;AAAA,QACN,MAAM;AAAA,QACN,KAAK,iBAAiB,OAAO,aAAa,IAAI;AAAA,QAC9C,eAAe;AAAA,QACf,MAAM;AAAA,MACR;AAAA,MACA,QAAQ,OAAO,OAAO,SAAS,UAAU;AAAA,MACzC,QAAQ;AAAA,QACN,MAAM;AAAA,QACN,MAAM;AAAA,MACR;AAAA,IACF;AAEA,UAAM,WAAW,MAAM,QAAQ;AAAA,MAC7B,QAAQ,OAAO;AAAA,MACf,MAAM,EAAE,IAAI,gBAAgB;AAAA,MAC5B,KAAK,eAAe,OAAO;AAAA,MAC3B,QAAQ,eAAe,OAAO;AAAA,MAC9B,gBAAgB;AAAA,MAChB,MAAM,EAAE,cAAc,OAAO,aAAa;AAAA,IAC5C,CAAC;AACD,QAAI,CAAC,SAAS,IAAI;AAChB,YAAM,IAAI;AAAA,QACR,GAAG,eAAe,OAAO,IAAI,KAAK,SAAS,MAAM,IAAI,SAAS,UAAU;AAAA,QACxE,SAAS;AAAA,QACT,SAAS;AAAA,MACX;AAAA,IACF;AAAA,EACF;AACF;",
|
|
6
|
+
"names": []
|
|
7
|
+
}
|
|
@@ -0,0 +1,28 @@
|
|
|
1
|
+
import type { RequestBaseParams } from '../../types/general.types.js';
|
|
2
|
+
export interface SlackBlock {
|
|
3
|
+
type: string;
|
|
4
|
+
[key: string]: any;
|
|
5
|
+
}
|
|
6
|
+
export interface SendBlockKitMessageParams extends RequestBaseParams {
|
|
7
|
+
webhookUrl: string;
|
|
8
|
+
blocks: SlackBlock[];
|
|
9
|
+
}
|
|
10
|
+
export interface SendBlockKitMessageResponse {
|
|
11
|
+
ok: boolean;
|
|
12
|
+
status: number;
|
|
13
|
+
statusText: string;
|
|
14
|
+
}
|
|
15
|
+
/**
|
|
16
|
+
* Service for sending Slack Block Kit messages with full block structure support.
|
|
17
|
+
* Unlike SlackService which only supports simple sections, this service accepts
|
|
18
|
+
* complete Block Kit JSON including buttons and other interactive elements.
|
|
19
|
+
*/
|
|
20
|
+
export declare class SlackBlockKitService {
|
|
21
|
+
/**
|
|
22
|
+
* Send a Block Kit message to a Slack webhook URL.
|
|
23
|
+
*
|
|
24
|
+
* @param params - Parameters including webhook URL, blocks array, and config
|
|
25
|
+
* @returns Response object with ok, status, and statusText
|
|
26
|
+
*/
|
|
27
|
+
static sendBlockKitMessage(params: SendBlockKitMessageParams): Promise<SendBlockKitMessageResponse>;
|
|
28
|
+
}
|
|
@@ -0,0 +1,45 @@
|
|
|
1
|
+
import { request } from "../../utils/api.js";
|
|
2
|
+
class SlackBlockKitService {
|
|
3
|
+
/**
|
|
4
|
+
* Send a Block Kit message to a Slack webhook URL.
|
|
5
|
+
*
|
|
6
|
+
* @param params - Parameters including webhook URL, blocks array, and config
|
|
7
|
+
* @returns Response object with ok, status, and statusText
|
|
8
|
+
*/
|
|
9
|
+
static async sendBlockKitMessage(params) {
|
|
10
|
+
const serviceContext = {
|
|
11
|
+
method: {
|
|
12
|
+
name: "SlackBlockKitService.sendBlockKitMessage",
|
|
13
|
+
url: params.webhookUrl,
|
|
14
|
+
normalizedUrl: "https://hooks.slack.com/services/:webhookId",
|
|
15
|
+
type: "post"
|
|
16
|
+
},
|
|
17
|
+
source: params.config.metrics?.source || "unset",
|
|
18
|
+
target: {
|
|
19
|
+
name: "slack",
|
|
20
|
+
type: "external"
|
|
21
|
+
}
|
|
22
|
+
};
|
|
23
|
+
const body = {
|
|
24
|
+
blocks: params.blocks
|
|
25
|
+
};
|
|
26
|
+
const response = await request({
|
|
27
|
+
config: params.config,
|
|
28
|
+
url: serviceContext.method.url,
|
|
29
|
+
method: serviceContext.method.type,
|
|
30
|
+
metricsDetails: serviceContext,
|
|
31
|
+
body,
|
|
32
|
+
type: "json",
|
|
33
|
+
responseType: "none"
|
|
34
|
+
});
|
|
35
|
+
return {
|
|
36
|
+
ok: response.ok,
|
|
37
|
+
status: response.status,
|
|
38
|
+
statusText: response.statusText || ""
|
|
39
|
+
};
|
|
40
|
+
}
|
|
41
|
+
}
|
|
42
|
+
export {
|
|
43
|
+
SlackBlockKitService
|
|
44
|
+
};
|
|
45
|
+
//# sourceMappingURL=slack-blockkit.service.js.map
|
|
@@ -0,0 +1,7 @@
|
|
|
1
|
+
{
|
|
2
|
+
"version": 3,
|
|
3
|
+
"sources": ["../../../src/services/slack/slack-blockkit.service.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 { request } from '../../utils/api.js'\n\n// Slack Block Kit block types\n// https://api.slack.com/reference/block-kit/blocks\nexport interface SlackBlock {\n type: string\n [key: string]: any\n}\n\nexport interface SendBlockKitMessageParams extends RequestBaseParams {\n webhookUrl: string\n blocks: SlackBlock[]\n}\n\nexport interface SendBlockKitMessageResponse {\n ok: boolean\n status: number\n statusText: string\n}\n\n/**\n * Service for sending Slack Block Kit messages with full block structure support.\n * Unlike SlackService which only supports simple sections, this service accepts\n * complete Block Kit JSON including buttons and other interactive elements.\n */\nexport class SlackBlockKitService {\n /**\n * Send a Block Kit message to a Slack webhook URL.\n *\n * @param params - Parameters including webhook URL, blocks array, and config\n * @returns Response object with ok, status, and statusText\n */\n public static async sendBlockKitMessage(\n params: SendBlockKitMessageParams,\n ): Promise<SendBlockKitMessageResponse> {\n const serviceContext: RequestBaseServiceContext = {\n method: {\n name: 'SlackBlockKitService.sendBlockKitMessage',\n url: params.webhookUrl,\n normalizedUrl: 'https://hooks.slack.com/services/:webhookId',\n type: 'post',\n },\n source: params.config.metrics?.source || 'unset',\n target: {\n name: 'slack',\n type: 'external',\n },\n }\n\n const body = {\n blocks: params.blocks,\n }\n\n const response = await request<void>({\n config: params.config,\n url: serviceContext.method.url,\n method: serviceContext.method.type,\n metricsDetails: serviceContext,\n body,\n type: 'json',\n responseType: 'none',\n })\n\n return {\n ok: response.ok,\n status: response.status,\n statusText: response.statusText || '',\n }\n }\n}\n"],
|
|
5
|
+
"mappings": "AAUA,SAAS,eAAe;AAyBjB,MAAM,qBAAqB;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,EAOhC,aAAoB,oBAClB,QACsC;AACtC,UAAM,iBAA4C;AAAA,MAChD,QAAQ;AAAA,QACN,MAAM;AAAA,QACN,KAAK,OAAO;AAAA,QACZ,eAAe;AAAA,QACf,MAAM;AAAA,MACR;AAAA,MACA,QAAQ,OAAO,OAAO,SAAS,UAAU;AAAA,MACzC,QAAQ;AAAA,QACN,MAAM;AAAA,QACN,MAAM;AAAA,MACR;AAAA,IACF;AAEA,UAAM,OAAO;AAAA,MACX,QAAQ,OAAO;AAAA,IACjB;AAEA,UAAM,WAAW,MAAM,QAAc;AAAA,MACnC,QAAQ,OAAO;AAAA,MACf,KAAK,eAAe,OAAO;AAAA,MAC3B,QAAQ,eAAe,OAAO;AAAA,MAC9B,gBAAgB;AAAA,MAChB;AAAA,MACA,MAAM;AAAA,MACN,cAAc;AAAA,IAChB,CAAC;AAED,WAAO;AAAA,MACL,IAAI,SAAS;AAAA,MACb,QAAQ,SAAS;AAAA,MACjB,YAAY,SAAS,cAAc;AAAA,IACrC;AAAA,EACF;AACF;",
|
|
6
|
+
"names": []
|
|
7
|
+
}
|
|
@@ -0,0 +1,31 @@
|
|
|
1
|
+
import type { RequestBaseParams } from '../../types/general.types.js';
|
|
2
|
+
interface Section {
|
|
3
|
+
type: 'section' | 'divider' | 'context' | 'header';
|
|
4
|
+
text: string;
|
|
5
|
+
}
|
|
6
|
+
export interface IncomingWebhookData {
|
|
7
|
+
url: string;
|
|
8
|
+
sections: Section[];
|
|
9
|
+
}
|
|
10
|
+
export interface IncomingWebhookRequest extends RequestBaseParams {
|
|
11
|
+
options: IncomingWebhookData;
|
|
12
|
+
}
|
|
13
|
+
export interface SlackLookupUserByEmailParams extends RequestBaseParams {
|
|
14
|
+
params: {
|
|
15
|
+
email: string;
|
|
16
|
+
};
|
|
17
|
+
}
|
|
18
|
+
export interface SlackLookupUserByEmailResponse {
|
|
19
|
+
userId: string;
|
|
20
|
+
}
|
|
21
|
+
export declare class SlackService {
|
|
22
|
+
static incomingWebhook(params: IncomingWebhookRequest): Promise<any>;
|
|
23
|
+
/**
|
|
24
|
+
* Looks up a Slack user by their email address.
|
|
25
|
+
* Requires the config to provide a Slack Bot Token via config.auth.getToken().
|
|
26
|
+
*
|
|
27
|
+
* @returns The Slack user ID, or undefined if not found.
|
|
28
|
+
*/
|
|
29
|
+
static lookupUserByEmail(params: SlackLookupUserByEmailParams): Promise<SlackLookupUserByEmailResponse | undefined>;
|
|
30
|
+
}
|
|
31
|
+
export {};
|
|
@@ -0,0 +1,118 @@
|
|
|
1
|
+
import { request } from "../../utils/api.js";
|
|
2
|
+
const MAX_BLOCKS_PER_MESSAGE = 50;
|
|
3
|
+
const SLACK_API_BASE_URL = "https://slack.com/api";
|
|
4
|
+
class SlackService {
|
|
5
|
+
static async incomingWebhook(params) {
|
|
6
|
+
const serviceContext = {
|
|
7
|
+
method: {
|
|
8
|
+
name: `SlackService.incomingWebhook`,
|
|
9
|
+
url: params.options.url,
|
|
10
|
+
normalizedUrl: `https://hooks.slack.com/services/:webhookId`,
|
|
11
|
+
type: "post"
|
|
12
|
+
},
|
|
13
|
+
source: params.config.metrics?.source || "unset",
|
|
14
|
+
target: {
|
|
15
|
+
name: "slack",
|
|
16
|
+
type: "external"
|
|
17
|
+
}
|
|
18
|
+
};
|
|
19
|
+
const blocks = params.options.sections.map((section) => {
|
|
20
|
+
let text;
|
|
21
|
+
let elements;
|
|
22
|
+
switch (section.type) {
|
|
23
|
+
case "section":
|
|
24
|
+
text = {
|
|
25
|
+
type: "mrkdwn",
|
|
26
|
+
text: section.text
|
|
27
|
+
};
|
|
28
|
+
break;
|
|
29
|
+
case "context":
|
|
30
|
+
elements = [
|
|
31
|
+
{
|
|
32
|
+
type: "mrkdwn",
|
|
33
|
+
text: section.text
|
|
34
|
+
}
|
|
35
|
+
];
|
|
36
|
+
break;
|
|
37
|
+
case "header":
|
|
38
|
+
text = {
|
|
39
|
+
type: "plain_text",
|
|
40
|
+
text: section.text,
|
|
41
|
+
emoji: true
|
|
42
|
+
};
|
|
43
|
+
break;
|
|
44
|
+
}
|
|
45
|
+
return {
|
|
46
|
+
type: section.type,
|
|
47
|
+
text,
|
|
48
|
+
elements
|
|
49
|
+
};
|
|
50
|
+
});
|
|
51
|
+
const bodies = [];
|
|
52
|
+
if (blocks.length > MAX_BLOCKS_PER_MESSAGE) {
|
|
53
|
+
const blocksCopy = [...blocks];
|
|
54
|
+
while (blocksCopy.length > 0) {
|
|
55
|
+
bodies.push({
|
|
56
|
+
blocks: blocksCopy.splice(0, MAX_BLOCKS_PER_MESSAGE)
|
|
57
|
+
});
|
|
58
|
+
}
|
|
59
|
+
} else {
|
|
60
|
+
bodies.push({
|
|
61
|
+
blocks
|
|
62
|
+
});
|
|
63
|
+
}
|
|
64
|
+
for (let index = 0; index < bodies.length; index++) {
|
|
65
|
+
await request({
|
|
66
|
+
config: params.config,
|
|
67
|
+
url: serviceContext.method.url,
|
|
68
|
+
method: serviceContext.method.type,
|
|
69
|
+
metricsDetails: serviceContext,
|
|
70
|
+
body: bodies[index],
|
|
71
|
+
type: "json",
|
|
72
|
+
responseType: "none"
|
|
73
|
+
});
|
|
74
|
+
if (index < bodies.length - 1) {
|
|
75
|
+
await new Promise((resolve) => {
|
|
76
|
+
setTimeout(resolve, 1e3);
|
|
77
|
+
});
|
|
78
|
+
}
|
|
79
|
+
}
|
|
80
|
+
}
|
|
81
|
+
/**
|
|
82
|
+
* Looks up a Slack user by their email address.
|
|
83
|
+
* Requires the config to provide a Slack Bot Token via config.auth.getToken().
|
|
84
|
+
*
|
|
85
|
+
* @returns The Slack user ID, or undefined if not found.
|
|
86
|
+
*/
|
|
87
|
+
static async lookupUserByEmail(params) {
|
|
88
|
+
const url = `${SLACK_API_BASE_URL}/users.lookupByEmail?email=${encodeURIComponent(params.params.email)}`;
|
|
89
|
+
const serviceContext = {
|
|
90
|
+
method: {
|
|
91
|
+
name: "SlackService.lookupUserByEmail",
|
|
92
|
+
url,
|
|
93
|
+
normalizedUrl: `${SLACK_API_BASE_URL}/users.lookupByEmail`,
|
|
94
|
+
type: "get"
|
|
95
|
+
},
|
|
96
|
+
source: params.config.metrics?.source || "unset",
|
|
97
|
+
target: {
|
|
98
|
+
name: "slack",
|
|
99
|
+
type: "external"
|
|
100
|
+
}
|
|
101
|
+
};
|
|
102
|
+
const response = await request({
|
|
103
|
+
config: params.config,
|
|
104
|
+
url,
|
|
105
|
+
method: serviceContext.method.type,
|
|
106
|
+
metricsDetails: serviceContext,
|
|
107
|
+
responseType: "json"
|
|
108
|
+
});
|
|
109
|
+
if (!response.ok || !response.body?.ok || !response.body?.user?.id) {
|
|
110
|
+
return void 0;
|
|
111
|
+
}
|
|
112
|
+
return { userId: response.body.user.id };
|
|
113
|
+
}
|
|
114
|
+
}
|
|
115
|
+
export {
|
|
116
|
+
SlackService
|
|
117
|
+
};
|
|
118
|
+
//# sourceMappingURL=slack.service.js.map
|
|
@@ -0,0 +1,7 @@
|
|
|
1
|
+
{
|
|
2
|
+
"version": 3,
|
|
3
|
+
"sources": ["../../../src/services/slack/slack.service.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 { request } from '../../utils/api.js'\n\n// https://api.slack.com/reference/block-kit/blocks\nconst MAX_BLOCKS_PER_MESSAGE = 50\n\nconst SLACK_API_BASE_URL = 'https://slack.com/api'\n\ninterface Section {\n type: 'section' | 'divider' | 'context' | 'header'\n text: string\n}\n\nexport interface IncomingWebhookData {\n url: string\n sections: Section[]\n}\n\nexport interface IncomingWebhookRequest extends RequestBaseParams {\n options: IncomingWebhookData\n}\n\nexport interface SlackLookupUserByEmailParams extends RequestBaseParams {\n params: {\n email: string\n }\n}\n\nexport interface SlackLookupUserByEmailResponse {\n userId: string\n}\n\nexport class SlackService {\n public static async incomingWebhook(\n params: IncomingWebhookRequest,\n ): Promise<any> {\n const serviceContext: RequestBaseServiceContext = {\n method: {\n name: `SlackService.incomingWebhook`,\n url: params.options.url,\n normalizedUrl: `https://hooks.slack.com/services/:webhookId`,\n type: 'post',\n },\n source: params.config.metrics?.source || 'unset',\n target: {\n name: 'slack',\n type: 'external',\n },\n }\n\n const blocks = params.options.sections.map((section) => {\n let text\n let elements\n switch (section.type) {\n case 'section':\n text = {\n type: 'mrkdwn',\n text: section.text,\n }\n break\n case 'context':\n elements = [\n {\n type: 'mrkdwn',\n text: section.text,\n },\n ]\n break\n case 'header':\n text = {\n type: 'plain_text',\n text: section.text,\n emoji: true,\n }\n break\n }\n\n return {\n type: section.type,\n text,\n elements,\n }\n })\n\n const bodies: Array<{ blocks: any[] }> = []\n\n if (blocks.length > MAX_BLOCKS_PER_MESSAGE) {\n const blocksCopy = [...blocks]\n while (blocksCopy.length > 0) {\n bodies.push({\n blocks: blocksCopy.splice(0, MAX_BLOCKS_PER_MESSAGE),\n })\n }\n } else {\n bodies.push({\n blocks,\n })\n }\n\n for (let index = 0; index < bodies.length; index++) {\n // eslint-disable-next-line no-await-in-loop\n await request<void>({\n config: params.config,\n url: serviceContext.method.url,\n method: serviceContext.method.type,\n metricsDetails: serviceContext,\n body: bodies[index],\n type: 'json',\n responseType: 'none',\n })\n if (index < bodies.length - 1) {\n // https://api.slack.com/apis/rate-limits#rtm-posting-messages\n // eslint-disable-next-line no-await-in-loop\n await new Promise((resolve) => {\n setTimeout(resolve, 1000)\n })\n }\n }\n\n // if webhook failed we don't throw an error\n }\n\n /**\n * Looks up a Slack user by their email address.\n * Requires the config to provide a Slack Bot Token via config.auth.getToken().\n *\n * @returns The Slack user ID, or undefined if not found.\n */\n public static async lookupUserByEmail(\n params: SlackLookupUserByEmailParams,\n ): Promise<SlackLookupUserByEmailResponse | undefined> {\n const url = `${SLACK_API_BASE_URL}/users.lookupByEmail?email=${encodeURIComponent(params.params.email)}`\n const serviceContext: RequestBaseServiceContext = {\n method: {\n name: 'SlackService.lookupUserByEmail',\n url,\n normalizedUrl: `${SLACK_API_BASE_URL}/users.lookupByEmail`,\n type: 'get',\n },\n source: params.config.metrics?.source || 'unset',\n target: {\n name: 'slack',\n type: 'external',\n },\n }\n\n const response = await request<{ ok: boolean; user?: { id: string } }>({\n config: params.config,\n url,\n method: serviceContext.method.type,\n metricsDetails: serviceContext,\n responseType: 'json',\n })\n\n if (!response.ok || !response.body?.ok || !response.body?.user?.id) {\n return undefined\n }\n\n return { userId: response.body.user.id }\n }\n}\n"],
|
|
5
|
+
"mappings": "AAUA,SAAS,eAAe;AAGxB,MAAM,yBAAyB;AAE/B,MAAM,qBAAqB;AA0BpB,MAAM,aAAa;AAAA,EACxB,aAAoB,gBAClB,QACc;AACd,UAAM,iBAA4C;AAAA,MAChD,QAAQ;AAAA,QACN,MAAM;AAAA,QACN,KAAK,OAAO,QAAQ;AAAA,QACpB,eAAe;AAAA,QACf,MAAM;AAAA,MACR;AAAA,MACA,QAAQ,OAAO,OAAO,SAAS,UAAU;AAAA,MACzC,QAAQ;AAAA,QACN,MAAM;AAAA,QACN,MAAM;AAAA,MACR;AAAA,IACF;AAEA,UAAM,SAAS,OAAO,QAAQ,SAAS,IAAI,CAAC,YAAY;AACtD,UAAI;AACJ,UAAI;AACJ,cAAQ,QAAQ,MAAM;AAAA,QACpB,KAAK;AACH,iBAAO;AAAA,YACL,MAAM;AAAA,YACN,MAAM,QAAQ;AAAA,UAChB;AACA;AAAA,QACF,KAAK;AACH,qBAAW;AAAA,YACT;AAAA,cACE,MAAM;AAAA,cACN,MAAM,QAAQ;AAAA,YAChB;AAAA,UACF;AACA;AAAA,QACF,KAAK;AACH,iBAAO;AAAA,YACL,MAAM;AAAA,YACN,MAAM,QAAQ;AAAA,YACd,OAAO;AAAA,UACT;AACA;AAAA,MACJ;AAEA,aAAO;AAAA,QACL,MAAM,QAAQ;AAAA,QACd;AAAA,QACA;AAAA,MACF;AAAA,IACF,CAAC;AAED,UAAM,SAAmC,CAAC;AAE1C,QAAI,OAAO,SAAS,wBAAwB;AAC1C,YAAM,aAAa,CAAC,GAAG,MAAM;AAC7B,aAAO,WAAW,SAAS,GAAG;AAC5B,eAAO,KAAK;AAAA,UACV,QAAQ,WAAW,OAAO,GAAG,sBAAsB;AAAA,QACrD,CAAC;AAAA,MACH;AAAA,IACF,OAAO;AACL,aAAO,KAAK;AAAA,QACV;AAAA,MACF,CAAC;AAAA,IACH;AAEA,aAAS,QAAQ,GAAG,QAAQ,OAAO,QAAQ,SAAS;AAElD,YAAM,QAAc;AAAA,QAClB,QAAQ,OAAO;AAAA,QACf,KAAK,eAAe,OAAO;AAAA,QAC3B,QAAQ,eAAe,OAAO;AAAA,QAC9B,gBAAgB;AAAA,QAChB,MAAM,OAAO,KAAK;AAAA,QAClB,MAAM;AAAA,QACN,cAAc;AAAA,MAChB,CAAC;AACD,UAAI,QAAQ,OAAO,SAAS,GAAG;AAG7B,cAAM,IAAI,QAAQ,CAAC,YAAY;AAC7B,qBAAW,SAAS,GAAI;AAAA,QAC1B,CAAC;AAAA,MACH;AAAA,IACF;AAAA,EAGF;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,EAQA,aAAoB,kBAClB,QACqD;AACrD,UAAM,MAAM,GAAG,kBAAkB,8BAA8B,mBAAmB,OAAO,OAAO,KAAK,CAAC;AACtG,UAAM,iBAA4C;AAAA,MAChD,QAAQ;AAAA,QACN,MAAM;AAAA,QACN;AAAA,QACA,eAAe,GAAG,kBAAkB;AAAA,QACpC,MAAM;AAAA,MACR;AAAA,MACA,QAAQ,OAAO,OAAO,SAAS,UAAU;AAAA,MACzC,QAAQ;AAAA,QACN,MAAM;AAAA,QACN,MAAM;AAAA,MACR;AAAA,IACF;AAEA,UAAM,WAAW,MAAM,QAAgD;AAAA,MACrE,QAAQ,OAAO;AAAA,MACf;AAAA,MACA,QAAQ,eAAe,OAAO;AAAA,MAC9B,gBAAgB;AAAA,MAChB,cAAc;AAAA,IAChB,CAAC;AAED,QAAI,CAAC,SAAS,MAAM,CAAC,SAAS,MAAM,MAAM,CAAC,SAAS,MAAM,MAAM,IAAI;AAClE,aAAO;AAAA,IACT;AAEA,WAAO,EAAE,QAAQ,SAAS,KAAK,KAAK,GAAG;AAAA,EACzC;AACF;",
|
|
6
|
+
"names": []
|
|
7
|
+
}
|
|
@@ -0,0 +1,16 @@
|
|
|
1
|
+
import type { Telemetry } from '@camunda/ccma-shared-types';
|
|
2
|
+
import type { RequestBaseParams } from '../../types/general.types.js';
|
|
3
|
+
export interface TelemetryPostRequest extends RequestBaseParams {
|
|
4
|
+
params: {
|
|
5
|
+
data: Telemetry.EncodedData;
|
|
6
|
+
};
|
|
7
|
+
}
|
|
8
|
+
export interface TelemetryPingRequest extends RequestBaseParams {
|
|
9
|
+
params: {
|
|
10
|
+
data: Telemetry.PingRequest;
|
|
11
|
+
};
|
|
12
|
+
}
|
|
13
|
+
export declare class TelemetryService {
|
|
14
|
+
static post(params: TelemetryPostRequest): Promise<Telemetry.PostResponse>;
|
|
15
|
+
static ping(params: TelemetryPingRequest): Promise<Telemetry.PostResponse>;
|
|
16
|
+
}
|
|
@@ -0,0 +1,85 @@
|
|
|
1
|
+
import { request } from "../../utils/api.js";
|
|
2
|
+
import { HttpError } from "../../utils/errors.js";
|
|
3
|
+
const TOKEN = {
|
|
4
|
+
dev: "7*c8zQH.G*FYrEFbmQBZRwPnc-rekY",
|
|
5
|
+
devAws: "7*c8zQH.G*FYrEFbmQBZRwPnc-rekY",
|
|
6
|
+
int: "zmq*nfb5qgn.EWP_zcn",
|
|
7
|
+
prod: "UYN@bjg5utu5peg!kmb*ad+VwL",
|
|
8
|
+
local: "unset",
|
|
9
|
+
localaccounts: "unset",
|
|
10
|
+
localconsole: "unset"
|
|
11
|
+
};
|
|
12
|
+
class TelemetryService {
|
|
13
|
+
static async post(params) {
|
|
14
|
+
const serviceContext = {
|
|
15
|
+
method: {
|
|
16
|
+
name: `TelemetryService.post`,
|
|
17
|
+
url: `data`,
|
|
18
|
+
normalizedUrl: `data`,
|
|
19
|
+
type: "post"
|
|
20
|
+
},
|
|
21
|
+
source: params.config.metrics?.source || "unset",
|
|
22
|
+
target: {
|
|
23
|
+
name: "telemetry",
|
|
24
|
+
type: "internal"
|
|
25
|
+
}
|
|
26
|
+
};
|
|
27
|
+
const response = await request({
|
|
28
|
+
config: params.config,
|
|
29
|
+
base: { id: "telemetry" },
|
|
30
|
+
url: serviceContext.method.url,
|
|
31
|
+
method: serviceContext.method.type,
|
|
32
|
+
metricsDetails: serviceContext,
|
|
33
|
+
body: { data: params.params.data },
|
|
34
|
+
headers: {
|
|
35
|
+
authorization: TOKEN[params.config.stage]
|
|
36
|
+
}
|
|
37
|
+
});
|
|
38
|
+
if (!response.ok) {
|
|
39
|
+
throw new HttpError(
|
|
40
|
+
`${serviceContext.method.name}: ${response.status} ${response.statusText}`,
|
|
41
|
+
response.status,
|
|
42
|
+
response.statusText
|
|
43
|
+
);
|
|
44
|
+
}
|
|
45
|
+
return response.body;
|
|
46
|
+
}
|
|
47
|
+
static async ping(params) {
|
|
48
|
+
const serviceContext = {
|
|
49
|
+
method: {
|
|
50
|
+
name: `TelemetryService.ping`,
|
|
51
|
+
url: `data/ping`,
|
|
52
|
+
normalizedUrl: `data/ping`,
|
|
53
|
+
type: "post"
|
|
54
|
+
},
|
|
55
|
+
source: params.config.metrics?.source || "unset",
|
|
56
|
+
target: {
|
|
57
|
+
name: "telemetry",
|
|
58
|
+
type: "internal"
|
|
59
|
+
}
|
|
60
|
+
};
|
|
61
|
+
const response = await request({
|
|
62
|
+
config: params.config,
|
|
63
|
+
base: { id: "telemetry" },
|
|
64
|
+
url: serviceContext.method.url,
|
|
65
|
+
method: serviceContext.method.type,
|
|
66
|
+
metricsDetails: serviceContext,
|
|
67
|
+
body: params.params.data,
|
|
68
|
+
headers: {
|
|
69
|
+
authorization: TOKEN[params.config.stage]
|
|
70
|
+
}
|
|
71
|
+
});
|
|
72
|
+
if (!response.ok) {
|
|
73
|
+
throw new HttpError(
|
|
74
|
+
`${serviceContext.method.name}: ${response.status} ${response.statusText}`,
|
|
75
|
+
response.status,
|
|
76
|
+
response.statusText
|
|
77
|
+
);
|
|
78
|
+
}
|
|
79
|
+
return response.body;
|
|
80
|
+
}
|
|
81
|
+
}
|
|
82
|
+
export {
|
|
83
|
+
TelemetryService
|
|
84
|
+
};
|
|
85
|
+
//# sourceMappingURL=telemetry.service.js.map
|
|
@@ -0,0 +1,7 @@
|
|
|
1
|
+
{
|
|
2
|
+
"version": 3,
|
|
3
|
+
"sources": ["../../../src/services/telemetry/telemetry.service.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 { Telemetry } from '@camunda/ccma-shared-types'\nimport type {\n RequestBaseParams,\n RequestBaseServiceContext,\n Stage,\n} from '../../types/general.types.js'\nimport { request } from '../../utils/api.js'\nimport { HttpError } from '../../utils/errors.js'\n\nexport interface TelemetryPostRequest extends RequestBaseParams {\n params: {\n data: Telemetry.EncodedData\n }\n}\n\nexport interface TelemetryPingRequest extends RequestBaseParams {\n params: {\n data: Telemetry.PingRequest\n }\n}\n\n// key will be hard coded, to make it easier for our customers\n// see https://github.com/camunda/camunda-cloud-management-apps/issues/2309\nconst TOKEN: Record<Stage, string> = {\n dev: '7*c8zQH.G*FYrEFbmQBZRwPnc-rekY',\n devAws: '7*c8zQH.G*FYrEFbmQBZRwPnc-rekY',\n int: 'zmq*nfb5qgn.EWP_zcn',\n prod: 'UYN@bjg5utu5peg!kmb*ad+VwL',\n local: 'unset',\n localaccounts: 'unset',\n localconsole: 'unset',\n}\n\nexport class TelemetryService {\n public static async post(\n params: TelemetryPostRequest,\n ): Promise<Telemetry.PostResponse> {\n const serviceContext: RequestBaseServiceContext = {\n method: {\n name: `TelemetryService.post`,\n url: `data`,\n normalizedUrl: `data`,\n type: 'post',\n },\n source: params.config.metrics?.source || 'unset',\n target: {\n name: 'telemetry',\n type: 'internal',\n },\n }\n const response = await request<Telemetry.PostResponse>({\n config: params.config,\n base: { id: 'telemetry' },\n url: serviceContext.method.url,\n method: serviceContext.method.type,\n metricsDetails: serviceContext,\n body: { data: params.params.data },\n headers: {\n authorization: TOKEN[params.config.stage],\n },\n })\n if (!response.ok) {\n throw new HttpError(\n `${serviceContext.method.name}: ${response.status} ${response.statusText}`,\n response.status,\n response.statusText,\n )\n }\n return response.body!\n }\n\n public static async ping(\n params: TelemetryPingRequest,\n ): Promise<Telemetry.PostResponse> {\n const serviceContext: RequestBaseServiceContext = {\n method: {\n name: `TelemetryService.ping`,\n url: `data/ping`,\n normalizedUrl: `data/ping`,\n type: 'post',\n },\n source: params.config.metrics?.source || 'unset',\n target: {\n name: 'telemetry',\n type: 'internal',\n },\n }\n const response = await request<Telemetry.PostResponse>({\n config: params.config,\n base: { id: 'telemetry' },\n url: serviceContext.method.url,\n method: serviceContext.method.type,\n metricsDetails: serviceContext,\n body: params.params.data,\n headers: {\n authorization: TOKEN[params.config.stage],\n },\n })\n if (!response.ok) {\n throw new HttpError(\n `${serviceContext.method.name}: ${response.status} ${response.statusText}`,\n response.status,\n response.statusText,\n )\n }\n return response.body!\n }\n}\n"],
|
|
5
|
+
"mappings": "AAYA,SAAS,eAAe;AACxB,SAAS,iBAAiB;AAgB1B,MAAM,QAA+B;AAAA,EACnC,KAAK;AAAA,EACL,QAAQ;AAAA,EACR,KAAK;AAAA,EACL,MAAM;AAAA,EACN,OAAO;AAAA,EACP,eAAe;AAAA,EACf,cAAc;AAChB;AAEO,MAAM,iBAAiB;AAAA,EAC5B,aAAoB,KAClB,QACiC;AACjC,UAAM,iBAA4C;AAAA,MAChD,QAAQ;AAAA,QACN,MAAM;AAAA,QACN,KAAK;AAAA,QACL,eAAe;AAAA,QACf,MAAM;AAAA,MACR;AAAA,MACA,QAAQ,OAAO,OAAO,SAAS,UAAU;AAAA,MACzC,QAAQ;AAAA,QACN,MAAM;AAAA,QACN,MAAM;AAAA,MACR;AAAA,IACF;AACA,UAAM,WAAW,MAAM,QAAgC;AAAA,MACrD,QAAQ,OAAO;AAAA,MACf,MAAM,EAAE,IAAI,YAAY;AAAA,MACxB,KAAK,eAAe,OAAO;AAAA,MAC3B,QAAQ,eAAe,OAAO;AAAA,MAC9B,gBAAgB;AAAA,MAChB,MAAM,EAAE,MAAM,OAAO,OAAO,KAAK;AAAA,MACjC,SAAS;AAAA,QACP,eAAe,MAAM,OAAO,OAAO,KAAK;AAAA,MAC1C;AAAA,IACF,CAAC;AACD,QAAI,CAAC,SAAS,IAAI;AAChB,YAAM,IAAI;AAAA,QACR,GAAG,eAAe,OAAO,IAAI,KAAK,SAAS,MAAM,IAAI,SAAS,UAAU;AAAA,QACxE,SAAS;AAAA,QACT,SAAS;AAAA,MACX;AAAA,IACF;AACA,WAAO,SAAS;AAAA,EAClB;AAAA,EAEA,aAAoB,KAClB,QACiC;AACjC,UAAM,iBAA4C;AAAA,MAChD,QAAQ;AAAA,QACN,MAAM;AAAA,QACN,KAAK;AAAA,QACL,eAAe;AAAA,QACf,MAAM;AAAA,MACR;AAAA,MACA,QAAQ,OAAO,OAAO,SAAS,UAAU;AAAA,MACzC,QAAQ;AAAA,QACN,MAAM;AAAA,QACN,MAAM;AAAA,MACR;AAAA,IACF;AACA,UAAM,WAAW,MAAM,QAAgC;AAAA,MACrD,QAAQ,OAAO;AAAA,MACf,MAAM,EAAE,IAAI,YAAY;AAAA,MACxB,KAAK,eAAe,OAAO;AAAA,MAC3B,QAAQ,eAAe,OAAO;AAAA,MAC9B,gBAAgB;AAAA,MAChB,MAAM,OAAO,OAAO;AAAA,MACpB,SAAS;AAAA,QACP,eAAe,MAAM,OAAO,OAAO,KAAK;AAAA,MAC1C;AAAA,IACF,CAAC;AACD,QAAI,CAAC,SAAS,IAAI;AAChB,YAAM,IAAI;AAAA,QACR,GAAG,eAAe,OAAO,IAAI,KAAK,SAAS,MAAM,IAAI,SAAS,UAAU;AAAA,QACxE,SAAS;AAAA,QACT,SAAS;AAAA,MACX;AAAA,IACF;AACA,WAAO,SAAS;AAAA,EAClB;AACF;",
|
|
6
|
+
"names": []
|
|
7
|
+
}
|
|
@@ -0,0 +1,13 @@
|
|
|
1
|
+
import type { RequestBaseParams } from '../../types/general.types.js';
|
|
2
|
+
export interface JwksRequest extends RequestBaseParams {
|
|
3
|
+
params: {
|
|
4
|
+
uri: string;
|
|
5
|
+
};
|
|
6
|
+
}
|
|
7
|
+
export interface JwksResponse {
|
|
8
|
+
keys: any;
|
|
9
|
+
}
|
|
10
|
+
export declare class TokenIssuerJwksService {
|
|
11
|
+
static get(params: JwksRequest): Promise<JwksResponse>;
|
|
12
|
+
private static isValidKeysObject;
|
|
13
|
+
}
|
|
@@ -0,0 +1,76 @@
|
|
|
1
|
+
import { MINUTE } from "@camunda/ccma-shared-types";
|
|
2
|
+
import { log, request } from "../../utils/api.js";
|
|
3
|
+
import { Cache } from "../../utils/cache.js";
|
|
4
|
+
import { HttpError } from "../../utils/errors.js";
|
|
5
|
+
const CACHE_KEY = "jwks";
|
|
6
|
+
const keysCache = new Cache(60 * MINUTE);
|
|
7
|
+
class TokenIssuerJwksService {
|
|
8
|
+
static async get(params) {
|
|
9
|
+
const serviceContext = {
|
|
10
|
+
method: {
|
|
11
|
+
name: `TokenIssuerJwksService.get`,
|
|
12
|
+
url: params.params.uri,
|
|
13
|
+
normalizedUrl: params.params.uri,
|
|
14
|
+
type: "get"
|
|
15
|
+
},
|
|
16
|
+
source: params.config.metrics?.source || "unset",
|
|
17
|
+
target: {
|
|
18
|
+
name: "token-issuer",
|
|
19
|
+
type: "internal"
|
|
20
|
+
}
|
|
21
|
+
};
|
|
22
|
+
const requestConfig = {
|
|
23
|
+
config: params.config,
|
|
24
|
+
url: serviceContext.method.url,
|
|
25
|
+
method: serviceContext.method.type,
|
|
26
|
+
metricsDetails: serviceContext
|
|
27
|
+
};
|
|
28
|
+
const response = await request(requestConfig);
|
|
29
|
+
if (!response.ok) {
|
|
30
|
+
const fromCache = keysCache.get(CACHE_KEY);
|
|
31
|
+
if (fromCache && TokenIssuerJwksService.isValidKeysObject(fromCache)) {
|
|
32
|
+
return fromCache;
|
|
33
|
+
}
|
|
34
|
+
throw new HttpError(
|
|
35
|
+
`${serviceContext.method.name}: ${response.status} ${response.statusText}`,
|
|
36
|
+
response.status,
|
|
37
|
+
response.statusText
|
|
38
|
+
);
|
|
39
|
+
}
|
|
40
|
+
if (TokenIssuerJwksService.isValidKeysObject(response.body)) {
|
|
41
|
+
log(requestConfig, "debug", "jwks response valid, adding cache entry", {
|
|
42
|
+
response
|
|
43
|
+
});
|
|
44
|
+
keysCache.set(CACHE_KEY, response.body);
|
|
45
|
+
if (requestConfig.config.stage === "dev") {
|
|
46
|
+
const fromCache = keysCache.get(CACHE_KEY);
|
|
47
|
+
log(requestConfig, "debug", "jwks value in cache", {
|
|
48
|
+
response,
|
|
49
|
+
fromCache
|
|
50
|
+
});
|
|
51
|
+
}
|
|
52
|
+
} else {
|
|
53
|
+
log(requestConfig, "debug", "jwks response invalid", { response });
|
|
54
|
+
const fromCache = keysCache.get(CACHE_KEY);
|
|
55
|
+
log(requestConfig, "debug", "checking cached entry", {
|
|
56
|
+
response,
|
|
57
|
+
fromCache
|
|
58
|
+
});
|
|
59
|
+
if (fromCache && TokenIssuerJwksService.isValidKeysObject(fromCache)) {
|
|
60
|
+
log(requestConfig, "debug", "using jwks from local cache", {
|
|
61
|
+
response,
|
|
62
|
+
fromCache
|
|
63
|
+
});
|
|
64
|
+
return fromCache;
|
|
65
|
+
}
|
|
66
|
+
}
|
|
67
|
+
return response.body;
|
|
68
|
+
}
|
|
69
|
+
static isValidKeysObject(response) {
|
|
70
|
+
return response?.keys && response?.keys.length > 0;
|
|
71
|
+
}
|
|
72
|
+
}
|
|
73
|
+
export {
|
|
74
|
+
TokenIssuerJwksService
|
|
75
|
+
};
|
|
76
|
+
//# sourceMappingURL=token-issuer.jwks.service.js.map
|
|
@@ -0,0 +1,7 @@
|
|
|
1
|
+
{
|
|
2
|
+
"version": 3,
|
|
3
|
+
"sources": ["../../../src/services/token-issuer/token-issuer.jwks.service.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 { MINUTE } from '@camunda/ccma-shared-types'\nimport type {\n RequestBaseParams,\n RequestBaseServiceContext,\n} from '../../types/general.types.js'\nimport { log, request } from '../../utils/api.js'\nimport { Cache } from '../../utils/cache.js'\nimport { HttpError } from '../../utils/errors.js'\n\nconst CACHE_KEY = 'jwks'\nconst keysCache = new Cache<string, JwksResponse>(60 * MINUTE)\n\nexport interface JwksRequest extends RequestBaseParams {\n params: {\n uri: string\n }\n}\n\nexport interface JwksResponse {\n keys: any\n}\n\nexport class TokenIssuerJwksService {\n public static async get(params: JwksRequest): Promise<JwksResponse> {\n const serviceContext: RequestBaseServiceContext = {\n method: {\n name: `TokenIssuerJwksService.get`,\n url: params.params.uri,\n normalizedUrl: params.params.uri,\n type: 'get',\n },\n source: params.config.metrics?.source || 'unset',\n target: {\n name: 'token-issuer',\n type: 'internal',\n },\n }\n const requestConfig = {\n config: params.config,\n url: serviceContext.method.url,\n method: serviceContext.method.type,\n metricsDetails: serviceContext,\n }\n const response = await request<JwksResponse>(requestConfig)\n if (!response.ok) {\n const fromCache = keysCache.get(CACHE_KEY)\n if (fromCache && TokenIssuerJwksService.isValidKeysObject(fromCache)) {\n return fromCache\n }\n throw new HttpError(\n `${serviceContext.method.name}: ${response.status} ${response.statusText}`,\n response.status,\n response.statusText,\n )\n }\n\n if (TokenIssuerJwksService.isValidKeysObject(response.body)) {\n // valid response\n log(requestConfig, 'debug', 'jwks response valid, adding cache entry', {\n response,\n })\n keysCache.set(CACHE_KEY, response.body!)\n if (requestConfig.config.stage === 'dev') {\n const fromCache = keysCache.get(CACHE_KEY)\n log(requestConfig, 'debug', 'jwks value in cache', {\n response,\n fromCache,\n })\n }\n } else {\n log(requestConfig, 'debug', 'jwks response invalid', { response })\n // invalid response\n const fromCache = keysCache.get(CACHE_KEY)\n log(requestConfig, 'debug', 'checking cached entry', {\n response,\n fromCache,\n })\n if (fromCache && TokenIssuerJwksService.isValidKeysObject(fromCache)) {\n log(requestConfig, 'debug', 'using jwks from local cache', {\n response,\n fromCache,\n })\n return fromCache\n }\n }\n return response.body!\n }\n\n private static isValidKeysObject(response: any): boolean {\n return response?.keys && response?.keys.length > 0\n }\n}\n"],
|
|
5
|
+
"mappings": "AAMA,SAAS,cAAc;AAKvB,SAAS,KAAK,eAAe;AAC7B,SAAS,aAAa;AACtB,SAAS,iBAAiB;AAE1B,MAAM,YAAY;AAClB,MAAM,YAAY,IAAI,MAA4B,KAAK,MAAM;AAYtD,MAAM,uBAAuB;AAAA,EAClC,aAAoB,IAAI,QAA4C;AAClE,UAAM,iBAA4C;AAAA,MAChD,QAAQ;AAAA,QACN,MAAM;AAAA,QACN,KAAK,OAAO,OAAO;AAAA,QACnB,eAAe,OAAO,OAAO;AAAA,QAC7B,MAAM;AAAA,MACR;AAAA,MACA,QAAQ,OAAO,OAAO,SAAS,UAAU;AAAA,MACzC,QAAQ;AAAA,QACN,MAAM;AAAA,QACN,MAAM;AAAA,MACR;AAAA,IACF;AACA,UAAM,gBAAgB;AAAA,MACpB,QAAQ,OAAO;AAAA,MACf,KAAK,eAAe,OAAO;AAAA,MAC3B,QAAQ,eAAe,OAAO;AAAA,MAC9B,gBAAgB;AAAA,IAClB;AACA,UAAM,WAAW,MAAM,QAAsB,aAAa;AAC1D,QAAI,CAAC,SAAS,IAAI;AAChB,YAAM,YAAY,UAAU,IAAI,SAAS;AACzC,UAAI,aAAa,uBAAuB,kBAAkB,SAAS,GAAG;AACpE,eAAO;AAAA,MACT;AACA,YAAM,IAAI;AAAA,QACR,GAAG,eAAe,OAAO,IAAI,KAAK,SAAS,MAAM,IAAI,SAAS,UAAU;AAAA,QACxE,SAAS;AAAA,QACT,SAAS;AAAA,MACX;AAAA,IACF;AAEA,QAAI,uBAAuB,kBAAkB,SAAS,IAAI,GAAG;AAE3D,UAAI,eAAe,SAAS,2CAA2C;AAAA,QACrE;AAAA,MACF,CAAC;AACD,gBAAU,IAAI,WAAW,SAAS,IAAK;AACvC,UAAI,cAAc,OAAO,UAAU,OAAO;AACxC,cAAM,YAAY,UAAU,IAAI,SAAS;AACzC,YAAI,eAAe,SAAS,uBAAuB;AAAA,UACjD;AAAA,UACA;AAAA,QACF,CAAC;AAAA,MACH;AAAA,IACF,OAAO;AACL,UAAI,eAAe,SAAS,yBAAyB,EAAE,SAAS,CAAC;AAEjE,YAAM,YAAY,UAAU,IAAI,SAAS;AACzC,UAAI,eAAe,SAAS,yBAAyB;AAAA,QACnD;AAAA,QACA;AAAA,MACF,CAAC;AACD,UAAI,aAAa,uBAAuB,kBAAkB,SAAS,GAAG;AACpE,YAAI,eAAe,SAAS,+BAA+B;AAAA,UACzD;AAAA,UACA;AAAA,QACF,CAAC;AACD,eAAO;AAAA,MACT;AAAA,IACF;AACA,WAAO,SAAS;AAAA,EAClB;AAAA,EAEA,OAAe,kBAAkB,UAAwB;AACvD,WAAO,UAAU,QAAQ,UAAU,KAAK,SAAS;AAAA,EACnD;AACF;",
|
|
6
|
+
"names": []
|
|
7
|
+
}
|
|
@@ -0,0 +1,15 @@
|
|
|
1
|
+
import type { RequestBaseParams } from '../../types/general.types.js';
|
|
2
|
+
export interface WordpressGetCardsRequest extends RequestBaseParams {
|
|
3
|
+
options: {
|
|
4
|
+
cardIds: string[];
|
|
5
|
+
};
|
|
6
|
+
}
|
|
7
|
+
export interface WordpressGetHelpCenterConfigRequest extends RequestBaseParams {
|
|
8
|
+
}
|
|
9
|
+
export interface WordpressGetSurveyConfigRequest extends RequestBaseParams {
|
|
10
|
+
}
|
|
11
|
+
export declare class WordpressService {
|
|
12
|
+
static getCards(params: WordpressGetCardsRequest): Promise<any[]>;
|
|
13
|
+
static getHelpCenterConfig(params: WordpressGetHelpCenterConfigRequest): Promise<any>;
|
|
14
|
+
static getSurveyConfig(params: WordpressGetSurveyConfigRequest): Promise<any>;
|
|
15
|
+
}
|