@bcc-code/payment-client 1.1.0 → 1.1.2
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/README.md +81 -6
- package/dist/components/index.js +1 -1
- package/dist/components/index.mjs +275 -139
- package/dist/styles/adyen.css +1 -1
- package/package.json +1 -1
package/README.md
CHANGED
|
@@ -50,7 +50,7 @@ const client = new PaymentClient({
|
|
|
50
50
|
const payment = await client.createPayment({
|
|
51
51
|
amount: 99.99,
|
|
52
52
|
currency: 'EUR',
|
|
53
|
-
paymentMethodType: 'stripe',
|
|
53
|
+
paymentMethodType: 'stripe', // or 'adyen', 'delayed-payment'
|
|
54
54
|
returnUrl: 'https://yourapp.com/success',
|
|
55
55
|
lineItems: [
|
|
56
56
|
{
|
|
@@ -190,6 +190,58 @@ const handleReady = () => {
|
|
|
190
190
|
</script>
|
|
191
191
|
```
|
|
192
192
|
|
|
193
|
+
### Delayed Payment Component
|
|
194
|
+
|
|
195
|
+
For manual payment processing via invoice or bank transfer:
|
|
196
|
+
|
|
197
|
+
```vue
|
|
198
|
+
<template>
|
|
199
|
+
<DelayedPayment
|
|
200
|
+
:payment-id="payment.paymentId"
|
|
201
|
+
:client-data="payment.clientData"
|
|
202
|
+
:amount="99.99"
|
|
203
|
+
currency="EUR"
|
|
204
|
+
:tenant-id="tenantId"
|
|
205
|
+
@success="handleSuccess"
|
|
206
|
+
@error="handleError"
|
|
207
|
+
@ready="handleReady"
|
|
208
|
+
/>
|
|
209
|
+
</template>
|
|
210
|
+
|
|
211
|
+
<script setup lang="ts">
|
|
212
|
+
import { PaymentClient } from '@bcc-code/payment-client'
|
|
213
|
+
import { DelayedPayment } from '@bcc-code/payment-client/components'
|
|
214
|
+
|
|
215
|
+
const paymentClient = new PaymentClient({
|
|
216
|
+
baseUrl: 'http://localhost:3200',
|
|
217
|
+
tenantId: 'your-tenant-uuid',
|
|
218
|
+
getAuthToken: async () => getBccAuthToken()
|
|
219
|
+
})
|
|
220
|
+
|
|
221
|
+
const payment = await paymentClient.createPayment({
|
|
222
|
+
amount: 99.99,
|
|
223
|
+
currency: 'EUR',
|
|
224
|
+
paymentMethodType: 'delayed-payment',
|
|
225
|
+
returnUrl: 'https://yourapp.com/success'
|
|
226
|
+
})
|
|
227
|
+
|
|
228
|
+
const tenantId = 'your-tenant-uuid'
|
|
229
|
+
|
|
230
|
+
const handleSuccess = (result: any) => {
|
|
231
|
+
console.log('Payment confirmed:', result)
|
|
232
|
+
// Payment will be processed manually
|
|
233
|
+
}
|
|
234
|
+
|
|
235
|
+
const handleError = (error: any) => {
|
|
236
|
+
console.error('Payment error:', error)
|
|
237
|
+
}
|
|
238
|
+
|
|
239
|
+
const handleReady = () => {
|
|
240
|
+
console.log('Delayed payment form ready')
|
|
241
|
+
}
|
|
242
|
+
</script>
|
|
243
|
+
```
|
|
244
|
+
|
|
193
245
|
### Component Props
|
|
194
246
|
|
|
195
247
|
#### StripePayment Props
|
|
@@ -217,6 +269,14 @@ const handleReady = () => {
|
|
|
217
269
|
- `paymentData` (any, optional) - Additional payment data
|
|
218
270
|
- `onCancel` (function, optional) - Cancel callback
|
|
219
271
|
|
|
272
|
+
#### DelayedPayment Props
|
|
273
|
+
|
|
274
|
+
- `paymentId` (string, required) - Payment ID from CreatePaymentResponse
|
|
275
|
+
- `clientData` (string, required) - Client data from CreatePaymentResponse
|
|
276
|
+
- `amount` (number, required) - Payment amount
|
|
277
|
+
- `currency` (string, required) - Currency code (EUR, USD, etc.)
|
|
278
|
+
- `tenantId` (string, optional) - Tenant ID for API calls
|
|
279
|
+
|
|
220
280
|
### Component Events
|
|
221
281
|
|
|
222
282
|
Both components emit the following events:
|
|
@@ -238,8 +298,11 @@ import { StripePayment } from '@bcc-code/payment-client/components'
|
|
|
238
298
|
// Import only Adyen component
|
|
239
299
|
import { AdyenPayment } from '@bcc-code/payment-client/components'
|
|
240
300
|
|
|
241
|
-
// Import
|
|
242
|
-
import {
|
|
301
|
+
// Import only Delayed Payment component
|
|
302
|
+
import { DelayedPayment } from '@bcc-code/payment-client/components'
|
|
303
|
+
|
|
304
|
+
// Import all
|
|
305
|
+
import { StripePayment, AdyenPayment, DelayedPayment } from '@bcc-code/payment-client/components'
|
|
243
306
|
|
|
244
307
|
// Note: Components must be imported from the '/components' entry point
|
|
245
308
|
// The main entry point only exports the API client and types
|
|
@@ -255,7 +318,8 @@ import type {
|
|
|
255
318
|
CreatePaymentResponse,
|
|
256
319
|
PaymentResponse,
|
|
257
320
|
StripePaymentProps,
|
|
258
|
-
AdyenPaymentProps
|
|
321
|
+
AdyenPaymentProps,
|
|
322
|
+
DelayedPaymentProps
|
|
259
323
|
} from '@bcc-code/payment-client'
|
|
260
324
|
```
|
|
261
325
|
|
|
@@ -289,6 +353,16 @@ import type {
|
|
|
289
353
|
@success="handlePaymentSuccess"
|
|
290
354
|
@error="handlePaymentError"
|
|
291
355
|
/>
|
|
356
|
+
<DelayedPayment
|
|
357
|
+
v-else-if="payment && provider === 'delayed-payment'"
|
|
358
|
+
:payment-id="payment.paymentId"
|
|
359
|
+
:client-data="payment.clientData"
|
|
360
|
+
:amount="amount"
|
|
361
|
+
:currency="currency"
|
|
362
|
+
:tenant-id="tenantId"
|
|
363
|
+
@success="handlePaymentSuccess"
|
|
364
|
+
@error="handlePaymentError"
|
|
365
|
+
/>
|
|
292
366
|
</div>
|
|
293
367
|
</template>
|
|
294
368
|
|
|
@@ -296,7 +370,7 @@ import type {
|
|
|
296
370
|
import { ref } from 'vue'
|
|
297
371
|
import '@bcc-code/payment-client/styles/adyen.css'
|
|
298
372
|
import { PaymentClient } from '@bcc-code/payment-client'
|
|
299
|
-
import { StripePayment, AdyenPayment } from '@bcc-code/payment-client/components'
|
|
373
|
+
import { StripePayment, AdyenPayment, DelayedPayment } from '@bcc-code/payment-client/components'
|
|
300
374
|
import type { CreatePaymentResponse } from '@bcc-code/payment-client'
|
|
301
375
|
|
|
302
376
|
const paymentClient = new PaymentClient({
|
|
@@ -307,7 +381,8 @@ const paymentClient = new PaymentClient({
|
|
|
307
381
|
|
|
308
382
|
const amount = 99.99
|
|
309
383
|
const currency = 'EUR'
|
|
310
|
-
const provider = 'stripe' // or 'adyen'
|
|
384
|
+
const provider = 'stripe' // or 'adyen', 'delayed-payment'
|
|
385
|
+
const tenantId = 'your-tenant-uuid'
|
|
311
386
|
const loading = ref(false)
|
|
312
387
|
const error = ref<string | null>(null)
|
|
313
388
|
const payment = ref<CreatePaymentResponse | null>(null)
|
package/dist/components/index.js
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
"use strict";var w=Object.create;var _=Object.defineProperty;var B=Object.getOwnPropertyDescriptor;var K=Object.getOwnPropertyNames;var A=Object.getPrototypeOf,N=Object.prototype.hasOwnProperty;var F=(s,u,i,n)=>{if(u&&typeof u=="object"||typeof u=="function")for(let o of K(u))!N.call(s,o)&&o!==i&&_(s,o,{get:()=>u[o],enumerable:!(n=B(u,o))||n.enumerable});return s};var E=(s,u,i)=>(i=s!=null?w(A(s)):{},F(u||!s||!s.__esModule?_(i,"default",{value:s,enumerable:!0}):i,s));Object.defineProperty(exports,Symbol.toStringTag,{value:"Module"});const e=require("vue"),R={class:"stripe-elements"},U={key:0,class:"elements-loading"},V={key:1,class:"elements-error"},M={key:2,class:"payment-button-container"},x=["disabled"],I=e.defineComponent({__name:"StripePayment",props:{paymentId:{},clientData:{default:void 0},clientKey:{default:void 0},amount:{},currency:{},publishableKey:{default:void 0},appearance:{default:void 0},showPayButton:{type:Boolean,default:!0},locale:{default:"en"},loader:{default:"auto"},returnUrl:{default:void 0}},emits:["submit","success","error","ready"],setup(s,{expose:u,emit:i}){const n=s,o=i,b=e.ref(),p=e.ref(!0),l=e.ref(!1),c=e.ref("");let d=null,y=null,m=null;const h=e.computed(()=>({EUR:"€",USD:"$",GBP:"£",CHF:"CHF",NOK:"kr",SEK:"kr",DKK:"kr",PLN:"zł",CZK:"Kč",HUF:"Ft"})[n.currency]||n.currency),P=e.computed(()=>n.amount.toFixed(2)),C=e.computed(()=>{if(n.clientData)try{const a=JSON.parse(n.clientData);return a.clientSecret||a.client_secret}catch{return}}),f=async()=>{if(!b.value)return;let a=n.publishableKey;if(!a&&n.clientData)try{const r=JSON.parse(n.clientData);a=r.publishableKey||r.publishable_key}catch{}if(!a){c.value="Publishable key is required",p.value=!1;return}try{p.value=!0,c.value="";const{loadStripe:r}=await import("@stripe/stripe-js");if(d=await r(a),!d)throw new Error("Failed to load Stripe");const t=C.value,g={appearance:n.appearance||{theme:"stripe",variables:{colorPrimary:"#0570de",colorBackground:"#ffffff",colorText:"#30313d",colorDanger:"#df1b41",fontFamily:'system-ui, -apple-system, BlinkMacSystemFont, "Segoe UI", Roboto, sans-serif',spacingUnit:"4px",borderRadius:"4px"}},loader:n.loader,locale:n.locale};t&&(g.clientSecret=t),y=d.elements(g),m=y.create("payment",{layout:"tabs",defaultValues:{billingDetails:{name:"",email:"",phone:""}}}),m.mount(b.value),m.on("ready",()=>{p.value=!1,o("ready")}),m.on("change",D=>{D.error?(c.value=D.error.message,o("error",D.error)):c.value=""})}catch(r){c.value=r instanceof Error?r.message:"Failed to initialize payment form",p.value=!1,o("error",r)}},k=async()=>{if(!(!d||!m)){l.value=!0,c.value="";try{const a=n.returnUrl||`${window.location.origin}/payment/return`,{error:r,paymentIntent:t}=await d.confirmPayment({elements:y,confirmParams:{return_url:a},redirect:"if_required"});r?(c.value=r.message||"Payment failed",o("error",r)):t?t.status==="succeeded"?o("success",{paymentIntent:t,status:"succeeded",message:"Payment completed successfully!"}):t.status==="processing"?o("success",{paymentIntent:t,status:"processing",message:"Payment is being processed..."}):o("submit",{paymentIntent:t,status:t.status}):o("submit",m)}catch(a){c.value=a instanceof Error?a.message:"Payment failed",o("error",a)}finally{l.value=!1}}},v=()=>{m&&(m.destroy(),m=null),y&&(y=null),d&&(d=null)};return e.onMounted(()=>{f()}),e.onUnmounted(()=>{v()}),e.watch(()=>n.currency,()=>{v(),f()}),e.watch([()=>n.publishableKey,()=>n.clientData],()=>{(n.publishableKey||n.clientData)&&(v(),f())}),u({destroyElements:v}),(a,r)=>(e.openBlock(),e.createElementBlock("div",R,[e.createElementVNode("div",{ref_key:"elementsContainer",ref:b,class:"elements-container"},null,512),p.value?(e.openBlock(),e.createElementBlock("div",U,[...r[0]||(r[0]=[e.createElementVNode("div",{class:"loading-spinner"},null,-1),e.createElementVNode("p",null,"Loading payment form...",-1)])])):e.createCommentVNode("",!0),c.value?(e.openBlock(),e.createElementBlock("div",V,[r[1]||(r[1]=e.createElementVNode("div",{class:"error-icon"}," ⚠️ ",-1)),e.createElementVNode("p",null,e.toDisplayString(c.value),1),e.createElementVNode("button",{class:"retry-btn",onClick:f}," Retry ")])):e.createCommentVNode("",!0),s.showPayButton&&!p.value&&!c.value?(e.openBlock(),e.createElementBlock("div",M,[e.createElementVNode("button",{disabled:l.value,class:"payment-button",onClick:k},e.toDisplayString(l.value?"Processing...":`Pay ${h.value}${P.value}`),9,x)])):e.createCommentVNode("",!0)]))}}),S=(s,u)=>{const i=s.__vccOpts||s;for(const[n,o]of u)i[n]=o;return i},O=S(I,[["__scopeId","data-v-adbdf3c5"]]),q=e.defineComponent({__name:"AdyenPayment",props:{paymentId:{},clientData:{},clientKey:{},environment:{},amount:{},currency:{},paymentData:{},onCancel:{type:Function}},emits:["submit","additionalDetails","error","ready","success"],setup(s,{emit:u}){const i=s,n=u,o=e.ref(null),b=()=>{if(!i.clientData)return console.error("No clientData provided"),null;try{const l=JSON.parse(i.clientData);return console.log("Parsed Adyen session data:",l),{id:l.id,sessionData:l.sessionData,amount:l.amount,reference:l.reference,returnUrl:l.returnUrl,merchantAccount:l.merchantAccount}}catch(l){return console.error("Failed to parse clientData:",l),null}},p=async()=>{var c;if(!i.clientKey||!o.value){console.error("Initialization failed: Missing clientKey or container.");return}const l=b();if(!l){console.error("Failed to parse session data"),n("error",new Error("Failed to parse session data"));return}try{const{AdyenCheckout:d,Card:y,ApplePay:m,GooglePay:h,Klarna:P,Blik:C,Dropin:f}=await import("@adyen/adyen-web"),k={environment:i.environment||"test",clientKey:i.clientKey,session:l,onPaymentCompleted:(t,g)=>{console.info("Payment Completed:",t,g),n("submit",t),t.resultCode==="Authorised"||t.resultCode==="Received"?(console.info("Payment Successful:",t),n("success",{status:"succeeded",message:"Payment completed successfully",resultCode:t.resultCode,pspReference:t.pspReference,paymentData:t})):t.resultCode==="Pending"?(console.info("Payment Pending:",t),n("success",{status:"processing",message:"Payment is being processed",resultCode:t.resultCode,pspReference:t.pspReference,paymentData:t})):(t.resultCode==="Refused"||t.resultCode==="Error")&&(console.error("Payment Failed:",t),n("error",{message:t.refusalReason||"Payment was declined",resultCode:t.resultCode,paymentData:t}))},onError:(t,g)=>{console.error("Adyen Error:",t.name,t.message,t.stack,g),n("error",t)}},v={showPayButton:!0,paymentMethodComponents:[y,m,h,P,C],paymentMethodsConfiguration:{card:{hasHolderName:!0,holderNameRequired:!0,billingAddressRequired:!1,enableStoreDetails:!1},applePay:{showPayButton:!0},googlePay:{showPayButton:!0},klarna:{useKlarnaWidget:!0},blik:{}}},a=await d(k);console.log("Adyen Checkout created:",a),console.log("Available payment methods from session:",(c=a.paymentMethodsResponse)==null?void 0:c.paymentMethods);const r=new f(a,v);console.log("Adyen Drop-in created with session payment methods"),o.value&&(r.mount(o.value),console.log("Adyen Drop-in mounted successfully"),n("ready"))}catch(d){console.error("Error creating Adyen Drop-in:",d),n("error",d)}};return e.onMounted(()=>{p()}),e.watch(()=>i.clientData,()=>{o.value&&(o.value.innerHTML="",p())}),(l,c)=>(e.openBlock(),e.createElementBlock("div",{ref_key:"dropinContainer",ref:o,class:"payment-dropin"},null,512))}}),z=S(q,[["__scopeId","data-v-ef2ec054"]]);exports.AdyenPayment=z;exports.StripePayment=O;
|
|
1
|
+
"use strict";var S=Object.create;var _=Object.defineProperty;var w=Object.getOwnPropertyDescriptor;var V=Object.getOwnPropertyNames;var B=Object.getPrototypeOf,U=Object.prototype.hasOwnProperty;var K=(l,m,i,t)=>{if(m&&typeof m=="object"||typeof m=="function")for(let a of V(m))!U.call(l,a)&&a!==i&&_(l,a,{get:()=>m[a],enumerable:!(t=w(m,a))||t.enumerable});return l};var C=(l,m,i)=>(i=l!=null?S(B(l)):{},K(m||!l||!l.__esModule?_(i,"default",{value:l,enumerable:!0}):i,l));Object.defineProperty(exports,Symbol.toStringTag,{value:"Module"});const e=require("vue"),R={class:"stripe-elements"},A={key:0,class:"elements-loading"},F={key:1,class:"elements-error"},I={key:2,class:"payment-button-container"},$=["disabled"],x=e.defineComponent({__name:"StripePayment",props:{paymentId:{},clientData:{default:void 0},clientKey:{default:void 0},amount:{},currency:{},publishableKey:{default:void 0},appearance:{default:void 0},showPayButton:{type:Boolean,default:!0},locale:{default:"en"},loader:{default:"auto"},returnUrl:{default:void 0}},emits:["submit","success","error","ready"],setup(l,{expose:m,emit:i}){const t=l,a=i,v=e.ref(),p=e.ref(!0),o=e.ref(!1),u=e.ref("");let y=null,b=null,f=null;const k=e.computed(()=>({EUR:"€",USD:"$",GBP:"£",CHF:"CHF",NOK:"kr",SEK:"kr",DKK:"kr",PLN:"zł",CZK:"Kč",HUF:"Ft"})[t.currency]||t.currency),E=e.computed(()=>t.amount.toFixed(2)),r=e.computed(()=>{if(t.clientData)try{const s=JSON.parse(t.clientData);return s.clientSecret||s.client_secret}catch{return}}),c=async()=>{if(!v.value)return;let s=t.publishableKey;if(!s&&t.clientData)try{const d=JSON.parse(t.clientData);s=d.publishableKey||d.publishable_key}catch{}if(!s){u.value="Publishable key is required",p.value=!1;return}try{p.value=!0,u.value="";const{loadStripe:d}=await import("@stripe/stripe-js");if(y=await d(s),!y)throw new Error("Failed to load Stripe");const n=r.value,D={appearance:t.appearance||{theme:"stripe",variables:{colorPrimary:"#0570de",colorBackground:"#ffffff",colorText:"#30313d",colorDanger:"#df1b41",fontFamily:'system-ui, -apple-system, BlinkMacSystemFont, "Segoe UI", Roboto, sans-serif',spacingUnit:"4px",borderRadius:"4px"}},loader:t.loader,locale:t.locale};n&&(D.clientSecret=n),b=y.elements(D),f=b.create("payment",{layout:"tabs",defaultValues:{billingDetails:{name:"",email:"",phone:""}}}),f.mount(v.value),f.on("ready",()=>{p.value=!1,a("ready")}),f.on("change",N=>{N.error?(u.value=N.error.message,a("error",N.error)):u.value=""})}catch(d){u.value=d instanceof Error?d.message:"Failed to initialize payment form",p.value=!1,a("error",d)}},g=async()=>{if(!(!y||!f)){o.value=!0,u.value="";try{const s=t.returnUrl||`${window.location.origin}/payment/return`,{error:d,paymentIntent:n}=await y.confirmPayment({elements:b,confirmParams:{return_url:s},redirect:"if_required"});d?(u.value=d.message||"Payment failed",a("error",d)):n?n.status==="succeeded"?a("success",{paymentIntent:n,status:"succeeded",message:"Payment completed successfully!"}):n.status==="processing"?a("success",{paymentIntent:n,status:"processing",message:"Payment is being processed..."}):a("submit",{paymentIntent:n,status:n.status}):a("submit",f)}catch(s){u.value=s instanceof Error?s.message:"Payment failed",a("error",s)}finally{o.value=!1}}},h=()=>{f&&(f.destroy(),f=null),b&&(b=null),y&&(y=null)};return e.onMounted(()=>{c()}),e.onUnmounted(()=>{h()}),e.watch(()=>t.currency,()=>{h(),c()}),e.watch([()=>t.publishableKey,()=>t.clientData],()=>{(t.publishableKey||t.clientData)&&(h(),c())}),m({destroyElements:h}),(s,d)=>(e.openBlock(),e.createElementBlock("div",R,[e.createElementVNode("div",{ref_key:"elementsContainer",ref:v,class:"elements-container"},null,512),p.value?(e.openBlock(),e.createElementBlock("div",A,[...d[0]||(d[0]=[e.createElementVNode("div",{class:"loading-spinner"},null,-1),e.createElementVNode("p",null,"Loading payment form...",-1)])])):e.createCommentVNode("",!0),u.value?(e.openBlock(),e.createElementBlock("div",F,[d[1]||(d[1]=e.createElementVNode("div",{class:"error-icon"}," ⚠️ ",-1)),e.createElementVNode("p",null,e.toDisplayString(u.value),1),e.createElementVNode("button",{class:"retry-btn",onClick:c}," Retry ")])):e.createCommentVNode("",!0),l.showPayButton&&!p.value&&!u.value?(e.openBlock(),e.createElementBlock("div",I,[e.createElementVNode("button",{disabled:o.value,class:"payment-button",onClick:g},e.toDisplayString(o.value?"Processing...":`Pay ${k.value}${E.value}`),9,$)])):e.createCommentVNode("",!0)]))}}),P=(l,m)=>{const i=l.__vccOpts||l;for(const[t,a]of m)i[t]=a;return i},M=P(x,[["__scopeId","data-v-adbdf3c5"]]),O=e.defineComponent({__name:"AdyenPayment",props:{paymentId:{},clientData:{},clientKey:{},environment:{},amount:{},currency:{},paymentData:{},onCancel:{type:Function}},emits:["submit","additionalDetails","error","ready","success"],setup(l,{emit:m}){const i=l,t=m,a=e.ref(null),v=()=>{if(!i.clientData)return console.error("No clientData provided"),null;try{const o=JSON.parse(i.clientData);return console.log("Parsed Adyen session data:",o),{id:o.id,sessionData:o.sessionData,amount:o.amount,reference:o.reference,returnUrl:o.returnUrl,merchantAccount:o.merchantAccount}}catch(o){return console.error("Failed to parse clientData:",o),null}},p=async()=>{var u;if(!i.clientKey||!a.value){console.error("Initialization failed: Missing clientKey or container.");return}const o=v();if(!o){console.error("Failed to parse session data"),t("error",new Error("Failed to parse session data"));return}try{const{AdyenCheckout:y,Card:b,ApplePay:f,GooglePay:k,Klarna:E,Blik:r,Dropin:c}=await import("@adyen/adyen-web"),g={environment:i.environment||"test",clientKey:i.clientKey,session:o,onPaymentCompleted:(n,D)=>{console.info("Payment Completed:",n,D),t("submit",n),n.resultCode==="Authorised"||n.resultCode==="Received"?(console.info("Payment Successful:",n),t("success",{status:"succeeded",message:"Payment completed successfully",resultCode:n.resultCode,pspReference:n.pspReference,paymentData:n})):n.resultCode==="Pending"?(console.info("Payment Pending:",n),t("success",{status:"processing",message:"Payment is being processed",resultCode:n.resultCode,pspReference:n.pspReference,paymentData:n})):(n.resultCode==="Refused"||n.resultCode==="Error")&&(console.error("Payment Failed:",n),t("error",{message:n.refusalReason||"Payment was declined",resultCode:n.resultCode,paymentData:n}))},onError:(n,D)=>{console.error("Adyen Error:",n.name,n.message,n.stack,D),t("error",n)}},h={showPayButton:!0,paymentMethodComponents:[b,f,k,E,r],paymentMethodsConfiguration:{card:{hasHolderName:!0,holderNameRequired:!0,billingAddressRequired:!1,enableStoreDetails:!1},applePay:{showPayButton:!0},googlePay:{showPayButton:!0},klarna:{useKlarnaWidget:!0},blik:{}}},s=await y(g);console.log("Adyen Checkout created:",s),console.log("Available payment methods from session:",(u=s.paymentMethodsResponse)==null?void 0:u.paymentMethods);const d=new c(s,h);console.log("Adyen Drop-in created with session payment methods"),a.value&&(d.mount(a.value),console.log("Adyen Drop-in mounted successfully"),t("ready"))}catch(y){console.error("Error creating Adyen Drop-in:",y),t("error",y)}};return e.onMounted(()=>{p()}),e.watch(()=>i.clientData,()=>{a.value&&(a.value.innerHTML="",p())}),(o,u)=>(e.openBlock(),e.createElementBlock("div",{ref_key:"dropinContainer",ref:a,class:"payment-dropin"},null,512))}}),H=P(O,[["__scopeId","data-v-ef2ec054"]]),T={class:"delayed-payment"},z={class:"payment-form"},q={class:"amount-display"},L={class:"amount-value"},J={key:0,class:"session-info"},G={key:0,class:"info-row"},j={class:"value"},W={key:1,class:"info-row"},X={class:"value"},Y={key:1,class:"error-message"},Z={class:"button-container"},Q=["disabled"],ee=e.defineComponent({__name:"DelayedPayment",props:{paymentId:{default:void 0},clientData:{default:void 0},amount:{},currency:{},tenantId:{default:void 0}},emits:["submit","success","error","ready"],setup(l,{expose:m,emit:i}){const t=l,a=i,v=e.ref(!1),p=e.ref(""),o=e.ref({}),u=e.computed(()=>({EUR:"€",USD:"$",GBP:"£",CHF:"CHF",NOK:"kr",SEK:"kr",DKK:"kr",PLN:"zł"})[t.currency]||t.currency),y=e.computed(()=>t.amount.toFixed(2)),b=e.computed(()=>o.value.invoiceNumber&&o.value.providerUid),f=()=>{if(!t.clientData){console.error("No clientData provided for delayed payment");return}try{const r=JSON.parse(t.clientData);console.log("Parsed delayed payment session data:",r),o.value={invoiceNumber:r.invoiceNumber,merchantReference:r.merchantReference,providerUid:r.providerUid,paymentUid:r.paymentUid,baseUrl:r.baseUrl},a("ready")}catch(r){console.error("Failed to parse clientData:",r),p.value="Invalid session data",a("error",r)}},k=async()=>{if(!(!b.value||v.value)){v.value=!0,p.value="";try{const r={provider:"delayed-payment",amount:t.amount,currency:t.currency,invoiceNumber:o.value.invoiceNumber,merchantReference:o.value.merchantReference,providerUid:o.value.providerUid,timestamp:new Date().toISOString()};if(a("submit",r),!t.paymentId)throw new Error("Payment ID not provided");const c=o.value.baseUrl||window.location.origin,g={"Content-Type":"application/json"};t.tenantId&&(g["X-Tenant-ID"]=t.tenantId);const h=await fetch(`${c}/api/v1/webhooks/delayed-payments/confirm/${t.paymentId}`,{method:"POST",headers:g});if(!h.ok){const s=await h.text();throw new Error(`Failed to confirm payment: ${s}`)}a("success",{status:"succeeded",message:"Payment confirmed successfully. You will receive a receipt shortly.",resultCode:"Authorised",invoiceNumber:o.value.invoiceNumber,providerUid:o.value.providerUid,paymentData:r})}catch(r){p.value=r instanceof Error?r.message:"Failed to confirm payment",a("error",r)}finally{v.value=!1}}},E=()=>{p.value=""};return e.onMounted(()=>{f()}),m({clearError:E}),(r,c)=>(e.openBlock(),e.createElementBlock("div",T,[e.createElementVNode("div",z,[c[4]||(c[4]=e.createElementVNode("div",{class:"info-section"},[e.createElementVNode("div",{class:"info-icon"}," 📄 "),e.createElementVNode("h3",{class:"info-title"}," Delayed Payment "),e.createElementVNode("p",{class:"info-description"}," Payment will be processed manually via invoice or bank transfer ")],-1)),e.createElementVNode("div",q,[c[0]||(c[0]=e.createElementVNode("span",{class:"amount-label"},"Amount to pay:",-1)),e.createElementVNode("span",L,e.toDisplayString(u.value)+e.toDisplayString(y.value),1)]),b.value?(e.openBlock(),e.createElementBlock("div",J,[o.value.invoiceNumber?(e.openBlock(),e.createElementBlock("div",G,[c[1]||(c[1]=e.createElementVNode("span",{class:"label"},"Invoice Number:",-1)),e.createElementVNode("span",j,e.toDisplayString(o.value.invoiceNumber),1)])):e.createCommentVNode("",!0),o.value.merchantReference?(e.openBlock(),e.createElementBlock("div",W,[c[2]||(c[2]=e.createElementVNode("span",{class:"label"},"Reference:",-1)),e.createElementVNode("span",X,e.toDisplayString(o.value.merchantReference),1)])):e.createCommentVNode("",!0)])):e.createCommentVNode("",!0),p.value?(e.openBlock(),e.createElementBlock("div",Y,[c[3]||(c[3]=e.createElementVNode("div",{class:"error-icon"}," ⚠️ ",-1)),e.createElementVNode("p",null,e.toDisplayString(p.value),1)])):e.createCommentVNode("",!0),e.createElementVNode("div",Z,[e.createElementVNode("button",{disabled:v.value||!b.value,class:"submit-button",onClick:k},e.toDisplayString(v.value?"Processing...":`Confirm Payment ${u.value}${y.value}`),9,Q)])])]))}}),te=P(ee,[["__scopeId","data-v-cb30346d"]]);exports.AdyenPayment=H;exports.DelayedPayment=te;exports.StripePayment=M;
|