@camunda/ccma-api 0.0.4 → 0.0.6
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 +10 -4
- package/dist/index.js +6 -0
- package/dist/index.js.map +2 -2
- package/dist/services/ask-backend/ask-backend.service.d.ts +85 -0
- package/dist/services/ask-backend/ask-backend.service.js +378 -0
- package/dist/services/ask-backend/ask-backend.service.js.map +7 -0
- package/dist/services/console/console.admin.service.d.ts +65 -0
- package/dist/services/console/console.admin.service.js +155 -1
- package/dist/services/console/console.admin.service.js.map +2 -2
- package/dist/services/console/console.cluster-parameters.service.d.ts +1 -0
- package/dist/services/console/console.cluster-parameters.service.js.map +2 -2
- package/dist/services/console/console.cluster.service.d.ts +9 -0
- package/dist/services/console/console.cluster.service.js +28 -0
- package/dist/services/console/console.cluster.service.js.map +2 -2
- package/dist/services/console/console.clusterplan.modification.service.d.ts +4 -1
- package/dist/services/console/console.clusterplan.modification.service.js +29 -0
- package/dist/services/console/console.clusterplan.modification.service.js.map +2 -2
- package/dist/services/console/generation.service.d.ts +10 -0
- package/dist/services/console/generation.service.js +34 -0
- package/dist/services/console/generation.service.js.map +2 -2
- package/dist/services/glean/glean.service.d.ts +20 -0
- package/dist/services/glean/glean.service.js +49 -0
- package/dist/services/glean/glean.service.js.map +7 -0
- package/dist/services/incident-io/incident-io.service.d.ts +20 -0
- package/dist/services/incident-io/incident-io.service.js +67 -0
- package/dist/services/incident-io/incident-io.service.js.map +7 -0
- package/dist/services/incident-io/incident-io.service.spec.d.ts +1 -0
- package/dist/services/litellm/litellm.service.d.ts +5 -1
- package/dist/services/litellm/litellm.service.js +6 -0
- package/dist/services/litellm/litellm.service.js.map +2 -2
- package/dist/services/slack/slack.service.d.ts +37 -0
- package/dist/services/slack/slack.service.js +98 -0
- package/dist/services/slack/slack.service.js.map +2 -2
- package/package.json +3 -2
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
{
|
|
2
2
|
"version": 3,
|
|
3
3
|
"sources": ["../../../src/services/litellm/litellm.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'\nimport { HttpError } from '../../utils/errors.js'\n\n/**\n * Request to create a new team in LiteLLM\n * POST /team/new\n */\nexport interface CreateTeamRequest extends RequestBaseParams {\n options: {\n /** Base URL for LiteLLM API */\n litellmApiBaseUrl: string\n /** API token for authentication */\n apiToken: string\n /** Team alias/name */\n team_alias: string\n /** Maximum budget for the team */\n max_budget?: number\n /** Budget duration (e.g., '30d', '1mo') */\n budget_duration?: string\n }\n}\n\n/**\n * Response from creating a new team\n */\nexport interface CreateTeamResponse {\n team_id: string\n team_alias: string\n max_budget?: number\n budget_duration?: string\n created_at?: string\n [key: string]: any\n}\n\n/**\n * Request to update a team's budget in LiteLLM\n * POST /team/update\n */\nexport interface UpdateTeamBudgetRequest extends RequestBaseParams {\n options: {\n /** Base URL for LiteLLM API */\n litellmApiBaseUrl: string\n /** API token for authentication */\n apiToken: string\n /** Team ID to update */\n team_id: string\n /** New maximum budget for the team */\n max_budget: number\n }\n}\n\n/**\n * Response from updating a team's budget\n */\nexport interface UpdateTeamBudgetResponse {\n team_id: string\n team_alias?: string\n max_budget: number\n budget_duration?: string\n [key: string]: any\n}\n\n/**\n * Request to update a key's budget in LiteLLM\n * POST /key/update\n */\nexport interface UpdateKeyBudgetRequest extends RequestBaseParams {\n options: {\n /** Base URL for LiteLLM API */\n litellmApiBaseUrl: string\n /** API token for authentication */\n apiToken: string\n /** Key to update */\n key: string\n /** New maximum budget for the key */\n max_budget: number\n }\n}\n\n/**\n * Response from updating a key's budget\n */\nexport interface UpdateKeyBudgetResponse {\n key: string\n max_budget: number\n [key: string]: any\n}\n\n/**\n * Request to delete a team\n * POST /team/delete\n */\nexport interface DeleteTeamRequest extends RequestBaseParams {\n options: {\n /** Base URL for LiteLLM API */\n litellmApiBaseUrl: string\n /** API token for authentication */\n apiToken: string\n /** Team ID to delete */\n team_id: string\n }\n}\n\n/**\n * Response from deleting a team\n */\nexport interface DeleteTeamResponse {\n deleted_teams: string[]\n [key: string]: any\n}\n\n/**\n * Request to generate a key for a team\n * POST /key/generate\n */\nexport interface GenerateKeyRequest extends RequestBaseParams {\n options: {\n /** Base URL for LiteLLM API */\n litellmApiBaseUrl: string\n /** API token for authentication */\n apiToken: string\n /** Team ID to generate key for */\n team_id: string\n /** Models the key can access */\n models?: string[]\n /** Optional key alias */\n key_alias?: string\n /** Duration for the key */\n duration?: string\n /** Additional metadata */\n metadata?: Record<string, any>\n /** Maximum budget for this key */\n max_budget?: number\n /** Budget duration */\n budget_duration?: string\n }\n}\n\n/**\n * Response from generating a key\n */\nexport interface GenerateKeyResponse {\n key: string\n key_name?: string\n expires?: string\n team_id: string\n metadata?: Record<string, any>\n [key: string]: any\n}\n\n/**\n * Request to block a key\n * POST /key/block\n */\nexport interface BlockKeyRequest extends RequestBaseParams {\n options: {\n /** Base URL for LiteLLM API */\n litellmApiBaseUrl: string\n /** API token for authentication */\n apiToken: string\n /** Key to block */\n key: string\n }\n}\n\n/**\n * Response from blocking a key\n */\nexport interface BlockKeyResponse {\n status: string\n message?: string\n [key: string]: any\n}\n\n/**\n * Request to unblock a key\n * POST /key/unblock\n */\nexport interface UnblockKeyRequest extends RequestBaseParams {\n options: {\n /** Base URL for LiteLLM API */\n litellmApiBaseUrl: string\n /** API token for authentication */\n apiToken: string\n /** Key to unblock */\n key: string\n }\n}\n\n/**\n * Response from unblocking a key\n */\nexport interface UnblockKeyResponse {\n status: string\n message?: string\n [key: string]: any\n}\n\n/**\n * Request to get key info\n * GET /key/info\n */\nexport interface GetKeyInfoRequest extends RequestBaseParams {\n options: {\n /** Base URL for LiteLLM API */\n litellmApiBaseUrl: string\n /** API token for authentication */\n apiToken: string\n /** Key to get info for */\n key: string\n }\n}\n\n/**\n * Request to delete a key\n * POST /key/delete\n */\nexport interface DeleteKeyRequest extends RequestBaseParams {\n options: {\n /** Base URL for LiteLLM API */\n litellmApiBaseUrl: string\n /** API token for authentication */\n apiToken: string\n /** Key to delete */\n key: string\n }\n}\n\n/**\n * Response from deleting a key\n */\nexport interface DeleteKeyResponse {\n deleted_keys: string[]\n [key: string]: any\n}\n\n/**\n * Response from getting key info including usage and spend\n */\nexport interface GetKeyInfoResponse {\n info: {\n key: string\n team_id: string\n spend?: number\n usage?: {\n total_tokens?: number\n prompt_tokens?: number\n completion_tokens?: number\n }\n max_budget?: number\n budget_duration?: string\n blocked?: boolean\n created_at?: string\n expires_at?: string\n metadata?: Record<string, any>\n [key: string]: any\n }\n}\n\n/**\n * Service for interacting with LiteLLM API\n * API Documentation: https://camunda.litellm-sandbox.ai\n */\nexport class LiteLLMService {\n /**\n * Create a new team in LiteLLM\n * POST /team/new\n */\n public static async createTeam(\n params: CreateTeamRequest,\n ): Promise<CreateTeamResponse> {\n const serviceContext: RequestBaseServiceContext = {\n method: {\n name: 'LiteLLMService.createTeam',\n url: `${params.options.litellmApiBaseUrl}/team/new`,\n normalizedUrl: '/team/new',\n type: 'post',\n },\n source: params.config.metrics?.source || 'unset',\n target: {\n name: 'litellm',\n type: 'external',\n },\n }\n\n const body = {\n team_alias: params.options.team_alias,\n ...(params.options.max_budget !== undefined && {\n max_budget: params.options.max_budget,\n }),\n ...(params.options.budget_duration && {\n budget_duration: params.options.budget_duration,\n }),\n }\n\n const response = await request<CreateTeamResponse>({\n config: params.config,\n url: serviceContext.method.url,\n method: serviceContext.method.type,\n metricsDetails: serviceContext,\n type: 'json',\n headers: {\n Authorization: `Bearer ${params.options.apiToken}`,\n },\n body,\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\n return response.body!\n }\n\n /**\n * Update a team's budget in LiteLLM\n * POST /team/update\n */\n public static async updateTeamBudget(\n params: UpdateTeamBudgetRequest,\n ): Promise<UpdateTeamBudgetResponse> {\n const serviceContext: RequestBaseServiceContext = {\n method: {\n name: 'LiteLLMService.updateTeamBudget',\n url: `${params.options.litellmApiBaseUrl}/team/update`,\n normalizedUrl: '/team/update',\n type: 'post',\n },\n source: params.config.metrics?.source || 'unset',\n target: {\n name: 'litellm',\n type: 'external',\n },\n }\n\n const body = {\n team_id: params.options.team_id,\n max_budget: params.options.max_budget,\n }\n\n const response = await request<UpdateTeamBudgetResponse>({\n config: params.config,\n url: serviceContext.method.url,\n method: serviceContext.method.type,\n metricsDetails: serviceContext,\n type: 'json',\n headers: {\n Authorization: `Bearer ${params.options.apiToken}`,\n },\n body,\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\n return response.body!\n }\n\n /**\n * Update a key's budget in LiteLLM\n * POST /key/update\n */\n public static async updateKeyBudget(\n params: UpdateKeyBudgetRequest,\n ): Promise<UpdateKeyBudgetResponse> {\n const serviceContext: RequestBaseServiceContext = {\n method: {\n name: 'LiteLLMService.updateKeyBudget',\n url: `${params.options.litellmApiBaseUrl}/key/update`,\n normalizedUrl: '/key/update',\n type: 'post',\n },\n source: params.config.metrics?.source || 'unset',\n target: {\n name: 'litellm',\n type: 'external',\n },\n }\n\n const body = {\n key: params.options.key,\n max_budget: params.options.max_budget,\n }\n\n const response = await request<UpdateKeyBudgetResponse>({\n config: params.config,\n url: serviceContext.method.url,\n method: serviceContext.method.type,\n metricsDetails: serviceContext,\n type: 'json',\n headers: {\n Authorization: `Bearer ${params.options.apiToken}`,\n },\n body,\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\n return response.body!\n }\n\n /**\n * Generate a key for a team\n * POST /key/generate\n */\n public static async generateKey(\n params: GenerateKeyRequest,\n ): Promise<GenerateKeyResponse> {\n const serviceContext: RequestBaseServiceContext = {\n method: {\n name: 'LiteLLMService.generateKey',\n url: `${params.options.litellmApiBaseUrl}/key/generate`,\n normalizedUrl: '/key/generate',\n type: 'post',\n },\n source: params.config.metrics?.source || 'unset',\n target: {\n name: 'litellm',\n type: 'external',\n },\n }\n\n const body = {\n team_id: params.options.team_id,\n key_type: 'llm_api',\n allowed_routes: ['/chat/completions'],\n ...(params.options.models && { models: params.options.models }),\n ...(params.options.key_alias && { key_alias: params.options.key_alias }),\n ...(params.options.duration && { duration: params.options.duration }),\n ...(params.options.metadata && { metadata: params.options.metadata }),\n ...(params.options.max_budget !== undefined && {\n max_budget: params.options.max_budget,\n }),\n ...(params.options.budget_duration && {\n budget_duration: params.options.budget_duration,\n }),\n }\n\n const response = await request<GenerateKeyResponse>({\n config: params.config,\n url: serviceContext.method.url,\n method: serviceContext.method.type,\n metricsDetails: serviceContext,\n type: 'json',\n headers: {\n Authorization: `Bearer ${params.options.apiToken}`,\n },\n body,\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\n return response.body!\n }\n\n /**\n * Block a key to quickly disable it\n * POST /key/block\n */\n public static async blockKey(\n params: BlockKeyRequest,\n ): Promise<BlockKeyResponse> {\n const serviceContext: RequestBaseServiceContext = {\n method: {\n name: 'LiteLLMService.blockKey',\n url: `${params.options.litellmApiBaseUrl}/key/block`,\n normalizedUrl: '/key/block',\n type: 'post',\n },\n source: params.config.metrics?.source || 'unset',\n target: {\n name: 'litellm',\n type: 'external',\n },\n }\n\n const body = {\n key: params.options.key,\n }\n\n const response = await request<BlockKeyResponse>({\n config: params.config,\n url: serviceContext.method.url,\n method: serviceContext.method.type,\n metricsDetails: serviceContext,\n type: 'json',\n headers: {\n Authorization: `Bearer ${params.options.apiToken}`,\n },\n body,\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\n return response.body!\n }\n\n /**\n * Unblock a key to re-enable it\n * POST /key/unblock\n */\n public static async unblockKey(\n params: UnblockKeyRequest,\n ): Promise<UnblockKeyResponse> {\n const serviceContext: RequestBaseServiceContext = {\n method: {\n name: 'LiteLLMService.unblockKey',\n url: `${params.options.litellmApiBaseUrl}/key/unblock`,\n normalizedUrl: '/key/unblock',\n type: 'post',\n },\n source: params.config.metrics?.source || 'unset',\n target: {\n name: 'litellm',\n type: 'external',\n },\n }\n\n const body = {\n key: params.options.key,\n }\n\n const response = await request<UnblockKeyResponse>({\n config: params.config,\n url: serviceContext.method.url,\n method: serviceContext.method.type,\n metricsDetails: serviceContext,\n type: 'json',\n headers: {\n Authorization: `Bearer ${params.options.apiToken}`,\n },\n body,\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\n return response.body!\n }\n\n /**\n * Get information about a key including usage and spend\n * GET /key/info\n */\n public static async getKeyInfo(\n params: GetKeyInfoRequest,\n ): Promise<GetKeyInfoResponse> {\n const serviceContext: RequestBaseServiceContext = {\n method: {\n name: 'LiteLLMService.getKeyInfo',\n url: `${params.options.litellmApiBaseUrl}/key/info?key=${encodeURIComponent(params.options.key)}`,\n normalizedUrl: '/key/info',\n type: 'get',\n },\n source: params.config.metrics?.source || 'unset',\n target: {\n name: 'litellm',\n type: 'external',\n },\n }\n\n const response = await request<GetKeyInfoResponse>({\n config: params.config,\n url: serviceContext.method.url,\n method: serviceContext.method.type,\n metricsDetails: serviceContext,\n headers: {\n Authorization: `Bearer ${params.options.apiToken}`,\n },\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\n return response.body!\n }\n\n /**\n * Delete a key\n * POST /key/delete\n */\n public static async deleteKey(\n params: DeleteKeyRequest,\n ): Promise<DeleteKeyResponse> {\n const serviceContext: RequestBaseServiceContext = {\n method: {\n name: 'LiteLLMService.deleteKey',\n url: `${params.options.litellmApiBaseUrl}/key/delete`,\n normalizedUrl: '/key/delete',\n type: 'post',\n },\n source: params.config.metrics?.source || 'unset',\n target: {\n name: 'litellm',\n type: 'external',\n },\n }\n\n const body = {\n keys: [params.options.key],\n }\n\n const response = await request<DeleteKeyResponse>({\n config: params.config,\n url: serviceContext.method.url,\n method: serviceContext.method.type,\n metricsDetails: serviceContext,\n type: 'json',\n headers: {\n Authorization: `Bearer ${params.options.apiToken}`,\n },\n body,\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\n return response.body!\n }\n\n /**\n * Delete a team\n * POST /team/delete\n */\n public static async deleteTeam(\n params: DeleteTeamRequest,\n ): Promise<DeleteTeamResponse> {\n const serviceContext: RequestBaseServiceContext = {\n method: {\n name: 'LiteLLMService.deleteTeam',\n url: `${params.options.litellmApiBaseUrl}/team/delete`,\n normalizedUrl: '/team/delete',\n type: 'post',\n },\n source: params.config.metrics?.source || 'unset',\n target: {\n name: 'litellm',\n type: 'external',\n },\n }\n\n const body = {\n team_ids: [params.options.team_id],\n }\n\n const response = await request<DeleteTeamResponse>({\n config: params.config,\n url: serviceContext.method.url,\n method: serviceContext.method.type,\n metricsDetails: serviceContext,\n type: 'json',\n headers: {\n Authorization: `Bearer ${params.options.apiToken}`,\n },\n body,\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\n return response.body!\n }\n}\n"],
|
|
5
|
-
"mappings": "AAUA,SAAS,eAAe;AACxB,SAAS,iBAAiB;
|
|
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'\nimport { HttpError } from '../../utils/errors.js'\n\n/**\n * Request to create a new team in LiteLLM\n * POST /team/new\n */\nexport interface CreateTeamRequest extends RequestBaseParams {\n options: {\n /** Base URL for LiteLLM API */\n litellmApiBaseUrl: string\n /** API token for authentication */\n apiToken: string\n /** Team alias/name */\n team_alias: string\n /** Maximum budget for the team */\n max_budget?: number\n /** Budget duration (e.g., '30d', '1mo') */\n budget_duration?: string\n /** Organization ID to associate the team with */\n organization_id?: string\n }\n}\n\n/**\n * Response from creating a new team\n */\nexport interface CreateTeamResponse {\n team_id: string\n team_alias: string\n max_budget?: number\n budget_duration?: string\n created_at?: string\n [key: string]: any\n}\n\n/**\n * Request to update a team's budget in LiteLLM\n * POST /team/update\n */\nexport interface UpdateTeamBudgetRequest extends RequestBaseParams {\n options: {\n /** Base URL for LiteLLM API */\n litellmApiBaseUrl: string\n /** API token for authentication */\n apiToken: string\n /** Team ID to update */\n team_id: string\n /** New maximum budget for the team */\n max_budget: number\n }\n}\n\n/**\n * Response from updating a team's budget\n */\nexport interface UpdateTeamBudgetResponse {\n team_id: string\n team_alias?: string\n max_budget: number\n budget_duration?: string\n [key: string]: any\n}\n\n/**\n * Request to update a key's budget in LiteLLM\n * POST /key/update\n */\nexport interface UpdateKeyBudgetRequest extends RequestBaseParams {\n options: {\n /** Base URL for LiteLLM API */\n litellmApiBaseUrl: string\n /** API token for authentication */\n apiToken: string\n /** Key to update */\n key: string\n /** New maximum budget for the key */\n max_budget: number\n }\n}\n\n/**\n * Response from updating a key's budget\n */\nexport interface UpdateKeyBudgetResponse {\n key: string\n max_budget: number\n [key: string]: any\n}\n\n/**\n * Request to delete a team\n * POST /team/delete\n */\nexport interface DeleteTeamRequest extends RequestBaseParams {\n options: {\n /** Base URL for LiteLLM API */\n litellmApiBaseUrl: string\n /** API token for authentication */\n apiToken: string\n /** Team ID to delete */\n team_id: string\n }\n}\n\n/**\n * Response from deleting a team\n */\nexport interface DeleteTeamResponse {\n deleted_teams: string[]\n [key: string]: any\n}\n\n/**\n * Request to generate a key for a team\n * POST /key/generate\n */\nexport interface GenerateKeyRequest extends RequestBaseParams {\n options: {\n /** Base URL for LiteLLM API */\n litellmApiBaseUrl: string\n /** API token for authentication */\n apiToken: string\n /** Team ID to generate key for */\n team_id: string\n /** Models the key can access */\n models?: string[]\n /** Optional key alias */\n key_alias?: string\n /** Duration for the key */\n duration?: string\n /** Additional metadata */\n metadata?: Record<string, any>\n /** Maximum budget for this key */\n max_budget?: number\n /** Budget duration */\n budget_duration?: string\n /** Organization ID to associate the key with */\n organization_id?: string\n }\n}\n\n/**\n * Response from generating a key\n */\nexport interface GenerateKeyResponse {\n key: string\n key_name?: string\n expires?: string\n team_id: string\n metadata?: Record<string, any>\n [key: string]: any\n}\n\n/**\n * Request to block a key\n * POST /key/block\n */\nexport interface BlockKeyRequest extends RequestBaseParams {\n options: {\n /** Base URL for LiteLLM API */\n litellmApiBaseUrl: string\n /** API token for authentication */\n apiToken: string\n /** Key to block */\n key: string\n }\n}\n\n/**\n * Response from blocking a key\n */\nexport interface BlockKeyResponse {\n status: string\n message?: string\n [key: string]: any\n}\n\n/**\n * Request to unblock a key\n * POST /key/unblock\n */\nexport interface UnblockKeyRequest extends RequestBaseParams {\n options: {\n /** Base URL for LiteLLM API */\n litellmApiBaseUrl: string\n /** API token for authentication */\n apiToken: string\n /** Key to unblock */\n key: string\n }\n}\n\n/**\n * Response from unblocking a key\n */\nexport interface UnblockKeyResponse {\n status: string\n message?: string\n [key: string]: any\n}\n\n/**\n * Request to get key info\n * GET /key/info\n */\nexport interface GetKeyInfoRequest extends RequestBaseParams {\n options: {\n /** Base URL for LiteLLM API */\n litellmApiBaseUrl: string\n /** API token for authentication */\n apiToken: string\n /** Key to get info for */\n key: string\n }\n}\n\n/**\n * Request to delete a key\n * POST /key/delete\n */\nexport interface DeleteKeyRequest extends RequestBaseParams {\n options: {\n /** Base URL for LiteLLM API */\n litellmApiBaseUrl: string\n /** API token for authentication */\n apiToken: string\n /** Key to delete */\n key: string\n }\n}\n\n/**\n * Response from deleting a key\n */\nexport interface DeleteKeyResponse {\n deleted_keys: string[]\n [key: string]: any\n}\n\n/**\n * Response from getting key info including usage and spend\n */\nexport interface GetKeyInfoResponse {\n info: {\n key: string\n team_id: string\n spend?: number\n usage?: {\n total_tokens?: number\n prompt_tokens?: number\n completion_tokens?: number\n }\n max_budget?: number\n budget_duration?: string\n blocked?: boolean\n created_at?: string\n expires_at?: string\n metadata?: Record<string, any>\n [key: string]: any\n }\n}\n\n/**\n * Service for interacting with LiteLLM API\n * API Documentation: https://camunda.litellm-prod.ai\n */\nexport class LiteLLMService {\n /**\n * Create a new team in LiteLLM\n * POST /team/new\n */\n public static async createTeam(\n params: CreateTeamRequest,\n ): Promise<CreateTeamResponse> {\n const serviceContext: RequestBaseServiceContext = {\n method: {\n name: 'LiteLLMService.createTeam',\n url: `${params.options.litellmApiBaseUrl}/team/new`,\n normalizedUrl: '/team/new',\n type: 'post',\n },\n source: params.config.metrics?.source || 'unset',\n target: {\n name: 'litellm',\n type: 'external',\n },\n }\n\n const body = {\n team_alias: params.options.team_alias,\n ...(params.options.max_budget !== undefined && {\n max_budget: params.options.max_budget,\n }),\n ...(params.options.budget_duration && {\n budget_duration: params.options.budget_duration,\n }),\n ...(params.options.organization_id && {\n organization_id: params.options.organization_id,\n }),\n }\n\n const response = await request<CreateTeamResponse>({\n config: params.config,\n url: serviceContext.method.url,\n method: serviceContext.method.type,\n metricsDetails: serviceContext,\n type: 'json',\n headers: {\n Authorization: `Bearer ${params.options.apiToken}`,\n },\n body,\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\n return response.body!\n }\n\n /**\n * Update a team's budget in LiteLLM\n * POST /team/update\n */\n public static async updateTeamBudget(\n params: UpdateTeamBudgetRequest,\n ): Promise<UpdateTeamBudgetResponse> {\n const serviceContext: RequestBaseServiceContext = {\n method: {\n name: 'LiteLLMService.updateTeamBudget',\n url: `${params.options.litellmApiBaseUrl}/team/update`,\n normalizedUrl: '/team/update',\n type: 'post',\n },\n source: params.config.metrics?.source || 'unset',\n target: {\n name: 'litellm',\n type: 'external',\n },\n }\n\n const body = {\n team_id: params.options.team_id,\n max_budget: params.options.max_budget,\n }\n\n const response = await request<UpdateTeamBudgetResponse>({\n config: params.config,\n url: serviceContext.method.url,\n method: serviceContext.method.type,\n metricsDetails: serviceContext,\n type: 'json',\n headers: {\n Authorization: `Bearer ${params.options.apiToken}`,\n },\n body,\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\n return response.body!\n }\n\n /**\n * Update a key's budget in LiteLLM\n * POST /key/update\n */\n public static async updateKeyBudget(\n params: UpdateKeyBudgetRequest,\n ): Promise<UpdateKeyBudgetResponse> {\n const serviceContext: RequestBaseServiceContext = {\n method: {\n name: 'LiteLLMService.updateKeyBudget',\n url: `${params.options.litellmApiBaseUrl}/key/update`,\n normalizedUrl: '/key/update',\n type: 'post',\n },\n source: params.config.metrics?.source || 'unset',\n target: {\n name: 'litellm',\n type: 'external',\n },\n }\n\n const body = {\n key: params.options.key,\n max_budget: params.options.max_budget,\n }\n\n const response = await request<UpdateKeyBudgetResponse>({\n config: params.config,\n url: serviceContext.method.url,\n method: serviceContext.method.type,\n metricsDetails: serviceContext,\n type: 'json',\n headers: {\n Authorization: `Bearer ${params.options.apiToken}`,\n },\n body,\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\n return response.body!\n }\n\n /**\n * Generate a key for a team\n * POST /key/generate\n */\n public static async generateKey(\n params: GenerateKeyRequest,\n ): Promise<GenerateKeyResponse> {\n const serviceContext: RequestBaseServiceContext = {\n method: {\n name: 'LiteLLMService.generateKey',\n url: `${params.options.litellmApiBaseUrl}/key/generate`,\n normalizedUrl: '/key/generate',\n type: 'post',\n },\n source: params.config.metrics?.source || 'unset',\n target: {\n name: 'litellm',\n type: 'external',\n },\n }\n\n const body = {\n team_id: params.options.team_id,\n key_type: 'llm_api',\n allowed_routes: ['/chat/completions'],\n ...(params.options.models && { models: params.options.models }),\n ...(params.options.key_alias && { key_alias: params.options.key_alias }),\n ...(params.options.duration && { duration: params.options.duration }),\n ...(params.options.metadata && { metadata: params.options.metadata }),\n ...(params.options.max_budget !== undefined && {\n max_budget: params.options.max_budget,\n }),\n ...(params.options.budget_duration && {\n budget_duration: params.options.budget_duration,\n }),\n ...(params.options.organization_id && {\n organization_id: params.options.organization_id,\n }),\n }\n\n const response = await request<GenerateKeyResponse>({\n config: params.config,\n url: serviceContext.method.url,\n method: serviceContext.method.type,\n metricsDetails: serviceContext,\n type: 'json',\n headers: {\n Authorization: `Bearer ${params.options.apiToken}`,\n },\n body,\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\n return response.body!\n }\n\n /**\n * Block a key to quickly disable it\n * POST /key/block\n */\n public static async blockKey(\n params: BlockKeyRequest,\n ): Promise<BlockKeyResponse> {\n const serviceContext: RequestBaseServiceContext = {\n method: {\n name: 'LiteLLMService.blockKey',\n url: `${params.options.litellmApiBaseUrl}/key/block`,\n normalizedUrl: '/key/block',\n type: 'post',\n },\n source: params.config.metrics?.source || 'unset',\n target: {\n name: 'litellm',\n type: 'external',\n },\n }\n\n const body = {\n key: params.options.key,\n }\n\n const response = await request<BlockKeyResponse>({\n config: params.config,\n url: serviceContext.method.url,\n method: serviceContext.method.type,\n metricsDetails: serviceContext,\n type: 'json',\n headers: {\n Authorization: `Bearer ${params.options.apiToken}`,\n },\n body,\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\n return response.body!\n }\n\n /**\n * Unblock a key to re-enable it\n * POST /key/unblock\n */\n public static async unblockKey(\n params: UnblockKeyRequest,\n ): Promise<UnblockKeyResponse> {\n const serviceContext: RequestBaseServiceContext = {\n method: {\n name: 'LiteLLMService.unblockKey',\n url: `${params.options.litellmApiBaseUrl}/key/unblock`,\n normalizedUrl: '/key/unblock',\n type: 'post',\n },\n source: params.config.metrics?.source || 'unset',\n target: {\n name: 'litellm',\n type: 'external',\n },\n }\n\n const body = {\n key: params.options.key,\n }\n\n const response = await request<UnblockKeyResponse>({\n config: params.config,\n url: serviceContext.method.url,\n method: serviceContext.method.type,\n metricsDetails: serviceContext,\n type: 'json',\n headers: {\n Authorization: `Bearer ${params.options.apiToken}`,\n },\n body,\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\n return response.body!\n }\n\n /**\n * Get information about a key including usage and spend\n * GET /key/info\n */\n public static async getKeyInfo(\n params: GetKeyInfoRequest,\n ): Promise<GetKeyInfoResponse> {\n const serviceContext: RequestBaseServiceContext = {\n method: {\n name: 'LiteLLMService.getKeyInfo',\n url: `${params.options.litellmApiBaseUrl}/key/info?key=${encodeURIComponent(params.options.key)}`,\n normalizedUrl: '/key/info',\n type: 'get',\n },\n source: params.config.metrics?.source || 'unset',\n target: {\n name: 'litellm',\n type: 'external',\n },\n }\n\n const response = await request<GetKeyInfoResponse>({\n config: params.config,\n url: serviceContext.method.url,\n method: serviceContext.method.type,\n metricsDetails: serviceContext,\n headers: {\n Authorization: `Bearer ${params.options.apiToken}`,\n },\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\n return response.body!\n }\n\n /**\n * Delete a key\n * POST /key/delete\n */\n public static async deleteKey(\n params: DeleteKeyRequest,\n ): Promise<DeleteKeyResponse> {\n const serviceContext: RequestBaseServiceContext = {\n method: {\n name: 'LiteLLMService.deleteKey',\n url: `${params.options.litellmApiBaseUrl}/key/delete`,\n normalizedUrl: '/key/delete',\n type: 'post',\n },\n source: params.config.metrics?.source || 'unset',\n target: {\n name: 'litellm',\n type: 'external',\n },\n }\n\n const body = {\n keys: [params.options.key],\n }\n\n const response = await request<DeleteKeyResponse>({\n config: params.config,\n url: serviceContext.method.url,\n method: serviceContext.method.type,\n metricsDetails: serviceContext,\n type: 'json',\n headers: {\n Authorization: `Bearer ${params.options.apiToken}`,\n },\n body,\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\n return response.body!\n }\n\n /**\n * Delete a team\n * POST /team/delete\n */\n public static async deleteTeam(\n params: DeleteTeamRequest,\n ): Promise<DeleteTeamResponse> {\n const serviceContext: RequestBaseServiceContext = {\n method: {\n name: 'LiteLLMService.deleteTeam',\n url: `${params.options.litellmApiBaseUrl}/team/delete`,\n normalizedUrl: '/team/delete',\n type: 'post',\n },\n source: params.config.metrics?.source || 'unset',\n target: {\n name: 'litellm',\n type: 'external',\n },\n }\n\n const body = {\n team_ids: [params.options.team_id],\n }\n\n const response = await request<DeleteTeamResponse>({\n config: params.config,\n url: serviceContext.method.url,\n method: serviceContext.method.type,\n metricsDetails: serviceContext,\n type: 'json',\n headers: {\n Authorization: `Bearer ${params.options.apiToken}`,\n },\n body,\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\n return response.body!\n }\n}\n"],
|
|
5
|
+
"mappings": "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",
|
|
6
6
|
"names": []
|
|
7
7
|
}
|
|
@@ -18,6 +18,31 @@ export interface SlackLookupUserByEmailParams extends RequestBaseParams {
|
|
|
18
18
|
export interface SlackLookupUserByEmailResponse {
|
|
19
19
|
userId: string;
|
|
20
20
|
}
|
|
21
|
+
export interface SlackChatPostMessageParams extends RequestBaseParams {
|
|
22
|
+
params: {
|
|
23
|
+
channel: string;
|
|
24
|
+
blocks: Array<{
|
|
25
|
+
type: string;
|
|
26
|
+
[key: string]: any;
|
|
27
|
+
}>;
|
|
28
|
+
text?: string;
|
|
29
|
+
};
|
|
30
|
+
}
|
|
31
|
+
export interface SlackChatPostMessageResponse {
|
|
32
|
+
ok: boolean;
|
|
33
|
+
channel?: string;
|
|
34
|
+
ts?: string;
|
|
35
|
+
error?: string;
|
|
36
|
+
}
|
|
37
|
+
export interface SlackConversationsInviteParams extends RequestBaseParams {
|
|
38
|
+
params: {
|
|
39
|
+
channel: string;
|
|
40
|
+
users: string;
|
|
41
|
+
};
|
|
42
|
+
}
|
|
43
|
+
export interface SlackConversationsInviteResponse {
|
|
44
|
+
ok: boolean;
|
|
45
|
+
}
|
|
21
46
|
export declare class SlackService {
|
|
22
47
|
static incomingWebhook(params: IncomingWebhookRequest): Promise<any>;
|
|
23
48
|
/**
|
|
@@ -27,5 +52,17 @@ export declare class SlackService {
|
|
|
27
52
|
* @returns The Slack user ID, or undefined if not found.
|
|
28
53
|
*/
|
|
29
54
|
static lookupUserByEmail(params: SlackLookupUserByEmailParams): Promise<SlackLookupUserByEmailResponse | undefined>;
|
|
55
|
+
/**
|
|
56
|
+
* Posts a Block Kit message to a Slack channel using the Web API.
|
|
57
|
+
* Unlike webhooks, this supports user mention notifications.
|
|
58
|
+
* Requires config.auth.getToken() to return a Slack Bot Token.
|
|
59
|
+
*/
|
|
60
|
+
static chatPostMessage(params: SlackChatPostMessageParams): Promise<SlackChatPostMessageResponse>;
|
|
61
|
+
/**
|
|
62
|
+
* Invites a user to a Slack channel.
|
|
63
|
+
* Silently succeeds if the user is already in the channel.
|
|
64
|
+
* Requires config.auth.getToken() to return a Slack Bot Token.
|
|
65
|
+
*/
|
|
66
|
+
static conversationsInvite(params: SlackConversationsInviteParams): Promise<SlackConversationsInviteResponse>;
|
|
30
67
|
}
|
|
31
68
|
export {};
|
|
@@ -111,6 +111,104 @@ class SlackService {
|
|
|
111
111
|
}
|
|
112
112
|
return { userId: response.body.user.id };
|
|
113
113
|
}
|
|
114
|
+
/**
|
|
115
|
+
* Posts a Block Kit message to a Slack channel using the Web API.
|
|
116
|
+
* Unlike webhooks, this supports user mention notifications.
|
|
117
|
+
* Requires config.auth.getToken() to return a Slack Bot Token.
|
|
118
|
+
*/
|
|
119
|
+
static async chatPostMessage(params) {
|
|
120
|
+
const url = `${SLACK_API_BASE_URL}/chat.postMessage`;
|
|
121
|
+
const serviceContext = {
|
|
122
|
+
method: {
|
|
123
|
+
name: "SlackService.chatPostMessage",
|
|
124
|
+
url,
|
|
125
|
+
normalizedUrl: `${SLACK_API_BASE_URL}/chat.postMessage`,
|
|
126
|
+
type: "post"
|
|
127
|
+
},
|
|
128
|
+
source: params.config.metrics?.source || "unset",
|
|
129
|
+
target: {
|
|
130
|
+
name: "slack",
|
|
131
|
+
type: "external"
|
|
132
|
+
}
|
|
133
|
+
};
|
|
134
|
+
const { blocks, channel, text } = params.params;
|
|
135
|
+
const blockChunks = [];
|
|
136
|
+
if (blocks.length > MAX_BLOCKS_PER_MESSAGE) {
|
|
137
|
+
const blocksCopy = [...blocks];
|
|
138
|
+
while (blocksCopy.length > 0) {
|
|
139
|
+
blockChunks.push(blocksCopy.splice(0, MAX_BLOCKS_PER_MESSAGE));
|
|
140
|
+
}
|
|
141
|
+
} else {
|
|
142
|
+
blockChunks.push(blocks);
|
|
143
|
+
}
|
|
144
|
+
let lastBody = { ok: false };
|
|
145
|
+
for (let index = 0; index < blockChunks.length; index++) {
|
|
146
|
+
const response = await request({
|
|
147
|
+
config: params.config,
|
|
148
|
+
url,
|
|
149
|
+
method: serviceContext.method.type,
|
|
150
|
+
metricsDetails: serviceContext,
|
|
151
|
+
body: {
|
|
152
|
+
channel,
|
|
153
|
+
blocks: blockChunks[index],
|
|
154
|
+
text: text ?? ""
|
|
155
|
+
},
|
|
156
|
+
type: "json",
|
|
157
|
+
responseType: "json"
|
|
158
|
+
});
|
|
159
|
+
lastBody = response.body ?? { ok: false };
|
|
160
|
+
if (!lastBody.ok) {
|
|
161
|
+
return { ok: false, error: lastBody.error };
|
|
162
|
+
}
|
|
163
|
+
if (index < blockChunks.length - 1) {
|
|
164
|
+
await new Promise((resolve) => {
|
|
165
|
+
setTimeout(resolve, 1e3);
|
|
166
|
+
});
|
|
167
|
+
}
|
|
168
|
+
}
|
|
169
|
+
return {
|
|
170
|
+
ok: lastBody.ok,
|
|
171
|
+
channel: lastBody.channel,
|
|
172
|
+
ts: lastBody.ts,
|
|
173
|
+
error: lastBody.error
|
|
174
|
+
};
|
|
175
|
+
}
|
|
176
|
+
/**
|
|
177
|
+
* Invites a user to a Slack channel.
|
|
178
|
+
* Silently succeeds if the user is already in the channel.
|
|
179
|
+
* Requires config.auth.getToken() to return a Slack Bot Token.
|
|
180
|
+
*/
|
|
181
|
+
static async conversationsInvite(params) {
|
|
182
|
+
const url = `${SLACK_API_BASE_URL}/conversations.invite`;
|
|
183
|
+
const serviceContext = {
|
|
184
|
+
method: {
|
|
185
|
+
name: "SlackService.conversationsInvite",
|
|
186
|
+
url,
|
|
187
|
+
normalizedUrl: `${SLACK_API_BASE_URL}/conversations.invite`,
|
|
188
|
+
type: "post"
|
|
189
|
+
},
|
|
190
|
+
source: params.config.metrics?.source || "unset",
|
|
191
|
+
target: {
|
|
192
|
+
name: "slack",
|
|
193
|
+
type: "external"
|
|
194
|
+
}
|
|
195
|
+
};
|
|
196
|
+
const response = await request({
|
|
197
|
+
config: params.config,
|
|
198
|
+
url,
|
|
199
|
+
method: serviceContext.method.type,
|
|
200
|
+
metricsDetails: serviceContext,
|
|
201
|
+
body: {
|
|
202
|
+
channel: params.params.channel,
|
|
203
|
+
users: params.params.users
|
|
204
|
+
},
|
|
205
|
+
type: "json",
|
|
206
|
+
responseType: "json"
|
|
207
|
+
});
|
|
208
|
+
return {
|
|
209
|
+
ok: (response.body?.ok || response.body?.error === "already_in_channel") ?? false
|
|
210
|
+
};
|
|
211
|
+
}
|
|
114
212
|
}
|
|
115
213
|
export {
|
|
116
214
|
SlackService
|
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
{
|
|
2
2
|
"version": 3,
|
|
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;
|
|
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 interface SlackChatPostMessageParams extends RequestBaseParams {\n params: {\n channel: string\n blocks: Array<{ type: string; [key: string]: any }>\n text?: string\n }\n}\n\nexport interface SlackChatPostMessageResponse {\n ok: boolean\n channel?: string\n ts?: string\n error?: string\n}\n\nexport interface SlackConversationsInviteParams extends RequestBaseParams {\n params: {\n channel: string\n users: string\n }\n}\n\nexport interface SlackConversationsInviteResponse {\n ok: boolean\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 /**\n * Posts a Block Kit message to a Slack channel using the Web API.\n * Unlike webhooks, this supports user mention notifications.\n * Requires config.auth.getToken() to return a Slack Bot Token.\n */\n public static async chatPostMessage(\n params: SlackChatPostMessageParams,\n ): Promise<SlackChatPostMessageResponse> {\n const url = `${SLACK_API_BASE_URL}/chat.postMessage`\n const serviceContext: RequestBaseServiceContext = {\n method: {\n name: 'SlackService.chatPostMessage',\n url,\n normalizedUrl: `${SLACK_API_BASE_URL}/chat.postMessage`,\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, channel, text } = params.params\n const blockChunks: Array<Array<{ type: string; [key: string]: any }>> = []\n\n if (blocks.length > MAX_BLOCKS_PER_MESSAGE) {\n const blocksCopy = [...blocks]\n while (blocksCopy.length > 0) {\n blockChunks.push(blocksCopy.splice(0, MAX_BLOCKS_PER_MESSAGE))\n }\n } else {\n blockChunks.push(blocks)\n }\n\n let lastBody: {\n ok: boolean\n channel?: string\n ts?: string\n error?: string\n } = { ok: false }\n\n for (let index = 0; index < blockChunks.length; index++) {\n // eslint-disable-next-line no-await-in-loop\n const response = await request<{\n ok: boolean\n channel?: string\n ts?: string\n error?: string\n }>({\n config: params.config,\n url,\n method: serviceContext.method.type,\n metricsDetails: serviceContext,\n body: {\n channel,\n blocks: blockChunks[index],\n text: text ?? '',\n },\n type: 'json',\n responseType: 'json',\n })\n\n lastBody = response.body ?? { ok: false }\n\n if (!lastBody.ok) {\n return { ok: false, error: lastBody.error }\n }\n\n if (index < blockChunks.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 return {\n ok: lastBody.ok,\n channel: lastBody.channel,\n ts: lastBody.ts,\n error: lastBody.error,\n }\n }\n\n /**\n * Invites a user to a Slack channel.\n * Silently succeeds if the user is already in the channel.\n * Requires config.auth.getToken() to return a Slack Bot Token.\n */\n public static async conversationsInvite(\n params: SlackConversationsInviteParams,\n ): Promise<SlackConversationsInviteResponse> {\n const url = `${SLACK_API_BASE_URL}/conversations.invite`\n const serviceContext: RequestBaseServiceContext = {\n method: {\n name: 'SlackService.conversationsInvite',\n url,\n normalizedUrl: `${SLACK_API_BASE_URL}/conversations.invite`,\n type: 'post',\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; error?: string }>({\n config: params.config,\n url,\n method: serviceContext.method.type,\n metricsDetails: serviceContext,\n body: {\n channel: params.params.channel,\n users: params.params.users,\n },\n type: 'json',\n responseType: 'json',\n })\n\n return {\n ok:\n (response.body?.ok || response.body?.error === 'already_in_channel') ??\n false,\n }\n }\n}\n"],
|
|
5
|
+
"mappings": "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",
|
|
6
6
|
"names": []
|
|
7
7
|
}
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@camunda/ccma-api",
|
|
3
|
-
"version": "0.0.
|
|
3
|
+
"version": "0.0.6",
|
|
4
4
|
"description": "Centralized API service layer for Camunda Cloud Management Apps",
|
|
5
5
|
"bugs": {
|
|
6
6
|
"url": "https://github.com/camunda/camunda-cloud-management-apps/issues"
|
|
@@ -41,13 +41,14 @@
|
|
|
41
41
|
}
|
|
42
42
|
},
|
|
43
43
|
"dependencies": {
|
|
44
|
-
"@camunda/ccma-shared-types": "0.0.
|
|
44
|
+
"@camunda/ccma-shared-types": "0.0.6"
|
|
45
45
|
},
|
|
46
46
|
"scripts": {
|
|
47
47
|
"build": "node esbuild.mjs && tsc --emitDeclarationOnly --outDir dist",
|
|
48
48
|
"prettier": "pnpm exec prettier --write \"./src/**/*.ts\"",
|
|
49
49
|
"lint": "biome lint ./src",
|
|
50
50
|
"lint-fix": "biome check --write ./src",
|
|
51
|
+
"test": "vitest run",
|
|
51
52
|
"typecheck": "tsc --noEmit"
|
|
52
53
|
}
|
|
53
54
|
}
|