@mxenabled/web-widget-sdk
Advanced tools
Comparing version 0.0.9 to 0.0.10
@@ -198,2 +198,4 @@ define(['exports'], (function (exports) { 'use strict'; | ||
const sdkVersion = "0.0.10"; | ||
// This is an internal error. Thrown when we are decoding a post message's | ||
@@ -770,5 +772,3 @@ // metadata and we encountered a missing field or an invalid value. This | ||
this.messageCallback = (event) => { | ||
if (event.data.mx) { | ||
this.dispatcher(event, this.options); | ||
} | ||
this.handleMXPostMessage(event); | ||
}; | ||
@@ -834,2 +834,17 @@ if (typeof options.container === "string") { | ||
} | ||
handleMXPostMessage(event) { | ||
if (!event.data.mx) { | ||
return; | ||
} | ||
this.dispatcher(event, this.options); | ||
if (event.data.type === Type.Load) { | ||
this.postMessageToWidget({ | ||
type: "mx/sdk/info", | ||
metadata: { | ||
sdk: "web", | ||
version: sdkVersion, | ||
}, | ||
}); | ||
} | ||
} | ||
postMessageToWidget(payload) { | ||
@@ -836,0 +851,0 @@ if (!this.iframe.contentWindow) { |
@@ -1,1 +0,1 @@ | ||
define(["exports"],(function(e){"use strict";function t(e){return"clientId"in e&&"string"==typeof e.clientId&&"apiKey"in e&&"string"==typeof e.apiKey&&"userGuid"in e&&"string"==typeof e.userGuid&&"environment"in e&&"string"==typeof e.environment}class n extends Error{constructor(){super("Missing required widget props!\n\nComponent needs one of the following groups of props:\n\n - url\n\n - or -\n\n - proxy\n\n - or -\n\n - apiKey\n - clientId\n - environment\n - userGuid"),Object.setPrototypeOf(this,n.prototype)}}class i extends Error{constructor(e){super(`Request failed: ${e}`),this.statusCode=e,Object.setPrototypeOf(this,i.prototype)}}var s;!function(e){e.SAND="sand",e.QA="qa",e.INT="integration",e.PROD="production"}(s||(s={}));const r={[s.SAND]:s.SAND,[s.QA]:s.QA,[s.INT]:s.INT,[s.PROD]:s.PROD};const o={[s.SAND]:"https://api.sand.internal.mx",[s.QA]:"https://api.qa.internal.mx",[s.INT]:"https://int-api.mx.com",[s.PROD]:"https://api.mx.com"};function c(e){const t=function(e){const t=r[e];if(!t)throw new Error(`Invalid MX environment: ${e}`);return t}(e),n=o[t];if(!n)throw new Error(`Missing host for MX environment: ${e}`);return n}var a,u;function d(e){return{client_redirect_url:e.clientRedirectUrl,color_scheme:e.colorScheme,current_institution_code:e.currentInstitutionCode,current_institution_guid:e.currentInstitutionGuid,current_member_guid:e.currentMemberGuid,disable_institution_search:e.disableInstitutionSearch,include_transactions:e.includeTransactions,is_mobile_webview:e.isMobileWebview||!1,mode:e.mode,oauth_referral_source:e.oauthReferralSource,ui_message_version:e.uiMessageVersion||4,ui_message_webview_url_scheme:e.uiMessageWebviewUrlScheme,update_credentials:e.updateCredentials,widget_type:e.widgetType}}function g(e){return e.widget_url.url}function m(e){const i=function(e){if(function(e){return"proxy"in e&&"string"==typeof e.proxy}(e))return function(e){return e.proxy}(e);if(t(e))return function(e){const t=c(e.environment),n=e.userGuid;return`${t}/users/${n}/widget_urls`}(e);throw new n}(e),s=function(e){const n={Accept:"application/vnd.mx.api.v1+json","Content-Type":"application/json"};e.language&&(n["Accept-Language"]=e.language);if(t(e)){const{apiKey:t,clientId:i}=e,s=btoa(`${i}:${t}`);n.Authorization=`Basic ${s}`}const i="cors",s="POST",r=JSON.stringify({widget_url:d(e)});return{method:s,headers:n,body:r,mode:i}}(e);return{url:i,options:s}}function p(e){return e}function l(e){if(!e.ok)throw new i(e.status);return e.json()}function _(e){console.error(e)}!function(e){e.AccountsWidget="accounts_widget",e.BudgetsWidget="budgets_widget",e.ConnectWidget="connect_widget",e.ConnectionsWidget="connections_widget",e.DebtsWidget="debts_widget",e.FinstrongWidget="finstrong_widget",e.GoalsWidget="goals_widget",e.HelpWidget="help_widget",e.MasterWidget="master_widget",e.MiniBudgetsWidget="mini_budgets_widget",e.MiniFinstrongWidget="mini_finstrong_widget",e.MiniPulseCarouselWidget="mini_pulse_carousel_widget",e.MiniSpendingWidget="mini_spending_widget",e.PulseWidget="pulse_widget",e.SettingsWidget="settings_widget",e.SpendingWidget="spending_widget",e.TransactionsWidget="transactions_widget",e.TrendsWidget="trends_widget"}(a||(a={}));class C extends Error{messageType;field;expectedType;gotValue;constructor(e,t,n,i){super(`Unable to decode '${t}' from '${e}'`),this.messageType=e,this.field=t,this.expectedType=n,this.gotValue=i,Object.setPrototypeOf(this,C.prototype)}}class h extends Error{postMessageType;constructor(e){super(`Unknown post message: ${e}`),this.postMessageType=e,Object.setPrototypeOf(this,h.prototype)}}function b(e,t,n,i,s={}){const r=e[n],o=void 0!==r,c="string"==typeof r,a="number"==typeof r,u="object"==typeof r&&!Array.isArray(r),d="boolean"==typeof r,g="string"===i,m="number"===i,p=i instanceof Array,l="object"==typeof i&&!Array.isArray(i),_="boolean"===i;if(o||!s.optional){if(!o)throw new C(t,n,i,r);if(g&&!c)throw new C(t,n,i,r);if(m&&!a)throw new C(t,n,i,r);if(!(!p||c&&i.includes(r)))throw new C(t,n,i,r);if(l&&!u)throw new C(t,n,i,r);if(_&&!d)throw new C(t,n,i,r);l&&u&&Object.keys(i).forEach((e=>{b(r,t,e,i[e])}))}}!function(e){e.Load="mx/load",e.Ping="mx/ping",e.Navigation="mx/navigation",e.FocusTrap="mx/focusTrap",e.ClientOAuthComplete="mx/client/oauthComplete",e.ConnectLoaded="mx/connect/loaded",e.ConnectEnterCredentials="mx/connect/enterCredentials",e.ConnectInstitutionSearch="mx/connect/institutionSearch",e.ConnectSelectedInstitution="mx/connect/selectedInstitution",e.ConnectMemberConnected="mx/connect/memberConnected",e.ConnectConnectedPrimaryAction="mx/connect/connected/primaryAction",e.ConnectMemberDeleted="mx/connect/memberDeleted",e.ConnectCreateMemberError="mx/connect/createMemberError",e.ConnectMemberStatusUpdate="mx/connect/memberStatusUpdate",e.ConnectOAuthError="mx/connect/oauthError",e.ConnectOAuthRequested="mx/connect/oauthRequested",e.ConnectStepChange="mx/connect/stepChange",e.ConnectSubmitMFA="mx/connect/submitMFA",e.ConnectUpdateCredentials="mx/connect/updateCredentials",e.PulseOverdraftWarningCtaTransferFunds="mx/pulse/overdraftWarning/cta/transferFunds",e.AccountCreated="mx/account/created"}(u||(u={}));const f={[u.Load]:u.Load,[u.Ping]:u.Ping,[u.Navigation]:u.Navigation,[u.FocusTrap]:u.FocusTrap,"mx/focustrap":u.FocusTrap,[u.ClientOAuthComplete]:u.ClientOAuthComplete,"mx/client/oauthcomplete":u.ClientOAuthComplete,[u.ConnectLoaded]:u.ConnectLoaded,[u.ConnectEnterCredentials]:u.ConnectEnterCredentials,"mx/connect/entercredentials":u.ConnectEnterCredentials,[u.ConnectInstitutionSearch]:u.ConnectInstitutionSearch,"mx/connect/institutionsearch":u.ConnectInstitutionSearch,[u.ConnectSelectedInstitution]:u.ConnectSelectedInstitution,"mx/connect/selectedinstitution":u.ConnectSelectedInstitution,[u.ConnectMemberConnected]:u.ConnectMemberConnected,"mx/connect/memberconnected":u.ConnectMemberConnected,[u.ConnectConnectedPrimaryAction]:u.ConnectConnectedPrimaryAction,"mx/connect/connected/primaryaction":u.ConnectConnectedPrimaryAction,[u.ConnectMemberDeleted]:u.ConnectMemberDeleted,"mx/connect/memberdeleted":u.ConnectMemberDeleted,[u.ConnectCreateMemberError]:u.ConnectCreateMemberError,"mx/connect/createmembererror":u.ConnectCreateMemberError,[u.ConnectMemberStatusUpdate]:u.ConnectMemberStatusUpdate,"mx/connect/memberstatusupdate":u.ConnectMemberStatusUpdate,[u.ConnectOAuthError]:u.ConnectOAuthError,"mx/connect/oautherror":u.ConnectOAuthError,[u.ConnectOAuthRequested]:u.ConnectOAuthRequested,"mx/connect/oauthrequested":u.ConnectOAuthRequested,[u.ConnectStepChange]:u.ConnectStepChange,"mx/connect/stepchange":u.ConnectStepChange,[u.ConnectSubmitMFA]:u.ConnectSubmitMFA,"mx/connect/submitmfa":u.ConnectSubmitMFA,[u.ConnectUpdateCredentials]:u.ConnectUpdateCredentials,"mx/connect/updatecredentials":u.ConnectUpdateCredentials,[u.PulseOverdraftWarningCtaTransferFunds]:u.PulseOverdraftWarningCtaTransferFunds,"mx/pulse/overdraftwarning/cta/transferfunds":u.PulseOverdraftWarningCtaTransferFunds,[u.AccountCreated]:u.AccountCreated};function x(e){const t=e.type||"type not provided";let n;if(!t||!(t in f))throw new h(t);n=f[t];const i=function(e,t){switch(e){case u.Load:return{type:e};case u.Ping:return b(t,"mx/ping","user_guid","string"),b(t,"mx/ping","session_guid","string"),{type:e,user_guid:t.user_guid,session_guid:t.session_guid};case u.Navigation:return b(t,"mx/navigation","user_guid","string"),b(t,"mx/navigation","session_guid","string"),b(t,"mx/navigation","did_go_back","boolean"),{type:e,user_guid:t.user_guid,session_guid:t.session_guid,did_go_back:t.did_go_back};case u.FocusTrap:return b(t,"mx/focusTrap","user_guid","string"),b(t,"mx/focusTrap","session_guid","string"),{type:e,user_guid:t.user_guid,session_guid:t.session_guid};case u.ClientOAuthComplete:return b(t,"mx/client/oauthComplete","url","string"),{type:e,url:t.url};case u.ConnectLoaded:return b(t,"mx/connect/loaded","user_guid","string"),b(t,"mx/connect/loaded","session_guid","string"),b(t,"mx/connect/loaded","initial_step",["search","selectMember","enterCreds","mfa","connected","loginError","disclosure"]),{type:e,user_guid:t.user_guid,session_guid:t.session_guid,initial_step:t.initial_step};case u.ConnectEnterCredentials:return b(t,"mx/connect/enterCredentials","user_guid","string"),b(t,"mx/connect/enterCredentials","session_guid","string"),b(t,"mx/connect/enterCredentials","institution",{code:"string",guid:"string"}),{type:e,user_guid:t.user_guid,session_guid:t.session_guid,institution:t.institution};case u.ConnectInstitutionSearch:return b(t,"mx/connect/institutionSearch","user_guid","string"),b(t,"mx/connect/institutionSearch","session_guid","string"),b(t,"mx/connect/institutionSearch","query","string"),{type:e,user_guid:t.user_guid,session_guid:t.session_guid,query:t.query};case u.ConnectSelectedInstitution:return b(t,"mx/connect/selectedInstitution","user_guid","string"),b(t,"mx/connect/selectedInstitution","session_guid","string"),b(t,"mx/connect/selectedInstitution","code","string"),b(t,"mx/connect/selectedInstitution","guid","string"),b(t,"mx/connect/selectedInstitution","name","string"),b(t,"mx/connect/selectedInstitution","url","string"),{type:e,user_guid:t.user_guid,session_guid:t.session_guid,code:t.code,guid:t.guid,name:t.name,url:t.url};case u.ConnectMemberConnected:return b(t,"mx/connect/memberConnected","user_guid","string"),b(t,"mx/connect/memberConnected","session_guid","string"),b(t,"mx/connect/memberConnected","member_guid","string"),{type:e,user_guid:t.user_guid,session_guid:t.session_guid,member_guid:t.member_guid};case u.ConnectConnectedPrimaryAction:return b(t,"mx/connect/connected/primaryAction","user_guid","string"),b(t,"mx/connect/connected/primaryAction","session_guid","string"),{type:e,user_guid:t.user_guid,session_guid:t.session_guid};case u.ConnectMemberDeleted:return b(t,"mx/connect/memberDeleted","user_guid","string"),b(t,"mx/connect/memberDeleted","session_guid","string"),b(t,"mx/connect/memberDeleted","member_guid","string"),{type:e,user_guid:t.user_guid,session_guid:t.session_guid,member_guid:t.member_guid};case u.ConnectCreateMemberError:return b(t,"mx/connect/createMemberError","user_guid","string"),b(t,"mx/connect/createMemberError","session_guid","string"),b(t,"mx/connect/createMemberError","institution_guid","string"),b(t,"mx/connect/createMemberError","institution_code","string"),{type:e,user_guid:t.user_guid,session_guid:t.session_guid,institution_guid:t.institution_guid,institution_code:t.institution_code};case u.ConnectMemberStatusUpdate:return b(t,"mx/connect/memberStatusUpdate","user_guid","string"),b(t,"mx/connect/memberStatusUpdate","session_guid","string"),b(t,"mx/connect/memberStatusUpdate","member_guid","string"),b(t,"mx/connect/memberStatusUpdate","connection_status","number"),{type:e,user_guid:t.user_guid,session_guid:t.session_guid,member_guid:t.member_guid,connection_status:t.connection_status};case u.ConnectOAuthError:return b(t,"mx/connect/oauthError","user_guid","string"),b(t,"mx/connect/oauthError","session_guid","string"),b(t,"mx/connect/oauthError","member_guid","string",{optional:!0}),{type:e,user_guid:t.user_guid,session_guid:t.session_guid,member_guid:t.member_guid};case u.ConnectOAuthRequested:return b(t,"mx/connect/oauthRequested","user_guid","string"),b(t,"mx/connect/oauthRequested","session_guid","string"),b(t,"mx/connect/oauthRequested","url","string"),b(t,"mx/connect/oauthRequested","member_guid","string"),{type:e,user_guid:t.user_guid,session_guid:t.session_guid,url:t.url,member_guid:t.member_guid};case u.ConnectStepChange:return b(t,"mx/connect/stepChange","user_guid","string"),b(t,"mx/connect/stepChange","session_guid","string"),b(t,"mx/connect/stepChange","previous","string"),b(t,"mx/connect/stepChange","current","string"),{type:e,user_guid:t.user_guid,session_guid:t.session_guid,previous:t.previous,current:t.current};case u.ConnectSubmitMFA:return b(t,"mx/connect/submitMFA","user_guid","string"),b(t,"mx/connect/submitMFA","session_guid","string"),b(t,"mx/connect/submitMFA","member_guid","string"),{type:e,user_guid:t.user_guid,session_guid:t.session_guid,member_guid:t.member_guid};case u.ConnectUpdateCredentials:return b(t,"mx/connect/updateCredentials","user_guid","string"),b(t,"mx/connect/updateCredentials","session_guid","string"),b(t,"mx/connect/updateCredentials","member_guid","string"),b(t,"mx/connect/updateCredentials","institution",{code:"string",guid:"string"}),{type:e,user_guid:t.user_guid,session_guid:t.session_guid,member_guid:t.member_guid,institution:t.institution};case u.PulseOverdraftWarningCtaTransferFunds:return b(t,"mx/pulse/overdraftWarning/cta/transferFunds","account_guid","string"),b(t,"mx/pulse/overdraftWarning/cta/transferFunds","amount","number"),{type:e,account_guid:t.account_guid,amount:t.amount};case u.AccountCreated:return b(t,"mx/account/created","guid","string"),{type:e,guid:t.guid};default:throw new h(e)}}(n,e.metadata||{});return i}function y(e,t,n){if(t instanceof C)n.onInvalidMessageError?.(e,t);else{if(!(t instanceof h))throw t;n.onInvalidMessageError?.(e,t)}}function w(e,t){t.onMessage?.(e)}function M(e,t){try{w(e,t);!function(e,t){switch(e.type){case u.Load:t.onLoad?.(e);break;case u.Ping:t.onPing?.(e);break;case u.Navigation:t.onNavigation?.(e);break;case u.FocusTrap:t.onFocusTrap?.(e);break;case u.AccountCreated:t.onAccountCreated?.(e);break;default:throw new h(e.type)}}(x(e.data),t)}catch(n){y(e,n,t)}}function W(e,t){try{w(e,t);!function(e,t){switch(e.type){case u.Load:t.onLoad?.(e);break;case u.Ping:t.onPing?.(e);break;case u.Navigation:t.onNavigation?.(e);break;case u.FocusTrap:t.onFocusTrap?.(e);break;case u.AccountCreated:t.onAccountCreated?.(e);break;case u.ConnectLoaded:t.onLoaded?.(e);break;case u.ConnectEnterCredentials:t.onEnterCredentials?.(e);break;case u.ConnectInstitutionSearch:t.onInstitutionSearch?.(e);break;case u.ConnectSelectedInstitution:t.onSelectedInstitution?.(e);break;case u.ConnectMemberConnected:t.onMemberConnected?.(e);break;case u.ConnectConnectedPrimaryAction:t.onConnectedPrimaryAction?.(e);break;case u.ConnectMemberDeleted:t.onMemberDeleted?.(e);break;case u.ConnectCreateMemberError:t.onCreateMemberError?.(e);break;case u.ConnectMemberStatusUpdate:t.onMemberStatusUpdate?.(e);break;case u.ConnectOAuthError:t.onOAuthError?.(e);break;case u.ConnectOAuthRequested:t.onOAuthRequested?.(e);break;case u.ConnectStepChange:t.onStepChange?.(e);break;case u.ConnectSubmitMFA:t.onSubmitMFA?.(e);break;case u.ConnectUpdateCredentials:t.onUpdateCredentials?.(e);break;default:throw new h(e.type)}}(x(e.data),t)}catch(n){y(e,n,t)}}function A(e,t){try{w(e,t);!function(e,t){switch(e.type){case u.Load:t.onLoad?.(e);break;case u.Ping:t.onPing?.(e);break;case u.Navigation:t.onNavigation?.(e);break;case u.FocusTrap:t.onFocusTrap?.(e);break;case u.AccountCreated:t.onAccountCreated?.(e);break;case u.PulseOverdraftWarningCtaTransferFunds:t.onOverdraftWarningCtaTransferFunds?.(e);break;default:throw new h(e.type)}}(x(e.data),t)}catch(n){y(e,n,t)}}class v{constructor(e){if(this.isUnmounting=!1,this.options=e,this.iframe=document.createElement("iframe"),this.style=e.style||{border:"none",height:"550px",width:"320px"},this.messageCallback=e=>{e.data.mx&&this.dispatcher(e,this.options)},"string"==typeof e.container){const t=document.querySelector(e.container);if(!t)throw new Error(`Unable to find widget container. Ensure that an element matching a selector for '${this.options.container}' is available in the DOM before you initialize the widget.`);this.container=t}else{if(!(e.container instanceof Element))throw new Error("Invalid or missing value for container property, expecting a query selector string or a DOM Element.");this.container=e.container}this.setupIframe(),this.setupListener()}get widgetType(){if(this.options.widgetType)return this.options.widgetType;throw new Error("Missing value for widgetType property, expecting a string (eg. connect_widget).")}get dispatcher(){return M}navigateBack(){return new Promise((e=>{const t=this.iframe.contentWindow,n={mx:!0,type:u.Navigation,payload:{action:"back"}};if(!t)throw new Error("Unable to navigate back, iframe element is not available.");const i=t=>{t.data.type===u.Navigation&&(window.removeEventListener("message",i),e(t.data.metadata.did_go_back))};window.addEventListener("message",i,!1),t.postMessage(JSON.stringify(n),this.targetOrigin)}))}ping(){this.postMessageToWidget({type:"ping"})}unmount(){this.isUnmounting=!0,this.teardownListener(),this.teardownIframe()}get targetOrigin(){var e;const t=/^https?:\/\/[^/]+/i;let n;return this.ssoUrl&&this.ssoUrl.match(t)&&(n=null===(e=this.ssoUrl.match(t))||void 0===e?void 0:e[0]),n||"https://widgets.moneydesktop.com"}postMessageToWidget(e){if(!this.iframe.contentWindow)throw new Error("Unable to postMessage to widget, iframe doesn't exist");this.iframe.contentWindow.postMessage(JSON.stringify(e),this.targetOrigin)}setupIframe(){(function(e){if(function(e){return"url"in e&&"string"==typeof e.url}(e))return Promise.resolve(e.url);const t=e.ssoRequestBuilder||m,n=e.ssoRequestPreprocess||p,i=e.ssoRequestPostprocess||g,s=e.onSsoUrlLoadError||_,r=n(t(e));return fetch(r.url,r.options).then(l).then(i).catch(s)})(Object.assign(Object.assign({},this.options),{widgetType:this.widgetType})).then((e=>{!this.isUnmounting&&e&&(this.ssoUrl=e,this.iframe.setAttribute("data-test-id","mx-widget-iframe"),this.iframe.setAttribute("title",this.options.iframeTitle||"Widget Iframe"),this.iframe.setAttribute("src",e),Object.keys(this.style).forEach((e=>{this.iframe.style[e]=this.style[e]})),this.container.appendChild(this.iframe))}))}teardownIframe(){this.container.contains(this.iframe)&&this.container.removeChild(this.iframe)}setupListener(){window.addEventListener("message",this.messageCallback,!1)}teardownListener(){window.removeEventListener("message",this.messageCallback,!1)}}e.AccountsWidget=class extends v{get widgetType(){return a.AccountsWidget}},e.BudgetsWidget=class extends v{get widgetType(){return a.BudgetsWidget}},e.ConnectWidget=class extends v{get widgetType(){return a.ConnectWidget}get dispatcher(){return W}},e.ConnectionsWidget=class extends v{get widgetType(){return a.ConnectionsWidget}},e.DebtsWidget=class extends v{get widgetType(){return a.DebtsWidget}},e.FinstrongWidget=class extends v{get widgetType(){return a.FinstrongWidget}},e.GoalsWidget=class extends v{get widgetType(){return a.GoalsWidget}},e.HelpWidget=class extends v{get widgetType(){return a.HelpWidget}},e.MasterWidget=class extends v{get widgetType(){return a.MasterWidget}},e.MiniBudgetsWidget=class extends v{get widgetType(){return a.MiniBudgetsWidget}},e.MiniFinstrongWidget=class extends v{get widgetType(){return a.MiniFinstrongWidget}},e.MiniPulseCarouselWidget=class extends v{get widgetType(){return a.MiniPulseCarouselWidget}get dispatcher(){return A}},e.MiniSpendingWidget=class extends v{get widgetType(){return a.MiniSpendingWidget}},e.PulseWidget=class extends v{get widgetType(){return a.PulseWidget}get dispatcher(){return A}},e.SettingsWidget=class extends v{get widgetType(){return a.SettingsWidget}},e.SpendingWidget=class extends v{get widgetType(){return a.SpendingWidget}},e.TransactionsWidget=class extends v{get widgetType(){return a.TransactionsWidget}},e.TrendsWidget=class extends v{get widgetType(){return a.TrendsWidget}},e.Widget=v,Object.defineProperty(e,"__esModule",{value:!0})})); | ||
define(["exports"],(function(e){"use strict";function t(e){return"clientId"in e&&"string"==typeof e.clientId&&"apiKey"in e&&"string"==typeof e.apiKey&&"userGuid"in e&&"string"==typeof e.userGuid&&"environment"in e&&"string"==typeof e.environment}class n extends Error{constructor(){super("Missing required widget props!\n\nComponent needs one of the following groups of props:\n\n - url\n\n - or -\n\n - proxy\n\n - or -\n\n - apiKey\n - clientId\n - environment\n - userGuid"),Object.setPrototypeOf(this,n.prototype)}}class i extends Error{constructor(e){super(`Request failed: ${e}`),this.statusCode=e,Object.setPrototypeOf(this,i.prototype)}}var s;!function(e){e.SAND="sand",e.QA="qa",e.INT="integration",e.PROD="production"}(s||(s={}));const r={[s.SAND]:s.SAND,[s.QA]:s.QA,[s.INT]:s.INT,[s.PROD]:s.PROD};const o={[s.SAND]:"https://api.sand.internal.mx",[s.QA]:"https://api.qa.internal.mx",[s.INT]:"https://int-api.mx.com",[s.PROD]:"https://api.mx.com"};function c(e){const t=function(e){const t=r[e];if(!t)throw new Error(`Invalid MX environment: ${e}`);return t}(e),n=o[t];if(!n)throw new Error(`Missing host for MX environment: ${e}`);return n}var a;function u(e){return{client_redirect_url:e.clientRedirectUrl,color_scheme:e.colorScheme,current_institution_code:e.currentInstitutionCode,current_institution_guid:e.currentInstitutionGuid,current_member_guid:e.currentMemberGuid,disable_institution_search:e.disableInstitutionSearch,include_transactions:e.includeTransactions,is_mobile_webview:e.isMobileWebview||!1,mode:e.mode,oauth_referral_source:e.oauthReferralSource,ui_message_version:e.uiMessageVersion||4,ui_message_webview_url_scheme:e.uiMessageWebviewUrlScheme,update_credentials:e.updateCredentials,widget_type:e.widgetType}}function d(e){return e.widget_url.url}function g(e){const i=function(e){if(function(e){return"proxy"in e&&"string"==typeof e.proxy}(e))return function(e){return e.proxy}(e);if(t(e))return function(e){const t=c(e.environment),n=e.userGuid;return`${t}/users/${n}/widget_urls`}(e);throw new n}(e),s=function(e){const n={Accept:"application/vnd.mx.api.v1+json","Content-Type":"application/json"};e.language&&(n["Accept-Language"]=e.language);if(t(e)){const{apiKey:t,clientId:i}=e,s=btoa(`${i}:${t}`);n.Authorization=`Basic ${s}`}const i="cors",s="POST",r=JSON.stringify({widget_url:u(e)});return{method:s,headers:n,body:r,mode:i}}(e);return{url:i,options:s}}function m(e){return e}function p(e){if(!e.ok)throw new i(e.status);return e.json()}function l(e){console.error(e)}!function(e){e.AccountsWidget="accounts_widget",e.BudgetsWidget="budgets_widget",e.ConnectWidget="connect_widget",e.ConnectionsWidget="connections_widget",e.DebtsWidget="debts_widget",e.FinstrongWidget="finstrong_widget",e.GoalsWidget="goals_widget",e.HelpWidget="help_widget",e.MasterWidget="master_widget",e.MiniBudgetsWidget="mini_budgets_widget",e.MiniFinstrongWidget="mini_finstrong_widget",e.MiniPulseCarouselWidget="mini_pulse_carousel_widget",e.MiniSpendingWidget="mini_spending_widget",e.PulseWidget="pulse_widget",e.SettingsWidget="settings_widget",e.SpendingWidget="spending_widget",e.TransactionsWidget="transactions_widget",e.TrendsWidget="trends_widget"}(a||(a={}));class _ extends Error{messageType;field;expectedType;gotValue;constructor(e,t,n,i){super(`Unable to decode '${t}' from '${e}'`),this.messageType=e,this.field=t,this.expectedType=n,this.gotValue=i,Object.setPrototypeOf(this,_.prototype)}}class C extends Error{postMessageType;constructor(e){super(`Unknown post message: ${e}`),this.postMessageType=e,Object.setPrototypeOf(this,C.prototype)}}function h(e,t,n,i,s={}){const r=e[n],o=void 0!==r,c="string"==typeof r,a="number"==typeof r,u="object"==typeof r&&!Array.isArray(r),d="boolean"==typeof r,g="string"===i,m="number"===i,p=i instanceof Array,l="object"==typeof i&&!Array.isArray(i),C="boolean"===i;if(o||!s.optional){if(!o)throw new _(t,n,i,r);if(g&&!c)throw new _(t,n,i,r);if(m&&!a)throw new _(t,n,i,r);if(!(!p||c&&i.includes(r)))throw new _(t,n,i,r);if(l&&!u)throw new _(t,n,i,r);if(C&&!d)throw new _(t,n,i,r);l&&u&&Object.keys(i).forEach((e=>{h(r,t,e,i[e])}))}}var b;!function(e){e.Load="mx/load",e.Ping="mx/ping",e.Navigation="mx/navigation",e.FocusTrap="mx/focusTrap",e.ClientOAuthComplete="mx/client/oauthComplete",e.ConnectLoaded="mx/connect/loaded",e.ConnectEnterCredentials="mx/connect/enterCredentials",e.ConnectInstitutionSearch="mx/connect/institutionSearch",e.ConnectSelectedInstitution="mx/connect/selectedInstitution",e.ConnectMemberConnected="mx/connect/memberConnected",e.ConnectConnectedPrimaryAction="mx/connect/connected/primaryAction",e.ConnectMemberDeleted="mx/connect/memberDeleted",e.ConnectCreateMemberError="mx/connect/createMemberError",e.ConnectMemberStatusUpdate="mx/connect/memberStatusUpdate",e.ConnectOAuthError="mx/connect/oauthError",e.ConnectOAuthRequested="mx/connect/oauthRequested",e.ConnectStepChange="mx/connect/stepChange",e.ConnectSubmitMFA="mx/connect/submitMFA",e.ConnectUpdateCredentials="mx/connect/updateCredentials",e.PulseOverdraftWarningCtaTransferFunds="mx/pulse/overdraftWarning/cta/transferFunds",e.AccountCreated="mx/account/created"}(b||(b={}));const f={[b.Load]:b.Load,[b.Ping]:b.Ping,[b.Navigation]:b.Navigation,[b.FocusTrap]:b.FocusTrap,"mx/focustrap":b.FocusTrap,[b.ClientOAuthComplete]:b.ClientOAuthComplete,"mx/client/oauthcomplete":b.ClientOAuthComplete,[b.ConnectLoaded]:b.ConnectLoaded,[b.ConnectEnterCredentials]:b.ConnectEnterCredentials,"mx/connect/entercredentials":b.ConnectEnterCredentials,[b.ConnectInstitutionSearch]:b.ConnectInstitutionSearch,"mx/connect/institutionsearch":b.ConnectInstitutionSearch,[b.ConnectSelectedInstitution]:b.ConnectSelectedInstitution,"mx/connect/selectedinstitution":b.ConnectSelectedInstitution,[b.ConnectMemberConnected]:b.ConnectMemberConnected,"mx/connect/memberconnected":b.ConnectMemberConnected,[b.ConnectConnectedPrimaryAction]:b.ConnectConnectedPrimaryAction,"mx/connect/connected/primaryaction":b.ConnectConnectedPrimaryAction,[b.ConnectMemberDeleted]:b.ConnectMemberDeleted,"mx/connect/memberdeleted":b.ConnectMemberDeleted,[b.ConnectCreateMemberError]:b.ConnectCreateMemberError,"mx/connect/createmembererror":b.ConnectCreateMemberError,[b.ConnectMemberStatusUpdate]:b.ConnectMemberStatusUpdate,"mx/connect/memberstatusupdate":b.ConnectMemberStatusUpdate,[b.ConnectOAuthError]:b.ConnectOAuthError,"mx/connect/oautherror":b.ConnectOAuthError,[b.ConnectOAuthRequested]:b.ConnectOAuthRequested,"mx/connect/oauthrequested":b.ConnectOAuthRequested,[b.ConnectStepChange]:b.ConnectStepChange,"mx/connect/stepchange":b.ConnectStepChange,[b.ConnectSubmitMFA]:b.ConnectSubmitMFA,"mx/connect/submitmfa":b.ConnectSubmitMFA,[b.ConnectUpdateCredentials]:b.ConnectUpdateCredentials,"mx/connect/updatecredentials":b.ConnectUpdateCredentials,[b.PulseOverdraftWarningCtaTransferFunds]:b.PulseOverdraftWarningCtaTransferFunds,"mx/pulse/overdraftwarning/cta/transferfunds":b.PulseOverdraftWarningCtaTransferFunds,[b.AccountCreated]:b.AccountCreated};function x(e){const t=e.type||"type not provided";let n;if(!t||!(t in f))throw new C(t);n=f[t];const i=function(e,t){switch(e){case b.Load:return{type:e};case b.Ping:return h(t,"mx/ping","user_guid","string"),h(t,"mx/ping","session_guid","string"),{type:e,user_guid:t.user_guid,session_guid:t.session_guid};case b.Navigation:return h(t,"mx/navigation","user_guid","string"),h(t,"mx/navigation","session_guid","string"),h(t,"mx/navigation","did_go_back","boolean"),{type:e,user_guid:t.user_guid,session_guid:t.session_guid,did_go_back:t.did_go_back};case b.FocusTrap:return h(t,"mx/focusTrap","user_guid","string"),h(t,"mx/focusTrap","session_guid","string"),{type:e,user_guid:t.user_guid,session_guid:t.session_guid};case b.ClientOAuthComplete:return h(t,"mx/client/oauthComplete","url","string"),{type:e,url:t.url};case b.ConnectLoaded:return h(t,"mx/connect/loaded","user_guid","string"),h(t,"mx/connect/loaded","session_guid","string"),h(t,"mx/connect/loaded","initial_step",["search","selectMember","enterCreds","mfa","connected","loginError","disclosure"]),{type:e,user_guid:t.user_guid,session_guid:t.session_guid,initial_step:t.initial_step};case b.ConnectEnterCredentials:return h(t,"mx/connect/enterCredentials","user_guid","string"),h(t,"mx/connect/enterCredentials","session_guid","string"),h(t,"mx/connect/enterCredentials","institution",{code:"string",guid:"string"}),{type:e,user_guid:t.user_guid,session_guid:t.session_guid,institution:t.institution};case b.ConnectInstitutionSearch:return h(t,"mx/connect/institutionSearch","user_guid","string"),h(t,"mx/connect/institutionSearch","session_guid","string"),h(t,"mx/connect/institutionSearch","query","string"),{type:e,user_guid:t.user_guid,session_guid:t.session_guid,query:t.query};case b.ConnectSelectedInstitution:return h(t,"mx/connect/selectedInstitution","user_guid","string"),h(t,"mx/connect/selectedInstitution","session_guid","string"),h(t,"mx/connect/selectedInstitution","code","string"),h(t,"mx/connect/selectedInstitution","guid","string"),h(t,"mx/connect/selectedInstitution","name","string"),h(t,"mx/connect/selectedInstitution","url","string"),{type:e,user_guid:t.user_guid,session_guid:t.session_guid,code:t.code,guid:t.guid,name:t.name,url:t.url};case b.ConnectMemberConnected:return h(t,"mx/connect/memberConnected","user_guid","string"),h(t,"mx/connect/memberConnected","session_guid","string"),h(t,"mx/connect/memberConnected","member_guid","string"),{type:e,user_guid:t.user_guid,session_guid:t.session_guid,member_guid:t.member_guid};case b.ConnectConnectedPrimaryAction:return h(t,"mx/connect/connected/primaryAction","user_guid","string"),h(t,"mx/connect/connected/primaryAction","session_guid","string"),{type:e,user_guid:t.user_guid,session_guid:t.session_guid};case b.ConnectMemberDeleted:return h(t,"mx/connect/memberDeleted","user_guid","string"),h(t,"mx/connect/memberDeleted","session_guid","string"),h(t,"mx/connect/memberDeleted","member_guid","string"),{type:e,user_guid:t.user_guid,session_guid:t.session_guid,member_guid:t.member_guid};case b.ConnectCreateMemberError:return h(t,"mx/connect/createMemberError","user_guid","string"),h(t,"mx/connect/createMemberError","session_guid","string"),h(t,"mx/connect/createMemberError","institution_guid","string"),h(t,"mx/connect/createMemberError","institution_code","string"),{type:e,user_guid:t.user_guid,session_guid:t.session_guid,institution_guid:t.institution_guid,institution_code:t.institution_code};case b.ConnectMemberStatusUpdate:return h(t,"mx/connect/memberStatusUpdate","user_guid","string"),h(t,"mx/connect/memberStatusUpdate","session_guid","string"),h(t,"mx/connect/memberStatusUpdate","member_guid","string"),h(t,"mx/connect/memberStatusUpdate","connection_status","number"),{type:e,user_guid:t.user_guid,session_guid:t.session_guid,member_guid:t.member_guid,connection_status:t.connection_status};case b.ConnectOAuthError:return h(t,"mx/connect/oauthError","user_guid","string"),h(t,"mx/connect/oauthError","session_guid","string"),h(t,"mx/connect/oauthError","member_guid","string",{optional:!0}),{type:e,user_guid:t.user_guid,session_guid:t.session_guid,member_guid:t.member_guid};case b.ConnectOAuthRequested:return h(t,"mx/connect/oauthRequested","user_guid","string"),h(t,"mx/connect/oauthRequested","session_guid","string"),h(t,"mx/connect/oauthRequested","url","string"),h(t,"mx/connect/oauthRequested","member_guid","string"),{type:e,user_guid:t.user_guid,session_guid:t.session_guid,url:t.url,member_guid:t.member_guid};case b.ConnectStepChange:return h(t,"mx/connect/stepChange","user_guid","string"),h(t,"mx/connect/stepChange","session_guid","string"),h(t,"mx/connect/stepChange","previous","string"),h(t,"mx/connect/stepChange","current","string"),{type:e,user_guid:t.user_guid,session_guid:t.session_guid,previous:t.previous,current:t.current};case b.ConnectSubmitMFA:return h(t,"mx/connect/submitMFA","user_guid","string"),h(t,"mx/connect/submitMFA","session_guid","string"),h(t,"mx/connect/submitMFA","member_guid","string"),{type:e,user_guid:t.user_guid,session_guid:t.session_guid,member_guid:t.member_guid};case b.ConnectUpdateCredentials:return h(t,"mx/connect/updateCredentials","user_guid","string"),h(t,"mx/connect/updateCredentials","session_guid","string"),h(t,"mx/connect/updateCredentials","member_guid","string"),h(t,"mx/connect/updateCredentials","institution",{code:"string",guid:"string"}),{type:e,user_guid:t.user_guid,session_guid:t.session_guid,member_guid:t.member_guid,institution:t.institution};case b.PulseOverdraftWarningCtaTransferFunds:return h(t,"mx/pulse/overdraftWarning/cta/transferFunds","account_guid","string"),h(t,"mx/pulse/overdraftWarning/cta/transferFunds","amount","number"),{type:e,account_guid:t.account_guid,amount:t.amount};case b.AccountCreated:return h(t,"mx/account/created","guid","string"),{type:e,guid:t.guid};default:throw new C(e)}}(n,e.metadata||{});return i}function y(e,t,n){if(t instanceof _)n.onInvalidMessageError?.(e,t);else{if(!(t instanceof C))throw t;n.onInvalidMessageError?.(e,t)}}function w(e,t){t.onMessage?.(e)}function M(e,t){try{w(e,t);!function(e,t){switch(e.type){case b.Load:t.onLoad?.(e);break;case b.Ping:t.onPing?.(e);break;case b.Navigation:t.onNavigation?.(e);break;case b.FocusTrap:t.onFocusTrap?.(e);break;case b.AccountCreated:t.onAccountCreated?.(e);break;default:throw new C(e.type)}}(x(e.data),t)}catch(n){y(e,n,t)}}function W(e,t){try{w(e,t);!function(e,t){switch(e.type){case b.Load:t.onLoad?.(e);break;case b.Ping:t.onPing?.(e);break;case b.Navigation:t.onNavigation?.(e);break;case b.FocusTrap:t.onFocusTrap?.(e);break;case b.AccountCreated:t.onAccountCreated?.(e);break;case b.ConnectLoaded:t.onLoaded?.(e);break;case b.ConnectEnterCredentials:t.onEnterCredentials?.(e);break;case b.ConnectInstitutionSearch:t.onInstitutionSearch?.(e);break;case b.ConnectSelectedInstitution:t.onSelectedInstitution?.(e);break;case b.ConnectMemberConnected:t.onMemberConnected?.(e);break;case b.ConnectConnectedPrimaryAction:t.onConnectedPrimaryAction?.(e);break;case b.ConnectMemberDeleted:t.onMemberDeleted?.(e);break;case b.ConnectCreateMemberError:t.onCreateMemberError?.(e);break;case b.ConnectMemberStatusUpdate:t.onMemberStatusUpdate?.(e);break;case b.ConnectOAuthError:t.onOAuthError?.(e);break;case b.ConnectOAuthRequested:t.onOAuthRequested?.(e);break;case b.ConnectStepChange:t.onStepChange?.(e);break;case b.ConnectSubmitMFA:t.onSubmitMFA?.(e);break;case b.ConnectUpdateCredentials:t.onUpdateCredentials?.(e);break;default:throw new C(e.type)}}(x(e.data),t)}catch(n){y(e,n,t)}}function A(e,t){try{w(e,t);!function(e,t){switch(e.type){case b.Load:t.onLoad?.(e);break;case b.Ping:t.onPing?.(e);break;case b.Navigation:t.onNavigation?.(e);break;case b.FocusTrap:t.onFocusTrap?.(e);break;case b.AccountCreated:t.onAccountCreated?.(e);break;case b.PulseOverdraftWarningCtaTransferFunds:t.onOverdraftWarningCtaTransferFunds?.(e);break;default:throw new C(e.type)}}(x(e.data),t)}catch(n){y(e,n,t)}}class v{constructor(e){if(this.isUnmounting=!1,this.options=e,this.iframe=document.createElement("iframe"),this.style=e.style||{border:"none",height:"550px",width:"320px"},this.messageCallback=e=>{this.handleMXPostMessage(e)},"string"==typeof e.container){const t=document.querySelector(e.container);if(!t)throw new Error(`Unable to find widget container. Ensure that an element matching a selector for '${this.options.container}' is available in the DOM before you initialize the widget.`);this.container=t}else{if(!(e.container instanceof Element))throw new Error("Invalid or missing value for container property, expecting a query selector string or a DOM Element.");this.container=e.container}this.setupIframe(),this.setupListener()}get widgetType(){if(this.options.widgetType)return this.options.widgetType;throw new Error("Missing value for widgetType property, expecting a string (eg. connect_widget).")}get dispatcher(){return M}navigateBack(){return new Promise((e=>{const t=this.iframe.contentWindow,n={mx:!0,type:b.Navigation,payload:{action:"back"}};if(!t)throw new Error("Unable to navigate back, iframe element is not available.");const i=t=>{t.data.type===b.Navigation&&(window.removeEventListener("message",i),e(t.data.metadata.did_go_back))};window.addEventListener("message",i,!1),t.postMessage(JSON.stringify(n),this.targetOrigin)}))}ping(){this.postMessageToWidget({type:"ping"})}unmount(){this.isUnmounting=!0,this.teardownListener(),this.teardownIframe()}get targetOrigin(){var e;const t=/^https?:\/\/[^/]+/i;let n;return this.ssoUrl&&this.ssoUrl.match(t)&&(n=null===(e=this.ssoUrl.match(t))||void 0===e?void 0:e[0]),n||"https://widgets.moneydesktop.com"}handleMXPostMessage(e){e.data.mx&&(this.dispatcher(e,this.options),e.data.type===b.Load&&this.postMessageToWidget({type:"mx/sdk/info",metadata:{sdk:"web",version:"0.0.10"}}))}postMessageToWidget(e){if(!this.iframe.contentWindow)throw new Error("Unable to postMessage to widget, iframe doesn't exist");this.iframe.contentWindow.postMessage(JSON.stringify(e),this.targetOrigin)}setupIframe(){(function(e){if(function(e){return"url"in e&&"string"==typeof e.url}(e))return Promise.resolve(e.url);const t=e.ssoRequestBuilder||g,n=e.ssoRequestPreprocess||m,i=e.ssoRequestPostprocess||d,s=e.onSsoUrlLoadError||l,r=n(t(e));return fetch(r.url,r.options).then(p).then(i).catch(s)})(Object.assign(Object.assign({},this.options),{widgetType:this.widgetType})).then((e=>{!this.isUnmounting&&e&&(this.ssoUrl=e,this.iframe.setAttribute("data-test-id","mx-widget-iframe"),this.iframe.setAttribute("title",this.options.iframeTitle||"Widget Iframe"),this.iframe.setAttribute("src",e),Object.keys(this.style).forEach((e=>{this.iframe.style[e]=this.style[e]})),this.container.appendChild(this.iframe))}))}teardownIframe(){this.container.contains(this.iframe)&&this.container.removeChild(this.iframe)}setupListener(){window.addEventListener("message",this.messageCallback,!1)}teardownListener(){window.removeEventListener("message",this.messageCallback,!1)}}e.AccountsWidget=class extends v{get widgetType(){return a.AccountsWidget}},e.BudgetsWidget=class extends v{get widgetType(){return a.BudgetsWidget}},e.ConnectWidget=class extends v{get widgetType(){return a.ConnectWidget}get dispatcher(){return W}},e.ConnectionsWidget=class extends v{get widgetType(){return a.ConnectionsWidget}},e.DebtsWidget=class extends v{get widgetType(){return a.DebtsWidget}},e.FinstrongWidget=class extends v{get widgetType(){return a.FinstrongWidget}},e.GoalsWidget=class extends v{get widgetType(){return a.GoalsWidget}},e.HelpWidget=class extends v{get widgetType(){return a.HelpWidget}},e.MasterWidget=class extends v{get widgetType(){return a.MasterWidget}},e.MiniBudgetsWidget=class extends v{get widgetType(){return a.MiniBudgetsWidget}},e.MiniFinstrongWidget=class extends v{get widgetType(){return a.MiniFinstrongWidget}},e.MiniPulseCarouselWidget=class extends v{get widgetType(){return a.MiniPulseCarouselWidget}get dispatcher(){return A}},e.MiniSpendingWidget=class extends v{get widgetType(){return a.MiniSpendingWidget}},e.PulseWidget=class extends v{get widgetType(){return a.PulseWidget}get dispatcher(){return A}},e.SettingsWidget=class extends v{get widgetType(){return a.SettingsWidget}},e.SpendingWidget=class extends v{get widgetType(){return a.SpendingWidget}},e.TransactionsWidget=class extends v{get widgetType(){return a.TransactionsWidget}},e.TrendsWidget=class extends v{get widgetType(){return a.TrendsWidget}},e.Widget=v,Object.defineProperty(e,"__esModule",{value:!0})})); |
@@ -200,2 +200,4 @@ 'use strict'; | ||
const sdkVersion = "0.0.10"; | ||
// This is an internal error. Thrown when we are decoding a post message's | ||
@@ -772,5 +774,3 @@ // metadata and we encountered a missing field or an invalid value. This | ||
this.messageCallback = (event) => { | ||
if (event.data.mx) { | ||
this.dispatcher(event, this.options); | ||
} | ||
this.handleMXPostMessage(event); | ||
}; | ||
@@ -836,2 +836,17 @@ if (typeof options.container === "string") { | ||
} | ||
handleMXPostMessage(event) { | ||
if (!event.data.mx) { | ||
return; | ||
} | ||
this.dispatcher(event, this.options); | ||
if (event.data.type === Type.Load) { | ||
this.postMessageToWidget({ | ||
type: "mx/sdk/info", | ||
metadata: { | ||
sdk: "web", | ||
version: sdkVersion, | ||
}, | ||
}); | ||
} | ||
} | ||
postMessageToWidget(payload) { | ||
@@ -838,0 +853,0 @@ if (!this.iframe.contentWindow) { |
@@ -1,1 +0,1 @@ | ||
"use strict";function e(e){return"clientId"in e&&"string"==typeof e.clientId&&"apiKey"in e&&"string"==typeof e.apiKey&&"userGuid"in e&&"string"==typeof e.userGuid&&"environment"in e&&"string"==typeof e.environment}Object.defineProperty(exports,"__esModule",{value:!0});class t extends Error{constructor(){super("Missing required widget props!\n\nComponent needs one of the following groups of props:\n\n - url\n\n - or -\n\n - proxy\n\n - or -\n\n - apiKey\n - clientId\n - environment\n - userGuid"),Object.setPrototypeOf(this,t.prototype)}}class n extends Error{constructor(e){super(`Request failed: ${e}`),this.statusCode=e,Object.setPrototypeOf(this,n.prototype)}}var i;!function(e){e.SAND="sand",e.QA="qa",e.INT="integration",e.PROD="production"}(i||(i={}));const s={[i.SAND]:i.SAND,[i.QA]:i.QA,[i.INT]:i.INT,[i.PROD]:i.PROD};const r={[i.SAND]:"https://api.sand.internal.mx",[i.QA]:"https://api.qa.internal.mx",[i.INT]:"https://int-api.mx.com",[i.PROD]:"https://api.mx.com"};function o(e){const t=function(e){const t=s[e];if(!t)throw new Error(`Invalid MX environment: ${e}`);return t}(e),n=r[t];if(!n)throw new Error(`Missing host for MX environment: ${e}`);return n}var c,a;function u(e){return{client_redirect_url:e.clientRedirectUrl,color_scheme:e.colorScheme,current_institution_code:e.currentInstitutionCode,current_institution_guid:e.currentInstitutionGuid,current_member_guid:e.currentMemberGuid,disable_institution_search:e.disableInstitutionSearch,include_transactions:e.includeTransactions,is_mobile_webview:e.isMobileWebview||!1,mode:e.mode,oauth_referral_source:e.oauthReferralSource,ui_message_version:e.uiMessageVersion||4,ui_message_webview_url_scheme:e.uiMessageWebviewUrlScheme,update_credentials:e.updateCredentials,widget_type:e.widgetType}}function d(e){return e.widget_url.url}function g(n){const i=function(n){if(function(e){return"proxy"in e&&"string"==typeof e.proxy}(n))return function(e){return e.proxy}(n);if(e(n))return function(e){const t=o(e.environment),n=e.userGuid;return`${t}/users/${n}/widget_urls`}(n);throw new t}(n),s=function(t){const n={Accept:"application/vnd.mx.api.v1+json","Content-Type":"application/json"};t.language&&(n["Accept-Language"]=t.language);if(e(t)){const{apiKey:e,clientId:i}=t,s=btoa(`${i}:${e}`);n.Authorization=`Basic ${s}`}const i="cors",s="POST",r=JSON.stringify({widget_url:u(t)});return{method:s,headers:n,body:r,mode:i}}(n);return{url:i,options:s}}function m(e){return e}function p(e){if(!e.ok)throw new n(e.status);return e.json()}function l(e){console.error(e)}!function(e){e.AccountsWidget="accounts_widget",e.BudgetsWidget="budgets_widget",e.ConnectWidget="connect_widget",e.ConnectionsWidget="connections_widget",e.DebtsWidget="debts_widget",e.FinstrongWidget="finstrong_widget",e.GoalsWidget="goals_widget",e.HelpWidget="help_widget",e.MasterWidget="master_widget",e.MiniBudgetsWidget="mini_budgets_widget",e.MiniFinstrongWidget="mini_finstrong_widget",e.MiniPulseCarouselWidget="mini_pulse_carousel_widget",e.MiniSpendingWidget="mini_spending_widget",e.PulseWidget="pulse_widget",e.SettingsWidget="settings_widget",e.SpendingWidget="spending_widget",e.TransactionsWidget="transactions_widget",e.TrendsWidget="trends_widget"}(c||(c={}));class _ extends Error{messageType;field;expectedType;gotValue;constructor(e,t,n,i){super(`Unable to decode '${t}' from '${e}'`),this.messageType=e,this.field=t,this.expectedType=n,this.gotValue=i,Object.setPrototypeOf(this,_.prototype)}}class C extends Error{postMessageType;constructor(e){super(`Unknown post message: ${e}`),this.postMessageType=e,Object.setPrototypeOf(this,C.prototype)}}function h(e,t,n,i,s={}){const r=e[n],o=void 0!==r,c="string"==typeof r,a="number"==typeof r,u="object"==typeof r&&!Array.isArray(r),d="boolean"==typeof r,g="string"===i,m="number"===i,p=i instanceof Array,l="object"==typeof i&&!Array.isArray(i),C="boolean"===i;if(o||!s.optional){if(!o)throw new _(t,n,i,r);if(g&&!c)throw new _(t,n,i,r);if(m&&!a)throw new _(t,n,i,r);if(!(!p||c&&i.includes(r)))throw new _(t,n,i,r);if(l&&!u)throw new _(t,n,i,r);if(C&&!d)throw new _(t,n,i,r);l&&u&&Object.keys(i).forEach((e=>{h(r,t,e,i[e])}))}}!function(e){e.Load="mx/load",e.Ping="mx/ping",e.Navigation="mx/navigation",e.FocusTrap="mx/focusTrap",e.ClientOAuthComplete="mx/client/oauthComplete",e.ConnectLoaded="mx/connect/loaded",e.ConnectEnterCredentials="mx/connect/enterCredentials",e.ConnectInstitutionSearch="mx/connect/institutionSearch",e.ConnectSelectedInstitution="mx/connect/selectedInstitution",e.ConnectMemberConnected="mx/connect/memberConnected",e.ConnectConnectedPrimaryAction="mx/connect/connected/primaryAction",e.ConnectMemberDeleted="mx/connect/memberDeleted",e.ConnectCreateMemberError="mx/connect/createMemberError",e.ConnectMemberStatusUpdate="mx/connect/memberStatusUpdate",e.ConnectOAuthError="mx/connect/oauthError",e.ConnectOAuthRequested="mx/connect/oauthRequested",e.ConnectStepChange="mx/connect/stepChange",e.ConnectSubmitMFA="mx/connect/submitMFA",e.ConnectUpdateCredentials="mx/connect/updateCredentials",e.PulseOverdraftWarningCtaTransferFunds="mx/pulse/overdraftWarning/cta/transferFunds",e.AccountCreated="mx/account/created"}(a||(a={}));const b={[a.Load]:a.Load,[a.Ping]:a.Ping,[a.Navigation]:a.Navigation,[a.FocusTrap]:a.FocusTrap,"mx/focustrap":a.FocusTrap,[a.ClientOAuthComplete]:a.ClientOAuthComplete,"mx/client/oauthcomplete":a.ClientOAuthComplete,[a.ConnectLoaded]:a.ConnectLoaded,[a.ConnectEnterCredentials]:a.ConnectEnterCredentials,"mx/connect/entercredentials":a.ConnectEnterCredentials,[a.ConnectInstitutionSearch]:a.ConnectInstitutionSearch,"mx/connect/institutionsearch":a.ConnectInstitutionSearch,[a.ConnectSelectedInstitution]:a.ConnectSelectedInstitution,"mx/connect/selectedinstitution":a.ConnectSelectedInstitution,[a.ConnectMemberConnected]:a.ConnectMemberConnected,"mx/connect/memberconnected":a.ConnectMemberConnected,[a.ConnectConnectedPrimaryAction]:a.ConnectConnectedPrimaryAction,"mx/connect/connected/primaryaction":a.ConnectConnectedPrimaryAction,[a.ConnectMemberDeleted]:a.ConnectMemberDeleted,"mx/connect/memberdeleted":a.ConnectMemberDeleted,[a.ConnectCreateMemberError]:a.ConnectCreateMemberError,"mx/connect/createmembererror":a.ConnectCreateMemberError,[a.ConnectMemberStatusUpdate]:a.ConnectMemberStatusUpdate,"mx/connect/memberstatusupdate":a.ConnectMemberStatusUpdate,[a.ConnectOAuthError]:a.ConnectOAuthError,"mx/connect/oautherror":a.ConnectOAuthError,[a.ConnectOAuthRequested]:a.ConnectOAuthRequested,"mx/connect/oauthrequested":a.ConnectOAuthRequested,[a.ConnectStepChange]:a.ConnectStepChange,"mx/connect/stepchange":a.ConnectStepChange,[a.ConnectSubmitMFA]:a.ConnectSubmitMFA,"mx/connect/submitmfa":a.ConnectSubmitMFA,[a.ConnectUpdateCredentials]:a.ConnectUpdateCredentials,"mx/connect/updatecredentials":a.ConnectUpdateCredentials,[a.PulseOverdraftWarningCtaTransferFunds]:a.PulseOverdraftWarningCtaTransferFunds,"mx/pulse/overdraftwarning/cta/transferfunds":a.PulseOverdraftWarningCtaTransferFunds,[a.AccountCreated]:a.AccountCreated};function x(e){const t=e.type||"type not provided";let n;if(!t||!(t in b))throw new C(t);n=b[t];const i=function(e,t){switch(e){case a.Load:return{type:e};case a.Ping:return h(t,"mx/ping","user_guid","string"),h(t,"mx/ping","session_guid","string"),{type:e,user_guid:t.user_guid,session_guid:t.session_guid};case a.Navigation:return h(t,"mx/navigation","user_guid","string"),h(t,"mx/navigation","session_guid","string"),h(t,"mx/navigation","did_go_back","boolean"),{type:e,user_guid:t.user_guid,session_guid:t.session_guid,did_go_back:t.did_go_back};case a.FocusTrap:return h(t,"mx/focusTrap","user_guid","string"),h(t,"mx/focusTrap","session_guid","string"),{type:e,user_guid:t.user_guid,session_guid:t.session_guid};case a.ClientOAuthComplete:return h(t,"mx/client/oauthComplete","url","string"),{type:e,url:t.url};case a.ConnectLoaded:return h(t,"mx/connect/loaded","user_guid","string"),h(t,"mx/connect/loaded","session_guid","string"),h(t,"mx/connect/loaded","initial_step",["search","selectMember","enterCreds","mfa","connected","loginError","disclosure"]),{type:e,user_guid:t.user_guid,session_guid:t.session_guid,initial_step:t.initial_step};case a.ConnectEnterCredentials:return h(t,"mx/connect/enterCredentials","user_guid","string"),h(t,"mx/connect/enterCredentials","session_guid","string"),h(t,"mx/connect/enterCredentials","institution",{code:"string",guid:"string"}),{type:e,user_guid:t.user_guid,session_guid:t.session_guid,institution:t.institution};case a.ConnectInstitutionSearch:return h(t,"mx/connect/institutionSearch","user_guid","string"),h(t,"mx/connect/institutionSearch","session_guid","string"),h(t,"mx/connect/institutionSearch","query","string"),{type:e,user_guid:t.user_guid,session_guid:t.session_guid,query:t.query};case a.ConnectSelectedInstitution:return h(t,"mx/connect/selectedInstitution","user_guid","string"),h(t,"mx/connect/selectedInstitution","session_guid","string"),h(t,"mx/connect/selectedInstitution","code","string"),h(t,"mx/connect/selectedInstitution","guid","string"),h(t,"mx/connect/selectedInstitution","name","string"),h(t,"mx/connect/selectedInstitution","url","string"),{type:e,user_guid:t.user_guid,session_guid:t.session_guid,code:t.code,guid:t.guid,name:t.name,url:t.url};case a.ConnectMemberConnected:return h(t,"mx/connect/memberConnected","user_guid","string"),h(t,"mx/connect/memberConnected","session_guid","string"),h(t,"mx/connect/memberConnected","member_guid","string"),{type:e,user_guid:t.user_guid,session_guid:t.session_guid,member_guid:t.member_guid};case a.ConnectConnectedPrimaryAction:return h(t,"mx/connect/connected/primaryAction","user_guid","string"),h(t,"mx/connect/connected/primaryAction","session_guid","string"),{type:e,user_guid:t.user_guid,session_guid:t.session_guid};case a.ConnectMemberDeleted:return h(t,"mx/connect/memberDeleted","user_guid","string"),h(t,"mx/connect/memberDeleted","session_guid","string"),h(t,"mx/connect/memberDeleted","member_guid","string"),{type:e,user_guid:t.user_guid,session_guid:t.session_guid,member_guid:t.member_guid};case a.ConnectCreateMemberError:return h(t,"mx/connect/createMemberError","user_guid","string"),h(t,"mx/connect/createMemberError","session_guid","string"),h(t,"mx/connect/createMemberError","institution_guid","string"),h(t,"mx/connect/createMemberError","institution_code","string"),{type:e,user_guid:t.user_guid,session_guid:t.session_guid,institution_guid:t.institution_guid,institution_code:t.institution_code};case a.ConnectMemberStatusUpdate:return h(t,"mx/connect/memberStatusUpdate","user_guid","string"),h(t,"mx/connect/memberStatusUpdate","session_guid","string"),h(t,"mx/connect/memberStatusUpdate","member_guid","string"),h(t,"mx/connect/memberStatusUpdate","connection_status","number"),{type:e,user_guid:t.user_guid,session_guid:t.session_guid,member_guid:t.member_guid,connection_status:t.connection_status};case a.ConnectOAuthError:return h(t,"mx/connect/oauthError","user_guid","string"),h(t,"mx/connect/oauthError","session_guid","string"),h(t,"mx/connect/oauthError","member_guid","string",{optional:!0}),{type:e,user_guid:t.user_guid,session_guid:t.session_guid,member_guid:t.member_guid};case a.ConnectOAuthRequested:return h(t,"mx/connect/oauthRequested","user_guid","string"),h(t,"mx/connect/oauthRequested","session_guid","string"),h(t,"mx/connect/oauthRequested","url","string"),h(t,"mx/connect/oauthRequested","member_guid","string"),{type:e,user_guid:t.user_guid,session_guid:t.session_guid,url:t.url,member_guid:t.member_guid};case a.ConnectStepChange:return h(t,"mx/connect/stepChange","user_guid","string"),h(t,"mx/connect/stepChange","session_guid","string"),h(t,"mx/connect/stepChange","previous","string"),h(t,"mx/connect/stepChange","current","string"),{type:e,user_guid:t.user_guid,session_guid:t.session_guid,previous:t.previous,current:t.current};case a.ConnectSubmitMFA:return h(t,"mx/connect/submitMFA","user_guid","string"),h(t,"mx/connect/submitMFA","session_guid","string"),h(t,"mx/connect/submitMFA","member_guid","string"),{type:e,user_guid:t.user_guid,session_guid:t.session_guid,member_guid:t.member_guid};case a.ConnectUpdateCredentials:return h(t,"mx/connect/updateCredentials","user_guid","string"),h(t,"mx/connect/updateCredentials","session_guid","string"),h(t,"mx/connect/updateCredentials","member_guid","string"),h(t,"mx/connect/updateCredentials","institution",{code:"string",guid:"string"}),{type:e,user_guid:t.user_guid,session_guid:t.session_guid,member_guid:t.member_guid,institution:t.institution};case a.PulseOverdraftWarningCtaTransferFunds:return h(t,"mx/pulse/overdraftWarning/cta/transferFunds","account_guid","string"),h(t,"mx/pulse/overdraftWarning/cta/transferFunds","amount","number"),{type:e,account_guid:t.account_guid,amount:t.amount};case a.AccountCreated:return h(t,"mx/account/created","guid","string"),{type:e,guid:t.guid};default:throw new C(e)}}(n,e.metadata||{});return i}function f(e,t,n){if(t instanceof _)n.onInvalidMessageError?.(e,t);else{if(!(t instanceof C))throw t;n.onInvalidMessageError?.(e,t)}}function y(e,t){t.onMessage?.(e)}function w(e,t){try{y(e,t);!function(e,t){switch(e.type){case a.Load:t.onLoad?.(e);break;case a.Ping:t.onPing?.(e);break;case a.Navigation:t.onNavigation?.(e);break;case a.FocusTrap:t.onFocusTrap?.(e);break;case a.AccountCreated:t.onAccountCreated?.(e);break;default:throw new C(e.type)}}(x(e.data),t)}catch(n){f(e,n,t)}}function M(e,t){try{y(e,t);!function(e,t){switch(e.type){case a.Load:t.onLoad?.(e);break;case a.Ping:t.onPing?.(e);break;case a.Navigation:t.onNavigation?.(e);break;case a.FocusTrap:t.onFocusTrap?.(e);break;case a.AccountCreated:t.onAccountCreated?.(e);break;case a.ConnectLoaded:t.onLoaded?.(e);break;case a.ConnectEnterCredentials:t.onEnterCredentials?.(e);break;case a.ConnectInstitutionSearch:t.onInstitutionSearch?.(e);break;case a.ConnectSelectedInstitution:t.onSelectedInstitution?.(e);break;case a.ConnectMemberConnected:t.onMemberConnected?.(e);break;case a.ConnectConnectedPrimaryAction:t.onConnectedPrimaryAction?.(e);break;case a.ConnectMemberDeleted:t.onMemberDeleted?.(e);break;case a.ConnectCreateMemberError:t.onCreateMemberError?.(e);break;case a.ConnectMemberStatusUpdate:t.onMemberStatusUpdate?.(e);break;case a.ConnectOAuthError:t.onOAuthError?.(e);break;case a.ConnectOAuthRequested:t.onOAuthRequested?.(e);break;case a.ConnectStepChange:t.onStepChange?.(e);break;case a.ConnectSubmitMFA:t.onSubmitMFA?.(e);break;case a.ConnectUpdateCredentials:t.onUpdateCredentials?.(e);break;default:throw new C(e.type)}}(x(e.data),t)}catch(n){f(e,n,t)}}function W(e,t){try{y(e,t);!function(e,t){switch(e.type){case a.Load:t.onLoad?.(e);break;case a.Ping:t.onPing?.(e);break;case a.Navigation:t.onNavigation?.(e);break;case a.FocusTrap:t.onFocusTrap?.(e);break;case a.AccountCreated:t.onAccountCreated?.(e);break;case a.PulseOverdraftWarningCtaTransferFunds:t.onOverdraftWarningCtaTransferFunds?.(e);break;default:throw new C(e.type)}}(x(e.data),t)}catch(n){f(e,n,t)}}class A{constructor(e){if(this.isUnmounting=!1,this.options=e,this.iframe=document.createElement("iframe"),this.style=e.style||{border:"none",height:"550px",width:"320px"},this.messageCallback=e=>{e.data.mx&&this.dispatcher(e,this.options)},"string"==typeof e.container){const t=document.querySelector(e.container);if(!t)throw new Error(`Unable to find widget container. Ensure that an element matching a selector for '${this.options.container}' is available in the DOM before you initialize the widget.`);this.container=t}else{if(!(e.container instanceof Element))throw new Error("Invalid or missing value for container property, expecting a query selector string or a DOM Element.");this.container=e.container}this.setupIframe(),this.setupListener()}get widgetType(){if(this.options.widgetType)return this.options.widgetType;throw new Error("Missing value for widgetType property, expecting a string (eg. connect_widget).")}get dispatcher(){return w}navigateBack(){return new Promise((e=>{const t=this.iframe.contentWindow,n={mx:!0,type:a.Navigation,payload:{action:"back"}};if(!t)throw new Error("Unable to navigate back, iframe element is not available.");const i=t=>{t.data.type===a.Navigation&&(window.removeEventListener("message",i),e(t.data.metadata.did_go_back))};window.addEventListener("message",i,!1),t.postMessage(JSON.stringify(n),this.targetOrigin)}))}ping(){this.postMessageToWidget({type:"ping"})}unmount(){this.isUnmounting=!0,this.teardownListener(),this.teardownIframe()}get targetOrigin(){var e;const t=/^https?:\/\/[^/]+/i;let n;return this.ssoUrl&&this.ssoUrl.match(t)&&(n=null===(e=this.ssoUrl.match(t))||void 0===e?void 0:e[0]),n||"https://widgets.moneydesktop.com"}postMessageToWidget(e){if(!this.iframe.contentWindow)throw new Error("Unable to postMessage to widget, iframe doesn't exist");this.iframe.contentWindow.postMessage(JSON.stringify(e),this.targetOrigin)}setupIframe(){(function(e){if(function(e){return"url"in e&&"string"==typeof e.url}(e))return Promise.resolve(e.url);const t=e.ssoRequestBuilder||g,n=e.ssoRequestPreprocess||m,i=e.ssoRequestPostprocess||d,s=e.onSsoUrlLoadError||l,r=n(t(e));return fetch(r.url,r.options).then(p).then(i).catch(s)})(Object.assign(Object.assign({},this.options),{widgetType:this.widgetType})).then((e=>{!this.isUnmounting&&e&&(this.ssoUrl=e,this.iframe.setAttribute("data-test-id","mx-widget-iframe"),this.iframe.setAttribute("title",this.options.iframeTitle||"Widget Iframe"),this.iframe.setAttribute("src",e),Object.keys(this.style).forEach((e=>{this.iframe.style[e]=this.style[e]})),this.container.appendChild(this.iframe))}))}teardownIframe(){this.container.contains(this.iframe)&&this.container.removeChild(this.iframe)}setupListener(){window.addEventListener("message",this.messageCallback,!1)}teardownListener(){window.removeEventListener("message",this.messageCallback,!1)}}exports.AccountsWidget=class extends A{get widgetType(){return c.AccountsWidget}},exports.BudgetsWidget=class extends A{get widgetType(){return c.BudgetsWidget}},exports.ConnectWidget=class extends A{get widgetType(){return c.ConnectWidget}get dispatcher(){return M}},exports.ConnectionsWidget=class extends A{get widgetType(){return c.ConnectionsWidget}},exports.DebtsWidget=class extends A{get widgetType(){return c.DebtsWidget}},exports.FinstrongWidget=class extends A{get widgetType(){return c.FinstrongWidget}},exports.GoalsWidget=class extends A{get widgetType(){return c.GoalsWidget}},exports.HelpWidget=class extends A{get widgetType(){return c.HelpWidget}},exports.MasterWidget=class extends A{get widgetType(){return c.MasterWidget}},exports.MiniBudgetsWidget=class extends A{get widgetType(){return c.MiniBudgetsWidget}},exports.MiniFinstrongWidget=class extends A{get widgetType(){return c.MiniFinstrongWidget}},exports.MiniPulseCarouselWidget=class extends A{get widgetType(){return c.MiniPulseCarouselWidget}get dispatcher(){return W}},exports.MiniSpendingWidget=class extends A{get widgetType(){return c.MiniSpendingWidget}},exports.PulseWidget=class extends A{get widgetType(){return c.PulseWidget}get dispatcher(){return W}},exports.SettingsWidget=class extends A{get widgetType(){return c.SettingsWidget}},exports.SpendingWidget=class extends A{get widgetType(){return c.SpendingWidget}},exports.TransactionsWidget=class extends A{get widgetType(){return c.TransactionsWidget}},exports.TrendsWidget=class extends A{get widgetType(){return c.TrendsWidget}},exports.Widget=A; | ||
"use strict";function e(e){return"clientId"in e&&"string"==typeof e.clientId&&"apiKey"in e&&"string"==typeof e.apiKey&&"userGuid"in e&&"string"==typeof e.userGuid&&"environment"in e&&"string"==typeof e.environment}Object.defineProperty(exports,"__esModule",{value:!0});class t extends Error{constructor(){super("Missing required widget props!\n\nComponent needs one of the following groups of props:\n\n - url\n\n - or -\n\n - proxy\n\n - or -\n\n - apiKey\n - clientId\n - environment\n - userGuid"),Object.setPrototypeOf(this,t.prototype)}}class n extends Error{constructor(e){super(`Request failed: ${e}`),this.statusCode=e,Object.setPrototypeOf(this,n.prototype)}}var i;!function(e){e.SAND="sand",e.QA="qa",e.INT="integration",e.PROD="production"}(i||(i={}));const s={[i.SAND]:i.SAND,[i.QA]:i.QA,[i.INT]:i.INT,[i.PROD]:i.PROD};const r={[i.SAND]:"https://api.sand.internal.mx",[i.QA]:"https://api.qa.internal.mx",[i.INT]:"https://int-api.mx.com",[i.PROD]:"https://api.mx.com"};function o(e){const t=function(e){const t=s[e];if(!t)throw new Error(`Invalid MX environment: ${e}`);return t}(e),n=r[t];if(!n)throw new Error(`Missing host for MX environment: ${e}`);return n}var c;function a(e){return{client_redirect_url:e.clientRedirectUrl,color_scheme:e.colorScheme,current_institution_code:e.currentInstitutionCode,current_institution_guid:e.currentInstitutionGuid,current_member_guid:e.currentMemberGuid,disable_institution_search:e.disableInstitutionSearch,include_transactions:e.includeTransactions,is_mobile_webview:e.isMobileWebview||!1,mode:e.mode,oauth_referral_source:e.oauthReferralSource,ui_message_version:e.uiMessageVersion||4,ui_message_webview_url_scheme:e.uiMessageWebviewUrlScheme,update_credentials:e.updateCredentials,widget_type:e.widgetType}}function u(e){return e.widget_url.url}function d(n){const i=function(n){if(function(e){return"proxy"in e&&"string"==typeof e.proxy}(n))return function(e){return e.proxy}(n);if(e(n))return function(e){const t=o(e.environment),n=e.userGuid;return`${t}/users/${n}/widget_urls`}(n);throw new t}(n),s=function(t){const n={Accept:"application/vnd.mx.api.v1+json","Content-Type":"application/json"};t.language&&(n["Accept-Language"]=t.language);if(e(t)){const{apiKey:e,clientId:i}=t,s=btoa(`${i}:${e}`);n.Authorization=`Basic ${s}`}const i="cors",s="POST",r=JSON.stringify({widget_url:a(t)});return{method:s,headers:n,body:r,mode:i}}(n);return{url:i,options:s}}function g(e){return e}function m(e){if(!e.ok)throw new n(e.status);return e.json()}function p(e){console.error(e)}!function(e){e.AccountsWidget="accounts_widget",e.BudgetsWidget="budgets_widget",e.ConnectWidget="connect_widget",e.ConnectionsWidget="connections_widget",e.DebtsWidget="debts_widget",e.FinstrongWidget="finstrong_widget",e.GoalsWidget="goals_widget",e.HelpWidget="help_widget",e.MasterWidget="master_widget",e.MiniBudgetsWidget="mini_budgets_widget",e.MiniFinstrongWidget="mini_finstrong_widget",e.MiniPulseCarouselWidget="mini_pulse_carousel_widget",e.MiniSpendingWidget="mini_spending_widget",e.PulseWidget="pulse_widget",e.SettingsWidget="settings_widget",e.SpendingWidget="spending_widget",e.TransactionsWidget="transactions_widget",e.TrendsWidget="trends_widget"}(c||(c={}));class l extends Error{messageType;field;expectedType;gotValue;constructor(e,t,n,i){super(`Unable to decode '${t}' from '${e}'`),this.messageType=e,this.field=t,this.expectedType=n,this.gotValue=i,Object.setPrototypeOf(this,l.prototype)}}class _ extends Error{postMessageType;constructor(e){super(`Unknown post message: ${e}`),this.postMessageType=e,Object.setPrototypeOf(this,_.prototype)}}function C(e,t,n,i,s={}){const r=e[n],o=void 0!==r,c="string"==typeof r,a="number"==typeof r,u="object"==typeof r&&!Array.isArray(r),d="boolean"==typeof r,g="string"===i,m="number"===i,p=i instanceof Array,_="object"==typeof i&&!Array.isArray(i),h="boolean"===i;if(o||!s.optional){if(!o)throw new l(t,n,i,r);if(g&&!c)throw new l(t,n,i,r);if(m&&!a)throw new l(t,n,i,r);if(!(!p||c&&i.includes(r)))throw new l(t,n,i,r);if(_&&!u)throw new l(t,n,i,r);if(h&&!d)throw new l(t,n,i,r);_&&u&&Object.keys(i).forEach((e=>{C(r,t,e,i[e])}))}}var h;!function(e){e.Load="mx/load",e.Ping="mx/ping",e.Navigation="mx/navigation",e.FocusTrap="mx/focusTrap",e.ClientOAuthComplete="mx/client/oauthComplete",e.ConnectLoaded="mx/connect/loaded",e.ConnectEnterCredentials="mx/connect/enterCredentials",e.ConnectInstitutionSearch="mx/connect/institutionSearch",e.ConnectSelectedInstitution="mx/connect/selectedInstitution",e.ConnectMemberConnected="mx/connect/memberConnected",e.ConnectConnectedPrimaryAction="mx/connect/connected/primaryAction",e.ConnectMemberDeleted="mx/connect/memberDeleted",e.ConnectCreateMemberError="mx/connect/createMemberError",e.ConnectMemberStatusUpdate="mx/connect/memberStatusUpdate",e.ConnectOAuthError="mx/connect/oauthError",e.ConnectOAuthRequested="mx/connect/oauthRequested",e.ConnectStepChange="mx/connect/stepChange",e.ConnectSubmitMFA="mx/connect/submitMFA",e.ConnectUpdateCredentials="mx/connect/updateCredentials",e.PulseOverdraftWarningCtaTransferFunds="mx/pulse/overdraftWarning/cta/transferFunds",e.AccountCreated="mx/account/created"}(h||(h={}));const b={[h.Load]:h.Load,[h.Ping]:h.Ping,[h.Navigation]:h.Navigation,[h.FocusTrap]:h.FocusTrap,"mx/focustrap":h.FocusTrap,[h.ClientOAuthComplete]:h.ClientOAuthComplete,"mx/client/oauthcomplete":h.ClientOAuthComplete,[h.ConnectLoaded]:h.ConnectLoaded,[h.ConnectEnterCredentials]:h.ConnectEnterCredentials,"mx/connect/entercredentials":h.ConnectEnterCredentials,[h.ConnectInstitutionSearch]:h.ConnectInstitutionSearch,"mx/connect/institutionsearch":h.ConnectInstitutionSearch,[h.ConnectSelectedInstitution]:h.ConnectSelectedInstitution,"mx/connect/selectedinstitution":h.ConnectSelectedInstitution,[h.ConnectMemberConnected]:h.ConnectMemberConnected,"mx/connect/memberconnected":h.ConnectMemberConnected,[h.ConnectConnectedPrimaryAction]:h.ConnectConnectedPrimaryAction,"mx/connect/connected/primaryaction":h.ConnectConnectedPrimaryAction,[h.ConnectMemberDeleted]:h.ConnectMemberDeleted,"mx/connect/memberdeleted":h.ConnectMemberDeleted,[h.ConnectCreateMemberError]:h.ConnectCreateMemberError,"mx/connect/createmembererror":h.ConnectCreateMemberError,[h.ConnectMemberStatusUpdate]:h.ConnectMemberStatusUpdate,"mx/connect/memberstatusupdate":h.ConnectMemberStatusUpdate,[h.ConnectOAuthError]:h.ConnectOAuthError,"mx/connect/oautherror":h.ConnectOAuthError,[h.ConnectOAuthRequested]:h.ConnectOAuthRequested,"mx/connect/oauthrequested":h.ConnectOAuthRequested,[h.ConnectStepChange]:h.ConnectStepChange,"mx/connect/stepchange":h.ConnectStepChange,[h.ConnectSubmitMFA]:h.ConnectSubmitMFA,"mx/connect/submitmfa":h.ConnectSubmitMFA,[h.ConnectUpdateCredentials]:h.ConnectUpdateCredentials,"mx/connect/updatecredentials":h.ConnectUpdateCredentials,[h.PulseOverdraftWarningCtaTransferFunds]:h.PulseOverdraftWarningCtaTransferFunds,"mx/pulse/overdraftwarning/cta/transferfunds":h.PulseOverdraftWarningCtaTransferFunds,[h.AccountCreated]:h.AccountCreated};function x(e){const t=e.type||"type not provided";let n;if(!t||!(t in b))throw new _(t);n=b[t];const i=function(e,t){switch(e){case h.Load:return{type:e};case h.Ping:return C(t,"mx/ping","user_guid","string"),C(t,"mx/ping","session_guid","string"),{type:e,user_guid:t.user_guid,session_guid:t.session_guid};case h.Navigation:return C(t,"mx/navigation","user_guid","string"),C(t,"mx/navigation","session_guid","string"),C(t,"mx/navigation","did_go_back","boolean"),{type:e,user_guid:t.user_guid,session_guid:t.session_guid,did_go_back:t.did_go_back};case h.FocusTrap:return C(t,"mx/focusTrap","user_guid","string"),C(t,"mx/focusTrap","session_guid","string"),{type:e,user_guid:t.user_guid,session_guid:t.session_guid};case h.ClientOAuthComplete:return C(t,"mx/client/oauthComplete","url","string"),{type:e,url:t.url};case h.ConnectLoaded:return C(t,"mx/connect/loaded","user_guid","string"),C(t,"mx/connect/loaded","session_guid","string"),C(t,"mx/connect/loaded","initial_step",["search","selectMember","enterCreds","mfa","connected","loginError","disclosure"]),{type:e,user_guid:t.user_guid,session_guid:t.session_guid,initial_step:t.initial_step};case h.ConnectEnterCredentials:return C(t,"mx/connect/enterCredentials","user_guid","string"),C(t,"mx/connect/enterCredentials","session_guid","string"),C(t,"mx/connect/enterCredentials","institution",{code:"string",guid:"string"}),{type:e,user_guid:t.user_guid,session_guid:t.session_guid,institution:t.institution};case h.ConnectInstitutionSearch:return C(t,"mx/connect/institutionSearch","user_guid","string"),C(t,"mx/connect/institutionSearch","session_guid","string"),C(t,"mx/connect/institutionSearch","query","string"),{type:e,user_guid:t.user_guid,session_guid:t.session_guid,query:t.query};case h.ConnectSelectedInstitution:return C(t,"mx/connect/selectedInstitution","user_guid","string"),C(t,"mx/connect/selectedInstitution","session_guid","string"),C(t,"mx/connect/selectedInstitution","code","string"),C(t,"mx/connect/selectedInstitution","guid","string"),C(t,"mx/connect/selectedInstitution","name","string"),C(t,"mx/connect/selectedInstitution","url","string"),{type:e,user_guid:t.user_guid,session_guid:t.session_guid,code:t.code,guid:t.guid,name:t.name,url:t.url};case h.ConnectMemberConnected:return C(t,"mx/connect/memberConnected","user_guid","string"),C(t,"mx/connect/memberConnected","session_guid","string"),C(t,"mx/connect/memberConnected","member_guid","string"),{type:e,user_guid:t.user_guid,session_guid:t.session_guid,member_guid:t.member_guid};case h.ConnectConnectedPrimaryAction:return C(t,"mx/connect/connected/primaryAction","user_guid","string"),C(t,"mx/connect/connected/primaryAction","session_guid","string"),{type:e,user_guid:t.user_guid,session_guid:t.session_guid};case h.ConnectMemberDeleted:return C(t,"mx/connect/memberDeleted","user_guid","string"),C(t,"mx/connect/memberDeleted","session_guid","string"),C(t,"mx/connect/memberDeleted","member_guid","string"),{type:e,user_guid:t.user_guid,session_guid:t.session_guid,member_guid:t.member_guid};case h.ConnectCreateMemberError:return C(t,"mx/connect/createMemberError","user_guid","string"),C(t,"mx/connect/createMemberError","session_guid","string"),C(t,"mx/connect/createMemberError","institution_guid","string"),C(t,"mx/connect/createMemberError","institution_code","string"),{type:e,user_guid:t.user_guid,session_guid:t.session_guid,institution_guid:t.institution_guid,institution_code:t.institution_code};case h.ConnectMemberStatusUpdate:return C(t,"mx/connect/memberStatusUpdate","user_guid","string"),C(t,"mx/connect/memberStatusUpdate","session_guid","string"),C(t,"mx/connect/memberStatusUpdate","member_guid","string"),C(t,"mx/connect/memberStatusUpdate","connection_status","number"),{type:e,user_guid:t.user_guid,session_guid:t.session_guid,member_guid:t.member_guid,connection_status:t.connection_status};case h.ConnectOAuthError:return C(t,"mx/connect/oauthError","user_guid","string"),C(t,"mx/connect/oauthError","session_guid","string"),C(t,"mx/connect/oauthError","member_guid","string",{optional:!0}),{type:e,user_guid:t.user_guid,session_guid:t.session_guid,member_guid:t.member_guid};case h.ConnectOAuthRequested:return C(t,"mx/connect/oauthRequested","user_guid","string"),C(t,"mx/connect/oauthRequested","session_guid","string"),C(t,"mx/connect/oauthRequested","url","string"),C(t,"mx/connect/oauthRequested","member_guid","string"),{type:e,user_guid:t.user_guid,session_guid:t.session_guid,url:t.url,member_guid:t.member_guid};case h.ConnectStepChange:return C(t,"mx/connect/stepChange","user_guid","string"),C(t,"mx/connect/stepChange","session_guid","string"),C(t,"mx/connect/stepChange","previous","string"),C(t,"mx/connect/stepChange","current","string"),{type:e,user_guid:t.user_guid,session_guid:t.session_guid,previous:t.previous,current:t.current};case h.ConnectSubmitMFA:return C(t,"mx/connect/submitMFA","user_guid","string"),C(t,"mx/connect/submitMFA","session_guid","string"),C(t,"mx/connect/submitMFA","member_guid","string"),{type:e,user_guid:t.user_guid,session_guid:t.session_guid,member_guid:t.member_guid};case h.ConnectUpdateCredentials:return C(t,"mx/connect/updateCredentials","user_guid","string"),C(t,"mx/connect/updateCredentials","session_guid","string"),C(t,"mx/connect/updateCredentials","member_guid","string"),C(t,"mx/connect/updateCredentials","institution",{code:"string",guid:"string"}),{type:e,user_guid:t.user_guid,session_guid:t.session_guid,member_guid:t.member_guid,institution:t.institution};case h.PulseOverdraftWarningCtaTransferFunds:return C(t,"mx/pulse/overdraftWarning/cta/transferFunds","account_guid","string"),C(t,"mx/pulse/overdraftWarning/cta/transferFunds","amount","number"),{type:e,account_guid:t.account_guid,amount:t.amount};case h.AccountCreated:return C(t,"mx/account/created","guid","string"),{type:e,guid:t.guid};default:throw new _(e)}}(n,e.metadata||{});return i}function f(e,t,n){if(t instanceof l)n.onInvalidMessageError?.(e,t);else{if(!(t instanceof _))throw t;n.onInvalidMessageError?.(e,t)}}function y(e,t){t.onMessage?.(e)}function w(e,t){try{y(e,t);!function(e,t){switch(e.type){case h.Load:t.onLoad?.(e);break;case h.Ping:t.onPing?.(e);break;case h.Navigation:t.onNavigation?.(e);break;case h.FocusTrap:t.onFocusTrap?.(e);break;case h.AccountCreated:t.onAccountCreated?.(e);break;default:throw new _(e.type)}}(x(e.data),t)}catch(n){f(e,n,t)}}function M(e,t){try{y(e,t);!function(e,t){switch(e.type){case h.Load:t.onLoad?.(e);break;case h.Ping:t.onPing?.(e);break;case h.Navigation:t.onNavigation?.(e);break;case h.FocusTrap:t.onFocusTrap?.(e);break;case h.AccountCreated:t.onAccountCreated?.(e);break;case h.ConnectLoaded:t.onLoaded?.(e);break;case h.ConnectEnterCredentials:t.onEnterCredentials?.(e);break;case h.ConnectInstitutionSearch:t.onInstitutionSearch?.(e);break;case h.ConnectSelectedInstitution:t.onSelectedInstitution?.(e);break;case h.ConnectMemberConnected:t.onMemberConnected?.(e);break;case h.ConnectConnectedPrimaryAction:t.onConnectedPrimaryAction?.(e);break;case h.ConnectMemberDeleted:t.onMemberDeleted?.(e);break;case h.ConnectCreateMemberError:t.onCreateMemberError?.(e);break;case h.ConnectMemberStatusUpdate:t.onMemberStatusUpdate?.(e);break;case h.ConnectOAuthError:t.onOAuthError?.(e);break;case h.ConnectOAuthRequested:t.onOAuthRequested?.(e);break;case h.ConnectStepChange:t.onStepChange?.(e);break;case h.ConnectSubmitMFA:t.onSubmitMFA?.(e);break;case h.ConnectUpdateCredentials:t.onUpdateCredentials?.(e);break;default:throw new _(e.type)}}(x(e.data),t)}catch(n){f(e,n,t)}}function W(e,t){try{y(e,t);!function(e,t){switch(e.type){case h.Load:t.onLoad?.(e);break;case h.Ping:t.onPing?.(e);break;case h.Navigation:t.onNavigation?.(e);break;case h.FocusTrap:t.onFocusTrap?.(e);break;case h.AccountCreated:t.onAccountCreated?.(e);break;case h.PulseOverdraftWarningCtaTransferFunds:t.onOverdraftWarningCtaTransferFunds?.(e);break;default:throw new _(e.type)}}(x(e.data),t)}catch(n){f(e,n,t)}}class A{constructor(e){if(this.isUnmounting=!1,this.options=e,this.iframe=document.createElement("iframe"),this.style=e.style||{border:"none",height:"550px",width:"320px"},this.messageCallback=e=>{this.handleMXPostMessage(e)},"string"==typeof e.container){const t=document.querySelector(e.container);if(!t)throw new Error(`Unable to find widget container. Ensure that an element matching a selector for '${this.options.container}' is available in the DOM before you initialize the widget.`);this.container=t}else{if(!(e.container instanceof Element))throw new Error("Invalid or missing value for container property, expecting a query selector string or a DOM Element.");this.container=e.container}this.setupIframe(),this.setupListener()}get widgetType(){if(this.options.widgetType)return this.options.widgetType;throw new Error("Missing value for widgetType property, expecting a string (eg. connect_widget).")}get dispatcher(){return w}navigateBack(){return new Promise((e=>{const t=this.iframe.contentWindow,n={mx:!0,type:h.Navigation,payload:{action:"back"}};if(!t)throw new Error("Unable to navigate back, iframe element is not available.");const i=t=>{t.data.type===h.Navigation&&(window.removeEventListener("message",i),e(t.data.metadata.did_go_back))};window.addEventListener("message",i,!1),t.postMessage(JSON.stringify(n),this.targetOrigin)}))}ping(){this.postMessageToWidget({type:"ping"})}unmount(){this.isUnmounting=!0,this.teardownListener(),this.teardownIframe()}get targetOrigin(){var e;const t=/^https?:\/\/[^/]+/i;let n;return this.ssoUrl&&this.ssoUrl.match(t)&&(n=null===(e=this.ssoUrl.match(t))||void 0===e?void 0:e[0]),n||"https://widgets.moneydesktop.com"}handleMXPostMessage(e){e.data.mx&&(this.dispatcher(e,this.options),e.data.type===h.Load&&this.postMessageToWidget({type:"mx/sdk/info",metadata:{sdk:"web",version:"0.0.10"}}))}postMessageToWidget(e){if(!this.iframe.contentWindow)throw new Error("Unable to postMessage to widget, iframe doesn't exist");this.iframe.contentWindow.postMessage(JSON.stringify(e),this.targetOrigin)}setupIframe(){(function(e){if(function(e){return"url"in e&&"string"==typeof e.url}(e))return Promise.resolve(e.url);const t=e.ssoRequestBuilder||d,n=e.ssoRequestPreprocess||g,i=e.ssoRequestPostprocess||u,s=e.onSsoUrlLoadError||p,r=n(t(e));return fetch(r.url,r.options).then(m).then(i).catch(s)})(Object.assign(Object.assign({},this.options),{widgetType:this.widgetType})).then((e=>{!this.isUnmounting&&e&&(this.ssoUrl=e,this.iframe.setAttribute("data-test-id","mx-widget-iframe"),this.iframe.setAttribute("title",this.options.iframeTitle||"Widget Iframe"),this.iframe.setAttribute("src",e),Object.keys(this.style).forEach((e=>{this.iframe.style[e]=this.style[e]})),this.container.appendChild(this.iframe))}))}teardownIframe(){this.container.contains(this.iframe)&&this.container.removeChild(this.iframe)}setupListener(){window.addEventListener("message",this.messageCallback,!1)}teardownListener(){window.removeEventListener("message",this.messageCallback,!1)}}exports.AccountsWidget=class extends A{get widgetType(){return c.AccountsWidget}},exports.BudgetsWidget=class extends A{get widgetType(){return c.BudgetsWidget}},exports.ConnectWidget=class extends A{get widgetType(){return c.ConnectWidget}get dispatcher(){return M}},exports.ConnectionsWidget=class extends A{get widgetType(){return c.ConnectionsWidget}},exports.DebtsWidget=class extends A{get widgetType(){return c.DebtsWidget}},exports.FinstrongWidget=class extends A{get widgetType(){return c.FinstrongWidget}},exports.GoalsWidget=class extends A{get widgetType(){return c.GoalsWidget}},exports.HelpWidget=class extends A{get widgetType(){return c.HelpWidget}},exports.MasterWidget=class extends A{get widgetType(){return c.MasterWidget}},exports.MiniBudgetsWidget=class extends A{get widgetType(){return c.MiniBudgetsWidget}},exports.MiniFinstrongWidget=class extends A{get widgetType(){return c.MiniFinstrongWidget}},exports.MiniPulseCarouselWidget=class extends A{get widgetType(){return c.MiniPulseCarouselWidget}get dispatcher(){return W}},exports.MiniSpendingWidget=class extends A{get widgetType(){return c.MiniSpendingWidget}},exports.PulseWidget=class extends A{get widgetType(){return c.PulseWidget}get dispatcher(){return W}},exports.SettingsWidget=class extends A{get widgetType(){return c.SettingsWidget}},exports.SpendingWidget=class extends A{get widgetType(){return c.SpendingWidget}},exports.TransactionsWidget=class extends A{get widgetType(){return c.TransactionsWidget}},exports.TrendsWidget=class extends A{get widgetType(){return c.TrendsWidget}},exports.Widget=A; |
@@ -196,2 +196,4 @@ function isSsoUrlMethodUrl(props) { | ||
const sdkVersion = "0.0.10"; | ||
// This is an internal error. Thrown when we are decoding a post message's | ||
@@ -768,5 +770,3 @@ // metadata and we encountered a missing field or an invalid value. This | ||
this.messageCallback = (event) => { | ||
if (event.data.mx) { | ||
this.dispatcher(event, this.options); | ||
} | ||
this.handleMXPostMessage(event); | ||
}; | ||
@@ -832,2 +832,17 @@ if (typeof options.container === "string") { | ||
} | ||
handleMXPostMessage(event) { | ||
if (!event.data.mx) { | ||
return; | ||
} | ||
this.dispatcher(event, this.options); | ||
if (event.data.type === Type.Load) { | ||
this.postMessageToWidget({ | ||
type: "mx/sdk/info", | ||
metadata: { | ||
sdk: "web", | ||
version: sdkVersion, | ||
}, | ||
}); | ||
} | ||
} | ||
postMessageToWidget(payload) { | ||
@@ -834,0 +849,0 @@ if (!this.iframe.contentWindow) { |
@@ -1,1 +0,1 @@ | ||
function e(e){return"clientId"in e&&"string"==typeof e.clientId&&"apiKey"in e&&"string"==typeof e.apiKey&&"userGuid"in e&&"string"==typeof e.userGuid&&"environment"in e&&"string"==typeof e.environment}class t extends Error{constructor(){super("Missing required widget props!\n\nComponent needs one of the following groups of props:\n\n - url\n\n - or -\n\n - proxy\n\n - or -\n\n - apiKey\n - clientId\n - environment\n - userGuid"),Object.setPrototypeOf(this,t.prototype)}}class n extends Error{constructor(e){super(`Request failed: ${e}`),this.statusCode=e,Object.setPrototypeOf(this,n.prototype)}}var i;!function(e){e.SAND="sand",e.QA="qa",e.INT="integration",e.PROD="production"}(i||(i={}));const r={[i.SAND]:i.SAND,[i.QA]:i.QA,[i.INT]:i.INT,[i.PROD]:i.PROD};const s={[i.SAND]:"https://api.sand.internal.mx",[i.QA]:"https://api.qa.internal.mx",[i.INT]:"https://int-api.mx.com",[i.PROD]:"https://api.mx.com"};function o(e){const t=function(e){const t=r[e];if(!t)throw new Error(`Invalid MX environment: ${e}`);return t}(e),n=s[t];if(!n)throw new Error(`Missing host for MX environment: ${e}`);return n}var c,a;function u(e){return{client_redirect_url:e.clientRedirectUrl,color_scheme:e.colorScheme,current_institution_code:e.currentInstitutionCode,current_institution_guid:e.currentInstitutionGuid,current_member_guid:e.currentMemberGuid,disable_institution_search:e.disableInstitutionSearch,include_transactions:e.includeTransactions,is_mobile_webview:e.isMobileWebview||!1,mode:e.mode,oauth_referral_source:e.oauthReferralSource,ui_message_version:e.uiMessageVersion||4,ui_message_webview_url_scheme:e.uiMessageWebviewUrlScheme,update_credentials:e.updateCredentials,widget_type:e.widgetType}}function d(e){return e.widget_url.url}function g(n){const i=function(n){if(function(e){return"proxy"in e&&"string"==typeof e.proxy}(n))return function(e){return e.proxy}(n);if(e(n))return function(e){const t=o(e.environment),n=e.userGuid;return`${t}/users/${n}/widget_urls`}(n);throw new t}(n),r=function(t){const n={Accept:"application/vnd.mx.api.v1+json","Content-Type":"application/json"};t.language&&(n["Accept-Language"]=t.language);if(e(t)){const{apiKey:e,clientId:i}=t,r=btoa(`${i}:${e}`);n.Authorization=`Basic ${r}`}const i="cors",r="POST",s=JSON.stringify({widget_url:u(t)});return{method:r,headers:n,body:s,mode:i}}(n);return{url:i,options:r}}function m(e){return e}function p(e){if(!e.ok)throw new n(e.status);return e.json()}function l(e){console.error(e)}!function(e){e.AccountsWidget="accounts_widget",e.BudgetsWidget="budgets_widget",e.ConnectWidget="connect_widget",e.ConnectionsWidget="connections_widget",e.DebtsWidget="debts_widget",e.FinstrongWidget="finstrong_widget",e.GoalsWidget="goals_widget",e.HelpWidget="help_widget",e.MasterWidget="master_widget",e.MiniBudgetsWidget="mini_budgets_widget",e.MiniFinstrongWidget="mini_finstrong_widget",e.MiniPulseCarouselWidget="mini_pulse_carousel_widget",e.MiniSpendingWidget="mini_spending_widget",e.PulseWidget="pulse_widget",e.SettingsWidget="settings_widget",e.SpendingWidget="spending_widget",e.TransactionsWidget="transactions_widget",e.TrendsWidget="trends_widget"}(c||(c={}));class _ extends Error{messageType;field;expectedType;gotValue;constructor(e,t,n,i){super(`Unable to decode '${t}' from '${e}'`),this.messageType=e,this.field=t,this.expectedType=n,this.gotValue=i,Object.setPrototypeOf(this,_.prototype)}}class C extends Error{postMessageType;constructor(e){super(`Unknown post message: ${e}`),this.postMessageType=e,Object.setPrototypeOf(this,C.prototype)}}function h(e,t,n,i,r={}){const s=e[n],o=void 0!==s,c="string"==typeof s,a="number"==typeof s,u="object"==typeof s&&!Array.isArray(s),d="boolean"==typeof s,g="string"===i,m="number"===i,p=i instanceof Array,l="object"==typeof i&&!Array.isArray(i),C="boolean"===i;if(o||!r.optional){if(!o)throw new _(t,n,i,s);if(g&&!c)throw new _(t,n,i,s);if(m&&!a)throw new _(t,n,i,s);if(!(!p||c&&i.includes(s)))throw new _(t,n,i,s);if(l&&!u)throw new _(t,n,i,s);if(C&&!d)throw new _(t,n,i,s);l&&u&&Object.keys(i).forEach((e=>{h(s,t,e,i[e])}))}}!function(e){e.Load="mx/load",e.Ping="mx/ping",e.Navigation="mx/navigation",e.FocusTrap="mx/focusTrap",e.ClientOAuthComplete="mx/client/oauthComplete",e.ConnectLoaded="mx/connect/loaded",e.ConnectEnterCredentials="mx/connect/enterCredentials",e.ConnectInstitutionSearch="mx/connect/institutionSearch",e.ConnectSelectedInstitution="mx/connect/selectedInstitution",e.ConnectMemberConnected="mx/connect/memberConnected",e.ConnectConnectedPrimaryAction="mx/connect/connected/primaryAction",e.ConnectMemberDeleted="mx/connect/memberDeleted",e.ConnectCreateMemberError="mx/connect/createMemberError",e.ConnectMemberStatusUpdate="mx/connect/memberStatusUpdate",e.ConnectOAuthError="mx/connect/oauthError",e.ConnectOAuthRequested="mx/connect/oauthRequested",e.ConnectStepChange="mx/connect/stepChange",e.ConnectSubmitMFA="mx/connect/submitMFA",e.ConnectUpdateCredentials="mx/connect/updateCredentials",e.PulseOverdraftWarningCtaTransferFunds="mx/pulse/overdraftWarning/cta/transferFunds",e.AccountCreated="mx/account/created"}(a||(a={}));const b={[a.Load]:a.Load,[a.Ping]:a.Ping,[a.Navigation]:a.Navigation,[a.FocusTrap]:a.FocusTrap,"mx/focustrap":a.FocusTrap,[a.ClientOAuthComplete]:a.ClientOAuthComplete,"mx/client/oauthcomplete":a.ClientOAuthComplete,[a.ConnectLoaded]:a.ConnectLoaded,[a.ConnectEnterCredentials]:a.ConnectEnterCredentials,"mx/connect/entercredentials":a.ConnectEnterCredentials,[a.ConnectInstitutionSearch]:a.ConnectInstitutionSearch,"mx/connect/institutionsearch":a.ConnectInstitutionSearch,[a.ConnectSelectedInstitution]:a.ConnectSelectedInstitution,"mx/connect/selectedinstitution":a.ConnectSelectedInstitution,[a.ConnectMemberConnected]:a.ConnectMemberConnected,"mx/connect/memberconnected":a.ConnectMemberConnected,[a.ConnectConnectedPrimaryAction]:a.ConnectConnectedPrimaryAction,"mx/connect/connected/primaryaction":a.ConnectConnectedPrimaryAction,[a.ConnectMemberDeleted]:a.ConnectMemberDeleted,"mx/connect/memberdeleted":a.ConnectMemberDeleted,[a.ConnectCreateMemberError]:a.ConnectCreateMemberError,"mx/connect/createmembererror":a.ConnectCreateMemberError,[a.ConnectMemberStatusUpdate]:a.ConnectMemberStatusUpdate,"mx/connect/memberstatusupdate":a.ConnectMemberStatusUpdate,[a.ConnectOAuthError]:a.ConnectOAuthError,"mx/connect/oautherror":a.ConnectOAuthError,[a.ConnectOAuthRequested]:a.ConnectOAuthRequested,"mx/connect/oauthrequested":a.ConnectOAuthRequested,[a.ConnectStepChange]:a.ConnectStepChange,"mx/connect/stepchange":a.ConnectStepChange,[a.ConnectSubmitMFA]:a.ConnectSubmitMFA,"mx/connect/submitmfa":a.ConnectSubmitMFA,[a.ConnectUpdateCredentials]:a.ConnectUpdateCredentials,"mx/connect/updatecredentials":a.ConnectUpdateCredentials,[a.PulseOverdraftWarningCtaTransferFunds]:a.PulseOverdraftWarningCtaTransferFunds,"mx/pulse/overdraftwarning/cta/transferfunds":a.PulseOverdraftWarningCtaTransferFunds,[a.AccountCreated]:a.AccountCreated};function f(e){const t=e.type||"type not provided";let n;if(!t||!(t in b))throw new C(t);n=b[t];const i=function(e,t){switch(e){case a.Load:return{type:e};case a.Ping:return h(t,"mx/ping","user_guid","string"),h(t,"mx/ping","session_guid","string"),{type:e,user_guid:t.user_guid,session_guid:t.session_guid};case a.Navigation:return h(t,"mx/navigation","user_guid","string"),h(t,"mx/navigation","session_guid","string"),h(t,"mx/navigation","did_go_back","boolean"),{type:e,user_guid:t.user_guid,session_guid:t.session_guid,did_go_back:t.did_go_back};case a.FocusTrap:return h(t,"mx/focusTrap","user_guid","string"),h(t,"mx/focusTrap","session_guid","string"),{type:e,user_guid:t.user_guid,session_guid:t.session_guid};case a.ClientOAuthComplete:return h(t,"mx/client/oauthComplete","url","string"),{type:e,url:t.url};case a.ConnectLoaded:return h(t,"mx/connect/loaded","user_guid","string"),h(t,"mx/connect/loaded","session_guid","string"),h(t,"mx/connect/loaded","initial_step",["search","selectMember","enterCreds","mfa","connected","loginError","disclosure"]),{type:e,user_guid:t.user_guid,session_guid:t.session_guid,initial_step:t.initial_step};case a.ConnectEnterCredentials:return h(t,"mx/connect/enterCredentials","user_guid","string"),h(t,"mx/connect/enterCredentials","session_guid","string"),h(t,"mx/connect/enterCredentials","institution",{code:"string",guid:"string"}),{type:e,user_guid:t.user_guid,session_guid:t.session_guid,institution:t.institution};case a.ConnectInstitutionSearch:return h(t,"mx/connect/institutionSearch","user_guid","string"),h(t,"mx/connect/institutionSearch","session_guid","string"),h(t,"mx/connect/institutionSearch","query","string"),{type:e,user_guid:t.user_guid,session_guid:t.session_guid,query:t.query};case a.ConnectSelectedInstitution:return h(t,"mx/connect/selectedInstitution","user_guid","string"),h(t,"mx/connect/selectedInstitution","session_guid","string"),h(t,"mx/connect/selectedInstitution","code","string"),h(t,"mx/connect/selectedInstitution","guid","string"),h(t,"mx/connect/selectedInstitution","name","string"),h(t,"mx/connect/selectedInstitution","url","string"),{type:e,user_guid:t.user_guid,session_guid:t.session_guid,code:t.code,guid:t.guid,name:t.name,url:t.url};case a.ConnectMemberConnected:return h(t,"mx/connect/memberConnected","user_guid","string"),h(t,"mx/connect/memberConnected","session_guid","string"),h(t,"mx/connect/memberConnected","member_guid","string"),{type:e,user_guid:t.user_guid,session_guid:t.session_guid,member_guid:t.member_guid};case a.ConnectConnectedPrimaryAction:return h(t,"mx/connect/connected/primaryAction","user_guid","string"),h(t,"mx/connect/connected/primaryAction","session_guid","string"),{type:e,user_guid:t.user_guid,session_guid:t.session_guid};case a.ConnectMemberDeleted:return h(t,"mx/connect/memberDeleted","user_guid","string"),h(t,"mx/connect/memberDeleted","session_guid","string"),h(t,"mx/connect/memberDeleted","member_guid","string"),{type:e,user_guid:t.user_guid,session_guid:t.session_guid,member_guid:t.member_guid};case a.ConnectCreateMemberError:return h(t,"mx/connect/createMemberError","user_guid","string"),h(t,"mx/connect/createMemberError","session_guid","string"),h(t,"mx/connect/createMemberError","institution_guid","string"),h(t,"mx/connect/createMemberError","institution_code","string"),{type:e,user_guid:t.user_guid,session_guid:t.session_guid,institution_guid:t.institution_guid,institution_code:t.institution_code};case a.ConnectMemberStatusUpdate:return h(t,"mx/connect/memberStatusUpdate","user_guid","string"),h(t,"mx/connect/memberStatusUpdate","session_guid","string"),h(t,"mx/connect/memberStatusUpdate","member_guid","string"),h(t,"mx/connect/memberStatusUpdate","connection_status","number"),{type:e,user_guid:t.user_guid,session_guid:t.session_guid,member_guid:t.member_guid,connection_status:t.connection_status};case a.ConnectOAuthError:return h(t,"mx/connect/oauthError","user_guid","string"),h(t,"mx/connect/oauthError","session_guid","string"),h(t,"mx/connect/oauthError","member_guid","string",{optional:!0}),{type:e,user_guid:t.user_guid,session_guid:t.session_guid,member_guid:t.member_guid};case a.ConnectOAuthRequested:return h(t,"mx/connect/oauthRequested","user_guid","string"),h(t,"mx/connect/oauthRequested","session_guid","string"),h(t,"mx/connect/oauthRequested","url","string"),h(t,"mx/connect/oauthRequested","member_guid","string"),{type:e,user_guid:t.user_guid,session_guid:t.session_guid,url:t.url,member_guid:t.member_guid};case a.ConnectStepChange:return h(t,"mx/connect/stepChange","user_guid","string"),h(t,"mx/connect/stepChange","session_guid","string"),h(t,"mx/connect/stepChange","previous","string"),h(t,"mx/connect/stepChange","current","string"),{type:e,user_guid:t.user_guid,session_guid:t.session_guid,previous:t.previous,current:t.current};case a.ConnectSubmitMFA:return h(t,"mx/connect/submitMFA","user_guid","string"),h(t,"mx/connect/submitMFA","session_guid","string"),h(t,"mx/connect/submitMFA","member_guid","string"),{type:e,user_guid:t.user_guid,session_guid:t.session_guid,member_guid:t.member_guid};case a.ConnectUpdateCredentials:return h(t,"mx/connect/updateCredentials","user_guid","string"),h(t,"mx/connect/updateCredentials","session_guid","string"),h(t,"mx/connect/updateCredentials","member_guid","string"),h(t,"mx/connect/updateCredentials","institution",{code:"string",guid:"string"}),{type:e,user_guid:t.user_guid,session_guid:t.session_guid,member_guid:t.member_guid,institution:t.institution};case a.PulseOverdraftWarningCtaTransferFunds:return h(t,"mx/pulse/overdraftWarning/cta/transferFunds","account_guid","string"),h(t,"mx/pulse/overdraftWarning/cta/transferFunds","amount","number"),{type:e,account_guid:t.account_guid,amount:t.amount};case a.AccountCreated:return h(t,"mx/account/created","guid","string"),{type:e,guid:t.guid};default:throw new C(e)}}(n,e.metadata||{});return i}function x(e,t,n){if(t instanceof _)n.onInvalidMessageError?.(e,t);else{if(!(t instanceof C))throw t;n.onInvalidMessageError?.(e,t)}}function y(e,t){t.onMessage?.(e)}function w(e,t){try{y(e,t);!function(e,t){switch(e.type){case a.Load:t.onLoad?.(e);break;case a.Ping:t.onPing?.(e);break;case a.Navigation:t.onNavigation?.(e);break;case a.FocusTrap:t.onFocusTrap?.(e);break;case a.AccountCreated:t.onAccountCreated?.(e);break;default:throw new C(e.type)}}(f(e.data),t)}catch(n){x(e,n,t)}}function M(e,t){try{y(e,t);!function(e,t){switch(e.type){case a.Load:t.onLoad?.(e);break;case a.Ping:t.onPing?.(e);break;case a.Navigation:t.onNavigation?.(e);break;case a.FocusTrap:t.onFocusTrap?.(e);break;case a.AccountCreated:t.onAccountCreated?.(e);break;case a.ConnectLoaded:t.onLoaded?.(e);break;case a.ConnectEnterCredentials:t.onEnterCredentials?.(e);break;case a.ConnectInstitutionSearch:t.onInstitutionSearch?.(e);break;case a.ConnectSelectedInstitution:t.onSelectedInstitution?.(e);break;case a.ConnectMemberConnected:t.onMemberConnected?.(e);break;case a.ConnectConnectedPrimaryAction:t.onConnectedPrimaryAction?.(e);break;case a.ConnectMemberDeleted:t.onMemberDeleted?.(e);break;case a.ConnectCreateMemberError:t.onCreateMemberError?.(e);break;case a.ConnectMemberStatusUpdate:t.onMemberStatusUpdate?.(e);break;case a.ConnectOAuthError:t.onOAuthError?.(e);break;case a.ConnectOAuthRequested:t.onOAuthRequested?.(e);break;case a.ConnectStepChange:t.onStepChange?.(e);break;case a.ConnectSubmitMFA:t.onSubmitMFA?.(e);break;case a.ConnectUpdateCredentials:t.onUpdateCredentials?.(e);break;default:throw new C(e.type)}}(f(e.data),t)}catch(n){x(e,n,t)}}function A(e,t){try{y(e,t);!function(e,t){switch(e.type){case a.Load:t.onLoad?.(e);break;case a.Ping:t.onPing?.(e);break;case a.Navigation:t.onNavigation?.(e);break;case a.FocusTrap:t.onFocusTrap?.(e);break;case a.AccountCreated:t.onAccountCreated?.(e);break;case a.PulseOverdraftWarningCtaTransferFunds:t.onOverdraftWarningCtaTransferFunds?.(e);break;default:throw new C(e.type)}}(f(e.data),t)}catch(n){x(e,n,t)}}class v{constructor(e){if(this.isUnmounting=!1,this.options=e,this.iframe=document.createElement("iframe"),this.style=e.style||{border:"none",height:"550px",width:"320px"},this.messageCallback=e=>{e.data.mx&&this.dispatcher(e,this.options)},"string"==typeof e.container){const t=document.querySelector(e.container);if(!t)throw new Error(`Unable to find widget container. Ensure that an element matching a selector for '${this.options.container}' is available in the DOM before you initialize the widget.`);this.container=t}else{if(!(e.container instanceof Element))throw new Error("Invalid or missing value for container property, expecting a query selector string or a DOM Element.");this.container=e.container}this.setupIframe(),this.setupListener()}get widgetType(){if(this.options.widgetType)return this.options.widgetType;throw new Error("Missing value for widgetType property, expecting a string (eg. connect_widget).")}get dispatcher(){return w}navigateBack(){return new Promise((e=>{const t=this.iframe.contentWindow,n={mx:!0,type:a.Navigation,payload:{action:"back"}};if(!t)throw new Error("Unable to navigate back, iframe element is not available.");const i=t=>{t.data.type===a.Navigation&&(window.removeEventListener("message",i),e(t.data.metadata.did_go_back))};window.addEventListener("message",i,!1),t.postMessage(JSON.stringify(n),this.targetOrigin)}))}ping(){this.postMessageToWidget({type:"ping"})}unmount(){this.isUnmounting=!0,this.teardownListener(),this.teardownIframe()}get targetOrigin(){var e;const t=/^https?:\/\/[^/]+/i;let n;return this.ssoUrl&&this.ssoUrl.match(t)&&(n=null===(e=this.ssoUrl.match(t))||void 0===e?void 0:e[0]),n||"https://widgets.moneydesktop.com"}postMessageToWidget(e){if(!this.iframe.contentWindow)throw new Error("Unable to postMessage to widget, iframe doesn't exist");this.iframe.contentWindow.postMessage(JSON.stringify(e),this.targetOrigin)}setupIframe(){(function(e){if(function(e){return"url"in e&&"string"==typeof e.url}(e))return Promise.resolve(e.url);const t=e.ssoRequestBuilder||g,n=e.ssoRequestPreprocess||m,i=e.ssoRequestPostprocess||d,r=e.onSsoUrlLoadError||l,s=n(t(e));return fetch(s.url,s.options).then(p).then(i).catch(r)})(Object.assign(Object.assign({},this.options),{widgetType:this.widgetType})).then((e=>{!this.isUnmounting&&e&&(this.ssoUrl=e,this.iframe.setAttribute("data-test-id","mx-widget-iframe"),this.iframe.setAttribute("title",this.options.iframeTitle||"Widget Iframe"),this.iframe.setAttribute("src",e),Object.keys(this.style).forEach((e=>{this.iframe.style[e]=this.style[e]})),this.container.appendChild(this.iframe))}))}teardownIframe(){this.container.contains(this.iframe)&&this.container.removeChild(this.iframe)}setupListener(){window.addEventListener("message",this.messageCallback,!1)}teardownListener(){window.removeEventListener("message",this.messageCallback,!1)}}class T extends v{get widgetType(){return c.AccountsWidget}}class S extends v{get widgetType(){return c.BudgetsWidget}}class E extends v{get widgetType(){return c.ConnectWidget}get dispatcher(){return M}}class W extends v{get widgetType(){return c.ConnectionsWidget}}class O extends v{get widgetType(){return c.DebtsWidget}}class k extends v{get widgetType(){return c.FinstrongWidget}}class I extends v{get widgetType(){return c.GoalsWidget}}class P extends v{get widgetType(){return c.HelpWidget}}class F extends v{get widgetType(){return c.MasterWidget}}class U extends v{get widgetType(){return c.MiniBudgetsWidget}}class L extends v{get widgetType(){return c.MiniFinstrongWidget}}class q extends v{get widgetType(){return c.MiniPulseCarouselWidget}get dispatcher(){return A}}class D extends v{get widgetType(){return c.MiniSpendingWidget}}class N extends v{get widgetType(){return c.PulseWidget}get dispatcher(){return A}}class R extends v{get widgetType(){return c.SettingsWidget}}class j extends v{get widgetType(){return c.SpendingWidget}}class $ extends v{get widgetType(){return c.TransactionsWidget}}class G extends v{get widgetType(){return c.TrendsWidget}}export{T as AccountsWidget,S as BudgetsWidget,E as ConnectWidget,W as ConnectionsWidget,O as DebtsWidget,k as FinstrongWidget,I as GoalsWidget,P as HelpWidget,F as MasterWidget,U as MiniBudgetsWidget,L as MiniFinstrongWidget,q as MiniPulseCarouselWidget,D as MiniSpendingWidget,N as PulseWidget,R as SettingsWidget,j as SpendingWidget,$ as TransactionsWidget,G as TrendsWidget,v as Widget}; | ||
function e(e){return"clientId"in e&&"string"==typeof e.clientId&&"apiKey"in e&&"string"==typeof e.apiKey&&"userGuid"in e&&"string"==typeof e.userGuid&&"environment"in e&&"string"==typeof e.environment}class t extends Error{constructor(){super("Missing required widget props!\n\nComponent needs one of the following groups of props:\n\n - url\n\n - or -\n\n - proxy\n\n - or -\n\n - apiKey\n - clientId\n - environment\n - userGuid"),Object.setPrototypeOf(this,t.prototype)}}class n extends Error{constructor(e){super(`Request failed: ${e}`),this.statusCode=e,Object.setPrototypeOf(this,n.prototype)}}var i;!function(e){e.SAND="sand",e.QA="qa",e.INT="integration",e.PROD="production"}(i||(i={}));const s={[i.SAND]:i.SAND,[i.QA]:i.QA,[i.INT]:i.INT,[i.PROD]:i.PROD};const r={[i.SAND]:"https://api.sand.internal.mx",[i.QA]:"https://api.qa.internal.mx",[i.INT]:"https://int-api.mx.com",[i.PROD]:"https://api.mx.com"};function o(e){const t=function(e){const t=s[e];if(!t)throw new Error(`Invalid MX environment: ${e}`);return t}(e),n=r[t];if(!n)throw new Error(`Missing host for MX environment: ${e}`);return n}var c;function a(e){return{client_redirect_url:e.clientRedirectUrl,color_scheme:e.colorScheme,current_institution_code:e.currentInstitutionCode,current_institution_guid:e.currentInstitutionGuid,current_member_guid:e.currentMemberGuid,disable_institution_search:e.disableInstitutionSearch,include_transactions:e.includeTransactions,is_mobile_webview:e.isMobileWebview||!1,mode:e.mode,oauth_referral_source:e.oauthReferralSource,ui_message_version:e.uiMessageVersion||4,ui_message_webview_url_scheme:e.uiMessageWebviewUrlScheme,update_credentials:e.updateCredentials,widget_type:e.widgetType}}function u(e){return e.widget_url.url}function d(n){const i=function(n){if(function(e){return"proxy"in e&&"string"==typeof e.proxy}(n))return function(e){return e.proxy}(n);if(e(n))return function(e){const t=o(e.environment),n=e.userGuid;return`${t}/users/${n}/widget_urls`}(n);throw new t}(n),s=function(t){const n={Accept:"application/vnd.mx.api.v1+json","Content-Type":"application/json"};t.language&&(n["Accept-Language"]=t.language);if(e(t)){const{apiKey:e,clientId:i}=t,s=btoa(`${i}:${e}`);n.Authorization=`Basic ${s}`}const i="cors",s="POST",r=JSON.stringify({widget_url:a(t)});return{method:s,headers:n,body:r,mode:i}}(n);return{url:i,options:s}}function g(e){return e}function m(e){if(!e.ok)throw new n(e.status);return e.json()}function p(e){console.error(e)}!function(e){e.AccountsWidget="accounts_widget",e.BudgetsWidget="budgets_widget",e.ConnectWidget="connect_widget",e.ConnectionsWidget="connections_widget",e.DebtsWidget="debts_widget",e.FinstrongWidget="finstrong_widget",e.GoalsWidget="goals_widget",e.HelpWidget="help_widget",e.MasterWidget="master_widget",e.MiniBudgetsWidget="mini_budgets_widget",e.MiniFinstrongWidget="mini_finstrong_widget",e.MiniPulseCarouselWidget="mini_pulse_carousel_widget",e.MiniSpendingWidget="mini_spending_widget",e.PulseWidget="pulse_widget",e.SettingsWidget="settings_widget",e.SpendingWidget="spending_widget",e.TransactionsWidget="transactions_widget",e.TrendsWidget="trends_widget"}(c||(c={}));class l extends Error{messageType;field;expectedType;gotValue;constructor(e,t,n,i){super(`Unable to decode '${t}' from '${e}'`),this.messageType=e,this.field=t,this.expectedType=n,this.gotValue=i,Object.setPrototypeOf(this,l.prototype)}}class _ extends Error{postMessageType;constructor(e){super(`Unknown post message: ${e}`),this.postMessageType=e,Object.setPrototypeOf(this,_.prototype)}}function h(e,t,n,i,s={}){const r=e[n],o=void 0!==r,c="string"==typeof r,a="number"==typeof r,u="object"==typeof r&&!Array.isArray(r),d="boolean"==typeof r,g="string"===i,m="number"===i,p=i instanceof Array,_="object"==typeof i&&!Array.isArray(i),C="boolean"===i;if(o||!s.optional){if(!o)throw new l(t,n,i,r);if(g&&!c)throw new l(t,n,i,r);if(m&&!a)throw new l(t,n,i,r);if(!(!p||c&&i.includes(r)))throw new l(t,n,i,r);if(_&&!u)throw new l(t,n,i,r);if(C&&!d)throw new l(t,n,i,r);_&&u&&Object.keys(i).forEach((e=>{h(r,t,e,i[e])}))}}var C;!function(e){e.Load="mx/load",e.Ping="mx/ping",e.Navigation="mx/navigation",e.FocusTrap="mx/focusTrap",e.ClientOAuthComplete="mx/client/oauthComplete",e.ConnectLoaded="mx/connect/loaded",e.ConnectEnterCredentials="mx/connect/enterCredentials",e.ConnectInstitutionSearch="mx/connect/institutionSearch",e.ConnectSelectedInstitution="mx/connect/selectedInstitution",e.ConnectMemberConnected="mx/connect/memberConnected",e.ConnectConnectedPrimaryAction="mx/connect/connected/primaryAction",e.ConnectMemberDeleted="mx/connect/memberDeleted",e.ConnectCreateMemberError="mx/connect/createMemberError",e.ConnectMemberStatusUpdate="mx/connect/memberStatusUpdate",e.ConnectOAuthError="mx/connect/oauthError",e.ConnectOAuthRequested="mx/connect/oauthRequested",e.ConnectStepChange="mx/connect/stepChange",e.ConnectSubmitMFA="mx/connect/submitMFA",e.ConnectUpdateCredentials="mx/connect/updateCredentials",e.PulseOverdraftWarningCtaTransferFunds="mx/pulse/overdraftWarning/cta/transferFunds",e.AccountCreated="mx/account/created"}(C||(C={}));const b={[C.Load]:C.Load,[C.Ping]:C.Ping,[C.Navigation]:C.Navigation,[C.FocusTrap]:C.FocusTrap,"mx/focustrap":C.FocusTrap,[C.ClientOAuthComplete]:C.ClientOAuthComplete,"mx/client/oauthcomplete":C.ClientOAuthComplete,[C.ConnectLoaded]:C.ConnectLoaded,[C.ConnectEnterCredentials]:C.ConnectEnterCredentials,"mx/connect/entercredentials":C.ConnectEnterCredentials,[C.ConnectInstitutionSearch]:C.ConnectInstitutionSearch,"mx/connect/institutionsearch":C.ConnectInstitutionSearch,[C.ConnectSelectedInstitution]:C.ConnectSelectedInstitution,"mx/connect/selectedinstitution":C.ConnectSelectedInstitution,[C.ConnectMemberConnected]:C.ConnectMemberConnected,"mx/connect/memberconnected":C.ConnectMemberConnected,[C.ConnectConnectedPrimaryAction]:C.ConnectConnectedPrimaryAction,"mx/connect/connected/primaryaction":C.ConnectConnectedPrimaryAction,[C.ConnectMemberDeleted]:C.ConnectMemberDeleted,"mx/connect/memberdeleted":C.ConnectMemberDeleted,[C.ConnectCreateMemberError]:C.ConnectCreateMemberError,"mx/connect/createmembererror":C.ConnectCreateMemberError,[C.ConnectMemberStatusUpdate]:C.ConnectMemberStatusUpdate,"mx/connect/memberstatusupdate":C.ConnectMemberStatusUpdate,[C.ConnectOAuthError]:C.ConnectOAuthError,"mx/connect/oautherror":C.ConnectOAuthError,[C.ConnectOAuthRequested]:C.ConnectOAuthRequested,"mx/connect/oauthrequested":C.ConnectOAuthRequested,[C.ConnectStepChange]:C.ConnectStepChange,"mx/connect/stepchange":C.ConnectStepChange,[C.ConnectSubmitMFA]:C.ConnectSubmitMFA,"mx/connect/submitmfa":C.ConnectSubmitMFA,[C.ConnectUpdateCredentials]:C.ConnectUpdateCredentials,"mx/connect/updatecredentials":C.ConnectUpdateCredentials,[C.PulseOverdraftWarningCtaTransferFunds]:C.PulseOverdraftWarningCtaTransferFunds,"mx/pulse/overdraftwarning/cta/transferfunds":C.PulseOverdraftWarningCtaTransferFunds,[C.AccountCreated]:C.AccountCreated};function f(e){const t=e.type||"type not provided";let n;if(!t||!(t in b))throw new _(t);n=b[t];const i=function(e,t){switch(e){case C.Load:return{type:e};case C.Ping:return h(t,"mx/ping","user_guid","string"),h(t,"mx/ping","session_guid","string"),{type:e,user_guid:t.user_guid,session_guid:t.session_guid};case C.Navigation:return h(t,"mx/navigation","user_guid","string"),h(t,"mx/navigation","session_guid","string"),h(t,"mx/navigation","did_go_back","boolean"),{type:e,user_guid:t.user_guid,session_guid:t.session_guid,did_go_back:t.did_go_back};case C.FocusTrap:return h(t,"mx/focusTrap","user_guid","string"),h(t,"mx/focusTrap","session_guid","string"),{type:e,user_guid:t.user_guid,session_guid:t.session_guid};case C.ClientOAuthComplete:return h(t,"mx/client/oauthComplete","url","string"),{type:e,url:t.url};case C.ConnectLoaded:return h(t,"mx/connect/loaded","user_guid","string"),h(t,"mx/connect/loaded","session_guid","string"),h(t,"mx/connect/loaded","initial_step",["search","selectMember","enterCreds","mfa","connected","loginError","disclosure"]),{type:e,user_guid:t.user_guid,session_guid:t.session_guid,initial_step:t.initial_step};case C.ConnectEnterCredentials:return h(t,"mx/connect/enterCredentials","user_guid","string"),h(t,"mx/connect/enterCredentials","session_guid","string"),h(t,"mx/connect/enterCredentials","institution",{code:"string",guid:"string"}),{type:e,user_guid:t.user_guid,session_guid:t.session_guid,institution:t.institution};case C.ConnectInstitutionSearch:return h(t,"mx/connect/institutionSearch","user_guid","string"),h(t,"mx/connect/institutionSearch","session_guid","string"),h(t,"mx/connect/institutionSearch","query","string"),{type:e,user_guid:t.user_guid,session_guid:t.session_guid,query:t.query};case C.ConnectSelectedInstitution:return h(t,"mx/connect/selectedInstitution","user_guid","string"),h(t,"mx/connect/selectedInstitution","session_guid","string"),h(t,"mx/connect/selectedInstitution","code","string"),h(t,"mx/connect/selectedInstitution","guid","string"),h(t,"mx/connect/selectedInstitution","name","string"),h(t,"mx/connect/selectedInstitution","url","string"),{type:e,user_guid:t.user_guid,session_guid:t.session_guid,code:t.code,guid:t.guid,name:t.name,url:t.url};case C.ConnectMemberConnected:return h(t,"mx/connect/memberConnected","user_guid","string"),h(t,"mx/connect/memberConnected","session_guid","string"),h(t,"mx/connect/memberConnected","member_guid","string"),{type:e,user_guid:t.user_guid,session_guid:t.session_guid,member_guid:t.member_guid};case C.ConnectConnectedPrimaryAction:return h(t,"mx/connect/connected/primaryAction","user_guid","string"),h(t,"mx/connect/connected/primaryAction","session_guid","string"),{type:e,user_guid:t.user_guid,session_guid:t.session_guid};case C.ConnectMemberDeleted:return h(t,"mx/connect/memberDeleted","user_guid","string"),h(t,"mx/connect/memberDeleted","session_guid","string"),h(t,"mx/connect/memberDeleted","member_guid","string"),{type:e,user_guid:t.user_guid,session_guid:t.session_guid,member_guid:t.member_guid};case C.ConnectCreateMemberError:return h(t,"mx/connect/createMemberError","user_guid","string"),h(t,"mx/connect/createMemberError","session_guid","string"),h(t,"mx/connect/createMemberError","institution_guid","string"),h(t,"mx/connect/createMemberError","institution_code","string"),{type:e,user_guid:t.user_guid,session_guid:t.session_guid,institution_guid:t.institution_guid,institution_code:t.institution_code};case C.ConnectMemberStatusUpdate:return h(t,"mx/connect/memberStatusUpdate","user_guid","string"),h(t,"mx/connect/memberStatusUpdate","session_guid","string"),h(t,"mx/connect/memberStatusUpdate","member_guid","string"),h(t,"mx/connect/memberStatusUpdate","connection_status","number"),{type:e,user_guid:t.user_guid,session_guid:t.session_guid,member_guid:t.member_guid,connection_status:t.connection_status};case C.ConnectOAuthError:return h(t,"mx/connect/oauthError","user_guid","string"),h(t,"mx/connect/oauthError","session_guid","string"),h(t,"mx/connect/oauthError","member_guid","string",{optional:!0}),{type:e,user_guid:t.user_guid,session_guid:t.session_guid,member_guid:t.member_guid};case C.ConnectOAuthRequested:return h(t,"mx/connect/oauthRequested","user_guid","string"),h(t,"mx/connect/oauthRequested","session_guid","string"),h(t,"mx/connect/oauthRequested","url","string"),h(t,"mx/connect/oauthRequested","member_guid","string"),{type:e,user_guid:t.user_guid,session_guid:t.session_guid,url:t.url,member_guid:t.member_guid};case C.ConnectStepChange:return h(t,"mx/connect/stepChange","user_guid","string"),h(t,"mx/connect/stepChange","session_guid","string"),h(t,"mx/connect/stepChange","previous","string"),h(t,"mx/connect/stepChange","current","string"),{type:e,user_guid:t.user_guid,session_guid:t.session_guid,previous:t.previous,current:t.current};case C.ConnectSubmitMFA:return h(t,"mx/connect/submitMFA","user_guid","string"),h(t,"mx/connect/submitMFA","session_guid","string"),h(t,"mx/connect/submitMFA","member_guid","string"),{type:e,user_guid:t.user_guid,session_guid:t.session_guid,member_guid:t.member_guid};case C.ConnectUpdateCredentials:return h(t,"mx/connect/updateCredentials","user_guid","string"),h(t,"mx/connect/updateCredentials","session_guid","string"),h(t,"mx/connect/updateCredentials","member_guid","string"),h(t,"mx/connect/updateCredentials","institution",{code:"string",guid:"string"}),{type:e,user_guid:t.user_guid,session_guid:t.session_guid,member_guid:t.member_guid,institution:t.institution};case C.PulseOverdraftWarningCtaTransferFunds:return h(t,"mx/pulse/overdraftWarning/cta/transferFunds","account_guid","string"),h(t,"mx/pulse/overdraftWarning/cta/transferFunds","amount","number"),{type:e,account_guid:t.account_guid,amount:t.amount};case C.AccountCreated:return h(t,"mx/account/created","guid","string"),{type:e,guid:t.guid};default:throw new _(e)}}(n,e.metadata||{});return i}function x(e,t,n){if(t instanceof l)n.onInvalidMessageError?.(e,t);else{if(!(t instanceof _))throw t;n.onInvalidMessageError?.(e,t)}}function y(e,t){t.onMessage?.(e)}function w(e,t){try{y(e,t);!function(e,t){switch(e.type){case C.Load:t.onLoad?.(e);break;case C.Ping:t.onPing?.(e);break;case C.Navigation:t.onNavigation?.(e);break;case C.FocusTrap:t.onFocusTrap?.(e);break;case C.AccountCreated:t.onAccountCreated?.(e);break;default:throw new _(e.type)}}(f(e.data),t)}catch(n){x(e,n,t)}}function M(e,t){try{y(e,t);!function(e,t){switch(e.type){case C.Load:t.onLoad?.(e);break;case C.Ping:t.onPing?.(e);break;case C.Navigation:t.onNavigation?.(e);break;case C.FocusTrap:t.onFocusTrap?.(e);break;case C.AccountCreated:t.onAccountCreated?.(e);break;case C.ConnectLoaded:t.onLoaded?.(e);break;case C.ConnectEnterCredentials:t.onEnterCredentials?.(e);break;case C.ConnectInstitutionSearch:t.onInstitutionSearch?.(e);break;case C.ConnectSelectedInstitution:t.onSelectedInstitution?.(e);break;case C.ConnectMemberConnected:t.onMemberConnected?.(e);break;case C.ConnectConnectedPrimaryAction:t.onConnectedPrimaryAction?.(e);break;case C.ConnectMemberDeleted:t.onMemberDeleted?.(e);break;case C.ConnectCreateMemberError:t.onCreateMemberError?.(e);break;case C.ConnectMemberStatusUpdate:t.onMemberStatusUpdate?.(e);break;case C.ConnectOAuthError:t.onOAuthError?.(e);break;case C.ConnectOAuthRequested:t.onOAuthRequested?.(e);break;case C.ConnectStepChange:t.onStepChange?.(e);break;case C.ConnectSubmitMFA:t.onSubmitMFA?.(e);break;case C.ConnectUpdateCredentials:t.onUpdateCredentials?.(e);break;default:throw new _(e.type)}}(f(e.data),t)}catch(n){x(e,n,t)}}function A(e,t){try{y(e,t);!function(e,t){switch(e.type){case C.Load:t.onLoad?.(e);break;case C.Ping:t.onPing?.(e);break;case C.Navigation:t.onNavigation?.(e);break;case C.FocusTrap:t.onFocusTrap?.(e);break;case C.AccountCreated:t.onAccountCreated?.(e);break;case C.PulseOverdraftWarningCtaTransferFunds:t.onOverdraftWarningCtaTransferFunds?.(e);break;default:throw new _(e.type)}}(f(e.data),t)}catch(n){x(e,n,t)}}class v{constructor(e){if(this.isUnmounting=!1,this.options=e,this.iframe=document.createElement("iframe"),this.style=e.style||{border:"none",height:"550px",width:"320px"},this.messageCallback=e=>{this.handleMXPostMessage(e)},"string"==typeof e.container){const t=document.querySelector(e.container);if(!t)throw new Error(`Unable to find widget container. Ensure that an element matching a selector for '${this.options.container}' is available in the DOM before you initialize the widget.`);this.container=t}else{if(!(e.container instanceof Element))throw new Error("Invalid or missing value for container property, expecting a query selector string or a DOM Element.");this.container=e.container}this.setupIframe(),this.setupListener()}get widgetType(){if(this.options.widgetType)return this.options.widgetType;throw new Error("Missing value for widgetType property, expecting a string (eg. connect_widget).")}get dispatcher(){return w}navigateBack(){return new Promise((e=>{const t=this.iframe.contentWindow,n={mx:!0,type:C.Navigation,payload:{action:"back"}};if(!t)throw new Error("Unable to navigate back, iframe element is not available.");const i=t=>{t.data.type===C.Navigation&&(window.removeEventListener("message",i),e(t.data.metadata.did_go_back))};window.addEventListener("message",i,!1),t.postMessage(JSON.stringify(n),this.targetOrigin)}))}ping(){this.postMessageToWidget({type:"ping"})}unmount(){this.isUnmounting=!0,this.teardownListener(),this.teardownIframe()}get targetOrigin(){var e;const t=/^https?:\/\/[^/]+/i;let n;return this.ssoUrl&&this.ssoUrl.match(t)&&(n=null===(e=this.ssoUrl.match(t))||void 0===e?void 0:e[0]),n||"https://widgets.moneydesktop.com"}handleMXPostMessage(e){e.data.mx&&(this.dispatcher(e,this.options),e.data.type===C.Load&&this.postMessageToWidget({type:"mx/sdk/info",metadata:{sdk:"web",version:"0.0.10"}}))}postMessageToWidget(e){if(!this.iframe.contentWindow)throw new Error("Unable to postMessage to widget, iframe doesn't exist");this.iframe.contentWindow.postMessage(JSON.stringify(e),this.targetOrigin)}setupIframe(){(function(e){if(function(e){return"url"in e&&"string"==typeof e.url}(e))return Promise.resolve(e.url);const t=e.ssoRequestBuilder||d,n=e.ssoRequestPreprocess||g,i=e.ssoRequestPostprocess||u,s=e.onSsoUrlLoadError||p,r=n(t(e));return fetch(r.url,r.options).then(m).then(i).catch(s)})(Object.assign(Object.assign({},this.options),{widgetType:this.widgetType})).then((e=>{!this.isUnmounting&&e&&(this.ssoUrl=e,this.iframe.setAttribute("data-test-id","mx-widget-iframe"),this.iframe.setAttribute("title",this.options.iframeTitle||"Widget Iframe"),this.iframe.setAttribute("src",e),Object.keys(this.style).forEach((e=>{this.iframe.style[e]=this.style[e]})),this.container.appendChild(this.iframe))}))}teardownIframe(){this.container.contains(this.iframe)&&this.container.removeChild(this.iframe)}setupListener(){window.addEventListener("message",this.messageCallback,!1)}teardownListener(){window.removeEventListener("message",this.messageCallback,!1)}}class T extends v{get widgetType(){return c.AccountsWidget}}class S extends v{get widgetType(){return c.BudgetsWidget}}class E extends v{get widgetType(){return c.ConnectWidget}get dispatcher(){return M}}class W extends v{get widgetType(){return c.ConnectionsWidget}}class O extends v{get widgetType(){return c.DebtsWidget}}class k extends v{get widgetType(){return c.FinstrongWidget}}class P extends v{get widgetType(){return c.GoalsWidget}}class I extends v{get widgetType(){return c.HelpWidget}}class F extends v{get widgetType(){return c.MasterWidget}}class U extends v{get widgetType(){return c.MiniBudgetsWidget}}class L extends v{get widgetType(){return c.MiniFinstrongWidget}}class q extends v{get widgetType(){return c.MiniPulseCarouselWidget}get dispatcher(){return A}}class D extends v{get widgetType(){return c.MiniSpendingWidget}}class N extends v{get widgetType(){return c.PulseWidget}get dispatcher(){return A}}class R extends v{get widgetType(){return c.SettingsWidget}}class j extends v{get widgetType(){return c.SpendingWidget}}class $ extends v{get widgetType(){return c.TransactionsWidget}}class G extends v{get widgetType(){return c.TrendsWidget}}export{T as AccountsWidget,S as BudgetsWidget,E as ConnectWidget,W as ConnectionsWidget,O as DebtsWidget,k as FinstrongWidget,P as GoalsWidget,I as HelpWidget,F as MasterWidget,U as MiniBudgetsWidget,L as MiniFinstrongWidget,q as MiniPulseCarouselWidget,D as MiniSpendingWidget,N as PulseWidget,R as SettingsWidget,j as SpendingWidget,$ as TransactionsWidget,G as TrendsWidget,v as Widget}; |
@@ -24,2 +24,3 @@ import { Props as UrlLoadingProps, Type, ConnectWidgetConfigurationProps } from "./sso"; | ||
get targetOrigin(): string; | ||
private handleMXPostMessage; | ||
private postMessageToWidget; | ||
@@ -26,0 +27,0 @@ private setupIframe; |
@@ -202,2 +202,4 @@ (function (global, factory) { | ||
const sdkVersion = "0.0.10"; | ||
// This is an internal error. Thrown when we are decoding a post message's | ||
@@ -774,5 +776,3 @@ // metadata and we encountered a missing field or an invalid value. This | ||
this.messageCallback = (event) => { | ||
if (event.data.mx) { | ||
this.dispatcher(event, this.options); | ||
} | ||
this.handleMXPostMessage(event); | ||
}; | ||
@@ -838,2 +838,17 @@ if (typeof options.container === "string") { | ||
} | ||
handleMXPostMessage(event) { | ||
if (!event.data.mx) { | ||
return; | ||
} | ||
this.dispatcher(event, this.options); | ||
if (event.data.type === Type.Load) { | ||
this.postMessageToWidget({ | ||
type: "mx/sdk/info", | ||
metadata: { | ||
sdk: "web", | ||
version: sdkVersion, | ||
}, | ||
}); | ||
} | ||
} | ||
postMessageToWidget(payload) { | ||
@@ -840,0 +855,0 @@ if (!this.iframe.contentWindow) { |
@@ -1,1 +0,1 @@ | ||
!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).widgetSdk={})}(this,(function(e){"use strict";function t(e){return"clientId"in e&&"string"==typeof e.clientId&&"apiKey"in e&&"string"==typeof e.apiKey&&"userGuid"in e&&"string"==typeof e.userGuid&&"environment"in e&&"string"==typeof e.environment}class n extends Error{constructor(){super("Missing required widget props!\n\nComponent needs one of the following groups of props:\n\n - url\n\n - or -\n\n - proxy\n\n - or -\n\n - apiKey\n - clientId\n - environment\n - userGuid"),Object.setPrototypeOf(this,n.prototype)}}class i extends Error{constructor(e){super(`Request failed: ${e}`),this.statusCode=e,Object.setPrototypeOf(this,i.prototype)}}var s;!function(e){e.SAND="sand",e.QA="qa",e.INT="integration",e.PROD="production"}(s||(s={}));const r={[s.SAND]:s.SAND,[s.QA]:s.QA,[s.INT]:s.INT,[s.PROD]:s.PROD};const o={[s.SAND]:"https://api.sand.internal.mx",[s.QA]:"https://api.qa.internal.mx",[s.INT]:"https://int-api.mx.com",[s.PROD]:"https://api.mx.com"};function c(e){const t=function(e){const t=r[e];if(!t)throw new Error(`Invalid MX environment: ${e}`);return t}(e),n=o[t];if(!n)throw new Error(`Missing host for MX environment: ${e}`);return n}var a,u;function d(e){return{client_redirect_url:e.clientRedirectUrl,color_scheme:e.colorScheme,current_institution_code:e.currentInstitutionCode,current_institution_guid:e.currentInstitutionGuid,current_member_guid:e.currentMemberGuid,disable_institution_search:e.disableInstitutionSearch,include_transactions:e.includeTransactions,is_mobile_webview:e.isMobileWebview||!1,mode:e.mode,oauth_referral_source:e.oauthReferralSource,ui_message_version:e.uiMessageVersion||4,ui_message_webview_url_scheme:e.uiMessageWebviewUrlScheme,update_credentials:e.updateCredentials,widget_type:e.widgetType}}function g(e){return e.widget_url.url}function m(e){const i=function(e){if(function(e){return"proxy"in e&&"string"==typeof e.proxy}(e))return function(e){return e.proxy}(e);if(t(e))return function(e){const t=c(e.environment),n=e.userGuid;return`${t}/users/${n}/widget_urls`}(e);throw new n}(e),s=function(e){const n={Accept:"application/vnd.mx.api.v1+json","Content-Type":"application/json"};e.language&&(n["Accept-Language"]=e.language);if(t(e)){const{apiKey:t,clientId:i}=e,s=btoa(`${i}:${t}`);n.Authorization=`Basic ${s}`}const i="cors",s="POST",r=JSON.stringify({widget_url:d(e)});return{method:s,headers:n,body:r,mode:i}}(e);return{url:i,options:s}}function p(e){return e}function l(e){if(!e.ok)throw new i(e.status);return e.json()}function _(e){console.error(e)}!function(e){e.AccountsWidget="accounts_widget",e.BudgetsWidget="budgets_widget",e.ConnectWidget="connect_widget",e.ConnectionsWidget="connections_widget",e.DebtsWidget="debts_widget",e.FinstrongWidget="finstrong_widget",e.GoalsWidget="goals_widget",e.HelpWidget="help_widget",e.MasterWidget="master_widget",e.MiniBudgetsWidget="mini_budgets_widget",e.MiniFinstrongWidget="mini_finstrong_widget",e.MiniPulseCarouselWidget="mini_pulse_carousel_widget",e.MiniSpendingWidget="mini_spending_widget",e.PulseWidget="pulse_widget",e.SettingsWidget="settings_widget",e.SpendingWidget="spending_widget",e.TransactionsWidget="transactions_widget",e.TrendsWidget="trends_widget"}(a||(a={}));class C extends Error{messageType;field;expectedType;gotValue;constructor(e,t,n,i){super(`Unable to decode '${t}' from '${e}'`),this.messageType=e,this.field=t,this.expectedType=n,this.gotValue=i,Object.setPrototypeOf(this,C.prototype)}}class h extends Error{postMessageType;constructor(e){super(`Unknown post message: ${e}`),this.postMessageType=e,Object.setPrototypeOf(this,h.prototype)}}function b(e,t,n,i,s={}){const r=e[n],o=void 0!==r,c="string"==typeof r,a="number"==typeof r,u="object"==typeof r&&!Array.isArray(r),d="boolean"==typeof r,g="string"===i,m="number"===i,p=i instanceof Array,l="object"==typeof i&&!Array.isArray(i),_="boolean"===i;if(o||!s.optional){if(!o)throw new C(t,n,i,r);if(g&&!c)throw new C(t,n,i,r);if(m&&!a)throw new C(t,n,i,r);if(!(!p||c&&i.includes(r)))throw new C(t,n,i,r);if(l&&!u)throw new C(t,n,i,r);if(_&&!d)throw new C(t,n,i,r);l&&u&&Object.keys(i).forEach((e=>{b(r,t,e,i[e])}))}}!function(e){e.Load="mx/load",e.Ping="mx/ping",e.Navigation="mx/navigation",e.FocusTrap="mx/focusTrap",e.ClientOAuthComplete="mx/client/oauthComplete",e.ConnectLoaded="mx/connect/loaded",e.ConnectEnterCredentials="mx/connect/enterCredentials",e.ConnectInstitutionSearch="mx/connect/institutionSearch",e.ConnectSelectedInstitution="mx/connect/selectedInstitution",e.ConnectMemberConnected="mx/connect/memberConnected",e.ConnectConnectedPrimaryAction="mx/connect/connected/primaryAction",e.ConnectMemberDeleted="mx/connect/memberDeleted",e.ConnectCreateMemberError="mx/connect/createMemberError",e.ConnectMemberStatusUpdate="mx/connect/memberStatusUpdate",e.ConnectOAuthError="mx/connect/oauthError",e.ConnectOAuthRequested="mx/connect/oauthRequested",e.ConnectStepChange="mx/connect/stepChange",e.ConnectSubmitMFA="mx/connect/submitMFA",e.ConnectUpdateCredentials="mx/connect/updateCredentials",e.PulseOverdraftWarningCtaTransferFunds="mx/pulse/overdraftWarning/cta/transferFunds",e.AccountCreated="mx/account/created"}(u||(u={}));const f={[u.Load]:u.Load,[u.Ping]:u.Ping,[u.Navigation]:u.Navigation,[u.FocusTrap]:u.FocusTrap,"mx/focustrap":u.FocusTrap,[u.ClientOAuthComplete]:u.ClientOAuthComplete,"mx/client/oauthcomplete":u.ClientOAuthComplete,[u.ConnectLoaded]:u.ConnectLoaded,[u.ConnectEnterCredentials]:u.ConnectEnterCredentials,"mx/connect/entercredentials":u.ConnectEnterCredentials,[u.ConnectInstitutionSearch]:u.ConnectInstitutionSearch,"mx/connect/institutionsearch":u.ConnectInstitutionSearch,[u.ConnectSelectedInstitution]:u.ConnectSelectedInstitution,"mx/connect/selectedinstitution":u.ConnectSelectedInstitution,[u.ConnectMemberConnected]:u.ConnectMemberConnected,"mx/connect/memberconnected":u.ConnectMemberConnected,[u.ConnectConnectedPrimaryAction]:u.ConnectConnectedPrimaryAction,"mx/connect/connected/primaryaction":u.ConnectConnectedPrimaryAction,[u.ConnectMemberDeleted]:u.ConnectMemberDeleted,"mx/connect/memberdeleted":u.ConnectMemberDeleted,[u.ConnectCreateMemberError]:u.ConnectCreateMemberError,"mx/connect/createmembererror":u.ConnectCreateMemberError,[u.ConnectMemberStatusUpdate]:u.ConnectMemberStatusUpdate,"mx/connect/memberstatusupdate":u.ConnectMemberStatusUpdate,[u.ConnectOAuthError]:u.ConnectOAuthError,"mx/connect/oautherror":u.ConnectOAuthError,[u.ConnectOAuthRequested]:u.ConnectOAuthRequested,"mx/connect/oauthrequested":u.ConnectOAuthRequested,[u.ConnectStepChange]:u.ConnectStepChange,"mx/connect/stepchange":u.ConnectStepChange,[u.ConnectSubmitMFA]:u.ConnectSubmitMFA,"mx/connect/submitmfa":u.ConnectSubmitMFA,[u.ConnectUpdateCredentials]:u.ConnectUpdateCredentials,"mx/connect/updatecredentials":u.ConnectUpdateCredentials,[u.PulseOverdraftWarningCtaTransferFunds]:u.PulseOverdraftWarningCtaTransferFunds,"mx/pulse/overdraftwarning/cta/transferfunds":u.PulseOverdraftWarningCtaTransferFunds,[u.AccountCreated]:u.AccountCreated};function x(e){const t=e.type||"type not provided";let n;if(!t||!(t in f))throw new h(t);n=f[t];const i=function(e,t){switch(e){case u.Load:return{type:e};case u.Ping:return b(t,"mx/ping","user_guid","string"),b(t,"mx/ping","session_guid","string"),{type:e,user_guid:t.user_guid,session_guid:t.session_guid};case u.Navigation:return b(t,"mx/navigation","user_guid","string"),b(t,"mx/navigation","session_guid","string"),b(t,"mx/navigation","did_go_back","boolean"),{type:e,user_guid:t.user_guid,session_guid:t.session_guid,did_go_back:t.did_go_back};case u.FocusTrap:return b(t,"mx/focusTrap","user_guid","string"),b(t,"mx/focusTrap","session_guid","string"),{type:e,user_guid:t.user_guid,session_guid:t.session_guid};case u.ClientOAuthComplete:return b(t,"mx/client/oauthComplete","url","string"),{type:e,url:t.url};case u.ConnectLoaded:return b(t,"mx/connect/loaded","user_guid","string"),b(t,"mx/connect/loaded","session_guid","string"),b(t,"mx/connect/loaded","initial_step",["search","selectMember","enterCreds","mfa","connected","loginError","disclosure"]),{type:e,user_guid:t.user_guid,session_guid:t.session_guid,initial_step:t.initial_step};case u.ConnectEnterCredentials:return b(t,"mx/connect/enterCredentials","user_guid","string"),b(t,"mx/connect/enterCredentials","session_guid","string"),b(t,"mx/connect/enterCredentials","institution",{code:"string",guid:"string"}),{type:e,user_guid:t.user_guid,session_guid:t.session_guid,institution:t.institution};case u.ConnectInstitutionSearch:return b(t,"mx/connect/institutionSearch","user_guid","string"),b(t,"mx/connect/institutionSearch","session_guid","string"),b(t,"mx/connect/institutionSearch","query","string"),{type:e,user_guid:t.user_guid,session_guid:t.session_guid,query:t.query};case u.ConnectSelectedInstitution:return b(t,"mx/connect/selectedInstitution","user_guid","string"),b(t,"mx/connect/selectedInstitution","session_guid","string"),b(t,"mx/connect/selectedInstitution","code","string"),b(t,"mx/connect/selectedInstitution","guid","string"),b(t,"mx/connect/selectedInstitution","name","string"),b(t,"mx/connect/selectedInstitution","url","string"),{type:e,user_guid:t.user_guid,session_guid:t.session_guid,code:t.code,guid:t.guid,name:t.name,url:t.url};case u.ConnectMemberConnected:return b(t,"mx/connect/memberConnected","user_guid","string"),b(t,"mx/connect/memberConnected","session_guid","string"),b(t,"mx/connect/memberConnected","member_guid","string"),{type:e,user_guid:t.user_guid,session_guid:t.session_guid,member_guid:t.member_guid};case u.ConnectConnectedPrimaryAction:return b(t,"mx/connect/connected/primaryAction","user_guid","string"),b(t,"mx/connect/connected/primaryAction","session_guid","string"),{type:e,user_guid:t.user_guid,session_guid:t.session_guid};case u.ConnectMemberDeleted:return b(t,"mx/connect/memberDeleted","user_guid","string"),b(t,"mx/connect/memberDeleted","session_guid","string"),b(t,"mx/connect/memberDeleted","member_guid","string"),{type:e,user_guid:t.user_guid,session_guid:t.session_guid,member_guid:t.member_guid};case u.ConnectCreateMemberError:return b(t,"mx/connect/createMemberError","user_guid","string"),b(t,"mx/connect/createMemberError","session_guid","string"),b(t,"mx/connect/createMemberError","institution_guid","string"),b(t,"mx/connect/createMemberError","institution_code","string"),{type:e,user_guid:t.user_guid,session_guid:t.session_guid,institution_guid:t.institution_guid,institution_code:t.institution_code};case u.ConnectMemberStatusUpdate:return b(t,"mx/connect/memberStatusUpdate","user_guid","string"),b(t,"mx/connect/memberStatusUpdate","session_guid","string"),b(t,"mx/connect/memberStatusUpdate","member_guid","string"),b(t,"mx/connect/memberStatusUpdate","connection_status","number"),{type:e,user_guid:t.user_guid,session_guid:t.session_guid,member_guid:t.member_guid,connection_status:t.connection_status};case u.ConnectOAuthError:return b(t,"mx/connect/oauthError","user_guid","string"),b(t,"mx/connect/oauthError","session_guid","string"),b(t,"mx/connect/oauthError","member_guid","string",{optional:!0}),{type:e,user_guid:t.user_guid,session_guid:t.session_guid,member_guid:t.member_guid};case u.ConnectOAuthRequested:return b(t,"mx/connect/oauthRequested","user_guid","string"),b(t,"mx/connect/oauthRequested","session_guid","string"),b(t,"mx/connect/oauthRequested","url","string"),b(t,"mx/connect/oauthRequested","member_guid","string"),{type:e,user_guid:t.user_guid,session_guid:t.session_guid,url:t.url,member_guid:t.member_guid};case u.ConnectStepChange:return b(t,"mx/connect/stepChange","user_guid","string"),b(t,"mx/connect/stepChange","session_guid","string"),b(t,"mx/connect/stepChange","previous","string"),b(t,"mx/connect/stepChange","current","string"),{type:e,user_guid:t.user_guid,session_guid:t.session_guid,previous:t.previous,current:t.current};case u.ConnectSubmitMFA:return b(t,"mx/connect/submitMFA","user_guid","string"),b(t,"mx/connect/submitMFA","session_guid","string"),b(t,"mx/connect/submitMFA","member_guid","string"),{type:e,user_guid:t.user_guid,session_guid:t.session_guid,member_guid:t.member_guid};case u.ConnectUpdateCredentials:return b(t,"mx/connect/updateCredentials","user_guid","string"),b(t,"mx/connect/updateCredentials","session_guid","string"),b(t,"mx/connect/updateCredentials","member_guid","string"),b(t,"mx/connect/updateCredentials","institution",{code:"string",guid:"string"}),{type:e,user_guid:t.user_guid,session_guid:t.session_guid,member_guid:t.member_guid,institution:t.institution};case u.PulseOverdraftWarningCtaTransferFunds:return b(t,"mx/pulse/overdraftWarning/cta/transferFunds","account_guid","string"),b(t,"mx/pulse/overdraftWarning/cta/transferFunds","amount","number"),{type:e,account_guid:t.account_guid,amount:t.amount};case u.AccountCreated:return b(t,"mx/account/created","guid","string"),{type:e,guid:t.guid};default:throw new h(e)}}(n,e.metadata||{});return i}function y(e,t,n){if(t instanceof C)n.onInvalidMessageError?.(e,t);else{if(!(t instanceof h))throw t;n.onInvalidMessageError?.(e,t)}}function w(e,t){t.onMessage?.(e)}function M(e,t){try{w(e,t);!function(e,t){switch(e.type){case u.Load:t.onLoad?.(e);break;case u.Ping:t.onPing?.(e);break;case u.Navigation:t.onNavigation?.(e);break;case u.FocusTrap:t.onFocusTrap?.(e);break;case u.AccountCreated:t.onAccountCreated?.(e);break;default:throw new h(e.type)}}(x(e.data),t)}catch(n){y(e,n,t)}}function W(e,t){try{w(e,t);!function(e,t){switch(e.type){case u.Load:t.onLoad?.(e);break;case u.Ping:t.onPing?.(e);break;case u.Navigation:t.onNavigation?.(e);break;case u.FocusTrap:t.onFocusTrap?.(e);break;case u.AccountCreated:t.onAccountCreated?.(e);break;case u.ConnectLoaded:t.onLoaded?.(e);break;case u.ConnectEnterCredentials:t.onEnterCredentials?.(e);break;case u.ConnectInstitutionSearch:t.onInstitutionSearch?.(e);break;case u.ConnectSelectedInstitution:t.onSelectedInstitution?.(e);break;case u.ConnectMemberConnected:t.onMemberConnected?.(e);break;case u.ConnectConnectedPrimaryAction:t.onConnectedPrimaryAction?.(e);break;case u.ConnectMemberDeleted:t.onMemberDeleted?.(e);break;case u.ConnectCreateMemberError:t.onCreateMemberError?.(e);break;case u.ConnectMemberStatusUpdate:t.onMemberStatusUpdate?.(e);break;case u.ConnectOAuthError:t.onOAuthError?.(e);break;case u.ConnectOAuthRequested:t.onOAuthRequested?.(e);break;case u.ConnectStepChange:t.onStepChange?.(e);break;case u.ConnectSubmitMFA:t.onSubmitMFA?.(e);break;case u.ConnectUpdateCredentials:t.onUpdateCredentials?.(e);break;default:throw new h(e.type)}}(x(e.data),t)}catch(n){y(e,n,t)}}function A(e,t){try{w(e,t);!function(e,t){switch(e.type){case u.Load:t.onLoad?.(e);break;case u.Ping:t.onPing?.(e);break;case u.Navigation:t.onNavigation?.(e);break;case u.FocusTrap:t.onFocusTrap?.(e);break;case u.AccountCreated:t.onAccountCreated?.(e);break;case u.PulseOverdraftWarningCtaTransferFunds:t.onOverdraftWarningCtaTransferFunds?.(e);break;default:throw new h(e.type)}}(x(e.data),t)}catch(n){y(e,n,t)}}class T{constructor(e){if(this.isUnmounting=!1,this.options=e,this.iframe=document.createElement("iframe"),this.style=e.style||{border:"none",height:"550px",width:"320px"},this.messageCallback=e=>{e.data.mx&&this.dispatcher(e,this.options)},"string"==typeof e.container){const t=document.querySelector(e.container);if(!t)throw new Error(`Unable to find widget container. Ensure that an element matching a selector for '${this.options.container}' is available in the DOM before you initialize the widget.`);this.container=t}else{if(!(e.container instanceof Element))throw new Error("Invalid or missing value for container property, expecting a query selector string or a DOM Element.");this.container=e.container}this.setupIframe(),this.setupListener()}get widgetType(){if(this.options.widgetType)return this.options.widgetType;throw new Error("Missing value for widgetType property, expecting a string (eg. connect_widget).")}get dispatcher(){return M}navigateBack(){return new Promise((e=>{const t=this.iframe.contentWindow,n={mx:!0,type:u.Navigation,payload:{action:"back"}};if(!t)throw new Error("Unable to navigate back, iframe element is not available.");const i=t=>{t.data.type===u.Navigation&&(window.removeEventListener("message",i),e(t.data.metadata.did_go_back))};window.addEventListener("message",i,!1),t.postMessage(JSON.stringify(n),this.targetOrigin)}))}ping(){this.postMessageToWidget({type:"ping"})}unmount(){this.isUnmounting=!0,this.teardownListener(),this.teardownIframe()}get targetOrigin(){var e;const t=/^https?:\/\/[^/]+/i;let n;return this.ssoUrl&&this.ssoUrl.match(t)&&(n=null===(e=this.ssoUrl.match(t))||void 0===e?void 0:e[0]),n||"https://widgets.moneydesktop.com"}postMessageToWidget(e){if(!this.iframe.contentWindow)throw new Error("Unable to postMessage to widget, iframe doesn't exist");this.iframe.contentWindow.postMessage(JSON.stringify(e),this.targetOrigin)}setupIframe(){(function(e){if(function(e){return"url"in e&&"string"==typeof e.url}(e))return Promise.resolve(e.url);const t=e.ssoRequestBuilder||m,n=e.ssoRequestPreprocess||p,i=e.ssoRequestPostprocess||g,s=e.onSsoUrlLoadError||_,r=n(t(e));return fetch(r.url,r.options).then(l).then(i).catch(s)})(Object.assign(Object.assign({},this.options),{widgetType:this.widgetType})).then((e=>{!this.isUnmounting&&e&&(this.ssoUrl=e,this.iframe.setAttribute("data-test-id","mx-widget-iframe"),this.iframe.setAttribute("title",this.options.iframeTitle||"Widget Iframe"),this.iframe.setAttribute("src",e),Object.keys(this.style).forEach((e=>{this.iframe.style[e]=this.style[e]})),this.container.appendChild(this.iframe))}))}teardownIframe(){this.container.contains(this.iframe)&&this.container.removeChild(this.iframe)}setupListener(){window.addEventListener("message",this.messageCallback,!1)}teardownListener(){window.removeEventListener("message",this.messageCallback,!1)}}e.AccountsWidget=class extends T{get widgetType(){return a.AccountsWidget}},e.BudgetsWidget=class extends T{get widgetType(){return a.BudgetsWidget}},e.ConnectWidget=class extends T{get widgetType(){return a.ConnectWidget}get dispatcher(){return W}},e.ConnectionsWidget=class extends T{get widgetType(){return a.ConnectionsWidget}},e.DebtsWidget=class extends T{get widgetType(){return a.DebtsWidget}},e.FinstrongWidget=class extends T{get widgetType(){return a.FinstrongWidget}},e.GoalsWidget=class extends T{get widgetType(){return a.GoalsWidget}},e.HelpWidget=class extends T{get widgetType(){return a.HelpWidget}},e.MasterWidget=class extends T{get widgetType(){return a.MasterWidget}},e.MiniBudgetsWidget=class extends T{get widgetType(){return a.MiniBudgetsWidget}},e.MiniFinstrongWidget=class extends T{get widgetType(){return a.MiniFinstrongWidget}},e.MiniPulseCarouselWidget=class extends T{get widgetType(){return a.MiniPulseCarouselWidget}get dispatcher(){return A}},e.MiniSpendingWidget=class extends T{get widgetType(){return a.MiniSpendingWidget}},e.PulseWidget=class extends T{get widgetType(){return a.PulseWidget}get dispatcher(){return A}},e.SettingsWidget=class extends T{get widgetType(){return a.SettingsWidget}},e.SpendingWidget=class extends T{get widgetType(){return a.SpendingWidget}},e.TransactionsWidget=class extends T{get widgetType(){return a.TransactionsWidget}},e.TrendsWidget=class extends T{get widgetType(){return a.TrendsWidget}},e.Widget=T,Object.defineProperty(e,"__esModule",{value:!0})})); | ||
!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).widgetSdk={})}(this,(function(e){"use strict";function t(e){return"clientId"in e&&"string"==typeof e.clientId&&"apiKey"in e&&"string"==typeof e.apiKey&&"userGuid"in e&&"string"==typeof e.userGuid&&"environment"in e&&"string"==typeof e.environment}class n extends Error{constructor(){super("Missing required widget props!\n\nComponent needs one of the following groups of props:\n\n - url\n\n - or -\n\n - proxy\n\n - or -\n\n - apiKey\n - clientId\n - environment\n - userGuid"),Object.setPrototypeOf(this,n.prototype)}}class i extends Error{constructor(e){super(`Request failed: ${e}`),this.statusCode=e,Object.setPrototypeOf(this,i.prototype)}}var s;!function(e){e.SAND="sand",e.QA="qa",e.INT="integration",e.PROD="production"}(s||(s={}));const r={[s.SAND]:s.SAND,[s.QA]:s.QA,[s.INT]:s.INT,[s.PROD]:s.PROD};const o={[s.SAND]:"https://api.sand.internal.mx",[s.QA]:"https://api.qa.internal.mx",[s.INT]:"https://int-api.mx.com",[s.PROD]:"https://api.mx.com"};function c(e){const t=function(e){const t=r[e];if(!t)throw new Error(`Invalid MX environment: ${e}`);return t}(e),n=o[t];if(!n)throw new Error(`Missing host for MX environment: ${e}`);return n}var a;function d(e){return{client_redirect_url:e.clientRedirectUrl,color_scheme:e.colorScheme,current_institution_code:e.currentInstitutionCode,current_institution_guid:e.currentInstitutionGuid,current_member_guid:e.currentMemberGuid,disable_institution_search:e.disableInstitutionSearch,include_transactions:e.includeTransactions,is_mobile_webview:e.isMobileWebview||!1,mode:e.mode,oauth_referral_source:e.oauthReferralSource,ui_message_version:e.uiMessageVersion||4,ui_message_webview_url_scheme:e.uiMessageWebviewUrlScheme,update_credentials:e.updateCredentials,widget_type:e.widgetType}}function u(e){return e.widget_url.url}function g(e){const i=function(e){if(function(e){return"proxy"in e&&"string"==typeof e.proxy}(e))return function(e){return e.proxy}(e);if(t(e))return function(e){const t=c(e.environment),n=e.userGuid;return`${t}/users/${n}/widget_urls`}(e);throw new n}(e),s=function(e){const n={Accept:"application/vnd.mx.api.v1+json","Content-Type":"application/json"};e.language&&(n["Accept-Language"]=e.language);if(t(e)){const{apiKey:t,clientId:i}=e,s=btoa(`${i}:${t}`);n.Authorization=`Basic ${s}`}const i="cors",s="POST",r=JSON.stringify({widget_url:d(e)});return{method:s,headers:n,body:r,mode:i}}(e);return{url:i,options:s}}function m(e){return e}function p(e){if(!e.ok)throw new i(e.status);return e.json()}function l(e){console.error(e)}!function(e){e.AccountsWidget="accounts_widget",e.BudgetsWidget="budgets_widget",e.ConnectWidget="connect_widget",e.ConnectionsWidget="connections_widget",e.DebtsWidget="debts_widget",e.FinstrongWidget="finstrong_widget",e.GoalsWidget="goals_widget",e.HelpWidget="help_widget",e.MasterWidget="master_widget",e.MiniBudgetsWidget="mini_budgets_widget",e.MiniFinstrongWidget="mini_finstrong_widget",e.MiniPulseCarouselWidget="mini_pulse_carousel_widget",e.MiniSpendingWidget="mini_spending_widget",e.PulseWidget="pulse_widget",e.SettingsWidget="settings_widget",e.SpendingWidget="spending_widget",e.TransactionsWidget="transactions_widget",e.TrendsWidget="trends_widget"}(a||(a={}));class _ extends Error{messageType;field;expectedType;gotValue;constructor(e,t,n,i){super(`Unable to decode '${t}' from '${e}'`),this.messageType=e,this.field=t,this.expectedType=n,this.gotValue=i,Object.setPrototypeOf(this,_.prototype)}}class h extends Error{postMessageType;constructor(e){super(`Unknown post message: ${e}`),this.postMessageType=e,Object.setPrototypeOf(this,h.prototype)}}function C(e,t,n,i,s={}){const r=e[n],o=void 0!==r,c="string"==typeof r,a="number"==typeof r,d="object"==typeof r&&!Array.isArray(r),u="boolean"==typeof r,g="string"===i,m="number"===i,p=i instanceof Array,l="object"==typeof i&&!Array.isArray(i),h="boolean"===i;if(o||!s.optional){if(!o)throw new _(t,n,i,r);if(g&&!c)throw new _(t,n,i,r);if(m&&!a)throw new _(t,n,i,r);if(!(!p||c&&i.includes(r)))throw new _(t,n,i,r);if(l&&!d)throw new _(t,n,i,r);if(h&&!u)throw new _(t,n,i,r);l&&d&&Object.keys(i).forEach((e=>{C(r,t,e,i[e])}))}}var b;!function(e){e.Load="mx/load",e.Ping="mx/ping",e.Navigation="mx/navigation",e.FocusTrap="mx/focusTrap",e.ClientOAuthComplete="mx/client/oauthComplete",e.ConnectLoaded="mx/connect/loaded",e.ConnectEnterCredentials="mx/connect/enterCredentials",e.ConnectInstitutionSearch="mx/connect/institutionSearch",e.ConnectSelectedInstitution="mx/connect/selectedInstitution",e.ConnectMemberConnected="mx/connect/memberConnected",e.ConnectConnectedPrimaryAction="mx/connect/connected/primaryAction",e.ConnectMemberDeleted="mx/connect/memberDeleted",e.ConnectCreateMemberError="mx/connect/createMemberError",e.ConnectMemberStatusUpdate="mx/connect/memberStatusUpdate",e.ConnectOAuthError="mx/connect/oauthError",e.ConnectOAuthRequested="mx/connect/oauthRequested",e.ConnectStepChange="mx/connect/stepChange",e.ConnectSubmitMFA="mx/connect/submitMFA",e.ConnectUpdateCredentials="mx/connect/updateCredentials",e.PulseOverdraftWarningCtaTransferFunds="mx/pulse/overdraftWarning/cta/transferFunds",e.AccountCreated="mx/account/created"}(b||(b={}));const f={[b.Load]:b.Load,[b.Ping]:b.Ping,[b.Navigation]:b.Navigation,[b.FocusTrap]:b.FocusTrap,"mx/focustrap":b.FocusTrap,[b.ClientOAuthComplete]:b.ClientOAuthComplete,"mx/client/oauthcomplete":b.ClientOAuthComplete,[b.ConnectLoaded]:b.ConnectLoaded,[b.ConnectEnterCredentials]:b.ConnectEnterCredentials,"mx/connect/entercredentials":b.ConnectEnterCredentials,[b.ConnectInstitutionSearch]:b.ConnectInstitutionSearch,"mx/connect/institutionsearch":b.ConnectInstitutionSearch,[b.ConnectSelectedInstitution]:b.ConnectSelectedInstitution,"mx/connect/selectedinstitution":b.ConnectSelectedInstitution,[b.ConnectMemberConnected]:b.ConnectMemberConnected,"mx/connect/memberconnected":b.ConnectMemberConnected,[b.ConnectConnectedPrimaryAction]:b.ConnectConnectedPrimaryAction,"mx/connect/connected/primaryaction":b.ConnectConnectedPrimaryAction,[b.ConnectMemberDeleted]:b.ConnectMemberDeleted,"mx/connect/memberdeleted":b.ConnectMemberDeleted,[b.ConnectCreateMemberError]:b.ConnectCreateMemberError,"mx/connect/createmembererror":b.ConnectCreateMemberError,[b.ConnectMemberStatusUpdate]:b.ConnectMemberStatusUpdate,"mx/connect/memberstatusupdate":b.ConnectMemberStatusUpdate,[b.ConnectOAuthError]:b.ConnectOAuthError,"mx/connect/oautherror":b.ConnectOAuthError,[b.ConnectOAuthRequested]:b.ConnectOAuthRequested,"mx/connect/oauthrequested":b.ConnectOAuthRequested,[b.ConnectStepChange]:b.ConnectStepChange,"mx/connect/stepchange":b.ConnectStepChange,[b.ConnectSubmitMFA]:b.ConnectSubmitMFA,"mx/connect/submitmfa":b.ConnectSubmitMFA,[b.ConnectUpdateCredentials]:b.ConnectUpdateCredentials,"mx/connect/updatecredentials":b.ConnectUpdateCredentials,[b.PulseOverdraftWarningCtaTransferFunds]:b.PulseOverdraftWarningCtaTransferFunds,"mx/pulse/overdraftwarning/cta/transferfunds":b.PulseOverdraftWarningCtaTransferFunds,[b.AccountCreated]:b.AccountCreated};function x(e){const t=e.type||"type not provided";let n;if(!t||!(t in f))throw new h(t);n=f[t];const i=function(e,t){switch(e){case b.Load:return{type:e};case b.Ping:return C(t,"mx/ping","user_guid","string"),C(t,"mx/ping","session_guid","string"),{type:e,user_guid:t.user_guid,session_guid:t.session_guid};case b.Navigation:return C(t,"mx/navigation","user_guid","string"),C(t,"mx/navigation","session_guid","string"),C(t,"mx/navigation","did_go_back","boolean"),{type:e,user_guid:t.user_guid,session_guid:t.session_guid,did_go_back:t.did_go_back};case b.FocusTrap:return C(t,"mx/focusTrap","user_guid","string"),C(t,"mx/focusTrap","session_guid","string"),{type:e,user_guid:t.user_guid,session_guid:t.session_guid};case b.ClientOAuthComplete:return C(t,"mx/client/oauthComplete","url","string"),{type:e,url:t.url};case b.ConnectLoaded:return C(t,"mx/connect/loaded","user_guid","string"),C(t,"mx/connect/loaded","session_guid","string"),C(t,"mx/connect/loaded","initial_step",["search","selectMember","enterCreds","mfa","connected","loginError","disclosure"]),{type:e,user_guid:t.user_guid,session_guid:t.session_guid,initial_step:t.initial_step};case b.ConnectEnterCredentials:return C(t,"mx/connect/enterCredentials","user_guid","string"),C(t,"mx/connect/enterCredentials","session_guid","string"),C(t,"mx/connect/enterCredentials","institution",{code:"string",guid:"string"}),{type:e,user_guid:t.user_guid,session_guid:t.session_guid,institution:t.institution};case b.ConnectInstitutionSearch:return C(t,"mx/connect/institutionSearch","user_guid","string"),C(t,"mx/connect/institutionSearch","session_guid","string"),C(t,"mx/connect/institutionSearch","query","string"),{type:e,user_guid:t.user_guid,session_guid:t.session_guid,query:t.query};case b.ConnectSelectedInstitution:return C(t,"mx/connect/selectedInstitution","user_guid","string"),C(t,"mx/connect/selectedInstitution","session_guid","string"),C(t,"mx/connect/selectedInstitution","code","string"),C(t,"mx/connect/selectedInstitution","guid","string"),C(t,"mx/connect/selectedInstitution","name","string"),C(t,"mx/connect/selectedInstitution","url","string"),{type:e,user_guid:t.user_guid,session_guid:t.session_guid,code:t.code,guid:t.guid,name:t.name,url:t.url};case b.ConnectMemberConnected:return C(t,"mx/connect/memberConnected","user_guid","string"),C(t,"mx/connect/memberConnected","session_guid","string"),C(t,"mx/connect/memberConnected","member_guid","string"),{type:e,user_guid:t.user_guid,session_guid:t.session_guid,member_guid:t.member_guid};case b.ConnectConnectedPrimaryAction:return C(t,"mx/connect/connected/primaryAction","user_guid","string"),C(t,"mx/connect/connected/primaryAction","session_guid","string"),{type:e,user_guid:t.user_guid,session_guid:t.session_guid};case b.ConnectMemberDeleted:return C(t,"mx/connect/memberDeleted","user_guid","string"),C(t,"mx/connect/memberDeleted","session_guid","string"),C(t,"mx/connect/memberDeleted","member_guid","string"),{type:e,user_guid:t.user_guid,session_guid:t.session_guid,member_guid:t.member_guid};case b.ConnectCreateMemberError:return C(t,"mx/connect/createMemberError","user_guid","string"),C(t,"mx/connect/createMemberError","session_guid","string"),C(t,"mx/connect/createMemberError","institution_guid","string"),C(t,"mx/connect/createMemberError","institution_code","string"),{type:e,user_guid:t.user_guid,session_guid:t.session_guid,institution_guid:t.institution_guid,institution_code:t.institution_code};case b.ConnectMemberStatusUpdate:return C(t,"mx/connect/memberStatusUpdate","user_guid","string"),C(t,"mx/connect/memberStatusUpdate","session_guid","string"),C(t,"mx/connect/memberStatusUpdate","member_guid","string"),C(t,"mx/connect/memberStatusUpdate","connection_status","number"),{type:e,user_guid:t.user_guid,session_guid:t.session_guid,member_guid:t.member_guid,connection_status:t.connection_status};case b.ConnectOAuthError:return C(t,"mx/connect/oauthError","user_guid","string"),C(t,"mx/connect/oauthError","session_guid","string"),C(t,"mx/connect/oauthError","member_guid","string",{optional:!0}),{type:e,user_guid:t.user_guid,session_guid:t.session_guid,member_guid:t.member_guid};case b.ConnectOAuthRequested:return C(t,"mx/connect/oauthRequested","user_guid","string"),C(t,"mx/connect/oauthRequested","session_guid","string"),C(t,"mx/connect/oauthRequested","url","string"),C(t,"mx/connect/oauthRequested","member_guid","string"),{type:e,user_guid:t.user_guid,session_guid:t.session_guid,url:t.url,member_guid:t.member_guid};case b.ConnectStepChange:return C(t,"mx/connect/stepChange","user_guid","string"),C(t,"mx/connect/stepChange","session_guid","string"),C(t,"mx/connect/stepChange","previous","string"),C(t,"mx/connect/stepChange","current","string"),{type:e,user_guid:t.user_guid,session_guid:t.session_guid,previous:t.previous,current:t.current};case b.ConnectSubmitMFA:return C(t,"mx/connect/submitMFA","user_guid","string"),C(t,"mx/connect/submitMFA","session_guid","string"),C(t,"mx/connect/submitMFA","member_guid","string"),{type:e,user_guid:t.user_guid,session_guid:t.session_guid,member_guid:t.member_guid};case b.ConnectUpdateCredentials:return C(t,"mx/connect/updateCredentials","user_guid","string"),C(t,"mx/connect/updateCredentials","session_guid","string"),C(t,"mx/connect/updateCredentials","member_guid","string"),C(t,"mx/connect/updateCredentials","institution",{code:"string",guid:"string"}),{type:e,user_guid:t.user_guid,session_guid:t.session_guid,member_guid:t.member_guid,institution:t.institution};case b.PulseOverdraftWarningCtaTransferFunds:return C(t,"mx/pulse/overdraftWarning/cta/transferFunds","account_guid","string"),C(t,"mx/pulse/overdraftWarning/cta/transferFunds","amount","number"),{type:e,account_guid:t.account_guid,amount:t.amount};case b.AccountCreated:return C(t,"mx/account/created","guid","string"),{type:e,guid:t.guid};default:throw new h(e)}}(n,e.metadata||{});return i}function y(e,t,n){if(t instanceof _)n.onInvalidMessageError?.(e,t);else{if(!(t instanceof h))throw t;n.onInvalidMessageError?.(e,t)}}function w(e,t){t.onMessage?.(e)}function M(e,t){try{w(e,t);!function(e,t){switch(e.type){case b.Load:t.onLoad?.(e);break;case b.Ping:t.onPing?.(e);break;case b.Navigation:t.onNavigation?.(e);break;case b.FocusTrap:t.onFocusTrap?.(e);break;case b.AccountCreated:t.onAccountCreated?.(e);break;default:throw new h(e.type)}}(x(e.data),t)}catch(n){y(e,n,t)}}function W(e,t){try{w(e,t);!function(e,t){switch(e.type){case b.Load:t.onLoad?.(e);break;case b.Ping:t.onPing?.(e);break;case b.Navigation:t.onNavigation?.(e);break;case b.FocusTrap:t.onFocusTrap?.(e);break;case b.AccountCreated:t.onAccountCreated?.(e);break;case b.ConnectLoaded:t.onLoaded?.(e);break;case b.ConnectEnterCredentials:t.onEnterCredentials?.(e);break;case b.ConnectInstitutionSearch:t.onInstitutionSearch?.(e);break;case b.ConnectSelectedInstitution:t.onSelectedInstitution?.(e);break;case b.ConnectMemberConnected:t.onMemberConnected?.(e);break;case b.ConnectConnectedPrimaryAction:t.onConnectedPrimaryAction?.(e);break;case b.ConnectMemberDeleted:t.onMemberDeleted?.(e);break;case b.ConnectCreateMemberError:t.onCreateMemberError?.(e);break;case b.ConnectMemberStatusUpdate:t.onMemberStatusUpdate?.(e);break;case b.ConnectOAuthError:t.onOAuthError?.(e);break;case b.ConnectOAuthRequested:t.onOAuthRequested?.(e);break;case b.ConnectStepChange:t.onStepChange?.(e);break;case b.ConnectSubmitMFA:t.onSubmitMFA?.(e);break;case b.ConnectUpdateCredentials:t.onUpdateCredentials?.(e);break;default:throw new h(e.type)}}(x(e.data),t)}catch(n){y(e,n,t)}}function A(e,t){try{w(e,t);!function(e,t){switch(e.type){case b.Load:t.onLoad?.(e);break;case b.Ping:t.onPing?.(e);break;case b.Navigation:t.onNavigation?.(e);break;case b.FocusTrap:t.onFocusTrap?.(e);break;case b.AccountCreated:t.onAccountCreated?.(e);break;case b.PulseOverdraftWarningCtaTransferFunds:t.onOverdraftWarningCtaTransferFunds?.(e);break;default:throw new h(e.type)}}(x(e.data),t)}catch(n){y(e,n,t)}}class v{constructor(e){if(this.isUnmounting=!1,this.options=e,this.iframe=document.createElement("iframe"),this.style=e.style||{border:"none",height:"550px",width:"320px"},this.messageCallback=e=>{this.handleMXPostMessage(e)},"string"==typeof e.container){const t=document.querySelector(e.container);if(!t)throw new Error(`Unable to find widget container. Ensure that an element matching a selector for '${this.options.container}' is available in the DOM before you initialize the widget.`);this.container=t}else{if(!(e.container instanceof Element))throw new Error("Invalid or missing value for container property, expecting a query selector string or a DOM Element.");this.container=e.container}this.setupIframe(),this.setupListener()}get widgetType(){if(this.options.widgetType)return this.options.widgetType;throw new Error("Missing value for widgetType property, expecting a string (eg. connect_widget).")}get dispatcher(){return M}navigateBack(){return new Promise((e=>{const t=this.iframe.contentWindow,n={mx:!0,type:b.Navigation,payload:{action:"back"}};if(!t)throw new Error("Unable to navigate back, iframe element is not available.");const i=t=>{t.data.type===b.Navigation&&(window.removeEventListener("message",i),e(t.data.metadata.did_go_back))};window.addEventListener("message",i,!1),t.postMessage(JSON.stringify(n),this.targetOrigin)}))}ping(){this.postMessageToWidget({type:"ping"})}unmount(){this.isUnmounting=!0,this.teardownListener(),this.teardownIframe()}get targetOrigin(){var e;const t=/^https?:\/\/[^/]+/i;let n;return this.ssoUrl&&this.ssoUrl.match(t)&&(n=null===(e=this.ssoUrl.match(t))||void 0===e?void 0:e[0]),n||"https://widgets.moneydesktop.com"}handleMXPostMessage(e){e.data.mx&&(this.dispatcher(e,this.options),e.data.type===b.Load&&this.postMessageToWidget({type:"mx/sdk/info",metadata:{sdk:"web",version:"0.0.10"}}))}postMessageToWidget(e){if(!this.iframe.contentWindow)throw new Error("Unable to postMessage to widget, iframe doesn't exist");this.iframe.contentWindow.postMessage(JSON.stringify(e),this.targetOrigin)}setupIframe(){(function(e){if(function(e){return"url"in e&&"string"==typeof e.url}(e))return Promise.resolve(e.url);const t=e.ssoRequestBuilder||g,n=e.ssoRequestPreprocess||m,i=e.ssoRequestPostprocess||u,s=e.onSsoUrlLoadError||l,r=n(t(e));return fetch(r.url,r.options).then(p).then(i).catch(s)})(Object.assign(Object.assign({},this.options),{widgetType:this.widgetType})).then((e=>{!this.isUnmounting&&e&&(this.ssoUrl=e,this.iframe.setAttribute("data-test-id","mx-widget-iframe"),this.iframe.setAttribute("title",this.options.iframeTitle||"Widget Iframe"),this.iframe.setAttribute("src",e),Object.keys(this.style).forEach((e=>{this.iframe.style[e]=this.style[e]})),this.container.appendChild(this.iframe))}))}teardownIframe(){this.container.contains(this.iframe)&&this.container.removeChild(this.iframe)}setupListener(){window.addEventListener("message",this.messageCallback,!1)}teardownListener(){window.removeEventListener("message",this.messageCallback,!1)}}e.AccountsWidget=class extends v{get widgetType(){return a.AccountsWidget}},e.BudgetsWidget=class extends v{get widgetType(){return a.BudgetsWidget}},e.ConnectWidget=class extends v{get widgetType(){return a.ConnectWidget}get dispatcher(){return W}},e.ConnectionsWidget=class extends v{get widgetType(){return a.ConnectionsWidget}},e.DebtsWidget=class extends v{get widgetType(){return a.DebtsWidget}},e.FinstrongWidget=class extends v{get widgetType(){return a.FinstrongWidget}},e.GoalsWidget=class extends v{get widgetType(){return a.GoalsWidget}},e.HelpWidget=class extends v{get widgetType(){return a.HelpWidget}},e.MasterWidget=class extends v{get widgetType(){return a.MasterWidget}},e.MiniBudgetsWidget=class extends v{get widgetType(){return a.MiniBudgetsWidget}},e.MiniFinstrongWidget=class extends v{get widgetType(){return a.MiniFinstrongWidget}},e.MiniPulseCarouselWidget=class extends v{get widgetType(){return a.MiniPulseCarouselWidget}get dispatcher(){return A}},e.MiniSpendingWidget=class extends v{get widgetType(){return a.MiniSpendingWidget}},e.PulseWidget=class extends v{get widgetType(){return a.PulseWidget}get dispatcher(){return A}},e.SettingsWidget=class extends v{get widgetType(){return a.SettingsWidget}},e.SpendingWidget=class extends v{get widgetType(){return a.SpendingWidget}},e.TransactionsWidget=class extends v{get widgetType(){return a.TransactionsWidget}},e.TrendsWidget=class extends v{get widgetType(){return a.TrendsWidget}},e.Widget=v,Object.defineProperty(e,"__esModule",{value:!0})})); |
{ | ||
"name": "@mxenabled/web-widget-sdk", | ||
"version": "0.0.9", | ||
"version": "0.0.10", | ||
"description": "MX Web Widget SDK", | ||
@@ -26,3 +26,3 @@ "main": "./dist/cjs/index.js", | ||
"clean:dist": "[ -d dist ] && rm -r dist || true", | ||
"compile": "npm run compile:sdk && npm run compile:types && npm run compile:cypress && npm run compile:jest", | ||
"compile": "npm run compile:version && npm run compile:sdk && npm run compile:types && npm run compile:cypress && npm run compile:jest", | ||
"compile:cypress": "tsc --strict --noEmit --types cypress,node $(find cypress -not -path 'cypress/application/*' -type f -name *.ts)", | ||
@@ -32,2 +32,3 @@ "compile:jest": "tsc --strict --noEmit --types jest,node $(find jest -type f -name *.ts)", | ||
"compile:types": "tsc --declaration --emitDeclarationOnly --outDir dist/types", | ||
"compile:version": "ts-node bin/generate-version-file.ts", | ||
"documentation": "cp node_modules/@mxenabled/widget-post-message-definitions/docs/web-sdk-generated.md docs/widget_callback_props.md", | ||
@@ -34,0 +35,0 @@ "format": "npm run prettier -- -w", |
298
README.md
# MX Web Widget SDK | ||
## Introduction | ||
The purpose of this project is to help simplify your integration experience. | ||
Giving you as few steps as possible to get up and running with an MX web widget. | ||
Giving you as few steps as possible to get up and running with an MX web | ||
widget. Please refer to our [Web Widget SDK documentation][sdk_docs] to get | ||
started. | ||
After following the Getting Started instructions below, you will be able to | ||
import and load MX widgets in your web applications, and configure them | ||
for your specific needs. | ||
## Getting Started | ||
Please refer to the official [MX Docs](https://docs.mx.com/) for an in-depth | ||
explanation of the MX platform. The general outline for incorporating the | ||
`web-widget-sdk` into your project is as follow: | ||
- Sign up for a developer account at the developer portal. | ||
- Install and setup the SDK via `npm` or `yarn`. | ||
- Generate an authenticated SSO widget url. | ||
- Import the widget into your project providing it with the needed | ||
configuration object. | ||
### Acquire your developer account | ||
A developer account can be obtained by signing up on our [Client | ||
Portal](https://dashboard.mx.com) site. | ||
### Installing the SDK | ||
Open a terminal and run the commands below at the root of your project to | ||
install the SDK: | ||
Using npm | ||
``` | ||
npm install --save @mxenabled/web-widget-sdk | ||
``` | ||
Using yarn | ||
``` | ||
yarn add @mxenabled/web-widget-sdk | ||
``` | ||
### Incorporating the SDK into your application | ||
The Widget SDK provides multiple modules that you can import and use in your | ||
application. There is currently a [CommonJS module][commonjs_module], an ES | ||
module, an [AMD module][amd_module], and an [UMD module][umd_module] that you | ||
can use depending on your build process. | ||
#### CommonJS module | ||
A CommonJS module is exported by this package and available by requiring | ||
`@mxenabled/web-widget-sdk`. Require this module and build your project with a | ||
build tool that supports CommonJS modules (such as [browserify][browserify]): | ||
```js | ||
const widgetSdk = require("@mxenabled/web-widget-sdk") | ||
const widget = new widgetSdk.ConnectWidget({ | ||
container: "<CONTAINER SELECTOR>", | ||
url: "<SSO URL>" | ||
// additional widget options | ||
}) | ||
``` | ||
#### ES module | ||
An ES module is exported by this package and available by importing | ||
`@mxenabled/web-widget-sdk`. Import this module and build your project with a | ||
build tool that supports ES modules (such as [webpack][webpack]): | ||
```js | ||
import * as widgetSdk from "@mxenabled/web-widget-sdk" | ||
const widget = new widgetSdk.ConnectWidget({ | ||
container: "<CONTAINER SELECTOR>", | ||
url: "<SSO URL>" | ||
// additional widget options | ||
}) | ||
``` | ||
#### AMD module | ||
The AMD module can be found in | ||
`node_modules/@mxenabled/web-widget-sdk/dist/amd/index.js`. In order to serve | ||
this file in your application, you will have to host it yourself. Transfer this | ||
file into any location where it can be made publicly available from. Once the | ||
file is available, you can import and use it like so: | ||
```html | ||
<div id="container"></div> | ||
<script src="https://requirejs.org/docs/release/2.3.6/minified/require.js"></script> | ||
<script> | ||
requirejs(["node_modules/@mxenabled/web-widget-sdk/dist/amd/index.js"], function (widgetSdk) { | ||
const widget = new widgetSdk.ConnectWidget({ | ||
container: "#container", | ||
url: "<SSO URL>" | ||
// additional widget options | ||
}) | ||
}) | ||
</script> | ||
``` | ||
#### UMD module | ||
The UMD module can be found in | ||
`node_modules/@mxenabled/web-widget-sdk/dist/umd/index.js`. In order to serve | ||
this file in your application, you will have to host it yourself. Transfer this | ||
file into any location where it can be made publicly available from. Once the | ||
file is available, you can import and use it like so: | ||
```html | ||
<div id="container"></div> | ||
<script src="node_modules/@mxenabled/web-widget-sdk/dist/umd/index.js"></script> | ||
<script> | ||
const widget = new widgetSdk.ConnectWidget({ | ||
container: "#container", | ||
url: "<SSO URL>" | ||
// additional widget options | ||
}) | ||
</script> | ||
``` | ||
### Generating your Widget SSO URL | ||
Refer to our [authentication][authentication_and_security] and [SSO Widget URL | ||
documentation][api_request_widget_url] for instructions and information related | ||
to making an SSO URL request. If loading the Connect Widget, follow the | ||
instructions located in [Connect SSO Widget URL | ||
documentation][api_request_connect_url]. The SSO URL should be passed to a | ||
Widget class via the `url` option. | ||
```js | ||
const options = { | ||
container: "#widget", | ||
url: "https://int-widgets.moneydesktop.com/md/connect/..." | ||
} | ||
``` | ||
#### Proxy server | ||
The SDK also has the option of making the SSO request on your behalf to your | ||
backend service that is able to make requests to our API. If used, the proxy | ||
URL should passed to a Widget class via the `proxy` option. | ||
##### Connect Widget configuration | ||
When you are not using the `proxy` setting, you must pass the widget | ||
configuration in the SSO request that generates the SSO URL. However, when | ||
using the `proxy` setting with the Connect Widget, those configuration settings | ||
may be passed directly to the widget class. | ||
- `colorScheme`: Load the widget in the specified colorScheme; options are | ||
`light` and `dark`. Defaults to `light`. | ||
- `currentInstitutionCode`: Load the widget into the credential view for the | ||
specified institution. | ||
- `currentInstitutionGuid`: Load the widget into the credential view for the | ||
specified institution. | ||
- `currentMemberGuid`: Load to a specific member that contains an error or | ||
requires MFA from the most recent job. `currentMemberGuid` takes precedence | ||
over `currentInstitutionCode`. | ||
- `disableInstitutionSearch`: When set to true, the institution search feature | ||
will be disabled and end users will not be able to navigate to it. Must be | ||
used with `currentInstitutionCode`, `currentInstitutionGuid`, or | ||
`currentMemberGuid`. | ||
- `includeTransactions`: When set to false while creating or updating a member, | ||
transaction data will not be automatically aggregated. Future manual or | ||
background aggregations will not be affected. Defaults to true. | ||
- `uiMessageWebviewUrlScheme`: Used as the scheme that MX will redirect to at | ||
the end of OAuth. This must be a scheme that your application responds to. | ||
See [OAuth redirects](#oauth-redirects) for additional information. | ||
- `updateCredentials`: Loads widget to the update credential view of a current | ||
member. Optionally used with `currentMemberGuid`. This option should be used | ||
sparingly. The best practice is to use `currentMemberGuid` and let the widget | ||
resolve the issue. | ||
```js | ||
const options = { | ||
container: "#widget", | ||
proxy: "https://server.com/mx-sso-proxy", | ||
colorScheme: "dark", | ||
disableInstitutionSearch: true | ||
} | ||
``` | ||
### Mounting and Unmounting the widget | ||
When you instantiate a widget with options, it will mount itself in the DOM, and set up various event listeners. | ||
You'll need to call the `unmount` method when closing the widget and before creating a new instance. | ||
```js | ||
const options = { | ||
container: "#widget", | ||
url: "https://int-widgets.moneydesktop.com/md/connect/...." | ||
} | ||
// Calling `new sdk.ConnectWidget(...)` here will mount the widget in the DOM | ||
const widget = new widgetSdk.ConnectWidget(options) | ||
// When you are ready to close the widget, you'll want to call `unmount`. This | ||
// will remove the element and any event listeners added. | ||
widget.unmount() | ||
``` | ||
### Interacting with the widget | ||
You can listen to post message events by passing callback functions in the widget | ||
options object to the class. The option names follow this naming scheme: | ||
* For widget events: `on<event name>`, | ||
* For entity events: `on<entity><action>` | ||
For example, the `mx/connect/selectInstitution` event is made available via | ||
`onSelectInstitution` in the `ConnectWidget` class. Refer to [this | ||
document](docs/widget_callback_props.md) for a list of events and their | ||
payloads. | ||
### Widget options | ||
You can configure the state and behavior of the widget with the following | ||
class options: | ||
- `language`: Load the widget in the specified language. Defaults to `en-US`. | ||
See [language | ||
options](https://docs.mx.com/api#connect_configuring_connect_language_options) | ||
for additional information. | ||
- `proxy`: SSO proxy server URL. | ||
- `style`: Styles applied to the view containing the widget. The default styles are: | ||
- `border: "none"` | ||
- `height: "550px"` | ||
- `width: "320px"` | ||
- `iframeTitle`: Allows for the title attribute of the iframe to be set. | ||
- `url`: Widget SSO URL. See [Generating your Widget SSO | ||
URL](#generating-your-widget-sso-url) for additional information. **This prop | ||
is required.** | ||
### Available widget classes | ||
This SDK exposes the following classes: | ||
- `AccountsWidget` | ||
- `BudgetsWidget` | ||
- `ConnectAggregationWidget` | ||
- `ConnectVerificationWidget` | ||
- `ConnectWidget` | ||
- `ConnectionsWidget` | ||
- `DebtsWidget` | ||
- `FinstrongWidget` | ||
- `GoalsWidget` | ||
- `HelpWidget` | ||
- `MasterWidget` | ||
- `MiniBudgetsWidget` | ||
- `MiniFinstrongWidget` | ||
- `MiniPulseCarouselWidget` | ||
- `MiniSpendingWidget` | ||
- `PulseWidget` | ||
- `SettingsWidget` | ||
- `SpendingWidget` | ||
- `TransactionsWidget` | ||
- `TrendsWidget` | ||
### Troubleshooting | ||
#### Post messages not working | ||
Check the following items if widget post message callbacks are not being | ||
triggered in your application. | ||
- Ensure your SSO request is correctly configured for the Web SDK: | ||
- `ui_message_version` should be set to `4`. | ||
- `is_mobile_webview` should be set to `false`. | ||
- Ensure you are using the corresponding widget class for the `widget_type` | ||
used in the SSO request. For example, if you set `widget_type` to | ||
`connect_widget`, then you should use the `ConnectWidget` class. | ||
- Ensure you are serving your application's HTML from a web server and not | ||
loading it from your file system. | ||
- Ensure your application's [`Referrer-Policy`][referrer_policy] is one that | ||
allows origin information to be passed to the widget. We recommend using | ||
the default, which is `strict-origin-when-cross-origin`. | ||
--- | ||
[![Build SDK](https://github.com/mxenabled/web-widget-sdk/actions/workflows/build-sdk.yml/badge.svg)](https://github.com/mxenabled/web-widget-sdk/actions/workflows/build-sdk.yml) | ||
[![Integration Tests](https://github.com/mxenabled/web-widget-sdk/actions/workflows/integration-tests.yml/badge.svg)](https://github.com/mxenabled/web-widget-sdk/actions/workflows/integration-tests.yml) | ||
[![Package Audit](https://github.com/mxenabled/web-widget-sdk/actions/workflows/package-audit.yml/badge.svg)](https://github.com/mxenabled/web-widget-sdk/actions/workflows/package-audit.yml) | ||
[authentication_and_security]: https://docs.mx.com/api#authentication_and_security "Authentication and security" | ||
[amd_module]: https://requirejs.org/docs/whyamd.html "AMD modules" | ||
[api_request_connect_url]: https://docs.mx.com/api#connect_request_a_url "Request a Connect URL" | ||
[api_request_widget_url]: https://docs.mx.com/api#widgets_mx_widgets_request_widget_url "Request a widget URL" | ||
[browserify]: https://browserify.org/ "Browserify" | ||
[commonjs_module]: https://nodejs.org/api/modules.html "CommonJS modules" | ||
[react_native_style]: https://reactnative.dev/docs/style "React Native Style" | ||
[umd_module]: https://github.com/umdjs/umd "UMD modules" | ||
[webpack]: https://webpack.js.org/ "webpack" | ||
[referrer_policy]: https://developer.mozilla.org/en-US/docs/Web/HTTP/Headers/Referrer-Policy "Referrer-Policy" | ||
[sdk_docs]: https://docs.mx.com/connect/guides/sdk#web "Web Widget SDK" |
26
4440
255800
9