tailprint 0.0.0-stage → 1.0.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (87) hide show
  1. package/LICENSE +21 -0
  2. package/README.md +160 -2
  3. package/dist/config/env.d.ts +77 -0
  4. package/dist/config/env.js +38 -0
  5. package/dist/config/env.js.map +1 -0
  6. package/dist/config/plans.d.ts +15 -0
  7. package/dist/config/plans.js +104 -0
  8. package/dist/config/plans.js.map +1 -0
  9. package/dist/config/templates.d.ts +10 -0
  10. package/dist/config/templates.js +746 -0
  11. package/dist/config/templates.js.map +1 -0
  12. package/dist/mcp/server.d.ts +10 -0
  13. package/dist/mcp/server.js +897 -0
  14. package/dist/mcp/server.js.map +1 -0
  15. package/dist/mcp/stdio.d.ts +2 -0
  16. package/dist/mcp/stdio.js +27 -0
  17. package/dist/mcp/stdio.js.map +1 -0
  18. package/dist/routes/dashboard.d.ts +2 -0
  19. package/dist/routes/dashboard.js +454 -0
  20. package/dist/routes/dashboard.js.map +1 -0
  21. package/dist/routes/mcp.d.ts +2 -0
  22. package/dist/routes/mcp.js +329 -0
  23. package/dist/routes/mcp.js.map +1 -0
  24. package/dist/routes/render.d.ts +2 -0
  25. package/dist/routes/render.js +444 -0
  26. package/dist/routes/render.js.map +1 -0
  27. package/dist/routes/scrape.d.ts +2 -0
  28. package/dist/routes/scrape.js +132 -0
  29. package/dist/routes/scrape.js.map +1 -0
  30. package/dist/routes/templates.d.ts +2 -0
  31. package/dist/routes/templates.js +2449 -0
  32. package/dist/routes/templates.js.map +1 -0
  33. package/dist/routes/usage.d.ts +31 -0
  34. package/dist/routes/usage.js +73 -0
  35. package/dist/routes/usage.js.map +1 -0
  36. package/dist/routes/webhooks.d.ts +2 -0
  37. package/dist/routes/webhooks.js +227 -0
  38. package/dist/routes/webhooks.js.map +1 -0
  39. package/dist/schemas/render.d.ts +422 -0
  40. package/dist/schemas/render.js +91 -0
  41. package/dist/schemas/render.js.map +1 -0
  42. package/dist/schemas/scrape.d.ts +65 -0
  43. package/dist/schemas/scrape.js +24 -0
  44. package/dist/schemas/scrape.js.map +1 -0
  45. package/dist/server.d.ts +2 -0
  46. package/dist/server.js +206 -0
  47. package/dist/server.js.map +1 -0
  48. package/dist/services/browser.d.ts +21 -0
  49. package/dist/services/browser.js +299 -0
  50. package/dist/services/browser.js.map +1 -0
  51. package/dist/services/carousel.d.ts +43 -0
  52. package/dist/services/carousel.js +300 -0
  53. package/dist/services/carousel.js.map +1 -0
  54. package/dist/services/chart.d.ts +29 -0
  55. package/dist/services/chart.js +129 -0
  56. package/dist/services/chart.js.map +1 -0
  57. package/dist/services/eInvoice.d.ts +62 -0
  58. package/dist/services/eInvoice.js +413 -0
  59. package/dist/services/eInvoice.js.map +1 -0
  60. package/dist/services/email.d.ts +24 -0
  61. package/dist/services/email.js +177 -0
  62. package/dist/services/email.js.map +1 -0
  63. package/dist/services/mockup.d.ts +14 -0
  64. package/dist/services/mockup.js +130 -0
  65. package/dist/services/mockup.js.map +1 -0
  66. package/dist/services/pdfStamper.d.ts +16 -0
  67. package/dist/services/pdfStamper.js +47 -0
  68. package/dist/services/pdfStamper.js.map +1 -0
  69. package/dist/services/qr.d.ts +20 -0
  70. package/dist/services/qr.js +44 -0
  71. package/dist/services/qr.js.map +1 -0
  72. package/dist/services/redis.d.ts +65 -0
  73. package/dist/services/redis.js +318 -0
  74. package/dist/services/redis.js.map +1 -0
  75. package/dist/services/scraper.d.ts +16 -0
  76. package/dist/services/scraper.js +138 -0
  77. package/dist/services/scraper.js.map +1 -0
  78. package/dist/services/storage.d.ts +38 -0
  79. package/dist/services/storage.js +123 -0
  80. package/dist/services/storage.js.map +1 -0
  81. package/dist/services/stripe.d.ts +32 -0
  82. package/dist/services/stripe.js +229 -0
  83. package/dist/services/stripe.js.map +1 -0
  84. package/dist/services/visualDiff.d.ts +33 -0
  85. package/dist/services/visualDiff.js +218 -0
  86. package/dist/services/visualDiff.js.map +1 -0
  87. package/package.json +74 -4
@@ -0,0 +1,422 @@
1
+ import { z } from 'zod';
2
+ export declare const PdfMarginSchema: z.ZodObject<{
3
+ top: z.ZodOptional<z.ZodString>;
4
+ bottom: z.ZodOptional<z.ZodString>;
5
+ left: z.ZodOptional<z.ZodString>;
6
+ right: z.ZodOptional<z.ZodString>;
7
+ }, "strip", z.ZodTypeAny, {
8
+ top?: string | undefined;
9
+ bottom?: string | undefined;
10
+ left?: string | undefined;
11
+ right?: string | undefined;
12
+ }, {
13
+ top?: string | undefined;
14
+ bottom?: string | undefined;
15
+ left?: string | undefined;
16
+ right?: string | undefined;
17
+ }>;
18
+ export declare const RenderPdfRequestSchema: z.ZodEffects<z.ZodObject<{
19
+ html: z.ZodOptional<z.ZodString>;
20
+ url: z.ZodOptional<z.ZodString>;
21
+ format: z.ZodDefault<z.ZodEnum<["A4", "Letter", "Legal"]>>;
22
+ landscape: z.ZodDefault<z.ZodBoolean>;
23
+ print_background: z.ZodDefault<z.ZodBoolean>;
24
+ margin: z.ZodOptional<z.ZodObject<{
25
+ top: z.ZodOptional<z.ZodString>;
26
+ bottom: z.ZodOptional<z.ZodString>;
27
+ left: z.ZodOptional<z.ZodString>;
28
+ right: z.ZodOptional<z.ZodString>;
29
+ }, "strip", z.ZodTypeAny, {
30
+ top?: string | undefined;
31
+ bottom?: string | undefined;
32
+ left?: string | undefined;
33
+ right?: string | undefined;
34
+ }, {
35
+ top?: string | undefined;
36
+ bottom?: string | undefined;
37
+ left?: string | undefined;
38
+ right?: string | undefined;
39
+ }>>;
40
+ display_header_footer: z.ZodOptional<z.ZodBoolean>;
41
+ header_html: z.ZodOptional<z.ZodString>;
42
+ footer_html: z.ZodOptional<z.ZodString>;
43
+ password: z.ZodOptional<z.ZodString>;
44
+ owner_password: z.ZodOptional<z.ZodString>;
45
+ wait_for: z.ZodOptional<z.ZodString>;
46
+ delay_ms: z.ZodOptional<z.ZodNumber>;
47
+ store: z.ZodDefault<z.ZodBoolean>;
48
+ expires_in: z.ZodDefault<z.ZodEnum<["1h", "24h", "7d"]>>;
49
+ }, "strip", z.ZodTypeAny, {
50
+ format: "A4" | "Letter" | "Legal";
51
+ landscape: boolean;
52
+ print_background: boolean;
53
+ store: boolean;
54
+ expires_in: "1h" | "24h" | "7d";
55
+ html?: string | undefined;
56
+ url?: string | undefined;
57
+ margin?: {
58
+ top?: string | undefined;
59
+ bottom?: string | undefined;
60
+ left?: string | undefined;
61
+ right?: string | undefined;
62
+ } | undefined;
63
+ display_header_footer?: boolean | undefined;
64
+ header_html?: string | undefined;
65
+ footer_html?: string | undefined;
66
+ password?: string | undefined;
67
+ owner_password?: string | undefined;
68
+ wait_for?: string | undefined;
69
+ delay_ms?: number | undefined;
70
+ }, {
71
+ html?: string | undefined;
72
+ url?: string | undefined;
73
+ format?: "A4" | "Letter" | "Legal" | undefined;
74
+ landscape?: boolean | undefined;
75
+ print_background?: boolean | undefined;
76
+ margin?: {
77
+ top?: string | undefined;
78
+ bottom?: string | undefined;
79
+ left?: string | undefined;
80
+ right?: string | undefined;
81
+ } | undefined;
82
+ display_header_footer?: boolean | undefined;
83
+ header_html?: string | undefined;
84
+ footer_html?: string | undefined;
85
+ password?: string | undefined;
86
+ owner_password?: string | undefined;
87
+ wait_for?: string | undefined;
88
+ delay_ms?: number | undefined;
89
+ store?: boolean | undefined;
90
+ expires_in?: "1h" | "24h" | "7d" | undefined;
91
+ }>, {
92
+ format: "A4" | "Letter" | "Legal";
93
+ landscape: boolean;
94
+ print_background: boolean;
95
+ store: boolean;
96
+ expires_in: "1h" | "24h" | "7d";
97
+ html?: string | undefined;
98
+ url?: string | undefined;
99
+ margin?: {
100
+ top?: string | undefined;
101
+ bottom?: string | undefined;
102
+ left?: string | undefined;
103
+ right?: string | undefined;
104
+ } | undefined;
105
+ display_header_footer?: boolean | undefined;
106
+ header_html?: string | undefined;
107
+ footer_html?: string | undefined;
108
+ password?: string | undefined;
109
+ owner_password?: string | undefined;
110
+ wait_for?: string | undefined;
111
+ delay_ms?: number | undefined;
112
+ }, {
113
+ html?: string | undefined;
114
+ url?: string | undefined;
115
+ format?: "A4" | "Letter" | "Legal" | undefined;
116
+ landscape?: boolean | undefined;
117
+ print_background?: boolean | undefined;
118
+ margin?: {
119
+ top?: string | undefined;
120
+ bottom?: string | undefined;
121
+ left?: string | undefined;
122
+ right?: string | undefined;
123
+ } | undefined;
124
+ display_header_footer?: boolean | undefined;
125
+ header_html?: string | undefined;
126
+ footer_html?: string | undefined;
127
+ password?: string | undefined;
128
+ owner_password?: string | undefined;
129
+ wait_for?: string | undefined;
130
+ delay_ms?: number | undefined;
131
+ store?: boolean | undefined;
132
+ expires_in?: "1h" | "24h" | "7d" | undefined;
133
+ }>;
134
+ export type RenderPdfRequest = z.input<typeof RenderPdfRequestSchema>;
135
+ export type RenderPdfOutput = z.infer<typeof RenderPdfRequestSchema>;
136
+ export declare const RenderImageRequestSchema: z.ZodEffects<z.ZodObject<{
137
+ html: z.ZodOptional<z.ZodString>;
138
+ url: z.ZodOptional<z.ZodString>;
139
+ width: z.ZodDefault<z.ZodNumber>;
140
+ height: z.ZodDefault<z.ZodNumber>;
141
+ type: z.ZodDefault<z.ZodEnum<["png", "jpeg"]>>;
142
+ wait_for: z.ZodOptional<z.ZodString>;
143
+ delay_ms: z.ZodOptional<z.ZodNumber>;
144
+ store: z.ZodDefault<z.ZodBoolean>;
145
+ expires_in: z.ZodDefault<z.ZodEnum<["1h", "24h", "7d"]>>;
146
+ }, "strip", z.ZodTypeAny, {
147
+ type: "png" | "jpeg";
148
+ store: boolean;
149
+ expires_in: "1h" | "24h" | "7d";
150
+ width: number;
151
+ height: number;
152
+ html?: string | undefined;
153
+ url?: string | undefined;
154
+ wait_for?: string | undefined;
155
+ delay_ms?: number | undefined;
156
+ }, {
157
+ type?: "png" | "jpeg" | undefined;
158
+ html?: string | undefined;
159
+ url?: string | undefined;
160
+ wait_for?: string | undefined;
161
+ delay_ms?: number | undefined;
162
+ store?: boolean | undefined;
163
+ expires_in?: "1h" | "24h" | "7d" | undefined;
164
+ width?: number | undefined;
165
+ height?: number | undefined;
166
+ }>, {
167
+ type: "png" | "jpeg";
168
+ store: boolean;
169
+ expires_in: "1h" | "24h" | "7d";
170
+ width: number;
171
+ height: number;
172
+ html?: string | undefined;
173
+ url?: string | undefined;
174
+ wait_for?: string | undefined;
175
+ delay_ms?: number | undefined;
176
+ }, {
177
+ type?: "png" | "jpeg" | undefined;
178
+ html?: string | undefined;
179
+ url?: string | undefined;
180
+ wait_for?: string | undefined;
181
+ delay_ms?: number | undefined;
182
+ store?: boolean | undefined;
183
+ expires_in?: "1h" | "24h" | "7d" | undefined;
184
+ width?: number | undefined;
185
+ height?: number | undefined;
186
+ }>;
187
+ export type RenderImageRequest = z.input<typeof RenderImageRequestSchema>;
188
+ export type RenderImageOutput = z.infer<typeof RenderImageRequestSchema>;
189
+ export declare const HostedFileResponseSchema: z.ZodObject<{
190
+ success: z.ZodBoolean;
191
+ hostedUrl: z.ZodString;
192
+ fileId: z.ZodString;
193
+ filename: z.ZodString;
194
+ mimeType: z.ZodString;
195
+ sizeBytes: z.ZodNumber;
196
+ expiresAt: z.ZodString;
197
+ }, "strip", z.ZodTypeAny, {
198
+ success: boolean;
199
+ hostedUrl: string;
200
+ fileId: string;
201
+ filename: string;
202
+ mimeType: string;
203
+ sizeBytes: number;
204
+ expiresAt: string;
205
+ }, {
206
+ success: boolean;
207
+ hostedUrl: string;
208
+ fileId: string;
209
+ filename: string;
210
+ mimeType: string;
211
+ sizeBytes: number;
212
+ expiresAt: string;
213
+ }>;
214
+ export type HostedFileResponse = z.infer<typeof HostedFileResponseSchema>;
215
+ export declare const EInvoicePartySchema: z.ZodObject<{
216
+ name: z.ZodString;
217
+ vatId: z.ZodOptional<z.ZodString>;
218
+ country: z.ZodDefault<z.ZodString>;
219
+ street: z.ZodOptional<z.ZodString>;
220
+ city: z.ZodOptional<z.ZodString>;
221
+ postcode: z.ZodOptional<z.ZodString>;
222
+ email: z.ZodOptional<z.ZodString>;
223
+ }, "strip", z.ZodTypeAny, {
224
+ name: string;
225
+ country: string;
226
+ vatId?: string | undefined;
227
+ street?: string | undefined;
228
+ city?: string | undefined;
229
+ postcode?: string | undefined;
230
+ email?: string | undefined;
231
+ }, {
232
+ name: string;
233
+ vatId?: string | undefined;
234
+ country?: string | undefined;
235
+ street?: string | undefined;
236
+ city?: string | undefined;
237
+ postcode?: string | undefined;
238
+ email?: string | undefined;
239
+ }>;
240
+ export declare const EInvoiceLineItemSchema: z.ZodObject<{
241
+ name: z.ZodString;
242
+ quantity: z.ZodNumber;
243
+ unitPrice: z.ZodNumber;
244
+ vatRate: z.ZodDefault<z.ZodNumber>;
245
+ }, "strip", z.ZodTypeAny, {
246
+ name: string;
247
+ quantity: number;
248
+ unitPrice: number;
249
+ vatRate: number;
250
+ }, {
251
+ name: string;
252
+ quantity: number;
253
+ unitPrice: number;
254
+ vatRate?: number | undefined;
255
+ }>;
256
+ export declare const RenderEInvoiceRequestSchema: z.ZodObject<{
257
+ invoiceNumber: z.ZodString;
258
+ issueDate: z.ZodOptional<z.ZodString>;
259
+ dueDate: z.ZodOptional<z.ZodString>;
260
+ currency: z.ZodDefault<z.ZodString>;
261
+ seller: z.ZodObject<{
262
+ name: z.ZodString;
263
+ vatId: z.ZodOptional<z.ZodString>;
264
+ country: z.ZodDefault<z.ZodString>;
265
+ street: z.ZodOptional<z.ZodString>;
266
+ city: z.ZodOptional<z.ZodString>;
267
+ postcode: z.ZodOptional<z.ZodString>;
268
+ email: z.ZodOptional<z.ZodString>;
269
+ }, "strip", z.ZodTypeAny, {
270
+ name: string;
271
+ country: string;
272
+ vatId?: string | undefined;
273
+ street?: string | undefined;
274
+ city?: string | undefined;
275
+ postcode?: string | undefined;
276
+ email?: string | undefined;
277
+ }, {
278
+ name: string;
279
+ vatId?: string | undefined;
280
+ country?: string | undefined;
281
+ street?: string | undefined;
282
+ city?: string | undefined;
283
+ postcode?: string | undefined;
284
+ email?: string | undefined;
285
+ }>;
286
+ buyer: z.ZodObject<{
287
+ name: z.ZodString;
288
+ vatId: z.ZodOptional<z.ZodString>;
289
+ country: z.ZodDefault<z.ZodString>;
290
+ street: z.ZodOptional<z.ZodString>;
291
+ city: z.ZodOptional<z.ZodString>;
292
+ postcode: z.ZodOptional<z.ZodString>;
293
+ email: z.ZodOptional<z.ZodString>;
294
+ }, "strip", z.ZodTypeAny, {
295
+ name: string;
296
+ country: string;
297
+ vatId?: string | undefined;
298
+ street?: string | undefined;
299
+ city?: string | undefined;
300
+ postcode?: string | undefined;
301
+ email?: string | undefined;
302
+ }, {
303
+ name: string;
304
+ vatId?: string | undefined;
305
+ country?: string | undefined;
306
+ street?: string | undefined;
307
+ city?: string | undefined;
308
+ postcode?: string | undefined;
309
+ email?: string | undefined;
310
+ }>;
311
+ lineItems: z.ZodArray<z.ZodObject<{
312
+ name: z.ZodString;
313
+ quantity: z.ZodNumber;
314
+ unitPrice: z.ZodNumber;
315
+ vatRate: z.ZodDefault<z.ZodNumber>;
316
+ }, "strip", z.ZodTypeAny, {
317
+ name: string;
318
+ quantity: number;
319
+ unitPrice: number;
320
+ vatRate: number;
321
+ }, {
322
+ name: string;
323
+ quantity: number;
324
+ unitPrice: number;
325
+ vatRate?: number | undefined;
326
+ }>, "many">;
327
+ paymentIban: z.ZodOptional<z.ZodString>;
328
+ paymentBic: z.ZodOptional<z.ZodString>;
329
+ notes: z.ZodOptional<z.ZodString>;
330
+ profile: z.ZodDefault<z.ZodEnum<["BASIC", "EN16931"]>>;
331
+ store: z.ZodDefault<z.ZodBoolean>;
332
+ expires_in: z.ZodDefault<z.ZodEnum<["1h", "24h", "7d"]>>;
333
+ }, "strip", z.ZodTypeAny, {
334
+ store: boolean;
335
+ expires_in: "1h" | "24h" | "7d";
336
+ invoiceNumber: string;
337
+ currency: string;
338
+ seller: {
339
+ name: string;
340
+ country: string;
341
+ vatId?: string | undefined;
342
+ street?: string | undefined;
343
+ city?: string | undefined;
344
+ postcode?: string | undefined;
345
+ email?: string | undefined;
346
+ };
347
+ buyer: {
348
+ name: string;
349
+ country: string;
350
+ vatId?: string | undefined;
351
+ street?: string | undefined;
352
+ city?: string | undefined;
353
+ postcode?: string | undefined;
354
+ email?: string | undefined;
355
+ };
356
+ lineItems: {
357
+ name: string;
358
+ quantity: number;
359
+ unitPrice: number;
360
+ vatRate: number;
361
+ }[];
362
+ profile: "BASIC" | "EN16931";
363
+ issueDate?: string | undefined;
364
+ dueDate?: string | undefined;
365
+ paymentIban?: string | undefined;
366
+ paymentBic?: string | undefined;
367
+ notes?: string | undefined;
368
+ }, {
369
+ invoiceNumber: string;
370
+ seller: {
371
+ name: string;
372
+ vatId?: string | undefined;
373
+ country?: string | undefined;
374
+ street?: string | undefined;
375
+ city?: string | undefined;
376
+ postcode?: string | undefined;
377
+ email?: string | undefined;
378
+ };
379
+ buyer: {
380
+ name: string;
381
+ vatId?: string | undefined;
382
+ country?: string | undefined;
383
+ street?: string | undefined;
384
+ city?: string | undefined;
385
+ postcode?: string | undefined;
386
+ email?: string | undefined;
387
+ };
388
+ lineItems: {
389
+ name: string;
390
+ quantity: number;
391
+ unitPrice: number;
392
+ vatRate?: number | undefined;
393
+ }[];
394
+ store?: boolean | undefined;
395
+ expires_in?: "1h" | "24h" | "7d" | undefined;
396
+ issueDate?: string | undefined;
397
+ dueDate?: string | undefined;
398
+ currency?: string | undefined;
399
+ paymentIban?: string | undefined;
400
+ paymentBic?: string | undefined;
401
+ notes?: string | undefined;
402
+ profile?: "BASIC" | "EN16931" | undefined;
403
+ }>;
404
+ export type RenderEInvoiceRequest = z.input<typeof RenderEInvoiceRequestSchema>;
405
+ export type RenderEInvoiceOutput = z.infer<typeof RenderEInvoiceRequestSchema>;
406
+ export declare const ErrorResponseSchema: z.ZodObject<{
407
+ statusCode: z.ZodNumber;
408
+ error: z.ZodString;
409
+ message: z.ZodString;
410
+ details: z.ZodOptional<z.ZodAny>;
411
+ }, "strip", z.ZodTypeAny, {
412
+ message: string;
413
+ statusCode: number;
414
+ error: string;
415
+ details?: any;
416
+ }, {
417
+ message: string;
418
+ statusCode: number;
419
+ error: string;
420
+ details?: any;
421
+ }>;
422
+ export type ErrorResponse = z.infer<typeof ErrorResponseSchema>;
@@ -0,0 +1,91 @@
1
+ import { z } from 'zod';
2
+ export const PdfMarginSchema = z.object({
3
+ top: z.string().optional().describe('Top margin with unit (e.g. 10mm, 0.5in, 20px)'),
4
+ bottom: z.string().optional().describe('Bottom margin with unit (e.g. 10mm, 0.5in, 20px)'),
5
+ left: z.string().optional().describe('Left margin with unit (e.g. 10mm, 0.5in, 20px)'),
6
+ right: z.string().optional().describe('Right margin with unit (e.g. 10mm, 0.5in, 20px)'),
7
+ }).describe('Page margins');
8
+ export const RenderPdfRequestSchema = z
9
+ .object({
10
+ html: z.string().optional().describe('HTML string with optional Tailwind CSS utility classes. Either html or url is required.'),
11
+ url: z.string().url().optional().describe('Direct web URL to render to PDF (e.g. https://example.com). Either html or url is required.'),
12
+ format: z.enum(['A4', 'Letter', 'Legal']).default('A4').describe('Paper format'),
13
+ landscape: z.boolean().default(false).describe('Whether to print in landscape orientation'),
14
+ print_background: z.boolean().default(true).describe('Whether to print background graphics and colors'),
15
+ margin: PdfMarginSchema.optional(),
16
+ display_header_footer: z.boolean().optional().describe('Whether to display header and footer. Automatically enabled if header_html or footer_html is provided.'),
17
+ header_html: z.string().optional().describe('HTML template for the print header. Must include font-size styling (e.g. font-size: 10px). Supports Chromium template classes: pageNumber, totalPages, date, title, url.'),
18
+ footer_html: z.string().optional().describe('HTML template for the print footer. Must include font-size styling (e.g. font-size: 10px). Supports Chromium template classes: pageNumber, totalPages, date, title, url.'),
19
+ password: z.string().min(1).max(128).optional().describe('Optional user password to encrypt the PDF with industry-standard AES-256 encryption.'),
20
+ owner_password: z.string().min(1).max(128).optional().describe('Optional owner password for PDF permission controls.'),
21
+ wait_for: z.string().max(256).optional().describe('CSS selector to wait for before rendering (e.g. "#chart-loaded", ".ready"). Maximum wait 5s.'),
22
+ delay_ms: z.coerce.number().int().min(0).max(5000).optional().describe('Additional delay in milliseconds before capturing (e.g. 500 for animations/charts to settle). Maximum 5000ms.'),
23
+ store: z.boolean().default(false).describe('If true, saves the rendered PDF to Tailprint hosted delivery and returns a public hostedUrl link.'),
24
+ expires_in: z.enum(['1h', '24h', '7d']).default('24h').describe('Expiration duration for the hosted link (1h, 24h, or 7d). Defaults to 24h.'),
25
+ })
26
+ .refine((data) => Boolean(data.html || data.url), {
27
+ message: 'Either "html" or "url" must be provided',
28
+ path: ['html'],
29
+ });
30
+ export const RenderImageRequestSchema = z
31
+ .object({
32
+ html: z.string().optional().describe('HTML string with optional Tailwind CSS utility classes. Either html or url is required.'),
33
+ url: z.string().url().optional().describe('Direct web URL to capture as image (e.g. https://example.com). Either html or url is required.'),
34
+ width: z.coerce.number().int().min(10).max(4000).default(1200).describe('Viewport and image width in pixels (e.g. 1200 for OG image)'),
35
+ height: z.coerce.number().int().min(10).max(4000).default(630).describe('Viewport and image height in pixels (e.g. 630 for OG image)'),
36
+ type: z.enum(['png', 'jpeg']).default('png').describe('Output image format'),
37
+ wait_for: z.string().max(256).optional().describe('CSS selector to wait for before rendering (e.g. "#chart-loaded", ".ready"). Maximum wait 5s.'),
38
+ delay_ms: z.coerce.number().int().min(0).max(5000).optional().describe('Additional delay in milliseconds before capturing (e.g. 500 for animations/charts to settle). Maximum 5000ms.'),
39
+ store: z.boolean().default(false).describe('If true, saves the rendered image to Tailprint hosted delivery and returns a public hostedUrl link.'),
40
+ expires_in: z.enum(['1h', '24h', '7d']).default('24h').describe('Expiration duration for the hosted link (1h, 24h, or 7d). Defaults to 24h.'),
41
+ })
42
+ .refine((data) => Boolean(data.html || data.url), {
43
+ message: 'Either "html" or "url" must be provided',
44
+ path: ['html'],
45
+ });
46
+ export const HostedFileResponseSchema = z.object({
47
+ success: z.boolean(),
48
+ hostedUrl: z.string().url().describe('Directly accessible public CDN/document link'),
49
+ fileId: z.string().describe('Unique secure identifier of the stored file'),
50
+ filename: z.string().describe('Original or assigned file name'),
51
+ mimeType: z.string().describe('MIME type of the stored document'),
52
+ sizeBytes: z.number().describe('File size in bytes'),
53
+ expiresAt: z.string().describe('ISO timestamp of expiration'),
54
+ });
55
+ export const EInvoicePartySchema = z.object({
56
+ name: z.string().min(1).describe('Company or person legal name'),
57
+ vatId: z.string().optional().describe('VAT ID / Tax identifier (e.g. DK12345678, DE987654321)'),
58
+ country: z.string().length(2).default('DK').describe('ISO 3166-1 alpha-2 country code (e.g. DK, DE, FR)'),
59
+ street: z.string().optional().describe('Street address and building number'),
60
+ city: z.string().optional().describe('City name'),
61
+ postcode: z.string().optional().describe('Postal code / ZIP code'),
62
+ email: z.string().email().optional().describe('Contact email address'),
63
+ });
64
+ export const EInvoiceLineItemSchema = z.object({
65
+ name: z.string().min(1).describe('Product or service description'),
66
+ quantity: z.number().positive().describe('Quantity of items or hours'),
67
+ unitPrice: z.number().nonnegative().describe('Unit price excluding VAT'),
68
+ vatRate: z.number().nonnegative().default(25).describe('VAT / Tax rate in percent (e.g. 25 for 25% VAT, 0 for exempt)'),
69
+ });
70
+ export const RenderEInvoiceRequestSchema = z.object({
71
+ invoiceNumber: z.string().min(1).describe('Unique invoice reference number (e.g. INV-2026-001)'),
72
+ issueDate: z.string().optional().describe('Invoice date (YYYY-MM-DD)'),
73
+ dueDate: z.string().optional().describe('Due payment date (YYYY-MM-DD)'),
74
+ currency: z.string().length(3).default('EUR').describe('ISO 4217 3-letter currency code (e.g. EUR, DKK, USD, SEK)'),
75
+ seller: EInvoicePartySchema.describe('Supplier / Seller billing details'),
76
+ buyer: EInvoicePartySchema.describe('Customer / Buyer billing details'),
77
+ lineItems: z.array(EInvoiceLineItemSchema).min(1).describe('Line items to bill'),
78
+ paymentIban: z.string().optional().describe('Bank transfer IBAN number'),
79
+ paymentBic: z.string().optional().describe('Bank BIC / SWIFT code'),
80
+ notes: z.string().optional().describe('Optional payment terms or invoice notes'),
81
+ profile: z.enum(['BASIC', 'EN16931']).default('BASIC').describe('Factur-X / ZUGFeRD profile compliance level'),
82
+ store: z.boolean().default(false).describe('If true, returns hosted CDN URL in JSON response; if false, returns binary hybrid PDF'),
83
+ expires_in: z.enum(['1h', '24h', '7d']).default('24h').describe('Expiration duration if store is true'),
84
+ });
85
+ export const ErrorResponseSchema = z.object({
86
+ statusCode: z.number().describe('HTTP status code'),
87
+ error: z.string().describe('Error name / status title'),
88
+ message: z.string().describe('Descriptive error message'),
89
+ details: z.any().optional().describe('Optional validation or error details'),
90
+ });
91
+ //# sourceMappingURL=render.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"render.js","sourceRoot":"","sources":["../../src/schemas/render.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,65 @@
1
+ import { z } from 'zod';
2
+ export declare const ScrapeMarkdownRequestSchema: z.ZodObject<{
3
+ url: z.ZodString;
4
+ wait_for: z.ZodOptional<z.ZodString>;
5
+ strip_images: z.ZodDefault<z.ZodBoolean>;
6
+ include_raw_html: z.ZodDefault<z.ZodBoolean>;
7
+ timeout_ms: z.ZodDefault<z.ZodNumber>;
8
+ }, "strip", z.ZodTypeAny, {
9
+ url: string;
10
+ strip_images: boolean;
11
+ include_raw_html: boolean;
12
+ timeout_ms: number;
13
+ wait_for?: string | undefined;
14
+ }, {
15
+ url: string;
16
+ wait_for?: string | undefined;
17
+ strip_images?: boolean | undefined;
18
+ include_raw_html?: boolean | undefined;
19
+ timeout_ms?: number | undefined;
20
+ }>;
21
+ export type ScrapeMarkdownRequest = z.infer<typeof ScrapeMarkdownRequestSchema>;
22
+ export declare const ScrapeMarkdownResponseSchema: z.ZodObject<{
23
+ url: z.ZodString;
24
+ title: z.ZodString;
25
+ byline: z.ZodNullable<z.ZodString>;
26
+ published_at: z.ZodNullable<z.ZodString>;
27
+ description: z.ZodNullable<z.ZodString>;
28
+ markdown: z.ZodString;
29
+ word_count: z.ZodNumber;
30
+ estimated_tokens: z.ZodNumber;
31
+ raw_content_bytes: z.ZodNumber;
32
+ markdown_bytes: z.ZodNumber;
33
+ token_savings_percent: z.ZodString;
34
+ cached: z.ZodBoolean;
35
+ raw_html: z.ZodOptional<z.ZodString>;
36
+ }, "strip", z.ZodTypeAny, {
37
+ url: string;
38
+ title: string;
39
+ description: string | null;
40
+ byline: string | null;
41
+ published_at: string | null;
42
+ markdown: string;
43
+ word_count: number;
44
+ estimated_tokens: number;
45
+ raw_content_bytes: number;
46
+ markdown_bytes: number;
47
+ token_savings_percent: string;
48
+ cached: boolean;
49
+ raw_html?: string | undefined;
50
+ }, {
51
+ url: string;
52
+ title: string;
53
+ description: string | null;
54
+ byline: string | null;
55
+ published_at: string | null;
56
+ markdown: string;
57
+ word_count: number;
58
+ estimated_tokens: number;
59
+ raw_content_bytes: number;
60
+ markdown_bytes: number;
61
+ token_savings_percent: string;
62
+ cached: boolean;
63
+ raw_html?: string | undefined;
64
+ }>;
65
+ export type ScrapeMarkdownResponse = z.infer<typeof ScrapeMarkdownResponseSchema>;
@@ -0,0 +1,24 @@
1
+ import { z } from 'zod';
2
+ export const ScrapeMarkdownRequestSchema = z.object({
3
+ url: z.string().url('A valid http or https URL is required').describe('Target web page URL to scrape and convert to LLM-ready markdown'),
4
+ wait_for: z.string().optional().describe('Optional CSS selector to wait for before extracting content (e.g. "article", ".main-content")'),
5
+ strip_images: z.boolean().default(true).describe('Whether to remove image links and tags from generated markdown (recommended to save tokens)'),
6
+ include_raw_html: z.boolean().default(false).describe('Whether to include the unparsed raw HTML string in the response'),
7
+ timeout_ms: z.coerce.number().int().min(1000).max(15000).default(8000).describe('Hard network and render timeout in milliseconds'),
8
+ });
9
+ export const ScrapeMarkdownResponseSchema = z.object({
10
+ url: z.string().url().describe('The resolved final URL'),
11
+ title: z.string().describe('Extracted page or article title'),
12
+ byline: z.string().nullable().describe('Extracted author or publisher name if detected'),
13
+ published_at: z.string().nullable().describe('Publication date ISO string if detected'),
14
+ description: z.string().nullable().describe('Meta description or summary excerpt'),
15
+ markdown: z.string().describe('Clean, structured Markdown formatted for LLM prompts, RAG context, or agents'),
16
+ word_count: z.number().int().describe('Total word count in cleaned markdown'),
17
+ estimated_tokens: z.number().int().describe('Estimated LLM token count (~1.3 tokens per word)'),
18
+ raw_content_bytes: z.number().int().describe('Raw HTML payload size in bytes before cleaning'),
19
+ markdown_bytes: z.number().int().describe('Cleaned Markdown payload size in bytes'),
20
+ token_savings_percent: z.string().describe('Percentage of token payload saved compared to raw HTML (e.g. "94.2%")'),
21
+ cached: z.boolean().describe('Whether this response was served from the Redis deduplication cache'),
22
+ raw_html: z.string().optional().describe('Raw HTML if include_raw_html was true'),
23
+ });
24
+ //# sourceMappingURL=scrape.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"scrape.js","sourceRoot":"","sources":["../../src/schemas/scrape.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,CAAC,EAAE,MAAM,KAAK,CAAC;AAExB,MAAM,CAAC,MAAM,2BAA2B,GAAG,CAAC,CAAC,MAAM,CAAC;IAClD,GAAG,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,GAAG,CAAC,uCAAuC,CAAC,CAAC,QAAQ,CAAC,iEAAiE,CAAC;IACxI,QAAQ,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,QAAQ,EAAE,CAAC,QAAQ,CAAC,+FAA+F,CAAC;IACzI,YAAY,EAAE,CAAC,CAAC,OAAO,EAAE,CAAC,OAAO,CAAC,IAAI,CAAC,CAAC,QAAQ,CAAC,6FAA6F,CAAC;IAC/I,gBAAgB,EAAE,CAAC,CAAC,OAAO,EAAE,CAAC,OAAO,CAAC,KAAK,CAAC,CAAC,QAAQ,CAAC,iEAAiE,CAAC;IACxH,UAAU,EAAE,CAAC,CAAC,MAAM,CAAC,MAAM,EAAE,CAAC,GAAG,EAAE,CAAC,GAAG,CAAC,IAAI,CAAC,CAAC,GAAG,CAAC,KAAK,CAAC,CAAC,OAAO,CAAC,IAAI,CAAC,CAAC,QAAQ,CAAC,iDAAiD,CAAC;CACnI,CAAC,CAAC;AAIH,MAAM,CAAC,MAAM,4BAA4B,GAAG,CAAC,CAAC,MAAM,CAAC;IACnD,GAAG,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,GAAG,EAAE,CAAC,QAAQ,CAAC,wBAAwB,CAAC;IACxD,KAAK,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,QAAQ,CAAC,iCAAiC,CAAC;IAC7D,MAAM,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,QAAQ,EAAE,CAAC,QAAQ,CAAC,gDAAgD,CAAC;IACxF,YAAY,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,QAAQ,EAAE,CAAC,QAAQ,CAAC,yCAAyC,CAAC;IACvF,WAAW,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,QAAQ,EAAE,CAAC,QAAQ,CAAC,qCAAqC,CAAC;IAClF,QAAQ,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,QAAQ,CAAC,8EAA8E,CAAC;IAC7G,UAAU,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,GAAG,EAAE,CAAC,QAAQ,CAAC,sCAAsC,CAAC;IAC7E,gBAAgB,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,GAAG,EAAE,CAAC,QAAQ,CAAC,kDAAkD,CAAC;IAC/F,iBAAiB,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,GAAG,EAAE,CAAC,QAAQ,CAAC,gDAAgD,CAAC;IAC9F,cAAc,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,GAAG,EAAE,CAAC,QAAQ,CAAC,wCAAwC,CAAC;IACnF,qBAAqB,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,QAAQ,CAAC,uEAAuE,CAAC;IACnH,MAAM,EAAE,CAAC,CAAC,OAAO,EAAE,CAAC,QAAQ,CAAC,qEAAqE,CAAC;IACnG,QAAQ,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,QAAQ,EAAE,CAAC,QAAQ,CAAC,uCAAuC,CAAC;CAClF,CAAC,CAAC"}
@@ -0,0 +1,2 @@
1
+ import { type FastifyInstance } from 'fastify';
2
+ export declare function buildApp(): Promise<FastifyInstance>;