@ikatec/digisac-api-sdk 4.5.1 → 4.6.0

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.
Files changed (117) hide show
  1. package/README.md +5 -3
  2. package/dist/apis/answers/AnswersApi.cjs +38 -0
  3. package/dist/apis/answers/AnswersApi.cjs.map +1 -1
  4. package/dist/apis/answers/AnswersApi.d.ts +33 -2
  5. package/dist/apis/answers/AnswersApi.d.ts.map +1 -1
  6. package/dist/apis/answers/AnswersApi.mjs +38 -0
  7. package/dist/apis/answers/AnswersApi.mjs.map +1 -1
  8. package/dist/apis/answers/types.d.ts +64 -1
  9. package/dist/apis/answers/types.d.ts.map +1 -1
  10. package/dist/apis/botSimulators/BotSimulatorsApi.cjs +42 -0
  11. package/dist/apis/botSimulators/BotSimulatorsApi.cjs.map +1 -0
  12. package/dist/apis/botSimulators/BotSimulatorsApi.d.ts +31 -0
  13. package/dist/apis/botSimulators/BotSimulatorsApi.d.ts.map +1 -0
  14. package/dist/apis/botSimulators/BotSimulatorsApi.mjs +41 -0
  15. package/dist/apis/botSimulators/BotSimulatorsApi.mjs.map +1 -0
  16. package/dist/apis/botSimulators/index.cjs +4 -0
  17. package/dist/apis/botSimulators/index.d.ts +3 -0
  18. package/dist/apis/botSimulators/index.d.ts.map +1 -0
  19. package/dist/apis/botSimulators/index.mjs +3 -0
  20. package/dist/apis/botSimulators/types.cjs +0 -0
  21. package/dist/apis/botSimulators/types.d.ts +73 -0
  22. package/dist/apis/botSimulators/types.d.ts.map +1 -0
  23. package/dist/apis/botSimulators/types.mjs +0 -0
  24. package/dist/apis/botVersions/BotVersionsApi.cjs +25 -0
  25. package/dist/apis/botVersions/BotVersionsApi.cjs.map +1 -1
  26. package/dist/apis/botVersions/BotVersionsApi.d.ts +18 -0
  27. package/dist/apis/botVersions/BotVersionsApi.d.ts.map +1 -1
  28. package/dist/apis/botVersions/BotVersionsApi.mjs +25 -0
  29. package/dist/apis/botVersions/BotVersionsApi.mjs.map +1 -1
  30. package/dist/apis/botVersions/types.d.ts +4 -0
  31. package/dist/apis/botVersions/types.d.ts.map +1 -1
  32. package/dist/apis/bots/BotsApi.cjs +99 -4
  33. package/dist/apis/bots/BotsApi.cjs.map +1 -1
  34. package/dist/apis/bots/BotsApi.d.ts +78 -5
  35. package/dist/apis/bots/BotsApi.d.ts.map +1 -1
  36. package/dist/apis/bots/BotsApi.mjs +99 -4
  37. package/dist/apis/bots/BotsApi.mjs.map +1 -1
  38. package/dist/apis/bots/types.d.ts +266 -16
  39. package/dist/apis/bots/types.d.ts.map +1 -1
  40. package/dist/apis/index.cjs +3 -0
  41. package/dist/apis/index.d.ts +1 -0
  42. package/dist/apis/index.d.ts.map +1 -1
  43. package/dist/apis/index.mjs +3 -1
  44. package/dist/apis/questions/QuestionsApi.cjs +15 -0
  45. package/dist/apis/questions/QuestionsApi.cjs.map +1 -1
  46. package/dist/apis/questions/QuestionsApi.d.ts +15 -1
  47. package/dist/apis/questions/QuestionsApi.d.ts.map +1 -1
  48. package/dist/apis/questions/QuestionsApi.mjs +15 -0
  49. package/dist/apis/questions/QuestionsApi.mjs.map +1 -1
  50. package/dist/apis/questions/types.d.ts +25 -5
  51. package/dist/apis/questions/types.d.ts.map +1 -1
  52. package/dist/apis/quickReplies/QuickRepliesApi.cjs +16 -0
  53. package/dist/apis/quickReplies/QuickRepliesApi.cjs.map +1 -1
  54. package/dist/apis/quickReplies/QuickRepliesApi.d.ts +15 -2
  55. package/dist/apis/quickReplies/QuickRepliesApi.d.ts.map +1 -1
  56. package/dist/apis/quickReplies/QuickRepliesApi.mjs +16 -0
  57. package/dist/apis/quickReplies/QuickRepliesApi.mjs.map +1 -1
  58. package/dist/apis/quickReplies/types.d.ts +30 -2
  59. package/dist/apis/quickReplies/types.d.ts.map +1 -1
  60. package/dist/apis/schedule/ScheduleApi.cjs +37 -2
  61. package/dist/apis/schedule/ScheduleApi.cjs.map +1 -1
  62. package/dist/apis/schedule/ScheduleApi.d.ts +30 -3
  63. package/dist/apis/schedule/ScheduleApi.d.ts.map +1 -1
  64. package/dist/apis/schedule/ScheduleApi.mjs +37 -2
  65. package/dist/apis/schedule/ScheduleApi.mjs.map +1 -1
  66. package/dist/apis/schedule/types.d.ts +58 -11
  67. package/dist/apis/schedule/types.d.ts.map +1 -1
  68. package/dist/apis/ticketTopics/TicketTopicsApi.cjs +25 -2
  69. package/dist/apis/ticketTopics/TicketTopicsApi.cjs.map +1 -1
  70. package/dist/apis/ticketTopics/TicketTopicsApi.d.ts +18 -4
  71. package/dist/apis/ticketTopics/TicketTopicsApi.d.ts.map +1 -1
  72. package/dist/apis/ticketTopics/TicketTopicsApi.mjs +25 -2
  73. package/dist/apis/ticketTopics/TicketTopicsApi.mjs.map +1 -1
  74. package/dist/apis/ticketTopics/types.d.ts +22 -1
  75. package/dist/apis/ticketTopics/types.d.ts.map +1 -1
  76. package/dist/core/BaseCrudApi.cjs +5 -2
  77. package/dist/core/BaseCrudApi.cjs.map +1 -1
  78. package/dist/core/BaseCrudApi.d.ts +7 -4
  79. package/dist/core/BaseCrudApi.d.ts.map +1 -1
  80. package/dist/core/BaseCrudApi.mjs +5 -2
  81. package/dist/core/BaseCrudApi.mjs.map +1 -1
  82. package/dist/core/types.d.ts +1 -1
  83. package/dist/core/types.d.ts.map +1 -1
  84. package/dist/incommingWebhooks/index.d.ts +7 -7
  85. package/dist/incommingWebhooks/index.d.ts.map +1 -1
  86. package/package.json +1 -1
  87. package/src/apis/answers/AnswersApi.test.ts +67 -0
  88. package/src/apis/answers/AnswersApi.ts +66 -2
  89. package/src/apis/answers/types.ts +64 -2
  90. package/src/apis/botSimulators/BotSimulatorsApi.test.ts +58 -0
  91. package/src/apis/botSimulators/BotSimulatorsApi.ts +57 -0
  92. package/src/apis/botSimulators/index.ts +2 -0
  93. package/src/apis/botSimulators/types.ts +72 -0
  94. package/src/apis/botVersions/BotVersionsApi.test.ts +51 -0
  95. package/src/apis/botVersions/BotVersionsApi.ts +41 -0
  96. package/src/apis/botVersions/types.ts +4 -0
  97. package/src/apis/bots/BotsApi.test.ts +177 -0
  98. package/src/apis/bots/BotsApi.ts +162 -6
  99. package/src/apis/bots/types.ts +267 -15
  100. package/src/apis/index.ts +1 -0
  101. package/src/apis/payloads.test-d.ts +148 -0
  102. package/src/apis/questions/QuestionsApi.test.ts +49 -0
  103. package/src/apis/questions/QuestionsApi.ts +20 -1
  104. package/src/apis/questions/types.ts +25 -6
  105. package/src/apis/quickReplies/QuickRepliesApi.test.ts +69 -0
  106. package/src/apis/quickReplies/QuickRepliesApi.ts +35 -2
  107. package/src/apis/quickReplies/types.ts +34 -2
  108. package/src/apis/schedule/ScheduleApi.test.ts +80 -0
  109. package/src/apis/schedule/ScheduleApi.ts +59 -6
  110. package/src/apis/schedule/types.ts +66 -11
  111. package/src/apis/ticketTopics/TicketTopicsApi.test.ts +40 -0
  112. package/src/apis/ticketTopics/TicketTopicsApi.ts +35 -4
  113. package/src/apis/ticketTopics/types.ts +26 -1
  114. package/src/core/BaseCrudApi.ts +9 -5
  115. package/src/core/types.ts +2 -1
  116. package/src/incommingWebhooks/index.test-d.ts +9 -0
  117. package/src/incommingWebhooks/index.ts +7 -7
@@ -1 +1 @@
1
- {"version":3,"file":"QuickRepliesApi.cjs","names":["BaseCrudApi"],"sources":["../../../src/apis/quickReplies/QuickRepliesApi.ts"],"sourcesContent":["import type { ApiClient } from '../../core/ApiClient'\nimport { BaseCrudApi } from '../../core/BaseCrudApi'\nimport type { QuickReply, CreateQuickReplyPayload, UpdateQuickReplyPayload } from './types'\n\nexport class QuickRepliesApi extends BaseCrudApi<\n QuickReply,\n CreateQuickReplyPayload,\n UpdateQuickReplyPayload\n> {\n constructor(client: ApiClient) {\n super(client, '/quick-replies')\n }\n}\n"],"mappings":";;;;AAIA,IAAa,kBAAb,cAAqCA,qCAInC;CACA,YAAY,QAAmB;AAC7B,QAAM,QAAQ,iBAAiB"}
1
+ {"version":3,"file":"QuickRepliesApi.cjs","names":["BaseCrudApi"],"sources":["../../../src/apis/quickReplies/QuickRepliesApi.ts"],"sourcesContent":["import type { ApiClient } from '../../core/ApiClient'\nimport { BaseCrudApi } from '../../core/BaseCrudApi'\nimport type { ListQuery } from '../../core/types'\nimport type {\n QuickReply,\n QuickRepliesLoadOnDemandQuery,\n QuickRepliesLoadOnDemandResult,\n CreateQuickReplyPayload,\n UpdateQuickReplyPayload,\n} from './types'\n\nexport class QuickRepliesApi extends BaseCrudApi<\n QuickReply,\n CreateQuickReplyPayload,\n UpdateQuickReplyPayload,\n ListQuery<QuickReply>,\n 'OK'\n> {\n constructor(client: ApiClient) {\n super(client, '/quick-replies')\n }\n\n /**\n * Deletes a quick reply (soft delete). Resolves to `'OK'`; an unknown id answers 500.\n * @permissions quickReplies.view OR quickReplies.destroy\n */\n override deleteById(id: string, headers?: Record<string, string>): Promise<'OK'> {\n return super.deleteById(id, headers)\n }\n\n /**\n * Lists the replies the user can use (no department, or one of the departments of the user),\n * the way the chat loads them: `limit`/`offset` instead of pages, and `{ data, total }`\n * instead of the pagination envelope.\n * @permissions quickReplies.view\n */\n loadOnDemand(\n query?: QuickRepliesLoadOnDemandQuery,\n headers?: Record<string, string>,\n ): Promise<QuickRepliesLoadOnDemandResult> {\n return this.client.get<QuickRepliesLoadOnDemandResult>(\n `${this.basePath}/load-on-demand${this.toQueryString(query)}`,\n headers,\n )\n }\n}\n"],"mappings":";;;;AAWA,IAAa,kBAAb,cAAqCA,qCAMnC;CACA,YAAY,QAAmB;AAC7B,QAAM,QAAQ,iBAAiB;;;;;;CAOjC,AAAS,WAAW,IAAY,SAAiD;AAC/E,SAAO,MAAM,WAAW,IAAI,QAAQ;;;;;;;;CAStC,aACE,OACA,SACyC;AACzC,SAAO,KAAK,OAAO,IACjB,GAAG,KAAK,SAAS,iBAAiB,KAAK,cAAc,MAAM,IAC3D,QACD"}
@@ -1,7 +1,20 @@
1
1
  import type { ApiClient } from '../../core/ApiClient';
2
2
  import { BaseCrudApi } from '../../core/BaseCrudApi';
3
- import type { QuickReply, CreateQuickReplyPayload, UpdateQuickReplyPayload } from './types';
4
- export declare class QuickRepliesApi extends BaseCrudApi<QuickReply, CreateQuickReplyPayload, UpdateQuickReplyPayload> {
3
+ import type { ListQuery } from '../../core/types';
4
+ import type { QuickReply, QuickRepliesLoadOnDemandQuery, QuickRepliesLoadOnDemandResult, CreateQuickReplyPayload, UpdateQuickReplyPayload } from './types';
5
+ export declare class QuickRepliesApi extends BaseCrudApi<QuickReply, CreateQuickReplyPayload, UpdateQuickReplyPayload, ListQuery<QuickReply>, 'OK'> {
5
6
  constructor(client: ApiClient);
7
+ /**
8
+ * Deletes a quick reply (soft delete). Resolves to `'OK'`; an unknown id answers 500.
9
+ * @permissions quickReplies.view OR quickReplies.destroy
10
+ */
11
+ deleteById(id: string, headers?: Record<string, string>): Promise<'OK'>;
12
+ /**
13
+ * Lists the replies the user can use (no department, or one of the departments of the user),
14
+ * the way the chat loads them: `limit`/`offset` instead of pages, and `{ data, total }`
15
+ * instead of the pagination envelope.
16
+ * @permissions quickReplies.view
17
+ */
18
+ loadOnDemand(query?: QuickRepliesLoadOnDemandQuery, headers?: Record<string, string>): Promise<QuickRepliesLoadOnDemandResult>;
6
19
  }
7
20
  //# sourceMappingURL=QuickRepliesApi.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"QuickRepliesApi.d.ts","sourceRoot":"","sources":["../../../src/apis/quickReplies/QuickRepliesApi.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,SAAS,EAAE,MAAM,sBAAsB,CAAA;AACrD,OAAO,EAAE,WAAW,EAAE,MAAM,wBAAwB,CAAA;AACpD,OAAO,KAAK,EAAE,UAAU,EAAE,uBAAuB,EAAE,uBAAuB,EAAE,MAAM,SAAS,CAAA;AAE3F,qBAAa,eAAgB,SAAQ,WAAW,CAC9C,UAAU,EACV,uBAAuB,EACvB,uBAAuB,CACxB;gBACa,MAAM,EAAE,SAAS;CAG9B"}
1
+ {"version":3,"file":"QuickRepliesApi.d.ts","sourceRoot":"","sources":["../../../src/apis/quickReplies/QuickRepliesApi.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,SAAS,EAAE,MAAM,sBAAsB,CAAA;AACrD,OAAO,EAAE,WAAW,EAAE,MAAM,wBAAwB,CAAA;AACpD,OAAO,KAAK,EAAE,SAAS,EAAE,MAAM,kBAAkB,CAAA;AACjD,OAAO,KAAK,EACV,UAAU,EACV,6BAA6B,EAC7B,8BAA8B,EAC9B,uBAAuB,EACvB,uBAAuB,EACxB,MAAM,SAAS,CAAA;AAEhB,qBAAa,eAAgB,SAAQ,WAAW,CAC9C,UAAU,EACV,uBAAuB,EACvB,uBAAuB,EACvB,SAAS,CAAC,UAAU,CAAC,EACrB,IAAI,CACL;gBACa,MAAM,EAAE,SAAS;IAI7B;;;OAGG;IACM,UAAU,CAAC,EAAE,EAAE,MAAM,EAAE,OAAO,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,GAAG,OAAO,CAAC,IAAI,CAAC;IAIhF;;;;;OAKG;IACH,YAAY,CACV,KAAK,CAAC,EAAE,6BAA6B,EACrC,OAAO,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,GAC/B,OAAO,CAAC,8BAA8B,CAAC;CAM3C"}
@@ -5,6 +5,22 @@ var QuickRepliesApi = class extends BaseCrudApi {
5
5
  constructor(client) {
6
6
  super(client, "/quick-replies");
7
7
  }
8
+ /**
9
+ * Deletes a quick reply (soft delete). Resolves to `'OK'`; an unknown id answers 500.
10
+ * @permissions quickReplies.view OR quickReplies.destroy
11
+ */
12
+ deleteById(id, headers) {
13
+ return super.deleteById(id, headers);
14
+ }
15
+ /**
16
+ * Lists the replies the user can use (no department, or one of the departments of the user),
17
+ * the way the chat loads them: `limit`/`offset` instead of pages, and `{ data, total }`
18
+ * instead of the pagination envelope.
19
+ * @permissions quickReplies.view
20
+ */
21
+ loadOnDemand(query, headers) {
22
+ return this.client.get(`${this.basePath}/load-on-demand${this.toQueryString(query)}`, headers);
23
+ }
8
24
  };
9
25
 
10
26
  //#endregion
@@ -1 +1 @@
1
- {"version":3,"file":"QuickRepliesApi.mjs","names":[],"sources":["../../../src/apis/quickReplies/QuickRepliesApi.ts"],"sourcesContent":["import type { ApiClient } from '../../core/ApiClient'\nimport { BaseCrudApi } from '../../core/BaseCrudApi'\nimport type { QuickReply, CreateQuickReplyPayload, UpdateQuickReplyPayload } from './types'\n\nexport class QuickRepliesApi extends BaseCrudApi<\n QuickReply,\n CreateQuickReplyPayload,\n UpdateQuickReplyPayload\n> {\n constructor(client: ApiClient) {\n super(client, '/quick-replies')\n }\n}\n"],"mappings":";;;AAIA,IAAa,kBAAb,cAAqC,YAInC;CACA,YAAY,QAAmB;AAC7B,QAAM,QAAQ,iBAAiB"}
1
+ {"version":3,"file":"QuickRepliesApi.mjs","names":[],"sources":["../../../src/apis/quickReplies/QuickRepliesApi.ts"],"sourcesContent":["import type { ApiClient } from '../../core/ApiClient'\nimport { BaseCrudApi } from '../../core/BaseCrudApi'\nimport type { ListQuery } from '../../core/types'\nimport type {\n QuickReply,\n QuickRepliesLoadOnDemandQuery,\n QuickRepliesLoadOnDemandResult,\n CreateQuickReplyPayload,\n UpdateQuickReplyPayload,\n} from './types'\n\nexport class QuickRepliesApi extends BaseCrudApi<\n QuickReply,\n CreateQuickReplyPayload,\n UpdateQuickReplyPayload,\n ListQuery<QuickReply>,\n 'OK'\n> {\n constructor(client: ApiClient) {\n super(client, '/quick-replies')\n }\n\n /**\n * Deletes a quick reply (soft delete). Resolves to `'OK'`; an unknown id answers 500.\n * @permissions quickReplies.view OR quickReplies.destroy\n */\n override deleteById(id: string, headers?: Record<string, string>): Promise<'OK'> {\n return super.deleteById(id, headers)\n }\n\n /**\n * Lists the replies the user can use (no department, or one of the departments of the user),\n * the way the chat loads them: `limit`/`offset` instead of pages, and `{ data, total }`\n * instead of the pagination envelope.\n * @permissions quickReplies.view\n */\n loadOnDemand(\n query?: QuickRepliesLoadOnDemandQuery,\n headers?: Record<string, string>,\n ): Promise<QuickRepliesLoadOnDemandResult> {\n return this.client.get<QuickRepliesLoadOnDemandResult>(\n `${this.basePath}/load-on-demand${this.toQueryString(query)}`,\n headers,\n )\n }\n}\n"],"mappings":";;;AAWA,IAAa,kBAAb,cAAqC,YAMnC;CACA,YAAY,QAAmB;AAC7B,QAAM,QAAQ,iBAAiB;;;;;;CAOjC,AAAS,WAAW,IAAY,SAAiD;AAC/E,SAAO,MAAM,WAAW,IAAI,QAAQ;;;;;;;;CAStC,aACE,OACA,SACyC;AACzC,SAAO,KAAK,OAAO,IACjB,GAAG,KAAK,SAAS,iBAAiB,KAAK,cAAc,MAAM,IAC3D,QACD"}
@@ -1,3 +1,4 @@
1
+ import type { ListQuery } from '../../core/types';
1
2
  import type { Category } from '../categories/types';
2
3
  import type { Department } from '../departments/types';
3
4
  import type { File } from '../files/types';
@@ -9,17 +10,44 @@ export type QuickReply = {
9
10
  createdAt: string;
10
11
  updatedAt: string;
11
12
  deletedAt: string | null;
13
+ /** Empty = all departments. */
12
14
  departments?: Department[];
13
15
  categories?: Category[];
14
16
  files?: File[];
15
17
  };
16
18
  export type QuickReplyRelationships = 'departments' | 'categories' | 'files';
19
+ /**
20
+ * Files already uploaded through `FilesApi` with `attachedType: 'quickreply.file'` — uploaded
21
+ * with another type they get the `attachedId` but never show in `files`.
22
+ */
23
+ export type QuickReplyFilePayload = {
24
+ id: string;
25
+ };
26
+ /** `title` and `text` are each unique in the account (409, unless the account allows duplicate names). */
17
27
  export type CreateQuickReplyPayload = {
18
28
  title: string;
19
29
  text: string;
30
+ /** Department ids; omitted = all departments. */
31
+ departmentIds?: string[];
32
+ categoryIds?: string[];
33
+ files?: QuickReplyFilePayload[];
20
34
  };
35
+ /**
36
+ * Not partial: `title` and `text` are required, the departments and categories are replaced
37
+ * (omitted = none), and so are the files.
38
+ */
21
39
  export type UpdateQuickReplyPayload = {
22
- title?: string;
23
- text?: string;
40
+ title: string;
41
+ text: string;
42
+ departmentIds?: string[];
43
+ categoryIds?: string[];
44
+ /** The files to keep or attach; `[]` removes all. Required: omitted, the update fails (500). */
45
+ files: QuickReplyFilePayload[];
46
+ };
47
+ /** The query of `loadOnDemand`, passed to the database as is. */
48
+ export type QuickRepliesLoadOnDemandQuery = Pick<ListQuery<QuickReply>, 'where' | 'include' | 'order' | 'attributes' | 'limit' | 'offset'>;
49
+ export type QuickRepliesLoadOnDemandResult = {
50
+ data: QuickReply[];
51
+ total: number;
24
52
  };
25
53
  //# sourceMappingURL=types.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"types.d.ts","sourceRoot":"","sources":["../../../src/apis/quickReplies/types.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,QAAQ,EAAE,MAAM,qBAAqB,CAAA;AACnD,OAAO,KAAK,EAAE,UAAU,EAAE,MAAM,sBAAsB,CAAA;AACtD,OAAO,KAAK,EAAE,IAAI,EAAE,MAAM,gBAAgB,CAAA;AAE1C,MAAM,MAAM,UAAU,GAAG;IACvB,EAAE,EAAE,MAAM,CAAA;IACV,KAAK,EAAE,MAAM,CAAA;IACb,IAAI,EAAE,MAAM,CAAA;IACZ,SAAS,EAAE,MAAM,CAAA;IACjB,SAAS,EAAE,MAAM,CAAA;IACjB,SAAS,EAAE,MAAM,CAAA;IACjB,SAAS,EAAE,MAAM,GAAG,IAAI,CAAA;IAExB,WAAW,CAAC,EAAE,UAAU,EAAE,CAAA;IAC1B,UAAU,CAAC,EAAE,QAAQ,EAAE,CAAA;IACvB,KAAK,CAAC,EAAE,IAAI,EAAE,CAAA;CACf,CAAA;AAED,MAAM,MAAM,uBAAuB,GAAG,aAAa,GAAG,YAAY,GAAG,OAAO,CAAA;AAE5E,MAAM,MAAM,uBAAuB,GAAG;IACpC,KAAK,EAAE,MAAM,CAAA;IACb,IAAI,EAAE,MAAM,CAAA;CACb,CAAA;AAED,MAAM,MAAM,uBAAuB,GAAG;IACpC,KAAK,CAAC,EAAE,MAAM,CAAA;IACd,IAAI,CAAC,EAAE,MAAM,CAAA;CACd,CAAA"}
1
+ {"version":3,"file":"types.d.ts","sourceRoot":"","sources":["../../../src/apis/quickReplies/types.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,SAAS,EAAE,MAAM,kBAAkB,CAAA;AACjD,OAAO,KAAK,EAAE,QAAQ,EAAE,MAAM,qBAAqB,CAAA;AACnD,OAAO,KAAK,EAAE,UAAU,EAAE,MAAM,sBAAsB,CAAA;AACtD,OAAO,KAAK,EAAE,IAAI,EAAE,MAAM,gBAAgB,CAAA;AAE1C,MAAM,MAAM,UAAU,GAAG;IACvB,EAAE,EAAE,MAAM,CAAA;IACV,KAAK,EAAE,MAAM,CAAA;IACb,IAAI,EAAE,MAAM,CAAA;IACZ,SAAS,EAAE,MAAM,CAAA;IACjB,SAAS,EAAE,MAAM,CAAA;IACjB,SAAS,EAAE,MAAM,CAAA;IACjB,SAAS,EAAE,MAAM,GAAG,IAAI,CAAA;IAExB,+BAA+B;IAC/B,WAAW,CAAC,EAAE,UAAU,EAAE,CAAA;IAC1B,UAAU,CAAC,EAAE,QAAQ,EAAE,CAAA;IACvB,KAAK,CAAC,EAAE,IAAI,EAAE,CAAA;CACf,CAAA;AAED,MAAM,MAAM,uBAAuB,GAAG,aAAa,GAAG,YAAY,GAAG,OAAO,CAAA;AAE5E;;;GAGG;AACH,MAAM,MAAM,qBAAqB,GAAG;IAAE,EAAE,EAAE,MAAM,CAAA;CAAE,CAAA;AAElD,0GAA0G;AAC1G,MAAM,MAAM,uBAAuB,GAAG;IACpC,KAAK,EAAE,MAAM,CAAA;IACb,IAAI,EAAE,MAAM,CAAA;IACZ,iDAAiD;IACjD,aAAa,CAAC,EAAE,MAAM,EAAE,CAAA;IACxB,WAAW,CAAC,EAAE,MAAM,EAAE,CAAA;IACtB,KAAK,CAAC,EAAE,qBAAqB,EAAE,CAAA;CAChC,CAAA;AAED;;;GAGG;AACH,MAAM,MAAM,uBAAuB,GAAG;IACpC,KAAK,EAAE,MAAM,CAAA;IACb,IAAI,EAAE,MAAM,CAAA;IACZ,aAAa,CAAC,EAAE,MAAM,EAAE,CAAA;IACxB,WAAW,CAAC,EAAE,MAAM,EAAE,CAAA;IACtB,gGAAgG;IAChG,KAAK,EAAE,qBAAqB,EAAE,CAAA;CAC/B,CAAA;AAED,iEAAiE;AACjE,MAAM,MAAM,6BAA6B,GAAG,IAAI,CAC9C,SAAS,CAAC,UAAU,CAAC,EACrB,OAAO,GAAG,SAAS,GAAG,OAAO,GAAG,YAAY,GAAG,OAAO,GAAG,QAAQ,CAClE,CAAA;AAED,MAAM,MAAM,8BAA8B,GAAG;IAC3C,IAAI,EAAE,UAAU,EAAE,CAAA;IAClB,KAAK,EAAE,MAAM,CAAA;CACd,CAAA"}
@@ -1,11 +1,46 @@
1
1
  Object.defineProperty(exports, Symbol.toStringTag, { value: 'Module' });
2
- const require_core_BaseCrudApi = require('../../core/BaseCrudApi.cjs');
2
+ const require_core_BaseReadApi = require('../../core/BaseReadApi.cjs');
3
3
 
4
4
  //#region src/apis/schedule/ScheduleApi.ts
5
- var ScheduleApi = class extends require_core_BaseCrudApi.BaseCrudApi {
5
+ /**
6
+ * Scheduled messages. Create answers no body and update answers the stored record, so this
7
+ * class extends `BaseReadApi` and writes its own create/update/delete.
8
+ */
9
+ var ScheduleApi = class extends require_core_BaseReadApi.BaseReadApi {
6
10
  constructor(client) {
7
11
  super(client, "/schedule");
8
12
  }
13
+ /**
14
+ * Creates a schedule. Resolves with NO CONTENT: find it back with `getOne` (e.g. by
15
+ * `contactId` and `scheduledAt`).
16
+ * @permissions schedule.create
17
+ */
18
+ create(body, headers) {
19
+ return this.client.post(this.basePath, body, headers);
20
+ }
21
+ /**
22
+ * Updates a schedule. Resolves to the stored record, without relationships. An unknown id
23
+ * answers 500.
24
+ * @permissions schedule.view OR schedule.update
25
+ */
26
+ updateById(id, body, headers) {
27
+ return this.client.put(`${this.basePath}/${id}`, body, headers);
28
+ }
29
+ /**
30
+ * Deletes a schedule (soft delete). Resolves to `'OK'`; an unknown id answers 500.
31
+ * @permissions schedule.view OR schedule.destroy
32
+ */
33
+ deleteById(id, headers) {
34
+ return this.client.delete(`${this.basePath}/${id}`, headers);
35
+ }
36
+ /**
37
+ * Deletes several schedules of the account. Ids that are not UUIDs, or of another account, are
38
+ * skipped in silence; always resolves to `'OK'`.
39
+ * @permissions schedule.destroy
40
+ */
41
+ deleteMany(ids, headers) {
42
+ return this.client.request("DELETE", `${this.basePath}/many`, { where: { id: ids } }, headers);
43
+ }
9
44
  };
10
45
 
11
46
  //#endregion
@@ -1 +1 @@
1
- {"version":3,"file":"ScheduleApi.cjs","names":["BaseCrudApi"],"sources":["../../../src/apis/schedule/ScheduleApi.ts"],"sourcesContent":["import type { ApiClient } from '../../core/ApiClient'\nimport { BaseCrudApi } from '../../core/BaseCrudApi'\nimport type { Schedule, CreateSchedulePayload, UpdateSchedulePayload } from './types'\n\nexport class ScheduleApi extends BaseCrudApi<\n Schedule,\n CreateSchedulePayload,\n UpdateSchedulePayload\n> {\n constructor(client: ApiClient) {\n super(client, '/schedule')\n }\n}\n"],"mappings":";;;;AAIA,IAAa,cAAb,cAAiCA,qCAI/B;CACA,YAAY,QAAmB;AAC7B,QAAM,QAAQ,YAAY"}
1
+ {"version":3,"file":"ScheduleApi.cjs","names":["BaseReadApi"],"sources":["../../../src/apis/schedule/ScheduleApi.ts"],"sourcesContent":["import type { ApiClient } from '../../core/ApiClient'\nimport { BaseReadApi } from '../../core/BaseReadApi'\nimport type {\n Schedule,\n ScheduleRecord,\n CreateSchedulePayload,\n UpdateSchedulePayload,\n} from './types'\n\n/**\n * Scheduled messages. Create answers no body and update answers the stored record, so this\n * class extends `BaseReadApi` and writes its own create/update/delete.\n */\nexport class ScheduleApi extends BaseReadApi<Schedule> {\n constructor(client: ApiClient) {\n super(client, '/schedule')\n }\n\n /**\n * Creates a schedule. Resolves with NO CONTENT: find it back with `getOne` (e.g. by\n * `contactId` and `scheduledAt`).\n * @permissions schedule.create\n */\n create(body: CreateSchedulePayload, headers?: Record<string, string>): Promise<void> {\n return this.client.post<void, CreateSchedulePayload>(this.basePath, body, headers)\n }\n\n /**\n * Updates a schedule. Resolves to the stored record, without relationships. An unknown id\n * answers 500.\n * @permissions schedule.view OR schedule.update\n */\n updateById(\n id: string,\n body: UpdateSchedulePayload,\n headers?: Record<string, string>,\n ): Promise<ScheduleRecord> {\n return this.client.put<ScheduleRecord, UpdateSchedulePayload>(\n `${this.basePath}/${id}`,\n body,\n headers,\n )\n }\n\n /**\n * Deletes a schedule (soft delete). Resolves to `'OK'`; an unknown id answers 500.\n * @permissions schedule.view OR schedule.destroy\n */\n deleteById(id: string, headers?: Record<string, string>): Promise<'OK'> {\n return this.client.delete<'OK'>(`${this.basePath}/${id}`, headers)\n }\n\n /**\n * Deletes several schedules of the account. Ids that are not UUIDs, or of another account, are\n * skipped in silence; always resolves to `'OK'`.\n * @permissions schedule.destroy\n */\n deleteMany(ids: string[], headers?: Record<string, string>): Promise<'OK'> {\n return this.client.request<'OK', { where: { id: string[] } }>(\n 'DELETE',\n `${this.basePath}/many`,\n { where: { id: ids } },\n headers,\n )\n }\n}\n"],"mappings":";;;;;;;;AAaA,IAAa,cAAb,cAAiCA,qCAAsB;CACrD,YAAY,QAAmB;AAC7B,QAAM,QAAQ,YAAY;;;;;;;CAQ5B,OAAO,MAA6B,SAAiD;AACnF,SAAO,KAAK,OAAO,KAAkC,KAAK,UAAU,MAAM,QAAQ;;;;;;;CAQpF,WACE,IACA,MACA,SACyB;AACzB,SAAO,KAAK,OAAO,IACjB,GAAG,KAAK,SAAS,GAAG,MACpB,MACA,QACD;;;;;;CAOH,WAAW,IAAY,SAAiD;AACtE,SAAO,KAAK,OAAO,OAAa,GAAG,KAAK,SAAS,GAAG,MAAM,QAAQ;;;;;;;CAQpE,WAAW,KAAe,SAAiD;AACzE,SAAO,KAAK,OAAO,QACjB,UACA,GAAG,KAAK,SAAS,QACjB,EAAE,OAAO,EAAE,IAAI,KAAK,EAAE,EACtB,QACD"}
@@ -1,7 +1,34 @@
1
1
  import type { ApiClient } from '../../core/ApiClient';
2
- import { BaseCrudApi } from '../../core/BaseCrudApi';
3
- import type { Schedule, CreateSchedulePayload, UpdateSchedulePayload } from './types';
4
- export declare class ScheduleApi extends BaseCrudApi<Schedule, CreateSchedulePayload, UpdateSchedulePayload> {
2
+ import { BaseReadApi } from '../../core/BaseReadApi';
3
+ import type { Schedule, ScheduleRecord, CreateSchedulePayload, UpdateSchedulePayload } from './types';
4
+ /**
5
+ * Scheduled messages. Create answers no body and update answers the stored record, so this
6
+ * class extends `BaseReadApi` and writes its own create/update/delete.
7
+ */
8
+ export declare class ScheduleApi extends BaseReadApi<Schedule> {
5
9
  constructor(client: ApiClient);
10
+ /**
11
+ * Creates a schedule. Resolves with NO CONTENT: find it back with `getOne` (e.g. by
12
+ * `contactId` and `scheduledAt`).
13
+ * @permissions schedule.create
14
+ */
15
+ create(body: CreateSchedulePayload, headers?: Record<string, string>): Promise<void>;
16
+ /**
17
+ * Updates a schedule. Resolves to the stored record, without relationships. An unknown id
18
+ * answers 500.
19
+ * @permissions schedule.view OR schedule.update
20
+ */
21
+ updateById(id: string, body: UpdateSchedulePayload, headers?: Record<string, string>): Promise<ScheduleRecord>;
22
+ /**
23
+ * Deletes a schedule (soft delete). Resolves to `'OK'`; an unknown id answers 500.
24
+ * @permissions schedule.view OR schedule.destroy
25
+ */
26
+ deleteById(id: string, headers?: Record<string, string>): Promise<'OK'>;
27
+ /**
28
+ * Deletes several schedules of the account. Ids that are not UUIDs, or of another account, are
29
+ * skipped in silence; always resolves to `'OK'`.
30
+ * @permissions schedule.destroy
31
+ */
32
+ deleteMany(ids: string[], headers?: Record<string, string>): Promise<'OK'>;
6
33
  }
7
34
  //# sourceMappingURL=ScheduleApi.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"ScheduleApi.d.ts","sourceRoot":"","sources":["../../../src/apis/schedule/ScheduleApi.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,SAAS,EAAE,MAAM,sBAAsB,CAAA;AACrD,OAAO,EAAE,WAAW,EAAE,MAAM,wBAAwB,CAAA;AACpD,OAAO,KAAK,EAAE,QAAQ,EAAE,qBAAqB,EAAE,qBAAqB,EAAE,MAAM,SAAS,CAAA;AAErF,qBAAa,WAAY,SAAQ,WAAW,CAC1C,QAAQ,EACR,qBAAqB,EACrB,qBAAqB,CACtB;gBACa,MAAM,EAAE,SAAS;CAG9B"}
1
+ {"version":3,"file":"ScheduleApi.d.ts","sourceRoot":"","sources":["../../../src/apis/schedule/ScheduleApi.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,SAAS,EAAE,MAAM,sBAAsB,CAAA;AACrD,OAAO,EAAE,WAAW,EAAE,MAAM,wBAAwB,CAAA;AACpD,OAAO,KAAK,EACV,QAAQ,EACR,cAAc,EACd,qBAAqB,EACrB,qBAAqB,EACtB,MAAM,SAAS,CAAA;AAEhB;;;GAGG;AACH,qBAAa,WAAY,SAAQ,WAAW,CAAC,QAAQ,CAAC;gBACxC,MAAM,EAAE,SAAS;IAI7B;;;;OAIG;IACH,MAAM,CAAC,IAAI,EAAE,qBAAqB,EAAE,OAAO,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,GAAG,OAAO,CAAC,IAAI,CAAC;IAIpF;;;;OAIG;IACH,UAAU,CACR,EAAE,EAAE,MAAM,EACV,IAAI,EAAE,qBAAqB,EAC3B,OAAO,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,GAC/B,OAAO,CAAC,cAAc,CAAC;IAQ1B;;;OAGG;IACH,UAAU,CAAC,EAAE,EAAE,MAAM,EAAE,OAAO,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,GAAG,OAAO,CAAC,IAAI,CAAC;IAIvE;;;;OAIG;IACH,UAAU,CAAC,GAAG,EAAE,MAAM,EAAE,EAAE,OAAO,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,GAAG,OAAO,CAAC,IAAI,CAAC;CAQ3E"}
@@ -1,10 +1,45 @@
1
- import { BaseCrudApi } from "../../core/BaseCrudApi.mjs";
1
+ import { BaseReadApi } from "../../core/BaseReadApi.mjs";
2
2
 
3
3
  //#region src/apis/schedule/ScheduleApi.ts
4
- var ScheduleApi = class extends BaseCrudApi {
4
+ /**
5
+ * Scheduled messages. Create answers no body and update answers the stored record, so this
6
+ * class extends `BaseReadApi` and writes its own create/update/delete.
7
+ */
8
+ var ScheduleApi = class extends BaseReadApi {
5
9
  constructor(client) {
6
10
  super(client, "/schedule");
7
11
  }
12
+ /**
13
+ * Creates a schedule. Resolves with NO CONTENT: find it back with `getOne` (e.g. by
14
+ * `contactId` and `scheduledAt`).
15
+ * @permissions schedule.create
16
+ */
17
+ create(body, headers) {
18
+ return this.client.post(this.basePath, body, headers);
19
+ }
20
+ /**
21
+ * Updates a schedule. Resolves to the stored record, without relationships. An unknown id
22
+ * answers 500.
23
+ * @permissions schedule.view OR schedule.update
24
+ */
25
+ updateById(id, body, headers) {
26
+ return this.client.put(`${this.basePath}/${id}`, body, headers);
27
+ }
28
+ /**
29
+ * Deletes a schedule (soft delete). Resolves to `'OK'`; an unknown id answers 500.
30
+ * @permissions schedule.view OR schedule.destroy
31
+ */
32
+ deleteById(id, headers) {
33
+ return this.client.delete(`${this.basePath}/${id}`, headers);
34
+ }
35
+ /**
36
+ * Deletes several schedules of the account. Ids that are not UUIDs, or of another account, are
37
+ * skipped in silence; always resolves to `'OK'`.
38
+ * @permissions schedule.destroy
39
+ */
40
+ deleteMany(ids, headers) {
41
+ return this.client.request("DELETE", `${this.basePath}/many`, { where: { id: ids } }, headers);
42
+ }
8
43
  };
9
44
 
10
45
  //#endregion
@@ -1 +1 @@
1
- {"version":3,"file":"ScheduleApi.mjs","names":[],"sources":["../../../src/apis/schedule/ScheduleApi.ts"],"sourcesContent":["import type { ApiClient } from '../../core/ApiClient'\nimport { BaseCrudApi } from '../../core/BaseCrudApi'\nimport type { Schedule, CreateSchedulePayload, UpdateSchedulePayload } from './types'\n\nexport class ScheduleApi extends BaseCrudApi<\n Schedule,\n CreateSchedulePayload,\n UpdateSchedulePayload\n> {\n constructor(client: ApiClient) {\n super(client, '/schedule')\n }\n}\n"],"mappings":";;;AAIA,IAAa,cAAb,cAAiC,YAI/B;CACA,YAAY,QAAmB;AAC7B,QAAM,QAAQ,YAAY"}
1
+ {"version":3,"file":"ScheduleApi.mjs","names":[],"sources":["../../../src/apis/schedule/ScheduleApi.ts"],"sourcesContent":["import type { ApiClient } from '../../core/ApiClient'\nimport { BaseReadApi } from '../../core/BaseReadApi'\nimport type {\n Schedule,\n ScheduleRecord,\n CreateSchedulePayload,\n UpdateSchedulePayload,\n} from './types'\n\n/**\n * Scheduled messages. Create answers no body and update answers the stored record, so this\n * class extends `BaseReadApi` and writes its own create/update/delete.\n */\nexport class ScheduleApi extends BaseReadApi<Schedule> {\n constructor(client: ApiClient) {\n super(client, '/schedule')\n }\n\n /**\n * Creates a schedule. Resolves with NO CONTENT: find it back with `getOne` (e.g. by\n * `contactId` and `scheduledAt`).\n * @permissions schedule.create\n */\n create(body: CreateSchedulePayload, headers?: Record<string, string>): Promise<void> {\n return this.client.post<void, CreateSchedulePayload>(this.basePath, body, headers)\n }\n\n /**\n * Updates a schedule. Resolves to the stored record, without relationships. An unknown id\n * answers 500.\n * @permissions schedule.view OR schedule.update\n */\n updateById(\n id: string,\n body: UpdateSchedulePayload,\n headers?: Record<string, string>,\n ): Promise<ScheduleRecord> {\n return this.client.put<ScheduleRecord, UpdateSchedulePayload>(\n `${this.basePath}/${id}`,\n body,\n headers,\n )\n }\n\n /**\n * Deletes a schedule (soft delete). Resolves to `'OK'`; an unknown id answers 500.\n * @permissions schedule.view OR schedule.destroy\n */\n deleteById(id: string, headers?: Record<string, string>): Promise<'OK'> {\n return this.client.delete<'OK'>(`${this.basePath}/${id}`, headers)\n }\n\n /**\n * Deletes several schedules of the account. Ids that are not UUIDs, or of another account, are\n * skipped in silence; always resolves to `'OK'`.\n * @permissions schedule.destroy\n */\n deleteMany(ids: string[], headers?: Record<string, string>): Promise<'OK'> {\n return this.client.request<'OK', { where: { id: string[] } }>(\n 'DELETE',\n `${this.basePath}/many`,\n { where: { id: ids } },\n headers,\n )\n }\n}\n"],"mappings":";;;;;;;AAaA,IAAa,cAAb,cAAiC,YAAsB;CACrD,YAAY,QAAmB;AAC7B,QAAM,QAAQ,YAAY;;;;;;;CAQ5B,OAAO,MAA6B,SAAiD;AACnF,SAAO,KAAK,OAAO,KAAkC,KAAK,UAAU,MAAM,QAAQ;;;;;;;CAQpF,WACE,IACA,MACA,SACyB;AACzB,SAAO,KAAK,OAAO,IACjB,GAAG,KAAK,SAAS,GAAG,MACpB,MACA,QACD;;;;;;CAOH,WAAW,IAAY,SAAiD;AACtE,SAAO,KAAK,OAAO,OAAa,GAAG,KAAK,SAAS,GAAG,MAAM,QAAQ;;;;;;;CAQpE,WAAW,KAAe,SAAiD;AACzE,SAAO,KAAK,OAAO,QACjB,UACA,GAAG,KAAK,SAAS,QACjB,EAAE,OAAO,EAAE,IAAI,KAAK,EAAE,EACtB,QACD"}
@@ -1,14 +1,26 @@
1
1
  import type { Contact } from '../contacts/types';
2
2
  import type { Department } from '../departments/types';
3
+ import type { File } from '../files/types';
3
4
  import type { User } from '../users/types';
5
+ /** `scheduled` until the worker runs it; `error` and `not_sent` come with the `reason`. */
6
+ export type ScheduleStatus = 'scheduled' | 'done' | 'error' | 'not_sent';
4
7
  export type Schedule = {
5
8
  id: string;
6
- status: string;
9
+ status: ScheduleStatus;
10
+ /**
11
+ * Why it was not sent: `ALREADY_TICKET_OPENED`, `DDD_BLOCKED`, `SERVICE_IS_NOT_ENABLED`,
12
+ * `CONTACT_IS_BLOCKED`, `CONTACT_NOT_EXISTS`, `HSM_LIMIT_EXCEEDED`, `HSM_IS_BLOCKED`,
13
+ * `SERVICE_IS_BLOCKED`, `INVALID_PAYLOAD`, a WhatsApp Business error code or
14
+ * `SCHEDULE_UNKNOWN_REASON`.
15
+ */
7
16
  reason: string | null;
8
- message: string;
17
+ /** For a WhatsApp Business template (`hsmId`), the message the server built from it. */
18
+ message: string | null;
9
19
  notes: string;
10
- openTicket: boolean;
11
- notificateUser: boolean;
20
+ openTicket: boolean | null;
21
+ notificateUser: boolean | null;
22
+ /** Sends the message even when the contact already has an open ticket. */
23
+ sendWithOpenTicket: boolean | null;
12
24
  extraOptions: Record<string, unknown> | null;
13
25
  hsmId: string | null;
14
26
  hsmFileId: string | null;
@@ -19,36 +31,71 @@ export type Schedule = {
19
31
  accountId: string;
20
32
  createdAt: string;
21
33
  updatedAt: string;
22
- deletedAt: string | null;
23
34
  contact?: Contact;
24
35
  department?: Department;
25
36
  user?: User | null;
37
+ files?: File[];
38
+ /** The header media of the WhatsApp Business template. */
39
+ hsmFile?: File;
40
+ };
41
+ /** The schedule as stored, without relationships: what `updateById` resolves to. */
42
+ export type ScheduleRecord = Omit<Schedule, 'contact' | 'department' | 'user' | 'files' | 'hsmFile'> & {
43
+ deletedAt: string | null;
44
+ };
45
+ export type ScheduleRelationships = 'contact' | 'department' | 'user' | 'files' | 'hsmFile' | 'contact.service' | 'contact.person';
46
+ /** A new attachment. */
47
+ export type ScheduleNewFilePayload = {
48
+ base64: string;
49
+ name: string;
50
+ mimetype: string;
51
+ };
52
+ /** On update: a new attachment, or one to keep (`id`). */
53
+ export type ScheduleFilePayload = ScheduleNewFilePayload | {
54
+ id: string;
26
55
  };
27
- export type ScheduleRelationships = 'contact' | 'department' | 'user';
56
+ /**
57
+ * Another schedule of the connection less than 5 minutes apart answers 402
58
+ * (`Schedule time is already exist.`). A contact of another account answers 500.
59
+ */
28
60
  export type CreateSchedulePayload = {
29
61
  scheduledAt: string;
30
62
  contactId: string;
31
63
  departmentId: string;
32
- message: string;
64
+ /** Up to 1024 characters. Optional for a WhatsApp Business template, built from `hsmId`. */
65
+ message?: string;
66
+ /**
67
+ * Up to 1024 characters. Required by the route only with `openTicket: true`, but the column is
68
+ * NOT NULL: send it always (an empty string is fine).
69
+ */
33
70
  notes: string;
34
- openTicket: boolean;
71
+ openTicket?: boolean;
35
72
  notificateUser?: boolean;
73
+ sendWithOpenTicket?: boolean;
36
74
  userId?: string;
37
75
  hsmId?: string;
38
76
  hsmFileId?: string;
39
77
  extraOptions?: Record<string, unknown>;
78
+ /** New attachments only: the create drops `{ id }` items. */
79
+ files?: ScheduleNewFilePayload[];
40
80
  };
81
+ /**
82
+ * Not partial: `scheduledAt`, `contactId` and `departmentId` are required on update too. The
83
+ * 5-minute conflict (402) is checked against the whole account.
84
+ */
41
85
  export type UpdateSchedulePayload = {
42
- scheduledAt?: string;
43
- contactId?: string;
44
- departmentId?: string;
86
+ scheduledAt: string;
87
+ contactId: string;
88
+ departmentId: string;
45
89
  userId?: string | null;
46
90
  message?: string;
47
91
  notes?: string;
48
92
  openTicket?: boolean;
49
93
  notificateUser?: boolean;
94
+ sendWithOpenTicket?: boolean;
50
95
  hsmId?: string | null;
51
96
  hsmFileId?: string | null;
52
97
  extraOptions?: Record<string, unknown> | null;
98
+ /** Replaces the attachments: `{ id }` keeps one, `{ base64, ... }` adds one; omitted or `[]` removes all. */
99
+ files?: ScheduleFilePayload[];
53
100
  };
54
101
  //# sourceMappingURL=types.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"types.d.ts","sourceRoot":"","sources":["../../../src/apis/schedule/types.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,OAAO,EAAE,MAAM,mBAAmB,CAAA;AAChD,OAAO,KAAK,EAAE,UAAU,EAAE,MAAM,sBAAsB,CAAA;AACtD,OAAO,KAAK,EAAE,IAAI,EAAE,MAAM,gBAAgB,CAAA;AAE1C,MAAM,MAAM,QAAQ,GAAG;IACrB,EAAE,EAAE,MAAM,CAAA;IACV,MAAM,EAAE,MAAM,CAAA;IACd,MAAM,EAAE,MAAM,GAAG,IAAI,CAAA;IACrB,OAAO,EAAE,MAAM,CAAA;IACf,KAAK,EAAE,MAAM,CAAA;IACb,UAAU,EAAE,OAAO,CAAA;IACnB,cAAc,EAAE,OAAO,CAAA;IACvB,YAAY,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,GAAG,IAAI,CAAA;IAC5C,KAAK,EAAE,MAAM,GAAG,IAAI,CAAA;IACpB,SAAS,EAAE,MAAM,GAAG,IAAI,CAAA;IACxB,WAAW,EAAE,MAAM,CAAA;IACnB,SAAS,EAAE,MAAM,CAAA;IACjB,MAAM,EAAE,MAAM,GAAG,IAAI,CAAA;IACrB,YAAY,EAAE,MAAM,CAAA;IACpB,SAAS,EAAE,MAAM,CAAA;IACjB,SAAS,EAAE,MAAM,CAAA;IACjB,SAAS,EAAE,MAAM,CAAA;IACjB,SAAS,EAAE,MAAM,GAAG,IAAI,CAAA;IAExB,OAAO,CAAC,EAAE,OAAO,CAAA;IACjB,UAAU,CAAC,EAAE,UAAU,CAAA;IACvB,IAAI,CAAC,EAAE,IAAI,GAAG,IAAI,CAAA;CACnB,CAAA;AAED,MAAM,MAAM,qBAAqB,GAAG,SAAS,GAAG,YAAY,GAAG,MAAM,CAAA;AAErE,MAAM,MAAM,qBAAqB,GAAG;IAClC,WAAW,EAAE,MAAM,CAAA;IACnB,SAAS,EAAE,MAAM,CAAA;IACjB,YAAY,EAAE,MAAM,CAAA;IACpB,OAAO,EAAE,MAAM,CAAA;IACf,KAAK,EAAE,MAAM,CAAA;IACb,UAAU,EAAE,OAAO,CAAA;IACnB,cAAc,CAAC,EAAE,OAAO,CAAA;IACxB,MAAM,CAAC,EAAE,MAAM,CAAA;IACf,KAAK,CAAC,EAAE,MAAM,CAAA;IACd,SAAS,CAAC,EAAE,MAAM,CAAA;IAClB,YAAY,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAAA;CACvC,CAAA;AAED,MAAM,MAAM,qBAAqB,GAAG;IAClC,WAAW,CAAC,EAAE,MAAM,CAAA;IACpB,SAAS,CAAC,EAAE,MAAM,CAAA;IAClB,YAAY,CAAC,EAAE,MAAM,CAAA;IACrB,MAAM,CAAC,EAAE,MAAM,GAAG,IAAI,CAAA;IACtB,OAAO,CAAC,EAAE,MAAM,CAAA;IAChB,KAAK,CAAC,EAAE,MAAM,CAAA;IACd,UAAU,CAAC,EAAE,OAAO,CAAA;IACpB,cAAc,CAAC,EAAE,OAAO,CAAA;IACxB,KAAK,CAAC,EAAE,MAAM,GAAG,IAAI,CAAA;IACrB,SAAS,CAAC,EAAE,MAAM,GAAG,IAAI,CAAA;IACzB,YAAY,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,GAAG,IAAI,CAAA;CAC9C,CAAA"}
1
+ {"version":3,"file":"types.d.ts","sourceRoot":"","sources":["../../../src/apis/schedule/types.ts"],"names":[],"mappings":"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"}
@@ -9,16 +9,39 @@ var TicketTopicsApi = class extends require_core_BaseCrudApi.BaseCrudApi {
9
9
  this.unarchive = this.unarchive.bind(this);
10
10
  }
11
11
  /**
12
+ * Returns the first topic matching the query, or `null` when none match. Reads one item of the
13
+ * paginated list (instead of `paginate: false`), the only path where `departmentIds` and
14
+ * `includeNoDepartment` apply.
15
+ * @permissions ticketTopics.view
16
+ */
17
+ async getOne(query, headers) {
18
+ return (await this.getMany({
19
+ ...query,
20
+ paginate: true,
21
+ perPage: 1,
22
+ page: 1
23
+ }, headers))?.data?.[0] ?? null;
24
+ }
25
+ /**
26
+ * Deletes a ticket topic (soft delete). Resolves to `'OK'`; an unknown id answers 500.
27
+ * @permissions ticketTopics.view OR ticketTopics.destroy
28
+ */
29
+ deleteById(id, headers) {
30
+ return super.deleteById(id, headers);
31
+ }
32
+ /**
12
33
  * Archives a ticket topic. Unlike most resources, ticket-topics archive through a
13
34
  * dedicated endpoint (POST `${basePath}/${id}/archive`) rather than `updateById`.
14
- * @permissions ticketTopic.update
35
+ * Resolves to the stored topic, without `departments`. A topic used in a bot answers 403;
36
+ * an unknown id answers 500.
37
+ * @permissions ticketTopics.archive
15
38
  */
16
39
  archive(id, headers) {
17
40
  return this.client.post(`${this.basePath}/${id}/archive`, { archive: true }, headers);
18
41
  }
19
42
  /**
20
43
  * Restores a previously archived ticket topic via the same dedicated endpoint.
21
- * @permissions ticketTopic.update
44
+ * @permissions ticketTopics.archive
22
45
  */
23
46
  unarchive(id, headers) {
24
47
  return this.client.post(`${this.basePath}/${id}/archive`, { archive: false }, headers);
@@ -1 +1 @@
1
- {"version":3,"file":"TicketTopicsApi.cjs","names":["BaseCrudApi"],"sources":["../../../src/apis/ticketTopics/TicketTopicsApi.ts"],"sourcesContent":["import type { ApiClient } from '../../core/ApiClient'\nimport { BaseCrudApi } from '../../core/BaseCrudApi'\nimport type { TicketTopic, CreateTicketTopicPayload, UpdateTicketTopicPayload } from './types'\n\nexport class TicketTopicsApi extends BaseCrudApi<\n TicketTopic,\n CreateTicketTopicPayload,\n UpdateTicketTopicPayload\n> {\n constructor(client: ApiClient) {\n super(client, '/ticket-topics')\n this.archive = this.archive.bind(this)\n this.unarchive = this.unarchive.bind(this)\n }\n\n /**\n * Archives a ticket topic. Unlike most resources, ticket-topics archive through a\n * dedicated endpoint (POST `${basePath}/${id}/archive`) rather than `updateById`.\n * @permissions ticketTopic.update\n */\n archive(id: string, headers?: Record<string, string>): Promise<TicketTopic> {\n return this.client.post<TicketTopic>(\n `${this.basePath}/${id}/archive`,\n { archive: true },\n headers,\n )\n }\n\n /**\n * Restores a previously archived ticket topic via the same dedicated endpoint.\n * @permissions ticketTopic.update\n */\n unarchive(id: string, headers?: Record<string, string>): Promise<TicketTopic> {\n return this.client.post<TicketTopic>(\n `${this.basePath}/${id}/archive`,\n { archive: false },\n headers,\n )\n }\n}\n"],"mappings":";;;;AAIA,IAAa,kBAAb,cAAqCA,qCAInC;CACA,YAAY,QAAmB;AAC7B,QAAM,QAAQ,iBAAiB;AAC/B,OAAK,UAAU,KAAK,QAAQ,KAAK,KAAK;AACtC,OAAK,YAAY,KAAK,UAAU,KAAK,KAAK;;;;;;;CAQ5C,QAAQ,IAAY,SAAwD;AAC1E,SAAO,KAAK,OAAO,KACjB,GAAG,KAAK,SAAS,GAAG,GAAG,WACvB,EAAE,SAAS,MAAM,EACjB,QACD;;;;;;CAOH,UAAU,IAAY,SAAwD;AAC5E,SAAO,KAAK,OAAO,KACjB,GAAG,KAAK,SAAS,GAAG,GAAG,WACvB,EAAE,SAAS,OAAO,EAClB,QACD"}
1
+ {"version":3,"file":"TicketTopicsApi.cjs","names":["BaseCrudApi"],"sources":["../../../src/apis/ticketTopics/TicketTopicsApi.ts"],"sourcesContent":["import type { ApiClient } from '../../core/ApiClient'\nimport { BaseCrudApi } from '../../core/BaseCrudApi'\nimport type {\n TicketTopic,\n TicketTopicListQuery,\n CreateTicketTopicPayload,\n UpdateTicketTopicPayload,\n} from './types'\n\nexport class TicketTopicsApi extends BaseCrudApi<\n TicketTopic,\n CreateTicketTopicPayload,\n UpdateTicketTopicPayload,\n TicketTopicListQuery,\n 'OK'\n> {\n constructor(client: ApiClient) {\n super(client, '/ticket-topics')\n this.archive = this.archive.bind(this)\n this.unarchive = this.unarchive.bind(this)\n }\n\n /**\n * Returns the first topic matching the query, or `null` when none match. Reads one item of the\n * paginated list (instead of `paginate: false`), the only path where `departmentIds` and\n * `includeNoDepartment` apply.\n * @permissions ticketTopics.view\n */\n override async getOne(\n query?: TicketTopicListQuery,\n headers?: Record<string, string>,\n ): Promise<TicketTopic | null> {\n const page = await this.getMany({ ...query, paginate: true, perPage: 1, page: 1 }, headers)\n return page?.data?.[0] ?? null\n }\n\n /**\n * Deletes a ticket topic (soft delete). Resolves to `'OK'`; an unknown id answers 500.\n * @permissions ticketTopics.view OR ticketTopics.destroy\n */\n override deleteById(id: string, headers?: Record<string, string>): Promise<'OK'> {\n return super.deleteById(id, headers)\n }\n\n /**\n * Archives a ticket topic. Unlike most resources, ticket-topics archive through a\n * dedicated endpoint (POST `${basePath}/${id}/archive`) rather than `updateById`.\n * Resolves to the stored topic, without `departments`. A topic used in a bot answers 403;\n * an unknown id answers 500.\n * @permissions ticketTopics.archive\n */\n archive(id: string, headers?: Record<string, string>): Promise<TicketTopic> {\n return this.client.post<TicketTopic>(\n `${this.basePath}/${id}/archive`,\n { archive: true },\n headers,\n )\n }\n\n /**\n * Restores a previously archived ticket topic via the same dedicated endpoint.\n * @permissions ticketTopics.archive\n */\n unarchive(id: string, headers?: Record<string, string>): Promise<TicketTopic> {\n return this.client.post<TicketTopic>(\n `${this.basePath}/${id}/archive`,\n { archive: false },\n headers,\n )\n }\n}\n"],"mappings":";;;;AASA,IAAa,kBAAb,cAAqCA,qCAMnC;CACA,YAAY,QAAmB;AAC7B,QAAM,QAAQ,iBAAiB;AAC/B,OAAK,UAAU,KAAK,QAAQ,KAAK,KAAK;AACtC,OAAK,YAAY,KAAK,UAAU,KAAK,KAAK;;;;;;;;CAS5C,MAAe,OACb,OACA,SAC6B;AAE7B,UADa,MAAM,KAAK,QAAQ;GAAE,GAAG;GAAO,UAAU;GAAM,SAAS;GAAG,MAAM;GAAG,EAAE,QAAQ,GAC9E,OAAO,MAAM;;;;;;CAO5B,AAAS,WAAW,IAAY,SAAiD;AAC/E,SAAO,MAAM,WAAW,IAAI,QAAQ;;;;;;;;;CAUtC,QAAQ,IAAY,SAAwD;AAC1E,SAAO,KAAK,OAAO,KACjB,GAAG,KAAK,SAAS,GAAG,GAAG,WACvB,EAAE,SAAS,MAAM,EACjB,QACD;;;;;;CAOH,UAAU,IAAY,SAAwD;AAC5E,SAAO,KAAK,OAAO,KACjB,GAAG,KAAK,SAAS,GAAG,GAAG,WACvB,EAAE,SAAS,OAAO,EAClB,QACD"}
@@ -1,17 +1,31 @@
1
1
  import type { ApiClient } from '../../core/ApiClient';
2
2
  import { BaseCrudApi } from '../../core/BaseCrudApi';
3
- import type { TicketTopic, CreateTicketTopicPayload, UpdateTicketTopicPayload } from './types';
4
- export declare class TicketTopicsApi extends BaseCrudApi<TicketTopic, CreateTicketTopicPayload, UpdateTicketTopicPayload> {
3
+ import type { TicketTopic, TicketTopicListQuery, CreateTicketTopicPayload, UpdateTicketTopicPayload } from './types';
4
+ export declare class TicketTopicsApi extends BaseCrudApi<TicketTopic, CreateTicketTopicPayload, UpdateTicketTopicPayload, TicketTopicListQuery, 'OK'> {
5
5
  constructor(client: ApiClient);
6
+ /**
7
+ * Returns the first topic matching the query, or `null` when none match. Reads one item of the
8
+ * paginated list (instead of `paginate: false`), the only path where `departmentIds` and
9
+ * `includeNoDepartment` apply.
10
+ * @permissions ticketTopics.view
11
+ */
12
+ getOne(query?: TicketTopicListQuery, headers?: Record<string, string>): Promise<TicketTopic | null>;
13
+ /**
14
+ * Deletes a ticket topic (soft delete). Resolves to `'OK'`; an unknown id answers 500.
15
+ * @permissions ticketTopics.view OR ticketTopics.destroy
16
+ */
17
+ deleteById(id: string, headers?: Record<string, string>): Promise<'OK'>;
6
18
  /**
7
19
  * Archives a ticket topic. Unlike most resources, ticket-topics archive through a
8
20
  * dedicated endpoint (POST `${basePath}/${id}/archive`) rather than `updateById`.
9
- * @permissions ticketTopic.update
21
+ * Resolves to the stored topic, without `departments`. A topic used in a bot answers 403;
22
+ * an unknown id answers 500.
23
+ * @permissions ticketTopics.archive
10
24
  */
11
25
  archive(id: string, headers?: Record<string, string>): Promise<TicketTopic>;
12
26
  /**
13
27
  * Restores a previously archived ticket topic via the same dedicated endpoint.
14
- * @permissions ticketTopic.update
28
+ * @permissions ticketTopics.archive
15
29
  */
16
30
  unarchive(id: string, headers?: Record<string, string>): Promise<TicketTopic>;
17
31
  }
@@ -1 +1 @@
1
- {"version":3,"file":"TicketTopicsApi.d.ts","sourceRoot":"","sources":["../../../src/apis/ticketTopics/TicketTopicsApi.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,SAAS,EAAE,MAAM,sBAAsB,CAAA;AACrD,OAAO,EAAE,WAAW,EAAE,MAAM,wBAAwB,CAAA;AACpD,OAAO,KAAK,EAAE,WAAW,EAAE,wBAAwB,EAAE,wBAAwB,EAAE,MAAM,SAAS,CAAA;AAE9F,qBAAa,eAAgB,SAAQ,WAAW,CAC9C,WAAW,EACX,wBAAwB,EACxB,wBAAwB,CACzB;gBACa,MAAM,EAAE,SAAS;IAM7B;;;;OAIG;IACH,OAAO,CAAC,EAAE,EAAE,MAAM,EAAE,OAAO,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,GAAG,OAAO,CAAC,WAAW,CAAC;IAQ3E;;;OAGG;IACH,SAAS,CAAC,EAAE,EAAE,MAAM,EAAE,OAAO,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,GAAG,OAAO,CAAC,WAAW,CAAC;CAO9E"}
1
+ {"version":3,"file":"TicketTopicsApi.d.ts","sourceRoot":"","sources":["../../../src/apis/ticketTopics/TicketTopicsApi.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,SAAS,EAAE,MAAM,sBAAsB,CAAA;AACrD,OAAO,EAAE,WAAW,EAAE,MAAM,wBAAwB,CAAA;AACpD,OAAO,KAAK,EACV,WAAW,EACX,oBAAoB,EACpB,wBAAwB,EACxB,wBAAwB,EACzB,MAAM,SAAS,CAAA;AAEhB,qBAAa,eAAgB,SAAQ,WAAW,CAC9C,WAAW,EACX,wBAAwB,EACxB,wBAAwB,EACxB,oBAAoB,EACpB,IAAI,CACL;gBACa,MAAM,EAAE,SAAS;IAM7B;;;;;OAKG;IACY,MAAM,CACnB,KAAK,CAAC,EAAE,oBAAoB,EAC5B,OAAO,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,GAC/B,OAAO,CAAC,WAAW,GAAG,IAAI,CAAC;IAK9B;;;OAGG;IACM,UAAU,CAAC,EAAE,EAAE,MAAM,EAAE,OAAO,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,GAAG,OAAO,CAAC,IAAI,CAAC;IAIhF;;;;;;OAMG;IACH,OAAO,CAAC,EAAE,EAAE,MAAM,EAAE,OAAO,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,GAAG,OAAO,CAAC,WAAW,CAAC;IAQ3E;;;OAGG;IACH,SAAS,CAAC,EAAE,EAAE,MAAM,EAAE,OAAO,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,GAAG,OAAO,CAAC,WAAW,CAAC;CAO9E"}
@@ -8,16 +8,39 @@ var TicketTopicsApi = class extends BaseCrudApi {
8
8
  this.unarchive = this.unarchive.bind(this);
9
9
  }
10
10
  /**
11
+ * Returns the first topic matching the query, or `null` when none match. Reads one item of the
12
+ * paginated list (instead of `paginate: false`), the only path where `departmentIds` and
13
+ * `includeNoDepartment` apply.
14
+ * @permissions ticketTopics.view
15
+ */
16
+ async getOne(query, headers) {
17
+ return (await this.getMany({
18
+ ...query,
19
+ paginate: true,
20
+ perPage: 1,
21
+ page: 1
22
+ }, headers))?.data?.[0] ?? null;
23
+ }
24
+ /**
25
+ * Deletes a ticket topic (soft delete). Resolves to `'OK'`; an unknown id answers 500.
26
+ * @permissions ticketTopics.view OR ticketTopics.destroy
27
+ */
28
+ deleteById(id, headers) {
29
+ return super.deleteById(id, headers);
30
+ }
31
+ /**
11
32
  * Archives a ticket topic. Unlike most resources, ticket-topics archive through a
12
33
  * dedicated endpoint (POST `${basePath}/${id}/archive`) rather than `updateById`.
13
- * @permissions ticketTopic.update
34
+ * Resolves to the stored topic, without `departments`. A topic used in a bot answers 403;
35
+ * an unknown id answers 500.
36
+ * @permissions ticketTopics.archive
14
37
  */
15
38
  archive(id, headers) {
16
39
  return this.client.post(`${this.basePath}/${id}/archive`, { archive: true }, headers);
17
40
  }
18
41
  /**
19
42
  * Restores a previously archived ticket topic via the same dedicated endpoint.
20
- * @permissions ticketTopic.update
43
+ * @permissions ticketTopics.archive
21
44
  */
22
45
  unarchive(id, headers) {
23
46
  return this.client.post(`${this.basePath}/${id}/archive`, { archive: false }, headers);
@@ -1 +1 @@
1
- {"version":3,"file":"TicketTopicsApi.mjs","names":[],"sources":["../../../src/apis/ticketTopics/TicketTopicsApi.ts"],"sourcesContent":["import type { ApiClient } from '../../core/ApiClient'\nimport { BaseCrudApi } from '../../core/BaseCrudApi'\nimport type { TicketTopic, CreateTicketTopicPayload, UpdateTicketTopicPayload } from './types'\n\nexport class TicketTopicsApi extends BaseCrudApi<\n TicketTopic,\n CreateTicketTopicPayload,\n UpdateTicketTopicPayload\n> {\n constructor(client: ApiClient) {\n super(client, '/ticket-topics')\n this.archive = this.archive.bind(this)\n this.unarchive = this.unarchive.bind(this)\n }\n\n /**\n * Archives a ticket topic. Unlike most resources, ticket-topics archive through a\n * dedicated endpoint (POST `${basePath}/${id}/archive`) rather than `updateById`.\n * @permissions ticketTopic.update\n */\n archive(id: string, headers?: Record<string, string>): Promise<TicketTopic> {\n return this.client.post<TicketTopic>(\n `${this.basePath}/${id}/archive`,\n { archive: true },\n headers,\n )\n }\n\n /**\n * Restores a previously archived ticket topic via the same dedicated endpoint.\n * @permissions ticketTopic.update\n */\n unarchive(id: string, headers?: Record<string, string>): Promise<TicketTopic> {\n return this.client.post<TicketTopic>(\n `${this.basePath}/${id}/archive`,\n { archive: false },\n headers,\n )\n }\n}\n"],"mappings":";;;AAIA,IAAa,kBAAb,cAAqC,YAInC;CACA,YAAY,QAAmB;AAC7B,QAAM,QAAQ,iBAAiB;AAC/B,OAAK,UAAU,KAAK,QAAQ,KAAK,KAAK;AACtC,OAAK,YAAY,KAAK,UAAU,KAAK,KAAK;;;;;;;CAQ5C,QAAQ,IAAY,SAAwD;AAC1E,SAAO,KAAK,OAAO,KACjB,GAAG,KAAK,SAAS,GAAG,GAAG,WACvB,EAAE,SAAS,MAAM,EACjB,QACD;;;;;;CAOH,UAAU,IAAY,SAAwD;AAC5E,SAAO,KAAK,OAAO,KACjB,GAAG,KAAK,SAAS,GAAG,GAAG,WACvB,EAAE,SAAS,OAAO,EAClB,QACD"}
1
+ {"version":3,"file":"TicketTopicsApi.mjs","names":[],"sources":["../../../src/apis/ticketTopics/TicketTopicsApi.ts"],"sourcesContent":["import type { ApiClient } from '../../core/ApiClient'\nimport { BaseCrudApi } from '../../core/BaseCrudApi'\nimport type {\n TicketTopic,\n TicketTopicListQuery,\n CreateTicketTopicPayload,\n UpdateTicketTopicPayload,\n} from './types'\n\nexport class TicketTopicsApi extends BaseCrudApi<\n TicketTopic,\n CreateTicketTopicPayload,\n UpdateTicketTopicPayload,\n TicketTopicListQuery,\n 'OK'\n> {\n constructor(client: ApiClient) {\n super(client, '/ticket-topics')\n this.archive = this.archive.bind(this)\n this.unarchive = this.unarchive.bind(this)\n }\n\n /**\n * Returns the first topic matching the query, or `null` when none match. Reads one item of the\n * paginated list (instead of `paginate: false`), the only path where `departmentIds` and\n * `includeNoDepartment` apply.\n * @permissions ticketTopics.view\n */\n override async getOne(\n query?: TicketTopicListQuery,\n headers?: Record<string, string>,\n ): Promise<TicketTopic | null> {\n const page = await this.getMany({ ...query, paginate: true, perPage: 1, page: 1 }, headers)\n return page?.data?.[0] ?? null\n }\n\n /**\n * Deletes a ticket topic (soft delete). Resolves to `'OK'`; an unknown id answers 500.\n * @permissions ticketTopics.view OR ticketTopics.destroy\n */\n override deleteById(id: string, headers?: Record<string, string>): Promise<'OK'> {\n return super.deleteById(id, headers)\n }\n\n /**\n * Archives a ticket topic. Unlike most resources, ticket-topics archive through a\n * dedicated endpoint (POST `${basePath}/${id}/archive`) rather than `updateById`.\n * Resolves to the stored topic, without `departments`. A topic used in a bot answers 403;\n * an unknown id answers 500.\n * @permissions ticketTopics.archive\n */\n archive(id: string, headers?: Record<string, string>): Promise<TicketTopic> {\n return this.client.post<TicketTopic>(\n `${this.basePath}/${id}/archive`,\n { archive: true },\n headers,\n )\n }\n\n /**\n * Restores a previously archived ticket topic via the same dedicated endpoint.\n * @permissions ticketTopics.archive\n */\n unarchive(id: string, headers?: Record<string, string>): Promise<TicketTopic> {\n return this.client.post<TicketTopic>(\n `${this.basePath}/${id}/archive`,\n { archive: false },\n headers,\n )\n }\n}\n"],"mappings":";;;AASA,IAAa,kBAAb,cAAqC,YAMnC;CACA,YAAY,QAAmB;AAC7B,QAAM,QAAQ,iBAAiB;AAC/B,OAAK,UAAU,KAAK,QAAQ,KAAK,KAAK;AACtC,OAAK,YAAY,KAAK,UAAU,KAAK,KAAK;;;;;;;;CAS5C,MAAe,OACb,OACA,SAC6B;AAE7B,UADa,MAAM,KAAK,QAAQ;GAAE,GAAG;GAAO,UAAU;GAAM,SAAS;GAAG,MAAM;GAAG,EAAE,QAAQ,GAC9E,OAAO,MAAM;;;;;;CAO5B,AAAS,WAAW,IAAY,SAAiD;AAC/E,SAAO,MAAM,WAAW,IAAI,QAAQ;;;;;;;;;CAUtC,QAAQ,IAAY,SAAwD;AAC1E,SAAO,KAAK,OAAO,KACjB,GAAG,KAAK,SAAS,GAAG,GAAG,WACvB,EAAE,SAAS,MAAM,EACjB,QACD;;;;;;CAOH,UAAU,IAAY,SAAwD;AAC5E,SAAO,KAAK,OAAO,KACjB,GAAG,KAAK,SAAS,GAAG,GAAG,WACvB,EAAE,SAAS,OAAO,EAClB,QACD"}
@@ -1,3 +1,5 @@
1
+ import type { ListQuery } from '../../core/types';
2
+ import type { Department } from '../departments/types';
1
3
  export type TicketTopic = {
2
4
  id: string;
3
5
  name: string;
@@ -6,11 +8,30 @@ export type TicketTopic = {
6
8
  createdAt: string;
7
9
  updatedAt: string;
8
10
  deletedAt: string | null;
11
+ /** Always comes in the paginated `getMany`; elsewhere only with `include`. Empty = all departments. */
12
+ departments?: Department[];
13
+ };
14
+ export type TicketTopicRelationships = 'departments';
15
+ /**
16
+ * Department filters of the paginated `getMany` and of `getOne`. `getMany({ paginate: false })`
17
+ * ignores them in silence (the route reads them only on the paginated path).
18
+ */
19
+ export type TicketTopicListQuery = ListQuery<TicketTopic> & {
20
+ /** Topics linked to any of these departments. */
21
+ departmentIds?: string | string[];
22
+ /** Also (or only) the topics linked to no department. Only with the default `'json'` query format. */
23
+ includeNoDepartment?: boolean;
9
24
  };
10
25
  export type CreateTicketTopicPayload = {
26
+ /** Unique in the account (409, unless the account allows duplicate names); trimmed. */
11
27
  name: string;
28
+ /** Department ids; `[]` = all departments. Required: a missing list answers 500 after creating the topic. */
29
+ departments: string[];
12
30
  };
13
31
  export type UpdateTicketTopicPayload = {
14
- name?: string;
32
+ /** Required on update too. */
33
+ name: string;
34
+ /** Department ids, replacing the current ones; omitted keeps them. */
35
+ departments?: string[];
15
36
  };
16
37
  //# sourceMappingURL=types.d.ts.map