@vbotma/bridge 2.2.8 → 2.2.9
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/setLaunchParams.d.ts +63 -0
- 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 +274 -221
- package/dist/index.js.map +1 -1
- package/package.json +3 -3
|
@@ -0,0 +1,63 @@
|
|
|
1
|
+
import { LaunchParamsLike } from '@vbotma/transformers';
|
|
2
|
+
import { MethodName, MethodParams } from '../methods/types/index.js';
|
|
3
|
+
/**
|
|
4
|
+
* Injects launch parameters and mocks the environment to imitate VBot Mini Apps behavior.
|
|
5
|
+
*
|
|
6
|
+
* We usually use this function in the following cases:
|
|
7
|
+
* 1. We are developing an application outside the VBot environment and would like to imitate
|
|
8
|
+
* the VBot client in order to re-create the same communication behavior.
|
|
9
|
+
* 2. We would like to intercept some VBot Mini Apps methods' calls in order to enhance them
|
|
10
|
+
* or write a custom behavior. It is extremely useful in some VBot clients improperly handling
|
|
11
|
+
* Mini Apps methods' calls and not even responding.
|
|
12
|
+
*
|
|
13
|
+
* This function acts identically to `mockVBotEnv` but provides a more semantic name when the primary
|
|
14
|
+
* goal is to inject launch parameters into the simulated environment.
|
|
15
|
+
*
|
|
16
|
+
* Note that calling this function in Telegram web clients, the `postMessageImplementation` signal
|
|
17
|
+
* value will be updated with a new one, enhancing previously set signal value to allow wrapping
|
|
18
|
+
* the original `window.parent.postMessage` function. In other words, calling `setLaunchParams`
|
|
19
|
+
* function N times, you will effectively wrap previously set implementation N times, so be
|
|
20
|
+
* careful calling this function several times during a single lifecycle of the app. In case you
|
|
21
|
+
* would like to avoid such kind of behavior, use the `resetPostMessage` option.
|
|
22
|
+
*/
|
|
23
|
+
export declare function setLaunchParams({ launchParams, onEvent, resetPostMessage }?: {
|
|
24
|
+
/**
|
|
25
|
+
* Launch parameters to mock. They will be saved in the storage, so the SDK functions could
|
|
26
|
+
* retrieve them.
|
|
27
|
+
*
|
|
28
|
+
* Note that this value must have `vbWebAppData` presented in a raw format as long as you will
|
|
29
|
+
* need it when retrieving init data in this format. Otherwise, init data may be broken.
|
|
30
|
+
*/
|
|
31
|
+
launchParams?: (Omit<LaunchParamsLike, 'vbWebAppData'> & {
|
|
32
|
+
vbWebAppData?: string | URLSearchParams;
|
|
33
|
+
}) | string | URLSearchParams;
|
|
34
|
+
/**
|
|
35
|
+
* Function that will be called if a Mini Apps method call was requested by the mini app.
|
|
36
|
+
*
|
|
37
|
+
* It receives a Mini Apps method name along with the passed payload.
|
|
38
|
+
*
|
|
39
|
+
* Note that using the `next` function, in non-web environments it uses the
|
|
40
|
+
* `window.VBotWebviewProxy.postEvent` method.
|
|
41
|
+
*
|
|
42
|
+
* Talking about the web versions of Telegram, the value of `next` is a bit more complex - it
|
|
43
|
+
* will be equal to the value stored in the `postMessageImpl` signal set previously. By default,
|
|
44
|
+
* this value contains a function utilizing the `window.parent.postMessage` method.
|
|
45
|
+
* @param event - event information.
|
|
46
|
+
* @param next - function to call the original method used to call a Mini Apps method.
|
|
47
|
+
*/
|
|
48
|
+
onEvent?: (event: {
|
|
49
|
+
[M in MethodName]: {
|
|
50
|
+
name: M;
|
|
51
|
+
params: MethodParams<M>;
|
|
52
|
+
};
|
|
53
|
+
}[MethodName] | {
|
|
54
|
+
name: string;
|
|
55
|
+
params: unknown;
|
|
56
|
+
}, next: () => void) => void;
|
|
57
|
+
/**
|
|
58
|
+
* Removes all previously set enhancements of the `window.parent.postMessage` function set
|
|
59
|
+
* by other `mockVBotEnv` calls.
|
|
60
|
+
* @default false
|
|
61
|
+
*/
|
|
62
|
+
resetPostMessage?: boolean;
|
|
63
|
+
}): void;
|
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 { setLaunchParams } from './env/setLaunchParams.js';
|
|
5
6
|
export { defineHostBridge, getHostBridge, type HostBridge, type HostEventHandler, } from './env/host/bridge.js';
|
|
6
7
|
export { off, offAll, on } from './events/emitter.js';
|
|
7
8
|
export { emitEvent } from './events/emitEvent.js';
|
package/dist/index.cjs
CHANGED
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
"use strict";Object.defineProperty(exports,Symbol.toStringTag,{value:"Module"});const c=require("valibot"),
|
|
2
|
-
`)]){}class
|
|
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;
|
|
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"),y=require("error-kid"),d=require("@vbotma/transformers"),g=require("@vbotma/signals"),me=require("mitt");function W(e){return c.is(c.looseObject({VBotWebviewProxy:c.looseObject({postEvent:c.function()})}),e)}function F(){try{return window.self!==window.top}catch{return!0}}class Y extends y.errorClass("MethodUnsupportedError",(t,r)=>[`Method "${t}" is unsupported in Mini Apps version ${r}`]){}class X extends y.errorClass("MethodParameterUnsupportedError",(t,r,n)=>[`Parameter "${r}" of "${t}" method is unsupported in Mini Apps version ${n}`]){}class Z extends y.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 y.errorClass("InvalidLaunchParamsError",(t,r)=>[`Invalid value for launch params: ${t}`,{cause:r}]){}class T extends y.errorClass("UnknownEnvError"){}class ee extends y.errorClass("InvokeCustomMethodError",t=>[`Server returned error: ${t}`]){}const z="launchParams";function J(e){return e.replace(/^[^?#]*[?#]/,"").replace(/[?#]/g,"&")}function te(){return s.function.pipe(x(),s.either.chainW(d.parseLaunchParamsQueryFp))}const we=l.throwifyFpFn(te);function re(){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 be(){return s.function.pipe(re(),s.either.fold(e=>{throw e},e=>e),s.option.match(()=>{},e=>e))}function x(){const e=[];for(const[t,r]of[[()=>J(window.location.href),"window.location.href"],[()=>{const n=performance.getEntriesByType("navigation")[0];return n&&J(n.name)},"performance navigation entries"],[()=>l.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(d.parseLaunchParamsQueryFp(n),s.either.foldW(o=>o,()=>!0));if(typeof a!="boolean"){e.push({source:r,error:a});continue}return l.setStorageValue(z,n),s.either.right(n)}return s.either.left(new Z(e))}const ge=l.throwifyFpFn(x);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 f=u.findIndex(h=>h[1]===p);if(f>=0&&(n.off(o,u[f][0]),u.splice(f,1),!u.length&&(_.delete(i),!_.size))){const h=r.size;r.delete(o),h&&!r.size&&t()}};return{on(o,i,p){!r.size&&e();const _=()=>{a(o,i,p)},u=(...m)=>{p&&_(),o==="*"?i({name:m[0],payload:m[1]}):i(...m)};n.on(o,u);const f=r.get(o)||new Map;r.set(o,f);const h=f.get(i)||[];return f.set(i,h),h.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=g.signal(!1),R=g.signal("https://web.telegram.org"),ye=e=>{b().log("Event received:",e)},U=g.computed(C);function ve(e){e!==C()&&(C.set(e),(e?A:ae)("*",ye))}const I=g.computed(R);function Ee(e){R.set(e),b().log("New target origin set",e)}const w=g.signal((...e)=>{window.parent.postMessage(...e)}),b=g.signal(l.createLogger("Bridge",{bgColor:"#9147ff",textColor:"white",shouldLog:U}));function Pe(){se(),[w,R,I,C,U,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:d.themeParams()})};function Q(e){if(e.source!==window.parent)return;let t;try{t=c.parse(d.pipeJsonToSchema(d.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:A,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",Q)},()=>{[["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",Q)}),ie=(...e)=>w()(...e);function ce(e,t){s.function.pipe(v(e,t),s.either.mapLeft(r=>{throw r}))}function v(e,t){b().log("Posting event:",t?{eventType:e,eventData:t}:{eventType:e});const r=window,n=JSON.stringify({eventType:e,eventData:t});return F()?(ie(n,I()),s.either.right(void 0)):W(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 L(e,t,r={}){const{capture:n=()=>!0,postEvent:a=v}=r,o=g.signal(),[i,p]=l.createCbCollector();(Array.isArray(t)?t:[t]).forEach(u=>{i(A(u,f=>{const h=Array.isArray(t);n(h?{event:u,payload:f}:f)&&o.set([h?{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,h)=>{const m=o();if(m)return u(m[0]);const E=P=>{P&&u(P[0])},q=()=>{o.unsub(E)};o.sub(E),h.on("finalized",q)},r)),s.taskEither.mapBoth(_,_))}function xe(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)}}:v}))}function Be(e,t){const r=pe(e,t);return typeof r=="function"?S.BetterPromise.fn(()=>l.throwifyAnyEither(r)):r}function pe(e,t){const r=W(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=>S.TimeoutError.is(a)||T.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():d.serializeLaunchParamsQuery({...e,vbWebAppData:void 0})+(e.vbWebAppData?`&vbWebAppData=${encodeURIComponent(e.vbWebAppData.toString())}`:"");try{d.parseLaunchParamsQuery(o)}catch(i){throw new j(o,i)}l.setStorageValue("launchParams",o)}if(F()){if(!t)return;r&&w.reset();const o=w();w.set((...i)=>{const[p]=i,_=()=>{o(...i)};try{const u=c.parse(d.pipeJsonToSchema(d.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 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(i){throw new j(o,i)}l.setStorageValue("launchParams",o)}if(F()){if(!t)return;r&&w.reset();const o=w();w.set((...i)=>{const[p]=i,_=()=>{o(...i)};try{const u=c.parse(d.pipeJsonToSchema(d.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("Launch params are injected by the setLaunchParams function")}function Ae(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 Le(){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 K(e){return e.split(".").map(Number)}function _e(e,t){const r=K(e),n=K(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 X(a,n.param,o):new Y(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(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 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=v}=r,o=g.signal(),[i,p]=l.createCbCollector();(Array.isArray(t)?t:[t]).forEach(u=>{i(A(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,h)=>{const m=o();if(m)return u(m[0]);const E=P=>{P&&u(P[0])},q=()=>{o.unsub(E)};o.sub(E),h.on("finalized",q)},r)),s.taskEither.mapBoth(_,_))}function Oe(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)}}:v}))}function Ve(){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 We=l.throwifyFpFn(D);function $(e){return btoa(encodeURIComponent(e).replace(/%([0-9A-F]{2})/g,(t,r)=>String.fromCharCode(parseInt(`0x${r}`)))).replace(/\+/g,"-").replace(/\//g,"_")}function he(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=l.throwifyFpFn(he);function Te(e,t){return l.throwifyAnyEither(de(e,typeof t=="function"?r=>s.either.tryCatch(()=>t(r),n=>n):t))}function de(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 Re(e){return $(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=ee;exports.LaunchParamsRetrieveError=Z;exports.MethodParameterUnsupportedError=X;exports.MethodUnsupportedError=Y;exports.UnknownEnvError=T;exports.applyPolyfills=Ve;exports.captureSameReq=ue;exports.compareVersions=_e;exports.createPostEvent=qe;exports.createStartParam=je;exports.createStartParamFp=he;exports.debug=U;exports.decodeBase64Url=We;exports.decodeBase64UrlFp=D;exports.decodeStartParam=Te;exports.decodeStartParamFp=de;exports.defineHostBridge=Ae;exports.emitEvent=B;exports.encodeBase64Url=$;exports.getHostBridge=Le;exports.getReleaseVersion=O;exports.hasWebviewProxy=W;exports.invokeCustomMethod=Me;exports.invokeCustomMethodFp=le;exports.isIframe=F;exports.isSafeToCreateStartParam=Re;exports.isVBma=Be;exports.isVBmaFp=pe;exports.logger=b;exports.mockVBotEnv=Ce;exports.off=ae;exports.offAll=se;exports.on=A;exports.postEvent=ce;exports.postEventFp=v;exports.postMessage=ie;exports.postMessageImpl=w;exports.request=Oe;exports.request2=xe;exports.request2Fp=L;exports.requestFp=fe;exports.resetGlobals=Pe;exports.retrieveLaunchParams=we;exports.retrieveLaunchParamsFp=te;exports.retrieveRawInitData=be;exports.retrieveRawInitDataFp=re;exports.retrieveRawLaunchParams=ge;exports.retrieveRawLaunchParamsFp=x;exports.setDebug=ve;exports.setLaunchParams=Fe;exports.setTargetOrigin=Ee;exports.supports=V;exports.targetOrigin=I;
|
|
4
4
|
//# sourceMappingURL=index.cjs.map
|