@nuskin/shipping-address-form 1.7.9 → 1.7.10-6614-dev.2

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (28) hide show
  1. package/dist/addressLookup/components/SmartyIntlResults.js +6 -4
  2. package/dist/addressLookup/components/SmartyIntlResults.js.map +1 -1
  3. package/dist/addressLookup/components/SmartyUSResults.js +6 -4
  4. package/dist/addressLookup/components/SmartyUSResults.js.map +1 -1
  5. package/dist/addressLookup/components/smartyResults/useSmartyAddressController.js +6 -2
  6. package/dist/addressLookup/components/smartyResults/useSmartyAddressController.js.map +1 -1
  7. package/dist/addressLookup/components/smartyResults/useSmartyServiceErrors.js.map +1 -1
  8. package/dist/addressLookup/hooks/useAddressValidationBase.js +4 -1
  9. package/dist/addressLookup/hooks/useAddressValidationBase.js.map +1 -1
  10. package/dist/addressLookup/hooks/useIntlAddressValidation.js +24 -6
  11. package/dist/addressLookup/hooks/useIntlAddressValidation.js.map +1 -1
  12. package/dist/addressLookup/hooks/useSmartyInternationalLookup.js +47 -7
  13. package/dist/addressLookup/hooks/useSmartyInternationalLookup.js.map +1 -1
  14. package/dist/addressLookup/hooks/useSmartyLookupBase.js +6 -1
  15. package/dist/addressLookup/hooks/useSmartyLookupBase.js.map +1 -1
  16. package/dist/addressLookup/hooks/useSmartyUSLookup.js +30 -8
  17. package/dist/addressLookup/hooks/useSmartyUSLookup.js.map +1 -1
  18. package/dist/addressLookup/hooks/useUSAddressValidation.js +25 -6
  19. package/dist/addressLookup/hooks/useUSAddressValidation.js.map +1 -1
  20. package/dist/addressLookup/utils/addressForm.js +86 -2
  21. package/dist/addressLookup/utils/addressForm.js.map +1 -1
  22. package/dist/addressLookup/utils/smartyConfig.js +240 -5
  23. package/dist/addressLookup/utils/smartyConfig.js.map +1 -1
  24. package/dist/index.js +7 -0
  25. package/dist/index.js.map +1 -1
  26. package/dist/shippingAddressForm/utils/shippingAddressForm.js +13 -0
  27. package/dist/shippingAddressForm/utils/shippingAddressForm.js.map +1 -1
  28. package/package.json +1 -1
@@ -22,6 +22,7 @@ const useAddressValidationBase = ({
22
22
  requestKey,
23
23
  requestUrl,
24
24
  requestParams,
25
+ requestBody,
25
26
  transformResponse,
26
27
  effectDeps = [],
27
28
  // NGE1-6437: a failed call must surface immediately, not auto-retry a duplicate request to Smarty
@@ -83,7 +84,9 @@ const useAddressValidationBase = ({
83
84
  controller,
84
85
  settled: false,
85
86
  promise: (async () => {
86
- const networkResponse = await _axios.default.get(requestUrl, {
87
+ const networkResponse = requestBody ? await _axios.default.post(requestUrl, requestBody, {
88
+ signal: controller.signal
89
+ }) : await _axios.default.get(requestUrl, {
87
90
  params: requestParams,
88
91
  signal: controller.signal
89
92
  });
@@ -1 +1 @@
1
- {"version":3,"file":"useAddressValidationBase.js","names":["_react","require","_axios","_interopRequireDefault","_requestCache","_requestRateLimiter","_inFlightRequests","e","__esModule","default","RATE_LIMIT_ERROR_CODE","useAddressValidationBase","isEnabled","cacheNamespace","cacheTtlMs","rateLimitNamespace","rateLimitConfig","requestKey","requestUrl","requestParams","transformResponse","effectDeps","maxRetries","requestCycleKey","JSON","stringify","suggestions","setSuggestions","useState","loading","setLoading","error","setError","rateLimited","setRateLimited","activeCycleKey","setActiveCycleKey","isPendingCycleChange","useEffect","cancelled","activeRequest","activeRequestKey","validateAddress","lastError","attempt","cached","getCachedValue","rateLimitStatus","checkRateLimit","allowed","existingRequest","getInFlightRequest","response","retainInFlightRequest","promise","controller","AbortController","request","settled","networkResponse","axios","get","params","signal","setInFlightRequest","settleInFlightRequest","transformedSuggestions","data","setCachedValue","undefined","err","name","code","releaseInFlightRequest","_lastError$response","message","_activeRequest","_activeRequest2","subscribers","abort","Boolean","_default","exports"],"sources":["../../../src/addressLookup/hooks/useAddressValidationBase.jsx"],"sourcesContent":["import { useState, useEffect } from 'react';\nimport axios from 'axios';\nimport { getCachedValue, setCachedValue } from '../utils/requestCache';\nimport { checkRateLimit } from '../utils/requestRateLimiter';\nimport {\n getInFlightRequest,\n setInFlightRequest,\n retainInFlightRequest,\n releaseInFlightRequest,\n settleInFlightRequest\n} from '../utils/inFlightRequests';\n\n// Not rendered directly: useSmartyServiceErrors resolves the displayed text\n// from fieldLabels.rateLimited. This is only a truthy signal for `error`.\nconst RATE_LIMIT_ERROR_CODE = 'rate-limited';\n\nconst useAddressValidationBase = ({\n isEnabled,\n cacheNamespace = null,\n cacheTtlMs = null,\n rateLimitNamespace,\n rateLimitConfig,\n requestKey,\n requestUrl,\n requestParams,\n transformResponse,\n effectDeps = [],\n // NGE1-6437: a failed call must surface immediately, not auto-retry a duplicate request to Smarty\n maxRetries = 0\n}) => {\n const requestCycleKey = JSON.stringify({\n isEnabled,\n effectDeps\n });\n const [suggestions, setSuggestions] = useState([]);\n const [loading, setLoading] = useState(false);\n const [error, setError] = useState(null);\n const [rateLimited, setRateLimited] = useState(false);\n const [activeCycleKey, setActiveCycleKey] = useState(requestCycleKey);\n\n const isPendingCycleChange = activeCycleKey !== requestCycleKey;\n\n useEffect(() => {\n setActiveCycleKey(requestCycleKey);\n\n if (!isEnabled) {\n setRateLimited(false);\n return;\n }\n\n let cancelled = false;\n let activeRequest = null;\n let activeRequestKey = null;\n\n const validateAddress = async () => {\n setLoading(true);\n setError(null);\n setSuggestions([]);\n\n let lastError = null;\n for (let attempt = 0; attempt <= maxRetries; attempt++) {\n try {\n const cached = cacheNamespace ? getCachedValue(cacheNamespace, requestKey) : null;\n if (cached) {\n if (!cancelled) {\n setRateLimited(false);\n setSuggestions(cached.suggestions);\n setLoading(false);\n }\n return;\n }\n\n const rateLimitStatus = checkRateLimit(rateLimitNamespace, rateLimitConfig);\n if (!rateLimitStatus.allowed) {\n setRateLimited(true);\n setError(RATE_LIMIT_ERROR_CODE);\n setLoading(false);\n return;\n }\n\n activeRequestKey = requestKey;\n const existingRequest = getInFlightRequest(activeRequestKey);\n let response;\n\n if (existingRequest) {\n activeRequest = retainInFlightRequest(activeRequestKey);\n ({ response } = await activeRequest.promise);\n } else {\n const controller = new AbortController();\n const request = {\n controller,\n settled: false,\n promise: (async () => {\n const networkResponse = await axios.get(requestUrl, {\n params: requestParams,\n signal: controller.signal\n });\n return { response: networkResponse };\n })()\n };\n\n setInFlightRequest(activeRequestKey, request);\n activeRequest = retainInFlightRequest(activeRequestKey);\n\n try {\n ({ response } = await activeRequest.promise);\n } finally {\n settleInFlightRequest(activeRequestKey, activeRequest);\n }\n }\n\n if (cancelled) {\n return;\n }\n\n const transformedSuggestions = transformResponse(response.data);\n if (cacheNamespace) {\n setCachedValue(cacheNamespace, requestKey, {\n suggestions: transformedSuggestions\n }, cacheTtlMs || undefined);\n }\n\n setRateLimited(false);\n setSuggestions(transformedSuggestions);\n setLoading(false);\n return;\n } catch (err) {\n if (cancelled || err.name === 'CanceledError' || err.code === 'ERR_CANCELED') {\n return;\n }\n lastError = err;\n // Release the failed entry so the retry issues a fresh request instead of re-awaiting the rejection.\n if (activeRequestKey && activeRequest) {\n releaseInFlightRequest(activeRequestKey, activeRequest);\n }\n activeRequestKey = null;\n activeRequest = null;\n }\n }\n\n if (!cancelled && lastError) {\n setRateLimited(false);\n setError(lastError.response?.data?.message || lastError.message);\n }\n\n if (!cancelled) {\n setLoading(false);\n }\n };\n\n validateAddress();\n\n return () => {\n cancelled = true;\n if (activeRequestKey && activeRequest) {\n releaseInFlightRequest(activeRequestKey, activeRequest);\n }\n if (activeRequest?.subscribers === 0 && !activeRequest?.settled) {\n activeRequest.controller.abort();\n }\n };\n }, [isEnabled, requestCycleKey]);\n\n return {\n suggestions: isPendingCycleChange ? [] : suggestions,\n loading: isPendingCycleChange ? Boolean(isEnabled) : loading,\n error: isPendingCycleChange ? null : error,\n rateLimited: isPendingCycleChange ? false : rateLimited\n };\n};\n\nexport default useAddressValidationBase;\n"],"mappings":"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","ignoreList":[]}
1
+ {"version":3,"file":"useAddressValidationBase.js","names":["_react","require","_axios","_interopRequireDefault","_requestCache","_requestRateLimiter","_inFlightRequests","e","__esModule","default","RATE_LIMIT_ERROR_CODE","useAddressValidationBase","isEnabled","cacheNamespace","cacheTtlMs","rateLimitNamespace","rateLimitConfig","requestKey","requestUrl","requestParams","requestBody","transformResponse","effectDeps","maxRetries","requestCycleKey","JSON","stringify","suggestions","setSuggestions","useState","loading","setLoading","error","setError","rateLimited","setRateLimited","activeCycleKey","setActiveCycleKey","isPendingCycleChange","useEffect","cancelled","activeRequest","activeRequestKey","validateAddress","lastError","attempt","cached","getCachedValue","rateLimitStatus","checkRateLimit","allowed","existingRequest","getInFlightRequest","response","retainInFlightRequest","promise","controller","AbortController","request","settled","networkResponse","axios","post","signal","get","params","setInFlightRequest","settleInFlightRequest","transformedSuggestions","data","setCachedValue","undefined","err","name","code","releaseInFlightRequest","_lastError$response","message","_activeRequest","_activeRequest2","subscribers","abort","Boolean","_default","exports"],"sources":["../../../src/addressLookup/hooks/useAddressValidationBase.jsx"],"sourcesContent":["import { useState, useEffect } from 'react';\nimport axios from 'axios';\nimport { getCachedValue, setCachedValue } from '../utils/requestCache';\nimport { checkRateLimit } from '../utils/requestRateLimiter';\nimport {\n getInFlightRequest,\n setInFlightRequest,\n retainInFlightRequest,\n releaseInFlightRequest,\n settleInFlightRequest\n} from '../utils/inFlightRequests';\n\n// Not rendered directly: useSmartyServiceErrors resolves the displayed text\n// from fieldLabels.rateLimited. This is only a truthy signal for `error`.\nconst RATE_LIMIT_ERROR_CODE = 'rate-limited';\n\nconst useAddressValidationBase = ({\n isEnabled,\n cacheNamespace = null,\n cacheTtlMs = null,\n rateLimitNamespace,\n rateLimitConfig,\n requestKey,\n requestUrl,\n requestParams,\n requestBody,\n transformResponse,\n effectDeps = [],\n // NGE1-6437: a failed call must surface immediately, not auto-retry a duplicate request to Smarty\n maxRetries = 0\n}) => {\n const requestCycleKey = JSON.stringify({\n isEnabled,\n effectDeps\n });\n const [suggestions, setSuggestions] = useState([]);\n const [loading, setLoading] = useState(false);\n const [error, setError] = useState(null);\n const [rateLimited, setRateLimited] = useState(false);\n const [activeCycleKey, setActiveCycleKey] = useState(requestCycleKey);\n\n const isPendingCycleChange = activeCycleKey !== requestCycleKey;\n\n useEffect(() => {\n setActiveCycleKey(requestCycleKey);\n\n if (!isEnabled) {\n setRateLimited(false);\n return;\n }\n\n let cancelled = false;\n let activeRequest = null;\n let activeRequestKey = null;\n\n const validateAddress = async () => {\n setLoading(true);\n setError(null);\n setSuggestions([]);\n\n let lastError = null;\n for (let attempt = 0; attempt <= maxRetries; attempt++) {\n try {\n const cached = cacheNamespace ? getCachedValue(cacheNamespace, requestKey) : null;\n if (cached) {\n if (!cancelled) {\n setRateLimited(false);\n setSuggestions(cached.suggestions);\n setLoading(false);\n }\n return;\n }\n\n const rateLimitStatus = checkRateLimit(rateLimitNamespace, rateLimitConfig);\n if (!rateLimitStatus.allowed) {\n setRateLimited(true);\n setError(RATE_LIMIT_ERROR_CODE);\n setLoading(false);\n return;\n }\n\n activeRequestKey = requestKey;\n const existingRequest = getInFlightRequest(activeRequestKey);\n let response;\n\n if (existingRequest) {\n activeRequest = retainInFlightRequest(activeRequestKey);\n ({ response } = await activeRequest.promise);\n } else {\n const controller = new AbortController();\n const request = {\n controller,\n settled: false,\n promise: (async () => {\n const networkResponse = requestBody\n ? await axios.post(requestUrl, requestBody, { signal: controller.signal })\n : await axios.get(requestUrl, { params: requestParams, signal: controller.signal });\n return { response: networkResponse };\n })()\n };\n\n setInFlightRequest(activeRequestKey, request);\n activeRequest = retainInFlightRequest(activeRequestKey);\n\n try {\n ({ response } = await activeRequest.promise);\n } finally {\n settleInFlightRequest(activeRequestKey, activeRequest);\n }\n }\n\n if (cancelled) {\n return;\n }\n\n const transformedSuggestions = transformResponse(response.data);\n if (cacheNamespace) {\n setCachedValue(cacheNamespace, requestKey, {\n suggestions: transformedSuggestions\n }, cacheTtlMs || undefined);\n }\n\n setRateLimited(false);\n setSuggestions(transformedSuggestions);\n setLoading(false);\n return;\n } catch (err) {\n if (cancelled || err.name === 'CanceledError' || err.code === 'ERR_CANCELED') {\n return;\n }\n lastError = err;\n // Release the failed entry so the retry issues a fresh request instead of re-awaiting the rejection.\n if (activeRequestKey && activeRequest) {\n releaseInFlightRequest(activeRequestKey, activeRequest);\n }\n activeRequestKey = null;\n activeRequest = null;\n }\n }\n\n if (!cancelled && lastError) {\n setRateLimited(false);\n setError(lastError.response?.data?.message || lastError.message);\n }\n\n if (!cancelled) {\n setLoading(false);\n }\n };\n\n validateAddress();\n\n return () => {\n cancelled = true;\n if (activeRequestKey && activeRequest) {\n releaseInFlightRequest(activeRequestKey, activeRequest);\n }\n if (activeRequest?.subscribers === 0 && !activeRequest?.settled) {\n activeRequest.controller.abort();\n }\n };\n }, [isEnabled, requestCycleKey]);\n\n return {\n suggestions: isPendingCycleChange ? [] : suggestions,\n loading: isPendingCycleChange ? Boolean(isEnabled) : loading,\n error: isPendingCycleChange ? null : error,\n rateLimited: isPendingCycleChange ? false : rateLimited\n };\n};\n\nexport default useAddressValidationBase;\n"],"mappings":"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","ignoreList":[]}
@@ -16,7 +16,7 @@ const RATE_LIMIT_CONFIG = {
16
16
  windowMs: 60 * 1000,
17
17
  cooldownMs: 60 * 1000
18
18
  };
19
- const VERIFY_URL = 'https://international-street.api.smarty.com/verify';
19
+ const SMARTY_INTL_VERIFY_URL = 'https://international-street.api.smarty.com/verify';
20
20
  const PRECISION_LABELS = {
21
21
  DeliveryPoint: 'delivery point',
22
22
  Premise: 'premise',
@@ -25,9 +25,19 @@ const PRECISION_LABELS = {
25
25
  AdministrativeArea: 'region'
26
26
  };
27
27
  const getLookupAddressLine = (formData = {}, lookupField = 'address1') => (formData === null || formData === void 0 ? void 0 : formData[lookupField]) || '';
28
- const buildValidationParams = (formData, countryCode, lookupField = 'address1') => {
28
+ const buildRequestBody = (formData, countryCode, lookupField = 'address1') => {
29
+ const body = {
30
+ address1: getLookupAddressLine(formData, lookupField),
31
+ geocode: true
32
+ };
33
+ if (formData.city) body.locality = formData.city;
34
+ if (formData.region) body.administrative_area = formData.region;
35
+ if (formData.postalCode) body.postal_code = (0, _validators.normalizePostalCodeValue)(formData.postalCode);
36
+ return body;
37
+ };
38
+ const buildRequestParams = (formData, countryCode, key, lookupField = 'address1') => {
29
39
  const params = {
30
- key: _smartyConfig.SMARTY_INTL_STREET_KEY,
40
+ key,
31
41
  country: countryCode,
32
42
  address1: getLookupAddressLine(formData, lookupField),
33
43
  locality: formData.city || '',
@@ -100,11 +110,18 @@ const transformSuggestions = (responseData = []) => responseData.map(item => ({
100
110
  displayText: [item.address1, item.address2, item.address3].filter(Boolean).join(', '),
101
111
  validationSummary: buildValidationSummary(item)
102
112
  })).sort((left, right) => left.validationSummary.sortPriority - right.validationSummary.sortPriority);
103
- const useIntlAddressValidation = (formData, countryCode, trigger, lookupField = 'address1') => {
113
+ const useIntlAddressValidation = (formData, countryCode, trigger, lookupField = 'address1', smartyConfig = null) => {
114
+ const cfg = smartyConfig ?? (0, _smartyConfig.deriveSmartyConfig)(null);
104
115
  const lookupValue = getLookupAddressLine(formData, lookupField);
105
116
  const isEnabled = Boolean(trigger && trigger !== 0 && lookupValue && countryCode);
106
- const requestParams = buildValidationParams(formData, countryCode, lookupField);
117
+ const lambdaEnabled = cfg.smartyLambdaEnabled;
118
+ const requestBody = lambdaEnabled ? buildRequestBody(formData, countryCode, lookupField) : null;
119
+ const requestParams = lambdaEnabled ? null : buildRequestParams(formData, countryCode, cfg.smartyKeys.intlStreet, lookupField);
107
120
  const requestKey = `smarty-intl-validation:${buildRequestKey(formData, countryCode, lookupField)}`;
121
+ const lambdaUrl = (0, _smartyConfig.appendLambdaQueryParams)((0, _smartyConfig.buildSmartyEndpoint)(cfg, 'validate', countryCode), {
122
+ skipCache: cfg.skipCache,
123
+ smartyResponse: cfg.smartyResponse
124
+ });
108
125
  return (0, _useAddressValidationBase.default)({
109
126
  isEnabled,
110
127
  cacheNamespace: CACHE_NAMESPACE,
@@ -112,7 +129,8 @@ const useIntlAddressValidation = (formData, countryCode, trigger, lookupField =
112
129
  rateLimitNamespace: RATE_LIMIT_NAMESPACE,
113
130
  rateLimitConfig: RATE_LIMIT_CONFIG,
114
131
  requestKey,
115
- requestUrl: VERIFY_URL,
132
+ requestUrl: lambdaEnabled ? lambdaUrl : SMARTY_INTL_VERIFY_URL,
133
+ requestBody,
116
134
  requestParams,
117
135
  transformResponse: transformSuggestions,
118
136
  effectDeps: [trigger, lookupField]
@@ -1 +1 @@
1
- {"version":3,"file":"useIntlAddressValidation.js","names":["_smartyConfig","require","_validators","_useAddressValidationBase","_interopRequireDefault","e","__esModule","default","CACHE_NAMESPACE","CACHE_TTL_MS","RATE_LIMIT_NAMESPACE","RATE_LIMIT_CONFIG","limit","windowMs","cooldownMs","VERIFY_URL","PRECISION_LABELS","DeliveryPoint","Premise","Thoroughfare","Locality","AdministrativeArea","getLookupAddressLine","formData","lookupField","buildValidationParams","countryCode","params","key","SMARTY_INTL_STREET_KEY","country","address1","locality","city","administrative_area","region","postal_code","normalizePostalCodeValue","postalCode","geocode","Object","keys","forEach","buildRequestKey","JSON","stringify","administrativeArea","getPrecisionLabel","precision","buildValidationSummary","item","_item$analysis","_item$analysis2","_item$changes","_item$changes2","verificationStatus","analysis","verification_status","address_precision","subBuildingChange","changes","sub_building","components","hasVerifiedSubBuilding","startsWith","address2","code","title","message","sortPriority","transformSuggestions","responseData","map","displayText","address3","filter","Boolean","join","validationSummary","sort","left","right","useIntlAddressValidation","trigger","lookupValue","isEnabled","requestParams","requestKey","useAddressValidationBase","cacheNamespace","cacheTtlMs","rateLimitNamespace","rateLimitConfig","requestUrl","transformResponse","effectDeps","_default","exports"],"sources":["../../../src/addressLookup/hooks/useIntlAddressValidation.jsx"],"sourcesContent":["import { SMARTY_INTL_STREET_KEY } from '../utils/smartyConfig';\nimport { normalizePostalCodeValue } from '../utils/validators';\nimport useAddressValidationBase from './useAddressValidationBase';\n\nconst CACHE_NAMESPACE = 'smarty-intl-validation';\nconst CACHE_TTL_MS = 60 * 1000;\nconst RATE_LIMIT_NAMESPACE = 'smarty-intl-validation';\nconst RATE_LIMIT_CONFIG = {\n limit: 60,\n windowMs: 60 * 1000,\n cooldownMs: 60 * 1000\n};\nconst VERIFY_URL = 'https://international-street.api.smarty.com/verify';\n\nconst PRECISION_LABELS = {\n DeliveryPoint: 'delivery point',\n Premise: 'premise',\n Thoroughfare: 'street',\n Locality: 'city',\n AdministrativeArea: 'region'\n};\n\nconst getLookupAddressLine = (formData = {}, lookupField = 'address1') => (\n formData?.[lookupField] || ''\n);\n\nconst buildValidationParams = (formData, countryCode, lookupField = 'address1') => {\n const params = {\n key: SMARTY_INTL_STREET_KEY,\n country: countryCode,\n address1: getLookupAddressLine(formData, lookupField),\n locality: formData.city || '',\n administrative_area: formData.region || '',\n postal_code: normalizePostalCodeValue(formData.postalCode || ''),\n geocode: true\n };\n\n Object.keys(params).forEach((key) => {\n if (!params[key]) {\n delete params[key];\n }\n });\n\n return params;\n};\n\nconst buildRequestKey = (formData, countryCode, lookupField = 'address1') => JSON.stringify({\n countryCode,\n address1: getLookupAddressLine(formData, lookupField),\n locality: formData.city || '',\n administrativeArea: formData.region || '',\n postalCode: normalizePostalCodeValue(formData.postalCode || '')\n});\n\nconst getPrecisionLabel = (precision) => PRECISION_LABELS[precision] || 'available level';\n\nconst buildValidationSummary = (item) => {\n const verificationStatus = item.analysis?.verification_status || 'None';\n const precision = item.analysis?.address_precision || 'None';\n const subBuildingChange = item.changes?.sub_building || item.changes?.components?.sub_building;\n const hasVerifiedSubBuilding = subBuildingChange?.startsWith('Verified');\n\n if (verificationStatus === 'Verified') {\n if (item.address2 && subBuildingChange && hasVerifiedSubBuilding) {\n return {\n code: 'verified-sub-building-changed',\n title: 'Verified with unit changes',\n message: 'This address is verified, but the apartment or suite information was changed.',\n sortPriority: 2\n };\n }\n\n return {\n code: 'verified',\n title: 'Verified',\n message: `This address is verified to the ${getPrecisionLabel(precision)} level.`,\n sortPriority: 1\n };\n }\n\n if (verificationStatus === 'Partial') {\n return {\n code: 'partial',\n title: 'Partially verified',\n message: `This address could only be verified to the ${getPrecisionLabel(precision)} level.`,\n sortPriority: 3\n };\n }\n\n if (verificationStatus === 'Ambiguous') {\n return {\n code: 'ambiguous',\n title: 'Multiple matches found',\n message: `Multiple possible matches were found at the ${getPrecisionLabel(precision)} level.`,\n sortPriority: 4\n };\n }\n\n return {\n code: 'not-verified',\n title: 'Not verified',\n message: 'This address could not be verified.',\n sortPriority: 5\n };\n};\n\nconst transformSuggestions = (responseData = []) => responseData\n .map((item) => ({\n ...item,\n displayText: [\n item.address1,\n item.address2,\n item.address3\n ].filter(Boolean).join(', '),\n validationSummary: buildValidationSummary(item)\n }))\n .sort((left, right) => left.validationSummary.sortPriority - right.validationSummary.sortPriority);\n\nconst useIntlAddressValidation = (formData, countryCode, trigger, lookupField = 'address1') => {\n const lookupValue = getLookupAddressLine(formData, lookupField);\n const isEnabled = Boolean(trigger && trigger !== 0 && lookupValue && countryCode);\n const requestParams = buildValidationParams(formData, countryCode, lookupField);\n const requestKey = `smarty-intl-validation:${buildRequestKey(formData, countryCode, lookupField)}`;\n\n return useAddressValidationBase({\n isEnabled,\n cacheNamespace: CACHE_NAMESPACE,\n cacheTtlMs: CACHE_TTL_MS,\n rateLimitNamespace: RATE_LIMIT_NAMESPACE,\n rateLimitConfig: RATE_LIMIT_CONFIG,\n requestKey,\n requestUrl: VERIFY_URL,\n requestParams,\n transformResponse: transformSuggestions,\n effectDeps: [trigger, lookupField]\n });\n};\n\nexport default useIntlAddressValidation;\n"],"mappings":"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","ignoreList":[]}
1
+ {"version":3,"file":"useIntlAddressValidation.js","names":["_smartyConfig","require","_validators","_useAddressValidationBase","_interopRequireDefault","e","__esModule","default","CACHE_NAMESPACE","CACHE_TTL_MS","RATE_LIMIT_NAMESPACE","RATE_LIMIT_CONFIG","limit","windowMs","cooldownMs","SMARTY_INTL_VERIFY_URL","PRECISION_LABELS","DeliveryPoint","Premise","Thoroughfare","Locality","AdministrativeArea","getLookupAddressLine","formData","lookupField","buildRequestBody","countryCode","body","address1","geocode","city","locality","region","administrative_area","postalCode","postal_code","normalizePostalCodeValue","buildRequestParams","key","params","country","Object","keys","forEach","buildRequestKey","JSON","stringify","administrativeArea","getPrecisionLabel","precision","buildValidationSummary","item","_item$analysis","_item$analysis2","_item$changes","_item$changes2","verificationStatus","analysis","verification_status","address_precision","subBuildingChange","changes","sub_building","components","hasVerifiedSubBuilding","startsWith","address2","code","title","message","sortPriority","transformSuggestions","responseData","map","displayText","address3","filter","Boolean","join","validationSummary","sort","left","right","useIntlAddressValidation","trigger","smartyConfig","cfg","deriveSmartyConfig","lookupValue","isEnabled","lambdaEnabled","smartyLambdaEnabled","requestBody","requestParams","smartyKeys","intlStreet","requestKey","lambdaUrl","appendLambdaQueryParams","buildSmartyEndpoint","skipCache","smartyResponse","useAddressValidationBase","cacheNamespace","cacheTtlMs","rateLimitNamespace","rateLimitConfig","requestUrl","transformResponse","effectDeps","_default","exports"],"sources":["../../../src/addressLookup/hooks/useIntlAddressValidation.jsx"],"sourcesContent":["import {\n appendLambdaQueryParams,\n buildSmartyEndpoint,\n deriveSmartyConfig\n} from '../utils/smartyConfig';\nimport { normalizePostalCodeValue } from '../utils/validators';\nimport useAddressValidationBase from './useAddressValidationBase';\n\nconst CACHE_NAMESPACE = 'smarty-intl-validation';\nconst CACHE_TTL_MS = 60 * 1000;\nconst RATE_LIMIT_NAMESPACE = 'smarty-intl-validation';\nconst RATE_LIMIT_CONFIG = {\n limit: 60,\n windowMs: 60 * 1000,\n cooldownMs: 60 * 1000\n};\nconst SMARTY_INTL_VERIFY_URL = 'https://international-street.api.smarty.com/verify';\n\nconst PRECISION_LABELS = {\n DeliveryPoint: 'delivery point',\n Premise: 'premise',\n Thoroughfare: 'street',\n Locality: 'city',\n AdministrativeArea: 'region'\n};\n\nconst getLookupAddressLine = (formData = {}, lookupField = 'address1') => (\n formData?.[lookupField] || ''\n);\n\nconst buildRequestBody = (formData, countryCode, lookupField = 'address1') => {\n const body = {\n address1: getLookupAddressLine(formData, lookupField),\n geocode: true\n };\n\n if (formData.city) body.locality = formData.city;\n if (formData.region) body.administrative_area = formData.region;\n if (formData.postalCode) body.postal_code = normalizePostalCodeValue(formData.postalCode);\n\n return body;\n};\n\nconst buildRequestParams = (formData, countryCode, key, lookupField = 'address1') => {\n const params = {\n key,\n country: countryCode,\n address1: getLookupAddressLine(formData, lookupField),\n locality: formData.city || '',\n administrative_area: formData.region || '',\n postal_code: normalizePostalCodeValue(formData.postalCode || ''),\n geocode: true\n };\n\n Object.keys(params).forEach((key) => {\n if (!params[key]) {\n delete params[key];\n }\n });\n\n return params;\n};\n\nconst buildRequestKey = (formData, countryCode, lookupField = 'address1') => JSON.stringify({\n countryCode,\n address1: getLookupAddressLine(formData, lookupField),\n locality: formData.city || '',\n administrativeArea: formData.region || '',\n postalCode: normalizePostalCodeValue(formData.postalCode || '')\n});\n\nconst getPrecisionLabel = (precision) => PRECISION_LABELS[precision] || 'available level';\n\nconst buildValidationSummary = (item) => {\n const verificationStatus = item.analysis?.verification_status || 'None';\n const precision = item.analysis?.address_precision || 'None';\n const subBuildingChange = item.changes?.sub_building || item.changes?.components?.sub_building;\n const hasVerifiedSubBuilding = subBuildingChange?.startsWith('Verified');\n\n if (verificationStatus === 'Verified') {\n if (item.address2 && subBuildingChange && hasVerifiedSubBuilding) {\n return {\n code: 'verified-sub-building-changed',\n title: 'Verified with unit changes',\n message: 'This address is verified, but the apartment or suite information was changed.',\n sortPriority: 2\n };\n }\n return {\n code: 'verified',\n title: 'Verified',\n message: `This address is verified to the ${getPrecisionLabel(precision)} level.`,\n sortPriority: 1\n };\n }\n if (verificationStatus === 'Partial') {\n return {\n code: 'partial',\n title: 'Partially verified',\n message: `This address could only be verified to the ${getPrecisionLabel(precision)} level.`,\n sortPriority: 3\n };\n }\n if (verificationStatus === 'Ambiguous') {\n return {\n code: 'ambiguous',\n title: 'Multiple matches found',\n message: `Multiple possible matches were found at the ${getPrecisionLabel(precision)} level.`,\n sortPriority: 4\n };\n }\n\n return {\n code: 'not-verified',\n title: 'Not verified',\n message: 'This address could not be verified.',\n sortPriority: 5\n };\n};\n\nconst transformSuggestions = (responseData = []) => responseData\n .map((item) => ({\n ...item,\n displayText: [item.address1, item.address2, item.address3].filter(Boolean).join(', '),\n validationSummary: buildValidationSummary(item)\n }))\n .sort((left, right) => left.validationSummary.sortPriority - right.validationSummary.sortPriority);\n\nconst useIntlAddressValidation = (formData, countryCode, trigger, lookupField = 'address1', smartyConfig = null) => {\n const cfg = smartyConfig ?? deriveSmartyConfig(null);\n const lookupValue = getLookupAddressLine(formData, lookupField);\n const isEnabled = Boolean(trigger && trigger !== 0 && lookupValue && countryCode);\n const lambdaEnabled = cfg.smartyLambdaEnabled;\n const requestBody = lambdaEnabled ? buildRequestBody(formData, countryCode, lookupField) : null;\n const requestParams = lambdaEnabled ? null : buildRequestParams(formData, countryCode, cfg.smartyKeys.intlStreet, lookupField);\n const requestKey = `smarty-intl-validation:${buildRequestKey(formData, countryCode, lookupField)}`;\n const lambdaUrl = appendLambdaQueryParams(\n buildSmartyEndpoint(cfg, 'validate', countryCode),\n { skipCache: cfg.skipCache, smartyResponse: cfg.smartyResponse }\n );\n\n return useAddressValidationBase({\n isEnabled,\n cacheNamespace: CACHE_NAMESPACE,\n cacheTtlMs: CACHE_TTL_MS,\n rateLimitNamespace: RATE_LIMIT_NAMESPACE,\n rateLimitConfig: RATE_LIMIT_CONFIG,\n requestKey,\n requestUrl: lambdaEnabled ? lambdaUrl : SMARTY_INTL_VERIFY_URL,\n requestBody,\n requestParams,\n transformResponse: transformSuggestions,\n effectDeps: [trigger, lookupField]\n });\n};\n\nexport default useIntlAddressValidation;\n"],"mappings":"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","ignoreList":[]}
@@ -18,18 +18,48 @@ const RATE_LIMIT_CONFIG = {
18
18
  windowMs: 60 * 1000,
19
19
  cooldownMs: 30 * 1000
20
20
  };
21
- const LOOKUP_URL = 'https://international-autocomplete.api.smarty.com/v2/lookup';
21
+ const SMARTY_INTL_LOOKUP_URL = 'https://international-autocomplete.api.smarty.com/v2/lookup';
22
22
  const buildCacheKey = (trimmedQuery, countryCode, selectedAddressId) => JSON.stringify({
23
23
  query: trimmedQuery,
24
24
  countryCode,
25
25
  selectedAddressId: selectedAddressId || null
26
26
  });
27
- const buildLookupUrl = (trimmedQuery, countryCode, selectedAddressId) => {
27
+ const buildRequestBody = (trimmedQuery, countryCode, selectedAddressId) => {
28
28
  const iso3 = _countries.COUNTRY_MAP[countryCode].iso3;
29
29
  if (selectedAddressId) {
30
- return `${LOOKUP_URL}/${selectedAddressId}?key=${_smartyConfig.SMARTY_INTL_AUTOCOMPLETE_KEY}&country=${iso3}&max_results=10`;
30
+ return {
31
+ address_id: selectedAddressId,
32
+ iso3,
33
+ max_results: 10
34
+ };
31
35
  }
32
- return `${LOOKUP_URL}?key=${_smartyConfig.SMARTY_INTL_AUTOCOMPLETE_KEY}&country=${iso3}&search=${encodeURIComponent(trimmedQuery)}&max_results=10`;
36
+ return {
37
+ search: trimmedQuery,
38
+ iso3,
39
+ max_results: 10
40
+ };
41
+ };
42
+ const buildLegacyRequest = (trimmedQuery, countryCode, selectedAddressId, key) => {
43
+ const iso3 = _countries.COUNTRY_MAP[countryCode].iso3;
44
+ if (selectedAddressId) {
45
+ return {
46
+ url: `${SMARTY_INTL_LOOKUP_URL}/${selectedAddressId}`,
47
+ params: {
48
+ key,
49
+ country: iso3,
50
+ max_results: 10
51
+ }
52
+ };
53
+ }
54
+ return {
55
+ url: SMARTY_INTL_LOOKUP_URL,
56
+ params: {
57
+ key,
58
+ country: iso3,
59
+ search: trimmedQuery,
60
+ max_results: 10
61
+ }
62
+ };
33
63
  };
34
64
  const transformSuggestions = (candidates = []) => candidates.map(result => {
35
65
  if (result.street) {
@@ -49,11 +79,19 @@ const transformSuggestions = (candidates = []) => candidates.map(result => {
49
79
  isDetailed: false
50
80
  };
51
81
  });
52
- const useSmartyInternationalLookup = (query, countryCode = '', selectedAddressId = null, debounceMs = 300) => {
82
+ const useSmartyInternationalLookup = (query, countryCode = '', selectedAddressId = null, debounceMs = 300, smartyConfig = null) => {
83
+ const cfg = smartyConfig ?? (0, _smartyConfig.deriveSmartyConfig)(null);
53
84
  const trimmedQuery = query.trim();
54
85
  const isEnabled = Boolean((trimmedQuery && trimmedQuery.length >= MIN_QUERY_LENGTH || selectedAddressId) && countryCode && _countries.COUNTRY_MAP[countryCode]);
55
86
  const cacheKey = buildCacheKey(trimmedQuery, countryCode, selectedAddressId);
56
- const requestUrl = isEnabled ? buildLookupUrl(trimmedQuery, countryCode, selectedAddressId) : '';
87
+ const lambdaEnabled = cfg.smartyLambdaEnabled;
88
+ const legacyRequest = !lambdaEnabled && isEnabled ? buildLegacyRequest(trimmedQuery, countryCode, selectedAddressId, cfg.smartyKeys.intlAutocomplete) : null;
89
+ const lambdaUrl = (0, _smartyConfig.appendLambdaQueryParams)((0, _smartyConfig.buildSmartyEndpoint)(cfg, 'autocomplete', countryCode), {
90
+ skipCache: cfg.skipCache
91
+ });
92
+ const requestUrl = lambdaEnabled ? lambdaUrl : (legacyRequest === null || legacyRequest === void 0 ? void 0 : legacyRequest.url) || SMARTY_INTL_LOOKUP_URL;
93
+ const requestBody = lambdaEnabled && isEnabled ? buildRequestBody(trimmedQuery, countryCode, selectedAddressId) : null;
94
+ const requestParams = (legacyRequest === null || legacyRequest === void 0 ? void 0 : legacyRequest.params) || null;
57
95
  return (0, _useSmartyLookupBase.default)({
58
96
  isEnabled,
59
97
  debounceMs,
@@ -63,9 +101,11 @@ const useSmartyInternationalLookup = (query, countryCode = '', selectedAddressId
63
101
  rateLimitConfig: RATE_LIMIT_CONFIG,
64
102
  cacheKey,
65
103
  requestUrl,
104
+ requestBody,
105
+ requestParams,
66
106
  transformResponse: responseData => (0, _intlAutocompleteBusinessRules.applyIntlAutocompleteBusinessRules)(countryCode, transformSuggestions(responseData.candidates || [])),
67
107
  onError: err => {
68
- console.error('Smarty International lookup failed:', err);
108
+ console.error('International autocomplete lookup failed:', err);
69
109
  },
70
110
  effectDeps: [query, countryCode, selectedAddressId]
71
111
  });
@@ -1 +1 @@
1
- {"version":3,"file":"useSmartyInternationalLookup.js","names":["_countries","require","_intlAutocompleteBusinessRules","_smartyConfig","_useSmartyLookupBase","_interopRequireDefault","e","__esModule","default","MIN_QUERY_LENGTH","CACHE_NAMESPACE","CACHE_TTL_MS","RATE_LIMIT_NAMESPACE","RATE_LIMIT_CONFIG","limit","windowMs","cooldownMs","LOOKUP_URL","buildCacheKey","trimmedQuery","countryCode","selectedAddressId","JSON","stringify","query","buildLookupUrl","iso3","COUNTRY_MAP","SMARTY_INTL_AUTOCOMPLETE_KEY","encodeURIComponent","transformSuggestions","candidates","map","result","street","displayText","locality","administrative_area","postal_code","isDetailed","address_text","entries","useSmartyInternationalLookup","debounceMs","trim","isEnabled","Boolean","length","cacheKey","requestUrl","useSmartyLookupBase","cacheNamespace","cacheTtlMs","rateLimitNamespace","rateLimitConfig","transformResponse","responseData","applyIntlAutocompleteBusinessRules","onError","err","console","error","effectDeps","_default","exports"],"sources":["../../../src/addressLookup/hooks/useSmartyInternationalLookup.jsx"],"sourcesContent":["import { COUNTRY_MAP } from '../countries';\nimport { applyIntlAutocompleteBusinessRules } from '../utils/intlAutocompleteBusinessRules';\nimport { SMARTY_INTL_AUTOCOMPLETE_KEY } from '../utils/smartyConfig';\nimport useSmartyLookupBase from './useSmartyLookupBase';\n\nconst MIN_QUERY_LENGTH = 3;\nconst CACHE_NAMESPACE = 'smarty-intl-autocomplete';\nconst CACHE_TTL_MS = 60 * 1000;\nconst RATE_LIMIT_NAMESPACE = 'smarty-intl-autocomplete';\nconst RATE_LIMIT_CONFIG = {\n limit: 60,\n windowMs: 60 * 1000,\n cooldownMs: 30 * 1000\n};\nconst LOOKUP_URL = 'https://international-autocomplete.api.smarty.com/v2/lookup';\n\nconst buildCacheKey = (trimmedQuery, countryCode, selectedAddressId) => JSON.stringify({\n query: trimmedQuery,\n countryCode,\n selectedAddressId: selectedAddressId || null\n});\n\nconst buildLookupUrl = (trimmedQuery, countryCode, selectedAddressId) => {\n const iso3 = COUNTRY_MAP[countryCode].iso3;\n\n if (selectedAddressId) {\n return `${LOOKUP_URL}/${selectedAddressId}?key=${SMARTY_INTL_AUTOCOMPLETE_KEY}&country=${iso3}&max_results=10`;\n }\n\n return `${LOOKUP_URL}?key=${SMARTY_INTL_AUTOCOMPLETE_KEY}&country=${iso3}&search=${encodeURIComponent(trimmedQuery)}&max_results=10`;\n};\n\nconst transformSuggestions = (candidates = []) => candidates.map((result) => {\n if (result.street) {\n return {\n ...result,\n displayText: `${result.street}, ${result.locality}, ${result.administrative_area} ${result.postal_code}`,\n isDetailed: true\n };\n }\n\n let displayText = result.address_text;\n if (result.entries > 1) {\n displayText += ` (${result.entries})`;\n }\n\n return {\n ...result,\n displayText,\n isDetailed: false\n };\n});\n\nconst useSmartyInternationalLookup = (\n query,\n countryCode = '',\n selectedAddressId = null,\n debounceMs = 300\n) => {\n const trimmedQuery = query.trim();\n const isEnabled = Boolean(\n (((trimmedQuery && trimmedQuery.length >= MIN_QUERY_LENGTH) || selectedAddressId)) &&\n countryCode &&\n COUNTRY_MAP[countryCode]\n );\n const cacheKey = buildCacheKey(trimmedQuery, countryCode, selectedAddressId);\n const requestUrl = isEnabled ? buildLookupUrl(trimmedQuery, countryCode, selectedAddressId) : '';\n\n return useSmartyLookupBase({\n isEnabled,\n debounceMs,\n cacheNamespace: CACHE_NAMESPACE,\n cacheTtlMs: CACHE_TTL_MS,\n rateLimitNamespace: RATE_LIMIT_NAMESPACE,\n rateLimitConfig: RATE_LIMIT_CONFIG,\n cacheKey,\n requestUrl,\n transformResponse: (responseData) => (\n applyIntlAutocompleteBusinessRules(\n countryCode,\n transformSuggestions(responseData.candidates || [])\n )\n ),\n onError: (err) => {\n console.error('Smarty International lookup failed:', err);\n },\n effectDeps: [query, countryCode, selectedAddressId]\n });\n};\n\nexport default useSmartyInternationalLookup;\n"],"mappings":"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","ignoreList":[]}
1
+ {"version":3,"file":"useSmartyInternationalLookup.js","names":["_countries","require","_intlAutocompleteBusinessRules","_smartyConfig","_useSmartyLookupBase","_interopRequireDefault","e","__esModule","default","MIN_QUERY_LENGTH","CACHE_NAMESPACE","CACHE_TTL_MS","RATE_LIMIT_NAMESPACE","RATE_LIMIT_CONFIG","limit","windowMs","cooldownMs","SMARTY_INTL_LOOKUP_URL","buildCacheKey","trimmedQuery","countryCode","selectedAddressId","JSON","stringify","query","buildRequestBody","iso3","COUNTRY_MAP","address_id","max_results","search","buildLegacyRequest","key","url","params","country","transformSuggestions","candidates","map","result","street","displayText","locality","administrative_area","postal_code","isDetailed","address_text","entries","useSmartyInternationalLookup","debounceMs","smartyConfig","cfg","deriveSmartyConfig","trim","isEnabled","Boolean","length","cacheKey","lambdaEnabled","smartyLambdaEnabled","legacyRequest","smartyKeys","intlAutocomplete","lambdaUrl","appendLambdaQueryParams","buildSmartyEndpoint","skipCache","requestUrl","requestBody","requestParams","useSmartyLookupBase","cacheNamespace","cacheTtlMs","rateLimitNamespace","rateLimitConfig","transformResponse","responseData","applyIntlAutocompleteBusinessRules","onError","err","console","error","effectDeps","_default","exports"],"sources":["../../../src/addressLookup/hooks/useSmartyInternationalLookup.jsx"],"sourcesContent":["import { COUNTRY_MAP } from '../countries';\nimport { applyIntlAutocompleteBusinessRules } from '../utils/intlAutocompleteBusinessRules';\nimport {\n appendLambdaQueryParams,\n buildSmartyEndpoint,\n deriveSmartyConfig\n} from '../utils/smartyConfig';\nimport useSmartyLookupBase from './useSmartyLookupBase';\n\nconst MIN_QUERY_LENGTH = 3;\nconst CACHE_NAMESPACE = 'smarty-intl-autocomplete';\nconst CACHE_TTL_MS = 60 * 1000;\nconst RATE_LIMIT_NAMESPACE = 'smarty-intl-autocomplete';\nconst RATE_LIMIT_CONFIG = {\n limit: 60,\n windowMs: 60 * 1000,\n cooldownMs: 30 * 1000\n};\nconst SMARTY_INTL_LOOKUP_URL = 'https://international-autocomplete.api.smarty.com/v2/lookup';\n\nconst buildCacheKey = (trimmedQuery, countryCode, selectedAddressId) => JSON.stringify({\n query: trimmedQuery,\n countryCode,\n selectedAddressId: selectedAddressId || null\n});\n\nconst buildRequestBody = (trimmedQuery, countryCode, selectedAddressId) => {\n const iso3 = COUNTRY_MAP[countryCode].iso3;\n\n if (selectedAddressId) {\n return { address_id: selectedAddressId, iso3, max_results: 10 };\n }\n\n return { search: trimmedQuery, iso3, max_results: 10 };\n};\n\nconst buildLegacyRequest = (trimmedQuery, countryCode, selectedAddressId, key) => {\n const iso3 = COUNTRY_MAP[countryCode].iso3;\n\n if (selectedAddressId) {\n return {\n url: `${SMARTY_INTL_LOOKUP_URL}/${selectedAddressId}`,\n params: { key, country: iso3, max_results: 10 }\n };\n }\n\n return {\n url: SMARTY_INTL_LOOKUP_URL,\n params: { key, country: iso3, search: trimmedQuery, max_results: 10 }\n };\n};\n\nconst transformSuggestions = (candidates = []) => candidates.map((result) => {\n if (result.street) {\n return {\n ...result,\n displayText: `${result.street}, ${result.locality}, ${result.administrative_area} ${result.postal_code}`,\n isDetailed: true\n };\n }\n\n let displayText = result.address_text;\n if (result.entries > 1) {\n displayText += ` (${result.entries})`;\n }\n\n return {\n ...result,\n displayText,\n isDetailed: false\n };\n});\n\nconst useSmartyInternationalLookup = (\n query,\n countryCode = '',\n selectedAddressId = null,\n debounceMs = 300,\n smartyConfig = null\n) => {\n const cfg = smartyConfig ?? deriveSmartyConfig(null);\n const trimmedQuery = query.trim();\n const isEnabled = Boolean(\n (((trimmedQuery && trimmedQuery.length >= MIN_QUERY_LENGTH) || selectedAddressId)) &&\n countryCode &&\n COUNTRY_MAP[countryCode]\n );\n const cacheKey = buildCacheKey(trimmedQuery, countryCode, selectedAddressId);\n const lambdaEnabled = cfg.smartyLambdaEnabled;\n const legacyRequest = !lambdaEnabled && isEnabled ?\n buildLegacyRequest(trimmedQuery, countryCode, selectedAddressId, cfg.smartyKeys.intlAutocomplete) :\n null;\n const lambdaUrl = appendLambdaQueryParams(\n buildSmartyEndpoint(cfg, 'autocomplete', countryCode),\n { skipCache: cfg.skipCache }\n );\n const requestUrl = lambdaEnabled ? lambdaUrl : (legacyRequest?.url || SMARTY_INTL_LOOKUP_URL);\n const requestBody = lambdaEnabled && isEnabled ?\n buildRequestBody(trimmedQuery, countryCode, selectedAddressId) :\n null;\n const requestParams = legacyRequest?.params || null;\n\n return useSmartyLookupBase({\n isEnabled,\n debounceMs,\n cacheNamespace: CACHE_NAMESPACE,\n cacheTtlMs: CACHE_TTL_MS,\n rateLimitNamespace: RATE_LIMIT_NAMESPACE,\n rateLimitConfig: RATE_LIMIT_CONFIG,\n cacheKey,\n requestUrl,\n requestBody,\n requestParams,\n transformResponse: (responseData) => (\n applyIntlAutocompleteBusinessRules(\n countryCode,\n transformSuggestions(responseData.candidates || [])\n )\n ),\n onError: (err) => {\n console.error('International autocomplete lookup failed:', err);\n },\n effectDeps: [query, countryCode, selectedAddressId]\n });\n};\n\nexport default useSmartyInternationalLookup;\n"],"mappings":"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","ignoreList":[]}
@@ -22,6 +22,8 @@ const useSmartyLookupBase = ({
22
22
  rateLimitConfig,
23
23
  cacheKey,
24
24
  requestUrl,
25
+ requestBody,
26
+ requestParams,
25
27
  transformResponse,
26
28
  onError = null,
27
29
  effectDeps = []
@@ -85,7 +87,10 @@ const useSmartyLookupBase = ({
85
87
  settled: false,
86
88
  promise: (async () => {
87
89
  const startTime = performance.now();
88
- const networkResponse = await _axios.default.get(requestUrl, {
90
+ const networkResponse = requestBody ? await _axios.default.post(requestUrl, requestBody, {
91
+ signal: controller.signal
92
+ }) : await _axios.default.get(requestUrl, {
93
+ params: requestParams,
89
94
  signal: controller.signal
90
95
  });
91
96
  const endTime = performance.now();
@@ -1 +1 @@
1
- {"version":3,"file":"useSmartyLookupBase.js","names":["_react","require","_axios","_interopRequireDefault","_requestCache","_requestRateLimiter","_inFlightRequests","e","__esModule","default","RATE_LIMIT_ERROR_CODE","useSmartyLookupBase","isEnabled","debounceMs","cacheNamespace","cacheTtlMs","rateLimitNamespace","rateLimitConfig","cacheKey","requestUrl","transformResponse","onError","effectDeps","suggestions","setSuggestions","useState","loading","setLoading","error","setError","rateLimited","setRateLimited","responseTime","setResponseTime","useEffect","cancelled","activeRequest","activeRequestKey","timer","setTimeout","cached","getCachedValue","rateLimitStatus","checkRateLimit","allowed","existingRequest","getInFlightRequest","response","elapsedTime","retainInFlightRequest","promise","controller","AbortController","request","settled","startTime","performance","now","networkResponse","axios","get","signal","endTime","Math","round","setInFlightRequest","settleInFlightRequest","formattedSuggestions","data","setCachedValue","err","name","code","message","_activeRequest","_activeRequest2","clearTimeout","releaseInFlightRequest","subscribers","abort","_default","exports"],"sources":["../../../src/addressLookup/hooks/useSmartyLookupBase.jsx"],"sourcesContent":["import { useState, useEffect } from 'react';\nimport axios from 'axios';\nimport { getCachedValue, setCachedValue } from '../utils/requestCache';\nimport { checkRateLimit } from '../utils/requestRateLimiter';\nimport {\n getInFlightRequest,\n setInFlightRequest,\n retainInFlightRequest,\n releaseInFlightRequest,\n settleInFlightRequest\n} from '../utils/inFlightRequests';\n\n// Not rendered directly: useSmartyServiceErrors resolves the displayed text\n// from fieldLabels.rateLimited. This is only a truthy signal for `error`.\nconst RATE_LIMIT_ERROR_CODE = 'rate-limited';\n\nconst useSmartyLookupBase = ({\n isEnabled,\n debounceMs,\n cacheNamespace,\n cacheTtlMs,\n rateLimitNamespace,\n rateLimitConfig,\n cacheKey,\n requestUrl,\n transformResponse,\n onError = null,\n effectDeps = []\n}) => {\n const [suggestions, setSuggestions] = useState([]);\n const [loading, setLoading] = useState(false);\n const [error, setError] = useState(null);\n const [rateLimited, setRateLimited] = useState(false);\n const [responseTime, setResponseTime] = useState(null);\n\n useEffect(() => {\n if (!isEnabled) {\n setSuggestions([]);\n setLoading(false);\n setError(null);\n setRateLimited(false);\n setResponseTime(null);\n return;\n }\n\n setLoading(true);\n setError(null);\n let cancelled = false;\n let activeRequest = null;\n let activeRequestKey = null;\n\n const timer = setTimeout(async () => {\n try {\n const cached = getCachedValue(cacheNamespace, cacheKey);\n if (cached) {\n if (!cancelled) {\n setSuggestions(cached.suggestions);\n setResponseTime(cached.responseTime);\n setRateLimited(false);\n setLoading(false);\n }\n return;\n }\n\n const rateLimitStatus = checkRateLimit(rateLimitNamespace, rateLimitConfig);\n if (!rateLimitStatus.allowed) {\n if (!cancelled) {\n setSuggestions([]);\n setResponseTime(null);\n setRateLimited(true);\n setError(RATE_LIMIT_ERROR_CODE);\n setLoading(false);\n }\n return;\n }\n\n activeRequestKey = cacheKey;\n const existingRequest = getInFlightRequest(activeRequestKey);\n let response;\n let elapsedTime;\n\n if (existingRequest) {\n activeRequest = retainInFlightRequest(activeRequestKey);\n ({ response, elapsedTime } = await activeRequest.promise);\n } else {\n const controller = new AbortController();\n const request = {\n controller,\n settled: false,\n promise: (async () => {\n const startTime = performance.now();\n const networkResponse = await axios.get(requestUrl, { signal: controller.signal });\n const endTime = performance.now();\n return {\n response: networkResponse,\n elapsedTime: Math.round(endTime - startTime)\n };\n })()\n };\n setInFlightRequest(activeRequestKey, request);\n activeRequest = retainInFlightRequest(activeRequestKey);\n try {\n ({ response, elapsedTime } = await activeRequest.promise);\n } finally {\n settleInFlightRequest(activeRequestKey, activeRequest);\n }\n }\n\n if (cancelled) {\n return;\n }\n\n const formattedSuggestions = transformResponse(response.data);\n setResponseTime(elapsedTime);\n setCachedValue(cacheNamespace, cacheKey, {\n suggestions: formattedSuggestions,\n responseTime: elapsedTime\n }, cacheTtlMs);\n setRateLimited(false);\n setSuggestions(formattedSuggestions);\n } catch (err) {\n if (cancelled || err.name === 'CanceledError' || err.code === 'ERR_CANCELED') {\n return;\n }\n onError?.(err);\n setRateLimited(false);\n setError(err.message);\n setSuggestions([]);\n setResponseTime(null);\n } finally {\n setLoading(false);\n }\n }, debounceMs);\n\n return () => {\n cancelled = true;\n clearTimeout(timer);\n if (activeRequestKey && activeRequest) {\n releaseInFlightRequest(activeRequestKey, activeRequest);\n }\n if (activeRequest?.subscribers === 0 && !activeRequest?.settled) {\n activeRequest.controller.abort();\n }\n };\n }, [isEnabled, debounceMs, ...effectDeps]);\n\n return {\n suggestions,\n loading,\n error,\n rateLimited,\n responseTime\n };\n};\n\nexport default useSmartyLookupBase;\n"],"mappings":"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","ignoreList":[]}
1
+ {"version":3,"file":"useSmartyLookupBase.js","names":["_react","require","_axios","_interopRequireDefault","_requestCache","_requestRateLimiter","_inFlightRequests","e","__esModule","default","RATE_LIMIT_ERROR_CODE","useSmartyLookupBase","isEnabled","debounceMs","cacheNamespace","cacheTtlMs","rateLimitNamespace","rateLimitConfig","cacheKey","requestUrl","requestBody","requestParams","transformResponse","onError","effectDeps","suggestions","setSuggestions","useState","loading","setLoading","error","setError","rateLimited","setRateLimited","responseTime","setResponseTime","useEffect","cancelled","activeRequest","activeRequestKey","timer","setTimeout","cached","getCachedValue","rateLimitStatus","checkRateLimit","allowed","existingRequest","getInFlightRequest","response","elapsedTime","retainInFlightRequest","promise","controller","AbortController","request","settled","startTime","performance","now","networkResponse","axios","post","signal","get","params","endTime","Math","round","setInFlightRequest","settleInFlightRequest","formattedSuggestions","data","setCachedValue","err","name","code","message","_activeRequest","_activeRequest2","clearTimeout","releaseInFlightRequest","subscribers","abort","_default","exports"],"sources":["../../../src/addressLookup/hooks/useSmartyLookupBase.jsx"],"sourcesContent":["import { useState, useEffect } from 'react';\nimport axios from 'axios';\nimport { getCachedValue, setCachedValue } from '../utils/requestCache';\nimport { checkRateLimit } from '../utils/requestRateLimiter';\nimport {\n getInFlightRequest,\n setInFlightRequest,\n retainInFlightRequest,\n releaseInFlightRequest,\n settleInFlightRequest\n} from '../utils/inFlightRequests';\n\n// Not rendered directly: useSmartyServiceErrors resolves the displayed text\n// from fieldLabels.rateLimited. This is only a truthy signal for `error`.\nconst RATE_LIMIT_ERROR_CODE = 'rate-limited';\n\nconst useSmartyLookupBase = ({\n isEnabled,\n debounceMs,\n cacheNamespace,\n cacheTtlMs,\n rateLimitNamespace,\n rateLimitConfig,\n cacheKey,\n requestUrl,\n requestBody,\n requestParams,\n transformResponse,\n onError = null,\n effectDeps = []\n}) => {\n const [suggestions, setSuggestions] = useState([]);\n const [loading, setLoading] = useState(false);\n const [error, setError] = useState(null);\n const [rateLimited, setRateLimited] = useState(false);\n const [responseTime, setResponseTime] = useState(null);\n\n useEffect(() => {\n if (!isEnabled) {\n setSuggestions([]);\n setLoading(false);\n setError(null);\n setRateLimited(false);\n setResponseTime(null);\n return;\n }\n\n setLoading(true);\n setError(null);\n let cancelled = false;\n let activeRequest = null;\n let activeRequestKey = null;\n\n const timer = setTimeout(async () => {\n try {\n const cached = getCachedValue(cacheNamespace, cacheKey);\n if (cached) {\n if (!cancelled) {\n setSuggestions(cached.suggestions);\n setResponseTime(cached.responseTime);\n setRateLimited(false);\n setLoading(false);\n }\n return;\n }\n\n const rateLimitStatus = checkRateLimit(rateLimitNamespace, rateLimitConfig);\n if (!rateLimitStatus.allowed) {\n if (!cancelled) {\n setSuggestions([]);\n setResponseTime(null);\n setRateLimited(true);\n setError(RATE_LIMIT_ERROR_CODE);\n setLoading(false);\n }\n return;\n }\n\n activeRequestKey = cacheKey;\n const existingRequest = getInFlightRequest(activeRequestKey);\n let response;\n let elapsedTime;\n\n if (existingRequest) {\n activeRequest = retainInFlightRequest(activeRequestKey);\n ({ response, elapsedTime } = await activeRequest.promise);\n } else {\n const controller = new AbortController();\n const request = {\n controller,\n settled: false,\n promise: (async () => {\n const startTime = performance.now();\n const networkResponse = requestBody\n ? await axios.post(requestUrl, requestBody, { signal: controller.signal })\n : await axios.get(requestUrl, { params: requestParams, signal: controller.signal });\n const endTime = performance.now();\n return {\n response: networkResponse,\n elapsedTime: Math.round(endTime - startTime)\n };\n })()\n };\n setInFlightRequest(activeRequestKey, request);\n activeRequest = retainInFlightRequest(activeRequestKey);\n try {\n ({ response, elapsedTime } = await activeRequest.promise);\n } finally {\n settleInFlightRequest(activeRequestKey, activeRequest);\n }\n }\n\n if (cancelled) {\n return;\n }\n\n const formattedSuggestions = transformResponse(response.data);\n setResponseTime(elapsedTime);\n setCachedValue(cacheNamespace, cacheKey, {\n suggestions: formattedSuggestions,\n responseTime: elapsedTime\n }, cacheTtlMs);\n setRateLimited(false);\n setSuggestions(formattedSuggestions);\n } catch (err) {\n if (cancelled || err.name === 'CanceledError' || err.code === 'ERR_CANCELED') {\n return;\n }\n onError?.(err);\n setRateLimited(false);\n setError(err.message);\n setSuggestions([]);\n setResponseTime(null);\n } finally {\n setLoading(false);\n }\n }, debounceMs);\n\n return () => {\n cancelled = true;\n clearTimeout(timer);\n if (activeRequestKey && activeRequest) {\n releaseInFlightRequest(activeRequestKey, activeRequest);\n }\n if (activeRequest?.subscribers === 0 && !activeRequest?.settled) {\n activeRequest.controller.abort();\n }\n };\n }, [isEnabled, debounceMs, ...effectDeps]);\n\n return {\n suggestions,\n loading,\n error,\n rateLimited,\n responseTime\n };\n};\n\nexport default useSmartyLookupBase;\n"],"mappings":";;;;;;AAAA,IAAAA,MAAA,GAAAC,OAAA;AACA,IAAAC,MAAA,GAAAC,sBAAA,CAAAF,OAAA;AACA,IAAAG,aAAA,GAAAH,OAAA;AACA,IAAAI,mBAAA,GAAAJ,OAAA;AACA,IAAAK,iBAAA,GAAAL,OAAA;AAMmC,SAAAE,uBAAAI,CAAA,WAAAA,CAAA,IAAAA,CAAA,CAAAC,UAAA,GAAAD,CAAA,KAAAE,OAAA,EAAAF,CAAA;AAEnC;AACA;AACA,MAAMG,qBAAqB,GAAG,cAAc;AAE5C,MAAMC,mBAAmB,GAAGA,CAAC;EAC3BC,SAAS;EACTC,UAAU;EACVC,cAAc;EACdC,UAAU;EACVC,kBAAkB;EAClBC,eAAe;EACfC,QAAQ;EACRC,UAAU;EACVC,WAAW;EACXC,aAAa;EACbC,iBAAiB;EACjBC,OAAO,GAAG,IAAI;EACdC,UAAU,GAAG;AACf,CAAC,KAAK;EACJ,MAAM,CAACC,WAAW,EAAEC,cAAc,CAAC,GAAG,IAAAC,eAAQ,EAAC,EAAE,CAAC;EAClD,MAAM,CAACC,OAAO,EAAEC,UAAU,CAAC,GAAG,IAAAF,eAAQ,EAAC,KAAK,CAAC;EAC7C,MAAM,CAACG,KAAK,EAAEC,QAAQ,CAAC,GAAG,IAAAJ,eAAQ,EAAC,IAAI,CAAC;EACxC,MAAM,CAACK,WAAW,EAAEC,cAAc,CAAC,GAAG,IAAAN,eAAQ,EAAC,KAAK,CAAC;EACrD,MAAM,CAACO,YAAY,EAAEC,eAAe,CAAC,GAAG,IAAAR,eAAQ,EAAC,IAAI,CAAC;EAEtD,IAAAS,gBAAS,EAAC,MAAM;IACd,IAAI,CAACxB,SAAS,EAAE;MACdc,cAAc,CAAC,EAAE,CAAC;MAClBG,UAAU,CAAC,KAAK,CAAC;MACjBE,QAAQ,CAAC,IAAI,CAAC;MACdE,cAAc,CAAC,KAAK,CAAC;MACrBE,eAAe,CAAC,IAAI,CAAC;MACrB;IACF;IAEAN,UAAU,CAAC,IAAI,CAAC;IAChBE,QAAQ,CAAC,IAAI,CAAC;IACd,IAAIM,SAAS,GAAG,KAAK;IACrB,IAAIC,aAAa,GAAG,IAAI;IACxB,IAAIC,gBAAgB,GAAG,IAAI;IAE3B,MAAMC,KAAK,GAAGC,UAAU,CAAC,YAAY;MACnC,IAAI;QACF,MAAMC,MAAM,GAAG,IAAAC,4BAAc,EAAC7B,cAAc,EAAEI,QAAQ,CAAC;QACvD,IAAIwB,MAAM,EAAE;UACV,IAAI,CAACL,SAAS,EAAE;YACdX,cAAc,CAACgB,MAAM,CAACjB,WAAW,CAAC;YAClCU,eAAe,CAACO,MAAM,CAACR,YAAY,CAAC;YACpCD,cAAc,CAAC,KAAK,CAAC;YACrBJ,UAAU,CAAC,KAAK,CAAC;UACnB;UACA;QACF;QAEA,MAAMe,eAAe,GAAG,IAAAC,kCAAc,EAAC7B,kBAAkB,EAAEC,eAAe,CAAC;QAC3E,IAAI,CAAC2B,eAAe,CAACE,OAAO,EAAE;UAC5B,IAAI,CAACT,SAAS,EAAE;YACdX,cAAc,CAAC,EAAE,CAAC;YAClBS,eAAe,CAAC,IAAI,CAAC;YACrBF,cAAc,CAAC,IAAI,CAAC;YACpBF,QAAQ,CAACrB,qBAAqB,CAAC;YAC/BmB,UAAU,CAAC,KAAK,CAAC;UACnB;UACA;QACF;QAEAU,gBAAgB,GAAGrB,QAAQ;QAC3B,MAAM6B,eAAe,GAAG,IAAAC,oCAAkB,EAACT,gBAAgB,CAAC;QAC5D,IAAIU,QAAQ;QACZ,IAAIC,WAAW;QAEf,IAAIH,eAAe,EAAE;UACnBT,aAAa,GAAG,IAAAa,uCAAqB,EAACZ,gBAAgB,CAAC;UACvD,CAAC;YAAEU,QAAQ;YAAEC;UAAY,CAAC,GAAG,MAAMZ,aAAa,CAACc,OAAO;QAC1D,CAAC,MAAM;UACL,MAAMC,UAAU,GAAG,IAAIC,eAAe,CAAC,CAAC;UACxC,MAAMC,OAAO,GAAG;YACdF,UAAU;YACVG,OAAO,EAAE,KAAK;YACdJ,OAAO,EAAE,CAAC,YAAY;cACpB,MAAMK,SAAS,GAAGC,WAAW,CAACC,GAAG,CAAC,CAAC;cACnC,MAAMC,eAAe,GAAGxC,WAAW,GAC/B,MAAMyC,cAAK,CAACC,IAAI,CAAC3C,UAAU,EAAEC,WAAW,EAAE;gBAAE2C,MAAM,EAAEV,UAAU,CAACU;cAAO,CAAC,CAAC,GACxE,MAAMF,cAAK,CAACG,GAAG,CAAC7C,UAAU,EAAE;gBAAE8C,MAAM,EAAE5C,aAAa;gBAAE0C,MAAM,EAAEV,UAAU,CAACU;cAAO,CAAC,CAAC;cACrF,MAAMG,OAAO,GAAGR,WAAW,CAACC,GAAG,CAAC,CAAC;cACjC,OAAO;gBACLV,QAAQ,EAAEW,eAAe;gBACzBV,WAAW,EAAEiB,IAAI,CAACC,KAAK,CAACF,OAAO,GAAGT,SAAS;cAC7C,CAAC;YACH,CAAC,EAAE;UACL,CAAC;UACD,IAAAY,oCAAkB,EAAC9B,gBAAgB,EAAEgB,OAAO,CAAC;UAC7CjB,aAAa,GAAG,IAAAa,uCAAqB,EAACZ,gBAAgB,CAAC;UACvD,IAAI;YACF,CAAC;cAAEU,QAAQ;cAAEC;YAAY,CAAC,GAAG,MAAMZ,aAAa,CAACc,OAAO;UAC1D,CAAC,SAAS;YACR,IAAAkB,uCAAqB,EAAC/B,gBAAgB,EAAED,aAAa,CAAC;UACxD;QACF;QAEA,IAAID,SAAS,EAAE;UACb;QACF;QAEA,MAAMkC,oBAAoB,GAAGjD,iBAAiB,CAAC2B,QAAQ,CAACuB,IAAI,CAAC;QAC7DrC,eAAe,CAACe,WAAW,CAAC;QAC5B,IAAAuB,4BAAc,EAAC3D,cAAc,EAAEI,QAAQ,EAAE;UACvCO,WAAW,EAAE8C,oBAAoB;UACjCrC,YAAY,EAAEgB;QAChB,CAAC,EAAEnC,UAAU,CAAC;QACdkB,cAAc,CAAC,KAAK,CAAC;QACrBP,cAAc,CAAC6C,oBAAoB,CAAC;MACtC,CAAC,CAAC,OAAOG,GAAG,EAAE;QACZ,IAAIrC,SAAS,IAAIqC,GAAG,CAACC,IAAI,KAAK,eAAe,IAAID,GAAG,CAACE,IAAI,KAAK,cAAc,EAAE;UAC5E;QACF;QACArD,OAAO,aAAPA,OAAO,eAAPA,OAAO,CAAGmD,GAAG,CAAC;QACdzC,cAAc,CAAC,KAAK,CAAC;QACrBF,QAAQ,CAAC2C,GAAG,CAACG,OAAO,CAAC;QACrBnD,cAAc,CAAC,EAAE,CAAC;QAClBS,eAAe,CAAC,IAAI,CAAC;MACvB,CAAC,SAAS;QACRN,UAAU,CAAC,KAAK,CAAC;MACnB;IACF,CAAC,EAAEhB,UAAU,CAAC;IAEd,OAAO,MAAM;MAAA,IAAAiE,cAAA,EAAAC,eAAA;MACX1C,SAAS,GAAG,IAAI;MAChB2C,YAAY,CAACxC,KAAK,CAAC;MACnB,IAAID,gBAAgB,IAAID,aAAa,EAAE;QACrC,IAAA2C,wCAAsB,EAAC1C,gBAAgB,EAAED,aAAa,CAAC;MACzD;MACA,IAAI,EAAAwC,cAAA,GAAAxC,aAAa,cAAAwC,cAAA,uBAAbA,cAAA,CAAeI,WAAW,MAAK,CAAC,IAAI,GAAAH,eAAA,GAACzC,aAAa,cAAAyC,eAAA,eAAbA,eAAA,CAAevB,OAAO,GAAE;QAC/DlB,aAAa,CAACe,UAAU,CAAC8B,KAAK,CAAC,CAAC;MAClC;IACF,CAAC;EACH,CAAC,EAAE,CAACvE,SAAS,EAAEC,UAAU,EAAE,GAAGW,UAAU,CAAC,CAAC;EAE1C,OAAO;IACLC,WAAW;IACXG,OAAO;IACPE,KAAK;IACLE,WAAW;IACXE;EACF,CAAC;AACH,CAAC;AAAC,IAAAkD,QAAA,GAAAC,OAAA,CAAA5E,OAAA,GAEaE,mBAAmB","ignoreList":[]}
@@ -16,6 +16,7 @@ const RATE_LIMIT_CONFIG = {
16
16
  windowMs: 60 * 1000,
17
17
  cooldownMs: 30 * 1000
18
18
  };
19
+ const SMARTY_AUTOCOMPLETE_URL = 'https://us-autocomplete-pro.api.smarty.com/lookup';
19
20
  const buildCacheKey = (trimmedQuery, selectedAddress) => JSON.stringify({
20
21
  query: trimmedQuery,
21
22
  selected: selectedAddress ? {
@@ -27,13 +28,25 @@ const buildCacheKey = (trimmedQuery, selectedAddress) => JSON.stringify({
27
28
  postalCode: selectedAddress.zipcode
28
29
  } : null
29
30
  });
30
- const buildLookupUrl = (trimmedQuery, selectedAddress) => {
31
- let smartyUrl = 'https://us-autocomplete-pro.api.smarty.com/' + `lookup?key=${_smartyConfig.SMARTY_US_AUTOCOMPLETE_KEY}&search=${encodeURIComponent(trimmedQuery)}`;
31
+ const buildSelectedValue = selectedAddress => `${selectedAddress.street_line} ` + `${selectedAddress.secondary} (${selectedAddress.entries}) ` + `${selectedAddress.city} ${selectedAddress.state} ${selectedAddress.zipcode}`;
32
+ const buildRequestBody = (trimmedQuery, selectedAddress) => {
33
+ const body = {
34
+ search: trimmedQuery
35
+ };
32
36
  if (selectedAddress) {
33
- const selectedParam = `${selectedAddress.street_line} ` + `${selectedAddress.secondary} (${selectedAddress.entries}) ` + `${selectedAddress.city} ${selectedAddress.state} ${selectedAddress.zipcode}`;
34
- smartyUrl += `&selected=${encodeURIComponent(selectedParam)}`;
37
+ body.selected = buildSelectedValue(selectedAddress);
35
38
  }
36
- return smartyUrl;
39
+ return body;
40
+ };
41
+ const buildRequestParams = (trimmedQuery, selectedAddress, key) => {
42
+ const params = {
43
+ key,
44
+ search: trimmedQuery
45
+ };
46
+ if (selectedAddress) {
47
+ params.selected = buildSelectedValue(selectedAddress);
48
+ }
49
+ return params;
37
50
  };
38
51
  const transformSuggestions = (responseData = {}) => {
39
52
  const results = responseData.suggestions || [];
@@ -53,11 +66,18 @@ const transformSuggestions = (responseData = {}) => {
53
66
  };
54
67
  });
55
68
  };
56
- const useSmartyUSLookup = (query, selectedAddress = null, debounceMs = 300) => {
69
+ const useSmartyUSLookup = (query, selectedAddress = null, debounceMs = 300, smartyConfig = null) => {
70
+ const cfg = smartyConfig ?? (0, _smartyConfig.deriveSmartyConfig)(null);
57
71
  const trimmedQuery = query.trim();
58
72
  const isEnabled = Boolean(trimmedQuery && (selectedAddress || trimmedQuery.length >= MIN_QUERY_LENGTH));
59
73
  const cacheKey = buildCacheKey(trimmedQuery, selectedAddress);
60
- const requestUrl = isEnabled ? buildLookupUrl(trimmedQuery, selectedAddress) : '';
74
+ const lambdaEnabled = cfg.smartyLambdaEnabled;
75
+ const lambdaUrl = (0, _smartyConfig.appendLambdaQueryParams)((0, _smartyConfig.buildSmartyEndpoint)(cfg, 'autocomplete', 'US'), {
76
+ skipCache: cfg.skipCache
77
+ });
78
+ const requestUrl = lambdaEnabled ? lambdaUrl : SMARTY_AUTOCOMPLETE_URL;
79
+ const requestBody = lambdaEnabled && isEnabled ? buildRequestBody(trimmedQuery, selectedAddress) : null;
80
+ const requestParams = !lambdaEnabled && isEnabled ? buildRequestParams(trimmedQuery, selectedAddress, cfg.smartyKeys.usAutocomplete) : null;
61
81
  return (0, _useSmartyLookupBase.default)({
62
82
  isEnabled,
63
83
  debounceMs,
@@ -67,9 +87,11 @@ const useSmartyUSLookup = (query, selectedAddress = null, debounceMs = 300) => {
67
87
  rateLimitConfig: RATE_LIMIT_CONFIG,
68
88
  cacheKey,
69
89
  requestUrl,
90
+ requestBody,
91
+ requestParams,
70
92
  transformResponse: transformSuggestions,
71
93
  onError: err => {
72
- console.error('Smarty US lookup failed:', err);
94
+ console.error('US autocomplete lookup failed:', err);
73
95
  },
74
96
  effectDeps: [query, selectedAddress]
75
97
  });
@@ -1 +1 @@
1
- {"version":3,"file":"useSmartyUSLookup.js","names":["_smartyConfig","require","_useSmartyLookupBase","_interopRequireDefault","e","__esModule","default","MIN_QUERY_LENGTH","CACHE_NAMESPACE","CACHE_TTL_MS","RATE_LIMIT_NAMESPACE","RATE_LIMIT_CONFIG","limit","windowMs","cooldownMs","buildCacheKey","trimmedQuery","selectedAddress","JSON","stringify","query","selected","streetLine","street_line","secondary","entries","city","region","state","postalCode","zipcode","buildLookupUrl","smartyUrl","SMARTY_US_AUTOCOMPLETE_KEY","encodeURIComponent","selectedParam","transformSuggestions","responseData","results","suggestions","map","result","whiteSpace","displayText","useSmartyUSLookup","debounceMs","trim","isEnabled","Boolean","length","cacheKey","requestUrl","useSmartyLookupBase","cacheNamespace","cacheTtlMs","rateLimitNamespace","rateLimitConfig","transformResponse","onError","err","console","error","effectDeps","_default","exports"],"sources":["../../../src/addressLookup/hooks/useSmartyUSLookup.jsx"],"sourcesContent":["import { SMARTY_US_AUTOCOMPLETE_KEY } from '../utils/smartyConfig';\nimport useSmartyLookupBase from './useSmartyLookupBase';\n\nconst MIN_QUERY_LENGTH = 3;\nconst CACHE_NAMESPACE = 'smarty-us-autocomplete';\nconst CACHE_TTL_MS = 60 * 1000;\nconst RATE_LIMIT_NAMESPACE = 'smarty-us-autocomplete';\nconst RATE_LIMIT_CONFIG = {\n limit: 60,\n windowMs: 60 * 1000,\n cooldownMs: 30 * 1000\n};\n\nconst buildCacheKey = (trimmedQuery, selectedAddress) => JSON.stringify({\n query: trimmedQuery,\n selected: selectedAddress ? {\n streetLine: selectedAddress.street_line,\n secondary: selectedAddress.secondary,\n entries: selectedAddress.entries,\n city: selectedAddress.city,\n region: selectedAddress.state,\n postalCode: selectedAddress.zipcode\n } : null\n});\n\nconst buildLookupUrl = (trimmedQuery, selectedAddress) => {\n let smartyUrl = 'https://us-autocomplete-pro.api.smarty.com/' +\n `lookup?key=${SMARTY_US_AUTOCOMPLETE_KEY}&search=${encodeURIComponent(trimmedQuery)}`;\n\n if (selectedAddress) {\n const selectedParam = `${selectedAddress.street_line} ` +\n `${selectedAddress.secondary} (${selectedAddress.entries}) ` +\n `${selectedAddress.city} ${selectedAddress.state} ${selectedAddress.zipcode}`;\n smartyUrl += `&selected=${encodeURIComponent(selectedParam)}`;\n }\n\n return smartyUrl;\n};\n\nconst transformSuggestions = (responseData = {}) => {\n const results = responseData.suggestions || [];\n\n return results.map((result) => {\n let whiteSpace = '';\n let secondary = result.secondary || '';\n\n if (secondary) {\n if (result.entries > 1) {\n secondary += ` (${result.entries} entries)`;\n }\n whiteSpace = ' ';\n }\n\n const displayText = `${result.street_line}${whiteSpace}${secondary} ${result.city}, ${result.state} ${result.zipcode}`;\n\n return {\n ...result,\n displayText\n };\n });\n};\n\nconst useSmartyUSLookup = (query, selectedAddress = null, debounceMs = 300) => {\n const trimmedQuery = query.trim();\n const isEnabled = Boolean(trimmedQuery && (selectedAddress || trimmedQuery.length >= MIN_QUERY_LENGTH));\n const cacheKey = buildCacheKey(trimmedQuery, selectedAddress);\n const requestUrl = isEnabled ? buildLookupUrl(trimmedQuery, selectedAddress) : '';\n\n return useSmartyLookupBase({\n isEnabled,\n debounceMs,\n cacheNamespace: CACHE_NAMESPACE,\n cacheTtlMs: CACHE_TTL_MS,\n rateLimitNamespace: RATE_LIMIT_NAMESPACE,\n rateLimitConfig: RATE_LIMIT_CONFIG,\n cacheKey,\n requestUrl,\n transformResponse: transformSuggestions,\n onError: (err) => {\n console.error('Smarty US lookup failed:', err);\n },\n effectDeps: [query, selectedAddress]\n });\n};\n\nexport default useSmartyUSLookup;\n"],"mappings":"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","ignoreList":[]}
1
+ {"version":3,"file":"useSmartyUSLookup.js","names":["_smartyConfig","require","_useSmartyLookupBase","_interopRequireDefault","e","__esModule","default","MIN_QUERY_LENGTH","CACHE_NAMESPACE","CACHE_TTL_MS","RATE_LIMIT_NAMESPACE","RATE_LIMIT_CONFIG","limit","windowMs","cooldownMs","SMARTY_AUTOCOMPLETE_URL","buildCacheKey","trimmedQuery","selectedAddress","JSON","stringify","query","selected","streetLine","street_line","secondary","entries","city","region","state","postalCode","zipcode","buildSelectedValue","buildRequestBody","body","search","buildRequestParams","key","params","transformSuggestions","responseData","results","suggestions","map","result","whiteSpace","displayText","useSmartyUSLookup","debounceMs","smartyConfig","cfg","deriveSmartyConfig","trim","isEnabled","Boolean","length","cacheKey","lambdaEnabled","smartyLambdaEnabled","lambdaUrl","appendLambdaQueryParams","buildSmartyEndpoint","skipCache","requestUrl","requestBody","requestParams","smartyKeys","usAutocomplete","useSmartyLookupBase","cacheNamespace","cacheTtlMs","rateLimitNamespace","rateLimitConfig","transformResponse","onError","err","console","error","effectDeps","_default","exports"],"sources":["../../../src/addressLookup/hooks/useSmartyUSLookup.jsx"],"sourcesContent":["import {\n appendLambdaQueryParams,\n buildSmartyEndpoint,\n deriveSmartyConfig\n} from '../utils/smartyConfig';\nimport useSmartyLookupBase from './useSmartyLookupBase';\n\nconst MIN_QUERY_LENGTH = 3;\nconst CACHE_NAMESPACE = 'smarty-us-autocomplete';\nconst CACHE_TTL_MS = 60 * 1000;\nconst RATE_LIMIT_NAMESPACE = 'smarty-us-autocomplete';\nconst RATE_LIMIT_CONFIG = {\n limit: 60,\n windowMs: 60 * 1000,\n cooldownMs: 30 * 1000\n};\nconst SMARTY_AUTOCOMPLETE_URL = 'https://us-autocomplete-pro.api.smarty.com/lookup';\n\nconst buildCacheKey = (trimmedQuery, selectedAddress) => JSON.stringify({\n query: trimmedQuery,\n selected: selectedAddress ? {\n streetLine: selectedAddress.street_line,\n secondary: selectedAddress.secondary,\n entries: selectedAddress.entries,\n city: selectedAddress.city,\n region: selectedAddress.state,\n postalCode: selectedAddress.zipcode\n } : null\n});\n\nconst buildSelectedValue = (selectedAddress) => (\n `${selectedAddress.street_line} ` +\n `${selectedAddress.secondary} (${selectedAddress.entries}) ` +\n `${selectedAddress.city} ${selectedAddress.state} ${selectedAddress.zipcode}`\n);\n\nconst buildRequestBody = (trimmedQuery, selectedAddress) => {\n const body = { search: trimmedQuery };\n\n if (selectedAddress) {\n body.selected = buildSelectedValue(selectedAddress);\n }\n\n return body;\n};\n\nconst buildRequestParams = (trimmedQuery, selectedAddress, key) => {\n const params = { key, search: trimmedQuery };\n\n if (selectedAddress) {\n params.selected = buildSelectedValue(selectedAddress);\n }\n\n return params;\n};\n\nconst transformSuggestions = (responseData = {}) => {\n const results = responseData.suggestions || [];\n\n return results.map((result) => {\n let whiteSpace = '';\n let secondary = result.secondary || '';\n\n if (secondary) {\n if (result.entries > 1) {\n secondary += ` (${result.entries} entries)`;\n }\n whiteSpace = ' ';\n }\n\n const displayText = `${result.street_line}${whiteSpace}${secondary} ${result.city}, ${result.state} ${result.zipcode}`;\n\n return {\n ...result,\n displayText\n };\n });\n};\n\nconst useSmartyUSLookup = (query, selectedAddress = null, debounceMs = 300, smartyConfig = null) => {\n const cfg = smartyConfig ?? deriveSmartyConfig(null);\n const trimmedQuery = query.trim();\n const isEnabled = Boolean(trimmedQuery && (selectedAddress || trimmedQuery.length >= MIN_QUERY_LENGTH));\n const cacheKey = buildCacheKey(trimmedQuery, selectedAddress);\n const lambdaEnabled = cfg.smartyLambdaEnabled;\n const lambdaUrl = appendLambdaQueryParams(\n buildSmartyEndpoint(cfg, 'autocomplete', 'US'),\n { skipCache: cfg.skipCache }\n );\n const requestUrl = lambdaEnabled ? lambdaUrl : SMARTY_AUTOCOMPLETE_URL;\n const requestBody = lambdaEnabled && isEnabled ? buildRequestBody(trimmedQuery, selectedAddress) : null;\n const requestParams = !lambdaEnabled && isEnabled ? buildRequestParams(trimmedQuery, selectedAddress, cfg.smartyKeys.usAutocomplete) : null;\n\n return useSmartyLookupBase({\n isEnabled,\n debounceMs,\n cacheNamespace: CACHE_NAMESPACE,\n cacheTtlMs: CACHE_TTL_MS,\n rateLimitNamespace: RATE_LIMIT_NAMESPACE,\n rateLimitConfig: RATE_LIMIT_CONFIG,\n cacheKey,\n requestUrl,\n requestBody,\n requestParams,\n transformResponse: transformSuggestions,\n onError: (err) => {\n console.error('US autocomplete lookup failed:', err);\n },\n effectDeps: [query, selectedAddress]\n });\n};\n\nexport default useSmartyUSLookup;\n"],"mappings":"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","ignoreList":[]}
@@ -17,7 +17,7 @@ const RATE_LIMIT_CONFIG = {
17
17
  windowMs: 60 * 1000,
18
18
  cooldownMs: 60 * 1000
19
19
  };
20
- const VALIDATION_URL = 'https://us-street.api.smarty.com/street-address';
20
+ const SMARTY_US_STREET_URL = 'https://us-street.api.smarty.com/street-address';
21
21
  const parseDpvFootnotes = (footnotes = '') => {
22
22
  const normalized = String(footnotes || '');
23
23
  const result = new Set();
@@ -108,9 +108,20 @@ const buildValidationSummary = item => {
108
108
  sortPriority: 7
109
109
  };
110
110
  };
111
- const buildValidationParams = formData => {
111
+ const buildRequestBody = formData => {
112
+ const body = {
113
+ street: formData.address1 || '',
114
+ candidates: 10
115
+ };
116
+ if (formData.address2) body.secondary = formData.address2;
117
+ if (formData.city) body.city = formData.city;
118
+ if (formData.region) body.state = formData.region;
119
+ if (formData.postalCode) body.zipcode = (0, _validators.normalizePostalCodeValue)(formData.postalCode);
120
+ return body;
121
+ };
122
+ const buildRequestParams = (formData, key) => {
112
123
  const params = {
113
- key: _smartyConfig.SMARTY_US_STREET_KEY,
124
+ key,
114
125
  street: formData.address1 || '',
115
126
  secondary: formData.address2 || '',
116
127
  city: formData.city || '',
@@ -145,10 +156,17 @@ const transformSuggestions = (responseData = []) => responseData.map(item => {
145
156
  validationSummary: buildValidationSummary(item)
146
157
  };
147
158
  }).sort((left, right) => left.validationSummary.sortPriority - right.validationSummary.sortPriority);
148
- const useUSAddressValidation = (formData, trigger) => {
159
+ const useUSAddressValidation = (formData, trigger, smartyConfig = null) => {
160
+ const cfg = smartyConfig ?? (0, _smartyConfig.deriveSmartyConfig)(null);
149
161
  const isEnabled = Boolean(trigger && trigger !== 0 && (formData === null || formData === void 0 ? void 0 : formData.address1));
150
- const requestParams = buildValidationParams(formData);
162
+ const lambdaEnabled = cfg.smartyLambdaEnabled;
163
+ const requestBody = lambdaEnabled ? buildRequestBody(formData) : null;
164
+ const requestParams = lambdaEnabled ? null : buildRequestParams(formData, cfg.smartyKeys.usStreet);
151
165
  const requestKey = `smarty-us-validation:${buildRequestKey(formData)}`;
166
+ const lambdaUrl = (0, _smartyConfig.appendLambdaQueryParams)((0, _smartyConfig.buildSmartyEndpoint)(cfg, 'validate', 'US'), {
167
+ skipCache: cfg.skipCache,
168
+ smartyResponse: cfg.smartyResponse
169
+ });
152
170
  return (0, _useAddressValidationBase.default)({
153
171
  isEnabled,
154
172
  cacheNamespace: CACHE_NAMESPACE,
@@ -156,7 +174,8 @@ const useUSAddressValidation = (formData, trigger) => {
156
174
  rateLimitNamespace: RATE_LIMIT_NAMESPACE,
157
175
  rateLimitConfig: RATE_LIMIT_CONFIG,
158
176
  requestKey,
159
- requestUrl: VALIDATION_URL,
177
+ requestUrl: lambdaEnabled ? lambdaUrl : SMARTY_US_STREET_URL,
178
+ requestBody,
160
179
  requestParams,
161
180
  transformResponse: transformSuggestions,
162
181
  effectDeps: [trigger]