@grabjs/superapp-sdk 2.0.0-beta.54 → 2.0.0-beta.55

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:{}},s=(e||(e=1,function(e){function t(e){var t=!1;return{isUnsubscribed:function(){return t},unsubscribe:function(){t||(e(),t=!0)}}}function s(e){return{subscribe:e,then:function(t,s){return new Promise(function(n,r){try{var o=null,a=!1;o=e({next:function(e){n(null==t?void 0:t(e)),o&&o.unsubscribe(),a=!0}}),a&&o&&o.unsubscribe()}catch(e){null==s?r(e):n(s(e))}})}}}function n(n,r){return r.funcNameToWrap,function(n,r){var o=r.callbackNameFunc,a=r.funcToWrap;return s(function(s){var r,i=o();return n[i]=function(t){if(function(e){for(var t=[],s=1;s<arguments.length;s++)t[s-1]=arguments[s];if(!e)return!1;var n=function(e){return Object.keys(e).concat(Object.getOwnPropertyNames(Object.getPrototypeOf(e)))}(e);return t.every(function(e){return 0<=n.indexOf(e)})}(t.result,"event"))t.result.event===e.StreamEvent.STREAM_TERMINATED&&r.unsubscribe();else{var n=t.result,o=t.error,a=t.status_code;s&&s.next&&s.next({result:null===n?void 0:n,error:null===o?void 0:o,status_code:null===a?void 0:a})}},a(i),r=t(function(){n[i]=void 0,s&&s.complete&&s.complete()})})}(n,function(e,t){var s={};for(var n in e)Object.prototype.hasOwnProperty.call(e,n)&&t.indexOf(n)<0&&(s[n]=e[n]);if(null!=e&&"function"==typeof Object.getOwnPropertySymbols){var r=0;for(n=Object.getOwnPropertySymbols(e);r<n.length;r++)t.indexOf(n[r])<0&&(s[n[r]]=e[n[r]])}return s}(r,["funcNameToWrap"]))}(e.StreamEvent||(e.StreamEvent={})).STREAM_TERMINATED="STREAM_TERMINATED",e.createDataStream=s,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 s;e[(s=t,"Wrapped"+s)]=function(e,t,s){return{invoke:function(r,o){return n(e,{funcNameToWrap:r,callbackNameFunc:function(){return function(e,t){var s=t.moduleName,n=t.funcName,r=0;return function(){for(var t,o,a="";(a=(t={moduleName:s,funcName:n,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 s({callback:e,method:r,module:t,parameters:null!=o?o:{}})}})}}}(e,t,function(s){if(e[t]&&e[t][s.method]instanceof Function)e[t][s.method](JSON.stringify(s));else{if(!(e.webkit&&e.webkit.messageHandlers&&e.webkit.messageHandlers[t]))throw new Error("Unexpected method '"+s.method+"' for module '"+t+"'");e.webkit.messageHandlers[t].postMessage(s)}})},Object.defineProperty(e,"__esModule",{value:!0})}(t.exports)),t.exports);function n(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 o(e,t,s,n,o){const a=o&&"input"in o?o.input:s.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:n.lang,abortEarly:n.abortEarly,abortPipeEarly:n.abortPipeEarly},d="schema"===e.kind,l=o?.message??e.message??(e.reference,void u.lang)??(d?void u.lang:null)??n.message??void u.lang;void 0!==l&&(u.message="function"==typeof l?l(u):l),d&&(s.typed=!1),s.issues?s.issues.push(u):s.issues=[u]}function a(e){return{version:1,vendor:"valibot",validate:t=>e["~run"]({value:t},n())}}function i(e,t){return Object.hasOwn(e,t)&&"__proto__"!==t&&"prototype"!==t&&"constructor"!==t}function c(e,t){const s=[...new Set(e)];return s.length>1?`(${s.join(` ${t} `)})`:s[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,s){return"function"==typeof e.fallback?e.fallback(t,s):e.fallback}function h(e,t,s){return"function"==typeof e.default?e.default(t,s):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 g(e,t){return{kind:"schema",type:"literal",reference:g,expects:r(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 m(e,t){return{kind:"schema",type:"nullish",reference:m,expects:`(${e.expects} | null | undefined)`,async:!1,wrapped:e,default:t,get"~standard"(){return a(this)},"~run"(e,t){return null!==e.value&&void 0!==e.value||(void 0!==this.default&&(e.value=h(this,e,t)),null!==e.value&&void 0!==e.value)?this.wrapped["~run"](e,t):(e.typed=!0,e)}}}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 s=e.value;if(s&&"object"==typeof s){e.typed=!0,e.value={};for(const n in this.entries){const r=this.entries[n];if(n in s||("exact_optional"===r.type||"optional"===r.type||"nullish"===r.type)&&void 0!==r.default){const o=n in s?s[n]:h(r),a=r["~run"]({value:o},t);if(a.issues){const r={type:"object",origin:"value",input:s,key:n,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[n]=a.value}else if(void 0!==r.fallback)e.value[n]=l(r);else if("exact_optional"!==r.type&&"optional"!==r.type&&"nullish"!==r.type&&(o(this,"key",e,t,{input:void 0,expected:`"${n}"`,path:[{type:"object",origin:"key",input:s,key:n,value:s[n]}]}),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(r),"|"),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,s){return{kind:"schema",type:"record",reference:k,expects:"Object",async:!1,key:e,value:t,message:s,get"~standard"(){return a(this)},"~run"(e,t){const s=e.value;if(s&&"object"==typeof s){e.typed=!0,e.value={};for(const n in s)if(i(s,n)){const r=s[n],o=this.key["~run"]({value:n},t);if(o.issues){const a={type:"object",origin:"key",input:s,key:n,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:s,key:n,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 o(this,"type",e,t);return e}}}function _(e){return{kind:"schema",type:"string",reference:_,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 b(e){let t;if(e)for(const s of e)t?t.push(...s.issues):t=s.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 s,n,r;for(const o of this.options){const a=o["~run"]({value:e.value},t);if(a.typed){if(!a.issues){s=a;break}n?n.push(a):n=[a]}else r?r.push(a):r=[a]}if(s)return s;if(n){if(1===n.length)return n[0];o(this,"type",e,t,{issues:b(n)}),e.typed=!0}else{if(1===r?.length)return r[0];o(this,"type",e,t,{issues:b(r)})}return e}}}function U(){return{kind:"schema",type:"unknown",reference:U,expects:"unknown",async:!1,get"~standard"(){return a(this)},"~run":e=>(e.typed=!0,e)}}function $(...e){return{...e[0],pipe:e,get"~standard"(){return a(this)},"~run"(t,s){for(const n of e)if("metadata"!==n.kind){if(t.issues&&("schema"===n.kind||"transformation"===n.kind)){t.typed=!1;break}t.issues&&(s.abortEarly||s.abortPipeEarly)||(t=n["~run"](t,s))}return t}}}function S(e){return"object"==typeof e&&null!==e&&"message"in e&&"string"==typeof e.message}class E{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 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 A{get wrappedModule(){return window[`Wrapped${this.name}`]}constructor(e){if(this.name=e,this.logger=new E(e),!this.wrappedModule)try{s.wrapModule(window,this.name)}catch(e){throw new Error(`Failed to initialize ${this.name}${S(e)?`: ${e.message}`:""}`,{cause:e})}}validate(e,t){const s=function(e,t){const s=e["~run"]({value:t},n(void 0));return{typed:s.typed,success:!s.issues,output:s.value,issues:s.issues}}(e,t);return s.success?null:s.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:s}=e;try{return C()?await this.wrappedModule.invoke(t,s):{status_code:501,error:"Not implemented: This method requires the Grab app environment"}}catch(e){return{status_code:500,error:`Failed to invoke method: ${S(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:s}=e;try{return C()?this.wrappedModule.invoke(t,s):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: ${S(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 N(e){return 302===e.status_code}function O(e){return 302===e.status_code}function P(e){return 400===e.status_code||401===e.status_code||403===e.status_code||404===e.status_code||424===e.status_code||426===e.status_code}function R(e){return 500===e.status_code||501===e.status_code}function B(e){return 400===e.status_code||401===e.status_code||403===e.status_code||404===e.status_code||424===e.status_code||426===e.status_code||500===e.status_code||501===e.status_code}function L(e){return"result"in e&&null!==e.result&&void 0!==e.result}const j=e=>v({status_code:g(e),error:_()}),D=e=>v({status_code:g(200),result:e}),z=v({status_code:g(204)}),K=v({status_code:g(302)}),G=v({title:y(_())}),W=v({qrCode:_()}),V=x([D(W),z,j(400),j(403),j(500),j(501)]);class F extends A{constructor(){super("CameraModule")}async scanQRCode(e={}){const t=this.validate(G,e);if(t)return{status_code:400,error:t};const s=await this.invoke({method:"scanQRCode",params:e}),n=this.validate(V,s);return n&&this.logger.warn("scanQRCode",`Unexpected response shape: ${n}`),s}}const q=k(_(),U()),H=function e(t,s,n){return{kind:"schema",type:"variant",reference:e,expects:"Object",async:!1,key:t,options:s,message:n,get"~standard"(){return a(this)},"~run"(e,t){const s=e.value;if(s&&"object"==typeof s){let n,r=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 n=c.entries[t];if(t in s?n["~run"]({typed:!1,value:s[t]},{abortEarly:!0}).issues:"exact_optional"!==n.type&&"optional"!==n.type&&"nullish"!==n.type){e=!1,a!==t&&(r<u||r===u&&t in s&&!(a in s))&&(r=u,a=t,i=[]),a===t&&i.push(c.entries[t].expects);break}u++}if(e){const e=c["~run"]({value:s},t);(!n||!n.typed&&e.typed)&&(n=e)}}if(n&&!n.issues)break}};if(u(this,new Set([this.key])),n)return n;o(this,"type",e,t,{input:s[a],expected:c(i,"|"),path:[{type:"object",origin:"value",input:s,key:a,value:s[a]}]})}else o(this,"type",e,t);return e}}}("status",[v({status:g("success"),transactionID:_()}),v({status:g("failure"),transactionID:_(),errorMessage:_(),errorCode:_()}),v({status:g("pending"),transactionID:_()}),v({status:g("userInitiatedCancel")})]),Y=x([D(H),j(400),j(500),j(501)]);class J extends A{constructor(){super("CheckoutModule")}async triggerCheckout(e){const t=this.validate(q,e);if(t)return{status_code:400,error:t};const s=await this.invoke({method:"triggerCheckout",params:e}),n=this.validate(Y,s);return n&&this.logger.warn("triggerCheckout",`Unexpected response shape: ${n}`),s}}const Q={HOMEPAGE:"HOMEPAGE",CHECKOUT_PAGE:"CHECKOUT_PAGE",BOOKING_COMPLETION:"BOOKING_COMPLETION",CUSTOM:"CUSTOM"},X={DEFAULT:"DEFAULT"},Z={TRANSACTION_AMOUNT:"transaction_amount",TRANSACTION_CURRENCY:"transaction_currency",PAGE:"page"},ee=x([D(p()),z,j(400),j(500),j(501)]),te=x([z,j(400),j(500),j(501)]),se=x([D(p()),z,j(400),j(500),j(501)]),ne=x([z,j(400),j(500),j(501)]),re=x([D(p()),z,j(500),j(501)]),oe=x([z,j(500),j(501)]),ae=x([D(p()),z,j(500),j(501)]),ie=x([z,j(500),j(501)]),ce=x([D(p()),z,j(500),j(501)]),ue=x([z,j(500),j(501)]),de=x([D(p()),z,j(500),j(501)]),le=x([z,j(500),j(501)]),he=x([D(p()),z,j(500),j(501)]),pe=x([z,j(500),j(501)]),ge=x([D(p()),z,j(500),j(501)]),me=x([D(p()),z,j(500),j(501)]),fe=x([z,j(500),j(501)]),ve=x([D(p()),z,j(500),j(501)]),ye=x([z,j(500),j(501)]),we=x([D(p()),z,j(400),j(500),j(501)]),ke=x([z,j(400),j(500),j(501)]),_e=x([D(p()),j(500),j(501)]),be=v({state:$(_(),u(1)),name:$(_(),u(1)),data:y(k(_(),U()))}),xe=x([D(p()),z,j(400),j(500),j(501)]),Ue=x([z,j(400),j(500),j(501)]),$e=v({connected:p()}),Se=x([D($e),j(404)]),Ee=_(),Ce=x([D(Ee),z,j(500),j(501)]);class Ae extends A{constructor(){super("ContainerModule")}async setBackgroundColor(e){const t=await this.invoke({method:"setBackgroundColor",params:{backgroundColor:e}}),s=this.validate(ee,t);let n;s&&this.logger.warn("setBackgroundColor",`Unexpected raw response shape: ${s}`),n=M(t)?{status_code:204}:t;const r=this.validate(te,n);return r&&this.logger.warn("setBackgroundColor",`Unexpected response shape: ${r}`),n}async setTitle(e){const t=await this.invoke({method:"setTitle",params:{title:e}}),s=this.validate(se,t);let n;s&&this.logger.warn("setTitle",`Unexpected raw response shape: ${s}`),n=M(t)?{status_code:204}:t;const r=this.validate(ne,n);return r&&this.logger.warn("setTitle",`Unexpected response shape: ${r}`),n}async hideBackButton(){const e=await this.invoke({method:"hideBackButton"}),t=this.validate(re,e);let s;t&&this.logger.warn("hideBackButton",`Unexpected raw response shape: ${t}`),s=M(e)?{status_code:204}:e;const n=this.validate(oe,s);return n&&this.logger.warn("hideBackButton",`Unexpected response shape: ${n}`),s}async showBackButton(){const e=await this.invoke({method:"showBackButton"}),t=this.validate(ae,e);let s;t&&this.logger.warn("showBackButton",`Unexpected raw response shape: ${t}`),s=M(e)?{status_code:204}:e;const n=this.validate(ie,s);return n&&this.logger.warn("showBackButton",`Unexpected response shape: ${n}`),s}async hideRefreshButton(){const e=await this.invoke({method:"hideRefreshButton"}),t=this.validate(ce,e);let s;t&&this.logger.warn("hideRefreshButton",`Unexpected raw response shape: ${t}`),s=M(e)?{status_code:204}:e;const n=this.validate(ue,s);return n&&this.logger.warn("hideRefreshButton",`Unexpected response shape: ${n}`),s}async showRefreshButton(){const e=await this.invoke({method:"showRefreshButton"}),t=this.validate(de,e);let s;t&&this.logger.warn("showRefreshButton",`Unexpected raw response shape: ${t}`),s=M(e)?{status_code:204}:e;const n=this.validate(le,s);return n&&this.logger.warn("showRefreshButton",`Unexpected response shape: ${n}`),s}async close(){const e=await this.invoke({method:"close"}),t=this.validate(he,e);let s;t&&this.logger.warn("close",`Unexpected raw response shape: ${t}`),s=M(e)?{status_code:204}:e;const n=this.validate(pe,s);return n&&this.logger.warn("close",`Unexpected response shape: ${n}`),s}async onContentLoaded(){const e=await this.invoke({method:"onContentLoaded"}),t=this.validate(ge,e);return t&&this.logger.warn("onContentLoaded",`Unexpected response shape: ${t}`),e}async showLoader(){const e=await this.invoke({method:"showLoader"}),t=this.validate(me,e);let s;t&&this.logger.warn("showLoader",`Unexpected raw response shape: ${t}`),s=M(e)?{status_code:204}:e;const n=this.validate(fe,s);return n&&this.logger.warn("showLoader",`Unexpected response shape: ${n}`),s}async hideLoader(){const e=await this.invoke({method:"hideLoader"}),t=this.validate(ve,e);let s;t&&this.logger.warn("hideLoader",`Unexpected raw response shape: ${t}`),s=M(e)?{status_code:204}:e;const n=this.validate(ye,s);return n&&this.logger.warn("hideLoader",`Unexpected response shape: ${n}`),s}async openExternalLink(e){const t=await this.invoke({method:"openExternalLink",params:{url:e}}),s=this.validate(we,t);let n;s&&this.logger.warn("openExternalLink",`Unexpected raw response shape: ${s}`),n=M(t)?{status_code:204}:t;const r=this.validate(ke,n);return r&&this.logger.warn("openExternalLink",`Unexpected response shape: ${r}`),n}async onCtaTap(e){const t=await this.invoke({method:"onCtaTap",params:{action:e}}),s=this.validate(_e,t);return s&&this.logger.warn("onCtaTap",`Unexpected response shape: ${s}`),t}async sendAnalyticsEvent(e){const t=this.validate(be,e);if(t)return{status_code:400,error:t};const s=await this.invoke({method:"sendAnalyticsEvent",params:{state:e.state,name:e.name,data:e.data?JSON.stringify(e.data):null}}),n=this.validate(xe,s);let r;n&&this.logger.warn("sendAnalyticsEvent",`Unexpected raw response shape: ${n}`),r=M(s)?{status_code:204}:s;const o=this.validate(Ue,r);return o&&this.logger.warn("sendAnalyticsEvent",`Unexpected response shape: ${o}`),r}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(Ce,e);return t&&this.logger.warn("getSessionParams",`Unexpected response shape: ${t}`),e}}function Ie(e,t){return e.major!==t.major?e.major>t.major:e.minor!==t.minor?e.minor>t.minor:e.patch>=t.patch}const Me=p(),Te=x([D(Me),j(403),j(424),j(426),j(500),j(501)]);class Ne extends A{constructor(){super("DeviceModule")}async isEsimSupported(){const e=this.checkSupport(e=>Ie(e.version,Ne.MINIMUM_VERSION));if(e)return e;const t=await this.invoke({method:"isEsimSupported"}),s=this.validate(Te,t);return s&&this.logger.warn("isEsimSupported",`Unexpected response shape: ${s}`),t}}Ne.MINIMUM_VERSION={major:5,minor:409,patch:0};const Oe=v({fileUrl:$(_(),d()),fileName:$(_(),u(1))}),Pe=x([z,j(400),j(500),j(501)]);class Re extends A{constructor(){super("FileModule")}async downloadFile(e){const t=this.validate(Oe,e);if(t)return{status_code:400,error:t};const s=await this.invoke({method:"downloadFile",params:e}),n=this.validate(Pe,s);return n&&this.logger.warn("downloadFile",`Unexpected response shape: ${n}`),s}}function Be(e){const t=new Uint32Array(e);crypto.getRandomValues(t);let s="";for(let n=0;n<e;n+=1)s+="ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789".charAt(t[n]%62);return s}async function Le(e){const t=(new TextEncoder).encode(e);return function(e){const t=new Uint8Array(e);let s="";for(let e=0;e<t.byteLength;e+=1)s+=String.fromCharCode(t[e]);return btoa(s).replace(/=/g,"").replace(/\+/g,"-").replace(/\//g,"_")}(await crypto.subtle.digest("SHA-256",t))}const je="grabid",De={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 ze extends Error{constructor(e,t){super(e),this.cause=t,this.name="AuthorizationConfigurationError"}}const Ke=v({clientId:$(_(),u(1)),redirectUri:$(_(),d()),scope:$(_(),u(1)),environment:w(["staging","production"]),responseMode:y(w(["redirect","in_place"]))}),Ge=x([D(v({code:_(),state:_()})),z,K,j(400),j(403),j(500),j(501)]),We=v({code:_(),state:_(),codeVerifier:_(),nonce:_(),redirectUri:_()}),Ve=x([D(We),z,K,j(400),j(403),j(500),j(501)]),Fe=v({state:_(),codeVerifier:_(),nonce:_(),redirectUri:_()}),qe=x([D(Fe),z,j(400)]),He=x([z]);class Ye extends A{constructor(){super("IdentityModule")}async fetchAuthorizationEndpoint(e){const t=De[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 ze("Failed to fetch authorization configuration");const s=await e.json();if(!s.authorization_endpoint)throw console.error("authorization_endpoint not found in OpenID configuration response"),new ze("Invalid authorization configuration");return s.authorization_endpoint}catch(e){if(console.error("Error fetching authorization endpoint:",e),e instanceof ze)throw e;throw new Error("Something wrong happened when fetching authorization configuration",{cause:e})}}async generatePKCEArtifacts(){const e=Be(16),t=Be(32),s=(n=Be(64),btoa(n).replace(/=/g,"").replace(/\+/g,"-").replace(/\//g,"_"));var n;return{nonce:e,state:t,codeVerifier:s,codeChallenge:await Le(s),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"),s=this.getStorageItem("nonce"),n=this.getStorageItem("redirect_uri");return null===e&&null===t&&null===s&&null===n?{status_code:204}:null!==e&&null!==t&&null!==s&&null!==n?{status_code:200,result:{state:e,codeVerifier:t,nonce:s,redirectUri:n}}:{status_code:400,error:"Inconsistent authorization artifacts in storage"}}async clearAuthorizationArtifacts(){return window.localStorage.removeItem(`${je}:nonce`),window.localStorage.removeItem(`${je}:state`),window.localStorage.removeItem(`${je}:code_verifier`),window.localStorage.removeItem(`${je}:redirect_uri`),window.localStorage.removeItem(`${je}:login_return_uri`),{status_code:204}}setStorageItem(e,t){window.localStorage.setItem(`${je}:${e}`,t)}getStorageItem(e){return window.localStorage.getItem(`${je}:${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&&!Ie(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:S(e)?e.message:"Could not fetch authorization endpoint"}}const s={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},n=Ye.buildAuthorizeUrl(t,s);return window.location.assign(n),{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}}),s=this.validate(Ge,t);return s&&this.logger.warn("authorize",`Unexpected response shape: ${s}`),t}async authorize(e){const t=this.validate(Ke,e);if(t)return{status_code:400,error:t};const s=await this.generatePKCEArtifacts(),n=e.responseMode||"redirect",r="in_place"===n?Ye.normalizeUrl(window.location.href):e.redirectUri;this.storePKCEArtifacts({...s,redirectUri:r});const o={clientId:e.clientId,redirectUri:e.redirectUri,scope:e.scope,nonce:s.nonce,state:s.state,codeChallenge:s.codeChallenge,codeChallengeMethod:s.codeChallengeMethod};if(Ye.shouldUseWebConsent(e))return this.performWebAuthorization({...o,environment:e.environment});try{const t=await this.performNativeAuthorization({...o,actualRedirectUri:r,responseMode:n});return 200===t.status_code?{status_code:200,result:{code:t.result.code,state:t.result.state,codeVerifier:s.codeVerifier,nonce:s.nonce,redirectUri:r}}: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 Je=_(),Qe=x([D(Je),z,j(400),j(500),j(501)]);class Xe extends A{constructor(){super("LocaleModule")}async getLanguageLocaleIdentifier(){const e=await this.invoke({method:"getLanguageLocaleIdentifier"}),t=this.validate(Qe,e);return t&&this.logger.warn("getLanguageLocaleIdentifier",`Unexpected response shape: ${t}`),e}}const Ze=v({latitude:f(),longitude:f()}),et=x([D(Ze),j(403),j(424),j(500),j(501)]),tt=_(),st=x([D(tt),z,j(403),j(424),j(500),j(501)]);class nt extends A{constructor(){super("LocationModule")}async getCoordinate(){const e=await this.invoke({method:"getCoordinate"}),t=this.validate(et,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(st,e);return t&&this.logger.warn("getCountryCode",`Unexpected response shape: ${t}`),e}}const rt=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:_(),position:f(),length:f()}),ot=x([D(rt),z,j(400),j(424),j(500),j(501)]),at=x([D(rt),j(500),j(501)]);class it extends A{constructor(){super("MediaModule")}async playDRMContent(e){const t=await this.invoke({method:"playDRMContent",params:{data:e}}),s=this.validate(ot,t);return s&&this.logger.warn("playDRMContent",`Unexpected response shape: ${s}`),t}observePlayDRMContent(e){return this.invokeStream({method:"observePlayDRMContent",params:{data:e}})}}const ct=v({endpoint:_(),method:w(["GET","POST","PUT","DELETE","PATCH","HEAD","OPTIONS"]),headers:y(k(_(),_())),query:y(k(_(),_())),body:y(U()),timeout:y(f())}),ut=k(_(),U()),dt=x([D(ut),z,j(400),j(401),j(403),j(404),j(424),j(426),j(500),j(501)]),lt=x([_(),ut]),ht=x([D(lt),z,j(400),j(401),j(403),j(404),j(424),j(426),j(500),j(501)]);class pt extends A{constructor(){super("NetworkModule")}async send(e){const t=this.validate(ct,e);if(t)return{status_code:400,error:t};const s=await this.invoke({method:"send",params:e}),n=this.validate(ht,s);if(n&&this.logger.warn("send",`Unexpected raw response shape: ${n}`),I(s)&&L(s)&&"string"==typeof s.result)try{const e=JSON.parse(s.result),t={...s,result:e},n=this.validate(dt,t);return n&&this.logger.warn("send",`Unexpected response shape after parsing: ${n}`),t}catch{return{status_code:500,error:"Failed to parse response result as JSON"}}const r=s,o=this.validate(dt,r);return o&&this.logger.warn("send",`Unexpected response shape: ${o}`),r}}const gt=x([z,j(500),j(501)]);class mt extends A{constructor(){super("PlatformModule")}async back(){const e=await this.invoke({method:"back"}),t=this.validate(gt,e);return t&&this.logger.warn("back",`Unexpected response shape: ${t}`),e}}const ft=v({email:_()}),vt=x([D(ft),z,j(400),j(403),j(426),j(500),j(501)]),yt=v({email:y($(_(),u(1))),skipUserInput:y(p())}),wt=v({email:_()}),kt=x([D(wt),z,j(400),j(403),j(426),j(500),j(501)]);class _t extends A{constructor(){super("ProfileModule")}async fetchEmail(){const e=this.checkSupport(e=>Ie(e.version,_t.MINIMUM_VERSION));if(e)return e;const t=await this.invoke({method:"fetchEmail"}),s=this.validate(vt,t);return s&&this.logger.warn("fetchEmail",`Unexpected response shape: ${s}`),t}async verifyEmail(e){const t=this.checkSupport(e=>Ie(e.version,_t.MINIMUM_VERSION));if(t)return t;const s=this.validate(yt,e??{});if(s)return{status_code:400,error:s};const n=await this.invoke({method:"verifyEmail",params:e}),r=this.validate(kt,n);return r&&this.logger.warn("verifyEmail",`Unexpected response shape: ${r}`),n}}_t.MINIMUM_VERSION={major:5,minor:399,patch:0};const bt=v({module:$(_(),u(1)),method:$(_(),u(1))}),xt=p(),Ut=x([D(xt),j(400),j(424),j(500),j(501)]),$t=x([z,j(424),j(500),j(501)]);class St extends A{constructor(){super("ScopeModule")}async hasAccessTo(e,t){const s={module:e,method:t},n=this.validate(bt,s);if(n)return{status_code:400,error:n};const r=await this.invoke({method:"hasAccessTo",params:s}),o=this.validate(Ut,r);return o&&this.logger.warn("hasAccessTo",`Unexpected response shape: ${o}`),r}async reloadScopes(){const e=await this.invoke({method:"reloadScopes"}),t=this.validate($t,e);return t&&this.logger.warn("reloadScopes",`Unexpected response shape: ${t}`),e}}const Et=x([z,j(400),j(403),j(500),j(501)]);class Ct extends A{constructor(){super("SplashScreenModule")}async dismiss(){const e=await this.invoke({method:"dismiss"}),t=this.validate(Et,e);return t&&this.logger.warn("dismiss",`Unexpected response shape: ${t}`),e}}const At=$(_(),u(1)),It=v({key:At}),Mt=v({key:At,value:p()}),Tt=x([z,j(400),j(424),j(500),j(501)]),Nt=It,Ot=p(),Pt=x([v({status_code:g(200),result:m(p())}),z,j(400),j(424)]),Rt=x([D(Ot),z,j(400),j(424),j(500),j(501)]),Bt=v({key:At,value:f()}),Lt=x([z,j(400),j(424),j(500),j(501)]),jt=It,Dt=f(),zt=x([v({status_code:g(200),result:m(f())}),z,j(400),j(424)]),Kt=x([D(Dt),z,j(400),j(424),j(500),j(501)]),Gt=v({key:At,value:_()}),Wt=x([z,j(400),j(424),j(500),j(501)]),Vt=It,Ft=_(),qt=x([v({status_code:g(200),result:m(_())}),z,j(400),j(424)]),Ht=x([D(Ft),z,j(400),j(424),j(500),j(501)]),Yt=v({key:At,value:f()}),Jt=x([z,j(400),j(424),j(500),j(501)]),Qt=It,Xt=f(),Zt=x([v({status_code:g(200),result:m(f())}),z,j(400),j(424)]),es=x([D(Xt),z,j(400),j(424),j(500),j(501)]),ts=It,ss=x([z,j(400),j(424),j(500),j(501)]),ns=x([z,j(424),j(500),j(501)]);class rs extends A{constructor(){super("StorageModule")}async setBoolean(e,t){const s={key:e,value:t},n=this.validate(Mt,s);if(n)return{status_code:400,error:n};const r=await this.invoke({method:"setBoolean",params:s}),o=this.validate(Tt,r);return o&&this.logger.warn("setBoolean",`Unexpected response shape: ${o}`),r}async getBoolean(e){const t={key:e},s=this.validate(Nt,t);if(s)return{status_code:400,error:s};const n=await this.invoke({method:"getBoolean",params:t}),r=this.validate(Pt,n);let o;if(r&&this.logger.warn("getBoolean",`Unexpected raw response shape: ${r}`),200===n.status_code){const e=n.result;o=null==e?{status_code:204}:{status_code:200,result:e}}else o=n;const a=this.validate(Rt,o);return a&&this.logger.warn("getBoolean",`Unexpected response shape: ${a}`),o}async setInt(e,t){const s={key:e,value:t},n=this.validate(Bt,s);if(n)return{status_code:400,error:n};const r=await this.invoke({method:"setInt",params:s}),o=this.validate(Lt,r);return o&&this.logger.warn("setInt",`Unexpected response shape: ${o}`),r}async getInt(e){const t={key:e},s=this.validate(jt,t);if(s)return{status_code:400,error:s};const n=await this.invoke({method:"getInt",params:t}),r=this.validate(zt,n);let o;if(r&&this.logger.warn("getInt",`Unexpected raw response shape: ${r}`),200===n.status_code){const e=n.result;o=null==e?{status_code:204}:{status_code:200,result:e}}else o=n;const a=this.validate(Kt,o);return a&&this.logger.warn("getInt",`Unexpected response shape: ${a}`),o}async setString(e,t){const s={key:e,value:t},n=this.validate(Gt,s);if(n)return{status_code:400,error:n};const r=await this.invoke({method:"setString",params:s}),o=this.validate(Wt,r);return o&&this.logger.warn("setString",`Unexpected response shape: ${o}`),r}async getString(e){const t={key:e},s=this.validate(Vt,t);if(s)return{status_code:400,error:s};const n=await this.invoke({method:"getString",params:t}),r=this.validate(qt,n);let o;if(r&&this.logger.warn("getString",`Unexpected raw response shape: ${r}`),200===n.status_code){const e=n.result;o=null==e?{status_code:204}:{status_code:200,result:e}}else o=n;const a=this.validate(Ht,o);return a&&this.logger.warn("getString",`Unexpected response shape: ${a}`),o}async setDouble(e,t){const s={key:e,value:t},n=this.validate(Yt,s);if(n)return{status_code:400,error:n};const r=await this.invoke({method:"setDouble",params:s}),o=this.validate(Jt,r);return o&&this.logger.warn("setDouble",`Unexpected response shape: ${o}`),r}async getDouble(e){const t={key:e},s=this.validate(Qt,t);if(s)return{status_code:400,error:s};const n=await this.invoke({method:"getDouble",params:t}),r=this.validate(Zt,n);let o;if(r&&this.logger.warn("getDouble",`Unexpected raw response shape: ${r}`),200===n.status_code){const e=n.result;o=null==e?{status_code:204}:{status_code:200,result:e}}else o=n;const a=this.validate(es,o);return a&&this.logger.warn("getDouble",`Unexpected response shape: ${a}`),o}async remove(e){const t={key:e},s=this.validate(ts,t);if(s)return{status_code:400,error:s};const n=await this.invoke({method:"remove",params:t}),r=this.validate(ss,n);return r&&this.logger.warn("remove",`Unexpected response shape: ${r}`),n}async removeAll(){const e=await this.invoke({method:"removeAll"}),t=this.validate(ns,e);return t&&this.logger.warn("removeAll",`Unexpected response shape: ${t}`),e}}const os=v({url:$(_(),d())}),as=x([D(_()),j(400),j(424),j(500),j(501)]);class is extends A{constructor(){super("SystemWebViewKitModule")}async redirectToSystemWebView(e){const t=this.validate(os,e);if(t)return{status_code:400,error:t};const s=await this.invoke({method:"redirectToSystemWebView",params:e}),n=this.validate(as,s);return n&&this.logger.warn("redirectToSystemWebView",`Unexpected response shape: ${n}`),s}}const cs=_(),us=x([D(cs),z,j(500),j(501)]);class ds extends A{constructor(){super("UserAttributesModule")}async getSelectedTravelDestination(){const e=await this.invoke({method:"getSelectedTravelDestination"}),t=this.validate(us,e);return t&&this.logger.warn("getSelectedTravelDestination",`Unexpected response shape: ${t}`),e}}export{Ke as AuthorizeRequestSchema,Ve as AuthorizeResponseSchema,We as AuthorizeResultSchema,gt as BackResponseSchema,A as BaseModule,F as CameraModule,J as CheckoutModule,He as ClearAuthorizationArtifactsResponseSchema,pe as CloseResponseSchema,Z as ContainerAnalyticsEventData,X as ContainerAnalyticsEventName,Q as ContainerAnalyticsEventState,Ae as ContainerModule,rt as DRMPlaybackEventSchema,Ne as DeviceModule,Et as DismissSplashScreenResponseSchema,Oe as DownloadFileRequestSchema,Pe as DownloadFileResponseSchema,vt as FetchEmailResponseSchema,ft as FetchEmailResultSchema,Re as FileModule,qe as GetAuthorizationArtifactsResponseSchema,Fe as GetAuthorizationArtifactsResultSchema,Nt as GetBooleanRequestSchema,Rt as GetBooleanResponseSchema,Ot as GetBooleanResultSchema,et as GetCoordinateResponseSchema,Ze as GetCoordinateResultSchema,st as GetCountryCodeResponseSchema,tt as GetCountryCodeResultSchema,Qt as GetDoubleRequestSchema,es as GetDoubleResponseSchema,Xt as GetDoubleResultSchema,jt as GetIntRequestSchema,Kt as GetIntResponseSchema,Dt as GetIntResultSchema,Qe as GetLanguageLocaleIdentifierResponseSchema,Je as GetLanguageLocaleIdentifierResultSchema,us as GetSelectedTravelDestinationResponseSchema,cs as GetSelectedTravelDestinationResultSchema,Ce as GetSessionParamsResponseSchema,Ee as GetSessionParamsResultSchema,Vt as GetStringRequestSchema,Ht as GetStringResponseSchema,Ft as GetStringResultSchema,bt as HasAccessToRequestSchema,Ut as HasAccessToResponseSchema,xt as HasAccessToResultSchema,oe as HideBackButtonResponseSchema,ye as HideLoaderResponseSchema,ue as HideRefreshButtonResponseSchema,Ye as IdentityModule,Se as IsConnectedResponseSchema,$e as IsConnectedResultSchema,Te as IsEsimSupportedResponseSchema,Me as IsEsimSupportedResultSchema,Xe as LocaleModule,nt as LocationModule,E as Logger,it as MediaModule,pt as NetworkModule,at as ObserveDRMPlaybackResponseSchema,ge as OnContentLoadedResponseSchema,_e as OnCtaTapResponseSchema,ke as OpenExternalLinkResponseSchema,mt as PlatformModule,ot as PlayDRMContentResponseSchema,_t as ProfileModule,os as RedirectToSystemWebViewRequestSchema,as as RedirectToSystemWebViewResponseSchema,$t as ReloadScopesResponseSchema,ns as RemoveAllResponseSchema,ss as RemoveResponseSchema,G as ScanQRCodeRequestSchema,V as ScanQRCodeResponseSchema,W as ScanQRCodeResultSchema,St as ScopeModule,be as SendAnalyticsEventRequestSchema,Ue as SendAnalyticsEventResponseSchema,ct as SendRequestSchema,dt as SendResponseSchema,ut as SendResultSchema,te as SetBackgroundColorResponseSchema,Mt as SetBooleanRequestSchema,Tt as SetBooleanResponseSchema,Yt as SetDoubleRequestSchema,Jt as SetDoubleResponseSchema,Bt as SetIntRequestSchema,Lt as SetIntResponseSchema,Gt as SetStringRequestSchema,Wt as SetStringResponseSchema,ne as SetTitleResponseSchema,ie as ShowBackButtonResponseSchema,fe as ShowLoaderResponseSchema,le as ShowRefreshButtonResponseSchema,Ct as SplashScreenModule,rs as StorageModule,is as SystemWebViewKitModule,q as TriggerCheckoutRequestSchema,Y as TriggerCheckoutResponseSchema,H as TriggerCheckoutResultSchema,ds as UserAttributesModule,yt as VerifyEmailRequestSchema,kt as VerifyEmailResponseSchema,wt as VerifyEmailResultSchema,L as hasResult,P as isClientError,B as isError,O as isFound,T as isNoContent,M as isOk,N as isRedirection,R as isServerError,I as isSuccess};
7
+ var e,t={exports:{}},s=(e||(e=1,function(e){function t(e){var t=!1;return{isUnsubscribed:function(){return t},unsubscribe:function(){t||(e(),t=!0)}}}function s(e){return{subscribe:e,then:function(t,s){return new Promise(function(n,r){try{var o=null,a=!1;o=e({next:function(e){n(null==t?void 0:t(e)),o&&o.unsubscribe(),a=!0}}),a&&o&&o.unsubscribe()}catch(e){null==s?r(e):n(s(e))}})}}}function n(n,r){return r.funcNameToWrap,function(n,r){var o=r.callbackNameFunc,a=r.funcToWrap;return s(function(s){var r,i=o();return n[i]=function(t){if(function(e){for(var t=[],s=1;s<arguments.length;s++)t[s-1]=arguments[s];if(!e)return!1;var n=function(e){return Object.keys(e).concat(Object.getOwnPropertyNames(Object.getPrototypeOf(e)))}(e);return t.every(function(e){return 0<=n.indexOf(e)})}(t.result,"event"))t.result.event===e.StreamEvent.STREAM_TERMINATED&&r.unsubscribe();else{var n=t.result,o=t.error,a=t.status_code;s&&s.next&&s.next({result:null===n?void 0:n,error:null===o?void 0:o,status_code:null===a?void 0:a})}},a(i),r=t(function(){n[i]=void 0,s&&s.complete&&s.complete()})})}(n,function(e,t){var s={};for(var n in e)Object.prototype.hasOwnProperty.call(e,n)&&t.indexOf(n)<0&&(s[n]=e[n]);if(null!=e&&"function"==typeof Object.getOwnPropertySymbols){var r=0;for(n=Object.getOwnPropertySymbols(e);r<n.length;r++)t.indexOf(n[r])<0&&(s[n[r]]=e[n[r]])}return s}(r,["funcNameToWrap"]))}(e.StreamEvent||(e.StreamEvent={})).STREAM_TERMINATED="STREAM_TERMINATED",e.createDataStream=s,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 s;e[(s=t,"Wrapped"+s)]=function(e,t,s){return{invoke:function(r,o){return n(e,{funcNameToWrap:r,callbackNameFunc:function(){return function(e,t){var s=t.moduleName,n=t.funcName,r=0;return function(){for(var t,o,a="";(a=(t={moduleName:s,funcName:n,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 s({callback:e,method:r,module:t,parameters:null!=o?o:{}})}})}}}(e,t,function(s){if(e[t]&&e[t][s.method]instanceof Function)e[t][s.method](JSON.stringify(s));else{if(!(e.webkit&&e.webkit.messageHandlers&&e.webkit.messageHandlers[t]))throw new Error("Unexpected method '"+s.method+"' for module '"+t+"'");e.webkit.messageHandlers[t].postMessage(s)}})},Object.defineProperty(e,"__esModule",{value:!0})}(t.exports)),t.exports);function n(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 o(e,t,s,n,o){const a=o&&"input"in o?o.input:s.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:n.lang,abortEarly:n.abortEarly,abortPipeEarly:n.abortPipeEarly},d="schema"===e.kind,l=o?.message??e.message??(e.reference,void u.lang)??(d?void u.lang:null)??n.message??void u.lang;void 0!==l&&(u.message="function"==typeof l?l(u):l),d&&(s.typed=!1),s.issues?s.issues.push(u):s.issues=[u]}function a(e){return{version:1,vendor:"valibot",validate:t=>e["~run"]({value:t},n())}}function i(e,t){return Object.hasOwn(e,t)&&"__proto__"!==t&&"prototype"!==t&&"constructor"!==t}function c(e,t){const s=[...new Set(e)];return s.length>1?`(${s.join(` ${t} `)})`:s[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,s){return"function"==typeof e.fallback?e.fallback(t,s):e.fallback}function h(e,t,s){return"function"==typeof e.default?e.default(t,s):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 g(e,t){return{kind:"schema",type:"literal",reference:g,expects:r(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 m(e,t){return{kind:"schema",type:"nullish",reference:m,expects:`(${e.expects} | null | undefined)`,async:!1,wrapped:e,default:t,get"~standard"(){return a(this)},"~run"(e,t){return null!==e.value&&void 0!==e.value||(void 0!==this.default&&(e.value=h(this,e,t)),null!==e.value&&void 0!==e.value)?this.wrapped["~run"](e,t):(e.typed=!0,e)}}}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 s=e.value;if(s&&"object"==typeof s){e.typed=!0,e.value={};for(const n in this.entries){const r=this.entries[n];if(n in s||("exact_optional"===r.type||"optional"===r.type||"nullish"===r.type)&&void 0!==r.default){const o=n in s?s[n]:h(r),a=r["~run"]({value:o},t);if(a.issues){const r={type:"object",origin:"value",input:s,key:n,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[n]=a.value}else if(void 0!==r.fallback)e.value[n]=l(r);else if("exact_optional"!==r.type&&"optional"!==r.type&&"nullish"!==r.type&&(o(this,"key",e,t,{input:void 0,expected:`"${n}"`,path:[{type:"object",origin:"key",input:s,key:n,value:s[n]}]}),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(r),"|"),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,s){return{kind:"schema",type:"record",reference:k,expects:"Object",async:!1,key:e,value:t,message:s,get"~standard"(){return a(this)},"~run"(e,t){const s=e.value;if(s&&"object"==typeof s){e.typed=!0,e.value={};for(const n in s)if(i(s,n)){const r=s[n],o=this.key["~run"]({value:n},t);if(o.issues){const a={type:"object",origin:"key",input:s,key:n,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:s,key:n,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 o(this,"type",e,t);return e}}}function _(e){return{kind:"schema",type:"string",reference:_,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 b(e){let t;if(e)for(const s of e)t?t.push(...s.issues):t=s.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 s,n,r;for(const o of this.options){const a=o["~run"]({value:e.value},t);if(a.typed){if(!a.issues){s=a;break}n?n.push(a):n=[a]}else r?r.push(a):r=[a]}if(s)return s;if(n){if(1===n.length)return n[0];o(this,"type",e,t,{issues:b(n)}),e.typed=!0}else{if(1===r?.length)return r[0];o(this,"type",e,t,{issues:b(r)})}return e}}}function U(){return{kind:"schema",type:"unknown",reference:U,expects:"unknown",async:!1,get"~standard"(){return a(this)},"~run":e=>(e.typed=!0,e)}}function $(...e){return{...e[0],pipe:e,get"~standard"(){return a(this)},"~run"(t,s){for(const n of e)if("metadata"!==n.kind){if(t.issues&&("schema"===n.kind||"transformation"===n.kind)){t.typed=!1;break}t.issues&&(s.abortEarly||s.abortPipeEarly)||(t=n["~run"](t,s))}return t}}}function S(e){return"object"==typeof e&&null!==e&&"message"in e&&"string"==typeof e.message}class E{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 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 A{get wrappedModule(){return window[`Wrapped${this.name}`]}constructor(e){if(this.name=e,this.logger=new E(e),!this.wrappedModule)try{s.wrapModule(window,this.name)}catch(e){throw new Error(`Failed to initialize ${this.name}${S(e)?`: ${e.message}`:""}`,{cause:e})}}validate(e,t){const s=function(e,t){const s=e["~run"]({value:t},n(void 0));return{typed:s.typed,success:!s.issues,output:s.value,issues:s.issues}}(e,t);return s.success?null:s.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:s}=e;try{return C()?await this.wrappedModule.invoke(t,s):{status_code:501,error:"Not implemented: This method requires the Grab app environment"}}catch(e){return{status_code:500,error:`Failed to invoke method: ${S(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:s}=e;try{return C()?this.wrappedModule.invoke(t,s):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: ${S(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 N(e){return 302===e.status_code}function O(e){return 302===e.status_code}function P(e){return 400===e.status_code||401===e.status_code||403===e.status_code||404===e.status_code||424===e.status_code||426===e.status_code}function R(e){return 500===e.status_code||501===e.status_code}function B(e){return 400===e.status_code||401===e.status_code||403===e.status_code||404===e.status_code||424===e.status_code||426===e.status_code||500===e.status_code||501===e.status_code}function L(e){return"result"in e&&null!==e.result&&void 0!==e.result}const j=e=>v({status_code:g(e),error:_()}),D=e=>v({status_code:g(200),result:e}),z=v({status_code:g(204)}),K=v({status_code:g(302)}),G=v({title:y(_())}),W=x([D(v({qrCode:_()})),z,j(400),j(403),j(500),j(501)]);class F extends A{constructor(){super("CameraModule")}async scanQRCode(e={}){const t=this.validate(G,e);if(t)return{status_code:400,error:t};const s=await this.invoke({method:"scanQRCode",params:e}),n=this.validate(W,s);return n&&this.logger.warn("scanQRCode",`Unexpected response shape: ${n}`),s}}const V=k(_(),U()),q=x([D(function e(t,s,n){return{kind:"schema",type:"variant",reference:e,expects:"Object",async:!1,key:t,options:s,message:n,get"~standard"(){return a(this)},"~run"(e,t){const s=e.value;if(s&&"object"==typeof s){let n,r=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 n=c.entries[t];if(t in s?n["~run"]({typed:!1,value:s[t]},{abortEarly:!0}).issues:"exact_optional"!==n.type&&"optional"!==n.type&&"nullish"!==n.type){e=!1,a!==t&&(r<u||r===u&&t in s&&!(a in s))&&(r=u,a=t,i=[]),a===t&&i.push(c.entries[t].expects);break}u++}if(e){const e=c["~run"]({value:s},t);(!n||!n.typed&&e.typed)&&(n=e)}}if(n&&!n.issues)break}};if(u(this,new Set([this.key])),n)return n;o(this,"type",e,t,{input:s[a],expected:c(i,"|"),path:[{type:"object",origin:"value",input:s,key:a,value:s[a]}]})}else o(this,"type",e,t);return e}}}("status",[v({status:g("success"),transactionID:_()}),v({status:g("failure"),transactionID:_(),errorMessage:_(),errorCode:_()}),v({status:g("pending"),transactionID:_()}),v({status:g("userInitiatedCancel")})])),j(400),j(500),j(501)]);class H extends A{constructor(){super("CheckoutModule")}async triggerCheckout(e){const t=this.validate(V,e);if(t)return{status_code:400,error:t};const s=await this.invoke({method:"triggerCheckout",params:e}),n=this.validate(q,s);return n&&this.logger.warn("triggerCheckout",`Unexpected response shape: ${n}`),s}}const Y={HOMEPAGE:"HOMEPAGE",CHECKOUT_PAGE:"CHECKOUT_PAGE",BOOKING_COMPLETION:"BOOKING_COMPLETION",CUSTOM:"CUSTOM"},J={DEFAULT:"DEFAULT"},Q={TRANSACTION_AMOUNT:"transaction_amount",TRANSACTION_CURRENCY:"transaction_currency",PAGE:"page"},X=x([D(p()),z,j(400),j(500),j(501)]),Z=x([z,j(400),j(500),j(501)]),ee=x([D(p()),z,j(400),j(500),j(501)]),te=x([z,j(400),j(500),j(501)]),se=x([D(p()),z,j(500),j(501)]),ne=x([z,j(500),j(501)]),re=x([D(p()),z,j(500),j(501)]),oe=x([z,j(500),j(501)]),ae=x([D(p()),z,j(500),j(501)]),ie=x([z,j(500),j(501)]),ce=x([D(p()),z,j(500),j(501)]),ue=x([z,j(500),j(501)]),de=x([D(p()),z,j(500),j(501)]),le=x([z,j(500),j(501)]),he=x([D(p()),z,j(500),j(501)]),pe=x([D(p()),z,j(500),j(501)]),ge=x([z,j(500),j(501)]),me=x([D(p()),z,j(500),j(501)]),fe=x([z,j(500),j(501)]),ve=x([D(p()),z,j(400),j(500),j(501)]),ye=x([z,j(400),j(500),j(501)]),we=x([D(p()),j(500),j(501)]),ke=v({state:$(_(),u(1)),name:$(_(),u(1)),data:y(k(_(),U()))}),_e=x([D(p()),z,j(400),j(500),j(501)]),be=x([z,j(400),j(500),j(501)]),xe=x([D(_()),z,j(500),j(501)]);class Ue extends A{constructor(){super("ContainerModule")}async setBackgroundColor(e){const t=await this.invoke({method:"setBackgroundColor",params:{backgroundColor:e}}),s=this.validate(X,t);let n;s&&this.logger.warn("setBackgroundColor",`Unexpected raw response shape: ${s}`),n=M(t)?{status_code:204}:t;const r=this.validate(Z,n);return r&&this.logger.warn("setBackgroundColor",`Unexpected response shape: ${r}`),n}async setTitle(e){const t=await this.invoke({method:"setTitle",params:{title:e}}),s=this.validate(ee,t);let n;s&&this.logger.warn("setTitle",`Unexpected raw response shape: ${s}`),n=M(t)?{status_code:204}:t;const r=this.validate(te,n);return r&&this.logger.warn("setTitle",`Unexpected response shape: ${r}`),n}async hideBackButton(){const e=await this.invoke({method:"hideBackButton"}),t=this.validate(se,e);let s;t&&this.logger.warn("hideBackButton",`Unexpected raw response shape: ${t}`),s=M(e)?{status_code:204}:e;const n=this.validate(ne,s);return n&&this.logger.warn("hideBackButton",`Unexpected response shape: ${n}`),s}async showBackButton(){const e=await this.invoke({method:"showBackButton"}),t=this.validate(re,e);let s;t&&this.logger.warn("showBackButton",`Unexpected raw response shape: ${t}`),s=M(e)?{status_code:204}:e;const n=this.validate(oe,s);return n&&this.logger.warn("showBackButton",`Unexpected response shape: ${n}`),s}async hideRefreshButton(){const e=await this.invoke({method:"hideRefreshButton"}),t=this.validate(ae,e);let s;t&&this.logger.warn("hideRefreshButton",`Unexpected raw response shape: ${t}`),s=M(e)?{status_code:204}:e;const n=this.validate(ie,s);return n&&this.logger.warn("hideRefreshButton",`Unexpected response shape: ${n}`),s}async showRefreshButton(){const e=await this.invoke({method:"showRefreshButton"}),t=this.validate(ce,e);let s;t&&this.logger.warn("showRefreshButton",`Unexpected raw response shape: ${t}`),s=M(e)?{status_code:204}:e;const n=this.validate(ue,s);return n&&this.logger.warn("showRefreshButton",`Unexpected response shape: ${n}`),s}async close(){const e=await this.invoke({method:"close"}),t=this.validate(de,e);let s;t&&this.logger.warn("close",`Unexpected raw response shape: ${t}`),s=M(e)?{status_code:204}:e;const n=this.validate(le,s);return n&&this.logger.warn("close",`Unexpected response shape: ${n}`),s}async onContentLoaded(){const e=await this.invoke({method:"onContentLoaded"}),t=this.validate(he,e);return t&&this.logger.warn("onContentLoaded",`Unexpected response shape: ${t}`),e}async showLoader(){const e=await this.invoke({method:"showLoader"}),t=this.validate(pe,e);let s;t&&this.logger.warn("showLoader",`Unexpected raw response shape: ${t}`),s=M(e)?{status_code:204}:e;const n=this.validate(ge,s);return n&&this.logger.warn("showLoader",`Unexpected response shape: ${n}`),s}async hideLoader(){const e=await this.invoke({method:"hideLoader"}),t=this.validate(me,e);let s;t&&this.logger.warn("hideLoader",`Unexpected raw response shape: ${t}`),s=M(e)?{status_code:204}:e;const n=this.validate(fe,s);return n&&this.logger.warn("hideLoader",`Unexpected response shape: ${n}`),s}async openExternalLink(e){const t=await this.invoke({method:"openExternalLink",params:{url:e}}),s=this.validate(ve,t);let n;s&&this.logger.warn("openExternalLink",`Unexpected raw response shape: ${s}`),n=M(t)?{status_code:204}:t;const r=this.validate(ye,n);return r&&this.logger.warn("openExternalLink",`Unexpected response shape: ${r}`),n}async onCtaTap(e){const t=await this.invoke({method:"onCtaTap",params:{action:e}}),s=this.validate(we,t);return s&&this.logger.warn("onCtaTap",`Unexpected response shape: ${s}`),t}async sendAnalyticsEvent(e){const t=this.validate(ke,e);if(t)return{status_code:400,error:t};const s=await this.invoke({method:"sendAnalyticsEvent",params:{state:e.state,name:e.name,data:e.data?JSON.stringify(e.data):null}}),n=this.validate(_e,s);let r;n&&this.logger.warn("sendAnalyticsEvent",`Unexpected raw response shape: ${n}`),r=M(s)?{status_code:204}:s;const o=this.validate(be,r);return o&&this.logger.warn("sendAnalyticsEvent",`Unexpected response shape: ${o}`),r}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(xe,e);return t&&this.logger.warn("getSessionParams",`Unexpected response shape: ${t}`),e}}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 Se=x([D(p()),j(403),j(424),j(426),j(500),j(501)]);class Ee extends A{constructor(){super("DeviceModule")}async isEsimSupported(){const e=this.checkSupport(e=>$e(e.version,Ee.MINIMUM_VERSION));if(e)return e;const t=await this.invoke({method:"isEsimSupported"}),s=this.validate(Se,t);return s&&this.logger.warn("isEsimSupported",`Unexpected response shape: ${s}`),t}}Ee.MINIMUM_VERSION={major:5,minor:409,patch:0};const Ce=v({fileUrl:$(_(),d()),fileName:$(_(),u(1))}),Ae=x([z,j(400),j(500),j(501)]);class Ie extends A{constructor(){super("FileModule")}async downloadFile(e){const t=this.validate(Ce,e);if(t)return{status_code:400,error:t};const s=await this.invoke({method:"downloadFile",params:e}),n=this.validate(Ae,s);return n&&this.logger.warn("downloadFile",`Unexpected response shape: ${n}`),s}}function Me(e){const t=new Uint32Array(e);crypto.getRandomValues(t);let s="";for(let n=0;n<e;n+=1)s+="ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789".charAt(t[n]%62);return s}async function Te(e){const t=(new TextEncoder).encode(e);return function(e){const t=new Uint8Array(e);let s="";for(let e=0;e<t.byteLength;e+=1)s+=String.fromCharCode(t[e]);return btoa(s).replace(/=/g,"").replace(/\+/g,"-").replace(/\//g,"_")}(await crypto.subtle.digest("SHA-256",t))}const Ne="grabid",Oe={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 Pe extends Error{constructor(e,t){super(e),this.cause=t,this.name="AuthorizationConfigurationError"}}const Re=v({clientId:$(_(),u(1)),redirectUri:$(_(),d()),scope:$(_(),u(1)),environment:w(["staging","production"]),responseMode:y(w(["redirect","in_place"]))}),Be=x([D(v({code:_(),state:_()})),z,K,j(400),j(403),j(500),j(501)]);class Le extends A{constructor(){super("IdentityModule")}async fetchAuthorizationEndpoint(e){const t=Oe[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 Pe("Failed to fetch authorization configuration");const s=await e.json();if(!s.authorization_endpoint)throw console.error("authorization_endpoint not found in OpenID configuration response"),new Pe("Invalid authorization configuration");return s.authorization_endpoint}catch(e){if(console.error("Error fetching authorization endpoint:",e),e instanceof Pe)throw e;throw new Error("Something wrong happened when fetching authorization configuration",{cause:e})}}async generatePKCEArtifacts(){const e=Me(16),t=Me(32),s=(n=Me(64),btoa(n).replace(/=/g,"").replace(/\+/g,"-").replace(/\//g,"_"));var n;return{nonce:e,state:t,codeVerifier:s,codeChallenge:await Te(s),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"),s=this.getStorageItem("nonce"),n=this.getStorageItem("redirect_uri");return null===e&&null===t&&null===s&&null===n?{status_code:204}:null!==e&&null!==t&&null!==s&&null!==n?{status_code:200,result:{state:e,codeVerifier:t,nonce:s,redirectUri:n}}:{status_code:400,error:"Inconsistent authorization artifacts in storage"}}async clearAuthorizationArtifacts(){return window.localStorage.removeItem(`${Ne}:nonce`),window.localStorage.removeItem(`${Ne}:state`),window.localStorage.removeItem(`${Ne}:code_verifier`),window.localStorage.removeItem(`${Ne}:redirect_uri`),window.localStorage.removeItem(`${Ne}:login_return_uri`),{status_code:204}}setStorageItem(e,t){window.localStorage.setItem(`${Ne}:${e}`,t)}getStorageItem(e){return window.localStorage.getItem(`${Ne}:${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:S(e)?e.message:"Could not fetch authorization endpoint"}}const s={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},n=Le.buildAuthorizeUrl(t,s);return window.location.assign(n),{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}}),s=this.validate(Be,t);return s&&this.logger.warn("authorize",`Unexpected response shape: ${s}`),t}async authorize(e){const t=this.validate(Re,e);if(t)return{status_code:400,error:t};const s=await this.generatePKCEArtifacts(),n=e.responseMode||"redirect",r="in_place"===n?Le.normalizeUrl(window.location.href):e.redirectUri;this.storePKCEArtifacts({...s,redirectUri:r});const o={clientId:e.clientId,redirectUri:e.redirectUri,scope:e.scope,nonce:s.nonce,state:s.state,codeChallenge:s.codeChallenge,codeChallengeMethod:s.codeChallengeMethod};if(Le.shouldUseWebConsent(e))return this.performWebAuthorization({...o,environment:e.environment});try{const t=await this.performNativeAuthorization({...o,actualRedirectUri:r,responseMode:n});return 200===t.status_code?{status_code:200,result:{code:t.result.code,state:t.result.state,codeVerifier:s.codeVerifier,nonce:s.nonce,redirectUri:r}}: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 je=x([D(_()),z,j(400),j(500),j(501)]);class De extends A{constructor(){super("LocaleModule")}async getLanguageLocaleIdentifier(){const e=await this.invoke({method:"getLanguageLocaleIdentifier"}),t=this.validate(je,e);return t&&this.logger.warn("getLanguageLocaleIdentifier",`Unexpected response shape: ${t}`),e}}const ze=x([D(v({latitude:f(),longitude:f()})),j(403),j(424),j(500),j(501)]),Ke=x([D(_()),z,j(403),j(424),j(500),j(501)]);class Ge 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(Ke,e);return t&&this.logger.warn("getCountryCode",`Unexpected response shape: ${t}`),e}}const We=x([D(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:_(),position:f(),length:f()})),z,j(400),j(424),j(500),j(501)]);class Fe extends A{constructor(){super("MediaModule")}async playDRMContent(e){const t=await this.invoke({method:"playDRMContent",params:{data:e}}),s=this.validate(We,t);return s&&this.logger.warn("playDRMContent",`Unexpected response shape: ${s}`),t}observePlayDRMContent(e){return this.invokeStream({method:"observePlayDRMContent",params:{data:e}})}}const Ve=v({endpoint:_(),method:w(["GET","POST","PUT","DELETE","PATCH","HEAD","OPTIONS"]),headers:y(k(_(),_())),query:y(k(_(),_())),body:y(U()),timeout:y(f())}),qe=k(_(),U()),He=x([D(qe),z,j(400),j(401),j(403),j(404),j(424),j(426),j(500),j(501)]),Ye=x([_(),qe]),Je=x([D(Ye),z,j(400),j(401),j(403),j(404),j(424),j(426),j(500),j(501)]);class Qe extends A{constructor(){super("NetworkModule")}async send(e){const t=this.validate(Ve,e);if(t)return{status_code:400,error:t};const s=await this.invoke({method:"send",params:e}),n=this.validate(Je,s);if(n&&this.logger.warn("send",`Unexpected raw response shape: ${n}`),I(s)&&L(s)&&"string"==typeof s.result)try{const e=JSON.parse(s.result),t={...s,result:e},n=this.validate(He,t);return n&&this.logger.warn("send",`Unexpected response shape after parsing: ${n}`),t}catch{return{status_code:500,error:"Failed to parse response result as JSON"}}const r=s,o=this.validate(He,r);return o&&this.logger.warn("send",`Unexpected response shape: ${o}`),r}}const Xe=x([z,j(500),j(501)]);class Ze extends A{constructor(){super("PlatformModule")}async back(){const e=await this.invoke({method:"back"}),t=this.validate(Xe,e);return t&&this.logger.warn("back",`Unexpected response shape: ${t}`),e}}const et=x([D(v({email:_()})),z,j(400),j(403),j(426),j(500),j(501)]),tt=v({email:y($(_(),u(1))),skipUserInput:y(p())}),st=x([D(v({email:_()})),z,j(400),j(403),j(426),j(500),j(501)]);class nt extends A{constructor(){super("ProfileModule")}async fetchEmail(){const e=this.checkSupport(e=>$e(e.version,nt.MINIMUM_VERSION));if(e)return e;const t=await this.invoke({method:"fetchEmail"}),s=this.validate(et,t);return s&&this.logger.warn("fetchEmail",`Unexpected response shape: ${s}`),t}async verifyEmail(e){const t=this.checkSupport(e=>$e(e.version,nt.MINIMUM_VERSION));if(t)return t;const s=this.validate(tt,e??{});if(s)return{status_code:400,error:s};const n=await this.invoke({method:"verifyEmail",params:e}),r=this.validate(st,n);return r&&this.logger.warn("verifyEmail",`Unexpected response shape: ${r}`),n}}nt.MINIMUM_VERSION={major:5,minor:399,patch:0};const rt=v({module:$(_(),u(1)),method:$(_(),u(1))}),ot=x([D(p()),j(400),j(424),j(500),j(501)]),at=x([z,j(424),j(500),j(501)]);class it extends A{constructor(){super("ScopeModule")}async hasAccessTo(e,t){const s={module:e,method:t},n=this.validate(rt,s);if(n)return{status_code:400,error:n};const r=await this.invoke({method:"hasAccessTo",params:s}),o=this.validate(ot,r);return o&&this.logger.warn("hasAccessTo",`Unexpected response shape: ${o}`),r}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([z,j(400),j(403),j(500),j(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=$(_(),u(1)),lt=v({key:dt}),ht=v({key:dt,value:p()}),pt=x([z,j(400),j(424),j(500),j(501)]),gt=lt,mt=p(),ft=x([v({status_code:g(200),result:m(p())}),z,j(400),j(424)]),vt=x([D(mt),z,j(400),j(424),j(500),j(501)]),yt=v({key:dt,value:f()}),wt=x([z,j(400),j(424),j(500),j(501)]),kt=lt,_t=f(),bt=x([v({status_code:g(200),result:m(f())}),z,j(400),j(424)]),xt=x([D(_t),z,j(400),j(424),j(500),j(501)]),Ut=v({key:dt,value:_()}),$t=x([z,j(400),j(424),j(500),j(501)]),St=lt,Et=_(),Ct=x([v({status_code:g(200),result:m(_())}),z,j(400),j(424)]),At=x([D(Et),z,j(400),j(424),j(500),j(501)]),It=v({key:dt,value:f()}),Mt=x([z,j(400),j(424),j(500),j(501)]),Tt=lt,Nt=f(),Ot=x([v({status_code:g(200),result:m(f())}),z,j(400),j(424)]),Pt=x([D(Nt),z,j(400),j(424),j(500),j(501)]),Rt=lt,Bt=x([z,j(400),j(424),j(500),j(501)]),Lt=x([z,j(424),j(500),j(501)]);class jt extends A{constructor(){super("StorageModule")}async setBoolean(e,t){const s={key:e,value:t},n=this.validate(ht,s);if(n)return{status_code:400,error:n};const r=await this.invoke({method:"setBoolean",params:s}),o=this.validate(pt,r);return o&&this.logger.warn("setBoolean",`Unexpected response shape: ${o}`),r}async getBoolean(e){const t={key:e},s=this.validate(gt,t);if(s)return{status_code:400,error:s};const n=await this.invoke({method:"getBoolean",params:t}),r=this.validate(ft,n);let o;if(r&&this.logger.warn("getBoolean",`Unexpected raw response shape: ${r}`),200===n.status_code){const e=n.result;o=null==e?{status_code:204}:{status_code:200,result:e}}else o=n;const a=this.validate(vt,o);return a&&this.logger.warn("getBoolean",`Unexpected response shape: ${a}`),o}async setInt(e,t){const s={key:e,value:t},n=this.validate(yt,s);if(n)return{status_code:400,error:n};const r=await this.invoke({method:"setInt",params:s}),o=this.validate(wt,r);return o&&this.logger.warn("setInt",`Unexpected response shape: ${o}`),r}async getInt(e){const t={key:e},s=this.validate(kt,t);if(s)return{status_code:400,error:s};const n=await this.invoke({method:"getInt",params:t}),r=this.validate(bt,n);let o;if(r&&this.logger.warn("getInt",`Unexpected raw response shape: ${r}`),200===n.status_code){const e=n.result;o=null==e?{status_code:204}:{status_code:200,result:e}}else o=n;const a=this.validate(xt,o);return a&&this.logger.warn("getInt",`Unexpected response shape: ${a}`),o}async setString(e,t){const s={key:e,value:t},n=this.validate(Ut,s);if(n)return{status_code:400,error:n};const r=await this.invoke({method:"setString",params:s}),o=this.validate($t,r);return o&&this.logger.warn("setString",`Unexpected response shape: ${o}`),r}async getString(e){const t={key:e},s=this.validate(St,t);if(s)return{status_code:400,error:s};const n=await this.invoke({method:"getString",params:t}),r=this.validate(Ct,n);let o;if(r&&this.logger.warn("getString",`Unexpected raw response shape: ${r}`),200===n.status_code){const e=n.result;o=null==e?{status_code:204}:{status_code:200,result:e}}else o=n;const a=this.validate(At,o);return a&&this.logger.warn("getString",`Unexpected response shape: ${a}`),o}async setDouble(e,t){const s={key:e,value:t},n=this.validate(It,s);if(n)return{status_code:400,error:n};const r=await this.invoke({method:"setDouble",params:s}),o=this.validate(Mt,r);return o&&this.logger.warn("setDouble",`Unexpected response shape: ${o}`),r}async getDouble(e){const t={key:e},s=this.validate(Tt,t);if(s)return{status_code:400,error:s};const n=await this.invoke({method:"getDouble",params:t}),r=this.validate(Ot,n);let o;if(r&&this.logger.warn("getDouble",`Unexpected raw response shape: ${r}`),200===n.status_code){const e=n.result;o=null==e?{status_code:204}:{status_code:200,result:e}}else o=n;const a=this.validate(Pt,o);return a&&this.logger.warn("getDouble",`Unexpected response shape: ${a}`),o}async remove(e){const t={key:e},s=this.validate(Rt,t);if(s)return{status_code:400,error:s};const n=await this.invoke({method:"remove",params:t}),r=this.validate(Bt,n);return r&&this.logger.warn("remove",`Unexpected response shape: ${r}`),n}async removeAll(){const e=await this.invoke({method:"removeAll"}),t=this.validate(Lt,e);return t&&this.logger.warn("removeAll",`Unexpected response shape: ${t}`),e}}const Dt=v({url:$(_(),d())}),zt=x([D(_()),j(400),j(424),j(500),j(501)]);class Kt extends A{constructor(){super("SystemWebViewKitModule")}async redirectToSystemWebView(e){const t=this.validate(Dt,e);if(t)return{status_code:400,error:t};const s=await this.invoke({method:"redirectToSystemWebView",params:e}),n=this.validate(zt,s);return n&&this.logger.warn("redirectToSystemWebView",`Unexpected response shape: ${n}`),s}}const Gt=x([D(_()),z,j(500),j(501)]);class Wt extends A{constructor(){super("UserAttributesModule")}async getSelectedTravelDestination(){const e=await this.invoke({method:"getSelectedTravelDestination"}),t=this.validate(Gt,e);return t&&this.logger.warn("getSelectedTravelDestination",`Unexpected response shape: ${t}`),e}}export{A as BaseModule,F as CameraModule,H as CheckoutModule,Q as ContainerAnalyticsEventData,J as ContainerAnalyticsEventName,Y as ContainerAnalyticsEventState,Ue as ContainerModule,Ee as DeviceModule,Ie as FileModule,Le as IdentityModule,De as LocaleModule,Ge as LocationModule,E as Logger,Fe as MediaModule,Qe as NetworkModule,Ze as PlatformModule,nt as ProfileModule,it as ScopeModule,ut as SplashScreenModule,jt as StorageModule,Kt as SystemWebViewKitModule,Wt as UserAttributesModule,L as hasResult,P as isClientError,B as isError,O as isFound,T as isNoContent,M as isOk,N 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,s={exports:{}},n=(t||(t=1,function(e){function t(e){var t=!1;return{isUnsubscribed:function(){return t},unsubscribe:function(){t||(e(),t=!0)}}}function s(e){return{subscribe:e,then:function(t,s){return new Promise(function(n,r){try{var o=null,a=!1;o=e({next:function(e){n(null==t?void 0:t(e)),o&&o.unsubscribe(),a=!0}}),a&&o&&o.unsubscribe()}catch(e){null==s?r(e):n(s(e))}})}}}function n(n,r){return r.funcNameToWrap,function(n,r){var o=r.callbackNameFunc,a=r.funcToWrap;return s(function(s){var r,i=o();return n[i]=function(t){if(function(e){for(var t=[],s=1;s<arguments.length;s++)t[s-1]=arguments[s];if(!e)return!1;var n=function(e){return Object.keys(e).concat(Object.getOwnPropertyNames(Object.getPrototypeOf(e)))}(e);return t.every(function(e){return 0<=n.indexOf(e)})}(t.result,"event"))t.result.event===e.StreamEvent.STREAM_TERMINATED&&r.unsubscribe();else{var n=t.result,o=t.error,a=t.status_code;s&&s.next&&s.next({result:null===n?void 0:n,error:null===o?void 0:o,status_code:null===a?void 0:a})}},a(i),r=t(function(){n[i]=void 0,s&&s.complete&&s.complete()})})}(n,function(e,t){var s={};for(var n in e)Object.prototype.hasOwnProperty.call(e,n)&&t.indexOf(n)<0&&(s[n]=e[n]);if(null!=e&&"function"==typeof Object.getOwnPropertySymbols){var r=0;for(n=Object.getOwnPropertySymbols(e);r<n.length;r++)t.indexOf(n[r])<0&&(s[n[r]]=e[n[r]])}return s}(r,["funcNameToWrap"]))}(e.StreamEvent||(e.StreamEvent={})).STREAM_TERMINATED="STREAM_TERMINATED",e.createDataStream=s,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 s;e[(s=t,"Wrapped"+s)]=function(e,t,s){return{invoke:function(r,o){return n(e,{funcNameToWrap:r,callbackNameFunc:function(){return function(e,t){var s=t.moduleName,n=t.funcName,r=0;return function(){for(var t,o,a="";(a=(t={moduleName:s,funcName:n,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 s({callback:e,method:r,module:t,parameters:null!=o?o:{}})}})}}}(e,t,function(s){if(e[t]&&e[t][s.method]instanceof Function)e[t][s.method](JSON.stringify(s));else{if(!(e.webkit&&e.webkit.messageHandlers&&e.webkit.messageHandlers[t]))throw new Error("Unexpected method '"+s.method+"' for module '"+t+"'");e.webkit.messageHandlers[t].postMessage(s)}})},Object.defineProperty(e,"__esModule",{value:!0})}(s.exports)),s.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,s,n,r){const a=r&&"input"in r?r.input:s.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:n.lang,abortEarly:n.abortEarly,abortPipeEarly:n.abortPipeEarly},d="schema"===e.kind,l=r?.message??e.message??(e.reference,void u.lang)??(d?void u.lang:null)??n.message??void u.lang;void 0!==l&&(u.message="function"==typeof l?l(u):l),d&&(s.typed=!1),s.issues?s.issues.push(u):s.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 s=[...new Set(e)];return s.length>1?`(${s.join(` ${t} `)})`:s[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,s){return"function"==typeof e.fallback?e.fallback(t,s):e.fallback}function p(e,t,s){return"function"==typeof e.default?e.default(t,s):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:"nullish",reference:f,expects:`(${e.expects} | null | undefined)`,async:!1,wrapped:e,default:t,get"~standard"(){return i(this)},"~run"(e,t){return null!==e.value&&void 0!==e.value||(void 0!==this.default&&(e.value=p(this,e,t)),null!==e.value&&void 0!==e.value)?this.wrapped["~run"](e,t):(e.typed=!0,e)}}}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 s=e.value;if(s&&"object"==typeof s){e.typed=!0,e.value={};for(const n in this.entries){const r=this.entries[n];if(n in s||("exact_optional"===r.type||"optional"===r.type||"nullish"===r.type)&&void 0!==r.default){const o=n in s?s[n]:p(r),a=r["~run"]({value:o},t);if(a.issues){const r={type:"object",origin:"value",input:s,key:n,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[n]=a.value}else if(void 0!==r.fallback)e.value[n]=h(r);else if("exact_optional"!==r.type&&"optional"!==r.type&&"nullish"!==r.type&&(a(this,"key",e,t,{input:void 0,expected:`"${n}"`,path:[{type:"object",origin:"key",input:s,key:n,value:s[n]}]}),t.abortEarly))break}}else a(this,"type",e,t);return e}}}function w(e,t){return{kind:"schema",type:"optional",reference:w,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 S(e,t){return{kind:"schema",type:"picklist",reference:S,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,s){return{kind:"schema",type:"record",reference:k,expects:"Object",async:!1,key:e,value:t,message:s,get"~standard"(){return i(this)},"~run"(e,t){const s=e.value;if(s&&"object"==typeof s){e.typed=!0,e.value={};for(const n in s)if(c(s,n)){const r=s[n],o=this.key["~run"]({value:n},t);if(o.issues){const a={type:"object",origin:"key",input:s,key:n,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:s,key:n,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 _(e){let t;if(e)for(const s of e)t?t.push(...s.issues):t=s.issues;return t}function R(e,t){return{kind:"schema",type:"union",reference:R,expects:u(e.map(e=>e.expects),"|"),async:!1,options:e,message:t,get"~standard"(){return i(this)},"~run"(e,t){let s,n,r;for(const o of this.options){const a=o["~run"]({value:e.value},t);if(a.typed){if(!a.issues){s=a;break}n?n.push(a):n=[a]}else r?r.push(a):r=[a]}if(s)return s;if(n){if(1===n.length)return n[0];a(this,"type",e,t,{issues:_(n)}),e.typed=!0}else{if(1===r?.length)return r[0];a(this,"type",e,t,{issues:_(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,s){for(const n of e)if("metadata"!==n.kind){if(t.issues&&("schema"===n.kind||"transformation"===n.kind)){t.typed=!1;break}t.issues&&(s.abortEarly||s.abortPipeEarly)||(t=n["~run"](t,s))}return t}}}function C(e){return"object"==typeof e&&null!==e&&"message"in e&&"string"==typeof e.message}class U{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 U(e),!this.wrappedModule)try{n.wrapModule(window,this.name)}catch(e){throw new Error(`Failed to initialize ${this.name}${C(e)?`: ${e.message}`:""}`,{cause:e})}}validate(e,t){const s=function(e,t){const s=e["~run"]({value:t},r(void 0));return{typed:s.typed,success:!s.issues,output:s.value,issues:s.issues}}(e,t);return s.success?null:s.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:s}=e;try{return $()?await this.wrappedModule.invoke(t,s):{status_code:501,error:"Not implemented: This method requires the Grab app environment"}}catch(e){return{status_code:500,error:`Failed to invoke method: ${C(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:s}=e;try{return $()?this.wrappedModule.invoke(t,s):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: ${C(e)?e.message:"Unknown error"}`})}}}function M(e){return 200===e.status_code||204===e.status_code}function I(e){return 200===e.status_code}function T(e){return"result"in e&&null!==e.result&&void 0!==e.result}const O=e=>y({status_code:g(e),error:b()}),N=e=>y({status_code:g(200),result:e}),B=y({status_code:g(204)}),P=y({status_code:g(302)}),L=y({title:w(b())}),D=y({qrCode:b()}),G=R([N(D),B,O(400),O(403),O(500),O(501)]),j=k(b(),x()),z=function e(t,s,n){return{kind:"schema",type:"variant",reference:e,expects:"Object",async:!1,key:t,options:s,message:n,get"~standard"(){return i(this)},"~run"(e,t){const s=e.value;if(s&&"object"==typeof s){let n,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 n=u.entries[t];if(t in s?n["~run"]({typed:!1,value:s[t]},{abortEarly:!0}).issues:"exact_optional"!==n.type&&"optional"!==n.type&&"nullish"!==n.type){e=!1,o!==t&&(r<c||r===c&&t in s&&!(o in s))&&(r=c,o=t,i=[]),o===t&&i.push(u.entries[t].expects);break}c++}if(e){const e=u["~run"]({value:s},t);(!n||!n.typed&&e.typed)&&(n=e)}}if(n&&!n.issues)break}};if(c(this,new Set([this.key])),n)return n;a(this,"type",e,t,{input:s[o],expected:u(i,"|"),path:[{type:"object",origin:"value",input:s,key:o,value:s[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")})]),q=R([N(z),O(400),O(500),O(501)]),V=R([N(m()),B,O(400),O(500),O(501)]),F=R([B,O(400),O(500),O(501)]),K=R([N(m()),B,O(400),O(500),O(501)]),W=R([B,O(400),O(500),O(501)]),H=R([N(m()),B,O(500),O(501)]),Y=R([B,O(500),O(501)]),Q=R([N(m()),B,O(500),O(501)]),J=R([B,O(500),O(501)]),X=R([N(m()),B,O(500),O(501)]),Z=R([B,O(500),O(501)]),ee=R([N(m()),B,O(500),O(501)]),te=R([B,O(500),O(501)]),se=R([N(m()),B,O(500),O(501)]),ne=R([B,O(500),O(501)]),re=R([N(m()),B,O(500),O(501)]),oe=R([N(m()),B,O(500),O(501)]),ae=R([B,O(500),O(501)]),ie=R([N(m()),B,O(500),O(501)]),ce=R([B,O(500),O(501)]),ue=R([N(m()),B,O(400),O(500),O(501)]),de=R([B,O(400),O(500),O(501)]),le=R([N(m()),O(500),O(501)]),he=y({state:E(b(),d(1)),name:E(b(),d(1)),data:w(k(b(),x()))}),pe=R([N(m()),B,O(400),O(500),O(501)]),me=R([B,O(400),O(500),O(501)]),ge=y({connected:m()}),fe=R([N(ge),O(404)]),ve=b(),ye=R([N(ve),B,O(500),O(501)]);function we(e,t){return e.major!==t.major?e.major>t.major:e.minor!==t.minor?e.minor>t.minor:e.patch>=t.patch}const Se=m(),ke=R([N(Se),O(403),O(424),O(426),O(500),O(501)]);class be extends A{constructor(){super("DeviceModule")}async isEsimSupported(){const e=this.checkSupport(e=>we(e.version,be.MINIMUM_VERSION));if(e)return e;const t=await this.invoke({method:"isEsimSupported"}),s=this.validate(ke,t);return s&&this.logger.warn("isEsimSupported",`Unexpected response shape: ${s}`),t}}be.MINIMUM_VERSION={major:5,minor:409,patch:0};const _e=y({fileUrl:E(b(),l()),fileName:E(b(),d(1))}),Re=R([B,O(400),O(500),O(501)]);function xe(e){const t=new Uint32Array(e);crypto.getRandomValues(t);let s="";for(let n=0;n<e;n+=1)s+="ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789".charAt(t[n]%62);return s}async function Ee(e){const t=(new TextEncoder).encode(e);return function(e){const t=new Uint8Array(e);let s="";for(let e=0;e<t.byteLength;e+=1)s+=String.fromCharCode(t[e]);return btoa(s).replace(/=/g,"").replace(/\+/g,"-").replace(/\//g,"_")}(await crypto.subtle.digest("SHA-256",t))}const Ce="grabid",Ue={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 $e extends Error{constructor(e,t){super(e),this.cause=t,this.name="AuthorizationConfigurationError"}}const Ae=y({clientId:E(b(),d(1)),redirectUri:E(b(),l()),scope:E(b(),d(1)),environment:S(["staging","production"]),responseMode:w(S(["redirect","in_place"]))}),Me=R([N(y({code:b(),state:b()})),B,P,O(400),O(403),O(500),O(501)]),Ie=y({code:b(),state:b(),codeVerifier:b(),nonce:b(),redirectUri:b()}),Te=R([N(Ie),B,P,O(400),O(403),O(500),O(501)]),Oe=y({state:b(),codeVerifier:b(),nonce:b(),redirectUri:b()}),Ne=R([N(Oe),B,O(400)]),Be=R([B]);class Pe extends A{constructor(){super("IdentityModule")}async fetchAuthorizationEndpoint(e){const t=Ue[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 $e("Failed to fetch authorization configuration");const s=await e.json();if(!s.authorization_endpoint)throw console.error("authorization_endpoint not found in OpenID configuration response"),new $e("Invalid authorization configuration");return s.authorization_endpoint}catch(e){if(console.error("Error fetching authorization endpoint:",e),e instanceof $e)throw e;throw new Error("Something wrong happened when fetching authorization configuration",{cause:e})}}async generatePKCEArtifacts(){const e=xe(16),t=xe(32),s=(n=xe(64),btoa(n).replace(/=/g,"").replace(/\+/g,"-").replace(/\//g,"_"));var n;return{nonce:e,state:t,codeVerifier:s,codeChallenge:await Ee(s),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"),s=this.getStorageItem("nonce"),n=this.getStorageItem("redirect_uri");return null===e&&null===t&&null===s&&null===n?{status_code:204}:null!==e&&null!==t&&null!==s&&null!==n?{status_code:200,result:{state:e,codeVerifier:t,nonce:s,redirectUri:n}}:{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&&!we(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:C(e)?e.message:"Could not fetch authorization endpoint"}}const s={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},n=Pe.buildAuthorizeUrl(t,s);return window.location.assign(n),{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}}),s=this.validate(Me,t);return s&&this.logger.warn("authorize",`Unexpected response shape: ${s}`),t}async authorize(e){const t=this.validate(Ae,e);if(t)return{status_code:400,error:t};const s=await this.generatePKCEArtifacts(),n=e.responseMode||"redirect",r="in_place"===n?Pe.normalizeUrl(window.location.href):e.redirectUri;this.storePKCEArtifacts({...s,redirectUri:r});const o={clientId:e.clientId,redirectUri:e.redirectUri,scope:e.scope,nonce:s.nonce,state:s.state,codeChallenge:s.codeChallenge,codeChallengeMethod:s.codeChallengeMethod};if(Pe.shouldUseWebConsent(e))return this.performWebAuthorization({...o,environment:e.environment});try{const t=await this.performNativeAuthorization({...o,actualRedirectUri:r,responseMode:n});return 200===t.status_code?{status_code:200,result:{code:t.result.code,state:t.result.state,codeVerifier:s.codeVerifier,nonce:s.nonce,redirectUri:r}}: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(),De=R([N(Le),B,O(400),O(500),O(501)]),Ge=y({latitude:v(),longitude:v()}),je=R([N(Ge),O(403),O(424),O(500),O(501)]),ze=b(),qe=R([N(ze),B,O(403),O(424),O(500),O(501)]),Ve=y({type:S(["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()}),Fe=R([N(Ve),B,O(400),O(424),O(500),O(501)]),Ke=R([N(Ve),O(500),O(501)]),We=y({endpoint:b(),method:S(["GET","POST","PUT","DELETE","PATCH","HEAD","OPTIONS"]),headers:w(k(b(),b())),query:w(k(b(),b())),body:w(x()),timeout:w(v())}),He=k(b(),x()),Ye=R([N(He),B,O(400),O(401),O(403),O(404),O(424),O(426),O(500),O(501)]),Qe=R([b(),He]),Je=R([N(Qe),B,O(400),O(401),O(403),O(404),O(424),O(426),O(500),O(501)]),Xe=R([B,O(500),O(501)]),Ze=y({email:b()}),et=R([N(Ze),B,O(400),O(403),O(426),O(500),O(501)]),tt=y({email:w(E(b(),d(1))),skipUserInput:w(m())}),st=y({email:b()}),nt=R([N(st),B,O(400),O(403),O(426),O(500),O(501)]);class rt extends A{constructor(){super("ProfileModule")}async fetchEmail(){const e=this.checkSupport(e=>we(e.version,rt.MINIMUM_VERSION));if(e)return e;const t=await this.invoke({method:"fetchEmail"}),s=this.validate(et,t);return s&&this.logger.warn("fetchEmail",`Unexpected response shape: ${s}`),t}async verifyEmail(e){const t=this.checkSupport(e=>we(e.version,rt.MINIMUM_VERSION));if(t)return t;const s=this.validate(tt,e??{});if(s)return{status_code:400,error:s};const n=await this.invoke({method:"verifyEmail",params:e}),r=this.validate(nt,n);return r&&this.logger.warn("verifyEmail",`Unexpected response shape: ${r}`),n}}rt.MINIMUM_VERSION={major:5,minor:399,patch:0};const ot=y({module:E(b(),d(1)),method:E(b(),d(1))}),at=m(),it=R([N(at),O(400),O(424),O(500),O(501)]),ct=R([B,O(424),O(500),O(501)]),ut=R([B,O(400),O(403),O(500),O(501)]),dt=E(b(),d(1)),lt=y({key:dt}),ht=y({key:dt,value:m()}),pt=R([B,O(400),O(424),O(500),O(501)]),mt=lt,gt=m(),ft=R([y({status_code:g(200),result:f(m())}),B,O(400),O(424)]),vt=R([N(gt),B,O(400),O(424),O(500),O(501)]),yt=y({key:dt,value:v()}),wt=R([B,O(400),O(424),O(500),O(501)]),St=lt,kt=v(),bt=R([y({status_code:g(200),result:f(v())}),B,O(400),O(424)]),_t=R([N(kt),B,O(400),O(424),O(500),O(501)]),Rt=y({key:dt,value:b()}),xt=R([B,O(400),O(424),O(500),O(501)]),Et=lt,Ct=b(),Ut=R([y({status_code:g(200),result:f(b())}),B,O(400),O(424)]),$t=R([N(Ct),B,O(400),O(424),O(500),O(501)]),At=y({key:dt,value:v()}),Mt=R([B,O(400),O(424),O(500),O(501)]),It=lt,Tt=v(),Ot=R([y({status_code:g(200),result:f(v())}),B,O(400),O(424)]),Nt=R([N(Tt),B,O(400),O(424),O(500),O(501)]),Bt=lt,Pt=R([B,O(400),O(424),O(500),O(501)]),Lt=R([B,O(424),O(500),O(501)]),Dt=y({url:E(b(),l())}),Gt=R([N(b()),O(400),O(424),O(500),O(501)]),jt=b(),zt=R([N(jt),B,O(500),O(501)]);e.AuthorizeRequestSchema=Ae,e.AuthorizeResponseSchema=Te,e.AuthorizeResultSchema=Ie,e.BackResponseSchema=Xe,e.BaseModule=A,e.CameraModule=class extends A{constructor(){super("CameraModule")}async scanQRCode(e={}){const t=this.validate(L,e);if(t)return{status_code:400,error:t};const s=await this.invoke({method:"scanQRCode",params:e}),n=this.validate(G,s);return n&&this.logger.warn("scanQRCode",`Unexpected response shape: ${n}`),s}},e.CheckoutModule=class extends A{constructor(){super("CheckoutModule")}async triggerCheckout(e){const t=this.validate(j,e);if(t)return{status_code:400,error:t};const s=await this.invoke({method:"triggerCheckout",params:e}),n=this.validate(q,s);return n&&this.logger.warn("triggerCheckout",`Unexpected response shape: ${n}`),s}},e.ClearAuthorizationArtifactsResponseSchema=Be,e.CloseResponseSchema=ne,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 A{constructor(){super("ContainerModule")}async setBackgroundColor(e){const t=await this.invoke({method:"setBackgroundColor",params:{backgroundColor:e}}),s=this.validate(V,t);let n;s&&this.logger.warn("setBackgroundColor",`Unexpected raw response shape: ${s}`),n=I(t)?{status_code:204}:t;const r=this.validate(F,n);return r&&this.logger.warn("setBackgroundColor",`Unexpected response shape: ${r}`),n}async setTitle(e){const t=await this.invoke({method:"setTitle",params:{title:e}}),s=this.validate(K,t);let n;s&&this.logger.warn("setTitle",`Unexpected raw response shape: ${s}`),n=I(t)?{status_code:204}:t;const r=this.validate(W,n);return r&&this.logger.warn("setTitle",`Unexpected response shape: ${r}`),n}async hideBackButton(){const e=await this.invoke({method:"hideBackButton"}),t=this.validate(H,e);let s;t&&this.logger.warn("hideBackButton",`Unexpected raw response shape: ${t}`),s=I(e)?{status_code:204}:e;const n=this.validate(Y,s);return n&&this.logger.warn("hideBackButton",`Unexpected response shape: ${n}`),s}async showBackButton(){const e=await this.invoke({method:"showBackButton"}),t=this.validate(Q,e);let s;t&&this.logger.warn("showBackButton",`Unexpected raw response shape: ${t}`),s=I(e)?{status_code:204}:e;const n=this.validate(J,s);return n&&this.logger.warn("showBackButton",`Unexpected response shape: ${n}`),s}async hideRefreshButton(){const e=await this.invoke({method:"hideRefreshButton"}),t=this.validate(X,e);let s;t&&this.logger.warn("hideRefreshButton",`Unexpected raw response shape: ${t}`),s=I(e)?{status_code:204}:e;const n=this.validate(Z,s);return n&&this.logger.warn("hideRefreshButton",`Unexpected response shape: ${n}`),s}async showRefreshButton(){const e=await this.invoke({method:"showRefreshButton"}),t=this.validate(ee,e);let s;t&&this.logger.warn("showRefreshButton",`Unexpected raw response shape: ${t}`),s=I(e)?{status_code:204}:e;const n=this.validate(te,s);return n&&this.logger.warn("showRefreshButton",`Unexpected response shape: ${n}`),s}async close(){const e=await this.invoke({method:"close"}),t=this.validate(se,e);let s;t&&this.logger.warn("close",`Unexpected raw response shape: ${t}`),s=I(e)?{status_code:204}:e;const n=this.validate(ne,s);return n&&this.logger.warn("close",`Unexpected response shape: ${n}`),s}async onContentLoaded(){const e=await this.invoke({method:"onContentLoaded"}),t=this.validate(re,e);return t&&this.logger.warn("onContentLoaded",`Unexpected response shape: ${t}`),e}async showLoader(){const e=await this.invoke({method:"showLoader"}),t=this.validate(oe,e);let s;t&&this.logger.warn("showLoader",`Unexpected raw response shape: ${t}`),s=I(e)?{status_code:204}:e;const n=this.validate(ae,s);return n&&this.logger.warn("showLoader",`Unexpected response shape: ${n}`),s}async hideLoader(){const e=await this.invoke({method:"hideLoader"}),t=this.validate(ie,e);let s;t&&this.logger.warn("hideLoader",`Unexpected raw response shape: ${t}`),s=I(e)?{status_code:204}:e;const n=this.validate(ce,s);return n&&this.logger.warn("hideLoader",`Unexpected response shape: ${n}`),s}async openExternalLink(e){const t=await this.invoke({method:"openExternalLink",params:{url:e}}),s=this.validate(ue,t);let n;s&&this.logger.warn("openExternalLink",`Unexpected raw response shape: ${s}`),n=I(t)?{status_code:204}:t;const r=this.validate(de,n);return r&&this.logger.warn("openExternalLink",`Unexpected response shape: ${r}`),n}async onCtaTap(e){const t=await this.invoke({method:"onCtaTap",params:{action:e}}),s=this.validate(le,t);return s&&this.logger.warn("onCtaTap",`Unexpected response shape: ${s}`),t}async sendAnalyticsEvent(e){const t=this.validate(he,e);if(t)return{status_code:400,error:t};const s=await this.invoke({method:"sendAnalyticsEvent",params:{state:e.state,name:e.name,data:e.data?JSON.stringify(e.data):null}}),n=this.validate(pe,s);let r;n&&this.logger.warn("sendAnalyticsEvent",`Unexpected raw response shape: ${n}`),r=I(s)?{status_code:204}:s;const o=this.validate(me,r);return o&&this.logger.warn("sendAnalyticsEvent",`Unexpected response shape: ${o}`),r}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(ye,e);return t&&this.logger.warn("getSessionParams",`Unexpected response shape: ${t}`),e}},e.DRMPlaybackEventSchema=Ve,e.DeviceModule=be,e.DismissSplashScreenResponseSchema=ut,e.DownloadFileRequestSchema=_e,e.DownloadFileResponseSchema=Re,e.FetchEmailResponseSchema=et,e.FetchEmailResultSchema=Ze,e.FileModule=class extends A{constructor(){super("FileModule")}async downloadFile(e){const t=this.validate(_e,e);if(t)return{status_code:400,error:t};const s=await this.invoke({method:"downloadFile",params:e}),n=this.validate(Re,s);return n&&this.logger.warn("downloadFile",`Unexpected response shape: ${n}`),s}},e.GetAuthorizationArtifactsResponseSchema=Ne,e.GetAuthorizationArtifactsResultSchema=Oe,e.GetBooleanRequestSchema=mt,e.GetBooleanResponseSchema=vt,e.GetBooleanResultSchema=gt,e.GetCoordinateResponseSchema=je,e.GetCoordinateResultSchema=Ge,e.GetCountryCodeResponseSchema=qe,e.GetCountryCodeResultSchema=ze,e.GetDoubleRequestSchema=It,e.GetDoubleResponseSchema=Nt,e.GetDoubleResultSchema=Tt,e.GetIntRequestSchema=St,e.GetIntResponseSchema=_t,e.GetIntResultSchema=kt,e.GetLanguageLocaleIdentifierResponseSchema=De,e.GetLanguageLocaleIdentifierResultSchema=Le,e.GetSelectedTravelDestinationResponseSchema=zt,e.GetSelectedTravelDestinationResultSchema=jt,e.GetSessionParamsResponseSchema=ye,e.GetSessionParamsResultSchema=ve,e.GetStringRequestSchema=Et,e.GetStringResponseSchema=$t,e.GetStringResultSchema=Ct,e.HasAccessToRequestSchema=ot,e.HasAccessToResponseSchema=it,e.HasAccessToResultSchema=at,e.HideBackButtonResponseSchema=Y,e.HideLoaderResponseSchema=ce,e.HideRefreshButtonResponseSchema=Z,e.IdentityModule=Pe,e.IsConnectedResponseSchema=fe,e.IsConnectedResultSchema=ge,e.IsEsimSupportedResponseSchema=ke,e.IsEsimSupportedResultSchema=Se,e.LocaleModule=class extends A{constructor(){super("LocaleModule")}async getLanguageLocaleIdentifier(){const e=await this.invoke({method:"getLanguageLocaleIdentifier"}),t=this.validate(De,e);return t&&this.logger.warn("getLanguageLocaleIdentifier",`Unexpected response shape: ${t}`),e}},e.LocationModule=class extends A{constructor(){super("LocationModule")}async getCoordinate(){const e=await this.invoke({method:"getCoordinate"}),t=this.validate(je,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(qe,e);return t&&this.logger.warn("getCountryCode",`Unexpected response shape: ${t}`),e}},e.Logger=U,e.MediaModule=class extends A{constructor(){super("MediaModule")}async playDRMContent(e){const t=await this.invoke({method:"playDRMContent",params:{data:e}}),s=this.validate(Fe,t);return s&&this.logger.warn("playDRMContent",`Unexpected response shape: ${s}`),t}observePlayDRMContent(e){return this.invokeStream({method:"observePlayDRMContent",params:{data:e}})}},e.NetworkModule=class extends A{constructor(){super("NetworkModule")}async send(e){const t=this.validate(We,e);if(t)return{status_code:400,error:t};const s=await this.invoke({method:"send",params:e}),n=this.validate(Je,s);if(n&&this.logger.warn("send",`Unexpected raw response shape: ${n}`),M(s)&&T(s)&&"string"==typeof s.result)try{const e=JSON.parse(s.result),t={...s,result:e},n=this.validate(Ye,t);return n&&this.logger.warn("send",`Unexpected response shape after parsing: ${n}`),t}catch{return{status_code:500,error:"Failed to parse response result as JSON"}}const r=s,o=this.validate(Ye,r);return o&&this.logger.warn("send",`Unexpected response shape: ${o}`),r}},e.ObserveDRMPlaybackResponseSchema=Ke,e.OnContentLoadedResponseSchema=re,e.OnCtaTapResponseSchema=le,e.OpenExternalLinkResponseSchema=de,e.PlatformModule=class extends A{constructor(){super("PlatformModule")}async back(){const e=await this.invoke({method:"back"}),t=this.validate(Xe,e);return t&&this.logger.warn("back",`Unexpected response shape: ${t}`),e}},e.PlayDRMContentResponseSchema=Fe,e.ProfileModule=rt,e.RedirectToSystemWebViewRequestSchema=Dt,e.RedirectToSystemWebViewResponseSchema=Gt,e.ReloadScopesResponseSchema=ct,e.RemoveAllResponseSchema=Lt,e.RemoveResponseSchema=Pt,e.ScanQRCodeRequestSchema=L,e.ScanQRCodeResponseSchema=G,e.ScanQRCodeResultSchema=D,e.ScopeModule=class extends A{constructor(){super("ScopeModule")}async hasAccessTo(e,t){const s={module:e,method:t},n=this.validate(ot,s);if(n)return{status_code:400,error:n};const r=await this.invoke({method:"hasAccessTo",params:s}),o=this.validate(it,r);return o&&this.logger.warn("hasAccessTo",`Unexpected response shape: ${o}`),r}async reloadScopes(){const e=await this.invoke({method:"reloadScopes"}),t=this.validate(ct,e);return t&&this.logger.warn("reloadScopes",`Unexpected response shape: ${t}`),e}},e.SendAnalyticsEventRequestSchema=he,e.SendAnalyticsEventResponseSchema=me,e.SendRequestSchema=We,e.SendResponseSchema=Ye,e.SendResultSchema=He,e.SetBackgroundColorResponseSchema=F,e.SetBooleanRequestSchema=ht,e.SetBooleanResponseSchema=pt,e.SetDoubleRequestSchema=At,e.SetDoubleResponseSchema=Mt,e.SetIntRequestSchema=yt,e.SetIntResponseSchema=wt,e.SetStringRequestSchema=Rt,e.SetStringResponseSchema=xt,e.SetTitleResponseSchema=W,e.ShowBackButtonResponseSchema=J,e.ShowLoaderResponseSchema=ae,e.ShowRefreshButtonResponseSchema=te,e.SplashScreenModule=class extends A{constructor(){super("SplashScreenModule")}async dismiss(){const e=await this.invoke({method:"dismiss"}),t=this.validate(ut,e);return t&&this.logger.warn("dismiss",`Unexpected response shape: ${t}`),e}},e.StorageModule=class extends A{constructor(){super("StorageModule")}async setBoolean(e,t){const s={key:e,value:t},n=this.validate(ht,s);if(n)return{status_code:400,error:n};const r=await this.invoke({method:"setBoolean",params:s}),o=this.validate(pt,r);return o&&this.logger.warn("setBoolean",`Unexpected response shape: ${o}`),r}async getBoolean(e){const t={key:e},s=this.validate(mt,t);if(s)return{status_code:400,error:s};const n=await this.invoke({method:"getBoolean",params:t}),r=this.validate(ft,n);let o;if(r&&this.logger.warn("getBoolean",`Unexpected raw response shape: ${r}`),200===n.status_code){const e=n.result;o=null==e?{status_code:204}:{status_code:200,result:e}}else o=n;const a=this.validate(vt,o);return a&&this.logger.warn("getBoolean",`Unexpected response shape: ${a}`),o}async setInt(e,t){const s={key:e,value:t},n=this.validate(yt,s);if(n)return{status_code:400,error:n};const r=await this.invoke({method:"setInt",params:s}),o=this.validate(wt,r);return o&&this.logger.warn("setInt",`Unexpected response shape: ${o}`),r}async getInt(e){const t={key:e},s=this.validate(St,t);if(s)return{status_code:400,error:s};const n=await this.invoke({method:"getInt",params:t}),r=this.validate(bt,n);let o;if(r&&this.logger.warn("getInt",`Unexpected raw response shape: ${r}`),200===n.status_code){const e=n.result;o=null==e?{status_code:204}:{status_code:200,result:e}}else o=n;const a=this.validate(_t,o);return a&&this.logger.warn("getInt",`Unexpected response shape: ${a}`),o}async setString(e,t){const s={key:e,value:t},n=this.validate(Rt,s);if(n)return{status_code:400,error:n};const r=await this.invoke({method:"setString",params:s}),o=this.validate(xt,r);return o&&this.logger.warn("setString",`Unexpected response shape: ${o}`),r}async getString(e){const t={key:e},s=this.validate(Et,t);if(s)return{status_code:400,error:s};const n=await this.invoke({method:"getString",params:t}),r=this.validate(Ut,n);let o;if(r&&this.logger.warn("getString",`Unexpected raw response shape: ${r}`),200===n.status_code){const e=n.result;o=null==e?{status_code:204}:{status_code:200,result:e}}else o=n;const a=this.validate($t,o);return a&&this.logger.warn("getString",`Unexpected response shape: ${a}`),o}async setDouble(e,t){const s={key:e,value:t},n=this.validate(At,s);if(n)return{status_code:400,error:n};const r=await this.invoke({method:"setDouble",params:s}),o=this.validate(Mt,r);return o&&this.logger.warn("setDouble",`Unexpected response shape: ${o}`),r}async getDouble(e){const t={key:e},s=this.validate(It,t);if(s)return{status_code:400,error:s};const n=await this.invoke({method:"getDouble",params:t}),r=this.validate(Ot,n);let o;if(r&&this.logger.warn("getDouble",`Unexpected raw response shape: ${r}`),200===n.status_code){const e=n.result;o=null==e?{status_code:204}:{status_code:200,result:e}}else o=n;const a=this.validate(Nt,o);return a&&this.logger.warn("getDouble",`Unexpected response shape: ${a}`),o}async remove(e){const t={key:e},s=this.validate(Bt,t);if(s)return{status_code:400,error:s};const n=await this.invoke({method:"remove",params:t}),r=this.validate(Pt,n);return r&&this.logger.warn("remove",`Unexpected response shape: ${r}`),n}async removeAll(){const e=await this.invoke({method:"removeAll"}),t=this.validate(Lt,e);return t&&this.logger.warn("removeAll",`Unexpected response shape: ${t}`),e}},e.SystemWebViewKitModule=class extends A{constructor(){super("SystemWebViewKitModule")}async redirectToSystemWebView(e){const t=this.validate(Dt,e);if(t)return{status_code:400,error:t};const s=await this.invoke({method:"redirectToSystemWebView",params:e}),n=this.validate(Gt,s);return n&&this.logger.warn("redirectToSystemWebView",`Unexpected response shape: ${n}`),s}},e.TriggerCheckoutRequestSchema=j,e.TriggerCheckoutResponseSchema=q,e.TriggerCheckoutResultSchema=z,e.UserAttributesModule=class extends A{constructor(){super("UserAttributesModule")}async getSelectedTravelDestination(){const e=await this.invoke({method:"getSelectedTravelDestination"}),t=this.validate(zt,e);return t&&this.logger.warn("getSelectedTravelDestination",`Unexpected response shape: ${t}`),e}},e.VerifyEmailRequestSchema=tt,e.VerifyEmailResponseSchema=nt,e.VerifyEmailResultSchema=st,e.hasResult=T,e.isClientError=function(e){return 400===e.status_code||401===e.status_code||403===e.status_code||404===e.status_code||424===e.status_code||426===e.status_code},e.isError=function(e){return 400===e.status_code||401===e.status_code||403===e.status_code||404===e.status_code||424===e.status_code||426===e.status_code||500===e.status_code||501===e.status_code},e.isFound=function(e){return 302===e.status_code},e.isNoContent=function(e){return 204===e.status_code},e.isOk=I,e.isRedirection=function(e){return 302===e.status_code},e.isServerError=function(e){return 500===e.status_code||501===e.status_code},e.isSuccess=M});
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,s={exports:{}},n=(t||(t=1,function(e){function t(e){var t=!1;return{isUnsubscribed:function(){return t},unsubscribe:function(){t||(e(),t=!0)}}}function s(e){return{subscribe:e,then:function(t,s){return new Promise(function(n,r){try{var o=null,a=!1;o=e({next:function(e){n(null==t?void 0:t(e)),o&&o.unsubscribe(),a=!0}}),a&&o&&o.unsubscribe()}catch(e){null==s?r(e):n(s(e))}})}}}function n(n,r){return r.funcNameToWrap,function(n,r){var o=r.callbackNameFunc,a=r.funcToWrap;return s(function(s){var r,i=o();return n[i]=function(t){if(function(e){for(var t=[],s=1;s<arguments.length;s++)t[s-1]=arguments[s];if(!e)return!1;var n=function(e){return Object.keys(e).concat(Object.getOwnPropertyNames(Object.getPrototypeOf(e)))}(e);return t.every(function(e){return 0<=n.indexOf(e)})}(t.result,"event"))t.result.event===e.StreamEvent.STREAM_TERMINATED&&r.unsubscribe();else{var n=t.result,o=t.error,a=t.status_code;s&&s.next&&s.next({result:null===n?void 0:n,error:null===o?void 0:o,status_code:null===a?void 0:a})}},a(i),r=t(function(){n[i]=void 0,s&&s.complete&&s.complete()})})}(n,function(e,t){var s={};for(var n in e)Object.prototype.hasOwnProperty.call(e,n)&&t.indexOf(n)<0&&(s[n]=e[n]);if(null!=e&&"function"==typeof Object.getOwnPropertySymbols){var r=0;for(n=Object.getOwnPropertySymbols(e);r<n.length;r++)t.indexOf(n[r])<0&&(s[n[r]]=e[n[r]])}return s}(r,["funcNameToWrap"]))}(e.StreamEvent||(e.StreamEvent={})).STREAM_TERMINATED="STREAM_TERMINATED",e.createDataStream=s,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 s;e[(s=t,"Wrapped"+s)]=function(e,t,s){return{invoke:function(r,o){return n(e,{funcNameToWrap:r,callbackNameFunc:function(){return function(e,t){var s=t.moduleName,n=t.funcName,r=0;return function(){for(var t,o,a="";(a=(t={moduleName:s,funcName:n,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 s({callback:e,method:r,module:t,parameters:null!=o?o:{}})}})}}}(e,t,function(s){if(e[t]&&e[t][s.method]instanceof Function)e[t][s.method](JSON.stringify(s));else{if(!(e.webkit&&e.webkit.messageHandlers&&e.webkit.messageHandlers[t]))throw new Error("Unexpected method '"+s.method+"' for module '"+t+"'");e.webkit.messageHandlers[t].postMessage(s)}})},Object.defineProperty(e,"__esModule",{value:!0})}(s.exports)),s.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,s,n,r){const a=r&&"input"in r?r.input:s.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:n.lang,abortEarly:n.abortEarly,abortPipeEarly:n.abortPipeEarly},d="schema"===e.kind,l=r?.message??e.message??(e.reference,void u.lang)??(d?void u.lang:null)??n.message??void u.lang;void 0!==l&&(u.message="function"==typeof l?l(u):l),d&&(s.typed=!1),s.issues?s.issues.push(u):s.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 s=[...new Set(e)];return s.length>1?`(${s.join(` ${t} `)})`:s[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,s){return"function"==typeof e.fallback?e.fallback(t,s):e.fallback}function p(e,t,s){return"function"==typeof e.default?e.default(t,s):e.default}function g(e){return{kind:"schema",type:"boolean",reference:g,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 m(e,t){return{kind:"schema",type:"literal",reference:m,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:"nullish",reference:f,expects:`(${e.expects} | null | undefined)`,async:!1,wrapped:e,default:t,get"~standard"(){return i(this)},"~run"(e,t){return null!==e.value&&void 0!==e.value||(void 0!==this.default&&(e.value=p(this,e,t)),null!==e.value&&void 0!==e.value)?this.wrapped["~run"](e,t):(e.typed=!0,e)}}}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 s=e.value;if(s&&"object"==typeof s){e.typed=!0,e.value={};for(const n in this.entries){const r=this.entries[n];if(n in s||("exact_optional"===r.type||"optional"===r.type||"nullish"===r.type)&&void 0!==r.default){const o=n in s?s[n]:p(r),a=r["~run"]({value:o},t);if(a.issues){const r={type:"object",origin:"value",input:s,key:n,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[n]=a.value}else if(void 0!==r.fallback)e.value[n]=h(r);else if("exact_optional"!==r.type&&"optional"!==r.type&&"nullish"!==r.type&&(a(this,"key",e,t,{input:void 0,expected:`"${n}"`,path:[{type:"object",origin:"key",input:s,key:n,value:s[n]}]}),t.abortEarly))break}}else a(this,"type",e,t);return e}}}function w(e,t){return{kind:"schema",type:"optional",reference:w,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 k(e,t){return{kind:"schema",type:"picklist",reference:k,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 _(e,t,s){return{kind:"schema",type:"record",reference:_,expects:"Object",async:!1,key:e,value:t,message:s,get"~standard"(){return i(this)},"~run"(e,t){const s=e.value;if(s&&"object"==typeof s){e.typed=!0,e.value={};for(const n in s)if(c(s,n)){const r=s[n],o=this.key["~run"]({value:n},t);if(o.issues){const a={type:"object",origin:"key",input:s,key:n,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:s,key:n,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 x(e){let t;if(e)for(const s of e)t?t.push(...s.issues):t=s.issues;return t}function S(e,t){return{kind:"schema",type:"union",reference:S,expects:u(e.map(e=>e.expects),"|"),async:!1,options:e,message:t,get"~standard"(){return i(this)},"~run"(e,t){let s,n,r;for(const o of this.options){const a=o["~run"]({value:e.value},t);if(a.typed){if(!a.issues){s=a;break}n?n.push(a):n=[a]}else r?r.push(a):r=[a]}if(s)return s;if(n){if(1===n.length)return n[0];a(this,"type",e,t,{issues:x(n)}),e.typed=!0}else{if(1===r?.length)return r[0];a(this,"type",e,t,{issues:x(r)})}return e}}}function U(){return{kind:"schema",type:"unknown",reference:U,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,s){for(const n of e)if("metadata"!==n.kind){if(t.issues&&("schema"===n.kind||"transformation"===n.kind)){t.typed=!1;break}t.issues&&(s.abortEarly||s.abortPipeEarly)||(t=n["~run"](t,s))}return t}}}function $(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 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 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}${$(e)?`: ${e.message}`:""}`,{cause:e})}}validate(e,t){const s=function(e,t){const s=e["~run"]({value:t},r(void 0));return{typed:s.typed,success:!s.issues,output:s.value,issues:s.issues}}(e,t);return s.success?null:s.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:s}=e;try{return M()?await this.wrappedModule.invoke(t,s):{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:s}=e;try{return M()?this.wrappedModule.invoke(t,s):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 I(e){return 200===e.status_code||204===e.status_code}function N(e){return 200===e.status_code}function T(e){return"result"in e&&null!==e.result&&void 0!==e.result}const O=e=>y({status_code:m(e),error:b()}),P=e=>y({status_code:m(200),result:e}),R=y({status_code:m(204)}),B=y({status_code:m(302)}),L=y({title:w(b())}),j=S([P(y({qrCode:b()})),R,O(400),O(403),O(500),O(501)]),D=_(b(),U()),z=S([P(function e(t,s,n){return{kind:"schema",type:"variant",reference:e,expects:"Object",async:!1,key:t,options:s,message:n,get"~standard"(){return i(this)},"~run"(e,t){const s=e.value;if(s&&"object"==typeof s){let n,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 n=u.entries[t];if(t in s?n["~run"]({typed:!1,value:s[t]},{abortEarly:!0}).issues:"exact_optional"!==n.type&&"optional"!==n.type&&"nullish"!==n.type){e=!1,o!==t&&(r<c||r===c&&t in s&&!(o in s))&&(r=c,o=t,i=[]),o===t&&i.push(u.entries[t].expects);break}c++}if(e){const e=u["~run"]({value:s},t);(!n||!n.typed&&e.typed)&&(n=e)}}if(n&&!n.issues)break}};if(c(this,new Set([this.key])),n)return n;a(this,"type",e,t,{input:s[o],expected:u(i,"|"),path:[{type:"object",origin:"value",input:s,key:o,value:s[o]}]})}else a(this,"type",e,t);return e}}}("status",[y({status:m("success"),transactionID:b()}),y({status:m("failure"),transactionID:b(),errorMessage:b(),errorCode:b()}),y({status:m("pending"),transactionID:b()}),y({status:m("userInitiatedCancel")})])),O(400),O(500),O(501)]),K=S([P(g()),R,O(400),O(500),O(501)]),G=S([R,O(400),O(500),O(501)]),W=S([P(g()),R,O(400),O(500),O(501)]),F=S([R,O(400),O(500),O(501)]),V=S([P(g()),R,O(500),O(501)]),q=S([R,O(500),O(501)]),H=S([P(g()),R,O(500),O(501)]),Y=S([R,O(500),O(501)]),J=S([P(g()),R,O(500),O(501)]),Q=S([R,O(500),O(501)]),X=S([P(g()),R,O(500),O(501)]),Z=S([R,O(500),O(501)]),ee=S([P(g()),R,O(500),O(501)]),te=S([R,O(500),O(501)]),se=S([P(g()),R,O(500),O(501)]),ne=S([P(g()),R,O(500),O(501)]),re=S([R,O(500),O(501)]),oe=S([P(g()),R,O(500),O(501)]),ae=S([R,O(500),O(501)]),ie=S([P(g()),R,O(400),O(500),O(501)]),ce=S([R,O(400),O(500),O(501)]),ue=S([P(g()),O(500),O(501)]),de=y({state:E(b(),d(1)),name:E(b(),d(1)),data:w(_(b(),U()))}),le=S([P(g()),R,O(400),O(500),O(501)]),he=S([R,O(400),O(500),O(501)]),pe=S([P(b()),R,O(500),O(501)]);function ge(e,t){return e.major!==t.major?e.major>t.major:e.minor!==t.minor?e.minor>t.minor:e.patch>=t.patch}const me=S([P(g()),O(403),O(424),O(426),O(500),O(501)]);class fe extends A{constructor(){super("DeviceModule")}async isEsimSupported(){const e=this.checkSupport(e=>ge(e.version,fe.MINIMUM_VERSION));if(e)return e;const t=await this.invoke({method:"isEsimSupported"}),s=this.validate(me,t);return s&&this.logger.warn("isEsimSupported",`Unexpected response shape: ${s}`),t}}fe.MINIMUM_VERSION={major:5,minor:409,patch:0};const ve=y({fileUrl:E(b(),l()),fileName:E(b(),d(1))}),ye=S([R,O(400),O(500),O(501)]);function we(e){const t=new Uint32Array(e);crypto.getRandomValues(t);let s="";for(let n=0;n<e;n+=1)s+="ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789".charAt(t[n]%62);return s}async function ke(e){const t=(new TextEncoder).encode(e);return function(e){const t=new Uint8Array(e);let s="";for(let e=0;e<t.byteLength;e+=1)s+=String.fromCharCode(t[e]);return btoa(s).replace(/=/g,"").replace(/\+/g,"-").replace(/\//g,"_")}(await crypto.subtle.digest("SHA-256",t))}const _e="grabid",be={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 xe extends Error{constructor(e,t){super(e),this.cause=t,this.name="AuthorizationConfigurationError"}}const Se=y({clientId:E(b(),d(1)),redirectUri:E(b(),l()),scope:E(b(),d(1)),environment:k(["staging","production"]),responseMode:w(k(["redirect","in_place"]))}),Ue=S([P(y({code:b(),state:b()})),R,B,O(400),O(403),O(500),O(501)]);class Ee extends A{constructor(){super("IdentityModule")}async fetchAuthorizationEndpoint(e){const t=be[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 xe("Failed to fetch authorization configuration");const s=await e.json();if(!s.authorization_endpoint)throw console.error("authorization_endpoint not found in OpenID configuration response"),new xe("Invalid authorization configuration");return s.authorization_endpoint}catch(e){if(console.error("Error fetching authorization endpoint:",e),e instanceof xe)throw e;throw new Error("Something wrong happened when fetching authorization configuration",{cause:e})}}async generatePKCEArtifacts(){const e=we(16),t=we(32),s=(n=we(64),btoa(n).replace(/=/g,"").replace(/\+/g,"-").replace(/\//g,"_"));var n;return{nonce:e,state:t,codeVerifier:s,codeChallenge:await ke(s),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"),s=this.getStorageItem("nonce"),n=this.getStorageItem("redirect_uri");return null===e&&null===t&&null===s&&null===n?{status_code:204}:null!==e&&null!==t&&null!==s&&null!==n?{status_code:200,result:{state:e,codeVerifier:t,nonce:s,redirectUri:n}}:{status_code:400,error:"Inconsistent authorization artifacts in storage"}}async clearAuthorizationArtifacts(){return window.localStorage.removeItem(`${_e}:nonce`),window.localStorage.removeItem(`${_e}:state`),window.localStorage.removeItem(`${_e}:code_verifier`),window.localStorage.removeItem(`${_e}:redirect_uri`),window.localStorage.removeItem(`${_e}:login_return_uri`),{status_code:204}}setStorageItem(e,t){window.localStorage.setItem(`${_e}:${e}`,t)}getStorageItem(e){return window.localStorage.getItem(`${_e}:${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&&!ge(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 s={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},n=Ee.buildAuthorizeUrl(t,s);return window.location.assign(n),{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}}),s=this.validate(Ue,t);return s&&this.logger.warn("authorize",`Unexpected response shape: ${s}`),t}async authorize(e){const t=this.validate(Se,e);if(t)return{status_code:400,error:t};const s=await this.generatePKCEArtifacts(),n=e.responseMode||"redirect",r="in_place"===n?Ee.normalizeUrl(window.location.href):e.redirectUri;this.storePKCEArtifacts({...s,redirectUri:r});const o={clientId:e.clientId,redirectUri:e.redirectUri,scope:e.scope,nonce:s.nonce,state:s.state,codeChallenge:s.codeChallenge,codeChallengeMethod:s.codeChallengeMethod};if(Ee.shouldUseWebConsent(e))return this.performWebAuthorization({...o,environment:e.environment});try{const t=await this.performNativeAuthorization({...o,actualRedirectUri:r,responseMode:n});return 200===t.status_code?{status_code:200,result:{code:t.result.code,state:t.result.state,codeVerifier:s.codeVerifier,nonce:s.nonce,redirectUri:r}}: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 $e=S([P(b()),R,O(400),O(500),O(501)]),Ce=S([P(y({latitude:v(),longitude:v()})),O(403),O(424),O(500),O(501)]),Me=S([P(b()),R,O(403),O(424),O(500),O(501)]),Ae=S([P(y({type:k(["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()})),R,O(400),O(424),O(500),O(501)]),Ie=y({endpoint:b(),method:k(["GET","POST","PUT","DELETE","PATCH","HEAD","OPTIONS"]),headers:w(_(b(),b())),query:w(_(b(),b())),body:w(U()),timeout:w(v())}),Ne=_(b(),U()),Te=S([P(Ne),R,O(400),O(401),O(403),O(404),O(424),O(426),O(500),O(501)]),Oe=S([b(),Ne]),Pe=S([P(Oe),R,O(400),O(401),O(403),O(404),O(424),O(426),O(500),O(501)]),Re=S([R,O(500),O(501)]),Be=S([P(y({email:b()})),R,O(400),O(403),O(426),O(500),O(501)]),Le=y({email:w(E(b(),d(1))),skipUserInput:w(g())}),je=S([P(y({email:b()})),R,O(400),O(403),O(426),O(500),O(501)]);class De extends A{constructor(){super("ProfileModule")}async fetchEmail(){const e=this.checkSupport(e=>ge(e.version,De.MINIMUM_VERSION));if(e)return e;const t=await this.invoke({method:"fetchEmail"}),s=this.validate(Be,t);return s&&this.logger.warn("fetchEmail",`Unexpected response shape: ${s}`),t}async verifyEmail(e){const t=this.checkSupport(e=>ge(e.version,De.MINIMUM_VERSION));if(t)return t;const s=this.validate(Le,e??{});if(s)return{status_code:400,error:s};const n=await this.invoke({method:"verifyEmail",params:e}),r=this.validate(je,n);return r&&this.logger.warn("verifyEmail",`Unexpected response shape: ${r}`),n}}De.MINIMUM_VERSION={major:5,minor:399,patch:0};const ze=y({module:E(b(),d(1)),method:E(b(),d(1))}),Ke=S([P(g()),O(400),O(424),O(500),O(501)]),Ge=S([R,O(424),O(500),O(501)]),We=S([R,O(400),O(403),O(500),O(501)]),Fe=E(b(),d(1)),Ve=y({key:Fe}),qe=y({key:Fe,value:g()}),He=S([R,O(400),O(424),O(500),O(501)]),Ye=Ve,Je=g(),Qe=S([y({status_code:m(200),result:f(g())}),R,O(400),O(424)]),Xe=S([P(Je),R,O(400),O(424),O(500),O(501)]),Ze=y({key:Fe,value:v()}),et=S([R,O(400),O(424),O(500),O(501)]),tt=Ve,st=v(),nt=S([y({status_code:m(200),result:f(v())}),R,O(400),O(424)]),rt=S([P(st),R,O(400),O(424),O(500),O(501)]),ot=y({key:Fe,value:b()}),at=S([R,O(400),O(424),O(500),O(501)]),it=Ve,ct=b(),ut=S([y({status_code:m(200),result:f(b())}),R,O(400),O(424)]),dt=S([P(ct),R,O(400),O(424),O(500),O(501)]),lt=y({key:Fe,value:v()}),ht=S([R,O(400),O(424),O(500),O(501)]),pt=Ve,gt=v(),mt=S([y({status_code:m(200),result:f(v())}),R,O(400),O(424)]),ft=S([P(gt),R,O(400),O(424),O(500),O(501)]),vt=Ve,yt=S([R,O(400),O(424),O(500),O(501)]),wt=S([R,O(424),O(500),O(501)]),kt=y({url:E(b(),l())}),_t=S([P(b()),O(400),O(424),O(500),O(501)]),bt=S([P(b()),R,O(500),O(501)]);e.BaseModule=A,e.CameraModule=class extends A{constructor(){super("CameraModule")}async scanQRCode(e={}){const t=this.validate(L,e);if(t)return{status_code:400,error:t};const s=await this.invoke({method:"scanQRCode",params:e}),n=this.validate(j,s);return n&&this.logger.warn("scanQRCode",`Unexpected response shape: ${n}`),s}},e.CheckoutModule=class extends A{constructor(){super("CheckoutModule")}async triggerCheckout(e){const t=this.validate(D,e);if(t)return{status_code:400,error:t};const s=await this.invoke({method:"triggerCheckout",params:e}),n=this.validate(z,s);return n&&this.logger.warn("triggerCheckout",`Unexpected response shape: ${n}`),s}},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 A{constructor(){super("ContainerModule")}async setBackgroundColor(e){const t=await this.invoke({method:"setBackgroundColor",params:{backgroundColor:e}}),s=this.validate(K,t);let n;s&&this.logger.warn("setBackgroundColor",`Unexpected raw response shape: ${s}`),n=N(t)?{status_code:204}:t;const r=this.validate(G,n);return r&&this.logger.warn("setBackgroundColor",`Unexpected response shape: ${r}`),n}async setTitle(e){const t=await this.invoke({method:"setTitle",params:{title:e}}),s=this.validate(W,t);let n;s&&this.logger.warn("setTitle",`Unexpected raw response shape: ${s}`),n=N(t)?{status_code:204}:t;const r=this.validate(F,n);return r&&this.logger.warn("setTitle",`Unexpected response shape: ${r}`),n}async hideBackButton(){const e=await this.invoke({method:"hideBackButton"}),t=this.validate(V,e);let s;t&&this.logger.warn("hideBackButton",`Unexpected raw response shape: ${t}`),s=N(e)?{status_code:204}:e;const n=this.validate(q,s);return n&&this.logger.warn("hideBackButton",`Unexpected response shape: ${n}`),s}async showBackButton(){const e=await this.invoke({method:"showBackButton"}),t=this.validate(H,e);let s;t&&this.logger.warn("showBackButton",`Unexpected raw response shape: ${t}`),s=N(e)?{status_code:204}:e;const n=this.validate(Y,s);return n&&this.logger.warn("showBackButton",`Unexpected response shape: ${n}`),s}async hideRefreshButton(){const e=await this.invoke({method:"hideRefreshButton"}),t=this.validate(J,e);let s;t&&this.logger.warn("hideRefreshButton",`Unexpected raw response shape: ${t}`),s=N(e)?{status_code:204}:e;const n=this.validate(Q,s);return n&&this.logger.warn("hideRefreshButton",`Unexpected response shape: ${n}`),s}async showRefreshButton(){const e=await this.invoke({method:"showRefreshButton"}),t=this.validate(X,e);let s;t&&this.logger.warn("showRefreshButton",`Unexpected raw response shape: ${t}`),s=N(e)?{status_code:204}:e;const n=this.validate(Z,s);return n&&this.logger.warn("showRefreshButton",`Unexpected response shape: ${n}`),s}async close(){const e=await this.invoke({method:"close"}),t=this.validate(ee,e);let s;t&&this.logger.warn("close",`Unexpected raw response shape: ${t}`),s=N(e)?{status_code:204}:e;const n=this.validate(te,s);return n&&this.logger.warn("close",`Unexpected response shape: ${n}`),s}async onContentLoaded(){const e=await this.invoke({method:"onContentLoaded"}),t=this.validate(se,e);return t&&this.logger.warn("onContentLoaded",`Unexpected response shape: ${t}`),e}async showLoader(){const e=await this.invoke({method:"showLoader"}),t=this.validate(ne,e);let s;t&&this.logger.warn("showLoader",`Unexpected raw response shape: ${t}`),s=N(e)?{status_code:204}:e;const n=this.validate(re,s);return n&&this.logger.warn("showLoader",`Unexpected response shape: ${n}`),s}async hideLoader(){const e=await this.invoke({method:"hideLoader"}),t=this.validate(oe,e);let s;t&&this.logger.warn("hideLoader",`Unexpected raw response shape: ${t}`),s=N(e)?{status_code:204}:e;const n=this.validate(ae,s);return n&&this.logger.warn("hideLoader",`Unexpected response shape: ${n}`),s}async openExternalLink(e){const t=await this.invoke({method:"openExternalLink",params:{url:e}}),s=this.validate(ie,t);let n;s&&this.logger.warn("openExternalLink",`Unexpected raw response shape: ${s}`),n=N(t)?{status_code:204}:t;const r=this.validate(ce,n);return r&&this.logger.warn("openExternalLink",`Unexpected response shape: ${r}`),n}async onCtaTap(e){const t=await this.invoke({method:"onCtaTap",params:{action:e}}),s=this.validate(ue,t);return s&&this.logger.warn("onCtaTap",`Unexpected response shape: ${s}`),t}async sendAnalyticsEvent(e){const t=this.validate(de,e);if(t)return{status_code:400,error:t};const s=await this.invoke({method:"sendAnalyticsEvent",params:{state:e.state,name:e.name,data:e.data?JSON.stringify(e.data):null}}),n=this.validate(le,s);let r;n&&this.logger.warn("sendAnalyticsEvent",`Unexpected raw response shape: ${n}`),r=N(s)?{status_code:204}:s;const o=this.validate(he,r);return o&&this.logger.warn("sendAnalyticsEvent",`Unexpected response shape: ${o}`),r}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(pe,e);return t&&this.logger.warn("getSessionParams",`Unexpected response shape: ${t}`),e}},e.DeviceModule=fe,e.FileModule=class extends A{constructor(){super("FileModule")}async downloadFile(e){const t=this.validate(ve,e);if(t)return{status_code:400,error:t};const s=await this.invoke({method:"downloadFile",params:e}),n=this.validate(ye,s);return n&&this.logger.warn("downloadFile",`Unexpected response shape: ${n}`),s}},e.IdentityModule=Ee,e.LocaleModule=class extends A{constructor(){super("LocaleModule")}async getLanguageLocaleIdentifier(){const e=await this.invoke({method:"getLanguageLocaleIdentifier"}),t=this.validate($e,e);return t&&this.logger.warn("getLanguageLocaleIdentifier",`Unexpected response shape: ${t}`),e}},e.LocationModule=class extends A{constructor(){super("LocationModule")}async getCoordinate(){const e=await this.invoke({method:"getCoordinate"}),t=this.validate(Ce,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(Me,e);return t&&this.logger.warn("getCountryCode",`Unexpected response shape: ${t}`),e}},e.Logger=C,e.MediaModule=class extends A{constructor(){super("MediaModule")}async playDRMContent(e){const t=await this.invoke({method:"playDRMContent",params:{data:e}}),s=this.validate(Ae,t);return s&&this.logger.warn("playDRMContent",`Unexpected response shape: ${s}`),t}observePlayDRMContent(e){return this.invokeStream({method:"observePlayDRMContent",params:{data:e}})}},e.NetworkModule=class extends A{constructor(){super("NetworkModule")}async send(e){const t=this.validate(Ie,e);if(t)return{status_code:400,error:t};const s=await this.invoke({method:"send",params:e}),n=this.validate(Pe,s);if(n&&this.logger.warn("send",`Unexpected raw response shape: ${n}`),I(s)&&T(s)&&"string"==typeof s.result)try{const e=JSON.parse(s.result),t={...s,result:e},n=this.validate(Te,t);return n&&this.logger.warn("send",`Unexpected response shape after parsing: ${n}`),t}catch{return{status_code:500,error:"Failed to parse response result as JSON"}}const r=s,o=this.validate(Te,r);return o&&this.logger.warn("send",`Unexpected response shape: ${o}`),r}},e.PlatformModule=class extends A{constructor(){super("PlatformModule")}async back(){const e=await this.invoke({method:"back"}),t=this.validate(Re,e);return t&&this.logger.warn("back",`Unexpected response shape: ${t}`),e}},e.ProfileModule=De,e.ScopeModule=class extends A{constructor(){super("ScopeModule")}async hasAccessTo(e,t){const s={module:e,method:t},n=this.validate(ze,s);if(n)return{status_code:400,error:n};const r=await this.invoke({method:"hasAccessTo",params:s}),o=this.validate(Ke,r);return o&&this.logger.warn("hasAccessTo",`Unexpected response shape: ${o}`),r}async reloadScopes(){const e=await this.invoke({method:"reloadScopes"}),t=this.validate(Ge,e);return t&&this.logger.warn("reloadScopes",`Unexpected response shape: ${t}`),e}},e.SplashScreenModule=class extends A{constructor(){super("SplashScreenModule")}async dismiss(){const e=await this.invoke({method:"dismiss"}),t=this.validate(We,e);return t&&this.logger.warn("dismiss",`Unexpected response shape: ${t}`),e}},e.StorageModule=class extends A{constructor(){super("StorageModule")}async setBoolean(e,t){const s={key:e,value:t},n=this.validate(qe,s);if(n)return{status_code:400,error:n};const r=await this.invoke({method:"setBoolean",params:s}),o=this.validate(He,r);return o&&this.logger.warn("setBoolean",`Unexpected response shape: ${o}`),r}async getBoolean(e){const t={key:e},s=this.validate(Ye,t);if(s)return{status_code:400,error:s};const n=await this.invoke({method:"getBoolean",params:t}),r=this.validate(Qe,n);let o;if(r&&this.logger.warn("getBoolean",`Unexpected raw response shape: ${r}`),200===n.status_code){const e=n.result;o=null==e?{status_code:204}:{status_code:200,result:e}}else o=n;const a=this.validate(Xe,o);return a&&this.logger.warn("getBoolean",`Unexpected response shape: ${a}`),o}async setInt(e,t){const s={key:e,value:t},n=this.validate(Ze,s);if(n)return{status_code:400,error:n};const r=await this.invoke({method:"setInt",params:s}),o=this.validate(et,r);return o&&this.logger.warn("setInt",`Unexpected response shape: ${o}`),r}async getInt(e){const t={key:e},s=this.validate(tt,t);if(s)return{status_code:400,error:s};const n=await this.invoke({method:"getInt",params:t}),r=this.validate(nt,n);let o;if(r&&this.logger.warn("getInt",`Unexpected raw response shape: ${r}`),200===n.status_code){const e=n.result;o=null==e?{status_code:204}:{status_code:200,result:e}}else o=n;const a=this.validate(rt,o);return a&&this.logger.warn("getInt",`Unexpected response shape: ${a}`),o}async setString(e,t){const s={key:e,value:t},n=this.validate(ot,s);if(n)return{status_code:400,error:n};const r=await this.invoke({method:"setString",params:s}),o=this.validate(at,r);return o&&this.logger.warn("setString",`Unexpected response shape: ${o}`),r}async getString(e){const t={key:e},s=this.validate(it,t);if(s)return{status_code:400,error:s};const n=await this.invoke({method:"getString",params:t}),r=this.validate(ut,n);let o;if(r&&this.logger.warn("getString",`Unexpected raw response shape: ${r}`),200===n.status_code){const e=n.result;o=null==e?{status_code:204}:{status_code:200,result:e}}else o=n;const a=this.validate(dt,o);return a&&this.logger.warn("getString",`Unexpected response shape: ${a}`),o}async setDouble(e,t){const s={key:e,value:t},n=this.validate(lt,s);if(n)return{status_code:400,error:n};const r=await this.invoke({method:"setDouble",params:s}),o=this.validate(ht,r);return o&&this.logger.warn("setDouble",`Unexpected response shape: ${o}`),r}async getDouble(e){const t={key:e},s=this.validate(pt,t);if(s)return{status_code:400,error:s};const n=await this.invoke({method:"getDouble",params:t}),r=this.validate(mt,n);let o;if(r&&this.logger.warn("getDouble",`Unexpected raw response shape: ${r}`),200===n.status_code){const e=n.result;o=null==e?{status_code:204}:{status_code:200,result:e}}else o=n;const a=this.validate(ft,o);return a&&this.logger.warn("getDouble",`Unexpected response shape: ${a}`),o}async remove(e){const t={key:e},s=this.validate(vt,t);if(s)return{status_code:400,error:s};const n=await this.invoke({method:"remove",params:t}),r=this.validate(yt,n);return r&&this.logger.warn("remove",`Unexpected response shape: ${r}`),n}async removeAll(){const e=await this.invoke({method:"removeAll"}),t=this.validate(wt,e);return t&&this.logger.warn("removeAll",`Unexpected response shape: ${t}`),e}},e.SystemWebViewKitModule=class extends A{constructor(){super("SystemWebViewKitModule")}async redirectToSystemWebView(e){const t=this.validate(kt,e);if(t)return{status_code:400,error:t};const s=await this.invoke({method:"redirectToSystemWebView",params:e}),n=this.validate(_t,s);return n&&this.logger.warn("redirectToSystemWebView",`Unexpected response shape: ${n}`),s}},e.UserAttributesModule=class extends A{constructor(){super("UserAttributesModule")}async getSelectedTravelDestination(){const e=await this.invoke({method:"getSelectedTravelDestination"}),t=this.validate(bt,e);return t&&this.logger.warn("getSelectedTravelDestination",`Unexpected response shape: ${t}`),e}},e.hasResult=T,e.isClientError=function(e){return 400===e.status_code||401===e.status_code||403===e.status_code||404===e.status_code||424===e.status_code||426===e.status_code},e.isError=function(e){return 400===e.status_code||401===e.status_code||403===e.status_code||404===e.status_code||424===e.status_code||426===e.status_code||500===e.status_code||501===e.status_code},e.isFound=function(e){return 302===e.status_code},e.isNoContent=function(e){return 204===e.status_code},e.isOk=N,e.isRedirection=function(e){return 302===e.status_code},e.isServerError=function(e){return 500===e.status_code||501===e.status_code},e.isSuccess=I});
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@grabjs/superapp-sdk",
3
- "version": "2.0.0-beta.54",
3
+ "version": "2.0.0-beta.55",
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
@@ -528,56 +528,56 @@ For the complete API reference, see [GrabPay API](https://developer.grab.com/doc
528
528
 
529
529
  #### `CameraModule`
530
530
  SDK module for accessing the device camera via `JSBridge`.
531
- - `scanQRCode(request: { title?: string }): Promise<{ result: { qrCode: string }; status_code: 200 } | { status_code: 204 } | { error: string; status_code: 400 } | { error: string; status_code: 403 } | { error: string; status_code: 500 } | { error: string; status_code: 501 }>` — Opens the native camera to scan a QR code.
531
+ - `scanQRCode(request: ScanQRCodeRequest): Promise<ScanQRCodeResponse>` — Opens the native camera to scan a QR code.
532
532
 
533
533
  #### `CheckoutModule`
534
534
  SDK module for triggering native payment flows via `JSBridge`.
535
- - `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. (**OAuth Scope:** mobile.checkout)
535
+ - `triggerCheckout(request: TriggerCheckoutRequest): Promise<TriggerCheckoutResponse>` — Triggers the native checkout flow for payment processing. (**OAuth Scope:** mobile.checkout)
536
536
 
537
537
  #### `ContainerModule`
538
538
  SDK module for controlling the WebView container via `JSBridge`.
539
- - `close(): Promise<{ status_code: 204 } | { error: string; status_code: 500 } | { error: string; status_code: 501 }>` — Close the container and return to the previous screen.
540
- - `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.
541
- - `hideBackButton(): Promise<{ status_code: 204 } | { error: string; status_code: 500 } | { error: string; status_code: 501 }>` — Hide the back button on the container header.
542
- - `hideLoader(): Promise<{ status_code: 204 } | { error: string; status_code: 500 } | { error: string; status_code: 501 }>` — Hide the full-screen loading indicator.
543
- - `hideRefreshButton(): Promise<{ status_code: 204 } | { error: string; status_code: 500 } | { error: string; status_code: 501 }>` — Hide the refresh button on the container header.
544
- - `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`.
545
- - `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.
546
- - `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).
547
- - `openExternalLink(request: string): Promise<{ status_code: 204 } | { error: string; status_code: 400 } | { error: string; status_code: 500 } | { error: string; status_code: 501 }>` — Open a link in the external browser.
548
- - `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 }>` — Use this method to track user interactions and page transitions.
549
- - `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.
550
- - `setTitle(request: string): Promise<{ status_code: 204 } | { error: string; status_code: 400 } | { error: string; status_code: 500 } | { error: string; status_code: 501 }>` — Set the title of the container header.
551
- - `showBackButton(): Promise<{ status_code: 204 } | { error: string; status_code: 500 } | { error: string; status_code: 501 }>` — Show the back button on the container header.
552
- - `showLoader(): Promise<{ status_code: 204 } | { error: string; status_code: 500 } | { error: string; status_code: 501 }>` — Show the full-screen loading indicator.
553
- - `showRefreshButton(): Promise<{ status_code: 204 } | { error: string; status_code: 500 } | { error: string; status_code: 501 }>` — Show the refresh button on the container header.
539
+ - `close(): Promise<CloseResponse>` — Close the container and return to the previous screen.
540
+ - `getSessionParams(): Promise<GetSessionParamsResponse>` — Get the session parameters from the container.
541
+ - `hideBackButton(): Promise<HideBackButtonResponse>` — Hide the back button on the container header.
542
+ - `hideLoader(): Promise<HideLoaderResponse>` — Hide the full-screen loading indicator.
543
+ - `hideRefreshButton(): Promise<HideRefreshButtonResponse>` — Hide the refresh button on the container header.
544
+ - `isConnected(): Promise<IsConnectedResponse>` — Check if the web app is connected to the Grab SuperApp via `JSBridge`.
545
+ - `onContentLoaded(): Promise<OnContentLoadedResponse>` — Notify the Grab SuperApp that the page content has loaded.
546
+ - `onCtaTap(request: string): Promise<OnCtaTapResponse>` — Notify the client that the user has tapped a call-to-action (CTA).
547
+ - `openExternalLink(request: string): Promise<OpenExternalLinkResponse>` — Open a link in the external browser.
548
+ - `sendAnalyticsEvent(request: SendAnalyticsEventRequest): Promise<SendAnalyticsEventResponse>` — Use this method to track user interactions and page transitions.
549
+ - `setBackgroundColor(request: string): Promise<SetBackgroundColorResponse>` — Set the background color of the container header.
550
+ - `setTitle(request: string): Promise<SetTitleResponse>` — Set the title of the container header.
551
+ - `showBackButton(): Promise<ShowBackButtonResponse>` — Show the back button on the container header.
552
+ - `showLoader(): Promise<ShowLoaderResponse>` — Show the full-screen loading indicator.
553
+ - `showRefreshButton(): Promise<ShowRefreshButtonResponse>` — Show the refresh button on the container header.
554
554
 
555
555
  #### `DeviceModule`
556
556
  SDK module for querying native device information via `JSBridge`.
557
- - `isEsimSupported(): Promise<{ error: string; status_code: 403 } | { error: string; status_code: 500 } | { error: string; status_code: 501 } | { result: boolean; status_code: 200 } | { error: string; status_code: 424 } | { error: string; status_code: 426 }>` — Checks whether the current device supports eSIM. (**OAuth Scope:** mobile.device | **Minimum Grab App Version:** Android: 5.402.0, iOS: 5.402.0)
557
+ - `isEsimSupported(): Promise<IsEsimSupportedResponse>` — Checks whether the current device supports eSIM. (**OAuth Scope:** mobile.device | **Minimum Grab App Version:** Android: 5.402.0, iOS: 5.402.0)
558
558
 
559
559
  #### `FileModule`
560
560
  SDK module for downloading files to the user's device via `JSBridge`.
561
- - `downloadFile(request: { fileName: string; fileUrl: string }): Promise<{ status_code: 204 } | { error: string; status_code: 400 } | { error: string; status_code: 500 } | { error: string; status_code: 501 }>` — Downloads a file through `JSBridge`.
561
+ - `downloadFile(request: DownloadFileRequest): Promise<DownloadFileResponse>` — Downloads a file through `JSBridge`.
562
562
 
563
563
  #### `IdentityModule`
564
564
  SDK module for authenticating users with GrabID via `JSBridge`.
565
- - `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 } | { status_code: 302 } | { result: { code: string; codeVerifier: string; nonce: string; redirectUri: string; state: string }; status_code: 200 }>` — Initiates an OAuth2 authorization flow with PKCE (Proof Key for Code Exchange).
565
+ - `authorize(request: AuthorizeRequest): Promise<AuthorizeResponse>` — Initiates an OAuth2 authorization flow with PKCE (Proof Key for Code Exchange).
566
566
  This method handles both native in-app consent and web-based fallback flows.
567
- - `clearAuthorizationArtifacts(): Promise<{ status_code: 204 }>` — Clears all stored PKCE authorization artifacts from local storage.
567
+ - `clearAuthorizationArtifacts(): Promise<SDKNoContentResponse>` — Clears all stored PKCE authorization artifacts from local storage.
568
568
  This should be called after a successful token exchange or when you need to
569
569
  reset the authorization state (e.g., on error or logout).
570
- - `getAuthorizationArtifacts(): Promise<{ status_code: 204 } | { error: string; status_code: 400 } | { result: { codeVerifier: string; nonce: string; redirectUri: string; state: string }; status_code: 200 }>` — Retrieves stored PKCE authorization artifacts from local storage.
570
+ - `getAuthorizationArtifacts(): Promise<GetAuthorizationArtifactsResponse>` — Retrieves stored PKCE authorization artifacts from local storage.
571
571
  These artifacts are used to complete the OAuth2 authorization code exchange.
572
572
 
573
573
  #### `LocaleModule`
574
574
  SDK module for accessing device locale settings via `JSBridge`.
575
- - `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.
575
+ - `getLanguageLocaleIdentifier(): Promise<GetLanguageLocaleIdentifierResponse>` — Retrieves the current language locale identifier from the device.
576
576
 
577
577
  #### `LocationModule`
578
578
  SDK module for accessing device location services via `JSBridge`.
579
- - `getCoordinate(): Promise<{ error: string; status_code: 403 } | { error: string; status_code: 500 } | { error: string; status_code: 501 } | { error: string; status_code: 424 } | { result: { latitude: number; longitude: number }; status_code: 200 }>` — Get the current geographic coordinates of the device. (**OAuth Scope:** mobile.geolocation)
580
- - `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. (**OAuth Scope:** mobile.geolocation)
579
+ - `getCoordinate(): Promise<GetCoordinateResponse>` — Get the current geographic coordinates of the device. (**OAuth Scope:** mobile.geolocation)
580
+ - `getCountryCode(): Promise<GetCountryCodeResponse>` — Get the country code based on the device's current location. (**OAuth Scope:** mobile.geolocation)
581
581
  - `observeLocationChange(): ObserveLocationChangeResponse` — Subscribe to location change updates from the device. (**OAuth Scope:** mobile.geolocation)
582
582
 
583
583
  #### `Logger`
@@ -586,52 +586,52 @@ Provides scoped logging for SDK modules.
586
586
  #### `MediaModule`
587
587
  SDK module for playing DRM-protected media content via `JSBridge`.
588
588
  - `observePlayDRMContent(data: DRMContentConfig): ObserveDRMPlaybackResponse` — Observes DRM-protected media content playback events. (**OAuth Scope:** mobile.media)
589
- - `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. (**OAuth Scope:** mobile.media)
589
+ - `playDRMContent(data: DRMContentConfig): Promise<PlayDRMContentResponse>` — Plays DRM-protected media content in the native media player. (**OAuth Scope:** mobile.media)
590
590
 
591
591
  #### `NetworkModule`
592
592
  SDK module for making network requests through the native layer via `JSBridge`.
593
- - `send(request: { body?: unknown; endpoint: string; headers?: Record<string, string>; method: "GET" | "POST" | "PUT" | "DELETE" | "PATCH" | "HEAD" | "OPTIONS"; query?: Record<string, string>; timeout?: number }): 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: 404 } | { error: string; status_code: 424 } | { error: string; status_code: 426 } | { result: Record<string, unknown>; status_code: 200 } | { error: string; status_code: 401 }>` — Sends a network request through `JSBridge`.
593
+ - `send(request: SendRequest): Promise<SendResponse>` — Sends a network request through `JSBridge`.
594
594
 
595
595
  #### `PlatformModule`
596
596
  SDK module for controlling platform navigation via `JSBridge`.
597
- - `back(): Promise<{ status_code: 204 } | { error: string; status_code: 500 } | { error: string; status_code: 501 }>` — Triggers the native platform back navigation.
597
+ - `back(): Promise<BackResponse>` — Triggers the native platform back navigation.
598
598
  This navigates back in the native navigation stack.
599
599
 
600
600
  #### `ProfileModule`
601
601
  SDK module for accessing user profile information via `JSBridge`.
602
- - `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 } | { error: string; status_code: 426 } | { result: { email: string }; status_code: 200 }>` — Fetches the user's email address from their Grab profile. (**OAuth Scope:** mobile.profile | **Minimum Grab App Version:** Android: 5.399.0, iOS: 5.399.0)
603
- - `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. (**OAuth Scope:** mobile.profile | **Minimum Grab App Version:** Android: 5.399.0, iOS: 5.399.0)
602
+ - `fetchEmail(): Promise<FetchEmailResponse>` — Fetches the user's email address from their Grab profile. (**OAuth Scope:** mobile.profile | **Minimum Grab App Version:** Android: 5.399.0, iOS: 5.399.0)
603
+ - `verifyEmail(request?: VerifyEmailRequest): Promise<VerifyEmailResponse>` — Verifies the user's email address by triggering email capture bottom sheet and OTP verification. (**OAuth Scope:** mobile.profile | **Minimum Grab App Version:** Android: 5.399.0, iOS: 5.399.0)
604
604
 
605
605
  #### `ScopeModule`
606
606
  SDK module for checking and refreshing API access permissions via `JSBridge`.
607
- - `hasAccessTo(module: string, method: string): Promise<{ error: string; status_code: 400 } | { error: string; status_code: 500 } | { error: string; status_code: 501 } | { result: boolean; status_code: 200 } | { error: string; status_code: 424 }>` — Checks if the current client has access to a specific `JSBridge` API method.
608
- - `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.
607
+ - `hasAccessTo(module: string, method: string): Promise<HasAccessToResponse>` — Checks if the current client has access to a specific `JSBridge` API method.
608
+ - `reloadScopes(): Promise<ReloadScopesResponse>` — Requests to reload the consented OAuth scopes for the current client.
609
609
  This refreshes the permissions from the server.
610
610
 
611
611
  #### `SplashScreenModule`
612
612
  SDK module for controlling the native splash / Lottie loading screen via `JSBridge`.
613
- - `dismiss(): Promise<{ status_code: 204 } | { error: string; status_code: 400 } | { error: string; status_code: 403 } | { error: string; status_code: 500 } | { error: string; status_code: 501 }>` — Dismisses the native splash (Lottie) loading view if it is presented.
613
+ - `dismiss(): Promise<DismissSplashScreenResponse>` — Dismisses the native splash (Lottie) loading view if it is presented.
614
614
 
615
615
  #### `StorageModule`
616
616
  SDK module for persisting key-value data to native storage via `JSBridge`.
617
- - `getBoolean(key: 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 } | { error: string; status_code: 424 }>` — Retrieves a boolean value from the native storage. (**OAuth Scope:** mobile.storage)
618
- - `getDouble(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 } | { result: number; status_code: 200 }>` — Retrieves a double (floating point) value from the native storage. (**OAuth Scope:** mobile.storage)
619
- - `getInt(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 } | { result: number; status_code: 200 }>` — Retrieves an integer value from the native storage. (**OAuth Scope:** mobile.storage)
620
- - `getString(key: string): Promise<{ status_code: 204 } | { 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 }>` — Retrieves a string value from the native storage. (**OAuth Scope:** mobile.storage)
621
- - `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. (**OAuth Scope:** mobile.storage)
622
- - `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. (**OAuth Scope:** mobile.storage)
623
- - `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. (**OAuth Scope:** mobile.storage)
624
- - `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. (**OAuth Scope:** mobile.storage)
625
- - `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. (**OAuth Scope:** mobile.storage)
626
- - `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. (**OAuth Scope:** mobile.storage)
617
+ - `getBoolean(key: string): Promise<GetBooleanResponse>` — Retrieves a boolean value from the native storage. (**OAuth Scope:** mobile.storage)
618
+ - `getDouble(key: string): Promise<GetDoubleResponse>` — Retrieves a double (floating point) value from the native storage. (**OAuth Scope:** mobile.storage)
619
+ - `getInt(key: string): Promise<GetIntResponse>` — Retrieves an integer value from the native storage. (**OAuth Scope:** mobile.storage)
620
+ - `getString(key: string): Promise<GetStringResponse>` — Retrieves a string value from the native storage. (**OAuth Scope:** mobile.storage)
621
+ - `remove(key: string): Promise<RemoveResponse>` — Removes a single value from the native storage by key. (**OAuth Scope:** mobile.storage)
622
+ - `removeAll(): Promise<RemoveAllResponse>` — Removes all values from the native storage. (**OAuth Scope:** mobile.storage)
623
+ - `setBoolean(key: string, value: boolean): Promise<SetBooleanResponse>` — Stores a boolean value in the native storage. (**OAuth Scope:** mobile.storage)
624
+ - `setDouble(key: string, value: number): Promise<SetDoubleResponse>` — Stores a double (floating point) value in the native storage. (**OAuth Scope:** mobile.storage)
625
+ - `setInt(key: string, value: number): Promise<SetIntResponse>` — Stores an integer value in the native storage. (**OAuth Scope:** mobile.storage)
626
+ - `setString(key: string, value: string): Promise<SetStringResponse>` — Stores a string value in the native storage. (**OAuth Scope:** mobile.storage)
627
627
 
628
628
  #### `SystemWebViewKitModule`
629
629
  SDK module for opening URLs in the device's system browser via `JSBridge`.
630
- - `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.
630
+ - `redirectToSystemWebView(request: RedirectToSystemWebViewRequest): Promise<RedirectToSystemWebViewResponse>` — Opens a URL in the device's system web browser or web view.
631
631
 
632
632
  #### `UserAttributesModule`
633
633
  SDK module for reading user-related attributes from native code via `JSBridge`.
634
- - `getSelectedTravelDestination(): Promise<{ status_code: 204 } | { error: string; status_code: 500 } | { error: string; status_code: 501 } | { result: string; status_code: 200 }>` — Returns the currently selected travel destination as a lowercase ISO 3166-1 alpha-2 country code.
634
+ - `getSelectedTravelDestination(): Promise<GetSelectedTravelDestinationResponse>` — Returns the currently selected travel destination as a lowercase ISO 3166-1 alpha-2 country code.
635
635
 
636
636
  ### Functions
637
637