@shipengine/elements 2.26.4 → 2.27.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (200) hide show
  1. package/dist/cjs/assets/xcover/logo.svg.cjs +44 -0
  2. package/dist/cjs/components/field/rate-select/rate-card/rate-attribute-item/index.cjs +7 -0
  3. package/dist/cjs/components/field/rate-select/rate-card/rate-attribute-item/rate-attribute-item.cjs +56 -0
  4. package/dist/cjs/components/field/rate-select/rate-card/rate-attribute-item/rate-attribute-item.styles.cjs +27 -0
  5. package/dist/cjs/components/field/rate-select/rate-card/rate-card.cjs +52 -42
  6. package/dist/cjs/components/field/rate-select/rate-card/rate-card.styles.cjs +4 -0
  7. package/dist/cjs/components/field/rate-select/rate-select.cjs +80 -49
  8. package/dist/cjs/components/forms/register-funding-source-insurance-form/register-funding-source-insurance-form.cjs +1 -1
  9. package/dist/cjs/components/shipment-not-found-error/shipment-not-found-error.cjs +2 -17
  10. package/dist/cjs/components/suspend-purchase/suspend-purchase.cjs +3 -3
  11. package/dist/cjs/data/insurance-provider-metadatas.json.cjs +10 -4
  12. package/dist/cjs/elements/customs-form/customs-form-element.cjs +294 -0
  13. package/dist/cjs/elements/customs-form/customs-form-element.stories.cjs +243 -0
  14. package/dist/cjs/elements/customs-form/customs-form-schema.cjs +59 -0
  15. package/dist/cjs/elements/customs-form/customs-form-types.cjs +63 -0
  16. package/dist/cjs/elements/customs-form/index.cjs +10 -0
  17. package/dist/cjs/elements/index.cjs +5 -0
  18. package/dist/cjs/elements/manage-carriers/manage-carriers.cjs +1 -1
  19. package/dist/cjs/elements/purchase-label/components/customs-forms/tax-ids/tax-ids.cjs +1 -1
  20. package/dist/cjs/elements/purchase-label/components/index.cjs +2 -0
  21. package/dist/cjs/elements/purchase-label/components/rate-form/rate-view.cjs +1 -1
  22. package/dist/cjs/elements/purchase-label/components/shipment-form/shipment-form.cjs +4 -3
  23. package/dist/cjs/elements/purchase-label/hooks/use-filter-visible-rate-options/use-filter-visible-rate-options.cjs +35 -11
  24. package/dist/cjs/elements/purchase-label/hooks/use-insurance-provider-options.cjs +2 -2
  25. package/dist/cjs/elements/purchase-label/purchase-label.cjs +1 -7
  26. package/dist/cjs/factories/shipengine/address.cjs +114 -0
  27. package/dist/cjs/factories/shipengine/money.cjs +21 -0
  28. package/dist/cjs/factories/shipengine/order-source.cjs +37 -0
  29. package/dist/cjs/factories/shipengine/package.cjs +41 -0
  30. package/dist/cjs/factories/shipengine/resource.cjs +23 -0
  31. package/dist/cjs/factories/shipengine/shipment.cjs +176 -0
  32. package/dist/cjs/factories/shipengine/weight.cjs +44 -0
  33. package/dist/cjs/factories/utils.cjs +19 -0
  34. package/dist/cjs/features/manage-carriers/hooks/use-list-funding-source-carriers.cjs +4 -6
  35. package/dist/cjs/features/manage-carriers/manage-carriers.cjs +8 -6
  36. package/dist/cjs/hooks/use-configure-shipment.cjs +3 -80
  37. package/dist/cjs/hooks/use-get-funding-source-insurance-provider.cjs +7 -7
  38. package/dist/cjs/hooks/use-manage-funding-source-insurance.cjs +15 -23
  39. package/dist/cjs/index.cjs +5 -0
  40. package/dist/cjs/locales/en/common.json.cjs +2 -2
  41. package/dist/cjs/locales/en/purchase-label.json.cjs +9 -8
  42. package/dist/cjs/package.json.cjs +1 -1
  43. package/dist/cjs/utilities/feature-flags/feature-flags.cjs +1 -0
  44. package/dist/cjs/utilities/shipengine/carrier.cjs +4 -0
  45. package/dist/cjs/utilities/shipengine/index.cjs +3 -0
  46. package/dist/cjs/utilities/shipengine/insurance.cjs +63 -0
  47. package/dist/cjs/workflows/label-workflow/label-workflow.cjs +2 -26
  48. package/dist/cjs/workflows/onboarding/components/confirmation-and-submission-step/use-confirmation-and-submission-step.cjs +9 -9
  49. package/dist/cjs/workflows/onboarding/components/terms-agreement-form/terms-agreement-form.cjs +3 -2
  50. package/dist/cjs/workflows/onboarding/components/terms-agreement-step/terms-agreement-step.cjs +8 -6
  51. package/dist/cjs/workflows/onboarding/components/terms-agreement-step/use-terms-agreement-step.cjs +4 -19
  52. package/dist/esm/assets/xcover/logo.svg.js +23 -0
  53. package/dist/esm/components/field/rate-select/rate-card/rate-attribute-item/index.js +1 -0
  54. package/dist/esm/components/field/rate-select/rate-card/rate-attribute-item/rate-attribute-item.js +54 -0
  55. package/dist/esm/components/field/rate-select/rate-card/rate-attribute-item/rate-attribute-item.styles.js +25 -0
  56. package/dist/esm/components/field/rate-select/rate-card/rate-card.js +52 -42
  57. package/dist/esm/components/field/rate-select/rate-card/rate-card.styles.js +4 -0
  58. package/dist/esm/components/field/rate-select/rate-select.js +80 -49
  59. package/dist/esm/components/forms/register-funding-source-insurance-form/register-funding-source-insurance-form.js +1 -1
  60. package/dist/esm/components/shipment-not-found-error/shipment-not-found-error.js +2 -17
  61. package/dist/esm/components/suspend-purchase/suspend-purchase.js +3 -3
  62. package/dist/esm/data/insurance-provider-metadatas.json.js +9 -4
  63. package/dist/esm/elements/customs-form/customs-form-element.js +291 -0
  64. package/dist/esm/elements/customs-form/customs-form-element.stories.js +232 -0
  65. package/dist/esm/elements/customs-form/customs-form-schema.js +56 -0
  66. package/dist/esm/elements/customs-form/customs-form-types.js +60 -0
  67. package/dist/esm/elements/customs-form/index.js +3 -0
  68. package/dist/esm/elements/index.js +3 -0
  69. package/dist/esm/elements/manage-carriers/manage-carriers.js +1 -1
  70. package/dist/esm/elements/purchase-label/components/customs-forms/tax-ids/tax-ids.js +1 -1
  71. package/dist/esm/elements/purchase-label/components/index.js +1 -0
  72. package/dist/esm/elements/purchase-label/components/rate-form/rate-view.js +1 -1
  73. package/dist/esm/elements/purchase-label/components/shipment-form/shipment-form.js +4 -3
  74. package/dist/esm/elements/purchase-label/hooks/use-filter-visible-rate-options/use-filter-visible-rate-options.js +35 -11
  75. package/dist/esm/elements/purchase-label/hooks/use-insurance-provider-options.js +2 -2
  76. package/dist/esm/elements/purchase-label/purchase-label.js +1 -7
  77. package/dist/esm/elements-provider/elements-context-provider.js +1 -1
  78. package/dist/esm/factories/shipengine/address.js +111 -0
  79. package/dist/esm/factories/shipengine/money.js +19 -0
  80. package/dist/esm/factories/shipengine/order-source.js +34 -0
  81. package/dist/esm/factories/shipengine/package.js +39 -0
  82. package/dist/esm/factories/shipengine/resource.js +21 -0
  83. package/dist/esm/factories/shipengine/shipment.js +168 -0
  84. package/dist/esm/factories/shipengine/weight.js +40 -0
  85. package/dist/esm/factories/utils.js +15 -0
  86. package/dist/esm/features/manage-carriers/hooks/use-list-funding-source-carriers.js +5 -7
  87. package/dist/esm/features/manage-carriers/manage-carriers.js +8 -6
  88. package/dist/esm/hooks/use-configure-shipment.js +3 -80
  89. package/dist/esm/hooks/use-get-funding-source-insurance-provider.js +7 -7
  90. package/dist/esm/hooks/use-manage-funding-source-insurance.js +15 -23
  91. package/dist/esm/index.js +3 -0
  92. package/dist/esm/locales/en/common.json.js +2 -2
  93. package/dist/esm/locales/en/purchase-label.json.js +9 -8
  94. package/dist/esm/package.json.js +1 -1
  95. package/dist/esm/utilities/feature-flags/feature-flags.js +1 -0
  96. package/dist/esm/utilities/shipengine/carrier.js +4 -0
  97. package/dist/esm/utilities/shipengine/index.js +1 -1
  98. package/dist/esm/utilities/shipengine/insurance.js +61 -1
  99. package/dist/esm/workflows/label-workflow/label-workflow.js +2 -26
  100. package/dist/esm/workflows/onboarding/components/confirmation-and-submission-step/use-confirmation-and-submission-step.js +9 -9
  101. package/dist/esm/workflows/onboarding/components/terms-agreement-form/terms-agreement-form.js +3 -2
  102. package/dist/esm/workflows/onboarding/components/terms-agreement-step/terms-agreement-step.js +8 -6
  103. package/dist/esm/workflows/onboarding/components/terms-agreement-step/use-terms-agreement-step.js +5 -20
  104. package/dist/types/components/field/rate-select/rate-card/rate-attribute-item/index.d.ts +2 -0
  105. package/dist/types/components/field/rate-select/rate-card/rate-attribute-item/index.d.ts.map +1 -0
  106. package/dist/types/components/field/rate-select/rate-card/rate-attribute-item/rate-attribute-item.d.ts +8 -0
  107. package/dist/types/components/field/rate-select/rate-card/rate-attribute-item/rate-attribute-item.d.ts.map +1 -0
  108. package/dist/types/components/field/rate-select/rate-card/rate-attribute-item/rate-attribute-item.styles.d.ts +22 -0
  109. package/dist/types/components/field/rate-select/rate-card/rate-attribute-item/rate-attribute-item.styles.d.ts.map +1 -0
  110. package/dist/types/components/field/rate-select/rate-card/rate-card.d.ts +3 -2
  111. package/dist/types/components/field/rate-select/rate-card/rate-card.d.ts.map +1 -1
  112. package/dist/types/components/field/rate-select/rate-card/rate-card.styles.d.ts +4 -0
  113. package/dist/types/components/field/rate-select/rate-card/rate-card.styles.d.ts.map +1 -1
  114. package/dist/types/components/field/rate-select/rate-select.d.ts.map +1 -1
  115. package/dist/types/components/forms/register-funding-source-insurance-form/register-funding-source-insurance-form.d.ts.map +1 -1
  116. package/dist/types/components/shipment-not-found-error/shipment-not-found-error.d.ts +2 -3
  117. package/dist/types/components/shipment-not-found-error/shipment-not-found-error.d.ts.map +1 -1
  118. package/dist/types/components/suspend-purchase/suspend-purchase.d.ts +2 -3
  119. package/dist/types/components/suspend-purchase/suspend-purchase.d.ts.map +1 -1
  120. package/dist/types/elements/customs-form/customs-form-element.d.ts +1219 -0
  121. package/dist/types/elements/customs-form/customs-form-element.d.ts.map +1 -0
  122. package/dist/types/elements/customs-form/customs-form-element.stories.d.ts +12 -0
  123. package/dist/types/elements/customs-form/customs-form-element.stories.d.ts.map +1 -0
  124. package/dist/types/elements/customs-form/customs-form-schema.d.ts +398 -0
  125. package/dist/types/elements/customs-form/customs-form-schema.d.ts.map +1 -0
  126. package/dist/types/elements/customs-form/customs-form-types.d.ts +139 -0
  127. package/dist/types/elements/customs-form/customs-form-types.d.ts.map +1 -0
  128. package/dist/types/elements/customs-form/index.d.ts +4 -0
  129. package/dist/types/elements/customs-form/index.d.ts.map +1 -0
  130. package/dist/types/elements/index.d.ts +1 -0
  131. package/dist/types/elements/index.d.ts.map +1 -1
  132. package/dist/types/elements/labels-grid/labels-grid.d.ts +9 -8
  133. package/dist/types/elements/labels-grid/labels-grid.d.ts.map +1 -1
  134. package/dist/types/elements/manage-carriers/manage-carriers.d.ts +9 -8
  135. package/dist/types/elements/manage-carriers/manage-carriers.d.ts.map +1 -1
  136. package/dist/types/elements/manage-external-carriers/manage-external-carriers.d.ts +9 -8
  137. package/dist/types/elements/manage-external-carriers/manage-external-carriers.d.ts.map +1 -1
  138. package/dist/types/elements/manage-funding/manage-funding-element.d.ts +9 -8
  139. package/dist/types/elements/manage-funding/manage-funding-element.d.ts.map +1 -1
  140. package/dist/types/elements/manage-warehouses/manage-warehouses.d.ts +9 -8
  141. package/dist/types/elements/manage-warehouses/manage-warehouses.d.ts.map +1 -1
  142. package/dist/types/elements/payment-method-settings/payment-method-settings-element.d.ts +9 -8
  143. package/dist/types/elements/payment-method-settings/payment-method-settings-element.d.ts.map +1 -1
  144. package/dist/types/elements/purchase-label/components/index.d.ts +1 -0
  145. package/dist/types/elements/purchase-label/components/index.d.ts.map +1 -1
  146. package/dist/types/elements/purchase-label/components/shipment-form/shipment-form.d.ts.map +1 -1
  147. package/dist/types/elements/purchase-label/hooks/use-filter-visible-rate-options/use-filter-visible-rate-options.d.ts +5 -1
  148. package/dist/types/elements/purchase-label/hooks/use-filter-visible-rate-options/use-filter-visible-rate-options.d.ts.map +1 -1
  149. package/dist/types/elements/purchase-label/hooks/use-insurance-provider-options.d.ts.map +1 -1
  150. package/dist/types/elements/purchase-label/purchase-label.d.ts +9 -8
  151. package/dist/types/elements/purchase-label/purchase-label.d.ts.map +1 -1
  152. package/dist/types/elements/select-label-layout/select-label-layout-element.d.ts +9 -8
  153. package/dist/types/elements/select-label-layout/select-label-layout-element.d.ts.map +1 -1
  154. package/dist/types/elements/shipment-summary/shipment-summary.d.ts +9 -8
  155. package/dist/types/elements/shipment-summary/shipment-summary.d.ts.map +1 -1
  156. package/dist/types/elements/shipments-grid/shipments-grid.d.ts +9 -8
  157. package/dist/types/elements/shipments-grid/shipments-grid.d.ts.map +1 -1
  158. package/dist/types/elements/theme-creator/theme-creator.d.ts +9 -8
  159. package/dist/types/elements/theme-creator/theme-creator.d.ts.map +1 -1
  160. package/dist/types/elements/transaction-history/transaction-history-element.d.ts +9 -8
  161. package/dist/types/elements/transaction-history/transaction-history-element.d.ts.map +1 -1
  162. package/dist/types/elements/unit-settings/unit-settings-element.d.ts +9 -8
  163. package/dist/types/elements/unit-settings/unit-settings-element.d.ts.map +1 -1
  164. package/dist/types/elements/vat-settings/vat-settings-element.d.ts +9 -8
  165. package/dist/types/elements/vat-settings/vat-settings-element.d.ts.map +1 -1
  166. package/dist/types/elements/void-label/void-label.d.ts +9 -8
  167. package/dist/types/elements/void-label/void-label.d.ts.map +1 -1
  168. package/dist/types/features/manage-carriers/hooks/use-list-funding-source-carriers.d.ts.map +1 -1
  169. package/dist/types/features/manage-carriers/manage-carriers.d.ts.map +1 -1
  170. package/dist/types/hooks/use-configure-shipment.d.ts.map +1 -1
  171. package/dist/types/hooks/use-get-funding-source-insurance-provider.d.ts.map +1 -1
  172. package/dist/types/hooks/use-manage-funding-source-insurance.d.ts +3 -4
  173. package/dist/types/hooks/use-manage-funding-source-insurance.d.ts.map +1 -1
  174. package/dist/types/locales/en/index.d.ts +9 -8
  175. package/dist/types/locales/en/index.d.ts.map +1 -1
  176. package/dist/types/types/insurance-metadata.d.ts +1 -1
  177. package/dist/types/types/insurance-metadata.d.ts.map +1 -1
  178. package/dist/types/types/rates.d.ts +1 -0
  179. package/dist/types/types/rates.d.ts.map +1 -1
  180. package/dist/types/utilities/feature-flags/feature-flags.d.ts.map +1 -1
  181. package/dist/types/utilities/feature-flags/types.d.ts +4 -0
  182. package/dist/types/utilities/feature-flags/types.d.ts.map +1 -1
  183. package/dist/types/utilities/shipengine/carrier.d.ts.map +1 -1
  184. package/dist/types/utilities/shipengine/insurance.d.ts +31 -0
  185. package/dist/types/utilities/shipengine/insurance.d.ts.map +1 -1
  186. package/dist/types/workflows/account-settings/account-settings.d.ts +9 -8
  187. package/dist/types/workflows/account-settings/account-settings.d.ts.map +1 -1
  188. package/dist/types/workflows/carrier-services/carrier-services.d.ts +9 -8
  189. package/dist/types/workflows/carrier-services/carrier-services.d.ts.map +1 -1
  190. package/dist/types/workflows/connect-external-carrier/connect-external-carrier.d.ts +9 -8
  191. package/dist/types/workflows/connect-external-carrier/connect-external-carrier.d.ts.map +1 -1
  192. package/dist/types/workflows/label-workflow/label-workflow.d.ts +9 -8
  193. package/dist/types/workflows/label-workflow/label-workflow.d.ts.map +1 -1
  194. package/dist/types/workflows/onboarding/components/confirmation-and-submission-step/use-confirmation-and-submission-step.d.ts.map +1 -1
  195. package/dist/types/workflows/onboarding/components/terms-agreement-step/terms-agreement-step.d.ts.map +1 -1
  196. package/dist/types/workflows/onboarding/components/terms-agreement-step/use-terms-agreement-step.d.ts +1 -5
  197. package/dist/types/workflows/onboarding/components/terms-agreement-step/use-terms-agreement-step.d.ts.map +1 -1
  198. package/dist/types/workflows/onboarding/onboarding.d.ts +9 -8
  199. package/dist/types/workflows/onboarding/onboarding.d.ts.map +1 -1
  200. package/package.json +3 -3
@@ -38,12 +38,10 @@ const useListFundingSourceCarriers = () => {
38
38
  //TODO: Remove hardcoded carrierMetadata and insuranceProviderMetadata when the friendlyName is available in the funding source metadata response
39
39
  const carrierMetadata = useCarrierMetadata.useCarrierMetadata();
40
40
  const insuranceProviderProfiles = React.useMemo(() => {
41
- return optionalTerms.map(t => {
42
- return Object.assign({
43
- agreedToTerms: insurance.getIsInsuraceProviderAccepted(t.termType, insuranceProviderAcceptedTerms === null || insuranceProviderAcceptedTerms === void 0 ? void 0 : insuranceProviderAcceptedTerms.acceptedTerms),
44
- terms: Object.assign({}, t)
45
- }, insurance.getInsuranceProviderWithFriendlyName(t.termType));
46
- });
41
+ const groupedProfiles = insurance.groupTermsByProvider(optionalTerms);
42
+ return groupedProfiles.map(profile => Object.assign(Object.assign({}, profile), {
43
+ agreedToTerms: profile.terms.some(term => insurance.getIsInsuraceProviderAccepted(term.termType, insuranceProviderAcceptedTerms === null || insuranceProviderAcceptedTerms === void 0 ? void 0 : insuranceProviderAcceptedTerms.acceptedTerms))
44
+ }));
47
45
  }, [optionalTerms, insuranceProviderAcceptedTerms]);
48
46
  const normalizeCarrierCode = (carrierCode, nickname) => carrierCode === "usps" || (nickname === null || nickname === void 0 ? void 0 : nickname.includes("free")) ? "stamps_com" : carrierCode;
49
47
  const normalizeConnectedCarrierCodes = new Set(connectedCarriers === null || connectedCarriers === void 0 ? void 0 : connectedCarriers.map(c => normalizeCarrierCode(c.carrierCode, c.nickname)));
@@ -10,6 +10,7 @@ var React = require('react');
10
10
  var reactI18next = require('react-i18next');
11
11
  var manageCarriers_styles = require('./manage-carriers.styles.cjs');
12
12
  var useListFundingSourceCarriers = require('./hooks/use-list-funding-source-carriers.cjs');
13
+ var insurance = require('../../utilities/shipengine/insurance.cjs');
13
14
  var skeletonCarrierRow = require('../../components/skeleton/skeleton-carrier-row.cjs');
14
15
  var manageFunding = require('../manage-funding/manage-funding.cjs');
15
16
  var manageCarriersRow = require('./manage-carriers-row/manage-carriers-row.cjs');
@@ -43,6 +44,7 @@ const ShipEngineCarriers = ({
43
44
  refetch: refetchCarriers,
44
45
  refetchInsuranceProviderAcceptedTerms
45
46
  } = useListFundingSourceCarriers.useListFundingSourceCarriers();
47
+ const isInsuranceEnabled = insurance.getIsFundingSourceInsuranceProviderEnabledAndSupported(insuranceProviderProfiles, globalFeatures.enableXCover, globalFeatures.enableParcelGuard);
46
48
  const hasConnectedCarriers = React.useMemo(() => fundingSourceCarriers === null || fundingSourceCarriers === void 0 ? void 0 : fundingSourceCarriers.some(c => c.isConnected), [fundingSourceCarriers]);
47
49
  const {
48
50
  data: warehouses
@@ -103,10 +105,10 @@ const ShipEngineCarriers = ({
103
105
  const handleRegisterProvider = React.useCallback(p => _tslib.__awaiter(void 0, void 0, void 0, function* () {
104
106
  return yield handleRegistration({
105
107
  insuranceProviders: [{
106
- acceptedTerms: [{
107
- termType: p.terms.termType,
108
- version: p.terms.version
109
- }],
108
+ acceptedTerms: [...p.terms.map(term => ({
109
+ termType: term.termType,
110
+ version: term.version
111
+ }))],
110
112
  agreeToTerms: true,
111
113
  fundingSourceId: fundingSourceId !== null && fundingSourceId !== void 0 ? fundingSourceId : "",
112
114
  provider: p.provider
@@ -178,12 +180,12 @@ const ShipEngineCarriers = ({
178
180
  }),
179
181
  setCarrierToConnect: setCarrierToConnect
180
182
  })
181
- }, carrier.carrier.carrierProfile.carrierCode)), globalFeatures.enableParcelGuard && (insuranceProviderProfiles === null || insuranceProviderProfiles === void 0 ? void 0 : insuranceProviderProfiles.map(p => jsxRuntime.jsx("li", {
183
+ }, carrier.carrier.carrierProfile.carrierCode)), isInsuranceEnabled && (insuranceProviderProfiles === null || insuranceProviderProfiles === void 0 ? void 0 : insuranceProviderProfiles.map(p => jsxRuntime.jsx("li", {
182
184
  children: jsxRuntime.jsx(manageInsuranceProviderRow.ManageInsuranceProviderRow, {
183
185
  insuranceProviderProfile: p,
184
186
  registerProvider: handleRegisterProvider
185
187
  })
186
- }, p.terms.termType)))]
188
+ }, p.terms[0].termType)))]
187
189
  })
188
190
  })]
189
191
  });
@@ -221,83 +221,7 @@ const useConfigureShipment = ({
221
221
  if (isInitialLoadingCarriers || isFetchingCarriers) return;
222
222
  if ((carriers === null || carriers === void 0 ? void 0 : carriers.length) === 0) incompleteRequirementsKeys.push("no_carriers");
223
223
  }, [carriers, incompleteRequirementsKeys, isFetchingCarriers, isInitialLoadingCarriers]);
224
- const isConfigureShipmentLoading = React.useMemo(() => {
225
- if (isSalesOrderLoading) return true;
226
- if (listSalesOrderShipmentsInitiallyLoading) return true;
227
- if (listSalesOrderShipmentsIsFetching) return true;
228
- if (creatingSalesOrderShipment) return true;
229
- if (creatingV1Shipment) return true;
230
- // Include external shipment loading states to prevent premature error display
231
- // Only keep loading if we're actually fetching and don't have an error yet
232
- // Skip this check if we already have an error to avoid infinite loading
233
- if (externalShipmentId && isExternalShipmentFetching && !getExternalShipmentErrors && !isExternalShipmentInitialLoading) {
234
- return true;
235
- }
236
- // Check if this is a one-off flow (no identifiers provided)
237
- const isOneOffFlow = !salesOrderId && !externalOrderId && !externalOrderNumber && !orderSourceCode && !shipmentId && !externalShipmentId;
238
- // For one-off flow, keep loading until we have shipment data or V1 creation is complete
239
- if (isOneOffFlow && !pendingSalesOrderShipment && !labelPurchasedSalesOrderShipment) {
240
- return true;
241
- }
242
- // Only consider empty salesOrderShipments array as loading if we're not initially loading and have valid identifiers
243
- const shouldReturnTrueForEmptyShipments = (salesOrderShipments === null || salesOrderShipments === void 0 ? void 0 : salesOrderShipments.length) === 0 && !listSalesOrderShipmentsInitiallyLoading && !listSalesOrderShipmentsIsFetching;
244
- if (shouldReturnTrueForEmptyShipments) {
245
- return true;
246
- }
247
- return false;
248
- }, [isSalesOrderLoading, listSalesOrderShipmentsInitiallyLoading, listSalesOrderShipmentsIsFetching, creatingSalesOrderShipment, creatingV1Shipment, isExternalShipmentInitialLoading, isExternalShipmentFetching, getExternalShipmentErrors,
249
- // This was missing!
250
- salesOrderId, externalOrderId, externalOrderNumber, orderSourceCode, shipmentId, externalShipmentId, pendingSalesOrderShipment, labelPurchasedSalesOrderShipment, salesOrderShipments === null || salesOrderShipments === void 0 ? void 0 : salesOrderShipments.length]);
251
- // #region Custom Error Mapping
252
- const hasGetShipmentErrors = React.useMemo(() => {
253
- // Check for explicit API errors
254
- if (listSalesOrderShipmentsErrors) return true;
255
- if (getExternalShipmentErrors) return true;
256
- if (importSalesOrderErrors) return true;
257
- // Only treat empty results as error if we're not loading and have finished initial fetch
258
- if ((salesOrderShipments === null || salesOrderShipments === void 0 ? void 0 : salesOrderShipments.length) === 0 && shipmentId && !listSalesOrderShipmentsInitiallyLoading && !listSalesOrderShipmentsIsFetching) {
259
- return true;
260
- }
261
- return false;
262
- }, [listSalesOrderShipmentsErrors, getExternalShipmentErrors, importSalesOrderErrors, salesOrderShipments === null || salesOrderShipments === void 0 ? void 0 : salesOrderShipments.length, shipmentId, listSalesOrderShipmentsInitiallyLoading, listSalesOrderShipmentsIsFetching]);
263
- const hasValidShipmentData = React.useMemo(() => {
264
- if (manuallyCreatedShipmentId) return true;
265
- if (pendingSalesOrderShipment) return true;
266
- if (labelPurchasedSalesOrderShipment) return true;
267
- return false;
268
- }, [labelPurchasedSalesOrderShipment, manuallyCreatedShipmentId, pendingSalesOrderShipment]);
269
- const showShipmentNotFoundError = React.useMemo(() => {
270
- // Don't show error if we have a manually created shipment
271
- if (manuallyCreatedShipmentId) {
272
- return false;
273
- }
274
- // Don't show error if we're creating a V1 shipment
275
- if (creatingV1Shipment || newV1Shipment) {
276
- return false;
277
- }
278
- // For external shipment ID, show error if we're not in loading state
279
- // and we don't have valid shipment data
280
- if (externalShipmentId && !isConfigureShipmentLoading && !hasValidShipmentData) {
281
- return true;
282
- }
283
- // Don't show error if external shipment is still loading, unless we have explicit errors
284
- if (externalShipmentId && (isExternalShipmentInitialLoading || isExternalShipmentFetching) && !getExternalShipmentErrors) {
285
- return false;
286
- }
287
- // Show error immediately if we have shipment errors, even if still loading
288
- if (hasGetShipmentErrors) {
289
- return true;
290
- }
291
- // Check if this is a one-off flow (no identifiers provided)
292
- const isOneOffFlow = !salesOrderId && !externalOrderId && !externalOrderNumber && !orderSourceCode && !shipmentId && !externalShipmentId;
293
- // Don't show error for one-off flow until we've attempted shipment creation
294
- if (isOneOffFlow && !v1shipmentCreated) {
295
- return false;
296
- }
297
- // Otherwise, only show if not loading and no valid shipment data
298
- return !isConfigureShipmentLoading && !hasValidShipmentData;
299
- }, [manuallyCreatedShipmentId, creatingV1Shipment, newV1Shipment, hasGetShipmentErrors, isExternalShipmentInitialLoading, isExternalShipmentFetching, getExternalShipmentErrors, listSalesOrderShipmentsErrors, importSalesOrderErrors, salesOrderId, externalOrderId, externalOrderNumber, orderSourceCode, shipmentId, externalShipmentId, v1shipmentCreated, isConfigureShipmentLoading, hasValidShipmentData, pendingSalesOrderShipment, externalShipment]);
300
- const errors = [...(listWarehouseErrors !== null && listWarehouseErrors !== void 0 ? listWarehouseErrors : []), ...(createSalesOrderShipmentErrors !== null && createSalesOrderShipmentErrors !== void 0 ? createSalesOrderShipmentErrors : []), ...(createV1ShipmentErrors !== null && createV1ShipmentErrors !== void 0 ? createV1ShipmentErrors : []), ...(errorWhenShipmentCancelled && cancelledShipment ? [new reactApi.CodedError("shipment_cancelled", {
224
+ const errors = [...(listWarehouseErrors !== null && listWarehouseErrors !== void 0 ? listWarehouseErrors : []), ...(createSalesOrderShipmentErrors !== null && createSalesOrderShipmentErrors !== void 0 ? createSalesOrderShipmentErrors : []), ...(createV1ShipmentErrors !== null && createV1ShipmentErrors !== void 0 ? createV1ShipmentErrors : []), ...(listSalesOrderShipmentsErrors !== null && listSalesOrderShipmentsErrors !== void 0 ? listSalesOrderShipmentsErrors : []), ...(getExternalShipmentErrors !== null && getExternalShipmentErrors !== void 0 ? getExternalShipmentErrors : []), ...(importSalesOrderErrors !== null && importSalesOrderErrors !== void 0 ? importSalesOrderErrors : []), ...(errorWhenShipmentCancelled && cancelledShipment ? [new reactApi.CodedError("shipment_cancelled", {
301
225
  errorCode: "invalid_status",
302
226
  errorSource: "elements",
303
227
  errorType: "business_rules"
@@ -309,17 +233,16 @@ const useConfigureShipment = ({
309
233
  errorCode: "unknown",
310
234
  errorSource: "elements",
311
235
  errorType: "business_rules"
312
- })] : []), ...(showShipmentNotFoundError ? [new reactApi.CodedError("shipment_not_found", {
236
+ })] : []), ...((salesOrderShipments === null || salesOrderShipments === void 0 ? void 0 : salesOrderShipments.length) === 0 && shipmentId ? [new reactApi.CodedError("shipment_not_found", {
313
237
  errorCode: "invalid_status",
314
238
  errorSource: "elements",
315
239
  errorType: "business_rules"
316
240
  })] : [])];
317
- // #endregion
318
241
  return {
319
242
  carriers,
320
243
  createNewShipmentForNotFound,
321
244
  errors: errors.length > 0 ? errors : undefined,
322
- isLoading: isConfigureShipmentLoading && errors.length === 0,
245
+ isLoading: (isSalesOrderLoading || !(salesOrderShipments === null || salesOrderShipments === void 0 ? void 0 : salesOrderShipments.length) || creatingSalesOrderShipment) && errors.length === 0,
323
246
  refetchPendingSalesOrderShipments,
324
247
  salesOrder: salesOrder$1,
325
248
  shipment: pendingSalesOrderShipment !== null && pendingSalesOrderShipment !== void 0 ? pendingSalesOrderShipment : labelPurchasedSalesOrderShipment,
@@ -16,14 +16,15 @@ var elementsContextProvider = require('../elements-provider/elements-context-pro
16
16
  const useGetFundingSourceInsuranceProvider = () => {
17
17
  const {
18
18
  globalFeatures: {
19
- enableParcelGuard
19
+ enableParcelGuard,
20
+ enableXCover
20
21
  }
21
22
  } = elementsContextProvider.useElements();
22
23
  const {
23
24
  data,
24
25
  refetch: refetchInsuranceAcceptedTerms
25
26
  } = reactApi.useGetInsuranceFundingSourceAcceptedTerms({
26
- enabled: enableParcelGuard
27
+ enabled: enableParcelGuard || enableXCover
27
28
  });
28
29
  const fundingSourceInsuranceProvider = React.useMemo(() => {
29
30
  var _a;
@@ -32,13 +33,12 @@ const useGetFundingSourceInsuranceProvider = () => {
32
33
  if (enableParcelGuard && term.termType === "parcelguard_terms") {
33
34
  provider = "parcelguard";
34
35
  }
35
- // TODO: once x_cover is enabled, confirm the term type and uncomment
36
- // if (term.termType === "x_cover_terms") {
37
- // provider = "x_cover";
38
- // }
36
+ if (enableXCover && term.termType === "xcover_terms") {
37
+ provider = "x_cover";
38
+ }
39
39
  });
40
40
  return provider;
41
- }, [data, enableParcelGuard]);
41
+ }, [data === null || data === void 0 ? void 0 : data.acceptedTerms, enableParcelGuard, enableXCover]);
42
42
  return {
43
43
  fundingSourceInsuranceProvider,
44
44
  refetchInsuranceAcceptedTerms
@@ -2,14 +2,16 @@
2
2
 
3
3
  var _tslib = require('../_virtual/_tslib.cjs');
4
4
  var reactApi = require('@shipengine/react-api');
5
+ var insurance = require('../utilities/shipengine/insurance.cjs');
5
6
  var React = require('react');
6
7
  var elementsContextProvider = require('../elements-provider/elements-context-provider.cjs');
7
8
 
8
9
  const useManageFundingSourceInsurance = () => {
9
- var _a;
10
+ var _a, _b;
10
11
  const {
11
12
  globalFeatures: {
12
- enableParcelGuard
13
+ enableParcelGuard,
14
+ enableXCover
13
15
  }
14
16
  } = elementsContextProvider.useElements();
15
17
  const {
@@ -21,25 +23,12 @@ const useManageFundingSourceInsurance = () => {
21
23
  data: insuranceAcceptedTerms,
22
24
  isLoading: loadingInsuranceAcceptedTerms
23
25
  } = reactApi.useGetInsuranceFundingSourceAcceptedTerms({
24
- enabled: enableParcelGuard
26
+ enabled: enableParcelGuard || enableXCover
25
27
  });
26
28
  const insuranceProviderProfiles = React.useMemo(() => {
27
29
  var _a;
28
- return (_a = fundingSourceMetadata === null || fundingSourceMetadata === void 0 ? void 0 : fundingSourceMetadata.data) === null || _a === void 0 ? void 0 : _a.defaultFundingSourceProfile.optionalTerms.map(terms => {
29
- const providerLookup = {
30
- parcelguard_terms: "parcelguard"
31
- };
32
- const friendlyNameLookup = {
33
- parcelguard_terms: "ParcelGuard"
34
- };
35
- const provider = providerLookup[terms.termType];
36
- const friendlyName = friendlyNameLookup[terms.termType];
37
- return {
38
- friendlyName,
39
- provider,
40
- terms
41
- };
42
- });
30
+ const optionalTerms = (_a = fundingSourceMetadata === null || fundingSourceMetadata === void 0 ? void 0 : fundingSourceMetadata.data) === null || _a === void 0 ? void 0 : _a.defaultFundingSourceProfile.optionalTerms;
31
+ return insurance.groupTermsByProvider(optionalTerms);
43
32
  }, [fundingSourceMetadata]);
44
33
  const {
45
34
  mutateAsync: registerCarrier
@@ -79,12 +68,15 @@ const useManageFundingSourceInsurance = () => {
79
68
  }
80
69
  }), [fundingSources, insuranceProviderProfiles, registerCarrier]);
81
70
  const hasInsuranceToRegister = React.useMemo(() => {
82
- return enableParcelGuard &&
83
- // has insurance provider profiles but none have been accepted AND has a funding source
84
- !!(insuranceProviderProfiles === null || insuranceProviderProfiles === void 0 ? void 0 : insuranceProviderProfiles.length) && (insuranceAcceptedTerms === null || insuranceAcceptedTerms === void 0 ? void 0 : insuranceAcceptedTerms.acceptedTerms.length) === 0 && !!(fundingSources === null || fundingSources === void 0 ? void 0 : fundingSources.length);
85
- }, [enableParcelGuard, insuranceProviderProfiles === null || insuranceProviderProfiles === void 0 ? void 0 : insuranceProviderProfiles.length, insuranceAcceptedTerms === null || insuranceAcceptedTerms === void 0 ? void 0 : insuranceAcceptedTerms.acceptedTerms.length, fundingSources === null || fundingSources === void 0 ? void 0 : fundingSources.length]);
71
+ var _a, _b;
72
+ const isProviderEnabled = insurance.getIsFundingSourceInsuranceProviderEnabledAndSupported(insuranceProviderProfiles, enableXCover, enableParcelGuard);
73
+ const hasProfiles = Boolean(insuranceProviderProfiles === null || insuranceProviderProfiles === void 0 ? void 0 : insuranceProviderProfiles.length);
74
+ const hasNoAcceptedTerms = ((_b = (_a = insuranceAcceptedTerms === null || insuranceAcceptedTerms === void 0 ? void 0 : insuranceAcceptedTerms.acceptedTerms) === null || _a === void 0 ? void 0 : _a.length) !== null && _b !== void 0 ? _b : 0) === 0;
75
+ const hasFundingSources = Boolean(fundingSources === null || fundingSources === void 0 ? void 0 : fundingSources.length);
76
+ return isProviderEnabled && hasProfiles && hasNoAcceptedTerms && hasFundingSources;
77
+ }, [insuranceProviderProfiles, enableXCover, enableParcelGuard, (_a = insuranceAcceptedTerms === null || insuranceAcceptedTerms === void 0 ? void 0 : insuranceAcceptedTerms.acceptedTerms) === null || _a === void 0 ? void 0 : _a.length, fundingSources === null || fundingSources === void 0 ? void 0 : fundingSources.length]);
86
78
  return {
87
- fundingSourceCountryCode: (_a = fundingSourceMetadata === null || fundingSourceMetadata === void 0 ? void 0 : fundingSourceMetadata.data) === null || _a === void 0 ? void 0 : _a.defaultFundingSourceProfile.countryCode,
79
+ fundingSourceCountryCode: (_b = fundingSourceMetadata === null || fundingSourceMetadata === void 0 ? void 0 : fundingSourceMetadata.data) === null || _b === void 0 ? void 0 : _b.defaultFundingSourceProfile.countryCode,
88
80
  hasInsuranceToRegister,
89
81
  insuranceAcceptedTerms: insuranceAcceptedTerms === null || insuranceAcceptedTerms === void 0 ? void 0 : insuranceAcceptedTerms.acceptedTerms,
90
82
  insuranceProviderProfiles,
@@ -22,6 +22,8 @@ var selectLabelLayoutElement = require('./elements/select-label-layout/select-la
22
22
  var paymentMethodSettingsElement = require('./elements/payment-method-settings/payment-method-settings-element.cjs');
23
23
  var carrierServices = require('./workflows/carrier-services/carrier-services.cjs');
24
24
  var transactionHistoryElement = require('./elements/transaction-history/transaction-history-element.cjs');
25
+ var customsFormElement = require('./elements/customs-form/customs-form-element.cjs');
26
+ var customsFormTypes = require('./elements/customs-form/customs-form-types.cjs');
25
27
  var useAddressValidation = require('./hooks/use-address-validation.cjs');
26
28
  var useHelpers = require('./hooks/use-helpers.cjs');
27
29
  var useConfigureShipment = require('./hooks/use-configure-shipment.cjs');
@@ -77,6 +79,9 @@ exports.SelectLabelLayout = selectLabelLayoutElement;
77
79
  exports.PaymentMethodSettings = paymentMethodSettingsElement;
78
80
  exports.CarrierServices = carrierServices;
79
81
  exports.TransactionHistory = transactionHistoryElement;
82
+ exports.CustomsForm = customsFormElement;
83
+ exports.extractCustomsFormData = customsFormTypes.extractCustomsFormData;
84
+ exports.getDefaultCustomsFormValues = customsFormTypes.getDefaultCustomsFormValues;
80
85
  exports.useAddressValidation = useAddressValidation.useAddressValidation;
81
86
  exports.useHelpers = useHelpers.useHelpers;
82
87
  exports.useConfigureShipment = useConfigureShipment.useConfigureShipment;
@@ -170,7 +170,7 @@ var common = {
170
170
  invalidNameOrCompany: "Recipient name and company name (if provided) must have two characters in first and last name.",
171
171
  parsingFailure: "Parsing failed. Please check address and try again.",
172
172
  incompleteLabelPurchaseRequirements: "Please add your {{requirements}} to continue purchasing a label.",
173
- shipmentNotFound: "Cannot find {{identifierType}}: {{identifierNumber}}",
173
+ shipmentNotFound: "Cannot find shipment with ID: {{id}}.",
174
174
  shipmentCancelled: "This shipment is Cancelled in ShipStation. Log into ShipStation to restore the order to Awaiting Shipment status.",
175
175
  unableToLoad: {
176
176
  accountSettings: "Unable to load account settings",
@@ -248,7 +248,7 @@ var common = {
248
248
  parcelguard: "ParcelGuard",
249
249
  shipsurance: "Shipsurance",
250
250
  thirdParty: "Third Party",
251
- x_cover: "XCover"
251
+ xCover: "XCover"
252
252
  },
253
253
  loading: {
254
254
  accountSettings: "Loading account settings...",
@@ -32,13 +32,6 @@ var purchaseLabel = {
32
32
  saveRateFailedMessage: "Saving DHL Express Worldwide rates is temporarily unavailable. Please try again later.",
33
33
  saveRateFailedTitle: "Unable To Save Rate"
34
34
  },
35
- identifierTypes: {
36
- externalOrderId: "External Order ID",
37
- externalOrderNumber: "External Order Number",
38
- externalShipmentId: "External Shipment ID",
39
- salesOrderId: "Sales Order ID",
40
- shipmentId: "Shipment ID"
41
- },
42
35
  errorTypes: {
43
36
  results: "No results returned"
44
37
  },
@@ -100,7 +93,15 @@ var purchaseLabel = {
100
93
  rateSavings: "Save ${{amount}}",
101
94
  upsGroundSaverTermsAcknowledgement: "To start shipping with UPS Ground Saver, you are confirming that you have agreed to the <1>terms and conditions</1>",
102
95
  dhlExpressTermsAcknowledgement: "To start shipping with DHL, you are confirming that you have agreed to the <1>terms and conditions</1>",
103
- noRateService: "Rate and services will be billed based on carrier."
96
+ noRateService: "Rate and services will be billed based on carrier.",
97
+ rateAttributes: {
98
+ bestValue: "Best Value",
99
+ cheapest: "Cheapest",
100
+ fastest: "Fastest",
101
+ bestValueTooltip: "Lowest cost option arriving on a specified date within 4 days, with free carrier coverage up to $100 and a free dropoff option.",
102
+ cheapestTooltip: "Lowest cost option.",
103
+ fastestTooltip: "Fastest delivery option."
104
+ }
104
105
  },
105
106
  windsorFramework: {
106
107
  movementIndicator: "Movement Indicator",
@@ -1,5 +1,5 @@
1
1
  'use strict';
2
2
 
3
- var version = "2.26.4";
3
+ var version = "2.27.0";
4
4
 
5
5
  exports.version = version;
@@ -28,6 +28,7 @@ const defaultFeatureFlags = {
28
28
  globalFeatures: {
29
29
  disableShadowDOM: false,
30
30
  enableParcelGuard: true,
31
+ enableXCover: false,
31
32
  isSandbox: false,
32
33
  poweredByShipEngine: true,
33
34
  showVatSettings: false,
@@ -2,6 +2,7 @@
2
2
 
3
3
  var icon = require('../../assets/parcelguard/icon.svg.cjs');
4
4
  var logo = require('../../assets/parcelguard/logo.svg.cjs');
5
+ var logo$1 = require('../../assets/xcover/logo.svg.cjs');
5
6
 
6
7
  const USPS_CARRIER_CODES = ["usps", "stamps_com"];
7
8
  /**
@@ -59,6 +60,9 @@ const getLogoOrIconByCarrierCode = (carrierCode, type) => {
59
60
  if (carrierCode === "parcelguard") {
60
61
  return type === "logo" ? logo : icon;
61
62
  }
63
+ if (carrierCode === "xcover") {
64
+ return logo$1;
65
+ }
62
66
  const carrierCodeOverrides = {
63
67
  stamps_com: "stamps_com_wl",
64
68
  usps: "stamps_com_wl"
@@ -54,5 +54,8 @@ exports.isMetricWeightUnit = weight.isMetricWeightUnit;
54
54
  exports.isFlatRatePackageCode = _package.isFlatRatePackageCode;
55
55
  exports.getDefaultWarehouse = warehouses.getDefaultWarehouse;
56
56
  exports.getWarehouseById = warehouses.getWarehouseById;
57
+ exports.filterProfilesByAcceptedTerms = insurance.filterProfilesByAcceptedTerms;
57
58
  exports.getInsuranceProviderWithFriendlyName = insurance.getInsuranceProviderWithFriendlyName;
59
+ exports.getIsFundingSourceInsuranceProviderEnabledAndSupported = insurance.getIsFundingSourceInsuranceProviderEnabledAndSupported;
58
60
  exports.getIsInsuraceProviderAccepted = insurance.getIsInsuraceProviderAccepted;
61
+ exports.groupTermsByProvider = insurance.groupTermsByProvider;
@@ -12,6 +12,22 @@ var insuranceProviderMetadatas = require('../../data/insurance-provider-metadata
12
12
  const getInsuranceProviderWithFriendlyName = termType => {
13
13
  return insuranceProviderMetadatas.default[termType];
14
14
  };
15
+ /**
16
+ * @internal
17
+ *
18
+ * # Insurance Utilities - getIsFundingSourceInsuranceProviderEnabledAndSupported
19
+ *
20
+ * Determines if any insurance providers are enabled and supported based on feature flags and funding source data.
21
+ *
22
+ * @category Utilities
23
+ */
24
+ const getIsFundingSourceInsuranceProviderEnabledAndSupported = (insuranceProviders, xcoverEnabled, parcelguardEnabled) => {
25
+ if (!(insuranceProviders === null || insuranceProviders === void 0 ? void 0 : insuranceProviders.length)) return false;
26
+ const supportedProviders = insuranceProviders.map(p => p.provider);
27
+ if (xcoverEnabled && supportedProviders.includes("xcover")) return true;
28
+ if (parcelguardEnabled && supportedProviders.includes("parcelguard")) return true;
29
+ return false;
30
+ };
15
31
  /**
16
32
  * @internal
17
33
  *
@@ -22,6 +38,53 @@ const getInsuranceProviderWithFriendlyName = termType => {
22
38
  const getIsInsuraceProviderAccepted = (termType, acceptedTerms) => {
23
39
  return !!(acceptedTerms === null || acceptedTerms === void 0 ? void 0 : acceptedTerms.map(t => t.termType).includes(termType));
24
40
  };
41
+ /**
42
+ * @internal
43
+ *
44
+ * # Insurance Utilities - groupTermsByProvider
45
+ *
46
+ * Groups optional terms by insurance provider, creating InsuranceProviderProfile objects.
47
+ *
48
+ * @category Utilities
49
+ */
50
+ const groupTermsByProvider = optionalTerms => {
51
+ if (!optionalTerms) return [];
52
+ // Group terms by provider
53
+ const providerTermsMap = new Map();
54
+ optionalTerms.forEach(term => {
55
+ const providerInfo = getInsuranceProviderWithFriendlyName(term.termType);
56
+ if (providerInfo === null || providerInfo === void 0 ? void 0 : providerInfo.provider) {
57
+ const existingTerms = providerTermsMap.get(providerInfo.provider) || [];
58
+ providerTermsMap.set(providerInfo.provider, [...existingTerms, term]);
59
+ }
60
+ });
61
+ // Convert Map to InsuranceProviderProfile array
62
+ return Array.from(providerTermsMap.entries()).map(([, terms]) => {
63
+ const providerInfo = getInsuranceProviderWithFriendlyName(terms[0].termType);
64
+ return Object.assign(Object.assign({}, providerInfo), {
65
+ terms
66
+ });
67
+ });
68
+ };
69
+ /**
70
+ * @internal
71
+ *
72
+ * # Insurance Utilities - filterProfilesByAcceptedTerms
73
+ *
74
+ * Filters insurance provider profiles to exclude those that have already been accepted.
75
+ *
76
+ * @category Utilities
77
+ */
78
+ const filterProfilesByAcceptedTerms = (profiles, acceptedTerms) => {
79
+ if (!(acceptedTerms === null || acceptedTerms === void 0 ? void 0 : acceptedTerms.length)) return profiles;
80
+ const connectedTermTypes = new Set(acceptedTerms.map(t => t.termType));
81
+ return profiles.filter(profile => {
82
+ return !profile.terms.some(term => connectedTermTypes.has(term.termType));
83
+ });
84
+ };
25
85
 
86
+ exports.filterProfilesByAcceptedTerms = filterProfilesByAcceptedTerms;
26
87
  exports.getInsuranceProviderWithFriendlyName = getInsuranceProviderWithFriendlyName;
88
+ exports.getIsFundingSourceInsuranceProviderEnabledAndSupported = getIsFundingSourceInsuranceProviderEnabledAndSupported;
27
89
  exports.getIsInsuraceProviderAccepted = getIsInsuraceProviderAccepted;
90
+ exports.groupTermsByProvider = groupTermsByProvider;
@@ -62,31 +62,7 @@ const Component = _a => {
62
62
  }));
63
63
  // Track if we have a shipment_not_found error to avoid reusing the bad shipment ID
64
64
  const hasShipmentNotFoundError = configureShipmentErrors === null || configureShipmentErrors === void 0 ? void 0 : configureShipmentErrors.some(error => error.message === "shipment_not_found");
65
- const getMultiplexedIdentifier = React.useCallback(() => {
66
- if (_multiplexedId && "shipmentId" in _multiplexedId) {
67
- return {
68
- shipmentId: _multiplexedId.shipmentId
69
- };
70
- } else if (_multiplexedId && "externalShipmentId" in _multiplexedId) {
71
- return {
72
- externalShipmentId: _multiplexedId.externalShipmentId
73
- };
74
- } else if (_multiplexedId && "salesOrderId" in _multiplexedId) {
75
- return {
76
- salesOrderId: _multiplexedId.salesOrderId
77
- };
78
- } else if (_multiplexedId && "externalOrderNumber" in _multiplexedId) {
79
- return {
80
- externalOrderNumber: _multiplexedId.externalOrderNumber
81
- };
82
- } else if (_multiplexedId && "externalOrderId" in _multiplexedId) {
83
- return {
84
- externalOrderId: _multiplexedId.externalOrderId
85
- };
86
- }
87
- return {};
88
- }, [_multiplexedId]);
89
- const shipmentId = getMultiplexedIdentifier().shipmentId;
65
+ const shipmentId = _multiplexedId && "shipmentId" in _multiplexedId ? _multiplexedId.shipmentId : undefined;
90
66
  const {
91
67
  data: insuranceAccount,
92
68
  isInitialLoading: insuranceIsLoading
@@ -204,9 +180,9 @@ const Component = _a => {
204
180
  return jsxRuntime.jsx(suspendPurchase.SuspendPurchase, {
205
181
  data: shipment$1 || salesOrder,
206
182
  errors: errors.length ? errors : undefined,
207
- identifier: getMultiplexedIdentifier(),
208
183
  isLoading: isLabelsLoading || isConfiguringShipment || insuranceIsLoading,
209
184
  onCreateNewShipment: createNewShipmentForNotFound,
185
+ shipmentId: shipmentId,
210
186
  children: element && getElement(element)
211
187
  });
212
188
  };
@@ -107,12 +107,12 @@ const useConfirmationAndSubmissionStep = ({
107
107
  iovationBlackbox
108
108
  }) {
109
109
  const addressToRegister = address !== null && address !== void 0 ? address : defaultWarehouse.originAddress;
110
- // parcel guard check
111
- const insuranceProviders = globalFeatures.enableParcelGuard ? insuranceProviderProfiles === null || insuranceProviderProfiles === void 0 ? void 0 : insuranceProviderProfiles.map(p => ({
112
- acceptedTerms: [{
113
- termType: p.terms.termType,
114
- version: p.terms.version
115
- }],
110
+ // funding source insurance check
111
+ const insuranceProviders = globalFeatures.enableParcelGuard || globalFeatures.enableXCover ? insuranceProviderProfiles === null || insuranceProviderProfiles === void 0 ? void 0 : insuranceProviderProfiles.map(p => ({
112
+ acceptedTerms: p.terms.map(term => ({
113
+ termType: term.termType,
114
+ version: term.version
115
+ })),
116
116
  agreeToTerms: true,
117
117
  fundingSourceId,
118
118
  provider: p.provider
@@ -146,7 +146,7 @@ const useConfirmationAndSubmissionStep = ({
146
146
  console.error(error);
147
147
  throw error;
148
148
  }
149
- }), [registerCarrier, globalFeatures.enableParcelGuard]);
149
+ }), [globalFeatures.enableParcelGuard, globalFeatures.enableXCover, registerCarrier]);
150
150
  const onboardSeller = React.useCallback(({
151
151
  carrierProfiles,
152
152
  fundingSourceRequiredTerms,
@@ -205,7 +205,7 @@ const useConfirmationAndSubmissionStep = ({
205
205
  yield createHandleCarrierConnections({
206
206
  carrierProfiles,
207
207
  defaultWarehouse: warehouse,
208
- insuranceProviderProfiles: globalFeatures.enableParcelGuard ? insuranceProviderProfiles : undefined
208
+ insuranceProviderProfiles
209
209
  })(fundingSource.fundingSource.fundingSourceId, {
210
210
  iovationBlackbox
211
211
  });
@@ -215,7 +215,7 @@ const useConfirmationAndSubmissionStep = ({
215
215
  }
216
216
  }
217
217
  }
218
- }), [addSandboxCarriers, createFundingSource, createHandleCarrierConnections, createOrUpdateWarehouse, getToken, globalFeatures.enableParcelGuard, globalFeatures.isSandbox]);
218
+ }), [addSandboxCarriers, createFundingSource, createHandleCarrierConnections, createOrUpdateWarehouse, getToken, globalFeatures.isSandbox]);
219
219
  const updateExistingFundingSource = React.useCallback(({
220
220
  carrierProfiles,
221
221
  fundingSource,
@@ -30,7 +30,8 @@ const TermsAgreementForm = ({
30
30
  } = reactI18next.useTranslation();
31
31
  const {
32
32
  globalFeatures: {
33
- enableParcelGuard
33
+ enableParcelGuard,
34
+ enableXCover
34
35
  }
35
36
  } = elementsContextProvider.useElements();
36
37
  const [showTerms, setShowTerms] = React.useState(false);
@@ -109,7 +110,7 @@ const TermsAgreementForm = ({
109
110
  }), carrierTerms.map((term, idx) => jsxRuntime.jsx(displayTerm.DisplayTerm, {
110
111
  terms: term
111
112
  }, idx))]
112
- }), enableParcelGuard && !!insuranceProviderTerms.length && jsxRuntime.jsxs(jsxRuntime.Fragment, {
113
+ }), (enableParcelGuard || enableXCover) && !!insuranceProviderTerms.length && jsxRuntime.jsxs(jsxRuntime.Fragment, {
113
114
  children: [jsxRuntime.jsx(spacer.Spacer, {}), jsxRuntime.jsx(giger.Typography, {
114
115
  bold: true,
115
116
  variant: "body1",
@@ -22,13 +22,14 @@ const TermsAgreementStep = ({
22
22
  fundingSourceRequiredTerms,
23
23
  showStampsLogo = false
24
24
  }) => {
25
- var _a, _b, _c, _d, _e;
25
+ var _a, _b, _c, _d, _e, _f;
26
26
  const {
27
27
  t
28
28
  } = reactI18next.useTranslation("onboarding");
29
29
  const {
30
30
  globalFeatures: {
31
- enableParcelGuard
31
+ enableParcelGuard,
32
+ enableXCover
32
33
  }
33
34
  } = elementsContextProvider.useElements();
34
35
  const carrierFriendlyNames = useCarrierMetadata.useCarrierMetadata();
@@ -41,11 +42,12 @@ const TermsAgreementStep = ({
41
42
  };
42
43
  });
43
44
  const insuranceProviderTerms = (_a = insuranceProviderProfiles === null || insuranceProviderProfiles === void 0 ? void 0 : insuranceProviderProfiles.flatMap(p => p.terms)) !== null && _a !== void 0 ? _a : [];
44
- const showParcelGuard = enableParcelGuard && ((_b = insuranceProviderProfiles === null || insuranceProviderProfiles === void 0 ? void 0 : insuranceProviderProfiles.length) !== null && _b !== void 0 ? _b : 0) > 0;
45
- const hasInsuranceToRegister = showParcelGuard && ((_c = insuranceProviderProfiles === null || insuranceProviderProfiles === void 0 ? void 0 : insuranceProviderProfiles.length) !== null && _c !== void 0 ? _c : 0) > 0;
45
+ const showParcelGuard = enableParcelGuard && ((_b = insuranceProviderProfiles === null || insuranceProviderProfiles === void 0 ? void 0 : insuranceProviderProfiles[0]) === null || _b === void 0 ? void 0 : _b.friendlyName) === "ParcelGuard";
46
+ const showXCover = enableXCover && ((_c = insuranceProviderProfiles === null || insuranceProviderProfiles === void 0 ? void 0 : insuranceProviderProfiles[0]) === null || _c === void 0 ? void 0 : _c.friendlyName) === "XCover";
47
+ const hasInsuranceToRegister = (showParcelGuard || showXCover) && ((_d = insuranceProviderProfiles === null || insuranceProviderProfiles === void 0 ? void 0 : insuranceProviderProfiles.length) !== null && _d !== void 0 ? _d : 0) > 0;
46
48
  const hasEnabledCarriersConfigurationError = !showStampsLogo && (!enabledCarrierProfiles || (enabledCarrierProfiles === null || enabledCarrierProfiles === void 0 ? void 0 : enabledCarrierProfiles.length) === 0);
47
- const hasAlreadyConnectedCarriers = ((_d = enabledCarrierProfiles === null || enabledCarrierProfiles === void 0 ? void 0 : enabledCarrierProfiles.length) !== null && _d !== void 0 ? _d : 0) > 0 && carrierProfilesToRegister.length === 0 && (insuranceProviderProfiles === null || insuranceProviderProfiles === void 0 ? void 0 : insuranceProviderProfiles.length) === 0;
48
- const hasCarriersToRegister = ((_e = enabledCarrierProfiles === null || enabledCarrierProfiles === void 0 ? void 0 : enabledCarrierProfiles.length) !== null && _e !== void 0 ? _e : 0) > 0 && carrierProfilesToRegister.length > 0;
49
+ const hasAlreadyConnectedCarriers = ((_e = enabledCarrierProfiles === null || enabledCarrierProfiles === void 0 ? void 0 : enabledCarrierProfiles.length) !== null && _e !== void 0 ? _e : 0) > 0 && carrierProfilesToRegister.length === 0 && (insuranceProviderProfiles === null || insuranceProviderProfiles === void 0 ? void 0 : insuranceProviderProfiles.length) === 0;
50
+ const hasCarriersToRegister = ((_f = enabledCarrierProfiles === null || enabledCarrierProfiles === void 0 ? void 0 : enabledCarrierProfiles.length) !== null && _f !== void 0 ? _f : 0) > 0 && carrierProfilesToRegister.length > 0;
49
51
  // Handle case where partner has not correctly enabled carriers and there is no insurance to register
50
52
  // Insurance does not get set in the same enabled carriers list and should bypass this check
51
53
  if (hasEnabledCarriersConfigurationError && !hasInsuranceToRegister) {