@grabjs/superapp-sdk 2.0.0-beta.29 → 2.0.0-beta.31

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
package/dist/index.esm.js CHANGED
@@ -4,4 +4,4 @@
4
4
  * This source code is licensed under the MIT license found in the LICENSE file in the root
5
5
  * directory of this source tree.
6
6
  */
7
- var e,t={exports:{}},n=(e||(e=1,function(e){function t(e){var t=!1;return{isUnsubscribed:function(){return t},unsubscribe:function(){t||(e(),t=!0)}}}function n(e){return{subscribe:e,then:function(t,n){return new Promise(function(r,s){try{var o=null,a=!1;o=e({next:function(e){r(null==t?void 0:t(e)),o&&o.unsubscribe(),a=!0}}),a&&o&&o.unsubscribe()}catch(e){null==n?s(e):r(n(e))}})}}}function r(r,s){return s.funcNameToWrap,function(r,s){var o=s.callbackNameFunc,a=s.funcToWrap;return n(function(n){var s,i=o();return r[i]=function(t){if(function(e){for(var t=[],n=1;n<arguments.length;n++)t[n-1]=arguments[n];if(!e)return!1;var r=function(e){return Object.keys(e).concat(Object.getOwnPropertyNames(Object.getPrototypeOf(e)))}(e);return t.every(function(e){return 0<=r.indexOf(e)})}(t.result,"event"))t.result.event===e.StreamEvent.STREAM_TERMINATED&&s.unsubscribe();else{var r=t.result,o=t.error,a=t.status_code;n&&n.next&&n.next({result:null===r?void 0:r,error:null===o?void 0:o,status_code:null===a?void 0:a})}},a(i),s=t(function(){r[i]=void 0,n&&n.complete&&n.complete()})})}(r,function(e,t){var n={};for(var r in e)Object.prototype.hasOwnProperty.call(e,r)&&t.indexOf(r)<0&&(n[r]=e[r]);if(null!=e&&"function"==typeof Object.getOwnPropertySymbols){var s=0;for(r=Object.getOwnPropertySymbols(e);s<r.length;s++)t.indexOf(r[s])<0&&(n[r[s]]=e[r[s]])}return n}(s,["funcNameToWrap"]))}(e.StreamEvent||(e.StreamEvent={})).STREAM_TERMINATED="STREAM_TERMINATED",e.createDataStream=n,e.createSubscription=t,e.getModuleEnvironment=function(e,t){return e[t]?"android":e.webkit&&e.webkit.messageHandlers&&e.webkit.messageHandlers[t]?"ios":void 0},e.wrapModule=function(e,t){var n;e[(n=t,"Wrapped"+n)]=function(e,t,n){return{invoke:function(s,o){return r(e,{funcNameToWrap:s,callbackNameFunc:function(){return function(e,t){var n=t.moduleName,r=t.funcName,s=0;return function(){for(var t,o,a="";(a=(t={moduleName:n,funcName:r,requestID:s}).moduleName+"_"+t.funcName+"Callback"+(null!==(o=t.requestID)?"_"+o:""))in e;)s+=1;return s+=1,a}()}(e,{moduleName:t,funcName:s})},funcToWrap:function(e){return n({callback:e,method:s,module:t,parameters:null!=o?o:{}})}})}}}(e,t,function(n){if(e[t]&&e[t][n.method]instanceof Function)e[t][n.method](JSON.stringify(n));else{if(!(e.webkit&&e.webkit.messageHandlers&&e.webkit.messageHandlers[t]))throw new Error("Unexpected method '"+n.method+"' for module '"+t+"'");e.webkit.messageHandlers[t].postMessage(n)}})},Object.defineProperty(e,"__esModule",{value:!0})}(t.exports)),t.exports);function r(e){return{lang:e?.lang??void 0,message:e?.message,abortEarly:e?.abortEarly??void 0,abortPipeEarly:e?.abortPipeEarly??void 0}}function s(e){const t=typeof e;return"string"===t?`"${e}"`:"number"===t||"bigint"===t||"boolean"===t?`${e}`:"object"===t||"function"===t?(e&&Object.getPrototypeOf(e)?.constructor?.name)??"null":t}function o(e,t,n,r,o){const a=o&&"input"in o?o.input:n.value,i=o?.expected??e.expects??null,c=o?.received??s(a),u={kind:e.kind,type:e.type,input:a,expected:i,received:c,message:`Invalid ${t}: ${i?`Expected ${i} but r`:"R"}eceived ${c}`,requirement:e.requirement,path:o?.path,issues:o?.issues,lang:r.lang,abortEarly:r.abortEarly,abortPipeEarly:r.abortPipeEarly},d="schema"===e.kind,l=o?.message??e.message??(e.reference,void u.lang)??(d?void u.lang:null)??r.message??void u.lang;void 0!==l&&(u.message="function"==typeof l?l(u):l),d&&(n.typed=!1),n.issues?n.issues.push(u):n.issues=[u]}function a(e){return{version:1,vendor:"valibot",validate:t=>e["~run"]({value:t},r())}}function i(e,t){return Object.hasOwn(e,t)&&"__proto__"!==t&&"prototype"!==t&&"constructor"!==t}function c(e,t){const n=[...new Set(e)];return n.length>1?`(${n.join(` ${t} `)})`:n[0]??"never"}function u(e,t){return{kind:"validation",type:"min_length",reference:u,async:!1,expects:`>=${e}`,requirement:e,message:t,"~run"(e,t){return e.typed&&e.value.length<this.requirement&&o(this,"length",e,t,{received:`${e.value.length}`}),e}}}function d(e){return{kind:"validation",type:"url",reference:d,async:!1,expects:null,requirement(e){try{return new URL(e),!0}catch{return!1}},message:e,"~run"(e,t){return e.typed&&!this.requirement(e.value)&&o(this,"URL",e,t),e}}}function l(e,t,n){return"function"==typeof e.fallback?e.fallback(t,n):e.fallback}function p(e,t,n){return"function"==typeof e.default?e.default(t,n):e.default}function h(e){return{kind:"schema",type:"boolean",reference:h,expects:"boolean",async:!1,message:e,get"~standard"(){return a(this)},"~run"(e,t){return"boolean"==typeof e.value?e.typed=!0:o(this,"type",e,t),e}}}function m(e,t){return{kind:"schema",type:"literal",reference:m,expects:s(e),async:!1,literal:e,message:t,get"~standard"(){return a(this)},"~run"(e,t){return e.value===this.literal?e.typed=!0:o(this,"type",e,t),e}}}function f(e,t){return{kind:"schema",type:"nullable",reference:f,expects:`(${e.expects} | null)`,async:!1,wrapped:e,default:t,get"~standard"(){return a(this)},"~run"(e,t){return null===e.value&&(void 0!==this.default&&(e.value=p(this,e,t)),null===e.value)?(e.typed=!0,e):this.wrapped["~run"](e,t)}}}function v(e){return{kind:"schema",type:"number",reference:v,expects:"number",async:!1,message:e,get"~standard"(){return a(this)},"~run"(e,t){return"number"!=typeof e.value||isNaN(e.value)?o(this,"type",e,t):e.typed=!0,e}}}function y(e,t){return{kind:"schema",type:"object",reference:y,expects:"Object",async:!1,entries:e,message:t,get"~standard"(){return a(this)},"~run"(e,t){const n=e.value;if(n&&"object"==typeof n){e.typed=!0,e.value={};for(const r in this.entries){const s=this.entries[r];if(r in n||("exact_optional"===s.type||"optional"===s.type||"nullish"===s.type)&&void 0!==s.default){const o=r in n?n[r]:p(s),a=s["~run"]({value:o},t);if(a.issues){const s={type:"object",origin:"value",input:n,key:r,value:o};for(const t of a.issues)t.path?t.path.unshift(s):t.path=[s],e.issues?.push(t);if(e.issues||(e.issues=a.issues),t.abortEarly){e.typed=!1;break}}a.typed||(e.typed=!1),e.value[r]=a.value}else if(void 0!==s.fallback)e.value[r]=l(s);else if("exact_optional"!==s.type&&"optional"!==s.type&&"nullish"!==s.type&&(o(this,"key",e,t,{input:void 0,expected:`"${r}"`,path:[{type:"object",origin:"key",input:n,key:r,value:n[r]}]}),t.abortEarly))break}}else o(this,"type",e,t);return e}}}function g(e,t){return{kind:"schema",type:"optional",reference:g,expects:`(${e.expects} | undefined)`,async:!1,wrapped:e,default:t,get"~standard"(){return a(this)},"~run"(e,t){return void 0===e.value&&(void 0!==this.default&&(e.value=p(this,e,t)),void 0===e.value)?(e.typed=!0,e):this.wrapped["~run"](e,t)}}}function w(e,t){return{kind:"schema",type:"picklist",reference:w,expects:c(e.map(s),"|"),async:!1,options:e,message:t,get"~standard"(){return a(this)},"~run"(e,t){return this.options.includes(e.value)?e.typed=!0:o(this,"type",e,t),e}}}function k(e,t,n){return{kind:"schema",type:"record",reference:k,expects:"Object",async:!1,key:e,value:t,message:n,get"~standard"(){return a(this)},"~run"(e,t){const n=e.value;if(n&&"object"==typeof n){e.typed=!0,e.value={};for(const r in n)if(i(n,r)){const s=n[r],o=this.key["~run"]({value:r},t);if(o.issues){const a={type:"object",origin:"key",input:n,key:r,value:s};for(const t of o.issues)t.path=[a],e.issues?.push(t);if(e.issues||(e.issues=o.issues),t.abortEarly){e.typed=!1;break}}const a=this.value["~run"]({value:s},t);if(a.issues){const o={type:"object",origin:"value",input:n,key:r,value:s};for(const t of a.issues)t.path?t.path.unshift(o):t.path=[o],e.issues?.push(t);if(e.issues||(e.issues=a.issues),t.abortEarly){e.typed=!1;break}}o.typed&&a.typed||(e.typed=!1),o.typed&&(e.value[o.value]=a.value)}}else o(this,"type",e,t);return e}}}function b(e){return{kind:"schema",type:"string",reference:b,expects:"string",async:!1,message:e,get"~standard"(){return a(this)},"~run"(e,t){return"string"==typeof e.value?e.typed=!0:o(this,"type",e,t),e}}}function S(e){let t;if(e)for(const n of e)t?t.push(...n.issues):t=n.issues;return t}function x(e,t){return{kind:"schema",type:"union",reference:x,expects:c(e.map(e=>e.expects),"|"),async:!1,options:e,message:t,get"~standard"(){return a(this)},"~run"(e,t){let n,r,s;for(const o of this.options){const a=o["~run"]({value:e.value},t);if(a.typed){if(!a.issues){n=a;break}r?r.push(a):r=[a]}else s?s.push(a):s=[a]}if(n)return n;if(r){if(1===r.length)return r[0];o(this,"type",e,t,{issues:S(r)}),e.typed=!0}else{if(1===s?.length)return s[0];o(this,"type",e,t,{issues:S(s)})}return e}}}function _(){return{kind:"schema",type:"unknown",reference:_,expects:"unknown",async:!1,get"~standard"(){return a(this)},"~run":e=>(e.typed=!0,e)}}function U(...e){return{...e[0],pipe:e,get"~standard"(){return a(this)},"~run"(t,n){for(const r of e)if("metadata"!==r.kind){if(t.issues&&("schema"===r.kind||"transformation"===r.kind)){t.typed=!1;break}t.issues&&(n.abortEarly||n.abortPipeEarly)||(t=r["~run"](t,n))}return t}}}function $(e){return"object"==typeof e&&null!==e&&"message"in e&&"string"==typeof e.message}function C(){if("undefined"==typeof window||!window.navigator)return null;const e=window.navigator.userAgent;return e?function(e){if(!e||"string"!=typeof e)return null;const t=e.match(/(Grab|GrabBeta|GrabBetaDebug|GrabTaxi|GrabEarlyAccess)\/v?([0-9]+)\.([0-9]+)\.([0-9]+) \(.*(Android|iOS).*\)/i);return t?{appName:t[1],version:{major:Number(t[2]),minor:Number(t[3]),patch:Number(t[4])},platform:t[5]}:null}(e):null}class E{get wrappedModule(){return window[`Wrapped${this.name}`]}constructor(e){if(this.name=e,!this.wrappedModule)try{n.wrapModule(window,this.name)}catch(e){throw new Error(`Failed to initialize ${this.name}${$(e)?`: ${e.message}`:""}`,{cause:e})}}validate(e,t){const n=function(e,t){const n=e["~run"]({value:t},r(void 0));return{typed:n.typed,success:!n.issues,output:n.value,issues:n.issues}}(e,t);return n.success?null:n.issues.map(e=>{const t=e.path?.map(e=>String(e.key)).join(".");return t?`${t}: ${e.message}`:e.message}).join(", ")}checkSupport(e){const t=C();return t?e(t)?null:{status_code:426,error:"Upgrade Required: This method requires a newer version of the Grab app"}:{status_code:501,error:"Not implemented: This method requires the Grab app environment"}}async invoke(e){const{method:t,params:n}=e;try{return C()?await this.wrappedModule.invoke(t,n):{status_code:501,error:"Not implemented: This method requires the Grab app environment"}}catch(e){return{status_code:500,error:`Failed to invoke method: ${$(e)?e.message:"Unknown error"}`}}}createErrorStream(e){return{subscribe:t=>(t?.next?.(e),t?.complete?.(),{isUnsubscribed:()=>!0,unsubscribe:()=>{}}),then:t=>Promise.resolve(e).then(t)}}invokeStream(e){const{method:t,params:n}=e;try{return C()?this.wrappedModule.invoke(t,n):this.createErrorStream({status_code:501,error:"Not implemented: This method requires the Grab app environment"})}catch(e){return this.createErrorStream({status_code:500,error:`Failed to invoke method: ${$(e)?e.message:"Unknown error"}`})}}}function D(e){return 200===e.status_code||204===e.status_code}function M(e){return 200===e.status_code}function I(e){return 204===e.status_code}function A(e){return 302===e.status_code}function K(e){return 302===e.status_code}function N(e){const t=e.status_code;return 400===t||401===t||403===t||404===t||424===t||426===t}function T(e){return 500===e.status_code||501===e.status_code}function O(e){return"error"in e}const R=e=>y({status_code:m(e),error:b()}),j=e=>y({status_code:m(200),result:e}),P=y({status_code:m(204)}),B=y({status_code:m(200)}),z=y({status_code:m(302)}),L=y({title:g(b())}),G=y({qrCode:b()}),W=x([j(G),P,R(400),R(403),R(500),R(501)]);class q extends E{constructor(){super("CameraModule")}async scanQRCode(e){const t=this.validate(L,e);if(t)return{status_code:400,error:t};const n=await this.invoke({method:"scanQRCode",params:e}),r=this.validate(W,n);return r&&console.warn(`[SDK:scanQRCode] Unexpected response shape: ${r}`),n}}const F=k(b(),_()),V=y({transactionID:b(),status:w(["success","failure","pending","userInitiatedCancel"]),errorMessage:g(b()),errorCode:g(b())}),H=x([j(V),R(400),R(500),R(501)]);class Q extends E{constructor(){super("CheckoutModule")}async triggerCheckout(e){const t=this.validate(F,e);if(t)return{status_code:400,error:t};const n=await this.invoke({method:"triggerCheckout",params:e}),r=this.validate(H,n);return r&&console.warn(`[SDK:triggerCheckout] Unexpected response shape: ${r}`),n}}const J={HOMEPAGE:"HOMEPAGE",CHECKOUT_PAGE:"CHECKOUT_PAGE",BOOKING_COMPLETION:"BOOKING_COMPLETION",CUSTOM:"CUSTOM"},Y={DEFAULT:"DEFAULT"},X={TRANSACTION_AMOUNT:"transaction_amount",TRANSACTION_CURRENCY:"transaction_currency",PAGE:"page"},Z=x([P,R(400),R(500),R(501)]),ee=x([B,R(400),R(500),R(501)]),te=x([B,R(500),R(501)]),ne=te,re=te,se=te,oe=te,ae=te,ie=te,ce=te,ue=x([B,R(400),R(500),R(501)]),de=x([B,R(500),R(501)]),le=y({state:U(b(),u(1)),name:U(b(),u(1)),data:g(k(b(),_()))}),pe=x([B,R(400),R(500),R(501)]),he=y({connected:h()}),me=x([j(he),R(404)]),fe=y({result:b()}),ve=x([j(fe),R(500),R(501)]);class ye extends E{constructor(){super("ContainerModule")}async setBackgroundColor(e){const t=await this.invoke({method:"setBackgroundColor",params:{backgroundColor:e}}),n=this.validate(Z,t);return n&&console.warn(`[SDK:setBackgroundColor] Unexpected response shape: ${n}`),t}async setTitle(e){const t=await this.invoke({method:"setTitle",params:{title:e}}),n=this.validate(ee,t);return n&&console.warn(`[SDK:setTitle] Unexpected response shape: ${n}`),t}async hideBackButton(){const e=await this.invoke({method:"hideBackButton"}),t=this.validate(te,e);return t&&console.warn(`[SDK:hideBackButton] Unexpected response shape: ${t}`),e}async showBackButton(){const e=await this.invoke({method:"showBackButton"}),t=this.validate(ne,e);return t&&console.warn(`[SDK:showBackButton] Unexpected response shape: ${t}`),e}async hideRefreshButton(){const e=await this.invoke({method:"hideRefreshButton"}),t=this.validate(re,e);return t&&console.warn(`[SDK:hideRefreshButton] Unexpected response shape: ${t}`),e}async showRefreshButton(){const e=await this.invoke({method:"showRefreshButton"}),t=this.validate(se,e);return t&&console.warn(`[SDK:showRefreshButton] Unexpected response shape: ${t}`),e}async close(){const e=await this.invoke({method:"close"}),t=this.validate(oe,e);return t&&console.warn(`[SDK:close] Unexpected response shape: ${t}`),e}async onContentLoaded(){const e=await this.invoke({method:"onContentLoaded"}),t=this.validate(ae,e);return t&&console.warn(`[SDK:onContentLoaded] Unexpected response shape: ${t}`),e}async showLoader(){const e=await this.invoke({method:"showLoader"}),t=this.validate(ie,e);return t&&console.warn(`[SDK:showLoader] Unexpected response shape: ${t}`),e}async hideLoader(){const e=await this.invoke({method:"hideLoader"}),t=this.validate(ce,e);return t&&console.warn(`[SDK:hideLoader] Unexpected response shape: ${t}`),e}async openExternalLink(e){const t=await this.invoke({method:"openExternalLink",params:{url:e}}),n=this.validate(ue,t);return n&&console.warn(`[SDK:openExternalLink] Unexpected response shape: ${n}`),t}async onCtaTap(e){const t=await this.invoke({method:"onCtaTap",params:{action:e}}),n=this.validate(de,t);return n&&console.warn(`[SDK:onCtaTap] Unexpected response shape: ${n}`),t}async sendAnalyticsEvent(e){const t=this.validate(le,e);if(t)return{status_code:400,error:t};const n=await this.invoke({method:"sendAnalyticsEvent",params:{state:e.state,name:e.name,data:e.data?JSON.stringify(e.data):null}}),r=this.validate(pe,n);return r&&console.warn(`[SDK:sendAnalyticsEvent] Unexpected response shape: ${r}`),n}async isConnected(){return null!==C()?{status_code:200,result:{connected:!0}}:{status_code:404,error:"Not connected to Grab app"}}async getSessionParams(){const e=await this.invoke({method:"getSessionParams"}),t=this.validate(ve,e);return t&&console.warn(`[SDK:getSessionParams] Unexpected response shape: ${t}`),e}}const ge=h(),we=x([j(ge),R(500),R(501)]);class ke extends E{constructor(){super("DeviceCapabilityModule")}async isEsimSupported(){const e=await this.invoke({method:"isEsimSupported"}),t=this.validate(we,e);return t&&console.warn(`[SDK:isEsimSupported] Unexpected response shape: ${t}`),e}}const be=y({fileUrl:U(b(),d()),fileName:U(b(),u(1))}),Se=x([P,R(400),R(500),R(501)]);class xe extends E{constructor(){super("FileModule")}async downloadFile(e){const t=this.validate(be,e);if(t)return{status_code:400,error:t};const n=await this.invoke({method:"downloadFile",params:e}),r=this.validate(Se,n);return r&&console.warn(`[SDK:downloadFile] Unexpected response shape: ${r}`),n}}function _e(e){const t=new Uint32Array(e);crypto.getRandomValues(t);let n="";for(let r=0;r<e;r+=1)n+="ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789".charAt(t[r]%62);return n}async function Ue(e){const t=(new TextEncoder).encode(e);return function(e){const t=new Uint8Array(e);let n="";for(let e=0;e<t.byteLength;e+=1)n+=String.fromCharCode(t[e]);return btoa(n).replace(/=/g,"").replace(/\+/g,"-").replace(/\//g,"_")}(await crypto.subtle.digest("SHA-256",t))}function $e(e,t){return e.major!==t.major?e.major>t.major:e.minor!==t.minor?e.minor>t.minor:e.patch>=t.patch}const Ce="grabid",Ee={staging:"https://partner-api.stg-myteksi.com/grabid/v1/oauth2/.well-known/openid-configuration",production:"https://partner-api.grab.com/grabid/v1/oauth2/.well-known/openid-configuration"};class De extends Error{constructor(e,t){super(e),this.cause=t,this.name="AuthorizationConfigurationError"}}const Me=y({clientId:U(b(),u(1)),redirectUri:U(b(),d()),scope:U(b(),u(1)),environment:w(["staging","production"]),responseMode:g(w(["redirect","in_place"]))}),Ie=y({code:b(),state:b()}),Ae=x([j(Ie),P,z,R(400),R(401),R(403),R(500),R(501)]),Ke=y({state:b(),codeVerifier:b(),nonce:b(),redirectUri:b()}),Ne=x([j(Ke),P,R(400)]),Te=P;class Oe extends E{constructor(){super("IdentityModule")}async fetchAuthorizationEndpoint(e){const t=Ee[e];if(!t)throw new Error(`Invalid environment: ${e}. Must be 'staging' or 'production'`);try{const e=await fetch(t);if(!e.ok)throw console.error(`Failed to fetch OpenID configuration from ${t}: ${e.status} ${e.statusText}`),new De("Failed to fetch authorization configuration");const n=await e.json();if(!n.authorization_endpoint)throw console.error("authorization_endpoint not found in OpenID configuration response"),new De("Invalid authorization configuration");return n.authorization_endpoint}catch(e){if(console.error("Error fetching authorization endpoint:",e),e instanceof De)throw e;throw new Error("Something wrong happened when fetching authorization configuration",{cause:e})}}async generatePKCEArtifacts(){const e=_e(16),t=_e(32),n=(r=_e(64),btoa(r).replace(/=/g,"").replace(/\+/g,"-").replace(/\//g,"_"));var r;return{nonce:e,state:t,codeVerifier:n,codeChallenge:await Ue(n),codeChallengeMethod:"S256"}}storePKCEArtifacts(e){this.setStorageItem("nonce",e.nonce),this.setStorageItem("state",e.state),this.setStorageItem("code_verifier",e.codeVerifier),this.setStorageItem("redirect_uri",e.redirectUri)}async getAuthorizationArtifacts(){const e=this.getStorageItem("state"),t=this.getStorageItem("code_verifier"),n=this.getStorageItem("nonce"),r=this.getStorageItem("redirect_uri");return null===e&&null===t&&null===n&&null===r?{status_code:204}:null!==e&&null!==t&&null!==n&&null!==r?{status_code:200,result:{state:e,codeVerifier:t,nonce:n,redirectUri:r}}:{status_code:400,error:"Inconsistent authorization artifacts in storage"}}async clearAuthorizationArtifacts(){return window.localStorage.removeItem(`${Ce}:nonce`),window.localStorage.removeItem(`${Ce}:state`),window.localStorage.removeItem(`${Ce}:code_verifier`),window.localStorage.removeItem(`${Ce}:redirect_uri`),window.localStorage.removeItem(`${Ce}:login_return_uri`),{status_code:204}}setStorageItem(e,t){window.localStorage.setItem(`${Ce}:${e}`,t)}getStorageItem(e){return window.localStorage.getItem(`${Ce}:${e}`)}static normalizeUrl(e){const t=new URL(e);return`${t.origin}${t.pathname}`}static buildAuthorizeUrl(e,t){return`${e}?${Object.entries(t).filter(e=>void 0!==e[1]&&null!==e[1]).map(([e,t])=>`${encodeURIComponent(e)}=${encodeURIComponent(t)}`).join("&")}`}static shouldUseWebConsent(e){const t=C();return!t||"staging"!==e.environment&&!$e(t.version,{major:5,minor:396,patch:0})}async performWebAuthorization(e){let t;this.setStorageItem("login_return_uri",window.location.href),this.setStorageItem("redirect_uri",e.redirectUri);try{t=await this.fetchAuthorizationEndpoint(e.environment)}catch(e){return{status_code:400,error:$(e)?e.message:"Could not fetch authorization endpoint"}}const n={client_id:e.clientId,scope:e.scope,response_type:"code",redirect_uri:e.redirectUri,nonce:e.nonce,state:e.state,code_challenge_method:e.codeChallengeMethod,code_challenge:e.codeChallenge},r=Oe.buildAuthorizeUrl(t,n);return window.location.assign(r),{status_code:302}}async performNativeAuthorization(e){const t=await this.invoke({method:"authorize",params:{clientId:e.clientId,redirectUri:e.actualRedirectUri,scope:e.scope,nonce:e.nonce,state:e.state,codeChallenge:e.codeChallenge,codeChallengeMethod:e.codeChallengeMethod,responseMode:e.responseMode}}),n=this.validate(Ae,t);return n&&console.warn(`[SDK:authorize] Unexpected response shape: ${n}`),t}async authorize(e){const t=this.validate(Me,e);if(t)return{status_code:400,error:t};const n=await this.generatePKCEArtifacts(),r=e.responseMode||"redirect",s="in_place"===r?Oe.normalizeUrl(window.location.href):e.redirectUri;this.storePKCEArtifacts({...n,redirectUri:s});const o={clientId:e.clientId,redirectUri:e.redirectUri,scope:e.scope,nonce:n.nonce,state:n.state,codeChallenge:n.codeChallenge,codeChallengeMethod:n.codeChallengeMethod};if(Oe.shouldUseWebConsent(e))return this.performWebAuthorization({...o,environment:e.environment});try{const t=await this.performNativeAuthorization({...o,actualRedirectUri:s,responseMode:r});return 400===t.status_code||401===t.status_code||403===t.status_code||500===t.status_code||501===t.status_code?(console.error(`Native authorization returned ${t.status_code}, falling back to web flow:`,t.error),this.performWebAuthorization({...o,environment:e.environment})):t}catch(t){return console.error("Native authorization failed, falling back to web flow:",t),this.performWebAuthorization({...o,environment:e.environment})}}}const Re=b(),je=x([j(Re),R(500),R(501)]);class Pe extends E{constructor(){super("LocaleModule")}async getLanguageLocaleIdentifier(){const e=await this.invoke({method:"getLanguageLocaleIdentifier"}),t=this.validate(je,e);return t&&console.warn(`[SDK:getLanguageLocaleIdentifier] Unexpected response shape: ${t}`),e}}const Be=y({lat:v(),lng:v()}),ze=x([j(Be),R(403),R(424),R(500),R(501)]),Le=y({countryCode:b()}),Ge=x([j(Le),R(403),R(424),R(500),R(501)]);class We extends E{constructor(){super("LocationModule")}async getCoordinate(){const e=await this.invoke({method:"getCoordinate"}),t=this.validate(ze,e);return t&&console.warn(`[SDK:getCoordinate] Unexpected response shape: ${t}`),e}observeLocationChange(){return this.invokeStream({method:"observeLocationChange"})}async getCountryCode(){const e=await this.invoke({method:"getCountryCode"}),t=this.validate(Ge,e);return t&&console.warn(`[SDK:getCountryCode] Unexpected response shape: ${t}`),e}}const qe=x([B,P,R(500),R(501)]),Fe=y({eventType:w(["started","paused","ended","error"]),data:g(k(b(),_()))}),Ve=x([j(Fe),R(500),R(501)]);class He extends E{constructor(){super("MediaModule")}async playDRMContent(e){const t=await this.invoke({method:"playDRMContent",params:{data:e}}),n=this.validate(qe,t);return n&&console.warn(`[SDK:playDRMContent] Unexpected response shape: ${n}`),t}observePlayDRMContent(e){return this.invokeStream({method:"observePlayDRMContent",params:{data:e}})}}const Qe=x([P,R(500),R(501)]);class Je extends E{constructor(){super("PlatformModule")}async back(){const e=await this.invoke({method:"back"}),t=this.validate(Qe,e);return t&&console.warn(`[SDK:back] Unexpected response shape: ${t}`),e}}const Ye=y({email:b()}),Xe=x([j(Ye),R(400),R(403),R(426),R(500),R(501)]),Ze=y({email:U(b(),u(1)),otp:U(b(),u(1))}),et=x([B,R(400),R(403),R(426),R(500),R(501)]);class tt extends E{constructor(){super("ProfileModule")}async fetchEmail(){const e=this.checkSupport(e=>$e(e.version,tt.MINIMUM_VERSION));if(e)return e;const t=await this.invoke({method:"fetchEmail"}),n=this.validate(Xe,t);return n&&console.warn(`[SDK:fetchEmail] Unexpected response shape: ${n}`),t}async verifyEmail(e){const t=this.checkSupport(e=>$e(e.version,tt.MINIMUM_VERSION));if(t)return t;const n=this.validate(Ze,e);if(n)return{status_code:400,error:n};const r=await this.invoke({method:"verifyEmail",params:e}),s=this.validate(et,r);return s&&console.warn(`[SDK:verifyEmail] Unexpected response shape: ${s}`),r}}tt.MINIMUM_VERSION={major:5,minor:399,patch:0};const nt=y({module:U(b(),u(1)),method:U(b(),u(1))}),rt=y({hasAccess:h()}),st=x([j(rt),R(400),R(424),R(500),R(501)]),ot=x([B,R(424),R(500),R(501)]);class at extends E{constructor(){super("ScopeModule")}async hasAccessTo(e,t){const n={module:e,method:t},r=this.validate(nt,n);if(r)return{status_code:400,error:r};const s=await this.invoke({method:"hasAccessTo",params:n}),o=this.validate(st,s);return o&&console.warn(`[SDK:hasAccessTo] Unexpected response shape: ${o}`),s}async reloadScopes(){const e=await this.invoke({method:"reloadScopes"}),t=this.validate(ot,e);return t&&console.warn(`[SDK:reloadScopes] Unexpected response shape: ${t}`),e}}const it=x([P,R(400),R(403),R(500),R(501)]);class ct extends E{constructor(){super("SplashScreenModule")}async dismiss(){const e=await this.invoke({method:"dismiss"}),t=this.validate(it,e);return t&&console.warn(`[SDK:dismiss] Unexpected response shape: ${t}`),e}}const ut=x([P,R(400),R(500),R(501)]),dt=y({key:U(b(),u(1))}),lt=ut,pt=dt,ht=y({value:f(h())}),mt=x([j(ht),R(400),R(500),R(501)]),ft=ut,vt=dt,yt=y({value:f(v())}),gt=x([j(yt),R(400),R(500),R(501)]),wt=ut,kt=dt,bt=y({value:f(b())}),St=x([j(bt),R(400),R(500),R(501)]),xt=ut,_t=dt,Ut=y({value:f(v())}),$t=x([j(Ut),R(400),R(500),R(501)]),Ct=dt,Et=ut,Dt=x([P,R(500),R(501)]);class Mt extends E{constructor(){super("StorageModule")}async setBoolean(e,t){const n=await this.invoke({method:"setBoolean",params:{key:e,value:t}}),r=this.validate(lt,n);return r&&console.warn(`[SDK:setBoolean] Unexpected response shape: ${r}`),n}async getBoolean(e){const t={key:e},n=this.validate(pt,t);if(n)return{status_code:400,error:n};const r=await this.invoke({method:"getBoolean",params:t}),s=this.validate(mt,r);return s&&console.warn(`[SDK:getBoolean] Unexpected response shape: ${s}`),r}async setInt(e,t){const n=await this.invoke({method:"setInt",params:{key:e,value:t}}),r=this.validate(ft,n);return r&&console.warn(`[SDK:setInt] Unexpected response shape: ${r}`),n}async getInt(e){const t={key:e},n=this.validate(vt,t);if(n)return{status_code:400,error:n};const r=await this.invoke({method:"getInt",params:t}),s=this.validate(gt,r);return s&&console.warn(`[SDK:getInt] Unexpected response shape: ${s}`),r}async setString(e,t){const n=await this.invoke({method:"setString",params:{key:e,value:t}}),r=this.validate(wt,n);return r&&console.warn(`[SDK:setString] Unexpected response shape: ${r}`),n}async getString(e){const t={key:e},n=this.validate(kt,t);if(n)return{status_code:400,error:n};const r=await this.invoke({method:"getString",params:t}),s=this.validate(St,r);return s&&console.warn(`[SDK:getString] Unexpected response shape: ${s}`),r}async setDouble(e,t){const n=await this.invoke({method:"setDouble",params:{key:e,value:t}}),r=this.validate(xt,n);return r&&console.warn(`[SDK:setDouble] Unexpected response shape: ${r}`),n}async getDouble(e){const t={key:e},n=this.validate(_t,t);if(n)return{status_code:400,error:n};const r=await this.invoke({method:"getDouble",params:t}),s=this.validate($t,r);return s&&console.warn(`[SDK:getDouble] Unexpected response shape: ${s}`),r}async remove(e){const t={key:e},n=this.validate(Ct,t);if(n)return{status_code:400,error:n};const r=await this.invoke({method:"remove",params:t}),s=this.validate(Et,r);return s&&console.warn(`[SDK:remove] Unexpected response shape: ${s}`),r}async removeAll(){const e=await this.invoke({method:"removeAll"}),t=this.validate(Dt,e);return t&&console.warn(`[SDK:removeAll] Unexpected response shape: ${t}`),e}}const It=y({url:U(b(),d())}),At=x([B,R(400),R(424),R(500),R(501)]);class Kt extends E{constructor(){super("SystemWebViewKitModule")}async redirectToSystemWebView(e){const t=this.validate(It,e);if(t)return{status_code:400,error:t};const n=await this.invoke({method:"redirectToSystemWebView",params:e}),r=this.validate(At,n);return r&&console.warn(`[SDK:redirectToSystemWebView] Unexpected response shape: ${r}`),n}}const Nt=b(),Tt=x([j(Nt),P,R(500),R(501)]);class Ot extends E{constructor(){super("UserAttributesModule")}async getSelectedTravelDestination(){const e=await this.invoke({method:"getSelectedTravelDestination"}),t=this.validate(Tt,e);return t&&console.warn(`[SDK:getSelectedTravelDestination] Unexpected response shape: ${t}`),e}}export{Me as AuthorizeRequestSchema,Ae as AuthorizeResponseSchema,Ie as AuthorizeResultSchema,Qe as BackResponseSchema,E as BaseModule,q as CameraModule,Q as CheckoutModule,Te as ClearAuthorizationArtifactsResponseSchema,oe as CloseResponseSchema,X as ContainerAnalyticsEventData,Y as ContainerAnalyticsEventName,J as ContainerAnalyticsEventState,ye as ContainerModule,Fe as DRMPlaybackEventSchema,ke as DeviceCapabilityModule,it as DismissSplashScreenResponseSchema,be as DownloadFileRequestSchema,Se as DownloadFileResponseSchema,Xe as FetchEmailResponseSchema,Ye as FetchEmailResultSchema,xe as FileModule,Ne as GetAuthorizationArtifactsResponseSchema,Ke as GetAuthorizationArtifactsResultSchema,pt as GetBooleanRequestSchema,mt as GetBooleanResponseSchema,ht as GetBooleanResultSchema,ze as GetCoordinateResponseSchema,Be as GetCoordinateResultSchema,Ge as GetCountryCodeResponseSchema,Le as GetCountryCodeResultSchema,_t as GetDoubleRequestSchema,$t as GetDoubleResponseSchema,Ut as GetDoubleResultSchema,vt as GetIntRequestSchema,gt as GetIntResponseSchema,yt as GetIntResultSchema,je as GetLanguageLocaleIdentifierResponseSchema,Re as GetLanguageLocaleIdentifierResultSchema,Tt as GetSelectedTravelDestinationResponseSchema,Nt as GetSelectedTravelDestinationResultSchema,ve as GetSessionParamsResponseSchema,fe as GetSessionParamsResultSchema,kt as GetStringRequestSchema,St as GetStringResponseSchema,bt as GetStringResultSchema,nt as HasAccessToRequestSchema,st as HasAccessToResponseSchema,rt as HasAccessToResultSchema,te as HideBackButtonResponseSchema,ce as HideLoaderResponseSchema,re as HideRefreshButtonResponseSchema,Oe as IdentityModule,me as IsConnectedResponseSchema,he as IsConnectedResultSchema,we as IsEsimSupportedResponseSchema,ge as IsEsimSupportedResultSchema,Pe as LocaleModule,We as LocationModule,He as MediaModule,Ve as ObserveDRMPlaybackResponseSchema,ae as OnContentLoadedResponseSchema,de as OnCtaTapResponseSchema,ue as OpenExternalLinkResponseSchema,Je as PlatformModule,qe as PlayDRMContentResponseSchema,tt as ProfileModule,It as RedirectToSystemWebViewRequestSchema,At as RedirectToSystemWebViewResponseSchema,ot as ReloadScopesResponseSchema,Dt as RemoveAllResponseSchema,Et as RemoveResponseSchema,L as ScanQRCodeRequestSchema,W as ScanQRCodeResponseSchema,G as ScanQRCodeResultSchema,at as ScopeModule,le as SendAnalyticsEventRequestSchema,pe as SendAnalyticsEventResponseSchema,Z as SetBackgroundColorResponseSchema,lt as SetBooleanResponseSchema,xt as SetDoubleResponseSchema,ft as SetIntResponseSchema,wt as SetStringResponseSchema,ee as SetTitleResponseSchema,ne as ShowBackButtonResponseSchema,ie as ShowLoaderResponseSchema,se as ShowRefreshButtonResponseSchema,ct as SplashScreenModule,Mt as StorageModule,Kt as SystemWebViewKitModule,F as TriggerCheckoutRequestSchema,H as TriggerCheckoutResponseSchema,V as TriggerCheckoutResultSchema,Ot as UserAttributesModule,Ze as VerifyEmailRequestSchema,et as VerifyEmailResponseSchema,N as isClientError,O as isError,K as isFound,I as isNoContent,M as isOk,A as isRedirection,T as isServerError,D as isSuccess};
7
+ var e,t={exports:{}},n=(e||(e=1,function(e){function t(e){var t=!1;return{isUnsubscribed:function(){return t},unsubscribe:function(){t||(e(),t=!0)}}}function n(e){return{subscribe:e,then:function(t,n){return new Promise(function(r,s){try{var o=null,a=!1;o=e({next:function(e){r(null==t?void 0:t(e)),o&&o.unsubscribe(),a=!0}}),a&&o&&o.unsubscribe()}catch(e){null==n?s(e):r(n(e))}})}}}function r(r,s){return s.funcNameToWrap,function(r,s){var o=s.callbackNameFunc,a=s.funcToWrap;return n(function(n){var s,i=o();return r[i]=function(t){if(function(e){for(var t=[],n=1;n<arguments.length;n++)t[n-1]=arguments[n];if(!e)return!1;var r=function(e){return Object.keys(e).concat(Object.getOwnPropertyNames(Object.getPrototypeOf(e)))}(e);return t.every(function(e){return 0<=r.indexOf(e)})}(t.result,"event"))t.result.event===e.StreamEvent.STREAM_TERMINATED&&s.unsubscribe();else{var r=t.result,o=t.error,a=t.status_code;n&&n.next&&n.next({result:null===r?void 0:r,error:null===o?void 0:o,status_code:null===a?void 0:a})}},a(i),s=t(function(){r[i]=void 0,n&&n.complete&&n.complete()})})}(r,function(e,t){var n={};for(var r in e)Object.prototype.hasOwnProperty.call(e,r)&&t.indexOf(r)<0&&(n[r]=e[r]);if(null!=e&&"function"==typeof Object.getOwnPropertySymbols){var s=0;for(r=Object.getOwnPropertySymbols(e);s<r.length;s++)t.indexOf(r[s])<0&&(n[r[s]]=e[r[s]])}return n}(s,["funcNameToWrap"]))}(e.StreamEvent||(e.StreamEvent={})).STREAM_TERMINATED="STREAM_TERMINATED",e.createDataStream=n,e.createSubscription=t,e.getModuleEnvironment=function(e,t){return e[t]?"android":e.webkit&&e.webkit.messageHandlers&&e.webkit.messageHandlers[t]?"ios":void 0},e.wrapModule=function(e,t){var n;e[(n=t,"Wrapped"+n)]=function(e,t,n){return{invoke:function(s,o){return r(e,{funcNameToWrap:s,callbackNameFunc:function(){return function(e,t){var n=t.moduleName,r=t.funcName,s=0;return function(){for(var t,o,a="";(a=(t={moduleName:n,funcName:r,requestID:s}).moduleName+"_"+t.funcName+"Callback"+(null!==(o=t.requestID)?"_"+o:""))in e;)s+=1;return s+=1,a}()}(e,{moduleName:t,funcName:s})},funcToWrap:function(e){return n({callback:e,method:s,module:t,parameters:null!=o?o:{}})}})}}}(e,t,function(n){if(e[t]&&e[t][n.method]instanceof Function)e[t][n.method](JSON.stringify(n));else{if(!(e.webkit&&e.webkit.messageHandlers&&e.webkit.messageHandlers[t]))throw new Error("Unexpected method '"+n.method+"' for module '"+t+"'");e.webkit.messageHandlers[t].postMessage(n)}})},Object.defineProperty(e,"__esModule",{value:!0})}(t.exports)),t.exports);function r(e){return{lang:e?.lang??void 0,message:e?.message,abortEarly:e?.abortEarly??void 0,abortPipeEarly:e?.abortPipeEarly??void 0}}function s(e){const t=typeof e;return"string"===t?`"${e}"`:"number"===t||"bigint"===t||"boolean"===t?`${e}`:"object"===t||"function"===t?(e&&Object.getPrototypeOf(e)?.constructor?.name)??"null":t}function o(e,t,n,r,o){const a=o&&"input"in o?o.input:n.value,i=o?.expected??e.expects??null,c=o?.received??s(a),u={kind:e.kind,type:e.type,input:a,expected:i,received:c,message:`Invalid ${t}: ${i?`Expected ${i} but r`:"R"}eceived ${c}`,requirement:e.requirement,path:o?.path,issues:o?.issues,lang:r.lang,abortEarly:r.abortEarly,abortPipeEarly:r.abortPipeEarly},d="schema"===e.kind,l=o?.message??e.message??(e.reference,void u.lang)??(d?void u.lang:null)??r.message??void u.lang;void 0!==l&&(u.message="function"==typeof l?l(u):l),d&&(n.typed=!1),n.issues?n.issues.push(u):n.issues=[u]}function a(e){return{version:1,vendor:"valibot",validate:t=>e["~run"]({value:t},r())}}function i(e,t){return Object.hasOwn(e,t)&&"__proto__"!==t&&"prototype"!==t&&"constructor"!==t}function c(e,t){const n=[...new Set(e)];return n.length>1?`(${n.join(` ${t} `)})`:n[0]??"never"}function u(e,t){return{kind:"validation",type:"min_length",reference:u,async:!1,expects:`>=${e}`,requirement:e,message:t,"~run"(e,t){return e.typed&&e.value.length<this.requirement&&o(this,"length",e,t,{received:`${e.value.length}`}),e}}}function d(e){return{kind:"validation",type:"url",reference:d,async:!1,expects:null,requirement(e){try{return new URL(e),!0}catch{return!1}},message:e,"~run"(e,t){return e.typed&&!this.requirement(e.value)&&o(this,"URL",e,t),e}}}function l(e,t,n){return"function"==typeof e.fallback?e.fallback(t,n):e.fallback}function h(e,t,n){return"function"==typeof e.default?e.default(t,n):e.default}function p(e){return{kind:"schema",type:"boolean",reference:p,expects:"boolean",async:!1,message:e,get"~standard"(){return a(this)},"~run"(e,t){return"boolean"==typeof e.value?e.typed=!0:o(this,"type",e,t),e}}}function m(e,t){return{kind:"schema",type:"literal",reference:m,expects:s(e),async:!1,literal:e,message:t,get"~standard"(){return a(this)},"~run"(e,t){return e.value===this.literal?e.typed=!0:o(this,"type",e,t),e}}}function g(e,t){return{kind:"schema",type:"nullable",reference:g,expects:`(${e.expects} | null)`,async:!1,wrapped:e,default:t,get"~standard"(){return a(this)},"~run"(e,t){return null===e.value&&(void 0!==this.default&&(e.value=h(this,e,t)),null===e.value)?(e.typed=!0,e):this.wrapped["~run"](e,t)}}}function f(e){return{kind:"schema",type:"number",reference:f,expects:"number",async:!1,message:e,get"~standard"(){return a(this)},"~run"(e,t){return"number"!=typeof e.value||isNaN(e.value)?o(this,"type",e,t):e.typed=!0,e}}}function v(e,t){return{kind:"schema",type:"object",reference:v,expects:"Object",async:!1,entries:e,message:t,get"~standard"(){return a(this)},"~run"(e,t){const n=e.value;if(n&&"object"==typeof n){e.typed=!0,e.value={};for(const r in this.entries){const s=this.entries[r];if(r in n||("exact_optional"===s.type||"optional"===s.type||"nullish"===s.type)&&void 0!==s.default){const o=r in n?n[r]:h(s),a=s["~run"]({value:o},t);if(a.issues){const s={type:"object",origin:"value",input:n,key:r,value:o};for(const t of a.issues)t.path?t.path.unshift(s):t.path=[s],e.issues?.push(t);if(e.issues||(e.issues=a.issues),t.abortEarly){e.typed=!1;break}}a.typed||(e.typed=!1),e.value[r]=a.value}else if(void 0!==s.fallback)e.value[r]=l(s);else if("exact_optional"!==s.type&&"optional"!==s.type&&"nullish"!==s.type&&(o(this,"key",e,t,{input:void 0,expected:`"${r}"`,path:[{type:"object",origin:"key",input:n,key:r,value:n[r]}]}),t.abortEarly))break}}else o(this,"type",e,t);return e}}}function y(e,t){return{kind:"schema",type:"optional",reference:y,expects:`(${e.expects} | undefined)`,async:!1,wrapped:e,default:t,get"~standard"(){return a(this)},"~run"(e,t){return void 0===e.value&&(void 0!==this.default&&(e.value=h(this,e,t)),void 0===e.value)?(e.typed=!0,e):this.wrapped["~run"](e,t)}}}function w(e,t){return{kind:"schema",type:"picklist",reference:w,expects:c(e.map(s),"|"),async:!1,options:e,message:t,get"~standard"(){return a(this)},"~run"(e,t){return this.options.includes(e.value)?e.typed=!0:o(this,"type",e,t),e}}}function k(e,t,n){return{kind:"schema",type:"record",reference:k,expects:"Object",async:!1,key:e,value:t,message:n,get"~standard"(){return a(this)},"~run"(e,t){const n=e.value;if(n&&"object"==typeof n){e.typed=!0,e.value={};for(const r in n)if(i(n,r)){const s=n[r],o=this.key["~run"]({value:r},t);if(o.issues){const a={type:"object",origin:"key",input:n,key:r,value:s};for(const t of o.issues)t.path=[a],e.issues?.push(t);if(e.issues||(e.issues=o.issues),t.abortEarly){e.typed=!1;break}}const a=this.value["~run"]({value:s},t);if(a.issues){const o={type:"object",origin:"value",input:n,key:r,value:s};for(const t of a.issues)t.path?t.path.unshift(o):t.path=[o],e.issues?.push(t);if(e.issues||(e.issues=a.issues),t.abortEarly){e.typed=!1;break}}o.typed&&a.typed||(e.typed=!1),o.typed&&(e.value[o.value]=a.value)}}else o(this,"type",e,t);return e}}}function b(e){return{kind:"schema",type:"string",reference:b,expects:"string",async:!1,message:e,get"~standard"(){return a(this)},"~run"(e,t){return"string"==typeof e.value?e.typed=!0:o(this,"type",e,t),e}}}function _(e){let t;if(e)for(const n of e)t?t.push(...n.issues):t=n.issues;return t}function x(e,t){return{kind:"schema",type:"union",reference:x,expects:c(e.map(e=>e.expects),"|"),async:!1,options:e,message:t,get"~standard"(){return a(this)},"~run"(e,t){let n,r,s;for(const o of this.options){const a=o["~run"]({value:e.value},t);if(a.typed){if(!a.issues){n=a;break}r?r.push(a):r=[a]}else s?s.push(a):s=[a]}if(n)return n;if(r){if(1===r.length)return r[0];o(this,"type",e,t,{issues:_(r)}),e.typed=!0}else{if(1===s?.length)return s[0];o(this,"type",e,t,{issues:_(s)})}return e}}}function S(){return{kind:"schema",type:"unknown",reference:S,expects:"unknown",async:!1,get"~standard"(){return a(this)},"~run":e=>(e.typed=!0,e)}}function E(...e){return{...e[0],pipe:e,get"~standard"(){return a(this)},"~run"(t,n){for(const r of e)if("metadata"!==r.kind){if(t.issues&&("schema"===r.kind||"transformation"===r.kind)){t.typed=!1;break}t.issues&&(n.abortEarly||n.abortPipeEarly)||(t=r["~run"](t,n))}return t}}}function U(e){return"object"==typeof e&&null!==e&&"message"in e&&"string"==typeof e.message}class C{constructor(e){this.moduleName=e}formatPrefix(e){return`[SuperAppSDK][${this.moduleName}.${e}]`}warn(e,t){console.warn(`${this.formatPrefix(e)} ${t}`)}error(e,t){console.error(`${this.formatPrefix(e)} ${t}`)}}function $(){if("undefined"==typeof window||!window.navigator)return null;const e=window.navigator.userAgent;return e?function(e){if(!e||"string"!=typeof e)return null;const t=e.match(/(Grab|GrabBeta|GrabBetaDebug|GrabTaxi|GrabEarlyAccess)\/v?([0-9]+)\.([0-9]+)\.([0-9]+) \(.*(Android|iOS).*\)/i);return t?{appName:t[1],version:{major:Number(t[2]),minor:Number(t[3]),patch:Number(t[4])},platform:t[5]}:null}(e):null}class A{get wrappedModule(){return window[`Wrapped${this.name}`]}constructor(e){if(this.name=e,this.logger=new C(e),!this.wrappedModule)try{n.wrapModule(window,this.name)}catch(e){throw new Error(`Failed to initialize ${this.name}${U(e)?`: ${e.message}`:""}`,{cause:e})}}validate(e,t){const n=function(e,t){const n=e["~run"]({value:t},r(void 0));return{typed:n.typed,success:!n.issues,output:n.value,issues:n.issues}}(e,t);return n.success?null:n.issues.map(e=>{const t=e.path?.map(e=>String(e.key)).join(".");return t?`${t}: ${e.message}`:e.message}).join(", ")}checkSupport(e){const t=$();return t?e(t)?null:{status_code:426,error:"Upgrade Required: This method requires a newer version of the Grab app"}:{status_code:501,error:"Not implemented: This method requires the Grab app environment"}}async invoke(e){const{method:t,params:n}=e;try{return $()?await this.wrappedModule.invoke(t,n):{status_code:501,error:"Not implemented: This method requires the Grab app environment"}}catch(e){return{status_code:500,error:`Failed to invoke method: ${U(e)?e.message:"Unknown error"}`}}}createErrorStream(e){return{subscribe:t=>(t?.next?.(e),t?.complete?.(),{isUnsubscribed:()=>!0,unsubscribe:()=>{}}),then:t=>Promise.resolve(e).then(t)}}invokeStream(e){const{method:t,params:n}=e;try{return $()?this.wrappedModule.invoke(t,n):this.createErrorStream({status_code:501,error:"Not implemented: This method requires the Grab app environment"})}catch(e){return this.createErrorStream({status_code:500,error:`Failed to invoke method: ${U(e)?e.message:"Unknown error"}`})}}}function I(e){return 200===e.status_code||204===e.status_code}function M(e){return 200===e.status_code}function T(e){return 204===e.status_code}function O(e){return 302===e.status_code}function N(e){return 302===e.status_code}function P(e){const t=e.status_code;return 400===t||401===t||403===t||404===t||424===t||426===t}function R(e){return 500===e.status_code||501===e.status_code}function L(e){return"error"in e}const B=e=>v({status_code:m(e),error:b()}),j=e=>v({status_code:m(200),result:e}),D=v({status_code:m(204)}),z=v({status_code:m(302)}),K=v({title:y(b())}),G=v({qrCode:b()}),W=x([j(G),D,B(400),B(403),B(500),B(501)]);class F extends A{constructor(){super("CameraModule")}async scanQRCode(e={}){const t=this.validate(K,e);if(t)return{status_code:400,error:t};const n=await this.invoke({method:"scanQRCode",params:e}),r=this.validate(W,n);return r&&this.logger.warn("scanQRCode",`Unexpected response shape: ${r}`),n}}const q=k(b(),S()),V=function e(t,n,r){return{kind:"schema",type:"variant",reference:e,expects:"Object",async:!1,key:t,options:n,message:r,get"~standard"(){return a(this)},"~run"(e,t){const n=e.value;if(n&&"object"==typeof n){let r,s=0,a=this.key,i=[];const u=(e,o)=>{for(const c of e.options){if("variant"===c.type)u(c,new Set(o).add(c.key));else{let e=!0,u=0;for(const t of o){const r=c.entries[t];if(t in n?r["~run"]({typed:!1,value:n[t]},{abortEarly:!0}).issues:"exact_optional"!==r.type&&"optional"!==r.type&&"nullish"!==r.type){e=!1,a!==t&&(s<u||s===u&&t in n&&!(a in n))&&(s=u,a=t,i=[]),a===t&&i.push(c.entries[t].expects);break}u++}if(e){const e=c["~run"]({value:n},t);(!r||!r.typed&&e.typed)&&(r=e)}}if(r&&!r.issues)break}};if(u(this,new Set([this.key])),r)return r;o(this,"type",e,t,{input:n[a],expected:c(i,"|"),path:[{type:"object",origin:"value",input:n,key:a,value:n[a]}]})}else o(this,"type",e,t);return e}}}("status",[v({status:m("success"),transactionID:b()}),v({status:m("failure"),transactionID:b(),errorMessage:b(),errorCode:b()}),v({status:m("pending"),transactionID:b()}),v({status:m("userInitiatedCancel")})]),H=x([j(V),B(400),B(500),B(501)]);class Y extends A{constructor(){super("CheckoutModule")}async triggerCheckout(e){const t=this.validate(q,e);if(t)return{status_code:400,error:t};const n=await this.invoke({method:"triggerCheckout",params:e}),r=this.validate(H,n);return r&&this.logger.warn("triggerCheckout",`Unexpected response shape: ${r}`),n}}const Q={HOMEPAGE:"HOMEPAGE",CHECKOUT_PAGE:"CHECKOUT_PAGE",BOOKING_COMPLETION:"BOOKING_COMPLETION",CUSTOM:"CUSTOM"},J={DEFAULT:"DEFAULT"},X={TRANSACTION_AMOUNT:"transaction_amount",TRANSACTION_CURRENCY:"transaction_currency",PAGE:"page"},Z=x([j(p()),D,B(400),B(500),B(501)]),ee=x([j(p()),D,B(400),B(500),B(501)]),te=x([j(p()),D,B(500),B(501)]),ne=x([j(p()),D,B(500),B(501)]),re=x([j(p()),D,B(500),B(501)]),se=x([j(p()),D,B(500),B(501)]),oe=x([j(p()),D,B(500),B(501)]),ae=x([j(p()),D,B(500),B(501)]),ie=x([j(p()),D,B(500),B(501)]),ce=x([j(p()),D,B(500),B(501)]),ue=x([j(p()),D,B(400),B(500),B(501)]),de=x([j(p()),B(500),B(501)]),le=v({state:E(b(),u(1)),name:E(b(),u(1)),data:y(k(b(),S()))}),he=x([j(p()),D,B(400),B(500),B(501)]),pe=v({connected:p()}),me=x([j(pe),B(404)]),ge=b(),fe=x([j(ge),D,B(500),B(501)]);class ve extends A{constructor(){super("ContainerModule")}async setBackgroundColor(e){const t=await this.invoke({method:"setBackgroundColor",params:{backgroundColor:e}}),n=this.validate(Z,t);return n&&this.logger.warn("setBackgroundColor",`Unexpected response shape: ${n}`),t}async setTitle(e){const t=await this.invoke({method:"setTitle",params:{title:e}}),n=this.validate(ee,t);return n&&this.logger.warn("setTitle",`Unexpected response shape: ${n}`),t}async hideBackButton(){const e=await this.invoke({method:"hideBackButton"}),t=this.validate(te,e);return t&&this.logger.warn("hideBackButton",`Unexpected response shape: ${t}`),e}async showBackButton(){const e=await this.invoke({method:"showBackButton"}),t=this.validate(ne,e);return t&&this.logger.warn("showBackButton",`Unexpected response shape: ${t}`),e}async hideRefreshButton(){const e=await this.invoke({method:"hideRefreshButton"}),t=this.validate(re,e);return t&&this.logger.warn("hideRefreshButton",`Unexpected response shape: ${t}`),e}async showRefreshButton(){const e=await this.invoke({method:"showRefreshButton"}),t=this.validate(se,e);return t&&this.logger.warn("showRefreshButton",`Unexpected response shape: ${t}`),e}async close(){const e=await this.invoke({method:"close"}),t=this.validate(oe,e);return t&&this.logger.warn("close",`Unexpected response shape: ${t}`),e}async onContentLoaded(){const e=await this.invoke({method:"onContentLoaded"}),t=this.validate(ae,e);return t&&this.logger.warn("onContentLoaded",`Unexpected response shape: ${t}`),e}async showLoader(){const e=await this.invoke({method:"showLoader"}),t=this.validate(ie,e);return t&&this.logger.warn("showLoader",`Unexpected response shape: ${t}`),e}async hideLoader(){const e=await this.invoke({method:"hideLoader"}),t=this.validate(ce,e);return t&&this.logger.warn("hideLoader",`Unexpected response shape: ${t}`),e}async openExternalLink(e){const t=await this.invoke({method:"openExternalLink",params:{url:e}}),n=this.validate(ue,t);return n&&this.logger.warn("openExternalLink",`Unexpected response shape: ${n}`),t}async onCtaTap(e){const t=await this.invoke({method:"onCtaTap",params:{action:e}}),n=this.validate(de,t);return n&&this.logger.warn("onCtaTap",`Unexpected response shape: ${n}`),t}async sendAnalyticsEvent(e){const t=this.validate(le,e);if(t)return{status_code:400,error:t};const n=await this.invoke({method:"sendAnalyticsEvent",params:{state:e.state,name:e.name,data:e.data?JSON.stringify(e.data):null}}),r=this.validate(he,n);return r&&this.logger.warn("sendAnalyticsEvent",`Unexpected response shape: ${r}`),n}async isConnected(){return null!==$()?{status_code:200,result:{connected:!0}}:{status_code:404,error:"Not connected to Grab app"}}async getSessionParams(){const e=await this.invoke({method:"getSessionParams"}),t=this.validate(fe,e);return t&&this.logger.warn("getSessionParams",`Unexpected response shape: ${t}`),e}}const ye=p(),we=x([j(ye),B(500),B(501)]);class ke extends A{constructor(){super("DeviceCapabilityModule")}async isEsimSupported(){const e=await this.invoke({method:"isEsimSupported"}),t=this.validate(we,e);return t&&this.logger.warn("isEsimSupported",`Unexpected response shape: ${t}`),e}}const be=v({fileUrl:E(b(),d()),fileName:E(b(),u(1))}),_e=x([D,B(400),B(500),B(501)]);class xe extends A{constructor(){super("FileModule")}async downloadFile(e){const t=this.validate(be,e);if(t)return{status_code:400,error:t};const n=await this.invoke({method:"downloadFile",params:e}),r=this.validate(_e,n);return r&&this.logger.warn("downloadFile",`Unexpected response shape: ${r}`),n}}function Se(e){const t=new Uint32Array(e);crypto.getRandomValues(t);let n="";for(let r=0;r<e;r+=1)n+="ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789".charAt(t[r]%62);return n}async function Ee(e){const t=(new TextEncoder).encode(e);return function(e){const t=new Uint8Array(e);let n="";for(let e=0;e<t.byteLength;e+=1)n+=String.fromCharCode(t[e]);return btoa(n).replace(/=/g,"").replace(/\+/g,"-").replace(/\//g,"_")}(await crypto.subtle.digest("SHA-256",t))}function Ue(e,t){return e.major!==t.major?e.major>t.major:e.minor!==t.minor?e.minor>t.minor:e.patch>=t.patch}const Ce="grabid",$e={staging:"https://partner-api.stg-myteksi.com/grabid/v1/oauth2/.well-known/openid-configuration",production:"https://partner-api.grab.com/grabid/v1/oauth2/.well-known/openid-configuration"};class Ae extends Error{constructor(e,t){super(e),this.cause=t,this.name="AuthorizationConfigurationError"}}const Ie=v({clientId:E(b(),u(1)),redirectUri:E(b(),d()),scope:E(b(),u(1)),environment:w(["staging","production"]),responseMode:y(w(["redirect","in_place"]))}),Me=v({code:b(),state:b()}),Te=x([j(Me),D,z,B(400),B(403),B(500),B(501)]),Oe=v({state:b(),codeVerifier:b(),nonce:b(),redirectUri:b()}),Ne=x([j(Oe),D,B(400)]),Pe=x([D]);class Re extends A{constructor(){super("IdentityModule")}async fetchAuthorizationEndpoint(e){const t=$e[e];if(!t)throw new Error(`Invalid environment: ${e}. Must be 'staging' or 'production'`);try{const e=await fetch(t);if(!e.ok)throw console.error(`Failed to fetch OpenID configuration from ${t}: ${e.status} ${e.statusText}`),new Ae("Failed to fetch authorization configuration");const n=await e.json();if(!n.authorization_endpoint)throw console.error("authorization_endpoint not found in OpenID configuration response"),new Ae("Invalid authorization configuration");return n.authorization_endpoint}catch(e){if(console.error("Error fetching authorization endpoint:",e),e instanceof Ae)throw e;throw new Error("Something wrong happened when fetching authorization configuration",{cause:e})}}async generatePKCEArtifacts(){const e=Se(16),t=Se(32),n=(r=Se(64),btoa(r).replace(/=/g,"").replace(/\+/g,"-").replace(/\//g,"_"));var r;return{nonce:e,state:t,codeVerifier:n,codeChallenge:await Ee(n),codeChallengeMethod:"S256"}}storePKCEArtifacts(e){this.setStorageItem("nonce",e.nonce),this.setStorageItem("state",e.state),this.setStorageItem("code_verifier",e.codeVerifier),this.setStorageItem("redirect_uri",e.redirectUri)}async getAuthorizationArtifacts(){const e=this.getStorageItem("state"),t=this.getStorageItem("code_verifier"),n=this.getStorageItem("nonce"),r=this.getStorageItem("redirect_uri");return null===e&&null===t&&null===n&&null===r?{status_code:204}:null!==e&&null!==t&&null!==n&&null!==r?{status_code:200,result:{state:e,codeVerifier:t,nonce:n,redirectUri:r}}:{status_code:400,error:"Inconsistent authorization artifacts in storage"}}async clearAuthorizationArtifacts(){return window.localStorage.removeItem(`${Ce}:nonce`),window.localStorage.removeItem(`${Ce}:state`),window.localStorage.removeItem(`${Ce}:code_verifier`),window.localStorage.removeItem(`${Ce}:redirect_uri`),window.localStorage.removeItem(`${Ce}:login_return_uri`),{status_code:204}}setStorageItem(e,t){window.localStorage.setItem(`${Ce}:${e}`,t)}getStorageItem(e){return window.localStorage.getItem(`${Ce}:${e}`)}static normalizeUrl(e){const t=new URL(e);return`${t.origin}${t.pathname}`}static buildAuthorizeUrl(e,t){return`${e}?${Object.entries(t).filter(e=>void 0!==e[1]&&null!==e[1]).map(([e,t])=>`${encodeURIComponent(e)}=${encodeURIComponent(t)}`).join("&")}`}static shouldUseWebConsent(e){const t=$();return!t||"staging"!==e.environment&&!Ue(t.version,{major:5,minor:396,patch:0})}async performWebAuthorization(e){let t;this.setStorageItem("login_return_uri",window.location.href),this.setStorageItem("redirect_uri",e.redirectUri);try{t=await this.fetchAuthorizationEndpoint(e.environment)}catch(e){return{status_code:400,error:U(e)?e.message:"Could not fetch authorization endpoint"}}const n={client_id:e.clientId,scope:e.scope,response_type:"code",redirect_uri:e.redirectUri,nonce:e.nonce,state:e.state,code_challenge_method:e.codeChallengeMethod,code_challenge:e.codeChallenge},r=Re.buildAuthorizeUrl(t,n);return window.location.assign(r),{status_code:302}}async performNativeAuthorization(e){const t=await this.invoke({method:"authorize",params:{clientId:e.clientId,redirectUri:e.actualRedirectUri,scope:e.scope,nonce:e.nonce,state:e.state,codeChallenge:e.codeChallenge,codeChallengeMethod:e.codeChallengeMethod,responseMode:e.responseMode}}),n=this.validate(Te,t);return n&&this.logger.warn("authorize",`Unexpected response shape: ${n}`),t}async authorize(e){const t=this.validate(Ie,e);if(t)return{status_code:400,error:t};const n=await this.generatePKCEArtifacts(),r=e.responseMode||"redirect",s="in_place"===r?Re.normalizeUrl(window.location.href):e.redirectUri;this.storePKCEArtifacts({...n,redirectUri:s});const o={clientId:e.clientId,redirectUri:e.redirectUri,scope:e.scope,nonce:n.nonce,state:n.state,codeChallenge:n.codeChallenge,codeChallengeMethod:n.codeChallengeMethod};if(Re.shouldUseWebConsent(e))return this.performWebAuthorization({...o,environment:e.environment});try{const t=await this.performNativeAuthorization({...o,actualRedirectUri:s,responseMode:r});return 400===t.status_code||403===t.status_code||500===t.status_code||501===t.status_code?(console.error(`Native authorization returned ${t.status_code}, falling back to web flow:`,t.error),this.performWebAuthorization({...o,environment:e.environment})):t}catch(t){return console.error("Native authorization failed, falling back to web flow:",t),this.performWebAuthorization({...o,environment:e.environment})}}}const Le=b(),Be=x([j(Le),D,B(400),B(500),B(501)]);class je extends A{constructor(){super("LocaleModule")}async getLanguageLocaleIdentifier(){const e=await this.invoke({method:"getLanguageLocaleIdentifier"}),t=this.validate(Be,e);return t&&this.logger.warn("getLanguageLocaleIdentifier",`Unexpected response shape: ${t}`),e}}const De=v({lat:f(),lng:f()}),ze=x([j(De),B(403),B(424),B(500),B(501)]),Ke=b(),Ge=x([j(Ke),D,B(403),B(424),B(500),B(501)]);class We extends A{constructor(){super("LocationModule")}async getCoordinate(){const e=await this.invoke({method:"getCoordinate"}),t=this.validate(ze,e);return t&&this.logger.warn("getCoordinate",`Unexpected response shape: ${t}`),e}observeLocationChange(){return this.invokeStream({method:"observeLocationChange"})}async getCountryCode(){const e=await this.invoke({method:"getCountryCode"}),t=this.validate(Ge,e);return t&&this.logger.warn("getCountryCode",`Unexpected response shape: ${t}`),e}}const Fe=v({type:w(["START_PLAYBACK","PROGRESS_PLAYBACK","START_SEEK","STOP_SEEK","STOP_PLAYBACK","CLOSE_PLAYBACK","PAUSE_PLAYBACK","RESUME_PLAYBACK","FAST_FORWARD_PLAYBACK","REWIND_PLAYBACK","ERROR_PLAYBACK","CHANGE_VOLUME"]),titleId:b(),position:f(),length:f()}),qe=x([j(Fe),D,B(400),B(424),B(500),B(501)]),Ve=x([j(Fe),B(500),B(501)]);class He extends A{constructor(){super("MediaModule")}async playDRMContent(e){const t=await this.invoke({method:"playDRMContent",params:{data:e}}),n=this.validate(qe,t);return n&&this.logger.warn("playDRMContent",`Unexpected response shape: ${n}`),t}observePlayDRMContent(e){return this.invokeStream({method:"observePlayDRMContent",params:{data:e}})}}const Ye=x([D,B(500),B(501)]);class Qe extends A{constructor(){super("PlatformModule")}async back(){const e=await this.invoke({method:"back"}),t=this.validate(Ye,e);return t&&this.logger.warn("back",`Unexpected response shape: ${t}`),e}}const Je=v({email:b()}),Xe=x([j(Je),D,B(400),B(403),B(426),B(500),B(501)]),Ze=v({email:y(E(b(),u(1))),skipUserInput:y(p())}),et=v({email:b()}),tt=x([j(et),D,B(400),B(403),B(426),B(500),B(501)]);class nt extends A{constructor(){super("ProfileModule")}async fetchEmail(){const e=this.checkSupport(e=>Ue(e.version,nt.MINIMUM_VERSION));if(e)return e;const t=await this.invoke({method:"fetchEmail"}),n=this.validate(Xe,t);return n&&this.logger.warn("fetchEmail",`Unexpected response shape: ${n}`),t}async verifyEmail(e){const t=this.checkSupport(e=>Ue(e.version,nt.MINIMUM_VERSION));if(t)return t;const n=this.validate(Ze,e??{});if(n)return{status_code:400,error:n};const r=await this.invoke({method:"verifyEmail",params:e}),s=this.validate(tt,r);return s&&this.logger.warn("verifyEmail",`Unexpected response shape: ${s}`),r}}nt.MINIMUM_VERSION={major:5,minor:399,patch:0};const rt=v({module:E(b(),u(1)),method:E(b(),u(1))}),st=v({hasAccess:p()}),ot=x([j(st),B(400),B(424),B(500),B(501)]),at=x([D,B(424),B(500),B(501)]);class it extends A{constructor(){super("ScopeModule")}async hasAccessTo(e,t){const n={module:e,method:t},r=this.validate(rt,n);if(r)return{status_code:400,error:r};const s=await this.invoke({method:"hasAccessTo",params:n}),o=this.validate(ot,s);return o&&this.logger.warn("hasAccessTo",`Unexpected response shape: ${o}`),s}async reloadScopes(){const e=await this.invoke({method:"reloadScopes"}),t=this.validate(at,e);return t&&this.logger.warn("reloadScopes",`Unexpected response shape: ${t}`),e}}const ct=x([D,B(400),B(403),B(500),B(501)]);class ut extends A{constructor(){super("SplashScreenModule")}async dismiss(){const e=await this.invoke({method:"dismiss"}),t=this.validate(ct,e);return t&&this.logger.warn("dismiss",`Unexpected response shape: ${t}`),e}}const dt=v({key:E(b(),u(1))}),lt=x([D,B(400),B(424),B(500),B(501)]),ht=dt,pt=v({value:g(p())}),mt=x([j(pt),B(400),B(424),B(500),B(501)]),gt=x([D,B(400),B(424),B(500),B(501)]),ft=dt,vt=v({value:g(f())}),yt=x([j(vt),B(400),B(424),B(500),B(501)]),wt=x([D,B(400),B(424),B(500),B(501)]),kt=dt,bt=v({value:g(b())}),_t=x([j(bt),B(400),B(424),B(500),B(501)]),xt=x([D,B(400),B(424),B(500),B(501)]),St=dt,Et=v({value:g(f())}),Ut=x([j(Et),B(400),B(424),B(500),B(501)]),Ct=dt,$t=x([D,B(400),B(424),B(500),B(501)]),At=x([D,B(424),B(500),B(501)]);class It extends A{constructor(){super("StorageModule")}async setBoolean(e,t){const n=await this.invoke({method:"setBoolean",params:{key:e,value:t}}),r=this.validate(lt,n);return r&&this.logger.warn("setBoolean",`Unexpected response shape: ${r}`),n}async getBoolean(e){const t={key:e},n=this.validate(ht,t);if(n)return{status_code:400,error:n};const r=await this.invoke({method:"getBoolean",params:t}),s=this.validate(mt,r);return s&&this.logger.warn("getBoolean",`Unexpected response shape: ${s}`),r}async setInt(e,t){const n=await this.invoke({method:"setInt",params:{key:e,value:t}}),r=this.validate(gt,n);return r&&this.logger.warn("setInt",`Unexpected response shape: ${r}`),n}async getInt(e){const t={key:e},n=this.validate(ft,t);if(n)return{status_code:400,error:n};const r=await this.invoke({method:"getInt",params:t}),s=this.validate(yt,r);return s&&this.logger.warn("getInt",`Unexpected response shape: ${s}`),r}async setString(e,t){const n=await this.invoke({method:"setString",params:{key:e,value:t}}),r=this.validate(wt,n);return r&&this.logger.warn("setString",`Unexpected response shape: ${r}`),n}async getString(e){const t={key:e},n=this.validate(kt,t);if(n)return{status_code:400,error:n};const r=await this.invoke({method:"getString",params:t}),s=this.validate(_t,r);return s&&this.logger.warn("getString",`Unexpected response shape: ${s}`),r}async setDouble(e,t){const n=await this.invoke({method:"setDouble",params:{key:e,value:t}}),r=this.validate(xt,n);return r&&this.logger.warn("setDouble",`Unexpected response shape: ${r}`),n}async getDouble(e){const t={key:e},n=this.validate(St,t);if(n)return{status_code:400,error:n};const r=await this.invoke({method:"getDouble",params:t}),s=this.validate(Ut,r);return s&&this.logger.warn("getDouble",`Unexpected response shape: ${s}`),r}async remove(e){const t={key:e},n=this.validate(Ct,t);if(n)return{status_code:400,error:n};const r=await this.invoke({method:"remove",params:t}),s=this.validate($t,r);return s&&this.logger.warn("remove",`Unexpected response shape: ${s}`),r}async removeAll(){const e=await this.invoke({method:"removeAll"}),t=this.validate(At,e);return t&&this.logger.warn("removeAll",`Unexpected response shape: ${t}`),e}}const Mt=v({url:E(b(),d())}),Tt=x([j(b()),B(400),B(424),B(500),B(501)]);class Ot extends A{constructor(){super("SystemWebViewKitModule")}async redirectToSystemWebView(e){const t=this.validate(Mt,e);if(t)return{status_code:400,error:t};const n=await this.invoke({method:"redirectToSystemWebView",params:e}),r=this.validate(Tt,n);return r&&this.logger.warn("redirectToSystemWebView",`Unexpected response shape: ${r}`),n}}const Nt=b(),Pt=x([j(Nt),D,B(500),B(501)]);class Rt extends A{constructor(){super("UserAttributesModule")}async getSelectedTravelDestination(){const e=await this.invoke({method:"getSelectedTravelDestination"}),t=this.validate(Pt,e);return t&&this.logger.warn("getSelectedTravelDestination",`Unexpected response shape: ${t}`),e}}export{Ie as AuthorizeRequestSchema,Te as AuthorizeResponseSchema,Me as AuthorizeResultSchema,Ye as BackResponseSchema,A as BaseModule,F as CameraModule,Y as CheckoutModule,Pe as ClearAuthorizationArtifactsResponseSchema,oe as CloseResponseSchema,X as ContainerAnalyticsEventData,J as ContainerAnalyticsEventName,Q as ContainerAnalyticsEventState,ve as ContainerModule,Fe as DRMPlaybackEventSchema,ke as DeviceCapabilityModule,ct as DismissSplashScreenResponseSchema,be as DownloadFileRequestSchema,_e as DownloadFileResponseSchema,Xe as FetchEmailResponseSchema,Je as FetchEmailResultSchema,xe as FileModule,Ne as GetAuthorizationArtifactsResponseSchema,Oe as GetAuthorizationArtifactsResultSchema,ht as GetBooleanRequestSchema,mt as GetBooleanResponseSchema,pt as GetBooleanResultSchema,ze as GetCoordinateResponseSchema,De as GetCoordinateResultSchema,Ge as GetCountryCodeResponseSchema,Ke as GetCountryCodeResultSchema,St as GetDoubleRequestSchema,Ut as GetDoubleResponseSchema,Et as GetDoubleResultSchema,ft as GetIntRequestSchema,yt as GetIntResponseSchema,vt as GetIntResultSchema,Be as GetLanguageLocaleIdentifierResponseSchema,Le as GetLanguageLocaleIdentifierResultSchema,Pt as GetSelectedTravelDestinationResponseSchema,Nt as GetSelectedTravelDestinationResultSchema,fe as GetSessionParamsResponseSchema,ge as GetSessionParamsResultSchema,kt as GetStringRequestSchema,_t as GetStringResponseSchema,bt as GetStringResultSchema,rt as HasAccessToRequestSchema,ot as HasAccessToResponseSchema,st as HasAccessToResultSchema,te as HideBackButtonResponseSchema,ce as HideLoaderResponseSchema,re as HideRefreshButtonResponseSchema,Re as IdentityModule,me as IsConnectedResponseSchema,pe as IsConnectedResultSchema,we as IsEsimSupportedResponseSchema,ye as IsEsimSupportedResultSchema,je as LocaleModule,We as LocationModule,C as Logger,He as MediaModule,Ve as ObserveDRMPlaybackResponseSchema,ae as OnContentLoadedResponseSchema,de as OnCtaTapResponseSchema,ue as OpenExternalLinkResponseSchema,Qe as PlatformModule,qe as PlayDRMContentResponseSchema,nt as ProfileModule,Mt as RedirectToSystemWebViewRequestSchema,Tt as RedirectToSystemWebViewResponseSchema,at as ReloadScopesResponseSchema,At as RemoveAllResponseSchema,$t as RemoveResponseSchema,K as ScanQRCodeRequestSchema,W as ScanQRCodeResponseSchema,G as ScanQRCodeResultSchema,it as ScopeModule,le as SendAnalyticsEventRequestSchema,he as SendAnalyticsEventResponseSchema,Z as SetBackgroundColorResponseSchema,lt as SetBooleanResponseSchema,xt as SetDoubleResponseSchema,gt as SetIntResponseSchema,wt as SetStringResponseSchema,ee as SetTitleResponseSchema,ne as ShowBackButtonResponseSchema,ie as ShowLoaderResponseSchema,se as ShowRefreshButtonResponseSchema,ut as SplashScreenModule,It as StorageModule,Ot as SystemWebViewKitModule,q as TriggerCheckoutRequestSchema,H as TriggerCheckoutResponseSchema,V as TriggerCheckoutResultSchema,Rt as UserAttributesModule,Ze as VerifyEmailRequestSchema,tt as VerifyEmailResponseSchema,et as VerifyEmailResultSchema,P as isClientError,L as isError,N as isFound,T as isNoContent,M as isOk,O as isRedirection,R as isServerError,I as isSuccess};
package/dist/index.js CHANGED
@@ -4,4 +4,4 @@
4
4
  * This source code is licensed under the MIT license found in the LICENSE file in the root
5
5
  * directory of this source tree.
6
6
  */
7
- !function(e,t){"object"==typeof exports&&"undefined"!=typeof module?t(exports):"function"==typeof define&&define.amd?define(["exports"],t):t((e="undefined"!=typeof globalThis?globalThis:e||self).SuperAppSDK={})}(this,function(e){"use strict";var t,n={exports:{}},s=(t||(t=1,function(e){function t(e){var t=!1;return{isUnsubscribed:function(){return t},unsubscribe:function(){t||(e(),t=!0)}}}function n(e){return{subscribe:e,then:function(t,n){return new Promise(function(s,o){try{var r=null,a=!1;r=e({next:function(e){s(null==t?void 0:t(e)),r&&r.unsubscribe(),a=!0}}),a&&r&&r.unsubscribe()}catch(e){null==n?o(e):s(n(e))}})}}}function s(s,o){return o.funcNameToWrap,function(s,o){var r=o.callbackNameFunc,a=o.funcToWrap;return n(function(n){var o,i=r();return s[i]=function(t){if(function(e){for(var t=[],n=1;n<arguments.length;n++)t[n-1]=arguments[n];if(!e)return!1;var s=function(e){return Object.keys(e).concat(Object.getOwnPropertyNames(Object.getPrototypeOf(e)))}(e);return t.every(function(e){return 0<=s.indexOf(e)})}(t.result,"event"))t.result.event===e.StreamEvent.STREAM_TERMINATED&&o.unsubscribe();else{var s=t.result,r=t.error,a=t.status_code;n&&n.next&&n.next({result:null===s?void 0:s,error:null===r?void 0:r,status_code:null===a?void 0:a})}},a(i),o=t(function(){s[i]=void 0,n&&n.complete&&n.complete()})})}(s,function(e,t){var n={};for(var s in e)Object.prototype.hasOwnProperty.call(e,s)&&t.indexOf(s)<0&&(n[s]=e[s]);if(null!=e&&"function"==typeof Object.getOwnPropertySymbols){var o=0;for(s=Object.getOwnPropertySymbols(e);o<s.length;o++)t.indexOf(s[o])<0&&(n[s[o]]=e[s[o]])}return n}(o,["funcNameToWrap"]))}(e.StreamEvent||(e.StreamEvent={})).STREAM_TERMINATED="STREAM_TERMINATED",e.createDataStream=n,e.createSubscription=t,e.getModuleEnvironment=function(e,t){return e[t]?"android":e.webkit&&e.webkit.messageHandlers&&e.webkit.messageHandlers[t]?"ios":void 0},e.wrapModule=function(e,t){var n;e[(n=t,"Wrapped"+n)]=function(e,t,n){return{invoke:function(o,r){return s(e,{funcNameToWrap:o,callbackNameFunc:function(){return function(e,t){var n=t.moduleName,s=t.funcName,o=0;return function(){for(var t,r,a="";(a=(t={moduleName:n,funcName:s,requestID:o}).moduleName+"_"+t.funcName+"Callback"+(null!==(r=t.requestID)?"_"+r:""))in e;)o+=1;return o+=1,a}()}(e,{moduleName:t,funcName:o})},funcToWrap:function(e){return n({callback:e,method:o,module:t,parameters:null!=r?r:{}})}})}}}(e,t,function(n){if(e[t]&&e[t][n.method]instanceof Function)e[t][n.method](JSON.stringify(n));else{if(!(e.webkit&&e.webkit.messageHandlers&&e.webkit.messageHandlers[t]))throw new Error("Unexpected method '"+n.method+"' for module '"+t+"'");e.webkit.messageHandlers[t].postMessage(n)}})},Object.defineProperty(e,"__esModule",{value:!0})}(n.exports)),n.exports);function o(e){return{lang:e?.lang??void 0,message:e?.message,abortEarly:e?.abortEarly??void 0,abortPipeEarly:e?.abortPipeEarly??void 0}}function r(e){const t=typeof e;return"string"===t?`"${e}"`:"number"===t||"bigint"===t||"boolean"===t?`${e}`:"object"===t||"function"===t?(e&&Object.getPrototypeOf(e)?.constructor?.name)??"null":t}function a(e,t,n,s,o){const a=o&&"input"in o?o.input:n.value,i=o?.expected??e.expects??null,c=o?.received??r(a),u={kind:e.kind,type:e.type,input:a,expected:i,received:c,message:`Invalid ${t}: ${i?`Expected ${i} but r`:"R"}eceived ${c}`,requirement:e.requirement,path:o?.path,issues:o?.issues,lang:s.lang,abortEarly:s.abortEarly,abortPipeEarly:s.abortPipeEarly},d="schema"===e.kind,l=o?.message??e.message??(e.reference,void u.lang)??(d?void u.lang:null)??s.message??void u.lang;void 0!==l&&(u.message="function"==typeof l?l(u):l),d&&(n.typed=!1),n.issues?n.issues.push(u):n.issues=[u]}function i(e){return{version:1,vendor:"valibot",validate:t=>e["~run"]({value:t},o())}}function c(e,t){return Object.hasOwn(e,t)&&"__proto__"!==t&&"prototype"!==t&&"constructor"!==t}function u(e,t){const n=[...new Set(e)];return n.length>1?`(${n.join(` ${t} `)})`:n[0]??"never"}function d(e,t){return{kind:"validation",type:"min_length",reference:d,async:!1,expects:`>=${e}`,requirement:e,message:t,"~run"(e,t){return e.typed&&e.value.length<this.requirement&&a(this,"length",e,t,{received:`${e.value.length}`}),e}}}function l(e){return{kind:"validation",type:"url",reference:l,async:!1,expects:null,requirement(e){try{return new URL(e),!0}catch{return!1}},message:e,"~run"(e,t){return e.typed&&!this.requirement(e.value)&&a(this,"URL",e,t),e}}}function h(e,t,n){return"function"==typeof e.fallback?e.fallback(t,n):e.fallback}function p(e,t,n){return"function"==typeof e.default?e.default(t,n):e.default}function m(e){return{kind:"schema",type:"boolean",reference:m,expects:"boolean",async:!1,message:e,get"~standard"(){return i(this)},"~run"(e,t){return"boolean"==typeof e.value?e.typed=!0:a(this,"type",e,t),e}}}function f(e,t){return{kind:"schema",type:"literal",reference:f,expects:r(e),async:!1,literal:e,message:t,get"~standard"(){return i(this)},"~run"(e,t){return e.value===this.literal?e.typed=!0:a(this,"type",e,t),e}}}function v(e,t){return{kind:"schema",type:"nullable",reference:v,expects:`(${e.expects} | null)`,async:!1,wrapped:e,default:t,get"~standard"(){return i(this)},"~run"(e,t){return null===e.value&&(void 0!==this.default&&(e.value=p(this,e,t)),null===e.value)?(e.typed=!0,e):this.wrapped["~run"](e,t)}}}function y(e){return{kind:"schema",type:"number",reference:y,expects:"number",async:!1,message:e,get"~standard"(){return i(this)},"~run"(e,t){return"number"!=typeof e.value||isNaN(e.value)?a(this,"type",e,t):e.typed=!0,e}}}function g(e,t){return{kind:"schema",type:"object",reference:g,expects:"Object",async:!1,entries:e,message:t,get"~standard"(){return i(this)},"~run"(e,t){const n=e.value;if(n&&"object"==typeof n){e.typed=!0,e.value={};for(const s in this.entries){const o=this.entries[s];if(s in n||("exact_optional"===o.type||"optional"===o.type||"nullish"===o.type)&&void 0!==o.default){const r=s in n?n[s]:p(o),a=o["~run"]({value:r},t);if(a.issues){const o={type:"object",origin:"value",input:n,key:s,value:r};for(const t of a.issues)t.path?t.path.unshift(o):t.path=[o],e.issues?.push(t);if(e.issues||(e.issues=a.issues),t.abortEarly){e.typed=!1;break}}a.typed||(e.typed=!1),e.value[s]=a.value}else if(void 0!==o.fallback)e.value[s]=h(o);else if("exact_optional"!==o.type&&"optional"!==o.type&&"nullish"!==o.type&&(a(this,"key",e,t,{input:void 0,expected:`"${s}"`,path:[{type:"object",origin:"key",input:n,key:s,value:n[s]}]}),t.abortEarly))break}}else a(this,"type",e,t);return e}}}function S(e,t){return{kind:"schema",type:"optional",reference:S,expects:`(${e.expects} | undefined)`,async:!1,wrapped:e,default:t,get"~standard"(){return i(this)},"~run"(e,t){return void 0===e.value&&(void 0!==this.default&&(e.value=p(this,e,t)),void 0===e.value)?(e.typed=!0,e):this.wrapped["~run"](e,t)}}}function w(e,t){return{kind:"schema",type:"picklist",reference:w,expects:u(e.map(r),"|"),async:!1,options:e,message:t,get"~standard"(){return i(this)},"~run"(e,t){return this.options.includes(e.value)?e.typed=!0:a(this,"type",e,t),e}}}function b(e,t,n){return{kind:"schema",type:"record",reference:b,expects:"Object",async:!1,key:e,value:t,message:n,get"~standard"(){return i(this)},"~run"(e,t){const n=e.value;if(n&&"object"==typeof n){e.typed=!0,e.value={};for(const s in n)if(c(n,s)){const o=n[s],r=this.key["~run"]({value:s},t);if(r.issues){const a={type:"object",origin:"key",input:n,key:s,value:o};for(const t of r.issues)t.path=[a],e.issues?.push(t);if(e.issues||(e.issues=r.issues),t.abortEarly){e.typed=!1;break}}const a=this.value["~run"]({value:o},t);if(a.issues){const r={type:"object",origin:"value",input:n,key:s,value:o};for(const t of a.issues)t.path?t.path.unshift(r):t.path=[r],e.issues?.push(t);if(e.issues||(e.issues=a.issues),t.abortEarly){e.typed=!1;break}}r.typed&&a.typed||(e.typed=!1),r.typed&&(e.value[r.value]=a.value)}}else a(this,"type",e,t);return e}}}function k(e){return{kind:"schema",type:"string",reference:k,expects:"string",async:!1,message:e,get"~standard"(){return i(this)},"~run"(e,t){return"string"==typeof e.value?e.typed=!0:a(this,"type",e,t),e}}}function R(e){let t;if(e)for(const n of e)t?t.push(...n.issues):t=n.issues;return t}function C(e,t){return{kind:"schema",type:"union",reference:C,expects:u(e.map(e=>e.expects),"|"),async:!1,options:e,message:t,get"~standard"(){return i(this)},"~run"(e,t){let n,s,o;for(const r of this.options){const a=r["~run"]({value:e.value},t);if(a.typed){if(!a.issues){n=a;break}s?s.push(a):s=[a]}else o?o.push(a):o=[a]}if(n)return n;if(s){if(1===s.length)return s[0];a(this,"type",e,t,{issues:R(s)}),e.typed=!0}else{if(1===o?.length)return o[0];a(this,"type",e,t,{issues:R(o)})}return e}}}function x(){return{kind:"schema",type:"unknown",reference:x,expects:"unknown",async:!1,get"~standard"(){return i(this)},"~run":e=>(e.typed=!0,e)}}function _(...e){return{...e[0],pipe:e,get"~standard"(){return i(this)},"~run"(t,n){for(const s of e)if("metadata"!==s.kind){if(t.issues&&("schema"===s.kind||"transformation"===s.kind)){t.typed=!1;break}t.issues&&(n.abortEarly||n.abortPipeEarly)||(t=s["~run"](t,n))}return t}}}function E(e){return"object"==typeof e&&null!==e&&"message"in e&&"string"==typeof e.message}function M(){if("undefined"==typeof window||!window.navigator)return null;const e=window.navigator.userAgent;return e?function(e){if(!e||"string"!=typeof e)return null;const t=e.match(/(Grab|GrabBeta|GrabBetaDebug|GrabTaxi|GrabEarlyAccess)\/v?([0-9]+)\.([0-9]+)\.([0-9]+) \(.*(Android|iOS).*\)/i);return t?{appName:t[1],version:{major:Number(t[2]),minor:Number(t[3]),patch:Number(t[4])},platform:t[5]}:null}(e):null}class U{get wrappedModule(){return window[`Wrapped${this.name}`]}constructor(e){if(this.name=e,!this.wrappedModule)try{s.wrapModule(window,this.name)}catch(e){throw new Error(`Failed to initialize ${this.name}${E(e)?`: ${e.message}`:""}`,{cause:e})}}validate(e,t){const n=function(e,t){const n=e["~run"]({value:t},o(void 0));return{typed:n.typed,success:!n.issues,output:n.value,issues:n.issues}}(e,t);return n.success?null:n.issues.map(e=>{const t=e.path?.map(e=>String(e.key)).join(".");return t?`${t}: ${e.message}`:e.message}).join(", ")}checkSupport(e){const t=M();return t?e(t)?null:{status_code:426,error:"Upgrade Required: This method requires a newer version of the Grab app"}:{status_code:501,error:"Not implemented: This method requires the Grab app environment"}}async invoke(e){const{method:t,params:n}=e;try{return M()?await this.wrappedModule.invoke(t,n):{status_code:501,error:"Not implemented: This method requires the Grab app environment"}}catch(e){return{status_code:500,error:`Failed to invoke method: ${E(e)?e.message:"Unknown error"}`}}}createErrorStream(e){return{subscribe:t=>(t?.next?.(e),t?.complete?.(),{isUnsubscribed:()=>!0,unsubscribe:()=>{}}),then:t=>Promise.resolve(e).then(t)}}invokeStream(e){const{method:t,params:n}=e;try{return M()?this.wrappedModule.invoke(t,n):this.createErrorStream({status_code:501,error:"Not implemented: This method requires the Grab app environment"})}catch(e){return this.createErrorStream({status_code:500,error:`Failed to invoke method: ${E(e)?e.message:"Unknown error"}`})}}}const D=e=>g({status_code:f(e),error:k()}),$=e=>g({status_code:f(200),result:e}),I=g({status_code:f(204)}),A=g({status_code:f(200)}),T=g({status_code:f(302)}),K=g({title:S(k())}),N=g({qrCode:k()}),O=C([$(N),I,D(400),D(403),D(500),D(501)]),B=b(k(),x()),G=g({transactionID:k(),status:w(["success","failure","pending","userInitiatedCancel"]),errorMessage:S(k()),errorCode:S(k())}),L=C([$(G),D(400),D(500),D(501)]),P=C([I,D(400),D(500),D(501)]),z=C([A,D(400),D(500),D(501)]),j=C([A,D(500),D(501)]),q=j,F=j,W=j,V=j,H=j,Q=j,J=j,Y=C([A,D(400),D(500),D(501)]),X=C([A,D(500),D(501)]),Z=g({state:_(k(),d(1)),name:_(k(),d(1)),data:S(b(k(),x()))}),ee=C([A,D(400),D(500),D(501)]),te=g({connected:m()}),ne=C([$(te),D(404)]),se=g({result:k()}),oe=C([$(se),D(500),D(501)]),re=m(),ae=C([$(re),D(500),D(501)]),ie=g({fileUrl:_(k(),l()),fileName:_(k(),d(1))}),ce=C([I,D(400),D(500),D(501)]);function ue(e){const t=new Uint32Array(e);crypto.getRandomValues(t);let n="";for(let s=0;s<e;s+=1)n+="ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789".charAt(t[s]%62);return n}async function de(e){const t=(new TextEncoder).encode(e);return function(e){const t=new Uint8Array(e);let n="";for(let e=0;e<t.byteLength;e+=1)n+=String.fromCharCode(t[e]);return btoa(n).replace(/=/g,"").replace(/\+/g,"-").replace(/\//g,"_")}(await crypto.subtle.digest("SHA-256",t))}function le(e,t){return e.major!==t.major?e.major>t.major:e.minor!==t.minor?e.minor>t.minor:e.patch>=t.patch}const he="grabid",pe={staging:"https://partner-api.stg-myteksi.com/grabid/v1/oauth2/.well-known/openid-configuration",production:"https://partner-api.grab.com/grabid/v1/oauth2/.well-known/openid-configuration"};class me extends Error{constructor(e,t){super(e),this.cause=t,this.name="AuthorizationConfigurationError"}}const fe=g({clientId:_(k(),d(1)),redirectUri:_(k(),l()),scope:_(k(),d(1)),environment:w(["staging","production"]),responseMode:S(w(["redirect","in_place"]))}),ve=g({code:k(),state:k()}),ye=C([$(ve),I,T,D(400),D(401),D(403),D(500),D(501)]),ge=g({state:k(),codeVerifier:k(),nonce:k(),redirectUri:k()}),Se=C([$(ge),I,D(400)]),we=I;class be extends U{constructor(){super("IdentityModule")}async fetchAuthorizationEndpoint(e){const t=pe[e];if(!t)throw new Error(`Invalid environment: ${e}. Must be 'staging' or 'production'`);try{const e=await fetch(t);if(!e.ok)throw console.error(`Failed to fetch OpenID configuration from ${t}: ${e.status} ${e.statusText}`),new me("Failed to fetch authorization configuration");const n=await e.json();if(!n.authorization_endpoint)throw console.error("authorization_endpoint not found in OpenID configuration response"),new me("Invalid authorization configuration");return n.authorization_endpoint}catch(e){if(console.error("Error fetching authorization endpoint:",e),e instanceof me)throw e;throw new Error("Something wrong happened when fetching authorization configuration",{cause:e})}}async generatePKCEArtifacts(){const e=ue(16),t=ue(32),n=(s=ue(64),btoa(s).replace(/=/g,"").replace(/\+/g,"-").replace(/\//g,"_"));var s;return{nonce:e,state:t,codeVerifier:n,codeChallenge:await de(n),codeChallengeMethod:"S256"}}storePKCEArtifacts(e){this.setStorageItem("nonce",e.nonce),this.setStorageItem("state",e.state),this.setStorageItem("code_verifier",e.codeVerifier),this.setStorageItem("redirect_uri",e.redirectUri)}async getAuthorizationArtifacts(){const e=this.getStorageItem("state"),t=this.getStorageItem("code_verifier"),n=this.getStorageItem("nonce"),s=this.getStorageItem("redirect_uri");return null===e&&null===t&&null===n&&null===s?{status_code:204}:null!==e&&null!==t&&null!==n&&null!==s?{status_code:200,result:{state:e,codeVerifier:t,nonce:n,redirectUri:s}}:{status_code:400,error:"Inconsistent authorization artifacts in storage"}}async clearAuthorizationArtifacts(){return window.localStorage.removeItem(`${he}:nonce`),window.localStorage.removeItem(`${he}:state`),window.localStorage.removeItem(`${he}:code_verifier`),window.localStorage.removeItem(`${he}:redirect_uri`),window.localStorage.removeItem(`${he}:login_return_uri`),{status_code:204}}setStorageItem(e,t){window.localStorage.setItem(`${he}:${e}`,t)}getStorageItem(e){return window.localStorage.getItem(`${he}:${e}`)}static normalizeUrl(e){const t=new URL(e);return`${t.origin}${t.pathname}`}static buildAuthorizeUrl(e,t){return`${e}?${Object.entries(t).filter(e=>void 0!==e[1]&&null!==e[1]).map(([e,t])=>`${encodeURIComponent(e)}=${encodeURIComponent(t)}`).join("&")}`}static shouldUseWebConsent(e){const t=M();return!t||"staging"!==e.environment&&!le(t.version,{major:5,minor:396,patch:0})}async performWebAuthorization(e){let t;this.setStorageItem("login_return_uri",window.location.href),this.setStorageItem("redirect_uri",e.redirectUri);try{t=await this.fetchAuthorizationEndpoint(e.environment)}catch(e){return{status_code:400,error:E(e)?e.message:"Could not fetch authorization endpoint"}}const n={client_id:e.clientId,scope:e.scope,response_type:"code",redirect_uri:e.redirectUri,nonce:e.nonce,state:e.state,code_challenge_method:e.codeChallengeMethod,code_challenge:e.codeChallenge},s=be.buildAuthorizeUrl(t,n);return window.location.assign(s),{status_code:302}}async performNativeAuthorization(e){const t=await this.invoke({method:"authorize",params:{clientId:e.clientId,redirectUri:e.actualRedirectUri,scope:e.scope,nonce:e.nonce,state:e.state,codeChallenge:e.codeChallenge,codeChallengeMethod:e.codeChallengeMethod,responseMode:e.responseMode}}),n=this.validate(ye,t);return n&&console.warn(`[SDK:authorize] Unexpected response shape: ${n}`),t}async authorize(e){const t=this.validate(fe,e);if(t)return{status_code:400,error:t};const n=await this.generatePKCEArtifacts(),s=e.responseMode||"redirect",o="in_place"===s?be.normalizeUrl(window.location.href):e.redirectUri;this.storePKCEArtifacts({...n,redirectUri:o});const r={clientId:e.clientId,redirectUri:e.redirectUri,scope:e.scope,nonce:n.nonce,state:n.state,codeChallenge:n.codeChallenge,codeChallengeMethod:n.codeChallengeMethod};if(be.shouldUseWebConsent(e))return this.performWebAuthorization({...r,environment:e.environment});try{const t=await this.performNativeAuthorization({...r,actualRedirectUri:o,responseMode:s});return 400===t.status_code||401===t.status_code||403===t.status_code||500===t.status_code||501===t.status_code?(console.error(`Native authorization returned ${t.status_code}, falling back to web flow:`,t.error),this.performWebAuthorization({...r,environment:e.environment})):t}catch(t){return console.error("Native authorization failed, falling back to web flow:",t),this.performWebAuthorization({...r,environment:e.environment})}}}const ke=k(),Re=C([$(ke),D(500),D(501)]),Ce=g({lat:y(),lng:y()}),xe=C([$(Ce),D(403),D(424),D(500),D(501)]),_e=g({countryCode:k()}),Ee=C([$(_e),D(403),D(424),D(500),D(501)]),Me=C([A,I,D(500),D(501)]),Ue=g({eventType:w(["started","paused","ended","error"]),data:S(b(k(),x()))}),De=C([$(Ue),D(500),D(501)]),$e=C([I,D(500),D(501)]),Ie=g({email:k()}),Ae=C([$(Ie),D(400),D(403),D(426),D(500),D(501)]),Te=g({email:_(k(),d(1)),otp:_(k(),d(1))}),Ke=C([A,D(400),D(403),D(426),D(500),D(501)]);class Ne extends U{constructor(){super("ProfileModule")}async fetchEmail(){const e=this.checkSupport(e=>le(e.version,Ne.MINIMUM_VERSION));if(e)return e;const t=await this.invoke({method:"fetchEmail"}),n=this.validate(Ae,t);return n&&console.warn(`[SDK:fetchEmail] Unexpected response shape: ${n}`),t}async verifyEmail(e){const t=this.checkSupport(e=>le(e.version,Ne.MINIMUM_VERSION));if(t)return t;const n=this.validate(Te,e);if(n)return{status_code:400,error:n};const s=await this.invoke({method:"verifyEmail",params:e}),o=this.validate(Ke,s);return o&&console.warn(`[SDK:verifyEmail] Unexpected response shape: ${o}`),s}}Ne.MINIMUM_VERSION={major:5,minor:399,patch:0};const Oe=g({module:_(k(),d(1)),method:_(k(),d(1))}),Be=g({hasAccess:m()}),Ge=C([$(Be),D(400),D(424),D(500),D(501)]),Le=C([A,D(424),D(500),D(501)]),Pe=C([I,D(400),D(403),D(500),D(501)]),ze=C([I,D(400),D(500),D(501)]),je=g({key:_(k(),d(1))}),qe=ze,Fe=je,We=g({value:v(m())}),Ve=C([$(We),D(400),D(500),D(501)]),He=ze,Qe=je,Je=g({value:v(y())}),Ye=C([$(Je),D(400),D(500),D(501)]),Xe=ze,Ze=je,et=g({value:v(k())}),tt=C([$(et),D(400),D(500),D(501)]),nt=ze,st=je,ot=g({value:v(y())}),rt=C([$(ot),D(400),D(500),D(501)]),at=je,it=ze,ct=C([I,D(500),D(501)]),ut=g({url:_(k(),l())}),dt=C([A,D(400),D(424),D(500),D(501)]),lt=k(),ht=C([$(lt),I,D(500),D(501)]);e.AuthorizeRequestSchema=fe,e.AuthorizeResponseSchema=ye,e.AuthorizeResultSchema=ve,e.BackResponseSchema=$e,e.BaseModule=U,e.CameraModule=class extends U{constructor(){super("CameraModule")}async scanQRCode(e){const t=this.validate(K,e);if(t)return{status_code:400,error:t};const n=await this.invoke({method:"scanQRCode",params:e}),s=this.validate(O,n);return s&&console.warn(`[SDK:scanQRCode] Unexpected response shape: ${s}`),n}},e.CheckoutModule=class extends U{constructor(){super("CheckoutModule")}async triggerCheckout(e){const t=this.validate(B,e);if(t)return{status_code:400,error:t};const n=await this.invoke({method:"triggerCheckout",params:e}),s=this.validate(L,n);return s&&console.warn(`[SDK:triggerCheckout] Unexpected response shape: ${s}`),n}},e.ClearAuthorizationArtifactsResponseSchema=we,e.CloseResponseSchema=V,e.ContainerAnalyticsEventData={TRANSACTION_AMOUNT:"transaction_amount",TRANSACTION_CURRENCY:"transaction_currency",PAGE:"page"},e.ContainerAnalyticsEventName={DEFAULT:"DEFAULT"},e.ContainerAnalyticsEventState={HOMEPAGE:"HOMEPAGE",CHECKOUT_PAGE:"CHECKOUT_PAGE",BOOKING_COMPLETION:"BOOKING_COMPLETION",CUSTOM:"CUSTOM"},e.ContainerModule=class extends U{constructor(){super("ContainerModule")}async setBackgroundColor(e){const t=await this.invoke({method:"setBackgroundColor",params:{backgroundColor:e}}),n=this.validate(P,t);return n&&console.warn(`[SDK:setBackgroundColor] Unexpected response shape: ${n}`),t}async setTitle(e){const t=await this.invoke({method:"setTitle",params:{title:e}}),n=this.validate(z,t);return n&&console.warn(`[SDK:setTitle] Unexpected response shape: ${n}`),t}async hideBackButton(){const e=await this.invoke({method:"hideBackButton"}),t=this.validate(j,e);return t&&console.warn(`[SDK:hideBackButton] Unexpected response shape: ${t}`),e}async showBackButton(){const e=await this.invoke({method:"showBackButton"}),t=this.validate(q,e);return t&&console.warn(`[SDK:showBackButton] Unexpected response shape: ${t}`),e}async hideRefreshButton(){const e=await this.invoke({method:"hideRefreshButton"}),t=this.validate(F,e);return t&&console.warn(`[SDK:hideRefreshButton] Unexpected response shape: ${t}`),e}async showRefreshButton(){const e=await this.invoke({method:"showRefreshButton"}),t=this.validate(W,e);return t&&console.warn(`[SDK:showRefreshButton] Unexpected response shape: ${t}`),e}async close(){const e=await this.invoke({method:"close"}),t=this.validate(V,e);return t&&console.warn(`[SDK:close] Unexpected response shape: ${t}`),e}async onContentLoaded(){const e=await this.invoke({method:"onContentLoaded"}),t=this.validate(H,e);return t&&console.warn(`[SDK:onContentLoaded] Unexpected response shape: ${t}`),e}async showLoader(){const e=await this.invoke({method:"showLoader"}),t=this.validate(Q,e);return t&&console.warn(`[SDK:showLoader] Unexpected response shape: ${t}`),e}async hideLoader(){const e=await this.invoke({method:"hideLoader"}),t=this.validate(J,e);return t&&console.warn(`[SDK:hideLoader] Unexpected response shape: ${t}`),e}async openExternalLink(e){const t=await this.invoke({method:"openExternalLink",params:{url:e}}),n=this.validate(Y,t);return n&&console.warn(`[SDK:openExternalLink] Unexpected response shape: ${n}`),t}async onCtaTap(e){const t=await this.invoke({method:"onCtaTap",params:{action:e}}),n=this.validate(X,t);return n&&console.warn(`[SDK:onCtaTap] Unexpected response shape: ${n}`),t}async sendAnalyticsEvent(e){const t=this.validate(Z,e);if(t)return{status_code:400,error:t};const n=await this.invoke({method:"sendAnalyticsEvent",params:{state:e.state,name:e.name,data:e.data?JSON.stringify(e.data):null}}),s=this.validate(ee,n);return s&&console.warn(`[SDK:sendAnalyticsEvent] Unexpected response shape: ${s}`),n}async isConnected(){return null!==M()?{status_code:200,result:{connected:!0}}:{status_code:404,error:"Not connected to Grab app"}}async getSessionParams(){const e=await this.invoke({method:"getSessionParams"}),t=this.validate(oe,e);return t&&console.warn(`[SDK:getSessionParams] Unexpected response shape: ${t}`),e}},e.DRMPlaybackEventSchema=Ue,e.DeviceCapabilityModule=class extends U{constructor(){super("DeviceCapabilityModule")}async isEsimSupported(){const e=await this.invoke({method:"isEsimSupported"}),t=this.validate(ae,e);return t&&console.warn(`[SDK:isEsimSupported] Unexpected response shape: ${t}`),e}},e.DismissSplashScreenResponseSchema=Pe,e.DownloadFileRequestSchema=ie,e.DownloadFileResponseSchema=ce,e.FetchEmailResponseSchema=Ae,e.FetchEmailResultSchema=Ie,e.FileModule=class extends U{constructor(){super("FileModule")}async downloadFile(e){const t=this.validate(ie,e);if(t)return{status_code:400,error:t};const n=await this.invoke({method:"downloadFile",params:e}),s=this.validate(ce,n);return s&&console.warn(`[SDK:downloadFile] Unexpected response shape: ${s}`),n}},e.GetAuthorizationArtifactsResponseSchema=Se,e.GetAuthorizationArtifactsResultSchema=ge,e.GetBooleanRequestSchema=Fe,e.GetBooleanResponseSchema=Ve,e.GetBooleanResultSchema=We,e.GetCoordinateResponseSchema=xe,e.GetCoordinateResultSchema=Ce,e.GetCountryCodeResponseSchema=Ee,e.GetCountryCodeResultSchema=_e,e.GetDoubleRequestSchema=st,e.GetDoubleResponseSchema=rt,e.GetDoubleResultSchema=ot,e.GetIntRequestSchema=Qe,e.GetIntResponseSchema=Ye,e.GetIntResultSchema=Je,e.GetLanguageLocaleIdentifierResponseSchema=Re,e.GetLanguageLocaleIdentifierResultSchema=ke,e.GetSelectedTravelDestinationResponseSchema=ht,e.GetSelectedTravelDestinationResultSchema=lt,e.GetSessionParamsResponseSchema=oe,e.GetSessionParamsResultSchema=se,e.GetStringRequestSchema=Ze,e.GetStringResponseSchema=tt,e.GetStringResultSchema=et,e.HasAccessToRequestSchema=Oe,e.HasAccessToResponseSchema=Ge,e.HasAccessToResultSchema=Be,e.HideBackButtonResponseSchema=j,e.HideLoaderResponseSchema=J,e.HideRefreshButtonResponseSchema=F,e.IdentityModule=be,e.IsConnectedResponseSchema=ne,e.IsConnectedResultSchema=te,e.IsEsimSupportedResponseSchema=ae,e.IsEsimSupportedResultSchema=re,e.LocaleModule=class extends U{constructor(){super("LocaleModule")}async getLanguageLocaleIdentifier(){const e=await this.invoke({method:"getLanguageLocaleIdentifier"}),t=this.validate(Re,e);return t&&console.warn(`[SDK:getLanguageLocaleIdentifier] Unexpected response shape: ${t}`),e}},e.LocationModule=class extends U{constructor(){super("LocationModule")}async getCoordinate(){const e=await this.invoke({method:"getCoordinate"}),t=this.validate(xe,e);return t&&console.warn(`[SDK:getCoordinate] Unexpected response shape: ${t}`),e}observeLocationChange(){return this.invokeStream({method:"observeLocationChange"})}async getCountryCode(){const e=await this.invoke({method:"getCountryCode"}),t=this.validate(Ee,e);return t&&console.warn(`[SDK:getCountryCode] Unexpected response shape: ${t}`),e}},e.MediaModule=class extends U{constructor(){super("MediaModule")}async playDRMContent(e){const t=await this.invoke({method:"playDRMContent",params:{data:e}}),n=this.validate(Me,t);return n&&console.warn(`[SDK:playDRMContent] Unexpected response shape: ${n}`),t}observePlayDRMContent(e){return this.invokeStream({method:"observePlayDRMContent",params:{data:e}})}},e.ObserveDRMPlaybackResponseSchema=De,e.OnContentLoadedResponseSchema=H,e.OnCtaTapResponseSchema=X,e.OpenExternalLinkResponseSchema=Y,e.PlatformModule=class extends U{constructor(){super("PlatformModule")}async back(){const e=await this.invoke({method:"back"}),t=this.validate($e,e);return t&&console.warn(`[SDK:back] Unexpected response shape: ${t}`),e}},e.PlayDRMContentResponseSchema=Me,e.ProfileModule=Ne,e.RedirectToSystemWebViewRequestSchema=ut,e.RedirectToSystemWebViewResponseSchema=dt,e.ReloadScopesResponseSchema=Le,e.RemoveAllResponseSchema=ct,e.RemoveResponseSchema=it,e.ScanQRCodeRequestSchema=K,e.ScanQRCodeResponseSchema=O,e.ScanQRCodeResultSchema=N,e.ScopeModule=class extends U{constructor(){super("ScopeModule")}async hasAccessTo(e,t){const n={module:e,method:t},s=this.validate(Oe,n);if(s)return{status_code:400,error:s};const o=await this.invoke({method:"hasAccessTo",params:n}),r=this.validate(Ge,o);return r&&console.warn(`[SDK:hasAccessTo] Unexpected response shape: ${r}`),o}async reloadScopes(){const e=await this.invoke({method:"reloadScopes"}),t=this.validate(Le,e);return t&&console.warn(`[SDK:reloadScopes] Unexpected response shape: ${t}`),e}},e.SendAnalyticsEventRequestSchema=Z,e.SendAnalyticsEventResponseSchema=ee,e.SetBackgroundColorResponseSchema=P,e.SetBooleanResponseSchema=qe,e.SetDoubleResponseSchema=nt,e.SetIntResponseSchema=He,e.SetStringResponseSchema=Xe,e.SetTitleResponseSchema=z,e.ShowBackButtonResponseSchema=q,e.ShowLoaderResponseSchema=Q,e.ShowRefreshButtonResponseSchema=W,e.SplashScreenModule=class extends U{constructor(){super("SplashScreenModule")}async dismiss(){const e=await this.invoke({method:"dismiss"}),t=this.validate(Pe,e);return t&&console.warn(`[SDK:dismiss] Unexpected response shape: ${t}`),e}},e.StorageModule=class extends U{constructor(){super("StorageModule")}async setBoolean(e,t){const n=await this.invoke({method:"setBoolean",params:{key:e,value:t}}),s=this.validate(qe,n);return s&&console.warn(`[SDK:setBoolean] Unexpected response shape: ${s}`),n}async getBoolean(e){const t={key:e},n=this.validate(Fe,t);if(n)return{status_code:400,error:n};const s=await this.invoke({method:"getBoolean",params:t}),o=this.validate(Ve,s);return o&&console.warn(`[SDK:getBoolean] Unexpected response shape: ${o}`),s}async setInt(e,t){const n=await this.invoke({method:"setInt",params:{key:e,value:t}}),s=this.validate(He,n);return s&&console.warn(`[SDK:setInt] Unexpected response shape: ${s}`),n}async getInt(e){const t={key:e},n=this.validate(Qe,t);if(n)return{status_code:400,error:n};const s=await this.invoke({method:"getInt",params:t}),o=this.validate(Ye,s);return o&&console.warn(`[SDK:getInt] Unexpected response shape: ${o}`),s}async setString(e,t){const n=await this.invoke({method:"setString",params:{key:e,value:t}}),s=this.validate(Xe,n);return s&&console.warn(`[SDK:setString] Unexpected response shape: ${s}`),n}async getString(e){const t={key:e},n=this.validate(Ze,t);if(n)return{status_code:400,error:n};const s=await this.invoke({method:"getString",params:t}),o=this.validate(tt,s);return o&&console.warn(`[SDK:getString] Unexpected response shape: ${o}`),s}async setDouble(e,t){const n=await this.invoke({method:"setDouble",params:{key:e,value:t}}),s=this.validate(nt,n);return s&&console.warn(`[SDK:setDouble] Unexpected response shape: ${s}`),n}async getDouble(e){const t={key:e},n=this.validate(st,t);if(n)return{status_code:400,error:n};const s=await this.invoke({method:"getDouble",params:t}),o=this.validate(rt,s);return o&&console.warn(`[SDK:getDouble] Unexpected response shape: ${o}`),s}async remove(e){const t={key:e},n=this.validate(at,t);if(n)return{status_code:400,error:n};const s=await this.invoke({method:"remove",params:t}),o=this.validate(it,s);return o&&console.warn(`[SDK:remove] Unexpected response shape: ${o}`),s}async removeAll(){const e=await this.invoke({method:"removeAll"}),t=this.validate(ct,e);return t&&console.warn(`[SDK:removeAll] Unexpected response shape: ${t}`),e}},e.SystemWebViewKitModule=class extends U{constructor(){super("SystemWebViewKitModule")}async redirectToSystemWebView(e){const t=this.validate(ut,e);if(t)return{status_code:400,error:t};const n=await this.invoke({method:"redirectToSystemWebView",params:e}),s=this.validate(dt,n);return s&&console.warn(`[SDK:redirectToSystemWebView] Unexpected response shape: ${s}`),n}},e.TriggerCheckoutRequestSchema=B,e.TriggerCheckoutResponseSchema=L,e.TriggerCheckoutResultSchema=G,e.UserAttributesModule=class extends U{constructor(){super("UserAttributesModule")}async getSelectedTravelDestination(){const e=await this.invoke({method:"getSelectedTravelDestination"}),t=this.validate(ht,e);return t&&console.warn(`[SDK:getSelectedTravelDestination] Unexpected response shape: ${t}`),e}},e.VerifyEmailRequestSchema=Te,e.VerifyEmailResponseSchema=Ke,e.isClientError=function(e){const t=e.status_code;return 400===t||401===t||403===t||404===t||424===t||426===t},e.isError=function(e){return"error"in e},e.isFound=function(e){return 302===e.status_code},e.isNoContent=function(e){return 204===e.status_code},e.isOk=function(e){return 200===e.status_code},e.isRedirection=function(e){return 302===e.status_code},e.isServerError=function(e){return 500===e.status_code||501===e.status_code},e.isSuccess=function(e){return 200===e.status_code||204===e.status_code}});
7
+ !function(e,t){"object"==typeof exports&&"undefined"!=typeof module?t(exports):"function"==typeof define&&define.amd?define(["exports"],t):t((e="undefined"!=typeof globalThis?globalThis:e||self).SuperAppSDK={})}(this,function(e){"use strict";var t,n={exports:{}},s=(t||(t=1,function(e){function t(e){var t=!1;return{isUnsubscribed:function(){return t},unsubscribe:function(){t||(e(),t=!0)}}}function n(e){return{subscribe:e,then:function(t,n){return new Promise(function(s,r){try{var o=null,a=!1;o=e({next:function(e){s(null==t?void 0:t(e)),o&&o.unsubscribe(),a=!0}}),a&&o&&o.unsubscribe()}catch(e){null==n?r(e):s(n(e))}})}}}function s(s,r){return r.funcNameToWrap,function(s,r){var o=r.callbackNameFunc,a=r.funcToWrap;return n(function(n){var r,i=o();return s[i]=function(t){if(function(e){for(var t=[],n=1;n<arguments.length;n++)t[n-1]=arguments[n];if(!e)return!1;var s=function(e){return Object.keys(e).concat(Object.getOwnPropertyNames(Object.getPrototypeOf(e)))}(e);return t.every(function(e){return 0<=s.indexOf(e)})}(t.result,"event"))t.result.event===e.StreamEvent.STREAM_TERMINATED&&r.unsubscribe();else{var s=t.result,o=t.error,a=t.status_code;n&&n.next&&n.next({result:null===s?void 0:s,error:null===o?void 0:o,status_code:null===a?void 0:a})}},a(i),r=t(function(){s[i]=void 0,n&&n.complete&&n.complete()})})}(s,function(e,t){var n={};for(var s in e)Object.prototype.hasOwnProperty.call(e,s)&&t.indexOf(s)<0&&(n[s]=e[s]);if(null!=e&&"function"==typeof Object.getOwnPropertySymbols){var r=0;for(s=Object.getOwnPropertySymbols(e);r<s.length;r++)t.indexOf(s[r])<0&&(n[s[r]]=e[s[r]])}return n}(r,["funcNameToWrap"]))}(e.StreamEvent||(e.StreamEvent={})).STREAM_TERMINATED="STREAM_TERMINATED",e.createDataStream=n,e.createSubscription=t,e.getModuleEnvironment=function(e,t){return e[t]?"android":e.webkit&&e.webkit.messageHandlers&&e.webkit.messageHandlers[t]?"ios":void 0},e.wrapModule=function(e,t){var n;e[(n=t,"Wrapped"+n)]=function(e,t,n){return{invoke:function(r,o){return s(e,{funcNameToWrap:r,callbackNameFunc:function(){return function(e,t){var n=t.moduleName,s=t.funcName,r=0;return function(){for(var t,o,a="";(a=(t={moduleName:n,funcName:s,requestID:r}).moduleName+"_"+t.funcName+"Callback"+(null!==(o=t.requestID)?"_"+o:""))in e;)r+=1;return r+=1,a}()}(e,{moduleName:t,funcName:r})},funcToWrap:function(e){return n({callback:e,method:r,module:t,parameters:null!=o?o:{}})}})}}}(e,t,function(n){if(e[t]&&e[t][n.method]instanceof Function)e[t][n.method](JSON.stringify(n));else{if(!(e.webkit&&e.webkit.messageHandlers&&e.webkit.messageHandlers[t]))throw new Error("Unexpected method '"+n.method+"' for module '"+t+"'");e.webkit.messageHandlers[t].postMessage(n)}})},Object.defineProperty(e,"__esModule",{value:!0})}(n.exports)),n.exports);function r(e){return{lang:e?.lang??void 0,message:e?.message,abortEarly:e?.abortEarly??void 0,abortPipeEarly:e?.abortPipeEarly??void 0}}function o(e){const t=typeof e;return"string"===t?`"${e}"`:"number"===t||"bigint"===t||"boolean"===t?`${e}`:"object"===t||"function"===t?(e&&Object.getPrototypeOf(e)?.constructor?.name)??"null":t}function a(e,t,n,s,r){const a=r&&"input"in r?r.input:n.value,i=r?.expected??e.expects??null,c=r?.received??o(a),u={kind:e.kind,type:e.type,input:a,expected:i,received:c,message:`Invalid ${t}: ${i?`Expected ${i} but r`:"R"}eceived ${c}`,requirement:e.requirement,path:r?.path,issues:r?.issues,lang:s.lang,abortEarly:s.abortEarly,abortPipeEarly:s.abortPipeEarly},l="schema"===e.kind,d=r?.message??e.message??(e.reference,void u.lang)??(l?void u.lang:null)??s.message??void u.lang;void 0!==d&&(u.message="function"==typeof d?d(u):d),l&&(n.typed=!1),n.issues?n.issues.push(u):n.issues=[u]}function i(e){return{version:1,vendor:"valibot",validate:t=>e["~run"]({value:t},r())}}function c(e,t){return Object.hasOwn(e,t)&&"__proto__"!==t&&"prototype"!==t&&"constructor"!==t}function u(e,t){const n=[...new Set(e)];return n.length>1?`(${n.join(` ${t} `)})`:n[0]??"never"}function l(e,t){return{kind:"validation",type:"min_length",reference:l,async:!1,expects:`>=${e}`,requirement:e,message:t,"~run"(e,t){return e.typed&&e.value.length<this.requirement&&a(this,"length",e,t,{received:`${e.value.length}`}),e}}}function d(e){return{kind:"validation",type:"url",reference:d,async:!1,expects:null,requirement(e){try{return new URL(e),!0}catch{return!1}},message:e,"~run"(e,t){return e.typed&&!this.requirement(e.value)&&a(this,"URL",e,t),e}}}function h(e,t,n){return"function"==typeof e.fallback?e.fallback(t,n):e.fallback}function p(e,t,n){return"function"==typeof e.default?e.default(t,n):e.default}function m(e){return{kind:"schema",type:"boolean",reference:m,expects:"boolean",async:!1,message:e,get"~standard"(){return i(this)},"~run"(e,t){return"boolean"==typeof e.value?e.typed=!0:a(this,"type",e,t),e}}}function g(e,t){return{kind:"schema",type:"literal",reference:g,expects:o(e),async:!1,literal:e,message:t,get"~standard"(){return i(this)},"~run"(e,t){return e.value===this.literal?e.typed=!0:a(this,"type",e,t),e}}}function f(e,t){return{kind:"schema",type:"nullable",reference:f,expects:`(${e.expects} | null)`,async:!1,wrapped:e,default:t,get"~standard"(){return i(this)},"~run"(e,t){return null===e.value&&(void 0!==this.default&&(e.value=p(this,e,t)),null===e.value)?(e.typed=!0,e):this.wrapped["~run"](e,t)}}}function v(e){return{kind:"schema",type:"number",reference:v,expects:"number",async:!1,message:e,get"~standard"(){return i(this)},"~run"(e,t){return"number"!=typeof e.value||isNaN(e.value)?a(this,"type",e,t):e.typed=!0,e}}}function y(e,t){return{kind:"schema",type:"object",reference:y,expects:"Object",async:!1,entries:e,message:t,get"~standard"(){return i(this)},"~run"(e,t){const n=e.value;if(n&&"object"==typeof n){e.typed=!0,e.value={};for(const s in this.entries){const r=this.entries[s];if(s in n||("exact_optional"===r.type||"optional"===r.type||"nullish"===r.type)&&void 0!==r.default){const o=s in n?n[s]:p(r),a=r["~run"]({value:o},t);if(a.issues){const r={type:"object",origin:"value",input:n,key:s,value:o};for(const t of a.issues)t.path?t.path.unshift(r):t.path=[r],e.issues?.push(t);if(e.issues||(e.issues=a.issues),t.abortEarly){e.typed=!1;break}}a.typed||(e.typed=!1),e.value[s]=a.value}else if(void 0!==r.fallback)e.value[s]=h(r);else if("exact_optional"!==r.type&&"optional"!==r.type&&"nullish"!==r.type&&(a(this,"key",e,t,{input:void 0,expected:`"${s}"`,path:[{type:"object",origin:"key",input:n,key:s,value:n[s]}]}),t.abortEarly))break}}else a(this,"type",e,t);return e}}}function S(e,t){return{kind:"schema",type:"optional",reference:S,expects:`(${e.expects} | undefined)`,async:!1,wrapped:e,default:t,get"~standard"(){return i(this)},"~run"(e,t){return void 0===e.value&&(void 0!==this.default&&(e.value=p(this,e,t)),void 0===e.value)?(e.typed=!0,e):this.wrapped["~run"](e,t)}}}function w(e,t){return{kind:"schema",type:"picklist",reference:w,expects:u(e.map(o),"|"),async:!1,options:e,message:t,get"~standard"(){return i(this)},"~run"(e,t){return this.options.includes(e.value)?e.typed=!0:a(this,"type",e,t),e}}}function k(e,t,n){return{kind:"schema",type:"record",reference:k,expects:"Object",async:!1,key:e,value:t,message:n,get"~standard"(){return i(this)},"~run"(e,t){const n=e.value;if(n&&"object"==typeof n){e.typed=!0,e.value={};for(const s in n)if(c(n,s)){const r=n[s],o=this.key["~run"]({value:s},t);if(o.issues){const a={type:"object",origin:"key",input:n,key:s,value:r};for(const t of o.issues)t.path=[a],e.issues?.push(t);if(e.issues||(e.issues=o.issues),t.abortEarly){e.typed=!1;break}}const a=this.value["~run"]({value:r},t);if(a.issues){const o={type:"object",origin:"value",input:n,key:s,value:r};for(const t of a.issues)t.path?t.path.unshift(o):t.path=[o],e.issues?.push(t);if(e.issues||(e.issues=a.issues),t.abortEarly){e.typed=!1;break}}o.typed&&a.typed||(e.typed=!1),o.typed&&(e.value[o.value]=a.value)}}else a(this,"type",e,t);return e}}}function b(e){return{kind:"schema",type:"string",reference:b,expects:"string",async:!1,message:e,get"~standard"(){return i(this)},"~run"(e,t){return"string"==typeof e.value?e.typed=!0:a(this,"type",e,t),e}}}function R(e){let t;if(e)for(const n of e)t?t.push(...n.issues):t=n.issues;return t}function C(e,t){return{kind:"schema",type:"union",reference:C,expects:u(e.map(e=>e.expects),"|"),async:!1,options:e,message:t,get"~standard"(){return i(this)},"~run"(e,t){let n,s,r;for(const o of this.options){const a=o["~run"]({value:e.value},t);if(a.typed){if(!a.issues){n=a;break}s?s.push(a):s=[a]}else r?r.push(a):r=[a]}if(n)return n;if(s){if(1===s.length)return s[0];a(this,"type",e,t,{issues:R(s)}),e.typed=!0}else{if(1===r?.length)return r[0];a(this,"type",e,t,{issues:R(r)})}return e}}}function x(){return{kind:"schema",type:"unknown",reference:x,expects:"unknown",async:!1,get"~standard"(){return i(this)},"~run":e=>(e.typed=!0,e)}}function E(...e){return{...e[0],pipe:e,get"~standard"(){return i(this)},"~run"(t,n){for(const s of e)if("metadata"!==s.kind){if(t.issues&&("schema"===s.kind||"transformation"===s.kind)){t.typed=!1;break}t.issues&&(n.abortEarly||n.abortPipeEarly)||(t=s["~run"](t,n))}return t}}}function _(e){return"object"==typeof e&&null!==e&&"message"in e&&"string"==typeof e.message}class A{constructor(e){this.moduleName=e}formatPrefix(e){return`[SuperAppSDK][${this.moduleName}.${e}]`}warn(e,t){console.warn(`${this.formatPrefix(e)} ${t}`)}error(e,t){console.error(`${this.formatPrefix(e)} ${t}`)}}function U(){if("undefined"==typeof window||!window.navigator)return null;const e=window.navigator.userAgent;return e?function(e){if(!e||"string"!=typeof e)return null;const t=e.match(/(Grab|GrabBeta|GrabBetaDebug|GrabTaxi|GrabEarlyAccess)\/v?([0-9]+)\.([0-9]+)\.([0-9]+) \(.*(Android|iOS).*\)/i);return t?{appName:t[1],version:{major:Number(t[2]),minor:Number(t[3]),patch:Number(t[4])},platform:t[5]}:null}(e):null}class M{get wrappedModule(){return window[`Wrapped${this.name}`]}constructor(e){if(this.name=e,this.logger=new A(e),!this.wrappedModule)try{s.wrapModule(window,this.name)}catch(e){throw new Error(`Failed to initialize ${this.name}${_(e)?`: ${e.message}`:""}`,{cause:e})}}validate(e,t){const n=function(e,t){const n=e["~run"]({value:t},r(void 0));return{typed:n.typed,success:!n.issues,output:n.value,issues:n.issues}}(e,t);return n.success?null:n.issues.map(e=>{const t=e.path?.map(e=>String(e.key)).join(".");return t?`${t}: ${e.message}`:e.message}).join(", ")}checkSupport(e){const t=U();return t?e(t)?null:{status_code:426,error:"Upgrade Required: This method requires a newer version of the Grab app"}:{status_code:501,error:"Not implemented: This method requires the Grab app environment"}}async invoke(e){const{method:t,params:n}=e;try{return U()?await this.wrappedModule.invoke(t,n):{status_code:501,error:"Not implemented: This method requires the Grab app environment"}}catch(e){return{status_code:500,error:`Failed to invoke method: ${_(e)?e.message:"Unknown error"}`}}}createErrorStream(e){return{subscribe:t=>(t?.next?.(e),t?.complete?.(),{isUnsubscribed:()=>!0,unsubscribe:()=>{}}),then:t=>Promise.resolve(e).then(t)}}invokeStream(e){const{method:t,params:n}=e;try{return U()?this.wrappedModule.invoke(t,n):this.createErrorStream({status_code:501,error:"Not implemented: This method requires the Grab app environment"})}catch(e){return this.createErrorStream({status_code:500,error:`Failed to invoke method: ${_(e)?e.message:"Unknown error"}`})}}}const $=e=>y({status_code:g(e),error:b()}),I=e=>y({status_code:g(200),result:e}),T=y({status_code:g(204)}),O=y({status_code:g(302)}),N=y({title:S(b())}),P=y({qrCode:b()}),B=C([I(P),T,$(400),$(403),$(500),$(501)]),L=k(b(),x()),D=function e(t,n,s){return{kind:"schema",type:"variant",reference:e,expects:"Object",async:!1,key:t,options:n,message:s,get"~standard"(){return i(this)},"~run"(e,t){const n=e.value;if(n&&"object"==typeof n){let s,r=0,o=this.key,i=[];const c=(e,a)=>{for(const u of e.options){if("variant"===u.type)c(u,new Set(a).add(u.key));else{let e=!0,c=0;for(const t of a){const s=u.entries[t];if(t in n?s["~run"]({typed:!1,value:n[t]},{abortEarly:!0}).issues:"exact_optional"!==s.type&&"optional"!==s.type&&"nullish"!==s.type){e=!1,o!==t&&(r<c||r===c&&t in n&&!(o in n))&&(r=c,o=t,i=[]),o===t&&i.push(u.entries[t].expects);break}c++}if(e){const e=u["~run"]({value:n},t);(!s||!s.typed&&e.typed)&&(s=e)}}if(s&&!s.issues)break}};if(c(this,new Set([this.key])),s)return s;a(this,"type",e,t,{input:n[o],expected:u(i,"|"),path:[{type:"object",origin:"value",input:n,key:o,value:n[o]}]})}else a(this,"type",e,t);return e}}}("status",[y({status:g("success"),transactionID:b()}),y({status:g("failure"),transactionID:b(),errorMessage:b(),errorCode:b()}),y({status:g("pending"),transactionID:b()}),y({status:g("userInitiatedCancel")})]),G=C([I(D),$(400),$(500),$(501)]),j=C([I(m()),T,$(400),$(500),$(501)]),z=C([I(m()),T,$(400),$(500),$(501)]),q=C([I(m()),T,$(500),$(501)]),K=C([I(m()),T,$(500),$(501)]),F=C([I(m()),T,$(500),$(501)]),W=C([I(m()),T,$(500),$(501)]),V=C([I(m()),T,$(500),$(501)]),H=C([I(m()),T,$(500),$(501)]),Y=C([I(m()),T,$(500),$(501)]),Q=C([I(m()),T,$(500),$(501)]),J=C([I(m()),T,$(400),$(500),$(501)]),X=C([I(m()),$(500),$(501)]),Z=y({state:E(b(),l(1)),name:E(b(),l(1)),data:S(k(b(),x()))}),ee=C([I(m()),T,$(400),$(500),$(501)]),te=y({connected:m()}),ne=C([I(te),$(404)]),se=b(),re=C([I(se),T,$(500),$(501)]),oe=m(),ae=C([I(oe),$(500),$(501)]),ie=y({fileUrl:E(b(),d()),fileName:E(b(),l(1))}),ce=C([T,$(400),$(500),$(501)]);function ue(e){const t=new Uint32Array(e);crypto.getRandomValues(t);let n="";for(let s=0;s<e;s+=1)n+="ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789".charAt(t[s]%62);return n}async function le(e){const t=(new TextEncoder).encode(e);return function(e){const t=new Uint8Array(e);let n="";for(let e=0;e<t.byteLength;e+=1)n+=String.fromCharCode(t[e]);return btoa(n).replace(/=/g,"").replace(/\+/g,"-").replace(/\//g,"_")}(await crypto.subtle.digest("SHA-256",t))}function de(e,t){return e.major!==t.major?e.major>t.major:e.minor!==t.minor?e.minor>t.minor:e.patch>=t.patch}const he="grabid",pe={staging:"https://partner-api.stg-myteksi.com/grabid/v1/oauth2/.well-known/openid-configuration",production:"https://partner-api.grab.com/grabid/v1/oauth2/.well-known/openid-configuration"};class me extends Error{constructor(e,t){super(e),this.cause=t,this.name="AuthorizationConfigurationError"}}const ge=y({clientId:E(b(),l(1)),redirectUri:E(b(),d()),scope:E(b(),l(1)),environment:w(["staging","production"]),responseMode:S(w(["redirect","in_place"]))}),fe=y({code:b(),state:b()}),ve=C([I(fe),T,O,$(400),$(403),$(500),$(501)]),ye=y({state:b(),codeVerifier:b(),nonce:b(),redirectUri:b()}),Se=C([I(ye),T,$(400)]),we=C([T]);class ke extends M{constructor(){super("IdentityModule")}async fetchAuthorizationEndpoint(e){const t=pe[e];if(!t)throw new Error(`Invalid environment: ${e}. Must be 'staging' or 'production'`);try{const e=await fetch(t);if(!e.ok)throw console.error(`Failed to fetch OpenID configuration from ${t}: ${e.status} ${e.statusText}`),new me("Failed to fetch authorization configuration");const n=await e.json();if(!n.authorization_endpoint)throw console.error("authorization_endpoint not found in OpenID configuration response"),new me("Invalid authorization configuration");return n.authorization_endpoint}catch(e){if(console.error("Error fetching authorization endpoint:",e),e instanceof me)throw e;throw new Error("Something wrong happened when fetching authorization configuration",{cause:e})}}async generatePKCEArtifacts(){const e=ue(16),t=ue(32),n=(s=ue(64),btoa(s).replace(/=/g,"").replace(/\+/g,"-").replace(/\//g,"_"));var s;return{nonce:e,state:t,codeVerifier:n,codeChallenge:await le(n),codeChallengeMethod:"S256"}}storePKCEArtifacts(e){this.setStorageItem("nonce",e.nonce),this.setStorageItem("state",e.state),this.setStorageItem("code_verifier",e.codeVerifier),this.setStorageItem("redirect_uri",e.redirectUri)}async getAuthorizationArtifacts(){const e=this.getStorageItem("state"),t=this.getStorageItem("code_verifier"),n=this.getStorageItem("nonce"),s=this.getStorageItem("redirect_uri");return null===e&&null===t&&null===n&&null===s?{status_code:204}:null!==e&&null!==t&&null!==n&&null!==s?{status_code:200,result:{state:e,codeVerifier:t,nonce:n,redirectUri:s}}:{status_code:400,error:"Inconsistent authorization artifacts in storage"}}async clearAuthorizationArtifacts(){return window.localStorage.removeItem(`${he}:nonce`),window.localStorage.removeItem(`${he}:state`),window.localStorage.removeItem(`${he}:code_verifier`),window.localStorage.removeItem(`${he}:redirect_uri`),window.localStorage.removeItem(`${he}:login_return_uri`),{status_code:204}}setStorageItem(e,t){window.localStorage.setItem(`${he}:${e}`,t)}getStorageItem(e){return window.localStorage.getItem(`${he}:${e}`)}static normalizeUrl(e){const t=new URL(e);return`${t.origin}${t.pathname}`}static buildAuthorizeUrl(e,t){return`${e}?${Object.entries(t).filter(e=>void 0!==e[1]&&null!==e[1]).map(([e,t])=>`${encodeURIComponent(e)}=${encodeURIComponent(t)}`).join("&")}`}static shouldUseWebConsent(e){const t=U();return!t||"staging"!==e.environment&&!de(t.version,{major:5,minor:396,patch:0})}async performWebAuthorization(e){let t;this.setStorageItem("login_return_uri",window.location.href),this.setStorageItem("redirect_uri",e.redirectUri);try{t=await this.fetchAuthorizationEndpoint(e.environment)}catch(e){return{status_code:400,error:_(e)?e.message:"Could not fetch authorization endpoint"}}const n={client_id:e.clientId,scope:e.scope,response_type:"code",redirect_uri:e.redirectUri,nonce:e.nonce,state:e.state,code_challenge_method:e.codeChallengeMethod,code_challenge:e.codeChallenge},s=ke.buildAuthorizeUrl(t,n);return window.location.assign(s),{status_code:302}}async performNativeAuthorization(e){const t=await this.invoke({method:"authorize",params:{clientId:e.clientId,redirectUri:e.actualRedirectUri,scope:e.scope,nonce:e.nonce,state:e.state,codeChallenge:e.codeChallenge,codeChallengeMethod:e.codeChallengeMethod,responseMode:e.responseMode}}),n=this.validate(ve,t);return n&&this.logger.warn("authorize",`Unexpected response shape: ${n}`),t}async authorize(e){const t=this.validate(ge,e);if(t)return{status_code:400,error:t};const n=await this.generatePKCEArtifacts(),s=e.responseMode||"redirect",r="in_place"===s?ke.normalizeUrl(window.location.href):e.redirectUri;this.storePKCEArtifacts({...n,redirectUri:r});const o={clientId:e.clientId,redirectUri:e.redirectUri,scope:e.scope,nonce:n.nonce,state:n.state,codeChallenge:n.codeChallenge,codeChallengeMethod:n.codeChallengeMethod};if(ke.shouldUseWebConsent(e))return this.performWebAuthorization({...o,environment:e.environment});try{const t=await this.performNativeAuthorization({...o,actualRedirectUri:r,responseMode:s});return 400===t.status_code||403===t.status_code||500===t.status_code||501===t.status_code?(console.error(`Native authorization returned ${t.status_code}, falling back to web flow:`,t.error),this.performWebAuthorization({...o,environment:e.environment})):t}catch(t){return console.error("Native authorization failed, falling back to web flow:",t),this.performWebAuthorization({...o,environment:e.environment})}}}const be=b(),Re=C([I(be),T,$(400),$(500),$(501)]),Ce=y({lat:v(),lng:v()}),xe=C([I(Ce),$(403),$(424),$(500),$(501)]),Ee=b(),_e=C([I(Ee),T,$(403),$(424),$(500),$(501)]),Ae=y({type:w(["START_PLAYBACK","PROGRESS_PLAYBACK","START_SEEK","STOP_SEEK","STOP_PLAYBACK","CLOSE_PLAYBACK","PAUSE_PLAYBACK","RESUME_PLAYBACK","FAST_FORWARD_PLAYBACK","REWIND_PLAYBACK","ERROR_PLAYBACK","CHANGE_VOLUME"]),titleId:b(),position:v(),length:v()}),Ue=C([I(Ae),T,$(400),$(424),$(500),$(501)]),Me=C([I(Ae),$(500),$(501)]),$e=C([T,$(500),$(501)]),Ie=y({email:b()}),Te=C([I(Ie),T,$(400),$(403),$(426),$(500),$(501)]),Oe=y({email:S(E(b(),l(1))),skipUserInput:S(m())}),Ne=y({email:b()}),Pe=C([I(Ne),T,$(400),$(403),$(426),$(500),$(501)]);class Be extends M{constructor(){super("ProfileModule")}async fetchEmail(){const e=this.checkSupport(e=>de(e.version,Be.MINIMUM_VERSION));if(e)return e;const t=await this.invoke({method:"fetchEmail"}),n=this.validate(Te,t);return n&&this.logger.warn("fetchEmail",`Unexpected response shape: ${n}`),t}async verifyEmail(e){const t=this.checkSupport(e=>de(e.version,Be.MINIMUM_VERSION));if(t)return t;const n=this.validate(Oe,e??{});if(n)return{status_code:400,error:n};const s=await this.invoke({method:"verifyEmail",params:e}),r=this.validate(Pe,s);return r&&this.logger.warn("verifyEmail",`Unexpected response shape: ${r}`),s}}Be.MINIMUM_VERSION={major:5,minor:399,patch:0};const Le=y({module:E(b(),l(1)),method:E(b(),l(1))}),De=y({hasAccess:m()}),Ge=C([I(De),$(400),$(424),$(500),$(501)]),je=C([T,$(424),$(500),$(501)]),ze=C([T,$(400),$(403),$(500),$(501)]),qe=y({key:E(b(),l(1))}),Ke=C([T,$(400),$(424),$(500),$(501)]),Fe=qe,We=y({value:f(m())}),Ve=C([I(We),$(400),$(424),$(500),$(501)]),He=C([T,$(400),$(424),$(500),$(501)]),Ye=qe,Qe=y({value:f(v())}),Je=C([I(Qe),$(400),$(424),$(500),$(501)]),Xe=C([T,$(400),$(424),$(500),$(501)]),Ze=qe,et=y({value:f(b())}),tt=C([I(et),$(400),$(424),$(500),$(501)]),nt=C([T,$(400),$(424),$(500),$(501)]),st=qe,rt=y({value:f(v())}),ot=C([I(rt),$(400),$(424),$(500),$(501)]),at=qe,it=C([T,$(400),$(424),$(500),$(501)]),ct=C([T,$(424),$(500),$(501)]),ut=y({url:E(b(),d())}),lt=C([I(b()),$(400),$(424),$(500),$(501)]),dt=b(),ht=C([I(dt),T,$(500),$(501)]);e.AuthorizeRequestSchema=ge,e.AuthorizeResponseSchema=ve,e.AuthorizeResultSchema=fe,e.BackResponseSchema=$e,e.BaseModule=M,e.CameraModule=class extends M{constructor(){super("CameraModule")}async scanQRCode(e={}){const t=this.validate(N,e);if(t)return{status_code:400,error:t};const n=await this.invoke({method:"scanQRCode",params:e}),s=this.validate(B,n);return s&&this.logger.warn("scanQRCode",`Unexpected response shape: ${s}`),n}},e.CheckoutModule=class extends M{constructor(){super("CheckoutModule")}async triggerCheckout(e){const t=this.validate(L,e);if(t)return{status_code:400,error:t};const n=await this.invoke({method:"triggerCheckout",params:e}),s=this.validate(G,n);return s&&this.logger.warn("triggerCheckout",`Unexpected response shape: ${s}`),n}},e.ClearAuthorizationArtifactsResponseSchema=we,e.CloseResponseSchema=V,e.ContainerAnalyticsEventData={TRANSACTION_AMOUNT:"transaction_amount",TRANSACTION_CURRENCY:"transaction_currency",PAGE:"page"},e.ContainerAnalyticsEventName={DEFAULT:"DEFAULT"},e.ContainerAnalyticsEventState={HOMEPAGE:"HOMEPAGE",CHECKOUT_PAGE:"CHECKOUT_PAGE",BOOKING_COMPLETION:"BOOKING_COMPLETION",CUSTOM:"CUSTOM"},e.ContainerModule=class extends M{constructor(){super("ContainerModule")}async setBackgroundColor(e){const t=await this.invoke({method:"setBackgroundColor",params:{backgroundColor:e}}),n=this.validate(j,t);return n&&this.logger.warn("setBackgroundColor",`Unexpected response shape: ${n}`),t}async setTitle(e){const t=await this.invoke({method:"setTitle",params:{title:e}}),n=this.validate(z,t);return n&&this.logger.warn("setTitle",`Unexpected response shape: ${n}`),t}async hideBackButton(){const e=await this.invoke({method:"hideBackButton"}),t=this.validate(q,e);return t&&this.logger.warn("hideBackButton",`Unexpected response shape: ${t}`),e}async showBackButton(){const e=await this.invoke({method:"showBackButton"}),t=this.validate(K,e);return t&&this.logger.warn("showBackButton",`Unexpected response shape: ${t}`),e}async hideRefreshButton(){const e=await this.invoke({method:"hideRefreshButton"}),t=this.validate(F,e);return t&&this.logger.warn("hideRefreshButton",`Unexpected response shape: ${t}`),e}async showRefreshButton(){const e=await this.invoke({method:"showRefreshButton"}),t=this.validate(W,e);return t&&this.logger.warn("showRefreshButton",`Unexpected response shape: ${t}`),e}async close(){const e=await this.invoke({method:"close"}),t=this.validate(V,e);return t&&this.logger.warn("close",`Unexpected response shape: ${t}`),e}async onContentLoaded(){const e=await this.invoke({method:"onContentLoaded"}),t=this.validate(H,e);return t&&this.logger.warn("onContentLoaded",`Unexpected response shape: ${t}`),e}async showLoader(){const e=await this.invoke({method:"showLoader"}),t=this.validate(Y,e);return t&&this.logger.warn("showLoader",`Unexpected response shape: ${t}`),e}async hideLoader(){const e=await this.invoke({method:"hideLoader"}),t=this.validate(Q,e);return t&&this.logger.warn("hideLoader",`Unexpected response shape: ${t}`),e}async openExternalLink(e){const t=await this.invoke({method:"openExternalLink",params:{url:e}}),n=this.validate(J,t);return n&&this.logger.warn("openExternalLink",`Unexpected response shape: ${n}`),t}async onCtaTap(e){const t=await this.invoke({method:"onCtaTap",params:{action:e}}),n=this.validate(X,t);return n&&this.logger.warn("onCtaTap",`Unexpected response shape: ${n}`),t}async sendAnalyticsEvent(e){const t=this.validate(Z,e);if(t)return{status_code:400,error:t};const n=await this.invoke({method:"sendAnalyticsEvent",params:{state:e.state,name:e.name,data:e.data?JSON.stringify(e.data):null}}),s=this.validate(ee,n);return s&&this.logger.warn("sendAnalyticsEvent",`Unexpected response shape: ${s}`),n}async isConnected(){return null!==U()?{status_code:200,result:{connected:!0}}:{status_code:404,error:"Not connected to Grab app"}}async getSessionParams(){const e=await this.invoke({method:"getSessionParams"}),t=this.validate(re,e);return t&&this.logger.warn("getSessionParams",`Unexpected response shape: ${t}`),e}},e.DRMPlaybackEventSchema=Ae,e.DeviceCapabilityModule=class extends M{constructor(){super("DeviceCapabilityModule")}async isEsimSupported(){const e=await this.invoke({method:"isEsimSupported"}),t=this.validate(ae,e);return t&&this.logger.warn("isEsimSupported",`Unexpected response shape: ${t}`),e}},e.DismissSplashScreenResponseSchema=ze,e.DownloadFileRequestSchema=ie,e.DownloadFileResponseSchema=ce,e.FetchEmailResponseSchema=Te,e.FetchEmailResultSchema=Ie,e.FileModule=class extends M{constructor(){super("FileModule")}async downloadFile(e){const t=this.validate(ie,e);if(t)return{status_code:400,error:t};const n=await this.invoke({method:"downloadFile",params:e}),s=this.validate(ce,n);return s&&this.logger.warn("downloadFile",`Unexpected response shape: ${s}`),n}},e.GetAuthorizationArtifactsResponseSchema=Se,e.GetAuthorizationArtifactsResultSchema=ye,e.GetBooleanRequestSchema=Fe,e.GetBooleanResponseSchema=Ve,e.GetBooleanResultSchema=We,e.GetCoordinateResponseSchema=xe,e.GetCoordinateResultSchema=Ce,e.GetCountryCodeResponseSchema=_e,e.GetCountryCodeResultSchema=Ee,e.GetDoubleRequestSchema=st,e.GetDoubleResponseSchema=ot,e.GetDoubleResultSchema=rt,e.GetIntRequestSchema=Ye,e.GetIntResponseSchema=Je,e.GetIntResultSchema=Qe,e.GetLanguageLocaleIdentifierResponseSchema=Re,e.GetLanguageLocaleIdentifierResultSchema=be,e.GetSelectedTravelDestinationResponseSchema=ht,e.GetSelectedTravelDestinationResultSchema=dt,e.GetSessionParamsResponseSchema=re,e.GetSessionParamsResultSchema=se,e.GetStringRequestSchema=Ze,e.GetStringResponseSchema=tt,e.GetStringResultSchema=et,e.HasAccessToRequestSchema=Le,e.HasAccessToResponseSchema=Ge,e.HasAccessToResultSchema=De,e.HideBackButtonResponseSchema=q,e.HideLoaderResponseSchema=Q,e.HideRefreshButtonResponseSchema=F,e.IdentityModule=ke,e.IsConnectedResponseSchema=ne,e.IsConnectedResultSchema=te,e.IsEsimSupportedResponseSchema=ae,e.IsEsimSupportedResultSchema=oe,e.LocaleModule=class extends M{constructor(){super("LocaleModule")}async getLanguageLocaleIdentifier(){const e=await this.invoke({method:"getLanguageLocaleIdentifier"}),t=this.validate(Re,e);return t&&this.logger.warn("getLanguageLocaleIdentifier",`Unexpected response shape: ${t}`),e}},e.LocationModule=class extends M{constructor(){super("LocationModule")}async getCoordinate(){const e=await this.invoke({method:"getCoordinate"}),t=this.validate(xe,e);return t&&this.logger.warn("getCoordinate",`Unexpected response shape: ${t}`),e}observeLocationChange(){return this.invokeStream({method:"observeLocationChange"})}async getCountryCode(){const e=await this.invoke({method:"getCountryCode"}),t=this.validate(_e,e);return t&&this.logger.warn("getCountryCode",`Unexpected response shape: ${t}`),e}},e.Logger=A,e.MediaModule=class extends M{constructor(){super("MediaModule")}async playDRMContent(e){const t=await this.invoke({method:"playDRMContent",params:{data:e}}),n=this.validate(Ue,t);return n&&this.logger.warn("playDRMContent",`Unexpected response shape: ${n}`),t}observePlayDRMContent(e){return this.invokeStream({method:"observePlayDRMContent",params:{data:e}})}},e.ObserveDRMPlaybackResponseSchema=Me,e.OnContentLoadedResponseSchema=H,e.OnCtaTapResponseSchema=X,e.OpenExternalLinkResponseSchema=J,e.PlatformModule=class extends M{constructor(){super("PlatformModule")}async back(){const e=await this.invoke({method:"back"}),t=this.validate($e,e);return t&&this.logger.warn("back",`Unexpected response shape: ${t}`),e}},e.PlayDRMContentResponseSchema=Ue,e.ProfileModule=Be,e.RedirectToSystemWebViewRequestSchema=ut,e.RedirectToSystemWebViewResponseSchema=lt,e.ReloadScopesResponseSchema=je,e.RemoveAllResponseSchema=ct,e.RemoveResponseSchema=it,e.ScanQRCodeRequestSchema=N,e.ScanQRCodeResponseSchema=B,e.ScanQRCodeResultSchema=P,e.ScopeModule=class extends M{constructor(){super("ScopeModule")}async hasAccessTo(e,t){const n={module:e,method:t},s=this.validate(Le,n);if(s)return{status_code:400,error:s};const r=await this.invoke({method:"hasAccessTo",params:n}),o=this.validate(Ge,r);return o&&this.logger.warn("hasAccessTo",`Unexpected response shape: ${o}`),r}async reloadScopes(){const e=await this.invoke({method:"reloadScopes"}),t=this.validate(je,e);return t&&this.logger.warn("reloadScopes",`Unexpected response shape: ${t}`),e}},e.SendAnalyticsEventRequestSchema=Z,e.SendAnalyticsEventResponseSchema=ee,e.SetBackgroundColorResponseSchema=j,e.SetBooleanResponseSchema=Ke,e.SetDoubleResponseSchema=nt,e.SetIntResponseSchema=He,e.SetStringResponseSchema=Xe,e.SetTitleResponseSchema=z,e.ShowBackButtonResponseSchema=K,e.ShowLoaderResponseSchema=Y,e.ShowRefreshButtonResponseSchema=W,e.SplashScreenModule=class extends M{constructor(){super("SplashScreenModule")}async dismiss(){const e=await this.invoke({method:"dismiss"}),t=this.validate(ze,e);return t&&this.logger.warn("dismiss",`Unexpected response shape: ${t}`),e}},e.StorageModule=class extends M{constructor(){super("StorageModule")}async setBoolean(e,t){const n=await this.invoke({method:"setBoolean",params:{key:e,value:t}}),s=this.validate(Ke,n);return s&&this.logger.warn("setBoolean",`Unexpected response shape: ${s}`),n}async getBoolean(e){const t={key:e},n=this.validate(Fe,t);if(n)return{status_code:400,error:n};const s=await this.invoke({method:"getBoolean",params:t}),r=this.validate(Ve,s);return r&&this.logger.warn("getBoolean",`Unexpected response shape: ${r}`),s}async setInt(e,t){const n=await this.invoke({method:"setInt",params:{key:e,value:t}}),s=this.validate(He,n);return s&&this.logger.warn("setInt",`Unexpected response shape: ${s}`),n}async getInt(e){const t={key:e},n=this.validate(Ye,t);if(n)return{status_code:400,error:n};const s=await this.invoke({method:"getInt",params:t}),r=this.validate(Je,s);return r&&this.logger.warn("getInt",`Unexpected response shape: ${r}`),s}async setString(e,t){const n=await this.invoke({method:"setString",params:{key:e,value:t}}),s=this.validate(Xe,n);return s&&this.logger.warn("setString",`Unexpected response shape: ${s}`),n}async getString(e){const t={key:e},n=this.validate(Ze,t);if(n)return{status_code:400,error:n};const s=await this.invoke({method:"getString",params:t}),r=this.validate(tt,s);return r&&this.logger.warn("getString",`Unexpected response shape: ${r}`),s}async setDouble(e,t){const n=await this.invoke({method:"setDouble",params:{key:e,value:t}}),s=this.validate(nt,n);return s&&this.logger.warn("setDouble",`Unexpected response shape: ${s}`),n}async getDouble(e){const t={key:e},n=this.validate(st,t);if(n)return{status_code:400,error:n};const s=await this.invoke({method:"getDouble",params:t}),r=this.validate(ot,s);return r&&this.logger.warn("getDouble",`Unexpected response shape: ${r}`),s}async remove(e){const t={key:e},n=this.validate(at,t);if(n)return{status_code:400,error:n};const s=await this.invoke({method:"remove",params:t}),r=this.validate(it,s);return r&&this.logger.warn("remove",`Unexpected response shape: ${r}`),s}async removeAll(){const e=await this.invoke({method:"removeAll"}),t=this.validate(ct,e);return t&&this.logger.warn("removeAll",`Unexpected response shape: ${t}`),e}},e.SystemWebViewKitModule=class extends M{constructor(){super("SystemWebViewKitModule")}async redirectToSystemWebView(e){const t=this.validate(ut,e);if(t)return{status_code:400,error:t};const n=await this.invoke({method:"redirectToSystemWebView",params:e}),s=this.validate(lt,n);return s&&this.logger.warn("redirectToSystemWebView",`Unexpected response shape: ${s}`),n}},e.TriggerCheckoutRequestSchema=L,e.TriggerCheckoutResponseSchema=G,e.TriggerCheckoutResultSchema=D,e.UserAttributesModule=class extends M{constructor(){super("UserAttributesModule")}async getSelectedTravelDestination(){const e=await this.invoke({method:"getSelectedTravelDestination"}),t=this.validate(ht,e);return t&&this.logger.warn("getSelectedTravelDestination",`Unexpected response shape: ${t}`),e}},e.VerifyEmailRequestSchema=Oe,e.VerifyEmailResponseSchema=Pe,e.VerifyEmailResultSchema=Ne,e.isClientError=function(e){const t=e.status_code;return 400===t||401===t||403===t||404===t||424===t||426===t},e.isError=function(e){return"error"in e},e.isFound=function(e){return 302===e.status_code},e.isNoContent=function(e){return 204===e.status_code},e.isOk=function(e){return 200===e.status_code},e.isRedirection=function(e){return 302===e.status_code},e.isServerError=function(e){return 500===e.status_code||501===e.status_code},e.isSuccess=function(e){return 200===e.status_code||204===e.status_code}});
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@grabjs/superapp-sdk",
3
- "version": "2.0.0-beta.29",
3
+ "version": "2.0.0-beta.31",
4
4
  "description": "SDK for Grab SuperApp WebView.",
5
5
  "main": "dist/index.js",
6
6
  "module": "dist/index.esm.js",
package/skills/SKILL.md CHANGED
@@ -260,25 +260,25 @@ JSBridge module for accessing the device camera.
260
260
 
261
261
  #### `CheckoutModule`
262
262
  JSBridge module for triggering native payment flows.
263
- - `triggerCheckout(request: Record<string, unknown>): Promise<{ error: string; status_code: 400 } | { error: string; status_code: 500 } | { error: string; status_code: 501 } | { result: { errorCode?: string; errorMessage?: string; status: "success" | "failure" | "pending" | "userInitiatedCancel"; transactionID: string }; status_code: 200 }>` — Triggers the native checkout flow for payment processing.
263
+ - `triggerCheckout(request: Record<string, unknown>): Promise<{ error: string; status_code: 400 } | { error: string; status_code: 500 } | { error: string; status_code: 501 } | { result: { status: "success"; transactionID: string } | { errorCode: string; errorMessage: string; status: "failure"; transactionID: string } | { status: "pending"; transactionID: string } | { status: "userInitiatedCancel" }; status_code: 200 }>` — Triggers the native checkout flow for payment processing.
264
264
 
265
265
  #### `ContainerModule`
266
266
  JSBridge module for controlling the WebView container.
267
- - `close(): Promise<{ error: string; status_code: 500 } | { error: string; status_code: 501 } | { status_code: 200 }>` — Close the container and return to the previous screen.
268
- - `getSessionParams(): Promise<{ error: string; status_code: 500 } | { error: string; status_code: 501 } | { result: { result: string }; status_code: 200 }>` — Get the session parameters from the container.
269
- - `hideBackButton(): Promise<{ error: string; status_code: 500 } | { error: string; status_code: 501 } | { status_code: 200 }>` — Hide the back button on the container header.
270
- - `hideLoader(): Promise<{ error: string; status_code: 500 } | { error: string; status_code: 501 } | { status_code: 200 }>` — Hide the full-screen loading indicator.
271
- - `hideRefreshButton(): Promise<{ error: string; status_code: 500 } | { error: string; status_code: 501 } | { status_code: 200 }>` — Hide the refresh button on the container header.
267
+ - `close(): Promise<{ status_code: 204 } | { error: string; status_code: 500 } | { error: string; status_code: 501 } | { result: boolean; status_code: 200 }>` — Close the container and return to the previous screen.
268
+ - `getSessionParams(): Promise<{ status_code: 204 } | { error: string; status_code: 500 } | { error: string; status_code: 501 } | { result: string; status_code: 200 }>` — Get the session parameters from the container.
269
+ - `hideBackButton(): Promise<{ status_code: 204 } | { error: string; status_code: 500 } | { error: string; status_code: 501 } | { result: boolean; status_code: 200 }>` — Hide the back button on the container header.
270
+ - `hideLoader(): Promise<{ status_code: 204 } | { error: string; status_code: 500 } | { error: string; status_code: 501 } | { result: boolean; status_code: 200 }>` — Hide the full-screen loading indicator.
271
+ - `hideRefreshButton(): Promise<{ status_code: 204 } | { error: string; status_code: 500 } | { error: string; status_code: 501 } | { result: boolean; status_code: 200 }>` — Hide the refresh button on the container header.
272
272
  - `isConnected(): Promise<{ result: { connected: boolean }; status_code: 200 } | { error: string; status_code: 404 }>` — Check if the web app is connected to the Grab SuperApp via JSBridge.
273
- - `onContentLoaded(): Promise<{ error: string; status_code: 500 } | { error: string; status_code: 501 } | { status_code: 200 }>` — Notify the Grab SuperApp that the page content has loaded.
274
- - `onCtaTap(request: string): Promise<{ error: string; status_code: 500 } | { error: string; status_code: 501 } | { status_code: 200 }>` — Notify the client that the user has tapped a call-to-action (CTA).
275
- - `openExternalLink(request: string): Promise<{ error: string; status_code: 400 } | { error: string; status_code: 500 } | { error: string; status_code: 501 } | { status_code: 200 }>` — Open a link in the external browser.
276
- - `sendAnalyticsEvent(request: { data?: Record<string, unknown>; name: string; state: string }): Promise<{ error: string; status_code: 400 } | { error: string; status_code: 500 } | { error: string; status_code: 501 } | { status_code: 200 }>` — Use this method to track user interactions and page transitions.
277
- - `setBackgroundColor(request: string): Promise<{ status_code: 204 } | { error: string; status_code: 400 } | { error: string; status_code: 500 } | { error: string; status_code: 501 }>` — Set the background color of the container header.
278
- - `setTitle(request: string): Promise<{ error: string; status_code: 400 } | { error: string; status_code: 500 } | { error: string; status_code: 501 } | { status_code: 200 }>` — Set the title of the container header.
279
- - `showBackButton(): Promise<{ error: string; status_code: 500 } | { error: string; status_code: 501 } | { status_code: 200 }>` — Show the back button on the container header.
280
- - `showLoader(): Promise<{ error: string; status_code: 500 } | { error: string; status_code: 501 } | { status_code: 200 }>` — Show the full-screen loading indicator.
281
- - `showRefreshButton(): Promise<{ error: string; status_code: 500 } | { error: string; status_code: 501 } | { status_code: 200 }>` — Show the refresh button on the container header.
273
+ - `onContentLoaded(): Promise<{ status_code: 204 } | { error: string; status_code: 500 } | { error: string; status_code: 501 } | { result: boolean; status_code: 200 }>` — Notify the Grab SuperApp that the page content has loaded.
274
+ - `onCtaTap(request: string): Promise<{ error: string; status_code: 500 } | { error: string; status_code: 501 } | { result: boolean; status_code: 200 }>` — Notify the client that the user has tapped a call-to-action (CTA).
275
+ - `openExternalLink(request: string): Promise<{ status_code: 204 } | { error: string; status_code: 400 } | { error: string; status_code: 500 } | { error: string; status_code: 501 } | { result: boolean; status_code: 200 }>` — Open a link in the external browser.
276
+ - `sendAnalyticsEvent(request: { data?: Record<string, unknown>; name: string; state: string }): Promise<{ status_code: 204 } | { error: string; status_code: 400 } | { error: string; status_code: 500 } | { error: string; status_code: 501 } | { result: boolean; status_code: 200 }>` — Use this method to track user interactions and page transitions.
277
+ - `setBackgroundColor(request: string): Promise<{ status_code: 204 } | { error: string; status_code: 400 } | { error: string; status_code: 500 } | { error: string; status_code: 501 } | { result: boolean; status_code: 200 }>` — Set the background color of the container header.
278
+ - `setTitle(request: string): Promise<{ status_code: 204 } | { error: string; status_code: 400 } | { error: string; status_code: 500 } | { error: string; status_code: 501 } | { result: boolean; status_code: 200 }>` — Set the title of the container header.
279
+ - `showBackButton(): Promise<{ status_code: 204 } | { error: string; status_code: 500 } | { error: string; status_code: 501 } | { result: boolean; status_code: 200 }>` — Show the back button on the container header.
280
+ - `showLoader(): Promise<{ status_code: 204 } | { error: string; status_code: 500 } | { error: string; status_code: 501 } | { result: boolean; status_code: 200 }>` — Show the full-screen loading indicator.
281
+ - `showRefreshButton(): Promise<{ status_code: 204 } | { error: string; status_code: 500 } | { error: string; status_code: 501 } | { result: boolean; status_code: 200 }>` — Show the refresh button on the container header.
282
282
 
283
283
  #### `DeviceCapabilityModule`
284
284
  JSBridge module for querying native device capability information.
@@ -290,7 +290,7 @@ JSBridge module for downloading files to the user's device.
290
290
 
291
291
  #### `IdentityModule`
292
292
  JSBridge module for authenticating users via GrabID.
293
- - `authorize(request: { clientId: string; environment: "staging" | "production"; redirectUri: string; responseMode?: "redirect" | "in_place"; scope: string }): Promise<{ status_code: 204 } | { error: string; status_code: 400 } | { error: string; status_code: 403 } | { error: string; status_code: 500 } | { error: string; status_code: 501 } | { result: { code: string; state: string }; status_code: 200 } | { status_code: 302 } | { error: string; status_code: 401 }>` — Initiates an OAuth2 authorization flow with PKCE (Proof Key for Code Exchange).
293
+ - `authorize(request: { clientId: string; environment: "staging" | "production"; redirectUri: string; responseMode?: "redirect" | "in_place"; scope: string }): Promise<{ status_code: 204 } | { error: string; status_code: 400 } | { error: string; status_code: 403 } | { error: string; status_code: 500 } | { error: string; status_code: 501 } | { result: { code: string; state: string }; status_code: 200 } | { status_code: 302 }>` — Initiates an OAuth2 authorization flow with PKCE (Proof Key for Code Exchange).
294
294
  This method handles both native in-app consent and web-based fallback flows.
295
295
  - `clearAuthorizationArtifacts(): Promise<{ status_code: 204 }>` — Clears all stored PKCE authorization artifacts from local storage.
296
296
  This should be called after a successful token exchange or when you need to
@@ -300,18 +300,21 @@ These artifacts are used to complete the OAuth2 authorization code exchange.
300
300
 
301
301
  #### `LocaleModule`
302
302
  JSBridge module for accessing device locale settings.
303
- - `getLanguageLocaleIdentifier(): Promise<{ error: string; status_code: 500 } | { error: string; status_code: 501 } | { result: string; status_code: 200 }>` — Retrieves the current language locale identifier from the device.
303
+ - `getLanguageLocaleIdentifier(): Promise<{ status_code: 204 } | { error: string; status_code: 400 } | { error: string; status_code: 500 } | { error: string; status_code: 501 } | { result: string; status_code: 200 }>` — Retrieves the current language locale identifier from the device.
304
304
 
305
305
  #### `LocationModule`
306
306
  JSBridge module for accessing device location services.
307
307
  - `getCoordinate(): Promise<{ error: string; status_code: 403 } | { error: string; status_code: 500 } | { error: string; status_code: 501 } | { result: { lat: number; lng: number }; status_code: 200 } | { error: string; status_code: 424 }>` — Get the current geographic coordinates of the device.
308
- - `getCountryCode(): Promise<{ error: string; status_code: 403 } | { error: string; status_code: 500 } | { error: string; status_code: 501 } | { error: string; status_code: 424 } | { result: { countryCode: string }; status_code: 200 }>` — Get the country code based on the device's current location.
308
+ - `getCountryCode(): Promise<{ status_code: 204 } | { error: string; status_code: 403 } | { error: string; status_code: 500 } | { error: string; status_code: 501 } | { result: string; status_code: 200 } | { error: string; status_code: 424 }>` — Get the country code based on the device's current location.
309
309
  - `observeLocationChange(): ObserveLocationChangeResponse` — Subscribe to location change updates from the device.
310
310
 
311
+ #### `Logger`
312
+ Provides scoped logging for SDK modules.
313
+
311
314
  #### `MediaModule`
312
315
  JSBridge module for playing DRM-protected media content.
313
316
  - `observePlayDRMContent(data: DRMContentConfig): ObserveDRMPlaybackResponse` — Observes DRM-protected media content playback events.
314
- - `playDRMContent(data: DRMContentConfig): Promise<{ status_code: 204 } | { error: string; status_code: 500 } | { error: string; status_code: 501 } | { status_code: 200 }>` — Plays DRM-protected media content in the native media player.
317
+ - `playDRMContent(data: DRMContentConfig): Promise<{ status_code: 204 } | { error: string; status_code: 400 } | { error: string; status_code: 500 } | { error: string; status_code: 501 } | { error: string; status_code: 424 } | { result: { length: number; position: number; titleId: string; type: "START_PLAYBACK" | "PROGRESS_PLAYBACK" | "START_SEEK" | "STOP_SEEK" | "STOP_PLAYBACK" | "CLOSE_PLAYBACK" | "PAUSE_PLAYBACK" | "RESUME_PLAYBACK" | "FAST_FORWARD_PLAYBACK" | "REWIND_PLAYBACK" | "ERROR_PLAYBACK" | "CHANGE_VOLUME" }; status_code: 200 }>` — Plays DRM-protected media content in the native media player.
315
318
 
316
319
  #### `PlatformModule`
317
320
  JSBridge module for controlling platform navigation.
@@ -320,13 +323,13 @@ This navigates back in the native navigation stack.
320
323
 
321
324
  #### `ProfileModule`
322
325
  JSBridge module for accessing user profile information.
323
- - `fetchEmail(): Promise<{ error: string; status_code: 400 } | { error: string; status_code: 403 } | { error: string; status_code: 500 } | { error: string; status_code: 501 } | { result: { email: string }; status_code: 200 } | { error: string; status_code: 426 }>` — Fetches the user's email address from their Grab profile.
324
- - `verifyEmail(request: { email: string; otp: string }): Promise<{ error: string; status_code: 400 } | { error: string; status_code: 403 } | { error: string; status_code: 500 } | { error: string; status_code: 501 } | { status_code: 200 } | { error: string; status_code: 426 }>` — Verifies the user's email address using a one-time password (OTP).
326
+ - `fetchEmail(): Promise<{ status_code: 204 } | { error: string; status_code: 400 } | { error: string; status_code: 403 } | { error: string; status_code: 500 } | { error: string; status_code: 501 } | { result: { email: string }; status_code: 200 } | { error: string; status_code: 426 }>` — Fetches the user's email address from their Grab profile.
327
+ - `verifyEmail(request?: { email?: string; skipUserInput?: boolean }): Promise<{ status_code: 204 } | { error: string; status_code: 400 } | { error: string; status_code: 403 } | { error: string; status_code: 500 } | { error: string; status_code: 501 } | { error: string; status_code: 426 } | { result: { email: string }; status_code: 200 }>` — Verifies the user's email address by triggering email capture bottom sheet and OTP verification.
325
328
 
326
329
  #### `ScopeModule`
327
330
  JSBridge module for checking and refreshing API access permissions.
328
331
  - `hasAccessTo(module: string, method: string): Promise<{ error: string; status_code: 400 } | { error: string; status_code: 500 } | { error: string; status_code: 501 } | { error: string; status_code: 424 } | { result: { hasAccess: boolean }; status_code: 200 }>` — Checks if the current client has access to a specific JSBridge API method.
329
- - `reloadScopes(): Promise<{ error: string; status_code: 500 } | { error: string; status_code: 501 } | { status_code: 200 } | { error: string; status_code: 424 }>` — Requests to reload the consented OAuth scopes for the current client.
332
+ - `reloadScopes(): Promise<{ status_code: 204 } | { error: string; status_code: 500 } | { error: string; status_code: 501 } | { error: string; status_code: 424 }>` — Requests to reload the consented OAuth scopes for the current client.
330
333
  This refreshes the permissions from the server.
331
334
 
332
335
  #### `SplashScreenModule`
@@ -335,20 +338,20 @@ JSBridge module for controlling the native splash / Lottie loading screen.
335
338
 
336
339
  #### `StorageModule`
337
340
  JSBridge module for persisting key-value data to native storage.
338
- - `getBoolean(key: string): Promise<{ error: string; status_code: 400 } | { error: string; status_code: 500 } | { error: string; status_code: 501 } | { result: { value: boolean | null }; status_code: 200 }>` — Retrieves a boolean value from the native storage.
339
- - `getDouble(key: string): Promise<{ error: string; status_code: 400 } | { error: string; status_code: 500 } | { error: string; status_code: 501 } | { result: { value: number | null }; status_code: 200 }>` — Retrieves a double (floating point) value from the native storage.
340
- - `getInt(key: string): Promise<{ error: string; status_code: 400 } | { error: string; status_code: 500 } | { error: string; status_code: 501 } | { result: { value: number | null }; status_code: 200 }>` — Retrieves an integer value from the native storage.
341
- - `getString(key: string): Promise<{ error: string; status_code: 400 } | { error: string; status_code: 500 } | { error: string; status_code: 501 } | { result: { value: string | null }; status_code: 200 }>` — Retrieves a string value from the native storage.
342
- - `remove(key: string): Promise<{ status_code: 204 } | { error: string; status_code: 400 } | { error: string; status_code: 500 } | { error: string; status_code: 501 }>` — Removes a single value from the native storage by key.
343
- - `removeAll(): Promise<{ status_code: 204 } | { error: string; status_code: 500 } | { error: string; status_code: 501 }>` — Removes all values from the native storage.
344
- - `setBoolean(key: string, value: boolean): Promise<{ status_code: 204 } | { error: string; status_code: 400 } | { error: string; status_code: 500 } | { error: string; status_code: 501 }>` — Stores a boolean value in the native storage.
345
- - `setDouble(key: string, value: number): Promise<{ status_code: 204 } | { error: string; status_code: 400 } | { error: string; status_code: 500 } | { error: string; status_code: 501 }>` — Stores a double (floating point) value in the native storage.
346
- - `setInt(key: string, value: number): Promise<{ status_code: 204 } | { error: string; status_code: 400 } | { error: string; status_code: 500 } | { error: string; status_code: 501 }>` — Stores an integer value in the native storage.
347
- - `setString(key: string, value: string): Promise<{ status_code: 204 } | { error: string; status_code: 400 } | { error: string; status_code: 500 } | { error: string; status_code: 501 }>` — Stores a string value in the native storage.
341
+ - `getBoolean(key: string): Promise<{ error: string; status_code: 400 } | { error: string; status_code: 500 } | { error: string; status_code: 501 } | { error: string; status_code: 424 } | { result: { value: boolean | null }; status_code: 200 }>` — Retrieves a boolean value from the native storage.
342
+ - `getDouble(key: string): Promise<{ error: string; status_code: 400 } | { error: string; status_code: 500 } | { error: string; status_code: 501 } | { error: string; status_code: 424 } | { result: { value: number | null }; status_code: 200 }>` — Retrieves a double (floating point) value from the native storage.
343
+ - `getInt(key: string): Promise<{ error: string; status_code: 400 } | { error: string; status_code: 500 } | { error: string; status_code: 501 } | { error: string; status_code: 424 } | { result: { value: number | null }; status_code: 200 }>` — Retrieves an integer value from the native storage.
344
+ - `getString(key: string): Promise<{ error: string; status_code: 400 } | { error: string; status_code: 500 } | { error: string; status_code: 501 } | { error: string; status_code: 424 } | { result: { value: string | null }; status_code: 200 }>` — Retrieves a string value from the native storage.
345
+ - `remove(key: string): Promise<{ status_code: 204 } | { error: string; status_code: 400 } | { error: string; status_code: 500 } | { error: string; status_code: 501 } | { error: string; status_code: 424 }>` — Removes a single value from the native storage by key.
346
+ - `removeAll(): Promise<{ status_code: 204 } | { error: string; status_code: 500 } | { error: string; status_code: 501 } | { error: string; status_code: 424 }>` — Removes all values from the native storage.
347
+ - `setBoolean(key: string, value: boolean): Promise<{ status_code: 204 } | { error: string; status_code: 400 } | { error: string; status_code: 500 } | { error: string; status_code: 501 } | { error: string; status_code: 424 }>` — Stores a boolean value in the native storage.
348
+ - `setDouble(key: string, value: number): Promise<{ status_code: 204 } | { error: string; status_code: 400 } | { error: string; status_code: 500 } | { error: string; status_code: 501 } | { error: string; status_code: 424 }>` — Stores a double (floating point) value in the native storage.
349
+ - `setInt(key: string, value: number): Promise<{ status_code: 204 } | { error: string; status_code: 400 } | { error: string; status_code: 500 } | { error: string; status_code: 501 } | { error: string; status_code: 424 }>` — Stores an integer value in the native storage.
350
+ - `setString(key: string, value: string): Promise<{ status_code: 204 } | { error: string; status_code: 400 } | { error: string; status_code: 500 } | { error: string; status_code: 501 } | { error: string; status_code: 424 }>` — Stores a string value in the native storage.
348
351
 
349
352
  #### `SystemWebViewKitModule`
350
353
  JSBridge module for opening URLs in the device's system browser.
351
- - `redirectToSystemWebView(request: { url: string }): Promise<{ error: string; status_code: 400 } | { error: string; status_code: 500 } | { error: string; status_code: 501 } | { status_code: 200 } | { error: string; status_code: 424 }>` — Opens a URL in the device's system web browser or web view.
354
+ - `redirectToSystemWebView(request: { url: string }): Promise<{ error: string; status_code: 400 } | { error: string; status_code: 500 } | { error: string; status_code: 501 } | { result: string; status_code: 200 } | { error: string; status_code: 424 }>` — Opens a URL in the device's system web browser or web view.
352
355
 
353
356
  #### `UserAttributesModule`
354
357
  JSBridge module for reading user-related attributes from native code.