@cohostvip/cohost-react 0.1.6 → 0.1.8

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.
@@ -13,6 +13,7 @@ export type CohostCheckoutContextType = {
13
13
  placeOrder: () => Promise<CartSession | undefined>;
14
14
  processPayment: (data: unknown) => Promise<unknown>;
15
15
  applyCoupon: (code: string) => Promise<void>;
16
+ removeCoupon: (id: string) => Promise<void>;
16
17
  };
17
18
  export declare const CohostCheckoutContext: React.Context<CohostCheckoutContextType | null>;
18
19
  export declare const CohostCheckoutProvider: React.FC<CohostCheckoutProviderProps>;
@@ -1 +1 @@
1
- {"version":3,"file":"CohostCheckoutContext.d.ts","sourceRoot":"","sources":["../../src/context/CohostCheckoutContext.tsx"],"names":[],"mappings":"AAAA,OAAO,KAAK,KAAK,MAAM,OAAO,CAAC;AAG/B,OAAO,KAAK,EAAE,WAAW,EAAE,oBAAoB,EAAE,MAAM,wBAAwB,CAAC;AAEhF,MAAM,MAAM,2BAA2B,GAAG;IACtC,aAAa,EAAE,MAAM,CAAC;IACtB,QAAQ,EAAE,KAAK,CAAC,SAAS,CAAC;CAC7B,CAAC;AAEF,MAAM,MAAM,yBAAyB,GAAG;IACpC,aAAa,EAAE,MAAM,CAAC;IACtB,WAAW,EAAE,WAAW,GAAG,IAAI,CAAC;IAChC,SAAS,EAAE,CAAC,OAAO,EAAE,MAAM,KAAK,OAAO,CAAC,MAAM,GAAG,IAAI,CAAC,CAAC;IACvD,UAAU,EAAE,CAAC,UAAU,EAAE,MAAM,EAAE,QAAQ,EAAE,MAAM,EAAE,OAAO,CAAC,EAAE,GAAG,KAAK,OAAO,CAAC,IAAI,CAAC,CAAC;IACnF,iBAAiB,EAAE,CAAC,IAAI,EAAE,OAAO,CAAC,oBAAoB,CAAC,KAAK,OAAO,CAAC,IAAI,CAAC,CAAC;IAC1E,UAAU,EAAE,MAAM,OAAO,CAAC,WAAW,GAAG,SAAS,CAAC,CAAC;IACnD,cAAc,EAAE,CAAC,IAAI,EAAE,OAAO,KAAK,OAAO,CAAC,OAAO,CAAC,CAAC;IACpD,WAAW,EAAE,CAAC,IAAI,EAAE,MAAM,KAAK,OAAO,CAAC,IAAI,CAAC,CAAC;CAChD,CAAC;AAGF,eAAO,MAAM,qBAAqB,iDAAwD,CAAC;AAE3F,eAAO,MAAM,sBAAsB,EAAE,KAAK,CAAC,EAAE,CAAC,2BAA2B,CAkIxE,CAAC;AAEF;;;GAGG;AACH,eAAO,MAAM,iBAAiB,QAAO,yBAIpC,CAAC"}
1
+ {"version":3,"file":"CohostCheckoutContext.d.ts","sourceRoot":"","sources":["../../src/context/CohostCheckoutContext.tsx"],"names":[],"mappings":"AAAA,OAAO,KAAK,KAAK,MAAM,OAAO,CAAC;AAG/B,OAAO,KAAK,EAAE,WAAW,EAAE,oBAAoB,EAAE,MAAM,wBAAwB,CAAC;AAEhF,MAAM,MAAM,2BAA2B,GAAG;IACtC,aAAa,EAAE,MAAM,CAAC;IACtB,QAAQ,EAAE,KAAK,CAAC,SAAS,CAAC;CAC7B,CAAC;AAEF,MAAM,MAAM,yBAAyB,GAAG;IACpC,aAAa,EAAE,MAAM,CAAC;IACtB,WAAW,EAAE,WAAW,GAAG,IAAI,CAAC;IAChC,SAAS,EAAE,CAAC,OAAO,EAAE,MAAM,KAAK,OAAO,CAAC,MAAM,GAAG,IAAI,CAAC,CAAC;IACvD,UAAU,EAAE,CAAC,UAAU,EAAE,MAAM,EAAE,QAAQ,EAAE,MAAM,EAAE,OAAO,CAAC,EAAE,GAAG,KAAK,OAAO,CAAC,IAAI,CAAC,CAAC;IACnF,iBAAiB,EAAE,CAAC,IAAI,EAAE,OAAO,CAAC,oBAAoB,CAAC,KAAK,OAAO,CAAC,IAAI,CAAC,CAAC;IAC1E,UAAU,EAAE,MAAM,OAAO,CAAC,WAAW,GAAG,SAAS,CAAC,CAAC;IACnD,cAAc,EAAE,CAAC,IAAI,EAAE,OAAO,KAAK,OAAO,CAAC,OAAO,CAAC,CAAC;IACpD,WAAW,EAAE,CAAC,IAAI,EAAE,MAAM,KAAK,OAAO,CAAC,IAAI,CAAC,CAAC;IAC7C,YAAY,EAAE,CAAC,EAAE,EAAE,MAAM,KAAK,OAAO,CAAC,IAAI,CAAC,CAAC;CAC/C,CAAC;AAGF,eAAO,MAAM,qBAAqB,iDAAwD,CAAC;AAE3F,eAAO,MAAM,sBAAsB,EAAE,KAAK,CAAC,EAAE,CAAC,2BAA2B,CAgJxE,CAAC;AAEF;;;GAGG;AACH,eAAO,MAAM,iBAAiB,QAAO,yBAIpC,CAAC"}
@@ -20,6 +20,18 @@ export const CohostCheckoutProvider = ({ cartSessionId, children, }) => {
20
20
  }
21
21
  catch (error) {
22
22
  console.error("Error applying coupon:", error);
23
+ throw error;
24
+ }
25
+ };
26
+ const removeCoupon = async (id) => {
27
+ assertCartSession();
28
+ try {
29
+ const updatedCart = await client.cart.deleteCoupon(cartSessionId, id);
30
+ setCartSession(updatedCart);
31
+ }
32
+ catch (error) {
33
+ console.error("Error removing coupon:", error);
34
+ throw error;
23
35
  }
24
36
  };
25
37
  const joinGroup = async (groupId) => {
@@ -103,6 +115,7 @@ export const CohostCheckoutProvider = ({ cartSessionId, children, }) => {
103
115
  joinGroup,
104
116
  processPayment,
105
117
  applyCoupon,
118
+ removeCoupon,
106
119
  }, children: children }));
107
120
  };
108
121
  /**
@@ -0,0 +1,15 @@
1
+ import React from 'react';
2
+ import { CreditCardInformation } from '../lib/tokenizers/types';
3
+ export type PaymentElementProviderProps = {
4
+ children: React.ReactNode;
5
+ };
6
+ export type PaymentElementContextType = {
7
+ tokenizeCard: (cardInfo: CreditCardInformation) => Promise<any>;
8
+ };
9
+ export declare const PaymentElementProvider: React.FC<PaymentElementProviderProps>;
10
+ /**
11
+ * Hook to access the current PaymentElementContext
12
+ * Must be used inside a <PaymentElementProvider>
13
+ */
14
+ export declare const usePaymentElement: () => PaymentElementContextType;
15
+ //# sourceMappingURL=PaymentElementContext.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"PaymentElementContext.d.ts","sourceRoot":"","sources":["../../src/context/PaymentElementContext.tsx"],"names":[],"mappings":"AAAA,OAAO,KAAyD,MAAM,OAAO,CAAC;AAE9E,OAAO,EAAE,qBAAqB,EAAa,MAAM,yBAAyB,CAAC;AAG3E,MAAM,MAAM,2BAA2B,GAAG;IACtC,QAAQ,EAAE,KAAK,CAAC,SAAS,CAAC;CAC7B,CAAC;AAEF,MAAM,MAAM,yBAAyB,GAAG;IACpC,YAAY,EAAE,CAAC,QAAQ,EAAE,qBAAqB,KAAK,OAAO,CAAC,GAAG,CAAC,CAAC;CACnE,CAAC;AAUF,eAAO,MAAM,sBAAsB,EAAE,KAAK,CAAC,EAAE,CAAC,2BAA2B,CAkDxE,CAAC;AAEF;;;GAGG;AACH,eAAO,MAAM,iBAAiB,QAAO,yBAIpC,CAAC"}
@@ -0,0 +1,50 @@
1
+ import { jsx as _jsx } from "react/jsx-runtime";
2
+ import { createContext, useContext, useEffect, useState } from 'react';
3
+ import { useCohostCheckout } from './CohostCheckoutContext';
4
+ import { authnetTokenizer } from '../lib/tokenizers/authnet';
5
+ const PaymentElementContext = createContext(null);
6
+ const tokenizers = {
7
+ 'authnet': authnetTokenizer
8
+ };
9
+ export const PaymentElementProvider = ({ children }) => {
10
+ const { cartSession } = useCohostCheckout();
11
+ const [paymentIntent, setPaymentIntent] = useState(null);
12
+ const [tokenizer, setTokenizer] = useState(null);
13
+ const tokenizeCard = async (cardInfo) => {
14
+ if (!tokenizer) {
15
+ throw new Error("Tokenizer not found");
16
+ }
17
+ const paymentIntent = cartSession?.meta?.paymentIntent;
18
+ if (!paymentIntent) {
19
+ throw new Error("Payment intent not found");
20
+ }
21
+ return await tokenizer.tokenize(cardInfo, paymentIntent);
22
+ };
23
+ useEffect(() => {
24
+ if (!tokenizer) {
25
+ return;
26
+ }
27
+ tokenizer.registerScripts();
28
+ }, [tokenizer]);
29
+ useEffect(() => {
30
+ if (paymentIntent?.provider) {
31
+ setTokenizer(tokenizers[paymentIntent.provider] || null);
32
+ }
33
+ }, [paymentIntent]);
34
+ useEffect(() => {
35
+ setPaymentIntent(cartSession?.meta?.paymentIntent || null);
36
+ }, [cartSession]);
37
+ return (_jsx(PaymentElementContext.Provider, { value: {
38
+ tokenizeCard
39
+ }, children: children }));
40
+ };
41
+ /**
42
+ * Hook to access the current PaymentElementContext
43
+ * Must be used inside a <PaymentElementProvider>
44
+ */
45
+ export const usePaymentElement = () => {
46
+ const ctx = useContext(PaymentElementContext);
47
+ if (!ctx)
48
+ throw new Error("usePaymentElement must be used within a PaymentElementProvider");
49
+ return ctx;
50
+ };
package/dist/index.d.ts CHANGED
@@ -1,5 +1,7 @@
1
1
  export { CohostCheckoutProvider, CohostCheckoutContext, useCohostCheckout } from './context/CohostCheckoutContext';
2
2
  export { CohostEventProvider, useCohostEvent } from './context/CohostEventContext';
3
3
  export { CohostProvider, type CohostProviderProps } from './context/CohostContext';
4
+ export { PaymentElementProvider } from './context/PaymentElementContext';
5
+ export { CreditCardInformation } from './lib/tokenizers/types';
4
6
  export { useCohost } from './hooks/useCohost';
5
7
  //# sourceMappingURL=index.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,sBAAsB,EAAE,qBAAqB,EAAE,iBAAiB,EAAE,MAAM,iCAAiC,CAAC;AACnH,OAAO,EAAE,mBAAmB,EAAE,cAAc,EAAE,MAAM,8BAA8B,CAAC;AACnF,OAAO,EAAE,cAAc,EAAE,KAAK,mBAAmB,EAAE,MAAM,yBAAyB,CAAC;AACnF,OAAO,EAAE,SAAS,EAAE,MAAM,mBAAmB,CAAC"}
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,sBAAsB,EAAE,qBAAqB,EAAE,iBAAiB,EAAE,MAAM,iCAAiC,CAAC;AACnH,OAAO,EAAE,mBAAmB,EAAE,cAAc,EAAE,MAAM,8BAA8B,CAAC;AACnF,OAAO,EAAE,cAAc,EAAE,KAAK,mBAAmB,EAAE,MAAM,yBAAyB,CAAC;AACnF,OAAO,EAAE,sBAAsB,EAAE,MAAM,iCAAiC,CAAC;AACzE,OAAO,EAAE,qBAAqB,EAAE,MAAM,wBAAwB,CAAC;AAC/D,OAAO,EAAE,SAAS,EAAE,MAAM,mBAAmB,CAAC"}
package/dist/index.js CHANGED
@@ -1,4 +1,5 @@
1
1
  export { CohostCheckoutProvider, CohostCheckoutContext, useCohostCheckout } from './context/CohostCheckoutContext';
2
2
  export { CohostEventProvider, useCohostEvent } from './context/CohostEventContext';
3
3
  export { CohostProvider } from './context/CohostContext';
4
+ export { PaymentElementProvider } from './context/PaymentElementContext';
4
5
  export { useCohost } from './hooks/useCohost';
@@ -0,0 +1,9 @@
1
+ import { Tokenizer } from "./types";
2
+ declare global {
3
+ interface Window {
4
+ Accept?: any;
5
+ }
6
+ }
7
+ declare const authnetTokenizer: Tokenizer;
8
+ export { authnetTokenizer };
9
+ //# sourceMappingURL=authnet.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"authnet.d.ts","sourceRoot":"","sources":["../../../src/lib/tokenizers/authnet.ts"],"names":[],"mappings":"AAAA,OAAO,EAAyB,SAAS,EAAE,MAAM,SAAS,CAAC;AAE3D,OAAO,CAAC,MAAM,CAAC;IACX,UAAU,MAAM;QACZ,MAAM,CAAC,EAAE,GAAG,CAAC;KAChB;CACJ;AAiDD,QAAA,MAAM,gBAAgB,EAAE,SAGvB,CAAA;AACD,OAAO,EACH,gBAAgB,EACnB,CAAA"}
@@ -0,0 +1,45 @@
1
+ const tokenizeCard = async (cardInfo, paymentIntent) => {
2
+ return new Promise((resolve, reject) => {
3
+ const cardNumber = cardInfo.cardNumber.replace(/\s/g, '');
4
+ const expMonth = `${cardInfo.month}`.padStart(2, '0');
5
+ const expYear = cardInfo.year < 100 ? `20${cardInfo.year}` : `${cardInfo.year}`;
6
+ const cardData = {
7
+ cardNumber,
8
+ month: expMonth,
9
+ year: expYear,
10
+ cardCode: cardInfo.cardCode,
11
+ nameOnCard: cardInfo.nameOnCard,
12
+ };
13
+ const secureData = {
14
+ authData: {
15
+ apiLoginID: paymentIntent.apiLoginId,
16
+ clientKey: paymentIntent.publicClientKey,
17
+ },
18
+ cardData
19
+ };
20
+ window.Accept?.dispatchData(secureData, (response) => {
21
+ if (response.messages.resultCode === "Error") {
22
+ reject(response.messages.message[0].text);
23
+ }
24
+ else {
25
+ resolve(response);
26
+ }
27
+ });
28
+ });
29
+ };
30
+ const registerScripts = () => {
31
+ const scriptId = 'authnet-accept-js';
32
+ // Only add if not already in the DOM
33
+ if (!document.getElementById(scriptId)) {
34
+ const script = document.createElement('script');
35
+ script.id = scriptId;
36
+ script.src = 'https://jstest.authorize.net/v1/Accept.js';
37
+ script.async = true;
38
+ document.body.appendChild(script);
39
+ }
40
+ };
41
+ const authnetTokenizer = {
42
+ tokenize: tokenizeCard,
43
+ registerScripts
44
+ };
45
+ export { authnetTokenizer };
@@ -0,0 +1,12 @@
1
+ export interface CreditCardInformation {
2
+ cardNumber: string;
3
+ month: number;
4
+ year: number;
5
+ cardCode: string;
6
+ nameOnCard: string;
7
+ }
8
+ export type Tokenizer = {
9
+ tokenize: (cardInfo: CreditCardInformation, paymentIntent: any) => Promise<any>;
10
+ registerScripts: () => void;
11
+ };
12
+ //# sourceMappingURL=types.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"types.d.ts","sourceRoot":"","sources":["../../../src/lib/tokenizers/types.ts"],"names":[],"mappings":"AAAA,MAAM,WAAW,qBAAqB;IAClC,UAAU,EAAE,MAAM,CAAC;IACnB,KAAK,EAAE,MAAM,CAAC;IACd,IAAI,EAAE,MAAM,CAAC;IACb,QAAQ,EAAE,MAAM,CAAC;IACjB,UAAU,EAAE,MAAM,CAAC;CACtB;AAED,MAAM,MAAM,SAAS,GAAG;IACpB,QAAQ,EAAE,CAAC,QAAQ,EAAE,qBAAqB,EAAE,aAAa,EAAE,GAAG,KAAK,OAAO,CAAC,GAAG,CAAC,CAAC;IAChF,eAAe,EAAE,MAAM,IAAI,CAAC;CAC/B,CAAA"}
@@ -0,0 +1 @@
1
+ export {};
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@cohostvip/cohost-react",
3
- "version": "0.1.6",
3
+ "version": "0.1.8",
4
4
  "description": "React bindings for the Cohost API",
5
5
  "main": "dist/index.js",
6
6
  "module": "dist/index.js",
@@ -27,7 +27,7 @@
27
27
  "react-dom": "^18.0.0 || ^19.0.0"
28
28
  },
29
29
  "dependencies": {
30
- "@cohostvip/cohost-node": "0.1.6"
30
+ "@cohostvip/cohost-node": "0.1.8"
31
31
  },
32
32
  "devDependencies": {
33
33
  "@testing-library/jest-dom": "6.6.3",