@amos.com/react-amos-js 0.11.1 → 0.11.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 CHANGED
@@ -16,7 +16,7 @@ npm install @amos.com/react-amos-js @amos.com/node
16
16
 
17
17
  - React components for the iframe payment method forms: `AmosCreditCardPaymentMethodForm`, `AmosBankAccountPaymentMethodForm`, `AmosGooglePayButton`, `AmosApplePayButton`.
18
18
  - React-flavoured iframe message helpers that accept a React `ref`: `validateForm({ iframeRef })`, `confirmPayment({ iframeRef, token })`, `confirmSetup({ iframeRef, token })`, `resetForm({ iframeRef })`.
19
- - Re-exports of the `@amos.com/amos-js` helpers and types that come up in client code: `createMessage`, `decodeJwt`, `getEmbedOrigin`, `formatGooglePayPaymentData`, `resetForm`, `ConfirmResult`, `ConfirmationResult`, `ConfirmationIncompleteReason`, `FormattedGooglePayPaymentData`, `Appearance`, `Message`, etc.
19
+ - Re-exports of the `@amos.com/amos-js` helpers and types that come up in client code: `createMessage`, `decodeJwt`, `getEmbedOrigin`, `formatGooglePayPaymentData`, `resetForm`, `ConfirmResult`, `FormattedGooglePayPaymentData`, `Appearance`, `Message`, etc.
20
20
 
21
21
  > **Note:** `@amos.com/react-amos-js` is the client-side half of the Amos integration. For end-to-end payment processing you also need `@amos.com/node` on your server (creating payment intents, handling webhooks, etc.). The same `@amos.com/node` package is listed as a peer dependency so you can import its OpenAPI types in client-side TypeScript code.
22
22
 
@@ -43,8 +43,8 @@ The following flow is for credit card and bank account payment method types only
43
43
  3. **User clicks "Pay now" button**: call `validateForm({ iframeRef })`, which returns `Promise<true>` if the embedded form is valid and `Promise<false>` otherwise.
44
44
  4. **Create payment intent on your server**: use your server-side Amos client to call `POST /payment_intents`. You may also associate this payment intent with a new or existing customer via `POST /customers`. This must be server-side because it uses your private API key.
45
45
  5. **Return the payment intent token to the browser**: your backend responds with the embed token (`components["schemas"]["EmbedToken"]`) needed for confirmation.
46
- 6. **Confirm the payment intent from the client**: `await confirmPayment({ iframeRef, token })`. Deprecated alias: `confirmPaymentIntent`.
47
- 7. **Handle UX**: show the user a "processing" state while awaiting `confirmPayment`. Do not treat `{ status: "succeeded" }` as settlement proof — verify payment success on your backend via webhooks. Recoverable field errors stay in the iframe; `confirmPayment` still resolves `{ status: "failed" }`. Legacy hosts can keep optional `onResult`.
46
+ 6. **Confirm the payment intent from the client**: `await confirmPayment({ iframeRef, token })`.
47
+ 7. **Handle UX**: show the user a "processing" state while awaiting `confirmPayment`. Do not treat `{ status: "succeeded" }` as settlement proof — verify payment success on your backend via webhooks. Recoverable field errors stay in the iframe; `confirmPayment` still resolves `{ status: "failed" }`.
48
48
 
49
49
  ### Google Pay & Apple Pay
50
50
 
@@ -61,7 +61,7 @@ The key differences between the express and non-express payment flows are:
61
61
  Setup intents are used to save payment methods for future use (e.g. recurring payments, subscriptions) without charging the customer immediately. The flow is identical to a payment intent, except:
62
62
 
63
63
  - On the server, call `POST /setup_intents` instead of `POST /payment_intents`.
64
- - On the client, `await confirmSetup({ iframeRef, token })` instead of `confirmPayment({ iframeRef, token })`. Deprecated alias: `confirmSetupIntent`.
64
+ - On the client, `await confirmSetup({ iframeRef, token })` instead of `confirmPayment({ iframeRef, token })`.
65
65
  - Both resolve `{ status: "succeeded" | "failed" }`.
66
66
 
67
67
  The same `AmosCreditCardPaymentMethodForm` / `AmosBankAccountPaymentMethodForm` components support both payment intents and setup intents — they are differentiated by which confirmation function you call. For bank setup, pass `intent="setup"` so Connect / Plaid is always shown (no merchant ACH threshold lookup).
@@ -433,7 +433,7 @@ Validates the embedded card/bank iframe form before payment confirmation.
433
433
 
434
434
  ### `confirmPayment({ iframeRef, token })`
435
435
 
436
- Confirms a payment intent in the embedded iframe flow. Resolves `{ status: "succeeded" }` or `{ status: "failed" }`. Deprecated alias: `confirmPaymentIntent`.
436
+ Confirms a payment intent in the embedded iframe flow. Resolves `{ status: "succeeded" }` or `{ status: "failed" }`.
437
437
 
438
438
  **Parameters:**
439
439
 
@@ -444,7 +444,7 @@ Confirms a payment intent in the embedded iframe flow. Resolves `{ status: "succ
444
444
 
445
445
  ### `confirmSetup({ iframeRef, token })`
446
446
 
447
- Confirms a setup intent in the embedded iframe flow. Use this when saving a payment method for future use. Deprecated alias: `confirmSetupIntent`.
447
+ Confirms a setup intent in the embedded iframe flow. Use this when saving a payment method for future use.
448
448
 
449
449
  **Parameters:**
450
450
 
@@ -455,7 +455,7 @@ Confirms a setup intent in the embedded iframe flow. Use this when saving a paym
455
455
 
456
456
  ### `resetForm({ iframeRef })`
457
457
 
458
- Clears all field values and API errors in the embedded card/bank iframe form. Call after a failed or incomplete confirm when the customer wants to try again (for example, after a successful payment when starting a new one).
458
+ Clears all field values and API errors in the embedded card/bank iframe form. Call after a failed confirm when the customer wants to try again (for example, after a successful payment when starting a new one).
459
459
 
460
460
  **Parameters:**
461
461
 
@@ -477,7 +477,6 @@ Renders the secure credit card iframe form. A field-shaped skeleton is shown imm
477
477
 
478
478
  - `additionalFields` (`{ cardholderName: boolean }`) — set `additionalFields={{ cardholderName: true }}` to render the cardholder name field in the iframe (`false` by default)
479
479
  - `billingAddressRequirement` (`"country" | "full"`, defaults to `"country"`) — how much billing address the iframe collects. `country` collects country / region and, for CA / PR / GB / US, a postal code (labeled ZIP for the United States). `full` shows a full street address form with Smarty autocomplete.
480
- - `onResult` (`(result: ConfirmationResult) => void`) — **deprecated.** Prefer `await confirmPayment()` / `await confirmSetup()`. Still fired for existing hosts (`succeeded`, `failed`, or `incomplete` with `reason`). Not settlement proof; verify via webhooks.
481
480
  - `onValidityChange` (`(event: { isValid: boolean }) => void`) — called when form validity changes. `isValid` is true when all required fields are present and valid. Does not include PCI data. Use this to enable or disable your checkout button.
482
481
  - `onCardBrandChanged` (`(event: { brand: CardBrand | null }) => void`) — called when the detected card brand changes. `brand` is `"visa"`, `"mastercard"`, `"amex"`, `"discover"`, `"diners"`, or `"jcb"`, or `null` when the field is empty or the number does not match a known brand. Does not include PCI data.
483
482
 
@@ -585,12 +584,12 @@ Re-exports of the same advanced helpers exposed by `@amos.com/amos-js`. Most int
585
584
 
586
585
  ### Exported types
587
586
 
588
- `@amos.com/react-amos-js` re-exports everything from `@amos.com/amos-js`, including `ConfirmResult`, `ConfirmationResult` (deprecated), `ConfirmationIncompleteReason`, `PaymentMethodFormValidityChangeEvent`, `CardBrand`, `PaymentMethodFormCardBrandChangeEvent`, `FormattedGooglePayPaymentData`, `Message`, `Appearance`, `ThemeVariable`, and the per-form `*Options` / `*Controller` types. For OpenAPI schema types (e.g. `PaymentIntent`, `CreatePaymentIntentInput`), import `components` from `@amos.com/node`.
587
+ `@amos.com/react-amos-js` re-exports everything from `@amos.com/amos-js`, including `ConfirmResult`, `PaymentMethodFormValidityChangeEvent`, `CardBrand`, `PaymentMethodFormCardBrandChangeEvent`, `FormattedGooglePayPaymentData`, `Message`, `Appearance`, `ThemeVariable`, and the per-form `*Options` / `*Controller` types. For OpenAPI schema types (e.g. `PaymentIntent`, `CreatePaymentIntentInput`), import `components` from `@amos.com/node`.
589
588
 
590
589
  ## Notes and potential gotchas
591
590
 
592
591
  - **`ref` / `iframeRef`**: for card and bank forms, pass `ref={iframeRef}` to the form component. The same `iframeRef` must be used when calling `validateForm`, `confirmPayment`, `confirmSetup`, or `resetForm`. The component forwards the ref to the inner iframe.
593
- - **`confirmPayment` / `confirmSetup` are not settlement proof**: `{ status: "succeeded" }` means authorization succeeded (capture may still finish asynchronously). Verify payment or setup success on your backend via webhooks. Recoverable field errors stay in the iframe; the Promise still resolves `{ status: "failed" }`. Deprecated `onResult` still receives `incomplete` with `reason` (`"field_errors"` or `"validation_failed"`).
592
+ - **`confirmPayment` / `confirmSetup` are not settlement proof**: `{ status: "succeeded" }` means authorization succeeded (capture may still finish asynchronously). Verify payment or setup success on your backend via webhooks. Recoverable field errors stay in the iframe; the Promise still resolves `{ status: "failed" }`.
594
593
  - **Same components for payment vs setup intents**: `AmosCreditCardPaymentMethodForm` and `AmosBankAccountPaymentMethodForm` support both payment intents and setup intents. The flow differs only by which server call you make and which confirmation function you use (`confirmPayment` vs `confirmSetup`).
595
594
  - **Amount format**: for `AmosGooglePayButton`, `AmosApplePayButton`, and `AmosBankAccountPaymentMethodForm`, `amount` is a major-currency decimal string (e.g. `"50.00"` for $50.00). For `components["schemas"]["CreatePaymentIntentInput"]` on the server (card/bank create, and the object the wallet iframe sends to `onConfirm`), `amount` is a number in cents (e.g. `5000`).
596
595
  - **Plaid Link (ACH verification)**: load `cdn.plaid.com` from the **parent** document (see CSP on `AmosBankAccountPaymentMethodForm`). Merchants do not proxy Pay API; the bank iframe fetches the ACH threshold for payment intents and mints link tokens. Setup intents skip the merchant lookup and always require Plaid unless the render token disables verification. Confirm still goes through the bank iframe so Amos can attach `plaid` to the payment method.
package/dist/index.d.ts CHANGED
@@ -1,5 +1,5 @@
1
1
  /// <reference types="googlepay" />
2
- import { Appearance, ApplePayButtonElementProps, BillingAddressRequirement, ConfirmationResult, ConfirmResult, CreditCardAdditionalFields, GooglePayButtonElementProps } from '@amos.com/amos-js';
2
+ import { Appearance, ApplePayButtonElementProps, BillingAddressRequirement, ConfirmResult, CreditCardAdditionalFields, GooglePayButtonElementProps } from '@amos.com/amos-js';
3
3
  import { components } from '@amos.com/node';
4
4
  import { ComponentProps, Ref, RefObject } from 'react';
5
5
  export * from '@amos.com/amos-js';
@@ -33,21 +33,9 @@ export declare function confirmPayment({ iframeRef, token, }: {
33
33
  export declare function confirmSetup({ iframeRef, token, }: {
34
34
  iframeRef: IframeRef;
35
35
  } & Pick<components["schemas"]["EmbedToken"], "token">): Promise<ConfirmResult>;
36
- /**
37
- * @deprecated Use {@link confirmPayment}.
38
- */
39
- export declare function confirmPaymentIntent({ iframeRef, token, }: {
40
- iframeRef: IframeRef;
41
- } & Pick<components["schemas"]["EmbedToken"], "token">): Promise<ConfirmResult>;
42
- /**
43
- * @deprecated Use {@link confirmSetup}.
44
- */
45
- export declare function confirmSetupIntent({ iframeRef, token, }: {
46
- iframeRef: IframeRef;
47
- } & Pick<components["schemas"]["EmbedToken"], "token">): Promise<ConfirmResult>;
48
36
  /**
49
37
  * Clear all field values and API errors in the embedded card/bank iframe
50
- * form. Call after `onResult` when the customer wants to try again.
38
+ * form. Call after a failed confirm when the customer wants to try again.
51
39
  */
52
40
  export declare function resetForm({ iframeRef }: {
53
41
  iframeRef: IframeRef;
@@ -57,10 +45,6 @@ type IframePassthroughProps = Omit<ComponentProps<"iframe">, "src" | "title" | "
57
45
  type AmosCreditCardPaymentMethodFormProps = IframePassthroughProps & {
58
46
  renderToken: string;
59
47
  appearance?: Appearance;
60
- /**
61
- * @deprecated Prefer `await confirmPayment()` / `await confirmSetup()`.
62
- */
63
- onResult?: (result: ConfirmationResult) => void;
64
48
  /**
65
49
  * Called when form validity changes. `isValid` is true when all
66
50
  * required fields are present and valid. Does not include PCI data.
@@ -79,14 +63,10 @@ type AmosCreditCardPaymentMethodFormProps = IframePassthroughProps & {
79
63
  additionalFields?: CreditCardAdditionalFields;
80
64
  billingAddressRequirement?: BillingAddressRequirement;
81
65
  };
82
- export declare function AmosCreditCardPaymentMethodForm({ ref, renderToken, appearance, onResult, onValidityChange, onCardBrandChanged, additionalFields, billingAddressRequirement, style, ...rest }: AmosCreditCardPaymentMethodFormProps): import("react").JSX.Element;
66
+ export declare function AmosCreditCardPaymentMethodForm({ ref, renderToken, appearance, onValidityChange, onCardBrandChanged, additionalFields, billingAddressRequirement, style, ...rest }: AmosCreditCardPaymentMethodFormProps): import("react").JSX.Element;
83
67
  type AmosBankAccountPaymentMethodFormProps = IframePassthroughProps & {
84
68
  renderToken: string;
85
69
  appearance?: Appearance;
86
- /**
87
- * @deprecated Prefer `await confirmPayment()` / `await confirmSetup()`.
88
- */
89
- onResult?: (result: ConfirmationResult) => void;
90
70
  /**
91
71
  * Called when form validity changes. `isValid` is true when all
92
72
  * required fields are present and valid, or when Plaid Link has
@@ -119,7 +99,7 @@ type AmosBankAccountPaymentMethodFormProps = IframePassthroughProps & {
119
99
  */
120
100
  intent?: "payment" | "setup";
121
101
  };
122
- export declare function AmosBankAccountPaymentMethodForm({ ref, renderToken, appearance, onResult, onValidityChange, billingAddressRequirement, amount, intent, style, ...rest }: AmosBankAccountPaymentMethodFormProps): import("react").JSX.Element;
102
+ export declare function AmosBankAccountPaymentMethodForm({ ref, renderToken, appearance, onValidityChange, billingAddressRequirement, amount, intent, style, ...rest }: AmosBankAccountPaymentMethodFormProps): import("react").JSX.Element;
123
103
  type AmosGooglePayButtonProps = {
124
104
  ref?: ForwardedIframeRef;
125
105
  renderToken: string;
package/dist/index.js CHANGED
@@ -1 +1 @@
1
- Object.defineProperty(exports,Symbol.toStringTag,{value:`Module`});let e=require("@amos.com/amos-js"),t=require("react"),n=require("react/jsx-runtime");function r(e){return e?e.current??null:null}function i({iframeRef:t}){return(0,e.validateForm)({iframe:r(t)})}function a({iframeRef:t,token:n}){return(0,e.confirmPayment)({iframe:r(t),token:n})}function o({iframeRef:t,token:n}){return(0,e.confirmSetup)({iframe:r(t),token:n})}function s({iframeRef:t,token:n}){return(0,e.confirmPaymentIntent)({iframe:r(t),token:n})}function c({iframeRef:t,token:n}){return(0,e.confirmSetupIntent)({iframe:r(t),token:n})}function l({iframeRef:t}){(0,e.resetForm)({iframe:r(t)})}function u(e,t){typeof e==`function`?e(t):e&&(e.current=t)}function d(e,{style:t,className:n,id:r,...i}){n!=null&&(e.className=n),r!=null&&(e.id=r),Object.assign(e.style,t);for(let[t,n]of Object.entries(i))n!=null&&(t in e?Reflect.set(e,t,n):e.setAttribute(t,String(n)))}function f({containerRef:e,iframeRef:n,mount:r,options:i,remountDeps:a,iframePassthrough:o,updateDeps:s}){let c=(0,t.useRef)(null);(0,t.useLayoutEffect)(()=>{let t=e.current;if(!t)return;let a=r(t,i);return c.current=a,u(n,a.iframe),d(a.iframe,o),()=>{a.destroy(),c.current=null,u(n,null)}},[...a]),(0,t.useEffect)(()=>{c.current?.update(i)},[...s]),(0,t.useEffect)(()=>{let e=c.current?.iframe;e&&d(e,o)})}var p=`oklch(0.97 0 0)`;function m({height:r,borderRadius:i,containerRef:a}){return(0,t.useLayoutEffect)(()=>{(0,e.ensureSkeletonStyles)()},[]),(0,n.jsxs)(`div`,{style:{boxSizing:`border-box`,position:`relative`,width:`100%`,height:r,minHeight:r,overflow:`hidden`},children:[(0,n.jsx)(`div`,{className:`amos-js-form-skeleton-input amos-js-wallet-skeleton`,style:{position:`absolute`,inset:0,height:r,borderRadius:i,background:p,pointerEvents:`none`,zIndex:0},"aria-hidden":!0}),(0,n.jsx)(`div`,{ref:a,style:{position:`absolute`,inset:0,zIndex:1,width:`100%`,height:`100%`}})]})}function h({ref:r,renderToken:i,appearance:a,onResult:o,onValidityChange:s,onCardBrandChanged:c,additionalFields:l={cardholderName:!1},billingAddressRequirement:u=`country`,style:d,...p}){let m=(0,t.useRef)(null);return f({containerRef:m,iframeRef:r,mount:e.mountAmosCreditCardPaymentMethodForm,options:{renderToken:i,appearance:a,additionalFields:l,billingAddressRequirement:u,onResult:o,onValidityChange:s,onCardBrandChanged:c},remountDeps:[i,l.cardholderName,u],iframePassthrough:{style:d,...p},updateDeps:[a,l,u,o,s,c]}),(0,n.jsx)(`div`,{ref:m})}function g({ref:r,renderToken:i,appearance:a,onResult:o,onValidityChange:s,billingAddressRequirement:c=`country`,amount:l=`0`,intent:u=`payment`,style:d,...p}){let m=(0,t.useRef)(null);return f({containerRef:m,iframeRef:r,mount:e.mountAmosBankAccountPaymentMethodForm,options:{renderToken:i,appearance:a,billingAddressRequirement:c,amount:l,intent:u,onResult:o,onValidityChange:s},remountDeps:[i,c,u],iframePassthrough:{style:d,...p},updateDeps:[a,c,l,u,o,s]}),(0,n.jsx)(`div`,{ref:m})}function _({ref:r,renderToken:i,amount:a,merchantName:o,height:s=`48px`,buttonProps:c,iframeProps:l,onConfirm:u}){let d=(0,t.useRef)(null),p=(0,e.resolveWalletButtonSkeletonBorderRadius)({iframeStyle:l?.style,buttonProps:c});return f({containerRef:d,iframeRef:r,mount:e.mountAmosGooglePayButton,options:{renderToken:i,amount:a,merchantName:o,height:s,buttonProps:c,onConfirm:u},remountDeps:[i],iframePassthrough:l??{},updateDeps:[a,o,s,c,u]}),(0,n.jsx)(m,{height:s,borderRadius:p,containerRef:d})}function v({ref:r,renderToken:i,amount:a,merchantName:o,height:s=`48px`,buttonProps:c,iframeProps:l,onConfirm:u}){let d=(0,t.useRef)(null),p=(0,e.resolveWalletButtonSkeletonBorderRadius)({iframeStyle:l?.style,buttonProps:c});return f({containerRef:d,iframeRef:r,mount:e.mountAmosApplePayButton,options:{renderToken:i,amount:a,merchantName:o,height:s,buttonProps:c,onConfirm:u},remountDeps:[i],iframePassthrough:l??{},updateDeps:[a,o,s,c,u]}),(0,n.jsx)(m,{height:s,borderRadius:p,containerRef:d})}exports.AmosApplePayButton=v,exports.AmosBankAccountPaymentMethodForm=g,exports.AmosCreditCardPaymentMethodForm=h,exports.AmosGooglePayButton=_,exports.confirmPayment=a,exports.confirmPaymentIntent=s,exports.confirmSetup=o,exports.confirmSetupIntent=c,exports.resetForm=l,exports.validateForm=i,Object.keys(e).forEach(function(t){t!=="default"&&!Object.prototype.hasOwnProperty.call(exports,t)&&Object.defineProperty(exports,t,{enumerable:!0,get:function(){return e[t]}})});
1
+ Object.defineProperty(exports,Symbol.toStringTag,{value:`Module`});let e=require("@amos.com/amos-js"),t=require("react"),n=require("react/jsx-runtime");function r(e){return e?e.current??null:null}function i({iframeRef:t}){return(0,e.validateForm)({iframe:r(t)})}function a({iframeRef:t,token:n}){return(0,e.confirmPayment)({iframe:r(t),token:n})}function o({iframeRef:t,token:n}){return(0,e.confirmSetup)({iframe:r(t),token:n})}function s({iframeRef:t}){(0,e.resetForm)({iframe:r(t)})}function c(e,t){typeof e==`function`?e(t):e&&(e.current=t)}function l(e,{style:t,className:n,id:r,...i}){n!=null&&(e.className=n),r!=null&&(e.id=r),Object.assign(e.style,t);for(let[t,n]of Object.entries(i))n!=null&&(t in e?Reflect.set(e,t,n):e.setAttribute(t,String(n)))}function u({containerRef:e,iframeRef:n,mount:r,options:i,remountDeps:a,iframePassthrough:o,updateDeps:s}){let u=(0,t.useRef)(null);(0,t.useLayoutEffect)(()=>{let t=e.current;if(!t)return;let a=r(t,i);return u.current=a,c(n,a.iframe),l(a.iframe,o),()=>{a.destroy(),u.current=null,c(n,null)}},[...a]),(0,t.useEffect)(()=>{u.current?.update(i)},[...s]),(0,t.useEffect)(()=>{let e=u.current?.iframe;e&&l(e,o)})}var d=`oklch(0.97 0 0)`;function f({height:r,borderRadius:i,containerRef:a}){return(0,t.useLayoutEffect)(()=>{(0,e.ensureSkeletonStyles)()},[]),(0,n.jsxs)(`div`,{style:{boxSizing:`border-box`,position:`relative`,width:`100%`,height:r,minHeight:r,overflow:`hidden`},children:[(0,n.jsx)(`div`,{className:`amos-js-form-skeleton-input amos-js-wallet-skeleton`,style:{position:`absolute`,inset:0,height:r,borderRadius:i,background:d,pointerEvents:`none`,zIndex:0},"aria-hidden":!0}),(0,n.jsx)(`div`,{ref:a,style:{position:`absolute`,inset:0,zIndex:1,width:`100%`,height:`100%`}})]})}function p({ref:r,renderToken:i,appearance:a,onValidityChange:o,onCardBrandChanged:s,additionalFields:c={cardholderName:!1},billingAddressRequirement:l=`country`,style:d,...f}){let p=(0,t.useRef)(null);return u({containerRef:p,iframeRef:r,mount:e.mountAmosCreditCardPaymentMethodForm,options:{renderToken:i,appearance:a,additionalFields:c,billingAddressRequirement:l,onValidityChange:o,onCardBrandChanged:s},remountDeps:[i,c.cardholderName,l],iframePassthrough:{style:d,...f},updateDeps:[a,c,l,o,s]}),(0,n.jsx)(`div`,{ref:p})}function m({ref:r,renderToken:i,appearance:a,onValidityChange:o,billingAddressRequirement:s=`country`,amount:c=`0`,intent:l=`payment`,style:d,...f}){let p=(0,t.useRef)(null);return u({containerRef:p,iframeRef:r,mount:e.mountAmosBankAccountPaymentMethodForm,options:{renderToken:i,appearance:a,billingAddressRequirement:s,amount:c,intent:l,onValidityChange:o},remountDeps:[i,s,l],iframePassthrough:{style:d,...f},updateDeps:[a,s,c,l,o]}),(0,n.jsx)(`div`,{ref:p})}function h({ref:r,renderToken:i,amount:a,merchantName:o,height:s=`48px`,buttonProps:c,iframeProps:l,onConfirm:d}){let p=(0,t.useRef)(null),m=(0,e.resolveWalletButtonSkeletonBorderRadius)({iframeStyle:l?.style,buttonProps:c});return u({containerRef:p,iframeRef:r,mount:e.mountAmosGooglePayButton,options:{renderToken:i,amount:a,merchantName:o,height:s,buttonProps:c,onConfirm:d},remountDeps:[i],iframePassthrough:l??{},updateDeps:[a,o,s,c,d]}),(0,n.jsx)(f,{height:s,borderRadius:m,containerRef:p})}function g({ref:r,renderToken:i,amount:a,merchantName:o,height:s=`48px`,buttonProps:c,iframeProps:l,onConfirm:d}){let p=(0,t.useRef)(null),m=(0,e.resolveWalletButtonSkeletonBorderRadius)({iframeStyle:l?.style,buttonProps:c});return u({containerRef:p,iframeRef:r,mount:e.mountAmosApplePayButton,options:{renderToken:i,amount:a,merchantName:o,height:s,buttonProps:c,onConfirm:d},remountDeps:[i],iframePassthrough:l??{},updateDeps:[a,o,s,c,d]}),(0,n.jsx)(f,{height:s,borderRadius:m,containerRef:p})}exports.AmosApplePayButton=g,exports.AmosBankAccountPaymentMethodForm=m,exports.AmosCreditCardPaymentMethodForm=p,exports.AmosGooglePayButton=h,exports.confirmPayment=a,exports.confirmSetup=o,exports.resetForm=s,exports.validateForm=i,Object.keys(e).forEach(function(t){t!=="default"&&!Object.prototype.hasOwnProperty.call(exports,t)&&Object.defineProperty(exports,t,{enumerable:!0,get:function(){return e[t]}})});
package/dist/index.mjs CHANGED
@@ -1,69 +1,57 @@
1
- import { confirmPayment as e, confirmPaymentIntent as t, confirmSetup as n, confirmSetupIntent as r, ensureSkeletonStyles as i, mountAmosApplePayButton as a, mountAmosBankAccountPaymentMethodForm as o, mountAmosCreditCardPaymentMethodForm as s, mountAmosGooglePayButton as c, resetForm as l, resolveWalletButtonSkeletonBorderRadius as u, validateForm as d } from "@amos.com/amos-js";
2
- import { useEffect as f, useLayoutEffect as p, useRef as m } from "react";
3
- import { jsx as h, jsxs as g } from "react/jsx-runtime";
1
+ import { confirmPayment as e, confirmSetup as t, ensureSkeletonStyles as n, mountAmosApplePayButton as r, mountAmosBankAccountPaymentMethodForm as i, mountAmosCreditCardPaymentMethodForm as a, mountAmosGooglePayButton as o, resetForm as s, resolveWalletButtonSkeletonBorderRadius as c, validateForm as l } from "@amos.com/amos-js";
2
+ import { useEffect as u, useLayoutEffect as d, useRef as f } from "react";
3
+ import { jsx as p, jsxs as m } from "react/jsx-runtime";
4
4
  export * from "@amos.com/amos-js";
5
5
  //#region src/index.tsx
6
- function _(e) {
6
+ function h(e) {
7
7
  return e ? e.current ?? null : null;
8
8
  }
9
- function v({ iframeRef: e }) {
10
- return d({ iframe: _(e) });
9
+ function g({ iframeRef: e }) {
10
+ return l({ iframe: h(e) });
11
11
  }
12
- function y({ iframeRef: t, token: n }) {
12
+ function _({ iframeRef: t, token: n }) {
13
13
  return e({
14
- iframe: _(t),
14
+ iframe: h(t),
15
15
  token: n
16
16
  });
17
17
  }
18
- function b({ iframeRef: e, token: t }) {
19
- return n({
20
- iframe: _(e),
21
- token: t
22
- });
23
- }
24
- function x({ iframeRef: e, token: n }) {
18
+ function v({ iframeRef: e, token: n }) {
25
19
  return t({
26
- iframe: _(e),
20
+ iframe: h(e),
27
21
  token: n
28
22
  });
29
23
  }
30
- function S({ iframeRef: e, token: t }) {
31
- return r({
32
- iframe: _(e),
33
- token: t
34
- });
35
- }
36
- function C({ iframeRef: e }) {
37
- l({ iframe: _(e) });
24
+ function y({ iframeRef: e }) {
25
+ s({ iframe: h(e) });
38
26
  }
39
- function w(e, t) {
27
+ function b(e, t) {
40
28
  typeof e == "function" ? e(t) : e && (e.current = t);
41
29
  }
42
- function T(e, { style: t, className: n, id: r, ...i }) {
30
+ function x(e, { style: t, className: n, id: r, ...i }) {
43
31
  n != null && (e.className = n), r != null && (e.id = r), Object.assign(e.style, t);
44
32
  for (let [t, n] of Object.entries(i)) n != null && (t in e ? Reflect.set(e, t, n) : e.setAttribute(t, String(n)));
45
33
  }
46
- function E({ containerRef: e, iframeRef: t, mount: n, options: r, remountDeps: i, iframePassthrough: a, updateDeps: o }) {
47
- let s = m(null);
48
- p(() => {
34
+ function S({ containerRef: e, iframeRef: t, mount: n, options: r, remountDeps: i, iframePassthrough: a, updateDeps: o }) {
35
+ let s = f(null);
36
+ d(() => {
49
37
  let i = e.current;
50
38
  if (!i) return;
51
39
  let o = n(i, r);
52
- return s.current = o, w(t, o.iframe), T(o.iframe, a), () => {
53
- o.destroy(), s.current = null, w(t, null);
40
+ return s.current = o, b(t, o.iframe), x(o.iframe, a), () => {
41
+ o.destroy(), s.current = null, b(t, null);
54
42
  };
55
- }, [...i]), f(() => {
43
+ }, [...i]), u(() => {
56
44
  s.current?.update(r);
57
- }, [...o]), f(() => {
45
+ }, [...o]), u(() => {
58
46
  let e = s.current?.iframe;
59
- e && T(e, a);
47
+ e && x(e, a);
60
48
  });
61
49
  }
62
- var D = "oklch(0.97 0 0)";
63
- function O({ height: e, borderRadius: t, containerRef: n }) {
64
- return p(() => {
65
- i();
66
- }, []), /* @__PURE__ */ g("div", {
50
+ var C = "oklch(0.97 0 0)";
51
+ function w({ height: e, borderRadius: t, containerRef: r }) {
52
+ return d(() => {
53
+ n();
54
+ }, []), /* @__PURE__ */ m("div", {
67
55
  style: {
68
56
  boxSizing: "border-box",
69
57
  position: "relative",
@@ -72,20 +60,20 @@ function O({ height: e, borderRadius: t, containerRef: n }) {
72
60
  minHeight: e,
73
61
  overflow: "hidden"
74
62
  },
75
- children: [/* @__PURE__ */ h("div", {
63
+ children: [/* @__PURE__ */ p("div", {
76
64
  className: "amos-js-form-skeleton-input amos-js-wallet-skeleton",
77
65
  style: {
78
66
  position: "absolute",
79
67
  inset: 0,
80
68
  height: e,
81
69
  borderRadius: t,
82
- background: D,
70
+ background: C,
83
71
  pointerEvents: "none",
84
72
  zIndex: 0
85
73
  },
86
74
  "aria-hidden": !0
87
- }), /* @__PURE__ */ h("div", {
88
- ref: n,
75
+ }), /* @__PURE__ */ p("div", {
76
+ ref: r,
89
77
  style: {
90
78
  position: "absolute",
91
79
  inset: 0,
@@ -96,137 +84,133 @@ function O({ height: e, borderRadius: t, containerRef: n }) {
96
84
  })]
97
85
  });
98
86
  }
99
- function k({ ref: e, renderToken: t, appearance: n, onResult: r, onValidityChange: i, onCardBrandChanged: a, additionalFields: o = { cardholderName: !1 }, billingAddressRequirement: c = "country", style: l, ...u }) {
100
- let d = m(null);
101
- return E({
102
- containerRef: d,
87
+ function T({ ref: e, renderToken: t, appearance: n, onValidityChange: r, onCardBrandChanged: i, additionalFields: o = { cardholderName: !1 }, billingAddressRequirement: s = "country", style: c, ...l }) {
88
+ let u = f(null);
89
+ return S({
90
+ containerRef: u,
103
91
  iframeRef: e,
104
- mount: s,
92
+ mount: a,
105
93
  options: {
106
94
  renderToken: t,
107
95
  appearance: n,
108
96
  additionalFields: o,
109
- billingAddressRequirement: c,
110
- onResult: r,
111
- onValidityChange: i,
112
- onCardBrandChanged: a
97
+ billingAddressRequirement: s,
98
+ onValidityChange: r,
99
+ onCardBrandChanged: i
113
100
  },
114
101
  remountDeps: [
115
102
  t,
116
103
  o.cardholderName,
117
- c
104
+ s
118
105
  ],
119
106
  iframePassthrough: {
120
- style: l,
121
- ...u
107
+ style: c,
108
+ ...l
122
109
  },
123
110
  updateDeps: [
124
111
  n,
125
112
  o,
126
- c,
113
+ s,
127
114
  r,
128
- i,
129
- a
115
+ i
130
116
  ]
131
- }), /* @__PURE__ */ h("div", { ref: d });
117
+ }), /* @__PURE__ */ p("div", { ref: u });
132
118
  }
133
- function A({ ref: e, renderToken: t, appearance: n, onResult: r, onValidityChange: i, billingAddressRequirement: a = "country", amount: s = "0", intent: c = "payment", style: l, ...u }) {
134
- let d = m(null);
135
- return E({
136
- containerRef: d,
119
+ function E({ ref: e, renderToken: t, appearance: n, onValidityChange: r, billingAddressRequirement: a = "country", amount: o = "0", intent: s = "payment", style: c, ...l }) {
120
+ let u = f(null);
121
+ return S({
122
+ containerRef: u,
137
123
  iframeRef: e,
138
- mount: o,
124
+ mount: i,
139
125
  options: {
140
126
  renderToken: t,
141
127
  appearance: n,
142
128
  billingAddressRequirement: a,
143
- amount: s,
144
- intent: c,
145
- onResult: r,
146
- onValidityChange: i
129
+ amount: o,
130
+ intent: s,
131
+ onValidityChange: r
147
132
  },
148
133
  remountDeps: [
149
134
  t,
150
135
  a,
151
- c
136
+ s
152
137
  ],
153
138
  iframePassthrough: {
154
- style: l,
155
- ...u
139
+ style: c,
140
+ ...l
156
141
  },
157
142
  updateDeps: [
158
143
  n,
159
144
  a,
145
+ o,
160
146
  s,
161
- c,
162
- r,
163
- i
147
+ r
164
148
  ]
165
- }), /* @__PURE__ */ h("div", { ref: d });
149
+ }), /* @__PURE__ */ p("div", { ref: u });
166
150
  }
167
- function j({ ref: e, renderToken: t, amount: n, merchantName: r, height: i = "48px", buttonProps: a, iframeProps: o, onConfirm: s }) {
168
- let l = m(null), d = u({
169
- iframeStyle: o?.style,
151
+ function D({ ref: e, renderToken: t, amount: n, merchantName: r, height: i = "48px", buttonProps: a, iframeProps: s, onConfirm: l }) {
152
+ let u = f(null), d = c({
153
+ iframeStyle: s?.style,
170
154
  buttonProps: a
171
155
  });
172
- return E({
173
- containerRef: l,
156
+ return S({
157
+ containerRef: u,
174
158
  iframeRef: e,
175
- mount: c,
159
+ mount: o,
176
160
  options: {
177
161
  renderToken: t,
178
162
  amount: n,
179
163
  merchantName: r,
180
164
  height: i,
181
165
  buttonProps: a,
182
- onConfirm: s
166
+ onConfirm: l
183
167
  },
184
168
  remountDeps: [t],
185
- iframePassthrough: o ?? {},
169
+ iframePassthrough: s ?? {},
186
170
  updateDeps: [
187
171
  n,
188
172
  r,
189
173
  i,
190
174
  a,
191
- s
175
+ l
192
176
  ]
193
- }), /* @__PURE__ */ h(O, {
177
+ }), /* @__PURE__ */ p(w, {
194
178
  height: i,
195
179
  borderRadius: d,
196
- containerRef: l
180
+ containerRef: u
197
181
  });
198
182
  }
199
- function M({ ref: e, renderToken: t, amount: n, merchantName: r, height: i = "48px", buttonProps: o, iframeProps: s, onConfirm: c }) {
200
- let l = m(null), d = u({
183
+ function O({ ref: e, renderToken: t, amount: n, merchantName: i, height: a = "48px", buttonProps: o, iframeProps: s, onConfirm: l }) {
184
+ let u = f(null), d = c({
201
185
  iframeStyle: s?.style,
202
186
  buttonProps: o
203
187
  });
204
- return E({
205
- containerRef: l,
188
+ return S({
189
+ containerRef: u,
206
190
  iframeRef: e,
207
- mount: a,
191
+ mount: r,
208
192
  options: {
209
193
  renderToken: t,
210
194
  amount: n,
211
- merchantName: r,
212
- height: i,
195
+ merchantName: i,
196
+ height: a,
213
197
  buttonProps: o,
214
- onConfirm: c
198
+ onConfirm: l
215
199
  },
216
200
  remountDeps: [t],
217
201
  iframePassthrough: s ?? {},
218
202
  updateDeps: [
219
203
  n,
220
- r,
221
204
  i,
205
+ a,
222
206
  o,
223
- c
207
+ l
224
208
  ]
225
- }), /* @__PURE__ */ h(O, {
226
- height: i,
209
+ }), /* @__PURE__ */ p(w, {
210
+ height: a,
227
211
  borderRadius: d,
228
- containerRef: l
212
+ containerRef: u
229
213
  });
230
214
  }
231
215
  //#endregion
232
- export { M as AmosApplePayButton, A as AmosBankAccountPaymentMethodForm, k as AmosCreditCardPaymentMethodForm, j as AmosGooglePayButton, y as confirmPayment, x as confirmPaymentIntent, b as confirmSetup, S as confirmSetupIntent, C as resetForm, v as validateForm };
216
+ export { O as AmosApplePayButton, E as AmosBankAccountPaymentMethodForm, T as AmosCreditCardPaymentMethodForm, D as AmosGooglePayButton, _ as confirmPayment, v as confirmSetup, y as resetForm, g as validateForm };
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@amos.com/react-amos-js",
3
- "version": "0.11.1",
3
+ "version": "0.11.2",
4
4
  "main": "dist/index.js",
5
5
  "repository": {
6
6
  "type": "git",
@@ -48,7 +48,7 @@
48
48
  "vite-plugin-dts": "5.0.3"
49
49
  },
50
50
  "dependencies": {
51
- "@amos.com/amos-js": "0.11.2",
51
+ "@amos.com/amos-js": "0.11.3",
52
52
  "@types/googlepay": "0.7.12"
53
53
  },
54
54
  "peerDependencies": {
package/src/index.tsx CHANGED
@@ -4,13 +4,10 @@ import {
4
4
  type Appearance,
5
5
  type ApplePayButtonElementProps,
6
6
  confirmPayment as amosConfirmPayment,
7
- confirmPaymentIntent as amosConfirmPaymentIntent,
8
7
  confirmSetup as amosConfirmSetup,
9
- confirmSetupIntent as amosConfirmSetupIntent,
10
8
  resetForm as amosResetForm,
11
9
  validateForm as amosValidateForm,
12
10
  type BillingAddressRequirement,
13
- type ConfirmationResult,
14
11
  type ConfirmResult,
15
12
  type CreditCardAdditionalFields,
16
13
  ensureSkeletonStyles,
@@ -94,39 +91,9 @@ export function confirmSetup({
94
91
  return amosConfirmSetup({ iframe: resolveIframe(iframeRef), token });
95
92
  }
96
93
 
97
- /**
98
- * @deprecated Use {@link confirmPayment}.
99
- */
100
- export function confirmPaymentIntent({
101
- iframeRef,
102
- token,
103
- }: {
104
- iframeRef: IframeRef;
105
- } & Pick<
106
- components["schemas"]["EmbedToken"],
107
- "token"
108
- >): Promise<ConfirmResult> {
109
- return amosConfirmPaymentIntent({ iframe: resolveIframe(iframeRef), token });
110
- }
111
-
112
- /**
113
- * @deprecated Use {@link confirmSetup}.
114
- */
115
- export function confirmSetupIntent({
116
- iframeRef,
117
- token,
118
- }: {
119
- iframeRef: IframeRef;
120
- } & Pick<
121
- components["schemas"]["EmbedToken"],
122
- "token"
123
- >): Promise<ConfirmResult> {
124
- return amosConfirmSetupIntent({ iframe: resolveIframe(iframeRef), token });
125
- }
126
-
127
94
  /**
128
95
  * Clear all field values and API errors in the embedded card/bank iframe
129
- * form. Call after `onResult` when the customer wants to try again.
96
+ * form. Call after a failed confirm when the customer wants to try again.
130
97
  */
131
98
  export function resetForm({ iframeRef }: { iframeRef: IframeRef }): void {
132
99
  amosResetForm({ iframe: resolveIframe(iframeRef) });
@@ -286,10 +253,6 @@ function WalletButtonSlot({
286
253
  type AmosCreditCardPaymentMethodFormProps = IframePassthroughProps & {
287
254
  renderToken: string;
288
255
  appearance?: Appearance;
289
- /**
290
- * @deprecated Prefer `await confirmPayment()` / `await confirmSetup()`.
291
- */
292
- onResult?: (result: ConfirmationResult) => void;
293
256
  /**
294
257
  * Called when form validity changes. `isValid` is true when all
295
258
  * required fields are present and valid. Does not include PCI data.
@@ -318,7 +281,6 @@ export function AmosCreditCardPaymentMethodForm({
318
281
  ref,
319
282
  renderToken,
320
283
  appearance,
321
- onResult,
322
284
  onValidityChange,
323
285
  onCardBrandChanged,
324
286
  additionalFields = { cardholderName: false },
@@ -337,7 +299,6 @@ export function AmosCreditCardPaymentMethodForm({
337
299
  appearance,
338
300
  additionalFields,
339
301
  billingAddressRequirement,
340
- onResult,
341
302
  onValidityChange,
342
303
  onCardBrandChanged,
343
304
  },
@@ -351,7 +312,6 @@ export function AmosCreditCardPaymentMethodForm({
351
312
  appearance,
352
313
  additionalFields,
353
314
  billingAddressRequirement,
354
- onResult,
355
315
  onValidityChange,
356
316
  onCardBrandChanged,
357
317
  ],
@@ -363,10 +323,6 @@ export function AmosCreditCardPaymentMethodForm({
363
323
  type AmosBankAccountPaymentMethodFormProps = IframePassthroughProps & {
364
324
  renderToken: string;
365
325
  appearance?: Appearance;
366
- /**
367
- * @deprecated Prefer `await confirmPayment()` / `await confirmSetup()`.
368
- */
369
- onResult?: (result: ConfirmationResult) => void;
370
326
  /**
371
327
  * Called when form validity changes. `isValid` is true when all
372
328
  * required fields are present and valid, or when Plaid Link has
@@ -402,7 +358,6 @@ export function AmosBankAccountPaymentMethodForm({
402
358
  ref,
403
359
  renderToken,
404
360
  appearance,
405
- onResult,
406
361
  onValidityChange,
407
362
  billingAddressRequirement = "country",
408
363
  amount = "0",
@@ -422,7 +377,6 @@ export function AmosBankAccountPaymentMethodForm({
422
377
  billingAddressRequirement,
423
378
  amount,
424
379
  intent,
425
- onResult,
426
380
  onValidityChange,
427
381
  },
428
382
  remountDeps: [renderToken, billingAddressRequirement, intent],
@@ -432,7 +386,6 @@ export function AmosBankAccountPaymentMethodForm({
432
386
  billingAddressRequirement,
433
387
  amount,
434
388
  intent,
435
- onResult,
436
389
  onValidityChange,
437
390
  ],
438
391
  });