@better-webhook/cli 3.8.0 → 3.10.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (59) hide show
  1. package/LICENSE +0 -1
  2. package/dist/_binary_entry.js +29 -0
  3. package/dist/commands/capture.d.ts +2 -0
  4. package/dist/commands/capture.js +33 -0
  5. package/dist/commands/captures.d.ts +2 -0
  6. package/dist/commands/captures.js +316 -0
  7. package/dist/commands/dashboard.d.ts +2 -0
  8. package/dist/commands/dashboard.js +70 -0
  9. package/dist/commands/index.d.ts +6 -0
  10. package/dist/commands/index.js +6 -0
  11. package/dist/commands/replay.d.ts +2 -0
  12. package/dist/commands/replay.js +140 -0
  13. package/dist/commands/run.d.ts +2 -0
  14. package/dist/commands/run.js +182 -0
  15. package/dist/commands/templates.d.ts +2 -0
  16. package/dist/commands/templates.js +285 -0
  17. package/dist/core/capture-server.d.ts +37 -0
  18. package/dist/core/capture-server.js +400 -0
  19. package/dist/core/capture-server.test.d.ts +1 -0
  20. package/dist/core/capture-server.test.js +86 -0
  21. package/dist/core/cli-version.d.ts +1 -0
  22. package/dist/core/cli-version.js +30 -0
  23. package/dist/core/cli-version.test.d.ts +1 -0
  24. package/dist/core/cli-version.test.js +42 -0
  25. package/dist/core/dashboard-api.d.ts +8 -0
  26. package/dist/core/dashboard-api.js +333 -0
  27. package/dist/core/dashboard-server.d.ts +24 -0
  28. package/dist/core/dashboard-server.js +224 -0
  29. package/dist/core/debug-output.d.ts +3 -0
  30. package/dist/core/debug-output.js +69 -0
  31. package/dist/core/debug-verify.d.ts +25 -0
  32. package/dist/core/debug-verify.js +253 -0
  33. package/dist/core/executor.d.ts +11 -0
  34. package/dist/core/executor.js +152 -0
  35. package/dist/core/index.d.ts +5 -0
  36. package/dist/core/index.js +5 -0
  37. package/dist/core/replay-engine.d.ts +20 -0
  38. package/dist/core/replay-engine.js +293 -0
  39. package/dist/core/replay-engine.test.d.ts +1 -0
  40. package/dist/core/replay-engine.test.js +482 -0
  41. package/dist/core/runtime-paths.d.ts +2 -0
  42. package/dist/core/runtime-paths.js +65 -0
  43. package/dist/core/runtime-paths.test.d.ts +1 -0
  44. package/dist/core/runtime-paths.test.js +50 -0
  45. package/dist/core/signature.d.ts +25 -0
  46. package/dist/core/signature.js +224 -0
  47. package/dist/core/signature.test.d.ts +1 -0
  48. package/dist/core/signature.test.js +38 -0
  49. package/dist/core/template-manager.d.ts +33 -0
  50. package/dist/core/template-manager.js +313 -0
  51. package/dist/core/template-manager.test.d.ts +1 -0
  52. package/dist/core/template-manager.test.js +236 -0
  53. package/dist/index.cjs +3472 -262
  54. package/dist/index.d.cts +2 -1
  55. package/dist/index.d.ts +2 -1
  56. package/dist/index.js +3509 -276
  57. package/dist/types/index.d.ts +312 -0
  58. package/dist/types/index.js +87 -0
  59. package/package.json +1 -1
package/dist/index.cjs CHANGED
@@ -6,6 +6,9 @@ var __getOwnPropDesc = Object.getOwnPropertyDescriptor;
6
6
  var __getOwnPropNames = Object.getOwnPropertyNames;
7
7
  var __getProtoOf = Object.getPrototypeOf;
8
8
  var __hasOwnProp = Object.prototype.hasOwnProperty;
9
+ var __commonJS = (cb, mod) => function __require() {
10
+ return mod || (0, cb[__getOwnPropNames(cb)[0]])((mod = { exports: {} }).exports, mod), mod.exports;
11
+ };
9
12
  var __copyProps = (to, from, except, desc) => {
10
13
  if (from && typeof from === "object" || typeof from === "function") {
11
14
  for (let key of __getOwnPropNames(from))
@@ -23,16 +26,3110 @@ var __toESM = (mod, isNodeMode, target) => (target = mod != null ? __create(__ge
23
26
  mod
24
27
  ));
25
28
 
29
+ // ../../node_modules/.pnpm/cli-spinners@2.9.2/node_modules/cli-spinners/spinners.json
30
+ var require_spinners = __commonJS({
31
+ "../../node_modules/.pnpm/cli-spinners@2.9.2/node_modules/cli-spinners/spinners.json"(exports2, module2) {
32
+ module2.exports = {
33
+ dots: {
34
+ interval: 80,
35
+ frames: [
36
+ "\u280B",
37
+ "\u2819",
38
+ "\u2839",
39
+ "\u2838",
40
+ "\u283C",
41
+ "\u2834",
42
+ "\u2826",
43
+ "\u2827",
44
+ "\u2807",
45
+ "\u280F"
46
+ ]
47
+ },
48
+ dots2: {
49
+ interval: 80,
50
+ frames: [
51
+ "\u28FE",
52
+ "\u28FD",
53
+ "\u28FB",
54
+ "\u28BF",
55
+ "\u287F",
56
+ "\u28DF",
57
+ "\u28EF",
58
+ "\u28F7"
59
+ ]
60
+ },
61
+ dots3: {
62
+ interval: 80,
63
+ frames: [
64
+ "\u280B",
65
+ "\u2819",
66
+ "\u281A",
67
+ "\u281E",
68
+ "\u2816",
69
+ "\u2826",
70
+ "\u2834",
71
+ "\u2832",
72
+ "\u2833",
73
+ "\u2813"
74
+ ]
75
+ },
76
+ dots4: {
77
+ interval: 80,
78
+ frames: [
79
+ "\u2804",
80
+ "\u2806",
81
+ "\u2807",
82
+ "\u280B",
83
+ "\u2819",
84
+ "\u2838",
85
+ "\u2830",
86
+ "\u2820",
87
+ "\u2830",
88
+ "\u2838",
89
+ "\u2819",
90
+ "\u280B",
91
+ "\u2807",
92
+ "\u2806"
93
+ ]
94
+ },
95
+ dots5: {
96
+ interval: 80,
97
+ frames: [
98
+ "\u280B",
99
+ "\u2819",
100
+ "\u281A",
101
+ "\u2812",
102
+ "\u2802",
103
+ "\u2802",
104
+ "\u2812",
105
+ "\u2832",
106
+ "\u2834",
107
+ "\u2826",
108
+ "\u2816",
109
+ "\u2812",
110
+ "\u2810",
111
+ "\u2810",
112
+ "\u2812",
113
+ "\u2813",
114
+ "\u280B"
115
+ ]
116
+ },
117
+ dots6: {
118
+ interval: 80,
119
+ frames: [
120
+ "\u2801",
121
+ "\u2809",
122
+ "\u2819",
123
+ "\u281A",
124
+ "\u2812",
125
+ "\u2802",
126
+ "\u2802",
127
+ "\u2812",
128
+ "\u2832",
129
+ "\u2834",
130
+ "\u2824",
131
+ "\u2804",
132
+ "\u2804",
133
+ "\u2824",
134
+ "\u2834",
135
+ "\u2832",
136
+ "\u2812",
137
+ "\u2802",
138
+ "\u2802",
139
+ "\u2812",
140
+ "\u281A",
141
+ "\u2819",
142
+ "\u2809",
143
+ "\u2801"
144
+ ]
145
+ },
146
+ dots7: {
147
+ interval: 80,
148
+ frames: [
149
+ "\u2808",
150
+ "\u2809",
151
+ "\u280B",
152
+ "\u2813",
153
+ "\u2812",
154
+ "\u2810",
155
+ "\u2810",
156
+ "\u2812",
157
+ "\u2816",
158
+ "\u2826",
159
+ "\u2824",
160
+ "\u2820",
161
+ "\u2820",
162
+ "\u2824",
163
+ "\u2826",
164
+ "\u2816",
165
+ "\u2812",
166
+ "\u2810",
167
+ "\u2810",
168
+ "\u2812",
169
+ "\u2813",
170
+ "\u280B",
171
+ "\u2809",
172
+ "\u2808"
173
+ ]
174
+ },
175
+ dots8: {
176
+ interval: 80,
177
+ frames: [
178
+ "\u2801",
179
+ "\u2801",
180
+ "\u2809",
181
+ "\u2819",
182
+ "\u281A",
183
+ "\u2812",
184
+ "\u2802",
185
+ "\u2802",
186
+ "\u2812",
187
+ "\u2832",
188
+ "\u2834",
189
+ "\u2824",
190
+ "\u2804",
191
+ "\u2804",
192
+ "\u2824",
193
+ "\u2820",
194
+ "\u2820",
195
+ "\u2824",
196
+ "\u2826",
197
+ "\u2816",
198
+ "\u2812",
199
+ "\u2810",
200
+ "\u2810",
201
+ "\u2812",
202
+ "\u2813",
203
+ "\u280B",
204
+ "\u2809",
205
+ "\u2808",
206
+ "\u2808"
207
+ ]
208
+ },
209
+ dots9: {
210
+ interval: 80,
211
+ frames: [
212
+ "\u28B9",
213
+ "\u28BA",
214
+ "\u28BC",
215
+ "\u28F8",
216
+ "\u28C7",
217
+ "\u2867",
218
+ "\u2857",
219
+ "\u284F"
220
+ ]
221
+ },
222
+ dots10: {
223
+ interval: 80,
224
+ frames: [
225
+ "\u2884",
226
+ "\u2882",
227
+ "\u2881",
228
+ "\u2841",
229
+ "\u2848",
230
+ "\u2850",
231
+ "\u2860"
232
+ ]
233
+ },
234
+ dots11: {
235
+ interval: 100,
236
+ frames: [
237
+ "\u2801",
238
+ "\u2802",
239
+ "\u2804",
240
+ "\u2840",
241
+ "\u2880",
242
+ "\u2820",
243
+ "\u2810",
244
+ "\u2808"
245
+ ]
246
+ },
247
+ dots12: {
248
+ interval: 80,
249
+ frames: [
250
+ "\u2880\u2800",
251
+ "\u2840\u2800",
252
+ "\u2804\u2800",
253
+ "\u2882\u2800",
254
+ "\u2842\u2800",
255
+ "\u2805\u2800",
256
+ "\u2883\u2800",
257
+ "\u2843\u2800",
258
+ "\u280D\u2800",
259
+ "\u288B\u2800",
260
+ "\u284B\u2800",
261
+ "\u280D\u2801",
262
+ "\u288B\u2801",
263
+ "\u284B\u2801",
264
+ "\u280D\u2809",
265
+ "\u280B\u2809",
266
+ "\u280B\u2809",
267
+ "\u2809\u2819",
268
+ "\u2809\u2819",
269
+ "\u2809\u2829",
270
+ "\u2808\u2899",
271
+ "\u2808\u2859",
272
+ "\u2888\u2829",
273
+ "\u2840\u2899",
274
+ "\u2804\u2859",
275
+ "\u2882\u2829",
276
+ "\u2842\u2898",
277
+ "\u2805\u2858",
278
+ "\u2883\u2828",
279
+ "\u2843\u2890",
280
+ "\u280D\u2850",
281
+ "\u288B\u2820",
282
+ "\u284B\u2880",
283
+ "\u280D\u2841",
284
+ "\u288B\u2801",
285
+ "\u284B\u2801",
286
+ "\u280D\u2809",
287
+ "\u280B\u2809",
288
+ "\u280B\u2809",
289
+ "\u2809\u2819",
290
+ "\u2809\u2819",
291
+ "\u2809\u2829",
292
+ "\u2808\u2899",
293
+ "\u2808\u2859",
294
+ "\u2808\u2829",
295
+ "\u2800\u2899",
296
+ "\u2800\u2859",
297
+ "\u2800\u2829",
298
+ "\u2800\u2898",
299
+ "\u2800\u2858",
300
+ "\u2800\u2828",
301
+ "\u2800\u2890",
302
+ "\u2800\u2850",
303
+ "\u2800\u2820",
304
+ "\u2800\u2880",
305
+ "\u2800\u2840"
306
+ ]
307
+ },
308
+ dots13: {
309
+ interval: 80,
310
+ frames: [
311
+ "\u28FC",
312
+ "\u28F9",
313
+ "\u28BB",
314
+ "\u283F",
315
+ "\u285F",
316
+ "\u28CF",
317
+ "\u28E7",
318
+ "\u28F6"
319
+ ]
320
+ },
321
+ dots8Bit: {
322
+ interval: 80,
323
+ frames: [
324
+ "\u2800",
325
+ "\u2801",
326
+ "\u2802",
327
+ "\u2803",
328
+ "\u2804",
329
+ "\u2805",
330
+ "\u2806",
331
+ "\u2807",
332
+ "\u2840",
333
+ "\u2841",
334
+ "\u2842",
335
+ "\u2843",
336
+ "\u2844",
337
+ "\u2845",
338
+ "\u2846",
339
+ "\u2847",
340
+ "\u2808",
341
+ "\u2809",
342
+ "\u280A",
343
+ "\u280B",
344
+ "\u280C",
345
+ "\u280D",
346
+ "\u280E",
347
+ "\u280F",
348
+ "\u2848",
349
+ "\u2849",
350
+ "\u284A",
351
+ "\u284B",
352
+ "\u284C",
353
+ "\u284D",
354
+ "\u284E",
355
+ "\u284F",
356
+ "\u2810",
357
+ "\u2811",
358
+ "\u2812",
359
+ "\u2813",
360
+ "\u2814",
361
+ "\u2815",
362
+ "\u2816",
363
+ "\u2817",
364
+ "\u2850",
365
+ "\u2851",
366
+ "\u2852",
367
+ "\u2853",
368
+ "\u2854",
369
+ "\u2855",
370
+ "\u2856",
371
+ "\u2857",
372
+ "\u2818",
373
+ "\u2819",
374
+ "\u281A",
375
+ "\u281B",
376
+ "\u281C",
377
+ "\u281D",
378
+ "\u281E",
379
+ "\u281F",
380
+ "\u2858",
381
+ "\u2859",
382
+ "\u285A",
383
+ "\u285B",
384
+ "\u285C",
385
+ "\u285D",
386
+ "\u285E",
387
+ "\u285F",
388
+ "\u2820",
389
+ "\u2821",
390
+ "\u2822",
391
+ "\u2823",
392
+ "\u2824",
393
+ "\u2825",
394
+ "\u2826",
395
+ "\u2827",
396
+ "\u2860",
397
+ "\u2861",
398
+ "\u2862",
399
+ "\u2863",
400
+ "\u2864",
401
+ "\u2865",
402
+ "\u2866",
403
+ "\u2867",
404
+ "\u2828",
405
+ "\u2829",
406
+ "\u282A",
407
+ "\u282B",
408
+ "\u282C",
409
+ "\u282D",
410
+ "\u282E",
411
+ "\u282F",
412
+ "\u2868",
413
+ "\u2869",
414
+ "\u286A",
415
+ "\u286B",
416
+ "\u286C",
417
+ "\u286D",
418
+ "\u286E",
419
+ "\u286F",
420
+ "\u2830",
421
+ "\u2831",
422
+ "\u2832",
423
+ "\u2833",
424
+ "\u2834",
425
+ "\u2835",
426
+ "\u2836",
427
+ "\u2837",
428
+ "\u2870",
429
+ "\u2871",
430
+ "\u2872",
431
+ "\u2873",
432
+ "\u2874",
433
+ "\u2875",
434
+ "\u2876",
435
+ "\u2877",
436
+ "\u2838",
437
+ "\u2839",
438
+ "\u283A",
439
+ "\u283B",
440
+ "\u283C",
441
+ "\u283D",
442
+ "\u283E",
443
+ "\u283F",
444
+ "\u2878",
445
+ "\u2879",
446
+ "\u287A",
447
+ "\u287B",
448
+ "\u287C",
449
+ "\u287D",
450
+ "\u287E",
451
+ "\u287F",
452
+ "\u2880",
453
+ "\u2881",
454
+ "\u2882",
455
+ "\u2883",
456
+ "\u2884",
457
+ "\u2885",
458
+ "\u2886",
459
+ "\u2887",
460
+ "\u28C0",
461
+ "\u28C1",
462
+ "\u28C2",
463
+ "\u28C3",
464
+ "\u28C4",
465
+ "\u28C5",
466
+ "\u28C6",
467
+ "\u28C7",
468
+ "\u2888",
469
+ "\u2889",
470
+ "\u288A",
471
+ "\u288B",
472
+ "\u288C",
473
+ "\u288D",
474
+ "\u288E",
475
+ "\u288F",
476
+ "\u28C8",
477
+ "\u28C9",
478
+ "\u28CA",
479
+ "\u28CB",
480
+ "\u28CC",
481
+ "\u28CD",
482
+ "\u28CE",
483
+ "\u28CF",
484
+ "\u2890",
485
+ "\u2891",
486
+ "\u2892",
487
+ "\u2893",
488
+ "\u2894",
489
+ "\u2895",
490
+ "\u2896",
491
+ "\u2897",
492
+ "\u28D0",
493
+ "\u28D1",
494
+ "\u28D2",
495
+ "\u28D3",
496
+ "\u28D4",
497
+ "\u28D5",
498
+ "\u28D6",
499
+ "\u28D7",
500
+ "\u2898",
501
+ "\u2899",
502
+ "\u289A",
503
+ "\u289B",
504
+ "\u289C",
505
+ "\u289D",
506
+ "\u289E",
507
+ "\u289F",
508
+ "\u28D8",
509
+ "\u28D9",
510
+ "\u28DA",
511
+ "\u28DB",
512
+ "\u28DC",
513
+ "\u28DD",
514
+ "\u28DE",
515
+ "\u28DF",
516
+ "\u28A0",
517
+ "\u28A1",
518
+ "\u28A2",
519
+ "\u28A3",
520
+ "\u28A4",
521
+ "\u28A5",
522
+ "\u28A6",
523
+ "\u28A7",
524
+ "\u28E0",
525
+ "\u28E1",
526
+ "\u28E2",
527
+ "\u28E3",
528
+ "\u28E4",
529
+ "\u28E5",
530
+ "\u28E6",
531
+ "\u28E7",
532
+ "\u28A8",
533
+ "\u28A9",
534
+ "\u28AA",
535
+ "\u28AB",
536
+ "\u28AC",
537
+ "\u28AD",
538
+ "\u28AE",
539
+ "\u28AF",
540
+ "\u28E8",
541
+ "\u28E9",
542
+ "\u28EA",
543
+ "\u28EB",
544
+ "\u28EC",
545
+ "\u28ED",
546
+ "\u28EE",
547
+ "\u28EF",
548
+ "\u28B0",
549
+ "\u28B1",
550
+ "\u28B2",
551
+ "\u28B3",
552
+ "\u28B4",
553
+ "\u28B5",
554
+ "\u28B6",
555
+ "\u28B7",
556
+ "\u28F0",
557
+ "\u28F1",
558
+ "\u28F2",
559
+ "\u28F3",
560
+ "\u28F4",
561
+ "\u28F5",
562
+ "\u28F6",
563
+ "\u28F7",
564
+ "\u28B8",
565
+ "\u28B9",
566
+ "\u28BA",
567
+ "\u28BB",
568
+ "\u28BC",
569
+ "\u28BD",
570
+ "\u28BE",
571
+ "\u28BF",
572
+ "\u28F8",
573
+ "\u28F9",
574
+ "\u28FA",
575
+ "\u28FB",
576
+ "\u28FC",
577
+ "\u28FD",
578
+ "\u28FE",
579
+ "\u28FF"
580
+ ]
581
+ },
582
+ sand: {
583
+ interval: 80,
584
+ frames: [
585
+ "\u2801",
586
+ "\u2802",
587
+ "\u2804",
588
+ "\u2840",
589
+ "\u2848",
590
+ "\u2850",
591
+ "\u2860",
592
+ "\u28C0",
593
+ "\u28C1",
594
+ "\u28C2",
595
+ "\u28C4",
596
+ "\u28CC",
597
+ "\u28D4",
598
+ "\u28E4",
599
+ "\u28E5",
600
+ "\u28E6",
601
+ "\u28EE",
602
+ "\u28F6",
603
+ "\u28F7",
604
+ "\u28FF",
605
+ "\u287F",
606
+ "\u283F",
607
+ "\u289F",
608
+ "\u281F",
609
+ "\u285B",
610
+ "\u281B",
611
+ "\u282B",
612
+ "\u288B",
613
+ "\u280B",
614
+ "\u280D",
615
+ "\u2849",
616
+ "\u2809",
617
+ "\u2811",
618
+ "\u2821",
619
+ "\u2881"
620
+ ]
621
+ },
622
+ line: {
623
+ interval: 130,
624
+ frames: [
625
+ "-",
626
+ "\\",
627
+ "|",
628
+ "/"
629
+ ]
630
+ },
631
+ line2: {
632
+ interval: 100,
633
+ frames: [
634
+ "\u2802",
635
+ "-",
636
+ "\u2013",
637
+ "\u2014",
638
+ "\u2013",
639
+ "-"
640
+ ]
641
+ },
642
+ pipe: {
643
+ interval: 100,
644
+ frames: [
645
+ "\u2524",
646
+ "\u2518",
647
+ "\u2534",
648
+ "\u2514",
649
+ "\u251C",
650
+ "\u250C",
651
+ "\u252C",
652
+ "\u2510"
653
+ ]
654
+ },
655
+ simpleDots: {
656
+ interval: 400,
657
+ frames: [
658
+ ". ",
659
+ ".. ",
660
+ "...",
661
+ " "
662
+ ]
663
+ },
664
+ simpleDotsScrolling: {
665
+ interval: 200,
666
+ frames: [
667
+ ". ",
668
+ ".. ",
669
+ "...",
670
+ " ..",
671
+ " .",
672
+ " "
673
+ ]
674
+ },
675
+ star: {
676
+ interval: 70,
677
+ frames: [
678
+ "\u2736",
679
+ "\u2738",
680
+ "\u2739",
681
+ "\u273A",
682
+ "\u2739",
683
+ "\u2737"
684
+ ]
685
+ },
686
+ star2: {
687
+ interval: 80,
688
+ frames: [
689
+ "+",
690
+ "x",
691
+ "*"
692
+ ]
693
+ },
694
+ flip: {
695
+ interval: 70,
696
+ frames: [
697
+ "_",
698
+ "_",
699
+ "_",
700
+ "-",
701
+ "`",
702
+ "`",
703
+ "'",
704
+ "\xB4",
705
+ "-",
706
+ "_",
707
+ "_",
708
+ "_"
709
+ ]
710
+ },
711
+ hamburger: {
712
+ interval: 100,
713
+ frames: [
714
+ "\u2631",
715
+ "\u2632",
716
+ "\u2634"
717
+ ]
718
+ },
719
+ growVertical: {
720
+ interval: 120,
721
+ frames: [
722
+ "\u2581",
723
+ "\u2583",
724
+ "\u2584",
725
+ "\u2585",
726
+ "\u2586",
727
+ "\u2587",
728
+ "\u2586",
729
+ "\u2585",
730
+ "\u2584",
731
+ "\u2583"
732
+ ]
733
+ },
734
+ growHorizontal: {
735
+ interval: 120,
736
+ frames: [
737
+ "\u258F",
738
+ "\u258E",
739
+ "\u258D",
740
+ "\u258C",
741
+ "\u258B",
742
+ "\u258A",
743
+ "\u2589",
744
+ "\u258A",
745
+ "\u258B",
746
+ "\u258C",
747
+ "\u258D",
748
+ "\u258E"
749
+ ]
750
+ },
751
+ balloon: {
752
+ interval: 140,
753
+ frames: [
754
+ " ",
755
+ ".",
756
+ "o",
757
+ "O",
758
+ "@",
759
+ "*",
760
+ " "
761
+ ]
762
+ },
763
+ balloon2: {
764
+ interval: 120,
765
+ frames: [
766
+ ".",
767
+ "o",
768
+ "O",
769
+ "\xB0",
770
+ "O",
771
+ "o",
772
+ "."
773
+ ]
774
+ },
775
+ noise: {
776
+ interval: 100,
777
+ frames: [
778
+ "\u2593",
779
+ "\u2592",
780
+ "\u2591"
781
+ ]
782
+ },
783
+ bounce: {
784
+ interval: 120,
785
+ frames: [
786
+ "\u2801",
787
+ "\u2802",
788
+ "\u2804",
789
+ "\u2802"
790
+ ]
791
+ },
792
+ boxBounce: {
793
+ interval: 120,
794
+ frames: [
795
+ "\u2596",
796
+ "\u2598",
797
+ "\u259D",
798
+ "\u2597"
799
+ ]
800
+ },
801
+ boxBounce2: {
802
+ interval: 100,
803
+ frames: [
804
+ "\u258C",
805
+ "\u2580",
806
+ "\u2590",
807
+ "\u2584"
808
+ ]
809
+ },
810
+ triangle: {
811
+ interval: 50,
812
+ frames: [
813
+ "\u25E2",
814
+ "\u25E3",
815
+ "\u25E4",
816
+ "\u25E5"
817
+ ]
818
+ },
819
+ binary: {
820
+ interval: 80,
821
+ frames: [
822
+ "010010",
823
+ "001100",
824
+ "100101",
825
+ "111010",
826
+ "111101",
827
+ "010111",
828
+ "101011",
829
+ "111000",
830
+ "110011",
831
+ "110101"
832
+ ]
833
+ },
834
+ arc: {
835
+ interval: 100,
836
+ frames: [
837
+ "\u25DC",
838
+ "\u25E0",
839
+ "\u25DD",
840
+ "\u25DE",
841
+ "\u25E1",
842
+ "\u25DF"
843
+ ]
844
+ },
845
+ circle: {
846
+ interval: 120,
847
+ frames: [
848
+ "\u25E1",
849
+ "\u2299",
850
+ "\u25E0"
851
+ ]
852
+ },
853
+ squareCorners: {
854
+ interval: 180,
855
+ frames: [
856
+ "\u25F0",
857
+ "\u25F3",
858
+ "\u25F2",
859
+ "\u25F1"
860
+ ]
861
+ },
862
+ circleQuarters: {
863
+ interval: 120,
864
+ frames: [
865
+ "\u25F4",
866
+ "\u25F7",
867
+ "\u25F6",
868
+ "\u25F5"
869
+ ]
870
+ },
871
+ circleHalves: {
872
+ interval: 50,
873
+ frames: [
874
+ "\u25D0",
875
+ "\u25D3",
876
+ "\u25D1",
877
+ "\u25D2"
878
+ ]
879
+ },
880
+ squish: {
881
+ interval: 100,
882
+ frames: [
883
+ "\u256B",
884
+ "\u256A"
885
+ ]
886
+ },
887
+ toggle: {
888
+ interval: 250,
889
+ frames: [
890
+ "\u22B6",
891
+ "\u22B7"
892
+ ]
893
+ },
894
+ toggle2: {
895
+ interval: 80,
896
+ frames: [
897
+ "\u25AB",
898
+ "\u25AA"
899
+ ]
900
+ },
901
+ toggle3: {
902
+ interval: 120,
903
+ frames: [
904
+ "\u25A1",
905
+ "\u25A0"
906
+ ]
907
+ },
908
+ toggle4: {
909
+ interval: 100,
910
+ frames: [
911
+ "\u25A0",
912
+ "\u25A1",
913
+ "\u25AA",
914
+ "\u25AB"
915
+ ]
916
+ },
917
+ toggle5: {
918
+ interval: 100,
919
+ frames: [
920
+ "\u25AE",
921
+ "\u25AF"
922
+ ]
923
+ },
924
+ toggle6: {
925
+ interval: 300,
926
+ frames: [
927
+ "\u101D",
928
+ "\u1040"
929
+ ]
930
+ },
931
+ toggle7: {
932
+ interval: 80,
933
+ frames: [
934
+ "\u29BE",
935
+ "\u29BF"
936
+ ]
937
+ },
938
+ toggle8: {
939
+ interval: 100,
940
+ frames: [
941
+ "\u25CD",
942
+ "\u25CC"
943
+ ]
944
+ },
945
+ toggle9: {
946
+ interval: 100,
947
+ frames: [
948
+ "\u25C9",
949
+ "\u25CE"
950
+ ]
951
+ },
952
+ toggle10: {
953
+ interval: 100,
954
+ frames: [
955
+ "\u3282",
956
+ "\u3280",
957
+ "\u3281"
958
+ ]
959
+ },
960
+ toggle11: {
961
+ interval: 50,
962
+ frames: [
963
+ "\u29C7",
964
+ "\u29C6"
965
+ ]
966
+ },
967
+ toggle12: {
968
+ interval: 120,
969
+ frames: [
970
+ "\u2617",
971
+ "\u2616"
972
+ ]
973
+ },
974
+ toggle13: {
975
+ interval: 80,
976
+ frames: [
977
+ "=",
978
+ "*",
979
+ "-"
980
+ ]
981
+ },
982
+ arrow: {
983
+ interval: 100,
984
+ frames: [
985
+ "\u2190",
986
+ "\u2196",
987
+ "\u2191",
988
+ "\u2197",
989
+ "\u2192",
990
+ "\u2198",
991
+ "\u2193",
992
+ "\u2199"
993
+ ]
994
+ },
995
+ arrow2: {
996
+ interval: 80,
997
+ frames: [
998
+ "\u2B06\uFE0F ",
999
+ "\u2197\uFE0F ",
1000
+ "\u27A1\uFE0F ",
1001
+ "\u2198\uFE0F ",
1002
+ "\u2B07\uFE0F ",
1003
+ "\u2199\uFE0F ",
1004
+ "\u2B05\uFE0F ",
1005
+ "\u2196\uFE0F "
1006
+ ]
1007
+ },
1008
+ arrow3: {
1009
+ interval: 120,
1010
+ frames: [
1011
+ "\u25B9\u25B9\u25B9\u25B9\u25B9",
1012
+ "\u25B8\u25B9\u25B9\u25B9\u25B9",
1013
+ "\u25B9\u25B8\u25B9\u25B9\u25B9",
1014
+ "\u25B9\u25B9\u25B8\u25B9\u25B9",
1015
+ "\u25B9\u25B9\u25B9\u25B8\u25B9",
1016
+ "\u25B9\u25B9\u25B9\u25B9\u25B8"
1017
+ ]
1018
+ },
1019
+ bouncingBar: {
1020
+ interval: 80,
1021
+ frames: [
1022
+ "[ ]",
1023
+ "[= ]",
1024
+ "[== ]",
1025
+ "[=== ]",
1026
+ "[====]",
1027
+ "[ ===]",
1028
+ "[ ==]",
1029
+ "[ =]",
1030
+ "[ ]",
1031
+ "[ =]",
1032
+ "[ ==]",
1033
+ "[ ===]",
1034
+ "[====]",
1035
+ "[=== ]",
1036
+ "[== ]",
1037
+ "[= ]"
1038
+ ]
1039
+ },
1040
+ bouncingBall: {
1041
+ interval: 80,
1042
+ frames: [
1043
+ "( \u25CF )",
1044
+ "( \u25CF )",
1045
+ "( \u25CF )",
1046
+ "( \u25CF )",
1047
+ "( \u25CF)",
1048
+ "( \u25CF )",
1049
+ "( \u25CF )",
1050
+ "( \u25CF )",
1051
+ "( \u25CF )",
1052
+ "(\u25CF )"
1053
+ ]
1054
+ },
1055
+ smiley: {
1056
+ interval: 200,
1057
+ frames: [
1058
+ "\u{1F604} ",
1059
+ "\u{1F61D} "
1060
+ ]
1061
+ },
1062
+ monkey: {
1063
+ interval: 300,
1064
+ frames: [
1065
+ "\u{1F648} ",
1066
+ "\u{1F648} ",
1067
+ "\u{1F649} ",
1068
+ "\u{1F64A} "
1069
+ ]
1070
+ },
1071
+ hearts: {
1072
+ interval: 100,
1073
+ frames: [
1074
+ "\u{1F49B} ",
1075
+ "\u{1F499} ",
1076
+ "\u{1F49C} ",
1077
+ "\u{1F49A} ",
1078
+ "\u2764\uFE0F "
1079
+ ]
1080
+ },
1081
+ clock: {
1082
+ interval: 100,
1083
+ frames: [
1084
+ "\u{1F55B} ",
1085
+ "\u{1F550} ",
1086
+ "\u{1F551} ",
1087
+ "\u{1F552} ",
1088
+ "\u{1F553} ",
1089
+ "\u{1F554} ",
1090
+ "\u{1F555} ",
1091
+ "\u{1F556} ",
1092
+ "\u{1F557} ",
1093
+ "\u{1F558} ",
1094
+ "\u{1F559} ",
1095
+ "\u{1F55A} "
1096
+ ]
1097
+ },
1098
+ earth: {
1099
+ interval: 180,
1100
+ frames: [
1101
+ "\u{1F30D} ",
1102
+ "\u{1F30E} ",
1103
+ "\u{1F30F} "
1104
+ ]
1105
+ },
1106
+ material: {
1107
+ interval: 17,
1108
+ frames: [
1109
+ "\u2588\u2581\u2581\u2581\u2581\u2581\u2581\u2581\u2581\u2581\u2581\u2581\u2581\u2581\u2581\u2581\u2581\u2581\u2581\u2581",
1110
+ "\u2588\u2588\u2581\u2581\u2581\u2581\u2581\u2581\u2581\u2581\u2581\u2581\u2581\u2581\u2581\u2581\u2581\u2581\u2581\u2581",
1111
+ "\u2588\u2588\u2588\u2581\u2581\u2581\u2581\u2581\u2581\u2581\u2581\u2581\u2581\u2581\u2581\u2581\u2581\u2581\u2581\u2581",
1112
+ "\u2588\u2588\u2588\u2588\u2581\u2581\u2581\u2581\u2581\u2581\u2581\u2581\u2581\u2581\u2581\u2581\u2581\u2581\u2581\u2581",
1113
+ "\u2588\u2588\u2588\u2588\u2588\u2588\u2581\u2581\u2581\u2581\u2581\u2581\u2581\u2581\u2581\u2581\u2581\u2581\u2581\u2581",
1114
+ "\u2588\u2588\u2588\u2588\u2588\u2588\u2581\u2581\u2581\u2581\u2581\u2581\u2581\u2581\u2581\u2581\u2581\u2581\u2581\u2581",
1115
+ "\u2588\u2588\u2588\u2588\u2588\u2588\u2588\u2581\u2581\u2581\u2581\u2581\u2581\u2581\u2581\u2581\u2581\u2581\u2581\u2581",
1116
+ "\u2588\u2588\u2588\u2588\u2588\u2588\u2588\u2588\u2581\u2581\u2581\u2581\u2581\u2581\u2581\u2581\u2581\u2581\u2581\u2581",
1117
+ "\u2588\u2588\u2588\u2588\u2588\u2588\u2588\u2588\u2588\u2581\u2581\u2581\u2581\u2581\u2581\u2581\u2581\u2581\u2581\u2581",
1118
+ "\u2588\u2588\u2588\u2588\u2588\u2588\u2588\u2588\u2588\u2581\u2581\u2581\u2581\u2581\u2581\u2581\u2581\u2581\u2581\u2581",
1119
+ "\u2588\u2588\u2588\u2588\u2588\u2588\u2588\u2588\u2588\u2588\u2581\u2581\u2581\u2581\u2581\u2581\u2581\u2581\u2581\u2581",
1120
+ "\u2588\u2588\u2588\u2588\u2588\u2588\u2588\u2588\u2588\u2588\u2588\u2581\u2581\u2581\u2581\u2581\u2581\u2581\u2581\u2581",
1121
+ "\u2588\u2588\u2588\u2588\u2588\u2588\u2588\u2588\u2588\u2588\u2588\u2588\u2588\u2581\u2581\u2581\u2581\u2581\u2581\u2581",
1122
+ "\u2588\u2588\u2588\u2588\u2588\u2588\u2588\u2588\u2588\u2588\u2588\u2588\u2588\u2588\u2581\u2581\u2581\u2581\u2581\u2581",
1123
+ "\u2588\u2588\u2588\u2588\u2588\u2588\u2588\u2588\u2588\u2588\u2588\u2588\u2588\u2588\u2581\u2581\u2581\u2581\u2581\u2581",
1124
+ "\u2581\u2588\u2588\u2588\u2588\u2588\u2588\u2588\u2588\u2588\u2588\u2588\u2588\u2588\u2588\u2581\u2581\u2581\u2581\u2581",
1125
+ "\u2581\u2588\u2588\u2588\u2588\u2588\u2588\u2588\u2588\u2588\u2588\u2588\u2588\u2588\u2588\u2581\u2581\u2581\u2581\u2581",
1126
+ "\u2581\u2588\u2588\u2588\u2588\u2588\u2588\u2588\u2588\u2588\u2588\u2588\u2588\u2588\u2588\u2581\u2581\u2581\u2581\u2581",
1127
+ "\u2581\u2581\u2588\u2588\u2588\u2588\u2588\u2588\u2588\u2588\u2588\u2588\u2588\u2588\u2588\u2588\u2581\u2581\u2581\u2581",
1128
+ "\u2581\u2581\u2581\u2588\u2588\u2588\u2588\u2588\u2588\u2588\u2588\u2588\u2588\u2588\u2588\u2588\u2588\u2581\u2581\u2581",
1129
+ "\u2581\u2581\u2581\u2581\u2588\u2588\u2588\u2588\u2588\u2588\u2588\u2588\u2588\u2588\u2588\u2588\u2588\u2581\u2581\u2581",
1130
+ "\u2581\u2581\u2581\u2581\u2588\u2588\u2588\u2588\u2588\u2588\u2588\u2588\u2588\u2588\u2588\u2588\u2588\u2588\u2581\u2581",
1131
+ "\u2581\u2581\u2581\u2581\u2588\u2588\u2588\u2588\u2588\u2588\u2588\u2588\u2588\u2588\u2588\u2588\u2588\u2588\u2581\u2581",
1132
+ "\u2581\u2581\u2581\u2581\u2581\u2588\u2588\u2588\u2588\u2588\u2588\u2588\u2588\u2588\u2588\u2588\u2588\u2588\u2588\u2581",
1133
+ "\u2581\u2581\u2581\u2581\u2581\u2588\u2588\u2588\u2588\u2588\u2588\u2588\u2588\u2588\u2588\u2588\u2588\u2588\u2588\u2581",
1134
+ "\u2581\u2581\u2581\u2581\u2581\u2588\u2588\u2588\u2588\u2588\u2588\u2588\u2588\u2588\u2588\u2588\u2588\u2588\u2588\u2581",
1135
+ "\u2581\u2581\u2581\u2581\u2581\u2581\u2588\u2588\u2588\u2588\u2588\u2588\u2588\u2588\u2588\u2588\u2588\u2588\u2588\u2588",
1136
+ "\u2581\u2581\u2581\u2581\u2581\u2581\u2588\u2588\u2588\u2588\u2588\u2588\u2588\u2588\u2588\u2588\u2588\u2588\u2588\u2588",
1137
+ "\u2581\u2581\u2581\u2581\u2581\u2581\u2581\u2588\u2588\u2588\u2588\u2588\u2588\u2588\u2588\u2588\u2588\u2588\u2588\u2588",
1138
+ "\u2581\u2581\u2581\u2581\u2581\u2581\u2581\u2588\u2588\u2588\u2588\u2588\u2588\u2588\u2588\u2588\u2588\u2588\u2588\u2588",
1139
+ "\u2581\u2581\u2581\u2581\u2581\u2581\u2581\u2581\u2588\u2588\u2588\u2588\u2588\u2588\u2588\u2588\u2588\u2588\u2588\u2588",
1140
+ "\u2581\u2581\u2581\u2581\u2581\u2581\u2581\u2581\u2588\u2588\u2588\u2588\u2588\u2588\u2588\u2588\u2588\u2588\u2588\u2588",
1141
+ "\u2581\u2581\u2581\u2581\u2581\u2581\u2581\u2581\u2581\u2588\u2588\u2588\u2588\u2588\u2588\u2588\u2588\u2588\u2588\u2588",
1142
+ "\u2581\u2581\u2581\u2581\u2581\u2581\u2581\u2581\u2581\u2588\u2588\u2588\u2588\u2588\u2588\u2588\u2588\u2588\u2588\u2588",
1143
+ "\u2581\u2581\u2581\u2581\u2581\u2581\u2581\u2581\u2581\u2581\u2588\u2588\u2588\u2588\u2588\u2588\u2588\u2588\u2588\u2588",
1144
+ "\u2581\u2581\u2581\u2581\u2581\u2581\u2581\u2581\u2581\u2581\u2588\u2588\u2588\u2588\u2588\u2588\u2588\u2588\u2588\u2588",
1145
+ "\u2581\u2581\u2581\u2581\u2581\u2581\u2581\u2581\u2581\u2581\u2581\u2581\u2588\u2588\u2588\u2588\u2588\u2588\u2588\u2588",
1146
+ "\u2581\u2581\u2581\u2581\u2581\u2581\u2581\u2581\u2581\u2581\u2581\u2581\u2581\u2588\u2588\u2588\u2588\u2588\u2588\u2588",
1147
+ "\u2581\u2581\u2581\u2581\u2581\u2581\u2581\u2581\u2581\u2581\u2581\u2581\u2581\u2581\u2588\u2588\u2588\u2588\u2588\u2588",
1148
+ "\u2581\u2581\u2581\u2581\u2581\u2581\u2581\u2581\u2581\u2581\u2581\u2581\u2581\u2581\u2581\u2588\u2588\u2588\u2588\u2588",
1149
+ "\u2581\u2581\u2581\u2581\u2581\u2581\u2581\u2581\u2581\u2581\u2581\u2581\u2581\u2581\u2581\u2588\u2588\u2588\u2588\u2588",
1150
+ "\u2588\u2581\u2581\u2581\u2581\u2581\u2581\u2581\u2581\u2581\u2581\u2581\u2581\u2581\u2581\u2581\u2588\u2588\u2588\u2588",
1151
+ "\u2588\u2588\u2581\u2581\u2581\u2581\u2581\u2581\u2581\u2581\u2581\u2581\u2581\u2581\u2581\u2581\u2581\u2588\u2588\u2588",
1152
+ "\u2588\u2588\u2581\u2581\u2581\u2581\u2581\u2581\u2581\u2581\u2581\u2581\u2581\u2581\u2581\u2581\u2581\u2588\u2588\u2588",
1153
+ "\u2588\u2588\u2588\u2581\u2581\u2581\u2581\u2581\u2581\u2581\u2581\u2581\u2581\u2581\u2581\u2581\u2581\u2588\u2588\u2588",
1154
+ "\u2588\u2588\u2588\u2588\u2581\u2581\u2581\u2581\u2581\u2581\u2581\u2581\u2581\u2581\u2581\u2581\u2581\u2581\u2588\u2588",
1155
+ "\u2588\u2588\u2588\u2588\u2588\u2581\u2581\u2581\u2581\u2581\u2581\u2581\u2581\u2581\u2581\u2581\u2581\u2581\u2581\u2588",
1156
+ "\u2588\u2588\u2588\u2588\u2588\u2581\u2581\u2581\u2581\u2581\u2581\u2581\u2581\u2581\u2581\u2581\u2581\u2581\u2581\u2588",
1157
+ "\u2588\u2588\u2588\u2588\u2588\u2588\u2581\u2581\u2581\u2581\u2581\u2581\u2581\u2581\u2581\u2581\u2581\u2581\u2581\u2588",
1158
+ "\u2588\u2588\u2588\u2588\u2588\u2588\u2588\u2588\u2581\u2581\u2581\u2581\u2581\u2581\u2581\u2581\u2581\u2581\u2581\u2581",
1159
+ "\u2588\u2588\u2588\u2588\u2588\u2588\u2588\u2588\u2588\u2581\u2581\u2581\u2581\u2581\u2581\u2581\u2581\u2581\u2581\u2581",
1160
+ "\u2588\u2588\u2588\u2588\u2588\u2588\u2588\u2588\u2588\u2581\u2581\u2581\u2581\u2581\u2581\u2581\u2581\u2581\u2581\u2581",
1161
+ "\u2588\u2588\u2588\u2588\u2588\u2588\u2588\u2588\u2588\u2581\u2581\u2581\u2581\u2581\u2581\u2581\u2581\u2581\u2581\u2581",
1162
+ "\u2588\u2588\u2588\u2588\u2588\u2588\u2588\u2588\u2588\u2581\u2581\u2581\u2581\u2581\u2581\u2581\u2581\u2581\u2581\u2581",
1163
+ "\u2588\u2588\u2588\u2588\u2588\u2588\u2588\u2588\u2588\u2588\u2588\u2581\u2581\u2581\u2581\u2581\u2581\u2581\u2581\u2581",
1164
+ "\u2588\u2588\u2588\u2588\u2588\u2588\u2588\u2588\u2588\u2588\u2588\u2588\u2581\u2581\u2581\u2581\u2581\u2581\u2581\u2581",
1165
+ "\u2588\u2588\u2588\u2588\u2588\u2588\u2588\u2588\u2588\u2588\u2588\u2588\u2581\u2581\u2581\u2581\u2581\u2581\u2581\u2581",
1166
+ "\u2588\u2588\u2588\u2588\u2588\u2588\u2588\u2588\u2588\u2588\u2588\u2588\u2588\u2588\u2581\u2581\u2581\u2581\u2581\u2581",
1167
+ "\u2588\u2588\u2588\u2588\u2588\u2588\u2588\u2588\u2588\u2588\u2588\u2588\u2588\u2588\u2581\u2581\u2581\u2581\u2581\u2581",
1168
+ "\u2581\u2588\u2588\u2588\u2588\u2588\u2588\u2588\u2588\u2588\u2588\u2588\u2588\u2588\u2588\u2581\u2581\u2581\u2581\u2581",
1169
+ "\u2581\u2588\u2588\u2588\u2588\u2588\u2588\u2588\u2588\u2588\u2588\u2588\u2588\u2588\u2588\u2581\u2581\u2581\u2581\u2581",
1170
+ "\u2581\u2581\u2581\u2588\u2588\u2588\u2588\u2588\u2588\u2588\u2588\u2588\u2588\u2588\u2588\u2588\u2581\u2581\u2581\u2581",
1171
+ "\u2581\u2581\u2581\u2581\u2581\u2588\u2588\u2588\u2588\u2588\u2588\u2588\u2588\u2588\u2588\u2588\u2588\u2581\u2581\u2581",
1172
+ "\u2581\u2581\u2581\u2581\u2581\u2588\u2588\u2588\u2588\u2588\u2588\u2588\u2588\u2588\u2588\u2588\u2588\u2581\u2581\u2581",
1173
+ "\u2581\u2581\u2581\u2581\u2581\u2581\u2588\u2588\u2588\u2588\u2588\u2588\u2588\u2588\u2588\u2588\u2588\u2581\u2581\u2581",
1174
+ "\u2581\u2581\u2581\u2581\u2581\u2581\u2581\u2581\u2588\u2588\u2588\u2588\u2588\u2588\u2588\u2588\u2588\u2581\u2581\u2581",
1175
+ "\u2581\u2581\u2581\u2581\u2581\u2581\u2581\u2581\u2588\u2588\u2588\u2588\u2588\u2588\u2588\u2588\u2588\u2581\u2581\u2581",
1176
+ "\u2581\u2581\u2581\u2581\u2581\u2581\u2581\u2581\u2581\u2588\u2588\u2588\u2588\u2588\u2588\u2588\u2588\u2588\u2581\u2581",
1177
+ "\u2581\u2581\u2581\u2581\u2581\u2581\u2581\u2581\u2581\u2588\u2588\u2588\u2588\u2588\u2588\u2588\u2588\u2588\u2581\u2581",
1178
+ "\u2581\u2581\u2581\u2581\u2581\u2581\u2581\u2581\u2581\u2581\u2588\u2588\u2588\u2588\u2588\u2588\u2588\u2588\u2588\u2581",
1179
+ "\u2581\u2581\u2581\u2581\u2581\u2581\u2581\u2581\u2581\u2581\u2581\u2588\u2588\u2588\u2588\u2588\u2588\u2588\u2588\u2581",
1180
+ "\u2581\u2581\u2581\u2581\u2581\u2581\u2581\u2581\u2581\u2581\u2581\u2588\u2588\u2588\u2588\u2588\u2588\u2588\u2588\u2581",
1181
+ "\u2581\u2581\u2581\u2581\u2581\u2581\u2581\u2581\u2581\u2581\u2581\u2581\u2588\u2588\u2588\u2588\u2588\u2588\u2588\u2581",
1182
+ "\u2581\u2581\u2581\u2581\u2581\u2581\u2581\u2581\u2581\u2581\u2581\u2581\u2588\u2588\u2588\u2588\u2588\u2588\u2588\u2581",
1183
+ "\u2581\u2581\u2581\u2581\u2581\u2581\u2581\u2581\u2581\u2581\u2581\u2581\u2581\u2588\u2588\u2588\u2588\u2588\u2588\u2588",
1184
+ "\u2581\u2581\u2581\u2581\u2581\u2581\u2581\u2581\u2581\u2581\u2581\u2581\u2581\u2588\u2588\u2588\u2588\u2588\u2588\u2588",
1185
+ "\u2581\u2581\u2581\u2581\u2581\u2581\u2581\u2581\u2581\u2581\u2581\u2581\u2581\u2581\u2581\u2588\u2588\u2588\u2588\u2588",
1186
+ "\u2581\u2581\u2581\u2581\u2581\u2581\u2581\u2581\u2581\u2581\u2581\u2581\u2581\u2581\u2581\u2581\u2588\u2588\u2588\u2588",
1187
+ "\u2581\u2581\u2581\u2581\u2581\u2581\u2581\u2581\u2581\u2581\u2581\u2581\u2581\u2581\u2581\u2581\u2588\u2588\u2588\u2588",
1188
+ "\u2581\u2581\u2581\u2581\u2581\u2581\u2581\u2581\u2581\u2581\u2581\u2581\u2581\u2581\u2581\u2581\u2588\u2588\u2588\u2588",
1189
+ "\u2581\u2581\u2581\u2581\u2581\u2581\u2581\u2581\u2581\u2581\u2581\u2581\u2581\u2581\u2581\u2581\u2581\u2588\u2588\u2588",
1190
+ "\u2581\u2581\u2581\u2581\u2581\u2581\u2581\u2581\u2581\u2581\u2581\u2581\u2581\u2581\u2581\u2581\u2581\u2588\u2588\u2588",
1191
+ "\u2581\u2581\u2581\u2581\u2581\u2581\u2581\u2581\u2581\u2581\u2581\u2581\u2581\u2581\u2581\u2581\u2581\u2581\u2588\u2588",
1192
+ "\u2581\u2581\u2581\u2581\u2581\u2581\u2581\u2581\u2581\u2581\u2581\u2581\u2581\u2581\u2581\u2581\u2581\u2581\u2588\u2588",
1193
+ "\u2581\u2581\u2581\u2581\u2581\u2581\u2581\u2581\u2581\u2581\u2581\u2581\u2581\u2581\u2581\u2581\u2581\u2581\u2588\u2588",
1194
+ "\u2581\u2581\u2581\u2581\u2581\u2581\u2581\u2581\u2581\u2581\u2581\u2581\u2581\u2581\u2581\u2581\u2581\u2581\u2581\u2588",
1195
+ "\u2581\u2581\u2581\u2581\u2581\u2581\u2581\u2581\u2581\u2581\u2581\u2581\u2581\u2581\u2581\u2581\u2581\u2581\u2581\u2588",
1196
+ "\u2581\u2581\u2581\u2581\u2581\u2581\u2581\u2581\u2581\u2581\u2581\u2581\u2581\u2581\u2581\u2581\u2581\u2581\u2581\u2588",
1197
+ "\u2581\u2581\u2581\u2581\u2581\u2581\u2581\u2581\u2581\u2581\u2581\u2581\u2581\u2581\u2581\u2581\u2581\u2581\u2581\u2581",
1198
+ "\u2581\u2581\u2581\u2581\u2581\u2581\u2581\u2581\u2581\u2581\u2581\u2581\u2581\u2581\u2581\u2581\u2581\u2581\u2581\u2581",
1199
+ "\u2581\u2581\u2581\u2581\u2581\u2581\u2581\u2581\u2581\u2581\u2581\u2581\u2581\u2581\u2581\u2581\u2581\u2581\u2581\u2581",
1200
+ "\u2581\u2581\u2581\u2581\u2581\u2581\u2581\u2581\u2581\u2581\u2581\u2581\u2581\u2581\u2581\u2581\u2581\u2581\u2581\u2581"
1201
+ ]
1202
+ },
1203
+ moon: {
1204
+ interval: 80,
1205
+ frames: [
1206
+ "\u{1F311} ",
1207
+ "\u{1F312} ",
1208
+ "\u{1F313} ",
1209
+ "\u{1F314} ",
1210
+ "\u{1F315} ",
1211
+ "\u{1F316} ",
1212
+ "\u{1F317} ",
1213
+ "\u{1F318} "
1214
+ ]
1215
+ },
1216
+ runner: {
1217
+ interval: 140,
1218
+ frames: [
1219
+ "\u{1F6B6} ",
1220
+ "\u{1F3C3} "
1221
+ ]
1222
+ },
1223
+ pong: {
1224
+ interval: 80,
1225
+ frames: [
1226
+ "\u2590\u2802 \u258C",
1227
+ "\u2590\u2808 \u258C",
1228
+ "\u2590 \u2802 \u258C",
1229
+ "\u2590 \u2820 \u258C",
1230
+ "\u2590 \u2840 \u258C",
1231
+ "\u2590 \u2820 \u258C",
1232
+ "\u2590 \u2802 \u258C",
1233
+ "\u2590 \u2808 \u258C",
1234
+ "\u2590 \u2802 \u258C",
1235
+ "\u2590 \u2820 \u258C",
1236
+ "\u2590 \u2840 \u258C",
1237
+ "\u2590 \u2820 \u258C",
1238
+ "\u2590 \u2802 \u258C",
1239
+ "\u2590 \u2808 \u258C",
1240
+ "\u2590 \u2802\u258C",
1241
+ "\u2590 \u2820\u258C",
1242
+ "\u2590 \u2840\u258C",
1243
+ "\u2590 \u2820 \u258C",
1244
+ "\u2590 \u2802 \u258C",
1245
+ "\u2590 \u2808 \u258C",
1246
+ "\u2590 \u2802 \u258C",
1247
+ "\u2590 \u2820 \u258C",
1248
+ "\u2590 \u2840 \u258C",
1249
+ "\u2590 \u2820 \u258C",
1250
+ "\u2590 \u2802 \u258C",
1251
+ "\u2590 \u2808 \u258C",
1252
+ "\u2590 \u2802 \u258C",
1253
+ "\u2590 \u2820 \u258C",
1254
+ "\u2590 \u2840 \u258C",
1255
+ "\u2590\u2820 \u258C"
1256
+ ]
1257
+ },
1258
+ shark: {
1259
+ interval: 120,
1260
+ frames: [
1261
+ "\u2590|\\____________\u258C",
1262
+ "\u2590_|\\___________\u258C",
1263
+ "\u2590__|\\__________\u258C",
1264
+ "\u2590___|\\_________\u258C",
1265
+ "\u2590____|\\________\u258C",
1266
+ "\u2590_____|\\_______\u258C",
1267
+ "\u2590______|\\______\u258C",
1268
+ "\u2590_______|\\_____\u258C",
1269
+ "\u2590________|\\____\u258C",
1270
+ "\u2590_________|\\___\u258C",
1271
+ "\u2590__________|\\__\u258C",
1272
+ "\u2590___________|\\_\u258C",
1273
+ "\u2590____________|\\\u258C",
1274
+ "\u2590____________/|\u258C",
1275
+ "\u2590___________/|_\u258C",
1276
+ "\u2590__________/|__\u258C",
1277
+ "\u2590_________/|___\u258C",
1278
+ "\u2590________/|____\u258C",
1279
+ "\u2590_______/|_____\u258C",
1280
+ "\u2590______/|______\u258C",
1281
+ "\u2590_____/|_______\u258C",
1282
+ "\u2590____/|________\u258C",
1283
+ "\u2590___/|_________\u258C",
1284
+ "\u2590__/|__________\u258C",
1285
+ "\u2590_/|___________\u258C",
1286
+ "\u2590/|____________\u258C"
1287
+ ]
1288
+ },
1289
+ dqpb: {
1290
+ interval: 100,
1291
+ frames: [
1292
+ "d",
1293
+ "q",
1294
+ "p",
1295
+ "b"
1296
+ ]
1297
+ },
1298
+ weather: {
1299
+ interval: 100,
1300
+ frames: [
1301
+ "\u2600\uFE0F ",
1302
+ "\u2600\uFE0F ",
1303
+ "\u2600\uFE0F ",
1304
+ "\u{1F324} ",
1305
+ "\u26C5\uFE0F ",
1306
+ "\u{1F325} ",
1307
+ "\u2601\uFE0F ",
1308
+ "\u{1F327} ",
1309
+ "\u{1F328} ",
1310
+ "\u{1F327} ",
1311
+ "\u{1F328} ",
1312
+ "\u{1F327} ",
1313
+ "\u{1F328} ",
1314
+ "\u26C8 ",
1315
+ "\u{1F328} ",
1316
+ "\u{1F327} ",
1317
+ "\u{1F328} ",
1318
+ "\u2601\uFE0F ",
1319
+ "\u{1F325} ",
1320
+ "\u26C5\uFE0F ",
1321
+ "\u{1F324} ",
1322
+ "\u2600\uFE0F ",
1323
+ "\u2600\uFE0F "
1324
+ ]
1325
+ },
1326
+ christmas: {
1327
+ interval: 400,
1328
+ frames: [
1329
+ "\u{1F332}",
1330
+ "\u{1F384}"
1331
+ ]
1332
+ },
1333
+ grenade: {
1334
+ interval: 80,
1335
+ frames: [
1336
+ "\u060C ",
1337
+ "\u2032 ",
1338
+ " \xB4 ",
1339
+ " \u203E ",
1340
+ " \u2E0C",
1341
+ " \u2E0A",
1342
+ " |",
1343
+ " \u204E",
1344
+ " \u2055",
1345
+ " \u0DF4 ",
1346
+ " \u2053",
1347
+ " ",
1348
+ " ",
1349
+ " "
1350
+ ]
1351
+ },
1352
+ point: {
1353
+ interval: 125,
1354
+ frames: [
1355
+ "\u2219\u2219\u2219",
1356
+ "\u25CF\u2219\u2219",
1357
+ "\u2219\u25CF\u2219",
1358
+ "\u2219\u2219\u25CF",
1359
+ "\u2219\u2219\u2219"
1360
+ ]
1361
+ },
1362
+ layer: {
1363
+ interval: 150,
1364
+ frames: [
1365
+ "-",
1366
+ "=",
1367
+ "\u2261"
1368
+ ]
1369
+ },
1370
+ betaWave: {
1371
+ interval: 80,
1372
+ frames: [
1373
+ "\u03C1\u03B2\u03B2\u03B2\u03B2\u03B2\u03B2",
1374
+ "\u03B2\u03C1\u03B2\u03B2\u03B2\u03B2\u03B2",
1375
+ "\u03B2\u03B2\u03C1\u03B2\u03B2\u03B2\u03B2",
1376
+ "\u03B2\u03B2\u03B2\u03C1\u03B2\u03B2\u03B2",
1377
+ "\u03B2\u03B2\u03B2\u03B2\u03C1\u03B2\u03B2",
1378
+ "\u03B2\u03B2\u03B2\u03B2\u03B2\u03C1\u03B2",
1379
+ "\u03B2\u03B2\u03B2\u03B2\u03B2\u03B2\u03C1"
1380
+ ]
1381
+ },
1382
+ fingerDance: {
1383
+ interval: 160,
1384
+ frames: [
1385
+ "\u{1F918} ",
1386
+ "\u{1F91F} ",
1387
+ "\u{1F596} ",
1388
+ "\u270B ",
1389
+ "\u{1F91A} ",
1390
+ "\u{1F446} "
1391
+ ]
1392
+ },
1393
+ fistBump: {
1394
+ interval: 80,
1395
+ frames: [
1396
+ "\u{1F91C}\u3000\u3000\u3000\u3000\u{1F91B} ",
1397
+ "\u{1F91C}\u3000\u3000\u3000\u3000\u{1F91B} ",
1398
+ "\u{1F91C}\u3000\u3000\u3000\u3000\u{1F91B} ",
1399
+ "\u3000\u{1F91C}\u3000\u3000\u{1F91B}\u3000 ",
1400
+ "\u3000\u3000\u{1F91C}\u{1F91B}\u3000\u3000 ",
1401
+ "\u3000\u{1F91C}\u2728\u{1F91B}\u3000\u3000 ",
1402
+ "\u{1F91C}\u3000\u2728\u3000\u{1F91B}\u3000 "
1403
+ ]
1404
+ },
1405
+ soccerHeader: {
1406
+ interval: 80,
1407
+ frames: [
1408
+ " \u{1F9D1}\u26BD\uFE0F \u{1F9D1} ",
1409
+ "\u{1F9D1} \u26BD\uFE0F \u{1F9D1} ",
1410
+ "\u{1F9D1} \u26BD\uFE0F \u{1F9D1} ",
1411
+ "\u{1F9D1} \u26BD\uFE0F \u{1F9D1} ",
1412
+ "\u{1F9D1} \u26BD\uFE0F \u{1F9D1} ",
1413
+ "\u{1F9D1} \u26BD\uFE0F \u{1F9D1} ",
1414
+ "\u{1F9D1} \u26BD\uFE0F\u{1F9D1} ",
1415
+ "\u{1F9D1} \u26BD\uFE0F \u{1F9D1} ",
1416
+ "\u{1F9D1} \u26BD\uFE0F \u{1F9D1} ",
1417
+ "\u{1F9D1} \u26BD\uFE0F \u{1F9D1} ",
1418
+ "\u{1F9D1} \u26BD\uFE0F \u{1F9D1} ",
1419
+ "\u{1F9D1} \u26BD\uFE0F \u{1F9D1} "
1420
+ ]
1421
+ },
1422
+ mindblown: {
1423
+ interval: 160,
1424
+ frames: [
1425
+ "\u{1F610} ",
1426
+ "\u{1F610} ",
1427
+ "\u{1F62E} ",
1428
+ "\u{1F62E} ",
1429
+ "\u{1F626} ",
1430
+ "\u{1F626} ",
1431
+ "\u{1F627} ",
1432
+ "\u{1F627} ",
1433
+ "\u{1F92F} ",
1434
+ "\u{1F4A5} ",
1435
+ "\u2728 ",
1436
+ "\u3000 ",
1437
+ "\u3000 ",
1438
+ "\u3000 "
1439
+ ]
1440
+ },
1441
+ speaker: {
1442
+ interval: 160,
1443
+ frames: [
1444
+ "\u{1F508} ",
1445
+ "\u{1F509} ",
1446
+ "\u{1F50A} ",
1447
+ "\u{1F509} "
1448
+ ]
1449
+ },
1450
+ orangePulse: {
1451
+ interval: 100,
1452
+ frames: [
1453
+ "\u{1F538} ",
1454
+ "\u{1F536} ",
1455
+ "\u{1F7E0} ",
1456
+ "\u{1F7E0} ",
1457
+ "\u{1F536} "
1458
+ ]
1459
+ },
1460
+ bluePulse: {
1461
+ interval: 100,
1462
+ frames: [
1463
+ "\u{1F539} ",
1464
+ "\u{1F537} ",
1465
+ "\u{1F535} ",
1466
+ "\u{1F535} ",
1467
+ "\u{1F537} "
1468
+ ]
1469
+ },
1470
+ orangeBluePulse: {
1471
+ interval: 100,
1472
+ frames: [
1473
+ "\u{1F538} ",
1474
+ "\u{1F536} ",
1475
+ "\u{1F7E0} ",
1476
+ "\u{1F7E0} ",
1477
+ "\u{1F536} ",
1478
+ "\u{1F539} ",
1479
+ "\u{1F537} ",
1480
+ "\u{1F535} ",
1481
+ "\u{1F535} ",
1482
+ "\u{1F537} "
1483
+ ]
1484
+ },
1485
+ timeTravel: {
1486
+ interval: 100,
1487
+ frames: [
1488
+ "\u{1F55B} ",
1489
+ "\u{1F55A} ",
1490
+ "\u{1F559} ",
1491
+ "\u{1F558} ",
1492
+ "\u{1F557} ",
1493
+ "\u{1F556} ",
1494
+ "\u{1F555} ",
1495
+ "\u{1F554} ",
1496
+ "\u{1F553} ",
1497
+ "\u{1F552} ",
1498
+ "\u{1F551} ",
1499
+ "\u{1F550} "
1500
+ ]
1501
+ },
1502
+ aesthetic: {
1503
+ interval: 80,
1504
+ frames: [
1505
+ "\u25B0\u25B1\u25B1\u25B1\u25B1\u25B1\u25B1",
1506
+ "\u25B0\u25B0\u25B1\u25B1\u25B1\u25B1\u25B1",
1507
+ "\u25B0\u25B0\u25B0\u25B1\u25B1\u25B1\u25B1",
1508
+ "\u25B0\u25B0\u25B0\u25B0\u25B1\u25B1\u25B1",
1509
+ "\u25B0\u25B0\u25B0\u25B0\u25B0\u25B1\u25B1",
1510
+ "\u25B0\u25B0\u25B0\u25B0\u25B0\u25B0\u25B1",
1511
+ "\u25B0\u25B0\u25B0\u25B0\u25B0\u25B0\u25B0",
1512
+ "\u25B0\u25B1\u25B1\u25B1\u25B1\u25B1\u25B1"
1513
+ ]
1514
+ },
1515
+ dwarfFortress: {
1516
+ interval: 80,
1517
+ frames: [
1518
+ " \u2588\u2588\u2588\u2588\u2588\u2588\xA3\xA3\xA3 ",
1519
+ "\u263A\u2588\u2588\u2588\u2588\u2588\u2588\xA3\xA3\xA3 ",
1520
+ "\u263A\u2588\u2588\u2588\u2588\u2588\u2588\xA3\xA3\xA3 ",
1521
+ "\u263A\u2593\u2588\u2588\u2588\u2588\u2588\xA3\xA3\xA3 ",
1522
+ "\u263A\u2593\u2588\u2588\u2588\u2588\u2588\xA3\xA3\xA3 ",
1523
+ "\u263A\u2592\u2588\u2588\u2588\u2588\u2588\xA3\xA3\xA3 ",
1524
+ "\u263A\u2592\u2588\u2588\u2588\u2588\u2588\xA3\xA3\xA3 ",
1525
+ "\u263A\u2591\u2588\u2588\u2588\u2588\u2588\xA3\xA3\xA3 ",
1526
+ "\u263A\u2591\u2588\u2588\u2588\u2588\u2588\xA3\xA3\xA3 ",
1527
+ "\u263A \u2588\u2588\u2588\u2588\u2588\xA3\xA3\xA3 ",
1528
+ " \u263A\u2588\u2588\u2588\u2588\u2588\xA3\xA3\xA3 ",
1529
+ " \u263A\u2588\u2588\u2588\u2588\u2588\xA3\xA3\xA3 ",
1530
+ " \u263A\u2593\u2588\u2588\u2588\u2588\xA3\xA3\xA3 ",
1531
+ " \u263A\u2593\u2588\u2588\u2588\u2588\xA3\xA3\xA3 ",
1532
+ " \u263A\u2592\u2588\u2588\u2588\u2588\xA3\xA3\xA3 ",
1533
+ " \u263A\u2592\u2588\u2588\u2588\u2588\xA3\xA3\xA3 ",
1534
+ " \u263A\u2591\u2588\u2588\u2588\u2588\xA3\xA3\xA3 ",
1535
+ " \u263A\u2591\u2588\u2588\u2588\u2588\xA3\xA3\xA3 ",
1536
+ " \u263A \u2588\u2588\u2588\u2588\xA3\xA3\xA3 ",
1537
+ " \u263A\u2588\u2588\u2588\u2588\xA3\xA3\xA3 ",
1538
+ " \u263A\u2588\u2588\u2588\u2588\xA3\xA3\xA3 ",
1539
+ " \u263A\u2593\u2588\u2588\u2588\xA3\xA3\xA3 ",
1540
+ " \u263A\u2593\u2588\u2588\u2588\xA3\xA3\xA3 ",
1541
+ " \u263A\u2592\u2588\u2588\u2588\xA3\xA3\xA3 ",
1542
+ " \u263A\u2592\u2588\u2588\u2588\xA3\xA3\xA3 ",
1543
+ " \u263A\u2591\u2588\u2588\u2588\xA3\xA3\xA3 ",
1544
+ " \u263A\u2591\u2588\u2588\u2588\xA3\xA3\xA3 ",
1545
+ " \u263A \u2588\u2588\u2588\xA3\xA3\xA3 ",
1546
+ " \u263A\u2588\u2588\u2588\xA3\xA3\xA3 ",
1547
+ " \u263A\u2588\u2588\u2588\xA3\xA3\xA3 ",
1548
+ " \u263A\u2593\u2588\u2588\xA3\xA3\xA3 ",
1549
+ " \u263A\u2593\u2588\u2588\xA3\xA3\xA3 ",
1550
+ " \u263A\u2592\u2588\u2588\xA3\xA3\xA3 ",
1551
+ " \u263A\u2592\u2588\u2588\xA3\xA3\xA3 ",
1552
+ " \u263A\u2591\u2588\u2588\xA3\xA3\xA3 ",
1553
+ " \u263A\u2591\u2588\u2588\xA3\xA3\xA3 ",
1554
+ " \u263A \u2588\u2588\xA3\xA3\xA3 ",
1555
+ " \u263A\u2588\u2588\xA3\xA3\xA3 ",
1556
+ " \u263A\u2588\u2588\xA3\xA3\xA3 ",
1557
+ " \u263A\u2593\u2588\xA3\xA3\xA3 ",
1558
+ " \u263A\u2593\u2588\xA3\xA3\xA3 ",
1559
+ " \u263A\u2592\u2588\xA3\xA3\xA3 ",
1560
+ " \u263A\u2592\u2588\xA3\xA3\xA3 ",
1561
+ " \u263A\u2591\u2588\xA3\xA3\xA3 ",
1562
+ " \u263A\u2591\u2588\xA3\xA3\xA3 ",
1563
+ " \u263A \u2588\xA3\xA3\xA3 ",
1564
+ " \u263A\u2588\xA3\xA3\xA3 ",
1565
+ " \u263A\u2588\xA3\xA3\xA3 ",
1566
+ " \u263A\u2593\xA3\xA3\xA3 ",
1567
+ " \u263A\u2593\xA3\xA3\xA3 ",
1568
+ " \u263A\u2592\xA3\xA3\xA3 ",
1569
+ " \u263A\u2592\xA3\xA3\xA3 ",
1570
+ " \u263A\u2591\xA3\xA3\xA3 ",
1571
+ " \u263A\u2591\xA3\xA3\xA3 ",
1572
+ " \u263A \xA3\xA3\xA3 ",
1573
+ " \u263A\xA3\xA3\xA3 ",
1574
+ " \u263A\xA3\xA3\xA3 ",
1575
+ " \u263A\u2593\xA3\xA3 ",
1576
+ " \u263A\u2593\xA3\xA3 ",
1577
+ " \u263A\u2592\xA3\xA3 ",
1578
+ " \u263A\u2592\xA3\xA3 ",
1579
+ " \u263A\u2591\xA3\xA3 ",
1580
+ " \u263A\u2591\xA3\xA3 ",
1581
+ " \u263A \xA3\xA3 ",
1582
+ " \u263A\xA3\xA3 ",
1583
+ " \u263A\xA3\xA3 ",
1584
+ " \u263A\u2593\xA3 ",
1585
+ " \u263A\u2593\xA3 ",
1586
+ " \u263A\u2592\xA3 ",
1587
+ " \u263A\u2592\xA3 ",
1588
+ " \u263A\u2591\xA3 ",
1589
+ " \u263A\u2591\xA3 ",
1590
+ " \u263A \xA3 ",
1591
+ " \u263A\xA3 ",
1592
+ " \u263A\xA3 ",
1593
+ " \u263A\u2593 ",
1594
+ " \u263A\u2593 ",
1595
+ " \u263A\u2592 ",
1596
+ " \u263A\u2592 ",
1597
+ " \u263A\u2591 ",
1598
+ " \u263A\u2591 ",
1599
+ " \u263A ",
1600
+ " \u263A &",
1601
+ " \u263A \u263C&",
1602
+ " \u263A \u263C &",
1603
+ " \u263A\u263C &",
1604
+ " \u263A\u263C & ",
1605
+ " \u203C & ",
1606
+ " \u263A & ",
1607
+ " \u203C & ",
1608
+ " \u263A & ",
1609
+ " \u203C & ",
1610
+ " \u263A & ",
1611
+ "\u203C & ",
1612
+ " & ",
1613
+ " & ",
1614
+ " & \u2591 ",
1615
+ " & \u2592 ",
1616
+ " & \u2593 ",
1617
+ " & \xA3 ",
1618
+ " & \u2591\xA3 ",
1619
+ " & \u2592\xA3 ",
1620
+ " & \u2593\xA3 ",
1621
+ " & \xA3\xA3 ",
1622
+ " & \u2591\xA3\xA3 ",
1623
+ " & \u2592\xA3\xA3 ",
1624
+ "& \u2593\xA3\xA3 ",
1625
+ "& \xA3\xA3\xA3 ",
1626
+ " \u2591\xA3\xA3\xA3 ",
1627
+ " \u2592\xA3\xA3\xA3 ",
1628
+ " \u2593\xA3\xA3\xA3 ",
1629
+ " \u2588\xA3\xA3\xA3 ",
1630
+ " \u2591\u2588\xA3\xA3\xA3 ",
1631
+ " \u2592\u2588\xA3\xA3\xA3 ",
1632
+ " \u2593\u2588\xA3\xA3\xA3 ",
1633
+ " \u2588\u2588\xA3\xA3\xA3 ",
1634
+ " \u2591\u2588\u2588\xA3\xA3\xA3 ",
1635
+ " \u2592\u2588\u2588\xA3\xA3\xA3 ",
1636
+ " \u2593\u2588\u2588\xA3\xA3\xA3 ",
1637
+ " \u2588\u2588\u2588\xA3\xA3\xA3 ",
1638
+ " \u2591\u2588\u2588\u2588\xA3\xA3\xA3 ",
1639
+ " \u2592\u2588\u2588\u2588\xA3\xA3\xA3 ",
1640
+ " \u2593\u2588\u2588\u2588\xA3\xA3\xA3 ",
1641
+ " \u2588\u2588\u2588\u2588\xA3\xA3\xA3 ",
1642
+ " \u2591\u2588\u2588\u2588\u2588\xA3\xA3\xA3 ",
1643
+ " \u2592\u2588\u2588\u2588\u2588\xA3\xA3\xA3 ",
1644
+ " \u2593\u2588\u2588\u2588\u2588\xA3\xA3\xA3 ",
1645
+ " \u2588\u2588\u2588\u2588\u2588\xA3\xA3\xA3 ",
1646
+ " \u2591\u2588\u2588\u2588\u2588\u2588\xA3\xA3\xA3 ",
1647
+ " \u2592\u2588\u2588\u2588\u2588\u2588\xA3\xA3\xA3 ",
1648
+ " \u2593\u2588\u2588\u2588\u2588\u2588\xA3\xA3\xA3 ",
1649
+ " \u2588\u2588\u2588\u2588\u2588\u2588\xA3\xA3\xA3 ",
1650
+ " \u2588\u2588\u2588\u2588\u2588\u2588\xA3\xA3\xA3 "
1651
+ ]
1652
+ }
1653
+ };
1654
+ }
1655
+ });
1656
+
1657
+ // ../../node_modules/.pnpm/cli-spinners@2.9.2/node_modules/cli-spinners/index.js
1658
+ var require_cli_spinners = __commonJS({
1659
+ "../../node_modules/.pnpm/cli-spinners@2.9.2/node_modules/cli-spinners/index.js"(exports2, module2) {
1660
+ "use strict";
1661
+ var spinners = Object.assign({}, require_spinners());
1662
+ var spinnersList = Object.keys(spinners);
1663
+ Object.defineProperty(spinners, "random", {
1664
+ get() {
1665
+ const randomIndex = Math.floor(Math.random() * spinnersList.length);
1666
+ const spinnerName = spinnersList[randomIndex];
1667
+ return spinners[spinnerName];
1668
+ }
1669
+ });
1670
+ module2.exports = spinners;
1671
+ }
1672
+ });
1673
+
26
1674
  // src/index.ts
27
1675
  var import_commander7 = require("commander");
1676
+
1677
+ // src/core/runtime-paths.ts
28
1678
  var import_node_fs = require("fs");
1679
+ var import_node_path = __toESM(require("path"), 1);
29
1680
  var import_node_url = require("url");
1681
+ var import_meta = {};
1682
+ var CLI_PACKAGE_NAMES = /* @__PURE__ */ new Set(["@better-webhook/cli", "better-webhook"]);
1683
+ function resolveRealPath(filePath) {
1684
+ try {
1685
+ return (0, import_node_fs.realpathSync)(filePath);
1686
+ } catch {
1687
+ return filePath;
1688
+ }
1689
+ }
1690
+ function readPackageName(packageJsonPath) {
1691
+ if (!(0, import_node_fs.existsSync)(packageJsonPath)) {
1692
+ return void 0;
1693
+ }
1694
+ try {
1695
+ const packageJson = JSON.parse(
1696
+ (0, import_node_fs.readFileSync)(packageJsonPath, { encoding: "utf8" })
1697
+ );
1698
+ return typeof packageJson.name === "string" ? packageJson.name : void 0;
1699
+ } catch {
1700
+ return void 0;
1701
+ }
1702
+ }
1703
+ function isCliPackageName(packageName) {
1704
+ return typeof packageName === "string" && CLI_PACKAGE_NAMES.has(packageName);
1705
+ }
1706
+ function findCliPackageRoot(startDir) {
1707
+ let currentDir = resolveRealPath(import_node_path.default.resolve(startDir));
1708
+ while (true) {
1709
+ const packageJsonPath = import_node_path.default.join(currentDir, "package.json");
1710
+ const packageName = readPackageName(packageJsonPath);
1711
+ if (isCliPackageName(packageName)) {
1712
+ return currentDir;
1713
+ }
1714
+ const parentDir = import_node_path.default.dirname(currentDir);
1715
+ if (parentDir === currentDir) {
1716
+ return void 0;
1717
+ }
1718
+ currentDir = parentDir;
1719
+ }
1720
+ }
1721
+ function resolveRuntimeDir() {
1722
+ if (typeof __dirname !== "undefined") {
1723
+ return resolveRealPath(__dirname);
1724
+ }
1725
+ const moduleUrl = import_meta.url;
1726
+ if (typeof moduleUrl === "string" && moduleUrl.startsWith("file:")) {
1727
+ return import_node_path.default.dirname(resolveRealPath((0, import_node_url.fileURLToPath)(moduleUrl)));
1728
+ }
1729
+ const entryPath = process.argv[1];
1730
+ if (entryPath) {
1731
+ const entryDir = import_node_path.default.dirname(resolveRealPath(import_node_path.default.resolve(entryPath)));
1732
+ const cliPackageRoot = findCliPackageRoot(entryDir);
1733
+ if (cliPackageRoot) {
1734
+ return cliPackageRoot;
1735
+ }
1736
+ return entryDir;
1737
+ }
1738
+ const cwdPackageRoot = findCliPackageRoot(process.cwd());
1739
+ if (cwdPackageRoot) {
1740
+ return cwdPackageRoot;
1741
+ }
1742
+ return process.cwd();
1743
+ }
1744
+
1745
+ // src/core/cli-version.ts
1746
+ var import_node_fs2 = require("fs");
1747
+ var import_node_path2 = __toESM(require("path"), 1);
1748
+ function readPackageVersion(packageJsonPath) {
1749
+ try {
1750
+ const packageJson = JSON.parse(
1751
+ (0, import_node_fs2.readFileSync)(packageJsonPath, { encoding: "utf8" })
1752
+ );
1753
+ return typeof packageJson.version === "string" && packageJson.version ? packageJson.version : void 0;
1754
+ } catch {
1755
+ return void 0;
1756
+ }
1757
+ }
1758
+ function resolveRuntimePackageVersion(runtimeDir) {
1759
+ const searchDirs = [runtimeDir, import_node_path2.default.resolve(runtimeDir, "..")];
1760
+ const visitedRoots = /* @__PURE__ */ new Set();
1761
+ for (const searchDir of searchDirs) {
1762
+ const cliPackageRoot = findCliPackageRoot(searchDir);
1763
+ if (!cliPackageRoot || visitedRoots.has(cliPackageRoot)) {
1764
+ continue;
1765
+ }
1766
+ visitedRoots.add(cliPackageRoot);
1767
+ const version = readPackageVersion(
1768
+ import_node_path2.default.join(cliPackageRoot, "package.json")
1769
+ );
1770
+ if (version) {
1771
+ return version;
1772
+ }
1773
+ }
1774
+ return void 0;
1775
+ }
30
1776
 
31
1777
  // src/commands/templates.ts
32
1778
  var import_commander = require("commander");
33
- var import_ora = __toESM(require("ora"), 1);
1779
+
1780
+ // ../../node_modules/.pnpm/ora@8.2.0/node_modules/ora/index.js
1781
+ var import_node_process7 = __toESM(require("process"), 1);
1782
+
1783
+ // ../../node_modules/.pnpm/chalk@5.6.2/node_modules/chalk/source/vendor/ansi-styles/index.js
1784
+ var ANSI_BACKGROUND_OFFSET = 10;
1785
+ var wrapAnsi16 = (offset = 0) => (code) => `\x1B[${code + offset}m`;
1786
+ var wrapAnsi256 = (offset = 0) => (code) => `\x1B[${38 + offset};5;${code}m`;
1787
+ var wrapAnsi16m = (offset = 0) => (red, green, blue) => `\x1B[${38 + offset};2;${red};${green};${blue}m`;
1788
+ var styles = {
1789
+ modifier: {
1790
+ reset: [0, 0],
1791
+ // 21 isn't widely supported and 22 does the same thing
1792
+ bold: [1, 22],
1793
+ dim: [2, 22],
1794
+ italic: [3, 23],
1795
+ underline: [4, 24],
1796
+ overline: [53, 55],
1797
+ inverse: [7, 27],
1798
+ hidden: [8, 28],
1799
+ strikethrough: [9, 29]
1800
+ },
1801
+ color: {
1802
+ black: [30, 39],
1803
+ red: [31, 39],
1804
+ green: [32, 39],
1805
+ yellow: [33, 39],
1806
+ blue: [34, 39],
1807
+ magenta: [35, 39],
1808
+ cyan: [36, 39],
1809
+ white: [37, 39],
1810
+ // Bright color
1811
+ blackBright: [90, 39],
1812
+ gray: [90, 39],
1813
+ // Alias of `blackBright`
1814
+ grey: [90, 39],
1815
+ // Alias of `blackBright`
1816
+ redBright: [91, 39],
1817
+ greenBright: [92, 39],
1818
+ yellowBright: [93, 39],
1819
+ blueBright: [94, 39],
1820
+ magentaBright: [95, 39],
1821
+ cyanBright: [96, 39],
1822
+ whiteBright: [97, 39]
1823
+ },
1824
+ bgColor: {
1825
+ bgBlack: [40, 49],
1826
+ bgRed: [41, 49],
1827
+ bgGreen: [42, 49],
1828
+ bgYellow: [43, 49],
1829
+ bgBlue: [44, 49],
1830
+ bgMagenta: [45, 49],
1831
+ bgCyan: [46, 49],
1832
+ bgWhite: [47, 49],
1833
+ // Bright color
1834
+ bgBlackBright: [100, 49],
1835
+ bgGray: [100, 49],
1836
+ // Alias of `bgBlackBright`
1837
+ bgGrey: [100, 49],
1838
+ // Alias of `bgBlackBright`
1839
+ bgRedBright: [101, 49],
1840
+ bgGreenBright: [102, 49],
1841
+ bgYellowBright: [103, 49],
1842
+ bgBlueBright: [104, 49],
1843
+ bgMagentaBright: [105, 49],
1844
+ bgCyanBright: [106, 49],
1845
+ bgWhiteBright: [107, 49]
1846
+ }
1847
+ };
1848
+ var modifierNames = Object.keys(styles.modifier);
1849
+ var foregroundColorNames = Object.keys(styles.color);
1850
+ var backgroundColorNames = Object.keys(styles.bgColor);
1851
+ var colorNames = [...foregroundColorNames, ...backgroundColorNames];
1852
+ function assembleStyles() {
1853
+ const codes = /* @__PURE__ */ new Map();
1854
+ for (const [groupName, group] of Object.entries(styles)) {
1855
+ for (const [styleName, style] of Object.entries(group)) {
1856
+ styles[styleName] = {
1857
+ open: `\x1B[${style[0]}m`,
1858
+ close: `\x1B[${style[1]}m`
1859
+ };
1860
+ group[styleName] = styles[styleName];
1861
+ codes.set(style[0], style[1]);
1862
+ }
1863
+ Object.defineProperty(styles, groupName, {
1864
+ value: group,
1865
+ enumerable: false
1866
+ });
1867
+ }
1868
+ Object.defineProperty(styles, "codes", {
1869
+ value: codes,
1870
+ enumerable: false
1871
+ });
1872
+ styles.color.close = "\x1B[39m";
1873
+ styles.bgColor.close = "\x1B[49m";
1874
+ styles.color.ansi = wrapAnsi16();
1875
+ styles.color.ansi256 = wrapAnsi256();
1876
+ styles.color.ansi16m = wrapAnsi16m();
1877
+ styles.bgColor.ansi = wrapAnsi16(ANSI_BACKGROUND_OFFSET);
1878
+ styles.bgColor.ansi256 = wrapAnsi256(ANSI_BACKGROUND_OFFSET);
1879
+ styles.bgColor.ansi16m = wrapAnsi16m(ANSI_BACKGROUND_OFFSET);
1880
+ Object.defineProperties(styles, {
1881
+ rgbToAnsi256: {
1882
+ value(red, green, blue) {
1883
+ if (red === green && green === blue) {
1884
+ if (red < 8) {
1885
+ return 16;
1886
+ }
1887
+ if (red > 248) {
1888
+ return 231;
1889
+ }
1890
+ return Math.round((red - 8) / 247 * 24) + 232;
1891
+ }
1892
+ return 16 + 36 * Math.round(red / 255 * 5) + 6 * Math.round(green / 255 * 5) + Math.round(blue / 255 * 5);
1893
+ },
1894
+ enumerable: false
1895
+ },
1896
+ hexToRgb: {
1897
+ value(hex) {
1898
+ const matches = /[a-f\d]{6}|[a-f\d]{3}/i.exec(hex.toString(16));
1899
+ if (!matches) {
1900
+ return [0, 0, 0];
1901
+ }
1902
+ let [colorString] = matches;
1903
+ if (colorString.length === 3) {
1904
+ colorString = [...colorString].map((character) => character + character).join("");
1905
+ }
1906
+ const integer = Number.parseInt(colorString, 16);
1907
+ return [
1908
+ /* eslint-disable no-bitwise */
1909
+ integer >> 16 & 255,
1910
+ integer >> 8 & 255,
1911
+ integer & 255
1912
+ /* eslint-enable no-bitwise */
1913
+ ];
1914
+ },
1915
+ enumerable: false
1916
+ },
1917
+ hexToAnsi256: {
1918
+ value: (hex) => styles.rgbToAnsi256(...styles.hexToRgb(hex)),
1919
+ enumerable: false
1920
+ },
1921
+ ansi256ToAnsi: {
1922
+ value(code) {
1923
+ if (code < 8) {
1924
+ return 30 + code;
1925
+ }
1926
+ if (code < 16) {
1927
+ return 90 + (code - 8);
1928
+ }
1929
+ let red;
1930
+ let green;
1931
+ let blue;
1932
+ if (code >= 232) {
1933
+ red = ((code - 232) * 10 + 8) / 255;
1934
+ green = red;
1935
+ blue = red;
1936
+ } else {
1937
+ code -= 16;
1938
+ const remainder = code % 36;
1939
+ red = Math.floor(code / 36) / 5;
1940
+ green = Math.floor(remainder / 6) / 5;
1941
+ blue = remainder % 6 / 5;
1942
+ }
1943
+ const value = Math.max(red, green, blue) * 2;
1944
+ if (value === 0) {
1945
+ return 30;
1946
+ }
1947
+ let result = 30 + (Math.round(blue) << 2 | Math.round(green) << 1 | Math.round(red));
1948
+ if (value === 2) {
1949
+ result += 60;
1950
+ }
1951
+ return result;
1952
+ },
1953
+ enumerable: false
1954
+ },
1955
+ rgbToAnsi: {
1956
+ value: (red, green, blue) => styles.ansi256ToAnsi(styles.rgbToAnsi256(red, green, blue)),
1957
+ enumerable: false
1958
+ },
1959
+ hexToAnsi: {
1960
+ value: (hex) => styles.ansi256ToAnsi(styles.hexToAnsi256(hex)),
1961
+ enumerable: false
1962
+ }
1963
+ });
1964
+ return styles;
1965
+ }
1966
+ var ansiStyles = assembleStyles();
1967
+ var ansi_styles_default = ansiStyles;
1968
+
1969
+ // ../../node_modules/.pnpm/chalk@5.6.2/node_modules/chalk/source/vendor/supports-color/index.js
1970
+ var import_node_process = __toESM(require("process"), 1);
1971
+ var import_node_os = __toESM(require("os"), 1);
1972
+ var import_node_tty = __toESM(require("tty"), 1);
1973
+ function hasFlag(flag, argv = globalThis.Deno ? globalThis.Deno.args : import_node_process.default.argv) {
1974
+ const prefix = flag.startsWith("-") ? "" : flag.length === 1 ? "-" : "--";
1975
+ const position = argv.indexOf(prefix + flag);
1976
+ const terminatorPosition = argv.indexOf("--");
1977
+ return position !== -1 && (terminatorPosition === -1 || position < terminatorPosition);
1978
+ }
1979
+ var { env } = import_node_process.default;
1980
+ var flagForceColor;
1981
+ if (hasFlag("no-color") || hasFlag("no-colors") || hasFlag("color=false") || hasFlag("color=never")) {
1982
+ flagForceColor = 0;
1983
+ } else if (hasFlag("color") || hasFlag("colors") || hasFlag("color=true") || hasFlag("color=always")) {
1984
+ flagForceColor = 1;
1985
+ }
1986
+ function envForceColor() {
1987
+ if ("FORCE_COLOR" in env) {
1988
+ if (env.FORCE_COLOR === "true") {
1989
+ return 1;
1990
+ }
1991
+ if (env.FORCE_COLOR === "false") {
1992
+ return 0;
1993
+ }
1994
+ return env.FORCE_COLOR.length === 0 ? 1 : Math.min(Number.parseInt(env.FORCE_COLOR, 10), 3);
1995
+ }
1996
+ }
1997
+ function translateLevel(level) {
1998
+ if (level === 0) {
1999
+ return false;
2000
+ }
2001
+ return {
2002
+ level,
2003
+ hasBasic: true,
2004
+ has256: level >= 2,
2005
+ has16m: level >= 3
2006
+ };
2007
+ }
2008
+ function _supportsColor(haveStream, { streamIsTTY, sniffFlags = true } = {}) {
2009
+ const noFlagForceColor = envForceColor();
2010
+ if (noFlagForceColor !== void 0) {
2011
+ flagForceColor = noFlagForceColor;
2012
+ }
2013
+ const forceColor = sniffFlags ? flagForceColor : noFlagForceColor;
2014
+ if (forceColor === 0) {
2015
+ return 0;
2016
+ }
2017
+ if (sniffFlags) {
2018
+ if (hasFlag("color=16m") || hasFlag("color=full") || hasFlag("color=truecolor")) {
2019
+ return 3;
2020
+ }
2021
+ if (hasFlag("color=256")) {
2022
+ return 2;
2023
+ }
2024
+ }
2025
+ if ("TF_BUILD" in env && "AGENT_NAME" in env) {
2026
+ return 1;
2027
+ }
2028
+ if (haveStream && !streamIsTTY && forceColor === void 0) {
2029
+ return 0;
2030
+ }
2031
+ const min = forceColor || 0;
2032
+ if (env.TERM === "dumb") {
2033
+ return min;
2034
+ }
2035
+ if (import_node_process.default.platform === "win32") {
2036
+ const osRelease = import_node_os.default.release().split(".");
2037
+ if (Number(osRelease[0]) >= 10 && Number(osRelease[2]) >= 10586) {
2038
+ return Number(osRelease[2]) >= 14931 ? 3 : 2;
2039
+ }
2040
+ return 1;
2041
+ }
2042
+ if ("CI" in env) {
2043
+ if (["GITHUB_ACTIONS", "GITEA_ACTIONS", "CIRCLECI"].some((key) => key in env)) {
2044
+ return 3;
2045
+ }
2046
+ if (["TRAVIS", "APPVEYOR", "GITLAB_CI", "BUILDKITE", "DRONE"].some((sign) => sign in env) || env.CI_NAME === "codeship") {
2047
+ return 1;
2048
+ }
2049
+ return min;
2050
+ }
2051
+ if ("TEAMCITY_VERSION" in env) {
2052
+ return /^(9\.(0*[1-9]\d*)\.|\d{2,}\.)/.test(env.TEAMCITY_VERSION) ? 1 : 0;
2053
+ }
2054
+ if (env.COLORTERM === "truecolor") {
2055
+ return 3;
2056
+ }
2057
+ if (env.TERM === "xterm-kitty") {
2058
+ return 3;
2059
+ }
2060
+ if (env.TERM === "xterm-ghostty") {
2061
+ return 3;
2062
+ }
2063
+ if (env.TERM === "wezterm") {
2064
+ return 3;
2065
+ }
2066
+ if ("TERM_PROGRAM" in env) {
2067
+ const version = Number.parseInt((env.TERM_PROGRAM_VERSION || "").split(".")[0], 10);
2068
+ switch (env.TERM_PROGRAM) {
2069
+ case "iTerm.app": {
2070
+ return version >= 3 ? 3 : 2;
2071
+ }
2072
+ case "Apple_Terminal": {
2073
+ return 2;
2074
+ }
2075
+ }
2076
+ }
2077
+ if (/-256(color)?$/i.test(env.TERM)) {
2078
+ return 2;
2079
+ }
2080
+ if (/^screen|^xterm|^vt100|^vt220|^rxvt|color|ansi|cygwin|linux/i.test(env.TERM)) {
2081
+ return 1;
2082
+ }
2083
+ if ("COLORTERM" in env) {
2084
+ return 1;
2085
+ }
2086
+ return min;
2087
+ }
2088
+ function createSupportsColor(stream, options = {}) {
2089
+ const level = _supportsColor(stream, {
2090
+ streamIsTTY: stream && stream.isTTY,
2091
+ ...options
2092
+ });
2093
+ return translateLevel(level);
2094
+ }
2095
+ var supportsColor = {
2096
+ stdout: createSupportsColor({ isTTY: import_node_tty.default.isatty(1) }),
2097
+ stderr: createSupportsColor({ isTTY: import_node_tty.default.isatty(2) })
2098
+ };
2099
+ var supports_color_default = supportsColor;
2100
+
2101
+ // ../../node_modules/.pnpm/chalk@5.6.2/node_modules/chalk/source/utilities.js
2102
+ function stringReplaceAll(string, substring, replacer) {
2103
+ let index = string.indexOf(substring);
2104
+ if (index === -1) {
2105
+ return string;
2106
+ }
2107
+ const substringLength = substring.length;
2108
+ let endIndex = 0;
2109
+ let returnValue = "";
2110
+ do {
2111
+ returnValue += string.slice(endIndex, index) + substring + replacer;
2112
+ endIndex = index + substringLength;
2113
+ index = string.indexOf(substring, endIndex);
2114
+ } while (index !== -1);
2115
+ returnValue += string.slice(endIndex);
2116
+ return returnValue;
2117
+ }
2118
+ function stringEncaseCRLFWithFirstIndex(string, prefix, postfix, index) {
2119
+ let endIndex = 0;
2120
+ let returnValue = "";
2121
+ do {
2122
+ const gotCR = string[index - 1] === "\r";
2123
+ returnValue += string.slice(endIndex, gotCR ? index - 1 : index) + prefix + (gotCR ? "\r\n" : "\n") + postfix;
2124
+ endIndex = index + 1;
2125
+ index = string.indexOf("\n", endIndex);
2126
+ } while (index !== -1);
2127
+ returnValue += string.slice(endIndex);
2128
+ return returnValue;
2129
+ }
2130
+
2131
+ // ../../node_modules/.pnpm/chalk@5.6.2/node_modules/chalk/source/index.js
2132
+ var { stdout: stdoutColor, stderr: stderrColor } = supports_color_default;
2133
+ var GENERATOR = Symbol("GENERATOR");
2134
+ var STYLER = Symbol("STYLER");
2135
+ var IS_EMPTY = Symbol("IS_EMPTY");
2136
+ var levelMapping = [
2137
+ "ansi",
2138
+ "ansi",
2139
+ "ansi256",
2140
+ "ansi16m"
2141
+ ];
2142
+ var styles2 = /* @__PURE__ */ Object.create(null);
2143
+ var applyOptions = (object, options = {}) => {
2144
+ if (options.level && !(Number.isInteger(options.level) && options.level >= 0 && options.level <= 3)) {
2145
+ throw new Error("The `level` option should be an integer from 0 to 3");
2146
+ }
2147
+ const colorLevel = stdoutColor ? stdoutColor.level : 0;
2148
+ object.level = options.level === void 0 ? colorLevel : options.level;
2149
+ };
2150
+ var chalkFactory = (options) => {
2151
+ const chalk2 = (...strings) => strings.join(" ");
2152
+ applyOptions(chalk2, options);
2153
+ Object.setPrototypeOf(chalk2, createChalk.prototype);
2154
+ return chalk2;
2155
+ };
2156
+ function createChalk(options) {
2157
+ return chalkFactory(options);
2158
+ }
2159
+ Object.setPrototypeOf(createChalk.prototype, Function.prototype);
2160
+ for (const [styleName, style] of Object.entries(ansi_styles_default)) {
2161
+ styles2[styleName] = {
2162
+ get() {
2163
+ const builder = createBuilder(this, createStyler(style.open, style.close, this[STYLER]), this[IS_EMPTY]);
2164
+ Object.defineProperty(this, styleName, { value: builder });
2165
+ return builder;
2166
+ }
2167
+ };
2168
+ }
2169
+ styles2.visible = {
2170
+ get() {
2171
+ const builder = createBuilder(this, this[STYLER], true);
2172
+ Object.defineProperty(this, "visible", { value: builder });
2173
+ return builder;
2174
+ }
2175
+ };
2176
+ var getModelAnsi = (model, level, type, ...arguments_) => {
2177
+ if (model === "rgb") {
2178
+ if (level === "ansi16m") {
2179
+ return ansi_styles_default[type].ansi16m(...arguments_);
2180
+ }
2181
+ if (level === "ansi256") {
2182
+ return ansi_styles_default[type].ansi256(ansi_styles_default.rgbToAnsi256(...arguments_));
2183
+ }
2184
+ return ansi_styles_default[type].ansi(ansi_styles_default.rgbToAnsi(...arguments_));
2185
+ }
2186
+ if (model === "hex") {
2187
+ return getModelAnsi("rgb", level, type, ...ansi_styles_default.hexToRgb(...arguments_));
2188
+ }
2189
+ return ansi_styles_default[type][model](...arguments_);
2190
+ };
2191
+ var usedModels = ["rgb", "hex", "ansi256"];
2192
+ for (const model of usedModels) {
2193
+ styles2[model] = {
2194
+ get() {
2195
+ const { level } = this;
2196
+ return function(...arguments_) {
2197
+ const styler = createStyler(getModelAnsi(model, levelMapping[level], "color", ...arguments_), ansi_styles_default.color.close, this[STYLER]);
2198
+ return createBuilder(this, styler, this[IS_EMPTY]);
2199
+ };
2200
+ }
2201
+ };
2202
+ const bgModel = "bg" + model[0].toUpperCase() + model.slice(1);
2203
+ styles2[bgModel] = {
2204
+ get() {
2205
+ const { level } = this;
2206
+ return function(...arguments_) {
2207
+ const styler = createStyler(getModelAnsi(model, levelMapping[level], "bgColor", ...arguments_), ansi_styles_default.bgColor.close, this[STYLER]);
2208
+ return createBuilder(this, styler, this[IS_EMPTY]);
2209
+ };
2210
+ }
2211
+ };
2212
+ }
2213
+ var proto = Object.defineProperties(() => {
2214
+ }, {
2215
+ ...styles2,
2216
+ level: {
2217
+ enumerable: true,
2218
+ get() {
2219
+ return this[GENERATOR].level;
2220
+ },
2221
+ set(level) {
2222
+ this[GENERATOR].level = level;
2223
+ }
2224
+ }
2225
+ });
2226
+ var createStyler = (open, close, parent) => {
2227
+ let openAll;
2228
+ let closeAll;
2229
+ if (parent === void 0) {
2230
+ openAll = open;
2231
+ closeAll = close;
2232
+ } else {
2233
+ openAll = parent.openAll + open;
2234
+ closeAll = close + parent.closeAll;
2235
+ }
2236
+ return {
2237
+ open,
2238
+ close,
2239
+ openAll,
2240
+ closeAll,
2241
+ parent
2242
+ };
2243
+ };
2244
+ var createBuilder = (self, _styler, _isEmpty) => {
2245
+ const builder = (...arguments_) => applyStyle(builder, arguments_.length === 1 ? "" + arguments_[0] : arguments_.join(" "));
2246
+ Object.setPrototypeOf(builder, proto);
2247
+ builder[GENERATOR] = self;
2248
+ builder[STYLER] = _styler;
2249
+ builder[IS_EMPTY] = _isEmpty;
2250
+ return builder;
2251
+ };
2252
+ var applyStyle = (self, string) => {
2253
+ if (self.level <= 0 || !string) {
2254
+ return self[IS_EMPTY] ? "" : string;
2255
+ }
2256
+ let styler = self[STYLER];
2257
+ if (styler === void 0) {
2258
+ return string;
2259
+ }
2260
+ const { openAll, closeAll } = styler;
2261
+ if (string.includes("\x1B")) {
2262
+ while (styler !== void 0) {
2263
+ string = stringReplaceAll(string, styler.close, styler.open);
2264
+ styler = styler.parent;
2265
+ }
2266
+ }
2267
+ const lfIndex = string.indexOf("\n");
2268
+ if (lfIndex !== -1) {
2269
+ string = stringEncaseCRLFWithFirstIndex(string, closeAll, openAll, lfIndex);
2270
+ }
2271
+ return openAll + string + closeAll;
2272
+ };
2273
+ Object.defineProperties(createChalk.prototype, styles2);
2274
+ var chalk = createChalk();
2275
+ var chalkStderr = createChalk({ level: stderrColor ? stderrColor.level : 0 });
2276
+ var source_default = chalk;
2277
+
2278
+ // ../../node_modules/.pnpm/cli-cursor@5.0.0/node_modules/cli-cursor/index.js
2279
+ var import_node_process3 = __toESM(require("process"), 1);
2280
+
2281
+ // ../../node_modules/.pnpm/restore-cursor@5.1.0/node_modules/restore-cursor/index.js
2282
+ var import_node_process2 = __toESM(require("process"), 1);
2283
+
2284
+ // ../../node_modules/.pnpm/mimic-function@5.0.1/node_modules/mimic-function/index.js
2285
+ var copyProperty = (to, from, property, ignoreNonConfigurable) => {
2286
+ if (property === "length" || property === "prototype") {
2287
+ return;
2288
+ }
2289
+ if (property === "arguments" || property === "caller") {
2290
+ return;
2291
+ }
2292
+ const toDescriptor = Object.getOwnPropertyDescriptor(to, property);
2293
+ const fromDescriptor = Object.getOwnPropertyDescriptor(from, property);
2294
+ if (!canCopyProperty(toDescriptor, fromDescriptor) && ignoreNonConfigurable) {
2295
+ return;
2296
+ }
2297
+ Object.defineProperty(to, property, fromDescriptor);
2298
+ };
2299
+ var canCopyProperty = function(toDescriptor, fromDescriptor) {
2300
+ return toDescriptor === void 0 || toDescriptor.configurable || toDescriptor.writable === fromDescriptor.writable && toDescriptor.enumerable === fromDescriptor.enumerable && toDescriptor.configurable === fromDescriptor.configurable && (toDescriptor.writable || toDescriptor.value === fromDescriptor.value);
2301
+ };
2302
+ var changePrototype = (to, from) => {
2303
+ const fromPrototype = Object.getPrototypeOf(from);
2304
+ if (fromPrototype === Object.getPrototypeOf(to)) {
2305
+ return;
2306
+ }
2307
+ Object.setPrototypeOf(to, fromPrototype);
2308
+ };
2309
+ var wrappedToString = (withName, fromBody) => `/* Wrapped ${withName}*/
2310
+ ${fromBody}`;
2311
+ var toStringDescriptor = Object.getOwnPropertyDescriptor(Function.prototype, "toString");
2312
+ var toStringName = Object.getOwnPropertyDescriptor(Function.prototype.toString, "name");
2313
+ var changeToString = (to, from, name) => {
2314
+ const withName = name === "" ? "" : `with ${name.trim()}() `;
2315
+ const newToString = wrappedToString.bind(null, withName, from.toString());
2316
+ Object.defineProperty(newToString, "name", toStringName);
2317
+ const { writable, enumerable, configurable } = toStringDescriptor;
2318
+ Object.defineProperty(to, "toString", { value: newToString, writable, enumerable, configurable });
2319
+ };
2320
+ function mimicFunction(to, from, { ignoreNonConfigurable = false } = {}) {
2321
+ const { name } = to;
2322
+ for (const property of Reflect.ownKeys(from)) {
2323
+ copyProperty(to, from, property, ignoreNonConfigurable);
2324
+ }
2325
+ changePrototype(to, from);
2326
+ changeToString(to, from, name);
2327
+ return to;
2328
+ }
2329
+
2330
+ // ../../node_modules/.pnpm/onetime@7.0.0/node_modules/onetime/index.js
2331
+ var calledFunctions = /* @__PURE__ */ new WeakMap();
2332
+ var onetime = (function_, options = {}) => {
2333
+ if (typeof function_ !== "function") {
2334
+ throw new TypeError("Expected a function");
2335
+ }
2336
+ let returnValue;
2337
+ let callCount = 0;
2338
+ const functionName = function_.displayName || function_.name || "<anonymous>";
2339
+ const onetime2 = function(...arguments_) {
2340
+ calledFunctions.set(onetime2, ++callCount);
2341
+ if (callCount === 1) {
2342
+ returnValue = function_.apply(this, arguments_);
2343
+ function_ = void 0;
2344
+ } else if (options.throw === true) {
2345
+ throw new Error(`Function \`${functionName}\` can only be called once`);
2346
+ }
2347
+ return returnValue;
2348
+ };
2349
+ mimicFunction(onetime2, function_);
2350
+ calledFunctions.set(onetime2, callCount);
2351
+ return onetime2;
2352
+ };
2353
+ onetime.callCount = (function_) => {
2354
+ if (!calledFunctions.has(function_)) {
2355
+ throw new Error(`The given function \`${function_.name}\` is not wrapped by the \`onetime\` package`);
2356
+ }
2357
+ return calledFunctions.get(function_);
2358
+ };
2359
+ var onetime_default = onetime;
2360
+
2361
+ // ../../node_modules/.pnpm/signal-exit@4.1.0/node_modules/signal-exit/dist/mjs/signals.js
2362
+ var signals = [];
2363
+ signals.push("SIGHUP", "SIGINT", "SIGTERM");
2364
+ if (process.platform !== "win32") {
2365
+ signals.push(
2366
+ "SIGALRM",
2367
+ "SIGABRT",
2368
+ "SIGVTALRM",
2369
+ "SIGXCPU",
2370
+ "SIGXFSZ",
2371
+ "SIGUSR2",
2372
+ "SIGTRAP",
2373
+ "SIGSYS",
2374
+ "SIGQUIT",
2375
+ "SIGIOT"
2376
+ // should detect profiler and enable/disable accordingly.
2377
+ // see #21
2378
+ // 'SIGPROF'
2379
+ );
2380
+ }
2381
+ if (process.platform === "linux") {
2382
+ signals.push("SIGIO", "SIGPOLL", "SIGPWR", "SIGSTKFLT");
2383
+ }
2384
+
2385
+ // ../../node_modules/.pnpm/signal-exit@4.1.0/node_modules/signal-exit/dist/mjs/index.js
2386
+ var processOk = (process10) => !!process10 && typeof process10 === "object" && typeof process10.removeListener === "function" && typeof process10.emit === "function" && typeof process10.reallyExit === "function" && typeof process10.listeners === "function" && typeof process10.kill === "function" && typeof process10.pid === "number" && typeof process10.on === "function";
2387
+ var kExitEmitter = Symbol.for("signal-exit emitter");
2388
+ var global = globalThis;
2389
+ var ObjectDefineProperty = Object.defineProperty.bind(Object);
2390
+ var Emitter = class {
2391
+ emitted = {
2392
+ afterExit: false,
2393
+ exit: false
2394
+ };
2395
+ listeners = {
2396
+ afterExit: [],
2397
+ exit: []
2398
+ };
2399
+ count = 0;
2400
+ id = Math.random();
2401
+ constructor() {
2402
+ if (global[kExitEmitter]) {
2403
+ return global[kExitEmitter];
2404
+ }
2405
+ ObjectDefineProperty(global, kExitEmitter, {
2406
+ value: this,
2407
+ writable: false,
2408
+ enumerable: false,
2409
+ configurable: false
2410
+ });
2411
+ }
2412
+ on(ev, fn) {
2413
+ this.listeners[ev].push(fn);
2414
+ }
2415
+ removeListener(ev, fn) {
2416
+ const list = this.listeners[ev];
2417
+ const i = list.indexOf(fn);
2418
+ if (i === -1) {
2419
+ return;
2420
+ }
2421
+ if (i === 0 && list.length === 1) {
2422
+ list.length = 0;
2423
+ } else {
2424
+ list.splice(i, 1);
2425
+ }
2426
+ }
2427
+ emit(ev, code, signal) {
2428
+ if (this.emitted[ev]) {
2429
+ return false;
2430
+ }
2431
+ this.emitted[ev] = true;
2432
+ let ret = false;
2433
+ for (const fn of this.listeners[ev]) {
2434
+ ret = fn(code, signal) === true || ret;
2435
+ }
2436
+ if (ev === "exit") {
2437
+ ret = this.emit("afterExit", code, signal) || ret;
2438
+ }
2439
+ return ret;
2440
+ }
2441
+ };
2442
+ var SignalExitBase = class {
2443
+ };
2444
+ var signalExitWrap = (handler) => {
2445
+ return {
2446
+ onExit(cb, opts) {
2447
+ return handler.onExit(cb, opts);
2448
+ },
2449
+ load() {
2450
+ return handler.load();
2451
+ },
2452
+ unload() {
2453
+ return handler.unload();
2454
+ }
2455
+ };
2456
+ };
2457
+ var SignalExitFallback = class extends SignalExitBase {
2458
+ onExit() {
2459
+ return () => {
2460
+ };
2461
+ }
2462
+ load() {
2463
+ }
2464
+ unload() {
2465
+ }
2466
+ };
2467
+ var SignalExit = class extends SignalExitBase {
2468
+ // "SIGHUP" throws an `ENOSYS` error on Windows,
2469
+ // so use a supported signal instead
2470
+ /* c8 ignore start */
2471
+ #hupSig = process3.platform === "win32" ? "SIGINT" : "SIGHUP";
2472
+ /* c8 ignore stop */
2473
+ #emitter = new Emitter();
2474
+ #process;
2475
+ #originalProcessEmit;
2476
+ #originalProcessReallyExit;
2477
+ #sigListeners = {};
2478
+ #loaded = false;
2479
+ constructor(process10) {
2480
+ super();
2481
+ this.#process = process10;
2482
+ this.#sigListeners = {};
2483
+ for (const sig of signals) {
2484
+ this.#sigListeners[sig] = () => {
2485
+ const listeners = this.#process.listeners(sig);
2486
+ let { count } = this.#emitter;
2487
+ const p = process10;
2488
+ if (typeof p.__signal_exit_emitter__ === "object" && typeof p.__signal_exit_emitter__.count === "number") {
2489
+ count += p.__signal_exit_emitter__.count;
2490
+ }
2491
+ if (listeners.length === count) {
2492
+ this.unload();
2493
+ const ret = this.#emitter.emit("exit", null, sig);
2494
+ const s = sig === "SIGHUP" ? this.#hupSig : sig;
2495
+ if (!ret)
2496
+ process10.kill(process10.pid, s);
2497
+ }
2498
+ };
2499
+ }
2500
+ this.#originalProcessReallyExit = process10.reallyExit;
2501
+ this.#originalProcessEmit = process10.emit;
2502
+ }
2503
+ onExit(cb, opts) {
2504
+ if (!processOk(this.#process)) {
2505
+ return () => {
2506
+ };
2507
+ }
2508
+ if (this.#loaded === false) {
2509
+ this.load();
2510
+ }
2511
+ const ev = opts?.alwaysLast ? "afterExit" : "exit";
2512
+ this.#emitter.on(ev, cb);
2513
+ return () => {
2514
+ this.#emitter.removeListener(ev, cb);
2515
+ if (this.#emitter.listeners["exit"].length === 0 && this.#emitter.listeners["afterExit"].length === 0) {
2516
+ this.unload();
2517
+ }
2518
+ };
2519
+ }
2520
+ load() {
2521
+ if (this.#loaded) {
2522
+ return;
2523
+ }
2524
+ this.#loaded = true;
2525
+ this.#emitter.count += 1;
2526
+ for (const sig of signals) {
2527
+ try {
2528
+ const fn = this.#sigListeners[sig];
2529
+ if (fn)
2530
+ this.#process.on(sig, fn);
2531
+ } catch (_) {
2532
+ }
2533
+ }
2534
+ this.#process.emit = (ev, ...a) => {
2535
+ return this.#processEmit(ev, ...a);
2536
+ };
2537
+ this.#process.reallyExit = (code) => {
2538
+ return this.#processReallyExit(code);
2539
+ };
2540
+ }
2541
+ unload() {
2542
+ if (!this.#loaded) {
2543
+ return;
2544
+ }
2545
+ this.#loaded = false;
2546
+ signals.forEach((sig) => {
2547
+ const listener = this.#sigListeners[sig];
2548
+ if (!listener) {
2549
+ throw new Error("Listener not defined for signal: " + sig);
2550
+ }
2551
+ try {
2552
+ this.#process.removeListener(sig, listener);
2553
+ } catch (_) {
2554
+ }
2555
+ });
2556
+ this.#process.emit = this.#originalProcessEmit;
2557
+ this.#process.reallyExit = this.#originalProcessReallyExit;
2558
+ this.#emitter.count -= 1;
2559
+ }
2560
+ #processReallyExit(code) {
2561
+ if (!processOk(this.#process)) {
2562
+ return 0;
2563
+ }
2564
+ this.#process.exitCode = code || 0;
2565
+ this.#emitter.emit("exit", this.#process.exitCode, null);
2566
+ return this.#originalProcessReallyExit.call(this.#process, this.#process.exitCode);
2567
+ }
2568
+ #processEmit(ev, ...args) {
2569
+ const og = this.#originalProcessEmit;
2570
+ if (ev === "exit" && processOk(this.#process)) {
2571
+ if (typeof args[0] === "number") {
2572
+ this.#process.exitCode = args[0];
2573
+ }
2574
+ const ret = og.call(this.#process, ev, ...args);
2575
+ this.#emitter.emit("exit", this.#process.exitCode, null);
2576
+ return ret;
2577
+ } else {
2578
+ return og.call(this.#process, ev, ...args);
2579
+ }
2580
+ }
2581
+ };
2582
+ var process3 = globalThis.process;
2583
+ var {
2584
+ /**
2585
+ * Called when the process is exiting, whether via signal, explicit
2586
+ * exit, or running out of stuff to do.
2587
+ *
2588
+ * If the global process object is not suitable for instrumentation,
2589
+ * then this will be a no-op.
2590
+ *
2591
+ * Returns a function that may be used to unload signal-exit.
2592
+ */
2593
+ onExit,
2594
+ /**
2595
+ * Load the listeners. Likely you never need to call this, unless
2596
+ * doing a rather deep integration with signal-exit functionality.
2597
+ * Mostly exposed for the benefit of testing.
2598
+ *
2599
+ * @internal
2600
+ */
2601
+ load,
2602
+ /**
2603
+ * Unload the listeners. Likely you never need to call this, unless
2604
+ * doing a rather deep integration with signal-exit functionality.
2605
+ * Mostly exposed for the benefit of testing.
2606
+ *
2607
+ * @internal
2608
+ */
2609
+ unload
2610
+ } = signalExitWrap(processOk(process3) ? new SignalExit(process3) : new SignalExitFallback());
2611
+
2612
+ // ../../node_modules/.pnpm/restore-cursor@5.1.0/node_modules/restore-cursor/index.js
2613
+ var terminal = import_node_process2.default.stderr.isTTY ? import_node_process2.default.stderr : import_node_process2.default.stdout.isTTY ? import_node_process2.default.stdout : void 0;
2614
+ var restoreCursor = terminal ? onetime_default(() => {
2615
+ onExit(() => {
2616
+ terminal.write("\x1B[?25h");
2617
+ }, { alwaysLast: true });
2618
+ }) : () => {
2619
+ };
2620
+ var restore_cursor_default = restoreCursor;
2621
+
2622
+ // ../../node_modules/.pnpm/cli-cursor@5.0.0/node_modules/cli-cursor/index.js
2623
+ var isHidden = false;
2624
+ var cliCursor = {};
2625
+ cliCursor.show = (writableStream = import_node_process3.default.stderr) => {
2626
+ if (!writableStream.isTTY) {
2627
+ return;
2628
+ }
2629
+ isHidden = false;
2630
+ writableStream.write("\x1B[?25h");
2631
+ };
2632
+ cliCursor.hide = (writableStream = import_node_process3.default.stderr) => {
2633
+ if (!writableStream.isTTY) {
2634
+ return;
2635
+ }
2636
+ restore_cursor_default();
2637
+ isHidden = true;
2638
+ writableStream.write("\x1B[?25l");
2639
+ };
2640
+ cliCursor.toggle = (force, writableStream) => {
2641
+ if (force !== void 0) {
2642
+ isHidden = force;
2643
+ }
2644
+ if (isHidden) {
2645
+ cliCursor.show(writableStream);
2646
+ } else {
2647
+ cliCursor.hide(writableStream);
2648
+ }
2649
+ };
2650
+ var cli_cursor_default = cliCursor;
2651
+
2652
+ // ../../node_modules/.pnpm/ora@8.2.0/node_modules/ora/index.js
2653
+ var import_cli_spinners = __toESM(require_cli_spinners(), 1);
2654
+
2655
+ // ../../node_modules/.pnpm/is-unicode-supported@1.3.0/node_modules/is-unicode-supported/index.js
2656
+ var import_node_process4 = __toESM(require("process"), 1);
2657
+ function isUnicodeSupported() {
2658
+ if (import_node_process4.default.platform !== "win32") {
2659
+ return import_node_process4.default.env.TERM !== "linux";
2660
+ }
2661
+ return Boolean(import_node_process4.default.env.CI) || Boolean(import_node_process4.default.env.WT_SESSION) || Boolean(import_node_process4.default.env.TERMINUS_SUBLIME) || import_node_process4.default.env.ConEmuTask === "{cmd::Cmder}" || import_node_process4.default.env.TERM_PROGRAM === "Terminus-Sublime" || import_node_process4.default.env.TERM_PROGRAM === "vscode" || import_node_process4.default.env.TERM === "xterm-256color" || import_node_process4.default.env.TERM === "alacritty" || import_node_process4.default.env.TERMINAL_EMULATOR === "JetBrains-JediTerm";
2662
+ }
2663
+
2664
+ // ../../node_modules/.pnpm/log-symbols@6.0.0/node_modules/log-symbols/index.js
2665
+ var main = {
2666
+ info: source_default.blue("\u2139"),
2667
+ success: source_default.green("\u2714"),
2668
+ warning: source_default.yellow("\u26A0"),
2669
+ error: source_default.red("\u2716")
2670
+ };
2671
+ var fallback = {
2672
+ info: source_default.blue("i"),
2673
+ success: source_default.green("\u221A"),
2674
+ warning: source_default.yellow("\u203C"),
2675
+ error: source_default.red("\xD7")
2676
+ };
2677
+ var logSymbols = isUnicodeSupported() ? main : fallback;
2678
+ var log_symbols_default = logSymbols;
2679
+
2680
+ // ../../node_modules/.pnpm/ansi-regex@6.2.2/node_modules/ansi-regex/index.js
2681
+ function ansiRegex({ onlyFirst = false } = {}) {
2682
+ const ST = "(?:\\u0007|\\u001B\\u005C|\\u009C)";
2683
+ const osc = `(?:\\u001B\\][\\s\\S]*?${ST})`;
2684
+ const csi = "[\\u001B\\u009B][[\\]()#;?]*(?:\\d{1,4}(?:[;:]\\d{0,4})*)?[\\dA-PR-TZcf-nq-uy=><~]";
2685
+ const pattern = `${osc}|${csi}`;
2686
+ return new RegExp(pattern, onlyFirst ? void 0 : "g");
2687
+ }
2688
+
2689
+ // ../../node_modules/.pnpm/strip-ansi@7.1.2/node_modules/strip-ansi/index.js
2690
+ var regex = ansiRegex();
2691
+ function stripAnsi(string) {
2692
+ if (typeof string !== "string") {
2693
+ throw new TypeError(`Expected a \`string\`, got \`${typeof string}\``);
2694
+ }
2695
+ return string.replace(regex, "");
2696
+ }
2697
+
2698
+ // ../../node_modules/.pnpm/get-east-asian-width@1.4.0/node_modules/get-east-asian-width/lookup.js
2699
+ function isAmbiguous(x) {
2700
+ return x === 161 || x === 164 || x === 167 || x === 168 || x === 170 || x === 173 || x === 174 || x >= 176 && x <= 180 || x >= 182 && x <= 186 || x >= 188 && x <= 191 || x === 198 || x === 208 || x === 215 || x === 216 || x >= 222 && x <= 225 || x === 230 || x >= 232 && x <= 234 || x === 236 || x === 237 || x === 240 || x === 242 || x === 243 || x >= 247 && x <= 250 || x === 252 || x === 254 || x === 257 || x === 273 || x === 275 || x === 283 || x === 294 || x === 295 || x === 299 || x >= 305 && x <= 307 || x === 312 || x >= 319 && x <= 322 || x === 324 || x >= 328 && x <= 331 || x === 333 || x === 338 || x === 339 || x === 358 || x === 359 || x === 363 || x === 462 || x === 464 || x === 466 || x === 468 || x === 470 || x === 472 || x === 474 || x === 476 || x === 593 || x === 609 || x === 708 || x === 711 || x >= 713 && x <= 715 || x === 717 || x === 720 || x >= 728 && x <= 731 || x === 733 || x === 735 || x >= 768 && x <= 879 || x >= 913 && x <= 929 || x >= 931 && x <= 937 || x >= 945 && x <= 961 || x >= 963 && x <= 969 || x === 1025 || x >= 1040 && x <= 1103 || x === 1105 || x === 8208 || x >= 8211 && x <= 8214 || x === 8216 || x === 8217 || x === 8220 || x === 8221 || x >= 8224 && x <= 8226 || x >= 8228 && x <= 8231 || x === 8240 || x === 8242 || x === 8243 || x === 8245 || x === 8251 || x === 8254 || x === 8308 || x === 8319 || x >= 8321 && x <= 8324 || x === 8364 || x === 8451 || x === 8453 || x === 8457 || x === 8467 || x === 8470 || x === 8481 || x === 8482 || x === 8486 || x === 8491 || x === 8531 || x === 8532 || x >= 8539 && x <= 8542 || x >= 8544 && x <= 8555 || x >= 8560 && x <= 8569 || x === 8585 || x >= 8592 && x <= 8601 || x === 8632 || x === 8633 || x === 8658 || x === 8660 || x === 8679 || x === 8704 || x === 8706 || x === 8707 || x === 8711 || x === 8712 || x === 8715 || x === 8719 || x === 8721 || x === 8725 || x === 8730 || x >= 8733 && x <= 8736 || x === 8739 || x === 8741 || x >= 8743 && x <= 8748 || x === 8750 || x >= 8756 && x <= 8759 || x === 8764 || x === 8765 || x === 8776 || x === 8780 || x === 8786 || x === 8800 || x === 8801 || x >= 8804 && x <= 8807 || x === 8810 || x === 8811 || x === 8814 || x === 8815 || x === 8834 || x === 8835 || x === 8838 || x === 8839 || x === 8853 || x === 8857 || x === 8869 || x === 8895 || x === 8978 || x >= 9312 && x <= 9449 || x >= 9451 && x <= 9547 || x >= 9552 && x <= 9587 || x >= 9600 && x <= 9615 || x >= 9618 && x <= 9621 || x === 9632 || x === 9633 || x >= 9635 && x <= 9641 || x === 9650 || x === 9651 || x === 9654 || x === 9655 || x === 9660 || x === 9661 || x === 9664 || x === 9665 || x >= 9670 && x <= 9672 || x === 9675 || x >= 9678 && x <= 9681 || x >= 9698 && x <= 9701 || x === 9711 || x === 9733 || x === 9734 || x === 9737 || x === 9742 || x === 9743 || x === 9756 || x === 9758 || x === 9792 || x === 9794 || x === 9824 || x === 9825 || x >= 9827 && x <= 9829 || x >= 9831 && x <= 9834 || x === 9836 || x === 9837 || x === 9839 || x === 9886 || x === 9887 || x === 9919 || x >= 9926 && x <= 9933 || x >= 9935 && x <= 9939 || x >= 9941 && x <= 9953 || x === 9955 || x === 9960 || x === 9961 || x >= 9963 && x <= 9969 || x === 9972 || x >= 9974 && x <= 9977 || x === 9979 || x === 9980 || x === 9982 || x === 9983 || x === 10045 || x >= 10102 && x <= 10111 || x >= 11094 && x <= 11097 || x >= 12872 && x <= 12879 || x >= 57344 && x <= 63743 || x >= 65024 && x <= 65039 || x === 65533 || x >= 127232 && x <= 127242 || x >= 127248 && x <= 127277 || x >= 127280 && x <= 127337 || x >= 127344 && x <= 127373 || x === 127375 || x === 127376 || x >= 127387 && x <= 127404 || x >= 917760 && x <= 917999 || x >= 983040 && x <= 1048573 || x >= 1048576 && x <= 1114109;
2701
+ }
2702
+ function isFullWidth(x) {
2703
+ return x === 12288 || x >= 65281 && x <= 65376 || x >= 65504 && x <= 65510;
2704
+ }
2705
+ function isWide(x) {
2706
+ return x >= 4352 && x <= 4447 || x === 8986 || x === 8987 || x === 9001 || x === 9002 || x >= 9193 && x <= 9196 || x === 9200 || x === 9203 || x === 9725 || x === 9726 || x === 9748 || x === 9749 || x >= 9776 && x <= 9783 || x >= 9800 && x <= 9811 || x === 9855 || x >= 9866 && x <= 9871 || x === 9875 || x === 9889 || x === 9898 || x === 9899 || x === 9917 || x === 9918 || x === 9924 || x === 9925 || x === 9934 || x === 9940 || x === 9962 || x === 9970 || x === 9971 || x === 9973 || x === 9978 || x === 9981 || x === 9989 || x === 9994 || x === 9995 || x === 10024 || x === 10060 || x === 10062 || x >= 10067 && x <= 10069 || x === 10071 || x >= 10133 && x <= 10135 || x === 10160 || x === 10175 || x === 11035 || x === 11036 || x === 11088 || x === 11093 || x >= 11904 && x <= 11929 || x >= 11931 && x <= 12019 || x >= 12032 && x <= 12245 || x >= 12272 && x <= 12287 || x >= 12289 && x <= 12350 || x >= 12353 && x <= 12438 || x >= 12441 && x <= 12543 || x >= 12549 && x <= 12591 || x >= 12593 && x <= 12686 || x >= 12688 && x <= 12773 || x >= 12783 && x <= 12830 || x >= 12832 && x <= 12871 || x >= 12880 && x <= 42124 || x >= 42128 && x <= 42182 || x >= 43360 && x <= 43388 || x >= 44032 && x <= 55203 || x >= 63744 && x <= 64255 || x >= 65040 && x <= 65049 || x >= 65072 && x <= 65106 || x >= 65108 && x <= 65126 || x >= 65128 && x <= 65131 || x >= 94176 && x <= 94180 || x >= 94192 && x <= 94198 || x >= 94208 && x <= 101589 || x >= 101631 && x <= 101662 || x >= 101760 && x <= 101874 || x >= 110576 && x <= 110579 || x >= 110581 && x <= 110587 || x === 110589 || x === 110590 || x >= 110592 && x <= 110882 || x === 110898 || x >= 110928 && x <= 110930 || x === 110933 || x >= 110948 && x <= 110951 || x >= 110960 && x <= 111355 || x >= 119552 && x <= 119638 || x >= 119648 && x <= 119670 || x === 126980 || x === 127183 || x === 127374 || x >= 127377 && x <= 127386 || x >= 127488 && x <= 127490 || x >= 127504 && x <= 127547 || x >= 127552 && x <= 127560 || x === 127568 || x === 127569 || x >= 127584 && x <= 127589 || x >= 127744 && x <= 127776 || x >= 127789 && x <= 127797 || x >= 127799 && x <= 127868 || x >= 127870 && x <= 127891 || x >= 127904 && x <= 127946 || x >= 127951 && x <= 127955 || x >= 127968 && x <= 127984 || x === 127988 || x >= 127992 && x <= 128062 || x === 128064 || x >= 128066 && x <= 128252 || x >= 128255 && x <= 128317 || x >= 128331 && x <= 128334 || x >= 128336 && x <= 128359 || x === 128378 || x === 128405 || x === 128406 || x === 128420 || x >= 128507 && x <= 128591 || x >= 128640 && x <= 128709 || x === 128716 || x >= 128720 && x <= 128722 || x >= 128725 && x <= 128728 || x >= 128732 && x <= 128735 || x === 128747 || x === 128748 || x >= 128756 && x <= 128764 || x >= 128992 && x <= 129003 || x === 129008 || x >= 129292 && x <= 129338 || x >= 129340 && x <= 129349 || x >= 129351 && x <= 129535 || x >= 129648 && x <= 129660 || x >= 129664 && x <= 129674 || x >= 129678 && x <= 129734 || x === 129736 || x >= 129741 && x <= 129756 || x >= 129759 && x <= 129770 || x >= 129775 && x <= 129784 || x >= 131072 && x <= 196605 || x >= 196608 && x <= 262141;
2707
+ }
2708
+
2709
+ // ../../node_modules/.pnpm/get-east-asian-width@1.4.0/node_modules/get-east-asian-width/index.js
2710
+ function validate(codePoint) {
2711
+ if (!Number.isSafeInteger(codePoint)) {
2712
+ throw new TypeError(`Expected a code point, got \`${typeof codePoint}\`.`);
2713
+ }
2714
+ }
2715
+ function eastAsianWidth(codePoint, { ambiguousAsWide = false } = {}) {
2716
+ validate(codePoint);
2717
+ if (isFullWidth(codePoint) || isWide(codePoint) || ambiguousAsWide && isAmbiguous(codePoint)) {
2718
+ return 2;
2719
+ }
2720
+ return 1;
2721
+ }
2722
+
2723
+ // ../../node_modules/.pnpm/emoji-regex@10.6.0/node_modules/emoji-regex/index.mjs
2724
+ var emoji_regex_default = () => {
2725
+ return /[#*0-9]\uFE0F?\u20E3|[\xA9\xAE\u203C\u2049\u2122\u2139\u2194-\u2199\u21A9\u21AA\u231A\u231B\u2328\u23CF\u23ED-\u23EF\u23F1\u23F2\u23F8-\u23FA\u24C2\u25AA\u25AB\u25B6\u25C0\u25FB\u25FC\u25FE\u2600-\u2604\u260E\u2611\u2614\u2615\u2618\u2620\u2622\u2623\u2626\u262A\u262E\u262F\u2638-\u263A\u2640\u2642\u2648-\u2653\u265F\u2660\u2663\u2665\u2666\u2668\u267B\u267E\u267F\u2692\u2694-\u2697\u2699\u269B\u269C\u26A0\u26A7\u26AA\u26B0\u26B1\u26BD\u26BE\u26C4\u26C8\u26CF\u26D1\u26E9\u26F0-\u26F5\u26F7\u26F8\u26FA\u2702\u2708\u2709\u270F\u2712\u2714\u2716\u271D\u2721\u2733\u2734\u2744\u2747\u2757\u2763\u27A1\u2934\u2935\u2B05-\u2B07\u2B1B\u2B1C\u2B55\u3030\u303D\u3297\u3299]\uFE0F?|[\u261D\u270C\u270D](?:\uD83C[\uDFFB-\uDFFF]|\uFE0F)?|[\u270A\u270B](?:\uD83C[\uDFFB-\uDFFF])?|[\u23E9-\u23EC\u23F0\u23F3\u25FD\u2693\u26A1\u26AB\u26C5\u26CE\u26D4\u26EA\u26FD\u2705\u2728\u274C\u274E\u2753-\u2755\u2795-\u2797\u27B0\u27BF\u2B50]|\u26D3\uFE0F?(?:\u200D\uD83D\uDCA5)?|\u26F9(?:\uD83C[\uDFFB-\uDFFF]|\uFE0F)?(?:\u200D[\u2640\u2642]\uFE0F?)?|\u2764\uFE0F?(?:\u200D(?:\uD83D\uDD25|\uD83E\uDE79))?|\uD83C(?:[\uDC04\uDD70\uDD71\uDD7E\uDD7F\uDE02\uDE37\uDF21\uDF24-\uDF2C\uDF36\uDF7D\uDF96\uDF97\uDF99-\uDF9B\uDF9E\uDF9F\uDFCD\uDFCE\uDFD4-\uDFDF\uDFF5\uDFF7]\uFE0F?|[\uDF85\uDFC2\uDFC7](?:\uD83C[\uDFFB-\uDFFF])?|[\uDFC4\uDFCA](?:\uD83C[\uDFFB-\uDFFF])?(?:\u200D[\u2640\u2642]\uFE0F?)?|[\uDFCB\uDFCC](?:\uD83C[\uDFFB-\uDFFF]|\uFE0F)?(?:\u200D[\u2640\u2642]\uFE0F?)?|[\uDCCF\uDD8E\uDD91-\uDD9A\uDE01\uDE1A\uDE2F\uDE32-\uDE36\uDE38-\uDE3A\uDE50\uDE51\uDF00-\uDF20\uDF2D-\uDF35\uDF37-\uDF43\uDF45-\uDF4A\uDF4C-\uDF7C\uDF7E-\uDF84\uDF86-\uDF93\uDFA0-\uDFC1\uDFC5\uDFC6\uDFC8\uDFC9\uDFCF-\uDFD3\uDFE0-\uDFF0\uDFF8-\uDFFF]|\uDDE6\uD83C[\uDDE8-\uDDEC\uDDEE\uDDF1\uDDF2\uDDF4\uDDF6-\uDDFA\uDDFC\uDDFD\uDDFF]|\uDDE7\uD83C[\uDDE6\uDDE7\uDDE9-\uDDEF\uDDF1-\uDDF4\uDDF6-\uDDF9\uDDFB\uDDFC\uDDFE\uDDFF]|\uDDE8\uD83C[\uDDE6\uDDE8\uDDE9\uDDEB-\uDDEE\uDDF0-\uDDF7\uDDFA-\uDDFF]|\uDDE9\uD83C[\uDDEA\uDDEC\uDDEF\uDDF0\uDDF2\uDDF4\uDDFF]|\uDDEA\uD83C[\uDDE6\uDDE8\uDDEA\uDDEC\uDDED\uDDF7-\uDDFA]|\uDDEB\uD83C[\uDDEE-\uDDF0\uDDF2\uDDF4\uDDF7]|\uDDEC\uD83C[\uDDE6\uDDE7\uDDE9-\uDDEE\uDDF1-\uDDF3\uDDF5-\uDDFA\uDDFC\uDDFE]|\uDDED\uD83C[\uDDF0\uDDF2\uDDF3\uDDF7\uDDF9\uDDFA]|\uDDEE\uD83C[\uDDE8-\uDDEA\uDDF1-\uDDF4\uDDF6-\uDDF9]|\uDDEF\uD83C[\uDDEA\uDDF2\uDDF4\uDDF5]|\uDDF0\uD83C[\uDDEA\uDDEC-\uDDEE\uDDF2\uDDF3\uDDF5\uDDF7\uDDFC\uDDFE\uDDFF]|\uDDF1\uD83C[\uDDE6-\uDDE8\uDDEE\uDDF0\uDDF7-\uDDFB\uDDFE]|\uDDF2\uD83C[\uDDE6\uDDE8-\uDDED\uDDF0-\uDDFF]|\uDDF3\uD83C[\uDDE6\uDDE8\uDDEA-\uDDEC\uDDEE\uDDF1\uDDF4\uDDF5\uDDF7\uDDFA\uDDFF]|\uDDF4\uD83C\uDDF2|\uDDF5\uD83C[\uDDE6\uDDEA-\uDDED\uDDF0-\uDDF3\uDDF7-\uDDF9\uDDFC\uDDFE]|\uDDF6\uD83C\uDDE6|\uDDF7\uD83C[\uDDEA\uDDF4\uDDF8\uDDFA\uDDFC]|\uDDF8\uD83C[\uDDE6-\uDDEA\uDDEC-\uDDF4\uDDF7-\uDDF9\uDDFB\uDDFD-\uDDFF]|\uDDF9\uD83C[\uDDE6\uDDE8\uDDE9\uDDEB-\uDDED\uDDEF-\uDDF4\uDDF7\uDDF9\uDDFB\uDDFC\uDDFF]|\uDDFA\uD83C[\uDDE6\uDDEC\uDDF2\uDDF3\uDDF8\uDDFE\uDDFF]|\uDDFB\uD83C[\uDDE6\uDDE8\uDDEA\uDDEC\uDDEE\uDDF3\uDDFA]|\uDDFC\uD83C[\uDDEB\uDDF8]|\uDDFD\uD83C\uDDF0|\uDDFE\uD83C[\uDDEA\uDDF9]|\uDDFF\uD83C[\uDDE6\uDDF2\uDDFC]|\uDF44(?:\u200D\uD83D\uDFEB)?|\uDF4B(?:\u200D\uD83D\uDFE9)?|\uDFC3(?:\uD83C[\uDFFB-\uDFFF])?(?:\u200D(?:[\u2640\u2642]\uFE0F?(?:\u200D\u27A1\uFE0F?)?|\u27A1\uFE0F?))?|\uDFF3\uFE0F?(?:\u200D(?:\u26A7\uFE0F?|\uD83C\uDF08))?|\uDFF4(?:\u200D\u2620\uFE0F?|\uDB40\uDC67\uDB40\uDC62\uDB40(?:\uDC65\uDB40\uDC6E\uDB40\uDC67|\uDC73\uDB40\uDC63\uDB40\uDC74|\uDC77\uDB40\uDC6C\uDB40\uDC73)\uDB40\uDC7F)?)|\uD83D(?:[\uDC3F\uDCFD\uDD49\uDD4A\uDD6F\uDD70\uDD73\uDD76-\uDD79\uDD87\uDD8A-\uDD8D\uDDA5\uDDA8\uDDB1\uDDB2\uDDBC\uDDC2-\uDDC4\uDDD1-\uDDD3\uDDDC-\uDDDE\uDDE1\uDDE3\uDDE8\uDDEF\uDDF3\uDDFA\uDECB\uDECD-\uDECF\uDEE0-\uDEE5\uDEE9\uDEF0\uDEF3]\uFE0F?|[\uDC42\uDC43\uDC46-\uDC50\uDC66\uDC67\uDC6B-\uDC6D\uDC72\uDC74-\uDC76\uDC78\uDC7C\uDC83\uDC85\uDC8F\uDC91\uDCAA\uDD7A\uDD95\uDD96\uDE4C\uDE4F\uDEC0\uDECC](?:\uD83C[\uDFFB-\uDFFF])?|[\uDC6E-\uDC71\uDC73\uDC77\uDC81\uDC82\uDC86\uDC87\uDE45-\uDE47\uDE4B\uDE4D\uDE4E\uDEA3\uDEB4\uDEB5](?:\uD83C[\uDFFB-\uDFFF])?(?:\u200D[\u2640\u2642]\uFE0F?)?|[\uDD74\uDD90](?:\uD83C[\uDFFB-\uDFFF]|\uFE0F)?|[\uDC00-\uDC07\uDC09-\uDC14\uDC16-\uDC25\uDC27-\uDC3A\uDC3C-\uDC3E\uDC40\uDC44\uDC45\uDC51-\uDC65\uDC6A\uDC79-\uDC7B\uDC7D-\uDC80\uDC84\uDC88-\uDC8E\uDC90\uDC92-\uDCA9\uDCAB-\uDCFC\uDCFF-\uDD3D\uDD4B-\uDD4E\uDD50-\uDD67\uDDA4\uDDFB-\uDE2D\uDE2F-\uDE34\uDE37-\uDE41\uDE43\uDE44\uDE48-\uDE4A\uDE80-\uDEA2\uDEA4-\uDEB3\uDEB7-\uDEBF\uDEC1-\uDEC5\uDED0-\uDED2\uDED5-\uDED8\uDEDC-\uDEDF\uDEEB\uDEEC\uDEF4-\uDEFC\uDFE0-\uDFEB\uDFF0]|\uDC08(?:\u200D\u2B1B)?|\uDC15(?:\u200D\uD83E\uDDBA)?|\uDC26(?:\u200D(?:\u2B1B|\uD83D\uDD25))?|\uDC3B(?:\u200D\u2744\uFE0F?)?|\uDC41\uFE0F?(?:\u200D\uD83D\uDDE8\uFE0F?)?|\uDC68(?:\u200D(?:[\u2695\u2696\u2708]\uFE0F?|\u2764\uFE0F?\u200D\uD83D(?:\uDC8B\u200D\uD83D)?\uDC68|\uD83C[\uDF3E\uDF73\uDF7C\uDF93\uDFA4\uDFA8\uDFEB\uDFED]|\uD83D(?:[\uDC68\uDC69]\u200D\uD83D(?:\uDC66(?:\u200D\uD83D\uDC66)?|\uDC67(?:\u200D\uD83D[\uDC66\uDC67])?)|[\uDCBB\uDCBC\uDD27\uDD2C\uDE80\uDE92]|\uDC66(?:\u200D\uD83D\uDC66)?|\uDC67(?:\u200D\uD83D[\uDC66\uDC67])?)|\uD83E(?:[\uDDAF\uDDBC\uDDBD](?:\u200D\u27A1\uFE0F?)?|[\uDDB0-\uDDB3]))|\uD83C(?:\uDFFB(?:\u200D(?:[\u2695\u2696\u2708]\uFE0F?|\u2764\uFE0F?\u200D\uD83D(?:\uDC8B\u200D\uD83D)?\uDC68\uD83C[\uDFFB-\uDFFF]|\uD83C[\uDF3E\uDF73\uDF7C\uDF93\uDFA4\uDFA8\uDFEB\uDFED]|\uD83D(?:[\uDCBB\uDCBC\uDD27\uDD2C\uDE80\uDE92]|\uDC30\u200D\uD83D\uDC68\uD83C[\uDFFC-\uDFFF])|\uD83E(?:[\uDD1D\uDEEF]\u200D\uD83D\uDC68\uD83C[\uDFFC-\uDFFF]|[\uDDAF\uDDBC\uDDBD](?:\u200D\u27A1\uFE0F?)?|[\uDDB0-\uDDB3])))?|\uDFFC(?:\u200D(?:[\u2695\u2696\u2708]\uFE0F?|\u2764\uFE0F?\u200D\uD83D(?:\uDC8B\u200D\uD83D)?\uDC68\uD83C[\uDFFB-\uDFFF]|\uD83C[\uDF3E\uDF73\uDF7C\uDF93\uDFA4\uDFA8\uDFEB\uDFED]|\uD83D(?:[\uDCBB\uDCBC\uDD27\uDD2C\uDE80\uDE92]|\uDC30\u200D\uD83D\uDC68\uD83C[\uDFFB\uDFFD-\uDFFF])|\uD83E(?:[\uDD1D\uDEEF]\u200D\uD83D\uDC68\uD83C[\uDFFB\uDFFD-\uDFFF]|[\uDDAF\uDDBC\uDDBD](?:\u200D\u27A1\uFE0F?)?|[\uDDB0-\uDDB3])))?|\uDFFD(?:\u200D(?:[\u2695\u2696\u2708]\uFE0F?|\u2764\uFE0F?\u200D\uD83D(?:\uDC8B\u200D\uD83D)?\uDC68\uD83C[\uDFFB-\uDFFF]|\uD83C[\uDF3E\uDF73\uDF7C\uDF93\uDFA4\uDFA8\uDFEB\uDFED]|\uD83D(?:[\uDCBB\uDCBC\uDD27\uDD2C\uDE80\uDE92]|\uDC30\u200D\uD83D\uDC68\uD83C[\uDFFB\uDFFC\uDFFE\uDFFF])|\uD83E(?:[\uDD1D\uDEEF]\u200D\uD83D\uDC68\uD83C[\uDFFB\uDFFC\uDFFE\uDFFF]|[\uDDAF\uDDBC\uDDBD](?:\u200D\u27A1\uFE0F?)?|[\uDDB0-\uDDB3])))?|\uDFFE(?:\u200D(?:[\u2695\u2696\u2708]\uFE0F?|\u2764\uFE0F?\u200D\uD83D(?:\uDC8B\u200D\uD83D)?\uDC68\uD83C[\uDFFB-\uDFFF]|\uD83C[\uDF3E\uDF73\uDF7C\uDF93\uDFA4\uDFA8\uDFEB\uDFED]|\uD83D(?:[\uDCBB\uDCBC\uDD27\uDD2C\uDE80\uDE92]|\uDC30\u200D\uD83D\uDC68\uD83C[\uDFFB-\uDFFD\uDFFF])|\uD83E(?:[\uDD1D\uDEEF]\u200D\uD83D\uDC68\uD83C[\uDFFB-\uDFFD\uDFFF]|[\uDDAF\uDDBC\uDDBD](?:\u200D\u27A1\uFE0F?)?|[\uDDB0-\uDDB3])))?|\uDFFF(?:\u200D(?:[\u2695\u2696\u2708]\uFE0F?|\u2764\uFE0F?\u200D\uD83D(?:\uDC8B\u200D\uD83D)?\uDC68\uD83C[\uDFFB-\uDFFF]|\uD83C[\uDF3E\uDF73\uDF7C\uDF93\uDFA4\uDFA8\uDFEB\uDFED]|\uD83D(?:[\uDCBB\uDCBC\uDD27\uDD2C\uDE80\uDE92]|\uDC30\u200D\uD83D\uDC68\uD83C[\uDFFB-\uDFFE])|\uD83E(?:[\uDD1D\uDEEF]\u200D\uD83D\uDC68\uD83C[\uDFFB-\uDFFE]|[\uDDAF\uDDBC\uDDBD](?:\u200D\u27A1\uFE0F?)?|[\uDDB0-\uDDB3])))?))?|\uDC69(?:\u200D(?:[\u2695\u2696\u2708]\uFE0F?|\u2764\uFE0F?\u200D\uD83D(?:\uDC8B\u200D\uD83D)?[\uDC68\uDC69]|\uD83C[\uDF3E\uDF73\uDF7C\uDF93\uDFA4\uDFA8\uDFEB\uDFED]|\uD83D(?:[\uDCBB\uDCBC\uDD27\uDD2C\uDE80\uDE92]|\uDC66(?:\u200D\uD83D\uDC66)?|\uDC67(?:\u200D\uD83D[\uDC66\uDC67])?|\uDC69\u200D\uD83D(?:\uDC66(?:\u200D\uD83D\uDC66)?|\uDC67(?:\u200D\uD83D[\uDC66\uDC67])?))|\uD83E(?:[\uDDAF\uDDBC\uDDBD](?:\u200D\u27A1\uFE0F?)?|[\uDDB0-\uDDB3]))|\uD83C(?:\uDFFB(?:\u200D(?:[\u2695\u2696\u2708]\uFE0F?|\u2764\uFE0F?\u200D\uD83D(?:[\uDC68\uDC69]|\uDC8B\u200D\uD83D[\uDC68\uDC69])\uD83C[\uDFFB-\uDFFF]|\uD83C[\uDF3E\uDF73\uDF7C\uDF93\uDFA4\uDFA8\uDFEB\uDFED]|\uD83D(?:[\uDCBB\uDCBC\uDD27\uDD2C\uDE80\uDE92]|\uDC30\u200D\uD83D\uDC69\uD83C[\uDFFC-\uDFFF])|\uD83E(?:[\uDDAF\uDDBC\uDDBD](?:\u200D\u27A1\uFE0F?)?|[\uDDB0-\uDDB3]|\uDD1D\u200D\uD83D[\uDC68\uDC69]\uD83C[\uDFFC-\uDFFF]|\uDEEF\u200D\uD83D\uDC69\uD83C[\uDFFC-\uDFFF])))?|\uDFFC(?:\u200D(?:[\u2695\u2696\u2708]\uFE0F?|\u2764\uFE0F?\u200D\uD83D(?:[\uDC68\uDC69]|\uDC8B\u200D\uD83D[\uDC68\uDC69])\uD83C[\uDFFB-\uDFFF]|\uD83C[\uDF3E\uDF73\uDF7C\uDF93\uDFA4\uDFA8\uDFEB\uDFED]|\uD83D(?:[\uDCBB\uDCBC\uDD27\uDD2C\uDE80\uDE92]|\uDC30\u200D\uD83D\uDC69\uD83C[\uDFFB\uDFFD-\uDFFF])|\uD83E(?:[\uDDAF\uDDBC\uDDBD](?:\u200D\u27A1\uFE0F?)?|[\uDDB0-\uDDB3]|\uDD1D\u200D\uD83D[\uDC68\uDC69]\uD83C[\uDFFB\uDFFD-\uDFFF]|\uDEEF\u200D\uD83D\uDC69\uD83C[\uDFFB\uDFFD-\uDFFF])))?|\uDFFD(?:\u200D(?:[\u2695\u2696\u2708]\uFE0F?|\u2764\uFE0F?\u200D\uD83D(?:[\uDC68\uDC69]|\uDC8B\u200D\uD83D[\uDC68\uDC69])\uD83C[\uDFFB-\uDFFF]|\uD83C[\uDF3E\uDF73\uDF7C\uDF93\uDFA4\uDFA8\uDFEB\uDFED]|\uD83D(?:[\uDCBB\uDCBC\uDD27\uDD2C\uDE80\uDE92]|\uDC30\u200D\uD83D\uDC69\uD83C[\uDFFB\uDFFC\uDFFE\uDFFF])|\uD83E(?:[\uDDAF\uDDBC\uDDBD](?:\u200D\u27A1\uFE0F?)?|[\uDDB0-\uDDB3]|\uDD1D\u200D\uD83D[\uDC68\uDC69]\uD83C[\uDFFB\uDFFC\uDFFE\uDFFF]|\uDEEF\u200D\uD83D\uDC69\uD83C[\uDFFB\uDFFC\uDFFE\uDFFF])))?|\uDFFE(?:\u200D(?:[\u2695\u2696\u2708]\uFE0F?|\u2764\uFE0F?\u200D\uD83D(?:[\uDC68\uDC69]|\uDC8B\u200D\uD83D[\uDC68\uDC69])\uD83C[\uDFFB-\uDFFF]|\uD83C[\uDF3E\uDF73\uDF7C\uDF93\uDFA4\uDFA8\uDFEB\uDFED]|\uD83D(?:[\uDCBB\uDCBC\uDD27\uDD2C\uDE80\uDE92]|\uDC30\u200D\uD83D\uDC69\uD83C[\uDFFB-\uDFFD\uDFFF])|\uD83E(?:[\uDDAF\uDDBC\uDDBD](?:\u200D\u27A1\uFE0F?)?|[\uDDB0-\uDDB3]|\uDD1D\u200D\uD83D[\uDC68\uDC69]\uD83C[\uDFFB-\uDFFD\uDFFF]|\uDEEF\u200D\uD83D\uDC69\uD83C[\uDFFB-\uDFFD\uDFFF])))?|\uDFFF(?:\u200D(?:[\u2695\u2696\u2708]\uFE0F?|\u2764\uFE0F?\u200D\uD83D(?:[\uDC68\uDC69]|\uDC8B\u200D\uD83D[\uDC68\uDC69])\uD83C[\uDFFB-\uDFFF]|\uD83C[\uDF3E\uDF73\uDF7C\uDF93\uDFA4\uDFA8\uDFEB\uDFED]|\uD83D(?:[\uDCBB\uDCBC\uDD27\uDD2C\uDE80\uDE92]|\uDC30\u200D\uD83D\uDC69\uD83C[\uDFFB-\uDFFE])|\uD83E(?:[\uDDAF\uDDBC\uDDBD](?:\u200D\u27A1\uFE0F?)?|[\uDDB0-\uDDB3]|\uDD1D\u200D\uD83D[\uDC68\uDC69]\uD83C[\uDFFB-\uDFFE]|\uDEEF\u200D\uD83D\uDC69\uD83C[\uDFFB-\uDFFE])))?))?|\uDD75(?:\uD83C[\uDFFB-\uDFFF]|\uFE0F)?(?:\u200D[\u2640\u2642]\uFE0F?)?|\uDE2E(?:\u200D\uD83D\uDCA8)?|\uDE35(?:\u200D\uD83D\uDCAB)?|\uDE36(?:\u200D\uD83C\uDF2B\uFE0F?)?|\uDE42(?:\u200D[\u2194\u2195]\uFE0F?)?|\uDEB6(?:\uD83C[\uDFFB-\uDFFF])?(?:\u200D(?:[\u2640\u2642]\uFE0F?(?:\u200D\u27A1\uFE0F?)?|\u27A1\uFE0F?))?)|\uD83E(?:[\uDD0C\uDD0F\uDD18-\uDD1F\uDD30-\uDD34\uDD36\uDD77\uDDB5\uDDB6\uDDBB\uDDD2\uDDD3\uDDD5\uDEC3-\uDEC5\uDEF0\uDEF2-\uDEF8](?:\uD83C[\uDFFB-\uDFFF])?|[\uDD26\uDD35\uDD37-\uDD39\uDD3C-\uDD3E\uDDB8\uDDB9\uDDCD\uDDCF\uDDD4\uDDD6-\uDDDD](?:\uD83C[\uDFFB-\uDFFF])?(?:\u200D[\u2640\u2642]\uFE0F?)?|[\uDDDE\uDDDF](?:\u200D[\u2640\u2642]\uFE0F?)?|[\uDD0D\uDD0E\uDD10-\uDD17\uDD20-\uDD25\uDD27-\uDD2F\uDD3A\uDD3F-\uDD45\uDD47-\uDD76\uDD78-\uDDB4\uDDB7\uDDBA\uDDBC-\uDDCC\uDDD0\uDDE0-\uDDFF\uDE70-\uDE7C\uDE80-\uDE8A\uDE8E-\uDEC2\uDEC6\uDEC8\uDECD-\uDEDC\uDEDF-\uDEEA\uDEEF]|\uDDCE(?:\uD83C[\uDFFB-\uDFFF])?(?:\u200D(?:[\u2640\u2642]\uFE0F?(?:\u200D\u27A1\uFE0F?)?|\u27A1\uFE0F?))?|\uDDD1(?:\u200D(?:[\u2695\u2696\u2708]\uFE0F?|\uD83C[\uDF3E\uDF73\uDF7C\uDF84\uDF93\uDFA4\uDFA8\uDFEB\uDFED]|\uD83D[\uDCBB\uDCBC\uDD27\uDD2C\uDE80\uDE92]|\uD83E(?:[\uDDAF\uDDBC\uDDBD](?:\u200D\u27A1\uFE0F?)?|[\uDDB0-\uDDB3\uDE70]|\uDD1D\u200D\uD83E\uDDD1|\uDDD1\u200D\uD83E\uDDD2(?:\u200D\uD83E\uDDD2)?|\uDDD2(?:\u200D\uD83E\uDDD2)?))|\uD83C(?:\uDFFB(?:\u200D(?:[\u2695\u2696\u2708]\uFE0F?|\u2764\uFE0F?\u200D(?:\uD83D\uDC8B\u200D)?\uD83E\uDDD1\uD83C[\uDFFC-\uDFFF]|\uD83C[\uDF3E\uDF73\uDF7C\uDF84\uDF93\uDFA4\uDFA8\uDFEB\uDFED]|\uD83D(?:[\uDCBB\uDCBC\uDD27\uDD2C\uDE80\uDE92]|\uDC30\u200D\uD83E\uDDD1\uD83C[\uDFFC-\uDFFF])|\uD83E(?:[\uDDAF\uDDBC\uDDBD](?:\u200D\u27A1\uFE0F?)?|[\uDDB0-\uDDB3\uDE70]|\uDD1D\u200D\uD83E\uDDD1\uD83C[\uDFFB-\uDFFF]|\uDEEF\u200D\uD83E\uDDD1\uD83C[\uDFFC-\uDFFF])))?|\uDFFC(?:\u200D(?:[\u2695\u2696\u2708]\uFE0F?|\u2764\uFE0F?\u200D(?:\uD83D\uDC8B\u200D)?\uD83E\uDDD1\uD83C[\uDFFB\uDFFD-\uDFFF]|\uD83C[\uDF3E\uDF73\uDF7C\uDF84\uDF93\uDFA4\uDFA8\uDFEB\uDFED]|\uD83D(?:[\uDCBB\uDCBC\uDD27\uDD2C\uDE80\uDE92]|\uDC30\u200D\uD83E\uDDD1\uD83C[\uDFFB\uDFFD-\uDFFF])|\uD83E(?:[\uDDAF\uDDBC\uDDBD](?:\u200D\u27A1\uFE0F?)?|[\uDDB0-\uDDB3\uDE70]|\uDD1D\u200D\uD83E\uDDD1\uD83C[\uDFFB-\uDFFF]|\uDEEF\u200D\uD83E\uDDD1\uD83C[\uDFFB\uDFFD-\uDFFF])))?|\uDFFD(?:\u200D(?:[\u2695\u2696\u2708]\uFE0F?|\u2764\uFE0F?\u200D(?:\uD83D\uDC8B\u200D)?\uD83E\uDDD1\uD83C[\uDFFB\uDFFC\uDFFE\uDFFF]|\uD83C[\uDF3E\uDF73\uDF7C\uDF84\uDF93\uDFA4\uDFA8\uDFEB\uDFED]|\uD83D(?:[\uDCBB\uDCBC\uDD27\uDD2C\uDE80\uDE92]|\uDC30\u200D\uD83E\uDDD1\uD83C[\uDFFB\uDFFC\uDFFE\uDFFF])|\uD83E(?:[\uDDAF\uDDBC\uDDBD](?:\u200D\u27A1\uFE0F?)?|[\uDDB0-\uDDB3\uDE70]|\uDD1D\u200D\uD83E\uDDD1\uD83C[\uDFFB-\uDFFF]|\uDEEF\u200D\uD83E\uDDD1\uD83C[\uDFFB\uDFFC\uDFFE\uDFFF])))?|\uDFFE(?:\u200D(?:[\u2695\u2696\u2708]\uFE0F?|\u2764\uFE0F?\u200D(?:\uD83D\uDC8B\u200D)?\uD83E\uDDD1\uD83C[\uDFFB-\uDFFD\uDFFF]|\uD83C[\uDF3E\uDF73\uDF7C\uDF84\uDF93\uDFA4\uDFA8\uDFEB\uDFED]|\uD83D(?:[\uDCBB\uDCBC\uDD27\uDD2C\uDE80\uDE92]|\uDC30\u200D\uD83E\uDDD1\uD83C[\uDFFB-\uDFFD\uDFFF])|\uD83E(?:[\uDDAF\uDDBC\uDDBD](?:\u200D\u27A1\uFE0F?)?|[\uDDB0-\uDDB3\uDE70]|\uDD1D\u200D\uD83E\uDDD1\uD83C[\uDFFB-\uDFFF]|\uDEEF\u200D\uD83E\uDDD1\uD83C[\uDFFB-\uDFFD\uDFFF])))?|\uDFFF(?:\u200D(?:[\u2695\u2696\u2708]\uFE0F?|\u2764\uFE0F?\u200D(?:\uD83D\uDC8B\u200D)?\uD83E\uDDD1\uD83C[\uDFFB-\uDFFE]|\uD83C[\uDF3E\uDF73\uDF7C\uDF84\uDF93\uDFA4\uDFA8\uDFEB\uDFED]|\uD83D(?:[\uDCBB\uDCBC\uDD27\uDD2C\uDE80\uDE92]|\uDC30\u200D\uD83E\uDDD1\uD83C[\uDFFB-\uDFFE])|\uD83E(?:[\uDDAF\uDDBC\uDDBD](?:\u200D\u27A1\uFE0F?)?|[\uDDB0-\uDDB3\uDE70]|\uDD1D\u200D\uD83E\uDDD1\uD83C[\uDFFB-\uDFFF]|\uDEEF\u200D\uD83E\uDDD1\uD83C[\uDFFB-\uDFFE])))?))?|\uDEF1(?:\uD83C(?:\uDFFB(?:\u200D\uD83E\uDEF2\uD83C[\uDFFC-\uDFFF])?|\uDFFC(?:\u200D\uD83E\uDEF2\uD83C[\uDFFB\uDFFD-\uDFFF])?|\uDFFD(?:\u200D\uD83E\uDEF2\uD83C[\uDFFB\uDFFC\uDFFE\uDFFF])?|\uDFFE(?:\u200D\uD83E\uDEF2\uD83C[\uDFFB-\uDFFD\uDFFF])?|\uDFFF(?:\u200D\uD83E\uDEF2\uD83C[\uDFFB-\uDFFE])?))?)/g;
2726
+ };
2727
+
2728
+ // ../../node_modules/.pnpm/string-width@7.2.0/node_modules/string-width/index.js
2729
+ var segmenter = new Intl.Segmenter();
2730
+ var defaultIgnorableCodePointRegex = new RegExp("^\\p{Default_Ignorable_Code_Point}$", "u");
2731
+ function stringWidth(string, options = {}) {
2732
+ if (typeof string !== "string" || string.length === 0) {
2733
+ return 0;
2734
+ }
2735
+ const {
2736
+ ambiguousIsNarrow = true,
2737
+ countAnsiEscapeCodes = false
2738
+ } = options;
2739
+ if (!countAnsiEscapeCodes) {
2740
+ string = stripAnsi(string);
2741
+ }
2742
+ if (string.length === 0) {
2743
+ return 0;
2744
+ }
2745
+ let width = 0;
2746
+ const eastAsianWidthOptions = { ambiguousAsWide: !ambiguousIsNarrow };
2747
+ for (const { segment: character } of segmenter.segment(string)) {
2748
+ const codePoint = character.codePointAt(0);
2749
+ if (codePoint <= 31 || codePoint >= 127 && codePoint <= 159) {
2750
+ continue;
2751
+ }
2752
+ if (codePoint >= 8203 && codePoint <= 8207 || codePoint === 65279) {
2753
+ continue;
2754
+ }
2755
+ if (codePoint >= 768 && codePoint <= 879 || codePoint >= 6832 && codePoint <= 6911 || codePoint >= 7616 && codePoint <= 7679 || codePoint >= 8400 && codePoint <= 8447 || codePoint >= 65056 && codePoint <= 65071) {
2756
+ continue;
2757
+ }
2758
+ if (codePoint >= 55296 && codePoint <= 57343) {
2759
+ continue;
2760
+ }
2761
+ if (codePoint >= 65024 && codePoint <= 65039) {
2762
+ continue;
2763
+ }
2764
+ if (defaultIgnorableCodePointRegex.test(character)) {
2765
+ continue;
2766
+ }
2767
+ if (emoji_regex_default().test(character)) {
2768
+ width += 2;
2769
+ continue;
2770
+ }
2771
+ width += eastAsianWidth(codePoint, eastAsianWidthOptions);
2772
+ }
2773
+ return width;
2774
+ }
2775
+
2776
+ // ../../node_modules/.pnpm/is-interactive@2.0.0/node_modules/is-interactive/index.js
2777
+ function isInteractive({ stream = process.stdout } = {}) {
2778
+ return Boolean(
2779
+ stream && stream.isTTY && process.env.TERM !== "dumb" && !("CI" in process.env)
2780
+ );
2781
+ }
2782
+
2783
+ // ../../node_modules/.pnpm/is-unicode-supported@2.1.0/node_modules/is-unicode-supported/index.js
2784
+ var import_node_process5 = __toESM(require("process"), 1);
2785
+ function isUnicodeSupported2() {
2786
+ const { env: env2 } = import_node_process5.default;
2787
+ const { TERM, TERM_PROGRAM } = env2;
2788
+ if (import_node_process5.default.platform !== "win32") {
2789
+ return TERM !== "linux";
2790
+ }
2791
+ return Boolean(env2.WT_SESSION) || Boolean(env2.TERMINUS_SUBLIME) || env2.ConEmuTask === "{cmd::Cmder}" || TERM_PROGRAM === "Terminus-Sublime" || TERM_PROGRAM === "vscode" || TERM === "xterm-256color" || TERM === "alacritty" || TERM === "rxvt-unicode" || TERM === "rxvt-unicode-256color" || env2.TERMINAL_EMULATOR === "JetBrains-JediTerm";
2792
+ }
2793
+
2794
+ // ../../node_modules/.pnpm/stdin-discarder@0.2.2/node_modules/stdin-discarder/index.js
2795
+ var import_node_process6 = __toESM(require("process"), 1);
2796
+ var ASCII_ETX_CODE = 3;
2797
+ var StdinDiscarder = class {
2798
+ #activeCount = 0;
2799
+ start() {
2800
+ this.#activeCount++;
2801
+ if (this.#activeCount === 1) {
2802
+ this.#realStart();
2803
+ }
2804
+ }
2805
+ stop() {
2806
+ if (this.#activeCount <= 0) {
2807
+ throw new Error("`stop` called more times than `start`");
2808
+ }
2809
+ this.#activeCount--;
2810
+ if (this.#activeCount === 0) {
2811
+ this.#realStop();
2812
+ }
2813
+ }
2814
+ #realStart() {
2815
+ if (import_node_process6.default.platform === "win32" || !import_node_process6.default.stdin.isTTY) {
2816
+ return;
2817
+ }
2818
+ import_node_process6.default.stdin.setRawMode(true);
2819
+ import_node_process6.default.stdin.on("data", this.#handleInput);
2820
+ import_node_process6.default.stdin.resume();
2821
+ }
2822
+ #realStop() {
2823
+ if (!import_node_process6.default.stdin.isTTY) {
2824
+ return;
2825
+ }
2826
+ import_node_process6.default.stdin.off("data", this.#handleInput);
2827
+ import_node_process6.default.stdin.pause();
2828
+ import_node_process6.default.stdin.setRawMode(false);
2829
+ }
2830
+ #handleInput(chunk) {
2831
+ if (chunk[0] === ASCII_ETX_CODE) {
2832
+ import_node_process6.default.emit("SIGINT");
2833
+ }
2834
+ }
2835
+ };
2836
+ var stdinDiscarder = new StdinDiscarder();
2837
+ var stdin_discarder_default = stdinDiscarder;
2838
+
2839
+ // ../../node_modules/.pnpm/ora@8.2.0/node_modules/ora/index.js
2840
+ var import_cli_spinners2 = __toESM(require_cli_spinners(), 1);
2841
+ var Ora = class {
2842
+ #linesToClear = 0;
2843
+ #isDiscardingStdin = false;
2844
+ #lineCount = 0;
2845
+ #frameIndex = -1;
2846
+ #lastSpinnerFrameTime = 0;
2847
+ #options;
2848
+ #spinner;
2849
+ #stream;
2850
+ #id;
2851
+ #initialInterval;
2852
+ #isEnabled;
2853
+ #isSilent;
2854
+ #indent;
2855
+ #text;
2856
+ #prefixText;
2857
+ #suffixText;
2858
+ color;
2859
+ constructor(options) {
2860
+ if (typeof options === "string") {
2861
+ options = {
2862
+ text: options
2863
+ };
2864
+ }
2865
+ this.#options = {
2866
+ color: "cyan",
2867
+ stream: import_node_process7.default.stderr,
2868
+ discardStdin: true,
2869
+ hideCursor: true,
2870
+ ...options
2871
+ };
2872
+ this.color = this.#options.color;
2873
+ this.spinner = this.#options.spinner;
2874
+ this.#initialInterval = this.#options.interval;
2875
+ this.#stream = this.#options.stream;
2876
+ this.#isEnabled = typeof this.#options.isEnabled === "boolean" ? this.#options.isEnabled : isInteractive({ stream: this.#stream });
2877
+ this.#isSilent = typeof this.#options.isSilent === "boolean" ? this.#options.isSilent : false;
2878
+ this.text = this.#options.text;
2879
+ this.prefixText = this.#options.prefixText;
2880
+ this.suffixText = this.#options.suffixText;
2881
+ this.indent = this.#options.indent;
2882
+ if (import_node_process7.default.env.NODE_ENV === "test") {
2883
+ this._stream = this.#stream;
2884
+ this._isEnabled = this.#isEnabled;
2885
+ Object.defineProperty(this, "_linesToClear", {
2886
+ get() {
2887
+ return this.#linesToClear;
2888
+ },
2889
+ set(newValue) {
2890
+ this.#linesToClear = newValue;
2891
+ }
2892
+ });
2893
+ Object.defineProperty(this, "_frameIndex", {
2894
+ get() {
2895
+ return this.#frameIndex;
2896
+ }
2897
+ });
2898
+ Object.defineProperty(this, "_lineCount", {
2899
+ get() {
2900
+ return this.#lineCount;
2901
+ }
2902
+ });
2903
+ }
2904
+ }
2905
+ get indent() {
2906
+ return this.#indent;
2907
+ }
2908
+ set indent(indent = 0) {
2909
+ if (!(indent >= 0 && Number.isInteger(indent))) {
2910
+ throw new Error("The `indent` option must be an integer from 0 and up");
2911
+ }
2912
+ this.#indent = indent;
2913
+ this.#updateLineCount();
2914
+ }
2915
+ get interval() {
2916
+ return this.#initialInterval ?? this.#spinner.interval ?? 100;
2917
+ }
2918
+ get spinner() {
2919
+ return this.#spinner;
2920
+ }
2921
+ set spinner(spinner) {
2922
+ this.#frameIndex = -1;
2923
+ this.#initialInterval = void 0;
2924
+ if (typeof spinner === "object") {
2925
+ if (spinner.frames === void 0) {
2926
+ throw new Error("The given spinner must have a `frames` property");
2927
+ }
2928
+ this.#spinner = spinner;
2929
+ } else if (!isUnicodeSupported2()) {
2930
+ this.#spinner = import_cli_spinners.default.line;
2931
+ } else if (spinner === void 0) {
2932
+ this.#spinner = import_cli_spinners.default.dots;
2933
+ } else if (spinner !== "default" && import_cli_spinners.default[spinner]) {
2934
+ this.#spinner = import_cli_spinners.default[spinner];
2935
+ } else {
2936
+ throw new Error(`There is no built-in spinner named '${spinner}'. See https://github.com/sindresorhus/cli-spinners/blob/main/spinners.json for a full list.`);
2937
+ }
2938
+ }
2939
+ get text() {
2940
+ return this.#text;
2941
+ }
2942
+ set text(value = "") {
2943
+ this.#text = value;
2944
+ this.#updateLineCount();
2945
+ }
2946
+ get prefixText() {
2947
+ return this.#prefixText;
2948
+ }
2949
+ set prefixText(value = "") {
2950
+ this.#prefixText = value;
2951
+ this.#updateLineCount();
2952
+ }
2953
+ get suffixText() {
2954
+ return this.#suffixText;
2955
+ }
2956
+ set suffixText(value = "") {
2957
+ this.#suffixText = value;
2958
+ this.#updateLineCount();
2959
+ }
2960
+ get isSpinning() {
2961
+ return this.#id !== void 0;
2962
+ }
2963
+ #getFullPrefixText(prefixText = this.#prefixText, postfix = " ") {
2964
+ if (typeof prefixText === "string" && prefixText !== "") {
2965
+ return prefixText + postfix;
2966
+ }
2967
+ if (typeof prefixText === "function") {
2968
+ return prefixText() + postfix;
2969
+ }
2970
+ return "";
2971
+ }
2972
+ #getFullSuffixText(suffixText = this.#suffixText, prefix = " ") {
2973
+ if (typeof suffixText === "string" && suffixText !== "") {
2974
+ return prefix + suffixText;
2975
+ }
2976
+ if (typeof suffixText === "function") {
2977
+ return prefix + suffixText();
2978
+ }
2979
+ return "";
2980
+ }
2981
+ #updateLineCount() {
2982
+ const columns = this.#stream.columns ?? 80;
2983
+ const fullPrefixText = this.#getFullPrefixText(this.#prefixText, "-");
2984
+ const fullSuffixText = this.#getFullSuffixText(this.#suffixText, "-");
2985
+ const fullText = " ".repeat(this.#indent) + fullPrefixText + "--" + this.#text + "--" + fullSuffixText;
2986
+ this.#lineCount = 0;
2987
+ for (const line of stripAnsi(fullText).split("\n")) {
2988
+ this.#lineCount += Math.max(1, Math.ceil(stringWidth(line, { countAnsiEscapeCodes: true }) / columns));
2989
+ }
2990
+ }
2991
+ get isEnabled() {
2992
+ return this.#isEnabled && !this.#isSilent;
2993
+ }
2994
+ set isEnabled(value) {
2995
+ if (typeof value !== "boolean") {
2996
+ throw new TypeError("The `isEnabled` option must be a boolean");
2997
+ }
2998
+ this.#isEnabled = value;
2999
+ }
3000
+ get isSilent() {
3001
+ return this.#isSilent;
3002
+ }
3003
+ set isSilent(value) {
3004
+ if (typeof value !== "boolean") {
3005
+ throw new TypeError("The `isSilent` option must be a boolean");
3006
+ }
3007
+ this.#isSilent = value;
3008
+ }
3009
+ frame() {
3010
+ const now = Date.now();
3011
+ if (this.#frameIndex === -1 || now - this.#lastSpinnerFrameTime >= this.interval) {
3012
+ this.#frameIndex = ++this.#frameIndex % this.#spinner.frames.length;
3013
+ this.#lastSpinnerFrameTime = now;
3014
+ }
3015
+ const { frames } = this.#spinner;
3016
+ let frame = frames[this.#frameIndex];
3017
+ if (this.color) {
3018
+ frame = source_default[this.color](frame);
3019
+ }
3020
+ const fullPrefixText = typeof this.#prefixText === "string" && this.#prefixText !== "" ? this.#prefixText + " " : "";
3021
+ const fullText = typeof this.text === "string" ? " " + this.text : "";
3022
+ const fullSuffixText = typeof this.#suffixText === "string" && this.#suffixText !== "" ? " " + this.#suffixText : "";
3023
+ return fullPrefixText + frame + fullText + fullSuffixText;
3024
+ }
3025
+ clear() {
3026
+ if (!this.#isEnabled || !this.#stream.isTTY) {
3027
+ return this;
3028
+ }
3029
+ this.#stream.cursorTo(0);
3030
+ for (let index = 0; index < this.#linesToClear; index++) {
3031
+ if (index > 0) {
3032
+ this.#stream.moveCursor(0, -1);
3033
+ }
3034
+ this.#stream.clearLine(1);
3035
+ }
3036
+ if (this.#indent || this.lastIndent !== this.#indent) {
3037
+ this.#stream.cursorTo(this.#indent);
3038
+ }
3039
+ this.lastIndent = this.#indent;
3040
+ this.#linesToClear = 0;
3041
+ return this;
3042
+ }
3043
+ render() {
3044
+ if (this.#isSilent) {
3045
+ return this;
3046
+ }
3047
+ this.clear();
3048
+ this.#stream.write(this.frame());
3049
+ this.#linesToClear = this.#lineCount;
3050
+ return this;
3051
+ }
3052
+ start(text) {
3053
+ if (text) {
3054
+ this.text = text;
3055
+ }
3056
+ if (this.#isSilent) {
3057
+ return this;
3058
+ }
3059
+ if (!this.#isEnabled) {
3060
+ if (this.text) {
3061
+ this.#stream.write(`- ${this.text}
3062
+ `);
3063
+ }
3064
+ return this;
3065
+ }
3066
+ if (this.isSpinning) {
3067
+ return this;
3068
+ }
3069
+ if (this.#options.hideCursor) {
3070
+ cli_cursor_default.hide(this.#stream);
3071
+ }
3072
+ if (this.#options.discardStdin && import_node_process7.default.stdin.isTTY) {
3073
+ this.#isDiscardingStdin = true;
3074
+ stdin_discarder_default.start();
3075
+ }
3076
+ this.render();
3077
+ this.#id = setInterval(this.render.bind(this), this.interval);
3078
+ return this;
3079
+ }
3080
+ stop() {
3081
+ if (!this.#isEnabled) {
3082
+ return this;
3083
+ }
3084
+ clearInterval(this.#id);
3085
+ this.#id = void 0;
3086
+ this.#frameIndex = 0;
3087
+ this.clear();
3088
+ if (this.#options.hideCursor) {
3089
+ cli_cursor_default.show(this.#stream);
3090
+ }
3091
+ if (this.#options.discardStdin && import_node_process7.default.stdin.isTTY && this.#isDiscardingStdin) {
3092
+ stdin_discarder_default.stop();
3093
+ this.#isDiscardingStdin = false;
3094
+ }
3095
+ return this;
3096
+ }
3097
+ succeed(text) {
3098
+ return this.stopAndPersist({ symbol: log_symbols_default.success, text });
3099
+ }
3100
+ fail(text) {
3101
+ return this.stopAndPersist({ symbol: log_symbols_default.error, text });
3102
+ }
3103
+ warn(text) {
3104
+ return this.stopAndPersist({ symbol: log_symbols_default.warning, text });
3105
+ }
3106
+ info(text) {
3107
+ return this.stopAndPersist({ symbol: log_symbols_default.info, text });
3108
+ }
3109
+ stopAndPersist(options = {}) {
3110
+ if (this.#isSilent) {
3111
+ return this;
3112
+ }
3113
+ const prefixText = options.prefixText ?? this.#prefixText;
3114
+ const fullPrefixText = this.#getFullPrefixText(prefixText, " ");
3115
+ const symbolText = options.symbol ?? " ";
3116
+ const text = options.text ?? this.text;
3117
+ const separatorText = symbolText ? " " : "";
3118
+ const fullText = typeof text === "string" ? separatorText + text : "";
3119
+ const suffixText = options.suffixText ?? this.#suffixText;
3120
+ const fullSuffixText = this.#getFullSuffixText(suffixText, " ");
3121
+ const textToWrite = fullPrefixText + symbolText + fullText + fullSuffixText + "\n";
3122
+ this.stop();
3123
+ this.#stream.write(textToWrite);
3124
+ return this;
3125
+ }
3126
+ };
3127
+ function ora(options) {
3128
+ return new Ora(options);
3129
+ }
3130
+
3131
+ // src/commands/templates.ts
34
3132
  var import_prompts = __toESM(require("prompts"), 1);
35
- var import_chalk = __toESM(require("chalk"), 1);
36
3133
 
37
3134
  // src/core/template-manager.ts
38
3135
  var import_undici = require("undici");
@@ -61,6 +3158,7 @@ var WebhookProviderSchema = import_zod.z.enum([
61
3158
  "shopify",
62
3159
  "twilio",
63
3160
  "ragie",
3161
+ "recall",
64
3162
  "sendgrid",
65
3163
  "slack",
66
3164
  "discord",
@@ -467,7 +3565,7 @@ var listCommand = new import_commander.Command().name("list").alias("ls").descri
467
3565
  "-p, --provider <provider>",
468
3566
  "Filter by provider (stripe, github, etc.)"
469
3567
  ).option("-r, --refresh", "Force refresh the template index cache").action(async (options) => {
470
- const spinner = (0, import_ora.default)("Fetching remote templates...").start();
3568
+ const spinner = ora("Fetching remote templates...").start();
471
3569
  try {
472
3570
  const manager = getTemplateManager();
473
3571
  const templates2 = await manager.listRemoteTemplates({
@@ -475,7 +3573,7 @@ var listCommand = new import_commander.Command().name("list").alias("ls").descri
475
3573
  });
476
3574
  spinner.stop();
477
3575
  if (templates2.length === 0) {
478
- console.log(import_chalk.default.yellow("\u{1F4ED} No remote templates found."));
3576
+ console.log(source_default.yellow("\u{1F4ED} No remote templates found."));
479
3577
  return;
480
3578
  }
481
3579
  let filtered = templates2;
@@ -486,13 +3584,13 @@ var listCommand = new import_commander.Command().name("list").alias("ls").descri
486
3584
  }
487
3585
  if (filtered.length === 0) {
488
3586
  console.log(
489
- import_chalk.default.yellow(
3587
+ source_default.yellow(
490
3588
  `\u{1F4ED} No templates found for provider: ${options.provider}`
491
3589
  )
492
3590
  );
493
3591
  return;
494
3592
  }
495
- console.log(import_chalk.default.bold("\n\u{1F4E6} Available Templates\n"));
3593
+ console.log(source_default.bold("\n\u{1F4E6} Available Templates\n"));
496
3594
  const byProvider = /* @__PURE__ */ new Map();
497
3595
  for (const t of filtered) {
498
3596
  const provider = t.metadata.provider;
@@ -502,24 +3600,24 @@ var listCommand = new import_commander.Command().name("list").alias("ls").descri
502
3600
  byProvider.get(provider).push(t);
503
3601
  }
504
3602
  for (const [provider, providerTemplates] of byProvider) {
505
- console.log(import_chalk.default.cyan.bold(` ${provider.toUpperCase()}`));
3603
+ console.log(source_default.cyan.bold(` ${provider.toUpperCase()}`));
506
3604
  for (const t of providerTemplates) {
507
- const status = t.isDownloaded ? import_chalk.default.green("\u2713 downloaded") : import_chalk.default.gray("\u25CB remote");
508
- console.log(` ${import_chalk.default.white(t.metadata.id)} ${status}`);
3605
+ const status = t.isDownloaded ? source_default.green("\u2713 downloaded") : source_default.gray("\u25CB remote");
3606
+ console.log(` ${source_default.white(t.metadata.id)} ${status}`);
509
3607
  if (t.metadata.description) {
510
- console.log(import_chalk.default.gray(` ${t.metadata.description}`));
3608
+ console.log(source_default.gray(` ${t.metadata.description}`));
511
3609
  }
512
3610
  }
513
3611
  console.log();
514
3612
  }
515
- console.log(import_chalk.default.gray(` Total: ${filtered.length} templates`));
3613
+ console.log(source_default.gray(` Total: ${filtered.length} templates`));
516
3614
  console.log(
517
- import_chalk.default.gray(` Download: better-webhook templates download <id>
3615
+ source_default.gray(` Download: better-webhook templates download <id>
518
3616
  `)
519
3617
  );
520
3618
  } catch (error) {
521
3619
  spinner.fail("Failed to fetch templates");
522
- console.error(import_chalk.default.red(error.message));
3620
+ console.error(source_default.red(error.message));
523
3621
  process.exitCode = 1;
524
3622
  }
525
3623
  });
@@ -527,7 +3625,7 @@ var downloadCommand = new import_commander.Command().name("download").alias("get
527
3625
  async (templateId, options) => {
528
3626
  const manager = getTemplateManager();
529
3627
  if (options?.all) {
530
- const spinner2 = (0, import_ora.default)("Fetching template list...").start();
3628
+ const spinner2 = ora("Fetching template list...").start();
531
3629
  try {
532
3630
  const templates2 = await manager.listRemoteTemplates({
533
3631
  forceRefresh: true
@@ -535,16 +3633,16 @@ var downloadCommand = new import_commander.Command().name("download").alias("get
535
3633
  const toDownload = templates2.filter((t) => !t.isDownloaded);
536
3634
  spinner2.stop();
537
3635
  if (toDownload.length === 0) {
538
- console.log(import_chalk.default.green("\u2713 All templates already downloaded"));
3636
+ console.log(source_default.green("\u2713 All templates already downloaded"));
539
3637
  return;
540
3638
  }
541
3639
  console.log(
542
- import_chalk.default.bold(`
3640
+ source_default.bold(`
543
3641
  Downloading ${toDownload.length} templates...
544
3642
  `)
545
3643
  );
546
3644
  for (const t of toDownload) {
547
- const downloadSpinner = (0, import_ora.default)(
3645
+ const downloadSpinner = ora(
548
3646
  `Downloading ${t.metadata.id}...`
549
3647
  ).start();
550
3648
  try {
@@ -556,16 +3654,16 @@ Downloading ${toDownload.length} templates...
556
3654
  );
557
3655
  }
558
3656
  }
559
- console.log(import_chalk.default.green("\n\u2713 Download complete\n"));
3657
+ console.log(source_default.green("\n\u2713 Download complete\n"));
560
3658
  } catch (error) {
561
3659
  spinner2.fail("Failed to fetch templates");
562
- console.error(import_chalk.default.red(error.message));
3660
+ console.error(source_default.red(error.message));
563
3661
  process.exitCode = 1;
564
3662
  }
565
3663
  return;
566
3664
  }
567
3665
  if (!templateId) {
568
- const spinner2 = (0, import_ora.default)("Fetching templates...").start();
3666
+ const spinner2 = ora("Fetching templates...").start();
569
3667
  try {
570
3668
  const templates2 = await manager.listRemoteTemplates({
571
3669
  forceRefresh: !!options?.refresh
@@ -573,7 +3671,7 @@ Downloading ${toDownload.length} templates...
573
3671
  spinner2.stop();
574
3672
  const notDownloaded = templates2.filter((t) => !t.isDownloaded);
575
3673
  if (notDownloaded.length === 0) {
576
- console.log(import_chalk.default.green("\u2713 All templates already downloaded"));
3674
+ console.log(source_default.green("\u2713 All templates already downloaded"));
577
3675
  return;
578
3676
  }
579
3677
  const choices = notDownloaded.map((t) => ({
@@ -588,29 +3686,29 @@ Downloading ${toDownload.length} templates...
588
3686
  choices
589
3687
  });
590
3688
  if (!response.templateId) {
591
- console.log(import_chalk.default.yellow("Cancelled"));
3689
+ console.log(source_default.yellow("Cancelled"));
592
3690
  return;
593
3691
  }
594
3692
  templateId = response.templateId;
595
3693
  } catch (error) {
596
3694
  spinner2.fail("Failed to fetch templates");
597
- console.error(import_chalk.default.red(error.message));
3695
+ console.error(source_default.red(error.message));
598
3696
  process.exitCode = 1;
599
3697
  return;
600
3698
  }
601
3699
  }
602
- const spinner = (0, import_ora.default)(`Downloading ${templateId}...`).start();
3700
+ const spinner = ora(`Downloading ${templateId}...`).start();
603
3701
  try {
604
3702
  const template = await manager.downloadTemplate(templateId);
605
3703
  spinner.succeed(`Downloaded ${templateId}`);
606
- console.log(import_chalk.default.gray(` Saved to: ${template.filePath}`));
3704
+ console.log(source_default.gray(` Saved to: ${template.filePath}`));
607
3705
  console.log(
608
- import_chalk.default.gray(` Run with: better-webhook run ${templateId}
3706
+ source_default.gray(` Run with: better-webhook run ${templateId}
609
3707
  `)
610
3708
  );
611
3709
  } catch (error) {
612
3710
  spinner.fail(`Failed to download ${templateId}`);
613
- console.error(import_chalk.default.red(error.message));
3711
+ console.error(source_default.red(error.message));
614
3712
  process.exitCode = 1;
615
3713
  }
616
3714
  }
@@ -624,15 +3722,15 @@ var localCommand = new import_commander.Command().name("local").description("Lis
624
3722
  );
625
3723
  }
626
3724
  if (templates2.length === 0) {
627
- console.log(import_chalk.default.yellow("\n\u{1F4ED} No local templates found."));
3725
+ console.log(source_default.yellow("\n\u{1F4ED} No local templates found."));
628
3726
  console.log(
629
- import_chalk.default.gray(
3727
+ source_default.gray(
630
3728
  " Download templates with: better-webhook templates download\n"
631
3729
  )
632
3730
  );
633
3731
  return;
634
3732
  }
635
- console.log(import_chalk.default.bold("\n\u{1F4C1} Local Templates\n"));
3733
+ console.log(source_default.bold("\n\u{1F4C1} Local Templates\n"));
636
3734
  const byProvider = /* @__PURE__ */ new Map();
637
3735
  for (const t of templates2) {
638
3736
  const provider = t.metadata.provider;
@@ -642,62 +3740,62 @@ var localCommand = new import_commander.Command().name("local").description("Lis
642
3740
  byProvider.get(provider).push(t);
643
3741
  }
644
3742
  for (const [provider, providerTemplates] of byProvider) {
645
- console.log(import_chalk.default.cyan.bold(` ${provider.toUpperCase()}`));
3743
+ console.log(source_default.cyan.bold(` ${provider.toUpperCase()}`));
646
3744
  for (const t of providerTemplates) {
647
- console.log(` ${import_chalk.default.white(t.id)}`);
648
- console.log(import_chalk.default.gray(` Event: ${t.metadata.event}`));
3745
+ console.log(` ${source_default.white(t.id)}`);
3746
+ console.log(source_default.gray(` Event: ${t.metadata.event}`));
649
3747
  console.log(
650
- import_chalk.default.gray(
3748
+ source_default.gray(
651
3749
  ` Downloaded: ${new Date(t.downloadedAt).toLocaleDateString()}`
652
3750
  )
653
3751
  );
654
3752
  }
655
3753
  console.log();
656
3754
  }
657
- console.log(import_chalk.default.gray(` Total: ${templates2.length} templates`));
658
- console.log(import_chalk.default.gray(` Storage: ${manager.getTemplatesDir()}
3755
+ console.log(source_default.gray(` Total: ${templates2.length} templates`));
3756
+ console.log(source_default.gray(` Storage: ${manager.getTemplatesDir()}
659
3757
  `));
660
3758
  });
661
3759
  var searchCommand = new import_commander.Command().name("search").argument("<query>", "Search query").description("Search templates by name, provider, or event").action(async (query) => {
662
- const spinner = (0, import_ora.default)("Searching...").start();
3760
+ const spinner = ora("Searching...").start();
663
3761
  try {
664
3762
  const manager = getTemplateManager();
665
3763
  const results = await manager.searchTemplates(query);
666
3764
  spinner.stop();
667
3765
  const totalCount = results.remote.length + results.local.length;
668
3766
  if (totalCount === 0) {
669
- console.log(import_chalk.default.yellow(`
3767
+ console.log(source_default.yellow(`
670
3768
  \u{1F4ED} No templates found for: "${query}"
671
3769
  `));
672
3770
  return;
673
3771
  }
674
- console.log(import_chalk.default.bold(`
3772
+ console.log(source_default.bold(`
675
3773
  \u{1F50D} Search Results for "${query}"
676
3774
  `));
677
3775
  if (results.local.length > 0) {
678
- console.log(import_chalk.default.cyan.bold(" LOCAL TEMPLATES"));
3776
+ console.log(source_default.cyan.bold(" LOCAL TEMPLATES"));
679
3777
  for (const t of results.local) {
680
3778
  console.log(
681
- ` ${import_chalk.default.green("\u2713")} ${t.id} (${t.metadata.provider})`
3779
+ ` ${source_default.green("\u2713")} ${t.id} (${t.metadata.provider})`
682
3780
  );
683
3781
  }
684
3782
  console.log();
685
3783
  }
686
3784
  if (results.remote.length > 0) {
687
- console.log(import_chalk.default.cyan.bold(" REMOTE TEMPLATES"));
3785
+ console.log(source_default.cyan.bold(" REMOTE TEMPLATES"));
688
3786
  for (const t of results.remote) {
689
- const status = t.isDownloaded ? import_chalk.default.green("\u2713") : import_chalk.default.gray("\u25CB");
3787
+ const status = t.isDownloaded ? source_default.green("\u2713") : source_default.gray("\u25CB");
690
3788
  console.log(
691
3789
  ` ${status} ${t.metadata.id} (${t.metadata.provider})`
692
3790
  );
693
3791
  }
694
3792
  console.log();
695
3793
  }
696
- console.log(import_chalk.default.gray(` Found: ${totalCount} templates
3794
+ console.log(source_default.gray(` Found: ${totalCount} templates
697
3795
  `));
698
3796
  } catch (error) {
699
3797
  spinner.fail("Search failed");
700
- console.error(import_chalk.default.red(error.message));
3798
+ console.error(source_default.red(error.message));
701
3799
  process.exitCode = 1;
702
3800
  }
703
3801
  });
@@ -705,7 +3803,7 @@ var cacheCommand = new import_commander.Command().name("cache").description("Man
705
3803
  if (options.clear) {
706
3804
  const manager = getTemplateManager();
707
3805
  manager.clearCache();
708
- console.log(import_chalk.default.green("\u2713 Template cache cleared"));
3806
+ console.log(source_default.green("\u2713 Template cache cleared"));
709
3807
  } else {
710
3808
  console.log("Use --clear to clear the template cache");
711
3809
  }
@@ -714,16 +3812,16 @@ var cleanCommand = new import_commander.Command().name("clean").alias("remove-al
714
3812
  const manager = getTemplateManager();
715
3813
  const templates2 = manager.listLocalTemplates();
716
3814
  if (templates2.length === 0) {
717
- console.log(import_chalk.default.yellow("\n\u{1F4ED} No local templates to remove.\n"));
3815
+ console.log(source_default.yellow("\n\u{1F4ED} No local templates to remove.\n"));
718
3816
  return;
719
3817
  }
720
3818
  console.log(
721
- import_chalk.default.bold(`
3819
+ source_default.bold(`
722
3820
  \u{1F5D1}\uFE0F Found ${templates2.length} downloaded template(s)
723
3821
  `)
724
3822
  );
725
3823
  for (const t of templates2) {
726
- console.log(import_chalk.default.gray(` ${t.id} (${t.metadata.provider})`));
3824
+ console.log(source_default.gray(` ${t.id} (${t.metadata.provider})`));
727
3825
  }
728
3826
  console.log();
729
3827
  if (!options.force) {
@@ -734,47 +3832,46 @@ var cleanCommand = new import_commander.Command().name("clean").alias("remove-al
734
3832
  initial: false
735
3833
  });
736
3834
  if (!response.confirm) {
737
- console.log(import_chalk.default.yellow("Cancelled"));
3835
+ console.log(source_default.yellow("Cancelled"));
738
3836
  return;
739
3837
  }
740
3838
  }
741
3839
  const deleted = manager.deleteAllLocalTemplates();
742
- console.log(import_chalk.default.green(`
3840
+ console.log(source_default.green(`
743
3841
  \u2713 Removed ${deleted} template(s)`));
744
- console.log(import_chalk.default.gray(` Storage: ${manager.getTemplatesDir()}
3842
+ console.log(source_default.gray(` Storage: ${manager.getTemplatesDir()}
745
3843
  `));
746
3844
  });
747
3845
  var templates = new import_commander.Command().name("templates").alias("t").description("Manage webhook templates").addCommand(listCommand).addCommand(downloadCommand).addCommand(localCommand).addCommand(searchCommand).addCommand(cacheCommand).addCommand(cleanCommand);
748
3846
 
749
3847
  // src/commands/run.ts
750
3848
  var import_commander2 = require("commander");
751
- var import_ora2 = __toESM(require("ora"), 1);
752
3849
  var import_prompts2 = __toESM(require("prompts"), 1);
753
- var import_chalk2 = __toESM(require("chalk"), 1);
754
3850
 
755
3851
  // src/core/executor.ts
756
3852
  var import_undici2 = require("undici");
757
3853
 
758
3854
  // src/core/signature.ts
759
- var import_crypto = require("crypto");
3855
+ var import_node_buffer = require("buffer");
3856
+ var import_node_crypto = require("crypto");
760
3857
  function generateStripeSignature(payload, secret, timestamp) {
761
3858
  const ts = timestamp || Math.floor(Date.now() / 1e3);
762
3859
  const signedPayload = `${ts}.${payload}`;
763
- const signature = (0, import_crypto.createHmac)("sha256", secret).update(signedPayload).digest("hex");
3860
+ const signature = (0, import_node_crypto.createHmac)("sha256", secret).update(signedPayload).digest("hex");
764
3861
  return {
765
3862
  header: "Stripe-Signature",
766
3863
  value: `t=${ts},v1=${signature}`
767
3864
  };
768
3865
  }
769
3866
  function generateGitHubSignature(payload, secret) {
770
- const signature = (0, import_crypto.createHmac)("sha256", secret).update(payload).digest("hex");
3867
+ const signature = (0, import_node_crypto.createHmac)("sha256", secret).update(payload).digest("hex");
771
3868
  return {
772
3869
  header: "X-Hub-Signature-256",
773
3870
  value: `sha256=${signature}`
774
3871
  };
775
3872
  }
776
3873
  function generateShopifySignature(payload, secret) {
777
- const signature = (0, import_crypto.createHmac)("sha256", secret).update(payload).digest("base64");
3874
+ const signature = (0, import_node_crypto.createHmac)("sha256", secret).update(payload).digest("base64");
778
3875
  return {
779
3876
  header: "X-Shopify-Hmac-SHA256",
780
3877
  value: signature
@@ -782,7 +3879,7 @@ function generateShopifySignature(payload, secret) {
782
3879
  }
783
3880
  function generateTwilioSignature(payload, secret, url) {
784
3881
  const signatureInput = url + payload;
785
- const signature = (0, import_crypto.createHmac)("sha1", secret).update(signatureInput).digest("base64");
3882
+ const signature = (0, import_node_crypto.createHmac)("sha1", secret).update(signatureInput).digest("base64");
786
3883
  return {
787
3884
  header: "X-Twilio-Signature",
788
3885
  value: signature
@@ -791,14 +3888,14 @@ function generateTwilioSignature(payload, secret, url) {
791
3888
  function generateSlackSignature(payload, secret, timestamp) {
792
3889
  const ts = timestamp || Math.floor(Date.now() / 1e3);
793
3890
  const signatureBaseString = `v0:${ts}:${payload}`;
794
- const signature = (0, import_crypto.createHmac)("sha256", secret).update(signatureBaseString).digest("hex");
3891
+ const signature = (0, import_node_crypto.createHmac)("sha256", secret).update(signatureBaseString).digest("hex");
795
3892
  return {
796
3893
  header: "X-Slack-Signature",
797
3894
  value: `v0=${signature}`
798
3895
  };
799
3896
  }
800
3897
  function generateLinearSignature(payload, secret) {
801
- const signature = (0, import_crypto.createHmac)("sha256", secret).update(payload).digest("hex");
3898
+ const signature = (0, import_node_crypto.createHmac)("sha256", secret).update(payload).digest("hex");
802
3899
  return {
803
3900
  header: "Linear-Signature",
804
3901
  value: signature
@@ -808,7 +3905,7 @@ function generateClerkSignature(payload, secret, timestamp, webhookId) {
808
3905
  const ts = timestamp || Math.floor(Date.now() / 1e3);
809
3906
  const msgId = webhookId || `msg_${Date.now()}`;
810
3907
  const signedPayload = `${msgId}.${ts}.${payload}`;
811
- const signature = (0, import_crypto.createHmac)("sha256", secret).update(signedPayload).digest("base64");
3908
+ const signature = (0, import_node_crypto.createHmac)("sha256", secret).update(signedPayload).digest("base64");
812
3909
  return {
813
3910
  header: "Svix-Signature",
814
3911
  value: `v1,${signature}`
@@ -817,19 +3914,38 @@ function generateClerkSignature(payload, secret, timestamp, webhookId) {
817
3914
  function generateSendGridSignature(payload, secret, timestamp) {
818
3915
  const ts = timestamp || Math.floor(Date.now() / 1e3);
819
3916
  const signedPayload = `${ts}${payload}`;
820
- const signature = (0, import_crypto.createHmac)("sha256", secret).update(signedPayload).digest("base64");
3917
+ const signature = (0, import_node_crypto.createHmac)("sha256", secret).update(signedPayload).digest("base64");
821
3918
  return {
822
3919
  header: "X-Twilio-Email-Event-Webhook-Signature",
823
3920
  value: signature
824
3921
  };
825
3922
  }
826
3923
  function generateRagieSignature(payload, secret) {
827
- const signature = (0, import_crypto.createHmac)("sha256", secret).update(payload).digest("hex");
3924
+ const signature = (0, import_node_crypto.createHmac)("sha256", secret).update(payload).digest("hex");
828
3925
  return {
829
3926
  header: "X-Signature",
830
3927
  value: signature
831
3928
  };
832
3929
  }
3930
+ function generateRecallSignature(payload, secret, timestamp, webhookId) {
3931
+ if (!secret.startsWith("whsec_")) {
3932
+ throw new Error(
3933
+ "Recall signature generation requires a secret with the whsec_ prefix"
3934
+ );
3935
+ }
3936
+ const ts = timestamp ?? Math.floor(Date.now() / 1e3);
3937
+ const msgId = webhookId ?? `msg_${Date.now()}`;
3938
+ const key = import_node_buffer.Buffer.from(secret.slice("whsec_".length), "base64");
3939
+ if (key.length === 0) {
3940
+ throw new Error("Recall signing secret is invalid");
3941
+ }
3942
+ const signedPayload = `${msgId}.${ts}.${payload}`;
3943
+ const signature = (0, import_node_crypto.createHmac)("sha256", key).update(signedPayload).digest("base64");
3944
+ return {
3945
+ header: "Webhook-Signature",
3946
+ value: `v1,${signature}`
3947
+ };
3948
+ }
833
3949
  function generateSignature(provider, payload, secret, options) {
834
3950
  const timestamp = options?.timestamp;
835
3951
  switch (provider) {
@@ -859,6 +3975,13 @@ function generateSignature(provider, payload, secret, options) {
859
3975
  return generateSendGridSignature(payload, secret, timestamp);
860
3976
  case "ragie":
861
3977
  return generateRagieSignature(payload, secret);
3978
+ case "recall":
3979
+ return generateRecallSignature(
3980
+ payload,
3981
+ secret,
3982
+ timestamp,
3983
+ options?.webhookId
3984
+ );
862
3985
  case "discord":
863
3986
  case "custom":
864
3987
  default:
@@ -947,6 +4070,13 @@ function getProviderHeaders(provider, options) {
947
4070
  // Event type + nonce are included in the JSON body envelope.
948
4071
  );
949
4072
  break;
4073
+ case "recall":
4074
+ headers.push(
4075
+ { key: "Content-Type", value: "application/json" },
4076
+ { key: "Webhook-Id", value: options?.webhookId || `msg_${Date.now()}` },
4077
+ { key: "Webhook-Timestamp", value: String(timestamp) }
4078
+ );
4079
+ break;
950
4080
  default:
951
4081
  headers.push({ key: "Content-Type", value: "application/json" });
952
4082
  }
@@ -985,8 +4115,14 @@ async function executeWebhook(options) {
985
4115
  }
986
4116
  }
987
4117
  if (options.secret && options.provider && bodyStr) {
4118
+ const timestampHeader = headers["Webhook-Timestamp"] || headers["webhook-timestamp"] || headers["Svix-Timestamp"] || headers["svix-timestamp"] || headers["X-Slack-Request-Timestamp"] || headers["x-slack-request-timestamp"] || headers["X-Twilio-Email-Event-Webhook-Timestamp"] || headers["x-twilio-email-event-webhook-timestamp"];
4119
+ const parsedTimestamp = timestampHeader ? Number.parseInt(timestampHeader, 10) : void 0;
4120
+ const timestamp = Number.isFinite(parsedTimestamp) ? parsedTimestamp : void 0;
4121
+ const webhookId = headers["Webhook-Id"] || headers["webhook-id"] || headers["Svix-Id"] || headers["svix-id"] || headers["X-GitHub-Delivery"] || headers["x-github-delivery"];
988
4122
  const sig = generateSignature(options.provider, bodyStr, options.secret, {
989
- url: options.url
4123
+ url: options.url,
4124
+ timestamp,
4125
+ webhookId
990
4126
  });
991
4127
  if (sig) {
992
4128
  headers[sig.header] = sig.value;
@@ -1101,6 +4237,7 @@ function getSecretEnvVarName(provider) {
1101
4237
  shopify: "SHOPIFY_WEBHOOK_SECRET",
1102
4238
  twilio: "TWILIO_WEBHOOK_SECRET",
1103
4239
  ragie: "RAGIE_WEBHOOK_SECRET",
4240
+ recall: "RECALL_WEBHOOK_SECRET",
1104
4241
  slack: "SLACK_WEBHOOK_SECRET",
1105
4242
  linear: "LINEAR_WEBHOOK_SECRET",
1106
4243
  clerk: "CLERK_WEBHOOK_SECRET",
@@ -1128,15 +4265,15 @@ var run = new import_commander2.Command().name("run").argument("[templateId]", "
1128
4265
  async (templateId, options) => {
1129
4266
  const manager = getTemplateManager();
1130
4267
  if (!templateId) {
1131
- const spinner2 = (0, import_ora2.default)("Loading templates...").start();
4268
+ const spinner2 = ora("Loading templates...").start();
1132
4269
  try {
1133
4270
  const local = manager.listLocalTemplates();
1134
4271
  const remote = await manager.listRemoteTemplates();
1135
4272
  spinner2.stop();
1136
4273
  if (local.length === 0 && remote.length === 0) {
1137
- console.log(import_chalk2.default.yellow("\n\u{1F4ED} No templates available."));
4274
+ console.log(source_default.yellow("\n\u{1F4ED} No templates available."));
1138
4275
  console.log(
1139
- import_chalk2.default.gray(
4276
+ source_default.gray(
1140
4277
  " Download templates with: better-webhook templates download\n"
1141
4278
  )
1142
4279
  );
@@ -1146,7 +4283,7 @@ var run = new import_commander2.Command().name("run").argument("[templateId]", "
1146
4283
  if (local.length > 0) {
1147
4284
  for (const t of local) {
1148
4285
  choices.push({
1149
- title: `${t.id} ${import_chalk2.default.green("(local)")}`,
4286
+ title: `${t.id} ${source_default.green("(local)")}`,
1150
4287
  description: `${t.metadata.provider} - ${t.metadata.event}`,
1151
4288
  value: t.id
1152
4289
  });
@@ -1155,7 +4292,7 @@ var run = new import_commander2.Command().name("run").argument("[templateId]", "
1155
4292
  const remoteOnly = remote.filter((t) => !t.isDownloaded);
1156
4293
  for (const t of remoteOnly) {
1157
4294
  choices.push({
1158
- title: `${t.metadata.id} ${import_chalk2.default.gray("(remote)")}`,
4295
+ title: `${t.metadata.id} ${source_default.gray("(remote)")}`,
1159
4296
  description: `${t.metadata.provider} - ${t.metadata.event}`,
1160
4297
  value: `remote:${t.metadata.id}`
1161
4298
  });
@@ -1167,20 +4304,20 @@ var run = new import_commander2.Command().name("run").argument("[templateId]", "
1167
4304
  choices
1168
4305
  });
1169
4306
  if (!response.templateId) {
1170
- console.log(import_chalk2.default.yellow("Cancelled"));
4307
+ console.log(source_default.yellow("Cancelled"));
1171
4308
  return;
1172
4309
  }
1173
4310
  templateId = response.templateId;
1174
4311
  } catch (error) {
1175
4312
  spinner2.fail("Failed to load templates");
1176
- console.error(import_chalk2.default.red(error.message));
4313
+ console.error(source_default.red(error.message));
1177
4314
  process.exitCode = 1;
1178
4315
  return;
1179
4316
  }
1180
4317
  }
1181
4318
  if (templateId?.startsWith("remote:")) {
1182
4319
  const remoteId = templateId.replace("remote:", "");
1183
- const downloadSpinner = (0, import_ora2.default)(`Downloading ${remoteId}...`).start();
4320
+ const downloadSpinner = ora(`Downloading ${remoteId}...`).start();
1184
4321
  try {
1185
4322
  await manager.downloadTemplate(remoteId);
1186
4323
  downloadSpinner.succeed(`Downloaded ${remoteId}`);
@@ -1193,10 +4330,10 @@ var run = new import_commander2.Command().name("run").argument("[templateId]", "
1193
4330
  }
1194
4331
  const localTemplate = manager.getLocalTemplate(templateId);
1195
4332
  if (!localTemplate) {
1196
- console.log(import_chalk2.default.red(`
4333
+ console.log(source_default.red(`
1197
4334
  \u274C Template not found: ${templateId}`));
1198
4335
  console.log(
1199
- import_chalk2.default.gray(
4336
+ source_default.gray(
1200
4337
  " Download it with: better-webhook templates download " + templateId + "\n"
1201
4338
  )
1202
4339
  );
@@ -1209,24 +4346,24 @@ var run = new import_commander2.Command().name("run").argument("[templateId]", "
1209
4346
  const envVarName = getSecretEnvVarName(localTemplate.metadata.provider);
1210
4347
  secret = process.env[envVarName];
1211
4348
  }
1212
- console.log(import_chalk2.default.bold("\n\u{1F680} Executing Webhook\n"));
1213
- console.log(import_chalk2.default.gray(` Template: ${templateId}`));
4349
+ console.log(source_default.bold("\n\u{1F680} Executing Webhook\n"));
4350
+ console.log(source_default.gray(` Template: ${templateId}`));
1214
4351
  console.log(
1215
- import_chalk2.default.gray(` Provider: ${localTemplate.metadata.provider}`)
4352
+ source_default.gray(` Provider: ${localTemplate.metadata.provider}`)
1216
4353
  );
1217
- console.log(import_chalk2.default.gray(` Event: ${localTemplate.metadata.event}`));
1218
- console.log(import_chalk2.default.gray(` Target: ${targetUrl}`));
4354
+ console.log(source_default.gray(` Event: ${localTemplate.metadata.event}`));
4355
+ console.log(source_default.gray(` Target: ${targetUrl}`));
1219
4356
  if (secret) {
1220
- console.log(import_chalk2.default.gray(` Signature: Will be generated`));
4357
+ console.log(source_default.gray(` Signature: Will be generated`));
1221
4358
  } else {
1222
4359
  console.log(
1223
- import_chalk2.default.yellow(
4360
+ source_default.yellow(
1224
4361
  ` \u26A0\uFE0F No secret provided - signature will not be generated`
1225
4362
  )
1226
4363
  );
1227
4364
  }
1228
4365
  console.log();
1229
- const spinner = (0, import_ora2.default)("Sending webhook...").start();
4366
+ const spinner = ora("Sending webhook...").start();
1230
4367
  try {
1231
4368
  const result = await executeTemplate(localTemplate.template, {
1232
4369
  url: targetUrl,
@@ -1234,43 +4371,43 @@ var run = new import_commander2.Command().name("run").argument("[templateId]", "
1234
4371
  headers: options?.header
1235
4372
  });
1236
4373
  spinner.stop();
1237
- const statusColor = result.status >= 200 && result.status < 300 ? import_chalk2.default.green : result.status >= 400 ? import_chalk2.default.red : import_chalk2.default.yellow;
1238
- console.log(import_chalk2.default.bold("\u{1F4E5} Response\n"));
4374
+ const statusColor = result.status >= 200 && result.status < 300 ? source_default.green : result.status >= 400 ? source_default.red : source_default.yellow;
4375
+ console.log(source_default.bold("\u{1F4E5} Response\n"));
1239
4376
  console.log(
1240
4377
  ` Status: ${statusColor(`${result.status} ${result.statusText}`)}`
1241
4378
  );
1242
- console.log(` Duration: ${import_chalk2.default.cyan(`${result.duration}ms`)}`);
4379
+ console.log(` Duration: ${source_default.cyan(`${result.duration}ms`)}`);
1243
4380
  if (options?.verbose) {
1244
- console.log(import_chalk2.default.bold("\n Headers:"));
4381
+ console.log(source_default.bold("\n Headers:"));
1245
4382
  for (const [key, value] of Object.entries(result.headers)) {
1246
4383
  const headerValue = Array.isArray(value) ? value.join(", ") : value;
1247
- console.log(import_chalk2.default.gray(` ${key}: ${headerValue}`));
4384
+ console.log(source_default.gray(` ${key}: ${headerValue}`));
1248
4385
  }
1249
4386
  }
1250
4387
  if (result.json !== void 0) {
1251
- console.log(import_chalk2.default.bold("\n Body:"));
4388
+ console.log(source_default.bold("\n Body:"));
1252
4389
  console.log(
1253
- import_chalk2.default.gray(
4390
+ source_default.gray(
1254
4391
  JSON.stringify(result.json, null, 2).split("\n").map((l) => ` ${l}`).join("\n")
1255
4392
  )
1256
4393
  );
1257
4394
  } else if (result.bodyText) {
1258
- console.log(import_chalk2.default.bold("\n Body:"));
4395
+ console.log(source_default.bold("\n Body:"));
1259
4396
  const preview = result.bodyText.length > 500 ? result.bodyText.slice(0, 500) + "..." : result.bodyText;
1260
- console.log(import_chalk2.default.gray(` ${preview}`));
4397
+ console.log(source_default.gray(` ${preview}`));
1261
4398
  }
1262
4399
  console.log();
1263
4400
  if (result.status >= 200 && result.status < 300) {
1264
- console.log(import_chalk2.default.green("\u2713 Webhook delivered successfully\n"));
4401
+ console.log(source_default.green("\u2713 Webhook delivered successfully\n"));
1265
4402
  } else {
1266
4403
  console.log(
1267
- import_chalk2.default.yellow(`\u26A0 Webhook delivered with status ${result.status}
4404
+ source_default.yellow(`\u26A0 Webhook delivered with status ${result.status}
1268
4405
  `)
1269
4406
  );
1270
4407
  }
1271
4408
  } catch (error) {
1272
4409
  spinner.fail("Request failed");
1273
- console.error(import_chalk2.default.red(`
4410
+ console.error(source_default.red(`
1274
4411
  \u274C ${error.message}
1275
4412
  `));
1276
4413
  process.exitCode = 1;
@@ -1280,14 +4417,13 @@ var run = new import_commander2.Command().name("run").argument("[templateId]", "
1280
4417
 
1281
4418
  // src/commands/capture.ts
1282
4419
  var import_commander3 = require("commander");
1283
- var import_chalk3 = __toESM(require("chalk"), 1);
1284
4420
 
1285
4421
  // src/core/capture-server.ts
1286
4422
  var import_http = require("http");
1287
4423
  var import_ws = require("ws");
1288
4424
  var import_fs2 = require("fs");
1289
4425
  var import_path2 = require("path");
1290
- var import_crypto2 = require("crypto");
4426
+ var import_crypto = require("crypto");
1291
4427
  var import_os2 = require("os");
1292
4428
  var CaptureServer = class {
1293
4429
  server = null;
@@ -1399,7 +4535,7 @@ var CaptureServer = class {
1399
4535
  return;
1400
4536
  }
1401
4537
  const timestamp = (/* @__PURE__ */ new Date()).toISOString();
1402
- const id = (0, import_crypto2.randomUUID)();
4538
+ const id = (0, import_crypto.randomUUID)();
1403
4539
  const url = req.url || "/";
1404
4540
  const hostHeader = req.headers.host;
1405
4541
  const hostValue = typeof hostHeader === "string" ? hostHeader : "";
@@ -1539,6 +4675,12 @@ var CaptureServer = class {
1539
4675
  return "ragie";
1540
4676
  }
1541
4677
  }
4678
+ if (this.hasStandardWebhookHeaders(headers)) {
4679
+ const recallUserAgent = this.headerIncludes(headers["user-agent"], "recall");
4680
+ if (recallUserAgent || this.hasRecallStandardWebhookShape(body)) {
4681
+ return "recall";
4682
+ }
4683
+ }
1542
4684
  if (headers["x-shopify-hmac-sha256"] || headers["x-shopify-topic"]) {
1543
4685
  return "shopify";
1544
4686
  }
@@ -1558,6 +4700,9 @@ var CaptureServer = class {
1558
4700
  return "linear";
1559
4701
  }
1560
4702
  if (headers["svix-signature"]) {
4703
+ if (body && typeof body === "object" && "event" in body && typeof body.event === "string" && body.event.startsWith("bot.")) {
4704
+ return "recall";
4705
+ }
1561
4706
  return "clerk";
1562
4707
  }
1563
4708
  return void 0;
@@ -1573,6 +4718,57 @@ var CaptureServer = class {
1573
4718
  }
1574
4719
  }
1575
4720
  }
4721
+ hasStandardWebhookHeaders(headers) {
4722
+ return Boolean(
4723
+ headers["webhook-signature"] || headers["webhook-id"] && headers["webhook-timestamp"]
4724
+ );
4725
+ }
4726
+ hasRecallStandardWebhookShape(body) {
4727
+ if (!body || typeof body !== "object") {
4728
+ return false;
4729
+ }
4730
+ const payload = body;
4731
+ if (this.hasRecallEventPrefix(payload.event)) {
4732
+ return true;
4733
+ }
4734
+ if (this.hasRecallResourceCombination(payload)) {
4735
+ return true;
4736
+ }
4737
+ const nestedData = payload.data;
4738
+ if (nestedData && typeof nestedData === "object") {
4739
+ return this.hasRecallResourceCombination(
4740
+ nestedData
4741
+ );
4742
+ }
4743
+ return false;
4744
+ }
4745
+ hasRecallEventPrefix(event) {
4746
+ if (typeof event !== "string") {
4747
+ return false;
4748
+ }
4749
+ return ["bot.", "transcript.", "participant_events."].some(
4750
+ (prefix) => event.startsWith(prefix)
4751
+ );
4752
+ }
4753
+ hasRecallResourceCombination(payload) {
4754
+ const hasRealtimeEndpoint = "realtime_endpoint" in payload;
4755
+ const hasRecording = "recording" in payload;
4756
+ const hasParticipantEvents = "participant_events" in payload;
4757
+ const hasTranscript = "transcript" in payload;
4758
+ return hasRealtimeEndpoint && hasRecording && (hasParticipantEvents || hasTranscript);
4759
+ }
4760
+ headerIncludes(headerValue, searchText) {
4761
+ const normalizedSearchText = searchText.toLowerCase();
4762
+ if (typeof headerValue === "string") {
4763
+ return headerValue.toLowerCase().includes(normalizedSearchText);
4764
+ }
4765
+ if (Array.isArray(headerValue)) {
4766
+ return headerValue.some(
4767
+ (value) => value.toLowerCase().includes(normalizedSearchText)
4768
+ );
4769
+ }
4770
+ return false;
4771
+ }
1576
4772
  /**
1577
4773
  * Send message to a specific client
1578
4774
  */
@@ -1637,7 +4833,7 @@ var capture = new import_commander3.Command().name("capture").description("Start
1637
4833
  async (options) => {
1638
4834
  const port = parseInt(options.port, 10);
1639
4835
  if (isNaN(port) || port < 0 || port > 65535) {
1640
- console.error(import_chalk3.default.red("Invalid port number"));
4836
+ console.error(source_default.red("Invalid port number"));
1641
4837
  process.exitCode = 1;
1642
4838
  return;
1643
4839
  }
@@ -1652,7 +4848,7 @@ var capture = new import_commander3.Command().name("capture").description("Start
1652
4848
  process.on("SIGINT", shutdown);
1653
4849
  process.on("SIGTERM", shutdown);
1654
4850
  } catch (error) {
1655
- console.error(import_chalk3.default.red(`Failed to start server: ${error.message}`));
4851
+ console.error(source_default.red(`Failed to start server: ${error.message}`));
1656
4852
  process.exitCode = 1;
1657
4853
  }
1658
4854
  }
@@ -1660,7 +4856,6 @@ var capture = new import_commander3.Command().name("capture").description("Start
1660
4856
 
1661
4857
  // src/commands/captures.ts
1662
4858
  var import_commander4 = require("commander");
1663
- var import_chalk4 = __toESM(require("chalk"), 1);
1664
4859
  var import_prompts3 = __toESM(require("prompts"), 1);
1665
4860
  var import_os4 = require("os");
1666
4861
 
@@ -1775,6 +4970,7 @@ var ReplayEngine = class {
1775
4970
  "x-twilio-signature",
1776
4971
  "x-slack-signature",
1777
4972
  "svix-signature",
4973
+ "webhook-signature",
1778
4974
  "linear-signature"
1779
4975
  ];
1780
4976
  const headers = [];
@@ -1846,10 +5042,19 @@ var ReplayEngine = class {
1846
5042
  }
1847
5043
  if (capture2.provider === "ragie" && capture2.body) {
1848
5044
  const body = capture2.body;
5045
+ if (typeof body.type === "string") {
5046
+ return body.type;
5047
+ }
1849
5048
  if (typeof body.event_type === "string") {
1850
5049
  return body.event_type;
1851
5050
  }
1852
5051
  }
5052
+ if (capture2.provider === "recall" && capture2.body) {
5053
+ const body = capture2.body;
5054
+ if (typeof body.event === "string") {
5055
+ return body.event;
5056
+ }
5057
+ }
1853
5058
  const shopifyTopic = headers["x-shopify-topic"];
1854
5059
  if (shopifyTopic) {
1855
5060
  return Array.isArray(shopifyTopic) ? shopifyTopic[0] : shopifyTopic;
@@ -1981,7 +5186,7 @@ function toRelativePath(absolutePath) {
1981
5186
  var listCommand2 = new import_commander4.Command().name("list").alias("ls").description("List captured webhooks").option("-l, --limit <limit>", "Maximum number of captures to show", "20").option("-p, --provider <provider>", "Filter by provider").action((options) => {
1982
5187
  const limit = parseInt(options.limit, 10);
1983
5188
  if (isNaN(limit) || limit <= 0) {
1984
- console.error(import_chalk4.default.red("Invalid limit value"));
5189
+ console.error(source_default.red("Invalid limit value"));
1985
5190
  process.exitCode = 1;
1986
5191
  return;
1987
5192
  }
@@ -1993,90 +5198,90 @@ var listCommand2 = new import_commander4.Command().name("list").alias("ls").desc
1993
5198
  );
1994
5199
  }
1995
5200
  if (captures2.length === 0) {
1996
- console.log(import_chalk4.default.yellow("\n\u{1F4ED} No captured webhooks found."));
5201
+ console.log(source_default.yellow("\n\u{1F4ED} No captured webhooks found."));
1997
5202
  console.log(
1998
- import_chalk4.default.gray(" Start capturing with: better-webhook capture\n")
5203
+ source_default.gray(" Start capturing with: better-webhook capture\n")
1999
5204
  );
2000
5205
  return;
2001
5206
  }
2002
- console.log(import_chalk4.default.bold("\n\u{1F4E6} Captured Webhooks\n"));
5207
+ console.log(source_default.bold("\n\u{1F4E6} Captured Webhooks\n"));
2003
5208
  for (const { file, capture: capture2 } of captures2) {
2004
5209
  const date = new Date(capture2.timestamp).toLocaleString();
2005
- const provider = capture2.provider ? import_chalk4.default.cyan(`[${capture2.provider}]`) : import_chalk4.default.gray("[unknown]");
5210
+ const provider = capture2.provider ? source_default.cyan(`[${capture2.provider}]`) : source_default.gray("[unknown]");
2006
5211
  const size = capture2.contentLength || capture2.rawBody?.length || 0;
2007
- console.log(` ${import_chalk4.default.white(capture2.id.slice(0, 8))} ${provider}`);
2008
- console.log(import_chalk4.default.gray(` ${capture2.method} ${capture2.path}`));
2009
- console.log(import_chalk4.default.gray(` ${date} | ${size} bytes`));
2010
- console.log(import_chalk4.default.gray(` File: ${file}`));
5212
+ console.log(` ${source_default.white(capture2.id.slice(0, 8))} ${provider}`);
5213
+ console.log(source_default.gray(` ${capture2.method} ${capture2.path}`));
5214
+ console.log(source_default.gray(` ${date} | ${size} bytes`));
5215
+ console.log(source_default.gray(` File: ${file}`));
2011
5216
  console.log();
2012
5217
  }
2013
- console.log(import_chalk4.default.gray(` Showing ${captures2.length} captures`));
2014
- console.log(import_chalk4.default.gray(` Storage: ${engine.getCapturesDir()}
5218
+ console.log(source_default.gray(` Showing ${captures2.length} captures`));
5219
+ console.log(source_default.gray(` Storage: ${engine.getCapturesDir()}
2015
5220
  `));
2016
5221
  });
2017
5222
  var showCommand = new import_commander4.Command().name("show").argument("<captureId>", "Capture ID or partial ID").description("Show detailed information about a capture").option("-b, --body", "Show full body content").action((captureId, options) => {
2018
5223
  const engine = getReplayEngine();
2019
5224
  const captureFile = engine.getCapture(captureId);
2020
5225
  if (!captureFile) {
2021
- console.log(import_chalk4.default.red(`
5226
+ console.log(source_default.red(`
2022
5227
  \u274C Capture not found: ${captureId}
2023
5228
  `));
2024
5229
  process.exitCode = 1;
2025
5230
  return;
2026
5231
  }
2027
5232
  const { capture: capture2 } = captureFile;
2028
- console.log(import_chalk4.default.bold("\n\u{1F4CB} Capture Details\n"));
2029
- console.log(` ${import_chalk4.default.gray("ID:")} ${capture2.id}`);
2030
- console.log(` ${import_chalk4.default.gray("File:")} ${captureFile.file}`);
5233
+ console.log(source_default.bold("\n\u{1F4CB} Capture Details\n"));
5234
+ console.log(` ${source_default.gray("ID:")} ${capture2.id}`);
5235
+ console.log(` ${source_default.gray("File:")} ${captureFile.file}`);
2031
5236
  console.log(
2032
- ` ${import_chalk4.default.gray("Timestamp:")} ${new Date(capture2.timestamp).toLocaleString()}`
5237
+ ` ${source_default.gray("Timestamp:")} ${new Date(capture2.timestamp).toLocaleString()}`
2033
5238
  );
2034
- console.log(` ${import_chalk4.default.gray("Method:")} ${capture2.method}`);
2035
- console.log(` ${import_chalk4.default.gray("Path:")} ${capture2.path}`);
2036
- console.log(` ${import_chalk4.default.gray("URL:")} ${capture2.url}`);
5239
+ console.log(` ${source_default.gray("Method:")} ${capture2.method}`);
5240
+ console.log(` ${source_default.gray("Path:")} ${capture2.path}`);
5241
+ console.log(` ${source_default.gray("URL:")} ${capture2.url}`);
2037
5242
  if (capture2.provider) {
2038
5243
  console.log(
2039
- ` ${import_chalk4.default.gray("Provider:")} ${import_chalk4.default.cyan(capture2.provider)}`
5244
+ ` ${source_default.gray("Provider:")} ${source_default.cyan(capture2.provider)}`
2040
5245
  );
2041
5246
  }
2042
5247
  console.log(
2043
- ` ${import_chalk4.default.gray("Content-Type:")} ${capture2.contentType || "unknown"}`
5248
+ ` ${source_default.gray("Content-Type:")} ${capture2.contentType || "unknown"}`
2044
5249
  );
2045
5250
  console.log(
2046
- ` ${import_chalk4.default.gray("Content-Length:")} ${capture2.contentLength || 0} bytes`
5251
+ ` ${source_default.gray("Content-Length:")} ${capture2.contentLength || 0} bytes`
2047
5252
  );
2048
5253
  const queryKeys = Object.keys(capture2.query);
2049
5254
  if (queryKeys.length > 0) {
2050
- console.log(import_chalk4.default.bold("\n Query Parameters:"));
5255
+ console.log(source_default.bold("\n Query Parameters:"));
2051
5256
  for (const [key, value] of Object.entries(capture2.query)) {
2052
5257
  const queryValue = Array.isArray(value) ? value.join(", ") : value;
2053
- console.log(import_chalk4.default.gray(` ${key}: ${queryValue}`));
5258
+ console.log(source_default.gray(` ${key}: ${queryValue}`));
2054
5259
  }
2055
5260
  }
2056
- console.log(import_chalk4.default.bold("\n Headers:"));
5261
+ console.log(source_default.bold("\n Headers:"));
2057
5262
  for (const [key, value] of Object.entries(capture2.headers)) {
2058
5263
  const headerValue = Array.isArray(value) ? value.join(", ") : value;
2059
5264
  const display = headerValue.length > 80 ? headerValue.slice(0, 80) + "..." : headerValue;
2060
- console.log(import_chalk4.default.gray(` ${key}: ${display}`));
5265
+ console.log(source_default.gray(` ${key}: ${display}`));
2061
5266
  }
2062
5267
  if (options.body && capture2.body) {
2063
- console.log(import_chalk4.default.bold("\n Body:"));
5268
+ console.log(source_default.bold("\n Body:"));
2064
5269
  if (typeof capture2.body === "object") {
2065
5270
  console.log(
2066
- import_chalk4.default.gray(
5271
+ source_default.gray(
2067
5272
  JSON.stringify(capture2.body, null, 2).split("\n").map((l) => ` ${l}`).join("\n")
2068
5273
  )
2069
5274
  );
2070
5275
  } else {
2071
- console.log(import_chalk4.default.gray(` ${capture2.body}`));
5276
+ console.log(source_default.gray(` ${capture2.body}`));
2072
5277
  }
2073
5278
  } else if (capture2.body) {
2074
- console.log(import_chalk4.default.bold("\n Body:"));
5279
+ console.log(source_default.bold("\n Body:"));
2075
5280
  const preview = JSON.stringify(capture2.body).slice(0, 200);
2076
5281
  console.log(
2077
- import_chalk4.default.gray(` ${preview}${preview.length >= 200 ? "..." : ""}`)
5282
+ source_default.gray(` ${preview}${preview.length >= 200 ? "..." : ""}`)
2078
5283
  );
2079
- console.log(import_chalk4.default.gray(" Use --body to see full content"));
5284
+ console.log(source_default.gray(" Use --body to see full content"));
2080
5285
  }
2081
5286
  console.log();
2082
5287
  });
@@ -2084,30 +5289,30 @@ var searchCommand2 = new import_commander4.Command().name("search").argument("<q
2084
5289
  const engine = getReplayEngine();
2085
5290
  const results = engine.searchCaptures(query);
2086
5291
  if (results.length === 0) {
2087
- console.log(import_chalk4.default.yellow(`
5292
+ console.log(source_default.yellow(`
2088
5293
  \u{1F4ED} No captures found for: "${query}"
2089
5294
  `));
2090
5295
  return;
2091
5296
  }
2092
- console.log(import_chalk4.default.bold(`
5297
+ console.log(source_default.bold(`
2093
5298
  \u{1F50D} Search Results for "${query}"
2094
5299
  `));
2095
5300
  for (const { file, capture: capture2 } of results) {
2096
5301
  const date = new Date(capture2.timestamp).toLocaleString();
2097
- const provider = capture2.provider ? import_chalk4.default.cyan(`[${capture2.provider}]`) : "";
2098
- console.log(` ${import_chalk4.default.white(capture2.id.slice(0, 8))} ${provider}`);
2099
- console.log(import_chalk4.default.gray(` ${capture2.method} ${capture2.path}`));
2100
- console.log(import_chalk4.default.gray(` ${date}`));
5302
+ const provider = capture2.provider ? source_default.cyan(`[${capture2.provider}]`) : "";
5303
+ console.log(` ${source_default.white(capture2.id.slice(0, 8))} ${provider}`);
5304
+ console.log(source_default.gray(` ${capture2.method} ${capture2.path}`));
5305
+ console.log(source_default.gray(` ${date}`));
2101
5306
  console.log();
2102
5307
  }
2103
- console.log(import_chalk4.default.gray(` Found: ${results.length} captures
5308
+ console.log(source_default.gray(` Found: ${results.length} captures
2104
5309
  `));
2105
5310
  });
2106
5311
  var deleteCommand = new import_commander4.Command().name("delete").alias("rm").argument("<captureId>", "Capture ID or partial ID to delete").description("Delete a specific captured webhook").option("-f, --force", "Skip confirmation prompt").action(async (captureId, options) => {
2107
5312
  const engine = getReplayEngine();
2108
5313
  const captureFile = engine.getCapture(captureId);
2109
5314
  if (!captureFile) {
2110
- console.log(import_chalk4.default.red(`
5315
+ console.log(source_default.red(`
2111
5316
  \u274C Capture not found: ${captureId}
2112
5317
  `));
2113
5318
  process.exitCode = 1;
@@ -2115,11 +5320,11 @@ var deleteCommand = new import_commander4.Command().name("delete").alias("rm").a
2115
5320
  }
2116
5321
  const { capture: capture2 } = captureFile;
2117
5322
  if (!options.force) {
2118
- console.log(import_chalk4.default.bold("\n\u{1F5D1}\uFE0F Capture to delete:\n"));
2119
- console.log(` ${import_chalk4.default.white(capture2.id.slice(0, 8))}`);
2120
- console.log(import_chalk4.default.gray(` ${capture2.method} ${capture2.path}`));
5323
+ console.log(source_default.bold("\n\u{1F5D1}\uFE0F Capture to delete:\n"));
5324
+ console.log(` ${source_default.white(capture2.id.slice(0, 8))}`);
5325
+ console.log(source_default.gray(` ${capture2.method} ${capture2.path}`));
2121
5326
  console.log(
2122
- import_chalk4.default.gray(` ${new Date(capture2.timestamp).toLocaleString()}`)
5327
+ source_default.gray(` ${new Date(capture2.timestamp).toLocaleString()}`)
2123
5328
  );
2124
5329
  console.log();
2125
5330
  const response = await (0, import_prompts3.default)({
@@ -2129,19 +5334,19 @@ var deleteCommand = new import_commander4.Command().name("delete").alias("rm").a
2129
5334
  initial: false
2130
5335
  });
2131
5336
  if (!response.confirm) {
2132
- console.log(import_chalk4.default.yellow("Cancelled"));
5337
+ console.log(source_default.yellow("Cancelled"));
2133
5338
  return;
2134
5339
  }
2135
5340
  }
2136
5341
  const deleted = engine.deleteCapture(captureId);
2137
5342
  if (deleted) {
2138
5343
  console.log(
2139
- import_chalk4.default.green(`
5344
+ source_default.green(`
2140
5345
  \u2713 Deleted capture: ${capture2.id.slice(0, 8)}
2141
5346
  `)
2142
5347
  );
2143
5348
  } else {
2144
- console.log(import_chalk4.default.red(`
5349
+ console.log(source_default.red(`
2145
5350
  \u274C Failed to delete capture
2146
5351
  `));
2147
5352
  process.exitCode = 1;
@@ -2151,11 +5356,11 @@ var cleanCommand2 = new import_commander4.Command().name("clean").alias("remove-
2151
5356
  const engine = getReplayEngine();
2152
5357
  const captures2 = engine.listCaptures(1e4);
2153
5358
  if (captures2.length === 0) {
2154
- console.log(import_chalk4.default.yellow("\n\u{1F4ED} No captures to remove.\n"));
5359
+ console.log(source_default.yellow("\n\u{1F4ED} No captures to remove.\n"));
2155
5360
  return;
2156
5361
  }
2157
5362
  console.log(
2158
- import_chalk4.default.bold(`
5363
+ source_default.bold(`
2159
5364
  \u{1F5D1}\uFE0F Found ${captures2.length} captured webhook(s)
2160
5365
  `)
2161
5366
  );
@@ -2165,7 +5370,7 @@ var cleanCommand2 = new import_commander4.Command().name("clean").alias("remove-
2165
5370
  byProvider.set(provider, (byProvider.get(provider) || 0) + 1);
2166
5371
  }
2167
5372
  for (const [provider, count] of byProvider) {
2168
- console.log(import_chalk4.default.gray(` ${provider}: ${count}`));
5373
+ console.log(source_default.gray(` ${provider}: ${count}`));
2169
5374
  }
2170
5375
  console.log();
2171
5376
  if (!options.force) {
@@ -2176,14 +5381,14 @@ var cleanCommand2 = new import_commander4.Command().name("clean").alias("remove-
2176
5381
  initial: false
2177
5382
  });
2178
5383
  if (!response.confirm) {
2179
- console.log(import_chalk4.default.yellow("Cancelled"));
5384
+ console.log(source_default.yellow("Cancelled"));
2180
5385
  return;
2181
5386
  }
2182
5387
  }
2183
5388
  const deleted = engine.deleteAllCaptures();
2184
- console.log(import_chalk4.default.green(`
5389
+ console.log(source_default.green(`
2185
5390
  \u2713 Removed ${deleted} capture(s)`));
2186
- console.log(import_chalk4.default.gray(` Storage: ${engine.getCapturesDir()}
5391
+ console.log(source_default.gray(` Storage: ${engine.getCapturesDir()}
2187
5392
  `));
2188
5393
  });
2189
5394
  var saveAsTemplateCommand = new import_commander4.Command().name("save-as-template").alias("sat").argument("<captureId>", "Capture ID or partial ID").description("Save a captured webhook as a reusable template").option("--id <id>", "Template ID (auto-generated if not provided)").option("--name <name>", "Template display name").option("--event <event>", "Event type (auto-detected if not provided)").option("--description <description>", "Template description").option("--url <url>", "Default target URL for the template").option("--overwrite", "Overwrite existing template with same ID").action(
@@ -2192,18 +5397,18 @@ var saveAsTemplateCommand = new import_commander4.Command().name("save-as-templa
2192
5397
  const templateManager = getTemplateManager();
2193
5398
  const captureFile = engine.getCapture(captureId);
2194
5399
  if (!captureFile) {
2195
- console.log(import_chalk4.default.red(`
5400
+ console.log(source_default.red(`
2196
5401
  \u274C Capture not found: ${captureId}
2197
5402
  `));
2198
5403
  process.exitCode = 1;
2199
5404
  return;
2200
5405
  }
2201
5406
  const { capture: capture2 } = captureFile;
2202
- console.log(import_chalk4.default.bold("\n\u{1F4CB} Capture to save as template:\n"));
2203
- console.log(` ${import_chalk4.default.white(capture2.id.slice(0, 8))}`);
2204
- console.log(import_chalk4.default.gray(` ${capture2.method} ${capture2.path}`));
5407
+ console.log(source_default.bold("\n\u{1F4CB} Capture to save as template:\n"));
5408
+ console.log(` ${source_default.white(capture2.id.slice(0, 8))}`);
5409
+ console.log(source_default.gray(` ${capture2.method} ${capture2.path}`));
2205
5410
  if (capture2.provider) {
2206
- console.log(import_chalk4.default.gray(` Provider: ${capture2.provider}`));
5411
+ console.log(source_default.gray(` Provider: ${capture2.provider}`));
2207
5412
  }
2208
5413
  console.log();
2209
5414
  const template = engine.captureToTemplate(captureId, {
@@ -2221,7 +5426,7 @@ var saveAsTemplateCommand = new import_commander4.Command().name("save-as-templa
2221
5426
  validate: (value) => value.trim().length > 0 || "Template ID is required"
2222
5427
  });
2223
5428
  if (!response.templateId) {
2224
- console.log(import_chalk4.default.yellow("Cancelled"));
5429
+ console.log(source_default.yellow("Cancelled"));
2225
5430
  return;
2226
5431
  }
2227
5432
  templateId = response.templateId;
@@ -2234,7 +5439,7 @@ var saveAsTemplateCommand = new import_commander4.Command().name("save-as-templa
2234
5439
  initial: false
2235
5440
  });
2236
5441
  if (!response.overwrite) {
2237
- console.log(import_chalk4.default.yellow("Cancelled"));
5442
+ console.log(source_default.yellow("Cancelled"));
2238
5443
  return;
2239
5444
  }
2240
5445
  options.overwrite = true;
@@ -2247,24 +5452,24 @@ var saveAsTemplateCommand = new import_commander4.Command().name("save-as-templa
2247
5452
  description: options.description,
2248
5453
  overwrite: options.overwrite
2249
5454
  });
2250
- console.log(import_chalk4.default.green(`
5455
+ console.log(source_default.green(`
2251
5456
  \u2713 Saved template: ${result.id}`));
2252
- console.log(import_chalk4.default.gray(` File: ${toRelativePath(result.filePath)}`));
2253
- console.log(import_chalk4.default.gray(` Provider: ${template.provider || "custom"}`));
5457
+ console.log(source_default.gray(` File: ${toRelativePath(result.filePath)}`));
5458
+ console.log(source_default.gray(` Provider: ${template.provider || "custom"}`));
2254
5459
  if (template.event) {
2255
- console.log(import_chalk4.default.gray(` Event: ${template.event}`));
5460
+ console.log(source_default.gray(` Event: ${template.event}`));
2256
5461
  }
2257
5462
  console.log();
2258
- console.log(import_chalk4.default.gray(" Run it with:"));
5463
+ console.log(source_default.gray(" Run it with:"));
2259
5464
  console.log(
2260
- import_chalk4.default.cyan(
5465
+ source_default.cyan(
2261
5466
  ` better-webhook run ${result.id} --url http://localhost:3000/webhooks
2262
5467
  `
2263
5468
  )
2264
5469
  );
2265
5470
  } catch (error) {
2266
5471
  const message = error instanceof Error ? error.message : "Failed to save template";
2267
- console.log(import_chalk4.default.red(`
5472
+ console.log(source_default.red(`
2268
5473
  \u274C ${message}
2269
5474
  `));
2270
5475
  process.exitCode = 1;
@@ -2275,9 +5480,7 @@ var captures = new import_commander4.Command().name("captures").alias("c").descr
2275
5480
 
2276
5481
  // src/commands/replay.ts
2277
5482
  var import_commander5 = require("commander");
2278
- var import_ora3 = __toESM(require("ora"), 1);
2279
5483
  var import_prompts4 = __toESM(require("prompts"), 1);
2280
- var import_chalk5 = __toESM(require("chalk"), 1);
2281
5484
  var replay = new import_commander5.Command().name("replay").argument("[captureId]", "Capture ID to replay").argument("[targetUrl]", "Target URL to replay to").description("Replay a captured webhook to a target URL").option("-m, --method <method>", "Override HTTP method").option(
2282
5485
  "-H, --header <header>",
2283
5486
  "Add or override header (format: key:value)",
@@ -2298,9 +5501,9 @@ var replay = new import_commander5.Command().name("replay").argument("[captureId
2298
5501
  if (!captureId) {
2299
5502
  const captures2 = engine.listCaptures(50);
2300
5503
  if (captures2.length === 0) {
2301
- console.log(import_chalk5.default.yellow("\n\u{1F4ED} No captured webhooks found."));
5504
+ console.log(source_default.yellow("\n\u{1F4ED} No captured webhooks found."));
2302
5505
  console.log(
2303
- import_chalk5.default.gray(" Start capturing with: better-webhook capture\n")
5506
+ source_default.gray(" Start capturing with: better-webhook capture\n")
2304
5507
  );
2305
5508
  return;
2306
5509
  }
@@ -2320,14 +5523,14 @@ var replay = new import_commander5.Command().name("replay").argument("[captureId
2320
5523
  choices
2321
5524
  });
2322
5525
  if (!response.captureId) {
2323
- console.log(import_chalk5.default.yellow("Cancelled"));
5526
+ console.log(source_default.yellow("Cancelled"));
2324
5527
  return;
2325
5528
  }
2326
5529
  captureId = response.captureId;
2327
5530
  }
2328
5531
  const captureFile = engine.getCapture(captureId);
2329
5532
  if (!captureFile) {
2330
- console.log(import_chalk5.default.red(`
5533
+ console.log(source_default.red(`
2331
5534
  \u274C Capture not found: ${captureId}
2332
5535
  `));
2333
5536
  process.exitCode = 1;
@@ -2349,21 +5552,21 @@ var replay = new import_commander5.Command().name("replay").argument("[captureId
2349
5552
  }
2350
5553
  });
2351
5554
  if (!response.url) {
2352
- console.log(import_chalk5.default.yellow("Cancelled"));
5555
+ console.log(source_default.yellow("Cancelled"));
2353
5556
  return;
2354
5557
  }
2355
5558
  targetUrl = response.url;
2356
5559
  }
2357
5560
  const { capture: capture2 } = captureFile;
2358
- console.log(import_chalk5.default.bold("\n\u{1F504} Replaying Webhook\n"));
2359
- console.log(import_chalk5.default.gray(` Capture ID: ${capture2.id.slice(0, 8)}`));
2360
- console.log(import_chalk5.default.gray(` Original: ${capture2.method} ${capture2.path}`));
5561
+ console.log(source_default.bold("\n\u{1F504} Replaying Webhook\n"));
5562
+ console.log(source_default.gray(` Capture ID: ${capture2.id.slice(0, 8)}`));
5563
+ console.log(source_default.gray(` Original: ${capture2.method} ${capture2.path}`));
2361
5564
  if (capture2.provider) {
2362
- console.log(import_chalk5.default.gray(` Provider: ${capture2.provider}`));
5565
+ console.log(source_default.gray(` Provider: ${capture2.provider}`));
2363
5566
  }
2364
- console.log(import_chalk5.default.gray(` Target: ${targetUrl}`));
5567
+ console.log(source_default.gray(` Target: ${targetUrl}`));
2365
5568
  console.log();
2366
- const spinner = (0, import_ora3.default)("Replaying webhook...").start();
5569
+ const spinner = ora("Replaying webhook...").start();
2367
5570
  try {
2368
5571
  const result = await engine.replay(captureId, {
2369
5572
  targetUrl,
@@ -2371,43 +5574,43 @@ var replay = new import_commander5.Command().name("replay").argument("[captureId
2371
5574
  headers: options?.header
2372
5575
  });
2373
5576
  spinner.stop();
2374
- const statusColor = result.status >= 200 && result.status < 300 ? import_chalk5.default.green : result.status >= 400 ? import_chalk5.default.red : import_chalk5.default.yellow;
2375
- console.log(import_chalk5.default.bold("\u{1F4E5} Response\n"));
5577
+ const statusColor = result.status >= 200 && result.status < 300 ? source_default.green : result.status >= 400 ? source_default.red : source_default.yellow;
5578
+ console.log(source_default.bold("\u{1F4E5} Response\n"));
2376
5579
  console.log(
2377
5580
  ` Status: ${statusColor(`${result.status} ${result.statusText}`)}`
2378
5581
  );
2379
- console.log(` Duration: ${import_chalk5.default.cyan(`${result.duration}ms`)}`);
5582
+ console.log(` Duration: ${source_default.cyan(`${result.duration}ms`)}`);
2380
5583
  if (options?.verbose) {
2381
- console.log(import_chalk5.default.bold("\n Headers:"));
5584
+ console.log(source_default.bold("\n Headers:"));
2382
5585
  for (const [key, value] of Object.entries(result.headers)) {
2383
5586
  const headerValue = Array.isArray(value) ? value.join(", ") : value;
2384
- console.log(import_chalk5.default.gray(` ${key}: ${headerValue}`));
5587
+ console.log(source_default.gray(` ${key}: ${headerValue}`));
2385
5588
  }
2386
5589
  }
2387
5590
  if (result.json !== void 0) {
2388
- console.log(import_chalk5.default.bold("\n Body:"));
5591
+ console.log(source_default.bold("\n Body:"));
2389
5592
  console.log(
2390
- import_chalk5.default.gray(
5593
+ source_default.gray(
2391
5594
  JSON.stringify(result.json, null, 2).split("\n").map((l) => ` ${l}`).join("\n")
2392
5595
  )
2393
5596
  );
2394
5597
  } else if (result.bodyText) {
2395
- console.log(import_chalk5.default.bold("\n Body:"));
5598
+ console.log(source_default.bold("\n Body:"));
2396
5599
  const preview = result.bodyText.length > 500 ? result.bodyText.slice(0, 500) + "..." : result.bodyText;
2397
- console.log(import_chalk5.default.gray(` ${preview}`));
5600
+ console.log(source_default.gray(` ${preview}`));
2398
5601
  }
2399
5602
  console.log();
2400
5603
  if (result.status >= 200 && result.status < 300) {
2401
- console.log(import_chalk5.default.green("\u2713 Replay completed successfully\n"));
5604
+ console.log(source_default.green("\u2713 Replay completed successfully\n"));
2402
5605
  } else {
2403
5606
  console.log(
2404
- import_chalk5.default.yellow(`\u26A0 Replay completed with status ${result.status}
5607
+ source_default.yellow(`\u26A0 Replay completed with status ${result.status}
2405
5608
  `)
2406
5609
  );
2407
5610
  }
2408
5611
  } catch (error) {
2409
5612
  spinner.fail("Replay failed");
2410
- console.error(import_chalk5.default.red(`
5613
+ console.error(source_default.red(`
2411
5614
  \u274C ${error.message}
2412
5615
  `));
2413
5616
  process.exitCode = 1;
@@ -2417,7 +5620,6 @@ var replay = new import_commander5.Command().name("replay").argument("[captureId
2417
5620
 
2418
5621
  // src/commands/dashboard.ts
2419
5622
  var import_commander6 = require("commander");
2420
- var import_chalk6 = __toESM(require("chalk"), 1);
2421
5623
 
2422
5624
  // src/core/dashboard-server.ts
2423
5625
  var import_express2 = __toESM(require("express"), 1);
@@ -2425,7 +5627,6 @@ var import_http2 = require("http");
2425
5627
  var import_ws2 = require("ws");
2426
5628
  var import_path4 = __toESM(require("path"), 1);
2427
5629
  var import_fs4 = require("fs");
2428
- var import_url = require("url");
2429
5630
 
2430
5631
  // src/core/dashboard-api.ts
2431
5632
  var import_express = __toESM(require("express"), 1);
@@ -2440,6 +5641,7 @@ function getSecretEnvVarName2(provider) {
2440
5641
  shopify: "SHOPIFY_WEBHOOK_SECRET",
2441
5642
  twilio: "TWILIO_WEBHOOK_SECRET",
2442
5643
  ragie: "RAGIE_WEBHOOK_SECRET",
5644
+ recall: "RECALL_WEBHOOK_SECRET",
2443
5645
  slack: "SLACK_WEBHOOK_SECRET",
2444
5646
  linear: "LINEAR_WEBHOOK_SECRET",
2445
5647
  clerk: "CLERK_WEBHOOK_SECRET",
@@ -2779,7 +5981,6 @@ function createDashboardApiRouter(options = {}) {
2779
5981
  }
2780
5982
 
2781
5983
  // src/core/dashboard-server.ts
2782
- var import_meta = {};
2783
5984
  function isStandaloneBinary() {
2784
5985
  if (typeof STANDALONE_BINARY !== "undefined" && STANDALONE_BINARY) {
2785
5986
  return true;
@@ -2863,17 +6064,32 @@ function createEmbeddedDashboardMiddleware() {
2863
6064
  };
2864
6065
  return { staticMiddleware, spaFallback };
2865
6066
  }
2866
- function resolveDashboardDistDir(runtimeDir) {
6067
+ function resolveDashboardDistDir(runtimeDir, options = {}) {
6068
+ const runtimePackageRoot = findCliPackageRoot(runtimeDir);
6069
+ const includePackageRootDistCandidate = runtimePackageRoot !== void 0 && runtimePackageRoot === runtimeDir;
2867
6070
  const candidates = [
6071
+ // Package root fallback -> dist/dashboard (only when runtimeDir is package root)
6072
+ ...includePackageRootDistCandidate ? [import_path4.default.resolve(runtimeDir, "dist", "dashboard")] : [],
2868
6073
  // Bundled CLI: dist/index.js -> dist/dashboard
2869
6074
  import_path4.default.resolve(runtimeDir, "dashboard"),
2870
6075
  // Legacy/unbundled: dist/core -> dist/dashboard
2871
6076
  import_path4.default.resolve(runtimeDir, "..", "dashboard"),
6077
+ // Dev from src -> dist/dashboard
6078
+ import_path4.default.resolve(runtimeDir, "..", "dist", "dashboard"),
2872
6079
  // Dev from src/core -> dist/dashboard
2873
6080
  import_path4.default.resolve(runtimeDir, "..", "..", "dist", "dashboard"),
6081
+ // Dev from package root -> apps/dashboard/dist
6082
+ import_path4.default.resolve(runtimeDir, "..", "dashboard", "dist"),
6083
+ // Dev from src -> apps/dashboard/dist
6084
+ import_path4.default.resolve(runtimeDir, "..", "..", "dashboard", "dist"),
2874
6085
  // Dev from src/core -> apps/dashboard/dist
2875
6086
  import_path4.default.resolve(runtimeDir, "..", "..", "..", "dashboard", "dist")
2876
6087
  ];
6088
+ if (options.verbose) {
6089
+ console.debug(
6090
+ `[dashboard] dist resolution candidates: ${candidates.join(", ")}`
6091
+ );
6092
+ }
2877
6093
  for (const distDir of candidates) {
2878
6094
  const indexHtml = import_path4.default.join(distDir, "index.html");
2879
6095
  if ((0, import_fs4.existsSync)(indexHtml)) {
@@ -2921,11 +6137,8 @@ async function startDashboardServer(options = {}) {
2921
6137
  app.use(staticMiddleware);
2922
6138
  app.get("*", spaFallback);
2923
6139
  } else {
2924
- const runtimeDir = typeof __dirname !== "undefined" ? (
2925
- // eslint-disable-next-line no-undef
2926
- __dirname
2927
- ) : import_path4.default.dirname((0, import_url.fileURLToPath)(import_meta.url));
2928
- const { distDir: dashboardDistDir, indexHtml: dashboardIndexHtml } = resolveDashboardDistDir(runtimeDir);
6140
+ const runtimeDir = resolveRuntimeDir();
6141
+ const { distDir: dashboardDistDir, indexHtml: dashboardIndexHtml } = resolveDashboardDistDir(runtimeDir, { verbose: options.verbose });
2929
6142
  app.use(import_express2.default.static(dashboardDistDir));
2930
6143
  app.get("*", (req, res, next) => {
2931
6144
  if (req.path.startsWith("/api") || req.path === "/health") return next();
@@ -2998,83 +6211,80 @@ async function startDashboardServer(options = {}) {
2998
6211
  }
2999
6212
 
3000
6213
  // src/commands/dashboard.ts
3001
- var dashboard = new import_commander6.Command().name("dashboard").description("Start the local dashboard (UI + API + WebSocket) server").option("-p, --port <port>", "Port to listen on", "4000").option("-h, --host <host>", "Host to bind to", "localhost").option("--capture-port <port>", "Capture server port", "3001").option("--capture-host <host>", "Capture server host", "0.0.0.0").option("--no-capture", "Do not start the capture server").option("--captures-dir <dir>", "Override captures directory").option("--templates-dir <dir>", "Override templates base directory").action(async (options) => {
3002
- const port = Number.parseInt(String(options.port), 10);
3003
- if (!Number.isFinite(port) || port < 0 || port > 65535) {
3004
- console.error(import_chalk6.default.red("Invalid port number"));
3005
- process.exitCode = 1;
3006
- return;
3007
- }
3008
- try {
6214
+ var dashboard = new import_commander6.Command().name("dashboard").description("Start the local dashboard (UI + API + WebSocket) server").option("-p, --port <port>", "Port to listen on", "4000").option("-h, --host <host>", "Host to bind to", "localhost").option("-v, --verbose", "Show dashboard startup debug details").option("--debug", "Alias for --verbose").option("--capture-port <port>", "Capture server port", "3001").option("--capture-host <host>", "Capture server host", "0.0.0.0").option("--no-capture", "Do not start the capture server").option("--captures-dir <dir>", "Override captures directory").option("--templates-dir <dir>", "Override templates base directory").action(
6215
+ async (options) => {
6216
+ const port = Number.parseInt(String(options.port), 10);
6217
+ if (!Number.isFinite(port) || port < 0 || port > 65535) {
6218
+ console.error(source_default.red("Invalid port number"));
6219
+ process.exitCode = 1;
6220
+ return;
6221
+ }
3009
6222
  const capturePort = Number.parseInt(String(options.capturePort), 10);
3010
6223
  if (!Number.isFinite(capturePort) || capturePort < 0 || capturePort > 65535) {
3011
- console.error(import_chalk6.default.red("Invalid capture port number"));
6224
+ console.error(source_default.red("Invalid capture port number"));
3012
6225
  process.exitCode = 1;
3013
6226
  return;
3014
6227
  }
3015
- const { url, server, capture: capture2 } = await startDashboardServer({
3016
- host: options.host,
3017
- port,
3018
- captureHost: options.captureHost,
3019
- capturePort,
3020
- startCapture: options.capture !== false,
3021
- capturesDir: options.capturesDir,
3022
- templatesBaseDir: options.templatesDir
3023
- });
3024
- console.log(import_chalk6.default.bold("\n\u{1F9ED} Dashboard Server\n"));
3025
- console.log(import_chalk6.default.gray(` Dashboard: ${url}/`));
3026
- console.log(import_chalk6.default.gray(` Health: ${url}/health`));
3027
- console.log(import_chalk6.default.gray(` API Base: ${url}/api`));
3028
- console.log(
3029
- import_chalk6.default.gray(` WebSocket: ${url.replace("http://", "ws://")}/ws`)
3030
- );
3031
- if (capture2) {
3032
- console.log();
3033
- console.log(import_chalk6.default.bold("\u{1F3A3} Capture Server"));
3034
- console.log(import_chalk6.default.gray(` Capture: ${capture2.url}`));
6228
+ try {
6229
+ const verbose = Boolean(options.verbose || options.debug);
6230
+ const { url, server, capture: capture2 } = await startDashboardServer({
6231
+ host: options.host,
6232
+ port,
6233
+ captureHost: options.captureHost,
6234
+ capturePort,
6235
+ startCapture: options.capture !== false,
6236
+ capturesDir: options.capturesDir,
6237
+ templatesBaseDir: options.templatesDir,
6238
+ verbose
6239
+ });
6240
+ console.log(source_default.bold("\n\u{1F9ED} Dashboard Server\n"));
6241
+ console.log(source_default.gray(` Dashboard: ${url}/`));
6242
+ console.log(source_default.gray(` Health: ${url}/health`));
6243
+ console.log(source_default.gray(` API Base: ${url}/api`));
3035
6244
  console.log(
3036
- import_chalk6.default.gray(
3037
- ` Tip: Send webhooks to any path, e.g. ${capture2.url}/webhooks/github`
3038
- )
6245
+ source_default.gray(` WebSocket: ${url.replace("http://", "ws://")}/ws`)
3039
6246
  );
3040
- }
3041
- console.log();
3042
- const shutdown = async () => {
3043
6247
  if (capture2) {
3044
- await capture2.server.stop();
6248
+ console.log();
6249
+ console.log(source_default.bold("\u{1F3A3} Capture Server"));
6250
+ console.log(source_default.gray(` Capture: ${capture2.url}`));
6251
+ console.log(
6252
+ source_default.gray(
6253
+ ` Tip: Send webhooks to any path, e.g. ${capture2.url}/webhooks/github`
6254
+ )
6255
+ );
3045
6256
  }
3046
- await new Promise((resolve) => server.close(() => resolve()));
3047
- process.exit(0);
3048
- };
3049
- process.on("SIGINT", shutdown);
3050
- process.on("SIGTERM", shutdown);
3051
- } catch (error) {
3052
- console.error(
3053
- import_chalk6.default.red(
3054
- `Failed to start dashboard server: ${error?.message || error}`
3055
- )
3056
- );
3057
- process.exitCode = 1;
6257
+ console.log();
6258
+ const shutdown = async () => {
6259
+ if (capture2) {
6260
+ await capture2.server.stop();
6261
+ }
6262
+ await new Promise((resolve) => server.close(() => resolve()));
6263
+ process.exit(0);
6264
+ };
6265
+ process.on("SIGINT", shutdown);
6266
+ process.on("SIGTERM", shutdown);
6267
+ } catch (error) {
6268
+ const message = error instanceof Error ? error.message : String(error);
6269
+ console.error(
6270
+ source_default.red(`Failed to start dashboard server: ${message}`)
6271
+ );
6272
+ process.exitCode = 1;
6273
+ }
3058
6274
  }
3059
- });
6275
+ );
3060
6276
 
3061
6277
  // src/index.ts
3062
- var import_meta2 = {};
3063
6278
  function getVersion() {
3064
6279
  if (typeof CLI_VERSION !== "undefined") {
3065
6280
  return CLI_VERSION;
3066
6281
  }
3067
- try {
3068
- const packageJsonPath = (0, import_node_url.fileURLToPath)(
3069
- new URL("../package.json", import_meta2.url)
3070
- );
3071
- const packageJson = JSON.parse(
3072
- (0, import_node_fs.readFileSync)(packageJsonPath, { encoding: "utf8" })
3073
- );
3074
- return packageJson.version;
3075
- } catch {
3076
- return "0.0.0-unknown";
6282
+ const runtimeDir = resolveRuntimeDir();
6283
+ const runtimeVersion = resolveRuntimePackageVersion(runtimeDir);
6284
+ if (runtimeVersion) {
6285
+ return runtimeVersion;
3077
6286
  }
6287
+ return "0.0.0-unknown";
3078
6288
  }
3079
6289
  var program = new import_commander7.Command().name("better-webhook").description(
3080
6290
  "Modern CLI for developing, capturing, and replaying webhooks locally"