@primer-io/checkout-web 2.48.0 → 2.49.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
package/dist/Primer.js CHANGED
@@ -1,2 +1,2 @@
1
- (function(U,R){typeof exports=="object"&&typeof module=="object"?module.exports=R():typeof define=="function"&&define.amd?define([],R):typeof exports=="object"?exports.Primer=R():U.Primer=R()})(this,()=>(()=>{var y={189:()=>{},367:()=>{},56:()=>{}},U={};function R(D){var O=U[D];if(O!==void 0)return O.exports;var d=U[D]={exports:{}};return y[D](d,d.exports,R),d.exports}R.d=(D,O)=>{for(var d in O)R.o(O,d)&&!R.o(D,d)&&Object.defineProperty(D,d,{enumerable:!0,get:O[d]})},R.o=(D,O)=>Object.prototype.hasOwnProperty.call(D,O),R.r=D=>{typeof Symbol<"u"&&Symbol.toStringTag&&Object.defineProperty(D,Symbol.toStringTag,{value:"Module"}),Object.defineProperty(D,"__esModule",{value:!0})};var v={};return(()=>{"use strict";R.r(v),R.d(v,{CheckoutUXFlow:()=>Vr,ErrorCode:()=>Qr,EventTypes:()=>qr,HeadlessManagerType:()=>Jr,PaymentFlow:()=>Wr,PaymentInstrumentType:()=>jr,PaymentMethodData:()=>it.PaymentMethodData,PaymentMethodType:()=>q,Primer:()=>Et,SuccessScreenType:()=>Zr,ThreeDSecureStatus:()=>$r,TokenType:()=>Xr,isStripeOptionsDropInWithFullMandateText:()=>At});let O={[{API_VERSION_2_4:"api-version-2.4"}.API_VERSION_2_4]:!1};function d(r){O={...O,...r??{}}}function yr(r){return O[r]??!1}function st(){return O}class f extends Error{constructor(e,t=!1){super(e),this.isReported=t,this.name=this.constructor.name,Error.captureStackTrace&&Error.captureStackTrace(this,this.constructor)}static from(e,t=!1){if(e instanceof f)return e;const o=e instanceof Error?e.message:String(e),E=new f(o,t);return e instanceof Error&&e.stack&&(E.stack=e.stack,Object.assign(E,e)),E}markAsReported(){this.isReported=!0}}const rr="https://analytics.production.data.primer.io/sdk-logs";var ct=R(189),at=R(367),x=(r=>(r.REQUEST_START="REQUEST_START",r.REQUEST_END="REQUEST_END",r))(x||{}),b=(r=>(r.START="START",r.END="END",r))(b||{});const H={createHeadless:"HEADLESS_LOADING",showExpressCheckout:"EXPRESS_LOADING",showUniversalCheckout:"DROP_IN_LOADING",showVaultManager:"VAULT_MANAGER_LOADING",preloadPrimer:"PRELOAD_PRIMER_LOADING"};var l=(r=>(r.NETWORK_CALL_EVENT="NETWORK_CALL_EVENT",r.CRASH_EVENT="CRASH_EVENT",r.TIMER_EVENT="TIMER_EVENT",r.MESSAGE_EVENT="MESSAGE_EVENT",r.V1_EVENT="V1_EVENT",r.SDK_FUNCTION_EVENT="SDK_FUNCTION_EVENT",r))(l||{});const re={get(r,e){let t;try{switch(r){case"PRIMER_SDK_VERSION":t="v2.48.0";break;case"PRIMER_ASSETS_URL":t=process.env.PRIMER_ASSETS_URL;break;case"PRIMER_CORE_API_URL":t=process.env.PRIMER_CORE_API_URL;break;case"PRIMER_BUILD_INTEGRATION_BUILDER":t=process.env.PRIMER_BUILD_INTEGRATION_BUILDER;break;default:break}}catch{}return t||e}};var ee=(r=>(r.CHARGING="CHARGING",r.NOT_CHARGING="NOT_CHARGING",r))(ee||{});async function te(){if(typeof navigator>"u"||typeof performance>"u")return;const r=await navigator.getBattery?.();return{memoryFootprint:performance.memory?.usedJSHeapSize,screen:{height:screen?.height,width:screen?.width},userAgent:navigator.userAgent,locale:navigator.language,batteryLevel:r?.level,batteryStatus:r?.charging?"CHARGING":"NOT_CHARGING"}}const oe="WEB",ie=re.get("PRIMER_SDK_VERSION");async function er(r,e,t){return{...t,createdAt:Date.now(),device:await te(),eventType:r,properties:e,sdkVersion:ie,sdkType:oe}}const tr=Symbol.for("__primerAnalytics__");let C={providers:new Map,timers:new Map,eventsQueue:new Map};if(typeof window<"u"){const r=window[tr];r?C=r:window[tr]=C}const or=()=>C.providers,F=()=>C.timers,Y=()=>C.eventsQueue,ir=500,g=new Map,Ar=64e3,Ae=5;function G(r,e=!1,t=1){if(g.has(r)){const i=g.get(r);clearTimeout(i),g.delete(r)}const o=()=>{const i=Y().get(r);if(i?.length){let A=!0,_=[],s=0,n=0;for(;n<i.length;){const c=i[n],L=JSON.stringify(c),N=new Blob([L]).size;if(N>Ar){console.error("Event size exceeds maximum payload size and will be skipped:",c),n++;continue}if(s+N>Ar&&_.length>0){try{A=navigator.sendBeacon(r,JSON.stringify(_))}catch(T){A=!1,console.error("Unable to send events",T)}if(!A)break;_=[],s=0}_.push(c),s+=N,n++}if(_.length>0&&A)try{A=navigator.sendBeacon(r,JSON.stringify(_))}catch(c){A=!1,console.error("Unable to send events",c)}if(A)Y().delete(r);else if(t<Ae){const c=ir*Math.pow(2,t);setTimeout(()=>G(r,e,t+1),c)}else console.error("Max retry attempts reached. Events will not be sent.")}};if(e){o();return}const E=setTimeout(o,ir);g.set(r,E)}function Ee(r,e){Y().has(r)||Y().set(r,[]),Y().get(r)?.push(e),G(r)}const Er=1024*5;function _r(r,e,t=new WeakSet,o=0,E=10){if(o>E||t.has(r))return r;t.add(r);const i=A=>typeof A=="object"&&A!==null?_r(A,e,t,o+1,E):e(A);return Array.isArray(r)?r.map(i):Object.fromEntries(Object.entries(r).map(([A,_])=>[A,i(_)]))}function _e(r){return typeof r=="string"&&r.length>Er?`${r.slice(0,Er)}...`:r}function ne(r){return typeof r=="function"?r.name||"function":r}let nr=!1;function m({url:r=rr,...e}){typeof document<"u"&&!nr&&(document.addEventListener("visibilitychange",()=>{document.visibilityState==="hidden"&&G(r,!0)}),nr=!0);const t=E=>async i=>{if(typeof navigator>"u")return;const A=await er(E,i,e),s=_r(A,n=>_e(ne(n)));Ee(r,s)},o={crashEvent:t(l.CRASH_EVENT),messageEvent:t(l.MESSAGE_EVENT),networkCallEvent:t(l.NETWORK_CALL_EVENT),sdkFunctionEvent:t(l.SDK_FUNCTION_EVENT),timerStart:({id:E,...i})=>{const A=`${e.checkoutSessionId}|${E}`,_=performance?.now?performance.now():Date.now();return F().set(A,{start:_}),t(l.TIMER_EVENT)({...i,id:E,timerType:b.START})},timerEnd:({id:E,...i})=>{const A=`${e.checkoutSessionId}|${E}`,{start:_=void 0}=F().get(A)??{};F().delete(A);const s=performance?.now?performance.now():Date.now(),n=_?s-_:void 0;return t(l.TIMER_EVENT)({...i,id:E,timerType:b.END,duration:n})},v1Event:t(l.V1_EVENT),url:r};return or().set(e.checkoutSessionId,o),I(e.checkoutSessionId)}function I(r){return new Proxy({},{get(e,t){return(or().get(r)??m({checkoutSessionId:r}))[t]}})}const K=(r,e,t,o)=>({callType:t?x.REQUEST_END:x.REQUEST_START,id:r,errorBody:t?.error&&JSON.stringify(t.error,Object.getOwnPropertyNames(t.error)),method:e.method,responseCode:t?.status,url:e.url,duration:o});function se(r){return r?new Promise(e=>{setTimeout(e,r)}):Promise.resolve()}const ce=8,ae=100,Re=100;function Ne(r){return{enabled:r?.enabled??!1,maxRetries:ce,initialBackoff:ae,retryNetworkErrors:!0,retry500Errors:!1,maxJitter:Re}}function Oe(r,e,t){const o=r*Math.pow(2,e-1),E=Math.random()*t;return Math.min(o+E,Number.MAX_SAFE_INTEGER)}async function sr(r,e,t,o=se){let E=0;const i=Ne(e);if(!i.enabled)return r();for(;;)try{const A=await r();if(E){let _=`Request succeeded after ${E} retries.`;typeof A=="object"&&A&&"status"in A&&(_+=` Status code: ${A.status}`),t?.({messageType:"RETRY_SUCCESS",message:_,severity:"INFO"})}return A}catch(A){const _=A,s=E>=i.maxRetries,n=_.isNetworkError&&!i.retryNetworkErrors,c=_.status&&_.status>=500&&!i.retry500Errors;if(s||n||c){let T=`Failed after ${E} retries. `;throw s?T+=`Reached maximum retries (${i.maxRetries}).`:n?T+="Network error encountered and retryNetworkErrors is disabled.":c&&(T+="HTTP 500 error encountered and retry500Errors is disabled."),T+=` Last error: ${_.message}`,t?.({messageType:"RETRY_FAILED",message:T,severity:"ERROR",errorBody:JSON.stringify(A,Object.getOwnPropertyNames(A))}),new Error(T,{cause:A})}E++;const L=Oe(i.initialBackoff,E,i.maxJitter);let N="Unknown error";_.isNetworkError?N="Network error":_.status&&(N=`HTTP ${_.status} error`),t?.({messageType:"RETRY",message:`Retry attempt ${E}/${i.maxRetries} due to: ${N}. Error details: ${_.message}. Waiting for ${L.toFixed(2)}ms before next attempt.`,severity:"WARN",errorBody:JSON.stringify(A,Object.getOwnPropertyNames(A))}),await o(L)}}let V={cache:new Map};typeof window<"u"&&(window.__primerCache__??(window.__primerCache__=V),V=window.__primerCache__);const u=()=>V.cache,cr=1e3*60*60,ue=30,ar=50;function Rr(){if(u().size<=ue)return;const r=Date.now();for(const[e,t]of u())t.exp<r&&u().delete(e);if(u().size>ar)for(const[e]of u()){if(u().size<=ar)break;u().delete(e)}}function Te({key:r,ttl:e=cr},t){e?u().set(r,{promise:Promise.resolve({...t,source:"CACHE"}),exp:Date.now()+e}):u().delete(r)}function De(r){if(!r)return i=>i();const{key:e,refresh:t=!1,usePrimerSessionCacheTtlHeader:o=!1,ttl:E=cr}=r;return async i=>{const A=Date.now(),_=u().get(e);if(!t&&_&&_.exp>A)return _.promise;_&&u().delete(e);const s=i().then(n=>{let c=E;return o&&(c=(Number(n.headers.get("x-primer-session-cache-ttl"))||0)*1e3),Te({key:e,ttl:c},n),Rr(),n},n=>{throw u().delete(e),n});return u().set(e,{promise:s,exp:A+E}),Rr(),s}}const W=()=>Nr.randomUUID?.()||de(),de=()=>("10000000-1000-4000-8000"+-1e11).replace(/[018]/g,r=>(r^fe()>>r/4).toString(16)),fe=()=>(Nr.getRandomValues?.(new Uint8Array(1))[0]??Math.random()*16)&15,Nr=typeof crypto<"u"?crypto:{},Or=15e3,le=(r,e,t)=>ur(r,"get",e,t),Le=(r,e,t,o)=>ur(r,"post",e,o,JSON.stringify(t)),ur=async(r,e,t,o,E)=>{const i=W(),A=performance?.now();let _=I(r);const s={method:e,url:t,body:E};_.networkCallEvent(K(i,s));try{const n=await fetch(t,{body:E,method:e,headers:{"content-type":"application/json","x-request-id":i,...o}});if(!n.ok){const T=new Error(`HTTP error! status: ${n.status}`);throw T.status=n.status,T}const c=await n.json();if(t.includes("client-sdk/configuration")){const{primerAccountId:T,clientSession:{clientSessionId:_t,customer:nt}}=c;_=m({checkoutSessionId:r,clientSessionId:_t,customerId:nt?.customerId,primerAccountId:T,url:_.url})}const N=performance?.now()-A;return _.networkCallEvent(K(i,s,{data:c},N)),{data:c,headers:n.headers,status:n.status,source:"NETWORK"}}catch(n){const L=performance?.now()-A;throw Object.assign(n,{isNetworkError:n instanceof TypeError}),_.networkCallEvent(K(i,s,{error:n},L)),n}},Tr=(r,e)=>new Promise((t,o)=>{const E=setTimeout(()=>{const i=new Error("Request timed out");i.isNetworkError=!0,o(i)},e);r.then(t).catch(o).finally(()=>clearTimeout(E))}),Se=(r,e)=>{const{headers:t,retryConfig:o,cacheConfig:E,timeout:i=Or,checkoutSessionId:A}=e,_=I(A);return De(E)(()=>sr(()=>Tr(le(A,r,t),i),o,s=>_.messageEvent({...s,url:r})))},Rt=(r,e,t)=>{const{headers:o,retryConfig:E,cacheConfig:i,timeout:A=Or,checkoutSessionId:_}=t,s=getAnalytics(_);return cacheRequest(i)(()=>retryWithExponentialBackoff(()=>Tr(Le(_,r,e,o),A),E,n=>s.messageEvent({...n,url:r})))},Dr="3.7.7",Pe=Dr,S=typeof Buffer=="function",dr=typeof TextDecoder=="function"?new TextDecoder:void 0,fr=typeof TextEncoder=="function"?new TextEncoder:void 0,h=Array.prototype.slice.call("ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/="),k=(r=>{let e={};return r.forEach((t,o)=>e[t]=o),e})(h),Ce=/^(?:[A-Za-z\d+\/]{4})*?(?:[A-Za-z\d+\/]{2}(?:==)?|[A-Za-z\d+\/]{3}=?)?$/,a=String.fromCharCode.bind(String),lr=typeof Uint8Array.from=="function"?Uint8Array.from.bind(Uint8Array):r=>new Uint8Array(Array.prototype.slice.call(r,0)),Lr=r=>r.replace(/=/g,"").replace(/[+\/]/g,e=>e=="+"?"-":"_"),Sr=r=>r.replace(/[^A-Za-z0-9\+\/]/g,""),Pr=r=>{let e,t,o,E,i="";const A=r.length%3;for(let _=0;_<r.length;){if((t=r.charCodeAt(_++))>255||(o=r.charCodeAt(_++))>255||(E=r.charCodeAt(_++))>255)throw new TypeError("invalid character found");e=t<<16|o<<8|E,i+=h[e>>18&63]+h[e>>12&63]+h[e>>6&63]+h[e&63]}return A?i.slice(0,A-3)+"===".substring(A):i},$=typeof btoa=="function"?r=>btoa(r):S?r=>Buffer.from(r,"binary").toString("base64"):Pr,j=S?r=>Buffer.from(r).toString("base64"):r=>{let t=[];for(let o=0,E=r.length;o<E;o+=4096)t.push(a.apply(null,r.subarray(o,o+4096)));return $(t.join(""))},w=(r,e=!1)=>e?Lr(j(r)):j(r),Ye=r=>{if(r.length<2){var e=r.charCodeAt(0);return e<128?r:e<2048?a(192|e>>>6)+a(128|e&63):a(224|e>>>12&15)+a(128|e>>>6&63)+a(128|e&63)}else{var e=65536+(r.charCodeAt(0)-55296)*1024+(r.charCodeAt(1)-56320);return a(240|e>>>18&7)+a(128|e>>>12&63)+a(128|e>>>6&63)+a(128|e&63)}},Ie=/[\uD800-\uDBFF][\uDC00-\uDFFFF]|[^\x00-\x7F]/g,Cr=r=>r.replace(Ie,Ye),Yr=S?r=>Buffer.from(r,"utf8").toString("base64"):fr?r=>j(fr.encode(r)):r=>$(Cr(r)),P=(r,e=!1)=>e?Lr(Yr(r)):Yr(r),Ir=r=>P(r,!0),he=/[\xC0-\xDF][\x80-\xBF]|[\xE0-\xEF][\x80-\xBF]{2}|[\xF0-\xF7][\x80-\xBF]{3}/g,Me=r=>{switch(r.length){case 4:var e=(7&r.charCodeAt(0))<<18|(63&r.charCodeAt(1))<<12|(63&r.charCodeAt(2))<<6|63&r.charCodeAt(3),t=e-65536;return a((t>>>10)+55296)+a((t&1023)+56320);case 3:return a((15&r.charCodeAt(0))<<12|(63&r.charCodeAt(1))<<6|63&r.charCodeAt(2));default:return a((31&r.charCodeAt(0))<<6|63&r.charCodeAt(1))}},hr=r=>r.replace(he,Me),Mr=r=>{if(r=r.replace(/\s+/g,""),!Ce.test(r))throw new TypeError("malformed base64.");r+="==".slice(2-(r.length&3));let e,t="",o,E;for(let i=0;i<r.length;)e=k[r.charAt(i++)]<<18|k[r.charAt(i++)]<<12|(o=k[r.charAt(i++)])<<6|(E=k[r.charAt(i++)]),t+=o===64?a(e>>16&255):E===64?a(e>>16&255,e>>8&255):a(e>>16&255,e>>8&255,e&255);return t},X=typeof atob=="function"?r=>atob(Sr(r)):S?r=>Buffer.from(r,"base64").toString("binary"):Mr,Ur=S?r=>lr(Buffer.from(r,"base64")):r=>lr(X(r).split("").map(e=>e.charCodeAt(0))),gr=r=>Ur(kr(r)),Ue=S?r=>Buffer.from(r,"base64").toString("utf8"):dr?r=>dr.decode(Ur(r)):r=>hr(X(r)),kr=r=>Sr(r.replace(/[-_]/g,e=>e=="-"?"+":"/")),z=r=>Ue(kr(r)),ge=r=>{if(typeof r!="string")return!1;const e=r.replace(/\s+/g,"").replace(/={0,2}$/,"");return!/[^\s0-9a-zA-Z\+/]/.test(e)||!/[^\s0-9a-zA-Z\-_]/.test(e)},wr=r=>({value:r,enumerable:!1,writable:!0,configurable:!0}),Br=function(){const r=(e,t)=>Object.defineProperty(String.prototype,e,wr(t));r("fromBase64",function(){return z(this)}),r("toBase64",function(e){return P(this,e)}),r("toBase64URI",function(){return P(this,!0)}),r("toBase64URL",function(){return P(this,!0)}),r("toUint8Array",function(){return gr(this)})},pr=function(){const r=(e,t)=>Object.defineProperty(Uint8Array.prototype,e,wr(t));r("toBase64",function(e){return w(this,e)}),r("toBase64URI",function(){return w(this,!0)}),r("toBase64URL",function(){return w(this,!0)})},vr={version:Dr,VERSION:Pe,atob:X,atobPolyfill:Mr,btoa:$,btoaPolyfill:Pr,fromBase64:z,toBase64:P,encode:P,encodeURI:Ir,encodeURL:Ir,utob:Cr,btou:hr,decode:z,isValid:ge,fromUint8Array:w,toUint8Array:gr,extendString:Br,extendUint8Array:pr,extendBuiltins:()=>{Br(),pr()}},ke={encode:we,decode:vr.decode};function we(r,e={}){const{urlSafe:t=!1}=e;return vr.encode(r,t)}function Be(r){const e=xe(r),t=e.exp*1e3;if(Date.now()>t)throw new Error(`${pe}. Expiration date: ${new Date(t).toISOString()}`);return e}const xr="The provided `clientToken`",pe=`${xr} has expired`,ve=`${xr} is malformed`;function xe(r){try{const[e,t]=r.split("."),o=t||e;return JSON.parse(ke.decode(o))}catch{throw new Error(ve)}}const be="v2.48.0",He=(r,e,t)=>({"primer-client-token":r,"primer-sdk-client":"WEB","primer-sdk-version":be,"primer-sdk-checkout-session-id":e,...t&&{"x-api-version":t}});async function Fe(r,e,t){const{accessToken:o,configurationUrl:E,analyticsUrlV2:i}=Be(r),A=m({checkoutSessionId:e,url:i}),_=yr("api-version-2.4");A.timerStart({id:"CONFIGURATION_LOADING"});try{const{data:s,source:n}=await Se(`${E}/?withDisplayMetadata=true`,{checkoutSessionId:e,headers:He(o,e,_?"2.4":"2.3"),retryConfig:{enabled:!0},cacheConfig:t});return A.timerEnd({id:"CONFIGURATION_LOADING",context:{source:n}}),s}catch(s){const n=s instanceof Error?s.message:"Unknown error occurred";throw new Error(`Failed to initialize client: ${n}`)}}function br(r){return r instanceof Error?{errorBody:r.message,stacktrace:r.stack}:typeof r=="object"&&r!==null&&"message"in r?{errorBody:String(r.message),stacktrace:"stack"in r?String(r.stack):void 0}:{errorBody:String(r||"Unknown error")}}function B({checkoutSessionId:r,analytics:e,error:t,reporter:o}){e?.crashEvent?e.crashEvent({...br(t),reporter:o}):r&&Q(r,t,o)}async function Q(r,e,t){const o=rr,E=await er(l.CRASH_EVENT,{...br(e),reporter:t},{checkoutSessionId:r});try{await fetch(o,{method:"POST",headers:{"Content-Type":"application/json"},body:JSON.stringify(E)})}catch(i){console.error("Failed to post crash event",i)}}const Hr=Symbol.for("initGlobalErrorMonitoringLoaded"),Fr=(r,e)=>{typeof window<"u"&&window[Hr]||(window[Hr]=!0,window.addEventListener("error",t=>{Ge(t)||me(t)&&B({checkoutSessionId:r,analytics:e,error:t.error,reporter:"window.onerror"})}),window.addEventListener("unhandledrejection",t=>{const o=t.reason||new Error("Unhandled promise rejection");Ke(o)&&B({checkoutSessionId:r,analytics:e,error:o,reporter:"unhandledrejection"})}))},Ge=r=>r.message==="Script error."||!r.filename||r.lineno===0,me=r=>{const e=r.filename;return!!(e&&Z(e)&&new f(r.error).isReported)},Ke=r=>{if(r&&typeof r=="object"&&"stack"in r&&typeof r.stack=="string"){const e=f.from(r);if(e.isReported)return!1;if("fileName"in r&&typeof r.fileName=="string"){const o=r.fileName;if(Z(o))return!0}return Ve(e.stack).some(Z)}return!1},Z=r=>{try{return new URL(r,window.location.origin).hostname.endsWith(".primer.io")}catch{return!1}},Ve=r=>{if(!r)return[];const e=r.split(`
2
- `),t=[],o=/^\s*at\s+(?:.*?\s+)?\(?(.+?):\d+:\d+\)?$/;for(const E of e){const i=E.match(o);if(i&&i[1])t.push(i[1]);else{const A=/@(.*?):\d+:\d+$/,_=E.match(A);_&&_[1]&&t.push(_[1])}}return t};function We(r,e){const t=document.createElement(r);return Object.entries(e).forEach(([o,E])=>t.setAttribute(o,E)),t}function Gr(r,e,t){return document.querySelector(`${r}[${e}^="${t}"]`)}async function mr(r,e,t,o,E,i){const{analytics:A,name:_=e,retryConfig:s}=i;await sr(()=>new Promise((c,L)=>{const N=Gr(r,t,e)||We(r,{...o,[t]:e});N.onload=()=>{A?.sdkFunctionEvent({name:_,params:[`${r.charAt(0).toUpperCase()+r.slice(1)} loaded successfully: ${e}`]}),c()},N.onerror=()=>{N.remove(),L(new Error(`${E}: ${e}`))},N.parentNode||document.head.appendChild(N)}),s,c=>A?.messageEvent({...c,url:e}))}function $e(r,e={}){return Gr("script","src",r)&&window.__Primer?(e.analytics?.sdkFunctionEvent({name:e.name??r,params:["Script already loaded"]}),Promise.resolve()):mr("script",r,"src",{...e.attributes,async:"",crossorigin:"anonymous"},"Can't load Primer SDK",e)}function je(r,e={}){return Array.from(document.styleSheets).some(t=>t.href===r)?(e.analytics?.sdkFunctionEvent({name:e.name??r,params:["Stylesheet already loaded"]}),Promise.resolve()):mr("link",r,"href",{...e.attributes,rel:"stylesheet"},"Can't load Primer SDK's Stylesheet",e)}let M;async function Kr(r){return M||(M=Promise.all([$e("https://sdk.primer.io/web/v2.48.0/PrimerCoreSDK.min.js",{analytics:r,name:"loadPrimerScript"}),je("https://sdk.primer.io/web/v2.48.0/Checkout.css",{analytics:r,name:"loadPrimerCss"})]).then(()=>{const o=window.__Primer;return delete window.__Primer,o}).catch(o=>{throw M=void 0,o}),M)}const Xe=async()=>{const r=W();try{const e=I(r);try{Fr(r,e),e.sdkFunctionEvent({name:"preloadPrimer"}),e.timerStart({id:H.preloadPrimer}),await Kr(e),e.timerEnd({id:H.preloadPrimer})}catch(t){const o=f.from(t);throw o.isReported||(B({checkoutSessionId:r,analytics:e,error:o,reporter:"preloadPrimer level 1"}),o.markAsReported()),o}}catch(e){const t=f.from(e);throw t.isReported||(Q(r,t,"preloadPrimer level 0"),t.markAsReported()),t}},ze="v2.48.0",Qe=p("createHeadless"),Ze=p("showExpressCheckout"),qe=p("showUniversalCheckout"),Je=p("showVaultManager");function p(r){return async(...[e,t,...o])=>{d(t?.experimental);const E=W();try{const i=I(E);try{Fr(E,i),i.sdkFunctionEvent({name:r,params:[e,t,...o]}),i.timerStart({id:H[r]});const[A,_]=await Promise.all([Fe(e,E,t?.clientSessionCachingEnabled?{key:e,usePrimerSessionCacheTtlHeader:!0}:void 0),Kr(i)]);return _[r](A,E,e,t,...o)}catch(A){const _=f.from(A);throw _.isReported||(B({checkoutSessionId:E,analytics:i,error:_,reporter:"lazyLoad level 1"}),_.markAsReported()),_}}catch(i){const A=f.from(i);throw A.isReported||(Q(E,A,"lazyLoad level 0"),A.markAsReported()),A}}}var ye=(r=>(r.LOADING="Loading",r.NO_PAYMENT_METHOD="NoPaymentMethod",r.THREE_DS="UniversalCheckout/3ds",r.CHOOSE_PAYMENT_METHOD="UniversalCheckout/Home",r.MANAGE_PAYMENT_METHODS="VaultManager/Home",r.DIRECT_DEBIT_FORM="DirectDebit/Form",r.DIRECT_DEBIT_MANDATE="DirectDebit/Mandate",r.CREDIT_CARD_FORM="CreditCard/Form",r.SUCCESS_PAYMENT_METHOD="UniversalCheckout/Success/PaymentMethod",r.SUCCESS_CHECK="UniversalCheckout/Success/Check",r))(ye||{}),rt=(r=>(r.ROOT="primer-checkout",r.ROOT_CONTENT="primer-checkout-content",r.SUBMIT_BUTTON="primer-checkout-submit-button",r.THREE_DS_MODAL="primer-checkout-3ds-modal",r.VAULT="primer-checkout-vault",r.VAULT_INLINE="primer-checkout-vault-inline",r.NAVIGATE_PAYMENT_METHODS="primer-checkout-navigate-to-payment-methods",r.DIVIDER="primer-checkout-payment-method-divider",r.APM_BUTTONS="primer-checkout-apm-button-container",r.CARDHOLDER_NAME="primer-checkout-cardholder-name",r.CARDHOLDER_NAME_INPUT="primer-checkout-card-cardholder-name-input",r.ACTIONS="primer-checkout-actions",r.ACTIONS_MENU="primer-checkout-actions-menu",r.SAVE_PAYMENT_METHOD_CHECKBOX="primer-checkout-save-payment-method-input",r.SAVE_PAYMENT_METHOD_FIELD="primer-checkout-save-payment-method-field",r.SAVED_PAYMENT_METHODS_EMPTY="primer-checkout-saved-payment-methods-empty-text",r.CARD_FORM="primer-checkout-card-form",r.DD_SWITCH="primer-checkout-switch-dd-inputs",r.DD_IBAN_FIELD="primer-checkout-dd-iban-field",r.DD_LOCAL_FIELD="primer-checkout-dd-local-fields",r.DD_CUSTOMER_NAME_INPUT="primer-checkout-dd-customer-name-input",r.DD_CUSTOMER_EMAIL_INPUT="primer-checkout-dd-customer-email-input",r.DD_CUSTOMER_ADDRESS_LINE1="primer-checkout-dd-customer-address-input",r.DD_CUSTOMER_ADDRESS_LINE2="primer-checkout-dd-customer-address-line2-input",r.DD_CUSTOMER_ADDRESS_CITY="primer-checkout-dd-customer-city-input",r.DD_CUSTOMER_ADDRESS_POSTAL_CODE="primer-checkout-dd-customer-postal-code-input",r.DD_IBAN_INPUT="primer-checkout-dd-iban-input",r.DD_ACCOUNT_NUMBER_INPUT="primer-checkout-dd-account-number-input",r.DD_BANK_CODE_INPUT="primer-checkout-dd-bank-code-input",r.DD_BRANCH_CODE_INPUT="primer-checkout-dd-branch-code-input",r.DD_MANDATE_SMALL_PRINT="primer-checkout-small-print",r.ERROR_MESSAGE="primer-checkout-error-message",r))(rt||{}),et=(r=>(r.TOKEN="PrimerCheckout__token",r.HIDDEN="PrimerCheckout--hidden",r.FOCUSED="PrimerCheckout--focused",r.SELECTED="PrimerCheckout--selected",r.LOADING="PrimerCheckout--loading",r.ERROR="PrimerCheckout--error",r.CARD_TYPE="PrimerCheckout__cardType",r.SAVED_PAYMENT_METHOD="PrimerCheckout__savedPaymentMethod",r.SAVED_PAYMENT_METHOD_CONTAINER="PrimerCheckout__savedPaymentMethodContainer",r.APM_BUTTON="PrimerCheckout__apmButton",r.EDIT_BUTTON="PrimerCheckout__editButton",r.MENU="PrimerCheckout__dropDownMenu",r.MENU_ITEM="PrimerCheckout__dropDownMenuItem",r.PAYMENT_METHOD_MENU_ITEM="PrimerCheckout__paymentMethodDropDownMenuItem",r.DELETE_PAYMENT_METHOD_BUTTON="PrimerCheckout__paymentMethodDropDownMenuItem__deleteButton",r.ENTER="PrimerCheckout--enter",r.ENTERING="PrimerCheckout--entering",r.ENTERED="PrimerCheckout--entered",r.EXIT="PrimerCheckout--exit",r.EXITING="PrimerCheckout--exiting",r.EXITED="PrimerCheckout--exited",r))(et||{}),Vr=(r=>(r.CHECKOUT="CHECKOUT",r.EXPRESS_CHECKOUT="EXPRESS_CHECKOUT",r.HEADLESS_CHECKOUT="HEADLESS_CHECKOUT",r.MANAGE_PAYMENT_METHODS="MANAGE_PAYMENT_METHODS",r.SINGLE_PAYMENT_METHOD_CHECKOUT="SINGLE_PAYMENT_METHOD_CHECKOUT",r))(Vr||{}),Wr=(r=>(r.DEFAULT="DEFAULT",r.PREFER_VAULT="PREFER_VAULT",r))(Wr||{}),tt=(r=>(r.TOKENIZE_STARTED="tokenize-started",r.TOKENIZE_ERROR="tokenize-error",r.TOKENIZE_SUCCESS="tokenize-success",r.TOKENIZE_DID_NOT_START="tokenize-did-not-start",r))(tt||{}),$r=(r=>(r.SUCCESS="AUTH_SUCCESS",r.FAILED="AUTH_FAILED",r.SKIPPED="SKIPPED",r.CHALLENGE="CHALLENGE",r))($r||{}),jr=(r=>(r.WORLDPAY_IDEAL="WORLDPAY_IDEAL",r.AUTOMATED_CLEARING_HOUSE="AUTOMATED_CLEARING_HOUSE",r.ADYEN_KLARNA="ADYEN_KLARNA",r.ADYEN_BANCONTACT_CARD="ADYEN_BANCONTACT_CARD",r.PAY_NL_KAARTDIRECT="PAY_NL_KAARTDIRECT",r.ADYEN_EPS="ADYEN_EPS",r.ADYEN_BANCONTACT_PAYCONIQ="ADYEN_BANCONTACT_PAYCONIQ",r.OMISE_PROMPTPAY="OMISE_PROMPTPAY",r.OMISE_TRUEMONEY="OMISE_TRUEMONEY",r.ADYEN_MULTIBANCO="ADYEN_MULTIBANCO",r.PACYPAY_WECHAT="PACYPAY_WECHAT",r.PACYPAY_ALIPAY="PACYPAY_ALIPAY",r.ADYEN_MBWAY="ADYEN_MBWAY",r.XENDIT_DANA="XENDIT_DANA",r.XENDIT_SHOPEEPAY="XENDIT_SHOPEEPAY",r.ADYEN_PAYSHOP="ADYEN_PAYSHOP",r.ADYEN_PAYTRAIL="ADYEN_PAYTRAIL",r.CLEARPAY="CLEARPAY",r.RAPYD_FAST="RAPYD_FAST",r.RAPYD_PROMPTPAY="RAPYD_PROMPTPAY",r.RAPYD_GCASH="RAPYD_GCASH",r.RAPYD_POLI="RAPYD_POLI",r.RAPYD_GRABPAY="RAPYD_GRABPAY",r.PRIMER_PAYPAL="PRIMER_PAYPAL",r.TWOC2P="TWOC2P",r.NETS="NETS",r.STRIPE_ACH="STRIPE_ACH",r.STRIPE_GIROPAY="STRIPE_GIROPAY",r.MOLLIE_GIROPAY="MOLLIE_GIROPAY",r.MOLLIE_EPS="MOLLIE_EPS",r.PAY_NL_EPS="PAY_NL_EPS",r.PAY_NL_P24="PAY_NL_P24",r.MOLLIE_P24="MOLLIE_P24",r.MOLLIE_SOFORT="MOLLIE_SOFORT",r.COINBASE="COINBASE",r.OPENNODE="OPENNODE",r.MOLLIE_GIFT_CARD="MOLLIE_GIFTCARD",r.XFERS_PAYNOW="XFERS_PAYNOW",r.CARD="PAYMENT_CARD",r.APPLE_PAY="APPLE_PAY",r.GOOGLE_PAY="GOOGLE_PAY",r.PAYPAL="PAYPAL_ORDER",r.PAYPAL_VAULTED="PAYPAL_BILLING_AGREEMENT",r.GO_CARDLESS="GOCARDLESS",r.PAY_NL_IDEAL="PAY_NL_IDEAL",r.PAY_NL_SOFORT_BANKING="PAY_NL_SOFORT_BANKING",r.PAY_NL_BANCONTACT="PAY_NL_BANCONTACT",r.PAY_NL_PAYPAL="PAY_NL_PAYPAL",r.PAY_NL_CREDIT_TRANSFER="PAY_NL_CREDIT_TRANSFER",r.PAY_NL_DIRECT_DEBIT="PAY_NL_DIRECT_DEBIT",r.PAY_NL_GIROPAY="PAY_NL_GIROPAY",r.PAY_NL_PAYCONIQ="PAY_NL_PAYCONIQ",r.HOOLAH="HOOLAH",r.ADYEN_BLIK="ADYEN_BLIK",r.ADYEN_VIPPS="ADYEN_VIPPS",r.ADYEN_GIROPAY="ADYEN_GIROPAY",r.ADYEN_SOFORT="ADYEN_SOFORT",r.ADYEN_IDEAL="ADYEN_IDEAL",r.ADYEN_TRUSTLY="ADYEN_TRUSTLY",r.ADYEN_ALIPAY="ADYEN_ALIPAY",r.ADYEN_TWINT="ADYEN_TWINT",r.ADYEN_MOBILEPAY="ADYEN_MOBILEPAY",r.MOLLIE_BANCONTACT="MOLLIE_BANCONTACT",r.MOLLIE_IDEAL="MOLLIE_IDEAL",r.BUCKAROO_GIROPAY="BUCKAROO_GIROPAY",r.BUCKAROO_EPS="BUCKAROO_EPS",r.BUCKAROO_SOFORT="BUCKAROO_SOFORT",r.BUCKAROO_BANCONTACT="BUCKAROO_BANCONTACT",r.BUCKAROO_IDEAL="BUCKAROO_IDEAL",r.ATOME="ATOME",r.KLARNA_CUSTOMER_TOKEN="KLARNA_CUSTOMER_TOKEN",r))(jr||{}),q=(r=>(r.WORLDPAY_IDEAL="WORLDPAY_IDEAL",r.STRIPE_ACH="STRIPE_ACH",r.STRIPE_IDEAL="STRIPE_IDEAL",r.ADYEN_KLARNA="ADYEN_KLARNA",r.ADYEN_BANCONTACT_CARD="ADYEN_BANCONTACT_CARD",r.PAY_NL_KAARTDIRECT="PAY_NL_KAARTDIRECT",r.ADYEN_EPS="ADYEN_EPS",r.ADYEN_BANCONTACT_PAYCONIQ="ADYEN_BANCONTACT_PAYCONIQ",r.OMISE_PROMPTPAY="OMISE_PROMPTPAY",r.OMISE_TRUEMONEY="OMISE_TRUEMONEY",r.ADYEN_MULTIBANCO="ADYEN_MULTIBANCO",r.PACYPAY_WECHAT="PACYPAY_WECHAT",r.PACYPAY_ALIPAY="PACYPAY_ALIPAY",r.ADYEN_MBWAY="ADYEN_MBWAY",r.XENDIT_DANA="XENDIT_DANA",r.XENDIT_SHOPEEPAY="XENDIT_SHOPEEPAY",r.ADYEN_PAYSHOP="ADYEN_PAYSHOP",r.ADYEN_PAYTRAIL="ADYEN_PAYTRAIL",r.CLEARPAY="CLEARPAY",r.RAPYD_FAST="RAPYD_FAST",r.RAPYD_PROMPTPAY="RAPYD_PROMPTPAY",r.RAPYD_GCASH="RAPYD_GCASH",r.RAPYD_POLI="RAPYD_POLI",r.RAPYD_GRABPAY="RAPYD_GRABPAY",r.PRIMER_PAYPAL="PRIMER_PAYPAL",r.TWOC2P="TWOC2P",r.NETS="NETS",r.STRIPE_GIROPAY="STRIPE_GIROPAY",r.MOLLIE_GIROPAY="MOLLIE_GIROPAY",r.MOLLIE_EPS="MOLLIE_EPS",r.PAY_NL_EPS="PAY_NL_EPS",r.PAY_NL_P24="PAY_NL_P24",r.MOLLIE_P24="MOLLIE_P24",r.MOLLIE_SOFORT="MOLLIE_SOFORT",r.COINBASE="COINBASE",r.OPENNODE="OPENNODE",r.MOLLIE_GIFT_CARD="MOLLIE_GIFTCARD",r.XFERS_PAYNOW="XFERS_PAYNOW",r.PAYMENT_CARD="PAYMENT_CARD",r.APPLE_PAY="APPLE_PAY",r.GOOGLE_PAY="GOOGLE_PAY",r.PAYPAL="PAYPAL",r.GO_CARDLESS="GOCARDLESS",r.KLARNA="KLARNA",r.PAY_NL_IDEAL="PAY_NL_IDEAL",r.PAY_NL_SOFORT_BANKING="PAY_NL_SOFORT_BANKING",r.PAY_NL_BANCONTACT="PAY_NL_BANCONTACT",r.PAY_NL_PAYPAL="PAY_NL_PAYPAL",r.PAY_NL_CREDIT_TRANSFER="PAY_NL_CREDIT_TRANSFER",r.PAY_NL_DIRECT_DEBIT="PAY_NL_DIRECT_DEBIT",r.PAY_NL_GIROPAY="PAY_NL_GIROPAY",r.PAY_NL_PAYCONIQ="PAY_NL_PAYCONIQ",r.HOOLAH="HOOLAH",r.ADYEN_BLIK="ADYEN_BLIK",r.ADYEN_MOBILEPAY="ADYEN_MOBILEPAY",r.ADYEN_VIPPS="ADYEN_VIPPS",r.ADYEN_GIROPAY="ADYEN_GIROPAY",r.ADYEN_SOFORT="ADYEN_SOFORT",r.ADYEN_IDEAL="ADYEN_IDEAL",r.ADYEN_TRUSTLY="ADYEN_TRUSTLY",r.ADYEN_ALIPAY="ADYEN_ALIPAY",r.ADYEN_TWINT="ADYEN_TWINT",r.ADYEN_BANK_TRANSFER="ADYEN_BANK_TRANSFER",r.MOLLIE_BANCONTACT="MOLLIE_BANCONTACT",r.MOLLIE_IDEAL="MOLLIE_IDEAL",r.BUCKAROO_GIROPAY="BUCKAROO_GIROPAY",r.BUCKAROO_EPS="BUCKAROO_EPS",r.BUCKAROO_SOFORT="BUCKAROO_SOFORT",r.BUCKAROO_BANCONTACT="BUCKAROO_BANCONTACT",r.BUCKAROO_IDEAL="BUCKAROO_IDEAL",r.ATOME="ATOME",r))(q||{}),ot=(r=>(r.PAYMENT_CARD="PAYMENT_CARD",r.ADYEN_BANCONTACT_CARD="ADYEN_BANCONTACT_CARD",r))(ot||{}),Xr=(r=>(r.SINGLE_USE="SINGLE_USE",r.MULTI_USE="MULTI_USE",r))(Xr||{});const zr={PAYPAL_BILLING_AGREEMENT:"PAYPAL",KLARNA_CUSTOMER_TOKEN:"KLARNA",AUTOMATED_CLEARING_HOUSE:"STRIPE_ACH"},ut=r=>{if(Object.values(q).includes(r))return r;if(zr[r])return zr[r]};var Qr=(r=>(r.INITIALIZATION_ERROR="INITIALIZATION_ERROR",r.NO_PAYMENT_METHODS="NO_PAYMENT_METHODS",r.PRIMER_TEARDOWN="PRIMER_TEARDOWN",r.PRIMER_SERVER_ERROR="PRIMER_SERVER_ERROR",r.THREE_DS_AUTH_FAILED="THREE_DS_AUTH_FAILED",r.TOKENIZATION_ERROR="TOKENIZATION_ERROR",r.DUPLICATE_PAYMENT_METHOD_ERROR="DUPLICATE_PAYMENT_METHOD_ERROR",r.CARD_NUMBER_ERROR="CARD_NUMBER_ERROR",r.PAYMENT_METHOD_NOT_SETUP="PAYMENT_METHOD_NOT_SETUP",r.PAYMENT_METHOD_NOT_PROVIDED="PAYMENT_METHOD_NOT_PROVIDED",r.PAYMENT_METHOD_NOT_COMPATIBLE="PAYMENT_METHOD_NOT_COMPATIBLE",r.RESUME_ERROR="RESUME_ERROR",r.VALIDATION_ERROR="VALIDATION_ERROR",r.PAYMENT_FAILED="PAYMENT_FAILED",r.PAYMENT_CREATION_ABORTED="PAYMENT_CREATION_ABORTED",r.PAYMENT_CREATION_DISABLED="PAYMENT_CREATION_DISABLED",r.CLIENT_SESSION_UPDATE_ERROR="CLIENT_SESSION_UPDATE_ERROR",r.INVALID_ARGUMENT="INVALID_ARGUMENT",r.VAULT_FETCH="VAULT_FETCH",r.VAULT_DELETE="VAULT_DELETE",r.HEADLESS_VAULT_MANAGER_VALIDATION="HEADLESS_VAULT_MANAGER_VALIDATION",r.CARD_FORM_VALIDATION_UNEXPECTED_FIELD="CARD_FORM_VALIDATION_UNEXPECTED_FIELD",r.MISSING_FIRST_NAME_OR_LAST_NAME="MISSING_FIRST_NAME_OR_LAST_NAME",r.MISSING_EMAIL_ADDRESS="MISSING_EMAIL_ADDRESS",r.INVALID_FLOW="INVALID_FLOW",r))(Qr||{});class J extends f{static fromErrorCode(e,t,o){return new J(e,t,o)}constructor(e,t,o){super(t.message),this.code=e,this.diagnosticsId=t.diagnosticsId??null,this.data=t.data,this.isFromDeveloper=t.isFromDeveloper??!1,this.name="PrimerClientError",Error.captureStackTrace&&Error.captureStackTrace(this,J),o&&(o.messageEvent({message:`${e}: ${t.message}`,messageType:e,severity:"ERROR",diagnosticsId:t.diagnosticsId??void 0,errorId:t.errorId??void 0,data:t.data??void 0,isFromDeveloper:t.isFromDeveloper?.toString(),stack:this.stack}),this.markAsReported())}}var it=R(56),Zr=(r=>(r.PAYMENT_METHOD="PAYMENT_METHOD",r.CHECK="CHECK",r))(Zr||{});const At=r=>{const e=r?.mandateData;return e?"fullMandateText"in e:!1};var qr=(r=>(r.CHANGE="change",r.ERROR="error",r.FOCUS="focus",r.BLUR="blur",r.CLICK="click",r.CLOSE="close",r))(qr||{}),Jr=(r=>(r.CARD="CARD",r.NATIVE="NATIVE",r.REDIRECT="REDIRECT",r.FORM_WITH_REDIRECT="FORM_WITH_REDIRECT",r.KLARNA="KLARNA",r.ACH="ACH",r))(Jr||{});const Et={SDK_VERSION:ze,createHeadless:Qe,showExpressCheckout:Ze,showUniversalCheckout:qe,showVaultManager:Je,preloadPrimer:Xe}})(),v})());
1
+ (function(U,N){typeof exports=="object"&&typeof module=="object"?module.exports=N():typeof define=="function"&&define.amd?define([],N):typeof exports=="object"?exports.Primer=N():U.Primer=N()})(this,()=>(()=>{var y={189:()=>{},367:()=>{},56:()=>{}},U={};function N(D){var O=U[D];if(O!==void 0)return O.exports;var T=U[D]={exports:{}};return y[D](T,T.exports,N),T.exports}N.d=(D,O)=>{for(var T in O)N.o(O,T)&&!N.o(D,T)&&Object.defineProperty(D,T,{enumerable:!0,get:O[T]})},N.o=(D,O)=>Object.prototype.hasOwnProperty.call(D,O),N.r=D=>{typeof Symbol<"u"&&Symbol.toStringTag&&Object.defineProperty(D,Symbol.toStringTag,{value:"Module"}),Object.defineProperty(D,"__esModule",{value:!0})};var p={};return(()=>{"use strict";N.r(p),N.d(p,{CheckoutUXFlow:()=>Vr,ErrorCode:()=>Qr,EventTypes:()=>qr,HeadlessManagerType:()=>Jr,PaymentFlow:()=>Wr,PaymentInstrumentType:()=>jr,PaymentMethodData:()=>ot.PaymentMethodData,PaymentMethodType:()=>q,Primer:()=>At,SuccessScreenType:()=>Zr,ThreeDSecureStatus:()=>$r,TokenType:()=>zr,isStripeOptionsDropInWithFullMandateText:()=>it});let O={[{API_VERSION_2_4:"api-version-2.4"}.API_VERSION_2_4]:!1};function T(r){O={...O,...r??{}}}function yr(r){return O[r]??!1}function nt(){return O}class f extends Error{constructor(e,t=!1){super(e),this.isReported=t,this.name=this.constructor.name,Error.captureStackTrace&&Error.captureStackTrace(this,this.constructor)}static from(e,t=!1){if(e instanceof f)return e;const o=e instanceof Error?e.message:String(e),E=new f(o,t);return e instanceof Error&&e.stack&&(E.stack=e.stack,Object.assign(E,e)),E}markAsReported(){this.isReported=!0}}const rr="https://analytics.production.data.primer.io/sdk-logs";var st=N(189),ct=N(367),v=(r=>(r.REQUEST_START="REQUEST_START",r.REQUEST_END="REQUEST_END",r))(v||{}),b=(r=>(r.START="START",r.END="END",r))(b||{});const x={createHeadless:"HEADLESS_LOADING",showUniversalCheckout:"DROP_IN_LOADING",showVaultManager:"VAULT_MANAGER_LOADING",preloadPrimer:"PRELOAD_PRIMER_LOADING"};var l=(r=>(r.NETWORK_CALL_EVENT="NETWORK_CALL_EVENT",r.CRASH_EVENT="CRASH_EVENT",r.TIMER_EVENT="TIMER_EVENT",r.MESSAGE_EVENT="MESSAGE_EVENT",r.V1_EVENT="V1_EVENT",r.SDK_FUNCTION_EVENT="SDK_FUNCTION_EVENT",r))(l||{});const re={get(r,e){let t;try{switch(r){case"PRIMER_SDK_VERSION":t="v2.49.0";break;case"PRIMER_ASSETS_URL":t=process.env.PRIMER_ASSETS_URL;break;case"PRIMER_BUILD_INTEGRATION_BUILDER":t=process.env.PRIMER_BUILD_INTEGRATION_BUILDER;break;default:break}}catch{}return t||e}};var ee=(r=>(r.CHARGING="CHARGING",r.NOT_CHARGING="NOT_CHARGING",r))(ee||{});async function te(){if(typeof navigator>"u"||typeof performance>"u")return;const r=await navigator.getBattery?.();return{memoryFootprint:performance.memory?.usedJSHeapSize,screen:{height:screen?.height,width:screen?.width},userAgent:navigator.userAgent,locale:navigator.language,batteryLevel:r?.level,batteryStatus:r?.charging?"CHARGING":"NOT_CHARGING"}}const oe="WEB",ie=re.get("PRIMER_SDK_VERSION");async function er(r,e,t){return{...t,createdAt:Date.now(),device:await te(),eventType:r,properties:e,sdkVersion:ie,sdkType:oe}}const tr=Symbol.for("__primerAnalytics__");let Y={providers:new Map,timers:new Map,eventsQueue:new Map};if(typeof window<"u"){const r=window[tr];r?Y=r:window[tr]=Y}const or=()=>Y.providers,F=()=>Y.timers,C=()=>Y.eventsQueue,ir=500,g=new Map,Ar=64e3,Ae=5;function H(r,e=!1,t=1){if(g.has(r)){const i=g.get(r);clearTimeout(i),g.delete(r)}const o=()=>{const i=C().get(r);if(i?.length){let A=!0,_=[],s=0,n=0;for(;n<i.length;){const c=i[n],L=JSON.stringify(c),R=new Blob([L]).size;if(R>Ar){console.error("Event size exceeds maximum payload size and will be skipped:",c),n++;continue}if(s+R>Ar&&_.length>0){try{A=navigator.sendBeacon(r,JSON.stringify(_))}catch(d){A=!1,console.error("Unable to send events",d)}if(!A)break;_=[],s=0}_.push(c),s+=R,n++}if(_.length>0&&A)try{A=navigator.sendBeacon(r,JSON.stringify(_))}catch(c){A=!1,console.error("Unable to send events",c)}if(A)C().delete(r);else if(t<Ae){const c=ir*Math.pow(2,t);setTimeout(()=>H(r,e,t+1),c)}else console.error("Max retry attempts reached. Events will not be sent.")}};if(e){o();return}const E=setTimeout(o,ir);g.set(r,E)}function Ee(r,e){C().has(r)||C().set(r,[]),C().get(r)?.push(e),H(r)}const Er=1024*5;function _r(r,e,t=new WeakSet,o=0,E=10){if(o>E||t.has(r))return r;t.add(r);const i=A=>typeof A=="object"&&A!==null?_r(A,e,t,o+1,E):e(A);return Array.isArray(r)?r.map(i):Object.fromEntries(Object.entries(r).map(([A,_])=>[A,i(_)]))}function _e(r){return typeof r=="string"&&r.length>Er?`${r.slice(0,Er)}...`:r}function ne(r){return typeof r=="function"?r.name||"function":r}let nr=!1;function m({url:r=rr,...e}){typeof document<"u"&&!nr&&(document.addEventListener("visibilitychange",()=>{document.visibilityState==="hidden"&&H(r,!0)}),nr=!0);const t=E=>async i=>{if(typeof navigator>"u")return;const A=await er(E,i,e),s=_r(A,n=>_e(ne(n)));Ee(r,s)},o={crashEvent:t(l.CRASH_EVENT),messageEvent:t(l.MESSAGE_EVENT),networkCallEvent:t(l.NETWORK_CALL_EVENT),sdkFunctionEvent:t(l.SDK_FUNCTION_EVENT),timerStart:({id:E,...i})=>{const A=`${e.checkoutSessionId}|${E}`,_=performance?.now?performance.now():Date.now();return F().set(A,{start:_}),t(l.TIMER_EVENT)({...i,id:E,timerType:b.START})},timerEnd:({id:E,...i})=>{const A=`${e.checkoutSessionId}|${E}`,{start:_=void 0}=F().get(A)??{};F().delete(A);const s=performance?.now?performance.now():Date.now(),n=_?s-_:void 0;return t(l.TIMER_EVENT)({...i,id:E,timerType:b.END,duration:n})},v1Event:t(l.V1_EVENT),url:r};return or().set(e.checkoutSessionId,o),I(e.checkoutSessionId)}function I(r){return new Proxy({},{get(e,t){return(or().get(r)??m({checkoutSessionId:r}))[t]}})}const G=(r,e,t,o)=>({callType:t?v.REQUEST_END:v.REQUEST_START,id:r,errorBody:t?.error&&JSON.stringify(t.error,Object.getOwnPropertyNames(t.error)),method:e.method,responseCode:t?.status,url:e.url,duration:o});function se(r){return r?new Promise(e=>{setTimeout(e,r)}):Promise.resolve()}const ce=8,ae=100,Ne=100;function Re(r){return{enabled:r?.enabled??!1,maxRetries:ce,initialBackoff:ae,retryNetworkErrors:!0,retry500Errors:!1,maxJitter:Ne}}function Oe(r,e,t){const o=r*Math.pow(2,e-1),E=Math.random()*t;return Math.min(o+E,Number.MAX_SAFE_INTEGER)}async function sr(r,e,t,o=se){let E=0;const i=Re(e);if(!i.enabled)return r();for(;;)try{const A=await r();if(E){let _=`Request succeeded after ${E} retries.`;typeof A=="object"&&A&&"status"in A&&(_+=` Status code: ${A.status}`),t?.({messageType:"RETRY_SUCCESS",message:_,severity:"INFO"})}return A}catch(A){const _=A,s=E>=i.maxRetries,n=_.isNetworkError&&!i.retryNetworkErrors,c=_.status&&_.status>=500&&!i.retry500Errors;if(s||n||c){let d=`Failed after ${E} retries. `;throw s?d+=`Reached maximum retries (${i.maxRetries}).`:n?d+="Network error encountered and retryNetworkErrors is disabled.":c&&(d+="HTTP 500 error encountered and retry500Errors is disabled."),d+=` Last error: ${_.message}`,t?.({messageType:"RETRY_FAILED",message:d,severity:"ERROR",errorBody:JSON.stringify(A,Object.getOwnPropertyNames(A))}),new Error(d,{cause:A})}E++;const L=Oe(i.initialBackoff,E,i.maxJitter);let R="Unknown error";_.isNetworkError?R="Network error":_.status&&(R=`HTTP ${_.status} error`),t?.({messageType:"RETRY",message:`Retry attempt ${E}/${i.maxRetries} due to: ${R}. Error details: ${_.message}. Waiting for ${L.toFixed(2)}ms before next attempt.`,severity:"WARN",errorBody:JSON.stringify(A,Object.getOwnPropertyNames(A))}),await o(L)}}let K={cache:new Map};typeof window<"u"&&(window.__primerCache__??(window.__primerCache__=K),K=window.__primerCache__);const u=()=>K.cache,cr=1e3*60*60,ue=30,ar=50;function Nr(){if(u().size<=ue)return;const r=Date.now();for(const[e,t]of u())t.exp<r&&u().delete(e);if(u().size>ar)for(const[e]of u()){if(u().size<=ar)break;u().delete(e)}}function de({key:r,ttl:e=cr},t){e?u().set(r,{promise:Promise.resolve({...t,source:"CACHE"}),exp:Date.now()+e}):u().delete(r)}function De(r){if(!r)return i=>i();const{key:e,refresh:t=!1,usePrimerSessionCacheTtlHeader:o=!1,ttl:E=cr}=r;return async i=>{const A=Date.now(),_=u().get(e);if(!t&&_&&_.exp>A)return _.promise;_&&u().delete(e);const s=i().then(n=>{let c=E;return o&&(c=(Number(n.headers.get("x-primer-session-cache-ttl"))||0)*1e3),de({key:e,ttl:c},n),Nr(),n},n=>{throw u().delete(e),n});return u().set(e,{promise:s,exp:A+E}),Nr(),s}}const V=()=>Rr.randomUUID?.()||Te(),Te=()=>("10000000-1000-4000-8000"+-1e11).replace(/[018]/g,r=>(r^fe()>>r/4).toString(16)),fe=()=>(Rr.getRandomValues?.(new Uint8Array(1))[0]??Math.random()*16)&15,Rr=typeof crypto<"u"?crypto:{},Or=15e3,le=(r,e,t)=>ur(r,"get",e,t),Le=(r,e,t,o)=>ur(r,"post",e,o,JSON.stringify(t)),ur=async(r,e,t,o,E)=>{const i=V(),A=performance?.now();let _=I(r);const s={method:e,url:t,body:E};_.networkCallEvent(G(i,s));try{const n=await fetch(t,{body:E,method:e,headers:{"content-type":"application/json","x-request-id":i,...o}});if(!n.ok){const d=new Error(`HTTP error! status: ${n.status}`);throw d.status=n.status,d}const c=await n.json();if(t.includes("client-sdk/configuration")){const{primerAccountId:d,clientSession:{clientSessionId:Et,customer:_t}}=c;_=m({checkoutSessionId:r,clientSessionId:Et,customerId:_t?.customerId,primerAccountId:d,url:_.url})}const R=performance?.now()-A;return _.networkCallEvent(G(i,s,{data:c},R)),{data:c,headers:n.headers,status:n.status,source:"NETWORK"}}catch(n){const L=performance?.now()-A;throw Object.assign(n,{isNetworkError:n instanceof TypeError}),_.networkCallEvent(G(i,s,{error:n},L)),n}},dr=(r,e)=>new Promise((t,o)=>{const E=setTimeout(()=>{const i=new Error("Request timed out");i.isNetworkError=!0,o(i)},e);r.then(t).catch(o).finally(()=>clearTimeout(E))}),Se=(r,e)=>{const{headers:t,retryConfig:o,cacheConfig:E,timeout:i=Or,checkoutSessionId:A}=e,_=I(A);return De(E)(()=>sr(()=>dr(le(A,r,t),i),o,s=>_.messageEvent({...s,url:r})))},at=(r,e,t)=>{const{headers:o,retryConfig:E,cacheConfig:i,timeout:A=Or,checkoutSessionId:_}=t,s=getAnalytics(_);return cacheRequest(i)(()=>retryWithExponentialBackoff(()=>dr(Le(_,r,e,o),A),E,n=>s.messageEvent({...n,url:r})))},Dr="3.7.7",Pe=Dr,S=typeof Buffer=="function",Tr=typeof TextDecoder=="function"?new TextDecoder:void 0,fr=typeof TextEncoder=="function"?new TextEncoder:void 0,h=Array.prototype.slice.call("ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/="),k=(r=>{let e={};return r.forEach((t,o)=>e[t]=o),e})(h),Ye=/^(?:[A-Za-z\d+\/]{4})*?(?:[A-Za-z\d+\/]{2}(?:==)?|[A-Za-z\d+\/]{3}=?)?$/,a=String.fromCharCode.bind(String),lr=typeof Uint8Array.from=="function"?Uint8Array.from.bind(Uint8Array):r=>new Uint8Array(Array.prototype.slice.call(r,0)),Lr=r=>r.replace(/=/g,"").replace(/[+\/]/g,e=>e=="+"?"-":"_"),Sr=r=>r.replace(/[^A-Za-z0-9\+\/]/g,""),Pr=r=>{let e,t,o,E,i="";const A=r.length%3;for(let _=0;_<r.length;){if((t=r.charCodeAt(_++))>255||(o=r.charCodeAt(_++))>255||(E=r.charCodeAt(_++))>255)throw new TypeError("invalid character found");e=t<<16|o<<8|E,i+=h[e>>18&63]+h[e>>12&63]+h[e>>6&63]+h[e&63]}return A?i.slice(0,A-3)+"===".substring(A):i},W=typeof btoa=="function"?r=>btoa(r):S?r=>Buffer.from(r,"binary").toString("base64"):Pr,$=S?r=>Buffer.from(r).toString("base64"):r=>{let t=[];for(let o=0,E=r.length;o<E;o+=4096)t.push(a.apply(null,r.subarray(o,o+4096)));return W(t.join(""))},w=(r,e=!1)=>e?Lr($(r)):$(r),Ce=r=>{if(r.length<2){var e=r.charCodeAt(0);return e<128?r:e<2048?a(192|e>>>6)+a(128|e&63):a(224|e>>>12&15)+a(128|e>>>6&63)+a(128|e&63)}else{var e=65536+(r.charCodeAt(0)-55296)*1024+(r.charCodeAt(1)-56320);return a(240|e>>>18&7)+a(128|e>>>12&63)+a(128|e>>>6&63)+a(128|e&63)}},Ie=/[\uD800-\uDBFF][\uDC00-\uDFFFF]|[^\x00-\x7F]/g,Yr=r=>r.replace(Ie,Ce),Cr=S?r=>Buffer.from(r,"utf8").toString("base64"):fr?r=>$(fr.encode(r)):r=>W(Yr(r)),P=(r,e=!1)=>e?Lr(Cr(r)):Cr(r),Ir=r=>P(r,!0),he=/[\xC0-\xDF][\x80-\xBF]|[\xE0-\xEF][\x80-\xBF]{2}|[\xF0-\xF7][\x80-\xBF]{3}/g,Me=r=>{switch(r.length){case 4:var e=(7&r.charCodeAt(0))<<18|(63&r.charCodeAt(1))<<12|(63&r.charCodeAt(2))<<6|63&r.charCodeAt(3),t=e-65536;return a((t>>>10)+55296)+a((t&1023)+56320);case 3:return a((15&r.charCodeAt(0))<<12|(63&r.charCodeAt(1))<<6|63&r.charCodeAt(2));default:return a((31&r.charCodeAt(0))<<6|63&r.charCodeAt(1))}},hr=r=>r.replace(he,Me),Mr=r=>{if(r=r.replace(/\s+/g,""),!Ye.test(r))throw new TypeError("malformed base64.");r+="==".slice(2-(r.length&3));let e,t="",o,E;for(let i=0;i<r.length;)e=k[r.charAt(i++)]<<18|k[r.charAt(i++)]<<12|(o=k[r.charAt(i++)])<<6|(E=k[r.charAt(i++)]),t+=o===64?a(e>>16&255):E===64?a(e>>16&255,e>>8&255):a(e>>16&255,e>>8&255,e&255);return t},j=typeof atob=="function"?r=>atob(Sr(r)):S?r=>Buffer.from(r,"base64").toString("binary"):Mr,Ur=S?r=>lr(Buffer.from(r,"base64")):r=>lr(j(r).split("").map(e=>e.charCodeAt(0))),gr=r=>Ur(kr(r)),Ue=S?r=>Buffer.from(r,"base64").toString("utf8"):Tr?r=>Tr.decode(Ur(r)):r=>hr(j(r)),kr=r=>Sr(r.replace(/[-_]/g,e=>e=="-"?"+":"/")),z=r=>Ue(kr(r)),ge=r=>{if(typeof r!="string")return!1;const e=r.replace(/\s+/g,"").replace(/={0,2}$/,"");return!/[^\s0-9a-zA-Z\+/]/.test(e)||!/[^\s0-9a-zA-Z\-_]/.test(e)},wr=r=>({value:r,enumerable:!1,writable:!0,configurable:!0}),Br=function(){const r=(e,t)=>Object.defineProperty(String.prototype,e,wr(t));r("fromBase64",function(){return z(this)}),r("toBase64",function(e){return P(this,e)}),r("toBase64URI",function(){return P(this,!0)}),r("toBase64URL",function(){return P(this,!0)}),r("toUint8Array",function(){return gr(this)})},pr=function(){const r=(e,t)=>Object.defineProperty(Uint8Array.prototype,e,wr(t));r("toBase64",function(e){return w(this,e)}),r("toBase64URI",function(){return w(this,!0)}),r("toBase64URL",function(){return w(this,!0)})},vr={version:Dr,VERSION:Pe,atob:j,atobPolyfill:Mr,btoa:W,btoaPolyfill:Pr,fromBase64:z,toBase64:P,encode:P,encodeURI:Ir,encodeURL:Ir,utob:Yr,btou:hr,decode:z,isValid:ge,fromUint8Array:w,toUint8Array:gr,extendString:Br,extendUint8Array:pr,extendBuiltins:()=>{Br(),pr()}},ke={encode:we,decode:vr.decode};function we(r,e={}){const{urlSafe:t=!1}=e;return vr.encode(r,t)}function Be(r){const e=be(r),t=e.exp*1e3;if(Date.now()>t)throw new Error(`${pe}. Expiration date: ${new Date(t).toISOString()}`);return e}const br="The provided `clientToken`",pe=`${br} has expired`,ve=`${br} is malformed`;function be(r){try{const[e,t]=r.split("."),o=t||e;return JSON.parse(ke.decode(o))}catch{throw new Error(ve)}}const xe="v2.49.0",Fe=(r,e,t)=>({"primer-client-token":r,"primer-sdk-client":"WEB","primer-sdk-version":xe,"primer-sdk-checkout-session-id":e,...t&&{"x-api-version":t}});async function He(r,e,t){const{accessToken:o,configurationUrl:E,analyticsUrlV2:i}=Be(r),A=m({checkoutSessionId:e,url:i}),_=yr("api-version-2.4");A.timerStart({id:"CONFIGURATION_LOADING"});try{const{data:s,source:n}=await Se(`${E}/?withDisplayMetadata=true`,{checkoutSessionId:e,headers:Fe(o,e,_?"2.4":"2.3"),retryConfig:{enabled:!0},cacheConfig:t});return A.timerEnd({id:"CONFIGURATION_LOADING",context:{source:n}}),s}catch(s){const n=s instanceof Error?s.message:"Unknown error occurred";throw new Error(`Failed to initialize client: ${n}`)}}function xr(r){return r instanceof Error?{errorBody:r.message,stacktrace:r.stack}:typeof r=="object"&&r!==null&&"message"in r?{errorBody:String(r.message),stacktrace:"stack"in r?String(r.stack):void 0}:{errorBody:String(r||"Unknown error")}}function B({checkoutSessionId:r,analytics:e,error:t,reporter:o}){e?.crashEvent?e.crashEvent({...xr(t),reporter:o}):r&&X(r,t,o)}async function X(r,e,t){const o=rr,E=await er(l.CRASH_EVENT,{...xr(e),reporter:t},{checkoutSessionId:r});try{await fetch(o,{method:"POST",headers:{"Content-Type":"application/json"},body:JSON.stringify(E)})}catch(i){console.error("Failed to post crash event",i)}}const Fr=Symbol.for("initGlobalErrorMonitoringLoaded"),Hr=(r,e)=>{typeof window<"u"&&window[Fr]||(window[Fr]=!0,window.addEventListener("error",t=>{me(t)||Ge(t)&&B({checkoutSessionId:r,analytics:e,error:t.error,reporter:"window.onerror"})}),window.addEventListener("unhandledrejection",t=>{const o=t.reason||new Error("Unhandled promise rejection");Ke(o)&&B({checkoutSessionId:r,analytics:e,error:o,reporter:"unhandledrejection"})}))},me=r=>r.message==="Script error."||!r.filename||r.lineno===0,Ge=r=>{const e=r.filename;return!!(e&&Q(e)&&new f(r.error).isReported)},Ke=r=>{if(r&&typeof r=="object"&&"stack"in r&&typeof r.stack=="string"){const e=f.from(r);if(e.isReported)return!1;if("fileName"in r&&typeof r.fileName=="string"){const o=r.fileName;if(Q(o))return!0}return Ve(e.stack).some(Q)}return!1},Q=r=>{try{return new URL(r,window.location.origin).hostname.endsWith(".primer.io")}catch{return!1}},Ve=r=>{if(!r)return[];const e=r.split(`
2
+ `),t=[],o=/^\s*at\s+(?:.*?\s+)?\(?(.+?):\d+:\d+\)?$/;for(const E of e){const i=E.match(o);if(i&&i[1])t.push(i[1]);else{const A=/@(.*?):\d+:\d+$/,_=E.match(A);_&&_[1]&&t.push(_[1])}}return t};function We(r,e){const t=document.createElement(r);return Object.entries(e).forEach(([o,E])=>t.setAttribute(o,E)),t}function mr(r,e,t){return document.querySelector(`${r}[${e}^="${t}"]`)}async function Gr(r,e,t,o,E,i){const{analytics:A,name:_=e,retryConfig:s}=i;await sr(()=>new Promise((c,L)=>{const R=mr(r,t,e)||We(r,{...o,[t]:e});R.onload=()=>{A?.sdkFunctionEvent({name:_,params:[`${r.charAt(0).toUpperCase()+r.slice(1)} loaded successfully: ${e}`]}),c()},R.onerror=()=>{R.remove(),L(new Error(`${E}: ${e}`))},R.parentNode||document.head.appendChild(R)}),s,c=>A?.messageEvent({...c,url:e}))}function $e(r,e={}){return mr("script","src",r)&&window.__Primer?(e.analytics?.sdkFunctionEvent({name:e.name??r,params:["Script already loaded"]}),Promise.resolve()):Gr("script",r,"src",{...e.attributes,async:"",crossorigin:"anonymous"},"Can't load Primer SDK",e)}function je(r,e={}){return Array.from(document.styleSheets).some(t=>t.href===r)?(e.analytics?.sdkFunctionEvent({name:e.name??r,params:["Stylesheet already loaded"]}),Promise.resolve()):Gr("link",r,"href",{...e.attributes,rel:"stylesheet"},"Can't load Primer SDK's Stylesheet",e)}let M;async function Kr(r){return M||(M=Promise.all([$e("https://sdk.primer.io/web/v2.49.0/PrimerCoreSDK.min.js",{analytics:r,name:"loadPrimerScript"}),je("https://sdk.primer.io/web/v2.49.0/Checkout.css",{analytics:r,name:"loadPrimerCss"})]).then(()=>{const o=window.__Primer;return delete window.__Primer,o}).catch(o=>{throw M=void 0,o}),M)}const ze=async()=>{const r=V();try{const e=I(r);try{Hr(r,e),e.sdkFunctionEvent({name:"preloadPrimer"}),e.timerStart({id:x.preloadPrimer}),await Kr(e),e.timerEnd({id:x.preloadPrimer})}catch(t){const o=f.from(t);throw o.isReported||(B({checkoutSessionId:r,analytics:e,error:o,reporter:"preloadPrimer level 1"}),o.markAsReported()),o}}catch(e){const t=f.from(e);throw t.isReported||(X(r,t,"preloadPrimer level 0"),t.markAsReported()),t}},Xe="v2.49.0",Qe=Z("createHeadless"),Ze=Z("showUniversalCheckout"),qe=Z("showVaultManager");function Z(r){return async(...[e,t,...o])=>{T(t?.experimental);const E=V();try{const i=I(E);try{Hr(E,i),i.sdkFunctionEvent({name:r,params:[e,t,...o]}),i.timerStart({id:x[r]});const[A,_]=await Promise.all([He(e,E,t?.clientSessionCachingEnabled?{key:e,usePrimerSessionCacheTtlHeader:!0}:void 0),Kr(i)]);return _[r](A,E,e,t,...o)}catch(A){const _=f.from(A);throw _.isReported||(B({checkoutSessionId:E,analytics:i,error:_,reporter:"lazyLoad level 1"}),_.markAsReported()),_}}catch(i){const A=f.from(i);throw A.isReported||(X(E,A,"lazyLoad level 0"),A.markAsReported()),A}}}var Je=(r=>(r.LOADING="Loading",r.NO_PAYMENT_METHOD="NoPaymentMethod",r.THREE_DS="UniversalCheckout/3ds",r.CHOOSE_PAYMENT_METHOD="UniversalCheckout/Home",r.MANAGE_PAYMENT_METHODS="VaultManager/Home",r.DIRECT_DEBIT_FORM="DirectDebit/Form",r.DIRECT_DEBIT_MANDATE="DirectDebit/Mandate",r.CREDIT_CARD_FORM="CreditCard/Form",r.SUCCESS_PAYMENT_METHOD="UniversalCheckout/Success/PaymentMethod",r.SUCCESS_CHECK="UniversalCheckout/Success/Check",r))(Je||{}),ye=(r=>(r.ROOT="primer-checkout",r.ROOT_CONTENT="primer-checkout-content",r.SUBMIT_BUTTON="primer-checkout-submit-button",r.THREE_DS_MODAL="primer-checkout-3ds-modal",r.VAULT="primer-checkout-vault",r.VAULT_INLINE="primer-checkout-vault-inline",r.NAVIGATE_PAYMENT_METHODS="primer-checkout-navigate-to-payment-methods",r.DIVIDER="primer-checkout-payment-method-divider",r.APM_BUTTONS="primer-checkout-apm-button-container",r.CARDHOLDER_NAME="primer-checkout-cardholder-name",r.CARDHOLDER_NAME_INPUT="primer-checkout-card-cardholder-name-input",r.ACTIONS="primer-checkout-actions",r.ACTIONS_MENU="primer-checkout-actions-menu",r.SAVE_PAYMENT_METHOD_CHECKBOX="primer-checkout-save-payment-method-input",r.SAVE_PAYMENT_METHOD_FIELD="primer-checkout-save-payment-method-field",r.SAVED_PAYMENT_METHODS_EMPTY="primer-checkout-saved-payment-methods-empty-text",r.CARD_FORM="primer-checkout-card-form",r.DD_SWITCH="primer-checkout-switch-dd-inputs",r.DD_IBAN_FIELD="primer-checkout-dd-iban-field",r.DD_LOCAL_FIELD="primer-checkout-dd-local-fields",r.DD_CUSTOMER_NAME_INPUT="primer-checkout-dd-customer-name-input",r.DD_CUSTOMER_EMAIL_INPUT="primer-checkout-dd-customer-email-input",r.DD_CUSTOMER_ADDRESS_LINE1="primer-checkout-dd-customer-address-input",r.DD_CUSTOMER_ADDRESS_LINE2="primer-checkout-dd-customer-address-line2-input",r.DD_CUSTOMER_ADDRESS_CITY="primer-checkout-dd-customer-city-input",r.DD_CUSTOMER_ADDRESS_POSTAL_CODE="primer-checkout-dd-customer-postal-code-input",r.DD_IBAN_INPUT="primer-checkout-dd-iban-input",r.DD_ACCOUNT_NUMBER_INPUT="primer-checkout-dd-account-number-input",r.DD_BANK_CODE_INPUT="primer-checkout-dd-bank-code-input",r.DD_BRANCH_CODE_INPUT="primer-checkout-dd-branch-code-input",r.DD_MANDATE_SMALL_PRINT="primer-checkout-small-print",r.ERROR_MESSAGE="primer-checkout-error-message",r))(ye||{}),rt=(r=>(r.TOKEN="PrimerCheckout__token",r.HIDDEN="PrimerCheckout--hidden",r.FOCUSED="PrimerCheckout--focused",r.SELECTED="PrimerCheckout--selected",r.LOADING="PrimerCheckout--loading",r.ERROR="PrimerCheckout--error",r.CARD_TYPE="PrimerCheckout__cardType",r.SAVED_PAYMENT_METHOD="PrimerCheckout__savedPaymentMethod",r.SAVED_PAYMENT_METHOD_CONTAINER="PrimerCheckout__savedPaymentMethodContainer",r.APM_BUTTON="PrimerCheckout__apmButton",r.EDIT_BUTTON="PrimerCheckout__editButton",r.MENU="PrimerCheckout__dropDownMenu",r.MENU_ITEM="PrimerCheckout__dropDownMenuItem",r.PAYMENT_METHOD_MENU_ITEM="PrimerCheckout__paymentMethodDropDownMenuItem",r.DELETE_PAYMENT_METHOD_BUTTON="PrimerCheckout__paymentMethodDropDownMenuItem__deleteButton",r.ENTER="PrimerCheckout--enter",r.ENTERING="PrimerCheckout--entering",r.ENTERED="PrimerCheckout--entered",r.EXIT="PrimerCheckout--exit",r.EXITING="PrimerCheckout--exiting",r.EXITED="PrimerCheckout--exited",r))(rt||{}),Vr=(r=>(r.CHECKOUT="CHECKOUT",r.HEADLESS_CHECKOUT="HEADLESS_CHECKOUT",r.MANAGE_PAYMENT_METHODS="MANAGE_PAYMENT_METHODS",r))(Vr||{}),Wr=(r=>(r.DEFAULT="DEFAULT",r.PREFER_VAULT="PREFER_VAULT",r))(Wr||{}),et=(r=>(r.TOKENIZE_STARTED="tokenize-started",r.TOKENIZE_ERROR="tokenize-error",r.TOKENIZE_SUCCESS="tokenize-success",r.TOKENIZE_DID_NOT_START="tokenize-did-not-start",r))(et||{}),$r=(r=>(r.SUCCESS="AUTH_SUCCESS",r.FAILED="AUTH_FAILED",r.SKIPPED="SKIPPED",r.CHALLENGE="CHALLENGE",r))($r||{}),jr=(r=>(r.WORLDPAY_IDEAL="WORLDPAY_IDEAL",r.AUTOMATED_CLEARING_HOUSE="AUTOMATED_CLEARING_HOUSE",r.ADYEN_KLARNA="ADYEN_KLARNA",r.ADYEN_BANCONTACT_CARD="ADYEN_BANCONTACT_CARD",r.PAY_NL_KAARTDIRECT="PAY_NL_KAARTDIRECT",r.ADYEN_EPS="ADYEN_EPS",r.ADYEN_BANCONTACT_PAYCONIQ="ADYEN_BANCONTACT_PAYCONIQ",r.OMISE_PROMPTPAY="OMISE_PROMPTPAY",r.OMISE_TRUEMONEY="OMISE_TRUEMONEY",r.ADYEN_MULTIBANCO="ADYEN_MULTIBANCO",r.PACYPAY_WECHAT="PACYPAY_WECHAT",r.PACYPAY_ALIPAY="PACYPAY_ALIPAY",r.ADYEN_MBWAY="ADYEN_MBWAY",r.XENDIT_DANA="XENDIT_DANA",r.XENDIT_SHOPEEPAY="XENDIT_SHOPEEPAY",r.ADYEN_PAYSHOP="ADYEN_PAYSHOP",r.ADYEN_PAYTRAIL="ADYEN_PAYTRAIL",r.CLEARPAY="CLEARPAY",r.RAPYD_FAST="RAPYD_FAST",r.RAPYD_PROMPTPAY="RAPYD_PROMPTPAY",r.RAPYD_GCASH="RAPYD_GCASH",r.RAPYD_POLI="RAPYD_POLI",r.RAPYD_GRABPAY="RAPYD_GRABPAY",r.PRIMER_PAYPAL="PRIMER_PAYPAL",r.TWOC2P="TWOC2P",r.NETS="NETS",r.STRIPE_ACH="STRIPE_ACH",r.STRIPE_GIROPAY="STRIPE_GIROPAY",r.MOLLIE_GIROPAY="MOLLIE_GIROPAY",r.MOLLIE_EPS="MOLLIE_EPS",r.PAY_NL_EPS="PAY_NL_EPS",r.PAY_NL_P24="PAY_NL_P24",r.MOLLIE_P24="MOLLIE_P24",r.MOLLIE_SOFORT="MOLLIE_SOFORT",r.COINBASE="COINBASE",r.OPENNODE="OPENNODE",r.MOLLIE_GIFT_CARD="MOLLIE_GIFTCARD",r.XFERS_PAYNOW="XFERS_PAYNOW",r.CARD="PAYMENT_CARD",r.APPLE_PAY="APPLE_PAY",r.GOOGLE_PAY="GOOGLE_PAY",r.PAYPAL="PAYPAL_ORDER",r.PAYPAL_VAULTED="PAYPAL_BILLING_AGREEMENT",r.GO_CARDLESS="GOCARDLESS",r.PAY_NL_IDEAL="PAY_NL_IDEAL",r.PAY_NL_SOFORT_BANKING="PAY_NL_SOFORT_BANKING",r.PAY_NL_BANCONTACT="PAY_NL_BANCONTACT",r.PAY_NL_PAYPAL="PAY_NL_PAYPAL",r.PAY_NL_CREDIT_TRANSFER="PAY_NL_CREDIT_TRANSFER",r.PAY_NL_DIRECT_DEBIT="PAY_NL_DIRECT_DEBIT",r.PAY_NL_GIROPAY="PAY_NL_GIROPAY",r.PAY_NL_PAYCONIQ="PAY_NL_PAYCONIQ",r.HOOLAH="HOOLAH",r.ADYEN_BLIK="ADYEN_BLIK",r.ADYEN_VIPPS="ADYEN_VIPPS",r.ADYEN_GIROPAY="ADYEN_GIROPAY",r.ADYEN_SOFORT="ADYEN_SOFORT",r.ADYEN_IDEAL="ADYEN_IDEAL",r.ADYEN_TRUSTLY="ADYEN_TRUSTLY",r.ADYEN_ALIPAY="ADYEN_ALIPAY",r.ADYEN_TWINT="ADYEN_TWINT",r.ADYEN_MOBILEPAY="ADYEN_MOBILEPAY",r.MOLLIE_BANCONTACT="MOLLIE_BANCONTACT",r.MOLLIE_IDEAL="MOLLIE_IDEAL",r.BUCKAROO_GIROPAY="BUCKAROO_GIROPAY",r.BUCKAROO_EPS="BUCKAROO_EPS",r.BUCKAROO_SOFORT="BUCKAROO_SOFORT",r.BUCKAROO_BANCONTACT="BUCKAROO_BANCONTACT",r.BUCKAROO_IDEAL="BUCKAROO_IDEAL",r.ATOME="ATOME",r.KLARNA_CUSTOMER_TOKEN="KLARNA_CUSTOMER_TOKEN",r))(jr||{}),q=(r=>(r.WORLDPAY_IDEAL="WORLDPAY_IDEAL",r.STRIPE_ACH="STRIPE_ACH",r.STRIPE_IDEAL="STRIPE_IDEAL",r.ADYEN_KLARNA="ADYEN_KLARNA",r.ADYEN_BANCONTACT_CARD="ADYEN_BANCONTACT_CARD",r.PAY_NL_KAARTDIRECT="PAY_NL_KAARTDIRECT",r.ADYEN_EPS="ADYEN_EPS",r.ADYEN_BANCONTACT_PAYCONIQ="ADYEN_BANCONTACT_PAYCONIQ",r.OMISE_PROMPTPAY="OMISE_PROMPTPAY",r.OMISE_TRUEMONEY="OMISE_TRUEMONEY",r.ADYEN_MULTIBANCO="ADYEN_MULTIBANCO",r.PACYPAY_WECHAT="PACYPAY_WECHAT",r.PACYPAY_ALIPAY="PACYPAY_ALIPAY",r.ADYEN_MBWAY="ADYEN_MBWAY",r.XENDIT_DANA="XENDIT_DANA",r.XENDIT_SHOPEEPAY="XENDIT_SHOPEEPAY",r.ADYEN_PAYSHOP="ADYEN_PAYSHOP",r.ADYEN_PAYTRAIL="ADYEN_PAYTRAIL",r.CLEARPAY="CLEARPAY",r.RAPYD_FAST="RAPYD_FAST",r.RAPYD_PROMPTPAY="RAPYD_PROMPTPAY",r.RAPYD_GCASH="RAPYD_GCASH",r.RAPYD_POLI="RAPYD_POLI",r.RAPYD_GRABPAY="RAPYD_GRABPAY",r.PRIMER_PAYPAL="PRIMER_PAYPAL",r.TWOC2P="TWOC2P",r.NETS="NETS",r.STRIPE_GIROPAY="STRIPE_GIROPAY",r.MOLLIE_GIROPAY="MOLLIE_GIROPAY",r.MOLLIE_EPS="MOLLIE_EPS",r.PAY_NL_EPS="PAY_NL_EPS",r.PAY_NL_P24="PAY_NL_P24",r.MOLLIE_P24="MOLLIE_P24",r.MOLLIE_SOFORT="MOLLIE_SOFORT",r.COINBASE="COINBASE",r.OPENNODE="OPENNODE",r.MOLLIE_GIFT_CARD="MOLLIE_GIFTCARD",r.XFERS_PAYNOW="XFERS_PAYNOW",r.PAYMENT_CARD="PAYMENT_CARD",r.APPLE_PAY="APPLE_PAY",r.GOOGLE_PAY="GOOGLE_PAY",r.PAYPAL="PAYPAL",r.GO_CARDLESS="GOCARDLESS",r.KLARNA="KLARNA",r.PAY_NL_IDEAL="PAY_NL_IDEAL",r.PAY_NL_SOFORT_BANKING="PAY_NL_SOFORT_BANKING",r.PAY_NL_BANCONTACT="PAY_NL_BANCONTACT",r.PAY_NL_PAYPAL="PAY_NL_PAYPAL",r.PAY_NL_CREDIT_TRANSFER="PAY_NL_CREDIT_TRANSFER",r.PAY_NL_DIRECT_DEBIT="PAY_NL_DIRECT_DEBIT",r.PAY_NL_GIROPAY="PAY_NL_GIROPAY",r.PAY_NL_PAYCONIQ="PAY_NL_PAYCONIQ",r.HOOLAH="HOOLAH",r.ADYEN_BLIK="ADYEN_BLIK",r.ADYEN_MOBILEPAY="ADYEN_MOBILEPAY",r.ADYEN_VIPPS="ADYEN_VIPPS",r.ADYEN_GIROPAY="ADYEN_GIROPAY",r.ADYEN_SOFORT="ADYEN_SOFORT",r.ADYEN_IDEAL="ADYEN_IDEAL",r.ADYEN_TRUSTLY="ADYEN_TRUSTLY",r.ADYEN_ALIPAY="ADYEN_ALIPAY",r.ADYEN_TWINT="ADYEN_TWINT",r.ADYEN_BANK_TRANSFER="ADYEN_BANK_TRANSFER",r.MOLLIE_BANCONTACT="MOLLIE_BANCONTACT",r.MOLLIE_IDEAL="MOLLIE_IDEAL",r.BUCKAROO_GIROPAY="BUCKAROO_GIROPAY",r.BUCKAROO_EPS="BUCKAROO_EPS",r.BUCKAROO_SOFORT="BUCKAROO_SOFORT",r.BUCKAROO_BANCONTACT="BUCKAROO_BANCONTACT",r.BUCKAROO_IDEAL="BUCKAROO_IDEAL",r.ATOME="ATOME",r))(q||{}),tt=(r=>(r.PAYMENT_CARD="PAYMENT_CARD",r.ADYEN_BANCONTACT_CARD="ADYEN_BANCONTACT_CARD",r))(tt||{}),zr=(r=>(r.SINGLE_USE="SINGLE_USE",r.MULTI_USE="MULTI_USE",r))(zr||{});const Xr={PAYPAL_BILLING_AGREEMENT:"PAYPAL",KLARNA_CUSTOMER_TOKEN:"KLARNA",AUTOMATED_CLEARING_HOUSE:"STRIPE_ACH"},Ot=r=>{if(Object.values(q).includes(r))return r;if(Xr[r])return Xr[r]};var Qr=(r=>(r.INITIALIZATION_ERROR="INITIALIZATION_ERROR",r.NO_PAYMENT_METHODS="NO_PAYMENT_METHODS",r.PRIMER_TEARDOWN="PRIMER_TEARDOWN",r.PRIMER_SERVER_ERROR="PRIMER_SERVER_ERROR",r.THREE_DS_AUTH_FAILED="THREE_DS_AUTH_FAILED",r.TOKENIZATION_ERROR="TOKENIZATION_ERROR",r.DUPLICATE_PAYMENT_METHOD_ERROR="DUPLICATE_PAYMENT_METHOD_ERROR",r.CARD_NUMBER_ERROR="CARD_NUMBER_ERROR",r.PAYMENT_METHOD_NOT_SETUP="PAYMENT_METHOD_NOT_SETUP",r.PAYMENT_METHOD_NOT_PROVIDED="PAYMENT_METHOD_NOT_PROVIDED",r.PAYMENT_METHOD_NOT_COMPATIBLE="PAYMENT_METHOD_NOT_COMPATIBLE",r.RESUME_ERROR="RESUME_ERROR",r.VALIDATION_ERROR="VALIDATION_ERROR",r.PAYMENT_FAILED="PAYMENT_FAILED",r.PAYMENT_CREATION_ABORTED="PAYMENT_CREATION_ABORTED",r.PAYMENT_CREATION_DISABLED="PAYMENT_CREATION_DISABLED",r.CLIENT_SESSION_UPDATE_ERROR="CLIENT_SESSION_UPDATE_ERROR",r.INVALID_ARGUMENT="INVALID_ARGUMENT",r.VAULT_FETCH="VAULT_FETCH",r.VAULT_DELETE="VAULT_DELETE",r.HEADLESS_VAULT_MANAGER_VALIDATION="HEADLESS_VAULT_MANAGER_VALIDATION",r.CARD_FORM_VALIDATION_UNEXPECTED_FIELD="CARD_FORM_VALIDATION_UNEXPECTED_FIELD",r.MISSING_FIRST_NAME_OR_LAST_NAME="MISSING_FIRST_NAME_OR_LAST_NAME",r.MISSING_EMAIL_ADDRESS="MISSING_EMAIL_ADDRESS",r.INVALID_FLOW="INVALID_FLOW",r))(Qr||{});class J extends f{static fromErrorCode(e,t,o){return new J(e,t,o)}constructor(e,t,o){super(t.message),this.code=e,this.diagnosticsId=t.diagnosticsId??null,this.data=t.data,this.isFromDeveloper=t.isFromDeveloper??!1,this.name="PrimerClientError",Error.captureStackTrace&&Error.captureStackTrace(this,J),o&&(o.messageEvent({message:`${e}: ${t.message}`,messageType:e,severity:"ERROR",diagnosticsId:t.diagnosticsId??void 0,errorId:t.errorId??void 0,data:t.data??void 0,isFromDeveloper:t.isFromDeveloper?.toString(),stack:this.stack}),this.markAsReported())}}var ot=N(56),Zr=(r=>(r.PAYMENT_METHOD="PAYMENT_METHOD",r.CHECK="CHECK",r))(Zr||{});const it=r=>{const e=r?.mandateData;return e?"fullMandateText"in e:!1};var qr=(r=>(r.CHANGE="change",r.ERROR="error",r.FOCUS="focus",r.BLUR="blur",r.CLICK="click",r.CLOSE="close",r))(qr||{}),Jr=(r=>(r.CARD="CARD",r.NATIVE="NATIVE",r.REDIRECT="REDIRECT",r.FORM_WITH_REDIRECT="FORM_WITH_REDIRECT",r.KLARNA="KLARNA",r.ACH="ACH",r))(Jr||{});const At={SDK_VERSION:Xe,createHeadless:Qe,showUniversalCheckout:Ze,showVaultManager:qe,preloadPrimer:ze}})(),p})());
package/dist/index.d.ts CHANGED
@@ -561,7 +561,7 @@ declare class Vault {
561
561
  fetch(): Promise<VaultedPaymentMethod[]>;
562
562
  delete(id: string | null): Promise<void>;
563
563
  }
564
- export type InternalFlowOptions = (UniversalCheckoutOptions | VaultManagerOptions | SinglePaymentMethodCheckoutOptions) & HeadlessUniversalCheckoutOptions & {
564
+ export type InternalFlowOptions = (UniversalCheckoutOptions | VaultManagerOptions) & HeadlessUniversalCheckoutOptions & {
565
565
  uxFlow?: string;
566
566
  newHeadlessOptionsParameter?: boolean;
567
567
  };
@@ -930,10 +930,8 @@ declare enum SceneEnum {
930
930
  }
931
931
  export declare enum CheckoutUXFlow {
932
932
  CHECKOUT = "CHECKOUT",
933
- EXPRESS_CHECKOUT = "EXPRESS_CHECKOUT",
934
933
  HEADLESS_CHECKOUT = "HEADLESS_CHECKOUT",
935
- MANAGE_PAYMENT_METHODS = "MANAGE_PAYMENT_METHODS",
936
- SINGLE_PAYMENT_METHOD_CHECKOUT = "SINGLE_PAYMENT_METHOD_CHECKOUT"
934
+ MANAGE_PAYMENT_METHODS = "MANAGE_PAYMENT_METHODS"
937
935
  }
938
936
  export interface IStyleManagerOptions {
939
937
  isRtlLocale?: boolean;
@@ -1075,7 +1073,7 @@ declare class CheckoutStore extends BaseStore<ICheckoutState> implements IOption
1075
1073
  private submitButtonEventListener;
1076
1074
  private vault;
1077
1075
  private options;
1078
- constructor(defaultState: ICheckoutState, options: UniversalCheckoutOptions | VaultManagerOptions | SinglePaymentMethodCheckoutOptions);
1076
+ constructor(defaultState: ICheckoutState, options: UniversalCheckoutOptions | VaultManagerOptions);
1079
1077
  setVault(vault: Vault): void;
1080
1078
  setIsLoading(isLoading: boolean): void;
1081
1079
  setIsProcessing(isProcessing: boolean): void;
@@ -1823,33 +1821,6 @@ export interface ClientSessionHandlers {
1823
1821
  onClientSessionUpdate?: (clientSession: ClientSession) => void;
1824
1822
  onBeforeClientSessionUpdate?: () => void;
1825
1823
  }
1826
- export interface SinglePaymentMethodCheckoutOptions extends TokenizationHandlers, PaymentHandlers, ClientSessionHandlers, PaymentMethodHandlers, WithAllowedCardNetworks {
1827
- uxFlow: CheckoutUXFlow.SINGLE_PAYMENT_METHOD_CHECKOUT;
1828
- container: string | Element;
1829
- paymentMethod: PaymentMethodType;
1830
- locale?: SupportedLocale;
1831
- style?: CheckoutStyle;
1832
- submitButton?: SubmitButtonOptions;
1833
- processingIndicator?: ProcessingIndicatorOptions;
1834
- errorMessage?: ErrorMessageOptions;
1835
- successScreen?: SuccessScreenOptions;
1836
- form?: FormOptions;
1837
- scene?: SceneOptions;
1838
- vault?: VaultOptions;
1839
- redirect?: RedirectOptions;
1840
- card?: CheckoutCardOptions;
1841
- giftCard?: CustomizablePaymentMethodButton;
1842
- paypal?: Omit<PayPalOptions, "container">;
1843
- googlePay?: Omit<GooglePayOptions, "container">;
1844
- applePay?: Omit<ApplePayOptions, "container">;
1845
- adyenKlarna?: AdyenKlarnaOptions;
1846
- klarna?: KlarnaOptions;
1847
- directDebit?: DirectDebitOptions;
1848
- stripe?: StripeOptions;
1849
- paymentHandling?: PaymentHandling;
1850
- clientSessionCachingEnabled?: boolean;
1851
- experimental?: ExperimentalFlags;
1852
- }
1853
1824
  export interface VaultManagerOptions extends WithAllowedCardNetworks {
1854
1825
  container: string | Element;
1855
1826
  locale?: SupportedLocale;
@@ -2137,14 +2108,6 @@ export interface PrimerHeadlessCheckout {
2137
2108
  start: () => Promise<void>;
2138
2109
  refreshClientSession(): Promise<boolean>;
2139
2110
  }
2140
- export interface PrimerSinglePaymentMethodCheckout {
2141
- submit(): void;
2142
- refreshClientSession(): Promise<boolean>;
2143
- /**
2144
- * @deprecated The method should not be used
2145
- */
2146
- setClientToken(): Promise<boolean>;
2147
- }
2148
2111
  export interface PrimerVaultManager {
2149
2112
  teardown(): void;
2150
2113
  submit(): void;
@@ -2161,9 +2124,8 @@ export interface RemotePaymentMethodConfiguration<T> {
2161
2124
  export declare const Primer: {
2162
2125
  SDK_VERSION: string;
2163
2126
  createHeadless: (clientToken: string, options?: HeadlessUniversalCheckoutOptions | undefined) => Promise<Promise<PrimerHeadlessCheckout>>;
2164
- showExpressCheckout: (clientToken: string, options: any) => Promise<Promise<PrimerCheckout>>;
2165
- showUniversalCheckout: (clientToken: string, options: UniversalCheckoutOptions | SinglePaymentMethodCheckoutOptions) => Promise<Promise<PrimerCheckout>>;
2166
- showVaultManager: (clientToken: string, options: VaultManagerOptions) => Promise<Promise<PrimerVaultManager>>;
2127
+ showUniversalCheckout: (clientToken: string, options?: UniversalCheckoutOptions | undefined) => Promise<Promise<PrimerCheckout>>;
2128
+ showVaultManager: (clientToken: string, options?: VaultManagerOptions | undefined) => Promise<Promise<PrimerVaultManager>>;
2167
2129
  preloadPrimer: () => Promise<void>;
2168
2130
  };
2169
2131
 
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@primer-io/checkout-web",
3
- "version": "2.48.0",
3
+ "version": "2.49.0",
4
4
  "description": "Primer.js for the web",
5
5
  "author": "Primer Developers <developers@primer.io>",
6
6
  "homepage": "",