@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.
- package/dist/addressLookup/components/SmartyIntlResults.js +6 -4
- package/dist/addressLookup/components/SmartyIntlResults.js.map +1 -1
- package/dist/addressLookup/components/SmartyUSResults.js +6 -4
- package/dist/addressLookup/components/SmartyUSResults.js.map +1 -1
- package/dist/addressLookup/components/smartyResults/useSmartyAddressController.js +6 -2
- package/dist/addressLookup/components/smartyResults/useSmartyAddressController.js.map +1 -1
- package/dist/addressLookup/components/smartyResults/useSmartyServiceErrors.js.map +1 -1
- package/dist/addressLookup/hooks/useAddressValidationBase.js +4 -1
- package/dist/addressLookup/hooks/useAddressValidationBase.js.map +1 -1
- package/dist/addressLookup/hooks/useIntlAddressValidation.js +24 -6
- package/dist/addressLookup/hooks/useIntlAddressValidation.js.map +1 -1
- package/dist/addressLookup/hooks/useSmartyInternationalLookup.js +47 -7
- package/dist/addressLookup/hooks/useSmartyInternationalLookup.js.map +1 -1
- package/dist/addressLookup/hooks/useSmartyLookupBase.js +6 -1
- package/dist/addressLookup/hooks/useSmartyLookupBase.js.map +1 -1
- package/dist/addressLookup/hooks/useSmartyUSLookup.js +30 -8
- package/dist/addressLookup/hooks/useSmartyUSLookup.js.map +1 -1
- package/dist/addressLookup/hooks/useUSAddressValidation.js +25 -6
- package/dist/addressLookup/hooks/useUSAddressValidation.js.map +1 -1
- package/dist/addressLookup/utils/addressForm.js +86 -2
- package/dist/addressLookup/utils/addressForm.js.map +1 -1
- package/dist/addressLookup/utils/smartyConfig.js +240 -5
- package/dist/addressLookup/utils/smartyConfig.js.map +1 -1
- package/dist/index.js +7 -0
- package/dist/index.js.map +1 -1
- package/dist/shippingAddressForm/utils/shippingAddressForm.js +13 -0
- package/dist/shippingAddressForm/utils/shippingAddressForm.js.map +1 -1
- 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.
|
|
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
|
|
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
|
|
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
|
|
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
|
|
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:
|
|
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
|
|
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
|
|
27
|
+
const buildRequestBody = (trimmedQuery, countryCode, selectedAddressId) => {
|
|
28
28
|
const iso3 = _countries.COUNTRY_MAP[countryCode].iso3;
|
|
29
29
|
if (selectedAddressId) {
|
|
30
|
-
return
|
|
30
|
+
return {
|
|
31
|
+
address_id: selectedAddressId,
|
|
32
|
+
iso3,
|
|
33
|
+
max_results: 10
|
|
34
|
+
};
|
|
31
35
|
}
|
|
32
|
-
return
|
|
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
|
|
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('
|
|
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","
|
|
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.
|
|
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":"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","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
|
|
31
|
-
|
|
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
|
-
|
|
34
|
-
smartyUrl += `&selected=${encodeURIComponent(selectedParam)}`;
|
|
37
|
+
body.selected = buildSelectedValue(selectedAddress);
|
|
35
38
|
}
|
|
36
|
-
return
|
|
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
|
|
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('
|
|
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","
|
|
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
|
|
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
|
|
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
|
|
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
|
|
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:
|
|
177
|
+
requestUrl: lambdaEnabled ? lambdaUrl : SMARTY_US_STREET_URL,
|
|
178
|
+
requestBody,
|
|
160
179
|
requestParams,
|
|
161
180
|
transformResponse: transformSuggestions,
|
|
162
181
|
effectDeps: [trigger]
|