@buildbase/sdk 0.0.43 → 0.0.44

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/README.md CHANGED
@@ -47,7 +47,7 @@ Also works server-side (Next.js API routes, Express, Hono) — see [Server-Side
47
47
  - **📬 Notifications** - Email + push notification system with per-event channel control, workspace preferences, and server-side `notification.send()` API
48
48
  - **💺 Seat-Based Pricing** - Per-seat billing with included seats, billable seat tracking, and seat limit enforcement
49
49
  - **💱 Multi-Currency** - Per-currency pricing variants with workspace billing currency lock
50
- - **🤝 Affiliate Tracking** - Pass referral data to Stripe checkout via `stripeOptions` (Rewardful, Endorsely, FirstPromoter, etc.)
50
+ - **🤝 Affiliate Tracking** - Pass referral data to Stripe checkout via `getCheckoutStripeParams` prop (Rewardful, Endorsely, FirstPromoter, etc.)
51
51
  - **📊 Quota Usage Tracking** - Record and monitor metered usage (API calls, storage, etc.) with real-time status
52
52
  - **📈 Usage Dashboard** - Built-in workspace settings page showing quota consumption, overage billing breakdowns, and billing period info
53
53
  - **👤 User Management** - User attributes and feature flags management
@@ -306,24 +306,35 @@ import { saveAuthIntent, consumeAuthIntent, clearAuthIntent } from '@buildbase/s
306
306
 
307
307
  ### Affiliate / Referral Tracking
308
308
 
309
- Pass affiliate data to Stripe checkout sessions via `stripeOptions` on the checkout request:
309
+ Pass affiliate/referral data to Stripe checkout sessions via the `getCheckoutStripeParams` prop on `SaaSOSProvider`. This async callback is called before every checkout session is created, so you can fetch referral IDs, read cookies, or call any async API:
310
310
 
311
311
  ```tsx
312
- createCheckoutSession({
313
- planVersionId: '...',
314
- stripeOptions: {
312
+ <SaaSOSProvider
313
+ serverUrl="https://your-api-server.com"
314
+ version={ApiVersion.V1}
315
+ orgId="your-org-id"
316
+ auth={authConfig}
317
+ getCheckoutStripeParams={async (request) => {
315
318
  // Rewardful, FirstPromoter, PartnerStack — read client_reference_id
316
- clientReferenceId: Rewardful.referral,
319
+ const referralId = await getRewardfulReferralId();
317
320
 
318
- // Endorsely — reads subscription metadata
319
- subscriptionMetadata: { endorsely_referral: window.endorsely_referral },
321
+ return {
322
+ clientReferenceId: referralId,
320
323
 
321
- // Custom tracking on the checkout session
322
- metadata: { campaign: 'summer-sale' },
323
- },
324
- });
324
+ // Endorsely — reads subscription metadata
325
+ subscriptionMetadata: { endorsely_referral: window.endorsely_referral },
326
+
327
+ // Custom tracking on the checkout session
328
+ metadata: { campaign: 'summer-sale' },
329
+ };
330
+ }}
331
+ >
332
+ <App />
333
+ </SaaSOSProvider>
325
334
  ```
326
335
 
336
+ The returned object is merged into the Stripe checkout session. You can return any combination of the fields below, or `undefined` to proceed without extra options:
337
+
327
338
  | Field | Stripe mapping | Use case |
328
339
  | ---------------------- | ----------------------------- | -------------------------------------- |
329
340
  | `clientReferenceId` | `client_reference_id` | Rewardful, FirstPromoter, etc. |
@@ -1845,13 +1856,16 @@ All TypeScript types are exported for type safety. See the [TypeScript definitio
1845
1856
 
1846
1857
  ### SaaSOSProvider Props
1847
1858
 
1848
- | Prop | Type | Required | Description |
1849
- | ----------- | ------------- | -------- | -------------------------------------------------------------------- |
1850
- | `serverUrl` | `string` | ✅ | API server URL (must be valid URL) |
1851
- | `version` | `ApiVersion` | ✅ | API version (currently only `'v1'`) |
1852
- | `orgId` | `string` | ✅ | Organization ID (must be valid MongoDB ObjectId - 24 hex characters) |
1853
- | `auth` | `IAuthConfig` | ❌ | Authentication configuration |
1854
- | `children` | `ReactNode` | ✅ | React children |
1859
+ | Prop | Type | Required | Description |
1860
+ | -------------------------- | --------------------------- | -------- | ------------------------------------------------------------------------------------------------ |
1861
+ | `serverUrl` | `string` | ✅ | API server URL (must be valid URL) |
1862
+ | `version` | `ApiVersion` | ✅ | API version (currently only `'v1'`) |
1863
+ | `orgId` | `string` | ✅ | Organization ID (must be valid MongoDB ObjectId - 24 hex characters) |
1864
+ | `auth` | `IAuthConfig` | ❌ | Authentication configuration |
1865
+ | `locale` | `SDKLocale` | ❌ | SDK UI language (`'en'`, `'es'`, `'fr'`, `'de'`, `'ja'`, `'zh'`, `'hi'`, `'ar'`) |
1866
+ | `defaultPermissions` | `Record<string, string[]>` | ❌ | Default app permissions per role |
1867
+ | `getCheckoutStripeParams` | `GetCheckoutStripeParams` | ❌ | Async callback called before every Stripe checkout to return metadata, referral IDs, etc. |
1868
+ | `children` | `ReactNode` | ✅ | React children |
1855
1869
 
1856
1870
  ### Auth Configuration
1857
1871
 
package/dist/index.d.ts CHANGED
@@ -360,6 +360,17 @@ interface ICheckoutStripeOptions {
360
360
  /** Custom metadata merged into `subscription_data.metadata` on the Stripe session. */
361
361
  subscriptionMetadata?: Record<string, string>;
362
362
  }
363
+ /**
364
+ * Async callback called before every checkout session is created.
365
+ * Use it to return Stripe-level options (metadata, affiliate IDs, etc.)
366
+ * that should be forwarded to the Stripe checkout session.
367
+ *
368
+ * Return an `ICheckoutStripeOptions` object to merge into the request,
369
+ * or `undefined`/`void` to proceed without extra options.
370
+ *
371
+ * @param request - The checkout request about to be sent (read-only).
372
+ */
373
+ type GetCheckoutStripeParams = (request: Readonly<ICheckoutSessionRequest>) => Promise<ICheckoutStripeOptions | void> | ICheckoutStripeOptions | void;
363
374
  /** Request body for POST .../workspaces/:id/subscription/checkout. */
364
375
  interface ICheckoutSessionRequest {
365
376
  planVersionId: string;
@@ -2220,4 +2231,4 @@ interface BuildBaseResult extends ScopedActions {
2220
2231
  declare function BuildBase(config: BuildBaseConfig): BuildBaseResult;
2221
2232
 
2222
2233
  export { ApiVersion, AuthApi, AuthStatus, BB_PARAM, BaseApi, BetaForm, BillingIntervals, BuildBase, CURRENCY_DISPLAY, CURRENCY_FLAG, DEFAULT_ROLE_PERMISSIONS, DunningState, EventEmitter, InvoiceStatuses, PLAN_CURRENCY_CODES, PLAN_CURRENCY_OPTIONS, PUSH_SERVICE_WORKER_SCRIPT, Permission, PushApi, SDKEvent, SettingsApi, SubscriptionItemType, SubscriptionStatus, UserApi, WorkspaceApi, calculateBillableSeats, calculateSeatOverageCents, calculateTotalSubscriptionCents, cleanBBParams, clearAuthIntent, consumeAuthIntent, createBBUrl, createCheckoutRedirectUrls, BuildBase as default, eventEmitter, formatCents, formatOverageRate, formatOverageRateWithLabel, formatQuotaIncludedOverage, formatQuotaWithPrice, getAvailableCurrenciesFromPlans, getBasePriceCents, getBillingIntervalAndCurrencyFromPriceId, getCurrencyFlag, getCurrencySymbol, getDisplayCurrency, getPerSeatPriceCents, getPricingVariant, getQuotaDisplayValue, getQuotaDisplayWithVariant, getQuotaOverageCents, getQuotaUnitLabelFromName, getSeatPricing, getStripePriceIdForInterval, hasPermission, invalidateQuotaUsage, invalidateSubscription, parseWebhookEvent, readBBParams, resolveMaxUsers, resolvePermissions, safeRedirect, saveAuthIntent, validateInvite, validateRedirectUrl, verifyWebhookSignature };
2223
- export type { BetaFormData, BetaFormResponse, BillingInterval, BuildBaseConfig, BuildBaseResult, BuildBaseSession, CheckoutResult, EventData, EventType, FeatureActions, FormatQuotaWithPriceOptions, IAllQuotaUsageResponse, IBaseApiConfig, IBasePricing, IBetaConfig, ICheckoutSessionRequest, ICheckoutSessionResponse, ICheckoutStripeOptions, IEventCallbacks, IInvoice, IInvoiceListResponse, IInvoiceResponse, IOsConfig, IOsState, IPlan, IPlanGroup, IPlanGroupInfo, IPlanGroupLatestVersion, IPlanGroupResponse, IPlanGroupVersion, IPlanGroupVersionWithPlans, IPlanGroupVersionsResponse, IPlanVersion, IPlanVersionSummary, IPlanVersionWithPlan, IPricingVariant, IPublicPlanItem, IPublicPlanItemCategory, IPublicPlanVersion, IPublicPlansResponse, IQuotaByInterval, IQuotaIntervalValue, IQuotaOveragePriceIdsByInterval, IQuotaOveragesByInterval, IQuotaUsageStatus, IQuotaUsageStatusResponse, IRecordUsageRequest, IRecordUsageResponse, IStripePricesByInterval, ISubscription, ISubscriptionItem, ISubscriptionResponse, ISubscriptionUpdateRequest, ISubscriptionUpdateResponse, IUsageLogEntry, IUsageLogsQuery, IUsageLogsResponse, InviteBlockReason, InviteValidation, InvoiceActions, InvoiceStatus, MaxUsersConfig, NotificationData, NotificationEvent, NotificationResult, OnWorkspaceChangeParams, PermissionActions, PermissionContext, PermissionKey, PlanActions, PlanVersionWithPricingVariants, QuotaDisplayValue, QuotaDisplayWithOverage, RolePermissionMap, ScopedActions, SettingsActions, SubscriptionActions, SubscriptionStatusType, UsageActions, UserActions, UserCreatedEventData, UserUpdatedEventData, WorkspaceActions, WorkspaceChangedEventData, WorkspaceCreatedEventData, WorkspaceDeletedEventData, WorkspaceUpdatedEventData, WorkspaceUserAddedEventData, WorkspaceUserRemovedEventData, WorkspaceUserRoleChangedEventData };
2234
+ export type { BetaFormData, BetaFormResponse, BillingInterval, BuildBaseConfig, BuildBaseResult, BuildBaseSession, CheckoutResult, EventData, EventType, FeatureActions, FormatQuotaWithPriceOptions, GetCheckoutStripeParams, IAllQuotaUsageResponse, IBaseApiConfig, IBasePricing, IBetaConfig, ICheckoutSessionRequest, ICheckoutSessionResponse, ICheckoutStripeOptions, IEventCallbacks, IInvoice, IInvoiceListResponse, IInvoiceResponse, IOsConfig, IOsState, IPlan, IPlanGroup, IPlanGroupInfo, IPlanGroupLatestVersion, IPlanGroupResponse, IPlanGroupVersion, IPlanGroupVersionWithPlans, IPlanGroupVersionsResponse, IPlanVersion, IPlanVersionSummary, IPlanVersionWithPlan, IPricingVariant, IPublicPlanItem, IPublicPlanItemCategory, IPublicPlanVersion, IPublicPlansResponse, IQuotaByInterval, IQuotaIntervalValue, IQuotaOveragePriceIdsByInterval, IQuotaOveragesByInterval, IQuotaUsageStatus, IQuotaUsageStatusResponse, IRecordUsageRequest, IRecordUsageResponse, IStripePricesByInterval, ISubscription, ISubscriptionItem, ISubscriptionResponse, ISubscriptionUpdateRequest, ISubscriptionUpdateResponse, IUsageLogEntry, IUsageLogsQuery, IUsageLogsResponse, InviteBlockReason, InviteValidation, InvoiceActions, InvoiceStatus, MaxUsersConfig, NotificationData, NotificationEvent, NotificationResult, OnWorkspaceChangeParams, PermissionActions, PermissionContext, PermissionKey, PlanActions, PlanVersionWithPricingVariants, QuotaDisplayValue, QuotaDisplayWithOverage, RolePermissionMap, ScopedActions, SettingsActions, SubscriptionActions, SubscriptionStatusType, UsageActions, UserActions, UserCreatedEventData, UserUpdatedEventData, WorkspaceActions, WorkspaceChangedEventData, WorkspaceCreatedEventData, WorkspaceDeletedEventData, WorkspaceUpdatedEventData, WorkspaceUserAddedEventData, WorkspaceUserRemovedEventData, WorkspaceUserRoleChangedEventData };
@@ -364,6 +364,17 @@ interface ICheckoutStripeOptions {
364
364
  /** Custom metadata merged into `subscription_data.metadata` on the Stripe session. */
365
365
  subscriptionMetadata?: Record<string, string>;
366
366
  }
367
+ /**
368
+ * Async callback called before every checkout session is created.
369
+ * Use it to return Stripe-level options (metadata, affiliate IDs, etc.)
370
+ * that should be forwarded to the Stripe checkout session.
371
+ *
372
+ * Return an `ICheckoutStripeOptions` object to merge into the request,
373
+ * or `undefined`/`void` to proceed without extra options.
374
+ *
375
+ * @param request - The checkout request about to be sent (read-only).
376
+ */
377
+ type GetCheckoutStripeParams = (request: Readonly<ICheckoutSessionRequest>) => Promise<ICheckoutStripeOptions | void> | ICheckoutStripeOptions | void;
367
378
  /** Request body for POST .../workspaces/:id/subscription/checkout. */
368
379
  interface ICheckoutSessionRequest {
369
380
  planVersionId: string;
@@ -2453,6 +2464,23 @@ interface SaaSOSProviderProps extends IOsState {
2453
2464
  * ```
2454
2465
  */
2455
2466
  defaultPermissions?: Record<string, string[]>;
2467
+ /**
2468
+ * Async callback called before every Stripe checkout session is created.
2469
+ * Use it to return Stripe-level params (metadata, client reference ID, subscription metadata)
2470
+ * that will be forwarded to the Stripe checkout session.
2471
+ *
2472
+ * @example
2473
+ * ```tsx
2474
+ * <SaaSOSProvider
2475
+ * getCheckoutStripeParams={async (request) => ({
2476
+ * clientReferenceId: await getRewardfulReferralId(),
2477
+ * metadata: { campaign: 'spring-sale' },
2478
+ * subscriptionMetadata: { affiliateId: 'aff-123' },
2479
+ * })}
2480
+ * >
2481
+ * ```
2482
+ */
2483
+ getCheckoutStripeParams?: GetCheckoutStripeParams;
2456
2484
  }
2457
2485
  declare const SaaSOSProvider: react__default.FC<SaaSOSProviderProps>;
2458
2486
 
@@ -4341,4 +4369,4 @@ declare const PushNotificationProvider: react__default.FC<PushNotificationProvid
4341
4369
  declare function usePushNotifications(): PushNotificationContextValue;
4342
4370
 
4343
4371
  export { ApiVersion, AuthApi, AuthStatus, BB_PARAM, BaseApi, BetaForm, BillingIntervals, CURRENCY_DISPLAY, CURRENCY_FLAG, DEFAULT_ROLE_PERMISSIONS, DunningState, EventEmitter, InvoiceStatuses, PLAN_CURRENCY_CODES, PLAN_CURRENCY_OPTIONS, PUSH_SERVICE_WORKER_SCRIPT, Permission, PricingPage, PushApi, PushNotificationProvider, QuotaUsageContextProvider, SDKEvent, SETTINGS_SCREENS, SUPPORTED_LOCALES, SaaSOSProvider, SettingsApi, SettingsScreen, SubscriptionContextProvider, SubscriptionItemType, SubscriptionStatus, UserApi, WhenAuthenticated, WhenNoSubscription, WhenNotTrialing, WhenPermission, WhenQuotaAvailable, WhenQuotaExhausted, WhenQuotaOverage, WhenQuotaThreshold, WhenRoles, WhenSubscription, WhenSubscriptionToPlans, WhenTrialEnding, WhenTrialing, WhenUnauthenticated, WhenUserFeatureDisabled, WhenUserFeatureEnabled, WhenWorkspaceFeatureDisabled, WhenWorkspaceFeatureEnabled, WhenWorkspaceRoles, WorkspaceApi, WorkspaceSwitcher, calculateBillableSeats, calculateSeatOverageCents, calculateTotalSubscriptionCents, cleanBBParams, clearAuthIntent, consumeAuthIntent, createBBUrl, createCheckoutRedirectUrls, eventEmitter, formatCents, formatOverageRate, formatOverageRateWithLabel, formatQuotaIncludedOverage, formatQuotaWithPrice, getAvailableCurrenciesFromPlans, getBasePriceCents, getBillingIntervalAndCurrencyFromPriceId, getCurrencyFlag, getCurrencySymbol, getDisplayCurrency, getPerSeatPriceCents, getPricingVariant, getQuotaDisplayValue, getQuotaDisplayWithVariant, getQuotaOverageCents, getQuotaUnitLabelFromName, getSeatPricing, getStripePriceIdForInterval, hasPermission, invalidateQuotaUsage, invalidateSubscription, readBBParams, resolveMaxUsers, resolvePermissions, safeRedirect, saveAuthIntent, useAllQuotaUsage, useBillingPortal, useCancelSubscription, useCreateCheckoutSession, useInvoice, useInvoices, usePermissions, usePlanGroup, usePlanGroupVersions, usePublicPlanGroupVersion, usePublicPlans, usePushNotifications, useQuotaUsageContext, useQuotaUsageStatus, useRecordUsage, useResumeSubscription, useSaaSAuth, useSaaSOs, useSaaSSettings, useSaaSWorkspaces, useSeatStatus, useSubscription, useSubscriptionContext, useSubscriptionManagement, useTranslation, useTrialStatus, useUpdateSubscription, useUsageLogs, useUserAttributes, useUserFeatures, validateInvite, validateRedirectUrl };
4344
- export type { BetaFormData, BetaFormResponse, BillingInterval, CheckoutResult, EventData, EventType, FormatQuotaWithPriceOptions, IAllQuotaUsageResponse, IBaseApiConfig, IBasePricing, IBetaConfig, ICheckoutSessionRequest, ICheckoutSessionResponse, ICheckoutStripeOptions, IEventCallbacks, IInvoice, IInvoiceListResponse, IInvoiceResponse, IOsConfig, IOsState, IPlan, IPlanGroup, IPlanGroupInfo, IPlanGroupLatestVersion, IPlanGroupResponse, IPlanGroupVersion, IPlanGroupVersionWithPlans, IPlanGroupVersionsResponse, IPlanVersion, IPlanVersionSummary, IPlanVersionWithPlan, IPricingVariant, IPublicPlanItem, IPublicPlanItemCategory, IPublicPlanVersion, IPublicPlansResponse, IQuotaByInterval, IQuotaIntervalValue, IQuotaOveragePriceIdsByInterval, IQuotaOveragesByInterval, IQuotaUsageStatus, IQuotaUsageStatusResponse, IRecordUsageRequest, IRecordUsageResponse, IStripePricesByInterval, ISubscription, ISubscriptionItem, ISubscriptionResponse, ISubscriptionUpdateRequest, ISubscriptionUpdateResponse, IUsageLogEntry, IUsageLogsQuery, IUsageLogsResponse, InviteBlockReason, InviteValidation, InvoiceStatus, MaxUsersConfig, NotificationData, NotificationEvent, NotificationResult, OnWorkspaceChangeParams, PermissionContext, PermissionKey, PlanVersionWithPricingVariants, PricingPageDetails, PricingPageProps, QuotaDisplayValue, QuotaDisplayWithOverage, QuotaUsageContextValue, RolePermissionMap, SDKLocale, SDKMessages, SaaSOSProviderProps, SeatStatus, SubscriptionContextValue, SubscriptionStatusType, TrialStatus, UserCreatedEventData, UserUpdatedEventData, WorkspaceChangedEventData, WorkspaceCreatedEventData, WorkspaceDeletedEventData, WorkspaceSettingsSection, WorkspaceUpdatedEventData, WorkspaceUserAddedEventData, WorkspaceUserRemovedEventData, WorkspaceUserRoleChangedEventData };
4372
+ export type { BetaFormData, BetaFormResponse, BillingInterval, CheckoutResult, EventData, EventType, FormatQuotaWithPriceOptions, GetCheckoutStripeParams, IAllQuotaUsageResponse, IBaseApiConfig, IBasePricing, IBetaConfig, ICheckoutSessionRequest, ICheckoutSessionResponse, ICheckoutStripeOptions, IEventCallbacks, IInvoice, IInvoiceListResponse, IInvoiceResponse, IOsConfig, IOsState, IPlan, IPlanGroup, IPlanGroupInfo, IPlanGroupLatestVersion, IPlanGroupResponse, IPlanGroupVersion, IPlanGroupVersionWithPlans, IPlanGroupVersionsResponse, IPlanVersion, IPlanVersionSummary, IPlanVersionWithPlan, IPricingVariant, IPublicPlanItem, IPublicPlanItemCategory, IPublicPlanVersion, IPublicPlansResponse, IQuotaByInterval, IQuotaIntervalValue, IQuotaOveragePriceIdsByInterval, IQuotaOveragesByInterval, IQuotaUsageStatus, IQuotaUsageStatusResponse, IRecordUsageRequest, IRecordUsageResponse, IStripePricesByInterval, ISubscription, ISubscriptionItem, ISubscriptionResponse, ISubscriptionUpdateRequest, ISubscriptionUpdateResponse, IUsageLogEntry, IUsageLogsQuery, IUsageLogsResponse, InviteBlockReason, InviteValidation, InvoiceStatus, MaxUsersConfig, NotificationData, NotificationEvent, NotificationResult, OnWorkspaceChangeParams, PermissionContext, PermissionKey, PlanVersionWithPricingVariants, PricingPageDetails, PricingPageProps, QuotaDisplayValue, QuotaDisplayWithOverage, QuotaUsageContextValue, RolePermissionMap, SDKLocale, SDKMessages, SaaSOSProviderProps, SeatStatus, SubscriptionContextValue, SubscriptionStatusType, TrialStatus, UserCreatedEventData, UserUpdatedEventData, WorkspaceChangedEventData, WorkspaceCreatedEventData, WorkspaceDeletedEventData, WorkspaceSettingsSection, WorkspaceUpdatedEventData, WorkspaceUserAddedEventData, WorkspaceUserRemovedEventData, WorkspaceUserRoleChangedEventData };