@spaire/better-auth 2.0.1 → 3.0.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
@@ -0,0 +1,911 @@
1
+ import * as better_auth_client from 'better-auth/client';
2
+ import { BetterFetchOption } from 'better-auth/client';
3
+ import { SpaireEmbedCheckout } from '@spaire/checkout/embed';
4
+ import * as _spaire_sdk_models_operations_customerportalorderslist_js from '@spaire/sdk/models/operations/customerportalorderslist.js';
5
+ import * as _spaire_sdk_models_operations_customerportalsubscriptionslist_js from '@spaire/sdk/models/operations/customerportalsubscriptionslist.js';
6
+ import * as _spaire_sdk_models_operations_subscriptionslist_js from '@spaire/sdk/models/operations/subscriptionslist.js';
7
+ import * as _spaire_sdk_models_operations_customerportalbenefitgrantslist_js from '@spaire/sdk/models/operations/customerportalbenefitgrantslist.js';
8
+ import * as _spaire_sdk_models_components_customerstate_js from '@spaire/sdk/models/components/customerstate.js';
9
+ import * as _spaire_sdk_models_components_eventsingestresponse_js from '@spaire/sdk/models/components/eventsingestresponse.js';
10
+ import * as _spaire_sdk_types_operations_js from '@spaire/sdk/types/operations.js';
11
+ import * as _spaire_sdk_models_operations_customerportalcustomermeterslist_js from '@spaire/sdk/models/operations/customerportalcustomermeterslist.js';
12
+ import * as better_auth from 'better-auth';
13
+ import { User } from 'better-auth';
14
+ import * as zod from 'zod';
15
+ import { z } from 'zod';
16
+ import { Spaire } from '@spaire/sdk';
17
+ import { WebhookBenefitCreatedPayload } from '@spaire/sdk/models/components/webhookbenefitcreatedpayload';
18
+ import { WebhookBenefitGrantCreatedPayload } from '@spaire/sdk/models/components/webhookbenefitgrantcreatedpayload';
19
+ import { WebhookBenefitGrantRevokedPayload } from '@spaire/sdk/models/components/webhookbenefitgrantrevokedpayload';
20
+ import { WebhookBenefitGrantUpdatedPayload } from '@spaire/sdk/models/components/webhookbenefitgrantupdatedpayload';
21
+ import { WebhookBenefitUpdatedPayload } from '@spaire/sdk/models/components/webhookbenefitupdatedpayload';
22
+ import { WebhookCheckoutCreatedPayload } from '@spaire/sdk/models/components/webhookcheckoutcreatedpayload';
23
+ import { WebhookCheckoutUpdatedPayload } from '@spaire/sdk/models/components/webhookcheckoutupdatedpayload';
24
+ import { WebhookCustomerCreatedPayload } from '@spaire/sdk/models/components/webhookcustomercreatedpayload';
25
+ import { WebhookCustomerDeletedPayload } from '@spaire/sdk/models/components/webhookcustomerdeletedpayload';
26
+ import { WebhookCustomerStateChangedPayload } from '@spaire/sdk/models/components/webhookcustomerstatechangedpayload';
27
+ import { WebhookCustomerUpdatedPayload } from '@spaire/sdk/models/components/webhookcustomerupdatedpayload';
28
+ import { WebhookOrderCreatedPayload } from '@spaire/sdk/models/components/webhookordercreatedpayload';
29
+ import { WebhookOrderPaidPayload } from '@spaire/sdk/models/components/webhookorderpaidpayload';
30
+ import { WebhookOrderRefundedPayload } from '@spaire/sdk/models/components/webhookorderrefundedpayload';
31
+ import { WebhookOrderUpdatedPayload } from '@spaire/sdk/models/components/webhookorderupdatedpayload';
32
+ import { WebhookOrganizationUpdatedPayload } from '@spaire/sdk/models/components/webhookorganizationupdatedpayload';
33
+ import { WebhookProductCreatedPayload } from '@spaire/sdk/models/components/webhookproductcreatedpayload';
34
+ import { WebhookProductUpdatedPayload } from '@spaire/sdk/models/components/webhookproductupdatedpayload';
35
+ import { WebhookRefundCreatedPayload } from '@spaire/sdk/models/components/webhookrefundcreatedpayload';
36
+ import { WebhookRefundUpdatedPayload } from '@spaire/sdk/models/components/webhookrefundupdatedpayload';
37
+ import { WebhookSubscriptionActivePayload } from '@spaire/sdk/models/components/webhooksubscriptionactivepayload';
38
+ import { WebhookSubscriptionCanceledPayload } from '@spaire/sdk/models/components/webhooksubscriptioncanceledpayload';
39
+ import { WebhookSubscriptionCreatedPayload } from '@spaire/sdk/models/components/webhooksubscriptioncreatedpayload';
40
+ import { WebhookSubscriptionRevokedPayload } from '@spaire/sdk/models/components/webhooksubscriptionrevokedpayload';
41
+ import { WebhookSubscriptionUncanceledPayload } from '@spaire/sdk/models/components/webhooksubscriptionuncanceledpayload';
42
+ import { WebhookSubscriptionUpdatedPayload } from '@spaire/sdk/models/components/webhooksubscriptionupdatedpayload';
43
+ import { validateEvent } from '@spaire/sdk/webhooks';
44
+
45
+ interface CheckoutOptions {
46
+ /**
47
+ * Optional list of slug -> productId mappings for easy slug checkouts
48
+ */
49
+ products?: Product[] | (() => Promise<Product[]>);
50
+ /**
51
+ * Checkout Success URL
52
+ */
53
+ successUrl?: string;
54
+ /**
55
+ * Checkout Return URL
56
+ */
57
+ returnUrl?: string;
58
+ /**
59
+ * Only allow authenticated customers to checkout
60
+ */
61
+ authenticatedUsersOnly?: boolean;
62
+ /**
63
+ * Checkout theme
64
+ */
65
+ theme?: "light" | "dark";
66
+ /**
67
+ * Redirect to checkout page
68
+ */
69
+ redirect?: boolean;
70
+ }
71
+ declare const CheckoutParams: z.ZodObject<{
72
+ products: z.ZodOptional<z.ZodUnion<[z.ZodArray<z.ZodString, "many">, z.ZodString]>>;
73
+ slug: z.ZodOptional<z.ZodString>;
74
+ referenceId: z.ZodOptional<z.ZodString>;
75
+ customFieldData: z.ZodOptional<z.ZodRecord<z.ZodString, z.ZodUnion<[z.ZodString, z.ZodNumber, z.ZodBoolean]>>>;
76
+ metadata: z.ZodOptional<z.ZodRecord<z.ZodString, z.ZodUnion<[z.ZodString, z.ZodNumber, z.ZodBoolean]>>>;
77
+ allowDiscountCodes: z.ZodOptional<z.ZodBoolean>;
78
+ discountId: z.ZodOptional<z.ZodString>;
79
+ redirect: z.ZodOptional<z.ZodBoolean>;
80
+ embedOrigin: z.ZodOptional<z.ZodString>;
81
+ }, "strip", z.ZodTypeAny, {
82
+ products?: string | string[] | undefined;
83
+ slug?: string | undefined;
84
+ referenceId?: string | undefined;
85
+ customFieldData?: Record<string, string | number | boolean> | undefined;
86
+ metadata?: Record<string, string | number | boolean> | undefined;
87
+ allowDiscountCodes?: boolean | undefined;
88
+ discountId?: string | undefined;
89
+ redirect?: boolean | undefined;
90
+ embedOrigin?: string | undefined;
91
+ }, {
92
+ products?: string | string[] | undefined;
93
+ slug?: string | undefined;
94
+ referenceId?: string | undefined;
95
+ customFieldData?: Record<string, string | number | boolean> | undefined;
96
+ metadata?: Record<string, string | number | boolean> | undefined;
97
+ allowDiscountCodes?: boolean | undefined;
98
+ discountId?: string | undefined;
99
+ redirect?: boolean | undefined;
100
+ embedOrigin?: string | undefined;
101
+ }>;
102
+ type CheckoutParams = z.infer<typeof CheckoutParams>;
103
+ declare const checkout: (checkoutOptions?: CheckoutOptions) => (spaire: Spaire) => {
104
+ checkout: better_auth.StrictEndpoint<"/checkout", {
105
+ method: "POST";
106
+ body: z.ZodObject<{
107
+ products: z.ZodOptional<z.ZodUnion<[z.ZodArray<z.ZodString, "many">, z.ZodString]>>;
108
+ slug: z.ZodOptional<z.ZodString>;
109
+ referenceId: z.ZodOptional<z.ZodString>;
110
+ customFieldData: z.ZodOptional<z.ZodRecord<z.ZodString, z.ZodUnion<[z.ZodString, z.ZodNumber, z.ZodBoolean]>>>;
111
+ metadata: z.ZodOptional<z.ZodRecord<z.ZodString, z.ZodUnion<[z.ZodString, z.ZodNumber, z.ZodBoolean]>>>;
112
+ allowDiscountCodes: z.ZodOptional<z.ZodBoolean>;
113
+ discountId: z.ZodOptional<z.ZodString>;
114
+ redirect: z.ZodOptional<z.ZodBoolean>;
115
+ embedOrigin: z.ZodOptional<z.ZodString>;
116
+ }, "strip", z.ZodTypeAny, {
117
+ products?: string | string[] | undefined;
118
+ slug?: string | undefined;
119
+ referenceId?: string | undefined;
120
+ customFieldData?: Record<string, string | number | boolean> | undefined;
121
+ metadata?: Record<string, string | number | boolean> | undefined;
122
+ allowDiscountCodes?: boolean | undefined;
123
+ discountId?: string | undefined;
124
+ redirect?: boolean | undefined;
125
+ embedOrigin?: string | undefined;
126
+ }, {
127
+ products?: string | string[] | undefined;
128
+ slug?: string | undefined;
129
+ referenceId?: string | undefined;
130
+ customFieldData?: Record<string, string | number | boolean> | undefined;
131
+ metadata?: Record<string, string | number | boolean> | undefined;
132
+ allowDiscountCodes?: boolean | undefined;
133
+ discountId?: string | undefined;
134
+ redirect?: boolean | undefined;
135
+ embedOrigin?: string | undefined;
136
+ }>;
137
+ }, {
138
+ url: string;
139
+ redirect: boolean;
140
+ }>;
141
+ };
142
+
143
+ interface PortalConfig {
144
+ returnUrl?: string;
145
+ }
146
+ declare const portal: ({ returnUrl }?: PortalConfig) => (spaire: Spaire) => {
147
+ portal: better_auth.StrictEndpoint<"/customer/portal", {
148
+ method: "GET";
149
+ use: ((inputContext: better_auth.MiddlewareInputContext<better_auth.MiddlewareOptions>) => Promise<{
150
+ session: {
151
+ session: Record<string, any> & {
152
+ id: string;
153
+ createdAt: Date;
154
+ updatedAt: Date;
155
+ userId: string;
156
+ expiresAt: Date;
157
+ token: string;
158
+ ipAddress?: string | null | undefined;
159
+ userAgent?: string | null | undefined;
160
+ };
161
+ user: Record<string, any> & {
162
+ id: string;
163
+ createdAt: Date;
164
+ updatedAt: Date;
165
+ email: string;
166
+ emailVerified: boolean;
167
+ name: string;
168
+ image?: string | null | undefined;
169
+ };
170
+ };
171
+ }>)[];
172
+ }, {
173
+ url: string;
174
+ redirect: boolean;
175
+ }>;
176
+ state: better_auth.StrictEndpoint<"/customer/state", {
177
+ method: "GET";
178
+ use: ((inputContext: better_auth.MiddlewareInputContext<better_auth.MiddlewareOptions>) => Promise<{
179
+ session: {
180
+ session: Record<string, any> & {
181
+ id: string;
182
+ createdAt: Date;
183
+ updatedAt: Date;
184
+ userId: string;
185
+ expiresAt: Date;
186
+ token: string;
187
+ ipAddress?: string | null | undefined;
188
+ userAgent?: string | null | undefined;
189
+ };
190
+ user: Record<string, any> & {
191
+ id: string;
192
+ createdAt: Date;
193
+ updatedAt: Date;
194
+ email: string;
195
+ emailVerified: boolean;
196
+ name: string;
197
+ image?: string | null | undefined;
198
+ };
199
+ };
200
+ }>)[];
201
+ }, _spaire_sdk_models_components_customerstate_js.CustomerState>;
202
+ benefits: better_auth.StrictEndpoint<"/customer/benefits/list", {
203
+ method: "GET";
204
+ query: z.ZodOptional<z.ZodObject<{
205
+ page: z.ZodOptional<z.ZodNumber>;
206
+ limit: z.ZodOptional<z.ZodNumber>;
207
+ }, "strip", z.ZodTypeAny, {
208
+ page?: number | undefined;
209
+ limit?: number | undefined;
210
+ }, {
211
+ page?: number | undefined;
212
+ limit?: number | undefined;
213
+ }>>;
214
+ use: ((inputContext: better_auth.MiddlewareInputContext<better_auth.MiddlewareOptions>) => Promise<{
215
+ session: {
216
+ session: Record<string, any> & {
217
+ id: string;
218
+ createdAt: Date;
219
+ updatedAt: Date;
220
+ userId: string;
221
+ expiresAt: Date;
222
+ token: string;
223
+ ipAddress?: string | null | undefined;
224
+ userAgent?: string | null | undefined;
225
+ };
226
+ user: Record<string, any> & {
227
+ id: string;
228
+ createdAt: Date;
229
+ updatedAt: Date;
230
+ email: string;
231
+ emailVerified: boolean;
232
+ name: string;
233
+ image?: string | null | undefined;
234
+ };
235
+ };
236
+ }>)[];
237
+ }, _spaire_sdk_types_operations_js.PageIterator<_spaire_sdk_models_operations_customerportalbenefitgrantslist_js.CustomerPortalBenefitGrantsListResponse, {
238
+ page: number;
239
+ }>>;
240
+ subscriptions: better_auth.StrictEndpoint<"/customer/subscriptions/list", {
241
+ method: "GET";
242
+ query: z.ZodOptional<z.ZodObject<{
243
+ referenceId: z.ZodOptional<z.ZodString>;
244
+ page: z.ZodOptional<z.ZodNumber>;
245
+ limit: z.ZodOptional<z.ZodNumber>;
246
+ active: z.ZodOptional<z.ZodBoolean>;
247
+ }, "strip", z.ZodTypeAny, {
248
+ referenceId?: string | undefined;
249
+ page?: number | undefined;
250
+ limit?: number | undefined;
251
+ active?: boolean | undefined;
252
+ }, {
253
+ referenceId?: string | undefined;
254
+ page?: number | undefined;
255
+ limit?: number | undefined;
256
+ active?: boolean | undefined;
257
+ }>>;
258
+ use: ((inputContext: better_auth.MiddlewareInputContext<better_auth.MiddlewareOptions>) => Promise<{
259
+ session: {
260
+ session: Record<string, any> & {
261
+ id: string;
262
+ createdAt: Date;
263
+ updatedAt: Date;
264
+ userId: string;
265
+ expiresAt: Date;
266
+ token: string;
267
+ ipAddress?: string | null | undefined;
268
+ userAgent?: string | null | undefined;
269
+ };
270
+ user: Record<string, any> & {
271
+ id: string;
272
+ createdAt: Date;
273
+ updatedAt: Date;
274
+ email: string;
275
+ emailVerified: boolean;
276
+ name: string;
277
+ image?: string | null | undefined;
278
+ };
279
+ };
280
+ }>)[];
281
+ }, _spaire_sdk_types_operations_js.PageIterator<_spaire_sdk_models_operations_subscriptionslist_js.SubscriptionsListResponse, {
282
+ page: number;
283
+ }> | _spaire_sdk_types_operations_js.PageIterator<_spaire_sdk_models_operations_customerportalsubscriptionslist_js.CustomerPortalSubscriptionsListResponse, {
284
+ page: number;
285
+ }>>;
286
+ orders: better_auth.StrictEndpoint<"/customer/orders/list", {
287
+ method: "GET";
288
+ query: z.ZodOptional<z.ZodObject<{
289
+ page: z.ZodOptional<z.ZodNumber>;
290
+ limit: z.ZodOptional<z.ZodNumber>;
291
+ productBillingType: z.ZodOptional<z.ZodEnum<["recurring", "one_time"]>>;
292
+ }, "strip", z.ZodTypeAny, {
293
+ page?: number | undefined;
294
+ limit?: number | undefined;
295
+ productBillingType?: "recurring" | "one_time" | undefined;
296
+ }, {
297
+ page?: number | undefined;
298
+ limit?: number | undefined;
299
+ productBillingType?: "recurring" | "one_time" | undefined;
300
+ }>>;
301
+ use: ((inputContext: better_auth.MiddlewareInputContext<better_auth.MiddlewareOptions>) => Promise<{
302
+ session: {
303
+ session: Record<string, any> & {
304
+ id: string;
305
+ createdAt: Date;
306
+ updatedAt: Date;
307
+ userId: string;
308
+ expiresAt: Date;
309
+ token: string;
310
+ ipAddress?: string | null | undefined;
311
+ userAgent?: string | null | undefined;
312
+ };
313
+ user: Record<string, any> & {
314
+ id: string;
315
+ createdAt: Date;
316
+ updatedAt: Date;
317
+ email: string;
318
+ emailVerified: boolean;
319
+ name: string;
320
+ image?: string | null | undefined;
321
+ };
322
+ };
323
+ }>)[];
324
+ }, _spaire_sdk_types_operations_js.PageIterator<_spaire_sdk_models_operations_customerportalorderslist_js.CustomerPortalOrdersListResponse, {
325
+ page: number;
326
+ }>>;
327
+ };
328
+
329
+ interface UsageOptions {
330
+ /**
331
+ * Products to use for topping up credits
332
+ */
333
+ creditProducts?: Product[] | (() => Promise<Product[]>);
334
+ }
335
+ declare const usage: (_usageOptions?: UsageOptions) => (spaire: Spaire) => {
336
+ meters: better_auth.StrictEndpoint<"/usage/meters/list", {
337
+ method: "GET";
338
+ use: ((inputContext: better_auth.MiddlewareInputContext<better_auth.MiddlewareOptions>) => Promise<{
339
+ session: {
340
+ session: Record<string, any> & {
341
+ id: string;
342
+ createdAt: Date;
343
+ updatedAt: Date;
344
+ userId: string;
345
+ expiresAt: Date;
346
+ token: string;
347
+ ipAddress?: string | null | undefined;
348
+ userAgent?: string | null | undefined;
349
+ };
350
+ user: Record<string, any> & {
351
+ id: string;
352
+ createdAt: Date;
353
+ updatedAt: Date;
354
+ email: string;
355
+ emailVerified: boolean;
356
+ name: string;
357
+ image?: string | null | undefined;
358
+ };
359
+ };
360
+ }>)[];
361
+ query: z.ZodObject<{
362
+ page: z.ZodOptional<z.ZodNumber>;
363
+ limit: z.ZodOptional<z.ZodNumber>;
364
+ }, "strip", z.ZodTypeAny, {
365
+ page?: number | undefined;
366
+ limit?: number | undefined;
367
+ }, {
368
+ page?: number | undefined;
369
+ limit?: number | undefined;
370
+ }>;
371
+ }, _spaire_sdk_types_operations_js.PageIterator<_spaire_sdk_models_operations_customerportalcustomermeterslist_js.CustomerPortalCustomerMetersListResponse, {
372
+ page: number;
373
+ }>>;
374
+ ingestion: better_auth.StrictEndpoint<"/usage/ingest", {
375
+ method: "POST";
376
+ body: z.ZodObject<{
377
+ event: z.ZodString;
378
+ metadata: z.ZodRecord<z.ZodString, z.ZodUnion<[z.ZodString, z.ZodNumber, z.ZodBoolean]>>;
379
+ }, "strip", z.ZodTypeAny, {
380
+ metadata: Record<string, string | number | boolean>;
381
+ event: string;
382
+ }, {
383
+ metadata: Record<string, string | number | boolean>;
384
+ event: string;
385
+ }>;
386
+ use: ((inputContext: better_auth.MiddlewareInputContext<better_auth.MiddlewareOptions>) => Promise<{
387
+ session: {
388
+ session: Record<string, any> & {
389
+ id: string;
390
+ createdAt: Date;
391
+ updatedAt: Date;
392
+ userId: string;
393
+ expiresAt: Date;
394
+ token: string;
395
+ ipAddress?: string | null | undefined;
396
+ userAgent?: string | null | undefined;
397
+ };
398
+ user: Record<string, any> & {
399
+ id: string;
400
+ createdAt: Date;
401
+ updatedAt: Date;
402
+ email: string;
403
+ emailVerified: boolean;
404
+ name: string;
405
+ image?: string | null | undefined;
406
+ };
407
+ };
408
+ }>)[];
409
+ }, _spaire_sdk_models_components_eventsingestresponse_js.EventsIngestResponse>;
410
+ };
411
+
412
+ interface WebhooksOptions {
413
+ /**
414
+ * Webhook Secret
415
+ */
416
+ secret: string;
417
+ /**
418
+ * Generic handler for all webhooks
419
+ */
420
+ onPayload?: (payload: ReturnType<typeof validateEvent>) => Promise<void>;
421
+ /**
422
+ * Webhook for checkout created
423
+ */
424
+ onCheckoutCreated?: (payload: WebhookCheckoutCreatedPayload) => Promise<void>;
425
+ /**
426
+ * Webhook for checkout updated
427
+ */
428
+ onCheckoutUpdated?: (payload: WebhookCheckoutUpdatedPayload) => Promise<void>;
429
+ /**
430
+ * Webhook for order created
431
+ */
432
+ onOrderCreated?: (payload: WebhookOrderCreatedPayload) => Promise<void>;
433
+ /**
434
+ * Webhook for order refunded
435
+ */
436
+ onOrderRefunded?: (payload: WebhookOrderRefundedPayload) => Promise<void>;
437
+ /**
438
+ * Webhook for order paid
439
+ */
440
+ onOrderPaid?: (payload: WebhookOrderPaidPayload) => Promise<void>;
441
+ /**
442
+ * Webhook for order updated
443
+ */
444
+ onOrderUpdated?: (payload: WebhookOrderUpdatedPayload) => Promise<void>;
445
+ /**
446
+ * Webhook for refund created
447
+ */
448
+ onRefundCreated?: (payload: WebhookRefundCreatedPayload) => Promise<void>;
449
+ /**
450
+ * Webhook for refund updated
451
+ */
452
+ onRefundUpdated?: (payload: WebhookRefundUpdatedPayload) => Promise<void>;
453
+ /**
454
+ * Webhook for subscription created
455
+ */
456
+ onSubscriptionCreated?: (payload: WebhookSubscriptionCreatedPayload) => Promise<void>;
457
+ /**
458
+ * Webhook for subscription updated
459
+ */
460
+ onSubscriptionUpdated?: (payload: WebhookSubscriptionUpdatedPayload) => Promise<void>;
461
+ /**
462
+ * Webhook for subscription active
463
+ */
464
+ onSubscriptionActive?: (payload: WebhookSubscriptionActivePayload) => Promise<void>;
465
+ /**
466
+ * Webhook for subscription canceled
467
+ */
468
+ onSubscriptionCanceled?: (payload: WebhookSubscriptionCanceledPayload) => Promise<void>;
469
+ /**
470
+ * Webhook for subscription revoked
471
+ */
472
+ onSubscriptionRevoked?: (payload: WebhookSubscriptionRevokedPayload) => Promise<void>;
473
+ /**
474
+ * Webhook for subscription uncanceled
475
+ */
476
+ onSubscriptionUncanceled?: (payload: WebhookSubscriptionUncanceledPayload) => Promise<void>;
477
+ /**
478
+ * Webhook for product created
479
+ */
480
+ onProductCreated?: (payload: WebhookProductCreatedPayload) => Promise<void>;
481
+ /**
482
+ * Webhook for product updated
483
+ */
484
+ onProductUpdated?: (payload: WebhookProductUpdatedPayload) => Promise<void>;
485
+ /**
486
+ * Webhook for organization updated
487
+ */
488
+ onOrganizationUpdated?: (payload: WebhookOrganizationUpdatedPayload) => Promise<void>;
489
+ /**
490
+ * Webhook for benefit created
491
+ */
492
+ onBenefitCreated?: (payload: WebhookBenefitCreatedPayload) => Promise<void>;
493
+ /**
494
+ * Webhook for benefit updated
495
+ */
496
+ onBenefitUpdated?: (payload: WebhookBenefitUpdatedPayload) => Promise<void>;
497
+ /**
498
+ * Webhook for benefit grant created
499
+ */
500
+ onBenefitGrantCreated?: (payload: WebhookBenefitGrantCreatedPayload) => Promise<void>;
501
+ /**
502
+ * Webhook for benefit grant updated
503
+ */
504
+ onBenefitGrantUpdated?: (payload: WebhookBenefitGrantUpdatedPayload) => Promise<void>;
505
+ /**
506
+ * Webhook for benefit grant revoked
507
+ */
508
+ onBenefitGrantRevoked?: (payload: WebhookBenefitGrantRevokedPayload) => Promise<void>;
509
+ /**
510
+ * Webhook for customer created
511
+ */
512
+ onCustomerCreated?: (payload: WebhookCustomerCreatedPayload) => Promise<void>;
513
+ /**
514
+ * Webhook for customer updated
515
+ */
516
+ onCustomerUpdated?: (payload: WebhookCustomerUpdatedPayload) => Promise<void>;
517
+ /**
518
+ * Webhook for customer deleted
519
+ */
520
+ onCustomerDeleted?: (payload: WebhookCustomerDeletedPayload) => Promise<void>;
521
+ /**
522
+ * Webhook for customer state changed
523
+ */
524
+ onCustomerStateChanged?: (payload: WebhookCustomerStateChangedPayload) => Promise<void>;
525
+ }
526
+ declare const webhooks: (options: WebhooksOptions) => (_spaire: Spaire) => {
527
+ spaireWebhooks: better_auth.StrictEndpoint<"/spaire/webhooks", {
528
+ method: "POST";
529
+ metadata: {
530
+ isAction: false;
531
+ };
532
+ cloneRequest: true;
533
+ }, {
534
+ received: boolean;
535
+ }>;
536
+ };
537
+
538
+ type Product = {
539
+ /**
540
+ * Product Id from Spaire Product
541
+ */
542
+ productId: string;
543
+ /**
544
+ * Easily identifiable slug for the product
545
+ */
546
+ slug: string;
547
+ };
548
+ type SpairePlugin = ReturnType<typeof checkout> | ReturnType<typeof usage> | ReturnType<typeof portal> | ReturnType<typeof webhooks>;
549
+ type SpairePlugins = [SpairePlugin, ...SpairePlugin[]];
550
+ interface SpaireOptions {
551
+ /**
552
+ * Spaire SDK Client
553
+ */
554
+ client: Spaire;
555
+ /**
556
+ * Enable customer creation when a user signs up
557
+ */
558
+ createCustomerOnSignUp?: boolean;
559
+ /**
560
+ * A custom function to get the customer create
561
+ * params
562
+ * @param data - data containing user and session
563
+ * @returns
564
+ */
565
+ getCustomerCreateParams?: (data: {
566
+ user: Partial<User>;
567
+ }, request?: Request) => Promise<{
568
+ metadata?: Record<string, string | number | boolean>;
569
+ }>;
570
+ /**
571
+ * Use Spaire plugins
572
+ */
573
+ use: SpairePlugins;
574
+ }
575
+
576
+ declare const spaire: <O extends SpaireOptions>(options: O) => {
577
+ id: "spaire";
578
+ endpoints: {
579
+ checkout: better_auth.StrictEndpoint<"/checkout", {
580
+ method: "POST";
581
+ body: zod.ZodObject<{
582
+ products: zod.ZodOptional<zod.ZodUnion<[zod.ZodArray<zod.ZodString, "many">, zod.ZodString]>>;
583
+ slug: zod.ZodOptional<zod.ZodString>;
584
+ referenceId: zod.ZodOptional<zod.ZodString>;
585
+ customFieldData: zod.ZodOptional<zod.ZodRecord<zod.ZodString, zod.ZodUnion<[zod.ZodString, zod.ZodNumber, zod.ZodBoolean]>>>;
586
+ metadata: zod.ZodOptional<zod.ZodRecord<zod.ZodString, zod.ZodUnion<[zod.ZodString, zod.ZodNumber, zod.ZodBoolean]>>>;
587
+ allowDiscountCodes: zod.ZodOptional<zod.ZodBoolean>;
588
+ discountId: zod.ZodOptional<zod.ZodString>;
589
+ redirect: zod.ZodOptional<zod.ZodBoolean>;
590
+ embedOrigin: zod.ZodOptional<zod.ZodString>;
591
+ }, "strip", zod.ZodTypeAny, {
592
+ products?: string | string[] | undefined;
593
+ slug?: string | undefined;
594
+ referenceId?: string | undefined;
595
+ customFieldData?: Record<string, string | number | boolean> | undefined;
596
+ metadata?: Record<string, string | number | boolean> | undefined;
597
+ allowDiscountCodes?: boolean | undefined;
598
+ discountId?: string | undefined;
599
+ redirect?: boolean | undefined;
600
+ embedOrigin?: string | undefined;
601
+ }, {
602
+ products?: string | string[] | undefined;
603
+ slug?: string | undefined;
604
+ referenceId?: string | undefined;
605
+ customFieldData?: Record<string, string | number | boolean> | undefined;
606
+ metadata?: Record<string, string | number | boolean> | undefined;
607
+ allowDiscountCodes?: boolean | undefined;
608
+ discountId?: string | undefined;
609
+ redirect?: boolean | undefined;
610
+ embedOrigin?: string | undefined;
611
+ }>;
612
+ }, {
613
+ url: string;
614
+ redirect: boolean;
615
+ }>;
616
+ } | {
617
+ meters: better_auth.StrictEndpoint<"/usage/meters/list", {
618
+ method: "GET";
619
+ use: ((inputContext: better_auth.MiddlewareInputContext<better_auth.MiddlewareOptions>) => Promise<{
620
+ session: {
621
+ session: Record<string, any> & {
622
+ id: string;
623
+ createdAt: Date;
624
+ updatedAt: Date;
625
+ userId: string;
626
+ expiresAt: Date;
627
+ token: string;
628
+ ipAddress?: string | null | undefined;
629
+ userAgent?: string | null | undefined;
630
+ };
631
+ user: Record<string, any> & {
632
+ id: string;
633
+ createdAt: Date;
634
+ updatedAt: Date;
635
+ email: string;
636
+ emailVerified: boolean;
637
+ name: string;
638
+ image?: string | null | undefined;
639
+ };
640
+ };
641
+ }>)[];
642
+ query: zod.ZodObject<{
643
+ page: zod.ZodOptional<zod.ZodNumber>;
644
+ limit: zod.ZodOptional<zod.ZodNumber>;
645
+ }, "strip", zod.ZodTypeAny, {
646
+ page?: number | undefined;
647
+ limit?: number | undefined;
648
+ }, {
649
+ page?: number | undefined;
650
+ limit?: number | undefined;
651
+ }>;
652
+ }, _spaire_sdk_types_operations_js.PageIterator<_spaire_sdk_models_operations_customerportalcustomermeterslist_js.CustomerPortalCustomerMetersListResponse, {
653
+ page: number;
654
+ }>>;
655
+ ingestion: better_auth.StrictEndpoint<"/usage/ingest", {
656
+ method: "POST";
657
+ body: zod.ZodObject<{
658
+ event: zod.ZodString;
659
+ metadata: zod.ZodRecord<zod.ZodString, zod.ZodUnion<[zod.ZodString, zod.ZodNumber, zod.ZodBoolean]>>;
660
+ }, "strip", zod.ZodTypeAny, {
661
+ metadata: Record<string, string | number | boolean>;
662
+ event: string;
663
+ }, {
664
+ metadata: Record<string, string | number | boolean>;
665
+ event: string;
666
+ }>;
667
+ use: ((inputContext: better_auth.MiddlewareInputContext<better_auth.MiddlewareOptions>) => Promise<{
668
+ session: {
669
+ session: Record<string, any> & {
670
+ id: string;
671
+ createdAt: Date;
672
+ updatedAt: Date;
673
+ userId: string;
674
+ expiresAt: Date;
675
+ token: string;
676
+ ipAddress?: string | null | undefined;
677
+ userAgent?: string | null | undefined;
678
+ };
679
+ user: Record<string, any> & {
680
+ id: string;
681
+ createdAt: Date;
682
+ updatedAt: Date;
683
+ email: string;
684
+ emailVerified: boolean;
685
+ name: string;
686
+ image?: string | null | undefined;
687
+ };
688
+ };
689
+ }>)[];
690
+ }, _spaire_sdk_models_components_eventsingestresponse_js.EventsIngestResponse>;
691
+ } | {
692
+ portal: better_auth.StrictEndpoint<"/customer/portal", {
693
+ method: "GET";
694
+ use: ((inputContext: better_auth.MiddlewareInputContext<better_auth.MiddlewareOptions>) => Promise<{
695
+ session: {
696
+ session: Record<string, any> & {
697
+ id: string;
698
+ createdAt: Date;
699
+ updatedAt: Date;
700
+ userId: string;
701
+ expiresAt: Date;
702
+ token: string;
703
+ ipAddress?: string | null | undefined;
704
+ userAgent?: string | null | undefined;
705
+ };
706
+ user: Record<string, any> & {
707
+ id: string;
708
+ createdAt: Date;
709
+ updatedAt: Date;
710
+ email: string;
711
+ emailVerified: boolean;
712
+ name: string;
713
+ image?: string | null | undefined;
714
+ };
715
+ };
716
+ }>)[];
717
+ }, {
718
+ url: string;
719
+ redirect: boolean;
720
+ }>;
721
+ state: better_auth.StrictEndpoint<"/customer/state", {
722
+ method: "GET";
723
+ use: ((inputContext: better_auth.MiddlewareInputContext<better_auth.MiddlewareOptions>) => Promise<{
724
+ session: {
725
+ session: Record<string, any> & {
726
+ id: string;
727
+ createdAt: Date;
728
+ updatedAt: Date;
729
+ userId: string;
730
+ expiresAt: Date;
731
+ token: string;
732
+ ipAddress?: string | null | undefined;
733
+ userAgent?: string | null | undefined;
734
+ };
735
+ user: Record<string, any> & {
736
+ id: string;
737
+ createdAt: Date;
738
+ updatedAt: Date;
739
+ email: string;
740
+ emailVerified: boolean;
741
+ name: string;
742
+ image?: string | null | undefined;
743
+ };
744
+ };
745
+ }>)[];
746
+ }, _spaire_sdk_models_components_customerstate_js.CustomerState>;
747
+ benefits: better_auth.StrictEndpoint<"/customer/benefits/list", {
748
+ method: "GET";
749
+ query: zod.ZodOptional<zod.ZodObject<{
750
+ page: zod.ZodOptional<zod.ZodNumber>;
751
+ limit: zod.ZodOptional<zod.ZodNumber>;
752
+ }, "strip", zod.ZodTypeAny, {
753
+ page?: number | undefined;
754
+ limit?: number | undefined;
755
+ }, {
756
+ page?: number | undefined;
757
+ limit?: number | undefined;
758
+ }>>;
759
+ use: ((inputContext: better_auth.MiddlewareInputContext<better_auth.MiddlewareOptions>) => Promise<{
760
+ session: {
761
+ session: Record<string, any> & {
762
+ id: string;
763
+ createdAt: Date;
764
+ updatedAt: Date;
765
+ userId: string;
766
+ expiresAt: Date;
767
+ token: string;
768
+ ipAddress?: string | null | undefined;
769
+ userAgent?: string | null | undefined;
770
+ };
771
+ user: Record<string, any> & {
772
+ id: string;
773
+ createdAt: Date;
774
+ updatedAt: Date;
775
+ email: string;
776
+ emailVerified: boolean;
777
+ name: string;
778
+ image?: string | null | undefined;
779
+ };
780
+ };
781
+ }>)[];
782
+ }, _spaire_sdk_types_operations_js.PageIterator<_spaire_sdk_models_operations_customerportalbenefitgrantslist_js.CustomerPortalBenefitGrantsListResponse, {
783
+ page: number;
784
+ }>>;
785
+ subscriptions: better_auth.StrictEndpoint<"/customer/subscriptions/list", {
786
+ method: "GET";
787
+ query: zod.ZodOptional<zod.ZodObject<{
788
+ referenceId: zod.ZodOptional<zod.ZodString>;
789
+ page: zod.ZodOptional<zod.ZodNumber>;
790
+ limit: zod.ZodOptional<zod.ZodNumber>;
791
+ active: zod.ZodOptional<zod.ZodBoolean>;
792
+ }, "strip", zod.ZodTypeAny, {
793
+ referenceId?: string | undefined;
794
+ page?: number | undefined;
795
+ limit?: number | undefined;
796
+ active?: boolean | undefined;
797
+ }, {
798
+ referenceId?: string | undefined;
799
+ page?: number | undefined;
800
+ limit?: number | undefined;
801
+ active?: boolean | undefined;
802
+ }>>;
803
+ use: ((inputContext: better_auth.MiddlewareInputContext<better_auth.MiddlewareOptions>) => Promise<{
804
+ session: {
805
+ session: Record<string, any> & {
806
+ id: string;
807
+ createdAt: Date;
808
+ updatedAt: Date;
809
+ userId: string;
810
+ expiresAt: Date;
811
+ token: string;
812
+ ipAddress?: string | null | undefined;
813
+ userAgent?: string | null | undefined;
814
+ };
815
+ user: Record<string, any> & {
816
+ id: string;
817
+ createdAt: Date;
818
+ updatedAt: Date;
819
+ email: string;
820
+ emailVerified: boolean;
821
+ name: string;
822
+ image?: string | null | undefined;
823
+ };
824
+ };
825
+ }>)[];
826
+ }, _spaire_sdk_types_operations_js.PageIterator<_spaire_sdk_models_operations_subscriptionslist_js.SubscriptionsListResponse, {
827
+ page: number;
828
+ }> | _spaire_sdk_types_operations_js.PageIterator<_spaire_sdk_models_operations_customerportalsubscriptionslist_js.CustomerPortalSubscriptionsListResponse, {
829
+ page: number;
830
+ }>>;
831
+ orders: better_auth.StrictEndpoint<"/customer/orders/list", {
832
+ method: "GET";
833
+ query: zod.ZodOptional<zod.ZodObject<{
834
+ page: zod.ZodOptional<zod.ZodNumber>;
835
+ limit: zod.ZodOptional<zod.ZodNumber>;
836
+ productBillingType: zod.ZodOptional<zod.ZodEnum<["recurring", "one_time"]>>;
837
+ }, "strip", zod.ZodTypeAny, {
838
+ page?: number | undefined;
839
+ limit?: number | undefined;
840
+ productBillingType?: "recurring" | "one_time" | undefined;
841
+ }, {
842
+ page?: number | undefined;
843
+ limit?: number | undefined;
844
+ productBillingType?: "recurring" | "one_time" | undefined;
845
+ }>>;
846
+ use: ((inputContext: better_auth.MiddlewareInputContext<better_auth.MiddlewareOptions>) => Promise<{
847
+ session: {
848
+ session: Record<string, any> & {
849
+ id: string;
850
+ createdAt: Date;
851
+ updatedAt: Date;
852
+ userId: string;
853
+ expiresAt: Date;
854
+ token: string;
855
+ ipAddress?: string | null | undefined;
856
+ userAgent?: string | null | undefined;
857
+ };
858
+ user: Record<string, any> & {
859
+ id: string;
860
+ createdAt: Date;
861
+ updatedAt: Date;
862
+ email: string;
863
+ emailVerified: boolean;
864
+ name: string;
865
+ image?: string | null | undefined;
866
+ };
867
+ };
868
+ }>)[];
869
+ }, _spaire_sdk_types_operations_js.PageIterator<_spaire_sdk_models_operations_customerportalorderslist_js.CustomerPortalOrdersListResponse, {
870
+ page: number;
871
+ }>>;
872
+ } | {
873
+ spaireWebhooks: better_auth.StrictEndpoint<"/spaire/webhooks", {
874
+ method: "POST";
875
+ metadata: {
876
+ isAction: false;
877
+ };
878
+ cloneRequest: true;
879
+ }, {
880
+ received: boolean;
881
+ }>;
882
+ };
883
+ init(): {
884
+ options: {
885
+ databaseHooks: {
886
+ user: {
887
+ create: {
888
+ before: (user: Partial<better_auth.User>, context: better_auth.GenericEndpointContext | null) => Promise<void>;
889
+ after: (user: better_auth.User, context: better_auth.GenericEndpointContext | null) => Promise<void>;
890
+ };
891
+ update: {
892
+ after: (user: better_auth.User, context: better_auth.GenericEndpointContext | null) => Promise<void>;
893
+ };
894
+ delete: {
895
+ after: (user: better_auth.User, context: better_auth.GenericEndpointContext | null) => Promise<void>;
896
+ };
897
+ };
898
+ };
899
+ };
900
+ };
901
+ };
902
+
903
+ declare const spaireClient: () => {
904
+ id: "spaire-client";
905
+ $InferServerPlugin: ReturnType<typeof spaire>;
906
+ getActions: ($fetch: better_auth_client.BetterFetch) => {
907
+ checkoutEmbed: (data: Omit<CheckoutParams, "redirect" | "embedOrigin">, fetchOptions?: BetterFetchOption) => Promise<SpaireEmbedCheckout>;
908
+ };
909
+ };
910
+
911
+ export { type CheckoutOptions, CheckoutParams, type PortalConfig, type UsageOptions, type WebhooksOptions, checkout, portal, spaire, spaireClient, usage, webhooks };