@monetize.software/sdk-extension 3.0.0-alpha.8 → 3.0.0-beta.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.
Files changed (227) hide show
  1. package/dist/chunks/ar-CViBaj16.js +2 -0
  2. package/dist/chunks/ar-CViBaj16.js.map +1 -0
  3. package/dist/chunks/{ar-nh4l4WDE.js → ar-ClwBmll7.js} +9 -4
  4. package/dist/chunks/ar-ClwBmll7.js.map +1 -0
  5. package/dist/chunks/chrome-port-BEMjZQAH.js +2 -0
  6. package/dist/chunks/chrome-port-BEMjZQAH.js.map +1 -0
  7. package/dist/chunks/{chrome-port-CxW3Pwc2.js → chrome-port-bfTUUDz_.js} +174 -138
  8. package/dist/chunks/chrome-port-bfTUUDz_.js.map +1 -0
  9. package/dist/chunks/{cs-2UYO2rWf.js → cs-Cc_D0W4S.js} +7 -2
  10. package/dist/chunks/cs-Cc_D0W4S.js.map +1 -0
  11. package/dist/chunks/cs-DQJWP65K.js +2 -0
  12. package/dist/chunks/cs-DQJWP65K.js.map +1 -0
  13. package/dist/chunks/{da-BD0O_HfV.js → da-BtKcMSxH.js} +7 -2
  14. package/dist/chunks/da-BtKcMSxH.js.map +1 -0
  15. package/dist/chunks/da-Cyr_IXhb.js +2 -0
  16. package/dist/chunks/da-Cyr_IXhb.js.map +1 -0
  17. package/dist/chunks/de-BOCUj1pF.js +2 -0
  18. package/dist/chunks/de-BOCUj1pF.js.map +1 -0
  19. package/dist/chunks/{de-BkCiXPsn.js → de-iwQW5eYl.js} +8 -2
  20. package/dist/chunks/de-iwQW5eYl.js.map +1 -0
  21. package/dist/chunks/{el-cIcxTp07.js → el-BoH65CeJ.js} +7 -2
  22. package/dist/chunks/el-BoH65CeJ.js.map +1 -0
  23. package/dist/chunks/el-C6jLHiEF.js +2 -0
  24. package/dist/chunks/el-C6jLHiEF.js.map +1 -0
  25. package/dist/chunks/es-CARHLxHR.js +2 -0
  26. package/dist/chunks/es-CARHLxHR.js.map +1 -0
  27. package/dist/chunks/{es-CJBC_jrV.js → es-CkP16_8K.js} +8 -2
  28. package/dist/chunks/es-CkP16_8K.js.map +1 -0
  29. package/dist/chunks/fi-B8OhRbwY.js +2 -0
  30. package/dist/chunks/fi-B8OhRbwY.js.map +1 -0
  31. package/dist/chunks/{fi-DyV7ynBf.js → fi-yUXSmK1E.js} +7 -2
  32. package/dist/chunks/fi-yUXSmK1E.js.map +1 -0
  33. package/dist/chunks/fr-CoM18zzM.js +2 -0
  34. package/dist/chunks/fr-CoM18zzM.js.map +1 -0
  35. package/dist/chunks/{fr-BLQ4AIu7.js → fr-DSZRGsxI.js} +8 -2
  36. package/dist/chunks/fr-DSZRGsxI.js.map +1 -0
  37. package/dist/chunks/he-DTDVc3lA.js +2 -0
  38. package/dist/chunks/he-DTDVc3lA.js.map +1 -0
  39. package/dist/chunks/{he-Bg-Bqi7r.js → he-ZUo7cQjk.js} +9 -4
  40. package/dist/chunks/he-ZUo7cQjk.js.map +1 -0
  41. package/dist/chunks/hi-BjnS9UeE.js +2 -0
  42. package/dist/chunks/hi-BjnS9UeE.js.map +1 -0
  43. package/dist/chunks/{hi-wQeE43oY.js → hi-CEutBKiG.js} +9 -4
  44. package/dist/chunks/hi-CEutBKiG.js.map +1 -0
  45. package/dist/chunks/hu-CN06FMhV.js +2 -0
  46. package/dist/chunks/hu-CN06FMhV.js.map +1 -0
  47. package/dist/chunks/{hu-D9qxzu0r.js → hu-DvEAWGS7.js} +7 -2
  48. package/dist/chunks/hu-DvEAWGS7.js.map +1 -0
  49. package/dist/chunks/id-BITgaBxq.js +2 -0
  50. package/dist/chunks/id-BITgaBxq.js.map +1 -0
  51. package/dist/chunks/{id-Rx_wYvqy.js → id-_eEMrYMW.js} +7 -2
  52. package/dist/chunks/id-_eEMrYMW.js.map +1 -0
  53. package/dist/chunks/{it-B1SRPZ3e.js → it-BAmsQbIl.js} +8 -2
  54. package/dist/chunks/it-BAmsQbIl.js.map +1 -0
  55. package/dist/chunks/it-DVcsq015.js +2 -0
  56. package/dist/chunks/it-DVcsq015.js.map +1 -0
  57. package/dist/chunks/ja-Bim7Ok2e.js +2 -0
  58. package/dist/chunks/ja-Bim7Ok2e.js.map +1 -0
  59. package/dist/chunks/{ja-DiItm8te.js → ja-BqCZWVKK.js} +10 -4
  60. package/dist/chunks/ja-BqCZWVKK.js.map +1 -0
  61. package/dist/chunks/{ko-CdGFWAKX.js → ko-CkIzeOzb.js} +10 -4
  62. package/dist/chunks/ko-CkIzeOzb.js.map +1 -0
  63. package/dist/chunks/ko-DqEfcVCB.js +2 -0
  64. package/dist/chunks/ko-DqEfcVCB.js.map +1 -0
  65. package/dist/chunks/nl-DSNuJWIo.js +2 -0
  66. package/dist/chunks/nl-DSNuJWIo.js.map +1 -0
  67. package/dist/chunks/{nl-CmZ3vEvj.js → nl-Mu_KNzli.js} +8 -2
  68. package/dist/chunks/nl-Mu_KNzli.js.map +1 -0
  69. package/dist/chunks/{no-BuxByZpq.js → no-9HMjljBs.js} +7 -2
  70. package/dist/chunks/no-9HMjljBs.js.map +1 -0
  71. package/dist/chunks/no-B5HY_A8_.js +2 -0
  72. package/dist/chunks/no-B5HY_A8_.js.map +1 -0
  73. package/dist/chunks/{pl-jZFCnDb8.js → pl-Cbr2qDwv.js} +7 -2
  74. package/dist/chunks/pl-Cbr2qDwv.js.map +1 -0
  75. package/dist/chunks/pl-ChGLn9Sy.js +2 -0
  76. package/dist/chunks/pl-ChGLn9Sy.js.map +1 -0
  77. package/dist/chunks/port-name-CF4WQQ3-.js +2 -0
  78. package/dist/chunks/port-name-CF4WQQ3-.js.map +1 -0
  79. package/dist/chunks/port-name-ervLBWAQ.js +6 -0
  80. package/dist/chunks/port-name-ervLBWAQ.js.map +1 -0
  81. package/dist/chunks/pt-CDLEktT9.js +2 -0
  82. package/dist/chunks/pt-CDLEktT9.js.map +1 -0
  83. package/dist/chunks/{pt-Cld7MwIW.js → pt-_jirA6IR.js} +8 -2
  84. package/dist/chunks/pt-_jirA6IR.js.map +1 -0
  85. package/dist/chunks/ro-BHCHiXY3.js +2 -0
  86. package/dist/chunks/ro-BHCHiXY3.js.map +1 -0
  87. package/dist/chunks/{ro-CuKDqj3C.js → ro-oZLxhwHc.js} +7 -2
  88. package/dist/chunks/ro-oZLxhwHc.js.map +1 -0
  89. package/dist/chunks/ru-B6HgmINj.js +2 -0
  90. package/dist/chunks/ru-B6HgmINj.js.map +1 -0
  91. package/dist/chunks/{ru-B7cjqJUm.js → ru-C2-sqY7B.js} +15 -2
  92. package/dist/chunks/ru-C2-sqY7B.js.map +1 -0
  93. package/dist/chunks/sv-DoSs4a9n.js +2 -0
  94. package/dist/chunks/sv-DoSs4a9n.js.map +1 -0
  95. package/dist/chunks/{sv-D9y-M1Fo.js → sv-y385MWVy.js} +7 -2
  96. package/dist/chunks/sv-y385MWVy.js.map +1 -0
  97. package/dist/chunks/{th-D9umBjEy.js → th-Bjbv4M1s.js} +7 -2
  98. package/dist/chunks/th-Bjbv4M1s.js.map +1 -0
  99. package/dist/chunks/th-UeweOhwg.js +2 -0
  100. package/dist/chunks/th-UeweOhwg.js.map +1 -0
  101. package/dist/chunks/tr-BbBr5tyB.js +2 -0
  102. package/dist/chunks/tr-BbBr5tyB.js.map +1 -0
  103. package/dist/chunks/{tr-BddMywiw.js → tr-DmHo9F8i.js} +9 -4
  104. package/dist/chunks/tr-DmHo9F8i.js.map +1 -0
  105. package/dist/chunks/uk-CJTA1SJK.js +2 -0
  106. package/dist/chunks/uk-CJTA1SJK.js.map +1 -0
  107. package/dist/chunks/{uk-Dbd31hFt.js → uk-DwvAoTe5.js} +15 -2
  108. package/dist/chunks/uk-DwvAoTe5.js.map +1 -0
  109. package/dist/chunks/{vi-Do3BMOdh.js → vi-BEpwsVLR.js} +7 -2
  110. package/dist/chunks/vi-BEpwsVLR.js.map +1 -0
  111. package/dist/chunks/vi-ZvBo7PbB.js +2 -0
  112. package/dist/chunks/vi-ZvBo7PbB.js.map +1 -0
  113. package/dist/chunks/zh-CPZBEb3d.js +2 -0
  114. package/dist/chunks/zh-CPZBEb3d.js.map +1 -0
  115. package/dist/chunks/{zh-gQSYLZI3.js → zh-DrG18oGe.js} +9 -3
  116. package/dist/chunks/zh-DrG18oGe.js.map +1 -0
  117. package/dist/content/PaywallUI.d.ts +1 -1
  118. package/dist/content/RemoteAuthClient.d.ts +3 -3
  119. package/dist/content/RemoteBillingClient.d.ts +7 -3
  120. package/dist/content/RemoteBillingClient.d.ts.map +1 -1
  121. package/dist/content/RemoteTrialStore.d.ts +2 -2
  122. package/dist/content.cjs +3 -3
  123. package/dist/content.cjs.map +1 -1
  124. package/dist/content.js +1289 -893
  125. package/dist/content.js.map +1 -1
  126. package/dist/offscreen/server.d.ts +3 -3
  127. package/dist/offscreen/server.d.ts.map +1 -1
  128. package/dist/offscreen.cjs +1 -1
  129. package/dist/offscreen.cjs.map +1 -1
  130. package/dist/offscreen.js +9 -9
  131. package/dist/offscreen.js.map +1 -1
  132. package/dist/shared/messages.d.ts +4 -4
  133. package/dist/shared/port-name.d.ts +1 -0
  134. package/dist/shared/port-name.d.ts.map +1 -1
  135. package/dist/sw.cjs +1 -1
  136. package/dist/sw.cjs.map +1 -1
  137. package/dist/sw.js +14 -14
  138. package/dist/sw.js.map +1 -1
  139. package/package.json +3 -3
  140. package/dist/chunks/ar-BUQInJ5a.js +0 -2
  141. package/dist/chunks/ar-BUQInJ5a.js.map +0 -1
  142. package/dist/chunks/ar-nh4l4WDE.js.map +0 -1
  143. package/dist/chunks/chrome-port-CxW3Pwc2.js.map +0 -1
  144. package/dist/chunks/chrome-port-PhlW29BV.js +0 -2
  145. package/dist/chunks/chrome-port-PhlW29BV.js.map +0 -1
  146. package/dist/chunks/cs-2UYO2rWf.js.map +0 -1
  147. package/dist/chunks/cs-i5K4KTFV.js +0 -2
  148. package/dist/chunks/cs-i5K4KTFV.js.map +0 -1
  149. package/dist/chunks/da-BD0O_HfV.js.map +0 -1
  150. package/dist/chunks/da-CZbhtVJO.js +0 -2
  151. package/dist/chunks/da-CZbhtVJO.js.map +0 -1
  152. package/dist/chunks/de-Bc-GoLgC.js +0 -2
  153. package/dist/chunks/de-Bc-GoLgC.js.map +0 -1
  154. package/dist/chunks/de-BkCiXPsn.js.map +0 -1
  155. package/dist/chunks/el-CcMEbl_F.js +0 -2
  156. package/dist/chunks/el-CcMEbl_F.js.map +0 -1
  157. package/dist/chunks/el-cIcxTp07.js.map +0 -1
  158. package/dist/chunks/es-BvYmomAz.js +0 -2
  159. package/dist/chunks/es-BvYmomAz.js.map +0 -1
  160. package/dist/chunks/es-CJBC_jrV.js.map +0 -1
  161. package/dist/chunks/fi-DyV7ynBf.js.map +0 -1
  162. package/dist/chunks/fi-aZR-qmZN.js +0 -2
  163. package/dist/chunks/fi-aZR-qmZN.js.map +0 -1
  164. package/dist/chunks/fr-BLQ4AIu7.js.map +0 -1
  165. package/dist/chunks/fr-BgbFAgHx.js +0 -2
  166. package/dist/chunks/fr-BgbFAgHx.js.map +0 -1
  167. package/dist/chunks/he-Bg-Bqi7r.js.map +0 -1
  168. package/dist/chunks/he-CQ4yCuja.js +0 -2
  169. package/dist/chunks/he-CQ4yCuja.js.map +0 -1
  170. package/dist/chunks/hi-DtUsj1c-.js +0 -2
  171. package/dist/chunks/hi-DtUsj1c-.js.map +0 -1
  172. package/dist/chunks/hi-wQeE43oY.js.map +0 -1
  173. package/dist/chunks/hu-D9qxzu0r.js.map +0 -1
  174. package/dist/chunks/hu-DXtscQ8_.js +0 -2
  175. package/dist/chunks/hu-DXtscQ8_.js.map +0 -1
  176. package/dist/chunks/id-BByOYpeo.js +0 -2
  177. package/dist/chunks/id-BByOYpeo.js.map +0 -1
  178. package/dist/chunks/id-Rx_wYvqy.js.map +0 -1
  179. package/dist/chunks/it-52Ip42pa.js +0 -2
  180. package/dist/chunks/it-52Ip42pa.js.map +0 -1
  181. package/dist/chunks/it-B1SRPZ3e.js.map +0 -1
  182. package/dist/chunks/ja-CMC3Parn.js +0 -2
  183. package/dist/chunks/ja-CMC3Parn.js.map +0 -1
  184. package/dist/chunks/ja-DiItm8te.js.map +0 -1
  185. package/dist/chunks/ko-3qY21q40.js +0 -2
  186. package/dist/chunks/ko-3qY21q40.js.map +0 -1
  187. package/dist/chunks/ko-CdGFWAKX.js.map +0 -1
  188. package/dist/chunks/nl-Borc5nw1.js +0 -2
  189. package/dist/chunks/nl-Borc5nw1.js.map +0 -1
  190. package/dist/chunks/nl-CmZ3vEvj.js.map +0 -1
  191. package/dist/chunks/no-BuxByZpq.js.map +0 -1
  192. package/dist/chunks/no-Do2iGedg.js +0 -2
  193. package/dist/chunks/no-Do2iGedg.js.map +0 -1
  194. package/dist/chunks/pl-jZFCnDb8.js.map +0 -1
  195. package/dist/chunks/pl-mRaky_7k.js +0 -2
  196. package/dist/chunks/pl-mRaky_7k.js.map +0 -1
  197. package/dist/chunks/port-name-BPfQKtdb.js +0 -5
  198. package/dist/chunks/port-name-BPfQKtdb.js.map +0 -1
  199. package/dist/chunks/port-name-qwB109u9.js +0 -2
  200. package/dist/chunks/port-name-qwB109u9.js.map +0 -1
  201. package/dist/chunks/pt-Cld7MwIW.js.map +0 -1
  202. package/dist/chunks/pt-DilDTXfs.js +0 -2
  203. package/dist/chunks/pt-DilDTXfs.js.map +0 -1
  204. package/dist/chunks/ro-CuKDqj3C.js.map +0 -1
  205. package/dist/chunks/ro-DF2uzPIB.js +0 -2
  206. package/dist/chunks/ro-DF2uzPIB.js.map +0 -1
  207. package/dist/chunks/ru-B7cjqJUm.js.map +0 -1
  208. package/dist/chunks/ru-YeaXnTO-.js +0 -2
  209. package/dist/chunks/ru-YeaXnTO-.js.map +0 -1
  210. package/dist/chunks/sv-2pHEvuSe.js +0 -2
  211. package/dist/chunks/sv-2pHEvuSe.js.map +0 -1
  212. package/dist/chunks/sv-D9y-M1Fo.js.map +0 -1
  213. package/dist/chunks/th-D9umBjEy.js.map +0 -1
  214. package/dist/chunks/th-u2QSDF0G.js +0 -2
  215. package/dist/chunks/th-u2QSDF0G.js.map +0 -1
  216. package/dist/chunks/tr-BddMywiw.js.map +0 -1
  217. package/dist/chunks/tr-Bhgm6_ti.js +0 -2
  218. package/dist/chunks/tr-Bhgm6_ti.js.map +0 -1
  219. package/dist/chunks/uk-7vwqsaVK.js +0 -2
  220. package/dist/chunks/uk-7vwqsaVK.js.map +0 -1
  221. package/dist/chunks/uk-Dbd31hFt.js.map +0 -1
  222. package/dist/chunks/vi-CJefLP_g.js +0 -2
  223. package/dist/chunks/vi-CJefLP_g.js.map +0 -1
  224. package/dist/chunks/vi-Do3BMOdh.js.map +0 -1
  225. package/dist/chunks/zh-D5C3BzYL.js +0 -2
  226. package/dist/chunks/zh-D5C3BzYL.js.map +0 -1
  227. package/dist/chunks/zh-gQSYLZI3.js.map +0 -1
@@ -0,0 +1,2 @@
1
+ "use strict";Object.defineProperty(exports,Symbol.toStringTag,{value:"Module"});const t={"anon.heading_default":"متابعة كضيف","anon.try_again":"حاول مرة أخرى","auth.back_to_login":"العودة إلى تسجيل الدخول","auth.check_email_message":"تحقق من بريدك الإلكتروني للحصول على رمز التأكيد.","auth.check_email_title":"تحقق من بريدك الإلكتروني","auth.confirm_email_title":"تأكيد بريدك الإلكتروني","auth.confirmation_code":"رمز التأكيد","auth.continue_with_apple":"المتابعة مع Apple","auth.continue_with_facebook":"متابعة مع Facebook","auth.continue_with_github":"متابعة مع GitHub","auth.continue_with_google":"المتابعة مع Google","auth.create_account":"إنشاء حساب","auth.default_subtitle":"سجّل الدخول للوصول إلى جميع الميزات ومزامنة بياناتك.","auth.email":"عنوان البريد الإلكتروني","auth.email_exists":"يوجد حساب بهذا البريد الإلكتروني بالفعل.","auth.email_not_confirmed":"يرجى تأكيد بريدك الإلكتروني أولاً.","auth.forgot_password":"هل نسيت كلمة المرور؟","auth.forgot_password_title":"هل نسيت كلمة المرور؟","auth.forgot_subtitle":"أدخل بريدك الإلكتروني وسنرسل لك رابط إعادة تعيين كلمة المرور.","auth.generic_error":"حدث خطأ ما","auth.have_account":"لديك حساب؟","auth.hide_password":"إخفاء كلمة المرور","auth.invalid_credentials":"البريد الإلكتروني أو كلمة المرور غير صحيحة","auth.invalid_otp":"الرمز غير صالح أو منتهي الصلاحية.","auth.last_used_no_email":"الأخير","auth.link_purchase_subheading":"سنربط الشراء بحسابك للحفاظ على الوصول.","auth.log_in":"تسجيل الدخول","auth.log_in_link":"تسجيل الدخول","auth.login_continue_purchase":"سجّل الدخول لمتابعة عملية الشراء","auth.network_error":"خطأ في الشبكة. تحقق من اتصالك وحاول مرة أخرى.","auth.no_account":"ليس لديك حساب؟","auth.or":"أو","auth.password":"كلمة المرور","auth.passwords_mismatch":"كلمتا المرور غير متطابقتين","auth.rate_limited":"طلبات كثيرة جدًا. حاول مرة أخرى لاحقًا.","auth.repeat_password":"كرّر كلمة المرور","auth.reset_link_valid":"الرابط صالح لمدة ساعة واحدة.","auth.reset_password_title":"إعادة تعيين كلمة المرور","auth.reset_sent_message":"إذا كان هذا البريد موجودًا، فقد تم إرسال رمز إعادة التعيين.","auth.reset_sent_subtitle":"أرسلنا رابط إعادة تعيين كلمة المرور. اتبع التعليمات في البريد الإلكتروني.","auth.signup_sent_subtitle":"أرسلنا رابط تأكيد إلى بريدك الإلكتروني. انقر عليه لتفعيل حسابك، ثم سجّل الدخول.","auth.restore_purchases_heading":"استعادة المشتريات","auth.restore_purchases_subheading":"يُرجى تسجيل الدخول لاستعادة مشترياتك.","auth.send_reset":"إرسال بريد إعادة التعيين","auth.service_unavailable":"الخدمة غير متاحة مؤقتًا. حاول لاحقًا.","auth.show_password":"إظهار كلمة المرور","auth.sign_out":"تسجيل الخروج","auth.sign_up":"إنشاء حساب","auth.sign_up_link":"إنشاء حساب","auth.signed_in":"تم تسجيل الدخول","auth.signin_failed":"فشل تسجيل الدخول","auth.signup_failed":"فشل التسجيل","auth.verify":"تأكيد","auth.weak_password":"كلمة المرور ضعيفة جدًا.","auth.welcome":"مرحباً!","auth.welcome_signup":"مرحبًا!","countdown.d":"ي","countdown.h":"س","countdown.m":"د","countdown.s":"ث","cta.close":"إغلاق","cta.continue":"متابعة","cta.get_lifetime_access":"احصل على وصول مدى الحياة","cta.get_plan_daily":"احصل على الخطة اليومية","cta.get_plan_monthly":"احصل على الخطة الشهرية","cta.get_plan_weekly":"احصل على الخطة الأسبوعية","cta.get_plan_yearly":"احصل على الخطة السنوية","cta.start_trial":"ابدأ تجربة مجانية لمدة {days} يوم","modal.close_aria":"إغلاق","modal.continue":"متابعة","modal.error_generic":"حدث خطأ ما","modal.loading":"جارٍ التحميل…","modal.purchase_restored_subtitle":"مرحبًا بعودتك — اشتراكك نشط بالفعل.","modal.purchase_restored_title":"تمت استعادة الاشتراك","modal.purchase_success_subtitle":"اشتراكك نشط الآن.","modal.purchase_success_title":"تم استلام الدفع","modal.verifying_subscription":"جارٍ التحقق من اشتراكك…","nav.back":"→ رجوع","nav.back_aria":"رجوع","offer.limited_time":"عرض لفترة محدودة","payment.awaiting_title":"أكمل الدفع في علامة التبويب الجديدة","payment.checking":"جارٍ التحقق…","payment.ive_paid":"لقد دفعت","payment.open_checkout_again":"افتح الدفع مرة أخرى","payment.open_checkout_button":"افتح الدفع","pricing.free_trial_days":"تجربة مجانية لمدة {days} يومًا","pricing.included_per":"متضمن لكل {interval}:","pricing.interval.day":"يوم","pricing.interval.lifetime_short":"مدى الحياة","pricing.interval.month":"شهر","pricing.interval.period":"فترة","pricing.interval.week":"أسبوع","pricing.interval.year":"سنة","pricing.money_back":"ضمان استرداد الأموال لمدة 30 يومًا","pricing.most_popular":"الأكثر شعبية","pricing.no_prices":"لا توجد أسعار متاحة.","pricing.plan_label.daily":"الخطة اليومية","pricing.plan_label.lifetime":"مدى الحياة","pricing.plan_label.monthly":"خطة شهرية","pricing.plan_label.weekly":"خطة أسبوعية","pricing.plan_label.yearly":"خطة سنوية","pricing.plans_aria":"الخطط","session.contact_support":"اتصل بالدعم","session.restore_purchases":"استعادة المشتريات","session.sign_out":"تسجيل الخروج","session.signed_in_as_prefix":"تم تسجيل الدخول باسم","session.signing_out":"جارٍ تسجيل الخروج…","support.attachments_label":"المرفقات","support.close_button":"إغلاق","support.done_button":"تم","support.email_placeholder":"أدخل بريدك الإلكتروني","support.heading":"الدعم","support.instruction":"يُرجى ملء النموذج أدناه لإرسال طلب الدعم.","support.invalid_email":"بريد إلكتروني غير صالح","support.message_length":"1-5000 حرفاً","support.message_placeholder":"أدخل رسالتك","support.required":"مطلوب","support.send_another":"إرسال طلب آخر","support.send_button":"إرسال","support.sending":"جارٍ الإرسال…","support.subject_length":"3-200 حرفاً","support.subject_placeholder":"أدخل الموضوع","support.success_heading":"تم إرسال الطلب","support.success_message_prefix":"لقد تلقينا رسالتك وسنرد على"};exports.default=t;
2
+ //# sourceMappingURL=ar-CViBaj16.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"ar-CViBaj16.js","sources":["../../../sdk/src/ui/i18n/locales/ar.ts"],"sourcesContent":["/**\n * Static-translations для ar. Сгенерировано из:\n * - `online/lang/static-translations.ts` (legacy, через KEY_MAP)\n * - `tools/sdk-translations.mjs` (SDK-specific строки)\n *\n * Не править вручную — изменения теряются при следующем `node tools/gen-locales.mjs`.\n * Чтобы исправить перевод — править legacy/sdk-translations.mjs и регенерить.\n */\nconst ar = {\n 'anon.heading_default': 'متابعة كضيف',\n 'anon.try_again': 'حاول مرة أخرى',\n 'auth.back_to_login': 'العودة إلى تسجيل الدخول',\n 'auth.check_email_message': 'تحقق من بريدك الإلكتروني للحصول على رمز التأكيد.',\n 'auth.check_email_title': 'تحقق من بريدك الإلكتروني',\n 'auth.confirm_email_title': 'تأكيد بريدك الإلكتروني',\n 'auth.confirmation_code': 'رمز التأكيد',\n 'auth.continue_with_apple': 'المتابعة مع Apple',\n 'auth.continue_with_facebook': 'متابعة مع Facebook',\n 'auth.continue_with_github': 'متابعة مع GitHub',\n 'auth.continue_with_google': 'المتابعة مع Google',\n 'auth.create_account': 'إنشاء حساب',\n 'auth.default_subtitle': 'سجّل الدخول للوصول إلى جميع الميزات ومزامنة بياناتك.',\n 'auth.email': 'عنوان البريد الإلكتروني',\n 'auth.email_exists': 'يوجد حساب بهذا البريد الإلكتروني بالفعل.',\n 'auth.email_not_confirmed': 'يرجى تأكيد بريدك الإلكتروني أولاً.',\n 'auth.forgot_password': 'هل نسيت كلمة المرور؟',\n 'auth.forgot_password_title': 'هل نسيت كلمة المرور؟',\n 'auth.forgot_subtitle': 'أدخل بريدك الإلكتروني وسنرسل لك رابط إعادة تعيين كلمة المرور.',\n 'auth.generic_error': 'حدث خطأ ما',\n 'auth.have_account': 'لديك حساب؟',\n 'auth.hide_password': 'إخفاء كلمة المرور',\n 'auth.invalid_credentials': 'البريد الإلكتروني أو كلمة المرور غير صحيحة',\n 'auth.invalid_otp': 'الرمز غير صالح أو منتهي الصلاحية.',\n 'auth.last_used_no_email': 'الأخير',\n 'auth.link_purchase_subheading': 'سنربط الشراء بحسابك للحفاظ على الوصول.',\n 'auth.log_in': 'تسجيل الدخول',\n 'auth.log_in_link': 'تسجيل الدخول',\n 'auth.login_continue_purchase': 'سجّل الدخول لمتابعة عملية الشراء',\n 'auth.network_error': 'خطأ في الشبكة. تحقق من اتصالك وحاول مرة أخرى.',\n 'auth.no_account': 'ليس لديك حساب؟',\n 'auth.or': 'أو',\n 'auth.password': 'كلمة المرور',\n 'auth.passwords_mismatch': 'كلمتا المرور غير متطابقتين',\n 'auth.rate_limited': 'طلبات كثيرة جدًا. حاول مرة أخرى لاحقًا.',\n 'auth.repeat_password': 'كرّر كلمة المرور',\n 'auth.reset_link_valid': 'الرابط صالح لمدة ساعة واحدة.',\n 'auth.reset_password_title': 'إعادة تعيين كلمة المرور',\n 'auth.reset_sent_message': 'إذا كان هذا البريد موجودًا، فقد تم إرسال رمز إعادة التعيين.',\n 'auth.reset_sent_subtitle': 'أرسلنا رابط إعادة تعيين كلمة المرور. اتبع التعليمات في البريد الإلكتروني.',\n 'auth.signup_sent_subtitle': 'أرسلنا رابط تأكيد إلى بريدك الإلكتروني. انقر عليه لتفعيل حسابك، ثم سجّل الدخول.',\n 'auth.restore_purchases_heading': 'استعادة المشتريات',\n 'auth.restore_purchases_subheading': 'يُرجى تسجيل الدخول لاستعادة مشترياتك.',\n 'auth.send_reset': 'إرسال بريد إعادة التعيين',\n 'auth.service_unavailable': 'الخدمة غير متاحة مؤقتًا. حاول لاحقًا.',\n 'auth.show_password': 'إظهار كلمة المرور',\n 'auth.sign_out': 'تسجيل الخروج',\n 'auth.sign_up': 'إنشاء حساب',\n 'auth.sign_up_link': 'إنشاء حساب',\n 'auth.signed_in': 'تم تسجيل الدخول',\n 'auth.signin_failed': 'فشل تسجيل الدخول',\n 'auth.signup_failed': 'فشل التسجيل',\n 'auth.verify': 'تأكيد',\n 'auth.weak_password': 'كلمة المرور ضعيفة جدًا.',\n 'auth.welcome': 'مرحباً!',\n 'auth.welcome_signup': 'مرحبًا!',\n 'countdown.d': 'ي',\n 'countdown.h': 'س',\n 'countdown.m': 'د',\n 'countdown.s': 'ث',\n 'cta.close': 'إغلاق',\n 'cta.continue': 'متابعة',\n 'cta.get_lifetime_access': 'احصل على وصول مدى الحياة',\n 'cta.get_plan_daily': 'احصل على الخطة اليومية',\n 'cta.get_plan_monthly': 'احصل على الخطة الشهرية',\n 'cta.get_plan_weekly': 'احصل على الخطة الأسبوعية',\n 'cta.get_plan_yearly': 'احصل على الخطة السنوية',\n 'cta.start_trial': 'ابدأ تجربة مجانية لمدة {days} يوم',\n 'modal.close_aria': 'إغلاق',\n 'modal.continue': 'متابعة',\n 'modal.error_generic': 'حدث خطأ ما',\n 'modal.loading': 'جارٍ التحميل…',\n 'modal.purchase_restored_subtitle': 'مرحبًا بعودتك — اشتراكك نشط بالفعل.',\n 'modal.purchase_restored_title': 'تمت استعادة الاشتراك',\n 'modal.purchase_success_subtitle': 'اشتراكك نشط الآن.',\n 'modal.purchase_success_title': 'تم استلام الدفع',\n 'modal.verifying_subscription': 'جارٍ التحقق من اشتراكك…',\n 'nav.back': '→ رجوع',\n 'nav.back_aria': 'رجوع',\n 'offer.limited_time': 'عرض لفترة محدودة',\n 'payment.awaiting_title': 'أكمل الدفع في علامة التبويب الجديدة',\n 'payment.checking': 'جارٍ التحقق…',\n 'payment.ive_paid': 'لقد دفعت',\n 'payment.open_checkout_again': 'افتح الدفع مرة أخرى',\n 'payment.open_checkout_button': 'افتح الدفع',\n 'pricing.free_trial_days': 'تجربة مجانية لمدة {days} يومًا',\n 'pricing.included_per': 'متضمن لكل {interval}:',\n 'pricing.interval.day': 'يوم',\n 'pricing.interval.lifetime_short': 'مدى الحياة',\n 'pricing.interval.month': 'شهر',\n 'pricing.interval.period': 'فترة',\n 'pricing.interval.week': 'أسبوع',\n 'pricing.interval.year': 'سنة',\n 'pricing.money_back': 'ضمان استرداد الأموال لمدة 30 يومًا',\n 'pricing.most_popular': 'الأكثر شعبية',\n 'pricing.no_prices': 'لا توجد أسعار متاحة.',\n 'pricing.plan_label.daily': 'الخطة اليومية',\n 'pricing.plan_label.lifetime': 'مدى الحياة',\n 'pricing.plan_label.monthly': 'خطة شهرية',\n 'pricing.plan_label.weekly': 'خطة أسبوعية',\n 'pricing.plan_label.yearly': 'خطة سنوية',\n 'pricing.plans_aria': 'الخطط',\n 'session.contact_support': 'اتصل بالدعم',\n 'session.restore_purchases': 'استعادة المشتريات',\n 'session.sign_out': 'تسجيل الخروج',\n 'session.signed_in_as_prefix': 'تم تسجيل الدخول باسم',\n 'session.signing_out': 'جارٍ تسجيل الخروج…',\n 'support.attachments_label': 'المرفقات',\n 'support.close_button': 'إغلاق',\n 'support.done_button': 'تم',\n 'support.email_placeholder': 'أدخل بريدك الإلكتروني',\n 'support.heading': 'الدعم',\n 'support.instruction': 'يُرجى ملء النموذج أدناه لإرسال طلب الدعم.',\n 'support.invalid_email': 'بريد إلكتروني غير صالح',\n 'support.message_length': '1-5000 حرفاً',\n 'support.message_placeholder': 'أدخل رسالتك',\n 'support.required': 'مطلوب',\n 'support.send_another': 'إرسال طلب آخر',\n 'support.send_button': 'إرسال',\n 'support.sending': 'جارٍ الإرسال…',\n 'support.subject_length': '3-200 حرفاً',\n 'support.subject_placeholder': 'أدخل الموضوع',\n 'support.success_heading': 'تم إرسال الطلب',\n 'support.success_message_prefix': 'لقد تلقينا رسالتك وسنرد على'\n} as const;\n\nexport default ar;\n"],"names":["ar"],"mappings":"gFAQA,MAAMA,EAAK,CACT,uBAAwB,cACxB,iBAAkB,gBAClB,qBAAsB,0BACtB,2BAA4B,mDAC5B,yBAA0B,2BAC1B,2BAA4B,yBAC5B,yBAA0B,cAC1B,2BAA4B,oBAC5B,8BAA+B,qBAC/B,4BAA6B,mBAC7B,4BAA6B,qBAC7B,sBAAuB,aACvB,wBAAyB,uDACzB,aAAc,0BACd,oBAAqB,2CACrB,2BAA4B,qCAC5B,uBAAwB,uBACxB,6BAA8B,uBAC9B,uBAAwB,gEACxB,qBAAsB,aACtB,oBAAqB,aACrB,qBAAsB,oBACtB,2BAA4B,6CAC5B,mBAAoB,oCACpB,0BAA2B,SAC3B,gCAAiC,yCACjC,cAAe,eACf,mBAAoB,eACpB,+BAAgC,mCAChC,qBAAsB,gDACtB,kBAAmB,iBACnB,UAAW,KACX,gBAAiB,cACjB,0BAA2B,6BAC3B,oBAAqB,0CACrB,uBAAwB,mBACxB,wBAAyB,+BACzB,4BAA6B,0BAC7B,0BAA2B,8DAC3B,2BAA4B,4EAC5B,4BAA6B,kFAC7B,iCAAkC,oBAClC,oCAAqC,wCACrC,kBAAmB,2BACnB,2BAA4B,wCAC5B,qBAAsB,oBACtB,gBAAiB,eACjB,eAAgB,aAChB,oBAAqB,aACrB,iBAAkB,kBAClB,qBAAsB,mBACtB,qBAAsB,cACtB,cAAe,QACf,qBAAsB,0BACtB,eAAgB,UAChB,sBAAuB,UACvB,cAAe,IACf,cAAe,IACf,cAAe,IACf,cAAe,IACf,YAAa,QACb,eAAgB,SAChB,0BAA2B,2BAC3B,qBAAsB,yBACtB,uBAAwB,yBACxB,sBAAuB,2BACvB,sBAAuB,yBACvB,kBAAmB,oCACnB,mBAAoB,QACpB,iBAAkB,SAClB,sBAAuB,aACvB,gBAAiB,gBACjB,mCAAoC,sCACpC,gCAAiC,uBACjC,kCAAmC,oBACnC,+BAAgC,kBAChC,+BAAgC,0BAChC,WAAY,SACZ,gBAAiB,OACjB,qBAAsB,mBACtB,yBAA0B,sCAC1B,mBAAoB,eACpB,mBAAoB,WACpB,8BAA+B,sBAC/B,+BAAgC,aAChC,0BAA2B,iCAC3B,uBAAwB,wBACxB,uBAAwB,MACxB,kCAAmC,aACnC,yBAA0B,MAC1B,0BAA2B,OAC3B,wBAAyB,QACzB,wBAAyB,MACzB,qBAAsB,qCACtB,uBAAwB,eACxB,oBAAqB,uBACrB,2BAA4B,gBAC5B,8BAA+B,aAC/B,6BAA8B,YAC9B,4BAA6B,cAC7B,4BAA6B,YAC7B,qBAAsB,QACtB,0BAA2B,cAC3B,4BAA6B,oBAC7B,mBAAoB,eACpB,8BAA+B,uBAC/B,sBAAuB,qBACvB,4BAA6B,WAC7B,uBAAwB,QACxB,sBAAuB,KACvB,4BAA6B,wBAC7B,kBAAmB,QACnB,sBAAuB,4CACvB,wBAAyB,yBACzB,yBAA0B,eAC1B,8BAA+B,cAC/B,mBAAoB,QACpB,uBAAwB,gBACxB,sBAAuB,QACvB,kBAAmB,gBACnB,yBAA0B,cAC1B,8BAA+B,eAC/B,0BAA2B,iBAC3B,iCAAkC,6BACpC"}
@@ -1,8 +1,10 @@
1
- const e = {
1
+ const t = {
2
2
  "anon.heading_default": "متابعة كضيف",
3
3
  "anon.try_again": "حاول مرة أخرى",
4
+ "auth.back_to_login": "العودة إلى تسجيل الدخول",
4
5
  "auth.check_email_message": "تحقق من بريدك الإلكتروني للحصول على رمز التأكيد.",
5
6
  "auth.check_email_title": "تحقق من بريدك الإلكتروني",
7
+ "auth.confirm_email_title": "تأكيد بريدك الإلكتروني",
6
8
  "auth.confirmation_code": "رمز التأكيد",
7
9
  "auth.continue_with_apple": "المتابعة مع Apple",
8
10
  "auth.continue_with_facebook": "متابعة مع Facebook",
@@ -31,10 +33,13 @@ const e = {
31
33
  "auth.or": "أو",
32
34
  "auth.password": "كلمة المرور",
33
35
  "auth.passwords_mismatch": "كلمتا المرور غير متطابقتين",
34
- "auth.rate_limited": "طلبات كثيرة جدًا. حاول مرة أخرى بعد قليل.",
36
+ "auth.rate_limited": "طلبات كثيرة جدًا. حاول مرة أخرى لاحقًا.",
35
37
  "auth.repeat_password": "كرّر كلمة المرور",
38
+ "auth.reset_link_valid": "الرابط صالح لمدة ساعة واحدة.",
36
39
  "auth.reset_password_title": "إعادة تعيين كلمة المرور",
37
40
  "auth.reset_sent_message": "إذا كان هذا البريد موجودًا، فقد تم إرسال رمز إعادة التعيين.",
41
+ "auth.reset_sent_subtitle": "أرسلنا رابط إعادة تعيين كلمة المرور. اتبع التعليمات في البريد الإلكتروني.",
42
+ "auth.signup_sent_subtitle": "أرسلنا رابط تأكيد إلى بريدك الإلكتروني. انقر عليه لتفعيل حسابك، ثم سجّل الدخول.",
38
43
  "auth.restore_purchases_heading": "استعادة المشتريات",
39
44
  "auth.restore_purchases_subheading": "يُرجى تسجيل الدخول لاستعادة مشترياتك.",
40
45
  "auth.send_reset": "إرسال بريد إعادة التعيين",
@@ -120,6 +125,6 @@ const e = {
120
125
  "support.success_message_prefix": "لقد تلقينا رسالتك وسنرد على"
121
126
  };
122
127
  export {
123
- e as default
128
+ t as default
124
129
  };
125
- //# sourceMappingURL=ar-nh4l4WDE.js.map
130
+ //# sourceMappingURL=ar-ClwBmll7.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"ar-ClwBmll7.js","sources":["../../../sdk/src/ui/i18n/locales/ar.ts"],"sourcesContent":["/**\n * Static-translations для ar. Сгенерировано из:\n * - `online/lang/static-translations.ts` (legacy, через KEY_MAP)\n * - `tools/sdk-translations.mjs` (SDK-specific строки)\n *\n * Не править вручную — изменения теряются при следующем `node tools/gen-locales.mjs`.\n * Чтобы исправить перевод — править legacy/sdk-translations.mjs и регенерить.\n */\nconst ar = {\n 'anon.heading_default': 'متابعة كضيف',\n 'anon.try_again': 'حاول مرة أخرى',\n 'auth.back_to_login': 'العودة إلى تسجيل الدخول',\n 'auth.check_email_message': 'تحقق من بريدك الإلكتروني للحصول على رمز التأكيد.',\n 'auth.check_email_title': 'تحقق من بريدك الإلكتروني',\n 'auth.confirm_email_title': 'تأكيد بريدك الإلكتروني',\n 'auth.confirmation_code': 'رمز التأكيد',\n 'auth.continue_with_apple': 'المتابعة مع Apple',\n 'auth.continue_with_facebook': 'متابعة مع Facebook',\n 'auth.continue_with_github': 'متابعة مع GitHub',\n 'auth.continue_with_google': 'المتابعة مع Google',\n 'auth.create_account': 'إنشاء حساب',\n 'auth.default_subtitle': 'سجّل الدخول للوصول إلى جميع الميزات ومزامنة بياناتك.',\n 'auth.email': 'عنوان البريد الإلكتروني',\n 'auth.email_exists': 'يوجد حساب بهذا البريد الإلكتروني بالفعل.',\n 'auth.email_not_confirmed': 'يرجى تأكيد بريدك الإلكتروني أولاً.',\n 'auth.forgot_password': 'هل نسيت كلمة المرور؟',\n 'auth.forgot_password_title': 'هل نسيت كلمة المرور؟',\n 'auth.forgot_subtitle': 'أدخل بريدك الإلكتروني وسنرسل لك رابط إعادة تعيين كلمة المرور.',\n 'auth.generic_error': 'حدث خطأ ما',\n 'auth.have_account': 'لديك حساب؟',\n 'auth.hide_password': 'إخفاء كلمة المرور',\n 'auth.invalid_credentials': 'البريد الإلكتروني أو كلمة المرور غير صحيحة',\n 'auth.invalid_otp': 'الرمز غير صالح أو منتهي الصلاحية.',\n 'auth.last_used_no_email': 'الأخير',\n 'auth.link_purchase_subheading': 'سنربط الشراء بحسابك للحفاظ على الوصول.',\n 'auth.log_in': 'تسجيل الدخول',\n 'auth.log_in_link': 'تسجيل الدخول',\n 'auth.login_continue_purchase': 'سجّل الدخول لمتابعة عملية الشراء',\n 'auth.network_error': 'خطأ في الشبكة. تحقق من اتصالك وحاول مرة أخرى.',\n 'auth.no_account': 'ليس لديك حساب؟',\n 'auth.or': 'أو',\n 'auth.password': 'كلمة المرور',\n 'auth.passwords_mismatch': 'كلمتا المرور غير متطابقتين',\n 'auth.rate_limited': 'طلبات كثيرة جدًا. حاول مرة أخرى لاحقًا.',\n 'auth.repeat_password': 'كرّر كلمة المرور',\n 'auth.reset_link_valid': 'الرابط صالح لمدة ساعة واحدة.',\n 'auth.reset_password_title': 'إعادة تعيين كلمة المرور',\n 'auth.reset_sent_message': 'إذا كان هذا البريد موجودًا، فقد تم إرسال رمز إعادة التعيين.',\n 'auth.reset_sent_subtitle': 'أرسلنا رابط إعادة تعيين كلمة المرور. اتبع التعليمات في البريد الإلكتروني.',\n 'auth.signup_sent_subtitle': 'أرسلنا رابط تأكيد إلى بريدك الإلكتروني. انقر عليه لتفعيل حسابك، ثم سجّل الدخول.',\n 'auth.restore_purchases_heading': 'استعادة المشتريات',\n 'auth.restore_purchases_subheading': 'يُرجى تسجيل الدخول لاستعادة مشترياتك.',\n 'auth.send_reset': 'إرسال بريد إعادة التعيين',\n 'auth.service_unavailable': 'الخدمة غير متاحة مؤقتًا. حاول لاحقًا.',\n 'auth.show_password': 'إظهار كلمة المرور',\n 'auth.sign_out': 'تسجيل الخروج',\n 'auth.sign_up': 'إنشاء حساب',\n 'auth.sign_up_link': 'إنشاء حساب',\n 'auth.signed_in': 'تم تسجيل الدخول',\n 'auth.signin_failed': 'فشل تسجيل الدخول',\n 'auth.signup_failed': 'فشل التسجيل',\n 'auth.verify': 'تأكيد',\n 'auth.weak_password': 'كلمة المرور ضعيفة جدًا.',\n 'auth.welcome': 'مرحباً!',\n 'auth.welcome_signup': 'مرحبًا!',\n 'countdown.d': 'ي',\n 'countdown.h': 'س',\n 'countdown.m': 'د',\n 'countdown.s': 'ث',\n 'cta.close': 'إغلاق',\n 'cta.continue': 'متابعة',\n 'cta.get_lifetime_access': 'احصل على وصول مدى الحياة',\n 'cta.get_plan_daily': 'احصل على الخطة اليومية',\n 'cta.get_plan_monthly': 'احصل على الخطة الشهرية',\n 'cta.get_plan_weekly': 'احصل على الخطة الأسبوعية',\n 'cta.get_plan_yearly': 'احصل على الخطة السنوية',\n 'cta.start_trial': 'ابدأ تجربة مجانية لمدة {days} يوم',\n 'modal.close_aria': 'إغلاق',\n 'modal.continue': 'متابعة',\n 'modal.error_generic': 'حدث خطأ ما',\n 'modal.loading': 'جارٍ التحميل…',\n 'modal.purchase_restored_subtitle': 'مرحبًا بعودتك — اشتراكك نشط بالفعل.',\n 'modal.purchase_restored_title': 'تمت استعادة الاشتراك',\n 'modal.purchase_success_subtitle': 'اشتراكك نشط الآن.',\n 'modal.purchase_success_title': 'تم استلام الدفع',\n 'modal.verifying_subscription': 'جارٍ التحقق من اشتراكك…',\n 'nav.back': '→ رجوع',\n 'nav.back_aria': 'رجوع',\n 'offer.limited_time': 'عرض لفترة محدودة',\n 'payment.awaiting_title': 'أكمل الدفع في علامة التبويب الجديدة',\n 'payment.checking': 'جارٍ التحقق…',\n 'payment.ive_paid': 'لقد دفعت',\n 'payment.open_checkout_again': 'افتح الدفع مرة أخرى',\n 'payment.open_checkout_button': 'افتح الدفع',\n 'pricing.free_trial_days': 'تجربة مجانية لمدة {days} يومًا',\n 'pricing.included_per': 'متضمن لكل {interval}:',\n 'pricing.interval.day': 'يوم',\n 'pricing.interval.lifetime_short': 'مدى الحياة',\n 'pricing.interval.month': 'شهر',\n 'pricing.interval.period': 'فترة',\n 'pricing.interval.week': 'أسبوع',\n 'pricing.interval.year': 'سنة',\n 'pricing.money_back': 'ضمان استرداد الأموال لمدة 30 يومًا',\n 'pricing.most_popular': 'الأكثر شعبية',\n 'pricing.no_prices': 'لا توجد أسعار متاحة.',\n 'pricing.plan_label.daily': 'الخطة اليومية',\n 'pricing.plan_label.lifetime': 'مدى الحياة',\n 'pricing.plan_label.monthly': 'خطة شهرية',\n 'pricing.plan_label.weekly': 'خطة أسبوعية',\n 'pricing.plan_label.yearly': 'خطة سنوية',\n 'pricing.plans_aria': 'الخطط',\n 'session.contact_support': 'اتصل بالدعم',\n 'session.restore_purchases': 'استعادة المشتريات',\n 'session.sign_out': 'تسجيل الخروج',\n 'session.signed_in_as_prefix': 'تم تسجيل الدخول باسم',\n 'session.signing_out': 'جارٍ تسجيل الخروج…',\n 'support.attachments_label': 'المرفقات',\n 'support.close_button': 'إغلاق',\n 'support.done_button': 'تم',\n 'support.email_placeholder': 'أدخل بريدك الإلكتروني',\n 'support.heading': 'الدعم',\n 'support.instruction': 'يُرجى ملء النموذج أدناه لإرسال طلب الدعم.',\n 'support.invalid_email': 'بريد إلكتروني غير صالح',\n 'support.message_length': '1-5000 حرفاً',\n 'support.message_placeholder': 'أدخل رسالتك',\n 'support.required': 'مطلوب',\n 'support.send_another': 'إرسال طلب آخر',\n 'support.send_button': 'إرسال',\n 'support.sending': 'جارٍ الإرسال…',\n 'support.subject_length': '3-200 حرفاً',\n 'support.subject_placeholder': 'أدخل الموضوع',\n 'support.success_heading': 'تم إرسال الطلب',\n 'support.success_message_prefix': 'لقد تلقينا رسالتك وسنرد على'\n} as const;\n\nexport default ar;\n"],"names":["ar"],"mappings":"AAQA,MAAMA,IAAK;AAAA,EACT,wBAAwB;AAAA,EACxB,kBAAkB;AAAA,EAClB,sBAAsB;AAAA,EACtB,4BAA4B;AAAA,EAC5B,0BAA0B;AAAA,EAC1B,4BAA4B;AAAA,EAC5B,0BAA0B;AAAA,EAC1B,4BAA4B;AAAA,EAC5B,+BAA+B;AAAA,EAC/B,6BAA6B;AAAA,EAC7B,6BAA6B;AAAA,EAC7B,uBAAuB;AAAA,EACvB,yBAAyB;AAAA,EACzB,cAAc;AAAA,EACd,qBAAqB;AAAA,EACrB,4BAA4B;AAAA,EAC5B,wBAAwB;AAAA,EACxB,8BAA8B;AAAA,EAC9B,wBAAwB;AAAA,EACxB,sBAAsB;AAAA,EACtB,qBAAqB;AAAA,EACrB,sBAAsB;AAAA,EACtB,4BAA4B;AAAA,EAC5B,oBAAoB;AAAA,EACpB,2BAA2B;AAAA,EAC3B,iCAAiC;AAAA,EACjC,eAAe;AAAA,EACf,oBAAoB;AAAA,EACpB,gCAAgC;AAAA,EAChC,sBAAsB;AAAA,EACtB,mBAAmB;AAAA,EACnB,WAAW;AAAA,EACX,iBAAiB;AAAA,EACjB,2BAA2B;AAAA,EAC3B,qBAAqB;AAAA,EACrB,wBAAwB;AAAA,EACxB,yBAAyB;AAAA,EACzB,6BAA6B;AAAA,EAC7B,2BAA2B;AAAA,EAC3B,4BAA4B;AAAA,EAC5B,6BAA6B;AAAA,EAC7B,kCAAkC;AAAA,EAClC,qCAAqC;AAAA,EACrC,mBAAmB;AAAA,EACnB,4BAA4B;AAAA,EAC5B,sBAAsB;AAAA,EACtB,iBAAiB;AAAA,EACjB,gBAAgB;AAAA,EAChB,qBAAqB;AAAA,EACrB,kBAAkB;AAAA,EAClB,sBAAsB;AAAA,EACtB,sBAAsB;AAAA,EACtB,eAAe;AAAA,EACf,sBAAsB;AAAA,EACtB,gBAAgB;AAAA,EAChB,uBAAuB;AAAA,EACvB,eAAe;AAAA,EACf,eAAe;AAAA,EACf,eAAe;AAAA,EACf,eAAe;AAAA,EACf,aAAa;AAAA,EACb,gBAAgB;AAAA,EAChB,2BAA2B;AAAA,EAC3B,sBAAsB;AAAA,EACtB,wBAAwB;AAAA,EACxB,uBAAuB;AAAA,EACvB,uBAAuB;AAAA,EACvB,mBAAmB;AAAA,EACnB,oBAAoB;AAAA,EACpB,kBAAkB;AAAA,EAClB,uBAAuB;AAAA,EACvB,iBAAiB;AAAA,EACjB,oCAAoC;AAAA,EACpC,iCAAiC;AAAA,EACjC,mCAAmC;AAAA,EACnC,gCAAgC;AAAA,EAChC,gCAAgC;AAAA,EAChC,YAAY;AAAA,EACZ,iBAAiB;AAAA,EACjB,sBAAsB;AAAA,EACtB,0BAA0B;AAAA,EAC1B,oBAAoB;AAAA,EACpB,oBAAoB;AAAA,EACpB,+BAA+B;AAAA,EAC/B,gCAAgC;AAAA,EAChC,2BAA2B;AAAA,EAC3B,wBAAwB;AAAA,EACxB,wBAAwB;AAAA,EACxB,mCAAmC;AAAA,EACnC,0BAA0B;AAAA,EAC1B,2BAA2B;AAAA,EAC3B,yBAAyB;AAAA,EACzB,yBAAyB;AAAA,EACzB,sBAAsB;AAAA,EACtB,wBAAwB;AAAA,EACxB,qBAAqB;AAAA,EACrB,4BAA4B;AAAA,EAC5B,+BAA+B;AAAA,EAC/B,8BAA8B;AAAA,EAC9B,6BAA6B;AAAA,EAC7B,6BAA6B;AAAA,EAC7B,sBAAsB;AAAA,EACtB,2BAA2B;AAAA,EAC3B,6BAA6B;AAAA,EAC7B,oBAAoB;AAAA,EACpB,+BAA+B;AAAA,EAC/B,uBAAuB;AAAA,EACvB,6BAA6B;AAAA,EAC7B,wBAAwB;AAAA,EACxB,uBAAuB;AAAA,EACvB,6BAA6B;AAAA,EAC7B,mBAAmB;AAAA,EACnB,uBAAuB;AAAA,EACvB,yBAAyB;AAAA,EACzB,0BAA0B;AAAA,EAC1B,+BAA+B;AAAA,EAC/B,oBAAoB;AAAA,EACpB,wBAAwB;AAAA,EACxB,uBAAuB;AAAA,EACvB,mBAAmB;AAAA,EACnB,0BAA0B;AAAA,EAC1B,+BAA+B;AAAA,EAC/B,2BAA2B;AAAA,EAC3B,kCAAkC;AACpC;"}
@@ -0,0 +1,2 @@
1
+ "use strict";class o extends Error{constructor(t,e,s={}){super(e),this.name="PaywallError",this.code=t,this.status=s.status,this.cause=s.cause}}class H extends o{constructor(t){super("not_enough_queries",t.message??"Not enough queries",{status:402}),this.name="QuotaExceededError",this.balances=t.balances,this.queryType=t.queryType,this.currentBalance=t.currentBalance}}const m="3.0.0-alpha.0";class P{constructor(t){this.opts=t}async request(t,e={}){const s=new URL(t,this.opts.apiOrigin).toString(),a=this.opts.fetch??fetch,n=new Headers(e.headers);n.set("Accept","application/json"),n.set("X-SDK-Version",m),n.set("X-Paywall-Id",this.opts.paywallId),this.opts.capabilities?.length&&n.set("X-SDK-Capabilities",this.opts.capabilities.join(","));const r=await this.opts.getAuthToken?.();r&&n.set("Authorization",`Bearer ${r}`);const h=typeof FormData<"u"&&e.body instanceof FormData;e.body&&!n.has("Content-Type")&&!h&&n.set("Content-Type","application/json");let f;try{f=await a(s,{...e,headers:n,credentials:"omit"})}catch(c){throw(c&&typeof c=="object"&&"name"in c?c.name:void 0)==="AbortError"?new o("aborted","Request aborted",{cause:c}):new o("network_error","Network request failed",{cause:c})}const u=(f.headers.get("content-type")??"").includes("application/json")?await f.json().catch(()=>null):null;if(!f.ok){const c=u&&typeof u=="object"&&"code"in u&&String(u.code)||`http_${f.status}`,g=u&&typeof u=="object"&&"message"in u&&String(u.message)||f.statusText||"Request failed";throw new o(c,g,{status:f.status,cause:u})}return u}}function J(){return typeof chrome<"u"&&!!chrome?.storage?.local&&!!chrome?.runtime?.id}const V={getItem(i){return new Promise(t=>{chrome.storage.local.get([i],e=>{const s=e[i];t(typeof s=="string"?s:null)})})},setItem(i,t){return new Promise(e=>{chrome.storage.local.set({[i]:t},()=>e())})},removeItem(i){return new Promise(t=>{chrome.storage.local.remove([i],()=>t())})},watch(i,t){const e=chrome?.storage?.onChanged;if(!e)return()=>{};const s=(a,n)=>{if(n!=="local")return;const r=a[i];r&&t(typeof r.newValue=="string"?r.newValue:null)};return e.addListener(s),()=>e.removeListener(s)}},j={async getItem(i){try{return window.localStorage.getItem(i)}catch{return null}},async setItem(i,t){try{window.localStorage.setItem(i,t)}catch{}},async removeItem(i){try{window.localStorage.removeItem(i)}catch{}},watch(i,t){if(typeof window>"u")return()=>{};const e=s=>{s.storageArea===window.localStorage&&s.key===i&&t(s.newValue)};return window.addEventListener("storage",e),()=>window.removeEventListener("storage",e)}},I=new Map,X={async getItem(i){return I.get(i)??null},async setItem(i,t){I.set(i,t)},async removeItem(i){I.delete(i)}};function R(i){return i||(J()?V:typeof window<"u"&&"localStorage"in window?j:X)}const d={visitorId:"pw-visitor-id",lastLoginMethod:i=>`pw-${i}-last-login-method`,lastLoginEmail:i=>`pw-${i}-last-login-email`,userState:(i,t)=>`pw-${i}-${t}-user-v1`,authSession:i=>`pw-${i}-auth-v1`,anonRefreshToken:i=>`pw-${i}-anon-rt-v1`,bootstrap:i=>`pw-${i}-bootstrap-v1`,balances:(i,t)=>`pw-${i}-${t}-balances-v1`};function K(){const i=typeof globalThis<"u"?globalThis.crypto:void 0;if(i&&typeof i.randomUUID=="function")return i.randomUUID();const t=new Uint8Array(16);if(i&&typeof i.getRandomValues=="function")i.getRandomValues(t);else for(let s=0;s<16;s++)t[s]=Math.floor(Math.random()*256);t[6]=t[6]&15|64,t[8]=t[8]&63|128;const e=Array.from(t,s=>s.toString(16).padStart(2,"0")).join("");return`${e.slice(0,8)}-${e.slice(8,12)}-${e.slice(12,16)}-${e.slice(16,20)}-${e.slice(20)}`}async function B(i){try{const e=await i.getItem(d.visitorId);if(e&&typeof e=="string"&&e.length>=16)return e}catch{}const t=K();try{await i.setItem(d.visitorId,t)}catch{}return t}function D(i){const t=new Uint8Array(i),e=typeof globalThis<"u"?globalThis.crypto:void 0;if(e&&typeof e.getRandomValues=="function")e.getRandomValues(t);else for(let s=0;s<i;s++)t[s]=Math.floor(Math.random()*256);return t}function _(i){let t="";for(let e=0;e<i.length;e++)t+=String.fromCharCode(i[e]);return btoa(t).replace(/\+/g,"-").replace(/\//g,"_").replace(/=+$/,"")}function G(){return _(D(64))}async function z(i){const t=new TextEncoder().encode(i),e=globalThis.crypto;if(!e?.subtle?.digest)throw new Error("crypto.subtle is required for PKCE");const s=await e.subtle.digest("SHA-256",t);return _(new Uint8Array(s))}function Q(){return _(D(16))}const W=6e4,Y=600*1e3;class Z{constructor(t){if(this.session=null,this.inflightRefresh=null,this.inflightAnonSignin=null,this.listeners=new Set,this.storageUnwatch=null,this.destroyed=!1,this.oauthFlows=new Map,!t.paywallId)throw new o("invalid_config","paywallId is required");if(!t.apiOrigin)throw new o("invalid_config","apiOrigin is required. Pass the paywall custom_domain configured in the platform.");this.paywallId=t.paywallId,this.apiOrigin=t.apiOrigin,this.storage=R(t.storage),this.api=new P({apiOrigin:this.apiOrigin,paywallId:t.paywallId,fetch:t.fetch}),this.openPopup=t.openPopup??((e,s)=>typeof window>"u"?null:window.open(e,s,"width=480,height=640,popup=yes")),this.hydrated=this.hydrate(),this.startStorageWatch()}startStorageWatch(){typeof this.storage.watch=="function"&&(this.storageUnwatch=this.storage.watch(this.storageKey(),t=>{this.applyExternalSession(t)}))}async applyExternalSession(t){if(!this.destroyed&&(await this.hydrated,!this.destroyed)){if(t==null){this.session&&this.setSession(null,{skipPersist:!0,event:"SIGNED_OUT"});return}try{const e=JSON.parse(t);if(!e||typeof e.access_token!="string"||typeof e.refresh_token!="string"||typeof e.expires_at!="number"||!e.user)return;const s=!this.session||this.session.user.id!==e.user.id?"SIGNED_IN":"TOKEN_REFRESHED";this.setSession(e,{skipPersist:!0,event:s})}catch{}}}ready(){return this.hydrated}getCachedSession(){return this.session}getCachedUser(){return this.session?.user??null}async getAccessToken(){if(await this.hydrated,!this.session&&(await this.rehydrateFromStorage(),!this.session))return null;if(this.isFresh(this.session))return this.session.access_token;try{return(await this.refresh())?.access_token??null}catch{return this.session?.access_token??null}}async signInWithEmail(t){await this.hydrated;const e=await this.readVisitorId(),s={};t.idempotencyKey&&(s["Idempotency-Key"]=t.idempotencyKey);const a=await this.api.request(`/api/v1/paywall/${this.paywallId}/auth/email/signin`,{method:"POST",headers:Object.keys(s).length?s:void 0,body:JSON.stringify({email:t.email,password:t.password,visitor_id:e,user_meta:t.userMeta})}),n=this.toSession(a,a.user);return this.setSession(n,{event:"SIGNED_IN"}),this.recordLastLogin("email",t.email),n}async signUp(t){await this.hydrated;const e=await this.readVisitorId(),s={};t.idempotencyKey&&(s["Idempotency-Key"]=t.idempotencyKey);const a=await this.api.request(`/api/v1/paywall/${this.paywallId}/auth/email/signup`,{method:"POST",headers:Object.keys(s).length?s:void 0,body:JSON.stringify({email:t.email,password:t.password,visitor_id:e,user_meta:t.userMeta})});if(a.status==="confirmation_required")return this.recordLastLogin("email",t.email),{kind:"confirmation_required",user:a.user};const n=this.toSession(a,a.user);return this.setSession(n,{event:"SIGNED_IN"}),this.recordLastLogin("email",t.email),{kind:"signed_in",session:n}}async resendConfirmation(t){await this.hydrated;const e={};t.idempotencyKey&&(e["Idempotency-Key"]=t.idempotencyKey),await this.api.request(`/api/v1/paywall/${this.paywallId}/auth/email/resend`,{method:"POST",headers:Object.keys(e).length?e:void 0,body:JSON.stringify({email:t.email})})}async sendOtp(t){await this.hydrated,await this.api.request(`/api/v1/paywall/${this.paywallId}/auth/otp/send`,{method:"POST",body:JSON.stringify({email:t.email,create_user:t.createUser??!0,user_meta:t.userMeta})})}async verifyOtp(t){await this.hydrated;const e=await this.readVisitorId(),s=await this.api.request(`/api/v1/paywall/${this.paywallId}/auth/otp/verify`,{method:"POST",body:JSON.stringify({email:t.email,token:t.token,type:t.type??"email",visitor_id:e,user_meta:t.userMeta})}),a=this.toSession(s,s.user),n=t.type==="recovery"?"PASSWORD_RECOVERY":"SIGNED_IN";return this.setSession(a,{event:n}),a}async requestPasswordReset(t){await this.hydrated,await this.api.request(`/api/v1/paywall/${this.paywallId}/auth/password/request-reset`,{method:"POST",body:JSON.stringify({email:t.email})})}async updatePassword(t){await this.hydrated;const e=await this.getAccessToken();if(!e)throw new o("not_authenticated","no active session");await this.api.request(`/api/v1/paywall/${this.paywallId}/auth/password/update`,{method:"POST",headers:{Authorization:`Bearer ${e}`},body:JSON.stringify({password:t.password})})}async signInAnonymously(t={}){if(this.inflightAnonSignin)return this.inflightAnonSignin;this.inflightAnonSignin=(async()=>{if(await this.hydrated,!t.forceNewAnon&&this.session?.user.is_anonymous===!0)return this.session;if(!t.forceNewAnon){const r=await this.resumeAnonymous();if(r)return r}const e=await this.readVisitorId(),s=await this.api.request(`/api/v1/paywall/${this.paywallId}/auth/anonymous/signin`,{method:"POST",body:JSON.stringify({...t.captchaToken?{captcha_token:t.captchaToken}:{},visitor_id:e,user_meta:t.userMeta})}),a={...s.user,email:s.user.email??null,is_anonymous:!0},n=this.toSession(s,a);return this.setSession(n,{event:"SIGNED_IN"}),await this.writeAnonRefreshToken(n.refresh_token),n})();try{return await this.inflightAnonSignin}finally{this.inflightAnonSignin=null}}async resumeAnonymous(){const t=await this.readAnonRefreshToken();if(!t)return null;try{const e=await this.api.request(`/api/v1/paywall/${this.paywallId}/auth/refresh`,{method:"POST",body:JSON.stringify({refresh_token:t})}),s=this.session?.user.is_anonymous===!0?this.session.user:{id:"",email:null,is_anonymous:!0},a=this.toSession(e,s);return this.setSession(a,{event:"SIGNED_IN"}),await this.writeAnonRefreshToken(a.refresh_token),a}catch(e){if(e instanceof o&&e.status===401)return await this.clearAnonRefreshToken(),null;throw e}}async upgradeAnonymousToEmail(t){await this.hydrated;const e=await this.getAccessToken();if(!e)throw new o("not_authenticated","no active session");const s={Authorization:`Bearer ${e}`};t.idempotencyKey&&(s["Idempotency-Key"]=t.idempotencyKey);const a=await this.api.request(`/api/v1/paywall/${this.paywallId}/auth/anonymous/upgrade`,{method:"POST",headers:s,body:JSON.stringify({email:t.email,password:t.password,user_meta:t.userMeta})});if(a.status==="confirmation_required")return{kind:"confirmation_required",email:a.email};const n=this.session;if(!n)throw new o("not_authenticated","session disappeared during upgrade");const r={...n.user,id:a.user.id,email:a.user.email,is_anonymous:a.user.is_anonymous??!1},h={...n,user:r};return this.setSession(h,{event:"USER_UPDATED"}),await this.clearAnonRefreshToken(),{kind:"updated",session:h}}async signInWithOAuth(t){if(typeof window>"u")throw new o("oauth_unavailable","window is required for OAuth");const{authorize_url:e,state:s}=await this.startOAuthFlow({provider:t.provider,scopes:t.scopes,userMeta:t.userMeta}),a=this.openPopup(e,`pw-oauth-${s}`);if(!a)throw this.oauthFlows.delete(s),new o("popup_blocked","browser blocked auth popup — call from a user gesture");t.onPopupOpened?.();const n=await M(a,s);if(this.destroyed)throw this.oauthFlows.delete(s),new o("aborted","AuthClient destroyed mid-flow");return this.completeOAuthFlow({state:s,code:n})}async startOAuthFlow(t){await this.hydrated,this.gcOAuthFlows();const e=G(),s=await z(e),a=Q(),n={},r=await this.getAccessToken().catch(()=>null);r&&(n.Authorization=`Bearer ${r}`);const{authorize_url:h}=await this.api.request(`/api/v1/paywall/${this.paywallId}/auth/oauth/init`,{method:"POST",headers:Object.keys(n).length?n:void 0,body:JSON.stringify({provider:t.provider,code_challenge:s,code_challenge_method:"s256",scopes:t.scopes})});return this.oauthFlows.set(a,{verifier:e,userMeta:t.userMeta,provider:t.provider,startedAt:Date.now()}),this.recordLastLoginMethod(t.provider),{authorize_url:h,state:a}}async completeOAuthFlow(t){await this.hydrated;const e=this.oauthFlows.get(t.state);if(!e)throw new o("oauth_invalid_state","OAuth flow not found — start with startOAuthFlow first or check TTL");this.oauthFlows.delete(t.state);const s=await this.readVisitorId(),a=await this.api.request(`/api/v1/paywall/${this.paywallId}/auth/oauth/exchange`,{method:"POST",body:JSON.stringify({auth_code:t.code,code_verifier:e.verifier,visitor_id:s,user_meta:e.userMeta})});if(this.destroyed)throw new o("aborted","AuthClient destroyed mid-flow");const n=this.toSession(a,a.user);return this.setSession(n,{event:"SIGNED_IN"}),n.user.email&&this.recordLastLoginEmail(n.user.email),n}gcOAuthFlows(){const t=Date.now()-Y;for(const[e,s]of this.oauthFlows)s.startedAt<t&&this.oauthFlows.delete(e)}async refresh(){if(await this.hydrated,!this.session)return null;if(this.inflightRefresh)return this.inflightRefresh;const t=this.session.refresh_token,e=this.session.user;return this.inflightRefresh=(async()=>{try{const s=await this.api.request(`/api/v1/paywall/${this.paywallId}/auth/refresh`,{method:"POST",body:JSON.stringify({refresh_token:t})}),a=this.toSession(s,e);return this.setSession(a,{event:"TOKEN_REFRESHED"}),e.is_anonymous===!0&&await this.writeAnonRefreshToken(a.refresh_token),a}catch(s){if(s instanceof o&&s.status===401)return e.is_anonymous===!0&&await this.clearAnonRefreshToken(),this.setSession(null,{event:"SIGNED_OUT"}),null;throw s}finally{this.inflightRefresh=null}})(),this.inflightRefresh}async revokeAllSessions(){await this.hydrated;const t=this.session?.access_token;if(!t)throw new o("not_authenticated","no active session");await this.api.request(`/api/v1/paywall/${this.paywallId}/auth/revoke-all`,{method:"POST",headers:{Authorization:`Bearer ${t}`}}),this.setSession(null,{event:"SIGNED_OUT"})}async signOut(t={}){await this.hydrated;const e=this.session?.access_token,s=this.session?.user.is_anonymous===!0;if(this.setSession(null,{event:"SIGNED_OUT"}),t.forgetAnonymous&&await this.clearAnonRefreshToken(),!!e&&!(s&&!t.forgetAnonymous))try{await this.api.request(`/api/v1/paywall/${this.paywallId}/auth/signout`,{method:"POST",headers:{Authorization:`Bearer ${e}`}})}catch{}}onAuthChange(t){return this.listeners.add(t),this.hydrated.then(()=>{if(this.destroyed||!this.listeners.has(t))return;const e=this.session;try{t("INITIAL_SESSION",e)}catch(s){console.warn("[paywall] onAuthChange INITIAL_SESSION threw",s)}}),()=>{this.listeners.delete(t)}}isFresh(t){return t.expires_at-Date.now()>W}toSession(t,e){const s=t.expires_at!=null?t.expires_at*1e3:Date.now()+t.expires_in*1e3;return{access_token:t.access_token,refresh_token:t.refresh_token,expires_at:s,user:e}}setSession(t,e){if(this.destroyed)return;const s=this.session;this.session=t,e.skipPersist||this.persist(),it(s,t)||this.emit(e.event)}emit(t){for(const e of this.listeners)try{e(t,this.session)}catch(s){console.warn("[paywall] onAuthChange listener threw",s)}}storageKey(){return d.authSession(this.paywallId)}async hydrate(){try{const t=await this.storage.getItem(this.storageKey());if(!t)return;const e=JSON.parse(t);if(!e||typeof e.access_token!="string"||typeof e.refresh_token!="string"||typeof e.expires_at!="number"||!e.user)return;this.session=e}catch{}}async rehydrateFromStorage(){try{const t=await this.storage.getItem(this.storageKey());if(!t)return;const e=JSON.parse(t);if(!e||typeof e.access_token!="string"||typeof e.refresh_token!="string"||typeof e.expires_at!="number"||!e.user)return;this.setSession(e,{skipPersist:!0,event:"SIGNED_IN"})}catch{}}destroy(){this.destroyed=!0,this.storageUnwatch&&(this.storageUnwatch(),this.storageUnwatch=null),this.listeners.clear(),this.inflightRefresh=null}isDestroyed(){return this.destroyed}async persist(){try{this.session?await this.storage.setItem(this.storageKey(),JSON.stringify(this.session)):await this.storage.removeItem(this.storageKey())}catch{}}async readAnonRefreshToken(){try{const t=await this.storage.getItem(d.anonRefreshToken(this.paywallId));return typeof t=="string"&&t.length>0?t:null}catch{return null}}async writeAnonRefreshToken(t){try{await this.storage.setItem(d.anonRefreshToken(this.paywallId),t)}catch{}}async clearAnonRefreshToken(){try{await this.storage.removeItem(d.anonRefreshToken(this.paywallId))}catch{}}async getLastLogin(){try{const[t,e]=await Promise.all([this.storage.getItem(d.lastLoginMethod(this.paywallId)),this.storage.getItem(d.lastLoginEmail(this.paywallId))]);return!t||!st(t)?null:{method:t,email:typeof e=="string"&&e?e:null}}catch{return null}}recordLastLogin(t,e){this.recordLastLoginMethod(t),e&&this.recordLastLoginEmail(e)}recordLastLoginMethod(t){this.storage.setItem(d.lastLoginMethod(this.paywallId),t).catch(()=>{})}recordLastLoginEmail(t){this.storage.setItem(d.lastLoginEmail(this.paywallId),t).catch(()=>{})}async readVisitorId(){try{const t=await this.storage.getItem(d.visitorId);return typeof t=="string"&&t.length>=16?t:void 0}catch{return}}}const tt=5*6e4,et=500;function M(i,t){return new Promise((e,s)=>{let a=!1;const n=()=>{a=!0,window.removeEventListener("message",r),clearInterval(h),clearTimeout(f)},r=p=>{if(a)return;const l=p.data;if(!(!l||l.type!=="pw-oauth")&&l.messageId===t){if(l.status==="success"&&l.code){n();try{i.close()}catch{}e(l.code)}else if(l.status==="error"){n();try{i.close()}catch{}s(new o("oauth_failed",l.description||l.error||"OAuth provider returned error"))}}},h=setInterval(()=>{if(a)return;let p;try{p=i.closed}catch{return}p&&(n(),s(new o("oauth_cancelled","auth popup was closed")))},et),f=setTimeout(()=>{if(!a){n();try{i.close()}catch{}s(new o("oauth_timeout","OAuth flow timed out"))}},tt);window.addEventListener("message",r)})}function st(i){return i==="google"||i==="apple"||i==="github"||i==="facebook"||i==="email"}function it(i,t){return i===t?!0:!i||!t?!1:i.access_token===t.access_token&&i.refresh_token===t.refresh_token&&i.expires_at===t.expires_at&&i.user.id===t.user.id&&i.user.email===t.user.email}class at{constructor(t){if(!t.paywallId)throw new o("invalid_config","paywallId is required");if(!t.apiOrigin)throw new o("invalid_config","apiOrigin is required. Pass the paywall custom_domain configured in the platform.");this.paywallId=t.paywallId,this.apiOrigin=t.apiOrigin,this.auth=t.auth,this.userId=t.userId,this.capabilities=t.capabilities,this.customFetch=t.fetch,this.onChargeSuccess=t.onChargeSuccess,this.onQuotaExceeded=t.onQuotaExceeded,t.userId&&!t.auth&&typeof window<"u"&&typeof window.document<"u"&&console.warn("[paywall] WARNING: ApiGatewayClient.userId set without auth in browser. Client can spoof userId. Use AuthClient + Bearer for trusted user.id.")}async call(t){const e=t.path?t.path.replace(/^\/+/,""):"",s=new URL(`/api/v1/api-gateway/${encodeURIComponent(t.providerId)}${e?`/${e}`:""}`,this.apiOrigin);s.searchParams.set("paywall_id",this.paywallId);const a=new Headers(t.headers);a.set("X-SDK-Version",m),a.set("X-Paywall-Id",this.paywallId),this.capabilities?.length&&a.set("X-SDK-Capabilities",this.capabilities.join(","));const n=await this.auth?.getAccessToken();n?a.set("Authorization",`Bearer ${n}`):this.userId&&a.set("X-User-ID",this.userId);const r=typeof FormData<"u"&&t.body instanceof FormData,h=typeof Blob<"u"&&t.body instanceof Blob,f=typeof ReadableStream<"u"&&t.body instanceof ReadableStream,p=typeof t.body=="string";let l;t.body===void 0||t.body===null?l=void 0:r||h||f||p?l=t.body:(l=JSON.stringify(t.body),a.has("Content-Type")||a.set("Content-Type","application/json"));const u=this.customFetch??fetch;let c;try{c=await u(s.toString(),{method:t.method??"POST",headers:a,body:l,signal:t.signal,credentials:"omit"})}catch(y){const x=y instanceof Error?y.message:String(y);throw new o("network_error",`Network request failed: ${x}`,{cause:y})}if(c.status===402){const y=await nt(c);throw this.onQuotaExceeded?.(y),y}if(!c.ok){const y=await rt(c.clone());throw new o(y??`http_${c.status}`,c.statusText||"Gateway request failed",{status:c.status})}const g=c.headers.get("X-Query-Type")??void 0;return this.onChargeSuccess?.(g),c}}async function nt(i){let t={};try{t=await i.json()}catch{}const e=t.details?.balances;let s=[];if(Array.isArray(e)){const a=e[0];Array.isArray(a)?s=a:a&&Array.isArray(a.balances)&&(s=a.balances)}return new H({balances:s,queryType:t.details?.queryType??"",currentBalance:t.details?.currentBalance??null})}async function rt(i){if(!(i.headers.get("content-type")??"").includes("application/json"))return null;try{const e=await i.json();return e.code||e.error||null}catch{return null}}const ot=5e3,ct=30*6e4,k=60*6e4,ht=5*6e4,S={has_active_subscription:!1,purchases:[],trial:null,had_previous_trial:!1};function A(i){return i&&(i.email||i.userId||i.anonymousId)||"guest"}function lt(i,t){return i===t?!0:!i||!t?!1:JSON.stringify(i)===JSON.stringify(t)}const ut=5e3,T=5*6e4,dt=3e4;function ft(i,t){if(i===t)return!0;if(!i||!t||i.length!==t.length)return!1;for(let e=0;e<i.length;e++)if(i[e].type!==t[e].type||i[e].count!==t[e].count)return!1;return!0}class yt{constructor(t){if(this.cachedBootstrap=null,this.cachedBootstrapAt=0,this.inflightBootstrap=null,this.bootstrapListeners=new Set,this.bootstrapStorageUnwatch=null,this.authUnsubscribe=null,this.cachedUser=null,this.cachedUserAt=0,this.inflightUser=null,this.userListeners=new Set,this.visitorIdPromise=null,this.visitorId=null,this.inflightCheckouts=new Map,this.cachedBalances=null,this.cachedBalancesAt=0,this.balancesStorageUnwatch=null,this.inflightBalances=null,this.balanceListeners=new Set,this.previewVersionCounter=0,!t.paywallId)throw new o("invalid_config","paywallId is required");if(!t.apiOrigin)throw new o("invalid_config",'apiOrigin is required. Pass the paywall custom_domain configured in the platform (e.g. "https://pay.your-domain.com"). The legacy "appbox.space" fallback is not used in SDK 3.0.');this.paywallId=t.paywallId,this.apiOrigin=t.apiOrigin,this.capabilities=t.capabilities,this.auth=t.auth,this.previewMode=t.preview===!0;const e=t.auth?.getCachedUser();this.identity=t.identity??(e?O(e):void 0),this.apiKey=t.apiKey,this.fetchImpl=t.fetch,t.apiKey&&typeof window<"u"&&typeof window.document<"u"&&console.error("[paywall] SECURITY: BillingClient.apiKey detected in browser context. This is a server-SDK key and exposes your account. Remove apiKey or move BillingClient to a trusted backend."),this.storage=R(t.storage),this.api=new P({apiOrigin:this.apiOrigin,paywallId:t.paywallId,capabilities:t.capabilities,fetch:t.fetch,getAuthToken:t.auth?()=>t.auth.getAccessToken():void 0}),t.auth&&(this.authUnsubscribe=t.auth.onAuthChange((s,a)=>{const n=a?O(a.user):void 0;pt(this.identity,n)||this.setIdentity(n)})),this.hydrateUserFromStorage(),this.hydrateBootstrapFromStorage(),this.subscribeBootstrapStorage(),this.hydrateBalancesFromStorage(),this.subscribeBalancesStorage(),this.visitorIdPromise=B(this.storage).then(s=>(this.visitorId=s,s))}async getVisitorId(){return this.visitorId?this.visitorId:(this.visitorIdPromise||(this.visitorIdPromise=B(this.storage).then(t=>(this.visitorId=t,t))),this.visitorIdPromise)}getCachedVisitorId(){return this.visitorId}setIdentity(t){this.identity=t,this.cachedUser=null,this.cachedUserAt=0,this.inflightUser=null,this.cachedBalances=null,this.cachedBalancesAt=0,this.inflightBalances=null,this.balancesStorageUnwatch&&(this.balancesStorageUnwatch(),this.balancesStorageUnwatch=null),this.hydrateBalancesFromStorage(),this.subscribeBalancesStorage(),this.hydrateUserFromStorage(),t?this.getUser({force:!0}).catch(()=>{}):(this.applyUser(S),this.applyBalances([]))}destroy(){this.authUnsubscribe&&(this.authUnsubscribe(),this.authUnsubscribe=null),this.bootstrapStorageUnwatch&&(this.bootstrapStorageUnwatch(),this.bootstrapStorageUnwatch=null),this.balancesStorageUnwatch&&(this.balancesStorageUnwatch(),this.balancesStorageUnwatch=null),this.userListeners.clear(),this.balanceListeners.clear(),this.bootstrapListeners.clear()}getIdentity(){return this.identity}getStorage(){return this.storage}async bootstrap(t=!1){const e=typeof t=="boolean"?{force:t}:t;if(this.previewMode){if(this.cachedBootstrap)return this.cachedBootstrap;throw new o("invalid_config","BillingClient in preview mode but cachedBootstrap is not seeded. Call setBootstrap(bootstrap) before open().")}const s=Date.now(),a=this.cachedBootstrap&&this.cachedBootstrapAt>0&&s-this.cachedBootstrapAt<k;return!e.force&&a?(s-this.cachedBootstrapAt>ht&&this.revalidateBootstrap(e.signal).catch(()=>{}),{...this.cachedBootstrap,user:this.cachedUser??void 0}):this.inflightBootstrap?this.inflightBootstrap:(this.inflightBootstrap=this.fetchBootstrap({ifVersion:e.force?void 0:this.cachedBootstrap?.version,signal:e.signal}).finally(()=>{this.inflightBootstrap=null}),this.inflightBootstrap)}onBootstrapChange(t){return this.bootstrapListeners.add(t),()=>{this.bootstrapListeners.delete(t)}}setBootstrap(t){const e=this.cachedBootstrap??{settings:{id:this.paywallId,name:""},prices:[],offers:[]},s={...e,...t,settings:t.settings!==void 0?{...e.settings,...t.settings}:e.settings,prices:t.prices!==void 0?t.prices:e.prices,offers:t.offers!==void 0?t.offers:e.offers,version:`preview:${++this.previewVersionCounter}`};s.layout||(s.layout=E(s.settings,s.prices)),w(s),this.cachedBootstrap=s,this.cachedBootstrapAt=Date.now();for(const a of this.bootstrapListeners)try{a(s)}catch(n){console.warn("[paywall] onBootstrapChange listener threw",n)}}async fetchBootstrap(t){const e={};this.identity?.email&&(e["X-User-Email"]=this.identity.email);const s=t.ifVersion?`/api/v1/paywall/${this.paywallId}/bootstrap?if_version=${encodeURIComponent(t.ifVersion)}`:`/api/v1/paywall/${this.paywallId}/bootstrap`,a=await this.api.request(s,{...Object.keys(e).length?{headers:e}:{},signal:t.signal});if("unchanged"in a&&a.unchanged)return this.cachedBootstrap?(this.cachedBootstrapAt=Date.now(),a.user&&this.applyUser(a.user),this.cachedBootstrap):this.fetchBootstrap({signal:t.signal});const n=a;return gt(n.settings.custom_domain,this.apiOrigin),n.layout||(n.layout=E(n.settings,n.prices)),w(n),this.applyBootstrap(n,{persist:!0}),n.user&&this.applyUser(n.user),n}revalidateBootstrap(t){return this.inflightBootstrap?this.inflightBootstrap:(this.inflightBootstrap=this.fetchBootstrap({ifVersion:this.cachedBootstrap?.version,signal:t}).finally(()=>{this.inflightBootstrap=null}),this.inflightBootstrap)}applyBootstrap(t,{persist:e}){const s=!this.cachedBootstrap||this.cachedBootstrap.version!==t.version;if(this.cachedBootstrap=t,this.cachedBootstrapAt=Date.now(),e&&this.persistBootstrap(t),s)for(const a of this.bootstrapListeners)try{a(t)}catch(n){console.warn("[paywall] onBootstrapChange listener threw",n)}}async hydrateBootstrapFromStorage(){if(!this.cachedBootstrap)try{const t=await this.storage.getItem(d.bootstrap(this.paywallId));if(!t)return;const e=JSON.parse(t);if(!e?.bootstrap||Date.now()-e.at>k||this.cachedBootstrap)return;w(e.bootstrap),this.cachedBootstrap=e.bootstrap,this.cachedBootstrapAt=e.at;for(const s of this.bootstrapListeners)try{s(e.bootstrap)}catch(a){console.warn("[paywall] onBootstrapChange listener threw",a)}}catch{}}async persistBootstrap(t){if(t.version)try{const{user:e,...s}=t;await this.storage.setItem(d.bootstrap(this.paywallId),JSON.stringify({at:Date.now(),bootstrap:s}))}catch{}}subscribeBootstrapStorage(){typeof this.storage.watch=="function"&&(this.bootstrapStorageUnwatch=this.storage.watch(d.bootstrap(this.paywallId),t=>{if(t)try{const e=JSON.parse(t);if(!e?.bootstrap)return;if(this.cachedBootstrap?.version&&this.cachedBootstrap.version===e.bootstrap.version){this.cachedBootstrapAt=e.at;return}w(e.bootstrap),this.applyBootstrap(e.bootstrap,{persist:!1})}catch{}}))}getCachedBootstrap(){return this.cachedBootstrap}async getPrices(t={}){return(await this.bootstrap(t)).prices}getCachedPrices(){return this.cachedBootstrap?.prices??null}getCachedOffers(){return this.cachedBootstrap?.offers??null}getUserLanguage(){const t=typeof navigator<"u"&&navigator.language?navigator.language:null,e=this.cachedBootstrap?.settings.locale_default??null,s=this.cachedBootstrap?q(this.cachedBootstrap):null;return{tag:s??t??e,applied:s,browserLanguage:t,countryLanguage:e}}async getUser({force:t=!1,signal:e}={}){return!t&&this.cachedUser&&Date.now()-this.cachedUserAt<ot?this.cachedUser:this.inflightUser?this.inflightUser:(this.inflightUser=(async()=>{try{if(!this.identity?.email)return this.applyUser(S),S;const s=await this.api.request(`/api/v1/paywall/${this.paywallId}/user-state`,{headers:{"X-User-Email":this.identity.email},signal:e});return this.applyUser(s),s}finally{this.inflightUser=null}})(),this.inflightUser)}onUserChange(t,e={}){this.userListeners.add(t);const s=e.immediate??"microtask";if(this.cachedUser&&s!=="none"){const a=this.cachedUser;if(s==="sync")try{t(a)}catch(n){console.warn("[paywall] onUserChange initial sync threw",n)}else queueMicrotask(()=>{this.userListeners.has(t)&&t(a)})}return()=>{this.userListeners.delete(t)}}getCachedUser(){return this.cachedUser}applyUser(t){const e=!lt(this.cachedUser,t);if(this.cachedUser=t,this.cachedUserAt=Date.now(),e){this.persistUser(t);for(const s of this.userListeners)try{s(t)}catch(a){console.warn("[paywall] onUserChange listener threw",a)}}}storageKey(){return d.userState(this.paywallId,A(this.identity))}async hydrateUserFromStorage(){if(!this.cachedUser)try{const t=await this.storage.getItem(this.storageKey());if(!t)return;const e=JSON.parse(t);if(!e?.user||Date.now()-e.at>ct||this.cachedUser)return;this.applyUser(e.user)}catch{}}async persistUser(t){try{await this.storage.setItem(this.storageKey(),JSON.stringify({at:Date.now(),user:t}))}catch{}}async getBalances({force:t=!1,signal:e}={}){const s=Date.now(),a=this.cachedBalances?s-this.cachedBalancesAt:1/0;return!t&&this.cachedBalances&&(a<ut||a<dt)?this.cachedBalances:!t&&this.cachedBalances&&a<T?(this.fetchBalances({signal:e}).catch(()=>{}),this.cachedBalances):this.inflightBalances?this.inflightBalances:this.fetchBalances({signal:e})}fetchBalances({signal:t}={}){return this.inflightBalances?this.inflightBalances:(this.inflightBalances=(async()=>{try{if(!this.auth)return this.applyBalances([]),[];const e=await this.api.request(`/api/v1/paywall/${this.paywallId}/balances`,{signal:t}),s=Array.isArray(e.balances)?e.balances:[];return this.applyBalances(s),s}finally{this.inflightBalances=null}})(),this.inflightBalances)}getCachedBalances(){return this.cachedBalances}onBalanceChange(t,e={}){this.balanceListeners.add(t);const s=e.immediate??"microtask";if(this.cachedBalances&&s!=="none"){const a=this.cachedBalances;if(s==="sync")try{t(a)}catch(n){console.warn("[paywall] onBalanceChange initial sync threw",n)}else queueMicrotask(()=>{this.balanceListeners.has(t)&&t(a)})}return()=>{this.balanceListeners.delete(t)}}decrementBalanceLocal(t){if(!t){this.getBalances({force:!0});return}if(!this.cachedBalances)return;const e=this.cachedBalances.findIndex(n=>n.type===t);if(e<0||this.cachedBalances[e].count<=0)return;const a=this.cachedBalances.map((n,r)=>r===e?{...n,count:n.count-1}:n);this.applyBalances(a)}refreshBalances(){return this.getBalances({force:!0})}createApiGatewayClient(t={}){const e=t.onChargeSuccess,s=t.onQuotaExceeded;return new at({paywallId:this.paywallId,apiOrigin:this.apiOrigin,auth:this.auth,userId:this.auth?void 0:this.identity?.userId,capabilities:this.capabilities,fetch:this.fetchImpl,...t,onChargeSuccess:a=>{this.decrementBalanceLocal(a),e?.(a)},onQuotaExceeded:a=>{this.refreshBalances(),s?.(a)}})}applyBalances(t,{persist:e=!0}={}){const s=!ft(this.cachedBalances,t);if(this.cachedBalances=t,this.cachedBalancesAt=Date.now(),e&&this.persistBalances(t),s)for(const a of this.balanceListeners)try{a(t)}catch(n){console.warn("[paywall] onBalanceChange listener threw",n)}}balancesStorageKey(){return d.balances(this.paywallId,A(this.identity))}async hydrateBalancesFromStorage(){if(!this.cachedBalances)try{const t=await this.storage.getItem(this.balancesStorageKey());if(!t)return;const e=JSON.parse(t);if(!e?.balances||!Array.isArray(e.balances)||Date.now()-e.at>T||this.cachedBalances)return;this.cachedBalances=e.balances,this.cachedBalancesAt=e.at;for(const s of this.balanceListeners)try{s(e.balances)}catch(a){console.warn("[paywall] onBalanceChange listener threw",a)}}catch{}}async persistBalances(t){try{await this.storage.setItem(this.balancesStorageKey(),JSON.stringify({at:Date.now(),balances:t}))}catch{}}subscribeBalancesStorage(){typeof this.storage.watch=="function"&&(this.balancesStorageUnwatch=this.storage.watch(this.balancesStorageKey(),t=>{if(t)try{const e=JSON.parse(t);if(!e?.balances||!Array.isArray(e.balances)||e.at<=this.cachedBalancesAt)return;this.applyBalances(e.balances,{persist:!1})}catch{}}))}async createCheckout(t){if(!this.identity?.email)throw new o("identity_required","createCheckout requires identity with email");const e=t.idempotencyKey??`auto:${t.priceId}`,s=this.inflightCheckouts.get(e);if(s)return s;const n={"Idempotency-Key":t.idempotencyKey??K()};this.apiKey&&(n["X-Api-Key"]=this.apiKey);const r=this.cachedBootstrap?.settings,h=t.successUrl??r?.success_redirect_url??void 0,f=t.shopUrl??r?.checkout_shop_url??void 0,l=this.cachedBootstrap?.prices.find(c=>c.id===t.priceId)?.local?.currency??void 0,u=this.api.request(`/api/v1/paywall/${this.paywallId}/start-checkout`,{method:"POST",headers:n,signal:t.signal,body:JSON.stringify({email:this.identity.email,priceId:Number(t.priceId),offerId:t.offerId,successUrl:h,errorUrl:t.errorUrl,shopUrl:f,productName:r?.checkout_product_name??void 0,trial_days:t.trialDays,ignoreActivePurchase:t.ignoreActivePurchase?!0:void 0,userMeta:this.identity.userId?{userId:this.identity.userId}:void 0,localCurrency:l})}).then(c=>({url:c.checkoutUrl,acquiring:c.acquiring})).catch(c=>{throw c instanceof o&&c.status===409&&c.cause&&typeof c.cause=="object"&&c.cause.hasActivePurchase===!0?new o("already_purchased","You already have an active subscription",{status:409,cause:c.cause}):c});return this.inflightCheckouts.set(e,u),u.finally(()=>{this.inflightCheckouts.get(e)===u&&this.inflightCheckouts.delete(e)}).catch(()=>{}),u}async getCustomerPortalUrl(t={}){if(!this.auth&&!this.apiKey&&!this.identity?.email)throw new o("identity_required","getCustomerPortalUrl requires auth, apiKey, or identity.email");const e={};this.apiKey&&(e["X-Api-Key"]=this.apiKey);const s=this.auth&&this.auth.getCachedSession()?{returnUrl:t.returnUrl}:{email:this.identity?.email,userMeta:this.identity?.userId?{userId:this.identity.userId}:void 0,returnUrl:t.returnUrl};return{url:(await this.api.request(`/api/v1/paywall/${this.paywallId}/get-customer-portal`,{method:"POST",headers:Object.keys(e).length?e:void 0,body:JSON.stringify(s),signal:t.signal})).url}}async listPurchases(t={}){const e=!!(this.identity?.email||this.identity?.userId);if(!this.auth&&!(this.apiKey&&e))throw new o("identity_required","listPurchases requires AuthClient (Bearer) or apiKey + identity.email/userId");const s={};this.apiKey&&(s["X-Api-Key"]=this.apiKey);const a=new URLSearchParams;this.apiKey&&this.identity?.email&&a.set("email",this.identity.email),this.apiKey&&this.identity?.userId&&a.set("user_id",this.identity.userId);const n=a.toString(),r=n?`/api/v1/paywall/${this.paywallId}/user?${n}`:`/api/v1/paywall/${this.paywallId}/user`;return(await this.api.request(r,{method:"GET",headers:s,signal:t.signal})).purchases??[]}async cancelSubscription(t){const e=!!(this.identity?.email||this.identity?.userId);if(!this.auth&&!(this.apiKey&&e))throw new o("identity_required","cancelSubscription requires AuthClient (Bearer) or apiKey + identity.email/userId");const s={};this.apiKey&&(s["X-Api-Key"]=this.apiKey);const a={subscriptionId:t.subscriptionId,paywallId:this.paywallId,cancellationReason:t.reason};return this.apiKey&&this.identity?.email&&(a.email=this.identity.email),this.apiKey&&this.identity?.userId&&(a.userId=this.identity.userId),this.api.request("/api/paywall/cancel-subscription",{method:"POST",headers:s,body:JSON.stringify(a),signal:t.signal})}async createSupportTicket(t){const e=t.email??this.identity?.email??null,s=`/api/v1/paywall/${this.paywallId}/support/ticket`;if(!!t.files&&t.files.length>0){const n=new FormData;n.set("subject",t.subject),n.set("content",t.content),e&&n.set("customer_email",e);for(const r of t.files)n.append("files",r);return this.api.request(s,{method:"POST",body:n})}return this.api.request(s,{method:"POST",body:JSON.stringify({subject:t.subject,content:t.content,customer_email:e})})}}function O(i){return{email:i.email,userId:i.id}}function pt(i,t){return i===t?!0:!i||!t?!1:i.email===t.email&&i.userId===t.userId&&i.anonymousId===t.anonymousId}function U(i){if(!i)return null;const t=i.trim();if(!t)return null;try{return new URL(t.includes("://")?t:`https://${t}`).origin}catch{return null}}function gt(i,t){const e=U(i);if(!(!e||U(t)===e))throw new o("invalid_config",`apiOrigin mismatch: SDK initialized with "${t}" but paywall is configured with custom_domain "${i}". Use the custom_domain from the platform paywall settings.`)}function E(i,t){return{type:"modal",blocks:[{type:"heading",text:i.name||"Upgrade",level:1},{type:"price_grid",priceIds:t.map(e=>e.id)},{type:"cta_button",action:"checkout"},{type:"guarantee_badge"},{type:"current_session"}]}}function q(i){const t=i.locales;if(!t)return null;const e=[];if(typeof navigator<"u"){navigator.language&&e.push(navigator.language);const a=navigator.language?.split("-")[0];a&&a!==navigator.language&&e.push(a)}const s=i.settings.locale_default;s&&e.push(s);for(const a of e)if(a&&Object.prototype.hasOwnProperty.call(t,a))return a;return null}function w(i){const t=q(i);if(!t)return;const e=i.locales?.[t];e&&(e.layout&&(i.layout=e.layout),e.prices&&(i.prices=i.prices.map(s=>{const a=e.prices?.[s.id];if(!a)return s;const n={...s};return"label"in a&&(n.label=a.label??null),"description"in a&&(n.description=a.description??null),n})))}const wt=1500,mt=20,L=200;class It{constructor(t){this.buffer=[],this.flushTimer=null,this.destroyed=!1,this.unloadHandler=null,this.visibilityHandler=null,this.opts=t,this.isEnabled()&&this.attachUnloadHandlers()}isEnabled(){return this.opts.enabled!==!1}track(t,e){if(this.destroyed||!this.isEnabled()||typeof t!="string"||t.length===0)return;this.buffer.push({type:t,ts:Date.now(),props:e});const s=this.opts.maxBufferSize??mt;if(this.buffer.length>=s){this.flush();return}this.buffer.length>L&&(this.buffer=this.buffer.slice(-L)),this.scheduleFlush()}scheduleFlush(){if(this.flushTimer||this.destroyed)return;const t=this.opts.flushIntervalMs??wt;this.flushTimer=setTimeout(()=>{this.flushTimer=null,this.flush()},t)}async flush(){if(this.buffer.length===0)return;this.flushTimer&&(clearTimeout(this.flushTimer),this.flushTimer=null);const t=this.buffer;this.buffer=[];try{const e=await this.opts.getVisitorId(),s=this.opts.getUserId?.()??null,a=JSON.stringify({events:t}),n=this.opts.fetch??(typeof fetch<"u"?fetch:void 0);if(!n)return;await n(this.opts.endpoint,{method:"POST",credentials:"omit",keepalive:!0,headers:this.buildHeaders(e,s),body:a})}catch{}}flushBeacon(){if(this.buffer.length===0)return;const t=this.buffer;this.buffer=[];const e=this.opts.getCachedVisitorId?.()??null,s=this.opts.getUserId?.()??null;if(!e){this.buffer.unshift(...t),this.flush();return}const a=JSON.stringify({events:t,visitor_id:e,user_id:s,sdk_version:m,paywall_id:this.opts.paywallId,capabilities:this.opts.capabilities?.join(",")??""}),n=this.opts.sendBeacon??(typeof navigator<"u"&&typeof navigator.sendBeacon=="function"?navigator.sendBeacon.bind(navigator):null);if(!n){this.buffer.unshift(...t),this.flush();return}try{n(this.opts.endpoint,a)||(this.buffer.unshift(...t),this.flush())}catch{this.buffer.unshift(...t),this.flush()}}buildHeaders(t,e){const s={"Content-Type":"application/json","X-SDK-Version":m,"X-Paywall-Id":this.opts.paywallId,"X-Visitor-Id":t};return this.opts.capabilities?.length&&(s["X-SDK-Capabilities"]=this.opts.capabilities.join(",")),e&&(s["X-User-Id"]=e),s}attachUnloadHandlers(){typeof window>"u"||(this.unloadHandler=()=>this.flushBeacon(),this.visibilityHandler=()=>{typeof document<"u"&&document.visibilityState==="hidden"&&this.flushBeacon()},window.addEventListener("pagehide",this.unloadHandler),typeof document<"u"&&document.addEventListener("visibilitychange",this.visibilityHandler))}detachUnloadHandlers(){typeof window>"u"||(this.unloadHandler&&window.removeEventListener("pagehide",this.unloadHandler),this.visibilityHandler&&typeof document<"u"&&document.removeEventListener("visibilitychange",this.visibilityHandler),this.unloadHandler=null,this.visibilityHandler=null)}destroy(){this.destroyed||(this.destroyed=!0,this.flushTimer&&(clearTimeout(this.flushTimer),this.flushTimer=null),this.flush(),this.detachUnloadHandlers())}}const C=3600*1e3;function v(i){return`paywall-${i}-trial-time-first-open`}function b(i){return`paywall-${i}-skip-times`}class ${constructor(t,e,s){this.storage=t,this.paywallId=e,this.config=s}async check(){return this.config.mode==="time"?this.checkTime():this.checkOpens()}async recordBlock(){return this.config.mode==="time"?this.recordTime():this.recordOpens()}async reset(){await this.storage.removeItem(this.config.mode==="time"?v(this.paywallId):b(this.paywallId))}async checkTime(){const t=this.config.payload*C,e=await this.storage.getItem(v(this.paywallId)),s=e?Number(e):null;if(!s||!Number.isFinite(s))return{mode:"time",blocked:!0,startedAt:null,expiresAt:null,remainingMs:t,totalMs:t};const a=s+t,n=Math.max(0,a-Date.now());return{mode:"time",blocked:n>0,startedAt:s,expiresAt:a,remainingMs:n,totalMs:t}}async checkOpens(){const t=this.config.payload,e=await this.storage.getItem(b(this.paywallId)),s=e?Number(e):0,a=Number.isFinite(s)?s:0,n=a<t,r=Math.max(0,t-a);return{mode:"opens",blocked:n,remainingActions:r,totalActions:t}}async recordTime(){const t=this.config.payload*C,e=v(this.paywallId),s=await this.storage.getItem(e);let a=s?Number(s):null;(!a||!Number.isFinite(a))&&(a=Date.now(),await this.storage.setItem(e,String(a)));const n=a+t,r=Math.max(0,n-Date.now());return{mode:"time",blocked:r>0,startedAt:a,expiresAt:n,remainingMs:r,totalMs:t}}async recordOpens(){const t=this.config.payload,e=b(this.paywallId),s=await this.storage.getItem(e),a=s?Number(s):0,n=Number.isFinite(a)?a:0,r=Math.min(t,n+1);await this.storage.setItem(e,String(r));const h=Math.max(0,t-r);return{mode:"opens",blocked:r<t,remainingActions:h,totalActions:t}}}let N=!1;class St{constructor(t,e,s){N||(N=!0,console.warn('[paywall] trial.storage="server" is not implemented yet — falling back to client storage. State lives in localStorage; users can reset trial by clearing site data.')),this.fallback=new $(t,e,s)}check(){return this.fallback.check()}recordBlock(){return this.fallback.recordBlock()}reset(){return this.fallback.reset()}}function vt(i,t,e){return e.storage==="server"?new St(i,t,e):new $(i,t,e)}const bt=1;function _t(i){return i instanceof o?{name:"PaywallError",code:i.code,message:i.message,status:i.status,stack:i.stack}:i instanceof Error?{name:i.name||"Error",code:"unknown",message:i.message,stack:i.stack}:{name:"Error",code:"unknown",message:typeof i=="string"?i:"Unknown error"}}function Bt(i){if(i.name==="PaywallError"){const e=new o(i.code,i.message,{status:i.status});return i.stack&&(e.stack=i.stack),e}const t=new Error(i.message);return t.name=i.name,i.stack&&(t.stack=i.stack),t}function F(i){let t=!1;const e=new Set,s=new Set,a=r=>{for(const h of e)h(r)},n=()=>{if(!t){t=!0;for(const r of s)r();i.onMessage.removeListener(a),i.onDisconnect.removeListener(n)}};return i.onMessage.addListener(a),i.onDisconnect.addListener(n),{send(r){if(!t)try{i.postMessage(r)}catch(h){throw n(),h}},onMessage(r){return e.add(r),()=>e.delete(r)},onDisconnect(r){return t?(queueMicrotask(r),()=>{}):(s.add(r),()=>s.delete(r))},close(){t||(i.disconnect(),n())}}}function kt(i){const t=chrome.runtime.connect({name:i});return F(t)}exports.AuthClient=Z;exports.BillingClient=yt;exports.EventTracker=It;exports.PROTOCOL_VERSION=bt;exports.PaywallError=o;exports.createRuntimeChannel=kt;exports.createTrialStore=vt;exports.portToChannel=F;exports.reconstructError=Bt;exports.serializeError=_t;exports.waitForOAuthCode=M;
2
+ //# sourceMappingURL=chrome-port-BEMjZQAH.js.map