@reevit/react 0.4.2 → 0.4.4

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/index.mjs CHANGED
@@ -132,8 +132,8 @@ function createPaymentError(response, errorData) {
132
132
  }
133
133
  var ReevitAPIClient = class {
134
134
  constructor(config) {
135
- this.publicKey = config.publicKey;
136
- this.baseUrl = config.baseUrl || (isSandboxKey(config.publicKey) ? API_BASE_URL_SANDBOX : API_BASE_URL_PRODUCTION);
135
+ this.publicKey = config.publicKey || "";
136
+ this.baseUrl = config.baseUrl || (config.publicKey && isSandboxKey(config.publicKey) ? API_BASE_URL_SANDBOX : API_BASE_URL_PRODUCTION);
137
137
  this.timeout = config.timeout || DEFAULT_TIMEOUT;
138
138
  }
139
139
  /**
@@ -144,10 +144,12 @@ var ReevitAPIClient = class {
144
144
  const timeoutId = setTimeout(() => controller.abort(), this.timeout);
145
145
  const headers = {
146
146
  "Content-Type": "application/json",
147
- "X-Reevit-Key": this.publicKey,
148
147
  "X-Reevit-Client": "@reevit/react",
149
148
  "X-Reevit-Client-Version": "0.3.2"
150
149
  };
150
+ if (this.publicKey) {
151
+ headers["X-Reevit-Key"] = this.publicKey;
152
+ }
151
153
  if (method === "POST" || method === "PATCH" || method === "PUT") {
152
154
  headers["Idempotency-Key"] = `${Date.now()}-${Math.random().toString(36).substring(2, 15)}`;
153
155
  }
@@ -254,8 +256,9 @@ var ReevitAPIClient = class {
254
256
  * @param paymentId - The payment intent ID for Hubtel checkout
255
257
  * @returns Hubtel session with token, merchant account, and expiry information
256
258
  */
257
- async createHubtelSession(paymentId) {
258
- return this.request("POST", `/v1/payments/hubtel/sessions/${paymentId}`);
259
+ async createHubtelSession(paymentId, clientSecret) {
260
+ const query = clientSecret ? `?client_secret=${encodeURIComponent(clientSecret)}` : "";
261
+ return this.request("POST", `/v1/payments/hubtel/sessions/${paymentId}${query}`);
259
262
  }
260
263
  /**
261
264
  * Maps SDK payment method to backend format
@@ -285,6 +288,18 @@ var initialState = {
285
288
  error: null,
286
289
  result: null
287
290
  };
291
+ var DEFAULT_PUBLIC_API_BASE_URL = "https://api.reevit.io";
292
+ function buildPaymentLinkError(response, data) {
293
+ return {
294
+ code: data?.code || "payment_link_error",
295
+ message: data?.message || "Payment link request failed",
296
+ recoverable: true,
297
+ details: {
298
+ httpStatus: response.status,
299
+ ...data?.details || {}
300
+ }
301
+ };
302
+ }
288
303
  function reevitReducer(state, action) {
289
304
  switch (action.type) {
290
305
  case "INIT_START":
@@ -408,15 +423,48 @@ function useReevit(options) {
408
423
  const reference = config.reference || generateReference();
409
424
  const country = detectCountryFromCurrency(config.currency);
410
425
  const paymentMethod = method || config.paymentMethods?.[0] || "card";
411
- const { data, error } = await apiClient.createPaymentIntent(
412
- { ...config, reference },
413
- paymentMethod,
414
- country,
415
- {
416
- preferredProviders: options2?.preferredProvider ? [options2.preferredProvider] : void 0,
417
- allowedProviders: options2?.allowedProviders
426
+ let data;
427
+ let error;
428
+ if (config.paymentLinkCode) {
429
+ const response = await fetch(
430
+ `${apiBaseUrl || DEFAULT_PUBLIC_API_BASE_URL}/v1/pay/${config.paymentLinkCode}/pay`,
431
+ {
432
+ method: "POST",
433
+ headers: {
434
+ "Content-Type": "application/json",
435
+ "Idempotency-Key": `${Date.now()}-${Math.random().toString(36).substring(2, 15)}`
436
+ },
437
+ body: JSON.stringify({
438
+ amount: config.amount,
439
+ email: config.email || "",
440
+ name: config.customerName || "",
441
+ phone: config.phone || "",
442
+ method: paymentMethod,
443
+ country,
444
+ provider: options2?.preferredProvider || options2?.allowedProviders?.[0],
445
+ custom_fields: config.customFields
446
+ })
447
+ }
448
+ );
449
+ const responseData = await response.json().catch(() => ({}));
450
+ if (!response.ok) {
451
+ error = buildPaymentLinkError(response, responseData);
452
+ } else {
453
+ data = responseData;
418
454
  }
419
- );
455
+ } else {
456
+ const result = await apiClient.createPaymentIntent(
457
+ { ...config, reference },
458
+ paymentMethod,
459
+ country,
460
+ {
461
+ preferredProviders: options2?.preferredProvider ? [options2.preferredProvider] : void 0,
462
+ allowedProviders: options2?.allowedProviders
463
+ }
464
+ );
465
+ data = result.data;
466
+ error = result.error;
467
+ }
420
468
  if (error) {
421
469
  dispatch({ type: "INIT_ERROR", payload: error });
422
470
  onError?.(error);
@@ -581,14 +629,6 @@ function detectCountryFromCurrency(currency) {
581
629
  };
582
630
  return currencyToCountry[currency.toUpperCase()] || "GH";
583
631
  }
584
- var pspNames = {
585
- hubtel: "Hubtel",
586
- paystack: "Paystack",
587
- flutterwave: "Flutterwave",
588
- monnify: "Monnify",
589
- mpesa: "M-Pesa",
590
- stripe: "Stripe"
591
- };
592
632
  var methodConfig = {
593
633
  card: {
594
634
  label: "Card",
@@ -611,28 +651,31 @@ function PaymentMethodSelector({
611
651
  selectedMethod,
612
652
  onSelect,
613
653
  disabled = false,
614
- provider
654
+ provider,
655
+ layout = "list",
656
+ showLabel = true
615
657
  }) {
616
658
  const getMethodLabel = (method, psp) => {
617
659
  const config = methodConfig[method];
618
- if (psp?.toLowerCase().includes("hubtel") && method === "mobile_money") {
619
- return `Pay with ${pspNames[psp.toLowerCase()] || "Hubtel"}`;
620
- }
621
660
  return config.label;
622
661
  };
623
662
  const getMethodDescription = (method, psp) => {
624
663
  const config = methodConfig[method];
625
664
  if (psp?.toLowerCase().includes("hubtel")) {
626
- return "Card, Mobile Money, and Bank Transfer";
665
+ return config.description;
627
666
  }
628
667
  return config.description;
629
668
  };
630
- return /* @__PURE__ */ jsxs("div", { className: "reevit-method-selector", children: [
631
- /* @__PURE__ */ jsx("div", { className: "reevit-method-selector__label", children: "Select payment method" }),
632
- /* @__PURE__ */ jsx("div", { className: "reevit-method-selector__options", children: methods.map((method) => {
669
+ const isGrid = layout === "grid";
670
+ return /* @__PURE__ */ jsxs("div", { className: cn("reevit-method-selector", isGrid && "reevit-method-selector--grid"), children: [
671
+ showLabel && /* @__PURE__ */ jsx("div", { className: "reevit-method-selector__label", children: "Select payment method" }),
672
+ /* @__PURE__ */ jsx("div", { className: cn(
673
+ "reevit-method-selector__options",
674
+ isGrid ? "reevit-method-selector__options--grid" : "reevit-method-selector__options--list"
675
+ ), children: methods.map((method, index) => {
633
676
  const config = methodConfig[method];
634
677
  const isSelected = selectedMethod === method;
635
- const methodLabel = getMethodLabel(method, provider);
678
+ const methodLabel = getMethodLabel(method);
636
679
  const methodDescription = getMethodDescription(method, provider);
637
680
  return /* @__PURE__ */ jsxs(
638
681
  "button",
@@ -640,28 +683,24 @@ function PaymentMethodSelector({
640
683
  type: "button",
641
684
  className: cn(
642
685
  "reevit-method-option",
686
+ isGrid ? "reevit-method-option--grid" : "reevit-method-option--list",
643
687
  isSelected && "reevit-method-option--selected",
644
688
  disabled && "reevit-method-option--disabled"
645
689
  ),
690
+ style: {
691
+ animationDelay: `${index * 0.05}s`
692
+ },
646
693
  onClick: () => onSelect(method),
647
694
  disabled,
648
695
  "aria-pressed": isSelected,
649
696
  children: [
650
- /* @__PURE__ */ jsx("span", { className: "reevit-method-option__icon", children: config.icon }),
697
+ /* @__PURE__ */ jsx("span", { className: "reevit-method-option__icon-wrapper", children: /* @__PURE__ */ jsx("span", { className: "reevit-method-option__icon", children: config.icon }) }),
651
698
  /* @__PURE__ */ jsxs("div", { className: "reevit-method-option__content", children: [
652
699
  /* @__PURE__ */ jsx("span", { className: "reevit-method-option__label", children: methodLabel }),
653
- /* @__PURE__ */ jsx("span", { className: "reevit-method-option__description", children: methodDescription })
700
+ !isGrid && /* @__PURE__ */ jsx("span", { className: "reevit-method-option__description", children: methodDescription })
654
701
  ] }),
655
- isSelected && /* @__PURE__ */ jsx("span", { className: "reevit-method-option__check", children: /* @__PURE__ */ jsx("svg", { width: "20", height: "20", viewBox: "0 0 20 20", fill: "none", children: /* @__PURE__ */ jsx(
656
- "path",
657
- {
658
- d: "M16.667 5L7.5 14.167 3.333 10",
659
- stroke: "currentColor",
660
- strokeWidth: "2",
661
- strokeLinecap: "round",
662
- strokeLinejoin: "round"
663
- }
664
- ) }) })
702
+ !isGrid && isSelected && /* @__PURE__ */ jsx("span", { className: "reevit-method-option__check", children: /* @__PURE__ */ jsx("svg", { width: "20", height: "20", viewBox: "0 0 24 24", fill: "none", stroke: "currentColor", strokeWidth: "3", strokeLinecap: "round", strokeLinejoin: "round", children: /* @__PURE__ */ jsx("polyline", { points: "20 6 9 17 4 12" }) }) }),
703
+ !isGrid && !isSelected && /* @__PURE__ */ jsx("span", { className: "reevit-method-option__chevron", children: /* @__PURE__ */ jsx("svg", { width: "16", height: "16", viewBox: "0 0 24 24", fill: "none", stroke: "currentColor", strokeWidth: "2.5", strokeLinecap: "round", strokeLinejoin: "round", children: /* @__PURE__ */ jsx("polyline", { points: "9 18 15 12 9 6" }) }) })
665
704
  ]
666
705
  },
667
706
  method
@@ -678,7 +717,8 @@ function MobileMoneyForm({
678
717
  onSubmit,
679
718
  onCancel,
680
719
  isLoading = false,
681
- initialPhone = ""
720
+ initialPhone = "",
721
+ hideCancel = false
682
722
  }) {
683
723
  const [phone, setPhone] = useState(initialPhone);
684
724
  const [network, setNetwork] = useState(null);
@@ -763,7 +803,7 @@ function MobileMoneyForm({
763
803
  )) })
764
804
  ] }),
765
805
  /* @__PURE__ */ jsxs("div", { className: "reevit-momo-form__actions", children: [
766
- /* @__PURE__ */ jsx(
806
+ !hideCancel && /* @__PURE__ */ jsx(
767
807
  "button",
768
808
  {
769
809
  type: "button",
@@ -805,11 +845,11 @@ var paystack_default = "data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAyAAAAMOCA
805
845
  // src/assets/providers/stripe.png
806
846
  var stripe_default = "data:image/png;base64,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";
807
847
  var providerMeta = {
808
- paystack: { logo: paystack_default, hint: "Card & MoMo" },
848
+ paystack: { logo: paystack_default, hint: "Card & Mobile Money" },
809
849
  stripe: { logo: stripe_default, hint: "Card payments" },
810
850
  flutterwave: { logo: flutterwave_default, hint: "Global methods" },
811
- hubtel: { logo: hubtel_default, hint: "Mobile money" },
812
- monnify: { logo: monnify_default, hint: "Bank & card" },
851
+ hubtel: { logo: hubtel_default, hint: "Mobile Money & Card" },
852
+ monnify: { logo: monnify_default, hint: "Bank & Card" },
813
853
  mpesa: { logo: mpesa_default, hint: "M-Pesa" }
814
854
  };
815
855
  var methodLabels = {
@@ -819,54 +859,100 @@ var methodLabels = {
819
859
  };
820
860
  function formatMethods(methods) {
821
861
  if (!methods.length) return "Payment methods";
822
- return methods.map((method) => methodLabels[method]).join(" \u2022 ");
862
+ return methods.map((method) => methodLabels[method]).join(", ");
863
+ }
864
+ function sanitizeMethods(providerId, methods) {
865
+ if (providerId.toLowerCase().includes("hubtel")) {
866
+ return methods.filter((method) => method === "card" || method === "mobile_money");
867
+ }
868
+ return methods;
823
869
  }
824
870
  function ProviderSelector({
825
871
  providers,
826
872
  selectedProvider,
827
873
  onSelect,
828
- disabled = false
874
+ disabled = false,
875
+ theme,
876
+ selectedMethod,
877
+ onMethodSelect,
878
+ renderMethodContent
829
879
  }) {
880
+ const useBorder = theme?.pspSelectorUseBorder ?? false;
881
+ const bgColor = theme?.pspSelectorBgColor || "#0a0a0a";
882
+ const textColor = theme?.pspSelectorTextColor || "#ffffff";
883
+ const borderColor = theme?.pspSelectorBorderColor || "#374151";
884
+ const getOptionStyle = (isSelected) => {
885
+ if (useBorder) {
886
+ return {
887
+ backgroundColor: "transparent",
888
+ border: `2px solid ${isSelected ? borderColor : "#374151"}`,
889
+ color: isSelected ? textColor : "var(--reevit-text)"
890
+ };
891
+ }
892
+ return {
893
+ backgroundColor: isSelected ? bgColor : "transparent",
894
+ border: `2px solid ${isSelected ? bgColor : "#374151"}`,
895
+ color: isSelected ? textColor : "var(--reevit-text)"
896
+ };
897
+ };
830
898
  return /* @__PURE__ */ jsxs("div", { className: "reevit-psp-selector", children: [
831
- /* @__PURE__ */ jsx("div", { className: "reevit-psp-selector__label", children: "Choose your payment provider" }),
899
+ /* @__PURE__ */ jsx("div", { className: "reevit-psp-selector__label", children: "Select payment provider" }),
832
900
  /* @__PURE__ */ jsx("div", { className: "reevit-psp-selector__options", children: providers.map((provider) => {
833
901
  const meta = providerMeta[provider.provider] || {
834
902
  logo: void 0,
835
903
  hint: "Payment methods"
836
904
  };
905
+ const providerMethods = sanitizeMethods(provider.provider, provider.methods);
837
906
  const isSelected = selectedProvider === provider.provider;
838
907
  const fallbackInitial = provider.name.slice(0, 1).toUpperCase();
839
- return /* @__PURE__ */ jsxs(
840
- "button",
841
- {
842
- type: "button",
843
- className: cn(
844
- "reevit-psp-option",
845
- isSelected && "reevit-psp-option--selected",
846
- disabled && "reevit-psp-option--disabled"
847
- ),
848
- onClick: () => onSelect(provider.provider),
849
- disabled,
850
- "aria-pressed": isSelected,
851
- children: [
852
- /* @__PURE__ */ jsx("span", { className: "reevit-psp-option__logo", "aria-hidden": "true", children: meta.logo ? /* @__PURE__ */ jsx(
853
- "img",
854
- {
855
- src: meta.logo,
856
- alt: "",
857
- className: "reevit-psp-option__logo-img",
858
- loading: "lazy"
859
- }
860
- ) : /* @__PURE__ */ jsx("span", { className: "reevit-psp-option__logo-fallback", children: fallbackInitial }) }),
861
- /* @__PURE__ */ jsxs("div", { className: "reevit-psp-option__content", children: [
862
- /* @__PURE__ */ jsx("span", { className: "reevit-psp-option__name", children: provider.name }),
863
- /* @__PURE__ */ jsx("span", { className: "reevit-psp-option__methods", children: formatMethods(provider.methods) || meta.hint })
864
- ] }),
865
- /* @__PURE__ */ jsx("span", { className: "reevit-psp-option__check", "aria-hidden": "true", children: isSelected ? "Selected" : "Select" })
866
- ]
867
- },
868
- provider.provider
869
- );
908
+ const optionStyle = getOptionStyle(isSelected);
909
+ return /* @__PURE__ */ jsxs("div", { className: "reevit-psp-accordion", children: [
910
+ /* @__PURE__ */ jsxs(
911
+ "button",
912
+ {
913
+ type: "button",
914
+ className: cn(
915
+ "reevit-psp-option",
916
+ isSelected && "reevit-psp-option--selected",
917
+ disabled && "reevit-psp-option--disabled"
918
+ ),
919
+ style: optionStyle,
920
+ onClick: () => onSelect(provider.provider),
921
+ disabled,
922
+ "aria-expanded": isSelected,
923
+ children: [
924
+ /* @__PURE__ */ jsx("span", { className: "reevit-psp-option__logo", "aria-hidden": "true", children: meta.logo ? /* @__PURE__ */ jsx(
925
+ "img",
926
+ {
927
+ src: meta.logo,
928
+ alt: "",
929
+ className: "reevit-psp-option__logo-img",
930
+ loading: "lazy"
931
+ }
932
+ ) : /* @__PURE__ */ jsx("span", { className: "reevit-psp-option__logo-fallback", children: fallbackInitial }) }),
933
+ /* @__PURE__ */ jsxs("div", { className: "reevit-psp-option__content", children: [
934
+ /* @__PURE__ */ jsx("span", { className: "reevit-psp-option__name", children: provider.name }),
935
+ /* @__PURE__ */ jsx("span", { className: "reevit-psp-option__methods", children: formatMethods(providerMethods) || meta.hint })
936
+ ] })
937
+ ]
938
+ }
939
+ ),
940
+ isSelected && onMethodSelect && /* @__PURE__ */ jsxs("div", { className: "reevit-psp-accordion__content", children: [
941
+ /* @__PURE__ */ jsx("div", { className: "reevit-psp-methods", children: /* @__PURE__ */ jsx(
942
+ PaymentMethodSelector,
943
+ {
944
+ methods: providerMethods,
945
+ selectedMethod: selectedMethod || null,
946
+ onSelect: onMethodSelect,
947
+ disabled,
948
+ provider: provider.provider,
949
+ layout: "list",
950
+ showLabel: false
951
+ }
952
+ ) }),
953
+ selectedMethod && renderMethodContent && /* @__PURE__ */ jsx("div", { className: "reevit-psp-accordion__method-content", children: renderMethodContent(provider.provider, selectedMethod) })
954
+ ] })
955
+ ] }, provider.provider);
870
956
  }) })
871
957
  ] });
872
958
  }
@@ -998,8 +1084,11 @@ function HubtelBridge({
998
1084
  phone,
999
1085
  description = "Payment",
1000
1086
  callbackUrl,
1087
+ apiBaseUrl,
1088
+ clientSecret,
1001
1089
  hubtelSessionToken,
1002
1090
  basicAuth,
1091
+ preferredMethod,
1003
1092
  onSuccess,
1004
1093
  onError,
1005
1094
  onClose,
@@ -1009,13 +1098,17 @@ function HubtelBridge({
1009
1098
  const checkoutRef = useRef(null);
1010
1099
  const [authValue, setAuthValue] = useState("");
1011
1100
  const [isLoading, setIsLoading] = useState(false);
1101
+ const [resolvedMerchantAccount, setResolvedMerchantAccount] = useState(merchantAccount);
1102
+ useEffect(() => {
1103
+ setResolvedMerchantAccount(merchantAccount);
1104
+ }, [merchantAccount]);
1012
1105
  useEffect(() => {
1013
1106
  const fetchAuth = async () => {
1014
1107
  if (hubtelSessionToken) {
1015
1108
  setIsLoading(true);
1016
1109
  try {
1017
- const client = createReevitClient({ publicKey });
1018
- const { data, error } = await client.createHubtelSession(paymentId);
1110
+ const client = createReevitClient({ publicKey, baseUrl: apiBaseUrl });
1111
+ const { data, error } = await client.createHubtelSession(paymentId, clientSecret);
1019
1112
  if (error) {
1020
1113
  onError({
1021
1114
  code: "SESSION_ERROR",
@@ -1026,6 +1119,9 @@ function HubtelBridge({
1026
1119
  }
1027
1120
  if (data) {
1028
1121
  setAuthValue(data.token);
1122
+ if (data.merchantAccount) {
1123
+ setResolvedMerchantAccount(data.merchantAccount);
1124
+ }
1029
1125
  }
1030
1126
  } catch (err) {
1031
1127
  onError({
@@ -1042,7 +1138,7 @@ function HubtelBridge({
1042
1138
  }
1043
1139
  };
1044
1140
  fetchAuth();
1045
- }, [paymentId, publicKey, hubtelSessionToken, basicAuth, onError]);
1141
+ }, [paymentId, publicKey, apiBaseUrl, clientSecret, hubtelSessionToken, basicAuth, onError]);
1046
1142
  const startPayment = useCallback(async () => {
1047
1143
  if (isLoading || !authValue) {
1048
1144
  return;
@@ -1050,20 +1146,23 @@ function HubtelBridge({
1050
1146
  try {
1051
1147
  const checkout = new CheckoutSdk();
1052
1148
  checkoutRef.current = checkout;
1149
+ const methodPreference = preferredMethod === "mobile_money" ? "momo" : preferredMethod === "card" ? "card" : void 0;
1053
1150
  const purchaseInfo = {
1054
1151
  amount: amount / 100,
1055
1152
  // Convert from minor to major units
1056
1153
  purchaseDescription: description,
1057
1154
  customerPhoneNumber: phone || "",
1058
- clientReference: reference || `hubtel_${Date.now()}`
1155
+ clientReference: reference || `hubtel_${Date.now()}`,
1156
+ ...methodPreference ? { paymentMethod: methodPreference } : {}
1059
1157
  };
1060
1158
  const config = {
1061
1159
  branding: "enabled",
1062
1160
  callbackUrl: callbackUrl || window.location.href,
1063
- merchantAccount: typeof merchantAccount === "string" ? parseInt(merchantAccount, 10) : merchantAccount,
1161
+ merchantAccount: typeof resolvedMerchantAccount === "string" ? parseInt(resolvedMerchantAccount, 10) : resolvedMerchantAccount,
1064
1162
  // Use session token or basicAuth for authentication
1065
1163
  // Session tokens are base64-encoded credentials fetched securely from the server
1066
- basicAuth: authValue || ""
1164
+ basicAuth: authValue || "",
1165
+ ...methodPreference ? { paymentMethod: methodPreference } : {}
1067
1166
  };
1068
1167
  checkout.openModal({
1069
1168
  purchaseInfo,
@@ -1107,7 +1206,7 @@ function HubtelBridge({
1107
1206
  };
1108
1207
  onError(error);
1109
1208
  }
1110
- }, [merchantAccount, amount, reference, phone, description, callbackUrl, authValue, isLoading, onSuccess, onError, onClose]);
1209
+ }, [merchantAccount, amount, reference, phone, description, callbackUrl, authValue, isLoading, preferredMethod, onSuccess, onError, onClose]);
1111
1210
  useEffect(() => {
1112
1211
  if (autoStart && !initialized.current && !isLoading && authValue) {
1113
1212
  initialized.current = true;
@@ -1121,17 +1220,20 @@ function HubtelBridge({
1121
1220
  }
1122
1221
  function openHubtelPopup(config) {
1123
1222
  const checkout = new CheckoutSdk();
1223
+ const methodPreference = config.preferredMethod === "mobile_money" ? "momo" : config.preferredMethod === "card" ? "card" : void 0;
1124
1224
  const purchaseInfo = {
1125
1225
  amount: config.amount,
1126
1226
  purchaseDescription: config.description,
1127
1227
  customerPhoneNumber: config.customerPhoneNumber || "",
1128
- clientReference: config.clientReference || `hubtel_${Date.now()}`
1228
+ clientReference: config.clientReference || `hubtel_${Date.now()}`,
1229
+ ...methodPreference ? { paymentMethod: methodPreference } : {}
1129
1230
  };
1130
1231
  const checkoutConfig = {
1131
1232
  branding: "enabled",
1132
1233
  callbackUrl: config.callbackUrl || window.location.href,
1133
1234
  merchantAccount: typeof config.merchantAccount === "string" ? parseInt(config.merchantAccount, 10) : config.merchantAccount,
1134
- basicAuth: config.basicAuth || ""
1235
+ basicAuth: config.basicAuth || "",
1236
+ ...methodPreference ? { paymentMethod: methodPreference } : {}
1135
1237
  };
1136
1238
  checkout.openModal({
1137
1239
  purchaseInfo,
@@ -1824,6 +1926,14 @@ function useReevitContext() {
1824
1926
  }
1825
1927
  return context;
1826
1928
  }
1929
+ var pspNames = {
1930
+ hubtel: "Hubtel",
1931
+ paystack: "Paystack",
1932
+ flutterwave: "Flutterwave",
1933
+ monnify: "Monnify",
1934
+ mpesa: "M-Pesa",
1935
+ stripe: "Stripe"
1936
+ };
1827
1937
  function ReevitCheckout({
1828
1938
  // Config
1829
1939
  publicKey,
@@ -1831,8 +1941,11 @@ function ReevitCheckout({
1831
1941
  currency,
1832
1942
  email = "",
1833
1943
  phone = "",
1944
+ customerName,
1834
1945
  reference,
1835
1946
  metadata,
1947
+ customFields,
1948
+ paymentLinkCode,
1836
1949
  paymentMethods = ["card", "mobile_money"],
1837
1950
  initialPaymentIntent,
1838
1951
  // Callbacks
@@ -1883,8 +1996,11 @@ function ReevitCheckout({
1883
1996
  currency,
1884
1997
  email,
1885
1998
  phone,
1999
+ customerName,
1886
2000
  reference,
1887
2001
  metadata,
2002
+ customFields,
2003
+ paymentLinkCode,
1888
2004
  paymentMethods,
1889
2005
  initialPaymentIntent
1890
2006
  },
@@ -1912,7 +2028,8 @@ function ReevitCheckout({
1912
2028
  const options = available.length > 0 ? available : fallbackProvider;
1913
2029
  return options.map((provider) => {
1914
2030
  const methods = provider.methods && provider.methods.length > 0 ? provider.methods : paymentMethods;
1915
- const filteredMethods = methods.filter((method) => paymentMethods.includes(method));
2031
+ const sanitizedMethods = provider.provider.toLowerCase().includes("hubtel") ? methods.filter((method) => method === "card" || method === "mobile_money") : methods;
2032
+ const filteredMethods = sanitizedMethods.filter((method) => paymentMethods.includes(method));
1916
2033
  return {
1917
2034
  ...provider,
1918
2035
  methods: filteredMethods
@@ -1933,10 +2050,10 @@ function ReevitCheckout({
1933
2050
  if (selectedProvider && providerOptions.some((provider) => provider.provider === selectedProvider)) {
1934
2051
  return;
1935
2052
  }
1936
- const recommended = paymentIntent?.recommendedPsp;
1937
- const resolved = providerOptions.find((provider) => provider.provider === recommended)?.provider || providerOptions[0].provider;
1938
- setSelectedProvider(resolved);
1939
- }, [paymentIntent?.recommendedPsp, providerOptions, selectedProvider]);
2053
+ if (providerOptions.length === 1) {
2054
+ setSelectedProvider(providerOptions[0].provider);
2055
+ }
2056
+ }, [providerOptions, selectedProvider]);
1940
2057
  useEffect(() => {
1941
2058
  if (!activeProvider || !selectedMethod) {
1942
2059
  return;
@@ -1947,13 +2064,17 @@ function ReevitCheckout({
1947
2064
  }, [activeProvider, selectedMethod, selectMethod]);
1948
2065
  useEffect(() => {
1949
2066
  if (isOpen && selectedMethod && paymentIntent && !showPSPBridge) {
2067
+ const psp = (selectedProvider || paymentIntent.recommendedPsp || "paystack").toLowerCase();
2068
+ const needsPhone = psp.includes("mpesa");
1950
2069
  if (selectedMethod === "card") {
1951
2070
  setShowPSPBridge(true);
1952
- } else if (selectedMethod === "mobile_money" && (momoData?.phone || phone)) {
1953
- setShowPSPBridge(true);
2071
+ } else if (selectedMethod === "mobile_money") {
2072
+ if (!needsPhone || (momoData?.phone || phone)) {
2073
+ setShowPSPBridge(true);
2074
+ }
1954
2075
  }
1955
2076
  }
1956
- }, [isOpen, selectedMethod, showPSPBridge, paymentIntent, momoData, phone]);
2077
+ }, [isOpen, selectedMethod, showPSPBridge, paymentIntent, momoData, phone, selectedProvider]);
1957
2078
  const handleOpen = useCallback(() => {
1958
2079
  if (controlledIsOpen !== void 0) return;
1959
2080
  setIsOpen(true);
@@ -1977,6 +2098,10 @@ function ReevitCheckout({
1977
2098
  const handleProviderSelect = useCallback(
1978
2099
  (provider) => {
1979
2100
  if (provider === selectedProvider) {
2101
+ setSelectedProvider(null);
2102
+ reset();
2103
+ setShowPSPBridge(false);
2104
+ setMomoData(null);
1980
2105
  return;
1981
2106
  }
1982
2107
  const providerMethods = providerOptions.find((option) => option.provider === provider)?.methods || paymentMethods;
@@ -1993,8 +2118,14 @@ function ReevitCheckout({
1993
2118
  if (!selectedMethod) return;
1994
2119
  if (selectedMethod === "card") {
1995
2120
  setShowPSPBridge(true);
2121
+ } else if (selectedMethod === "mobile_money") {
2122
+ const psp = (selectedProvider || paymentIntent?.recommendedPsp || "paystack").toLowerCase();
2123
+ const needsPhone = psp.includes("mpesa");
2124
+ if (!needsPhone || (momoData?.phone || phone)) {
2125
+ setShowPSPBridge(true);
2126
+ }
1996
2127
  }
1997
- }, [selectedMethod]);
2128
+ }, [selectedMethod, selectedProvider, paymentIntent, momoData, phone]);
1998
2129
  const handleMomoSubmit = useCallback(
1999
2130
  (data) => {
2000
2131
  setMomoData(data);
@@ -2051,13 +2182,13 @@ function ReevitCheckout({
2051
2182
  ] }) : null;
2052
2183
  const renderContent = () => {
2053
2184
  if (status === "loading" || status === "processing") {
2054
- return /* @__PURE__ */ jsxs("div", { className: "reevit-loading", children: [
2185
+ return /* @__PURE__ */ jsxs("div", { className: "reevit-loading reevit-animate-fade-in", children: [
2055
2186
  /* @__PURE__ */ jsx("div", { className: "reevit-spinner" }),
2056
2187
  /* @__PURE__ */ jsx("p", { children: status === "loading" ? "Preparing checkout..." : "Processing payment..." })
2057
2188
  ] });
2058
2189
  }
2059
2190
  if (status === "success" && result) {
2060
- return /* @__PURE__ */ jsxs("div", { className: "reevit-success", children: [
2191
+ return /* @__PURE__ */ jsxs("div", { className: "reevit-success reevit-animate-scale-in", children: [
2061
2192
  /* @__PURE__ */ jsx("div", { className: "reevit-success__icon", children: "\u2713" }),
2062
2193
  /* @__PURE__ */ jsx("h3", { children: "Payment Successful" }),
2063
2194
  /* @__PURE__ */ jsxs("p", { children: [
@@ -2067,7 +2198,7 @@ function ReevitCheckout({
2067
2198
  ] });
2068
2199
  }
2069
2200
  if (status === "failed" && error && !error.recoverable) {
2070
- return /* @__PURE__ */ jsxs("div", { className: "reevit-error", children: [
2201
+ return /* @__PURE__ */ jsxs("div", { className: "reevit-error reevit-animate-fade-in", children: [
2071
2202
  /* @__PURE__ */ jsx("div", { className: "reevit-error__icon", children: "\u2715" }),
2072
2203
  /* @__PURE__ */ jsx("h3", { children: "Payment Failed" }),
2073
2204
  /* @__PURE__ */ jsx("p", { children: error.message }),
@@ -2075,17 +2206,16 @@ function ReevitCheckout({
2075
2206
  ] });
2076
2207
  }
2077
2208
  const psp = selectedProvider || paymentIntent?.recommendedPsp || "paystack";
2209
+ const pspLower = psp.toLowerCase();
2078
2210
  if (showPSPBridge) {
2079
- const pspKey = paymentIntent?.pspPublicKey || publicKey;
2211
+ const pspKey = paymentIntent?.pspPublicKey || publicKey || "";
2080
2212
  const bridgeMetadata = {
2081
2213
  ...metadata,
2082
- // Override with correct payment intent ID for webhook routing
2083
- // This ensures webhook includes the correct ID to find the payment
2084
2214
  payment_id: paymentIntent?.id,
2085
2215
  connection_id: paymentIntent?.connectionId ?? metadata?.connection_id,
2086
2216
  customer_phone: momoData?.phone || phone
2087
2217
  };
2088
- switch (psp) {
2218
+ switch (pspLower) {
2089
2219
  case "paystack":
2090
2220
  return /* @__PURE__ */ jsx(
2091
2221
  PaystackBridge,
@@ -2118,6 +2248,9 @@ function ReevitCheckout({
2118
2248
  phone: momoData?.phone || phone,
2119
2249
  description: `Payment ${paymentIntent?.reference || reference || ""}`,
2120
2250
  hubtelSessionToken: paymentIntent?.id ? paymentIntent.id : void 0,
2251
+ clientSecret: paymentIntent?.clientSecret,
2252
+ apiBaseUrl,
2253
+ preferredMethod: selectedMethod || void 0,
2121
2254
  onSuccess: handlePSPSuccess,
2122
2255
  onError: (err) => handlePSPError(err),
2123
2256
  onClose: handlePSPClose
@@ -2135,7 +2268,7 @@ function ReevitCheckout({
2135
2268
  phone: momoData?.phone || phone,
2136
2269
  metadata: bridgeMetadata,
2137
2270
  onSuccess: handlePSPSuccess,
2138
- onError: (err) => handlePSPError(err),
2271
+ onError: handlePSPError,
2139
2272
  onClose: handlePSPClose
2140
2273
  }
2141
2274
  );
@@ -2152,21 +2285,8 @@ function ReevitCheckout({
2152
2285
  customerEmail: email,
2153
2286
  customerPhone: momoData?.phone || phone,
2154
2287
  metadata: bridgeMetadata,
2155
- onSuccess: (result2) => handlePSPSuccess({
2156
- paymentId: result2.transactionReference,
2157
- reference: result2.paymentReference,
2158
- amount: result2.amount,
2159
- currency: paymentIntent?.currency ?? currency,
2160
- paymentMethod: selectedMethod || "card",
2161
- psp: "monnify",
2162
- pspReference: result2.transactionReference,
2163
- status: "success"
2164
- }),
2165
- onError: (err) => handlePSPError({
2166
- code: err.code,
2167
- message: err.message,
2168
- recoverable: true
2169
- }),
2288
+ onSuccess: (res) => handlePSPSuccess({ ...res, psp: "monnify" }),
2289
+ onError: handlePSPError,
2170
2290
  onClose: handlePSPClose
2171
2291
  }
2172
2292
  );
@@ -2180,22 +2300,9 @@ function ReevitCheckout({
2180
2300
  currency: paymentIntent?.currency ?? currency,
2181
2301
  reference: paymentIntent?.reference || reference || `mpesa_${Date.now()}`,
2182
2302
  description: `Payment ${paymentIntent?.reference || reference || ""}`,
2183
- headers: { "x-reevit-public-key": publicKey },
2184
- onSuccess: (result2) => handlePSPSuccess({
2185
- paymentId: result2.transactionId,
2186
- reference: result2.reference,
2187
- amount: paymentIntent?.amount ?? amount,
2188
- currency: paymentIntent?.currency ?? currency,
2189
- paymentMethod: "mobile_money",
2190
- psp: "mpesa",
2191
- pspReference: result2.transactionId,
2192
- status: "success"
2193
- }),
2194
- onError: (err) => handlePSPError({
2195
- code: err.code,
2196
- message: err.message,
2197
- recoverable: true
2198
- })
2303
+ headers: { "x-reevit-public-key": publicKey || "" },
2304
+ onSuccess: handlePSPSuccess,
2305
+ onError: handlePSPError
2199
2306
  }
2200
2307
  );
2201
2308
  case "stripe":
@@ -2206,58 +2313,60 @@ function ReevitCheckout({
2206
2313
  clientSecret: paymentIntent?.clientSecret || "",
2207
2314
  amount: paymentIntent?.amount ?? amount,
2208
2315
  currency: paymentIntent?.currency ?? currency,
2209
- onSuccess: (result2) => handlePSPSuccess({
2210
- paymentId: result2.paymentIntentId,
2211
- reference: paymentIntent?.reference || reference || result2.paymentIntentId,
2212
- amount: paymentIntent?.amount ?? amount,
2213
- currency: paymentIntent?.currency ?? currency,
2214
- paymentMethod: selectedMethod || "card",
2215
- psp: "stripe",
2216
- pspReference: result2.paymentIntentId,
2217
- status: result2.status === "succeeded" ? "success" : "pending"
2218
- }),
2219
- onError: (err) => handlePSPError({
2220
- code: err.code,
2221
- message: err.message,
2222
- recoverable: true
2223
- }),
2316
+ onSuccess: handlePSPSuccess,
2317
+ onError: handlePSPError,
2224
2318
  onCancel: handlePSPClose
2225
2319
  }
2226
2320
  );
2227
2321
  default:
2228
2322
  return /* @__PURE__ */ jsxs("div", { className: "reevit-error", children: [
2229
2323
  /* @__PURE__ */ jsx("div", { className: "reevit-error__icon", children: "\u26A0\uFE0F" }),
2230
- /* @__PURE__ */ jsx("h3", { children: "Payment Provider Not Supported" }),
2324
+ /* @__PURE__ */ jsx("h3", { children: "Provider Not Supported" }),
2231
2325
  /* @__PURE__ */ jsxs("p", { children: [
2232
- "The selected payment provider (",
2326
+ "Provider (",
2233
2327
  psp,
2234
- ") is not currently supported in this checkout."
2328
+ ") is not supported."
2235
2329
  ] }),
2236
2330
  /* @__PURE__ */ jsx("button", { className: "reevit-btn reevit-btn--primary", onClick: handleBack, children: "Go Back" })
2237
2331
  ] });
2238
2332
  }
2239
2333
  }
2240
- if (selectedMethod === "mobile_money" && !showPSPBridge) {
2241
- return /* @__PURE__ */ jsx(
2242
- MobileMoneyForm,
2243
- {
2244
- onSubmit: handleMomoSubmit,
2245
- onCancel: handleBack,
2246
- isLoading,
2247
- initialPhone: phone
2334
+ const renderMethodContent = (provider, method) => {
2335
+ const pspLower2 = provider.toLowerCase();
2336
+ const needsPhone = pspLower2.includes("mpesa");
2337
+ if (method === "card") {
2338
+ return /* @__PURE__ */ jsxs("div", { className: "reevit-inline-action reevit-animate-fade-in", children: [
2339
+ /* @__PURE__ */ jsx("p", { className: "reevit-inline-action__hint", children: "You'll be redirected to complete your card payment securely." }),
2340
+ /* @__PURE__ */ jsx("button", { className: "reevit-btn reevit-btn--primary", onClick: handleContinue, disabled: isLoading, children: "Pay with Card" })
2341
+ ] });
2342
+ }
2343
+ if (method === "mobile_money") {
2344
+ if (needsPhone && !phone) {
2345
+ return /* @__PURE__ */ jsx("div", { className: "reevit-inline-action reevit-animate-fade-in", children: /* @__PURE__ */ jsx(MobileMoneyForm, { onSubmit: handleMomoSubmit, onCancel: handleBack, isLoading, initialPhone: phone, hideCancel: true }) });
2248
2346
  }
2249
- );
2250
- }
2251
- return /* @__PURE__ */ jsxs("div", { className: "reevit-method-step", children: [
2252
- providerOptions.length > 1 && /* @__PURE__ */ jsx(
2347
+ return /* @__PURE__ */ jsxs("div", { className: "reevit-inline-action reevit-animate-fade-in", children: [
2348
+ /* @__PURE__ */ jsx("p", { className: "reevit-inline-action__hint", children: pspLower2.includes("hubtel") ? "Opens the Hubtel checkout with Mobile Money selected." : `Continue to pay securely with Mobile Money via ${pspNames[pspLower2] || pspLower2.charAt(0).toUpperCase() + pspLower2.slice(1)}.` }),
2349
+ /* @__PURE__ */ jsx("button", { className: "reevit-btn reevit-btn--primary", onClick: handleContinue, disabled: isLoading, children: pspLower2.includes("hubtel") ? "Continue with Hubtel" : "Pay with Mobile Money" })
2350
+ ] });
2351
+ }
2352
+ return null;
2353
+ };
2354
+ if (providerOptions.length > 1) {
2355
+ return /* @__PURE__ */ jsx("div", { className: "reevit-method-step reevit-animate-slide-up", children: /* @__PURE__ */ jsx(
2253
2356
  ProviderSelector,
2254
2357
  {
2255
2358
  providers: providerOptions,
2256
2359
  selectedProvider,
2257
2360
  onSelect: handleProviderSelect,
2258
- disabled: isLoading
2361
+ disabled: isLoading,
2362
+ theme: resolvedTheme,
2363
+ selectedMethod,
2364
+ onMethodSelect: handleMethodSelect,
2365
+ renderMethodContent
2259
2366
  }
2260
- ),
2367
+ ) });
2368
+ }
2369
+ return /* @__PURE__ */ jsxs("div", { className: "reevit-method-step reevit-animate-slide-up", children: [
2261
2370
  /* @__PURE__ */ jsx(
2262
2371
  PaymentMethodSelector,
2263
2372
  {
@@ -2265,21 +2374,26 @@ function ReevitCheckout({
2265
2374
  selectedMethod,
2266
2375
  onSelect: handleMethodSelect,
2267
2376
  disabled: isLoading,
2268
- provider: activeProvider?.provider || psp
2377
+ provider: psp,
2378
+ layout: "list",
2379
+ showLabel: false
2269
2380
  }
2270
2381
  ),
2271
- selectedMethod && selectedMethod !== "mobile_money" && /* @__PURE__ */ jsx("div", { className: "reevit-method-step__actions", children: /* @__PURE__ */ jsx(
2272
- "button",
2273
- {
2274
- className: "reevit-btn reevit-btn--primary",
2275
- onClick: handleContinue,
2276
- disabled: isLoading,
2277
- children: "Continue"
2278
- }
2279
- ) })
2382
+ selectedMethod && /* @__PURE__ */ jsx("div", { className: "reevit-method-step__actions reevit-animate-slide-up", children: selectedMethod === "mobile_money" && pspLower.includes("mpesa") && !phone ? /* @__PURE__ */ jsx(MobileMoneyForm, { onSubmit: handleMomoSubmit, onCancel: () => selectMethod(null), isLoading, initialPhone: phone }) : /* @__PURE__ */ jsxs("div", { className: "reevit-card-info reevit-animate-fade-in", children: [
2383
+ /* @__PURE__ */ jsx("p", { className: "reevit-info-text", children: selectedMethod === "card" ? "You will be redirected to complete your card payment securely." : pspLower.includes("hubtel") ? "Opens the Hubtel checkout with Mobile Money selected." : `Continue to pay securely via ${pspNames[pspLower] || pspLower.charAt(0).toUpperCase() + pspLower.slice(1)}.` }),
2384
+ /* @__PURE__ */ jsx(
2385
+ "button",
2386
+ {
2387
+ className: "reevit-btn reevit-btn--primary",
2388
+ onClick: handleContinue,
2389
+ disabled: isLoading,
2390
+ children: selectedMethod === "card" ? "Pay with Card" : pspLower.includes("hubtel") ? "Continue with Hubtel" : "Pay with Mobile Money"
2391
+ }
2392
+ )
2393
+ ] }) })
2280
2394
  ] });
2281
2395
  };
2282
- return /* @__PURE__ */ jsxs(ReevitContext.Provider, { value: { publicKey, amount, currency }, children: [
2396
+ return /* @__PURE__ */ jsxs(ReevitContext.Provider, { value: { publicKey: publicKey || "", amount, currency }, children: [
2283
2397
  trigger,
2284
2398
  isOpen && /* @__PURE__ */ jsx("div", { className: "reevit-overlay", onClick: handleClose, children: /* @__PURE__ */ jsxs(
2285
2399
  "div",
@@ -2292,23 +2406,8 @@ function ReevitCheckout({
2292
2406
  "aria-modal": "true",
2293
2407
  children: [
2294
2408
  /* @__PURE__ */ jsxs("div", { className: "reevit-modal__header", children: [
2295
- /* @__PURE__ */ jsx("div", { className: "reevit-modal__branding", children: /* @__PURE__ */ jsx(
2296
- "img",
2297
- {
2298
- src: "https://i.imgur.com/bzUR5Lm.png",
2299
- alt: "Reevit",
2300
- className: "reevit-modal__logo"
2301
- }
2302
- ) }),
2303
- /* @__PURE__ */ jsx(
2304
- "button",
2305
- {
2306
- className: "reevit-modal__close",
2307
- onClick: handleClose,
2308
- "aria-label": "Close",
2309
- children: "\u2715"
2310
- }
2311
- )
2409
+ /* @__PURE__ */ jsx("div", { className: "reevit-modal__branding", children: /* @__PURE__ */ jsx("img", { src: resolvedTheme?.logoUrl || "https://i.imgur.com/bzUR5Lm.png", alt: "Checkout", className: "reevit-modal__logo" }) }),
2410
+ /* @__PURE__ */ jsx("button", { className: "reevit-modal__close", onClick: handleClose, "aria-label": "Close", children: "\u2715" })
2312
2411
  ] }),
2313
2412
  /* @__PURE__ */ jsxs("div", { className: "reevit-modal__amount", children: [
2314
2413
  /* @__PURE__ */ jsx("span", { className: "reevit-modal__amount-label", children: "Amount" }),