@vbotma/bridge 2.3.2 → 2.3.4

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
@@ -9,7 +9,7 @@ export { emitEvent } from './events/emitEvent.js';
9
9
  export type { EventListener, SubscribeListener, Events, WriteAccessRequestedStatus, EmojiStatusAccessRequestedStatus, BiometryAuthRequestStatus, BiometryTokenUpdateStatus, BiometryType, EmojiStatusFailedError, EventName, EventPayload, EventWithoutPayload, EventWithPayload, PhoneRequestedStatus, FullScreenErrorStatus, HomeScreenStatus, InvoiceStatus, SafeAreaInsets, } from './events/types/index.js';
10
10
  export { captureSameReq } from './methods/captureSameReq.js';
11
11
  export { createPostEvent, type CreatePostEventMode, type OnUnsupportedFn, } from './methods/createPostEvent.js';
12
- export { getReleaseVersion } from './methods/getReleaseVersion.js';
12
+ export { getReleaseVersion, LATEST_VERSION } from './methods/getReleaseVersion.js';
13
13
  export { postEvent, postEventFp, type PostEventFn, type PostEventFpFn, type PostEventError, } from './methods/postEvent.js';
14
14
  export { postMessage, type PostMessage } from './methods/postMessage.js';
15
15
  export { supports } from './methods/supports.js';
@@ -13,3 +13,7 @@ export declare function getReleaseVersion<M extends MethodNameWithVersionedParam
13
13
  * @param method - method name.
14
14
  */
15
15
  export declare function getReleaseVersion(method: MethodName): Version | null;
16
+ /**
17
+ * The latest supported version of VBot Mini Apps.
18
+ */
19
+ export declare const LATEST_VERSION: Version;
@@ -328,7 +328,7 @@ export interface Methods {
328
328
  * @since v6.1
329
329
  * @see https://docs.vbot-mini-apps.com/platform/methods#web-app-open-tg-link
330
330
  */
331
- web_app_open_tg_link: CreateMethodParams<{
331
+ web_app_open_vb_link: CreateMethodParams<{
332
332
  /**
333
333
  * Should be a value taken from the link of this format: `https://vbot.vn/{path_full}`. Can
334
334
  * additionally contain query parameters.
package/dist/index.cjs CHANGED
@@ -1,4 +1,4 @@
1
- "use strict";Object.defineProperty(exports,Symbol.toStringTag,{value:"Module"});const c=require("valibot"),l=require("@vbotma/toolkit"),S=require("better-promises"),s=require("fp-ts"),v=require("error-kid"),h=require("@vbotma/transformers"),y=require("@vbotma/signals"),we=require("mitt");function M(e){return c.is(c.looseObject({VBotWebviewProxy:c.looseObject({postEvent:c.function()})}),e)}function V(){try{return window.self!==window.top}catch{return!0}}class X extends v.errorClass("MethodUnsupportedError",(t,r)=>[`Method "${t}" is unsupported in Mini Apps version ${r}`]){}class Z extends v.errorClass("MethodParameterUnsupportedError",(t,r,n)=>[`Parameter "${r}" of "${t}" method is unsupported in Mini Apps version ${n}`]){}class ee extends v.errorClassWithData("LaunchParamsRetrieveError",t=>({errors:t}),t=>[["Unable to retrieve launch parameters from any known source. You should pass correct parameters to Mini App","","Collected errors:",...t.map(({source:r,error:n})=>`Source: ${r} / ${n instanceof Error?n.message:String(n)}`)].join(`
2
- `)]){}class j extends v.errorClass("InvalidLaunchParamsError",(t,r)=>[`Invalid value for launch params: ${t}`,{cause:r}]){}class R extends v.errorClass("UnknownEnvError"){}class te extends v.errorClass("InvokeCustomMethodError",t=>[`Server returned error: ${t}`]){}const J="launchParams";function G(e){return e.replace(/^[^?#]*[?#]/,"").replace(/[?#]/g,"&")}function re(){return s.function.pipe(x(),s.either.chainW(h.parseLaunchParamsQueryFp))}const be=l.throwifyFpFn(re);function ne(){return s.function.pipe(x(),s.either.map(e=>{const t=new URLSearchParams(e).get("vbWebAppData");return t?s.option.some(t):s.option.none}))}function me(){return s.function.pipe(ne(),s.either.fold(e=>{throw e},e=>e),s.option.match(()=>{},e=>e))}function x(){const e=[];for(const[t,r]of[[()=>G(window.location.href),"window.location.href"],[()=>{const n=performance.getEntriesByType("navigation")[0];return n&&G(n.name)},"performance navigation entries"],[()=>l.getStorageValue(J),"local storage"]]){const n=t();if(!n){e.push({source:r,error:new Error("Source is empty")});continue}const a=s.function.pipe(h.parseLaunchParamsQueryFp(n),s.either.foldW(o=>o,()=>!0));if(typeof a!="boolean"){e.push({source:r,error:a});continue}return l.setStorageValue(J,n),s.either.right(n)}return s.either.left(new ee(e))}const ge=l.throwifyFpFn(x);function U(e,t){const r=new Map,n=we(),a=(o,i,p=!1)=>{const _=r.get(o)||new Map;r.set(o,_);const u=_.get(i)||[];_.set(i,u);const f=u.findIndex(d=>d[1]===p);if(f>=0&&(n.off(o,u[f][0]),u.splice(f,1),!u.length&&(_.delete(i),!_.size))){const d=r.size;r.delete(o),d&&!r.size&&t()}};return{on(o,i,p){!r.size&&e();const _=()=>{a(o,i,p)},u=(...w)=>{p&&_(),o==="*"?i({name:w[0],payload:w[1]}):i(...w)};n.on(o,u);const f=r.get(o)||new Map;r.set(o,f);const d=f.get(i)||[];return f.set(i,d),d.push([u,p||!1]),_},off:a,emit:n.emit,clear(){const o=r.size;n.all.clear(),r.clear(),o&&t()}}}function B(e,t){window.dispatchEvent(new MessageEvent("message",{data:JSON.stringify({eventType:e,eventData:t}),source:window.parent}))}const C=y.signal(!1),I=y.signal("https://web.vbot.org"),ye=e=>{m().log("Event received:",e)},T=y.computed(C);function ve(e){e!==C()&&(C.set(e),(e?F:ae)("*",ye))}const $=y.computed(I);function Ee(e){I.set(e),m().log("New target origin set",e)}const b=y.signal((...e)=>{window.parent.postMessage(...e)}),m=y.signal(l.createLogger("Bridge",{bgColor:"#9147ff",textColor:"white",shouldLog:T}));function Pe(){se(),[b,I,$,C,T,m].forEach(e=>{e.unsubAll(),"reset"in e&&e.reset()})}function A(e,t,r){const n=[r],a=e[t];typeof a=="function"&&n.push(a);const o=(...p)=>{n.forEach(_=>_(...p))},i=Object.assign((...p)=>{o(...p)},{unwrap(){const{length:p}=n;if(p===1){delete e[t];return}if(p===2){N(e,t,n[1]);return}n.unshift(1),N(e,t,o)}});oe(e,t,()=>i,p=>n.push(p))}function H(e,t){const r=e[t];oe(e,t,()=>r,n=>{Object.entries(n).forEach(([a,o])=>{r[a]=o})})}function oe(e,t,r,n){Object.defineProperty(e,t,{enumerable:!0,configurable:!0,get:r,set:n})}function N(e,t,r){Object.defineProperty(e,t,{enumerable:!0,configurable:!0,writable:!0,value:r})}const ke={clipboard_text_received:c.looseObject({req_id:c.string(),data:c.nullish(c.string())}),custom_method_invoked:c.looseObject({req_id:c.string(),result:c.optional(c.unknown()),error:c.optional(c.string())}),popup_closed:c.nullish(c.looseObject({button_id:c.nullish(c.string(),()=>{})}),{}),viewport_changed:c.nullish(c.looseObject({height:c.number(),width:c.nullish(c.number(),()=>window.innerWidth),is_state_stable:c.boolean(),is_expanded:c.boolean()}),()=>({height:window.innerHeight,is_state_stable:!0,is_expanded:!0})),theme_changed:c.looseObject({theme_params:h.themeParams()})};function Q(e){if(e.source!==window.parent)return;let t;try{t=c.parse(h.pipeJsonToSchema(h.miniAppsMessage()),e.data)}catch{return}const{eventType:r,eventData:n}=t,a=ke[r];let o;try{o=a?c.parse(a,n):n}catch(i){return m().forceError([`An error occurred processing the "${r}" event from the VBot application.`,"Please, file an issue here:"].join(`
3
- `),t,i)}Be(r,o)}const{on:F,off:ae,emit:Be,clear:se}=U(()=>{const e=window;!e.VBotGameProxy&&(e.VBotGameProxy={}),A(e.VBotGameProxy,"receiveEvent",B),H(e,"VBotGameProxy"),!e.VBot&&(e.VBot={}),!e.VBot.WebView&&(e.VBot.WebView={}),A(e.VBot.WebView,"receiveEvent",B),H(e.VBot,"WebView"),A(e,"VBotGameProxy_receiveEvent",B),window.addEventListener("message",Q)},()=>{[["VBotGameProxy_receiveEvent"],["VBotGameProxy","receiveEvent"],["VBot","WebView","receiveEvent"]].forEach(e=>{const t=window;let r=[void 0,t];for(const o of e)if(r=[r[1],r[1][o]],!r[1])return;const[n,a]=r;"unwrap"in a&&(a.unwrap(),n&&n!==t&&!Object.keys(n).length&&delete t[e[0]])}),window.removeEventListener("message",Q)}),ie=(...e)=>b()(...e);function ce(e,t){s.function.pipe(E(e,t),s.either.mapLeft(r=>{throw r}))}function E(e,t){m().log("Posting event:",t?{eventType:e,eventData:t}:{eventType:e});const r=window,n=JSON.stringify({eventType:e,eventData:t});return V()?(ie(n,$()),s.either.right(void 0)):M(r)?(r.VBotWebviewProxy.postEvent(e,JSON.stringify(t)),s.either.right(void 0)):c.is(c.looseObject({external:c.looseObject({notify:c.function()})}),r)?(r.external.notify(n),s.either.right(void 0)):s.either.left(new R)}function W(e,t,r={}){const{capture:n=()=>!0,postEvent:a=E}=r,o=y.signal(),[i,p]=l.createCbCollector();(Array.isArray(t)?t:[t]).forEach(u=>{i(F(u,f=>{const d=Array.isArray(t);n(d?{event:u,payload:f}:f)&&o.set([d?{event:u,payload:f}:f])}))});const _=u=>(p(),u);return s.function.pipe(async()=>a(e,r.params),s.taskEither.chainW(()=>l.BetterTaskEither((u,f,d)=>{const w=o();if(w)return u(w[0]);const P=k=>{k&&u(k[0])},L=()=>{o.unsub(P)};o.sub(P),d.on("finalized",L)},r)),s.taskEither.mapBoth(_,_))}function Se(e,t,r){const{postEvent:n}=r||{};return l.throwifyAnyEither(W(e,t,{...r,postEvent:n?(...a)=>{try{return n(...a),s.either.right(void 0)}catch(o){return s.either.left(o)}}:E}))}function xe(e,t){const r=pe(e,t);return typeof r=="function"?S.BetterPromise.fn(()=>l.throwifyAnyEither(r)):r}function pe(e,t){const r=M(window);if(!e)return r||s.function.pipe(x(),s.either.match(()=>!1,()=>!0));if(r)return s.taskEither.right(!0);const{timeout:n=100}=t||{};return s.function.pipe(W("web_app_request_theme","theme_changed",{...t,timeout:n}),s.taskEither.match(a=>S.TimeoutError.is(a)||R.is(a)?s.either.right(!1):s.either.left(a),()=>s.either.right(!0)))}function Ce({launchParams:e,onEvent:t,resetPostMessage:r}={}){if(e){const o=typeof e=="string"||e instanceof URLSearchParams?e.toString():h.serializeLaunchParamsQuery({...e,vbWebAppData:void 0})+(e.vbWebAppData?`&vbWebAppData=${encodeURIComponent(e.vbWebAppData.toString())}`:"");try{h.parseLaunchParamsQuery(o)}catch(i){throw new j(o,i)}l.setStorageValue("launchParams",o)}if(V()){if(!t)return;r&&b.reset();const o=b();b.set((...i)=>{const[p]=i,_=()=>{o(...i)};try{const u=c.parse(h.pipeJsonToSchema(h.miniAppsMessage()),p);t({name:u.eventType,params:u.eventData},_)}catch{_()}});return}const n=window.VBotWebviewProxy||{},a=n.postEvent||(()=>{});window.VBotWebviewProxy={...n,postEvent(o,i){const p=()=>{a(o,i)};t?t({name:o,params:i?JSON.parse(i):void 0},p):p()}},m().log("Environment was mocked by the mockVBotEnv function")}function Ve({launchParams:e,onEvent:t,resetPostMessage:r}={}){if(e){const o=typeof e=="string"||e instanceof URLSearchParams?e.toString():h.serializeLaunchParamsQuery({...e,vbWebAppData:void 0})+(e.vbWebAppData?`&vbWebAppData=${encodeURIComponent(e.vbWebAppData.toString())}`:"");try{h.parseLaunchParamsQuery(o)}catch(i){throw new j(o,i)}l.setStorageValue("launchParams",o)}if(V()){if(!t)return;r&&b.reset();const o=b();b.set((...i)=>{const[p]=i,_=()=>{o(...i)};try{const u=c.parse(h.pipeJsonToSchema(h.miniAppsMessage()),p);t({name:u.eventType,params:u.eventData},_)}catch{_()}});return}const n=window.VBotWebviewProxy||{},a=n.postEvent||(()=>{});window.VBotWebviewProxy={...n,postEvent(o,i){const p=()=>{a(o,i)};t?t({name:o,params:i?JSON.parse(i):void 0},p):p()}},m().log("Launch params are injected by the setLaunchParams function")}function Fe(e,t="*"){const r=o=>{if(o.source===e.contentWindow)try{const i=JSON.parse(o.data),{eventType:p,eventData:_}=i;n.emit(p,_)}catch{}},n=U(()=>{window.addEventListener("message",r)},()=>{window.removeEventListener("message",r)}),a={...n,send:(o,i)=>{if(e.contentWindow){const p=JSON.stringify({eventType:o,eventData:i});e.contentWindow.postMessage(p,t)}},clear:()=>{n.clear(),g===a&&(g=void 0)}};return g=a,a}function We(){const e=U(()=>{},()=>{}),t={...e,send:(r,n)=>{B(r,n)},clear:()=>{var r;e.clear(),g===t&&(g=void 0),(r=window.VBotWebviewProxy)!=null&&r.__isWebComponentProxy&&delete window.VBotWebviewProxy}};return window.VBotWebviewProxy={__isWebComponentProxy:!0,postEvent(r,n){let a;try{a=n?JSON.parse(n):void 0}catch{a=n}e.emit(r,a)}},g=t,t}let g;function Le(){if(!g)throw new Error("HostBridge not initialized. Call defineHostBridge() or defineWebComponentBridge() first.");return g}function ue(e){return({req_id:t})=>t===e}const K={"6.0":["iframe_ready","iframe_will_reload","web_app_close","web_app_data_send","web_app_expand","web_app_open_link","web_app_ready","web_app_request_theme","web_app_request_viewport","web_app_setup_main_button","web_app_setup_closing_behavior"],6.1:["web_app_open_tg_link","web_app_open_invoice","web_app_setup_back_button","web_app_set_background_color","web_app_set_header_color","web_app_trigger_haptic_feedback"],6.2:["web_app_open_popup"],6.4:["web_app_close_scan_qr_popup","web_app_open_scan_qr_popup","web_app_read_text_from_clipboard",{method:"web_app_open_link",param:"try_instant_view"}],6.7:["web_app_switch_inline_query"],6.9:["web_app_invoke_custom_method","web_app_request_write_access","web_app_request_phone",{method:"web_app_set_header_color",param:"color"}],"6.10":["web_app_setup_settings_button"],7.2:["web_app_biometry_get_info","web_app_biometry_open_settings","web_app_biometry_request_access","web_app_biometry_request_auth","web_app_biometry_update_token"],7.6:[{method:"web_app_open_link",param:"try_browser"},{method:"web_app_close",param:"return_back"}],7.7:["web_app_setup_swipe_behavior"],7.8:["web_app_share_to_story"],"7.10":["web_app_setup_secondary_button","web_app_set_bottom_bar_color",{method:"web_app_setup_main_button",param:"has_shine_effect"}],"8.0":["web_app_request_safe_area","web_app_request_content_safe_area","web_app_request_fullscreen","web_app_exit_fullscreen","web_app_set_emoji_status","web_app_add_to_home_screen","web_app_check_home_screen","web_app_request_emoji_status_access","web_app_check_location","web_app_open_location_settings","web_app_request_file_download","web_app_request_location","web_app_send_prepared_message","web_app_start_accelerometer","web_app_start_device_orientation","web_app_start_gyroscope","web_app_stop_accelerometer","web_app_stop_device_orientation","web_app_stop_gyroscope","web_app_toggle_orientation_lock"],"9.0":["web_app_device_storage_clear","web_app_device_storage_get_key","web_app_device_storage_save_key","web_app_secure_storage_clear","web_app_secure_storage_get_key","web_app_secure_storage_restore_key","web_app_secure_storage_save_key"],9.1:["web_app_hide_keyboard"],9.2:["web_app_send_notification","web_app_finish_refresh"]};function O(e,t){return Object.keys(K).find(n=>K[n].some(a=>t?typeof a=="object"&&a.method===e&&a.param===t:a===e))||null}function Y(e){return e.split(".").map(Number)}function _e(e,t){const r=Y(e),n=Y(t),a=Math.max(r.length,n.length);for(let o=0;o<a;o+=1){const i=r[o]||0,p=n[o]||0;if(i!==p)return i>p?1:-1}return 0}function q(e,t,r){const n=r?O(e,t):O(e);return n?_e(n,r||t)<=0:!1}function Ae(e,t="strict"){const r=typeof t=="function"?t:n=>{const{method:a,version:o}=n,i="param"in n?new Z(a,n.param,o):new X(a,o);if(t==="strict")throw i;return m().forceWarn(i.message)};return((n,a)=>q(n,e)?n==="web_app_set_header_color"&&c.is(c.looseObject({color:c.any()}),a)&&!q(n,"color",e)?r({version:e,method:n,param:"color"}):ce(n,a):r({version:e,method:n}))}function le(e,t,r,n){return s.function.pipe(W("web_app_invoke_custom_method","custom_method_invoked",{...n||{},params:{method:e,params:t,req_id:r},capture:ue(r)}),s.taskEither.chain(({result:a,error:o})=>o?s.taskEither.left(new te(o)):s.taskEither.right(a)))}function Oe(e,t,r,n){return S.BetterPromise.fn(()=>s.function.pipe(le(e,t,r,n),s.taskEither.match(a=>{throw a},a=>a))())}function fe(e,t,r={}){const{capture:n=()=>!0,postEvent:a=E}=r,o=y.signal(),[i,p]=l.createCbCollector();(Array.isArray(t)?t:[t]).forEach(u=>{i(F(u,f=>{(Array.isArray(t)?n({event:u,payload:f}):n(f))&&o.set([f])}))});const _=u=>(p(),u);return s.function.pipe(async()=>a(e,r.params),s.taskEither.chainW(()=>l.BetterTaskEither((u,f,d)=>{const w=o();if(w)return u(w[0]);const P=k=>{k&&u(k[0])},L=()=>{o.unsub(P)};o.sub(P),d.on("finalized",L)},r)),s.taskEither.mapBoth(_,_))}function qe(e,t,r){const{postEvent:n}=r||{};return l.throwifyAnyEither(fe(e,t,{...r,postEvent:n?(...a)=>{try{return n(...a),s.either.right(void 0)}catch(o){return s.either.left(o)}}:E}))}function Me(){Object.hasOwn||(Object.hasOwn=function(e,t){return Object.prototype.hasOwnProperty.call(e,t)})}function z(e){return s.either.tryCatch(()=>decodeURIComponent(atob(e.replace(/-/g,"+").replace(/_/g,"/")).split("").map(t=>"%"+("00"+t.charCodeAt(0).toString(16)).slice(-2)).join("")),t=>t)}const je=l.throwifyFpFn(z);function D(e){return btoa(encodeURIComponent(e).replace(/%([0-9A-F]{2})/g,(t,r)=>String.fromCharCode(parseInt(`0x${r}`)))).replace(/\+/g,"-").replace(/\//g,"_")}function de(e){const t=D(typeof e=="string"?e:JSON.stringify(e));return t.length>512?s.either.left(new Error("Value is too long for start parameter")):s.either.right(t)}const Re=l.throwifyFpFn(de);function Ue(e,t){return l.throwifyAnyEither(he(e,typeof t=="function"?r=>s.either.tryCatch(()=>t(r),n=>n):t))}function he(e,t){return s.function.pipe(z(e),s.either.chain(r=>t?typeof t=="function"?t(r):s.json.parse(r):s.either.right(r)))}function Ie(e){return D(e).length<=512}Object.defineProperty(exports,"createLogger",{enumerable:!0,get:()=>l.createLogger});Object.defineProperty(exports,"deepSnakeToCamelObjKeys",{enumerable:!0,get:()=>l.deepSnakeToCamelObjKeys});Object.defineProperty(exports,"CancelledError",{enumerable:!0,get:()=>S.CancelledError});Object.defineProperty(exports,"TimeoutError",{enumerable:!0,get:()=>S.TimeoutError});exports.InvalidLaunchParamsError=j;exports.InvokeCustomMethodFailedError=te;exports.LaunchParamsRetrieveError=ee;exports.MethodParameterUnsupportedError=Z;exports.MethodUnsupportedError=X;exports.UnknownEnvError=R;exports.applyPolyfills=Me;exports.captureSameReq=ue;exports.compareVersions=_e;exports.createPostEvent=Ae;exports.createStartParam=Re;exports.createStartParamFp=de;exports.debug=T;exports.decodeBase64Url=je;exports.decodeBase64UrlFp=z;exports.decodeStartParam=Ue;exports.decodeStartParamFp=he;exports.defineHostBridge=Fe;exports.defineWebComponentBridge=We;exports.emitEvent=B;exports.encodeBase64Url=D;exports.getHostBridge=Le;exports.getReleaseVersion=O;exports.hasWebviewProxy=M;exports.invokeCustomMethod=Oe;exports.invokeCustomMethodFp=le;exports.isIframe=V;exports.isSafeToCreateStartParam=Ie;exports.isVBma=xe;exports.isVBmaFp=pe;exports.logger=m;exports.mockVBotEnv=Ce;exports.off=ae;exports.offAll=se;exports.on=F;exports.postEvent=ce;exports.postEventFp=E;exports.postMessage=ie;exports.postMessageImpl=b;exports.request=qe;exports.request2=Se;exports.request2Fp=W;exports.requestFp=fe;exports.resetGlobals=Pe;exports.retrieveLaunchParams=be;exports.retrieveLaunchParamsFp=re;exports.retrieveRawInitData=me;exports.retrieveRawInitDataFp=ne;exports.retrieveRawLaunchParams=ge;exports.retrieveRawLaunchParamsFp=x;exports.setDebug=ve;exports.setLaunchParams=Ve;exports.setTargetOrigin=Ee;exports.supports=q;exports.targetOrigin=$;
1
+ "use strict";Object.defineProperty(exports,Symbol.toStringTag,{value:"Module"});const c=require("valibot"),l=require("@vbotma/toolkit"),B=require("better-promises"),s=require("fp-ts"),v=require("error-kid"),h=require("@vbotma/transformers"),y=require("@vbotma/signals"),we=require("mitt");function j(e){return c.is(c.looseObject({VBotWebviewProxy:c.looseObject({postEvent:c.function()})}),e)}function V(){try{return window.self!==window.top}catch{return!0}}class X extends v.errorClass("MethodUnsupportedError",(t,r)=>[`Method "${t}" is unsupported in Mini Apps version ${r}`]){}class Z extends v.errorClass("MethodParameterUnsupportedError",(t,r,n)=>[`Parameter "${r}" of "${t}" method is unsupported in Mini Apps version ${n}`]){}class ee extends v.errorClassWithData("LaunchParamsRetrieveError",t=>({errors:t}),t=>[["Unable to retrieve launch parameters from any known source. You should pass correct parameters to Mini App","","Collected errors:",...t.map(({source:r,error:n})=>`Source: ${r} / ${n instanceof Error?n.message:String(n)}`)].join(`
2
+ `)]){}class R extends v.errorClass("InvalidLaunchParamsError",(t,r)=>[`Invalid value for launch params: ${t}`,{cause:r}]){}class I extends v.errorClass("UnknownEnvError"){}class te extends v.errorClass("InvokeCustomMethodError",t=>[`Server returned error: ${t}`]){}const G="launchParams";function H(e){return e.replace(/^[^?#]*[?#]/,"").replace(/[?#]/g,"&")}function re(){return s.function.pipe(x(),s.either.chainW(h.parseLaunchParamsQueryFp))}const be=l.throwifyFpFn(re);function ne(){return s.function.pipe(x(),s.either.map(e=>{const t=new URLSearchParams(e).get("vbWebAppData");return t?s.option.some(t):s.option.none}))}function me(){return s.function.pipe(ne(),s.either.fold(e=>{throw e},e=>e),s.option.match(()=>{},e=>e))}function x(){const e=[];for(const[t,r]of[[()=>H(window.location.href),"window.location.href"],[()=>{const n=performance.getEntriesByType("navigation")[0];return n&&H(n.name)},"performance navigation entries"],[()=>l.getStorageValue(G),"local storage"]]){const n=t();if(!n){e.push({source:r,error:new Error("Source is empty")});continue}const a=s.function.pipe(h.parseLaunchParamsQueryFp(n),s.either.foldW(o=>o,()=>!0));if(typeof a!="boolean"){e.push({source:r,error:a});continue}return l.setStorageValue(G,n),s.either.right(n)}return s.either.left(new ee(e))}const ge=l.throwifyFpFn(x);function U(e,t){const r=new Map,n=we(),a=(o,i,p=!1)=>{const _=r.get(o)||new Map;r.set(o,_);const u=_.get(i)||[];_.set(i,u);const f=u.findIndex(d=>d[1]===p);if(f>=0&&(n.off(o,u[f][0]),u.splice(f,1),!u.length&&(_.delete(i),!_.size))){const d=r.size;r.delete(o),d&&!r.size&&t()}};return{on(o,i,p){!r.size&&e();const _=()=>{a(o,i,p)},u=(...w)=>{p&&_(),o==="*"?i({name:w[0],payload:w[1]}):i(...w)};n.on(o,u);const f=r.get(o)||new Map;r.set(o,f);const d=f.get(i)||[];return f.set(i,d),d.push([u,p||!1]),_},off:a,emit:n.emit,clear(){const o=r.size;n.all.clear(),r.clear(),o&&t()}}}function k(e,t){window.dispatchEvent(new MessageEvent("message",{data:JSON.stringify({eventType:e,eventData:t}),source:window.parent}))}const C=y.signal(!1),T=y.signal("https://web.vbot.org"),ye=e=>{m().log("Event received:",e)},$=y.computed(C);function ve(e){e!==C()&&(C.set(e),(e?F:ae)("*",ye))}const z=y.computed(T);function Ee(e){T.set(e),m().log("New target origin set",e)}const b=y.signal((...e)=>{window.parent.postMessage(...e)}),m=y.signal(l.createLogger("Bridge",{bgColor:"#9147ff",textColor:"white",shouldLog:$}));function Pe(){se(),[b,T,z,C,$,m].forEach(e=>{e.unsubAll(),"reset"in e&&e.reset()})}function W(e,t,r){const n=[r],a=e[t];typeof a=="function"&&n.push(a);const o=(...p)=>{n.forEach(_=>_(...p))},i=Object.assign((...p)=>{o(...p)},{unwrap(){const{length:p}=n;if(p===1){delete e[t];return}if(p===2){Q(e,t,n[1]);return}n.unshift(1),Q(e,t,o)}});oe(e,t,()=>i,p=>n.push(p))}function N(e,t){const r=e[t];oe(e,t,()=>r,n=>{Object.entries(n).forEach(([a,o])=>{r[a]=o})})}function oe(e,t,r,n){Object.defineProperty(e,t,{enumerable:!0,configurable:!0,get:r,set:n})}function Q(e,t,r){Object.defineProperty(e,t,{enumerable:!0,configurable:!0,writable:!0,value:r})}const Se={clipboard_text_received:c.looseObject({req_id:c.string(),data:c.nullish(c.string())}),custom_method_invoked:c.looseObject({req_id:c.string(),result:c.optional(c.unknown()),error:c.optional(c.string())}),popup_closed:c.nullish(c.looseObject({button_id:c.nullish(c.string(),()=>{})}),{}),viewport_changed:c.nullish(c.looseObject({height:c.number(),width:c.nullish(c.number(),()=>window.innerWidth),is_state_stable:c.boolean(),is_expanded:c.boolean()}),()=>({height:window.innerHeight,is_state_stable:!0,is_expanded:!0})),theme_changed:c.looseObject({theme_params:h.themeParams()})};function K(e){if(e.source!==window.parent)return;let t;try{t=c.parse(h.pipeJsonToSchema(h.miniAppsMessage()),e.data)}catch{return}const{eventType:r,eventData:n}=t,a=Se[r];let o;try{o=a?c.parse(a,n):n}catch(i){return m().forceError([`An error occurred processing the "${r}" event from the VBot application.`,"Please, file an issue here:"].join(`
3
+ `),t,i)}ke(r,o)}const{on:F,off:ae,emit:ke,clear:se}=U(()=>{const e=window;!e.VBotGameProxy&&(e.VBotGameProxy={}),W(e.VBotGameProxy,"receiveEvent",k),N(e,"VBotGameProxy"),!e.VBot&&(e.VBot={}),!e.VBot.WebView&&(e.VBot.WebView={}),W(e.VBot.WebView,"receiveEvent",k),N(e.VBot,"WebView"),W(e,"VBotGameProxy_receiveEvent",k),window.addEventListener("message",K)},()=>{[["VBotGameProxy_receiveEvent"],["VBotGameProxy","receiveEvent"],["VBot","WebView","receiveEvent"]].forEach(e=>{const t=window;let r=[void 0,t];for(const o of e)if(r=[r[1],r[1][o]],!r[1])return;const[n,a]=r;"unwrap"in a&&(a.unwrap(),n&&n!==t&&!Object.keys(n).length&&delete t[e[0]])}),window.removeEventListener("message",K)}),ie=(...e)=>b()(...e);function ce(e,t){s.function.pipe(E(e,t),s.either.mapLeft(r=>{throw r}))}function E(e,t){m().log("Posting event:",t?{eventType:e,eventData:t}:{eventType:e});const r=window,n=JSON.stringify({eventType:e,eventData:t});return V()?(ie(n,z()),s.either.right(void 0)):j(r)?(r.VBotWebviewProxy.postEvent(e,JSON.stringify(t)),s.either.right(void 0)):c.is(c.looseObject({external:c.looseObject({notify:c.function()})}),r)?(r.external.notify(n),s.either.right(void 0)):s.either.left(new I)}function L(e,t,r={}){const{capture:n=()=>!0,postEvent:a=E}=r,o=y.signal(),[i,p]=l.createCbCollector();(Array.isArray(t)?t:[t]).forEach(u=>{i(F(u,f=>{const d=Array.isArray(t);n(d?{event:u,payload:f}:f)&&o.set([d?{event:u,payload:f}:f])}))});const _=u=>(p(),u);return s.function.pipe(async()=>a(e,r.params),s.taskEither.chainW(()=>l.BetterTaskEither((u,f,d)=>{const w=o();if(w)return u(w[0]);const P=S=>{S&&u(S[0])},O=()=>{o.unsub(P)};o.sub(P),d.on("finalized",O)},r)),s.taskEither.mapBoth(_,_))}function Be(e,t,r){const{postEvent:n}=r||{};return l.throwifyAnyEither(L(e,t,{...r,postEvent:n?(...a)=>{try{return n(...a),s.either.right(void 0)}catch(o){return s.either.left(o)}}:E}))}function xe(e,t){const r=pe(e,t);return typeof r=="function"?B.BetterPromise.fn(()=>l.throwifyAnyEither(r)):r}function pe(e,t){const r=j(window);if(!e)return r||s.function.pipe(x(),s.either.match(()=>!1,()=>!0));if(r)return s.taskEither.right(!0);const{timeout:n=100}=t||{};return s.function.pipe(L("web_app_request_theme","theme_changed",{...t,timeout:n}),s.taskEither.match(a=>B.TimeoutError.is(a)||I.is(a)?s.either.right(!1):s.either.left(a),()=>s.either.right(!0)))}function Ce({launchParams:e,onEvent:t,resetPostMessage:r}={}){if(e){const o=typeof e=="string"||e instanceof URLSearchParams?e.toString():h.serializeLaunchParamsQuery({...e,vbWebAppData:void 0})+(e.vbWebAppData?`&vbWebAppData=${encodeURIComponent(e.vbWebAppData.toString())}`:"");try{h.parseLaunchParamsQuery(o)}catch(i){throw new R(o,i)}l.setStorageValue("launchParams",o)}if(V()){if(!t)return;r&&b.reset();const o=b();b.set((...i)=>{const[p]=i,_=()=>{o(...i)};try{const u=c.parse(h.pipeJsonToSchema(h.miniAppsMessage()),p);t({name:u.eventType,params:u.eventData},_)}catch{_()}});return}const n=window.VBotWebviewProxy||{},a=n.postEvent||(()=>{});window.VBotWebviewProxy={...n,postEvent(o,i){const p=()=>{a(o,i)};t?t({name:o,params:i?JSON.parse(i):void 0},p):p()}},m().log("Environment was mocked by the mockVBotEnv function")}function Ve({launchParams:e,onEvent:t,resetPostMessage:r}={}){if(e){const o=typeof e=="string"||e instanceof URLSearchParams?e.toString():h.serializeLaunchParamsQuery({...e,vbWebAppData:void 0})+(e.vbWebAppData?`&vbWebAppData=${encodeURIComponent(e.vbWebAppData.toString())}`:"");try{h.parseLaunchParamsQuery(o)}catch(i){throw new R(o,i)}l.setStorageValue("launchParams",o)}if(V()){if(!t)return;r&&b.reset();const o=b();b.set((...i)=>{const[p]=i,_=()=>{o(...i)};try{const u=c.parse(h.pipeJsonToSchema(h.miniAppsMessage()),p);t({name:u.eventType,params:u.eventData},_)}catch{_()}});return}const n=window.VBotWebviewProxy||{},a=n.postEvent||(()=>{});window.VBotWebviewProxy={...n,postEvent(o,i){const p=()=>{a(o,i)};t?t({name:o,params:i?JSON.parse(i):void 0},p):p()}},m().log("Launch params are injected by the setLaunchParams function")}function Fe(e,t="*"){const r=o=>{if(o.source===e.contentWindow)try{const i=JSON.parse(o.data),{eventType:p,eventData:_}=i;n.emit(p,_)}catch{}},n=U(()=>{window.addEventListener("message",r)},()=>{window.removeEventListener("message",r)}),a={...n,send:(o,i)=>{if(e.contentWindow){const p=JSON.stringify({eventType:o,eventData:i});e.contentWindow.postMessage(p,t)}},clear:()=>{n.clear(),g===a&&(g=void 0)}};return g=a,a}function Le(){const e=U(()=>{},()=>{}),t={...e,send:(r,n)=>{k(r,n)},clear:()=>{var r;e.clear(),g===t&&(g=void 0),(r=window.VBotWebviewProxy)!=null&&r.__isWebComponentProxy&&delete window.VBotWebviewProxy}};return window.VBotWebviewProxy={__isWebComponentProxy:!0,postEvent(r,n){let a;try{a=n?JSON.parse(n):void 0}catch{a=n}e.emit(r,a)}},g=t,t}let g;function Oe(){if(!g)throw new Error("HostBridge not initialized. Call defineHostBridge() or defineWebComponentBridge() first.");return g}function ue(e){return({req_id:t})=>t===e}const A={"3.0":["iframe_ready","iframe_will_reload","web_app_close","web_app_data_send","web_app_expand","web_app_open_link","web_app_ready","web_app_request_theme","web_app_request_viewport","web_app_setup_main_button","web_app_setup_closing_behavior","web_app_open_vb_link","web_app_open_invoice","web_app_setup_back_button","web_app_set_background_color","web_app_set_header_color","web_app_trigger_haptic_feedback","web_app_open_popup","web_app_close_scan_qr_popup","web_app_open_scan_qr_popup","web_app_read_text_from_clipboard",{method:"web_app_open_link",param:"try_instant_view"},"web_app_switch_inline_query","web_app_invoke_custom_method","web_app_request_write_access","web_app_request_phone",{method:"web_app_set_header_color",param:"color"},"web_app_setup_settings_button","web_app_biometry_get_info","web_app_biometry_open_settings","web_app_biometry_request_access","web_app_biometry_request_auth","web_app_biometry_update_token",{method:"web_app_open_link",param:"try_browser"},{method:"web_app_close",param:"return_back"},"web_app_setup_swipe_behavior","web_app_share_to_story","web_app_setup_secondary_button","web_app_set_bottom_bar_color",{method:"web_app_setup_main_button",param:"has_shine_effect"},"web_app_request_safe_area","web_app_request_content_safe_area","web_app_request_fullscreen","web_app_exit_fullscreen","web_app_set_emoji_status","web_app_add_to_home_screen","web_app_check_home_screen","web_app_request_emoji_status_access","web_app_check_location","web_app_open_location_settings","web_app_request_file_download","web_app_request_location","web_app_send_prepared_message","web_app_start_accelerometer","web_app_start_device_orientation","web_app_start_gyroscope","web_app_stop_accelerometer","web_app_stop_device_orientation","web_app_stop_gyroscope","web_app_toggle_orientation_lock","web_app_device_storage_clear","web_app_device_storage_get_key","web_app_device_storage_save_key","web_app_secure_storage_clear","web_app_secure_storage_get_key","web_app_secure_storage_restore_key","web_app_secure_storage_save_key","web_app_hide_keyboard","web_app_send_notification","web_app_finish_refresh"]};function q(e,t){return Object.keys(A).find(n=>A[n].some(a=>t?typeof a=="object"&&a.method===e&&a.param===t:a===e))||null}const We=Object.keys(A).pop()||"3.0";function Y(e){return e.split(".").map(Number)}function _e(e,t){const r=Y(e),n=Y(t),a=Math.max(r.length,n.length);for(let o=0;o<a;o+=1){const i=r[o]||0,p=n[o]||0;if(i!==p)return i>p?1:-1}return 0}function M(e,t,r){const n=r?q(e,t):q(e);return n?_e(n,r||t)<=0:!1}function Ae(e,t="strict"){const r=typeof t=="function"?t:n=>{const{method:a,version:o}=n,i="param"in n?new Z(a,n.param,o):new X(a,o);if(t==="strict")throw i;return m().forceWarn(i.message)};return((n,a)=>M(n,e)?n==="web_app_set_header_color"&&c.is(c.looseObject({color:c.any()}),a)&&!M(n,"color",e)?r({version:e,method:n,param:"color"}):ce(n,a):r({version:e,method:n}))}function le(e,t,r,n){return s.function.pipe(L("web_app_invoke_custom_method","custom_method_invoked",{...n||{},params:{method:e,params:t,req_id:r},capture:ue(r)}),s.taskEither.chain(({result:a,error:o})=>o?s.taskEither.left(new te(o)):s.taskEither.right(a)))}function qe(e,t,r,n){return B.BetterPromise.fn(()=>s.function.pipe(le(e,t,r,n),s.taskEither.match(a=>{throw a},a=>a))())}function fe(e,t,r={}){const{capture:n=()=>!0,postEvent:a=E}=r,o=y.signal(),[i,p]=l.createCbCollector();(Array.isArray(t)?t:[t]).forEach(u=>{i(F(u,f=>{(Array.isArray(t)?n({event:u,payload:f}):n(f))&&o.set([f])}))});const _=u=>(p(),u);return s.function.pipe(async()=>a(e,r.params),s.taskEither.chainW(()=>l.BetterTaskEither((u,f,d)=>{const w=o();if(w)return u(w[0]);const P=S=>{S&&u(S[0])},O=()=>{o.unsub(P)};o.sub(P),d.on("finalized",O)},r)),s.taskEither.mapBoth(_,_))}function Me(e,t,r){const{postEvent:n}=r||{};return l.throwifyAnyEither(fe(e,t,{...r,postEvent:n?(...a)=>{try{return n(...a),s.either.right(void 0)}catch(o){return s.either.left(o)}}:E}))}function je(){Object.hasOwn||(Object.hasOwn=function(e,t){return Object.prototype.hasOwnProperty.call(e,t)})}function D(e){return s.either.tryCatch(()=>decodeURIComponent(atob(e.replace(/-/g,"+").replace(/_/g,"/")).split("").map(t=>"%"+("00"+t.charCodeAt(0).toString(16)).slice(-2)).join("")),t=>t)}const Re=l.throwifyFpFn(D);function J(e){return btoa(encodeURIComponent(e).replace(/%([0-9A-F]{2})/g,(t,r)=>String.fromCharCode(parseInt(`0x${r}`)))).replace(/\+/g,"-").replace(/\//g,"_")}function de(e){const t=J(typeof e=="string"?e:JSON.stringify(e));return t.length>512?s.either.left(new Error("Value is too long for start parameter")):s.either.right(t)}const Ie=l.throwifyFpFn(de);function Ue(e,t){return l.throwifyAnyEither(he(e,typeof t=="function"?r=>s.either.tryCatch(()=>t(r),n=>n):t))}function he(e,t){return s.function.pipe(D(e),s.either.chain(r=>t?typeof t=="function"?t(r):s.json.parse(r):s.either.right(r)))}function Te(e){return J(e).length<=512}Object.defineProperty(exports,"createLogger",{enumerable:!0,get:()=>l.createLogger});Object.defineProperty(exports,"deepSnakeToCamelObjKeys",{enumerable:!0,get:()=>l.deepSnakeToCamelObjKeys});Object.defineProperty(exports,"CancelledError",{enumerable:!0,get:()=>B.CancelledError});Object.defineProperty(exports,"TimeoutError",{enumerable:!0,get:()=>B.TimeoutError});exports.InvalidLaunchParamsError=R;exports.InvokeCustomMethodFailedError=te;exports.LATEST_VERSION=We;exports.LaunchParamsRetrieveError=ee;exports.MethodParameterUnsupportedError=Z;exports.MethodUnsupportedError=X;exports.UnknownEnvError=I;exports.applyPolyfills=je;exports.captureSameReq=ue;exports.compareVersions=_e;exports.createPostEvent=Ae;exports.createStartParam=Ie;exports.createStartParamFp=de;exports.debug=$;exports.decodeBase64Url=Re;exports.decodeBase64UrlFp=D;exports.decodeStartParam=Ue;exports.decodeStartParamFp=he;exports.defineHostBridge=Fe;exports.defineWebComponentBridge=Le;exports.emitEvent=k;exports.encodeBase64Url=J;exports.getHostBridge=Oe;exports.getReleaseVersion=q;exports.hasWebviewProxy=j;exports.invokeCustomMethod=qe;exports.invokeCustomMethodFp=le;exports.isIframe=V;exports.isSafeToCreateStartParam=Te;exports.isVBma=xe;exports.isVBmaFp=pe;exports.logger=m;exports.mockVBotEnv=Ce;exports.off=ae;exports.offAll=se;exports.on=F;exports.postEvent=ce;exports.postEventFp=E;exports.postMessage=ie;exports.postMessageImpl=b;exports.request=Me;exports.request2=Be;exports.request2Fp=L;exports.requestFp=fe;exports.resetGlobals=Pe;exports.retrieveLaunchParams=be;exports.retrieveLaunchParamsFp=re;exports.retrieveRawInitData=me;exports.retrieveRawInitDataFp=ne;exports.retrieveRawLaunchParams=ge;exports.retrieveRawLaunchParamsFp=x;exports.setDebug=ve;exports.setLaunchParams=Ve;exports.setTargetOrigin=Ee;exports.supports=M;exports.targetOrigin=z;
4
4
  //# sourceMappingURL=index.cjs.map