@vexcms/better-auth 0.1.0-alpha.2 → 0.1.0-alpha.21

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
package/dist/client.js ADDED
@@ -0,0 +1,997 @@
1
+ import {
2
+ betterAuthAdapter
3
+ } from "./chunk-YPIEILO5.js";
4
+
5
+ // src/pluginSchemas.generated.ts
6
+ var PLUGIN_SCHEMAS = {
7
+ "admin": {
8
+ "user": {
9
+ "fields": {
10
+ "role": {
11
+ "type": "string",
12
+ "required": false,
13
+ "input": false
14
+ },
15
+ "banned": {
16
+ "type": "boolean",
17
+ "defaultValue": false,
18
+ "required": false,
19
+ "input": false
20
+ },
21
+ "banReason": {
22
+ "type": "string",
23
+ "required": false,
24
+ "input": false
25
+ },
26
+ "banExpires": {
27
+ "type": "date",
28
+ "required": false,
29
+ "input": false
30
+ }
31
+ }
32
+ },
33
+ "session": {
34
+ "fields": {
35
+ "impersonatedBy": {
36
+ "type": "string",
37
+ "required": false,
38
+ "input": false
39
+ }
40
+ }
41
+ }
42
+ },
43
+ "anonymous": {
44
+ "user": {
45
+ "fields": {
46
+ "isAnonymous": {
47
+ "type": "boolean",
48
+ "required": false,
49
+ "input": false,
50
+ "defaultValue": false
51
+ }
52
+ }
53
+ }
54
+ },
55
+ "apiKey": {
56
+ "apikey": {
57
+ "fields": {
58
+ "configId": {
59
+ "type": "string",
60
+ "required": true,
61
+ "defaultValue": "default",
62
+ "input": false,
63
+ "index": true
64
+ },
65
+ "name": {
66
+ "type": "string",
67
+ "required": false,
68
+ "input": false
69
+ },
70
+ "start": {
71
+ "type": "string",
72
+ "required": false,
73
+ "input": false
74
+ },
75
+ "referenceId": {
76
+ "type": "string",
77
+ "required": true,
78
+ "input": false,
79
+ "index": true
80
+ },
81
+ "prefix": {
82
+ "type": "string",
83
+ "required": false,
84
+ "input": false
85
+ },
86
+ "key": {
87
+ "type": "string",
88
+ "required": true,
89
+ "input": false,
90
+ "index": true
91
+ },
92
+ "refillInterval": {
93
+ "type": "number",
94
+ "required": false,
95
+ "input": false
96
+ },
97
+ "refillAmount": {
98
+ "type": "number",
99
+ "required": false,
100
+ "input": false
101
+ },
102
+ "lastRefillAt": {
103
+ "type": "date",
104
+ "required": false,
105
+ "input": false
106
+ },
107
+ "enabled": {
108
+ "type": "boolean",
109
+ "required": false,
110
+ "input": false,
111
+ "defaultValue": true
112
+ },
113
+ "rateLimitEnabled": {
114
+ "type": "boolean",
115
+ "required": false,
116
+ "input": false,
117
+ "defaultValue": true
118
+ },
119
+ "rateLimitTimeWindow": {
120
+ "type": "number",
121
+ "required": false,
122
+ "input": false,
123
+ "defaultValue": 864e5
124
+ },
125
+ "rateLimitMax": {
126
+ "type": "number",
127
+ "required": false,
128
+ "input": false,
129
+ "defaultValue": 10
130
+ },
131
+ "requestCount": {
132
+ "type": "number",
133
+ "required": false,
134
+ "input": false,
135
+ "defaultValue": 0
136
+ },
137
+ "remaining": {
138
+ "type": "number",
139
+ "required": false,
140
+ "input": false
141
+ },
142
+ "lastRequest": {
143
+ "type": "date",
144
+ "required": false,
145
+ "input": false
146
+ },
147
+ "expiresAt": {
148
+ "type": "date",
149
+ "required": false,
150
+ "input": false
151
+ },
152
+ "createdAt": {
153
+ "type": "date",
154
+ "required": true,
155
+ "input": false
156
+ },
157
+ "updatedAt": {
158
+ "type": "date",
159
+ "required": true,
160
+ "input": false
161
+ },
162
+ "permissions": {
163
+ "type": "string",
164
+ "required": false,
165
+ "input": false
166
+ },
167
+ "metadata": {
168
+ "type": "string",
169
+ "required": false,
170
+ "input": true,
171
+ "transform": {}
172
+ }
173
+ }
174
+ }
175
+ },
176
+ "convex": {
177
+ "user": {
178
+ "fields": {
179
+ "userId": {
180
+ "type": "string",
181
+ "required": false,
182
+ "input": false
183
+ }
184
+ }
185
+ },
186
+ "jwks": {
187
+ "fields": {
188
+ "publicKey": {
189
+ "type": "string",
190
+ "required": true
191
+ },
192
+ "privateKey": {
193
+ "type": "string",
194
+ "required": true
195
+ },
196
+ "createdAt": {
197
+ "type": "date",
198
+ "required": true
199
+ },
200
+ "expiresAt": {
201
+ "type": "date",
202
+ "required": false
203
+ }
204
+ }
205
+ }
206
+ },
207
+ "deviceAuthorization": {
208
+ "deviceCode": {
209
+ "fields": {
210
+ "deviceCode": {
211
+ "type": "string",
212
+ "required": true
213
+ },
214
+ "userCode": {
215
+ "type": "string",
216
+ "required": true
217
+ },
218
+ "userId": {
219
+ "type": "string",
220
+ "required": false
221
+ },
222
+ "expiresAt": {
223
+ "type": "date",
224
+ "required": true
225
+ },
226
+ "status": {
227
+ "type": "string",
228
+ "required": true
229
+ },
230
+ "lastPolledAt": {
231
+ "type": "date",
232
+ "required": false
233
+ },
234
+ "pollingInterval": {
235
+ "type": "number",
236
+ "required": false
237
+ },
238
+ "clientId": {
239
+ "type": "string",
240
+ "required": false
241
+ },
242
+ "scope": {
243
+ "type": "string",
244
+ "required": false
245
+ }
246
+ }
247
+ }
248
+ },
249
+ "jwt": {
250
+ "jwks": {
251
+ "fields": {
252
+ "publicKey": {
253
+ "type": "string",
254
+ "required": true
255
+ },
256
+ "privateKey": {
257
+ "type": "string",
258
+ "required": true
259
+ },
260
+ "createdAt": {
261
+ "type": "date",
262
+ "required": true
263
+ },
264
+ "expiresAt": {
265
+ "type": "date",
266
+ "required": false
267
+ }
268
+ }
269
+ }
270
+ },
271
+ "mcp": {
272
+ "oauthApplication": {
273
+ "modelName": "oauthApplication",
274
+ "fields": {
275
+ "name": {
276
+ "type": "string"
277
+ },
278
+ "icon": {
279
+ "type": "string",
280
+ "required": false
281
+ },
282
+ "metadata": {
283
+ "type": "string",
284
+ "required": false
285
+ },
286
+ "clientId": {
287
+ "type": "string",
288
+ "unique": true
289
+ },
290
+ "clientSecret": {
291
+ "type": "string",
292
+ "required": false
293
+ },
294
+ "redirectUrls": {
295
+ "type": "string"
296
+ },
297
+ "type": {
298
+ "type": "string"
299
+ },
300
+ "disabled": {
301
+ "type": "boolean",
302
+ "required": false,
303
+ "defaultValue": false
304
+ },
305
+ "userId": {
306
+ "type": "string",
307
+ "required": false,
308
+ "references": {
309
+ "model": "user",
310
+ "field": "id",
311
+ "onDelete": "cascade"
312
+ },
313
+ "index": true
314
+ },
315
+ "createdAt": {
316
+ "type": "date"
317
+ },
318
+ "updatedAt": {
319
+ "type": "date"
320
+ }
321
+ }
322
+ },
323
+ "oauthAccessToken": {
324
+ "modelName": "oauthAccessToken",
325
+ "fields": {
326
+ "accessToken": {
327
+ "type": "string",
328
+ "unique": true
329
+ },
330
+ "refreshToken": {
331
+ "type": "string",
332
+ "unique": true
333
+ },
334
+ "accessTokenExpiresAt": {
335
+ "type": "date"
336
+ },
337
+ "refreshTokenExpiresAt": {
338
+ "type": "date"
339
+ },
340
+ "clientId": {
341
+ "type": "string",
342
+ "references": {
343
+ "model": "oauthApplication",
344
+ "field": "clientId",
345
+ "onDelete": "cascade"
346
+ },
347
+ "index": true
348
+ },
349
+ "userId": {
350
+ "type": "string",
351
+ "required": false,
352
+ "references": {
353
+ "model": "user",
354
+ "field": "id",
355
+ "onDelete": "cascade"
356
+ },
357
+ "index": true
358
+ },
359
+ "scopes": {
360
+ "type": "string"
361
+ },
362
+ "createdAt": {
363
+ "type": "date"
364
+ },
365
+ "updatedAt": {
366
+ "type": "date"
367
+ }
368
+ }
369
+ },
370
+ "oauthConsent": {
371
+ "modelName": "oauthConsent",
372
+ "fields": {
373
+ "clientId": {
374
+ "type": "string",
375
+ "references": {
376
+ "model": "oauthApplication",
377
+ "field": "clientId",
378
+ "onDelete": "cascade"
379
+ },
380
+ "index": true
381
+ },
382
+ "userId": {
383
+ "type": "string",
384
+ "references": {
385
+ "model": "user",
386
+ "field": "id",
387
+ "onDelete": "cascade"
388
+ },
389
+ "index": true
390
+ },
391
+ "scopes": {
392
+ "type": "string"
393
+ },
394
+ "createdAt": {
395
+ "type": "date"
396
+ },
397
+ "updatedAt": {
398
+ "type": "date"
399
+ },
400
+ "consentGiven": {
401
+ "type": "boolean"
402
+ }
403
+ }
404
+ }
405
+ },
406
+ "oidcProvider": {
407
+ "oauthApplication": {
408
+ "modelName": "oauthApplication",
409
+ "fields": {
410
+ "name": {
411
+ "type": "string"
412
+ },
413
+ "icon": {
414
+ "type": "string",
415
+ "required": false
416
+ },
417
+ "metadata": {
418
+ "type": "string",
419
+ "required": false
420
+ },
421
+ "clientId": {
422
+ "type": "string",
423
+ "unique": true
424
+ },
425
+ "clientSecret": {
426
+ "type": "string",
427
+ "required": false
428
+ },
429
+ "redirectUrls": {
430
+ "type": "string"
431
+ },
432
+ "type": {
433
+ "type": "string"
434
+ },
435
+ "disabled": {
436
+ "type": "boolean",
437
+ "required": false,
438
+ "defaultValue": false
439
+ },
440
+ "userId": {
441
+ "type": "string",
442
+ "required": false,
443
+ "references": {
444
+ "model": "user",
445
+ "field": "id",
446
+ "onDelete": "cascade"
447
+ },
448
+ "index": true
449
+ },
450
+ "createdAt": {
451
+ "type": "date"
452
+ },
453
+ "updatedAt": {
454
+ "type": "date"
455
+ }
456
+ }
457
+ },
458
+ "oauthAccessToken": {
459
+ "modelName": "oauthAccessToken",
460
+ "fields": {
461
+ "accessToken": {
462
+ "type": "string",
463
+ "unique": true
464
+ },
465
+ "refreshToken": {
466
+ "type": "string",
467
+ "unique": true
468
+ },
469
+ "accessTokenExpiresAt": {
470
+ "type": "date"
471
+ },
472
+ "refreshTokenExpiresAt": {
473
+ "type": "date"
474
+ },
475
+ "clientId": {
476
+ "type": "string",
477
+ "references": {
478
+ "model": "oauthApplication",
479
+ "field": "clientId",
480
+ "onDelete": "cascade"
481
+ },
482
+ "index": true
483
+ },
484
+ "userId": {
485
+ "type": "string",
486
+ "required": false,
487
+ "references": {
488
+ "model": "user",
489
+ "field": "id",
490
+ "onDelete": "cascade"
491
+ },
492
+ "index": true
493
+ },
494
+ "scopes": {
495
+ "type": "string"
496
+ },
497
+ "createdAt": {
498
+ "type": "date"
499
+ },
500
+ "updatedAt": {
501
+ "type": "date"
502
+ }
503
+ }
504
+ },
505
+ "oauthConsent": {
506
+ "modelName": "oauthConsent",
507
+ "fields": {
508
+ "clientId": {
509
+ "type": "string",
510
+ "references": {
511
+ "model": "oauthApplication",
512
+ "field": "clientId",
513
+ "onDelete": "cascade"
514
+ },
515
+ "index": true
516
+ },
517
+ "userId": {
518
+ "type": "string",
519
+ "references": {
520
+ "model": "user",
521
+ "field": "id",
522
+ "onDelete": "cascade"
523
+ },
524
+ "index": true
525
+ },
526
+ "scopes": {
527
+ "type": "string"
528
+ },
529
+ "createdAt": {
530
+ "type": "date"
531
+ },
532
+ "updatedAt": {
533
+ "type": "date"
534
+ },
535
+ "consentGiven": {
536
+ "type": "boolean"
537
+ }
538
+ }
539
+ }
540
+ },
541
+ "organization": {
542
+ "organization": {
543
+ "fields": {
544
+ "name": {
545
+ "type": "string",
546
+ "required": true,
547
+ "sortable": true
548
+ },
549
+ "slug": {
550
+ "type": "string",
551
+ "required": true,
552
+ "unique": true,
553
+ "sortable": true,
554
+ "index": true
555
+ },
556
+ "logo": {
557
+ "type": "string",
558
+ "required": false
559
+ },
560
+ "createdAt": {
561
+ "type": "date",
562
+ "required": true
563
+ },
564
+ "metadata": {
565
+ "type": "string",
566
+ "required": false
567
+ }
568
+ }
569
+ },
570
+ "member": {
571
+ "fields": {
572
+ "organizationId": {
573
+ "type": "string",
574
+ "required": true,
575
+ "references": {
576
+ "model": "organization",
577
+ "field": "id"
578
+ },
579
+ "index": true
580
+ },
581
+ "userId": {
582
+ "type": "string",
583
+ "required": true,
584
+ "references": {
585
+ "model": "user",
586
+ "field": "id"
587
+ },
588
+ "index": true
589
+ },
590
+ "role": {
591
+ "type": "string",
592
+ "required": true,
593
+ "sortable": true,
594
+ "defaultValue": "member"
595
+ },
596
+ "createdAt": {
597
+ "type": "date",
598
+ "required": true
599
+ }
600
+ }
601
+ },
602
+ "invitation": {
603
+ "fields": {
604
+ "organizationId": {
605
+ "type": "string",
606
+ "required": true,
607
+ "references": {
608
+ "model": "organization",
609
+ "field": "id"
610
+ },
611
+ "index": true
612
+ },
613
+ "email": {
614
+ "type": "string",
615
+ "required": true,
616
+ "sortable": true,
617
+ "index": true
618
+ },
619
+ "role": {
620
+ "type": "string",
621
+ "required": false,
622
+ "sortable": true
623
+ },
624
+ "status": {
625
+ "type": "string",
626
+ "required": true,
627
+ "sortable": true,
628
+ "defaultValue": "pending"
629
+ },
630
+ "expiresAt": {
631
+ "type": "date",
632
+ "required": true
633
+ },
634
+ "createdAt": {
635
+ "type": "date",
636
+ "required": true
637
+ },
638
+ "inviterId": {
639
+ "type": "string",
640
+ "references": {
641
+ "model": "user",
642
+ "field": "id"
643
+ },
644
+ "required": true
645
+ }
646
+ }
647
+ },
648
+ "session": {
649
+ "fields": {
650
+ "activeOrganizationId": {
651
+ "type": "string",
652
+ "required": false,
653
+ "input": false
654
+ }
655
+ }
656
+ }
657
+ },
658
+ "organization.teams": {
659
+ "organization": {
660
+ "fields": {
661
+ "name": {
662
+ "type": "string",
663
+ "required": true,
664
+ "sortable": true
665
+ },
666
+ "slug": {
667
+ "type": "string",
668
+ "required": true,
669
+ "unique": true,
670
+ "sortable": true,
671
+ "index": true
672
+ },
673
+ "logo": {
674
+ "type": "string",
675
+ "required": false
676
+ },
677
+ "createdAt": {
678
+ "type": "date",
679
+ "required": true
680
+ },
681
+ "metadata": {
682
+ "type": "string",
683
+ "required": false
684
+ }
685
+ }
686
+ },
687
+ "team": {
688
+ "fields": {
689
+ "name": {
690
+ "type": "string",
691
+ "required": true
692
+ },
693
+ "organizationId": {
694
+ "type": "string",
695
+ "required": true,
696
+ "references": {
697
+ "model": "organization",
698
+ "field": "id"
699
+ },
700
+ "index": true
701
+ },
702
+ "createdAt": {
703
+ "type": "date",
704
+ "required": true
705
+ },
706
+ "updatedAt": {
707
+ "type": "date",
708
+ "required": false
709
+ }
710
+ }
711
+ },
712
+ "teamMember": {
713
+ "fields": {
714
+ "teamId": {
715
+ "type": "string",
716
+ "required": true,
717
+ "references": {
718
+ "model": "team",
719
+ "field": "id"
720
+ },
721
+ "index": true
722
+ },
723
+ "userId": {
724
+ "type": "string",
725
+ "required": true,
726
+ "references": {
727
+ "model": "user",
728
+ "field": "id"
729
+ },
730
+ "index": true
731
+ },
732
+ "createdAt": {
733
+ "type": "date",
734
+ "required": false
735
+ }
736
+ }
737
+ },
738
+ "member": {
739
+ "fields": {
740
+ "organizationId": {
741
+ "type": "string",
742
+ "required": true,
743
+ "references": {
744
+ "model": "organization",
745
+ "field": "id"
746
+ },
747
+ "index": true
748
+ },
749
+ "userId": {
750
+ "type": "string",
751
+ "required": true,
752
+ "references": {
753
+ "model": "user",
754
+ "field": "id"
755
+ },
756
+ "index": true
757
+ },
758
+ "role": {
759
+ "type": "string",
760
+ "required": true,
761
+ "sortable": true,
762
+ "defaultValue": "member"
763
+ },
764
+ "createdAt": {
765
+ "type": "date",
766
+ "required": true
767
+ }
768
+ }
769
+ },
770
+ "invitation": {
771
+ "fields": {
772
+ "organizationId": {
773
+ "type": "string",
774
+ "required": true,
775
+ "references": {
776
+ "model": "organization",
777
+ "field": "id"
778
+ },
779
+ "index": true
780
+ },
781
+ "email": {
782
+ "type": "string",
783
+ "required": true,
784
+ "sortable": true,
785
+ "index": true
786
+ },
787
+ "role": {
788
+ "type": "string",
789
+ "required": false,
790
+ "sortable": true
791
+ },
792
+ "teamId": {
793
+ "type": "string",
794
+ "required": false,
795
+ "sortable": true
796
+ },
797
+ "status": {
798
+ "type": "string",
799
+ "required": true,
800
+ "sortable": true,
801
+ "defaultValue": "pending"
802
+ },
803
+ "expiresAt": {
804
+ "type": "date",
805
+ "required": true
806
+ },
807
+ "createdAt": {
808
+ "type": "date",
809
+ "required": true
810
+ },
811
+ "inviterId": {
812
+ "type": "string",
813
+ "references": {
814
+ "model": "user",
815
+ "field": "id"
816
+ },
817
+ "required": true
818
+ }
819
+ }
820
+ },
821
+ "session": {
822
+ "fields": {
823
+ "activeOrganizationId": {
824
+ "type": "string",
825
+ "required": false,
826
+ "input": false
827
+ },
828
+ "activeTeamId": {
829
+ "type": "string",
830
+ "required": false,
831
+ "input": false
832
+ }
833
+ }
834
+ }
835
+ },
836
+ "phoneNumber": {
837
+ "user": {
838
+ "fields": {
839
+ "phoneNumber": {
840
+ "type": "string",
841
+ "required": false,
842
+ "unique": true,
843
+ "sortable": true,
844
+ "returned": true
845
+ },
846
+ "phoneNumberVerified": {
847
+ "type": "boolean",
848
+ "required": false,
849
+ "returned": true,
850
+ "input": false
851
+ }
852
+ }
853
+ }
854
+ },
855
+ "siwe": {
856
+ "walletAddress": {
857
+ "fields": {
858
+ "userId": {
859
+ "type": "string",
860
+ "references": {
861
+ "model": "user",
862
+ "field": "id"
863
+ },
864
+ "required": true,
865
+ "index": true
866
+ },
867
+ "address": {
868
+ "type": "string",
869
+ "required": true
870
+ },
871
+ "chainId": {
872
+ "type": "number",
873
+ "required": true
874
+ },
875
+ "isPrimary": {
876
+ "type": "boolean",
877
+ "defaultValue": false
878
+ },
879
+ "createdAt": {
880
+ "type": "date",
881
+ "required": true
882
+ }
883
+ }
884
+ }
885
+ },
886
+ "twoFactor": {
887
+ "user": {
888
+ "fields": {
889
+ "twoFactorEnabled": {
890
+ "type": "boolean",
891
+ "required": false,
892
+ "defaultValue": false,
893
+ "input": false
894
+ }
895
+ }
896
+ },
897
+ "twoFactor": {
898
+ "fields": {
899
+ "secret": {
900
+ "type": "string",
901
+ "required": true,
902
+ "returned": false,
903
+ "index": true
904
+ },
905
+ "backupCodes": {
906
+ "type": "string",
907
+ "required": true,
908
+ "returned": false
909
+ },
910
+ "userId": {
911
+ "type": "string",
912
+ "required": true,
913
+ "returned": false,
914
+ "references": {
915
+ "model": "user",
916
+ "field": "id"
917
+ },
918
+ "index": true
919
+ },
920
+ "verified": {
921
+ "type": "boolean",
922
+ "required": false,
923
+ "defaultValue": true,
924
+ "input": false
925
+ },
926
+ "failedVerificationCount": {
927
+ "type": "number",
928
+ "required": false,
929
+ "defaultValue": 0,
930
+ "input": false,
931
+ "returned": false
932
+ },
933
+ "lockedUntil": {
934
+ "type": "date",
935
+ "required": false,
936
+ "input": false,
937
+ "returned": false
938
+ }
939
+ }
940
+ }
941
+ }
942
+ };
943
+
944
+ // src/pluginSchemas.ts
945
+ function resolvePluginStubs(props) {
946
+ const stubs = [];
947
+ for (const [name, descriptor] of Object.entries(props.plugins ?? {})) {
948
+ if (descriptor === void 0 || descriptor === false) continue;
949
+ const options = descriptor === true ? {} : descriptor;
950
+ const key = name === "organization" && options.teams === true ? "organization.teams" : name;
951
+ const generated = PLUGIN_SCHEMAS[key];
952
+ if (generated === void 0) {
953
+ throw new Error(
954
+ `betterAuthCollections: no schema is modelled for the "${name}" plugin. Read \`schema\` off your real plugin instance on the server and pass it as \`extraSchema\`.`
955
+ );
956
+ }
957
+ const schema = structuredClone(generated);
958
+ for (const [table, tableOverride] of Object.entries(
959
+ options.schema ?? {}
960
+ )) {
961
+ const target = schema[table];
962
+ if (target === void 0 || tableOverride === void 0) continue;
963
+ if (tableOverride.additionalFields !== void 0) {
964
+ target.fields = { ...target.fields, ...tableOverride.additionalFields };
965
+ }
966
+ if (tableOverride.modelName !== void 0) {
967
+ target.modelName = tableOverride.modelName;
968
+ }
969
+ for (const [field, fieldName] of Object.entries(tableOverride.fields ?? {})) {
970
+ const attribute = target.fields[field];
971
+ if (attribute !== void 0) attribute.fieldName = fieldName;
972
+ }
973
+ }
974
+ stubs.push({ id: name, schema });
975
+ }
976
+ const extra = props.extraSchema;
977
+ if (extra !== void 0) {
978
+ for (const [index, schema] of (Array.isArray(extra) ? extra : [extra]).entries()) {
979
+ stubs.push({ id: `extraSchema-${index}`, schema });
980
+ }
981
+ }
982
+ return stubs;
983
+ }
984
+
985
+ // src/collections.ts
986
+ function betterAuthCollections(schema = {}) {
987
+ const { plugins, extraSchema, ...coreTables } = schema;
988
+ const config = {
989
+ ...coreTables,
990
+ plugins: resolvePluginStubs({ plugins, extraSchema })
991
+ };
992
+ return betterAuthAdapter({ config }).collections;
993
+ }
994
+ export {
995
+ betterAuthCollections
996
+ };
997
+ //# sourceMappingURL=client.js.map