@resolveio/server-lib 22.2.35 → 22.2.36
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/methods/support.js
CHANGED
|
@@ -277,6 +277,13 @@ function stripSupportMessageInternalMetadata(message) {
|
|
|
277
277
|
delete next.source;
|
|
278
278
|
return next;
|
|
279
279
|
}
|
|
280
|
+
function buildSupportTicketDetailPath(ticket) {
|
|
281
|
+
var ticketId = String((ticket === null || ticket === void 0 ? void 0 : ticket._id) || '').trim();
|
|
282
|
+
if (!ticketId) {
|
|
283
|
+
return '/support-ticket/detail';
|
|
284
|
+
}
|
|
285
|
+
return "/support-ticket/detail/".concat(ticketId);
|
|
286
|
+
}
|
|
280
287
|
function sanitizeSupportTicketForClientView(ticket) {
|
|
281
288
|
if (!ticket || typeof ticket !== 'object') {
|
|
282
289
|
return ticket;
|
|
@@ -287,6 +294,7 @@ function sanitizeSupportTicketForClientView(ticket) {
|
|
|
287
294
|
.filter(function (message) { return !isInternalSupportMessage(message); })
|
|
288
295
|
.map(function (message) { return stripSupportMessageInternalMetadata(message); })
|
|
289
296
|
: [];
|
|
297
|
+
next.url_ticket = String(ticket.url_ticket || '').trim() || buildSupportTicketDetailPath(ticket);
|
|
290
298
|
next.notes = [];
|
|
291
299
|
delete next.automation;
|
|
292
300
|
delete next.ai_recommendations;
|
|
@@ -307,6 +315,7 @@ function sanitizeSupportTicketUpdatePayload(ticket) {
|
|
|
307
315
|
delete next.automation;
|
|
308
316
|
delete next.ai_recommendations;
|
|
309
317
|
delete next.source;
|
|
318
|
+
delete next.url_ticket;
|
|
310
319
|
return next;
|
|
311
320
|
}
|
|
312
321
|
|
package/methods/support.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"sources":["../../src/methods/support.ts"],"names":[],"mappings":";;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;AAMA,gDAqIC;AA3ID,+BAA0B;AAC1B,6CAAwC;AAExC,IAAM,gCAAgC,GAAG,4KAA4K,CAAC;AACtN,IAAM,+BAA+B,GAAG,+EAA+E,CAAC;AAExH,SAAgB,kBAAkB,CAAC,aAA4B;IAC9D,aAAa,CAAC,OAAO,CAAC;QACf,wBAAwB,EAAE;YACzB,KAAK,EAAE,IAAI,sBAAY,CAAC;gBAC7B,IAAI,EAAE;oBACL,IAAI,EAAE,MAAM;oBACZ,QAAQ,EAAE,IAAI;iBACd;aACQ,CAAC;YACF,QAAQ,EAAE,UAAe,IAAI;;;;;;;gCAEV,qBAAM,eAAK,CAAC,IAAI,CAAC,wDAAwD,EAAE,IAAI,CAAC,EAAA;;gCAAvF,IAAI,GAAG,SAAgF;gCAC3F,sBAAO,IAAI,CAAC,IAAI,CAAC,MAAM,EAAC;;;gCAGxB,sBAAO,KAAK,EAAC;;;;;aAEpB;SACV;QACD,6BAA6B,EAAE;YACxB,KAAK,EAAE,IAAI,sBAAY,CAAC;gBAC7B,iBAAiB,EAAE;oBAClB,IAAI,EAAE,MAAM;iBACZ;aACQ,CAAC;YACF,QAAQ,EAAE,UAAe,iBAAiB;;;;;;;gCAEvB,qBAAM,eAAK,CAAC,IAAI,CAAC,+DAA+D,EAAE,EAAC,iBAAiB,EAAE,iBAAiB,EAAC,CAAC,EAAA;;gCAAhI,IAAI,GAAG,SAAyH;gCACpI,sBAAO,kCAAkC,CAAC,IAAI,CAAC,IAAI,CAAC,MAAM,CAAC,EAAC;;;gCAG5D,OAAK,CAAC,OAAO,GAAG,uDAAgD,OAAK,CAAC,OAAO,CAAE,CAAC;gCAChF,MAAM,OAAK,CAAC;;;;;aAEnB;SACV;QACD,0BAA0B,EAAE;YACrB,cAAc,EAAE,IAAI;YACjB,QAAQ,EAAE,UAAe,aAAa;;;;;;;gCAEnB,qBAAM,eAAK,CAAC,IAAI,CAAC,+DAA+D,EAAE,aAAa,CAAC,EAAA;;gCAAvG,IAAI,GAAG,SAAgG;gCAE3G,sBAAO,IAAI,CAAC,IAAI,CAAC,MAAM,EAAC;;;gCAGxB,OAAK,CAAC,OAAO,GAAG,kDAA2C,OAAK,CAAC,OAAO,CAAE,CAAC;gCAC3E,MAAM,OAAK,CAAC;;;;;aAEnB;SACV;QACD,0BAA0B,EAAE;YAC3B,cAAc,EAAE,IAAI;YACX,QAAQ,EAAE,UAAe,aAAa;;;;;;;gCAExB,WAAW,GAAG,kCAAkC,CAAC,aAAa,CAAC,CAAC;gCAC3D,qBAAM,eAAK,CAAC,IAAI,CAAC,+DAA+D,EAAE,WAAW,CAAC,EAAA;;gCAArG,IAAI,GAAG,SAA8F;gCAEzG,sBAAO,IAAI,CAAC,IAAI,CAAC,MAAM,EAAC;;;gCAGxB,OAAK,CAAC,OAAO,GAAG,kDAA2C,OAAK,CAAC,OAAO,CAAE,CAAC;gCAC3E,MAAM,OAAK,CAAC;;;;;aAEnB;SACV;QACD,yBAAyB,EAAE;YAC1B,KAAK,EAAE,IAAI,sBAAY,CAAC;gBACvB,OAAO,EAAE;oBACR,IAAI,EAAE,MAAM;iBACZ;gBACD,eAAe,EAAE;oBAChB,IAAI,EAAE,MAAM;iBACZ;gBACD,cAAc,EAAE;oBACf,IAAI,EAAE,MAAM;iBACZ;gBACD,cAAc,EAAE;oBACf,IAAI,EAAE,MAAM;oBACZ,QAAQ,EAAE,IAAI;iBACd;gBACD,gBAAgB,EAAE;oBACjB,IAAI,EAAE,MAAM;oBACZ,QAAQ,EAAE,IAAI;iBACd;gBACD,YAAY,EAAE;oBACb,IAAI,EAAE,MAAM;iBACZ;gBACD,OAAO,EAAE;oBACR,IAAI,EAAE,KAAK;iBACX;gBACD,WAAW,EAAE;oBACZ,IAAI,EAAE,MAAM;oBACZ,QAAQ,EAAE,IAAI;iBACd;aACQ,CAAC;YACF,QAAQ,EAAE,UAAe,OAAO,EAAE,YAAY,EAAE,OAAO;;;;;;;gCAEpC,qBAAM,eAAK,CAAC,IAAI,CAAC,qEAAqE,EAAE,CAAC,OAAO,EAAE,YAAY,EAAE,OAAO,CAAC,CAAC,EAAA;;gCAAhI,IAAI,GAAG,SAAyH;gCAC9H,OAAO,GAAG,KAAK,CAAC,OAAO,CAAC,IAAI,CAAC,IAAI,CAAC,MAAM,CAAC,CAAC,CAAC,CAAC,IAAI,CAAC,IAAI,CAAC,MAAM,CAAC,CAAC,CAAC,EAAE,CAAC;gCACxE,sBAAO,OAAO,CAAC,GAAG,CAAC,UAAC,MAAW,IAAK,OAAA,kCAAkC,CAAC,MAAM,CAAC,EAA1C,CAA0C,CAAC,EAAC;;;gCAGhF,OAAK,CAAC,OAAO,GAAG,iDAA0C,OAAK,CAAC,OAAO,CAAE,CAAC;gCAC1E,MAAM,OAAK,CAAC;;;;;aAEnB;SACV;QACD,kBAAkB,EAAE;YACnB,KAAK,EAAE,IAAI,sBAAY,CAAC;gBACvB,YAAY,EAAE;oBACb,IAAI,EAAE,MAAM;iBACZ;gBACD,OAAO,EAAE;oBACR,IAAI,EAAE,KAAK;iBACX;gBACD,WAAW,EAAE;oBACZ,IAAI,EAAE,MAAM;oBACZ,QAAQ,EAAE,IAAI;iBACd;aACQ,CAAC;YACF,QAAQ,EAAE,UAAe,YAAY,EAAE,OAAO;;;;;;;gCAE3B,qBAAM,eAAK,CAAC,IAAI,CAAC,+DAA+D,EAAE,CAAC,YAAY,EAAE,OAAO,CAAC,CAAC,EAAA;;gCAAjH,IAAI,GAAG,SAA0G;gCAErH,sBAAO,IAAI,CAAC,IAAI,CAAC,MAAM,EAAC;;;gCAGxB,OAAK,CAAC,OAAO,GAAG,yCAAkC,OAAK,CAAC,OAAO,CAAE,CAAC;gCAClE,MAAM,OAAK,CAAC;;;;;aAEnB;SACV;KACD,CAAC,CAAC;AACJ,CAAC;AAED,SAAS,wBAAwB,CAAC,OAAY;IAC7C,IAAI,CAAC,OAAO,IAAI,OAAO,OAAO,KAAK,QAAQ,EAAE,CAAC;QAC7C,OAAO,KAAK,CAAC;IACd,CAAC;IACD,IAAI,OAAO,CAAC,QAAQ,KAAK,IAAI,EAAE,CAAC;QAC/B,OAAO,IAAI,CAAC;IACb,CAAC;IACD,IAAM,UAAU,GAAG,MAAM,CAAC,OAAO,CAAC,UAAU,IAAI,EAAE,CAAC,CAAC,IAAI,EAAE,CAAC,WAAW,EAAE,CAAC;IACzE,IAAI,UAAU,KAAK,UAAU,EAAE,CAAC;QAC/B,OAAO,IAAI,CAAC;IACb,CAAC;IACD,IAAM,KAAK,GAAG,MAAM,CAAC,OAAO,CAAC,KAAK,IAAI,EAAE,CAAC,CAAC,IAAI,EAAE,CAAC,WAAW,EAAE,CAAC;IAC/D,IAAI,KAAK,CAAC,QAAQ,CAAC,UAAU,CAAC,EAAE,CAAC;QAChC,OAAO,IAAI,CAAC;IACb,CAAC;IACD,IAAM,MAAM,GAAG,MAAM,CAAC,OAAO,CAAC,MAAM,IAAI,EAAE,CAAC,CAAC,IAAI,EAAE,CAAC;IACnD,IAAI,MAAM,IAAI,+BAA+B,CAAC,IAAI,CAAC,MAAM,CAAC,EAAE,CAAC;QAC5D,OAAO,IAAI,CAAC;IACb,CAAC;IACD,IAAM,IAAI,GAAG;QACZ,MAAM,CAAC,OAAO,CAAC,IAAI,IAAI,EAAE,CAAC;QAC1B,MAAM,CAAC,OAAO,CAAC,IAAI,IAAI,EAAE,CAAC;QAC1B,MAAM,CAAC,OAAO,CAAC,OAAO,IAAI,EAAE,CAAC;KAC7B,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC;IACZ,OAAO,gCAAgC,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;AACpD,CAAC;AAED,SAAS,mCAAmC,CAAC,OAAY;IACxD,IAAM,IAAI,gBAA6B,CAAC,OAAO,IAAI,EAAE,CAAC,CAAE,CAAC;IACzD,OAAO,IAAI,CAAC,QAAQ,CAAC;IACrB,OAAO,IAAI,CAAC,UAAU,CAAC;IACvB,OAAO,IAAI,CAAC,KAAK,CAAC;IAClB,OAAO,IAAI,CAAC,MAAM,CAAC;IACnB,OAAO,IAAI,CAAC;AACb,CAAC;AAED,SAAS,kCAAkC,CAAC,MAAW;IACtD,IAAI,CAAC,MAAM,IAAI,OAAO,MAAM,KAAK,QAAQ,EAAE,CAAC;QAC3C,OAAO,MAAM,CAAC;IACf,CAAC;IACD,IAAM,IAAI,gBAA6B,MAAM,CAAE,CAAC;IAChD,IAAI,CAAC,QAAQ,GAAG,KAAK,CAAC,OAAO,CAAC,MAAM,CAAC,QAAQ,CAAC;QAC7C,CAAC,CAAC,MAAM,CAAC,QAAQ;aACf,MAAM,CAAC,UAAC,OAAY,IAAK,OAAA,CAAC,wBAAwB,CAAC,OAAO,CAAC,EAAlC,CAAkC,CAAC;aAC5D,GAAG,CAAC,UAAC,OAAY,IAAK,OAAA,mCAAmC,CAAC,OAAO,CAAC,EAA5C,CAA4C,CAAC;QACrE,CAAC,CAAC,EAAE,CAAC;IACN,IAAI,CAAC,KAAK,GAAG,EAAE,CAAC;IAChB,OAAO,IAAI,CAAC,UAAU,CAAC;IACvB,OAAO,IAAI,CAAC,kBAAkB,CAAC;IAC/B,OAAO,IAAI,CAAC,MAAM,CAAC;IACnB,OAAO,IAAI,CAAC;AACb,CAAC;AAED,SAAS,kCAAkC,CAAC,MAAW;IACtD,IAAI,CAAC,MAAM,IAAI,OAAO,MAAM,KAAK,QAAQ,EAAE,CAAC;QAC3C,OAAO,MAAM,CAAC;IACf,CAAC;IACD,IAAM,IAAI,gBAA6B,MAAM,CAAE,CAAC;IAChD,IAAI,CAAC,QAAQ,GAAG,KAAK,CAAC,OAAO,CAAC,MAAM,CAAC,QAAQ,CAAC;QAC7C,CAAC,CAAC,MAAM,CAAC,QAAQ;aACf,MAAM,CAAC,UAAC,OAAY,IAAK,OAAA,CAAC,wBAAwB,CAAC,OAAO,CAAC,EAAlC,CAAkC,CAAC;aAC5D,GAAG,CAAC,UAAC,OAAY,IAAK,OAAA,mCAAmC,CAAC,OAAO,CAAC,EAA5C,CAA4C,CAAC;QACrE,CAAC,CAAC,EAAE,CAAC;IACN,IAAI,CAAC,KAAK,GAAG,EAAE,CAAC;IAChB,OAAO,IAAI,CAAC,UAAU,CAAC;IACvB,OAAO,IAAI,CAAC,kBAAkB,CAAC;IAC/B,OAAO,IAAI,CAAC,MAAM,CAAC;IACnB,OAAO,IAAI,CAAC;AACb,CAAC","file":"support.js","sourcesContent":["import axios from 'axios';\nimport SimpleSchema from 'simpl-schema';\nimport { MethodManager } from '../managers/method.manager';\nconst SUPPORT_INTERNAL_MESSAGE_PATTERN = /\\b(codex|openai|ai dashboard|ai assistant|workflow update|build plan|pull request|confidence gate|dependency follow-up|thread key|workspace cleanup|support automation)\\b/i;\nconst SUPPORT_INTERNAL_SOURCE_PATTERN = /\\b(support_automation|codex|openai|ai(?:[_ -]?assistant|[_ -]?dashboard)?)\\b/i;\n\nexport function loadSupportMethods(methodManager: MethodManager) {\n\tmethodManager.methods({\n supportCreateBillingUser: {\n \tcheck: new SimpleSchema({\n\t\t\t\tuser: {\n\t\t\t\t\ttype: Object,\n\t\t\t\t\tblackbox: true\n\t\t\t\t}\n }),\n function: async function(user) {\n try {\n let body = await axios.post('https://backend.resolveio.com/api/support/billing-user', user);\n return body.data.result;\n }\n catch {\n return false;\n }\n }\n\t\t},\n\t\tsupportGetSupportTicketWithId: {\n \tcheck: new SimpleSchema({\n\t\t\t\tid_support_ticket: {\n\t\t\t\t\ttype: String\n\t\t\t\t}\n }),\n function: async function(id_support_ticket) {\n try {\n let body = await axios.post('https://backend.resolveio.com/api/support/supportTicketWithId', {id_support_ticket: id_support_ticket});\n return sanitizeSupportTicketForClientView(body.data.result);\n }\n catch(error) {\n error.message = `Error in Support Get Support Ticket With Id: ${error.message}`;\n throw error;\n }\n }\n\t\t},\n\t\tsupportInsertSupportTicket: {\n \tskipValidation: true,\n function: async function(supportTicket) {\n try {\n let body = await axios.post('https://backend.resolveio.com/api/support/supportInsertTicket', supportTicket);\n\n return body.data.result;\n }\n catch(error) {\n error.message = `Error in Support Insert Support Ticket: ${error.message}`;\n throw error;\n }\n }\n\t\t},\n\t\tsupportUpdateSupportTicket: {\n\t\t\tskipValidation: true,\n function: async function(supportTicket) {\n try {\n const safePayload = sanitizeSupportTicketUpdatePayload(supportTicket);\n let body = await axios.post('https://backend.resolveio.com/api/support/supportUpdateTicket', safePayload);\n\n return body.data.result;\n }\n catch(error) {\n error.message = `Error in Support Update Support Ticket: ${error.message}`;\n throw error;\n }\n }\n\t\t},\n\t\tsupportticketsWithOptions: {\n\t\t\tcheck: new SimpleSchema({\n\t\t\t\toptions: {\n\t\t\t\t\ttype: Object\n\t\t\t\t},\n\t\t\t\t'options.limit': {\n\t\t\t\t\ttype: Number\n\t\t\t\t},\n\t\t\t\t'options.skip': {\n\t\t\t\t\ttype: Number\n\t\t\t\t},\n\t\t\t\t'options.sort': {\n\t\t\t\t\ttype: Object,\n\t\t\t\t\tblackbox: true\n\t\t\t\t},\n\t\t\t\t'options.fields': {\n\t\t\t\t\ttype: Object,\n\t\t\t\t\tblackbox: true\n\t\t\t\t},\n\t\t\t\tsearchString: {\n\t\t\t\t\ttype: String\n\t\t\t\t},\n\t\t\t\tfilters: {\n\t\t\t\t\ttype: Array\n\t\t\t\t},\n\t\t\t\t'filters.$': {\n\t\t\t\t\ttype: Object,\n\t\t\t\t\tblackbox: true\n\t\t\t\t}\n }),\n function: async function(options, searchString, filters) {\n try {\n let body = await axios.post('https://backend.resolveio.com/api/support/supportticketsWithOptions', [options, searchString, filters]);\n const results = Array.isArray(body.data.result) ? body.data.result : [];\n return results.map((ticket: any) => sanitizeSupportTicketForClientView(ticket));\n }\n catch(error) {\n error.message = `Error in Support Tickets With Options: ${error.message}`;\n throw error;\n }\n }\n\t\t},\n\t\tsupportticketCount: {\n\t\t\tcheck: new SimpleSchema({\n\t\t\t\tsearchString: {\n\t\t\t\t\ttype: String\n\t\t\t\t},\n\t\t\t\tfilters: {\n\t\t\t\t\ttype: Array\n\t\t\t\t},\n\t\t\t\t'filters.$': {\n\t\t\t\t\ttype: Object,\n\t\t\t\t\tblackbox: true\n\t\t\t\t}\n }),\n function: async function(searchString, filters) {\n try {\n let body = await axios.post('https://backend.resolveio.com/api/support/supportCountTickets', [searchString, filters]);\n\n return body.data.result;\n }\n catch(error) {\n error.message = `Error in Support Ticket Count: ${error.message}`;\n throw error;\n }\n }\n\t\t}\n\t});\n}\n\nfunction isInternalSupportMessage(message: any): boolean {\n\tif (!message || typeof message !== 'object') {\n\t\treturn false;\n\t}\n\tif (message.internal === true) {\n\t\treturn true;\n\t}\n\tconst visibility = String(message.visibility || '').trim().toLowerCase();\n\tif (visibility === 'internal') {\n\t\treturn true;\n\t}\n\tconst badge = String(message.badge || '').trim().toLowerCase();\n\tif (badge.includes('internal')) {\n\t\treturn true;\n\t}\n\tconst source = String(message.source || '').trim();\n\tif (source && SUPPORT_INTERNAL_SOURCE_PATTERN.test(source)) {\n\t\treturn true;\n\t}\n\tconst text = [\n\t\tString(message.type || ''),\n\t\tString(message.user || ''),\n\t\tString(message.message || '')\n\t].join(' ');\n\treturn SUPPORT_INTERNAL_MESSAGE_PATTERN.test(text);\n}\n\nfunction stripSupportMessageInternalMetadata(message: any): Record<string, any> {\n\tconst next: Record<string, any> = { ...(message || {}) };\n\tdelete next.internal;\n\tdelete next.visibility;\n\tdelete next.badge;\n\tdelete next.source;\n\treturn next;\n}\n\nfunction sanitizeSupportTicketForClientView(ticket: any): any {\n\tif (!ticket || typeof ticket !== 'object') {\n\t\treturn ticket;\n\t}\n\tconst next: Record<string, any> = { ...ticket };\n\tnext.messages = Array.isArray(ticket.messages)\n\t\t? ticket.messages\n\t\t\t.filter((message: any) => !isInternalSupportMessage(message))\n\t\t\t.map((message: any) => stripSupportMessageInternalMetadata(message))\n\t\t: [];\n\tnext.notes = [];\n\tdelete next.automation;\n\tdelete next.ai_recommendations;\n\tdelete next.source;\n\treturn next;\n}\n\nfunction sanitizeSupportTicketUpdatePayload(ticket: any): any {\n\tif (!ticket || typeof ticket !== 'object') {\n\t\treturn ticket;\n\t}\n\tconst next: Record<string, any> = { ...ticket };\n\tnext.messages = Array.isArray(ticket.messages)\n\t\t? ticket.messages\n\t\t\t.filter((message: any) => !isInternalSupportMessage(message))\n\t\t\t.map((message: any) => stripSupportMessageInternalMetadata(message))\n\t\t: [];\n\tnext.notes = [];\n\tdelete next.automation;\n\tdelete next.ai_recommendations;\n\tdelete next.source;\n\treturn next;\n}\n"]}
|
|
1
|
+
{"version":3,"sources":["../../src/methods/support.ts"],"names":[],"mappings":"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","file":"support.js","sourcesContent":["import axios from 'axios';\nimport SimpleSchema from 'simpl-schema';\nimport { MethodManager } from '../managers/method.manager';\nconst SUPPORT_INTERNAL_MESSAGE_PATTERN = /\\b(codex|openai|ai dashboard|ai assistant|workflow update|build plan|pull request|confidence gate|dependency follow-up|thread key|workspace cleanup|support automation)\\b/i;\nconst SUPPORT_INTERNAL_SOURCE_PATTERN = /\\b(support_automation|codex|openai|ai(?:[_ -]?assistant|[_ -]?dashboard)?)\\b/i;\n\nexport function loadSupportMethods(methodManager: MethodManager) {\n\tmethodManager.methods({\n supportCreateBillingUser: {\n \tcheck: new SimpleSchema({\n\t\t\t\tuser: {\n\t\t\t\t\ttype: Object,\n\t\t\t\t\tblackbox: true\n\t\t\t\t}\n }),\n function: async function(user) {\n try {\n let body = await axios.post('https://backend.resolveio.com/api/support/billing-user', user);\n return body.data.result;\n }\n catch {\n return false;\n }\n }\n\t\t},\n\t\tsupportGetSupportTicketWithId: {\n \tcheck: new SimpleSchema({\n\t\t\t\tid_support_ticket: {\n\t\t\t\t\ttype: String\n\t\t\t\t}\n }),\n function: async function(id_support_ticket) {\n try {\n let body = await axios.post('https://backend.resolveio.com/api/support/supportTicketWithId', {id_support_ticket: id_support_ticket});\n return sanitizeSupportTicketForClientView(body.data.result);\n }\n catch(error) {\n error.message = `Error in Support Get Support Ticket With Id: ${error.message}`;\n throw error;\n }\n }\n\t\t},\n\t\tsupportInsertSupportTicket: {\n \tskipValidation: true,\n function: async function(supportTicket) {\n try {\n let body = await axios.post('https://backend.resolveio.com/api/support/supportInsertTicket', supportTicket);\n\n return body.data.result;\n }\n catch(error) {\n error.message = `Error in Support Insert Support Ticket: ${error.message}`;\n throw error;\n }\n }\n\t\t},\n\t\tsupportUpdateSupportTicket: {\n\t\t\tskipValidation: true,\n function: async function(supportTicket) {\n try {\n const safePayload = sanitizeSupportTicketUpdatePayload(supportTicket);\n let body = await axios.post('https://backend.resolveio.com/api/support/supportUpdateTicket', safePayload);\n\n return body.data.result;\n }\n catch(error) {\n error.message = `Error in Support Update Support Ticket: ${error.message}`;\n throw error;\n }\n }\n\t\t},\n\t\tsupportticketsWithOptions: {\n\t\t\tcheck: new SimpleSchema({\n\t\t\t\toptions: {\n\t\t\t\t\ttype: Object\n\t\t\t\t},\n\t\t\t\t'options.limit': {\n\t\t\t\t\ttype: Number\n\t\t\t\t},\n\t\t\t\t'options.skip': {\n\t\t\t\t\ttype: Number\n\t\t\t\t},\n\t\t\t\t'options.sort': {\n\t\t\t\t\ttype: Object,\n\t\t\t\t\tblackbox: true\n\t\t\t\t},\n\t\t\t\t'options.fields': {\n\t\t\t\t\ttype: Object,\n\t\t\t\t\tblackbox: true\n\t\t\t\t},\n\t\t\t\tsearchString: {\n\t\t\t\t\ttype: String\n\t\t\t\t},\n\t\t\t\tfilters: {\n\t\t\t\t\ttype: Array\n\t\t\t\t},\n\t\t\t\t'filters.$': {\n\t\t\t\t\ttype: Object,\n\t\t\t\t\tblackbox: true\n\t\t\t\t}\n }),\n function: async function(options, searchString, filters) {\n try {\n let body = await axios.post('https://backend.resolveio.com/api/support/supportticketsWithOptions', [options, searchString, filters]);\n const results = Array.isArray(body.data.result) ? body.data.result : [];\n return results.map((ticket: any) => sanitizeSupportTicketForClientView(ticket));\n }\n catch(error) {\n error.message = `Error in Support Tickets With Options: ${error.message}`;\n throw error;\n }\n }\n\t\t},\n\t\tsupportticketCount: {\n\t\t\tcheck: new SimpleSchema({\n\t\t\t\tsearchString: {\n\t\t\t\t\ttype: String\n\t\t\t\t},\n\t\t\t\tfilters: {\n\t\t\t\t\ttype: Array\n\t\t\t\t},\n\t\t\t\t'filters.$': {\n\t\t\t\t\ttype: Object,\n\t\t\t\t\tblackbox: true\n\t\t\t\t}\n }),\n function: async function(searchString, filters) {\n try {\n let body = await axios.post('https://backend.resolveio.com/api/support/supportCountTickets', [searchString, filters]);\n\n return body.data.result;\n }\n catch(error) {\n error.message = `Error in Support Ticket Count: ${error.message}`;\n throw error;\n }\n }\n\t\t}\n\t});\n}\n\nfunction isInternalSupportMessage(message: any): boolean {\n\tif (!message || typeof message !== 'object') {\n\t\treturn false;\n\t}\n\tif (message.internal === true) {\n\t\treturn true;\n\t}\n\tconst visibility = String(message.visibility || '').trim().toLowerCase();\n\tif (visibility === 'internal') {\n\t\treturn true;\n\t}\n\tconst badge = String(message.badge || '').trim().toLowerCase();\n\tif (badge.includes('internal')) {\n\t\treturn true;\n\t}\n\tconst source = String(message.source || '').trim();\n\tif (source && SUPPORT_INTERNAL_SOURCE_PATTERN.test(source)) {\n\t\treturn true;\n\t}\n\tconst text = [\n\t\tString(message.type || ''),\n\t\tString(message.user || ''),\n\t\tString(message.message || '')\n\t].join(' ');\n\treturn SUPPORT_INTERNAL_MESSAGE_PATTERN.test(text);\n}\n\nfunction stripSupportMessageInternalMetadata(message: any): Record<string, any> {\n\tconst next: Record<string, any> = { ...(message || {}) };\n\tdelete next.internal;\n\tdelete next.visibility;\n\tdelete next.badge;\n\tdelete next.source;\n\treturn next;\n}\n\nfunction buildSupportTicketDetailPath(ticket: any): string {\n\tconst ticketId = String(ticket?._id || '').trim();\n\tif (!ticketId) {\n\t\treturn '/support-ticket/detail';\n\t}\n\treturn `/support-ticket/detail/${ticketId}`;\n}\n\nfunction sanitizeSupportTicketForClientView(ticket: any): any {\n\tif (!ticket || typeof ticket !== 'object') {\n\t\treturn ticket;\n\t}\n\tconst next: Record<string, any> = { ...ticket };\n\tnext.messages = Array.isArray(ticket.messages)\n\t\t? ticket.messages\n\t\t\t.filter((message: any) => !isInternalSupportMessage(message))\n\t\t\t.map((message: any) => stripSupportMessageInternalMetadata(message))\n\t\t: [];\n\tnext.url_ticket = String(ticket.url_ticket || '').trim() || buildSupportTicketDetailPath(ticket);\n\tnext.notes = [];\n\tdelete next.automation;\n\tdelete next.ai_recommendations;\n\tdelete next.source;\n\treturn next;\n}\n\nfunction sanitizeSupportTicketUpdatePayload(ticket: any): any {\n\tif (!ticket || typeof ticket !== 'object') {\n\t\treturn ticket;\n\t}\n\tconst next: Record<string, any> = { ...ticket };\n\tnext.messages = Array.isArray(ticket.messages)\n\t\t? ticket.messages\n\t\t\t.filter((message: any) => !isInternalSupportMessage(message))\n\t\t\t.map((message: any) => stripSupportMessageInternalMetadata(message))\n\t\t: [];\n\tnext.notes = [];\n\tdelete next.automation;\n\tdelete next.ai_recommendations;\n\tdelete next.source;\n\tdelete next.url_ticket;\n\treturn next;\n}\n"]}
|
|
@@ -10,6 +10,7 @@ export interface SupportTicketModel extends CollectionDocument {
|
|
|
10
10
|
substatus: SupportTicketSubstatus;
|
|
11
11
|
client: string;
|
|
12
12
|
id_client: string;
|
|
13
|
+
url_ticket?: string;
|
|
13
14
|
messages: SupportTicketMessageModel[];
|
|
14
15
|
date_created: Date;
|
|
15
16
|
date_created_string: string;
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"sources":["../../src/models/support-ticket.model.ts"],"names":[],"mappings":"","file":"support-ticket.model.js","sourcesContent":["import { CollectionDocument } from './collection-document.model';\n\nexport interface SupportTicketModel extends CollectionDocument {\n\ttype: SupportTicketType;\n\tpriority: SupportTicketPriority;\n\tissue: string;\n\tai_recommendations?: SupportTicketAiRecommendationsModel;\n\tsupport_ticket_number: number;\n\tsupport_ticket_number_string: string;\n\tstatus: SupportTicketStatus;\n\tsubstatus: SupportTicketSubstatus;\n\tclient: string;\n\tid_client: string;\n\tmessages: SupportTicketMessageModel[];\n\tdate_created: Date;\n\tdate_created_string: string;\n\tid_user_created: string;\n\tuser_created: string;\n\tbillable: boolean;\n\tdate_investigation?: Date;\n\tdate_closed?: Date;\n\tfiles: string[];\n\tcurrent_watchers: SupportTicketWatchersModel[];\n\tclient_user: SupportTicketClientUserModel;\n\tusers_assigned: SupportTicketUserAssignedModel[];\n\testimated_billable_hours?: number;\n\tbillable_hours?: number;\n\tbill_description: string;\n\ttasks: SupportTicketTaskModel[];\n\tnotes: SupportTicketNoteModel[];\n\tdifficulty: number;\n}\n\nexport interface SupportTicketAiRecommendationsModel {\n\tsource?: string;\n\thidden_from_client?: boolean;\n\tcreated_at?: Date;\n\tsource_message_id?: string;\n\tsummary?: string;\n\tinternal_recommendations?: string;\n\tcode_change_recommendations?: string;\n}\n\nexport interface SupportTicketClientUserModel {\n\tid_user: string;\n\tuser: string;\n\temail: string;\n}\n\nexport type SupportTicketPriority = 'High' | 'Low';\n\nexport type SupportTicketSubstatus = 'New' | 'Work In Progress' | 'Idle' | 'Awaiting Customer Interaction';\nexport type SupportTicketType = 'System Impairment' | 'Request New Feature' | 'General Inquery';\ntype SupportTicketStatus = 'Opened' | 'Resolved';\n\nexport interface SupportTicketMessageModel {\n\tmessage: string;\n\tid_user: string;\n\tuser: string;\n\tdate: Date;\n\ttype: SupportTicketMessageType;\n\tinternal?: boolean;\n\tvisibility?: 'public' | 'internal';\n\tbadge?: string;\n\tsource?: string;\n}\n\ntype SupportTicketMessageType = 'ResolveIO' | 'Client';\n\nexport interface SupportTicketWatchersModel {\n\tuser: string;\n\tid_user: string;\n\temail: string;\n}\n\nexport interface SupportTicketTaskModel {\n\tdescription: string;\n\tcompleted: boolean;\n\tid_user?: string;\n\tuser?: string;\n\tdate_created: Date;\n\tdate_completed?: Date;\n}\n\nexport interface SupportTicketNoteModel {\n\tdescription: string;\n\tid_user: string;\n\tuser: string;\n\tdate_created: Date;\n}\n\nexport interface SupportTicketUserAssignedModel {\n\tid_user: string;\n\tuser: string;\n\tdate_created: Date;\n} \n"]}
|
|
1
|
+
{"version":3,"sources":["../../src/models/support-ticket.model.ts"],"names":[],"mappings":"","file":"support-ticket.model.js","sourcesContent":["import { CollectionDocument } from './collection-document.model';\n\nexport interface SupportTicketModel extends CollectionDocument {\n\ttype: SupportTicketType;\n\tpriority: SupportTicketPriority;\n\tissue: string;\n\tai_recommendations?: SupportTicketAiRecommendationsModel;\n\tsupport_ticket_number: number;\n\tsupport_ticket_number_string: string;\n\tstatus: SupportTicketStatus;\n\tsubstatus: SupportTicketSubstatus;\n\tclient: string;\n\tid_client: string;\n\turl_ticket?: string;\n\tmessages: SupportTicketMessageModel[];\n\tdate_created: Date;\n\tdate_created_string: string;\n\tid_user_created: string;\n\tuser_created: string;\n\tbillable: boolean;\n\tdate_investigation?: Date;\n\tdate_closed?: Date;\n\tfiles: string[];\n\tcurrent_watchers: SupportTicketWatchersModel[];\n\tclient_user: SupportTicketClientUserModel;\n\tusers_assigned: SupportTicketUserAssignedModel[];\n\testimated_billable_hours?: number;\n\tbillable_hours?: number;\n\tbill_description: string;\n\ttasks: SupportTicketTaskModel[];\n\tnotes: SupportTicketNoteModel[];\n\tdifficulty: number;\n}\n\nexport interface SupportTicketAiRecommendationsModel {\n\tsource?: string;\n\thidden_from_client?: boolean;\n\tcreated_at?: Date;\n\tsource_message_id?: string;\n\tsummary?: string;\n\tinternal_recommendations?: string;\n\tcode_change_recommendations?: string;\n}\n\nexport interface SupportTicketClientUserModel {\n\tid_user: string;\n\tuser: string;\n\temail: string;\n}\n\nexport type SupportTicketPriority = 'High' | 'Low';\n\nexport type SupportTicketSubstatus = 'New' | 'Work In Progress' | 'Idle' | 'Awaiting Customer Interaction';\nexport type SupportTicketType = 'System Impairment' | 'Request New Feature' | 'General Inquery';\ntype SupportTicketStatus = 'Opened' | 'Resolved';\n\nexport interface SupportTicketMessageModel {\n\tmessage: string;\n\tid_user: string;\n\tuser: string;\n\tdate: Date;\n\ttype: SupportTicketMessageType;\n\tinternal?: boolean;\n\tvisibility?: 'public' | 'internal';\n\tbadge?: string;\n\tsource?: string;\n}\n\ntype SupportTicketMessageType = 'ResolveIO' | 'Client';\n\nexport interface SupportTicketWatchersModel {\n\tuser: string;\n\tid_user: string;\n\temail: string;\n}\n\nexport interface SupportTicketTaskModel {\n\tdescription: string;\n\tcompleted: boolean;\n\tid_user?: string;\n\tuser?: string;\n\tdate_created: Date;\n\tdate_completed?: Date;\n}\n\nexport interface SupportTicketNoteModel {\n\tdescription: string;\n\tid_user: string;\n\tuser: string;\n\tdate_created: Date;\n}\n\nexport interface SupportTicketUserAssignedModel {\n\tid_user: string;\n\tuser: string;\n\tdate_created: Date;\n} \n"]}
|