@opencx/mcp 1.11.16 → 1.11.33

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 (164) hide show
  1. package/dist/api-client.d.ts +17 -12
  2. package/dist/api-client.d.ts.map +1 -1
  3. package/dist/api-client.js +35 -56
  4. package/dist/api-client.js.map +1 -1
  5. package/dist/api-client.spec.js +51 -89
  6. package/dist/api-client.spec.js.map +1 -1
  7. package/dist/schema.d.ts +12706 -0
  8. package/dist/schema.d.ts.map +1 -0
  9. package/dist/schema.js +6 -0
  10. package/dist/schema.js.map +1 -0
  11. package/dist/server.js +2 -2
  12. package/dist/server.js.map +1 -1
  13. package/dist/server.spec.js +54 -51
  14. package/dist/server.spec.js.map +1 -1
  15. package/dist/tools/actions.d.ts +1 -1
  16. package/dist/tools/actions.d.ts.map +1 -1
  17. package/dist/tools/actions.js +26 -16
  18. package/dist/tools/actions.js.map +1 -1
  19. package/dist/tools/audit-logs.d.ts +1 -1
  20. package/dist/tools/audit-logs.d.ts.map +1 -1
  21. package/dist/tools/audit-logs.js +50 -42
  22. package/dist/tools/audit-logs.js.map +1 -1
  23. package/dist/tools/autopilot.d.ts +1 -1
  24. package/dist/tools/autopilot.d.ts.map +1 -1
  25. package/dist/tools/autopilot.js +5 -4
  26. package/dist/tools/autopilot.js.map +1 -1
  27. package/dist/tools/blocklist.d.ts +1 -1
  28. package/dist/tools/blocklist.d.ts.map +1 -1
  29. package/dist/tools/blocklist.js +20 -20
  30. package/dist/tools/blocklist.js.map +1 -1
  31. package/dist/tools/contact-segments.d.ts +1 -1
  32. package/dist/tools/contact-segments.d.ts.map +1 -1
  33. package/dist/tools/contact-segments.js +15 -12
  34. package/dist/tools/contact-segments.js.map +1 -1
  35. package/dist/tools/contacts.d.ts +1 -1
  36. package/dist/tools/contacts.d.ts.map +1 -1
  37. package/dist/tools/contacts.js +23 -11
  38. package/dist/tools/contacts.js.map +1 -1
  39. package/dist/tools/coworker.d.ts +1 -1
  40. package/dist/tools/coworker.d.ts.map +1 -1
  41. package/dist/tools/coworker.js +54 -43
  42. package/dist/tools/coworker.js.map +1 -1
  43. package/dist/tools/crawl.d.ts +1 -1
  44. package/dist/tools/crawl.d.ts.map +1 -1
  45. package/dist/tools/crawl.js +43 -14
  46. package/dist/tools/crawl.js.map +1 -1
  47. package/dist/tools/csat.d.ts +1 -1
  48. package/dist/tools/csat.d.ts.map +1 -1
  49. package/dist/tools/csat.js +16 -10
  50. package/dist/tools/csat.js.map +1 -1
  51. package/dist/tools/email.d.ts +1 -1
  52. package/dist/tools/email.d.ts.map +1 -1
  53. package/dist/tools/email.js +23 -9
  54. package/dist/tools/email.js.map +1 -1
  55. package/dist/tools/firecrawl.d.ts.map +1 -1
  56. package/dist/tools/firecrawl.js +31 -24
  57. package/dist/tools/firecrawl.js.map +1 -1
  58. package/dist/tools/handoff-analytics.d.ts +1 -1
  59. package/dist/tools/handoff-analytics.d.ts.map +1 -1
  60. package/dist/tools/handoff-analytics.js +5 -6
  61. package/dist/tools/handoff-analytics.js.map +1 -1
  62. package/dist/tools/help-center.d.ts +1 -1
  63. package/dist/tools/help-center.d.ts.map +1 -1
  64. package/dist/tools/help-center.js +41 -11
  65. package/dist/tools/help-center.js.map +1 -1
  66. package/dist/tools/impact-report.d.ts +1 -1
  67. package/dist/tools/impact-report.d.ts.map +1 -1
  68. package/dist/tools/impact-report.js +15 -11
  69. package/dist/tools/impact-report.js.map +1 -1
  70. package/dist/tools/insights.d.ts +1 -1
  71. package/dist/tools/insights.d.ts.map +1 -1
  72. package/dist/tools/insights.js +104 -15
  73. package/dist/tools/insights.js.map +1 -1
  74. package/dist/tools/media.d.ts +1 -1
  75. package/dist/tools/media.d.ts.map +1 -1
  76. package/dist/tools/media.js +2 -3
  77. package/dist/tools/media.js.map +1 -1
  78. package/dist/tools/office-hours.d.ts +1 -1
  79. package/dist/tools/office-hours.d.ts.map +1 -1
  80. package/dist/tools/office-hours.js +42 -10
  81. package/dist/tools/office-hours.js.map +1 -1
  82. package/dist/tools/onboarding.d.ts.map +1 -1
  83. package/dist/tools/onboarding.js +8 -5
  84. package/dist/tools/onboarding.js.map +1 -1
  85. package/dist/tools/org.d.ts +1 -1
  86. package/dist/tools/org.d.ts.map +1 -1
  87. package/dist/tools/org.js +5 -4
  88. package/dist/tools/org.js.map +1 -1
  89. package/dist/tools/phone.d.ts +1 -1
  90. package/dist/tools/phone.d.ts.map +1 -1
  91. package/dist/tools/phone.js +66 -48
  92. package/dist/tools/phone.js.map +1 -1
  93. package/dist/tools/redaction.d.ts +1 -1
  94. package/dist/tools/redaction.d.ts.map +1 -1
  95. package/dist/tools/redaction.js +5 -4
  96. package/dist/tools/redaction.js.map +1 -1
  97. package/dist/tools/search.d.ts +1 -1
  98. package/dist/tools/search.d.ts.map +1 -1
  99. package/dist/tools/search.js +3 -2
  100. package/dist/tools/search.js.map +1 -1
  101. package/dist/tools/sequences.d.ts +1 -1
  102. package/dist/tools/sequences.d.ts.map +1 -1
  103. package/dist/tools/sequences.js +26 -14
  104. package/dist/tools/sequences.js.map +1 -1
  105. package/dist/tools/sessions.d.ts +1 -1
  106. package/dist/tools/sessions.d.ts.map +1 -1
  107. package/dist/tools/sessions.js +150 -123
  108. package/dist/tools/sessions.js.map +1 -1
  109. package/dist/tools/sla-analytics.d.ts +1 -1
  110. package/dist/tools/sla-analytics.d.ts.map +1 -1
  111. package/dist/tools/sla-analytics.js +31 -45
  112. package/dist/tools/sla-analytics.js.map +1 -1
  113. package/dist/tools/sla.d.ts +1 -1
  114. package/dist/tools/sla.d.ts.map +1 -1
  115. package/dist/tools/sla.js +18 -16
  116. package/dist/tools/sla.js.map +1 -1
  117. package/dist/tools/tags.d.ts +1 -1
  118. package/dist/tools/tags.d.ts.map +1 -1
  119. package/dist/tools/tags.js +11 -11
  120. package/dist/tools/tags.js.map +1 -1
  121. package/dist/tools/teams.d.ts +1 -1
  122. package/dist/tools/teams.d.ts.map +1 -1
  123. package/dist/tools/teams.js +24 -17
  124. package/dist/tools/teams.js.map +1 -1
  125. package/dist/tools/todos.d.ts +1 -1
  126. package/dist/tools/todos.d.ts.map +1 -1
  127. package/dist/tools/todos.js +30 -21
  128. package/dist/tools/todos.js.map +1 -1
  129. package/dist/tools/training.d.ts +1 -1
  130. package/dist/tools/training.d.ts.map +1 -1
  131. package/dist/tools/training.js +110 -64
  132. package/dist/tools/training.js.map +1 -1
  133. package/dist/tools/users.d.ts +1 -1
  134. package/dist/tools/users.d.ts.map +1 -1
  135. package/dist/tools/users.js +35 -23
  136. package/dist/tools/users.js.map +1 -1
  137. package/dist/tools/whatsapp.d.ts +1 -1
  138. package/dist/tools/whatsapp.d.ts.map +1 -1
  139. package/dist/tools/whatsapp.js +11 -2
  140. package/dist/tools/whatsapp.js.map +1 -1
  141. package/dist/tools/widget.d.ts +1 -1
  142. package/dist/tools/widget.d.ts.map +1 -1
  143. package/dist/tools/widget.js +3 -2
  144. package/dist/tools/widget.js.map +1 -1
  145. package/dist/tools/workflows.d.ts +1 -1
  146. package/dist/tools/workflows.d.ts.map +1 -1
  147. package/dist/tools/workflows.js +164 -93
  148. package/dist/tools/workflows.js.map +1 -1
  149. package/dist/utils/json.d.ts +9 -0
  150. package/dist/utils/json.d.ts.map +1 -0
  151. package/dist/utils/json.js +10 -0
  152. package/dist/utils/json.js.map +1 -0
  153. package/dist/utils/session-channel.d.ts +4 -0
  154. package/dist/utils/session-channel.d.ts.map +1 -0
  155. package/dist/utils/session-channel.js +15 -0
  156. package/dist/utils/session-channel.js.map +1 -0
  157. package/dist/workflow-editor-state.d.ts +12 -2
  158. package/dist/workflow-editor-state.d.ts.map +1 -1
  159. package/dist/workflow-editor-state.js.map +1 -1
  160. package/dist/workflows.spec.d.ts +2 -0
  161. package/dist/workflows.spec.d.ts.map +1 -0
  162. package/dist/workflows.spec.js +109 -0
  163. package/dist/workflows.spec.js.map +1 -0
  164. package/package.json +5 -2
@@ -1,3 +1,6 @@
1
+ import { type Client } from 'openapi-fetch';
2
+ import type { paths } from './schema.js';
3
+ import { type JsonValue } from './utils/json.js';
1
4
  export declare class ApiError extends Error {
2
5
  readonly status: number;
3
6
  readonly statusText: string;
@@ -12,17 +15,19 @@ export declare class ApiError extends Error {
12
15
  * attacks (e.g. `../../backend/internal-route` or `..%2F..%2Fetc`).
13
16
  */
14
17
  export declare function safePath(segment: string): string;
15
- export declare class OpenCXClient {
16
- private readonly baseUrl;
17
- private readonly headers;
18
+ export type OpenCXClient = Client<paths> & {
18
19
  readonly coworkerSessionId: string | undefined;
19
- constructor(apiKey: string, baseUrl: string);
20
- get(path: string, query?: Record<string, string | undefined>): Promise<unknown>;
21
- post(path: string, body?: unknown): Promise<unknown>;
22
- patch(path: string, body?: unknown): Promise<unknown>;
23
- put(path: string, body?: unknown): Promise<unknown>;
24
- delete(path: string): Promise<unknown>;
25
- postMultipart(path: string, formData: FormData): Promise<unknown>;
26
- private request;
27
- }
20
+ postMultipart(path: string, formData: FormData): Promise<JsonValue>;
21
+ };
22
+ export declare function createOpenCXClient(apiKey: string, baseUrl: string): OpenCXClient;
23
+ /**
24
+ * Wraps a value as an MCP text-content result. Handles `undefined` from 204
25
+ * responses by falling back to `{}` so `JSON.stringify` always produces a string.
26
+ */
27
+ export declare function jsonContent<T>(data: T | undefined): {
28
+ content: [{
29
+ type: 'text';
30
+ text: string;
31
+ }];
32
+ };
28
33
  //# sourceMappingURL=api-client.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"api-client.d.ts","sourceRoot":"","sources":["../src/api-client.ts"],"names":[],"mappings":"AAAA,qBAAa,QAAS,SAAQ,KAAK;aAEf,MAAM,EAAE,MAAM;aACd,UAAU,EAAE,MAAM;aAClB,IAAI,EAAE,MAAM;gBAFZ,MAAM,EAAE,MAAM,EACd,UAAU,EAAE,MAAM,EAClB,IAAI,EAAE,MAAM;CAK/B;AAED;;;;;;GAMG;AACH,wBAAgB,QAAQ,CAAC,OAAO,EAAE,MAAM,GAAG,MAAM,CAchD;AAED,qBAAa,YAAY;IACvB,OAAO,CAAC,QAAQ,CAAC,OAAO,CAAS;IACjC,OAAO,CAAC,QAAQ,CAAC,OAAO,CAAyB;IACjD,QAAQ,CAAC,iBAAiB,EAAE,MAAM,GAAG,SAAS,CAAC;gBAEnC,MAAM,EAAE,MAAM,EAAE,OAAO,EAAE,MAAM;IAarC,GAAG,CAAC,IAAI,EAAE,MAAM,EAAE,KAAK,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,GAAG,SAAS,CAAC,GAAG,OAAO,CAAC,OAAO,CAAC;IAI/E,IAAI,CAAC,IAAI,EAAE,MAAM,EAAE,IAAI,CAAC,EAAE,OAAO,GAAG,OAAO,CAAC,OAAO,CAAC;IAIpD,KAAK,CAAC,IAAI,EAAE,MAAM,EAAE,IAAI,CAAC,EAAE,OAAO,GAAG,OAAO,CAAC,OAAO,CAAC;IAIrD,GAAG,CAAC,IAAI,EAAE,MAAM,EAAE,IAAI,CAAC,EAAE,OAAO,GAAG,OAAO,CAAC,OAAO,CAAC;IAInD,MAAM,CAAC,IAAI,EAAE,MAAM,GAAG,OAAO,CAAC,OAAO,CAAC;IAItC,aAAa,CAAC,IAAI,EAAE,MAAM,EAAE,QAAQ,EAAE,QAAQ,GAAG,OAAO,CAAC,OAAO,CAAC;YAkBzD,OAAO;CA8BtB"}
1
+ {"version":3,"file":"api-client.d.ts","sourceRoot":"","sources":["../src/api-client.ts"],"names":[],"mappings":"AAAA,OAAqB,EAAE,KAAK,MAAM,EAAmB,MAAM,eAAe,CAAC;AAC3E,OAAO,KAAK,EAAE,KAAK,EAAE,MAAM,aAAa,CAAC;AACzC,OAAO,EAAmB,KAAK,SAAS,EAAE,MAAM,iBAAiB,CAAC;AAElE,qBAAa,QAAS,SAAQ,KAAK;aAEf,MAAM,EAAE,MAAM;aACd,UAAU,EAAE,MAAM;aAClB,IAAI,EAAE,MAAM;gBAFZ,MAAM,EAAE,MAAM,EACd,UAAU,EAAE,MAAM,EAClB,IAAI,EAAE,MAAM;CAK/B;AAED;;;;;;GAMG;AACH,wBAAgB,QAAQ,CAAC,OAAO,EAAE,MAAM,GAAG,MAAM,CAchD;AAED,MAAM,MAAM,YAAY,GAAG,MAAM,CAAC,KAAK,CAAC,GAAG;IACzC,QAAQ,CAAC,iBAAiB,EAAE,MAAM,GAAG,SAAS,CAAC;IAC/C,aAAa,CAAC,IAAI,EAAE,MAAM,EAAE,QAAQ,EAAE,QAAQ,GAAG,OAAO,CAAC,SAAS,CAAC,CAAC;CACrE,CAAC;AAEF,wBAAgB,kBAAkB,CAAC,MAAM,EAAE,MAAM,EAAE,OAAO,EAAE,MAAM,GAAG,YAAY,CA4ChF;AAED;;;GAGG;AACH,wBAAgB,WAAW,CAAC,CAAC,EAAE,IAAI,EAAE,CAAC,GAAG,SAAS,GAAG;IAAE,OAAO,EAAE,CAAC;QAAE,IAAI,EAAE,MAAM,CAAC;QAAC,IAAI,EAAE,MAAM,CAAA;KAAE,CAAC,CAAA;CAAE,CAEjG"}
@@ -1,3 +1,5 @@
1
+ import createClient from 'openapi-fetch';
2
+ import { jsonValueSchema } from './utils/json.js';
1
3
  export class ApiError extends Error {
2
4
  status;
3
5
  statusText;
@@ -33,39 +35,31 @@ export function safePath(segment) {
33
35
  }
34
36
  return encodeURIComponent(decoded);
35
37
  }
36
- export class OpenCXClient {
37
- baseUrl;
38
- headers;
39
- coworkerSessionId;
40
- constructor(apiKey, baseUrl) {
41
- this.baseUrl = baseUrl.replace(/\/$/, '');
42
- this.headers = {
43
- Authorization: `Bearer ${apiKey}`,
44
- 'Content-Type': 'application/json',
45
- };
46
- this.coworkerSessionId = process.env.OPENCX_COWORKER_SESSION_ID;
47
- if (this.coworkerSessionId) {
48
- this.headers['x-opencx-coworker-session-id'] = this.coworkerSessionId;
49
- }
50
- }
51
- async get(path, query) {
52
- return this.request('GET', path, undefined, query);
53
- }
54
- async post(path, body) {
55
- return this.request('POST', path, body);
56
- }
57
- async patch(path, body) {
58
- return this.request('PATCH', path, body);
59
- }
60
- async put(path, body) {
61
- return this.request('PUT', path, body);
38
+ export function createOpenCXClient(apiKey, baseUrl) {
39
+ const normalizedBase = baseUrl.replace(/\/$/, '');
40
+ const headers = {
41
+ Authorization: `Bearer ${apiKey}`,
42
+ };
43
+ const coworkerSessionId = process.env.OPENCX_COWORKER_SESSION_ID;
44
+ if (coworkerSessionId) {
45
+ headers['x-opencx-coworker-session-id'] = coworkerSessionId;
62
46
  }
63
- async delete(path) {
64
- return this.request('DELETE', path);
65
- }
66
- async postMultipart(path, formData) {
67
- const url = `${this.baseUrl}${path}`;
68
- const { 'Content-Type': _, ...headers } = this.headers;
47
+ const client = createClient({
48
+ baseUrl: normalizedBase,
49
+ headers,
50
+ });
51
+ const errorMiddleware = {
52
+ async onResponse({ response }) {
53
+ if (!response.ok) {
54
+ const text = await response.text().catch(() => '');
55
+ throw new ApiError(response.status, response.statusText, text);
56
+ }
57
+ return response;
58
+ },
59
+ };
60
+ client.use(errorMiddleware);
61
+ async function postMultipart(path, formData) {
62
+ const url = `${normalizedBase}${path}`;
69
63
  const res = await fetch(url, {
70
64
  method: 'POST',
71
65
  headers,
@@ -77,29 +71,14 @@ export class OpenCXClient {
77
71
  }
78
72
  return parseJsonOrEmpty(await res.text());
79
73
  }
80
- async request(method, path, body, query) {
81
- let url = `${this.baseUrl}${path}`;
82
- if (query) {
83
- const params = new URLSearchParams();
84
- for (const [key, value] of Object.entries(query)) {
85
- if (value !== undefined)
86
- params.set(key, value);
87
- }
88
- const qs = params.toString();
89
- if (qs)
90
- url += `?${qs}`;
91
- }
92
- const res = await fetch(url, {
93
- method,
94
- headers: this.headers,
95
- body: body ? JSON.stringify(body) : undefined,
96
- });
97
- if (!res.ok) {
98
- const text = await res.text().catch(() => '');
99
- throw new ApiError(res.status, res.statusText, text);
100
- }
101
- return parseJsonOrEmpty(await res.text());
102
- }
74
+ return Object.assign(client, { coworkerSessionId, postMultipart });
75
+ }
76
+ /**
77
+ * Wraps a value as an MCP text-content result. Handles `undefined` from 204
78
+ * responses by falling back to `{}` so `JSON.stringify` always produces a string.
79
+ */
80
+ export function jsonContent(data) {
81
+ return { content: [{ type: 'text', text: JSON.stringify(data ?? {}) }] };
103
82
  }
104
83
  /**
105
84
  * Parses a response body as JSON, returning `{}` for empty bodies (e.g. 204 No
@@ -111,6 +90,6 @@ export class OpenCXClient {
111
90
  function parseJsonOrEmpty(text) {
112
91
  if (!text)
113
92
  return {};
114
- return JSON.parse(text);
93
+ return jsonValueSchema.parse(JSON.parse(text));
115
94
  }
116
95
  //# sourceMappingURL=api-client.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"api-client.js","sourceRoot":"","sources":["../src/api-client.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"api-client.js","sourceRoot":"","sources":["../src/api-client.ts"],"names":[],"mappings":"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"}
@@ -1,5 +1,5 @@
1
1
  import { describe, it, expect, vi, beforeEach, afterEach } from 'vitest';
2
- import { ApiError, safePath, OpenCXClient } from './api-client.js';
2
+ import { ApiError, safePath, createOpenCXClient } from './api-client.js';
3
3
  describe('ApiError', () => {
4
4
  it('stores status, statusText, and body', () => {
5
5
  const err = new ApiError(404, 'Not Found', '{"error":"missing"}');
@@ -45,7 +45,7 @@ describe('safePath', () => {
45
45
  expect(() => safePath('abc%')).toThrow('Invalid path parameter');
46
46
  });
47
47
  });
48
- describe('OpenCXClient', () => {
48
+ describe('createOpenCXClient', () => {
49
49
  let fetchSpy;
50
50
  beforeEach(() => {
51
51
  fetchSpy = vi.fn();
@@ -54,100 +54,62 @@ describe('OpenCXClient', () => {
54
54
  afterEach(() => {
55
55
  vi.restoreAllMocks();
56
56
  });
57
- function mockResponse(body, status = 200) {
58
- fetchSpy.mockResolvedValueOnce({
59
- ok: status >= 200 && status < 300,
57
+ function mockResponse(body, status = 200, statusText = 'OK') {
58
+ if (status === 204)
59
+ return new Response(null, { status, statusText });
60
+ const text = typeof body === 'string' ? body : JSON.stringify(body);
61
+ return new Response(text, {
60
62
  status,
61
- statusText: status === 200 ? 'OK' : 'Bad Request',
62
- text: () => Promise.resolve(JSON.stringify(body)),
63
+ statusText,
64
+ headers: { 'Content-Type': 'application/json' },
63
65
  });
64
66
  }
65
- it('strips trailing slash from baseUrl', () => {
66
- const client = new OpenCXClient('key-123', 'https://api.example.com/');
67
- mockResponse({ ok: true });
68
- void client.get('/test');
69
- expect(fetchSpy).toHaveBeenCalledWith('https://api.example.com/test', expect.objectContaining({ method: 'GET' }));
70
- });
71
- it('sets Authorization header with Bearer token', () => {
72
- const client = new OpenCXClient('my-api-key', 'https://api.example.com');
73
- mockResponse({ ok: true });
74
- void client.get('/test');
75
- expect(fetchSpy).toHaveBeenCalledWith(expect.anything(), expect.objectContaining({
76
- headers: expect.objectContaining({
77
- Authorization: 'Bearer my-api-key',
78
- 'Content-Type': 'application/json',
79
- }),
80
- }));
81
- });
82
- it('GET appends query params', async () => {
83
- const client = new OpenCXClient('key', 'https://api.example.com');
84
- mockResponse({ items: [] });
85
- await client.get('/contacts/', { cursor: 'abc', empty: undefined });
86
- const url = fetchSpy.mock.calls[0][0];
87
- expect(url).toBe('https://api.example.com/contacts/?cursor=abc');
88
- });
89
- it('POST sends JSON body', async () => {
90
- const client = new OpenCXClient('key', 'https://api.example.com');
91
- mockResponse({ id: '1' });
92
- await client.post('/contacts/', { name: 'Alice' });
93
- const opts = fetchSpy.mock.calls[0][1];
94
- expect(opts.method).toBe('POST');
95
- expect(opts.body).toBe(JSON.stringify({ name: 'Alice' }));
96
- });
97
- it('PATCH sends JSON body', async () => {
98
- const client = new OpenCXClient('key', 'https://api.example.com');
99
- mockResponse({ id: '1' });
100
- await client.patch('/contacts/1', { name: 'Bob' });
101
- const opts = fetchSpy.mock.calls[0][1];
102
- expect(opts.method).toBe('PATCH');
103
- });
104
- it('PUT sends JSON body', async () => {
105
- const client = new OpenCXClient('key', 'https://api.example.com');
106
- mockResponse({ ok: true });
107
- await client.put('/settings', { value: true });
108
- const opts = fetchSpy.mock.calls[0][1];
109
- expect(opts.method).toBe('PUT');
110
- });
111
- it('DELETE sends no body', async () => {
112
- const client = new OpenCXClient('key', 'https://api.example.com');
113
- mockResponse({});
114
- await client.delete('/contacts/1');
115
- const opts = fetchSpy.mock.calls[0][1];
116
- expect(opts.method).toBe('DELETE');
117
- expect(opts.body).toBeUndefined();
67
+ function getRequestUrl(call) {
68
+ const arg = call[0];
69
+ if (arg instanceof Request)
70
+ return arg.url;
71
+ return String(arg);
72
+ }
73
+ function getRequestOptions(call) {
74
+ const arg = call[0];
75
+ if (arg instanceof Request)
76
+ return { method: arg.method, headers: arg.headers };
77
+ const opts = call[1];
78
+ return { method: opts.method ?? 'GET', headers: new Headers(opts.headers) };
79
+ }
80
+ it('strips trailing slash from baseUrl', async () => {
81
+ const client = createOpenCXClient('key-123', 'https://api.example.com/');
82
+ fetchSpy.mockResolvedValueOnce(mockResponse({ ok: true }));
83
+ await client.GET('/org');
84
+ const url = getRequestUrl(fetchSpy.mock.calls[0]);
85
+ expect(url).toBe('https://api.example.com/org');
86
+ });
87
+ it('sets Authorization header with Bearer token', async () => {
88
+ const client = createOpenCXClient('my-api-key', 'https://api.example.com');
89
+ fetchSpy.mockResolvedValueOnce(mockResponse({ ok: true }));
90
+ await client.GET('/org');
91
+ const opts = getRequestOptions(fetchSpy.mock.calls[0]);
92
+ expect(opts.headers.get('authorization')).toBe('Bearer my-api-key');
118
93
  });
119
94
  it('throws ApiError on non-ok response', async () => {
120
- const client = new OpenCXClient('key', 'https://api.example.com');
121
- fetchSpy.mockResolvedValueOnce({
122
- ok: false,
95
+ const client = createOpenCXClient('key', 'https://api.example.com');
96
+ fetchSpy.mockResolvedValueOnce(mockResponse('invalid key', 401, 'Unauthorized'));
97
+ await expect(client.GET('/org')).rejects.toThrow(ApiError);
98
+ fetchSpy.mockResolvedValueOnce(mockResponse('invalid key', 401, 'Unauthorized'));
99
+ await expect(client.GET('/org')).rejects.toMatchObject({
123
100
  status: 401,
124
- statusText: 'Unauthorized',
125
- text: () => Promise.resolve('invalid key'),
101
+ body: 'invalid key',
126
102
  });
127
- await expect(client.get('/org/')).rejects.toThrow(ApiError);
128
- await expect((async () => {
129
- fetchSpy.mockResolvedValueOnce({
130
- ok: false,
131
- status: 401,
132
- statusText: 'Unauthorized',
133
- text: () => Promise.resolve('invalid key'),
134
- });
135
- return client.get('/org/');
136
- })()).rejects.toMatchObject({ status: 401, body: 'invalid key' });
137
- });
138
- it('builds a valid MCP text envelope for write tools that hit a 204 backend', async () => {
139
- const client = new OpenCXClient('key', 'https://api.example.com');
140
- fetchSpy.mockResolvedValueOnce({
141
- ok: true,
142
- status: 204,
143
- statusText: 'No Content',
144
- text: () => Promise.resolve(''),
145
- });
146
- const data = await client.patch('/chat/sessions/abc', { status: 'closed_resolved' });
147
- const envelope = { content: [{ type: 'text', text: JSON.stringify(data) }] };
148
- expect(data).toEqual({});
149
- expect(envelope.content[0].text).toBe('{}');
150
- expect(envelope.content[0].text).not.toBeUndefined();
103
+ });
104
+ it('postMultipart sends FormData and throws ApiError on failure', async () => {
105
+ const client = createOpenCXClient('key', 'https://api.example.com');
106
+ const formData = new FormData();
107
+ formData.append('file', new Blob(['test']), 'test.png');
108
+ fetchSpy.mockResolvedValueOnce(mockResponse({ url: 'https://cdn.example.com/test.png' }));
109
+ const result = await client.postMultipart('/media/upload', formData);
110
+ expect(result).toEqual({ url: 'https://cdn.example.com/test.png' });
111
+ fetchSpy.mockResolvedValueOnce(mockResponse('too large', 413, 'Payload Too Large'));
112
+ await expect(client.postMultipart('/media/upload', formData)).rejects.toThrow(ApiError);
151
113
  });
152
114
  });
153
115
  //# sourceMappingURL=api-client.spec.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"api-client.spec.js","sourceRoot":"","sources":["../src/api-client.spec.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"api-client.spec.js","sourceRoot":"","sources":["../src/api-client.spec.ts"],"names":[],"mappings":"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"}