@mgsoftwarebv/mcp-server-bridge 3.3.6 → 3.3.8

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/README.md CHANGED
@@ -98,11 +98,11 @@ Use **get-teams** to list the providers you can act on and copy a `teamId`.
98
98
  - **get-teams** — list the provider teams (workspaces) you can act on; use a returned id as `teamId` on other tools
99
99
 
100
100
  ### Tickets, Customers & Projects
101
- - **get-tickets** — list tickets with filters (status, priority, project, customer, text query)
102
- - **get-ticket-by-id** — fetch one ticket with comment text, a full attachment listing (ids), and inline images (base64)
103
- - **create-ticket** — create a new ticket
104
- - **update-ticket** — update fields (title, description, status, priority, type, project, customer, assignee, estimated hours); `assigneeId: null` unassigns
105
- - **add-ticket-comment** — add a comment (plain text or TipTap JSON); `isInternal` for internal-only notes
101
+ - **get-tickets** — list tickets with filters (status, priority, project, customer, text query); each result includes the ticket ID (UUID) and ticket number
102
+ - **get-ticket-by-id** — fetch one ticket by UUID or ticket number, with comment text, a full attachment listing (ids), and inline images (base64)
103
+ - **create-ticket** — create a new ticket (returns UUID and ticket number)
104
+ - **update-ticket** — update fields (title, description, status, priority, type, project, customer, assignee, estimated hours); accepts UUID or ticket number; `assigneeId: null` unassigns
105
+ - **add-ticket-comment** — add a comment (plain text or TipTap JSON); accepts UUID or ticket number; `isInternal` for internal-only notes
106
106
  - **get-ticket-comments** — read all comments as plain text (author, internal flag, timestamp)
107
107
  - **get-ticket-attachment** — get a 1-hour signed download URL for any ticket/comment attachment (any file type)
108
108
  - **get-customers** — list/search customers
package/dist/index.js CHANGED
@@ -92216,13 +92216,13 @@ function construct(client, config3 = {}) {
92216
92216
  };
92217
92217
  }
92218
92218
  const session = new PostgresJsSession(client, dialect, schema, { logger: logger2, cache: config3.cache });
92219
- const db2 = new PostgresJsDatabase(dialect, session, schema);
92220
- db2.$client = client;
92221
- db2.$cache = config3.cache;
92222
- if (db2.$cache) {
92223
- db2.$cache["invalidate"] = config3.cache?.onMutate;
92219
+ const db3 = new PostgresJsDatabase(dialect, session, schema);
92220
+ db3.$client = client;
92221
+ db3.$cache = config3.cache;
92222
+ if (db3.$cache) {
92223
+ db3.$cache["invalidate"] = config3.cache?.onMutate;
92224
92224
  }
92225
- return db2;
92225
+ return db3;
92226
92226
  }
92227
92227
  function drizzle(...params) {
92228
92228
  if (typeof params[0] === "string") {
@@ -103378,12 +103378,12 @@ var createJobDb = () => {
103378
103378
  connect_timeout: 10
103379
103379
  // 10 second connection timeout
103380
103380
  });
103381
- const db2 = drizzle(jobPool, {
103381
+ const db3 = drizzle(jobPool, {
103382
103382
  schema: schema_exports,
103383
103383
  casing: "snake_case"
103384
103384
  });
103385
103385
  return {
103386
- db: db2,
103386
+ db: db3,
103387
103387
  disconnect: () => jobPool.end()
103388
103388
  };
103389
103389
  };
@@ -105508,6 +105508,10 @@ var teamIdProp = {
105508
105508
  type: "string",
105509
105509
  description: "Provider team ID. Optional when you belong to a single provider; required when you belong to several. Call get-teams to list the providers you can act on."
105510
105510
  };
105511
+ var ticketIdentifierProp = {
105512
+ type: "string",
105513
+ description: "Ticket ID (UUID) or ticket number (e.g. 2026-REFRO-116). Pass teamId when using a ticket number across multiple providers."
105514
+ };
105511
105515
  var TOOLS = [
105512
105516
  {
105513
105517
  name: "get-teams",
@@ -105520,7 +105524,7 @@ var TOOLS = [
105520
105524
  },
105521
105525
  {
105522
105526
  name: "get-tickets",
105523
- description: "Get tickets with optional filtering by status, priority, project, customer, tags, or search query. Each ticket includes its tags.",
105527
+ description: "Get tickets with optional filtering by status, priority, project, customer, tags, or search query. Each ticket includes its ID (UUID), ticket number, and tags.",
105524
105528
  inputSchema: {
105525
105529
  type: "object",
105526
105530
  properties: {
@@ -105567,12 +105571,12 @@ var TOOLS = [
105567
105571
  },
105568
105572
  {
105569
105573
  name: "get-ticket-by-id",
105570
- description: "Get a specific ticket by its ID, including tags, comment text and a full attachment listing (with ids). Images from ticket and comment attachments are downloaded and returned inline as base64. For non-image attachments, call get-ticket-attachment with the listed id to get a download URL.",
105574
+ description: "Get a specific ticket by its ID or ticket number, including tags, comment text and a full attachment listing (with ids). Images from ticket and comment attachments are downloaded and returned inline as base64. For non-image attachments, call get-ticket-attachment with the listed id to get a download URL.",
105571
105575
  inputSchema: {
105572
105576
  type: "object",
105573
105577
  properties: {
105574
105578
  teamId: teamIdProp,
105575
- id: { type: "string", description: "Ticket ID" }
105579
+ id: ticketIdentifierProp
105576
105580
  },
105577
105581
  required: ["id"]
105578
105582
  }
@@ -105642,7 +105646,7 @@ var TOOLS = [
105642
105646
  type: "object",
105643
105647
  properties: {
105644
105648
  teamId: teamIdProp,
105645
- id: { type: "string", description: "Ticket ID" },
105649
+ id: ticketIdentifierProp,
105646
105650
  title: { type: "string" },
105647
105651
  description: {
105648
105652
  type: "string",
@@ -105844,7 +105848,7 @@ var TOOLS = [
105844
105848
  type: "object",
105845
105849
  properties: {
105846
105850
  teamId: teamIdProp,
105847
- ticketId: { type: "string", description: "Ticket ID" },
105851
+ ticketId: ticketIdentifierProp,
105848
105852
  content: { type: "string", description: "Comment body" },
105849
105853
  isInternal: { type: "boolean", default: false }
105850
105854
  },
@@ -105858,7 +105862,7 @@ var TOOLS = [
105858
105862
  type: "object",
105859
105863
  properties: {
105860
105864
  teamId: teamIdProp,
105861
- ticketId: { type: "string", description: "Ticket ID" }
105865
+ ticketId: ticketIdentifierProp
105862
105866
  },
105863
105867
  required: ["ticketId"]
105864
105868
  }
@@ -105886,8 +105890,8 @@ var TOOLS = [
105886
105890
  properties: {
105887
105891
  teamId: teamIdProp,
105888
105892
  ticketId: {
105889
- type: "string",
105890
- description: "Ticket ID (UUID) to attach the file to."
105893
+ ...ticketIdentifierProp,
105894
+ description: "Ticket ID (UUID) or ticket number to attach the file to."
105891
105895
  },
105892
105896
  filePath: {
105893
105897
  type: "string",
@@ -106688,17 +106692,87 @@ async function resolveTeamScope(requestedTeamId) {
106688
106692
  }
106689
106693
 
106690
106694
  // src/tools/ticket-access.ts
106691
- function notFoundResponse(ticketId) {
106695
+ var UUID_REGEX = /^[0-9a-f]{8}-[0-9a-f]{4}-[0-9a-f]{4}-[0-9a-f]{4}-[0-9a-f]{12}$/i;
106696
+ function isUuid(value) {
106697
+ return UUID_REGEX.test(value);
106698
+ }
106699
+ function notFoundResponse(identifier) {
106700
+ return {
106701
+ content: [
106702
+ {
106703
+ type: "text",
106704
+ text: `Ticket not found or no access: ${identifier}. Call get-tickets to find the correct ticket.`
106705
+ }
106706
+ ]
106707
+ };
106708
+ }
106709
+ function multipleMatchesResponse(identifier, matches) {
106710
+ const list = matches.map((t8) => `- **${t8.ticketNumber}** (ID: ${t8.id}): ${t8.title}`).join("\n");
106692
106711
  return {
106693
106712
  content: [
106694
106713
  {
106695
106714
  type: "text",
106696
- text: `Ticket not found or no access: ${ticketId}. Call get-tickets to find the correct ticket.`
106715
+ text: `Multiple tickets match "${identifier}":
106716
+ ${list}
106717
+
106718
+ Pass a more specific ticket number or include \`teamId\` to disambiguate.`
106697
106719
  }
106698
106720
  ]
106699
106721
  };
106700
106722
  }
106723
+ var ticketLookupFields = {
106724
+ id: schema_exports.tickets.id,
106725
+ ticketNumber: schema_exports.tickets.ticketNumber,
106726
+ title: schema_exports.tickets.title
106727
+ };
106728
+ async function resolveTicketIdentifier(requestedTeamId, identifier) {
106729
+ if (isUuid(identifier)) {
106730
+ return { ok: true, id: identifier };
106731
+ }
106732
+ const scope = await resolveTeamScope(requestedTeamId);
106733
+ if (!scope.ok) return scope;
106734
+ const accessPredicate = buildTicketAccessPredicate(
106735
+ scope.teamIds,
106736
+ scope.projectIds,
106737
+ scope.customerIds
106738
+ );
106739
+ const baseFilters = [
106740
+ accessPredicate,
106741
+ eq(schema_exports.tickets.isDeleted, false)
106742
+ ];
106743
+ const exactMatches = await db.select(ticketLookupFields).from(schema_exports.tickets).where(
106744
+ and(
106745
+ ...baseFilters,
106746
+ sql`lower(${schema_exports.tickets.ticketNumber}) = lower(${identifier})`
106747
+ )
106748
+ ).limit(5);
106749
+ let matches = exactMatches;
106750
+ if (matches.length === 0) {
106751
+ matches = await db.select(ticketLookupFields).from(schema_exports.tickets).where(
106752
+ and(...baseFilters, ilike(schema_exports.tickets.ticketNumber, `%${identifier}%`))
106753
+ ).limit(5);
106754
+ }
106755
+ if (matches.length === 0) {
106756
+ return {
106757
+ ok: false,
106758
+ response: {
106759
+ content: [
106760
+ {
106761
+ type: "text",
106762
+ text: `No ticket found with number "${identifier}". Call get-tickets to search by title or keyword.`
106763
+ }
106764
+ ]
106765
+ }
106766
+ };
106767
+ }
106768
+ if (matches.length > 1) {
106769
+ return { ok: false, response: multipleMatchesResponse(identifier, matches) };
106770
+ }
106771
+ return { ok: true, id: matches[0].id };
106772
+ }
106701
106773
  async function loadAccessibleTicket(requestedTeamId, ticketId) {
106774
+ const resolved = await resolveTicketIdentifier(requestedTeamId, ticketId);
106775
+ if (!resolved.ok) return resolved;
106702
106776
  const scope = await resolveTeamScope(requestedTeamId);
106703
106777
  if (!scope.ok) return scope;
106704
106778
  const [ticket] = await db.select({
@@ -106712,7 +106786,7 @@ async function loadAccessibleTicket(requestedTeamId, ticketId) {
106712
106786
  priority: schema_exports.tickets.priority,
106713
106787
  type: schema_exports.tickets.type,
106714
106788
  assigneeId: schema_exports.tickets.assigneeId
106715
- }).from(schema_exports.tickets).where(eq(schema_exports.tickets.id, ticketId)).limit(1);
106789
+ }).from(schema_exports.tickets).where(eq(schema_exports.tickets.id, resolved.id)).limit(1);
106716
106790
  if (!ticket) return { ok: false, response: notFoundResponse(ticketId) };
106717
106791
  const hasAccess = scope.teamIds.includes(ticket.teamId) || !!ticket.projectId && scope.projectIds.includes(ticket.projectId) || !!ticket.customerId && scope.customerIds.includes(ticket.customerId);
106718
106792
  if (!hasAccess) return { ok: false, response: notFoundResponse(ticketId) };
@@ -120144,6 +120218,118 @@ ${created.projectId ? `Project ID: ${created.projectId}
120144
120218
  };
120145
120219
  }
120146
120220
 
120221
+ // src/utils/ticket-number.ts
120222
+ async function isTicketNumberTaken(ticketDb, teamId, ticketNumber, excludeTicketId) {
120223
+ const conditions = [
120224
+ eq(schema_exports.tickets.teamId, teamId),
120225
+ eq(schema_exports.tickets.ticketNumber, ticketNumber),
120226
+ eq(schema_exports.tickets.isDeleted, false)
120227
+ ];
120228
+ if (excludeTicketId) {
120229
+ conditions.push(ne(schema_exports.tickets.id, excludeTicketId));
120230
+ }
120231
+ const [existing] = await ticketDb.select({ id: schema_exports.tickets.id }).from(schema_exports.tickets).where(and(...conditions)).limit(1);
120232
+ return Boolean(existing);
120233
+ }
120234
+ async function getMaxProjectSequence(ticketDb, teamId, pattern, excludeTicketId) {
120235
+ const conditions = [
120236
+ eq(schema_exports.tickets.teamId, teamId),
120237
+ like(schema_exports.tickets.ticketNumber, pattern),
120238
+ eq(schema_exports.tickets.isDeleted, false)
120239
+ ];
120240
+ if (excludeTicketId) {
120241
+ conditions.push(ne(schema_exports.tickets.id, excludeTicketId));
120242
+ }
120243
+ const [row] = await ticketDb.select({
120244
+ maxSeq: sql`coalesce(max(
120245
+ case
120246
+ when split_part(${schema_exports.tickets.ticketNumber}, '-', 3) ~ '^[0-9]+$'
120247
+ then split_part(${schema_exports.tickets.ticketNumber}, '-', 3)::integer
120248
+ else null
120249
+ end
120250
+ ), 0)`
120251
+ }).from(schema_exports.tickets).where(and(...conditions));
120252
+ return Number(row?.maxSeq ?? 0);
120253
+ }
120254
+ async function getMaxSimpleSequence(ticketDb, teamId, currentYear, excludeTicketId) {
120255
+ const conditions = [
120256
+ eq(schema_exports.tickets.teamId, teamId),
120257
+ like(schema_exports.tickets.ticketNumber, `${currentYear}-%`),
120258
+ eq(schema_exports.tickets.isDeleted, false)
120259
+ ];
120260
+ if (excludeTicketId) {
120261
+ conditions.push(ne(schema_exports.tickets.id, excludeTicketId));
120262
+ }
120263
+ const [row] = await ticketDb.select({
120264
+ maxSeq: sql`coalesce(max(
120265
+ case
120266
+ when ${schema_exports.tickets.ticketNumber} ~ ${`^${currentYear}-[0-9]+$`}
120267
+ then split_part(${schema_exports.tickets.ticketNumber}, '-', 2)::integer
120268
+ else null
120269
+ end
120270
+ ), 0)`
120271
+ }).from(schema_exports.tickets).where(and(...conditions));
120272
+ return Number(row?.maxSeq ?? 0);
120273
+ }
120274
+ async function resolveUniqueTicketNumber(ticketDb, teamId, buildNumber, startSequence, excludeTicketId) {
120275
+ let sequence = startSequence;
120276
+ for (let attempt = 0; attempt < 100; attempt += 1) {
120277
+ const ticketNumber = buildNumber(sequence);
120278
+ const taken = await isTicketNumberTaken(
120279
+ ticketDb,
120280
+ teamId,
120281
+ ticketNumber,
120282
+ excludeTicketId
120283
+ );
120284
+ if (!taken) {
120285
+ return ticketNumber;
120286
+ }
120287
+ sequence += 1;
120288
+ }
120289
+ throw new Error("Failed to generate a unique ticket number");
120290
+ }
120291
+ async function generateTicketNumber(ticketDb, teamId, projectId, options) {
120292
+ const currentYear = (/* @__PURE__ */ new Date()).getFullYear();
120293
+ const excludeTicketId = options?.excludeTicketId ?? null;
120294
+ if (projectId) {
120295
+ const [project] = await ticketDb.select({ name: schema_exports.projects.name }).from(schema_exports.projects).where(eq(schema_exports.projects.id, projectId)).limit(1);
120296
+ if (project?.name) {
120297
+ const projectAbbreviation = generateProjectAbbreviation(project.name);
120298
+ const pattern = `${currentYear}-${projectAbbreviation}-%`;
120299
+ const maxSequence2 = await getMaxProjectSequence(
120300
+ ticketDb,
120301
+ teamId,
120302
+ pattern,
120303
+ excludeTicketId
120304
+ );
120305
+ let nextSequence = maxSequence2 + 1;
120306
+ if (projectAbbreviation === "MBC" && nextSequence < 100001) {
120307
+ nextSequence = 100001;
120308
+ }
120309
+ return resolveUniqueTicketNumber(
120310
+ ticketDb,
120311
+ teamId,
120312
+ (sequence) => `${currentYear}-${projectAbbreviation}-${String(sequence).padStart(3, "0")}`,
120313
+ nextSequence,
120314
+ excludeTicketId
120315
+ );
120316
+ }
120317
+ }
120318
+ const maxSequence = await getMaxSimpleSequence(
120319
+ ticketDb,
120320
+ teamId,
120321
+ currentYear,
120322
+ excludeTicketId
120323
+ );
120324
+ return resolveUniqueTicketNumber(
120325
+ ticketDb,
120326
+ teamId,
120327
+ (sequence) => `${currentYear}-${String(sequence).padStart(3, "0")}`,
120328
+ maxSequence + 1,
120329
+ excludeTicketId
120330
+ );
120331
+ }
120332
+
120147
120333
  // src/tools/ticket-update.ts
120148
120334
  async function handleUpdateTicket(input) {
120149
120335
  const ctx = getAuthContext();
@@ -120179,6 +120365,7 @@ async function handleUpdateTicket(input) {
120179
120365
  updateValues.priority = input.priority;
120180
120366
  }
120181
120367
  if (input.type !== void 0) updateValues.type = input.type;
120368
+ const projectExplicitlyChanged = input.projectId !== void 0 && input.projectId !== ticket.projectId;
120182
120369
  if (input.projectId !== void 0) updateValues.projectId = input.projectId;
120183
120370
  if (input.customerId !== void 0) {
120184
120371
  updateValues.customerId = input.customerId;
@@ -120193,6 +120380,14 @@ async function handleUpdateTicket(input) {
120193
120380
  updateValues.dueDate = input.dueDate;
120194
120381
  updateValues.dueDateAllDay = input.dueDate ? true : false;
120195
120382
  }
120383
+ if (projectExplicitlyChanged) {
120384
+ updateValues.ticketNumber = await generateTicketNumber(
120385
+ db,
120386
+ ticket.teamId,
120387
+ input.projectId,
120388
+ { excludeTicketId: ticket.id }
120389
+ );
120390
+ }
120196
120391
  let deadlineChange = null;
120197
120392
  if (input.dueDate !== void 0) {
120198
120393
  deadlineChange = await syncTicketDeadline(
@@ -120262,7 +120457,11 @@ async function handleUpdateTicket(input) {
120262
120457
  changes.push("title updated");
120263
120458
  }
120264
120459
  if (input.description !== void 0) changes.push("description updated");
120265
- if (input.projectId !== void 0) changes.push("project updated");
120460
+ if (input.projectId !== void 0) {
120461
+ changes.push(
120462
+ projectExplicitlyChanged ? `project updated (renumbered to ${String(updateValues.ticketNumber ?? ticket.ticketNumber)})` : "project updated"
120463
+ );
120464
+ }
120266
120465
  if (input.customerId !== void 0) changes.push("customer updated");
120267
120466
  if (input.estimatedHours !== void 0) changes.push("estimated hours updated");
120268
120467
  if (deadlineChange) changes.push(deadlineChange);
@@ -120466,6 +120665,7 @@ async function handleGetTickets(input) {
120466
120665
  ${rows.map((t8) => {
120467
120666
  const ticketTags2 = tagsByTicket.get(t8.id) ?? [];
120468
120667
  return `**${t8.ticketNumber}**: ${t8.title}
120668
+ ID: ${t8.id}
120469
120669
  Status: ${t8.status} | Priority: ${t8.priority}
120470
120670
  ${ticketTags2.length > 0 ? `Tags: ${formatTagList(ticketTags2)}
120471
120671
  ` : ""}${t8.projectName ? `Project: ${t8.projectName}
@@ -120479,11 +120679,13 @@ ${ticketTags2.length > 0 ? `Tags: ${formatTagList(ticketTags2)}
120479
120679
  }
120480
120680
  async function handleGetTicketById(input) {
120481
120681
  const { id } = input;
120682
+ const resolved = await resolveTicketIdentifier(input.teamId, id);
120683
+ if (!resolved.ok) return resolved.response;
120482
120684
  const scope = await resolveTeamScope(input.teamId);
120483
120685
  if (!scope.ok) return scope.response;
120484
120686
  const { teamIds, projectIds, customerIds } = scope;
120485
120687
  const ticketRow = await db.query.tickets.findFirst({
120486
- where: eq(schema_exports.tickets.id, id),
120688
+ where: eq(schema_exports.tickets.id, resolved.id),
120487
120689
  with: {
120488
120690
  project: { columns: { id: true, name: true } },
120489
120691
  customer: { columns: { id: true, name: true } },
@@ -120691,13 +120893,10 @@ async function handleCreateTicket(input) {
120691
120893
  } = input;
120692
120894
  const resolved = await resolveTeamId(input.teamId);
120693
120895
  if (!resolved.ok) return resolved.response;
120694
- const year2 = (/* @__PURE__ */ new Date()).getFullYear();
120695
120896
  let resolvedTeamId = resolved.teamId;
120696
120897
  let resolvedCustomerId = customerId;
120697
- let projectAbbreviation = "";
120698
120898
  if (projectId) {
120699
120899
  const [project] = await db.select({
120700
- name: schema_exports.projects.name,
120701
120900
  teamId: schema_exports.projects.teamId,
120702
120901
  customerId: schema_exports.projects.customerId
120703
120902
  }).from(schema_exports.projects).where(eq(schema_exports.projects.id, projectId)).limit(1);
@@ -120710,40 +120909,9 @@ async function handleCreateTicket(input) {
120710
120909
  if (!resolvedCustomerId && project.customerId) {
120711
120910
  resolvedCustomerId = project.customerId;
120712
120911
  }
120713
- if (project.name) {
120714
- const upper = project.name.toUpperCase().replace(/[^A-Z0-9\s]/g, "");
120715
- const words = upper.split(/\s+/).filter(Boolean);
120716
- if (words.length >= 2) {
120717
- projectAbbreviation = words.slice(0, 2).map((w2) => w2.substring(0, 3)).join("").substring(0, 5);
120718
- } else if (words.length === 1 && words[0]) {
120719
- projectAbbreviation = words[0].substring(0, 5);
120720
- }
120721
- }
120722
120912
  }
120723
120913
  }
120724
- let ticketNumber;
120725
- if (projectId && projectAbbreviation) {
120726
- const pattern = `${year2}-${projectAbbreviation}-%`;
120727
- const [highest] = await db.select({ ticketNumber: schema_exports.tickets.ticketNumber }).from(schema_exports.tickets).where(
120728
- and(
120729
- eq(schema_exports.tickets.projectId, projectId),
120730
- ilike(schema_exports.tickets.ticketNumber, pattern)
120731
- )
120732
- ).orderBy(desc(schema_exports.tickets.ticketNumber)).limit(1);
120733
- let nextSequence = 1;
120734
- if (highest?.ticketNumber) {
120735
- const parts = highest.ticketNumber.split("-");
120736
- if (parts.length === 3 && parts[2]) {
120737
- const lastSeq = Number.parseInt(parts[2], 10);
120738
- if (!Number.isNaN(lastSeq)) nextSequence = lastSeq + 1;
120739
- }
120740
- }
120741
- ticketNumber = `${year2}-${projectAbbreviation}-${String(nextSequence).padStart(3, "0")}`;
120742
- } else {
120743
- const [countRow] = await db.select({ n: sql`count(*)::int` }).from(schema_exports.tickets).where(eq(schema_exports.tickets.teamId, resolvedTeamId));
120744
- const count = Number(countRow?.n ?? 0);
120745
- ticketNumber = `${year2}-${String(count + 1).padStart(3, "0")}`;
120746
- }
120914
+ const ticketNumber = await generateTicketNumber(db, resolvedTeamId, projectId);
120747
120915
  const [created] = await db.insert(schema_exports.tickets).values({
120748
120916
  teamId: resolvedTeamId,
120749
120917
  ticketNumber,
@@ -120791,7 +120959,7 @@ async function handleCreateTicket(input) {
120791
120959
  text: `\u2705 **Ticket Created Successfully!**
120792
120960
 
120793
120961
  Ticket Number: **${created.ticketNumber}**
120794
- ID: ${created.id}
120962
+ Ticket id: ${created.id}
120795
120963
  Title: ${title}
120796
120964
  Status: ${status}
120797
120965
  Priority: ${priority}