hm-tracking-sdk 0.2.0 → 0.2.1

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.
@@ -4382,7 +4382,7 @@ function getTelegramUserUnsafe() {
4382
4382
  isPremium: r.user.is_premium || !1,
4383
4383
  allowsWriteToPm: r.user.allows_write_to_pm || !1
4384
4384
  },
4385
- authDate: Math.floor(Date.now() / 1e3),
4385
+ authDate: (/* @__PURE__ */ new Date()).toISOString(),
4386
4386
  hash: r.hash || "",
4387
4387
  startParam: r.start_param,
4388
4388
  chatType: r.chat_type,
@@ -4433,7 +4433,7 @@ function getAnonymousBrowserUser(r = "tg_tracking_uid") {
4433
4433
  isPremium: !1,
4434
4434
  allowsWriteToPm: !1
4435
4435
  },
4436
- authDate: Math.floor(Date.now() / 1e3),
4436
+ authDate: (/* @__PURE__ */ new Date()).toISOString(),
4437
4437
  hash: "anonymous_cookie_user",
4438
4438
  startParam: "browser_guest",
4439
4439
  chatType: "sender",
@@ -4451,7 +4451,7 @@ function getDefaultMockUser() {
4451
4451
  isPremium: !0,
4452
4452
  allowsWriteToPm: !0
4453
4453
  },
4454
- authDate: Math.floor(Date.now() / 1e3),
4454
+ authDate: (/* @__PURE__ */ new Date()).toISOString(),
4455
4455
  hash: "mock_hash_for_demo_purpose",
4456
4456
  startParam: "demo_start_param",
4457
4457
  chatType: "sender",
@@ -8,7 +8,7 @@
8
8
  `)}getSetCookie(){return this.get("set-cookie")||[]}get[Symbol.toStringTag](){return"AxiosHeaders"}static from(f){return f instanceof this?f:new this(f)}static concat(f,...d){const m=new this(f);return d.forEach(v=>m.set(v)),m}static accessor(f){const m=(this[$internals]=this[$internals]={accessors:{}}).accessors,v=this.prototype;function g(w){const _=normalizeHeader(w);m[_]||(buildAccessors(v,w),m[_]=!0)}return utils$5.isArray(f)?f.forEach(g):g(f),this}};AxiosHeaders$1.accessor(["Content-Type","Content-Length","Accept","Accept-Encoding","User-Agent","Authorization"]),utils$5.reduceDescriptors(AxiosHeaders$1.prototype,({value:r},f)=>{let d=f[0].toUpperCase()+f.slice(1);return{get:()=>r,set(m){this[d]=m}}}),utils$5.freezeMethods(AxiosHeaders$1);function transformData(r,f){const d=this||defaults,m=f||d,v=AxiosHeaders$1.from(m.headers);let g=m.data;return utils$5.forEach(r,function(_){g=_.call(d,g,v.normalize(),f?f.status:void 0)}),v.normalize(),g}function isCancel$1(r){return!!(r&&r.__CANCEL__)}function CanceledError$1(r,f,d){AxiosError$1.call(this,r??"canceled",AxiosError$1.ERR_CANCELED,f,d),this.name="CanceledError"}utils$5.inherits(CanceledError$1,AxiosError$1,{__CANCEL__:!0});function settle(r,f,d){const m=d.config.validateStatus;!d.status||!m||m(d.status)?r(d):f(new AxiosError$1("Request failed with status code "+d.status,[AxiosError$1.ERR_BAD_REQUEST,AxiosError$1.ERR_BAD_RESPONSE][Math.floor(d.status/100)-4],d.config,d.request,d))}function parseProtocol(r){const f=/^([-+\w]{1,25})(:?\/\/|:)/.exec(r);return f&&f[1]||""}function speedometer(r,f){r=r||10;const d=new Array(r),m=new Array(r);let v=0,g=0,w;return f=f!==void 0?f:1e3,function(S){const x=Date.now(),b=m[g];w||(w=x),d[v]=S,m[v]=x;let C=g,E=0;for(;C!==v;)E+=d[C++],C=C%r;if(v=(v+1)%r,v===g&&(g=(g+1)%r),x-w<f)return;const M=b&&x-b;return M?Math.round(E*1e3/M):void 0}}function throttle(r,f){let d=0,m=1e3/f,v,g;const w=(x,b=Date.now())=>{d=b,v=null,g&&(clearTimeout(g),g=null),r(...x)};return[(...x)=>{const b=Date.now(),C=b-d;C>=m?w(x,b):(v=x,g||(g=setTimeout(()=>{g=null,w(v)},m-C)))},()=>v&&w(v)]}const progressEventReducer=(r,f,d=3)=>{let m=0;const v=speedometer(50,250);return throttle(g=>{const w=g.loaded,_=g.lengthComputable?g.total:void 0,S=w-m,x=v(S),b=w<=_;m=w;const C={loaded:w,total:_,progress:_?w/_:void 0,bytes:S,rate:x||void 0,estimated:x&&_&&b?(_-w)/x:void 0,event:g,lengthComputable:_!=null,[f?"download":"upload"]:!0};r(C)},d)},progressEventDecorator=(r,f)=>{const d=r!=null;return[m=>f[0]({lengthComputable:d,total:r,loaded:m}),f[1]]},asyncDecorator=r=>(...f)=>utils$5.asap(()=>r(...f)),isURLSameOrigin=platform$1.hasStandardBrowserEnv?((r,f)=>d=>(d=new URL(d,platform$1.origin),r.protocol===d.protocol&&r.host===d.host&&(f||r.port===d.port)))(new URL(platform$1.origin),platform$1.navigator&&/(msie|trident)/i.test(platform$1.navigator.userAgent)):()=>!0,cookies=platform$1.hasStandardBrowserEnv?{write(r,f,d,m,v,g){const w=[r+"="+encodeURIComponent(f)];utils$5.isNumber(d)&&w.push("expires="+new Date(d).toGMTString()),utils$5.isString(m)&&w.push("path="+m),utils$5.isString(v)&&w.push("domain="+v),g===!0&&w.push("secure"),document.cookie=w.join("; ")},read(r){const f=document.cookie.match(new RegExp("(^|;\\s*)("+r+")=([^;]*)"));return f?decodeURIComponent(f[3]):null},remove(r){this.write(r,"",Date.now()-864e5)}}:{write(){},read(){return null},remove(){}};function isAbsoluteURL(r){return/^([a-z][a-z\d+\-.]*:)?\/\//i.test(r)}function combineURLs(r,f){return f?r.replace(/\/?\/$/,"")+"/"+f.replace(/^\/+/,""):r}function buildFullPath(r,f,d){let m=!isAbsoluteURL(f);return r&&(m||d==!1)?combineURLs(r,f):f}const headersToObject=r=>r instanceof AxiosHeaders$1?{...r}:r;function mergeConfig$1(r,f){f=f||{};const d={};function m(x,b,C,E){return utils$5.isPlainObject(x)&&utils$5.isPlainObject(b)?utils$5.merge.call({caseless:E},x,b):utils$5.isPlainObject(b)?utils$5.merge({},b):utils$5.isArray(b)?b.slice():b}function v(x,b,C,E){if(utils$5.isUndefined(b)){if(!utils$5.isUndefined(x))return m(void 0,x,C,E)}else return m(x,b,C,E)}function g(x,b){if(!utils$5.isUndefined(b))return m(void 0,b)}function w(x,b){if(utils$5.isUndefined(b)){if(!utils$5.isUndefined(x))return m(void 0,x)}else return m(void 0,b)}function _(x,b,C){if(C in f)return m(x,b);if(C in r)return m(void 0,x)}const S={url:g,method:g,data:g,baseURL:w,transformRequest:w,transformResponse:w,paramsSerializer:w,timeout:w,timeoutMessage:w,withCredentials:w,withXSRFToken:w,adapter:w,responseType:w,xsrfCookieName:w,xsrfHeaderName:w,onUploadProgress:w,onDownloadProgress:w,decompress:w,maxContentLength:w,maxBodyLength:w,beforeRedirect:w,transport:w,httpAgent:w,httpsAgent:w,cancelToken:w,socketPath:w,responseEncoding:w,validateStatus:_,headers:(x,b,C)=>v(headersToObject(x),headersToObject(b),C,!0)};return utils$5.forEach(Object.keys({...r,...f}),function(b){const C=S[b]||v,E=C(r[b],f[b],b);utils$5.isUndefined(E)&&C!==_||(d[b]=E)}),d}const resolveConfig=r=>{const f=mergeConfig$1({},r);let{data:d,withXSRFToken:m,xsrfHeaderName:v,xsrfCookieName:g,headers:w,auth:_}=f;f.headers=w=AxiosHeaders$1.from(w),f.url=buildURL(buildFullPath(f.baseURL,f.url,f.allowAbsoluteUrls),r.params,r.paramsSerializer),_&&w.set("Authorization","Basic "+btoa((_.username||"")+":"+(_.password?unescape(encodeURIComponent(_.password)):"")));let S;if(utils$5.isFormData(d)){if(platform$1.hasStandardBrowserEnv||platform$1.hasStandardBrowserWebWorkerEnv)w.setContentType(void 0);else if((S=w.getContentType())!==!1){const[x,...b]=S?S.split(";").map(C=>C.trim()).filter(Boolean):[];w.setContentType([x||"multipart/form-data",...b].join("; "))}}if(platform$1.hasStandardBrowserEnv&&(m&&utils$5.isFunction(m)&&(m=m(f)),m||m!==!1&&isURLSameOrigin(f.url))){const x=v&&g&&cookies.read(g);x&&w.set(v,x)}return f},isXHRAdapterSupported=typeof XMLHttpRequest<"u",xhrAdapter=isXHRAdapterSupported&&function(r){return new Promise(function(d,m){const v=resolveConfig(r);let g=v.data;const w=AxiosHeaders$1.from(v.headers).normalize();let{responseType:_,onUploadProgress:S,onDownloadProgress:x}=v,b,C,E,M,A;function T(){M&&M(),A&&A(),v.cancelToken&&v.cancelToken.unsubscribe(b),v.signal&&v.signal.removeEventListener("abort",b)}let L=new XMLHttpRequest;L.open(v.method.toUpperCase(),v.url,!0),L.timeout=v.timeout;function O(){if(!L)return;const H=AxiosHeaders$1.from("getAllResponseHeaders"in L&&L.getAllResponseHeaders()),X={data:!_||_==="text"||_==="json"?L.responseText:L.response,status:L.status,statusText:L.statusText,headers:H,config:r,request:L};settle(function(se){d(se),T()},function(se){m(se),T()},X),L=null}"onloadend"in L?L.onloadend=O:L.onreadystatechange=function(){!L||L.readyState!==4||L.status===0&&!(L.responseURL&&L.responseURL.indexOf("file:")===0)||setTimeout(O)},L.onabort=function(){L&&(m(new AxiosError$1("Request aborted",AxiosError$1.ECONNABORTED,r,L)),L=null)},L.onerror=function(){m(new AxiosError$1("Network Error",AxiosError$1.ERR_NETWORK,r,L)),L=null},L.ontimeout=function(){let V=v.timeout?"timeout of "+v.timeout+"ms exceeded":"timeout exceeded";const X=v.transitional||transitionalDefaults;v.timeoutErrorMessage&&(V=v.timeoutErrorMessage),m(new AxiosError$1(V,X.clarifyTimeoutError?AxiosError$1.ETIMEDOUT:AxiosError$1.ECONNABORTED,r,L)),L=null},g===void 0&&w.setContentType(null),"setRequestHeader"in L&&utils$5.forEach(w.toJSON(),function(V,X){L.setRequestHeader(X,V)}),utils$5.isUndefined(v.withCredentials)||(L.withCredentials=!!v.withCredentials),_&&_!=="json"&&(L.responseType=v.responseType),x&&([E,A]=progressEventReducer(x,!0),L.addEventListener("progress",E)),S&&L.upload&&([C,M]=progressEventReducer(S),L.upload.addEventListener("progress",C),L.upload.addEventListener("loadend",M)),(v.cancelToken||v.signal)&&(b=H=>{L&&(m(!H||H.type?new CanceledError$1(null,r,L):H),L.abort(),L=null)},v.cancelToken&&v.cancelToken.subscribe(b),v.signal&&(v.signal.aborted?b():v.signal.addEventListener("abort",b)));const N=parseProtocol(v.url);if(N&&platform$1.protocols.indexOf(N)===-1){m(new AxiosError$1("Unsupported protocol "+N+":",AxiosError$1.ERR_BAD_REQUEST,r));return}L.send(g||null)})},composeSignals=(r,f)=>{const{length:d}=r=r?r.filter(Boolean):[];if(f||d){let m=new AbortController,v;const g=function(x){if(!v){v=!0,_();const b=x instanceof Error?x:this.reason;m.abort(b instanceof AxiosError$1?b:new CanceledError$1(b instanceof Error?b.message:b))}};let w=f&&setTimeout(()=>{w=null,g(new AxiosError$1(`timeout ${f} of ms exceeded`,AxiosError$1.ETIMEDOUT))},f);const _=()=>{r&&(w&&clearTimeout(w),w=null,r.forEach(x=>{x.unsubscribe?x.unsubscribe(g):x.removeEventListener("abort",g)}),r=null)};r.forEach(x=>x.addEventListener("abort",g));const{signal:S}=m;return S.unsubscribe=()=>utils$5.asap(_),S}},streamChunk=function*(r,f){let d=r.byteLength;if(d<f){yield r;return}let m=0,v;for(;m<d;)v=m+f,yield r.slice(m,v),m=v},readBytes=async function*(r,f){for await(const d of readStream(r))yield*streamChunk(d,f)},readStream=async function*(r){if(r[Symbol.asyncIterator]){yield*r;return}const f=r.getReader();try{for(;;){const{done:d,value:m}=await f.read();if(d)break;yield m}}finally{await f.cancel()}},trackStream=(r,f,d,m)=>{const v=readBytes(r,f);let g=0,w,_=S=>{w||(w=!0,m&&m(S))};return new ReadableStream({async pull(S){try{const{done:x,value:b}=await v.next();if(x){_(),S.close();return}let C=b.byteLength;if(d){let E=g+=C;d(E)}S.enqueue(new Uint8Array(b))}catch(x){throw _(x),x}},cancel(S){return _(S),v.return()}},{highWaterMark:2})},isFetchSupported=typeof fetch=="function"&&typeof Request=="function"&&typeof Response=="function",isReadableStreamSupported=isFetchSupported&&typeof ReadableStream=="function",encodeText=isFetchSupported&&(typeof TextEncoder=="function"?(r=>f=>r.encode(f))(new TextEncoder):async r=>new Uint8Array(await new Response(r).arrayBuffer())),test=(r,...f)=>{try{return!!r(...f)}catch{return!1}},supportsRequestStream=isReadableStreamSupported&&test(()=>{let r=!1;const f=new Request(platform$1.origin,{body:new ReadableStream,method:"POST",get duplex(){return r=!0,"half"}}).headers.has("Content-Type");return r&&!f}),DEFAULT_CHUNK_SIZE=64*1024,supportsResponseStream=isReadableStreamSupported&&test(()=>utils$5.isReadableStream(new Response("").body)),resolvers={stream:supportsResponseStream&&(r=>r.body)};isFetchSupported&&(r=>{["text","arrayBuffer","blob","formData","stream"].forEach(f=>{!resolvers[f]&&(resolvers[f]=utils$5.isFunction(r[f])?d=>d[f]():(d,m)=>{throw new AxiosError$1(`Response type '${f}' is not supported`,AxiosError$1.ERR_NOT_SUPPORT,m)})})})(new Response);const getBodyLength=async r=>{if(r==null)return 0;if(utils$5.isBlob(r))return r.size;if(utils$5.isSpecCompliantForm(r))return(await new Request(platform$1.origin,{method:"POST",body:r}).arrayBuffer()).byteLength;if(utils$5.isArrayBufferView(r)||utils$5.isArrayBuffer(r))return r.byteLength;if(utils$5.isURLSearchParams(r)&&(r=r+""),utils$5.isString(r))return(await encodeText(r)).byteLength},resolveBodyLength=async(r,f)=>{const d=utils$5.toFiniteNumber(r.getContentLength());return d??getBodyLength(f)},fetchAdapter=isFetchSupported&&(async r=>{let{url:f,method:d,data:m,signal:v,cancelToken:g,timeout:w,onDownloadProgress:_,onUploadProgress:S,responseType:x,headers:b,withCredentials:C="same-origin",fetchOptions:E}=resolveConfig(r);x=x?(x+"").toLowerCase():"text";let M=composeSignals([v,g&&g.toAbortSignal()],w),A;const T=M&&M.unsubscribe&&(()=>{M.unsubscribe()});let L;try{if(S&&supportsRequestStream&&d!=="get"&&d!=="head"&&(L=await resolveBodyLength(b,m))!==0){let X=new Request(f,{method:"POST",body:m,duplex:"half"}),oe;if(utils$5.isFormData(m)&&(oe=X.headers.get("content-type"))&&b.setContentType(oe),X.body){const[se,de]=progressEventDecorator(L,progressEventReducer(asyncDecorator(S)));m=trackStream(X.body,DEFAULT_CHUNK_SIZE,se,de)}}utils$5.isString(C)||(C=C?"include":"omit");const O="credentials"in Request.prototype;A=new Request(f,{...E,signal:M,method:d.toUpperCase(),headers:b.normalize().toJSON(),body:m,duplex:"half",credentials:O?C:void 0});let N=await fetch(A,E);const H=supportsResponseStream&&(x==="stream"||x==="response");if(supportsResponseStream&&(_||H&&T)){const X={};["status","statusText","headers"].forEach(he=>{X[he]=N[he]});const oe=utils$5.toFiniteNumber(N.headers.get("content-length")),[se,de]=_&&progressEventDecorator(oe,progressEventReducer(asyncDecorator(_),!0))||[];N=new Response(trackStream(N.body,DEFAULT_CHUNK_SIZE,se,()=>{de&&de(),T&&T()}),X)}x=x||"text";let V=await resolvers[utils$5.findKey(resolvers,x)||"text"](N,r);return!H&&T&&T(),await new Promise((X,oe)=>{settle(X,oe,{data:V,headers:AxiosHeaders$1.from(N.headers),status:N.status,statusText:N.statusText,config:r,request:A})})}catch(O){throw T&&T(),O&&O.name==="TypeError"&&/Load failed|fetch/i.test(O.message)?Object.assign(new AxiosError$1("Network Error",AxiosError$1.ERR_NETWORK,r,A),{cause:O.cause||O}):AxiosError$1.from(O,O&&O.code,r,A)}}),knownAdapters={http:httpAdapter,xhr:xhrAdapter,fetch:fetchAdapter};utils$5.forEach(knownAdapters,(r,f)=>{if(r){try{Object.defineProperty(r,"name",{value:f})}catch{}Object.defineProperty(r,"adapterName",{value:f})}});const renderReason=r=>`- ${r}`,isResolvedHandle=r=>utils$5.isFunction(r)||r===null||r===!1,adapters={getAdapter:r=>{r=utils$5.isArray(r)?r:[r];const{length:f}=r;let d,m;const v={};for(let g=0;g<f;g++){d=r[g];let w;if(m=d,!isResolvedHandle(d)&&(m=knownAdapters[(w=String(d)).toLowerCase()],m===void 0))throw new AxiosError$1(`Unknown adapter '${w}'`);if(m)break;v[w||"#"+g]=m}if(!m){const g=Object.entries(v).map(([_,S])=>`adapter ${_} `+(S===!1?"is not supported by the environment":"is not available in the build"));let w=f?g.length>1?`since :
9
9
  `+g.map(renderReason).join(`
10
10
  `):" "+renderReason(g[0]):"as no adapter specified";throw new AxiosError$1("There is no suitable adapter to dispatch the request "+w,"ERR_NOT_SUPPORT")}return m},adapters:knownAdapters};function throwIfCancellationRequested(r){if(r.cancelToken&&r.cancelToken.throwIfRequested(),r.signal&&r.signal.aborted)throw new CanceledError$1(null,r)}function dispatchRequest(r){return throwIfCancellationRequested(r),r.headers=AxiosHeaders$1.from(r.headers),r.data=transformData.call(r,r.transformRequest),["post","put","patch"].indexOf(r.method)!==-1&&r.headers.setContentType("application/x-www-form-urlencoded",!1),adapters.getAdapter(r.adapter||defaults.adapter)(r).then(function(m){return throwIfCancellationRequested(r),m.data=transformData.call(r,r.transformResponse,m),m.headers=AxiosHeaders$1.from(m.headers),m},function(m){return isCancel$1(m)||(throwIfCancellationRequested(r),m&&m.response&&(m.response.data=transformData.call(r,r.transformResponse,m.response),m.response.headers=AxiosHeaders$1.from(m.response.headers))),Promise.reject(m)})}const VERSION$1="1.11.0",validators$1={};["object","boolean","number","function","string","symbol"].forEach((r,f)=>{validators$1[r]=function(m){return typeof m===r||"a"+(f<1?"n ":" ")+r}});const deprecatedWarnings={};validators$1.transitional=function(f,d,m){function v(g,w){return"[Axios v"+VERSION$1+"] Transitional option '"+g+"'"+w+(m?". "+m:"")}return(g,w,_)=>{if(f===!1)throw new AxiosError$1(v(w," has been removed"+(d?" in "+d:"")),AxiosError$1.ERR_DEPRECATED);return d&&!deprecatedWarnings[w]&&(deprecatedWarnings[w]=!0),f?f(g,w,_):!0}},validators$1.spelling=function(f){return(d,m)=>!0};function assertOptions(r,f,d){if(typeof r!="object")throw new AxiosError$1("options must be an object",AxiosError$1.ERR_BAD_OPTION_VALUE);const m=Object.keys(r);let v=m.length;for(;v-- >0;){const g=m[v],w=f[g];if(w){const _=r[g],S=_===void 0||w(_,g,r);if(S!==!0)throw new AxiosError$1("option "+g+" must be "+S,AxiosError$1.ERR_BAD_OPTION_VALUE);continue}if(d!==!0)throw new AxiosError$1("Unknown option "+g,AxiosError$1.ERR_BAD_OPTION)}}const validator={assertOptions,validators:validators$1},validators=validator.validators;let Axios$1=class{constructor(f){this.defaults=f||{},this.interceptors={request:new InterceptorManager,response:new InterceptorManager}}async request(f,d){try{return await this._request(f,d)}catch(m){if(m instanceof Error){let v={};Error.captureStackTrace?Error.captureStackTrace(v):v=new Error;const g=v.stack?v.stack.replace(/^.+\n/,""):"";try{m.stack?g&&!String(m.stack).endsWith(g.replace(/^.+\n.+\n/,""))&&(m.stack+=`
11
- `+g):m.stack=g}catch{}}throw m}}_request(f,d){typeof f=="string"?(d=d||{},d.url=f):d=f||{},d=mergeConfig$1(this.defaults,d);const{transitional:m,paramsSerializer:v,headers:g}=d;m!==void 0&&validator.assertOptions(m,{silentJSONParsing:validators.transitional(validators.boolean),forcedJSONParsing:validators.transitional(validators.boolean),clarifyTimeoutError:validators.transitional(validators.boolean)},!1),v!=null&&(utils$5.isFunction(v)?d.paramsSerializer={serialize:v}:validator.assertOptions(v,{encode:validators.function,serialize:validators.function},!0)),d.allowAbsoluteUrls!==void 0||(this.defaults.allowAbsoluteUrls!==void 0?d.allowAbsoluteUrls=this.defaults.allowAbsoluteUrls:d.allowAbsoluteUrls=!0),validator.assertOptions(d,{baseUrl:validators.spelling("baseURL"),withXsrfToken:validators.spelling("withXSRFToken")},!0),d.method=(d.method||this.defaults.method||"get").toLowerCase();let w=g&&utils$5.merge(g.common,g[d.method]);g&&utils$5.forEach(["delete","get","head","post","put","patch","common"],A=>{delete g[A]}),d.headers=AxiosHeaders$1.concat(w,g);const _=[];let S=!0;this.interceptors.request.forEach(function(T){typeof T.runWhen=="function"&&T.runWhen(d)===!1||(S=S&&T.synchronous,_.unshift(T.fulfilled,T.rejected))});const x=[];this.interceptors.response.forEach(function(T){x.push(T.fulfilled,T.rejected)});let b,C=0,E;if(!S){const A=[dispatchRequest.bind(this),void 0];for(A.unshift(..._),A.push(...x),E=A.length,b=Promise.resolve(d);C<E;)b=b.then(A[C++],A[C++]);return b}E=_.length;let M=d;for(C=0;C<E;){const A=_[C++],T=_[C++];try{M=A(M)}catch(L){T.call(this,L);break}}try{b=dispatchRequest.call(this,M)}catch(A){return Promise.reject(A)}for(C=0,E=x.length;C<E;)b=b.then(x[C++],x[C++]);return b}getUri(f){f=mergeConfig$1(this.defaults,f);const d=buildFullPath(f.baseURL,f.url,f.allowAbsoluteUrls);return buildURL(d,f.params,f.paramsSerializer)}};utils$5.forEach(["delete","get","head","options"],function(f){Axios$1.prototype[f]=function(d,m){return this.request(mergeConfig$1(m||{},{method:f,url:d,data:(m||{}).data}))}}),utils$5.forEach(["post","put","patch"],function(f){function d(m){return function(g,w,_){return this.request(mergeConfig$1(_||{},{method:f,headers:m?{"Content-Type":"multipart/form-data"}:{},url:g,data:w}))}}Axios$1.prototype[f]=d(),Axios$1.prototype[f+"Form"]=d(!0)});let CancelToken$1=class Gt{constructor(f){if(typeof f!="function")throw new TypeError("executor must be a function.");let d;this.promise=new Promise(function(g){d=g});const m=this;this.promise.then(v=>{if(!m._listeners)return;let g=m._listeners.length;for(;g-- >0;)m._listeners[g](v);m._listeners=null}),this.promise.then=v=>{let g;const w=new Promise(_=>{m.subscribe(_),g=_}).then(v);return w.cancel=function(){m.unsubscribe(g)},w},f(function(g,w,_){m.reason||(m.reason=new CanceledError$1(g,w,_),d(m.reason))})}throwIfRequested(){if(this.reason)throw this.reason}subscribe(f){if(this.reason){f(this.reason);return}this._listeners?this._listeners.push(f):this._listeners=[f]}unsubscribe(f){if(!this._listeners)return;const d=this._listeners.indexOf(f);d!==-1&&this._listeners.splice(d,1)}toAbortSignal(){const f=new AbortController,d=m=>{f.abort(m)};return this.subscribe(d),f.signal.unsubscribe=()=>this.unsubscribe(d),f.signal}static source(){let f;return{token:new Gt(function(v){f=v}),cancel:f}}};function spread$2(r){return function(d){return r.apply(null,d)}}function isAxiosError$1(r){return utils$5.isObject(r)&&r.isAxiosError===!0}const HttpStatusCode$1={Continue:100,SwitchingProtocols:101,Processing:102,EarlyHints:103,Ok:200,Created:201,Accepted:202,NonAuthoritativeInformation:203,NoContent:204,ResetContent:205,PartialContent:206,MultiStatus:207,AlreadyReported:208,ImUsed:226,MultipleChoices:300,MovedPermanently:301,Found:302,SeeOther:303,NotModified:304,UseProxy:305,Unused:306,TemporaryRedirect:307,PermanentRedirect:308,BadRequest:400,Unauthorized:401,PaymentRequired:402,Forbidden:403,NotFound:404,MethodNotAllowed:405,NotAcceptable:406,ProxyAuthenticationRequired:407,RequestTimeout:408,Conflict:409,Gone:410,LengthRequired:411,PreconditionFailed:412,PayloadTooLarge:413,UriTooLong:414,UnsupportedMediaType:415,RangeNotSatisfiable:416,ExpectationFailed:417,ImATeapot:418,MisdirectedRequest:421,UnprocessableEntity:422,Locked:423,FailedDependency:424,TooEarly:425,UpgradeRequired:426,PreconditionRequired:428,TooManyRequests:429,RequestHeaderFieldsTooLarge:431,UnavailableForLegalReasons:451,InternalServerError:500,NotImplemented:501,BadGateway:502,ServiceUnavailable:503,GatewayTimeout:504,HttpVersionNotSupported:505,VariantAlsoNegotiates:506,InsufficientStorage:507,LoopDetected:508,NotExtended:510,NetworkAuthenticationRequired:511};Object.entries(HttpStatusCode$1).forEach(([r,f])=>{HttpStatusCode$1[f]=r});function createInstance(r){const f=new Axios$1(r),d=bind(Axios$1.prototype.request,f);return utils$5.extend(d,Axios$1.prototype,f,{allOwnKeys:!0}),utils$5.extend(d,f,null,{allOwnKeys:!0}),d.create=function(v){return createInstance(mergeConfig$1(r,v))},d}const axios=createInstance(defaults);axios.Axios=Axios$1,axios.CanceledError=CanceledError$1,axios.CancelToken=CancelToken$1,axios.isCancel=isCancel$1,axios.VERSION=VERSION$1,axios.toFormData=toFormData$1,axios.AxiosError=AxiosError$1,axios.Cancel=axios.CanceledError,axios.all=function(f){return Promise.all(f)},axios.spread=spread$2,axios.isAxiosError=isAxiosError$1,axios.mergeConfig=mergeConfig$1,axios.AxiosHeaders=AxiosHeaders$1,axios.formToJSON=r=>formDataToJSON(utils$5.isHTMLForm(r)?new FormData(r):r),axios.getAdapter=adapters.getAdapter,axios.HttpStatusCode=HttpStatusCode$1,axios.default=axios;const{Axios,AxiosError,CanceledError,isCancel,CancelToken,VERSION,all,Cancel,isAxiosError,spread:spread$1,toFormData,AxiosHeaders,HttpStatusCode,formToJSON,getAdapter,mergeConfig}=axios,TEST_BASE_URL="https://miniapptest-spinfi.xy1212.com";class HttpClient{constructor(f){this.options=f;const d=f.baseURL;this.instance=axios.create({baseURL:d,timeout:3e4}),this.instance.interceptors.request.use(m=>{const v=this.options.getToken();if(v){m.headers=m.headers||{};const w=`Bearer ${v}`;m.headers.Authorization=w}const g=this.options.getAppId?this.options.getAppId():null;return g&&(m.headers=m.headers||{},m.headers["hm-app-id"]=String(g)),m}),this.instance.interceptors.response.use(m=>m,m=>(m.response&&m.response.status===401&&this.options.onAuthError&&this.options.onAuthError(),Promise.reject(m)))}request(f){return this.instance.request(f)}get(f,d){return this.instance.get(f,d)}post(f,d,m){return this.instance.post(f,d,m)}}class NamespacedStorage{constructor(f="tg_tracking_sdk"){this.prefix=f}k(f){return`${this.prefix}:${f}`}set(f,d){try{localStorage.setItem(this.k(f),JSON.stringify(d))}catch{}}get(f){try{const d=localStorage.getItem(this.k(f));return d?JSON.parse(d):null}catch{return null}}remove(f){try{localStorage.removeItem(this.k(f))}catch{}}}class APIService{constructor(f){this.http=f}auth(f){return this.http.post("/api/user/auth",f).then(d=>d.data)}getAdPositionConfig(f){return this.http.post("/api/ad/adPositionDisplayAd",{adPositionName:f}).then(d=>d.data)}createAd(f){return this.http.post("/api/v2/ad/create",f).then(d=>d.data)}adMonitor(f){return this.http.get("/api/v2/ad/monitor",{params:f}).then(d=>d.data)}bindWalletReq(f){return this.http.post("/api/user/bindWallet",f).then(d=>d.data)}merchantPayModeList(){return this.http.get("/api/v2/merchant/pay/modeList").then(f=>f.data)}merchantPayCreate(f){return this.http.post("/api/v2/merchant/pay/create",f).then(d=>d.data)}merchantPayFinish(f){return this.http.post("/api/v2/merchant/pay/finish",f).then(d=>d.data)}merchantPayQueryResult(f){return this.http.post("/api/v2/merchant/pay/queryResult",f).then(d=>d.data)}merchantPayNotify(f){return this.http.post("/api/v2/merchant/pay/notify",f).then(d=>d.data)}}class HmAdManager{constructor(f={}){this.options=f,this.initialized=!1}async init(){this.initialized||(this.options.autoInjectScript!==!1&&this.sdkZone&&this.sdkFunc&&await this.ensureScriptInjected(),this.initialized=!0)}async setSpace(f){if(!f)return;const d=String(f),m=`show_${f}`,v=this.sdkZone!==d||this.sdkFunc!==m;this.sdkZone=d,this.sdkFunc=m,this.options.autoInjectScript!==!1&&await this.ensureScriptInjected(v)}findExistingScript(){return typeof document>"u"?null:document.querySelector("script[src*='//libtl.com/sdk.js']")}async ensureScriptInjected(f=!1){var g;if(typeof document>"u")return;const d=this.findExistingScript(),m=this.sdkZone||"",v=this.sdkFunc||"";if(d){const w=d.getAttribute("data-zone")||"",_=d.getAttribute("data-sdk")||"";if(w===m&&_===v&&!f)return;(g=d.parentElement)==null||g.removeChild(d)}!m||!v||await this.injectScript(m,v)}injectScript(f,d){return new Promise((m,v)=>{if(typeof document>"u")return m();const g=document.createElement("script");g.src="//libtl.com/sdk.js",g.setAttribute("data-zone",f),g.setAttribute("data-sdk",d),g.async=!0,g.onload=()=>m(),g.onerror=()=>v(new Error("Hm 脚本加载失败")),document.head.appendChild(g)})}async callSDK(f){if(!this.sdkFunc)throw new Error("Hm 未设置 spaceId");const d=window[this.sdkFunc];if(typeof d!="function")throw new Error("Hm SDK 未正确加载");await d(f)}async show(){try{await this.callSDK()}catch(f){throw f}}async showPopup(){try{await this.callSDK("pop")}catch(f){throw f}}async showInApp(f){try{await this.callSDK({type:"inApp",inAppSettings:f})}catch(d){throw d}}}class AdMonitor{constructor(f){this.getMonitor=f}extractParamsFromUrl(f){if(!f)return null;try{return{param:new URL(f).searchParams.get("param")||""}}catch{return null}}async send(f,d){if(!f)return;const m=Array.isArray(f)?f:[f];if(m.length===0)return;const v=m[0],g=this.extractParamsFromUrl(v);let w;if(g&&this.getMonitor)try{const _=Math.floor(Date.now()/1e3).toString(),S=CryptoJS.MD5(d+_).toString(),x={param:g.param,request_code:S,timestamp:_};w=await this.getMonitor(x)}catch{}return await Promise.allSettled(m.slice(1).map(_=>{try{return fetch(_,{method:"GET"})}catch{return Promise.resolve()}})),w}}var commonjsGlobal=typeof globalThis<"u"?globalThis:typeof window<"u"?window:typeof global<"u"?global:typeof self<"u"?self:{};function getDefaultExportFromCjs(r){return r&&r.__esModule&&Object.prototype.hasOwnProperty.call(r,"default")?r.default:r}var dist$1={},sdk={},telegramWebApps={},hasRequiredTelegramWebApps;function requireTelegramWebApps(){return hasRequiredTelegramWebApps||(hasRequiredTelegramWebApps=1,(function(){var r={},f="";try{f=location.hash.toString()}catch{}var d=S(f),m=O("initParams");if(m)for(var v in m)typeof d[v]>"u"&&(d[v]=m[v]);L("initParams",d);var g=!1,w;try{if(g=window.parent!=null&&window!=window.parent,g){window.addEventListener("message",function(N){if(N.source===window.parent){try{var H=JSON.parse(N.data)}catch{return}if(!(!H||!H.eventType))if(H.eventType=="set_custom_style")N.origin==="https://web.telegram.org"&&(w.innerHTML=H.eventData);else if(H.eventType=="reload_iframe"){try{window.parent.postMessage(JSON.stringify({eventType:"iframe_will_reload"}),"*")}catch{}location.reload()}else E(H.eventType,H.eventData)}}),w=document.createElement("style"),document.head.appendChild(w);try{window.parent.postMessage(JSON.stringify({eventType:"iframe_ready",eventData:{reload_supported:!0}}),"*")}catch{}}}catch{}function _(N){try{return N=N.replace(/\+/g,"%20"),decodeURIComponent(N)}catch{return N}}function S(N){N=N.replace(/^#/,"");var H={};if(!N.length)return H;if(N.indexOf("=")<0&&N.indexOf("?")<0)return H._path=_(N),H;var V=N.indexOf("?");if(V>=0){var X=N.substr(0,V);H._path=_(X),N=N.substr(V+1)}var oe=x(N);for(var se in oe)H[se]=oe[se];return H}function x(N){var H={};if(!N.length)return H;var V=N.split("&"),X,oe,se,de;for(X=0;X<V.length;X++)oe=V[X].split("="),se=_(oe[0]),de=oe[1]==null?null:_(oe[1]),H[se]=de;return H}function b(N,H){var V=N.indexOf("#");if(V<0)return N+"#"+H;var X=N.substr(V+1);return X.indexOf("=")>=0||X.indexOf("?")>=0?N+"&"+H:X.length>0?N+"?"+H:N+H}function C(N,H,V){if(H||(H=function(){}),V===void 0&&(V=""),window.TelegramWebviewProxy!==void 0)TelegramWebviewProxy.postEvent(N,JSON.stringify(V)),H();else if(window.external&&"notify"in window.external)window.external.notify(JSON.stringify({eventType:N,eventData:V})),H();else if(g)try{var X="https://web.telegram.org";X="*",window.parent.postMessage(JSON.stringify({eventType:N,eventData:V}),X),H()}catch(oe){H(oe)}else H({notAvailable:!0})}function E(N,H){M(N,function(V){V(N,H)})}function M(N,H){var V=r[N];if(!(V===void 0||!V.length))for(var X=0;X<V.length;X++)try{H(V[X])}catch{}}function A(N,H){r[N]===void 0&&(r[N]=[]);var V=r[N].indexOf(H);V===-1&&r[N].push(H)}function T(N,H){if(r[N]!==void 0){var V=r[N].indexOf(H);V!==-1&&r[N].splice(V,1)}}function L(N,H){try{return window.sessionStorage.setItem("__telegram__"+N,JSON.stringify(H)),!0}catch{}return!1}function O(N){try{return JSON.parse(window.sessionStorage.getItem("__telegram__"+N))}catch{}return null}window.Telegram||(window.Telegram={}),window.Telegram.WebView={initParams:d,isIframe:g,onEvent:A,offEvent:T,postEvent:C,receiveEvent:E,callEventCallbacks:M},window.Telegram.Utils={urlSafeDecode:_,urlParseQueryString:x,urlParseHashParams:S,urlAppendHashParams:b,sessionStorageSet:L,sessionStorageGet:O},window.TelegramGameProxy_receiveEvent=E,window.TelegramGameProxy={receiveEvent:E}})(),(function(){var r=window.Telegram.Utils,f=window.Telegram.WebView,d=f.initParams,m=f.isIframe,v={},g="",w={},_={},S="light",x="6.0",b="unknown";if(d.tgWebAppData&&d.tgWebAppData.length){g=d.tgWebAppData,w=r.urlParseQueryString(g);for(var C in w){var E=w[C];try{(E.substr(0,1)=="{"&&E.substr(-1)=="}"||E.substr(0,1)=="["&&E.substr(-1)=="]")&&(w[C]=JSON.parse(E))}catch{}}}if(d.tgWebAppThemeParams&&d.tgWebAppThemeParams.length){var M=d.tgWebAppThemeParams;try{var A=JSON.parse(M);A&&he(A)}catch{}}var A=r.sessionStorageGet("themeParams");A&&he(A),d.tgWebAppVersion&&(x=d.tgWebAppVersion),d.tgWebAppPlatform&&(b=d.tgWebAppPlatform);function T(fe,U){U.theme_params&&(he(U.theme_params),window.Telegram.WebApp.MainButton.setParams({}),window.Telegram.WebApp.SecondaryButton.setParams({}),me(),ae(),Oe(),X("themeChanged"))}var L=window.innerHeight;function O(fe,U){U.height&&(window.removeEventListener("resize",N),B(U))}function N(fe){L!=window.innerHeight&&(L=window.innerHeight,X("viewportChanged",{isStateStable:!0}))}function H(fe){if(!(fe.metaKey||fe.ctrlKey)){for(var U=fe.target;U.tagName!="A"&&U.parentNode;)U=U.parentNode;U.tagName=="A"&&U.target!="_blank"&&(U.protocol=="http:"||U.protocol=="https:")&&U.hostname=="t.me"&&(v.openTgLink(U.href),fe.preventDefault())}}function V(fe){return fe.toString().replace(/^\s+|\s+$/g,"")}function X(fe){var U=Array.prototype.slice.call(arguments);fe=U.shift(),f.callEventCallbacks("webview:"+fe,function(G){G.apply(v,U)})}function oe(fe,U){f.onEvent("webview:"+fe,U)}function se(fe,U){f.offEvent("webview:"+fe,U)}function de(fe,U){var G=document.documentElement;G&&G.style&&G.style.setProperty&&G.style.setProperty("--tg-"+fe,U)}function he(fe){fe.bg_color=="#1c1c1d"&&fe.bg_color==fe.secondary_bg_color&&(fe.secondary_bg_color="#2c2c2e");var U;for(var G in fe)(U=Ue(fe[G]))&&(_[G]=U,G=="bg_color"&&(S=De(U)?"dark":"light",de("color-scheme",S)),G="theme-"+G.split("_").join("-"),de(G,U));r.sessionStorageSet("themeParams",_)}var we={};function te(fe){for(var U=100;--U;){for(var G="",re="abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ0123456789",K=re.length,ue=0;ue<fe;ue++)G+=re[Math.floor(Math.random()*K)];if(!we[G])return we[G]={},G}throw Error("WebAppCallbackIdGenerateFailed")}var k=!1,q=!1,y=!0;function B(fe){typeof fe<"u"&&(y=!!fe.is_expanded,k=fe.height,fe.is_state_stable&&(q=fe.height),X("viewportChanged",{isStateStable:!!fe.is_state_stable}));var U,G;k!==!1?U=k-ut+"px":U=ut?"calc(100vh - "+ut+"px)":"100vh",q!==!1?G=q-ut+"px":G=ut?"calc(100vh - "+ut+"px)":"100vh",de("viewport-height",U),de("viewport-stable-height",G)}var $=!1;function I(fe){je("6.2")&&($=!!fe,f.postEvent("web_app_setup_closing_behavior",!1,{need_confirmation:$}))}var F=!0;function j(fe){je("7.7")&&(F=!!fe,f.postEvent("web_app_setup_swipe_behavior",!1,{allow_vertical_swipe:F}))}var D="bg_color",W=null;function R(){return D=="secondary_bg_color"?_.secondary_bg_color:D=="bg_color"?_.bg_color:W}function z(fe){if(je("6.1")){je("6.9")||(_.bg_color&&_.bg_color==fe?fe="bg_color":_.secondary_bg_color&&_.secondary_bg_color==fe&&(fe="secondary_bg_color"));var U=null,G=null;if(fe=="bg_color"||fe=="secondary_bg_color")G=fe;else if(je("6.9")&&(U=Ue(fe),!U))throw Error("WebAppHeaderColorInvalid");if(!je("6.9")&&G!="bg_color"&&G!="secondary_bg_color")throw Error("WebAppHeaderColorKeyInvalid");D=G,W=U,me()}}var ye=null,Ce=null;function me(){(ye!=D||Ce!=W)&&(ye=D,Ce=W,Ce?f.postEvent("web_app_set_header_color",!1,{color:W}):f.postEvent("web_app_set_header_color",!1,{color_key:D}))}var ie="bg_color";function ee(){return ie=="secondary_bg_color"?_.secondary_bg_color:ie=="bg_color"?_.bg_color:ie}function pe(fe){if(je("6.1")){var U;if(fe=="bg_color"||fe=="secondary_bg_color")U=fe;else if(U=Ue(fe),!U)throw Error("WebAppBackgroundColorInvalid");ie=U,ae()}}var be=null;function ae(){var fe=ee();be!=fe&&(be=fe,f.postEvent("web_app_set_background_color",!1,{color:fe}))}var ne="bottom_bar_bg_color";function Se(){return ne=="bottom_bar_bg_color"?_.bottom_bar_bg_color||_.secondary_bg_color||"#ffffff":ne=="secondary_bg_color"?_.secondary_bg_color:ne=="bg_color"?_.bg_color:ne}function qe(fe){if(je("7.10")){var U;if(fe=="bg_color"||fe=="secondary_bg_color"||fe=="bottom_bar_bg_color")U=fe;else if(U=Ue(fe),!U)throw Error("WebAppBottomBarColorInvalid");ne=U,Oe(),window.Telegram.WebApp.SecondaryButton.setParams({})}}var Ie=null;function Oe(){var fe=Se();Ie!=fe&&(Ie=fe,f.postEvent("web_app_set_bottom_bar_color",!1,{color:fe})),d.tgWebAppDebug&&bt()}function Ue(fe){fe+="";var U;if(U=/^\s*#([0-9a-f]{6})\s*$/i.exec(fe))return"#"+U[1].toLowerCase();if(U=/^\s*#([0-9a-f])([0-9a-f])([0-9a-f])\s*$/i.exec(fe))return("#"+U[1]+U[1]+U[2]+U[2]+U[3]+U[3]).toLowerCase();if(U=/^\s*rgba?\((\d+),\s*(\d+),\s*(\d+)(?:,\s*(\d+\.{0,1}\d*))?\)\s*$/.exec(fe)){var G=parseInt(U[1]),re=parseInt(U[2]),K=parseInt(U[3]);return G=(G<16?"0":"")+G.toString(16),re=(re<16?"0":"")+re.toString(16),K=(K<16?"0":"")+K.toString(16),"#"+G+re+K}return!1}function De(fe){fe=fe.replace(/[\s#]/g,""),fe.length==3&&(fe=fe[0]+fe[0]+fe[1]+fe[1]+fe[2]+fe[2]);var U=parseInt(fe.substr(0,2),16),G=parseInt(fe.substr(2,2),16),re=parseInt(fe.substr(4,2),16),K=Math.sqrt(.299*(U*U)+.587*(G*G)+.114*(re*re));return K<120}function $e(fe,U){typeof fe!="string"&&(fe=""),typeof U!="string"&&(U=""),fe=fe.replace(/^\s+|\s+$/g,"").split("."),U=U.replace(/^\s+|\s+$/g,"").split(".");var G=Math.max(fe.length,U.length),re,K,ue;for(re=0;re<G;re++)if(K=parseInt(fe[re])||0,ue=parseInt(U[re])||0,K!=ue)return K>ue?1:-1;return 0}function je(fe){return $e(x,fe)>=0}function Ye(fe){if(window.Blob)try{return new Blob([fe]).size}catch{}for(var U=fe.length,G=fe.length-1;G>=0;G--){var re=fe.charCodeAt(G);re>127&&re<=2047?U++:re>2047&&re<=65535&&(U+=2),re>=56320&&re<=57343&&G--}return U}var st=(function(){var fe=!1,U={};Object.defineProperty(U,"isVisible",{set:function(Pe){Te({is_visible:Pe})},get:function(){return fe},enumerable:!0});var G=null;f.onEvent("back_button_pressed",re);function re(){X("backButtonClicked")}function K(){return{is_visible:fe}}function ue(Pe){return typeof Pe>"u"&&(Pe=K()),JSON.stringify(Pe)}function Ae(){return!!je("6.1")}function xe(){var Pe=K(),Fe=ue(Pe);G!==Fe&&(G=Fe,f.postEvent("web_app_setup_back_button",!1,Pe))}function Te(Pe){return Ae()&&(typeof Pe.is_visible<"u"&&(fe=!!Pe.is_visible),xe()),U}return U.onClick=function(Pe){return Ae()&&oe("backButtonClicked",Pe),U},U.offClick=function(Pe){return Ae()&&se("backButtonClicked",Pe),U},U.show=function(){return Te({is_visible:!0})},U.hide=function(){return Te({is_visible:!1})},U})(),Je=null,Ge={},ut=0;if(d.tgWebAppDebug){Je=document.createElement("tg-bottom-bar");var gt={display:"flex",gap:"7px",font:"600 14px/18px sans-serif",width:"100%",background:Se(),position:"fixed",left:"0",right:"0",bottom:"0",margin:"0",padding:"7px",textAlign:"center",boxSizing:"border-box",zIndex:"10000"};for(var rt in gt)Je.style[rt]=gt[rt];document.addEventListener("DOMContentLoaded",function fe(U){document.removeEventListener("DOMContentLoaded",fe),document.body.appendChild(Je)});var wt=document.createElement("style");wt.innerHTML='tg-bottom-button.shine { position: relative; overflow: hidden; } tg-bottom-button.shine:before { content:""; position: absolute; top: 0; width: 100%; height: 100%; background: linear-gradient(120deg, transparent, rgba(255, 255, 255, .2), transparent); animation: tg-bottom-button-shine 5s ease-in-out infinite; } @-webkit-keyframes tg-bottom-button-shine { 0% {left: -100%;} 12%,100% {left: 100%}} @keyframes tg-bottom-button-shine { 0% {left: -100%;} 12%,100% {left: 100%}}',Je.appendChild(wt)}function bt(){var fe=Ge.main._bottomButton,U=Ge.secondary._bottomButton;fe.isVisible||U.isVisible?(Je.style.display="flex",ut=58,fe.isVisible&&U.isVisible&&(U.position=="top"?(Je.style.flexDirection="column-reverse",ut+=51):U.position=="bottom"?(Je.style.flexDirection="column",ut+=51):U.position=="left"?Je.style.flexDirection="row-reverse":U.position=="right"&&(Je.style.flexDirection="row"))):(Je.style.display="none",ut=0),Je.style.background=Se(),document.documentElement&&(document.documentElement.style.boxSizing="border-box",document.documentElement.style.paddingBottom=ut+"px"),B()}var le=function(fe){var U=fe=="main";if(U)var G="web_app_setup_main_button",re="main_button_pressed",K="mainButtonClicked",ue="Continue",Ae=function(){return _.button_color||"#2481cc"},xe=function(){return _.button_text_color||"#ffffff"};else var G="web_app_setup_secondary_button",re="secondary_button_pressed",K="secondaryButtonClicked",ue="Cancel",Ae=function(){return Se()},xe=function(){return _.button_color||"#2481cc"};var Te=!1,Pe=!0,Fe=!1,Ne=!1,At=fe,ot=ue,yt=!1,vt=!1,xt="left",Ve={};Object.defineProperty(Ve,"type",{get:function(){return At},enumerable:!0}),Object.defineProperty(Ve,"text",{set:function(Be){Ve.setParams({text:Be})},get:function(){return ot},enumerable:!0}),Object.defineProperty(Ve,"color",{set:function(Be){Ve.setParams({color:Be})},get:function(){return yt||Ae()},enumerable:!0}),Object.defineProperty(Ve,"textColor",{set:function(Be){Ve.setParams({text_color:Be})},get:function(){return vt||xe()},enumerable:!0}),Object.defineProperty(Ve,"isVisible",{set:function(Be){Ve.setParams({is_visible:Be})},get:function(){return Te},enumerable:!0}),Object.defineProperty(Ve,"isProgressVisible",{get:function(){return Ne},enumerable:!0}),Object.defineProperty(Ve,"isActive",{set:function(Be){Ve.setParams({is_active:Be})},get:function(){return Pe},enumerable:!0}),Object.defineProperty(Ve,"hasShineEffect",{set:function(Be){Ve.setParams({has_shine_effect:Be})},get:function(){return Fe},enumerable:!0}),U||Object.defineProperty(Ve,"position",{set:function(Be){Ve.setParams({position:Be})},get:function(){return xt},enumerable:!0});var ft=null;f.onEvent(re,pt);var et=null;if(d.tgWebAppDebug){et=document.createElement("tg-bottom-button");var ht={display:"none",width:"100%",height:"44px",borderRadius:"0",background:"no-repeat right center",padding:"13px 15px",textAlign:"center",boxSizing:"border-box"};for(var it in ht)et.style[it]=ht[it];Je.appendChild(et),et.addEventListener("click",pt,!1),et._bottomButton=Ve,Ge[fe]=et}function pt(){Pe&&X(K)}function at(){var Be=Ve.color,Ke=Ve.textColor;if(Te){var We={is_visible:!0,is_active:Pe,is_progress_visible:Ne,text:ot,color:Be,text_color:Ke,has_shine_effect:Fe&&Pe&&!Ne};U||(We.position=xt)}else var We={is_visible:!1};return We}function ct(Be){return typeof Be>"u"&&(Be=at()),JSON.stringify(Be)}function dt(){var Be=at(),Ke=ct(Be);ft!==Ke&&(ft=Ke,f.postEvent(G,!1,Be),d.tgWebAppDebug&&nt(Be))}function nt(Be){Be.is_visible?(et.style.display="block",et.style.opacity=Be.is_active?"1":"0.8",et.style.cursor=Be.is_active?"pointer":"auto",et.disabled=!Be.is_active,et.innerText=Be.text,et.className=Be.has_shine_effect?"shine":"",et.style.backgroundImage=Be.is_progress_visible?"url('data:image/svg+xml,"+encodeURIComponent('<svg xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink" viewport="0 0 48 48" width="48px" height="48px"><circle cx="50%" cy="50%" stroke="'+Be.text_color+'" stroke-width="2.25" stroke-linecap="round" fill="none" stroke-dashoffset="106" r="9" stroke-dasharray="56.52" rotate="-90"><animate attributeName="stroke-dashoffset" attributeType="XML" dur="360s" from="0" to="12500" repeatCount="indefinite"></animate><animateTransform attributeName="transform" attributeType="XML" type="rotate" dur="1s" from="-90 24 24" to="630 24 24" repeatCount="indefinite"></animateTransform></circle></svg>')+"')":"none",et.style.backgroundColor=Be.color,et.style.color=Be.text_color):et.style.display="none",bt()}function Le(Be){if(typeof Be.text<"u"){var Ke=V(Be.text);if(!Ke.length||Ke.length>64)throw Error("WebAppBottomButtonParamInvalid");ot=Ke}if(typeof Be.color<"u")if(Be.color===!1||Be.color===null)yt=!1;else{var We=Ue(Be.color);if(!We)throw Error("WebAppBottomButtonParamInvalid");yt=We}if(typeof Be.text_color<"u")if(Be.text_color===!1||Be.text_color===null)vt=!1;else{var ze=Ue(Be.text_color);if(!ze)throw Error("WebAppBottomButtonParamInvalid");vt=ze}if(typeof Be.is_visible<"u"){if(Be.is_visible&&!Ve.text.length)throw Error("WebAppBottomButtonParamInvalid");Te=!!Be.is_visible}if(typeof Be.has_shine_effect<"u"&&(Fe=!!Be.has_shine_effect),!U&&typeof Be.position<"u"){if(Be.position!="left"&&Be.position!="right"&&Be.position!="top"&&Be.position!="bottom")throw Error("WebAppBottomButtonParamInvalid");xt=Be.position}return typeof Be.is_active<"u"&&(Pe=!!Be.is_active),dt(),Ve}return Ve.setText=function(Be){return Ve.setParams({text:Be})},Ve.onClick=function(Be){return oe(K,Be),Ve},Ve.offClick=function(Be){return se(K,Be),Ve},Ve.show=function(){return Ve.setParams({is_visible:!0})},Ve.hide=function(){return Ve.setParams({is_visible:!1})},Ve.enable=function(){return Ve.setParams({is_active:!0})},Ve.disable=function(){return Ve.setParams({is_active:!1})},Ve.showProgress=function(Be){return Pe=!!Be,Ne=!0,dt(),Ve},Ve.hideProgress=function(){return Ve.isActive||(Pe=!0),Ne=!1,dt(),Ve},Ve.setParams=Le,Ve},Z=le("main"),J=le("secondary"),ge=(function(){var fe=!1,U={};Object.defineProperty(U,"isVisible",{set:function(Pe){Te({is_visible:Pe})},get:function(){return fe},enumerable:!0});var G=null;f.onEvent("settings_button_pressed",re);function re(){X("settingsButtonClicked")}function K(){return{is_visible:fe}}function ue(Pe){return typeof Pe>"u"&&(Pe=K()),JSON.stringify(Pe)}function Ae(){return!!je("6.10")}function xe(){var Pe=K(),Fe=ue(Pe);G!==Fe&&(G=Fe,f.postEvent("web_app_setup_settings_button",!1,Pe))}function Te(Pe){return Ae()&&(typeof Pe.is_visible<"u"&&(fe=!!Pe.is_visible),xe()),U}return U.onClick=function(Pe){return Ae()&&oe("settingsButtonClicked",Pe),U},U.offClick=function(Pe){return Ae()&&se("settingsButtonClicked",Pe),U},U.show=function(){return Te({is_visible:!0})},U.hide=function(){return Te({is_visible:!1})},U})(),Ee=(function(){var fe={};function U(G){if(!je("6.1"))return fe;if(G.type=="impact"){if(G.impact_style!="light"&&G.impact_style!="medium"&&G.impact_style!="heavy"&&G.impact_style!="rigid"&&G.impact_style!="soft")throw Error("WebAppHapticImpactStyleInvalid")}else if(G.type=="notification"){if(G.notification_type!="error"&&G.notification_type!="success"&&G.notification_type!="warning")throw Error("WebAppHapticNotificationTypeInvalid")}else if(G.type!="selection_change")throw Error("WebAppHapticFeedbackTypeInvalid");return f.postEvent("web_app_trigger_haptic_feedback",!1,G),fe}return fe.impactOccurred=function(G){return U({type:"impact",impact_style:G})},fe.notificationOccurred=function(G){return U({type:"notification",notification_type:G})},fe.selectionChanged=function(){return U({type:"selection_change"})},fe})(),Re=(function(){var fe={};function U(G,re,K){if(!je("6.9"))throw Error("WebAppMethodUnsupported");return ve(G,re,K),fe}return fe.setItem=function(G,re,K){return U("saveStorageValue",{key:G,value:re},K)},fe.getItem=function(G,re){return fe.getItems([G],re?function(K,ue){K?re(K):re(null,ue[G])}:null)},fe.getItems=function(G,re){return U("getStorageValues",{keys:G},re)},fe.removeItem=function(G,re){return fe.removeItems([G],re)},fe.removeItems=function(G,re){return U("deleteStorageValues",{keys:G},re)},fe.getKeys=function(G){return U("getStorageKeys",{},G)},fe})(),ke=(function(){var fe=!1,U=!1,G="unknown",re=!1,K=!1,ue=!1,Ae="",xe={};Object.defineProperty(xe,"isInited",{get:function(){return fe},enumerable:!0}),Object.defineProperty(xe,"isBiometricAvailable",{get:function(){return fe&&U},enumerable:!0}),Object.defineProperty(xe,"biometricType",{get:function(){return G||"unknown"},enumerable:!0}),Object.defineProperty(xe,"isAccessRequested",{get:function(){return re},enumerable:!0}),Object.defineProperty(xe,"isAccessGranted",{get:function(){return re&&K},enumerable:!0}),Object.defineProperty(xe,"isBiometricTokenSaved",{get:function(){return ue},enumerable:!0}),Object.defineProperty(xe,"deviceId",{get:function(){return Ae||""},enumerable:!0});var Te={callbacks:[]},Pe=!1,Fe=!1,Ne=!1;f.onEvent("biometry_info_received",At),f.onEvent("biometry_auth_requested",ot),f.onEvent("biometry_token_updated",yt);function At(Ve,ft){if(fe=!0,ft.available?(U=!0,G=ft.type||"unknown",ft.access_requested?(re=!0,K=!!ft.access_granted,ue=!!ft.token_saved):(re=!1,K=!1,ue=!1)):(U=!1,G="unknown",re=!1,K=!1,ue=!1),Ae=ft.device_id||"",Te.callbacks.length>0)for(var et=0;et<Te.callbacks.length;et++){var ht=Te.callbacks[et];ht()}if(Pe){var it=Pe;Pe=!1,it.callback&&it.callback(K)}X("biometricManagerUpdated")}function ot(Ve,ft){var et=ft.status=="authorized",ht=ft.token||"";if(Fe){var it=Fe;Fe=!1,it.callback&&it.callback(et,et?ht:null)}X("biometricAuthRequested",et?{isAuthenticated:!0,biometricToken:ht}:{isAuthenticated:!1})}function yt(Ve,ft){var et=!1;if(U&&re&&(ft.status=="updated"?(ue=!0,et=!0):ft.status=="removed"&&(ue=!1,et=!0)),Ne){var ht=Ne;Ne=!1,ht.callback&&ht.callback(et)}X("biometricTokenUpdated",{isUpdated:et})}function vt(){return!!je("7.2")}function xt(){if(!fe)throw Error("WebAppBiometricManagerNotInited");return!0}return xe.init=function(Ve){return!vt()||fe||(Ve&&Te.callbacks.push(Ve),f.postEvent("web_app_biometry_get_info",!1)),xe},xe.requestAccess=function(Ve,ft){if(!vt())return xe;if(xt(),!U)throw Error("WebAppBiometricManagerBiometricsNotAvailable");if(Pe)throw Error("WebAppBiometricManagerAccessRequested");var et={};if(typeof Ve.reason<"u"){var ht=V(Ve.reason);if(ht.length>128)throw Error("WebAppBiometricRequestAccessParamInvalid");ht.length>0&&(et.reason=ht)}return Pe={callback:ft},f.postEvent("web_app_biometry_request_access",!1,et),xe},xe.authenticate=function(Ve,ft){if(!vt())return xe;if(xt(),!U)throw Error("WebAppBiometricManagerBiometricsNotAvailable");if(!K)throw Error("WebAppBiometricManagerBiometricAccessNotGranted");if(Fe)throw Error("WebAppBiometricManagerAuthenticationRequested");var et={};if(typeof Ve.reason<"u"){var ht=V(Ve.reason);if(ht.length>128)throw Error("WebAppBiometricRequestAccessParamInvalid");ht.length>0&&(et.reason=ht)}return Fe={callback:ft},f.postEvent("web_app_biometry_request_auth",!1,et),xe},xe.updateBiometricToken=function(Ve,ft){if(!vt())return xe;if(Ve=Ve||"",Ve.length>1024)throw Error("WebAppBiometricManagerTokenInvalid");if(xt(),!U)throw Error("WebAppBiometricManagerBiometricsNotAvailable");if(!K)throw Error("WebAppBiometricManagerBiometricAccessNotGranted");if(Ne)throw Error("WebAppBiometricManagerTokenUpdateRequested");return Ne={callback:ft},f.postEvent("web_app_biometry_update_token",!1,{token:Ve}),xe},xe.openSettings=function(){if(!vt())return xe;if(xt(),!U)throw Error("WebAppBiometricManagerBiometricsNotAvailable");if(!re)throw Error("WebAppBiometricManagerBiometricsAccessNotRequested");return K||f.postEvent("web_app_biometry_open_settings",!1),xe},xe})(),Xe={};function He(fe,U){if(U.slug&&Xe[U.slug]){var G=Xe[U.slug];delete Xe[U.slug],G.callback&&G.callback(U.status),X("invoiceClosed",{url:G.url,status:U.status})}}var Ze=!1;function _t(fe,U){if(Ze){var G=Ze;Ze=!1;var re=null;typeof U.button_id<"u"&&(re=U.button_id),G.callback&&G.callback(re),X("popupClosed",{button_id:re})}}var tt=!1;function mt(fe,U){if(tt){var G=tt,re=null;typeof U.data<"u"&&(re=U.data),G.callback&&G.callback(re)&&(tt=!1,f.postEvent("web_app_close_scan_qr_popup",!1)),X("qrTextReceived",{data:re})}}function Tt(fe,U){tt=!1,X("scanQrPopupClosed")}function St(fe,U){if(U.req_id&&we[U.req_id]){var G=we[U.req_id];delete we[U.req_id];var re=null;typeof U.data<"u"&&(re=U.data),G.callback&&G.callback(re),X("clipboardTextReceived",{data:re})}}var lt=!1;function Mt(fe,U){if(lt){var G=lt;lt=!1,G.callback&&G.callback(U.status=="allowed"),X("writeAccessRequested",{status:U.status})}}function Ct(fe,U){var G,re,K=0,ue=function(){ve("getRequestedContact",{},function(xe,Te){Te&&Te.length?(clearTimeout(re),fe(Te)):(K+=50,G=setTimeout(ue,K))})},Ae=function(){clearTimeout(G),fe("")};re=setTimeout(Ae,U),ue()}var ce=!1;function Y(fe,U){if(ce){var G=ce;ce=!1;var re=U.status=="sent",K={status:U.status};re?Ct(function(ue){if(ue&&ue.length){K.response=ue,K.responseUnsafe=r.urlParseQueryString(ue);for(var Ae in K.responseUnsafe){var xe=K.responseUnsafe[Ae];try{(xe.substr(0,1)=="{"&&xe.substr(-1)=="}"||xe.substr(0,1)=="["&&xe.substr(-1)=="]")&&(K.responseUnsafe[Ae]=JSON.parse(xe))}catch{}}}G.callback&&G.callback(re,K),X("contactRequested",K)},3e3):(G.callback&&G.callback(re,K),X("contactRequested",K))}}function Q(fe,U){if(U.req_id&&we[U.req_id]){var G=we[U.req_id];delete we[U.req_id];var re=null,K=null;typeof U.result<"u"&&(re=U.result),typeof U.error<"u"&&(K=U.error),G.callback&&G.callback(K,re)}}function ve(fe,U,G){if(!je("6.9"))throw Error("WebAppMethodUnsupported");var re=te(16),K={req_id:re,method:fe,params:U||{}};we[re]={callback:G},f.postEvent("web_app_invoke_custom_method",!1,K)}window.Telegram||(window.Telegram={}),Object.defineProperty(v,"initData",{get:function(){return g},enumerable:!0}),Object.defineProperty(v,"initDataUnsafe",{get:function(){return w},enumerable:!0}),Object.defineProperty(v,"version",{get:function(){return x},enumerable:!0}),Object.defineProperty(v,"platform",{get:function(){return b},enumerable:!0}),Object.defineProperty(v,"colorScheme",{get:function(){return S},enumerable:!0}),Object.defineProperty(v,"themeParams",{get:function(){return _},enumerable:!0}),Object.defineProperty(v,"isExpanded",{get:function(){return y},enumerable:!0}),Object.defineProperty(v,"viewportHeight",{get:function(){return(k===!1?window.innerHeight:k)-ut},enumerable:!0}),Object.defineProperty(v,"viewportStableHeight",{get:function(){return(q===!1?window.innerHeight:q)-ut},enumerable:!0}),Object.defineProperty(v,"isClosingConfirmationEnabled",{set:function(fe){I(fe)},get:function(){return $},enumerable:!0}),Object.defineProperty(v,"isVerticalSwipesEnabled",{set:function(fe){j(fe)},get:function(){return F},enumerable:!0}),Object.defineProperty(v,"headerColor",{set:function(fe){z(fe)},get:function(){return R()},enumerable:!0}),Object.defineProperty(v,"backgroundColor",{set:function(fe){pe(fe)},get:function(){return ee()},enumerable:!0}),Object.defineProperty(v,"bottomBarColor",{set:function(fe){qe(fe)},get:function(){return Se()},enumerable:!0}),Object.defineProperty(v,"BackButton",{value:st,enumerable:!0}),Object.defineProperty(v,"MainButton",{value:Z,enumerable:!0}),Object.defineProperty(v,"SecondaryButton",{value:J,enumerable:!0}),Object.defineProperty(v,"SettingsButton",{value:ge,enumerable:!0}),Object.defineProperty(v,"HapticFeedback",{value:Ee,enumerable:!0}),Object.defineProperty(v,"CloudStorage",{value:Re,enumerable:!0}),Object.defineProperty(v,"BiometricManager",{value:ke,enumerable:!0}),v.setHeaderColor=function(fe){v.headerColor=fe},v.setBackgroundColor=function(fe){v.backgroundColor=fe},v.setBottomBarColor=function(fe){v.bottomBarColor=fe},v.enableClosingConfirmation=function(){v.isClosingConfirmationEnabled=!0},v.disableClosingConfirmation=function(){v.isClosingConfirmationEnabled=!1},v.enableVerticalSwipes=function(){v.isVerticalSwipesEnabled=!0},v.disableVerticalSwipes=function(){v.isVerticalSwipesEnabled=!1},v.isVersionAtLeast=function(fe){return je(fe)},v.onEvent=function(fe,U){oe(fe,U)},v.offEvent=function(fe,U){se(fe,U)},v.sendData=function(fe){if(!fe||!fe.length||Ye(fe)>4096)throw Error("WebAppDataInvalid");f.postEvent("web_app_data_send",!1,{data:fe})},v.switchInlineQuery=function(fe,U){if(!je("6.6"))throw Error("WebAppMethodUnsupported");if(!d.tgWebAppBotInline)throw Error("WebAppInlineModeDisabled");if(fe=fe||"",fe.length>256)throw Error("WebAppInlineQueryInvalid");var G=[];if(U){if(!Array.isArray(U))throw Error("WebAppInlineChooseChatTypesInvalid");for(var re={users:1,bots:1,groups:1,channels:1},K=0;K<U.length;K++){var ue=U[K];if(!re[ue])throw Error("WebAppInlineChooseChatTypeInvalid");re[ue]!=2&&(re[ue]=2,G.push(ue))}}f.postEvent("web_app_switch_inline_query",!1,{query:fe,chat_types:G})},v.openLink=function(re,U){var G=document.createElement("A");if(G.href=re,G.protocol!="http:"&&G.protocol!="https:")throw Error("WebAppTgUrlInvalid");var re=G.href;if(U=U||{},je("6.1")){var K={url:re};je("6.4")&&U.try_instant_view&&(K.try_instant_view=!0),je("7.6")&&U.try_browser&&(K.try_browser=U.try_browser),f.postEvent("web_app_open_link",!1,K)}else window.open(re,"_blank")},v.openTelegramLink=function(fe){var U=document.createElement("A");if(U.href=fe,U.protocol!="http:"&&U.protocol!="https:"||U.hostname!="t.me")throw Error("WebAppTgUrlInvalid");var G=U.pathname+U.search;m||je("6.1")?f.postEvent("web_app_open_tg_link",!1,{path_full:G}):location.href="https://t.me"+G},v.openInvoice=function(fe,U){var G=document.createElement("A"),re,K;if(G.href=fe,G.protocol!="http:"&&G.protocol!="https:"||G.hostname!="t.me"||!(re=G.pathname.match(/^\/(\$|invoice\/)([A-Za-z0-9\-_=]+)$/))||!(K=re[2]))throw Error("WebAppInvoiceUrlInvalid");if(!je("6.1"))throw Error("WebAppMethodUnsupported");if(Xe[K])throw Error("WebAppInvoiceOpened");Xe[K]={url:fe,callback:U},f.postEvent("web_app_open_invoice",!1,{slug:K})},v.showPopup=function(fe,U){if(!je("6.2"))throw Error("WebAppMethodUnsupported");if(Ze)throw Error("WebAppPopupOpened");var G="",re="",K=[],ue={};if(typeof fe.title<"u"){if(G=V(fe.title),G.length>64)throw Error("WebAppPopupParamInvalid");G.length>0&&(ue.title=G)}if(typeof fe.message<"u"&&(re=V(fe.message)),!re.length||re.length>256)throw Error("WebAppPopupParamInvalid");if(ue.message=re,typeof fe.buttons<"u"){if(!Array.isArray(fe.buttons))throw Error("WebAppPopupParamInvalid");for(var Ae=0;Ae<fe.buttons.length;Ae++){var xe=fe.buttons[Ae],Te={},Pe="";if(typeof xe.id<"u"&&(Pe=xe.id.toString(),Pe.length>64))throw Error("WebAppPopupParamInvalid");Te.id=Pe;var Fe=xe.type;if(typeof Fe>"u"&&(Fe="default"),Te.type=Fe,!(Fe=="ok"||Fe=="close"||Fe=="cancel"))if(Fe=="default"||Fe=="destructive"){var Ne="";if(typeof xe.text<"u"&&(Ne=V(xe.text)),!Ne.length||Ne.length>64)throw Error("WebAppPopupParamInvalid");Te.text=Ne}else throw Error("WebAppPopupParamInvalid");K.push(Te)}}else K.push({id:"",type:"close"});if(K.length<1||K.length>3)throw Error("WebAppPopupParamInvalid");ue.buttons=K,Ze={callback:U},f.postEvent("web_app_open_popup",!1,ue)},v.showAlert=function(fe,U){v.showPopup({message:fe},U?function(){U()}:null)},v.showConfirm=function(fe,U){v.showPopup({message:fe,buttons:[{type:"ok",id:"ok"},{type:"cancel"}]},U?function(G){U(G=="ok")}:null)},v.showScanQrPopup=function(fe,U){if(!je("6.4"))throw Error("WebAppMethodUnsupported");if(tt)throw Error("WebAppScanQrPopupOpened");var G="",re={};if(typeof fe.text<"u"){if(G=V(fe.text),G.length>64)throw Error("WebAppScanQrPopupParamInvalid");G.length>0&&(re.text=G)}tt={callback:U},f.postEvent("web_app_open_scan_qr_popup",!1,re)},v.closeScanQrPopup=function(){if(!je("6.4"))throw Error("WebAppMethodUnsupported");tt=!1,f.postEvent("web_app_close_scan_qr_popup",!1)},v.readTextFromClipboard=function(fe){if(!je("6.4"))throw Error("WebAppMethodUnsupported");var U=te(16),G={req_id:U};we[U]={callback:fe},f.postEvent("web_app_read_text_from_clipboard",!1,G)},v.requestWriteAccess=function(fe){if(!je("6.9"))throw Error("WebAppMethodUnsupported");if(lt)throw Error("WebAppWriteAccessRequested");lt={callback:fe},f.postEvent("web_app_request_write_access")},v.requestContact=function(fe){if(!je("6.9"))throw Error("WebAppMethodUnsupported");if(ce)throw Error("WebAppContactRequested");ce={callback:fe},f.postEvent("web_app_request_phone")},v.shareToStory=function(fe,U){if(U=U||{},!je("7.8"))throw Error("WebAppMethodUnsupported");var G=document.createElement("A");if(G.href=fe,G.protocol!="http:"&&G.protocol!="https:")throw Error("WebAppMediaUrlInvalid");var re={};if(re.media_url=G.href,typeof U.text<"u"){var K=V(U.text);if(K.length>2048)throw Error("WebAppShareToStoryParamInvalid");K.length>0&&(re.text=K)}if(typeof U.widget_link<"u"){if(U.widget_link=U.widget_link||{},G.href=U.widget_link.url,G.protocol!="http:"&&G.protocol!="https:")throw Error("WebAppShareToStoryParamInvalid");var ue={url:G.href};if(typeof U.widget_link.name<"u"){var Ae=V(U.widget_link.name);if(Ae.length>48)throw Error("WebAppShareToStoryParamInvalid");Ae.length>0&&(ue.name=Ae)}re.widget_link=ue}f.postEvent("web_app_share_to_story",!1,re)},v.invokeCustomMethod=function(fe,U,G){ve(fe,U,G)},v.ready=function(){f.postEvent("web_app_ready")},v.expand=function(){f.postEvent("web_app_expand")},v.close=function(fe){fe=fe||{};var U={};je("7.6")&&fe.return_back&&(U.return_back=!0),f.postEvent("web_app_close",!1,U)},window.Telegram.WebApp=v,me(),ae(),Oe(),B(),d.tgWebAppShowSettings&&ge.show(),window.addEventListener("resize",N),m&&document.addEventListener("click",H),f.onEvent("theme_changed",T),f.onEvent("viewport_changed",O),f.onEvent("invoice_closed",He),f.onEvent("popup_closed",_t),f.onEvent("qr_text_received",mt),f.onEvent("scan_qr_popup_closed",Tt),f.onEvent("clipboard_text_received",St),f.onEvent("write_access_requested",Mt),f.onEvent("phone_requested",Y),f.onEvent("custom_method_invoked",Q),f.postEvent("web_app_request_theme"),f.postEvent("web_app_request_viewport")})()),telegramWebApps}var hasRequiredSdk;function requireSdk(){if(hasRequiredSdk)return sdk;hasRequiredSdk=1,Object.defineProperty(sdk,"__esModule",{value:!0}),sdk.WebApp=void 0,requireTelegramWebApps();var r=window;return sdk.WebApp=r.Telegram.WebApp,sdk}var hasRequiredDist$1;function requireDist$1(){if(hasRequiredDist$1)return dist$1;hasRequiredDist$1=1,Object.defineProperty(dist$1,"__esModule",{value:!0});var r=requireSdk();return dist$1.default=r.WebApp,dist$1}var distExports=requireDist$1();const WebApp=getDefaultExportFromCjs(distExports);function retrieveLaunchParams(){if(!WebApp.initData||WebApp.initData==="")throw new Error("未能提取启动参数,不在 Telegram 环境中");return WebApp.initData}function isTelegramEnv(){try{return typeof window<"u"&&window.Telegram&&window.Telegram.WebApp?(retrieveLaunchParams(),!0):!1}catch{return!1}}function getTelegramUserUnsafe(){try{if(!WebApp||!WebApp.initDataUnsafe)return null;const r=WebApp.initDataUnsafe;return!r.user||!r.user.id?null:{user:{id:r.user.id,firstName:r.user.first_name||"",lastName:r.user.last_name||"",username:r.user.username,photoUrl:r.user.photo_url||"",languageCode:r.user.language_code,isPremium:r.user.is_premium||!1,allowsWriteToPm:r.user.allows_write_to_pm||!1},authDate:Math.floor(Date.now()/1e3),hash:r.hash||"",startParam:r.start_param,chatType:r.chat_type,chatInstance:r.chat_instance}}catch{return null}}function readCookie(r){if(typeof document>"u")return null;const f=document.cookie.match(new RegExp("(?:^|; )"+r.replace(/([.$?*|{}()\[\]\\/+^])/g,"\\$1")+"=([^;]*)"));return f?decodeURIComponent(f[1]):null}function writeCookie(r,f,d=365*2){if(typeof document>"u")return;const m=new Date;m.setTime(m.getTime()+d*24*60*60*1e3);const v="; expires="+m.toUTCString();document.cookie=`${encodeURIComponent(r)}=${encodeURIComponent(f)}${v}; path=/`}function generateNumericId(){const r=Math.floor(Math.random()*1e9),f=Date.now()%1e9;return Number(String(f).padStart(9,"0")+String(r).padStart(9,"0"))}function getAnonymousBrowserUser(r="tg_tracking_uid"){let f=readCookie(r);if(!f){const v=generateNumericId();f=String(v),writeCookie(r,f)}const d=Number(f.replace(/\D/g,"").slice(0,15))||generateNumericId(),m=typeof navigator<"u"&&(navigator.language||navigator.userLanguage)||"en";return{user:{id:d,firstName:"Guest",lastName:"",username:`guest_${f.slice(-6)}`,languageCode:m.toLowerCase(),isPremium:!1,allowsWriteToPm:!1},authDate:Math.floor(Date.now()/1e3),hash:"anonymous_cookie_user",startParam:"browser_guest",chatType:"sender",chatInstance:""}}function getDefaultMockUser(){return{user:{id:2077220643,firstName:"Mock",lastName:"User",username:"mock_user_demo",languageCode:"zh-hans",isPremium:!0,allowsWriteToPm:!0},authDate:Math.floor(Date.now()/1e3),hash:"mock_hash_for_demo_purpose",startParam:"demo_start_param",chatType:"sender",chatInstance:"-245769840322609948"}}var naclUtil$1={exports:{}},naclUtil=naclUtil$1.exports,hasRequiredNaclUtil;function requireNaclUtil(){return hasRequiredNaclUtil||(hasRequiredNaclUtil=1,(function(r){(function(f,d){r.exports?r.exports=d():(f.nacl||(f.nacl={}),f.nacl.util=d())})(naclUtil,function(){var f={};function d(m){if(!/^(?:[A-Za-z0-9+\/]{2}[A-Za-z0-9+\/]{2})*(?:[A-Za-z0-9+\/]{2}==|[A-Za-z0-9+\/]{3}=)?$/.test(m))throw new TypeError("invalid encoding")}return f.decodeUTF8=function(m){if(typeof m!="string")throw new TypeError("expected string");var v,g=unescape(encodeURIComponent(m)),w=new Uint8Array(g.length);for(v=0;v<g.length;v++)w[v]=g.charCodeAt(v);return w},f.encodeUTF8=function(m){var v,g=[];for(v=0;v<m.length;v++)g.push(String.fromCharCode(m[v]));return decodeURIComponent(escape(g.join("")))},typeof atob>"u"?typeof Buffer.from<"u"?(f.encodeBase64=function(m){return Buffer.from(m).toString("base64")},f.decodeBase64=function(m){return d(m),new Uint8Array(Array.prototype.slice.call(Buffer.from(m,"base64"),0))}):(f.encodeBase64=function(m){return new Buffer(m).toString("base64")},f.decodeBase64=function(m){return d(m),new Uint8Array(Array.prototype.slice.call(new Buffer(m,"base64"),0))}):(f.encodeBase64=function(m){var v,g=[],w=m.length;for(v=0;v<w;v++)g.push(String.fromCharCode(m[v]));return btoa(g.join(""))},f.decodeBase64=function(m){d(m);var v,g=atob(m),w=new Uint8Array(g.length);for(v=0;v<g.length;v++)w[v]=g.charCodeAt(v);return w}),f})})(naclUtil$1)),naclUtil$1.exports}var naclUtilExports=requireNaclUtil();const nacl=getDefaultExportFromCjs(naclUtilExports);function commonjsRequire(r){throw new Error('Could not dynamically require "'+r+'". Please configure the dynamicRequireTargets or/and ignoreDynamicRequires option of @rollup/plugin-commonjs appropriately for this require call to work.')}var naclFast={exports:{}},cryptoBrowserify={},browser$b={exports:{}},safeBuffer$1={exports:{}},dist={},hasRequiredDist;function requireDist(){return hasRequiredDist||(hasRequiredDist=1,(function(r){Object.defineProperties(r,{__esModule:{value:!0},[Symbol.toStringTag]:{value:"Module"}});var f={},d={};d.byteLength=b,d.toByteArray=E,d.fromByteArray=T;for(var m=[],v=[],g=typeof Uint8Array<"u"?Uint8Array:Array,w="ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/",_=0,S=w.length;_<S;++_)m[_]=w[_],v[w.charCodeAt(_)]=_;v[45]=62,v[95]=63;function x(N){var H=N.length;if(H%4>0)throw new Error("Invalid string. Length must be a multiple of 4");var V=N.indexOf("=");V===-1&&(V=H);var X=V===H?0:4-V%4;return[V,X]}function b(N){var H=x(N),V=H[0],X=H[1];return(V+X)*3/4-X}function C(N,H,V){return(H+V)*3/4-V}function E(N){var H,V=x(N),X=V[0],oe=V[1],se=new g(C(N,X,oe)),de=0,he=oe>0?X-4:X,we;for(we=0;we<he;we+=4)H=v[N.charCodeAt(we)]<<18|v[N.charCodeAt(we+1)]<<12|v[N.charCodeAt(we+2)]<<6|v[N.charCodeAt(we+3)],se[de++]=H>>16&255,se[de++]=H>>8&255,se[de++]=H&255;return oe===2&&(H=v[N.charCodeAt(we)]<<2|v[N.charCodeAt(we+1)]>>4,se[de++]=H&255),oe===1&&(H=v[N.charCodeAt(we)]<<10|v[N.charCodeAt(we+1)]<<4|v[N.charCodeAt(we+2)]>>2,se[de++]=H>>8&255,se[de++]=H&255),se}function M(N){return m[N>>18&63]+m[N>>12&63]+m[N>>6&63]+m[N&63]}function A(N,H,V){for(var X,oe=[],se=H;se<V;se+=3)X=(N[se]<<16&16711680)+(N[se+1]<<8&65280)+(N[se+2]&255),oe.push(M(X));return oe.join("")}function T(N){for(var H,V=N.length,X=V%3,oe=[],se=16383,de=0,he=V-X;de<he;de+=se)oe.push(A(N,de,de+se>he?he:de+se));return X===1?(H=N[V-1],oe.push(m[H>>2]+m[H<<4&63]+"==")):X===2&&(H=(N[V-2]<<8)+N[V-1],oe.push(m[H>>10]+m[H>>4&63]+m[H<<2&63]+"=")),oe.join("")}var L={};/*! ieee754. BSD-3-Clause License. Feross Aboukhadijeh <https://feross.org/opensource> */L.read=function(N,H,V,X,oe){var se,de,he=oe*8-X-1,we=(1<<he)-1,te=we>>1,k=-7,q=V?oe-1:0,y=V?-1:1,B=N[H+q];for(q+=y,se=B&(1<<-k)-1,B>>=-k,k+=he;k>0;se=se*256+N[H+q],q+=y,k-=8);for(de=se&(1<<-k)-1,se>>=-k,k+=X;k>0;de=de*256+N[H+q],q+=y,k-=8);if(se===0)se=1-te;else{if(se===we)return de?NaN:(B?-1:1)*(1/0);de=de+Math.pow(2,X),se=se-te}return(B?-1:1)*de*Math.pow(2,se-X)},L.write=function(N,H,V,X,oe,se){var de,he,we,te=se*8-oe-1,k=(1<<te)-1,q=k>>1,y=oe===23?Math.pow(2,-24)-Math.pow(2,-77):0,B=X?0:se-1,$=X?1:-1,I=H<0||H===0&&1/H<0?1:0;for(H=Math.abs(H),isNaN(H)||H===1/0?(he=isNaN(H)?1:0,de=k):(de=Math.floor(Math.log(H)/Math.LN2),H*(we=Math.pow(2,-de))<1&&(de--,we*=2),de+q>=1?H+=y/we:H+=y*Math.pow(2,1-q),H*we>=2&&(de++,we/=2),de+q>=k?(he=0,de=k):de+q>=1?(he=(H*we-1)*Math.pow(2,oe),de=de+q):(he=H*Math.pow(2,q-1)*Math.pow(2,oe),de=0));oe>=8;N[V+B]=he&255,B+=$,he/=256,oe-=8);for(de=de<<oe|he,te+=oe;te>0;N[V+B]=de&255,B+=$,de/=256,te-=8);N[V+B-$]|=I*128};/*!
11
+ `+g):m.stack=g}catch{}}throw m}}_request(f,d){typeof f=="string"?(d=d||{},d.url=f):d=f||{},d=mergeConfig$1(this.defaults,d);const{transitional:m,paramsSerializer:v,headers:g}=d;m!==void 0&&validator.assertOptions(m,{silentJSONParsing:validators.transitional(validators.boolean),forcedJSONParsing:validators.transitional(validators.boolean),clarifyTimeoutError:validators.transitional(validators.boolean)},!1),v!=null&&(utils$5.isFunction(v)?d.paramsSerializer={serialize:v}:validator.assertOptions(v,{encode:validators.function,serialize:validators.function},!0)),d.allowAbsoluteUrls!==void 0||(this.defaults.allowAbsoluteUrls!==void 0?d.allowAbsoluteUrls=this.defaults.allowAbsoluteUrls:d.allowAbsoluteUrls=!0),validator.assertOptions(d,{baseUrl:validators.spelling("baseURL"),withXsrfToken:validators.spelling("withXSRFToken")},!0),d.method=(d.method||this.defaults.method||"get").toLowerCase();let w=g&&utils$5.merge(g.common,g[d.method]);g&&utils$5.forEach(["delete","get","head","post","put","patch","common"],A=>{delete g[A]}),d.headers=AxiosHeaders$1.concat(w,g);const _=[];let S=!0;this.interceptors.request.forEach(function(T){typeof T.runWhen=="function"&&T.runWhen(d)===!1||(S=S&&T.synchronous,_.unshift(T.fulfilled,T.rejected))});const x=[];this.interceptors.response.forEach(function(T){x.push(T.fulfilled,T.rejected)});let b,C=0,E;if(!S){const A=[dispatchRequest.bind(this),void 0];for(A.unshift(..._),A.push(...x),E=A.length,b=Promise.resolve(d);C<E;)b=b.then(A[C++],A[C++]);return b}E=_.length;let M=d;for(C=0;C<E;){const A=_[C++],T=_[C++];try{M=A(M)}catch(L){T.call(this,L);break}}try{b=dispatchRequest.call(this,M)}catch(A){return Promise.reject(A)}for(C=0,E=x.length;C<E;)b=b.then(x[C++],x[C++]);return b}getUri(f){f=mergeConfig$1(this.defaults,f);const d=buildFullPath(f.baseURL,f.url,f.allowAbsoluteUrls);return buildURL(d,f.params,f.paramsSerializer)}};utils$5.forEach(["delete","get","head","options"],function(f){Axios$1.prototype[f]=function(d,m){return this.request(mergeConfig$1(m||{},{method:f,url:d,data:(m||{}).data}))}}),utils$5.forEach(["post","put","patch"],function(f){function d(m){return function(g,w,_){return this.request(mergeConfig$1(_||{},{method:f,headers:m?{"Content-Type":"multipart/form-data"}:{},url:g,data:w}))}}Axios$1.prototype[f]=d(),Axios$1.prototype[f+"Form"]=d(!0)});let CancelToken$1=class Gt{constructor(f){if(typeof f!="function")throw new TypeError("executor must be a function.");let d;this.promise=new Promise(function(g){d=g});const m=this;this.promise.then(v=>{if(!m._listeners)return;let g=m._listeners.length;for(;g-- >0;)m._listeners[g](v);m._listeners=null}),this.promise.then=v=>{let g;const w=new Promise(_=>{m.subscribe(_),g=_}).then(v);return w.cancel=function(){m.unsubscribe(g)},w},f(function(g,w,_){m.reason||(m.reason=new CanceledError$1(g,w,_),d(m.reason))})}throwIfRequested(){if(this.reason)throw this.reason}subscribe(f){if(this.reason){f(this.reason);return}this._listeners?this._listeners.push(f):this._listeners=[f]}unsubscribe(f){if(!this._listeners)return;const d=this._listeners.indexOf(f);d!==-1&&this._listeners.splice(d,1)}toAbortSignal(){const f=new AbortController,d=m=>{f.abort(m)};return this.subscribe(d),f.signal.unsubscribe=()=>this.unsubscribe(d),f.signal}static source(){let f;return{token:new Gt(function(v){f=v}),cancel:f}}};function spread$2(r){return function(d){return r.apply(null,d)}}function isAxiosError$1(r){return utils$5.isObject(r)&&r.isAxiosError===!0}const HttpStatusCode$1={Continue:100,SwitchingProtocols:101,Processing:102,EarlyHints:103,Ok:200,Created:201,Accepted:202,NonAuthoritativeInformation:203,NoContent:204,ResetContent:205,PartialContent:206,MultiStatus:207,AlreadyReported:208,ImUsed:226,MultipleChoices:300,MovedPermanently:301,Found:302,SeeOther:303,NotModified:304,UseProxy:305,Unused:306,TemporaryRedirect:307,PermanentRedirect:308,BadRequest:400,Unauthorized:401,PaymentRequired:402,Forbidden:403,NotFound:404,MethodNotAllowed:405,NotAcceptable:406,ProxyAuthenticationRequired:407,RequestTimeout:408,Conflict:409,Gone:410,LengthRequired:411,PreconditionFailed:412,PayloadTooLarge:413,UriTooLong:414,UnsupportedMediaType:415,RangeNotSatisfiable:416,ExpectationFailed:417,ImATeapot:418,MisdirectedRequest:421,UnprocessableEntity:422,Locked:423,FailedDependency:424,TooEarly:425,UpgradeRequired:426,PreconditionRequired:428,TooManyRequests:429,RequestHeaderFieldsTooLarge:431,UnavailableForLegalReasons:451,InternalServerError:500,NotImplemented:501,BadGateway:502,ServiceUnavailable:503,GatewayTimeout:504,HttpVersionNotSupported:505,VariantAlsoNegotiates:506,InsufficientStorage:507,LoopDetected:508,NotExtended:510,NetworkAuthenticationRequired:511};Object.entries(HttpStatusCode$1).forEach(([r,f])=>{HttpStatusCode$1[f]=r});function createInstance(r){const f=new Axios$1(r),d=bind(Axios$1.prototype.request,f);return utils$5.extend(d,Axios$1.prototype,f,{allOwnKeys:!0}),utils$5.extend(d,f,null,{allOwnKeys:!0}),d.create=function(v){return createInstance(mergeConfig$1(r,v))},d}const axios=createInstance(defaults);axios.Axios=Axios$1,axios.CanceledError=CanceledError$1,axios.CancelToken=CancelToken$1,axios.isCancel=isCancel$1,axios.VERSION=VERSION$1,axios.toFormData=toFormData$1,axios.AxiosError=AxiosError$1,axios.Cancel=axios.CanceledError,axios.all=function(f){return Promise.all(f)},axios.spread=spread$2,axios.isAxiosError=isAxiosError$1,axios.mergeConfig=mergeConfig$1,axios.AxiosHeaders=AxiosHeaders$1,axios.formToJSON=r=>formDataToJSON(utils$5.isHTMLForm(r)?new FormData(r):r),axios.getAdapter=adapters.getAdapter,axios.HttpStatusCode=HttpStatusCode$1,axios.default=axios;const{Axios,AxiosError,CanceledError,isCancel,CancelToken,VERSION,all,Cancel,isAxiosError,spread:spread$1,toFormData,AxiosHeaders,HttpStatusCode,formToJSON,getAdapter,mergeConfig}=axios,TEST_BASE_URL="https://miniapptest-spinfi.xy1212.com";class HttpClient{constructor(f){this.options=f;const d=f.baseURL;this.instance=axios.create({baseURL:d,timeout:3e4}),this.instance.interceptors.request.use(m=>{const v=this.options.getToken();if(v){m.headers=m.headers||{};const w=`Bearer ${v}`;m.headers.Authorization=w}const g=this.options.getAppId?this.options.getAppId():null;return g&&(m.headers=m.headers||{},m.headers["hm-app-id"]=String(g)),m}),this.instance.interceptors.response.use(m=>m,m=>(m.response&&m.response.status===401&&this.options.onAuthError&&this.options.onAuthError(),Promise.reject(m)))}request(f){return this.instance.request(f)}get(f,d){return this.instance.get(f,d)}post(f,d,m){return this.instance.post(f,d,m)}}class NamespacedStorage{constructor(f="tg_tracking_sdk"){this.prefix=f}k(f){return`${this.prefix}:${f}`}set(f,d){try{localStorage.setItem(this.k(f),JSON.stringify(d))}catch{}}get(f){try{const d=localStorage.getItem(this.k(f));return d?JSON.parse(d):null}catch{return null}}remove(f){try{localStorage.removeItem(this.k(f))}catch{}}}class APIService{constructor(f){this.http=f}auth(f){return this.http.post("/api/user/auth",f).then(d=>d.data)}getAdPositionConfig(f){return this.http.post("/api/ad/adPositionDisplayAd",{adPositionName:f}).then(d=>d.data)}createAd(f){return this.http.post("/api/v2/ad/create",f).then(d=>d.data)}adMonitor(f){return this.http.get("/api/v2/ad/monitor",{params:f}).then(d=>d.data)}bindWalletReq(f){return this.http.post("/api/user/bindWallet",f).then(d=>d.data)}merchantPayModeList(){return this.http.get("/api/v2/merchant/pay/modeList").then(f=>f.data)}merchantPayCreate(f){return this.http.post("/api/v2/merchant/pay/create",f).then(d=>d.data)}merchantPayFinish(f){return this.http.post("/api/v2/merchant/pay/finish",f).then(d=>d.data)}merchantPayQueryResult(f){return this.http.post("/api/v2/merchant/pay/queryResult",f).then(d=>d.data)}merchantPayNotify(f){return this.http.post("/api/v2/merchant/pay/notify",f).then(d=>d.data)}}class HmAdManager{constructor(f={}){this.options=f,this.initialized=!1}async init(){this.initialized||(this.options.autoInjectScript!==!1&&this.sdkZone&&this.sdkFunc&&await this.ensureScriptInjected(),this.initialized=!0)}async setSpace(f){if(!f)return;const d=String(f),m=`show_${f}`,v=this.sdkZone!==d||this.sdkFunc!==m;this.sdkZone=d,this.sdkFunc=m,this.options.autoInjectScript!==!1&&await this.ensureScriptInjected(v)}findExistingScript(){return typeof document>"u"?null:document.querySelector("script[src*='//libtl.com/sdk.js']")}async ensureScriptInjected(f=!1){var g;if(typeof document>"u")return;const d=this.findExistingScript(),m=this.sdkZone||"",v=this.sdkFunc||"";if(d){const w=d.getAttribute("data-zone")||"",_=d.getAttribute("data-sdk")||"";if(w===m&&_===v&&!f)return;(g=d.parentElement)==null||g.removeChild(d)}!m||!v||await this.injectScript(m,v)}injectScript(f,d){return new Promise((m,v)=>{if(typeof document>"u")return m();const g=document.createElement("script");g.src="//libtl.com/sdk.js",g.setAttribute("data-zone",f),g.setAttribute("data-sdk",d),g.async=!0,g.onload=()=>m(),g.onerror=()=>v(new Error("Hm 脚本加载失败")),document.head.appendChild(g)})}async callSDK(f){if(!this.sdkFunc)throw new Error("Hm 未设置 spaceId");const d=window[this.sdkFunc];if(typeof d!="function")throw new Error("Hm SDK 未正确加载");await d(f)}async show(){try{await this.callSDK()}catch(f){throw f}}async showPopup(){try{await this.callSDK("pop")}catch(f){throw f}}async showInApp(f){try{await this.callSDK({type:"inApp",inAppSettings:f})}catch(d){throw d}}}class AdMonitor{constructor(f){this.getMonitor=f}extractParamsFromUrl(f){if(!f)return null;try{return{param:new URL(f).searchParams.get("param")||""}}catch{return null}}async send(f,d){if(!f)return;const m=Array.isArray(f)?f:[f];if(m.length===0)return;const v=m[0],g=this.extractParamsFromUrl(v);let w;if(g&&this.getMonitor)try{const _=Math.floor(Date.now()/1e3).toString(),S=CryptoJS.MD5(d+_).toString(),x={param:g.param,request_code:S,timestamp:_};w=await this.getMonitor(x)}catch{}return await Promise.allSettled(m.slice(1).map(_=>{try{return fetch(_,{method:"GET"})}catch{return Promise.resolve()}})),w}}var commonjsGlobal=typeof globalThis<"u"?globalThis:typeof window<"u"?window:typeof global<"u"?global:typeof self<"u"?self:{};function getDefaultExportFromCjs(r){return r&&r.__esModule&&Object.prototype.hasOwnProperty.call(r,"default")?r.default:r}var dist$1={},sdk={},telegramWebApps={},hasRequiredTelegramWebApps;function requireTelegramWebApps(){return hasRequiredTelegramWebApps||(hasRequiredTelegramWebApps=1,(function(){var r={},f="";try{f=location.hash.toString()}catch{}var d=S(f),m=O("initParams");if(m)for(var v in m)typeof d[v]>"u"&&(d[v]=m[v]);L("initParams",d);var g=!1,w;try{if(g=window.parent!=null&&window!=window.parent,g){window.addEventListener("message",function(N){if(N.source===window.parent){try{var H=JSON.parse(N.data)}catch{return}if(!(!H||!H.eventType))if(H.eventType=="set_custom_style")N.origin==="https://web.telegram.org"&&(w.innerHTML=H.eventData);else if(H.eventType=="reload_iframe"){try{window.parent.postMessage(JSON.stringify({eventType:"iframe_will_reload"}),"*")}catch{}location.reload()}else E(H.eventType,H.eventData)}}),w=document.createElement("style"),document.head.appendChild(w);try{window.parent.postMessage(JSON.stringify({eventType:"iframe_ready",eventData:{reload_supported:!0}}),"*")}catch{}}}catch{}function _(N){try{return N=N.replace(/\+/g,"%20"),decodeURIComponent(N)}catch{return N}}function S(N){N=N.replace(/^#/,"");var H={};if(!N.length)return H;if(N.indexOf("=")<0&&N.indexOf("?")<0)return H._path=_(N),H;var V=N.indexOf("?");if(V>=0){var X=N.substr(0,V);H._path=_(X),N=N.substr(V+1)}var oe=x(N);for(var se in oe)H[se]=oe[se];return H}function x(N){var H={};if(!N.length)return H;var V=N.split("&"),X,oe,se,de;for(X=0;X<V.length;X++)oe=V[X].split("="),se=_(oe[0]),de=oe[1]==null?null:_(oe[1]),H[se]=de;return H}function b(N,H){var V=N.indexOf("#");if(V<0)return N+"#"+H;var X=N.substr(V+1);return X.indexOf("=")>=0||X.indexOf("?")>=0?N+"&"+H:X.length>0?N+"?"+H:N+H}function C(N,H,V){if(H||(H=function(){}),V===void 0&&(V=""),window.TelegramWebviewProxy!==void 0)TelegramWebviewProxy.postEvent(N,JSON.stringify(V)),H();else if(window.external&&"notify"in window.external)window.external.notify(JSON.stringify({eventType:N,eventData:V})),H();else if(g)try{var X="https://web.telegram.org";X="*",window.parent.postMessage(JSON.stringify({eventType:N,eventData:V}),X),H()}catch(oe){H(oe)}else H({notAvailable:!0})}function E(N,H){M(N,function(V){V(N,H)})}function M(N,H){var V=r[N];if(!(V===void 0||!V.length))for(var X=0;X<V.length;X++)try{H(V[X])}catch{}}function A(N,H){r[N]===void 0&&(r[N]=[]);var V=r[N].indexOf(H);V===-1&&r[N].push(H)}function T(N,H){if(r[N]!==void 0){var V=r[N].indexOf(H);V!==-1&&r[N].splice(V,1)}}function L(N,H){try{return window.sessionStorage.setItem("__telegram__"+N,JSON.stringify(H)),!0}catch{}return!1}function O(N){try{return JSON.parse(window.sessionStorage.getItem("__telegram__"+N))}catch{}return null}window.Telegram||(window.Telegram={}),window.Telegram.WebView={initParams:d,isIframe:g,onEvent:A,offEvent:T,postEvent:C,receiveEvent:E,callEventCallbacks:M},window.Telegram.Utils={urlSafeDecode:_,urlParseQueryString:x,urlParseHashParams:S,urlAppendHashParams:b,sessionStorageSet:L,sessionStorageGet:O},window.TelegramGameProxy_receiveEvent=E,window.TelegramGameProxy={receiveEvent:E}})(),(function(){var r=window.Telegram.Utils,f=window.Telegram.WebView,d=f.initParams,m=f.isIframe,v={},g="",w={},_={},S="light",x="6.0",b="unknown";if(d.tgWebAppData&&d.tgWebAppData.length){g=d.tgWebAppData,w=r.urlParseQueryString(g);for(var C in w){var E=w[C];try{(E.substr(0,1)=="{"&&E.substr(-1)=="}"||E.substr(0,1)=="["&&E.substr(-1)=="]")&&(w[C]=JSON.parse(E))}catch{}}}if(d.tgWebAppThemeParams&&d.tgWebAppThemeParams.length){var M=d.tgWebAppThemeParams;try{var A=JSON.parse(M);A&&he(A)}catch{}}var A=r.sessionStorageGet("themeParams");A&&he(A),d.tgWebAppVersion&&(x=d.tgWebAppVersion),d.tgWebAppPlatform&&(b=d.tgWebAppPlatform);function T(fe,U){U.theme_params&&(he(U.theme_params),window.Telegram.WebApp.MainButton.setParams({}),window.Telegram.WebApp.SecondaryButton.setParams({}),me(),ae(),Oe(),X("themeChanged"))}var L=window.innerHeight;function O(fe,U){U.height&&(window.removeEventListener("resize",N),B(U))}function N(fe){L!=window.innerHeight&&(L=window.innerHeight,X("viewportChanged",{isStateStable:!0}))}function H(fe){if(!(fe.metaKey||fe.ctrlKey)){for(var U=fe.target;U.tagName!="A"&&U.parentNode;)U=U.parentNode;U.tagName=="A"&&U.target!="_blank"&&(U.protocol=="http:"||U.protocol=="https:")&&U.hostname=="t.me"&&(v.openTgLink(U.href),fe.preventDefault())}}function V(fe){return fe.toString().replace(/^\s+|\s+$/g,"")}function X(fe){var U=Array.prototype.slice.call(arguments);fe=U.shift(),f.callEventCallbacks("webview:"+fe,function(G){G.apply(v,U)})}function oe(fe,U){f.onEvent("webview:"+fe,U)}function se(fe,U){f.offEvent("webview:"+fe,U)}function de(fe,U){var G=document.documentElement;G&&G.style&&G.style.setProperty&&G.style.setProperty("--tg-"+fe,U)}function he(fe){fe.bg_color=="#1c1c1d"&&fe.bg_color==fe.secondary_bg_color&&(fe.secondary_bg_color="#2c2c2e");var U;for(var G in fe)(U=Ue(fe[G]))&&(_[G]=U,G=="bg_color"&&(S=De(U)?"dark":"light",de("color-scheme",S)),G="theme-"+G.split("_").join("-"),de(G,U));r.sessionStorageSet("themeParams",_)}var we={};function te(fe){for(var U=100;--U;){for(var G="",re="abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ0123456789",K=re.length,ue=0;ue<fe;ue++)G+=re[Math.floor(Math.random()*K)];if(!we[G])return we[G]={},G}throw Error("WebAppCallbackIdGenerateFailed")}var k=!1,q=!1,y=!0;function B(fe){typeof fe<"u"&&(y=!!fe.is_expanded,k=fe.height,fe.is_state_stable&&(q=fe.height),X("viewportChanged",{isStateStable:!!fe.is_state_stable}));var U,G;k!==!1?U=k-ut+"px":U=ut?"calc(100vh - "+ut+"px)":"100vh",q!==!1?G=q-ut+"px":G=ut?"calc(100vh - "+ut+"px)":"100vh",de("viewport-height",U),de("viewport-stable-height",G)}var $=!1;function I(fe){je("6.2")&&($=!!fe,f.postEvent("web_app_setup_closing_behavior",!1,{need_confirmation:$}))}var F=!0;function j(fe){je("7.7")&&(F=!!fe,f.postEvent("web_app_setup_swipe_behavior",!1,{allow_vertical_swipe:F}))}var D="bg_color",W=null;function R(){return D=="secondary_bg_color"?_.secondary_bg_color:D=="bg_color"?_.bg_color:W}function z(fe){if(je("6.1")){je("6.9")||(_.bg_color&&_.bg_color==fe?fe="bg_color":_.secondary_bg_color&&_.secondary_bg_color==fe&&(fe="secondary_bg_color"));var U=null,G=null;if(fe=="bg_color"||fe=="secondary_bg_color")G=fe;else if(je("6.9")&&(U=Ue(fe),!U))throw Error("WebAppHeaderColorInvalid");if(!je("6.9")&&G!="bg_color"&&G!="secondary_bg_color")throw Error("WebAppHeaderColorKeyInvalid");D=G,W=U,me()}}var ye=null,Ce=null;function me(){(ye!=D||Ce!=W)&&(ye=D,Ce=W,Ce?f.postEvent("web_app_set_header_color",!1,{color:W}):f.postEvent("web_app_set_header_color",!1,{color_key:D}))}var ie="bg_color";function ee(){return ie=="secondary_bg_color"?_.secondary_bg_color:ie=="bg_color"?_.bg_color:ie}function pe(fe){if(je("6.1")){var U;if(fe=="bg_color"||fe=="secondary_bg_color")U=fe;else if(U=Ue(fe),!U)throw Error("WebAppBackgroundColorInvalid");ie=U,ae()}}var be=null;function ae(){var fe=ee();be!=fe&&(be=fe,f.postEvent("web_app_set_background_color",!1,{color:fe}))}var ne="bottom_bar_bg_color";function Se(){return ne=="bottom_bar_bg_color"?_.bottom_bar_bg_color||_.secondary_bg_color||"#ffffff":ne=="secondary_bg_color"?_.secondary_bg_color:ne=="bg_color"?_.bg_color:ne}function qe(fe){if(je("7.10")){var U;if(fe=="bg_color"||fe=="secondary_bg_color"||fe=="bottom_bar_bg_color")U=fe;else if(U=Ue(fe),!U)throw Error("WebAppBottomBarColorInvalid");ne=U,Oe(),window.Telegram.WebApp.SecondaryButton.setParams({})}}var Ie=null;function Oe(){var fe=Se();Ie!=fe&&(Ie=fe,f.postEvent("web_app_set_bottom_bar_color",!1,{color:fe})),d.tgWebAppDebug&&bt()}function Ue(fe){fe+="";var U;if(U=/^\s*#([0-9a-f]{6})\s*$/i.exec(fe))return"#"+U[1].toLowerCase();if(U=/^\s*#([0-9a-f])([0-9a-f])([0-9a-f])\s*$/i.exec(fe))return("#"+U[1]+U[1]+U[2]+U[2]+U[3]+U[3]).toLowerCase();if(U=/^\s*rgba?\((\d+),\s*(\d+),\s*(\d+)(?:,\s*(\d+\.{0,1}\d*))?\)\s*$/.exec(fe)){var G=parseInt(U[1]),re=parseInt(U[2]),K=parseInt(U[3]);return G=(G<16?"0":"")+G.toString(16),re=(re<16?"0":"")+re.toString(16),K=(K<16?"0":"")+K.toString(16),"#"+G+re+K}return!1}function De(fe){fe=fe.replace(/[\s#]/g,""),fe.length==3&&(fe=fe[0]+fe[0]+fe[1]+fe[1]+fe[2]+fe[2]);var U=parseInt(fe.substr(0,2),16),G=parseInt(fe.substr(2,2),16),re=parseInt(fe.substr(4,2),16),K=Math.sqrt(.299*(U*U)+.587*(G*G)+.114*(re*re));return K<120}function $e(fe,U){typeof fe!="string"&&(fe=""),typeof U!="string"&&(U=""),fe=fe.replace(/^\s+|\s+$/g,"").split("."),U=U.replace(/^\s+|\s+$/g,"").split(".");var G=Math.max(fe.length,U.length),re,K,ue;for(re=0;re<G;re++)if(K=parseInt(fe[re])||0,ue=parseInt(U[re])||0,K!=ue)return K>ue?1:-1;return 0}function je(fe){return $e(x,fe)>=0}function Ye(fe){if(window.Blob)try{return new Blob([fe]).size}catch{}for(var U=fe.length,G=fe.length-1;G>=0;G--){var re=fe.charCodeAt(G);re>127&&re<=2047?U++:re>2047&&re<=65535&&(U+=2),re>=56320&&re<=57343&&G--}return U}var st=(function(){var fe=!1,U={};Object.defineProperty(U,"isVisible",{set:function(Pe){Te({is_visible:Pe})},get:function(){return fe},enumerable:!0});var G=null;f.onEvent("back_button_pressed",re);function re(){X("backButtonClicked")}function K(){return{is_visible:fe}}function ue(Pe){return typeof Pe>"u"&&(Pe=K()),JSON.stringify(Pe)}function Ae(){return!!je("6.1")}function xe(){var Pe=K(),Fe=ue(Pe);G!==Fe&&(G=Fe,f.postEvent("web_app_setup_back_button",!1,Pe))}function Te(Pe){return Ae()&&(typeof Pe.is_visible<"u"&&(fe=!!Pe.is_visible),xe()),U}return U.onClick=function(Pe){return Ae()&&oe("backButtonClicked",Pe),U},U.offClick=function(Pe){return Ae()&&se("backButtonClicked",Pe),U},U.show=function(){return Te({is_visible:!0})},U.hide=function(){return Te({is_visible:!1})},U})(),Je=null,Ge={},ut=0;if(d.tgWebAppDebug){Je=document.createElement("tg-bottom-bar");var gt={display:"flex",gap:"7px",font:"600 14px/18px sans-serif",width:"100%",background:Se(),position:"fixed",left:"0",right:"0",bottom:"0",margin:"0",padding:"7px",textAlign:"center",boxSizing:"border-box",zIndex:"10000"};for(var rt in gt)Je.style[rt]=gt[rt];document.addEventListener("DOMContentLoaded",function fe(U){document.removeEventListener("DOMContentLoaded",fe),document.body.appendChild(Je)});var wt=document.createElement("style");wt.innerHTML='tg-bottom-button.shine { position: relative; overflow: hidden; } tg-bottom-button.shine:before { content:""; position: absolute; top: 0; width: 100%; height: 100%; background: linear-gradient(120deg, transparent, rgba(255, 255, 255, .2), transparent); animation: tg-bottom-button-shine 5s ease-in-out infinite; } @-webkit-keyframes tg-bottom-button-shine { 0% {left: -100%;} 12%,100% {left: 100%}} @keyframes tg-bottom-button-shine { 0% {left: -100%;} 12%,100% {left: 100%}}',Je.appendChild(wt)}function bt(){var fe=Ge.main._bottomButton,U=Ge.secondary._bottomButton;fe.isVisible||U.isVisible?(Je.style.display="flex",ut=58,fe.isVisible&&U.isVisible&&(U.position=="top"?(Je.style.flexDirection="column-reverse",ut+=51):U.position=="bottom"?(Je.style.flexDirection="column",ut+=51):U.position=="left"?Je.style.flexDirection="row-reverse":U.position=="right"&&(Je.style.flexDirection="row"))):(Je.style.display="none",ut=0),Je.style.background=Se(),document.documentElement&&(document.documentElement.style.boxSizing="border-box",document.documentElement.style.paddingBottom=ut+"px"),B()}var le=function(fe){var U=fe=="main";if(U)var G="web_app_setup_main_button",re="main_button_pressed",K="mainButtonClicked",ue="Continue",Ae=function(){return _.button_color||"#2481cc"},xe=function(){return _.button_text_color||"#ffffff"};else var G="web_app_setup_secondary_button",re="secondary_button_pressed",K="secondaryButtonClicked",ue="Cancel",Ae=function(){return Se()},xe=function(){return _.button_color||"#2481cc"};var Te=!1,Pe=!0,Fe=!1,Ne=!1,At=fe,ot=ue,yt=!1,vt=!1,xt="left",Ve={};Object.defineProperty(Ve,"type",{get:function(){return At},enumerable:!0}),Object.defineProperty(Ve,"text",{set:function(Be){Ve.setParams({text:Be})},get:function(){return ot},enumerable:!0}),Object.defineProperty(Ve,"color",{set:function(Be){Ve.setParams({color:Be})},get:function(){return yt||Ae()},enumerable:!0}),Object.defineProperty(Ve,"textColor",{set:function(Be){Ve.setParams({text_color:Be})},get:function(){return vt||xe()},enumerable:!0}),Object.defineProperty(Ve,"isVisible",{set:function(Be){Ve.setParams({is_visible:Be})},get:function(){return Te},enumerable:!0}),Object.defineProperty(Ve,"isProgressVisible",{get:function(){return Ne},enumerable:!0}),Object.defineProperty(Ve,"isActive",{set:function(Be){Ve.setParams({is_active:Be})},get:function(){return Pe},enumerable:!0}),Object.defineProperty(Ve,"hasShineEffect",{set:function(Be){Ve.setParams({has_shine_effect:Be})},get:function(){return Fe},enumerable:!0}),U||Object.defineProperty(Ve,"position",{set:function(Be){Ve.setParams({position:Be})},get:function(){return xt},enumerable:!0});var ft=null;f.onEvent(re,pt);var et=null;if(d.tgWebAppDebug){et=document.createElement("tg-bottom-button");var ht={display:"none",width:"100%",height:"44px",borderRadius:"0",background:"no-repeat right center",padding:"13px 15px",textAlign:"center",boxSizing:"border-box"};for(var it in ht)et.style[it]=ht[it];Je.appendChild(et),et.addEventListener("click",pt,!1),et._bottomButton=Ve,Ge[fe]=et}function pt(){Pe&&X(K)}function at(){var Be=Ve.color,Ke=Ve.textColor;if(Te){var We={is_visible:!0,is_active:Pe,is_progress_visible:Ne,text:ot,color:Be,text_color:Ke,has_shine_effect:Fe&&Pe&&!Ne};U||(We.position=xt)}else var We={is_visible:!1};return We}function ct(Be){return typeof Be>"u"&&(Be=at()),JSON.stringify(Be)}function dt(){var Be=at(),Ke=ct(Be);ft!==Ke&&(ft=Ke,f.postEvent(G,!1,Be),d.tgWebAppDebug&&nt(Be))}function nt(Be){Be.is_visible?(et.style.display="block",et.style.opacity=Be.is_active?"1":"0.8",et.style.cursor=Be.is_active?"pointer":"auto",et.disabled=!Be.is_active,et.innerText=Be.text,et.className=Be.has_shine_effect?"shine":"",et.style.backgroundImage=Be.is_progress_visible?"url('data:image/svg+xml,"+encodeURIComponent('<svg xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink" viewport="0 0 48 48" width="48px" height="48px"><circle cx="50%" cy="50%" stroke="'+Be.text_color+'" stroke-width="2.25" stroke-linecap="round" fill="none" stroke-dashoffset="106" r="9" stroke-dasharray="56.52" rotate="-90"><animate attributeName="stroke-dashoffset" attributeType="XML" dur="360s" from="0" to="12500" repeatCount="indefinite"></animate><animateTransform attributeName="transform" attributeType="XML" type="rotate" dur="1s" from="-90 24 24" to="630 24 24" repeatCount="indefinite"></animateTransform></circle></svg>')+"')":"none",et.style.backgroundColor=Be.color,et.style.color=Be.text_color):et.style.display="none",bt()}function Le(Be){if(typeof Be.text<"u"){var Ke=V(Be.text);if(!Ke.length||Ke.length>64)throw Error("WebAppBottomButtonParamInvalid");ot=Ke}if(typeof Be.color<"u")if(Be.color===!1||Be.color===null)yt=!1;else{var We=Ue(Be.color);if(!We)throw Error("WebAppBottomButtonParamInvalid");yt=We}if(typeof Be.text_color<"u")if(Be.text_color===!1||Be.text_color===null)vt=!1;else{var ze=Ue(Be.text_color);if(!ze)throw Error("WebAppBottomButtonParamInvalid");vt=ze}if(typeof Be.is_visible<"u"){if(Be.is_visible&&!Ve.text.length)throw Error("WebAppBottomButtonParamInvalid");Te=!!Be.is_visible}if(typeof Be.has_shine_effect<"u"&&(Fe=!!Be.has_shine_effect),!U&&typeof Be.position<"u"){if(Be.position!="left"&&Be.position!="right"&&Be.position!="top"&&Be.position!="bottom")throw Error("WebAppBottomButtonParamInvalid");xt=Be.position}return typeof Be.is_active<"u"&&(Pe=!!Be.is_active),dt(),Ve}return Ve.setText=function(Be){return Ve.setParams({text:Be})},Ve.onClick=function(Be){return oe(K,Be),Ve},Ve.offClick=function(Be){return se(K,Be),Ve},Ve.show=function(){return Ve.setParams({is_visible:!0})},Ve.hide=function(){return Ve.setParams({is_visible:!1})},Ve.enable=function(){return Ve.setParams({is_active:!0})},Ve.disable=function(){return Ve.setParams({is_active:!1})},Ve.showProgress=function(Be){return Pe=!!Be,Ne=!0,dt(),Ve},Ve.hideProgress=function(){return Ve.isActive||(Pe=!0),Ne=!1,dt(),Ve},Ve.setParams=Le,Ve},Z=le("main"),J=le("secondary"),ge=(function(){var fe=!1,U={};Object.defineProperty(U,"isVisible",{set:function(Pe){Te({is_visible:Pe})},get:function(){return fe},enumerable:!0});var G=null;f.onEvent("settings_button_pressed",re);function re(){X("settingsButtonClicked")}function K(){return{is_visible:fe}}function ue(Pe){return typeof Pe>"u"&&(Pe=K()),JSON.stringify(Pe)}function Ae(){return!!je("6.10")}function xe(){var Pe=K(),Fe=ue(Pe);G!==Fe&&(G=Fe,f.postEvent("web_app_setup_settings_button",!1,Pe))}function Te(Pe){return Ae()&&(typeof Pe.is_visible<"u"&&(fe=!!Pe.is_visible),xe()),U}return U.onClick=function(Pe){return Ae()&&oe("settingsButtonClicked",Pe),U},U.offClick=function(Pe){return Ae()&&se("settingsButtonClicked",Pe),U},U.show=function(){return Te({is_visible:!0})},U.hide=function(){return Te({is_visible:!1})},U})(),Ee=(function(){var fe={};function U(G){if(!je("6.1"))return fe;if(G.type=="impact"){if(G.impact_style!="light"&&G.impact_style!="medium"&&G.impact_style!="heavy"&&G.impact_style!="rigid"&&G.impact_style!="soft")throw Error("WebAppHapticImpactStyleInvalid")}else if(G.type=="notification"){if(G.notification_type!="error"&&G.notification_type!="success"&&G.notification_type!="warning")throw Error("WebAppHapticNotificationTypeInvalid")}else if(G.type!="selection_change")throw Error("WebAppHapticFeedbackTypeInvalid");return f.postEvent("web_app_trigger_haptic_feedback",!1,G),fe}return fe.impactOccurred=function(G){return U({type:"impact",impact_style:G})},fe.notificationOccurred=function(G){return U({type:"notification",notification_type:G})},fe.selectionChanged=function(){return U({type:"selection_change"})},fe})(),Re=(function(){var fe={};function U(G,re,K){if(!je("6.9"))throw Error("WebAppMethodUnsupported");return ve(G,re,K),fe}return fe.setItem=function(G,re,K){return U("saveStorageValue",{key:G,value:re},K)},fe.getItem=function(G,re){return fe.getItems([G],re?function(K,ue){K?re(K):re(null,ue[G])}:null)},fe.getItems=function(G,re){return U("getStorageValues",{keys:G},re)},fe.removeItem=function(G,re){return fe.removeItems([G],re)},fe.removeItems=function(G,re){return U("deleteStorageValues",{keys:G},re)},fe.getKeys=function(G){return U("getStorageKeys",{},G)},fe})(),ke=(function(){var fe=!1,U=!1,G="unknown",re=!1,K=!1,ue=!1,Ae="",xe={};Object.defineProperty(xe,"isInited",{get:function(){return fe},enumerable:!0}),Object.defineProperty(xe,"isBiometricAvailable",{get:function(){return fe&&U},enumerable:!0}),Object.defineProperty(xe,"biometricType",{get:function(){return G||"unknown"},enumerable:!0}),Object.defineProperty(xe,"isAccessRequested",{get:function(){return re},enumerable:!0}),Object.defineProperty(xe,"isAccessGranted",{get:function(){return re&&K},enumerable:!0}),Object.defineProperty(xe,"isBiometricTokenSaved",{get:function(){return ue},enumerable:!0}),Object.defineProperty(xe,"deviceId",{get:function(){return Ae||""},enumerable:!0});var Te={callbacks:[]},Pe=!1,Fe=!1,Ne=!1;f.onEvent("biometry_info_received",At),f.onEvent("biometry_auth_requested",ot),f.onEvent("biometry_token_updated",yt);function At(Ve,ft){if(fe=!0,ft.available?(U=!0,G=ft.type||"unknown",ft.access_requested?(re=!0,K=!!ft.access_granted,ue=!!ft.token_saved):(re=!1,K=!1,ue=!1)):(U=!1,G="unknown",re=!1,K=!1,ue=!1),Ae=ft.device_id||"",Te.callbacks.length>0)for(var et=0;et<Te.callbacks.length;et++){var ht=Te.callbacks[et];ht()}if(Pe){var it=Pe;Pe=!1,it.callback&&it.callback(K)}X("biometricManagerUpdated")}function ot(Ve,ft){var et=ft.status=="authorized",ht=ft.token||"";if(Fe){var it=Fe;Fe=!1,it.callback&&it.callback(et,et?ht:null)}X("biometricAuthRequested",et?{isAuthenticated:!0,biometricToken:ht}:{isAuthenticated:!1})}function yt(Ve,ft){var et=!1;if(U&&re&&(ft.status=="updated"?(ue=!0,et=!0):ft.status=="removed"&&(ue=!1,et=!0)),Ne){var ht=Ne;Ne=!1,ht.callback&&ht.callback(et)}X("biometricTokenUpdated",{isUpdated:et})}function vt(){return!!je("7.2")}function xt(){if(!fe)throw Error("WebAppBiometricManagerNotInited");return!0}return xe.init=function(Ve){return!vt()||fe||(Ve&&Te.callbacks.push(Ve),f.postEvent("web_app_biometry_get_info",!1)),xe},xe.requestAccess=function(Ve,ft){if(!vt())return xe;if(xt(),!U)throw Error("WebAppBiometricManagerBiometricsNotAvailable");if(Pe)throw Error("WebAppBiometricManagerAccessRequested");var et={};if(typeof Ve.reason<"u"){var ht=V(Ve.reason);if(ht.length>128)throw Error("WebAppBiometricRequestAccessParamInvalid");ht.length>0&&(et.reason=ht)}return Pe={callback:ft},f.postEvent("web_app_biometry_request_access",!1,et),xe},xe.authenticate=function(Ve,ft){if(!vt())return xe;if(xt(),!U)throw Error("WebAppBiometricManagerBiometricsNotAvailable");if(!K)throw Error("WebAppBiometricManagerBiometricAccessNotGranted");if(Fe)throw Error("WebAppBiometricManagerAuthenticationRequested");var et={};if(typeof Ve.reason<"u"){var ht=V(Ve.reason);if(ht.length>128)throw Error("WebAppBiometricRequestAccessParamInvalid");ht.length>0&&(et.reason=ht)}return Fe={callback:ft},f.postEvent("web_app_biometry_request_auth",!1,et),xe},xe.updateBiometricToken=function(Ve,ft){if(!vt())return xe;if(Ve=Ve||"",Ve.length>1024)throw Error("WebAppBiometricManagerTokenInvalid");if(xt(),!U)throw Error("WebAppBiometricManagerBiometricsNotAvailable");if(!K)throw Error("WebAppBiometricManagerBiometricAccessNotGranted");if(Ne)throw Error("WebAppBiometricManagerTokenUpdateRequested");return Ne={callback:ft},f.postEvent("web_app_biometry_update_token",!1,{token:Ve}),xe},xe.openSettings=function(){if(!vt())return xe;if(xt(),!U)throw Error("WebAppBiometricManagerBiometricsNotAvailable");if(!re)throw Error("WebAppBiometricManagerBiometricsAccessNotRequested");return K||f.postEvent("web_app_biometry_open_settings",!1),xe},xe})(),Xe={};function He(fe,U){if(U.slug&&Xe[U.slug]){var G=Xe[U.slug];delete Xe[U.slug],G.callback&&G.callback(U.status),X("invoiceClosed",{url:G.url,status:U.status})}}var Ze=!1;function _t(fe,U){if(Ze){var G=Ze;Ze=!1;var re=null;typeof U.button_id<"u"&&(re=U.button_id),G.callback&&G.callback(re),X("popupClosed",{button_id:re})}}var tt=!1;function mt(fe,U){if(tt){var G=tt,re=null;typeof U.data<"u"&&(re=U.data),G.callback&&G.callback(re)&&(tt=!1,f.postEvent("web_app_close_scan_qr_popup",!1)),X("qrTextReceived",{data:re})}}function Tt(fe,U){tt=!1,X("scanQrPopupClosed")}function St(fe,U){if(U.req_id&&we[U.req_id]){var G=we[U.req_id];delete we[U.req_id];var re=null;typeof U.data<"u"&&(re=U.data),G.callback&&G.callback(re),X("clipboardTextReceived",{data:re})}}var lt=!1;function Mt(fe,U){if(lt){var G=lt;lt=!1,G.callback&&G.callback(U.status=="allowed"),X("writeAccessRequested",{status:U.status})}}function Ct(fe,U){var G,re,K=0,ue=function(){ve("getRequestedContact",{},function(xe,Te){Te&&Te.length?(clearTimeout(re),fe(Te)):(K+=50,G=setTimeout(ue,K))})},Ae=function(){clearTimeout(G),fe("")};re=setTimeout(Ae,U),ue()}var ce=!1;function Y(fe,U){if(ce){var G=ce;ce=!1;var re=U.status=="sent",K={status:U.status};re?Ct(function(ue){if(ue&&ue.length){K.response=ue,K.responseUnsafe=r.urlParseQueryString(ue);for(var Ae in K.responseUnsafe){var xe=K.responseUnsafe[Ae];try{(xe.substr(0,1)=="{"&&xe.substr(-1)=="}"||xe.substr(0,1)=="["&&xe.substr(-1)=="]")&&(K.responseUnsafe[Ae]=JSON.parse(xe))}catch{}}}G.callback&&G.callback(re,K),X("contactRequested",K)},3e3):(G.callback&&G.callback(re,K),X("contactRequested",K))}}function Q(fe,U){if(U.req_id&&we[U.req_id]){var G=we[U.req_id];delete we[U.req_id];var re=null,K=null;typeof U.result<"u"&&(re=U.result),typeof U.error<"u"&&(K=U.error),G.callback&&G.callback(K,re)}}function ve(fe,U,G){if(!je("6.9"))throw Error("WebAppMethodUnsupported");var re=te(16),K={req_id:re,method:fe,params:U||{}};we[re]={callback:G},f.postEvent("web_app_invoke_custom_method",!1,K)}window.Telegram||(window.Telegram={}),Object.defineProperty(v,"initData",{get:function(){return g},enumerable:!0}),Object.defineProperty(v,"initDataUnsafe",{get:function(){return w},enumerable:!0}),Object.defineProperty(v,"version",{get:function(){return x},enumerable:!0}),Object.defineProperty(v,"platform",{get:function(){return b},enumerable:!0}),Object.defineProperty(v,"colorScheme",{get:function(){return S},enumerable:!0}),Object.defineProperty(v,"themeParams",{get:function(){return _},enumerable:!0}),Object.defineProperty(v,"isExpanded",{get:function(){return y},enumerable:!0}),Object.defineProperty(v,"viewportHeight",{get:function(){return(k===!1?window.innerHeight:k)-ut},enumerable:!0}),Object.defineProperty(v,"viewportStableHeight",{get:function(){return(q===!1?window.innerHeight:q)-ut},enumerable:!0}),Object.defineProperty(v,"isClosingConfirmationEnabled",{set:function(fe){I(fe)},get:function(){return $},enumerable:!0}),Object.defineProperty(v,"isVerticalSwipesEnabled",{set:function(fe){j(fe)},get:function(){return F},enumerable:!0}),Object.defineProperty(v,"headerColor",{set:function(fe){z(fe)},get:function(){return R()},enumerable:!0}),Object.defineProperty(v,"backgroundColor",{set:function(fe){pe(fe)},get:function(){return ee()},enumerable:!0}),Object.defineProperty(v,"bottomBarColor",{set:function(fe){qe(fe)},get:function(){return Se()},enumerable:!0}),Object.defineProperty(v,"BackButton",{value:st,enumerable:!0}),Object.defineProperty(v,"MainButton",{value:Z,enumerable:!0}),Object.defineProperty(v,"SecondaryButton",{value:J,enumerable:!0}),Object.defineProperty(v,"SettingsButton",{value:ge,enumerable:!0}),Object.defineProperty(v,"HapticFeedback",{value:Ee,enumerable:!0}),Object.defineProperty(v,"CloudStorage",{value:Re,enumerable:!0}),Object.defineProperty(v,"BiometricManager",{value:ke,enumerable:!0}),v.setHeaderColor=function(fe){v.headerColor=fe},v.setBackgroundColor=function(fe){v.backgroundColor=fe},v.setBottomBarColor=function(fe){v.bottomBarColor=fe},v.enableClosingConfirmation=function(){v.isClosingConfirmationEnabled=!0},v.disableClosingConfirmation=function(){v.isClosingConfirmationEnabled=!1},v.enableVerticalSwipes=function(){v.isVerticalSwipesEnabled=!0},v.disableVerticalSwipes=function(){v.isVerticalSwipesEnabled=!1},v.isVersionAtLeast=function(fe){return je(fe)},v.onEvent=function(fe,U){oe(fe,U)},v.offEvent=function(fe,U){se(fe,U)},v.sendData=function(fe){if(!fe||!fe.length||Ye(fe)>4096)throw Error("WebAppDataInvalid");f.postEvent("web_app_data_send",!1,{data:fe})},v.switchInlineQuery=function(fe,U){if(!je("6.6"))throw Error("WebAppMethodUnsupported");if(!d.tgWebAppBotInline)throw Error("WebAppInlineModeDisabled");if(fe=fe||"",fe.length>256)throw Error("WebAppInlineQueryInvalid");var G=[];if(U){if(!Array.isArray(U))throw Error("WebAppInlineChooseChatTypesInvalid");for(var re={users:1,bots:1,groups:1,channels:1},K=0;K<U.length;K++){var ue=U[K];if(!re[ue])throw Error("WebAppInlineChooseChatTypeInvalid");re[ue]!=2&&(re[ue]=2,G.push(ue))}}f.postEvent("web_app_switch_inline_query",!1,{query:fe,chat_types:G})},v.openLink=function(re,U){var G=document.createElement("A");if(G.href=re,G.protocol!="http:"&&G.protocol!="https:")throw Error("WebAppTgUrlInvalid");var re=G.href;if(U=U||{},je("6.1")){var K={url:re};je("6.4")&&U.try_instant_view&&(K.try_instant_view=!0),je("7.6")&&U.try_browser&&(K.try_browser=U.try_browser),f.postEvent("web_app_open_link",!1,K)}else window.open(re,"_blank")},v.openTelegramLink=function(fe){var U=document.createElement("A");if(U.href=fe,U.protocol!="http:"&&U.protocol!="https:"||U.hostname!="t.me")throw Error("WebAppTgUrlInvalid");var G=U.pathname+U.search;m||je("6.1")?f.postEvent("web_app_open_tg_link",!1,{path_full:G}):location.href="https://t.me"+G},v.openInvoice=function(fe,U){var G=document.createElement("A"),re,K;if(G.href=fe,G.protocol!="http:"&&G.protocol!="https:"||G.hostname!="t.me"||!(re=G.pathname.match(/^\/(\$|invoice\/)([A-Za-z0-9\-_=]+)$/))||!(K=re[2]))throw Error("WebAppInvoiceUrlInvalid");if(!je("6.1"))throw Error("WebAppMethodUnsupported");if(Xe[K])throw Error("WebAppInvoiceOpened");Xe[K]={url:fe,callback:U},f.postEvent("web_app_open_invoice",!1,{slug:K})},v.showPopup=function(fe,U){if(!je("6.2"))throw Error("WebAppMethodUnsupported");if(Ze)throw Error("WebAppPopupOpened");var G="",re="",K=[],ue={};if(typeof fe.title<"u"){if(G=V(fe.title),G.length>64)throw Error("WebAppPopupParamInvalid");G.length>0&&(ue.title=G)}if(typeof fe.message<"u"&&(re=V(fe.message)),!re.length||re.length>256)throw Error("WebAppPopupParamInvalid");if(ue.message=re,typeof fe.buttons<"u"){if(!Array.isArray(fe.buttons))throw Error("WebAppPopupParamInvalid");for(var Ae=0;Ae<fe.buttons.length;Ae++){var xe=fe.buttons[Ae],Te={},Pe="";if(typeof xe.id<"u"&&(Pe=xe.id.toString(),Pe.length>64))throw Error("WebAppPopupParamInvalid");Te.id=Pe;var Fe=xe.type;if(typeof Fe>"u"&&(Fe="default"),Te.type=Fe,!(Fe=="ok"||Fe=="close"||Fe=="cancel"))if(Fe=="default"||Fe=="destructive"){var Ne="";if(typeof xe.text<"u"&&(Ne=V(xe.text)),!Ne.length||Ne.length>64)throw Error("WebAppPopupParamInvalid");Te.text=Ne}else throw Error("WebAppPopupParamInvalid");K.push(Te)}}else K.push({id:"",type:"close"});if(K.length<1||K.length>3)throw Error("WebAppPopupParamInvalid");ue.buttons=K,Ze={callback:U},f.postEvent("web_app_open_popup",!1,ue)},v.showAlert=function(fe,U){v.showPopup({message:fe},U?function(){U()}:null)},v.showConfirm=function(fe,U){v.showPopup({message:fe,buttons:[{type:"ok",id:"ok"},{type:"cancel"}]},U?function(G){U(G=="ok")}:null)},v.showScanQrPopup=function(fe,U){if(!je("6.4"))throw Error("WebAppMethodUnsupported");if(tt)throw Error("WebAppScanQrPopupOpened");var G="",re={};if(typeof fe.text<"u"){if(G=V(fe.text),G.length>64)throw Error("WebAppScanQrPopupParamInvalid");G.length>0&&(re.text=G)}tt={callback:U},f.postEvent("web_app_open_scan_qr_popup",!1,re)},v.closeScanQrPopup=function(){if(!je("6.4"))throw Error("WebAppMethodUnsupported");tt=!1,f.postEvent("web_app_close_scan_qr_popup",!1)},v.readTextFromClipboard=function(fe){if(!je("6.4"))throw Error("WebAppMethodUnsupported");var U=te(16),G={req_id:U};we[U]={callback:fe},f.postEvent("web_app_read_text_from_clipboard",!1,G)},v.requestWriteAccess=function(fe){if(!je("6.9"))throw Error("WebAppMethodUnsupported");if(lt)throw Error("WebAppWriteAccessRequested");lt={callback:fe},f.postEvent("web_app_request_write_access")},v.requestContact=function(fe){if(!je("6.9"))throw Error("WebAppMethodUnsupported");if(ce)throw Error("WebAppContactRequested");ce={callback:fe},f.postEvent("web_app_request_phone")},v.shareToStory=function(fe,U){if(U=U||{},!je("7.8"))throw Error("WebAppMethodUnsupported");var G=document.createElement("A");if(G.href=fe,G.protocol!="http:"&&G.protocol!="https:")throw Error("WebAppMediaUrlInvalid");var re={};if(re.media_url=G.href,typeof U.text<"u"){var K=V(U.text);if(K.length>2048)throw Error("WebAppShareToStoryParamInvalid");K.length>0&&(re.text=K)}if(typeof U.widget_link<"u"){if(U.widget_link=U.widget_link||{},G.href=U.widget_link.url,G.protocol!="http:"&&G.protocol!="https:")throw Error("WebAppShareToStoryParamInvalid");var ue={url:G.href};if(typeof U.widget_link.name<"u"){var Ae=V(U.widget_link.name);if(Ae.length>48)throw Error("WebAppShareToStoryParamInvalid");Ae.length>0&&(ue.name=Ae)}re.widget_link=ue}f.postEvent("web_app_share_to_story",!1,re)},v.invokeCustomMethod=function(fe,U,G){ve(fe,U,G)},v.ready=function(){f.postEvent("web_app_ready")},v.expand=function(){f.postEvent("web_app_expand")},v.close=function(fe){fe=fe||{};var U={};je("7.6")&&fe.return_back&&(U.return_back=!0),f.postEvent("web_app_close",!1,U)},window.Telegram.WebApp=v,me(),ae(),Oe(),B(),d.tgWebAppShowSettings&&ge.show(),window.addEventListener("resize",N),m&&document.addEventListener("click",H),f.onEvent("theme_changed",T),f.onEvent("viewport_changed",O),f.onEvent("invoice_closed",He),f.onEvent("popup_closed",_t),f.onEvent("qr_text_received",mt),f.onEvent("scan_qr_popup_closed",Tt),f.onEvent("clipboard_text_received",St),f.onEvent("write_access_requested",Mt),f.onEvent("phone_requested",Y),f.onEvent("custom_method_invoked",Q),f.postEvent("web_app_request_theme"),f.postEvent("web_app_request_viewport")})()),telegramWebApps}var hasRequiredSdk;function requireSdk(){if(hasRequiredSdk)return sdk;hasRequiredSdk=1,Object.defineProperty(sdk,"__esModule",{value:!0}),sdk.WebApp=void 0,requireTelegramWebApps();var r=window;return sdk.WebApp=r.Telegram.WebApp,sdk}var hasRequiredDist$1;function requireDist$1(){if(hasRequiredDist$1)return dist$1;hasRequiredDist$1=1,Object.defineProperty(dist$1,"__esModule",{value:!0});var r=requireSdk();return dist$1.default=r.WebApp,dist$1}var distExports=requireDist$1();const WebApp=getDefaultExportFromCjs(distExports);function retrieveLaunchParams(){if(!WebApp.initData||WebApp.initData==="")throw new Error("未能提取启动参数,不在 Telegram 环境中");return WebApp.initData}function isTelegramEnv(){try{return typeof window<"u"&&window.Telegram&&window.Telegram.WebApp?(retrieveLaunchParams(),!0):!1}catch{return!1}}function getTelegramUserUnsafe(){try{if(!WebApp||!WebApp.initDataUnsafe)return null;const r=WebApp.initDataUnsafe;return!r.user||!r.user.id?null:{user:{id:r.user.id,firstName:r.user.first_name||"",lastName:r.user.last_name||"",username:r.user.username,photoUrl:r.user.photo_url||"",languageCode:r.user.language_code,isPremium:r.user.is_premium||!1,allowsWriteToPm:r.user.allows_write_to_pm||!1},authDate:new Date().toISOString(),hash:r.hash||"",startParam:r.start_param,chatType:r.chat_type,chatInstance:r.chat_instance}}catch{return null}}function readCookie(r){if(typeof document>"u")return null;const f=document.cookie.match(new RegExp("(?:^|; )"+r.replace(/([.$?*|{}()\[\]\\/+^])/g,"\\$1")+"=([^;]*)"));return f?decodeURIComponent(f[1]):null}function writeCookie(r,f,d=365*2){if(typeof document>"u")return;const m=new Date;m.setTime(m.getTime()+d*24*60*60*1e3);const v="; expires="+m.toUTCString();document.cookie=`${encodeURIComponent(r)}=${encodeURIComponent(f)}${v}; path=/`}function generateNumericId(){const r=Math.floor(Math.random()*1e9),f=Date.now()%1e9;return Number(String(f).padStart(9,"0")+String(r).padStart(9,"0"))}function getAnonymousBrowserUser(r="tg_tracking_uid"){let f=readCookie(r);if(!f){const v=generateNumericId();f=String(v),writeCookie(r,f)}const d=Number(f.replace(/\D/g,"").slice(0,15))||generateNumericId(),m=typeof navigator<"u"&&(navigator.language||navigator.userLanguage)||"en";return{user:{id:d,firstName:"Guest",lastName:"",username:`guest_${f.slice(-6)}`,languageCode:m.toLowerCase(),isPremium:!1,allowsWriteToPm:!1},authDate:new Date().toISOString(),hash:"anonymous_cookie_user",startParam:"browser_guest",chatType:"sender",chatInstance:""}}function getDefaultMockUser(){return{user:{id:2077220643,firstName:"Mock",lastName:"User",username:"mock_user_demo",languageCode:"zh-hans",isPremium:!0,allowsWriteToPm:!0},authDate:new Date().toISOString(),hash:"mock_hash_for_demo_purpose",startParam:"demo_start_param",chatType:"sender",chatInstance:"-245769840322609948"}}var naclUtil$1={exports:{}},naclUtil=naclUtil$1.exports,hasRequiredNaclUtil;function requireNaclUtil(){return hasRequiredNaclUtil||(hasRequiredNaclUtil=1,(function(r){(function(f,d){r.exports?r.exports=d():(f.nacl||(f.nacl={}),f.nacl.util=d())})(naclUtil,function(){var f={};function d(m){if(!/^(?:[A-Za-z0-9+\/]{2}[A-Za-z0-9+\/]{2})*(?:[A-Za-z0-9+\/]{2}==|[A-Za-z0-9+\/]{3}=)?$/.test(m))throw new TypeError("invalid encoding")}return f.decodeUTF8=function(m){if(typeof m!="string")throw new TypeError("expected string");var v,g=unescape(encodeURIComponent(m)),w=new Uint8Array(g.length);for(v=0;v<g.length;v++)w[v]=g.charCodeAt(v);return w},f.encodeUTF8=function(m){var v,g=[];for(v=0;v<m.length;v++)g.push(String.fromCharCode(m[v]));return decodeURIComponent(escape(g.join("")))},typeof atob>"u"?typeof Buffer.from<"u"?(f.encodeBase64=function(m){return Buffer.from(m).toString("base64")},f.decodeBase64=function(m){return d(m),new Uint8Array(Array.prototype.slice.call(Buffer.from(m,"base64"),0))}):(f.encodeBase64=function(m){return new Buffer(m).toString("base64")},f.decodeBase64=function(m){return d(m),new Uint8Array(Array.prototype.slice.call(new Buffer(m,"base64"),0))}):(f.encodeBase64=function(m){var v,g=[],w=m.length;for(v=0;v<w;v++)g.push(String.fromCharCode(m[v]));return btoa(g.join(""))},f.decodeBase64=function(m){d(m);var v,g=atob(m),w=new Uint8Array(g.length);for(v=0;v<g.length;v++)w[v]=g.charCodeAt(v);return w}),f})})(naclUtil$1)),naclUtil$1.exports}var naclUtilExports=requireNaclUtil();const nacl=getDefaultExportFromCjs(naclUtilExports);function commonjsRequire(r){throw new Error('Could not dynamically require "'+r+'". Please configure the dynamicRequireTargets or/and ignoreDynamicRequires option of @rollup/plugin-commonjs appropriately for this require call to work.')}var naclFast={exports:{}},cryptoBrowserify={},browser$b={exports:{}},safeBuffer$1={exports:{}},dist={},hasRequiredDist;function requireDist(){return hasRequiredDist||(hasRequiredDist=1,(function(r){Object.defineProperties(r,{__esModule:{value:!0},[Symbol.toStringTag]:{value:"Module"}});var f={},d={};d.byteLength=b,d.toByteArray=E,d.fromByteArray=T;for(var m=[],v=[],g=typeof Uint8Array<"u"?Uint8Array:Array,w="ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/",_=0,S=w.length;_<S;++_)m[_]=w[_],v[w.charCodeAt(_)]=_;v[45]=62,v[95]=63;function x(N){var H=N.length;if(H%4>0)throw new Error("Invalid string. Length must be a multiple of 4");var V=N.indexOf("=");V===-1&&(V=H);var X=V===H?0:4-V%4;return[V,X]}function b(N){var H=x(N),V=H[0],X=H[1];return(V+X)*3/4-X}function C(N,H,V){return(H+V)*3/4-V}function E(N){var H,V=x(N),X=V[0],oe=V[1],se=new g(C(N,X,oe)),de=0,he=oe>0?X-4:X,we;for(we=0;we<he;we+=4)H=v[N.charCodeAt(we)]<<18|v[N.charCodeAt(we+1)]<<12|v[N.charCodeAt(we+2)]<<6|v[N.charCodeAt(we+3)],se[de++]=H>>16&255,se[de++]=H>>8&255,se[de++]=H&255;return oe===2&&(H=v[N.charCodeAt(we)]<<2|v[N.charCodeAt(we+1)]>>4,se[de++]=H&255),oe===1&&(H=v[N.charCodeAt(we)]<<10|v[N.charCodeAt(we+1)]<<4|v[N.charCodeAt(we+2)]>>2,se[de++]=H>>8&255,se[de++]=H&255),se}function M(N){return m[N>>18&63]+m[N>>12&63]+m[N>>6&63]+m[N&63]}function A(N,H,V){for(var X,oe=[],se=H;se<V;se+=3)X=(N[se]<<16&16711680)+(N[se+1]<<8&65280)+(N[se+2]&255),oe.push(M(X));return oe.join("")}function T(N){for(var H,V=N.length,X=V%3,oe=[],se=16383,de=0,he=V-X;de<he;de+=se)oe.push(A(N,de,de+se>he?he:de+se));return X===1?(H=N[V-1],oe.push(m[H>>2]+m[H<<4&63]+"==")):X===2&&(H=(N[V-2]<<8)+N[V-1],oe.push(m[H>>10]+m[H>>4&63]+m[H<<2&63]+"=")),oe.join("")}var L={};/*! ieee754. BSD-3-Clause License. Feross Aboukhadijeh <https://feross.org/opensource> */L.read=function(N,H,V,X,oe){var se,de,he=oe*8-X-1,we=(1<<he)-1,te=we>>1,k=-7,q=V?oe-1:0,y=V?-1:1,B=N[H+q];for(q+=y,se=B&(1<<-k)-1,B>>=-k,k+=he;k>0;se=se*256+N[H+q],q+=y,k-=8);for(de=se&(1<<-k)-1,se>>=-k,k+=X;k>0;de=de*256+N[H+q],q+=y,k-=8);if(se===0)se=1-te;else{if(se===we)return de?NaN:(B?-1:1)*(1/0);de=de+Math.pow(2,X),se=se-te}return(B?-1:1)*de*Math.pow(2,se-X)},L.write=function(N,H,V,X,oe,se){var de,he,we,te=se*8-oe-1,k=(1<<te)-1,q=k>>1,y=oe===23?Math.pow(2,-24)-Math.pow(2,-77):0,B=X?0:se-1,$=X?1:-1,I=H<0||H===0&&1/H<0?1:0;for(H=Math.abs(H),isNaN(H)||H===1/0?(he=isNaN(H)?1:0,de=k):(de=Math.floor(Math.log(H)/Math.LN2),H*(we=Math.pow(2,-de))<1&&(de--,we*=2),de+q>=1?H+=y/we:H+=y*Math.pow(2,1-q),H*we>=2&&(de++,we/=2),de+q>=k?(he=0,de=k):de+q>=1?(he=(H*we-1)*Math.pow(2,oe),de=de+q):(he=H*Math.pow(2,q-1)*Math.pow(2,oe),de=0));oe>=8;N[V+B]=he&255,B+=$,he/=256,oe-=8);for(de=de<<oe|he,te+=oe;te>0;N[V+B]=de&255,B+=$,de/=256,te-=8);N[V+B-$]|=I*128};/*!
12
12
  * The buffer module from node.js, for the browser.
13
13
  *
14
14
  * @author Feross Aboukhadijeh <https://feross.org>
@@ -49,7 +49,7 @@ export function getTelegramUserUnsafe() {
49
49
  isPremium: initDataUnsafe.user.is_premium || false,
50
50
  allowsWriteToPm: initDataUnsafe.user.allows_write_to_pm || false,
51
51
  },
52
- authDate: Math.floor(Date.now() / 1000),
52
+ authDate: new Date().toISOString(),
53
53
  hash: initDataUnsafe.hash || "",
54
54
  startParam: initDataUnsafe.start_param,
55
55
  chatType: initDataUnsafe.chat_type,
@@ -109,7 +109,7 @@ export function getAnonymousBrowserUser(cookieName = "tg_tracking_uid") {
109
109
  isPremium: false,
110
110
  allowsWriteToPm: false,
111
111
  },
112
- authDate: Math.floor(Date.now() / 1000),
112
+ authDate: new Date().toISOString(),
113
113
  hash: "anonymous_cookie_user",
114
114
  startParam: "browser_guest",
115
115
  chatType: "sender",
@@ -130,7 +130,7 @@ export function getDefaultMockUser() {
130
130
  isPremium: true,
131
131
  allowsWriteToPm: true,
132
132
  },
133
- authDate: Math.floor(Date.now() / 1000),
133
+ authDate: new Date().toISOString(),
134
134
  hash: "mock_hash_for_demo_purpose",
135
135
  startParam: "demo_start_param",
136
136
  chatType: "sender",
@@ -1 +1 @@
1
- {"version":3,"file":"telegram.js","sourceRoot":"","sources":["../../src/sdk/telegram.ts"],"names":[],"mappings":"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","sourcesContent":["import WebApp from \"@twa-dev/sdk\";\r\nimport type { TelegramUserInfo } from \"./types.js\";\r\n\r\n/**\r\n * 尝试获取启动参数,检查是否在 Telegram 环境中\r\n */\r\nfunction retrieveLaunchParams() {\r\n if (!WebApp.initData || WebApp.initData === \"\") {\r\n throw new Error(\"未能提取启动参数,不在 Telegram 环境中\");\r\n }\r\n return WebApp.initData;\r\n}\r\n\r\nexport function isTelegramEnv(): boolean {\r\n try {\r\n // 检查 WebApp 对象是否存在且 initData 可用\r\n if (\r\n typeof window !== \"undefined\" &&\r\n (window as any).Telegram &&\r\n (window as any).Telegram.WebApp\r\n ) {\r\n // 如果能够提取启动参数,说明已经在 Telegram 环境中\r\n retrieveLaunchParams();\r\n return true;\r\n }\r\n return false;\r\n } catch (error) {\r\n console.warn(\"非Telegram环境\");\r\n return false;\r\n }\r\n}\r\n\r\nexport function getTelegramUserUnsafe(): TelegramUserInfo | null {\r\n try {\r\n // 确保 WebApp 对象存在\r\n if (!WebApp || !WebApp.initDataUnsafe) {\r\n return null;\r\n }\r\n\r\n const initDataUnsafe = WebApp.initDataUnsafe;\r\n\r\n // 验证用户信息的基本结构\r\n if (!initDataUnsafe.user || !initDataUnsafe.user.id) {\r\n console.warn(\"Telegram用户信息结构不完整\");\r\n return null;\r\n }\r\n\r\n // 确保包含必要字段\r\n const userInfo = {\r\n user: {\r\n id: initDataUnsafe.user.id,\r\n firstName: initDataUnsafe.user.first_name || \"\",\r\n lastName: initDataUnsafe.user.last_name || \"\",\r\n username: initDataUnsafe.user.username,\r\n photoUrl: initDataUnsafe.user.photo_url || \"\",\r\n languageCode: initDataUnsafe.user.language_code,\r\n isPremium: initDataUnsafe.user.is_premium || false,\r\n allowsWriteToPm: initDataUnsafe.user.allows_write_to_pm || false,\r\n },\r\n authDate: Math.floor(Date.now() / 1000),\r\n hash: initDataUnsafe.hash || \"\",\r\n startParam: initDataUnsafe.start_param,\r\n chatType: initDataUnsafe.chat_type,\r\n chatInstance: initDataUnsafe.chat_instance,\r\n };\r\n\r\n return userInfo as TelegramUserInfo;\r\n } catch (error) {\r\n console.warn(\"获取Telegram用户信息失败:\", error);\r\n return null;\r\n }\r\n}\r\n\r\n/** Cookie 工具 **/\r\nfunction readCookie(name: string): string | null {\r\n if (typeof document === \"undefined\") return null;\r\n const match = document.cookie.match(\r\n new RegExp(\r\n \"(?:^|; )\" + name.replace(/([.$?*|{}()\\[\\]\\\\/+^])/g, \"\\\\$1\") + \"=([^;]*)\"\r\n )\r\n );\r\n return match ? decodeURIComponent(match[1]) : null;\r\n}\r\n\r\nfunction writeCookie(name: string, value: string, days = 365 * 2) {\r\n if (typeof document === \"undefined\") return;\r\n const date = new Date();\r\n date.setTime(date.getTime() + days * 24 * 60 * 60 * 1000);\r\n const expires = \"; expires=\" + date.toUTCString();\r\n document.cookie = `${encodeURIComponent(name)}=${encodeURIComponent(\r\n value\r\n )}${expires}; path=/`;\r\n}\r\n\r\nfunction generateNumericId(): number {\r\n // 生成稳定的数值 ID(53-bit 安全整数范围内)\r\n const rand = Math.floor(Math.random() * 1e9);\r\n const time = Date.now() % 1e9;\r\n const id = Number(\r\n String(time).padStart(9, \"0\") + String(rand).padStart(9, \"0\")\r\n );\r\n return id;\r\n}\r\n\r\n/**\r\n * 基于 Cookie 的匿名浏览器用户(非 Telegram 环境使用)\r\n * - 会在 cookie 中持久化 uid,下次复用\r\n */\r\nexport function getAnonymousBrowserUser(\r\n cookieName = \"tg_tracking_uid\"\r\n): TelegramUserInfo {\r\n let uidStr = readCookie(cookieName);\r\n if (!uidStr) {\r\n const uid = generateNumericId();\r\n uidStr = String(uid);\r\n writeCookie(cookieName, uidStr);\r\n }\r\n const uidNum =\r\n Number(uidStr.replace(/\\D/g, \"\").slice(0, 15)) || generateNumericId();\r\n const lang =\r\n (typeof navigator !== \"undefined\" &&\r\n (navigator.language || (navigator as any).userLanguage)) ||\r\n \"en\";\r\n\r\n return {\r\n user: {\r\n id: uidNum,\r\n firstName: \"Guest\",\r\n lastName: \"\",\r\n username: `guest_${uidStr.slice(-6)}`,\r\n languageCode: lang.toLowerCase(),\r\n isPremium: false,\r\n allowsWriteToPm: false,\r\n },\r\n authDate: Math.floor(Date.now() / 1000),\r\n hash: \"anonymous_cookie_user\",\r\n startParam: \"browser_guest\",\r\n chatType: \"sender\",\r\n chatInstance: \"\",\r\n } as TelegramUserInfo;\r\n}\r\n\r\n/**\r\n * 获取默认的 mock 用户信息(保留旧逻辑)\r\n */\r\nexport function getDefaultMockUser(): TelegramUserInfo {\r\n return {\r\n user: {\r\n id: 2077220643,\r\n firstName: \"Mock\",\r\n lastName: \"User\",\r\n username: \"mock_user_demo\",\r\n languageCode: \"zh-hans\",\r\n isPremium: true,\r\n allowsWriteToPm: true,\r\n },\r\n authDate: Math.floor(Date.now() / 1000),\r\n hash: \"mock_hash_for_demo_purpose\",\r\n startParam: \"demo_start_param\",\r\n chatType: \"sender\",\r\n chatInstance: \"-245769840322609948\",\r\n } as TelegramUserInfo;\r\n}\r\n"]}
1
+ {"version":3,"file":"telegram.js","sourceRoot":"","sources":["../../src/sdk/telegram.ts"],"names":[],"mappings":"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","sourcesContent":["import WebApp from \"@twa-dev/sdk\";\r\nimport type { TelegramUserInfo } from \"./types.js\";\r\n\r\n/**\r\n * 尝试获取启动参数,检查是否在 Telegram 环境中\r\n */\r\nfunction retrieveLaunchParams() {\r\n if (!WebApp.initData || WebApp.initData === \"\") {\r\n throw new Error(\"未能提取启动参数,不在 Telegram 环境中\");\r\n }\r\n return WebApp.initData;\r\n}\r\n\r\nexport function isTelegramEnv(): boolean {\r\n try {\r\n // 检查 WebApp 对象是否存在且 initData 可用\r\n if (\r\n typeof window !== \"undefined\" &&\r\n (window as any).Telegram &&\r\n (window as any).Telegram.WebApp\r\n ) {\r\n // 如果能够提取启动参数,说明已经在 Telegram 环境中\r\n retrieveLaunchParams();\r\n return true;\r\n }\r\n return false;\r\n } catch (error) {\r\n console.warn(\"非Telegram环境\");\r\n return false;\r\n }\r\n}\r\n\r\nexport function getTelegramUserUnsafe(): TelegramUserInfo | null {\r\n try {\r\n // 确保 WebApp 对象存在\r\n if (!WebApp || !WebApp.initDataUnsafe) {\r\n return null;\r\n }\r\n\r\n const initDataUnsafe = WebApp.initDataUnsafe;\r\n\r\n // 验证用户信息的基本结构\r\n if (!initDataUnsafe.user || !initDataUnsafe.user.id) {\r\n console.warn(\"Telegram用户信息结构不完整\");\r\n return null;\r\n }\r\n\r\n // 确保包含必要字段\r\n const userInfo = {\r\n user: {\r\n id: initDataUnsafe.user.id,\r\n firstName: initDataUnsafe.user.first_name || \"\",\r\n lastName: initDataUnsafe.user.last_name || \"\",\r\n username: initDataUnsafe.user.username,\r\n photoUrl: initDataUnsafe.user.photo_url || \"\",\r\n languageCode: initDataUnsafe.user.language_code,\r\n isPremium: initDataUnsafe.user.is_premium || false,\r\n allowsWriteToPm: initDataUnsafe.user.allows_write_to_pm || false,\r\n },\r\n authDate: new Date().toISOString(),\r\n hash: initDataUnsafe.hash || \"\",\r\n startParam: initDataUnsafe.start_param,\r\n chatType: initDataUnsafe.chat_type,\r\n chatInstance: initDataUnsafe.chat_instance,\r\n };\r\n\r\n return userInfo as TelegramUserInfo;\r\n } catch (error) {\r\n console.warn(\"获取Telegram用户信息失败:\", error);\r\n return null;\r\n }\r\n}\r\n\r\n/** Cookie 工具 **/\r\nfunction readCookie(name: string): string | null {\r\n if (typeof document === \"undefined\") return null;\r\n const match = document.cookie.match(\r\n new RegExp(\r\n \"(?:^|; )\" + name.replace(/([.$?*|{}()\\[\\]\\\\/+^])/g, \"\\\\$1\") + \"=([^;]*)\"\r\n )\r\n );\r\n return match ? decodeURIComponent(match[1]) : null;\r\n}\r\n\r\nfunction writeCookie(name: string, value: string, days = 365 * 2) {\r\n if (typeof document === \"undefined\") return;\r\n const date = new Date();\r\n date.setTime(date.getTime() + days * 24 * 60 * 60 * 1000);\r\n const expires = \"; expires=\" + date.toUTCString();\r\n document.cookie = `${encodeURIComponent(name)}=${encodeURIComponent(\r\n value\r\n )}${expires}; path=/`;\r\n}\r\n\r\nfunction generateNumericId(): number {\r\n // 生成稳定的数值 ID(53-bit 安全整数范围内)\r\n const rand = Math.floor(Math.random() * 1e9);\r\n const time = Date.now() % 1e9;\r\n const id = Number(\r\n String(time).padStart(9, \"0\") + String(rand).padStart(9, \"0\")\r\n );\r\n return id;\r\n}\r\n\r\n/**\r\n * 基于 Cookie 的匿名浏览器用户(非 Telegram 环境使用)\r\n * - 会在 cookie 中持久化 uid,下次复用\r\n */\r\nexport function getAnonymousBrowserUser(\r\n cookieName = \"tg_tracking_uid\"\r\n): TelegramUserInfo {\r\n let uidStr = readCookie(cookieName);\r\n if (!uidStr) {\r\n const uid = generateNumericId();\r\n uidStr = String(uid);\r\n writeCookie(cookieName, uidStr);\r\n }\r\n const uidNum =\r\n Number(uidStr.replace(/\\D/g, \"\").slice(0, 15)) || generateNumericId();\r\n const lang =\r\n (typeof navigator !== \"undefined\" &&\r\n (navigator.language || (navigator as any).userLanguage)) ||\r\n \"en\";\r\n\r\n return {\r\n user: {\r\n id: uidNum,\r\n firstName: \"Guest\",\r\n lastName: \"\",\r\n username: `guest_${uidStr.slice(-6)}`,\r\n languageCode: lang.toLowerCase(),\r\n isPremium: false,\r\n allowsWriteToPm: false,\r\n },\r\n authDate: new Date().toISOString(),\r\n hash: \"anonymous_cookie_user\",\r\n startParam: \"browser_guest\",\r\n chatType: \"sender\",\r\n chatInstance: \"\",\r\n } as TelegramUserInfo;\r\n}\r\n\r\n/**\r\n * 获取默认的 mock 用户信息(保留旧逻辑)\r\n */\r\nexport function getDefaultMockUser(): TelegramUserInfo {\r\n return {\r\n user: {\r\n id: 2077220643,\r\n firstName: \"Mock\",\r\n lastName: \"User\",\r\n username: \"mock_user_demo\",\r\n languageCode: \"zh-hans\",\r\n isPremium: true,\r\n allowsWriteToPm: true,\r\n },\r\n authDate: new Date().toISOString(),\r\n hash: \"mock_hash_for_demo_purpose\",\r\n startParam: \"demo_start_param\",\r\n chatType: \"sender\",\r\n chatInstance: \"-245769840322609948\",\r\n } as TelegramUserInfo;\r\n}\r\n"]}
@@ -17,7 +17,7 @@ export interface TelegramUserInfo {
17
17
  allowsWriteToPm?: boolean;
18
18
  isPremium?: boolean;
19
19
  };
20
- authDate?: number;
20
+ authDate?: string;
21
21
  hash?: string;
22
22
  startParam?: string;
23
23
  chatType?: string;
@@ -1 +1 @@
1
- {"version":3,"file":"types.js","sourceRoot":"","sources":["../../src/sdk/types.ts"],"names":[],"mappings":"AAAA,MAAM,CAAN,IAAY,cAIX;AAJD,WAAY,cAAc;IACxB,sEAAoD,CAAA;IACpD,sEAAoD,CAAA;IACpD,8DAA4C,CAAA;AAC9C,CAAC,EAJW,cAAc,KAAd,cAAc,QAIzB","sourcesContent":["export enum AdPositionName {\r\n GameRewardedAdPosition = \"game_rewarded_ad_position\",\r\n TaskRewardedAdPosition = \"task_rewarded_ad_position\",\r\n TaskListAdPosition = \"task_list_ad_position\",\r\n}\r\n\r\nexport interface TelegramUserUnsafeInitData {\r\n [key: string]: unknown;\r\n}\r\n\r\nexport interface TelegramUserInfo {\r\n user: {\r\n id: number;\r\n firstName?: string;\r\n lastName?: string;\r\n username?: string;\r\n photoUrl?: string;\r\n languageCode?: string;\r\n allowsWriteToPm?: boolean;\r\n isPremium?: boolean;\r\n };\r\n authDate?: number;\r\n hash?: string;\r\n startParam?: string;\r\n chatType?: string;\r\n chatInstance?: string;\r\n [key: string]: unknown;\r\n}\r\n\r\nexport interface SDKInitOptions {\r\n /** 自定义用户信息(可选) */\r\n customUser?: TelegramUserInfo;\r\n /** 本地存储 Key 前缀,避免冲突 */\r\n storageKeyPrefix?: string;\r\n /** 自定义接口地址(可选)。不传则使用默认正式环境 */\r\n baseURL?: string;\r\n /** 可选:回调校验用 */\r\n appId?: string;\r\n /** 可选:SDK 初始化鉴权成功后的服务端回调地址 */\r\n notifyUrl?: string;\r\n /** 可选:TON Connect manifest 文件地址;未传则使用默认测试清单 */\r\n tonConnectManifestUrl?: string;\r\n}\r\n\r\nexport interface AuthResponseData {\r\n token: string;\r\n [key: string]: unknown;\r\n}\r\n\r\nexport interface APIResponse<T> {\r\n code: number;\r\n msg: string;\r\n timestamp?: number;\r\n datetime?: string;\r\n data: T;\r\n}\r\n\r\nexport interface AdConfigItem {\r\n id: number;\r\n adTypeId: number;\r\n adPlatformId: number;\r\n title: string;\r\n name: string;\r\n spaceId: string;\r\n rewardRate: number;\r\n payout: number;\r\n description?: string | null;\r\n status: number;\r\n enable: number;\r\n createDatetime: string;\r\n updateDatetime: string;\r\n adId: number;\r\n adPositionId: number;\r\n adPositionName: string;\r\n adPositionTitle: string;\r\n rank: number;\r\n adPlatformName: string; // e.g., monetag\r\n adPlatformTitle: string; // e.g., Monetag\r\n appId?: string | null;\r\n appSecret?: string | null;\r\n appUrl?: string | null;\r\n adPlatformConfig?: unknown | null;\r\n adTypeName: string; // e.g., interstitial_ad | popup_ad | inapp\r\n adTypeTitle: string;\r\n adRewardAmount?: number;\r\n}\r\n\r\nexport interface CreateAdParams {\r\n adId: number;\r\n adPositionId: number;\r\n tournamentId?: number;\r\n groupId?: number;\r\n}\r\n\r\nexport interface BindWalletResponseData {\r\n id: number;\r\n authId: number;\r\n authHash: string;\r\n authDatetime: string;\r\n chatInstance: string;\r\n firstName: string;\r\n lastName: string;\r\n username: string;\r\n nickname: string | null;\r\n allowsWritePm: number;\r\n languageCode: string;\r\n isPremiumUser: number;\r\n avatarUrl: string | null;\r\n email: string | null;\r\n phone: string | null;\r\n referrerId: number | null;\r\n referrerAuthId: number | null;\r\n walletAddress: string;\r\n usdtWalletAddress: string;\r\n points: number;\r\n buyContribution: number;\r\n revenuesContribution: number;\r\n taskContribution: number;\r\n status: number;\r\n enable: number;\r\n}\r\n\r\nexport interface AdResponseData {\r\n id: number;\r\n adTypeId: number;\r\n adPlatformId: number;\r\n title: string;\r\n name: string;\r\n spaceId: string;\r\n rewardRate: number;\r\n payout: number;\r\n description?: string | null;\r\n status: number;\r\n enable: number;\r\n createDatetime: string;\r\n updateDatetime: string;\r\n adShowId: string;\r\n start?: string[];\r\n show?: string[];\r\n error?: string[];\r\n close?: string[];\r\n reward?: string[];\r\n}\r\n\r\nexport interface MonitorUrls {\r\n start?: string[];\r\n show?: string[];\r\n error?: string[];\r\n close?: string[];\r\n reward?: string[];\r\n}\r\n\r\n// 新增:广告展示回调接口,供 SDK 用户可选传入\r\nexport interface AdCallbacks {\r\n onSuccess?: (result?: unknown) => void | Promise<void>;\r\n onError?: (error: unknown) => void | Promise<void>;\r\n}\r\n\r\nexport interface BindWalletReq {\r\n wallet: string;\r\n forceBind: boolean;\r\n}\r\n\r\nexport interface TonTransactionResult {\r\n transferHash?: string;\r\n boc?: string;\r\n raw?: unknown;\r\n}\r\n\r\nexport interface MerchantPayModeItem {\r\n id: number;\r\n title: string;\r\n name: string; // USDT | TON | STARS\r\n rate: number;\r\n nameDesc: string;\r\n}\r\n\r\nexport interface MerchantPayModeListData {\r\n payModeList: MerchantPayModeItem[];\r\n}\r\n\r\nexport interface MerchantPayCreateRequest {\r\n currencyName: string; // USDT | TON | STARS\r\n amount: number; // 单价/金额\r\n outTradeNo: string; // 商户订单号\r\n notifyUrl: string; // 回调地址\r\n attach: string; // 附加信息\r\n}\r\n\r\nexport interface MerchantPayTransferMessage {\r\n address: string;\r\n amount: string;\r\n payload?: string;\r\n}\r\n\r\nexport interface MerchantPayTransferData {\r\n validUntil: number;\r\n messages: MerchantPayTransferMessage[];\r\n}\r\n\r\nexport interface MerchantPayOrderBase {\r\n orderSn: string;\r\n transactionSn: string;\r\n outTradeNo: string;\r\n price: number | string;\r\n count: number;\r\n totalPrice: number | string;\r\n currencyId: number;\r\n currencyName: string;\r\n currencyRate: number;\r\n currencyAmount: number | string;\r\n payUrl: string | null;\r\n payExpireDatetime: string;\r\n payDatetime: string | null;\r\n finishDatetime: string | null;\r\n description: string;\r\n status: number;\r\n statusDesc: string;\r\n closeCode: string | null;\r\n closeCodeDesc: string | null;\r\n createDatetime: string;\r\n updateDatetime: string;\r\n transferHash: string | null;\r\n transactionHash: string | null;\r\n transactionLt: string | null;\r\n}\r\n\r\nexport interface MerchantPayCreateResponseData extends MerchantPayOrderBase {\r\n transferData: MerchantPayTransferData;\r\n}\r\n\r\nexport interface MerchantPayFinishRequest {\r\n orderSn: string;\r\n status: string; // success / failed / cancelled\r\n transferHash?: string;\r\n orderId?: string;\r\n}\r\n\r\nexport type MerchantPayFinishResponseData = MerchantPayOrderBase;\r\n\r\nexport interface MerchantPayQueryResultRequest {\r\n orderSn?: string;\r\n outTradeNo?: string;\r\n}\r\n\r\nexport type MerchantPayQueryResultResponseData = MerchantPayOrderBase;\r\n\r\nexport type MerchantPayNotifyRequest = MerchantPayOrderBase;\r\n\r\nexport interface TonWalletProvider {\r\n isConnected: () => boolean;\r\n connect: () => Promise<boolean>;\r\n disconnect: () => Promise<boolean>;\r\n sendTonTransaction: (\r\n transferData: MerchantPayTransferData\r\n ) => Promise<TonTransactionResult>;\r\n sendUsdtTransaction: (\r\n transferData: MerchantPayTransferData\r\n ) => Promise<TonTransactionResult>;\r\n}\r\n"]}
1
+ {"version":3,"file":"types.js","sourceRoot":"","sources":["../../src/sdk/types.ts"],"names":[],"mappings":"AAAA,MAAM,CAAN,IAAY,cAIX;AAJD,WAAY,cAAc;IACxB,sEAAoD,CAAA;IACpD,sEAAoD,CAAA;IACpD,8DAA4C,CAAA;AAC9C,CAAC,EAJW,cAAc,KAAd,cAAc,QAIzB","sourcesContent":["export enum AdPositionName {\r\n GameRewardedAdPosition = \"game_rewarded_ad_position\",\r\n TaskRewardedAdPosition = \"task_rewarded_ad_position\",\r\n TaskListAdPosition = \"task_list_ad_position\",\r\n}\r\n\r\nexport interface TelegramUserUnsafeInitData {\r\n [key: string]: unknown;\r\n}\r\n\r\nexport interface TelegramUserInfo {\r\n user: {\r\n id: number;\r\n firstName?: string;\r\n lastName?: string;\r\n username?: string;\r\n photoUrl?: string;\r\n languageCode?: string;\r\n allowsWriteToPm?: boolean;\r\n isPremium?: boolean;\r\n };\r\n authDate?: string;\r\n hash?: string;\r\n startParam?: string;\r\n chatType?: string;\r\n chatInstance?: string;\r\n [key: string]: unknown;\r\n}\r\n\r\nexport interface SDKInitOptions {\r\n /** 自定义用户信息(可选) */\r\n customUser?: TelegramUserInfo;\r\n /** 本地存储 Key 前缀,避免冲突 */\r\n storageKeyPrefix?: string;\r\n /** 自定义接口地址(可选)。不传则使用默认正式环境 */\r\n baseURL?: string;\r\n /** 可选:回调校验用 */\r\n appId?: string;\r\n /** 可选:SDK 初始化鉴权成功后的服务端回调地址 */\r\n notifyUrl?: string;\r\n /** 可选:TON Connect manifest 文件地址;未传则使用默认测试清单 */\r\n tonConnectManifestUrl?: string;\r\n}\r\n\r\nexport interface AuthResponseData {\r\n token: string;\r\n [key: string]: unknown;\r\n}\r\n\r\nexport interface APIResponse<T> {\r\n code: number;\r\n msg: string;\r\n timestamp?: number;\r\n datetime?: string;\r\n data: T;\r\n}\r\n\r\nexport interface AdConfigItem {\r\n id: number;\r\n adTypeId: number;\r\n adPlatformId: number;\r\n title: string;\r\n name: string;\r\n spaceId: string;\r\n rewardRate: number;\r\n payout: number;\r\n description?: string | null;\r\n status: number;\r\n enable: number;\r\n createDatetime: string;\r\n updateDatetime: string;\r\n adId: number;\r\n adPositionId: number;\r\n adPositionName: string;\r\n adPositionTitle: string;\r\n rank: number;\r\n adPlatformName: string; // e.g., monetag\r\n adPlatformTitle: string; // e.g., Monetag\r\n appId?: string | null;\r\n appSecret?: string | null;\r\n appUrl?: string | null;\r\n adPlatformConfig?: unknown | null;\r\n adTypeName: string; // e.g., interstitial_ad | popup_ad | inapp\r\n adTypeTitle: string;\r\n adRewardAmount?: number;\r\n}\r\n\r\nexport interface CreateAdParams {\r\n adId: number;\r\n adPositionId: number;\r\n tournamentId?: number;\r\n groupId?: number;\r\n}\r\n\r\nexport interface BindWalletResponseData {\r\n id: number;\r\n authId: number;\r\n authHash: string;\r\n authDatetime: string;\r\n chatInstance: string;\r\n firstName: string;\r\n lastName: string;\r\n username: string;\r\n nickname: string | null;\r\n allowsWritePm: number;\r\n languageCode: string;\r\n isPremiumUser: number;\r\n avatarUrl: string | null;\r\n email: string | null;\r\n phone: string | null;\r\n referrerId: number | null;\r\n referrerAuthId: number | null;\r\n walletAddress: string;\r\n usdtWalletAddress: string;\r\n points: number;\r\n buyContribution: number;\r\n revenuesContribution: number;\r\n taskContribution: number;\r\n status: number;\r\n enable: number;\r\n}\r\n\r\nexport interface AdResponseData {\r\n id: number;\r\n adTypeId: number;\r\n adPlatformId: number;\r\n title: string;\r\n name: string;\r\n spaceId: string;\r\n rewardRate: number;\r\n payout: number;\r\n description?: string | null;\r\n status: number;\r\n enable: number;\r\n createDatetime: string;\r\n updateDatetime: string;\r\n adShowId: string;\r\n start?: string[];\r\n show?: string[];\r\n error?: string[];\r\n close?: string[];\r\n reward?: string[];\r\n}\r\n\r\nexport interface MonitorUrls {\r\n start?: string[];\r\n show?: string[];\r\n error?: string[];\r\n close?: string[];\r\n reward?: string[];\r\n}\r\n\r\n// 新增:广告展示回调接口,供 SDK 用户可选传入\r\nexport interface AdCallbacks {\r\n onSuccess?: (result?: unknown) => void | Promise<void>;\r\n onError?: (error: unknown) => void | Promise<void>;\r\n}\r\n\r\nexport interface BindWalletReq {\r\n wallet: string;\r\n forceBind: boolean;\r\n}\r\n\r\nexport interface TonTransactionResult {\r\n transferHash?: string;\r\n boc?: string;\r\n raw?: unknown;\r\n}\r\n\r\nexport interface MerchantPayModeItem {\r\n id: number;\r\n title: string;\r\n name: string; // USDT | TON | STARS\r\n rate: number;\r\n nameDesc: string;\r\n}\r\n\r\nexport interface MerchantPayModeListData {\r\n payModeList: MerchantPayModeItem[];\r\n}\r\n\r\nexport interface MerchantPayCreateRequest {\r\n currencyName: string; // USDT | TON | STARS\r\n amount: number; // 单价/金额\r\n outTradeNo: string; // 商户订单号\r\n notifyUrl: string; // 回调地址\r\n attach: string; // 附加信息\r\n}\r\n\r\nexport interface MerchantPayTransferMessage {\r\n address: string;\r\n amount: string;\r\n payload?: string;\r\n}\r\n\r\nexport interface MerchantPayTransferData {\r\n validUntil: number;\r\n messages: MerchantPayTransferMessage[];\r\n}\r\n\r\nexport interface MerchantPayOrderBase {\r\n orderSn: string;\r\n transactionSn: string;\r\n outTradeNo: string;\r\n price: number | string;\r\n count: number;\r\n totalPrice: number | string;\r\n currencyId: number;\r\n currencyName: string;\r\n currencyRate: number;\r\n currencyAmount: number | string;\r\n payUrl: string | null;\r\n payExpireDatetime: string;\r\n payDatetime: string | null;\r\n finishDatetime: string | null;\r\n description: string;\r\n status: number;\r\n statusDesc: string;\r\n closeCode: string | null;\r\n closeCodeDesc: string | null;\r\n createDatetime: string;\r\n updateDatetime: string;\r\n transferHash: string | null;\r\n transactionHash: string | null;\r\n transactionLt: string | null;\r\n}\r\n\r\nexport interface MerchantPayCreateResponseData extends MerchantPayOrderBase {\r\n transferData: MerchantPayTransferData;\r\n}\r\n\r\nexport interface MerchantPayFinishRequest {\r\n orderSn: string;\r\n status: string; // success / failed / cancelled\r\n transferHash?: string;\r\n orderId?: string;\r\n}\r\n\r\nexport type MerchantPayFinishResponseData = MerchantPayOrderBase;\r\n\r\nexport interface MerchantPayQueryResultRequest {\r\n orderSn?: string;\r\n outTradeNo?: string;\r\n}\r\n\r\nexport type MerchantPayQueryResultResponseData = MerchantPayOrderBase;\r\n\r\nexport type MerchantPayNotifyRequest = MerchantPayOrderBase;\r\n\r\nexport interface TonWalletProvider {\r\n isConnected: () => boolean;\r\n connect: () => Promise<boolean>;\r\n disconnect: () => Promise<boolean>;\r\n sendTonTransaction: (\r\n transferData: MerchantPayTransferData\r\n ) => Promise<TonTransactionResult>;\r\n sendUsdtTransaction: (\r\n transferData: MerchantPayTransferData\r\n ) => Promise<TonTransactionResult>;\r\n}\r\n"]}
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "hm-tracking-sdk",
3
- "version": "0.2.0",
3
+ "version": "0.2.1",
4
4
  "private": false,
5
5
  "description": "Telegram tracking SDK for Web/Miniapp with TON/Stars payment integration.",
6
6
  "license": "MIT",