@vbotma/bridge 2.2.6 → 2.2.7
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/dist/dts/env/host/bridge.d.ts +48 -0
- package/dist/dts/events/createEmitter.d.ts +2 -1
- package/dist/dts/index.d.ts +1 -0
- package/dist/index.cjs +3 -3
- package/dist/index.cjs.map +1 -1
- package/dist/index.iife.js +3 -3
- package/dist/index.iife.js.map +1 -1
- package/dist/index.js +276 -237
- package/dist/index.js.map +1 -1
- package/package.json +4 -3
|
@@ -0,0 +1,48 @@
|
|
|
1
|
+
import { EmitFn, OffFn, OnFn } from '../../events/createEmitter.js';
|
|
2
|
+
import { MethodName, MethodParams } from '../../methods/types/index.js';
|
|
3
|
+
import { EventName, EventPayload } from '../../events/types/events.js';
|
|
4
|
+
import { IsNever } from '@vbotma/toolkit';
|
|
5
|
+
export type HostMethodEvents = {
|
|
6
|
+
[K in MethodName]: IsNever<MethodParams<K>> extends true ? undefined : MethodParams<K>;
|
|
7
|
+
};
|
|
8
|
+
export interface HostBridge {
|
|
9
|
+
/**
|
|
10
|
+
* Sends an event to the Mini App iframe.
|
|
11
|
+
* @param eventType - The event name.
|
|
12
|
+
* @param eventData - The event payload.
|
|
13
|
+
*/
|
|
14
|
+
send: <E extends EventName>(eventType: E, eventData?: EventPayload<E>) => void;
|
|
15
|
+
/**
|
|
16
|
+
* Unsubscribes all listeners and removes the window event listener.
|
|
17
|
+
*/
|
|
18
|
+
clear: () => void;
|
|
19
|
+
/**
|
|
20
|
+
* Adds a new listener for the specified event.
|
|
21
|
+
*/
|
|
22
|
+
on: OnFn<HostMethodEvents>;
|
|
23
|
+
/**
|
|
24
|
+
* Removes a listener from the specified event.
|
|
25
|
+
*/
|
|
26
|
+
off: OffFn<HostMethodEvents>;
|
|
27
|
+
/**
|
|
28
|
+
* Emits an event.
|
|
29
|
+
*/
|
|
30
|
+
emit: EmitFn<HostMethodEvents>;
|
|
31
|
+
}
|
|
32
|
+
export type HostEventHandler = (event: {
|
|
33
|
+
eventType: string;
|
|
34
|
+
eventData: unknown;
|
|
35
|
+
}) => void;
|
|
36
|
+
/**
|
|
37
|
+
* Sets up a bridge for a Host App to communicate with a Mini App iframe.
|
|
38
|
+
*
|
|
39
|
+
* @param iframe - The target Mini App iframe element.
|
|
40
|
+
* @param targetOrigin - output target origin. Default is '*'.
|
|
41
|
+
* @returns HostBridge instance to send events down to the Mini App.
|
|
42
|
+
*/
|
|
43
|
+
export declare function defineHostBridge(iframe: HTMLIFrameElement, targetOrigin?: string): HostBridge;
|
|
44
|
+
/**
|
|
45
|
+
* Retrieves the singleton HostBridge instance.
|
|
46
|
+
* Throws an error if defineHostBridge has not been called.
|
|
47
|
+
*/
|
|
48
|
+
export declare function getHostBridge(): HostBridge;
|
|
@@ -1,5 +1,6 @@
|
|
|
1
1
|
import { If, IsNever, IsUndefined, Or } from '@vbotma/toolkit';
|
|
2
|
-
import { Handler } from 'mitt';
|
|
2
|
+
import { Emitter, EventHandlerMap, EventType, Handler } from 'mitt';
|
|
3
|
+
export type { Emitter, EventHandlerMap, EventType, Handler, };
|
|
3
4
|
export type WildcardHandler<E> = Handler<{
|
|
4
5
|
[K in keyof E]: {
|
|
5
6
|
name: K;
|
package/dist/dts/index.d.ts
CHANGED
|
@@ -2,6 +2,7 @@ export { hasWebviewProxy } from './env/hasWebviewProxy.js';
|
|
|
2
2
|
export { isIframe } from './env/isIframe.js';
|
|
3
3
|
export { isVBMA, isVBMAFp, type isVBMAError } from './env/isVBMA.js';
|
|
4
4
|
export { mockVBotEnv } from './env/mockVBotEnv.js';
|
|
5
|
+
export { defineHostBridge, getHostBridge, type HostBridge, type HostEventHandler, } from './env/host/bridge.js';
|
|
5
6
|
export { off, offAll, on } from './events/emitter.js';
|
|
6
7
|
export { emitEvent } from './events/emitEvent.js';
|
|
7
8
|
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';
|
package/dist/index.cjs
CHANGED
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
"use strict";Object.defineProperty(exports,Symbol.toStringTag,{value:"Module"});const
|
|
2
|
-
`)]){}class
|
|
3
|
-
`),t,c)}ke(r,o)}const{on:x,off:ne,emit:ke,clear:oe}=we(()=>{const e=window;!e.TelegramGameProxy&&(e.TelegramGameProxy={}),A(e.TelegramGameProxy,"receiveEvent",C),D(e,"TelegramGameProxy"),!e.VBot&&(e.VBot={}),!e.VBot.WebView&&(e.VBot.WebView={}),A(e.VBot.WebView,"receiveEvent",C),D(e.VBot,"WebView"),A(e,"TelegramGameProxy_receiveEvent",C),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,s]=r;"unwrap"in s&&(s.unwrap(),n&&n!==t&&!Object.keys(n).length&&delete t[e[0]])}),window.removeEventListener("message",J)}),ae=(...e)=>g()(...e);function se(e,t){a.function.pipe(v(e,t),a.either.mapLeft(r=>{throw r}))}function v(e,t){w().log("Posting event:",t?{eventType:e,eventData:t}:{eventType:e});const r=window,n=JSON.stringify({eventType:e,eventData:t});return j()?(ae(n,W()),a.either.right(void 0)):V(r)?(r.VBotWebviewProxy.postEvent(e,JSON.stringify(t)),a.either.right(void 0)):i.is(i.looseObject({external:i.looseObject({notify:i.function()})}),r)?(r.external.notify(n),a.either.right(void 0)):a.either.left(new L)}function M(e,t,r={}){const{capture:n=()=>!0,postEvent:s=v}=r,o=b.signal(),[c,u]=f.createCbCollector();(Array.isArray(t)?t:[t]).forEach(p=>{c(x(p,l=>{const h=Array.isArray(t);n(h?{event:p,payload:l}:l)&&o.set([h?{event:p,payload:l}:l])}))});const _=p=>(u(),p);return a.function.pipe(async()=>s(e,r.params),a.taskEither.chainW(()=>f.BetterTaskEither((p,l,h)=>{const m=o();if(m)return p(m[0]);const E=P=>{P&&p(P[0])},q=()=>{o.unsub(E)};o.sub(E),h.on("finalized",q)},r)),a.taskEither.mapBoth(_,_))}function Se(e,t,r){const{postEvent:n}=r||{};return f.throwifyAnyEither(M(e,t,{...r,postEvent:n?(...s)=>{try{return n(...s),a.either.right(void 0)}catch(o){return a.either.left(o)}}:v}))}function Ce(e,t){const r=ie(e,t);return typeof r=="function"?k.BetterPromise.fn(()=>f.throwifyAnyEither(r)):r}function ie(e,t){const r=V(window);if(!e)return r||a.function.pipe(S(),a.either.match(()=>!1,()=>!0));if(r)return a.taskEither.right(!0);const{timeout:n=100}=t||{};return a.function.pipe(M("web_app_request_theme","theme_changed",{...t,timeout:n}),a.taskEither.match(s=>k.TimeoutError.is(s)||L.is(s)?a.either.right(!1):a.either.left(s),()=>a.either.right(!0)))}function Fe({launchParams:e,onEvent:t,resetPostMessage:r}={}){if(e){const o=typeof e=="string"||e instanceof URLSearchParams?e.toString():d.serializeLaunchParamsQuery({...e,vbWebAppData:void 0})+(e.vbWebAppData?`&vbWebAppData=${encodeURIComponent(e.vbWebAppData.toString())}`:"");try{d.parseLaunchParamsQuery(o)}catch(c){throw new X(o,c)}f.setStorageValue("launchParams",o)}if(j()){if(!t)return;r&&g.reset();const o=g();g.set((...c)=>{const[u]=c,_=()=>{o(...c)};try{const p=i.parse(d.pipeJsonToSchema(d.miniAppsMessage()),u);t({name:p.eventType,params:p.eventData},_)}catch{_()}});return}const n=window.VBotWebviewProxy||{},s=n.postEvent||(()=>{});window.VBotWebviewProxy={...n,postEvent(o,c){const u=()=>{s(o,c)};t?t({name:o,params:c?JSON.parse(c):void 0},u):u()}},w().log("Environment was mocked by the mockVBotEnv function")}function ce(e){return({req_id:t})=>t===e}const Q={"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 B(e,t){return Object.keys(Q).find(n=>Q[n].some(s=>t?typeof s=="object"&&s.method===e&&s.param===t:s===e))||null}function K(e){return e.split(".").map(Number)}function pe(e,t){const r=K(e),n=K(t),s=Math.max(r.length,n.length);for(let o=0;o<s;o+=1){const c=r[o]||0,u=n[o]||0;if(c!==u)return c>u?1:-1}return 0}function O(e,t,r){const n=r?B(e,t):B(e);return n?pe(n,r||t)<=0:!1}function xe(e,t="strict"){const r=typeof t=="function"?t:n=>{const{method:s,version:o}=n,c="param"in n?new H(s,n.param,o):new N(s,o);if(t==="strict")throw c;return w().forceWarn(c.message)};return((n,s)=>O(n,e)?n==="web_app_set_header_color"&&i.is(i.looseObject({color:i.any()}),s)&&!O(n,"color",e)?r({version:e,method:n,param:"color"}):se(n,s):r({version:e,method:n}))}function ue(e,t,r,n){return a.function.pipe(M("web_app_invoke_custom_method","custom_method_invoked",{...n||{},params:{method:e,params:t,req_id:r},capture:ce(r)}),a.taskEither.chain(({result:s,error:o})=>o?a.taskEither.left(new Z(o)):a.taskEither.right(s)))}function Me(e,t,r,n){return k.BetterPromise.fn(()=>a.function.pipe(ue(e,t,r,n),a.taskEither.match(s=>{throw s},s=>s))())}function _e(e,t,r={}){const{capture:n=()=>!0,postEvent:s=v}=r,o=b.signal(),[c,u]=f.createCbCollector();(Array.isArray(t)?t:[t]).forEach(p=>{c(x(p,l=>{(Array.isArray(t)?n({event:p,payload:l}):n(l))&&o.set([l])}))});const _=p=>(u(),p);return a.function.pipe(async()=>s(e,r.params),a.taskEither.chainW(()=>f.BetterTaskEither((p,l,h)=>{const m=o();if(m)return p(m[0]);const E=P=>{P&&p(P[0])},q=()=>{o.unsub(E)};o.sub(E),h.on("finalized",q)},r)),a.taskEither.mapBoth(_,_))}function qe(e,t,r){const{postEvent:n}=r||{};return f.throwifyAnyEither(_e(e,t,{...r,postEvent:n?(...s)=>{try{return n(...s),a.either.right(void 0)}catch(o){return a.either.left(o)}}:v}))}function Ae(){Object.hasOwn||(Object.hasOwn=function(e,t){return Object.prototype.hasOwnProperty.call(e,t)})}function U(e){return a.either.tryCatch(()=>decodeURIComponent(atob(e.replace(/-/g,"+").replace(/_/g,"/")).split("").map(t=>"%"+("00"+t.charCodeAt(0).toString(16)).slice(-2)).join("")),t=>t)}const Be=f.throwifyFpFn(U);function I(e){return btoa(encodeURIComponent(e).replace(/%([0-9A-F]{2})/g,(t,r)=>String.fromCharCode(parseInt(`0x${r}`)))).replace(/\+/g,"-").replace(/\//g,"_")}function le(e){const t=I(typeof e=="string"?e:JSON.stringify(e));return t.length>512?a.either.left(new Error("Value is too long for start parameter")):a.either.right(t)}const Oe=f.throwifyFpFn(le);function Ve(e,t){return f.throwifyAnyEither(fe(e,typeof t=="function"?r=>a.either.tryCatch(()=>t(r),n=>n):t))}function fe(e,t){return a.function.pipe(U(e),a.either.chain(r=>t?typeof t=="function"?t(r):a.json.parse(r):a.either.right(r)))}function je(e){return I(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:()=>k.CancelledError});Object.defineProperty(exports,"TimeoutError",{enumerable:!0,get:()=>k.TimeoutError});exports.InvalidLaunchParamsError=X;exports.InvokeCustomMethodFailedError=Z;exports.LaunchParamsRetrieveError=Y;exports.MethodParameterUnsupportedError=H;exports.MethodUnsupportedError=N;exports.UnknownEnvError=L;exports.applyPolyfills=Ae;exports.captureSameReq=ce;exports.compareVersions=pe;exports.createPostEvent=xe;exports.createStartParam=Oe;exports.createStartParamFp=le;exports.debug=R;exports.decodeBase64Url=Be;exports.decodeBase64UrlFp=U;exports.decodeStartParam=Ve;exports.decodeStartParamFp=fe;exports.emitEvent=C;exports.encodeBase64Url=I;exports.getReleaseVersion=B;exports.hasWebviewProxy=V;exports.invokeCustomMethod=Me;exports.invokeCustomMethodFp=ue;exports.isIframe=j;exports.isSafeToCreateStartParam=je;exports.isVBMA=Ce;exports.isVBMAFp=ie;exports.logger=w;exports.mockVBotEnv=Fe;exports.off=ne;exports.offAll=oe;exports.on=x;exports.postEvent=se;exports.postEventFp=v;exports.postMessage=ae;exports.postMessageImpl=g;exports.request=qe;exports.request2=Se;exports.request2Fp=M;exports.requestFp=_e;exports.resetGlobals=Ee;exports.retrieveLaunchParams=me;exports.retrieveLaunchParamsFp=ee;exports.retrieveRawInitData=de;exports.retrieveRawInitDataFp=te;exports.retrieveRawLaunchParams=be;exports.retrieveRawLaunchParamsFp=S;exports.setDebug=ye;exports.setTargetOrigin=ve;exports.supports=O;exports.targetOrigin=W;
|
|
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;
|
|
4
4
|
//# sourceMappingURL=index.cjs.map
|