paperclip-plugin-telegram 0.8.0 → 0.8.1

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
@@ -0,0 +1 @@
1
+ {"version":3,"file":"command-definition-validation.js","sourceRoot":"","sources":["../src/command-definition-validation.ts"],"names":[],"mappings":"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"}
@@ -1,3 +1,64 @@
1
1
  import type { PluginContext } from "@paperclipai/plugin-sdk";
2
+ export type WorkflowStepBase = {
3
+ id: string;
4
+ name?: string;
5
+ };
6
+ export type FetchIssueStep = WorkflowStepBase & {
7
+ type: "fetch_issue";
8
+ issueId: string;
9
+ };
10
+ export type InvokeAgentStep = WorkflowStepBase & {
11
+ type: "invoke_agent";
12
+ agentId: string;
13
+ prompt: string;
14
+ };
15
+ export type HttpRequestStep = WorkflowStepBase & {
16
+ type: "http_request";
17
+ url: string;
18
+ method: "GET" | "POST" | "PUT" | "DELETE";
19
+ headers?: Record<string, string>;
20
+ body?: string;
21
+ };
22
+ export type SendMessageStep = WorkflowStepBase & {
23
+ type: "send_message";
24
+ text: string;
25
+ };
26
+ export type CreateIssueStep = WorkflowStepBase & {
27
+ type: "create_issue";
28
+ title: string;
29
+ description?: string;
30
+ projectId?: string;
31
+ assigneeAgentId?: string;
32
+ };
33
+ export type WaitApprovalStep = WorkflowStepBase & {
34
+ type: "wait_approval";
35
+ prompt: string;
36
+ timeoutMs?: number;
37
+ };
38
+ export type SetStateStep = WorkflowStepBase & {
39
+ type: "set_state";
40
+ key: string;
41
+ value: string;
42
+ };
43
+ export type WorkflowStep = FetchIssueStep | InvokeAgentStep | HttpRequestStep | SendMessageStep | CreateIssueStep | WaitApprovalStep | SetStateStep;
44
+ export type CustomCommand = {
45
+ name: string;
46
+ description: string;
47
+ steps: WorkflowStep[];
48
+ createdBy: string;
49
+ createdAt: string;
50
+ };
2
51
  export declare function handleCommandsCommand(ctx: PluginContext, token: string, chatId: string, args: string, messageThreadId?: number, companyId?: string): Promise<void>;
3
52
  export declare function tryCustomCommand(ctx: PluginContext, token: string, chatId: string, command: string, argsStr: string, messageThreadId?: number, companyId?: string): Promise<boolean>;
53
+ /** True for the two callbacks a wait_approval step's buttons send back. */
54
+ export declare function isWorkflowApprovalCallback(data: string): boolean;
55
+ /**
56
+ * Resume or abandon a workflow parked at an approval gate.
57
+ *
58
+ * The parked state is deleted before the remaining steps run. That ordering is
59
+ * the point: it makes a second press of the same button a no-op instead of
60
+ * running the tail of the workflow twice. Telegram leaves the buttons on screen
61
+ * and re-delivers callbacks it considers unacknowledged, so a double press is
62
+ * the expected case, not the unlucky one.
63
+ */
64
+ export declare function resolveWorkflowApprovalCallback(ctx: PluginContext, token: string, data: string, callbackQueryId: string, actor: string, messageId?: number): Promise<void>;
@@ -1,5 +1,18 @@
1
- import { sendMessage, escapeMarkdownV2, sendChatAction } from "./telegram-api.js";
1
+ import { sendMessage, escapeMarkdownV2, sendChatAction, answerCallbackQuery, editMessage } from "./telegram-api.js";
2
2
  import { METRIC_NAMES } from "./constants.js";
3
+ import { validateCommandDefinition } from "./command-definition-validation.js";
4
+ /**
5
+ * Returned by a `wait_approval` step to tell executeWorkflow to stop and park.
6
+ * Carries the approval id so the continuation is stored under the same key the
7
+ * buttons will send back.
8
+ */
9
+ const AWAITING_APPROVAL_PREFIX = "__awaiting_approval__:";
10
+ /** Callback data prefixes for the two buttons a wait_approval step sends. */
11
+ const APPROVE_PREFIX = "cmd_approve_";
12
+ const REJECT_PREFIX = "cmd_reject_";
13
+ function approvalStateKey(approvalId) {
14
+ return `cmd_approval_${approvalId}`;
15
+ }
3
16
  // --- Built-in commands ---
4
17
  const BUILTIN_COMMANDS = new Set([
5
18
  "status", "issues", "agents", "approve", "help",
@@ -78,41 +91,31 @@ async function importCommand(ctx, token, chatId, jsonStr, messageThreadId, compa
78
91
  await sendMessage(ctx, token, chatId, "Usage: /commands import <json-definition>", { messageThreadId });
79
92
  return;
80
93
  }
81
- let definition;
94
+ let parsed;
82
95
  try {
83
- definition = JSON.parse(jsonStr);
96
+ parsed = JSON.parse(jsonStr);
84
97
  }
85
98
  catch {
86
99
  await sendMessage(ctx, token, chatId, "Invalid JSON. Please provide a valid command definition.", { messageThreadId });
87
100
  return;
88
101
  }
89
- if (!definition.name || !definition.steps || !Array.isArray(definition.steps)) {
90
- await sendMessage(ctx, token, chatId, "Command definition must have 'name' and 'steps' fields.", { messageThreadId });
102
+ const validation = validateCommandDefinition(parsed);
103
+ if (!validation.ok) {
104
+ await sendMessage(ctx, token, chatId, validation.error, { messageThreadId });
91
105
  return;
92
106
  }
107
+ const definition = validation.definition;
93
108
  if (BUILTIN_COMMANDS.has(definition.name)) {
94
109
  await sendMessage(ctx, token, chatId, `Cannot override built-in command: /${definition.name}`, { messageThreadId });
95
110
  return;
96
111
  }
97
- // Validate steps
98
- for (const step of definition.steps) {
99
- if (!step.type || !step.id) {
100
- await sendMessage(ctx, token, chatId, "Each step must have 'type' and 'id' fields.", { messageThreadId });
101
- return;
102
- }
103
- const validTypes = ["fetch_issue", "invoke_agent", "http_request", "send_message", "create_issue", "wait_approval", "set_state"];
104
- if (!validTypes.includes(step.type)) {
105
- await sendMessage(ctx, token, chatId, `Invalid step type: ${step.type}. Valid: ${validTypes.join(", ")}`, { messageThreadId });
106
- return;
107
- }
108
- }
109
112
  const resolvedCompanyId = companyId ?? chatId;
110
113
  const commands = await getCommandRegistry(ctx, resolvedCompanyId);
111
114
  // Replace existing or add new
112
115
  const existingIdx = commands.findIndex((c) => c.name === definition.name);
113
116
  const newCmd = {
114
117
  name: definition.name,
115
- description: definition.description ?? "No description",
118
+ description: definition.description,
116
119
  steps: definition.steps,
117
120
  createdBy: `telegram:${chatId}`,
118
121
  createdAt: new Date().toISOString(),
@@ -152,13 +155,39 @@ async function runCommand(ctx, token, chatId, name, args, messageThreadId, compa
152
155
  await executeWorkflow(ctx, token, chatId, cmd, args, messageThreadId, resolvedCompanyId);
153
156
  }
154
157
  // --- Workflow executor ---
155
- async function executeWorkflow(ctx, token, chatId, cmd, args, messageThreadId, companyId) {
158
+ async function executeWorkflow(ctx, token, chatId, cmd, args, messageThreadId, companyId, startIndex = 0, priorResults = []) {
156
159
  await sendChatAction(ctx, token, chatId);
157
- await ctx.metrics.write(METRIC_NAMES.commandsExecuted, 1);
158
- const results = [];
159
- for (const step of cmd.steps) {
160
+ if (startIndex === 0) {
161
+ await ctx.metrics.write(METRIC_NAMES.commandsExecuted, 1);
162
+ }
163
+ const results = [...priorResults];
164
+ for (let index = startIndex; index < cmd.steps.length; index++) {
165
+ const step = cmd.steps[index];
160
166
  try {
161
167
  const result = await executeStep(ctx, token, chatId, step, args, results, messageThreadId, companyId);
168
+ // An approval gate stops the run here. Continuing would execute the very
169
+ // steps the gate exists to hold back — which is what this used to do,
170
+ // making the Approve button decorative.
171
+ if (typeof result === "string" && result.startsWith(AWAITING_APPROVAL_PREFIX)) {
172
+ const approvalId = result.slice(AWAITING_APPROVAL_PREFIX.length);
173
+ const parked = {
174
+ commandName: cmd.name,
175
+ args,
176
+ results,
177
+ nextStepIndex: index + 1,
178
+ chatId,
179
+ messageThreadId,
180
+ companyId,
181
+ createdAt: Date.now(),
182
+ };
183
+ await ctx.state.set({ scopeKind: "instance", stateKey: approvalStateKey(approvalId) }, parked);
184
+ ctx.logger.info("Workflow parked awaiting approval", {
185
+ command: cmd.name,
186
+ stepId: step.id,
187
+ approvalId,
188
+ });
189
+ return;
190
+ }
162
191
  results.push({ stepId: step.id, result: result ?? "" });
163
192
  }
164
193
  catch (err) {
@@ -236,20 +265,35 @@ async function executeStep(ctx, token, chatId, step, args, prevResults, messageT
236
265
  }
237
266
  case "wait_approval": {
238
267
  const prompt = interpolate(step.prompt);
239
- const approvalId = `cmd_approval_${Date.now()}`;
268
+ // Unique per step within a run: Date.now() alone collides when two steps
269
+ // park in the same millisecond, and a collision would resume the wrong
270
+ // continuation.
271
+ const approvalId = `${Date.now()}_${step.id}`;
240
272
  await sendMessage(ctx, token, chatId, prompt, {
241
273
  messageThreadId,
242
274
  inlineKeyboard: [
243
275
  [
244
- { text: "Approve", callback_data: `cmd_approve_${approvalId}` },
245
- { text: "Reject", callback_data: `cmd_reject_${approvalId}` },
276
+ { text: "Approve", callback_data: `${APPROVE_PREFIX}${approvalId}` },
277
+ { text: "Reject", callback_data: `${REJECT_PREFIX}${approvalId}` },
246
278
  ],
247
279
  ],
248
280
  });
249
- // Store approval state - workflow will be continued by callback handler
250
- await ctx.state.set({ scopeKind: "instance", stateKey: `cmd_approval_${approvalId}` }, { status: "pending", createdAt: Date.now() });
251
- return "awaiting_approval";
281
+ // executeWorkflow stores the continuation under this id and stops. The
282
+ // state is written there rather than here because only the loop knows
283
+ // which step comes next.
284
+ return `${AWAITING_APPROVAL_PREFIX}${approvalId}`;
252
285
  }
286
+ // NOTE: there is deliberately no "choice" step that blocks inline.
287
+ //
288
+ // A step that asks the user to pick and *awaits* the answer cannot work
289
+ // here: updates are processed strictly sequentially, so a workflow that
290
+ // blocks on a button press blocks the loop that would deliver it. The
291
+ // press can never arrive and the run stalls until it times out.
292
+ //
293
+ // `wait_approval` is how such a step has to be built instead: send the
294
+ // buttons, persist the continuation, return, and let the callback handler
295
+ // resume the run. A `choice` step can be added the same way — park the
296
+ // context keyed by an id and resolve it in resolveWorkflowApprovalCallback.
253
297
  case "set_state": {
254
298
  const key = interpolate(step.key);
255
299
  const value = interpolate(step.value);
@@ -260,6 +304,66 @@ async function executeStep(ctx, token, chatId, step, args, prevResults, messageT
260
304
  return null;
261
305
  }
262
306
  }
307
+ // --- Approval callbacks ---
308
+ /** True for the two callbacks a wait_approval step's buttons send back. */
309
+ export function isWorkflowApprovalCallback(data) {
310
+ return data.startsWith(APPROVE_PREFIX) || data.startsWith(REJECT_PREFIX);
311
+ }
312
+ /**
313
+ * Resume or abandon a workflow parked at an approval gate.
314
+ *
315
+ * The parked state is deleted before the remaining steps run. That ordering is
316
+ * the point: it makes a second press of the same button a no-op instead of
317
+ * running the tail of the workflow twice. Telegram leaves the buttons on screen
318
+ * and re-delivers callbacks it considers unacknowledged, so a double press is
319
+ * the expected case, not the unlucky one.
320
+ */
321
+ export async function resolveWorkflowApprovalCallback(ctx, token, data, callbackQueryId, actor, messageId) {
322
+ const approved = data.startsWith(APPROVE_PREFIX);
323
+ const approvalId = data.slice((approved ? APPROVE_PREFIX : REJECT_PREFIX).length);
324
+ const stateKey = approvalStateKey(approvalId);
325
+ const parked = await ctx.state.get({
326
+ scopeKind: "instance",
327
+ stateKey,
328
+ });
329
+ if (!parked || parked.resolved) {
330
+ // Already decided, or from a build before the continuation was persisted.
331
+ // Saying so beats silence, which would read as the button doing nothing.
332
+ await answerCallbackQuery(ctx, token, callbackQueryId, "This approval is no longer pending.");
333
+ return;
334
+ }
335
+ await ctx.state.set({ scopeKind: "instance", stateKey }, { ...parked, resolved: true });
336
+ if (!approved) {
337
+ await answerCallbackQuery(ctx, token, callbackQueryId, "Rejected");
338
+ if (messageId) {
339
+ await editMessage(ctx, token, parked.chatId, messageId, `Rejected by ${actor}. The workflow stopped here.`);
340
+ }
341
+ ctx.logger.info("Workflow rejected at approval gate", {
342
+ command: parked.commandName,
343
+ approvalId,
344
+ actor,
345
+ });
346
+ return;
347
+ }
348
+ await answerCallbackQuery(ctx, token, callbackQueryId, "Approved");
349
+ if (messageId) {
350
+ const edited = await editMessage(ctx, token, parked.chatId, messageId, `Approved by ${actor}. Continuing.`);
351
+ if (!edited) {
352
+ ctx.logger.error("editMessage after approval failed", {
353
+ chatId: parked.chatId,
354
+ messageId,
355
+ });
356
+ }
357
+ }
358
+ const commands = await getCommandRegistry(ctx, parked.companyId);
359
+ const cmd = commands.find((c) => c.name === parked.commandName);
360
+ if (!cmd) {
361
+ // The command was edited or deleted while the approval sat pending.
362
+ await sendMessage(ctx, token, parked.chatId, `Approved, but /${parked.commandName} no longer exists — nothing to continue.`, { messageThreadId: parked.messageThreadId });
363
+ return;
364
+ }
365
+ await executeWorkflow(ctx, token, parked.chatId, cmd, parked.args, parked.messageThreadId, parked.companyId, parked.nextStepIndex, parked.results);
366
+ }
263
367
  // --- State helpers ---
264
368
  async function getCommandRegistry(ctx, companyId) {
265
369
  const commands = await ctx.state.get({
@@ -1 +1 @@
1
- {"version":3,"file":"command-registry.js","sourceRoot":"","sources":["../src/command-registry.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"command-registry.js","sourceRoot":"","sources":["../src/command-registry.ts"],"names":[],"mappings":"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"}
@@ -4,7 +4,16 @@ type BotCommand = {
4
4
  description: string;
5
5
  };
6
6
  export declare const BOT_COMMANDS: BotCommand[];
7
- export declare function handleCommand(ctx: PluginContext, token: string, chatId: string, command: string, args: string, messageThreadId?: number, baseUrl?: string, publicUrl?: string, companyId?: string, boardApiToken?: string, maxAgentsPerThread?: number): Promise<void>;
7
+ type HelpEntry = {
8
+ usage: string;
9
+ description: string;
10
+ };
11
+ type HelpGroup = {
12
+ title: string;
13
+ entries: HelpEntry[];
14
+ };
15
+ export declare const HELP_GROUPS: HelpGroup[];
16
+ export declare function handleCommand(ctx: PluginContext, token: string, chatId: string, command: string, args: string, messageThreadId?: number, baseUrl?: string, publicUrl?: string, companyId?: string, boardApiToken?: string, maxAgentsPerThread?: number, connectCompanyIds?: readonly string[]): Promise<void>;
8
17
  export declare function handleConnectTopic(ctx: PluginContext, token: string, chatId: string, args: string, messageThreadId?: number): Promise<void>;
9
18
  export declare function getTopicForProject(ctx: PluginContext, chatId: string, projectName?: string): Promise<number | undefined>;
10
19
  export declare function resolveNotificationThreadId(ctx: PluginContext, chatId: string, event: PluginEvent, topicRouting: boolean): Promise<number | undefined>;
package/dist/commands.js CHANGED
@@ -1,8 +1,10 @@
1
+ import { JsonRpcCallError, PLUGIN_RPC_ERROR_CODES } from "@paperclipai/plugin-sdk";
1
2
  import { sendMessage, escapeMarkdownV2, sendChatAction } from "./telegram-api.js";
2
3
  import { METRIC_NAMES } from "./constants.js";
3
4
  import { countAgents } from "./agent-status.js";
4
5
  import { handleAcpCommand } from "./acp-bridge.js";
5
6
  import { buildPaperclipAuthHeaders, fetchPaperclipApi } from "./paperclip-api.js";
7
+ import { str } from "./coerce.js";
6
8
  // Leaves headroom below Telegram's 4096-char hard limit for /agents so a
7
9
  // company with many agents doesn't produce a message the API silently drops.
8
10
  const AGENTS_MESSAGE_CHAR_BUDGET = 3500;
@@ -19,7 +21,47 @@ export const BOT_COMMANDS = [
19
21
  { command: "acp", description: "Manage agent sessions (spawn, status, cancel, close)" },
20
22
  { command: "commands", description: "Manage custom workflow commands (list, import, run, delete)" },
21
23
  ];
22
- export async function handleCommand(ctx, token, chatId, command, args, messageThreadId, baseUrl, publicUrl, companyId, boardApiToken, maxAgentsPerThread) {
24
+ // Grouped by task rather than BOT_COMMANDS's flat menu order: a first-time
25
+ // user scanning /help should be able to tell "what do I use for approvals"
26
+ // at a glance, not read 11 undifferentiated lines. Every command in
27
+ // BOT_COMMANDS appears in exactly one group here (enforced by a test).
28
+ export const HELP_GROUPS = [
29
+ {
30
+ title: "Daily use",
31
+ entries: [
32
+ { usage: "/create <task title>", description: "Create a new task (assigned to CEO agent)" },
33
+ { usage: "/status", description: "Company health: active agents, open issues" },
34
+ { usage: "/issues [project]", description: "List open issues (optionally by project)" },
35
+ { usage: "/help", description: "Show available commands" },
36
+ ],
37
+ },
38
+ {
39
+ title: "Approvals",
40
+ entries: [{ usage: "/approve <approval-id>", description: "Approve a pending request by ID" }],
41
+ },
42
+ {
43
+ title: "Agent sessions",
44
+ entries: [
45
+ { usage: "/acp <spawn|status|cancel|close>", description: "Manage agent sessions" },
46
+ { usage: "/agents", description: "List agents with current status" },
47
+ ],
48
+ },
49
+ {
50
+ title: "Automation",
51
+ entries: [
52
+ { usage: "/commands <list|import|run|delete>", description: "Manage custom workflow commands" },
53
+ ],
54
+ },
55
+ {
56
+ title: "Setup",
57
+ entries: [
58
+ { usage: "/connect <company-name>", description: "Link this chat to a Paperclip company" },
59
+ { usage: "/connect_topic <project-name> [topic-id]", description: "Map a project to a forum topic" },
60
+ { usage: "/topics <list|remove|clear>", description: "List or remove forum topic mappings" },
61
+ ],
62
+ },
63
+ ];
64
+ export async function handleCommand(ctx, token, chatId, command, args, messageThreadId, baseUrl, publicUrl, companyId, boardApiToken, maxAgentsPerThread, connectCompanyIds) {
23
65
  await ctx.metrics.write(METRIC_NAMES.commandsHandled, 1);
24
66
  switch (command) {
25
67
  case "create":
@@ -47,7 +89,7 @@ export async function handleCommand(ctx, token, chatId, command, args, messageTh
47
89
  await handleHelp(ctx, token, chatId, messageThreadId);
48
90
  break;
49
91
  case "connect":
50
- await handleConnect(ctx, token, chatId, args, messageThreadId);
92
+ await handleConnect(ctx, token, chatId, args, messageThreadId, connectCompanyIds);
51
93
  break;
52
94
  case "connect_topic":
53
95
  await handleConnectTopic(ctx, token, chatId, args, messageThreadId);
@@ -203,31 +245,56 @@ async function handleApprove(ctx, token, chatId, approvalId, messageThreadId, ba
203
245
  }
204
246
  }
205
247
  async function handleHelp(ctx, token, chatId, messageThreadId) {
206
- const lines = [
207
- escapeMarkdownV2("📎") + " *Paperclip Bot Commands*",
208
- "",
209
- ...BOT_COMMANDS.map((cmd) => `/${escapeMarkdownV2(cmd.command)} \\- ${escapeMarkdownV2(cmd.description)}`),
210
- ];
248
+ const lines = [escapeMarkdownV2("📎") + " *Paperclip Bot Commands*"];
249
+ for (const group of HELP_GROUPS) {
250
+ lines.push("");
251
+ lines.push(`*${escapeMarkdownV2(group.title)}*`);
252
+ for (const entry of group.entries) {
253
+ lines.push(`${escapeMarkdownV2(entry.usage)} \\- ${escapeMarkdownV2(entry.description)}`);
254
+ }
255
+ }
256
+ lines.push("");
257
+ lines.push(escapeMarkdownV2("Run a command with no arguments (e.g. /acp) to see its full usage."));
211
258
  await sendMessage(ctx, token, chatId, lines.join("\n"), {
212
259
  parseMode: "MarkdownV2",
213
260
  messageThreadId,
214
261
  });
215
262
  }
216
- async function handleConnect(ctx, token, chatId, companyArg, messageThreadId) {
263
+ // Background commands cannot discover companies with an unscoped list call:
264
+ // it races with live host invocations. IDs come from verified config deliveries;
265
+ // re-reading each explicit company lets the host enforce current authorization.
266
+ async function connectCompanies(ctx, companyIds) {
267
+ if (companyIds === undefined)
268
+ return ctx.companies.list();
269
+ const companies = await Promise.all(companyIds.map(async (id) => {
270
+ try {
271
+ return await ctx.companies.get(id);
272
+ }
273
+ catch (err) {
274
+ // Revoked scopes are unavailable, but a timeout or host failure must
275
+ // remain an error instead of masquerading as a missing company.
276
+ if (err instanceof JsonRpcCallError && err.code === PLUGIN_RPC_ERROR_CODES.INVOCATION_SCOPE_DENIED)
277
+ return null;
278
+ throw err;
279
+ }
280
+ }));
281
+ return companies.filter((company) => company !== null);
282
+ }
283
+ async function handleConnect(ctx, token, chatId, companyArg, messageThreadId, connectCompanyIds) {
217
284
  if (!companyArg.trim()) {
218
285
  try {
219
- const companies = await ctx.companies.list();
286
+ const companies = await connectCompanies(ctx, connectCompanyIds);
220
287
  const names = companies.map((c) => c.name || c.id).join(", ");
221
288
  await sendMessage(ctx, token, chatId, `Usage: /connect <company-name>\nAvailable: ${names || "none"}`, { messageThreadId });
222
289
  }
223
290
  catch {
224
- await sendMessage(ctx, token, chatId, "Usage: /connect <company-name>", { messageThreadId });
291
+ await sendMessage(ctx, token, chatId, "Usage: /connect <company-name>\nCould not load available companies. Please try again.", { messageThreadId });
225
292
  }
226
293
  return;
227
294
  }
228
295
  try {
229
296
  const input = companyArg.trim();
230
- const companies = await ctx.companies.list();
297
+ const companies = await connectCompanies(ctx, connectCompanyIds);
231
298
  const match = companies.find((c) => c.id === input ||
232
299
  c.name?.toLowerCase() === input.toLowerCase());
233
300
  if (!match) {
@@ -518,10 +585,10 @@ export async function resolveNotificationThreadId(ctx, chatId, event, topicRouti
518
585
  }
519
586
  async function resolveEventProjectName(ctx, event) {
520
587
  const payload = event.payload;
521
- const payloadProjectName = payload.projectName ? String(payload.projectName) : undefined;
588
+ const payloadProjectName = payload.projectName ? str(payload.projectName) : undefined;
522
589
  if (payloadProjectName)
523
590
  return payloadProjectName;
524
- const payloadProjectId = payload.projectId ? String(payload.projectId) : undefined;
591
+ const payloadProjectId = payload.projectId ? str(payload.projectId) : undefined;
525
592
  if (payloadProjectId) {
526
593
  try {
527
594
  const project = await ctx.projects.get(payloadProjectId, event.companyId);