@nymbalhq/config 0.2.0 → 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.
- package/dist/index.d.ts +129 -113
- package/dist/index.js +40 -12
- package/dist/index.js.map +1 -1
- package/package.json +2 -2
package/dist/index.d.ts
CHANGED
|
@@ -1,4 +1,5 @@
|
|
|
1
1
|
import { z } from 'zod';
|
|
2
|
+
export { CommerceSlot } from '@nymbalhq/types';
|
|
2
3
|
|
|
3
4
|
/** The schema's JWT secret when none is configured: fine for development, refused in production. */
|
|
4
5
|
declare const DEFAULT_JWT_SECRET = "dev-secret-please-override-me-1234567890";
|
|
@@ -141,83 +142,83 @@ declare const securitySchema: z.ZodObject<{
|
|
|
141
142
|
}>;
|
|
142
143
|
declare const commerceSchema: z.ZodObject<{
|
|
143
144
|
payments: z.ZodObject<{
|
|
144
|
-
provider: z.
|
|
145
|
+
provider: z.ZodEnum<["native", "stripe", "custom"]>;
|
|
145
146
|
config: z.ZodOptional<z.ZodRecord<z.ZodString, z.ZodUnknown>>;
|
|
146
147
|
}, "strip", z.ZodTypeAny, {
|
|
147
|
-
provider:
|
|
148
|
+
provider: "native" | "stripe" | "custom";
|
|
148
149
|
config?: Record<string, unknown> | undefined;
|
|
149
150
|
}, {
|
|
150
|
-
provider:
|
|
151
|
+
provider: "native" | "stripe" | "custom";
|
|
151
152
|
config?: Record<string, unknown> | undefined;
|
|
152
153
|
}>;
|
|
153
154
|
email: z.ZodObject<{
|
|
154
|
-
provider: z.
|
|
155
|
+
provider: z.ZodEnum<["native", "smtp", "custom"]>;
|
|
155
156
|
config: z.ZodOptional<z.ZodRecord<z.ZodString, z.ZodUnknown>>;
|
|
156
157
|
}, "strip", z.ZodTypeAny, {
|
|
157
|
-
provider:
|
|
158
|
+
provider: "native" | "custom" | "smtp";
|
|
158
159
|
config?: Record<string, unknown> | undefined;
|
|
159
160
|
}, {
|
|
160
|
-
provider:
|
|
161
|
+
provider: "native" | "custom" | "smtp";
|
|
161
162
|
config?: Record<string, unknown> | undefined;
|
|
162
163
|
}>;
|
|
163
164
|
reviews: z.ZodObject<{
|
|
164
|
-
provider: z.
|
|
165
|
+
provider: z.ZodEnum<["native", "custom"]>;
|
|
165
166
|
config: z.ZodOptional<z.ZodRecord<z.ZodString, z.ZodUnknown>>;
|
|
166
167
|
}, "strip", z.ZodTypeAny, {
|
|
167
|
-
provider:
|
|
168
|
+
provider: "native" | "custom";
|
|
168
169
|
config?: Record<string, unknown> | undefined;
|
|
169
170
|
}, {
|
|
170
|
-
provider:
|
|
171
|
+
provider: "native" | "custom";
|
|
171
172
|
config?: Record<string, unknown> | undefined;
|
|
172
173
|
}>;
|
|
173
174
|
search: z.ZodObject<{
|
|
174
|
-
provider: z.
|
|
175
|
+
provider: z.ZodEnum<["native", "custom"]>;
|
|
175
176
|
config: z.ZodOptional<z.ZodRecord<z.ZodString, z.ZodUnknown>>;
|
|
176
177
|
}, "strip", z.ZodTypeAny, {
|
|
177
|
-
provider:
|
|
178
|
+
provider: "native" | "custom";
|
|
178
179
|
config?: Record<string, unknown> | undefined;
|
|
179
180
|
}, {
|
|
180
|
-
provider:
|
|
181
|
+
provider: "native" | "custom";
|
|
181
182
|
config?: Record<string, unknown> | undefined;
|
|
182
183
|
}>;
|
|
183
184
|
analytics: z.ZodObject<{
|
|
184
|
-
provider: z.
|
|
185
|
+
provider: z.ZodEnum<["native", "custom"]>;
|
|
185
186
|
config: z.ZodOptional<z.ZodRecord<z.ZodString, z.ZodUnknown>>;
|
|
186
187
|
}, "strip", z.ZodTypeAny, {
|
|
187
|
-
provider:
|
|
188
|
+
provider: "native" | "custom";
|
|
188
189
|
config?: Record<string, unknown> | undefined;
|
|
189
190
|
}, {
|
|
190
|
-
provider:
|
|
191
|
+
provider: "native" | "custom";
|
|
191
192
|
config?: Record<string, unknown> | undefined;
|
|
192
193
|
}>;
|
|
193
194
|
shipping: z.ZodObject<{
|
|
194
|
-
provider: z.
|
|
195
|
+
provider: z.ZodEnum<["native", "custom"]>;
|
|
195
196
|
config: z.ZodOptional<z.ZodRecord<z.ZodString, z.ZodUnknown>>;
|
|
196
197
|
}, "strip", z.ZodTypeAny, {
|
|
197
|
-
provider:
|
|
198
|
+
provider: "native" | "custom";
|
|
198
199
|
config?: Record<string, unknown> | undefined;
|
|
199
200
|
}, {
|
|
200
|
-
provider:
|
|
201
|
+
provider: "native" | "custom";
|
|
201
202
|
config?: Record<string, unknown> | undefined;
|
|
202
203
|
}>;
|
|
203
204
|
tax: z.ZodObject<{
|
|
204
|
-
provider: z.
|
|
205
|
+
provider: z.ZodEnum<["native", "custom"]>;
|
|
205
206
|
config: z.ZodOptional<z.ZodRecord<z.ZodString, z.ZodUnknown>>;
|
|
206
207
|
}, "strip", z.ZodTypeAny, {
|
|
207
|
-
provider:
|
|
208
|
+
provider: "native" | "custom";
|
|
208
209
|
config?: Record<string, unknown> | undefined;
|
|
209
210
|
}, {
|
|
210
|
-
provider:
|
|
211
|
+
provider: "native" | "custom";
|
|
211
212
|
config?: Record<string, unknown> | undefined;
|
|
212
213
|
}>;
|
|
213
214
|
ai: z.ZodObject<{
|
|
214
|
-
provider: z.
|
|
215
|
+
provider: z.ZodEnum<["none", "anthropic", "custom"]>;
|
|
215
216
|
config: z.ZodOptional<z.ZodRecord<z.ZodString, z.ZodUnknown>>;
|
|
216
217
|
}, "strip", z.ZodTypeAny, {
|
|
217
|
-
provider:
|
|
218
|
+
provider: "custom" | "none" | "anthropic";
|
|
218
219
|
config?: Record<string, unknown> | undefined;
|
|
219
220
|
}, {
|
|
220
|
-
provider:
|
|
221
|
+
provider: "custom" | "none" | "anthropic";
|
|
221
222
|
config?: Record<string, unknown> | undefined;
|
|
222
223
|
}>;
|
|
223
224
|
orders: z.ZodDefault<z.ZodObject<{
|
|
@@ -232,35 +233,35 @@ declare const commerceSchema: z.ZodObject<{
|
|
|
232
233
|
}>>;
|
|
233
234
|
}, "strip", z.ZodTypeAny, {
|
|
234
235
|
payments: {
|
|
235
|
-
provider:
|
|
236
|
+
provider: "native" | "stripe" | "custom";
|
|
236
237
|
config?: Record<string, unknown> | undefined;
|
|
237
238
|
};
|
|
238
239
|
email: {
|
|
239
|
-
provider:
|
|
240
|
+
provider: "native" | "custom" | "smtp";
|
|
240
241
|
config?: Record<string, unknown> | undefined;
|
|
241
242
|
};
|
|
242
243
|
reviews: {
|
|
243
|
-
provider:
|
|
244
|
+
provider: "native" | "custom";
|
|
244
245
|
config?: Record<string, unknown> | undefined;
|
|
245
246
|
};
|
|
246
247
|
search: {
|
|
247
|
-
provider:
|
|
248
|
+
provider: "native" | "custom";
|
|
248
249
|
config?: Record<string, unknown> | undefined;
|
|
249
250
|
};
|
|
250
251
|
analytics: {
|
|
251
|
-
provider:
|
|
252
|
+
provider: "native" | "custom";
|
|
252
253
|
config?: Record<string, unknown> | undefined;
|
|
253
254
|
};
|
|
254
255
|
shipping: {
|
|
255
|
-
provider:
|
|
256
|
+
provider: "native" | "custom";
|
|
256
257
|
config?: Record<string, unknown> | undefined;
|
|
257
258
|
};
|
|
258
259
|
tax: {
|
|
259
|
-
provider:
|
|
260
|
+
provider: "native" | "custom";
|
|
260
261
|
config?: Record<string, unknown> | undefined;
|
|
261
262
|
};
|
|
262
263
|
ai: {
|
|
263
|
-
provider:
|
|
264
|
+
provider: "custom" | "none" | "anthropic";
|
|
264
265
|
config?: Record<string, unknown> | undefined;
|
|
265
266
|
};
|
|
266
267
|
orders: {
|
|
@@ -269,35 +270,35 @@ declare const commerceSchema: z.ZodObject<{
|
|
|
269
270
|
};
|
|
270
271
|
}, {
|
|
271
272
|
payments: {
|
|
272
|
-
provider:
|
|
273
|
+
provider: "native" | "stripe" | "custom";
|
|
273
274
|
config?: Record<string, unknown> | undefined;
|
|
274
275
|
};
|
|
275
276
|
email: {
|
|
276
|
-
provider:
|
|
277
|
+
provider: "native" | "custom" | "smtp";
|
|
277
278
|
config?: Record<string, unknown> | undefined;
|
|
278
279
|
};
|
|
279
280
|
reviews: {
|
|
280
|
-
provider:
|
|
281
|
+
provider: "native" | "custom";
|
|
281
282
|
config?: Record<string, unknown> | undefined;
|
|
282
283
|
};
|
|
283
284
|
search: {
|
|
284
|
-
provider:
|
|
285
|
+
provider: "native" | "custom";
|
|
285
286
|
config?: Record<string, unknown> | undefined;
|
|
286
287
|
};
|
|
287
288
|
analytics: {
|
|
288
|
-
provider:
|
|
289
|
+
provider: "native" | "custom";
|
|
289
290
|
config?: Record<string, unknown> | undefined;
|
|
290
291
|
};
|
|
291
292
|
shipping: {
|
|
292
|
-
provider:
|
|
293
|
+
provider: "native" | "custom";
|
|
293
294
|
config?: Record<string, unknown> | undefined;
|
|
294
295
|
};
|
|
295
296
|
tax: {
|
|
296
|
-
provider:
|
|
297
|
+
provider: "native" | "custom";
|
|
297
298
|
config?: Record<string, unknown> | undefined;
|
|
298
299
|
};
|
|
299
300
|
ai: {
|
|
300
|
-
provider:
|
|
301
|
+
provider: "custom" | "none" | "anthropic";
|
|
301
302
|
config?: Record<string, unknown> | undefined;
|
|
302
303
|
};
|
|
303
304
|
orders?: {
|
|
@@ -501,83 +502,83 @@ declare const nymbalConfigSchema: z.ZodEffects<z.ZodObject<{
|
|
|
501
502
|
}>;
|
|
502
503
|
commerce: z.ZodObject<{
|
|
503
504
|
payments: z.ZodObject<{
|
|
504
|
-
provider: z.
|
|
505
|
+
provider: z.ZodEnum<["native", "stripe", "custom"]>;
|
|
505
506
|
config: z.ZodOptional<z.ZodRecord<z.ZodString, z.ZodUnknown>>;
|
|
506
507
|
}, "strip", z.ZodTypeAny, {
|
|
507
|
-
provider:
|
|
508
|
+
provider: "native" | "stripe" | "custom";
|
|
508
509
|
config?: Record<string, unknown> | undefined;
|
|
509
510
|
}, {
|
|
510
|
-
provider:
|
|
511
|
+
provider: "native" | "stripe" | "custom";
|
|
511
512
|
config?: Record<string, unknown> | undefined;
|
|
512
513
|
}>;
|
|
513
514
|
email: z.ZodObject<{
|
|
514
|
-
provider: z.
|
|
515
|
+
provider: z.ZodEnum<["native", "smtp", "custom"]>;
|
|
515
516
|
config: z.ZodOptional<z.ZodRecord<z.ZodString, z.ZodUnknown>>;
|
|
516
517
|
}, "strip", z.ZodTypeAny, {
|
|
517
|
-
provider:
|
|
518
|
+
provider: "native" | "custom" | "smtp";
|
|
518
519
|
config?: Record<string, unknown> | undefined;
|
|
519
520
|
}, {
|
|
520
|
-
provider:
|
|
521
|
+
provider: "native" | "custom" | "smtp";
|
|
521
522
|
config?: Record<string, unknown> | undefined;
|
|
522
523
|
}>;
|
|
523
524
|
reviews: z.ZodObject<{
|
|
524
|
-
provider: z.
|
|
525
|
+
provider: z.ZodEnum<["native", "custom"]>;
|
|
525
526
|
config: z.ZodOptional<z.ZodRecord<z.ZodString, z.ZodUnknown>>;
|
|
526
527
|
}, "strip", z.ZodTypeAny, {
|
|
527
|
-
provider:
|
|
528
|
+
provider: "native" | "custom";
|
|
528
529
|
config?: Record<string, unknown> | undefined;
|
|
529
530
|
}, {
|
|
530
|
-
provider:
|
|
531
|
+
provider: "native" | "custom";
|
|
531
532
|
config?: Record<string, unknown> | undefined;
|
|
532
533
|
}>;
|
|
533
534
|
search: z.ZodObject<{
|
|
534
|
-
provider: z.
|
|
535
|
+
provider: z.ZodEnum<["native", "custom"]>;
|
|
535
536
|
config: z.ZodOptional<z.ZodRecord<z.ZodString, z.ZodUnknown>>;
|
|
536
537
|
}, "strip", z.ZodTypeAny, {
|
|
537
|
-
provider:
|
|
538
|
+
provider: "native" | "custom";
|
|
538
539
|
config?: Record<string, unknown> | undefined;
|
|
539
540
|
}, {
|
|
540
|
-
provider:
|
|
541
|
+
provider: "native" | "custom";
|
|
541
542
|
config?: Record<string, unknown> | undefined;
|
|
542
543
|
}>;
|
|
543
544
|
analytics: z.ZodObject<{
|
|
544
|
-
provider: z.
|
|
545
|
+
provider: z.ZodEnum<["native", "custom"]>;
|
|
545
546
|
config: z.ZodOptional<z.ZodRecord<z.ZodString, z.ZodUnknown>>;
|
|
546
547
|
}, "strip", z.ZodTypeAny, {
|
|
547
|
-
provider:
|
|
548
|
+
provider: "native" | "custom";
|
|
548
549
|
config?: Record<string, unknown> | undefined;
|
|
549
550
|
}, {
|
|
550
|
-
provider:
|
|
551
|
+
provider: "native" | "custom";
|
|
551
552
|
config?: Record<string, unknown> | undefined;
|
|
552
553
|
}>;
|
|
553
554
|
shipping: z.ZodObject<{
|
|
554
|
-
provider: z.
|
|
555
|
+
provider: z.ZodEnum<["native", "custom"]>;
|
|
555
556
|
config: z.ZodOptional<z.ZodRecord<z.ZodString, z.ZodUnknown>>;
|
|
556
557
|
}, "strip", z.ZodTypeAny, {
|
|
557
|
-
provider:
|
|
558
|
+
provider: "native" | "custom";
|
|
558
559
|
config?: Record<string, unknown> | undefined;
|
|
559
560
|
}, {
|
|
560
|
-
provider:
|
|
561
|
+
provider: "native" | "custom";
|
|
561
562
|
config?: Record<string, unknown> | undefined;
|
|
562
563
|
}>;
|
|
563
564
|
tax: z.ZodObject<{
|
|
564
|
-
provider: z.
|
|
565
|
+
provider: z.ZodEnum<["native", "custom"]>;
|
|
565
566
|
config: z.ZodOptional<z.ZodRecord<z.ZodString, z.ZodUnknown>>;
|
|
566
567
|
}, "strip", z.ZodTypeAny, {
|
|
567
|
-
provider:
|
|
568
|
+
provider: "native" | "custom";
|
|
568
569
|
config?: Record<string, unknown> | undefined;
|
|
569
570
|
}, {
|
|
570
|
-
provider:
|
|
571
|
+
provider: "native" | "custom";
|
|
571
572
|
config?: Record<string, unknown> | undefined;
|
|
572
573
|
}>;
|
|
573
574
|
ai: z.ZodObject<{
|
|
574
|
-
provider: z.
|
|
575
|
+
provider: z.ZodEnum<["none", "anthropic", "custom"]>;
|
|
575
576
|
config: z.ZodOptional<z.ZodRecord<z.ZodString, z.ZodUnknown>>;
|
|
576
577
|
}, "strip", z.ZodTypeAny, {
|
|
577
|
-
provider:
|
|
578
|
+
provider: "custom" | "none" | "anthropic";
|
|
578
579
|
config?: Record<string, unknown> | undefined;
|
|
579
580
|
}, {
|
|
580
|
-
provider:
|
|
581
|
+
provider: "custom" | "none" | "anthropic";
|
|
581
582
|
config?: Record<string, unknown> | undefined;
|
|
582
583
|
}>;
|
|
583
584
|
orders: z.ZodDefault<z.ZodObject<{
|
|
@@ -592,35 +593,35 @@ declare const nymbalConfigSchema: z.ZodEffects<z.ZodObject<{
|
|
|
592
593
|
}>>;
|
|
593
594
|
}, "strip", z.ZodTypeAny, {
|
|
594
595
|
payments: {
|
|
595
|
-
provider:
|
|
596
|
+
provider: "native" | "stripe" | "custom";
|
|
596
597
|
config?: Record<string, unknown> | undefined;
|
|
597
598
|
};
|
|
598
599
|
email: {
|
|
599
|
-
provider:
|
|
600
|
+
provider: "native" | "custom" | "smtp";
|
|
600
601
|
config?: Record<string, unknown> | undefined;
|
|
601
602
|
};
|
|
602
603
|
reviews: {
|
|
603
|
-
provider:
|
|
604
|
+
provider: "native" | "custom";
|
|
604
605
|
config?: Record<string, unknown> | undefined;
|
|
605
606
|
};
|
|
606
607
|
search: {
|
|
607
|
-
provider:
|
|
608
|
+
provider: "native" | "custom";
|
|
608
609
|
config?: Record<string, unknown> | undefined;
|
|
609
610
|
};
|
|
610
611
|
analytics: {
|
|
611
|
-
provider:
|
|
612
|
+
provider: "native" | "custom";
|
|
612
613
|
config?: Record<string, unknown> | undefined;
|
|
613
614
|
};
|
|
614
615
|
shipping: {
|
|
615
|
-
provider:
|
|
616
|
+
provider: "native" | "custom";
|
|
616
617
|
config?: Record<string, unknown> | undefined;
|
|
617
618
|
};
|
|
618
619
|
tax: {
|
|
619
|
-
provider:
|
|
620
|
+
provider: "native" | "custom";
|
|
620
621
|
config?: Record<string, unknown> | undefined;
|
|
621
622
|
};
|
|
622
623
|
ai: {
|
|
623
|
-
provider:
|
|
624
|
+
provider: "custom" | "none" | "anthropic";
|
|
624
625
|
config?: Record<string, unknown> | undefined;
|
|
625
626
|
};
|
|
626
627
|
orders: {
|
|
@@ -629,35 +630,35 @@ declare const nymbalConfigSchema: z.ZodEffects<z.ZodObject<{
|
|
|
629
630
|
};
|
|
630
631
|
}, {
|
|
631
632
|
payments: {
|
|
632
|
-
provider:
|
|
633
|
+
provider: "native" | "stripe" | "custom";
|
|
633
634
|
config?: Record<string, unknown> | undefined;
|
|
634
635
|
};
|
|
635
636
|
email: {
|
|
636
|
-
provider:
|
|
637
|
+
provider: "native" | "custom" | "smtp";
|
|
637
638
|
config?: Record<string, unknown> | undefined;
|
|
638
639
|
};
|
|
639
640
|
reviews: {
|
|
640
|
-
provider:
|
|
641
|
+
provider: "native" | "custom";
|
|
641
642
|
config?: Record<string, unknown> | undefined;
|
|
642
643
|
};
|
|
643
644
|
search: {
|
|
644
|
-
provider:
|
|
645
|
+
provider: "native" | "custom";
|
|
645
646
|
config?: Record<string, unknown> | undefined;
|
|
646
647
|
};
|
|
647
648
|
analytics: {
|
|
648
|
-
provider:
|
|
649
|
+
provider: "native" | "custom";
|
|
649
650
|
config?: Record<string, unknown> | undefined;
|
|
650
651
|
};
|
|
651
652
|
shipping: {
|
|
652
|
-
provider:
|
|
653
|
+
provider: "native" | "custom";
|
|
653
654
|
config?: Record<string, unknown> | undefined;
|
|
654
655
|
};
|
|
655
656
|
tax: {
|
|
656
|
-
provider:
|
|
657
|
+
provider: "native" | "custom";
|
|
657
658
|
config?: Record<string, unknown> | undefined;
|
|
658
659
|
};
|
|
659
660
|
ai: {
|
|
660
|
-
provider:
|
|
661
|
+
provider: "custom" | "none" | "anthropic";
|
|
661
662
|
config?: Record<string, unknown> | undefined;
|
|
662
663
|
};
|
|
663
664
|
orders?: {
|
|
@@ -761,35 +762,35 @@ declare const nymbalConfigSchema: z.ZodEffects<z.ZodObject<{
|
|
|
761
762
|
};
|
|
762
763
|
commerce: {
|
|
763
764
|
payments: {
|
|
764
|
-
provider:
|
|
765
|
+
provider: "native" | "stripe" | "custom";
|
|
765
766
|
config?: Record<string, unknown> | undefined;
|
|
766
767
|
};
|
|
767
768
|
email: {
|
|
768
|
-
provider:
|
|
769
|
+
provider: "native" | "custom" | "smtp";
|
|
769
770
|
config?: Record<string, unknown> | undefined;
|
|
770
771
|
};
|
|
771
772
|
reviews: {
|
|
772
|
-
provider:
|
|
773
|
+
provider: "native" | "custom";
|
|
773
774
|
config?: Record<string, unknown> | undefined;
|
|
774
775
|
};
|
|
775
776
|
search: {
|
|
776
|
-
provider:
|
|
777
|
+
provider: "native" | "custom";
|
|
777
778
|
config?: Record<string, unknown> | undefined;
|
|
778
779
|
};
|
|
779
780
|
analytics: {
|
|
780
|
-
provider:
|
|
781
|
+
provider: "native" | "custom";
|
|
781
782
|
config?: Record<string, unknown> | undefined;
|
|
782
783
|
};
|
|
783
784
|
shipping: {
|
|
784
|
-
provider:
|
|
785
|
+
provider: "native" | "custom";
|
|
785
786
|
config?: Record<string, unknown> | undefined;
|
|
786
787
|
};
|
|
787
788
|
tax: {
|
|
788
|
-
provider:
|
|
789
|
+
provider: "native" | "custom";
|
|
789
790
|
config?: Record<string, unknown> | undefined;
|
|
790
791
|
};
|
|
791
792
|
ai: {
|
|
792
|
-
provider:
|
|
793
|
+
provider: "custom" | "none" | "anthropic";
|
|
793
794
|
config?: Record<string, unknown> | undefined;
|
|
794
795
|
};
|
|
795
796
|
orders: {
|
|
@@ -856,35 +857,35 @@ declare const nymbalConfigSchema: z.ZodEffects<z.ZodObject<{
|
|
|
856
857
|
};
|
|
857
858
|
commerce: {
|
|
858
859
|
payments: {
|
|
859
|
-
provider:
|
|
860
|
+
provider: "native" | "stripe" | "custom";
|
|
860
861
|
config?: Record<string, unknown> | undefined;
|
|
861
862
|
};
|
|
862
863
|
email: {
|
|
863
|
-
provider:
|
|
864
|
+
provider: "native" | "custom" | "smtp";
|
|
864
865
|
config?: Record<string, unknown> | undefined;
|
|
865
866
|
};
|
|
866
867
|
reviews: {
|
|
867
|
-
provider:
|
|
868
|
+
provider: "native" | "custom";
|
|
868
869
|
config?: Record<string, unknown> | undefined;
|
|
869
870
|
};
|
|
870
871
|
search: {
|
|
871
|
-
provider:
|
|
872
|
+
provider: "native" | "custom";
|
|
872
873
|
config?: Record<string, unknown> | undefined;
|
|
873
874
|
};
|
|
874
875
|
analytics: {
|
|
875
|
-
provider:
|
|
876
|
+
provider: "native" | "custom";
|
|
876
877
|
config?: Record<string, unknown> | undefined;
|
|
877
878
|
};
|
|
878
879
|
shipping: {
|
|
879
|
-
provider:
|
|
880
|
+
provider: "native" | "custom";
|
|
880
881
|
config?: Record<string, unknown> | undefined;
|
|
881
882
|
};
|
|
882
883
|
tax: {
|
|
883
|
-
provider:
|
|
884
|
+
provider: "native" | "custom";
|
|
884
885
|
config?: Record<string, unknown> | undefined;
|
|
885
886
|
};
|
|
886
887
|
ai: {
|
|
887
|
-
provider:
|
|
888
|
+
provider: "custom" | "none" | "anthropic";
|
|
888
889
|
config?: Record<string, unknown> | undefined;
|
|
889
890
|
};
|
|
890
891
|
orders?: {
|
|
@@ -951,35 +952,35 @@ declare const nymbalConfigSchema: z.ZodEffects<z.ZodObject<{
|
|
|
951
952
|
};
|
|
952
953
|
commerce: {
|
|
953
954
|
payments: {
|
|
954
|
-
provider:
|
|
955
|
+
provider: "native" | "stripe" | "custom";
|
|
955
956
|
config?: Record<string, unknown> | undefined;
|
|
956
957
|
};
|
|
957
958
|
email: {
|
|
958
|
-
provider:
|
|
959
|
+
provider: "native" | "custom" | "smtp";
|
|
959
960
|
config?: Record<string, unknown> | undefined;
|
|
960
961
|
};
|
|
961
962
|
reviews: {
|
|
962
|
-
provider:
|
|
963
|
+
provider: "native" | "custom";
|
|
963
964
|
config?: Record<string, unknown> | undefined;
|
|
964
965
|
};
|
|
965
966
|
search: {
|
|
966
|
-
provider:
|
|
967
|
+
provider: "native" | "custom";
|
|
967
968
|
config?: Record<string, unknown> | undefined;
|
|
968
969
|
};
|
|
969
970
|
analytics: {
|
|
970
|
-
provider:
|
|
971
|
+
provider: "native" | "custom";
|
|
971
972
|
config?: Record<string, unknown> | undefined;
|
|
972
973
|
};
|
|
973
974
|
shipping: {
|
|
974
|
-
provider:
|
|
975
|
+
provider: "native" | "custom";
|
|
975
976
|
config?: Record<string, unknown> | undefined;
|
|
976
977
|
};
|
|
977
978
|
tax: {
|
|
978
|
-
provider:
|
|
979
|
+
provider: "native" | "custom";
|
|
979
980
|
config?: Record<string, unknown> | undefined;
|
|
980
981
|
};
|
|
981
982
|
ai: {
|
|
982
|
-
provider:
|
|
983
|
+
provider: "custom" | "none" | "anthropic";
|
|
983
984
|
config?: Record<string, unknown> | undefined;
|
|
984
985
|
};
|
|
985
986
|
orders: {
|
|
@@ -1046,35 +1047,35 @@ declare const nymbalConfigSchema: z.ZodEffects<z.ZodObject<{
|
|
|
1046
1047
|
};
|
|
1047
1048
|
commerce: {
|
|
1048
1049
|
payments: {
|
|
1049
|
-
provider:
|
|
1050
|
+
provider: "native" | "stripe" | "custom";
|
|
1050
1051
|
config?: Record<string, unknown> | undefined;
|
|
1051
1052
|
};
|
|
1052
1053
|
email: {
|
|
1053
|
-
provider:
|
|
1054
|
+
provider: "native" | "custom" | "smtp";
|
|
1054
1055
|
config?: Record<string, unknown> | undefined;
|
|
1055
1056
|
};
|
|
1056
1057
|
reviews: {
|
|
1057
|
-
provider:
|
|
1058
|
+
provider: "native" | "custom";
|
|
1058
1059
|
config?: Record<string, unknown> | undefined;
|
|
1059
1060
|
};
|
|
1060
1061
|
search: {
|
|
1061
|
-
provider:
|
|
1062
|
+
provider: "native" | "custom";
|
|
1062
1063
|
config?: Record<string, unknown> | undefined;
|
|
1063
1064
|
};
|
|
1064
1065
|
analytics: {
|
|
1065
|
-
provider:
|
|
1066
|
+
provider: "native" | "custom";
|
|
1066
1067
|
config?: Record<string, unknown> | undefined;
|
|
1067
1068
|
};
|
|
1068
1069
|
shipping: {
|
|
1069
|
-
provider:
|
|
1070
|
+
provider: "native" | "custom";
|
|
1070
1071
|
config?: Record<string, unknown> | undefined;
|
|
1071
1072
|
};
|
|
1072
1073
|
tax: {
|
|
1073
|
-
provider:
|
|
1074
|
+
provider: "native" | "custom";
|
|
1074
1075
|
config?: Record<string, unknown> | undefined;
|
|
1075
1076
|
};
|
|
1076
1077
|
ai: {
|
|
1077
|
-
provider:
|
|
1078
|
+
provider: "custom" | "none" | "anthropic";
|
|
1078
1079
|
config?: Record<string, unknown> | undefined;
|
|
1079
1080
|
};
|
|
1080
1081
|
orders?: {
|
|
@@ -1111,6 +1112,21 @@ declare function envOptional(key: string): string | undefined;
|
|
|
1111
1112
|
declare function envNumber(key: string, defaultValue?: number): number;
|
|
1112
1113
|
declare function envBool(key: string, defaultValue?: boolean): boolean;
|
|
1113
1114
|
|
|
1115
|
+
/**
|
|
1116
|
+
* The providers each commerce slot accepts. A provider that needs an SDK lives in an `@nymbalhq/adapter-*` package the
|
|
1117
|
+
* kernel loads only when the config names it; `custom` takes the adapter a project passes to `createApp`.
|
|
1118
|
+
*/
|
|
1119
|
+
declare const KNOWN_PROVIDERS: {
|
|
1120
|
+
readonly payments: readonly ["native", "stripe", "custom"];
|
|
1121
|
+
readonly email: readonly ["native", "smtp", "custom"];
|
|
1122
|
+
readonly reviews: readonly ["native", "custom"];
|
|
1123
|
+
readonly search: readonly ["native", "custom"];
|
|
1124
|
+
readonly analytics: readonly ["native", "custom"];
|
|
1125
|
+
readonly shipping: readonly ["native", "custom"];
|
|
1126
|
+
readonly tax: readonly ["native", "custom"];
|
|
1127
|
+
readonly ai: readonly ["none", "anthropic", "custom"];
|
|
1128
|
+
};
|
|
1129
|
+
|
|
1114
1130
|
interface LoadedConfig {
|
|
1115
1131
|
config: NymbalConfig;
|
|
1116
1132
|
path: string;
|
|
@@ -1119,4 +1135,4 @@ interface LoadedConfig {
|
|
|
1119
1135
|
declare function findConfigFile(startDir: string): string | null;
|
|
1120
1136
|
declare function loadConfig(startDir?: string): Promise<LoadedConfig>;
|
|
1121
1137
|
|
|
1122
|
-
export { DEFAULT_JWT_SECRET, type LoadedConfig, type NymbalConfig, type NymbalConfigInput, commerceSchema, defineConfig, deploymentSchema, env, envBool, envNumber, envOptional, featuresSchema, findConfigFile, httpSchema, infrastructureSchema, loadConfig, nymbalConfigSchema, securitySchema, storeSchema };
|
|
1138
|
+
export { DEFAULT_JWT_SECRET, KNOWN_PROVIDERS, type LoadedConfig, type NymbalConfig, type NymbalConfigInput, commerceSchema, defineConfig, deploymentSchema, env, envBool, envNumber, envOptional, featuresSchema, findConfigFile, httpSchema, infrastructureSchema, loadConfig, nymbalConfigSchema, securitySchema, storeSchema };
|
package/dist/index.js
CHANGED
|
@@ -37,6 +37,18 @@ function envBool(key, defaultValue = false) {
|
|
|
37
37
|
return raw === "true" || raw === "1" || raw === "yes" || raw === "on";
|
|
38
38
|
}
|
|
39
39
|
|
|
40
|
+
// src/known-providers.ts
|
|
41
|
+
var KNOWN_PROVIDERS = {
|
|
42
|
+
payments: ["native", "stripe", "custom"],
|
|
43
|
+
email: ["native", "smtp", "custom"],
|
|
44
|
+
reviews: ["native", "custom"],
|
|
45
|
+
search: ["native", "custom"],
|
|
46
|
+
analytics: ["native", "custom"],
|
|
47
|
+
shipping: ["native", "custom"],
|
|
48
|
+
tax: ["native", "custom"],
|
|
49
|
+
ai: ["none", "anthropic", "custom"]
|
|
50
|
+
};
|
|
51
|
+
|
|
40
52
|
// src/load.ts
|
|
41
53
|
import { existsSync } from "fs";
|
|
42
54
|
import { dirname, isAbsolute, resolve } from "path";
|
|
@@ -92,19 +104,26 @@ var securitySchema = z.object({
|
|
|
92
104
|
refreshTtl: z.string().regex(/^\d+(ms|s|m|h|d)$/, 'TTL must look like "7d"').default("7d")
|
|
93
105
|
}).default({})
|
|
94
106
|
});
|
|
95
|
-
|
|
96
|
-
|
|
97
|
-
|
|
98
|
-
|
|
107
|
+
function adapterBlock(slot, providers) {
|
|
108
|
+
const known = providers.map((p) => `'${p}'`).join(", ");
|
|
109
|
+
return z.object({
|
|
110
|
+
provider: z.enum(providers, {
|
|
111
|
+
errorMap: (issue, ctx) => issue.code === z.ZodIssueCode.invalid_enum_value ? {
|
|
112
|
+
message: `unknown ${slot} provider '${String(issue.received)}'; the ${slot} providers are ${known}`
|
|
113
|
+
} : { message: ctx.defaultError }
|
|
114
|
+
}),
|
|
115
|
+
config: z.record(z.string(), z.unknown()).optional()
|
|
116
|
+
});
|
|
117
|
+
}
|
|
99
118
|
var commerceSchema = z.object({
|
|
100
|
-
payments: adapterBlock,
|
|
101
|
-
email: adapterBlock,
|
|
102
|
-
reviews: adapterBlock,
|
|
103
|
-
search: adapterBlock,
|
|
104
|
-
analytics: adapterBlock,
|
|
105
|
-
shipping: adapterBlock,
|
|
106
|
-
tax: adapterBlock,
|
|
107
|
-
ai: adapterBlock,
|
|
119
|
+
payments: adapterBlock("payments", KNOWN_PROVIDERS.payments),
|
|
120
|
+
email: adapterBlock("email", KNOWN_PROVIDERS.email),
|
|
121
|
+
reviews: adapterBlock("reviews", KNOWN_PROVIDERS.reviews),
|
|
122
|
+
search: adapterBlock("search", KNOWN_PROVIDERS.search),
|
|
123
|
+
analytics: adapterBlock("analytics", KNOWN_PROVIDERS.analytics),
|
|
124
|
+
shipping: adapterBlock("shipping", KNOWN_PROVIDERS.shipping),
|
|
125
|
+
tax: adapterBlock("tax", KNOWN_PROVIDERS.tax),
|
|
126
|
+
ai: adapterBlock("ai", KNOWN_PROVIDERS.ai),
|
|
108
127
|
orders: z.object({
|
|
109
128
|
numberPrefix: z.string().min(1).default("NYM"),
|
|
110
129
|
numberStart: z.number().int().nonnegative().default(1e3)
|
|
@@ -166,6 +185,14 @@ var nymbalConfigSchema = z.object({
|
|
|
166
185
|
});
|
|
167
186
|
}
|
|
168
187
|
}
|
|
188
|
+
const email = cfg.commerce.email;
|
|
189
|
+
if (email.provider === "native" && email.config?.["transport"] === "smtp") {
|
|
190
|
+
ctx.addIssue({
|
|
191
|
+
code: z.ZodIssueCode.custom,
|
|
192
|
+
path: ["commerce", "email", "config", "transport"],
|
|
193
|
+
message: `the native email provider only prints to the console; for SMTP mail set email.provider to 'smtp' (@nymbalhq/adapter-smtp)`
|
|
194
|
+
});
|
|
195
|
+
}
|
|
169
196
|
if (cfg.security.adapter === "middleware") {
|
|
170
197
|
if (["aws", "gcp", "azure"].includes(cfg.infrastructure.cloud)) {
|
|
171
198
|
ctx.addIssue({
|
|
@@ -230,6 +257,7 @@ ${lines.join("\n")}`;
|
|
|
230
257
|
}
|
|
231
258
|
export {
|
|
232
259
|
DEFAULT_JWT_SECRET,
|
|
260
|
+
KNOWN_PROVIDERS,
|
|
233
261
|
commerceSchema,
|
|
234
262
|
defineConfig,
|
|
235
263
|
deploymentSchema,
|
package/dist/index.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"sources":["../src/define-config.ts","../src/env.ts","../src/load.ts","../src/schema.ts"],"sourcesContent":["import type { NymbalConfigInput } from './schema.js'\n\nexport function defineConfig<T extends NymbalConfigInput>(config: T): T {\n return config\n}\n","import { ConfigError } from '@nymbalhq/types'\n\nexport function env(key: string, defaultValue?: string): string {\n const value = process.env[key]\n if (value !== undefined && value !== '') return value\n if (defaultValue !== undefined) return defaultValue\n throw new ConfigError(`Missing required environment variable: ${key}`, {\n context: { key },\n })\n}\n\nexport function envOptional(key: string): string | undefined {\n const value = process.env[key]\n return value !== undefined && value !== '' ? value : undefined\n}\n\nexport function envNumber(key: string, defaultValue?: number): number {\n const raw = envOptional(key)\n if (raw === undefined) {\n if (defaultValue !== undefined) return defaultValue\n throw new ConfigError(`Missing required environment variable: ${key}`, { context: { key } })\n }\n const parsed = Number(raw)\n if (!Number.isFinite(parsed)) {\n throw new ConfigError(`Environment variable ${key} is not a valid number: ${raw}`, {\n context: { key, raw },\n })\n }\n return parsed\n}\n\nexport function envBool(key: string, defaultValue = false): boolean {\n const raw = envOptional(key)?.toLowerCase()\n if (raw === undefined) return defaultValue\n return raw === 'true' || raw === '1' || raw === 'yes' || raw === 'on'\n}\n","import { existsSync } from 'node:fs'\nimport { dirname, isAbsolute, resolve } from 'node:path'\nimport { pathToFileURL } from 'node:url'\nimport { createJiti } from 'jiti'\nimport { z } from 'zod'\nimport { ConfigError } from '@nymbalhq/types'\nimport { nymbalConfigSchema, type NymbalConfig } from './schema.js'\n\nconst CONFIG_FILE = 'nymbal.config.ts'\n\nexport interface LoadedConfig {\n config: NymbalConfig\n path: string\n projectRoot: string\n}\n\nexport function findConfigFile(startDir: string): string | null {\n let current = isAbsolute(startDir) ? startDir : resolve(startDir)\n while (true) {\n const candidate = resolve(current, CONFIG_FILE)\n if (existsSync(candidate)) return candidate\n const parent = dirname(current)\n if (parent === current) return null\n current = parent\n }\n}\n\nexport async function loadConfig(startDir: string = process.cwd()): Promise<LoadedConfig> {\n const path = findConfigFile(startDir)\n if (!path) {\n throw new ConfigError(\n `Could not find ${CONFIG_FILE} in ${startDir} or any parent directory.`,\n { context: { startDir } },\n )\n }\n\n const jiti = createJiti(pathToFileURL(path).href, { interopDefault: true })\n let raw: unknown\n try {\n raw = await jiti.import(path, { default: true })\n } catch (err) {\n throw new ConfigError(`Failed to load ${path}: ${(err as Error).message}`, {\n cause: err,\n context: { path },\n })\n }\n\n try {\n const config = nymbalConfigSchema.parse(raw)\n return { config, path, projectRoot: dirname(path) }\n } catch (err) {\n if (err instanceof z.ZodError) {\n throw new ConfigError(formatZodError(err, path), {\n cause: err,\n context: { path, issues: err.issues },\n })\n }\n throw err\n }\n}\n\nfunction formatZodError(err: z.ZodError, path: string): string {\n const lines = err.issues.map((issue) => {\n const at = issue.path.length > 0 ? issue.path.join('.') : '<root>'\n return ` • ${at}: ${issue.message}`\n })\n return `Invalid configuration in ${path}:\\n${lines.join('\\n')}`\n}\n","import { z } from 'zod'\n\nconst rateLimitRuleSchema = z.object({\n requests: z.number().int().positive(),\n window: z.string().regex(/^\\d+(ms|s|m|h)$/, 'window must look like \"60s\", \"5m\", \"1h\"'),\n action: z.enum(['block', 'challenge', 'throttle']),\n})\n\nconst rateLimitPathPattern = /^\\/[\\w\\-/*:]*$/\n\n/** The schema's JWT secret when none is configured: fine for development, refused in production. */\nexport const DEFAULT_JWT_SECRET = 'dev-secret-please-override-me-1234567890'\n\nexport const storeSchema = z.object({\n name: z.string().min(1),\n currency: z.string().length(3),\n locale: z.string().min(2),\n timezone: z.string().min(1),\n})\n\nexport const infrastructureSchema = z.object({\n cloud: z.enum(['local', 'aws', 'gcp', 'azure', 'docker']),\n commandStore: z.enum(['sqlite', 'postgres']),\n documentStore: z.enum(['in-memory', 'dynamodb', 'firestore', 'cosmosdb', 'postgres-jsonb']),\n eventBus: z.enum(['in-process', 'eventbridge', 'pubsub', 'service-bus', 'redis-streams']),\n compute: z.enum(['in-process', 'lambda', 'cloud-functions', 'azure-functions', 'worker-threads']),\n})\n\nexport const securitySchema = z.object({\n adapter: z.enum(['middleware', 'cloudflare', 'aws-waf', 'akamai']),\n rateLimit: z\n .record(\n z.string().regex(rateLimitPathPattern, {\n message: 'rate limit keys must start with \"/\" and use only letters, numbers, -, _, /, *, :',\n }),\n rateLimitRuleSchema,\n )\n .default({}),\n botProtection: z\n .object({\n mode: z.enum(['off', 'managed', 'strict']).default('off'),\n allowList: z.array(z.string()).default([]),\n })\n .default({ mode: 'off', allowList: [] }),\n headers: z\n .object({\n hsts: z.boolean().default(true),\n contentSecurityPolicy: z\n .union([z.enum(['strict', 'relaxed', 'off']), z.string()])\n .default('strict'),\n referrerPolicy: z.string().default('strict-origin-when-cross-origin'),\n xFrameOptions: z.enum(['deny', 'sameorigin']).default('deny'),\n })\n .default({}),\n csrf: z.boolean().default(true),\n auth: z\n .object({\n jwtSecret: z.string().min(16).default(DEFAULT_JWT_SECRET),\n accessTtl: z\n .string()\n .regex(/^\\d+(ms|s|m|h|d)$/, 'TTL must look like \"15m\"')\n .default('15m'),\n refreshTtl: z\n .string()\n .regex(/^\\d+(ms|s|m|h|d)$/, 'TTL must look like \"7d\"')\n .default('7d'),\n })\n .default({}),\n})\n\nconst adapterBlock = z.object({\n provider: z.string().min(1),\n config: z.record(z.string(), z.unknown()).optional(),\n})\n\nexport const commerceSchema = z.object({\n payments: adapterBlock,\n email: adapterBlock,\n reviews: adapterBlock,\n search: adapterBlock,\n analytics: adapterBlock,\n shipping: adapterBlock,\n tax: adapterBlock,\n ai: adapterBlock,\n orders: z\n .object({\n numberPrefix: z.string().min(1).default('NYM'),\n numberStart: z.number().int().nonnegative().default(1000),\n })\n .default({}),\n})\n\nexport const httpSchema = z.object({\n adapter: z.enum(['fastify', 'hono']).default('fastify'),\n port: z.number().int().positive().default(3001),\n host: z.string().default('0.0.0.0'),\n /** Whether `X-Forwarded-For` sets the client IP the rate limiter keys on; only behind a proxy you run. */\n trustProxy: z.boolean().default(false),\n cors: z\n .object({\n allowedOrigins: z\n .array(z.string())\n .default(['http://localhost:3000', 'http://localhost:4321']),\n credentials: z.boolean().default(true),\n })\n .default({}),\n})\n\nexport const deploymentSchema = z.object({\n strategy: z.enum(['standard', 'blue-green']).default('standard'),\n})\n\nexport const featuresSchema = z.object({\n staging: z.boolean().default(false),\n heartbeat: z.boolean().default(false),\n autoUpdates: z.boolean().default(false),\n})\n\nexport const nymbalConfigSchema = z\n .object({\n store: storeSchema,\n template: z.enum(['astro', 'nextjs']),\n infrastructure: infrastructureSchema,\n security: securitySchema,\n commerce: commerceSchema,\n http: httpSchema,\n deployment: deploymentSchema,\n features: featuresSchema.default({\n staging: false,\n heartbeat: false,\n autoUpdates: false,\n }),\n })\n .superRefine((cfg, ctx) => {\n // Local infrastructure restricts which document-store / event-bus options make sense.\n if (cfg.infrastructure.cloud === 'local') {\n if (!['in-memory', 'postgres-jsonb'].includes(cfg.infrastructure.documentStore)) {\n ctx.addIssue({\n code: z.ZodIssueCode.custom,\n path: ['infrastructure', 'documentStore'],\n message: `cloud=local only supports 'in-memory' or 'postgres-jsonb' for documentStore`,\n })\n }\n if (!['in-process', 'redis-streams'].includes(cfg.infrastructure.eventBus)) {\n ctx.addIssue({\n code: z.ZodIssueCode.custom,\n path: ['infrastructure', 'eventBus'],\n message: `cloud=local only supports 'in-process' or 'redis-streams' for eventBus`,\n })\n }\n if (!['in-process', 'worker-threads'].includes(cfg.infrastructure.compute)) {\n ctx.addIssue({\n code: z.ZodIssueCode.custom,\n path: ['infrastructure', 'compute'],\n message: `cloud=local only supports 'in-process' or 'worker-threads' for compute`,\n })\n }\n }\n\n // middleware security adapter is v0.1 and not intended for managed-cloud production deployments.\n if (cfg.security.adapter === 'middleware') {\n if (['aws', 'gcp', 'azure'].includes(cfg.infrastructure.cloud)) {\n ctx.addIssue({\n code: z.ZodIssueCode.custom,\n path: ['security', 'adapter'],\n message: `security.adapter='middleware' is intended for local/docker development. Use a WAF adapter ('cloudflare', 'aws-waf', 'akamai') for cloud=${cfg.infrastructure.cloud}.`,\n })\n }\n }\n })\n\nexport type NymbalConfigInput = z.input<typeof nymbalConfigSchema>\nexport type NymbalConfig = z.output<typeof nymbalConfigSchema>\n"],"mappings":"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","names":["z","ConfigError","ConfigError","z"]}
|
|
1
|
+
{"version":3,"sources":["../src/define-config.ts","../src/env.ts","../src/known-providers.ts","../src/load.ts","../src/schema.ts"],"sourcesContent":["import type { NymbalConfigInput } from './schema.js'\n\nexport function defineConfig<T extends NymbalConfigInput>(config: T): T {\n return config\n}\n","import { ConfigError } from '@nymbalhq/types'\n\nexport function env(key: string, defaultValue?: string): string {\n const value = process.env[key]\n if (value !== undefined && value !== '') return value\n if (defaultValue !== undefined) return defaultValue\n throw new ConfigError(`Missing required environment variable: ${key}`, {\n context: { key },\n })\n}\n\nexport function envOptional(key: string): string | undefined {\n const value = process.env[key]\n return value !== undefined && value !== '' ? value : undefined\n}\n\nexport function envNumber(key: string, defaultValue?: number): number {\n const raw = envOptional(key)\n if (raw === undefined) {\n if (defaultValue !== undefined) return defaultValue\n throw new ConfigError(`Missing required environment variable: ${key}`, { context: { key } })\n }\n const parsed = Number(raw)\n if (!Number.isFinite(parsed)) {\n throw new ConfigError(`Environment variable ${key} is not a valid number: ${raw}`, {\n context: { key, raw },\n })\n }\n return parsed\n}\n\nexport function envBool(key: string, defaultValue = false): boolean {\n const raw = envOptional(key)?.toLowerCase()\n if (raw === undefined) return defaultValue\n return raw === 'true' || raw === '1' || raw === 'yes' || raw === 'on'\n}\n","import type { CommerceSlot } from '@nymbalhq/types'\n\nexport type { CommerceSlot }\n\n/**\n * The providers each commerce slot accepts. A provider that needs an SDK lives in an `@nymbalhq/adapter-*` package the\n * kernel loads only when the config names it; `custom` takes the adapter a project passes to `createApp`.\n */\nexport const KNOWN_PROVIDERS = {\n payments: ['native', 'stripe', 'custom'],\n email: ['native', 'smtp', 'custom'],\n reviews: ['native', 'custom'],\n search: ['native', 'custom'],\n analytics: ['native', 'custom'],\n shipping: ['native', 'custom'],\n tax: ['native', 'custom'],\n ai: ['none', 'anthropic', 'custom'],\n} as const satisfies Readonly<Record<CommerceSlot, readonly [string, ...string[]]>>\n","import { existsSync } from 'node:fs'\nimport { dirname, isAbsolute, resolve } from 'node:path'\nimport { pathToFileURL } from 'node:url'\nimport { createJiti } from 'jiti'\nimport { z } from 'zod'\nimport { ConfigError } from '@nymbalhq/types'\nimport { nymbalConfigSchema, type NymbalConfig } from './schema.js'\n\nconst CONFIG_FILE = 'nymbal.config.ts'\n\nexport interface LoadedConfig {\n config: NymbalConfig\n path: string\n projectRoot: string\n}\n\nexport function findConfigFile(startDir: string): string | null {\n let current = isAbsolute(startDir) ? startDir : resolve(startDir)\n while (true) {\n const candidate = resolve(current, CONFIG_FILE)\n if (existsSync(candidate)) return candidate\n const parent = dirname(current)\n if (parent === current) return null\n current = parent\n }\n}\n\nexport async function loadConfig(startDir: string = process.cwd()): Promise<LoadedConfig> {\n const path = findConfigFile(startDir)\n if (!path) {\n throw new ConfigError(\n `Could not find ${CONFIG_FILE} in ${startDir} or any parent directory.`,\n { context: { startDir } },\n )\n }\n\n const jiti = createJiti(pathToFileURL(path).href, { interopDefault: true })\n let raw: unknown\n try {\n raw = await jiti.import(path, { default: true })\n } catch (err) {\n throw new ConfigError(`Failed to load ${path}: ${(err as Error).message}`, {\n cause: err,\n context: { path },\n })\n }\n\n try {\n const config = nymbalConfigSchema.parse(raw)\n return { config, path, projectRoot: dirname(path) }\n } catch (err) {\n if (err instanceof z.ZodError) {\n throw new ConfigError(formatZodError(err, path), {\n cause: err,\n context: { path, issues: err.issues },\n })\n }\n throw err\n }\n}\n\nfunction formatZodError(err: z.ZodError, path: string): string {\n const lines = err.issues.map((issue) => {\n const at = issue.path.length > 0 ? issue.path.join('.') : '<root>'\n return ` • ${at}: ${issue.message}`\n })\n return `Invalid configuration in ${path}:\\n${lines.join('\\n')}`\n}\n","import { z } from 'zod'\nimport { KNOWN_PROVIDERS, type CommerceSlot } from './known-providers.js'\n\nconst rateLimitRuleSchema = z.object({\n requests: z.number().int().positive(),\n window: z.string().regex(/^\\d+(ms|s|m|h)$/, 'window must look like \"60s\", \"5m\", \"1h\"'),\n action: z.enum(['block', 'challenge', 'throttle']),\n})\n\nconst rateLimitPathPattern = /^\\/[\\w\\-/*:]*$/\n\n/** The schema's JWT secret when none is configured: fine for development, refused in production. */\nexport const DEFAULT_JWT_SECRET = 'dev-secret-please-override-me-1234567890'\n\nexport const storeSchema = z.object({\n name: z.string().min(1),\n currency: z.string().length(3),\n locale: z.string().min(2),\n timezone: z.string().min(1),\n})\n\nexport const infrastructureSchema = z.object({\n cloud: z.enum(['local', 'aws', 'gcp', 'azure', 'docker']),\n commandStore: z.enum(['sqlite', 'postgres']),\n documentStore: z.enum(['in-memory', 'dynamodb', 'firestore', 'cosmosdb', 'postgres-jsonb']),\n eventBus: z.enum(['in-process', 'eventbridge', 'pubsub', 'service-bus', 'redis-streams']),\n compute: z.enum(['in-process', 'lambda', 'cloud-functions', 'azure-functions', 'worker-threads']),\n})\n\nexport const securitySchema = z.object({\n adapter: z.enum(['middleware', 'cloudflare', 'aws-waf', 'akamai']),\n rateLimit: z\n .record(\n z.string().regex(rateLimitPathPattern, {\n message: 'rate limit keys must start with \"/\" and use only letters, numbers, -, _, /, *, :',\n }),\n rateLimitRuleSchema,\n )\n .default({}),\n botProtection: z\n .object({\n mode: z.enum(['off', 'managed', 'strict']).default('off'),\n allowList: z.array(z.string()).default([]),\n })\n .default({ mode: 'off', allowList: [] }),\n headers: z\n .object({\n hsts: z.boolean().default(true),\n contentSecurityPolicy: z\n .union([z.enum(['strict', 'relaxed', 'off']), z.string()])\n .default('strict'),\n referrerPolicy: z.string().default('strict-origin-when-cross-origin'),\n xFrameOptions: z.enum(['deny', 'sameorigin']).default('deny'),\n })\n .default({}),\n csrf: z.boolean().default(true),\n auth: z\n .object({\n jwtSecret: z.string().min(16).default(DEFAULT_JWT_SECRET),\n accessTtl: z\n .string()\n .regex(/^\\d+(ms|s|m|h|d)$/, 'TTL must look like \"15m\"')\n .default('15m'),\n refreshTtl: z\n .string()\n .regex(/^\\d+(ms|s|m|h|d)$/, 'TTL must look like \"7d\"')\n .default('7d'),\n })\n .default({}),\n})\n\n/** A slot's block: its provider must be one the slot knows, and an unknown one is named with the slot's list. */\nfunction adapterBlock<const P extends readonly [string, ...string[]]>(\n slot: CommerceSlot,\n providers: P,\n) {\n const known = providers.map((p) => `'${p}'`).join(', ')\n return z.object({\n provider: z.enum(providers, {\n errorMap: (issue, ctx) =>\n issue.code === z.ZodIssueCode.invalid_enum_value\n ? {\n message: `unknown ${slot} provider '${String(issue.received)}'; the ${slot} providers are ${known}`,\n }\n : { message: ctx.defaultError },\n }),\n config: z.record(z.string(), z.unknown()).optional(),\n })\n}\n\nexport const commerceSchema = z.object({\n payments: adapterBlock('payments', KNOWN_PROVIDERS.payments),\n email: adapterBlock('email', KNOWN_PROVIDERS.email),\n reviews: adapterBlock('reviews', KNOWN_PROVIDERS.reviews),\n search: adapterBlock('search', KNOWN_PROVIDERS.search),\n analytics: adapterBlock('analytics', KNOWN_PROVIDERS.analytics),\n shipping: adapterBlock('shipping', KNOWN_PROVIDERS.shipping),\n tax: adapterBlock('tax', KNOWN_PROVIDERS.tax),\n ai: adapterBlock('ai', KNOWN_PROVIDERS.ai),\n orders: z\n .object({\n numberPrefix: z.string().min(1).default('NYM'),\n numberStart: z.number().int().nonnegative().default(1000),\n })\n .default({}),\n})\n\nexport const httpSchema = z.object({\n adapter: z.enum(['fastify', 'hono']).default('fastify'),\n port: z.number().int().positive().default(3001),\n host: z.string().default('0.0.0.0'),\n /** Whether `X-Forwarded-For` sets the client IP the rate limiter keys on; only behind a proxy you run. */\n trustProxy: z.boolean().default(false),\n cors: z\n .object({\n allowedOrigins: z\n .array(z.string())\n .default(['http://localhost:3000', 'http://localhost:4321']),\n credentials: z.boolean().default(true),\n })\n .default({}),\n})\n\nexport const deploymentSchema = z.object({\n strategy: z.enum(['standard', 'blue-green']).default('standard'),\n})\n\nexport const featuresSchema = z.object({\n staging: z.boolean().default(false),\n heartbeat: z.boolean().default(false),\n autoUpdates: z.boolean().default(false),\n})\n\nexport const nymbalConfigSchema = z\n .object({\n store: storeSchema,\n template: z.enum(['astro', 'nextjs']),\n infrastructure: infrastructureSchema,\n security: securitySchema,\n commerce: commerceSchema,\n http: httpSchema,\n deployment: deploymentSchema,\n features: featuresSchema.default({\n staging: false,\n heartbeat: false,\n autoUpdates: false,\n }),\n })\n .superRefine((cfg, ctx) => {\n // Local infrastructure restricts which document-store / event-bus options make sense.\n if (cfg.infrastructure.cloud === 'local') {\n if (!['in-memory', 'postgres-jsonb'].includes(cfg.infrastructure.documentStore)) {\n ctx.addIssue({\n code: z.ZodIssueCode.custom,\n path: ['infrastructure', 'documentStore'],\n message: `cloud=local only supports 'in-memory' or 'postgres-jsonb' for documentStore`,\n })\n }\n if (!['in-process', 'redis-streams'].includes(cfg.infrastructure.eventBus)) {\n ctx.addIssue({\n code: z.ZodIssueCode.custom,\n path: ['infrastructure', 'eventBus'],\n message: `cloud=local only supports 'in-process' or 'redis-streams' for eventBus`,\n })\n }\n if (!['in-process', 'worker-threads'].includes(cfg.infrastructure.compute)) {\n ctx.addIssue({\n code: z.ZodIssueCode.custom,\n path: ['infrastructure', 'compute'],\n message: `cloud=local only supports 'in-process' or 'worker-threads' for compute`,\n })\n }\n }\n\n // SMTP left the kernel for @nymbalhq/adapter-smtp; a native block still asking for it would print to the console.\n const email = cfg.commerce.email\n if (email.provider === 'native' && email.config?.['transport'] === 'smtp') {\n ctx.addIssue({\n code: z.ZodIssueCode.custom,\n path: ['commerce', 'email', 'config', 'transport'],\n message: `the native email provider only prints to the console; for SMTP mail set email.provider to 'smtp' (@nymbalhq/adapter-smtp)`,\n })\n }\n\n // middleware security adapter is v0.1 and not intended for managed-cloud production deployments.\n if (cfg.security.adapter === 'middleware') {\n if (['aws', 'gcp', 'azure'].includes(cfg.infrastructure.cloud)) {\n ctx.addIssue({\n code: z.ZodIssueCode.custom,\n path: ['security', 'adapter'],\n message: `security.adapter='middleware' is intended for local/docker development. Use a WAF adapter ('cloudflare', 'aws-waf', 'akamai') for cloud=${cfg.infrastructure.cloud}.`,\n })\n }\n }\n })\n\nexport type NymbalConfigInput = z.input<typeof nymbalConfigSchema>\nexport type NymbalConfig = z.output<typeof nymbalConfigSchema>\n"],"mappings":"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","names":["z","ConfigError","ConfigError","z"]}
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@nymbalhq/config",
|
|
3
|
-
"version": "0.
|
|
3
|
+
"version": "1.0.0",
|
|
4
4
|
"description": "Typed configuration surface for Nymbal",
|
|
5
5
|
"license": "MIT",
|
|
6
6
|
"repository": {
|
|
@@ -29,7 +29,7 @@
|
|
|
29
29
|
"dependencies": {
|
|
30
30
|
"jiti": "^2.4.0",
|
|
31
31
|
"zod": "^3.23.8",
|
|
32
|
-
"@nymbalhq/types": "0.
|
|
32
|
+
"@nymbalhq/types": "1.0.0"
|
|
33
33
|
},
|
|
34
34
|
"devDependencies": {
|
|
35
35
|
"tsup": "^8.3.5",
|