@ulvio/client 0.1.0 → 0.3.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.
package/dist/index.js CHANGED
@@ -1,8 +1,6 @@
1
1
  // src/errors.ts
2
2
  var CONNECTOR_UNHEALTHY_CODE = "CONNECTOR_UNHEALTHY";
3
- var PLATFORM_NOT_CONFIGURED_CODE = "platform_not_configured";
4
- var HTML_TO_PDF_NOT_CONFIGURED_CODE = "html_to_pdf_not_configured";
5
- var UTILITIES_NOT_CONFIGURED_CODE = "utilities_not_configured";
3
+ var NOT_CONFIGURED_CODE = "not_configured";
6
4
  var UlvioError = class extends Error {
7
5
  code;
8
6
  status;
@@ -41,40 +39,20 @@ var HttpClient = class {
41
39
  this.config = config;
42
40
  }
43
41
  config;
44
- requirePlatform(method) {
45
- const url = this.config.platformApiUrl;
46
- const key = this.config.platformApiKey;
42
+ requireConfig(method) {
43
+ const url = this.config.baseUrl;
44
+ const key = this.config.apiKey;
47
45
  if (!url || !key) {
46
+ const missing = !url && !key ? "baseUrl and apiKey" : !url ? "baseUrl" : "apiKey";
48
47
  throw new UlvioError(
49
- PLATFORM_NOT_CONFIGURED_CODE,
50
- `${method} requires platformApiUrl and platformApiKey to be set on the Ulvio client`
48
+ NOT_CONFIGURED_CODE,
49
+ `${method} requires ${missing} to be set on the Ulvio client`
51
50
  );
52
51
  }
53
52
  return { url: trimSlash(url), key };
54
53
  }
55
- requireHtmlToPdf(method) {
56
- const url = this.config.htmlToPdfApiUrl;
57
- if (!url) {
58
- throw new UlvioError(
59
- HTML_TO_PDF_NOT_CONFIGURED_CODE,
60
- `${method} requires htmlToPdfApiUrl to be set on the Ulvio client`
61
- );
62
- }
63
- return trimSlash(url);
64
- }
65
- requireUtilities(method) {
66
- const url = this.config.utilitiesApiUrl;
67
- if (!url) {
68
- throw new UlvioError(
69
- UTILITIES_NOT_CONFIGURED_CODE,
70
- `${method} requires utilitiesApiUrl to be set on the Ulvio client`
71
- );
72
- }
73
- return trimSlash(url);
74
- }
75
- // ── Platform (authenticated) ──────────────────────────────────────────
76
- async platformRequest(callerName, method, path, options = {}) {
77
- const { url, key } = this.requirePlatform(callerName);
54
+ async request(callerName, method, path, options = {}) {
55
+ const { url, key } = this.requireConfig(callerName);
78
56
  const res = await fetch(`${url}${path}`, {
79
57
  method,
80
58
  headers: {
@@ -86,8 +64,8 @@ var HttpClient = class {
86
64
  if (!res.ok) throw await parseError(res);
87
65
  return await res.json();
88
66
  }
89
- async platformRequestRaw(callerName, method, path, options = {}) {
90
- const { url, key } = this.requirePlatform(callerName);
67
+ async requestRaw(callerName, method, path, options = {}) {
68
+ const { url, key } = this.requireConfig(callerName);
91
69
  const headers = { ...options.headers };
92
70
  if (options.contentType) headers["Content-Type"] = options.contentType;
93
71
  headers["Authorization"] = `Bearer ${key}`;
@@ -99,30 +77,6 @@ var HttpClient = class {
99
77
  if (!res.ok) throw await parseError(res);
100
78
  return res;
101
79
  }
102
- // ── HTML-to-PDF (unauthenticated) ─────────────────────────────────────
103
- async htmlToPdfFetch(callerName, path, init) {
104
- const url = this.requireHtmlToPdf(callerName);
105
- return fetch(`${url}${path}`, init);
106
- }
107
- // ── Utilities (unauthenticated) ───────────────────────────────────────
108
- async utilitiesRequest(callerName, method, path, options = {}) {
109
- const url = this.requireUtilities(callerName);
110
- const res = await fetch(`${url}${path}`, {
111
- method,
112
- headers: { "Content-Type": "application/json" },
113
- body: options.body !== void 0 ? JSON.stringify(options.body) : void 0
114
- });
115
- const data = await res.json().catch(() => void 0);
116
- if (!res.ok) {
117
- const errBody = data;
118
- throw new UlvioError(
119
- errBody?.error?.code ?? "request_failed",
120
- errBody?.error?.message ?? res.statusText,
121
- { status: res.status, response: data }
122
- );
123
- }
124
- return data;
125
- }
126
80
  };
127
81
 
128
82
  // src/clients/mail.ts
@@ -132,7 +86,7 @@ var MailClient = class {
132
86
  }
133
87
  http;
134
88
  sendTransactional(params) {
135
- return this.http.platformRequest(
89
+ return this.http.request(
136
90
  "client.mail.sendTransactional()",
137
91
  "POST",
138
92
  "/v1/transactional-mail/send",
@@ -148,7 +102,7 @@ var MailboxClient = class {
148
102
  }
149
103
  http;
150
104
  send(params) {
151
- return this.http.platformRequest(
105
+ return this.http.request(
152
106
  "client.mailbox.send()",
153
107
  "POST",
154
108
  "/v1/mailbox/send",
@@ -157,21 +111,21 @@ var MailboxClient = class {
157
111
  }
158
112
  list(limit) {
159
113
  const qs = limit !== void 0 ? `?limit=${limit}` : "";
160
- return this.http.platformRequest(
114
+ return this.http.request(
161
115
  "client.mailbox.list()",
162
116
  "GET",
163
117
  `/v1/mailbox/messages${qs}`
164
118
  );
165
119
  }
166
120
  get(id) {
167
- return this.http.platformRequest(
121
+ return this.http.request(
168
122
  "client.mailbox.get()",
169
123
  "GET",
170
124
  `/v1/mailbox/messages/${encodeURIComponent(id)}`
171
125
  );
172
126
  }
173
127
  markProcessed(id) {
174
- return this.http.platformRequest(
128
+ return this.http.request(
175
129
  "client.mailbox.markProcessed()",
176
130
  "POST",
177
131
  `/v1/mailbox/messages/${encodeURIComponent(id)}/mark-processed`
@@ -181,7 +135,7 @@ var MailboxClient = class {
181
135
  * Download a mailbox message attachment as a Buffer.
182
136
  */
183
137
  async getAttachment(messageId, attachmentId) {
184
- const res = await this.http.platformRequestRaw(
138
+ const res = await this.http.requestRaw(
185
139
  "client.mailbox.getAttachment()",
186
140
  "GET",
187
141
  `/v1/mailbox/messages/${encodeURIComponent(messageId)}/attachments/${encodeURIComponent(attachmentId)}`
@@ -190,7 +144,7 @@ var MailboxClient = class {
190
144
  return Buffer.from(arrayBuffer);
191
145
  }
192
146
  getConnectorStatus() {
193
- return this.http.platformRequest(
147
+ return this.http.request(
194
148
  "client.mailbox.getConnectorStatus()",
195
149
  "GET",
196
150
  "/v1/mailbox/connector-status"
@@ -200,7 +154,7 @@ var MailboxClient = class {
200
154
  * Dev-only: toggle the mock connector's health state.
201
155
  */
202
156
  setConnectorStatus(healthy) {
203
- return this.http.platformRequest(
157
+ return this.http.request(
204
158
  "client.mailbox.setConnectorStatus()",
205
159
  "PATCH",
206
160
  "/v1/mailbox/connector-status",
@@ -216,7 +170,7 @@ var SmsClient = class {
216
170
  }
217
171
  http;
218
172
  send(params) {
219
- return this.http.platformRequest(
173
+ return this.http.request(
220
174
  "client.sms.send()",
221
175
  "POST",
222
176
  "/v1/sms/send",
@@ -232,7 +186,7 @@ var WhatsAppClient = class {
232
186
  }
233
187
  http;
234
188
  send(params) {
235
- return this.http.platformRequest(
189
+ return this.http.request(
236
190
  "client.whatsapp.send()",
237
191
  "POST",
238
192
  "/v1/whatsapp/send",
@@ -248,7 +202,7 @@ var VoiceClient = class {
248
202
  }
249
203
  http;
250
204
  transcribe(params) {
251
- return this.http.platformRequest(
205
+ return this.http.request(
252
206
  "client.voice.transcribe()",
253
207
  "POST",
254
208
  "/v1/voice/send",
@@ -264,7 +218,7 @@ var FilesClient = class {
264
218
  }
265
219
  http;
266
220
  async upload(key, file, contentType = "application/octet-stream") {
267
- const res = await this.http.platformRequestRaw(
221
+ const res = await this.http.requestRaw(
268
222
  "client.files.upload()",
269
223
  "PUT",
270
224
  `/v1/files/${encodeURI(key)}`,
@@ -276,7 +230,7 @@ var FilesClient = class {
276
230
  * Download a file. Returns the raw Response for streaming.
277
231
  */
278
232
  get(key) {
279
- return this.http.platformRequestRaw(
233
+ return this.http.requestRaw(
280
234
  "client.files.get()",
281
235
  "GET",
282
236
  `/v1/files/${encodeURI(key)}`
@@ -288,21 +242,21 @@ var FilesClient = class {
288
242
  if (limit !== void 0) params.set("limit", String(limit));
289
243
  if (cursor) params.set("cursor", cursor);
290
244
  const qs = params.toString();
291
- return this.http.platformRequest(
245
+ return this.http.request(
292
246
  "client.files.list()",
293
247
  "GET",
294
248
  `/v1/files${qs ? `?${qs}` : ""}`
295
249
  );
296
250
  }
297
251
  delete(key) {
298
- return this.http.platformRequest(
252
+ return this.http.request(
299
253
  "client.files.delete()",
300
254
  "DELETE",
301
255
  `/v1/files/${encodeURI(key)}`
302
256
  );
303
257
  }
304
258
  deleteMany(prefix) {
305
- return this.http.platformRequest(
259
+ return this.http.request(
306
260
  "client.files.deleteMany()",
307
261
  "DELETE",
308
262
  `/v1/files?prefix=${encodeURIComponent(prefix)}`
@@ -313,7 +267,7 @@ var FilesClient = class {
313
267
  * @param expiresIn TTL in seconds (default 3600, min 60, max 86400)
314
268
  */
315
269
  presignedDownloadUrl(key, expiresIn) {
316
- return this.http.platformRequest(
270
+ return this.http.request(
317
271
  "client.files.presignedDownloadUrl()",
318
272
  "POST",
319
273
  "/v1/files/presigned-download",
@@ -326,7 +280,7 @@ var FilesClient = class {
326
280
  * @param maxSize Max file size in bytes (default 50MB)
327
281
  */
328
282
  presignedUploadUrl(key, contentType, expiresIn, maxSize) {
329
- return this.http.platformRequest(
283
+ return this.http.request(
330
284
  "client.files.presignedUploadUrl()",
331
285
  "POST",
332
286
  "/v1/files/presigned-upload",
@@ -370,7 +324,7 @@ var AiClient = class {
370
324
  http;
371
325
  async parse(params) {
372
326
  const wire = buildPayload(params);
373
- const response = await this.http.platformRequest(
327
+ const response = await this.http.request(
374
328
  "client.ai.parse()",
375
329
  "POST",
376
330
  "/v1/ai/parse",
@@ -380,7 +334,7 @@ var AiClient = class {
380
334
  }
381
335
  async *stream(params) {
382
336
  const wire = buildPayload(params);
383
- const res = await this.http.platformRequestRaw(
337
+ const res = await this.http.requestRaw(
384
338
  "client.ai.stream()",
385
339
  "POST",
386
340
  "/v1/ai/stream",
@@ -452,19 +406,16 @@ var HtmlToPdfClient = class {
452
406
  }
453
407
  http;
454
408
  async convert(params, callbacks) {
455
- const res = await this.http.htmlToPdfFetch("client.htmlToPdf.convert()", "/api/html-to-pdf", {
456
- method: "POST",
457
- headers: { "Content-Type": "application/json" },
458
- body: JSON.stringify(params)
459
- });
460
- if (!res.ok) {
461
- const data = await res.json().catch(() => void 0);
462
- throw new UlvioError(
463
- data?.error?.code ?? "html_to_pdf_failed",
464
- data?.error?.message ?? res.statusText,
465
- { status: res.status, response: data }
466
- );
467
- }
409
+ const res = await this.http.requestRaw(
410
+ "client.htmlToPdf.convert()",
411
+ "POST",
412
+ "/html-to-pdf/convert",
413
+ {
414
+ body: JSON.stringify(params),
415
+ contentType: "application/json",
416
+ headers: { Accept: "text/event-stream" }
417
+ }
418
+ );
468
419
  if (!res.body) {
469
420
  throw new UlvioError("html_to_pdf_no_body", "html-to-pdf service returned no body", {
470
421
  status: res.status
@@ -514,42 +465,42 @@ var UtilitiesClient = class {
514
465
  }
515
466
  http;
516
467
  compileMjml(params) {
517
- return this.http.utilitiesRequest(
468
+ return this.http.request(
518
469
  "client.utilities.compileMjml()",
519
470
  "POST",
520
- "/api/mjml/compile",
471
+ "/utilities/mjml/compile",
521
472
  { body: params }
522
473
  );
523
474
  }
524
475
  renderLiquid(params) {
525
- return this.http.utilitiesRequest(
476
+ return this.http.request(
526
477
  "client.utilities.renderLiquid()",
527
478
  "POST",
528
- "/api/liquidjs/render",
479
+ "/utilities/liquidjs/render",
529
480
  { body: params }
530
481
  );
531
482
  }
532
483
  extractLiquidVariables(params) {
533
- return this.http.utilitiesRequest(
484
+ return this.http.request(
534
485
  "client.utilities.extractLiquidVariables()",
535
486
  "POST",
536
- "/api/liquidjs/variables",
487
+ "/utilities/liquidjs/variables",
537
488
  { body: params }
538
489
  );
539
490
  }
540
491
  renderMarkdown(params) {
541
- return this.http.utilitiesRequest(
492
+ return this.http.request(
542
493
  "client.utilities.renderMarkdown()",
543
494
  "POST",
544
- "/api/markdown/render",
495
+ "/utilities/markdown/render",
545
496
  { body: params }
546
497
  );
547
498
  }
548
499
  renderEmail(params) {
549
- return this.http.utilitiesRequest(
500
+ return this.http.request(
550
501
  "client.utilities.renderEmail()",
551
502
  "POST",
552
- "/api/render-email",
503
+ "/utilities/render-email",
553
504
  { body: params }
554
505
  );
555
506
  }
@@ -566,7 +517,7 @@ var Ulvio = class {
566
517
  ai;
567
518
  htmlToPdf;
568
519
  utilities;
569
- constructor(config = {}) {
520
+ constructor(config) {
570
521
  const http = new HttpClient(config);
571
522
  this.mail = new MailClient(http);
572
523
  this.mailbox = new MailboxClient(http);
@@ -583,13 +534,11 @@ export {
583
534
  AiClient,
584
535
  CONNECTOR_UNHEALTHY_CODE,
585
536
  FilesClient,
586
- HTML_TO_PDF_NOT_CONFIGURED_CODE,
587
537
  HtmlToPdfClient,
588
538
  MailClient,
589
539
  MailboxClient,
590
- PLATFORM_NOT_CONFIGURED_CODE,
540
+ NOT_CONFIGURED_CODE,
591
541
  SmsClient,
592
- UTILITIES_NOT_CONFIGURED_CODE,
593
542
  Ulvio,
594
543
  UlvioError,
595
544
  UtilitiesClient,
package/dist/index.js.map CHANGED
@@ -1 +1 @@
1
- {"version":3,"sources":["../src/errors.ts","../src/http.ts","../src/clients/mail.ts","../src/clients/mailbox.ts","../src/clients/sms.ts","../src/clients/whatsapp.ts","../src/clients/voice.ts","../src/clients/files.ts","../src/clients/ai.ts","../src/clients/html-to-pdf.ts","../src/clients/utilities.ts","../src/index.ts"],"sourcesContent":["export interface ErrorResponseBody {\n error: {\n code?: string;\n message: string;\n };\n}\n\nexport const CONNECTOR_UNHEALTHY_CODE = 'CONNECTOR_UNHEALTHY';\n\nexport const PLATFORM_NOT_CONFIGURED_CODE = 'platform_not_configured';\nexport const HTML_TO_PDF_NOT_CONFIGURED_CODE = 'html_to_pdf_not_configured';\nexport const UTILITIES_NOT_CONFIGURED_CODE = 'utilities_not_configured';\n\nexport class UlvioError extends Error {\n readonly code: string;\n readonly status?: number;\n readonly response?: unknown;\n\n constructor(\n code: string,\n message: string,\n options: { status?: number; response?: unknown; cause?: unknown } = {},\n ) {\n super(message, { cause: options.cause });\n this.name = 'UlvioError';\n this.code = code;\n this.status = options.status;\n this.response = options.response;\n }\n}\n\nexport function isConnectorUnhealthyError(err: unknown): boolean {\n if (err instanceof UlvioError) return err.code === CONNECTOR_UNHEALTHY_CODE;\n const response = (err as { response?: ErrorResponseBody })?.response;\n return response?.error?.code === CONNECTOR_UNHEALTHY_CODE;\n}\n","import {\n ErrorResponseBody,\n HTML_TO_PDF_NOT_CONFIGURED_CODE,\n PLATFORM_NOT_CONFIGURED_CODE,\n UTILITIES_NOT_CONFIGURED_CODE,\n UlvioError,\n} from './errors.js';\n\nexport interface UlvioConfig {\n platformApiUrl?: string;\n platformApiKey?: string;\n htmlToPdfApiUrl?: string;\n utilitiesApiUrl?: string;\n}\n\ninterface RequestOptions {\n body?: unknown;\n}\n\ninterface RequestRawOptions {\n body?: BodyInit;\n contentType?: string;\n headers?: Record<string, string>;\n}\n\nfunction trimSlash(url: string): string {\n return url.replace(/\\/$/, '');\n}\n\nasync function parseError(res: Response, fallbackCode = 'request_failed'): Promise<UlvioError> {\n let body: ErrorResponseBody | undefined;\n try {\n body = (await res.json()) as ErrorResponseBody;\n } catch {\n body = undefined;\n }\n const code = body?.error?.code ?? fallbackCode;\n const message = body?.error?.message ?? res.statusText;\n return new UlvioError(code, message, { status: res.status, response: body });\n}\n\nexport class HttpClient {\n constructor(private readonly config: UlvioConfig) {}\n\n private requirePlatform(method: string): { url: string; key: string } {\n const url = this.config.platformApiUrl;\n const key = this.config.platformApiKey;\n if (!url || !key) {\n throw new UlvioError(\n PLATFORM_NOT_CONFIGURED_CODE,\n `${method} requires platformApiUrl and platformApiKey to be set on the Ulvio client`,\n );\n }\n return { url: trimSlash(url), key };\n }\n\n private requireHtmlToPdf(method: string): string {\n const url = this.config.htmlToPdfApiUrl;\n if (!url) {\n throw new UlvioError(\n HTML_TO_PDF_NOT_CONFIGURED_CODE,\n `${method} requires htmlToPdfApiUrl to be set on the Ulvio client`,\n );\n }\n return trimSlash(url);\n }\n\n private requireUtilities(method: string): string {\n const url = this.config.utilitiesApiUrl;\n if (!url) {\n throw new UlvioError(\n UTILITIES_NOT_CONFIGURED_CODE,\n `${method} requires utilitiesApiUrl to be set on the Ulvio client`,\n );\n }\n return trimSlash(url);\n }\n\n // ── Platform (authenticated) ──────────────────────────────────────────\n\n async platformRequest<T>(\n callerName: string,\n method: string,\n path: string,\n options: RequestOptions = {},\n ): Promise<T> {\n const { url, key } = this.requirePlatform(callerName);\n const res = await fetch(`${url}${path}`, {\n method,\n headers: {\n 'Content-Type': 'application/json',\n Authorization: `Bearer ${key}`,\n },\n body: options.body !== undefined ? JSON.stringify(options.body) : undefined,\n });\n if (!res.ok) throw await parseError(res);\n return (await res.json()) as T;\n }\n\n async platformRequestRaw(\n callerName: string,\n method: string,\n path: string,\n options: RequestRawOptions = {},\n ): Promise<Response> {\n const { url, key } = this.requirePlatform(callerName);\n const headers: Record<string, string> = { ...options.headers };\n if (options.contentType) headers['Content-Type'] = options.contentType;\n headers['Authorization'] = `Bearer ${key}`;\n const res = await fetch(`${url}${path}`, {\n method,\n headers,\n body: options.body,\n });\n if (!res.ok) throw await parseError(res);\n return res;\n }\n\n // ── HTML-to-PDF (unauthenticated) ─────────────────────────────────────\n\n async htmlToPdfFetch(\n callerName: string,\n path: string,\n init: RequestInit,\n ): Promise<Response> {\n const url = this.requireHtmlToPdf(callerName);\n return fetch(`${url}${path}`, init);\n }\n\n // ── Utilities (unauthenticated) ───────────────────────────────────────\n\n async utilitiesRequest<T>(\n callerName: string,\n method: string,\n path: string,\n options: RequestOptions = {},\n ): Promise<T> {\n const url = this.requireUtilities(callerName);\n const res = await fetch(`${url}${path}`, {\n method,\n headers: { 'Content-Type': 'application/json' },\n body: options.body !== undefined ? JSON.stringify(options.body) : undefined,\n });\n const data = (await res.json().catch(() => undefined)) as T | undefined;\n if (!res.ok) {\n const errBody = data as ErrorResponseBody | undefined;\n throw new UlvioError(\n errBody?.error?.code ?? 'request_failed',\n errBody?.error?.message ?? res.statusText,\n { status: res.status, response: data },\n );\n }\n return data as T;\n }\n}\n","import type { HttpClient } from '../http.js';\n\nexport interface Attachment {\n filename: string;\n /** Base64-encoded file content. */\n content: string;\n content_type: string;\n}\n\nexport interface TransactionalMailSendRequest {\n from: string;\n to: string[];\n subject: string;\n body_html?: string;\n body_text?: string;\n reply_to?: string;\n attachments?: Attachment[];\n}\n\nexport interface TransactionalMailSendResponse {\n message_id: string;\n}\n\nexport class MailClient {\n constructor(private readonly http: HttpClient) {}\n\n sendTransactional(\n params: TransactionalMailSendRequest,\n ): Promise<TransactionalMailSendResponse> {\n return this.http.platformRequest<TransactionalMailSendResponse>(\n 'client.mail.sendTransactional()',\n 'POST',\n '/v1/transactional-mail/send',\n { body: params },\n );\n }\n}\n","import type { HttpClient } from '../http.js';\nimport type { Attachment } from './mail.js';\n\nexport interface MailboxSendRequest {\n to: string[];\n cc?: string[];\n bcc?: string[];\n subject: string;\n body_html?: string;\n body_text?: string;\n /** Message ID to reply to. Threads the message correctly. */\n reply_to_id?: string;\n attachments?: Attachment[];\n}\n\nexport interface MailboxSendResponse {\n message_id: string;\n}\n\nexport interface MailboxAttachment {\n id: string;\n filename: string;\n content_type: string;\n size_bytes: number;\n}\n\nexport interface MailboxMessageSummary {\n id: string;\n subject: string;\n from: string;\n to: string[];\n /** First 150 characters of the body, HTML stripped. */\n preview: string;\n received_at: string;\n has_attachments: boolean;\n is_read: boolean;\n is_processed: boolean;\n processed_at: string | null;\n}\n\nexport interface MailboxMessagesListResponse {\n messages: MailboxMessageSummary[];\n total: number;\n}\n\nexport interface MailboxMessageDetail {\n id: string;\n subject: string;\n from: string;\n to: string[];\n cc: string[];\n bcc: string[];\n body_html?: string;\n body_text?: string;\n received_at: string;\n is_read: boolean;\n is_processed: boolean;\n processed_at: string | null;\n attachments: MailboxAttachment[];\n}\n\nexport interface MailboxMarkProcessedResponse {\n ok: true;\n id: string;\n already_processed: boolean;\n processed_at: string;\n}\n\nexport interface MailboxConnectorStatus {\n healthy: boolean;\n state: 'healthy' | 'unhealthy';\n /** ISO timestamp of the last state change, or null if never changed. */\n changed_at: string | null;\n}\n\nexport class MailboxClient {\n constructor(private readonly http: HttpClient) {}\n\n send(params: MailboxSendRequest): Promise<MailboxSendResponse> {\n return this.http.platformRequest<MailboxSendResponse>(\n 'client.mailbox.send()',\n 'POST',\n '/v1/mailbox/send',\n { body: params },\n );\n }\n\n list(limit?: number): Promise<MailboxMessagesListResponse> {\n const qs = limit !== undefined ? `?limit=${limit}` : '';\n return this.http.platformRequest<MailboxMessagesListResponse>(\n 'client.mailbox.list()',\n 'GET',\n `/v1/mailbox/messages${qs}`,\n );\n }\n\n get(id: string): Promise<MailboxMessageDetail> {\n return this.http.platformRequest<MailboxMessageDetail>(\n 'client.mailbox.get()',\n 'GET',\n `/v1/mailbox/messages/${encodeURIComponent(id)}`,\n );\n }\n\n markProcessed(id: string): Promise<MailboxMarkProcessedResponse> {\n return this.http.platformRequest<MailboxMarkProcessedResponse>(\n 'client.mailbox.markProcessed()',\n 'POST',\n `/v1/mailbox/messages/${encodeURIComponent(id)}/mark-processed`,\n );\n }\n\n /**\n * Download a mailbox message attachment as a Buffer.\n */\n async getAttachment(messageId: string, attachmentId: string): Promise<Buffer> {\n const res = await this.http.platformRequestRaw(\n 'client.mailbox.getAttachment()',\n 'GET',\n `/v1/mailbox/messages/${encodeURIComponent(messageId)}/attachments/${encodeURIComponent(attachmentId)}`,\n );\n const arrayBuffer = await res.arrayBuffer();\n return Buffer.from(arrayBuffer);\n }\n\n getConnectorStatus(): Promise<MailboxConnectorStatus> {\n return this.http.platformRequest<MailboxConnectorStatus>(\n 'client.mailbox.getConnectorStatus()',\n 'GET',\n '/v1/mailbox/connector-status',\n );\n }\n\n /**\n * Dev-only: toggle the mock connector's health state.\n */\n setConnectorStatus(healthy: boolean): Promise<MailboxConnectorStatus> {\n return this.http.platformRequest<MailboxConnectorStatus>(\n 'client.mailbox.setConnectorStatus()',\n 'PATCH',\n '/v1/mailbox/connector-status',\n { body: { healthy } },\n );\n }\n}\n","import type { HttpClient } from '../http.js';\n\nexport interface SmsSendRequest {\n /** Sender phone number in E.164 format. */\n from: string;\n /** Recipient phone number in E.164 format. */\n to: string;\n /** SMS text content. Max 1600 characters. */\n body: string;\n}\n\nexport interface SmsSendResponse {\n message_id: string;\n status: 'queued';\n}\n\nexport class SmsClient {\n constructor(private readonly http: HttpClient) {}\n\n send(params: SmsSendRequest): Promise<SmsSendResponse> {\n return this.http.platformRequest<SmsSendResponse>(\n 'client.sms.send()',\n 'POST',\n '/v1/sms/send',\n { body: params },\n );\n }\n}\n","import type { HttpClient } from '../http.js';\n\nexport interface WhatsAppParameter {\n type: 'text' | 'image' | 'document' | 'video';\n parameter_name?: string;\n text?: string;\n image?: { link: string };\n document?: { link: string; filename: string };\n video?: { link: string };\n}\n\nexport interface WhatsAppComponent {\n type: 'header' | 'body' | 'button';\n sub_type?: 'url' | 'quick_reply';\n index?: number;\n parameters: WhatsAppParameter[];\n}\n\nexport interface WhatsAppSendRequest {\n /** Recipient phone number in E.164 format. */\n to: string;\n /** Pre-approved WhatsApp template name. */\n template_name: string;\n /** BCP 47 language code (e.g. \"en\", \"nl\", \"fr\"). */\n language_code: string;\n components?: WhatsAppComponent[];\n}\n\nexport interface WhatsAppSendResponse {\n message_id: string;\n status: 'queued';\n}\n\nexport class WhatsAppClient {\n constructor(private readonly http: HttpClient) {}\n\n send(params: WhatsAppSendRequest): Promise<WhatsAppSendResponse> {\n return this.http.platformRequest<WhatsAppSendResponse>(\n 'client.whatsapp.send()',\n 'POST',\n '/v1/whatsapp/send',\n { body: params },\n );\n }\n}\n","import type { HttpClient } from '../http.js';\n\nexport interface VoiceTranscribeRequest {\n /** Base64-encoded audio buffer. */\n file: string;\n file_name: string;\n /** Optional BCP-47 language code (e.g. \"en\", \"nl\"). */\n language_code?: string;\n}\n\nexport interface VoiceTranscribeResponse {\n job_id: string;\n status: string;\n text: string;\n}\n\nexport class VoiceClient {\n constructor(private readonly http: HttpClient) {}\n\n transcribe(params: VoiceTranscribeRequest): Promise<VoiceTranscribeResponse> {\n return this.http.platformRequest<VoiceTranscribeResponse>(\n 'client.voice.transcribe()',\n 'POST',\n '/v1/voice/send',\n { body: params },\n );\n }\n}\n","import type { HttpClient } from '../http.js';\n\nexport interface FileUploadResponse {\n key: string;\n content_type: string;\n size_bytes: number;\n}\n\nexport interface FileListItem {\n key: string;\n is_folder: boolean;\n content_type: string | null;\n size_bytes: number;\n created_at: string | null;\n}\n\nexport interface FileListResponse {\n files: FileListItem[];\n next_cursor: string | null;\n}\n\nexport interface PresignedUrlResponse {\n url: string;\n expires_in: number;\n}\n\nexport type FileUploadBody = Buffer | Uint8Array | ReadableStream | string;\n\nexport class FilesClient {\n constructor(private readonly http: HttpClient) {}\n\n async upload(\n key: string,\n file: FileUploadBody,\n contentType: string = 'application/octet-stream',\n ): Promise<FileUploadResponse> {\n const res = await this.http.platformRequestRaw(\n 'client.files.upload()',\n 'PUT',\n `/v1/files/${encodeURI(key)}`,\n { body: file as BodyInit, contentType },\n );\n return (await res.json()) as FileUploadResponse;\n }\n\n /**\n * Download a file. Returns the raw Response for streaming.\n */\n get(key: string): Promise<Response> {\n return this.http.platformRequestRaw(\n 'client.files.get()',\n 'GET',\n `/v1/files/${encodeURI(key)}`,\n );\n }\n\n list(prefix?: string, limit?: number, cursor?: string): Promise<FileListResponse> {\n const params = new URLSearchParams();\n if (prefix) params.set('prefix', prefix);\n if (limit !== undefined) params.set('limit', String(limit));\n if (cursor) params.set('cursor', cursor);\n const qs = params.toString();\n return this.http.platformRequest<FileListResponse>(\n 'client.files.list()',\n 'GET',\n `/v1/files${qs ? `?${qs}` : ''}`,\n );\n }\n\n delete(key: string): Promise<{ ok: true }> {\n return this.http.platformRequest<{ ok: true }>(\n 'client.files.delete()',\n 'DELETE',\n `/v1/files/${encodeURI(key)}`,\n );\n }\n\n deleteMany(prefix: string): Promise<{ ok: true; deleted: number }> {\n return this.http.platformRequest<{ ok: true; deleted: number }>(\n 'client.files.deleteMany()',\n 'DELETE',\n `/v1/files?prefix=${encodeURIComponent(prefix)}`,\n );\n }\n\n /**\n * Generate a time-limited download URL for a file.\n * @param expiresIn TTL in seconds (default 3600, min 60, max 86400)\n */\n presignedDownloadUrl(key: string, expiresIn?: number): Promise<PresignedUrlResponse> {\n return this.http.platformRequest<PresignedUrlResponse>(\n 'client.files.presignedDownloadUrl()',\n 'POST',\n '/v1/files/presigned-download',\n { body: { key, expires_in: expiresIn } },\n );\n }\n\n /**\n * Generate a time-limited upload URL for a file.\n * @param expiresIn TTL in seconds (default 3600, min 60, max 86400)\n * @param maxSize Max file size in bytes (default 50MB)\n */\n presignedUploadUrl(\n key: string,\n contentType: string,\n expiresIn?: number,\n maxSize?: number,\n ): Promise<PresignedUrlResponse> {\n return this.http.platformRequest<PresignedUrlResponse>(\n 'client.files.presignedUploadUrl()',\n 'POST',\n '/v1/files/presigned-upload',\n {\n body: { key, content_type: contentType, expires_in: expiresIn, max_size: maxSize },\n },\n );\n }\n}\n","import { z } from 'zod';\nimport type { HttpClient } from '../http.js';\nimport { UlvioError, type ErrorResponseBody } from '../errors.js';\n\nexport type Role = 'user' | 'assistant' | 'system';\n\nexport interface InputMessage {\n role: Role;\n content: string;\n}\n\nexport type Input = string | InputMessage[];\n\nexport interface ParseRequest<TSchema extends z.ZodType> {\n /** Model identifier, e.g. \"claude-opus-4-7\", \"claude-sonnet-4-6\". */\n model: string;\n input: Input;\n /** Zod schema describing the structured output shape. */\n schema: TSchema;\n}\n\nexport interface ParseResponse<T> {\n data: T;\n}\n\nexport type StreamEvent<T> =\n | { type: 'partial'; data: Partial<T> }\n | { type: 'complete'; data: T }\n | { type: 'error'; message: string };\n\ninterface WirePayload {\n model: string;\n input: Input;\n /** JSON Schema serialized from the supplied Zod schema. */\n schema: unknown;\n}\n\nfunction buildPayload<TSchema extends z.ZodType>(\n params: ParseRequest<TSchema>,\n): WirePayload {\n return {\n model: params.model,\n input: params.input,\n schema: z.toJSONSchema(params.schema),\n };\n}\n\nfunction parseSseEvents(chunk: string): Array<{ event: string; data: string }> {\n const events: Array<{ event: string; data: string }> = [];\n let currentEvent = '';\n let currentData = '';\n\n for (const line of chunk.split('\\n')) {\n if (line.startsWith('event: ')) {\n currentEvent = line.slice(7);\n } else if (line.startsWith('data: ')) {\n currentData = line.slice(6);\n } else if (line === '' && currentEvent) {\n events.push({ event: currentEvent, data: currentData });\n currentEvent = '';\n currentData = '';\n }\n }\n\n return events;\n}\n\nexport class AiClient {\n constructor(private readonly http: HttpClient) {}\n\n async parse<TSchema extends z.ZodType>(\n params: ParseRequest<TSchema>,\n ): Promise<z.infer<TSchema>> {\n const wire = buildPayload(params);\n const response = await this.http.platformRequest<ParseResponse<unknown>>(\n 'client.ai.parse()',\n 'POST',\n '/v1/ai/parse',\n { body: wire },\n );\n return params.schema.parse(response.data) as z.infer<TSchema>;\n }\n\n async *stream<TSchema extends z.ZodType>(\n params: ParseRequest<TSchema>,\n ): AsyncGenerator<StreamEvent<z.infer<TSchema>>, void, void> {\n const wire = buildPayload(params);\n const res = await this.http.platformRequestRaw(\n 'client.ai.stream()',\n 'POST',\n '/v1/ai/stream',\n {\n body: JSON.stringify(wire),\n contentType: 'application/json',\n headers: { Accept: 'text/event-stream' },\n },\n );\n\n if (!res.body) {\n throw new UlvioError('stream_no_body', 'AI stream returned no response body', {\n status: res.status,\n });\n }\n\n const reader = res.body.getReader();\n const decoder = new TextDecoder();\n let buffer = '';\n\n for (;;) {\n const { done, value } = await reader.read();\n if (done) break;\n buffer += decoder.decode(value, { stream: true });\n\n const events = parseSseEvents(buffer);\n const lastBoundary = buffer.lastIndexOf('\\n\\n');\n buffer = lastBoundary >= 0 ? buffer.slice(lastBoundary + 2) : buffer;\n\n for (const { event, data } of events) {\n switch (event) {\n case 'partial':\n yield { type: 'partial', data: JSON.parse(data) as Partial<z.infer<TSchema>> };\n break;\n case 'complete': {\n const parsed = params.schema.parse(JSON.parse(data));\n yield { type: 'complete', data: parsed as z.infer<TSchema> };\n return;\n }\n case 'error': {\n const errBody = JSON.parse(data) as ErrorResponseBody['error'] | { message: string };\n throw new UlvioError(\n ('code' in errBody && errBody.code) || 'ai_stream_error',\n errBody.message,\n );\n }\n }\n }\n }\n }\n}\n","import type { HttpClient } from '../http.js';\nimport { UlvioError, type ErrorResponseBody } from '../errors.js';\n\nexport interface PdfOptions {\n format?: string;\n printBackground?: boolean;\n margin?: {\n top?: string;\n right?: string;\n bottom?: string;\n left?: string;\n };\n}\n\nexport interface HtmlToPdfBase64Request {\n /** Base64-encoded HTML content. Provide either `html` or `sourceUrl`. */\n html?: string;\n sourceUrl?: string;\n outputMode: 'base64';\n options?: PdfOptions;\n}\n\nexport interface HtmlToPdfUploadRequest {\n html?: string;\n sourceUrl?: string;\n /** Pre-signed URL the service will PUT the rendered PDF to. */\n uploadUrl: string;\n options?: PdfOptions;\n}\n\nexport type HtmlToPdfRequest = HtmlToPdfBase64Request | HtmlToPdfUploadRequest;\n\nexport interface HtmlToPdfBase64Response {\n pdf: string;\n}\n\nexport interface HtmlToPdfUploadResponse {\n uploaded: true;\n bytes: number;\n}\n\nexport type HtmlToPdfResponse = HtmlToPdfBase64Response | HtmlToPdfUploadResponse;\n\nexport interface QueuedEvent {\n position: number;\n}\n\nexport interface ProcessingEvent {\n step: string;\n progress: number;\n}\n\nexport interface HtmlToPdfCallbacks {\n onQueued?: (data: QueuedEvent) => void;\n onProcessing?: (data: ProcessingEvent) => void;\n}\n\nfunction parseSseEvents(chunk: string): Array<{ event: string; data: string }> {\n const events: Array<{ event: string; data: string }> = [];\n let currentEvent = '';\n let currentData = '';\n\n for (const line of chunk.split('\\n')) {\n if (line.startsWith('event: ')) {\n currentEvent = line.slice(7);\n } else if (line.startsWith('data: ')) {\n currentData = line.slice(6);\n } else if (line === '' && currentEvent) {\n events.push({ event: currentEvent, data: currentData });\n currentEvent = '';\n currentData = '';\n }\n }\n\n return events;\n}\n\nexport class HtmlToPdfClient {\n constructor(private readonly http: HttpClient) {}\n\n async convert(\n params: HtmlToPdfBase64Request,\n callbacks?: HtmlToPdfCallbacks,\n ): Promise<HtmlToPdfBase64Response>;\n async convert(\n params: HtmlToPdfUploadRequest,\n callbacks?: HtmlToPdfCallbacks,\n ): Promise<HtmlToPdfUploadResponse>;\n async convert(\n params: HtmlToPdfRequest,\n callbacks?: HtmlToPdfCallbacks,\n ): Promise<HtmlToPdfResponse> {\n const res = await this.http.htmlToPdfFetch('client.htmlToPdf.convert()', '/api/html-to-pdf', {\n method: 'POST',\n headers: { 'Content-Type': 'application/json' },\n body: JSON.stringify(params),\n });\n\n if (!res.ok) {\n const data = (await res.json().catch(() => undefined)) as\n | ErrorResponseBody\n | undefined;\n throw new UlvioError(\n data?.error?.code ?? 'html_to_pdf_failed',\n data?.error?.message ?? res.statusText,\n { status: res.status, response: data },\n );\n }\n\n if (!res.body) {\n throw new UlvioError('html_to_pdf_no_body', 'html-to-pdf service returned no body', {\n status: res.status,\n });\n }\n\n const reader = res.body.getReader();\n const decoder = new TextDecoder();\n let buffer = '';\n\n for (;;) {\n const { done, value } = await reader.read();\n if (done) break;\n\n buffer += decoder.decode(value, { stream: true });\n\n const events = parseSseEvents(buffer);\n const lastBoundary = buffer.lastIndexOf('\\n\\n');\n buffer = lastBoundary >= 0 ? buffer.slice(lastBoundary + 2) : buffer;\n\n for (const { event, data } of events) {\n switch (event) {\n case 'queued':\n callbacks?.onQueued?.(JSON.parse(data) as QueuedEvent);\n break;\n case 'processing':\n callbacks?.onProcessing?.(JSON.parse(data) as ProcessingEvent);\n break;\n case 'complete':\n return JSON.parse(data) as HtmlToPdfResponse;\n case 'error': {\n const errBody = JSON.parse(data) as { code?: string; message: string };\n throw new UlvioError(\n errBody.code ?? 'html_to_pdf_error',\n errBody.message,\n );\n }\n }\n }\n }\n\n throw new UlvioError(\n 'html_to_pdf_truncated',\n 'SSE stream ended without a complete event',\n );\n }\n}\n","import type { HttpClient } from '../http.js';\n\n// MJML\n\nexport interface MjmlValidationError {\n line: number;\n message: string;\n tagName: string;\n formattedMessage: string;\n}\n\nexport interface MjmlCompileRequest {\n mjml: string;\n options?: {\n minify?: boolean;\n beautify?: boolean;\n validationLevel?: 'strict' | 'soft' | 'skip';\n };\n}\n\nexport interface MjmlCompileResponse {\n html: string;\n errors: MjmlValidationError[];\n}\n\n// LiquidJS\n\nexport interface LiquidRenderRequest {\n template: string;\n data: Record<string, unknown>;\n}\n\nexport interface LiquidRenderResponse {\n result: string;\n}\n\nexport interface LiquidVariablesRequest {\n template: string;\n}\n\nexport interface LiquidVariablesResponse {\n variables: string[];\n}\n\n// Markdown\n\nexport interface MarkdownRenderRequest {\n markdown: string;\n}\n\nexport interface MarkdownRenderResponse {\n html: string;\n}\n\n// Combined Liquid → MJML pipeline\n\nexport interface RenderEmailRequest {\n mjml: string;\n data: Record<string, unknown>;\n options?: {\n minify?: boolean;\n beautify?: boolean;\n validationLevel?: 'strict' | 'soft' | 'skip';\n };\n}\n\nexport interface RenderEmailResponse {\n html: string;\n errors: MjmlValidationError[];\n}\n\nexport class UtilitiesClient {\n constructor(private readonly http: HttpClient) {}\n\n compileMjml(params: MjmlCompileRequest): Promise<MjmlCompileResponse> {\n return this.http.utilitiesRequest<MjmlCompileResponse>(\n 'client.utilities.compileMjml()',\n 'POST',\n '/api/mjml/compile',\n { body: params },\n );\n }\n\n renderLiquid(params: LiquidRenderRequest): Promise<LiquidRenderResponse> {\n return this.http.utilitiesRequest<LiquidRenderResponse>(\n 'client.utilities.renderLiquid()',\n 'POST',\n '/api/liquidjs/render',\n { body: params },\n );\n }\n\n extractLiquidVariables(\n params: LiquidVariablesRequest,\n ): Promise<LiquidVariablesResponse> {\n return this.http.utilitiesRequest<LiquidVariablesResponse>(\n 'client.utilities.extractLiquidVariables()',\n 'POST',\n '/api/liquidjs/variables',\n { body: params },\n );\n }\n\n renderMarkdown(params: MarkdownRenderRequest): Promise<MarkdownRenderResponse> {\n return this.http.utilitiesRequest<MarkdownRenderResponse>(\n 'client.utilities.renderMarkdown()',\n 'POST',\n '/api/markdown/render',\n { body: params },\n );\n }\n\n renderEmail(params: RenderEmailRequest): Promise<RenderEmailResponse> {\n return this.http.utilitiesRequest<RenderEmailResponse>(\n 'client.utilities.renderEmail()',\n 'POST',\n '/api/render-email',\n { body: params },\n );\n }\n}\n","import { HttpClient, type UlvioConfig } from './http.js';\nimport { MailClient } from './clients/mail.js';\nimport { MailboxClient } from './clients/mailbox.js';\nimport { SmsClient } from './clients/sms.js';\nimport { WhatsAppClient } from './clients/whatsapp.js';\nimport { VoiceClient } from './clients/voice.js';\nimport { FilesClient } from './clients/files.js';\nimport { AiClient } from './clients/ai.js';\nimport { HtmlToPdfClient } from './clients/html-to-pdf.js';\nimport { UtilitiesClient } from './clients/utilities.js';\n\nexport class Ulvio {\n readonly mail: MailClient;\n readonly mailbox: MailboxClient;\n readonly sms: SmsClient;\n readonly whatsapp: WhatsAppClient;\n readonly voice: VoiceClient;\n readonly files: FilesClient;\n readonly ai: AiClient;\n readonly htmlToPdf: HtmlToPdfClient;\n readonly utilities: UtilitiesClient;\n\n constructor(config: UlvioConfig = {}) {\n const http = new HttpClient(config);\n this.mail = new MailClient(http);\n this.mailbox = new MailboxClient(http);\n this.sms = new SmsClient(http);\n this.whatsapp = new WhatsAppClient(http);\n this.voice = new VoiceClient(http);\n this.files = new FilesClient(http);\n this.ai = new AiClient(http);\n this.htmlToPdf = new HtmlToPdfClient(http);\n this.utilities = new UtilitiesClient(http);\n }\n}\n\nexport type { UlvioConfig } from './http.js';\n\n// Errors\nexport {\n UlvioError,\n CONNECTOR_UNHEALTHY_CODE,\n PLATFORM_NOT_CONFIGURED_CODE,\n HTML_TO_PDF_NOT_CONFIGURED_CODE,\n UTILITIES_NOT_CONFIGURED_CODE,\n isConnectorUnhealthyError,\n type ErrorResponseBody,\n} from './errors.js';\n\n// Sub-client classes\nexport { MailClient } from './clients/mail.js';\nexport { MailboxClient } from './clients/mailbox.js';\nexport { SmsClient } from './clients/sms.js';\nexport { WhatsAppClient } from './clients/whatsapp.js';\nexport { VoiceClient } from './clients/voice.js';\nexport { FilesClient } from './clients/files.js';\nexport { AiClient } from './clients/ai.js';\nexport { HtmlToPdfClient } from './clients/html-to-pdf.js';\nexport { UtilitiesClient } from './clients/utilities.js';\n\n// Mail types\nexport type {\n Attachment,\n TransactionalMailSendRequest,\n TransactionalMailSendResponse,\n} from './clients/mail.js';\n\n// Mailbox types\nexport type {\n MailboxSendRequest,\n MailboxSendResponse,\n MailboxAttachment,\n MailboxMessageSummary,\n MailboxMessagesListResponse,\n MailboxMessageDetail,\n MailboxMarkProcessedResponse,\n MailboxConnectorStatus,\n} from './clients/mailbox.js';\n\n// SMS types\nexport type { SmsSendRequest, SmsSendResponse } from './clients/sms.js';\n\n// WhatsApp types\nexport type {\n WhatsAppParameter,\n WhatsAppComponent,\n WhatsAppSendRequest,\n WhatsAppSendResponse,\n} from './clients/whatsapp.js';\n\n// Voice types\nexport type { VoiceTranscribeRequest, VoiceTranscribeResponse } from './clients/voice.js';\n\n// Files types\nexport type {\n FileUploadResponse,\n FileListItem,\n FileListResponse,\n PresignedUrlResponse,\n FileUploadBody,\n} from './clients/files.js';\n\n// AI types\nexport type {\n Role,\n InputMessage,\n Input,\n ParseRequest,\n ParseResponse,\n StreamEvent,\n} from './clients/ai.js';\n\n// HTML-to-PDF types\nexport type {\n PdfOptions,\n HtmlToPdfBase64Request,\n HtmlToPdfUploadRequest,\n HtmlToPdfRequest,\n HtmlToPdfBase64Response,\n HtmlToPdfUploadResponse,\n HtmlToPdfResponse,\n QueuedEvent,\n ProcessingEvent,\n HtmlToPdfCallbacks,\n} from './clients/html-to-pdf.js';\n\n// Utilities types\nexport type {\n MjmlValidationError,\n MjmlCompileRequest,\n MjmlCompileResponse,\n LiquidRenderRequest,\n LiquidRenderResponse,\n LiquidVariablesRequest,\n LiquidVariablesResponse,\n MarkdownRenderRequest,\n MarkdownRenderResponse,\n RenderEmailRequest,\n RenderEmailResponse,\n} from './clients/utilities.js';\n"],"mappings":"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","names":["parseSseEvents"]}
1
+ {"version":3,"sources":["../src/errors.ts","../src/http.ts","../src/clients/mail.ts","../src/clients/mailbox.ts","../src/clients/sms.ts","../src/clients/whatsapp.ts","../src/clients/voice.ts","../src/clients/files.ts","../src/clients/ai.ts","../src/clients/html-to-pdf.ts","../src/clients/utilities.ts","../src/index.ts"],"sourcesContent":["export interface ErrorResponseBody {\n error: {\n code?: string;\n message: string;\n };\n}\n\nexport const CONNECTOR_UNHEALTHY_CODE = 'CONNECTOR_UNHEALTHY';\n\nexport const NOT_CONFIGURED_CODE = 'not_configured';\n\nexport class UlvioError extends Error {\n readonly code: string;\n readonly status?: number;\n readonly response?: unknown;\n\n constructor(\n code: string,\n message: string,\n options: { status?: number; response?: unknown; cause?: unknown } = {},\n ) {\n super(message, { cause: options.cause });\n this.name = 'UlvioError';\n this.code = code;\n this.status = options.status;\n this.response = options.response;\n }\n}\n\nexport function isConnectorUnhealthyError(err: unknown): boolean {\n if (err instanceof UlvioError) return err.code === CONNECTOR_UNHEALTHY_CODE;\n const response = (err as { response?: ErrorResponseBody })?.response;\n return response?.error?.code === CONNECTOR_UNHEALTHY_CODE;\n}\n","import { ErrorResponseBody, NOT_CONFIGURED_CODE, UlvioError } from './errors.js';\n\nexport interface UlvioConfig {\n baseUrl?: string;\n apiKey?: string;\n}\n\ninterface RequestOptions {\n body?: unknown;\n}\n\ninterface RequestRawOptions {\n body?: BodyInit;\n contentType?: string;\n headers?: Record<string, string>;\n}\n\nfunction trimSlash(url: string): string {\n return url.replace(/\\/$/, '');\n}\n\nasync function parseError(res: Response, fallbackCode = 'request_failed'): Promise<UlvioError> {\n let body: ErrorResponseBody | undefined;\n try {\n body = (await res.json()) as ErrorResponseBody;\n } catch {\n body = undefined;\n }\n const code = body?.error?.code ?? fallbackCode;\n const message = body?.error?.message ?? res.statusText;\n return new UlvioError(code, message, { status: res.status, response: body });\n}\n\nexport class HttpClient {\n constructor(private readonly config: UlvioConfig) {}\n\n private requireConfig(method: string): { url: string; key: string } {\n const url = this.config.baseUrl;\n const key = this.config.apiKey;\n if (!url || !key) {\n const missing = !url && !key ? 'baseUrl and apiKey' : !url ? 'baseUrl' : 'apiKey';\n throw new UlvioError(\n NOT_CONFIGURED_CODE,\n `${method} requires ${missing} to be set on the Ulvio client`,\n );\n }\n return { url: trimSlash(url), key };\n }\n\n async request<T>(\n callerName: string,\n method: string,\n path: string,\n options: RequestOptions = {},\n ): Promise<T> {\n const { url, key } = this.requireConfig(callerName);\n const res = await fetch(`${url}${path}`, {\n method,\n headers: {\n 'Content-Type': 'application/json',\n Authorization: `Bearer ${key}`,\n },\n body: options.body !== undefined ? JSON.stringify(options.body) : undefined,\n });\n if (!res.ok) throw await parseError(res);\n return (await res.json()) as T;\n }\n\n async requestRaw(\n callerName: string,\n method: string,\n path: string,\n options: RequestRawOptions = {},\n ): Promise<Response> {\n const { url, key } = this.requireConfig(callerName);\n const headers: Record<string, string> = { ...options.headers };\n if (options.contentType) headers['Content-Type'] = options.contentType;\n headers['Authorization'] = `Bearer ${key}`;\n const res = await fetch(`${url}${path}`, {\n method,\n headers,\n body: options.body,\n });\n if (!res.ok) throw await parseError(res);\n return res;\n }\n}\n","import type { HttpClient } from '../http.js';\n\nexport interface Attachment {\n filename: string;\n /** Base64-encoded file content. */\n content: string;\n content_type: string;\n}\n\nexport interface TransactionalMailSendRequest {\n from: string;\n to: string[];\n subject: string;\n body_html?: string;\n body_text?: string;\n reply_to?: string;\n attachments?: Attachment[];\n}\n\nexport interface TransactionalMailSendResponse {\n message_id: string;\n}\n\nexport class MailClient {\n constructor(private readonly http: HttpClient) {}\n\n sendTransactional(\n params: TransactionalMailSendRequest,\n ): Promise<TransactionalMailSendResponse> {\n return this.http.request<TransactionalMailSendResponse>(\n 'client.mail.sendTransactional()',\n 'POST',\n '/v1/transactional-mail/send',\n { body: params },\n );\n }\n}\n","import type { HttpClient } from '../http.js';\nimport type { Attachment } from './mail.js';\n\nexport interface MailboxSendRequest {\n to: string[];\n cc?: string[];\n bcc?: string[];\n subject: string;\n body_html?: string;\n body_text?: string;\n /** Message ID to reply to. Threads the message correctly. */\n reply_to_id?: string;\n attachments?: Attachment[];\n}\n\nexport interface MailboxSendResponse {\n message_id: string;\n}\n\nexport interface MailboxAttachment {\n id: string;\n filename: string;\n content_type: string;\n size_bytes: number;\n}\n\nexport interface MailboxMessageSummary {\n id: string;\n subject: string;\n from: string;\n to: string[];\n /** First 150 characters of the body, HTML stripped. */\n preview: string;\n received_at: string;\n has_attachments: boolean;\n is_read: boolean;\n is_processed: boolean;\n processed_at: string | null;\n}\n\nexport interface MailboxMessagesListResponse {\n messages: MailboxMessageSummary[];\n total: number;\n}\n\nexport interface MailboxMessageDetail {\n id: string;\n subject: string;\n from: string;\n to: string[];\n cc: string[];\n bcc: string[];\n body_html?: string;\n body_text?: string;\n received_at: string;\n is_read: boolean;\n is_processed: boolean;\n processed_at: string | null;\n attachments: MailboxAttachment[];\n}\n\nexport interface MailboxMarkProcessedResponse {\n ok: true;\n id: string;\n already_processed: boolean;\n processed_at: string;\n}\n\nexport interface MailboxConnectorStatus {\n healthy: boolean;\n state: 'healthy' | 'unhealthy';\n /** ISO timestamp of the last state change, or null if never changed. */\n changed_at: string | null;\n}\n\nexport class MailboxClient {\n constructor(private readonly http: HttpClient) {}\n\n send(params: MailboxSendRequest): Promise<MailboxSendResponse> {\n return this.http.request<MailboxSendResponse>(\n 'client.mailbox.send()',\n 'POST',\n '/v1/mailbox/send',\n { body: params },\n );\n }\n\n list(limit?: number): Promise<MailboxMessagesListResponse> {\n const qs = limit !== undefined ? `?limit=${limit}` : '';\n return this.http.request<MailboxMessagesListResponse>(\n 'client.mailbox.list()',\n 'GET',\n `/v1/mailbox/messages${qs}`,\n );\n }\n\n get(id: string): Promise<MailboxMessageDetail> {\n return this.http.request<MailboxMessageDetail>(\n 'client.mailbox.get()',\n 'GET',\n `/v1/mailbox/messages/${encodeURIComponent(id)}`,\n );\n }\n\n markProcessed(id: string): Promise<MailboxMarkProcessedResponse> {\n return this.http.request<MailboxMarkProcessedResponse>(\n 'client.mailbox.markProcessed()',\n 'POST',\n `/v1/mailbox/messages/${encodeURIComponent(id)}/mark-processed`,\n );\n }\n\n /**\n * Download a mailbox message attachment as a Buffer.\n */\n async getAttachment(messageId: string, attachmentId: string): Promise<Buffer> {\n const res = await this.http.requestRaw(\n 'client.mailbox.getAttachment()',\n 'GET',\n `/v1/mailbox/messages/${encodeURIComponent(messageId)}/attachments/${encodeURIComponent(attachmentId)}`,\n );\n const arrayBuffer = await res.arrayBuffer();\n return Buffer.from(arrayBuffer);\n }\n\n getConnectorStatus(): Promise<MailboxConnectorStatus> {\n return this.http.request<MailboxConnectorStatus>(\n 'client.mailbox.getConnectorStatus()',\n 'GET',\n '/v1/mailbox/connector-status',\n );\n }\n\n /**\n * Dev-only: toggle the mock connector's health state.\n */\n setConnectorStatus(healthy: boolean): Promise<MailboxConnectorStatus> {\n return this.http.request<MailboxConnectorStatus>(\n 'client.mailbox.setConnectorStatus()',\n 'PATCH',\n '/v1/mailbox/connector-status',\n { body: { healthy } },\n );\n }\n}\n","import type { HttpClient } from '../http.js';\n\nexport interface SmsSendRequest {\n /** Sender phone number in E.164 format. */\n from: string;\n /** Recipient phone number in E.164 format. */\n to: string;\n /** SMS text content. Max 1600 characters. */\n body: string;\n}\n\nexport interface SmsSendResponse {\n message_id: string;\n status: 'queued';\n}\n\nexport class SmsClient {\n constructor(private readonly http: HttpClient) {}\n\n send(params: SmsSendRequest): Promise<SmsSendResponse> {\n return this.http.request<SmsSendResponse>(\n 'client.sms.send()',\n 'POST',\n '/v1/sms/send',\n { body: params },\n );\n }\n}\n","import type { HttpClient } from '../http.js';\n\nexport interface WhatsAppParameter {\n type: 'text' | 'image' | 'document' | 'video';\n parameter_name?: string;\n text?: string;\n image?: { link: string };\n document?: { link: string; filename: string };\n video?: { link: string };\n}\n\nexport interface WhatsAppComponent {\n type: 'header' | 'body' | 'button';\n sub_type?: 'url' | 'quick_reply';\n index?: number;\n parameters: WhatsAppParameter[];\n}\n\nexport interface WhatsAppSendRequest {\n /** Recipient phone number in E.164 format. */\n to: string;\n /** Pre-approved WhatsApp template name. */\n template_name: string;\n /** BCP 47 language code (e.g. \"en\", \"nl\", \"fr\"). */\n language_code: string;\n components?: WhatsAppComponent[];\n}\n\nexport interface WhatsAppSendResponse {\n message_id: string;\n status: 'queued';\n}\n\nexport class WhatsAppClient {\n constructor(private readonly http: HttpClient) {}\n\n send(params: WhatsAppSendRequest): Promise<WhatsAppSendResponse> {\n return this.http.request<WhatsAppSendResponse>(\n 'client.whatsapp.send()',\n 'POST',\n '/v1/whatsapp/send',\n { body: params },\n );\n }\n}\n","import type { HttpClient } from '../http.js';\n\nexport interface VoiceTranscribeRequest {\n /** Base64-encoded audio buffer. */\n file: string;\n file_name: string;\n /** Optional BCP-47 language code (e.g. \"en\", \"nl\"). */\n language_code?: string;\n}\n\nexport interface VoiceTranscribeResponse {\n job_id: string;\n status: string;\n text: string;\n}\n\nexport class VoiceClient {\n constructor(private readonly http: HttpClient) {}\n\n transcribe(params: VoiceTranscribeRequest): Promise<VoiceTranscribeResponse> {\n return this.http.request<VoiceTranscribeResponse>(\n 'client.voice.transcribe()',\n 'POST',\n '/v1/voice/send',\n { body: params },\n );\n }\n}\n","import type { HttpClient } from '../http.js';\n\nexport interface FileUploadResponse {\n key: string;\n content_type: string;\n size_bytes: number;\n}\n\nexport interface FileListItem {\n key: string;\n is_folder: boolean;\n content_type: string | null;\n size_bytes: number;\n created_at: string | null;\n}\n\nexport interface FileListResponse {\n files: FileListItem[];\n next_cursor: string | null;\n}\n\nexport interface PresignedUrlResponse {\n url: string;\n expires_in: number;\n}\n\nexport type FileUploadBody = Buffer | Uint8Array | ReadableStream | string;\n\nexport class FilesClient {\n constructor(private readonly http: HttpClient) {}\n\n async upload(\n key: string,\n file: FileUploadBody,\n contentType: string = 'application/octet-stream',\n ): Promise<FileUploadResponse> {\n const res = await this.http.requestRaw(\n 'client.files.upload()',\n 'PUT',\n `/v1/files/${encodeURI(key)}`,\n { body: file as BodyInit, contentType },\n );\n return (await res.json()) as FileUploadResponse;\n }\n\n /**\n * Download a file. Returns the raw Response for streaming.\n */\n get(key: string): Promise<Response> {\n return this.http.requestRaw(\n 'client.files.get()',\n 'GET',\n `/v1/files/${encodeURI(key)}`,\n );\n }\n\n list(prefix?: string, limit?: number, cursor?: string): Promise<FileListResponse> {\n const params = new URLSearchParams();\n if (prefix) params.set('prefix', prefix);\n if (limit !== undefined) params.set('limit', String(limit));\n if (cursor) params.set('cursor', cursor);\n const qs = params.toString();\n return this.http.request<FileListResponse>(\n 'client.files.list()',\n 'GET',\n `/v1/files${qs ? `?${qs}` : ''}`,\n );\n }\n\n delete(key: string): Promise<{ ok: true }> {\n return this.http.request<{ ok: true }>(\n 'client.files.delete()',\n 'DELETE',\n `/v1/files/${encodeURI(key)}`,\n );\n }\n\n deleteMany(prefix: string): Promise<{ ok: true; deleted: number }> {\n return this.http.request<{ ok: true; deleted: number }>(\n 'client.files.deleteMany()',\n 'DELETE',\n `/v1/files?prefix=${encodeURIComponent(prefix)}`,\n );\n }\n\n /**\n * Generate a time-limited download URL for a file.\n * @param expiresIn TTL in seconds (default 3600, min 60, max 86400)\n */\n presignedDownloadUrl(key: string, expiresIn?: number): Promise<PresignedUrlResponse> {\n return this.http.request<PresignedUrlResponse>(\n 'client.files.presignedDownloadUrl()',\n 'POST',\n '/v1/files/presigned-download',\n { body: { key, expires_in: expiresIn } },\n );\n }\n\n /**\n * Generate a time-limited upload URL for a file.\n * @param expiresIn TTL in seconds (default 3600, min 60, max 86400)\n * @param maxSize Max file size in bytes (default 50MB)\n */\n presignedUploadUrl(\n key: string,\n contentType: string,\n expiresIn?: number,\n maxSize?: number,\n ): Promise<PresignedUrlResponse> {\n return this.http.request<PresignedUrlResponse>(\n 'client.files.presignedUploadUrl()',\n 'POST',\n '/v1/files/presigned-upload',\n {\n body: { key, content_type: contentType, expires_in: expiresIn, max_size: maxSize },\n },\n );\n }\n}\n","import { z } from 'zod';\nimport type { HttpClient } from '../http.js';\nimport { UlvioError, type ErrorResponseBody } from '../errors.js';\n\nexport type Role = 'user' | 'assistant' | 'system';\n\nexport interface InputTextPart { type: 'input_text'; text: string }\nexport interface InputImagePart { type: 'input_image'; image_url: string }\nexport interface InputFilePart { type: 'input_file'; filename: string; file_data: string }\nexport type ContentPart = InputTextPart | InputImagePart | InputFilePart;\n\nexport interface InputMessage {\n role: Role;\n content: string | ContentPart[];\n}\n\nexport type Input = string | InputMessage[];\n\nexport interface ParseRequest<TSchema extends z.ZodType> {\n /** Model identifier, e.g. \"claude-opus-4-7\", \"claude-sonnet-4-6\". */\n model: string;\n input: Input;\n /** Zod schema describing the structured output shape. */\n schema: TSchema;\n}\n\nexport interface ParseResponse<T> {\n data: T;\n}\n\nexport type StreamEvent<T> =\n | { type: 'partial'; data: Partial<T> }\n | { type: 'complete'; data: T }\n | { type: 'error'; message: string };\n\ninterface WirePayload {\n model: string;\n input: Input;\n /** JSON Schema serialized from the supplied Zod schema. */\n schema: unknown;\n}\n\nfunction buildPayload<TSchema extends z.ZodType>(\n params: ParseRequest<TSchema>,\n): WirePayload {\n return {\n model: params.model,\n input: params.input,\n schema: z.toJSONSchema(params.schema),\n };\n}\n\nfunction parseSseEvents(chunk: string): Array<{ event: string; data: string }> {\n const events: Array<{ event: string; data: string }> = [];\n let currentEvent = '';\n let currentData = '';\n\n for (const line of chunk.split('\\n')) {\n if (line.startsWith('event: ')) {\n currentEvent = line.slice(7);\n } else if (line.startsWith('data: ')) {\n currentData = line.slice(6);\n } else if (line === '' && currentEvent) {\n events.push({ event: currentEvent, data: currentData });\n currentEvent = '';\n currentData = '';\n }\n }\n\n return events;\n}\n\nexport class AiClient {\n constructor(private readonly http: HttpClient) {}\n\n async parse<TSchema extends z.ZodType>(\n params: ParseRequest<TSchema>,\n ): Promise<z.infer<TSchema>> {\n const wire = buildPayload(params);\n const response = await this.http.request<ParseResponse<unknown>>(\n 'client.ai.parse()',\n 'POST',\n '/v1/ai/parse',\n { body: wire },\n );\n return params.schema.parse(response.data) as z.infer<TSchema>;\n }\n\n async *stream<TSchema extends z.ZodType>(\n params: ParseRequest<TSchema>,\n ): AsyncGenerator<StreamEvent<z.infer<TSchema>>, void, void> {\n const wire = buildPayload(params);\n const res = await this.http.requestRaw(\n 'client.ai.stream()',\n 'POST',\n '/v1/ai/stream',\n {\n body: JSON.stringify(wire),\n contentType: 'application/json',\n headers: { Accept: 'text/event-stream' },\n },\n );\n\n if (!res.body) {\n throw new UlvioError('stream_no_body', 'AI stream returned no response body', {\n status: res.status,\n });\n }\n\n const reader = res.body.getReader();\n const decoder = new TextDecoder();\n let buffer = '';\n\n for (;;) {\n const { done, value } = await reader.read();\n if (done) break;\n buffer += decoder.decode(value, { stream: true });\n\n const events = parseSseEvents(buffer);\n const lastBoundary = buffer.lastIndexOf('\\n\\n');\n buffer = lastBoundary >= 0 ? buffer.slice(lastBoundary + 2) : buffer;\n\n for (const { event, data } of events) {\n switch (event) {\n case 'partial':\n yield { type: 'partial', data: JSON.parse(data) as Partial<z.infer<TSchema>> };\n break;\n case 'complete': {\n const parsed = params.schema.parse(JSON.parse(data));\n yield { type: 'complete', data: parsed as z.infer<TSchema> };\n return;\n }\n case 'error': {\n const errBody = JSON.parse(data) as ErrorResponseBody['error'] | { message: string };\n throw new UlvioError(\n ('code' in errBody && errBody.code) || 'ai_stream_error',\n errBody.message,\n );\n }\n }\n }\n }\n }\n}\n","import type { HttpClient } from '../http.js';\nimport { UlvioError } from '../errors.js';\n\nexport interface PdfOptions {\n format?: string;\n printBackground?: boolean;\n margin?: {\n top?: string;\n right?: string;\n bottom?: string;\n left?: string;\n };\n}\n\nexport interface HtmlToPdfBase64Request {\n /** Base64-encoded HTML content. Provide either `html` or `sourceUrl`. */\n html?: string;\n sourceUrl?: string;\n outputMode: 'base64';\n options?: PdfOptions;\n}\n\nexport interface HtmlToPdfUploadRequest {\n html?: string;\n sourceUrl?: string;\n /** Pre-signed URL the service will PUT the rendered PDF to. */\n uploadUrl: string;\n options?: PdfOptions;\n}\n\nexport type HtmlToPdfRequest = HtmlToPdfBase64Request | HtmlToPdfUploadRequest;\n\nexport interface HtmlToPdfBase64Response {\n pdf: string;\n}\n\nexport interface HtmlToPdfUploadResponse {\n uploaded: true;\n bytes: number;\n}\n\nexport type HtmlToPdfResponse = HtmlToPdfBase64Response | HtmlToPdfUploadResponse;\n\nexport interface QueuedEvent {\n position: number;\n}\n\nexport interface ProcessingEvent {\n step: string;\n progress: number;\n}\n\nexport interface HtmlToPdfCallbacks {\n onQueued?: (data: QueuedEvent) => void;\n onProcessing?: (data: ProcessingEvent) => void;\n}\n\nfunction parseSseEvents(chunk: string): Array<{ event: string; data: string }> {\n const events: Array<{ event: string; data: string }> = [];\n let currentEvent = '';\n let currentData = '';\n\n for (const line of chunk.split('\\n')) {\n if (line.startsWith('event: ')) {\n currentEvent = line.slice(7);\n } else if (line.startsWith('data: ')) {\n currentData = line.slice(6);\n } else if (line === '' && currentEvent) {\n events.push({ event: currentEvent, data: currentData });\n currentEvent = '';\n currentData = '';\n }\n }\n\n return events;\n}\n\nexport class HtmlToPdfClient {\n constructor(private readonly http: HttpClient) {}\n\n async convert(\n params: HtmlToPdfBase64Request,\n callbacks?: HtmlToPdfCallbacks,\n ): Promise<HtmlToPdfBase64Response>;\n async convert(\n params: HtmlToPdfUploadRequest,\n callbacks?: HtmlToPdfCallbacks,\n ): Promise<HtmlToPdfUploadResponse>;\n async convert(\n params: HtmlToPdfRequest,\n callbacks?: HtmlToPdfCallbacks,\n ): Promise<HtmlToPdfResponse> {\n const res = await this.http.requestRaw(\n 'client.htmlToPdf.convert()',\n 'POST',\n '/html-to-pdf/convert',\n {\n body: JSON.stringify(params),\n contentType: 'application/json',\n headers: { Accept: 'text/event-stream' },\n },\n );\n\n if (!res.body) {\n throw new UlvioError('html_to_pdf_no_body', 'html-to-pdf service returned no body', {\n status: res.status,\n });\n }\n\n const reader = res.body.getReader();\n const decoder = new TextDecoder();\n let buffer = '';\n\n for (;;) {\n const { done, value } = await reader.read();\n if (done) break;\n\n buffer += decoder.decode(value, { stream: true });\n\n const events = parseSseEvents(buffer);\n const lastBoundary = buffer.lastIndexOf('\\n\\n');\n buffer = lastBoundary >= 0 ? buffer.slice(lastBoundary + 2) : buffer;\n\n for (const { event, data } of events) {\n switch (event) {\n case 'queued':\n callbacks?.onQueued?.(JSON.parse(data) as QueuedEvent);\n break;\n case 'processing':\n callbacks?.onProcessing?.(JSON.parse(data) as ProcessingEvent);\n break;\n case 'complete':\n return JSON.parse(data) as HtmlToPdfResponse;\n case 'error': {\n const errBody = JSON.parse(data) as { code?: string; message: string };\n throw new UlvioError(\n errBody.code ?? 'html_to_pdf_error',\n errBody.message,\n );\n }\n }\n }\n }\n\n throw new UlvioError(\n 'html_to_pdf_truncated',\n 'SSE stream ended without a complete event',\n );\n }\n}\n","import type { HttpClient } from '../http.js';\n\n// MJML\n\nexport interface MjmlValidationError {\n line: number;\n message: string;\n tagName: string;\n formattedMessage: string;\n}\n\nexport interface MjmlCompileRequest {\n mjml: string;\n options?: {\n minify?: boolean;\n beautify?: boolean;\n validationLevel?: 'strict' | 'soft' | 'skip';\n };\n}\n\nexport interface MjmlCompileResponse {\n html: string;\n errors: MjmlValidationError[];\n}\n\n// LiquidJS\n\nexport interface LiquidRenderRequest {\n template: string;\n data: Record<string, unknown>;\n}\n\nexport interface LiquidRenderResponse {\n result: string;\n}\n\nexport interface LiquidVariablesRequest {\n template: string;\n}\n\nexport interface LiquidVariablesResponse {\n variables: string[];\n}\n\n// Markdown\n\nexport interface MarkdownRenderRequest {\n markdown: string;\n}\n\nexport interface MarkdownRenderResponse {\n html: string;\n}\n\n// Combined Liquid → MJML pipeline\n\nexport interface RenderEmailRequest {\n mjml: string;\n data: Record<string, unknown>;\n options?: {\n minify?: boolean;\n beautify?: boolean;\n validationLevel?: 'strict' | 'soft' | 'skip';\n };\n}\n\nexport interface RenderEmailResponse {\n html: string;\n errors: MjmlValidationError[];\n}\n\nexport class UtilitiesClient {\n constructor(private readonly http: HttpClient) {}\n\n compileMjml(params: MjmlCompileRequest): Promise<MjmlCompileResponse> {\n return this.http.request<MjmlCompileResponse>(\n 'client.utilities.compileMjml()',\n 'POST',\n '/utilities/mjml/compile',\n { body: params },\n );\n }\n\n renderLiquid(params: LiquidRenderRequest): Promise<LiquidRenderResponse> {\n return this.http.request<LiquidRenderResponse>(\n 'client.utilities.renderLiquid()',\n 'POST',\n '/utilities/liquidjs/render',\n { body: params },\n );\n }\n\n extractLiquidVariables(\n params: LiquidVariablesRequest,\n ): Promise<LiquidVariablesResponse> {\n return this.http.request<LiquidVariablesResponse>(\n 'client.utilities.extractLiquidVariables()',\n 'POST',\n '/utilities/liquidjs/variables',\n { body: params },\n );\n }\n\n renderMarkdown(params: MarkdownRenderRequest): Promise<MarkdownRenderResponse> {\n return this.http.request<MarkdownRenderResponse>(\n 'client.utilities.renderMarkdown()',\n 'POST',\n '/utilities/markdown/render',\n { body: params },\n );\n }\n\n renderEmail(params: RenderEmailRequest): Promise<RenderEmailResponse> {\n return this.http.request<RenderEmailResponse>(\n 'client.utilities.renderEmail()',\n 'POST',\n '/utilities/render-email',\n { body: params },\n );\n }\n}\n","import { HttpClient, type UlvioConfig } from './http.js';\nimport { MailClient } from './clients/mail.js';\nimport { MailboxClient } from './clients/mailbox.js';\nimport { SmsClient } from './clients/sms.js';\nimport { WhatsAppClient } from './clients/whatsapp.js';\nimport { VoiceClient } from './clients/voice.js';\nimport { FilesClient } from './clients/files.js';\nimport { AiClient } from './clients/ai.js';\nimport { HtmlToPdfClient } from './clients/html-to-pdf.js';\nimport { UtilitiesClient } from './clients/utilities.js';\n\nexport class Ulvio {\n readonly mail: MailClient;\n readonly mailbox: MailboxClient;\n readonly sms: SmsClient;\n readonly whatsapp: WhatsAppClient;\n readonly voice: VoiceClient;\n readonly files: FilesClient;\n readonly ai: AiClient;\n readonly htmlToPdf: HtmlToPdfClient;\n readonly utilities: UtilitiesClient;\n\n constructor(config: UlvioConfig) {\n const http = new HttpClient(config);\n this.mail = new MailClient(http);\n this.mailbox = new MailboxClient(http);\n this.sms = new SmsClient(http);\n this.whatsapp = new WhatsAppClient(http);\n this.voice = new VoiceClient(http);\n this.files = new FilesClient(http);\n this.ai = new AiClient(http);\n this.htmlToPdf = new HtmlToPdfClient(http);\n this.utilities = new UtilitiesClient(http);\n }\n}\n\nexport type { UlvioConfig } from './http.js';\n\n// Errors\nexport {\n UlvioError,\n CONNECTOR_UNHEALTHY_CODE,\n NOT_CONFIGURED_CODE,\n isConnectorUnhealthyError,\n type ErrorResponseBody,\n} from './errors.js';\n\n// Sub-client classes\nexport { MailClient } from './clients/mail.js';\nexport { MailboxClient } from './clients/mailbox.js';\nexport { SmsClient } from './clients/sms.js';\nexport { WhatsAppClient } from './clients/whatsapp.js';\nexport { VoiceClient } from './clients/voice.js';\nexport { FilesClient } from './clients/files.js';\nexport { AiClient } from './clients/ai.js';\nexport { HtmlToPdfClient } from './clients/html-to-pdf.js';\nexport { UtilitiesClient } from './clients/utilities.js';\n\n// Mail types\nexport type {\n Attachment,\n TransactionalMailSendRequest,\n TransactionalMailSendResponse,\n} from './clients/mail.js';\n\n// Mailbox types\nexport type {\n MailboxSendRequest,\n MailboxSendResponse,\n MailboxAttachment,\n MailboxMessageSummary,\n MailboxMessagesListResponse,\n MailboxMessageDetail,\n MailboxMarkProcessedResponse,\n MailboxConnectorStatus,\n} from './clients/mailbox.js';\n\n// SMS types\nexport type { SmsSendRequest, SmsSendResponse } from './clients/sms.js';\n\n// WhatsApp types\nexport type {\n WhatsAppParameter,\n WhatsAppComponent,\n WhatsAppSendRequest,\n WhatsAppSendResponse,\n} from './clients/whatsapp.js';\n\n// Voice types\nexport type { VoiceTranscribeRequest, VoiceTranscribeResponse } from './clients/voice.js';\n\n// Files types\nexport type {\n FileUploadResponse,\n FileListItem,\n FileListResponse,\n PresignedUrlResponse,\n FileUploadBody,\n} from './clients/files.js';\n\n// AI types\nexport type {\n Role,\n InputTextPart,\n InputImagePart,\n InputFilePart,\n ContentPart,\n InputMessage,\n Input,\n ParseRequest,\n ParseResponse,\n StreamEvent,\n} from './clients/ai.js';\n\n// HTML-to-PDF types\nexport type {\n PdfOptions,\n HtmlToPdfBase64Request,\n HtmlToPdfUploadRequest,\n HtmlToPdfRequest,\n HtmlToPdfBase64Response,\n HtmlToPdfUploadResponse,\n HtmlToPdfResponse,\n QueuedEvent,\n ProcessingEvent,\n HtmlToPdfCallbacks,\n} from './clients/html-to-pdf.js';\n\n// Utilities types\nexport type {\n MjmlValidationError,\n MjmlCompileRequest,\n MjmlCompileResponse,\n LiquidRenderRequest,\n LiquidRenderResponse,\n LiquidVariablesRequest,\n LiquidVariablesResponse,\n MarkdownRenderRequest,\n MarkdownRenderResponse,\n RenderEmailRequest,\n RenderEmailResponse,\n} from './clients/utilities.js';\n"],"mappings":"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","names":["parseSseEvents"]}
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@ulvio/client",
3
- "version": "0.1.0",
3
+ "version": "0.3.0",
4
4
  "description": "Official TypeScript client for the Ulvio platform, html-to-pdf, and utilities services.",
5
5
  "type": "module",
6
6
  "main": "./dist/index.cjs",