@vbotma/bridge 2.2.7 → 2.2.8

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.
@@ -1,15 +1,15 @@
1
1
  import { BetterPromise, BetterPromiseOptions, TimeoutError } from 'better-promises';
2
2
  import { taskEither as TE } from 'fp-ts';
3
3
  import { Request2Error } from '../utils/request2.js';
4
- export type isVBMAError = Exclude<Request2Error, TimeoutError>;
4
+ export type isVBmaError = Exclude<Request2Error, TimeoutError>;
5
5
  /**
6
- * @see isVBMAFp
6
+ * @see isVBmaFp
7
7
  */
8
- export declare function isVBMA(): boolean;
8
+ export declare function isVBma(): boolean;
9
9
  /**
10
- * @see isVBMAFp
10
+ * @see isVBmaFp
11
11
  */
12
- export declare function isVBMA(type: 'complete', options?: BetterPromiseOptions): BetterPromise<boolean>;
12
+ export declare function isVBma(type: 'complete', options?: BetterPromiseOptions): BetterPromise<boolean>;
13
13
  /**
14
14
  * Returns true if the current environment is VBot Mini Apps.
15
15
  *
@@ -18,7 +18,7 @@ export declare function isVBMA(type: 'complete', options?: BetterPromiseOptions)
18
18
  *
19
19
  * In case you need stricter checks, use async override of this function.
20
20
  */
21
- export declare function isVBMAFp(): boolean;
21
+ export declare function isVBmaFp(): boolean;
22
22
  /**
23
23
  * Returns promise with true if the current environment is VBot Mini Apps.
24
24
  *
@@ -28,4 +28,4 @@ export declare function isVBMAFp(): boolean;
28
28
  *
29
29
  * In case you need less strict checks, use sync override of this function.
30
30
  */
31
- export declare function isVBMAFp(type: 'complete', options?: BetterPromiseOptions): TE.TaskEither<isVBMAError, boolean>;
31
+ export declare function isVBmaFp(type: 'complete', options?: BetterPromiseOptions): TE.TaskEither<isVBmaError, boolean>;
@@ -1,6 +1,6 @@
1
1
  export { hasWebviewProxy } from './env/hasWebviewProxy.js';
2
2
  export { isIframe } from './env/isIframe.js';
3
- export { isVBMA, isVBMAFp, type isVBMAError } from './env/isVBMA.js';
3
+ export { isVBma, isVBmaFp, type isVBmaError } from './env/isVBma.js';
4
4
  export { mockVBotEnv } from './env/mockVBotEnv.js';
5
5
  export { defineHostBridge, getHostBridge, type HostBridge, type HostEventHandler, } from './env/host/bridge.js';
6
6
  export { off, offAll, on } from './events/emitter.js';
package/dist/index.cjs CHANGED
@@ -1,4 +1,4 @@
1
1
  "use strict";Object.defineProperty(exports,Symbol.toStringTag,{value:"Module"});const c=require("valibot"),f=require("@vbotma/toolkit"),S=require("better-promises"),s=require("fp-ts"),v=require("error-kid"),m=require("@vbotma/transformers"),w=require("@vbotma/signals"),me=require("mitt");function L(e){return c.is(c.looseObject({VBotWebviewProxy:c.looseObject({postEvent:c.function()})}),e)}function j(){try{return window.self!==window.top}catch{return!0}}class K extends v.errorClass("MethodUnsupportedError",(t,r)=>[`Method "${t}" is unsupported in Mini Apps version ${r}`]){}class Y extends v.errorClass("MethodParameterUnsupportedError",(t,r,n)=>[`Parameter "${r}" of "${t}" method is unsupported in Mini Apps version ${n}`]){}class X extends v.errorClassWithData("LaunchParamsRetrieveError",t=>({errors:t}),t=>[["Unable to retrieve launch parameters from any known source. Perhaps, you have opened your app outside Telegram?","📖 Refer to docs for more information:","https://docs.vbot-mini-apps.com/packages/tma-js-bridge/environment","","Collected errors:",...t.map(({source:r,error:n})=>`Source: ${r} / ${n instanceof Error?n.message:String(n)}`)].join(`
2
- `)]){}class Z extends v.errorClass("InvalidLaunchParamsError",(t,r)=>[`Invalid value for launch params: ${t}`,{cause:r}]){}class T extends v.errorClass("UnknownEnvError"){}class ee extends v.errorClass("InvokeCustomMethodError",t=>[`Server returned error: ${t}`]){}const z="launchParams";function D(e){return e.replace(/^[^?#]*[?#]/,"").replace(/[?#]/g,"&")}function te(){return s.function.pipe(C(),s.either.chainW(m.parseLaunchParamsQueryFp))}const we=f.throwifyFpFn(te);function re(){return s.function.pipe(C(),s.either.map(e=>{const t=new URLSearchParams(e).get("vbWebAppData");return t?s.option.some(t):s.option.none}))}function be(){return s.function.pipe(re(),s.either.fold(e=>{throw e},e=>e),s.option.match(()=>{},e=>e))}function C(){const e=[];for(const[t,r]of[[()=>D(window.location.href),"window.location.href"],[()=>{const n=performance.getEntriesByType("navigation")[0];return n&&D(n.name)},"performance navigation entries"],[()=>f.getStorageValue(z),"local storage"]]){const n=t();if(!n){e.push({source:r,error:new Error("Source is empty")});continue}const a=s.function.pipe(m.parseLaunchParamsQueryFp(n),s.either.foldW(o=>o,()=>!0));if(typeof a!="boolean"){e.push({source:r,error:a});continue}return f.setStorageValue(z,n),s.either.right(n)}return s.either.left(new X(e))}const ge=f.throwifyFpFn(C);function ne(e,t){const r=new Map,n=me(),a=(o,i,p=!1)=>{const _=r.get(o)||new Map;r.set(o,_);const u=_.get(i)||[];_.set(i,u);const l=u.findIndex(d=>d[1]===p);if(l>=0&&(n.off(o,u[l][0]),u.splice(l,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=(...h)=>{p&&_(),o==="*"?i({name:h[0],payload:h[1]}):i(...h)};n.on(o,u);const l=r.get(o)||new Map;r.set(o,l);const d=l.get(i)||[];return l.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 F=w.signal(!1),W=w.signal("https://web.telegram.org"),ve=e=>{b().log("Event received:",e)},R=w.computed(F);function ye(e){e!==F()&&(F.set(e),(e?M:ae)("*",ve))}const U=w.computed(W);function Ee(e){W.set(e),b().log("New target origin set",e)}const g=w.signal((...e)=>{window.parent.postMessage(...e)}),b=w.signal(f.createLogger("Bridge",{bgColor:"#9147ff",textColor:"white",shouldLog:R}));function Pe(){se(),[g,W,U,F,R,b].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){H(e,t,n[1]);return}n.unshift(1),H(e,t,o)}});oe(e,t,()=>i,p=>n.push(p))}function G(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 H(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:m.themeParams()})};function J(e){if(e.source!==window.parent)return;let t;try{t=c.parse(m.pipeJsonToSchema(m.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 b().forceError([`An error occurred processing the "${r}" event from the VBot application.`,"Please, file an issue here:","https://github.com/Telegram-Mini-Apps/tma.js/issues/new/choose"].join(`
3
- `),t,i)}Se(r,o)}const{on:M,off:ae,emit:Se,clear:se}=ne(()=>{const e=window;!e.TelegramGameProxy&&(e.TelegramGameProxy={}),A(e.TelegramGameProxy,"receiveEvent",B),G(e,"TelegramGameProxy"),!e.VBot&&(e.VBot={}),!e.VBot.WebView&&(e.VBot.WebView={}),A(e.VBot.WebView,"receiveEvent",B),G(e.VBot,"WebView"),A(e,"TelegramGameProxy_receiveEvent",B),window.addEventListener("message",J)},()=>{[["TelegramGameProxy_receiveEvent"],["TelegramGameProxy","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",J)}),ie=(...e)=>g()(...e);function ce(e,t){s.function.pipe(y(e,t),s.either.mapLeft(r=>{throw r}))}function y(e,t){b().log("Posting event:",t?{eventType:e,eventData:t}:{eventType:e});const r=window,n=JSON.stringify({eventType:e,eventData:t});return j()?(ie(n,U()),s.either.right(void 0)):L(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 T)}function x(e,t,r={}){const{capture:n=()=>!0,postEvent:a=y}=r,o=w.signal(),[i,p]=f.createCbCollector();(Array.isArray(t)?t:[t]).forEach(u=>{i(M(u,l=>{const d=Array.isArray(t);n(d?{event:u,payload:l}:l)&&o.set([d?{event:u,payload:l}:l])}))});const _=u=>(p(),u);return s.function.pipe(async()=>a(e,r.params),s.taskEither.chainW(()=>f.BetterTaskEither((u,l,d)=>{const h=o();if(h)return u(h[0]);const E=P=>{P&&u(P[0])},q=()=>{o.unsub(E)};o.sub(E),d.on("finalized",q)},r)),s.taskEither.mapBoth(_,_))}function Ce(e,t,r){const{postEvent:n}=r||{};return f.throwifyAnyEither(x(e,t,{...r,postEvent:n?(...a)=>{try{return n(...a),s.either.right(void 0)}catch(o){return s.either.left(o)}}:y}))}function Be(e,t){const r=pe(e,t);return typeof r=="function"?S.BetterPromise.fn(()=>f.throwifyAnyEither(r)):r}function pe(e,t){const r=L(window);if(!e)return r||s.function.pipe(C(),s.either.match(()=>!1,()=>!0));if(r)return s.taskEither.right(!0);const{timeout:n=100}=t||{};return s.function.pipe(x("web_app_request_theme","theme_changed",{...t,timeout:n}),s.taskEither.match(a=>S.TimeoutError.is(a)||T.is(a)?s.either.right(!1):s.either.left(a),()=>s.either.right(!0)))}function Fe({launchParams:e,onEvent:t,resetPostMessage:r}={}){if(e){const o=typeof e=="string"||e instanceof URLSearchParams?e.toString():m.serializeLaunchParamsQuery({...e,vbWebAppData:void 0})+(e.vbWebAppData?`&vbWebAppData=${encodeURIComponent(e.vbWebAppData.toString())}`:"");try{m.parseLaunchParamsQuery(o)}catch(i){throw new Z(o,i)}f.setStorageValue("launchParams",o)}if(j()){if(!t)return;r&&g.reset();const o=g();g.set((...i)=>{const[p]=i,_=()=>{o(...i)};try{const u=c.parse(m.pipeJsonToSchema(m.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()}},b().log("Environment was mocked by the mockVBotEnv function")}function Me(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=ne(()=>{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(),k===a&&(k=void 0)}};return k=a,a}let k;function xe(){if(!k)throw new Error("HostBridge not initialized. Call defineHostBridge() first.");return k}function ue(e){return({req_id:t})=>t===e}const N={"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(N).find(n=>N[n].some(a=>t?typeof a=="object"&&a.method===e&&a.param===t:a===e))||null}function Q(e){return e.split(".").map(Number)}function _e(e,t){const r=Q(e),n=Q(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 V(e,t,r){const n=r?O(e,t):O(e);return n?_e(n,r||t)<=0:!1}function qe(e,t="strict"){const r=typeof t=="function"?t:n=>{const{method:a,version:o}=n,i="param"in n?new Y(a,n.param,o):new K(a,o);if(t==="strict")throw i;return b().forceWarn(i.message)};return((n,a)=>V(n,e)?n==="web_app_set_header_color"&&c.is(c.looseObject({color:c.any()}),a)&&!V(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(x("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 ee(o)):s.taskEither.right(a)))}function Ae(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=y}=r,o=w.signal(),[i,p]=f.createCbCollector();(Array.isArray(t)?t:[t]).forEach(u=>{i(M(u,l=>{(Array.isArray(t)?n({event:u,payload:l}):n(l))&&o.set([l])}))});const _=u=>(p(),u);return s.function.pipe(async()=>a(e,r.params),s.taskEither.chainW(()=>f.BetterTaskEither((u,l,d)=>{const h=o();if(h)return u(h[0]);const E=P=>{P&&u(P[0])},q=()=>{o.unsub(E)};o.sub(E),d.on("finalized",q)},r)),s.taskEither.mapBoth(_,_))}function Oe(e,t,r){const{postEvent:n}=r||{};return f.throwifyAnyEither(fe(e,t,{...r,postEvent:n?(...a)=>{try{return n(...a),s.either.right(void 0)}catch(o){return s.either.left(o)}}:y}))}function Ve(){Object.hasOwn||(Object.hasOwn=function(e,t){return Object.prototype.hasOwnProperty.call(e,t)})}function I(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 Le=f.throwifyFpFn(I);function $(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=$(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 je=f.throwifyFpFn(de);function Te(e,t){return f.throwifyAnyEither(he(e,typeof t=="function"?r=>s.either.tryCatch(()=>t(r),n=>n):t))}function he(e,t){return s.function.pipe(I(e),s.either.chain(r=>t?typeof t=="function"?t(r):s.json.parse(r):s.either.right(r)))}function We(e){return $(e).length<=512}Object.defineProperty(exports,"createLogger",{enumerable:!0,get:()=>f.createLogger});Object.defineProperty(exports,"deepSnakeToCamelObjKeys",{enumerable:!0,get:()=>f.deepSnakeToCamelObjKeys});Object.defineProperty(exports,"CancelledError",{enumerable:!0,get:()=>S.CancelledError});Object.defineProperty(exports,"TimeoutError",{enumerable:!0,get:()=>S.TimeoutError});exports.InvalidLaunchParamsError=Z;exports.InvokeCustomMethodFailedError=ee;exports.LaunchParamsRetrieveError=X;exports.MethodParameterUnsupportedError=Y;exports.MethodUnsupportedError=K;exports.UnknownEnvError=T;exports.applyPolyfills=Ve;exports.captureSameReq=ue;exports.compareVersions=_e;exports.createPostEvent=qe;exports.createStartParam=je;exports.createStartParamFp=de;exports.debug=R;exports.decodeBase64Url=Le;exports.decodeBase64UrlFp=I;exports.decodeStartParam=Te;exports.decodeStartParamFp=he;exports.defineHostBridge=Me;exports.emitEvent=B;exports.encodeBase64Url=$;exports.getHostBridge=xe;exports.getReleaseVersion=O;exports.hasWebviewProxy=L;exports.invokeCustomMethod=Ae;exports.invokeCustomMethodFp=le;exports.isIframe=j;exports.isSafeToCreateStartParam=We;exports.isVBMA=Be;exports.isVBMAFp=pe;exports.logger=b;exports.mockVBotEnv=Fe;exports.off=ae;exports.offAll=se;exports.on=M;exports.postEvent=ce;exports.postEventFp=y;exports.postMessage=ie;exports.postMessageImpl=g;exports.request=Oe;exports.request2=Ce;exports.request2Fp=x;exports.requestFp=fe;exports.resetGlobals=Pe;exports.retrieveLaunchParams=we;exports.retrieveLaunchParamsFp=te;exports.retrieveRawInitData=be;exports.retrieveRawInitDataFp=re;exports.retrieveRawLaunchParams=ge;exports.retrieveRawLaunchParamsFp=C;exports.setDebug=ye;exports.setTargetOrigin=Ee;exports.supports=V;exports.targetOrigin=U;
2
+ `)]){}class Z extends v.errorClass("InvalidLaunchParamsError",(t,r)=>[`Invalid value for launch params: ${t}`,{cause:r}]){}class T extends v.errorClass("UnknownEnvError"){}class ee extends v.errorClass("InvokeCustomMethodError",t=>[`Server returned error: ${t}`]){}const z="launchParams";function D(e){return e.replace(/^[^?#]*[?#]/,"").replace(/[?#]/g,"&")}function te(){return s.function.pipe(C(),s.either.chainW(m.parseLaunchParamsQueryFp))}const we=f.throwifyFpFn(te);function re(){return s.function.pipe(C(),s.either.map(e=>{const t=new URLSearchParams(e).get("vbWebAppData");return t?s.option.some(t):s.option.none}))}function be(){return s.function.pipe(re(),s.either.fold(e=>{throw e},e=>e),s.option.match(()=>{},e=>e))}function C(){const e=[];for(const[t,r]of[[()=>D(window.location.href),"window.location.href"],[()=>{const n=performance.getEntriesByType("navigation")[0];return n&&D(n.name)},"performance navigation entries"],[()=>f.getStorageValue(z),"local storage"]]){const n=t();if(!n){e.push({source:r,error:new Error("Source is empty")});continue}const a=s.function.pipe(m.parseLaunchParamsQueryFp(n),s.either.foldW(o=>o,()=>!0));if(typeof a!="boolean"){e.push({source:r,error:a});continue}return f.setStorageValue(z,n),s.either.right(n)}return s.either.left(new X(e))}const ge=f.throwifyFpFn(C);function ne(e,t){const r=new Map,n=me(),a=(o,i,p=!1)=>{const _=r.get(o)||new Map;r.set(o,_);const u=_.get(i)||[];_.set(i,u);const l=u.findIndex(d=>d[1]===p);if(l>=0&&(n.off(o,u[l][0]),u.splice(l,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=(...h)=>{p&&_(),o==="*"?i({name:h[0],payload:h[1]}):i(...h)};n.on(o,u);const l=r.get(o)||new Map;r.set(o,l);const d=l.get(i)||[];return l.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 F=w.signal(!1),W=w.signal("https://web.telegram.org"),ve=e=>{b().log("Event received:",e)},R=w.computed(F);function ye(e){e!==F()&&(F.set(e),(e?x:ae)("*",ve))}const U=w.computed(W);function Ee(e){W.set(e),b().log("New target origin set",e)}const g=w.signal((...e)=>{window.parent.postMessage(...e)}),b=w.signal(f.createLogger("Bridge",{bgColor:"#9147ff",textColor:"white",shouldLog:R}));function Pe(){se(),[g,W,U,F,R,b].forEach(e=>{e.unsubAll(),"reset"in e&&e.reset()})}function M(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){H(e,t,n[1]);return}n.unshift(1),H(e,t,o)}});oe(e,t,()=>i,p=>n.push(p))}function G(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 H(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:m.themeParams()})};function J(e){if(e.source!==window.parent)return;let t;try{t=c.parse(m.pipeJsonToSchema(m.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 b().forceError([`An error occurred processing the "${r}" event from the VBot application.`,"Please, file an issue here:","https://github.com/Telegram-Mini-Apps/tma.js/issues/new/choose"].join(`
3
+ `),t,i)}Se(r,o)}const{on:x,off:ae,emit:Se,clear:se}=ne(()=>{const e=window;!e.TelegramGameProxy&&(e.TelegramGameProxy={}),M(e.TelegramGameProxy,"receiveEvent",B),G(e,"TelegramGameProxy"),!e.VBot&&(e.VBot={}),!e.VBot.WebView&&(e.VBot.WebView={}),M(e.VBot.WebView,"receiveEvent",B),G(e.VBot,"WebView"),M(e,"TelegramGameProxy_receiveEvent",B),window.addEventListener("message",J)},()=>{[["TelegramGameProxy_receiveEvent"],["TelegramGameProxy","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",J)}),ie=(...e)=>g()(...e);function ce(e,t){s.function.pipe(y(e,t),s.either.mapLeft(r=>{throw r}))}function y(e,t){b().log("Posting event:",t?{eventType:e,eventData:t}:{eventType:e});const r=window,n=JSON.stringify({eventType:e,eventData:t});return j()?(ie(n,U()),s.either.right(void 0)):L(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 T)}function q(e,t,r={}){const{capture:n=()=>!0,postEvent:a=y}=r,o=w.signal(),[i,p]=f.createCbCollector();(Array.isArray(t)?t:[t]).forEach(u=>{i(x(u,l=>{const d=Array.isArray(t);n(d?{event:u,payload:l}:l)&&o.set([d?{event:u,payload:l}:l])}))});const _=u=>(p(),u);return s.function.pipe(async()=>a(e,r.params),s.taskEither.chainW(()=>f.BetterTaskEither((u,l,d)=>{const h=o();if(h)return u(h[0]);const E=P=>{P&&u(P[0])},O=()=>{o.unsub(E)};o.sub(E),d.on("finalized",O)},r)),s.taskEither.mapBoth(_,_))}function Ce(e,t,r){const{postEvent:n}=r||{};return f.throwifyAnyEither(q(e,t,{...r,postEvent:n?(...a)=>{try{return n(...a),s.either.right(void 0)}catch(o){return s.either.left(o)}}:y}))}function Be(e,t){const r=pe(e,t);return typeof r=="function"?S.BetterPromise.fn(()=>f.throwifyAnyEither(r)):r}function pe(e,t){const r=L(window);if(!e)return r||s.function.pipe(C(),s.either.match(()=>!1,()=>!0));if(r)return s.taskEither.right(!0);const{timeout:n=100}=t||{};return s.function.pipe(q("web_app_request_theme","theme_changed",{...t,timeout:n}),s.taskEither.match(a=>S.TimeoutError.is(a)||T.is(a)?s.either.right(!1):s.either.left(a),()=>s.either.right(!0)))}function Fe({launchParams:e,onEvent:t,resetPostMessage:r}={}){if(e){const o=typeof e=="string"||e instanceof URLSearchParams?e.toString():m.serializeLaunchParamsQuery({...e,vbWebAppData:void 0})+(e.vbWebAppData?`&vbWebAppData=${encodeURIComponent(e.vbWebAppData.toString())}`:"");try{m.parseLaunchParamsQuery(o)}catch(i){throw new Z(o,i)}f.setStorageValue("launchParams",o)}if(j()){if(!t)return;r&&g.reset();const o=g();g.set((...i)=>{const[p]=i,_=()=>{o(...i)};try{const u=c.parse(m.pipeJsonToSchema(m.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()}},b().log("Environment was mocked by the mockVBotEnv function")}function xe(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=ne(()=>{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(),k===a&&(k=void 0)}};return k=a,a}let k;function qe(){if(!k)throw new Error("HostBridge not initialized. Call defineHostBridge() first.");return k}function ue(e){return({req_id:t})=>t===e}const N={"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 A(e,t){return Object.keys(N).find(n=>N[n].some(a=>t?typeof a=="object"&&a.method===e&&a.param===t:a===e))||null}function Q(e){return e.split(".").map(Number)}function _e(e,t){const r=Q(e),n=Q(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 V(e,t,r){const n=r?A(e,t):A(e);return n?_e(n,r||t)<=0:!1}function Oe(e,t="strict"){const r=typeof t=="function"?t:n=>{const{method:a,version:o}=n,i="param"in n?new Y(a,n.param,o):new K(a,o);if(t==="strict")throw i;return b().forceWarn(i.message)};return((n,a)=>V(n,e)?n==="web_app_set_header_color"&&c.is(c.looseObject({color:c.any()}),a)&&!V(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(q("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 ee(o)):s.taskEither.right(a)))}function Me(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=y}=r,o=w.signal(),[i,p]=f.createCbCollector();(Array.isArray(t)?t:[t]).forEach(u=>{i(x(u,l=>{(Array.isArray(t)?n({event:u,payload:l}):n(l))&&o.set([l])}))});const _=u=>(p(),u);return s.function.pipe(async()=>a(e,r.params),s.taskEither.chainW(()=>f.BetterTaskEither((u,l,d)=>{const h=o();if(h)return u(h[0]);const E=P=>{P&&u(P[0])},O=()=>{o.unsub(E)};o.sub(E),d.on("finalized",O)},r)),s.taskEither.mapBoth(_,_))}function Ae(e,t,r){const{postEvent:n}=r||{};return f.throwifyAnyEither(fe(e,t,{...r,postEvent:n?(...a)=>{try{return n(...a),s.either.right(void 0)}catch(o){return s.either.left(o)}}:y}))}function Ve(){Object.hasOwn||(Object.hasOwn=function(e,t){return Object.prototype.hasOwnProperty.call(e,t)})}function I(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 Le=f.throwifyFpFn(I);function $(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=$(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 je=f.throwifyFpFn(de);function Te(e,t){return f.throwifyAnyEither(he(e,typeof t=="function"?r=>s.either.tryCatch(()=>t(r),n=>n):t))}function he(e,t){return s.function.pipe(I(e),s.either.chain(r=>t?typeof t=="function"?t(r):s.json.parse(r):s.either.right(r)))}function We(e){return $(e).length<=512}Object.defineProperty(exports,"createLogger",{enumerable:!0,get:()=>f.createLogger});Object.defineProperty(exports,"deepSnakeToCamelObjKeys",{enumerable:!0,get:()=>f.deepSnakeToCamelObjKeys});Object.defineProperty(exports,"CancelledError",{enumerable:!0,get:()=>S.CancelledError});Object.defineProperty(exports,"TimeoutError",{enumerable:!0,get:()=>S.TimeoutError});exports.InvalidLaunchParamsError=Z;exports.InvokeCustomMethodFailedError=ee;exports.LaunchParamsRetrieveError=X;exports.MethodParameterUnsupportedError=Y;exports.MethodUnsupportedError=K;exports.UnknownEnvError=T;exports.applyPolyfills=Ve;exports.captureSameReq=ue;exports.compareVersions=_e;exports.createPostEvent=Oe;exports.createStartParam=je;exports.createStartParamFp=de;exports.debug=R;exports.decodeBase64Url=Le;exports.decodeBase64UrlFp=I;exports.decodeStartParam=Te;exports.decodeStartParamFp=he;exports.defineHostBridge=xe;exports.emitEvent=B;exports.encodeBase64Url=$;exports.getHostBridge=qe;exports.getReleaseVersion=A;exports.hasWebviewProxy=L;exports.invokeCustomMethod=Me;exports.invokeCustomMethodFp=le;exports.isIframe=j;exports.isSafeToCreateStartParam=We;exports.isVBma=Be;exports.isVBmaFp=pe;exports.logger=b;exports.mockVBotEnv=Fe;exports.off=ae;exports.offAll=se;exports.on=x;exports.postEvent=ce;exports.postEventFp=y;exports.postMessage=ie;exports.postMessageImpl=g;exports.request=Ae;exports.request2=Ce;exports.request2Fp=q;exports.requestFp=fe;exports.resetGlobals=Pe;exports.retrieveLaunchParams=we;exports.retrieveLaunchParamsFp=te;exports.retrieveRawInitData=be;exports.retrieveRawInitDataFp=re;exports.retrieveRawLaunchParams=ge;exports.retrieveRawLaunchParamsFp=C;exports.setDebug=ye;exports.setTargetOrigin=Ee;exports.supports=V;exports.targetOrigin=U;
4
4
  //# sourceMappingURL=index.cjs.map