@monetize.software/sdk 3.0.0-alpha.7 → 3.0.0-alpha.9

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 (208) hide show
  1. package/dist/chunks/{PaywallUI-BYquPomD.js → PaywallUI-BhQpWSWN.js} +871 -902
  2. package/dist/chunks/PaywallUI-BhQpWSWN.js.map +1 -0
  3. package/dist/chunks/PaywallUI-C7Wp2TiR.js +26 -0
  4. package/dist/chunks/PaywallUI-C7Wp2TiR.js.map +1 -0
  5. package/dist/chunks/ar-7cgIM-Vl.js +2 -0
  6. package/dist/chunks/ar-7cgIM-Vl.js.map +1 -0
  7. package/dist/chunks/{ar-nh4l4WDE.js → ar-B2Wg_IrC.js} +5 -4
  8. package/dist/chunks/ar-B2Wg_IrC.js.map +1 -0
  9. package/dist/chunks/{cs-2UYO2rWf.js → cs-BNo9Dx0Q.js} +3 -2
  10. package/dist/chunks/cs-BNo9Dx0Q.js.map +1 -0
  11. package/dist/chunks/cs-S05PC5AC.js +2 -0
  12. package/dist/chunks/cs-S05PC5AC.js.map +1 -0
  13. package/dist/chunks/da-Bi4zBG14.js +2 -0
  14. package/dist/chunks/da-Bi4zBG14.js.map +1 -0
  15. package/dist/chunks/{da-BD0O_HfV.js → da-Do9Lq6En.js} +3 -2
  16. package/dist/chunks/da-Do9Lq6En.js.map +1 -0
  17. package/dist/chunks/{de-BkCiXPsn.js → de-C8pDZNvx.js} +4 -2
  18. package/dist/chunks/de-C8pDZNvx.js.map +1 -0
  19. package/dist/chunks/de-nCDB6D2W.js +2 -0
  20. package/dist/chunks/de-nCDB6D2W.js.map +1 -0
  21. package/dist/chunks/el-BrKaa978.js +2 -0
  22. package/dist/chunks/el-BrKaa978.js.map +1 -0
  23. package/dist/chunks/{el-cIcxTp07.js → el-DzMNX-_P.js} +3 -2
  24. package/dist/chunks/el-DzMNX-_P.js.map +1 -0
  25. package/dist/chunks/es-B-Wtyzrl.js +2 -0
  26. package/dist/chunks/es-B-Wtyzrl.js.map +1 -0
  27. package/dist/chunks/{es-CJBC_jrV.js → es-YrKt-q4w.js} +4 -2
  28. package/dist/chunks/es-YrKt-q4w.js.map +1 -0
  29. package/dist/chunks/{fi-DyV7ynBf.js → fi-Bh44pwZ4.js} +3 -2
  30. package/dist/chunks/fi-Bh44pwZ4.js.map +1 -0
  31. package/dist/chunks/fi-D1SGXjnO.js +2 -0
  32. package/dist/chunks/fi-D1SGXjnO.js.map +1 -0
  33. package/dist/chunks/{fr-BLQ4AIu7.js → fr-Bc0pw4ws.js} +4 -2
  34. package/dist/chunks/fr-Bc0pw4ws.js.map +1 -0
  35. package/dist/chunks/fr-BhYf-iKk.js +2 -0
  36. package/dist/chunks/fr-BhYf-iKk.js.map +1 -0
  37. package/dist/chunks/he-BXAaFv6Y.js +2 -0
  38. package/dist/chunks/he-BXAaFv6Y.js.map +1 -0
  39. package/dist/chunks/{he-Bg-Bqi7r.js → he-Bfm-bhe3.js} +3 -2
  40. package/dist/chunks/he-Bfm-bhe3.js.map +1 -0
  41. package/dist/chunks/{hi-wQeE43oY.js → hi-D-O-B9Dn.js} +5 -4
  42. package/dist/chunks/hi-D-O-B9Dn.js.map +1 -0
  43. package/dist/chunks/hi-xblDO0O7.js +2 -0
  44. package/dist/chunks/hi-xblDO0O7.js.map +1 -0
  45. package/dist/chunks/{hu-D9qxzu0r.js → hu-CmIuAbLL.js} +3 -2
  46. package/dist/chunks/hu-CmIuAbLL.js.map +1 -0
  47. package/dist/chunks/hu-Wa46p0y4.js +2 -0
  48. package/dist/chunks/hu-Wa46p0y4.js.map +1 -0
  49. package/dist/chunks/id-CQEo5X94.js +2 -0
  50. package/dist/chunks/id-CQEo5X94.js.map +1 -0
  51. package/dist/chunks/{id-Rx_wYvqy.js → id-DN7IES-A.js} +3 -2
  52. package/dist/chunks/id-DN7IES-A.js.map +1 -0
  53. package/dist/chunks/it-8AYCm0xz.js +2 -0
  54. package/dist/chunks/it-8AYCm0xz.js.map +1 -0
  55. package/dist/chunks/{it-B1SRPZ3e.js → it-Cz5Nmqx5.js} +4 -2
  56. package/dist/chunks/it-Cz5Nmqx5.js.map +1 -0
  57. package/dist/chunks/{ja-DiItm8te.js → ja-BH9BlBh2.js} +4 -2
  58. package/dist/chunks/ja-BH9BlBh2.js.map +1 -0
  59. package/dist/chunks/ja-q-COVayn.js +2 -0
  60. package/dist/chunks/ja-q-COVayn.js.map +1 -0
  61. package/dist/chunks/ko-B6HRCscZ.js +2 -0
  62. package/dist/chunks/ko-B6HRCscZ.js.map +1 -0
  63. package/dist/chunks/{ko-CdGFWAKX.js → ko-CYV9QuYs.js} +4 -2
  64. package/dist/chunks/ko-CYV9QuYs.js.map +1 -0
  65. package/dist/chunks/{nl-CmZ3vEvj.js → nl-BvkB900D.js} +4 -2
  66. package/dist/chunks/nl-BvkB900D.js.map +1 -0
  67. package/dist/chunks/nl-CAd6_xlm.js +2 -0
  68. package/dist/chunks/nl-CAd6_xlm.js.map +1 -0
  69. package/dist/chunks/{no-BuxByZpq.js → no-3s9_ormb.js} +3 -2
  70. package/dist/chunks/no-3s9_ormb.js.map +1 -0
  71. package/dist/chunks/no-CAmz6bz6.js +2 -0
  72. package/dist/chunks/no-CAmz6bz6.js.map +1 -0
  73. package/dist/chunks/{pl-jZFCnDb8.js → pl-C9WTGQtb.js} +3 -2
  74. package/dist/chunks/pl-C9WTGQtb.js.map +1 -0
  75. package/dist/chunks/pl-DqUSTCaF.js +2 -0
  76. package/dist/chunks/pl-DqUSTCaF.js.map +1 -0
  77. package/dist/chunks/pt-8ARZnH0_.js +2 -0
  78. package/dist/chunks/pt-8ARZnH0_.js.map +1 -0
  79. package/dist/chunks/{pt-Cld7MwIW.js → pt-uFVUv_Op.js} +4 -2
  80. package/dist/chunks/pt-uFVUv_Op.js.map +1 -0
  81. package/dist/chunks/{ro-CuKDqj3C.js → ro-BrqQ8Au-.js} +3 -2
  82. package/dist/chunks/ro-BrqQ8Au-.js.map +1 -0
  83. package/dist/chunks/ro-D-NMbp2F.js +2 -0
  84. package/dist/chunks/ro-D-NMbp2F.js.map +1 -0
  85. package/dist/chunks/ru-8gbHPh0g.js +2 -0
  86. package/dist/chunks/ru-8gbHPh0g.js.map +1 -0
  87. package/dist/chunks/{ru-B7cjqJUm.js → ru-DK594dA8.js} +11 -2
  88. package/dist/chunks/ru-DK594dA8.js.map +1 -0
  89. package/dist/chunks/{sv-D9y-M1Fo.js → sv-CHNH8-mq.js} +3 -2
  90. package/dist/chunks/sv-CHNH8-mq.js.map +1 -0
  91. package/dist/chunks/sv-D8a8hmx9.js +2 -0
  92. package/dist/chunks/sv-D8a8hmx9.js.map +1 -0
  93. package/dist/chunks/th-DfjUK0Y7.js +2 -0
  94. package/dist/chunks/th-DfjUK0Y7.js.map +1 -0
  95. package/dist/chunks/{th-D9umBjEy.js → th-l24Pm5q-.js} +3 -2
  96. package/dist/chunks/th-l24Pm5q-.js.map +1 -0
  97. package/dist/chunks/{tr-BddMywiw.js → tr-ADpigSY5.js} +3 -2
  98. package/dist/chunks/tr-ADpigSY5.js.map +1 -0
  99. package/dist/chunks/tr-BdBpz4tL.js +2 -0
  100. package/dist/chunks/tr-BdBpz4tL.js.map +1 -0
  101. package/dist/chunks/{uk-Dbd31hFt.js → uk-CGqo4jek.js} +11 -2
  102. package/dist/chunks/uk-CGqo4jek.js.map +1 -0
  103. package/dist/chunks/uk-Cx1zv1ao.js +2 -0
  104. package/dist/chunks/uk-Cx1zv1ao.js.map +1 -0
  105. package/dist/chunks/{vi-Do3BMOdh.js → vi-Dk9bTu6f.js} +3 -2
  106. package/dist/chunks/vi-Dk9bTu6f.js.map +1 -0
  107. package/dist/chunks/vi-oe2dW21I.js +2 -0
  108. package/dist/chunks/vi-oe2dW21I.js.map +1 -0
  109. package/dist/chunks/zh-CwczPMPp.js +2 -0
  110. package/dist/chunks/zh-CwczPMPp.js.map +1 -0
  111. package/dist/chunks/{zh-gQSYLZI3.js → zh-LDkEV2D9.js} +3 -1
  112. package/dist/chunks/zh-LDkEV2D9.js.map +1 -0
  113. package/dist/core.cjs +1 -1
  114. package/dist/core.cjs.map +1 -1
  115. package/dist/core.d.ts +21 -13
  116. package/dist/core.js +188 -168
  117. package/dist/core.js.map +1 -1
  118. package/dist/index.cjs +1 -1
  119. package/dist/index.d.ts +52 -29
  120. package/dist/index.js +1 -1
  121. package/dist/ui.cjs +1 -1
  122. package/dist/ui.d.ts +52 -29
  123. package/dist/ui.js +1 -1
  124. package/package.json +1 -1
  125. package/dist/chunks/PaywallUI-BYquPomD.js.map +0 -1
  126. package/dist/chunks/PaywallUI-Cl9sz_xA.js +0 -26
  127. package/dist/chunks/PaywallUI-Cl9sz_xA.js.map +0 -1
  128. package/dist/chunks/ar-BUQInJ5a.js +0 -2
  129. package/dist/chunks/ar-BUQInJ5a.js.map +0 -1
  130. package/dist/chunks/ar-nh4l4WDE.js.map +0 -1
  131. package/dist/chunks/cs-2UYO2rWf.js.map +0 -1
  132. package/dist/chunks/cs-i5K4KTFV.js +0 -2
  133. package/dist/chunks/cs-i5K4KTFV.js.map +0 -1
  134. package/dist/chunks/da-BD0O_HfV.js.map +0 -1
  135. package/dist/chunks/da-CZbhtVJO.js +0 -2
  136. package/dist/chunks/da-CZbhtVJO.js.map +0 -1
  137. package/dist/chunks/de-Bc-GoLgC.js +0 -2
  138. package/dist/chunks/de-Bc-GoLgC.js.map +0 -1
  139. package/dist/chunks/de-BkCiXPsn.js.map +0 -1
  140. package/dist/chunks/el-CcMEbl_F.js +0 -2
  141. package/dist/chunks/el-CcMEbl_F.js.map +0 -1
  142. package/dist/chunks/el-cIcxTp07.js.map +0 -1
  143. package/dist/chunks/es-BvYmomAz.js +0 -2
  144. package/dist/chunks/es-BvYmomAz.js.map +0 -1
  145. package/dist/chunks/es-CJBC_jrV.js.map +0 -1
  146. package/dist/chunks/fi-DyV7ynBf.js.map +0 -1
  147. package/dist/chunks/fi-aZR-qmZN.js +0 -2
  148. package/dist/chunks/fi-aZR-qmZN.js.map +0 -1
  149. package/dist/chunks/fr-BLQ4AIu7.js.map +0 -1
  150. package/dist/chunks/fr-BgbFAgHx.js +0 -2
  151. package/dist/chunks/fr-BgbFAgHx.js.map +0 -1
  152. package/dist/chunks/he-Bg-Bqi7r.js.map +0 -1
  153. package/dist/chunks/he-CQ4yCuja.js +0 -2
  154. package/dist/chunks/he-CQ4yCuja.js.map +0 -1
  155. package/dist/chunks/hi-DtUsj1c-.js +0 -2
  156. package/dist/chunks/hi-DtUsj1c-.js.map +0 -1
  157. package/dist/chunks/hi-wQeE43oY.js.map +0 -1
  158. package/dist/chunks/hu-D9qxzu0r.js.map +0 -1
  159. package/dist/chunks/hu-DXtscQ8_.js +0 -2
  160. package/dist/chunks/hu-DXtscQ8_.js.map +0 -1
  161. package/dist/chunks/id-BByOYpeo.js +0 -2
  162. package/dist/chunks/id-BByOYpeo.js.map +0 -1
  163. package/dist/chunks/id-Rx_wYvqy.js.map +0 -1
  164. package/dist/chunks/it-52Ip42pa.js +0 -2
  165. package/dist/chunks/it-52Ip42pa.js.map +0 -1
  166. package/dist/chunks/it-B1SRPZ3e.js.map +0 -1
  167. package/dist/chunks/ja-CMC3Parn.js +0 -2
  168. package/dist/chunks/ja-CMC3Parn.js.map +0 -1
  169. package/dist/chunks/ja-DiItm8te.js.map +0 -1
  170. package/dist/chunks/ko-3qY21q40.js +0 -2
  171. package/dist/chunks/ko-3qY21q40.js.map +0 -1
  172. package/dist/chunks/ko-CdGFWAKX.js.map +0 -1
  173. package/dist/chunks/nl-Borc5nw1.js +0 -2
  174. package/dist/chunks/nl-Borc5nw1.js.map +0 -1
  175. package/dist/chunks/nl-CmZ3vEvj.js.map +0 -1
  176. package/dist/chunks/no-BuxByZpq.js.map +0 -1
  177. package/dist/chunks/no-Do2iGedg.js +0 -2
  178. package/dist/chunks/no-Do2iGedg.js.map +0 -1
  179. package/dist/chunks/pl-jZFCnDb8.js.map +0 -1
  180. package/dist/chunks/pl-mRaky_7k.js +0 -2
  181. package/dist/chunks/pl-mRaky_7k.js.map +0 -1
  182. package/dist/chunks/pt-Cld7MwIW.js.map +0 -1
  183. package/dist/chunks/pt-DilDTXfs.js +0 -2
  184. package/dist/chunks/pt-DilDTXfs.js.map +0 -1
  185. package/dist/chunks/ro-CuKDqj3C.js.map +0 -1
  186. package/dist/chunks/ro-DF2uzPIB.js +0 -2
  187. package/dist/chunks/ro-DF2uzPIB.js.map +0 -1
  188. package/dist/chunks/ru-B7cjqJUm.js.map +0 -1
  189. package/dist/chunks/ru-YeaXnTO-.js +0 -2
  190. package/dist/chunks/ru-YeaXnTO-.js.map +0 -1
  191. package/dist/chunks/sv-2pHEvuSe.js +0 -2
  192. package/dist/chunks/sv-2pHEvuSe.js.map +0 -1
  193. package/dist/chunks/sv-D9y-M1Fo.js.map +0 -1
  194. package/dist/chunks/th-D9umBjEy.js.map +0 -1
  195. package/dist/chunks/th-u2QSDF0G.js +0 -2
  196. package/dist/chunks/th-u2QSDF0G.js.map +0 -1
  197. package/dist/chunks/tr-BddMywiw.js.map +0 -1
  198. package/dist/chunks/tr-Bhgm6_ti.js +0 -2
  199. package/dist/chunks/tr-Bhgm6_ti.js.map +0 -1
  200. package/dist/chunks/uk-7vwqsaVK.js +0 -2
  201. package/dist/chunks/uk-7vwqsaVK.js.map +0 -1
  202. package/dist/chunks/uk-Dbd31hFt.js.map +0 -1
  203. package/dist/chunks/vi-CJefLP_g.js +0 -2
  204. package/dist/chunks/vi-CJefLP_g.js.map +0 -1
  205. package/dist/chunks/vi-Do3BMOdh.js.map +0 -1
  206. package/dist/chunks/zh-D5C3BzYL.js +0 -2
  207. package/dist/chunks/zh-D5C3BzYL.js.map +0 -1
  208. package/dist/chunks/zh-gQSYLZI3.js.map +0 -1
package/dist/index.cjs CHANGED
@@ -1,2 +1,2 @@
1
- "use strict";Object.defineProperty(exports,Symbol.toStringTag,{value:"Module"});const e=require("./core.cjs"),r=require("./chunks/PaywallUI-Cl9sz_xA.js");exports.ApiClient=e.ApiClient;exports.ApiGatewayClient=e.ApiGatewayClient;exports.AuthClient=e.AuthClient;exports.BillingClient=e.BillingClient;exports.EventTracker=e.EventTracker;exports.PaywallError=e.PaywallError;exports.QuotaExceededError=e.QuotaExceededError;exports.SDK_VERSION=e.SDK_VERSION;exports.STORAGE_KEYS=e.STORAGE_KEYS;exports.createStorage=e.createStorage;exports.ensureVisitorId=e.ensureVisitorId;exports.generateVisitorId=e.generateVisitorId;exports.PaywallUI=r.PaywallUI;exports.blockRegistry=r.blockRegistry;
1
+ "use strict";Object.defineProperty(exports,Symbol.toStringTag,{value:"Module"});const e=require("./core.cjs"),r=require("./chunks/PaywallUI-C7Wp2TiR.js");exports.ApiClient=e.ApiClient;exports.ApiGatewayClient=e.ApiGatewayClient;exports.AuthClient=e.AuthClient;exports.BillingClient=e.BillingClient;exports.EventTracker=e.EventTracker;exports.PaywallError=e.PaywallError;exports.QuotaExceededError=e.QuotaExceededError;exports.SDK_VERSION=e.SDK_VERSION;exports.STORAGE_KEYS=e.STORAGE_KEYS;exports.createStorage=e.createStorage;exports.ensureVisitorId=e.ensureVisitorId;exports.generateVisitorId=e.generateVisitorId;exports.PaywallUI=r.PaywallUI;exports.blockRegistry=r.blockRegistry;
2
2
  //# sourceMappingURL=index.cjs.map
package/dist/index.d.ts CHANGED
@@ -262,10 +262,8 @@ export declare class AuthClient {
262
262
  * когда сервер начнёт возвращать challenge_required в риск-сценариях,
263
263
  * SDK сможет передать proof-of-something обратно без breaking change.
264
264
  *
265
- * `forceCaptcha: true` пропускает шаги 1-2 и сразу делает /signin (создаёт
266
- * нового anon-юзера). Используется в switch-account flow. Имя поля исторически
267
- * остаётся `forceCaptcha`, хотя капчи там больше нет — менять имя ломает
268
- * host-сигнатуру; смысл «принудительно новая anon-сессия» сохранён.
265
+ * `forceNewAnon: true` пропускает шаги 1-2 и сразу делает /signin (создаёт
266
+ * нового anon-юзера). Используется в switch-account flow.
269
267
  *
270
268
  * Параллельные вызовы дедуплицируются через `inflightAnonSignin` — два
271
269
  * click'а на «Войти как гость» не создадут двух anon-юзеров (два /signup =
@@ -274,7 +272,7 @@ export declare class AuthClient {
274
272
  signInAnonymously(input?: {
275
273
  captchaToken?: string;
276
274
  userMeta?: Record<string, string>;
277
- forceCaptcha?: boolean;
275
+ forceNewAnon?: boolean;
278
276
  }): Promise<AuthSession>;
279
277
  /**
280
278
  * Внутренний resume — пробует /auth/refresh с сохранённым anon refresh_token.
@@ -813,21 +811,31 @@ export declare class BillingClient {
813
811
  * `/api/v1/paywall/[id]/user` без unstable_cache, потому что list для UI
814
812
  * должен быть свежим после cancel-а.
815
813
  *
816
- * Auth: Bearer обязателен (через AuthClient). Без Bearer — 401 от бэка,
817
- * пробрасываем как PaywallError('http_401'). Гость пустой список.
814
+ * Auth (два пути):
815
+ * - Bearer (через AuthClient) — user.id резолвится из сессии, identity
816
+ * в query игнорируется.
817
+ * - `apiKey` + `identity.email`/`identity.userId` — server-SDK путь для
818
+ * интеграций со своей авторизацией. Бэк проверяет, что identity линкована
819
+ * к этому пейволу (защита от cross-paywall lookup).
820
+ * Без auth и без apiKey+identity — `identity_required`.
818
821
  */
819
822
  listPurchases(opts?: {
820
823
  signal?: AbortSignal;
821
824
  }): Promise<PaywallPurchaseDetailed[]>;
822
825
  /**
823
- * Отменить подписку. Бэк проверит что subscription принадлежит auth-юзеру
824
- * и сделает cancel у acquiring'а (Stripe/Paddle/Chargebee). По умолчанию
825
- * cancel в конце текущего периода — юзер сохраняет access до renewal date'ы.
826
+ * Отменить подписку. Бэк проверит, что subscription принадлежит юзеру
827
+ * (Bearer-путь из сессии; apiKey-путь — из identity), и сделает cancel у
828
+ * acquiring'а (Stripe/Paddle/Chargebee/Overpay). По умолчанию cancel в
829
+ * конце текущего периода — юзер сохраняет access до renewal date'ы.
826
830
  *
827
- * `reason` обязательна (валидация на бэке). Удобно собрать через select
828
- * причин в host-UI, как в legacy customer portal'е.
831
+ * `reason` обязательна (валидация на бэке).
829
832
  *
830
- * Auth: Bearer обязателен.
833
+ * Auth (два пути):
834
+ * - Bearer (через AuthClient) — стандартный путь для UI customer-portal'a.
835
+ * - `apiKey` + `identity.email`/`identity.userId` — для self-service UI на
836
+ * бэке клиента со своей авторизацией. Бэк дополнительно фильтрует
837
+ * subscription по paywall_id, чтобы owner пейвола A не отменил подписку
838
+ * пейвола B.
831
839
  */
832
840
  cancelSubscription(params: {
833
841
  subscriptionId: string;
@@ -918,6 +926,10 @@ export declare interface BlockContext {
918
926
  /** Текущая auth-session (snapshot из AuthClient). null = разлогинен. PaywallRoot
919
927
  * подписан на onAuthChange и пробрасывает свежий snapshot сюда. */
920
928
  authSession: AuthSession | null;
929
+ /** Стартовый mode для AuthPanel — переопределяет дефолт 'signin'.
930
+ * Выставляется AuthGate'ом когда host вызвал openSignup()/openSignin().
931
+ * Остальные блоки игнорируют. */
932
+ initialAuthMode?: 'signin' | 'signup';
921
933
  }
922
934
 
923
935
  export declare interface BlockProps<B extends LayoutBlock = LayoutBlock> {
@@ -1443,7 +1455,7 @@ export declare interface PaywallStateSnapshot {
1443
1455
  /** Модалка отрендерена и видна. False — closed (или ещё не открывалась). */
1444
1456
  open: boolean;
1445
1457
  /** Что показывается в модалке. null когда `open=false`. */
1446
- view: 'loading' | 'error' | 'layout' | 'auth' | 'anon' | 'support' | 'awaiting_payment' | 'popup_blocked' | 'purchased' | null;
1458
+ view: 'loading' | 'error' | 'layout' | 'auth' | 'support' | 'awaiting_payment' | 'popup_blocked' | 'purchased' | null;
1447
1459
  /** Заполнено только когда `view === 'error'`. */
1448
1460
  error: PaywallError | null;
1449
1461
  }
@@ -1570,23 +1582,34 @@ export declare class PaywallUI {
1570
1582
  */
1571
1583
  openAuth(opts?: OpenOptions): void;
1572
1584
  /**
1573
- * Открывает модалку с anonymous-gate. AnonGate сразу зовёт
1574
- * `auth.signInAnonymously()`:
1575
- * - если в storage есть `anonRefreshToken` silent resume через
1576
- * /auth/refresh, модалка схлопывается мгновенно (юзер видит лёгкий
1577
- * спиннер ~100мс);
1578
- * - иначе — fresh POST /auth/anonymous/signin без captcha (защита от
1579
- * abuse держится на Supabase per-real-IP rate-limit + CF Bot Fight Mode).
1580
- *
1581
- * После успешного signIn'а модалка закрывается; host подхватывает свежую
1582
- * session через `auth.onAuthChange` или `paywall.onUserChange`. Для UX
1583
- * "просто залогиниться чтобы api-gateway работал, без покупок".
1585
+ * Шорткат над `openAuth()` открывает модалку сразу на signin-форме.
1586
+ * Эквивалент `openAuth()` (signin — дефолт). Существует для симметрии с
1587
+ * `openSignup()` и читаемости host-кода:
1588
+ * - `paywall.openSignin()` «вход в существующий аккаунт»
1589
+ * - `paywall.openSignup()` — «новая регистрация»
1590
+ * Без managed-auth no-op.
1591
+ */
1592
+ openSignin(opts?: OpenOptions): void;
1593
+ /**
1594
+ * Открывает модалку с auth-gate сразу в режиме регистрации (signup-mode
1595
+ * AuthPanel'а email/password/repeat). Если в paywall layout админ
1596
+ * отключил allow_signup, AuthPanel игнорит mode и стартует с signin —
1597
+ * соблюдается admin-конфиг.
1598
+ * Без managed-auth — no-op.
1599
+ */
1600
+ openSignup(opts?: OpenOptions): void;
1601
+ /**
1602
+ * Headless anonymous signin без открытия модалки. Внутри:
1603
+ * idempotent (если уже анон — instant return) → resume через сохранённый
1604
+ * refresh_token → fresh /auth/anonymous/signin. Дедуплицирует
1605
+ * параллельные вызовы внутри AuthClient'а.
1584
1606
  *
1585
- * Без managed-auth (`auth` не подключён) методno-op. Триал и
1586
- * visibility-таргетинг этот flow обходит: анон-логин не должен зависеть
1587
- * от страны юзера или trial-стейджа.
1607
+ * Удобно для host-кнопок типа «Continue as guest» host сам управляет
1608
+ * loading-стейтом на своей кнопке, без полупустой модалки со спиннером.
1609
+ * Без managed-auth резолвится rejected promise'ом (нет AuthClient'а
1610
+ * чтобы делать signin).
1588
1611
  */
1589
- openAnonGate(opts?: OpenOptions): void;
1612
+ signInAnonymously(): Promise<AuthSession>;
1590
1613
  private openInternal;
1591
1614
  /** Применить gates ПОСЛЕ того, как модалка уже смонтирована (mount-then-load
1592
1615
  * путь). Если gate блокирует — close() + emit. Если юзер уже сам закрыл
package/dist/index.js CHANGED
@@ -1,5 +1,5 @@
1
1
  import { ApiClient as t, ApiGatewayClient as a, AuthClient as i, BillingClient as l, EventTracker as o, PaywallError as n, QuotaExceededError as E, SDK_VERSION as s, STORAGE_KEYS as S, createStorage as c, ensureVisitorId as d, generateVisitorId as g } from "./core.js";
2
- import { P as y, b as A } from "./chunks/PaywallUI-BYquPomD.js";
2
+ import { P as y, b as A } from "./chunks/PaywallUI-BhQpWSWN.js";
3
3
  export {
4
4
  t as ApiClient,
5
5
  a as ApiGatewayClient,
package/dist/ui.cjs CHANGED
@@ -1,2 +1,2 @@
1
- "use strict";Object.defineProperty(exports,Symbol.toStringTag,{value:"Module"});const e=require("./chunks/PaywallUI-Cl9sz_xA.js");exports.PaywallUI=e.PaywallUI;exports.blockRegistry=e.blockRegistry;
1
+ "use strict";Object.defineProperty(exports,Symbol.toStringTag,{value:"Module"});const e=require("./chunks/PaywallUI-C7Wp2TiR.js");exports.PaywallUI=e.PaywallUI;exports.blockRegistry=e.blockRegistry;
2
2
  //# sourceMappingURL=ui.cjs.map
package/dist/ui.d.ts CHANGED
@@ -248,10 +248,8 @@ declare class AuthClient {
248
248
  * когда сервер начнёт возвращать challenge_required в риск-сценариях,
249
249
  * SDK сможет передать proof-of-something обратно без breaking change.
250
250
  *
251
- * `forceCaptcha: true` пропускает шаги 1-2 и сразу делает /signin (создаёт
252
- * нового anon-юзера). Используется в switch-account flow. Имя поля исторически
253
- * остаётся `forceCaptcha`, хотя капчи там больше нет — менять имя ломает
254
- * host-сигнатуру; смысл «принудительно новая anon-сессия» сохранён.
251
+ * `forceNewAnon: true` пропускает шаги 1-2 и сразу делает /signin (создаёт
252
+ * нового anon-юзера). Используется в switch-account flow.
255
253
  *
256
254
  * Параллельные вызовы дедуплицируются через `inflightAnonSignin` — два
257
255
  * click'а на «Войти как гость» не создадут двух anon-юзеров (два /signup =
@@ -260,7 +258,7 @@ declare class AuthClient {
260
258
  signInAnonymously(input?: {
261
259
  captchaToken?: string;
262
260
  userMeta?: Record<string, string>;
263
- forceCaptcha?: boolean;
261
+ forceNewAnon?: boolean;
264
262
  }): Promise<AuthSession>;
265
263
  /**
266
264
  * Внутренний resume — пробует /auth/refresh с сохранённым anon refresh_token.
@@ -799,21 +797,31 @@ declare class BillingClient {
799
797
  * `/api/v1/paywall/[id]/user` без unstable_cache, потому что list для UI
800
798
  * должен быть свежим после cancel-а.
801
799
  *
802
- * Auth: Bearer обязателен (через AuthClient). Без Bearer — 401 от бэка,
803
- * пробрасываем как PaywallError('http_401'). Гость пустой список.
800
+ * Auth (два пути):
801
+ * - Bearer (через AuthClient) — user.id резолвится из сессии, identity
802
+ * в query игнорируется.
803
+ * - `apiKey` + `identity.email`/`identity.userId` — server-SDK путь для
804
+ * интеграций со своей авторизацией. Бэк проверяет, что identity линкована
805
+ * к этому пейволу (защита от cross-paywall lookup).
806
+ * Без auth и без apiKey+identity — `identity_required`.
804
807
  */
805
808
  listPurchases(opts?: {
806
809
  signal?: AbortSignal;
807
810
  }): Promise<PaywallPurchaseDetailed[]>;
808
811
  /**
809
- * Отменить подписку. Бэк проверит что subscription принадлежит auth-юзеру
810
- * и сделает cancel у acquiring'а (Stripe/Paddle/Chargebee). По умолчанию
811
- * cancel в конце текущего периода — юзер сохраняет access до renewal date'ы.
812
+ * Отменить подписку. Бэк проверит, что subscription принадлежит юзеру
813
+ * (Bearer-путь из сессии; apiKey-путь — из identity), и сделает cancel у
814
+ * acquiring'а (Stripe/Paddle/Chargebee/Overpay). По умолчанию cancel в
815
+ * конце текущего периода — юзер сохраняет access до renewal date'ы.
812
816
  *
813
- * `reason` обязательна (валидация на бэке). Удобно собрать через select
814
- * причин в host-UI, как в legacy customer portal'е.
817
+ * `reason` обязательна (валидация на бэке).
815
818
  *
816
- * Auth: Bearer обязателен.
819
+ * Auth (два пути):
820
+ * - Bearer (через AuthClient) — стандартный путь для UI customer-portal'a.
821
+ * - `apiKey` + `identity.email`/`identity.userId` — для self-service UI на
822
+ * бэке клиента со своей авторизацией. Бэк дополнительно фильтрует
823
+ * subscription по paywall_id, чтобы owner пейвола A не отменил подписку
824
+ * пейвола B.
817
825
  */
818
826
  cancelSubscription(params: {
819
827
  subscriptionId: string;
@@ -904,6 +912,10 @@ export declare interface BlockContext {
904
912
  /** Текущая auth-session (snapshot из AuthClient). null = разлогинен. PaywallRoot
905
913
  * подписан на onAuthChange и пробрасывает свежий snapshot сюда. */
906
914
  authSession: AuthSession | null;
915
+ /** Стартовый mode для AuthPanel — переопределяет дефолт 'signin'.
916
+ * Выставляется AuthGate'ом когда host вызвал openSignup()/openSignin().
917
+ * Остальные блоки игнорируют. */
918
+ initialAuthMode?: 'signin' | 'signup';
907
919
  }
908
920
 
909
921
  export declare interface BlockProps<B extends LayoutBlock = LayoutBlock> {
@@ -1382,7 +1394,7 @@ export declare interface PaywallStateSnapshot {
1382
1394
  /** Модалка отрендерена и видна. False — closed (или ещё не открывалась). */
1383
1395
  open: boolean;
1384
1396
  /** Что показывается в модалке. null когда `open=false`. */
1385
- view: 'loading' | 'error' | 'layout' | 'auth' | 'anon' | 'support' | 'awaiting_payment' | 'popup_blocked' | 'purchased' | null;
1397
+ view: 'loading' | 'error' | 'layout' | 'auth' | 'support' | 'awaiting_payment' | 'popup_blocked' | 'purchased' | null;
1386
1398
  /** Заполнено только когда `view === 'error'`. */
1387
1399
  error: PaywallError | null;
1388
1400
  }
@@ -1509,23 +1521,34 @@ export declare class PaywallUI {
1509
1521
  */
1510
1522
  openAuth(opts?: OpenOptions): void;
1511
1523
  /**
1512
- * Открывает модалку с anonymous-gate. AnonGate сразу зовёт
1513
- * `auth.signInAnonymously()`:
1514
- * - если в storage есть `anonRefreshToken` silent resume через
1515
- * /auth/refresh, модалка схлопывается мгновенно (юзер видит лёгкий
1516
- * спиннер ~100мс);
1517
- * - иначе — fresh POST /auth/anonymous/signin без captcha (защита от
1518
- * abuse держится на Supabase per-real-IP rate-limit + CF Bot Fight Mode).
1519
- *
1520
- * После успешного signIn'а модалка закрывается; host подхватывает свежую
1521
- * session через `auth.onAuthChange` или `paywall.onUserChange`. Для UX
1522
- * "просто залогиниться чтобы api-gateway работал, без покупок".
1524
+ * Шорткат над `openAuth()` открывает модалку сразу на signin-форме.
1525
+ * Эквивалент `openAuth()` (signin — дефолт). Существует для симметрии с
1526
+ * `openSignup()` и читаемости host-кода:
1527
+ * - `paywall.openSignin()` «вход в существующий аккаунт»
1528
+ * - `paywall.openSignup()` — «новая регистрация»
1529
+ * Без managed-auth no-op.
1530
+ */
1531
+ openSignin(opts?: OpenOptions): void;
1532
+ /**
1533
+ * Открывает модалку с auth-gate сразу в режиме регистрации (signup-mode
1534
+ * AuthPanel'а email/password/repeat). Если в paywall layout админ
1535
+ * отключил allow_signup, AuthPanel игнорит mode и стартует с signin —
1536
+ * соблюдается admin-конфиг.
1537
+ * Без managed-auth — no-op.
1538
+ */
1539
+ openSignup(opts?: OpenOptions): void;
1540
+ /**
1541
+ * Headless anonymous signin без открытия модалки. Внутри:
1542
+ * idempotent (если уже анон — instant return) → resume через сохранённый
1543
+ * refresh_token → fresh /auth/anonymous/signin. Дедуплицирует
1544
+ * параллельные вызовы внутри AuthClient'а.
1523
1545
  *
1524
- * Без managed-auth (`auth` не подключён) методno-op. Триал и
1525
- * visibility-таргетинг этот flow обходит: анон-логин не должен зависеть
1526
- * от страны юзера или trial-стейджа.
1546
+ * Удобно для host-кнопок типа «Continue as guest» host сам управляет
1547
+ * loading-стейтом на своей кнопке, без полупустой модалки со спиннером.
1548
+ * Без managed-auth резолвится rejected promise'ом (нет AuthClient'а
1549
+ * чтобы делать signin).
1527
1550
  */
1528
- openAnonGate(opts?: OpenOptions): void;
1551
+ signInAnonymously(): Promise<AuthSession>;
1529
1552
  private openInternal;
1530
1553
  /** Применить gates ПОСЛЕ того, как модалка уже смонтирована (mount-then-load
1531
1554
  * путь). Если gate блокирует — close() + emit. Если юзер уже сам закрыл
package/dist/ui.js CHANGED
@@ -1,4 +1,4 @@
1
- import { P as o, b as r } from "./chunks/PaywallUI-BYquPomD.js";
1
+ import { P as o, b as r } from "./chunks/PaywallUI-BhQpWSWN.js";
2
2
  export {
3
3
  o as PaywallUI,
4
4
  r as blockRegistry
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@monetize.software/sdk",
3
- "version": "3.0.0-alpha.7",
3
+ "version": "3.0.0-alpha.9",
4
4
  "description": "Monetize SDK — bundled billing client and paywall render engine for web and Chrome extensions",
5
5
  "type": "module",
6
6
  "sideEffects": false,