@develemit/commerce-server 0.0.0-stage → 0.2.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.
@@ -0,0 +1,1501 @@
1
+ import { FastifyRequest, FastifyPluginAsync } from 'fastify';
2
+ import { Readable } from 'node:stream';
3
+ import { NodePgDatabase } from 'drizzle-orm/node-postgres';
4
+ import * as drizzle_orm_pg_core from 'drizzle-orm/pg-core';
5
+ import { OrderDetail, OrderRefund } from '@develemit/commerce-contracts';
6
+ import Stripe from 'stripe';
7
+
8
+ declare const commerceSchema: {
9
+ products: drizzle_orm_pg_core.PgTableWithColumns<{
10
+ name: "commerce_products";
11
+ schema: undefined;
12
+ columns: {
13
+ id: drizzle_orm_pg_core.PgColumn<{
14
+ name: "id";
15
+ tableName: "commerce_products";
16
+ dataType: "string";
17
+ columnType: "PgUUID";
18
+ data: string;
19
+ driverParam: string;
20
+ notNull: true;
21
+ hasDefault: true;
22
+ isPrimaryKey: true;
23
+ isAutoincrement: false;
24
+ hasRuntimeDefault: false;
25
+ enumValues: undefined;
26
+ baseColumn: never;
27
+ identity: undefined;
28
+ generated: undefined;
29
+ }, {}, {}>;
30
+ slug: drizzle_orm_pg_core.PgColumn<{
31
+ name: "slug";
32
+ tableName: "commerce_products";
33
+ dataType: "string";
34
+ columnType: "PgText";
35
+ data: string;
36
+ driverParam: string;
37
+ notNull: true;
38
+ hasDefault: false;
39
+ isPrimaryKey: false;
40
+ isAutoincrement: false;
41
+ hasRuntimeDefault: false;
42
+ enumValues: [string, ...string[]];
43
+ baseColumn: never;
44
+ identity: undefined;
45
+ generated: undefined;
46
+ }, {}, {}>;
47
+ name: drizzle_orm_pg_core.PgColumn<{
48
+ name: "name";
49
+ tableName: "commerce_products";
50
+ dataType: "string";
51
+ columnType: "PgText";
52
+ data: string;
53
+ driverParam: string;
54
+ notNull: true;
55
+ hasDefault: false;
56
+ isPrimaryKey: false;
57
+ isAutoincrement: false;
58
+ hasRuntimeDefault: false;
59
+ enumValues: [string, ...string[]];
60
+ baseColumn: never;
61
+ identity: undefined;
62
+ generated: undefined;
63
+ }, {}, {}>;
64
+ description: drizzle_orm_pg_core.PgColumn<{
65
+ name: "description";
66
+ tableName: "commerce_products";
67
+ dataType: "string";
68
+ columnType: "PgText";
69
+ data: string;
70
+ driverParam: string;
71
+ notNull: true;
72
+ hasDefault: true;
73
+ isPrimaryKey: false;
74
+ isAutoincrement: false;
75
+ hasRuntimeDefault: false;
76
+ enumValues: [string, ...string[]];
77
+ baseColumn: never;
78
+ identity: undefined;
79
+ generated: undefined;
80
+ }, {}, {}>;
81
+ materials: drizzle_orm_pg_core.PgColumn<{
82
+ name: "materials";
83
+ tableName: "commerce_products";
84
+ dataType: "string";
85
+ columnType: "PgText";
86
+ data: string;
87
+ driverParam: string;
88
+ notNull: false;
89
+ hasDefault: false;
90
+ isPrimaryKey: false;
91
+ isAutoincrement: false;
92
+ hasRuntimeDefault: false;
93
+ enumValues: [string, ...string[]];
94
+ baseColumn: never;
95
+ identity: undefined;
96
+ generated: undefined;
97
+ }, {}, {}>;
98
+ dimensions: drizzle_orm_pg_core.PgColumn<{
99
+ name: "dimensions";
100
+ tableName: "commerce_products";
101
+ dataType: "string";
102
+ columnType: "PgText";
103
+ data: string;
104
+ driverParam: string;
105
+ notNull: false;
106
+ hasDefault: false;
107
+ isPrimaryKey: false;
108
+ isAutoincrement: false;
109
+ hasRuntimeDefault: false;
110
+ enumValues: [string, ...string[]];
111
+ baseColumn: never;
112
+ identity: undefined;
113
+ generated: undefined;
114
+ }, {}, {}>;
115
+ priceCents: drizzle_orm_pg_core.PgColumn<{
116
+ name: "price_cents";
117
+ tableName: "commerce_products";
118
+ dataType: "number";
119
+ columnType: "PgInteger";
120
+ data: number;
121
+ driverParam: string | number;
122
+ notNull: true;
123
+ hasDefault: false;
124
+ isPrimaryKey: false;
125
+ isAutoincrement: false;
126
+ hasRuntimeDefault: false;
127
+ enumValues: undefined;
128
+ baseColumn: never;
129
+ identity: undefined;
130
+ generated: undefined;
131
+ }, {}, {}>;
132
+ currency: drizzle_orm_pg_core.PgColumn<{
133
+ name: "currency";
134
+ tableName: "commerce_products";
135
+ dataType: "string";
136
+ columnType: "PgText";
137
+ data: string;
138
+ driverParam: string;
139
+ notNull: true;
140
+ hasDefault: false;
141
+ isPrimaryKey: false;
142
+ isAutoincrement: false;
143
+ hasRuntimeDefault: false;
144
+ enumValues: [string, ...string[]];
145
+ baseColumn: never;
146
+ identity: undefined;
147
+ generated: undefined;
148
+ }, {}, {}>;
149
+ category: drizzle_orm_pg_core.PgColumn<{
150
+ name: "category";
151
+ tableName: "commerce_products";
152
+ dataType: "string";
153
+ columnType: "PgText";
154
+ data: string;
155
+ driverParam: string;
156
+ notNull: true;
157
+ hasDefault: false;
158
+ isPrimaryKey: false;
159
+ isAutoincrement: false;
160
+ hasRuntimeDefault: false;
161
+ enumValues: [string, ...string[]];
162
+ baseColumn: never;
163
+ identity: undefined;
164
+ generated: undefined;
165
+ }, {}, {}>;
166
+ quantity: drizzle_orm_pg_core.PgColumn<{
167
+ name: "quantity";
168
+ tableName: "commerce_products";
169
+ dataType: "number";
170
+ columnType: "PgInteger";
171
+ data: number;
172
+ driverParam: string | number;
173
+ notNull: true;
174
+ hasDefault: true;
175
+ isPrimaryKey: false;
176
+ isAutoincrement: false;
177
+ hasRuntimeDefault: false;
178
+ enumValues: undefined;
179
+ baseColumn: never;
180
+ identity: undefined;
181
+ generated: undefined;
182
+ }, {}, {}>;
183
+ status: drizzle_orm_pg_core.PgColumn<{
184
+ name: "status";
185
+ tableName: "commerce_products";
186
+ dataType: "string";
187
+ columnType: "PgEnumColumn";
188
+ data: "draft" | "active" | "archived";
189
+ driverParam: string;
190
+ notNull: true;
191
+ hasDefault: true;
192
+ isPrimaryKey: false;
193
+ isAutoincrement: false;
194
+ hasRuntimeDefault: false;
195
+ enumValues: ["draft", "active", "archived"];
196
+ baseColumn: never;
197
+ identity: undefined;
198
+ generated: undefined;
199
+ }, {}, {}>;
200
+ featured: drizzle_orm_pg_core.PgColumn<{
201
+ name: "featured";
202
+ tableName: "commerce_products";
203
+ dataType: "boolean";
204
+ columnType: "PgBoolean";
205
+ data: boolean;
206
+ driverParam: boolean;
207
+ notNull: true;
208
+ hasDefault: true;
209
+ isPrimaryKey: false;
210
+ isAutoincrement: false;
211
+ hasRuntimeDefault: false;
212
+ enumValues: undefined;
213
+ baseColumn: never;
214
+ identity: undefined;
215
+ generated: undefined;
216
+ }, {}, {}>;
217
+ createdAt: drizzle_orm_pg_core.PgColumn<{
218
+ name: "created_at";
219
+ tableName: "commerce_products";
220
+ dataType: "date";
221
+ columnType: "PgTimestamp";
222
+ data: Date;
223
+ driverParam: string;
224
+ notNull: true;
225
+ hasDefault: true;
226
+ isPrimaryKey: false;
227
+ isAutoincrement: false;
228
+ hasRuntimeDefault: false;
229
+ enumValues: undefined;
230
+ baseColumn: never;
231
+ identity: undefined;
232
+ generated: undefined;
233
+ }, {}, {}>;
234
+ updatedAt: drizzle_orm_pg_core.PgColumn<{
235
+ name: "updated_at";
236
+ tableName: "commerce_products";
237
+ dataType: "date";
238
+ columnType: "PgTimestamp";
239
+ data: Date;
240
+ driverParam: string;
241
+ notNull: true;
242
+ hasDefault: true;
243
+ isPrimaryKey: false;
244
+ isAutoincrement: false;
245
+ hasRuntimeDefault: false;
246
+ enumValues: undefined;
247
+ baseColumn: never;
248
+ identity: undefined;
249
+ generated: undefined;
250
+ }, {}, {}>;
251
+ };
252
+ dialect: "pg";
253
+ }>;
254
+ productImages: drizzle_orm_pg_core.PgTableWithColumns<{
255
+ name: "commerce_product_images";
256
+ schema: undefined;
257
+ columns: {
258
+ id: drizzle_orm_pg_core.PgColumn<{
259
+ name: "id";
260
+ tableName: "commerce_product_images";
261
+ dataType: "string";
262
+ columnType: "PgUUID";
263
+ data: string;
264
+ driverParam: string;
265
+ notNull: true;
266
+ hasDefault: true;
267
+ isPrimaryKey: true;
268
+ isAutoincrement: false;
269
+ hasRuntimeDefault: false;
270
+ enumValues: undefined;
271
+ baseColumn: never;
272
+ identity: undefined;
273
+ generated: undefined;
274
+ }, {}, {}>;
275
+ productId: drizzle_orm_pg_core.PgColumn<{
276
+ name: "product_id";
277
+ tableName: "commerce_product_images";
278
+ dataType: "string";
279
+ columnType: "PgUUID";
280
+ data: string;
281
+ driverParam: string;
282
+ notNull: true;
283
+ hasDefault: false;
284
+ isPrimaryKey: false;
285
+ isAutoincrement: false;
286
+ hasRuntimeDefault: false;
287
+ enumValues: undefined;
288
+ baseColumn: never;
289
+ identity: undefined;
290
+ generated: undefined;
291
+ }, {}, {}>;
292
+ url: drizzle_orm_pg_core.PgColumn<{
293
+ name: "url";
294
+ tableName: "commerce_product_images";
295
+ dataType: "string";
296
+ columnType: "PgText";
297
+ data: string;
298
+ driverParam: string;
299
+ notNull: true;
300
+ hasDefault: false;
301
+ isPrimaryKey: false;
302
+ isAutoincrement: false;
303
+ hasRuntimeDefault: false;
304
+ enumValues: [string, ...string[]];
305
+ baseColumn: never;
306
+ identity: undefined;
307
+ generated: undefined;
308
+ }, {}, {}>;
309
+ alt: drizzle_orm_pg_core.PgColumn<{
310
+ name: "alt";
311
+ tableName: "commerce_product_images";
312
+ dataType: "string";
313
+ columnType: "PgText";
314
+ data: string;
315
+ driverParam: string;
316
+ notNull: true;
317
+ hasDefault: true;
318
+ isPrimaryKey: false;
319
+ isAutoincrement: false;
320
+ hasRuntimeDefault: false;
321
+ enumValues: [string, ...string[]];
322
+ baseColumn: never;
323
+ identity: undefined;
324
+ generated: undefined;
325
+ }, {}, {}>;
326
+ storageKey: drizzle_orm_pg_core.PgColumn<{
327
+ name: "storage_key";
328
+ tableName: "commerce_product_images";
329
+ dataType: "string";
330
+ columnType: "PgText";
331
+ data: string;
332
+ driverParam: string;
333
+ notNull: false;
334
+ hasDefault: false;
335
+ isPrimaryKey: false;
336
+ isAutoincrement: false;
337
+ hasRuntimeDefault: false;
338
+ enumValues: [string, ...string[]];
339
+ baseColumn: never;
340
+ identity: undefined;
341
+ generated: undefined;
342
+ }, {}, {}>;
343
+ position: drizzle_orm_pg_core.PgColumn<{
344
+ name: "position";
345
+ tableName: "commerce_product_images";
346
+ dataType: "number";
347
+ columnType: "PgInteger";
348
+ data: number;
349
+ driverParam: string | number;
350
+ notNull: true;
351
+ hasDefault: true;
352
+ isPrimaryKey: false;
353
+ isAutoincrement: false;
354
+ hasRuntimeDefault: false;
355
+ enumValues: undefined;
356
+ baseColumn: never;
357
+ identity: undefined;
358
+ generated: undefined;
359
+ }, {}, {}>;
360
+ };
361
+ dialect: "pg";
362
+ }>;
363
+ productStatus: drizzle_orm_pg_core.PgEnum<["draft", "active", "archived"]>;
364
+ inventoryHolds: drizzle_orm_pg_core.PgTableWithColumns<{
365
+ name: "commerce_inventory_holds";
366
+ schema: undefined;
367
+ columns: {
368
+ id: drizzle_orm_pg_core.PgColumn<{
369
+ name: "id";
370
+ tableName: "commerce_inventory_holds";
371
+ dataType: "string";
372
+ columnType: "PgUUID";
373
+ data: string;
374
+ driverParam: string;
375
+ notNull: true;
376
+ hasDefault: true;
377
+ isPrimaryKey: true;
378
+ isAutoincrement: false;
379
+ hasRuntimeDefault: false;
380
+ enumValues: undefined;
381
+ baseColumn: never;
382
+ identity: undefined;
383
+ generated: undefined;
384
+ }, {}, {}>;
385
+ productId: drizzle_orm_pg_core.PgColumn<{
386
+ name: "product_id";
387
+ tableName: "commerce_inventory_holds";
388
+ dataType: "string";
389
+ columnType: "PgUUID";
390
+ data: string;
391
+ driverParam: string;
392
+ notNull: true;
393
+ hasDefault: false;
394
+ isPrimaryKey: false;
395
+ isAutoincrement: false;
396
+ hasRuntimeDefault: false;
397
+ enumValues: undefined;
398
+ baseColumn: never;
399
+ identity: undefined;
400
+ generated: undefined;
401
+ }, {}, {}>;
402
+ quantity: drizzle_orm_pg_core.PgColumn<{
403
+ name: "quantity";
404
+ tableName: "commerce_inventory_holds";
405
+ dataType: "number";
406
+ columnType: "PgInteger";
407
+ data: number;
408
+ driverParam: string | number;
409
+ notNull: true;
410
+ hasDefault: false;
411
+ isPrimaryKey: false;
412
+ isAutoincrement: false;
413
+ hasRuntimeDefault: false;
414
+ enumValues: undefined;
415
+ baseColumn: never;
416
+ identity: undefined;
417
+ generated: undefined;
418
+ }, {}, {}>;
419
+ reference: drizzle_orm_pg_core.PgColumn<{
420
+ name: "reference";
421
+ tableName: "commerce_inventory_holds";
422
+ dataType: "string";
423
+ columnType: "PgText";
424
+ data: string;
425
+ driverParam: string;
426
+ notNull: true;
427
+ hasDefault: false;
428
+ isPrimaryKey: false;
429
+ isAutoincrement: false;
430
+ hasRuntimeDefault: false;
431
+ enumValues: [string, ...string[]];
432
+ baseColumn: never;
433
+ identity: undefined;
434
+ generated: undefined;
435
+ }, {}, {}>;
436
+ expiresAt: drizzle_orm_pg_core.PgColumn<{
437
+ name: "expires_at";
438
+ tableName: "commerce_inventory_holds";
439
+ dataType: "date";
440
+ columnType: "PgTimestamp";
441
+ data: Date;
442
+ driverParam: string;
443
+ notNull: true;
444
+ hasDefault: false;
445
+ isPrimaryKey: false;
446
+ isAutoincrement: false;
447
+ hasRuntimeDefault: false;
448
+ enumValues: undefined;
449
+ baseColumn: never;
450
+ identity: undefined;
451
+ generated: undefined;
452
+ }, {}, {}>;
453
+ status: drizzle_orm_pg_core.PgColumn<{
454
+ name: "status";
455
+ tableName: "commerce_inventory_holds";
456
+ dataType: "string";
457
+ columnType: "PgEnumColumn";
458
+ data: "active" | "released" | "committed";
459
+ driverParam: string;
460
+ notNull: true;
461
+ hasDefault: true;
462
+ isPrimaryKey: false;
463
+ isAutoincrement: false;
464
+ hasRuntimeDefault: false;
465
+ enumValues: ["active", "released", "committed"];
466
+ baseColumn: never;
467
+ identity: undefined;
468
+ generated: undefined;
469
+ }, {}, {}>;
470
+ createdAt: drizzle_orm_pg_core.PgColumn<{
471
+ name: "created_at";
472
+ tableName: "commerce_inventory_holds";
473
+ dataType: "date";
474
+ columnType: "PgTimestamp";
475
+ data: Date;
476
+ driverParam: string;
477
+ notNull: true;
478
+ hasDefault: true;
479
+ isPrimaryKey: false;
480
+ isAutoincrement: false;
481
+ hasRuntimeDefault: false;
482
+ enumValues: undefined;
483
+ baseColumn: never;
484
+ identity: undefined;
485
+ generated: undefined;
486
+ }, {}, {}>;
487
+ };
488
+ dialect: "pg";
489
+ }>;
490
+ holdStatus: drizzle_orm_pg_core.PgEnum<["active", "released", "committed"]>;
491
+ orders: drizzle_orm_pg_core.PgTableWithColumns<{
492
+ name: "commerce_orders";
493
+ schema: undefined;
494
+ columns: {
495
+ id: drizzle_orm_pg_core.PgColumn<{
496
+ name: "id";
497
+ tableName: "commerce_orders";
498
+ dataType: "string";
499
+ columnType: "PgUUID";
500
+ data: string;
501
+ driverParam: string;
502
+ notNull: true;
503
+ hasDefault: false;
504
+ isPrimaryKey: true;
505
+ isAutoincrement: false;
506
+ hasRuntimeDefault: false;
507
+ enumValues: undefined;
508
+ baseColumn: never;
509
+ identity: undefined;
510
+ generated: undefined;
511
+ }, {}, {}>;
512
+ status: drizzle_orm_pg_core.PgColumn<{
513
+ name: "status";
514
+ tableName: "commerce_orders";
515
+ dataType: "string";
516
+ columnType: "PgEnumColumn";
517
+ data: "pending" | "paid" | "shipped" | "cancelled" | "expired" | "needs_attention" | "refunded";
518
+ driverParam: string;
519
+ notNull: true;
520
+ hasDefault: true;
521
+ isPrimaryKey: false;
522
+ isAutoincrement: false;
523
+ hasRuntimeDefault: false;
524
+ enumValues: ["pending", "paid", "shipped", "cancelled", "expired", "needs_attention", "refunded"];
525
+ baseColumn: never;
526
+ identity: undefined;
527
+ generated: undefined;
528
+ }, {}, {}>;
529
+ email: drizzle_orm_pg_core.PgColumn<{
530
+ name: "email";
531
+ tableName: "commerce_orders";
532
+ dataType: "string";
533
+ columnType: "PgText";
534
+ data: string;
535
+ driverParam: string;
536
+ notNull: false;
537
+ hasDefault: false;
538
+ isPrimaryKey: false;
539
+ isAutoincrement: false;
540
+ hasRuntimeDefault: false;
541
+ enumValues: [string, ...string[]];
542
+ baseColumn: never;
543
+ identity: undefined;
544
+ generated: undefined;
545
+ }, {}, {}>;
546
+ subtotalCents: drizzle_orm_pg_core.PgColumn<{
547
+ name: "subtotal_cents";
548
+ tableName: "commerce_orders";
549
+ dataType: "number";
550
+ columnType: "PgInteger";
551
+ data: number;
552
+ driverParam: string | number;
553
+ notNull: true;
554
+ hasDefault: false;
555
+ isPrimaryKey: false;
556
+ isAutoincrement: false;
557
+ hasRuntimeDefault: false;
558
+ enumValues: undefined;
559
+ baseColumn: never;
560
+ identity: undefined;
561
+ generated: undefined;
562
+ }, {}, {}>;
563
+ shippingCents: drizzle_orm_pg_core.PgColumn<{
564
+ name: "shipping_cents";
565
+ tableName: "commerce_orders";
566
+ dataType: "number";
567
+ columnType: "PgInteger";
568
+ data: number;
569
+ driverParam: string | number;
570
+ notNull: true;
571
+ hasDefault: true;
572
+ isPrimaryKey: false;
573
+ isAutoincrement: false;
574
+ hasRuntimeDefault: false;
575
+ enumValues: undefined;
576
+ baseColumn: never;
577
+ identity: undefined;
578
+ generated: undefined;
579
+ }, {}, {}>;
580
+ shippingLabel: drizzle_orm_pg_core.PgColumn<{
581
+ name: "shipping_label";
582
+ tableName: "commerce_orders";
583
+ dataType: "string";
584
+ columnType: "PgText";
585
+ data: string;
586
+ driverParam: string;
587
+ notNull: false;
588
+ hasDefault: false;
589
+ isPrimaryKey: false;
590
+ isAutoincrement: false;
591
+ hasRuntimeDefault: false;
592
+ enumValues: [string, ...string[]];
593
+ baseColumn: never;
594
+ identity: undefined;
595
+ generated: undefined;
596
+ }, {}, {}>;
597
+ currency: drizzle_orm_pg_core.PgColumn<{
598
+ name: "currency";
599
+ tableName: "commerce_orders";
600
+ dataType: "string";
601
+ columnType: "PgText";
602
+ data: string;
603
+ driverParam: string;
604
+ notNull: true;
605
+ hasDefault: false;
606
+ isPrimaryKey: false;
607
+ isAutoincrement: false;
608
+ hasRuntimeDefault: false;
609
+ enumValues: [string, ...string[]];
610
+ baseColumn: never;
611
+ identity: undefined;
612
+ generated: undefined;
613
+ }, {}, {}>;
614
+ checkoutSessionId: drizzle_orm_pg_core.PgColumn<{
615
+ name: "checkout_session_id";
616
+ tableName: "commerce_orders";
617
+ dataType: "string";
618
+ columnType: "PgText";
619
+ data: string;
620
+ driverParam: string;
621
+ notNull: false;
622
+ hasDefault: false;
623
+ isPrimaryKey: false;
624
+ isAutoincrement: false;
625
+ hasRuntimeDefault: false;
626
+ enumValues: [string, ...string[]];
627
+ baseColumn: never;
628
+ identity: undefined;
629
+ generated: undefined;
630
+ }, {}, {}>;
631
+ shippingAddress: drizzle_orm_pg_core.PgColumn<{
632
+ name: "shipping_address";
633
+ tableName: "commerce_orders";
634
+ dataType: "json";
635
+ columnType: "PgJsonb";
636
+ data: unknown;
637
+ driverParam: unknown;
638
+ notNull: false;
639
+ hasDefault: false;
640
+ isPrimaryKey: false;
641
+ isAutoincrement: false;
642
+ hasRuntimeDefault: false;
643
+ enumValues: undefined;
644
+ baseColumn: never;
645
+ identity: undefined;
646
+ generated: undefined;
647
+ }, {}, {}>;
648
+ fulfillmentCarrier: drizzle_orm_pg_core.PgColumn<{
649
+ name: "fulfillment_carrier";
650
+ tableName: "commerce_orders";
651
+ dataType: "string";
652
+ columnType: "PgText";
653
+ data: string;
654
+ driverParam: string;
655
+ notNull: false;
656
+ hasDefault: false;
657
+ isPrimaryKey: false;
658
+ isAutoincrement: false;
659
+ hasRuntimeDefault: false;
660
+ enumValues: [string, ...string[]];
661
+ baseColumn: never;
662
+ identity: undefined;
663
+ generated: undefined;
664
+ }, {}, {}>;
665
+ fulfillmentTrackingNumber: drizzle_orm_pg_core.PgColumn<{
666
+ name: "fulfillment_tracking_number";
667
+ tableName: "commerce_orders";
668
+ dataType: "string";
669
+ columnType: "PgText";
670
+ data: string;
671
+ driverParam: string;
672
+ notNull: false;
673
+ hasDefault: false;
674
+ isPrimaryKey: false;
675
+ isAutoincrement: false;
676
+ hasRuntimeDefault: false;
677
+ enumValues: [string, ...string[]];
678
+ baseColumn: never;
679
+ identity: undefined;
680
+ generated: undefined;
681
+ }, {}, {}>;
682
+ fulfillmentTrackingUrl: drizzle_orm_pg_core.PgColumn<{
683
+ name: "fulfillment_tracking_url";
684
+ tableName: "commerce_orders";
685
+ dataType: "string";
686
+ columnType: "PgText";
687
+ data: string;
688
+ driverParam: string;
689
+ notNull: false;
690
+ hasDefault: false;
691
+ isPrimaryKey: false;
692
+ isAutoincrement: false;
693
+ hasRuntimeDefault: false;
694
+ enumValues: [string, ...string[]];
695
+ baseColumn: never;
696
+ identity: undefined;
697
+ generated: undefined;
698
+ }, {}, {}>;
699
+ shippedAt: drizzle_orm_pg_core.PgColumn<{
700
+ name: "shipped_at";
701
+ tableName: "commerce_orders";
702
+ dataType: "date";
703
+ columnType: "PgTimestamp";
704
+ data: Date;
705
+ driverParam: string;
706
+ notNull: false;
707
+ hasDefault: false;
708
+ isPrimaryKey: false;
709
+ isAutoincrement: false;
710
+ hasRuntimeDefault: false;
711
+ enumValues: undefined;
712
+ baseColumn: never;
713
+ identity: undefined;
714
+ generated: undefined;
715
+ }, {}, {}>;
716
+ createdAt: drizzle_orm_pg_core.PgColumn<{
717
+ name: "created_at";
718
+ tableName: "commerce_orders";
719
+ dataType: "date";
720
+ columnType: "PgTimestamp";
721
+ data: Date;
722
+ driverParam: string;
723
+ notNull: true;
724
+ hasDefault: true;
725
+ isPrimaryKey: false;
726
+ isAutoincrement: false;
727
+ hasRuntimeDefault: false;
728
+ enumValues: undefined;
729
+ baseColumn: never;
730
+ identity: undefined;
731
+ generated: undefined;
732
+ }, {}, {}>;
733
+ updatedAt: drizzle_orm_pg_core.PgColumn<{
734
+ name: "updated_at";
735
+ tableName: "commerce_orders";
736
+ dataType: "date";
737
+ columnType: "PgTimestamp";
738
+ data: Date;
739
+ driverParam: string;
740
+ notNull: true;
741
+ hasDefault: true;
742
+ isPrimaryKey: false;
743
+ isAutoincrement: false;
744
+ hasRuntimeDefault: false;
745
+ enumValues: undefined;
746
+ baseColumn: never;
747
+ identity: undefined;
748
+ generated: undefined;
749
+ }, {}, {}>;
750
+ };
751
+ dialect: "pg";
752
+ }>;
753
+ orderItems: drizzle_orm_pg_core.PgTableWithColumns<{
754
+ name: "commerce_order_items";
755
+ schema: undefined;
756
+ columns: {
757
+ id: drizzle_orm_pg_core.PgColumn<{
758
+ name: "id";
759
+ tableName: "commerce_order_items";
760
+ dataType: "string";
761
+ columnType: "PgUUID";
762
+ data: string;
763
+ driverParam: string;
764
+ notNull: true;
765
+ hasDefault: true;
766
+ isPrimaryKey: true;
767
+ isAutoincrement: false;
768
+ hasRuntimeDefault: false;
769
+ enumValues: undefined;
770
+ baseColumn: never;
771
+ identity: undefined;
772
+ generated: undefined;
773
+ }, {}, {}>;
774
+ orderId: drizzle_orm_pg_core.PgColumn<{
775
+ name: "order_id";
776
+ tableName: "commerce_order_items";
777
+ dataType: "string";
778
+ columnType: "PgUUID";
779
+ data: string;
780
+ driverParam: string;
781
+ notNull: true;
782
+ hasDefault: false;
783
+ isPrimaryKey: false;
784
+ isAutoincrement: false;
785
+ hasRuntimeDefault: false;
786
+ enumValues: undefined;
787
+ baseColumn: never;
788
+ identity: undefined;
789
+ generated: undefined;
790
+ }, {}, {}>;
791
+ productId: drizzle_orm_pg_core.PgColumn<{
792
+ name: "product_id";
793
+ tableName: "commerce_order_items";
794
+ dataType: "string";
795
+ columnType: "PgUUID";
796
+ data: string;
797
+ driverParam: string;
798
+ notNull: true;
799
+ hasDefault: false;
800
+ isPrimaryKey: false;
801
+ isAutoincrement: false;
802
+ hasRuntimeDefault: false;
803
+ enumValues: undefined;
804
+ baseColumn: never;
805
+ identity: undefined;
806
+ generated: undefined;
807
+ }, {}, {}>;
808
+ name: drizzle_orm_pg_core.PgColumn<{
809
+ name: "name";
810
+ tableName: "commerce_order_items";
811
+ dataType: "string";
812
+ columnType: "PgText";
813
+ data: string;
814
+ driverParam: string;
815
+ notNull: true;
816
+ hasDefault: false;
817
+ isPrimaryKey: false;
818
+ isAutoincrement: false;
819
+ hasRuntimeDefault: false;
820
+ enumValues: [string, ...string[]];
821
+ baseColumn: never;
822
+ identity: undefined;
823
+ generated: undefined;
824
+ }, {}, {}>;
825
+ priceCents: drizzle_orm_pg_core.PgColumn<{
826
+ name: "price_cents";
827
+ tableName: "commerce_order_items";
828
+ dataType: "number";
829
+ columnType: "PgInteger";
830
+ data: number;
831
+ driverParam: string | number;
832
+ notNull: true;
833
+ hasDefault: false;
834
+ isPrimaryKey: false;
835
+ isAutoincrement: false;
836
+ hasRuntimeDefault: false;
837
+ enumValues: undefined;
838
+ baseColumn: never;
839
+ identity: undefined;
840
+ generated: undefined;
841
+ }, {}, {}>;
842
+ quantity: drizzle_orm_pg_core.PgColumn<{
843
+ name: "quantity";
844
+ tableName: "commerce_order_items";
845
+ dataType: "number";
846
+ columnType: "PgInteger";
847
+ data: number;
848
+ driverParam: string | number;
849
+ notNull: true;
850
+ hasDefault: false;
851
+ isPrimaryKey: false;
852
+ isAutoincrement: false;
853
+ hasRuntimeDefault: false;
854
+ enumValues: undefined;
855
+ baseColumn: never;
856
+ identity: undefined;
857
+ generated: undefined;
858
+ }, {}, {}>;
859
+ };
860
+ dialect: "pg";
861
+ }>;
862
+ orderStatus: drizzle_orm_pg_core.PgEnum<["pending", "paid", "shipped", "cancelled", "expired", "needs_attention", "refunded"]>;
863
+ orderRefunds: drizzle_orm_pg_core.PgTableWithColumns<{
864
+ name: "commerce_order_refunds";
865
+ schema: undefined;
866
+ columns: {
867
+ id: drizzle_orm_pg_core.PgColumn<{
868
+ name: "id";
869
+ tableName: "commerce_order_refunds";
870
+ dataType: "string";
871
+ columnType: "PgUUID";
872
+ data: string;
873
+ driverParam: string;
874
+ notNull: true;
875
+ hasDefault: true;
876
+ isPrimaryKey: true;
877
+ isAutoincrement: false;
878
+ hasRuntimeDefault: false;
879
+ enumValues: undefined;
880
+ baseColumn: never;
881
+ identity: undefined;
882
+ generated: undefined;
883
+ }, {}, {}>;
884
+ orderId: drizzle_orm_pg_core.PgColumn<{
885
+ name: "order_id";
886
+ tableName: "commerce_order_refunds";
887
+ dataType: "string";
888
+ columnType: "PgUUID";
889
+ data: string;
890
+ driverParam: string;
891
+ notNull: true;
892
+ hasDefault: false;
893
+ isPrimaryKey: false;
894
+ isAutoincrement: false;
895
+ hasRuntimeDefault: false;
896
+ enumValues: undefined;
897
+ baseColumn: never;
898
+ identity: undefined;
899
+ generated: undefined;
900
+ }, {}, {}>;
901
+ amountCents: drizzle_orm_pg_core.PgColumn<{
902
+ name: "amount_cents";
903
+ tableName: "commerce_order_refunds";
904
+ dataType: "number";
905
+ columnType: "PgInteger";
906
+ data: number;
907
+ driverParam: string | number;
908
+ notNull: true;
909
+ hasDefault: false;
910
+ isPrimaryKey: false;
911
+ isAutoincrement: false;
912
+ hasRuntimeDefault: false;
913
+ enumValues: undefined;
914
+ baseColumn: never;
915
+ identity: undefined;
916
+ generated: undefined;
917
+ }, {}, {}>;
918
+ currency: drizzle_orm_pg_core.PgColumn<{
919
+ name: "currency";
920
+ tableName: "commerce_order_refunds";
921
+ dataType: "string";
922
+ columnType: "PgText";
923
+ data: string;
924
+ driverParam: string;
925
+ notNull: true;
926
+ hasDefault: false;
927
+ isPrimaryKey: false;
928
+ isAutoincrement: false;
929
+ hasRuntimeDefault: false;
930
+ enumValues: [string, ...string[]];
931
+ baseColumn: never;
932
+ identity: undefined;
933
+ generated: undefined;
934
+ }, {}, {}>;
935
+ reason: drizzle_orm_pg_core.PgColumn<{
936
+ name: "reason";
937
+ tableName: "commerce_order_refunds";
938
+ dataType: "string";
939
+ columnType: "PgText";
940
+ data: string;
941
+ driverParam: string;
942
+ notNull: false;
943
+ hasDefault: false;
944
+ isPrimaryKey: false;
945
+ isAutoincrement: false;
946
+ hasRuntimeDefault: false;
947
+ enumValues: [string, ...string[]];
948
+ baseColumn: never;
949
+ identity: undefined;
950
+ generated: undefined;
951
+ }, {}, {}>;
952
+ restocked: drizzle_orm_pg_core.PgColumn<{
953
+ name: "restocked";
954
+ tableName: "commerce_order_refunds";
955
+ dataType: "boolean";
956
+ columnType: "PgBoolean";
957
+ data: boolean;
958
+ driverParam: boolean;
959
+ notNull: true;
960
+ hasDefault: true;
961
+ isPrimaryKey: false;
962
+ isAutoincrement: false;
963
+ hasRuntimeDefault: false;
964
+ enumValues: undefined;
965
+ baseColumn: never;
966
+ identity: undefined;
967
+ generated: undefined;
968
+ }, {}, {}>;
969
+ source: drizzle_orm_pg_core.PgColumn<{
970
+ name: "source";
971
+ tableName: "commerce_order_refunds";
972
+ dataType: "string";
973
+ columnType: "PgText";
974
+ data: "admin" | "gateway";
975
+ driverParam: string;
976
+ notNull: true;
977
+ hasDefault: false;
978
+ isPrimaryKey: false;
979
+ isAutoincrement: false;
980
+ hasRuntimeDefault: false;
981
+ enumValues: ["admin", "gateway"];
982
+ baseColumn: never;
983
+ identity: undefined;
984
+ generated: undefined;
985
+ }, {}, {}>;
986
+ gatewayRefundId: drizzle_orm_pg_core.PgColumn<{
987
+ name: "gateway_refund_id";
988
+ tableName: "commerce_order_refunds";
989
+ dataType: "string";
990
+ columnType: "PgText";
991
+ data: string;
992
+ driverParam: string;
993
+ notNull: false;
994
+ hasDefault: false;
995
+ isPrimaryKey: false;
996
+ isAutoincrement: false;
997
+ hasRuntimeDefault: false;
998
+ enumValues: [string, ...string[]];
999
+ baseColumn: never;
1000
+ identity: undefined;
1001
+ generated: undefined;
1002
+ }, {}, {}>;
1003
+ idempotencyKey: drizzle_orm_pg_core.PgColumn<{
1004
+ name: "idempotency_key";
1005
+ tableName: "commerce_order_refunds";
1006
+ dataType: "string";
1007
+ columnType: "PgText";
1008
+ data: string;
1009
+ driverParam: string;
1010
+ notNull: false;
1011
+ hasDefault: false;
1012
+ isPrimaryKey: false;
1013
+ isAutoincrement: false;
1014
+ hasRuntimeDefault: false;
1015
+ enumValues: [string, ...string[]];
1016
+ baseColumn: never;
1017
+ identity: undefined;
1018
+ generated: undefined;
1019
+ }, {}, {}>;
1020
+ createdAt: drizzle_orm_pg_core.PgColumn<{
1021
+ name: "created_at";
1022
+ tableName: "commerce_order_refunds";
1023
+ dataType: "date";
1024
+ columnType: "PgTimestamp";
1025
+ data: Date;
1026
+ driverParam: string;
1027
+ notNull: true;
1028
+ hasDefault: true;
1029
+ isPrimaryKey: false;
1030
+ isAutoincrement: false;
1031
+ hasRuntimeDefault: false;
1032
+ enumValues: undefined;
1033
+ baseColumn: never;
1034
+ identity: undefined;
1035
+ generated: undefined;
1036
+ }, {}, {}>;
1037
+ };
1038
+ dialect: "pg";
1039
+ }>;
1040
+ stripeEvents: drizzle_orm_pg_core.PgTableWithColumns<{
1041
+ name: "commerce_stripe_events";
1042
+ schema: undefined;
1043
+ columns: {
1044
+ id: drizzle_orm_pg_core.PgColumn<{
1045
+ name: "id";
1046
+ tableName: "commerce_stripe_events";
1047
+ dataType: "string";
1048
+ columnType: "PgText";
1049
+ data: string;
1050
+ driverParam: string;
1051
+ notNull: true;
1052
+ hasDefault: false;
1053
+ isPrimaryKey: true;
1054
+ isAutoincrement: false;
1055
+ hasRuntimeDefault: false;
1056
+ enumValues: [string, ...string[]];
1057
+ baseColumn: never;
1058
+ identity: undefined;
1059
+ generated: undefined;
1060
+ }, {}, {}>;
1061
+ type: drizzle_orm_pg_core.PgColumn<{
1062
+ name: "type";
1063
+ tableName: "commerce_stripe_events";
1064
+ dataType: "string";
1065
+ columnType: "PgText";
1066
+ data: string;
1067
+ driverParam: string;
1068
+ notNull: true;
1069
+ hasDefault: false;
1070
+ isPrimaryKey: false;
1071
+ isAutoincrement: false;
1072
+ hasRuntimeDefault: false;
1073
+ enumValues: [string, ...string[]];
1074
+ baseColumn: never;
1075
+ identity: undefined;
1076
+ generated: undefined;
1077
+ }, {}, {}>;
1078
+ processedAt: drizzle_orm_pg_core.PgColumn<{
1079
+ name: "processed_at";
1080
+ tableName: "commerce_stripe_events";
1081
+ dataType: "date";
1082
+ columnType: "PgTimestamp";
1083
+ data: Date;
1084
+ driverParam: string;
1085
+ notNull: true;
1086
+ hasDefault: true;
1087
+ isPrimaryKey: false;
1088
+ isAutoincrement: false;
1089
+ hasRuntimeDefault: false;
1090
+ enumValues: undefined;
1091
+ baseColumn: never;
1092
+ identity: undefined;
1093
+ generated: undefined;
1094
+ }, {}, {}>;
1095
+ };
1096
+ dialect: "pg";
1097
+ }>;
1098
+ shippingRates: drizzle_orm_pg_core.PgTableWithColumns<{
1099
+ name: "commerce_shipping_rates";
1100
+ schema: undefined;
1101
+ columns: {
1102
+ id: drizzle_orm_pg_core.PgColumn<{
1103
+ name: "id";
1104
+ tableName: "commerce_shipping_rates";
1105
+ dataType: "string";
1106
+ columnType: "PgUUID";
1107
+ data: string;
1108
+ driverParam: string;
1109
+ notNull: true;
1110
+ hasDefault: true;
1111
+ isPrimaryKey: true;
1112
+ isAutoincrement: false;
1113
+ hasRuntimeDefault: false;
1114
+ enumValues: undefined;
1115
+ baseColumn: never;
1116
+ identity: undefined;
1117
+ generated: undefined;
1118
+ }, {}, {}>;
1119
+ label: drizzle_orm_pg_core.PgColumn<{
1120
+ name: "label";
1121
+ tableName: "commerce_shipping_rates";
1122
+ dataType: "string";
1123
+ columnType: "PgText";
1124
+ data: string;
1125
+ driverParam: string;
1126
+ notNull: true;
1127
+ hasDefault: false;
1128
+ isPrimaryKey: false;
1129
+ isAutoincrement: false;
1130
+ hasRuntimeDefault: false;
1131
+ enumValues: [string, ...string[]];
1132
+ baseColumn: never;
1133
+ identity: undefined;
1134
+ generated: undefined;
1135
+ }, {}, {}>;
1136
+ amountCents: drizzle_orm_pg_core.PgColumn<{
1137
+ name: "amount_cents";
1138
+ tableName: "commerce_shipping_rates";
1139
+ dataType: "number";
1140
+ columnType: "PgInteger";
1141
+ data: number;
1142
+ driverParam: string | number;
1143
+ notNull: true;
1144
+ hasDefault: false;
1145
+ isPrimaryKey: false;
1146
+ isAutoincrement: false;
1147
+ hasRuntimeDefault: false;
1148
+ enumValues: undefined;
1149
+ baseColumn: never;
1150
+ identity: undefined;
1151
+ generated: undefined;
1152
+ }, {}, {}>;
1153
+ currency: drizzle_orm_pg_core.PgColumn<{
1154
+ name: "currency";
1155
+ tableName: "commerce_shipping_rates";
1156
+ dataType: "string";
1157
+ columnType: "PgText";
1158
+ data: string;
1159
+ driverParam: string;
1160
+ notNull: true;
1161
+ hasDefault: false;
1162
+ isPrimaryKey: false;
1163
+ isAutoincrement: false;
1164
+ hasRuntimeDefault: false;
1165
+ enumValues: [string, ...string[]];
1166
+ baseColumn: never;
1167
+ identity: undefined;
1168
+ generated: undefined;
1169
+ }, {}, {}>;
1170
+ minDays: drizzle_orm_pg_core.PgColumn<{
1171
+ name: "min_days";
1172
+ tableName: "commerce_shipping_rates";
1173
+ dataType: "number";
1174
+ columnType: "PgInteger";
1175
+ data: number;
1176
+ driverParam: string | number;
1177
+ notNull: false;
1178
+ hasDefault: false;
1179
+ isPrimaryKey: false;
1180
+ isAutoincrement: false;
1181
+ hasRuntimeDefault: false;
1182
+ enumValues: undefined;
1183
+ baseColumn: never;
1184
+ identity: undefined;
1185
+ generated: undefined;
1186
+ }, {}, {}>;
1187
+ maxDays: drizzle_orm_pg_core.PgColumn<{
1188
+ name: "max_days";
1189
+ tableName: "commerce_shipping_rates";
1190
+ dataType: "number";
1191
+ columnType: "PgInteger";
1192
+ data: number;
1193
+ driverParam: string | number;
1194
+ notNull: false;
1195
+ hasDefault: false;
1196
+ isPrimaryKey: false;
1197
+ isAutoincrement: false;
1198
+ hasRuntimeDefault: false;
1199
+ enumValues: undefined;
1200
+ baseColumn: never;
1201
+ identity: undefined;
1202
+ generated: undefined;
1203
+ }, {}, {}>;
1204
+ active: drizzle_orm_pg_core.PgColumn<{
1205
+ name: "active";
1206
+ tableName: "commerce_shipping_rates";
1207
+ dataType: "boolean";
1208
+ columnType: "PgBoolean";
1209
+ data: boolean;
1210
+ driverParam: boolean;
1211
+ notNull: true;
1212
+ hasDefault: true;
1213
+ isPrimaryKey: false;
1214
+ isAutoincrement: false;
1215
+ hasRuntimeDefault: false;
1216
+ enumValues: undefined;
1217
+ baseColumn: never;
1218
+ identity: undefined;
1219
+ generated: undefined;
1220
+ }, {}, {}>;
1221
+ sort: drizzle_orm_pg_core.PgColumn<{
1222
+ name: "sort";
1223
+ tableName: "commerce_shipping_rates";
1224
+ dataType: "number";
1225
+ columnType: "PgInteger";
1226
+ data: number;
1227
+ driverParam: string | number;
1228
+ notNull: true;
1229
+ hasDefault: true;
1230
+ isPrimaryKey: false;
1231
+ isAutoincrement: false;
1232
+ hasRuntimeDefault: false;
1233
+ enumValues: undefined;
1234
+ baseColumn: never;
1235
+ identity: undefined;
1236
+ generated: undefined;
1237
+ }, {}, {}>;
1238
+ };
1239
+ dialect: "pg";
1240
+ }>;
1241
+ };
1242
+ type CommerceSchema = typeof commerceSchema;
1243
+
1244
+ type CommerceDb = NodePgDatabase<CommerceSchema>;
1245
+
1246
+ interface StoredFile {
1247
+ key: string;
1248
+ url: string;
1249
+ }
1250
+ interface FileStorage {
1251
+ put(key: string, stream: Readable, contentType: string): Promise<StoredFile>;
1252
+ delete(key: string): Promise<void>;
1253
+ }
1254
+
1255
+ interface AdminOptions {
1256
+ authorize(req: FastifyRequest): Promise<boolean>;
1257
+ storage: FileStorage;
1258
+ }
1259
+
1260
+ declare class ProductNotFoundError extends Error {
1261
+ readonly slug: string;
1262
+ readonly code = "PRODUCT_NOT_FOUND";
1263
+ constructor(slug: string);
1264
+ }
1265
+ type CategoryLabels = Record<string, string> | ((slug: string) => string | undefined);
1266
+
1267
+ interface ShippingRateOption {
1268
+ label: string;
1269
+ amountCents: number;
1270
+ minDays?: number;
1271
+ maxDays?: number;
1272
+ }
1273
+
1274
+ interface CheckoutLine {
1275
+ productId: string;
1276
+ name: string;
1277
+ unitAmountCents: number;
1278
+ quantity: number;
1279
+ }
1280
+ interface CreateCheckoutSessionInput {
1281
+ reference: string;
1282
+ currency: string;
1283
+ lines: CheckoutLine[];
1284
+ successUrl: string;
1285
+ cancelUrl: string;
1286
+ shippingCountries: string[];
1287
+ shippingRates: ShippingRateOption[];
1288
+ expiresAt: Date;
1289
+ }
1290
+ interface CheckoutSession {
1291
+ id: string;
1292
+ url: string;
1293
+ }
1294
+ interface ShippingAddress {
1295
+ name?: string;
1296
+ line1?: string;
1297
+ line2?: string;
1298
+ city?: string;
1299
+ state?: string;
1300
+ postalCode?: string;
1301
+ country?: string;
1302
+ }
1303
+ interface ChosenShipping {
1304
+ label: string;
1305
+ amountCents: number;
1306
+ }
1307
+ interface GatewayRefundEvent {
1308
+ gatewayRefundId: string;
1309
+ amountCents: number;
1310
+ idempotencyKey?: string;
1311
+ }
1312
+ type PaymentEvent = {
1313
+ id: string;
1314
+ type: 'checkout.completed';
1315
+ sessionId: string;
1316
+ email?: string;
1317
+ shippingAddress?: ShippingAddress;
1318
+ shipping?: ChosenShipping;
1319
+ paymentPending?: boolean;
1320
+ } | {
1321
+ id: string;
1322
+ type: 'checkout.async_paid';
1323
+ sessionId: string;
1324
+ } | {
1325
+ id: string;
1326
+ type: 'checkout.async_failed';
1327
+ sessionId: string;
1328
+ } | {
1329
+ id: string;
1330
+ type: 'checkout.expired';
1331
+ sessionId: string;
1332
+ } | {
1333
+ id: string;
1334
+ type: 'payment.refunded';
1335
+ sessionId: string;
1336
+ refunds: GatewayRefundEvent[];
1337
+ } | {
1338
+ id: string;
1339
+ type: 'ignored';
1340
+ sourceType: string;
1341
+ };
1342
+ interface RefundInput {
1343
+ sessionId: string;
1344
+ amountCents: number;
1345
+ idempotencyKey: string;
1346
+ }
1347
+ interface GatewayRefund {
1348
+ gatewayRefundId: string;
1349
+ }
1350
+ interface PaymentGateway {
1351
+ createCheckoutSession(input: CreateCheckoutSessionInput): Promise<CheckoutSession>;
1352
+ verifyWebhook(rawBody: Buffer, signature: string | undefined): Promise<PaymentEvent>;
1353
+ refund(input: RefundInput): Promise<GatewayRefund>;
1354
+ }
1355
+ declare const SESSION_ID_PLACEHOLDER = "{CHECKOUT_SESSION_ID}";
1356
+ declare class WebhookSignatureError extends Error {
1357
+ readonly code = "INVALID_WEBHOOK_SIGNATURE";
1358
+ constructor(message?: string);
1359
+ }
1360
+
1361
+ interface CheckoutUrls {
1362
+ success(sessionIdPlaceholder: string): string;
1363
+ cancel: string;
1364
+ }
1365
+ interface CheckoutSettings {
1366
+ currency: string;
1367
+ payment: PaymentGateway;
1368
+ urls: CheckoutUrls;
1369
+ shippingCountries: string[];
1370
+ hooks?: OrderHooks;
1371
+ }
1372
+ interface OrderHooks {
1373
+ onOrderPaid?(order: OrderDetail): Promise<void>;
1374
+ onOrderExpired?(order: OrderDetail): Promise<void>;
1375
+ onOrderNeedsAttention?(order: OrderDetail): Promise<void>;
1376
+ onOrderPaymentFailed?(order: OrderDetail): Promise<void>;
1377
+ onOrderShipped?(order: OrderDetail): Promise<void>;
1378
+ onOrderRefunded?(order: OrderDetail, refund: OrderRefund): Promise<void>;
1379
+ }
1380
+
1381
+ interface CheckoutOptions {
1382
+ payment: PaymentGateway;
1383
+ urls: CheckoutUrls;
1384
+ shippingCountries?: string[];
1385
+ hooks?: OrderHooks;
1386
+ }
1387
+ interface CatalogOnlyOptions {
1388
+ payment?: undefined;
1389
+ urls?: undefined;
1390
+ shippingCountries?: undefined;
1391
+ hooks?: undefined;
1392
+ }
1393
+ type CommercePluginOptions = {
1394
+ db: CommerceDb;
1395
+ currency: string;
1396
+ admin?: AdminOptions;
1397
+ categoryLabels?: CategoryLabels;
1398
+ } & (CheckoutOptions | CatalogOnlyOptions);
1399
+ declare const commercePlugin: FastifyPluginAsync<CommercePluginOptions>;
1400
+
1401
+ interface CatalogPluginOptions {
1402
+ db: CommerceDb;
1403
+ categoryLabels?: CategoryLabels;
1404
+ }
1405
+ declare const catalogPlugin: FastifyPluginAsync<CatalogPluginOptions>;
1406
+
1407
+ interface OrdersPluginOptions extends CheckoutSettings {
1408
+ db: CommerceDb;
1409
+ }
1410
+ declare const ordersPlugin: FastifyPluginAsync<OrdersPluginOptions>;
1411
+
1412
+ interface StripeGatewayOptions {
1413
+ secretKey: string;
1414
+ webhookSecret: string;
1415
+ client?: Stripe;
1416
+ }
1417
+ declare function createStripeGateway({ secretKey, webhookSecret, client, }: StripeGatewayOptions): PaymentGateway;
1418
+
1419
+ interface SignedWebhook {
1420
+ rawBody: Buffer;
1421
+ signature: string;
1422
+ }
1423
+ interface FakeGateway extends PaymentGateway {
1424
+ readonly sessions: (CreateCheckoutSessionInput & {
1425
+ id: string;
1426
+ })[];
1427
+ readonly refunds: (RefundInput & {
1428
+ gatewayRefundId: string;
1429
+ })[];
1430
+ readonly refundCalls: RefundInput[];
1431
+ failNextSession(error?: Error): void;
1432
+ failNextRefund(error?: Error): void;
1433
+ failNextRefundUncertain(error?: Error): void;
1434
+ completed(sessionId: string, details?: {
1435
+ email?: string;
1436
+ shippingAddress?: ShippingAddress;
1437
+ shipping?: ChosenShipping;
1438
+ paymentPending?: boolean;
1439
+ }): SignedWebhook;
1440
+ asyncPaid(sessionId: string): SignedWebhook;
1441
+ asyncFailed(sessionId: string): SignedWebhook;
1442
+ expired(sessionId: string): SignedWebhook;
1443
+ refunded(sessionId: string, refunds: GatewayRefundEvent[]): SignedWebhook;
1444
+ sign(event: PaymentEvent): SignedWebhook;
1445
+ }
1446
+ interface FakeGatewayOptions {
1447
+ secret?: string;
1448
+ }
1449
+ declare function createFakeGateway({ secret, }?: FakeGatewayOptions): FakeGateway;
1450
+
1451
+ interface HoldSweeperOptions {
1452
+ intervalMs?: number;
1453
+ onError?: (err: unknown) => void;
1454
+ }
1455
+ interface HoldSweeper {
1456
+ stop(): void;
1457
+ }
1458
+ declare function startHoldSweeper(db: CommerceDb, { intervalMs, onError }?: HoldSweeperOptions): HoldSweeper;
1459
+
1460
+ declare function runCommerceMigrations(db: NodePgDatabase<any>): Promise<void>;
1461
+
1462
+ interface SeedProduct {
1463
+ slug: string;
1464
+ name: string;
1465
+ description?: string;
1466
+ materials?: string;
1467
+ dimensions?: string;
1468
+ priceCents: number;
1469
+ currency: string;
1470
+ category: string;
1471
+ quantity?: number;
1472
+ status?: 'draft' | 'active' | 'archived';
1473
+ featured?: boolean;
1474
+ images?: {
1475
+ url: string;
1476
+ alt?: string;
1477
+ }[];
1478
+ }
1479
+ declare function seedProducts(db: CommerceDb, items: SeedProduct[]): Promise<void>;
1480
+
1481
+ interface SeedShippingRate {
1482
+ label: string;
1483
+ amountCents: number;
1484
+ currency: string;
1485
+ minDays?: number;
1486
+ maxDays?: number;
1487
+ active?: boolean;
1488
+ sort?: number;
1489
+ }
1490
+ declare function seedShippingRates(db: CommerceDb, rates: SeedShippingRate[]): Promise<void>;
1491
+
1492
+ interface MemoryStorage extends FileStorage {
1493
+ files: Map<string, {
1494
+ body: Buffer;
1495
+ contentType: string;
1496
+ }>;
1497
+ }
1498
+ declare function createMemoryStorage(baseUrl?: string): MemoryStorage;
1499
+
1500
+ export { ProductNotFoundError, SESSION_ID_PLACEHOLDER, WebhookSignatureError, catalogPlugin, commercePlugin, commerceSchema, createFakeGateway, createMemoryStorage, createStripeGateway, ordersPlugin, runCommerceMigrations, seedProducts, seedShippingRates, startHoldSweeper };
1501
+ export type { AdminOptions, CatalogPluginOptions, CategoryLabels, CheckoutLine, CheckoutSession, CheckoutUrls, ChosenShipping, CommerceDb, CommercePluginOptions, CommerceSchema, CreateCheckoutSessionInput, FakeGateway, FakeGatewayOptions, FileStorage, GatewayRefund, HoldSweeper, HoldSweeperOptions, MemoryStorage, OrderHooks, OrdersPluginOptions, PaymentEvent, PaymentGateway, RefundInput, SeedProduct, SeedShippingRate, ShippingAddress, ShippingRateOption, SignedWebhook, StoredFile, StripeGatewayOptions };