xendit-components-web 0.0.15 → 0.0.17

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.mjs","sources":["../../../node_modules/.pnpm/preact@10.28.4/node_modules/preact/dist/preact.module.js","../../../node_modules/.pnpm/preact@10.28.4/node_modules/preact/devtools/dist/devtools.module.js","../../../node_modules/.pnpm/preact@10.28.4/node_modules/preact/debug/dist/debug.module.js","../../../node_modules/.pnpm/preact@10.28.4/node_modules/preact/jsx-runtime/dist/jsxRuntime.module.js","../../src/components/icon.tsx","../../src/preact-batch.ts","../../src/public-event-types.ts","../../src/internal.ts","../../src/components/accordion.tsx","../../../node_modules/.pnpm/preact@10.28.4/node_modules/preact/hooks/dist/hooks.module.js","../../../node_modules/.pnpm/classnames@2.5.1/node_modules/classnames/index.js","../../src/components/accordion-item.tsx","../../src/components/session-provider.tsx","../../src/utils.ts","../../src/components/button.tsx","../../src/components/dropdown.tsx","../../src/bff-marshal.ts","../../src/components/channel-picker-group.tsx","../../src/components/channel-picker-digital-wallet-section.tsx","../../src/components/channel-picker.tsx","../../../node_modules/.pnpm/libphonenumber-js@1.12.38/node_modules/libphonenumber-js/metadata.min.json.js","../../../node_modules/.pnpm/libphonenumber-js@1.12.38/node_modules/libphonenumber-js/min/exports/withMetadataArgument.js","../../../node_modules/.pnpm/libphonenumber-js@1.12.38/node_modules/libphonenumber-js/es6/tools/semver-compare.js","../../../node_modules/.pnpm/libphonenumber-js@1.12.38/node_modules/libphonenumber-js/es6/helpers/isObject.js","../../../node_modules/.pnpm/libphonenumber-js@1.12.38/node_modules/libphonenumber-js/es6/metadata.js","../../../node_modules/.pnpm/libphonenumber-js@1.12.38/node_modules/libphonenumber-js/es6/helpers/checkNumberLength.js","../../../node_modules/.pnpm/libphonenumber-js@1.12.38/node_modules/libphonenumber-js/es6/isPossible.js","../../../node_modules/.pnpm/libphonenumber-js@1.12.38/node_modules/libphonenumber-js/es6/helpers/matchesEntirely.js","../../../node_modules/.pnpm/libphonenumber-js@1.12.38/node_modules/libphonenumber-js/es6/helpers/getNumberType.js","../../../node_modules/.pnpm/libphonenumber-js@1.12.38/node_modules/libphonenumber-js/es6/helpers/getPossibleCountriesForNumber.js","../../../node_modules/.pnpm/libphonenumber-js@1.12.38/node_modules/libphonenumber-js/es6/constants.js","../../../node_modules/.pnpm/libphonenumber-js@1.12.38/node_modules/libphonenumber-js/es6/helpers/stripIddPrefix.js","../../../node_modules/.pnpm/libphonenumber-js@1.12.38/node_modules/libphonenumber-js/es6/helpers/getCountryByNationalNumber.js","../../../node_modules/.pnpm/libphonenumber-js@1.12.38/node_modules/libphonenumber-js/es6/helpers/getCountryByCallingCode.js","../../../node_modules/.pnpm/libphonenumber-js@1.12.38/node_modules/libphonenumber-js/es6/helpers/extractNationalNumber.js","../../../node_modules/.pnpm/libphonenumber-js@1.12.38/node_modules/libphonenumber-js/es6/helpers/extractNationalNumberFromPossiblyIncompleteNumber.js","../../../node_modules/.pnpm/libphonenumber-js@1.12.38/node_modules/libphonenumber-js/es6/helpers/extractCountryCallingCode.js","../../../node_modules/.pnpm/libphonenumber-js@1.12.38/node_modules/libphonenumber-js/es6/helpers/extractCountryCallingCodeFromInternationalNumberWithoutPlusSign.js","../../../node_modules/.pnpm/libphonenumber-js@1.12.38/node_modules/libphonenumber-js/es6/helpers/formatNationalNumberUsingFormat.js","../../../node_modules/.pnpm/libphonenumber-js@1.12.38/node_modules/libphonenumber-js/es6/helpers/applyInternationalSeparatorStyle.js","../../../node_modules/.pnpm/libphonenumber-js@1.12.38/node_modules/libphonenumber-js/es6/helpers/getIddPrefix.js","../../../node_modules/.pnpm/libphonenumber-js@1.12.38/node_modules/libphonenumber-js/es6/helpers/extension/createExtensionPattern.js","../../../node_modules/.pnpm/libphonenumber-js@1.12.38/node_modules/libphonenumber-js/es6/helpers/isViablePhoneNumber.js","../../../node_modules/.pnpm/libphonenumber-js@1.12.38/node_modules/libphonenumber-js/es6/format.js","../../../node_modules/.pnpm/libphonenumber-js@1.12.38/node_modules/libphonenumber-js/es6/helpers/RFC3966.js","../../../node_modules/.pnpm/libphonenumber-js@1.12.38/node_modules/libphonenumber-js/es6/PhoneNumber.js","../../../node_modules/.pnpm/libphonenumber-js@1.12.38/node_modules/libphonenumber-js/es6/isValid.js","../../../node_modules/.pnpm/libphonenumber-js@1.12.38/node_modules/libphonenumber-js/es6/ParseError.js","../../../node_modules/.pnpm/libphonenumber-js@1.12.38/node_modules/libphonenumber-js/es6/helpers/extension/extractExtension.js","../../../node_modules/.pnpm/libphonenumber-js@1.12.38/node_modules/libphonenumber-js/es6/helpers/parseDigits.js","../../../node_modules/.pnpm/libphonenumber-js@1.12.38/node_modules/libphonenumber-js/es6/parseIncompletePhoneNumber.js","../../../node_modules/.pnpm/libphonenumber-js@1.12.38/node_modules/libphonenumber-js/es6/helpers/extractPhoneContext.js","../../../node_modules/.pnpm/libphonenumber-js@1.12.38/node_modules/libphonenumber-js/es6/helpers/extractFormattedPhoneNumberFromPossibleRfc3966NumberUri.js","../../../node_modules/.pnpm/libphonenumber-js@1.12.38/node_modules/libphonenumber-js/es6/parse.js","../../../node_modules/.pnpm/libphonenumber-js@1.12.38/node_modules/libphonenumber-js/es6/parsePhoneNumberWithError_.js","../../../node_modules/.pnpm/libphonenumber-js@1.12.38/node_modules/libphonenumber-js/es6/normalizeArguments.js","../../../node_modules/.pnpm/libphonenumber-js@1.12.38/node_modules/libphonenumber-js/es6/parsePhoneNumber_.js","../../../node_modules/.pnpm/libphonenumber-js@1.12.38/node_modules/libphonenumber-js/es6/parsePhoneNumber.js","../../../node_modules/.pnpm/libphonenumber-js@1.12.38/node_modules/libphonenumber-js/es6/getCountries.js","../../../node_modules/.pnpm/libphonenumber-js@1.12.38/node_modules/libphonenumber-js/es6/getExampleNumber.js","../../../node_modules/.pnpm/libphonenumber-js@1.12.38/node_modules/libphonenumber-js/min/exports/parsePhoneNumber.js","../../../node_modules/.pnpm/libphonenumber-js@1.12.38/node_modules/libphonenumber-js/min/exports/getCountryCallingCode.js","../../src/components/field-country.tsx","../../../node_modules/.pnpm/libphonenumber-js@1.12.38/node_modules/libphonenumber-js/min/exports/getCountries.js","../../src/components/field-dropdown.tsx","../../src/components/form-ascociated-focus-trap.ts","../../src/dom-utils.ts","../../src/private-event-types.ts","../../src/components/iframe-registry.tsx","../../src/components/field-iframe.tsx","../../../node_modules/.pnpm/libphonenumber-js@1.12.38/node_modules/libphonenumber-js/examples.mobile.json.js","../../src/components/field-phone-number.tsx","../../../node_modules/.pnpm/libphonenumber-js@1.12.38/node_modules/libphonenumber-js/min/exports/getExampleNumber.js","../../src/data/provinces.ts","../../src/components/field-province.tsx","../../src/components/field-text.tsx","../../src/data/currencies.ts","../../src/amount-format.ts","../../src/components/field-installment-plan.tsx","../../src/components/field.tsx","../../src/localization.ts","../../src/validation.ts","../../src/components/form-simulation-helper.tsx","../../src/components/field-group.tsx","../../../node_modules/.pnpm/preact@10.28.4/node_modules/preact/compat/dist/compat.module.js","../../src/data/simulation-scenarios.ts","../../src/components/channel-form.tsx","../../src/components/instructions-icon.tsx","../../src/components/qr-scan-icon.tsx","../../src/components/checkbox.tsx","../../src/components/payment-channel.tsx","../../src/networking.ts","../../src/api.ts","../../src/lifecycle/behavior-tree-runner.ts","../../src/components/action-iframe.tsx","../../../node_modules/.pnpm/qrcode@1.5.4/node_modules/qrcode/lib/can-promise.js","../../../node_modules/.pnpm/qrcode@1.5.4/node_modules/qrcode/lib/core/utils.js","../../../node_modules/.pnpm/qrcode@1.5.4/node_modules/qrcode/lib/core/error-correction-level.js","../../../node_modules/.pnpm/qrcode@1.5.4/node_modules/qrcode/lib/core/error-correction-code.js","../../../node_modules/.pnpm/qrcode@1.5.4/node_modules/qrcode/lib/core/polynomial.js","../../../node_modules/.pnpm/qrcode@1.5.4/node_modules/qrcode/lib/core/galois-field.js","../../../node_modules/.pnpm/qrcode@1.5.4/node_modules/qrcode/lib/core/version-check.js","../../../node_modules/.pnpm/qrcode@1.5.4/node_modules/qrcode/lib/core/regex.js","../../../node_modules/.pnpm/qrcode@1.5.4/node_modules/qrcode/lib/core/mode.js","../../../node_modules/.pnpm/qrcode@1.5.4/node_modules/qrcode/lib/core/version.js","../../../node_modules/.pnpm/dijkstrajs@1.0.3/node_modules/dijkstrajs/dijkstra.js","../../../node_modules/.pnpm/qrcode@1.5.4/node_modules/qrcode/lib/core/segments.js","../../../node_modules/.pnpm/qrcode@1.5.4/node_modules/qrcode/lib/core/numeric-data.js","../../../node_modules/.pnpm/qrcode@1.5.4/node_modules/qrcode/lib/core/alphanumeric-data.js","../../../node_modules/.pnpm/qrcode@1.5.4/node_modules/qrcode/lib/core/byte-data.js","../../../node_modules/.pnpm/qrcode@1.5.4/node_modules/qrcode/lib/core/kanji-data.js","../../../node_modules/.pnpm/qrcode@1.5.4/node_modules/qrcode/lib/core/qrcode.js","../../../node_modules/.pnpm/qrcode@1.5.4/node_modules/qrcode/lib/core/bit-buffer.js","../../../node_modules/.pnpm/qrcode@1.5.4/node_modules/qrcode/lib/core/bit-matrix.js","../../../node_modules/.pnpm/qrcode@1.5.4/node_modules/qrcode/lib/core/alignment-pattern.js","../../../node_modules/.pnpm/qrcode@1.5.4/node_modules/qrcode/lib/core/finder-pattern.js","../../../node_modules/.pnpm/qrcode@1.5.4/node_modules/qrcode/lib/core/mask-pattern.js","../../../node_modules/.pnpm/qrcode@1.5.4/node_modules/qrcode/lib/core/reed-solomon-encoder.js","../../../node_modules/.pnpm/qrcode@1.5.4/node_modules/qrcode/lib/core/format-info.js","../../../node_modules/.pnpm/qrcode@1.5.4/node_modules/qrcode/lib/renderer/utils.js","../../../node_modules/.pnpm/qrcode@1.5.4/node_modules/qrcode/lib/renderer/canvas.js","../../../node_modules/.pnpm/qrcode@1.5.4/node_modules/qrcode/lib/renderer/svg-tag.js","../../../node_modules/.pnpm/qrcode@1.5.4/node_modules/qrcode/lib/browser.js","../../src/components/action-qr.tsx","../../src/components/dialog.tsx","../../src/components/default-action-container.tsx","../../src/components/instructions.tsx","../../src/components/tooltip.tsx","../../src/components/action-va.tsx","../../src/backend-types/payment-entity.ts","../../src/data/test-data-modifiers.ts","../../src/components/redirect-instructions.tsx","../../src/components/action-empty-list-push-notification.tsx","../../src/components/action-deep-link.tsx","../../src/lifecycle/behaviors/action.ts","../../src/lifecycle/behaviors/action-paylink.ts","../../src/lifecycle/behaviors/card-info.ts","../../src/lifecycle/behaviors/channel.ts","../../src/lifecycle/behaviors/poll-worker.ts","../../src/lifecycle/behaviors/payment-entity.ts","../../src/lifecycle/behaviors/payment-options.ts","../../src/lifecycle/behaviors/sdk.ts","../../src/lifecycle/behaviors/discard.ts","../../src/lifecycle/behaviors/session.ts","../../src/lifecycle/behaviors/simulate-payment.ts","../../src/lifecycle/behaviors/submission.ts","../../src/lifecycle/behavior-tree.ts","../../src/components/digital-wallet-googlepay.tsx","../../src/components/digital-wallet-wait-for-load.tsx","../../src/components/digital-wallet-container.tsx","../../src/public-sdk.ts","../../src/index.ts","../../src/styles.ts","../../src/styles.css"],"sourcesContent":["var n,l,u,t,i,r,o,e,f,c,s,a,h,p={},v=[],y=/acit|ex(?:s|g|n|p|$)|rph|grid|ows|mnc|ntw|ine[ch]|zoo|^ord|itera/i,d=Array.isArray;function w(n,l){for(var u in l)n[u]=l[u];return n}function g(n){n&&n.parentNode&&n.parentNode.removeChild(n)}function _(l,u,t){var i,r,o,e={};for(o in u)\"key\"==o?i=u[o]:\"ref\"==o?r=u[o]:e[o]=u[o];if(arguments.length>2&&(e.children=arguments.length>3?n.call(arguments,2):t),\"function\"==typeof l&&null!=l.defaultProps)for(o in l.defaultProps)void 0===e[o]&&(e[o]=l.defaultProps[o]);return m(l,e,i,r,null)}function m(n,t,i,r,o){var e={type:n,props:t,key:i,ref:r,__k:null,__:null,__b:0,__e:null,__c:null,constructor:void 0,__v:null==o?++u:o,__i:-1,__u:0};return null==o&&null!=l.vnode&&l.vnode(e),e}function b(){return{current:null}}function k(n){return n.children}function x(n,l){this.props=n,this.context=l}function S(n,l){if(null==l)return n.__?S(n.__,n.__i+1):null;for(var u;l<n.__k.length;l++)if(null!=(u=n.__k[l])&&null!=u.__e)return u.__e;return\"function\"==typeof n.type?S(n):null}function C(n){if(n.__P&&n.__d){var u=n.__v,t=u.__e,i=[],r=[],o=w({},u);o.__v=u.__v+1,l.vnode&&l.vnode(o),z(n.__P,o,u,n.__n,n.__P.namespaceURI,32&u.__u?[t]:null,i,null==t?S(u):t,!!(32&u.__u),r),o.__v=u.__v,o.__.__k[o.__i]=o,V(i,o,r),u.__e=u.__=null,o.__e!=t&&M(o)}}function M(n){if(null!=(n=n.__)&&null!=n.__c)return n.__e=n.__c.base=null,n.__k.some(function(l){if(null!=l&&null!=l.__e)return n.__e=n.__c.base=l.__e}),M(n)}function $(n){(!n.__d&&(n.__d=!0)&&i.push(n)&&!I.__r++||r!=l.debounceRendering)&&((r=l.debounceRendering)||o)(I)}function I(){for(var n,l=1;i.length;)i.length>l&&i.sort(e),n=i.shift(),l=i.length,C(n);I.__r=0}function P(n,l,u,t,i,r,o,e,f,c,s){var a,h,y,d,w,g,_,m=t&&t.__k||v,b=l.length;for(f=A(u,l,m,f,b),a=0;a<b;a++)null!=(y=u.__k[a])&&(h=-1!=y.__i&&m[y.__i]||p,y.__i=a,g=z(n,y,h,i,r,o,e,f,c,s),d=y.__e,y.ref&&h.ref!=y.ref&&(h.ref&&D(h.ref,null,y),s.push(y.ref,y.__c||d,y)),null==w&&null!=d&&(w=d),(_=!!(4&y.__u))||h.__k===y.__k?f=H(y,f,n,_):\"function\"==typeof y.type&&void 0!==g?f=g:d&&(f=d.nextSibling),y.__u&=-7);return u.__e=w,f}function A(n,l,u,t,i){var r,o,e,f,c,s=u.length,a=s,h=0;for(n.__k=new Array(i),r=0;r<i;r++)null!=(o=l[r])&&\"boolean\"!=typeof o&&\"function\"!=typeof o?(\"string\"==typeof o||\"number\"==typeof o||\"bigint\"==typeof o||o.constructor==String?o=n.__k[r]=m(null,o,null,null,null):d(o)?o=n.__k[r]=m(k,{children:o},null,null,null):void 0===o.constructor&&o.__b>0?o=n.__k[r]=m(o.type,o.props,o.key,o.ref?o.ref:null,o.__v):n.__k[r]=o,f=r+h,o.__=n,o.__b=n.__b+1,e=null,-1!=(c=o.__i=T(o,u,f,a))&&(a--,(e=u[c])&&(e.__u|=2)),null==e||null==e.__v?(-1==c&&(i>s?h--:i<s&&h++),\"function\"!=typeof o.type&&(o.__u|=4)):c!=f&&(c==f-1?h--:c==f+1?h++:(c>f?h--:h++,o.__u|=4))):n.__k[r]=null;if(a)for(r=0;r<s;r++)null!=(e=u[r])&&0==(2&e.__u)&&(e.__e==t&&(t=S(e)),E(e,e));return t}function H(n,l,u,t){var i,r;if(\"function\"==typeof n.type){for(i=n.__k,r=0;i&&r<i.length;r++)i[r]&&(i[r].__=n,l=H(i[r],l,u,t));return l}n.__e!=l&&(t&&(l&&n.type&&!l.parentNode&&(l=S(n)),u.insertBefore(n.__e,l||null)),l=n.__e);do{l=l&&l.nextSibling}while(null!=l&&8==l.nodeType);return l}function L(n,l){return l=l||[],null==n||\"boolean\"==typeof n||(d(n)?n.some(function(n){L(n,l)}):l.push(n)),l}function T(n,l,u,t){var i,r,o,e=n.key,f=n.type,c=l[u],s=null!=c&&0==(2&c.__u);if(null===c&&null==e||s&&e==c.key&&f==c.type)return u;if(t>(s?1:0))for(i=u-1,r=u+1;i>=0||r<l.length;)if(null!=(c=l[o=i>=0?i--:r++])&&0==(2&c.__u)&&e==c.key&&f==c.type)return o;return-1}function j(n,l,u){\"-\"==l[0]?n.setProperty(l,null==u?\"\":u):n[l]=null==u?\"\":\"number\"!=typeof u||y.test(l)?u:u+\"px\"}function F(n,l,u,t,i){var r,o;n:if(\"style\"==l)if(\"string\"==typeof u)n.style.cssText=u;else{if(\"string\"==typeof t&&(n.style.cssText=t=\"\"),t)for(l in t)u&&l in u||j(n.style,l,\"\");if(u)for(l in u)t&&u[l]==t[l]||j(n.style,l,u[l])}else if(\"o\"==l[0]&&\"n\"==l[1])r=l!=(l=l.replace(f,\"$1\")),o=l.toLowerCase(),l=o in n||\"onFocusOut\"==l||\"onFocusIn\"==l?o.slice(2):l.slice(2),n.l||(n.l={}),n.l[l+r]=u,u?t?u.u=t.u:(u.u=c,n.addEventListener(l,r?a:s,r)):n.removeEventListener(l,r?a:s,r);else{if(\"http://www.w3.org/2000/svg\"==i)l=l.replace(/xlink(H|:h)/,\"h\").replace(/sName$/,\"s\");else if(\"width\"!=l&&\"height\"!=l&&\"href\"!=l&&\"list\"!=l&&\"form\"!=l&&\"tabIndex\"!=l&&\"download\"!=l&&\"rowSpan\"!=l&&\"colSpan\"!=l&&\"role\"!=l&&\"popover\"!=l&&l in n)try{n[l]=null==u?\"\":u;break n}catch(n){}\"function\"==typeof u||(null==u||!1===u&&\"-\"!=l[4]?n.removeAttribute(l):n.setAttribute(l,\"popover\"==l&&1==u?\"\":u))}}function O(n){return function(u){if(this.l){var t=this.l[u.type+n];if(null==u.t)u.t=c++;else if(u.t<t.u)return;return t(l.event?l.event(u):u)}}}function z(n,u,t,i,r,o,e,f,c,s){var a,h,p,y,_,m,b,S,C,M,$,I,A,H,L,T=u.type;if(void 0!==u.constructor)return null;128&t.__u&&(c=!!(32&t.__u),o=[f=u.__e=t.__e]),(a=l.__b)&&a(u);n:if(\"function\"==typeof T)try{if(S=u.props,C=\"prototype\"in T&&T.prototype.render,M=(a=T.contextType)&&i[a.__c],$=a?M?M.props.value:a.__:i,t.__c?b=(h=u.__c=t.__c).__=h.__E:(C?u.__c=h=new T(S,$):(u.__c=h=new x(S,$),h.constructor=T,h.render=G),M&&M.sub(h),h.state||(h.state={}),h.__n=i,p=h.__d=!0,h.__h=[],h._sb=[]),C&&null==h.__s&&(h.__s=h.state),C&&null!=T.getDerivedStateFromProps&&(h.__s==h.state&&(h.__s=w({},h.__s)),w(h.__s,T.getDerivedStateFromProps(S,h.__s))),y=h.props,_=h.state,h.__v=u,p)C&&null==T.getDerivedStateFromProps&&null!=h.componentWillMount&&h.componentWillMount(),C&&null!=h.componentDidMount&&h.__h.push(h.componentDidMount);else{if(C&&null==T.getDerivedStateFromProps&&S!==y&&null!=h.componentWillReceiveProps&&h.componentWillReceiveProps(S,$),u.__v==t.__v||!h.__e&&null!=h.shouldComponentUpdate&&!1===h.shouldComponentUpdate(S,h.__s,$)){u.__v!=t.__v&&(h.props=S,h.state=h.__s,h.__d=!1),u.__e=t.__e,u.__k=t.__k,u.__k.some(function(n){n&&(n.__=u)}),v.push.apply(h.__h,h._sb),h._sb=[],h.__h.length&&e.push(h);break n}null!=h.componentWillUpdate&&h.componentWillUpdate(S,h.__s,$),C&&null!=h.componentDidUpdate&&h.__h.push(function(){h.componentDidUpdate(y,_,m)})}if(h.context=$,h.props=S,h.__P=n,h.__e=!1,I=l.__r,A=0,C)h.state=h.__s,h.__d=!1,I&&I(u),a=h.render(h.props,h.state,h.context),v.push.apply(h.__h,h._sb),h._sb=[];else do{h.__d=!1,I&&I(u),a=h.render(h.props,h.state,h.context),h.state=h.__s}while(h.__d&&++A<25);h.state=h.__s,null!=h.getChildContext&&(i=w(w({},i),h.getChildContext())),C&&!p&&null!=h.getSnapshotBeforeUpdate&&(m=h.getSnapshotBeforeUpdate(y,_)),H=null!=a&&a.type===k&&null==a.key?q(a.props.children):a,f=P(n,d(H)?H:[H],u,t,i,r,o,e,f,c,s),h.base=u.__e,u.__u&=-161,h.__h.length&&e.push(h),b&&(h.__E=h.__=null)}catch(n){if(u.__v=null,c||null!=o)if(n.then){for(u.__u|=c?160:128;f&&8==f.nodeType&&f.nextSibling;)f=f.nextSibling;o[o.indexOf(f)]=null,u.__e=f}else{for(L=o.length;L--;)g(o[L]);N(u)}else u.__e=t.__e,u.__k=t.__k,n.then||N(u);l.__e(n,u,t)}else null==o&&u.__v==t.__v?(u.__k=t.__k,u.__e=t.__e):f=u.__e=B(t.__e,u,t,i,r,o,e,c,s);return(a=l.diffed)&&a(u),128&u.__u?void 0:f}function N(n){n&&(n.__c&&(n.__c.__e=!0),n.__k&&n.__k.some(N))}function V(n,u,t){for(var i=0;i<t.length;i++)D(t[i],t[++i],t[++i]);l.__c&&l.__c(u,n),n.some(function(u){try{n=u.__h,u.__h=[],n.some(function(n){n.call(u)})}catch(n){l.__e(n,u.__v)}})}function q(n){return\"object\"!=typeof n||null==n||n.__b>0?n:d(n)?n.map(q):w({},n)}function B(u,t,i,r,o,e,f,c,s){var a,h,v,y,w,_,m,b=i.props||p,k=t.props,x=t.type;if(\"svg\"==x?o=\"http://www.w3.org/2000/svg\":\"math\"==x?o=\"http://www.w3.org/1998/Math/MathML\":o||(o=\"http://www.w3.org/1999/xhtml\"),null!=e)for(a=0;a<e.length;a++)if((w=e[a])&&\"setAttribute\"in w==!!x&&(x?w.localName==x:3==w.nodeType)){u=w,e[a]=null;break}if(null==u){if(null==x)return document.createTextNode(k);u=document.createElementNS(o,x,k.is&&k),c&&(l.__m&&l.__m(t,e),c=!1),e=null}if(null==x)b===k||c&&u.data==k||(u.data=k);else{if(e=e&&n.call(u.childNodes),!c&&null!=e)for(b={},a=0;a<u.attributes.length;a++)b[(w=u.attributes[a]).name]=w.value;for(a in b)w=b[a],\"dangerouslySetInnerHTML\"==a?v=w:\"children\"==a||a in k||\"value\"==a&&\"defaultValue\"in k||\"checked\"==a&&\"defaultChecked\"in k||F(u,a,null,w,o);for(a in k)w=k[a],\"children\"==a?y=w:\"dangerouslySetInnerHTML\"==a?h=w:\"value\"==a?_=w:\"checked\"==a?m=w:c&&\"function\"!=typeof w||b[a]===w||F(u,a,w,b[a],o);if(h)c||v&&(h.__html==v.__html||h.__html==u.innerHTML)||(u.innerHTML=h.__html),t.__k=[];else if(v&&(u.innerHTML=\"\"),P(\"template\"==t.type?u.content:u,d(y)?y:[y],t,i,r,\"foreignObject\"==x?\"http://www.w3.org/1999/xhtml\":o,e,f,e?e[0]:i.__k&&S(i,0),c,s),null!=e)for(a=e.length;a--;)g(e[a]);c||(a=\"value\",\"progress\"==x&&null==_?u.removeAttribute(\"value\"):null!=_&&(_!==u[a]||\"progress\"==x&&!_||\"option\"==x&&_!=b[a])&&F(u,a,_,b[a],o),a=\"checked\",null!=m&&m!=u[a]&&F(u,a,m,b[a],o))}return u}function D(n,u,t){try{if(\"function\"==typeof n){var i=\"function\"==typeof n.__u;i&&n.__u(),i&&null==u||(n.__u=n(u))}else n.current=u}catch(n){l.__e(n,t)}}function E(n,u,t){var i,r;if(l.unmount&&l.unmount(n),(i=n.ref)&&(i.current&&i.current!=n.__e||D(i,null,u)),null!=(i=n.__c)){if(i.componentWillUnmount)try{i.componentWillUnmount()}catch(n){l.__e(n,u)}i.base=i.__P=null}if(i=n.__k)for(r=0;r<i.length;r++)i[r]&&E(i[r],u,t||\"function\"!=typeof n.type);t||g(n.__e),n.__c=n.__=n.__e=void 0}function G(n,l,u){return this.constructor(n,u)}function J(u,t,i){var r,o,e,f;t==document&&(t=document.documentElement),l.__&&l.__(u,t),o=(r=\"function\"==typeof i)?null:i&&i.__k||t.__k,e=[],f=[],z(t,u=(!r&&i||t).__k=_(k,null,[u]),o||p,p,t.namespaceURI,!r&&i?[i]:o?null:t.firstChild?n.call(t.childNodes):null,e,!r&&i?i:o?o.__e:t.firstChild,r,f),V(e,u,f)}function K(n,l){J(n,l,K)}function Q(l,u,t){var i,r,o,e,f=w({},l.props);for(o in l.type&&l.type.defaultProps&&(e=l.type.defaultProps),u)\"key\"==o?i=u[o]:\"ref\"==o?r=u[o]:f[o]=void 0===u[o]&&null!=e?e[o]:u[o];return arguments.length>2&&(f.children=arguments.length>3?n.call(arguments,2):t),m(l.type,f,i||l.key,r||l.ref,null)}function R(n){function l(n){var u,t;return this.getChildContext||(u=new Set,(t={})[l.__c]=this,this.getChildContext=function(){return t},this.componentWillUnmount=function(){u=null},this.shouldComponentUpdate=function(n){this.props.value!=n.value&&u.forEach(function(n){n.__e=!0,$(n)})},this.sub=function(n){u.add(n);var l=n.componentWillUnmount;n.componentWillUnmount=function(){u&&u.delete(n),l&&l.call(n)}}),n.children}return l.__c=\"__cC\"+h++,l.__=n,l.Provider=l.__l=(l.Consumer=function(n,l){return n.children(l)}).contextType=l,l}n=v.slice,l={__e:function(n,l,u,t){for(var i,r,o;l=l.__;)if((i=l.__c)&&!i.__)try{if((r=i.constructor)&&null!=r.getDerivedStateFromError&&(i.setState(r.getDerivedStateFromError(n)),o=i.__d),null!=i.componentDidCatch&&(i.componentDidCatch(n,t||{}),o=i.__d),o)return i.__E=i}catch(l){n=l}throw n}},u=0,t=function(n){return null!=n&&void 0===n.constructor},x.prototype.setState=function(n,l){var u;u=null!=this.__s&&this.__s!=this.state?this.__s:this.__s=w({},this.state),\"function\"==typeof n&&(n=n(w({},u),this.props)),n&&w(u,n),null!=n&&this.__v&&(l&&this._sb.push(l),$(this))},x.prototype.forceUpdate=function(n){this.__v&&(this.__e=!0,n&&this.__h.push(n),$(this))},x.prototype.render=k,i=[],o=\"function\"==typeof Promise?Promise.prototype.then.bind(Promise.resolve()):setTimeout,e=function(n,l){return n.__v.__b-l.__v.__b},I.__r=0,f=/(PointerCapture)$|Capture$/i,c=0,s=O(!1),a=O(!0),h=0;export{x as Component,k as Fragment,Q as cloneElement,R as createContext,_ as createElement,b as createRef,_ as h,K as hydrate,t as isValidElement,l as options,J as render,L as toChildArray};\n//# sourceMappingURL=preact.module.js.map\n","import{options as n,Fragment as o,Component as e}from\"preact\";var i;function t(o,e){return n.__a&&n.__a(e),o}null!=(i=\"undefined\"!=typeof globalThis?globalThis:\"undefined\"!=typeof window?window:void 0)&&i.__PREACT_DEVTOOLS__&&i.__PREACT_DEVTOOLS__.attachPreact(\"10.28.4\",n,{Fragment:o,Component:e});export{t as addHookName};\n//# sourceMappingURL=devtools.module.js.map\n","import{Fragment as n,options as e,Component as o}from\"preact\";import\"preact/devtools\";var t={};function r(){t={}}function a(e){return e.type===n?\"Fragment\":\"function\"==typeof e.type?e.type.displayName||e.type.name:\"string\"==typeof e.type?e.type:\"#text\"}var i=[],s=[];function c(){return i.length>0?i[i.length-1]:null}var l=!0;function u(e){return\"function\"==typeof e.type&&e.type!=n}function f(n){for(var e=[n],o=n;null!=o.__o;)e.push(o.__o),o=o.__o;return e.reduce(function(n,e){n+=\" in \"+a(e);var o=e.__source;return o?n+=\" (at \"+o.fileName+\":\"+o.lineNumber+\")\":l&&console.warn(\"Add @babel/plugin-transform-react-jsx-source to get a more detailed component stack. Note that you should not add it to production builds of your App for bundle size reasons.\"),l=!1,n+\"\\n\"},\"\")}var d=\"function\"==typeof WeakMap;function p(n){var e=[];return n.__k?(n.__k.forEach(function(n){n&&\"function\"==typeof n.type?e.push.apply(e,p(n)):n&&\"string\"==typeof n.type&&e.push(n.type)}),e):e}function h(n){return n?\"function\"==typeof n.type?null==n.__?null!=n.__e&&null!=n.__e.parentNode?n.__e.parentNode.localName:\"\":h(n.__):n.type:\"\"}var v=o.prototype.setState;function y(n){return\"table\"===n||\"tfoot\"===n||\"tbody\"===n||\"thead\"===n||\"td\"===n||\"tr\"===n||\"th\"===n}o.prototype.setState=function(n,e){return null==this.__v&&null==this.state&&console.warn('Calling \"this.setState\" inside the constructor of a component is a no-op and might be a bug in your application. Instead, set \"this.state = {}\" directly.\\n\\n'+f(c())),v.call(this,n,e)};var m=/^(address|article|aside|blockquote|details|div|dl|fieldset|figcaption|figure|footer|form|h1|h2|h3|h4|h5|h6|header|hgroup|hr|main|menu|nav|ol|p|pre|search|section|table|ul)$/,b=o.prototype.forceUpdate;function w(n){var e=n.props,o=a(n),t=\"\";for(var r in e)if(e.hasOwnProperty(r)&&\"children\"!==r){var i=e[r];\"function\"==typeof i&&(i=\"function \"+(i.displayName||i.name)+\"() {}\"),i=Object(i)!==i||i.toString?i+\"\":Object.prototype.toString.call(i),t+=\" \"+r+\"=\"+JSON.stringify(i)}var s=e.children;return\"<\"+o+t+(s&&s.length?\">..</\"+o+\">\":\" />\")}o.prototype.forceUpdate=function(n){return null==this.__v?console.warn('Calling \"this.forceUpdate\" inside the constructor of a component is a no-op and might be a bug in your application.\\n\\n'+f(c())):null==this.__P&&console.warn('Can\\'t call \"this.forceUpdate\" on an unmounted component. This is a no-op, but it indicates a memory leak in your application. To fix, cancel all subscriptions and asynchronous tasks in the componentWillUnmount method.\\n\\n'+f(this.__v)),b.call(this,n)},e.__m=function(n,e){var o=n.type,t=e.map(function(n){return n&&n.localName}).filter(Boolean);console.error('Expected a DOM node of type \"'+o+'\" but found \"'+t.join(\", \")+\"\\\" as available DOM-node(s), this is caused by the SSR'd HTML containing different DOM-nodes compared to the hydrated one.\\n\\n\"+f(n))},function(){!function(){var n=e.__b,o=e.diffed,t=e.__,r=e.vnode,a=e.__r;e.diffed=function(n){u(n)&&s.pop(),i.pop(),o&&o(n)},e.__b=function(e){u(e)&&i.push(e),n&&n(e)},e.__=function(n,e){s=[],t&&t(n,e)},e.vnode=function(n){n.__o=s.length>0?s[s.length-1]:null,r&&r(n)},e.__r=function(n){u(n)&&s.push(n),a&&a(n)}}();var n=!1,o=e.__b,r=e.diffed,c=e.vnode,l=e.__r,v=e.__e,b=e.__,g=e.__h,E=d?{useEffect:new WeakMap,useLayoutEffect:new WeakMap,lazyPropTypes:new WeakMap}:null,k=[];e.__e=function(n,e,o,t){if(e&&e.__c&&\"function\"==typeof n.then){var r=n;n=new Error(\"Missing Suspense. The throwing component was: \"+a(e));for(var i=e;i;i=i.__)if(i.__c&&i.__c.__c){n=r;break}if(n instanceof Error)throw n}try{(t=t||{}).componentStack=f(e),v(n,e,o,t),\"function\"!=typeof n.then&&setTimeout(function(){throw n})}catch(n){throw n}},e.__=function(n,e){if(!e)throw new Error(\"Undefined parent passed to render(), this is the second argument.\\nCheck if the element is available in the DOM/has the correct id.\");var o;switch(e.nodeType){case 1:case 11:case 9:o=!0;break;default:o=!1}if(!o){var t=a(n);throw new Error(\"Expected a valid HTML node as a second argument to render.\\tReceived \"+e+\" instead: render(<\"+t+\" />, \"+e+\");\")}b&&b(n,e)},e.__b=function(e){var r=e.type;if(n=!0,void 0===r)throw new Error(\"Undefined component passed to createElement()\\n\\nYou likely forgot to export your component or might have mixed up default and named imports\"+w(e)+\"\\n\\n\"+f(e));if(null!=r&&\"object\"==typeof r){if(void 0!==r.__k&&void 0!==r.__e)throw new Error(\"Invalid type passed to createElement(): \"+r+\"\\n\\nDid you accidentally pass a JSX literal as JSX twice?\\n\\n let My\"+a(e)+\" = \"+w(r)+\";\\n let vnode = <My\"+a(e)+\" />;\\n\\nThis usually happens when you export a JSX literal and not the component.\\n\\n\"+f(e));throw new Error(\"Invalid type passed to createElement(): \"+(Array.isArray(r)?\"array\":r))}if(void 0!==e.ref&&\"function\"!=typeof e.ref&&\"object\"!=typeof e.ref&&!(\"$$typeof\"in e))throw new Error('Component\\'s \"ref\" property should be a function, or an object created by createRef(), but got ['+typeof e.ref+\"] instead\\n\"+w(e)+\"\\n\\n\"+f(e));if(\"string\"==typeof e.type)for(var i in e.props)if(\"o\"===i[0]&&\"n\"===i[1]&&\"function\"!=typeof e.props[i]&&null!=e.props[i])throw new Error(\"Component's \\\"\"+i+'\" property should be a function, but got ['+typeof e.props[i]+\"] instead\\n\"+w(e)+\"\\n\\n\"+f(e));if(\"function\"==typeof e.type&&e.type.propTypes){if(\"Lazy\"===e.type.displayName&&E&&!E.lazyPropTypes.has(e.type)){var s=\"PropTypes are not supported on lazy(). Use propTypes on the wrapped component itself. \";try{var c=e.type();E.lazyPropTypes.set(e.type,!0),console.warn(s+\"Component wrapped in lazy() is \"+a(c))}catch(n){console.warn(s+\"We will log the wrapped component's name once it is loaded.\")}}var l=e.props;e.type.__f&&delete(l=function(n,e){for(var o in e)n[o]=e[o];return n}({},l)).ref,function(n,e,o,r,a){Object.keys(n).forEach(function(o){var i;try{i=n[o](e,o,r,\"prop\",null,\"SECRET_DO_NOT_PASS_THIS_OR_YOU_WILL_BE_FIRED\")}catch(n){i=n}i&&!(i.message in t)&&(t[i.message]=!0,console.error(\"Failed prop type: \"+i.message+(a&&\"\\n\"+a()||\"\")))})}(e.type.propTypes,l,0,a(e),function(){return f(e)})}o&&o(e)};var T,_=0;e.__r=function(e){l&&l(e),n=!0;var o=e.__c;if(o===T?_++:_=1,_>=25)throw new Error(\"Too many re-renders. This is limited to prevent an infinite loop which may lock up your browser. The component causing this is: \"+a(e));T=o},e.__h=function(e,o,t){if(!e||!n)throw new Error(\"Hook can only be invoked from render methods.\");g&&g(e,o,t)};var O=function(n,e){return{get:function(){var o=\"get\"+n+e;k&&k.indexOf(o)<0&&(k.push(o),console.warn(\"getting vnode.\"+n+\" is deprecated, \"+e))},set:function(){var o=\"set\"+n+e;k&&k.indexOf(o)<0&&(k.push(o),console.warn(\"setting vnode.\"+n+\" is not allowed, \"+e))}}},I={nodeName:O(\"nodeName\",\"use vnode.type\"),attributes:O(\"attributes\",\"use vnode.props\"),children:O(\"children\",\"use vnode.props.children\")},M=Object.create({},I);e.vnode=function(n){var e=n.props;if(null!==n.type&&null!=e&&(\"__source\"in e||\"__self\"in e)){var o=n.props={};for(var t in e){var r=e[t];\"__source\"===t?n.__source=r:\"__self\"===t?n.__self=r:o[t]=r}}n.__proto__=M,c&&c(n)},e.diffed=function(e){var o,t=e.type,i=e.__;if(e.__k&&e.__k.forEach(function(n){if(\"object\"==typeof n&&n&&void 0===n.type){var o=Object.keys(n).join(\",\");throw new Error(\"Objects are not valid as a child. Encountered an object with the keys {\"+o+\"}.\\n\\n\"+f(e))}}),e.__c===T&&(_=0),\"string\"==typeof t&&(y(t)||\"p\"===t||\"a\"===t||\"button\"===t)){var s=h(i);if(\"\"!==s&&y(t))\"table\"===t&&\"td\"!==s&&y(s)?console.error(\"Improper nesting of table. Your <table> should not have a table-node parent.\"+w(e)+\"\\n\\n\"+f(e)):\"thead\"!==t&&\"tfoot\"!==t&&\"tbody\"!==t||\"table\"===s?\"tr\"===t&&\"thead\"!==s&&\"tfoot\"!==s&&\"tbody\"!==s?console.error(\"Improper nesting of table. Your <tr> should have a <thead/tbody/tfoot> parent.\"+w(e)+\"\\n\\n\"+f(e)):\"td\"===t&&\"tr\"!==s?console.error(\"Improper nesting of table. Your <td> should have a <tr> parent.\"+w(e)+\"\\n\\n\"+f(e)):\"th\"===t&&\"tr\"!==s&&console.error(\"Improper nesting of table. Your <th> should have a <tr>.\"+w(e)+\"\\n\\n\"+f(e)):console.error(\"Improper nesting of table. Your <thead/tbody/tfoot> should have a <table> parent.\"+w(e)+\"\\n\\n\"+f(e));else if(\"p\"===t){var c=p(e).filter(function(n){return m.test(n)});c.length&&console.error(\"Improper nesting of paragraph. Your <p> should not have \"+c.join(\", \")+\" as child-elements.\"+w(e)+\"\\n\\n\"+f(e))}else\"a\"!==t&&\"button\"!==t||-1!==p(e).indexOf(t)&&console.error(\"Improper nesting of interactive content. Your <\"+t+\"> should not have other \"+(\"a\"===t?\"anchor\":\"button\")+\" tags as child-elements.\"+w(e)+\"\\n\\n\"+f(e))}if(n=!1,r&&r(e),null!=e.__k)for(var l=[],u=0;u<e.__k.length;u++){var d=e.__k[u];if(d&&null!=d.key){var v=d.key;if(-1!==l.indexOf(v)){console.error('Following component has two or more children with the same key attribute: \"'+v+'\". This may cause glitches and misbehavior in rendering process. Component: \\n\\n'+w(e)+\"\\n\\n\"+f(e));break}l.push(v)}}if(null!=e.__c&&null!=e.__c.__H){var b=e.__c.__H.__;if(b)for(var g=0;g<b.length;g+=1){var E=b[g];if(E.__H)for(var k=0;k<E.__H.length;k++)if((o=E.__H[k])!=o){var O=a(e);console.warn(\"Invalid argument passed to hook. Hooks should not be called with NaN in the dependency array. Hook index \"+g+\" in component \"+O+\" was called with NaN.\")}}}}}();export{c as getCurrentVNode,a as getDisplayName,f as getOwnerStack,r as resetPropWarnings};\n//# sourceMappingURL=debug.module.js.map\n","import{options as r,Fragment as e}from\"preact\";export{Fragment}from\"preact\";var t=/[\"&<]/;function n(r){if(0===r.length||!1===t.test(r))return r;for(var e=0,n=0,o=\"\",f=\"\";n<r.length;n++){switch(r.charCodeAt(n)){case 34:f=\"&quot;\";break;case 38:f=\"&amp;\";break;case 60:f=\"&lt;\";break;default:continue}n!==e&&(o+=r.slice(e,n)),o+=f,e=n+1}return n!==e&&(o+=r.slice(e,n)),o}var o=/acit|ex(?:s|g|n|p|$)|rph|grid|ows|mnc|ntw|ine[ch]|zoo|^ord|itera/i,f=0,i=Array.isArray;function u(e,t,n,o,i,u){t||(t={});var a,c,p=t;if(\"ref\"in p)for(c in p={},t)\"ref\"==c?a=t[c]:p[c]=t[c];var l={type:e,props:p,key:n,ref:a,__k:null,__:null,__b:0,__e:null,__c:null,constructor:void 0,__v:--f,__i:-1,__u:0,__source:i,__self:u};if(\"function\"==typeof e&&(a=e.defaultProps))for(c in a)void 0===p[c]&&(p[c]=a[c]);return r.vnode&&r.vnode(l),l}function a(r){var t=u(e,{tpl:r,exprs:[].slice.call(arguments,1)});return t.key=t.__v,t}var c={},p=/[A-Z]/g;function l(e,t){if(r.attr){var f=r.attr(e,t);if(\"string\"==typeof f)return f}if(t=function(r){return null!==r&&\"object\"==typeof r&&\"function\"==typeof r.valueOf?r.valueOf():r}(t),\"ref\"===e||\"key\"===e)return\"\";if(\"style\"===e&&\"object\"==typeof t){var i=\"\";for(var u in t){var a=t[u];if(null!=a&&\"\"!==a){var l=\"-\"==u[0]?u:c[u]||(c[u]=u.replace(p,\"-$&\").toLowerCase()),s=\";\";\"number\"!=typeof a||l.startsWith(\"--\")||o.test(l)||(s=\"px;\"),i=i+l+\":\"+a+s}}return e+'=\"'+n(i)+'\"'}return null==t||!1===t||\"function\"==typeof t||\"object\"==typeof t?\"\":!0===t?e:e+'=\"'+n(\"\"+t)+'\"'}function s(r){if(null==r||\"boolean\"==typeof r||\"function\"==typeof r)return null;if(\"object\"==typeof r){if(void 0===r.constructor)return r;if(i(r)){for(var e=0;e<r.length;e++)r[e]=s(r[e]);return r}}return n(\"\"+r)}export{u as jsx,l as jsxAttr,u as jsxDEV,s as jsxEscape,a as jsxTemplate,u as jsxs};\n//# sourceMappingURL=jsxRuntime.module.js.map\n","import {\n ComponentChildren,\n FunctionComponent,\n render,\n SVGAttributes,\n} from \"preact\";\n\ntype Direction = \"up\" | \"down\" | \"left\" | \"right\";\n\ntype Props = {\n name: IconName;\n size: number;\n direction?: Direction;\n className?: string;\n};\n\nconst Icon: FunctionComponent<SVGAttributes<SVGSVGElement> & Props> = (\n props,\n) => {\n const { name, size, direction } = props;\n\n let svgTransform = undefined;\n switch (direction) {\n case \"left\":\n svgTransform = \"rotate(0 12 12)\";\n break;\n case \"right\":\n svgTransform = \"rotate(180 12 12)\";\n break;\n case \"up\":\n svgTransform = \"rotate(90 12 12)\";\n break;\n case \"down\":\n svgTransform = \"rotate(-90 12 12)\";\n break;\n }\n\n return (\n <svg\n className={`xendit-icon ${props.className ?? \"\"}`}\n width={size}\n height={size}\n viewBox=\"0 0 24 24\"\n fill=\"none\"\n stroke=\"none\"\n >\n {/* TODO: figure out why this doens't work. Maybe because of the self signed cert? */}\n {/* <use href={`#xendit-icon-${name}`} transform={svgTransform} /> */}\n <g transform={svgTransform}>\n {iconData.find((icon) => icon.name === name)?.node ?? null}\n </g>\n </svg>\n );\n};\n\nfunction makeIcon<T extends string>(\n id: T,\n children: ComponentChildren,\n scale: number,\n): { name: T; node: ComponentChildren } {\n return {\n name: id,\n node: (\n <g\n id={`xendit-icon-${id}`}\n transform={`scale(${1 / scale} ${1 / scale})`}\n >\n {children}\n </g>\n ),\n };\n}\n\nconst iconData = [\n makeIcon(\n \"chevron\",\n <path\n d=\"M15 19.5L7.5 12L15 4.5\"\n stroke=\"currentColor\"\n stroke-width=\"1.5\"\n stroke-linecap=\"round\"\n stroke-linejoin=\"round\"\n />,\n 24 / 24,\n ),\n makeIcon(\n \"check\",\n <path\n d=\"M13.5 4.5L6.5 11.5L3 8\"\n stroke=\"currentColor\"\n stroke-width=\"1.5\"\n stroke-linecap=\"round\"\n stroke-linejoin=\"round\"\n />,\n 16 / 24,\n ),\n makeIcon(\n \"x\",\n <>\n <path\n d=\"M18.75 5.25L5.25 18.75\"\n stroke=\"currentColor\"\n stroke-width=\"1.5\"\n stroke-linecap=\"round\"\n stroke-linejoin=\"round\"\n />\n <path\n d=\"M18.75 18.75L5.25 5.25\"\n stroke=\"currentColor\"\n stroke-width=\"1.5\"\n stroke-linecap=\"round\"\n stroke-linejoin=\"round\"\n />\n </>,\n 24 / 24,\n ),\n makeIcon(\n \"card\",\n <path\n fill=\"currentColor\"\n d=\"M17.5 3.75H2.5C2.16848 3.75 1.85054 3.8817 1.61612 4.11612C1.3817 4.35054 1.25 4.66848 1.25 5V15C1.25 15.3315 1.3817 15.6495 1.61612 15.8839C1.85054 16.1183 2.16848 16.25 2.5 16.25H17.5C17.8315 16.25 18.1495 16.1183 18.3839 15.8839C18.6183 15.6495 18.75 15.3315 18.75 15V5C18.75 4.66848 18.6183 4.35054 18.3839 4.11612C18.1495 3.8817 17.8315 3.75 17.5 3.75ZM10.625 13.75H9.375C9.20924 13.75 9.05027 13.6842 8.93306 13.5669C8.81585 13.4497 8.75 13.2908 8.75 13.125C8.75 12.9592 8.81585 12.8003 8.93306 12.6831C9.05027 12.5658 9.20924 12.5 9.375 12.5H10.625C10.7908 12.5 10.9497 12.5658 11.0669 12.6831C11.1842 12.8003 11.25 12.9592 11.25 13.125C11.25 13.2908 11.1842 13.4497 11.0669 13.5669C10.9497 13.6842 10.7908 13.75 10.625 13.75ZM15.625 13.75H13.125C12.9592 13.75 12.8003 13.6842 12.6831 13.5669C12.5658 13.4497 12.5 13.2908 12.5 13.125C12.5 12.9592 12.5658 12.8003 12.6831 12.6831C12.8003 12.5658 12.9592 12.5 13.125 12.5H15.625C15.7908 12.5 15.9497 12.5658 16.0669 12.6831C16.1842 12.8003 16.25 12.9592 16.25 13.125C16.25 13.2908 16.1842 13.4497 16.0669 13.5669C15.9497 13.6842 15.7908 13.75 15.625 13.75ZM2.5 6.875V5H17.5V6.875H2.5Z\"\n />,\n 20 / 24,\n ),\n makeIcon(\n \"copy\",\n <>\n <path\n d=\"M6 9.5H10\"\n stroke=\"currentColor\"\n strokeLinecap=\"round\"\n strokeLinejoin=\"round\"\n />\n <path\n d=\"M6 7.5H10\"\n stroke=\"currentColor\"\n strokeLinecap=\"round\"\n strokeLinejoin=\"round\"\n />\n <path\n d=\"M10 2.5H12.5C12.6326 2.5 12.7598 2.55268 12.8536 2.64645C12.9473 2.74021 13 2.86739 13 3V13.5C13 13.6326 12.9473 13.7598 12.8536 13.8536C12.7598 13.9473 12.6326 14 12.5 14H3.5C3.36739 14 3.24021 13.9473 3.14645 13.8536C3.05268 13.7598 3 13.6326 3 13.5V3C3 2.86739 3.05268 2.74021 3.14645 2.64645C3.24021 2.55268 3.36739 2.5 3.5 2.5H6\"\n stroke=\"currentColor\"\n strokeLinecap=\"round\"\n strokeLinejoin=\"round\"\n />\n <path\n d=\"M5.5 4.5V4C5.5 3.33696 5.76339 2.70107 6.23223 2.23223C6.70107 1.76339 7.33696 1.5 8 1.5C8.66304 1.5 9.29893 1.76339 9.76777 2.23223C10.2366 2.70107 10.5 3.33696 10.5 4V4.5H5.5Z\"\n stroke=\"currentColor\"\n strokeLinecap=\"round\"\n strokeLinejoin=\"round\"\n />\n </>,\n 16 / 24,\n ),\n makeIcon(\n \"dummy\",\n <path\n fill=\"currentColor\"\n d=\"M17.5 11.875V15C17.5 15.3315 17.3683 15.6495 17.1339 15.8839C16.8995 16.1183 16.5815 16.25 16.25 16.25H3.75C3.41848 16.25 3.10054 16.1183 2.86612 15.8839C2.6317 15.6495 2.5 15.3315 2.5 15V11.875C2.5 11.5435 2.6317 11.2255 2.86612 10.9911C3.10054 10.7567 3.41848 10.625 3.75 10.625H16.25C16.5815 10.625 16.8995 10.7567 17.1339 10.9911C17.3683 11.2255 17.5 11.5435 17.5 11.875ZM16.25 3.75H3.75C3.41848 3.75 3.10054 3.8817 2.86612 4.11612C2.6317 4.35054 2.5 4.66848 2.5 5V8.125C2.5 8.45652 2.6317 8.77446 2.86612 9.00888C3.10054 9.2433 3.41848 9.375 3.75 9.375H16.25C16.5815 9.375 16.8995 9.2433 17.1339 9.00888C17.3683 8.77446 17.5 8.45652 17.5 8.125V5C17.5 4.66848 17.3683 4.35054 17.1339 4.11612C16.8995 3.8817 16.5815 3.75 16.25 3.75Z\"\n />,\n 20 / 24,\n ),\n];\n\ntype IconName = (typeof iconData)[number][\"name\"];\n\nexport function createIconSet() {\n const iconSet = document.createElement(\"svg\");\n iconSet.id = \"xendit-icon-set\";\n iconSet.style.display = \"none\";\n render(<defs>{iconData.map((icon) => icon.node)}</defs>, iconSet);\n document.head.appendChild(iconSet);\n}\n\nexport default Icon;\n","import { options } from \"preact\";\n\nlet once = false;\n\nexport function setupPreactBatch() {\n if (once) {\n return;\n }\n once = true;\n options.debounceRendering = (fn) => queueMicrotask(fn);\n}\n","/**\n * @public\n */\nexport type XenditEventMap = {\n init: XenditInitEvent;\n\n \"submission-ready\": XenditReadyEvent;\n \"submission-not-ready\": XenditReadyEvent;\n\n \"submission-begin\": XenditSubmissionBeginEvent;\n \"submission-end\": XenditSubmissionEndEvent;\n\n \"action-begin\": XenditActionBeginEvent;\n \"action-end\": XenditActionEndEvent;\n\n \"will-redirect\": XenditWillRedirectEvent;\n\n \"session-complete\": XenditSessionCompleteEvent;\n \"session-expired-or-canceled\": XenditSessionExpiredOrCanceledEvent;\n \"session-pending\": XenditSessionPendingEvent;\n \"session-not-pending\": XenditSessionNotPendingEvent;\n\n \"payment-request-created\": XenditPaymentRequestCreatedEvent;\n \"payment-request-discarded\": XenditPaymentRequestDiscardedEvent;\n \"payment-token-created\": XenditPaymentTokenCreatedEvent;\n \"payment-token-discarded\": XenditPaymentTokenDiscardedEvent;\n\n \"fatal-error\": XenditFatalErrorEvent;\n};\n\n/**\n * @public\n */\nexport type XenditEventListener<\n T extends Event | XenditEventMap[keyof XenditEventMap],\n> = ((event: T) => void) | null;\n\n/**\n * @public\n * Event fired when the Session is loaded.\n */\nexport class XenditInitEvent extends Event {\n static type = \"init\" as const;\n\n constructor() {\n super(XenditInitEvent.type, {});\n }\n}\n\n/**\n * @public\n * Event fired when the SDK fails in an unrecoverable way.\n */\nexport class XenditFatalErrorEvent extends Event {\n static type = \"fatal-error\" as const;\n\n constructor(\n /**\n * A detailed error message for developers. Don't show this to users.\n */\n public message: string,\n ) {\n super(XenditFatalErrorEvent.type, {});\n }\n}\n\n/**\n * @public\n * Event fired when the SDK is ready to submit.\n */\nexport class XenditReadyEvent extends Event {\n static type = \"submission-ready\" as const;\n\n constructor(public channelCode: string) {\n super(XenditReadyEvent.type, {});\n }\n}\n\n/**\n * @public\n * Event fired when the SDK is not ready to submit.\n */\nexport class XenditNotReadyEvent extends Event {\n static type = \"submission-not-ready\" as const;\n\n constructor() {\n super(XenditNotReadyEvent.type, {});\n }\n}\n\n/**\n * @public\n * Event fired after submission begins.\n */\nexport class XenditSubmissionBeginEvent extends Event {\n static type = \"submission-begin\" as const;\n\n constructor() {\n super(XenditSubmissionBeginEvent.type, {});\n }\n}\n\n/**\n * @public\n * Event fired when a submission is complete or fails. Submission encompasses creation of a\n * payment request or payment token, and any actions the user needs to complete.\n *\n * Includes details about why the submission ended, and error messages if applicable.\n */\nexport class XenditSubmissionEndEvent extends Event {\n static type = \"submission-end\" as const;\n\n constructor(\n /**\n * The reason why the submission ended.\n */\n public reason: string,\n /**\n * An error message to show to the user. A title and 1-2 lines of localized text.\n */\n public userErrorMessage?: string[],\n /**\n * A detailed error message for developers.\n */\n public developerErrorMessage?: {\n /**\n * The type of error.\n * - NETWORK_ERROR: A network error occurred while creating the payment request or payment token.\n * - ERROR: Failed to created a payment request or payment token.\n * - FAILURE: A payment request or payment token transitioned to a failure state.\n */\n type: \"NETWORK_ERROR\" | \"ERROR\" | \"FAILURE\";\n /**\n * The code associated with the error.\n */\n code: string;\n },\n ) {\n super(XenditSubmissionEndEvent.type, {});\n }\n}\n\n/**\n * @public\n * Event sometimes fired after submission, if an action is required.\n */\nexport class XenditActionBeginEvent extends Event {\n static type = \"action-begin\" as const;\n\n constructor() {\n super(XenditActionBeginEvent.type, {});\n }\n}\n\n/**\n * @public\n * Event fired when an action ends, success or fail.\n */\nexport class XenditActionEndEvent extends Event {\n static type = \"action-end\" as const;\n\n constructor() {\n super(XenditActionEndEvent.type, {});\n }\n}\n\n/**\n * @public\n * Event fired when the a redirect action is about to happen.\n */\nexport class XenditWillRedirectEvent extends Event {\n static type = \"will-redirect\" as const;\n\n constructor() {\n super(XenditWillRedirectEvent.type, {});\n }\n}\n\n/**\n * @public\n * Event fired when the session is complete, meaning the payment has been processed\n * or the token has been created.\n */\nexport class XenditSessionCompleteEvent extends Event {\n static type = \"session-complete\" as const;\n\n constructor() {\n super(XenditSessionCompleteEvent.type, {});\n }\n}\n\n/**\n * @public\n * Event fired when the session has failed, meaning expired or cancelled.\n */\nexport class XenditSessionExpiredOrCanceledEvent extends Event {\n static type = \"session-expired-or-canceled\" as const;\n\n constructor() {\n super(XenditSessionExpiredOrCanceledEvent.type, {});\n }\n}\n\n/**\n * @public\n * Event fired when the session is pending.\n */\nexport class XenditSessionPendingEvent extends Event {\n static type = \"session-pending\" as const;\n\n constructor() {\n super(XenditSessionPendingEvent.type, {});\n }\n}\n\n/**\n * @public\n * Event fired when the session is no longer pending.\n */\nexport class XenditSessionNotPendingEvent extends Event {\n static type = \"session-not-pending\" as const;\n\n constructor() {\n super(XenditSessionNotPendingEvent.type, {});\n }\n}\n\n/**\n * @public\n */\nexport class XenditPaymentRequestCreatedEvent extends Event {\n static type = \"payment-request-created\" as const;\n\n constructor(public paymentRequestId: string) {\n super(XenditPaymentRequestCreatedEvent.type, {});\n }\n}\n\n/**\n * @public\n */\nexport class XenditPaymentTokenCreatedEvent extends Event {\n static type = \"payment-token-created\" as const;\n\n constructor(public paymentTokenId: string) {\n super(XenditPaymentTokenCreatedEvent.type, {});\n }\n}\n\n/**\n * @public\n */\nexport class XenditPaymentRequestDiscardedEvent extends Event {\n static type = \"payment-request-discarded\" as const;\n\n constructor(public paymentRequestId: string) {\n super(XenditPaymentRequestDiscardedEvent.type, {});\n }\n}\n\n/**\n * @public\n */\nexport class XenditPaymentTokenDiscardedEvent extends Event {\n static type = \"payment-token-discarded\" as const;\n\n constructor(public paymentTokenId: string) {\n super(XenditPaymentTokenDiscardedEvent.type, {});\n }\n}\n","export const internal = Symbol(\"xendit-internal\");\n","import { ComponentChildren, FunctionComponent } from \"preact\";\n\ninterface Props {\n children: ComponentChildren;\n}\n\n/**\n * @example\n * <Accordion>\n * <AccordionItem>Content</AccordionItem>\n * <AccordionItem>Content</AccordionItem>\n * </Accordion>\n */\nexport const Accordion: FunctionComponent<Props> = (props) => {\n return <div class=\"xendit-accordion\">{props.children}</div>;\n};\n","import{options as n}from\"preact\";var t,r,u,i,o=0,f=[],c=n,e=c.__b,a=c.__r,v=c.diffed,l=c.__c,m=c.unmount,s=c.__;function p(n,t){c.__h&&c.__h(r,n,o||t),o=0;var u=r.__H||(r.__H={__:[],__h:[]});return n>=u.__.length&&u.__.push({}),u.__[n]}function d(n){return o=1,h(D,n)}function h(n,u,i){var o=p(t++,2);if(o.t=n,!o.__c&&(o.__=[i?i(u):D(void 0,u),function(n){var t=o.__N?o.__N[0]:o.__[0],r=o.t(t,n);t!==r&&(o.__N=[r,o.__[1]],o.__c.setState({}))}],o.__c=r,!r.__f)){var f=function(n,t,r){if(!o.__c.__H)return!0;var u=o.__c.__H.__.filter(function(n){return n.__c});if(u.every(function(n){return!n.__N}))return!c||c.call(this,n,t,r);var i=o.__c.props!==n;return u.some(function(n){if(n.__N){var t=n.__[0];n.__=n.__N,n.__N=void 0,t!==n.__[0]&&(i=!0)}}),c&&c.call(this,n,t,r)||i};r.__f=!0;var c=r.shouldComponentUpdate,e=r.componentWillUpdate;r.componentWillUpdate=function(n,t,r){if(this.__e){var u=c;c=void 0,f(n,t,r),c=u}e&&e.call(this,n,t,r)},r.shouldComponentUpdate=f}return o.__N||o.__}function y(n,u){var i=p(t++,3);!c.__s&&C(i.__H,u)&&(i.__=n,i.u=u,r.__H.__h.push(i))}function _(n,u){var i=p(t++,4);!c.__s&&C(i.__H,u)&&(i.__=n,i.u=u,r.__h.push(i))}function A(n){return o=5,T(function(){return{current:n}},[])}function F(n,t,r){o=6,_(function(){if(\"function\"==typeof n){var r=n(t());return function(){n(null),r&&\"function\"==typeof r&&r()}}if(n)return n.current=t(),function(){return n.current=null}},null==r?r:r.concat(n))}function T(n,r){var u=p(t++,7);return C(u.__H,r)&&(u.__=n(),u.__H=r,u.__h=n),u.__}function q(n,t){return o=8,T(function(){return n},t)}function x(n){var u=r.context[n.__c],i=p(t++,9);return i.c=n,u?(null==i.__&&(i.__=!0,u.sub(r)),u.props.value):n.__}function P(n,t){c.useDebugValue&&c.useDebugValue(t?t(n):n)}function b(n){var u=p(t++,10),i=d();return u.__=n,r.componentDidCatch||(r.componentDidCatch=function(n,t){u.__&&u.__(n,t),i[1](n)}),[i[0],function(){i[1](void 0)}]}function g(){var n=p(t++,11);if(!n.__){for(var u=r.__v;null!==u&&!u.__m&&null!==u.__;)u=u.__;var i=u.__m||(u.__m=[0,0]);n.__=\"P\"+i[0]+\"-\"+i[1]++}return n.__}function j(){for(var n;n=f.shift();){var t=n.__H;if(n.__P&&t)try{t.__h.some(z),t.__h.some(B),t.__h=[]}catch(r){t.__h=[],c.__e(r,n.__v)}}}c.__b=function(n){r=null,e&&e(n)},c.__=function(n,t){n&&t.__k&&t.__k.__m&&(n.__m=t.__k.__m),s&&s(n,t)},c.__r=function(n){a&&a(n),t=0;var i=(r=n.__c).__H;i&&(u===r?(i.__h=[],r.__h=[],i.__.some(function(n){n.__N&&(n.__=n.__N),n.u=n.__N=void 0})):(i.__h.some(z),i.__h.some(B),i.__h=[],t=0)),u=r},c.diffed=function(n){v&&v(n);var t=n.__c;t&&t.__H&&(t.__H.__h.length&&(1!==f.push(t)&&i===c.requestAnimationFrame||((i=c.requestAnimationFrame)||w)(j)),t.__H.__.some(function(n){n.u&&(n.__H=n.u),n.u=void 0})),u=r=null},c.__c=function(n,t){t.some(function(n){try{n.__h.some(z),n.__h=n.__h.filter(function(n){return!n.__||B(n)})}catch(r){t.some(function(n){n.__h&&(n.__h=[])}),t=[],c.__e(r,n.__v)}}),l&&l(n,t)},c.unmount=function(n){m&&m(n);var t,r=n.__c;r&&r.__H&&(r.__H.__.some(function(n){try{z(n)}catch(n){t=n}}),r.__H=void 0,t&&c.__e(t,r.__v))};var k=\"function\"==typeof requestAnimationFrame;function w(n){var t,r=function(){clearTimeout(u),k&&cancelAnimationFrame(t),setTimeout(n)},u=setTimeout(r,35);k&&(t=requestAnimationFrame(r))}function z(n){var t=r,u=n.__c;\"function\"==typeof u&&(n.__c=void 0,u()),r=t}function B(n){var t=r;n.__c=n.__(),r=t}function C(n,t){return!n||n.length!==t.length||t.some(function(t,r){return t!==n[r]})}function D(n,t){return\"function\"==typeof t?t(n):t}export{q as useCallback,x as useContext,P as useDebugValue,y as useEffect,b as useErrorBoundary,g as useId,F as useImperativeHandle,_ as useLayoutEffect,T as useMemo,h as useReducer,A as useRef,d as useState};\n//# sourceMappingURL=hooks.module.js.map\n","/*!\n\tCopyright (c) 2018 Jed Watson.\n\tLicensed under the MIT License (MIT), see\n\thttp://jedwatson.github.io/classnames\n*/\n/* global define */\n\n(function () {\n\t'use strict';\n\n\tvar hasOwn = {}.hasOwnProperty;\n\n\tfunction classNames () {\n\t\tvar classes = '';\n\n\t\tfor (var i = 0; i < arguments.length; i++) {\n\t\t\tvar arg = arguments[i];\n\t\t\tif (arg) {\n\t\t\t\tclasses = appendClass(classes, parseValue(arg));\n\t\t\t}\n\t\t}\n\n\t\treturn classes;\n\t}\n\n\tfunction parseValue (arg) {\n\t\tif (typeof arg === 'string' || typeof arg === 'number') {\n\t\t\treturn arg;\n\t\t}\n\n\t\tif (typeof arg !== 'object') {\n\t\t\treturn '';\n\t\t}\n\n\t\tif (Array.isArray(arg)) {\n\t\t\treturn classNames.apply(null, arg);\n\t\t}\n\n\t\tif (arg.toString !== Object.prototype.toString && !arg.toString.toString().includes('[native code]')) {\n\t\t\treturn arg.toString();\n\t\t}\n\n\t\tvar classes = '';\n\n\t\tfor (var key in arg) {\n\t\t\tif (hasOwn.call(arg, key) && arg[key]) {\n\t\t\t\tclasses = appendClass(classes, key);\n\t\t\t}\n\t\t}\n\n\t\treturn classes;\n\t}\n\n\tfunction appendClass (value, newClass) {\n\t\tif (!newClass) {\n\t\t\treturn value;\n\t\t}\n\t\n\t\tif (value) {\n\t\t\treturn value + ' ' + newClass;\n\t\t}\n\t\n\t\treturn value + newClass;\n\t}\n\n\tif (typeof module !== 'undefined' && module.exports) {\n\t\tclassNames.default = classNames;\n\t\tmodule.exports = classNames;\n\t} else if (typeof define === 'function' && typeof define.amd === 'object' && define.amd) {\n\t\t// register as 'classnames', consistent with npm package name\n\t\tdefine('classnames', [], function () {\n\t\t\treturn classNames;\n\t\t});\n\t} else {\n\t\twindow.classNames = classNames;\n\t}\n}());\n","import { useCallback } from \"preact/hooks\";\nimport Icon from \"./icon\";\nimport classNames from \"classnames\";\nimport {\n ComponentChildren,\n FunctionComponent,\n TargetedKeyboardEvent,\n} from \"preact\";\n\ninterface Props {\n id: string;\n title: string;\n subtitle?: string;\n disabled?: boolean;\n open: boolean;\n onClick: (id: string) => void;\n children: ComponentChildren;\n}\n\nexport const AccordionItem: FunctionComponent<Props> = (props) => {\n const { id, title, subtitle, disabled, open, onClick, children } = props;\n\n const chevronDirection = open ? \"up\" : \"down\";\n\n const toggleOpen = useCallback(() => {\n if (disabled) {\n return;\n }\n onClick(id);\n }, [disabled, onClick, id]);\n\n const handleKeyPress = useCallback(\n (event: TargetedKeyboardEvent<HTMLDivElement>) => {\n if (event.key === \"Enter\" || event.key === \" \") {\n toggleOpen();\n event.preventDefault();\n }\n },\n [toggleOpen],\n );\n\n const handleClick = useCallback(() => {\n toggleOpen();\n }, [toggleOpen]);\n\n return (\n <div\n className={classNames(\n \"xendit-accordion-item\",\n disabled ? \"xendit-accordion-item-disabled\" : \"\",\n open ? \"xendit-accordion-item-open\" : \"xendit-accordion-item-closed\",\n )}\n >\n <div\n className=\"xendit-accordion-item-header\"\n onClick={handleClick}\n onKeyDown={handleKeyPress}\n role=\"button\"\n tabIndex={disabled ? -1 : 0}\n >\n <Icon\n className=\"xendit-accordion-item-header-icon\"\n name=\"dummy\"\n size={24}\n />\n <div className=\"xendit-accordion-item-header-title xendit-text-16 xendit-text-bold\">\n {title}\n {subtitle ? (\n <div className=\"xendit-accordion-item-header-subtitle xendit-text-14\">\n {subtitle}\n </div>\n ) : null}\n </div>\n <Icon\n className=\"xendit-accordion-item-chevron\"\n name=\"chevron\"\n size={24}\n direction={chevronDirection}\n />\n </div>\n <div className=\"xendit-accordion-item-content\" inert={!open}>\n <div className=\"xendit-accordion-item-padding\">{children}</div>\n </div>\n </div>\n );\n};\n","import { WorldState, XenditComponents } from \"../public-sdk\";\nimport { BffSession } from \"../backend-types/session\";\nimport { BffBusiness } from \"../backend-types/business\";\nimport { BffCustomer } from \"../backend-types/customer\";\nimport { BffChannel, BffChannelUiGroup } from \"../backend-types/channel\";\nimport { internal } from \"../internal\";\nimport { ComponentChildren, createContext, FunctionComponent } from \"preact\";\nimport { useContext } from \"preact/hooks\";\nimport { BffDigitalWallets } from \"../backend-types/digital-wallets\";\n\n// Create contexts\nexport const SessionContext = createContext<BffSession | null>(null);\nSessionContext.displayName = \"SessionContext\";\n\nexport const BusinessContext = createContext<BffBusiness | null>(null);\nBusinessContext.displayName = \"BusinessContext\";\n\nexport const CustomerContext = createContext<BffCustomer | null>(null);\nCustomerContext.displayName = \"CustomerContext\";\n\nexport const ChannelsContext = createContext<BffChannel[] | null>(null);\nChannelsContext.displayName = \"ChannelsContext\";\n\nexport const ChannelUiGroupsContext = createContext<BffChannelUiGroup[] | null>(\n null,\n);\nChannelUiGroupsContext.displayName = \"ChannelUiGroupsContext\";\n\nexport const DigitalWalletsContext = createContext<BffDigitalWallets | null>(\n null,\n);\nDigitalWalletsContext.displayName = \"DigitalWalletsContext\";\n\nexport const SdkContext = createContext<XenditComponents | null>(null);\nSdkContext.displayName = \"SdkContext\";\n\nexport const CurrentChannelContext = createContext<BffChannel | null>(null);\nCurrentChannelContext.displayName = \"CurrentChannelContext\";\n\n// Custom hooks for consuming contexts\nexport const useSession = () => {\n const context = useContext(SessionContext);\n if (context === null) {\n throw new Error(\"useSession must be used within a XenditSessionProvider\");\n }\n return context;\n};\n\nexport const useBusiness = () => {\n const context = useContext(BusinessContext);\n if (context === null) {\n throw new Error(\"useBusiness must be used within a XenditSessionProvider\");\n }\n return context;\n};\n\nexport const useCustomer = () => {\n const context = useContext(CustomerContext);\n if (context === null) {\n throw new Error(\"useCustomer must be used within a XenditSessionProvider\");\n }\n return context;\n};\n\nexport const useChannels = () => {\n const context = useContext(ChannelsContext);\n if (context === null) {\n throw new Error(\"useChannels must be used within a XenditSessionProvider\");\n }\n return context;\n};\n\nexport const useChannelUiGroups = () => {\n const context = useContext(ChannelUiGroupsContext);\n if (context === null) {\n throw new Error(\n \"useChannelUiGroups must be used within a XenditSessionProvider\",\n );\n }\n return context;\n};\n\nexport const useDigitalWallets = () => {\n const context = useContext(DigitalWalletsContext);\n return context;\n};\n\nexport const useSdk = () => {\n const context = useContext(SdkContext);\n if (context === null) {\n throw new Error(\"useSdk must be used within a XenditSessionProvider\");\n }\n return context;\n};\n\nexport const useCurrentChannel = () => {\n return useContext(CurrentChannelContext);\n};\n\ninterface XenditSessionProviderProps {\n children: ComponentChildren;\n data: WorldState;\n sdk: XenditComponents;\n}\n\nexport const XenditSessionProvider: FunctionComponent<\n XenditSessionProviderProps\n> = ({ children, data, sdk }) => {\n const {\n session,\n business,\n customer,\n channels,\n digitalWallets,\n channelUiGroups,\n } = data;\n\n const channel = sdk.getCurrentChannel()?.[internal]?.[0] ?? null;\n\n if (sdk.getSdkStatus() !== \"ACTIVE\" || session.status !== \"ACTIVE\") {\n // clear all contents if the sdk is not initialized or crashes, or if the component is still mounted after completion or failure\n return null;\n }\n\n return (\n <SdkContext.Provider value={sdk}>\n <CurrentChannelContext.Provider value={channel}>\n <SessionContext.Provider value={session}>\n <BusinessContext.Provider value={business}>\n <CustomerContext.Provider value={customer}>\n <ChannelsContext.Provider value={channels}>\n <DigitalWalletsContext.Provider value={digitalWallets}>\n <ChannelUiGroupsContext.Provider value={channelUiGroups}>\n {children}\n </ChannelUiGroupsContext.Provider>\n </DigitalWalletsContext.Provider>\n </ChannelsContext.Provider>\n </CustomerContext.Provider>\n </BusinessContext.Provider>\n </SessionContext.Provider>\n </CurrentChannelContext.Provider>\n </SdkContext.Provider>\n );\n};\n","import {\n BffChannel,\n ChannelFormField,\n ChannelProperties,\n} from \"./backend-types/channel\";\nimport { useLayoutEffect, useRef } from \"preact/hooks\";\nimport { BffAction } from \"./backend-types/payment-entity\";\nimport { BffSession } from \"./backend-types/session\";\nimport { internal } from \"./internal\";\nimport { XenditComponents } from \"./public-sdk\";\n\nexport const MOCK_NETWORK_DELAY_MS = 300;\n\nexport function assert<T>(arg: unknown): asserts arg is NonNullable<T> {\n if (arg === null || arg === undefined) {\n throw new Error(\n \"Assertion failed: argument is null or undefined; this is a bug, please contact support.\",\n );\n }\n}\n\nexport function assertIsArray<T = unknown>(arg: unknown): asserts arg is T[] {\n if (!Array.isArray(arg)) {\n throw new Error(\n \"Assertion failed: expected array; this is a bug, please contact support.\",\n );\n }\n}\n\nexport function assertIsNotArray<T = unknown>(\n arg: T,\n): asserts arg is Exclude<T, unknown[]> {\n if (Array.isArray(arg)) {\n throw new Error(\n \"Assertion failed: expected array; this is a bug, please contact support.\",\n );\n }\n}\n\nexport function assertEquals<T>(a: unknown, b: T): asserts a is T {\n if (a !== b) {\n throw new Error(`Assertion failed; this is a bug, please contact support.`);\n }\n}\n\nexport function assertNotEquals<const A, const B extends A>(\n a: A,\n b: B,\n): asserts a is Exclude<A, B> {\n if (a === b) {\n throw new Error(`Assertion failed; this is a bug, please contact support.`);\n }\n}\n\nexport const SLEEP_MULTIPLIER = process.env.NODE_ENV === \"test\" ? 0.01 : 1;\n\nexport function sleep(ms: number): Promise<void> {\n return new Promise((resolve) => setTimeout(resolve, ms * SLEEP_MULTIPLIER));\n}\n\nexport class AbortError extends Error {\n constructor() {\n super(\"AbortError\");\n this.name = \"AbortError\";\n }\n}\n\nexport function isAbortError(error: unknown): error is AbortError {\n return error instanceof AbortError && error.name === \"AbortError\";\n}\n\n/**\n * A sleep function that can be cancelled via an AbortSignal.\n */\nexport function cancellableSleep(\n ms: number,\n signal: AbortSignal,\n): Promise<void> {\n return new Promise((resolve, reject) => {\n function onAbort() {\n signal.removeEventListener(\"abort\", onAbort);\n clearTimeout(timeoutId);\n reject(new AbortError());\n }\n\n const timeoutId = setTimeout(() => {\n signal.removeEventListener(\"abort\", onAbort);\n resolve();\n }, ms * SLEEP_MULTIPLIER);\n\n // already aborted\n if (signal.aborted) {\n onAbort();\n return;\n }\n\n // abort on signal\n signal.addEventListener(\"abort\", onAbort);\n });\n}\n\nexport function camelCaseToKebabCase(str: string): string {\n return str.replace(/[A-Z]/gm, (match, offset) => {\n if (offset === 0) return match.toLowerCase();\n return `-${match.toLowerCase()}`;\n });\n}\n\n/**\n * Creates an async iterator with exponential delay. Yields the attempt number.\n *\n * Use with async for (const attempt of retryLoop(100, 5)).\n *\n * Delay is mult * base ** attempt\n * e.g. mult = 100ms, tries = 5, base = 2:\n * 100ms, 200ms, 400ms, 800ms, 1600ms\n *\n * Doesn't wait in tests, unless waitInTests=true.\n */\nexport async function* retryLoop(mult: number, tries: number, base = 2) {\n // first attempt always instant\n yield 0;\n\n let sleepTime = mult;\n\n for (let i = 1; i < tries; i++) {\n sleepTime *= base;\n await sleep(sleepTime);\n yield i;\n }\n}\n\nexport function redirectCanBeHandledInIframe(action: BffAction): boolean {\n if (action.type !== \"REDIRECT_CUSTOMER\") {\n return false;\n }\n if (action.iframe_capable === false) {\n return false;\n }\n // if iframe_capable is undefined, assume it can be handled in iframe\n return true;\n}\n\n/**\n * Return the first action in the list that we understand.\n */\nexport function findBestAction(actions: BffAction[]): BffAction | undefined {\n const best = actions.find((a) => {\n switch (a.type) {\n case \"REDIRECT_CUSTOMER\": {\n switch (a.descriptor) {\n case \"WEB_URL\":\n return true;\n case \"DEEPLINK_URL\":\n return isAndroidOrIos();\n case \"WEB_GOOGLE_PAYLINK\":\n return false;\n }\n a satisfies never;\n break;\n }\n case \"PRESENT_TO_CUSTOMER\":\n return true;\n case \"API_POST_REQUEST\":\n return false;\n }\n a satisfies never;\n return false;\n });\n if (best) return best;\n\n // if we don't understand any action, just return the first one, it will fire the fatal-error event later\n // (an empty action list has a special meaning, we should return an unsupported action rather than undefined if we support none of the actions)\n return actions[0];\n}\n\n/**\n * Find the paylink action, if it exists and the feature is enabled.\n */\nexport function findPaylinkAction(\n sdk: XenditComponents,\n actions: BffAction[],\n): BffAction | undefined {\n if (sdk[internal].options.enablePaylinks) {\n return actions.find(\n (a) =>\n a.type === \"REDIRECT_CUSTOMER\" && a.descriptor === \"WEB_GOOGLE_PAYLINK\",\n );\n }\n}\n\nfunction isAndroidOrIos() {\n const userAgent = navigator.userAgent;\n\n if (!userAgent) return false;\n\n if (/android/i.test(userAgent)) {\n return true;\n }\n\n // iOS detection from: http://stackoverflow.com/a/9039885/177710\n if (/iPad|iPhone|iPod/.test(userAgent)) {\n return true;\n }\n\n return false;\n}\n\nexport const MOCK_HOST_ID = \"mock\";\n\nconst hosts: Record<string, string | undefined> = {\n pl: process.env.XENDIT_CHECKOUT_UI_GATEWAY_PROD_LIVE,\n pd: process.env.XENDIT_CHECKOUT_UI_GATEWAY_PROD_DEV,\n sl: process.env.XENDIT_CHECKOUT_UI_GATEWAY_STAGING_LIVE,\n sd: process.env.XENDIT_CHECKOUT_UI_GATEWAY_STAGING_DEV,\n};\n\nexport function hostFromHostId(hostId: string): string | null {\n return hosts[hostId] ?? null;\n}\n\nexport type ParsedSdkKey = {\n sessionAuthKey: string;\n hostId: string;\n publicKey: string;\n signature: string;\n};\n\nexport function parseSdkKey(componentsSdkKey: string): ParsedSdkKey {\n if (!componentsSdkKey) {\n throw new Error(\n \"The componentsSdkKey option is missing; check the constructor parameters.\",\n );\n }\n const parts = componentsSdkKey.split(\"-\");\n if (\n parts.length < 4 ||\n (parts[2] !== MOCK_HOST_ID && hostFromHostId(parts[2]) === null)\n ) {\n throw new Error(\n \"The componentsSdkKey option has the wrong format. Ensure you pass the value returned from the `components_sdk_key` property of the `POST /sessions` response.\",\n );\n }\n\n return {\n sessionAuthKey: [parts[0], parts[1]].join(\"-\"),\n hostId: parts[2],\n publicKey: parts[3],\n signature: parts[4],\n };\n}\n\n/**\n * Return a copy of original, with properties from updates applied on top, except undefined properties.\n */\nexport function mergeIgnoringUndefined<T>(\n original: T,\n updates: Partial<{ [K in keyof T]: T[K] | undefined }>,\n): T {\n const result = { ...original };\n for (const key of Object.keys(updates) as (keyof T)[]) {\n const value = updates[key];\n if (value !== undefined) {\n result[key] = value;\n }\n }\n return result;\n}\n\nexport function usePrevious<T>(value: T) {\n const ref = useRef<T>(); // Create a ref to store the previous value\n\n useLayoutEffect(() => {\n ref.current = value; // Update the ref's current value after each render\n });\n\n // eslint-disable-next-line react-hooks/refs\n return ref.current; // Return the value stored in the ref (which is the previous value)\n}\n\n/**\n * Get the form field name for a given channel form field.\n * @param field The channel form field to get the name for.\n * @returns The form field name.\n */\nexport function formFieldName(field: ChannelFormField): string {\n let id: string;\n if (typeof field.channel_property === \"string\") {\n id = field.channel_property;\n } else {\n const keys = Object.values(field.channel_property);\n id = keys.join(\"__\");\n }\n return id;\n}\n\nconst seed =\n process.env.NODE_ENV !== \"test\" ? Math.floor(Math.random() * 255) : 0;\n\n/**\n * Get an ID for a channel field, for the \"id\" and label \"for\" attributes.\n */\nexport function formFieldId(field: ChannelFormField): string {\n const obfuscatedId = formFieldName(field)\n .split(\"\")\n .map((c) => {\n const code = (c.charCodeAt(0) % 256) ^ seed;\n return code.toString(16);\n })\n .join(\"\");\n return `xendit-id-${obfuscatedId}`;\n}\n\nexport function randomBytes(length: number) {\n const arr = new Uint8Array(length);\n for (let i = 0; i < length; i++) {\n arr[i] = Math.floor(Math.random() * 256);\n }\n return arr;\n}\n\nexport function randomHexString(length: number) {\n assert(length % 2 === 0);\n const bytes = randomBytes(length / 2);\n return Array.from(bytes)\n .map((b) => b.toString(16).padStart(2, \"0\"))\n .join(\"\");\n}\n\nexport function randomUUID() {\n return [\n randomHexString(8),\n randomHexString(4),\n randomHexString(4),\n randomHexString(4),\n randomHexString(12),\n ].join(\"-\");\n}\n\n/**\n * useId but doesn't sometimes return the same id in different components\n */\nexport function useIdSafe(): string {\n const id = useRef(randomHexString(12));\n return `xendit-id-${id.current}`;\n}\n\nexport function canBeSimulated(action: BffAction): boolean {\n switch (action.type) {\n case \"PRESENT_TO_CUSTOMER\":\n return true;\n default:\n return false;\n }\n}\n\nexport function errorToString(error: unknown): string {\n if (error instanceof Error) {\n return error.stack ?? error.message;\n }\n if (typeof error === \"string\") {\n return error;\n }\n try {\n return `Unknown error: ${JSON.stringify(error)}`;\n } catch {\n return \"Unknown error\";\n }\n}\n\n/**\n * Modifies the input object, deleting properties with undefined values, excluding symbol properties or getters.\n */\nexport function removeUndefinedPropertiesFromObject<T extends object>(\n object: T,\n): T {\n for (const key of Object.keys(object) as (keyof T)[]) {\n if (typeof key === \"symbol\") {\n continue;\n }\n const descriptor = Object.getOwnPropertyDescriptor(object, key);\n if (descriptor === undefined) {\n continue;\n }\n if (typeof descriptor.get === \"function\") {\n continue;\n }\n if (descriptor.value === undefined) {\n delete object[key];\n }\n }\n return object;\n}\n\nexport function getValueFromChannelProperty(\n channelProperty: string | string[],\n channelProperties: ChannelProperties | null,\n) {\n let str = channelProperty;\n if (!channelProperties) {\n return undefined;\n }\n if (Array.isArray(str)) {\n throw new Error(\n \"Getting values from channel property arrays is not supported.\",\n );\n }\n\n let cursor: ChannelProperties[string] = channelProperties;\n while (true) {\n if (!cursor || typeof cursor !== \"object\" || Array.isArray(cursor)) {\n return undefined;\n }\n const dotIndex = str.indexOf(\".\");\n if (dotIndex === -1) {\n return cursor ? cursor[str] : undefined;\n } else {\n const key = str.slice(0, dotIndex);\n cursor = cursor ? cursor[key] : undefined;\n str = str.slice(dotIndex + 1);\n }\n }\n}\n\nexport function getCardNumberFromChannelProperties(\n channelProperties: ChannelProperties | null,\n) {\n const cardNumber = getValueFromChannelProperty(\n \"card_details.card_number\",\n channelProperties,\n );\n if (typeof cardNumber !== \"string\") {\n return null;\n }\n return cardNumber;\n}\n\nexport function parseEncryptedFieldValue(str: string) {\n const out = {\n version: 0,\n publicKey: \"\",\n iv: \"\",\n cipherText: \"\",\n valid: false,\n validationError: null as string | null,\n withoutValidationError: str,\n };\n if (!str) {\n return out;\n }\n\n const parts = str.split(\"-\");\n if (parts.length < 6) {\n throw new Error(\"Invalid encrypted field value format.\");\n }\n if (parts[0] !== \"xendit\") {\n throw new Error(\"Invalid encrypted field value format.\");\n }\n if (parts[1] !== \"encrypted\") {\n throw new Error(\"Invalid encrypted field value format.\");\n }\n const version = parseInt(parts[2], 10);\n if (isNaN(version) || version <= 0) {\n throw new Error(\"Invalid encrypted field value format.\");\n }\n out.version = version;\n out.publicKey = parts[3];\n out.iv = parts[4];\n out.cipherText = parts[5];\n if (parts.length > 6) {\n if (parts[6] !== \"invalid\") {\n throw new Error(\"Invalid encrypted field value format.\");\n }\n out.validationError = atob(parts[7]);\n out.withoutValidationError = parts.slice(0, 6).join(\"-\");\n } else {\n out.valid = true;\n }\n\n return out;\n}\n\nconst objectIdMap = new WeakMap<object, number>();\nlet objectIdCounter = 1;\nexport function objectId(object: object): string {\n if (!objectIdMap.has(object)) {\n objectIdMap.set(object, objectIdCounter++);\n }\n return objectIdMap.get(object)!.toString();\n}\n\nexport function resolvePairedChannel(\n channels: BffChannel[],\n savePaymentMethod: boolean,\n): BffChannel {\n assert(channels.length > 0);\n assert(channels.length <= 2);\n\n if (channels.length === 2) {\n if (savePaymentMethod) {\n assert(channels[1].allow_save === true);\n return channels[1];\n } else {\n assert(channels[0].allow_save === false);\n return channels[0];\n }\n } else {\n return channels[0];\n }\n}\n\nexport function satisfiesMinMax(\n session: Pick<BffSession, \"amount\" | \"session_type\">,\n channel: BffChannel,\n): boolean {\n if (session.session_type !== \"PAY\") {\n return true; // only pay sessions have min/max\n }\n\n const amount = session.amount;\n const min = channel.min_amount ?? 0;\n const max = channel.max_amount ?? Number.MAX_VALUE;\n if (amount < min || amount > max) {\n return false;\n }\n\n return true;\n}\n\nexport function lockDownInteralProperty(obj: { [internal]: unknown }) {\n // make [internal] non-enumerable\n Object.defineProperty(obj, internal, {\n enumerable: false,\n writable: false,\n configurable: false,\n value: obj[internal],\n });\n}\n\nconst RELEASED_CHANNELS: Record<string, boolean> = {\n CARDS: true,\n QRIS: true,\n QR_PH: true,\n PROMPTPAY: true,\n SGQR: true,\n // ALIPAY: true,\n // APPOTA: true,\n // ASTRAPAY: true,\n // DANA: true,\n // GCASH: true,\n // GRABPAY: true,\n // JENIUSPAY: true,\n // LINEPAY: true,\n // LINKAJA: true,\n // NEXCASH: true,\n // OVO: true,\n // PAYMAYA: true,\n // SHOPEEPAY: true,\n // TOUCHNGO: true,\n // TRUEMONEY: true,\n // VNPTWALLET: true,\n // WECHATPAY: true,\n // ZALOPAY: true,\n // GOPAY: true,\n // GOPAY_RECURRING: true,\n};\n\n// filter out channels not supported by this SDK version\nexport function removeUnreleasedChannels(channels: BffChannel[]): BffChannel[] {\n return channels.filter((channel) => RELEASED_CHANNELS[channel.channel_code]);\n}\n\n/**\n * Returns true if the form has a field of the given type, *before filtering*.\n */\nexport function formHasFieldOfType(\n form: ChannelFormField[],\n type: string,\n): boolean {\n for (const field of form) {\n if (field.type.name === type) {\n return true;\n }\n }\n return false;\n}\n","import classNames from \"classnames\";\nimport { ComponentChildren, FunctionComponent } from \"preact\";\n\nexport enum ButtonVariant {\n BARE = \"bare\",\n PRIMARY_ROUNDED = \"primary-rounded\",\n WHITE_ROUNDED = \"white-rounded\",\n}\n\nexport enum ButtonSize {\n SM = \"sm\",\n MD = \"md\",\n}\n\ntype Props = {\n children: ComponentChildren;\n className?: string;\n disabled?: boolean;\n onClick?: (event: MouseEvent) => void;\n type?: \"button\" | \"submit\" | \"reset\";\n variant: ButtonVariant;\n size?: ButtonSize;\n};\n\nexport const Button: FunctionComponent<Props> = (props) => {\n const { children, variant, size, type = \"button\", ...rest } = props;\n\n const buttonVariantClass = {\n [ButtonVariant.BARE]: undefined,\n [ButtonVariant.PRIMARY_ROUNDED]: \"xendit-button-primary-rounded\",\n [ButtonVariant.WHITE_ROUNDED]: \"xendit-button-white-rounded\",\n }[variant];\n\n const buttonSizeClass = {\n [ButtonSize.SM]: \"xendit-button-sm\",\n [ButtonSize.MD]: undefined,\n }[size ?? ButtonSize.MD];\n\n return (\n <button\n {...rest}\n className={classNames(\n props.className,\n \"xendit-button\",\n buttonVariantClass,\n buttonSizeClass,\n )}\n type={type}\n >\n {children}\n </button>\n );\n};\n\nexport const ButtonLoadingSpinner = () => {\n const angle1 = Math.PI * 0.4;\n const angle2 = 0;\n const radius = 0.4;\n const start = { x: Math.cos(angle1) * radius, y: Math.sin(angle1) * radius };\n const end = { x: Math.cos(angle2) * radius, y: Math.sin(angle2) * radius };\n\n return (\n <svg className=\"xendit-button-loading-spinner\" viewBox=\"-0.5 -0.5 1 1\">\n <path\n d={`M ${start.x} ${start.y} A ${radius} ${radius} 0 0 0 ${end.x} ${end.y}`}\n fill=\"none\"\n stroke=\"currentColor\"\n strokeWidth=\"0.1\"\n strokeLinecap=\"round\"\n ></path>\n </svg>\n );\n};\n","import {\n ComponentChildren,\n FunctionComponent,\n TargetedEvent,\n TargetedMouseEvent,\n} from \"preact\";\nimport {\n useCallback,\n useLayoutEffect,\n useMemo,\n useRef,\n useState,\n} from \"preact/hooks\";\nimport Icon from \"./icon\";\nimport { useIdSafe } from \"../utils\";\nimport { useSdk } from \"./session-provider\";\nimport { ButtonLoadingSpinner } from \"./button\";\n\nexport type DropdownOption = {\n leadingAsset?: ComponentChildren; // e.g. flag/icon URL\n title: string; // primary line\n shortTitle?: string;\n description?: string; // secondary line\n disabled?: boolean;\n value: string;\n};\n\nexport type DropdownProps = {\n /** Unique id for aria attributes */\n id?: string;\n\n /** Options to render */\n options: DropdownOption[];\n\n /**\n * Called when a new option is selected.\n * Receives the selected option & its index.\n */\n onChange: (option: DropdownOption, index: number) => void;\n\n /** Optional initial selection index (uncontrolled). Default: -1 (none). */\n defaultIndex?: number;\n\n /** Optional externally-controlled selection index. If set, component becomes controlled. */\n selectedIndex?: number;\n\n /** Optional label for a11y (used in aria-labelledby). */\n label?: string;\n\n /** Placeholder text when nothing selected. */\n placeholder?: string;\n\n /** Extra class on the root container. */\n className?: string;\n\n /** Makes the dropdown disabled */\n disabled?: boolean;\n};\n\nexport const Dropdown = (props: DropdownProps) => {\n const {\n id: _id,\n options,\n onChange,\n defaultIndex = -1,\n selectedIndex,\n className,\n placeholder,\n disabled,\n } = props;\n\n const t = useSdk().t;\n\n const generatedId = useIdSafe();\n const id = _id || generatedId;\n\n // Controlled vs uncontrolled selection\n const isControlled = typeof selectedIndex === \"number\";\n const [internalIndex, setInternalIndex] = useState(defaultIndex);\n const currentIndex = isControlled ? (selectedIndex as number) : internalIndex;\n\n // Active item for keyboard nav (when list open)\n const [activeIndex, setActiveIndex] = useState(\n currentIndex >= 0 ? currentIndex : 0,\n );\n const [_open, setOpen] = useState(false);\n const open = _open && !disabled && options.length > 0; // force closed when disabled or no options\n\n const [searchQuery, setSearchQuery] = useState(\"\");\n\n const rootRef = useRef<HTMLDivElement>(null);\n const btnRef = useRef<HTMLButtonElement>(null);\n const listRef = useRef<HTMLUListElement>(null);\n const activeRef = useRef<HTMLLIElement>(null);\n const searchInputRef = useRef<HTMLInputElement>(null);\n\n // Filter options based on search query\n const filteredOptions = useMemo(() => {\n const filtered = options.map(withIndex).filter(({ item: opt }) => {\n if (searchQuery.trim() === \"\") return true;\n const query = searchQuery.toLowerCase();\n return (\n opt.title.toLowerCase().includes(query) ||\n opt.description?.toLowerCase().includes(query) ||\n opt.value.toLowerCase().includes(query)\n );\n });\n\n // Show all options if no results found\n return filtered.length > 0 ? filtered : options.map(withIndex);\n }, [searchQuery, options]);\n\n const clampedActive = Math.max(\n 0,\n Math.min(filteredOptions.length - 1, activeIndex),\n );\n\n // Close on outside click\n useLayoutEffect(() => {\n if (!open) return;\n const onMouseDown = (e: MouseEvent) => {\n const root = rootRef.current;\n if (!root) return;\n if (!root.contains(e.target as Node)) setOpen(false);\n };\n document.addEventListener(\"mousedown\", onMouseDown);\n return () => document.removeEventListener(\"mousedown\", onMouseDown);\n }, [open]);\n\n // Close on outside focusout\n useLayoutEffect(() => {\n if (!open) return;\n const onFocusOut = (e: FocusEvent) => {\n const root = rootRef.current;\n if (!root) return;\n if (!e.relatedTarget) return;\n if (!root.contains(e.relatedTarget as Node)) setOpen(false);\n };\n document.body.addEventListener(\"focusout\", onFocusOut);\n return () => document.body.removeEventListener(\"focusout\", onFocusOut);\n }, [open]);\n\n // Keep active in sync with current selection when opening\n useLayoutEffect(() => {\n if (!open) return;\n if (currentIndex >= 0) setActiveIndex(currentIndex);\n }, [open, currentIndex]);\n\n // when open state or active index changes, scroll to active item\n useLayoutEffect(() => {\n if (!open) return;\n if (!activeRef.current) return;\n if (!listRef.current) return;\n const scrollContainer = listRef.current.parentElement;\n if (!scrollContainer) return;\n scrollContainer.scrollTop =\n activeRef.current.offsetTop -\n scrollContainer.clientHeight / 2 +\n activeRef.current.clientHeight / 2;\n }, [open, activeIndex]);\n\n const openList = useCallback(() => {\n if (!open) {\n setOpen(true);\n queueMicrotask(() => searchInputRef.current?.focus());\n }\n }, [open]);\n\n const closeList = useCallback(() => {\n if (open) {\n setOpen(false);\n setSearchQuery(\"\");\n btnRef.current?.focus();\n }\n }, [open]);\n\n const onButtonClick = useCallback(() => {\n if (open) {\n closeList();\n } else {\n openList();\n }\n }, [closeList, open, openList]);\n\n const selectItemAndClose = useCallback(\n (index: number) => {\n const opt = options[index];\n if (!opt) return;\n if (opt.disabled) return;\n if (!isControlled) setInternalIndex(index);\n onChange(opt, index);\n closeList();\n },\n [closeList, isControlled, onChange, options],\n );\n\n const onButtonKeyDown = useCallback(\n (e: KeyboardEvent) => {\n if (\n e.key === \"ArrowDown\" ||\n e.key === \"ArrowUp\" ||\n e.key === \" \" ||\n e.key === \"Enter\"\n ) {\n e.preventDefault();\n openList();\n }\n },\n [openList],\n );\n\n const onListKeyDown = useCallback(\n (e: KeyboardEvent) => {\n // Allow normal typing in search input\n const isSearchInput = e.target === searchInputRef.current;\n\n if (e.key === \"Escape\") {\n e.preventDefault();\n closeList();\n return;\n }\n if (e.key === \"Enter\" || e.key === \" \") {\n // Allow space in search input for typing\n if (isSearchInput && e.key === \" \") {\n return;\n }\n e.preventDefault();\n const activeItem = filteredOptions[clampedActive];\n if (activeItem) {\n selectItemAndClose(activeItem.originalIndex);\n }\n return;\n }\n if (e.key === \"ArrowDown\") {\n e.preventDefault();\n setActiveIndex((i) => Math.min(filteredOptions.length - 1, i + 1));\n return;\n }\n if (e.key === \"ArrowUp\") {\n e.preventDefault();\n setActiveIndex((i) => Math.max(0, i - 1));\n return;\n }\n if (e.key === \"Home\") {\n e.preventDefault();\n setActiveIndex(0);\n return;\n }\n if (e.key === \"End\") {\n e.preventDefault();\n setActiveIndex(filteredOptions.length - 1);\n return;\n }\n },\n [clampedActive, closeList, selectItemAndClose, filteredOptions],\n );\n\n const onOptionClick = useCallback(\n (e: TargetedMouseEvent<HTMLLIElement>) => {\n e.stopPropagation();\n e.preventDefault();\n selectItemAndClose(Number(e.currentTarget.dataset.index));\n },\n [selectItemAndClose],\n );\n\n const onSearchTermChange = useCallback(\n (e: TargetedEvent<HTMLInputElement>) => {\n setSearchQuery(e.currentTarget.value);\n setActiveIndex(0);\n },\n [],\n );\n\n const selected = currentIndex >= 0 ? options[currentIndex] : undefined;\n\n return (\n <div ref={rootRef} className={`xendit-dropdown ${className ?? \"\"}`}>\n <button\n id={id}\n ref={btnRef}\n type=\"button\"\n className={selected?.leadingAsset ? \"xendit-dropdown-has-asset\" : \"\"}\n aria-expanded={open ? \"true\" : \"false\"}\n onClick={onButtonClick}\n onKeyDown={onButtonKeyDown}\n disabled={disabled}\n >\n {selected?.leadingAsset ? selected.leadingAsset : null}\n\n {selected ? (\n <span className=\"xendit-dropdown-button-title xendit-text-14\">\n {selected.shortTitle ?? selected.title}\n </span>\n ) : (\n <span className=\"xendit-dropdown-button-title xendit-text-14\">\n {placeholder}\n </span>\n )}\n\n <Icon\n className=\"xendit-dropdown-chevron\"\n name=\"chevron\"\n size={16}\n direction={\"down\"}\n />\n </button>\n\n {open ? (\n <div className=\"xendit-dropdown-menu\">\n <div className=\"xendit-dropdown-search\">\n <input\n ref={searchInputRef}\n placeholder={t(\"combobox.default_search_placeholder\")}\n value={searchQuery}\n onInput={onSearchTermChange}\n onClick={stopPropagation}\n onKeyDown={onListKeyDown}\n />\n </div>\n <ul\n ref={listRef}\n role=\"listbox\"\n tabIndex={-1}\n onKeyDown={onListKeyDown}\n >\n {filteredOptions.map(({ item: opt, originalIndex }, i) => {\n const isSelected = originalIndex === currentIndex;\n const isActive = i === clampedActive;\n return (\n <li\n key={originalIndex}\n role=\"option\"\n data-index={originalIndex}\n aria-disabled={opt.disabled ? true : undefined}\n aria-selected={isSelected}\n onClick={onOptionClick}\n ref={isActive ? activeRef : undefined}\n >\n <div\n className={`xendit-dropdown-item xendit-text-14 ${isActive ? \"xendit-dropdown-item-active\" : \"\"} ${opt.leadingAsset ? \"xendit-dropdown-has-asset\" : \"\"} ${opt.disabled ? \"xendit-dropdown-item-disabled\" : \"\"}`}\n >\n {opt.leadingAsset ? opt.leadingAsset : null}\n <div className=\"xendit-dropdown-item-text xendit-text-14\">\n <span className=\"xendit-dropdown-item-title\">\n {opt.title}\n </span>\n {opt.description && (\n <span className=\"xendit-dropdown-item-description xendit-text-12\">\n {opt.description}\n </span>\n )}\n </div>\n {isSelected ? (\n <Icon\n name=\"check\"\n size={16}\n className={\"xendit-dropdown-item-selected\"}\n />\n ) : null}\n </div>\n </li>\n );\n })}\n </ul>\n </div>\n ) : null}\n </div>\n );\n};\n\nexport const DropdownSkeleton: FunctionComponent<{ id: string }> = (props) => {\n return (\n <div className=\"xendit-dropdown xendit-skeleton-field\">\n <button inert id={props.id} disabled type=\"button\">\n <ButtonLoadingSpinner />\n </button>\n </div>\n );\n};\n\nfunction stopPropagation(e: Event) {\n e.stopPropagation();\n}\n\nfunction withIndex<T>(\n item: T,\n originalIndex: number,\n): { item: T; originalIndex: number } {\n return {\n item,\n originalIndex,\n };\n}\n","import { BffChannel, BffChannelUiGroup } from \"./backend-types/channel\";\nimport { BffCustomer } from \"./backend-types/customer\";\nimport { BffDigitalWallets } from \"./backend-types/digital-wallets\";\nimport { BffSession } from \"./backend-types/session\";\nimport { internal } from \"./internal\";\nimport {\n XenditCustomer,\n XenditDigitalWallet,\n XenditPaymentChannel,\n XenditPaymentChannelGroup,\n XenditSession,\n} from \"./public-data-types\";\nimport {\n assert,\n assertEquals,\n assertNotEquals,\n lockDownInteralProperty,\n removeUndefinedPropertiesFromObject,\n satisfiesMinMax,\n} from \"./utils\";\n\ntype XenditItem = NonNullable<XenditSession[\"items\"]>[number];\n\nexport function bffSessionToPublic(bffSession: BffSession): XenditSession {\n assertNotEquals(bffSession.session_type, \"AUTHORIZATION\");\n assertEquals(bffSession.mode, \"COMPONENTS\");\n\n return removeUndefinedPropertiesFromObject<XenditSession>({\n id: bffSession.payment_session_id,\n description: bffSession.description || undefined,\n sessionType: bffSession.session_type,\n mode: bffSession.mode,\n referenceId: bffSession.reference_id,\n country: bffSession.country,\n currency: bffSession.currency,\n amount: bffSession.amount,\n channelProperties: bffSession.channel_properties || undefined,\n expiresAt: new Date(bffSession.expires_at),\n locale: bffSession.locale,\n status: bffSession.status,\n\n items: bffSession.items?.map((item) => {\n return removeUndefinedPropertiesFromObject<XenditItem>({\n type: item.type,\n referenceId: item.reference_id,\n name: item.name,\n netUnitAmount: item.net_unit_amount,\n quantity: item.quantity,\n url: item.url,\n imageUrl: item.image_url,\n category: item.category,\n subcategory: item.subcategory,\n description: item.description,\n metadata: item.metadata,\n });\n }),\n });\n}\n\nexport function bffCustomerToPublic(bffCustomer: BffCustomer): XenditCustomer {\n assertEquals(bffCustomer.type, \"INDIVIDUAL\");\n assert(bffCustomer.individual_detail);\n return {\n id: bffCustomer.id,\n type: bffCustomer.type,\n email: bffCustomer.email ?? undefined,\n mobileNumber: bffCustomer.mobile_number ?? undefined,\n individualDetail: {\n givenNames: bffCustomer.individual_detail.given_names ?? undefined,\n surname: bffCustomer.individual_detail.surname ?? undefined,\n },\n };\n}\n\ntype ChannelMarshalConfig = {\n options: {\n filter?: string | string[] | RegExp;\n filterMinMax: boolean;\n };\n pairChannels: PairChannelData;\n session: Pick<BffSession, \"amount\" | \"session_type\">;\n};\n\n/**\n * Generate public channel groups list.\n */\nexport function bffUiGroupsToPublic(\n bffChannels: BffChannel[],\n bffChannelGroups: BffChannelUiGroup[],\n marshalConfig: ChannelMarshalConfig,\n): XenditPaymentChannelGroup[] {\n const groupsByGroupId = makeGroupsByGroupId(bffChannelGroups);\n const channelsByGroupId = makeChannelsByGroupId(bffChannels, marshalConfig);\n return bffChannelGroups\n .filter((group) => channelsByGroupId[group.id]?.length)\n .map((group) => {\n return bffUiGroupToPublic(\n group,\n channelsByGroupId,\n groupsByGroupId,\n marshalConfig,\n );\n });\n}\n\n/**\n * Generate one public channel group.\n */\nexport function bffUiGroupToPublic(\n bffChannelGroup: BffChannelUiGroup,\n channelsByGroupId: Record<string, BffChannel[]>,\n groupsByGroupId: Record<string, BffChannelUiGroup>,\n marshalConfig: ChannelMarshalConfig,\n) {\n const group = removeUndefinedPropertiesFromObject<XenditPaymentChannelGroup>({\n groupId: bffChannelGroup.id,\n label: bffChannelGroup.label,\n get channels() {\n return (channelsByGroupId[bffChannelGroup.id] || []).map((channel) => {\n return bffChannelToPublic(\n channel,\n channelsByGroupId,\n groupsByGroupId,\n marshalConfig,\n );\n });\n },\n [internal]: bffChannelGroup,\n });\n\n lockDownInteralProperty(group);\n\n return group;\n}\n\n/**\n * Generate one public channel, without group data.\n */\nexport function singleBffChannelToPublic(\n bffChannel: BffChannel,\n marshalConfig: ChannelMarshalConfig,\n): XenditPaymentChannel {\n return bffChannelToPublic(bffChannel, {}, {}, marshalConfig);\n}\n\n/**\n * Generate one public channel.\n */\nexport function bffChannelToPublic(\n bffChannel: BffChannel,\n bffChannelsByGroupId: Record<string, BffChannel[]>,\n bffGroupsByGroupId: Record<string, BffChannelUiGroup>,\n marshalConfig: ChannelMarshalConfig,\n): XenditPaymentChannel {\n assert(!marshalConfig.pairChannels.paired[bffChannel.channel_code]);\n\n const channel = removeUndefinedPropertiesFromObject<XenditPaymentChannel>({\n channelCode:\n marshalConfig.pairChannels.pairs[bffChannel.channel_code]?.map(\n (ch) => ch.channel_code,\n ) ?? bffChannel.channel_code,\n brandName: bffChannel.brand_name,\n brandColor: bffChannel.brand_color,\n brandLogoUrl: bffChannel.brand_logo_url,\n get uiGroup() {\n if (!bffGroupsByGroupId[bffChannel.ui_group]) {\n throw new Error(\"UI group not found\");\n }\n return bffUiGroupToPublic(\n bffGroupsByGroupId[bffChannel.ui_group],\n bffChannelsByGroupId,\n bffGroupsByGroupId,\n marshalConfig,\n );\n },\n minAmount: bffChannel.min_amount,\n maxAmount: bffChannel.max_amount,\n cardBrands: bffChannel.card?.brands.map((b) => {\n return {\n name: b.name,\n logoUrl: b.logo_url,\n };\n }),\n [internal]: marshalConfig.pairChannels.pairs[bffChannel.channel_code] ?? [\n bffChannel,\n ],\n });\n\n lockDownInteralProperty(channel);\n\n return channel;\n}\n\n/**\n * Generate public channels list.\n */\nexport function bffChannelsToPublic(\n bffChannels: BffChannel[],\n bffChannelGroups: BffChannelUiGroup[],\n marshalConfig: ChannelMarshalConfig,\n): XenditPaymentChannel[] {\n const groupsByGroupId = makeGroupsByGroupId(bffChannelGroups);\n const channelsByGroupId = makeChannelsByGroupId(bffChannels, marshalConfig);\n return bffChannels\n .filter((ch) => {\n return channelFilterFn(ch, marshalConfig);\n })\n .map((channel) => {\n return bffChannelToPublic(\n channel,\n channelsByGroupId,\n groupsByGroupId,\n marshalConfig,\n );\n });\n}\n\n/**\n * Make a mapping of group ID to group.\n */\nfunction makeGroupsByGroupId(\n bffChannelGroups: BffChannelUiGroup[],\n): Record<string, BffChannelUiGroup> {\n const groupMap: Record<string, BffChannelUiGroup> = {};\n for (const bffGroup of bffChannelGroups) {\n groupMap[bffGroup.id] = bffGroup;\n }\n return groupMap;\n}\n\n/**\n * Return true if the channel passes the filter criteria.\n */\nexport function channelFilterFn(\n channel: BffChannel,\n marshalConfig: ChannelMarshalConfig,\n) {\n if (marshalConfig.pairChannels.paired[channel.channel_code]) {\n // channel is a second member of a pair, skip\n // TODO: users may filter out the first member of a pair, in which case we should remap the second member to the first\n return false;\n }\n\n if (\n marshalConfig.options.filterMinMax &&\n !satisfiesMinMax(marshalConfig.session, channel)\n ) {\n // min/max amount not satisfied\n return false;\n }\n\n const filter = marshalConfig.options.filter;\n if (filter && !channelCodeMatchesFilter(filter, channel.channel_code)) {\n // channel code does not match filter\n return false;\n }\n\n return true;\n}\n\n/**\n * Checks a channel code string against a filter term.\n */\nfunction channelCodeMatchesFilter(\n filter: string | string[] | RegExp,\n code: string,\n) {\n if (typeof filter === \"string\" && code === filter) {\n return true;\n }\n if (Array.isArray(filter) && filter.includes(code)) {\n return true;\n }\n if (filter instanceof RegExp && filter.test(code)) {\n return true;\n }\n return false;\n}\n\n/**\n * Create a mapping of group ID to channels in that group, applying channel filtering and removing empty groups.\n */\nexport function makeChannelsByGroupId(\n bffChannels: BffChannel[],\n marshalConfig: ChannelMarshalConfig,\n): Record<string, BffChannel[]> {\n const channelsByGroupId: Record<string, BffChannel[]> = {};\n for (const bffChannel of bffChannels) {\n if (!channelFilterFn(bffChannel, marshalConfig)) {\n continue;\n }\n const groupId = bffChannel.ui_group;\n if (!channelsByGroupId[groupId]) {\n channelsByGroupId[groupId] = [];\n }\n channelsByGroupId[groupId].push(bffChannel);\n }\n return channelsByGroupId;\n}\n\ntype PairChannelData = {\n /** Map of channel_code of first member of pair to an array containing the pair */\n pairs: Record<string, [BffChannel, BffChannel]>;\n /** Set of channel_codes of second members of pairs */\n paired: Record<string, boolean>;\n};\n\n/**\n * Finds channels that are pairs (i.e., differ only by allow_save) and groups them together.\n */\nexport function findChannelPairs(bffChannels: BffChannel[]): PairChannelData {\n const brandMap = new Map<string, BffChannel[]>();\n for (const channel of bffChannels) {\n const brandName = channel.brand_name;\n if (!brandMap.has(brandName)) {\n brandMap.set(brandName, []);\n }\n brandMap.get(brandName)!.push(channel);\n }\n\n const pairs: Record<string, [BffChannel, BffChannel]> = {};\n const paired: Record<string, boolean> = {};\n for (const [_, channels] of brandMap) {\n for (const ch of channels) {\n const isFirst = channels[0].allow_save === false;\n if (isFirst) {\n const pair = channels.find(\n (other) =>\n ch.channel_code !== other.channel_code &&\n ch.ui_group === other.ui_group &&\n other.allow_save === true,\n );\n if (pair) {\n pairs[ch.channel_code] = [ch, pair];\n paired[pair.channel_code] = true;\n }\n }\n }\n }\n\n return {\n pairs,\n paired,\n };\n}\n\nexport function bffDigitalWalletsToPublic(\n bffDigitalWallets: BffDigitalWallets,\n bffChannels: BffChannel[],\n bffChannelGroups: BffChannelUiGroup[],\n marshalConfig: ChannelMarshalConfig,\n): XenditDigitalWallet[] {\n const out: XenditDigitalWallet[] = [];\n\n const groupsByGroupId = makeGroupsByGroupId(bffChannelGroups);\n\n if (bffDigitalWallets.google_pay) {\n const googlePayChannels =\n bffDigitalWallets.google_pay.allowed_payment_methods.map((method) => {\n const ch = bffChannels.find(\n (c) => c.channel_code === method.channel_code,\n );\n assert(ch);\n return ch;\n });\n\n const channelsByGroupId = makeChannelsByGroupId(\n googlePayChannels,\n marshalConfig,\n );\n\n out.push({\n digitalWalletCode: \"GOOGLE_PAY\",\n get channels() {\n return googlePayChannels.map((channel) => {\n return bffChannelToPublic(\n channel,\n channelsByGroupId,\n groupsByGroupId,\n marshalConfig,\n );\n });\n },\n [internal]: true,\n });\n }\n\n return out;\n}\n","import {\n useCurrentChannel,\n useChannels,\n useSdk,\n useSession,\n} from \"./session-provider\";\nimport { BffChannel, BffChannelUiGroup } from \"../backend-types/channel\";\nimport { Dropdown, DropdownOption } from \"./dropdown\";\nimport { BffSession } from \"../backend-types/session\";\nimport { satisfiesMinMax, useIdSafe, usePrevious } from \"../utils\";\nimport {\n useCallback,\n useLayoutEffect,\n useMemo,\n useRef,\n useState,\n} from \"preact/hooks\";\nimport {\n channelFilterFn,\n findChannelPairs,\n singleBffChannelToPublic,\n} from \"../bff-marshal\";\nimport { TFunction } from \"../localization\";\nimport { FunctionComponent } from \"preact\";\n\ninterface ChannelPickerGroupProps {\n group: BffChannelUiGroup;\n open: boolean;\n}\n\nexport const ChannelPickerGroup: FunctionComponent<ChannelPickerGroupProps> = (\n props,\n) => {\n const { group, open } = props;\n\n const sdk = useSdk();\n const { t } = sdk;\n const session = useSession();\n const channels = useChannels();\n\n const currentChannel = useCurrentChannel();\n\n const sessionType = session.session_type;\n\n const dropdownId = useIdSafe();\n\n // record the last user selection in the dropdown.\n // if the current channel selection is not part of this group, use this instead.\n // if this is set, and the current channel is null, when the group is opened we will restore this selection.\n const [fakeDropdownSelection, setFakeDropdownSelection] = useState<\n string | null\n >(null);\n\n // container for the selected channel component\n const containerRef = useRef<HTMLDivElement>(null);\n // if true, the container has something in it\n const [containerIsPopulated, setContainerIsPopulated] = useState(false);\n // reference to the selected channel element\n const selectedChannelElementRef = useRef<HTMLElement>(null);\n\n const pairChannelData = useMemo(() => findChannelPairs(channels), [channels]);\n const marshalConfig = useMemo(\n () => ({\n pairChannels: pairChannelData,\n session: {\n amount: session.amount,\n session_type: session.session_type,\n },\n options: { filterMinMax: false },\n }),\n [pairChannelData, session.amount, session.session_type],\n );\n\n const channelsInGroup = useMemo(() => {\n return channels.filter((ch) => {\n return channelFilterFn(ch, marshalConfig) && ch.ui_group === group.id;\n });\n }, [channels, group.id, marshalConfig]);\n\n // Create and mount the channel component if a channel is selected.\n // (replacing whatever was there before)\n useLayoutEffect(() => {\n if (!containerRef.current) return;\n if (!currentChannel) return;\n if (!open) return;\n const channelIsInThisGroup = channelsInGroup.find(\n (ch) => ch.channel_code === currentChannel.channel_code,\n );\n if (!channelIsInThisGroup) return;\n\n selectedChannelElementRef.current = sdk.createChannelComponent(\n singleBffChannelToPublic(currentChannel, marshalConfig),\n );\n if (\n selectedChannelElementRef.current.parentElement !== containerRef.current\n ) {\n setContainerIsPopulated(true);\n containerRef.current.replaceChildren(selectedChannelElementRef.current);\n } else {\n // it's already in the right place, do nothing.\n // replaceChildren would cause iframes to reload even if we do a no-op update.\n }\n }, [channelsInGroup, currentChannel, marshalConfig, open, sdk]);\n\n // when the group is opened, if the currently selected channel is unset but the fakeDropdownSelection is set,\n // select that channel to sync this group's selection with the sdk state\n const previousOpen = usePrevious(open);\n useLayoutEffect(() => {\n if (open && !previousOpen) {\n // only run this when the group is opened\n if (currentChannel === null && fakeDropdownSelection !== null) {\n // restore the previous user selection\n const ch = channelsInGroup.find(\n (channel) => channel.channel_code === fakeDropdownSelection,\n );\n if (ch) {\n sdk.setCurrentChannel(singleBffChannelToPublic(ch, marshalConfig));\n }\n }\n }\n }, [\n channelsInGroup,\n currentChannel,\n fakeDropdownSelection,\n marshalConfig,\n open,\n previousOpen,\n sdk,\n ]);\n\n // Called on channel dropdown change\n const onSelectedChannelChange = useCallback(\n (dropdownOption: DropdownOption) => {\n const selected =\n channels.find(\n (channel) => channel.channel_code === dropdownOption.value,\n ) || null;\n\n // change both the local dropdown selection state and the sdk current channel\n setFakeDropdownSelection(selected?.channel_code ?? null);\n sdk.setCurrentChannel(\n selected ? singleBffChannelToPublic(selected, marshalConfig) : null,\n );\n },\n [channels, marshalConfig, sdk],\n );\n\n // Create channel options for dropdown\n const channelOptions = useMemo(() => {\n return channelsInGroup.map<DropdownOption>((channel) => ({\n leadingAsset: (\n <img\n className=\"xendit-channel-logo\"\n src={channel.brand_logo_url}\n key={channel.channel_code}\n />\n ),\n title: channel.brand_name,\n value: channel.channel_code,\n disabled: !satisfiesMinMax(session, channel),\n description: getChannelDisabledReason(t, session, channel) || undefined,\n }));\n }, [channelsInGroup, session, t]);\n\n // Hide dropdown for cards channel\n const hideDropdown =\n channelsInGroup.length === 1 && channelsInGroup[0].channel_code === \"CARDS\";\n\n function dropdownSelectedIndex() {\n // find the selected index based on currentChannel, or fallback to fakeDropdownSelection\n const i1 = channelOptions.findIndex((channel) => {\n return channel.value === currentChannel?.channel_code;\n });\n if (i1 !== -1) return i1;\n const i2 = channelOptions.findIndex((channel) => {\n return channel.value === fakeDropdownSelection;\n });\n if (i2 !== -1) return i2;\n return -1;\n }\n\n return (\n <div className=\"xendit-channel-picker-group\">\n {hideDropdown ? null : (\n <div className=\"xendit-channel-form-field-group\">\n <label htmlFor={dropdownId} className=\"xendit-text-14\">\n {sessionType === \"SAVE\"\n ? t(\"payment_methods.add_payment_method\", {\n groupName: group.label ?? \"\",\n ns: \"session\",\n })\n : t(\"payment_methods.pay_with\")}\n </label>\n <Dropdown\n id={dropdownId}\n selectedIndex={dropdownSelectedIndex()}\n options={channelOptions}\n disabled={channelOptions.length <= 1}\n onChange={onSelectedChannelChange}\n placeholder={t(\"payment_methods.select_channel_placeholder\", {\n groupName: group.label,\n ns: \"session\",\n })}\n />\n </div>\n )}\n <div\n style={{ display: containerIsPopulated ? \"\" : \"none\" }}\n ref={containerRef}\n />\n </div>\n );\n};\n\nexport function getChannelDisabledReason(\n t: TFunction,\n session: BffSession,\n channel: BffChannel,\n): string | null {\n if (satisfiesMinMax(session, channel)) {\n return null;\n }\n\n if (channel.min_amount && session.amount < channel.min_amount) {\n return t(\"payment_methods.channel_disabled_amount_too_small\");\n } else {\n return t(\"payment_methods.channel_disabled_amount_too_large\");\n }\n}\n","import { FunctionComponent } from \"preact\";\nimport { useDigitalWallets, useSdk } from \"./session-provider\";\nimport { useLayoutEffect, useRef } from \"preact/hooks\";\n\nexport const ChannelPickerDigitalWalletSection: FunctionComponent = (props) => {\n const sdk = useSdk();\n\n const containerRef = useRef<HTMLDivElement>(null);\n\n const digitalWallets = useDigitalWallets();\n const digitalWalletsGooglePay = digitalWallets?.google_pay;\n\n useLayoutEffect(() => {\n if (containerRef.current && digitalWalletsGooglePay) {\n const el = sdk.createDigitalWalletComponent(\"GOOGLE_PAY\");\n containerRef.current.appendChild(el);\n return () => {\n el.remove();\n };\n }\n }, [digitalWalletsGooglePay, sdk]);\n\n return (\n <div\n ref={containerRef}\n className=\"xendit-channel-picker-digital-wallet-section\"\n ></div>\n );\n};\n","import { Accordion } from \"./accordion\";\nimport { AccordionItem } from \"./accordion-item\";\nimport {\n useCurrentChannel,\n useChannelUiGroups,\n useSession,\n useChannels,\n useSdk,\n} from \"./session-provider\";\nimport {\n useCallback,\n useLayoutEffect,\n useMemo,\n useRef,\n useState,\n} from \"preact/hooks\";\nimport { FunctionComponent } from \"preact\";\nimport {\n ChannelPickerGroup,\n getChannelDisabledReason,\n} from \"./channel-picker-group\";\nimport { assert, satisfiesMinMax } from \"../utils\";\nimport { BffSession } from \"../backend-types/session\";\nimport { BffChannel, BffChannelUiGroup } from \"../backend-types/channel\";\nimport { TFunction } from \"../localization\";\nimport {\n findChannelPairs,\n makeChannelsByGroupId,\n singleBffChannelToPublic,\n} from \"../bff-marshal\";\nimport { ChannelPickerDigitalWalletSection } from \"./channel-picker-digital-wallet-section\";\nimport { internal } from \"../internal\";\n\ntype Props = object;\n\nexport const XenditChannelPicker: FunctionComponent<Props> = (props) => {\n const sdk = useSdk();\n const session = useSession();\n const channelUiGroups = useChannelUiGroups();\n const currentChannel = useCurrentChannel();\n const channels = useChannels();\n const { t } = useSdk();\n\n const channelsByGroup = useMemo(() => {\n return makeChannelsByGroupId(channels, {\n options: { filterMinMax: false },\n pairChannels: findChannelPairs(channels),\n session,\n });\n }, [channels, session]);\n\n const thisRef = useRef<HTMLDivElement>(null);\n\n const pairChannelData = useMemo(() => findChannelPairs(channels), [channels]);\n const marshalConfig = useMemo(\n () => ({\n pairChannels: pairChannelData,\n session: {\n amount: session.amount,\n session_type: session.session_type,\n },\n options: { filterMinMax: false },\n }),\n [pairChannelData, session.amount, session.session_type],\n );\n\n // selected group is the containing group of the currently selected channel\n const selectedGroupId = currentChannel?.ui_group ?? null;\n\n // previewed group means expanded but no channel selected\n const [previewGroupId, setPreviewGroupId] = useState<string | null>(null);\n\n const handleSelectChannelGroup = useCallback(\n (groupId: string) => {\n if (selectedGroupId === groupId || previewGroupId === groupId) {\n // user wants to collapse the group while a channel was selected, clear the channel selection\n if (selectedGroupId === groupId) {\n // clear actual selection\n thisRef.current?.dispatchEvent(\n new XenditClearCurrentChannelEvent(groupId),\n );\n }\n if (previewGroupId === groupId) {\n // clear previewed state\n setPreviewGroupId(null);\n }\n } else {\n // user wants to open a different group\n // if the new group has one channel, select it automatically\n // otherwise set it as previewed\n const newGroup = channelUiGroups.find((g) => g.id === groupId);\n assert(newGroup);\n const enabledChannels = groupEnabledChannelStats(\n session,\n newGroup,\n channels,\n t,\n ).enabledChannels;\n if (enabledChannels === 0) {\n // no enabled channels, do nothing\n return;\n } else if (enabledChannels === 1) {\n // one enabled channel, select it automatically\n const ch = channelsByGroup[groupId][0];\n sdk.setCurrentChannel(singleBffChannelToPublic(ch, marshalConfig));\n setPreviewGroupId(null);\n } else {\n // multiple enabled channels, set as previewed and clear the channel selection\n setPreviewGroupId(groupId);\n sdk.setCurrentChannel(null);\n }\n }\n },\n [\n channelUiGroups,\n channels,\n channelsByGroup,\n marshalConfig,\n previewGroupId,\n sdk,\n selectedGroupId,\n session,\n t,\n ],\n );\n\n // once a channel is selected, remove previewGroupId.\n // (without this, the group would continue showing the old selected channel after the selection is cleared using setCurrentChannel(null))\n useLayoutEffect(() => {\n if (currentChannel !== null && previewGroupId !== null) {\n setPreviewGroupId(null);\n }\n }, [currentChannel, previewGroupId]);\n\n // TODO: enable by default when released\n const digitalWalletSectionEnabled =\n sdk[internal].options.enableDigitalWallets ?? false;\n\n return (\n <div ref={thisRef}>\n {digitalWalletSectionEnabled ? (\n <ChannelPickerDigitalWalletSection />\n ) : null}\n <Accordion>\n {channelUiGroups\n .filter((group) => {\n // remove empty groups\n return (channelsByGroup[group.id] || []).length > 0;\n })\n .map((group) => {\n // make the group open if it is selected or previewed\n const open =\n selectedGroupId !== null\n ? selectedGroupId === group.id\n : previewGroupId === group.id;\n\n // make the group disabled if it has no enabled channels\n const enabledChannelsStats = groupEnabledChannelStats(\n session,\n group,\n channels,\n t,\n );\n const disabled = enabledChannelsStats.enabledChannels === 0;\n const disabledReason =\n enabledChannelsStats.firstDisabledChannelReason;\n\n return (\n <AccordionItem\n key={group.id}\n id={group.id}\n title={group.label}\n subtitle={disabledReason ?? undefined}\n open={open}\n disabled={disabled}\n onClick={handleSelectChannelGroup}\n >\n <ChannelPickerGroup group={group} open={open} />\n </AccordionItem>\n );\n })}\n </Accordion>\n </div>\n );\n};\n\n// returns null if the group has any enabled channels, otherwise returns the disabled reason as a string\nfunction groupEnabledChannelStats(\n session: BffSession,\n group: BffChannelUiGroup,\n channels: BffChannel[],\n t: TFunction,\n): {\n enabledChannels: number;\n firstDisabledChannelReason: string | null;\n} {\n let firstDisabledChannelReason = null;\n let enabledChannels = 0;\n for (const channel of channels) {\n if (channel.ui_group !== group.id) continue;\n if (satisfiesMinMax(session, channel)) {\n enabledChannels++;\n continue;\n }\n if (firstDisabledChannelReason === null) {\n firstDisabledChannelReason = getChannelDisabledReason(\n t,\n session,\n channel,\n );\n }\n }\n return {\n enabledChannels,\n firstDisabledChannelReason,\n };\n}\n\nexport class XenditClearCurrentChannelEvent extends Event {\n static readonly type = \"xendit-clear-current-channel\" as const;\n uiGroup: string;\n\n constructor(uiGroup: string) {\n super(XenditClearCurrentChannelEvent.type, {\n bubbles: true,\n composed: true,\n });\n this.uiGroup = uiGroup;\n }\n}\n","// This file is a workaround for a bug in web browsers' \"native\"\n// ES6 importing system which is uncapable of importing \"*.json\" files.\n// https://github.com/catamphetamine/libphonenumber-js/issues/239\nexport default {\"version\":4,\"country_calling_codes\":{\"1\":[\"US\",\"AG\",\"AI\",\"AS\",\"BB\",\"BM\",\"BS\",\"CA\",\"DM\",\"DO\",\"GD\",\"GU\",\"JM\",\"KN\",\"KY\",\"LC\",\"MP\",\"MS\",\"PR\",\"SX\",\"TC\",\"TT\",\"VC\",\"VG\",\"VI\"],\"7\":[\"RU\",\"KZ\"],\"20\":[\"EG\"],\"27\":[\"ZA\"],\"30\":[\"GR\"],\"31\":[\"NL\"],\"32\":[\"BE\"],\"33\":[\"FR\"],\"34\":[\"ES\"],\"36\":[\"HU\"],\"39\":[\"IT\",\"VA\"],\"40\":[\"RO\"],\"41\":[\"CH\"],\"43\":[\"AT\"],\"44\":[\"GB\",\"GG\",\"IM\",\"JE\"],\"45\":[\"DK\"],\"46\":[\"SE\"],\"47\":[\"NO\",\"SJ\"],\"48\":[\"PL\"],\"49\":[\"DE\"],\"51\":[\"PE\"],\"52\":[\"MX\"],\"53\":[\"CU\"],\"54\":[\"AR\"],\"55\":[\"BR\"],\"56\":[\"CL\"],\"57\":[\"CO\"],\"58\":[\"VE\"],\"60\":[\"MY\"],\"61\":[\"AU\",\"CC\",\"CX\"],\"62\":[\"ID\"],\"63\":[\"PH\"],\"64\":[\"NZ\"],\"65\":[\"SG\"],\"66\":[\"TH\"],\"81\":[\"JP\"],\"82\":[\"KR\"],\"84\":[\"VN\"],\"86\":[\"CN\"],\"90\":[\"TR\"],\"91\":[\"IN\"],\"92\":[\"PK\"],\"93\":[\"AF\"],\"94\":[\"LK\"],\"95\":[\"MM\"],\"98\":[\"IR\"],\"211\":[\"SS\"],\"212\":[\"MA\",\"EH\"],\"213\":[\"DZ\"],\"216\":[\"TN\"],\"218\":[\"LY\"],\"220\":[\"GM\"],\"221\":[\"SN\"],\"222\":[\"MR\"],\"223\":[\"ML\"],\"224\":[\"GN\"],\"225\":[\"CI\"],\"226\":[\"BF\"],\"227\":[\"NE\"],\"228\":[\"TG\"],\"229\":[\"BJ\"],\"230\":[\"MU\"],\"231\":[\"LR\"],\"232\":[\"SL\"],\"233\":[\"GH\"],\"234\":[\"NG\"],\"235\":[\"TD\"],\"236\":[\"CF\"],\"237\":[\"CM\"],\"238\":[\"CV\"],\"239\":[\"ST\"],\"240\":[\"GQ\"],\"241\":[\"GA\"],\"242\":[\"CG\"],\"243\":[\"CD\"],\"244\":[\"AO\"],\"245\":[\"GW\"],\"246\":[\"IO\"],\"247\":[\"AC\"],\"248\":[\"SC\"],\"249\":[\"SD\"],\"250\":[\"RW\"],\"251\":[\"ET\"],\"252\":[\"SO\"],\"253\":[\"DJ\"],\"254\":[\"KE\"],\"255\":[\"TZ\"],\"256\":[\"UG\"],\"257\":[\"BI\"],\"258\":[\"MZ\"],\"260\":[\"ZM\"],\"261\":[\"MG\"],\"262\":[\"RE\",\"YT\"],\"263\":[\"ZW\"],\"264\":[\"NA\"],\"265\":[\"MW\"],\"266\":[\"LS\"],\"267\":[\"BW\"],\"268\":[\"SZ\"],\"269\":[\"KM\"],\"290\":[\"SH\",\"TA\"],\"291\":[\"ER\"],\"297\":[\"AW\"],\"298\":[\"FO\"],\"299\":[\"GL\"],\"350\":[\"GI\"],\"351\":[\"PT\"],\"352\":[\"LU\"],\"353\":[\"IE\"],\"354\":[\"IS\"],\"355\":[\"AL\"],\"356\":[\"MT\"],\"357\":[\"CY\"],\"358\":[\"FI\",\"AX\"],\"359\":[\"BG\"],\"370\":[\"LT\"],\"371\":[\"LV\"],\"372\":[\"EE\"],\"373\":[\"MD\"],\"374\":[\"AM\"],\"375\":[\"BY\"],\"376\":[\"AD\"],\"377\":[\"MC\"],\"378\":[\"SM\"],\"380\":[\"UA\"],\"381\":[\"RS\"],\"382\":[\"ME\"],\"383\":[\"XK\"],\"385\":[\"HR\"],\"386\":[\"SI\"],\"387\":[\"BA\"],\"389\":[\"MK\"],\"420\":[\"CZ\"],\"421\":[\"SK\"],\"423\":[\"LI\"],\"500\":[\"FK\"],\"501\":[\"BZ\"],\"502\":[\"GT\"],\"503\":[\"SV\"],\"504\":[\"HN\"],\"505\":[\"NI\"],\"506\":[\"CR\"],\"507\":[\"PA\"],\"508\":[\"PM\"],\"509\":[\"HT\"],\"590\":[\"GP\",\"BL\",\"MF\"],\"591\":[\"BO\"],\"592\":[\"GY\"],\"593\":[\"EC\"],\"594\":[\"GF\"],\"595\":[\"PY\"],\"596\":[\"MQ\"],\"597\":[\"SR\"],\"598\":[\"UY\"],\"599\":[\"CW\",\"BQ\"],\"670\":[\"TL\"],\"672\":[\"NF\"],\"673\":[\"BN\"],\"674\":[\"NR\"],\"675\":[\"PG\"],\"676\":[\"TO\"],\"677\":[\"SB\"],\"678\":[\"VU\"],\"679\":[\"FJ\"],\"680\":[\"PW\"],\"681\":[\"WF\"],\"682\":[\"CK\"],\"683\":[\"NU\"],\"685\":[\"WS\"],\"686\":[\"KI\"],\"687\":[\"NC\"],\"688\":[\"TV\"],\"689\":[\"PF\"],\"690\":[\"TK\"],\"691\":[\"FM\"],\"692\":[\"MH\"],\"850\":[\"KP\"],\"852\":[\"HK\"],\"853\":[\"MO\"],\"855\":[\"KH\"],\"856\":[\"LA\"],\"880\":[\"BD\"],\"886\":[\"TW\"],\"960\":[\"MV\"],\"961\":[\"LB\"],\"962\":[\"JO\"],\"963\":[\"SY\"],\"964\":[\"IQ\"],\"965\":[\"KW\"],\"966\":[\"SA\"],\"967\":[\"YE\"],\"968\":[\"OM\"],\"970\":[\"PS\"],\"971\":[\"AE\"],\"972\":[\"IL\"],\"973\":[\"BH\"],\"974\":[\"QA\"],\"975\":[\"BT\"],\"976\":[\"MN\"],\"977\":[\"NP\"],\"992\":[\"TJ\"],\"993\":[\"TM\"],\"994\":[\"AZ\"],\"995\":[\"GE\"],\"996\":[\"KG\"],\"998\":[\"UZ\"]},\"countries\":{\"AC\":[\"247\",\"00\",\"(?:[01589]\\\\d|[46])\\\\d{4}\",[5,6]],\"AD\":[\"376\",\"00\",\"(?:1|6\\\\d)\\\\d{7}|[135-9]\\\\d{5}\",[6,8,9],[[\"(\\\\d{3})(\\\\d{3})\",\"$1 $2\",[\"[135-9]\"]],[\"(\\\\d{4})(\\\\d{4})\",\"$1 $2\",[\"1\"]],[\"(\\\\d{3})(\\\\d{3})(\\\\d{3})\",\"$1 $2 $3\",[\"6\"]]]],\"AE\":[\"971\",\"00\",\"(?:[4-7]\\\\d|9[0-689])\\\\d{7}|800\\\\d{2,9}|[2-4679]\\\\d{7}\",[5,6,7,8,9,10,11,12],[[\"(\\\\d{3})(\\\\d{2,9})\",\"$1 $2\",[\"60|8\"]],[\"(\\\\d)(\\\\d{3})(\\\\d{4})\",\"$1 $2 $3\",[\"[236]|[479][2-8]\"],\"0$1\"],[\"(\\\\d{3})(\\\\d)(\\\\d{5})\",\"$1 $2 $3\",[\"[479]\"]],[\"(\\\\d{2})(\\\\d{3})(\\\\d{4})\",\"$1 $2 $3\",[\"5\"],\"0$1\"]],\"0\"],\"AF\":[\"93\",\"00\",\"[2-7]\\\\d{8}\",[9],[[\"(\\\\d{2})(\\\\d{3})(\\\\d{4})\",\"$1 $2 $3\",[\"[2-7]\"],\"0$1\"]],\"0\"],\"AG\":[\"1\",\"011\",\"(?:268|[58]\\\\d\\\\d|900)\\\\d{7}\",[10],0,\"1\",0,\"([457]\\\\d{6})$|1\",\"268$1\",0,\"268\"],\"AI\":[\"1\",\"011\",\"(?:264|[58]\\\\d\\\\d|900)\\\\d{7}\",[10],0,\"1\",0,\"([2457]\\\\d{6})$|1\",\"264$1\",0,\"264\"],\"AL\":[\"355\",\"00\",\"(?:700\\\\d\\\\d|900)\\\\d{3}|8\\\\d{5,7}|(?:[2-5]|6\\\\d)\\\\d{7}\",[6,7,8,9],[[\"(\\\\d{3})(\\\\d{3,4})\",\"$1 $2\",[\"80|9\"],\"0$1\"],[\"(\\\\d)(\\\\d{3})(\\\\d{4})\",\"$1 $2 $3\",[\"4[2-6]\"],\"0$1\"],[\"(\\\\d{2})(\\\\d{3})(\\\\d{3})\",\"$1 $2 $3\",[\"[2358][2-5]|4\"],\"0$1\"],[\"(\\\\d{3})(\\\\d{5})\",\"$1 $2\",[\"[23578]\"],\"0$1\"],[\"(\\\\d{2})(\\\\d{3})(\\\\d{4})\",\"$1 $2 $3\",[\"6\"],\"0$1\"]],\"0\"],\"AM\":[\"374\",\"00\",\"(?:[1-489]\\\\d|55|60|77)\\\\d{6}\",[8],[[\"(\\\\d{3})(\\\\d{2})(\\\\d{3})\",\"$1 $2 $3\",[\"[89]0\"],\"0 $1\"],[\"(\\\\d{3})(\\\\d{5})\",\"$1 $2\",[\"2|3[12]\"],\"(0$1)\"],[\"(\\\\d{2})(\\\\d{6})\",\"$1 $2\",[\"1|47\"],\"(0$1)\"],[\"(\\\\d{2})(\\\\d{6})\",\"$1 $2\",[\"[3-9]\"],\"0$1\"]],\"0\"],\"AO\":[\"244\",\"00\",\"[29]\\\\d{8}\",[9],[[\"(\\\\d{3})(\\\\d{3})(\\\\d{3})\",\"$1 $2 $3\",[\"[29]\"]]]],\"AR\":[\"54\",\"00\",\"(?:11|[89]\\\\d\\\\d)\\\\d{8}|[2368]\\\\d{9}\",[10,11],[[\"(\\\\d{4})(\\\\d{2})(\\\\d{4})\",\"$1 $2-$3\",[\"2(?:2[024-9]|3[0-59]|47|6[245]|9[02-8])|3(?:3[28]|4[03-9]|5[2-46-8]|7[1-578]|8[2-9])\",\"2(?:[23]02|6(?:[25]|4[6-8])|9(?:[02356]|4[02568]|72|8[23]))|3(?:3[28]|4(?:[04679]|3[5-8]|5[4-68]|8[2379])|5(?:[2467]|3[237]|8[2-5])|7[1-578]|8(?:[2469]|3[2578]|5[4-8]|7[36-8]|8[5-8]))|2(?:2[24-9]|3[1-59]|47)\",\"2(?:[23]02|6(?:[25]|4(?:64|[78]))|9(?:[02356]|4(?:[0268]|5[2-6])|72|8[23]))|3(?:3[28]|4(?:[04679]|3[78]|5(?:4[46]|8)|8[2379])|5(?:[2467]|3[237]|8[23])|7[1-578]|8(?:[2469]|3[278]|5[56][46]|86[3-6]))|2(?:2[24-9]|3[1-59]|47)|38(?:[58][78]|7[378])|3(?:4[35][56]|58[45]|8(?:[38]5|54|76))[4-6]\",\"2(?:[23]02|6(?:[25]|4(?:64|[78]))|9(?:[02356]|4(?:[0268]|5[2-6])|72|8[23]))|3(?:3[28]|4(?:[04679]|3(?:5(?:4[0-25689]|[56])|[78])|58|8[2379])|5(?:[2467]|3[237]|8(?:[23]|4(?:[45]|60)|5(?:4[0-39]|5|64)))|7[1-578]|8(?:[2469]|3[278]|54(?:4|5[13-7]|6[89])|86[3-6]))|2(?:2[24-9]|3[1-59]|47)|38(?:[58][78]|7[378])|3(?:454|85[56])[46]|3(?:4(?:36|5[56])|8(?:[38]5|76))[4-6]\"],\"0$1\",1],[\"(\\\\d{2})(\\\\d{4})(\\\\d{4})\",\"$1 $2-$3\",[\"1\"],\"0$1\",1],[\"(\\\\d{3})(\\\\d{3})(\\\\d{4})\",\"$1-$2-$3\",[\"[68]\"],\"0$1\"],[\"(\\\\d{3})(\\\\d{3})(\\\\d{4})\",\"$1 $2-$3\",[\"[23]\"],\"0$1\",1],[\"(\\\\d)(\\\\d{4})(\\\\d{2})(\\\\d{4})\",\"$2 15-$3-$4\",[\"9(?:2[2-469]|3[3-578])\",\"9(?:2(?:2[024-9]|3[0-59]|47|6[245]|9[02-8])|3(?:3[28]|4[03-9]|5[2-46-8]|7[1-578]|8[2-9]))\",\"9(?:2(?:[23]02|6(?:[25]|4[6-8])|9(?:[02356]|4[02568]|72|8[23]))|3(?:3[28]|4(?:[04679]|3[5-8]|5[4-68]|8[2379])|5(?:[2467]|3[237]|8[2-5])|7[1-578]|8(?:[2469]|3[2578]|5[4-8]|7[36-8]|8[5-8])))|92(?:2[24-9]|3[1-59]|47)\",\"9(?:2(?:[23]02|6(?:[25]|4(?:64|[78]))|9(?:[02356]|4(?:[0268]|5[2-6])|72|8[23]))|3(?:3[28]|4(?:[04679]|3[78]|5(?:4[46]|8)|8[2379])|5(?:[2467]|3[237]|8[23])|7[1-578]|8(?:[2469]|3[278]|5(?:[56][46]|[78])|7[378]|8(?:6[3-6]|[78]))))|92(?:2[24-9]|3[1-59]|47)|93(?:4[35][56]|58[45]|8(?:[38]5|54|76))[4-6]\",\"9(?:2(?:[23]02|6(?:[25]|4(?:64|[78]))|9(?:[02356]|4(?:[0268]|5[2-6])|72|8[23]))|3(?:3[28]|4(?:[04679]|3(?:5(?:4[0-25689]|[56])|[78])|5(?:4[46]|8)|8[2379])|5(?:[2467]|3[237]|8(?:[23]|4(?:[45]|60)|5(?:4[0-39]|5|64)))|7[1-578]|8(?:[2469]|3[278]|5(?:4(?:4|5[13-7]|6[89])|[56][46]|[78])|7[378]|8(?:6[3-6]|[78]))))|92(?:2[24-9]|3[1-59]|47)|93(?:4(?:36|5[56])|8(?:[38]5|76))[4-6]\"],\"0$1\",0,\"$1 $2 $3-$4\"],[\"(\\\\d)(\\\\d{2})(\\\\d{4})(\\\\d{4})\",\"$2 15-$3-$4\",[\"91\"],\"0$1\",0,\"$1 $2 $3-$4\"],[\"(\\\\d{3})(\\\\d{3})(\\\\d{5})\",\"$1-$2-$3\",[\"8\"],\"0$1\"],[\"(\\\\d)(\\\\d{3})(\\\\d{3})(\\\\d{4})\",\"$2 15-$3-$4\",[\"9\"],\"0$1\",0,\"$1 $2 $3-$4\"]],\"0\",0,\"0?(?:(11|2(?:2(?:02?|[13]|2[13-79]|4[1-6]|5[2457]|6[124-8]|7[1-4]|8[13-6]|9[1267])|3(?:02?|1[467]|2[03-6]|3[13-8]|[49][2-6]|5[2-8]|[67])|4(?:7[3-578]|9)|6(?:[0136]|2[24-6]|4[6-8]?|5[15-8])|80|9(?:0[1-3]|[19]|2\\\\d|3[1-6]|4[02568]?|5[2-4]|6[2-46]|72?|8[23]?))|3(?:3(?:2[79]|6|8[2578])|4(?:0[0-24-9]|[12]|3[5-8]?|4[24-7]|5[4-68]?|6[02-9]|7[126]|8[2379]?|9[1-36-8])|5(?:1|2[1245]|3[237]?|4[1-46-9]|6[2-4]|7[1-6]|8[2-5]?)|6[24]|7(?:[069]|1[1568]|2[15]|3[145]|4[13]|5[14-8]|7[2-57]|8[126])|8(?:[01]|2[15-7]|3[2578]?|4[13-6]|5[4-8]?|6[1-357-9]|7[36-8]?|8[5-8]?|9[124])))15)?\",\"9$1\"],\"AS\":[\"1\",\"011\",\"(?:[58]\\\\d\\\\d|684|900)\\\\d{7}\",[10],0,\"1\",0,\"([267]\\\\d{6})$|1\",\"684$1\",0,\"684\"],\"AT\":[\"43\",\"00\",\"1\\\\d{3,12}|2\\\\d{6,12}|43(?:(?:0\\\\d|5[02-9])\\\\d{3,9}|2\\\\d{4,5}|[3467]\\\\d{4}|8\\\\d{4,6}|9\\\\d{4,7})|5\\\\d{4,12}|8\\\\d{7,12}|9\\\\d{8,12}|(?:[367]\\\\d|4[0-24-9])\\\\d{4,11}\",[4,5,6,7,8,9,10,11,12,13],[[\"(\\\\d)(\\\\d{3,12})\",\"$1 $2\",[\"1(?:11|[2-9])\"],\"0$1\"],[\"(\\\\d{3})(\\\\d{2})\",\"$1 $2\",[\"517\"],\"0$1\"],[\"(\\\\d{2})(\\\\d{3,5})\",\"$1 $2\",[\"5[079]\"],\"0$1\"],[\"(\\\\d{3})(\\\\d{3,10})\",\"$1 $2\",[\"(?:31|4)6|51|6(?:48|5[0-3579]|[6-9])|7(?:20|32|8)|[89]\",\"(?:31|4)6|51|6(?:485|5[0-3579]|[6-9])|7(?:20|32|8)|[89]\"],\"0$1\"],[\"(\\\\d{4})(\\\\d{3,9})\",\"$1 $2\",[\"[2-467]|5[2-6]\"],\"0$1\"],[\"(\\\\d{2})(\\\\d{3})(\\\\d{3,4})\",\"$1 $2 $3\",[\"5\"],\"0$1\"],[\"(\\\\d{2})(\\\\d{4})(\\\\d{4,7})\",\"$1 $2 $3\",[\"5\"],\"0$1\"]],\"0\"],\"AU\":[\"61\",\"001[14-689]|14(?:1[14]|34|4[17]|[56]6|7[47]|88)0011\",\"1(?:[0-79]\\\\d{7}(?:\\\\d(?:\\\\d{2})?)?|8[0-24-9]\\\\d{7})|[2-478]\\\\d{8}|1\\\\d{4,7}\",[5,6,7,8,9,10,12],[[\"(\\\\d{2})(\\\\d{3,4})\",\"$1 $2\",[\"16\"],\"0$1\"],[\"(\\\\d{2})(\\\\d{3})(\\\\d{2,4})\",\"$1 $2 $3\",[\"16\"],\"0$1\"],[\"(\\\\d{3})(\\\\d{3})(\\\\d{3})\",\"$1 $2 $3\",[\"14|4\"],\"0$1\"],[\"(\\\\d)(\\\\d{4})(\\\\d{4})\",\"$1 $2 $3\",[\"[2378]\"],\"(0$1)\"],[\"(\\\\d{4})(\\\\d{3})(\\\\d{3})\",\"$1 $2 $3\",[\"1(?:30|[89])\"]]],\"0\",0,\"(183[12])|0\",0,0,0,[[\"(?:(?:241|349)0\\\\d\\\\d|8(?:51(?:0(?:0[03-9]|[12479]\\\\d|3[2-9]|5[0-8]|6[1-9]|8[0-7])|1(?:[0235689]\\\\d|1[0-69]|4[0-589]|7[0-47-9])|2(?:0[0-79]|[18][13579]|2[14-9]|3[0-46-9]|[4-6]\\\\d|7[89]|9[0-4])|[34]\\\\d\\\\d)|91(?:(?:[0-58]\\\\d|6[0135-9])\\\\d|7(?:0[0-24-9]|[1-9]\\\\d)|9(?:[0-46-9]\\\\d|5[0-79]))))\\\\d{3}|(?:2(?:[0-26-9]\\\\d|3[0-8]|4[02-9]|5[0135-9])|3(?:[0-3589]\\\\d|4[0-578]|6[1-9]|7[0-35-9])|7(?:[013-57-9]\\\\d|2[0-8])|8(?:55|6[0-8]|[78]\\\\d|9[02-9]))\\\\d{6}\",[9]],[\"4(?:79[01]|83[0-36-9]|95[0-3])\\\\d{5}|4(?:[0-36]\\\\d|4[047-9]|[58][0-24-9]|7[02-8]|9[0-47-9])\\\\d{6}\",[9]],[\"180(?:0\\\\d{3}|2)\\\\d{3}\",[7,10]],[\"190[0-26]\\\\d{6}\",[10]],0,0,0,[\"163\\\\d{2,6}\",[5,6,7,8,9]],[\"14(?:5(?:1[0458]|[23][458])|71\\\\d)\\\\d{4}\",[9]],[\"13(?:00\\\\d{6}(?:\\\\d{2})?|45[0-4]\\\\d{3})|13\\\\d{4}\",[6,8,10,12]]],\"0011\"],\"AW\":[\"297\",\"00\",\"(?:[25-79]\\\\d\\\\d|800)\\\\d{4}\",[7],[[\"(\\\\d{3})(\\\\d{4})\",\"$1 $2\",[\"[25-9]\"]]]],\"AX\":[\"358\",\"00|99(?:[01469]|5(?:[14]1|3[23]|5[59]|77|88|9[09]))\",\"2\\\\d{4,9}|35\\\\d{4,5}|(?:60\\\\d\\\\d|800)\\\\d{4,6}|7\\\\d{5,11}|(?:[14]\\\\d|3[0-46-9]|50)\\\\d{4,8}\",[5,6,7,8,9,10,11,12],0,\"0\",0,0,0,0,\"18\",0,\"00\"],\"AZ\":[\"994\",\"00\",\"365\\\\d{6}|(?:[124579]\\\\d|60|88)\\\\d{7}\",[9],[[\"(\\\\d{3})(\\\\d{2})(\\\\d{2})(\\\\d{2})\",\"$1 $2 $3 $4\",[\"90\"],\"0$1\"],[\"(\\\\d{2})(\\\\d{3})(\\\\d{2})(\\\\d{2})\",\"$1 $2 $3 $4\",[\"1[28]|2|365|46\",\"1[28]|2|365[45]|46\",\"1[28]|2|365(?:4|5[02])|46\"],\"(0$1)\"],[\"(\\\\d{2})(\\\\d{3})(\\\\d{2})(\\\\d{2})\",\"$1 $2 $3 $4\",[\"[13-9]\"],\"0$1\"]],\"0\"],\"BA\":[\"387\",\"00\",\"6\\\\d{8}|(?:[35689]\\\\d|49|70)\\\\d{6}\",[8,9],[[\"(\\\\d{2})(\\\\d{3})(\\\\d{3})\",\"$1 $2 $3\",[\"6[1-3]|[7-9]\"],\"0$1\"],[\"(\\\\d{2})(\\\\d{3})(\\\\d{3})\",\"$1 $2-$3\",[\"[3-5]|6[56]\"],\"0$1\"],[\"(\\\\d{2})(\\\\d{2})(\\\\d{2})(\\\\d{3})\",\"$1 $2 $3 $4\",[\"6\"],\"0$1\"]],\"0\"],\"BB\":[\"1\",\"011\",\"(?:246|[58]\\\\d\\\\d|900)\\\\d{7}\",[10],0,\"1\",0,\"([2-9]\\\\d{6})$|1\",\"246$1\",0,\"246\"],\"BD\":[\"880\",\"00\",\"[1-469]\\\\d{9}|8[0-79]\\\\d{7,8}|[2-79]\\\\d{8}|[2-9]\\\\d{7}|[3-9]\\\\d{6}|[57-9]\\\\d{5}\",[6,7,8,9,10],[[\"(\\\\d{2})(\\\\d{4,6})\",\"$1-$2\",[\"31[5-8]|[459]1\"],\"0$1\"],[\"(\\\\d{3})(\\\\d{3,7})\",\"$1-$2\",[\"3(?:[67]|8[013-9])|4(?:6[168]|7|[89][18])|5(?:6[128]|9)|6(?:[15]|28|4[14])|7[2-589]|8(?:0[014-9]|[12])|9[358]|(?:3[2-5]|4[235]|5[2-578]|6[0389]|76|8[3-7]|9[24])1|(?:44|66)[01346-9]\"],\"0$1\"],[\"(\\\\d{4})(\\\\d{3,6})\",\"$1-$2\",[\"[13-9]|2[23]\"],\"0$1\"],[\"(\\\\d)(\\\\d{7,8})\",\"$1-$2\",[\"2\"],\"0$1\"]],\"0\"],\"BE\":[\"32\",\"00\",\"4\\\\d{8}|[1-9]\\\\d{7}\",[8,9],[[\"(\\\\d{3})(\\\\d{2})(\\\\d{3})\",\"$1 $2 $3\",[\"(?:80|9)0\"],\"0$1\"],[\"(\\\\d)(\\\\d{3})(\\\\d{2})(\\\\d{2})\",\"$1 $2 $3 $4\",[\"[239]|4[23]\"],\"0$1\"],[\"(\\\\d{2})(\\\\d{2})(\\\\d{2})(\\\\d{2})\",\"$1 $2 $3 $4\",[\"[15-8]\"],\"0$1\"],[\"(\\\\d{3})(\\\\d{2})(\\\\d{2})(\\\\d{2})\",\"$1 $2 $3 $4\",[\"4\"],\"0$1\"]],\"0\"],\"BF\":[\"226\",\"00\",\"(?:[025-7]\\\\d|44)\\\\d{6}\",[8],[[\"(\\\\d{2})(\\\\d{2})(\\\\d{2})(\\\\d{2})\",\"$1 $2 $3 $4\",[\"[024-7]\"]]]],\"BG\":[\"359\",\"00\",\"00800\\\\d{7}|[2-7]\\\\d{6,7}|[89]\\\\d{6,8}|2\\\\d{5}\",[6,7,8,9,12],[[\"(\\\\d)(\\\\d)(\\\\d{2})(\\\\d{2})\",\"$1 $2 $3 $4\",[\"2\"],\"0$1\"],[\"(\\\\d{3})(\\\\d{4})\",\"$1 $2\",[\"43[1-6]|70[1-9]\"],\"0$1\"],[\"(\\\\d)(\\\\d{3})(\\\\d{3,4})\",\"$1 $2 $3\",[\"2\"],\"0$1\"],[\"(\\\\d{2})(\\\\d{3})(\\\\d{2,3})\",\"$1 $2 $3\",[\"[356]|4[124-7]|7[1-9]|8[1-6]|9[1-7]\"],\"0$1\"],[\"(\\\\d{3})(\\\\d{2})(\\\\d{3})\",\"$1 $2 $3\",[\"(?:70|8)0\"],\"0$1\"],[\"(\\\\d{3})(\\\\d{3})(\\\\d{2})\",\"$1 $2 $3\",[\"43[1-7]|7\"],\"0$1\"],[\"(\\\\d{2})(\\\\d{3})(\\\\d{3,4})\",\"$1 $2 $3\",[\"[48]|9[08]\"],\"0$1\"],[\"(\\\\d{3})(\\\\d{3})(\\\\d{3})\",\"$1 $2 $3\",[\"9\"],\"0$1\"]],\"0\"],\"BH\":[\"973\",\"00\",\"[136-9]\\\\d{7}\",[8],[[\"(\\\\d{4})(\\\\d{4})\",\"$1 $2\",[\"[13679]|8[02-4679]\"]]]],\"BI\":[\"257\",\"00\",\"(?:[267]\\\\d|31)\\\\d{6}\",[8],[[\"(\\\\d{2})(\\\\d{2})(\\\\d{2})(\\\\d{2})\",\"$1 $2 $3 $4\",[\"[2367]\"]]]],\"BJ\":[\"229\",\"00\",\"(?:01\\\\d|8)\\\\d{7}\",[8,10],[[\"(\\\\d{2})(\\\\d{2})(\\\\d{2})(\\\\d{2})\",\"$1 $2 $3 $4\",[\"8\"]],[\"(\\\\d{2})(\\\\d{2})(\\\\d{2})(\\\\d{2})(\\\\d{2})\",\"$1 $2 $3 $4 $5\",[\"0\"]]]],\"BL\":[\"590\",\"00\",\"(?:590\\\\d|7090)\\\\d{5}|(?:69|80|9\\\\d)\\\\d{7}\",[9],0,\"0\",0,0,0,0,0,[[\"590(?:2[7-9]|3[3-7]|5[12]|87)\\\\d{4}\"],[\"(?:69(?:0\\\\d\\\\d|1(?:2[2-9]|3[0-5])|4(?:0[89]|1[2-6]|9\\\\d)|6(?:1[016-9]|5[0-4]|[67]\\\\d))|7090[0-4])\\\\d{4}\"],[\"80[0-5]\\\\d{6}\"],0,0,0,0,0,[\"9(?:(?:39[5-7]|76[018])\\\\d|475[0-6])\\\\d{4}\"]]],\"BM\":[\"1\",\"011\",\"(?:441|[58]\\\\d\\\\d|900)\\\\d{7}\",[10],0,\"1\",0,\"([2-9]\\\\d{6})$|1\",\"441$1\",0,\"441\"],\"BN\":[\"673\",\"00\",\"[2-578]\\\\d{6}\",[7],[[\"(\\\\d{3})(\\\\d{4})\",\"$1 $2\",[\"[2-578]\"]]]],\"BO\":[\"591\",\"00(?:1\\\\d)?\",\"8001\\\\d{5}|(?:[2-467]\\\\d|50)\\\\d{6}\",[8,9],[[\"(\\\\d)(\\\\d{7})\",\"$1 $2\",[\"[235]|4[46]\"]],[\"(\\\\d{8})\",\"$1\",[\"[67]\"]],[\"(\\\\d{3})(\\\\d{2})(\\\\d{4})\",\"$1 $2 $3\",[\"8\"]]],\"0\",0,\"0(1\\\\d)?\"],\"BQ\":[\"599\",\"00\",\"(?:[34]1|7\\\\d)\\\\d{5}\",[7],0,0,0,0,0,0,\"[347]\"],\"BR\":[\"55\",\"00(?:1[245]|2[1-35]|31|4[13]|[56]5|99)\",\"[1-467]\\\\d{9,10}|55[0-46-9]\\\\d{8}|[34]\\\\d{7}|55\\\\d{7,8}|(?:5[0-46-9]|[89]\\\\d)\\\\d{7,9}\",[8,9,10,11],[[\"(\\\\d{4})(\\\\d{4})\",\"$1-$2\",[\"300|4(?:0[02]|37|86)\",\"300|4(?:0(?:0|20)|370|864)\"]],[\"(\\\\d{3})(\\\\d{2,3})(\\\\d{4})\",\"$1 $2 $3\",[\"(?:[358]|90)0\"],\"0$1\"],[\"(\\\\d{2})(\\\\d{4})(\\\\d{4})\",\"$1 $2-$3\",[\"(?:[14689][1-9]|2[12478]|3[1-578]|5[13-5]|7[13-579])[2-57]\"],\"($1)\"],[\"(\\\\d{2})(\\\\d{5})(\\\\d{4})\",\"$1 $2-$3\",[\"[16][1-9]|[2-57-9]\"],\"($1)\"]],\"0\",0,\"(?:0|90)(?:(1[245]|2[1-35]|31|4[13]|[56]5|99)(\\\\d{10,11}))?\",\"$2\"],\"BS\":[\"1\",\"011\",\"(?:242|[58]\\\\d\\\\d|900)\\\\d{7}\",[10],0,\"1\",0,\"([3-8]\\\\d{6})$|1\",\"242$1\",0,\"242\"],\"BT\":[\"975\",\"00\",\"[178]\\\\d{7}|[2-8]\\\\d{6}\",[7,8],[[\"(\\\\d)(\\\\d{3})(\\\\d{3})\",\"$1 $2 $3\",[\"[2-6]|7[246]|8[2-4]\"]],[\"(\\\\d{2})(\\\\d{2})(\\\\d{2})(\\\\d{2})\",\"$1 $2 $3 $4\",[\"1[67]|[78]\"]]]],\"BW\":[\"267\",\"00\",\"(?:0800|(?:[37]|800)\\\\d)\\\\d{6}|(?:[2-6]\\\\d|90)\\\\d{5}\",[7,8,10],[[\"(\\\\d{2})(\\\\d{5})\",\"$1 $2\",[\"90\"]],[\"(\\\\d{3})(\\\\d{4})\",\"$1 $2\",[\"[24-6]|3[15-9]\"]],[\"(\\\\d{2})(\\\\d{3})(\\\\d{3})\",\"$1 $2 $3\",[\"[37]\"]],[\"(\\\\d{4})(\\\\d{3})(\\\\d{3})\",\"$1 $2 $3\",[\"0\"]],[\"(\\\\d{3})(\\\\d{4})(\\\\d{3})\",\"$1 $2 $3\",[\"8\"]]]],\"BY\":[\"375\",\"810\",\"(?:[12]\\\\d|33|44|902)\\\\d{7}|8(?:0[0-79]\\\\d{5,7}|[1-7]\\\\d{9})|8(?:1[0-489]|[5-79]\\\\d)\\\\d{7}|8[1-79]\\\\d{6,7}|8[0-79]\\\\d{5}|8\\\\d{5}\",[6,7,8,9,10,11],[[\"(\\\\d{3})(\\\\d{3})\",\"$1 $2\",[\"800\"],\"8 $1\"],[\"(\\\\d{3})(\\\\d{2})(\\\\d{2,4})\",\"$1 $2 $3\",[\"800\"],\"8 $1\"],[\"(\\\\d{4})(\\\\d{2})(\\\\d{3})\",\"$1 $2-$3\",[\"1(?:5[169]|6[3-5]|7[179])|2(?:1[35]|2[34]|3[3-5])\",\"1(?:5[169]|6(?:3[1-3]|4|5[125])|7(?:1[3-9]|7[0-24-6]|9[2-7]))|2(?:1[35]|2[34]|3[3-5])\"],\"8 0$1\"],[\"(\\\\d{3})(\\\\d{2})(\\\\d{2})(\\\\d{2})\",\"$1 $2-$3-$4\",[\"1(?:[56]|7[467])|2[1-3]\"],\"8 0$1\"],[\"(\\\\d{2})(\\\\d{3})(\\\\d{2})(\\\\d{2})\",\"$1 $2-$3-$4\",[\"[1-4]\"],\"8 0$1\"],[\"(\\\\d{3})(\\\\d{3,4})(\\\\d{4})\",\"$1 $2 $3\",[\"[89]\"],\"8 $1\"]],\"8\",0,\"0|80?\",0,0,0,0,\"8~10\"],\"BZ\":[\"501\",\"00\",\"(?:0800\\\\d|[2-8])\\\\d{6}\",[7,11],[[\"(\\\\d{3})(\\\\d{4})\",\"$1-$2\",[\"[2-8]\"]],[\"(\\\\d)(\\\\d{3})(\\\\d{4})(\\\\d{3})\",\"$1-$2-$3-$4\",[\"0\"]]]],\"CA\":[\"1\",\"011\",\"[2-9]\\\\d{9}|3\\\\d{6}\",[7,10],0,\"1\",0,0,0,0,0,[[\"(?:2(?:04|[23]6|[48]9|5[07]|63)|3(?:06|43|54|6[578]|82)|4(?:03|1[68]|[26]8|3[178]|50|74)|5(?:06|1[49]|48|79|8[147])|6(?:04|[18]3|39|47|72)|7(?:0[59]|42|53|78|8[02])|8(?:[06]7|19|25|7[39])|9(?:0[25]|42))[2-9]\\\\d{6}\",[10]],[\"\",[10]],[\"8(?:00|33|44|55|66|77|88)[2-9]\\\\d{6}\",[10]],[\"900[2-9]\\\\d{6}\",[10]],[\"52(?:3(?:[2-46-9][02-9]\\\\d|5(?:[02-46-9]\\\\d|5[0-46-9]))|4(?:[2-478][02-9]\\\\d|5(?:[034]\\\\d|2[024-9]|5[0-46-9])|6(?:0[1-9]|[2-9]\\\\d)|9(?:[05-9]\\\\d|2[0-5]|49)))\\\\d{4}|52[34][2-9]1[02-9]\\\\d{4}|(?:5(?:2[125-9]|3[23]|44|66|77|88)|6(?:22|33))[2-9]\\\\d{6}\",[10]],0,[\"310\\\\d{4}\",[7]],0,[\"600[2-9]\\\\d{6}\",[10]]]],\"CC\":[\"61\",\"001[14-689]|14(?:1[14]|34|4[17]|[56]6|7[47]|88)0011\",\"1(?:[0-79]\\\\d{8}(?:\\\\d{2})?|8[0-24-9]\\\\d{7})|[148]\\\\d{8}|1\\\\d{5,7}\",[6,7,8,9,10,12],0,\"0\",0,\"([59]\\\\d{7})$|0\",\"8$1\",0,0,[[\"8(?:51(?:0(?:02|31|60|89)|1(?:18|76)|223)|91(?:0(?:1[0-2]|29)|1(?:[28]2|50|79)|2(?:10|64)|3(?:[06]8|22)|4[29]8|62\\\\d|70[23]|959))\\\\d{3}\",[9]],[\"4(?:79[01]|83[0-36-9]|95[0-3])\\\\d{5}|4(?:[0-36]\\\\d|4[047-9]|[58][0-24-9]|7[02-8]|9[0-47-9])\\\\d{6}\",[9]],[\"180(?:0\\\\d{3}|2)\\\\d{3}\",[7,10]],[\"190[0-26]\\\\d{6}\",[10]],0,0,0,0,[\"14(?:5(?:1[0458]|[23][458])|71\\\\d)\\\\d{4}\",[9]],[\"13(?:00\\\\d{6}(?:\\\\d{2})?|45[0-4]\\\\d{3})|13\\\\d{4}\",[6,8,10,12]]],\"0011\"],\"CD\":[\"243\",\"00\",\"(?:(?:[189]|5\\\\d)\\\\d|2)\\\\d{7}|[1-68]\\\\d{6}\",[7,8,9,10],[[\"(\\\\d{2})(\\\\d{2})(\\\\d{3})\",\"$1 $2 $3\",[\"88\"],\"0$1\"],[\"(\\\\d{2})(\\\\d{5})\",\"$1 $2\",[\"[1-6]\"],\"0$1\"],[\"(\\\\d{2})(\\\\d{2})(\\\\d{4})\",\"$1 $2 $3\",[\"2\"],\"0$1\"],[\"(\\\\d{2})(\\\\d{3})(\\\\d{4})\",\"$1 $2 $3\",[\"1\"],\"0$1\"],[\"(\\\\d{3})(\\\\d{3})(\\\\d{3})\",\"$1 $2 $3\",[\"[89]\"],\"0$1\"],[\"(\\\\d{2})(\\\\d{2})(\\\\d{3})(\\\\d{3})\",\"$1 $2 $3 $4\",[\"5\"],\"0$1\"]],\"0\"],\"CF\":[\"236\",\"00\",\"8776\\\\d{4}|(?:[27]\\\\d|61)\\\\d{6}\",[8],[[\"(\\\\d{2})(\\\\d{2})(\\\\d{2})(\\\\d{2})\",\"$1 $2 $3 $4\",[\"[26-8]\"]]]],\"CG\":[\"242\",\"00\",\"222\\\\d{6}|(?:0\\\\d|80)\\\\d{7}\",[9],[[\"(\\\\d)(\\\\d{4})(\\\\d{4})\",\"$1 $2 $3\",[\"8\"]],[\"(\\\\d{2})(\\\\d{3})(\\\\d{4})\",\"$1 $2 $3\",[\"[02]\"]]]],\"CH\":[\"41\",\"00\",\"8\\\\d{11}|[2-9]\\\\d{8}\",[9,12],[[\"(\\\\d{3})(\\\\d{3})(\\\\d{3})\",\"$1 $2 $3\",[\"8[047]|90\"],\"0$1\"],[\"(\\\\d{2})(\\\\d{3})(\\\\d{2})(\\\\d{2})\",\"$1 $2 $3 $4\",[\"[2-79]|81\"],\"0$1\"],[\"(\\\\d{3})(\\\\d{2})(\\\\d{3})(\\\\d{2})(\\\\d{2})\",\"$1 $2 $3 $4 $5\",[\"8\"],\"0$1\"]],\"0\"],\"CI\":[\"225\",\"00\",\"[02]\\\\d{9}\",[10],[[\"(\\\\d{2})(\\\\d{2})(\\\\d)(\\\\d{5})\",\"$1 $2 $3 $4\",[\"2\"]],[\"(\\\\d{2})(\\\\d{2})(\\\\d{2})(\\\\d{4})\",\"$1 $2 $3 $4\",[\"0\"]]]],\"CK\":[\"682\",\"00\",\"[2-578]\\\\d{4}\",[5],[[\"(\\\\d{2})(\\\\d{3})\",\"$1 $2\",[\"[2-578]\"]]]],\"CL\":[\"56\",\"(?:0|1(?:1[0-69]|2[02-5]|5[13-58]|69|7[0167]|8[018]))0\",\"12300\\\\d{6}|6\\\\d{9,10}|[2-9]\\\\d{8}\",[9,10,11],[[\"(\\\\d{5})(\\\\d{4})\",\"$1 $2\",[\"219\",\"2196\"],\"($1)\"],[\"(\\\\d{3})(\\\\d{3})(\\\\d{3})\",\"$1 $2 $3\",[\"60|809\"]],[\"(\\\\d{2})(\\\\d{3})(\\\\d{4})\",\"$1 $2 $3\",[\"44\"]],[\"(\\\\d)(\\\\d{4})(\\\\d{4})\",\"$1 $2 $3\",[\"2[1-36]\"],\"($1)\"],[\"(\\\\d)(\\\\d{4})(\\\\d{4})\",\"$1 $2 $3\",[\"9(?:10|[2-9])\"]],[\"(\\\\d{2})(\\\\d{3})(\\\\d{4})\",\"$1 $2 $3\",[\"3[2-5]|[47]|5[1-3578]|6[13-57]|8(?:0[1-8]|[1-9])\"],\"($1)\"],[\"(\\\\d{3})(\\\\d{3})(\\\\d{3,4})\",\"$1 $2 $3\",[\"60|8\"]],[\"(\\\\d{4})(\\\\d{3})(\\\\d{4})\",\"$1 $2 $3\",[\"1\"]],[\"(\\\\d{3})(\\\\d{3})(\\\\d{2})(\\\\d{3})\",\"$1 $2 $3 $4\",[\"60\"]]]],\"CM\":[\"237\",\"00\",\"[26]\\\\d{8}|88\\\\d{6,7}\",[8,9],[[\"(\\\\d{2})(\\\\d{2})(\\\\d{2})(\\\\d{2})\",\"$1 $2 $3 $4\",[\"88\"]],[\"(\\\\d)(\\\\d{2})(\\\\d{2})(\\\\d{2})(\\\\d{2})\",\"$1 $2 $3 $4 $5\",[\"[26]|88\"]]]],\"CN\":[\"86\",\"00|1(?:[12]\\\\d|79)\\\\d\\\\d00\",\"(?:(?:1[03-689]|2\\\\d)\\\\d\\\\d|6)\\\\d{8}|1\\\\d{10}|[126]\\\\d{6}(?:\\\\d(?:\\\\d{2})?)?|86\\\\d{5,6}|(?:[3-579]\\\\d|8[0-57-9])\\\\d{5,9}\",[7,8,9,10,11,12],[[\"(\\\\d{2})(\\\\d{5,6})\",\"$1 $2\",[\"(?:10|2[0-57-9])[19]|3(?:[157]|35|49|9[1-68])|4(?:1[124-9]|2[179]|6[47-9]|7|8[23])|5(?:[1357]|2[37]|4[36]|6[1-46]|80)|6(?:3[1-5]|6[0238]|9[12])|7(?:01|[1579]|2[248]|3[014-9]|4[3-6]|6[023689])|8(?:07|1[236-8]|2[5-7]|[37]|8[36-8]|9[1-8])|9(?:0[1-3689]|1[1-79]|3|4[13]|5[1-5]|7[0-79]|9[0-35-9])|(?:4[35]|59|85)[1-9]\",\"(?:10|2[0-57-9])(?:1[02]|9[56])|8078|(?:3(?:[157]\\\\d|35|49|9[1-68])|4(?:1[124-9]|2[179]|[35][1-9]|6[47-9]|7\\\\d|8[23])|5(?:[1357]\\\\d|2[37]|4[36]|6[1-46]|80|9[1-9])|6(?:3[1-5]|6[0238]|9[12])|7(?:01|[1579]\\\\d|2[248]|3[014-9]|4[3-6]|6[023689])|8(?:1[236-8]|2[5-7]|[37]\\\\d|5[1-9]|8[36-8]|9[1-8])|9(?:0[1-3689]|1[1-79]|3\\\\d|4[13]|5[1-5]|7[0-79]|9[0-35-9]))1\",\"10(?:1(?:0|23)|9[56])|2[0-57-9](?:1(?:00|23)|9[56])|80781|(?:3(?:[157]\\\\d|35|49|9[1-68])|4(?:1[124-9]|2[179]|[35][1-9]|6[47-9]|7\\\\d|8[23])|5(?:[1357]\\\\d|2[37]|4[36]|6[1-46]|80|9[1-9])|6(?:3[1-5]|6[0238]|9[12])|7(?:01|[1579]\\\\d|2[248]|3[014-9]|4[3-6]|6[023689])|8(?:1[236-8]|2[5-7]|[37]\\\\d|5[1-9]|8[36-8]|9[1-8])|9(?:0[1-3689]|1[1-79]|3\\\\d|4[13]|5[1-5]|7[0-79]|9[0-35-9]))12\",\"10(?:1(?:0|23)|9[56])|2[0-57-9](?:1(?:00|23)|9[56])|807812|(?:3(?:[157]\\\\d|35|49|9[1-68])|4(?:1[124-9]|2[179]|[35][1-9]|6[47-9]|7\\\\d|8[23])|5(?:[1357]\\\\d|2[37]|4[36]|6[1-46]|80|9[1-9])|6(?:3[1-5]|6[0238]|9[12])|7(?:01|[1579]\\\\d|2[248]|3[014-9]|4[3-6]|6[023689])|8(?:1[236-8]|2[5-7]|[37]\\\\d|5[1-9]|8[36-8]|9[1-8])|9(?:0[1-3689]|1[1-79]|3\\\\d|4[13]|5[1-5]|7[0-79]|9[0-35-9]))123\",\"10(?:1(?:0|23)|9[56])|2[0-57-9](?:1(?:00|23)|9[56])|(?:3(?:[157]\\\\d|35|49|9[1-68])|4(?:1[124-9]|2[179]|[35][1-9]|6[47-9]|7\\\\d|8[23])|5(?:[1357]\\\\d|2[37]|4[36]|6[1-46]|80|9[1-9])|6(?:3[1-5]|6[0238]|9[12])|7(?:01|[1579]\\\\d|2[248]|3[014-9]|4[3-6]|6[023689])|8(?:078|1[236-8]|2[5-7]|[37]\\\\d|5[1-9]|8[36-8]|9[1-8])|9(?:0[1-3689]|1[1-79]|3\\\\d|4[13]|5[1-5]|7[0-79]|9[0-35-9]))123\"],\"0$1\"],[\"(\\\\d{3})(\\\\d{5,6})\",\"$1 $2\",[\"3(?:[157]|35|49|9[1-68])|4(?:[17]|2[179]|6[47-9]|8[23])|5(?:[1357]|2[37]|4[36]|6[1-46]|80)|6(?:3[1-5]|6[0238]|9[12])|7(?:01|[1579]|2[248]|3[014-9]|4[3-6]|6[023689])|8(?:1[236-8]|2[5-7]|[37]|8[36-8]|9[1-8])|9(?:0[1-3689]|1[1-79]|[379]|4[13]|5[1-5])|(?:4[35]|59|85)[1-9]\",\"(?:3(?:[157]\\\\d|35|49|9[1-68])|4(?:[17]\\\\d|2[179]|[35][1-9]|6[47-9]|8[23])|5(?:[1357]\\\\d|2[37]|4[36]|6[1-46]|80|9[1-9])|6(?:3[1-5]|6[0238]|9[12])|7(?:01|[1579]\\\\d|2[248]|3[014-9]|4[3-6]|6[023689])|8(?:1[236-8]|2[5-7]|[37]\\\\d|5[1-9]|8[36-8]|9[1-8])|9(?:0[1-3689]|1[1-79]|[379]\\\\d|4[13]|5[1-5]))[19]\",\"85[23](?:10|95)|(?:3(?:[157]\\\\d|35|49|9[1-68])|4(?:[17]\\\\d|2[179]|[35][1-9]|6[47-9]|8[23])|5(?:[1357]\\\\d|2[37]|4[36]|6[1-46]|80|9[1-9])|6(?:3[1-5]|6[0238]|9[12])|7(?:01|[1579]\\\\d|2[248]|3[014-9]|4[3-6]|6[023689])|8(?:1[236-8]|2[5-7]|[37]\\\\d|5[14-9]|8[36-8]|9[1-8])|9(?:0[1-3689]|1[1-79]|[379]\\\\d|4[13]|5[1-5]))(?:10|9[56])\",\"85[23](?:100|95)|(?:3(?:[157]\\\\d|35|49|9[1-68])|4(?:[17]\\\\d|2[179]|[35][1-9]|6[47-9]|8[23])|5(?:[1357]\\\\d|2[37]|4[36]|6[1-46]|80|9[1-9])|6(?:3[1-5]|6[0238]|9[12])|7(?:01|[1579]\\\\d|2[248]|3[014-9]|4[3-6]|6[023689])|8(?:1[236-8]|2[5-7]|[37]\\\\d|5[14-9]|8[36-8]|9[1-8])|9(?:0[1-3689]|1[1-79]|[379]\\\\d|4[13]|5[1-5]))(?:100|9[56])\"],\"0$1\"],[\"(\\\\d{3})(\\\\d{3})(\\\\d{4})\",\"$1 $2 $3\",[\"(?:4|80)0\"]],[\"(\\\\d{2})(\\\\d{4})(\\\\d{4})\",\"$1 $2 $3\",[\"10|2(?:[02-57-9]|1[1-9])\",\"10|2(?:[02-57-9]|1[1-9])\",\"10[0-79]|2(?:[02-57-9]|1[1-79])|(?:10|21)8(?:0[1-9]|[1-9])\"],\"0$1\",1],[\"(\\\\d{3})(\\\\d{3})(\\\\d{4})\",\"$1 $2 $3\",[\"3(?:[3-59]|7[02-68])|4(?:[26-8]|3[3-9]|5[2-9])|5(?:3[03-9]|[468]|7[028]|9[2-46-9])|6|7(?:[0-247]|3[04-9]|5[0-4689]|6[2368])|8(?:[1-358]|9[1-7])|9(?:[013479]|5[1-5])|(?:[34]1|55|79|87)[02-9]\"],\"0$1\",1],[\"(\\\\d{3})(\\\\d{7,8})\",\"$1 $2\",[\"9\"]],[\"(\\\\d{4})(\\\\d{3})(\\\\d{4})\",\"$1 $2 $3\",[\"80\"],\"0$1\",1],[\"(\\\\d{3})(\\\\d{4})(\\\\d{4})\",\"$1 $2 $3\",[\"[3-578]\"],\"0$1\",1],[\"(\\\\d{3})(\\\\d{4})(\\\\d{4})\",\"$1 $2 $3\",[\"1[3-9]\"]],[\"(\\\\d{2})(\\\\d{3})(\\\\d{3})(\\\\d{4})\",\"$1 $2 $3 $4\",[\"[12]\"],\"0$1\",1]],\"0\",0,\"(1(?:[12]\\\\d|79)\\\\d\\\\d)|0\",0,0,0,0,\"00\"],\"CO\":[\"57\",\"00(?:4(?:[14]4|56)|[579])\",\"(?:46|60\\\\d\\\\d)\\\\d{6}|(?:1\\\\d|[39])\\\\d{9}\",[8,10,11],[[\"(\\\\d{4})(\\\\d{4})\",\"$1 $2\",[\"46\"]],[\"(\\\\d{3})(\\\\d{7})\",\"$1 $2\",[\"6|90\"],\"($1)\"],[\"(\\\\d{3})(\\\\d{7})\",\"$1 $2\",[\"3[0-357]|9[14]\"]],[\"(\\\\d)(\\\\d{3})(\\\\d{7})\",\"$1-$2-$3\",[\"1\"],\"0$1\",0,\"$1 $2 $3\"]],\"0\",0,\"0([3579]|4(?:[14]4|56))?\"],\"CR\":[\"506\",\"00\",\"(?:8\\\\d|90)\\\\d{8}|(?:[24-8]\\\\d{3}|3005)\\\\d{4}\",[8,10],[[\"(\\\\d{4})(\\\\d{4})\",\"$1 $2\",[\"[2-7]|8[3-9]\"]],[\"(\\\\d{3})(\\\\d{3})(\\\\d{4})\",\"$1-$2-$3\",[\"[89]\"]]],0,0,\"(19(?:0[0-2468]|1[09]|20|66|77|99))\"],\"CU\":[\"53\",\"119\",\"(?:[2-7]|8\\\\d\\\\d)\\\\d{7}|[2-47]\\\\d{6}|[34]\\\\d{5}\",[6,7,8,10],[[\"(\\\\d{2})(\\\\d{4,6})\",\"$1 $2\",[\"2[1-4]|[34]\"],\"(0$1)\"],[\"(\\\\d)(\\\\d{6,7})\",\"$1 $2\",[\"7\"],\"(0$1)\"],[\"(\\\\d)(\\\\d{7})\",\"$1 $2\",[\"[56]\"],\"0$1\"],[\"(\\\\d{3})(\\\\d{7})\",\"$1 $2\",[\"8\"],\"0$1\"]],\"0\"],\"CV\":[\"238\",\"0\",\"(?:[2-59]\\\\d\\\\d|800)\\\\d{4}\",[7],[[\"(\\\\d{3})(\\\\d{2})(\\\\d{2})\",\"$1 $2 $3\",[\"[2-589]\"]]]],\"CW\":[\"599\",\"00\",\"(?:[34]1|60|(?:7|9\\\\d)\\\\d)\\\\d{5}\",[7,8],[[\"(\\\\d{3})(\\\\d{4})\",\"$1 $2\",[\"[3467]\"]],[\"(\\\\d)(\\\\d{3})(\\\\d{4})\",\"$1 $2 $3\",[\"9[4-8]\"]]],0,0,0,0,0,\"[69]\"],\"CX\":[\"61\",\"001[14-689]|14(?:1[14]|34|4[17]|[56]6|7[47]|88)0011\",\"1(?:[0-79]\\\\d{8}(?:\\\\d{2})?|8[0-24-9]\\\\d{7})|[148]\\\\d{8}|1\\\\d{5,7}\",[6,7,8,9,10,12],0,\"0\",0,\"([59]\\\\d{7})$|0\",\"8$1\",0,0,[[\"8(?:51(?:0(?:01|30|59|88)|1(?:17|46|75)|2(?:22|35))|91(?:00[6-9]|1(?:[28]1|49|78)|2(?:09|63)|3(?:12|26|75)|4(?:56|97)|64\\\\d|7(?:0[01]|1[0-2])|958))\\\\d{3}\",[9]],[\"4(?:79[01]|83[0-36-9]|95[0-3])\\\\d{5}|4(?:[0-36]\\\\d|4[047-9]|[58][0-24-9]|7[02-8]|9[0-47-9])\\\\d{6}\",[9]],[\"180(?:0\\\\d{3}|2)\\\\d{3}\",[7,10]],[\"190[0-26]\\\\d{6}\",[10]],0,0,0,0,[\"14(?:5(?:1[0458]|[23][458])|71\\\\d)\\\\d{4}\",[9]],[\"13(?:00\\\\d{6}(?:\\\\d{2})?|45[0-4]\\\\d{3})|13\\\\d{4}\",[6,8,10,12]]],\"0011\"],\"CY\":[\"357\",\"00\",\"(?:[279]\\\\d|[58]0)\\\\d{6}\",[8],[[\"(\\\\d{2})(\\\\d{6})\",\"$1 $2\",[\"[257-9]\"]]]],\"CZ\":[\"420\",\"00\",\"(?:[2-578]\\\\d|60)\\\\d{7}|9\\\\d{8,11}\",[9,10,11,12],[[\"(\\\\d{3})(\\\\d{3})(\\\\d{3})\",\"$1 $2 $3\",[\"[2-8]|9[015-7]\"]],[\"(\\\\d{2})(\\\\d{3})(\\\\d{3})(\\\\d{2})\",\"$1 $2 $3 $4\",[\"96\"]],[\"(\\\\d{2})(\\\\d{3})(\\\\d{3})(\\\\d{3})\",\"$1 $2 $3 $4\",[\"9\"]],[\"(\\\\d{3})(\\\\d{3})(\\\\d{3})(\\\\d{3})\",\"$1 $2 $3 $4\",[\"9\"]]]],\"DE\":[\"49\",\"00\",\"[2579]\\\\d{5,14}|49(?:[34]0|69|8\\\\d)\\\\d\\\\d?|49(?:37|49|60|7[089]|9\\\\d)\\\\d{1,3}|49(?:2[024-9]|3[2-689]|7[1-7])\\\\d{1,8}|(?:1|[368]\\\\d|4[0-8])\\\\d{3,13}|49(?:[015]\\\\d|2[13]|31|[46][1-8])\\\\d{1,9}\",[4,5,6,7,8,9,10,11,12,13,14,15],[[\"(\\\\d{2})(\\\\d{3,13})\",\"$1 $2\",[\"3[02]|40|[68]9\"],\"0$1\"],[\"(\\\\d{3})(\\\\d{3,12})\",\"$1 $2\",[\"2(?:0[1-389]|1[124]|2[18]|3[14])|3(?:[35-9][15]|4[015])|906|(?:2[4-9]|4[2-9]|[579][1-9]|[68][1-8])1\",\"2(?:0[1-389]|12[0-8])|3(?:[35-9][15]|4[015])|906|2(?:[13][14]|2[18])|(?:2[4-9]|4[2-9]|[579][1-9]|[68][1-8])1\"],\"0$1\"],[\"(\\\\d{4})(\\\\d{2,11})\",\"$1 $2\",[\"[24-6]|3(?:[3569][02-46-9]|4[2-4679]|7[2-467]|8[2-46-8])|70[2-8]|8(?:0[2-9]|[1-8])|90[7-9]|[79][1-9]\",\"[24-6]|3(?:3(?:0[1-467]|2[127-9]|3[124578]|7[1257-9]|8[1256]|9[145])|4(?:2[135]|4[13578]|9[1346])|5(?:0[14]|2[1-3589]|6[1-4]|7[13468]|8[13568])|6(?:2[1-489]|3[124-6]|6[13]|7[12579]|8[1-356]|9[135])|7(?:2[1-7]|4[145]|6[1-5]|7[1-4])|8(?:21|3[1468]|6|7[1467]|8[136])|9(?:0[12479]|2[1358]|4[134679]|6[1-9]|7[136]|8[147]|9[1468]))|70[2-8]|8(?:0[2-9]|[1-8])|90[7-9]|[79][1-9]|3[68]4[1347]|3(?:47|60)[1356]|3(?:3[46]|46|5[49])[1246]|3[4579]3[1357]\"],\"0$1\"],[\"(\\\\d{3})(\\\\d{4})\",\"$1 $2\",[\"138\"],\"0$1\"],[\"(\\\\d{5})(\\\\d{2,10})\",\"$1 $2\",[\"3\"],\"0$1\"],[\"(\\\\d{3})(\\\\d{5,11})\",\"$1 $2\",[\"181\"],\"0$1\"],[\"(\\\\d{3})(\\\\d)(\\\\d{4,10})\",\"$1 $2 $3\",[\"1(?:3|80)|9\"],\"0$1\"],[\"(\\\\d{3})(\\\\d{7,8})\",\"$1 $2\",[\"1[67]\"],\"0$1\"],[\"(\\\\d{3})(\\\\d{7,12})\",\"$1 $2\",[\"8\"],\"0$1\"],[\"(\\\\d{5})(\\\\d{6})\",\"$1 $2\",[\"185\",\"1850\",\"18500\"],\"0$1\"],[\"(\\\\d{3})(\\\\d{4})(\\\\d{4})\",\"$1 $2 $3\",[\"7\"],\"0$1\"],[\"(\\\\d{4})(\\\\d{7})\",\"$1 $2\",[\"18[68]\"],\"0$1\"],[\"(\\\\d{4})(\\\\d{7})\",\"$1 $2\",[\"15[1279]\"],\"0$1\"],[\"(\\\\d{5})(\\\\d{6})\",\"$1 $2\",[\"15[03568]\",\"15(?:[0568]|3[13])\"],\"0$1\"],[\"(\\\\d{3})(\\\\d{8})\",\"$1 $2\",[\"18\"],\"0$1\"],[\"(\\\\d{3})(\\\\d{2})(\\\\d{7,8})\",\"$1 $2 $3\",[\"1(?:6[023]|7)\"],\"0$1\"],[\"(\\\\d{4})(\\\\d{2})(\\\\d{7})\",\"$1 $2 $3\",[\"15[279]\"],\"0$1\"],[\"(\\\\d{3})(\\\\d{2})(\\\\d{8})\",\"$1 $2 $3\",[\"15\"],\"0$1\"]],\"0\"],\"DJ\":[\"253\",\"00\",\"(?:2\\\\d|77)\\\\d{6}\",[8],[[\"(\\\\d{2})(\\\\d{2})(\\\\d{2})(\\\\d{2})\",\"$1 $2 $3 $4\",[\"[27]\"]]]],\"DK\":[\"45\",\"00\",\"[2-9]\\\\d{7}\",[8],[[\"(\\\\d{2})(\\\\d{2})(\\\\d{2})(\\\\d{2})\",\"$1 $2 $3 $4\",[\"[2-9]\"]]]],\"DM\":[\"1\",\"011\",\"(?:[58]\\\\d\\\\d|767|900)\\\\d{7}\",[10],0,\"1\",0,\"([2-7]\\\\d{6})$|1\",\"767$1\",0,\"767\"],\"DO\":[\"1\",\"011\",\"(?:[58]\\\\d\\\\d|900)\\\\d{7}\",[10],0,\"1\",0,0,0,0,\"8001|8[024]9\"],\"DZ\":[\"213\",\"00\",\"(?:[1-4]|[5-79]\\\\d|80)\\\\d{7}\",[8,9],[[\"(\\\\d{2})(\\\\d{2})(\\\\d{2})(\\\\d{2})\",\"$1 $2 $3 $4\",[\"[1-4]\"],\"0$1\"],[\"(\\\\d{2})(\\\\d{3})(\\\\d{2})(\\\\d{2})\",\"$1 $2 $3 $4\",[\"9\"],\"0$1\"],[\"(\\\\d{3})(\\\\d{2})(\\\\d{2})(\\\\d{2})\",\"$1 $2 $3 $4\",[\"[5-8]\"],\"0$1\"]],\"0\"],\"EC\":[\"593\",\"00\",\"1\\\\d{9,10}|(?:[2-7]|9\\\\d)\\\\d{7}\",[8,9,10,11],[[\"(\\\\d)(\\\\d{3})(\\\\d{4})\",\"$1 $2-$3\",[\"[2-7]\"],\"(0$1)\",0,\"$1-$2-$3\"],[\"(\\\\d{2})(\\\\d{3})(\\\\d{4})\",\"$1 $2 $3\",[\"9\"],\"0$1\"],[\"(\\\\d{4})(\\\\d{3})(\\\\d{3,4})\",\"$1 $2 $3\",[\"1\"]]],\"0\"],\"EE\":[\"372\",\"00\",\"8\\\\d{9}|[4578]\\\\d{7}|(?:[3-8]\\\\d|90)\\\\d{5}\",[7,8,10],[[\"(\\\\d{3})(\\\\d{4})\",\"$1 $2\",[\"[369]|4[3-8]|5(?:[0-2]|5[0-478]|6[45])|7[1-9]|88\",\"[369]|4[3-8]|5(?:[02]|1(?:[0-8]|95)|5[0-478]|6(?:4[0-4]|5[1-589]))|7[1-9]|88\"]],[\"(\\\\d{4})(\\\\d{3,4})\",\"$1 $2\",[\"[45]|8(?:00|[1-49])\",\"[45]|8(?:00[1-9]|[1-49])\"]],[\"(\\\\d{2})(\\\\d{2})(\\\\d{4})\",\"$1 $2 $3\",[\"7\"]],[\"(\\\\d{4})(\\\\d{3})(\\\\d{3})\",\"$1 $2 $3\",[\"8\"]]]],\"EG\":[\"20\",\"00\",\"[189]\\\\d{8,9}|[24-6]\\\\d{8}|[135]\\\\d{7}\",[8,9,10],[[\"(\\\\d)(\\\\d{7,8})\",\"$1 $2\",[\"[23]\"],\"0$1\"],[\"(\\\\d{2})(\\\\d{6,7})\",\"$1 $2\",[\"1[35]|[4-6]|8[2468]|9[235-7]\"],\"0$1\"],[\"(\\\\d{3})(\\\\d{3})(\\\\d{4})\",\"$1 $2 $3\",[\"[89]\"],\"0$1\"],[\"(\\\\d{2})(\\\\d{8})\",\"$1 $2\",[\"1\"],\"0$1\"]],\"0\"],\"EH\":[\"212\",\"00\",\"[5-8]\\\\d{8}\",[9],0,\"0\",0,0,0,0,0,[[\"528[89]\\\\d{5}\"],[\"(?:6(?:[0-79]\\\\d|8[0-247-9])|7(?:[016-8]\\\\d|2[0-8]|5[0-5]))\\\\d{6}\"],[\"80[0-7]\\\\d{6}\"],[\"89\\\\d{7}\"],0,0,0,0,[\"(?:592(?:4[0-2]|93)|80[89]\\\\d\\\\d)\\\\d{4}\"]]],\"ER\":[\"291\",\"00\",\"[178]\\\\d{6}\",[7],[[\"(\\\\d)(\\\\d{3})(\\\\d{3})\",\"$1 $2 $3\",[\"[178]\"],\"0$1\"]],\"0\"],\"ES\":[\"34\",\"00\",\"[5-9]\\\\d{8}\",[9],[[\"(\\\\d{3})(\\\\d{3})(\\\\d{3})\",\"$1 $2 $3\",[\"[89]00\"]],[\"(\\\\d{3})(\\\\d{2})(\\\\d{2})(\\\\d{2})\",\"$1 $2 $3 $4\",[\"[5-9]\"]]]],\"ET\":[\"251\",\"00\",\"(?:11|[2-579]\\\\d)\\\\d{7}\",[9],[[\"(\\\\d{2})(\\\\d{3})(\\\\d{4})\",\"$1 $2 $3\",[\"[1-579]\"],\"0$1\"]],\"0\"],\"FI\":[\"358\",\"00|99(?:[01469]|5(?:[14]1|3[23]|5[59]|77|88|9[09]))\",\"[1-35689]\\\\d{4}|7\\\\d{10,11}|(?:[124-7]\\\\d|3[0-46-9])\\\\d{8}|[1-9]\\\\d{5,8}\",[5,6,7,8,9,10,11,12],[[\"(\\\\d{5})\",\"$1\",[\"20[2-59]\"],\"0$1\"],[\"(\\\\d{3})(\\\\d{3,7})\",\"$1 $2\",[\"(?:[1-3]0|[68])0|70[07-9]\"],\"0$1\"],[\"(\\\\d{2})(\\\\d{4,8})\",\"$1 $2\",[\"[14]|2[09]|50|7[135]\"],\"0$1\"],[\"(\\\\d{2})(\\\\d{6,10})\",\"$1 $2\",[\"7\"],\"0$1\"],[\"(\\\\d)(\\\\d{4,9})\",\"$1 $2\",[\"(?:19|[2568])[1-8]|3(?:0[1-9]|[1-9])|9\"],\"0$1\"]],\"0\",0,0,0,0,\"1[03-79]|[2-9]\",0,\"00\"],\"FJ\":[\"679\",\"0(?:0|52)\",\"45\\\\d{5}|(?:0800\\\\d|[235-9])\\\\d{6}\",[7,11],[[\"(\\\\d{3})(\\\\d{4})\",\"$1 $2\",[\"[235-9]|45\"]],[\"(\\\\d{4})(\\\\d{3})(\\\\d{4})\",\"$1 $2 $3\",[\"0\"]]],0,0,0,0,0,0,0,\"00\"],\"FK\":[\"500\",\"00\",\"[2-7]\\\\d{4}\",[5]],\"FM\":[\"691\",\"00\",\"(?:[39]\\\\d\\\\d|820)\\\\d{4}\",[7],[[\"(\\\\d{3})(\\\\d{4})\",\"$1 $2\",[\"[389]\"]]]],\"FO\":[\"298\",\"00\",\"[2-9]\\\\d{5}\",[6],[[\"(\\\\d{6})\",\"$1\",[\"[2-9]\"]]],0,0,\"(10(?:01|[12]0|88))\"],\"FR\":[\"33\",\"00\",\"[1-9]\\\\d{8}\",[9],[[\"(\\\\d{3})(\\\\d{2})(\\\\d{2})(\\\\d{2})\",\"$1 $2 $3 $4\",[\"8\"],\"0 $1\"],[\"(\\\\d)(\\\\d{2})(\\\\d{2})(\\\\d{2})(\\\\d{2})\",\"$1 $2 $3 $4 $5\",[\"[1-79]\"],\"0$1\"]],\"0\"],\"GA\":[\"241\",\"00\",\"(?:[067]\\\\d|11)\\\\d{6}|[2-7]\\\\d{6}\",[7,8],[[\"(\\\\d)(\\\\d{2})(\\\\d{2})(\\\\d{2})\",\"$1 $2 $3 $4\",[\"[2-7]\"],\"0$1\"],[\"(\\\\d{2})(\\\\d{2})(\\\\d{2})(\\\\d{2})\",\"$1 $2 $3 $4\",[\"0\"]],[\"(\\\\d{2})(\\\\d{2})(\\\\d{2})(\\\\d{2})\",\"$1 $2 $3 $4\",[\"11|[67]\"],\"0$1\"]],0,0,\"0(11\\\\d{6}|60\\\\d{6}|61\\\\d{6}|6[256]\\\\d{6}|7[467]\\\\d{6})\",\"$1\"],\"GB\":[\"44\",\"00\",\"[1-357-9]\\\\d{9}|[18]\\\\d{8}|8\\\\d{6}\",[7,9,10],[[\"(\\\\d{3})(\\\\d{4})\",\"$1 $2\",[\"800\",\"8001\",\"80011\",\"800111\",\"8001111\"],\"0$1\"],[\"(\\\\d{3})(\\\\d{2})(\\\\d{2})\",\"$1 $2 $3\",[\"845\",\"8454\",\"84546\",\"845464\"],\"0$1\"],[\"(\\\\d{3})(\\\\d{6})\",\"$1 $2\",[\"800\"],\"0$1\"],[\"(\\\\d{5})(\\\\d{4,5})\",\"$1 $2\",[\"1(?:38|5[23]|69|76|94)\",\"1(?:(?:38|69)7|5(?:24|39)|768|946)\",\"1(?:3873|5(?:242|39[4-6])|(?:697|768)[347]|9467)\"],\"0$1\"],[\"(\\\\d{4})(\\\\d{5,6})\",\"$1 $2\",[\"1(?:[2-69][02-9]|[78])\"],\"0$1\"],[\"(\\\\d{2})(\\\\d{4})(\\\\d{4})\",\"$1 $2 $3\",[\"[25]|7(?:0|6[02-9])\",\"[25]|7(?:0|6(?:[03-9]|2[356]))\"],\"0$1\"],[\"(\\\\d{4})(\\\\d{6})\",\"$1 $2\",[\"7\"],\"0$1\"],[\"(\\\\d{3})(\\\\d{3})(\\\\d{4})\",\"$1 $2 $3\",[\"[1389]\"],\"0$1\"]],\"0\",0,\"0|180020\",0,0,0,[[\"(?:1(?:1(?:3(?:[0-58]\\\\d\\\\d|73[0-5])|4(?:(?:[0-5]\\\\d|70)\\\\d|69[7-9])|(?:(?:5[0-26-9]|[78][0-49])\\\\d|6(?:[0-4]\\\\d|5[01]))\\\\d)|(?:2(?:(?:0[024-9]|2[3-9]|3[3-79]|4[1-689]|[58][02-9]|6[0-47-9]|7[013-9]|9\\\\d)\\\\d|1(?:[0-7]\\\\d|8[0-3]))|(?:3(?:0\\\\d|1[0-8]|[25][02-9]|3[02-579]|[468][0-46-9]|7[1-35-79]|9[2-578])|4(?:0[03-9]|[137]\\\\d|[28][02-57-9]|4[02-69]|5[0-8]|[69][0-79])|5(?:0[1-35-9]|[16]\\\\d|2[024-9]|3[015689]|4[02-9]|5[03-9]|7[0-35-9]|8[0-468]|9[0-57-9])|6(?:0[034689]|1\\\\d|2[0-35689]|[38][013-9]|4[1-467]|5[0-69]|6[13-9]|7[0-8]|9[0-24578])|7(?:0[0246-9]|2\\\\d|3[0236-8]|4[03-9]|5[0-46-9]|6[013-9]|7[0-35-9]|8[024-9]|9[02-9])|8(?:0[35-9]|2[1-57-9]|3[02-578]|4[0-578]|5[124-9]|6[2-69]|7\\\\d|8[02-9]|9[02569])|9(?:0[02-589]|[18]\\\\d|2[02-689]|3[1-57-9]|4[2-9]|5[0-579]|6[2-47-9]|7[0-24578]|9[2-57]))\\\\d)\\\\d)|2(?:0[013478]|3[0189]|4[017]|8[0-46-9]|9[0-2])\\\\d{3})\\\\d{4}|1(?:2(?:0(?:46[1-4]|87[2-9])|545[1-79]|76(?:2\\\\d|3[1-8]|6[1-6])|9(?:7(?:2[0-4]|3[2-5])|8(?:2[2-8]|7[0-47-9]|8[3-5])))|3(?:6(?:38[2-5]|47[23])|8(?:47[04-9]|64[0157-9]))|4(?:044[1-7]|20(?:2[23]|8\\\\d)|6(?:0(?:30|5[2-57]|6[1-8]|7[2-8])|140)|8(?:052|87[1-3]))|5(?:2(?:4(?:3[2-79]|6\\\\d)|76\\\\d)|6(?:26[06-9]|686))|6(?:06(?:4\\\\d|7[4-79])|295[5-7]|35[34]\\\\d|47(?:24|61)|59(?:5[08]|6[67]|74)|9(?:55[0-4]|77[23]))|7(?:26(?:6[13-9]|7[0-7])|(?:442|688)\\\\d|50(?:2[0-3]|[3-68]2|76))|8(?:27[56]\\\\d|37(?:5[2-5]|8[239])|843[2-58])|9(?:0(?:0(?:6[1-8]|85)|52\\\\d)|3583|4(?:66[1-8]|9(?:2[01]|81))|63(?:23|3[1-4])|9561))\\\\d{3}\",[9,10]],[\"7(?:457[0-57-9]|700[01]|911[028])\\\\d{5}|7(?:[1-3]\\\\d\\\\d|4(?:[0-46-9]\\\\d|5[0-689])|5(?:0[0-8]|[13-9]\\\\d|2[0-35-9])|7(?:0[1-9]|[1-7]\\\\d|8[02-9]|9[0-689])|8(?:[014-9]\\\\d|[23][0-8])|9(?:[024-9]\\\\d|1[02-9]|3[0-689]))\\\\d{6}\",[10]],[\"80[08]\\\\d{7}|800\\\\d{6}|8001111\"],[\"(?:8(?:4[2-5]|7[0-3])|9(?:[01]\\\\d|8[2-49]))\\\\d{7}|845464\\\\d\",[7,10]],[\"70\\\\d{8}\",[10]],0,[\"(?:3[0347]|55)\\\\d{8}\",[10]],[\"76(?:464|652)\\\\d{5}|76(?:0[0-28]|2[356]|34|4[01347]|5[49]|6[0-369]|77|8[14]|9[139])\\\\d{6}\",[10]],[\"56\\\\d{8}\",[10]]],0,\" x\"],\"GD\":[\"1\",\"011\",\"(?:473|[58]\\\\d\\\\d|900)\\\\d{7}\",[10],0,\"1\",0,\"([2-9]\\\\d{6})$|1\",\"473$1\",0,\"473\"],\"GE\":[\"995\",\"00\",\"(?:[3-57]\\\\d\\\\d|800)\\\\d{6}\",[9],[[\"(\\\\d{3})(\\\\d{3})(\\\\d{3})\",\"$1 $2 $3\",[\"70\"],\"0$1\"],[\"(\\\\d{2})(\\\\d{3})(\\\\d{2})(\\\\d{2})\",\"$1 $2 $3 $4\",[\"32\"],\"0$1\"],[\"(\\\\d{3})(\\\\d{2})(\\\\d{2})(\\\\d{2})\",\"$1 $2 $3 $4\",[\"[57]\"]],[\"(\\\\d{3})(\\\\d{2})(\\\\d{2})(\\\\d{2})\",\"$1 $2 $3 $4\",[\"[348]\"],\"0$1\"]],\"0\"],\"GF\":[\"594\",\"00\",\"(?:[56]94\\\\d|7093)\\\\d{5}|(?:80|9\\\\d)\\\\d{7}\",[9],[[\"(\\\\d{3})(\\\\d{2})(\\\\d{2})(\\\\d{2})\",\"$1 $2 $3 $4\",[\"[5-7]|9[47]\"],\"0$1\"],[\"(\\\\d{3})(\\\\d{2})(\\\\d{2})(\\\\d{2})\",\"$1 $2 $3 $4\",[\"[89]\"],\"0$1\"]],\"0\"],\"GG\":[\"44\",\"00\",\"(?:1481|[357-9]\\\\d{3})\\\\d{6}|8\\\\d{6}(?:\\\\d{2})?\",[7,9,10],0,\"0\",0,\"([25-9]\\\\d{5})$|0|180020\",\"1481$1\",0,0,[[\"1481[25-9]\\\\d{5}\",[10]],[\"7(?:(?:781|839)\\\\d|911[17])\\\\d{5}\",[10]],[\"80[08]\\\\d{7}|800\\\\d{6}|8001111\"],[\"(?:8(?:4[2-5]|7[0-3])|9(?:[01]\\\\d|8[0-3]))\\\\d{7}|845464\\\\d\",[7,10]],[\"70\\\\d{8}\",[10]],0,[\"(?:3[0347]|55)\\\\d{8}\",[10]],[\"76(?:464|652)\\\\d{5}|76(?:0[0-28]|2[356]|34|4[01347]|5[49]|6[0-369]|77|8[14]|9[139])\\\\d{6}\",[10]],[\"56\\\\d{8}\",[10]]]],\"GH\":[\"233\",\"00\",\"(?:[235]\\\\d{3}|800)\\\\d{5}\",[8,9],[[\"(\\\\d{3})(\\\\d{5})\",\"$1 $2\",[\"8\"],\"0$1\"],[\"(\\\\d{2})(\\\\d{3})(\\\\d{4})\",\"$1 $2 $3\",[\"[235]\"],\"0$1\"]],\"0\"],\"GI\":[\"350\",\"00\",\"(?:[25]\\\\d|60)\\\\d{6}\",[8],[[\"(\\\\d{3})(\\\\d{5})\",\"$1 $2\",[\"2\"]]]],\"GL\":[\"299\",\"00\",\"(?:19|[2-689]\\\\d|70)\\\\d{4}\",[6],[[\"(\\\\d{2})(\\\\d{2})(\\\\d{2})\",\"$1 $2 $3\",[\"19|[2-9]\"]]]],\"GM\":[\"220\",\"00\",\"[2-9]\\\\d{6}\",[7],[[\"(\\\\d{3})(\\\\d{4})\",\"$1 $2\",[\"[2-9]\"]]]],\"GN\":[\"224\",\"00\",\"722\\\\d{6}|(?:3|6\\\\d)\\\\d{7}\",[8,9],[[\"(\\\\d{2})(\\\\d{2})(\\\\d{2})(\\\\d{2})\",\"$1 $2 $3 $4\",[\"3\"]],[\"(\\\\d{3})(\\\\d{2})(\\\\d{2})(\\\\d{2})\",\"$1 $2 $3 $4\",[\"[67]\"]]]],\"GP\":[\"590\",\"00\",\"(?:590\\\\d|7090)\\\\d{5}|(?:69|80|9\\\\d)\\\\d{7}\",[9],[[\"(\\\\d{3})(\\\\d{2})(\\\\d{2})(\\\\d{2})\",\"$1 $2 $3 $4\",[\"[5-79]\"],\"0$1\"],[\"(\\\\d{3})(\\\\d{2})(\\\\d{2})(\\\\d{2})\",\"$1 $2 $3 $4\",[\"8\"],\"0$1\"]],\"0\",0,0,0,0,0,[[\"590(?:0[1-68]|[14][0-24-9]|2[0-68]|3[1-9]|5[3-579]|[68][0-689]|7[08]|9\\\\d)\\\\d{4}\"],[\"(?:69(?:0\\\\d\\\\d|1(?:2[2-9]|3[0-5])|4(?:0[89]|1[2-6]|9\\\\d)|6(?:1[016-9]|5[0-4]|[67]\\\\d))|7090[0-4])\\\\d{4}\"],[\"80[0-5]\\\\d{6}\"],0,0,0,0,0,[\"9(?:(?:39[5-7]|76[018])\\\\d|475[0-6])\\\\d{4}\"]]],\"GQ\":[\"240\",\"00\",\"222\\\\d{6}|(?:3\\\\d|55|[89]0)\\\\d{7}\",[9],[[\"(\\\\d{3})(\\\\d{3})(\\\\d{3})\",\"$1 $2 $3\",[\"[235]\"]],[\"(\\\\d{3})(\\\\d{6})\",\"$1 $2\",[\"[89]\"]]]],\"GR\":[\"30\",\"00\",\"5005000\\\\d{3}|8\\\\d{9,11}|(?:[269]\\\\d|70)\\\\d{8}\",[10,11,12],[[\"(\\\\d{2})(\\\\d{4})(\\\\d{4})\",\"$1 $2 $3\",[\"21|7\"]],[\"(\\\\d{4})(\\\\d{6})\",\"$1 $2\",[\"2(?:2|3[2-57-9]|4[2-469]|5[2-59]|6[2-9]|7[2-69]|8[2-49])|5\"]],[\"(\\\\d{3})(\\\\d{3})(\\\\d{4})\",\"$1 $2 $3\",[\"[2689]\"]],[\"(\\\\d{3})(\\\\d{3,4})(\\\\d{5})\",\"$1 $2 $3\",[\"8\"]]]],\"GT\":[\"502\",\"00\",\"80\\\\d{6}|(?:1\\\\d{3}|[2-7])\\\\d{7}\",[8,11],[[\"(\\\\d{4})(\\\\d{4})\",\"$1 $2\",[\"[2-8]\"]],[\"(\\\\d{4})(\\\\d{3})(\\\\d{4})\",\"$1 $2 $3\",[\"1\"]]]],\"GU\":[\"1\",\"011\",\"(?:[58]\\\\d\\\\d|671|900)\\\\d{7}\",[10],0,\"1\",0,\"([2-9]\\\\d{6})$|1\",\"671$1\",0,\"671\"],\"GW\":[\"245\",\"00\",\"[49]\\\\d{8}|4\\\\d{6}\",[7,9],[[\"(\\\\d{3})(\\\\d{4})\",\"$1 $2\",[\"40\"]],[\"(\\\\d{3})(\\\\d{3})(\\\\d{3})\",\"$1 $2 $3\",[\"[49]\"]]]],\"GY\":[\"592\",\"001\",\"(?:[2-8]\\\\d{3}|9008)\\\\d{3}\",[7],[[\"(\\\\d{3})(\\\\d{4})\",\"$1 $2\",[\"[2-9]\"]]]],\"HK\":[\"852\",\"00(?:30|5[09]|[126-9]?)\",\"8[0-46-9]\\\\d{6,7}|9\\\\d{4,7}|(?:[2-7]|9\\\\d{3})\\\\d{7}\",[5,6,7,8,9,11],[[\"(\\\\d{3})(\\\\d{2,5})\",\"$1 $2\",[\"900\",\"9003\"]],[\"(\\\\d{4})(\\\\d{4})\",\"$1 $2\",[\"[2-7]|8[1-4]|9(?:0[1-9]|[1-8])\"]],[\"(\\\\d{3})(\\\\d{3})(\\\\d{3})\",\"$1 $2 $3\",[\"8\"]],[\"(\\\\d{3})(\\\\d{2})(\\\\d{3})(\\\\d{3})\",\"$1 $2 $3 $4\",[\"9\"]]],0,0,0,0,0,0,0,\"00\"],\"HN\":[\"504\",\"00\",\"8\\\\d{10}|[237-9]\\\\d{7}\",[8,11],[[\"(\\\\d{4})(\\\\d{4})\",\"$1-$2\",[\"[237-9]\"]]]],\"HR\":[\"385\",\"00\",\"[2-69]\\\\d{8}|80\\\\d{5,7}|[1-79]\\\\d{7}|6\\\\d{6}\",[7,8,9],[[\"(\\\\d{2})(\\\\d{2})(\\\\d{3})\",\"$1 $2 $3\",[\"6[01]\"],\"0$1\"],[\"(\\\\d{3})(\\\\d{2})(\\\\d{2,3})\",\"$1 $2 $3\",[\"8\"],\"0$1\"],[\"(\\\\d)(\\\\d{4})(\\\\d{3})\",\"$1 $2 $3\",[\"1\"],\"0$1\"],[\"(\\\\d{2})(\\\\d{3})(\\\\d{3,4})\",\"$1 $2 $3\",[\"6|7[245]\"],\"0$1\"],[\"(\\\\d{2})(\\\\d{3})(\\\\d{3,4})\",\"$1 $2 $3\",[\"9\"],\"0$1\"],[\"(\\\\d{2})(\\\\d{3})(\\\\d{3,4})\",\"$1 $2 $3\",[\"[2-57]\"],\"0$1\"],[\"(\\\\d{3})(\\\\d{3})(\\\\d{3})\",\"$1 $2 $3\",[\"8\"],\"0$1\"]],\"0\"],\"HT\":[\"509\",\"00\",\"[2-589]\\\\d{7}\",[8],[[\"(\\\\d{2})(\\\\d{2})(\\\\d{4})\",\"$1 $2 $3\",[\"[2-589]\"]]]],\"HU\":[\"36\",\"00\",\"[235-7]\\\\d{8}|[1-9]\\\\d{7}\",[8,9],[[\"(\\\\d)(\\\\d{3})(\\\\d{4})\",\"$1 $2 $3\",[\"1\"],\"(06 $1)\"],[\"(\\\\d{2})(\\\\d{3})(\\\\d{3})\",\"$1 $2 $3\",[\"[27][2-9]|3[2-7]|4[24-9]|5[2-79]|6|8[2-57-9]|9[2-69]\"],\"(06 $1)\"],[\"(\\\\d{2})(\\\\d{3})(\\\\d{3,4})\",\"$1 $2 $3\",[\"[2-9]\"],\"06 $1\"]],\"06\"],\"ID\":[\"62\",\"00[89]\",\"00[1-9]\\\\d{9,14}|(?:[1-36]|8\\\\d{5})\\\\d{6}|00\\\\d{9}|[1-9]\\\\d{8,10}|[2-9]\\\\d{7}\",[7,8,9,10,11,12,13,14,15,16,17],[[\"(\\\\d)(\\\\d{3})(\\\\d{3})\",\"$1 $2 $3\",[\"15\"]],[\"(\\\\d{2})(\\\\d{5,9})\",\"$1 $2\",[\"2[124]|[36]1\"],\"(0$1)\"],[\"(\\\\d{3})(\\\\d{5,7})\",\"$1 $2\",[\"800\"],\"0$1\"],[\"(\\\\d{3})(\\\\d{5,8})\",\"$1 $2\",[\"[2-79]\"],\"(0$1)\"],[\"(\\\\d{3})(\\\\d{3,4})(\\\\d{3})\",\"$1-$2-$3\",[\"8[1-35-9]\"],\"0$1\"],[\"(\\\\d{3})(\\\\d{6,8})\",\"$1 $2\",[\"1\"],\"0$1\"],[\"(\\\\d{3})(\\\\d{3})(\\\\d{4})\",\"$1 $2 $3\",[\"804\"],\"0$1\"],[\"(\\\\d{3})(\\\\d)(\\\\d{3})(\\\\d{3})\",\"$1 $2 $3 $4\",[\"80\"],\"0$1\"],[\"(\\\\d{3})(\\\\d{4})(\\\\d{4,5})\",\"$1-$2-$3\",[\"8\"],\"0$1\"]],\"0\"],\"IE\":[\"353\",\"00\",\"(?:1\\\\d|[2569])\\\\d{6,8}|4\\\\d{6,9}|7\\\\d{8}|8\\\\d{8,9}\",[7,8,9,10],[[\"(\\\\d{2})(\\\\d{5})\",\"$1 $2\",[\"2[24-9]|47|58|6[237-9]|9[35-9]\"],\"(0$1)\"],[\"(\\\\d{3})(\\\\d{5})\",\"$1 $2\",[\"[45]0\"],\"(0$1)\"],[\"(\\\\d)(\\\\d{3,4})(\\\\d{4})\",\"$1 $2 $3\",[\"1\"],\"(0$1)\"],[\"(\\\\d{2})(\\\\d{3})(\\\\d{3,4})\",\"$1 $2 $3\",[\"[2569]|4[1-69]|7[14]\"],\"(0$1)\"],[\"(\\\\d{3})(\\\\d{3})(\\\\d{3})\",\"$1 $2 $3\",[\"70\"],\"0$1\"],[\"(\\\\d{3})(\\\\d{3})(\\\\d{3})\",\"$1 $2 $3\",[\"81\"],\"(0$1)\"],[\"(\\\\d{2})(\\\\d{3})(\\\\d{4})\",\"$1 $2 $3\",[\"[78]\"],\"0$1\"],[\"(\\\\d{4})(\\\\d{3})(\\\\d{3})\",\"$1 $2 $3\",[\"1\"]],[\"(\\\\d{2})(\\\\d{4})(\\\\d{4})\",\"$1 $2 $3\",[\"4\"],\"(0$1)\"],[\"(\\\\d{2})(\\\\d)(\\\\d{3})(\\\\d{4})\",\"$1 $2 $3 $4\",[\"8\"],\"0$1\"]],\"0\"],\"IL\":[\"972\",\"0(?:0|1[2-9])\",\"1\\\\d{6}(?:\\\\d{3,5})?|[57]\\\\d{8}|[1-489]\\\\d{7}\",[7,8,9,10,11,12],[[\"(\\\\d{4})(\\\\d{3})\",\"$1-$2\",[\"125\"]],[\"(\\\\d{4})(\\\\d{2})(\\\\d{2})\",\"$1-$2-$3\",[\"121\"]],[\"(\\\\d)(\\\\d{3})(\\\\d{4})\",\"$1-$2-$3\",[\"[2-489]\"],\"0$1\"],[\"(\\\\d{2})(\\\\d{3})(\\\\d{4})\",\"$1-$2-$3\",[\"[57]\"],\"0$1\"],[\"(\\\\d{4})(\\\\d{3})(\\\\d{3})\",\"$1-$2-$3\",[\"12\"]],[\"(\\\\d{4})(\\\\d{6})\",\"$1-$2\",[\"159\"]],[\"(\\\\d)(\\\\d{3})(\\\\d{3})(\\\\d{3})\",\"$1-$2-$3-$4\",[\"1[7-9]\"]],[\"(\\\\d{3})(\\\\d{1,2})(\\\\d{3})(\\\\d{4})\",\"$1-$2 $3-$4\",[\"15\"]]],\"0\"],\"IM\":[\"44\",\"00\",\"1624\\\\d{6}|(?:[3578]\\\\d|90)\\\\d{8}\",[10],0,\"0\",0,\"([25-8]\\\\d{5})$|0|180020\",\"1624$1\",0,\"74576|(?:16|7[56])24\"],\"IN\":[\"91\",\"00\",\"(?:000800|[2-9]\\\\d\\\\d)\\\\d{7}|1\\\\d{7,12}\",[8,9,10,11,12,13],[[\"(\\\\d{8})\",\"$1\",[\"5(?:0|2[23]|3[03]|[67]1|88)\",\"5(?:0|2(?:21|3)|3(?:0|3[23])|616|717|888)\",\"5(?:0|2(?:21|3)|3(?:0|3[23])|616|717|8888)\"],0,1],[\"(\\\\d{4})(\\\\d{4,5})\",\"$1 $2\",[\"180\",\"1800\"],0,1],[\"(\\\\d{3})(\\\\d{3})(\\\\d{4})\",\"$1 $2 $3\",[\"140\"],0,1],[\"(\\\\d{2})(\\\\d{4})(\\\\d{4})\",\"$1 $2 $3\",[\"11|2[02]|33|4[04]|79[1-7]|80[2-46]\",\"11|2[02]|33|4[04]|79(?:[1-6]|7[19])|80(?:[2-4]|6[0-589])\",\"11|2[02]|33|4[04]|79(?:[124-6]|3(?:[02-9]|1[0-24-9])|7(?:1|9[1-6]))|80(?:[2-4]|6[0-589])\"],\"0$1\",1],[\"(\\\\d{3})(\\\\d{3})(\\\\d{4})\",\"$1 $2 $3\",[\"1(?:2[0-249]|3[0-25]|4[145]|[68]|7[1257])|2(?:1[257]|3[013]|4[01]|5[0137]|6[0158]|78|8[1568])|3(?:26|4[1-3]|5[34]|6[01489]|7[02-46]|8[159])|4(?:1[36]|2[1-47]|5[12]|6[0-26-9]|7[0-24-9]|8[013-57]|9[014-7])|5(?:1[025]|22|[36][25]|4[28]|5[12]|[78]1)|6(?:12|[2-4]1|5[17]|6[13]|80)|7(?:12|3[134]|4[47]|61|88)|8(?:16|2[014]|3[126]|6[136]|7[078]|8[34]|91)|(?:43|59|75)[15]|(?:1[59]|29|67|72)[14]\",\"1(?:2[0-24]|3[0-25]|4[145]|[59][14]|6[1-9]|7[1257]|8[1-57-9])|2(?:1[257]|3[013]|4[01]|5[0137]|6[058]|78|8[1568]|9[14])|3(?:26|4[1-3]|5[34]|6[01489]|7[02-46]|8[159])|4(?:1[36]|2[1-47]|3[15]|5[12]|6[0-26-9]|7[0-24-9]|8[013-57]|9[014-7])|5(?:1[025]|22|[36][25]|4[28]|[578]1|9[15])|674|7(?:(?:2[14]|3[34]|5[15])[2-6]|61[346]|88[0-8])|8(?:70[2-6]|84[235-7]|91[3-7])|(?:1(?:29|60|8[06])|261|552|6(?:12|[2-47]1|5[17]|6[13]|80)|7(?:12|31|4[47])|8(?:16|2[014]|3[126]|6[136]|7[78]|83))[2-7]\",\"1(?:2[0-24]|3[0-25]|4[145]|[59][14]|6[1-9]|7[1257]|8[1-57-9])|2(?:1[257]|3[013]|4[01]|5[0137]|6[058]|78|8[1568]|9[14])|3(?:26|4[1-3]|5[34]|6[01489]|7[02-46]|8[159])|4(?:1[36]|2[1-47]|3[15]|5[12]|6[0-26-9]|7[0-24-9]|8[013-57]|9[014-7])|5(?:1[025]|22|[36][25]|4[28]|[578]1|9[15])|6(?:12(?:[2-6]|7[0-8])|74[2-7])|7(?:(?:2[14]|5[15])[2-6]|3171|61[346]|88(?:[2-7]|82))|8(?:70[2-6]|84(?:[2356]|7[19])|91(?:[3-6]|7[19]))|73[134][2-6]|(?:74[47]|8(?:16|2[014]|3[126]|6[136]|7[78]|83))(?:[2-6]|7[19])|(?:1(?:29|60|8[06])|261|552|6(?:[2-4]1|5[17]|6[13]|7(?:1|4[0189])|80)|7(?:12|88[01]))[2-7]\"],\"0$1\",1],[\"(\\\\d{4})(\\\\d{3})(\\\\d{3})\",\"$1 $2 $3\",[\"1(?:[2-479]|5[0235-9])|[2-5]|6(?:1[1358]|2[2457-9]|3[2-5]|4[235-7]|5[2-689]|6[24578]|7[235689]|8[1-6])|7(?:1[013-9]|28|3[129]|4[1-35689]|5[29]|6[02-5]|70)|807\",\"1(?:[2-479]|5[0235-9])|[2-5]|6(?:1[1358]|2(?:[2457]|84|95)|3(?:[2-4]|55)|4[235-7]|5[2-689]|6[24578]|7[235689]|8[1-6])|7(?:1(?:[013-8]|9[6-9])|28[6-8]|3(?:17|2[0-49]|9[2-57])|4(?:1[2-4]|[29][0-7]|3[0-8]|[56]|8[0-24-7])|5(?:2[1-3]|9[0-6])|6(?:0[5689]|2[5-9]|3[02-8]|4|5[0-367])|70[13-7])|807[19]\",\"1(?:[2-479]|5(?:[0236-9]|5[013-9]))|[2-5]|6(?:2(?:84|95)|355|8(?:28[235-7]|3))|73179|807(?:1|9[1-3])|(?:1552|6(?:(?:1[1358]|2[2457]|3[2-4]|4[235-7]|5[2-689]|6[24578]|7[235689])\\\\d|8(?:[14-6]\\\\d|2[0-79]))|7(?:1(?:[013-8]\\\\d|9[6-9])|28[6-8]|3(?:2[0-49]|9[2-57])|4(?:1[2-4]|[29][0-7]|3[0-8]|[56]\\\\d|8[0-24-7])|5(?:2[1-3]|9[0-6])|6(?:0[5689]|2[5-9]|3[02-8]|4\\\\d|5[0-367])|70[13-7]))[2-7]\"],\"0$1\",1],[\"(\\\\d{5})(\\\\d{5})\",\"$1 $2\",[\"16|[6-9]\"],\"0$1\",1],[\"(\\\\d{4})(\\\\d{2,4})(\\\\d{4})\",\"$1 $2 $3\",[\"18[06]\",\"18[06]0\"],0,1],[\"(\\\\d{4})(\\\\d{3})(\\\\d{3})(\\\\d{3})\",\"$1 $2 $3 $4\",[\"18\"],0,1]],\"0\"],\"IO\":[\"246\",\"00\",\"3\\\\d{6}\",[7],[[\"(\\\\d{3})(\\\\d{4})\",\"$1 $2\",[\"3\"]]]],\"IQ\":[\"964\",\"00\",\"(?:1|7\\\\d\\\\d)\\\\d{7}|[2-6]\\\\d{7,8}\",[8,9,10],[[\"(\\\\d)(\\\\d{3})(\\\\d{4})\",\"$1 $2 $3\",[\"1\"],\"0$1\"],[\"(\\\\d{2})(\\\\d{3})(\\\\d{3,4})\",\"$1 $2 $3\",[\"[2-6]\"],\"0$1\"],[\"(\\\\d{3})(\\\\d{3})(\\\\d{4})\",\"$1 $2 $3\",[\"7\"],\"0$1\"]],\"0\"],\"IR\":[\"98\",\"00\",\"[1-9]\\\\d{9}|(?:[1-8]\\\\d\\\\d|9)\\\\d{3,4}\",[4,5,6,7,10],[[\"(\\\\d{4,5})\",\"$1\",[\"96\"],\"0$1\"],[\"(\\\\d{2})(\\\\d{4,5})\",\"$1 $2\",[\"(?:1[137]|2[13-68]|3[1458]|4[145]|5[1468]|6[16]|7[1467]|8[13467])[12689]\"],\"0$1\"],[\"(\\\\d{3})(\\\\d{3})(\\\\d{3,4})\",\"$1 $2 $3\",[\"9\"],\"0$1\"],[\"(\\\\d{2})(\\\\d{4})(\\\\d{4})\",\"$1 $2 $3\",[\"[1-8]\"],\"0$1\"]],\"0\"],\"IS\":[\"354\",\"00|1(?:0(?:01|[12]0)|100)\",\"(?:38\\\\d|[4-9])\\\\d{6}\",[7,9],[[\"(\\\\d{3})(\\\\d{4})\",\"$1 $2\",[\"[4-9]\"]],[\"(\\\\d{3})(\\\\d{3})(\\\\d{3})\",\"$1 $2 $3\",[\"3\"]]],0,0,0,0,0,0,0,\"00\"],\"IT\":[\"39\",\"00\",\"0\\\\d{5,11}|1\\\\d{8,10}|3(?:[0-8]\\\\d{7,10}|9\\\\d{7,8})|(?:43|55|70)\\\\d{8}|8\\\\d{5}(?:\\\\d{2,4})?\",[6,7,8,9,10,11,12],[[\"(\\\\d{2})(\\\\d{4,6})\",\"$1 $2\",[\"0[26]\"]],[\"(\\\\d{3})(\\\\d{3,6})\",\"$1 $2\",[\"0[13-57-9][0159]|8(?:03|4[17]|9[2-5])\",\"0[13-57-9][0159]|8(?:03|4[17]|9(?:2|3[04]|[45][0-4]))\"]],[\"(\\\\d{4})(\\\\d{2,6})\",\"$1 $2\",[\"0(?:[13-579][2-46-8]|8[236-8])\"]],[\"(\\\\d{4})(\\\\d{4})\",\"$1 $2\",[\"894\"]],[\"(\\\\d{2})(\\\\d{3,4})(\\\\d{4})\",\"$1 $2 $3\",[\"0[26]|5\"]],[\"(\\\\d{3})(\\\\d{3})(\\\\d{3,4})\",\"$1 $2 $3\",[\"1(?:44|[679])|[378]|43\"]],[\"(\\\\d{3})(\\\\d{3,4})(\\\\d{4})\",\"$1 $2 $3\",[\"0[13-57-9][0159]|14\"]],[\"(\\\\d{2})(\\\\d{4})(\\\\d{5})\",\"$1 $2 $3\",[\"0[26]\"]],[\"(\\\\d{4})(\\\\d{3})(\\\\d{4})\",\"$1 $2 $3\",[\"0\"]],[\"(\\\\d{3})(\\\\d{4})(\\\\d{4,5})\",\"$1 $2 $3\",[\"[03]\"]]],0,0,0,0,0,0,[[\"0(?:669[0-79]\\\\d{1,6}|831\\\\d{2,8})|0(?:1(?:[0159]\\\\d|[27][1-5]|31|4[1-4]|6[1356]|8[2-57])|2\\\\d\\\\d|3(?:[0159]\\\\d|2[1-4]|3[12]|[48][1-6]|6[2-59]|7[1-7])|4(?:[0159]\\\\d|[23][1-9]|4[245]|6[1-5]|7[1-4]|81)|5(?:[0159]\\\\d|2[1-5]|3[2-6]|4[1-79]|6[4-6]|7[1-578]|8[3-8])|6(?:[0-57-9]\\\\d|6[0-8])|7(?:[0159]\\\\d|2[12]|3[1-7]|4[2-46]|6[13569]|7[13-6]|8[1-59])|8(?:[0159]\\\\d|2[3-578]|3[2356]|[6-8][1-5])|9(?:[0159]\\\\d|[238][1-5]|4[12]|6[1-8]|7[1-6]))\\\\d{2,7}\"],[\"3[2-9]\\\\d{7,8}|(?:31|43)\\\\d{8}\",[9,10]],[\"80(?:0\\\\d{3}|3)\\\\d{3}\",[6,9]],[\"(?:0878\\\\d{3}|89(?:2\\\\d|3[04]|4(?:[0-4]|[5-9]\\\\d\\\\d)|5[0-4]))\\\\d\\\\d|(?:1(?:44|6[346])|89(?:38|5[5-9]|9))\\\\d{6}\",[6,8,9,10]],[\"1(?:78\\\\d|99)\\\\d{6}\",[9,10]],[\"3[2-8]\\\\d{9,10}\",[11,12]],0,0,[\"55\\\\d{8}\",[10]],[\"84(?:[08]\\\\d{3}|[17])\\\\d{3}\",[6,9]]]],\"JE\":[\"44\",\"00\",\"1534\\\\d{6}|(?:[3578]\\\\d|90)\\\\d{8}\",[10],0,\"0\",0,\"([0-24-8]\\\\d{5})$|0|180020\",\"1534$1\",0,0,[[\"1534[0-24-8]\\\\d{5}\"],[\"7(?:(?:(?:50|82)9|937)\\\\d|7(?:00[378]|97\\\\d))\\\\d{5}\"],[\"80(?:07(?:35|81)|8901)\\\\d{4}\"],[\"(?:8(?:4(?:4(?:4(?:05|42|69)|703)|5(?:041|800))|7(?:0002|1206))|90(?:066[59]|1810|71(?:07|55)))\\\\d{4}\"],[\"701511\\\\d{4}\"],0,[\"(?:3(?:0(?:07(?:35|81)|8901)|3\\\\d{4}|4(?:4(?:4(?:05|42|69)|703)|5(?:041|800))|7(?:0002|1206))|55\\\\d{4})\\\\d{4}\"],[\"76(?:464|652)\\\\d{5}|76(?:0[0-28]|2[356]|34|4[01347]|5[49]|6[0-369]|77|8[14]|9[139])\\\\d{6}\"],[\"56\\\\d{8}\"]]],\"JM\":[\"1\",\"011\",\"(?:[58]\\\\d\\\\d|658|900)\\\\d{7}\",[10],0,\"1\",0,0,0,0,\"658|876\"],\"JO\":[\"962\",\"00\",\"(?:(?:[2689]|7\\\\d)\\\\d|32|427|53)\\\\d{6}\",[8,9],[[\"(\\\\d)(\\\\d{3})(\\\\d{4})\",\"$1 $2 $3\",[\"[2356]|87\"],\"(0$1)\"],[\"(\\\\d{3})(\\\\d{5,6})\",\"$1 $2\",[\"[89]\"],\"0$1\"],[\"(\\\\d{2})(\\\\d{7})\",\"$1 $2\",[\"70\"],\"0$1\"],[\"(\\\\d)(\\\\d{4})(\\\\d{4})\",\"$1 $2 $3\",[\"[47]\"],\"0$1\"]],\"0\"],\"JP\":[\"81\",\"010\",\"00[1-9]\\\\d{6,14}|[25-9]\\\\d{9}|(?:00|[1-9]\\\\d\\\\d)\\\\d{6}\",[8,9,10,11,12,13,14,15,16,17],[[\"(\\\\d{3})(\\\\d{3})(\\\\d{3})\",\"$1-$2-$3\",[\"(?:12|57|99)0\"],\"0$1\"],[\"(\\\\d{4})(\\\\d)(\\\\d{4})\",\"$1-$2-$3\",[\"1(?:26|3[79]|4[56]|5[4-68]|6[3-5])|499|5(?:76|97)|746|8(?:3[89]|47|51)|9(?:80|9[16])\",\"1(?:267|3(?:7[247]|9[278])|466|5(?:47|58|64)|6(?:3[245]|48|5[4-68]))|499[2468]|5(?:76|97)9|7468|8(?:3(?:8[7-9]|96)|477|51[2-9])|9(?:802|9(?:1[23]|69))|1(?:45|58)[67]\",\"1(?:267|3(?:7[247]|9[278])|466|5(?:47|58|64)|6(?:3[245]|48|5[4-68]))|499[2468]|5(?:769|979[2-69])|7468|8(?:3(?:8[7-9]|96[2457-9])|477|51[2-9])|9(?:802|9(?:1[23]|69))|1(?:45|58)[67]\"],\"0$1\"],[\"(\\\\d{2})(\\\\d{3})(\\\\d{4})\",\"$1-$2-$3\",[\"60\"],\"0$1\"],[\"(\\\\d)(\\\\d{4})(\\\\d{4})\",\"$1-$2-$3\",[\"3|4(?:2[09]|7[01])|6[1-9]\",\"3|4(?:2(?:0|9[02-69])|7(?:0[019]|1))|6[1-9]\"],\"0$1\"],[\"(\\\\d{2})(\\\\d{3})(\\\\d{4})\",\"$1-$2-$3\",[\"1(?:1|5[45]|77|88|9[69])|2(?:2[1-37]|3[0-269]|4[59]|5|6[24]|7[1-358]|8[1369]|9[0-38])|4(?:[28][1-9]|3[0-57]|[45]|6[248]|7[2-579]|9[29])|5(?:2|3[0459]|4[0-369]|5[29]|8[02389]|9[0-389])|7(?:2[02-46-9]|34|[58]|6[0249]|7[57]|9[2-6])|8(?:2[124589]|3[26-9]|49|51|6|7[0-468]|8[68]|9[019])|9(?:[23][1-9]|4[15]|5[138]|6[1-3]|7[156]|8[189]|9[1-489])\",\"1(?:1|5(?:4[018]|5[017])|77|88|9[69])|2(?:2(?:[127]|3[014-9])|3[0-269]|4[59]|5(?:[1-3]|5[0-69]|9[19])|62|7(?:[1-35]|8[0189])|8(?:[16]|3[0134]|9[0-5])|9(?:[028]|17))|4(?:2(?:[13-79]|8[014-6])|3[0-57]|[45]|6[248]|7[2-47]|8[1-9]|9[29])|5(?:2|3(?:[045]|9[0-8])|4[0-369]|5[29]|8[02389]|9[0-3])|7(?:2[02-46-9]|34|[58]|6[0249]|7[57]|9(?:[23]|4[0-59]|5[01569]|6[0167]))|8(?:2(?:[1258]|4[0-39]|9[0-2469])|3(?:[29]|60)|49|51|6(?:[0-24]|36|5[0-3589]|7[23]|9[01459])|7[0-468]|8[68])|9(?:[23][1-9]|4[15]|5[138]|6[1-3]|7[156]|8[189]|9(?:[1289]|3[34]|4[0178]))|(?:264|837)[016-9]|2(?:57|93)[015-9]|(?:25[0468]|422|838)[01]|(?:47[59]|59[89]|8(?:6[68]|9))[019]\",\"1(?:1|5(?:4[018]|5[017])|77|88|9[69])|2(?:2[127]|3[0-269]|4[59]|5(?:[1-3]|5[0-69]|9(?:17|99))|6(?:2|4[016-9])|7(?:[1-35]|8[0189])|8(?:[16]|3[0134]|9[0-5])|9(?:[028]|17))|4(?:2(?:[13-79]|8[014-6])|3[0-57]|[45]|6[248]|7[2-47]|9[29])|5(?:2|3(?:[045]|9(?:[0-58]|6[4-9]|7[0-35689]))|4[0-369]|5[29]|8[02389]|9[0-3])|7(?:2[02-46-9]|34|[58]|6[0249]|7[57]|9(?:[23]|4[0-59]|5[01569]|6[0167]))|8(?:2(?:[1258]|4[0-39]|9[0169])|3(?:[29]|60|7(?:[017-9]|6[6-8]))|49|51|6(?:[0-24]|36[2-57-9]|5(?:[0-389]|5[23])|6(?:[01]|9[178])|7(?:2[2-468]|3[78])|9[0145])|7[0-468]|8[68])|9(?:4[15]|5[138]|7[156]|8[189]|9(?:[1289]|3(?:31|4[357])|4[0178]))|(?:8294|96)[1-3]|2(?:57|93)[015-9]|(?:223|8699)[014-9]|(?:25[0468]|422|838)[01]|(?:48|8292|9[23])[1-9]|(?:47[59]|59[89]|8(?:68|9))[019]\"],\"0$1\"],[\"(\\\\d{3})(\\\\d{2})(\\\\d{4})\",\"$1-$2-$3\",[\"[14]|[289][2-9]|5[3-9]|7[2-4679]\"],\"0$1\"],[\"(\\\\d{3})(\\\\d{3})(\\\\d{4})\",\"$1-$2-$3\",[\"800\"],\"0$1\"],[\"(\\\\d{2})(\\\\d{4})(\\\\d{4})\",\"$1-$2-$3\",[\"[25-9]\"],\"0$1\"]],\"0\",0,\"(000[2569]\\\\d{4,6})$|(?:(?:003768)0?)|0\",\"$1\"],\"KE\":[\"254\",\"000\",\"(?:[17]\\\\d\\\\d|900)\\\\d{6}|(?:2|80)0\\\\d{6,7}|[4-6]\\\\d{6,8}\",[7,8,9,10],[[\"(\\\\d{2})(\\\\d{5,7})\",\"$1 $2\",[\"[24-6]\"],\"0$1\"],[\"(\\\\d{3})(\\\\d{6})\",\"$1 $2\",[\"[17]\"],\"0$1\"],[\"(\\\\d{3})(\\\\d{3})(\\\\d{3,4})\",\"$1 $2 $3\",[\"[89]\"],\"0$1\"]],\"0\"],\"KG\":[\"996\",\"00\",\"8\\\\d{9}|[235-9]\\\\d{8}\",[9,10],[[\"(\\\\d{4})(\\\\d{5})\",\"$1 $2\",[\"3(?:1[346]|[24-79])\"],\"0$1\"],[\"(\\\\d{3})(\\\\d{3})(\\\\d{3})\",\"$1 $2 $3\",[\"[235-79]|88\"],\"0$1\"],[\"(\\\\d{3})(\\\\d{3})(\\\\d)(\\\\d{2,3})\",\"$1 $2 $3 $4\",[\"8\"],\"0$1\"]],\"0\"],\"KH\":[\"855\",\"00[14-9]\",\"1\\\\d{9}|[1-9]\\\\d{7,8}\",[8,9,10],[[\"(\\\\d{2})(\\\\d{3})(\\\\d{3,4})\",\"$1 $2 $3\",[\"[1-9]\"],\"0$1\"],[\"(\\\\d{4})(\\\\d{3})(\\\\d{3})\",\"$1 $2 $3\",[\"1\"]]],\"0\"],\"KI\":[\"686\",\"00\",\"(?:[37]\\\\d|6[0-79])\\\\d{6}|(?:[2-48]\\\\d|50)\\\\d{3}\",[5,8],0,\"0\"],\"KM\":[\"269\",\"00\",\"[3478]\\\\d{6}\",[7],[[\"(\\\\d{3})(\\\\d{2})(\\\\d{2})\",\"$1 $2 $3\",[\"[3478]\"]]]],\"KN\":[\"1\",\"011\",\"(?:[58]\\\\d\\\\d|900)\\\\d{7}\",[10],0,\"1\",0,\"([2-7]\\\\d{6})$|1\",\"869$1\",0,\"869\"],\"KP\":[\"850\",\"00|99\",\"85\\\\d{6}|(?:19\\\\d|[2-7])\\\\d{7}\",[8,10],[[\"(\\\\d{2})(\\\\d{3})(\\\\d{3})\",\"$1 $2 $3\",[\"8\"],\"0$1\"],[\"(\\\\d)(\\\\d{3})(\\\\d{4})\",\"$1 $2 $3\",[\"[2-7]\"],\"0$1\"],[\"(\\\\d{3})(\\\\d{3})(\\\\d{4})\",\"$1 $2 $3\",[\"1\"],\"0$1\"]],\"0\"],\"KR\":[\"82\",\"00(?:[125689]|3(?:[46]5|91)|7(?:00|27|3|55|6[126]))\",\"00[1-9]\\\\d{8,11}|(?:[12]|5\\\\d{3})\\\\d{7}|[13-6]\\\\d{9}|(?:[1-6]\\\\d|80)\\\\d{7}|[3-6]\\\\d{4,5}|(?:00|7)0\\\\d{8}\",[5,6,8,9,10,11,12,13,14],[[\"(\\\\d{2})(\\\\d{3,4})\",\"$1-$2\",[\"(?:3[1-3]|[46][1-4]|5[1-5])1\"],\"0$1\"],[\"(\\\\d{4})(\\\\d{4})\",\"$1-$2\",[\"1\"]],[\"(\\\\d)(\\\\d{3,4})(\\\\d{4})\",\"$1-$2-$3\",[\"2\"],\"0$1\"],[\"(\\\\d{2})(\\\\d{3})(\\\\d{4})\",\"$1-$2-$3\",[\"[36]0|8\"],\"0$1\"],[\"(\\\\d{2})(\\\\d{3,4})(\\\\d{4})\",\"$1-$2-$3\",[\"[1346]|5[1-5]\"],\"0$1\"],[\"(\\\\d{2})(\\\\d{4})(\\\\d{4})\",\"$1-$2-$3\",[\"[57]\"],\"0$1\"],[\"(\\\\d{2})(\\\\d{5})(\\\\d{4})\",\"$1-$2-$3\",[\"5\"],\"0$1\"]],\"0\",0,\"0(8(?:[1-46-8]|5\\\\d\\\\d))?\"],\"KW\":[\"965\",\"00\",\"18\\\\d{5}|(?:[2569]\\\\d|41)\\\\d{6}\",[7,8],[[\"(\\\\d{4})(\\\\d{3,4})\",\"$1 $2\",[\"[169]|2(?:[235]|4[1-35-9])|52\"]],[\"(\\\\d{3})(\\\\d{5})\",\"$1 $2\",[\"[245]\"]]]],\"KY\":[\"1\",\"011\",\"(?:345|[58]\\\\d\\\\d|900)\\\\d{7}\",[10],0,\"1\",0,\"([2-9]\\\\d{6})$|1\",\"345$1\",0,\"345\"],\"KZ\":[\"7\",\"810\",\"8\\\\d{13}|[78]\\\\d{9}\",[10,14],0,\"8\",0,0,0,0,\"7\",0,\"8~10\"],\"LA\":[\"856\",\"00\",\"[23]\\\\d{9}|3\\\\d{8}|(?:[235-8]\\\\d|41)\\\\d{6}\",[8,9,10],[[\"(\\\\d{2})(\\\\d{3})(\\\\d{3})\",\"$1 $2 $3\",[\"2[13]|3[14]|[4-8]\"],\"0$1\"],[\"(\\\\d{2})(\\\\d{2})(\\\\d{2})(\\\\d{3})\",\"$1 $2 $3 $4\",[\"3\"],\"0$1\"],[\"(\\\\d{2})(\\\\d{2})(\\\\d{3})(\\\\d{3})\",\"$1 $2 $3 $4\",[\"[23]\"],\"0$1\"]],\"0\"],\"LB\":[\"961\",\"00\",\"[27-9]\\\\d{7}|[13-9]\\\\d{6}\",[7,8],[[\"(\\\\d)(\\\\d{3})(\\\\d{3})\",\"$1 $2 $3\",[\"[13-69]|7(?:[2-57]|62|8[0-6]|9[04-9])|8[02-9]\"],\"0$1\"],[\"(\\\\d{2})(\\\\d{3})(\\\\d{3})\",\"$1 $2 $3\",[\"[27-9]\"]]],\"0\"],\"LC\":[\"1\",\"011\",\"(?:[58]\\\\d\\\\d|758|900)\\\\d{7}\",[10],0,\"1\",0,\"([2-8]\\\\d{6})$|1\",\"758$1\",0,\"758\"],\"LI\":[\"423\",\"00\",\"[68]\\\\d{8}|(?:[2378]\\\\d|90)\\\\d{5}\",[7,9],[[\"(\\\\d{3})(\\\\d{2})(\\\\d{2})\",\"$1 $2 $3\",[\"[2379]|8(?:0[09]|7)\",\"[2379]|8(?:0(?:02|9)|7)\"]],[\"(\\\\d{3})(\\\\d{3})(\\\\d{3})\",\"$1 $2 $3\",[\"8\"]],[\"(\\\\d{2})(\\\\d{3})(\\\\d{4})\",\"$1 $2 $3\",[\"69\"]],[\"(\\\\d{3})(\\\\d{3})(\\\\d{3})\",\"$1 $2 $3\",[\"6\"]]],\"0\",0,\"(1001)|0\"],\"LK\":[\"94\",\"00\",\"[1-9]\\\\d{8}\",[9],[[\"(\\\\d{2})(\\\\d{3})(\\\\d{4})\",\"$1 $2 $3\",[\"7\"],\"0$1\"],[\"(\\\\d{3})(\\\\d{3})(\\\\d{3})\",\"$1 $2 $3\",[\"[1-689]\"],\"0$1\"]],\"0\"],\"LR\":[\"231\",\"00\",\"(?:[2457]\\\\d|33|88)\\\\d{7}|(?:2\\\\d|[4-6])\\\\d{6}\",[7,8,9],[[\"(\\\\d)(\\\\d{3})(\\\\d{3})\",\"$1 $2 $3\",[\"4[67]|[56]\"],\"0$1\"],[\"(\\\\d{2})(\\\\d{3})(\\\\d{3})\",\"$1 $2 $3\",[\"2\"],\"0$1\"],[\"(\\\\d{2})(\\\\d{3})(\\\\d{4})\",\"$1 $2 $3\",[\"[2-578]\"],\"0$1\"]],\"0\"],\"LS\":[\"266\",\"00\",\"(?:[256]\\\\d\\\\d|800)\\\\d{5}\",[8],[[\"(\\\\d{4})(\\\\d{4})\",\"$1 $2\",[\"[2568]\"]]]],\"LT\":[\"370\",\"00\",\"(?:[3469]\\\\d|52|[78]0)\\\\d{6}\",[8],[[\"(\\\\d)(\\\\d{3})(\\\\d{4})\",\"$1 $2 $3\",[\"52[0-7]\"],\"(0-$1)\",1],[\"(\\\\d{3})(\\\\d{2})(\\\\d{3})\",\"$1 $2 $3\",[\"[7-9]\"],\"0 $1\",1],[\"(\\\\d{2})(\\\\d{6})\",\"$1 $2\",[\"37|4(?:[15]|6[1-8])\"],\"(0-$1)\",1],[\"(\\\\d{3})(\\\\d{5})\",\"$1 $2\",[\"[3-6]\"],\"(0-$1)\",1]],\"0\",0,\"[08]\"],\"LU\":[\"352\",\"00\",\"35[013-9]\\\\d{4,8}|6\\\\d{8}|35\\\\d{2,4}|(?:[2457-9]\\\\d|3[0-46-9])\\\\d{2,9}\",[4,5,6,7,8,9,10,11],[[\"(\\\\d{2})(\\\\d{3})\",\"$1 $2\",[\"2(?:0[2-689]|[2-9])|[3-57]|8(?:0[2-9]|[13-9])|9(?:0[89]|[2-579])\"]],[\"(\\\\d{2})(\\\\d{2})(\\\\d{2})\",\"$1 $2 $3\",[\"2(?:0[2-689]|[2-9])|[3-57]|8(?:0[2-9]|[13-9])|9(?:0[89]|[2-579])\"]],[\"(\\\\d{2})(\\\\d{2})(\\\\d{3})\",\"$1 $2 $3\",[\"20[2-689]\"]],[\"(\\\\d{2})(\\\\d{2})(\\\\d{2})(\\\\d{1,2})\",\"$1 $2 $3 $4\",[\"20\"]],[\"(\\\\d{2})(\\\\d{2})(\\\\d{2})(\\\\d{1,5})\",\"$1 $2 $3 $4\",[\"[3-57]|8[13-9]|9(?:0[89]|[2-579])|(?:2|80)[2-9]\"]],[\"(\\\\d{3})(\\\\d{2})(\\\\d{3})\",\"$1 $2 $3\",[\"80[01]|90[015]\"]],[\"(\\\\d{2})(\\\\d{2})(\\\\d{2})(\\\\d{3})\",\"$1 $2 $3 $4\",[\"20\"]],[\"(\\\\d{3})(\\\\d{3})(\\\\d{3})\",\"$1 $2 $3\",[\"6\"]],[\"(\\\\d{2})(\\\\d{2})(\\\\d{2})(\\\\d{2})(\\\\d{1,2})\",\"$1 $2 $3 $4 $5\",[\"20\"]]],0,0,\"(15(?:0[06]|1[12]|[35]5|4[04]|6[26]|77|88|99)\\\\d)\"],\"LV\":[\"371\",\"00\",\"(?:[268]\\\\d|78|90)\\\\d{6}\",[8],[[\"(\\\\d{2})(\\\\d{3})(\\\\d{3})\",\"$1 $2 $3\",[\"[2679]|8[01]\"]]]],\"LY\":[\"218\",\"00\",\"[2-9]\\\\d{8}\",[9],[[\"(\\\\d{2})(\\\\d{7})\",\"$1-$2\",[\"[2-9]\"],\"0$1\"]],\"0\"],\"MA\":[\"212\",\"00\",\"[5-8]\\\\d{8}\",[9],[[\"(\\\\d{4})(\\\\d{5})\",\"$1-$2\",[\"892\"],\"0$1\"],[\"(\\\\d{2})(\\\\d{7})\",\"$1-$2\",[\"8(?:0[0-7]|9)\"],\"0$1\"],[\"(\\\\d)(\\\\d{2})(\\\\d{2})(\\\\d{2})(\\\\d{2})\",\"$1 $2 $3 $4 $5\",[\"[5-8]\"],\"0$1\"]],\"0\",0,0,0,0,\"[5-8]\"],\"MC\":[\"377\",\"00\",\"(?:[3489]|[67]\\\\d)\\\\d{7}\",[8,9],[[\"(\\\\d{2})(\\\\d{3})(\\\\d{3})\",\"$1 $2 $3\",[\"4\"],\"0$1\"],[\"(\\\\d{2})(\\\\d{2})(\\\\d{2})(\\\\d{2})\",\"$1 $2 $3 $4\",[\"[389]\"]],[\"(\\\\d)(\\\\d{2})(\\\\d{2})(\\\\d{2})(\\\\d{2})\",\"$1 $2 $3 $4 $5\",[\"[67]\"],\"0$1\"]],\"0\"],\"MD\":[\"373\",\"00\",\"(?:[235-7]\\\\d|[89]0)\\\\d{6}\",[8],[[\"(\\\\d{3})(\\\\d{5})\",\"$1 $2\",[\"[89]\"],\"0$1\"],[\"(\\\\d{2})(\\\\d{3})(\\\\d{3})\",\"$1 $2 $3\",[\"22|3\"],\"0$1\"],[\"(\\\\d{3})(\\\\d{2})(\\\\d{3})\",\"$1 $2 $3\",[\"[25-7]\"],\"0$1\"]],\"0\"],\"ME\":[\"382\",\"00\",\"(?:20|[3-79]\\\\d)\\\\d{6}|80\\\\d{6,7}\",[8,9],[[\"(\\\\d{2})(\\\\d{3})(\\\\d{3,4})\",\"$1 $2 $3\",[\"[2-9]\"],\"0$1\"]],\"0\"],\"MF\":[\"590\",\"00\",\"(?:590\\\\d|7090)\\\\d{5}|(?:69|80|9\\\\d)\\\\d{7}\",[9],0,\"0\",0,0,0,0,0,[[\"590(?:0[079]|[14]3|[27][79]|3[03-7]|5[0-268]|87)\\\\d{4}\"],[\"(?:69(?:0\\\\d\\\\d|1(?:2[2-9]|3[0-5])|4(?:0[89]|1[2-6]|9\\\\d)|6(?:1[016-9]|5[0-4]|[67]\\\\d))|7090[0-4])\\\\d{4}\"],[\"80[0-5]\\\\d{6}\"],0,0,0,0,0,[\"9(?:(?:39[5-7]|76[018])\\\\d|475[0-6])\\\\d{4}\"]]],\"MG\":[\"261\",\"00\",\"[23]\\\\d{8}\",[9],[[\"(\\\\d{2})(\\\\d{2})(\\\\d{3})(\\\\d{2})\",\"$1 $2 $3 $4\",[\"[23]\"],\"0$1\"]],\"0\",0,\"([24-9]\\\\d{6})$|0\",\"20$1\"],\"MH\":[\"692\",\"011\",\"329\\\\d{4}|(?:[256]\\\\d|45)\\\\d{5}\",[7],[[\"(\\\\d{3})(\\\\d{4})\",\"$1-$2\",[\"[2-6]\"]]],\"1\"],\"MK\":[\"389\",\"00\",\"[2-578]\\\\d{7}\",[8],[[\"(\\\\d)(\\\\d{3})(\\\\d{4})\",\"$1 $2 $3\",[\"2|34[47]|4(?:[37]7|5[47]|64)\"],\"0$1\"],[\"(\\\\d{2})(\\\\d{3})(\\\\d{3})\",\"$1 $2 $3\",[\"[347]\"],\"0$1\"],[\"(\\\\d{3})(\\\\d)(\\\\d{2})(\\\\d{2})\",\"$1 $2 $3 $4\",[\"[58]\"],\"0$1\"]],\"0\"],\"ML\":[\"223\",\"00\",\"[24-9]\\\\d{7}\",[8],[[\"(\\\\d{2})(\\\\d{2})(\\\\d{2})(\\\\d{2})\",\"$1 $2 $3 $4\",[\"[24-9]\"]]]],\"MM\":[\"95\",\"00\",\"1\\\\d{5,7}|95\\\\d{6}|(?:[4-7]|9[0-46-9])\\\\d{6,8}|(?:2|8\\\\d)\\\\d{5,8}\",[6,7,8,9,10],[[\"(\\\\d)(\\\\d{2})(\\\\d{3})\",\"$1 $2 $3\",[\"16|2\"],\"0$1\"],[\"(\\\\d{2})(\\\\d{2})(\\\\d{3})\",\"$1 $2 $3\",[\"4(?:[2-46]|5[3-5])|5|6(?:[1-689]|7[235-7])|7(?:[0-4]|5[2-7])|8[1-5]|(?:60|86)[23]\"],\"0$1\"],[\"(\\\\d)(\\\\d{3})(\\\\d{3,4})\",\"$1 $2 $3\",[\"[12]|452|678|86\",\"[12]|452|6788|86\"],\"0$1\"],[\"(\\\\d{2})(\\\\d{3})(\\\\d{3,4})\",\"$1 $2 $3\",[\"[4-7]|8[1-35]\"],\"0$1\"],[\"(\\\\d)(\\\\d{3})(\\\\d{4,6})\",\"$1 $2 $3\",[\"9(?:2[0-4]|[35-9]|4[137-9])\"],\"0$1\"],[\"(\\\\d)(\\\\d{4})(\\\\d{4})\",\"$1 $2 $3\",[\"2\"],\"0$1\"],[\"(\\\\d{3})(\\\\d{3})(\\\\d{4})\",\"$1 $2 $3\",[\"8\"],\"0$1\"],[\"(\\\\d)(\\\\d{3})(\\\\d{3})(\\\\d{3})\",\"$1 $2 $3 $4\",[\"92\"],\"0$1\"],[\"(\\\\d)(\\\\d{5})(\\\\d{4})\",\"$1 $2 $3\",[\"9\"],\"0$1\"]],\"0\"],\"MN\":[\"976\",\"001\",\"[12]\\\\d{7,9}|[5-9]\\\\d{7}\",[8,9,10],[[\"(\\\\d{2})(\\\\d{2})(\\\\d{4})\",\"$1 $2 $3\",[\"[12]1\"],\"0$1\"],[\"(\\\\d{4})(\\\\d{4})\",\"$1 $2\",[\"[5-9]\"]],[\"(\\\\d{3})(\\\\d{5,6})\",\"$1 $2\",[\"[12]2[1-3]\"],\"0$1\"],[\"(\\\\d{4})(\\\\d{5,6})\",\"$1 $2\",[\"[12](?:27|3[2-8]|4[2-68]|5[1-4689])\",\"[12](?:27|3[2-8]|4[2-68]|5[1-4689])[0-3]\"],\"0$1\"],[\"(\\\\d{5})(\\\\d{4,5})\",\"$1 $2\",[\"[12]\"],\"0$1\"]],\"0\"],\"MO\":[\"853\",\"00\",\"0800\\\\d{3}|(?:28|[68]\\\\d)\\\\d{6}\",[7,8],[[\"(\\\\d{4})(\\\\d{3})\",\"$1 $2\",[\"0\"]],[\"(\\\\d{4})(\\\\d{4})\",\"$1 $2\",[\"[268]\"]]]],\"MP\":[\"1\",\"011\",\"[58]\\\\d{9}|(?:67|90)0\\\\d{7}\",[10],0,\"1\",0,\"([2-9]\\\\d{6})$|1\",\"670$1\",0,\"670\"],\"MQ\":[\"596\",\"00\",\"(?:596\\\\d|7091)\\\\d{5}|(?:69|[89]\\\\d)\\\\d{7}\",[9],[[\"(\\\\d{3})(\\\\d{2})(\\\\d{2})(\\\\d{2})\",\"$1 $2 $3 $4\",[\"[5-79]|8(?:0[6-9]|[36])\"],\"0$1\"],[\"(\\\\d{3})(\\\\d{2})(\\\\d{2})(\\\\d{2})\",\"$1 $2 $3 $4\",[\"8\"],\"0$1\"]],\"0\"],\"MR\":[\"222\",\"00\",\"(?:[2-4]\\\\d\\\\d|800)\\\\d{5}\",[8],[[\"(\\\\d{2})(\\\\d{2})(\\\\d{2})(\\\\d{2})\",\"$1 $2 $3 $4\",[\"[2-48]\"]]]],\"MS\":[\"1\",\"011\",\"(?:[58]\\\\d\\\\d|664|900)\\\\d{7}\",[10],0,\"1\",0,\"([34]\\\\d{6})$|1\",\"664$1\",0,\"664\"],\"MT\":[\"356\",\"00\",\"3550\\\\d{4}|(?:[2579]\\\\d\\\\d|800)\\\\d{5}\",[8],[[\"(\\\\d{4})(\\\\d{4})\",\"$1 $2\",[\"[2357-9]\"]]]],\"MU\":[\"230\",\"0(?:0|[24-7]0|3[03])\",\"(?:[57]|8\\\\d\\\\d)\\\\d{7}|[2-468]\\\\d{6}\",[7,8,10],[[\"(\\\\d{3})(\\\\d{4})\",\"$1 $2\",[\"[2-46]|8[013]\"]],[\"(\\\\d{4})(\\\\d{4})\",\"$1 $2\",[\"[57]\"]],[\"(\\\\d{5})(\\\\d{5})\",\"$1 $2\",[\"8\"]]],0,0,0,0,0,0,0,\"020\"],\"MV\":[\"960\",\"0(?:0|19)\",\"(?:800|9[0-57-9]\\\\d)\\\\d{7}|[34679]\\\\d{6}\",[7,10],[[\"(\\\\d{3})(\\\\d{4})\",\"$1-$2\",[\"[34679]\"]],[\"(\\\\d{3})(\\\\d{3})(\\\\d{4})\",\"$1 $2 $3\",[\"[89]\"]]],0,0,0,0,0,0,0,\"00\"],\"MW\":[\"265\",\"00\",\"(?:[1289]\\\\d|31|77)\\\\d{7}|1\\\\d{6}\",[7,9],[[\"(\\\\d)(\\\\d{3})(\\\\d{3})\",\"$1 $2 $3\",[\"1[2-9]\"],\"0$1\"],[\"(\\\\d{3})(\\\\d{3})(\\\\d{3})\",\"$1 $2 $3\",[\"2\"],\"0$1\"],[\"(\\\\d{3})(\\\\d{2})(\\\\d{2})(\\\\d{2})\",\"$1 $2 $3 $4\",[\"[137-9]\"],\"0$1\"]],\"0\"],\"MX\":[\"52\",\"0[09]\",\"[2-9]\\\\d{9}\",[10],[[\"(\\\\d{2})(\\\\d{4})(\\\\d{4})\",\"$1 $2 $3\",[\"33|5[56]|81\"]],[\"(\\\\d{3})(\\\\d{3})(\\\\d{4})\",\"$1 $2 $3\",[\"[2-9]\"]]],0,0,0,0,0,0,0,\"00\"],\"MY\":[\"60\",\"00\",\"1\\\\d{8,9}|(?:3\\\\d|[4-9])\\\\d{7}\",[8,9,10],[[\"(\\\\d)(\\\\d{3})(\\\\d{4})\",\"$1-$2 $3\",[\"[4-79]\"],\"0$1\"],[\"(\\\\d{2})(\\\\d{3})(\\\\d{3,4})\",\"$1-$2 $3\",[\"1(?:[02469]|[378][1-9]|53)|8\",\"1(?:[02469]|[37][1-9]|53|8(?:[1-46-9]|5[7-9]))|8\"],\"0$1\"],[\"(\\\\d)(\\\\d{4})(\\\\d{4})\",\"$1-$2 $3\",[\"3\"],\"0$1\"],[\"(\\\\d)(\\\\d{3})(\\\\d{2})(\\\\d{4})\",\"$1-$2-$3-$4\",[\"1(?:[367]|80)\"]],[\"(\\\\d{3})(\\\\d{3})(\\\\d{4})\",\"$1-$2 $3\",[\"15\"],\"0$1\"],[\"(\\\\d{2})(\\\\d{4})(\\\\d{4})\",\"$1-$2 $3\",[\"1\"],\"0$1\"]],\"0\"],\"MZ\":[\"258\",\"00\",\"(?:2|8\\\\d)\\\\d{7}\",[8,9],[[\"(\\\\d{2})(\\\\d{3})(\\\\d{3,4})\",\"$1 $2 $3\",[\"2|8[2-79]\"]],[\"(\\\\d{3})(\\\\d{3})(\\\\d{3})\",\"$1 $2 $3\",[\"8\"]]]],\"NA\":[\"264\",\"00\",\"[68]\\\\d{7,8}\",[8,9],[[\"(\\\\d{2})(\\\\d{3})(\\\\d{3})\",\"$1 $2 $3\",[\"88\"],\"0$1\"],[\"(\\\\d{2})(\\\\d{3})(\\\\d{3,4})\",\"$1 $2 $3\",[\"6\"],\"0$1\"],[\"(\\\\d{3})(\\\\d{3})(\\\\d{3})\",\"$1 $2 $3\",[\"87\"],\"0$1\"],[\"(\\\\d{2})(\\\\d{3})(\\\\d{4})\",\"$1 $2 $3\",[\"8\"],\"0$1\"]],\"0\"],\"NC\":[\"687\",\"00\",\"(?:050|[2-57-9]\\\\d\\\\d)\\\\d{3}\",[6],[[\"(\\\\d{2})(\\\\d{2})(\\\\d{2})\",\"$1.$2.$3\",[\"[02-57-9]\"]]]],\"NE\":[\"227\",\"00\",\"[027-9]\\\\d{7}\",[8],[[\"(\\\\d{2})(\\\\d{3})(\\\\d{3})\",\"$1 $2 $3\",[\"08\"]],[\"(\\\\d{2})(\\\\d{2})(\\\\d{2})(\\\\d{2})\",\"$1 $2 $3 $4\",[\"[089]|2[013]|7[0467]\"]]]],\"NF\":[\"672\",\"00\",\"[13]\\\\d{5}\",[6],[[\"(\\\\d{2})(\\\\d{4})\",\"$1 $2\",[\"1[0-3]\"]],[\"(\\\\d)(\\\\d{5})\",\"$1 $2\",[\"[13]\"]]],0,0,\"([0-258]\\\\d{4})$\",\"3$1\"],\"NG\":[\"234\",\"009\",\"(?:20|9\\\\d)\\\\d{8}|[78]\\\\d{9,13}\",[10,11,12,13,14],[[\"(\\\\d{3})(\\\\d{3})(\\\\d{3,4})\",\"$1 $2 $3\",[\"[7-9]\"],\"0$1\"],[\"(\\\\d{3})(\\\\d{3})(\\\\d{4})\",\"$1 $2 $3\",[\"20[129]\"],\"0$1\"],[\"(\\\\d{4})(\\\\d{2})(\\\\d{4})\",\"$1 $2 $3\",[\"2\"],\"0$1\"],[\"(\\\\d{3})(\\\\d{4})(\\\\d{4,5})\",\"$1 $2 $3\",[\"[78]\"],\"0$1\"],[\"(\\\\d{3})(\\\\d{5})(\\\\d{5,6})\",\"$1 $2 $3\",[\"[78]\"],\"0$1\"]],\"0\"],\"NI\":[\"505\",\"00\",\"(?:1800|[25-8]\\\\d{3})\\\\d{4}\",[8],[[\"(\\\\d{4})(\\\\d{4})\",\"$1 $2\",[\"[125-8]\"]]]],\"NL\":[\"31\",\"00\",\"(?:[124-7]\\\\d\\\\d|3(?:[02-9]\\\\d|1[0-8]))\\\\d{6}|8\\\\d{6,9}|9\\\\d{6,10}|1\\\\d{4,5}\",[5,6,7,8,9,10,11],[[\"(\\\\d{3})(\\\\d{4,7})\",\"$1 $2\",[\"[89]0\"],\"0$1\"],[\"(\\\\d{2})(\\\\d{7})\",\"$1 $2\",[\"66\"],\"0$1\"],[\"(\\\\d)(\\\\d{8})\",\"$1 $2\",[\"6\"],\"0$1\"],[\"(\\\\d{3})(\\\\d{3})(\\\\d{3})\",\"$1 $2 $3\",[\"1[16-8]|2[259]|3[124]|4[17-9]|5[124679]\"],\"0$1\"],[\"(\\\\d{2})(\\\\d{3})(\\\\d{4})\",\"$1 $2 $3\",[\"[1-578]|91\"],\"0$1\"],[\"(\\\\d{3})(\\\\d{3})(\\\\d{5})\",\"$1 $2 $3\",[\"9\"],\"0$1\"]],\"0\"],\"NO\":[\"47\",\"00\",\"(?:0|[2-9]\\\\d{3})\\\\d{4}\",[5,8],[[\"(\\\\d{3})(\\\\d{2})(\\\\d{3})\",\"$1 $2 $3\",[\"8\"]],[\"(\\\\d{2})(\\\\d{2})(\\\\d{2})(\\\\d{2})\",\"$1 $2 $3 $4\",[\"[2-79]\"]]],0,0,0,0,0,\"[02-689]|7[0-8]\"],\"NP\":[\"977\",\"00\",\"(?:1\\\\d|9)\\\\d{9}|[1-9]\\\\d{7}\",[8,10,11],[[\"(\\\\d)(\\\\d{7})\",\"$1-$2\",[\"1[2-6]\"],\"0$1\"],[\"(\\\\d{2})(\\\\d{6})\",\"$1-$2\",[\"1[01]|[2-8]|9(?:[1-59]|[67][2-6])\"],\"0$1\"],[\"(\\\\d{3})(\\\\d{7})\",\"$1-$2\",[\"9\"]]],\"0\"],\"NR\":[\"674\",\"00\",\"(?:222|444|(?:55|8\\\\d)\\\\d|666|777|999)\\\\d{4}\",[7],[[\"(\\\\d{3})(\\\\d{4})\",\"$1 $2\",[\"[24-9]\"]]]],\"NU\":[\"683\",\"00\",\"(?:[4-7]|888\\\\d)\\\\d{3}\",[4,7],[[\"(\\\\d{3})(\\\\d{4})\",\"$1 $2\",[\"8\"]]]],\"NZ\":[\"64\",\"0(?:0|161)\",\"[1289]\\\\d{9}|50\\\\d{5}(?:\\\\d{2,3})?|[27-9]\\\\d{7,8}|(?:[34]\\\\d|6[0-35-9])\\\\d{6}|8\\\\d{4,6}\",[5,6,7,8,9,10],[[\"(\\\\d{2})(\\\\d{3,8})\",\"$1 $2\",[\"8[1-79]\"],\"0$1\"],[\"(\\\\d{3})(\\\\d{2})(\\\\d{2,3})\",\"$1 $2 $3\",[\"50[036-8]|8|90\",\"50(?:[0367]|88)|8|90\"],\"0$1\"],[\"(\\\\d)(\\\\d{3})(\\\\d{4})\",\"$1 $2 $3\",[\"24|[346]|7[2-57-9]|9[2-9]\"],\"0$1\"],[\"(\\\\d{3})(\\\\d{3})(\\\\d{3,4})\",\"$1 $2 $3\",[\"2(?:10|74)|[589]\"],\"0$1\"],[\"(\\\\d{2})(\\\\d{3,4})(\\\\d{4})\",\"$1 $2 $3\",[\"1|2[028]\"],\"0$1\"],[\"(\\\\d{2})(\\\\d{3})(\\\\d{3,5})\",\"$1 $2 $3\",[\"2(?:[169]|7[0-35-9])|7\"],\"0$1\"]],\"0\",0,0,0,0,0,0,\"00\"],\"OM\":[\"968\",\"00\",\"(?:1505|[279]\\\\d{3}|500)\\\\d{4}|800\\\\d{5,6}\",[7,8,9],[[\"(\\\\d{3})(\\\\d{4,6})\",\"$1 $2\",[\"[58]\"]],[\"(\\\\d{2})(\\\\d{6})\",\"$1 $2\",[\"2\"]],[\"(\\\\d{4})(\\\\d{4})\",\"$1 $2\",[\"[179]\"]]]],\"PA\":[\"507\",\"00\",\"(?:00800|8\\\\d{3})\\\\d{6}|[68]\\\\d{7}|[1-57-9]\\\\d{6}\",[7,8,10,11],[[\"(\\\\d{3})(\\\\d{4})\",\"$1-$2\",[\"[1-57-9]\"]],[\"(\\\\d{4})(\\\\d{4})\",\"$1-$2\",[\"[68]\"]],[\"(\\\\d{3})(\\\\d{3})(\\\\d{4})\",\"$1 $2 $3\",[\"8\"]]]],\"PE\":[\"51\",\"00|19(?:1[124]|77|90)00\",\"(?:[14-8]|9\\\\d)\\\\d{7}\",[8,9],[[\"(\\\\d{3})(\\\\d{5})\",\"$1 $2\",[\"80\"],\"(0$1)\"],[\"(\\\\d)(\\\\d{7})\",\"$1 $2\",[\"1\"],\"(0$1)\"],[\"(\\\\d{2})(\\\\d{6})\",\"$1 $2\",[\"[4-8]\"],\"(0$1)\"],[\"(\\\\d{3})(\\\\d{3})(\\\\d{3})\",\"$1 $2 $3\",[\"9\"]]],\"0\",0,0,0,0,0,0,\"00\",\" Anexo \"],\"PF\":[\"689\",\"00\",\"4\\\\d{5}(?:\\\\d{2})?|8\\\\d{7,8}\",[6,8,9],[[\"(\\\\d{2})(\\\\d{2})(\\\\d{2})\",\"$1 $2 $3\",[\"44\"]],[\"(\\\\d{2})(\\\\d{2})(\\\\d{2})(\\\\d{2})\",\"$1 $2 $3 $4\",[\"4|8[7-9]\"]],[\"(\\\\d{3})(\\\\d{2})(\\\\d{2})(\\\\d{2})\",\"$1 $2 $3 $4\",[\"8\"]]]],\"PG\":[\"675\",\"00|140[1-3]\",\"(?:180|[78]\\\\d{3})\\\\d{4}|(?:[2-589]\\\\d|64)\\\\d{5}\",[7,8],[[\"(\\\\d{3})(\\\\d{4})\",\"$1 $2\",[\"18|[2-69]|85\"]],[\"(\\\\d{4})(\\\\d{4})\",\"$1 $2\",[\"[78]\"]]],0,0,0,0,0,0,0,\"00\"],\"PH\":[\"63\",\"00\",\"(?:[2-7]|9\\\\d)\\\\d{8}|2\\\\d{5}|(?:1800|8)\\\\d{7,9}\",[6,8,9,10,11,12,13],[[\"(\\\\d)(\\\\d{5})\",\"$1 $2\",[\"2\"],\"(0$1)\"],[\"(\\\\d{4})(\\\\d{4,6})\",\"$1 $2\",[\"3(?:23|39|46)|4(?:2[3-6]|[35]9|4[26]|76)|544|88[245]|(?:52|64|86)2\",\"3(?:230|397|461)|4(?:2(?:35|[46]4|51)|396|4(?:22|63)|59[347]|76[15])|5(?:221|446)|642[23]|8(?:622|8(?:[24]2|5[13]))\"],\"(0$1)\"],[\"(\\\\d{5})(\\\\d{4})\",\"$1 $2\",[\"346|4(?:27|9[35])|883\",\"3469|4(?:279|9(?:30|56))|8834\"],\"(0$1)\"],[\"(\\\\d)(\\\\d{4})(\\\\d{4})\",\"$1 $2 $3\",[\"2\"],\"(0$1)\"],[\"(\\\\d{2})(\\\\d{3})(\\\\d{4})\",\"$1 $2 $3\",[\"[3-7]|8[2-8]\"],\"(0$1)\"],[\"(\\\\d{3})(\\\\d{3})(\\\\d{4})\",\"$1 $2 $3\",[\"[89]\"],\"0$1\"],[\"(\\\\d{4})(\\\\d{3})(\\\\d{4})\",\"$1 $2 $3\",[\"1\"]],[\"(\\\\d{4})(\\\\d{1,2})(\\\\d{3})(\\\\d{4})\",\"$1 $2 $3 $4\",[\"1\"]]],\"0\"],\"PK\":[\"92\",\"00\",\"122\\\\d{6}|[24-8]\\\\d{10,11}|9(?:[013-9]\\\\d{8,10}|2(?:[01]\\\\d\\\\d|2(?:[06-8]\\\\d|1[01]))\\\\d{7})|(?:[2-8]\\\\d{3}|92(?:[0-7]\\\\d|8[1-9]))\\\\d{6}|[24-9]\\\\d{8}|[89]\\\\d{7}\",[8,9,10,11,12],[[\"(\\\\d{3})(\\\\d{3})(\\\\d{2,7})\",\"$1 $2 $3\",[\"[89]0\"],\"0$1\"],[\"(\\\\d{4})(\\\\d{5})\",\"$1 $2\",[\"1\"]],[\"(\\\\d{3})(\\\\d{6,7})\",\"$1 $2\",[\"2(?:3[2358]|4[2-4]|9[2-8])|45[3479]|54[2-467]|60[468]|72[236]|8(?:2[2-689]|3[23578]|4[3478]|5[2356])|9(?:2[2-8]|3[27-9]|4[2-6]|6[3569]|9[25-8])\",\"9(?:2[3-8]|98)|(?:2(?:3[2358]|4[2-4]|9[2-8])|45[3479]|54[2-467]|60[468]|72[236]|8(?:2[2-689]|3[23578]|4[3478]|5[2356])|9(?:22|3[27-9]|4[2-6]|6[3569]|9[25-7]))[2-9]\"],\"(0$1)\"],[\"(\\\\d{2})(\\\\d{7,8})\",\"$1 $2\",[\"(?:2[125]|4[0-246-9]|5[1-35-7]|6[1-8]|7[14]|8[16]|91)[2-9]\"],\"(0$1)\"],[\"(\\\\d{5})(\\\\d{5})\",\"$1 $2\",[\"58\"],\"(0$1)\"],[\"(\\\\d{3})(\\\\d{7})\",\"$1 $2\",[\"3\"],\"0$1\"],[\"(\\\\d{2})(\\\\d{3})(\\\\d{3})(\\\\d{3})\",\"$1 $2 $3 $4\",[\"2[125]|4[0-246-9]|5[1-35-7]|6[1-8]|7[14]|8[16]|91\"],\"(0$1)\"],[\"(\\\\d{3})(\\\\d{3})(\\\\d{3})(\\\\d{3})\",\"$1 $2 $3 $4\",[\"[24-9]\"],\"(0$1)\"]],\"0\"],\"PL\":[\"48\",\"00\",\"(?:6|8\\\\d\\\\d)\\\\d{7}|[1-9]\\\\d{6}(?:\\\\d{2})?|[26]\\\\d{5}\",[6,7,8,9,10],[[\"(\\\\d{5})\",\"$1\",[\"19\"]],[\"(\\\\d{3})(\\\\d{3})\",\"$1 $2\",[\"11|20|64\"]],[\"(\\\\d{2})(\\\\d{2})(\\\\d{3})\",\"$1 $2 $3\",[\"(?:1[2-8]|2[2-69]|3[2-4]|4[1-468]|5[24-689]|6[1-3578]|7[14-7]|8[1-79]|9[145])1\",\"(?:1[2-8]|2[2-69]|3[2-4]|4[1-468]|5[24-689]|6[1-3578]|7[14-7]|8[1-79]|9[145])19\"]],[\"(\\\\d{3})(\\\\d{2})(\\\\d{2,3})\",\"$1 $2 $3\",[\"64\"]],[\"(\\\\d{3})(\\\\d{3})(\\\\d{3})\",\"$1 $2 $3\",[\"21|39|45|5[0137]|6[0469]|7[02389]|8(?:0[14]|8)\"]],[\"(\\\\d{2})(\\\\d{3})(\\\\d{2})(\\\\d{2})\",\"$1 $2 $3 $4\",[\"1[2-8]|[2-7]|8[1-79]|9[145]\"]],[\"(\\\\d{3})(\\\\d{3})(\\\\d{3,4})\",\"$1 $2 $3\",[\"8\"]]]],\"PM\":[\"508\",\"00\",\"[45]\\\\d{5}|(?:708|8\\\\d\\\\d)\\\\d{6}\",[6,9],[[\"(\\\\d{2})(\\\\d{2})(\\\\d{2})\",\"$1 $2 $3\",[\"[45]\"],\"0$1\"],[\"(\\\\d{3})(\\\\d{3})(\\\\d{3})\",\"$1 $2 $3\",[\"7\"]],[\"(\\\\d{3})(\\\\d{2})(\\\\d{2})(\\\\d{2})\",\"$1 $2 $3 $4\",[\"8\"],\"0$1\"]],\"0\"],\"PR\":[\"1\",\"011\",\"(?:[589]\\\\d\\\\d|787)\\\\d{7}\",[10],0,\"1\",0,0,0,0,\"787|939\"],\"PS\":[\"970\",\"00\",\"[2489]2\\\\d{6}|(?:1\\\\d|5)\\\\d{8}\",[8,9,10],[[\"(\\\\d)(\\\\d{3})(\\\\d{4})\",\"$1 $2 $3\",[\"[2489]\"],\"0$1\"],[\"(\\\\d{3})(\\\\d{3})(\\\\d{3})\",\"$1 $2 $3\",[\"5\"],\"0$1\"],[\"(\\\\d{4})(\\\\d{3})(\\\\d{3})\",\"$1 $2 $3\",[\"1\"]]],\"0\"],\"PT\":[\"351\",\"00\",\"1693\\\\d{5}|(?:[26-9]\\\\d|30)\\\\d{7}\",[9],[[\"(\\\\d{2})(\\\\d{3})(\\\\d{4})\",\"$1 $2 $3\",[\"2[12]\"]],[\"(\\\\d{3})(\\\\d{3})(\\\\d{3})\",\"$1 $2 $3\",[\"16|[236-9]\"]]]],\"PW\":[\"680\",\"01[12]\",\"(?:[24-8]\\\\d\\\\d|345|900)\\\\d{4}\",[7],[[\"(\\\\d{3})(\\\\d{4})\",\"$1 $2\",[\"[2-9]\"]]]],\"PY\":[\"595\",\"00\",\"[36-8]\\\\d{5,8}|4\\\\d{6,8}|59\\\\d{6}|9\\\\d{5,10}|(?:2\\\\d|5[0-8])\\\\d{6,7}\",[6,7,8,9,10,11],[[\"(\\\\d{3})(\\\\d{3,6})\",\"$1 $2\",[\"[2-9]0\"],\"0$1\"],[\"(\\\\d{2})(\\\\d{5})\",\"$1 $2\",[\"3[289]|4[246-8]|61|7[1-3]|8[1-36]\"],\"(0$1)\"],[\"(\\\\d{3})(\\\\d{4,5})\",\"$1 $2\",[\"2[279]|3[13-5]|4[359]|5|6(?:[34]|7[1-46-8])|7[46-8]|85\"],\"(0$1)\"],[\"(\\\\d{2})(\\\\d{3})(\\\\d{3,4})\",\"$1 $2 $3\",[\"2[14-68]|3[26-9]|4[1246-8]|6(?:1|75)|7[1-35]|8[1-36]\"],\"(0$1)\"],[\"(\\\\d{2})(\\\\d{3})(\\\\d{4})\",\"$1 $2 $3\",[\"87\"]],[\"(\\\\d{3})(\\\\d{6})\",\"$1 $2\",[\"9(?:[5-79]|8[1-7])\"],\"0$1\"],[\"(\\\\d{3})(\\\\d{3})(\\\\d{3})\",\"$1 $2 $3\",[\"[2-8]\"],\"0$1\"],[\"(\\\\d{4})(\\\\d{3})(\\\\d{4})\",\"$1 $2 $3\",[\"9\"]]],\"0\"],\"QA\":[\"974\",\"00\",\"800\\\\d{4}|(?:2|800)\\\\d{6}|(?:0080|[3-7])\\\\d{7}\",[7,8,9,11],[[\"(\\\\d{3})(\\\\d{4})\",\"$1 $2\",[\"2[136]|8\"]],[\"(\\\\d{4})(\\\\d{4})\",\"$1 $2\",[\"[3-7]\"]]]],\"RE\":[\"262\",\"00\",\"709\\\\d{6}|(?:26|[689]\\\\d)\\\\d{7}\",[9],[[\"(\\\\d{3})(\\\\d{2})(\\\\d{2})(\\\\d{2})\",\"$1 $2 $3 $4\",[\"[26-9]\"],\"0$1\"]],\"0\",0,0,0,0,0,[[\"26(?:2\\\\d\\\\d|3(?:0\\\\d|1[0-6]))\\\\d{4}\"],[\"(?:69(?:2\\\\d\\\\d|3(?:[06][0-6]|1[0-3]|2[0-2]|3[0-39]|4\\\\d|5[0-5]|7[0-37]|8[0-8]|9[0-479]))|7092[0-3])\\\\d{4}\"],[\"80\\\\d{7}\"],[\"89[1-37-9]\\\\d{6}\"],0,0,0,0,[\"9(?:399[0-3]|479[0-6]|76(?:2[278]|3[0-37]))\\\\d{4}\"],[\"8(?:1[019]|2[0156]|84|90)\\\\d{6}\"]]],\"RO\":[\"40\",\"00\",\"(?:[236-8]\\\\d|90)\\\\d{7}|[23]\\\\d{5}\",[6,9],[[\"(\\\\d{3})(\\\\d{3})\",\"$1 $2\",[\"2[3-6]\",\"2[3-6]\\\\d9\"],\"0$1\"],[\"(\\\\d{2})(\\\\d{4})\",\"$1 $2\",[\"219|31\"],\"0$1\"],[\"(\\\\d{2})(\\\\d{3})(\\\\d{4})\",\"$1 $2 $3\",[\"[23]1\"],\"0$1\"],[\"(\\\\d{3})(\\\\d{3})(\\\\d{3})\",\"$1 $2 $3\",[\"[236-9]\"],\"0$1\"]],\"0\",0,0,0,0,0,0,0,\" int \"],\"RS\":[\"381\",\"00\",\"38[02-9]\\\\d{6,9}|6\\\\d{7,9}|90\\\\d{4,8}|38\\\\d{5,6}|(?:7\\\\d\\\\d|800)\\\\d{3,9}|(?:[12]\\\\d|3[0-79])\\\\d{5,10}\",[6,7,8,9,10,11,12],[[\"(\\\\d{3})(\\\\d{3,9})\",\"$1 $2\",[\"(?:2[389]|39)0|[7-9]\"],\"0$1\"],[\"(\\\\d{2})(\\\\d{5,10})\",\"$1 $2\",[\"[1-36]\"],\"0$1\"]],\"0\"],\"RU\":[\"7\",\"810\",\"8\\\\d{13}|[347-9]\\\\d{9}\",[10,14],[[\"(\\\\d{4})(\\\\d{2})(\\\\d{2})(\\\\d{2})\",\"$1 $2 $3 $4\",[\"7(?:1[0-8]|2[1-9])\",\"7(?:1(?:[0-356]2|4[29]|7|8[27])|2(?:1[23]|[2-9]2))\",\"7(?:1(?:[0-356]2|4[29]|7|8[27])|2(?:13[03-69]|62[013-9]))|72[1-57-9]2\"],\"8 ($1)\",1],[\"(\\\\d{5})(\\\\d)(\\\\d{2})(\\\\d{2})\",\"$1 $2 $3 $4\",[\"7(?:1[0-68]|2[1-9])\",\"7(?:1(?:[06][3-6]|[18]|2[35]|[3-5][3-5])|2(?:[13][3-5]|[24-689]|7[457]))\",\"7(?:1(?:0(?:[356]|4[023])|[18]|2(?:3[013-9]|5)|3[45]|43[013-79]|5(?:3[1-8]|4[1-7]|5)|6(?:3[0-35-9]|[4-6]))|2(?:1(?:3[178]|[45])|[24-689]|3[35]|7[457]))|7(?:14|23)4[0-8]|71(?:33|45)[1-79]\"],\"8 ($1)\",1],[\"(\\\\d{3})(\\\\d{3})(\\\\d{4})\",\"$1 $2 $3\",[\"7\"],\"8 ($1)\",1],[\"(\\\\d{3})(\\\\d{3})(\\\\d{2})(\\\\d{2})\",\"$1 $2-$3-$4\",[\"[349]|8(?:[02-7]|1[1-8])\"],\"8 ($1)\",1],[\"(\\\\d{4})(\\\\d{4})(\\\\d{3})(\\\\d{3})\",\"$1 $2 $3 $4\",[\"8\"],\"8 ($1)\"]],\"8\",0,0,0,0,\"[3489]\",0,\"8~10\"],\"RW\":[\"250\",\"00\",\"(?:06|[27]\\\\d\\\\d|[89]00)\\\\d{6}\",[8,9],[[\"(\\\\d{2})(\\\\d{2})(\\\\d{2})(\\\\d{2})\",\"$1 $2 $3 $4\",[\"0\"]],[\"(\\\\d{3})(\\\\d{3})(\\\\d{3})\",\"$1 $2 $3\",[\"2\"]],[\"(\\\\d{3})(\\\\d{3})(\\\\d{3})\",\"$1 $2 $3\",[\"[7-9]\"],\"0$1\"]],\"0\"],\"SA\":[\"966\",\"00\",\"(?:[15]\\\\d|800|92)\\\\d{7}\",[9,10],[[\"(\\\\d{4})(\\\\d{5})\",\"$1 $2\",[\"9\"]],[\"(\\\\d{2})(\\\\d{3})(\\\\d{4})\",\"$1 $2 $3\",[\"1\"],\"0$1\"],[\"(\\\\d{2})(\\\\d{3})(\\\\d{4})\",\"$1 $2 $3\",[\"5\"],\"0$1\"],[\"(\\\\d{3})(\\\\d{3})(\\\\d{4})\",\"$1 $2 $3\",[\"8\"]]],\"0\"],\"SB\":[\"677\",\"0[01]\",\"[6-9]\\\\d{6}|[1-6]\\\\d{4}\",[5,7],[[\"(\\\\d{2})(\\\\d{5})\",\"$1 $2\",[\"6[89]|7|8[4-9]|9(?:[1-8]|9[0-8])\"]]]],\"SC\":[\"248\",\"010|0[0-2]\",\"(?:[2489]\\\\d|64)\\\\d{5}\",[7],[[\"(\\\\d)(\\\\d{3})(\\\\d{3})\",\"$1 $2 $3\",[\"[246]|9[57]\"]]],0,0,0,0,0,0,0,\"00\"],\"SD\":[\"249\",\"00\",\"[19]\\\\d{8}\",[9],[[\"(\\\\d{2})(\\\\d{3})(\\\\d{4})\",\"$1 $2 $3\",[\"[19]\"],\"0$1\"]],\"0\"],\"SE\":[\"46\",\"00\",\"(?:[26]\\\\d\\\\d|9)\\\\d{9}|[1-9]\\\\d{8}|[1-689]\\\\d{7}|[1-4689]\\\\d{6}|2\\\\d{5}\",[6,7,8,9,10,12],[[\"(\\\\d{2})(\\\\d{2,3})(\\\\d{2})\",\"$1-$2 $3\",[\"20\"],\"0$1\",0,\"$1 $2 $3\"],[\"(\\\\d{3})(\\\\d{4})\",\"$1-$2\",[\"9(?:00|39|44|9)\"],\"0$1\",0,\"$1 $2\"],[\"(\\\\d{2})(\\\\d{3})(\\\\d{2})\",\"$1-$2 $3\",[\"[12][136]|3[356]|4[0246]|6[03]|90[1-9]\"],\"0$1\",0,\"$1 $2 $3\"],[\"(\\\\d)(\\\\d{2,3})(\\\\d{2})(\\\\d{2})\",\"$1-$2 $3 $4\",[\"8\"],\"0$1\",0,\"$1 $2 $3 $4\"],[\"(\\\\d{3})(\\\\d{2,3})(\\\\d{2})\",\"$1-$2 $3\",[\"1[2457]|2(?:[247-9]|5[0138])|3[0247-9]|4[1357-9]|5[0-35-9]|6(?:[125689]|4[02-57]|7[0-2])|9(?:[125-8]|3[02-5]|4[0-3])\"],\"0$1\",0,\"$1 $2 $3\"],[\"(\\\\d{3})(\\\\d{2,3})(\\\\d{3})\",\"$1-$2 $3\",[\"9(?:00|39|44)\"],\"0$1\",0,\"$1 $2 $3\"],[\"(\\\\d{2})(\\\\d{2,3})(\\\\d{2})(\\\\d{2})\",\"$1-$2 $3 $4\",[\"1[13689]|2[0136]|3[1356]|4[0246]|54|6[03]|90[1-9]\"],\"0$1\",0,\"$1 $2 $3 $4\"],[\"(\\\\d{2})(\\\\d{3})(\\\\d{2})(\\\\d{2})\",\"$1-$2 $3 $4\",[\"10|7\"],\"0$1\",0,\"$1 $2 $3 $4\"],[\"(\\\\d)(\\\\d{3})(\\\\d{3})(\\\\d{2})\",\"$1-$2 $3 $4\",[\"8\"],\"0$1\",0,\"$1 $2 $3 $4\"],[\"(\\\\d{3})(\\\\d{2})(\\\\d{2})(\\\\d{2})\",\"$1-$2 $3 $4\",[\"[13-5]|2(?:[247-9]|5[0138])|6(?:[124-689]|7[0-2])|9(?:[125-8]|3[02-5]|4[0-3])\"],\"0$1\",0,\"$1 $2 $3 $4\"],[\"(\\\\d{3})(\\\\d{2})(\\\\d{2})(\\\\d{3})\",\"$1-$2 $3 $4\",[\"9\"],\"0$1\",0,\"$1 $2 $3 $4\"],[\"(\\\\d{3})(\\\\d{2})(\\\\d{3})(\\\\d{2})(\\\\d{2})\",\"$1-$2 $3 $4 $5\",[\"[26]\"],\"0$1\",0,\"$1 $2 $3 $4 $5\"]],\"0\"],\"SG\":[\"65\",\"0[0-3]\\\\d\",\"(?:(?:1\\\\d|8)\\\\d\\\\d|7000)\\\\d{7}|[3689]\\\\d{7}\",[8,10,11],[[\"(\\\\d{4})(\\\\d{4})\",\"$1 $2\",[\"[369]|8(?:0[1-9]|[1-9])\"]],[\"(\\\\d{3})(\\\\d{3})(\\\\d{4})\",\"$1 $2 $3\",[\"8\"]],[\"(\\\\d{4})(\\\\d{4})(\\\\d{3})\",\"$1 $2 $3\",[\"7\"]],[\"(\\\\d{4})(\\\\d{3})(\\\\d{4})\",\"$1 $2 $3\",[\"1\"]]]],\"SH\":[\"290\",\"00\",\"(?:[256]\\\\d|8)\\\\d{3}\",[4,5],0,0,0,0,0,0,\"[256]\"],\"SI\":[\"386\",\"00|10(?:22|66|88|99)\",\"[1-7]\\\\d{7}|8\\\\d{4,7}|90\\\\d{4,6}\",[5,6,7,8],[[\"(\\\\d{2})(\\\\d{3,6})\",\"$1 $2\",[\"8[09]|9\"],\"0$1\"],[\"(\\\\d{3})(\\\\d{5})\",\"$1 $2\",[\"59|8\"],\"0$1\"],[\"(\\\\d{2})(\\\\d{3})(\\\\d{3})\",\"$1 $2 $3\",[\"[37][01]|4[0139]|51|6\"],\"0$1\"],[\"(\\\\d)(\\\\d{3})(\\\\d{2})(\\\\d{2})\",\"$1 $2 $3 $4\",[\"[1-57]\"],\"(0$1)\"]],\"0\",0,0,0,0,0,0,\"00\"],\"SJ\":[\"47\",\"00\",\"0\\\\d{4}|(?:[489]\\\\d|79)\\\\d{6}\",[5,8],0,0,0,0,0,0,\"79\"],\"SK\":[\"421\",\"00\",\"[2-689]\\\\d{8}|[2-59]\\\\d{6}|[2-5]\\\\d{5}\",[6,7,9],[[\"(\\\\d)(\\\\d{2})(\\\\d{3,4})\",\"$1 $2 $3\",[\"21\"],\"0$1\"],[\"(\\\\d{2})(\\\\d{2})(\\\\d{2,3})\",\"$1 $2 $3\",[\"[3-5][1-8]1\",\"[3-5][1-8]1[67]\"],\"0$1\"],[\"(\\\\d)(\\\\d{3})(\\\\d{3})(\\\\d{2})\",\"$1/$2 $3 $4\",[\"2\"],\"0$1\"],[\"(\\\\d{3})(\\\\d{3})(\\\\d{3})\",\"$1 $2 $3\",[\"[689]\"],\"0$1\"],[\"(\\\\d{2})(\\\\d{3})(\\\\d{2})(\\\\d{2})\",\"$1/$2 $3 $4\",[\"[3-5]\"],\"0$1\"]],\"0\"],\"SL\":[\"232\",\"00\",\"(?:[237-9]\\\\d|66)\\\\d{6}\",[8],[[\"(\\\\d{2})(\\\\d{6})\",\"$1 $2\",[\"[236-9]\"],\"(0$1)\"]],\"0\"],\"SM\":[\"378\",\"00\",\"(?:0549|[5-7]\\\\d)\\\\d{6}\",[8,10],[[\"(\\\\d{2})(\\\\d{2})(\\\\d{2})(\\\\d{2})\",\"$1 $2 $3 $4\",[\"[5-7]\"]],[\"(\\\\d{4})(\\\\d{6})\",\"$1 $2\",[\"0\"]]],0,0,\"([89]\\\\d{5})$\",\"0549$1\"],\"SN\":[\"221\",\"00\",\"(?:[378]\\\\d|93)\\\\d{7}\",[9],[[\"(\\\\d{3})(\\\\d{2})(\\\\d{2})(\\\\d{2})\",\"$1 $2 $3 $4\",[\"8\"]],[\"(\\\\d{2})(\\\\d{3})(\\\\d{2})(\\\\d{2})\",\"$1 $2 $3 $4\",[\"[379]\"]]]],\"SO\":[\"252\",\"00\",\"[346-9]\\\\d{8}|[12679]\\\\d{7}|[1-5]\\\\d{6}|[1348]\\\\d{5}\",[6,7,8,9],[[\"(\\\\d{2})(\\\\d{4})\",\"$1 $2\",[\"8[125]\"]],[\"(\\\\d{6})\",\"$1\",[\"[134]\"]],[\"(\\\\d)(\\\\d{6})\",\"$1 $2\",[\"[15]|2[0-79]|3[0-46-8]|4[0-7]\"]],[\"(\\\\d)(\\\\d{7})\",\"$1 $2\",[\"(?:2|90)4|[67]\"]],[\"(\\\\d{3})(\\\\d{3})(\\\\d{3})\",\"$1 $2 $3\",[\"[348]|64|79|90\"]],[\"(\\\\d{2})(\\\\d{5,7})\",\"$1 $2\",[\"1|28|6[0-35-9]|7[67]|9[2-9]\"]]],\"0\"],\"SR\":[\"597\",\"00\",\"(?:[2-5]|[6-8]\\\\d|90)\\\\d{5}\",[6,7],[[\"(\\\\d{2})(\\\\d{2})(\\\\d{2})\",\"$1-$2-$3\",[\"56\"]],[\"(\\\\d{3})(\\\\d{3})\",\"$1-$2\",[\"[2-5]\"]],[\"(\\\\d{3})(\\\\d{4})\",\"$1-$2\",[\"[6-9]\"]]]],\"SS\":[\"211\",\"00\",\"[19]\\\\d{8}\",[9],[[\"(\\\\d{3})(\\\\d{3})(\\\\d{3})\",\"$1 $2 $3\",[\"[19]\"],\"0$1\"]],\"0\"],\"ST\":[\"239\",\"00\",\"(?:22|9\\\\d)\\\\d{5}\",[7],[[\"(\\\\d{3})(\\\\d{4})\",\"$1 $2\",[\"[29]\"]]]],\"SV\":[\"503\",\"00\",\"[25-7]\\\\d{7}|(?:80\\\\d|900)\\\\d{4}(?:\\\\d{4})?\",[7,8,11],[[\"(\\\\d{3})(\\\\d{4})\",\"$1 $2\",[\"[89]\"]],[\"(\\\\d{4})(\\\\d{4})\",\"$1 $2\",[\"[25-7]\"]],[\"(\\\\d{3})(\\\\d{4})(\\\\d{4})\",\"$1 $2 $3\",[\"[89]\"]]]],\"SX\":[\"1\",\"011\",\"7215\\\\d{6}|(?:[58]\\\\d\\\\d|900)\\\\d{7}\",[10],0,\"1\",0,\"(5\\\\d{6})$|1\",\"721$1\",0,\"721\"],\"SY\":[\"963\",\"00\",\"[1-359]\\\\d{8}|[1-5]\\\\d{7}\",[8,9],[[\"(\\\\d{2})(\\\\d{3})(\\\\d{3,4})\",\"$1 $2 $3\",[\"[1-4]|5[1-3]\"],\"0$1\",1],[\"(\\\\d{3})(\\\\d{3})(\\\\d{3})\",\"$1 $2 $3\",[\"[59]\"],\"0$1\",1]],\"0\"],\"SZ\":[\"268\",\"00\",\"0800\\\\d{4}|(?:[237]\\\\d|900)\\\\d{6}\",[8,9],[[\"(\\\\d{4})(\\\\d{4})\",\"$1 $2\",[\"[0237]\"]],[\"(\\\\d{5})(\\\\d{4})\",\"$1 $2\",[\"9\"]]]],\"TA\":[\"290\",\"00\",\"8\\\\d{3}\",[4],0,0,0,0,0,0,\"8\"],\"TC\":[\"1\",\"011\",\"(?:[58]\\\\d\\\\d|649|900)\\\\d{7}\",[10],0,\"1\",0,\"([2-479]\\\\d{6})$|1\",\"649$1\",0,\"649\"],\"TD\":[\"235\",\"00|16\",\"(?:22|30|[689]\\\\d|77)\\\\d{6}\",[8],[[\"(\\\\d{2})(\\\\d{2})(\\\\d{2})(\\\\d{2})\",\"$1 $2 $3 $4\",[\"[236-9]\"]]],0,0,0,0,0,0,0,\"00\"],\"TG\":[\"228\",\"00\",\"[279]\\\\d{7}\",[8],[[\"(\\\\d{2})(\\\\d{2})(\\\\d{2})(\\\\d{2})\",\"$1 $2 $3 $4\",[\"[279]\"]]]],\"TH\":[\"66\",\"00[1-9]\",\"(?:001800|[2-57]|[689]\\\\d)\\\\d{7}|1\\\\d{7,9}\",[8,9,10,13],[[\"(\\\\d)(\\\\d{3})(\\\\d{4})\",\"$1 $2 $3\",[\"2\"],\"0$1\"],[\"(\\\\d{2})(\\\\d{3})(\\\\d{3,4})\",\"$1 $2 $3\",[\"[13-9]\"],\"0$1\"],[\"(\\\\d{4})(\\\\d{3})(\\\\d{3})\",\"$1 $2 $3\",[\"1\"]]],\"0\"],\"TJ\":[\"992\",\"810\",\"(?:[0-57-9]\\\\d|66)\\\\d{7}\",[9],[[\"(\\\\d{6})(\\\\d)(\\\\d{2})\",\"$1 $2 $3\",[\"331\",\"3317\"]],[\"(\\\\d{3})(\\\\d{2})(\\\\d{4})\",\"$1 $2 $3\",[\"44[02-479]|[34]7\"]],[\"(\\\\d{4})(\\\\d)(\\\\d{4})\",\"$1 $2 $3\",[\"3(?:[1245]|3[12])\"]],[\"(\\\\d{2})(\\\\d{3})(\\\\d{4})\",\"$1 $2 $3\",[\"\\\\d\"]]],0,0,0,0,0,0,0,\"8~10\"],\"TK\":[\"690\",\"00\",\"[2-47]\\\\d{3,6}\",[4,5,6,7]],\"TL\":[\"670\",\"00\",\"7\\\\d{7}|(?:[2-47]\\\\d|[89]0)\\\\d{5}\",[7,8],[[\"(\\\\d{3})(\\\\d{4})\",\"$1 $2\",[\"[2-489]|70\"]],[\"(\\\\d{4})(\\\\d{4})\",\"$1 $2\",[\"7\"]]]],\"TM\":[\"993\",\"810\",\"(?:[1-6]\\\\d|71)\\\\d{6}\",[8],[[\"(\\\\d{2})(\\\\d{2})(\\\\d{2})(\\\\d{2})\",\"$1 $2-$3-$4\",[\"12\"],\"(8 $1)\"],[\"(\\\\d{3})(\\\\d)(\\\\d{2})(\\\\d{2})\",\"$1 $2-$3-$4\",[\"[1-5]\"],\"(8 $1)\"],[\"(\\\\d{2})(\\\\d{6})\",\"$1 $2\",[\"[67]\"],\"8 $1\"]],\"8\",0,0,0,0,0,0,\"8~10\"],\"TN\":[\"216\",\"00\",\"[2-57-9]\\\\d{7}\",[8],[[\"(\\\\d{2})(\\\\d{3})(\\\\d{3})\",\"$1 $2 $3\",[\"[2-57-9]\"]]]],\"TO\":[\"676\",\"00\",\"(?:0800|(?:[5-8]\\\\d\\\\d|999)\\\\d)\\\\d{3}|[2-8]\\\\d{4}\",[5,7],[[\"(\\\\d{2})(\\\\d{3})\",\"$1-$2\",[\"[2-4]|50|6[09]|7[0-24-69]|8[05]\"]],[\"(\\\\d{4})(\\\\d{3})\",\"$1 $2\",[\"0\"]],[\"(\\\\d{3})(\\\\d{4})\",\"$1 $2\",[\"[5-9]\"]]]],\"TR\":[\"90\",\"00\",\"4\\\\d{6}|8\\\\d{11,12}|(?:[2-58]\\\\d\\\\d|900)\\\\d{7}\",[7,10,12,13],[[\"(\\\\d{3})(\\\\d{3})(\\\\d{4})\",\"$1 $2 $3\",[\"512|8[01589]|90\"],\"0$1\",1],[\"(\\\\d{3})(\\\\d{3})(\\\\d{2})(\\\\d{2})\",\"$1 $2 $3 $4\",[\"5(?:[0-579]|61)\",\"5(?:[0-579]|61[06])\",\"5(?:[0-579]|61[06]1)\"],\"0$1\",1],[\"(\\\\d{3})(\\\\d{3})(\\\\d{2})(\\\\d{2})\",\"$1 $2 $3 $4\",[\"[24][1-8]|3[1-9]\"],\"(0$1)\",1],[\"(\\\\d{3})(\\\\d{3})(\\\\d{6,7})\",\"$1 $2 $3\",[\"80\"],\"0$1\",1]],\"0\"],\"TT\":[\"1\",\"011\",\"(?:[58]\\\\d\\\\d|900)\\\\d{7}\",[10],0,\"1\",0,\"([2-46-8]\\\\d{6})$|1\",\"868$1\",0,\"868\"],\"TV\":[\"688\",\"00\",\"(?:2|7\\\\d\\\\d|90)\\\\d{4}\",[5,6,7],[[\"(\\\\d{2})(\\\\d{3})\",\"$1 $2\",[\"2\"]],[\"(\\\\d{2})(\\\\d{4})\",\"$1 $2\",[\"90\"]],[\"(\\\\d{2})(\\\\d{5})\",\"$1 $2\",[\"7\"]]]],\"TW\":[\"886\",\"0(?:0[25-79]|19)\",\"[2-689]\\\\d{8}|7\\\\d{9,10}|[2-8]\\\\d{7}|2\\\\d{6}\",[7,8,9,10,11],[[\"(\\\\d{2})(\\\\d)(\\\\d{4})\",\"$1 $2 $3\",[\"202\"],\"0$1\"],[\"(\\\\d{2})(\\\\d{3})(\\\\d{3,4})\",\"$1 $2 $3\",[\"[258]0\"],\"0$1\"],[\"(\\\\d)(\\\\d{3,4})(\\\\d{4})\",\"$1 $2 $3\",[\"[23568]|4(?:0[02-48]|[1-47-9])|7[1-9]\",\"[23568]|4(?:0[2-48]|[1-47-9])|(?:400|7)[1-9]\"],\"0$1\"],[\"(\\\\d{3})(\\\\d{3})(\\\\d{3})\",\"$1 $2 $3\",[\"[49]\"],\"0$1\"],[\"(\\\\d{2})(\\\\d{4})(\\\\d{4,5})\",\"$1 $2 $3\",[\"7\"],\"0$1\"]],\"0\",0,0,0,0,0,0,0,\"#\"],\"TZ\":[\"255\",\"00[056]\",\"(?:[25-8]\\\\d|41|90)\\\\d{7}\",[9],[[\"(\\\\d{3})(\\\\d{2})(\\\\d{4})\",\"$1 $2 $3\",[\"[89]\"],\"0$1\"],[\"(\\\\d{2})(\\\\d{3})(\\\\d{4})\",\"$1 $2 $3\",[\"[24]\"],\"0$1\"],[\"(\\\\d{2})(\\\\d{7})\",\"$1 $2\",[\"5\"]],[\"(\\\\d{3})(\\\\d{3})(\\\\d{3})\",\"$1 $2 $3\",[\"[67]\"],\"0$1\"]],\"0\"],\"UA\":[\"380\",\"00\",\"[89]\\\\d{9}|[3-9]\\\\d{8}\",[9,10],[[\"(\\\\d{3})(\\\\d{3})(\\\\d{3})\",\"$1 $2 $3\",[\"6[12][29]|(?:3[1-8]|4[136-8]|5[12457]|6[49])2|(?:56|65)[24]\",\"6[12][29]|(?:35|4[1378]|5[12457]|6[49])2|(?:56|65)[24]|(?:3[1-46-8]|46)2[013-9]\"],\"0$1\"],[\"(\\\\d{4})(\\\\d{5})\",\"$1 $2\",[\"3[1-8]|4(?:[1367]|[45][6-9]|8[4-6])|5(?:[1-5]|6[0135689]|7[4-6])|6(?:[12][3-7]|[459])\",\"3[1-8]|4(?:[1367]|[45][6-9]|8[4-6])|5(?:[1-5]|6(?:[015689]|3[02389])|7[4-6])|6(?:[12][3-7]|[459])\"],\"0$1\"],[\"(\\\\d{2})(\\\\d{3})(\\\\d{4})\",\"$1 $2 $3\",[\"[3-7]|89|9[1-9]\"],\"0$1\"],[\"(\\\\d{3})(\\\\d{3})(\\\\d{3,4})\",\"$1 $2 $3\",[\"[89]\"],\"0$1\"]],\"0\",0,0,0,0,0,0,\"0~0\"],\"UG\":[\"256\",\"00[057]\",\"800\\\\d{6}|(?:[29]0|[347]\\\\d)\\\\d{7}\",[9],[[\"(\\\\d{4})(\\\\d{5})\",\"$1 $2\",[\"202\",\"2024\"],\"0$1\"],[\"(\\\\d{3})(\\\\d{6})\",\"$1 $2\",[\"[27-9]|4(?:6[45]|[7-9])\"],\"0$1\"],[\"(\\\\d{2})(\\\\d{7})\",\"$1 $2\",[\"[34]\"],\"0$1\"]],\"0\"],\"US\":[\"1\",\"011\",\"[2-9]\\\\d{9}|3\\\\d{6}\",[10],[[\"(\\\\d{3})(\\\\d{4})\",\"$1-$2\",[\"310\"],0,1],[\"(\\\\d{3})(\\\\d{3})(\\\\d{4})\",\"($1) $2-$3\",[\"[2-9]\"],0,1,\"$1-$2-$3\"]],\"1\",0,0,0,0,0,[[\"(?:274[27]|(?:472|983)[2-47-9])\\\\d{6}|(?:2(?:0[1-35-9]|1[02-9]|2[03-57-9]|3[1459]|4[08]|5[1-46]|6[0279]|7[0269]|8[13])|3(?:0[1-57-9]|1[02-9]|2[013-79]|3[0-24679]|4[167]|5[0-3]|6[01349]|8[056])|4(?:0[124-9]|1[02-579]|2[3-5]|3[0245]|4[023578]|58|6[349]|7[0589]|8[04])|5(?:0[1-57-9]|1[0235-8]|20|3[0149]|4[01]|5[179]|6[1-47]|7[0-5]|8[0256])|6(?:0[1-35-9]|1[024-9]|2[03689]|3[016]|4[0156]|5[01679]|6[0-279]|78|8[0-269])|7(?:0[1-46-8]|1[2-9]|2[04-8]|3[0-247]|4[0378]|5[47]|6[02359]|7[0-59]|8[156])|8(?:0[1-68]|1[02-8]|2[0168]|3[0-2589]|4[03578]|5[046-9]|6[02-5]|7[028])|9(?:0[1346-9]|1[02-9]|2[0589]|3[0146-8]|4[01357-9]|5[12469]|7[0-3589]|8[04-69]))[2-9]\\\\d{6}\"],[\"\"],[\"8(?:00|33|44|55|66|77|88)[2-9]\\\\d{6}\"],[\"900[2-9]\\\\d{6}\"],[\"52(?:3(?:[2-46-9][02-9]\\\\d|5(?:[02-46-9]\\\\d|5[0-46-9]))|4(?:[2-478][02-9]\\\\d|5(?:[034]\\\\d|2[024-9]|5[0-46-9])|6(?:0[1-9]|[2-9]\\\\d)|9(?:[05-9]\\\\d|2[0-5]|49)))\\\\d{4}|52[34][2-9]1[02-9]\\\\d{4}|5(?:00|2[125-9]|3[23]|44|66|77|88)[2-9]\\\\d{6}\"]]],\"UY\":[\"598\",\"0(?:0|1[3-9]\\\\d)\",\"0004\\\\d{2,9}|[1249]\\\\d{7}|2\\\\d{3,4}|(?:[49]\\\\d|80)\\\\d{5}\",[4,5,6,7,8,9,10,11,12,13],[[\"(\\\\d{4,5})\",\"$1\",[\"21\"]],[\"(\\\\d{3})(\\\\d{3,4})\",\"$1 $2\",[\"0\"]],[\"(\\\\d{3})(\\\\d{4})\",\"$1 $2\",[\"[49]0|8\"],\"0$1\"],[\"(\\\\d{2})(\\\\d{3})(\\\\d{3})\",\"$1 $2 $3\",[\"9\"],\"0$1\"],[\"(\\\\d{4})(\\\\d{4})\",\"$1 $2\",[\"[124]\"]],[\"(\\\\d{3})(\\\\d{3})(\\\\d{2,4})\",\"$1 $2 $3\",[\"0\"]],[\"(\\\\d{3})(\\\\d{3})(\\\\d{3})(\\\\d{2,4})\",\"$1 $2 $3 $4\",[\"0\"]]],\"0\",0,0,0,0,0,0,\"00\",\" int. \"],\"UZ\":[\"998\",\"00\",\"(?:20|33|[5-9]\\\\d)\\\\d{7}\",[9],[[\"(\\\\d{2})(\\\\d{3})(\\\\d{2})(\\\\d{2})\",\"$1 $2 $3 $4\",[\"[235-9]\"]]]],\"VA\":[\"39\",\"00\",\"0\\\\d{5,10}|3[0-8]\\\\d{7,10}|55\\\\d{8}|8\\\\d{5}(?:\\\\d{2,4})?|(?:1\\\\d|39)\\\\d{7,8}\",[6,7,8,9,10,11,12],0,0,0,0,0,0,\"06698\"],\"VC\":[\"1\",\"011\",\"(?:[58]\\\\d\\\\d|784|900)\\\\d{7}\",[10],0,\"1\",0,\"([2-7]\\\\d{6})$|1\",\"784$1\",0,\"784\"],\"VE\":[\"58\",\"00\",\"[68]00\\\\d{7}|(?:[24]\\\\d|[59]0)\\\\d{8}\",[10],[[\"(\\\\d{3})(\\\\d{7})\",\"$1-$2\",[\"[24-689]\"],\"0$1\"]],\"0\"],\"VG\":[\"1\",\"011\",\"(?:284|[58]\\\\d\\\\d|900)\\\\d{7}\",[10],0,\"1\",0,\"([2-578]\\\\d{6})$|1\",\"284$1\",0,\"284\"],\"VI\":[\"1\",\"011\",\"[58]\\\\d{9}|(?:34|90)0\\\\d{7}\",[10],0,\"1\",0,\"([2-9]\\\\d{6})$|1\",\"340$1\",0,\"340\"],\"VN\":[\"84\",\"00\",\"[12]\\\\d{9}|[135-9]\\\\d{8}|[16]\\\\d{7}|[16-8]\\\\d{6}\",[7,8,9,10],[[\"(\\\\d{2})(\\\\d{5})\",\"$1 $2\",[\"80\"],\"0$1\",1],[\"(\\\\d{4})(\\\\d{4,6})\",\"$1 $2\",[\"1\"],0,1],[\"(\\\\d{2})(\\\\d{3})(\\\\d{2})(\\\\d{2})\",\"$1 $2 $3 $4\",[\"6\"],\"0$1\",1],[\"(\\\\d{3})(\\\\d{3})(\\\\d{3})\",\"$1 $2 $3\",[\"[357-9]\"],\"0$1\",1],[\"(\\\\d{2})(\\\\d{4})(\\\\d{4})\",\"$1 $2 $3\",[\"2[48]\"],\"0$1\",1],[\"(\\\\d{3})(\\\\d{4})(\\\\d{3})\",\"$1 $2 $3\",[\"2\"],\"0$1\",1]],\"0\"],\"VU\":[\"678\",\"00\",\"[57-9]\\\\d{6}|(?:[238]\\\\d|48)\\\\d{3}\",[5,7],[[\"(\\\\d{3})(\\\\d{4})\",\"$1 $2\",[\"[57-9]\"]]]],\"WF\":[\"681\",\"00\",\"(?:40|72|8\\\\d{4})\\\\d{4}|[89]\\\\d{5}\",[6,9],[[\"(\\\\d{2})(\\\\d{2})(\\\\d{2})\",\"$1 $2 $3\",[\"[47-9]\"]],[\"(\\\\d{3})(\\\\d{2})(\\\\d{2})(\\\\d{2})\",\"$1 $2 $3 $4\",[\"8\"]]]],\"WS\":[\"685\",\"0\",\"(?:[2-6]|8\\\\d{5})\\\\d{4}|[78]\\\\d{6}|[68]\\\\d{5}\",[5,6,7,10],[[\"(\\\\d{5})\",\"$1\",[\"[2-5]|6[1-9]\"]],[\"(\\\\d{3})(\\\\d{3,7})\",\"$1 $2\",[\"[68]\"]],[\"(\\\\d{2})(\\\\d{5})\",\"$1 $2\",[\"7\"]]]],\"XK\":[\"383\",\"00\",\"2\\\\d{7,8}|3\\\\d{7,11}|(?:4\\\\d\\\\d|[89]00)\\\\d{5}\",[8,9,10,11,12],[[\"(\\\\d{3})(\\\\d{5})\",\"$1 $2\",[\"[89]\"],\"0$1\"],[\"(\\\\d{2})(\\\\d{3})(\\\\d{3})\",\"$1 $2 $3\",[\"[2-4]\"],\"0$1\"],[\"(\\\\d{3})(\\\\d{3})(\\\\d{3})\",\"$1 $2 $3\",[\"2|39\"],\"0$1\"],[\"(\\\\d{2})(\\\\d{7,10})\",\"$1 $2\",[\"3\"],\"0$1\"]],\"0\"],\"YE\":[\"967\",\"00\",\"(?:1|7\\\\d)\\\\d{7}|[1-7]\\\\d{6}\",[7,8,9],[[\"(\\\\d)(\\\\d{3})(\\\\d{3,4})\",\"$1 $2 $3\",[\"[1-6]|7(?:[24-6]|8[0-7])\"],\"0$1\"],[\"(\\\\d{3})(\\\\d{3})(\\\\d{3})\",\"$1 $2 $3\",[\"7\"],\"0$1\"]],\"0\"],\"YT\":[\"262\",\"00\",\"7093\\\\d{5}|(?:80|9\\\\d)\\\\d{7}|(?:26|63)9\\\\d{6}\",[9],0,\"0\",0,0,0,0,0,[[\"269(?:0[0-467]|15|5[0-4]|6\\\\d|[78]0)\\\\d{4}\"],[\"(?:639(?:0[0-79]|1[019]|[267]\\\\d|3[09]|40|5[05-9]|9[04-79])|7093[5-7])\\\\d{4}\"],[\"80\\\\d{7}\"],0,0,0,0,0,[\"9(?:(?:39|47)8[01]|769\\\\d)\\\\d{4}\"]]],\"ZA\":[\"27\",\"00\",\"[1-79]\\\\d{8}|8\\\\d{4,9}\",[5,6,7,8,9,10],[[\"(\\\\d{2})(\\\\d{3,4})\",\"$1 $2\",[\"8[1-4]\"],\"0$1\"],[\"(\\\\d{2})(\\\\d{3})(\\\\d{2,3})\",\"$1 $2 $3\",[\"8[1-4]\"],\"0$1\"],[\"(\\\\d{3})(\\\\d{3})(\\\\d{3})\",\"$1 $2 $3\",[\"860\"],\"0$1\"],[\"(\\\\d{2})(\\\\d{3})(\\\\d{4})\",\"$1 $2 $3\",[\"[1-9]\"],\"0$1\"],[\"(\\\\d{3})(\\\\d{3})(\\\\d{4})\",\"$1 $2 $3\",[\"8\"],\"0$1\"]],\"0\"],\"ZM\":[\"260\",\"00\",\"800\\\\d{6}|(?:21|[579]\\\\d|63)\\\\d{7}\",[9],[[\"(\\\\d{3})(\\\\d{3})(\\\\d{3})\",\"$1 $2 $3\",[\"[28]\"],\"0$1\"],[\"(\\\\d{2})(\\\\d{7})\",\"$1 $2\",[\"[579]\"],\"0$1\"]],\"0\"],\"ZW\":[\"263\",\"00\",\"2(?:[0-57-9]\\\\d{6,8}|6[0-24-9]\\\\d{6,7})|[38]\\\\d{9}|[35-8]\\\\d{8}|[3-6]\\\\d{7}|[1-689]\\\\d{6}|[1-3569]\\\\d{5}|[1356]\\\\d{4}\",[5,6,7,8,9,10],[[\"(\\\\d{3})(\\\\d{3,5})\",\"$1 $2\",[\"2(?:0[45]|2[278]|[49]8)|3(?:[09]8|17)|6(?:[29]8|37|75)|[23][78]|(?:33|5[15]|6[68])[78]\"],\"0$1\"],[\"(\\\\d)(\\\\d{3})(\\\\d{2,4})\",\"$1 $2 $3\",[\"[49]\"],\"0$1\"],[\"(\\\\d{3})(\\\\d{4})\",\"$1 $2\",[\"80\"],\"0$1\"],[\"(\\\\d{2})(\\\\d{7})\",\"$1 $2\",[\"24|8[13-59]|(?:2[05-79]|39|5[45]|6[15-8])2\",\"2(?:02[014]|4|[56]20|[79]2)|392|5(?:42|525)|6(?:[16-8]21|52[013])|8[13-59]\"],\"(0$1)\"],[\"(\\\\d{2})(\\\\d{3})(\\\\d{4})\",\"$1 $2 $3\",[\"7\"],\"0$1\"],[\"(\\\\d{3})(\\\\d{3})(\\\\d{3,4})\",\"$1 $2 $3\",[\"2(?:1[39]|2[0157]|[378]|[56][14])|3(?:12|29)\",\"2(?:1[39]|2[0157]|[378]|[56][14])|3(?:123|29)\"],\"0$1\"],[\"(\\\\d{4})(\\\\d{6})\",\"$1 $2\",[\"8\"],\"0$1\"],[\"(\\\\d{2})(\\\\d{3,5})\",\"$1 $2\",[\"1|2(?:0[0-36-9]|12|29|[56])|3(?:1[0-689]|[24-6])|5(?:[0236-9]|1[2-4])|6(?:[013-59]|7[0-46-9])|(?:33|55|6[68])[0-69]|(?:29|3[09]|62)[0-79]\"],\"0$1\"],[\"(\\\\d{2})(\\\\d{3})(\\\\d{3,4})\",\"$1 $2 $3\",[\"29[013-9]|39|54\"],\"0$1\"],[\"(\\\\d{4})(\\\\d{3,5})\",\"$1 $2\",[\"(?:25|54)8\",\"258|5483\"],\"0$1\"]],\"0\"]},\"nonGeographic\":{\"800\":[\"800\",0,\"(?:00|[1-9]\\\\d)\\\\d{6}\",[8],[[\"(\\\\d{4})(\\\\d{4})\",\"$1 $2\",[\"\\\\d\"]]],0,0,0,0,0,0,[0,0,[\"(?:00|[1-9]\\\\d)\\\\d{6}\"]]],\"808\":[\"808\",0,\"[1-9]\\\\d{7}\",[8],[[\"(\\\\d{4})(\\\\d{4})\",\"$1 $2\",[\"[1-9]\"]]],0,0,0,0,0,0,[0,0,0,0,0,0,0,0,0,[\"[1-9]\\\\d{7}\"]]],\"870\":[\"870\",0,\"7\\\\d{11}|[235-7]\\\\d{8}\",[9,12],[[\"(\\\\d{3})(\\\\d{3})(\\\\d{3})\",\"$1 $2 $3\",[\"[235-7]\"]]],0,0,0,0,0,0,[0,[\"(?:[356]|774[45])\\\\d{8}|7[6-8]\\\\d{7}\"],0,0,0,0,0,0,[\"2\\\\d{8}\",[9]]]],\"878\":[\"878\",0,\"10\\\\d{10}\",[12],[[\"(\\\\d{2})(\\\\d{5})(\\\\d{5})\",\"$1 $2 $3\",[\"1\"]]],0,0,0,0,0,0,[0,0,0,0,0,0,0,0,[\"10\\\\d{10}\"]]],\"881\":[\"881\",0,\"6\\\\d{9}|[0-36-9]\\\\d{8}\",[9,10],[[\"(\\\\d)(\\\\d{3})(\\\\d{5})\",\"$1 $2 $3\",[\"[0-37-9]\"]],[\"(\\\\d)(\\\\d{3})(\\\\d{5,6})\",\"$1 $2 $3\",[\"6\"]]],0,0,0,0,0,0,[0,[\"6\\\\d{9}|[0-36-9]\\\\d{8}\"]]],\"882\":[\"882\",0,\"[13]\\\\d{6}(?:\\\\d{2,5})?|[19]\\\\d{7}|(?:[25]\\\\d\\\\d|4)\\\\d{7}(?:\\\\d{2})?\",[7,8,9,10,11,12],[[\"(\\\\d{2})(\\\\d{5})\",\"$1 $2\",[\"16|342\"]],[\"(\\\\d{2})(\\\\d{6})\",\"$1 $2\",[\"49\"]],[\"(\\\\d{2})(\\\\d{2})(\\\\d{4})\",\"$1 $2 $3\",[\"1[36]|9\"]],[\"(\\\\d{2})(\\\\d{4})(\\\\d{3})\",\"$1 $2 $3\",[\"3[23]\"]],[\"(\\\\d{2})(\\\\d{3,4})(\\\\d{4})\",\"$1 $2 $3\",[\"16\"]],[\"(\\\\d{2})(\\\\d{4})(\\\\d{4})\",\"$1 $2 $3\",[\"10|23|3(?:[15]|4[57])|4|5[12]\"]],[\"(\\\\d{3})(\\\\d{4})(\\\\d{4})\",\"$1 $2 $3\",[\"34\"]],[\"(\\\\d{2})(\\\\d{4,5})(\\\\d{5})\",\"$1 $2 $3\",[\"[1-35]\"]]],0,0,0,0,0,0,[0,[\"342\\\\d{4}|(?:337|49)\\\\d{6}|(?:3(?:2|47|7\\\\d{3})|5(?:0\\\\d{3}|2[0-2]))\\\\d{7}\",[7,8,9,10,12]],0,0,0,[\"348[57]\\\\d{7}\",[11]],0,0,[\"1(?:3(?:0[0347]|[13][0139]|2[035]|4[013568]|6[0459]|7[06]|8[15-8]|9[0689])\\\\d{4}|6\\\\d{5,10})|(?:345\\\\d|9[89])\\\\d{6}|(?:10|2(?:3|85\\\\d)|3(?:[15]|[69]\\\\d\\\\d)|4[15-8]|51)\\\\d{8}\"]]],\"883\":[\"883\",0,\"(?:[1-4]\\\\d|51)\\\\d{6,10}\",[8,9,10,11,12],[[\"(\\\\d{3})(\\\\d{3})(\\\\d{2,8})\",\"$1 $2 $3\",[\"[14]|2[24-689]|3[02-689]|51[24-9]\"]],[\"(\\\\d{3})(\\\\d{3})(\\\\d{3})\",\"$1 $2 $3\",[\"510\"]],[\"(\\\\d{3})(\\\\d{3})(\\\\d{4})\",\"$1 $2 $3\",[\"21\"]],[\"(\\\\d{4})(\\\\d{4})(\\\\d{4})\",\"$1 $2 $3\",[\"51[13]\"]],[\"(\\\\d{3})(\\\\d{3})(\\\\d{3})(\\\\d{3})\",\"$1 $2 $3 $4\",[\"[235]\"]]],0,0,0,0,0,0,[0,0,0,0,0,0,0,0,[\"(?:2(?:00\\\\d\\\\d|10)|(?:370[1-9]|51\\\\d0)\\\\d)\\\\d{7}|51(?:00\\\\d{5}|[24-9]0\\\\d{4,7})|(?:1[0-79]|2[24-689]|3[02-689]|4[0-4])0\\\\d{5,9}\"]]],\"888\":[\"888\",0,\"\\\\d{11}\",[11],[[\"(\\\\d{3})(\\\\d{3})(\\\\d{5})\",\"$1 $2 $3\"]],0,0,0,0,0,0,[0,0,0,0,0,0,[\"\\\\d{11}\"]]],\"979\":[\"979\",0,\"[1359]\\\\d{8}\",[9],[[\"(\\\\d)(\\\\d{4})(\\\\d{4})\",\"$1 $2 $3\",[\"[1359]\"]]],0,0,0,0,0,0,[0,0,0,[\"[1359]\\\\d{8}\"]]]}}","// Importing from a \".js\" file is a workaround for Node.js \"ES Modules\"\r\n// importing system which is even uncapable of importing \"*.json\" files.\r\nimport metadata from '../../metadata.min.json.js'\r\n\r\nexport default function withMetadataArgument(func, _arguments) {\r\n\tvar args = Array.prototype.slice.call(_arguments)\r\n\targs.push(metadata)\r\n\treturn func.apply(this, args)\r\n}","// Copy-pasted from:\n// https://github.com/substack/semver-compare/blob/master/index.js\n//\n// Inlining this function because some users reported issues with\n// importing from `semver-compare` in a browser with ES6 \"native\" modules.\n//\n// Fixes `semver-compare` not being able to compare versions with alpha/beta/etc \"tags\".\n// https://github.com/catamphetamine/libphonenumber-js/issues/381\nexport default function (a, b) {\n a = a.split('-');\n b = b.split('-');\n var pa = a[0].split('.');\n var pb = b[0].split('.');\n for (var i = 0; i < 3; i++) {\n var na = Number(pa[i]);\n var nb = Number(pb[i]);\n if (na > nb) return 1;\n if (nb > na) return -1;\n if (!isNaN(na) && isNaN(nb)) return 1;\n if (isNaN(na) && !isNaN(nb)) return -1;\n }\n if (a[1] && b[1]) {\n return a[1] > b[1] ? 1 : a[1] < b[1] ? -1 : 0;\n }\n return !a[1] && b[1] ? 1 : a[1] && !b[1] ? -1 : 0;\n}\n//# sourceMappingURL=semver-compare.js.map","var objectConstructor = {}.constructor;\nexport default function isObject(object) {\n return object !== undefined && object !== null && object.constructor === objectConstructor;\n}\n//# sourceMappingURL=isObject.js.map","function _readOnlyError(r) { throw new TypeError('\"' + r + '\" is read-only'); }\nfunction _typeof(o) { \"@babel/helpers - typeof\"; return _typeof = \"function\" == typeof Symbol && \"symbol\" == typeof Symbol.iterator ? function (o) { return typeof o; } : function (o) { return o && \"function\" == typeof Symbol && o.constructor === Symbol && o !== Symbol.prototype ? \"symbol\" : typeof o; }, _typeof(o); }\nfunction _classCallCheck(a, n) { if (!(a instanceof n)) throw new TypeError(\"Cannot call a class as a function\"); }\nfunction _defineProperties(e, r) { for (var t = 0; t < r.length; t++) { var o = r[t]; o.enumerable = o.enumerable || !1, o.configurable = !0, \"value\" in o && (o.writable = !0), Object.defineProperty(e, _toPropertyKey(o.key), o); } }\nfunction _createClass(e, r, t) { return r && _defineProperties(e.prototype, r), t && _defineProperties(e, t), Object.defineProperty(e, \"prototype\", { writable: !1 }), e; }\nfunction _toPropertyKey(t) { var i = _toPrimitive(t, \"string\"); return \"symbol\" == _typeof(i) ? i : i + \"\"; }\nfunction _toPrimitive(t, r) { if (\"object\" != _typeof(t) || !t) return t; var e = t[Symbol.toPrimitive]; if (void 0 !== e) { var i = e.call(t, r || \"default\"); if (\"object\" != _typeof(i)) return i; throw new TypeError(\"@@toPrimitive must return a primitive value.\"); } return (\"string\" === r ? String : Number)(t); }\nimport compare from './tools/semver-compare.js';\nimport isObject from './helpers/isObject.js';\n\n// Added \"possibleLengths\" and renamed\n// \"country_phone_code_to_countries\" to \"country_calling_codes\".\nvar V2 = '1.0.18';\n\n// Added \"idd_prefix\" and \"default_idd_prefix\".\nvar V3 = '1.2.0';\n\n// Moved `001` country code to \"nonGeographic\" section of metadata.\nvar V4 = '1.7.35';\nvar DEFAULT_EXT_PREFIX = ' ext. ';\nvar CALLING_CODE_REG_EXP = /^\\d+$/;\n\n/**\r\n * See: https://gitlab.com/catamphetamine/libphonenumber-js/blob/master/METADATA.md\r\n */\nvar Metadata = /*#__PURE__*/function () {\n function Metadata(metadata) {\n _classCallCheck(this, Metadata);\n validateMetadata(metadata);\n this.metadata = metadata;\n setVersion.call(this, metadata);\n }\n return _createClass(Metadata, [{\n key: \"getCountries\",\n value: function getCountries() {\n return Object.keys(this.metadata.countries).filter(function (_) {\n return _ !== '001';\n });\n }\n }, {\n key: \"getCountryMetadata\",\n value: function getCountryMetadata(countryCode) {\n return this.metadata.countries[countryCode];\n }\n }, {\n key: \"nonGeographic\",\n value: function nonGeographic() {\n if (this.v1 || this.v2 || this.v3) return;\n // `nonGeographical` was a typo.\n // It's present in metadata generated from `1.7.35` to `1.7.37`.\n // The test case could be found by searching for \"nonGeographical\".\n return this.metadata.nonGeographic || this.metadata.nonGeographical;\n }\n }, {\n key: \"hasCountry\",\n value: function hasCountry(country) {\n return this.getCountryMetadata(country) !== undefined;\n }\n }, {\n key: \"hasCallingCode\",\n value: function hasCallingCode(callingCode) {\n if (this.getCountryCodesForCallingCode(callingCode)) {\n return true;\n }\n if (this.nonGeographic()) {\n if (this.nonGeographic()[callingCode]) {\n return true;\n }\n } else {\n // A hacky workaround for old custom metadata (generated before V4).\n var countryCodes = this.countryCallingCodes()[callingCode];\n if (countryCodes && countryCodes.length === 1 && countryCodes[0] === '001') {\n return true;\n }\n }\n }\n }, {\n key: \"isNonGeographicCallingCode\",\n value: function isNonGeographicCallingCode(callingCode) {\n if (this.nonGeographic()) {\n return this.nonGeographic()[callingCode] ? true : false;\n } else {\n return this.getCountryCodesForCallingCode(callingCode) ? false : true;\n }\n }\n\n // Deprecated.\n }, {\n key: \"country\",\n value: function country(countryCode) {\n return this.selectNumberingPlan(countryCode);\n }\n }, {\n key: \"selectNumberingPlan\",\n value: function selectNumberingPlan(countryCode, callingCode) {\n // Supports just passing `callingCode` as the first argument.\n if (countryCode && CALLING_CODE_REG_EXP.test(countryCode)) {\n callingCode = countryCode;\n countryCode = null;\n }\n if (countryCode && countryCode !== '001') {\n if (!this.hasCountry(countryCode)) {\n throw new Error(\"Unknown country: \".concat(countryCode));\n }\n this.numberingPlan = new NumberingPlan(this.getCountryMetadata(countryCode), this);\n } else if (callingCode) {\n if (!this.hasCallingCode(callingCode)) {\n throw new Error(\"Unknown calling code: \".concat(callingCode));\n }\n this.numberingPlan = new NumberingPlan(this.getNumberingPlanMetadata(callingCode), this);\n } else {\n this.numberingPlan = undefined;\n }\n return this;\n }\n }, {\n key: \"getCountryCodesForCallingCode\",\n value: function getCountryCodesForCallingCode(callingCode) {\n var countryCodes = this.countryCallingCodes()[callingCode];\n if (countryCodes) {\n // Metadata before V4 included \"non-geographic entity\" calling codes\n // inside `country_calling_codes` (for example, `\"881\":[\"001\"]`).\n // Now the semantics of `country_calling_codes` has changed:\n // it's specifically for \"countries\" now.\n // Older versions of custom metadata will simply skip parsing\n // \"non-geographic entity\" phone numbers with new versions\n // of this library: it's not considered a bug,\n // because such numbers are extremely rare,\n // and developers extremely rarely use custom metadata.\n if (countryCodes.length === 1 && countryCodes[0].length === 3) {\n return;\n }\n return countryCodes;\n }\n }\n }, {\n key: \"getCountryCodeForCallingCode\",\n value: function getCountryCodeForCallingCode(callingCode) {\n var countryCodes = this.getCountryCodesForCallingCode(callingCode);\n if (countryCodes) {\n return countryCodes[0];\n }\n }\n }, {\n key: \"getNumberingPlanMetadata\",\n value: function getNumberingPlanMetadata(callingCode) {\n var countryCode = this.getCountryCodeForCallingCode(callingCode);\n if (countryCode) {\n return this.getCountryMetadata(countryCode);\n }\n if (this.nonGeographic()) {\n var metadata = this.nonGeographic()[callingCode];\n if (metadata) {\n return metadata;\n }\n } else {\n // A hacky workaround for old custom metadata (generated before V4).\n // In that metadata, there was no concept of \"non-geographic\" metadata\n // so metadata for `001` country code was stored along with other countries.\n // The test case can be found by searching for:\n // \"should work around `nonGeographic` metadata not existing\".\n var countryCodes = this.countryCallingCodes()[callingCode];\n if (countryCodes && countryCodes.length === 1 && countryCodes[0] === '001') {\n return this.metadata.countries['001'];\n }\n }\n }\n\n // Deprecated.\n }, {\n key: \"countryCallingCode\",\n value: function countryCallingCode() {\n return this.numberingPlan.callingCode();\n }\n\n // Deprecated.\n }, {\n key: \"IDDPrefix\",\n value: function IDDPrefix() {\n return this.numberingPlan.IDDPrefix();\n }\n\n // Deprecated.\n }, {\n key: \"defaultIDDPrefix\",\n value: function defaultIDDPrefix() {\n return this.numberingPlan.defaultIDDPrefix();\n }\n\n // Deprecated.\n }, {\n key: \"nationalNumberPattern\",\n value: function nationalNumberPattern() {\n return this.numberingPlan.nationalNumberPattern();\n }\n\n // Deprecated.\n }, {\n key: \"possibleLengths\",\n value: function possibleLengths() {\n return this.numberingPlan.possibleLengths();\n }\n\n // Deprecated.\n }, {\n key: \"formats\",\n value: function formats() {\n return this.numberingPlan.formats();\n }\n\n // Deprecated.\n }, {\n key: \"nationalPrefixForParsing\",\n value: function nationalPrefixForParsing() {\n return this.numberingPlan.nationalPrefixForParsing();\n }\n\n // Deprecated.\n }, {\n key: \"nationalPrefixTransformRule\",\n value: function nationalPrefixTransformRule() {\n return this.numberingPlan.nationalPrefixTransformRule();\n }\n\n // Deprecated.\n }, {\n key: \"leadingDigits\",\n value: function leadingDigits() {\n return this.numberingPlan.leadingDigits();\n }\n\n // Deprecated.\n }, {\n key: \"hasTypes\",\n value: function hasTypes() {\n return this.numberingPlan.hasTypes();\n }\n\n // Deprecated.\n }, {\n key: \"type\",\n value: function type(_type) {\n return this.numberingPlan.type(_type);\n }\n\n // Deprecated.\n }, {\n key: \"ext\",\n value: function ext() {\n return this.numberingPlan.ext();\n }\n }, {\n key: \"countryCallingCodes\",\n value: function countryCallingCodes() {\n if (this.v1) return this.metadata.country_phone_code_to_countries;\n return this.metadata.country_calling_codes;\n }\n\n // Deprecated.\n }, {\n key: \"chooseCountryByCountryCallingCode\",\n value: function chooseCountryByCountryCallingCode(callingCode) {\n return this.selectNumberingPlan(callingCode);\n }\n }, {\n key: \"hasSelectedNumberingPlan\",\n value: function hasSelectedNumberingPlan() {\n return this.numberingPlan !== undefined;\n }\n }]);\n}();\nexport { Metadata as default };\nvar NumberingPlan = /*#__PURE__*/function () {\n function NumberingPlan(metadata, globalMetadataObject) {\n _classCallCheck(this, NumberingPlan);\n this.globalMetadataObject = globalMetadataObject;\n this.metadata = metadata;\n setVersion.call(this, globalMetadataObject.metadata);\n }\n return _createClass(NumberingPlan, [{\n key: \"callingCode\",\n value: function callingCode() {\n return this.metadata[0];\n }\n\n // Formatting information for regions which share\n // a country calling code is contained by only one region\n // for performance reasons. For example, for NANPA region\n // (\"North American Numbering Plan Administration\",\n // which includes USA, Canada, Cayman Islands, Bahamas, etc)\n // it will be contained in the metadata for `US`.\n }, {\n key: \"getDefaultCountryMetadataForRegion\",\n value: function getDefaultCountryMetadataForRegion() {\n return this.globalMetadataObject.getNumberingPlanMetadata(this.callingCode());\n }\n\n // Is always present.\n }, {\n key: \"IDDPrefix\",\n value: function IDDPrefix() {\n if (this.v1 || this.v2) return;\n return this.metadata[1];\n }\n\n // Is only present when a country supports multiple IDD prefixes.\n }, {\n key: \"defaultIDDPrefix\",\n value: function defaultIDDPrefix() {\n if (this.v1 || this.v2) return;\n return this.metadata[12];\n }\n }, {\n key: \"nationalNumberPattern\",\n value: function nationalNumberPattern() {\n if (this.v1 || this.v2) return this.metadata[1];\n return this.metadata[2];\n }\n\n // \"possible length\" data is always present in Google's metadata.\n }, {\n key: \"possibleLengths\",\n value: function possibleLengths() {\n if (this.v1) return;\n return this.metadata[this.v2 ? 2 : 3];\n }\n }, {\n key: \"_getFormats\",\n value: function _getFormats(metadata) {\n return metadata[this.v1 ? 2 : this.v2 ? 3 : 4];\n }\n\n // For countries of the same region (e.g. NANPA)\n // formats are all stored in the \"main\" country for that region.\n // E.g. \"RU\" and \"KZ\", \"US\" and \"CA\".\n }, {\n key: \"formats\",\n value: function formats() {\n var _this = this;\n var formats = this._getFormats(this.metadata) || this._getFormats(this.getDefaultCountryMetadataForRegion()) || [];\n return formats.map(function (_) {\n return new Format(_, _this);\n });\n }\n }, {\n key: \"nationalPrefix\",\n value: function nationalPrefix() {\n return this.metadata[this.v1 ? 3 : this.v2 ? 4 : 5];\n }\n }, {\n key: \"_getNationalPrefixFormattingRule\",\n value: function _getNationalPrefixFormattingRule(metadata) {\n return metadata[this.v1 ? 4 : this.v2 ? 5 : 6];\n }\n\n // For countries of the same region (e.g. NANPA)\n // national prefix formatting rule is stored in the \"main\" country for that region.\n // E.g. \"RU\" and \"KZ\", \"US\" and \"CA\".\n }, {\n key: \"nationalPrefixFormattingRule\",\n value: function nationalPrefixFormattingRule() {\n return this._getNationalPrefixFormattingRule(this.metadata) || this._getNationalPrefixFormattingRule(this.getDefaultCountryMetadataForRegion());\n }\n }, {\n key: \"_nationalPrefixForParsing\",\n value: function _nationalPrefixForParsing() {\n return this.metadata[this.v1 ? 5 : this.v2 ? 6 : 7];\n }\n }, {\n key: \"nationalPrefixForParsing\",\n value: function nationalPrefixForParsing() {\n // If `national_prefix_for_parsing` is not set explicitly,\n // then infer it from `national_prefix` (if any)\n return this._nationalPrefixForParsing() || this.nationalPrefix();\n }\n }, {\n key: \"nationalPrefixTransformRule\",\n value: function nationalPrefixTransformRule() {\n return this.metadata[this.v1 ? 6 : this.v2 ? 7 : 8];\n }\n }, {\n key: \"_getNationalPrefixIsOptionalWhenFormatting\",\n value: function _getNationalPrefixIsOptionalWhenFormatting() {\n return !!this.metadata[this.v1 ? 7 : this.v2 ? 8 : 9];\n }\n\n // For countries of the same region (e.g. NANPA)\n // \"national prefix is optional when formatting\" flag is\n // stored in the \"main\" country for that region.\n // E.g. \"RU\" and \"KZ\", \"US\" and \"CA\".\n }, {\n key: \"nationalPrefixIsOptionalWhenFormattingInNationalFormat\",\n value: function nationalPrefixIsOptionalWhenFormattingInNationalFormat() {\n return this._getNationalPrefixIsOptionalWhenFormatting(this.metadata) || this._getNationalPrefixIsOptionalWhenFormatting(this.getDefaultCountryMetadataForRegion());\n }\n }, {\n key: \"leadingDigits\",\n value: function leadingDigits() {\n return this.metadata[this.v1 ? 8 : this.v2 ? 9 : 10];\n }\n }, {\n key: \"types\",\n value: function types() {\n return this.metadata[this.v1 ? 9 : this.v2 ? 10 : 11];\n }\n }, {\n key: \"hasTypes\",\n value: function hasTypes() {\n // Versions 1.2.0 - 1.2.4: can be `[]`.\n /* istanbul ignore next */\n if (this.types() && this.types().length === 0) {\n return false;\n }\n // Versions <= 1.2.4: can be `undefined`.\n // Version >= 1.2.5: can be `0`.\n return !!this.types();\n }\n }, {\n key: \"type\",\n value: function type(_type2) {\n if (this.hasTypes() && getType(this.types(), _type2)) {\n return new Type(getType(this.types(), _type2), this);\n }\n }\n }, {\n key: \"ext\",\n value: function ext() {\n if (this.v1 || this.v2) return DEFAULT_EXT_PREFIX;\n return this.metadata[13] || DEFAULT_EXT_PREFIX;\n }\n }]);\n}();\nvar Format = /*#__PURE__*/function () {\n function Format(format, metadata) {\n _classCallCheck(this, Format);\n this._format = format;\n this.metadata = metadata;\n }\n return _createClass(Format, [{\n key: \"pattern\",\n value: function pattern() {\n return this._format[0];\n }\n }, {\n key: \"format\",\n value: function format() {\n return this._format[1];\n }\n }, {\n key: \"leadingDigitsPatterns\",\n value: function leadingDigitsPatterns() {\n return this._format[2] || [];\n }\n }, {\n key: \"nationalPrefixFormattingRule\",\n value: function nationalPrefixFormattingRule() {\n return this._format[3] || this.metadata.nationalPrefixFormattingRule();\n }\n }, {\n key: \"nationalPrefixIsOptionalWhenFormattingInNationalFormat\",\n value: function nationalPrefixIsOptionalWhenFormattingInNationalFormat() {\n return !!this._format[4] || this.metadata.nationalPrefixIsOptionalWhenFormattingInNationalFormat();\n }\n }, {\n key: \"nationalPrefixIsMandatoryWhenFormattingInNationalFormat\",\n value: function nationalPrefixIsMandatoryWhenFormattingInNationalFormat() {\n // National prefix is omitted if there's no national prefix formatting rule\n // set for this country, or when the national prefix formatting rule\n // contains no national prefix itself, or when this rule is set but\n // national prefix is optional for this phone number format\n // (and it is not enforced explicitly)\n return this.usesNationalPrefix() && !this.nationalPrefixIsOptionalWhenFormattingInNationalFormat();\n }\n\n // Checks whether national prefix formatting rule contains national prefix.\n }, {\n key: \"usesNationalPrefix\",\n value: function usesNationalPrefix() {\n return this.nationalPrefixFormattingRule() &&\n // Check that national prefix formatting rule is not a \"dummy\" one.\n !FIRST_GROUP_ONLY_PREFIX_PATTERN.test(this.nationalPrefixFormattingRule())\n // In compressed metadata, `this.nationalPrefixFormattingRule()` is `0`\n // when `national_prefix_formatting_rule` is not present.\n // So, `true` or `false` are returned explicitly here, so that\n // `0` number isn't returned.\n ? true : false;\n }\n }, {\n key: \"internationalFormat\",\n value: function internationalFormat() {\n return this._format[5] || this.format();\n }\n }]);\n}();\n/**\r\n * A pattern that is used to determine if the national prefix formatting rule\r\n * has the first group only, i.e., does not start with the national prefix.\r\n * Note that the pattern explicitly allows for unbalanced parentheses.\r\n */\nvar FIRST_GROUP_ONLY_PREFIX_PATTERN = /^\\(?\\$1\\)?$/;\nvar Type = /*#__PURE__*/function () {\n function Type(type, metadata) {\n _classCallCheck(this, Type);\n this.type = type;\n this.metadata = metadata;\n }\n return _createClass(Type, [{\n key: \"pattern\",\n value: function pattern() {\n if (this.metadata.v1) return this.type;\n return this.type[0];\n }\n }, {\n key: \"possibleLengths\",\n value: function possibleLengths() {\n if (this.metadata.v1) return;\n return this.type[1] || this.metadata.possibleLengths();\n }\n }]);\n}();\nfunction getType(types, type) {\n switch (type) {\n case 'FIXED_LINE':\n return types[0];\n case 'MOBILE':\n return types[1];\n case 'TOLL_FREE':\n return types[2];\n case 'PREMIUM_RATE':\n return types[3];\n case 'PERSONAL_NUMBER':\n return types[4];\n case 'VOICEMAIL':\n return types[5];\n case 'UAN':\n return types[6];\n case 'PAGER':\n return types[7];\n case 'VOIP':\n return types[8];\n case 'SHARED_COST':\n return types[9];\n }\n}\nexport function validateMetadata(metadata) {\n if (!metadata) {\n throw new Error('[libphonenumber-js] `metadata` argument not passed. Check your arguments.');\n }\n\n // `country_phone_code_to_countries` was renamed to `country_calling_codes` in `1.0.18`.\n // For that reason, it's not used in this detection algorithm.\n // Instead, it detects by `countries: {}` property existence.\n if (!isObject(metadata) || !isObject(metadata.countries)) {\n throw new Error(\"[libphonenumber-js] `metadata` argument was passed but it's not a valid metadata. Must be an object having `.countries` child object property. Got \".concat(isObject(metadata) ? 'an object of shape: { ' + Object.keys(metadata).join(', ') + ' }' : 'a ' + typeOf(metadata) + ': ' + metadata, \".\"));\n }\n}\n\n// Babel transforms `typeof` into some \"branches\"\n// so istanbul will show this as \"branch not covered\".\n/* istanbul ignore next */\nvar typeOf = function typeOf(_) {\n return _typeof(_);\n};\n\n/**\r\n * Returns extension prefix for a country.\r\n * @param {string} country\r\n * @param {object} metadata\r\n * @return {string?}\r\n * @example\r\n * // Returns \" ext. \"\r\n * getExtPrefix(\"US\")\r\n */\nexport function getExtPrefix(country, metadata) {\n metadata = new Metadata(metadata);\n if (metadata.hasCountry(country)) {\n return metadata.selectNumberingPlan(country).ext();\n }\n return DEFAULT_EXT_PREFIX;\n}\n\n/**\r\n * Returns \"country calling code\" for a country.\r\n * Throws an error if the country doesn't exist or isn't supported by this library.\r\n * @param {string} country\r\n * @param {object} metadata\r\n * @return {string}\r\n * @example\r\n * // Returns \"44\"\r\n * getCountryCallingCode(\"GB\")\r\n */\nexport function getCountryCallingCode(country, metadata) {\n metadata = new Metadata(metadata);\n if (metadata.hasCountry(country)) {\n return metadata.selectNumberingPlan(country).countryCallingCode();\n }\n throw new Error(\"Unknown country: \".concat(country));\n}\nexport function isSupportedCountry(country, metadata) {\n // metadata = new Metadata(metadata)\n // return metadata.hasCountry(country)\n return metadata.countries.hasOwnProperty(country);\n}\nfunction setVersion(metadata) {\n var version = metadata.version;\n if (typeof version === 'number') {\n this.v1 = version === 1;\n this.v2 = version === 2;\n this.v3 = version === 3;\n this.v4 = version === 4;\n } else {\n if (!version) {\n this.v1 = true;\n } else if (compare(version, V3) === -1) {\n this.v2 = true;\n } else if (compare(version, V4) === -1) {\n this.v3 = true;\n } else {\n this.v4 = true;\n }\n }\n}\n\n// const ISO_COUNTRY_CODE = /^[A-Z]{2}$/\n// function isCountryCode(countryCode) {\n// \treturn ISO_COUNTRY_CODE.test(countryCodeOrCountryCallingCode)\n// }\n//# sourceMappingURL=metadata.js.map","import Metadata from '../metadata.js';\nimport mergeArrays from './mergeArrays.js';\nexport default function checkNumberLength(nationalNumber, country, metadata) {\n return checkNumberLengthForType(nationalNumber, country, undefined, metadata);\n}\n\n// Checks whether a number is possible for a certain `country` based on the number length.\n//\n// This function is not supported by metadata generated with ancient versions of\n// `libphonenumber-js` (before version `1.0.18`) which didn't include \"possible lengths\".\n//\n// There was also a known issue with `checkNumberLength()` function:\n// if a number is possible only in a certain `country` among several `countries`\n// that share the same \"country calling code\", that function would check\n// the possibility of the phone number only in the \"main\" `country` for the \"country calling code\"\n// and would not check if it's actually be possible in the speciifc `country`.\n//\n// For example, \"+1310xxxx\" numbers are valid in Canada.\n// However, they are not possible in the US due to being too short.\n// Since Canada and the US share the same country calling code — \"+1\" —\n// `checkNumberLength()` function used to return not \"IS_POSSIBLE\" for \"+1310xxxx\" numbers.\n//\n// In such cases, when using \"/max\" metadata, `isValid()` could output `true`\n// but at the same time `isPossible()` could output `false`, which was contradictory.\n//\n// See https://issuetracker.google.com/issues/335892662 for the discusson in Google's issues.\n//\n// The solution suggested by Google was implemented: an optional `country` argument\n// was added to `checkNumberLength()` function. If present, that `country` will be used\n// to check phone number length for that specific `country` rather than the \"main\" country\n// for the shared \"country calling code\".\n//\nexport function checkNumberLengthForType(nationalNumber, country, type, metadata) {\n // If the exact `country` is specified, it's no necessarily already selected in `metadata`.\n // Most likely, in cases when there're multiple countries corresponding to the same\n // \"country calling code\", the \"main\" country for that \"country calling code\" will be selected.\n if (country) {\n metadata = new Metadata(metadata.metadata);\n metadata.selectNumberingPlan(country);\n }\n var type_info = metadata.type(type);\n\n // There should always be \"<possiblePengths/>\" set for every type element.\n // This is declared in the XML schema.\n // For size efficiency, where a sub-description (e.g. fixed-line)\n // has the same \"<possiblePengths/>\" as the \"general description\", this is missing,\n // so we fall back to the \"general description\". Where no numbers of the type\n // exist at all, there is one possible length (-1) which is guaranteed\n // not to match the length of any real phone number.\n var possible_lengths = type_info && type_info.possibleLengths() || metadata.possibleLengths();\n // let local_lengths = type_info && type.possibleLengthsLocal() || metadata.possibleLengthsLocal()\n\n // Metadata before version `1.0.18` didn't contain `possible_lengths`.\n if (!possible_lengths) {\n return 'IS_POSSIBLE';\n }\n if (type === 'FIXED_LINE_OR_MOBILE') {\n // No such country in metadata.\n /* istanbul ignore next */\n if (!metadata.type('FIXED_LINE')) {\n // The rare case has been encountered where no fixedLine data is available\n // (true for some non-geographic entities), so we just check mobile.\n return checkNumberLengthForType(nationalNumber, country, 'MOBILE', metadata);\n }\n var mobile_type = metadata.type('MOBILE');\n if (mobile_type) {\n // Merge the mobile data in if there was any. \"Concat\" creates a new\n // array, it doesn't edit possible_lengths in place, so we don't need a copy.\n // Note that when adding the possible lengths from mobile, we have\n // to again check they aren't empty since if they are this indicates\n // they are the same as the general desc and should be obtained from there.\n possible_lengths = mergeArrays(possible_lengths, mobile_type.possibleLengths());\n // The current list is sorted; we need to merge in the new list and\n // re-sort (duplicates are okay). Sorting isn't so expensive because\n // the lists are very small.\n\n // if (local_lengths) {\n // \tlocal_lengths = mergeArrays(local_lengths, mobile_type.possibleLengthsLocal())\n // } else {\n // \tlocal_lengths = mobile_type.possibleLengthsLocal()\n // }\n }\n }\n // If the type doesn't exist then return 'INVALID_LENGTH'.\n else if (type && !type_info) {\n return 'INVALID_LENGTH';\n }\n var actual_length = nationalNumber.length;\n\n // In `libphonenumber-js` all \"local-only\" formats are dropped for simplicity.\n // // This is safe because there is never an overlap beween the possible lengths\n // // and the local-only lengths; this is checked at build time.\n // if (local_lengths && local_lengths.indexOf(nationalNumber.length) >= 0)\n // {\n // \treturn 'IS_POSSIBLE_LOCAL_ONLY'\n // }\n\n var minimum_length = possible_lengths[0];\n if (minimum_length === actual_length) {\n return 'IS_POSSIBLE';\n }\n if (minimum_length > actual_length) {\n return 'TOO_SHORT';\n }\n if (possible_lengths[possible_lengths.length - 1] < actual_length) {\n return 'TOO_LONG';\n }\n\n // We skip the first element since we've already checked it.\n return possible_lengths.indexOf(actual_length, 1) >= 0 ? 'IS_POSSIBLE' : 'INVALID_LENGTH';\n}\n//# sourceMappingURL=checkNumberLength.js.map","import Metadata from './metadata.js';\nimport checkNumberLength from './helpers/checkNumberLength.js';\n\n/**\r\n * Checks if a phone number is \"possible\" (basically just checks its length).\r\n *\r\n * isPossible(phoneNumberInstance, { ..., v2: true }, metadata)\r\n *\r\n * isPossible({ phone: '8005553535', country: 'RU' }, { ... }, metadata)\r\n * isPossible({ phone: '8005553535', country: 'RU' }, undefined, metadata)\r\n *\r\n * @param {object|PhoneNumber} input — If `options.v2: true` flag is passed, the `input` should be a `PhoneNumber` instance. Otherwise, it should be an object of shape `{ phone: '...', country: '...' }`.\r\n * @param {object} [options]\r\n * @param {object} metadata\r\n * @return {string}\r\n */\nexport default function isPossiblePhoneNumber(input, options, metadata) {\n /* istanbul ignore if */\n if (options === undefined) {\n options = {};\n }\n metadata = new Metadata(metadata);\n if (options.v2) {\n if (!input.countryCallingCode) {\n throw new Error('Invalid phone number object passed');\n }\n metadata.selectNumberingPlan(input.countryCallingCode);\n } else {\n if (!input.phone) {\n return false;\n }\n if (input.country) {\n if (!metadata.hasCountry(input.country)) {\n throw new Error(\"Unknown country: \".concat(input.country));\n }\n metadata.selectNumberingPlan(input.country);\n } else {\n if (!input.countryCallingCode) {\n throw new Error('Invalid phone number object passed');\n }\n metadata.selectNumberingPlan(input.countryCallingCode);\n }\n }\n\n // Old metadata (< 1.0.18) had no \"possible length\" data.\n if (metadata.possibleLengths()) {\n return isPossibleNumber(input.phone || input.nationalNumber, input.country, metadata);\n } else {\n // There was a bug between `1.7.35` and `1.7.37` where \"possible_lengths\"\n // were missing for \"non-geographical\" numbering plans.\n // Just assume the number is possible in such cases:\n // it's unlikely that anyone generated their custom metadata\n // in that short period of time (one day).\n // This code can be removed in some future major version update.\n if (input.countryCallingCode && metadata.isNonGeographicCallingCode(input.countryCallingCode)) {\n // \"Non-geographic entities\" did't have `possibleLengths`\n // due to a bug in metadata generation process.\n return true;\n } else {\n throw new Error('Missing \"possibleLengths\" in metadata. Perhaps the metadata has been generated before v1.0.18.');\n }\n }\n}\nexport function isPossibleNumber(nationalNumber, country, metadata) {\n //, isInternational) {\n switch (checkNumberLength(nationalNumber, country, metadata)) {\n case 'IS_POSSIBLE':\n return true;\n // This library ignores \"local-only\" phone numbers (for simplicity).\n // See the readme for more info on what are \"local-only\" phone numbers.\n // case 'IS_POSSIBLE_LOCAL_ONLY':\n // \treturn !isInternational\n default:\n return false;\n }\n}\n//# sourceMappingURL=isPossible.js.map","/**\r\n * Checks whether the entire input sequence can be matched\r\n * against the regular expression.\r\n * @return {boolean}\r\n */\nexport default function matchesEntirely(text, regularExpressionText) {\n // If the assigning of the `''` default value is moved to the arguments above,\n // the code coverage would decrease for some weird reason.\n text = text || '';\n return new RegExp('^(?:' + regularExpressionText + ')$').test(text);\n}\n//# sourceMappingURL=matchesEntirely.js.map","function _createForOfIteratorHelperLoose(r, e) { var t = \"undefined\" != typeof Symbol && r[Symbol.iterator] || r[\"@@iterator\"]; if (t) return (t = t.call(r)).next.bind(t); if (Array.isArray(r) || (t = _unsupportedIterableToArray(r)) || e && r && \"number\" == typeof r.length) { t && (r = t); var o = 0; return function () { return o >= r.length ? { done: !0 } : { done: !1, value: r[o++] }; }; } throw new TypeError(\"Invalid attempt to iterate non-iterable instance.\\nIn order to be iterable, non-array objects must have a [Symbol.iterator]() method.\"); }\nfunction _unsupportedIterableToArray(r, a) { if (r) { if (\"string\" == typeof r) return _arrayLikeToArray(r, a); var t = {}.toString.call(r).slice(8, -1); return \"Object\" === t && r.constructor && (t = r.constructor.name), \"Map\" === t || \"Set\" === t ? Array.from(r) : \"Arguments\" === t || /^(?:Ui|I)nt(?:8|16|32)(?:Clamped)?Array$/.test(t) ? _arrayLikeToArray(r, a) : void 0; } }\nfunction _arrayLikeToArray(r, a) { (null == a || a > r.length) && (a = r.length); for (var e = 0, n = Array(a); e < a; e++) n[e] = r[e]; return n; }\nimport Metadata from '../metadata.js';\nimport matchesEntirely from './matchesEntirely.js';\nvar NON_FIXED_LINE_PHONE_TYPES = ['MOBILE', 'PREMIUM_RATE', 'TOLL_FREE', 'SHARED_COST', 'VOIP', 'PERSONAL_NUMBER', 'PAGER', 'UAN', 'VOICEMAIL'];\n\n// Finds out national phone number type (fixed line, mobile, etc)\nexport default function getNumberType(input, options, metadata) {\n // If assigning the `{}` default value is moved to the arguments above,\n // code coverage would decrease for some weird reason.\n options = options || {};\n\n // When `parse()` returns an empty object — `{}` —\n // that means that the phone number is malformed,\n // so it can't possibly be valid.\n if (!input.country && !input.countryCallingCode) {\n return;\n }\n metadata = new Metadata(metadata);\n metadata.selectNumberingPlan(input.country, input.countryCallingCode);\n var nationalNumber = options.v2 ? input.nationalNumber : input.phone;\n\n // The following is copy-pasted from the original function:\n // https://github.com/googlei18n/libphonenumber/blob/3ea547d4fbaa2d0b67588904dfa5d3f2557c27ff/javascript/i18n/phonenumbers/phonenumberutil.js#L2835\n\n // Is this national number even valid for this country\n if (!matchesEntirely(nationalNumber, metadata.nationalNumberPattern())) {\n return;\n }\n\n // Is it fixed line number\n if (isNumberTypeEqualTo(nationalNumber, 'FIXED_LINE', metadata)) {\n // Because duplicate regular expressions are removed\n // to reduce metadata size, if \"mobile\" pattern is \"\"\n // then it means it was removed due to being a duplicate of the fixed-line pattern.\n //\n if (metadata.type('MOBILE') && metadata.type('MOBILE').pattern() === '') {\n return 'FIXED_LINE_OR_MOBILE';\n }\n\n // `MOBILE` type pattern isn't included if it matched `FIXED_LINE` one.\n // For example, for \"US\" country.\n // Old metadata (< `1.0.18`) had a specific \"types\" data structure\n // that happened to be `undefined` for `MOBILE` in that case.\n // Newer metadata (>= `1.0.18`) has another data structure that is\n // not `undefined` for `MOBILE` in that case (it's just an empty array).\n // So this `if` is just for backwards compatibility with old metadata.\n if (!metadata.type('MOBILE')) {\n return 'FIXED_LINE_OR_MOBILE';\n }\n\n // Check if the number happens to qualify as both fixed line and mobile.\n // (no such country in the minimal metadata set)\n /* istanbul ignore if */\n if (isNumberTypeEqualTo(nationalNumber, 'MOBILE', metadata)) {\n return 'FIXED_LINE_OR_MOBILE';\n }\n return 'FIXED_LINE';\n }\n for (var _iterator = _createForOfIteratorHelperLoose(NON_FIXED_LINE_PHONE_TYPES), _step; !(_step = _iterator()).done;) {\n var type = _step.value;\n if (isNumberTypeEqualTo(nationalNumber, type, metadata)) {\n return type;\n }\n }\n}\nexport function isNumberTypeEqualTo(nationalNumber, type, metadata) {\n var typeDefinition = metadata.type(type);\n if (!typeDefinition || !typeDefinition.pattern()) {\n return false;\n }\n\n // Check if any possible number lengths are present;\n // if so, we use them to avoid checking\n // the validation pattern if they don't match.\n // If they are absent, this means they match\n // the general description, which we have\n // already checked before a specific number type.\n if (typeDefinition.possibleLengths() && typeDefinition.possibleLengths().indexOf(nationalNumber.length) < 0) {\n return false;\n }\n return matchesEntirely(nationalNumber, typeDefinition.pattern());\n}\n//# sourceMappingURL=getNumberType.js.map","import Metadata from '../metadata.js';\n\n/**\r\n * Returns a list of countries that the phone number could potentially belong to.\r\n * @param {string} callingCode — Calling code.\r\n * @param {string} nationalNumber — National (significant) number.\r\n * @param {object} metadata — Metadata.\r\n * @return {string[]} A list of possible countries.\r\n */\nexport default function getPossibleCountriesForNumber(callingCode, nationalNumber, metadata) {\n var _metadata = new Metadata(metadata);\n var possibleCountries = _metadata.getCountryCodesForCallingCode(callingCode);\n if (!possibleCountries) {\n return [];\n }\n return possibleCountries.filter(function (country) {\n return couldNationalNumberBelongToCountry(nationalNumber, country, metadata);\n });\n}\nfunction couldNationalNumberBelongToCountry(nationalNumber, country, metadata) {\n var _metadata = new Metadata(metadata);\n _metadata.selectNumberingPlan(country);\n if (_metadata.numberingPlan.possibleLengths().indexOf(nationalNumber.length) >= 0) {\n return true;\n }\n return false;\n}\n//# sourceMappingURL=getPossibleCountriesForNumber.js.map","// The minimum length of the national significant number.\nexport var MIN_LENGTH_FOR_NSN = 2;\n\n// The ITU says the maximum length should be 15,\n// but one can find longer numbers in Germany.\nexport var MAX_LENGTH_FOR_NSN = 17;\n\n// The maximum length of the country calling code.\nexport var MAX_LENGTH_COUNTRY_CODE = 3;\n\n// Digits accepted in phone numbers\n// (ascii, fullwidth, arabic-indic, and eastern arabic digits).\nexport var VALID_DIGITS = \"0-9\\uFF10-\\uFF19\\u0660-\\u0669\\u06F0-\\u06F9\";\n\n// `DASHES` will be right after the opening square bracket of the \"character class\"\nvar DASHES = \"-\\u2010-\\u2015\\u2212\\u30FC\\uFF0D\";\nvar SLASHES = \"\\uFF0F/\";\nvar DOTS = \"\\uFF0E.\";\nexport var WHITESPACE = \" \\xA0\\xAD\\u200B\\u2060\\u3000\";\nvar BRACKETS = \"()\\uFF08\\uFF09\\uFF3B\\uFF3D\\\\[\\\\]\";\n// export const OPENING_BRACKETS = '(\\uFF08\\uFF3B\\\\\\['\nvar TILDES = \"~\\u2053\\u223C\\uFF5E\";\n\n// Regular expression of acceptable punctuation found in phone numbers. This\n// excludes punctuation found as a leading character only. This consists of dash\n// characters, white space characters, full stops, slashes, square brackets,\n// parentheses and tildes. Full-width variants are also present.\nexport var VALID_PUNCTUATION = \"\".concat(DASHES).concat(SLASHES).concat(DOTS).concat(WHITESPACE).concat(BRACKETS).concat(TILDES);\nexport var PLUS_CHARS = \"+\\uFF0B\";\n// const LEADING_PLUS_CHARS_PATTERN = new RegExp('^[' + PLUS_CHARS + ']+')\n//# sourceMappingURL=constants.js.map","import Metadata from '../metadata.js';\nimport { VALID_DIGITS } from '../constants.js';\nvar CAPTURING_DIGIT_PATTERN = new RegExp('([' + VALID_DIGITS + '])');\nexport default function stripIddPrefix(number, country, callingCode, metadata) {\n if (!country) {\n return;\n }\n // Check if the number is IDD-prefixed.\n var countryMetadata = new Metadata(metadata);\n countryMetadata.selectNumberingPlan(country, callingCode);\n var IDDPrefixPattern = new RegExp(countryMetadata.IDDPrefix());\n if (number.search(IDDPrefixPattern) !== 0) {\n return;\n }\n // Strip IDD prefix.\n number = number.slice(number.match(IDDPrefixPattern)[0].length);\n // If there're any digits after an IDD prefix,\n // then those digits are a country calling code.\n // Since no country code starts with a `0`,\n // the code below validates that the next digit (if present) is not `0`.\n var matchedGroups = number.match(CAPTURING_DIGIT_PATTERN);\n if (matchedGroups && matchedGroups[1] != null && matchedGroups[1].length > 0) {\n if (matchedGroups[1] === '0') {\n return;\n }\n }\n return number;\n}\n//# sourceMappingURL=stripIddPrefix.js.map","function _createForOfIteratorHelperLoose(r, e) { var t = \"undefined\" != typeof Symbol && r[Symbol.iterator] || r[\"@@iterator\"]; if (t) return (t = t.call(r)).next.bind(t); if (Array.isArray(r) || (t = _unsupportedIterableToArray(r)) || e && r && \"number\" == typeof r.length) { t && (r = t); var o = 0; return function () { return o >= r.length ? { done: !0 } : { done: !1, value: r[o++] }; }; } throw new TypeError(\"Invalid attempt to iterate non-iterable instance.\\nIn order to be iterable, non-array objects must have a [Symbol.iterator]() method.\"); }\nfunction _unsupportedIterableToArray(r, a) { if (r) { if (\"string\" == typeof r) return _arrayLikeToArray(r, a); var t = {}.toString.call(r).slice(8, -1); return \"Object\" === t && r.constructor && (t = r.constructor.name), \"Map\" === t || \"Set\" === t ? Array.from(r) : \"Arguments\" === t || /^(?:Ui|I)nt(?:8|16|32)(?:Clamped)?Array$/.test(t) ? _arrayLikeToArray(r, a) : void 0; } }\nfunction _arrayLikeToArray(r, a) { (null == a || a > r.length) && (a = r.length); for (var e = 0, n = Array(a); e < a; e++) n[e] = r[e]; return n; }\nimport Metadata from '../metadata.js';\nimport getNumberType from './getNumberType.js';\n\n// Returns the exact country that the `nationalPhoneNumber` belongs to\n// in cases of ambiguity, i.e. when multiple countries share the same \"country calling code\".\nexport default function getCountryByNationalNumber(nationalPhoneNumber, _ref) {\n var countries = _ref.countries,\n metadata = _ref.metadata;\n // Re-create `metadata` because it will be selecting a `country`.\n metadata = new Metadata(metadata);\n\n // const matchingCountries = []\n\n for (var _iterator = _createForOfIteratorHelperLoose(countries), _step; !(_step = _iterator()).done;) {\n var country = _step.value;\n metadata.selectNumberingPlan(country);\n // \"Leading digits\" patterns are only defined for about 20% of all countries.\n // By definition, matching \"leading digits\" is a sufficient but not a necessary\n // condition for a phone number to belong to a country.\n // The point of \"leading digits\" check is that it's the fastest one to get a match.\n // https://gitlab.com/catamphetamine/libphonenumber-js/blob/master/METADATA.md#leading_digits\n // I'd suppose that \"leading digits\" patterns are mutually exclusive for different countries\n // because of the intended use of that feature.\n if (metadata.leadingDigits()) {\n if (nationalPhoneNumber && nationalPhoneNumber.search(metadata.leadingDigits()) === 0) {\n return country;\n }\n }\n // Else perform full validation with all of those\n // fixed-line/mobile/etc regular expressions.\n else if (getNumberType({\n phone: nationalPhoneNumber,\n country: country\n }, undefined, metadata.metadata)) {\n // When multiple countries share the same \"country calling code\",\n // type patterns aren't guaranteed to be unique among them.\n // For example, both `US` and `CA` have the same pattern for `toll_free` numbers.\n // https://gitlab.com/catamphetamine/libphonenumber-js/-/issues/103#note_1417147572\n //\n // That means that this `if` condition could be `true` for multiple countries from the list.\n // Currently, it just returns the first one, which is also the \"main\" country for the \"country calling code\".\n // In an example with `toll_free` numbers above, `\"US\"` would be returned even though\n // it could as well be `\"CA\"`.\n //\n // There was also a time when this attempted to be overly smart\n // and kept track of all such multiple matching countries\n // and then picked the one that matched the `defaultCountry`, if provided.\n // For example, with `toll_free` numbers above, and with `defaultCountry: \"CA\"`,\n // it would've returned `\"CA\"` instead of `\"US\"`.\n // Later it turned out that such \"overly smart\" behavior turned out to be just confusing,\n // so this \"overly smart\" country detection was reverted to returning the \"main\" country\n // for the \"country calling code\".\n // https://gitlab.com/catamphetamine/libphonenumber-js/-/issues/154\n //\n return country;\n //\n // The \"overly smart\" behavior code:\n //\n // if (defaultCountry) {\n // \tif (country === defaultCountry) {\n // \t\treturn country\n // \t} else {\n // \t\tmatchingCountries.push(country)\n // \t}\n // } else {\n // \treturn country\n // }\n }\n }\n\n // // Return the first (\"main\") one of the `matchingCountries`.\n // if (matchingCountries.length > 0) {\n // \treturn matchingCountries[0]\n // }\n}\n//# sourceMappingURL=getCountryByNationalNumber.js.map","import getCountryByNationalNumber from './getCountryByNationalNumber.js';\nvar USE_NON_GEOGRAPHIC_COUNTRY_CODE = false;\n\n// Returns the exact country for the `nationalNumber`\n// that belongs to the specified \"country calling code\".\nexport default function getCountryByCallingCode(callingCode, _ref) {\n var nationalPhoneNumber = _ref.nationalNumber,\n metadata = _ref.metadata;\n /* istanbul ignore if */\n if (USE_NON_GEOGRAPHIC_COUNTRY_CODE) {\n if (metadata.isNonGeographicCallingCode(callingCode)) {\n return '001';\n }\n }\n var possibleCountries = metadata.getCountryCodesForCallingCode(callingCode);\n if (!possibleCountries) {\n return;\n }\n // If there's just one country corresponding to the country code,\n // then just return it, without further phone number digits validation.\n if (possibleCountries.length === 1) {\n return possibleCountries[0];\n }\n return getCountryByNationalNumber(nationalPhoneNumber, {\n countries: possibleCountries,\n metadata: metadata.metadata\n });\n}\n//# sourceMappingURL=getCountryByCallingCode.js.map","import extractNationalNumberFromPossiblyIncompleteNumber from './extractNationalNumberFromPossiblyIncompleteNumber.js';\nimport matchesEntirely from './matchesEntirely.js';\nimport checkNumberLength from './checkNumberLength.js';\nimport getCountryByCallingCode from './getCountryByCallingCode.js';\n\n/**\r\n * Strips national prefix and carrier code from a complete phone number.\r\n * The difference from the non-\"FromCompleteNumber\" function is that\r\n * it won't extract national prefix if the resultant number is too short\r\n * to be a complete number for the selected phone numbering plan.\r\n * @param {string} number — Complete phone number digits.\r\n * @param {string?} country — Country, if known.\r\n * @param {Metadata} metadata — Metadata with a phone numbering plan selected.\r\n * @return {object} `{ nationalNumber: string, carrierCode: string? }`.\r\n */\nexport default function extractNationalNumber(number, country, metadata) {\n // Parsing national prefixes and carrier codes\n // is only required for local phone numbers\n // but some people don't understand that\n // and sometimes write international phone numbers\n // with national prefixes (or maybe even carrier codes).\n // http://ucken.blogspot.ru/2016/03/trunk-prefixes-in-skype4b.html\n // Google's original library forgives such mistakes\n // and so does this library, because it has been requested:\n // https://github.com/catamphetamine/libphonenumber-js/issues/127\n var _extractNationalNumbe = extractNationalNumberFromPossiblyIncompleteNumber(number, metadata),\n carrierCode = _extractNationalNumbe.carrierCode,\n nationalNumber = _extractNationalNumbe.nationalNumber;\n if (nationalNumber !== number) {\n if (!shouldHaveExtractedNationalPrefix(number, nationalNumber, metadata)) {\n // Don't strip the national prefix.\n return {\n nationalNumber: number\n };\n }\n // Check the national (significant) number length after extracting national prefix and carrier code.\n // Legacy generated metadata (before `1.0.18`) didn't support the \"possible lengths\" feature.\n if (metadata.numberingPlan.possibleLengths()) {\n // If an exact `country` is not specified, attempt to detect it from the assumed national number.\n if (!country) {\n country = getCountryByCallingCode(metadata.numberingPlan.callingCode(), {\n nationalNumber: nationalNumber,\n metadata: metadata\n });\n }\n\n // The number remaining after stripping the national prefix and carrier code\n // should be long enough to have a possible length for the country.\n // Otherwise, don't strip the national prefix and carrier code,\n // since the original number could be a valid number.\n // This check has been copy-pasted \"as is\" from Google's original library:\n // https://github.com/google/libphonenumber/blob/876268eb1ad6cdc1b7b5bef17fc5e43052702d57/java/libphonenumber/src/com/google/i18n/phonenumbers/PhoneNumberUtil.java#L3236-L3250\n // It doesn't check for the \"possibility\" of the original `number`.\n // I guess it's fine not checking that one. It works as is anyway.\n if (!isPossibleIncompleteNationalNumber(nationalNumber, country, metadata)) {\n // Don't strip the national prefix.\n return {\n nationalNumber: number\n };\n }\n }\n }\n return {\n nationalNumber: nationalNumber,\n carrierCode: carrierCode\n };\n}\n\n// In some countries, the same digit could be a national prefix\n// or a leading digit of a valid phone number.\n// For example, in Russia, national prefix is `8`,\n// and also `800 555 35 35` is a valid number\n// in which `8` is not a national prefix, but the first digit\n// of a national (significant) number.\n// Same's with Belarus:\n// `82004910060` is a valid national (significant) number,\n// but `2004910060` is not.\n// To support such cases (to prevent the code from always stripping\n// national prefix), a condition is imposed: a national prefix\n// is not extracted when the original number is \"viable\" and the\n// resultant number is not, a \"viable\" national number being the one\n// that matches `national_number_pattern`.\nfunction shouldHaveExtractedNationalPrefix(nationalNumberBefore, nationalNumberAfter, metadata) {\n // The equivalent in Google's code is:\n // https://github.com/google/libphonenumber/blob/e326fa1fc4283bb05eb35cb3c15c18f98a31af33/java/libphonenumber/src/com/google/i18n/phonenumbers/PhoneNumberUtil.java#L2969-L3004\n if (matchesEntirely(nationalNumberBefore, metadata.nationalNumberPattern()) && !matchesEntirely(nationalNumberAfter, metadata.nationalNumberPattern())) {\n return false;\n }\n // This \"is possible\" national number (length) check has been commented out\n // because it's superceded by the (effectively) same check done in the\n // `extractNationalNumber()` function after it calls `shouldHaveExtractedNationalPrefix()`.\n // In other words, why run the same check twice if it could only be run once.\n // // Check the national (significant) number length after extracting national prefix and carrier code.\n // // Fixes a minor \"weird behavior\" bug: https://gitlab.com/catamphetamine/libphonenumber-js/-/issues/57\n // // (Legacy generated metadata (before `1.0.18`) didn't support the \"possible lengths\" feature).\n // if (metadata.possibleLengths()) {\n // \tif (isPossibleIncompleteNationalNumber(nationalNumberBefore, metadata) &&\n // \t\t!isPossibleIncompleteNationalNumber(nationalNumberAfter, metadata)) {\n // \t\treturn false\n // \t}\n // }\n return true;\n}\nfunction isPossibleIncompleteNationalNumber(nationalNumber, country, metadata) {\n switch (checkNumberLength(nationalNumber, country, metadata)) {\n case 'TOO_SHORT':\n case 'INVALID_LENGTH':\n // This library ignores \"local-only\" phone numbers (for simplicity).\n // See the readme for more info on what are \"local-only\" phone numbers.\n // case 'IS_POSSIBLE_LOCAL_ONLY':\n return false;\n default:\n return true;\n }\n}\n//# sourceMappingURL=extractNationalNumber.js.map","/**\r\n * Strips any national prefix (such as 0, 1) present in a\r\n * (possibly incomplete) number provided.\r\n * \"Carrier codes\" are only used in Colombia and Brazil,\r\n * and only when dialing within those countries from a mobile phone to a fixed line number.\r\n * Sometimes it won't actually strip national prefix\r\n * and will instead prepend some digits to the `number`:\r\n * for example, when number `2345678` is passed with `VI` country selected,\r\n * it will return `{ number: \"3402345678\" }`, because `340` area code is prepended.\r\n * @param {string} number — National number digits.\r\n * @param {object} metadata — Metadata with country selected.\r\n * @return {object} `{ nationalNumber: string, nationalPrefix: string? carrierCode: string? }`. Even if a national prefix was extracted, it's not necessarily present in the returned object, so don't rely on its presence in the returned object in order to find out whether a national prefix has been extracted or not.\r\n */\nexport default function extractNationalNumberFromPossiblyIncompleteNumber(number, metadata) {\n if (number && metadata.numberingPlan.nationalPrefixForParsing()) {\n // See METADATA.md for the description of\n // `national_prefix_for_parsing` and `national_prefix_transform_rule`.\n // Attempt to parse the first digits as a national prefix.\n var prefixPattern = new RegExp('^(?:' + metadata.numberingPlan.nationalPrefixForParsing() + ')');\n var prefixMatch = prefixPattern.exec(number);\n if (prefixMatch) {\n var nationalNumber;\n var carrierCode;\n // https://gitlab.com/catamphetamine/libphonenumber-js/-/blob/master/METADATA.md#national_prefix_for_parsing--national_prefix_transform_rule\n // If a `national_prefix_for_parsing` has any \"capturing groups\"\n // then it means that the national (significant) number is equal to\n // those \"capturing groups\" transformed via `national_prefix_transform_rule`,\n // and nothing could be said about the actual national prefix:\n // what is it and was it even there.\n // If a `national_prefix_for_parsing` doesn't have any \"capturing groups\",\n // then everything it matches is a national prefix.\n // To determine whether `national_prefix_for_parsing` matched any\n // \"capturing groups\", the value of the result of calling `.exec()`\n // is looked at, and if it has non-undefined values where there're\n // \"capturing groups\" in the regular expression, then it means\n // that \"capturing groups\" have been matched.\n // It's not possible to tell whether there'll be any \"capturing gropus\"\n // before the matching process, because a `national_prefix_for_parsing`\n // could exhibit both behaviors.\n var capturedGroupsCount = prefixMatch.length - 1;\n var hasCapturedGroups = capturedGroupsCount > 0 && prefixMatch[capturedGroupsCount];\n if (metadata.nationalPrefixTransformRule() && hasCapturedGroups) {\n nationalNumber = number.replace(prefixPattern, metadata.nationalPrefixTransformRule());\n // If there's more than one captured group,\n // then carrier code is the second one.\n if (capturedGroupsCount > 1) {\n carrierCode = prefixMatch[1];\n }\n }\n // If there're no \"capturing groups\",\n // or if there're \"capturing groups\" but no\n // `national_prefix_transform_rule`,\n // then just strip the national prefix from the number,\n // and possibly a carrier code.\n // Seems like there could be more.\n else {\n // `prefixBeforeNationalNumber` is the whole substring matched by\n // the `national_prefix_for_parsing` regular expression.\n // There seem to be no guarantees that it's just a national prefix.\n // For example, if there's a carrier code, it's gonna be a\n // part of `prefixBeforeNationalNumber` too.\n var prefixBeforeNationalNumber = prefixMatch[0];\n nationalNumber = number.slice(prefixBeforeNationalNumber.length);\n // If there's at least one captured group,\n // then carrier code is the first one.\n if (hasCapturedGroups) {\n carrierCode = prefixMatch[1];\n }\n }\n // Tries to guess whether a national prefix was present in the input.\n // This is not something copy-pasted from Google's library:\n // they don't seem to have an equivalent for that.\n // So this isn't an \"officially approved\" way of doing something like that.\n // But since there seems no other existing method, this library uses it.\n var nationalPrefix;\n if (hasCapturedGroups) {\n var possiblePositionOfTheFirstCapturedGroup = number.indexOf(prefixMatch[1]);\n var possibleNationalPrefix = number.slice(0, possiblePositionOfTheFirstCapturedGroup);\n // Example: an Argentinian (AR) phone number `0111523456789`.\n // `prefixMatch[0]` is `01115`, and `$1` is `11`,\n // and the rest of the phone number is `23456789`.\n // The national number is transformed via `9$1` to `91123456789`.\n // National prefix `0` is detected being present at the start.\n // if (possibleNationalPrefix.indexOf(metadata.numberingPlan.nationalPrefix()) === 0) {\n if (possibleNationalPrefix === metadata.numberingPlan.nationalPrefix()) {\n nationalPrefix = metadata.numberingPlan.nationalPrefix();\n }\n } else {\n nationalPrefix = prefixMatch[0];\n }\n return {\n nationalNumber: nationalNumber,\n nationalPrefix: nationalPrefix,\n carrierCode: carrierCode\n };\n }\n }\n return {\n nationalNumber: number\n };\n}\n//# sourceMappingURL=extractNationalNumberFromPossiblyIncompleteNumber.js.map","import stripIddPrefix from './stripIddPrefix.js';\nimport extractCountryCallingCodeFromInternationalNumberWithoutPlusSign from './extractCountryCallingCodeFromInternationalNumberWithoutPlusSign.js';\nimport Metadata from '../metadata.js';\nimport { MAX_LENGTH_COUNTRY_CODE } from '../constants.js';\n\n/**\r\n * Converts a phone number digits (possibly with a `+`)\r\n * into a calling code and the rest phone number digits.\r\n * The \"rest phone number digits\" could include\r\n * a national prefix, carrier code, and national\r\n * (significant) number.\r\n * @param {string} number — Phone number digits (possibly with a `+`).\r\n * @param {string} [country] — Country.\r\n * @param {string} [defaultCountry] — Default country.\r\n * @param {string} [defaultCallingCode] — Default calling code (some phone numbering plans are non-geographic).\r\n * @param {object} metadata\r\n * @return {object} `{ countryCallingCodeSource: string?, countryCallingCode: string?, number: string }`\r\n * @example\r\n * // Returns `{ countryCallingCode: \"1\", number: \"2133734253\" }`.\r\n * extractCountryCallingCode('2133734253', null, 'US', null, metadata)\r\n * extractCountryCallingCode('2133734253', null, null, '1', metadata)\r\n * extractCountryCallingCode('+12133734253', null, null, null, metadata)\r\n * extractCountryCallingCode('+12133734253', null, 'RU', null, metadata)\r\n */\nexport default function extractCountryCallingCode(number, country, defaultCountry, defaultCallingCode, metadata) {\n if (!number) {\n return {};\n }\n var isNumberWithIddPrefix;\n\n // If this is not an international phone number,\n // then either extract an \"IDD\" prefix, or extract a\n // country calling code from a number by autocorrecting it\n // by prepending a leading `+` in cases when it starts\n // with the country calling code.\n // https://wikitravel.org/en/International_dialling_prefix\n // https://github.com/catamphetamine/libphonenumber-js/issues/376\n if (number[0] !== '+') {\n // Convert an \"out-of-country\" dialing phone number\n // to a proper international phone number.\n var numberWithoutIDD = stripIddPrefix(number, country || defaultCountry, defaultCallingCode, metadata);\n // If an IDD prefix was stripped then\n // convert the number to international one\n // for subsequent parsing.\n if (numberWithoutIDD && numberWithoutIDD !== number) {\n isNumberWithIddPrefix = true;\n number = '+' + numberWithoutIDD;\n } else {\n // Check to see if the number starts with the country calling code\n // for the default country. If so, we remove the country calling code,\n // and do some checks on the validity of the number before and after.\n // https://github.com/catamphetamine/libphonenumber-js/issues/376\n if (country || defaultCountry || defaultCallingCode) {\n var _extractCountryCallin = extractCountryCallingCodeFromInternationalNumberWithoutPlusSign(number, country, defaultCountry, defaultCallingCode, metadata),\n countryCallingCode = _extractCountryCallin.countryCallingCode,\n shorterNumber = _extractCountryCallin.number;\n if (countryCallingCode) {\n return {\n countryCallingCodeSource: 'FROM_NUMBER_WITHOUT_PLUS_SIGN',\n countryCallingCode: countryCallingCode,\n number: shorterNumber\n };\n }\n }\n return {\n // No need to set it to `UNSPECIFIED`. It can be just `undefined`.\n // countryCallingCodeSource: 'UNSPECIFIED',\n number: number\n };\n }\n }\n\n // `number` can only be international at this point.\n\n // Fast abortion: country codes do not begin with a '0'\n if (number[1] === '0') {\n return {};\n }\n metadata = new Metadata(metadata);\n\n // The thing with country phone codes\n // is that they are orthogonal to each other\n // i.e. there's no such country phone code A\n // for which country phone code B exists\n // where B starts with A.\n // Therefore, while scanning digits,\n // if a valid country code is found,\n // that means that it is the country code.\n //\n var i = 2;\n while (i - 1 <= MAX_LENGTH_COUNTRY_CODE && i <= number.length) {\n var _countryCallingCode = number.slice(1, i);\n if (metadata.hasCallingCode(_countryCallingCode)) {\n metadata.selectNumberingPlan(_countryCallingCode);\n return {\n countryCallingCodeSource: isNumberWithIddPrefix ? 'FROM_NUMBER_WITH_IDD' : 'FROM_NUMBER_WITH_PLUS_SIGN',\n countryCallingCode: _countryCallingCode,\n number: number.slice(i)\n };\n }\n i++;\n }\n return {};\n}\n\n// The possible values for the returned `countryCallingCodeSource` are:\n//\n// Copy-pasted from:\n// https://github.com/google/libphonenumber/blob/master/resources/phonenumber.proto\n//\n// // The source from which the country_code is derived. This is not set in the\n// // general parsing method, but in the method that parses and keeps raw_input.\n// // New fields could be added upon request.\n// enum CountryCodeSource {\n// // Default value returned if this is not set, because the phone number was\n// // created using parse, not parseAndKeepRawInput. hasCountryCodeSource will\n// // return false if this is the case.\n// UNSPECIFIED = 0;\n//\n// // The country_code is derived based on a phone number with a leading \"+\",\n// // e.g. the French number \"+33 1 42 68 53 00\".\n// FROM_NUMBER_WITH_PLUS_SIGN = 1;\n//\n// // The country_code is derived based on a phone number with a leading IDD,\n// // e.g. the French number \"011 33 1 42 68 53 00\", as it is dialled from US.\n// FROM_NUMBER_WITH_IDD = 5;\n//\n// // The country_code is derived based on a phone number without a leading\n// // \"+\", e.g. the French number \"33 1 42 68 53 00\" when defaultCountry is\n// // supplied as France.\n// FROM_NUMBER_WITHOUT_PLUS_SIGN = 10;\n//\n// // The country_code is derived NOT based on the phone number itself, but\n// // from the defaultCountry parameter provided in the parsing function by the\n// // clients. This happens mostly for numbers written in the national format\n// // (without country code). For example, this would be set when parsing the\n// // French number \"01 42 68 53 00\", when defaultCountry is supplied as\n// // France.\n// FROM_DEFAULT_COUNTRY = 20;\n// }\n//# sourceMappingURL=extractCountryCallingCode.js.map","import Metadata from '../metadata.js';\nimport matchesEntirely from './matchesEntirely.js';\nimport extractNationalNumber from './extractNationalNumber.js';\nimport checkNumberLength from './checkNumberLength.js';\nimport getCountryCallingCode from '../getCountryCallingCode.js';\n\n/**\r\n * Sometimes some people incorrectly input international phone numbers\r\n * without the leading `+`. This function corrects such input.\r\n * @param {string} number — Phone number digits.\r\n * @param {string} [country] — Exact country of the phone number.\r\n * @param {string} [defaultCountry]\r\n * @param {string} [defaultCallingCode]\r\n * @param {object} metadata\r\n * @return {object} `{ countryCallingCode: string?, number: string }`.\r\n */\nexport default function extractCountryCallingCodeFromInternationalNumberWithoutPlusSign(number, country, defaultCountry, defaultCallingCode, metadata) {\n var countryCallingCode = country || defaultCountry ? getCountryCallingCode(country || defaultCountry, metadata) : defaultCallingCode;\n if (number.indexOf(countryCallingCode) === 0) {\n metadata = new Metadata(metadata);\n metadata.selectNumberingPlan(country || defaultCountry, countryCallingCode);\n var possibleShorterNumber = number.slice(countryCallingCode.length);\n var _extractNationalNumbe = extractNationalNumber(possibleShorterNumber, country, metadata),\n possibleShorterNationalNumber = _extractNationalNumbe.nationalNumber;\n var _extractNationalNumbe2 = extractNationalNumber(number, country, metadata),\n nationalNumber = _extractNationalNumbe2.nationalNumber;\n\n // If the number was not valid before but is valid now,\n // or if it was too long before, we consider the number\n // with the country calling code stripped to be a better result\n // and keep that instead.\n // For example, in Germany (+49), `49` is a valid area code,\n // so if a number starts with `49`, it could be both a valid\n // national German number or an international number without\n // a leading `+`.\n if (!matchesEntirely(nationalNumber, metadata.nationalNumberPattern()) && matchesEntirely(possibleShorterNationalNumber, metadata.nationalNumberPattern()) || checkNumberLength(nationalNumber, country, metadata) === 'TOO_LONG') {\n return {\n countryCallingCode: countryCallingCode,\n number: possibleShorterNumber\n };\n }\n }\n return {\n number: number\n };\n}\n//# sourceMappingURL=extractCountryCallingCodeFromInternationalNumberWithoutPlusSign.js.map","import applyInternationalSeparatorStyle from './applyInternationalSeparatorStyle.js';\n\n// This was originally set to $1 but there are some countries for which the\n// first group is not used in the national pattern (e.g. Argentina) so the $1\n// group does not match correctly. Therefore, we use `\\d`, so that the first\n// group actually used in the pattern will be matched.\nexport var FIRST_GROUP_PATTERN = /(\\$\\d)/;\nexport default function formatNationalNumberUsingFormat(number, format, _ref) {\n var useInternationalFormat = _ref.useInternationalFormat,\n withNationalPrefix = _ref.withNationalPrefix,\n carrierCode = _ref.carrierCode,\n metadata = _ref.metadata;\n var formattedNumber = number.replace(new RegExp(format.pattern()), useInternationalFormat ? format.internationalFormat() :\n // This library doesn't use `domestic_carrier_code_formatting_rule`,\n // because that one is only used when formatting phone numbers\n // for dialing from a mobile phone, and this is not a dialing library.\n // carrierCode && format.domesticCarrierCodeFormattingRule()\n // \t// First, replace the $CC in the formatting rule with the desired carrier code.\n // \t// Then, replace the $FG in the formatting rule with the first group\n // \t// and the carrier code combined in the appropriate way.\n // \t? format.format().replace(FIRST_GROUP_PATTERN, format.domesticCarrierCodeFormattingRule().replace('$CC', carrierCode))\n // \t: (\n // \t\twithNationalPrefix && format.nationalPrefixFormattingRule()\n // \t\t\t? format.format().replace(FIRST_GROUP_PATTERN, format.nationalPrefixFormattingRule())\n // \t\t\t: format.format()\n // \t)\n withNationalPrefix && format.nationalPrefixFormattingRule() ? format.format().replace(FIRST_GROUP_PATTERN, format.nationalPrefixFormattingRule()) : format.format());\n if (useInternationalFormat) {\n return applyInternationalSeparatorStyle(formattedNumber);\n }\n return formattedNumber;\n}\n//# sourceMappingURL=formatNationalNumberUsingFormat.js.map","import { VALID_PUNCTUATION } from '../constants.js';\n\n// Removes brackets and replaces dashes with spaces.\n//\n// E.g. \"(999) 111-22-33\" -> \"999 111 22 33\"\n//\n// For some reason Google's metadata contains `<intlFormat/>`s with brackets and dashes.\n// Meanwhile, there's no single opinion about using punctuation in international phone numbers.\n//\n// For example, Google's `<intlFormat/>` for USA is `+1 213-373-4253`.\n// And here's a quote from WikiPedia's \"North American Numbering Plan\" page:\n// https://en.wikipedia.org/wiki/North_American_Numbering_Plan\n//\n// \"The country calling code for all countries participating in the NANP is 1.\n// In international format, an NANP number should be listed as +1 301 555 01 00,\n// where 301 is an area code (Maryland).\"\n//\n// I personally prefer the international format without any punctuation.\n// For example, brackets are remnants of the old age, meaning that the\n// phone number part in brackets (so called \"area code\") can be omitted\n// if dialing within the same \"area\".\n// And hyphens were clearly introduced for splitting local numbers into memorizable groups.\n// For example, remembering \"5553535\" is difficult but \"555-35-35\" is much simpler.\n// Imagine a man taking a bus from home to work and seeing an ad with a phone number.\n// He has a couple of seconds to memorize that number until it passes by.\n// If it were spaces instead of hyphens the man wouldn't necessarily get it,\n// but with hyphens instead of spaces the grouping is more explicit.\n// I personally think that hyphens introduce visual clutter,\n// so I prefer replacing them with spaces in international numbers.\n// In the modern age all output is done on displays where spaces are clearly distinguishable\n// so hyphens can be safely replaced with spaces without losing any legibility.\n//\nexport default function applyInternationalSeparatorStyle(formattedNumber) {\n return formattedNumber.replace(new RegExp(\"[\".concat(VALID_PUNCTUATION, \"]+\"), 'g'), ' ').trim();\n}\n//# sourceMappingURL=applyInternationalSeparatorStyle.js.map","import Metadata from '../metadata.js';\n\n/**\r\n * Pattern that makes it easy to distinguish whether a region has a single\r\n * international dialing prefix or not. If a region has a single international\r\n * prefix (e.g. 011 in USA), it will be represented as a string that contains\r\n * a sequence of ASCII digits, and possibly a tilde, which signals waiting for\r\n * the tone. If there are multiple available international prefixes in a\r\n * region, they will be represented as a regex string that always contains one\r\n * or more characters that are not ASCII digits or a tilde.\r\n */\nvar SINGLE_IDD_PREFIX_REG_EXP = /^[\\d]+(?:[~\\u2053\\u223C\\uFF5E][\\d]+)?$/;\n\n// If the `country` supports IDD calling, it returns a preferred IDD prefix.\n// If the `country` doesn't support IDD calling, it returns `undefined`.\nexport default function getIddPrefix(country, callingCode, metadata) {\n var countryMetadata = new Metadata(metadata);\n countryMetadata.selectNumberingPlan(country, callingCode);\n if (countryMetadata.defaultIDDPrefix()) {\n return countryMetadata.defaultIDDPrefix();\n }\n if (SINGLE_IDD_PREFIX_REG_EXP.test(countryMetadata.IDDPrefix())) {\n return countryMetadata.IDDPrefix();\n }\n}\n//# sourceMappingURL=getIddPrefix.js.map","import { VALID_DIGITS } from '../../constants.js';\n\n// The RFC 3966 format for extensions.\nvar RFC3966_EXTN_PREFIX = ';ext=';\n\n/**\r\n * Helper method for constructing regular expressions for parsing. Creates\r\n * an expression that captures up to max_length digits.\r\n * @return {string} RegEx pattern to capture extension digits.\r\n */\nvar getExtensionDigitsPattern = function getExtensionDigitsPattern(maxLength) {\n return \"([\".concat(VALID_DIGITS, \"]{1,\").concat(maxLength, \"})\");\n};\n\n/**\r\n * Helper initialiser method to create the regular-expression pattern to match\r\n * extensions.\r\n * Copy-pasted from Google's `libphonenumber`:\r\n * https://github.com/google/libphonenumber/blob/55b2646ec9393f4d3d6661b9c82ef9e258e8b829/javascript/i18n/phonenumbers/phonenumberutil.js#L759-L766\r\n * @return {string} RegEx pattern to capture extensions.\r\n */\nexport default function createExtensionPattern(purpose) {\n // We cap the maximum length of an extension based on the ambiguity of the way\n // the extension is prefixed. As per ITU, the officially allowed length for\n // extensions is actually 40, but we don't support this since we haven't seen real\n // examples and this introduces many false interpretations as the extension labels\n // are not standardized.\n /** @type {string} */\n var extLimitAfterExplicitLabel = '20';\n /** @type {string} */\n var extLimitAfterLikelyLabel = '15';\n /** @type {string} */\n var extLimitAfterAmbiguousChar = '9';\n /** @type {string} */\n var extLimitWhenNotSure = '6';\n\n /** @type {string} */\n var possibleSeparatorsBetweenNumberAndExtLabel = \"[ \\xA0\\\\t,]*\";\n // Optional full stop (.) or colon, followed by zero or more spaces/tabs/commas.\n /** @type {string} */\n var possibleCharsAfterExtLabel = \"[:\\\\.\\uFF0E]?[ \\xA0\\\\t,-]*\";\n /** @type {string} */\n var optionalExtnSuffix = \"#?\";\n\n // Here the extension is called out in more explicit way, i.e mentioning it obvious\n // patterns like \"ext.\".\n /** @type {string} */\n var explicitExtLabels = \"(?:e?xt(?:ensi(?:o\\u0301?|\\xF3))?n?|\\uFF45?\\uFF58\\uFF54\\uFF4E?|\\u0434\\u043E\\u0431|anexo)\";\n // One-character symbols that can be used to indicate an extension, and less\n // commonly used or more ambiguous extension labels.\n /** @type {string} */\n var ambiguousExtLabels = \"(?:[x\\uFF58#\\uFF03~\\uFF5E]|int|\\uFF49\\uFF4E\\uFF54)\";\n // When extension is not separated clearly.\n /** @type {string} */\n var ambiguousSeparator = \"[- ]+\";\n // This is the same as possibleSeparatorsBetweenNumberAndExtLabel, but not matching\n // comma as extension label may have it.\n /** @type {string} */\n var possibleSeparatorsNumberExtLabelNoComma = \"[ \\xA0\\\\t]*\";\n // \",,\" is commonly used for auto dialling the extension when connected. First\n // comma is matched through possibleSeparatorsBetweenNumberAndExtLabel, so we do\n // not repeat it here. Semi-colon works in Iphone and Android also to pop up a\n // button with the extension number following.\n /** @type {string} */\n var autoDiallingAndExtLabelsFound = \"(?:,{2}|;)\";\n\n /** @type {string} */\n var rfcExtn = RFC3966_EXTN_PREFIX + getExtensionDigitsPattern(extLimitAfterExplicitLabel);\n /** @type {string} */\n var explicitExtn = possibleSeparatorsBetweenNumberAndExtLabel + explicitExtLabels + possibleCharsAfterExtLabel + getExtensionDigitsPattern(extLimitAfterExplicitLabel) + optionalExtnSuffix;\n /** @type {string} */\n var ambiguousExtn = possibleSeparatorsBetweenNumberAndExtLabel + ambiguousExtLabels + possibleCharsAfterExtLabel + getExtensionDigitsPattern(extLimitAfterAmbiguousChar) + optionalExtnSuffix;\n /** @type {string} */\n var americanStyleExtnWithSuffix = ambiguousSeparator + getExtensionDigitsPattern(extLimitWhenNotSure) + \"#\";\n\n /** @type {string} */\n var autoDiallingExtn = possibleSeparatorsNumberExtLabelNoComma + autoDiallingAndExtLabelsFound + possibleCharsAfterExtLabel + getExtensionDigitsPattern(extLimitAfterLikelyLabel) + optionalExtnSuffix;\n /** @type {string} */\n var onlyCommasExtn = possibleSeparatorsNumberExtLabelNoComma + \"(?:,)+\" + possibleCharsAfterExtLabel + getExtensionDigitsPattern(extLimitAfterAmbiguousChar) + optionalExtnSuffix;\n\n // The first regular expression covers RFC 3966 format, where the extension is added\n // using \";ext=\". The second more generic where extension is mentioned with explicit\n // labels like \"ext:\". In both the above cases we allow more numbers in extension than\n // any other extension labels. The third one captures when single character extension\n // labels or less commonly used labels are used. In such cases we capture fewer\n // extension digits in order to reduce the chance of falsely interpreting two\n // numbers beside each other as a number + extension. The fourth one covers the\n // special case of American numbers where the extension is written with a hash\n // at the end, such as \"- 503#\". The fifth one is exclusively for extension\n // autodialling formats which are used when dialling and in this case we accept longer\n // extensions. The last one is more liberal on the number of commas that acts as\n // extension labels, so we have a strict cap on the number of digits in such extensions.\n return rfcExtn + \"|\" + explicitExtn + \"|\" + ambiguousExtn + \"|\" + americanStyleExtnWithSuffix + \"|\" + autoDiallingExtn + \"|\" + onlyCommasExtn;\n}\n//# sourceMappingURL=createExtensionPattern.js.map","import { MIN_LENGTH_FOR_NSN, VALID_DIGITS, VALID_PUNCTUATION, PLUS_CHARS } from '../constants.js';\nimport createExtensionPattern from './extension/createExtensionPattern.js';\n\n// Regular expression of viable phone numbers. This is location independent.\n// Checks we have at least three leading digits, and only valid punctuation,\n// alpha characters and digits in the phone number. Does not include extension\n// data. The symbol 'x' is allowed here as valid punctuation since it is often\n// used as a placeholder for carrier codes, for example in Brazilian phone\n// numbers. We also allow multiple '+' characters at the start.\n//\n// Corresponds to the following:\n// [digits]{minLengthNsn}|\n// plus_sign*\n// (([punctuation]|[star])*[digits]){3,}([punctuation]|[star]|[digits]|[alpha])*\n//\n// The first reg-ex is to allow short numbers (two digits long) to be parsed if\n// they are entered as \"15\" etc, but only if there is no punctuation in them.\n// The second expression restricts the number of digits to three or more, but\n// then allows them to be in international form, and to have alpha-characters\n// and punctuation. We split up the two reg-exes here and combine them when\n// creating the reg-ex VALID_PHONE_NUMBER_PATTERN itself so we can prefix it\n// with ^ and append $ to each branch.\n//\n// \"Note VALID_PUNCTUATION starts with a -,\n// so must be the first in the range\" (c) Google devs.\n// (wtf did they mean by saying that; probably nothing)\n//\nvar MIN_LENGTH_PHONE_NUMBER_PATTERN = '[' + VALID_DIGITS + ']{' + MIN_LENGTH_FOR_NSN + '}';\n//\n// And this is the second reg-exp:\n// (see MIN_LENGTH_PHONE_NUMBER_PATTERN for a full description of this reg-exp)\n//\nexport var VALID_PHONE_NUMBER = '[' + PLUS_CHARS + ']{0,1}' + '(?:' + '[' + VALID_PUNCTUATION + ']*' + '[' + VALID_DIGITS + ']' + '){3,}' + '[' + VALID_PUNCTUATION + VALID_DIGITS + ']*';\n\n// This regular expression isn't present in Google's `libphonenumber`\n// and is only used to determine whether the phone number being input\n// is too short for it to even consider it a \"valid\" number.\n// This is just a way to differentiate between a really invalid phone\n// number like \"abcde\" and a valid phone number that a user has just\n// started inputting, like \"+1\" or \"1\": both these cases would be\n// considered `NOT_A_NUMBER` by Google's `libphonenumber`, but this\n// library can provide a more detailed error message — whether it's\n// really \"not a number\", or is it just a start of a valid phone number.\nvar VALID_PHONE_NUMBER_START_REG_EXP = new RegExp('^' + '[' + PLUS_CHARS + ']{0,1}' + '(?:' + '[' + VALID_PUNCTUATION + ']*' + '[' + VALID_DIGITS + ']' + '){1,2}' + '$', 'i');\nexport var VALID_PHONE_NUMBER_WITH_EXTENSION = VALID_PHONE_NUMBER +\n// Phone number extensions\n'(?:' + createExtensionPattern() + ')?';\n\n// The combined regular expression for valid phone numbers:\n//\nvar VALID_PHONE_NUMBER_PATTERN = new RegExp(\n// Either a short two-digit-only phone number\n'^' + MIN_LENGTH_PHONE_NUMBER_PATTERN + '$' + '|' +\n// Or a longer fully parsed phone number (min 3 characters)\n'^' + VALID_PHONE_NUMBER_WITH_EXTENSION + '$', 'i');\n\n// Checks to see if the string of characters could possibly be a phone number at\n// all. At the moment, checks to see that the string begins with at least 2\n// digits, ignoring any punctuation commonly found in phone numbers. This method\n// does not require the number to be normalized in advance - but does assume\n// that leading non-number symbols have been removed, such as by the method\n// `extract_possible_number`.\n//\nexport default function isViablePhoneNumber(number) {\n return number.length >= MIN_LENGTH_FOR_NSN && VALID_PHONE_NUMBER_PATTERN.test(number);\n}\n\n// This is just a way to differentiate between a really invalid phone\n// number like \"abcde\" and a valid phone number that a user has just\n// started inputting, like \"+1\" or \"1\": both these cases would be\n// considered `NOT_A_NUMBER` by Google's `libphonenumber`, but this\n// library can provide a more detailed error message — whether it's\n// really \"not a number\", or is it just a start of a valid phone number.\nexport function isViablePhoneNumberStart(number) {\n return VALID_PHONE_NUMBER_START_REG_EXP.test(number);\n}\n//# sourceMappingURL=isViablePhoneNumber.js.map","// This is a port of Google Android `libphonenumber`'s\n// `phonenumberutil.js` of December 31th, 2018.\n//\n// https://github.com/googlei18n/libphonenumber/commits/master/javascript/i18n/phonenumbers/phonenumberutil.js\n\nimport matchesEntirely from './helpers/matchesEntirely.js';\nimport formatNationalNumberUsingFormat from './helpers/formatNationalNumberUsingFormat.js';\nimport Metadata, { getCountryCallingCode } from './metadata.js';\nimport getIddPrefix from './helpers/getIddPrefix.js';\nimport { formatRFC3966 } from './helpers/RFC3966.js';\nvar DEFAULT_OPTIONS = {\n formatExtension: function formatExtension(formattedNumber, extension, metadata) {\n return \"\".concat(formattedNumber).concat(metadata.ext()).concat(extension);\n }\n};\n\n/**\r\n * Formats a phone number.\r\n *\r\n * format(phoneNumberInstance, 'INTERNATIONAL', { ..., v2: true }, metadata)\r\n * format(phoneNumberInstance, 'NATIONAL', { ..., v2: true }, metadata)\r\n *\r\n * format({ phone: '8005553535', country: 'RU' }, 'INTERNATIONAL', { ... }, metadata)\r\n * format({ phone: '8005553535', country: 'RU' }, 'NATIONAL', undefined, metadata)\r\n *\r\n * @param {object|PhoneNumber} input — If `options.v2: true` flag is passed, the `input` should be a `PhoneNumber` instance. Otherwise, it should be an object of shape `{ phone: '...', country: '...' }`.\r\n * @param {string} format\r\n * @param {object} [options]\r\n * @param {object} metadata\r\n * @return {string}\r\n */\nexport default function formatNumber(input, format, options, metadata) {\n // Apply default options.\n if (options) {\n // Using ES6 \"rest spread\" syntax here didn't work with `babel`/`istanbul`\n // for some weird reason: this line of code would cause the code coverage\n // to show as not 100%. That's because `babel`/`istanbul`, for some weird reason,\n // apparently doesn't know how to properly exclude Babel polyfills from code coverage.\n //\n // options = { ...DEFAULT_OPTIONS, ...options }\n //\n options = merge({}, DEFAULT_OPTIONS, options);\n } else {\n options = DEFAULT_OPTIONS;\n }\n metadata = new Metadata(metadata);\n\n // Normally, the `input` object is supposed to be a `PhoneNumber` class instance.\n // Also, according to the `PhoneNumber` class source code, `country` can't be \"001\".\n // It means that normally `input.country` or `input.countryCallingCode` is supposed\n // to be present because either of the two is always required to exist in a `PhoneNumber` instance.\n // This means that realistically, it's gonna step into either the first `if`\n // or the following `else if`, and normally it won't even reach the legacy-compatibility\n // `else return input.phone || ''` part.\n // So normally, it won't ever return an empty string here.\n if (input.country && input.country !== '001') {\n // Validate `input.country`.\n if (!metadata.hasCountry(input.country)) {\n throw new Error(\"Unknown country: \".concat(input.country));\n }\n metadata.selectNumberingPlan(input.country);\n } else if (input.countryCallingCode) {\n metadata.selectNumberingPlan(input.countryCallingCode);\n } else return input.phone || '';\n var countryCallingCode = metadata.countryCallingCode();\n var nationalNumber = options.v2 ? input.nationalNumber : input.phone;\n\n // This variable should have been declared inside `case`s\n // but Babel has a bug and it says \"duplicate variable declaration\".\n var number;\n switch (format) {\n case 'NATIONAL':\n // Normally, the `input` object is supposed to be a `PhoneNumber` class instance,\n // and a `PhoneNumber` class instance is always required to have a `nationalNumber`.\n // This means that the `if (!nationalNumber)` below is just for legacy-compatibility\n // and it normally can't really happen, so normally it won't ever return an empty string here.\n if (!nationalNumber) {\n return '';\n }\n number = formatNationalNumber(nationalNumber, input.carrierCode, 'NATIONAL', metadata, options);\n return addExtension(number, input.ext, metadata, options.formatExtension);\n case 'INTERNATIONAL':\n // Legacy argument support.\n // (`{ country: ..., phone: '' }`)\n if (!nationalNumber) {\n return \"+\".concat(countryCallingCode);\n }\n number = formatNationalNumber(nationalNumber, null, 'INTERNATIONAL', metadata, options);\n number = \"+\".concat(countryCallingCode, \" \").concat(number);\n return addExtension(number, input.ext, metadata, options.formatExtension);\n case 'E.164':\n // `E.164` doesn't define \"phone number extensions\".\n return \"+\".concat(countryCallingCode).concat(nationalNumber);\n case 'RFC3966':\n return formatRFC3966({\n number: \"+\".concat(countryCallingCode).concat(nationalNumber),\n ext: input.ext\n });\n\n // For reference, here's Google's IDD formatter:\n // https://github.com/google/libphonenumber/blob/32719cf74e68796788d1ca45abc85dcdc63ba5b9/java/libphonenumber/src/com/google/i18n/phonenumbers/PhoneNumberUtil.java#L1546\n // Not saying that this IDD formatter replicates it 1:1, but it seems to work.\n // Who would even need to format phone numbers in IDD format anyway?\n case 'IDD':\n // If the required `fromCountry` parameter is not passed, it will return `undefined`.\n if (!options.fromCountry) {\n return;\n // throw new Error('`fromCountry` option not passed for IDD-prefixed formatting.')\n }\n var formattedNumber = formatIDD(nationalNumber, input.carrierCode, countryCallingCode, options.fromCountry, metadata);\n // If the country of the phone number doesn't support IDD calling, it will return `undefined`.\n if (!formattedNumber) {\n return;\n }\n return addExtension(formattedNumber, input.ext, metadata, options.formatExtension);\n default:\n throw new Error(\"Unknown \\\"format\\\" argument passed to \\\"formatNumber()\\\": \\\"\".concat(format, \"\\\"\"));\n }\n}\nfunction formatNationalNumber(number, carrierCode, formatAs, metadata, options) {\n var format = chooseFormatForNumber(metadata.formats(), number);\n if (!format) {\n return number;\n }\n return formatNationalNumberUsingFormat(number, format, {\n useInternationalFormat: formatAs === 'INTERNATIONAL',\n withNationalPrefix: format.nationalPrefixIsOptionalWhenFormattingInNationalFormat() && options && options.nationalPrefix === false ? false : true,\n carrierCode: carrierCode,\n metadata: metadata\n });\n}\nexport function chooseFormatForNumber(availableFormats, nationalNumber) {\n // Using a `for ... of` loop here didn't work with `babel`/`istanbul`:\n // for some weird reason, it showed code coverage less than 100%.\n // That's because `babel`/`istanbul`, for some weird reason,\n // apparently doesn't know how to properly exclude Babel polyfills from code coverage.\n //\n // for (const format of availableFormats) { ... }\n //\n return pickFirstMatchingElement(availableFormats, function (format) {\n // Validate leading digits.\n // The test case for \"else path\" could be found by searching for\n // \"format.leadingDigitsPatterns().length === 0\".\n if (format.leadingDigitsPatterns().length > 0) {\n // The last leading_digits_pattern is used here, as it is the most detailed\n var lastLeadingDigitsPattern = format.leadingDigitsPatterns()[format.leadingDigitsPatterns().length - 1];\n // If leading digits don't match then move on to the next phone number format\n if (nationalNumber.search(lastLeadingDigitsPattern) !== 0) {\n return false;\n }\n }\n // Check that the national number matches the phone number format regular expression\n return matchesEntirely(nationalNumber, format.pattern());\n });\n}\nfunction addExtension(formattedNumber, ext, metadata, formatExtension) {\n return ext ? formatExtension(formattedNumber, ext, metadata) : formattedNumber;\n}\nfunction formatIDD(nationalNumber, carrierCode, countryCallingCode, fromCountry, metadata) {\n var fromCountryCallingCode = getCountryCallingCode(fromCountry, metadata.metadata);\n // When calling within the same country calling code.\n if (fromCountryCallingCode === countryCallingCode) {\n var formattedNumber = formatNationalNumber(nationalNumber, carrierCode, 'NATIONAL', metadata);\n // For NANPA regions, return the national format for these regions\n // but prefix it with the country calling code.\n if (countryCallingCode === '1') {\n return countryCallingCode + ' ' + formattedNumber;\n }\n // If regions share a country calling code, the country calling code need\n // not be dialled. This also applies when dialling within a region, so this\n // if clause covers both these cases. Technically this is the case for\n // dialling from La Reunion to other overseas departments of France (French\n // Guiana, Martinique, Guadeloupe), but not vice versa - so we don't cover\n // this edge case for now and for those cases return the version including\n // country calling code. Details here:\n // http://www.petitfute.com/voyage/225-info-pratiques-reunion\n //\n return formattedNumber;\n }\n var iddPrefix = getIddPrefix(fromCountry, undefined, metadata.metadata);\n if (iddPrefix) {\n return \"\".concat(iddPrefix, \" \").concat(countryCallingCode, \" \").concat(formatNationalNumber(nationalNumber, null, 'INTERNATIONAL', metadata));\n }\n}\nfunction merge() {\n var i = 1;\n for (var _len = arguments.length, objects = new Array(_len), _key = 0; _key < _len; _key++) {\n objects[_key] = arguments[_key];\n }\n while (i < objects.length) {\n if (objects[i]) {\n for (var key in objects[i]) {\n objects[0][key] = objects[i][key];\n }\n }\n i++;\n }\n return objects[0];\n}\nfunction pickFirstMatchingElement(elements, testFunction) {\n var i = 0;\n while (i < elements.length) {\n if (testFunction(elements[i])) {\n return elements[i];\n }\n i++;\n }\n}\n//# sourceMappingURL=format.js.map","function _slicedToArray(r, e) { return _arrayWithHoles(r) || _iterableToArrayLimit(r, e) || _unsupportedIterableToArray(r, e) || _nonIterableRest(); }\nfunction _nonIterableRest() { throw new TypeError(\"Invalid attempt to destructure non-iterable instance.\\nIn order to be iterable, non-array objects must have a [Symbol.iterator]() method.\"); }\nfunction _iterableToArrayLimit(r, l) { var t = null == r ? null : \"undefined\" != typeof Symbol && r[Symbol.iterator] || r[\"@@iterator\"]; if (null != t) { var e, n, i, u, a = [], f = !0, o = !1; try { if (i = (t = t.call(r)).next, 0 === l) { if (Object(t) !== t) return; f = !1; } else for (; !(f = (e = i.call(t)).done) && (a.push(e.value), a.length !== l); f = !0); } catch (r) { o = !0, n = r; } finally { try { if (!f && null != t[\"return\"] && (u = t[\"return\"](), Object(u) !== u)) return; } finally { if (o) throw n; } } return a; } }\nfunction _arrayWithHoles(r) { if (Array.isArray(r)) return r; }\nfunction _createForOfIteratorHelperLoose(r, e) { var t = \"undefined\" != typeof Symbol && r[Symbol.iterator] || r[\"@@iterator\"]; if (t) return (t = t.call(r)).next.bind(t); if (Array.isArray(r) || (t = _unsupportedIterableToArray(r)) || e && r && \"number\" == typeof r.length) { t && (r = t); var o = 0; return function () { return o >= r.length ? { done: !0 } : { done: !1, value: r[o++] }; }; } throw new TypeError(\"Invalid attempt to iterate non-iterable instance.\\nIn order to be iterable, non-array objects must have a [Symbol.iterator]() method.\"); }\nfunction _unsupportedIterableToArray(r, a) { if (r) { if (\"string\" == typeof r) return _arrayLikeToArray(r, a); var t = {}.toString.call(r).slice(8, -1); return \"Object\" === t && r.constructor && (t = r.constructor.name), \"Map\" === t || \"Set\" === t ? Array.from(r) : \"Arguments\" === t || /^(?:Ui|I)nt(?:8|16|32)(?:Clamped)?Array$/.test(t) ? _arrayLikeToArray(r, a) : void 0; } }\nfunction _arrayLikeToArray(r, a) { (null == a || a > r.length) && (a = r.length); for (var e = 0, n = Array(a); e < a; e++) n[e] = r[e]; return n; }\nimport isViablePhoneNumber from './isViablePhoneNumber.js';\n\n// https://www.ietf.org/rfc/rfc3966.txt\n\n/**\r\n * @param {string} text - Phone URI (RFC 3966).\r\n * @return {object} `{ ?number, ?ext }`.\r\n */\nexport function parseRFC3966(text) {\n var number;\n var ext;\n\n // Replace \"tel:\" with \"tel=\" for parsing convenience.\n text = text.replace(/^tel:/, 'tel=');\n for (var _iterator = _createForOfIteratorHelperLoose(text.split(';')), _step; !(_step = _iterator()).done;) {\n var part = _step.value;\n var _part$split = part.split('='),\n _part$split2 = _slicedToArray(_part$split, 2),\n name = _part$split2[0],\n value = _part$split2[1];\n switch (name) {\n case 'tel':\n number = value;\n break;\n case 'ext':\n ext = value;\n break;\n case 'phone-context':\n // Only \"country contexts\" are supported.\n // \"Domain contexts\" are ignored.\n if (value[0] === '+') {\n number = value + number;\n }\n break;\n }\n }\n\n // If the phone number is not viable, then abort.\n if (!isViablePhoneNumber(number)) {\n return {};\n }\n var result = {\n number: number\n };\n if (ext) {\n result.ext = ext;\n }\n return result;\n}\n\n/**\r\n * @param {object} - `{ ?number, ?extension }`.\r\n * @return {string} Phone URI (RFC 3966).\r\n */\nexport function formatRFC3966(_ref) {\n var number = _ref.number,\n ext = _ref.ext;\n if (!number) {\n return '';\n }\n if (number[0] !== '+') {\n throw new Error(\"\\\"formatRFC3966()\\\" expects \\\"number\\\" to be in E.164 format.\");\n }\n return \"tel:\".concat(number).concat(ext ? ';ext=' + ext : '');\n}\n//# sourceMappingURL=RFC3966.js.map","function _typeof(o) { \"@babel/helpers - typeof\"; return _typeof = \"function\" == typeof Symbol && \"symbol\" == typeof Symbol.iterator ? function (o) { return typeof o; } : function (o) { return o && \"function\" == typeof Symbol && o.constructor === Symbol && o !== Symbol.prototype ? \"symbol\" : typeof o; }, _typeof(o); }\nfunction ownKeys(e, r) { var t = Object.keys(e); if (Object.getOwnPropertySymbols) { var o = Object.getOwnPropertySymbols(e); r && (o = o.filter(function (r) { return Object.getOwnPropertyDescriptor(e, r).enumerable; })), t.push.apply(t, o); } return t; }\nfunction _objectSpread(e) { for (var r = 1; r < arguments.length; r++) { var t = null != arguments[r] ? arguments[r] : {}; r % 2 ? ownKeys(Object(t), !0).forEach(function (r) { _defineProperty(e, r, t[r]); }) : Object.getOwnPropertyDescriptors ? Object.defineProperties(e, Object.getOwnPropertyDescriptors(t)) : ownKeys(Object(t)).forEach(function (r) { Object.defineProperty(e, r, Object.getOwnPropertyDescriptor(t, r)); }); } return e; }\nfunction _defineProperty(e, r, t) { return (r = _toPropertyKey(r)) in e ? Object.defineProperty(e, r, { value: t, enumerable: !0, configurable: !0, writable: !0 }) : e[r] = t, e; }\nfunction _classCallCheck(a, n) { if (!(a instanceof n)) throw new TypeError(\"Cannot call a class as a function\"); }\nfunction _defineProperties(e, r) { for (var t = 0; t < r.length; t++) { var o = r[t]; o.enumerable = o.enumerable || !1, o.configurable = !0, \"value\" in o && (o.writable = !0), Object.defineProperty(e, _toPropertyKey(o.key), o); } }\nfunction _createClass(e, r, t) { return r && _defineProperties(e.prototype, r), t && _defineProperties(e, t), Object.defineProperty(e, \"prototype\", { writable: !1 }), e; }\nfunction _toPropertyKey(t) { var i = _toPrimitive(t, \"string\"); return \"symbol\" == _typeof(i) ? i : i + \"\"; }\nfunction _toPrimitive(t, r) { if (\"object\" != _typeof(t) || !t) return t; var e = t[Symbol.toPrimitive]; if (void 0 !== e) { var i = e.call(t, r || \"default\"); if (\"object\" != _typeof(i)) return i; throw new TypeError(\"@@toPrimitive must return a primitive value.\"); } return (\"string\" === r ? String : Number)(t); }\nimport Metadata, { validateMetadata } from './metadata.js';\nimport isPossibleNumber from './isPossible.js';\nimport isValidNumber from './isValid.js';\nimport getNumberType from './helpers/getNumberType.js';\nimport getPossibleCountriesForNumber from './helpers/getPossibleCountriesForNumber.js';\nimport extractCountryCallingCode from './helpers/extractCountryCallingCode.js';\nimport isObject from './helpers/isObject.js';\nimport formatNumber from './format.js';\nvar USE_NON_GEOGRAPHIC_COUNTRY_CODE = false;\nvar PhoneNumber = /*#__PURE__*/function () {\n /**\r\n * @param {string} countryOrCountryCallingCode\r\n * @param {string} nationalNumber\r\n * @param {object} metadata — Metadata JSON\r\n * @return {PhoneNumber}\r\n */\n function PhoneNumber(countryOrCountryCallingCode, nationalNumber, metadata) {\n _classCallCheck(this, PhoneNumber);\n // Validate `countryOrCountryCallingCode` argument.\n if (!countryOrCountryCallingCode) {\n throw new TypeError('First argument is required');\n }\n if (typeof countryOrCountryCallingCode !== 'string') {\n throw new TypeError('First argument must be a string');\n }\n\n // In case of public API use: `constructor(number, metadata)`.\n // Transform the arguments from `constructor(number, metadata)` to\n // `constructor(countryOrCountryCallingCode, nationalNumber, metadata)`.\n if (countryOrCountryCallingCode[0] === '+' && !nationalNumber) {\n throw new TypeError('`metadata` argument not passed');\n }\n if (isObject(nationalNumber) && isObject(nationalNumber.countries)) {\n metadata = nationalNumber;\n var e164Number = countryOrCountryCallingCode;\n if (!E164_NUMBER_REGEXP.test(e164Number)) {\n throw new Error('Invalid `number` argument passed: must consist of a \"+\" followed by digits');\n }\n var _extractCountryCallin = extractCountryCallingCode(e164Number, undefined, undefined, undefined, metadata),\n _countryCallingCode = _extractCountryCallin.countryCallingCode,\n number = _extractCountryCallin.number;\n nationalNumber = number;\n countryOrCountryCallingCode = _countryCallingCode;\n if (!nationalNumber) {\n throw new Error('Invalid `number` argument passed: too short');\n }\n }\n\n // Validate `nationalNumber` argument.\n if (!nationalNumber) {\n throw new TypeError('`nationalNumber` argument is required');\n }\n if (typeof nationalNumber !== 'string') {\n throw new TypeError('`nationalNumber` argument must be a string');\n }\n\n // Validate `metadata` argument.\n validateMetadata(metadata);\n\n // Initialize properties.\n var _getCountryAndCountry = getCountryAndCountryCallingCode(countryOrCountryCallingCode, metadata),\n country = _getCountryAndCountry.country,\n countryCallingCode = _getCountryAndCountry.countryCallingCode;\n this.country = country;\n this.countryCallingCode = countryCallingCode;\n this.nationalNumber = nationalNumber;\n this.number = '+' + this.countryCallingCode + this.nationalNumber;\n // Exclude `metadata` property output from `PhoneNumber.toString()`\n // so that it doesn't clutter the console output of Node.js.\n // Previously, when Node.js did `console.log(new PhoneNumber(...))`,\n // it would output the whole internal structure of the `metadata` object.\n this.getMetadata = function () {\n return metadata;\n };\n }\n return _createClass(PhoneNumber, [{\n key: \"setExt\",\n value: function setExt(ext) {\n this.ext = ext;\n }\n }, {\n key: \"getPossibleCountries\",\n value: function getPossibleCountries() {\n if (this.country) {\n return [this.country];\n }\n return getPossibleCountriesForNumber(this.countryCallingCode, this.nationalNumber, this.getMetadata());\n }\n }, {\n key: \"isPossible\",\n value: function isPossible() {\n return isPossibleNumber(this, {\n v2: true\n }, this.getMetadata());\n }\n }, {\n key: \"isValid\",\n value: function isValid() {\n return isValidNumber(this, {\n v2: true\n }, this.getMetadata());\n }\n }, {\n key: \"isNonGeographic\",\n value: function isNonGeographic() {\n var metadata = new Metadata(this.getMetadata());\n return metadata.isNonGeographicCallingCode(this.countryCallingCode);\n }\n }, {\n key: \"isEqual\",\n value: function isEqual(phoneNumber) {\n return this.number === phoneNumber.number && this.ext === phoneNumber.ext;\n }\n\n // This function was originally meant to be an equivalent for `validatePhoneNumberLength()`,\n // but later it was found out that it doesn't include the possible `TOO_SHORT` result\n // returned from `parsePhoneNumberWithError()` in the original `validatePhoneNumberLength()`,\n // so eventually I simply commented out this method from the `PhoneNumber` class\n // and just left the `validatePhoneNumberLength()` function, even though that one would require\n // and additional step to also validate the actual country / calling code of the phone number.\n // validateLength() {\n // \tconst metadata = new Metadata(this.getMetadata())\n // \tmetadata.selectNumberingPlan(this.countryCallingCode)\n // \tconst result = checkNumberLength(this.nationalNumber, metadata)\n // \tif (result !== 'IS_POSSIBLE') {\n // \t\treturn result\n // \t}\n // }\n }, {\n key: \"getType\",\n value: function getType() {\n return getNumberType(this, {\n v2: true\n }, this.getMetadata());\n }\n }, {\n key: \"format\",\n value: function format(_format, options) {\n return formatNumber(this, _format, options ? _objectSpread(_objectSpread({}, options), {}, {\n v2: true\n }) : {\n v2: true\n }, this.getMetadata());\n }\n }, {\n key: \"formatNational\",\n value: function formatNational(options) {\n return this.format('NATIONAL', options);\n }\n }, {\n key: \"formatInternational\",\n value: function formatInternational(options) {\n return this.format('INTERNATIONAL', options);\n }\n }, {\n key: \"getURI\",\n value: function getURI(options) {\n return this.format('RFC3966', options);\n }\n }]);\n}();\nexport { PhoneNumber as default };\nvar isCountryCode = function isCountryCode(value) {\n return /^[A-Z]{2}$/.test(value);\n};\nfunction getCountryAndCountryCallingCode(countryOrCountryCallingCode, metadataJson) {\n var country;\n var countryCallingCode;\n var metadata = new Metadata(metadataJson);\n // If country code is passed then derive `countryCallingCode` from it.\n // Also store the country code as `.country`.\n if (isCountryCode(countryOrCountryCallingCode)) {\n country = countryOrCountryCallingCode;\n metadata.selectNumberingPlan(country);\n countryCallingCode = metadata.countryCallingCode();\n } else {\n countryCallingCode = countryOrCountryCallingCode;\n /* istanbul ignore if */\n if (USE_NON_GEOGRAPHIC_COUNTRY_CODE) {\n if (metadata.isNonGeographicCallingCode(countryCallingCode)) {\n country = '001';\n }\n }\n }\n return {\n country: country,\n countryCallingCode: countryCallingCode\n };\n}\nvar E164_NUMBER_REGEXP = /^\\+\\d+$/;\n//# sourceMappingURL=PhoneNumber.js.map","import Metadata from './metadata.js';\nimport matchesEntirely from './helpers/matchesEntirely.js';\nimport getNumberType from './helpers/getNumberType.js';\n\n/**\r\n * Checks if a given phone number is valid.\r\n *\r\n * isValid(phoneNumberInstance, { ..., v2: true }, metadata)\r\n *\r\n * isPossible({ phone: '8005553535', country: 'RU' }, { ... }, metadata)\r\n * isPossible({ phone: '8005553535', country: 'RU' }, undefined, metadata)\r\n *\r\n * If the `number` is a string, it will be parsed to an object,\r\n * but only if it contains only valid phone number characters (including punctuation).\r\n * If the `number` is an object, it is used as is.\r\n *\r\n * The optional `defaultCountry` argument is the default country.\r\n * I.e. it does not restrict to just that country,\r\n * e.g. in those cases where several countries share\r\n * the same phone numbering rules (NANPA, Britain, etc).\r\n * For example, even though the number `07624 369230`\r\n * belongs to the Isle of Man (\"IM\" country code)\r\n * calling `isValidNumber('07624369230', 'GB', metadata)`\r\n * still returns `true` because the country is not restricted to `GB`,\r\n * it's just that `GB` is the default one for the phone numbering rules.\r\n * For restricting the country see `isValidNumberForRegion()`\r\n * though restricting a country might not be a good idea.\r\n * https://github.com/googlei18n/libphonenumber/blob/master/FAQ.md#when-should-i-use-isvalidnumberforregion\r\n *\r\n * Examples:\r\n *\r\n * ```js\r\n * isValidNumber('+78005553535', metadata)\r\n * isValidNumber('8005553535', 'RU', metadata)\r\n * isValidNumber('88005553535', 'RU', metadata)\r\n * isValidNumber({ phone: '8005553535', country: 'RU' }, metadata)\r\n * ```\r\n */\nexport default function isValidNumber(input, options, metadata) {\n // If assigning the `{}` default value is moved to the arguments above,\n // code coverage would decrease for some weird reason.\n options = options || {};\n metadata = new Metadata(metadata);\n metadata.selectNumberingPlan(input.country, input.countryCallingCode);\n\n // By default, countries only have type regexps when it's required for\n // distinguishing different countries having the same `countryCallingCode`.\n if (metadata.hasTypes()) {\n return getNumberType(input, options, metadata.metadata) !== undefined;\n }\n\n // If there are no type regexps for this country in metadata then use\n // `nationalNumberPattern` as a \"better than nothing\" replacement.\n var nationalNumber = options.v2 ? input.nationalNumber : input.phone;\n return matchesEntirely(nationalNumber, metadata.nationalNumberPattern());\n}\n//# sourceMappingURL=isValid.js.map","function _typeof(o) { \"@babel/helpers - typeof\"; return _typeof = \"function\" == typeof Symbol && \"symbol\" == typeof Symbol.iterator ? function (o) { return typeof o; } : function (o) { return o && \"function\" == typeof Symbol && o.constructor === Symbol && o !== Symbol.prototype ? \"symbol\" : typeof o; }, _typeof(o); }\nfunction _defineProperties(e, r) { for (var t = 0; t < r.length; t++) { var o = r[t]; o.enumerable = o.enumerable || !1, o.configurable = !0, \"value\" in o && (o.writable = !0), Object.defineProperty(e, _toPropertyKey(o.key), o); } }\nfunction _createClass(e, r, t) { return r && _defineProperties(e.prototype, r), t && _defineProperties(e, t), Object.defineProperty(e, \"prototype\", { writable: !1 }), e; }\nfunction _toPropertyKey(t) { var i = _toPrimitive(t, \"string\"); return \"symbol\" == _typeof(i) ? i : i + \"\"; }\nfunction _toPrimitive(t, r) { if (\"object\" != _typeof(t) || !t) return t; var e = t[Symbol.toPrimitive]; if (void 0 !== e) { var i = e.call(t, r || \"default\"); if (\"object\" != _typeof(i)) return i; throw new TypeError(\"@@toPrimitive must return a primitive value.\"); } return (\"string\" === r ? String : Number)(t); }\nfunction _classCallCheck(a, n) { if (!(a instanceof n)) throw new TypeError(\"Cannot call a class as a function\"); }\nfunction _callSuper(t, o, e) { return o = _getPrototypeOf(o), _possibleConstructorReturn(t, _isNativeReflectConstruct() ? Reflect.construct(o, e || [], _getPrototypeOf(t).constructor) : o.apply(t, e)); }\nfunction _possibleConstructorReturn(t, e) { if (e && (\"object\" == _typeof(e) || \"function\" == typeof e)) return e; if (void 0 !== e) throw new TypeError(\"Derived constructors may only return object or undefined\"); return _assertThisInitialized(t); }\nfunction _assertThisInitialized(e) { if (void 0 === e) throw new ReferenceError(\"this hasn't been initialised - super() hasn't been called\"); return e; }\nfunction _inherits(t, e) { if (\"function\" != typeof e && null !== e) throw new TypeError(\"Super expression must either be null or a function\"); t.prototype = Object.create(e && e.prototype, { constructor: { value: t, writable: !0, configurable: !0 } }), Object.defineProperty(t, \"prototype\", { writable: !1 }), e && _setPrototypeOf(t, e); }\nfunction _wrapNativeSuper(t) { var r = \"function\" == typeof Map ? new Map() : void 0; return _wrapNativeSuper = function _wrapNativeSuper(t) { if (null === t || !_isNativeFunction(t)) return t; if (\"function\" != typeof t) throw new TypeError(\"Super expression must either be null or a function\"); if (void 0 !== r) { if (r.has(t)) return r.get(t); r.set(t, Wrapper); } function Wrapper() { return _construct(t, arguments, _getPrototypeOf(this).constructor); } return Wrapper.prototype = Object.create(t.prototype, { constructor: { value: Wrapper, enumerable: !1, writable: !0, configurable: !0 } }), _setPrototypeOf(Wrapper, t); }, _wrapNativeSuper(t); }\nfunction _construct(t, e, r) { if (_isNativeReflectConstruct()) return Reflect.construct.apply(null, arguments); var o = [null]; o.push.apply(o, e); var p = new (t.bind.apply(t, o))(); return r && _setPrototypeOf(p, r.prototype), p; }\nfunction _isNativeReflectConstruct() { try { var t = !Boolean.prototype.valueOf.call(Reflect.construct(Boolean, [], function () {})); } catch (t) {} return (_isNativeReflectConstruct = function _isNativeReflectConstruct() { return !!t; })(); }\nfunction _isNativeFunction(t) { try { return -1 !== Function.toString.call(t).indexOf(\"[native code]\"); } catch (n) { return \"function\" == typeof t; } }\nfunction _setPrototypeOf(t, e) { return _setPrototypeOf = Object.setPrototypeOf ? Object.setPrototypeOf.bind() : function (t, e) { return t.__proto__ = e, t; }, _setPrototypeOf(t, e); }\nfunction _getPrototypeOf(t) { return _getPrototypeOf = Object.setPrototypeOf ? Object.getPrototypeOf.bind() : function (t) { return t.__proto__ || Object.getPrototypeOf(t); }, _getPrototypeOf(t); }\n// https://stackoverflow.com/a/46971044/970769\n// \"Breaking changes in Typescript 2.1\"\n// \"Extending built-ins like Error, Array, and Map may no longer work.\"\n// \"As a recommendation, you can manually adjust the prototype immediately after any super(...) calls.\"\n// https://github.com/Microsoft/TypeScript-wiki/blob/main/Breaking-Changes.md#extending-built-ins-like-error-array-and-map-may-no-longer-work\nvar ParseError = /*#__PURE__*/function (_Error) {\n function ParseError(code) {\n var _this;\n _classCallCheck(this, ParseError);\n _this = _callSuper(this, ParseError, [code]);\n // Set the prototype explicitly.\n // Any subclass of FooError will have to manually set the prototype as well.\n Object.setPrototypeOf(_this, ParseError.prototype);\n _this.name = _this.constructor.name;\n return _this;\n }\n _inherits(ParseError, _Error);\n return _createClass(ParseError);\n}(/*#__PURE__*/_wrapNativeSuper(Error));\nexport { ParseError as default };\n//# sourceMappingURL=ParseError.js.map","import createExtensionPattern from './createExtensionPattern.js';\n\n// Regexp of all known extension prefixes used by different regions followed by\n// 1 or more valid digits, for use when parsing.\nvar EXTN_PATTERN = new RegExp('(?:' + createExtensionPattern() + ')$', 'i');\n\n// Strips any extension (as in, the part of the number dialled after the call is\n// connected, usually indicated with extn, ext, x or similar) from the end of\n// the number, and returns it.\nexport default function extractExtension(number) {\n var start = number.search(EXTN_PATTERN);\n if (start < 0) {\n return {};\n }\n // If we find a potential extension, and the number preceding this is a viable\n // number, we assume it is an extension.\n var numberWithoutExtension = number.slice(0, start);\n var matches = number.match(EXTN_PATTERN);\n var i = 1;\n while (i < matches.length) {\n if (matches[i]) {\n return {\n number: numberWithoutExtension,\n ext: matches[i]\n };\n }\n i++;\n }\n}\n//# sourceMappingURL=extractExtension.js.map","function _createForOfIteratorHelperLoose(r, e) { var t = \"undefined\" != typeof Symbol && r[Symbol.iterator] || r[\"@@iterator\"]; if (t) return (t = t.call(r)).next.bind(t); if (Array.isArray(r) || (t = _unsupportedIterableToArray(r)) || e && r && \"number\" == typeof r.length) { t && (r = t); var o = 0; return function () { return o >= r.length ? { done: !0 } : { done: !1, value: r[o++] }; }; } throw new TypeError(\"Invalid attempt to iterate non-iterable instance.\\nIn order to be iterable, non-array objects must have a [Symbol.iterator]() method.\"); }\nfunction _unsupportedIterableToArray(r, a) { if (r) { if (\"string\" == typeof r) return _arrayLikeToArray(r, a); var t = {}.toString.call(r).slice(8, -1); return \"Object\" === t && r.constructor && (t = r.constructor.name), \"Map\" === t || \"Set\" === t ? Array.from(r) : \"Arguments\" === t || /^(?:Ui|I)nt(?:8|16|32)(?:Clamped)?Array$/.test(t) ? _arrayLikeToArray(r, a) : void 0; } }\nfunction _arrayLikeToArray(r, a) { (null == a || a > r.length) && (a = r.length); for (var e = 0, n = Array(a); e < a; e++) n[e] = r[e]; return n; }\n// These mappings map a character (key) to a specific digit that should\n// replace it for normalization purposes. Non-European digits that\n// may be used in phone numbers are mapped to a European equivalent.\n//\n// E.g. in Iraq they don't write `+442323234` but rather `+٤٤٢٣٢٣٢٣٤`.\n//\nexport var DIGITS = {\n '0': '0',\n '1': '1',\n '2': '2',\n '3': '3',\n '4': '4',\n '5': '5',\n '6': '6',\n '7': '7',\n '8': '8',\n '9': '9',\n \"\\uFF10\": '0',\n // Fullwidth digit 0\n \"\\uFF11\": '1',\n // Fullwidth digit 1\n \"\\uFF12\": '2',\n // Fullwidth digit 2\n \"\\uFF13\": '3',\n // Fullwidth digit 3\n \"\\uFF14\": '4',\n // Fullwidth digit 4\n \"\\uFF15\": '5',\n // Fullwidth digit 5\n \"\\uFF16\": '6',\n // Fullwidth digit 6\n \"\\uFF17\": '7',\n // Fullwidth digit 7\n \"\\uFF18\": '8',\n // Fullwidth digit 8\n \"\\uFF19\": '9',\n // Fullwidth digit 9\n \"\\u0660\": '0',\n // Arabic-indic digit 0\n \"\\u0661\": '1',\n // Arabic-indic digit 1\n \"\\u0662\": '2',\n // Arabic-indic digit 2\n \"\\u0663\": '3',\n // Arabic-indic digit 3\n \"\\u0664\": '4',\n // Arabic-indic digit 4\n \"\\u0665\": '5',\n // Arabic-indic digit 5\n \"\\u0666\": '6',\n // Arabic-indic digit 6\n \"\\u0667\": '7',\n // Arabic-indic digit 7\n \"\\u0668\": '8',\n // Arabic-indic digit 8\n \"\\u0669\": '9',\n // Arabic-indic digit 9\n \"\\u06F0\": '0',\n // Eastern-Arabic digit 0\n \"\\u06F1\": '1',\n // Eastern-Arabic digit 1\n \"\\u06F2\": '2',\n // Eastern-Arabic digit 2\n \"\\u06F3\": '3',\n // Eastern-Arabic digit 3\n \"\\u06F4\": '4',\n // Eastern-Arabic digit 4\n \"\\u06F5\": '5',\n // Eastern-Arabic digit 5\n \"\\u06F6\": '6',\n // Eastern-Arabic digit 6\n \"\\u06F7\": '7',\n // Eastern-Arabic digit 7\n \"\\u06F8\": '8',\n // Eastern-Arabic digit 8\n \"\\u06F9\": '9' // Eastern-Arabic digit 9\n};\nexport function parseDigit(character) {\n return DIGITS[character];\n}\n\n/**\r\n * Parses phone number digits from a string.\r\n * Drops all punctuation leaving only digits.\r\n * Also converts wide-ascii and arabic-indic numerals to conventional numerals.\r\n * E.g. in Iraq they don't write `+442323234` but rather `+٤٤٢٣٢٣٢٣٤`.\r\n * @param {string} string\r\n * @return {string}\r\n * @example\r\n * ```js\r\n * parseDigits('8 (800) 555')\r\n * // Outputs '8800555'.\r\n * ```\r\n */\nexport default function parseDigits(string) {\n var result = '';\n // Using `.split('')` here instead of normal `for ... of`\n // because the importing application doesn't neccessarily include an ES6 polyfill.\n // The `.split('')` approach discards \"exotic\" UTF-8 characters\n // (the ones consisting of four bytes) but digits\n // (including non-European ones) don't fall into that range\n // so such \"exotic\" characters would be discarded anyway.\n for (var _iterator = _createForOfIteratorHelperLoose(string.split('')), _step; !(_step = _iterator()).done;) {\n var character = _step.value;\n var digit = parseDigit(character);\n if (digit) {\n result += digit;\n }\n }\n return result;\n}\n//# sourceMappingURL=parseDigits.js.map","function _createForOfIteratorHelperLoose(r, e) { var t = \"undefined\" != typeof Symbol && r[Symbol.iterator] || r[\"@@iterator\"]; if (t) return (t = t.call(r)).next.bind(t); if (Array.isArray(r) || (t = _unsupportedIterableToArray(r)) || e && r && \"number\" == typeof r.length) { t && (r = t); var o = 0; return function () { return o >= r.length ? { done: !0 } : { done: !1, value: r[o++] }; }; } throw new TypeError(\"Invalid attempt to iterate non-iterable instance.\\nIn order to be iterable, non-array objects must have a [Symbol.iterator]() method.\"); }\nfunction _unsupportedIterableToArray(r, a) { if (r) { if (\"string\" == typeof r) return _arrayLikeToArray(r, a); var t = {}.toString.call(r).slice(8, -1); return \"Object\" === t && r.constructor && (t = r.constructor.name), \"Map\" === t || \"Set\" === t ? Array.from(r) : \"Arguments\" === t || /^(?:Ui|I)nt(?:8|16|32)(?:Clamped)?Array$/.test(t) ? _arrayLikeToArray(r, a) : void 0; } }\nfunction _arrayLikeToArray(r, a) { (null == a || a > r.length) && (a = r.length); for (var e = 0, n = Array(a); e < a; e++) n[e] = r[e]; return n; }\nimport { parseDigit } from './helpers/parseDigits.js';\n\n/**\r\n * Parses phone number characters from a string.\r\n * Drops all punctuation leaving only digits and the leading `+` sign (if any).\r\n * Also converts wide-ascii and arabic-indic numerals to conventional numerals.\r\n * E.g. in Iraq they don't write `+442323234` but rather `+٤٤٢٣٢٣٢٣٤`.\r\n * @param {string} string\r\n * @return {string}\r\n * @example\r\n * ```js\r\n * // Outputs '8800555'.\r\n * parseIncompletePhoneNumber('8 (800) 555')\r\n * // Outputs '+7800555'.\r\n * parseIncompletePhoneNumber('+7 800 555')\r\n * ```\r\n */\nexport default function parseIncompletePhoneNumber(string) {\n var result = '';\n // Using `.split('')` here instead of normal `for ... of`\n // because the importing application doesn't neccessarily include an ES6 polyfill.\n // The `.split('')` approach discards \"exotic\" UTF-8 characters\n // (the ones consisting of four bytes) but digits\n // (including non-European ones) don't fall into that range\n // so such \"exotic\" characters would be discarded anyway.\n for (var _iterator = _createForOfIteratorHelperLoose(string.split('')), _step; !(_step = _iterator()).done;) {\n var character = _step.value;\n result += parsePhoneNumberCharacter(character, result) || '';\n }\n return result;\n}\n\n/**\r\n * Parses next character while parsing phone number digits (including a `+`)\r\n * from text: discards everything except `+` and digits, and `+` is only allowed\r\n * at the start of a phone number.\r\n * For example, is used in `react-phone-number-input` where it uses\r\n * [`input-format`](https://gitlab.com/catamphetamine/input-format).\r\n * @param {string} character - Yet another character from raw input string.\r\n * @param {string?} prevParsedCharacters - Previous parsed characters.\r\n * @param {function?} eventListener - An optional \"on event\" function.\r\n * @return {string?} The parsed character.\r\n */\nexport function parsePhoneNumberCharacter(character, prevParsedCharacters, eventListener) {\n // Only allow a leading `+`.\n if (character === '+') {\n // If this `+` is not the first parsed character\n // then discard it.\n if (prevParsedCharacters) {\n // `eventListener` argument was added to this `export`ed function on Dec 26th, 2023.\n // Any 3rd-party code that used to `import` and call this function before that\n // won't be passing any `eventListener` argument.\n //\n // The addition of the `eventListener` argument was to fix the slightly-weird behavior\n // of parsing an input string when the user inputs something like `\"2+7\"\n // https://github.com/catamphetamine/react-phone-number-input/issues/437\n //\n // If the parser encounters an unexpected `+` in a string being parsed\n // then it simply discards that out-of-place `+` and any following characters.\n //\n if (typeof eventListener === 'function') {\n eventListener('end');\n }\n return;\n }\n return '+';\n }\n // Allow digits.\n return parseDigit(character);\n}\n//# sourceMappingURL=parseIncompletePhoneNumber.js.map","// When phone numbers are written in `RFC3966` format — `\"tel:+12133734253\"` —\n// they can have their \"calling code\" part written separately in a `phone-context` parameter.\n// Example: `\"tel:12133734253;phone-context=+1\"`.\n// This function parses the full phone number from the local number and the `phone-context`\n// when the `phone-context` contains a `+` sign.\n\nimport { VALID_DIGITS\n// PLUS_CHARS\n} from '../constants.js';\nexport var PLUS_SIGN = '+';\nvar RFC3966_VISUAL_SEPARATOR_ = '[\\\\-\\\\.\\\\(\\\\)]?';\nvar RFC3966_PHONE_DIGIT_ = '(' + '[' + VALID_DIGITS + ']' + '|' + RFC3966_VISUAL_SEPARATOR_ + ')';\nvar RFC3966_GLOBAL_NUMBER_DIGITS_ = '^' + '\\\\' + PLUS_SIGN + RFC3966_PHONE_DIGIT_ + '*' + '[' + VALID_DIGITS + ']' + RFC3966_PHONE_DIGIT_ + '*' + '$';\n\n/**\r\n * Regular expression of valid global-number-digits for the phone-context\r\n * parameter, following the syntax defined in RFC3966.\r\n */\nvar RFC3966_GLOBAL_NUMBER_DIGITS_PATTERN_ = new RegExp(RFC3966_GLOBAL_NUMBER_DIGITS_, 'g');\n\n// In this port of Google's library, we don't accept alpha characters in phone numbers.\n// const ALPHANUM_ = VALID_ALPHA_ + VALID_DIGITS\nvar ALPHANUM_ = VALID_DIGITS;\nvar RFC3966_DOMAINLABEL_ = '[' + ALPHANUM_ + ']+((\\\\-)*[' + ALPHANUM_ + '])*';\nvar VALID_ALPHA_ = 'a-zA-Z';\nvar RFC3966_TOPLABEL_ = '[' + VALID_ALPHA_ + ']+((\\\\-)*[' + ALPHANUM_ + '])*';\nvar RFC3966_DOMAINNAME_ = '^(' + RFC3966_DOMAINLABEL_ + '\\\\.)*' + RFC3966_TOPLABEL_ + '\\\\.?$';\n\n/**\r\n * Regular expression of valid domainname for the phone-context parameter,\r\n * following the syntax defined in RFC3966.\r\n */\nvar RFC3966_DOMAINNAME_PATTERN_ = new RegExp(RFC3966_DOMAINNAME_, 'g');\nexport var RFC3966_PREFIX_ = 'tel:';\nexport var RFC3966_PHONE_CONTEXT_ = ';phone-context=';\nexport var RFC3966_ISDN_SUBADDRESS_ = ';isub=';\n\n/**\r\n * Extracts the value of the phone-context parameter of `numberToExtractFrom`,\r\n * following the syntax defined in RFC3966.\r\n *\r\n * @param {string} numberToExtractFrom\r\n * @return {string|null} the extracted string (possibly empty), or `null` if no phone-context parameter is found.\r\n */\nexport default function extractPhoneContext(numberToExtractFrom) {\n var indexOfPhoneContext = numberToExtractFrom.indexOf(RFC3966_PHONE_CONTEXT_);\n // If no phone-context parameter is present\n if (indexOfPhoneContext < 0) {\n return null;\n }\n var phoneContextStart = indexOfPhoneContext + RFC3966_PHONE_CONTEXT_.length;\n // If phone-context parameter is empty\n if (phoneContextStart >= numberToExtractFrom.length) {\n return '';\n }\n var phoneContextEnd = numberToExtractFrom.indexOf(';', phoneContextStart);\n // If phone-context is not the last parameter\n if (phoneContextEnd >= 0) {\n return numberToExtractFrom.substring(phoneContextStart, phoneContextEnd);\n } else {\n return numberToExtractFrom.substring(phoneContextStart);\n }\n}\n\n/**\r\n * Returns whether the value of phoneContext follows the syntax defined in RFC3966.\r\n *\r\n * @param {string|null} phoneContext\r\n * @return {boolean}\r\n */\nexport function isPhoneContextValid(phoneContext) {\n if (phoneContext === null) {\n return true;\n }\n if (phoneContext.length === 0) {\n return false;\n }\n\n // Does phone-context value match pattern of global-number-digits or domainname.\n return RFC3966_GLOBAL_NUMBER_DIGITS_PATTERN_.test(phoneContext) || RFC3966_DOMAINNAME_PATTERN_.test(phoneContext);\n}\n//# sourceMappingURL=extractPhoneContext.js.map","import extractPhoneContext, { isPhoneContextValid, PLUS_SIGN, RFC3966_PREFIX_, RFC3966_PHONE_CONTEXT_, RFC3966_ISDN_SUBADDRESS_ } from './extractPhoneContext.js';\nimport ParseError from '../ParseError.js';\n\n/**\r\n * @param {string} numberToParse\r\n * @param {string} nationalNumber\r\n * @return {}\r\n */\nexport default function extractFormattedPhoneNumberFromPossibleRfc3966NumberUri(numberToParse, _ref) {\n var extractFormattedPhoneNumber = _ref.extractFormattedPhoneNumber;\n var phoneContext = extractPhoneContext(numberToParse);\n if (!isPhoneContextValid(phoneContext)) {\n throw new ParseError('NOT_A_NUMBER');\n }\n var phoneNumberString;\n if (phoneContext === null) {\n // Extract a possible number from the string passed in.\n // (this strips leading characters that could not be the start of a phone number)\n phoneNumberString = extractFormattedPhoneNumber(numberToParse) || '';\n } else {\n phoneNumberString = '';\n\n // If the phone context contains a phone number prefix, we need to capture\n // it, whereas domains will be ignored.\n if (phoneContext.charAt(0) === PLUS_SIGN) {\n phoneNumberString += phoneContext;\n }\n\n // Now append everything between the \"tel:\" prefix and the phone-context.\n // This should include the national number, an optional extension or\n // isdn-subaddress component. Note we also handle the case when \"tel:\" is\n // missing, as we have seen in some of the phone number inputs.\n // In that case, we append everything from the beginning.\n var indexOfRfc3966Prefix = numberToParse.indexOf(RFC3966_PREFIX_);\n var indexOfNationalNumber;\n // RFC 3966 \"tel:\" prefix is preset at this stage because\n // `isPhoneContextValid()` requires it to be present.\n /* istanbul ignore else */\n if (indexOfRfc3966Prefix >= 0) {\n indexOfNationalNumber = indexOfRfc3966Prefix + RFC3966_PREFIX_.length;\n } else {\n indexOfNationalNumber = 0;\n }\n var indexOfPhoneContext = numberToParse.indexOf(RFC3966_PHONE_CONTEXT_);\n phoneNumberString += numberToParse.substring(indexOfNationalNumber, indexOfPhoneContext);\n }\n\n // Delete the isdn-subaddress and everything after it if it is present.\n // Note extension won't appear at the same time with isdn-subaddress\n // according to paragraph 5.3 of the RFC3966 spec.\n var indexOfIsdn = phoneNumberString.indexOf(RFC3966_ISDN_SUBADDRESS_);\n if (indexOfIsdn > 0) {\n phoneNumberString = phoneNumberString.substring(0, indexOfIsdn);\n }\n // If both phone context and isdn-subaddress are absent but other\n // parameters are present, the parameters are left in nationalNumber.\n // This is because we are concerned about deleting content from a potential\n // number string when there is no strong evidence that the number is\n // actually written in RFC3966.\n\n if (phoneNumberString !== '') {\n return phoneNumberString;\n }\n}\n//# sourceMappingURL=extractFormattedPhoneNumberFromPossibleRfc3966NumberUri.js.map","// This is a port of Google Android `libphonenumber`'s\n// `phonenumberutil.js` of December 31th, 2018.\n//\n// https://github.com/googlei18n/libphonenumber/commits/master/javascript/i18n/phonenumbers/phonenumberutil.js\n\nimport { VALID_DIGITS, PLUS_CHARS, MIN_LENGTH_FOR_NSN, MAX_LENGTH_FOR_NSN } from './constants.js';\nimport ParseError from './ParseError.js';\nimport Metadata from './metadata.js';\nimport isViablePhoneNumber, { isViablePhoneNumberStart } from './helpers/isViablePhoneNumber.js';\nimport extractExtension from './helpers/extension/extractExtension.js';\nimport parseIncompletePhoneNumber from './parseIncompletePhoneNumber.js';\nimport getCountryCallingCode from './getCountryCallingCode.js';\nimport { isPossibleNumber } from './isPossible.js';\n// import { parseRFC3966 } from './helpers/RFC3966.js'\nimport PhoneNumber from './PhoneNumber.js';\nimport matchesEntirely from './helpers/matchesEntirely.js';\nimport extractCountryCallingCode from './helpers/extractCountryCallingCode.js';\nimport extractNationalNumber from './helpers/extractNationalNumber.js';\n// import stripIddPrefix from './helpers/stripIddPrefix.js'\nimport getCountryByCallingCode from './helpers/getCountryByCallingCode.js';\nimport extractFormattedPhoneNumberFromPossibleRfc3966NumberUri from './helpers/extractFormattedPhoneNumberFromPossibleRfc3966NumberUri.js';\n\n// We don't allow input strings for parsing to be longer than 250 chars.\n// This prevents malicious input from consuming CPU.\nvar MAX_INPUT_STRING_LENGTH = 250;\n\n// This consists of the plus symbol, digits, and arabic-indic digits.\nvar PHONE_NUMBER_START_PATTERN = new RegExp('[' + PLUS_CHARS + VALID_DIGITS + ']');\n\n// Regular expression of trailing characters that we want to remove.\n// A trailing `#` is sometimes used when writing phone numbers with extensions in US.\n// Example: \"+1 (645) 123 1234-910#\" number has extension \"910\".\nvar AFTER_PHONE_NUMBER_END_PATTERN = new RegExp('[^' + VALID_DIGITS + '#' + ']+$');\nvar USE_NON_GEOGRAPHIC_COUNTRY_CODE = false;\n\n// Examples:\n//\n// ```js\n// parse('8 (800) 555-35-35', 'RU')\n// parse('8 (800) 555-35-35', 'RU', metadata)\n// parse('8 (800) 555-35-35', { country: { default: 'RU' } })\n// parse('8 (800) 555-35-35', { country: { default: 'RU' } }, metadata)\n// parse('+7 800 555 35 35')\n// parse('+7 800 555 35 35', metadata)\n// ```\n//\n\n/**\r\n * Parses a phone number.\r\n *\r\n * parse('123456789', { defaultCountry: 'RU', v2: true }, metadata)\r\n * parse('123456789', { defaultCountry: 'RU' }, metadata)\r\n * parse('123456789', undefined, metadata)\r\n *\r\n * @param {string} input\r\n * @param {object} [options]\r\n * @param {object} metadata\r\n * @return {object|PhoneNumber?} If `options.v2: true` flag is passed, it returns a `PhoneNumber?` instance. Otherwise, returns an object of shape `{ phone: '...', country: '...' }` (or just `{}` if no phone number was parsed).\r\n */\nexport default function parse(text, options, metadata) {\n // If assigning the `{}` default value is moved to the arguments above,\n // code coverage would decrease for some weird reason.\n options = options || {};\n metadata = new Metadata(metadata);\n\n // Validate `defaultCountry`.\n if (options.defaultCountry && !metadata.hasCountry(options.defaultCountry)) {\n if (options.v2) {\n throw new ParseError('INVALID_COUNTRY');\n }\n throw new Error(\"Unknown country: \".concat(options.defaultCountry));\n }\n\n // Parse the phone number.\n var _parseInput = parseInput(text, options.v2, options.extract),\n formattedPhoneNumber = _parseInput.number,\n ext = _parseInput.ext,\n error = _parseInput.error;\n\n // If the phone number is not viable then return nothing.\n if (!formattedPhoneNumber) {\n if (options.v2) {\n if (error === 'TOO_SHORT') {\n throw new ParseError('TOO_SHORT');\n }\n throw new ParseError('NOT_A_NUMBER');\n }\n return {};\n }\n var _parsePhoneNumber = parsePhoneNumber(formattedPhoneNumber, options.defaultCountry, options.defaultCallingCode, metadata),\n country = _parsePhoneNumber.country,\n nationalNumber = _parsePhoneNumber.nationalNumber,\n countryCallingCode = _parsePhoneNumber.countryCallingCode,\n countryCallingCodeSource = _parsePhoneNumber.countryCallingCodeSource,\n carrierCode = _parsePhoneNumber.carrierCode;\n if (!metadata.hasSelectedNumberingPlan()) {\n if (options.v2) {\n throw new ParseError('INVALID_COUNTRY');\n }\n return {};\n }\n\n // Validate national (significant) number length.\n if (!nationalNumber || nationalNumber.length < MIN_LENGTH_FOR_NSN) {\n // Won't throw here because the regexp already demands length > 1.\n /* istanbul ignore if */\n if (options.v2) {\n throw new ParseError('TOO_SHORT');\n }\n // Google's demo just throws an error in this case.\n return {};\n }\n\n // Validate national (significant) number length.\n //\n // A sidenote:\n //\n // They say that sometimes national (significant) numbers\n // can be longer than `MAX_LENGTH_FOR_NSN` (e.g. in Germany).\n // https://github.com/googlei18n/libphonenumber/blob/7e1748645552da39c4e1ba731e47969d97bdb539/resources/phonenumber.proto#L36\n // Such numbers will just be discarded.\n //\n if (nationalNumber.length > MAX_LENGTH_FOR_NSN) {\n if (options.v2) {\n throw new ParseError('TOO_LONG');\n }\n // Google's demo just throws an error in this case.\n return {};\n }\n if (options.v2) {\n var phoneNumber = new PhoneNumber(countryCallingCode, nationalNumber, metadata.metadata);\n if (country) {\n phoneNumber.country = country;\n }\n if (carrierCode) {\n phoneNumber.carrierCode = carrierCode;\n }\n if (ext) {\n phoneNumber.ext = ext;\n }\n phoneNumber.__countryCallingCodeSource = countryCallingCodeSource;\n return phoneNumber;\n }\n\n // Check if national phone number pattern matches the number.\n // National number pattern is different for each country,\n // even for those ones which are part of the \"NANPA\" group.\n var valid = (options.extended ? metadata.hasSelectedNumberingPlan() : country) ? matchesEntirely(nationalNumber, metadata.nationalNumberPattern()) : false;\n if (!options.extended) {\n return valid ? result(country, nationalNumber, ext) : {};\n }\n\n // isInternational: countryCallingCode !== undefined\n\n return {\n country: country,\n countryCallingCode: countryCallingCode,\n carrierCode: carrierCode,\n valid: valid,\n possible: valid ? true : options.extended === true && metadata.possibleLengths() && isPossibleNumber(nationalNumber, country, metadata) ? true : false,\n phone: nationalNumber,\n ext: ext\n };\n}\n\n/**\r\n * Extracts a formatted phone number from text.\r\n * Doesn't guarantee that the extracted phone number\r\n * is a valid phone number (for example, doesn't validate its length).\r\n * @param {string} text\r\n * @param {boolean} [extract] — If `false`, then will parse the entire `text` as a phone number.\r\n * @param {boolean} [throwOnError] — By default, it won't throw if the text is too long.\r\n * @return {string}\r\n * @example\r\n * // Returns \"(213) 373-4253\".\r\n * extractFormattedPhoneNumber(\"Call (213) 373-4253 for assistance.\")\r\n */\nfunction _extractFormattedPhoneNumber(text, extract, throwOnError) {\n if (!text) {\n return;\n }\n if (text.length > MAX_INPUT_STRING_LENGTH) {\n if (throwOnError) {\n throw new ParseError('TOO_LONG');\n }\n return;\n }\n if (extract === false) {\n return text;\n }\n // Attempt to extract a possible number from the string passed in\n var startsAt = text.search(PHONE_NUMBER_START_PATTERN);\n if (startsAt < 0) {\n return;\n }\n return text\n // Trim everything to the left of the phone number\n .slice(startsAt)\n // Remove trailing non-numerical characters\n .replace(AFTER_PHONE_NUMBER_END_PATTERN, '');\n}\n\n/**\r\n * @param {string} text - Input.\r\n * @param {boolean} v2 - Legacy API functions don't pass `v2: true` flag.\r\n * @param {boolean} [extract] - Whether to extract a phone number from `text`, or attempt to parse the entire text as a phone number.\r\n * @return {object} `{ ?number, ?ext }`.\r\n */\nfunction parseInput(text, v2, extract) {\n // // Parse RFC 3966 phone number URI.\n // if (text && text.indexOf('tel:') === 0) {\n // \treturn parseRFC3966(text)\n // }\n // let number = extractFormattedPhoneNumber(text, extract, v2)\n var number = extractFormattedPhoneNumberFromPossibleRfc3966NumberUri(text, {\n extractFormattedPhoneNumber: function extractFormattedPhoneNumber(text) {\n return _extractFormattedPhoneNumber(text, extract, v2);\n }\n });\n // If the phone number is not viable, then abort.\n if (!number) {\n return {};\n }\n if (!isViablePhoneNumber(number)) {\n if (isViablePhoneNumberStart(number)) {\n return {\n error: 'TOO_SHORT'\n };\n }\n return {};\n }\n // Attempt to parse extension first, since it doesn't require region-specific\n // data and we want to have the non-normalised number here.\n var withExtensionStripped = extractExtension(number);\n if (withExtensionStripped.ext) {\n return withExtensionStripped;\n }\n return {\n number: number\n };\n}\n\n/**\r\n * Creates `parse()` result object.\r\n */\nfunction result(country, nationalNumber, ext) {\n var result = {\n country: country,\n phone: nationalNumber\n };\n if (ext) {\n result.ext = ext;\n }\n return result;\n}\n\n/**\r\n * Parses a viable phone number.\r\n * @param {string} formattedPhoneNumber — Example: \"(213) 373-4253\".\r\n * @param {string} [defaultCountry]\r\n * @param {string} [defaultCallingCode]\r\n * @param {Metadata} metadata\r\n * @return {object} Returns `{ country: string?, countryCallingCode: string?, nationalNumber: string? }`.\r\n */\nfunction parsePhoneNumber(formattedPhoneNumber, defaultCountry, defaultCallingCode, metadata) {\n // Extract calling code from phone number.\n var _extractCountryCallin = extractCountryCallingCode(parseIncompletePhoneNumber(formattedPhoneNumber), undefined, defaultCountry, defaultCallingCode, metadata.metadata),\n countryCallingCodeSource = _extractCountryCallin.countryCallingCodeSource,\n countryCallingCode = _extractCountryCallin.countryCallingCode,\n number = _extractCountryCallin.number;\n\n // The exact country of the phone number\n var country;\n\n // If `formattedPhoneNumber` is passed in \"international\" format,\n // choose a country by `countryCallingCode`.\n if (countryCallingCode) {\n metadata.selectNumberingPlan(countryCallingCode);\n }\n // Else, if `formattedPhoneNumber` is passed in \"national\" format,\n // then `number` is defined and `countryCallingCode` is `undefined`.\n else if (number && (defaultCountry || defaultCallingCode)) {\n metadata.selectNumberingPlan(defaultCountry, defaultCallingCode);\n if (defaultCountry) {\n country = defaultCountry;\n } else {\n /* istanbul ignore if */\n if (USE_NON_GEOGRAPHIC_COUNTRY_CODE) {\n if (metadata.isNonGeographicCallingCode(defaultCallingCode)) {\n country = '001';\n }\n }\n }\n countryCallingCode = defaultCallingCode || getCountryCallingCode(defaultCountry, metadata.metadata);\n } else return {};\n if (!number) {\n return {\n countryCallingCodeSource: countryCallingCodeSource,\n countryCallingCode: countryCallingCode\n };\n }\n var _extractNationalNumbe = extractNationalNumber(parseIncompletePhoneNumber(number), country, metadata),\n nationalNumber = _extractNationalNumbe.nationalNumber,\n carrierCode = _extractNationalNumbe.carrierCode;\n\n // Sometimes there are several countries\n // corresponding to the same country phone code\n // (e.g. NANPA countries all having `1` country phone code).\n // Therefore, to reliably determine the exact country,\n // national (significant) number should have been parsed first.\n //\n // When `metadata.json` is generated, all \"ambiguous\" country phone codes\n // get their countries populated with the full set of\n // \"phone number type\" regular expressions.\n //\n var exactCountry = getCountryByCallingCode(countryCallingCode, {\n nationalNumber: nationalNumber,\n metadata: metadata\n });\n if (exactCountry) {\n country = exactCountry;\n /* istanbul ignore if */\n if (exactCountry === '001') {\n // Can't happen with `USE_NON_GEOGRAPHIC_COUNTRY_CODE` being `false`.\n // If `USE_NON_GEOGRAPHIC_COUNTRY_CODE` is set to `true` for some reason,\n // then remove the \"istanbul ignore if\".\n } else {\n metadata.selectNumberingPlan(country);\n }\n }\n return {\n country: country,\n countryCallingCode: countryCallingCode,\n countryCallingCodeSource: countryCallingCodeSource,\n nationalNumber: nationalNumber,\n carrierCode: carrierCode\n };\n}\n//# sourceMappingURL=parse.js.map","function _typeof(o) { \"@babel/helpers - typeof\"; return _typeof = \"function\" == typeof Symbol && \"symbol\" == typeof Symbol.iterator ? function (o) { return typeof o; } : function (o) { return o && \"function\" == typeof Symbol && o.constructor === Symbol && o !== Symbol.prototype ? \"symbol\" : typeof o; }, _typeof(o); }\nfunction ownKeys(e, r) { var t = Object.keys(e); if (Object.getOwnPropertySymbols) { var o = Object.getOwnPropertySymbols(e); r && (o = o.filter(function (r) { return Object.getOwnPropertyDescriptor(e, r).enumerable; })), t.push.apply(t, o); } return t; }\nfunction _objectSpread(e) { for (var r = 1; r < arguments.length; r++) { var t = null != arguments[r] ? arguments[r] : {}; r % 2 ? ownKeys(Object(t), !0).forEach(function (r) { _defineProperty(e, r, t[r]); }) : Object.getOwnPropertyDescriptors ? Object.defineProperties(e, Object.getOwnPropertyDescriptors(t)) : ownKeys(Object(t)).forEach(function (r) { Object.defineProperty(e, r, Object.getOwnPropertyDescriptor(t, r)); }); } return e; }\nfunction _defineProperty(e, r, t) { return (r = _toPropertyKey(r)) in e ? Object.defineProperty(e, r, { value: t, enumerable: !0, configurable: !0, writable: !0 }) : e[r] = t, e; }\nfunction _toPropertyKey(t) { var i = _toPrimitive(t, \"string\"); return \"symbol\" == _typeof(i) ? i : i + \"\"; }\nfunction _toPrimitive(t, r) { if (\"object\" != _typeof(t) || !t) return t; var e = t[Symbol.toPrimitive]; if (void 0 !== e) { var i = e.call(t, r || \"default\"); if (\"object\" != _typeof(i)) return i; throw new TypeError(\"@@toPrimitive must return a primitive value.\"); } return (\"string\" === r ? String : Number)(t); }\nimport parse from './parse.js';\nexport default function parsePhoneNumberWithError(text, options, metadata) {\n return parse(text, _objectSpread(_objectSpread({}, options), {}, {\n v2: true\n }), metadata);\n}\n//# sourceMappingURL=parsePhoneNumberWithError_.js.map","function _typeof(o) { \"@babel/helpers - typeof\"; return _typeof = \"function\" == typeof Symbol && \"symbol\" == typeof Symbol.iterator ? function (o) { return typeof o; } : function (o) { return o && \"function\" == typeof Symbol && o.constructor === Symbol && o !== Symbol.prototype ? \"symbol\" : typeof o; }, _typeof(o); }\nfunction ownKeys(e, r) { var t = Object.keys(e); if (Object.getOwnPropertySymbols) { var o = Object.getOwnPropertySymbols(e); r && (o = o.filter(function (r) { return Object.getOwnPropertyDescriptor(e, r).enumerable; })), t.push.apply(t, o); } return t; }\nfunction _objectSpread(e) { for (var r = 1; r < arguments.length; r++) { var t = null != arguments[r] ? arguments[r] : {}; r % 2 ? ownKeys(Object(t), !0).forEach(function (r) { _defineProperty(e, r, t[r]); }) : Object.getOwnPropertyDescriptors ? Object.defineProperties(e, Object.getOwnPropertyDescriptors(t)) : ownKeys(Object(t)).forEach(function (r) { Object.defineProperty(e, r, Object.getOwnPropertyDescriptor(t, r)); }); } return e; }\nfunction _defineProperty(e, r, t) { return (r = _toPropertyKey(r)) in e ? Object.defineProperty(e, r, { value: t, enumerable: !0, configurable: !0, writable: !0 }) : e[r] = t, e; }\nfunction _toPropertyKey(t) { var i = _toPrimitive(t, \"string\"); return \"symbol\" == _typeof(i) ? i : i + \"\"; }\nfunction _toPrimitive(t, r) { if (\"object\" != _typeof(t) || !t) return t; var e = t[Symbol.toPrimitive]; if (void 0 !== e) { var i = e.call(t, r || \"default\"); if (\"object\" != _typeof(i)) return i; throw new TypeError(\"@@toPrimitive must return a primitive value.\"); } return (\"string\" === r ? String : Number)(t); }\nfunction _slicedToArray(r, e) { return _arrayWithHoles(r) || _iterableToArrayLimit(r, e) || _unsupportedIterableToArray(r, e) || _nonIterableRest(); }\nfunction _nonIterableRest() { throw new TypeError(\"Invalid attempt to destructure non-iterable instance.\\nIn order to be iterable, non-array objects must have a [Symbol.iterator]() method.\"); }\nfunction _unsupportedIterableToArray(r, a) { if (r) { if (\"string\" == typeof r) return _arrayLikeToArray(r, a); var t = {}.toString.call(r).slice(8, -1); return \"Object\" === t && r.constructor && (t = r.constructor.name), \"Map\" === t || \"Set\" === t ? Array.from(r) : \"Arguments\" === t || /^(?:Ui|I)nt(?:8|16|32)(?:Clamped)?Array$/.test(t) ? _arrayLikeToArray(r, a) : void 0; } }\nfunction _arrayLikeToArray(r, a) { (null == a || a > r.length) && (a = r.length); for (var e = 0, n = Array(a); e < a; e++) n[e] = r[e]; return n; }\nfunction _iterableToArrayLimit(r, l) { var t = null == r ? null : \"undefined\" != typeof Symbol && r[Symbol.iterator] || r[\"@@iterator\"]; if (null != t) { var e, n, i, u, a = [], f = !0, o = !1; try { if (i = (t = t.call(r)).next, 0 === l) { if (Object(t) !== t) return; f = !1; } else for (; !(f = (e = i.call(t)).done) && (a.push(e.value), a.length !== l); f = !0); } catch (r) { o = !0, n = r; } finally { try { if (!f && null != t[\"return\"] && (u = t[\"return\"](), Object(u) !== u)) return; } finally { if (o) throw n; } } return a; } }\nfunction _arrayWithHoles(r) { if (Array.isArray(r)) return r; }\nimport isObject from './helpers/isObject.js';\n\n// Extracts the following properties from function arguments:\n// * input `text`\n// * `options` object\n// * `metadata` JSON\nexport default function normalizeArguments(args) {\n var _Array$prototype$slic = Array.prototype.slice.call(args),\n _Array$prototype$slic2 = _slicedToArray(_Array$prototype$slic, 4),\n arg_1 = _Array$prototype$slic2[0],\n arg_2 = _Array$prototype$slic2[1],\n arg_3 = _Array$prototype$slic2[2],\n arg_4 = _Array$prototype$slic2[3];\n var text;\n var options;\n var metadata;\n\n // If the phone number is passed as a string.\n // `parsePhoneNumber('88005553535', ...)`.\n if (typeof arg_1 === 'string') {\n text = arg_1;\n } else throw new TypeError('A text for parsing must be a string.');\n\n // If \"default country\" argument is being passed then move it to `options`.\n // `parsePhoneNumber('88005553535', 'RU', [options], metadata)`.\n if (!arg_2 || typeof arg_2 === 'string') {\n if (arg_4) {\n options = arg_3;\n metadata = arg_4;\n } else {\n options = undefined;\n metadata = arg_3;\n }\n if (arg_2) {\n options = _objectSpread({\n defaultCountry: arg_2\n }, options);\n }\n }\n // `defaultCountry` is not passed.\n // Example: `parsePhoneNumber('+78005553535', [options], metadata)`.\n else if (isObject(arg_2)) {\n if (arg_3) {\n options = arg_2;\n metadata = arg_3;\n } else {\n metadata = arg_2;\n }\n } else throw new Error(\"Invalid second argument: \".concat(arg_2));\n return {\n text: text,\n options: options,\n metadata: metadata\n };\n}\n//# sourceMappingURL=normalizeArguments.js.map","function _typeof(o) { \"@babel/helpers - typeof\"; return _typeof = \"function\" == typeof Symbol && \"symbol\" == typeof Symbol.iterator ? function (o) { return typeof o; } : function (o) { return o && \"function\" == typeof Symbol && o.constructor === Symbol && o !== Symbol.prototype ? \"symbol\" : typeof o; }, _typeof(o); }\nfunction ownKeys(e, r) { var t = Object.keys(e); if (Object.getOwnPropertySymbols) { var o = Object.getOwnPropertySymbols(e); r && (o = o.filter(function (r) { return Object.getOwnPropertyDescriptor(e, r).enumerable; })), t.push.apply(t, o); } return t; }\nfunction _objectSpread(e) { for (var r = 1; r < arguments.length; r++) { var t = null != arguments[r] ? arguments[r] : {}; r % 2 ? ownKeys(Object(t), !0).forEach(function (r) { _defineProperty(e, r, t[r]); }) : Object.getOwnPropertyDescriptors ? Object.defineProperties(e, Object.getOwnPropertyDescriptors(t)) : ownKeys(Object(t)).forEach(function (r) { Object.defineProperty(e, r, Object.getOwnPropertyDescriptor(t, r)); }); } return e; }\nfunction _defineProperty(e, r, t) { return (r = _toPropertyKey(r)) in e ? Object.defineProperty(e, r, { value: t, enumerable: !0, configurable: !0, writable: !0 }) : e[r] = t, e; }\nfunction _toPropertyKey(t) { var i = _toPrimitive(t, \"string\"); return \"symbol\" == _typeof(i) ? i : i + \"\"; }\nfunction _toPrimitive(t, r) { if (\"object\" != _typeof(t) || !t) return t; var e = t[Symbol.toPrimitive]; if (void 0 !== e) { var i = e.call(t, r || \"default\"); if (\"object\" != _typeof(i)) return i; throw new TypeError(\"@@toPrimitive must return a primitive value.\"); } return (\"string\" === r ? String : Number)(t); }\nimport parsePhoneNumberWithError from './parsePhoneNumberWithError_.js';\nimport ParseError from './ParseError.js';\nimport { isSupportedCountry } from './metadata.js';\nexport default function parsePhoneNumber(text, options, metadata) {\n // Validate `defaultCountry`.\n if (options && options.defaultCountry && !isSupportedCountry(options.defaultCountry, metadata)) {\n options = _objectSpread(_objectSpread({}, options), {}, {\n defaultCountry: undefined\n });\n }\n // Parse phone number.\n try {\n return parsePhoneNumberWithError(text, options, metadata);\n } catch (error) {\n /* istanbul ignore else */\n if (error instanceof ParseError) {\n //\n } else {\n throw error;\n }\n }\n}\n//# sourceMappingURL=parsePhoneNumber_.js.map","import normalizeArguments from './normalizeArguments.js';\nimport parsePhoneNumber_ from './parsePhoneNumber_.js';\nexport default function parsePhoneNumber() {\n var _normalizeArguments = normalizeArguments(arguments),\n text = _normalizeArguments.text,\n options = _normalizeArguments.options,\n metadata = _normalizeArguments.metadata;\n return parsePhoneNumber_(text, options, metadata);\n}\n//# sourceMappingURL=parsePhoneNumber.js.map","import Metadata from './metadata.js';\nexport default function getCountries(metadata) {\n return new Metadata(metadata).getCountries();\n}\n//# sourceMappingURL=getCountries.js.map","import PhoneNumber from './PhoneNumber.js';\nexport default function getExampleNumber(country, examples, metadata) {\n if (examples[country]) {\n return new PhoneNumber(country, examples[country], metadata);\n }\n}\n//# sourceMappingURL=getExampleNumber.js.map","import withMetadataArgument from './withMetadataArgument.js'\r\nimport { default as _parsePhoneNumber } from '../../core/index.js'\r\n\r\nexport function parsePhoneNumber() {\r\n\treturn withMetadataArgument(_parsePhoneNumber, arguments)\r\n}","import withMetadataArgument from './withMetadataArgument.js'\r\nimport { getCountryCallingCode as _getCountryCallingCode } from '../../core/index.js'\r\n\r\nexport function getCountryCallingCode() {\r\n\treturn withMetadataArgument(_getCountryCallingCode, arguments)\r\n}","import { useCallback, useLayoutEffect, useRef, useState } from \"preact/hooks\";\nimport { FieldProps } from \"./field\";\nimport { CountryCode, getCountries } from \"libphonenumber-js\";\nimport { Dropdown, DropdownOption } from \"./dropdown\";\nimport { formFieldId, formFieldName, usePrevious } from \"../utils\";\nimport { FunctionComponent } from \"preact\";\nimport { useChannelComponentData } from \"./payment-channel\";\n\ntype FlagIconProps = {\n countryCode: string;\n size?: number;\n};\n\nconst FlagIcon: FunctionComponent<FlagIconProps> = ({\n countryCode,\n size = 16,\n}) => {\n return (\n <div\n style={{\n width: `${size}px`,\n height: `${size}px`,\n borderRadius: \"50%\",\n backgroundImage: `url(https://assets.xendit.co/payment-session/flags/circle/${countryCode.toLowerCase()}.svg)`,\n backgroundSize: \"cover\",\n backgroundPosition: \"center\",\n }}\n />\n );\n};\n\nexport const CountryField: FunctionComponent<FieldProps> = (props) => {\n const { field, onChange } = props;\n const id = formFieldId(field);\n const name = formFieldName(field);\n\n const [selectedCountry, setSelectedCountry] = useState<\n CountryCode | undefined\n >(undefined);\n const selectedCountryIndex = COUNTRIES_AS_DROPDOWN_OPTIONS.findIndex(\n (option) => option.value === selectedCountry,\n );\n\n const hiddenFieldRef = useRef<HTMLInputElement>(null);\n\n useOnCardCountryChange((newCountry: CountryCode) => {\n if (hiddenFieldRef.current) {\n const newOption = COUNTRIES_AS_DROPDOWN_OPTIONS.find((option) => {\n return option.value === newCountry;\n });\n if (newOption) onChangeWrapper(newOption);\n }\n });\n\n const onChangeWrapper = useCallback(\n (option: DropdownOption) => {\n setSelectedCountry(option.value as CountryCode);\n if (hiddenFieldRef.current) {\n hiddenFieldRef.current.value = option.value;\n }\n onChange();\n },\n [onChange],\n );\n\n return (\n <div>\n <input type=\"hidden\" name={name} defaultValue=\"\" ref={hiddenFieldRef} />\n <Dropdown\n id={id}\n options={COUNTRIES_AS_DROPDOWN_OPTIONS}\n onChange={onChangeWrapper}\n placeholder={field.placeholder}\n selectedIndex={selectedCountryIndex}\n />\n </div>\n );\n};\n\nexport const COUNTRIES_AS_DROPDOWN_OPTIONS = getCountries()\n .map((countryCode) => {\n const country = new Intl.DisplayNames([\"en\"], {\n type: \"region\",\n }).of(countryCode);\n\n return {\n title: country,\n value: countryCode,\n leadingAsset: <FlagIcon countryCode={countryCode} />,\n } as DropdownOption;\n })\n .sort((a, b) => a.title.localeCompare(b.title));\n\nexport function useOnCardCountryChange(fn: (newCountry: CountryCode) => void) {\n const cardDetails = useChannelComponentData()?.cardDetails;\n const cardDetailsCountry = cardDetails?.details?.country_codes[0];\n\n // if card details changes, set country to card's country\n const previousCardDetailsCountry = usePrevious(cardDetailsCountry);\n useLayoutEffect(() => {\n if (\n cardDetailsCountry &&\n cardDetailsCountry !== previousCardDetailsCountry\n ) {\n fn(cardDetailsCountry as CountryCode);\n }\n });\n}\n","import withMetadataArgument from './withMetadataArgument.js'\r\nimport { getCountries as _getCountries } from '../../core/index.js'\r\n\r\nexport function getCountries() {\r\n\treturn withMetadataArgument(_getCountries, arguments)\r\n}","import { FunctionComponent } from \"preact\";\nimport { ChannelFormField, FieldType } from \"../backend-types/channel\";\nimport { formFieldId, formFieldName } from \"../utils\";\nimport { Dropdown, DropdownOption } from \"./dropdown\";\nimport { FieldProps } from \"./field\";\nimport { useCallback, useRef } from \"preact/hooks\";\n\nconst toDropdownOptions = (\n fieldOptions: (FieldType & { name: \"dropdown\" })[\"options\"],\n): DropdownOption[] => {\n return fieldOptions.map((opt) => ({\n title: opt.label,\n description: opt.subtitle,\n value: opt.value,\n }));\n};\n\nexport const DropdownField: FunctionComponent<FieldProps> = (props) => {\n const { field, onChange } = props;\n const id = formFieldId(field);\n const name = formFieldName(field);\n\n const hiddenFieldRef = useRef<HTMLInputElement>(null);\n\n const onChangeWrapper = useCallback(\n (option: DropdownOption) => {\n if (hiddenFieldRef.current) {\n hiddenFieldRef.current.value = option.value;\n }\n onChange();\n },\n [onChange],\n );\n\n if (!isDropdownField(field)) {\n throw new Error(\"DropdownField expects field.type.name to be 'dropdown'\");\n }\n\n return (\n <>\n <Dropdown\n id={id}\n placeholder={field.placeholder}\n options={toDropdownOptions(field.type.options)}\n onChange={onChangeWrapper}\n />\n <input type=\"hidden\" name={name} defaultValue=\"\" ref={hiddenFieldRef} />\n </>\n );\n};\n\nfunction isDropdownField(field: ChannelFormField): field is ChannelFormField & {\n type: { name: \"dropdown\" };\n} {\n return field.type.name === \"dropdown\";\n}\n","import { registerElement } from \"../dom-utils\";\n\n// prevent crash if running in node\nconst HTMLElement: (typeof window)[\"HTMLElement\"] =\n typeof window !== \"undefined\" && window.HTMLElement\n ? window.HTMLElement\n : (EventTarget as typeof HTMLElement);\n\n/**\n * https://html.spec.whatwg.org/multipage/forms.html#category-label\n * See the definition of \"labelable\".\n * This is a custom element which is labelable.\n *\n * This makes it possible to catch focus events when a label element is\n * clicked without adding any interactive elements.\n */\nexport class XenditFormAssociatedFocusTrap extends HTMLElement {\n static tag = \"xendit-form-associated-focus-trap\" as const;\n static formAssociated = true;\n private internals: ElementInternals;\n constructor() {\n super();\n this.internals = this.attachInternals();\n }\n}\nregisterElement(XenditFormAssociatedFocusTrap);\n\ndeclare module \"react/jsx-runtime\" {\n // eslint-disable-next-line @typescript-eslint/no-namespace\n namespace JSX {\n interface IntrinsicElements {\n \"xendit-form-associated-focus-trap\": preact.DetailedHTMLProps<\n preact.HTMLAttributes<XenditFormAssociatedFocusTrap>,\n XenditFormAssociatedFocusTrap\n >;\n }\n }\n}\n","export function registerElement(\n element: CustomElementConstructor & { tag: string },\n) {\n if (typeof window === \"undefined\" || !window.customElements) return;\n customElements.define(element.tag, element);\n}\n\nexport function findFirstStyleOrLinkElement() {\n return document.querySelector(\"style, link\");\n}\n","import { BffPollResponse } from \"./backend-types/common\";\nimport {\n ChannelComponentData,\n UpdatableWorldState,\n WorldState,\n} from \"./public-sdk\";\n\n/**\n * @internal\n * Event fired when a session / paymentEntity / etc is changed.\n *\n * Fire this on the sdk instance.\n * ! Don't fire this from within a react render\n */\nexport class InternalUpdateWorldState extends Event {\n static type = \"xendit-update-world-state\" as const;\n\n constructor(public data: WorldState | UpdatableWorldState) {\n super(InternalUpdateWorldState.type, { bubbles: false });\n }\n}\n\n/**\n * @internal\n * Event fired when a session / paymentEntity / etc is changed.\n *\n * Fire this on the sdk instance.\n * ! Don't fire this from within a react render\n */\nexport class InternalUpdateChannelComponentData extends Event {\n static type = \"xendit-update-channel-component-data\" as const;\n\n constructor(\n public channelCode: string,\n public data: Partial<ChannelComponentData>,\n ) {\n super(InternalUpdateChannelComponentData.type, { bubbles: false });\n }\n}\n\n/**\n * @internal\n * Marks it as touched, causing it to reveal validation errors.\n *\n * Fire this on the input to mark as touched.\n * Safe to fire from within a react render.\n */\nexport class InternalSetFieldTouchedEvent extends Event {\n static type = \"xendit-internal-set-field-touched\" as const;\n\n constructor() {\n super(InternalSetFieldTouchedEvent.type, { bubbles: true });\n }\n}\n\n/**\n * @internal\n * Schedules a behavior tree update.\n *\n * Fire this on the sdk instance.\n * Safe to fire from within a react render.\n * ! Be careful to avoid infinite loops.\n */\nexport class InternalBehaviorTreeUpdateEvent extends Event {\n static type = \"xendit-internal-behavior-tree-update\" as const;\n\n constructor() {\n super(InternalBehaviorTreeUpdateEvent.type, {});\n }\n}\n\n/**\n * @internal\n * Schedule a rerender of all components on the next tick.\n *\n * Fire this on the sdk instance.\n * ! Don't fire this from within a react render\n */\nexport class InternalNeedsRerenderEvent extends Event {\n static type = \"xendit-internal-needs-rerender\" as const;\n\n constructor() {\n super(InternalNeedsRerenderEvent.type, {});\n }\n}\n\n/**\n * @internal\n * Set the contents of the next mock poll response. Replaces any other pending scheduled mock update.\n *\n * Fire this on the sdk instance.\n * Safe to fire from within a react render.\n */\nexport class InternalScheduleMockUpdateEvent extends Event {\n static type = \"xendit-internal-schedule-mock-update\" as const;\n\n constructor(public mockData: BffPollResponse | null) {\n super(InternalScheduleMockUpdateEvent.type, {});\n }\n}\n","import {\n ComponentChildren,\n createContext,\n FunctionComponent,\n RefObject,\n} from \"preact\";\nimport { IframeEvent } from \"../../../shared/types\";\nimport { useRef } from \"preact/hooks\";\nimport { assert } from \"../utils\";\n\ninterface IframeRegistry {\n registerIframe: (\n fieldName: string,\n iframeRef: RefObject<HTMLIFrameElement>,\n ) => void;\n unregisterIframe: (fieldName: string) => void;\n postMessageToIframe: (fieldName: string, message: IframeEvent) => void;\n}\n\n/**\n * Context to keep track of iframes rendered in the form, allowing other components\n * to post messages to these iframes without needing direct access to their refs.\n */\nexport const IframeRegistryContext = createContext<IframeRegistry | null>(null);\n\n// read iframe data from environment variable\nassert(process.env.XENDIT_COMPONENTS_SECURE_IFRAME_URL);\nconst parsedIframeUrl = new URL(\n process.env.XENDIT_COMPONENTS_SECURE_IFRAME_URL,\n);\nconst IFRAME_ORIGIN = parsedIframeUrl.origin;\n\nexport const IframeRegistryProvider: FunctionComponent<{\n children: ComponentChildren;\n}> = ({ children }) => {\n const iframeRegistry = useRef<Map<string, HTMLIFrameElement>>(new Map());\n\n const iframeRegistryValue: IframeRegistry = {\n registerIframe: (fieldName, ref) => {\n if (ref.current) iframeRegistry.current.set(fieldName, ref.current);\n },\n unregisterIframe: (fieldName) => iframeRegistry.current.delete(fieldName),\n postMessageToIframe: (fieldName, message) => {\n const iframe = iframeRegistry.current.get(fieldName);\n if (iframe?.contentWindow) {\n iframe.contentWindow.postMessage(message, IFRAME_ORIGIN);\n }\n },\n };\n\n return (\n <IframeRegistryContext.Provider value={iframeRegistryValue}>\n {children}\n </IframeRegistryContext.Provider>\n );\n};\n","import {\n useCallback,\n useContext,\n useLayoutEffect,\n useRef,\n useState,\n} from \"preact/hooks\";\nimport { FieldProps } from \"./field\";\nimport { useSdk, useSession } from \"./session-provider\";\nimport { CardBrand, IframeEvent } from \"../../../shared/types\";\nimport { useChannel } from \"./payment-channel\";\nimport { XenditFormAssociatedFocusTrap } from \"./form-ascociated-focus-trap\";\nimport { internal } from \"../internal\";\nimport { assert, formFieldId, formFieldName } from \"../utils\";\nimport { FunctionComponent } from \"preact\";\nimport { InternalSetFieldTouchedEvent } from \"../private-event-types\";\nimport { IframeRegistryContext } from \"./iframe-registry\";\n\n// read iframe data from environment variable\nassert(process.env.XENDIT_COMPONENTS_SECURE_IFRAME_URL);\nconst parsedIframeUrl = new URL(\n process.env.XENDIT_COMPONENTS_SECURE_IFRAME_URL,\n);\nconst IFRAME_SRC = parsedIframeUrl.toString();\nconst IFRAME_ORIGIN = parsedIframeUrl.origin;\n\nexport const IframeField: FunctionComponent<FieldProps> = (props) => {\n const { field, onChange } = props;\n\n const sdk = useSdk();\n\n const id = formFieldId(field);\n const name = formFieldName(field);\n const session = useSession();\n\n const iframeRef = useRef<HTMLIFrameElement>(null);\n const hiddenFieldRef = useRef<HTMLInputElement>(null);\n const [iframeEcdhPublicKey, setIframeEcdhPublicKey] = useState<\n string | undefined\n >();\n\n const [focusWithin, setFocusWithin] = useState(false);\n\n const [cardBrand, setCardBrand] = useState<CardBrand | null>(null);\n\n const { card } = useChannel() ?? {};\n\n const handleEventFromIframe = useCallback(\n (event: MessageEvent) => {\n if (!iframeRef.current) return;\n\n const expectedSource = iframeRef.current.contentWindow;\n\n if (event.source !== expectedSource) {\n // this is normal, we are not the target of this message\n return;\n }\n\n if (event.origin !== IFRAME_ORIGIN) {\n // this is not normal, something fishy is happening\n return;\n }\n\n const data = event.data as IframeEvent;\n switch (data.type) {\n case \"xendit-iframe-ready\": {\n setIframeEcdhPublicKey(data.ecdhPublicKey);\n break;\n }\n case \"xendit-iframe-change\": {\n if (!hiddenFieldRef.current) return;\n\n setCardBrand(data.cardBrand);\n\n const encrypted = data.encrypted;\n const encryptionVersion = 1;\n const resultData = encrypted.map((enc) => {\n if (data.empty) {\n return \"\";\n }\n\n const parts = [\n \"xendit-encrypted\",\n encryptionVersion,\n iframeEcdhPublicKey,\n enc.iv,\n enc.value,\n ];\n\n if (!data.valid && data.validationErrorCodes.length) {\n // append validation error if invalid - because the validation code can't validate an encrypted string\n parts.push(\n \"invalid\",\n btoa(data.validationErrorCodes[0].localeKey),\n );\n }\n\n return parts.join(\"-\");\n });\n\n if (resultData.length === 0) {\n break; // should never happen\n }\n\n // fields expecting a single value are normal strings, fields expecting multiple values are json arrays\n hiddenFieldRef.current.value =\n resultData.length > 1 ? JSON.stringify(resultData) : resultData[0];\n onChange?.();\n break;\n }\n case \"xendit-iframe-focus\": {\n setFocusWithin(true);\n break;\n }\n case \"xendit-iframe-blur\": {\n setFocusWithin(false);\n if (hiddenFieldRef.current?.value) {\n // mark field as touched if not empty\n hiddenFieldRef.current?.dispatchEvent(\n new InternalSetFieldTouchedEvent(),\n );\n }\n break;\n }\n case \"xendit-iframe-failed-init\": {\n console.error(\n `Iframe field for ${field.channel_property} failed to initialize securely`,\n );\n break;\n }\n }\n },\n [field.channel_property, iframeEcdhPublicKey, onChange],\n );\n\n const giveFocusToIframe = useCallback(() => {\n if (iframeRef.current?.contentWindow) {\n iframeRef.current.contentWindow.postMessage(\n { type: \"xendit-iframe-focus\" satisfies IframeEvent[\"type\"] },\n IFRAME_ORIGIN,\n );\n }\n }, []);\n\n useLayoutEffect(() => {\n window.addEventListener(\"message\", handleEventFromIframe);\n return () => {\n window.removeEventListener(\"message\", handleEventFromIframe);\n };\n }, [handleEventFromIframe]);\n\n const registry = useContext(IframeRegistryContext);\n useLayoutEffect(() => {\n registry?.registerIframe(name, iframeRef);\n return () => registry?.unregisterIframe(name);\n }, [name, registry]);\n\n const iframeUrl = new URL(IFRAME_SRC);\n iframeUrl.searchParams.set(\"input_type\", field.type.name);\n iframeUrl.searchParams.set(\"embedder\", window.location.origin);\n iframeUrl.searchParams.set(\"session_id\", session.payment_session_id);\n\n iframeUrl.searchParams.set(\"pk\", sdk[internal].sdkKey.publicKey);\n iframeUrl.searchParams.set(\"sig\", sdk[internal].sdkKey.signature);\n\n // Pass appearance options if provided\n if (sdk[internal].options.iframeFieldAppearance) {\n iframeUrl.searchParams.set(\n \"appearance\",\n JSON.stringify(sdk[internal].options.iframeFieldAppearance),\n );\n }\n\n const focusClass = focusWithin ? \"xendit-field-focus\" : \"\";\n\n return (\n <div className={`xendit-iframe-container ${focusClass}`}>\n <XenditFormAssociatedFocusTrap.tag\n id={id}\n onFocus={giveFocusToIframe}\n tabIndex={-1}\n />\n <input type=\"hidden\" name={name} defaultValue=\"\" ref={hiddenFieldRef} />\n <iframe\n src={iframeUrl.toString()}\n ref={iframeRef}\n sandbox=\"allow-scripts allow-same-origin\"\n />\n {field.type.name === \"credit_card_number\" && card && (\n <CardBrands\n cardsBrandList={card.brands}\n selectedCardBrand={cardBrand}\n />\n )}\n </div>\n );\n};\n\nconst CardBrands = ({\n cardsBrandList,\n selectedCardBrand,\n}: {\n cardsBrandList: { name: string; logo_url: string }[];\n selectedCardBrand: CardBrand | null;\n}) => {\n if (!cardsBrandList) return null;\n\n const cardBrandLogo = cardsBrandList.find(\n (b) => b.name === selectedCardBrand,\n )?.logo_url;\n\n return (\n <div className=\"xendit-card-brands-list\">\n {selectedCardBrand\n ? cardBrandLogo && (\n <img\n className={\"xendit-card-brand-logo\"}\n src={cardBrandLogo}\n alt={selectedCardBrand}\n />\n )\n : cardsBrandList.map(({ name, logo_url }) => {\n return (\n <img\n className={\"xendit-card-brand-logo\"}\n src={logo_url}\n alt={name}\n key={name}\n />\n );\n })}\n </div>\n );\n};\n","// This file is a workaround for a bug in web browsers' \"native\"\n// ES6 importing system which is uncapable of importing \"*.json\" files.\n// https://github.com/catamphetamine/libphonenumber-js/issues/239\nexport default {\"AC\":\"40123\",\"AD\":\"312345\",\"AE\":\"501234567\",\"AF\":\"701234567\",\"AG\":\"2684641234\",\"AI\":\"2642351234\",\"AL\":\"672123456\",\"AM\":\"77123456\",\"AO\":\"923123456\",\"AR\":\"91123456789\",\"AS\":\"6847331234\",\"AT\":\"664123456\",\"AU\":\"412345678\",\"AW\":\"5601234\",\"AX\":\"412345678\",\"AZ\":\"401234567\",\"BA\":\"61123456\",\"BB\":\"2462501234\",\"BD\":\"1812345678\",\"BE\":\"450001234\",\"BF\":\"70123456\",\"BG\":\"43012345\",\"BH\":\"36001234\",\"BI\":\"79561234\",\"BJ\":\"0195123456\",\"BL\":\"690001234\",\"BM\":\"4413701234\",\"BN\":\"7123456\",\"BO\":\"71234567\",\"BQ\":\"3181234\",\"BR\":\"11961234567\",\"BS\":\"2423591234\",\"BT\":\"17123456\",\"BW\":\"71123456\",\"BY\":\"294911911\",\"BZ\":\"6221234\",\"CA\":\"5062345678\",\"CC\":\"412345678\",\"CD\":\"991234567\",\"CF\":\"70012345\",\"CG\":\"061234567\",\"CH\":\"781234567\",\"CI\":\"0123456789\",\"CK\":\"71234\",\"CL\":\"221234567\",\"CM\":\"671234567\",\"CN\":\"13123456789\",\"CO\":\"3211234567\",\"CR\":\"83123456\",\"CU\":\"51234567\",\"CV\":\"9911234\",\"CW\":\"95181234\",\"CX\":\"412345678\",\"CY\":\"96123456\",\"CZ\":\"601123456\",\"DE\":\"15123456789\",\"DJ\":\"77831001\",\"DK\":\"34412345\",\"DM\":\"7672251234\",\"DO\":\"8092345678\",\"DZ\":\"551234567\",\"EC\":\"991234567\",\"EE\":\"51234567\",\"EG\":\"1001234567\",\"EH\":\"650123456\",\"ER\":\"7123456\",\"ES\":\"612345678\",\"ET\":\"911234567\",\"FI\":\"412345678\",\"FJ\":\"7012345\",\"FK\":\"51234\",\"FM\":\"3501234\",\"FO\":\"211234\",\"FR\":\"612345678\",\"GA\":\"06031234\",\"GB\":\"7400123456\",\"GD\":\"4734031234\",\"GE\":\"555123456\",\"GF\":\"694201234\",\"GG\":\"7781123456\",\"GH\":\"231234567\",\"GI\":\"57123456\",\"GL\":\"221234\",\"GM\":\"3012345\",\"GN\":\"601123456\",\"GP\":\"690001234\",\"GQ\":\"222123456\",\"GR\":\"6912345678\",\"GT\":\"51234567\",\"GU\":\"6713001234\",\"GW\":\"955012345\",\"GY\":\"6091234\",\"HK\":\"51234567\",\"HN\":\"91234567\",\"HR\":\"921234567\",\"HT\":\"34101234\",\"HU\":\"201234567\",\"ID\":\"812345678\",\"IE\":\"850123456\",\"IL\":\"502345678\",\"IM\":\"7924123456\",\"IN\":\"8123456789\",\"IO\":\"3801234\",\"IQ\":\"7912345678\",\"IR\":\"9123456789\",\"IS\":\"6111234\",\"IT\":\"3123456789\",\"JE\":\"7797712345\",\"JM\":\"8762101234\",\"JO\":\"790123456\",\"JP\":\"9012345678\",\"KE\":\"712123456\",\"KG\":\"700123456\",\"KH\":\"91234567\",\"KI\":\"72001234\",\"KM\":\"3212345\",\"KN\":\"8697652917\",\"KP\":\"1921234567\",\"KR\":\"1020000000\",\"KW\":\"50012345\",\"KY\":\"3453231234\",\"KZ\":\"7710009998\",\"LA\":\"2023123456\",\"LB\":\"71123456\",\"LC\":\"7582845678\",\"LI\":\"660234567\",\"LK\":\"712345678\",\"LR\":\"770123456\",\"LS\":\"50123456\",\"LT\":\"61234567\",\"LU\":\"628123456\",\"LV\":\"21234567\",\"LY\":\"912345678\",\"MA\":\"650123456\",\"MC\":\"612345678\",\"MD\":\"62112345\",\"ME\":\"60123456\",\"MF\":\"690001234\",\"MG\":\"321234567\",\"MH\":\"2351234\",\"MK\":\"72345678\",\"ML\":\"65012345\",\"MM\":\"92123456\",\"MN\":\"88123456\",\"MO\":\"66123456\",\"MP\":\"6702345678\",\"MQ\":\"696201234\",\"MR\":\"22123456\",\"MS\":\"6644923456\",\"MT\":\"96961234\",\"MU\":\"52512345\",\"MV\":\"7712345\",\"MW\":\"991234567\",\"MX\":\"2221234567\",\"MY\":\"123456789\",\"MZ\":\"821234567\",\"NA\":\"811234567\",\"NC\":\"751234\",\"NE\":\"93123456\",\"NF\":\"381234\",\"NG\":\"8021234567\",\"NI\":\"81234567\",\"NL\":\"612345678\",\"NO\":\"40612345\",\"NP\":\"9841234567\",\"NR\":\"5551234\",\"NU\":\"8884012\",\"NZ\":\"211234567\",\"OM\":\"92123456\",\"PA\":\"61234567\",\"PE\":\"912345678\",\"PF\":\"87123456\",\"PG\":\"70123456\",\"PH\":\"9051234567\",\"PK\":\"3012345678\",\"PL\":\"512345678\",\"PM\":\"551234\",\"PR\":\"7872345678\",\"PS\":\"599123456\",\"PT\":\"912345678\",\"PW\":\"6201234\",\"PY\":\"961456789\",\"QA\":\"33123456\",\"RE\":\"692123456\",\"RO\":\"712034567\",\"RS\":\"601234567\",\"RU\":\"9123456789\",\"RW\":\"720123456\",\"SA\":\"512345678\",\"SB\":\"7421234\",\"SC\":\"2510123\",\"SD\":\"911231234\",\"SE\":\"701234567\",\"SG\":\"81234567\",\"SH\":\"51234\",\"SI\":\"31234567\",\"SJ\":\"41234567\",\"SK\":\"912123456\",\"SL\":\"25123456\",\"SM\":\"66661212\",\"SN\":\"701234567\",\"SO\":\"71123456\",\"SR\":\"7412345\",\"SS\":\"977123456\",\"ST\":\"9812345\",\"SV\":\"70123456\",\"SX\":\"7215205678\",\"SY\":\"944567890\",\"SZ\":\"76123456\",\"TA\":\"8999\",\"TC\":\"6492311234\",\"TD\":\"63012345\",\"TG\":\"90112345\",\"TH\":\"812345678\",\"TJ\":\"917123456\",\"TK\":\"7290\",\"TL\":\"77212345\",\"TM\":\"66123456\",\"TN\":\"20123456\",\"TO\":\"7715123\",\"TR\":\"5012345678\",\"TT\":\"8682911234\",\"TV\":\"901234\",\"TW\":\"912345678\",\"TZ\":\"621234567\",\"UA\":\"501234567\",\"UG\":\"712345678\",\"US\":\"2015550123\",\"UY\":\"94231234\",\"UZ\":\"912345678\",\"VA\":\"3123456789\",\"VC\":\"7844301234\",\"VE\":\"4121234567\",\"VG\":\"2843001234\",\"VI\":\"3406421234\",\"VN\":\"912345678\",\"VU\":\"5912345\",\"WF\":\"821234\",\"WS\":\"7212345\",\"XK\":\"43201234\",\"YE\":\"712345678\",\"YT\":\"639012345\",\"ZA\":\"711234567\",\"ZM\":\"955123456\",\"ZW\":\"712345678\"}","import { FieldProps } from \"./field\";\nimport { Dropdown, DropdownOption } from \"./dropdown\";\nimport { CountryCode, getCountryCallingCode } from \"libphonenumber-js/min\";\nimport {\n COUNTRIES_AS_DROPDOWN_OPTIONS,\n useOnCardCountryChange,\n} from \"./field-country\";\nimport parsePhoneNumberFromString, {\n getExampleNumber,\n PhoneNumber,\n} from \"libphonenumber-js\";\nimport examples from \"libphonenumber-js/mobile/examples\";\nimport { useSession } from \"./session-provider\";\nimport { formFieldId, formFieldName } from \"../utils\";\nimport { useCallback, useMemo, useRef, useState } from \"preact/hooks\";\nimport { FunctionComponent, TargetedEvent, TargetedFocusEvent } from \"preact\";\nimport { InternalSetFieldTouchedEvent } from \"../private-event-types\";\n\nexport const PhoneNumberField: FunctionComponent<FieldProps> = (props) => {\n const { field, onChange } = props;\n const id = formFieldId(field);\n const name = formFieldName(field);\n\n const session = useSession();\n\n const hiddenFieldRef = useRef<HTMLInputElement>(null);\n\n const [countryCode, setCountryCode] = useState(session.country);\n const countryCodeIndex = useMemo(() => {\n const index = COUNTRIES_WITH_DIAL_CODES_AS_DROPDOWN_OPTIONS.findIndex(\n (r) => r.value === countryCode,\n );\n if (index === -1) return 0;\n return index;\n }, [countryCode]);\n const country =\n COUNTRIES_WITH_DIAL_CODES_AS_DROPDOWN_OPTIONS[countryCodeIndex];\n\n const [localNumber, setLocalNumber] = useState(\"\");\n const inputRef = useRef<HTMLInputElement>(null);\n\n const formatPhoneNumber = useCallback(\n (country: DropdownOptionWithDial, localNumber: string) => {\n const phoneNumber = sanitizePhoneNumber(country, localNumber);\n if (phoneNumber) {\n // use parsed format if parsing was successful\n return phoneNumber.number;\n } else {\n // else just concat the dial code and local number\n return `+${country.dial}${localNumber}`;\n }\n },\n [],\n );\n\n const updateHiddenField = useCallback(\n (country: DropdownOptionWithDial, localNumber: string) => {\n if (hiddenFieldRef.current) {\n hiddenFieldRef.current.value = formatPhoneNumber(country, localNumber);\n }\n },\n [formatPhoneNumber],\n );\n\n function handleLocalChange(event: TargetedEvent<HTMLInputElement>): void {\n const nextLocal = (event.target as HTMLInputElement).value;\n setLocalNumber(nextLocal);\n updateHiddenField(country, nextLocal);\n onChange();\n }\n\n function handleCountryChange(option: DropdownOption): void {\n const nextCountry = option as DropdownOptionWithDial;\n setCountryCode(nextCountry.value as string);\n updateHiddenField(nextCountry, localNumber);\n onChange();\n }\n\n function handleBlur(event: TargetedFocusEvent<HTMLInputElement>): void {\n formatForUser();\n if (event.currentTarget?.value) {\n hiddenFieldRef.current?.dispatchEvent(new InternalSetFieldTouchedEvent());\n }\n }\n\n // when the user inputs a card number, update the phone number field to match\n useOnCardCountryChange((newCountry: CountryCode) => {\n const newOption = COUNTRIES_WITH_DIAL_CODES_AS_DROPDOWN_OPTIONS.find(\n (option) => option.value === newCountry,\n );\n if (newOption && newOption.value !== countryCode && !localNumber) {\n handleCountryChange(newOption);\n }\n });\n\n function getExampleLocalNumber() {\n return (\n getExampleNumber(country.value as CountryCode, examples)\n ?.formatInternational()\n ?.replace(\n `+${getCountryCallingCode(country.value as CountryCode)} `,\n \"\",\n ) || \"\"\n );\n }\n\n function formatForUser() {\n const phoneNumber = sanitizePhoneNumber(country, localNumber);\n if (phoneNumber) {\n const international = phoneNumber.formatInternational();\n // remove country dial code from displayed local number\n setLocalNumber(\n international.replace(\n `+${getCountryCallingCode(country.value as CountryCode)} `,\n \"\",\n ),\n );\n }\n }\n\n return (\n <div className=\"xendit-input-phone\">\n <Dropdown\n options={COUNTRIES_WITH_DIAL_CODES_AS_DROPDOWN_OPTIONS}\n selectedIndex={countryCodeIndex}\n onChange={handleCountryChange}\n />\n <input\n id={id}\n ref={inputRef}\n type=\"tel\"\n inputMode=\"tel\"\n placeholder={getExampleLocalNumber()}\n className=\"xendit-text-14 xendit-phone-number-input\"\n onBlur={handleBlur}\n onChange={handleLocalChange}\n value={localNumber}\n autoComplete=\"tel\"\n />\n <input type=\"hidden\" name={name} ref={hiddenFieldRef} />\n </div>\n );\n};\n\ntype DropdownOptionWithDial = DropdownOption & { dial: string };\nconst COUNTRIES_WITH_DIAL_CODES_AS_DROPDOWN_OPTIONS =\n COUNTRIES_AS_DROPDOWN_OPTIONS.map<DropdownOptionWithDial | null>(\n (country) => {\n const dial = getCountryCallingCode(country.value as CountryCode);\n if (!dial) return null;\n return {\n ...country,\n shortTitle: `+${dial}`,\n title: `${country.title} (+${dial})`,\n dial,\n };\n },\n ).filter((country): country is DropdownOptionWithDial => {\n return Boolean(country);\n });\n\nconst sanitizePhoneNumber = (\n country: DropdownOptionWithDial,\n phoneNumber: string,\n): PhoneNumber | null => {\n const parsed = parsePhoneNumberFromString(\n phoneNumber,\n country.value as CountryCode,\n );\n if (parsed && parsed.isPossible()) return parsed;\n\n return null;\n};\n","import withMetadataArgument from './withMetadataArgument.js'\r\nimport { getExampleNumber as _getExampleNumber } from '../../core/index.js'\r\n\r\nexport function getExampleNumber() {\r\n\treturn withMetadataArgument(_getExampleNumber, arguments)\r\n}","type TitleValuePair = {\n title: string;\n value: string;\n};\n\nfunction toTitleValuePair(nameValue: {\n name: string;\n value: string;\n}): TitleValuePair {\n return {\n title: nameValue.name,\n value: nameValue.value,\n };\n}\n\n// https://gist.github.com/mshafrir/2646763\nexport const PROVINCES_US: TitleValuePair[] = [\n {\n name: \"Alabama\",\n value: \"AL\",\n },\n {\n name: \"Alaska\",\n value: \"AK\",\n },\n {\n name: \"American Samoa\",\n value: \"AS\",\n },\n {\n name: \"Arizona\",\n value: \"AZ\",\n },\n {\n name: \"Arkansas\",\n value: \"AR\",\n },\n {\n name: \"California\",\n value: \"CA\",\n },\n {\n name: \"Colorado\",\n value: \"CO\",\n },\n {\n name: \"Connecticut\",\n value: \"CT\",\n },\n {\n name: \"Delaware\",\n value: \"DE\",\n },\n {\n name: \"District Of Columbia\",\n value: \"DC\",\n },\n {\n name: \"Federated States Of Micronesia\",\n value: \"FM\",\n },\n {\n name: \"Florida\",\n value: \"FL\",\n },\n {\n name: \"Georgia\",\n value: \"GA\",\n },\n {\n name: \"Guam\",\n value: \"GU\",\n },\n {\n name: \"Hawaii\",\n value: \"HI\",\n },\n {\n name: \"Idaho\",\n value: \"ID\",\n },\n {\n name: \"Illinois\",\n value: \"IL\",\n },\n {\n name: \"Indiana\",\n value: \"IN\",\n },\n {\n name: \"Iowa\",\n value: \"IA\",\n },\n {\n name: \"Kansas\",\n value: \"KS\",\n },\n {\n name: \"Kentucky\",\n value: \"KY\",\n },\n {\n name: \"Louisiana\",\n value: \"LA\",\n },\n {\n name: \"Maine\",\n value: \"ME\",\n },\n {\n name: \"Marshall Islands\",\n value: \"MH\",\n },\n {\n name: \"Maryland\",\n value: \"MD\",\n },\n {\n name: \"Massachusetts\",\n value: \"MA\",\n },\n {\n name: \"Michigan\",\n value: \"MI\",\n },\n {\n name: \"Minnesota\",\n value: \"MN\",\n },\n {\n name: \"Mississippi\",\n value: \"MS\",\n },\n {\n name: \"Missouri\",\n value: \"MO\",\n },\n {\n name: \"Montana\",\n value: \"MT\",\n },\n {\n name: \"Nebraska\",\n value: \"NE\",\n },\n {\n name: \"Nevada\",\n value: \"NV\",\n },\n {\n name: \"New Hampshire\",\n value: \"NH\",\n },\n {\n name: \"New Jersey\",\n value: \"NJ\",\n },\n {\n name: \"New Mexico\",\n value: \"NM\",\n },\n {\n name: \"New York\",\n value: \"NY\",\n },\n {\n name: \"North Carolina\",\n value: \"NC\",\n },\n {\n name: \"North Dakota\",\n value: \"ND\",\n },\n {\n name: \"Northern Mariana Islands\",\n value: \"MP\",\n },\n {\n name: \"Ohio\",\n value: \"OH\",\n },\n {\n name: \"Oklahoma\",\n value: \"OK\",\n },\n {\n name: \"Oregon\",\n value: \"OR\",\n },\n {\n name: \"Palau\",\n value: \"PW\",\n },\n {\n name: \"Pennsylvania\",\n value: \"PA\",\n },\n {\n name: \"Puerto Rico\",\n value: \"PR\",\n },\n {\n name: \"Rhode Island\",\n value: \"RI\",\n },\n {\n name: \"South Carolina\",\n value: \"SC\",\n },\n {\n name: \"South Dakota\",\n value: \"SD\",\n },\n {\n name: \"Tennessee\",\n value: \"TN\",\n },\n {\n name: \"Texas\",\n value: \"TX\",\n },\n {\n name: \"Utah\",\n value: \"UT\",\n },\n {\n name: \"Vermont\",\n value: \"VT\",\n },\n {\n name: \"Virgin Islands\",\n value: \"VI\",\n },\n {\n name: \"Virginia\",\n value: \"VA\",\n },\n {\n name: \"Washington\",\n value: \"WA\",\n },\n {\n name: \"West Virginia\",\n value: \"WV\",\n },\n {\n name: \"Wisconsin\",\n value: \"WI\",\n },\n {\n name: \"Wyoming\",\n value: \"WY\",\n },\n].map(toTitleValuePair);\n\n// https://gist.github.com/pbojinov/a87adf559d2f7e81d86ae67e7bd883c7\nexport const PROVINCES_CA: TitleValuePair[] = [\n {\n name: \"Alberta\",\n value: \"AB\",\n },\n {\n name: \"British Columbia\",\n value: \"BC\",\n },\n {\n name: \"Manitoba\",\n value: \"MB\",\n },\n {\n name: \"New Brunswick\",\n value: \"NB\",\n },\n {\n name: \"Newfoundland and Labrador\",\n value: \"NL\",\n },\n {\n name: \"Northwest Territories\",\n value: \"NT\",\n },\n {\n name: \"Nova Scotia\",\n value: \"NS\",\n },\n {\n name: \"Nunavut\",\n value: \"NU\",\n },\n {\n name: \"Ontario\",\n value: \"ON\",\n },\n {\n name: \"Prince Edward Island\",\n value: \"PE\",\n },\n {\n name: \"Quebec\",\n value: \"QC\",\n },\n {\n name: \"Saskatchewan\",\n value: \"SK\",\n },\n {\n name: \"Yukon Territory\",\n value: \"YT\",\n },\n].map(toTitleValuePair);\n\nexport const PROVINCES_GB: TitleValuePair[] = [\n { name: \"Avon\" },\n { name: \"Bedfordshire\" },\n { name: \"Berkshire\" },\n { name: \"Buckinghamshire\" },\n { name: \"Cambridgeshire\" },\n { name: \"Cheshire\" },\n { name: \"Cleveland\" },\n { name: \"Cornwall\" },\n { name: \"Cumbria\" },\n { name: \"Derbyshire\" },\n { name: \"Devon\" },\n { name: \"Dorset\" },\n { name: \"Durham\" },\n { name: \"East Sussex\" },\n { name: \"Essex\" },\n { name: \"Gloucestershire\" },\n { name: \"Hampshire\" },\n { name: \"Herefordshire\" },\n { name: \"Hertfordshire\" },\n { name: \"Isle of Wight\" },\n { name: \"Kent\" },\n { name: \"Lancashire\" },\n { name: \"Leicestershire\" },\n { name: \"Lincolnshire\" },\n { name: \"London\" },\n { name: \"Merseyside\" },\n { name: \"Norfolk\" },\n { name: \"Northamptonshire\" },\n { name: \"Northumberland\" },\n { name: \"North Yorkshire\" },\n { name: \"Nottinghamshire\" },\n { name: \"Oxfordshire\" },\n { name: \"Rutland\" },\n { name: \"Shropshire\" },\n { name: \"Somerset\" },\n { name: \"South Yorkshire\" },\n { name: \"Staffordshire\" },\n { name: \"Suffolk\" },\n { name: \"Surrey\" },\n { name: \"Tyne and Wear\" },\n { name: \"Warwickshire\" },\n { name: \"West Midlands\" },\n { name: \"West Sussex\" },\n { name: \"West Yorkshire\" },\n { name: \"Wiltshire\" },\n { name: \"Worcestershire\" },\n { name: \"Clwyd\" },\n { name: \"Dyfed\" },\n { name: \"Gwent\" },\n { name: \"Gwynedd\" },\n { name: \"Mid Glamorgan\" },\n { name: \"Powys\" },\n { name: \"South Glamorgan\" },\n { name: \"West Glamorgan\" },\n { name: \"Aberdeenshire\" },\n { name: \"Angus\" },\n { name: \"Argyll\" },\n { name: \"Ayrshire\" },\n { name: \"Banffshire\" },\n { name: \"Berwickshire\" },\n { name: \"Bute\" },\n { name: \"Caithness\" },\n { name: \"Clackmannanshire\" },\n { name: \"Dumfriesshire\" },\n { name: \"Dunbartonshire\" },\n { name: \"East Lothian\" },\n { name: \"Fife\" },\n { name: \"Inverness-shire\" },\n { name: \"Kincardineshire\" },\n { name: \"Kinross-shire\" },\n { name: \"Kirkcudbrightshire\" },\n { name: \"Lanarkshire\" },\n { name: \"Midlothian\" },\n { name: \"Moray\" },\n { name: \"Nairnshire\" },\n { name: \"Orkney\" },\n { name: \"Peeblesshire\" },\n { name: \"Perthshire\" },\n { name: \"Renfrewshire\" },\n { name: \"Ross-shire\" },\n { name: \"Roxburghshire\" },\n { name: \"Selkirkshire\" },\n { name: \"Shetland\" },\n { name: \"Stirlingshire\" },\n { name: \"Sutherland\" },\n { name: \"West Lothian\" },\n { name: \"Wigtownshire\" },\n { name: \"Antrim\" },\n { name: \"Armagh\" },\n { name: \"Down\" },\n { name: \"Fermanagh\" },\n { name: \"Londonderry\" },\n { name: \"Tyrone\" },\n].map((province) => ({ title: province.name, value: province.name }));\n","import { useRef, useCallback, useLayoutEffect } from \"preact/hooks\";\nimport { FieldProps } from \"./field\";\nimport { CountryCode } from \"libphonenumber-js\";\nimport { Dropdown, DropdownOption } from \"./dropdown\";\nimport { useSession } from \"./session-provider\";\nimport { PROVINCES_CA, PROVINCES_GB, PROVINCES_US } from \"../data/provinces\";\nimport {\n formFieldId,\n formFieldName,\n getValueFromChannelProperty,\n objectId,\n usePrevious,\n} from \"../utils\";\nimport { useChannel } from \"./payment-channel\";\nimport { useChannelProperties } from \"./channel-form\";\nimport { ChannelFormField, ChannelProperties } from \"../backend-types/channel\";\nimport { BffSession } from \"../backend-types/session\";\nimport { FunctionComponent, TargetedEvent } from \"preact\";\nimport { InternalSetFieldTouchedEvent } from \"../private-event-types\";\n\nexport const ProvinceField: FunctionComponent<FieldProps> = (props) => {\n const { field, onChange } = props;\n const id = formFieldId(field);\n const name = formFieldName(field);\n\n const session = useSession();\n const allFields = useChannel()?.form;\n const channelProperties = useChannelProperties();\n\n const hiddenFieldRef = useRef<HTMLInputElement>(null);\n\n const clearValue = useCallback(() => {\n if (hiddenFieldRef.current) {\n hiddenFieldRef.current.value = \"\";\n }\n onChange();\n }, [onChange]);\n\n const onChangeDropdown = useCallback(\n (option: DropdownOption) => {\n if (hiddenFieldRef.current) {\n hiddenFieldRef.current.value = option.value;\n }\n onChange();\n hiddenFieldRef.current?.dispatchEvent(new InternalSetFieldTouchedEvent());\n },\n [onChange],\n );\n\n const onChangeInput = useCallback(\n (e: TargetedEvent<HTMLInputElement>) => {\n if (hiddenFieldRef.current) {\n hiddenFieldRef.current.value = (e.target as HTMLInputElement).value;\n }\n onChange();\n hiddenFieldRef.current?.dispatchEvent(new InternalSetFieldTouchedEvent());\n },\n [onChange],\n );\n\n // get the list of provinces for the chosen country\n const options = getProvinceList(\n getBestCountryForProvinceField(\n field,\n allFields ?? [],\n channelProperties ?? {},\n session,\n ),\n );\n\n // if the option list changes, clear the selection\n const previousOptions = usePrevious(options);\n useLayoutEffect(() => {\n if (previousOptions !== options) {\n clearValue();\n }\n }, [clearValue, options, previousOptions]);\n\n return (\n <>\n <input type=\"hidden\" name={name} defaultValue=\"\" ref={hiddenFieldRef} />\n {options ? (\n <Dropdown\n key={objectId(options)}\n id={id}\n options={options}\n onChange={onChangeDropdown}\n placeholder={field.placeholder}\n />\n ) : (\n <input\n type=\"text\"\n id={id}\n onChange={onChangeInput}\n placeholder={field.placeholder}\n className={`xendit-input xendit-text-14`}\n />\n )}\n </>\n );\n};\n\nfunction getProvinceList(country: CountryCode | null) {\n switch (country) {\n case \"US\":\n return PROVINCES_US;\n case \"CA\":\n return PROVINCES_CA;\n case \"GB\":\n return PROVINCES_GB;\n default:\n return null;\n }\n}\n\nfunction getBestCountryForProvinceField(\n thisField: ChannelFormField,\n allFields: ChannelFormField[],\n channelProperties: ChannelProperties,\n session: BffSession,\n): CountryCode {\n // country selection priority:\n // 1. previous form field\n // 3. session country\n if (allFields) {\n for (let i = 0; i < allFields.length; i++) {\n const otherField = allFields[i];\n if (i > 0 && otherField === thisField) {\n const previousField = allFields[i - 1];\n if (previousField.type.name === \"country\") {\n const country = getValueFromChannelProperty(\n previousField.channel_property,\n channelProperties,\n );\n if (country && typeof country === \"string\") {\n return country as CountryCode;\n }\n }\n }\n }\n }\n return session.country as CountryCode;\n}\n","import { ChannelFormField } from \"../backend-types/channel\";\nimport { FieldProps } from \"./field\";\nimport { formFieldId, formFieldName } from \"../utils\";\nimport { useRef } from \"preact/hooks\";\nimport { FunctionComponent, TargetedEvent, TargetedFocusEvent } from \"preact\";\nimport { InternalSetFieldTouchedEvent } from \"../private-event-types\";\n\nexport const TextField: FunctionComponent<FieldProps> = (props) => {\n const { field, onChange } = props;\n const id = formFieldId(field);\n const name = formFieldName(field);\n const inputRef = useRef<HTMLInputElement>(null);\n\n function handleChange(event: TargetedEvent<HTMLInputElement>): void {\n onChange();\n }\n\n function handleBlur(event: TargetedFocusEvent<HTMLInputElement>): void {\n if (event.currentTarget?.value) {\n inputRef.current?.dispatchEvent(new InternalSetFieldTouchedEvent());\n }\n }\n\n return (\n <input\n id={id}\n name={name}\n ref={inputRef}\n type=\"text\"\n placeholder={field.placeholder}\n className={`xendit-text-14`}\n onBlur={handleBlur}\n onChange={handleChange}\n minLength={isTextField(field) ? field.type.min_length : undefined}\n maxLength={isTextField(field) ? field.type.max_length : undefined}\n autoComplete={isTextField(field) ? field.type.autocomplete : undefined}\n />\n );\n};\n\nfunction isTextField(field: ChannelFormField): field is ChannelFormField & {\n type: { name: \"text\" };\n} {\n return field.type.name === \"text\";\n}\n","// affects number formatting (thousands separator, decimal separator)\n// defaults to \",\" for thousands and \".\" for decimal\nexport const CURRENCY_NUMBER_FORMAT_LOCALE: Record<string, string> = {\n IDR: \"id\",\n VND: \"vi\",\n BRL: \"pt-BR\",\n RUB: \"ru\",\n CZK: \"cs\",\n RON: \"ro\",\n UAH: \"uk\",\n CLP: \"es-CL\",\n COP: \"es-CO\",\n UYU: \"es-UY\",\n ARS: \"es-AR\",\n INR: \"hi-IN\",\n NPR: \"hi-IN\",\n LKR: \"hi-IN\",\n BDT: \"hi-IN\",\n};\n\n// Heavily modified from https://gist.github.com/ksafranski/2973986\n// checked against https://documentation.infiniteblue.com/platform/Currency_formats.htm\nexport const CURRENCY_SYMBOLS: Record<string, string> = {\n USD: \"US$\",\n CAD: \"CA$\",\n EUR: \"€\",\n AFN: \"؋\",\n ALL: \"Lek\",\n AMD: \"֏\",\n ARS: \"AR$\",\n AUD: \"AU$\",\n AZN: \"₼\",\n BAM: \"KM\",\n BDT: \"৳\",\n BIF: \"FBu\",\n BND: \"BN$\",\n BOB: \"Bs\",\n BRL: \"R$\",\n BWP: \"P\",\n BYN: \"Br\",\n BZD: \"BZ$\",\n CDF: \"FrCD\",\n CHF: \"CHF\",\n CLP: \"CL$\",\n CNY: \"CN¥\",\n COP: \"CO$\",\n CRC: \"₡\",\n CVE: \"CV$\",\n CZK: \"Kč\",\n DJF: \"Fdj\",\n DKK: \"kr\",\n DOP: \"RD$\",\n ERN: \"Nfk\",\n ETB: \"Br\",\n GBP: \"£\",\n GEL: \"₾\",\n GHS: \"GH₵\",\n GNF: \"FG\",\n GTQ: \"Q\",\n HKD: \"HK$\",\n HNL: \"L\",\n HUF: \"Ft\",\n IDR: \"Rp\",\n ILS: \"₪\",\n INR: \"₹\",\n IRR: \"IRR\",\n ISK: \"kr\",\n JMD: \"J$\",\n JPY: \"¥\",\n KES: \"Ksh\",\n KHR: \"៛\",\n KMF: \"FC\",\n KRW: \"₩\",\n KZT: \"₸\",\n LKR: \"SL Re\",\n MDL: \"lei\",\n MGA: \"MGA\",\n MKD: \"MKD\",\n MMK: \"K\",\n MOP: \"MOP$\",\n MUR: \"₨\",\n MXN: \"MX$\",\n MYR: \"RM\",\n MZN: \"MTn\",\n NAD: \"N$\",\n NGN: \"₦\",\n NIO: \"C$\",\n NOK: \"kr\",\n NPR: \"रु\",\n NZD: \"NZ$\",\n PAB: \"B/.\",\n PEN: \"S/.\",\n PHP: \"₱\",\n PKR: \"₨\",\n PLN: \"zł\",\n PYG: \"₲\",\n RON: \"RON\",\n RSD: \"RSD\",\n RUB: \"₽\",\n RWF: \"FR\",\n SDG: \"SDG\",\n SEK: \"kr\",\n SGD: \"S$\",\n SOS: \"Ssh\",\n THB: \"฿\",\n TOP: \"T$\",\n TRY: \"TL\",\n TTD: \"TT$\",\n TWD: \"NT$\",\n TZS: \"TSh\",\n UAH: \"₴\",\n UGX: \"USh\",\n UYU: \"$U\",\n UZS: \"сум\",\n VND: \"₫\",\n XAF: \"FCFA\",\n XOF: \"CFA\",\n ZAR: \"R\",\n ZMW: \"K\",\n ZWL: \"ZWL$\",\n};\n\n// $ is replaced with the currency symbol, 1 is replaced with the amount\n// default \"$1\"\nexport const CURRENCY_SYMBOL_POSITION: Record<string, string> = {\n ALL: \"1 $\",\n BAM: \"1 $\",\n BYN: \"1 $\",\n CZK: \"1 $\",\n DKK: \"1 $\",\n GEL: \"1 $\",\n HUF: \"1 $\",\n ISK: \"1 $\",\n IRR: \"1 $\",\n KHR: \"1$\",\n MDL: \"1 $\",\n MKD: \"1 $\",\n NOK: \"1 $\",\n PLN: \"1 $\",\n RON: \"1 $\",\n RSD: \"1 $\",\n RUB: \"1$\",\n SEK: \"1 $\",\n UZS: \"1 $\",\n VND: \"1$\",\n};\n\n// only list currencies that have more than 2 decimals\nexport const CURRENCY_SYMBOL_DECIMALS: Record<string, number> = {\n BHD: 3,\n JOD: 3,\n KWD: 3,\n LYD: 3,\n OMR: 3,\n TND: 3,\n};\n","import {\n CURRENCY_NUMBER_FORMAT_LOCALE,\n CURRENCY_SYMBOL_DECIMALS,\n CURRENCY_SYMBOL_POSITION,\n CURRENCY_SYMBOLS,\n} from \"./data/currencies\";\n\nexport function amountFormat(amount: number, currency: string): string {\n let str = \"\";\n\n const isNegative = amount < 0;\n\n // format as number with separators and 2 decimal places\n const locale = CURRENCY_NUMBER_FORMAT_LOCALE[currency] ?? \"en\";\n const decimals = CURRENCY_SYMBOL_DECIMALS[currency] ?? 2;\n\n str = new Intl.NumberFormat(locale, {\n style: \"decimal\",\n minimumFractionDigits: decimals,\n // Preserve fractional parts, if there are fractions where there shouldn't be that's\n // a backend problem and we should not suppress it.\n maximumFractionDigits: 20,\n }).format(Math.abs(amount));\n\n // remove trailing .00 or ,00 or .000 or ,000\n str = str.replace(/(\\.|,)000?$/, \"\");\n\n // add currency symbol\n if (CURRENCY_SYMBOLS[currency]) {\n const symbol = CURRENCY_SYMBOLS[currency] ?? currency;\n const positioning = CURRENCY_SYMBOL_POSITION[currency] ?? \"$1\";\n str = positioning.replace(\"$\", symbol).replace(\"1\", str);\n } else {\n str = currency + \" \" + str;\n }\n\n // add negative sign if needed\n if (isNegative) {\n str = \"-\" + str;\n }\n\n return str;\n}\n","import { FieldProps } from \"./field\";\nimport {\n assert,\n formFieldId,\n formFieldName,\n formHasFieldOfType,\n usePrevious,\n} from \"../utils\";\nimport {\n useCallback,\n useLayoutEffect,\n useMemo,\n useRef,\n useState,\n} from \"preact/hooks\";\nimport { FunctionComponent } from \"preact\";\nimport { Dropdown, DropdownOption, DropdownSkeleton } from \"./dropdown\";\nimport { useChannel, useChannelComponentData } from \"./payment-channel\";\nimport { amountFormat } from \"../amount-format\";\nimport { useSdk, useSession } from \"./session-provider\";\nimport { InternalSetFieldTouchedEvent } from \"../private-event-types\";\nimport { BffInstallmentPlan } from \"../backend-types/payment-options\";\n\nexport const FieldInstallmentPlan: FunctionComponent<FieldProps> = (props) => {\n const { field, onChange } = props;\n\n const { t } = useSdk();\n const session = useSession();\n\n const id = formFieldId(field);\n const name = formFieldName(field);\n const hiddenFieldRef = useRef<HTMLInputElement>(null);\n\n const channel = useChannel();\n assert(channel);\n const hasCardsField = useMemo(() => {\n return formHasFieldOfType(channel.form, \"credit_card_number\");\n }, [channel.form]);\n\n const paymentOptions = useChannelComponentData()?.paymentOptions;\n const installmentPlans = paymentOptions?.options?.installment_plans;\n\n const [selectedItemKey, setSelectedItemKey] = useState<string | null>(null);\n\n const dropdownItems = useMemo(() => {\n const arr =\n installmentPlans?.map<DropdownOption>((plan) => ({\n title: t(`installment_plan.pay_in_installments`, {\n installments: plan.terms,\n amount: amountFormat(plan.installment_amount, session.currency),\n }),\n subtitle: plan.interest_rate,\n value: planKey(plan),\n })) ?? [];\n\n if (hasCardsField) {\n // the option to pay in full is shown if there is a card number field, because card payments need a way to opt out of installments.\n arr.unshift({\n title: t(`installment_plan.pay_in_full`, {\n amount: amountFormat(session.amount, session.currency),\n }),\n value: \"\",\n });\n }\n\n return arr;\n }, [hasCardsField, installmentPlans, session.amount, session.currency, t]);\n\n let selectedItemIndex = dropdownItems?.findIndex((item) => {\n return item.value === selectedItemKey;\n });\n if (selectedItemIndex === -1) {\n selectedItemIndex = 0;\n }\n\n const clearSelectedItem = useCallback(() => {\n setSelectedItemKey(null);\n if (hiddenFieldRef.current) {\n hiddenFieldRef.current.value = \"\";\n }\n }, []);\n\n const handleChange = useCallback(\n (option: DropdownOption) => {\n if (hiddenFieldRef.current) {\n const newPlan = installmentPlans?.find(\n (plan) => planKey(plan) === option.value,\n );\n if (newPlan) {\n if (newPlan.code) {\n // with plan code\n hiddenFieldRef.current.value = JSON.stringify([\n newPlan.terms,\n newPlan.interval,\n newPlan.code,\n ]);\n } else {\n // without plan code\n hiddenFieldRef.current.value = JSON.stringify([\n newPlan.terms,\n newPlan.interval,\n ]);\n }\n } else {\n hiddenFieldRef.current.value = \"\";\n }\n hiddenFieldRef.current?.dispatchEvent(\n new InternalSetFieldTouchedEvent(),\n );\n }\n setSelectedItemKey(option.value);\n onChange();\n },\n [installmentPlans, onChange],\n );\n\n useLayoutEffect(() => {\n // first render only, force select first option\n if (dropdownItems.length) handleChange(dropdownItems[0]);\n // eslint-disable-next-line react-hooks/exhaustive-deps\n }, []);\n\n const prevItems = usePrevious(dropdownItems);\n useLayoutEffect(() => {\n // if options change, and the selected code no longer exists, clear the field\n if (\n dropdownItems !== prevItems &&\n !installmentPlans?.some((plan) => planKey(plan) === selectedItemKey)\n ) {\n if (dropdownItems.length) {\n handleChange(dropdownItems[0]);\n } else {\n clearSelectedItem();\n }\n }\n }, [\n clearSelectedItem,\n dropdownItems,\n handleChange,\n installmentPlans,\n prevItems,\n selectedItemKey,\n ]);\n\n return (\n <>\n {paymentOptions ? (\n <Dropdown\n id={id}\n placeholder={field.placeholder}\n className={`xendit-text-14`}\n onChange={handleChange}\n options={dropdownItems}\n selectedIndex={selectedItemIndex}\n />\n ) : (\n <DropdownSkeleton id={id} />\n )}\n <input type=\"hidden\" name={name} ref={hiddenFieldRef} />\n </>\n );\n};\n\nfunction planKey(plan: BffInstallmentPlan) {\n return `${plan.terms}_${plan.interval}_${plan.code ?? \"\"}`;\n}\n","import { FunctionComponent } from \"preact\";\nimport { ChannelFormField } from \"../backend-types/channel\";\nimport { CountryField } from \"./field-country\";\nimport { DropdownField } from \"./field-dropdown\";\nimport { IframeField } from \"./field-iframe\";\nimport { PhoneNumberField } from \"./field-phone-number\";\nimport { ProvinceField } from \"./field-province\";\nimport { TextField } from \"./field-text\";\nimport { FieldInstallmentPlan } from \"./field-installment-plan\";\n\nexport interface FieldProps {\n field: ChannelFormField;\n onChange: () => void;\n className?: string;\n}\n\nconst Field: FunctionComponent<FieldProps> = (props) => {\n const { field, className } = props;\n\n function renderInner() {\n switch (field.type.name) {\n case \"credit_card_number\":\n case \"credit_card_expiry\":\n case \"credit_card_cvn\":\n return <IframeField {...props} />;\n case \"phone_number\":\n return <PhoneNumberField {...props} />;\n case \"text\":\n case \"email\":\n case \"postal_code\":\n return <TextField {...props} />;\n case \"dropdown\":\n return <DropdownField {...props} />;\n case \"installment_plan\":\n return <FieldInstallmentPlan {...props} />;\n case \"country\":\n return <CountryField {...props} />;\n case \"province\":\n return <ProvinceField {...props} />;\n }\n\n field.type satisfies never;\n throw new Error(\n `Unsupported field type: ${(field as ChannelFormField).type.name}`,\n );\n }\n\n return (\n <div\n className={`${className} xendit-channel-form-field xendit-form-field-span-${field.span}`}\n >\n {renderInner()}\n </div>\n );\n};\n\nexport default Field;\n","import { ChannelFormField } from \"./backend-types/channel\";\nimport en from \"./locale/en.json\";\nimport id from \"./locale/id.json\";\nimport th from \"./locale/th.json\";\nimport vi from \"./locale/vi.json\";\n\nconst localeMap: {\n en: typeof en.session;\n [locale: string]: Partial<typeof en.session>;\n} = {\n en: en.session,\n id: id.session,\n th: th.session,\n vi: vi.session,\n};\n\ntype InterpolationOptions = Record<string, string | number>;\n\n/**\n * Localization interface.\n *\n * ```\n * t(\"key\") -> Localize \"key\", falling back to \"key\"\n * t(\"key\", \"fallback\") -> Localize \"key\", falling back to \"fallback\"\n * t(\"key\", { var: value }) -> Localize \"key\" with interpolation, falling back to \"key\"\n * t(\"key\", \"fallback\", { var: value }) -> Localize \"key\" with interpolation, falling back to \"fallback\"\n * ```\n */\nexport interface TFunction {\n (key: keyof typeof en.session): string;\n (key: keyof typeof en.session, fallback: string): string;\n (key: keyof typeof en.session, options: InterpolationOptions): string;\n (\n key: keyof typeof en.session,\n fallback: string,\n options: InterpolationOptions,\n ): string;\n}\n\n/**\n * Generate a TFunction for a locale.\n */\nexport function createTFunction(locale: string): TFunction {\n const localeData = localeMap[locale];\n const tFn: TFunction = function (...args: unknown[]) {\n let key: keyof typeof en.session;\n let fallback: string | undefined;\n let options: InterpolationOptions = {};\n\n switch (args.length) {\n case 1:\n key = args[0] as keyof typeof en.session;\n break;\n case 2:\n if (typeof args[1] === \"string\") {\n key = args[0] as keyof typeof en.session;\n fallback = args[1];\n } else {\n key = args[0] as keyof typeof en.session;\n options = args[1] as InterpolationOptions;\n }\n break;\n case 3:\n key = args[0] as keyof typeof en.session;\n fallback = args[1] as string;\n options = args[2] as InterpolationOptions;\n break;\n default:\n throw new Error(\"Invalid arguments for t function\");\n }\n\n let template = localeData?.[key];\n if (template === undefined && fallback !== undefined) {\n template = fallback;\n }\n\n if (template) {\n return template.replace(/\\{\\{(\\w+)\\}\\}/g, (_, varName: string) => {\n return options[varName] ? String(options[varName]) : \"\";\n });\n } else {\n console.warn(`Missing localization for key: ${key} in locale: ${locale}`);\n return key;\n }\n };\n return tFn;\n}\n\n// An encapsulated localizable string\nexport type LocaleKey = {\n localeKey: keyof typeof en.session;\n};\n\n// An encapsulated already-localized string\nexport type LocalizedString = {\n value: string;\n};\n\n// Type guard function to check if errorCode is LocaleKey\nexport const isLocaleKey = (errorCode: unknown): errorCode is LocaleKey => {\n return (\n typeof errorCode === \"object\" &&\n errorCode !== null &&\n \"localeKey\" in errorCode\n );\n};\n\n// Get localized error message\nexport const getLocalizedErrorMessage = (\n t: TFunction,\n errorCode: LocaleKey | LocalizedString,\n field: ChannelFormField,\n): string | null => {\n if (!errorCode) return null;\n\n if (!isLocaleKey(errorCode)) {\n return errorCode.value;\n }\n\n // Get localized message with field name interpolation using i18n key directly\n return t(errorCode.localeKey, { field: field.label });\n};\n","import {\n BffChannel,\n ChannelFormField,\n ChannelProperties,\n ChannelPropertyPrimative,\n} from \"./backend-types/channel\";\nimport parsePhoneNumberFromString from \"libphonenumber-js/min\";\nimport { filterFormFields } from \"./components/channel-form\";\nimport { BffSessionType } from \"./backend-types/session\";\nimport { LocaleKey, LocalizedString } from \"./localization\";\nimport { ChannelComponentData } from \"./public-sdk\";\nimport { parseEncryptedFieldValue } from \"./utils\";\n\nexport type ValidationResult = {\n errorCode: LocaleKey | LocalizedString | undefined;\n};\n\nexport function validateEncryptedCardField(\n value: string,\n): LocaleKey | undefined {\n const parsed = parseEncryptedFieldValue(value);\n if (parsed.valid) {\n return undefined;\n }\n if (parsed.validationError) {\n return { localeKey: parsed.validationError as LocaleKey[\"localeKey\"] };\n }\n // unreachable\n throw new Error(\n \"Unexpected value in encrypted field, this is a bug, please contact support.\",\n );\n}\n\nexport const validateEmail = (value: string): LocaleKey | undefined => {\n // Allows letters, numbers, dots, underscores, hyphens before the @\n // Domain must be letters, numbers, hyphens (no leading/trailing hyphen)\n // TLD must be at least 2 letters\n const emailRegex =\n /^[a-zA-Z0-9._%+-]+@[a-zA-Z0-9-]+(\\.[a-zA-Z0-9-]+)*\\.[A-Za-z]{2,}$/;\n\n if (!emailRegex.test(value)) {\n return {\n localeKey: \"validation.generic_invalid\",\n };\n }\n};\n\nexport const validatePhoneNumber = (value: string): LocaleKey | undefined => {\n const phone = parsePhoneNumberFromString(value);\n if (!phone || !phone.isValid()) {\n return {\n localeKey: \"validation.generic_invalid\",\n };\n }\n};\n\nexport const validatePostalCode = (value: string): LocaleKey | undefined => {\n // Basic validation: must contain only letters, numbers, spaces, or hyphens\n if (!/^(?![-\\s]+)[A-Za-z0-9\\s-]+$/.test(value)) {\n return {\n localeKey: \"validation.generic_invalid\",\n };\n }\n};\n\nexport const validateText = (\n input: ChannelFormField & {\n type: { name: \"text\" };\n },\n value: string,\n): LocaleKey | LocalizedString | undefined => {\n if (Array.isArray(input.type.regex_validators)) {\n for (const pattern of input.type.regex_validators) {\n const regex = new RegExp(sanitizeRegex(pattern.regex));\n if (!regex.test(value)) {\n return {\n value: pattern.message,\n };\n }\n }\n }\n\n if (\n input.type.min_length !== undefined &&\n value.length < input.type.min_length\n ) {\n return { localeKey: \"validation.text_too_short\" };\n } else if (value.length > input.type.max_length) {\n return { localeKey: \"validation.text_too_long\" };\n }\n};\n\nfunction sanitizeRegex(pattern: string): string {\n // Remove leading and trailing slashes if present\n if (pattern.startsWith(\"/\") && pattern.endsWith(\"/\")) {\n return pattern.slice(1, -1);\n }\n return pattern;\n}\n\nexport function validate(\n input: ChannelFormField,\n value: string,\n): LocaleKey | LocalizedString | undefined {\n if (value.length === 0) {\n if (input.required) {\n return { localeKey: \"validation.required\" };\n } else {\n // ok, empty string and not required\n return undefined;\n }\n }\n\n switch (input.type.name) {\n case \"credit_card_number\":\n case \"credit_card_expiry\":\n case \"credit_card_cvn\": {\n return validateEncryptedCardField(value);\n }\n case \"phone_number\":\n return validatePhoneNumber(value);\n case \"email\":\n return validateEmail(value);\n case \"postal_code\":\n return validatePostalCode(value);\n case \"text\": {\n return validateText(\n input as ChannelFormField & {\n type: { name: \"text\" };\n },\n value,\n );\n }\n case \"country\":\n case \"province\":\n case \"installment_plan\":\n case \"dropdown\": {\n // no validation required for now\n return undefined;\n }\n\n default: {\n input.type satisfies never;\n throw new Error(\n `Unsupported input type: ${(input as ChannelFormField).type.name}; this is a bug, please contact support.`,\n );\n }\n }\n}\n\nexport function channelPropertiesAreValid(\n sessionType: BffSessionType,\n channel: BffChannel,\n channelProperties: ChannelProperties | null,\n channelComponentData: ChannelComponentData | null,\n): boolean {\n if (!channelProperties) channelProperties = {};\n\n for (const field of filterFormFields(\n sessionType,\n channel.form,\n channelProperties,\n channelComponentData,\n )) {\n if (channelPropertyFieldValidate(field, channelProperties)) {\n return false;\n }\n }\n\n return true;\n}\n\n// Return a validation error message if the channel property is invalid\nexport function channelPropertyFieldValidate(\n field: ChannelFormField,\n channelProperties: ChannelProperties,\n) {\n const channelPropertyKeys = Array.isArray(field.channel_property)\n ? field.channel_property\n : [field.channel_property];\n for (const key of channelPropertyKeys) {\n let value = getChannelPropertyValue(channelProperties, key);\n if (value === undefined) {\n value = \"\";\n }\n if (typeof value !== \"string\") {\n // validation for non-string values not supported\n continue;\n }\n const error = validate(field, value);\n if (error) {\n return error;\n }\n }\n}\n\nexport function getChannelPropertyValue(\n channelProperties: ChannelProperties,\n key: string,\n): ChannelPropertyPrimative | ChannelPropertyPrimative[] | undefined {\n const parts = key.split(\".\");\n const value = channelProperties[parts[0]];\n if (value === undefined) {\n return undefined;\n }\n if (typeof value !== \"object\" || Array.isArray(value)) {\n if (parts.length !== 1) {\n throw new Error(\n `Attempted to read channel property \"${key}\" expecting an object but found a primitive value; this is a bug, please contact support.`,\n );\n }\n return value;\n } else {\n return getChannelPropertyValue(value, parts.slice(1).join(\".\"));\n }\n}\n","import { ComponentChildren, createContext, FunctionComponent } from \"preact\";\nimport { useContext, useLayoutEffect, useRef, useState } from \"preact/hooks\";\nimport { Scenarios } from \"../data/simulation-scenarios\";\nimport { Dropdown } from \"./dropdown\";\nimport { useSdk } from \"./session-provider\";\n\ninterface Props {\n scenarios: Scenarios;\n onSelect: (scenarioName: string) => void;\n children: ComponentChildren;\n}\n\nconst FormSimulationHelperContext = createContext<{\n open: boolean;\n setOpen: (open: boolean) => void;\n scenarios: Scenarios;\n onSelect: (scenarioName: string) => void;\n} | null>(null);\n\nexport const FormSimulationHelper: FunctionComponent<Props> = ({\n scenarios,\n onSelect,\n children,\n}) => {\n const [open, setOpen] = useState(false);\n const rootRef = useRef<HTMLDivElement>(null);\n\n useLayoutEffect(() => {\n if (!open) return;\n const onMouseDown = (e: MouseEvent) => {\n const root = rootRef.current;\n if (!root) return;\n if (!root.contains(e.target as Node)) setOpen(false);\n };\n document.addEventListener(\"mousedown\", onMouseDown);\n return () => document.removeEventListener(\"mousedown\", onMouseDown);\n }, [open]);\n\n return (\n <div ref={rootRef}>\n <FormSimulationHelperContext.Provider\n value={{ open, setOpen, scenarios, onSelect }}\n >\n {children}\n </FormSimulationHelperContext.Provider>\n </div>\n );\n};\n\nexport const FormSimulationRoot: FunctionComponent<{\n children: ComponentChildren;\n}> = ({ children }) => {\n return <div className=\"xendit-form-simulation-root\">{children}</div>;\n};\n\nexport const FormSimulationTrigger: FunctionComponent<{\n children: ComponentChildren;\n}> = ({ children }) => {\n const { open, setOpen } = useContext(FormSimulationHelperContext) || {};\n\n return (\n <button\n type=\"button\"\n className=\"xendit-form-simulation-trigger\"\n onClick={() => setOpen?.(!open)}\n >\n {children}\n </button>\n );\n};\n\nexport const FormSimulationHelperPopover: FunctionComponent = () => {\n const { open, setOpen, scenarios, onSelect } =\n useContext(FormSimulationHelperContext) || {};\n const { t } = useSdk();\n\n if (!open || !scenarios) {\n return null;\n }\n\n return (\n <div className=\"xendit-form-simulation-popover\">\n <div className=\"xendit-text-12 xendit-text-semibold\">\n {t(\"simulation.simulate_test_scenario\")}\n </div>\n <Dropdown\n onChange={(option) => {\n const selectedScenario = scenarios.scenarios.find(\n (scenario) => scenario.description === option.value,\n );\n if (selectedScenario) {\n onSelect?.(selectedScenario.name);\n setOpen?.(false);\n }\n }}\n placeholder={t(\"simulation.select_scenario\")}\n options={scenarios.scenarios.map((scenario) => ({\n title: scenario.description,\n value: scenario.description,\n leadingAsset: (\n <img\n src={scenario.imageUrl}\n className=\"xendit-form-simulation-scenario-icon\"\n />\n ),\n }))}\n />\n {scenarios?.docsLink ? (\n <div className=\"xendit-text-14\">\n {t(\"simulation.want_to_test_all_scenarios\")}{\" \"}\n <a\n href={scenarios.docsLink}\n target=\"_blank\"\n rel=\"noopener noreferrer\"\n className=\"xendit-text-link\"\n >\n {t(\"simulation.see_all_scenarios\")}\n </a>\n </div>\n ) : null}\n </div>\n );\n};\n","import { useState, useLayoutEffect, useRef, useContext } from \"preact/hooks\";\nimport { ChannelFormField, ChannelProperties } from \"../backend-types/channel\";\nimport Field from \"./field\";\nimport classNames from \"classnames\";\nimport { formFieldId, formFieldName } from \"../utils\";\nimport { useSdk } from \"./session-provider\";\nimport { getLocalizedErrorMessage } from \"../localization\";\nimport { channelPropertyFieldValidate } from \"../validation\";\nimport { InternalSetFieldTouchedEvent } from \"../private-event-types\";\nimport { Scenarios } from \"../data/simulation-scenarios\";\nimport {\n FormSimulationHelper,\n FormSimulationHelperPopover,\n FormSimulationRoot,\n FormSimulationTrigger,\n} from \"./form-simulation-helper\";\nimport {\n IframeRegistryContext,\n IframeRegistryProvider,\n} from \"./iframe-registry\";\nimport { FunctionComponent } from \"preact\";\n\nconst CSS_CLASSES = {\n BOTTOM_LEFT_0: \"field-radius-bl-0\",\n BOTTOM_RIGHT_0: \"field-radius-br-0\",\n TOP_LEFT_0: \"field-radius-tl-0\",\n TOP_RIGHT_0: \"field-radius-tr-0\",\n COLLAPSE_RIGHT: \"field-collapse-r\",\n COLLAPSE_LEFT: \"field-collapse-l\",\n COLLAPSE_TOP: \"field-collapse-t\",\n COLLAPSE_BOTTOM: \"field-collapse-b\",\n} as const;\n\ninterface Props {\n fieldGroup: ChannelFormField[];\n groupIndex: number;\n handleFieldChanged: () => void;\n channelProperties: ChannelProperties | null;\n simulationScenarios?: Scenarios | null;\n}\n\nconst FieldGroup = ({\n fieldGroup,\n groupIndex,\n handleFieldChanged,\n channelProperties,\n simulationScenarios,\n}: Props) => {\n const { t } = useSdk();\n\n const groupContainerRef = useRef<HTMLDivElement>(null);\n\n const [touchedFields, setTouchedFields] = useState<Record<string, boolean>>(\n {},\n );\n\n const fieldGroupSpans = fieldGroup.map((f) => f.span);\n const groupRowCount = Math.ceil(\n fieldGroup.reduce((agg, field) => agg + field.span, 0) / 2,\n );\n\n const calculateFieldPosition = (index: number) => {\n const fieldPositionBySpan = fieldGroupSpans\n .slice(0, index)\n .reduce((agg, span) => agg + span, 0);\n const fieldRow = index === 0 ? 0 : Math.floor(fieldPositionBySpan / 2);\n const fieldColumn = fieldPositionBySpan % 2;\n const isLastRow = fieldRow === groupRowCount - 1;\n\n return { fieldPositionBySpan, fieldRow, fieldColumn, isLastRow };\n };\n\n const getFieldClassNames = (\n field: ChannelFormField,\n index: number,\n position: ReturnType<typeof calculateFieldPosition>,\n ) => {\n const { fieldPositionBySpan, fieldRow, fieldColumn, isLastRow } = position;\n return classNames({\n [CSS_CLASSES.BOTTOM_LEFT_0]:\n groupRowCount > fieldRow + 1 || fieldPositionBySpan % 2 === 1,\n [CSS_CLASSES.BOTTOM_RIGHT_0]: !!fieldGroupSpans[index + 1],\n [CSS_CLASSES.TOP_LEFT_0]: index > 0,\n [CSS_CLASSES.TOP_RIGHT_0]:\n !(fieldRow === 0 && fieldColumn === 1) &&\n !(fieldRow === 0 && fieldColumn === 0 && field.span === 2),\n [CSS_CLASSES.COLLAPSE_RIGHT]: field.span === 1 && fieldColumn === 0,\n [CSS_CLASSES.COLLAPSE_LEFT]: field.span === 1 && fieldColumn === 1,\n [CSS_CLASSES.COLLAPSE_TOP]: fieldPositionBySpan >= 2,\n [CSS_CLASSES.COLLAPSE_BOTTOM]: !isLastRow,\n });\n };\n\n useLayoutEffect(() => {\n const containerElement = groupContainerRef.current;\n if (!containerElement) return;\n function listener(event: InternalSetFieldTouchedEvent) {\n // when a field is touched, add it to touched state\n const name = (event.target as HTMLInputElement).name;\n setTouchedFields((prev) => ({\n ...prev,\n [name]: true,\n }));\n }\n containerElement.addEventListener(\n InternalSetFieldTouchedEvent.type,\n listener,\n );\n return () => {\n containerElement.removeEventListener(\n InternalSetFieldTouchedEvent.type,\n listener,\n );\n };\n }, []);\n\n const renderError = () => {\n for (const field of fieldGroup) {\n if (!touchedFields[formFieldName(field)]) {\n // field not touched yet, skip validation\n // (this prevents showing validation errors too eagerly while the user is typing)\n continue;\n }\n\n const err = channelPropertyFieldValidate(field, channelProperties ?? {});\n if (!err) {\n // ok, no error\n continue;\n }\n\n // render first error and ignore the rest\n return (\n <span className=\"xendit-error-message xendit-text-12\">\n {getLocalizedErrorMessage(t, err, field)}\n </span>\n );\n }\n return null;\n };\n\n const error = renderError();\n\n return (\n <IframeRegistryProvider>\n <div className=\"xendit-channel-form-field-group\">\n <div className=\"xendit-channel-form-field-group-label-container\">\n <label\n htmlFor={formFieldId(fieldGroup[0])}\n className=\"xendit-text-14\"\n >\n {fieldGroup[0].group_label ?? fieldGroup[0].label ?? \"\"}\n </label>\n {simulationScenarios ? (\n <FormSimulationHelperWrapper\n simulationScenarios={simulationScenarios}\n fieldGroup={fieldGroup}\n />\n ) : null}\n </div>\n <div\n ref={groupContainerRef}\n key={groupIndex}\n className={`xendit-form-field-group ${error ? \"invalid\" : \"\"}`}\n >\n {fieldGroup.map((field, index) => {\n const position = calculateFieldPosition(index);\n const className = getFieldClassNames(field, index, position);\n\n return (\n <Field\n className={className}\n key={index}\n field={field}\n onChange={handleFieldChanged}\n />\n );\n })}\n </div>\n {error}\n </div>\n </IframeRegistryProvider>\n );\n};\n\nconst FormSimulationHelperWrapper: FunctionComponent<{\n simulationScenarios: Scenarios;\n fieldGroup: ChannelFormField[];\n}> = ({ simulationScenarios, fieldGroup }) => {\n const iframeRegistry = useContext(IframeRegistryContext);\n const { t } = useSdk();\n\n return (\n <FormSimulationHelper\n scenarios={simulationScenarios}\n onSelect={(scenarioName) => {\n const scenario = simulationScenarios.scenarios.find(\n (s) => s.name === scenarioName,\n );\n if (!scenario?.values) return;\n\n // when a scenario is selected, set the values of the scenario to the fields\n for (const [fieldName, value] of Object.entries(scenario.values)) {\n const field = fieldGroup.find((f) => formFieldName(f) === fieldName);\n if (field) {\n if (\n field.type.name === \"credit_card_number\" ||\n field.type.name === \"credit_card_expiry\" ||\n field.type.name === \"credit_card_cvn\"\n ) {\n iframeRegistry?.postMessageToIframe(fieldName, {\n type: \"xendit-iframe-populate-for-simulation\",\n scenario: value,\n });\n }\n\n // TODO handle non-iframe fields if needed\n }\n }\n }}\n >\n <FormSimulationRoot>\n <FormSimulationTrigger>\n <div className=\"xendit-text-12 xendit-text-semibold xendit-text-link\">\n {t(\"simulation.simulate_scenario\")}\n </div>\n </FormSimulationTrigger>\n <FormSimulationHelperPopover />\n </FormSimulationRoot>\n </FormSimulationHelper>\n );\n};\n\nexport default FieldGroup;\n","import{Component as n,createElement as t,options as e,toChildArray as r,Fragment as u,render as o,hydrate as i,createContext as l,createRef as c,cloneElement as f}from\"preact\";export{Component,Fragment,createContext,createElement,createRef}from\"preact\";import{useState as a,useLayoutEffect as s,useEffect as h,useCallback as v,useContext as d,useDebugValue as m,useId as p,useImperativeHandle as y,useMemo as _,useReducer as b,useRef as S}from\"preact/hooks\";export*from\"preact/hooks\";function g(n,t){for(var e in t)n[e]=t[e];return n}function E(n,t){for(var e in n)if(\"__source\"!==e&&!(e in t))return!0;for(var r in t)if(\"__source\"!==r&&n[r]!==t[r])return!0;return!1}function C(n,t){var e=t(),r=a({t:{__:e,u:t}}),u=r[0].t,o=r[1];return s(function(){u.__=e,u.u=t,R(u)&&o({t:u})},[n,e,t]),h(function(){return R(u)&&o({t:u}),n(function(){R(u)&&o({t:u})})},[n]),e}function R(n){try{return!((t=n.__)===(e=n.u())&&(0!==t||1/t==1/e)||t!=t&&e!=e)}catch(n){return!0}var t,e}function x(n){n()}function w(n){return n}function k(){return[!1,x]}var I=s;function N(n,t){this.props=n,this.context=t}function M(n,e){function r(n){var t=this.props.ref,r=t==n.ref;return!r&&t&&(t.call?t(null):t.current=null),e?!e(this.props,n)||!r:E(this.props,n)}function u(e){return this.shouldComponentUpdate=r,t(n,e)}return u.displayName=\"Memo(\"+(n.displayName||n.name)+\")\",u.prototype.isReactComponent=!0,u.__f=!0,u.type=n,u}(N.prototype=new n).isPureReactComponent=!0,N.prototype.shouldComponentUpdate=function(n,t){return E(this.props,n)||E(this.state,t)};var T=e.__b;e.__b=function(n){n.type&&n.type.__f&&n.ref&&(n.props.ref=n.ref,n.ref=null),T&&T(n)};var A=\"undefined\"!=typeof Symbol&&Symbol.for&&Symbol.for(\"react.forward_ref\")||3911;function D(n){function t(t){var e=g({},t);return delete e.ref,n(e,t.ref||null)}return t.$$typeof=A,t.render=n,t.prototype.isReactComponent=t.__f=!0,t.displayName=\"ForwardRef(\"+(n.displayName||n.name)+\")\",t}var L=function(n,t){return null==n?null:r(r(n).map(t))},O={map:L,forEach:L,count:function(n){return n?r(n).length:0},only:function(n){var t=r(n);if(1!==t.length)throw\"Children.only\";return t[0]},toArray:r},U=e.__e;e.__e=function(n,t,e,r){if(n.then)for(var u,o=t;o=o.__;)if((u=o.__c)&&u.__c)return null==t.__e&&(t.__e=e.__e,t.__k=e.__k),u.__c(n,t);U(n,t,e,r)};var F=e.unmount;function V(n,t,e){return n&&(n.__c&&n.__c.__H&&(n.__c.__H.__.forEach(function(n){\"function\"==typeof n.__c&&n.__c()}),n.__c.__H=null),null!=(n=g({},n)).__c&&(n.__c.__P===e&&(n.__c.__P=t),n.__c.__e=!0,n.__c=null),n.__k=n.__k&&n.__k.map(function(n){return V(n,t,e)})),n}function W(n,t,e){return n&&e&&(n.__v=null,n.__k=n.__k&&n.__k.map(function(n){return W(n,t,e)}),n.__c&&n.__c.__P===t&&(n.__e&&e.appendChild(n.__e),n.__c.__e=!0,n.__c.__P=e)),n}function P(){this.__u=0,this.o=null,this.__b=null}function j(n){if(!n.__)return null;var t=n.__.__c;return t&&t.__a&&t.__a(n)}function z(n){var e,r,u,o=null;function i(i){if(e||(e=n()).then(function(n){n&&(o=n.default||n),u=!0},function(n){r=n,u=!0}),r)throw r;if(!u)throw e;return o?t(o,i):null}return i.displayName=\"Lazy\",i.__f=!0,i}function B(){this.i=null,this.l=null}e.unmount=function(n){var t=n.__c;t&&(t.__z=!0),t&&t.__R&&t.__R(),t&&32&n.__u&&(n.type=null),F&&F(n)},(P.prototype=new n).__c=function(n,t){var e=t.__c,r=this;null==r.o&&(r.o=[]),r.o.push(e);var u=j(r.__v),o=!1,i=function(){o||r.__z||(o=!0,e.__R=null,u?u(c):c())};e.__R=i;var l=e.__P;e.__P=null;var c=function(){if(!--r.__u){if(r.state.__a){var n=r.state.__a;r.__v.__k[0]=W(n,n.__c.__P,n.__c.__O)}var t;for(r.setState({__a:r.__b=null});t=r.o.pop();)t.__P=l,t.forceUpdate()}};r.__u++||32&t.__u||r.setState({__a:r.__b=r.__v.__k[0]}),n.then(i,i)},P.prototype.componentWillUnmount=function(){this.o=[]},P.prototype.render=function(n,e){if(this.__b){if(this.__v.__k){var r=document.createElement(\"div\"),o=this.__v.__k[0].__c;this.__v.__k[0]=V(this.__b,r,o.__O=o.__P)}this.__b=null}var i=e.__a&&t(u,null,n.fallback);return i&&(i.__u&=-33),[t(u,null,e.__a?null:n.children),i]};var H=function(n,t,e){if(++e[1]===e[0]&&n.l.delete(t),n.props.revealOrder&&(\"t\"!==n.props.revealOrder[0]||!n.l.size))for(e=n.i;e;){for(;e.length>3;)e.pop()();if(e[1]<e[0])break;n.i=e=e[2]}};function Z(n){return this.getChildContext=function(){return n.context},n.children}function Y(n){var e=this,r=n.h;if(e.componentWillUnmount=function(){o(null,e.v),e.v=null,e.h=null},e.h&&e.h!==r&&e.componentWillUnmount(),!e.v){for(var u=e.__v;null!==u&&!u.__m&&null!==u.__;)u=u.__;e.h=r,e.v={nodeType:1,parentNode:r,childNodes:[],__k:{__m:u.__m},contains:function(){return!0},namespaceURI:r.namespaceURI,insertBefore:function(n,t){this.childNodes.push(n),e.h.insertBefore(n,t)},removeChild:function(n){this.childNodes.splice(this.childNodes.indexOf(n)>>>1,1),e.h.removeChild(n)}}}o(t(Z,{context:e.context},n.__v),e.v)}function $(n,e){var r=t(Y,{__v:n,h:e});return r.containerInfo=e,r}(B.prototype=new n).__a=function(n){var t=this,e=j(t.__v),r=t.l.get(n);return r[0]++,function(u){var o=function(){t.props.revealOrder?(r.push(u),H(t,n,r)):u()};e?e(o):o()}},B.prototype.render=function(n){this.i=null,this.l=new Map;var t=r(n.children);n.revealOrder&&\"b\"===n.revealOrder[0]&&t.reverse();for(var e=t.length;e--;)this.l.set(t[e],this.i=[1,0,this.i]);return n.children},B.prototype.componentDidUpdate=B.prototype.componentDidMount=function(){var n=this;this.l.forEach(function(t,e){H(n,e,t)})};var q=\"undefined\"!=typeof Symbol&&Symbol.for&&Symbol.for(\"react.element\")||60103,G=/^(?:accent|alignment|arabic|baseline|cap|clip(?!PathU)|color|dominant|fill|flood|font|glyph(?!R)|horiz|image(!S)|letter|lighting|marker(?!H|W|U)|overline|paint|pointer|shape|stop|strikethrough|stroke|text(?!L)|transform|underline|unicode|units|v|vector|vert|word|writing|x(?!C))[A-Z]/,J=/^on(Ani|Tra|Tou|BeforeInp|Compo)/,K=/[A-Z0-9]/g,Q=\"undefined\"!=typeof document,X=function(n){return(\"undefined\"!=typeof Symbol&&\"symbol\"==typeof Symbol()?/fil|che|rad/:/fil|che|ra/).test(n)};function nn(n,t,e){return null==t.__k&&(t.textContent=\"\"),o(n,t),\"function\"==typeof e&&e(),n?n.__c:null}function tn(n,t,e){return i(n,t),\"function\"==typeof e&&e(),n?n.__c:null}n.prototype.isReactComponent={},[\"componentWillMount\",\"componentWillReceiveProps\",\"componentWillUpdate\"].forEach(function(t){Object.defineProperty(n.prototype,t,{configurable:!0,get:function(){return this[\"UNSAFE_\"+t]},set:function(n){Object.defineProperty(this,t,{configurable:!0,writable:!0,value:n})}})});var en=e.event;function rn(){}function un(){return this.cancelBubble}function on(){return this.defaultPrevented}e.event=function(n){return en&&(n=en(n)),n.persist=rn,n.isPropagationStopped=un,n.isDefaultPrevented=on,n.nativeEvent=n};var ln,cn={enumerable:!1,configurable:!0,get:function(){return this.class}},fn=e.vnode;e.vnode=function(n){\"string\"==typeof n.type&&function(n){var t=n.props,e=n.type,u={},o=-1===e.indexOf(\"-\");for(var i in t){var l=t[i];if(!(\"value\"===i&&\"defaultValue\"in t&&null==l||Q&&\"children\"===i&&\"noscript\"===e||\"class\"===i||\"className\"===i)){var c=i.toLowerCase();\"defaultValue\"===i&&\"value\"in t&&null==t.value?i=\"value\":\"download\"===i&&!0===l?l=\"\":\"translate\"===c&&\"no\"===l?l=!1:\"o\"===c[0]&&\"n\"===c[1]?\"ondoubleclick\"===c?i=\"ondblclick\":\"onchange\"!==c||\"input\"!==e&&\"textarea\"!==e||X(t.type)?\"onfocus\"===c?i=\"onfocusin\":\"onblur\"===c?i=\"onfocusout\":J.test(i)&&(i=c):c=i=\"oninput\":o&&G.test(i)?i=i.replace(K,\"-$&\").toLowerCase():null===l&&(l=void 0),\"oninput\"===c&&u[i=c]&&(i=\"oninputCapture\"),u[i]=l}}\"select\"==e&&u.multiple&&Array.isArray(u.value)&&(u.value=r(t.children).forEach(function(n){n.props.selected=-1!=u.value.indexOf(n.props.value)})),\"select\"==e&&null!=u.defaultValue&&(u.value=r(t.children).forEach(function(n){n.props.selected=u.multiple?-1!=u.defaultValue.indexOf(n.props.value):u.defaultValue==n.props.value})),t.class&&!t.className?(u.class=t.class,Object.defineProperty(u,\"className\",cn)):t.className&&(u.class=u.className=t.className),n.props=u}(n),n.$$typeof=q,fn&&fn(n)};var an=e.__r;e.__r=function(n){an&&an(n),ln=n.__c};var sn=e.diffed;e.diffed=function(n){sn&&sn(n);var t=n.props,e=n.__e;null!=e&&\"textarea\"===n.type&&\"value\"in t&&t.value!==e.value&&(e.value=null==t.value?\"\":t.value),ln=null};var hn={ReactCurrentDispatcher:{current:{readContext:function(n){return ln.__n[n.__c].props.value},useCallback:v,useContext:d,useDebugValue:m,useDeferredValue:w,useEffect:h,useId:p,useImperativeHandle:y,useInsertionEffect:I,useLayoutEffect:s,useMemo:_,useReducer:b,useRef:S,useState:a,useSyncExternalStore:C,useTransition:k}}},vn=\"18.3.1\";function dn(n){return t.bind(null,n)}function mn(n){return!!n&&n.$$typeof===q}function pn(n){return mn(n)&&n.type===u}function yn(n){return!!n&&\"string\"==typeof n.displayName&&n.displayName.startsWith(\"Memo(\")}function _n(n){return mn(n)?f.apply(null,arguments):n}function bn(n){return!!n.__k&&(o(null,n),!0)}function Sn(n){return n&&(n.base||1===n.nodeType&&n)||null}var gn=function(n,t){return n(t)},En=function(n,t){return n(t)},Cn=u,Rn=mn,xn={useState:a,useId:p,useReducer:b,useEffect:h,useLayoutEffect:s,useInsertionEffect:I,useTransition:k,useDeferredValue:w,useSyncExternalStore:C,startTransition:x,useRef:S,useImperativeHandle:y,useMemo:_,useCallback:v,useContext:d,useDebugValue:m,version:\"18.3.1\",Children:O,render:nn,hydrate:tn,unmountComponentAtNode:bn,createPortal:$,createElement:t,createContext:l,createFactory:dn,cloneElement:_n,createRef:c,Fragment:u,isValidElement:mn,isElement:Rn,isFragment:pn,isMemo:yn,findDOMNode:Sn,Component:n,PureComponent:N,memo:M,forwardRef:D,flushSync:En,unstable_batchedUpdates:gn,StrictMode:Cn,Suspense:P,SuspenseList:B,lazy:z,__SECRET_INTERNALS_DO_NOT_USE_OR_YOU_WILL_BE_FIRED:hn};export{O as Children,N as PureComponent,Cn as StrictMode,P as Suspense,B as SuspenseList,hn as __SECRET_INTERNALS_DO_NOT_USE_OR_YOU_WILL_BE_FIRED,_n as cloneElement,dn as createFactory,$ as createPortal,xn as default,Sn as findDOMNode,En as flushSync,D as forwardRef,tn as hydrate,Rn as isElement,pn as isFragment,yn as isMemo,mn as isValidElement,z as lazy,M as memo,nn as render,x as startTransition,bn as unmountComponentAtNode,gn as unstable_batchedUpdates,w as useDeferredValue,I as useInsertionEffect,C as useSyncExternalStore,k as useTransition,vn as version};\n//# sourceMappingURL=compat.module.js.map\n","import { IframePopulateForSimulationEvent } from \"../../../shared/types\";\n\nexport type Scenarios = {\n scenarios: {\n name: string;\n imageUrl?: string;\n description: string;\n values?: {\n [key: string]: string | IframePopulateForSimulationEvent[\"type\"];\n };\n }[];\n docsLink?: string;\n};\n\nexport const CARDS_SCENARIOS: Scenarios = {\n scenarios: [\n {\n imageUrl: \"https://assets.xendit.co/payment-session/logos/VISA.svg\",\n description:\n \"3DS Challenge, authentication is successful if OTP is correct.\",\n name: \"3_ds_challenge_authentication_is_successful_if_otp_is_correct_visa\",\n values: {\n \"card_details.card_number\":\n \"3_ds_challenge_authentication_is_successful_if_otp_is_correct_visa\",\n \"card_details.expiry_month__card_details.expiry_year\":\n \"3_ds_challenge_authentication_is_successful_if_otp_is_correct_visa\",\n \"card_details.cvn\":\n \"3_ds_challenge_authentication_is_successful_if_otp_is_correct_visa\",\n },\n },\n {\n imageUrl: \"https://assets.xendit.co/payment-session/logos/VISA.svg\",\n description: \"3DS Frictionless, authentication is successful.\",\n name: \"3_ds_frictionless_authentication_is_successful_visa\",\n values: {\n \"card_details.card_number\":\n \"3_ds_frictionless_authentication_is_successful_visa\",\n \"card_details.expiry_month__card_details.expiry_year\":\n \"3_ds_frictionless_authentication_is_successful_visa\",\n \"card_details.cvn\":\n \"3_ds_frictionless_authentication_is_successful_visa\",\n },\n },\n {\n imageUrl: \"https://assets.xendit.co/payment-session/logos/MASTERCARD.svg\",\n description:\n \"3DS Challenge, authentication is successful if OTP is correct.\",\n name: \"3_ds_challenge_authentication_is_successful_if_otp_is_correct_mastercard\",\n values: {\n \"card_details.card_number\":\n \"3_ds_challenge_authentication_is_successful_if_otp_is_correct_mastercard\",\n \"card_details.expiry_month__card_details.expiry_year\":\n \"3_ds_challenge_authentication_is_successful_if_otp_is_correct_mastercard\",\n \"card_details.cvn\":\n \"3_ds_challenge_authentication_is_successful_if_otp_is_correct_mastercard\",\n },\n },\n {\n imageUrl: \"https://assets.xendit.co/payment-session/logos/MASTERCARD.svg\",\n description: \"3DS Frictionless, authentication is successful.\",\n name: \"3_ds_frictionless_authentication_is_successful_mastercard\",\n values: {\n \"card_details.card_number\":\n \"3_ds_frictionless_authentication_is_successful_mastercard\",\n \"card_details.expiry_month__card_details.expiry_year\":\n \"3_ds_frictionless_authentication_is_successful_mastercard\",\n \"card_details.cvn\":\n \"3_ds_frictionless_authentication_is_successful_mastercard\",\n },\n },\n {\n imageUrl: \"https://assets.xendit.co/payment-session/logos/VISA.svg\",\n description: \"3DS Challenge, with list of simulated options.\",\n name: \"3_ds_challenge_with_list_of_simulated_options_visa\",\n values: {\n \"card_details.card_number\":\n \"3_ds_challenge_with_list_of_simulated_options_visa\",\n \"card_details.expiry_month__card_details.expiry_year\":\n \"3_ds_challenge_with_list_of_simulated_options_visa\",\n \"card_details.cvn\":\n \"3_ds_challenge_with_list_of_simulated_options_visa\",\n },\n },\n {\n imageUrl: \"https://assets.xendit.co/payment-session/logos/VISA.svg\",\n description: \"3DS Frictionless, authentication is successful.\",\n name: \"3_ds_frictionless_authentication_is_successful_visa2\",\n values: {\n \"card_details.card_number\":\n \"3_ds_frictionless_authentication_is_successful_visa2\",\n \"card_details.expiry_month__card_details.expiry_year\":\n \"3_ds_frictionless_authentication_is_successful_visa2\",\n \"card_details.cvn\":\n \"3_ds_frictionless_authentication_is_successful_visa2\",\n },\n },\n {\n imageUrl: \"https://assets.xendit.co/payment-session/logos/MASTERCARD.svg\",\n description: \"3DS Challenge, with list of simulated options.\",\n name: \"3_ds_challenge_with_list_of_simulated_options_mastercard\",\n values: {\n \"card_details.card_number\":\n \"3_ds_challenge_with_list_of_simulated_options_mastercard\",\n \"card_details.expiry_month__card_details.expiry_year\":\n \"3_ds_challenge_with_list_of_simulated_options_mastercard\",\n \"card_details.cvn\":\n \"3_ds_challenge_with_list_of_simulated_options_mastercard\",\n },\n },\n {\n imageUrl: \"https://assets.xendit.co/payment-session/logos/MASTERCARD.svg\",\n description: \"3DS Frictionless, authentication is successful.\",\n name: \"3_ds_frictionless_authentication_is_successful_mastercard2\",\n values: {\n \"card_details.card_number\":\n \"3_ds_frictionless_authentication_is_successful_mastercard2\",\n \"card_details.expiry_month__card_details.expiry_year\":\n \"3_ds_frictionless_authentication_is_successful_mastercard2\",\n \"card_details.cvn\":\n \"3_ds_frictionless_authentication_is_successful_mastercard2\",\n },\n },\n {\n imageUrl: \"https://assets.xendit.co/payment-session/logos/VISA.svg\",\n description:\n \"3DS Challenge, authentication is successful if OTP is correct. For frictionless flow, use amount < THB 20.\",\n name: \"3_ds_challenge_authentication_is_successful_if_otp_is_correct_for_frictionless_flow_use_amount_thb_20_visa\",\n values: {\n \"card_details.card_number\":\n \"3_ds_challenge_authentication_is_successful_if_otp_is_correct_for_frictionless_flow_use_amount_thb_20_visa\",\n \"card_details.expiry_month__card_details.expiry_year\":\n \"3_ds_challenge_authentication_is_successful_if_otp_is_correct_for_frictionless_flow_use_amount_thb_20_visa\",\n \"card_details.cvn\":\n \"3_ds_challenge_authentication_is_successful_if_otp_is_correct_for_frictionless_flow_use_amount_thb_20_visa\",\n },\n },\n {\n imageUrl: \"https://assets.xendit.co/payment-session/logos/MASTERCARD.svg\",\n description:\n \"3DS Challenge, authentication is successful if OTP is correct. For frictionless flow, use amount < THB 20.\",\n name: \"3_ds_challenge_authentication_is_successful_if_otp_is_correct_for_frictionless_flow_use_amount_thb_20_mastercard\",\n values: {\n \"card_details.card_number\":\n \"3_ds_challenge_authentication_is_successful_if_otp_is_correct_for_frictionless_flow_use_amount_thb_20_mastercard\",\n \"card_details.expiry_month__card_details.expiry_year\":\n \"3_ds_challenge_authentication_is_successful_if_otp_is_correct_for_frictionless_flow_use_amount_thb_20_mastercard\",\n \"card_details.cvn\":\n \"3_ds_challenge_authentication_is_successful_if_otp_is_correct_for_frictionless_flow_use_amount_thb_20_mastercard\",\n },\n },\n {\n imageUrl: \"https://assets.xendit.co/payment-session/logos/VISA.svg\",\n description: \"Failing transaction\",\n name: \"failing_transaction_visa\",\n values: {\n \"card_details.card_number\": \"failing_transaction_visa\",\n \"card_details.expiry_month__card_details.expiry_year\":\n \"failing_transaction_visa\",\n \"card_details.cvn\": \"failing_transaction_visa\",\n },\n },\n {\n imageUrl: \"https://assets.xendit.co/payment-session/logos/MASTERCARD.svg\",\n description: \"Failing transaction\",\n name: \"failing_transaction_mastercard\",\n values: {\n \"card_details.card_number\": \"failing_transaction_mastercard\",\n \"card_details.expiry_month__card_details.expiry_year\":\n \"failing_transaction_mastercard\",\n \"card_details.cvn\": \"failing_transaction_mastercard\",\n },\n },\n {\n imageUrl: \"https://assets.xendit.co/payment-session/logos/AMEX.svg\",\n description:\n \"3DS Frictionless, authentication successful (use a 4 digit CVN)\",\n name: \"3_ds_frictionless_authentication_successful_use_a_4_digit_cvn\",\n values: {\n \"card_details.card_number\":\n \"3_ds_frictionless_authentication_successful_use_a_4_digit_cvn\",\n \"card_details.expiry_month__card_details.expiry_year\":\n \"3_ds_frictionless_authentication_successful_use_a_4_digit_cvn\",\n \"card_details.cvn\":\n \"3_ds_frictionless_authentication_successful_use_a_4_digit_cvn\",\n },\n },\n {\n imageUrl: \"https://assets.xendit.co/payment-session/logos/AMEX.svg\",\n description:\n \"3DS Frictionless, authentication successful (use a 4 digit CVN)\",\n name: \"3_ds_frictionless_authentication_successful_use_a_4_digit_cvn2\",\n values: {\n \"card_details.card_number\":\n \"3_ds_frictionless_authentication_successful_use_a_4_digit_cvn2\",\n \"card_details.expiry_month__card_details.expiry_year\":\n \"3_ds_frictionless_authentication_successful_use_a_4_digit_cvn2\",\n \"card_details.cvn\":\n \"3_ds_frictionless_authentication_successful_use_a_4_digit_cvn2\",\n },\n },\n {\n imageUrl: \"https://assets.xendit.co/payment-session/logos/AMEX.svg\",\n description: \"3DS Challenge (use a 4 digit CVN)\",\n name: \"3_ds_challenge_use_a_4_digit_cvn\",\n values: {\n \"card_details.card_number\": \"3_ds_challenge_use_a_4_digit_cvn\",\n \"card_details.expiry_month__card_details.expiry_year\":\n \"3_ds_challenge_use_a_4_digit_cvn\",\n \"card_details.cvn\": \"3_ds_challenge_use_a_4_digit_cvn\",\n },\n },\n ],\n docsLink: \"https://docs.xendit.co/docs/cards-simulate-card-scenarios\",\n};\n","import { ChannelFormField, ChannelProperties } from \"../backend-types/channel\";\nimport { BffSession, BffSessionType } from \"../backend-types/session\";\nimport {\n useCallback,\n useContext,\n useEffect,\n useImperativeHandle,\n useMemo,\n useRef,\n useState,\n} from \"preact/hooks\";\nimport { useSdk, useSession } from \"./session-provider\";\nimport FieldGroup from \"./field-group\";\nimport { formHasFieldOfType, usePrevious } from \"../utils\";\nimport { createContext } from \"preact\";\nimport { forwardRef } from \"preact/compat\";\nimport { InternalSetFieldTouchedEvent } from \"../private-event-types\";\nimport { useChannel, useChannelComponentData } from \"./payment-channel\";\nimport { getChannelPropertyValue } from \"../validation\";\nimport { ChannelComponentData } from \"../public-sdk\";\nimport { internal } from \"../internal\";\nimport { CARDS_SCENARIOS, Scenarios } from \"../data/simulation-scenarios\";\n\ninterface Props {\n form: ChannelFormField[];\n onChannelPropertiesChanged: (channelProperties: ChannelProperties) => void;\n}\nexport interface ChannelFormHandle {\n setAllFieldsTouched: () => void;\n}\n\nconst ChannelForm = forwardRef<ChannelFormHandle, Props>(\n ({ form, onChannelPropertiesChanged }, ref) => {\n const session = useSession();\n const channel = useChannel();\n const sdk = useSdk();\n const channelComponentData = useChannelComponentData();\n const formRef = useRef<HTMLFormElement>(null);\n\n const [channelProperties, setChannelProperties] =\n useState<ChannelProperties | null>(null);\n\n useImperativeHandle(ref, () => ({\n setAllFieldsTouched() {\n const form = formRef.current;\n if (!form) return;\n Array.from(form.elements)\n .filter((el) => el instanceof HTMLInputElement)\n .forEach((input) => {\n if (!input.name) {\n // only mark named fields as touched\n return;\n }\n input.dispatchEvent(new InternalSetFieldTouchedEvent());\n });\n },\n }));\n\n const getChannelProperties = useCallback((): ChannelProperties => {\n if (!formRef.current) return {};\n\n // The browser FormData collides with node's FormData, both are global, so we\n // need to make up a type for\n const formData = new FormData(formRef.current) as unknown as {\n entries: () => IterableIterator<[string, string | Blob]>;\n };\n\n return formKvToChannelProperties(formData.entries());\n }, []);\n\n const handleFieldChanged = useCallback(() => {\n if (!formRef.current) return;\n const channelProperties = getChannelProperties();\n setChannelProperties(channelProperties);\n onChannelPropertiesChanged(channelProperties);\n }, [getChannelProperties, onChannelPropertiesChanged]);\n\n const filteredForm = useFilteredFormFields(\n session,\n form,\n channelProperties || {},\n channelComponentData ?? null,\n );\n\n // trigger a field changed callback when the form changes\n const previousFilteredForm = usePrevious(filteredForm);\n useEffect(() => {\n if (\n // only trigger if the form changed\n !formsAreEqual(previousFilteredForm || [], filteredForm)\n ) {\n handleFieldChanged();\n }\n }, [filteredForm, handleFieldChanged, previousFilteredForm]);\n\n const getSimulationScenarios = useCallback(\n (fieldGroup: ChannelFormField[]): Scenarios | null => {\n // only show simulation scenarios for prod-dev (test mode)\n if (sdk[internal].sdkKey.hostId !== \"pd\") {\n return null;\n }\n\n // only show simulation scenarios for cards channel and if the field group has a credit card number field\n if (\n channel?.channel_code === \"CARDS\" &&\n fieldGroup.some((field) => field.type.name === \"credit_card_number\")\n ) {\n return CARDS_SCENARIOS;\n }\n\n return null;\n },\n [channel, sdk],\n );\n\n const filteredFieldGroups = groupFields(filteredForm).filter(\n (group) => group.length,\n );\n\n if (filteredFieldGroups.length === 0) {\n return null;\n }\n\n return (\n <div class=\"xendit-channel-form\">\n <form ref={formRef}>\n <ChannelPropertiesContext.Provider value={channelProperties}>\n {filteredFieldGroups.map((fieldGroup, index) => (\n <FieldGroup\n key={index}\n fieldGroup={fieldGroup}\n groupIndex={index}\n handleFieldChanged={handleFieldChanged}\n channelProperties={channelProperties}\n simulationScenarios={getSimulationScenarios(fieldGroup)}\n />\n ))}\n </ChannelPropertiesContext.Provider>\n </form>\n </div>\n );\n },\n);\n\nexport const ChannelPropertiesContext = createContext<ChannelProperties | null>(\n null,\n);\n\nexport const useChannelProperties = (): ChannelProperties | null => {\n return useContext(ChannelPropertiesContext);\n};\n\nfunction groupFields(fields: ChannelFormField[]): ChannelFormField[][] {\n // Group fields for rendering\n const fieldGroups: ChannelFormField[][] = [[]];\n for (const field of fields) {\n if (\n field.span === 1 &&\n fieldGroups[fieldGroups.length - 1].length === 1 &&\n fieldGroups[fieldGroups.length - 1][0].span === 1\n ) {\n // join two half-width fields into one group\n fieldGroups[fieldGroups.length - 1].push(field);\n continue;\n }\n\n if (field.join) {\n // if the field should be explicitly joined, add it to the last group\n fieldGroups[fieldGroups.length - 1].push(field);\n continue;\n }\n\n // otherwise, start a new group\n fieldGroups.push([field]);\n }\n\n return fieldGroups;\n}\n\n/**\n * Convert form key/value pairs to channel properties\n * .e.g\n * Input:\n * {\n * \"k\": \"v1\",\n * \"a.b.c\": \"v2\",\n * \"z.z__a.y\": [\"v3\", \"v3\"],\n * }\n * Output:\n * {\n * k: \"v1\",\n * a: { b: { c: \"v2\", }, },\n * z: { z: \"v3\", y: \"v4\" },\n * }\n **/\nfunction formKvToChannelProperties(\n iter: IterableIterator<[string, string | Blob]>,\n): ChannelProperties {\n const obj: ChannelProperties = {};\n\n for (const [key, rawValue] of iter) {\n if (rawValue instanceof Blob) {\n continue;\n }\n\n // keys with __ represent multiple k/v pairs\n // e.g. `{\"a__b\": [\"1\", \"2\"]}` becomes `{a: \"1\", b: \"2\"}`\n const subkeys = key.split(\"__\");\n\n // if there are multiple subkeys, assume the value is a JSON array of strings\n const valueAsArray = formValueToStringArray(subkeys, rawValue);\n\n outer: for (const subkey of subkeys) {\n // split key by dot, for each part, traverse the object\n // and assign the value at the end\n // e.g. { \"branch.leaf\": \"value\" } becomes { branch: { leaf: \"value\" } }\n // cursor will be the leaf object\n const parts = subkey.split(\".\");\n let cursor = obj;\n while (parts.length > 1) {\n const part = parts.shift()!;\n let selected = cursor[part];\n if (selected === undefined) {\n // child object doesn't exist, create it\n selected = cursor[part] = {};\n }\n if (selected && typeof selected === \"object\") {\n if (Array.isArray(selected)) {\n continue outer; // should never happen\n }\n // traverse into child object\n cursor = selected;\n }\n }\n\n // assign next value to channel properties\n const nextValue = valueAsArray.length ? valueAsArray.shift() : \"\";\n cursor[parts[0]] = nextValue;\n }\n }\n\n return obj;\n}\n\n/**\n * Parse a json string[] with error handling.\n */\nfunction formValueToStringArray(\n subkeys: string[],\n value: string,\n): (string | number)[] {\n if (subkeys.length === 0) return [];\n if (subkeys.length === 1) return [value];\n if (value === \"\") return [];\n try {\n return JSON.parse(value);\n } catch (_e) {\n return [value];\n }\n}\n\n/**\n * Checks if two forms are equal\n */\nfunction formsAreEqual(a: ChannelFormField[], b: ChannelFormField[]) {\n if (a.length !== b.length) return false;\n for (let i = 0; i < a.length; i++) {\n if (a[i] !== b[i]) return false;\n }\n return true;\n}\n\n/**\n * Takes a form and filters out fields that should not be shown based on context.\n */\nexport function useFilteredFormFields(\n session: BffSession,\n form: ChannelFormField[],\n channelProperties: ChannelProperties,\n channelComponentData: ChannelComponentData | null,\n) {\n const filteredForm = useMemo(() => {\n return filterFormFields(\n session.session_type,\n form,\n channelProperties,\n channelComponentData,\n );\n }, [channelComponentData, channelProperties, form, session.session_type]);\n\n return filteredForm;\n}\n\nexport function filterFormFields(\n sessionType: BffSessionType,\n form: ChannelFormField[],\n channelProperties: ChannelProperties,\n channelComponentData: ChannelComponentData | null,\n) {\n const hasCardsField = formHasFieldOfType(form, \"credit_card_number\");\n const showBillingDetailsFields =\n channelComponentData?.cardDetails?.details?.require_billing_information;\n const hasInstallmentPlans =\n !!channelComponentData?.paymentOptions?.options?.installment_plans?.length;\n\n return form.filter((field) => {\n if (field.flags?.require_billing_information) {\n // filter out billing info fields if the flag is disabled or the session type is not PAY\n if (sessionType !== \"PAY\") return false;\n if (!showBillingDetailsFields) return false;\n }\n if (field.type.name === \"installment_plan\") {\n // filter out installment plan fields if there are no installment plans AND there is a card number field\n // (if there's no card number, then the installments field would be mandatory so we can't hide it)\n if (!hasInstallmentPlans && hasCardsField) return false;\n }\n for (const condition of field.display_if || []) {\n // filter out fields if any of their display_if conditions fail\n const [property, operator, value] = condition;\n const channelValue = getChannelPropertyValue(channelProperties, property);\n switch (operator) {\n case \"equals\":\n if (channelValue !== value) return false;\n break;\n case \"not_equals\":\n if (channelValue === value) return false;\n break;\n }\n }\n return true;\n });\n}\n\nexport default ChannelForm;\n","import { FunctionComponent, SVGAttributes } from \"preact\";\nimport { useLayoutEffect, useRef } from \"preact/hooks\";\n\nexport const InstructionsIcon: FunctionComponent<\n SVGAttributes<SVGSVGElement>\n> = (props) => {\n const arrowRef = useRef<SVGGElement>(null);\n const arrowSquareGroupRef = useRef<SVGGElement>(null);\n\n const supportsAnimation = HTMLElement.prototype.animate !== undefined;\n\n useLayoutEffect(() => {\n if (!supportsAnimation) {\n return;\n }\n arrowRef.current?.animate(arrowKeyFrames, arrowAnimationOptions);\n\n arrowSquareGroupRef.current?.animate(\n arrowSquareBounceKeyFrames,\n arrowSquareBounceAnimationOptions,\n );\n }, [supportsAnimation]);\n\n return (\n <svg\n width=\"40\"\n height=\"40\"\n viewBox=\"0 0 40 40\"\n fill=\"none\"\n xmlns=\"http://www.w3.org/2000/svg\"\n {...props}\n >\n <g opacity=\"0.5\">\n <path\n d=\"M8.79453 10.2303C7.1791 10.2303 5.86953 11.5399 5.86953 13.1553V28.9503C5.86953 31.535 7.96484 33.6303 10.5495 33.6303H26.3445C27.96 33.6303 29.2695 32.3208 29.2695 30.7053\"\n fill=\"#F1F1F1\"\n />\n <path\n d=\"M8.79453 10.2303V10.2303C7.1791 10.2303 5.86953 11.5399 5.86953 13.1553V28.9503C5.86953 31.535 7.96484 33.6303 10.5495 33.6303H26.3445C27.96 33.6303 29.2695 32.3208 29.2695 30.7053V30.7053\"\n stroke=\"#D0D0D0\"\n strokeWidth=\"1.755\"\n strokeLinecap=\"round\"\n strokeLinejoin=\"round\"\n />\n </g>\n <g ref={arrowSquareGroupRef} style={{ transformOrigin: \"20px 20px\" }}>\n <path\n d=\"M28.8177 6.00256H14.7777C12.193 6.00256 10.0977 8.09787 10.0977 10.6826V24.7226C10.0977 27.3073 12.193 29.4026 14.7777 29.4026H28.8177C31.4023 29.4026 33.4977 27.3073 33.4977 24.7226V10.6826C33.4977 8.09787 31.4024 6.00256 28.8177 6.00256Z\"\n fill=\"white\"\n stroke=\"#EDEDED\"\n strokeWidth=\"1.755\"\n strokeLinecap=\"round\"\n strokeLinejoin=\"round\"\n />\n <g style={{ transformOrigin: \"10px 30px\" }} ref={arrowRef}>\n <path\n d=\"M26.7697 20.5301V12.7301H18.9697\"\n stroke=\"#7C7C7C\"\n strokeWidth=\"1.872\"\n strokeLinecap=\"round\"\n strokeLinejoin=\"round\"\n />\n <path\n d=\"M17.4102 22.0901L26.7702 12.7301\"\n stroke=\"#7C7C7C\"\n strokeWidth=\"1.872\"\n strokeLinecap=\"round\"\n strokeLinejoin=\"round\"\n />\n </g>\n </g>\n </svg>\n );\n};\n\nconst arrowKeyFrames: Keyframe[] = [\n { transform: \"scale(0.1)\" },\n { transform: \"scale(1)\" },\n];\nconst arrowAnimationOptions: EffectTiming = {\n duration: 500,\n easing: \"ease-out\",\n};\n\nconst arrowSquareBounceKeyFrames: Keyframe[] = [\n { transform: \"rotate(0deg)\" },\n { transform: \"rotate(5deg)\" },\n { transform: \"rotate(-5deg)\" },\n { transform: \"rotate(0deg)\" },\n];\nconst arrowSquareBounceAnimationOptions: EffectTiming = {\n duration: 1000,\n easing: \"ease-out\",\n iterations: Infinity,\n delay: 2000,\n};\n","import { FunctionComponent, SVGAttributes } from \"preact\";\nimport { useLayoutEffect, useRef } from \"preact/hooks\";\nimport { useIdSafe } from \"../utils\";\n\nexport const QrScanIcon: FunctionComponent<SVGAttributes<SVGSVGElement>> = (\n props,\n) => {\n const scannerRef = useRef<SVGRectElement>(null);\n const squareBackgroundRef = useRef<SVGRectElement>(null);\n\n const clipPathId = useIdSafe();\n\n const supportsAnimation = HTMLElement.prototype.animate !== undefined;\n\n useLayoutEffect(() => {\n if (!supportsAnimation) {\n return;\n }\n if (scannerRef.current) {\n const startAnimation = () => {\n if (!scannerRef.current) return;\n const a = scannerRef.current.animate(\n scannerKeyFrames,\n scanDownAnimationOptions,\n );\n setTimeout(() => {\n squareBackgroundRef.current?.animate(\n squareKeyFrames,\n squareAnimationOptions,\n );\n }, 1000);\n a.onfinish = () => {\n const b = scannerRef.current?.animate(\n scannerKeyFrames,\n scanUpAnimationOptions,\n );\n setTimeout(() => {\n squareBackgroundRef.current?.animate(\n squareKeyFrames,\n squareAnimationOptions,\n );\n }, 500);\n if (b) b.onfinish = startAnimation;\n };\n };\n startAnimation();\n }\n }, [supportsAnimation]);\n\n return (\n <svg\n width=\"40\"\n height=\"40\"\n viewBox=\"0 0 40 40\"\n fill=\"var(--xendit-color-icon-primary)\"\n xmlns=\"http://www.w3.org/2000/svg\"\n {...props}\n >\n <g clip-path={`url(#${clipPathId})`}>\n {/* background */}\n <rect\n x=\"8\"\n y=\"8\"\n width=\"24\"\n height=\"24\"\n fill=\"var(--xendit-color-icon-secondary)\"\n ref={squareBackgroundRef}\n />\n\n <path d=\"M11.5 13.1528C11.5 12.24 12.24 11.5 13.1528 11.5H17.4028C18.3156 11.5 19.0556 12.24 19.0556 13.1528V17.4028C19.0556 18.3156 18.3156 19.0556 17.4028 19.0556H13.1528C12.24 19.0556 11.5 18.3156 11.5 17.4028V13.1528Z\" />\n <path d=\"M20.9444 13.1528C20.9444 12.24 21.6844 11.5 22.5972 11.5H26.8472C27.76 11.5 28.5 12.24 28.5 13.1528V17.4028C28.5 18.3156 27.76 19.0556 26.8472 19.0556H22.5972C21.6844 19.0556 20.9444 18.3156 20.9444 17.4028V13.1528Z\" />\n <path d=\"M11.5 22.5972C11.5 21.6844 12.24 20.9444 13.1528 20.9444H17.4028C18.3156 20.9444 19.0556 21.6844 19.0556 22.5972V26.8472C19.0556 27.76 18.3156 28.5 17.4028 28.5H13.1528C12.24 28.5 11.5 27.76 11.5 26.8472V22.5972Z\" />\n <path d=\"M20.9444 22.5972C20.9444 21.6844 21.6844 20.9444 22.5972 20.9444H26.8472C27.76 20.9444 28.5 21.6844 28.5 22.5972V26.8472C28.5 27.76 27.76 28.5 26.8472 28.5H22.5972C21.6844 28.5 20.9444 27.76 20.9444 26.8472V22.5972Z\" />\n <path d=\"M7.875 23C8.35825 23 8.75 23.3918 8.75 23.875V30.2754C8.75021 30.6755 9.07451 30.9998 9.47461 31H15.875C16.3582 31 16.75 31.3918 16.75 31.875C16.75 32.3582 16.3582 32.75 15.875 32.75H9.47461C8.10801 32.7498 7.00021 31.642 7 30.2754V23.875C7 23.3918 7.39175 23 7.875 23Z\" />\n <path d=\"M31.875 23C32.3582 23 32.75 23.3918 32.75 23.875V30.2754C32.7498 31.642 31.642 32.7498 30.2754 32.75H23.875C23.3918 32.75 23 32.3582 23 31.875C23 31.3918 23.3918 31 23.875 31H30.2754C30.6755 30.9998 30.9998 30.6755 31 30.2754V23.875C31 23.3918 31.3918 23 31.875 23Z\" />\n <path d=\"M15.875 7C16.3582 7 16.75 7.39175 16.75 7.875C16.75 8.35825 16.3582 8.75 15.875 8.75H9.47461C9.07451 8.75021 8.75021 9.07451 8.75 9.47461V15.875C8.75 16.3582 8.35825 16.75 7.875 16.75C7.39175 16.75 7 16.3582 7 15.875V9.47461C7.00021 8.10801 8.10801 7.00021 9.47461 7H15.875Z\" />\n <path d=\"M30.2754 7C31.642 7.00021 32.7498 8.10801 32.75 9.47461V15.875C32.75 16.3582 32.3582 16.75 31.875 16.75C31.3918 16.75 31 16.3582 31 15.875V9.47461C30.9998 9.07451 30.6755 8.75021 30.2754 8.75H23.875C23.3918 8.75 23 8.35825 23 7.875C23 7.39175 23.3918 7 23.875 7H30.2754Z\" />\n {/* scanner */}\n <rect x=\"3\" y=\"-4\" width=\"34\" height=\"4\" rx=\"1.75\" ref={scannerRef} />\n </g>\n <defs>\n <clipPath id={clipPathId}>\n <rect width=\"40\" height=\"40\" fill=\"white\" />\n </clipPath>\n </defs>\n </svg>\n );\n};\n\nconst scannerKeyFrames: Keyframe[] = [\n { transform: \"translateY(0)\" },\n { transform: \"translateY(44px)\" },\n];\nconst scanDownAnimationOptions: EffectTiming = {\n duration: 1000,\n delay: 1000,\n easing: \"ease-out\",\n};\nconst scanUpAnimationOptions: EffectTiming = {\n duration: 1000,\n direction: \"reverse\",\n delay: 500,\n easing: \"ease-in\",\n};\n\nconst squareKeyFrames: Keyframe[] = [\n { opacity: 1 },\n { opacity: 0 },\n { opacity: 1 },\n];\nconst squareAnimationOptions: EffectTiming = {\n duration: 1000,\n};\n","import { FunctionComponent, TargetedEvent } from \"preact\";\nimport { useIdSafe } from \"../utils\";\n\ninterface Props {\n id?: string;\n label: string;\n checked?: boolean;\n disabled?: boolean;\n onChange?: (e: TargetedEvent<HTMLInputElement>) => void;\n}\n\n/**\n * Checkbox component\n */\nexport const Checkbox: FunctionComponent<Props> = (props) => {\n const { id, label, checked, onChange, disabled } = props;\n\n const generatedId = useIdSafe();\n const htmlId = id || generatedId;\n\n const handleChange = (e: TargetedEvent<HTMLInputElement>) => {\n onChange?.(e);\n };\n\n return (\n <div className=\"xendit-checkbox\">\n <div className=\"xendit-checkbox-box\">\n <input\n id={htmlId}\n type=\"checkbox\"\n onChange={handleChange}\n checked={checked}\n disabled={disabled}\n />\n <svg\n xmlns=\"http://www.w3.org/2000/svg\"\n viewBox=\"0 0 256 256\"\n className=\"xendit-checkbox-graphic\"\n >\n <polyline\n points=\"40 144 96 200 224 72\"\n fill=\"none\"\n stroke=\"currentColor\"\n stroke-linecap=\"round\"\n stroke-linejoin=\"round\"\n stroke-width=\"16\"\n ></polyline>\n </svg>\n </div>\n <label htmlFor={htmlId} className=\"xendit-text-14\">\n {label}\n </label>\n </div>\n );\n};\n","import ChannelForm, { ChannelFormHandle } from \"./channel-form\";\nimport { useContext, useRef } from \"preact/hooks\";\nimport {\n createContext,\n FunctionComponent,\n RefObject,\n TargetedEvent,\n} from \"preact\";\nimport {\n BffChannel,\n BffChannelBanner,\n ChannelProperties,\n} from \"../backend-types/channel\";\nimport { InstructionsIcon } from \"./instructions-icon\";\nimport { QrScanIcon } from \"./qr-scan-icon\";\nimport { useSdk, useSession } from \"./session-provider\";\nimport { Checkbox } from \"./checkbox\";\nimport { resolvePairedChannel } from \"../utils\";\nimport { ChannelComponentData } from \"../public-sdk\";\nimport { InternalUpdateChannelComponentData } from \"../private-event-types\";\n\nconst ChannelContext = createContext<BffChannel | null>(null);\n\nexport const useChannel = () => {\n const context = useContext(ChannelContext);\n if (context === undefined) {\n throw new Error(\"useChannel must be used within a ChannelProvider\");\n }\n return context;\n};\n\nconst ChannelComponentDataContext = createContext<ChannelComponentData | null>(\n null,\n);\nChannelComponentDataContext.displayName = \"ChannelComponentDataContext\";\n\nexport const useChannelComponentData = () => {\n const context = useContext(ChannelComponentDataContext);\n return context;\n};\n\ninterface Props {\n /** The channels to use. If this has two items then the first is the non-save channel and the second is the save version. */\n channelOrPair: BffChannel[];\n channelData: ChannelComponentData;\n savePaymentMethod: boolean;\n formRef: RefObject<ChannelFormHandle>;\n}\n\nexport const PaymentChannel: FunctionComponent<Props> = (props) => {\n const { channelOrPair, channelData, savePaymentMethod, formRef } = props;\n const divRef = useRef<HTMLDivElement>(null);\n const sdk = useSdk();\n const { t } = sdk;\n const session = useSession();\n\n // events always use channelOrPair[0] because the CachedChannelComponents are keyed by that\n const firstMemberChannel = channelOrPair[0];\n\n const hasPairedChannel = channelOrPair.length > 1;\n const resolvedChannel = resolvePairedChannel(\n channelOrPair,\n savePaymentMethod,\n );\n\n const instructions = instructionsAsTuple(resolvedChannel.instructions);\n\n const onChannelPropertiesChanged = (channelProperties: ChannelProperties) => {\n let cleanedProperties = channelProperties;\n if (\n firstMemberChannel.channel_code === \"CARDS\" &&\n channelProperties.installment_configuration\n ) {\n // for cards installment configuration, we need to remove any properties that have empty string values,\n // because the presence of those properties causes validation errors, even if the value is an empty string\n const cleanedInstallmentConfiguration = Object.fromEntries(\n Object.entries(channelProperties.installment_configuration).filter(\n ([_, value]) => value !== \"\",\n ),\n );\n if (Object.keys(cleanedInstallmentConfiguration).length === 0) {\n // if there are no valid properties left, set installment_configuration to undefined to avoid validation errors\n cleanedProperties = {\n ...channelProperties,\n installment_configuration: undefined,\n };\n } else {\n cleanedProperties = {\n ...channelProperties,\n installment_configuration: cleanedInstallmentConfiguration,\n };\n }\n }\n\n const event = new XenditChannelPropertiesChangedEvent(\n firstMemberChannel.channel_code,\n cleanedProperties,\n );\n divRef.current?.dispatchEvent(event);\n };\n\n const shouldShowSaveCheckbox =\n session.allow_save_payment_method === \"OPTIONAL\" &&\n (resolvedChannel.allow_save || hasPairedChannel);\n\n const handleCheckboxChange = (e: TargetedEvent<HTMLInputElement>) => {\n const checked = (e.target as HTMLInputElement)?.checked;\n sdk?.dispatchEvent(\n new InternalUpdateChannelComponentData(firstMemberChannel.channel_code, {\n savePaymentMethod: checked,\n }),\n );\n };\n\n return (\n <ChannelContext.Provider value={resolvedChannel}>\n <ChannelComponentDataContext.Provider value={channelData}>\n <div className=\"xendit-payment-channel\" ref={divRef}>\n <ChannelForm\n ref={formRef}\n form={resolvedChannel.form}\n onChannelPropertiesChanged={onChannelPropertiesChanged}\n />\n {resolvedChannel.banner ? (\n <Banner banner={resolvedChannel.banner} />\n ) : null}\n {shouldShowSaveCheckbox && (\n <Checkbox\n label={t(\"payment.save_checkbox_label\")}\n onChange={handleCheckboxChange}\n checked={savePaymentMethod}\n />\n )}\n {instructions ? (\n <div className=\"xendit-payment-channel-instructions\">\n {resolvedChannel.pm_type === \"QR_CODE\" ? (\n <QrScanIcon />\n ) : (\n <InstructionsIcon />\n )}\n <div className=\"xendit-payment-channel-instructions-text xendit-text-12\">\n {instructions.map((instr, i) => (\n <p\n key={i}\n className={i === 0 ? \"xendit-text-semibold\" : undefined}\n >\n {instr}\n </p>\n ))}\n </div>\n </div>\n ) : null}\n </div>\n </ChannelComponentDataContext.Provider>\n </ChannelContext.Provider>\n );\n};\n\nconst Banner: FunctionComponent<{ banner: BffChannelBanner }> = (props) => {\n const aspectRatio =\n typeof props.banner.aspect_ratio === \"number\"\n ? String(props.banner.aspect_ratio) // passing aspectRatio as a number does not work\n : undefined;\n\n if (props.banner?.link_url) {\n return (\n <a href={props.banner.link_url} target=\"_blank\" rel=\"noopener noreferrer\">\n <img\n src={props.banner.image_url}\n alt={props.banner.alt_text}\n className=\"xendit-payment-channel-banner\"\n style={{\n aspectRatio,\n }}\n />\n </a>\n );\n }\n\n return (\n <img\n src={props.banner.image_url}\n alt={props.banner.alt_text}\n className=\"xendit-payment-channel-banner\"\n style={{\n aspectRatio,\n }}\n />\n );\n};\n\nfunction instructionsAsTuple(\n instructions: string[] | undefined,\n): [string, string] | null {\n if (instructions && instructions.length === 2) {\n return [instructions[0], instructions[1]] as const;\n }\n return null;\n}\n\nexport class XenditChannelPropertiesChangedEvent extends Event {\n static readonly type = \"xendit-channel-properties-changed\" as const;\n channel: string;\n channelProperties: ChannelProperties;\n\n constructor(channel: string, channelProperties: ChannelProperties) {\n super(XenditChannelPropertiesChangedEvent.type, {\n bubbles: true,\n composed: true,\n });\n this.channel = channel;\n this.channelProperties = channelProperties;\n }\n}\n","import { assert, hostFromHostId, MOCK_HOST_ID, ParsedSdkKey } from \"./utils\";\n\nexport type ErrorResponse = {\n error_code: string;\n message: string;\n error_content?: {\n title: string;\n message_1: string;\n message_2?: string;\n };\n};\n\nexport class NetworkError extends Error {\n constructor(public errorResponse: ErrorResponse) {\n super(errorResponse.message);\n }\n}\n\n/**\n * Encode data for x-www-form-urlencoded content type\n */\nfunction convertDataToUrlSearchParams<T extends object>(data: T) {\n const params = new URLSearchParams();\n params.append(\"payload\", JSON.stringify(data));\n return params;\n}\n\n// GET with path param\nexport function endpoint<ResponseBody, PathArg>(\n method: \"GET\",\n getPath: (pathArg: PathArg) => string,\n): (\n sdkKey: ParsedSdkKey,\n pathArg: PathArg,\n queryArg?: null,\n abortSignal?: AbortSignal,\n) => Promise<ResponseBody>;\n\n// GET with path param and query param\nexport function endpoint<ResponseBody, PathArg, QueryArg = never>(\n method: \"GET\",\n getPath: (pathArg: PathArg) => string,\n getQuery: (queryArg: QueryArg) => URLSearchParams,\n): (\n sdkKey: ParsedSdkKey,\n pathArg: PathArg,\n queryArg?: QueryArg,\n abortSignal?: AbortSignal,\n) => Promise<ResponseBody>;\n\n// POST with path param\nexport function endpoint<RequestBody, ResponseBody, PathArg>(\n method: \"POST\",\n getPath: (pathArg: PathArg) => string,\n): (\n sdkKey: ParsedSdkKey,\n requestBody: RequestBody,\n pathArg: PathArg,\n queryArg?: null,\n abortSignal?: AbortSignal,\n) => Promise<ResponseBody>;\n\n// POST with path param and query param\nexport function endpoint<RequestBody, ResponseBody, PathArg, QueryArg = never>(\n method: \"POST\",\n getPath: (pathArg: PathArg) => string,\n getQuery: (queryArg: QueryArg) => URLSearchParams,\n): (\n sdkKey: ParsedSdkKey,\n requestBody: RequestBody,\n pathArg: PathArg,\n queryArg?: QueryArg,\n abortSignal?: AbortSignal,\n) => Promise<ResponseBody>;\n\n/**\n * Declares an endpoint in checkout-ui-gateway and returns a function to call it.\n *\n * @example\n * ```\n * // declare\n * const myEndpoint = endpoint<\n * { userId: string }, // Request body type\n * { name: string; age: number }, // Response body type\n * string, // Type of arg passed to getPath\n * string, // Type of arg passed to getQuery\n * >(\n * \"POST\",\n * (pathArg) => `/api/users/${pathArg}`, // getPath function\n * (queryArg) => new UrlSearchParams({id: queryArg}) // getQuery function\n * );\n *\n * // usage\n * await myEndpoint({userId: \"123\"}, \"456\", \"789\");\n * ```\n */\nexport function endpoint(\n method: \"GET\" | \"POST\",\n getPath: (pathArg: unknown) => string,\n getQuery?: (queryArg: unknown) => URLSearchParams,\n) {\n return async function (...rest: unknown[]): Promise<unknown> {\n let sdkKey: unknown;\n let pathArg: unknown;\n let queryArg: unknown;\n let requestBody: unknown;\n let abortSignal: unknown;\n\n switch (method) {\n case \"GET\":\n [sdkKey, pathArg, queryArg, abortSignal] = rest;\n break;\n case \"POST\":\n [sdkKey, requestBody, pathArg, queryArg, abortSignal] = rest;\n break;\n default:\n throw new Error(\n `Unable to call endpoint with method ${method}; this is a bug, please contact support.`,\n );\n }\n\n const versionNumber = process.env.XENDIT_COMPONENTS_VERSION;\n assert(versionNumber);\n assert(versionNumber.startsWith(\"v\"));\n\n const hostId = (sdkKey as ParsedSdkKey).hostId;\n if (hostId === MOCK_HOST_ID) {\n throw new Error(\n \"A network request was made in mock mode; this is a bug.\",\n );\n }\n const host = hostFromHostId(hostId);\n if (!host) {\n throw new Error(\n `Unknown hostId ${hostId} in sdkKey; this is a bug, please contact support.`,\n );\n }\n\n const url = new URL(getPath(pathArg), host);\n if (getQuery && !queryArg) {\n throw new Error(\n \"Query string argument is missing; this is a bug, please contact support.\",\n );\n }\n const query = getQuery?.(queryArg) ?? new URLSearchParams();\n query.set(\"components_version\", versionNumber);\n url.search = query.toString();\n\n const options: RequestInit = {\n method,\n body: requestBody ? convertDataToUrlSearchParams(requestBody) : undefined,\n headers: {\n \"Content-Type\": \"application/x-www-form-urlencoded\",\n },\n signal: abortSignal as AbortSignal | undefined,\n };\n\n const response = await fetch(url, options);\n if (!response.ok) {\n const errorData = (await response.json()) as ErrorResponse;\n if (!errorData || !errorData.error_code) {\n throw new Error(\"Unexpected error response from server\");\n }\n throw new NetworkError(errorData);\n }\n\n return response.json();\n };\n}\n","import { ChannelProperties } from \"./backend-types/channel\";\nimport { BffPollResponse, BffResponse } from \"./backend-types/common\";\nimport { BffCustomer } from \"./backend-types/customer\";\nimport {\n BffPaymentRequest,\n BffPaymentToken,\n} from \"./backend-types/payment-entity\";\nimport { BffCardDetails } from \"./backend-types/card-details\";\nimport { endpoint } from \"./networking\";\nimport { BffPaymentOptions } from \"./backend-types/payment-options\";\n\n/**\n * Initialization method, returns session, customer, business, and channels.\n */\nexport const fetchSessionData = endpoint<BffResponse, string>(\n \"GET\",\n (sessionAuthKey) => `/api/sessions/${sessionAuthKey}`,\n);\n\ntype CreatePaymentTokenRequestBody = {\n session_id: string;\n channel_code: string;\n channel_properties: ChannelProperties;\n};\n/**\n * Creates a payment token.\n */\nexport const createPaymentToken = endpoint<\n CreatePaymentTokenRequestBody,\n BffPaymentToken,\n null\n>(\"POST\", () => `/api/sessions/payment_tokens`);\n\ntype CreatePaymentRequestRequestBody = {\n session_id: string;\n channel_code: string;\n channel_properties: ChannelProperties;\n customer?: BffCustomer;\n save_payment_method?: boolean;\n};\n/**\n * Creates a payment request.\n */\nexport const createPaymentRequest = endpoint<\n CreatePaymentRequestRequestBody,\n BffPaymentRequest,\n null\n>(\"POST\", () => `/api/sessions/payment_requests`);\n\ntype SimulatePaymentRequestRequestBody = {\n channel_code: string;\n};\n/**\n * Simulates a payment request.\n */\nexport const simulatePaymentRequest = endpoint<\n SimulatePaymentRequestRequestBody,\n BffPaymentRequest,\n { sessionAuthKey: string; paymentRequestId: string }\n>(\n \"POST\",\n (pathArg) =>\n `/api/sessions/${pathArg.sessionAuthKey}/payment_requests/${pathArg.paymentRequestId}/simulate`,\n);\n\n/**\n * Polls the session for updates.\n *\n * Always returns the session.\n * If the session is active, the payment entity will be included.\n * If the session is completed, the succeeded channel will be included.\n */\nexport const pollSession = endpoint<BffPollResponse, string, string | null>(\n \"GET\",\n (sessionAuthKey) => `/api/sessions/${sessionAuthKey}/poll`,\n (tokenRequestId) =>\n new URLSearchParams(\n tokenRequestId ? { token_request_id: tokenRequestId } : {},\n ),\n);\n\ntype LookupCardDetailsRequestBody = {\n /**\n * Encrypted card number\n */\n card_number: string;\n};\n/**\n * Returns metadata about a card number.\n */\nexport const lookupCardDetails = endpoint<\n LookupCardDetailsRequestBody,\n BffCardDetails,\n string\n>(\"POST\", (sessionAuthKey) => `/api/sessions/${sessionAuthKey}/card_info`);\n\ntype GetPaymentOptionsRequest = {\n channel_code: string;\n channel_properties?: {\n card_number: string;\n };\n};\n/**\n * Returns metadata about a card number.\n */\nexport const getPaymentOptions = endpoint<\n GetPaymentOptionsRequest,\n BffPaymentOptions,\n string\n>(\n \"POST\",\n (sessionAuthKey) => `/api/sessions/${sessionAuthKey}/payment_options`,\n);\n","import { assertIsArray, assertIsNotArray } from \"../utils\";\n\n/**\n * A node in a behavior tree.\n */\nexport type BehaviorNodeSingle<BB extends object> = {\n impl: BehaviorConstructor<BB>;\n key: string;\n child: BehaviorNode<BB> | undefined;\n instance: Behavior | undefined;\n};\n\nexport type BehaviorNode<BB extends object> =\n | BehaviorNodeSingle<BB>\n | (BehaviorNodeSingle<BB> | undefined)[];\n\n/**\n * Creates a behavior tree node.\n *\n * Takes a constructor implementing Behavior and a unique key. Nodes that are different from the previous tree\n * are removed and replaced. \"different\" means either the constructor or the key is different.\n *\n * The BB (blackboard) is data shared between all nodes in the tree. It is mutable.\n */\nexport function behaviorNode<BB extends object>(\n impl: BehaviorConstructor<BB>,\n key?: string,\n child?: BehaviorNode<BB>,\n): BehaviorNodeSingle<BB> {\n return {\n impl,\n key: key ?? \"\",\n child,\n instance: undefined,\n };\n}\n\n/**\n * A behavior implementation constructor.\n */\nexport interface BehaviorConstructor<BB extends object> {\n new (blackboard: BB, key: string): Behavior;\n}\n\n// eslint-disable-next-line @typescript-eslint/no-explicit-any\nexport type AnyBehaviorConstructor = BehaviorConstructor<any>;\n\nexport interface Behavior {\n /**\n * Called when entering this behavior\n */\n enter?(): void;\n /**\n * Called when a tree is updated but this node is not changed.\n */\n update?(): void;\n /**\n * Called when exiting this behavior\n */\n exit?(): void;\n}\n\n/**\n * A behavior tree.\n * https://en.wikipedia.org/wiki/Behavior_tree_(artificial_intelligence,_robotics_and_control)\n *\n * Updating a tree diffs the nodes and calls enter on new nodes and exit on removed nodes.\n */\nexport class BehaviorTree<BB extends object> {\n root: BehaviorNode<BB> = behaviorNode(class {});\n\n // whether an update is in progress\n updating: boolean = false;\n // whether another update is requested\n again: boolean = false;\n\n constructor(\n private fn: (bb: BB) => BehaviorNode<BB>,\n public bb: BB,\n ) {}\n\n update(): void {\n // flag to scheule an update\n this.again = true;\n\n if (this.updating) {\n // if this gets called recursively, just return, the outermost call will handle it\n return;\n }\n\n let updateCount = 0;\n\n try {\n this.updating = true;\n while (this.again) {\n this.again = false;\n updateCount += 1;\n assertMaxRecursionDepth(updateCount);\n\n const prev = this.root ?? undefined;\n const next = this.fn(this.bb);\n this.root = next;\n\n updateTree(prev, next, this.bb, 0);\n }\n } finally {\n this.updating = false;\n }\n }\n\n findBehavior<T extends AnyBehaviorConstructor>(\n constructor: T,\n ): InstanceType<T> | null {\n return findBehavior(this.root, constructor);\n }\n}\n\nfunction assertMaxRecursionDepth(depth: number) {\n if (depth > 32) {\n throw new Error(\n \"Max recursion depth exceeded; this is a bug, please contact support.\",\n );\n }\n}\n\nfunction isChanged<BB extends object>(\n prev: BehaviorNode<BB> | undefined,\n next: BehaviorNode<BB> | undefined,\n) {\n if (prev === undefined || next === undefined) {\n return true;\n }\n\n if (Array.isArray(prev) !== Array.isArray(next)) {\n // if it changed from an array to a non-array or vice versa, it is changed\n return true;\n }\n\n if (Array.isArray(prev) && Array.isArray(next)) {\n // if both are arrays, they aren't \"changed\" because arrays are functionally the same, but their children might be changed\n return false;\n }\n\n // they must both be non-arrays here\n assertIsNotArray(prev);\n assertIsNotArray(next);\n\n return prev.impl !== next.impl || prev.key !== next.key;\n}\n\nfunction updateTree<BB extends object>(\n prev: BehaviorNode<BB> | undefined,\n next: BehaviorNode<BB> | undefined,\n bb: BB,\n depth: number,\n) {\n assertMaxRecursionDepth(depth);\n\n if (isChanged(prev, next)) {\n // after we find a change, exit the previous nodes\n if (prev) {\n exitSubtree(prev, depth + 1);\n }\n // then enter the new nodes\n if (next) {\n enterSubtree(next, bb, depth + 1);\n }\n } else {\n // the nodes are equal\n if (Array.isArray(prev) || Array.isArray(next)) {\n // if the nodes are arrays, just update their children\n // (assert they are both arrays to keep typescript happy (we already checked that))\n assertIsArray(prev);\n assertIsArray(next);\n const maxLength = Math.max(prev.length, next.length);\n for (let i = 0; i < maxLength; i++) {\n updateTree(prev[i], next[i], bb, depth + 1);\n }\n } else {\n // if the nodes are not arrays, move the instance to the new node and update its child\n if (next) {\n next.instance = prev?.instance;\n }\n if (prev) {\n prev.instance = undefined;\n }\n updateTree(prev?.child, next?.child, bb, depth + 1);\n next?.instance?.update?.();\n }\n }\n}\n\nfunction enterSubtree<BB extends object>(\n node: BehaviorNode<BB>,\n bb: BB,\n depth: number,\n) {\n assertMaxRecursionDepth(depth);\n\n // handle parallel nodes\n if (Array.isArray(node)) {\n for (const child of node) {\n if (!child) continue;\n enterSubtree(child, bb, depth + 1);\n }\n return;\n }\n\n // construct instances and call enter traversing downwards\n node.instance = new node.impl(bb, node.key);\n node.instance.enter?.();\n if (node.child) {\n enterSubtree(node.child, bb, depth + 1);\n }\n}\n\nfunction exitSubtree<BB extends object>(node: BehaviorNode<BB>, depth: number) {\n assertMaxRecursionDepth(depth);\n\n // handle parallel nodes\n if (Array.isArray(node)) {\n for (const child of node) {\n if (!child) continue;\n exitSubtree(child, depth + 1);\n }\n return;\n }\n\n // call exit traversing upwards\n if (node.child) {\n exitSubtree(node.child, depth + 1);\n }\n node.instance?.exit?.();\n node.instance = undefined;\n}\n\nexport function flattenBehaviors<BB extends object>(\n node: BehaviorNode<BB>,\n): BehaviorNodeSingle<BB>[] {\n const result: BehaviorNodeSingle<BB>[] = [];\n function traverse(node: BehaviorNode<BB>) {\n if (Array.isArray(node)) {\n for (const child of node) {\n if (!child) continue;\n traverse(child);\n }\n } else {\n result.push(node);\n if (node.child) {\n traverse(node.child);\n }\n }\n }\n traverse(node);\n return result;\n}\n\nfunction findBehavior<BB extends object, T extends AnyBehaviorConstructor>(\n node: BehaviorNode<BB>,\n constructor: T,\n): InstanceType<T> | null {\n if (Array.isArray(node)) {\n for (const child of node) {\n if (!child) continue;\n const result = findBehavior(child, constructor);\n if (result) {\n return result;\n }\n }\n } else {\n if (node.impl === constructor) {\n return (node.instance as InstanceType<T>) ?? null;\n } else {\n if (node.child) {\n return findBehavior(node.child, constructor);\n }\n }\n }\n\n return null;\n}\n","import { useCallback, useLayoutEffect, useRef } from \"preact/hooks\";\nimport { IframeActionCompleteEvent } from \"../../../shared/types\";\n\ntype Props = {\n url: string;\n mock: boolean;\n onIframeComplete: (event: IframeActionCompleteEvent) => void;\n};\n\nexport function ActionIframe(props: Props) {\n const { url, mock, onIframeComplete } = props;\n\n const iframeRef = useRef<HTMLIFrameElement>(null);\n\n const handleEventFromIframe = useCallback(\n (event: MessageEvent) => {\n if (!iframeRef.current) return;\n\n const expectedSource = iframeRef.current.contentWindow;\n\n if (event.source !== expectedSource) {\n // we are not the target of this message\n return;\n }\n\n if (\n event.data?.type ===\n (\"xendit-iframe-action-complete\" satisfies IframeActionCompleteEvent[\"type\"])\n ) {\n onIframeComplete(event.data as IframeActionCompleteEvent);\n }\n },\n [onIframeComplete],\n );\n\n useLayoutEffect(() => {\n window.addEventListener(\"message\", handleEventFromIframe);\n return () => {\n window.removeEventListener(\"message\", handleEventFromIframe);\n };\n }, [handleEventFromIframe]);\n\n if (mock) {\n return (\n <iframe\n ref={iframeRef}\n srcDoc={MOCK_IFRAME_SRCDOC}\n className=\"xendit-action-iframe\"\n />\n );\n }\n\n return (\n <iframe\n ref={iframeRef}\n src={url}\n // sandbox=\"allow-scripts\"\n className=\"xendit-action-iframe\"\n />\n );\n}\n\nconst MOCK_IFRAME_SRCDOC = `\n <html>\n <head>\n <title>Xendit Mock Action Iframe</title>\n <style>\n body {\n font-family: Arial, sans-serif;\n font-size: 14px;\n display: flex;\n flex-direction: column;\n align-items: flex-start;\n gap: 12px;\n }\n p {\n margin: 0;\n }\n .buttons {\n display: flex;\n gap: 8px;\n }\n button {\n font-size: 12px;\n display: flex;\n align-items: center;\n text-align: left;\n background-color: white;\n border: 1px solid rgba(243, 243, 243);\n border-radius: 4px;\n justify-content: space-between;\n padding: 4px;\n cursor: pointer;\n }\n button:hover {\n border-color: #1762ee;\n background-color: #1762ee;\n color: white;\n }\n </style>\n </head>\n <body>\n <p>This is a mock action page.</p>\n <p>Normally, this would be a 3DS authentication page.</p>\n <p>Click a button below to simulate the result of the action.</p>\n <div class=\"buttons\">\n <button onclick=\"parent.postMessage({type: 'xendit-iframe-action-complete', mockStatus: 'success'}, '*')\">\n Simulate Success\n </button>\n <button onclick=\"parent.postMessage({type: 'xendit-iframe-action-complete', mockStatus: 'fail'}, '*')\">\n Simulate Failure\n </button>\n </div>\n </body>\n </html>\n`;\n","// can-promise has a crash in some versions of react native that dont have\n// standard global objects\n// https://github.com/soldair/node-qrcode/issues/157\n\nmodule.exports = function () {\n return typeof Promise === 'function' && Promise.prototype && Promise.prototype.then\n}\n","let toSJISFunction\nconst CODEWORDS_COUNT = [\n 0, // Not used\n 26, 44, 70, 100, 134, 172, 196, 242, 292, 346,\n 404, 466, 532, 581, 655, 733, 815, 901, 991, 1085,\n 1156, 1258, 1364, 1474, 1588, 1706, 1828, 1921, 2051, 2185,\n 2323, 2465, 2611, 2761, 2876, 3034, 3196, 3362, 3532, 3706\n]\n\n/**\n * Returns the QR Code size for the specified version\n *\n * @param {Number} version QR Code version\n * @return {Number} size of QR code\n */\nexports.getSymbolSize = function getSymbolSize (version) {\n if (!version) throw new Error('\"version\" cannot be null or undefined')\n if (version < 1 || version > 40) throw new Error('\"version\" should be in range from 1 to 40')\n return version * 4 + 17\n}\n\n/**\n * Returns the total number of codewords used to store data and EC information.\n *\n * @param {Number} version QR Code version\n * @return {Number} Data length in bits\n */\nexports.getSymbolTotalCodewords = function getSymbolTotalCodewords (version) {\n return CODEWORDS_COUNT[version]\n}\n\n/**\n * Encode data with Bose-Chaudhuri-Hocquenghem\n *\n * @param {Number} data Value to encode\n * @return {Number} Encoded value\n */\nexports.getBCHDigit = function (data) {\n let digit = 0\n\n while (data !== 0) {\n digit++\n data >>>= 1\n }\n\n return digit\n}\n\nexports.setToSJISFunction = function setToSJISFunction (f) {\n if (typeof f !== 'function') {\n throw new Error('\"toSJISFunc\" is not a valid function.')\n }\n\n toSJISFunction = f\n}\n\nexports.isKanjiModeEnabled = function () {\n return typeof toSJISFunction !== 'undefined'\n}\n\nexports.toSJIS = function toSJIS (kanji) {\n return toSJISFunction(kanji)\n}\n","exports.L = { bit: 1 }\nexports.M = { bit: 0 }\nexports.Q = { bit: 3 }\nexports.H = { bit: 2 }\n\nfunction fromString (string) {\n if (typeof string !== 'string') {\n throw new Error('Param is not a string')\n }\n\n const lcStr = string.toLowerCase()\n\n switch (lcStr) {\n case 'l':\n case 'low':\n return exports.L\n\n case 'm':\n case 'medium':\n return exports.M\n\n case 'q':\n case 'quartile':\n return exports.Q\n\n case 'h':\n case 'high':\n return exports.H\n\n default:\n throw new Error('Unknown EC Level: ' + string)\n }\n}\n\nexports.isValid = function isValid (level) {\n return level && typeof level.bit !== 'undefined' &&\n level.bit >= 0 && level.bit < 4\n}\n\nexports.from = function from (value, defaultValue) {\n if (exports.isValid(value)) {\n return value\n }\n\n try {\n return fromString(value)\n } catch (e) {\n return defaultValue\n }\n}\n","const ECLevel = require('./error-correction-level')\r\n\r\nconst EC_BLOCKS_TABLE = [\r\n// L M Q H\r\n 1, 1, 1, 1,\r\n 1, 1, 1, 1,\r\n 1, 1, 2, 2,\r\n 1, 2, 2, 4,\r\n 1, 2, 4, 4,\r\n 2, 4, 4, 4,\r\n 2, 4, 6, 5,\r\n 2, 4, 6, 6,\r\n 2, 5, 8, 8,\r\n 4, 5, 8, 8,\r\n 4, 5, 8, 11,\r\n 4, 8, 10, 11,\r\n 4, 9, 12, 16,\r\n 4, 9, 16, 16,\r\n 6, 10, 12, 18,\r\n 6, 10, 17, 16,\r\n 6, 11, 16, 19,\r\n 6, 13, 18, 21,\r\n 7, 14, 21, 25,\r\n 8, 16, 20, 25,\r\n 8, 17, 23, 25,\r\n 9, 17, 23, 34,\r\n 9, 18, 25, 30,\r\n 10, 20, 27, 32,\r\n 12, 21, 29, 35,\r\n 12, 23, 34, 37,\r\n 12, 25, 34, 40,\r\n 13, 26, 35, 42,\r\n 14, 28, 38, 45,\r\n 15, 29, 40, 48,\r\n 16, 31, 43, 51,\r\n 17, 33, 45, 54,\r\n 18, 35, 48, 57,\r\n 19, 37, 51, 60,\r\n 19, 38, 53, 63,\r\n 20, 40, 56, 66,\r\n 21, 43, 59, 70,\r\n 22, 45, 62, 74,\r\n 24, 47, 65, 77,\r\n 25, 49, 68, 81\r\n]\r\n\r\nconst EC_CODEWORDS_TABLE = [\r\n// L M Q H\r\n 7, 10, 13, 17,\r\n 10, 16, 22, 28,\r\n 15, 26, 36, 44,\r\n 20, 36, 52, 64,\r\n 26, 48, 72, 88,\r\n 36, 64, 96, 112,\r\n 40, 72, 108, 130,\r\n 48, 88, 132, 156,\r\n 60, 110, 160, 192,\r\n 72, 130, 192, 224,\r\n 80, 150, 224, 264,\r\n 96, 176, 260, 308,\r\n 104, 198, 288, 352,\r\n 120, 216, 320, 384,\r\n 132, 240, 360, 432,\r\n 144, 280, 408, 480,\r\n 168, 308, 448, 532,\r\n 180, 338, 504, 588,\r\n 196, 364, 546, 650,\r\n 224, 416, 600, 700,\r\n 224, 442, 644, 750,\r\n 252, 476, 690, 816,\r\n 270, 504, 750, 900,\r\n 300, 560, 810, 960,\r\n 312, 588, 870, 1050,\r\n 336, 644, 952, 1110,\r\n 360, 700, 1020, 1200,\r\n 390, 728, 1050, 1260,\r\n 420, 784, 1140, 1350,\r\n 450, 812, 1200, 1440,\r\n 480, 868, 1290, 1530,\r\n 510, 924, 1350, 1620,\r\n 540, 980, 1440, 1710,\r\n 570, 1036, 1530, 1800,\r\n 570, 1064, 1590, 1890,\r\n 600, 1120, 1680, 1980,\r\n 630, 1204, 1770, 2100,\r\n 660, 1260, 1860, 2220,\r\n 720, 1316, 1950, 2310,\r\n 750, 1372, 2040, 2430\r\n]\r\n\r\n/**\r\n * Returns the number of error correction block that the QR Code should contain\r\n * for the specified version and error correction level.\r\n *\r\n * @param {Number} version QR Code version\r\n * @param {Number} errorCorrectionLevel Error correction level\r\n * @return {Number} Number of error correction blocks\r\n */\r\nexports.getBlocksCount = function getBlocksCount (version, errorCorrectionLevel) {\r\n switch (errorCorrectionLevel) {\r\n case ECLevel.L:\r\n return EC_BLOCKS_TABLE[(version - 1) * 4 + 0]\r\n case ECLevel.M:\r\n return EC_BLOCKS_TABLE[(version - 1) * 4 + 1]\r\n case ECLevel.Q:\r\n return EC_BLOCKS_TABLE[(version - 1) * 4 + 2]\r\n case ECLevel.H:\r\n return EC_BLOCKS_TABLE[(version - 1) * 4 + 3]\r\n default:\r\n return undefined\r\n }\r\n}\r\n\r\n/**\r\n * Returns the number of error correction codewords to use for the specified\r\n * version and error correction level.\r\n *\r\n * @param {Number} version QR Code version\r\n * @param {Number} errorCorrectionLevel Error correction level\r\n * @return {Number} Number of error correction codewords\r\n */\r\nexports.getTotalCodewordsCount = function getTotalCodewordsCount (version, errorCorrectionLevel) {\r\n switch (errorCorrectionLevel) {\r\n case ECLevel.L:\r\n return EC_CODEWORDS_TABLE[(version - 1) * 4 + 0]\r\n case ECLevel.M:\r\n return EC_CODEWORDS_TABLE[(version - 1) * 4 + 1]\r\n case ECLevel.Q:\r\n return EC_CODEWORDS_TABLE[(version - 1) * 4 + 2]\r\n case ECLevel.H:\r\n return EC_CODEWORDS_TABLE[(version - 1) * 4 + 3]\r\n default:\r\n return undefined\r\n }\r\n}\r\n","const GF = require('./galois-field')\n\n/**\n * Multiplies two polynomials inside Galois Field\n *\n * @param {Uint8Array} p1 Polynomial\n * @param {Uint8Array} p2 Polynomial\n * @return {Uint8Array} Product of p1 and p2\n */\nexports.mul = function mul (p1, p2) {\n const coeff = new Uint8Array(p1.length + p2.length - 1)\n\n for (let i = 0; i < p1.length; i++) {\n for (let j = 0; j < p2.length; j++) {\n coeff[i + j] ^= GF.mul(p1[i], p2[j])\n }\n }\n\n return coeff\n}\n\n/**\n * Calculate the remainder of polynomials division\n *\n * @param {Uint8Array} divident Polynomial\n * @param {Uint8Array} divisor Polynomial\n * @return {Uint8Array} Remainder\n */\nexports.mod = function mod (divident, divisor) {\n let result = new Uint8Array(divident)\n\n while ((result.length - divisor.length) >= 0) {\n const coeff = result[0]\n\n for (let i = 0; i < divisor.length; i++) {\n result[i] ^= GF.mul(divisor[i], coeff)\n }\n\n // remove all zeros from buffer head\n let offset = 0\n while (offset < result.length && result[offset] === 0) offset++\n result = result.slice(offset)\n }\n\n return result\n}\n\n/**\n * Generate an irreducible generator polynomial of specified degree\n * (used by Reed-Solomon encoder)\n *\n * @param {Number} degree Degree of the generator polynomial\n * @return {Uint8Array} Buffer containing polynomial coefficients\n */\nexports.generateECPolynomial = function generateECPolynomial (degree) {\n let poly = new Uint8Array([1])\n for (let i = 0; i < degree; i++) {\n poly = exports.mul(poly, new Uint8Array([1, GF.exp(i)]))\n }\n\n return poly\n}\n","const EXP_TABLE = new Uint8Array(512)\nconst LOG_TABLE = new Uint8Array(256)\n/**\n * Precompute the log and anti-log tables for faster computation later\n *\n * For each possible value in the galois field 2^8, we will pre-compute\n * the logarithm and anti-logarithm (exponential) of this value\n *\n * ref {@link https://en.wikiversity.org/wiki/Reed%E2%80%93Solomon_codes_for_coders#Introduction_to_mathematical_fields}\n */\n;(function initTables () {\n let x = 1\n for (let i = 0; i < 255; i++) {\n EXP_TABLE[i] = x\n LOG_TABLE[x] = i\n\n x <<= 1 // multiply by 2\n\n // The QR code specification says to use byte-wise modulo 100011101 arithmetic.\n // This means that when a number is 256 or larger, it should be XORed with 0x11D.\n if (x & 0x100) { // similar to x >= 256, but a lot faster (because 0x100 == 256)\n x ^= 0x11D\n }\n }\n\n // Optimization: double the size of the anti-log table so that we don't need to mod 255 to\n // stay inside the bounds (because we will mainly use this table for the multiplication of\n // two GF numbers, no more).\n // @see {@link mul}\n for (let i = 255; i < 512; i++) {\n EXP_TABLE[i] = EXP_TABLE[i - 255]\n }\n}())\n\n/**\n * Returns log value of n inside Galois Field\n *\n * @param {Number} n\n * @return {Number}\n */\nexports.log = function log (n) {\n if (n < 1) throw new Error('log(' + n + ')')\n return LOG_TABLE[n]\n}\n\n/**\n * Returns anti-log value of n inside Galois Field\n *\n * @param {Number} n\n * @return {Number}\n */\nexports.exp = function exp (n) {\n return EXP_TABLE[n]\n}\n\n/**\n * Multiplies two number inside Galois Field\n *\n * @param {Number} x\n * @param {Number} y\n * @return {Number}\n */\nexports.mul = function mul (x, y) {\n if (x === 0 || y === 0) return 0\n\n // should be EXP_TABLE[(LOG_TABLE[x] + LOG_TABLE[y]) % 255] if EXP_TABLE wasn't oversized\n // @see {@link initTables}\n return EXP_TABLE[LOG_TABLE[x] + LOG_TABLE[y]]\n}\n","/**\n * Check if QR Code version is valid\n *\n * @param {Number} version QR Code version\n * @return {Boolean} true if valid version, false otherwise\n */\nexports.isValid = function isValid (version) {\n return !isNaN(version) && version >= 1 && version <= 40\n}\n","const numeric = '[0-9]+'\nconst alphanumeric = '[A-Z $%*+\\\\-./:]+'\nlet kanji = '(?:[u3000-u303F]|[u3040-u309F]|[u30A0-u30FF]|' +\n '[uFF00-uFFEF]|[u4E00-u9FAF]|[u2605-u2606]|[u2190-u2195]|u203B|' +\n '[u2010u2015u2018u2019u2025u2026u201Cu201Du2225u2260]|' +\n '[u0391-u0451]|[u00A7u00A8u00B1u00B4u00D7u00F7])+'\nkanji = kanji.replace(/u/g, '\\\\u')\n\nconst byte = '(?:(?![A-Z0-9 $%*+\\\\-./:]|' + kanji + ')(?:.|[\\r\\n]))+'\n\nexports.KANJI = new RegExp(kanji, 'g')\nexports.BYTE_KANJI = new RegExp('[^A-Z0-9 $%*+\\\\-./:]+', 'g')\nexports.BYTE = new RegExp(byte, 'g')\nexports.NUMERIC = new RegExp(numeric, 'g')\nexports.ALPHANUMERIC = new RegExp(alphanumeric, 'g')\n\nconst TEST_KANJI = new RegExp('^' + kanji + '$')\nconst TEST_NUMERIC = new RegExp('^' + numeric + '$')\nconst TEST_ALPHANUMERIC = new RegExp('^[A-Z0-9 $%*+\\\\-./:]+$')\n\nexports.testKanji = function testKanji (str) {\n return TEST_KANJI.test(str)\n}\n\nexports.testNumeric = function testNumeric (str) {\n return TEST_NUMERIC.test(str)\n}\n\nexports.testAlphanumeric = function testAlphanumeric (str) {\n return TEST_ALPHANUMERIC.test(str)\n}\n","const VersionCheck = require('./version-check')\nconst Regex = require('./regex')\n\n/**\n * Numeric mode encodes data from the decimal digit set (0 - 9)\n * (byte values 30HEX to 39HEX).\n * Normally, 3 data characters are represented by 10 bits.\n *\n * @type {Object}\n */\nexports.NUMERIC = {\n id: 'Numeric',\n bit: 1 << 0,\n ccBits: [10, 12, 14]\n}\n\n/**\n * Alphanumeric mode encodes data from a set of 45 characters,\n * i.e. 10 numeric digits (0 - 9),\n * 26 alphabetic characters (A - Z),\n * and 9 symbols (SP, $, %, *, +, -, ., /, :).\n * Normally, two input characters are represented by 11 bits.\n *\n * @type {Object}\n */\nexports.ALPHANUMERIC = {\n id: 'Alphanumeric',\n bit: 1 << 1,\n ccBits: [9, 11, 13]\n}\n\n/**\n * In byte mode, data is encoded at 8 bits per character.\n *\n * @type {Object}\n */\nexports.BYTE = {\n id: 'Byte',\n bit: 1 << 2,\n ccBits: [8, 16, 16]\n}\n\n/**\n * The Kanji mode efficiently encodes Kanji characters in accordance with\n * the Shift JIS system based on JIS X 0208.\n * The Shift JIS values are shifted from the JIS X 0208 values.\n * JIS X 0208 gives details of the shift coded representation.\n * Each two-byte character value is compacted to a 13-bit binary codeword.\n *\n * @type {Object}\n */\nexports.KANJI = {\n id: 'Kanji',\n bit: 1 << 3,\n ccBits: [8, 10, 12]\n}\n\n/**\n * Mixed mode will contain a sequences of data in a combination of any of\n * the modes described above\n *\n * @type {Object}\n */\nexports.MIXED = {\n bit: -1\n}\n\n/**\n * Returns the number of bits needed to store the data length\n * according to QR Code specifications.\n *\n * @param {Mode} mode Data mode\n * @param {Number} version QR Code version\n * @return {Number} Number of bits\n */\nexports.getCharCountIndicator = function getCharCountIndicator (mode, version) {\n if (!mode.ccBits) throw new Error('Invalid mode: ' + mode)\n\n if (!VersionCheck.isValid(version)) {\n throw new Error('Invalid version: ' + version)\n }\n\n if (version >= 1 && version < 10) return mode.ccBits[0]\n else if (version < 27) return mode.ccBits[1]\n return mode.ccBits[2]\n}\n\n/**\n * Returns the most efficient mode to store the specified data\n *\n * @param {String} dataStr Input data string\n * @return {Mode} Best mode\n */\nexports.getBestModeForData = function getBestModeForData (dataStr) {\n if (Regex.testNumeric(dataStr)) return exports.NUMERIC\n else if (Regex.testAlphanumeric(dataStr)) return exports.ALPHANUMERIC\n else if (Regex.testKanji(dataStr)) return exports.KANJI\n else return exports.BYTE\n}\n\n/**\n * Return mode name as string\n *\n * @param {Mode} mode Mode object\n * @returns {String} Mode name\n */\nexports.toString = function toString (mode) {\n if (mode && mode.id) return mode.id\n throw new Error('Invalid mode')\n}\n\n/**\n * Check if input param is a valid mode object\n *\n * @param {Mode} mode Mode object\n * @returns {Boolean} True if valid mode, false otherwise\n */\nexports.isValid = function isValid (mode) {\n return mode && mode.bit && mode.ccBits\n}\n\n/**\n * Get mode object from its name\n *\n * @param {String} string Mode name\n * @returns {Mode} Mode object\n */\nfunction fromString (string) {\n if (typeof string !== 'string') {\n throw new Error('Param is not a string')\n }\n\n const lcStr = string.toLowerCase()\n\n switch (lcStr) {\n case 'numeric':\n return exports.NUMERIC\n case 'alphanumeric':\n return exports.ALPHANUMERIC\n case 'kanji':\n return exports.KANJI\n case 'byte':\n return exports.BYTE\n default:\n throw new Error('Unknown mode: ' + string)\n }\n}\n\n/**\n * Returns mode from a value.\n * If value is not a valid mode, returns defaultValue\n *\n * @param {Mode|String} value Encoding mode\n * @param {Mode} defaultValue Fallback value\n * @return {Mode} Encoding mode\n */\nexports.from = function from (value, defaultValue) {\n if (exports.isValid(value)) {\n return value\n }\n\n try {\n return fromString(value)\n } catch (e) {\n return defaultValue\n }\n}\n","const Utils = require('./utils')\nconst ECCode = require('./error-correction-code')\nconst ECLevel = require('./error-correction-level')\nconst Mode = require('./mode')\nconst VersionCheck = require('./version-check')\n\n// Generator polynomial used to encode version information\nconst G18 = (1 << 12) | (1 << 11) | (1 << 10) | (1 << 9) | (1 << 8) | (1 << 5) | (1 << 2) | (1 << 0)\nconst G18_BCH = Utils.getBCHDigit(G18)\n\nfunction getBestVersionForDataLength (mode, length, errorCorrectionLevel) {\n for (let currentVersion = 1; currentVersion <= 40; currentVersion++) {\n if (length <= exports.getCapacity(currentVersion, errorCorrectionLevel, mode)) {\n return currentVersion\n }\n }\n\n return undefined\n}\n\nfunction getReservedBitsCount (mode, version) {\n // Character count indicator + mode indicator bits\n return Mode.getCharCountIndicator(mode, version) + 4\n}\n\nfunction getTotalBitsFromDataArray (segments, version) {\n let totalBits = 0\n\n segments.forEach(function (data) {\n const reservedBits = getReservedBitsCount(data.mode, version)\n totalBits += reservedBits + data.getBitsLength()\n })\n\n return totalBits\n}\n\nfunction getBestVersionForMixedData (segments, errorCorrectionLevel) {\n for (let currentVersion = 1; currentVersion <= 40; currentVersion++) {\n const length = getTotalBitsFromDataArray(segments, currentVersion)\n if (length <= exports.getCapacity(currentVersion, errorCorrectionLevel, Mode.MIXED)) {\n return currentVersion\n }\n }\n\n return undefined\n}\n\n/**\n * Returns version number from a value.\n * If value is not a valid version, returns defaultValue\n *\n * @param {Number|String} value QR Code version\n * @param {Number} defaultValue Fallback value\n * @return {Number} QR Code version number\n */\nexports.from = function from (value, defaultValue) {\n if (VersionCheck.isValid(value)) {\n return parseInt(value, 10)\n }\n\n return defaultValue\n}\n\n/**\n * Returns how much data can be stored with the specified QR code version\n * and error correction level\n *\n * @param {Number} version QR Code version (1-40)\n * @param {Number} errorCorrectionLevel Error correction level\n * @param {Mode} mode Data mode\n * @return {Number} Quantity of storable data\n */\nexports.getCapacity = function getCapacity (version, errorCorrectionLevel, mode) {\n if (!VersionCheck.isValid(version)) {\n throw new Error('Invalid QR Code version')\n }\n\n // Use Byte mode as default\n if (typeof mode === 'undefined') mode = Mode.BYTE\n\n // Total codewords for this QR code version (Data + Error correction)\n const totalCodewords = Utils.getSymbolTotalCodewords(version)\n\n // Total number of error correction codewords\n const ecTotalCodewords = ECCode.getTotalCodewordsCount(version, errorCorrectionLevel)\n\n // Total number of data codewords\n const dataTotalCodewordsBits = (totalCodewords - ecTotalCodewords) * 8\n\n if (mode === Mode.MIXED) return dataTotalCodewordsBits\n\n const usableBits = dataTotalCodewordsBits - getReservedBitsCount(mode, version)\n\n // Return max number of storable codewords\n switch (mode) {\n case Mode.NUMERIC:\n return Math.floor((usableBits / 10) * 3)\n\n case Mode.ALPHANUMERIC:\n return Math.floor((usableBits / 11) * 2)\n\n case Mode.KANJI:\n return Math.floor(usableBits / 13)\n\n case Mode.BYTE:\n default:\n return Math.floor(usableBits / 8)\n }\n}\n\n/**\n * Returns the minimum version needed to contain the amount of data\n *\n * @param {Segment} data Segment of data\n * @param {Number} [errorCorrectionLevel=H] Error correction level\n * @param {Mode} mode Data mode\n * @return {Number} QR Code version\n */\nexports.getBestVersionForData = function getBestVersionForData (data, errorCorrectionLevel) {\n let seg\n\n const ecl = ECLevel.from(errorCorrectionLevel, ECLevel.M)\n\n if (Array.isArray(data)) {\n if (data.length > 1) {\n return getBestVersionForMixedData(data, ecl)\n }\n\n if (data.length === 0) {\n return 1\n }\n\n seg = data[0]\n } else {\n seg = data\n }\n\n return getBestVersionForDataLength(seg.mode, seg.getLength(), ecl)\n}\n\n/**\n * Returns version information with relative error correction bits\n *\n * The version information is included in QR Code symbols of version 7 or larger.\n * It consists of an 18-bit sequence containing 6 data bits,\n * with 12 error correction bits calculated using the (18, 6) Golay code.\n *\n * @param {Number} version QR Code version\n * @return {Number} Encoded version info bits\n */\nexports.getEncodedBits = function getEncodedBits (version) {\n if (!VersionCheck.isValid(version) || version < 7) {\n throw new Error('Invalid QR Code version')\n }\n\n let d = version << 12\n\n while (Utils.getBCHDigit(d) - G18_BCH >= 0) {\n d ^= (G18 << (Utils.getBCHDigit(d) - G18_BCH))\n }\n\n return (version << 12) | d\n}\n","'use strict';\n\n/******************************************************************************\n * Created 2008-08-19.\n *\n * Dijkstra path-finding functions. Adapted from the Dijkstar Python project.\n *\n * Copyright (C) 2008\n * Wyatt Baldwin <self@wyattbaldwin.com>\n * All rights reserved\n *\n * Licensed under the MIT license.\n *\n * http://www.opensource.org/licenses/mit-license.php\n *\n * THE SOFTWARE IS PROVIDED \"AS IS\", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR\n * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,\n * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE\n * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER\n * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,\n * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN\n * THE SOFTWARE.\n *****************************************************************************/\nvar dijkstra = {\n single_source_shortest_paths: function(graph, s, d) {\n // Predecessor map for each node that has been encountered.\n // node ID => predecessor node ID\n var predecessors = {};\n\n // Costs of shortest paths from s to all nodes encountered.\n // node ID => cost\n var costs = {};\n costs[s] = 0;\n\n // Costs of shortest paths from s to all nodes encountered; differs from\n // `costs` in that it provides easy access to the node that currently has\n // the known shortest path from s.\n // XXX: Do we actually need both `costs` and `open`?\n var open = dijkstra.PriorityQueue.make();\n open.push(s, 0);\n\n var closest,\n u, v,\n cost_of_s_to_u,\n adjacent_nodes,\n cost_of_e,\n cost_of_s_to_u_plus_cost_of_e,\n cost_of_s_to_v,\n first_visit;\n while (!open.empty()) {\n // In the nodes remaining in graph that have a known cost from s,\n // find the node, u, that currently has the shortest path from s.\n closest = open.pop();\n u = closest.value;\n cost_of_s_to_u = closest.cost;\n\n // Get nodes adjacent to u...\n adjacent_nodes = graph[u] || {};\n\n // ...and explore the edges that connect u to those nodes, updating\n // the cost of the shortest paths to any or all of those nodes as\n // necessary. v is the node across the current edge from u.\n for (v in adjacent_nodes) {\n if (adjacent_nodes.hasOwnProperty(v)) {\n // Get the cost of the edge running from u to v.\n cost_of_e = adjacent_nodes[v];\n\n // Cost of s to u plus the cost of u to v across e--this is *a*\n // cost from s to v that may or may not be less than the current\n // known cost to v.\n cost_of_s_to_u_plus_cost_of_e = cost_of_s_to_u + cost_of_e;\n\n // If we haven't visited v yet OR if the current known cost from s to\n // v is greater than the new cost we just found (cost of s to u plus\n // cost of u to v across e), update v's cost in the cost list and\n // update v's predecessor in the predecessor list (it's now u).\n cost_of_s_to_v = costs[v];\n first_visit = (typeof costs[v] === 'undefined');\n if (first_visit || cost_of_s_to_v > cost_of_s_to_u_plus_cost_of_e) {\n costs[v] = cost_of_s_to_u_plus_cost_of_e;\n open.push(v, cost_of_s_to_u_plus_cost_of_e);\n predecessors[v] = u;\n }\n }\n }\n }\n\n if (typeof d !== 'undefined' && typeof costs[d] === 'undefined') {\n var msg = ['Could not find a path from ', s, ' to ', d, '.'].join('');\n throw new Error(msg);\n }\n\n return predecessors;\n },\n\n extract_shortest_path_from_predecessor_list: function(predecessors, d) {\n var nodes = [];\n var u = d;\n var predecessor;\n while (u) {\n nodes.push(u);\n predecessor = predecessors[u];\n u = predecessors[u];\n }\n nodes.reverse();\n return nodes;\n },\n\n find_path: function(graph, s, d) {\n var predecessors = dijkstra.single_source_shortest_paths(graph, s, d);\n return dijkstra.extract_shortest_path_from_predecessor_list(\n predecessors, d);\n },\n\n /**\n * A very naive priority queue implementation.\n */\n PriorityQueue: {\n make: function (opts) {\n var T = dijkstra.PriorityQueue,\n t = {},\n key;\n opts = opts || {};\n for (key in T) {\n if (T.hasOwnProperty(key)) {\n t[key] = T[key];\n }\n }\n t.queue = [];\n t.sorter = opts.sorter || T.default_sorter;\n return t;\n },\n\n default_sorter: function (a, b) {\n return a.cost - b.cost;\n },\n\n /**\n * Add a new item to the queue and ensure the highest priority element\n * is at the front of the queue.\n */\n push: function (value, cost) {\n var item = {value: value, cost: cost};\n this.queue.push(item);\n this.queue.sort(this.sorter);\n },\n\n /**\n * Return the highest priority element in the queue.\n */\n pop: function () {\n return this.queue.shift();\n },\n\n empty: function () {\n return this.queue.length === 0;\n }\n }\n};\n\n\n// node.js module exports\nif (typeof module !== 'undefined') {\n module.exports = dijkstra;\n}\n","const Mode = require('./mode')\nconst NumericData = require('./numeric-data')\nconst AlphanumericData = require('./alphanumeric-data')\nconst ByteData = require('./byte-data')\nconst KanjiData = require('./kanji-data')\nconst Regex = require('./regex')\nconst Utils = require('./utils')\nconst dijkstra = require('dijkstrajs')\n\n/**\n * Returns UTF8 byte length\n *\n * @param {String} str Input string\n * @return {Number} Number of byte\n */\nfunction getStringByteLength (str) {\n return unescape(encodeURIComponent(str)).length\n}\n\n/**\n * Get a list of segments of the specified mode\n * from a string\n *\n * @param {Mode} mode Segment mode\n * @param {String} str String to process\n * @return {Array} Array of object with segments data\n */\nfunction getSegments (regex, mode, str) {\n const segments = []\n let result\n\n while ((result = regex.exec(str)) !== null) {\n segments.push({\n data: result[0],\n index: result.index,\n mode: mode,\n length: result[0].length\n })\n }\n\n return segments\n}\n\n/**\n * Extracts a series of segments with the appropriate\n * modes from a string\n *\n * @param {String} dataStr Input string\n * @return {Array} Array of object with segments data\n */\nfunction getSegmentsFromString (dataStr) {\n const numSegs = getSegments(Regex.NUMERIC, Mode.NUMERIC, dataStr)\n const alphaNumSegs = getSegments(Regex.ALPHANUMERIC, Mode.ALPHANUMERIC, dataStr)\n let byteSegs\n let kanjiSegs\n\n if (Utils.isKanjiModeEnabled()) {\n byteSegs = getSegments(Regex.BYTE, Mode.BYTE, dataStr)\n kanjiSegs = getSegments(Regex.KANJI, Mode.KANJI, dataStr)\n } else {\n byteSegs = getSegments(Regex.BYTE_KANJI, Mode.BYTE, dataStr)\n kanjiSegs = []\n }\n\n const segs = numSegs.concat(alphaNumSegs, byteSegs, kanjiSegs)\n\n return segs\n .sort(function (s1, s2) {\n return s1.index - s2.index\n })\n .map(function (obj) {\n return {\n data: obj.data,\n mode: obj.mode,\n length: obj.length\n }\n })\n}\n\n/**\n * Returns how many bits are needed to encode a string of\n * specified length with the specified mode\n *\n * @param {Number} length String length\n * @param {Mode} mode Segment mode\n * @return {Number} Bit length\n */\nfunction getSegmentBitsLength (length, mode) {\n switch (mode) {\n case Mode.NUMERIC:\n return NumericData.getBitsLength(length)\n case Mode.ALPHANUMERIC:\n return AlphanumericData.getBitsLength(length)\n case Mode.KANJI:\n return KanjiData.getBitsLength(length)\n case Mode.BYTE:\n return ByteData.getBitsLength(length)\n }\n}\n\n/**\n * Merges adjacent segments which have the same mode\n *\n * @param {Array} segs Array of object with segments data\n * @return {Array} Array of object with segments data\n */\nfunction mergeSegments (segs) {\n return segs.reduce(function (acc, curr) {\n const prevSeg = acc.length - 1 >= 0 ? acc[acc.length - 1] : null\n if (prevSeg && prevSeg.mode === curr.mode) {\n acc[acc.length - 1].data += curr.data\n return acc\n }\n\n acc.push(curr)\n return acc\n }, [])\n}\n\n/**\n * Generates a list of all possible nodes combination which\n * will be used to build a segments graph.\n *\n * Nodes are divided by groups. Each group will contain a list of all the modes\n * in which is possible to encode the given text.\n *\n * For example the text '12345' can be encoded as Numeric, Alphanumeric or Byte.\n * The group for '12345' will contain then 3 objects, one for each\n * possible encoding mode.\n *\n * Each node represents a possible segment.\n *\n * @param {Array} segs Array of object with segments data\n * @return {Array} Array of object with segments data\n */\nfunction buildNodes (segs) {\n const nodes = []\n for (let i = 0; i < segs.length; i++) {\n const seg = segs[i]\n\n switch (seg.mode) {\n case Mode.NUMERIC:\n nodes.push([seg,\n { data: seg.data, mode: Mode.ALPHANUMERIC, length: seg.length },\n { data: seg.data, mode: Mode.BYTE, length: seg.length }\n ])\n break\n case Mode.ALPHANUMERIC:\n nodes.push([seg,\n { data: seg.data, mode: Mode.BYTE, length: seg.length }\n ])\n break\n case Mode.KANJI:\n nodes.push([seg,\n { data: seg.data, mode: Mode.BYTE, length: getStringByteLength(seg.data) }\n ])\n break\n case Mode.BYTE:\n nodes.push([\n { data: seg.data, mode: Mode.BYTE, length: getStringByteLength(seg.data) }\n ])\n }\n }\n\n return nodes\n}\n\n/**\n * Builds a graph from a list of nodes.\n * All segments in each node group will be connected with all the segments of\n * the next group and so on.\n *\n * At each connection will be assigned a weight depending on the\n * segment's byte length.\n *\n * @param {Array} nodes Array of object with segments data\n * @param {Number} version QR Code version\n * @return {Object} Graph of all possible segments\n */\nfunction buildGraph (nodes, version) {\n const table = {}\n const graph = { start: {} }\n let prevNodeIds = ['start']\n\n for (let i = 0; i < nodes.length; i++) {\n const nodeGroup = nodes[i]\n const currentNodeIds = []\n\n for (let j = 0; j < nodeGroup.length; j++) {\n const node = nodeGroup[j]\n const key = '' + i + j\n\n currentNodeIds.push(key)\n table[key] = { node: node, lastCount: 0 }\n graph[key] = {}\n\n for (let n = 0; n < prevNodeIds.length; n++) {\n const prevNodeId = prevNodeIds[n]\n\n if (table[prevNodeId] && table[prevNodeId].node.mode === node.mode) {\n graph[prevNodeId][key] =\n getSegmentBitsLength(table[prevNodeId].lastCount + node.length, node.mode) -\n getSegmentBitsLength(table[prevNodeId].lastCount, node.mode)\n\n table[prevNodeId].lastCount += node.length\n } else {\n if (table[prevNodeId]) table[prevNodeId].lastCount = node.length\n\n graph[prevNodeId][key] = getSegmentBitsLength(node.length, node.mode) +\n 4 + Mode.getCharCountIndicator(node.mode, version) // switch cost\n }\n }\n }\n\n prevNodeIds = currentNodeIds\n }\n\n for (let n = 0; n < prevNodeIds.length; n++) {\n graph[prevNodeIds[n]].end = 0\n }\n\n return { map: graph, table: table }\n}\n\n/**\n * Builds a segment from a specified data and mode.\n * If a mode is not specified, the more suitable will be used.\n *\n * @param {String} data Input data\n * @param {Mode | String} modesHint Data mode\n * @return {Segment} Segment\n */\nfunction buildSingleSegment (data, modesHint) {\n let mode\n const bestMode = Mode.getBestModeForData(data)\n\n mode = Mode.from(modesHint, bestMode)\n\n // Make sure data can be encoded\n if (mode !== Mode.BYTE && mode.bit < bestMode.bit) {\n throw new Error('\"' + data + '\"' +\n ' cannot be encoded with mode ' + Mode.toString(mode) +\n '.\\n Suggested mode is: ' + Mode.toString(bestMode))\n }\n\n // Use Mode.BYTE if Kanji support is disabled\n if (mode === Mode.KANJI && !Utils.isKanjiModeEnabled()) {\n mode = Mode.BYTE\n }\n\n switch (mode) {\n case Mode.NUMERIC:\n return new NumericData(data)\n\n case Mode.ALPHANUMERIC:\n return new AlphanumericData(data)\n\n case Mode.KANJI:\n return new KanjiData(data)\n\n case Mode.BYTE:\n return new ByteData(data)\n }\n}\n\n/**\n * Builds a list of segments from an array.\n * Array can contain Strings or Objects with segment's info.\n *\n * For each item which is a string, will be generated a segment with the given\n * string and the more appropriate encoding mode.\n *\n * For each item which is an object, will be generated a segment with the given\n * data and mode.\n * Objects must contain at least the property \"data\".\n * If property \"mode\" is not present, the more suitable mode will be used.\n *\n * @param {Array} array Array of objects with segments data\n * @return {Array} Array of Segments\n */\nexports.fromArray = function fromArray (array) {\n return array.reduce(function (acc, seg) {\n if (typeof seg === 'string') {\n acc.push(buildSingleSegment(seg, null))\n } else if (seg.data) {\n acc.push(buildSingleSegment(seg.data, seg.mode))\n }\n\n return acc\n }, [])\n}\n\n/**\n * Builds an optimized sequence of segments from a string,\n * which will produce the shortest possible bitstream.\n *\n * @param {String} data Input string\n * @param {Number} version QR Code version\n * @return {Array} Array of segments\n */\nexports.fromString = function fromString (data, version) {\n const segs = getSegmentsFromString(data, Utils.isKanjiModeEnabled())\n\n const nodes = buildNodes(segs)\n const graph = buildGraph(nodes, version)\n const path = dijkstra.find_path(graph.map, 'start', 'end')\n\n const optimizedSegs = []\n for (let i = 1; i < path.length - 1; i++) {\n optimizedSegs.push(graph.table[path[i]].node)\n }\n\n return exports.fromArray(mergeSegments(optimizedSegs))\n}\n\n/**\n * Splits a string in various segments with the modes which\n * best represent their content.\n * The produced segments are far from being optimized.\n * The output of this function is only used to estimate a QR Code version\n * which may contain the data.\n *\n * @param {string} data Input string\n * @return {Array} Array of segments\n */\nexports.rawSplit = function rawSplit (data) {\n return exports.fromArray(\n getSegmentsFromString(data, Utils.isKanjiModeEnabled())\n )\n}\n","const Mode = require('./mode')\n\nfunction NumericData (data) {\n this.mode = Mode.NUMERIC\n this.data = data.toString()\n}\n\nNumericData.getBitsLength = function getBitsLength (length) {\n return 10 * Math.floor(length / 3) + ((length % 3) ? ((length % 3) * 3 + 1) : 0)\n}\n\nNumericData.prototype.getLength = function getLength () {\n return this.data.length\n}\n\nNumericData.prototype.getBitsLength = function getBitsLength () {\n return NumericData.getBitsLength(this.data.length)\n}\n\nNumericData.prototype.write = function write (bitBuffer) {\n let i, group, value\n\n // The input data string is divided into groups of three digits,\n // and each group is converted to its 10-bit binary equivalent.\n for (i = 0; i + 3 <= this.data.length; i += 3) {\n group = this.data.substr(i, 3)\n value = parseInt(group, 10)\n\n bitBuffer.put(value, 10)\n }\n\n // If the number of input digits is not an exact multiple of three,\n // the final one or two digits are converted to 4 or 7 bits respectively.\n const remainingNum = this.data.length - i\n if (remainingNum > 0) {\n group = this.data.substr(i)\n value = parseInt(group, 10)\n\n bitBuffer.put(value, remainingNum * 3 + 1)\n }\n}\n\nmodule.exports = NumericData\n","const Mode = require('./mode')\n\n/**\n * Array of characters available in alphanumeric mode\n *\n * As per QR Code specification, to each character\n * is assigned a value from 0 to 44 which in this case coincides\n * with the array index\n *\n * @type {Array}\n */\nconst ALPHA_NUM_CHARS = [\n '0', '1', '2', '3', '4', '5', '6', '7', '8', '9',\n 'A', 'B', 'C', 'D', 'E', 'F', 'G', 'H', 'I', 'J', 'K', 'L', 'M',\n 'N', 'O', 'P', 'Q', 'R', 'S', 'T', 'U', 'V', 'W', 'X', 'Y', 'Z',\n ' ', '$', '%', '*', '+', '-', '.', '/', ':'\n]\n\nfunction AlphanumericData (data) {\n this.mode = Mode.ALPHANUMERIC\n this.data = data\n}\n\nAlphanumericData.getBitsLength = function getBitsLength (length) {\n return 11 * Math.floor(length / 2) + 6 * (length % 2)\n}\n\nAlphanumericData.prototype.getLength = function getLength () {\n return this.data.length\n}\n\nAlphanumericData.prototype.getBitsLength = function getBitsLength () {\n return AlphanumericData.getBitsLength(this.data.length)\n}\n\nAlphanumericData.prototype.write = function write (bitBuffer) {\n let i\n\n // Input data characters are divided into groups of two characters\n // and encoded as 11-bit binary codes.\n for (i = 0; i + 2 <= this.data.length; i += 2) {\n // The character value of the first character is multiplied by 45\n let value = ALPHA_NUM_CHARS.indexOf(this.data[i]) * 45\n\n // The character value of the second digit is added to the product\n value += ALPHA_NUM_CHARS.indexOf(this.data[i + 1])\n\n // The sum is then stored as 11-bit binary number\n bitBuffer.put(value, 11)\n }\n\n // If the number of input data characters is not a multiple of two,\n // the character value of the final character is encoded as a 6-bit binary number.\n if (this.data.length % 2) {\n bitBuffer.put(ALPHA_NUM_CHARS.indexOf(this.data[i]), 6)\n }\n}\n\nmodule.exports = AlphanumericData\n","const Mode = require('./mode')\n\nfunction ByteData (data) {\n this.mode = Mode.BYTE\n if (typeof (data) === 'string') {\n this.data = new TextEncoder().encode(data)\n } else {\n this.data = new Uint8Array(data)\n }\n}\n\nByteData.getBitsLength = function getBitsLength (length) {\n return length * 8\n}\n\nByteData.prototype.getLength = function getLength () {\n return this.data.length\n}\n\nByteData.prototype.getBitsLength = function getBitsLength () {\n return ByteData.getBitsLength(this.data.length)\n}\n\nByteData.prototype.write = function (bitBuffer) {\n for (let i = 0, l = this.data.length; i < l; i++) {\n bitBuffer.put(this.data[i], 8)\n }\n}\n\nmodule.exports = ByteData\n","const Mode = require('./mode')\nconst Utils = require('./utils')\n\nfunction KanjiData (data) {\n this.mode = Mode.KANJI\n this.data = data\n}\n\nKanjiData.getBitsLength = function getBitsLength (length) {\n return length * 13\n}\n\nKanjiData.prototype.getLength = function getLength () {\n return this.data.length\n}\n\nKanjiData.prototype.getBitsLength = function getBitsLength () {\n return KanjiData.getBitsLength(this.data.length)\n}\n\nKanjiData.prototype.write = function (bitBuffer) {\n let i\n\n // In the Shift JIS system, Kanji characters are represented by a two byte combination.\n // These byte values are shifted from the JIS X 0208 values.\n // JIS X 0208 gives details of the shift coded representation.\n for (i = 0; i < this.data.length; i++) {\n let value = Utils.toSJIS(this.data[i])\n\n // For characters with Shift JIS values from 0x8140 to 0x9FFC:\n if (value >= 0x8140 && value <= 0x9FFC) {\n // Subtract 0x8140 from Shift JIS value\n value -= 0x8140\n\n // For characters with Shift JIS values from 0xE040 to 0xEBBF\n } else if (value >= 0xE040 && value <= 0xEBBF) {\n // Subtract 0xC140 from Shift JIS value\n value -= 0xC140\n } else {\n throw new Error(\n 'Invalid SJIS character: ' + this.data[i] + '\\n' +\n 'Make sure your charset is UTF-8')\n }\n\n // Multiply most significant byte of result by 0xC0\n // and add least significant byte to product\n value = (((value >>> 8) & 0xff) * 0xC0) + (value & 0xff)\n\n // Convert result to a 13-bit binary string\n bitBuffer.put(value, 13)\n }\n}\n\nmodule.exports = KanjiData\n","const Utils = require('./utils')\nconst ECLevel = require('./error-correction-level')\nconst BitBuffer = require('./bit-buffer')\nconst BitMatrix = require('./bit-matrix')\nconst AlignmentPattern = require('./alignment-pattern')\nconst FinderPattern = require('./finder-pattern')\nconst MaskPattern = require('./mask-pattern')\nconst ECCode = require('./error-correction-code')\nconst ReedSolomonEncoder = require('./reed-solomon-encoder')\nconst Version = require('./version')\nconst FormatInfo = require('./format-info')\nconst Mode = require('./mode')\nconst Segments = require('./segments')\n\n/**\n * QRCode for JavaScript\n *\n * modified by Ryan Day for nodejs support\n * Copyright (c) 2011 Ryan Day\n *\n * Licensed under the MIT license:\n * http://www.opensource.org/licenses/mit-license.php\n *\n//---------------------------------------------------------------------\n// QRCode for JavaScript\n//\n// Copyright (c) 2009 Kazuhiko Arase\n//\n// URL: http://www.d-project.com/\n//\n// Licensed under the MIT license:\n// http://www.opensource.org/licenses/mit-license.php\n//\n// The word \"QR Code\" is registered trademark of\n// DENSO WAVE INCORPORATED\n// http://www.denso-wave.com/qrcode/faqpatent-e.html\n//\n//---------------------------------------------------------------------\n*/\n\n/**\n * Add finder patterns bits to matrix\n *\n * @param {BitMatrix} matrix Modules matrix\n * @param {Number} version QR Code version\n */\nfunction setupFinderPattern (matrix, version) {\n const size = matrix.size\n const pos = FinderPattern.getPositions(version)\n\n for (let i = 0; i < pos.length; i++) {\n const row = pos[i][0]\n const col = pos[i][1]\n\n for (let r = -1; r <= 7; r++) {\n if (row + r <= -1 || size <= row + r) continue\n\n for (let c = -1; c <= 7; c++) {\n if (col + c <= -1 || size <= col + c) continue\n\n if ((r >= 0 && r <= 6 && (c === 0 || c === 6)) ||\n (c >= 0 && c <= 6 && (r === 0 || r === 6)) ||\n (r >= 2 && r <= 4 && c >= 2 && c <= 4)) {\n matrix.set(row + r, col + c, true, true)\n } else {\n matrix.set(row + r, col + c, false, true)\n }\n }\n }\n }\n}\n\n/**\n * Add timing pattern bits to matrix\n *\n * Note: this function must be called before {@link setupAlignmentPattern}\n *\n * @param {BitMatrix} matrix Modules matrix\n */\nfunction setupTimingPattern (matrix) {\n const size = matrix.size\n\n for (let r = 8; r < size - 8; r++) {\n const value = r % 2 === 0\n matrix.set(r, 6, value, true)\n matrix.set(6, r, value, true)\n }\n}\n\n/**\n * Add alignment patterns bits to matrix\n *\n * Note: this function must be called after {@link setupTimingPattern}\n *\n * @param {BitMatrix} matrix Modules matrix\n * @param {Number} version QR Code version\n */\nfunction setupAlignmentPattern (matrix, version) {\n const pos = AlignmentPattern.getPositions(version)\n\n for (let i = 0; i < pos.length; i++) {\n const row = pos[i][0]\n const col = pos[i][1]\n\n for (let r = -2; r <= 2; r++) {\n for (let c = -2; c <= 2; c++) {\n if (r === -2 || r === 2 || c === -2 || c === 2 ||\n (r === 0 && c === 0)) {\n matrix.set(row + r, col + c, true, true)\n } else {\n matrix.set(row + r, col + c, false, true)\n }\n }\n }\n }\n}\n\n/**\n * Add version info bits to matrix\n *\n * @param {BitMatrix} matrix Modules matrix\n * @param {Number} version QR Code version\n */\nfunction setupVersionInfo (matrix, version) {\n const size = matrix.size\n const bits = Version.getEncodedBits(version)\n let row, col, mod\n\n for (let i = 0; i < 18; i++) {\n row = Math.floor(i / 3)\n col = i % 3 + size - 8 - 3\n mod = ((bits >> i) & 1) === 1\n\n matrix.set(row, col, mod, true)\n matrix.set(col, row, mod, true)\n }\n}\n\n/**\n * Add format info bits to matrix\n *\n * @param {BitMatrix} matrix Modules matrix\n * @param {ErrorCorrectionLevel} errorCorrectionLevel Error correction level\n * @param {Number} maskPattern Mask pattern reference value\n */\nfunction setupFormatInfo (matrix, errorCorrectionLevel, maskPattern) {\n const size = matrix.size\n const bits = FormatInfo.getEncodedBits(errorCorrectionLevel, maskPattern)\n let i, mod\n\n for (i = 0; i < 15; i++) {\n mod = ((bits >> i) & 1) === 1\n\n // vertical\n if (i < 6) {\n matrix.set(i, 8, mod, true)\n } else if (i < 8) {\n matrix.set(i + 1, 8, mod, true)\n } else {\n matrix.set(size - 15 + i, 8, mod, true)\n }\n\n // horizontal\n if (i < 8) {\n matrix.set(8, size - i - 1, mod, true)\n } else if (i < 9) {\n matrix.set(8, 15 - i - 1 + 1, mod, true)\n } else {\n matrix.set(8, 15 - i - 1, mod, true)\n }\n }\n\n // fixed module\n matrix.set(size - 8, 8, 1, true)\n}\n\n/**\n * Add encoded data bits to matrix\n *\n * @param {BitMatrix} matrix Modules matrix\n * @param {Uint8Array} data Data codewords\n */\nfunction setupData (matrix, data) {\n const size = matrix.size\n let inc = -1\n let row = size - 1\n let bitIndex = 7\n let byteIndex = 0\n\n for (let col = size - 1; col > 0; col -= 2) {\n if (col === 6) col--\n\n while (true) {\n for (let c = 0; c < 2; c++) {\n if (!matrix.isReserved(row, col - c)) {\n let dark = false\n\n if (byteIndex < data.length) {\n dark = (((data[byteIndex] >>> bitIndex) & 1) === 1)\n }\n\n matrix.set(row, col - c, dark)\n bitIndex--\n\n if (bitIndex === -1) {\n byteIndex++\n bitIndex = 7\n }\n }\n }\n\n row += inc\n\n if (row < 0 || size <= row) {\n row -= inc\n inc = -inc\n break\n }\n }\n }\n}\n\n/**\n * Create encoded codewords from data input\n *\n * @param {Number} version QR Code version\n * @param {ErrorCorrectionLevel} errorCorrectionLevel Error correction level\n * @param {ByteData} data Data input\n * @return {Uint8Array} Buffer containing encoded codewords\n */\nfunction createData (version, errorCorrectionLevel, segments) {\n // Prepare data buffer\n const buffer = new BitBuffer()\n\n segments.forEach(function (data) {\n // prefix data with mode indicator (4 bits)\n buffer.put(data.mode.bit, 4)\n\n // Prefix data with character count indicator.\n // The character count indicator is a string of bits that represents the\n // number of characters that are being encoded.\n // The character count indicator must be placed after the mode indicator\n // and must be a certain number of bits long, depending on the QR version\n // and data mode\n // @see {@link Mode.getCharCountIndicator}.\n buffer.put(data.getLength(), Mode.getCharCountIndicator(data.mode, version))\n\n // add binary data sequence to buffer\n data.write(buffer)\n })\n\n // Calculate required number of bits\n const totalCodewords = Utils.getSymbolTotalCodewords(version)\n const ecTotalCodewords = ECCode.getTotalCodewordsCount(version, errorCorrectionLevel)\n const dataTotalCodewordsBits = (totalCodewords - ecTotalCodewords) * 8\n\n // Add a terminator.\n // If the bit string is shorter than the total number of required bits,\n // a terminator of up to four 0s must be added to the right side of the string.\n // If the bit string is more than four bits shorter than the required number of bits,\n // add four 0s to the end.\n if (buffer.getLengthInBits() + 4 <= dataTotalCodewordsBits) {\n buffer.put(0, 4)\n }\n\n // If the bit string is fewer than four bits shorter, add only the number of 0s that\n // are needed to reach the required number of bits.\n\n // After adding the terminator, if the number of bits in the string is not a multiple of 8,\n // pad the string on the right with 0s to make the string's length a multiple of 8.\n while (buffer.getLengthInBits() % 8 !== 0) {\n buffer.putBit(0)\n }\n\n // Add pad bytes if the string is still shorter than the total number of required bits.\n // Extend the buffer to fill the data capacity of the symbol corresponding to\n // the Version and Error Correction Level by adding the Pad Codewords 11101100 (0xEC)\n // and 00010001 (0x11) alternately.\n const remainingByte = (dataTotalCodewordsBits - buffer.getLengthInBits()) / 8\n for (let i = 0; i < remainingByte; i++) {\n buffer.put(i % 2 ? 0x11 : 0xEC, 8)\n }\n\n return createCodewords(buffer, version, errorCorrectionLevel)\n}\n\n/**\n * Encode input data with Reed-Solomon and return codewords with\n * relative error correction bits\n *\n * @param {BitBuffer} bitBuffer Data to encode\n * @param {Number} version QR Code version\n * @param {ErrorCorrectionLevel} errorCorrectionLevel Error correction level\n * @return {Uint8Array} Buffer containing encoded codewords\n */\nfunction createCodewords (bitBuffer, version, errorCorrectionLevel) {\n // Total codewords for this QR code version (Data + Error correction)\n const totalCodewords = Utils.getSymbolTotalCodewords(version)\n\n // Total number of error correction codewords\n const ecTotalCodewords = ECCode.getTotalCodewordsCount(version, errorCorrectionLevel)\n\n // Total number of data codewords\n const dataTotalCodewords = totalCodewords - ecTotalCodewords\n\n // Total number of blocks\n const ecTotalBlocks = ECCode.getBlocksCount(version, errorCorrectionLevel)\n\n // Calculate how many blocks each group should contain\n const blocksInGroup2 = totalCodewords % ecTotalBlocks\n const blocksInGroup1 = ecTotalBlocks - blocksInGroup2\n\n const totalCodewordsInGroup1 = Math.floor(totalCodewords / ecTotalBlocks)\n\n const dataCodewordsInGroup1 = Math.floor(dataTotalCodewords / ecTotalBlocks)\n const dataCodewordsInGroup2 = dataCodewordsInGroup1 + 1\n\n // Number of EC codewords is the same for both groups\n const ecCount = totalCodewordsInGroup1 - dataCodewordsInGroup1\n\n // Initialize a Reed-Solomon encoder with a generator polynomial of degree ecCount\n const rs = new ReedSolomonEncoder(ecCount)\n\n let offset = 0\n const dcData = new Array(ecTotalBlocks)\n const ecData = new Array(ecTotalBlocks)\n let maxDataSize = 0\n const buffer = new Uint8Array(bitBuffer.buffer)\n\n // Divide the buffer into the required number of blocks\n for (let b = 0; b < ecTotalBlocks; b++) {\n const dataSize = b < blocksInGroup1 ? dataCodewordsInGroup1 : dataCodewordsInGroup2\n\n // extract a block of data from buffer\n dcData[b] = buffer.slice(offset, offset + dataSize)\n\n // Calculate EC codewords for this data block\n ecData[b] = rs.encode(dcData[b])\n\n offset += dataSize\n maxDataSize = Math.max(maxDataSize, dataSize)\n }\n\n // Create final data\n // Interleave the data and error correction codewords from each block\n const data = new Uint8Array(totalCodewords)\n let index = 0\n let i, r\n\n // Add data codewords\n for (i = 0; i < maxDataSize; i++) {\n for (r = 0; r < ecTotalBlocks; r++) {\n if (i < dcData[r].length) {\n data[index++] = dcData[r][i]\n }\n }\n }\n\n // Apped EC codewords\n for (i = 0; i < ecCount; i++) {\n for (r = 0; r < ecTotalBlocks; r++) {\n data[index++] = ecData[r][i]\n }\n }\n\n return data\n}\n\n/**\n * Build QR Code symbol\n *\n * @param {String} data Input string\n * @param {Number} version QR Code version\n * @param {ErrorCorretionLevel} errorCorrectionLevel Error level\n * @param {MaskPattern} maskPattern Mask pattern\n * @return {Object} Object containing symbol data\n */\nfunction createSymbol (data, version, errorCorrectionLevel, maskPattern) {\n let segments\n\n if (Array.isArray(data)) {\n segments = Segments.fromArray(data)\n } else if (typeof data === 'string') {\n let estimatedVersion = version\n\n if (!estimatedVersion) {\n const rawSegments = Segments.rawSplit(data)\n\n // Estimate best version that can contain raw splitted segments\n estimatedVersion = Version.getBestVersionForData(rawSegments, errorCorrectionLevel)\n }\n\n // Build optimized segments\n // If estimated version is undefined, try with the highest version\n segments = Segments.fromString(data, estimatedVersion || 40)\n } else {\n throw new Error('Invalid data')\n }\n\n // Get the min version that can contain data\n const bestVersion = Version.getBestVersionForData(segments, errorCorrectionLevel)\n\n // If no version is found, data cannot be stored\n if (!bestVersion) {\n throw new Error('The amount of data is too big to be stored in a QR Code')\n }\n\n // If not specified, use min version as default\n if (!version) {\n version = bestVersion\n\n // Check if the specified version can contain the data\n } else if (version < bestVersion) {\n throw new Error('\\n' +\n 'The chosen QR Code version cannot contain this amount of data.\\n' +\n 'Minimum version required to store current data is: ' + bestVersion + '.\\n'\n )\n }\n\n const dataBits = createData(version, errorCorrectionLevel, segments)\n\n // Allocate matrix buffer\n const moduleCount = Utils.getSymbolSize(version)\n const modules = new BitMatrix(moduleCount)\n\n // Add function modules\n setupFinderPattern(modules, version)\n setupTimingPattern(modules)\n setupAlignmentPattern(modules, version)\n\n // Add temporary dummy bits for format info just to set them as reserved.\n // This is needed to prevent these bits from being masked by {@link MaskPattern.applyMask}\n // since the masking operation must be performed only on the encoding region.\n // These blocks will be replaced with correct values later in code.\n setupFormatInfo(modules, errorCorrectionLevel, 0)\n\n if (version >= 7) {\n setupVersionInfo(modules, version)\n }\n\n // Add data codewords\n setupData(modules, dataBits)\n\n if (isNaN(maskPattern)) {\n // Find best mask pattern\n maskPattern = MaskPattern.getBestMask(modules,\n setupFormatInfo.bind(null, modules, errorCorrectionLevel))\n }\n\n // Apply mask pattern\n MaskPattern.applyMask(maskPattern, modules)\n\n // Replace format info bits with correct values\n setupFormatInfo(modules, errorCorrectionLevel, maskPattern)\n\n return {\n modules: modules,\n version: version,\n errorCorrectionLevel: errorCorrectionLevel,\n maskPattern: maskPattern,\n segments: segments\n }\n}\n\n/**\n * QR Code\n *\n * @param {String | Array} data Input data\n * @param {Object} options Optional configurations\n * @param {Number} options.version QR Code version\n * @param {String} options.errorCorrectionLevel Error correction level\n * @param {Function} options.toSJISFunc Helper func to convert utf8 to sjis\n */\nexports.create = function create (data, options) {\n if (typeof data === 'undefined' || data === '') {\n throw new Error('No input text')\n }\n\n let errorCorrectionLevel = ECLevel.M\n let version\n let mask\n\n if (typeof options !== 'undefined') {\n // Use higher error correction level as default\n errorCorrectionLevel = ECLevel.from(options.errorCorrectionLevel, ECLevel.M)\n version = Version.from(options.version)\n mask = MaskPattern.from(options.maskPattern)\n\n if (options.toSJISFunc) {\n Utils.setToSJISFunction(options.toSJISFunc)\n }\n }\n\n return createSymbol(data, version, errorCorrectionLevel, mask)\n}\n","function BitBuffer () {\n this.buffer = []\n this.length = 0\n}\n\nBitBuffer.prototype = {\n\n get: function (index) {\n const bufIndex = Math.floor(index / 8)\n return ((this.buffer[bufIndex] >>> (7 - index % 8)) & 1) === 1\n },\n\n put: function (num, length) {\n for (let i = 0; i < length; i++) {\n this.putBit(((num >>> (length - i - 1)) & 1) === 1)\n }\n },\n\n getLengthInBits: function () {\n return this.length\n },\n\n putBit: function (bit) {\n const bufIndex = Math.floor(this.length / 8)\n if (this.buffer.length <= bufIndex) {\n this.buffer.push(0)\n }\n\n if (bit) {\n this.buffer[bufIndex] |= (0x80 >>> (this.length % 8))\n }\n\n this.length++\n }\n}\n\nmodule.exports = BitBuffer\n","/**\n * Helper class to handle QR Code symbol modules\n *\n * @param {Number} size Symbol size\n */\nfunction BitMatrix (size) {\n if (!size || size < 1) {\n throw new Error('BitMatrix size must be defined and greater than 0')\n }\n\n this.size = size\n this.data = new Uint8Array(size * size)\n this.reservedBit = new Uint8Array(size * size)\n}\n\n/**\n * Set bit value at specified location\n * If reserved flag is set, this bit will be ignored during masking process\n *\n * @param {Number} row\n * @param {Number} col\n * @param {Boolean} value\n * @param {Boolean} reserved\n */\nBitMatrix.prototype.set = function (row, col, value, reserved) {\n const index = row * this.size + col\n this.data[index] = value\n if (reserved) this.reservedBit[index] = true\n}\n\n/**\n * Returns bit value at specified location\n *\n * @param {Number} row\n * @param {Number} col\n * @return {Boolean}\n */\nBitMatrix.prototype.get = function (row, col) {\n return this.data[row * this.size + col]\n}\n\n/**\n * Applies xor operator at specified location\n * (used during masking process)\n *\n * @param {Number} row\n * @param {Number} col\n * @param {Boolean} value\n */\nBitMatrix.prototype.xor = function (row, col, value) {\n this.data[row * this.size + col] ^= value\n}\n\n/**\n * Check if bit at specified location is reserved\n *\n * @param {Number} row\n * @param {Number} col\n * @return {Boolean}\n */\nBitMatrix.prototype.isReserved = function (row, col) {\n return this.reservedBit[row * this.size + col]\n}\n\nmodule.exports = BitMatrix\n","/**\n * Alignment pattern are fixed reference pattern in defined positions\n * in a matrix symbology, which enables the decode software to re-synchronise\n * the coordinate mapping of the image modules in the event of moderate amounts\n * of distortion of the image.\n *\n * Alignment patterns are present only in QR Code symbols of version 2 or larger\n * and their number depends on the symbol version.\n */\n\nconst getSymbolSize = require('./utils').getSymbolSize\n\n/**\n * Calculate the row/column coordinates of the center module of each alignment pattern\n * for the specified QR Code version.\n *\n * The alignment patterns are positioned symmetrically on either side of the diagonal\n * running from the top left corner of the symbol to the bottom right corner.\n *\n * Since positions are simmetrical only half of the coordinates are returned.\n * Each item of the array will represent in turn the x and y coordinate.\n * @see {@link getPositions}\n *\n * @param {Number} version QR Code version\n * @return {Array} Array of coordinate\n */\nexports.getRowColCoords = function getRowColCoords (version) {\n if (version === 1) return []\n\n const posCount = Math.floor(version / 7) + 2\n const size = getSymbolSize(version)\n const intervals = size === 145 ? 26 : Math.ceil((size - 13) / (2 * posCount - 2)) * 2\n const positions = [size - 7] // Last coord is always (size - 7)\n\n for (let i = 1; i < posCount - 1; i++) {\n positions[i] = positions[i - 1] - intervals\n }\n\n positions.push(6) // First coord is always 6\n\n return positions.reverse()\n}\n\n/**\n * Returns an array containing the positions of each alignment pattern.\n * Each array's element represent the center point of the pattern as (x, y) coordinates\n *\n * Coordinates are calculated expanding the row/column coordinates returned by {@link getRowColCoords}\n * and filtering out the items that overlaps with finder pattern\n *\n * @example\n * For a Version 7 symbol {@link getRowColCoords} returns values 6, 22 and 38.\n * The alignment patterns, therefore, are to be centered on (row, column)\n * positions (6,22), (22,6), (22,22), (22,38), (38,22), (38,38).\n * Note that the coordinates (6,6), (6,38), (38,6) are occupied by finder patterns\n * and are not therefore used for alignment patterns.\n *\n * let pos = getPositions(7)\n * // [[6,22], [22,6], [22,22], [22,38], [38,22], [38,38]]\n *\n * @param {Number} version QR Code version\n * @return {Array} Array of coordinates\n */\nexports.getPositions = function getPositions (version) {\n const coords = []\n const pos = exports.getRowColCoords(version)\n const posLength = pos.length\n\n for (let i = 0; i < posLength; i++) {\n for (let j = 0; j < posLength; j++) {\n // Skip if position is occupied by finder patterns\n if ((i === 0 && j === 0) || // top-left\n (i === 0 && j === posLength - 1) || // bottom-left\n (i === posLength - 1 && j === 0)) { // top-right\n continue\n }\n\n coords.push([pos[i], pos[j]])\n }\n }\n\n return coords\n}\n","const getSymbolSize = require('./utils').getSymbolSize\nconst FINDER_PATTERN_SIZE = 7\n\n/**\n * Returns an array containing the positions of each finder pattern.\n * Each array's element represent the top-left point of the pattern as (x, y) coordinates\n *\n * @param {Number} version QR Code version\n * @return {Array} Array of coordinates\n */\nexports.getPositions = function getPositions (version) {\n const size = getSymbolSize(version)\n\n return [\n // top-left\n [0, 0],\n // top-right\n [size - FINDER_PATTERN_SIZE, 0],\n // bottom-left\n [0, size - FINDER_PATTERN_SIZE]\n ]\n}\n","/**\n * Data mask pattern reference\n * @type {Object}\n */\nexports.Patterns = {\n PATTERN000: 0,\n PATTERN001: 1,\n PATTERN010: 2,\n PATTERN011: 3,\n PATTERN100: 4,\n PATTERN101: 5,\n PATTERN110: 6,\n PATTERN111: 7\n}\n\n/**\n * Weighted penalty scores for the undesirable features\n * @type {Object}\n */\nconst PenaltyScores = {\n N1: 3,\n N2: 3,\n N3: 40,\n N4: 10\n}\n\n/**\n * Check if mask pattern value is valid\n *\n * @param {Number} mask Mask pattern\n * @return {Boolean} true if valid, false otherwise\n */\nexports.isValid = function isValid (mask) {\n return mask != null && mask !== '' && !isNaN(mask) && mask >= 0 && mask <= 7\n}\n\n/**\n * Returns mask pattern from a value.\n * If value is not valid, returns undefined\n *\n * @param {Number|String} value Mask pattern value\n * @return {Number} Valid mask pattern or undefined\n */\nexports.from = function from (value) {\n return exports.isValid(value) ? parseInt(value, 10) : undefined\n}\n\n/**\n* Find adjacent modules in row/column with the same color\n* and assign a penalty value.\n*\n* Points: N1 + i\n* i is the amount by which the number of adjacent modules of the same color exceeds 5\n*/\nexports.getPenaltyN1 = function getPenaltyN1 (data) {\n const size = data.size\n let points = 0\n let sameCountCol = 0\n let sameCountRow = 0\n let lastCol = null\n let lastRow = null\n\n for (let row = 0; row < size; row++) {\n sameCountCol = sameCountRow = 0\n lastCol = lastRow = null\n\n for (let col = 0; col < size; col++) {\n let module = data.get(row, col)\n if (module === lastCol) {\n sameCountCol++\n } else {\n if (sameCountCol >= 5) points += PenaltyScores.N1 + (sameCountCol - 5)\n lastCol = module\n sameCountCol = 1\n }\n\n module = data.get(col, row)\n if (module === lastRow) {\n sameCountRow++\n } else {\n if (sameCountRow >= 5) points += PenaltyScores.N1 + (sameCountRow - 5)\n lastRow = module\n sameCountRow = 1\n }\n }\n\n if (sameCountCol >= 5) points += PenaltyScores.N1 + (sameCountCol - 5)\n if (sameCountRow >= 5) points += PenaltyScores.N1 + (sameCountRow - 5)\n }\n\n return points\n}\n\n/**\n * Find 2x2 blocks with the same color and assign a penalty value\n *\n * Points: N2 * (m - 1) * (n - 1)\n */\nexports.getPenaltyN2 = function getPenaltyN2 (data) {\n const size = data.size\n let points = 0\n\n for (let row = 0; row < size - 1; row++) {\n for (let col = 0; col < size - 1; col++) {\n const last = data.get(row, col) +\n data.get(row, col + 1) +\n data.get(row + 1, col) +\n data.get(row + 1, col + 1)\n\n if (last === 4 || last === 0) points++\n }\n }\n\n return points * PenaltyScores.N2\n}\n\n/**\n * Find 1:1:3:1:1 ratio (dark:light:dark:light:dark) pattern in row/column,\n * preceded or followed by light area 4 modules wide\n *\n * Points: N3 * number of pattern found\n */\nexports.getPenaltyN3 = function getPenaltyN3 (data) {\n const size = data.size\n let points = 0\n let bitsCol = 0\n let bitsRow = 0\n\n for (let row = 0; row < size; row++) {\n bitsCol = bitsRow = 0\n for (let col = 0; col < size; col++) {\n bitsCol = ((bitsCol << 1) & 0x7FF) | data.get(row, col)\n if (col >= 10 && (bitsCol === 0x5D0 || bitsCol === 0x05D)) points++\n\n bitsRow = ((bitsRow << 1) & 0x7FF) | data.get(col, row)\n if (col >= 10 && (bitsRow === 0x5D0 || bitsRow === 0x05D)) points++\n }\n }\n\n return points * PenaltyScores.N3\n}\n\n/**\n * Calculate proportion of dark modules in entire symbol\n *\n * Points: N4 * k\n *\n * k is the rating of the deviation of the proportion of dark modules\n * in the symbol from 50% in steps of 5%\n */\nexports.getPenaltyN4 = function getPenaltyN4 (data) {\n let darkCount = 0\n const modulesCount = data.data.length\n\n for (let i = 0; i < modulesCount; i++) darkCount += data.data[i]\n\n const k = Math.abs(Math.ceil((darkCount * 100 / modulesCount) / 5) - 10)\n\n return k * PenaltyScores.N4\n}\n\n/**\n * Return mask value at given position\n *\n * @param {Number} maskPattern Pattern reference value\n * @param {Number} i Row\n * @param {Number} j Column\n * @return {Boolean} Mask value\n */\nfunction getMaskAt (maskPattern, i, j) {\n switch (maskPattern) {\n case exports.Patterns.PATTERN000: return (i + j) % 2 === 0\n case exports.Patterns.PATTERN001: return i % 2 === 0\n case exports.Patterns.PATTERN010: return j % 3 === 0\n case exports.Patterns.PATTERN011: return (i + j) % 3 === 0\n case exports.Patterns.PATTERN100: return (Math.floor(i / 2) + Math.floor(j / 3)) % 2 === 0\n case exports.Patterns.PATTERN101: return (i * j) % 2 + (i * j) % 3 === 0\n case exports.Patterns.PATTERN110: return ((i * j) % 2 + (i * j) % 3) % 2 === 0\n case exports.Patterns.PATTERN111: return ((i * j) % 3 + (i + j) % 2) % 2 === 0\n\n default: throw new Error('bad maskPattern:' + maskPattern)\n }\n}\n\n/**\n * Apply a mask pattern to a BitMatrix\n *\n * @param {Number} pattern Pattern reference number\n * @param {BitMatrix} data BitMatrix data\n */\nexports.applyMask = function applyMask (pattern, data) {\n const size = data.size\n\n for (let col = 0; col < size; col++) {\n for (let row = 0; row < size; row++) {\n if (data.isReserved(row, col)) continue\n data.xor(row, col, getMaskAt(pattern, row, col))\n }\n }\n}\n\n/**\n * Returns the best mask pattern for data\n *\n * @param {BitMatrix} data\n * @return {Number} Mask pattern reference number\n */\nexports.getBestMask = function getBestMask (data, setupFormatFunc) {\n const numPatterns = Object.keys(exports.Patterns).length\n let bestPattern = 0\n let lowerPenalty = Infinity\n\n for (let p = 0; p < numPatterns; p++) {\n setupFormatFunc(p)\n exports.applyMask(p, data)\n\n // Calculate penalty\n const penalty =\n exports.getPenaltyN1(data) +\n exports.getPenaltyN2(data) +\n exports.getPenaltyN3(data) +\n exports.getPenaltyN4(data)\n\n // Undo previously applied mask\n exports.applyMask(p, data)\n\n if (penalty < lowerPenalty) {\n lowerPenalty = penalty\n bestPattern = p\n }\n }\n\n return bestPattern\n}\n","const Polynomial = require('./polynomial')\n\nfunction ReedSolomonEncoder (degree) {\n this.genPoly = undefined\n this.degree = degree\n\n if (this.degree) this.initialize(this.degree)\n}\n\n/**\n * Initialize the encoder.\n * The input param should correspond to the number of error correction codewords.\n *\n * @param {Number} degree\n */\nReedSolomonEncoder.prototype.initialize = function initialize (degree) {\n // create an irreducible generator polynomial\n this.degree = degree\n this.genPoly = Polynomial.generateECPolynomial(this.degree)\n}\n\n/**\n * Encodes a chunk of data\n *\n * @param {Uint8Array} data Buffer containing input data\n * @return {Uint8Array} Buffer containing encoded data\n */\nReedSolomonEncoder.prototype.encode = function encode (data) {\n if (!this.genPoly) {\n throw new Error('Encoder not initialized')\n }\n\n // Calculate EC for this data block\n // extends data size to data+genPoly size\n const paddedData = new Uint8Array(data.length + this.degree)\n paddedData.set(data)\n\n // The error correction codewords are the remainder after dividing the data codewords\n // by a generator polynomial\n const remainder = Polynomial.mod(paddedData, this.genPoly)\n\n // return EC data blocks (last n byte, where n is the degree of genPoly)\n // If coefficients number in remainder are less than genPoly degree,\n // pad with 0s to the left to reach the needed number of coefficients\n const start = this.degree - remainder.length\n if (start > 0) {\n const buff = new Uint8Array(this.degree)\n buff.set(remainder, start)\n\n return buff\n }\n\n return remainder\n}\n\nmodule.exports = ReedSolomonEncoder\n","const Utils = require('./utils')\n\nconst G15 = (1 << 10) | (1 << 8) | (1 << 5) | (1 << 4) | (1 << 2) | (1 << 1) | (1 << 0)\nconst G15_MASK = (1 << 14) | (1 << 12) | (1 << 10) | (1 << 4) | (1 << 1)\nconst G15_BCH = Utils.getBCHDigit(G15)\n\n/**\n * Returns format information with relative error correction bits\n *\n * The format information is a 15-bit sequence containing 5 data bits,\n * with 10 error correction bits calculated using the (15, 5) BCH code.\n *\n * @param {Number} errorCorrectionLevel Error correction level\n * @param {Number} mask Mask pattern\n * @return {Number} Encoded format information bits\n */\nexports.getEncodedBits = function getEncodedBits (errorCorrectionLevel, mask) {\n const data = ((errorCorrectionLevel.bit << 3) | mask)\n let d = data << 10\n\n while (Utils.getBCHDigit(d) - G15_BCH >= 0) {\n d ^= (G15 << (Utils.getBCHDigit(d) - G15_BCH))\n }\n\n // xor final data with mask pattern in order to ensure that\n // no combination of Error Correction Level and data mask pattern\n // will result in an all-zero data string\n return ((data << 10) | d) ^ G15_MASK\n}\n","function hex2rgba (hex) {\n if (typeof hex === 'number') {\n hex = hex.toString()\n }\n\n if (typeof hex !== 'string') {\n throw new Error('Color should be defined as hex string')\n }\n\n let hexCode = hex.slice().replace('#', '').split('')\n if (hexCode.length < 3 || hexCode.length === 5 || hexCode.length > 8) {\n throw new Error('Invalid hex color: ' + hex)\n }\n\n // Convert from short to long form (fff -> ffffff)\n if (hexCode.length === 3 || hexCode.length === 4) {\n hexCode = Array.prototype.concat.apply([], hexCode.map(function (c) {\n return [c, c]\n }))\n }\n\n // Add default alpha value\n if (hexCode.length === 6) hexCode.push('F', 'F')\n\n const hexValue = parseInt(hexCode.join(''), 16)\n\n return {\n r: (hexValue >> 24) & 255,\n g: (hexValue >> 16) & 255,\n b: (hexValue >> 8) & 255,\n a: hexValue & 255,\n hex: '#' + hexCode.slice(0, 6).join('')\n }\n}\n\nexports.getOptions = function getOptions (options) {\n if (!options) options = {}\n if (!options.color) options.color = {}\n\n const margin = typeof options.margin === 'undefined' ||\n options.margin === null ||\n options.margin < 0\n ? 4\n : options.margin\n\n const width = options.width && options.width >= 21 ? options.width : undefined\n const scale = options.scale || 4\n\n return {\n width: width,\n scale: width ? 4 : scale,\n margin: margin,\n color: {\n dark: hex2rgba(options.color.dark || '#000000ff'),\n light: hex2rgba(options.color.light || '#ffffffff')\n },\n type: options.type,\n rendererOpts: options.rendererOpts || {}\n }\n}\n\nexports.getScale = function getScale (qrSize, opts) {\n return opts.width && opts.width >= qrSize + opts.margin * 2\n ? opts.width / (qrSize + opts.margin * 2)\n : opts.scale\n}\n\nexports.getImageWidth = function getImageWidth (qrSize, opts) {\n const scale = exports.getScale(qrSize, opts)\n return Math.floor((qrSize + opts.margin * 2) * scale)\n}\n\nexports.qrToImageData = function qrToImageData (imgData, qr, opts) {\n const size = qr.modules.size\n const data = qr.modules.data\n const scale = exports.getScale(size, opts)\n const symbolSize = Math.floor((size + opts.margin * 2) * scale)\n const scaledMargin = opts.margin * scale\n const palette = [opts.color.light, opts.color.dark]\n\n for (let i = 0; i < symbolSize; i++) {\n for (let j = 0; j < symbolSize; j++) {\n let posDst = (i * symbolSize + j) * 4\n let pxColor = opts.color.light\n\n if (i >= scaledMargin && j >= scaledMargin &&\n i < symbolSize - scaledMargin && j < symbolSize - scaledMargin) {\n const iSrc = Math.floor((i - scaledMargin) / scale)\n const jSrc = Math.floor((j - scaledMargin) / scale)\n pxColor = palette[data[iSrc * size + jSrc] ? 1 : 0]\n }\n\n imgData[posDst++] = pxColor.r\n imgData[posDst++] = pxColor.g\n imgData[posDst++] = pxColor.b\n imgData[posDst] = pxColor.a\n }\n }\n}\n","const Utils = require('./utils')\n\nfunction clearCanvas (ctx, canvas, size) {\n ctx.clearRect(0, 0, canvas.width, canvas.height)\n\n if (!canvas.style) canvas.style = {}\n canvas.height = size\n canvas.width = size\n canvas.style.height = size + 'px'\n canvas.style.width = size + 'px'\n}\n\nfunction getCanvasElement () {\n try {\n return document.createElement('canvas')\n } catch (e) {\n throw new Error('You need to specify a canvas element')\n }\n}\n\nexports.render = function render (qrData, canvas, options) {\n let opts = options\n let canvasEl = canvas\n\n if (typeof opts === 'undefined' && (!canvas || !canvas.getContext)) {\n opts = canvas\n canvas = undefined\n }\n\n if (!canvas) {\n canvasEl = getCanvasElement()\n }\n\n opts = Utils.getOptions(opts)\n const size = Utils.getImageWidth(qrData.modules.size, opts)\n\n const ctx = canvasEl.getContext('2d')\n const image = ctx.createImageData(size, size)\n Utils.qrToImageData(image.data, qrData, opts)\n\n clearCanvas(ctx, canvasEl, size)\n ctx.putImageData(image, 0, 0)\n\n return canvasEl\n}\n\nexports.renderToDataURL = function renderToDataURL (qrData, canvas, options) {\n let opts = options\n\n if (typeof opts === 'undefined' && (!canvas || !canvas.getContext)) {\n opts = canvas\n canvas = undefined\n }\n\n if (!opts) opts = {}\n\n const canvasEl = exports.render(qrData, canvas, opts)\n\n const type = opts.type || 'image/png'\n const rendererOpts = opts.rendererOpts || {}\n\n return canvasEl.toDataURL(type, rendererOpts.quality)\n}\n","const Utils = require('./utils')\n\nfunction getColorAttrib (color, attrib) {\n const alpha = color.a / 255\n const str = attrib + '=\"' + color.hex + '\"'\n\n return alpha < 1\n ? str + ' ' + attrib + '-opacity=\"' + alpha.toFixed(2).slice(1) + '\"'\n : str\n}\n\nfunction svgCmd (cmd, x, y) {\n let str = cmd + x\n if (typeof y !== 'undefined') str += ' ' + y\n\n return str\n}\n\nfunction qrToPath (data, size, margin) {\n let path = ''\n let moveBy = 0\n let newRow = false\n let lineLength = 0\n\n for (let i = 0; i < data.length; i++) {\n const col = Math.floor(i % size)\n const row = Math.floor(i / size)\n\n if (!col && !newRow) newRow = true\n\n if (data[i]) {\n lineLength++\n\n if (!(i > 0 && col > 0 && data[i - 1])) {\n path += newRow\n ? svgCmd('M', col + margin, 0.5 + row + margin)\n : svgCmd('m', moveBy, 0)\n\n moveBy = 0\n newRow = false\n }\n\n if (!(col + 1 < size && data[i + 1])) {\n path += svgCmd('h', lineLength)\n lineLength = 0\n }\n } else {\n moveBy++\n }\n }\n\n return path\n}\n\nexports.render = function render (qrData, options, cb) {\n const opts = Utils.getOptions(options)\n const size = qrData.modules.size\n const data = qrData.modules.data\n const qrcodesize = size + opts.margin * 2\n\n const bg = !opts.color.light.a\n ? ''\n : '<path ' + getColorAttrib(opts.color.light, 'fill') +\n ' d=\"M0 0h' + qrcodesize + 'v' + qrcodesize + 'H0z\"/>'\n\n const path =\n '<path ' + getColorAttrib(opts.color.dark, 'stroke') +\n ' d=\"' + qrToPath(data, size, opts.margin) + '\"/>'\n\n const viewBox = 'viewBox=\"' + '0 0 ' + qrcodesize + ' ' + qrcodesize + '\"'\n\n const width = !opts.width ? '' : 'width=\"' + opts.width + '\" height=\"' + opts.width + '\" '\n\n const svgTag = '<svg xmlns=\"http://www.w3.org/2000/svg\" ' + width + viewBox + ' shape-rendering=\"crispEdges\">' + bg + path + '</svg>\\n'\n\n if (typeof cb === 'function') {\n cb(null, svgTag)\n }\n\n return svgTag\n}\n","\nconst canPromise = require('./can-promise')\n\nconst QRCode = require('./core/qrcode')\nconst CanvasRenderer = require('./renderer/canvas')\nconst SvgRenderer = require('./renderer/svg-tag.js')\n\nfunction renderCanvas (renderFunc, canvas, text, opts, cb) {\n const args = [].slice.call(arguments, 1)\n const argsNum = args.length\n const isLastArgCb = typeof args[argsNum - 1] === 'function'\n\n if (!isLastArgCb && !canPromise()) {\n throw new Error('Callback required as last argument')\n }\n\n if (isLastArgCb) {\n if (argsNum < 2) {\n throw new Error('Too few arguments provided')\n }\n\n if (argsNum === 2) {\n cb = text\n text = canvas\n canvas = opts = undefined\n } else if (argsNum === 3) {\n if (canvas.getContext && typeof cb === 'undefined') {\n cb = opts\n opts = undefined\n } else {\n cb = opts\n opts = text\n text = canvas\n canvas = undefined\n }\n }\n } else {\n if (argsNum < 1) {\n throw new Error('Too few arguments provided')\n }\n\n if (argsNum === 1) {\n text = canvas\n canvas = opts = undefined\n } else if (argsNum === 2 && !canvas.getContext) {\n opts = text\n text = canvas\n canvas = undefined\n }\n\n return new Promise(function (resolve, reject) {\n try {\n const data = QRCode.create(text, opts)\n resolve(renderFunc(data, canvas, opts))\n } catch (e) {\n reject(e)\n }\n })\n }\n\n try {\n const data = QRCode.create(text, opts)\n cb(null, renderFunc(data, canvas, opts))\n } catch (e) {\n cb(e)\n }\n}\n\nexports.create = QRCode.create\nexports.toCanvas = renderCanvas.bind(null, CanvasRenderer.render)\nexports.toDataURL = renderCanvas.bind(null, CanvasRenderer.renderToDataURL)\n\n// only svg for now.\nexports.toString = renderCanvas.bind(null, function (data, _, opts) {\n return SvgRenderer.render(data, opts)\n})\n","import { TFunction } from \"../localization\";\nimport { useCallback, useMemo, useState } from \"preact/hooks\";\nimport qrcode from \"qrcode\";\nimport qrSvgRenderer from \"qrcode/lib/renderer/svg-tag.js\";\nimport { amountFormat } from \"../amount-format\";\nimport { Button, ButtonLoadingSpinner, ButtonVariant } from \"./button\";\n\ntype Props = {\n amount: number;\n businessName: string;\n channelLogo: string;\n currency: string;\n hideUi: boolean;\n onAffirm: () => void;\n qrString: string;\n title: string;\n t: TFunction;\n};\n\nexport function ActionQr(props: Props) {\n const {\n amount,\n businessName,\n channelLogo,\n currency,\n onAffirm,\n qrString,\n title,\n t,\n } = props;\n\n const [showSpinner, setShowSpinner] = useState(false);\n\n const onMadePaymentClicked = useCallback(() => {\n setShowSpinner(true);\n onAffirm();\n }, [onAffirm]);\n\n const svgNode = useMemo(() => {\n try {\n return generateQrSvg(qrString);\n } catch (error) {\n console.log(\"Error generating QR code SVG:\", error);\n // show an error message in place of the QR code\n const node = document.createElement(\"div\");\n node.innerText = t(\"action_qr.unable_to_generate\");\n return node;\n }\n }, [qrString, t]);\n\n if (props.hideUi) {\n return (\n <div\n data-testid=\"qr-code\"\n ref={(r) => {\n if (r && (r.childNodes.length !== 1 || r.firstChild !== svgNode)) {\n // insert svg if not already present\n r?.replaceChildren(svgNode);\n }\n }}\n />\n );\n }\n\n return (\n <div className=\"xendit-action-present-to-customer\">\n <img\n src={channelLogo}\n alt=\"Channel Logo\"\n className=\"xendit-action-qr-channel-logo\"\n />\n <div className=\"xendit-action-title\">{title}</div>\n <div className=\"xendit-action-qr-content\">\n <div className=\"xendit-text-16 xendit-text-semibold xendit-text-center\">\n {businessName}\n </div>\n <div\n data-testid=\"qr-code\"\n className=\"xendit-action-qr-qrcode-container\"\n ref={(r) => {\n if (r && (r.childNodes.length !== 1 || r.firstChild !== svgNode)) {\n // insert svg if not already present\n r?.replaceChildren(svgNode);\n }\n }}\n />\n <div className=\"xendit-text-16 xendit-text-semibold xendit-text-center\">\n {amountFormat(amount, currency)}\n </div>\n </div>\n <div className=\"xendit-action-present-to-customer-affirm\">\n <Button\n variant={ButtonVariant.WHITE_ROUNDED}\n disabled={showSpinner}\n onClick={onMadePaymentClicked}\n className=\"xendit-button-block\"\n >\n {showSpinner ? <ButtonLoadingSpinner /> : t(\"action.payment_made\")}\n </Button>\n <div className=\"xendit-text-12 xendit-text-secondary xendit-text-center\">\n {t(\"action.payment_confirmation_instructions\")}\n </div>\n </div>\n </div>\n );\n}\n\n/**\n * Generate a qr code svg. It will have 1x1 pixels and 1px margins.\n *\n * Returns the svg node and the size of the image including margins.\n */\nfunction generateQrSvg(text: string): SVGSVGElement {\n const qr = qrcode.create(text);\n const margin = 1;\n const svgText = qrSvgRenderer.render(qr, {\n margin,\n });\n const parser = new DOMParser();\n const svgNode = parser.parseFromString(svgText, \"image/svg+xml\")\n .documentElement as unknown as SVGSVGElement;\n\n svgNode.style.width = \"100%\";\n svgNode.style.height = \"100%\";\n svgNode.setAttribute(\"width\", String(qr.modules.size + margin * 2));\n svgNode.setAttribute(\"height\", String(qr.modules.size + margin * 2));\n\n // Override colors to use CSS variables\n const backgroundPath = svgNode.querySelector(\"[fill]\");\n backgroundPath?.setAttribute(\"fill\", \"var(--xendit-qr-background-color)\");\n const foregroundPath = svgNode.querySelector(\"[stroke]\");\n foregroundPath?.setAttribute(\"stroke\", \"var(--xendit-qr-foreground-color)\");\n\n return svgNode;\n}\n","import { useCallback, useLayoutEffect, useRef } from \"preact/hooks\";\nimport Icon from \"./icon\";\nimport { ComponentChildren, FunctionComponent } from \"preact\";\n\ntype Props = {\n /**\n * Title shown above the border.\n */\n title: string;\n /**\n * Called on close (after animation).\n */\n onClose: () => void;\n /**\n * If true, close the dialog on the next render. The animation will play then onClose will be called.\n */\n close?: boolean;\n children?: ComponentChildren;\n /**\n * if true, the header will float on top of the body content without a dividing line\n */\n seamless?: boolean;\n};\n\nexport const Dialog: FunctionComponent<Props> = (props) => {\n const { title, onClose, children, seamless } = props;\n\n const closeCalledRef = useRef(false);\n const closeAnimationPlaying = useRef(false);\n\n const dialogRef = useRef<HTMLDivElement>(null);\n const backdropRef = useRef<HTMLDivElement>(null);\n\n const supportsAnimation = HTMLElement.prototype.animate !== undefined;\n\n // call close callback only once\n const onCloseSafe = useCallback(() => {\n if (closeCalledRef.current) return;\n closeCalledRef.current = true;\n onClose();\n }, [onClose]);\n\n // play fade-out animation then call close callback\n const onCloseWithAnimation = useCallback(() => {\n if (\n !dialogRef.current ||\n !backdropRef.current ||\n closeAnimationPlaying.current\n ) {\n return;\n }\n closeAnimationPlaying.current = true;\n\n if (!supportsAnimation) {\n onCloseSafe();\n return;\n }\n\n backdropRef.current.animate?.(backdropFadeOutKeyframes, animationOptions);\n const animation = dialogRef.current.animate?.(\n foregroundFadeOutKeyframes,\n animationOptions,\n );\n animation.onfinish = onCloseSafe;\n }, [onCloseSafe, supportsAnimation]);\n\n // play fade-in animation\n useLayoutEffect(() => {\n if (!supportsAnimation) {\n return;\n }\n\n backdropRef.current?.animate?.(backdropFadeKeyframes, animationOptions);\n dialogRef.current?.animate?.(foregroundFadeKeyframes, animationOptions);\n }, [supportsAnimation]);\n\n useLayoutEffect(() => {\n if (props.close) {\n onCloseWithAnimation();\n }\n }, [props.close, onCloseWithAnimation]);\n\n return (\n <div className=\"xendit-dialog-backdrop\" ref={backdropRef}>\n <div className=\"xendit-dialog\" ref={dialogRef}>\n {!seamless ? (\n <div className=\"xendit-dialog-header xendit-text-16 xendit-text-semibold\">\n {title}\n <button aria-label=\"Close\" onClick={onCloseWithAnimation}>\n <Icon name=\"x\" size={20} />\n </button>\n </div>\n ) : (\n <button\n aria-label=\"Close\"\n onClick={onCloseWithAnimation}\n className=\"xendit-dialog-floating-close\"\n >\n <Icon name=\"x\" size={20} />\n </button>\n )}\n <div className=\"xendit-dialog-body\">{children}</div>\n </div>\n </div>\n );\n};\n\nconst animationOptions: EffectTiming = {\n duration: 200,\n easing: \"ease-in-out\",\n fill: \"forwards\",\n};\n\nconst backdropFadeKeyframes: Keyframe[] = [\n {\n backgroundColor: \"rgba(0, 0, 0, 0)\",\n },\n {\n backgroundColor: \"rgba(0, 0, 0, 0.5)\",\n },\n];\nconst backdropFadeOutKeyframes = backdropFadeKeyframes.slice().reverse();\n\nconst foregroundFadeKeyframes: Keyframe[] = [\n {\n opacity: 0,\n transform: `scale(0.9) translateY(-20px)`,\n },\n {\n opacity: 1,\n transform: \"\",\n },\n];\nconst foregroundFadeOutKeyframes = foregroundFadeKeyframes.slice().reverse();\n","import { useLayoutEffect, useRef } from \"preact/hooks\";\nimport { XenditComponents } from \"../public-sdk\";\nimport { Dialog } from \"./dialog\";\nimport { internal } from \"../internal\";\n\ntype Props = {\n sdk: XenditComponents;\n title: string;\n close?: boolean;\n onClose: () => void;\n width: number;\n height: number;\n};\n\nexport default function DefaultActionContainer(props: Props) {\n const { sdk, title, onClose, width, height } = props;\n\n const wrapperRef = useRef<HTMLDivElement>(null);\n useLayoutEffect(() => {\n const component = sdk.createActionContainerComponent(internal);\n wrapperRef.current?.replaceChildren(component);\n return () => {\n sdk.destroyComponent(component);\n };\n }, [sdk]);\n\n return (\n <Dialog title={title} onClose={onClose} close={props.close} seamless>\n <div\n className=\"xendit-default-action-container\"\n ref={wrapperRef}\n style={{\n width: width\n ? `calc(min(100vw - 64px, ${width}px))`\n : \"calc(100vw - 64px)\",\n height: height ? `calc(min(100vh - 64px, ${height}px))` : undefined,\n }}\n />\n </Dialog>\n );\n}\n","import { ComponentChildren, Fragment, FunctionComponent } from \"preact\";\nimport { useState } from \"preact/hooks\";\nimport {\n FormattedString,\n InstructionsStep,\n InstructionsTab,\n Instructions as InstructionsType,\n} from \"../backend-types/instructions\";\nimport classNames from \"classnames\";\n\ntype Props = {\n instructions: InstructionsType;\n};\n\nexport const Instructions: FunctionComponent<Props> = ({ instructions }) => {\n switch (instructions.length) {\n case 0:\n return null;\n case 1:\n return <SingleTabInstructions instruction={instructions[0]} />;\n default:\n return <MultiTabInstructions instructions={instructions} />;\n }\n};\n\nexport const SingleTabInstructions: FunctionComponent<{\n instruction: InstructionsTab;\n}> = (props) => {\n return (\n <div>\n <p className=\"xendit-instructions-single-tab-heading\">\n {props.instruction.title}\n </p>\n <InstructionsSteps instruction={props.instruction} />\n </div>\n );\n};\n\nconst MultiTabInstructions: FunctionComponent<{\n instructions: InstructionsType;\n}> = (props) => {\n const [selectedTab, setSelectedTab] = useState(0);\n\n return (\n <div>\n <div className=\"xendit-instructions-tab-list\">\n {props.instructions.map((instruction, index) => (\n <button\n key={index}\n className={classNames(\"xendit-instructions-tab-button\", {\n [\"xendit-instructions-active-tab\"]: selectedTab === index,\n })}\n onClick={() => setSelectedTab(index)}\n >\n {instruction.title}\n </button>\n ))}\n </div>\n <InstructionsSteps instruction={props.instructions[selectedTab]} />\n </div>\n );\n};\n\nexport const InstructionsSteps: FunctionComponent<{\n instruction: InstructionsTab;\n}> = (props) => {\n return (\n <ol\n className=\"xendit-instructions-numbered-list\"\n data-testid=\"instructions-steps\"\n >\n {props.instruction.content.map((step, index) => {\n const stepItems = Array.isArray(step) ? step : [step];\n return (\n <li className=\"xendit-instructions-step-li\" key={index}>\n <div className=\"xendit-instructions-step-box\">\n {stepItems.map((s, i) => (\n <Fragment key={i}>{renderStep(s)}</Fragment>\n ))}\n </div>\n </li>\n );\n })}\n </ol>\n );\n};\n\nfunction renderFormattedStringElement(\n el: Element,\n i: number,\n): ComponentChildren {\n const className = classNames({\n [\"xendit-instructions-bold\"]: el.nodeName === \"B\",\n [\"xendit-instructions-italics\"]: el.nodeName === \"I\",\n });\n\n // render the children without wrapping if this is an element we don't want\n if (!className) return renderFormattedStringChildren(el.childNodes);\n\n return (\n <span className={className} key={i}>\n {renderFormattedStringChildren(el.childNodes)}\n </span>\n );\n}\n\nfunction renderFormattedStringChildren(nodes: NodeListOf<ChildNode>) {\n const parts = Array.from(nodes);\n const renderedNodes = parts.map((part, i) => {\n switch (part.nodeType) {\n case Node.TEXT_NODE:\n if (part.textContent === null) return null;\n return part.textContent;\n case Node.ELEMENT_NODE:\n return renderFormattedStringElement(part as Element, i);\n default:\n return null;\n }\n });\n return renderedNodes;\n}\n\nconst domParser = typeof DOMParser !== \"undefined\" ? new DOMParser() : null;\n\nfunction renderFormattedString(text: FormattedString): ComponentChildren {\n try {\n if (!domParser) return text;\n const doc = domParser.parseFromString(text, \"text/html\");\n return renderFormattedStringChildren(doc.body.childNodes);\n } catch (_) {\n return text;\n }\n}\n\nfunction renderStep(step: string | InstructionsStep): ComponentChildren {\n if (typeof step === \"string\") {\n return (\n <p className=\"xendit-instructions-step-item\">\n {renderFormattedString(step)}\n </p>\n );\n }\n\n switch (step.type) {\n case \"text\":\n return renderTextStep(step);\n case \"image\":\n return renderImageStep(step);\n case \"bullets\":\n return renderBulletsStep(step);\n case \"form\":\n return renderFormStep(step);\n case \"table\":\n return renderTableStep(step);\n }\n\n return null;\n}\n\nfunction renderTextStep(step: Extract<InstructionsStep, { type: \"text\" }>) {\n return <p>{renderFormattedString(step.text)}</p>;\n}\n\nfunction renderImageStep(step: Extract<InstructionsStep, { type: \"image\" }>) {\n return (\n <div>\n <img\n src={step.src}\n alt={step.alt || \"\"}\n style={{ height: `${step.height ?? 24}px` }}\n />\n </div>\n );\n}\n\nfunction renderBulletsStep(\n step: Extract<InstructionsStep, { type: \"bullets\" }>,\n) {\n return (\n <ul className=\"xendit-instructions-bullet-list\">\n {step.items.map((item, index) => (\n <li key={index}>{renderFormattedString(item)}</li>\n ))}\n </ul>\n );\n}\n\nfunction renderFormStep(step: Extract<InstructionsStep, { type: \"form\" }>) {\n return (\n <div className=\"xendit-instructions-form-card\">\n {step.heading ? (\n <h3 className=\"xendit-instructions-form-heading\">\n {renderFormattedString(step.heading)}\n </h3>\n ) : null}\n {step.fields.map((field, index) => (\n <div className=\"xendit-instructions-form-field\" key={index}>\n <div className=\"xendit-instructions-form-field-label\">\n {renderFormattedString(field.label)}\n </div>\n <div className=\"xendit-instructions-form-field-value\">\n {renderFormattedString(field.value)}\n </div>\n </div>\n ))}\n </div>\n );\n}\n\nfunction renderTableStep(step: Extract<InstructionsStep, { type: \"table\" }>) {\n return (\n <table className=\"xendit-instructions-table\">\n <thead>\n <tr>\n {step.headers.map((header, index) => (\n <th className=\"xendit-instructions-table-header\" key={index}>\n {renderFormattedString(header)}\n </th>\n ))}\n </tr>\n </thead>\n <tbody>\n {step.rows.map((row, rowIndex) => (\n <tr key={rowIndex}>\n {row.map((cell, cellIndex) => (\n <td className=\"xendit-instructions-table-cell\" key={cellIndex}>\n {renderFormattedString(cell)}\n </td>\n ))}\n </tr>\n ))}\n </tbody>\n </table>\n );\n}\n","import { createContext, FunctionComponent } from \"preact\";\nimport { useContext, useState } from \"preact/hooks\";\n\nexport const TooltipContext = createContext<{\n fire: (text: string) => void;\n text: string;\n}>({\n fire: () => {},\n text: \"\",\n});\n\nexport const TooltipProvider: FunctionComponent = ({ children }) => {\n const [text, setText] = useState(\"\");\n\n const fire = (text: string) => {\n setText(text);\n const timeout = setTimeout(() => {\n setText(\"\");\n }, 2000);\n return () => clearTimeout(timeout);\n };\n\n return (\n <TooltipContext.Provider value={{ text, fire }}>\n <div style={{ position: \"relative\" }}>{children}</div>\n </TooltipContext.Provider>\n );\n};\n\nexport const Tooltip: FunctionComponent = () => {\n const { text } = useContext(TooltipContext);\n\n if (!text) {\n return null;\n }\n\n return <div className=\"xendit-tooltip\">{text}</div>;\n};\n","import { FunctionComponent } from \"preact\";\nimport { useCallback, useContext, useState } from \"preact/hooks\";\nimport { amountFormat } from \"../amount-format\";\nimport { Instructions as InstructionsType } from \"../backend-types/instructions\";\nimport { TFunction } from \"../localization\";\nimport {\n Button,\n ButtonLoadingSpinner,\n ButtonSize,\n ButtonVariant,\n} from \"./button\";\nimport Icon from \"./icon\";\nimport { Instructions } from \"./instructions\";\nimport { Tooltip, TooltipContext, TooltipProvider } from \"./tooltip\";\n\ntype Props = {\n amount: number;\n channelLogo: string;\n currency: string;\n onAffirm: () => void;\n vaNumber: string;\n merchantName: string;\n instructions: InstructionsType;\n title: string;\n t: TFunction;\n};\n\nexport function ActionVa(props: Props) {\n const {\n amount,\n channelLogo,\n currency,\n onAffirm,\n vaNumber,\n merchantName,\n instructions,\n title,\n t,\n } = props;\n\n const [showSpinner, setShowSpinner] = useState(false);\n\n const onMadePaymentClicked = useCallback(() => {\n setShowSpinner(true);\n onAffirm();\n }, [onAffirm]);\n\n const vaDetails = [\n {\n heading: t(\"action_va.merchant_name\"),\n value: merchantName,\n },\n {\n heading: t(\"action_va.virtual_account_number\"),\n value: vaNumber,\n enableCopy: true,\n },\n {\n heading: t(\"action_va.amount_to_pay\"),\n value: amountFormat(amount, currency),\n enableCopy: true,\n },\n ];\n\n return (\n <div className=\"xendit-action-present-to-customer\">\n <img\n src={channelLogo}\n alt=\"Channel Logo\"\n className=\"xendit-action-qr-channel-logo\"\n />\n <div className=\"xendit-action-title\">{title}</div>\n <div className=\"xendit-action-va-content\">\n <div className=\"xendit-action-va-details\">\n {vaDetails.map((detail, index) => (\n <div key={index} className=\"xendit-action-va-detail-item\">\n <div className=\"xendit-action-va-detail-content\">\n <div className=\"xendit-action-va-heading xendit-text-12 xendit-text-semibold\">\n {detail.heading}\n </div>\n <div className=\"xendit-action-va-value xendit-text-semibold\">\n {detail.value}\n </div>\n </div>\n {detail.enableCopy ? (\n <TooltipProvider>\n <CopyButton value={detail.value} t={t} />\n <Tooltip />\n </TooltipProvider>\n ) : null}\n </div>\n ))}\n </div>\n </div>\n <div className=\"xendit-action-present-to-customer-affirm\">\n <Button\n variant={ButtonVariant.WHITE_ROUNDED}\n disabled={showSpinner}\n onClick={onMadePaymentClicked}\n className=\"xendit-button-block\"\n >\n {showSpinner ? <ButtonLoadingSpinner /> : t(\"action.payment_made\")}\n </Button>\n <div className=\"xendit-text-12 xendit-text-secondary xendit-text-center\">\n {t(\"action.payment_confirmation_instructions\")}\n </div>\n </div>\n <Instructions instructions={instructions} />\n </div>\n );\n}\n\nconst CopyButton: FunctionComponent<{ value: string; t: TFunction }> = ({\n value,\n t,\n}) => {\n const { fire } = useContext(TooltipContext);\n\n return (\n <Button\n variant={ButtonVariant.WHITE_ROUNDED}\n size={ButtonSize.SM}\n onClick={() => {\n navigator.clipboard.writeText(value);\n fire(t(\"action_va.copied_to_clipboard\"));\n }}\n >\n {t(\"action_va.copy\")}\n <Icon name=\"copy\" size={16} />\n </Button>\n );\n};\n","import { Instructions } from \"./instructions\";\n\nexport type BffAction =\n | {\n type: \"PRESENT_TO_CUSTOMER\";\n descriptor: \"PAYMENT_CODE\" | \"QR_STRING\" | \"VIRTUAL_ACCOUNT_NUMBER\";\n value: string;\n action_title: string;\n action_subtitle: string;\n action_graphic: string;\n instructions?: Instructions | null;\n }\n | {\n type: \"REDIRECT_CUSTOMER\";\n descriptor: \"WEB_URL\" | \"DEEPLINK_URL\" | \"WEB_GOOGLE_PAYLINK\";\n value: string;\n // indicates whether the redirect URL can be opened in an iframe\n // defaults to true since this isn't returned from backend yet\n // TODO: return this flag from backend\n iframe_capable?: boolean;\n }\n | {\n type: \"API_POST_REQUEST\";\n descriptor: \"CAPTURE_PAYMENT\" | \"VALIDATE_OTP\" | \"RESEND_OTP\";\n value: string;\n otp?: {\n title: string;\n instructions: string;\n };\n };\n\nexport type BffPaymentTokenStatus =\n | \"REQUIRES_ACTION\"\n | \"PENDING\"\n | \"ACTIVE\"\n | \"FAILED\"\n | \"EXPIRED\"\n | \"CANCELED\";\n\nexport type BffPaymentTokenFailureCode =\n | \"ACCOUNT_ALREADY_LINKED\"\n | \"INVALID_ACCOUNT_DETAILS\"\n | \"AUTHENTICATION_FAILED\"\n | \"CARD_DECLINED\"\n | \"CAPTURE_AMOUNT_EXCEEDED\"\n | \"INSUFFICIENT_BALANCE\"\n | \"ISSUER_UNAVAILABLE\"\n | \"CHANNEL_UNAVAILABLE\"\n | \"INVALID_MERCHANT_SETTINGS\";\n\nexport type BffPaymentToken = {\n payment_token_id: string;\n status: BffPaymentTokenStatus;\n failure_code?: BffPaymentTokenFailureCode;\n actions: BffAction[];\n channel_code: string;\n /**\n * Only returned when the payment request is created, not on polling\n */\n session_token_request_id?: string;\n};\n\nexport type BffPaymentRequestStatus =\n | \"ACCEPTING_PAYMENTS\"\n | \"REQUIRES_ACTION\"\n | \"PENDING\"\n | \"AUTHORIZED\"\n | \"CANCELED\"\n | \"EXPIRED\"\n | \"SUCCEEDED\"\n | \"FAILED\";\n\nexport type BffPaymentRequestFailureCode =\n | \"ACCOUNT_ACCESS_BLOCKED\"\n | \"INVALID_MERCHANT_SETTINGS\"\n | \"INVALID_ACCOUNT_DETAILS\"\n | \"PAYMENT_ATTEMPT_COUNTS_EXCEEDED\"\n | \"USER_DEVICE_UNREACHABLE\"\n | \"CHANNEL_UNAVAILABLE\"\n | \"INSUFFICIENT_BALANCE\"\n | \"ACCOUNT_NOT_ACTIVATED\"\n | \"INVALID_TOKEN\"\n | \"SERVER_ERROR\"\n | \"PARTNER_TIMEOUT_ERROR\"\n | \"TIMEOUT_ERROR\"\n | \"USER_DECLINED_PAYMENT\"\n | \"USER_DID_NOT_AUTHORIZE\"\n | \"PAYMENT_REQUEST_EXPIRED\"\n | \"FAILURE_DETAILS_UNAVAILABLE\"\n | \"EXPIRED_OTP\"\n | \"INVALID_OTP\"\n | \"PAYMENT_AMOUNT_LIMITS_EXCEEDED\"\n | \"OTP_ATTEMPT_COUNTS_EXCEEDED\"\n | \"CARD_DECLINED\"\n | \"DECLINED_BY_ISSUER\"\n | \"ISSUER_UNAVAILABLE\"\n | \"INVALID_CVV\"\n | \"DECLINED_BY_PROCESSOR\"\n | \"CAPTURE_AMOUNT_EXCEEDED\"\n | \"AUTHENTICATION_FAILED\";\n\nexport type BffPaymentRequest = {\n payment_request_id: string;\n status: BffPaymentRequestStatus;\n failure_code?: BffPaymentRequestFailureCode;\n actions: BffAction[];\n channel_code: string;\n /**\n * Only returned when the payment request is created, not on polling\n */\n session_token_request_id?: string;\n};\n\nexport enum BffPaymentEntityType {\n PaymentRequest = \"REQUEST\",\n PaymentToken = \"TOKEN\",\n}\n\nexport type BffPaymentEntity =\n | {\n id: string;\n type: BffPaymentEntityType.PaymentRequest;\n entity: BffPaymentRequest;\n }\n | {\n id: string;\n type: BffPaymentEntityType.PaymentToken;\n entity: BffPaymentToken;\n };\n\nexport function toPaymentEntity(\n prOrPt: BffPaymentRequest | BffPaymentToken,\n): BffPaymentEntity {\n if (\"payment_request_id\" in prOrPt) {\n return {\n id: prOrPt.payment_request_id,\n type: BffPaymentEntityType.PaymentRequest,\n entity: prOrPt,\n };\n } else {\n return {\n id: prOrPt.payment_token_id,\n type: BffPaymentEntityType.PaymentToken,\n entity: prOrPt,\n };\n }\n}\n\nexport function getFailureCodeCopyKey<\n T extends NonNullable<\n BffPaymentRequestFailureCode | BffPaymentTokenFailureCode\n >,\n>(failureCode: T) {\n return `failure_code.${failureCode.toLowerCase() as Lowercase<T>}` as const;\n}\n\nexport function getPaymentEntityStatusCopyKey<\n T extends\n | BffPaymentEntityType.PaymentRequest\n | BffPaymentEntityType.PaymentToken,\n S extends \"FAILED\" | \"EXPIRED\" | \"CANCELED\",\n const Suffix extends string,\n>(entityType: T, status: S, suffix: Suffix) {\n const t =\n entityType === BffPaymentEntityType.PaymentRequest\n ? \"payment_request\"\n : \"payment_token\";\n return `${t}_status.${\n status.toLowerCase() as Lowercase<S>\n }.${suffix}` as const;\n}\n","import {\n BffChannel,\n MockActionType,\n MockActionTypeSingle,\n} from \"../backend-types/channel\";\nimport { BffPollResponse } from \"../backend-types/common\";\nimport {\n BffAction,\n BffPaymentEntity,\n BffPaymentEntityType,\n BffPaymentRequest,\n BffPaymentRequestStatus,\n BffPaymentToken,\n BffPaymentTokenStatus,\n} from \"../backend-types/payment-entity\";\nimport { BffPaymentOptions } from \"../backend-types/payment-options\";\nimport { BffSession } from \"../backend-types/session\";\nimport { WorldState } from \"../public-sdk\";\nimport { assert, randomHexString, randomUUID } from \"../utils\";\n\nconst examplePublicKey =\n \"MHYwEAYHKoZIzj0CAQYFK4EEACIDYgAEyCADI5pdf6KmN8+Fxl2ES3yolUKXunNeY3gGScGNEvDcrcHAPKxIInAo5DVnDvTtYtqZvx/bu7HLeBJNMXwHhie/uyNEtT8dSaLc9bd0WSlYdxI+iUsTv2Qu0LiiPrZs\";\nconst exampleSignature =\n \"NKf7whM9meUs/eRCvG0oc180MDiyeli3kH6EQ3ZahECHsZQi5G2IpH6vk3cYMtf01Y1L4OBn1SZCOv1kwpjIUet4DJeoTwwq2nM5b+K7rD+/WFTi3AEX4NWJNkKi0a91\";\n\nexport function makeTestSdkKey() {\n return `session-${randomHexString(32)}-mock-${examplePublicKey}-${exampleSignature}`;\n}\n\nexport function makeTestPollResponse(\n world: WorldState,\n channel: BffChannel | null,\n result: \"SUCCESS\" | \"FAILURE\" | \"PENDING\" | \"PENDING_PAYMENT_ENTITY_ONLY\",\n) {\n const { session, paymentEntity } = world;\n assert(session);\n assert(paymentEntity);\n assert(channel);\n\n switch (result) {\n case \"PENDING\":\n // make the session pending\n return makeTestPollResponseForPending(session);\n case \"PENDING_PAYMENT_ENTITY_ONLY\":\n // make the payment entity pending, but keep the session active\n return makeTestPollResponseForPendingPaymentEntityOnly(\n session,\n paymentEntity,\n );\n case \"SUCCESS\": {\n if (channel._mock_action_type === \"PENDING\") {\n // channels with mock pending state (like FPX) always go to pending state when success is requested\n return makeTestPollResponseForPending(session);\n } else {\n return makeTestPollResponseForSuccess(session, paymentEntity);\n }\n }\n case \"FAILURE\":\n return makeTestPollResponseForFailure(session, paymentEntity);\n }\n}\n\nexport function makeTestPollResponseForPending(\n session: BffSession,\n): BffPollResponse {\n return {\n session: {\n ...session,\n status: \"PENDING\",\n },\n };\n}\n\nexport function makeTestPollResponseForPendingPaymentEntityOnly(\n session: BffSession,\n paymentEntity: BffPaymentEntity,\n): BffPollResponse {\n const paymentRequest =\n paymentEntity.type === BffPaymentEntityType.PaymentRequest\n ? paymentEntity.entity\n : undefined;\n const paymentToken =\n paymentEntity.type === BffPaymentEntityType.PaymentToken\n ? paymentEntity.entity\n : undefined;\n\n return {\n session,\n payment_request: withPaymentEntityStatus(paymentRequest, \"PENDING\"),\n payment_token: withPaymentEntityStatus(paymentToken, \"PENDING\"),\n };\n}\n\nexport function makeTestPollResponseForSuccess(\n session: BffSession,\n paymentEntity: BffPaymentEntity,\n): BffPollResponse {\n const paymentRequest =\n paymentEntity.type === BffPaymentEntityType.PaymentRequest\n ? paymentEntity.entity\n : undefined;\n const paymentToken =\n paymentEntity.type === BffPaymentEntityType.PaymentToken\n ? paymentEntity.entity\n : undefined;\n\n return {\n session: {\n ...session,\n status: \"COMPLETED\",\n payment_request_id: paymentRequest?.payment_request_id,\n payment_token_id: paymentToken?.payment_token_id,\n },\n payment_request: withPaymentEntityStatus(paymentRequest, \"SUCCEEDED\"),\n payment_token: withPaymentEntityStatus(paymentToken, \"ACTIVE\"),\n succeeded_channel: {\n channel_code: paymentEntity.entity.channel_code,\n logo_url: \"https://placehold.co/48\",\n },\n };\n}\n\nexport function makeTestPollResponseForFailure(\n session: BffSession,\n paymentEntity: BffPaymentEntity,\n): BffPollResponse {\n const paymentRequest =\n paymentEntity.type === BffPaymentEntityType.PaymentRequest\n ? paymentEntity.entity\n : undefined;\n const paymentToken =\n paymentEntity.type === BffPaymentEntityType.PaymentToken\n ? paymentEntity.entity\n : undefined;\n\n return {\n session: {\n ...session,\n status: \"ACTIVE\",\n },\n payment_request: withPaymentEntityStatus(paymentRequest, \"FAILED\"),\n payment_token: withPaymentEntityStatus(paymentToken, \"FAILED\"),\n };\n}\n\nexport function withPaymentEntityStatus<\n T extends BffPaymentRequest | BffPaymentToken | undefined,\n>(\n prOrPt: T,\n status: T extends BffPaymentRequest\n ? BffPaymentRequestStatus\n : T extends BffPaymentToken\n ? BffPaymentTokenStatus\n : undefined,\n): T {\n if (!prOrPt) return prOrPt;\n return {\n ...prOrPt,\n status: status,\n };\n}\n\nexport function makeTestPaymentRequest(\n channelCode: string,\n mockActionType: MockActionType | undefined,\n): BffPaymentRequest {\n if (mockActionType === \"PENDING\") {\n return {\n payment_request_id: `pr-${randomUUID()}`,\n status: \"PENDING\",\n channel_code: channelCode,\n actions: [],\n session_token_request_id: randomUUID(),\n };\n } else if (mockActionType) {\n return {\n payment_request_id: `pr-${randomUUID()}`,\n status: \"REQUIRES_ACTION\",\n channel_code: channelCode,\n actions: makeMockActions(mockActionType),\n session_token_request_id: randomUUID(),\n };\n } else {\n return {\n payment_request_id: `pr-${randomUUID()}`,\n status: \"SUCCEEDED\",\n channel_code: channelCode,\n actions: [],\n session_token_request_id: randomUUID(),\n };\n }\n}\n\nexport function makeTestPaymentToken(\n channelCode: string,\n mockActionType: MockActionType | undefined,\n): BffPaymentToken {\n if (mockActionType === \"PENDING\") {\n return {\n payment_token_id: `pt-${randomUUID()}`,\n status: \"PENDING\",\n channel_code: channelCode,\n actions: makeMockActions(mockActionType),\n session_token_request_id: randomUUID(),\n };\n } else if (mockActionType) {\n return {\n payment_token_id: `pt-${randomUUID()}`,\n status: \"REQUIRES_ACTION\",\n channel_code: channelCode,\n actions: makeMockActions(mockActionType),\n session_token_request_id: randomUUID(),\n };\n } else {\n return {\n payment_token_id: `pt-${randomUUID()}`,\n status: \"ACTIVE\",\n channel_code: channelCode,\n actions: [],\n session_token_request_id: randomUUID(),\n };\n }\n}\n\nexport function makeMockActions(\n mockActionType: MockActionType | undefined,\n): BffAction[] {\n if (!mockActionType) return [];\n const mockActionArray = Array.isArray(mockActionType)\n ? mockActionType\n : [mockActionType];\n const mockActions = mockActionArray\n .map((actionType) => makeOneMockAction(actionType))\n .filter((action) => action !== null);\n return mockActions;\n}\n\nexport function makeOneMockAction(\n mockActionType: MockActionTypeSingle,\n): BffAction | null {\n if (mockActionType === \"PENDING\") {\n throw new Error(\"PENDING mock action type should not generate an action\");\n }\n\n switch (mockActionType) {\n case \"IFRAME\":\n return {\n type: \"REDIRECT_CUSTOMER\",\n descriptor: \"WEB_URL\",\n value: \"https://example.com/iframe\",\n iframe_capable: true,\n };\n case \"REDIRECT\":\n return {\n type: \"REDIRECT_CUSTOMER\",\n descriptor: \"WEB_URL\",\n value: \"https://example.com/redirect\",\n iframe_capable: false,\n };\n case \"PAYLINK\":\n return {\n type: \"REDIRECT_CUSTOMER\",\n descriptor: \"WEB_GOOGLE_PAYLINK\",\n value: \"https://example.com/paylink\",\n };\n case \"DEEP_LINK\":\n return {\n type: \"REDIRECT_CUSTOMER\",\n descriptor: \"DEEPLINK_URL\",\n value: \"mockapp://mock-deep-link\",\n };\n case \"PUSH_NOTIFICATION\": {\n // push notification actions are represented by setting `{ status: \"REQUIRES_ACTION\", actions: [] }`\n return null;\n }\n case \"QR\":\n return {\n type: \"PRESENT_TO_CUSTOMER\",\n descriptor: \"QR_STRING\",\n value: \"https://example.com/qr-code-data\",\n action_title: \"Pay with QR Code\",\n action_subtitle: \"Scan the QR code below\",\n action_graphic: \"\",\n instructions: null,\n };\n case \"BARCODE\":\n return {\n type: \"PRESENT_TO_CUSTOMER\",\n descriptor: \"PAYMENT_CODE\",\n value: \"1234567890\",\n action_title: \"Pay at a Store\",\n action_subtitle: \"Show this barcode to the cashier\",\n action_graphic: \"\",\n instructions: null,\n };\n case \"VA\":\n return {\n type: \"PRESENT_TO_CUSTOMER\",\n descriptor: \"VIRTUAL_ACCOUNT_NUMBER\",\n value: \"1234567890\",\n action_title: \"Pay with Virtual Account\",\n action_subtitle:\n \"Protect yourself from fraud - ensure all details are correct\",\n action_graphic: \"\",\n instructions: [\n {\n title: \"Mobile Banking\",\n content: [\n {\n type: \"text\",\n text: \"Open Mobile App\",\n },\n {\n type: \"text\",\n text: \"Select <b>Mock VA</b>, then select <b>Transfer</b>\",\n },\n {\n type: \"text\",\n text: \"Enter your Virtual Account Number, for example 3816523906568, then press <b>OK</b>\",\n },\n {\n type: \"text\",\n text: \"Click on <b>Send</b> button at the top right corner to proceed\",\n },\n {\n type: \"text\",\n text: \"Click <b>OK</b> to proceed\",\n },\n {\n type: \"text\",\n text: \"Enter your PIN to authorize the transaction\",\n },\n ],\n },\n {\n title: \"Internet Banking\",\n content: [\n {\n type: \"text\",\n text: \"Login to the website\",\n },\n {\n type: \"text\",\n text: \"Select <b>Transfer</b>, then select <b>Transfer to Mock VA Virtual Account</b>\",\n },\n {\n type: \"text\",\n text: \"Enter the Virtual Account Number, for example 3816523906568\",\n },\n {\n type: \"text\",\n text: \"Select <b>Continue</b> to proceed your payment\",\n },\n ],\n },\n {\n title: \"ATM\",\n content: [\n {\n type: \"text\",\n text: \"Insert your ATM card and PIN\",\n },\n {\n type: \"text\",\n text: \"Enter your ATM PIN\",\n },\n {\n type: \"text\",\n text: \"Select <b>Transfer</b>\",\n },\n {\n type: \"text\",\n text: \"Select <b>To Mock VA Virtual Account</b>\",\n },\n {\n type: \"text\",\n text: \"Enter Virtual Account Number, for example 3816523906568. Press <b>Correct</b> to proceed\",\n },\n {\n type: \"text\",\n text: \"Verify Virtual Account details and then enter amount to be transferred and select <b>Correct</b> to confirm\",\n },\n {\n type: \"text\",\n text: \"Confirm your transaction details displayed\",\n },\n {\n type: \"text\",\n text: \"Select <b>Yes</b> if the details are correct or <b>No</b> if the details are not correct\",\n },\n ],\n },\n ],\n };\n }\n\n mockActionType satisfies never;\n throw new Error(`Unknown mock action type: ${mockActionType}`);\n}\n\nexport function makeMockPaymentOptions(\n channelCode: string,\n session: BffSession,\n): BffPaymentOptions {\n return {\n channel_code: channelCode,\n country: session.country,\n currency: session.currency,\n amount: session.amount,\n installment_plans: [\n {\n interval: \"MONTH\",\n interval_count: 1,\n terms: 3,\n installment_amount: Math.floor(session.amount / 3),\n total_amount: session.amount,\n description: `Unused`,\n code: \"3M\",\n interest_rate: 1,\n },\n {\n interval: \"MONTH\",\n interval_count: 1,\n terms: 6,\n installment_amount: Math.floor(session.amount / 6),\n total_amount: session.amount,\n description: `Unused`,\n code: \"6M\",\n interest_rate: 1,\n },\n {\n interval: \"MONTH\",\n interval_count: 1,\n terms: 9,\n installment_amount: Math.floor(session.amount / 9),\n total_amount: session.amount,\n description: `Unused`,\n interest_rate: 1,\n code: undefined, // this item has no code (like TH installment channels)\n },\n ],\n };\n}\n","import { FunctionComponent } from \"preact\";\n\ntype Props = {\n title: string;\n subtitle?: string;\n logoUrl: string;\n logoAlt: string;\n redirectUrl: string | null;\n redirectButtonLabel: string | null;\n};\n\nconst RedirectInstructions: FunctionComponent<Props> = (props) => {\n return (\n <div className=\"xendit-redirect-instructions\">\n <div className=\"xendit-redirect-instructions-logo\">\n <img src={props.logoUrl} alt={props.logoAlt} />\n </div>\n\n <div className=\"xendit-redirect-instructions-text\">\n <div className=\"xendit-text-16\">{props.title}</div>\n {props.subtitle ? (\n <div className=\"xendit-text-14 xendit-text-secondary\">\n {props.subtitle}\n </div>\n ) : null}\n </div>\n\n {props.redirectUrl ? (\n <a\n href={props.redirectUrl}\n className=\"xendit-redirect-instructions-button xendit-text-14\"\n >\n {props.redirectButtonLabel ?? \"\"}\n </a>\n ) : null}\n </div>\n );\n};\n\nexport { RedirectInstructions };\n","import { FunctionComponent } from \"preact\";\nimport { RedirectInstructions } from \"./redirect-instructions\";\nimport { TFunction } from \"../localization\";\nimport { BffChannel } from \"../backend-types/channel\";\n\ntype Props = {\n t: TFunction;\n channel: BffChannel;\n};\n\nexport const ActionEmptyListPushNotification: FunctionComponent<Props> = (\n props,\n) => {\n const t = props.t;\n const channel = props.channel;\n const channelName = channel.brand_name;\n\n return (\n <RedirectInstructions\n title={t(\"action_empty_list_push_notification.title\")}\n subtitle={t(\"action_empty_list_push_notification.subtext\", {\n channelName,\n })}\n logoUrl={channel.brand_logo_url}\n logoAlt={t(\"image_alt.channel_logo\", {\n channelName,\n })}\n redirectUrl={null}\n redirectButtonLabel={null}\n />\n );\n};\n","import { FunctionComponent } from \"preact\";\nimport { RedirectInstructions } from \"./redirect-instructions\";\nimport { TFunction } from \"../localization\";\nimport { BffChannel } from \"../backend-types/channel\";\n\ntype Props = {\n t: TFunction;\n channel: BffChannel;\n redirectUrl: string | null;\n};\n\nexport const ActionDeepLink: FunctionComponent<Props> = (props) => {\n const t = props.t;\n const channel = props.channel;\n const channelName = channel.brand_name;\n\n return (\n <RedirectInstructions\n title={t(\"action_deeplink.title\")}\n subtitle={t(\"action_deeplink.instructions\", {\n channelName,\n })}\n logoUrl={channel.brand_logo_url}\n logoAlt={t(\"image_alt.channel_logo\", {\n channelName,\n })}\n redirectUrl={props.redirectUrl}\n redirectButtonLabel={t(\"action_deeplink.button\", {\n channelName,\n })}\n />\n );\n};\n","import { createElement, render, ComponentChildren } from \"preact\";\nimport { IframeActionCompleteEvent } from \"../../../../shared/types\";\nimport {\n InternalBehaviorTreeUpdateEvent,\n InternalScheduleMockUpdateEvent,\n} from \"../../private-event-types\";\nimport { XenditWillRedirectEvent } from \"../../public-event-types\";\nimport { assert, assertEquals } from \"../../utils\";\nimport { BlackboardType } from \"../behavior-tree\";\nimport { Behavior } from \"../behavior-tree-runner\";\nimport { ActionIframe } from \"../../components/action-iframe\";\nimport { ActionQr } from \"../../components/action-qr\";\nimport { internal } from \"../../internal\";\nimport DefaultActionContainer from \"../../components/default-action-container\";\nimport { ActionVa } from \"../../components/action-va\";\nimport { makeTestPollResponse } from \"../../data/test-data-modifiers\";\nimport { ActionEmptyListPushNotification } from \"../../components/action-empty-list-push-notification\";\nimport { ActionDeepLink } from \"../../components/action-deep-link\";\n\nabstract class ContainerActionBehavior implements Behavior {\n cleanupFn: ((cancelledByUser: boolean) => void) | null = null;\n defaultContainerHeight = 0;\n defaultContainerWidth = 400;\n title = \"Complete your payment\";\n\n constructor(protected bb: BlackboardType) {}\n\n /**\n * Creates a default action container if the user has not created one already.\n * Returns a cleanup function that destroys the default action container if it was created.\n */\n ensureHasActionContainer() {\n if (this.bb.sdk[internal].liveComponents.actionContainer) {\n // user created action container already\n // TODO: validate it's in the dom and the right size\n return () => {\n this.emptyActionContainer();\n };\n }\n\n let cleanedUp = false;\n let success = false;\n\n const container = document.createElement(\"div\");\n container.setAttribute(\"class\", \"xendit-default-action-container\");\n\n const props = {\n sdk: this.bb.sdk,\n title: this.title,\n width: this.defaultContainerWidth,\n height: this.defaultContainerHeight,\n onClose: () => {\n cleanedUp = true;\n render(null, container);\n container.remove();\n if (!success) {\n this.bb.sdk.abortSubmission();\n }\n },\n };\n render(createElement(DefaultActionContainer, props), container);\n document.body.appendChild(container);\n\n // Cleanup function\n // (if actionCancelledByUser is true, abort the submission after the modal closes)\n return (actionCancelledByUser: boolean) => {\n if (!actionCancelledByUser) {\n success = true;\n }\n\n if (cleanedUp) return;\n\n // make the dialog play its close animation before removing it\n render(\n createElement(DefaultActionContainer, {\n ...props,\n close: true,\n }),\n container,\n );\n };\n }\n\n cleanupActionContainer(cancelledByUser: boolean) {\n if (this.cleanupFn) {\n this.cleanupFn(cancelledByUser);\n this.cleanupFn = null;\n }\n }\n\n emptyActionContainer() {\n const container = this.bb.sdk[internal].liveComponents.actionContainer;\n if (container) {\n render(null, container);\n }\n }\n\n updateActionContainerBrandColor() {\n assert(this.bb.channel);\n\n const container = this.bb.sdk[internal].liveComponents.actionContainer;\n if (container) {\n container.style.setProperty(\n \"--xendit-channel-brand-color\",\n this.bb.channel.brand_color,\n );\n }\n }\n\n /**\n * Populates the action container with the provided component.\n * This method handles the common logic of getting the container and rendering the component.\n */\n populateActionContainer(createComponent: () => ComponentChildren) {\n const container = this.bb.sdk[internal].liveComponents.actionContainer;\n if (!container) {\n throw new Error(\n \"Trying to populate action container, but it is missing; A default action container should have been created. This is a bug, please contact support.\",\n );\n }\n\n this.updateActionContainerBrandColor();\n\n render(createComponent(), container);\n }\n\n exit() {\n this.cleanupActionContainer(false);\n this.emptyActionContainer();\n }\n}\n\nexport class ActionCompletedBehavior implements Behavior {\n constructor(private bb: BlackboardType) {}\n enter() {}\n}\n\nexport class ActionRedirectBehavior implements Behavior {\n constructor(\n private bb: BlackboardType,\n private url: string,\n ) {}\n\n enter() {\n this.bb.dispatchEvent(new XenditWillRedirectEvent());\n window.location.href = this.url;\n }\n}\n\nexport class ActionIframeBehavior extends ContainerActionBehavior {\n constructor(\n protected bb: BlackboardType,\n private url: string,\n ) {\n super(bb);\n this.defaultContainerHeight = 600;\n }\n\n enter() {\n this.cleanupFn = this.ensureHasActionContainer();\n this.populateActionContainer(() =>\n createElement(ActionIframe, {\n url: this.url,\n mock: this.bb.mock,\n onIframeComplete: (event: IframeActionCompleteEvent) => {\n this.cleanupActionContainer(false);\n\n const mockResult =\n event.mockStatus === \"success\" ? \"SUCCESS\" : \"FAILURE\";\n this.updateMocksOnIframeCompletion(mockResult);\n\n // setting actionCompleted will ensure the action UI isn't shown again\n this.bb.actionCompleted = true;\n // request immediate poll on next update\n this.bb.pollImmediatelyRequested = true;\n\n this.bb.dispatchEvent(new InternalBehaviorTreeUpdateEvent());\n },\n }),\n );\n }\n\n updateMocksOnIframeCompletion(result: \"SUCCESS\" | \"FAILURE\") {\n assert(this.bb.world?.paymentEntity);\n if (this.bb.mock) {\n this.bb.dispatchEvent(\n new InternalScheduleMockUpdateEvent(\n makeTestPollResponse(this.bb.world, this.bb.channel, result),\n ),\n );\n }\n }\n\n exit() {\n super.exit();\n }\n}\n\nexport class ActionQrBehavior extends ContainerActionBehavior {\n constructor(\n protected bb: BlackboardType,\n private actionIndex: string,\n ) {\n super(bb);\n }\n\n enter() {\n const qrAction =\n this.bb.world?.paymentEntity?.entity.actions[Number(this.actionIndex)];\n\n assertEquals(qrAction?.type, \"PRESENT_TO_CUSTOMER\");\n assert(this.bb.world);\n assert(this.bb.channel);\n\n const container = this.bb.sdk[internal].liveComponents.actionContainer;\n\n const actionQrProps = {\n amount: this.bb.world.session.amount,\n businessName: this.bb.world.business.name ?? \"\",\n channelLogo: this.bb.channel.brand_logo_url,\n currency: this.bb.world.session.currency,\n hideUi: container?.getAttribute(\"data-qr-code-only\") === \"true\" || false,\n onAffirm: this.affirmPayment.bind(this),\n qrString: qrAction.value,\n title: qrAction.action_subtitle,\n t: this.bb.sdk.t.bind(this.bb.sdk),\n };\n\n this.cleanupFn = this.ensureHasActionContainer();\n this.populateActionContainer(() => createElement(ActionQr, actionQrProps));\n }\n\n /**\n * Fired when user affirms they have made the payment by clicking\n * the affirm button.\n */\n affirmPayment() {\n if (this.bb.sdk.isProdLive()) {\n // live mode\n this.bb.pollImmediatelyRequested = true;\n } else {\n this.bb.simulatePaymentRequested = true;\n }\n this.bb.dispatchEvent(new InternalBehaviorTreeUpdateEvent());\n }\n\n exit() {\n super.exit();\n }\n}\n\n/**\n * An empty list of actions means the user has to take some action on their own, like tapping a push notification.\n */\nexport class ActionDeepLinkBehavior extends ContainerActionBehavior {\n constructor(\n protected bb: BlackboardType,\n private actionIndex: string,\n ) {\n super(bb);\n }\n\n enter() {\n assert(this.bb.world);\n\n const deepLinkAction =\n this.bb.world?.paymentEntity?.entity.actions[Number(this.actionIndex)];\n assertEquals(deepLinkAction?.type, \"REDIRECT_CUSTOMER\");\n\n if (\n deepLinkAction.descriptor !== \"DEEPLINK_URL\" &&\n deepLinkAction.descriptor !== \"WEB_URL\"\n ) {\n // The deeplink popup can also handle regular web urls (if paylinks are enabled, that's useful to prevent auto-redirects)\n throw new Error(\"Unexpected action type in ActionDeepLinkBehavior\");\n }\n\n const t = this.bb.sdk.t.bind(this.bb.sdk);\n const channel = this.bb.channel;\n assert(channel);\n\n this.cleanupFn = this.ensureHasActionContainer();\n this.populateActionContainer(() => {\n return createElement(ActionDeepLink, {\n t,\n channel,\n redirectUrl: deepLinkAction.value,\n });\n });\n }\n\n exit() {\n super.exit();\n }\n}\n\n/**\n * An empty list of actions means the user has to take some action on their own, like tapping a push notification.\n */\nexport class ActionEmptyListPushNotificationBehavior extends ContainerActionBehavior {\n constructor(protected bb: BlackboardType) {\n super(bb);\n }\n\n enter() {\n assert(this.bb.world);\n\n // Keep this behavior alive even if the payment entity status changes to pending.\n // Normally, the status would change to pending almost immediently and the action would be closed.\n // This helps keep it open until the user pays.\n this.bb.hackyOvoActionLatch = true;\n\n const t = this.bb.sdk.t.bind(this.bb.sdk);\n const channel = this.bb.channel;\n assert(channel);\n\n this.cleanupFn = this.ensureHasActionContainer();\n this.populateActionContainer(() => {\n return createElement(ActionEmptyListPushNotification, {\n t,\n channel,\n });\n });\n\n if (this.bb.mock) {\n this.bb.dispatchEvent(\n new InternalScheduleMockUpdateEvent(\n makeTestPollResponse(\n this.bb.world,\n this.bb.channel,\n \"PENDING_PAYMENT_ENTITY_ONLY\",\n ),\n ),\n );\n }\n }\n\n exit() {\n this.bb.hackyOvoActionLatch = undefined;\n super.exit();\n }\n}\nexport class ActionVaBehavior extends ContainerActionBehavior {\n constructor(\n protected bb: BlackboardType,\n private actionIndex: string,\n ) {\n super(bb);\n }\n\n enter() {\n const vaAction =\n this.bb.world?.paymentEntity?.entity.actions[Number(this.actionIndex)];\n\n assertEquals(vaAction?.type, \"PRESENT_TO_CUSTOMER\");\n assert(this.bb.world);\n assert(this.bb.channel);\n\n const actionVaProps = {\n amount: this.bb.world.session.amount,\n channelLogo: this.bb.channel.brand_logo_url,\n currency: this.bb.world.session.currency,\n onAffirm: this.affirmPayment.bind(this),\n vaNumber: vaAction.value,\n merchantName: this.bb.world.business.name ?? \"\",\n instructions: vaAction.instructions ?? [],\n title: vaAction.action_title,\n t: this.bb.sdk.t.bind(this.bb.sdk),\n };\n\n this.cleanupFn = this.ensureHasActionContainer();\n this.populateActionContainer(() => createElement(ActionVa, actionVaProps));\n }\n\n /**\n * Fired when user affirms they have made the payment by clicking\n * the affirm button.\n */\n affirmPayment() {\n if (this.bb.sdk.isProdLive()) {\n // live mode\n this.bb.pollImmediatelyRequested = true;\n } else {\n this.bb.simulatePaymentRequested = true;\n }\n this.bb.dispatchEvent(new InternalBehaviorTreeUpdateEvent());\n }\n}\n","import { assert, assertEquals } from \"../../utils\";\nimport { BlackboardType } from \"../behavior-tree\";\nimport { Behavior } from \"../behavior-tree-runner\";\n\nexport class ActionPaylinkBehavior implements Behavior {\n private el: HTMLLinkElement | null = null;\n\n constructor(\n public bb: BlackboardType,\n private actionIndex: string,\n ) {}\n\n enter() {\n assert(this.bb.world);\n assert(this.bb.world.paymentEntity);\n\n const action =\n this.bb.world?.paymentEntity?.entity.actions[Number(this.actionIndex)];\n if (!action) {\n throw new Error(\"Action not found for paylink behavior\");\n }\n\n assertEquals(action.type, \"REDIRECT_CUSTOMER\");\n assertEquals(action.descriptor, \"WEB_GOOGLE_PAYLINK\");\n\n const link = document.createElement(\"link\");\n link.rel = \"facilitated-payment\";\n link.href = action.value;\n\n this.el = link;\n document.head.appendChild(link);\n }\n\n exit() {\n this.el?.remove();\n this.el = null;\n }\n}\n","import { lookupCardDetails } from \"../../api\";\nimport { InternalUpdateChannelComponentData } from \"../../private-event-types\";\nimport {\n AbortError,\n cancellableSleep,\n getCardNumberFromChannelProperties,\n isAbortError,\n parseEncryptedFieldValue,\n} from \"../../utils\";\nimport { BlackboardType } from \"../behavior-tree\";\nimport { Behavior } from \"../behavior-tree-runner\";\n\nexport class CardInfoBehavior implements Behavior {\n private cardDetailsRequest: {\n cardNumber: string;\n promise: Promise<void>;\n abortController: AbortController;\n } | null = null;\n\n constructor(\n public bb: BlackboardType,\n private channelCode: string,\n ) {}\n\n enter() {\n this.lookupCardDetails();\n }\n\n update() {\n this.lookupCardDetails();\n }\n\n exit() {\n this.abortLookupCardDetails();\n }\n\n abortLookupCardDetails() {\n if (this.cardDetailsRequest) {\n this.cardDetailsRequest.abortController.abort(new AbortError());\n this.cardDetailsRequest = null;\n }\n }\n\n lookupCardDetails() {\n const cardNumber = getCardNumberFromChannelProperties(\n this.bb.channelProperties,\n );\n if (!cardNumber) {\n return;\n }\n\n // don't look up the card number if a request is in flight for the same card number\n if (this.cardDetailsRequest?.cardNumber === cardNumber) {\n return;\n }\n\n // don't look up the card number if we already have the details\n if (this.bb.channelData?.cardDetails?.cardNumber === cardNumber) {\n return;\n }\n\n if (this.cardDetailsRequest) {\n this.abortLookupCardDetails();\n }\n\n const abortController = new AbortController();\n const promise = cancellableSleep(300, abortController.signal) // debounce\n .then(() => {\n if (this.bb.mock) {\n // in mock mode, if the ciphertext is actually a base64-encoded JSON string, then use that as the mock response\n const encodedError = parseEncryptedFieldValue(cardNumber).cipherText;\n try {\n return JSON.parse(atob(encodedError));\n } catch {\n // not json, ignore\n }\n\n // otherwise, return a fixed mock response\n return {\n schemes: [\"VISA\"],\n country_codes: [\"ID\"],\n require_billing_information: false,\n };\n } else {\n // remove encoded validation error -\n // normally, an invalid card number would have some other stuff appended to the end, but we still want to look up the card details even if the user hasn't finished typing\n const cleanedCardNumber =\n parseEncryptedFieldValue(cardNumber).withoutValidationError;\n\n // real card details\n return lookupCardDetails(\n this.bb.sdkKey,\n {\n card_number: cleanedCardNumber,\n },\n this.bb.sdkKey.sessionAuthKey,\n undefined,\n abortController.signal,\n );\n }\n })\n .then((response) => {\n this.bb.dispatchEvent(\n new InternalUpdateChannelComponentData(this.channelCode, {\n cardDetails: {\n cardNumber,\n details: response,\n },\n }),\n );\n })\n .catch((error) => {\n if (isAbortError(error)) return;\n throw error;\n });\n\n this.cardDetailsRequest = {\n cardNumber,\n promise,\n abortController,\n };\n }\n}\n","import {\n XenditNotReadyEvent,\n XenditReadyEvent,\n} from \"../../public-event-types\";\nimport { BlackboardType } from \"../behavior-tree\";\nimport { Behavior } from \"../behavior-tree-runner\";\n\nexport class ChannelValidBehavior implements Behavior {\n private lastChannelCode: string | null = null;\n\n constructor(private bb: BlackboardType) {}\n\n enter() {\n this.sendReadyEventIfChanged();\n }\n\n update() {\n this.sendReadyEventIfChanged();\n }\n\n sendReadyEventIfChanged() {\n const channelCode = this.bb.channel?.channel_code ?? null;\n if (channelCode && channelCode !== this.lastChannelCode) {\n this.bb.dispatchEvent(new XenditReadyEvent(channelCode));\n this.lastChannelCode = channelCode;\n }\n }\n\n exit() {\n this.bb.dispatchEvent(new XenditNotReadyEvent());\n }\n}\n\n/**\n * If this exists, submission is blocked.\n */\nexport class ChannelInvalidBehavior implements Behavior {\n constructor(\n private bb: BlackboardType,\n private channelCode: string | null,\n ) {}\n\n enter() {}\n}\n","import { pollSession } from \"../../api\";\nimport { BffPollResponse } from \"../../backend-types/common\";\nimport {\n BffPaymentEntity,\n toPaymentEntity,\n} from \"../../backend-types/payment-entity\";\nimport { XenditComponents, XenditComponentsTest } from \"../../public-sdk\";\nimport {\n MOCK_NETWORK_DELAY_MS,\n ParsedSdkKey,\n retryLoop,\n sleep,\n} from \"../../utils\";\n\n/**\n * Polls the session status forever until stop() is called.\n *\n * @example\n * const poller = new PollWorker(sessionId, tokenRequestId, (updatedSession) => {\n * // handle session update\n * }, () => {\n * // handle error\n * });\n *\n * poller.start();\n * // later\n * poller.stop();\n */\nexport class PollWorker {\n started = false;\n stopped = false;\n\n constructor(\n private sdkKey: ParsedSdkKey,\n private sdk: XenditComponents,\n private sessionTokenRequestId: string | null,\n private onPollResult: (\n result: BffPollResponse,\n paymentEntity: BffPaymentEntity | null,\n ) => void,\n ) {}\n\n async start() {\n if (this.stopped) {\n throw new Error(\n \"PollWorker has been stopped, make a new instance instead of calling start again\",\n );\n }\n this.started = true;\n\n // retry loop with exponential backoff\n // chart of retry times:\n // https://www.desmos.com/calculator/3sihry02vd\n // eslint-disable-next-line @typescript-eslint/no-unused-vars\n for await (const attempt of retryLoop(5000, 100, 1.06)) {\n if (this.stopped) return;\n\n let response: BffPollResponse;\n\n if (this.sdk.isMock()) {\n // mock polling\n if (\n this.sdk instanceof XenditComponentsTest &&\n this.sdk.nextMockUpdate\n ) {\n await sleep(MOCK_NETWORK_DELAY_MS); // simulate network delay\n response = this.sdk.nextMockUpdate;\n this.sdk.nextMockUpdate = null;\n } else {\n continue;\n }\n } else {\n // real polling request\n try {\n response = await pollSession(\n this.sdkKey,\n this.sdkKey.sessionAuthKey,\n this.sessionTokenRequestId,\n );\n } catch (_err) {\n // TODO: error handling\n continue;\n }\n }\n if (this.stopped) return;\n\n if (!response.session) {\n throw new Error(\"Session is not defined\"); // should be impossible\n }\n\n let paymentEntity: BffPaymentEntity | null = null;\n if (response.payment_token) {\n paymentEntity = toPaymentEntity(response.payment_token);\n } else if (response.payment_request) {\n paymentEntity = toPaymentEntity(response.payment_request);\n }\n\n this.onPollResult(response, paymentEntity);\n\n // give the caller a chance to stop before we make the next request\n await sleep(1);\n }\n }\n\n isPolling() {\n return this.started && !this.stopped;\n }\n\n stop() {\n this.started = false;\n this.stopped = true;\n }\n}\n","import { BffPollResponse } from \"../../backend-types/common\";\nimport { BffPaymentEntity } from \"../../backend-types/payment-entity\";\nimport { assert } from \"../../utils\";\nimport {\n InternalBehaviorTreeUpdateEvent,\n InternalScheduleMockUpdateEvent,\n InternalUpdateWorldState,\n} from \"../../private-event-types\";\nimport {\n XenditActionBeginEvent,\n XenditActionEndEvent,\n} from \"../../public-event-types\";\nimport { BlackboardType } from \"../behavior-tree\";\nimport { Behavior } from \"../behavior-tree-runner\";\nimport { PollWorker } from \"./poll-worker\";\nimport { makeTestPollResponse } from \"../../data/test-data-modifiers\";\n\nexport class PePendingBehavior implements Behavior {\n private pollWorker: PollWorker;\n constructor(private bb: BlackboardType) {\n this.pollWorker = new PollWorker(\n this.bb.sdkKey,\n this.bb.sdk,\n this.bb.world?.sessionTokenRequestId ?? null,\n this.onPollResult,\n );\n }\n\n enter() {\n if (this.bb.mock) {\n // if we get to pending state in mock mode, we need to schedule a mock update or nothing will happen.\n // usually, the payment entity will have a success/fail status and we need to also update the session status.\n assert(this.bb.world?.paymentEntity);\n switch (this.bb.world?.paymentEntity.entity.status) {\n case \"ACTIVE\":\n case \"AUTHORIZED\":\n case \"SUCCEEDED\":\n case \"PENDING\":\n this.bb.dispatchEvent(\n new InternalScheduleMockUpdateEvent(\n makeTestPollResponse(this.bb.world, this.bb.channel, \"SUCCESS\"),\n ),\n );\n break;\n case \"FAILED\":\n case \"CANCELED\":\n case \"EXPIRED\":\n this.bb.dispatchEvent(\n new InternalScheduleMockUpdateEvent(\n makeTestPollResponse(this.bb.world, this.bb.channel, \"FAILURE\"),\n ),\n );\n break;\n default:\n // should never happen, just stay in pending state forever :(\n }\n }\n\n this.pollWorker.start();\n }\n\n exit() {\n this.pollWorker.stop();\n }\n\n onPollResult = (\n pollResponse: BffPollResponse,\n paymentEntity: BffPaymentEntity | null,\n ) => {\n this.bb.dispatchEvent(\n new InternalUpdateWorldState({\n session: pollResponse.session,\n paymentEntity: paymentEntity ?? undefined, // do not clear payment entity if this returns undefined/null\n succeededChannel: pollResponse.succeeded_channel ?? null, // do set succeeded channel to null if it doesn't return one\n }),\n );\n };\n}\n\nexport class PeRequiresActionBehavior implements Behavior {\n private pollWorker: PollWorker | null = null;\n public canCreateActionContainer: boolean = true;\n\n constructor(private bb: BlackboardType) {\n this.resetPolling();\n }\n\n enter() {\n this.bb.dispatchEvent(new XenditActionBeginEvent());\n this.canCreateActionContainer = false;\n this.pollWorker?.start();\n }\n\n update() {\n if (this.bb.pollImmediatelyRequested) {\n this.bb.pollImmediatelyRequested = false;\n this.resetPolling();\n }\n }\n\n exit() {\n this.pollWorker?.stop();\n this.bb.dispatchEvent(new XenditActionEndEvent());\n\n // clear flag for next time\n this.bb.actionCompleted = false;\n }\n\n onPollResult = (\n pollResponse: BffPollResponse,\n paymentEntity: BffPaymentEntity | null,\n ) => {\n this.bb.dispatchEvent(\n new InternalUpdateWorldState({\n session: pollResponse.session,\n paymentEntity: paymentEntity ?? undefined, // do not clear payment entity if this returns undefined/null\n succeededChannel: pollResponse.succeeded_channel ?? null, // do set succeeded channel to null if it doesn't return one\n }),\n );\n };\n\n /**\n * Stop the current poll worker and make a new one. Start polling if the previous pollWorker was polling.\n */\n resetPolling() {\n const polling = this.pollWorker?.isPolling() ?? false;\n this.pollWorker?.stop();\n this.pollWorker = new PollWorker(\n this.bb.sdkKey,\n this.bb.sdk,\n this.bb.world?.sessionTokenRequestId ?? null,\n this.onPollResult,\n );\n if (polling) {\n this.pollWorker.start();\n }\n }\n}\n\nexport class PeFailedBehavior implements Behavior {\n constructor(private bb: BlackboardType) {}\n\n enter() {\n this.bb.submissionRequested = false;\n this.bb.dispatchEvent(new InternalBehaviorTreeUpdateEvent());\n }\n}\n","import { getPaymentOptions } from \"../../api\";\nimport { BffPaymentOptions } from \"../../backend-types/payment-options\";\nimport { BffSession } from \"../../backend-types/session\";\nimport { makeMockPaymentOptions } from \"../../data/test-data-modifiers\";\nimport { InternalUpdateChannelComponentData } from \"../../private-event-types\";\nimport {\n AbortError,\n assert,\n cancellableSleep,\n formHasFieldOfType,\n getCardNumberFromChannelProperties,\n isAbortError,\n MOCK_NETWORK_DELAY_MS,\n ParsedSdkKey,\n parseEncryptedFieldValue,\n} from \"../../utils\";\nimport { BlackboardType } from \"../behavior-tree\";\nimport { Behavior } from \"../behavior-tree-runner\";\n\nexport class PaymentOptionsBehavior implements Behavior {\n private paymentOptionsRequest: {\n cardNumber: string | undefined;\n promise: Promise<void>;\n abortController: AbortController;\n } | null = null;\n\n constructor(\n public bb: BlackboardType,\n private channelCode: string,\n ) {}\n\n enter() {\n this.lookupPaymentOptions();\n }\n\n update() {\n this.lookupPaymentOptions();\n }\n\n exit() {\n this.abortLookupPaymentOptions();\n }\n\n abortLookupPaymentOptions() {\n if (this.paymentOptionsRequest) {\n this.paymentOptionsRequest.abortController.abort(new AbortError());\n this.paymentOptionsRequest = null;\n }\n }\n\n lookupPaymentOptions() {\n assert(this.bb.world);\n assert(this.bb.channel);\n\n let cardNumber: string | undefined;\n if (formHasFieldOfType(this.bb.channel.form, \"credit_card_number\")) {\n cardNumber =\n getCardNumberFromChannelProperties(this.bb.channelProperties) ??\n undefined;\n\n // don't look up payment options if there's a card number field but it's not filled in\n if (!cardNumber) {\n return;\n }\n\n // don't look up the payment options if a request is in flight for the same card number\n if (this.paymentOptionsRequest?.cardNumber === cardNumber) {\n return;\n }\n\n // don't look up the payment options if we already have them for the same card numnber (including null)\n if (\n this.bb.channelData?.paymentOptions?.cardNumber ??\n null === cardNumber\n ) {\n return;\n }\n\n // don't look up payment options if the card number is invalid\n if (cardNumber) {\n const parsed = parseEncryptedFieldValue(cardNumber);\n if (!parsed.valid) {\n return;\n }\n }\n } else {\n // channel does not have a card number field, skip if any request is complete or in flight\n if (this.paymentOptionsRequest || this.bb.channelData?.paymentOptions) {\n return;\n }\n }\n\n if (this.paymentOptionsRequest) {\n this.abortLookupPaymentOptions();\n }\n\n const abortController = new AbortController();\n const promise = getPaymentOptionsAsync(\n this.bb.sdkKey,\n this.bb.world.session,\n this.bb.channel.channel_code,\n cardNumber,\n abortController.signal,\n this.bb.mock,\n )\n .then((response) => {\n this.bb.dispatchEvent(\n new InternalUpdateChannelComponentData(this.channelCode, {\n paymentOptions: {\n cardNumber: cardNumber ?? null,\n options: response,\n },\n }),\n );\n })\n .catch((error) => {\n if (isAbortError(error)) return;\n throw error;\n });\n\n this.paymentOptionsRequest = {\n cardNumber: cardNumber ?? undefined,\n promise,\n abortController,\n };\n }\n}\n\nasync function getPaymentOptionsAsync(\n sdkKey: ParsedSdkKey,\n session: BffSession,\n channelCode: string,\n cardNumber: string | undefined,\n abortSignal: AbortSignal,\n mock: boolean,\n): Promise<BffPaymentOptions> {\n if (mock) {\n // mock implementation\n return cancellableSleep(MOCK_NETWORK_DELAY_MS, abortSignal).then(() => {\n return makeMockPaymentOptions(channelCode, session);\n });\n } else {\n // real implementation\n const body = {\n channel_code: channelCode,\n channel_properties: cardNumber\n ? {\n card_number: cardNumber,\n }\n : undefined,\n };\n return getPaymentOptions(\n sdkKey,\n body,\n sdkKey.sessionAuthKey,\n null,\n abortSignal,\n );\n }\n}\n","import { InternalNeedsRerenderEvent } from \"../../private-event-types\";\nimport {\n XenditFatalErrorEvent,\n XenditInitEvent,\n} from \"../../public-event-types\";\nimport { BlackboardType } from \"../behavior-tree\";\nimport { Behavior } from \"../behavior-tree-runner\";\n\nexport class SdkLoadingBehavior implements Behavior {\n constructor(private bb: BlackboardType) {}\n\n enter() {\n // do nothing\n }\n}\n\nexport class SdkActiveBehavior implements Behavior {\n constructor(private bb: BlackboardType) {}\n\n enter() {\n this.bb.dispatchEvent(new XenditInitEvent());\n\n // Schedule rerender (components don't render anything if the sdk state is not active)\n this.bb.dispatchEvent(new InternalNeedsRerenderEvent());\n }\n\n exit() {\n this.bb.dispatchEvent(new InternalNeedsRerenderEvent());\n }\n}\n\nexport class SdkFatalErrorBehavior implements Behavior {\n constructor(private bb: BlackboardType) {}\n\n enter() {\n this.bb.dispatchEvent(\n new XenditFatalErrorEvent(\n this.bb.sdkFatalErrorMessage ?? \"Unknown error\",\n ),\n );\n }\n}\n","import {\n BffPaymentEntity,\n BffPaymentEntityType,\n} from \"../../backend-types/payment-entity\";\nimport { InternalUpdateWorldState } from \"../../private-event-types\";\nimport {\n XenditPaymentRequestDiscardedEvent,\n XenditPaymentTokenDiscardedEvent,\n} from \"../../public-event-types\";\nimport { BlackboardType } from \"../behavior-tree\";\n\nexport function discardPaymentEntity(\n paymentEntity: BffPaymentEntity,\n dispatchEvent: BlackboardType[\"dispatchEvent\"],\n) {\n switch (paymentEntity.type) {\n case BffPaymentEntityType.PaymentRequest:\n dispatchEvent(new XenditPaymentRequestDiscardedEvent(paymentEntity.id));\n break;\n case BffPaymentEntityType.PaymentToken:\n dispatchEvent(new XenditPaymentTokenDiscardedEvent(paymentEntity.id));\n break;\n default:\n paymentEntity satisfies never;\n }\n dispatchEvent(\n new InternalUpdateWorldState({\n paymentEntity: null,\n sessionTokenRequestId: null,\n }),\n );\n}\n","import { BffPollResponse } from \"../../backend-types/common\";\nimport { BffPaymentEntity } from \"../../backend-types/payment-entity\";\nimport {\n InternalNeedsRerenderEvent,\n InternalUpdateWorldState,\n} from \"../../private-event-types\";\nimport {\n XenditSessionCompleteEvent,\n XenditSessionExpiredOrCanceledEvent,\n XenditSessionNotPendingEvent,\n XenditSessionPendingEvent,\n} from \"../../public-event-types\";\nimport { assert } from \"../../utils\";\nimport { BlackboardType } from \"../behavior-tree\";\nimport { Behavior } from \"../behavior-tree-runner\";\nimport { discardPaymentEntity } from \"./discard\";\nimport { PollWorker } from \"./poll-worker\";\n\nexport class SessionActiveBehavior implements Behavior {\n constructor(private bb: BlackboardType) {}\n\n enter() {\n // Schedule rerender (components don't render anything if the session state is not active)\n this.bb.dispatchEvent(new InternalNeedsRerenderEvent());\n }\n\n exit() {\n this.bb.dispatchEvent(new InternalNeedsRerenderEvent());\n }\n}\n\nexport class SessionCompletedBehavior implements Behavior {\n constructor(private bb: BlackboardType) {}\n\n enter() {\n this.bb.dispatchEvent(new XenditSessionCompleteEvent());\n }\n}\n\nexport class SessionFailedBehavior implements Behavior {\n constructor(private bb: BlackboardType) {}\n\n enter() {\n this.bb.dispatchEvent(new XenditSessionExpiredOrCanceledEvent());\n }\n}\n\nexport class SessionPendingBehavior implements Behavior {\n private pollWorker: PollWorker;\n\n constructor(private bb: BlackboardType) {\n this.pollWorker = new PollWorker(\n this.bb.sdkKey,\n this.bb.sdk,\n this.bb.world?.sessionTokenRequestId ?? null,\n this.onPollResult,\n );\n }\n\n enter() {\n this.pollWorker.start();\n\n this.bb.dispatchEvent(new XenditSessionPendingEvent());\n }\n\n exit() {\n this.pollWorker.stop();\n\n assert(this.bb.world?.session);\n\n // discard payment entity unless session is transitioning to COMPLETE\n const paymentEntity = this.bb.world.paymentEntity;\n if (this.bb.world.session.status !== \"COMPLETED\" && paymentEntity) {\n discardPaymentEntity(paymentEntity, this.bb.dispatchEvent);\n }\n\n this.bb.dispatchEvent(new XenditSessionNotPendingEvent());\n }\n\n onPollResult = (\n pollResponse: BffPollResponse,\n paymentEntity: BffPaymentEntity | null,\n ) => {\n this.bb.dispatchEvent(\n new InternalUpdateWorldState({\n session: pollResponse.session,\n paymentEntity: paymentEntity ?? undefined, // do not clear payment entity if this returns undefined/null\n succeededChannel: pollResponse.succeeded_channel ?? null, // do set succeeded channel to null if it doesn't return one\n }),\n );\n };\n}\n","import { simulatePaymentRequest } from \"../../api\";\nimport { BffChannel } from \"../../backend-types/channel\";\nimport { BffPaymentEntityType } from \"../../backend-types/payment-entity\";\nimport {\n makeTestPaymentRequest,\n makeTestPollResponse,\n} from \"../../data/test-data-modifiers\";\nimport {\n InternalBehaviorTreeUpdateEvent,\n InternalScheduleMockUpdateEvent,\n} from \"../../private-event-types\";\nimport {\n AbortError,\n cancellableSleep,\n isAbortError,\n MOCK_NETWORK_DELAY_MS,\n ParsedSdkKey,\n} from \"../../utils\";\nimport { BlackboardType } from \"../behavior-tree\";\nimport { Behavior } from \"../behavior-tree-runner\";\n\nexport class SimulatePaymentBehavior implements Behavior {\n exited = false;\n\n private simulationRequest: {\n promise: Promise<void>;\n abortController: AbortController;\n } | null = null;\n\n constructor(private bb: BlackboardType) {}\n\n enter() {\n this.simulatePayment();\n }\n\n exit() {\n this.exited = true;\n this.bb.simulatePaymentRequested = false;\n this.abortSimulation();\n }\n\n abortSimulation() {\n if (this.simulationRequest) {\n this.simulationRequest.abortController.abort(new AbortError());\n this.simulationRequest = null;\n }\n }\n\n simulatePayment() {\n if (this.simulationRequest) {\n this.abortSimulation();\n }\n\n if (!this.bb.channel) {\n throw new Error(\"Channel is missing\");\n }\n if (!this.bb.world) {\n throw new Error(\"Invalid state\");\n }\n if (!this.bb.world.paymentEntity) {\n throw new Error(\"Payment entity is missing\");\n }\n if (\n this.bb.world.paymentEntity.type !== BffPaymentEntityType.PaymentRequest\n ) {\n throw new Error(\"Payment entity is not a payment request\");\n }\n\n const paymentRequestId = this.bb.world?.paymentEntity.id;\n\n const abortController = new AbortController();\n const promise = simulatePaymentAsync(\n this.bb.sdkKey,\n this.bb.mock,\n this.bb.channel,\n paymentRequestId,\n abortController.signal,\n )\n .then(() => {\n if (this.bb.mock && this.bb.world) {\n // in mock mode, trigger transition to success state\n this.bb.dispatchEvent(\n new InternalScheduleMockUpdateEvent(\n makeTestPollResponse(this.bb.world, this.bb.channel, \"SUCCESS\"),\n ),\n );\n }\n\n this.bb.dispatchEvent(new InternalBehaviorTreeUpdateEvent());\n })\n .catch((error) => {\n if (isAbortError(error)) return;\n\n // ignore if we already exited\n if (!this.exited) {\n // exit the simulate payment state and log the error\n this.bb.simulatePaymentRequested = false;\n console.error(\"Simulate Payment failed:\", error);\n }\n });\n\n this.simulationRequest = {\n promise,\n abortController,\n };\n }\n}\n\nasync function simulatePaymentAsync(\n sdkKey: ParsedSdkKey,\n mock: boolean,\n channel: BffChannel,\n paymentRequestId: string,\n abortSignal: AbortSignal,\n) {\n if (mock) {\n await cancellableSleep(MOCK_NETWORK_DELAY_MS, abortSignal);\n return makeTestPaymentRequest(\n channel.channel_code,\n channel._mock_action_type,\n );\n } else {\n return await simulatePaymentRequest(\n sdkKey,\n {\n channel_code: channel.channel_code,\n },\n {\n sessionAuthKey: sdkKey.sessionAuthKey,\n paymentRequestId: paymentRequestId,\n },\n undefined,\n abortSignal,\n );\n }\n}\n","import { createPaymentRequest, createPaymentToken } from \"../../api\";\nimport { ChannelProperties, MockActionType } from \"../../backend-types/channel\";\nimport {\n BffPaymentEntity,\n BffPaymentEntityType,\n BffPaymentRequest,\n BffPaymentRequestFailureCode,\n BffPaymentToken,\n BffPaymentTokenFailureCode,\n getFailureCodeCopyKey,\n getPaymentEntityStatusCopyKey,\n toPaymentEntity,\n} from \"../../backend-types/payment-entity\";\nimport { BffSessionType } from \"../../backend-types/session\";\nimport {\n InternalBehaviorTreeUpdateEvent,\n InternalNeedsRerenderEvent,\n InternalScheduleMockUpdateEvent,\n InternalUpdateWorldState,\n} from \"../../private-event-types\";\nimport {\n XenditPaymentRequestCreatedEvent,\n XenditPaymentTokenCreatedEvent,\n XenditSubmissionBeginEvent,\n XenditSubmissionEndEvent,\n} from \"../../public-event-types\";\nimport {\n makeTestPaymentRequest,\n makeTestPaymentToken,\n} from \"../../data/test-data-modifiers\";\nimport {\n AbortError,\n assert,\n cancellableSleep,\n isAbortError,\n MOCK_NETWORK_DELAY_MS,\n ParsedSdkKey,\n} from \"../../utils\";\nimport { BlackboardType } from \"../behavior-tree\";\nimport { Behavior } from \"../behavior-tree-runner\";\nimport { NetworkError } from \"../../networking\";\nimport { TFunction } from \"../../localization\";\nimport { discardPaymentEntity } from \"./discard\";\n\nexport type SubmissionError = {\n text: string[];\n code: string;\n};\n\nexport class SubmissionBehavior implements Behavior {\n private exited = false;\n\n private submission: {\n abortController: AbortController;\n promise: Promise<void>;\n } | null = null;\n private submissionError: Error | SubmissionError | null = null;\n\n constructor(private bb: BlackboardType) {}\n\n enter() {\n this.bb.dispatchEvent(new XenditSubmissionBeginEvent());\n this.bb.dispatchEvent(new InternalScheduleMockUpdateEvent(null));\n this.submit();\n }\n\n exit() {\n this.exited = true;\n\n assert(this.bb.world?.session);\n const t = this.bb.sdk.t;\n\n // If session is not complete or pending, discard payment entity\n const paymentEntity = this.bb.world.paymentEntity;\n if (\n this.bb.world.session.status !== \"COMPLETED\" &&\n this.bb.world.session.status !== \"PENDING\" &&\n paymentEntity\n ) {\n discardPaymentEntity(paymentEntity, this.bb.dispatchEvent);\n }\n\n // Determine reason for submission end\n let reason: string;\n let userErrorMessage: string[] | undefined = undefined;\n let developerErrorMessage:\n | {\n type: \"NETWORK_ERROR\" | \"ERROR\" | \"FAILURE\";\n code: string;\n }\n | undefined = undefined;\n\n if (this.bb.world.session.status !== \"ACTIVE\") {\n // if status is not active, that's why we ended submission\n reason = `SESSION_${this.bb.world.session.status}`;\n } else if (\n paymentEntity &&\n (paymentEntity.entity.status === \"FAILED\" ||\n paymentEntity.entity.status === \"CANCELED\" ||\n paymentEntity.entity.status === \"EXPIRED\")\n ) {\n // the payment entity failed, was canceled or expired\n reason = `PAYMENT_${paymentEntity.type}_${paymentEntity.entity.status}`;\n userErrorMessage = failureCodeUserErrorMessage(\n t,\n paymentEntity.type,\n paymentEntity.entity.status,\n paymentEntity.entity.failure_code,\n );\n developerErrorMessage = {\n type: \"FAILURE\",\n code: paymentEntity.entity.failure_code ?? \"UNKNOWN\",\n };\n } else if (this.submissionError) {\n // there was an error during submission\n reason = \"REQUEST_FAILED\";\n if (isSubmissionError(this.submissionError)) {\n // explicit error message from the server\n userErrorMessage = this.submissionError.text;\n developerErrorMessage = {\n type: \"ERROR\",\n code: this.submissionError.code,\n };\n } else {\n // unknown or network error\n userErrorMessage = defaultUserErrorMessage(t);\n developerErrorMessage = {\n type: \"NETWORK_ERROR\",\n code: \"NETWORK_ERROR\",\n };\n }\n } else if (this.submission) {\n // the submission is canceled during the request\n reason = \"REQUEST_ABORTED\";\n } else {\n // the submission was canceled during an action\n reason = \"ACTION_ABORTED\";\n }\n\n // Dispatch submission end event\n this.bb.dispatchEvent(\n new XenditSubmissionEndEvent(\n reason,\n userErrorMessage,\n developerErrorMessage,\n ),\n );\n\n // Abort ongoing submission request (the error will be ignored)\n if (this.submission) {\n this.submission?.abortController.abort(new AbortError());\n this.submission = null;\n }\n\n // Ensure submit flags are reset\n this.bb.submissionRequested = false;\n\n // Schedule rerender (to clear the inert attribute on the active component)\n this.bb.dispatchEvent(new InternalNeedsRerenderEvent());\n }\n\n private submit() {\n if (!this.bb.world?.session) {\n throw new Error(\"Session object missing\");\n }\n\n if (!this.bb.channel) {\n throw new Error(\"Channel missing\");\n }\n\n if (this.bb.instantSubmissionError) {\n this.bb.submissionRequested = false;\n this.submissionError = this.bb.instantSubmissionError;\n this.bb.instantSubmissionError = null;\n this.bb.dispatchEvent(new InternalBehaviorTreeUpdateEvent());\n return;\n }\n\n const shouldSendSavePaymentMethod =\n this.bb.world.session.allow_save_payment_method === \"OPTIONAL\" &&\n this.bb.channel?.allow_save;\n const sessionType = this.bb.world?.session?.session_type;\n const channelCode = this.bb.channel.channel_code;\n const mockActionType = this.bb.channel._mock_action_type;\n const channelProperties = this.bb.channelProperties ?? {};\n const abortController = new AbortController();\n const promise = asyncSubmit(\n this.bb.sdkKey,\n this.bb.mock,\n sessionType,\n channelCode,\n mockActionType,\n channelProperties,\n abortController,\n shouldSendSavePaymentMethod\n ? (this.bb.channelData?.savePaymentMethod ?? false)\n : undefined,\n )\n .then((paymentEntity: BffPaymentEntity) => {\n // clear abort controller since the request is complete\n this.submission = null;\n\n switch (paymentEntity.type) {\n case BffPaymentEntityType.PaymentRequest:\n this.bb.dispatchEvent(\n new XenditPaymentRequestCreatedEvent(paymentEntity.id),\n );\n break;\n case BffPaymentEntityType.PaymentToken:\n this.bb.dispatchEvent(\n new XenditPaymentTokenCreatedEvent(paymentEntity.id),\n );\n break;\n default:\n paymentEntity satisfies never;\n }\n\n // TODO: the payment-entity-created event should be sent only after the updateWorld call but that causes a behavior tree update which would cause events to fire in the wrong order\n this.bb.dispatchEvent(\n new InternalUpdateWorldState({\n paymentEntity,\n sessionTokenRequestId:\n paymentEntity.entity.session_token_request_id,\n }),\n );\n })\n .catch((error) => {\n if (isAbortError(error)) return;\n\n console.error(\"Submission failed:\", error);\n\n // avoid dispatching an event after exit\n if (!this.exited) {\n // set the error flag and exit the submission\n this.bb.submissionRequested = false;\n\n if (error instanceof NetworkError) {\n this.submissionError = {\n text: [\n error.errorResponse.error_content?.title,\n error.errorResponse.error_content?.message_1,\n error.errorResponse.error_content?.message_2,\n ].filter((str) => str !== undefined),\n code: error.errorResponse.error_code,\n };\n } else {\n this.submissionError = error;\n }\n\n this.bb.dispatchEvent(new InternalBehaviorTreeUpdateEvent());\n }\n });\n\n this.submission = {\n abortController,\n promise,\n };\n }\n}\n\nasync function asyncSubmit(\n sdkKey: ParsedSdkKey,\n mock: boolean,\n sessionType: BffSessionType,\n channelCode: string,\n mockActionType: MockActionType | undefined,\n channelProperties: ChannelProperties,\n abortController: AbortController,\n savePaymentMethod: boolean | undefined,\n): Promise<BffPaymentEntity> {\n let result: BffPaymentToken | BffPaymentRequest;\n if (mock) {\n // mock implementation\n switch (sessionType) {\n case \"PAY\": {\n await cancellableSleep(MOCK_NETWORK_DELAY_MS, abortController.signal);\n result = makeTestPaymentRequest(channelCode, mockActionType);\n break;\n }\n case \"SAVE\": {\n await cancellableSleep(MOCK_NETWORK_DELAY_MS, abortController.signal);\n result = makeTestPaymentToken(channelCode, mockActionType);\n break;\n }\n default: {\n throw new Error(`The session type ${sessionType} is not supported.`);\n }\n }\n } else {\n // real implementation\n switch (sessionType) {\n case \"PAY\": {\n result = await createPaymentRequest(\n sdkKey,\n {\n session_id: sdkKey.sessionAuthKey,\n channel_code: channelCode,\n channel_properties: channelProperties,\n save_payment_method: savePaymentMethod,\n // TODO: pass customer for VA channels\n },\n null,\n null,\n abortController.signal,\n );\n break;\n }\n case \"SAVE\": {\n result = await createPaymentToken(\n sdkKey,\n {\n session_id: sdkKey.sessionAuthKey,\n channel_code: channelCode,\n channel_properties: channelProperties,\n },\n null,\n null,\n abortController.signal,\n );\n break;\n }\n default: {\n throw new Error(`The session type ${sessionType} is not supported.`);\n }\n }\n }\n\n return toPaymentEntity(result);\n}\n\nfunction defaultUserErrorMessage(t: TFunction): string[] {\n return [\n t(\"default_error.title\"),\n t(\"default_error.message_1\"),\n t(\"default_error.message_2\"),\n ];\n}\n\nfunction failureCodeUserErrorMessage(\n t: TFunction,\n type: BffPaymentEntityType,\n status: \"FAILED\" | \"EXPIRED\" | \"CANCELED\",\n failureCode:\n | BffPaymentTokenFailureCode\n | BffPaymentRequestFailureCode\n | undefined,\n): string[] {\n const title = t(getPaymentEntityStatusCopyKey(type, status, \"title\"));\n const subtext = failureCode\n ? t(\n getFailureCodeCopyKey(failureCode),\n t(\"failure_code_unknown\", { failureCode }),\n )\n : t(getPaymentEntityStatusCopyKey(type, status, \"subtext\"));\n return [title, subtext];\n}\n\nfunction isSubmissionError(\n error: Error | SubmissionError,\n): error is SubmissionError {\n return !(\"message\" in error) && \"text\" in error && \"code\" in error;\n}\n","import { BffChannel, ChannelProperties } from \"../backend-types/channel\";\nimport { BffAction, BffPaymentEntity } from \"../backend-types/payment-entity\";\nimport { BffSession } from \"../backend-types/session\";\nimport {\n ChannelComponentData,\n WorldState,\n XenditComponents,\n} from \"../public-sdk\";\nimport {\n assert,\n canBeSimulated,\n findBestAction,\n findPaylinkAction,\n formHasFieldOfType,\n ParsedSdkKey,\n redirectCanBeHandledInIframe,\n} from \"../utils\";\nimport { channelPropertiesAreValid } from \"../validation\";\nimport { behaviorNode } from \"./behavior-tree-runner\";\nimport {\n ActionCompletedBehavior,\n ActionDeepLinkBehavior,\n ActionEmptyListPushNotificationBehavior,\n ActionIframeBehavior,\n ActionQrBehavior,\n ActionRedirectBehavior,\n ActionVaBehavior,\n} from \"./behaviors/action\";\nimport { ActionPaylinkBehavior } from \"./behaviors/action-paylink\";\nimport { CardInfoBehavior } from \"./behaviors/card-info\";\nimport {\n ChannelInvalidBehavior,\n ChannelValidBehavior,\n} from \"./behaviors/channel\";\nimport {\n PeFailedBehavior,\n PePendingBehavior,\n PeRequiresActionBehavior,\n} from \"./behaviors/payment-entity\";\nimport { PaymentOptionsBehavior } from \"./behaviors/payment-options\";\nimport {\n SdkActiveBehavior,\n SdkFatalErrorBehavior,\n SdkLoadingBehavior,\n} from \"./behaviors/sdk\";\nimport {\n SessionActiveBehavior,\n SessionCompletedBehavior,\n SessionFailedBehavior,\n SessionPendingBehavior,\n} from \"./behaviors/session\";\nimport { SimulatePaymentBehavior } from \"./behaviors/simulate-payment\";\nimport { SubmissionBehavior, SubmissionError } from \"./behaviors/submission\";\n\nexport type SdkStatus = \"ACTIVE\" | \"LOADING\" | \"FATAL_ERROR\";\n\n/**\n * \"Blackboard\" means mutable state available to the behavior tree and all behavior instances.\n */\nexport type BlackboardType = {\n readonly sdk: XenditComponents;\n readonly mock: boolean;\n readonly sdkKey: ParsedSdkKey;\n\n // backend state\n world: WorldState | null;\n\n // current UI state\n sdkStatus: SdkStatus;\n sdkFatalErrorMessage: string | null;\n channel: BffChannel | null;\n channelProperties: ChannelProperties | null;\n channelData: ChannelComponentData | null;\n channelIsDigitalWallet: boolean;\n instantSubmissionError: SubmissionError | null;\n\n // dispatch event on the SDK instance\n dispatchEvent(event: Event): boolean;\n\n // flags\n // if true, start a submission, if false abort submission\n submissionRequested: boolean;\n // if true, start simulate payment, if false abort simulate payment\n simulatePaymentRequested: boolean;\n // if true, do not show the current action UI\n actionCompleted: boolean;\n // if true, poll the payment entity immediately on the next update\n pollImmediatelyRequested: boolean;\n // if true, don't exit ovo's and jeniuspay's ActionEmptyListPushNotificationBehavior when the payment request status changes to pending\n hackyOvoActionLatch?: boolean;\n};\n\nexport function behaviorTreeForSdk(bb: BlackboardType) {\n switch (bb.sdkStatus) {\n case \"LOADING\": {\n return behaviorNode(SdkLoadingBehavior);\n }\n case \"ACTIVE\": {\n return behaviorNode(\n SdkActiveBehavior,\n \"active\",\n behaviorTreeForSession(bb),\n );\n }\n case \"FATAL_ERROR\": {\n return behaviorNode(SdkFatalErrorBehavior);\n }\n default: {\n bb.sdkStatus satisfies never;\n throw new Error(`Unknown SDK status: ${bb.sdkStatus as SdkStatus}`);\n }\n }\n}\n\nexport function behaviorTreeForSession(bb: BlackboardType) {\n assert(bb.world?.session);\n\n switch (bb.world.session.status) {\n case \"ACTIVE\": {\n return behaviorNode(\n SessionActiveBehavior,\n \"active\",\n bb.submissionRequested\n ? behaviorTreeForSubmission(bb)\n : behaviorTreeForForm(bb),\n );\n }\n case \"COMPLETED\": {\n return behaviorNode(SessionCompletedBehavior);\n }\n case \"EXPIRED\": {\n return behaviorNode(SessionFailedBehavior, bb.world.session.status);\n }\n case \"CANCELED\": {\n return behaviorNode(SessionFailedBehavior, bb.world.session.status);\n }\n case \"PENDING\": {\n return behaviorNode(SessionPendingBehavior, bb.world.session.status);\n }\n default: {\n bb.world.session.status satisfies never;\n throw new Error(\n `Unknown session status: ${(bb.world.session as BffSession).status}`,\n );\n }\n }\n}\n\nexport function behaviorTreeForForm(bb: BlackboardType) {\n if (!bb.channel || !bb.world?.session) {\n return undefined;\n }\n\n if (bb.channelIsDigitalWallet) {\n return undefined;\n }\n\n const channelPropertiesValid = channelPropertiesAreValid(\n bb.world.session.session_type,\n bb.channel,\n bb.channelProperties,\n bb.channelData,\n );\n\n const validityBehavior = channelPropertiesValid\n ? behaviorNode(ChannelValidBehavior)\n : behaviorNode(ChannelInvalidBehavior);\n\n const cardInfoBehavior = formHasFieldOfType(\n bb.channel.form,\n \"credit_card_number\",\n )\n ? behaviorNode(CardInfoBehavior, bb.channel.channel_code)\n : undefined;\n\n const paymentOptionsBehavior = formHasFieldOfType(\n bb.channel.form,\n \"installment_plan\",\n )\n ? behaviorNode(PaymentOptionsBehavior, bb.channel.channel_code)\n : undefined;\n\n return [validityBehavior, cardInfoBehavior, paymentOptionsBehavior];\n}\n\nexport function behaviorTreeForSubmission(bb: BlackboardType) {\n assert(bb.world);\n\n return behaviorNode(\n SubmissionBehavior,\n \"submission\",\n bb.world.paymentEntity && bb.world.sessionTokenRequestId !== null\n ? behaviorTreeForPaymentEntity(bb)\n : undefined,\n );\n}\n\nexport function behaviorTreeForPaymentEntity(bb: BlackboardType) {\n assert(bb.world?.paymentEntity);\n\n function maybePaylinkAction() {\n assert(bb.world?.paymentEntity);\n return findPaylinkAction(bb.sdk, bb.world.paymentEntity.entity.actions)\n ? behaviorTreeForPaylink(bb)\n : undefined;\n }\n\n if (\n bb.hackyOvoActionLatch &&\n bb.world.paymentEntity.entity.status === \"PENDING\"\n ) {\n // In ovo and jeniuspay, the REQUIRES_ACTION status changes to PENDING almost immediately, causing the instructions to the user to close.\n // We need to keep this behavior alive until the status changes to something other than PENDING.\n return behaviorNode(PeRequiresActionBehavior, bb.world.paymentEntity.id, [\n behaviorNode(ActionEmptyListPushNotificationBehavior, \"\"),\n maybePaylinkAction(),\n ]);\n }\n\n switch (bb.world.paymentEntity.entity.status) {\n case \"PENDING\": {\n return behaviorNode(PePendingBehavior);\n }\n case \"REQUIRES_ACTION\": {\n return behaviorNode(PeRequiresActionBehavior, bb.world.paymentEntity.id, [\n behaviorTreeForAction(bb),\n maybePaylinkAction(),\n ]);\n }\n case \"FAILED\":\n case \"EXPIRED\":\n case \"CANCELED\": {\n return behaviorNode(PeFailedBehavior);\n }\n case \"ACCEPTING_PAYMENTS\": {\n // Never happens because sessions don't set the PR type to REUSABLE_PAYMENT_CODE\n throw new Error(\"Status ACCEPTING_PAYMENTS should not happen\");\n }\n case \"AUTHORIZED\":\n case \"ACTIVE\":\n case \"SUCCEEDED\": {\n // The payemnt entity is completed but the session is still active, it should automatically switch to completed soon\n return behaviorNode(PePendingBehavior, bb.world.paymentEntity.id);\n }\n default: {\n bb.world.paymentEntity.entity satisfies never;\n throw new Error(\n `Unknown payment entity status: ${(bb.world.paymentEntity as BffPaymentEntity).entity.status}`,\n );\n }\n }\n}\n\nexport function behaviorTreeForAction(bb: BlackboardType) {\n assert(bb.world?.paymentEntity);\n\n if (bb.actionCompleted) {\n // action completed is for when we want to close the action UI and go back to polling\n return behaviorNode(ActionCompletedBehavior);\n }\n\n const action = findBestAction(bb.world.paymentEntity.entity.actions);\n\n if (!action) {\n // an empty list of actions means we prompt the user to tap a push notification\n return behaviorNode(ActionEmptyListPushNotificationBehavior, \"\");\n }\n\n const actionIndex = bb.world.paymentEntity.entity.actions.indexOf(action);\n const hasPaylink = !!findPaylinkAction(\n bb.sdk,\n bb.world.paymentEntity.entity.actions,\n );\n\n // adds simulate payment behavior as a child of the action behavior so that when\n // simulate payment is requested, it will run the simulate payment behavior while\n // keeping the action UI open until the payment entity updates\n let simulateBehavior = undefined;\n if (bb.simulatePaymentRequested && canBeSimulated(action)) {\n simulateBehavior = behaviorNode(SimulatePaymentBehavior);\n }\n\n switch (action.type) {\n case \"REDIRECT_CUSTOMER\": {\n switch (action.descriptor) {\n case \"WEB_URL\": {\n if (redirectCanBeHandledInIframe(action)) {\n return behaviorNode(ActionIframeBehavior, action.value);\n } else if (hasPaylink) {\n return behaviorNode(ActionDeepLinkBehavior, String(actionIndex));\n } else {\n return behaviorNode(ActionRedirectBehavior, action.value);\n }\n }\n case \"DEEPLINK_URL\": {\n return behaviorNode(ActionDeepLinkBehavior, String(actionIndex));\n }\n case \"WEB_GOOGLE_PAYLINK\": {\n throw new Error(`Paylink actions should not be the primary action`);\n }\n }\n break;\n }\n case \"PRESENT_TO_CUSTOMER\": {\n switch (action.descriptor) {\n case \"QR_STRING\": {\n return behaviorNode(\n ActionQrBehavior,\n String(actionIndex),\n simulateBehavior,\n );\n }\n case \"PAYMENT_CODE\": {\n throw new Error(\n `Unsupported action type ${action.type} ${action.descriptor}`,\n );\n }\n case \"VIRTUAL_ACCOUNT_NUMBER\": {\n return behaviorNode(\n ActionVaBehavior,\n String(actionIndex),\n simulateBehavior,\n );\n }\n }\n break;\n }\n case \"API_POST_REQUEST\": {\n switch (action.descriptor) {\n case \"CAPTURE_PAYMENT\": {\n throw new Error(\n `Unsupported action type ${action.type} ${action.descriptor}`,\n );\n }\n case \"VALIDATE_OTP\": {\n throw new Error(\n `Unsupported action type ${action.type} ${action.descriptor}`,\n );\n }\n case \"RESEND_OTP\": {\n throw new Error(\n `Unsupported action type ${action.type} ${action.descriptor}`,\n );\n }\n }\n break;\n }\n }\n action satisfies never;\n throw new Error(\n `Unknown action type: ${(action as BffAction).type} ${(action as BffAction).descriptor}`,\n );\n}\n\nfunction behaviorTreeForPaylink(bb: BlackboardType) {\n assert(bb.world?.paymentEntity);\n\n const paylinkAction = findPaylinkAction(\n bb.sdk,\n bb.world.paymentEntity.entity.actions,\n );\n assert(paylinkAction);\n\n const actionIndex =\n bb.world.paymentEntity.entity.actions.indexOf(paylinkAction);\n return behaviorNode(ActionPaylinkBehavior, String(actionIndex));\n}\n","import { FunctionComponent } from \"preact\";\nimport { useCallback, useLayoutEffect, useMemo, useRef } from \"preact/hooks\";\nimport {\n useBusiness,\n useDigitalWallets,\n useSdk,\n useSession,\n} from \"./session-provider\";\nimport { ChannelProperties } from \"../backend-types/channel\";\nimport { XenditPaymentChannel } from \"../public-data-types\";\nimport { assert } from \"../utils\";\nimport { DigitalWalletOptions } from \"../public-options-types\";\n\ntype Props = {\n options?: DigitalWalletOptions<\"GOOGLE_PAY\">;\n onReady: () => void;\n};\n\nexport const DigitalWalletGooglepay: FunctionComponent<Props> = (props) => {\n const { onReady, options } = props;\n\n const sdk = useSdk();\n const t = sdk.t;\n\n const session = useSession();\n const business = useBusiness();\n const digitalWallets = useDigitalWallets();\n const digitalWalletsGooglePay = digitalWallets?.google_pay;\n assert(digitalWalletsGooglePay);\n\n const didCallReady = useRef(false);\n const containerRef = useRef<HTMLDivElement>(null);\n\n const paymentsClient = useRef<google.payments.api.PaymentsClient | null>(\n null,\n );\n\n const googlePayChannels = useMemo(() => {\n return digitalWalletsGooglePay.allowed_payment_methods.map(\n (obj) => obj.payment_method_specification,\n );\n }, [digitalWalletsGooglePay.allowed_payment_methods]);\n\n const googlePayConfig: google.payments.api.PaymentDataRequest = useMemo(\n () => ({\n apiVersion: 2,\n apiVersionMinor: 0,\n allowedPaymentMethods: googlePayChannels,\n emailRequired: true,\n merchantInfo: {\n merchantId: digitalWalletsGooglePay.merchant_id,\n merchantName: business.name ?? \"\",\n },\n transactionInfo: {\n transactionId: session.payment_session_id,\n totalPriceStatus: \"FINAL\",\n totalPrice: String(session.amount),\n currencyCode: session.currency,\n },\n }),\n [\n business.name,\n digitalWalletsGooglePay.merchant_id,\n googlePayChannels,\n session.amount,\n session.currency,\n session.payment_session_id,\n ],\n );\n\n const buttonConfigWithDefaults: Omit<\n google.payments.api.ButtonOptions,\n \"onClick\"\n > = useMemo(\n () => ({\n buttonColor: \"default\",\n buttonType: \"plain\",\n buttonRadius: 999,\n buttonSizeMode: \"fill\",\n buttonBorderType: \"no_border\",\n ...options,\n }),\n [options],\n );\n\n useLayoutEffect(() => {\n const PaymentsClient = window.google?.payments?.api?.PaymentsClient;\n if (!PaymentsClient) {\n console.error(\n \"XenditComponents: Google Pay button was requested but the Google Pay SDK is not loaded.\",\n );\n return;\n }\n paymentsClient.current = new PaymentsClient({\n environment: sdk.isMock() ? \"TEST\" : \"PRODUCTION\",\n });\n }, [sdk]);\n\n const onClick = useCallback(() => {\n assert(paymentsClient.current);\n\n // return the channel corresponding to the selected payment method in google pay\n function findTargetChannel(paymentData: google.payments.api.PaymentData) {\n assert(digitalWalletsGooglePay);\n\n const allChannels = sdk.getActiveChannels();\n for (const googlePayChannel of digitalWalletsGooglePay.allowed_payment_methods) {\n if (\n googlePayChannel.payment_method_specification.type ===\n paymentData.paymentMethodData.type\n ) {\n return findChannel(allChannels, googlePayChannel.channel_code);\n }\n }\n\n throw new Error(\n `No matching channel found for selected Google Pay payment method ${paymentData.paymentMethodData.type}`,\n );\n }\n\n paymentsClient.current\n .loadPaymentData(googlePayConfig)\n .then(function (paymentData) {\n const targetChannel = findTargetChannel(paymentData);\n assert(targetChannel);\n\n let channelProperties: ChannelProperties = {};\n if (targetChannel.channelCode === \"CARDS\") {\n // for cards, pass the whole paymentData to backend in channel properties\n channelProperties = {\n google_pay: JSON.stringify(paymentData),\n };\n }\n\n sdk.submitDigitalWallet(\"GOOGLE_PAY\", targetChannel, channelProperties);\n })\n .catch(function (err) {\n type GooglePayErrorCode =\n | \"CANCELED\"\n | \"DEVELOPER_ERROR\"\n | \"BUYER_ACCOUNT_ERROR\"\n | \"MERCHANT_ACCOUNT_ERROR\"\n | \"INTERNAL_ERROR\"\n | \"UNKNOWN_ERROR\";\n const statusCode =\n (err.statusCode as GooglePayErrorCode) ?? \"UNKNOWN_ERROR\";\n\n if (statusCode === \"CANCELED\") {\n return;\n }\n\n function localeKeyForGooglePayError<\n T extends GooglePayErrorCode,\n U extends \"title\" | \"message\",\n >(errorCode: T, suffix: U) {\n return `google_pay_errors.${errorCode.toLowerCase() as Lowercase<T>}.${suffix}` as const;\n }\n\n const submissionError = {\n code: `GOOGLE_PAY_${statusCode}` as const,\n text: [\n t(\n localeKeyForGooglePayError(statusCode, \"title\"),\n t(\"google_pay_errors.unknown_error.title\"),\n ),\n t(\n localeKeyForGooglePayError(statusCode, \"message\"),\n t(\"google_pay_errors.unknown_error.message\", { statusCode }),\n ),\n ],\n };\n\n // there is no target channel on errors, pick the channel used for the first allowed payment method\n const firstGooglePayChannel =\n digitalWalletsGooglePay.allowed_payment_methods[0];\n assert(firstGooglePayChannel);\n const targetChannel = findChannel(\n sdk.getActiveChannels(),\n firstGooglePayChannel.channel_code,\n );\n\n // submit and force an error\n sdk.submitDigitalWallet(\n \"GOOGLE_PAY\",\n targetChannel,\n {},\n submissionError,\n );\n });\n }, [digitalWalletsGooglePay, googlePayConfig, sdk, t]);\n\n // call onready if the googlepay sdk is ready\n useLayoutEffect(() => {\n if (!paymentsClient.current) {\n return;\n }\n if (didCallReady.current) {\n return;\n }\n\n paymentsClient.current\n .isReadyToPay({\n apiVersion: 2,\n apiVersionMinor: 0,\n allowedPaymentMethods: googlePayChannels,\n })\n .then(function (response) {\n if (!response.result) {\n return;\n }\n\n if (didCallReady.current) return;\n didCallReady.current = true;\n onReady();\n })\n .catch(function (err) {\n console.error(\n \"XenditComponents: Error when checking if Google Pay is ready\",\n err,\n );\n });\n }, [googlePayChannels, onReady]);\n\n // create the button\n useLayoutEffect(() => {\n if (!paymentsClient.current) {\n return;\n }\n\n const button = paymentsClient.current.createButton({\n ...buttonConfigWithDefaults,\n buttonLocale: session.locale,\n allowedPaymentMethods: googlePayChannels,\n onClick,\n });\n if (containerRef.current) {\n containerRef.current.replaceChildren(button);\n }\n }, [buttonConfigWithDefaults, googlePayChannels, onClick, session.locale]);\n\n return <div ref={containerRef}></div>;\n};\n\nfunction findChannel(\n allChannels: XenditPaymentChannel[],\n targetChannelCode: string,\n): XenditPaymentChannel {\n const ch = allChannels.find((channel) => {\n if (Array.isArray(channel.channelCode)) {\n return channel.channelCode.includes(targetChannelCode);\n }\n return channel.channelCode === targetChannelCode;\n });\n if (!ch) {\n throw new Error(`Channel not found for code: ${targetChannelCode}`);\n }\n return ch;\n}\n","import { ComponentChildren, FunctionComponent } from \"preact\";\nimport { useLayoutEffect, useState } from \"preact/hooks\";\nimport { SLEEP_MULTIPLIER } from \"../utils\";\n\n/**\n * Renders the children only if the condition passes. Re-checks the condition when the given script tag is loaded, or every second.\n */\nexport const DigitalWalletWaitForLoad: FunctionComponent<{\n scriptTagRegex: RegExp;\n checkLoaded: () => boolean;\n children: ComponentChildren;\n}> = (props) => {\n const { scriptTagRegex, checkLoaded, children } = props;\n\n const [, forceRender] = useState<object>({});\n const ok = checkLoaded();\n\n useLayoutEffect(() => {\n if (ok) return;\n\n const targetScript = Array.from(document.scripts).find((script) =>\n scriptTagRegex.test(script.src),\n );\n\n if (targetScript) {\n const fn = () => {\n forceRender({});\n };\n targetScript.addEventListener(\"load\", fn);\n return () => {\n targetScript.removeEventListener(\"load\", fn);\n };\n }\n }, [forceRender, ok, scriptTagRegex]);\n\n useLayoutEffect(() => {\n if (!ok) {\n const timeout = setTimeout(() => {\n forceRender({});\n }, 1000 * SLEEP_MULTIPLIER);\n return () => clearTimeout(timeout);\n }\n }); // <- intentionally no dependencies, this timer should run in a loop until the check passes\n\n return ok ? children : null;\n};\n","import { FunctionComponent, JSX } from \"preact\";\nimport { DigitalWalletGooglepay } from \"./digital-wallet-googlepay\";\nimport { DigitalWalletOptions } from \"../public-options-types\";\nimport { XenditDigitalWalletCode } from \"../public-data-types\";\nimport { useCallback, useRef } from \"preact/hooks\";\nimport { DigitalWalletWaitForLoad } from \"./digital-wallet-wait-for-load\";\n\ntype Props<T extends XenditDigitalWalletCode> = {\n digitalWalletCode: T;\n digitalWalletOptions?: DigitalWalletOptions<T>;\n};\n\nexport const DigitalWalletContainer: FunctionComponent<\n Props<XenditDigitalWalletCode>\n> = (props) => {\n const { digitalWalletCode, digitalWalletOptions } = props;\n\n const containerRef = useRef<HTMLDivElement>(null);\n\n const onReady = useCallback(() => {\n containerRef.current?.parentElement?.style.setProperty(\"display\", \"block\");\n }, []);\n\n let el: JSX.Element | null = null;\n switch (digitalWalletCode) {\n case \"GOOGLE_PAY\": {\n el = (\n <DigitalWalletWaitForLoad\n scriptTagRegex={sdkStatusCheckers.GOOGLE_PAY.scriptTagRegex}\n checkLoaded={sdkStatusCheckers.GOOGLE_PAY.checkLoaded}\n >\n <DigitalWalletGooglepay\n onReady={onReady}\n options={digitalWalletOptions}\n />\n </DigitalWalletWaitForLoad>\n );\n break;\n }\n }\n\n return <div ref={containerRef}>{el}</div>;\n};\n\nconst sdkStatusCheckers = {\n GOOGLE_PAY: {\n scriptTagRegex: /https:\\/\\/pay.google.com\\/.*\\/js\\/pay.js/,\n checkLoaded: () =>\n typeof google !== \"undefined\" && typeof google.payments !== \"undefined\",\n },\n};\n","import {\n XenditActionBeginEvent,\n XenditActionEndEvent,\n XenditFatalErrorEvent,\n XenditEventListener,\n XenditEventMap,\n XenditInitEvent,\n XenditPaymentRequestCreatedEvent,\n XenditPaymentRequestDiscardedEvent,\n XenditPaymentTokenCreatedEvent,\n XenditPaymentTokenDiscardedEvent,\n XenditReadyEvent,\n XenditSessionCompleteEvent,\n XenditSessionExpiredOrCanceledEvent,\n XenditSubmissionBeginEvent,\n XenditSubmissionEndEvent,\n XenditWillRedirectEvent,\n XenditSessionPendingEvent,\n XenditSessionNotPendingEvent,\n} from \"./public-event-types\";\nimport {\n XenditSdkOptions as XenditComponentsOptions,\n XenditGetChannelsOptions,\n ActionContainerOptions,\n DigitalWalletOptions,\n} from \"./public-options-types\";\nimport {\n XenditCustomer,\n XenditDigitalWallet,\n XenditDigitalWalletCode,\n XenditPaymentChannel,\n XenditPaymentChannelGroup,\n XenditSession,\n} from \"./public-data-types\";\nimport { internal } from \"./internal\";\nimport { createElement, createRef, RefObject, render } from \"preact\";\nimport {\n XenditChannelPicker,\n XenditClearCurrentChannelEvent,\n} from \"./components/channel-picker\";\nimport { XenditSessionProvider } from \"./components/session-provider\";\nimport {\n BffChannel,\n BffChannelUiGroup,\n ChannelProperties,\n ChannelPropertyPrimative,\n} from \"./backend-types/channel\";\nimport {\n PaymentChannel,\n XenditChannelPropertiesChangedEvent,\n} from \"./components/payment-channel\";\nimport { fetchSessionData } from \"./api\";\nimport { ChannelFormHandle } from \"./components/channel-form\";\nimport { BehaviorTree } from \"./lifecycle/behavior-tree-runner\";\nimport {\n behaviorTreeForSdk,\n BlackboardType,\n SdkStatus,\n} from \"./lifecycle/behavior-tree\";\nimport { BffSession } from \"./backend-types/session\";\nimport { BffBusiness } from \"./backend-types/business\";\nimport { BffCustomer } from \"./backend-types/customer\";\nimport { BffPaymentEntity } from \"./backend-types/payment-entity\";\nimport { SessionActiveBehavior } from \"./lifecycle/behaviors/session\";\nimport {\n InternalBehaviorTreeUpdateEvent,\n InternalNeedsRerenderEvent,\n InternalScheduleMockUpdateEvent,\n InternalUpdateChannelComponentData,\n InternalUpdateWorldState,\n} from \"./private-event-types\";\nimport {\n BffPollResponse,\n BffResponse,\n BffSucceededChannel,\n} from \"./backend-types/common\";\nimport {\n canBeSimulated,\n errorToString,\n findBestAction,\n lockDownInteralProperty,\n mergeIgnoringUndefined,\n MOCK_NETWORK_DELAY_MS,\n ParsedSdkKey,\n parseSdkKey,\n removeUnreleasedChannels,\n resolvePairedChannel,\n satisfiesMinMax,\n sleep,\n} from \"./utils\";\nimport { makeTestSdkKey } from \"./data/test-data-modifiers\";\nimport {\n ChannelInvalidBehavior,\n ChannelValidBehavior,\n} from \"./lifecycle/behaviors/channel\";\nimport { PeRequiresActionBehavior } from \"./lifecycle/behaviors/payment-entity\";\nimport {\n SubmissionBehavior,\n SubmissionError,\n} from \"./lifecycle/behaviors/submission\";\nimport {\n bffChannelsToPublic,\n bffCustomerToPublic,\n bffDigitalWalletsToPublic,\n bffSessionToPublic,\n bffUiGroupsToPublic,\n findChannelPairs,\n} from \"./bff-marshal\";\nimport { BffCardDetails } from \"./backend-types/card-details\";\nimport { createTFunction, TFunction } from \"./localization\";\nimport { amountFormat } from \"./amount-format\";\nimport { BffPaymentOptions } from \"./backend-types/payment-options\";\nimport { DigitalWalletContainer } from \"./components/digital-wallet-container\";\nimport { BffDigitalWallets } from \"./backend-types/digital-wallets\";\n\n/**\n * @internal\n * Represents payment channel state.\n */\ntype CachedChannelComponent = {\n element: HTMLElement;\n channel: XenditPaymentChannel;\n channelProperties: ChannelProperties | null;\n channelFormRef: RefObject<ChannelFormHandle>;\n data: ChannelComponentData;\n};\n\n/**\n * @internal\n * Properties of a component updatable by events\n */\nexport type ChannelComponentData = {\n savePaymentMethod: boolean;\n cardDetails: {\n cardNumber: string;\n details: BffCardDetails | null;\n } | null;\n paymentOptions: {\n cardNumber: string | null;\n options: BffPaymentOptions | null;\n } | null;\n};\n\n/**\n * @internal\n * The session and associated entities that we get from the backend.\n */\nexport type WorldState = {\n business: BffBusiness;\n customer: BffCustomer | null;\n session: BffSession;\n channels: BffChannel[];\n channelUiGroups: BffChannelUiGroup[];\n digitalWallets: BffDigitalWallets | null;\n paymentEntity: BffPaymentEntity | null;\n sessionTokenRequestId: string | null;\n succeededChannel: BffSucceededChannel | null;\n};\n\n/**\n * @internal\n * Updatable parts of the world state. Nulls are written, undefineds are ignored.\n */\nexport type UpdatableWorldState = {\n [K in\n | \"session\"\n | \"paymentEntity\"\n | \"sessionTokenRequestId\"\n | \"succeededChannel\"]?: WorldState[K] | undefined;\n};\n\n/**\n * @internal\n * Used to assert that the SDK is initialized.\n */\ntype InitializedSdk = {\n [internal]: {\n worldState: WorldState;\n };\n};\n\n/**\n * @public\n */\nexport class XenditComponents extends EventTarget {\n /**\n * @internal\n */\n public t: TFunction = (str: string): string => {\n throw new Error(\"Localization used before initialization; this is a bug.\");\n };\n\n /**\n * @internal\n */\n protected [internal]: {\n /**\n * Parsed SDK key components.\n */\n sdkKey: ParsedSdkKey;\n\n /**\n * User-provided options.\n */\n options: XenditComponentsOptions;\n\n /**\n * The session and ascociated data from the backend.\n */\n worldState: WorldState | null;\n\n /**\n * Behavior tree for state management.\n */\n behaviorTree: BehaviorTree<BlackboardType>;\n\n /**\n * Components the user has created\n */\n liveComponents: {\n channelPicker: HTMLElement | null;\n paymentChannels: Map<string, CachedChannelComponent>;\n actionContainer: HTMLElement | null;\n digitalWalletContainer: Map<\n XenditDigitalWalletCode,\n {\n element: HTMLElement;\n options: DigitalWalletOptions<XenditDigitalWalletCode> | undefined;\n }\n >;\n };\n\n /**\n * The most recently created payment channel component's channel code.\n * This is used as a key into `paymentChannelComponents`.\n */\n currentChannelCode: string | null;\n\n /**\n * The ongoing digital wallet submission, if any.\n */\n currentDigitalWalletSubmission: {\n digitalWalletCode: XenditDigitalWalletCode;\n channelCode: string;\n channelProperties: ChannelProperties;\n instantSubmissionError: SubmissionError | null;\n } | null;\n\n /**\n * Tracks which event listeners are present on the SDK instance.\n */\n eventListenersPresent: Map<string, boolean>;\n };\n\n /**\n * @public\n * Initialize the SDK for a given session.\n *\n * You can get the components sdk key from the components_sdk_key field of the\n * `POST /sessions` or `GET /session` endpoints.\n *\n * This creates an object that can be used to create UI components, that allow\n * users to make payment or save tokens, using a variety of channels, depending on\n * the session configuration.\n *\n * @example\n * ```\n * // initialize\n * const components = new XenditComponents({\n * componentsSdkKey: \"your-session-client-key\",\n * });\n * ```\n */\n constructor(options: XenditComponentsOptions) {\n super();\n\n if (typeof window === \"undefined\" || typeof document === \"undefined\") {\n throw new Error(\"XenditComponents can only be instantiated in a browser\");\n }\n\n const sdkKey = parseSdkKey(options.componentsSdkKey);\n this[internal] = {\n sdkKey,\n options,\n worldState: null,\n liveComponents: {\n channelPicker: null,\n paymentChannels: new Map(),\n actionContainer: null,\n digitalWalletContainer: new Map(),\n },\n behaviorTree: new BehaviorTree<BlackboardType>(behaviorTreeForSdk, {\n sdk: this,\n sdkKey,\n mock: this.isMock(),\n sdkStatus: \"LOADING\",\n sdkFatalErrorMessage: null,\n channel: null,\n channelProperties: null,\n channelData: null,\n channelIsDigitalWallet: false,\n instantSubmissionError: null,\n dispatchEvent: this.dispatchEvent.bind(this),\n world: null,\n submissionRequested: false,\n simulatePaymentRequested: false,\n actionCompleted: false,\n pollImmediatelyRequested: false,\n }),\n currentChannelCode: null,\n currentDigitalWalletSubmission: null,\n eventListenersPresent: new Map(),\n };\n lockDownInteralProperty(this as unknown as { [internal]: unknown });\n\n // log fatal errors if user didn't attach a listener\n this.addEventListener(\"fatal-error\", (event) => {\n const fatalErrorEvent = event as XenditFatalErrorEvent;\n if (!this[internal].eventListenersPresent.get(\"fatal-error\")) {\n console.error(\n `XenditComponents: A \"fatal-error\" event occurred but no event listener was attached: ${fatalErrorEvent.message}`,\n );\n }\n });\n this[internal].eventListenersPresent.set(\"fatal-error\", false);\n\n this.behaviorTreeUpdate();\n\n // internal event listeners\n (this as EventTarget).addEventListener(\n InternalUpdateWorldState.type,\n this.onUpdateWorldState.bind(this),\n );\n (this as EventTarget).addEventListener(\n InternalUpdateChannelComponentData.type,\n this.onUpdateChannelComponentData.bind(this),\n );\n (this as EventTarget).addEventListener(\n InternalBehaviorTreeUpdateEvent.type,\n this.behaviorTreeUpdate.bind(this),\n );\n let hasScheduledRender = false;\n (this as EventTarget).addEventListener(\n InternalNeedsRerenderEvent.type,\n () => {\n if (hasScheduledRender) return;\n hasScheduledRender = true;\n queueMicrotask(() => {\n hasScheduledRender = false;\n this.rerenderAllComponents();\n this.syncInertAttribute();\n });\n },\n );\n\n // Initialize session data asynchronously\n this.initializeAsync();\n }\n\n /**\n * @internal\n * Initialize session data asynchronously\n */\n protected async initializeAsync(): Promise<void> {\n let bff: BffResponse;\n try {\n // Fetch session data from the server\n bff = await fetchSessionData(\n this[internal].sdkKey,\n this[internal].sdkKey.sessionAuthKey,\n );\n bff.channels = removeUnreleasedChannels(bff.channels);\n } catch (error) {\n this[internal].behaviorTree.bb.sdkStatus = \"FATAL_ERROR\";\n this[internal].behaviorTree.bb.sdkFatalErrorMessage =\n errorToString(error);\n this.behaviorTreeUpdate();\n return;\n }\n\n // Update world state\n this.dispatchEvent(\n new InternalUpdateWorldState({\n business: bff.business,\n customer: bff.customer,\n session: bff.session,\n channels: bff.channels,\n channelUiGroups: bff.channel_ui_groups,\n digitalWallets: bff.digital_wallets ?? null,\n paymentEntity: null,\n sessionTokenRequestId: null,\n succeededChannel: null,\n } satisfies WorldState),\n );\n }\n\n /**\n * @internal\n * Throws if the SDK is not initialized.\n */\n public assertInitialized(): asserts this is InitializedSdk {\n if (!this[internal].worldState) {\n throw new Error(\n \"The session data is not loaded. Listen for the `init` event. Only `createChannelPickerComponent` can be called before initialization.\",\n );\n }\n }\n\n /**\n * @internal\n */\n public isMock(): boolean {\n return false;\n }\n\n /**\n * @internal\n */\n public isProdLive() {\n return this[internal].sdkKey.hostId === \"pl\";\n }\n\n /**\n * @internal\n */\n private findChannel(channelCode: string) {\n this.assertInitialized();\n\n // TODO: use a map\n const channel = this[internal].worldState.channels.find(\n (ch) => ch.channel_code === channelCode,\n );\n return channel ?? null;\n }\n\n /**\n * @internal\n * Updates the session or other ascociated entities and syncs everything that depends on them.\n */\n private onUpdateWorldState(event: Event) {\n const data = (event as InternalUpdateWorldState).data;\n this[internal].worldState = mergeIgnoringUndefined(\n this[internal].worldState ?? ({} as WorldState),\n data,\n );\n\n // update locale\n const locale = this[internal].worldState.session.locale;\n this.t = createTFunction(locale);\n\n // update everything\n this.behaviorTreeUpdate();\n this.rerenderAllComponents();\n }\n\n /**\n * @internal\n * Updates channel component data and updates behavior tree and rerenders.\n */\n private onUpdateChannelComponentData(event: Event) {\n const channelCode = (event as InternalUpdateChannelComponentData)\n .channelCode;\n const newData = (event as InternalUpdateChannelComponentData).data;\n const component =\n this[internal].liveComponents.paymentChannels.get(channelCode);\n if (!component) {\n return;\n }\n\n component.data = mergeIgnoringUndefined(component.data, newData);\n this.behaviorTreeUpdate();\n\n // TODO: need to re-collect all channel properties since form fields may have been added or removed\n this.rerenderAllComponents();\n }\n\n /**\n * @internal\n * Updates the behavior tree with the latest world state and component state.\n */\n private behaviorTreeUpdate(): void {\n const bb = this[internal].behaviorTree.bb;\n\n if (bb.sdkStatus === \"LOADING\" && this[internal].worldState) {\n bb.sdkStatus = \"ACTIVE\";\n }\n\n bb.world = this[internal].worldState;\n\n if (this[internal].currentDigitalWalletSubmission) {\n // populate data for digital wallet submission\n bb.channel = this.findChannel(\n this[internal].currentDigitalWalletSubmission.channelCode,\n );\n bb.channelProperties =\n this[internal].currentDigitalWalletSubmission.channelProperties;\n bb.channelData = null;\n bb.channelIsDigitalWallet = true;\n bb.instantSubmissionError =\n this[internal].currentDigitalWalletSubmission.instantSubmissionError;\n } else {\n // populate data for normal channel component\n const component = this[internal].currentChannelCode\n ? this[internal].liveComponents.paymentChannels.get(\n this[internal].currentChannelCode,\n )\n : null;\n bb.channel = component\n ? resolvePairedChannel(\n component.channel[internal],\n component.data.savePaymentMethod,\n )\n : null;\n bb.channelProperties = component ? component.channelProperties : null;\n bb.channelData = component ? component.data : null;\n bb.channelIsDigitalWallet = false;\n }\n\n try {\n this[internal].behaviorTree.update();\n } catch (error) {\n // crash handler, move to fatal error state\n this[internal].behaviorTree.bb.sdkStatus = \"FATAL_ERROR\";\n this[internal].behaviorTree.bb.sdkFatalErrorMessage =\n errorToString(error);\n this[internal].behaviorTree.update();\n }\n }\n\n /**\n * @internal\n * Return the current SDK status.\n */\n public getSdkStatus(): SdkStatus {\n // TODO: pass this as a prop into SessionProvider instead\n return this[internal].behaviorTree.bb.sdkStatus;\n }\n\n /**\n * @internal\n * Rerender everything.\n */\n private rerenderAllComponents() {\n // re-render live components\n this.renderChannelPicker();\n for (const channelCode of this[\n internal\n ].liveComponents.paymentChannels.keys()) {\n this.renderPaymentChannel(channelCode);\n }\n for (const digitalWalletCode of this[\n internal\n ].liveComponents.digitalWalletContainer.keys()) {\n this.renderDigitalWalletComponent(digitalWalletCode);\n }\n }\n\n /**\n * @public\n * Retrieve the xendit session object.\n */\n getSession(): XenditSession {\n this.assertInitialized();\n return bffSessionToPublic(this[internal].worldState.session);\n }\n\n /**\n * @public\n * Retrieve the customer ascociated with the session.\n */\n getCustomer(): XenditCustomer | null {\n this.assertInitialized();\n if (!this[internal].worldState.customer) return null;\n return bffCustomerToPublic(this[internal].worldState.customer);\n }\n\n /**\n * @public\n * Retrieve the list of payment channels available for this session.\n *\n * The channels are organized in a way that is appropriate to show to users.\n * You can use this to render your channel picker UI.\n *\n * You can pass `{filter: \"CHANNEL_CODE\"}` to filter channels by string or regexp.\n */\n getActiveChannelGroups(\n options?: XenditGetChannelsOptions,\n ): XenditPaymentChannelGroup[] {\n this.assertInitialized();\n return bffUiGroupsToPublic(\n this[internal].worldState.channels,\n this[internal].worldState.channelUiGroups,\n {\n options: {\n filter: options?.filter,\n filterMinMax: options?.filterMinMax ?? true,\n },\n session: this[internal].worldState.session,\n pairChannels: findChannelPairs(this[internal].worldState.channels),\n },\n );\n }\n\n /**\n * @public\n * Retrieve an unorganized list of payment channels available for this session.\n *\n * Use this when you need to search for specific channels. When rendering your UI,\n * consider using `getActiveChannelGroups` if you support many channels.\n *\n * You can pass `{filter: \"CHANNEL_CODE\"}` to filter channels by string or regexp.\n */\n getActiveChannels(\n options?: XenditGetChannelsOptions,\n ): XenditPaymentChannel[] {\n this.assertInitialized();\n return bffChannelsToPublic(\n this[internal].worldState.channels,\n this[internal].worldState.channelUiGroups,\n {\n options: {\n filter: options?.filter,\n filterMinMax: options?.filterMinMax ?? true,\n },\n session: this[internal].worldState.session,\n pairChannels: findChannelPairs(this[internal].worldState.channels),\n },\n );\n }\n\n /**\n * @public\n * Creates a drop-in UI component for selecting a channel and making payments.\n *\n * This returns a div immediately. The component will be populated after\n * initialization is complete. You should insert this div into the DOM.\n *\n * Calling this again will destroy it and return a new element. Manually\n * destroying the component is not necessary, removing it from the DOM is sufficient.\n *\n * @example\n * ```\n * const channelPickerDiv = components.createChannelPickerComponent();\n * document.querySelector(\".payment-container\").appendChild(channelPickerDiv);\n * ```\n */\n createChannelPickerComponent(): HTMLElement {\n // destroy previous instance if it exists\n if (this[internal].liveComponents.channelPicker) {\n this.destroyComponent(this[internal].liveComponents.channelPicker);\n }\n\n const container = document.createElement(\"xendit-channel-picker\");\n container.setAttribute(\"translate\", \"no\");\n\n // Store the container for later population\n this[internal].liveComponents.channelPicker = container;\n\n // If initialization is complete, populate immediately\n // Otherwise, it will be populated when initializeAsync completes\n if (this[internal].worldState) {\n this.renderChannelPicker();\n }\n\n this.setupUiEventsForChannelPicker(container);\n\n return container;\n }\n\n /**\n * @internal\n * Render an existing channel picker element\n */\n private renderChannelPicker(): void {\n this.assertInitialized();\n\n const container = this[internal].liveComponents.channelPicker;\n if (!container) return;\n\n render(\n createElement(XenditSessionProvider, {\n data: this[internal].worldState,\n sdk: this,\n children: createElement(XenditChannelPicker, {}),\n }),\n container,\n );\n }\n\n /**\n * @internal\n * Handles events from the channel picker component.\n */\n private setupUiEventsForChannelPicker(container: HTMLElement): void {\n // clear current channel when the channel picker accordion is closed\n container.addEventListener(\n XenditClearCurrentChannelEvent.type,\n (_event) => {\n this.assertInitialized();\n\n // do nothing if the current channel is not in the same ui group as the event\n const event = _event as XenditClearCurrentChannelEvent;\n const currentChannelCode = this[internal].currentChannelCode;\n if (!currentChannelCode) return;\n const channel = this[internal].worldState.channels.find(\n (ch) => ch.channel_code === currentChannelCode,\n );\n if (!channel || channel.ui_group !== event.uiGroup) return;\n\n // clear active channel\n this.setCurrentChannel(null);\n },\n );\n }\n\n /**\n * @public\n * Creates a UI component for making payments with a specific channel. It will\n * contain form fields, and/or instructions for the user.\n *\n * This also makes the provided channel \"current\", the `submit` method\n * will use that channel.\n *\n * This returns a div. You should insert this div into the DOM. Creating a new\n * component multiple times for the same channel will return the same component instance.\n *\n * Destroying the component manually is not necessary, removing it from the DOM is sufficient,\n * but if you want to clear the form state, you can do so with the `destroyComponent` method.\n *\n * @example\n * ```\n * const cardsChannel = components.getActiveChannels({ filter: \"CARDS\" })[0];\n * const paymentComponent = components.createChannelComponent(cardsChannel);\n * document.querySelector(\".payment-container\").appendChild(paymentComponent);\n * ```\n */\n createChannelComponent(\n channel: XenditPaymentChannel,\n active = true,\n ): HTMLElement {\n this.assertInitialized();\n\n if (\n !satisfiesMinMax(this[internal].worldState.session, channel[internal][0])\n ) {\n throw new Error(\n `Cannot create channel component: \\`session.amount\\` is outside of the channel's min/max amount.`,\n );\n }\n\n const channelCode = channel[internal][0].channel_code;\n\n if (active) {\n // make it active (before creating the component)\n this[internal].currentChannelCode = channelCode;\n }\n\n // return previously created component if it exists\n const cachedComponent =\n this[internal].liveComponents.paymentChannels.get(channelCode);\n let container: HTMLElement;\n let channelFormRef = createRef<ChannelFormHandle>();\n\n if (cachedComponent) {\n container = cachedComponent.element;\n channelFormRef = cachedComponent.channelFormRef;\n } else {\n container = document.createElement(\"xendit-payment-channel\");\n container.setAttribute(\"data-channel-code\", channelCode);\n container.setAttribute(\"inert\", \"\");\n container.setAttribute(\"translate\", \"no\");\n container.style.setProperty(\n \"--xendit-channel-brand-color\",\n channel[internal][0].brand_color,\n );\n\n this.setupUiEventsForPaymentChannel(container);\n\n this[internal].liveComponents.paymentChannels.set(channelCode, {\n element: container,\n channel,\n channelProperties: null,\n channelFormRef: channelFormRef,\n data: {\n savePaymentMethod: false,\n cardDetails: null,\n paymentOptions: null,\n },\n });\n }\n\n this.renderPaymentChannel(channelCode);\n if (active) {\n this.behaviorTreeUpdate();\n this.syncInertAttribute();\n }\n\n // rerender other components next tick because we may already be in a render\n this.dispatchEvent(new InternalNeedsRerenderEvent());\n\n return container;\n }\n\n /**\n * @internal\n * Render an existing payment channel element\n */\n private renderPaymentChannel(channelCode: string): void {\n this.assertInitialized();\n\n const component =\n this[internal].liveComponents.paymentChannels.get(channelCode);\n if (!component) return;\n\n const channelObject = component.channel;\n\n render(\n createElement(XenditSessionProvider, {\n data: this[internal].worldState,\n sdk: this,\n children: createElement(PaymentChannel, {\n channelOrPair: channelObject[internal],\n channelData: component.data,\n savePaymentMethod: component.data.savePaymentMethod,\n formRef: component.channelFormRef,\n }),\n }),\n component.element,\n );\n }\n\n /**\n * @internal\n * TODO: make this public\n * Returns a list of digital wallets available for this session.\n *\n * For `GOOGLE_PAY`:\n *\n * A channel supported by Google Pay must be active for the session, and Google Pay must be available\n * in the session's country, and you must have configured your merchant ID on the Xendit dashboard.\n *\n * (Note that our hosted checkout doesn't have the requirement to provide a merchant ID)\n */\n public getActiveDigitalWallets(): XenditDigitalWallet[] {\n this.assertInitialized();\n if (!this[internal].worldState.digitalWallets) {\n return [];\n }\n return bffDigitalWalletsToPublic(\n this[internal].worldState.digitalWallets,\n this[internal].worldState.channels,\n this[internal].worldState.channelUiGroups,\n {\n options: {\n filterMinMax: false,\n },\n pairChannels: findChannelPairs(this[internal].worldState.channels),\n session: this[internal].worldState.session,\n },\n );\n }\n\n /**\n * @internal\n * TODO: make this public\n * Creates a UI component for making payments with a digital wallet. It will contain a button to trigger the digital\n * wallet payment. If the digital wallet is not supported by the browser, it will have `display:none`.\n *\n * After the user pays using the digital wallet UI, a submission will automatically begin. Equivalent to setting\n * the channel used (using `setCurrentChannel()`), and then calling `submit()`. The same events will be fired\n * as a normal submission, see {@link submit}.\n *\n * This returns a HTML Element, which you should insert into the DOM.\n */\n public createDigitalWalletComponent<T extends XenditDigitalWalletCode>(\n digitalWalletCode: T,\n digitalWalletOptions?: DigitalWalletOptions<T>,\n ): HTMLElement {\n this.assertInitialized();\n\n const prevComponent =\n this[internal].liveComponents.digitalWalletContainer.get(\n digitalWalletCode,\n );\n if (prevComponent) {\n this.destroyComponent(prevComponent.element);\n }\n\n const element = document.createElement(\"xendit-digital-wallet\");\n element.setAttribute(\"translate\", \"no\");\n element.style.setProperty(\"display\", \"none\"); // initially hide the component until we know whether the digital wallet is available\n this[internal].liveComponents.digitalWalletContainer.set(\n digitalWalletCode,\n {\n element,\n options: digitalWalletOptions,\n },\n );\n\n this.renderDigitalWalletComponent(digitalWalletCode);\n\n return element;\n }\n\n /**\n * @internal\n * Renders an existing digital wallet component.\n */\n renderDigitalWalletComponent(\n digitalWalletCode: XenditDigitalWalletCode,\n ): void {\n this.assertInitialized();\n const component =\n this[internal].liveComponents.digitalWalletContainer.get(\n digitalWalletCode,\n );\n if (!component) return;\n\n render(\n createElement(XenditSessionProvider, {\n data: this[internal].worldState,\n sdk: this,\n children: createElement(DigitalWalletContainer, {\n digitalWalletCode,\n digitalWalletOptions: component.options,\n }),\n }),\n component.element,\n );\n }\n\n /**\n * @public\n * Returns the current payment channel.\n */\n getCurrentChannel() {\n const currentChannelCode = this[internal].currentChannelCode;\n if (!currentChannelCode) {\n return null;\n }\n return (\n this.getActiveChannels().find((ch) => {\n if (\n ch.channelCode === currentChannelCode ||\n (Array.isArray(ch.channelCode) &&\n ch.channelCode.includes(currentChannelCode))\n ) {\n return true;\n }\n }) ?? null\n );\n }\n\n /**\n * @public\n * Makes the given channel the current channel for submission.\n *\n * The current channel:\n * - Is interactive if it has a form (other channel components are non-interactive)\n * - Is used when `submit()` is called.\n *\n * Set to null to clear the current channel.\n */\n setCurrentChannel(channel: XenditPaymentChannel | null): void {\n const currentChannelCode = this[internal].currentChannelCode;\n\n const channelCode = channel?.[internal][0].channel_code ?? null;\n\n if (currentChannelCode === channelCode) {\n // no change\n return;\n }\n\n this[internal].currentChannelCode = channelCode;\n\n // if channel is not null, the component must exist\n let component: CachedChannelComponent | null = null;\n if (channel && channelCode) {\n component =\n this[internal].liveComponents.paymentChannels.get(channelCode) ?? null;\n if (!component) {\n this.createChannelComponent(channel, false);\n component =\n this[internal].liveComponents.paymentChannels.get(channelCode) ??\n null;\n }\n }\n\n this.behaviorTreeUpdate();\n this.syncInertAttribute();\n this.renderChannelPicker();\n }\n\n /**\n * @internal\n * Ensure all components have the correct inert attribute. This needs to be called when the current channel changes or a submission starts or ends.\n */\n syncInertAttribute() {\n // all channel components should have `inert` unless they are the current channel and there is no submission in progress\n const hasSubmissionInProgress =\n this[internal].behaviorTree.bb.submissionRequested;\n const channelComponents = this[internal].liveComponents.paymentChannels;\n\n for (const [_, component] of channelComponents) {\n const channelCode = Array.isArray(component.channel.channelCode)\n ? component.channel.channelCode[0]\n : component.channel.channelCode;\n if (\n channelCode === this[internal].currentChannelCode &&\n !hasSubmissionInProgress\n ) {\n if (component.element.hasAttribute(\"inert\")) {\n component.element.removeAttribute(\"inert\");\n }\n } else {\n component.element.setAttribute(\"inert\", \"\");\n }\n }\n }\n\n /**\n * @internal\n * Handles events from the payment channel component.\n * - Updates channel properties when they change.\n * - Updates save payment method setting when it changes.\n */\n private setupUiEventsForPaymentChannel(container: HTMLElement): void {\n // update per-channel channel properties\n container.addEventListener(\n XenditChannelPropertiesChangedEvent.type,\n (_event) => {\n const event = _event as XenditChannelPropertiesChangedEvent;\n const channelCode = event.channel;\n const component =\n this[internal].liveComponents.paymentChannels.get(channelCode);\n if (!component) {\n return;\n }\n\n component.channelProperties = event.channelProperties;\n\n // update behavior tree (form validity may have changed)\n this.behaviorTreeUpdate();\n },\n );\n }\n\n /**\n * @public\n *\n * Reveals any hidden validation errors in the current channel's form. Does nothing if\n * there are no validation errors to show.\n *\n * Normally, validation errors on required fields are not shown if the user did not touch them.\n */\n showValidationErrors(): void {\n const channelInvalidBehavior = this[internal].behaviorTree.findBehavior(\n ChannelInvalidBehavior,\n );\n if (!channelInvalidBehavior) {\n // form is not invalid\n return;\n }\n\n const channelCode = this[internal].currentChannelCode;\n if (!channelCode) {\n // no current channel\n return;\n }\n\n const component =\n this[internal].liveComponents.paymentChannels.get(channelCode);\n if (!component) {\n throw new Error(\n \"Current channel is set but component is missing; this is a bug, please contact support.\",\n );\n }\n\n const form = component.channelFormRef.current;\n form?.setAllFieldsTouched();\n }\n\n /**\n * @public\n * Creates a container element for rendering action UIs.\n *\n * For example, 3DS or QR codes.\n *\n * Create an action container before or during the action-begin event, and\n * the action UI will be rendered inside it.\n * Creating an action container during an action will throw an error.\n *\n * If no action container is created (or if the created container is removed from the DOM or is too small),\n * the SDK will create an action container (in a modal dialog) for you.\n */\n createActionContainerComponent(): HTMLElement;\n\n /**\n * @public\n * Creates a container element for rendering action UIs with options.\n *\n * @param options - Configuration options for the action container\n */\n createActionContainerComponent(options: ActionContainerOptions): HTMLElement;\n\n /**\n * @internal If isInternal is passed, it bypasses the action-in-progress check.\n **/\n createActionContainerComponent(isInternal: typeof internal): HTMLElement;\n\n // implementation\n createActionContainerComponent(\n optionsOrInternal?: ActionContainerOptions | typeof internal,\n ): HTMLElement {\n this.assertInitialized();\n\n if (this[internal].liveComponents.actionContainer) {\n this.destroyComponent(this[internal].liveComponents.actionContainer);\n }\n\n // Type guard to check if parameter is the internal symbol\n const isInternal = optionsOrInternal === internal;\n const options = isInternal\n ? undefined\n : (optionsOrInternal as ActionContainerOptions | undefined);\n\n const requiresActionBehavior = this[internal].behaviorTree.findBehavior(\n PeRequiresActionBehavior,\n );\n if (\n !isInternal &&\n requiresActionBehavior &&\n !requiresActionBehavior.canCreateActionContainer\n ) {\n throw new Error(\n \"Unable to create action container; there is an action in progress. Create an action before or during the `action-begin` event.\",\n );\n }\n\n const container = document.createElement(\"xendit-action-container\");\n container.setAttribute(\"translate\", \"no\");\n\n // Apply QR code options as data attributes if provided\n if (options?.qrCode) {\n if (options.qrCode.qrCodeOnly !== undefined) {\n container.setAttribute(\n \"data-qr-code-only\",\n options.qrCode.qrCodeOnly.toString(),\n );\n }\n }\n\n this[internal].liveComponents.actionContainer = container;\n\n return container;\n }\n\n /**\n * @public\n * Destroys a component of any type created by the SDK. Removes it from the DOM if necessary.\n * Throws if the element is not a xendit component or if it was already destroyed.\n */\n destroyComponent(component: HTMLElement): void {\n if (!component.tagName.startsWith(\"XENDIT-\")) {\n throw new Error(\n \"Unable to destroy component; only elements created by this SDK can be destroyed.\",\n );\n }\n\n if (this[internal].liveComponents.channelPicker === component) {\n this[internal].liveComponents.channelPicker = null;\n render(null, component);\n component.remove();\n return;\n }\n\n for (const [channelCode, c] of this[internal].liveComponents\n .paymentChannels) {\n if (c.element === component) {\n this[internal].liveComponents.paymentChannels.delete(channelCode);\n if (this[internal].currentChannelCode === channelCode) {\n this.setCurrentChannel(null);\n }\n render(null, component);\n component.remove();\n return;\n }\n }\n\n if (this[internal].liveComponents.actionContainer === component) {\n this[internal].liveComponents.actionContainer = null;\n render(null, component);\n component.remove();\n return;\n }\n\n for (const [channelCode, c] of this[internal].liveComponents\n .digitalWalletContainer) {\n if (c.element === component) {\n this[internal].liveComponents.digitalWalletContainer.delete(\n channelCode,\n );\n render(null, component);\n component.remove();\n return;\n }\n }\n\n throw new Error(\n \"Unable to destroy component; component not found. It may have already been destroyed.\",\n );\n }\n\n /**\n * @public\n * Submit, makes a payment or saves a payment method for the current payment channel.\n *\n * Call this when your submit button is clicked. Listen to the events to know the status:\n * - `submission-begin` and `submission-end` to know when submission is in progress (you should disable your UI during this time). Submission-end also provides a reason.\n * - `action-begin` and `action-end` to know when user action is in progress\n * - `will-redirect` when the user will be redirected to another page\n * - `payment-[request|token]-[created|discarded]` informs you of the ID of the resource we create on the backend, and if/when it is discarded\n * - `session-complete` when the payment request or token is successfully created (you should redirect the user to your confirmation page)\n * - `session-expired-or-canceled` can happen at any time, but it's likely to happen on submission if the session expired or was cancelled during checkout\n * - `submission-not-ready` fires before `submission-begin` to indicate that you cannot submit while a submission is in progress\n *\n * When a submission fails, you can try again by calling `submit()` again.\n * (The `session-expired-or-canceled` and `fatal-error` events are fatal, submission failure is normal and recoverable)\n *\n * This corresponds to the endpoints:\n * - `POST /v3/payment_requests` for PAY sessions\n * - `POST /v3/payment_tokens` for SAVE sessions\n */\n submit() {\n this.assertInitialized();\n\n const sessionActiveBehavior = this[internal].behaviorTree.findBehavior(\n SessionActiveBehavior,\n );\n if (!sessionActiveBehavior) {\n throw new Error(\n \"Unable to submit; the session is not in the active state. Listen to the `session-complete` and `session-expired-or-canceled` events and display success or failure states accordingly.\",\n );\n }\n\n const channelCode = this[internal].currentChannelCode;\n if (!channelCode) {\n throw new Error(\n \"Unable to submit; there is no current payment channel. Create a payment component with `createChannelComponent` or make an existing one active with `setCurrentChannel`.\",\n );\n }\n\n const component =\n this[internal].liveComponents.paymentChannels.get(channelCode);\n if (!component) {\n throw new Error(\n \"Current channel is set but component is missing; this is a bug, please contact support.\",\n );\n }\n\n // ensure if user submits in invalid state, errors are visible\n this.showValidationErrors();\n\n const channelInvalidBehavior = this[internal].behaviorTree.findBehavior(\n ChannelInvalidBehavior,\n );\n if (channelInvalidBehavior) {\n throw new Error(\n \"Unable to submit; the form for the current channel has errors. Listen to the `submission-ready` and `submission-not-ready` events, do not allow submission while in the not-ready state.\",\n );\n }\n\n const channelValidBehavior =\n this[internal].behaviorTree.findBehavior(ChannelValidBehavior);\n if (!channelValidBehavior) {\n throw new Error(\n \"Unable to submit; the SDK is not in a valid state for submission. Listen to the `submission-ready` and `submission-not-ready` events, do not allow submission while in the not-ready state.\",\n );\n }\n\n this[internal].behaviorTree.bb.submissionRequested = true;\n this.behaviorTreeUpdate();\n\n this.syncInertAttribute();\n }\n\n /**\n * @internal\n * Submits a digital wallet payment.\n */\n submitDigitalWallet(\n digitalWalletCode: XenditDigitalWalletCode,\n channel: XenditPaymentChannel,\n channelProperties: ChannelProperties,\n instantSubmissionError: SubmissionError | null = null,\n ) {\n this.assertInitialized();\n\n this.setCurrentChannel(null);\n\n this[internal].currentDigitalWalletSubmission = {\n digitalWalletCode,\n channelCode: channel[internal][0].channel_code,\n channelProperties,\n instantSubmissionError,\n };\n\n this.addEventListener(\n XenditSubmissionEndEvent.type,\n () => {\n this[internal].currentDigitalWalletSubmission = null;\n },\n { once: true },\n );\n\n this[internal].behaviorTree.bb.submissionRequested = true;\n this.behaviorTreeUpdate();\n\n this.syncInertAttribute();\n }\n\n /**\n * @public\n * Cancels a submission.\n *\n * If a submission is in-flight, the request is cancelled. If an action is in progress,\n * the action is aborted. Any active PaymentRequest or PaymentToken is abandoned.\n *\n * Does nothing if there is no active submission.\n */\n abortSubmission() {\n this.assertInitialized();\n\n const submissionBehavior =\n this[internal].behaviorTree.findBehavior(SubmissionBehavior);\n if (!submissionBehavior) {\n return; // no submission in progress\n }\n\n this[internal].behaviorTree.bb.submissionRequested = false;\n this.behaviorTreeUpdate();\n }\n\n /**\n * @public\n * Completes a payment in test mode.\n *\n * The session must be in test mode, and the session type must be PAY, and\n * the sdk must have an in-progress action, and the channel must be a QR, VA, or OTC channel.\n *\n * @example\n * ```\n * components.addEventListener(\"action-begin\", () => {\n * components.simulatePayment();\n * });\n * ```\n */\n simulatePayment() {\n this.assertInitialized();\n\n if (this[internal].worldState.session.session_type !== \"PAY\") {\n throw new Error(\n 'Unable to simulate payment, the session type is not \"PAY\".',\n );\n }\n\n const requiresActionBehavior = this[internal].behaviorTree.findBehavior(\n PeRequiresActionBehavior,\n );\n if (!requiresActionBehavior) {\n throw new Error(\n \"Unable to simulate payment; there is no action in progress. You can simulate payments any time between the `action-begin` and `action-end` events.\",\n );\n }\n\n const paymentEntity = this[internal].worldState.paymentEntity;\n if (!paymentEntity) {\n throw new Error(\n \"The PeRequiresActionBehavior is present but there is no payment entity. This is a bug, please contact support.\",\n );\n }\n\n const channel = this.findChannel(paymentEntity.entity.channel_code);\n\n if (!channel) {\n throw new Error(\n \"Channel not found; this is a bug, please contact support.\",\n );\n }\n\n const action = findBestAction(paymentEntity.entity.actions);\n if (!action || !canBeSimulated(action)) {\n throw new Error(\n \"Unable to simulate payment; the action does not support simulation.\",\n );\n }\n\n this[internal].behaviorTree.bb.simulatePaymentRequested = true;\n this.behaviorTreeUpdate();\n }\n\n /**\n * @public\n * Request an immediate poll for session status. Useful for handling payment\n * affirmation (e.g. I have made the payment) by the user. The session must still\n * be active.\n *\n * @example\n * ```\n * function onUserAffirmPayment() {\n * components.pollImmediately();\n * }\n * ```\n */\n pollImmediately() {\n this.assertInitialized();\n\n if (this[internal].worldState.session.status !== \"ACTIVE\") {\n throw new Error(\n \"Unable to poll immediately; the session is not longer active.\",\n );\n }\n\n this[internal].behaviorTree.bb.pollImmediatelyRequested = true;\n this.behaviorTreeUpdate();\n }\n\n /**\n * @internal\n * TODO: remove this, it's for debugging\n */\n getState() {\n const channelCode = this[internal].currentChannelCode;\n const component = this[internal].liveComponents.paymentChannels.get(\n channelCode ?? \"\",\n );\n return {\n channelCode,\n channelProperties: component?.channelProperties || null,\n behaviorTree: this[internal].behaviorTree,\n };\n }\n\n /**\n * @public\n * The `init` event lets you know when the session data has been loaded.\n *\n * The `createChannelPickerComponent` method can be called before this event, but\n * most other functionaility needs to wait for this event.\n *\n * @example\n * ```\n * components.addEventListener(\"init\", () => {\n * components.getSession();\n * });\n * ```\n */\n addEventListener(\n name: \"init\",\n listener: XenditEventListener<XenditInitEvent>,\n options?: boolean | AddEventListenerOptions,\n ): void;\n\n /**\n * @public\n * The `submission-ready` and `submission-not-ready` events let you know when submission should be available.\n * If ready, you can call `submit()` to begin the payment or token creation process.\n *\n * \"submission-ready\" means a channel has been selected, and all required fields are populated,\n * and all fields are valid.\n *\n * Use this to enable/disable your submit button.\n *\n * @example\n * ```\n * components.addEventListener(\"submission-ready\", () => {\n * submitButton.disabled = false;\n * });\n * components.addEventListener(\"submission-not-ready\", () => {\n * submitButton.disabled = true;\n * });\n * ```\n */\n addEventListener(\n name: \"submission-ready\",\n listener: XenditEventListener<XenditReadyEvent>,\n options?: boolean | AddEventListenerOptions,\n ): void;\n addEventListener(\n name: \"submission-not-ready\",\n listener: XenditEventListener<XenditReadyEvent>,\n options?: boolean | AddEventListenerOptions,\n ): void;\n\n /**\n * @public\n * The `submission-begin` and `submission-end` events let you know when a submission is in progress.\n *\n * Use this to disable your UI while submission is in progress.\n *\n * In the case of successful submission, `submission-end` will be followed by `session-complete`.\n * In the case of failed submission, the SDK will return to the ready state and you can try submitting again.\n */\n addEventListener(\n name: \"submission-begin\",\n listener: XenditEventListener<XenditSubmissionBeginEvent>,\n options?: boolean | AddEventListenerOptions,\n ): void;\n addEventListener(\n name: \"submission-end\",\n listener: XenditEventListener<XenditSubmissionEndEvent>,\n options?: boolean | AddEventListenerOptions,\n ): void;\n\n /**\n * @public\n * The events `payment-request-created`, `payment-token-created`, `payment-request-discarded`, and `payment-token-discarded`\n * let you know when a payment request or payment token has been created (as part of a submission) or\n * discarded (by cancelling or failing a submission).\n */\n addEventListener(\n name: \"payment-request-created\",\n listener: XenditEventListener<XenditPaymentRequestCreatedEvent>,\n options?: boolean | AddEventListenerOptions,\n ): void;\n addEventListener(\n name: \"payment-token-created\",\n listener: XenditEventListener<XenditPaymentTokenCreatedEvent>,\n options?: boolean | AddEventListenerOptions,\n ): void;\n addEventListener(\n name: \"payment-request-discarded\",\n listener: XenditEventListener<XenditPaymentRequestDiscardedEvent>,\n options?: boolean | AddEventListenerOptions,\n ): void;\n addEventListener(\n name: \"payment-token-discarded\",\n listener: XenditEventListener<XenditPaymentTokenDiscardedEvent>,\n options?: boolean | AddEventListenerOptions,\n ): void;\n\n /**\n * @public\n * The `action-begin` and `action-end` events let you know when a user action is in progress.\n *\n * After submission, an action may be required (e.g. 3DS, redirect, QR code, etc.).\n * The SDK will control the UI for actions, you don't need to do anything.\n *\n * Avoid changing any application state while an action is in progress as it may be\n * confusing for the user or interrupt their payment attempt.\n *\n * `action-end` is fired after the action is done, successfully or not. Note that users can\n * voluntarily dismiss actions.\n */\n addEventListener(\n name: \"action-begin\",\n listener: XenditEventListener<XenditActionBeginEvent>,\n options?: boolean | AddEventListenerOptions,\n ): void;\n addEventListener(\n name: \"action-end\",\n listener: XenditEventListener<XenditActionEndEvent>,\n options?: boolean | AddEventListenerOptions,\n ): void;\n\n /**\n * @public\n * Event handler called just before the user is redirected to a third party site to\n * complete the payment.\n *\n * Since redirects are actions, this will always be preceded by an `action-begin` event.\n */\n addEventListener(\n name: \"will-redirect\",\n listener: XenditEventListener<XenditWillRedirectEvent>,\n options?: boolean | AddEventListenerOptions,\n ): void;\n\n /**\n * @public\n * Event handler called on success.\n * The payment has been made and/or the token has been created.\n */\n addEventListener(\n name: \"session-complete\",\n listener: XenditEventListener<XenditSessionCompleteEvent>,\n options?: boolean | AddEventListenerOptions,\n ): void;\n\n /**\n * @public\n * Event handler called when the session has expired or been cancelled.\n */\n addEventListener(\n name: \"session-expired-or-canceled\",\n listener: XenditEventListener<XenditSessionExpiredOrCanceledEvent>,\n options?: boolean | AddEventListenerOptions,\n ): void;\n\n /**\n * @public\n * Event handler called on pending state. You should show a pending UI in response to this event.\n *\n * The pending state means an associated payment request or token will take some time to complete.\n * No other payment attempts can be made while in the pending state.\n *\n * This occurs for payments requiring manual confirmation, e.g. FPX business payments.\n *\n * The pending state usually occurs after a submission-end event.\n * This event will also be fired if the SDK is initialized and the session is already pending.\n */\n addEventListener(\n name: \"session-pending\",\n listener: XenditEventListener<XenditSessionPendingEvent>,\n options?: boolean | AddEventListenerOptions,\n ): void;\n\n /**\n * @public\n * Event handler called when exiting the pending state.\n *\n * After the pending state, the session may be in the active state, allowing further attempts, or\n * it may be completed or expired/canceled, in which case the respective event will be fired immediently after this one.\n */\n addEventListener(\n name: \"session-not-pending\",\n listener: XenditEventListener<XenditSessionNotPendingEvent>,\n options?: boolean | AddEventListenerOptions,\n ): void;\n\n /**\n * @public\n * Event handler called when something unrecoverable has happened. You should create a new\n * session and a new SDK instance.\n */\n addEventListener(\n name: \"fatal-error\",\n listener: XenditEventListener<XenditFatalErrorEvent>,\n options?: boolean | AddEventListenerOptions,\n ): void;\n\n /**\n * @public\n * Fallback overload.\n */\n addEventListener<K extends keyof XenditEventMap>(\n type: K,\n listener: (this: XenditComponents, ev: XenditEventMap[K]) => void,\n options?: boolean | AddEventListenerOptions,\n ): void;\n\n /**\n * @internal\n * Implementation.\n */\n addEventListener(\n type: string,\n listener: unknown,\n options?: boolean | AddEventListenerOptions,\n ): void {\n this[internal].eventListenersPresent.set(type, true);\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\n return super.addEventListener(type, listener as any, options);\n }\n\n /**\n * @public\n * Fallback overload.\n */\n removeEventListener<K extends keyof XenditEventMap>(\n type: K,\n listener: (this: XenditComponents, ev: XenditEventMap[K]) => void,\n options?: boolean | AddEventListenerOptions,\n ): void;\n\n /**\n * @internal\n * Implementation.\n */\n removeEventListener(\n type: string,\n listener: unknown,\n options?: boolean | AddEventListenerOptions,\n ): void {\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\n return super.removeEventListener(type, listener as any, options);\n }\n\n /**\n * @public\n * Formats a currency value according to the currency's conventions.\n *\n * e.g.\n * ```\n * USD 1000 -> \"$1,000\"\n * USD 1000.5 -> \"$1,000.50\"\n * IDR 1000000 -> \"Rp1.000.000\"\n * PHP 1000 -> \"₱1,000.00\"\n * ```\n */\n static amountFormat(amount: number, currency: string): string {\n return amountFormat(amount, currency);\n }\n}\n\n/**\n * @public\n * Test version of XenditComponents that uses mock data instead of API calls.\n * Use this class for testing and development purposes.\n *\n * The componentsSdkKey option is ignored.\n *\n * @example\n * ```\n * const testSdk = new XenditComponentsTest({});\n * ```\n */\nexport class XenditComponentsTest extends XenditComponents {\n /**\n * @internal\n * The mock to apply on the next poll.\n */\n public nextMockUpdate: BffPollResponse | null = null;\n\n /**\n * @public\n * Test SDK ignores componentsSdkKey and uses a mock key.\n */\n constructor(\n options: Omit<XenditComponentsOptions, \"componentsSdkKey\"> & {\n componentsSdkKey?: string;\n },\n ) {\n super({\n ...options,\n componentsSdkKey: makeTestSdkKey(),\n });\n\n // internal event listeners\n (this as EventTarget).addEventListener(\n InternalScheduleMockUpdateEvent.type,\n this.setNextMockUpdate.bind(this),\n );\n }\n\n /**\n * @internal\n * Override to use test data instead of making API calls\n */\n protected async initializeAsync(): Promise<void> {\n // Simulate network delay and prevent firing the init event before the constructor returns\n await sleep(MOCK_NETWORK_DELAY_MS);\n\n // Always use test data for this class\n const bff = (await import(\"./data/test-data\")).makeTestBffData();\n\n // Update internal data\n this.dispatchEvent(\n new InternalUpdateWorldState({\n business: bff.business,\n customer: bff.customer,\n session: bff.session,\n channels: bff.channels,\n channelUiGroups: bff.channel_ui_groups,\n digitalWallets: bff.digital_wallets ?? null,\n paymentEntity: null,\n sessionTokenRequestId: null,\n succeededChannel: null,\n } satisfies WorldState),\n );\n }\n\n /**\n * @internal\n * Indicates that this is a mock SDK.\n */\n public isMock(): boolean {\n return true;\n }\n\n /**\n * @internal\n * Sets the next mock update to use.\n */\n setNextMockUpdate(_event: Event): void {\n const event = _event as InternalScheduleMockUpdateEvent;\n this.nextMockUpdate = event.mockData;\n }\n}\n\n// re-exports\nexport type { ChannelProperties, ChannelPropertyPrimative };\n","// Must be the first import\nimport \"preact/debug\";\nimport \"preact/devtools\";\n\nimport { createIconSet } from \"./components/icon\";\nimport { createStyles } from \"./styles\";\nimport { setupPreactBatch } from \"./preact-batch\";\n\nif (typeof window === \"undefined\" || typeof document === \"undefined\") {\n // do not run browser initialization in node env\n} else {\n setupPreactBatch();\n createStyles();\n createIconSet();\n}\n\nexport * from \"./public-sdk\";\nexport * from \"./public-event-types\";\nexport * from \"./public-options-types\";\nexport * from \"./public-data-types\";\n","import { findFirstStyleOrLinkElement } from \"./dom-utils\";\nimport css from \"./styles.css\";\n\nexport function createStyles() {\n const styleElement = document.createElement(\"style\");\n styleElement.textContent = css;\n const firstStyleOrLinkElement = findFirstStyleOrLinkElement();\n if (firstStyleOrLinkElement) {\n firstStyleOrLinkElement.insertAdjacentElement(\"beforebegin\", styleElement);\n } else {\n document.head.appendChild(styleElement);\n }\n}\n","/* variables */\n:root {\n --xendit-font-family: sans-serif;\n --xendit-color-primary: #1762ee;\n --xendit-color-text: #252525;\n --xendit-color-text-secondary: #585858;\n --xendit-color-text-placeholder: #7d7d7d;\n --xendit-color-disabled: #f7f7f7;\n --xendit-color-danger: #d1414d;\n --xendit-color-border: #f3f3f3;\n --xendit-color-background: #ffffff;\n --xendit-focus-shadow: 0px 0px 0px 2px\n color-mix(in srgb, var(--xendit-color-primary) 15%, transparent);\n --xendit-animation-duration: 0.3s;\n --xendit-animation-ease: ease-in-out;\n --xendit-radius-1: 8px;\n --xendit-z-index-focus: 2;\n\n /* Browser-specific border collapse margins */\n --xendit-border-collapse-offset: -0.5px; /* Default for Chrome/Edge */\n --xendit-border-collapse-webkit-gecko: -1.5px; /* Fix Safari and Firefox subpixel rendering */\n\n /* QR code colors */\n --xendit-qr-foreground-color: #000000;\n --xendit-qr-background-color: #ffffff;\n\n /* icon colors */\n --xendit-color-icon-primary: #7c7c7c;\n --xendit-color-icon-secondary: #f1f1f1;\n}\n\n/* Set default font for root components */\nxendit-channel-picker,\nxendit-action-container,\nxendit-payment-channel {\n display: block;\n unicode-bidi: isolate;\n font-family: var(--xendit-font-family);\n color: var(--xendit-color-text);\n}\n\n.xendit-default-action-container {\n font-family: var(--xendit-font-family);\n}\n\nxendit-action-container {\n background-color: var(--xendit-color-background);\n flex: 1; /* Action container usually wants to stretch to fit, assuming the parent is a flexbox. */\n}\n\nxendit-payment-channel button,\nxendit-payment-channel textarea,\nxendit-payment-channel select,\nxendit-payment-channel input,\nxendit-payment-channel input::placeholder {\n font-family: inherit;\n}\n\nxendit-payment-channel input::placeholder,\nxendit-payment-channel textarea::placeholder,\nxendit-payment-channel select::placeholder {\n color: var(--xendit-color-text-placeholder);\n}\n\n/* Reusable typography classes */\n.xendit-text-12 {\n font-size: 12px;\n line-height: 16px;\n letter-spacing: -0.01px;\n}\n\n.xendit-text-14 {\n font-size: 14px;\n line-height: 16px;\n letter-spacing: -0.09px;\n}\n\n.xendit-text-16 {\n font-size: 16px;\n line-height: 16px;\n letter-spacing: -0.09px;\n}\n\n.xendit-text-18 {\n font-size: 18px;\n line-height: 24px;\n letter-spacing: -0.26px;\n}\n\n.xendit-text-20 {\n font-size: 20px;\n line-height: 28px;\n letter-spacing: -0.33px;\n}\n\n.xendit-text-12,\n.xendit-text-14,\n.xendit-text-16 {\n font-weight: 400;\n}\n\n.xendit-text-semibold {\n font-weight: 600;\n}\n\n.xendit-text-bold {\n font-weight: 700;\n}\n\n.xendit-text-link {\n color: var(--xendit-color-primary);\n}\n.xendit-text-secondary {\n color: var(--xendit-color-text-secondary);\n}\n\n.xendit-text-center {\n text-align: center;\n}\n\n/* Accordion component */\n\n.xendit-accordion {\n display: flex;\n flex-direction: column;\n border: 1px solid var(--xendit-color-border);\n border-radius: var(--xendit-radius-1);\n background: var(--xendit-color-background);\n}\n\n.xendit-accordion-item:not(:first-child) {\n border-top: 1px solid var(--xendit-color-border);\n border-top-left-radius: var(--xendit-radius-1);\n border-top-right-radius: var(--xendit-radius-1);\n}\n\n.xendit-accordion-item-header {\n display: grid;\n grid-template-columns: auto 1fr auto;\n grid-gap: 16px;\n align-items: center;\n cursor: pointer;\n padding: 24px 16px;\n color: var(--xendit-color-text);\n border-radius: 8px;\n}\n\n.xendit-accordion-item-disabled .xendit-accordion-item-header {\n opacity: 0.5;\n cursor: not-allowed;\n}\n\n.xendit-accordion-item-header-title {\n display: flex;\n flex-direction: column;\n gap: 8px;\n}\n\n.xendit-accordion-item-disabled .xendit-accordion-item-header-title,\n.xendit-accordion-item-disabled .xendit-accordion-item-header-icon {\n opacity: 0.5;\n}\n\n.xendit-accordion-item.xendit-accordion-item-open\n .xendit-accordion-item-header {\n color: var(--xendit-color-primary);\n}\n\n.xendit-accordion-item-chevron {\n color: var(--xendit-color-text);\n}\n\n.xendit-accordion-item-disabled .xendit-accordion-item-chevron {\n display: none;\n}\n\n.xendit-accordion-item-chevron g {\n transition: transform var(--xendit-animation-duration)\n var(--xendit-animation-ease);\n}\n\n.xendit-accordion-item-header:focus-visible {\n border-radius: 8px;\n box-shadow: 0px 0px 0px 2px\n color-mix(in srgb, var(--xendit-color-primary) 15%, transparent);\n outline: none;\n}\n\n.xendit-accordion-item-content {\n overflow: hidden;\n transition: height var(--xendit-animation-duration)\n var(--xendit-animation-ease);\n}\n\n.xendit-accordion-item.xendit-accordion-item-closed\n .xendit-accordion-item-content {\n height: 0;\n}\n\n.xendit-accordion-item.xendit-accordion-item-open\n .xendit-accordion-item-content {\n height: calc-size(auto, size);\n}\n\n.xendit-accordion-item-padding {\n padding: 16px;\n}\n\n/* Channel picker digital wallet section */\n\n.xendit-channel-picker-digital-wallet-section {\n display: grid;\n grid-auto-flow: column;\n grid-auto-columns: 1fr;\n gap: 8px;\n margin-bottom: 8px;\n}\n\n/* Channel picker group */\n\n.xendit-channel-picker-group {\n display: flex;\n flex-direction: column;\n gap: 16px;\n}\n\n.xendit-channel-picker-group select {\n border: 1px solid var(--xendit-color-border);\n border-radius: 8px;\n padding: 12px;\n appearance: none;\n outline: none;\n}\n\n.xendit-channel-picker-group select:focus {\n box-shadow: 0px 0px 0px 2px\n color-mix(in srgb, var(--xendit-color-primary) 15%, transparent);\n}\n\n.xendit-channel-logo {\n width: 24px;\n height: 16px;\n margin: -5px 0;\n padding: 4px;\n border: 1px solid var(--xendit-color-border);\n border-radius: 4px;\n background-color: white; /* always white, not --xendit-color-background */\n object-fit: contain;\n}\n\n/* Payment channel */\n\nxendit-payment-channel[inert] {\n filter: opacity(0.5) grayscale(1);\n}\n\n.xendit-payment-channel {\n display: flex;\n flex-direction: column;\n gap: 16px;\n}\n\n.xendit-payment-channel-banner {\n width: 100%;\n height: auto;\n object-fit: contain;\n}\n\n.xendit-payment-channel-instructions {\n display: grid;\n grid-template-columns: auto 1fr;\n grid-gap: 12px;\n color: var(--xendit-color-text-secondary);\n}\n\n.xendit-payment-channel-instructions-logo {\n height: 40px;\n width: auto;\n object-fit: contain;\n}\n\n.xendit-payment-channel-instructions-text {\n display: flex;\n flex-direction: column;\n justify-content: center;\n gap: 4px;\n}\n\n.xendit-payment-channel-instructions-text p {\n margin: 0;\n}\n\n/* Forms */\n\n.xendit-channel-form {\n display: flex;\n flex-direction: column;\n gap: 16px;\n}\n\n.xendit-channel-form > form {\n display: contents;\n}\n\n.xendit-form-field-group {\n display: grid;\n grid-template-columns: repeat(2, minmax(0, 1fr));\n}\n\n.xendit-channel-form-field {\n display: flex;\n flex-direction: column;\n gap: 8px;\n}\n\n.xendit-channel-form-field-group {\n display: grid;\n gap: 8px;\n}\n\n.xendit-channel-form-field-group-label-container {\n display: flex;\n justify-content: space-between;\n gap: 16px;\n}\n\n.xendit-channel-form-field-group label {\n width: fit-content;\n cursor: pointer;\n}\n\n.xendit-form-field-group.invalid .xendit-channel-form-field input,\n.xendit-form-field-group.invalid\n .xendit-channel-form-field\n .xendit-iframe-container,\n.xendit-form-field-group.invalid .xendit-dropdown button {\n border: 1px solid var(--xendit-color-danger);\n}\n\n.xendit-channel-form-field input:not([type=\"checkbox\"]),\n.xendit-channel-form-field select,\n.xendit-channel-form-field .xendit-iframe-container {\n display: flex;\n border: 1px solid var(--xendit-color-border);\n background: var(--xendit-color-background);\n border-radius: 8px;\n padding: 12px;\n appearance: none;\n}\n\n/* TODO: Refine these class usages */\n.xendit-channel-form-field.field-radius-tl-0 input,\n.xendit-channel-form-field.field-radius-tl-0 button,\n.xendit-channel-form-field.field-radius-tl-0 .xendit-iframe-container {\n border-top-left-radius: 0;\n}\n\n.xendit-channel-form-field.field-radius-tr-0 input,\n.xendit-channel-form-field.field-radius-tr-0 button,\n.xendit-channel-form-field.field-radius-tr-0 .xendit-iframe-container {\n border-top-right-radius: 0;\n}\n\n.xendit-channel-form-field.field-radius-bl-0 input,\n.xendit-channel-form-field.field-radius-bl-0 button,\n.xendit-channel-form-field.field-radius-bl-0 .xendit-iframe-container {\n border-bottom-left-radius: 0;\n}\n\n.xendit-channel-form-field.field-radius-br-0 input,\n.xendit-channel-form-field.field-radius-br-0 button,\n.xendit-channel-form-field.field-radius-br-0 .xendit-iframe-container {\n border-bottom-right-radius: 0;\n}\n\n.xendit-channel-form-field.field-collapse-l,\n.xendit-channel-form-field.field-collapse-l {\n margin-left: var(--xendit-border-collapse-offset);\n}\n\n.xendit-channel-form-field.field-collapse-r,\n.xendit-channel-form-field.field-collapse-r {\n margin-right: var(--xendit-border-collapse-offset);\n}\n\n.xendit-channel-form-field.field-collapse-l .xendit-iframe-container {\n margin-left: calc(var(--xendit-border-collapse-offset) * 2);\n width: calc(100% + abs(var(--xendit-border-collapse-offset) * 2));\n}\n\n.xendit-channel-form-field.field-collapse-r .xendit-iframe-container {\n margin-right: 0;\n}\n\n.xendit-channel-form-field.field-collapse-t input,\n.xendit-channel-form-field.field-collapse-t button,\n.xendit-channel-form-field.field-collapse-t .xendit-iframe-container {\n margin-top: var(--xendit-border-collapse-offset);\n}\n\n.xendit-channel-form-field.field-collapse-b input,\n.xendit-channel-form-field.field-collapse-b button,\n.xendit-channel-form-field.field-collapse-b .xendit-iframe-container {\n margin-bottom: var(--xendit-border-collapse-offset);\n}\n\n/* Safari and Firefox specific adjustments */\n@supports (font: -apple-system-body) or (-moz-appearance: none) {\n .xendit-channel-form-field.field-collapse-l .xendit-iframe-container {\n margin-left: 0;\n width: 100%;\n }\n\n .xendit-channel-form-field.field-collapse-b input,\n .xendit-channel-form-field.field-collapse-b button {\n margin-bottom: var(--xendit-border-collapse-webkit-gecko);\n height: calc(100% + abs(var(--xendit-border-collapse-webkit-gecko) * 2));\n }\n}\n\n.xendit-channel-form-field.field-collapse-r .xendit-iframe-container:focus {\n border-right: none;\n}\n\n.xendit-channel-form-field.field-collapse-l .xendit-iframe-container:focus {\n border-left: none;\n}\n/* Ends TODO */\n\n.xendit-card-brand-logo {\n width: 24px;\n height: 16px;\n border: 1px solid var(--xendit-color-border);\n border-radius: 4px;\n padding: 4px;\n background-color: white; /* always white, not --xendit-color-background */\n}\n\n.xendit-card-brands-list {\n display: flex;\n align-items: center;\n padding: 8px 12px;\n gap: 4px;\n}\n\n.xendit-channel-form-field input:focus,\n.xendit-channel-form-field select:focus,\n.xendit-channel-form-field .xendit-iframe-container.xendit-field-focus {\n border-color: var(--xendit-color-primary);\n box-shadow: var(--xendit-focus-shadow);\n outline: none;\n z-index: var(--xendit-z-index-focus);\n}\n\n.xendit-channel-form-field button:focus {\n position: relative;\n z-index: var(--xendit-z-index-focus);\n}\n\n.xendit-channel-form-field .xendit-iframe-container {\n height: 40px;\n width: 100%;\n padding: 0;\n overflow: hidden;\n box-sizing: border-box;\n}\n\n.xendit-channel-form-field .xendit-iframe-container iframe {\n height: 40px;\n width: 100%;\n border: none;\n min-width: 0;\n}\n\n.xendit-channel-form-field.xendit-form-field-span-1 {\n grid-column: span 1;\n}\n\n.xendit-channel-form-field.xendit-form-field-span-2 {\n grid-column: span 2;\n}\n\n.xendit-checkbox {\n display: flex;\n align-items: center;\n}\n\n.xendit-checkbox-box {\n display: flex;\n}\n\n.xendit-checkbox input {\n width: 16px;\n height: 16px;\n margin: 0;\n cursor: pointer;\n}\n\n.xendit-checkbox label {\n cursor: pointer;\n padding-left: 8px;\n}\n\n.xendit-checkbox input {\n opacity: 0;\n position: absolute;\n}\n\n.xendit-checkbox input + .xendit-checkbox-graphic {\n width: 16px;\n height: 16px;\n border: 1px solid var(--xendit-color-border);\n border-radius: 4px;\n box-sizing: border-box;\n color: transparent;\n}\n\n.xendit-checkbox input:checked + .xendit-checkbox-graphic {\n color: var(--xendit-color-background);\n background-color: var(--xendit-color-primary);\n border-color: var(--xendit-color-primary);\n}\n\n/* Dialog */\n\n.xendit-dialog-backdrop {\n position: fixed;\n top: 0;\n bottom: 0;\n left: 0;\n right: 0;\n background: rgba(0, 0, 0, 0.5);\n display: flex;\n padding: 48px;\n justify-content: center;\n align-items: center;\n}\n\n.xendit-dialog {\n background-color: var(--xendit-color-background);\n border-radius: 8px;\n position: relative;\n}\n\n.xendit-dialog-header {\n display: flex;\n justify-content: space-between;\n align-items: center;\n color: var(--xendit-color-text);\n padding: 16px;\n gap: 16px;\n line-height: 20px;\n border-bottom: 1px solid var(--xendit-color-border);\n}\n\n.xendit-dialog-header button {\n display: flex;\n background: none;\n border: none;\n color: var(--xendit-color-text);\n cursor: pointer;\n padding: 0;\n}\n\n.xendit-dialog-floating-close {\n position: absolute;\n top: 24px;\n right: 24px;\n background: none;\n border: none;\n color: var(--xendit-color-text);\n cursor: pointer;\n padding: 0;\n}\n\n.xendit-dialog-body {\n display: flex;\n padding: 24px;\n}\n\n.xendit-error-message {\n color: var(--xendit-color-danger);\n}\n\n/* Phone input Dropdown */\n.xendit-input-phone {\n display: flex;\n gap: 8px;\n}\n\n.xendit-phone-number-input {\n width: 100%;\n}\n\n.xendit-dropdown .xendit-dropdown-search input {\n padding: 8px;\n border: 1px solid var(--xendit-color-border);\n border-radius: var(--xendit-radius-1);\n box-sizing: border-box;\n}\n\n.xendit-dropdown-search input:focus {\n outline: none;\n border-color: var(--xendit-color-primary);\n box-shadow: var(--xendit-focus-shadow);\n}\n\n/* Phone input Dropdown ends */\n\n/* Dropdown */\n.xendit-dropdown button {\n width: 100%;\n display: grid;\n grid-template-columns: 1fr auto;\n align-items: center;\n gap: 8px;\n text-align: left;\n background-color: var(--xendit-color-background);\n border: 1px solid var(--xendit-color-border);\n border-radius: var(--xendit-radius-1);\n justify-content: space-between;\n padding: 12px;\n cursor: pointer;\n}\n\n.xendit-dropdown button.xendit-dropdown-has-asset {\n grid-template-columns: auto 1fr auto;\n}\n\n.xendit-dropdown button:disabled {\n background: var(--xendit-color-disabled);\n}\n\n.xendit-dropdown button:focus {\n outline: none;\n border: 1px solid var(--xendit-color-primary);\n box-shadow: 0px 0px 0px 2px #1762ee26;\n}\n\n.xendit-dropdown-menu {\n position: absolute;\n z-index: 1;\n display: flex;\n flex-direction: column;\n gap: 4px;\n max-height: 168px;\n width: 257px;\n padding: 4px;\n margin: 4px 0;\n background-color: var(--xendit-color-background);\n border: 1px solid var(--xendit-color-border);\n border-radius: var(--xendit-radius-1);\n list-style: none;\n box-shadow: 0px 4px 8px 0px #25252514;\n overflow-y: auto;\n}\n\n.xendit-dropdown-menu ul {\n list-style: none;\n padding: 4px;\n margin-top: 0;\n}\n\n.xendit-dropdown-search {\n position: sticky;\n top: 0;\n z-index: 1;\n}\n\n.xendit-dropdown-search input {\n width: 100%;\n}\n\n.xendit-dropdown-item {\n display: grid;\n grid-template-columns: 1fr auto;\n align-items: center;\n gap: 8px;\n padding: 8px 12px 8px 4px;\n border-radius: var(--xendit-radius-1);\n cursor: pointer;\n z-index: 0;\n --xendit-dropdown-item-hover-color: var(--xendit-color-background);\n --xendit-dropdown-item-hover-bg-color: var(--xendit-color-primary);\n}\n\n.xendit-dropdown-item-disabled {\n --xendit-dropdown-item-hover-color: var(--xendit-color-text);\n --xendit-dropdown-item-hover-bg-color: var(--xendit-color-disabled);\n}\n\n.xendit-dropdown-item-active {\n box-shadow: var(--xendit-focus-shadow);\n}\n\n.xendit-dropdown-item:hover {\n background-color: var(--xendit-dropdown-item-hover-bg-color);\n}\n\n.xendit-dropdown-item:hover .xendit-dropdown-item-text,\n.xendit-dropdown-item:hover .xendit-dropdown-item-description {\n color: var(--xendit-dropdown-item-hover-color);\n}\n\n.xendit-dropdown-item-selected {\n color: var(--xendit-color-primary);\n}\n\n.xendit-dropdown-item:hover .xendit-dropdown-item-selected {\n color: var(--xendit-dropdown-item-hover-color);\n}\n\n.xendit-dropdown-item.xendit-dropdown-has-asset {\n grid-template-columns: auto 1fr auto;\n}\n\n.xendit-dropdown-item-text {\n display: flex;\n flex-direction: column;\n gap: 4px;\n}\n\n.xendit-dropdown-item-disabled {\n cursor: not-allowed;\n opacity: 0.5;\n}\n\n.xendit-dropdown-item-disabled:hover,\n.xendit-dropdown-item-disabled.xendit-dropdown-item-active {\n background-color: var(--xendit-color-disabled);\n}\n\n/* Dropdown ends */\n\n/* Button */\n.xendit-button {\n display: inline-flex;\n align-items: center;\n justify-content: center;\n gap: 8px;\n padding: 12px 16px;\n font-family: var(--xendit-font-family);\n font-size: 14px;\n font-weight: 600;\n line-height: 16px;\n letter-spacing: -0.09px;\n cursor: pointer;\n transition: background-color var(--xendit-animation-duration)\n var(--xendit-animation-ease);\n}\n.xendit-button-primary-rounded {\n border: 1px solid transparent;\n background-color: var(--xendit-color-primary);\n color: var(--xendit-color-background);\n border-radius: var(--xendit-radius-1);\n}\n.xendit-button-white-rounded {\n background-color: var(--xendit-color-background);\n color: var(--xendit-color-text);\n border: 1px solid var(--xendit-color-border);\n border-radius: var(--xendit-radius-1);\n}\n.xendit-button-white-rounded:hover {\n background-color: var(--xendit-color-border);\n}\n.xendit-button-block {\n width: 100%;\n}\n.xendit-button-sm {\n padding: 8px 12px;\n font-size: 12px;\n line-height: 16px;\n}\n\n@keyframes xendit-button-loading-spinner-spin {\n 0% {\n transform: rotate(0deg);\n }\n 100% {\n transform: rotate(360deg);\n }\n}\n\n.xendit-button-loading-spinner {\n width: 16px;\n height: 16px;\n animation: xendit-button-loading-spinner-spin 1s linear infinite;\n}\n\n.xendit-skeleton-field button {\n height: 42px;\n background-color: var(--xendit-color-disabled);\n display: flex;\n align-items: center;\n justify-content: center;\n color: var(--xendit-color-text-secondary);\n}\n\n/* Button ends */\n\n.xendit-dotted-line {\n height: 1px;\n border: none;\n background: repeating-linear-gradient(\n to right,\n var(--xendit-color-border) 0px 4px,\n transparent 4px 8px\n );\n margin: 16px 0;\n}\n\n/* Form Simulation Helper */\n.xendit-form-simulation-root {\n position: relative;\n}\n.xendit-form-simulation-trigger {\n background: transparent;\n border: none;\n cursor: pointer;\n padding: 0;\n}\n.xendit-form-simulation-popover {\n position: absolute;\n top: 100%;\n right: 0;\n\n width: 350px;\n display: flex;\n flex-direction: column;\n gap: 12px;\n border-radius: 4px;\n padding: 12px;\n border: 1px solid var(--xendit-color-border);\n background: color-mix(\n in srgb,\n var(--xendit-color-background),\n transparent 40%\n );\n backdrop-filter: blur(6px);\n box-shadow: 0px 0px 0px 2px\n color-mix(in srgb, var(--xendit-color-primary) 15%, transparent);\n}\n.xendit-form-simulation-popover .xendit-dropdown {\n position: relative;\n}\n.xendit-form-simulation-popover .xendit-dropdown-menu {\n width: auto;\n}\n.xendit-form-simulation-scenario-icon {\n height: 28px;\n width: 40px;\n border-radius: 4px;\n border: 1px solid var(--xendit-color-border);\n object-fit: contain;\n background-color: white;\n}\n\n/* Form Simulation Helper ends */\n\n.xendit-tooltip {\n position: absolute;\n top: 100%;\n right: 50%;\n transform: translateX(50%);\n background-color: black;\n color: white;\n padding: 8px 12px;\n border-radius: var(--xendit-radius-1);\n white-space: nowrap;\n z-index: 1000;\n font-weight: 600;\n font-size: 14px;\n line-height: 16px;\n animation: xendit-tooltip-fade-in var(--xendit-animation-duration)\n var(--xendit-animation-ease);\n opacity: 1;\n}\n\n@keyframes xendit-tooltip-fade-in {\n from {\n opacity: 0;\n }\n to {\n opacity: 1;\n }\n}\n\n/* Instructions */\n\n.xendit-instructions-bold {\n font-weight: 600;\n}\n.xendit-instructions-bullet-list {\n display: flex;\n flex-direction: column;\n gap: 12px;\n margin: 8px 0;\n}\n.xendit-instructions-bullet-list::marker {\n color: var(--xendit-color-text-secondary);\n}\n.xendit-instructions-form-card {\n display: flex;\n flex-direction: column;\n padding: 16px;\n border-radius: 12px;\n border: 1px solid var(--xendit-color-border);\n gap: 4px;\n width: 321px;\n}\n.xendit-instructions-form-field {\n display: flex;\n flex-direction: column;\n gap: 8px;\n padding: 8px 0;\n border-bottom: 1px solid var(--xendit-color-border);\n}\n.xendit-instructions-form-field-label {\n font-size: 12px;\n font-weight: 600;\n line-height: 16px;\n color: var(--xendit-color-text-secondary);\n}\n.xendit-instructions-form-field-value {\n font-size: 14px;\n line-height: 20px;\n color: var(--xendit-color-text);\n}\n.xendit-instructions-form-heading {\n font-size: 14px;\n font-weight: 600;\n line-height: 20px;\n margin: 4px 0;\n}\n.xendit-instructions-italics {\n font-style: italic;\n}\n.xendit-instructions-numbered-list {\n display: flex;\n flex-direction: column;\n gap: 16px;\n list-style-type: decimal;\n padding-left: 40px;\n}\n.xendit-instructions-single-tab-heading {\n font-size: 14px;\n font-weight: 600;\n line-height: 20px;\n margin-bottom: 16px;\n}\n.xendit-instructions-step-box {\n display: flex;\n flex-direction: column;\n gap: 8px;\n}\n.xendit-instructions-step-li {\n font-size: 14px;\n line-height: 20px;\n}\n.xendit-instructions-step-li p {\n margin: 0;\n}\n.xendit-instructions-step-li::marker {\n margin-left: 20px;\n}\n.xendit-instructions-tab-button {\n font-family: var(--xendit-font-family);\n font-size: 14px;\n padding: 8px 4px;\n background-color: transparent;\n border: none;\n border-top: 3px solid transparent;\n border-bottom: 3px solid transparent;\n}\n.xendit-instructions-active-tab {\n border-bottom-color: var(--xendit-color-primary);\n color: var(--xendit-color-primary);\n font-weight: 600;\n}\n.xendit-instructions-tab-list {\n display: flex;\n gap: 16px;\n margin-bottom: 16px;\n border-bottom: 1px solid var(--xendit-color-border);\n}\n.xendit-instructions-table {\n font-size: 14px;\n line-height: 16px;\n width: 100%;\n border-collapse: collapse;\n}\n.xendit-instructions-table-cell {\n padding: 4px;\n border: 1px solid black;\n}\n.xendit-instructions-table-header {\n font-size: 14px;\n font-weight: 600;\n line-height: 16px;\n padding: 4px;\n border: 1px solid black;\n}\n\n/* Instructions ends */\n\n.xendit-default-action-container {\n display: flex;\n flex-direction: column;\n border: none;\n}\n\n.xendit-action-title {\n font-weight: 600;\n font-size: 20px;\n line-height: 28px;\n text-align: center;\n}\n\n.xendit-action-iframe {\n border: none;\n width: 100%;\n height: 100%;\n}\n\n.xendit-action-present-to-customer {\n display: flex;\n flex-direction: column;\n gap: 16px;\n}\n.xendit-action-present-to-customer-affirm {\n display: flex;\n flex-direction: column;\n gap: 8px;\n}\n.xendit-action-qr-content {\n display: flex;\n flex-direction: column;\n align-items: center;\n gap: 16px;\n max-width: 384px;\n border: 1px solid var(--xendit-color-border);\n border-radius: var(--xendit-radius-1);\n padding: 16px;\n padding-bottom: 24px;\n}\n.xendit-action-qr-channel-logo {\n height: 64px;\n object-fit: contain;\n}\n.xendit-action-qr-qrcode-container {\n width: 100%;\n}\n\n/* va actions */\n.xendit-action-va-content {\n display: flex;\n flex-direction: column;\n border: 1px solid var(--xendit-color-border);\n border-radius: var(--xendit-radius-1);\n padding: 16px;\n padding-bottom: 24px;\n}\n.xendit-action-va-details {\n display: flex;\n flex-direction: column;\n gap: 16px;\n}\n.xendit-action-va-detail-item {\n display: flex;\n align-items: center;\n gap: 12px;\n}\n.xendit-action-va-detail-content {\n flex: 1;\n display: flex;\n flex-direction: column;\n gap: 4px;\n}\n.xendit-action-va-heading {\n color: var(--xendit-color-text-placeholder);\n}\n.xendit-action-va-tag {\n color: var(--xendit-color-text-placeholder);\n background-color: #fafafa;\n padding: 2px 4px;\n border-radius: 4px;\n}\n\n/* redirect, deeplink, and push notification actions */\n.xendit-redirect-instructions {\n display: flex;\n flex-direction: column;\n align-items: center;\n text-align: center;\n gap: 24px;\n}\n\n.xendit-redirect-instructions-logo {\n display: flex;\n justify-content: center;\n align-items: center;\n width: 112px;\n height: 112px;\n border: 2px solid var(--xendit-color-border);\n border-radius: 50%;\n overflow: hidden;\n}\n\n.xendit-redirect-instructions-logo img {\n width: 96px;\n height: 96px;\n object-fit: contain;\n}\n\n.xendit-redirect-instructions-text {\n display: flex;\n flex-direction: column;\n gap: 8px;\n}\n\n.xendit-redirect-instructions-button {\n display: inline-block;\n border-radius: 99px;\n color: white;\n padding: 12px 16px;\n background-color: var(--xendit-channel-brand-color, #000);\n text-decoration: none;\n white-space: nowrap;\n}\n\n.xendit-redirect-instructions-button:hover,\n.xendit-redirect-instructions-button:active {\n filter: brightness(1.1);\n}\n\n/* googlepay */\n\n.gpay-card-info-container-fill {\n display: flex;\n}\n"],"names":["n","l","u","i","r","o","e","f","c","s","a","h","p","v","y","d","Array","isArray","w","g","parentNode","removeChild","_","t","arguments","length","children","call","defaultProps","m","type","props","key","ref","__k","__","__b","__e","__c","constructor","__v","__i","__u","vnode","k","x","this","context","S","C","__P","__d","z","__n","namespaceURI","V","M","base","some","$","push","I","__r","debounceRendering","sort","shift","P","b","String","T","E","A","D","H","nextSibling","insertBefore","nodeType","L","j","setProperty","test","F","style","cssText","replace","toLowerCase","slice","addEventListener","removeEventListener","removeAttribute","setAttribute","O","event","prototype","render","contextType","value","__E","G","sub","state","__h","_sb","__s","getDerivedStateFromProps","componentWillMount","componentDidMount","componentWillReceiveProps","shouldComponentUpdate","apply","componentWillUpdate","componentDidUpdate","getChildContext","getSnapshotBeforeUpdate","q","then","indexOf","N","B","diffed","map","localName","document","createTextNode","createElementNS","is","__m","data","childNodes","attributes","name","__html","innerHTML","content","current","unmount","componentWillUnmount","J","documentElement","firstChild","R","Set","forEach","add","delete","Provider","__l","Consumer","getDerivedStateFromError","setState","componentDidCatch","forceUpdate","Promise","bind","resolve","setTimeout","globalThis","window","__PREACT_DEVTOOLS__","attachPreact","Fragment","Component","displayName","__o","reduce","__source","fileName","lineNumber","console","warn","WeakMap","hasOwnProperty","Object","toString","JSON","stringify","filter","Boolean","error","join","pop","useEffect","useLayoutEffect","lazyPropTypes","Error","componentStack","propTypes","has","set","__f","keys","message","get","nodeName","create","__self","__proto__","__H","Icon","size","direction","svgTransform","_jsx","className","width","height","viewBox","fill","stroke","transform","iconData","find","icon","node","makeIcon","id","scale","_jsxs","_Fragment","strokeLinecap","strokeLinejoin","once","XenditInitEvent","Event","static","super","XenditFatalErrorEvent","XenditReadyEvent","channelCode","XenditNotReadyEvent","XenditSubmissionBeginEvent","XenditSubmissionEndEvent","reason","userErrorMessage","developerErrorMessage","XenditActionBeginEvent","XenditActionEndEvent","XenditWillRedirectEvent","XenditSessionCompleteEvent","XenditSessionExpiredOrCanceledEvent","XenditSessionPendingEvent","XenditSessionNotPendingEvent","XenditPaymentRequestCreatedEvent","paymentRequestId","XenditPaymentTokenCreatedEvent","paymentTokenId","XenditPaymentRequestDiscardedEvent","XenditPaymentTokenDiscardedEvent","internal","Symbol","Accordion","class","__N","every","requestAnimationFrame","clearTimeout","cancelAnimationFrame","hasOwn","classNames","classes","arg","appendClass","parseValue","includes","newClass","module","exports","default","AccordionItem","title","subtitle","disabled","open","onClick","chevronDirection","toggleOpen","useCallback","handleKeyPress","preventDefault","handleClick","onKeyDown","role","tabIndex","inert","SessionContext","createContext","BusinessContext","CustomerContext","ChannelsContext","ChannelUiGroupsContext","DigitalWalletsContext","SdkContext","CurrentChannelContext","useSession","useContext","useChannels","useDigitalWallets","useSdk","useCurrentChannel","XenditSessionProvider","sdk","session","business","customer","channels","digitalWallets","channelUiGroups","channel","getCurrentChannel","getSdkStatus","status","MOCK_NETWORK_DELAY_MS","assert","assertIsArray","assertIsNotArray","assertEquals","sleep","ms","AbortError","isAbortError","cancellableSleep","signal","reject","onAbort","timeoutId","aborted","findBestAction","actions","best","descriptor","userAgent","navigator","isAndroidOrIos","findPaylinkAction","options","enablePaylinks","MOCK_HOST_ID","hosts","pl","pd","sl","sd","hostFromHostId","hostId","mergeIgnoringUndefined","original","updates","result","undefined","usePrevious","useRef","formFieldName","field","channel_property","values","seed","Math","floor","random","formFieldId","obfuscatedId","split","charCodeAt","randomHexString","bytes","arr","Uint8Array","randomBytes","from","padStart","randomUUID","useIdSafe","canBeSimulated","action","errorToString","stack","removeUndefinedPropertiesFromObject","object","getOwnPropertyDescriptor","getValueFromChannelProperty","channelProperty","channelProperties","str","cursor","dotIndex","getCardNumberFromChannelProperties","cardNumber","parseEncryptedFieldValue","out","version","publicKey","iv","cipherText","valid","validationError","withoutValidationError","parts","parseInt","isNaN","atob","objectIdMap","objectIdCounter","resolvePairedChannel","savePaymentMethod","allow_save","satisfiesMinMax","session_type","amount","min","min_amount","max","max_amount","Number","MAX_VALUE","lockDownInteralProperty","obj","defineProperty","enumerable","writable","configurable","RELEASED_CHANNELS","CARDS","QRIS","QR_PH","PROMPTPAY","SGQR","formHasFieldOfType","form","ButtonVariant","ButtonSize","Button","variant","rest","buttonVariantClass","BARE","PRIMARY_ROUNDED","WHITE_ROUNDED","buttonSizeClass","SM","MD","ButtonLoadingSpinner","angle1","PI","radius","cos","sin","strokeWidth","Dropdown","_id","onChange","defaultIndex","selectedIndex","placeholder","generatedId","isControlled","internalIndex","setInternalIndex","useState","currentIndex","activeIndex","setActiveIndex","_open","setOpen","searchQuery","setSearchQuery","rootRef","btnRef","listRef","activeRef","searchInputRef","filteredOptions","useMemo","filtered","withIndex","item","opt","trim","query","description","clampedActive","onMouseDown","root","contains","target","onFocusOut","relatedTarget","body","scrollContainer","parentElement","scrollTop","offsetTop","clientHeight","openList","queueMicrotask","focus","closeList","onButtonClick","selectItemAndClose","index","onButtonKeyDown","onListKeyDown","isSearchInput","activeItem","originalIndex","onOptionClick","stopPropagation","currentTarget","dataset","onSearchTermChange","selected","leadingAsset","shortTitle","onInput","isSelected","isActive","DropdownSkeleton","bffSessionToPublic","bffSession","assertNotEquals","mode","payment_session_id","sessionType","referenceId","reference_id","country","currency","channel_properties","expiresAt","Date","expires_at","locale","items","netUnitAmount","net_unit_amount","quantity","url","imageUrl","image_url","category","subcategory","metadata","bffUiGroupToPublic","bffChannelGroup","channelsByGroupId","groupsByGroupId","marshalConfig","group","groupId","label","bffChannelToPublic","singleBffChannelToPublic","bffChannel","bffChannelsByGroupId","bffGroupsByGroupId","pairChannels","paired","channel_code","pairs","ch","brandName","brand_name","brandColor","brand_color","brandLogoUrl","brand_logo_url","uiGroup","ui_group","minAmount","maxAmount","cardBrands","card","brands","logoUrl","logo_url","makeGroupsByGroupId","bffChannelGroups","groupMap","bffGroup","channelFilterFn","filterMinMax","code","RegExp","channelCodeMatchesFilter","makeChannelsByGroupId","bffChannels","findChannelPairs","brandMap","Map","pair","other","ChannelPickerGroup","currentChannel","dropdownId","fakeDropdownSelection","setFakeDropdownSelection","containerRef","containerIsPopulated","setContainerIsPopulated","selectedChannelElementRef","pairChannelData","channelsInGroup","createChannelComponent","replaceChildren","previousOpen","setCurrentChannel","onSelectedChannelChange","dropdownOption","channelOptions","src","getChannelDisabledReason","htmlFor","groupName","ns","i1","findIndex","i2","dropdownSelectedIndex","display","ChannelPickerDigitalWalletSection","digitalWalletsGooglePay","google_pay","el","createDigitalWalletComponent","appendChild","remove","XenditChannelPicker","useChannelUiGroups","channelsByGroup","thisRef","selectedGroupId","previewGroupId","setPreviewGroupId","handleSelectChannelGroup","dispatchEvent","XenditClearCurrentChannelEvent","newGroup","enabledChannels","groupEnabledChannelStats","digitalWalletSectionEnabled","enableDigitalWallets","enabledChannelsStats","disabledReason","firstDisabledChannelReason","bubbles","composed","country_calling_codes","countries","AC","AD","AE","AF","AG","AI","AL","AM","AO","AR","AS","AT","AU","AW","AX","AZ","BA","BB","BD","BE","BF","BG","BH","BI","BJ","BL","BM","BN","BO","BQ","BR","BS","BT","BW","BY","BZ","CA","CC","CD","CF","CG","CH","CI","CK","CL","CM","CN","CO","CR","CU","CV","CW","CX","CY","CZ","DE","DJ","DK","DM","DO","DZ","EC","EE","EG","EH","ER","ES","ET","FI","FJ","FK","FM","FO","FR","GA","GB","GD","GE","GF","GG","GH","GI","GL","GM","GN","GP","GQ","GR","GT","GU","GW","GY","HK","HN","HR","HT","HU","ID","IE","IL","IM","IN","IO","IQ","IR","IS","IT","JE","JM","JO","JP","KE","KG","KH","KI","KM","KN","KP","KR","KW","KY","KZ","LA","LB","LC","LI","LK","LR","LS","LT","LU","LV","LY","MA","MC","ME","MF","MG","MH","MK","ML","MM","MN","MO","MP","MQ","MR","MS","MT","MU","MV","MW","MX","MY","MZ","NA","NC","NE","NF","NG","NI","NL","NO","NP","NR","NU","NZ","OM","PA","PE","PF","PG","PH","PK","PL","PM","PR","PS","PT","PW","PY","QA","RE","RO","RS","RU","RW","SA","SB","SC","SD","SE","SG","SH","SI","SJ","SK","SL","SN","SO","SR","SS","ST","SV","SX","SY","SZ","TA","TC","TD","TG","TH","TJ","TK","TL","TM","TN","TO","TR","TT","TV","TW","TZ","UA","UG","US","UY","UZ","VA","VC","VE","VG","VI","VN","VU","WF","WS","XK","YE","YT","ZA","ZM","ZW","nonGeographic","withMetadataArgument","func","_arguments","args","compare","pa","pb","na","nb","objectConstructor","isObject","_typeof","iterator","_classCallCheck","TypeError","_createClass","_toPropertyKey","_defineProperties","toPrimitive","_toPrimitive","DEFAULT_EXT_PREFIX","CALLING_CODE_REG_EXP","Metadata","validateMetadata","setVersion","countryCode","v1","v2","v3","nonGeographical","getCountryMetadata","callingCode","getCountryCodesForCallingCode","countryCodes","countryCallingCodes","selectNumberingPlan","hasCountry","concat","numberingPlan","NumberingPlan","hasCallingCode","getNumberingPlanMetadata","getCountryCodeForCallingCode","IDDPrefix","defaultIDDPrefix","nationalNumberPattern","possibleLengths","formats","nationalPrefixForParsing","nationalPrefixTransformRule","leadingDigits","hasTypes","_type","ext","country_phone_code_to_countries","globalMetadataObject","_this","_getFormats","getDefaultCountryMetadataForRegion","Format","_getNationalPrefixFormattingRule","_nationalPrefixForParsing","nationalPrefix","_getNationalPrefixIsOptionalWhenFormatting","types","_type2","getType","Type","format","_format","nationalPrefixFormattingRule","nationalPrefixIsOptionalWhenFormattingInNationalFormat","usesNationalPrefix","FIRST_GROUP_ONLY_PREFIX_PATTERN","typeOf","getCountryCallingCode","countryCallingCode","v4","checkNumberLength","nationalNumber","type_info","possible_lengths","actual_length","minimum_length","checkNumberLengthForType","isPossibleNumber","matchesEntirely","text","regularExpressionText","_createForOfIteratorHelperLoose","next","_arrayLikeToArray","_unsupportedIterableToArray","done","NON_FIXED_LINE_PHONE_TYPES","getNumberType","input","phone","isNumberTypeEqualTo","pattern","_step","_iterator","typeDefinition","getPossibleCountriesForNumber","possibleCountries","_metadata","couldNationalNumberBelongToCountry","VALID_DIGITS","VALID_PUNCTUATION","CAPTURING_DIGIT_PATTERN","getCountryByCallingCode","_ref","nationalPhoneNumber","search","getCountryByNationalNumber","extractNationalNumber","number","_extractNationalNumbe","prefixPattern","prefixMatch","exec","carrierCode","capturedGroupsCount","hasCapturedGroups","prefixBeforeNationalNumber","possiblePositionOfTheFirstCapturedGroup","extractNationalNumberFromPossiblyIncompleteNumber","nationalNumberBefore","nationalNumberAfter","shouldHaveExtractedNationalPrefix","isPossibleIncompleteNationalNumber","extractCountryCallingCode","defaultCountry","defaultCallingCode","isNumberWithIddPrefix","numberWithoutIDD","countryMetadata","IDDPrefixPattern","matchedGroups","match","stripIddPrefix","_extractCountryCallin","possibleShorterNumber","possibleShorterNationalNumber","extractCountryCallingCodeFromInternationalNumberWithoutPlusSign","shorterNumber","countryCallingCodeSource","_countryCallingCode","FIRST_GROUP_PATTERN","formatNationalNumberUsingFormat","useInternationalFormat","withNationalPrefix","formattedNumber","internationalFormat","applyInternationalSeparatorStyle","SINGLE_IDD_PREFIX_REG_EXP","getExtensionDigitsPattern","maxLength","createExtensionPattern","purpose","possibleSeparatorsBetweenNumberAndExtLabel","possibleCharsAfterExtLabel","optionalExtnSuffix","possibleSeparatorsNumberExtLabelNoComma","MIN_LENGTH_PHONE_NUMBER_PATTERN","VALID_PHONE_NUMBER","VALID_PHONE_NUMBER_START_REG_EXP","VALID_PHONE_NUMBER_WITH_EXTENSION","VALID_PHONE_NUMBER_PATTERN","DEFAULT_OPTIONS","formatExtension","extension","formatNumber","_len","objects","_key","merge","addExtension","formatNationalNumber","formatRFC3966","fromCountry","fromCountryCallingCode","iddPrefix","getIddPrefix","formatIDD","formatAs","availableFormats","elements","testFunction","pickFirstMatchingElement","leadingDigitsPatterns","lastLeadingDigitsPattern","ownKeys","getOwnPropertySymbols","_objectSpread","_defineProperty","getOwnPropertyDescriptors","defineProperties","PhoneNumber","countryOrCountryCallingCode","e164Number","E164_NUMBER_REGEXP","_getCountryAndCountry","metadataJson","isCountryCode","getCountryAndCountryCallingCode","getMetadata","isNonGeographicCallingCode","isValidNumber","phoneNumber","_callSuper","_getPrototypeOf","ReferenceError","_assertThisInitialized","_possibleConstructorReturn","_isNativeReflectConstruct","Reflect","construct","_wrapNativeSuper","Function","_isNativeFunction","Wrapper","_setPrototypeOf","_construct","valueOf","setPrototypeOf","getPrototypeOf","ParseError","_inherits","EXTN_PATTERN","DIGITS","parseIncompletePhoneNumber","string","parsePhoneNumberCharacter","character","prevParsedCharacters","eventListener","parseDigit","RFC3966_PHONE_DIGIT_","RFC3966_GLOBAL_NUMBER_DIGITS_PATTERN_","RFC3966_DOMAINNAME_PATTERN_","RFC3966_PREFIX_","RFC3966_PHONE_CONTEXT_","extractFormattedPhoneNumberFromPossibleRfc3966NumberUri","numberToParse","phoneNumberString","extractFormattedPhoneNumber","phoneContext","numberToExtractFrom","indexOfPhoneContext","phoneContextStart","phoneContextEnd","substring","extractPhoneContext","isPhoneContextValid","charAt","indexOfNationalNumber","indexOfRfc3966Prefix","indexOfIsdn","PHONE_NUMBER_START_PATTERN","AFTER_PHONE_NUMBER_END_PATTERN","parse","_parseInput","extract","throwOnError","startsAt","_extractFormattedPhoneNumber","isViablePhoneNumber","isViablePhoneNumberStart","withExtensionStripped","start","numberWithoutExtension","matches","extractExtension","parseInput","formattedPhoneNumber","_parsePhoneNumber","exactCountry","parsePhoneNumber","hasSelectedNumberingPlan","__countryCallingCodeSource","extended","possible","_slicedToArray","_arrayWithHoles","_iterableToArrayLimit","_nonIterableRest","normalizeArguments","_Array$prototype$slic2","arg_1","arg_2","arg_3","arg_4","isSupportedCountry","parsePhoneNumberWithError","_normalizeArguments","parsePhoneNumber_","getCountries","getExampleNumber","examples","_getCountryCallingCode","FlagIcon","borderRadius","backgroundImage","backgroundSize","backgroundPosition","CountryField","selectedCountry","setSelectedCountry","selectedCountryIndex","COUNTRIES_AS_DROPDOWN_OPTIONS","option","hiddenFieldRef","useOnCardCountryChange","newCountry","newOption","onChangeWrapper","defaultValue","_getCountries","Intl","DisplayNames","of","localeCompare","fn","cardDetails","useChannelComponentData","cardDetailsCountry","details","country_codes","previousCardDetailsCountry","DropdownField","isDropdownField","fieldOptions","HTMLElement","EventTarget","XenditFormAssociatedFocusTrap","internals","attachInternals","element","customElements","define","tag","InternalUpdateWorldState","InternalUpdateChannelComponentData","InternalSetFieldTouchedEvent","InternalBehaviorTreeUpdateEvent","InternalNeedsRerenderEvent","InternalScheduleMockUpdateEvent","mockData","IframeRegistryContext","IFRAME_ORIGIN","URL","origin","IframeRegistryProvider","iframeRegistry","iframeRegistryValue","registerIframe","fieldName","unregisterIframe","postMessageToIframe","iframe","contentWindow","postMessage","parsedIframeUrl","IFRAME_SRC","IframeField","iframeRef","iframeEcdhPublicKey","setIframeEcdhPublicKey","focusWithin","setFocusWithin","cardBrand","setCardBrand","useChannel","handleEventFromIframe","expectedSource","source","ecdhPublicKey","encrypted","encryptionVersion","resultData","enc","empty","validationErrorCodes","btoa","localeKey","giveFocusToIframe","registry","iframeUrl","searchParams","location","sdkKey","signature","iframeFieldAppearance","onFocus","sandbox","CardBrands","cardsBrandList","selectedCardBrand","cardBrandLogo","alt","PhoneNumberField","setCountryCode","countryCodeIndex","COUNTRIES_WITH_DIAL_CODES_AS_DROPDOWN_OPTIONS","localNumber","setLocalNumber","inputRef","formatPhoneNumber","sanitizePhoneNumber","dial","updateHiddenField","handleCountryChange","nextCountry","inputMode","_getExampleNumber","formatInternational","onBlur","international","formatForUser","nextLocal","autoComplete","parsed","parsePhoneNumberFromString","isPossible","toTitleValuePair","nameValue","PROVINCES_US","PROVINCES_CA","PROVINCES_GB","province","ProvinceField","allFields","useChannelProperties","clearValue","onChangeDropdown","onChangeInput","getProvinceList","thisField","otherField","previousField","getBestCountryForProvinceField","previousOptions","TextField","minLength","isTextField","min_length","max_length","autocomplete","CURRENCY_NUMBER_FORMAT_LOCALE","IDR","VND","BRL","RUB","CZK","RON","UAH","CLP","COP","UYU","ARS","INR","NPR","LKR","BDT","CURRENCY_SYMBOLS","USD","CAD","EUR","AFN","ALL","AMD","AUD","AZN","BAM","BIF","BND","BOB","BWP","BYN","BZD","CDF","CHF","CNY","CRC","CVE","DJF","DKK","DOP","ERN","ETB","GBP","GEL","GHS","GNF","GTQ","HKD","HNL","HUF","ILS","IRR","ISK","JMD","JPY","KES","KHR","KMF","KRW","KZT","MDL","MGA","MKD","MMK","MOP","MUR","MXN","MYR","MZN","NAD","NGN","NIO","NOK","NZD","PAB","PEN","PHP","PKR","PLN","PYG","RSD","RWF","SDG","SEK","SGD","SOS","THB","TOP","TRY","TTD","TWD","TZS","UGX","UZS","XAF","XOF","ZAR","ZMW","ZWL","CURRENCY_SYMBOL_POSITION","CURRENCY_SYMBOL_DECIMALS","BHD","JOD","KWD","LYD","OMR","TND","amountFormat","isNegative","decimals","NumberFormat","minimumFractionDigits","maximumFractionDigits","abs","symbol","FieldInstallmentPlan","hasCardsField","paymentOptions","installmentPlans","installment_plans","selectedItemKey","setSelectedItemKey","dropdownItems","plan","installments","terms","installment_amount","interest_rate","planKey","unshift","selectedItemIndex","clearSelectedItem","handleChange","newPlan","interval","prevItems","Field","span","renderInner","localeMap","en","th","vi","getLocalizedErrorMessage","errorCode","isLocaleKey","sanitizeRegex","startsWith","endsWith","validate","required","validateEncryptedCardField","isValid","validatePhoneNumber","validateEmail","validatePostalCode","regex_validators","regex","validateText","channelPropertyFieldValidate","channelPropertyKeys","getChannelPropertyValue","FormSimulationHelperContext","FormSimulationHelper","scenarios","onSelect","FormSimulationRoot","FormSimulationTrigger","FormSimulationHelperPopover","selectedScenario","scenario","docsLink","href","rel","CSS_CLASSES","FieldGroup","fieldGroup","groupIndex","handleFieldChanged","simulationScenarios","groupContainerRef","touchedFields","setTouchedFields","fieldGroupSpans","groupRowCount","ceil","agg","containerElement","listener","prev","err","renderError","group_label","FormSimulationHelperWrapper","position","fieldPositionBySpan","fieldRow","fieldColumn","isLastRow","calculateFieldPosition","CSS_CLASSES_BOTTOM_LEFT_0","CSS_CLASSES_BOTTOM_RIGHT_0","CSS_CLASSES_TOP_LEFT_0","CSS_CLASSES_TOP_RIGHT_0","CSS_CLASSES_COLLAPSE_RIGHT","CSS_CLASSES_COLLAPSE_LEFT","CSS_CLASSES_COLLAPSE_TOP","CSS_CLASSES_COLLAPSE_BOTTOM","getFieldClassNames","scenarioName","entries","isPureReactComponent","for","U","W","__a","__z","__R","__O","createElement","fallback","revealOrder","reverse","K","Q","X","isReactComponent","rn","un","cancelBubble","on","defaultPrevented","persist","isPropagationStopped","isDefaultPrevented","nativeEvent","cn","multiple","$$typeof","an","sn","CARDS_SCENARIOS","ChannelForm","forwardRef","onChannelPropertiesChanged","channelComponentData","formRef","setChannelProperties","useImperativeHandle","setAllFieldsTouched","HTMLInputElement","getChannelProperties","iter","rawValue","Blob","subkeys","valueAsArray","formValueToStringArray","outer","subkey","part","nextValue","formKvToChannelProperties","FormData","filteredForm","filterFormFields","useFilteredFormFields","previousFilteredForm","formsAreEqual","getSimulationScenarios","filteredFieldGroups","fields","fieldGroups","groupFields","ChannelPropertiesContext","_e","showBillingDetailsFields","require_billing_information","hasInstallmentPlans","flags","condition","display_if","property","operator","channelValue","InstructionsIcon","arrowRef","arrowSquareGroupRef","supportsAnimation","animate","arrowKeyFrames","arrowAnimationOptions","arrowSquareBounceKeyFrames","arrowSquareBounceAnimationOptions","xmlns","opacity","transformOrigin","duration","easing","iterations","Infinity","delay","QrScanIcon","scannerRef","squareBackgroundRef","clipPathId","startAnimation","scannerKeyFrames","scanDownAnimationOptions","squareKeyFrames","squareAnimationOptions","onfinish","scanUpAnimationOptions","rx","Checkbox","checked","htmlId","points","ChannelContext","ChannelComponentDataContext","PaymentChannel","channelOrPair","channelData","divRef","firstMemberChannel","hasPairedChannel","resolvedChannel","instructions","instructionsAsTuple","shouldShowSaveCheckbox","allow_save_payment_method","cleanedProperties","installment_configuration","cleanedInstallmentConfiguration","fromEntries","XenditChannelPropertiesChangedEvent","banner","Banner","pm_type","instr","aspectRatio","aspect_ratio","link_url","alt_text","NetworkError","errorResponse","convertDataToUrlSearchParams","params","URLSearchParams","append","endpoint","method","getPath","getQuery","async","pathArg","queryArg","requestBody","abortSignal","versionNumber","host","headers","response","fetch","ok","errorData","json","error_code","fetchSessionData","sessionAuthKey","createPaymentToken","createPaymentRequest","simulatePaymentRequest","pollSession","tokenRequestId","token_request_id","lookupCardDetails","getPaymentOptions","behaviorNode","impl","child","instance","BehaviorTree","bb","updating","again","update","updateCount","assertMaxRecursionDepth","updateTree","findBehavior","depth","isChanged","exitSubtree","enterSubtree","enter","exit","ActionIframe","mock","onIframeComplete","srcDoc","MOCK_IFRAME_SRCDOC","canPromise","toSJISFunction","CODEWORDS_COUNT","utils","getSymbolSize","getSymbolTotalCodewords","getBCHDigit","digit","setToSJISFunction","isKanjiModeEnabled","toSJIS","kanji","bit","level","fromString","ECLevel","require$$0","EC_BLOCKS_TABLE","EC_CODEWORDS_TABLE","errorCorrectionCode","getBlocksCount","errorCorrectionLevel","getTotalCodewordsCount","EXP_TABLE","LOG_TABLE","galoisField","log","exp","mul","p1","p2","coeff","mod","divident","divisor","offset","generateECPolynomial","degree","poly","versionCheck","numeric","byte","KANJI","BYTE_KANJI","BYTE","NUMERIC","ALPHANUMERIC","TEST_KANJI","TEST_NUMERIC","TEST_ALPHANUMERIC","testKanji","testNumeric","testAlphanumeric","VersionCheck","Regex","require$$1","ccBits","MIXED","getCharCountIndicator","getBestModeForData","dataStr","Utils","ECCode","require$$2","Mode","require$$3","require$$4","G18_BCH","getReservedBitsCount","getTotalBitsFromDataArray","segments","totalBits","reservedBits","getBitsLength","getCapacity","dataTotalCodewordsBits","usableBits","getBestVersionForData","seg","ecl","currentVersion","getBestVersionForMixedData","getBestVersionForDataLength","getLength","getEncodedBits","dijkstra","single_source_shortest_paths","graph","predecessors","costs","closest","cost_of_s_to_u","adjacent_nodes","cost_of_s_to_u_plus_cost_of_e","cost_of_s_to_v","PriorityQueue","make","cost","msg","extract_shortest_path_from_predecessor_list","nodes","find_path","opts","queue","sorter","default_sorter","NumericData","write","bitBuffer","substr","put","remainingNum","numericData","AlphanumericData","ALPHA_NUM_CHARS","alphanumericData","ByteData","TextEncoder","encode","byteData","KanjiData","kanjiData","require$$5","require$$6","require$$7","getStringByteLength","unescape","encodeURIComponent","getSegments","getSegmentsFromString","numSegs","alphaNumSegs","byteSegs","kanjiSegs","s1","s2","getSegmentBitsLength","buildSingleSegment","modesHint","bestMode","fromArray","array","acc","segs","buildNodes","table","prevNodeIds","nodeGroup","currentNodeIds","lastCount","prevNodeId","end","buildGraph","path","optimizedSegs","curr","prevSeg","mergeSegments","rawSplit","BitBuffer","buffer","bufIndex","num","putBit","getLengthInBits","BitMatrix","reservedBit","row","col","reserved","xor","isReserved","bitMatrix","AlignmentPattern","getRowColCoords","posCount","intervals","positions","getPositions","coords","pos","posLength","FinderPattern","finderPattern","MaskPattern","Patterns","PATTERN000","PATTERN001","PATTERN010","PATTERN011","PATTERN100","PATTERN101","PATTERN110","PATTERN111","PenaltyScores","getMaskAt","maskPattern","mask","getPenaltyN1","sameCountCol","sameCountRow","lastCol","lastRow","getPenaltyN2","last","getPenaltyN3","bitsCol","bitsRow","getPenaltyN4","darkCount","modulesCount","applyMask","getBestMask","setupFormatFunc","numPatterns","bestPattern","lowerPenalty","penalty","ReedSolomonEncoder","Polynomial","genPoly","initialize","paddedData","remainder","buff","reedSolomonEncoder","require$$8","Version","require$$9","FormatInfo","G15_BCH","formatInfo","require$$10","require$$11","Segments","require$$12","setupFormatInfo","matrix","bits","createData","remainingByte","totalCodewords","ecTotalCodewords","dataTotalCodewords","ecTotalBlocks","blocksInGroup2","blocksInGroup1","totalCodewordsInGroup1","dataCodewordsInGroup1","dataCodewordsInGroup2","ecCount","rs","dcData","ecData","maxDataSize","dataSize","createCodewords","createSymbol","estimatedVersion","rawSegments","bestVersion","dataBits","moduleCount","modules","setupFinderPattern","setupTimingPattern","setupAlignmentPattern","setupVersionInfo","inc","bitIndex","byteIndex","dark","setupData","qrcode","toSJISFunc","hex2rgba","hex","hexCode","hexValue","getOptions","color","margin","light","rendererOpts","getScale","qrSize","getImageWidth","qrToImageData","imgData","qr","symbolSize","scaledMargin","palette","posDst","pxColor","qrData","canvas","canvasEl","getContext","getCanvasElement","ctx","image","createImageData","clearRect","clearCanvas","putImageData","renderToDataURL","toDataURL","quality","getColorAttrib","attrib","alpha","toFixed","svgCmd","cmd","svgTag","cb","qrcodesize","bg","moveBy","newRow","lineLength","qrToPath","QRCode","CanvasRenderer","SvgRenderer","renderCanvas","renderFunc","argsNum","isLastArgCb","browser","toCanvas","ActionQr","businessName","channelLogo","onAffirm","qrString","showSpinner","setShowSpinner","onMadePaymentClicked","svgNode","svgText","qrSvgRenderer","DOMParser","parseFromString","backgroundPath","querySelector","foregroundPath","generateQrSvg","innerText","hideUi","Dialog","onClose","seamless","closeCalledRef","closeAnimationPlaying","dialogRef","backdropRef","onCloseSafe","onCloseWithAnimation","backdropFadeOutKeyframes","animationOptions","animation","foregroundFadeOutKeyframes","backdropFadeKeyframes","foregroundFadeKeyframes","close","backgroundColor","DefaultActionContainer","wrapperRef","component","createActionContainerComponent","destroyComponent","Instructions","SingleTabInstructions","instruction","MultiTabInstructions","InstructionsSteps","selectedTab","setSelectedTab","step","renderStep","renderFormattedStringChildren","renderedNodes","Node","TEXT_NODE","textContent","ELEMENT_NODE","renderFormattedStringElement","domParser","renderFormattedString","renderTextStep","renderImageStep","renderBulletsStep","heading","renderFormStep","header","rows","rowIndex","cell","cellIndex","renderTableStep","TooltipContext","fire","TooltipProvider","setText","timeout","Tooltip","ActionVa","vaNumber","merchantName","vaDetails","enableCopy","detail","CopyButton","clipboard","writeText","BffPaymentEntityType","toPaymentEntity","prOrPt","payment_request_id","PaymentRequest","entity","payment_token_id","PaymentToken","getPaymentEntityStatusCopyKey","entityType","suffix","makeTestPollResponse","world","paymentEntity","makeTestPollResponseForPending","paymentRequest","paymentToken","payment_request","withPaymentEntityStatus","payment_token","makeTestPollResponseForPendingPaymentEntityOnly","_mock_action_type","succeeded_channel","makeTestPollResponseForSuccess","makeTestPollResponseForFailure","makeTestPaymentRequest","mockActionType","session_token_request_id","makeMockActions","actionType","iframe_capable","action_title","action_subtitle","action_graphic","makeOneMockAction","RedirectInstructions","logoAlt","redirectUrl","redirectButtonLabel","ActionEmptyListPushNotification","channelName","ActionDeepLink","ContainerActionBehavior","cleanupFn","defaultContainerHeight","defaultContainerWidth","ensureHasActionContainer","liveComponents","actionContainer","emptyActionContainer","cleanedUp","success","container","abortSubmission","actionCancelledByUser","cleanupActionContainer","cancelledByUser","updateActionContainerBrandColor","populateActionContainer","createComponent","ActionCompletedBehavior","ActionRedirectBehavior","ActionIframeBehavior","mockResult","mockStatus","updateMocksOnIframeCompletion","actionCompleted","pollImmediatelyRequested","ActionQrBehavior","actionIndex","qrAction","actionQrProps","getAttribute","affirmPayment","isProdLive","simulatePaymentRequested","ActionDeepLinkBehavior","deepLinkAction","ActionEmptyListPushNotificationBehavior","hackyOvoActionLatch","ActionVaBehavior","vaAction","actionVaProps","ActionPaylinkBehavior","link","head","CardInfoBehavior","cardDetailsRequest","abortLookupCardDetails","abortController","abort","AbortController","promise","encodedError","schemes","cleanedCardNumber","card_number","catch","ChannelValidBehavior","lastChannelCode","sendReadyEventIfChanged","ChannelInvalidBehavior","PollWorker","sessionTokenRequestId","onPollResult","started","stopped","attempt","mult","tries","sleepTime","retryLoop","isMock","XenditComponentsTest","nextMockUpdate","_err","isPolling","stop","PePendingBehavior","pollWorker","pollResponse","succeededChannel","PeRequiresActionBehavior","canCreateActionContainer","resetPolling","polling","PeFailedBehavior","submissionRequested","PaymentOptionsBehavior","paymentOptionsRequest","lookupPaymentOptions","abortLookupPaymentOptions","interval_count","total_amount","makeMockPaymentOptions","getPaymentOptionsAsync","SdkLoadingBehavior","SdkActiveBehavior","SdkFatalErrorBehavior","sdkFatalErrorMessage","discardPaymentEntity","SessionActiveBehavior","SessionCompletedBehavior","SessionFailedBehavior","SessionPendingBehavior","SimulatePaymentBehavior","exited","simulationRequest","simulatePayment","abortSimulation","simulatePaymentAsync","SubmissionBehavior","submission","submissionError","submit","defaultUserErrorMessage","failureCode","subtext","getFailureCodeCopyKey","failureCodeUserErrorMessage","failure_code","instantSubmissionError","shouldSendSavePaymentMethod","makeTestPaymentToken","session_id","save_payment_method","asyncSubmit","error_content","message_1","message_2","behaviorTreeForSdk","sdkStatus","maybePaylinkAction","paylinkAction","behaviorTreeForPaylink","behaviorTreeForAction","behaviorTreeForPaymentEntity","behaviorTreeForSubmission","channelIsDigitalWallet","channelPropertiesValid","channelPropertiesAreValid","validityBehavior","cardInfoBehavior","paymentOptionsBehavior","behaviorTreeForForm","behaviorTreeForSession","hasPaylink","simulateBehavior","redirectCanBeHandledInIframe","DigitalWalletGooglepay","onReady","useBusiness","didCallReady","paymentsClient","googlePayChannels","allowed_payment_methods","payment_method_specification","googlePayConfig","apiVersion","apiVersionMinor","allowedPaymentMethods","emailRequired","merchantInfo","merchantId","merchant_id","transactionInfo","transactionId","totalPriceStatus","totalPrice","currencyCode","buttonConfigWithDefaults","buttonColor","buttonType","buttonRadius","buttonSizeMode","buttonBorderType","PaymentsClient","google","payments","api","environment","loadPaymentData","paymentData","targetChannel","allChannels","getActiveChannels","googlePayChannel","paymentMethodData","findChannel","findTargetChannel","submitDigitalWallet","statusCode","localeKeyForGooglePayError","firstGooglePayChannel","isReadyToPay","button","createButton","buttonLocale","targetChannelCode","DigitalWalletWaitForLoad","scriptTagRegex","checkLoaded","forceRender","targetScript","scripts","script","DigitalWalletContainer","digitalWalletCode","digitalWalletOptions","sdkStatusCheckers","GOOGLE_PAY","XenditComponents","componentsSdkKey","parseSdkKey","worldState","channelPicker","paymentChannels","digitalWalletContainer","behaviorTree","currentChannelCode","currentDigitalWalletSubmission","eventListenersPresent","fatalErrorEvent","behaviorTreeUpdate","onUpdateWorldState","onUpdateChannelComponentData","hasScheduledRender","rerenderAllComponents","syncInertAttribute","initializeAsync","bff","channel_ui_groups","digital_wallets","assertInitialized","localeData","template","varName","createTFunction","newData","renderChannelPicker","renderPaymentChannel","renderDigitalWalletComponent","getSession","getCustomer","bffCustomer","individual_detail","email","mobileNumber","mobile_number","individualDetail","givenNames","given_names","surname","getActiveChannelGroups","bffUiGroupsToPublic","bffChannelsToPublic","createChannelPickerComponent","setupUiEventsForChannelPicker","_event","active","cachedComponent","channelFormRef","setupUiEventsForPaymentChannel","channelObject","getActiveDigitalWallets","bffDigitalWallets","bffDigitalWalletsToPublic","prevComponent","hasSubmissionInProgress","channelComponents","hasAttribute","showValidationErrors","optionsOrInternal","isInternal","requiresActionBehavior","qrCode","qrCodeOnly","tagName","pollImmediately","getState","setNextMockUpdate","import","makeTestBffData","styleElement","firstStyleOrLinkElement","insertAdjacentElement","createStyles","iconSet","createIconSet"],"mappings":"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AAC,MAAM,GAAK,CAAC,MAAM,GAAK,CAAC,MAAM,GAAK,CAAC,MAAM,GAAK,CAAC,MAAM,GAAK,CAAC,KAAK,KAAK,MAAM,GAAK,CAAC,MAAM,GAAK,CAAC,MAAM,GAAK,CAAC,MAAM,GAAK,CAAC,MAAM,GAAK,CAAC,MAAM,GAAK,CAAC,MAAM,GAAK,CAAC,MAAM,GAAK,CAAC,MAAM,GAAK,CAAC,MAAM,GAAK,CAAC,MAAM,GAAK,CAAC,MAAM,GAAK,CAAC,MAAM,GAAK,CAAC,MAAM,GAAK,CAAC,MAAM,GAAK,CAAC,MAAM,GAAK,CAAC,MAAM,IAAM,CAAC,MAAM,IAAM,CAAC,KAAK,MAAM,IAAM,CAAC,MAAM,IAAM,CAAC,MAAM,IAAM,CAAC,MAAM,IAAM,CAAC,MAAM,IAAM,CAAC,MAAM,IAAM,CAAC,MAAM,IAAM,CAAC,MAAM,IAAM,CAAC,MAAM,IAAM,CAAC,MAAM,IAAM,CAAC,MAAM,IAAM,CAAC,MAAM,IAAM,CAAC,MAAM,IAAM,CAAC,MAAM,IAAM,CAAC,MAAM,IAAM,CAAC,MAAM,IAAM,CAAC,MAAM,IAAM,CAAC,MAAM,IAAM,CAAC,MAAM,IAAM,CAAC,MAAM,IAAM,CAAC,MAAM,IAAM,CAAC,MAAM,IAAM,CAAC,MAAM,IAAM,CAAC,MAAM,IAAM,CAAC,MAAM,IAAM,CAAC,MAAM,IAAM,CAAC,MAAM,IAAM,CAAC,MAAM,IAAM,CAAC,MAAM,IAAM,CAAC,MAAM,IAAM,CAAC,MAAM,IAAM,CAAC,MAAM,IAAM,CAAC,MAAM,IAAM,CAAC,MAAM,IAAM,CAAC,MAAM,IAAM,CAAC,MAAM,IAAM,CAAC,MAAM,IAAM,CAAC,MAAM,IAAM,CAAC,MAAM,IAAM,CAAC,MAAM,IAAM,CAAC,MAAM,IAAM,CAAC,MAAM,IAAM,CAAC,MAAM,IAAM,CAAC,MAAM,IAAM,CAAC,MAAM,IAAM,CAAC,KAAK,MAAM,IAAM,CAAC,MAAM,IAAM,CAAC,MAAM,IAAM,CAAC,MAAM,IAAM,CAAC,MAAM,IAAM,CAAC,MAAM,IAAM,CAAC,MAAM,IAAM,CAAC,MAAM,IAAM,CAAC,KAAK,MAAM,IAAM,CAAC,MAAM,IAAM,CAAC,MAAM,IAAM,CAAC,MAAM,IAAM,CAAC,MAAM,IAAM,CAAC,MAAM,IAAM,CAAC,MAAM,IAAM,CAAC,MAAM,IAAM,CAAC,MAAM,IAAM,CAAC,MAAM,IAAM,CAAC,MAAM,IAAM,CAAC,MAAM,IAAM,CAAC,MAAM,IAAM,CAAC,KAAK,MAAM,IAAM,CAAC,MAAM,IAAM,CAAC,MAAM,IAAM,CAAC,MAAM,IAAM,CAAC,MAAM,IAAM,CAAC,MAAM,IAAM,CAAC,MAAM,IAAM,CAAC,MAAM,IAAM,CAAC,MAAM,IAAM,CAAC,MAAM,IAAM,CAAC,MAAM,IAAM,CAAC,MAAM,IAAM,CAAC,MAAM,IAAM,CAAC,MAAM,IAAM,CAAC,MAAM,IAAM,CAAC,MAAM,IAAM,CAAC,MAAM,IAAM,CAAC,MAAM,IAAM,CAAC,MAAM,IAAM,CAAC,MAAM,IAAM,CAAC,MAAM,IAAM,CAAC,MAAM,IAAM,CAAC,MAAM,IAAM,CAAC,MAAM,IAAM,CAAC,MAAM,IAAM,CAAC,MAAM,IAAM,CAAC,MAAM,IAAM,CAAC,MAAM,IAAM,CAAC,MAAM,IAAM,CAAC,MAAM,IAAM,CAAC,MAAM,IAAM,CAAC,MAAM,IAAM,CAAC,KAAK,KAAK,MAAM,IAAM,CAAC,MAAM,IAAM,CAAC,MAAM,IAAM,CAAC,MAAM,IAAM,CAAC,MAAM,IAAM,CAAC,MAAM,IAAM,CAAC,MAAM,IAAM,CAAC,MAAM,IAAM,CAAC,MAAM,IAAM,CAAC,KAAK,MAAM,IAAM,CAAC,MAAM,IAAM,CAAC,MAAM,IAAM,CAAC,MAAM,IAAM,CAAC,MAAM,IAAM,CAAC,MAAM,IAAM,CAAC,MAAM,IAAM,CAAC,MAAM,IAAM,CAAC,MAAM,IAAM,CAAC,MAAM,IAAM,CAAC,MAAM,IAAM,CAAC,MAAM,IAAM,CAAC,MAAM,IAAM,CAAC,MAAM,IAAM,CAAC,MAAM,IAAM,CAAC,MAAM,IAAM,CAAC,MAAM,IAAM,CAAC,MAAM,IAAM,CAAC,MAAM,IAAM,CAAC,MAAM,IAAM,CAAC,MAAM,IAAM,CAAC,MAAM,IAAM,CAAC,MAAM,IAAM,CAAC,MAAM,IAAM,CAAC,MAAM,IAAM,CAAC,MAAM,IAAM,CAAC,MAAM,IAAM,C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A,EAAOE,aAAqBF,EAEnC,MEtKT,SAASG,GAAiBC,GAIxB,MAAO,CACLxhC,MAAOwhC,EAAUnqC,KACjBlC,MAAOqsC,EAAUrsC,MAErB,CAGO,MAAMssC,GAAiC,CAC5C,CACEpqC,KAAM,UACNlC,MAAO,MAET,CACEkC,KAAM,SACNlC,MAAO,MAET,CACEkC,KAAM,iBACNlC,MAAO,MAET,CACEkC,KAAM,UACNlC,MAAO,MAET,CACEkC,KAAM,WACNlC,MAAO,MAET,CACEkC,KAAM,aACNlC,MAAO,MAET,CACEkC,KAAM,WACNlC,MAAO,MAET,CACEkC,KAAM,cACNlC,MAAO,MAET,CACEkC,KAAM,WACNlC,MAAO,MAET,CACEkC,KAAM,uBACNlC,MAAO,MAET,CACEkC,KAAM,iCACNlC,MAAO,MAET,CACEkC,KAAM,UACNlC,MAAO,MAET,CACEkC,KAAM,UACNlC,MAAO,MAET,CACEkC,KAAM,OACNlC,MAAO,MAET,CACEkC,KAAM,SACNlC,MAAO,MAET,CACEkC,KAAM,QACNlC,MAAO,MAET,CACEkC,KAAM,WACNlC,MAAO,MAET,CACEkC,KAAM,UACNlC,MAAO,MAET,CACEkC,KAAM,OACNlC,MAAO,MAET,CACEkC,KAAM,SACNlC,MAAO,MAET,CACEkC,KAAM,WACNlC,MAAO,MAET,CACEkC,KAAM,YACNlC,MAAO,MAET,CACEkC,KAAM,QACNlC,MAAO,MAET,CACEkC,KAAM,mBACNlC,MAAO,MAET,CACEkC,KAAM,WACNlC,MAAO,MAET,CACEkC,KAAM,gBACNlC,MAAO,MAET,CACEkC,KAAM,WACNlC,MAAO,MAET,CACEkC,KAAM,YACNlC,MAAO,MAET,CACEkC,KAAM,cACNlC,MAAO,MAET,CACEkC,KAAM,WACNlC,MAAO,MAET,CACEkC,KAAM,UACNlC,MAAO,MAET,CACEkC,KAAM,WACNlC,MAAO,MAET,CACEkC,KAAM,SACNlC,MAAO,MAET,CACEkC,KAAM,gBACNlC,MAAO,MAET,CACEkC,KAAM,aACNlC,MAAO,MAET,CACEkC,KAAM,aACNlC,MAAO,MAET,CACEkC,KAAM,WACNlC,MAAO,MAET,CACEkC,KAAM,iBACNlC,MAAO,MAET,CACEkC,KAAM,eACNlC,MAAO,MAET,CACEkC,KAAM,2BACNlC,MAAO,MAET,CACEkC,KAAM,OACNlC,MAAO,MAET,CACEkC,KAAM,WACNlC,MAAO,MAET,CACEkC,KAAM,SACNlC,MAAO,MAET,CACEkC,KAAM,QACNlC,MAAO,MAET,CACEkC,KAAM,eACNlC,MAAO,MAET,CACEkC,KAAM,cACNlC,MAAO,MAET,CACEkC,KAAM,eACNlC,MAAO,MAET,CACEkC,KAAM,iBACNlC,MAAO,MAET,CACEkC,KAAM,eACNlC,MAAO,MAET,CACEkC,KAAM,YACNlC,MAAO,MAET,CACEkC,KAAM,QACNlC,MAAO,MAET,CACEkC,KAAM,OACNlC,MAAO,MAET,CACEkC,KAAM,UACNlC,MAAO,MAET,CACEkC,KAAM,iBACNlC,MAAO,MAET,CACEkC,KAAM,WACNlC,MAAO,MAET,CACEkC,KAAM,aACNlC,MAAO,MAET,CACEkC,KAAM,gBACNlC,MAAO,MAET,CACEkC,KAAM,YACNlC,MAAO,MAET,CACEkC,KAAM,UACNlC,MAAO,OAETwB,IAAI4qC,IAGOG,GAAiC,CAC5C,CACErqC,KAAM,UACNlC,MAAO,MAET,CACEkC,KAAM,mBACNlC,MAAO,MAET,CACEkC,KAAM,WACNlC,MAAO,MAET,CACEkC,KAAM,gBACNlC,MAAO,MAET,CACEkC,KAAM,4BACNlC,MAAO,MAET,CACEkC,KAAM,wBACNlC,MAAO,MAET,CACEkC,KAAM,cACNlC,MAAO,MAET,CACEkC,KAAM,UACNlC,MAAO,MAET,CACEkC,KAAM,UACNlC,MAAO,MAET,CACEkC,KAAM,uBACNlC,MAAO,MAET,CACEkC,KAAM,SACNlC,MAAO,MAET,CACEkC,KAAM,eACNlC,MAAO,MAET,CACEkC,KAAM,kBACNlC,MAAO,OAETwB,IAAI4qC,IAEOI,GAAiC,CAC5C,CAAEtqC,KAAM,QACR,CAAEA,KAAM,gBACR,CAAEA,KAAM,aACR,CAAEA,KAAM,mBACR,CAAEA,KAAM,kBACR,CAAEA,KAAM,YACR,CAAEA,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","x_google_ignoreList":[0,1,2,3,9,10,20,21,22,23,24,25,26,27,28,29,30,31,32,33,34,35,36,37,38,39,40,41,42,43,44,45,46,47,48,49,50,51,52,53,54,55,56,57,58,59,60,61,63,70,72,84,95,96,97,98,99,100,101,102,103,104,105,106,107,108,109,110,111,112,113,114,115,116,117,118,119,120,121,122]}