@tiun/react-native-sdk 0.2.0 → 0.3.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.
package/README.md CHANGED
@@ -32,6 +32,22 @@ function App() {
32
32
  The app must register the `returnUrl` deep-link scheme in its native config; the
33
33
  SDK only consumes the URL.
34
34
 
35
+ ### Appearance
36
+
37
+ `appearance` (`'light' | 'dark' | 'auto'`, default `'light'`) sets the snippet's
38
+ color theme. `'auto'` follows the OS setting. Changing it re-themes the open
39
+ snippet without reloading:
40
+
41
+ ```tsx
42
+ <TiunProvider
43
+ config={{
44
+ snippetId: 'your-snippet-id',
45
+ returnUrl: 'myapp://tiun/return',
46
+ appearance: 'auto'
47
+ }}
48
+ >
49
+ ```
50
+
35
51
  ## Peer dependencies
36
52
 
37
53
  `react`, `react-native`, `react-native-webview`, `react-native-secure-sign`,
package/dist/index.d.ts CHANGED
@@ -1,6 +1,9 @@
1
1
  import { JSX } from 'react/jsx-runtime';
2
2
  import { ReactNode } from 'react';
3
3
 
4
+ /** 'auto' follows the visitor's OS setting (prefers-color-scheme). */
5
+ export declare type Appearance = 'light' | 'dark' | 'auto';
6
+
4
7
  export declare interface CheckoutOptions {
5
8
  /**
6
9
  * Specific product ID to checkout (optional, for future use)
@@ -36,6 +39,11 @@ export declare type TiunConfig = {
36
39
  host?: string;
37
40
  /** Snippet UI language; defaults to 'en'. */
38
41
  language?: string;
42
+ /**
43
+ * Snippet color theme; defaults to 'light'. 'auto' follows the OS setting.
44
+ * Changing it re-themes the open snippet live.
45
+ */
46
+ appearance?: Appearance;
39
47
  /**
40
48
  * The app's deep link the in-app browser returns to after payment, e.g.
41
49
  * `myapp://tiun/return`. The app must register this scheme in its native
package/dist/index.js CHANGED
@@ -1,4 +1,4 @@
1
- "use strict";var we=Object.defineProperty;var ve=(t,r,i)=>r in t?we(t,r,{enumerable:!0,configurable:!0,writable:!0,value:i}):t[r]=i;var fe=(t,r,i)=>(ve(t,typeof r!="symbol"?r+"":r,i),i);Object.defineProperty(exports,Symbol.toStringTag,{value:"Module"});const d=require("react"),b=require("react-native"),_e=require("react-native-webview"),M=require("react-native-inappbrowser-nitro"),te=require("react-native-secure-sign"),Se=require("react-native-keychain");function me(t){const r=Object.create(null,{[Symbol.toStringTag]:{value:"Module"}});if(t){for(const i in t)if(i!=="default"){const u=Object.getOwnPropertyDescriptor(t,i);Object.defineProperty(r,i,u.get?u:{enumerable:!0,get:()=>t[i]})}}return r.default=t,Object.freeze(r)}const ne=me(Se);var se={exports:{}},X={};/**
1
+ "use strict";var we=Object.defineProperty;var ve=(t,r,a)=>r in t?we(t,r,{enumerable:!0,configurable:!0,writable:!0,value:a}):t[r]=a;var fe=(t,r,a)=>(ve(t,typeof r!="symbol"?r+"":r,a),a);Object.defineProperty(exports,Symbol.toStringTag,{value:"Module"});const l=require("react"),b=require("react-native"),Se=require("react-native-webview"),M=require("react-native-inappbrowser-nitro"),te=require("react-native-secure-sign"),_e=require("react-native-keychain");function me(t){const r=Object.create(null,{[Symbol.toStringTag]:{value:"Module"}});if(t){for(const a in t)if(a!=="default"){const u=Object.getOwnPropertyDescriptor(t,a);Object.defineProperty(r,a,u.get?u:{enumerable:!0,get:()=>t[a]})}}return r.default=t,Object.freeze(r)}const ne=me(_e);var se={exports:{}},X={};/**
2
2
  * @license React
3
3
  * react-jsx-runtime.production.js
4
4
  *
@@ -6,7 +6,7 @@
6
6
  *
7
7
  * This source code is licensed under the MIT license found in the
8
8
  * LICENSE file in the root directory of this source tree.
9
- */var pe;function Re(){if(pe)return X;pe=1;var t=Symbol.for("react.transitional.element"),r=Symbol.for("react.fragment");function i(u,c,l){var T=null;if(l!==void 0&&(T=""+l),c.key!==void 0&&(T=""+c.key),"key"in c){l={};for(var m in c)m!=="key"&&(l[m]=c[m])}else l=c;return c=l.ref,{$$typeof:t,type:u,key:T,ref:c!==void 0?c:null,props:l}}return X.Fragment=r,X.jsx=i,X.jsxs=i,X}var Q={};/**
9
+ */var pe;function Re(){if(pe)return X;pe=1;var t=Symbol.for("react.transitional.element"),r=Symbol.for("react.fragment");function a(u,o,d){var f=null;if(d!==void 0&&(f=""+d),o.key!==void 0&&(f=""+o.key),"key"in o){d={};for(var T in o)T!=="key"&&(d[T]=o[T])}else d=o;return o=d.ref,{$$typeof:t,type:u,key:f,ref:o!==void 0?o:null,props:d}}return X.Fragment=r,X.jsx=a,X.jsxs=a,X}var Q={};/**
10
10
  * @license React
11
11
  * react-jsx-runtime.development.js
12
12
  *
@@ -14,9 +14,9 @@
14
14
  *
15
15
  * This source code is licensed under the MIT license found in the
16
16
  * LICENSE file in the root directory of this source tree.
17
- */var he;function ge(){return he||(he=1,process.env.NODE_ENV!=="production"&&function(){function t(e){if(e==null)return null;if(typeof e=="function")return e.$$typeof===f?null:e.displayName||e.name||null;if(typeof e=="string")return e;switch(e){case E:return"Fragment";case V:return"Profiler";case K:return"StrictMode";case G:return"Suspense";case s:return"SuspenseList";case n:return"Activity"}if(typeof e=="object")switch(typeof e.tag=="number"&&console.error("Received an unexpected object in getComponentNameFromType(). This is likely a bug in React. Please file an issue."),e.$$typeof){case g:return"Portal";case L:return(e.displayName||"Context")+".Provider";case F:return(e._context.displayName||"Context")+".Consumer";case q:var a=e.render;return e=e.displayName,e||(e=a.displayName||a.name||"",e=e!==""?"ForwardRef("+e+")":"ForwardRef"),e;case v:return a=e.displayName||null,a!==null?a:t(e.type)||"Memo";case o:a=e._payload,e=e._init;try{return t(e(a))}catch{}}return null}function r(e){return""+e}function i(e){try{r(e);var a=!1}catch{a=!0}if(a){a=console;var p=a.error,y=typeof Symbol=="function"&&Symbol.toStringTag&&e[Symbol.toStringTag]||e.constructor.name||"Object";return p.call(a,"The provided key is an unsupported type %s. This value must be coerced to a string before using it here.",y),r(e)}}function u(e){if(e===E)return"<>";if(typeof e=="object"&&e!==null&&e.$$typeof===o)return"<...>";try{var a=t(e);return a?"<"+a+">":"<...>"}catch{return"<...>"}}function c(){var e=_.A;return e===null?null:e.getOwner()}function l(){return Error("react-stack-top-frame")}function T(e){if(h.call(e,"key")){var a=Object.getOwnPropertyDescriptor(e,"key").get;if(a&&a.isReactWarning)return!1}return e.key!==void 0}function m(e,a){function p(){W||(W=!0,console.error("%s: `key` is not a prop. Trying to access it will result in `undefined` being returned. If you need to access the same value within the child component, you should pass it as a different prop. (https://react.dev/link/special-props)",a))}p.isReactWarning=!0,Object.defineProperty(e,"key",{get:p,configurable:!0})}function U(){var e=t(this.type);return B[e]||(B[e]=!0,console.error("Accessing element.ref was removed in React 19. ref is now a regular prop. It will be removed from the JSX Element type in a future release.")),e=this.props.ref,e!==void 0?e:null}function N(e,a,p,y,j,C,oe,ie){return p=C.ref,e={$$typeof:$,type:e,key:a,props:C,_owner:j},(p!==void 0?p:null)!==null?Object.defineProperty(e,"ref",{enumerable:!1,get:U}):Object.defineProperty(e,"ref",{enumerable:!1,value:null}),e._store={},Object.defineProperty(e._store,"validated",{configurable:!1,enumerable:!1,writable:!0,value:0}),Object.defineProperty(e,"_debugInfo",{configurable:!1,enumerable:!1,writable:!0,value:null}),Object.defineProperty(e,"_debugStack",{configurable:!1,enumerable:!1,writable:!0,value:oe}),Object.defineProperty(e,"_debugTask",{configurable:!1,enumerable:!1,writable:!0,value:ie}),Object.freeze&&(Object.freeze(e.props),Object.freeze(e)),e}function O(e,a,p,y,j,C,oe,ie){var w=a.children;if(w!==void 0)if(y)if(k(w)){for(y=0;y<w.length;y++)I(w[y]);Object.freeze&&Object.freeze(w)}else console.error("React.jsx: Static children should always be an array. You are likely explicitly calling React.jsxs or React.jsxDEV. Use the Babel transform instead.");else I(w);if(h.call(a,"key")){w=t(e);var Y=Object.keys(a).filter(function(ye){return ye!=="key"});y=0<Y.length?"{key: someKey, "+Y.join(": ..., ")+": ...}":"{key: someKey}",P[w+y]||(Y=0<Y.length?"{"+Y.join(": ..., ")+": ...}":"{}",console.error(`A props object containing a "key" prop is being spread into JSX:
17
+ */var he;function ge(){return he||(he=1,process.env.NODE_ENV!=="production"&&function(){function t(e){if(e==null)return null;if(typeof e=="function")return e.$$typeof===m?null:e.displayName||e.name||null;if(typeof e=="string")return e;switch(e){case y:return"Fragment";case q:return"Profiler";case N:return"StrictMode";case G:return"Suspense";case s:return"SuspenseList";case P:return"Activity"}if(typeof e=="object")switch(typeof e.tag=="number"&&console.error("Received an unexpected object in getComponentNameFromType(). This is likely a bug in React. Please file an issue."),e.$$typeof){case z:return"Portal";case B:return(e.displayName||"Context")+".Provider";case U:return(e._context.displayName||"Context")+".Consumer";case D:var c=e.render;return e=e.displayName,e||(e=c.displayName||c.name||"",e=e!==""?"ForwardRef("+e+")":"ForwardRef"),e;case _:return c=e.displayName||null,c!==null?c:t(e.type)||"Memo";case w:c=e._payload,e=e._init;try{return t(e(c))}catch{}}return null}function r(e){return""+e}function a(e){try{r(e);var c=!1}catch{c=!0}if(c){c=console;var p=c.error,v=typeof Symbol=="function"&&Symbol.toStringTag&&e[Symbol.toStringTag]||e.constructor.name||"Object";return p.call(c,"The provided key is an unsupported type %s. This value must be coerced to a string before using it here.",v),r(e)}}function u(e){if(e===y)return"<>";if(typeof e=="object"&&e!==null&&e.$$typeof===w)return"<...>";try{var c=t(e);return c?"<"+c+">":"<...>"}catch{return"<...>"}}function o(){var e=i.A;return e===null?null:e.getOwner()}function d(){return Error("react-stack-top-frame")}function f(e){if(n.call(e,"key")){var c=Object.getOwnPropertyDescriptor(e,"key").get;if(c&&c.isReactWarning)return!1}return e.key!==void 0}function T(e,c){function p(){h||(h=!0,console.error("%s: `key` is not a prop. Trying to access it will result in `undefined` being returned. If you need to access the same value within the child component, you should pass it as a different prop. (https://react.dev/link/special-props)",c))}p.isReactWarning=!0,Object.defineProperty(e,"key",{get:p,configurable:!0})}function V(){var e=t(this.type);return C[e]||(C[e]=!0,console.error("Accessing element.ref was removed in React 19. ref is now a regular prop. It will be removed from the JSX Element type in a future release.")),e=this.props.ref,e!==void 0?e:null}function A(e,c,p,v,W,x,oe,ie){return p=x.ref,e={$$typeof:j,type:e,key:c,props:x,_owner:W},(p!==void 0?p:null)!==null?Object.defineProperty(e,"ref",{enumerable:!1,get:V}):Object.defineProperty(e,"ref",{enumerable:!1,value:null}),e._store={},Object.defineProperty(e._store,"validated",{configurable:!1,enumerable:!1,writable:!0,value:0}),Object.defineProperty(e,"_debugInfo",{configurable:!1,enumerable:!1,writable:!0,value:null}),Object.defineProperty(e,"_debugStack",{configurable:!1,enumerable:!1,writable:!0,value:oe}),Object.defineProperty(e,"_debugTask",{configurable:!1,enumerable:!1,writable:!0,value:ie}),Object.freeze&&(Object.freeze(e.props),Object.freeze(e)),e}function L(e,c,p,v,W,x,oe,ie){var S=c.children;if(S!==void 0)if(v)if(E(S)){for(v=0;v<S.length;v++)I(S[v]);Object.freeze&&Object.freeze(S)}else console.error("React.jsx: Static children should always be an array. You are likely explicitly calling React.jsxs or React.jsxDEV. Use the Babel transform instead.");else I(S);if(n.call(c,"key")){S=t(e);var H=Object.keys(c).filter(function(ye){return ye!=="key"});v=0<H.length?"{key: someKey, "+H.join(": ..., ")+": ...}":"{key: someKey}",$[S+v]||(H=0<H.length?"{"+H.join(": ..., ")+": ...}":"{}",console.error(`A props object containing a "key" prop is being spread into JSX:
18
18
  let props = %s;
19
19
  <%s {...props} />
20
20
  React keys must be passed directly to JSX without using spread:
21
21
  let props = %s;
22
- <%s key={someKey} {...props} />`,y,w,Y,w),P[w+y]=!0)}if(w=null,p!==void 0&&(i(p),w=""+p),T(a)&&(i(a.key),w=""+a.key),"key"in a){p={};for(var ae in a)ae!=="key"&&(p[ae]=a[ae])}else p=a;return w&&m(p,typeof e=="function"?e.displayName||e.name||"Unknown":e),N(e,w,C,j,c(),p,oe,ie)}function I(e){typeof e=="object"&&e!==null&&e.$$typeof===$&&e._store&&(e._store.validated=1)}var A=d,$=Symbol.for("react.transitional.element"),g=Symbol.for("react.portal"),E=Symbol.for("react.fragment"),K=Symbol.for("react.strict_mode"),V=Symbol.for("react.profiler"),F=Symbol.for("react.consumer"),L=Symbol.for("react.context"),q=Symbol.for("react.forward_ref"),G=Symbol.for("react.suspense"),s=Symbol.for("react.suspense_list"),v=Symbol.for("react.memo"),o=Symbol.for("react.lazy"),n=Symbol.for("react.activity"),f=Symbol.for("react.client.reference"),_=A.__CLIENT_INTERNALS_DO_NOT_USE_OR_WARN_USERS_THEY_CANNOT_UPGRADE,h=Object.prototype.hasOwnProperty,k=Array.isArray,R=console.createTask?console.createTask:function(){return null};A={"react-stack-bottom-frame":function(e){return e()}};var W,B={},J=A["react-stack-bottom-frame"].bind(A,l)(),z=R(u(l)),P={};Q.Fragment=E,Q.jsx=function(e,a,p,y,j){var C=1e4>_.recentlyCreatedOwnerStacks++;return O(e,a,p,!1,y,j,C?Error("react-stack-top-frame"):J,C?R(u(e)):z)},Q.jsxs=function(e,a,p,y,j){var C=1e4>_.recentlyCreatedOwnerStacks++;return O(e,a,p,!0,y,j,C?Error("react-stack-top-frame"):J,C?R(u(e)):z)}}()),Q}process.env.NODE_ENV==="production"?se.exports=Re():se.exports=ge();var S=se.exports;const ke={errorPillText:"Technical Error",errorNotificationTitle:"Technical error",errorNotificationSubtitle:"Please reload the page or contact our support.",errorTitle:"Technical error",errorTextBeforeEmail:"Try reloading the page. If the error persists, please contact ",errorTextAfterEmail:" and we’ll help you right away.",connectionErrorTitle:"No connection",connectionErrorText:"We couldn’t reach tiun. Check your internet connection and try again.",connectionErrorCta:"Try again"},Ne={errorPillText:"Erreur Technique",errorNotificationTitle:"Erreur technique",errorNotificationSubtitle:"Veuillez recharger la page ou contacter notre support.",errorTitle:"Erreur technique",errorTextBeforeEmail:"Veuillez recharger la page. Si l’erreur persiste, contactez ",errorTextAfterEmail:" et nous vous aiderons immédiatement.",connectionErrorTitle:"Pas de connexion",connectionErrorText:"Impossible de joindre tiun. Vérifiez votre connexion Internet et réessayez.",connectionErrorCta:"Réessayer"},Oe={errorPillText:"Technischer Fehler",errorNotificationTitle:"Technischer Fehler",errorNotificationSubtitle:"Bitte lade die Seite neu, oder kontaktiere unseren Support.",errorTitle:"Technischer Fehler",errorTextBeforeEmail:"Bitte lade die Seite neu. Sollte der Fehler weiterhin auftreten, kontaktiere ",errorTextAfterEmail:" und wir helfen Dir sofort weiter.",connectionErrorTitle:"Keine Verbindung",connectionErrorText:"tiun konnte nicht erreicht werden. Überprüfe deine Internetverbindung und versuche es erneut.",connectionErrorCta:"Erneut versuchen"},Ce={errorPillText:"Technischer Fehler",errorNotificationTitle:"Technischer Fehler",errorNotificationSubtitle:"Bitte laden Sie die Seite neu, oder kontaktieren Sie unseren Support.",errorTitle:"Technischer Fehler",errorTextBeforeEmail:"Bitte laden Sie die Seite neu. Sollte der Fehler weiterhin auftreten, kontaktieren Sie ",errorTextAfterEmail:" und wir helfen Ihnen sofort weiter.",connectionErrorTitle:"Keine Verbindung",connectionErrorText:"tiun konnte nicht erreicht werden. Überprüfen Sie Ihre Internetverbindung und versuchen Sie es erneut.",connectionErrorCta:"Erneut versuchen"};function Ie(t,r="informal"){switch((t??"en").trim().toLowerCase()){case"de":return r==="formal"?Ce:Oe;case"fr":return Ne;default:return ke}}const D={start:"TIUN_START",checkout:"TIUN_CHECKOUT",updateContent:"TIUN_UPDATE_CONTENT",login:"TIUN_LOGIN",logout:"TIUN_LOGOUT",getVerificationToken:"TIUN_GET_VERIFICATION_TOKEN",overlayChange:"TIUN_OVERLAY_CHANGE",popPubKeyRequest:"TIUN_POP_PUBKEY_REQUEST",popSignRequest:"TIUN_POP_SIGN_REQUEST",tokenGet:"TIUN_TOKEN_GET",tokenPersist:"TIUN_TOKEN_PERSIST",nativeReset:"TIUN_NATIVE_RESET",popPubKey:"TIUN_POP_PUBKEY",restoreToken:"TIUN_RESTORE_TOKEN",popSignResult:"TIUN_POP_SIGN_RESULT",resolveCheckout:"TIUN_RESOLVE_CHECKOUT"},Pe="__TIUN_NATIVE_CRYPTO__",xe="https://api.tiun.live";function ue(t){return(t.host??xe).replace(/\/$/,"")}function re(t){return`app.tiun.pop.${t.snippetId||"default"}`}function Z(t){return`app.tiun.token.${t.snippetId||"default"}`}function Ae(t){return`${`${ue(t)}/live_api/v2/snippets/${encodeURIComponent(t.snippetId)}/webview_return`}?to=${encodeURIComponent(t.returnUrl)}`}function je(t){const r={language:t.language??"en"},i=Object.entries(r).map(([c,l])=>`${encodeURIComponent(c)}=${encodeURIComponent(l)}`).join("&"),u=`${ue(t)}/live_api/v2/snippets/${encodeURIComponent(t.snippetId)}/webview_host`;return i?`${u}?${i}`:u}function Te(t){const r=t.indexOf("?");if(!(r<0))for(const i of t.slice(r+1).split("&")){const u=i.indexOf("=");if((u<0?i:i.slice(0,u))==="status"){const l=u<0?"":i.slice(u+1);return l?decodeURIComponent(l):void 0}}}function Ue(t,r){const i=t.returnUrl.split("?")[0];return r.startsWith(i)}const le="1005";function de(t){return t==null?void 0:t.code}async function $e(t){try{return await te.getPublicKey(t)}catch(r){if(de(r)===le)return te.generate(t,{requireUserAuthentication:!1});throw r}}async function Fe(t){try{return await te.getPublicKey(t)}catch(r){if(de(r)===le)return null;throw r}}function Le(t,r){return te.sign(t,r)}async function We(t){try{await te.removeKey(t)}catch(r){if(de(r)!==le)throw r}}const Ve="tiun_auth_token";async function qe(t){const r=await ne.getGenericPassword({service:t});return r?r.password:null}async function Ye(t,r){await ne.setGenericPassword(Ve,r,{service:t,accessible:ne.ACCESSIBLE.AFTER_FIRST_UNLOCK_THIS_DEVICE_ONLY})}async function ce(t){await ne.resetGenericPassword({service:t})}function De(t){const r=Ie(t);return{title:r.connectionErrorTitle,text:r.connectionErrorText,cta:r.connectionErrorCta}}function He({language:t,onRetry:r}){const i=De(t);return S.jsxs(b.View,{style:x.container,children:[S.jsxs(b.View,{style:x.content,children:[S.jsx(b.Text,{style:x.title,children:i.title}),S.jsx(b.View,{style:x.iconBadge,children:S.jsx(b.Text,{style:x.iconGlyph,children:"!"})}),S.jsx(b.Text,{style:x.text,children:i.text})]}),S.jsx(b.Pressable,{accessibilityRole:"button",onPress:r,style:({pressed:u})=>[x.button,u&&x.buttonPressed],children:S.jsx(b.Text,{style:x.buttonText,children:i.cta})})]})}const x=b.StyleSheet.create({container:{...b.StyleSheet.absoluteFillObject,backgroundColor:"#fff",padding:24,justifyContent:"space-between"},content:{flex:1,alignItems:"center",justifyContent:"center",gap:24},title:{fontSize:20,fontWeight:"600",color:"#000",textAlign:"center"},iconBadge:{width:40,height:40,borderRadius:20,backgroundColor:"#FCE7F3",alignItems:"center",justifyContent:"center"},iconGlyph:{color:"#DB2777",fontSize:22,fontWeight:"700",lineHeight:26},text:{fontSize:16,fontWeight:"500",color:"#4B5563",textAlign:"center"},button:{backgroundColor:"#000",borderRadius:999,minHeight:56,alignItems:"center",justifyContent:"center",alignSelf:"stretch"},buttonPressed:{opacity:.9},buttonText:{color:"#fff",fontSize:16,fontWeight:"500"}}),Ke=_e.WebView;function H(t){return`try{window.tiunHost&&${t};}catch(e){}; true;`}const Ge=d.forwardRef(function({config:r,onEvent:i},u){const c=!!r.debug,l=d.useRef(null),[T,m]=d.useState(!1),[U,N]=d.useState(!1),O=d.useRef(!1),I=d.useRef(!1),A=()=>{var o;N(!1),(o=l.current)==null||o.reload()};d.useEffect(()=>{if(!U)return;const o=b.AppState.addEventListener("change",n=>{var f;n==="active"&&(N(!1),(f=l.current)==null||f.reload())});return()=>o.remove()},[U]);const $=`window.${Pe} = true;window.__TIUN_CONFIG__ = Object.assign({}, window.__TIUN_CONFIG__, { returnUrl: ${JSON.stringify(Ae(r))} });true;`,g=(o,...n)=>{var f;return(f=l.current)==null?void 0:f.injectJavaScript(H(`window.tiunHost.${o}(${n.map(_=>JSON.stringify(_)??"null").join(",")})`))},E=o=>{var n;I.current||(I.current=!0,M.close().catch(()=>{}),M.closeAuth().catch(()=>{}),m(!0),(n=l.current)==null||n.injectJavaScript(H(`window.tiunHost.resolveCheckout(${o?JSON.stringify(o):""})`)))},K=o=>{var n,f,_;switch(o.type){case D.popPubKeyRequest:return $e(re(r)).then(h=>g("popPubKey",h)).catch(h=>{c&&console.warn("[tiun] ensurePopKey failed:",h),g("popPubKey",null)}),!0;case D.tokenGet:return(async()=>{try{const h=await qe(Z(r));if(h&&!await Fe(re(r))){await ce(Z(r)),g("restoreToken",null);return}g("restoreToken",h)}catch{g("restoreToken",null)}})(),!0;case D.popSignRequest:{const h=(n=o.payload)==null?void 0:n.requestId,k=(f=o.payload)==null?void 0:f.information;return Le(re(r),k).then(R=>g("popSignResult",h,R,null)).catch(R=>{const W=(R==null?void 0:R.code)??"sign_failed";c&&console.warn("[tiun] popSign failed:",R),g("popSignResult",h,null,String(W))}),!0}case D.tokenPersist:{const h=((_=o.payload)==null?void 0:_.token)??null;return(h?Ye(Z(r),h):ce(Z(r))).catch(k=>c&&console.warn("[tiun] token persist failed:",k)),!0}case D.nativeReset:return Promise.allSettled([We(re(r)),ce(Z(r))]),!0;default:return!1}};d.useImperativeHandle(u,()=>({login:()=>{var o;m(!0),(o=l.current)==null||o.injectJavaScript(H("window.tiunHost.login()"))},checkout:o=>{var n;m(!0),O.current=!0,I.current=!1,(n=l.current)==null||n.injectJavaScript(H(`window.tiunHost.checkout(${o?JSON.stringify(o):""})`))},logout:()=>{var o;return(o=l.current)==null?void 0:o.injectJavaScript(H("window.tiunHost.logout()"))},getVerificationToken:o=>{var n;return(n=l.current)==null?void 0:n.injectJavaScript(H(`window.tiunHost.getVerificationToken(${o?JSON.stringify(o):""})`))},resolveCheckout:E,reload:()=>{var o;return(o=l.current)==null?void 0:o.reload()}}),[]);const V=o=>{var f,_,h;let n=null;try{n=JSON.parse(o.nativeEvent.data)}catch{c&&console.warn("[tiun] non-JSON bridge message:",o.nativeEvent.data);return}if(!(!n||typeof n.type!="string")){if(n.type==="console"){c&&console.log("[tiun webview]",(f=n.payload)==null?void 0:f.level,(_=n.payload)==null?void 0:_.message);return}if((n.type==="cryptoCheck"||n.type==="hostBridgeReady")&&N(!1),c&&console.log("[tiun] <-",n.type,n.payload),!K(n)){if(n.type===D.overlayChange){const k=!!((h=n.payload)!=null&&h.overlay);m(k),k||(O.current=!1)}i(n)}}},F=o=>{if(O.current=!1,b.Platform.OS==="ios"){M.openAuth(o,r.returnUrl).then(n=>{n.type==="success"&&n.url?E(Te(n.url)):n.type==="cancel"&&E("cancelled")}).catch(n=>c&&console.warn("[tiun] openAuth error:",n));return}M.open(o,{showTitle:!1,enableUrlBarHiding:!1,enableDefaultShare:!1,forceCloseOnRedirection:!1}).then(n=>{n.type==="cancel"&&E("cancelled")}).catch(n=>c&&console.warn("[tiun] in-app browser open error:",n))},L=o=>{M.open(o,{modalPresentationStyle:"fullScreen",modalEnabled:!0,animated:!0,enableBarCollapsing:!0}).catch(n=>c&&console.warn("[tiun] in-app browser open failed:",n))},q=o=>{var f;const n=(f=o.nativeEvent)==null?void 0:f.targetUrl;n&&(O.current?F(n):L(n))},G=o=>{const n=o.url;return n.startsWith(ue(r))||n.startsWith("about:")||n.startsWith("data:")||n==="about:blank"?!0:n.startsWith("http://")||n.startsWith("https://")?(O.current&&o.isTopFrame!==!1?F(n):L(n),!1):!0},{width:s,height:v}=b.useWindowDimensions();return S.jsxs(b.View,{pointerEvents:T?"auto":"none",style:[ee.container,{width:s,height:v},T?ee.visible:ee.hidden],children:[S.jsx(Ke,{ref:l,source:{uri:je(r)},originWhitelist:["*"],onMessage:V,onShouldStartLoadWithRequest:G,onOpenWindow:q,injectedJavaScriptBeforeContentLoaded:$,javaScriptEnabled:!0,domStorageEnabled:!0,style:ee.webview,containerStyle:ee.webview,onError:o=>{c&&console.warn("[tiun] webview load error:",o.nativeEvent),N(!0)},onHttpError:o=>{c&&console.warn("[tiun] webview http error:",o.nativeEvent),N(!0)}}),U&&T?S.jsx(He,{language:r.language,onRetry:A}):null]})}),ee=b.StyleSheet.create({container:{position:"absolute",top:0,left:0,zIndex:9999,elevation:9999},webview:{flex:1,backgroundColor:"transparent"},visible:{opacity:1},hidden:{opacity:0}});class Be{constructor(){fe(this,"listeners",new Map)}on(r,i){let u=this.listeners.get(r);return u||(u=new Set,this.listeners.set(r,u)),u.add(i),()=>{var c;(c=this.listeners.get(r))==null||c.delete(i)}}emit(r,i){const u=this.listeners.get(r);if(u)for(const c of u)try{c(i)}catch{}}}const Ee=d.createContext(null),be=d.createContext(null);function Je({config:t,children:r}){const i=d.useRef(null),u=d.useRef(!1),c=d.useRef([]),l=d.useRef(new Map),T=d.useRef(new Be).current,[m,U]=d.useState(!1),[N,O]=d.useState(null),[I,A]=d.useState(!1),[$,g]=d.useState(null),E=d.useCallback(s=>{u.current?s():c.current.push(s)},[]),K=d.useCallback(s=>{var v,o,n,f,_,h,k,R,W,B,J,z;switch(s.type){case"cryptoCheck":g(!!((v=s.payload)!=null&&v.subtle&&((o=s.payload)!=null&&o.secureContext)));break;case"TIUN_SNIPPET_INITIALIZED":{u.current=!0,A(!0),T.emit("ready",void 0);const P=c.current;c.current=[],P.forEach(e=>e());break}case"TIUN_USER_CHANGE":{const P=!!((n=s.payload)!=null&&n.isAuthenticated),e=((f=s.payload)==null?void 0:f.user)??null;U(P),O(e),T.emit("userChange",{isAuthenticated:P,user:e}),((_=s.payload)==null?void 0:_.userEvent)==="login"&&T.emit("login",{user:e}),((h=s.payload)==null?void 0:h.userEvent)==="logout"&&T.emit("logout",void 0);break}case"TIUN_VERIFICATION_TOKEN":{const P=((k=s.payload)==null?void 0:k.token)??null,e=(R=s.payload)==null?void 0:R.requestId;e&&l.current.has(e)&&(l.current.get(e)(P),l.current.delete(e));break}case"TIUN_SHOW_PAYWALL":T.emit("paywallShow",{isConnected:!!((W=s.payload)!=null&&W.isConnected)});break;case"TIUN_HIDE_PAYWALL":T.emit("paywallHide",{sessionId:((B=s.payload)==null?void 0:B.sessionId)??"",isConnected:((J=s.payload)==null?void 0:J.isConnected)??!0});break;case"TIUN_ERROR":T.emit("error",((z=s.payload)==null?void 0:z.error)??s.payload??{});break}},[T]);d.useEffect(()=>{const s=o=>{if(!o||!Ue(t,o))return;const n=Te(o);E(()=>{var f;return(f=i.current)==null?void 0:f.resolveCheckout(n)})},v=b.Linking.addEventListener("url",({url:o})=>s(o));return b.Linking.getInitialURL().then(s).catch(()=>{}),()=>v.remove()},[t,E]);const V=d.useCallback(()=>E(()=>{var s;return(s=i.current)==null?void 0:s.login()}),[E]),F=d.useCallback(()=>E(()=>{var s;return(s=i.current)==null?void 0:s.logout()}),[E]),L=d.useCallback(s=>E(()=>{var v;return(v=i.current)==null?void 0:v.checkout(s==null?void 0:s.productId)}),[E]),q=d.useCallback(()=>new Promise(s=>{const v=`vt_${Math.random().toString(36).slice(2)}_${Date.now()}`;let o=!1;const n=f=>{o||(o=!0,l.current.delete(v),s(f))};l.current.set(v,n),E(()=>{var f;return(f=i.current)==null?void 0:f.getVerificationToken(v)}),setTimeout(()=>n(null),5e3)}),[E]),G=d.useMemo(()=>({isAuthenticated:m,user:N,ready:I,cryptoOk:$,login:V,logout:F,checkout:L,getUserVerificationToken:q}),[m,N,I,$,V,F,L,q]);return S.jsx(Ee.Provider,{value:G,children:S.jsxs(be.Provider,{value:T,children:[r,S.jsx(Ge,{ref:i,config:t,onEvent:K})]})})}function ze(){const t=d.useContext(Ee);if(!t)throw new Error("useTiun must be used within a <TiunProvider>");return t}function Me(t,r){const i=d.useContext(be),u=d.useRef(r);u.current=r,d.useEffect(()=>{if(!i)throw new Error("useTiunEvent must be used within a <TiunProvider>");return i.on(t,c=>u.current(c))},[i,t])}exports.TiunProvider=Je;exports.useTiun=ze;exports.useTiunEvent=Me;
22
+ <%s key={someKey} {...props} />`,v,S,H,S),$[S+v]=!0)}if(S=null,p!==void 0&&(a(p),S=""+p),f(c)&&(a(c.key),S=""+c.key),"key"in c){p={};for(var ae in c)ae!=="key"&&(p[ae]=c[ae])}else p=c;return S&&T(p,typeof e=="function"?e.displayName||e.name||"Unknown":e),A(e,S,x,W,o(),p,oe,ie)}function I(e){typeof e=="object"&&e!==null&&e.$$typeof===j&&e._store&&(e._store.validated=1)}var k=l,j=Symbol.for("react.transitional.element"),z=Symbol.for("react.portal"),y=Symbol.for("react.fragment"),N=Symbol.for("react.strict_mode"),q=Symbol.for("react.profiler"),U=Symbol.for("react.consumer"),B=Symbol.for("react.context"),D=Symbol.for("react.forward_ref"),G=Symbol.for("react.suspense"),s=Symbol.for("react.suspense_list"),_=Symbol.for("react.memo"),w=Symbol.for("react.lazy"),P=Symbol.for("react.activity"),m=Symbol.for("react.client.reference"),i=k.__CLIENT_INTERNALS_DO_NOT_USE_OR_WARN_USERS_THEY_CANNOT_UPGRADE,n=Object.prototype.hasOwnProperty,E=Array.isArray,R=console.createTask?console.createTask:function(){return null};k={"react-stack-bottom-frame":function(e){return e()}};var h,C={},O=k["react-stack-bottom-frame"].bind(k,d)(),Y=R(u(d)),$={};Q.Fragment=y,Q.jsx=function(e,c,p,v,W){var x=1e4>i.recentlyCreatedOwnerStacks++;return L(e,c,p,!1,v,W,x?Error("react-stack-top-frame"):O,x?R(u(e)):Y)},Q.jsxs=function(e,c,p,v,W){var x=1e4>i.recentlyCreatedOwnerStacks++;return L(e,c,p,!0,v,W,x?Error("react-stack-top-frame"):O,x?R(u(e)):Y)}}()),Q}process.env.NODE_ENV==="production"?se.exports=Re():se.exports=ge();var g=se.exports;const ke={errorPillText:"Technical Error",errorNotificationTitle:"Technical error",errorNotificationSubtitle:"Please reload the page or contact our support.",errorTitle:"Technical error",errorTextBeforeEmail:"Try reloading the page. If the error persists, please contact ",errorTextAfterEmail:" and we’ll help you right away.",connectionErrorTitle:"No connection",connectionErrorText:"We couldn’t reach tiun. Check your internet connection and try again.",connectionErrorCta:"Try again"},Ne={errorPillText:"Erreur Technique",errorNotificationTitle:"Erreur technique",errorNotificationSubtitle:"Veuillez recharger la page ou contacter notre support.",errorTitle:"Erreur technique",errorTextBeforeEmail:"Veuillez recharger la page. Si l’erreur persiste, contactez ",errorTextAfterEmail:" et nous vous aiderons immédiatement.",connectionErrorTitle:"Pas de connexion",connectionErrorText:"Impossible de joindre tiun. Vérifiez votre connexion Internet et réessayez.",connectionErrorCta:"Réessayer"},Ce={errorPillText:"Technischer Fehler",errorNotificationTitle:"Technischer Fehler",errorNotificationSubtitle:"Bitte lade die Seite neu, oder kontaktiere unseren Support.",errorTitle:"Technischer Fehler",errorTextBeforeEmail:"Bitte lade die Seite neu. Sollte der Fehler weiterhin auftreten, kontaktiere ",errorTextAfterEmail:" und wir helfen Dir sofort weiter.",connectionErrorTitle:"Keine Verbindung",connectionErrorText:"tiun konnte nicht erreicht werden. Überprüfe deine Internetverbindung und versuche es erneut.",connectionErrorCta:"Erneut versuchen"},Oe={errorPillText:"Technischer Fehler",errorNotificationTitle:"Technischer Fehler",errorNotificationSubtitle:"Bitte laden Sie die Seite neu, oder kontaktieren Sie unseren Support.",errorTitle:"Technischer Fehler",errorTextBeforeEmail:"Bitte laden Sie die Seite neu. Sollte der Fehler weiterhin auftreten, kontaktieren Sie ",errorTextAfterEmail:" und wir helfen Ihnen sofort weiter.",connectionErrorTitle:"Keine Verbindung",connectionErrorText:"tiun konnte nicht erreicht werden. Überprüfen Sie Ihre Internetverbindung und versuchen Sie es erneut.",connectionErrorCta:"Erneut versuchen"};function Ie(t,r="informal"){switch((t??"en").trim().toLowerCase()){case"de":return r==="formal"?Oe:Ce;case"fr":return Ne;default:return ke}}const K={start:"TIUN_START",checkout:"TIUN_CHECKOUT",updateContent:"TIUN_UPDATE_CONTENT",login:"TIUN_LOGIN",logout:"TIUN_LOGOUT",getVerificationToken:"TIUN_GET_VERIFICATION_TOKEN",setAppearance:"TIUN_SET_APPEARANCE",overlayChange:"TIUN_OVERLAY_CHANGE",popPubKeyRequest:"TIUN_POP_PUBKEY_REQUEST",popSignRequest:"TIUN_POP_SIGN_REQUEST",tokenGet:"TIUN_TOKEN_GET",tokenPersist:"TIUN_TOKEN_PERSIST",nativeReset:"TIUN_NATIVE_RESET",popPubKey:"TIUN_POP_PUBKEY",restoreToken:"TIUN_RESTORE_TOKEN",popSignResult:"TIUN_POP_SIGN_RESULT",resolveCheckout:"TIUN_RESOLVE_CHECKOUT"},Pe="__TIUN_NATIVE_CRYPTO__",xe="https://api.tiun.live";function ue(t){return(t.host??xe).replace(/\/$/,"")}function re(t){return`app.tiun.pop.${t.snippetId||"default"}`}function Z(t){return`app.tiun.token.${t.snippetId||"default"}`}function Ae(t){return`${`${ue(t)}/live_api/v2/snippets/${encodeURIComponent(t.snippetId)}/webview_return`}?to=${encodeURIComponent(t.returnUrl)}`}function je(t){const r={language:t.language??"en"},a=Object.entries(r).map(([o,d])=>`${encodeURIComponent(o)}=${encodeURIComponent(d)}`).join("&"),u=`${ue(t)}/live_api/v2/snippets/${encodeURIComponent(t.snippetId)}/webview_host`;return a?`${u}?${a}`:u}function Te(t){const r=t.indexOf("?");if(!(r<0))for(const a of t.slice(r+1).split("&")){const u=a.indexOf("=");if((u<0?a:a.slice(0,u))==="status"){const d=u<0?"":a.slice(u+1);return d?decodeURIComponent(d):void 0}}}function Ue(t,r){const a=t.returnUrl.split("?")[0];return r.startsWith(a)}const le="1005";function de(t){return t==null?void 0:t.code}async function $e(t){try{return await te.getPublicKey(t)}catch(r){if(de(r)===le)return te.generate(t,{requireUserAuthentication:!1});throw r}}async function Fe(t){try{return await te.getPublicKey(t)}catch(r){if(de(r)===le)return null;throw r}}function Le(t,r){return te.sign(t,r)}async function We(t){try{await te.removeKey(t)}catch(r){if(de(r)!==le)throw r}}const Ve="tiun_auth_token";async function qe(t){const r=await ne.getGenericPassword({service:t});return r?r.password:null}async function Ye(t,r){await ne.setGenericPassword(Ve,r,{service:t,accessible:ne.ACCESSIBLE.AFTER_FIRST_UNLOCK_THIS_DEVICE_ONLY})}async function ce(t){await ne.resetGenericPassword({service:t})}function Be(t){const r=Ie(t);return{title:r.connectionErrorTitle,text:r.connectionErrorText,cta:r.connectionErrorCta}}function De({language:t,dark:r,onRetry:a}){const u=Be(t),o=r?Ge:null;return g.jsxs(b.View,{style:[F.container,o==null?void 0:o.container],children:[g.jsxs(b.View,{style:F.content,children:[g.jsx(b.Text,{style:[F.title,o==null?void 0:o.title],children:u.title}),g.jsx(b.View,{style:[F.iconBadge,o==null?void 0:o.iconBadge],children:g.jsx(b.Text,{style:[F.iconGlyph,o==null?void 0:o.iconGlyph],children:"!"})}),g.jsx(b.Text,{style:[F.text,o==null?void 0:o.text],children:u.text})]}),g.jsx(b.Pressable,{accessibilityRole:"button",onPress:a,style:({pressed:d})=>[F.button,o==null?void 0:o.button,d&&F.buttonPressed],children:g.jsx(b.Text,{style:[F.buttonText,o==null?void 0:o.buttonText],children:u.cta})})]})}const F=b.StyleSheet.create({container:{...b.StyleSheet.absoluteFillObject,backgroundColor:"#fff",padding:24,justifyContent:"space-between"},content:{flex:1,alignItems:"center",justifyContent:"center",gap:24},title:{fontSize:20,fontWeight:"600",color:"#000",textAlign:"center"},iconBadge:{width:40,height:40,borderRadius:20,backgroundColor:"#FCE7F3",alignItems:"center",justifyContent:"center"},iconGlyph:{color:"#DB2777",fontSize:22,fontWeight:"700",lineHeight:26},text:{fontSize:16,fontWeight:"500",color:"#4B5563",textAlign:"center"},button:{backgroundColor:"#000",borderRadius:999,minHeight:56,alignItems:"center",justifyContent:"center",alignSelf:"stretch"},buttonPressed:{opacity:.9},buttonText:{color:"#fff",fontSize:16,fontWeight:"500"}}),Ge=b.StyleSheet.create({container:{backgroundColor:"#0a0a0a"},title:{color:"#fafafa"},iconBadge:{backgroundColor:"#500724"},iconGlyph:{color:"#F472B6"},text:{color:"#A1A1AA"},button:{backgroundColor:"#fafafa"},buttonText:{color:"#000"}}),He=Se.WebView;function J(t){return`try{window.tiunHost&&${t};}catch(e){}; true;`}const Ke=l.forwardRef(function({config:r,onEvent:a},u){const o=!!r.debug,d=b.useColorScheme(),f=r.appearance==="dark"||r.appearance==="auto"&&d==="dark"?"dark":"light",T=l.useRef(null),[V,A]=l.useState(!1),[L,I]=l.useState(!1),k=l.useRef(!1),j=l.useRef(!1),z=()=>{var i;I(!1),(i=T.current)==null||i.reload()};l.useEffect(()=>{if(!L)return;const i=b.AppState.addEventListener("change",n=>{var E;n==="active"&&(I(!1),(E=T.current)==null||E.reload())});return()=>i.remove()},[L]);const y=`window.${Pe} = true;window.__TIUN_CONFIG__ = Object.assign({}, window.__TIUN_CONFIG__, { returnUrl: ${JSON.stringify(Ae(r))}, appearance: ${JSON.stringify(f)} });true;`,N=(i,...n)=>{var E;return(E=T.current)==null?void 0:E.injectJavaScript(J(`window.tiunHost.${i}(${n.map(R=>JSON.stringify(R)??"null").join(",")})`))},q=l.useRef(f);l.useEffect(()=>{f!==q.current&&(q.current=f,N("setAppearance",f))},[f]);const U=i=>{var n;j.current||(j.current=!0,M.close().catch(()=>{}),M.closeAuth().catch(()=>{}),A(!0),(n=T.current)==null||n.injectJavaScript(J(`window.tiunHost.resolveCheckout(${i?JSON.stringify(i):""})`)))},B=i=>{var n,E,R;switch(i.type){case K.popPubKeyRequest:return $e(re(r)).then(h=>N("popPubKey",h)).catch(h=>{o&&console.warn("[tiun] ensurePopKey failed:",h),N("popPubKey",null)}),!0;case K.tokenGet:return(async()=>{try{const h=await qe(Z(r));if(h&&!await Fe(re(r))){await ce(Z(r)),N("restoreToken",null);return}N("restoreToken",h)}catch{N("restoreToken",null)}})(),!0;case K.popSignRequest:{const h=(n=i.payload)==null?void 0:n.requestId,C=(E=i.payload)==null?void 0:E.information;return Le(re(r),C).then(O=>N("popSignResult",h,O,null)).catch(O=>{const Y=(O==null?void 0:O.code)??"sign_failed";o&&console.warn("[tiun] popSign failed:",O),N("popSignResult",h,null,String(Y))}),!0}case K.tokenPersist:{const h=((R=i.payload)==null?void 0:R.token)??null;return(h?Ye(Z(r),h):ce(Z(r))).catch(C=>o&&console.warn("[tiun] token persist failed:",C)),!0}case K.nativeReset:return Promise.allSettled([We(re(r)),ce(Z(r))]),!0;default:return!1}};l.useImperativeHandle(u,()=>({login:()=>{var i;A(!0),(i=T.current)==null||i.injectJavaScript(J("window.tiunHost.login()"))},checkout:i=>{var n;A(!0),k.current=!0,j.current=!1,(n=T.current)==null||n.injectJavaScript(J(`window.tiunHost.checkout(${i?JSON.stringify(i):""})`))},logout:()=>{var i;return(i=T.current)==null?void 0:i.injectJavaScript(J("window.tiunHost.logout()"))},getVerificationToken:i=>{var n;return(n=T.current)==null?void 0:n.injectJavaScript(J(`window.tiunHost.getVerificationToken(${i?JSON.stringify(i):""})`))},resolveCheckout:U,reload:()=>{var i;return(i=T.current)==null?void 0:i.reload()}}),[]);const D=i=>{var E,R,h;let n=null;try{n=JSON.parse(i.nativeEvent.data)}catch{o&&console.warn("[tiun] non-JSON bridge message:",i.nativeEvent.data);return}if(!(!n||typeof n.type!="string")){if(n.type==="console"){o&&console.log("[tiun webview]",(E=n.payload)==null?void 0:E.level,(R=n.payload)==null?void 0:R.message);return}if((n.type==="cryptoCheck"||n.type==="hostBridgeReady")&&I(!1),o&&console.log("[tiun] <-",n.type,n.payload),!B(n)){if(n.type===K.overlayChange){const C=!!((h=n.payload)!=null&&h.overlay);A(C),C||(k.current=!1)}a(n)}}},G=i=>{if(k.current=!1,b.Platform.OS==="ios"){M.openAuth(i,r.returnUrl).then(n=>{n.type==="success"&&n.url?U(Te(n.url)):n.type==="cancel"&&U("cancelled")}).catch(n=>o&&console.warn("[tiun] openAuth error:",n));return}M.open(i,{showTitle:!1,enableUrlBarHiding:!1,enableDefaultShare:!1,forceCloseOnRedirection:!1}).then(n=>{n.type==="cancel"&&U("cancelled")}).catch(n=>o&&console.warn("[tiun] in-app browser open error:",n))},s=i=>{M.open(i,{modalPresentationStyle:"fullScreen",modalEnabled:!0,animated:!0,enableBarCollapsing:!0}).catch(n=>o&&console.warn("[tiun] in-app browser open failed:",n))},_=i=>{var E;const n=(E=i.nativeEvent)==null?void 0:E.targetUrl;n&&(k.current?G(n):s(n))},w=i=>{const n=i.url;return n.startsWith(ue(r))||n.startsWith("about:")||n.startsWith("data:")||n==="about:blank"?!0:n.startsWith("http://")||n.startsWith("https://")?(k.current&&i.isTopFrame!==!1?G(n):s(n),!1):!0},{width:P,height:m}=b.useWindowDimensions();return g.jsxs(b.View,{pointerEvents:V?"auto":"none",style:[ee.container,{width:P,height:m},V?ee.visible:ee.hidden],children:[g.jsx(He,{ref:T,source:{uri:je(r)},originWhitelist:["*"],onMessage:D,onShouldStartLoadWithRequest:w,onOpenWindow:_,injectedJavaScriptBeforeContentLoaded:y,javaScriptEnabled:!0,domStorageEnabled:!0,style:ee.webview,containerStyle:ee.webview,onError:i=>{o&&console.warn("[tiun] webview load error:",i.nativeEvent),I(!0)},onHttpError:i=>{o&&console.warn("[tiun] webview http error:",i.nativeEvent),I(!0)}}),L&&V?g.jsx(De,{language:r.language,dark:f==="dark",onRetry:z}):null]})}),ee=b.StyleSheet.create({container:{position:"absolute",top:0,left:0,zIndex:9999,elevation:9999},webview:{flex:1,backgroundColor:"transparent"},visible:{opacity:1},hidden:{opacity:0}});class Je{constructor(){fe(this,"listeners",new Map)}on(r,a){let u=this.listeners.get(r);return u||(u=new Set,this.listeners.set(r,u)),u.add(a),()=>{var o;(o=this.listeners.get(r))==null||o.delete(a)}}emit(r,a){const u=this.listeners.get(r);if(u)for(const o of u)try{o(a)}catch{}}}const Ee=l.createContext(null),be=l.createContext(null);function ze({config:t,children:r}){const a=l.useRef(null),u=l.useRef(!1),o=l.useRef([]),d=l.useRef(new Map),f=l.useRef(new Je).current,[T,V]=l.useState(!1),[A,L]=l.useState(null),[I,k]=l.useState(!1),[j,z]=l.useState(null),y=l.useCallback(s=>{u.current?s():o.current.push(s)},[]),N=l.useCallback(s=>{var _,w,P,m,i,n,E,R,h,C,O,Y;switch(s.type){case"cryptoCheck":z(!!((_=s.payload)!=null&&_.subtle&&((w=s.payload)!=null&&w.secureContext)));break;case"TIUN_SNIPPET_INITIALIZED":{u.current=!0,k(!0),f.emit("ready",void 0);const $=o.current;o.current=[],$.forEach(e=>e());break}case"TIUN_USER_CHANGE":{const $=!!((P=s.payload)!=null&&P.isAuthenticated),e=((m=s.payload)==null?void 0:m.user)??null;V($),L(e),f.emit("userChange",{isAuthenticated:$,user:e}),((i=s.payload)==null?void 0:i.userEvent)==="login"&&f.emit("login",{user:e}),((n=s.payload)==null?void 0:n.userEvent)==="logout"&&f.emit("logout",void 0);break}case"TIUN_VERIFICATION_TOKEN":{const $=((E=s.payload)==null?void 0:E.token)??null,e=(R=s.payload)==null?void 0:R.requestId;e&&d.current.has(e)&&(d.current.get(e)($),d.current.delete(e));break}case"TIUN_SHOW_PAYWALL":f.emit("paywallShow",{isConnected:!!((h=s.payload)!=null&&h.isConnected)});break;case"TIUN_HIDE_PAYWALL":f.emit("paywallHide",{sessionId:((C=s.payload)==null?void 0:C.sessionId)??"",isConnected:((O=s.payload)==null?void 0:O.isConnected)??!0});break;case"TIUN_ERROR":f.emit("error",((Y=s.payload)==null?void 0:Y.error)??s.payload??{});break}},[f]);l.useEffect(()=>{const s=w=>{if(!w||!Ue(t,w))return;const P=Te(w);y(()=>{var m;return(m=a.current)==null?void 0:m.resolveCheckout(P)})},_=b.Linking.addEventListener("url",({url:w})=>s(w));return b.Linking.getInitialURL().then(s).catch(()=>{}),()=>_.remove()},[t,y]);const q=l.useCallback(()=>y(()=>{var s;return(s=a.current)==null?void 0:s.login()}),[y]),U=l.useCallback(()=>y(()=>{var s;return(s=a.current)==null?void 0:s.logout()}),[y]),B=l.useCallback(s=>y(()=>{var _;return(_=a.current)==null?void 0:_.checkout(s==null?void 0:s.productId)}),[y]),D=l.useCallback(()=>new Promise(s=>{const _=`vt_${Math.random().toString(36).slice(2)}_${Date.now()}`;let w=!1;const P=m=>{w||(w=!0,d.current.delete(_),s(m))};d.current.set(_,P),y(()=>{var m;return(m=a.current)==null?void 0:m.getVerificationToken(_)}),setTimeout(()=>P(null),5e3)}),[y]),G=l.useMemo(()=>({isAuthenticated:T,user:A,ready:I,cryptoOk:j,login:q,logout:U,checkout:B,getUserVerificationToken:D}),[T,A,I,j,q,U,B,D]);return g.jsx(Ee.Provider,{value:G,children:g.jsxs(be.Provider,{value:f,children:[r,g.jsx(Ke,{ref:a,config:t,onEvent:N})]})})}function Me(){const t=l.useContext(Ee);if(!t)throw new Error("useTiun must be used within a <TiunProvider>");return t}function Xe(t,r){const a=l.useContext(be),u=l.useRef(r);u.current=r,l.useEffect(()=>{if(!a)throw new Error("useTiunEvent must be used within a <TiunProvider>");return a.on(t,o=>u.current(o))},[a,t])}exports.TiunProvider=ze;exports.useTiun=Me;exports.useTiunEvent=Xe;