@monetize.software/sdk 3.0.0-alpha.2 → 3.0.0-alpha.4

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/core.d.ts CHANGED
@@ -46,7 +46,9 @@ export declare class ApiGatewayClient {
46
46
 
47
47
  export declare interface ApiGatewayClientOptions {
48
48
  paywallId: string;
49
- apiOrigin?: string;
49
+ /** Origin серверного API SDK — обязательное поле, тот же `custom_domain`, что
50
+ * у BillingClient/AuthClient. См. {@link BillingClientOptions.apiOrigin}. */
51
+ apiOrigin: string;
50
52
  /** AuthClient — Bearer добавляется автоматически. На 401 от gateway клиент
51
53
  * не делает refresh: AuthClient уже сделал lazy-refresh в getAccessToken. */
52
54
  auth?: AuthClient;
@@ -66,7 +68,28 @@ export declare interface ApiGatewayClientOptions {
66
68
  onQuotaExceeded?: (err: QuotaExceededError) => void;
67
69
  }
68
70
 
69
- export declare type AuthChangeListener = (session: AuthSession | null) => void;
71
+ /** Дискриминатор для `onAuthChange`. Позволяет listener'у отличать первый
72
+ * callback (восстановление сессии из storage / синтетический snapshot для
73
+ * свежей подписки) от реальных переходов. Конвенция Supabase, минус события,
74
+ * которых у нас нет (MFA, EMAIL_VERIFIED).
75
+ *
76
+ * - INITIAL_SESSION — единственный гарантированный первый callback на каждую
77
+ * подписку. Дёргается через microtask после resolve hydrated-promise, даже
78
+ * если session=null. Listener'ы по этому event'у НЕ должны делать побочные
79
+ * эффекты типа force-refetch — это просто доставка стартового state'а.
80
+ * - SIGNED_IN — свежий вход: email/OAuth/anon, или появление session в этом
81
+ * инстансе из другого контекста (storage.watch), когда раньше был null.
82
+ * - SIGNED_OUT — signOut, revokeAllSessions, 401 на refresh, удаление session
83
+ * из другого контекста.
84
+ * - TOKEN_REFRESHED — тот же user, обновлённые токены: refresh(), либо
85
+ * storage.watch когда содержимое сменилось но user.id остался.
86
+ * - USER_UPDATED — изменился user.email / user.user_metadata (updatePassword,
87
+ * upgradeAnonymousToEmail) при том же user.id.
88
+ * - PASSWORD_RECOVERY — verifyOtp(type='recovery'). Listener знает, что надо
89
+ * показать «set new password» UI вместо обычного post-login flow'а. */
90
+ declare type AuthChangeEvent = 'INITIAL_SESSION' | 'SIGNED_IN' | 'SIGNED_OUT' | 'TOKEN_REFRESHED' | 'USER_UPDATED' | 'PASSWORD_RECOVERY';
91
+
92
+ export declare type AuthChangeListener = (event: AuthChangeEvent, session: AuthSession | null) => void;
70
93
 
71
94
  export declare class AuthClient {
72
95
  readonly paywallId: string;
@@ -385,8 +408,19 @@ export declare class AuthClient {
385
408
  }): Promise<void>;
386
409
  /**
387
410
  * Подписка на изменения session: signin/signup/refresh/signOut/expired-401.
388
- * Колбек вызывается с текущим snapshot через microtask (если session есть)
389
- * + на каждое реальное изменение. Возвращает unsubscribe.
411
+ *
412
+ * Гарантированный контракт: ПЕРВЫЙ callback каждому subscriber'у — всегда
413
+ * `event = 'INITIAL_SESSION'`, дёргается асинхронно после resolve hydrate'а
414
+ * (даже если session=null — listener получает explicit «нет сессии», а не
415
+ * молчание). Все последующие callback'и — реальные переходы с конкретным
416
+ * event'ом (SIGNED_IN / SIGNED_OUT / TOKEN_REFRESHED / USER_UPDATED /
417
+ * PASSWORD_RECOVERY).
418
+ *
419
+ * Это позволяет listener'у безопасно делать «only on real signin» побочные
420
+ * эффекты (force refetch balances и т.п.) через `event === 'SIGNED_IN'`,
421
+ * не путая их с восстановлением из storage.
422
+ *
423
+ * Возвращает unsubscribe.
390
424
  */
391
425
  onAuthChange(cb: AuthChangeListener): () => void;
392
426
  private isFresh;
@@ -424,7 +458,9 @@ export declare class AuthClient {
424
458
 
425
459
  export declare interface AuthClientOptions {
426
460
  paywallId: string;
427
- apiOrigin?: string;
461
+ /** Origin серверного API SDK — обязательное поле, тот же `custom_domain`, что
462
+ * у BillingClient. См. {@link BillingClientOptions.apiOrigin}. */
463
+ apiOrigin: string;
428
464
  storage?: StorageAdapter;
429
465
  fetch?: typeof fetch;
430
466
  openPopup?: (url: string, name: string) => Window | null;
@@ -789,7 +825,15 @@ export declare class BillingClient {
789
825
 
790
826
  export declare interface BillingClientOptions {
791
827
  paywallId: string;
792
- apiOrigin?: string;
828
+ /**
829
+ * Origin серверного API SDK — обязательное поле. Должно совпадать с
830
+ * `custom_domain`, заданным для пейвола в платформе (модерация привязывает
831
+ * домен к paywall_id). SDK сверяет это значение с `bootstrap.settings.custom_domain`
832
+ * на первом ответе и кидает `invalid_config` при расхождении — защита от
833
+ * опечаток интегратора. Промежуточный `appbox.space` в новом SDK НЕ
834
+ * используется (это только для legacy v2).
835
+ */
836
+ apiOrigin: string;
793
837
  identity?: Identity;
794
838
  storage?: StorageAdapter;
795
839
  capabilities?: string[];
@@ -953,6 +997,19 @@ export declare type LayoutBlock = {
953
997
  desc: string;
954
998
  count: number;
955
999
  }>;
1000
+ } | {
1001
+ /** Money-back guarantee badge под cta_button: иконка + жирный заголовок +
1002
+ * пояснение мелким шрифтом + bottom divider, который визуально стыкуется
1003
+ * с current_session ниже. v2-аналог inline-блока в `PaywallPricing`. */
1004
+ type: 'guarantee_badge';
1005
+ /** Заголовок жирным. По умолчанию "100% Money-Back Guarantee". */
1006
+ title?: string;
1007
+ /** Подзаголовок мелким серым. По умолчанию
1008
+ * "Not satisfied? We'll refund you — no questions asked.". */
1009
+ subtitle?: string;
1010
+ /** Иконка слева от заголовка. По умолчанию `dollar_shield` —
1011
+ * зелёный shield с долларом (legacy-вид). `none` — без иконки. */
1012
+ icon?: 'dollar_shield' | 'none';
956
1013
  };
957
1014
 
958
1015
  /** Локализационные оверрайды для одного языка. Накатываются поверх дефолтного
@@ -1057,6 +1114,14 @@ export declare interface PaywallSettings {
1057
1114
  brand_color?: string | null;
1058
1115
  custom_css?: string | null;
1059
1116
  locale_default?: string | null;
1117
+ /** Origin, на котором живёт бэк пейвола (тот же, что мерчант передаёт в
1118
+ * `BillingClientOptions.apiOrigin` при инициализации SDK). Бэк присылает
1119
+ * его на каждом bootstrap'е, SDK сверяет с init.apiOrigin — расхождение
1120
+ * даёт `invalid_config` (защита от опечатки интегратора). Без схемы:
1121
+ * "pay.your-domain.com" или "https://pay.your-domain.com" — оба валидны.
1122
+ * Для новых пейволов поле всегда заполнено (модерация требует custom_domain);
1123
+ * для legacy v2 может быть null/undefined. */
1124
+ custom_domain?: string | null;
1060
1125
  runtime_mode?: 'client' | 'hybrid' | 'server' | 'client-native' | 'hybrid-native';
1061
1126
  /** true, если эквайринг пейвола в test-mode — SDK рисует TEST MODE бейдж. */
1062
1127
  is_test_mode?: boolean;