radar-sdk-js 5.0.0-beta.9 → 5.0.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
package/README.md CHANGED
@@ -57,7 +57,7 @@ Radar.initialize('prj_test_pk_...', {
57
57
  Add the following to your HTML:
58
58
 
59
59
  ```html
60
- <script src="https://js.radar.com/v5.0.0-beta.9/radar.min.js"></script>
60
+ <script src="https://js.radar.com/v5.0.0/radar.min.js"></script>
61
61
 
62
62
  <script>
63
63
  Radar.initialize('prj_test_pk_...', {
@@ -135,13 +135,13 @@ Plugin CDN bundles auto-register with the core SDK when loaded. Load
135
135
  the core SDK first, then any plugins you need:
136
136
 
137
137
  ```html
138
- <link href="https://js.radar.com/maps/v5.0.0-beta.4/radar-maps.css" rel="stylesheet" />
139
- <link href="https://js.radar.com/autocomplete/v5.0.0-beta.4/radar-autocomplete.css" rel="stylesheet" />
138
+ <link href="https://js.radar.com/maps/v1.0.0/radar-maps.css" rel="stylesheet" />
139
+ <link href="https://js.radar.com/autocomplete/v1.0.0/radar-autocomplete.css" rel="stylesheet" />
140
140
 
141
- <script src="https://js.radar.com/v5.0.0-beta.9/radar.min.js"></script>
142
- <script src="https://js.radar.com/maps/v5.0.0-beta.4/radar-maps.min.js"></script>
143
- <script src="https://js.radar.com/autocomplete/v5.0.0-beta.4/radar-autocomplete.min.js"></script>
144
- <script src="https://js.radar.com/fraud/v5.0.0-beta.1/radar-fraud.min.js"></script>
141
+ <script src="https://js.radar.com/v5.0.0/radar.min.js"></script>
142
+ <script src="https://js.radar.com/maps/v1.0.0/radar-maps.min.js"></script>
143
+ <script src="https://js.radar.com/autocomplete/v1.0.0/radar-autocomplete.min.js"></script>
144
+ <script src="https://js.radar.com/fraud/v1.0.0/radar-fraud.min.js"></script>
145
145
  ```
146
146
 
147
147
  ## Quickstart
@@ -154,9 +154,9 @@ by ID or element reference.
154
154
  ```html
155
155
  <html>
156
156
  <head>
157
- <link href="https://js.radar.com/maps/v5.0.0-beta.4/radar-maps.css" rel="stylesheet" />
158
- <script src="https://js.radar.com/v5.0.0-beta.9/radar.min.js"></script>
159
- <script src="https://js.radar.com/maps/v5.0.0-beta.4/radar-maps.min.js"></script>
157
+ <link href="https://js.radar.com/maps/v1.0.0/radar-maps.css" rel="stylesheet" />
158
+ <script src="https://js.radar.com/v5.0.0/radar.min.js"></script>
159
+ <script src="https://js.radar.com/maps/v1.0.0/radar-maps.min.js"></script>
160
160
  </head>
161
161
 
162
162
  <body>
@@ -181,9 +181,9 @@ by ID or element reference.
181
181
  ```html
182
182
  <html>
183
183
  <head>
184
- <link href="https://js.radar.com/autocomplete/v5.0.0-beta.4/radar-autocomplete.css" rel="stylesheet" />
185
- <script src="https://js.radar.com/v5.0.0-beta.9/radar.min.js"></script>
186
- <script src="https://js.radar.com/autocomplete/v5.0.0-beta.4/radar-autocomplete.min.js"></script>
184
+ <link href="https://js.radar.com/autocomplete/v1.0.0/radar-autocomplete.css" rel="stylesheet" />
185
+ <script src="https://js.radar.com/v5.0.0/radar.min.js"></script>
186
+ <script src="https://js.radar.com/autocomplete/v1.0.0/radar-autocomplete.min.js"></script>
187
187
  </head>
188
188
 
189
189
  <body>
@@ -215,7 +215,7 @@ are needed for geofencing.
215
215
  ```html
216
216
  <html>
217
217
  <head>
218
- <script src="https://js.radar.com/v5.0.0-beta.9/radar.min.js"></script>
218
+ <script src="https://js.radar.com/v5.0.0/radar.min.js"></script>
219
219
  </head>
220
220
 
221
221
  <body>
package/dist/radar.js CHANGED
@@ -451,7 +451,7 @@ class Navigator {
451
451
  }
452
452
  }
453
453
 
454
- var SDK_VERSION = '5.0.0-beta.9';
454
+ var SDK_VERSION = '5.0.0';
455
455
 
456
456
  const inFlightRequests = new Map();
457
457
  /** fetch-based HTTP client for Radar API requests */
package/dist/radar.js.map CHANGED
@@ -1 +1 @@
1
- {"version":3,"file":"radar.js","sources":["../src/config.ts","../src/errors.ts","../src/logger.ts","../src/storage.ts","../src/navigator.ts","../src/version.ts","../src/http.ts","../src/api/addresses.ts","../src/device.ts","../src/session.ts","../src/api/config.ts","../src/api/context.ts","../src/api/conversions.ts","../src/api/geocoding.ts","../src/api/routing.ts","../src/api/search.ts","../src/api/trips.ts","../src/api/track.ts","../src/api.ts"],"sourcesContent":["import type { RadarError } from './errors';\nimport type { RadarOptions } from './types';\n\n/** global SDK configuration singleton */\nclass Config {\n /** current SDK options */\n static options: RadarOptions;\n /** registered error callback, if any */\n static errorCallback: ((error: RadarError) => void) | null = null;\n\n /** default option values applied during initialization */\n static defaultOptions = {\n live: false,\n logLevel: 'error',\n host: 'https://api.radar.io',\n version: 'v1',\n debug: false,\n };\n\n /** store SDK options (called by Radar.initialize) */\n public static setup(options: RadarOptions = {}) {\n Config.options = options;\n }\n\n /** get the current SDK options */\n public static get(): RadarOptions {\n return Config.options || {};\n }\n\n /** clear all SDK options and error callback */\n public static clear() {\n Config.options = {};\n Config.errorCallback = null;\n }\n\n /** register a callback invoked on SDK errors */\n public static onError(callback: (error: RadarError) => void) {\n Config.errorCallback = callback;\n }\n\n /** dispatch an error to the registered callback */\n public static sendError(error: any) {\n if (Config.errorCallback && error) {\n Config.errorCallback(error);\n }\n }\n}\n\nexport default Config;\n","import type { RadarResponse } from './http';\n\n/** base error class for all Radar SDK errors */\nexport abstract class RadarError extends Error {\n /** legacy status code string (e.g. `'ERROR_PUBLISHABLE_KEY'`) */\n public abstract readonly status: string;\n public abstract readonly name: string;\n\n constructor(message: string) {\n super(message);\n }\n}\n\n/** thrown when a publishable key is missing or invalid (e.g. secret key used) */\nexport class RadarPublishableKeyError extends RadarError {\n public override readonly name = 'RadarPublishableKeyError';\n public override readonly status = 'ERROR_PUBLISHABLE_KEY';\n\n constructor(message: string) {\n super(message);\n }\n}\n\n/** thrown when the device location cannot be determined */\nexport class RadarLocationError extends RadarError {\n public override readonly name = 'RadarLocationError';\n public override readonly status = 'ERROR_LOCATION';\n\n constructor(message: string) {\n super(message);\n }\n}\n\n/** thrown when location permissions are denied by the browser */\nexport class RadarPermissionsError extends RadarError {\n public override readonly name = 'RadarPermissionsError';\n public override readonly status = 'ERROR_PERMISSIONS';\n\n constructor(message: string) {\n super(message);\n }\n}\n\n/** thrown on HTTP 400 Bad Request responses */\nexport class RadarBadRequestError extends RadarError {\n public override readonly name = 'RadarBadRequestError';\n public override readonly status = 'ERROR_BAD_REQUEST';\n public readonly code = 400;\n public readonly response?: RadarResponse;\n\n constructor(response?: RadarResponse) {\n super(response?.meta?.message || 'Bad request.');\n\n this.response = response;\n }\n}\n\n/** thrown on HTTP 401 Unauthorized responses */\nexport class RadarUnauthorizedError extends RadarError {\n public override readonly name = 'RadarUnauthorizedError';\n public override readonly status = 'ERROR_UNAUTHORIZED';\n public readonly code = 401;\n public readonly response?: RadarResponse;\n\n constructor(response?: RadarResponse) {\n super(response?.meta?.message || 'Unauthorized.');\n\n this.response = response;\n }\n}\n\n/** thrown on HTTP 402 Payment Required responses */\nexport class RadarPaymentRequiredError extends RadarError {\n public override readonly name = 'RadarPaymentRequiredError';\n public override readonly status = 'ERROR_PAYMENT_REQUIRED';\n public readonly code = 402;\n public readonly response?: RadarResponse;\n\n constructor(response?: RadarResponse) {\n super(response?.meta?.message || 'Payment required.');\n\n this.response = response;\n }\n}\n\n/** thrown on HTTP 403 Forbidden responses */\nexport class RadarForbiddenError extends RadarError {\n public override readonly name = 'RadarForbiddenError';\n public override readonly status = 'ERROR_FORBIDDEN';\n public readonly code = 403;\n public readonly response?: RadarResponse;\n\n constructor(response?: RadarResponse) {\n super(response?.meta?.message || 'Forbidden.');\n\n this.response = response;\n }\n}\n\n/** thrown on HTTP 404 Not Found responses */\nexport class RadarNotFoundError extends RadarError {\n public override readonly name = 'RadarNotFoundError';\n public override readonly status = 'ERROR_NOT_FOUND';\n public readonly code = 404;\n public readonly response?: RadarResponse;\n\n constructor(response?: RadarResponse) {\n super(response?.meta?.message || 'Not found.');\n\n this.response = response;\n }\n}\n\n/** thrown on HTTP 429 Rate Limit responses */\nexport class RadarRateLimitError extends RadarError {\n public override readonly name = 'RadarRateLimitError';\n public override readonly status = 'ERROR_RATE_LIMIT';\n public readonly code = 429;\n public readonly response?: RadarResponse;\n /** rate limit type from the API response (e.g. `'hourly'`) */\n public readonly type?: string;\n\n constructor(response?: RadarResponse) {\n super(response?.meta?.message || 'Rate limit exceeded.');\n\n this.response = response;\n this.type = response?.meta?.type;\n }\n}\n\n/** thrown on HTTP 5xx server errors */\nexport class RadarServerError extends RadarError {\n public override readonly name = 'RadarServerError';\n public override readonly status = 'ERROR_SERVER';\n public readonly response?: RadarResponse;\n\n constructor(response?: RadarResponse) {\n super(response?.meta?.message || 'Internal server error.');\n\n this.response = response;\n }\n}\n\n/** thrown when a request times out or the network is unavailable */\nexport class RadarNetworkError extends RadarError {\n public override readonly name = 'RadarNetworkError';\n public override readonly status = 'ERROR_NETWORK';\n\n constructor() {\n super('Request timed out.');\n }\n}\n\n/** thrown for unexpected/unclassified errors */\nexport class RadarUnknownError extends RadarError {\n public override readonly name = 'RadarUnknownError';\n public override readonly status = 'ERROR_UNKNOWN';\n public readonly response?: RadarResponse;\n\n constructor(response?: RadarResponse) {\n super(response?.meta?.message || 'Something went wrong.');\n\n this.response = response;\n }\n}\n","import Config from './config';\n\nconst LOG_LEVELS = {\n none: 0,\n error: 1,\n warn: 2,\n info: 3,\n debug: 4,\n};\n\n// get the numeric level for logLevel option\nconst getLevel = (): number => {\n // disable logging in tests\n if (window && window.RADAR_TEST_ENV) {\n return LOG_LEVELS.none;\n }\n\n const { logLevel, debug } = Config.get();\n if (debug) {\n return LOG_LEVELS.debug;\n }\n if (logLevel) {\n return LOG_LEVELS[logLevel];\n }\n return LOG_LEVELS.error; // default to error-level logging if not set\n};\n\n/** leveled console logger controlled by SDK config */\nclass Logger {\n /** log a debug-level message (only when debug mode is enabled) */\n public static debug(message: string, options?: any) {\n if (getLevel() === LOG_LEVELS.debug) {\n console.log(`Radar SDK (debug): ${message.trim()}`, options);\n }\n }\n\n /** log an info-level message */\n public static info(message: string) {\n if (getLevel() >= LOG_LEVELS.info) {\n console.log(`Radar SDK: ${message.trim()}`);\n }\n }\n\n /** log a warning-level message */\n public static warn(message: string) {\n if (getLevel() >= LOG_LEVELS.warn) {\n console.warn(`Radar SDK: ${message.trim()}`);\n }\n }\n\n /** log an error-level message */\n public static error(message: string) {\n if (getLevel() >= LOG_LEVELS.error) {\n console.error(`Radar SDK: ${message.trim()}`);\n }\n }\n}\n\nexport default Logger;\n","import Logger from './logger';\n\n/** typed localStorage wrapper with `radar-*` namespaced keys */\nclass Storage {\n /** localStorage key for user ID */\n public static get USER_ID() {\n return 'radar-userId';\n }\n /** localStorage key for device ID */\n public static get DEVICE_ID() {\n return 'radar-deviceId';\n }\n /** localStorage key for install ID */\n public static get INSTALL_ID() {\n return 'radar-installId';\n }\n /** localStorage key for session ID */\n public static get SESSION_ID() {\n return 'radar-sessionId';\n }\n /** localStorage key for user description */\n public static get DESCRIPTION() {\n return 'radar-description';\n }\n /** localStorage key for user metadata */\n public static get METADATA() {\n return 'radar-metadata';\n }\n /** localStorage key for cached location */\n public static get CACHED_LOCATION() {\n return 'radar-cached-location';\n }\n /** localStorage key for trip options */\n public static get TRIP_OPTIONS() {\n return 'radar-trip-options';\n }\n\n /** localStorage key for product identifier */\n public static get PRODUCT() {\n return 'radar-product';\n }\n\n /** @internal get the underlying localStorage instance */\n private static getStorage() {\n const storage = window?.localStorage;\n if (!storage) {\n Logger.warn('localStorage not available.');\n }\n return storage;\n }\n\n /**\n * store a string value in localStorage\n * @param key - the storage key\n * @param value - the string value to store\n */\n public static setItem(key: string, value: string) {\n const storage = this.getStorage();\n if (!storage) {\n return;\n }\n if (value === undefined || value === null) {\n return;\n }\n storage.setItem(key, value);\n }\n\n /**\n * retrieve a string value from localStorage\n * @param key - the storage key\n * @returns the stored value, or null if not found\n */\n public static getItem(key: string) {\n const storage = this.getStorage();\n if (!storage) {\n return null;\n }\n const value = storage.getItem(key);\n if (value !== undefined && value !== null) {\n return value;\n }\n return null;\n }\n\n /**\n * retrieve and parse a JSON value from localStorage\n * @param key - the storage key\n * @returns the parsed object, or null if not found or parse fails\n */\n public static getJSON(key: string) {\n const item = this.getItem(key);\n if (!item) {\n return null;\n }\n\n try {\n return JSON.parse(item);\n } catch {\n Logger.warn(`could not getJSON from storage for key: ${key}`);\n return null;\n }\n }\n\n /**\n * remove an item from localStorage\n * @param key - the storage key to remove\n */\n public static removeItem(key: string) {\n const storage = this.getStorage();\n if (!storage) {\n return null;\n }\n storage.removeItem(key);\n }\n\n /** clear all localStorage entries */\n public static clear() {\n const storage = this.getStorage();\n if (!storage) {\n return null;\n }\n storage.clear();\n }\n}\n\nexport default Storage;\n","import Config from './config';\nimport { RadarLocationError, RadarPermissionsError } from './errors';\nimport Logger from './logger';\nimport Storage from './storage';\n\nimport type { LocationAuthorization, NavigatorPosition } from './types';\n\ninterface PositionOptionOverrides {\n desiredAccuracy?: string;\n}\n\nconst DEFAULT_POSITION_OPTIONS: PositionOptions = {\n maximumAge: 0,\n timeout: 1000 * 10, // 10 seconds\n enableHighAccuracy: true,\n};\n\n// set \"enableHighAccuracy\" for navigator only when desiredAccuracy is \"high\"\nconst useHighAccuracy = (desiredAccuracy?: string) => Boolean(desiredAccuracy === 'high');\n\n/** browser geolocation wrapper with caching and permission checks */\nclass Navigator {\n /**\n * get the device's current position via the browser geolocation API\n * @param overrides - optional accuracy overrides\n * @returns device coordinates with accuracy\n * @throws {RadarLocationError} if geolocation is unavailable or times out\n * @throws {RadarPermissionsError} if location permissions are denied\n */\n public static async getCurrentPosition(overrides: PositionOptionOverrides = {}): Promise<NavigatorPosition> {\n return new Promise((resolve, reject) => {\n const options = Config.get();\n\n if (!navigator || !navigator.geolocation) {\n return reject(new RadarLocationError('navigator.geolocation is not available.'));\n }\n\n // use cached location if available and options are set\n if (options.cacheLocationMinutes) {\n try {\n const rawCachedLocation = Storage.getItem(Storage.CACHED_LOCATION);\n if (rawCachedLocation) {\n const cachedLocation = JSON.parse(rawCachedLocation);\n const { latitude, longitude, accuracy, expiresAt } = cachedLocation || {};\n if (Date.now() < parseInt(expiresAt)) {\n if (latitude && longitude && accuracy) {\n return resolve({ latitude, longitude, accuracy });\n }\n }\n }\n } catch {\n Logger.warn('could not load cached location.');\n }\n }\n\n // set options from config\n const positionOptions = Object.assign({}, DEFAULT_POSITION_OPTIONS);\n if (options.locationMaximumAge !== undefined) {\n positionOptions.maximumAge = options.locationMaximumAge;\n }\n if (options.locationTimeout !== undefined) {\n positionOptions.timeout = options.locationTimeout;\n }\n if (options.desiredAccuracy !== undefined) {\n positionOptions.enableHighAccuracy = useHighAccuracy(options.desiredAccuracy);\n }\n\n // set options from overrides\n if (overrides.desiredAccuracy !== undefined) {\n positionOptions.enableHighAccuracy = useHighAccuracy(overrides.desiredAccuracy);\n }\n\n Logger.info(`Using geolocation options: ${JSON.stringify(positionOptions)}`);\n\n // get current location from browser\n navigator.geolocation.getCurrentPosition(\n (position) => {\n if (!position || !position.coords) {\n return reject(new RadarLocationError('device location return empty coordinates.'));\n }\n\n const { latitude, longitude, accuracy } = position.coords;\n\n // cache location if option is set\n if (options.cacheLocationMinutes) {\n const cacheLocationMinutes = Number.parseFloat(options.cacheLocationMinutes as any);\n const updatedAt = Date.now();\n const expiresAt = updatedAt + cacheLocationMinutes * 60 * 1000; // convert to ms\n\n const lastLocation = { latitude, longitude, accuracy, updatedAt, expiresAt };\n Storage.setItem(Storage.CACHED_LOCATION, JSON.stringify(lastLocation));\n }\n\n return resolve({ latitude, longitude, accuracy });\n },\n (err: GeolocationPositionError) => {\n // location call failed or user did not grant permission\n if (err && err.code === 1) {\n // https://developer.mozilla.org/en-US/docs/Web/API/GeolocationPositionError\n // code 1 means location permissions denied\n // codes 2 and 3 mean location unavailable or timeout\n return reject(new RadarPermissionsError('Location permissions denied.'));\n }\n return reject(new RadarLocationError('Could not determine location.'));\n },\n positionOptions,\n );\n });\n }\n\n /**\n * query the current geolocation permission status\n * @returns the current location authorization state\n */\n public static async getPermissionStatus(): Promise<LocationAuthorization> {\n return new Promise((resolve) => {\n let locationAuthorization: LocationAuthorization = 'NOT_DETERMINED';\n\n if (!navigator || !navigator.permissions) {\n return resolve(locationAuthorization);\n }\n\n void navigator.permissions.query({ name: 'geolocation' }).then((permissionsStatus) => {\n switch (permissionsStatus.state) {\n case 'granted':\n locationAuthorization = 'GRANTED_FOREGROUND';\n break;\n case 'denied':\n locationAuthorization = 'DENIED';\n break;\n case 'prompt':\n locationAuthorization = 'NOT_DETERMINED';\n break;\n default:\n break;\n }\n\n return resolve(locationAuthorization);\n });\n });\n }\n\n /** check whether the browser reports being online */\n public static online(): boolean {\n return navigator && navigator.onLine;\n }\n}\n\nexport default Navigator;\n","export default '5.0.0-beta.9';\n","import Config from './config';\nimport {\n RadarBadRequestError,\n RadarForbiddenError,\n RadarLocationError,\n RadarNetworkError,\n RadarNotFoundError,\n RadarPaymentRequiredError,\n RadarPermissionsError,\n RadarPublishableKeyError,\n RadarRateLimitError,\n RadarServerError,\n RadarUnauthorizedError,\n RadarUnknownError,\n} from './errors';\nimport Logger from './logger';\nimport Navigator from './navigator';\nimport SDK_VERSION from './version';\n\n/** HTTP methods supported by the SDK */\ntype HttpMethod = 'GET' | 'PUT' | 'PATCH' | 'POST' | 'DELETE';\n\n/** Shape of the `meta` field present in all Radar API responses */\ninterface RadarApiMeta {\n error?: string;\n message?: string;\n type?: string;\n}\n\n/** Base shape all Radar API JSON responses share */\ninterface RadarApiResponse {\n meta?: RadarApiMeta;\n [key: string]: unknown;\n}\n\n/** Blob response shape returned when responseType is 'blob' */\ninterface RadarBlobResponse {\n meta?: undefined;\n code: number;\n data: Blob;\n}\n\nexport type RadarResponse = RadarApiResponse | RadarBlobResponse;\n\n/** Request configuration for Http.request */\ninterface HttpRequestOptions {\n method: HttpMethod;\n path: string;\n data?: Record<string, any>;\n host?: string;\n version?: string;\n headers?: Record<string, string>;\n responseType?: 'blob' | 'json';\n requestId?: string;\n}\n\nconst inFlightRequests = new Map<string, AbortController>();\n\n/** fetch-based HTTP client for Radar API requests */\nclass Http {\n /** map of host patterns to custom error factories for intercepting network errors */\n static errorInterceptors: Map<string, (online: boolean) => Error> = new Map();\n\n /**\n * register a custom error factory for network errors matching a host pattern\n * @param hostPattern - substring matched against the request host\n * @param handler - factory that receives online status and returns an error\n */\n static registerErrorInterceptor(hostPattern: string, handler: (online: boolean) => Error) {\n Http.errorInterceptors.set(hostPattern, handler);\n }\n\n /**\n * send an HTTP request to the Radar API\n * @param options - request configuration\n * @returns parsed response body, typed as `T`\n * @throws {RadarPublishableKeyError} if publishable key is not set\n * @throws {RadarBadRequestError} on 400 responses\n * @throws {RadarUnauthorizedError} on 401 responses\n * @throws {RadarNetworkError} on network failures\n */\n static async request(options: HttpRequestOptions & { responseType: 'blob' }): Promise<RadarBlobResponse>;\n static async request<T extends Record<string, any> = RadarApiResponse>(\n options: HttpRequestOptions,\n ): Promise<T & { meta?: RadarApiMeta }>;\n static async request<T extends Record<string, any> = RadarApiResponse>({\n method,\n path,\n data,\n host,\n version,\n headers = {},\n responseType,\n requestId,\n }: HttpRequestOptions): Promise<(T & { meta?: RadarApiMeta }) | RadarBlobResponse> {\n const options = Config.get();\n\n const publishableKey = options.publishableKey;\n if (!publishableKey) {\n throw new RadarPublishableKeyError('publishableKey not set.');\n }\n\n const urlHost = host || options.host;\n const urlVersion = version || options.version;\n let url = `${urlHost}/${urlVersion}/${path}`;\n\n // filter out undefined values from request data\n const filtered = Object.fromEntries(Object.entries(data ?? {}).filter(([, v]) => v !== undefined));\n\n let body: string | undefined;\n\n if (method === 'GET') {\n const params = new URLSearchParams(Object.entries(filtered).map(([k, v]) => [k, String(v)]));\n const qs = params.toString();\n if (qs) {\n url = `${url}?${qs}`;\n }\n } else {\n body = JSON.stringify(filtered);\n }\n\n // abort in-flight requests with matching requestIds\n if (requestId) {\n inFlightRequests.get(requestId)?.abort();\n }\n\n const abortController = new AbortController();\n\n if (requestId) {\n inFlightRequests.set(requestId, abortController);\n }\n\n const defaultHeaders: Record<string, string> = {\n Authorization: publishableKey,\n 'Content-Type': 'application/json',\n 'X-Radar-Device-Type': 'Web',\n 'X-Radar-SDK-Version': SDK_VERSION,\n };\n\n let configHeaders: Record<string, string> = {};\n if (typeof options.getRequestHeaders === 'function') {\n configHeaders = options.getRequestHeaders();\n }\n\n const allHeaders: Record<string, string> = { ...defaultHeaders, ...configHeaders, ...headers };\n\n let response: Response;\n try {\n response = await fetch(url, {\n method,\n headers: allHeaders,\n body,\n signal: abortController.signal,\n });\n } catch {\n // Delete abort controller instance for this request ID if it hasn't yet been replaced with a different one\n if (requestId && inFlightRequests.get(requestId) === abortController) {\n inFlightRequests.delete(requestId);\n }\n\n if (host) {\n for (const [pattern, handler] of Http.errorInterceptors) {\n if (host.includes(pattern)) {\n throw handler(!!Navigator.online());\n }\n }\n }\n throw new RadarNetworkError();\n }\n\n if (requestId && inFlightRequests.get(requestId) === abortController) {\n inFlightRequests.delete(requestId);\n }\n\n let parsed: RadarResponse | undefined;\n try {\n if (responseType === 'blob') {\n parsed = { code: response.status, data: await response.blob() };\n } else {\n parsed = (await response.json()) as RadarApiResponse;\n }\n } catch (err) {\n if (parsed) {\n throw new RadarServerError(parsed);\n } else {\n if (options.debug) {\n Logger.debug(`API call failed: ${url}`);\n Logger.debug(String(err));\n }\n\n throw new RadarUnknownError(parsed);\n }\n }\n\n if (parsed && typeof parsed === 'object' && 'meta' in parsed) {\n const error = parsed.meta?.error;\n if (error === 'ERROR_PERMISSIONS') {\n throw new RadarPermissionsError('Location permissions not granted.');\n } else if (error === 'ERROR_LOCATION') {\n throw new RadarLocationError('Could not determine location.');\n } else if (error === 'ERROR_NETWORK') {\n throw new RadarNetworkError();\n }\n }\n\n if (response.ok) {\n return parsed as T;\n }\n\n if (options.debug) {\n Logger.debug(`API call failed: ${url}`);\n Logger.debug(JSON.stringify(parsed));\n }\n\n if (response.status === 400) {\n throw new RadarBadRequestError(parsed);\n } else if (response.status === 401) {\n throw new RadarUnauthorizedError(parsed);\n } else if (response.status === 402) {\n throw new RadarPaymentRequiredError(parsed);\n } else if (response.status === 403) {\n throw new RadarForbiddenError(parsed);\n } else if (response.status === 404) {\n throw new RadarNotFoundError(parsed);\n } else if (response.status === 429) {\n throw new RadarRateLimitError(parsed);\n } else if (response.status >= 500 && response.status < 600) {\n throw new RadarServerError(parsed);\n } else {\n throw new RadarUnknownError(parsed);\n }\n }\n}\n\nexport default Http;\n","import Config from '../config';\nimport Http from '../http';\n\nimport type { RadarValidateAddressParams, RadarValidateAddressResponse } from '../types';\n\n/** @internal address validation API — use {@link Radar.validateAddress} instead */\nclass AddressesAPI {\n /**\n * validate a structured address\n * @param params - address fields to validate\n * @returns validated address and verification result\n */\n static async validateAddress(params: RadarValidateAddressParams): Promise<RadarValidateAddressResponse> {\n const options = Config.get();\n\n const response = await Http.request<Omit<RadarValidateAddressResponse, 'response'>>({\n method: 'GET',\n path: 'addresses/validate',\n data: params,\n });\n const { address, result } = response;\n\n const validateAddressRes: RadarValidateAddressResponse = {\n address,\n result,\n };\n\n if (options.debug) {\n validateAddressRes.response = response;\n }\n\n return validateAddressRes;\n }\n}\n\nexport default AddressesAPI;\n","import Storage from './storage';\n\nconst generateUUID = (): string => {\n if (typeof crypto !== 'undefined' && crypto.randomUUID) {\n return crypto.randomUUID();\n }\n\n // fallback for older browsers\n const bytes = new Uint8Array(16);\n crypto.getRandomValues(bytes);\n bytes[6] = (bytes[6]! & 0x0f) | 0x40; // version 4\n bytes[8] = (bytes[8]! & 0x3f) | 0x80; // variant 10\n\n const hex = Array.from(bytes, (b) => b.toString(16).padStart(2, '0')).join('');\n return `${hex.slice(0, 8)}-${hex.slice(8, 12)}-${hex.slice(12, 16)}-${hex.slice(16, 20)}-${hex.slice(20)}`;\n};\n\n/** device and install ID manager backed by localStorage */\nclass Device {\n /**\n * get or generate a persistent device ID\n * @returns the device UUID (persisted in localStorage)\n */\n static getDeviceId(): string {\n // use existing deviceId if present\n const deviceId = Storage.getItem(Storage.DEVICE_ID);\n if (deviceId) {\n return deviceId;\n }\n\n // generate new deviceId\n const uuid = generateUUID();\n Storage.setItem(Storage.DEVICE_ID, uuid);\n return uuid;\n }\n\n /**\n * get or generate a persistent install ID\n * @returns the install UUID (persisted in localStorage)\n */\n static getInstallId(): string {\n // use existing installId if present\n const deviceId = Storage.getItem(Storage.INSTALL_ID);\n if (deviceId) {\n return deviceId;\n }\n\n // generate new installId\n const uuid = generateUUID();\n Storage.setItem(Storage.INSTALL_ID, uuid);\n return uuid;\n }\n}\n\nexport default Device;\n","import Storage from './storage';\n\nconst SESSION_TIMEOUT_SECS = 300; // 5 mins\n\nconst isValid = (sessionId: string): boolean => {\n const now = Math.trunc(Date.now() / 1000);\n const session = Number.parseInt(sessionId);\n const diff = Math.abs(now - session);\n return diff < SESSION_TIMEOUT_SECS;\n};\n\n/** session ID manager with a 5-minute timeout */\nclass Session {\n /**\n * get the current session ID, creating a new one if expired\n * @returns unix timestamp string used as session ID\n */\n static getSessionId() {\n const sessionId = Storage.getItem(Storage.SESSION_ID);\n\n // reuse session if still within 5 min threshold\n if (sessionId && isValid(sessionId)) {\n return sessionId;\n }\n\n // create new session if does not already exist or expired\n const newSessionId = Math.trunc(Date.now() / 1000).toString(); // unix ts in seconds\n Storage.setItem(Storage.SESSION_ID, newSessionId);\n return newSessionId;\n }\n}\n\nexport default Session;\n","import Device from '../device';\nimport Http from '../http';\nimport Logger from '../logger';\nimport Navigator from '../navigator';\nimport Session from '../session';\n\nimport type { LocationAuthorization, RadarConfigResponse, RadarTrackParams } from '../types';\n\n/** options for customizing the config request (e.g. host, headers) */\ninterface ConfigRequestOptions {\n /** override the API host */\n host?: string;\n /** additional headers to include in the request */\n headers?: Record<string, string>;\n}\n\n/** @internal SDK configuration API for fetching remote config */\nclass ConfigAPI {\n /**\n * fetch remote SDK configuration from the Radar API. Generic so plugins can extend the response shape.\n *\n * @param params - optional tracking params for device/session identification\n * @param options - optional request overrides (host, headers)\n */\n public static async getConfig<T extends RadarConfigResponse = RadarConfigResponse>(\n params: RadarTrackParams = {},\n options: ConfigRequestOptions = {},\n ): Promise<T> {\n const deviceId = params.deviceId || Device.getDeviceId();\n const installId = params.installId || Device.getInstallId();\n const sessionId = Session.getSessionId();\n\n // location authorization\n let locationAuthorization: LocationAuthorization | undefined;\n try {\n locationAuthorization = await Navigator.getPermissionStatus();\n } catch (err: any) {\n Logger.warn(`Location authorization error: ${err.message}`);\n }\n\n const data = {\n deviceId,\n installId,\n sessionId,\n locationAuthorization,\n };\n\n return Http.request<T>({\n method: 'GET',\n path: 'config',\n data,\n host: options.host,\n headers: options.headers,\n });\n }\n}\n\nexport default ConfigAPI;\n","import Config from '../config';\nimport Http from '../http';\nimport Navigator from '../navigator';\n\nimport type { RadarContextResponse, Location } from '../types';\n\n/** @internal context API — use {@link Radar.getContext} instead */\nclass ContextAPI {\n /**\n * get context (geofences, place, region) for a location\n * @param location - coordinates to get context for\n * @returns geofences, place, country, state, DMA, and postal code\n */\n public static async getContext(location: Location): Promise<RadarContextResponse> {\n const options = Config.get();\n\n // get device location if coordinates not provided\n if (!location.latitude || !location.longitude) {\n location = await Navigator.getCurrentPosition();\n }\n\n const { latitude, longitude, accuracy } = location;\n\n const response = await Http.request<Omit<RadarContextResponse, 'response' | 'location'>>({\n method: 'GET',\n path: 'context',\n data: {\n coordinates: `${latitude},${longitude}`,\n accuracy,\n },\n });\n\n const { geofences, place, country, state, dma, postalCode } = response;\n\n const contextRes: RadarContextResponse = {\n location,\n geofences,\n place,\n country,\n state,\n dma,\n postalCode,\n };\n\n if (options.debug) {\n contextRes.response = response;\n }\n\n return contextRes;\n }\n}\n\nexport default ContextAPI;\n","import Config from '../config';\nimport Device from '../device';\nimport Http from '../http';\nimport Storage from '../storage';\n\nimport type { RadarConversionParams, RadarConversionResponse } from '../types';\n\n/** @internal conversions API — use {@link Radar.logConversion} instead */\nclass ConversionsAPI {\n /**\n * log a conversion event\n * @param params - conversion name, user info, and optional metadata/revenue\n * @returns the created event\n */\n static async logConversion(params: RadarConversionParams): Promise<RadarConversionResponse> {\n const options = Config.get();\n\n const name = params.name;\n const userId = params.userId || Storage.getItem(Storage.USER_ID);\n const deviceId = params.deviceId || Device.getDeviceId();\n const installId = params.installId || Device.getInstallId();\n const metadata = params.metadata || {};\n const createdAt = params.createdAt;\n\n if (params.revenue) {\n metadata.revenue = params.revenue;\n }\n\n const createdAtValue =\n typeof createdAt === 'string'\n ? createdAt\n : createdAt instanceof Date\n ? createdAt.toISOString()\n : new Date().toISOString();\n\n const data = {\n name,\n userId,\n deviceId,\n installId,\n metadata,\n createdAt: createdAtValue,\n };\n\n const response = await Http.request<Omit<RadarConversionResponse, 'response'>>({\n method: 'POST',\n path: 'events',\n data,\n });\n\n const conversionRes: RadarConversionResponse = {\n event: response.event,\n };\n\n if (options.debug) {\n conversionRes.response = response;\n }\n\n return conversionRes;\n }\n}\n\nexport default ConversionsAPI;\n","import Config from '../config';\nimport Http from '../http';\nimport Navigator from '../navigator';\n\nimport type {\n RadarForwardGeocodeParams,\n RadarReverseGeocodeParams,\n RadarGeocodeResponse,\n RadarIPGeocodeResponse,\n} from '../types';\n\n/** @internal geocoding API — use Radar.forwardGeocode / reverseGeocode / ipGeocode instead */\nclass Geocoding {\n /**\n * geocode an address or place name to coordinates\n * @param params - query string, optional layers and country filter\n * @returns matching addresses\n */\n static async forwardGeocode(params: RadarForwardGeocodeParams): Promise<RadarGeocodeResponse> {\n const options = Config.get();\n\n const { query, layers, country, lang } = params;\n\n const response = await Http.request<Omit<RadarGeocodeResponse, 'response'>>({\n method: 'GET',\n path: 'geocode/forward',\n data: {\n query,\n layers,\n country,\n lang,\n },\n });\n\n const forwardGeocodeRes: RadarGeocodeResponse = {\n addresses: response.addresses,\n };\n\n if (options.debug) {\n forwardGeocodeRes.response = response;\n }\n\n return forwardGeocodeRes;\n }\n\n /**\n * reverse geocode coordinates to addresses\n * @param params - latitude/longitude, optional layers filter\n * @returns matching addresses\n */\n static async reverseGeocode(params: RadarReverseGeocodeParams): Promise<RadarGeocodeResponse> {\n const options = Config.get();\n\n const { layers } = params;\n let { latitude, longitude } = params;\n\n if (!latitude || !longitude) {\n const location = await Navigator.getCurrentPosition();\n latitude = location.latitude;\n longitude = location.longitude;\n }\n\n const response = await Http.request<Omit<RadarGeocodeResponse, 'response'>>({\n method: 'GET',\n path: 'geocode/reverse',\n data: {\n coordinates: `${latitude},${longitude}`,\n layers,\n },\n });\n\n const reverseGeocodeRes: RadarGeocodeResponse = {\n addresses: response.addresses,\n };\n\n if (options.debug) {\n reverseGeocodeRes.response = response;\n }\n\n return reverseGeocodeRes;\n }\n\n /**\n * geocode the device's IP address to a rough location\n * @returns IP address, approximate address, and proxy info\n */\n static async ipGeocode(): Promise<RadarIPGeocodeResponse> {\n const options = Config.get();\n\n const response = await Http.request<Omit<RadarIPGeocodeResponse, 'response'>>({\n method: 'GET',\n path: 'geocode/ip',\n });\n\n const ipGeocodeRes: RadarIPGeocodeResponse = {\n ip: response.ip,\n address: response.address,\n proxy: response.proxy,\n };\n\n if (options.debug) {\n ipGeocodeRes.response = response;\n }\n\n return ipGeocodeRes;\n }\n}\n\nexport default Geocoding;\n","import Config from '../config';\nimport Http from '../http';\nimport Navigator from '../navigator';\n\nimport type { RadarDistanceParams, RadarRouteResponse, RadarMatrixParams, RadarMatrixResponse } from '../types';\n\n/** @internal routing API — use Radar.distance / matrix instead */\nclass RoutingAPI {\n /**\n * calculate travel distance and duration between two points\n * @param params - origin, destination, modes, and units\n * @returns routes with distance and duration per mode\n */\n static async distance(params: RadarDistanceParams): Promise<RadarRouteResponse> {\n const options = Config.get();\n\n const { units, geometry, geometryPoints } = params;\n let { origin, destination, modes, avoid } = params;\n\n // use browser location if \"near\" not provided\n if (!origin) {\n const { latitude, longitude } = await Navigator.getCurrentPosition();\n origin = `${latitude},${longitude}`;\n } else if (typeof origin !== 'string') {\n // origin is \"Location\" object\n const { latitude, longitude } = origin;\n origin = `${latitude},${longitude}`;\n }\n\n if (typeof destination !== 'string') {\n const { latitude, longitude } = destination;\n destination = `${latitude},${longitude}`;\n }\n\n if (Array.isArray(modes)) {\n modes = modes.join(',');\n }\n\n if (Array.isArray(avoid)) {\n avoid = avoid.join(',');\n }\n\n const response = await Http.request<Omit<RadarRouteResponse, 'response'>>({\n method: 'GET',\n path: 'route/distance',\n data: {\n origin,\n destination,\n modes,\n units,\n geometry,\n geometryPoints,\n avoid,\n },\n });\n\n const distanceRes: RadarRouteResponse = {\n routes: response.routes,\n };\n\n if (options.debug) {\n distanceRes.response = response;\n }\n\n return distanceRes;\n }\n\n /**\n * calculate a distance matrix between multiple origins and destinations\n * @param params - origins, destinations, mode, and units\n * @returns matrix of distances and durations\n */\n static async matrix(params: RadarMatrixParams): Promise<RadarMatrixResponse> {\n const options = Config.get();\n\n const { mode, units } = params;\n let { origins, destinations, avoid } = params;\n\n // use browser location if \"near\" not provided\n if (!origins) {\n const { latitude, longitude } = await Navigator.getCurrentPosition();\n const originStrings = [];\n for (let i = 0; i < destinations.length; i++) {\n originStrings.push(`${latitude},${longitude}`);\n }\n origins = originStrings.join('|');\n } else if (Array.isArray(origins)) {\n // origin is a list of \"Location\" objects\n origins = origins.map((location) => `${location.latitude},${location.longitude}`).join('|');\n }\n\n // convert array to pipe-delimited string\n if (Array.isArray(destinations)) {\n destinations = destinations.map((location) => `${location.latitude},${location.longitude}`).join('|');\n }\n\n if (Array.isArray(avoid)) {\n avoid = avoid.join(',');\n }\n\n const response = await Http.request<Omit<RadarMatrixResponse, 'response'>>({\n method: 'GET',\n path: 'route/matrix',\n data: {\n origins,\n destinations,\n mode,\n units,\n avoid,\n },\n });\n\n const matrixRes: RadarMatrixResponse = {\n origins: response.origins,\n destinations: response.destinations,\n matrix: response.matrix,\n };\n\n if (options.debug) {\n matrixRes.response = response;\n }\n\n return matrixRes;\n }\n}\n\nexport default RoutingAPI;\n","import Config from '../config';\nimport Http from '../http';\nimport Navigator from '../navigator';\n\nimport type {\n RadarAutocompleteParams,\n RadarAutocompleteResponse,\n RadarSearchPlacesParams,\n RadarSearchPlacesResponse,\n RadarSearchGeofencesParams,\n RadarSearchGeofencesResponse,\n} from '../types';\n\n/** @internal search API — use Radar.autocomplete / searchGeofences / searchPlaces instead */\nclass SearchAPI {\n /**\n * autocomplete partial addresses and place names\n * @param params - query and search configuration\n * @param requestId - optional ID for deduplicating in-flight requests\n * @returns matching addresses\n */\n static async autocomplete(params: RadarAutocompleteParams, requestId?: string): Promise<RadarAutocompleteResponse> {\n const options = Config.get();\n\n const { query, limit, layers, countryCode, expandUnits, mailable, lang, postalCode } = params;\n let { near } = params;\n\n // near can be provided as a string or Location object\n // if \"near\" is not provided, request will fallback to IP based location\n if (near && typeof near !== 'string') {\n if (near.latitude && near.longitude) {\n near = `${near.latitude},${near.longitude}`;\n }\n }\n\n const response = await Http.request<Omit<RadarAutocompleteResponse, 'response'>>({\n method: 'GET',\n path: 'search/autocomplete',\n data: {\n query,\n near,\n limit,\n layers,\n countryCode,\n expandUnits,\n mailable,\n lang,\n postalCode,\n },\n requestId,\n });\n\n const autocompleteRes: RadarAutocompleteResponse = {\n addresses: response.addresses,\n };\n\n if (options.debug) {\n autocompleteRes.response = response;\n }\n\n return autocompleteRes;\n }\n\n /**\n * search for geofences near a location\n * @param params - location, radius, tags, and filters\n * @returns matching geofences\n */\n static async searchGeofences(params: RadarSearchGeofencesParams): Promise<RadarSearchGeofencesResponse> {\n const options = Config.get();\n\n const { radius, metadata, limit, includeGeometry } = params;\n let { near, tags } = params;\n\n // use browser location if \"near\" not provided\n if (!near) {\n const { latitude, longitude } = await Navigator.getCurrentPosition();\n near = `${latitude},${longitude}`;\n } else if (typeof near !== 'string') {\n // near is \"Location\" object\n const { latitude, longitude } = near;\n near = `${latitude},${longitude}`;\n }\n\n // convert arrays to comma-strings\n if (Array.isArray(tags)) {\n tags = tags.join(',');\n }\n\n const response = await Http.request<Omit<RadarSearchGeofencesResponse, 'response'>>({\n method: 'GET',\n path: 'search/geofences',\n data: {\n near,\n radius,\n tags,\n metadata,\n limit,\n includeGeometry,\n },\n });\n\n const geofencesSearchRes: RadarSearchGeofencesResponse = {\n geofences: response.geofences,\n };\n\n if (options.debug) {\n geofencesSearchRes.response = response;\n }\n\n return geofencesSearchRes;\n }\n\n /**\n * search for places near a location\n * @param params - location, radius, chains, categories, and groups\n * @returns matching places\n */\n static async searchPlaces(params: RadarSearchPlacesParams): Promise<RadarSearchPlacesResponse> {\n const options = Config.get();\n\n const { radius, limit } = params;\n let { near, chains, categories, groups } = params;\n\n // use browser location if \"near\" not provided\n if (!near) {\n const { latitude, longitude } = await Navigator.getCurrentPosition();\n near = `${latitude},${longitude}`;\n } else if (typeof near !== 'string') {\n // near is \"Location\" object\n const { latitude, longitude } = near;\n near = `${latitude},${longitude}`;\n }\n\n // convert arrays to comma-strings\n if (Array.isArray(chains)) {\n chains = chains.join(',');\n }\n if (Array.isArray(categories)) {\n categories = categories.join(',');\n }\n if (Array.isArray(groups)) {\n groups = groups.join(',');\n }\n\n const response = await Http.request<Omit<RadarSearchPlacesResponse, 'response'>>({\n method: 'GET',\n path: 'search/places',\n data: {\n near,\n radius,\n chains,\n categories,\n groups,\n limit,\n },\n });\n\n const placeSearchRes: RadarSearchPlacesResponse = {\n places: response.places,\n };\n\n if (options.debug) {\n placeSearchRes.response = response;\n }\n\n return placeSearchRes;\n }\n}\n\nexport default SearchAPI;\n","import Config from '../config';\nimport Http from '../http';\nimport Logger from '../logger';\nimport Storage from '../storage';\n\nimport type { RadarTripOptions, RadarTripStatus, RadarTripResponse } from '../types';\n\n// https://stackoverflow.com/a/44198641\nconst isValidDate = (date: any): Date | undefined =>\n date && Object.prototype.toString.call(date) === '[object Date]' && !isNaN(date);\n\n/** @internal trips API — use Radar.startTrip / updateTrip / completeTrip / cancelTrip instead */\nclass TripsAPI {\n /** save trip options to localStorage, pass `undefined` to clear */\n static setTripOptions(tripOptions?: RadarTripOptions) {\n if (!tripOptions) {\n TripsAPI.clearTripOptions();\n return;\n }\n const tripOptionsString = JSON.stringify(tripOptions);\n Logger.debug(`Saving trip options: ${tripOptionsString}`);\n Storage.setItem(Storage.TRIP_OPTIONS, tripOptionsString);\n }\n\n /** get saved trip options from localStorage */\n static getTripOptions(): RadarTripOptions {\n let tripOptions = Storage.getItem(Storage.TRIP_OPTIONS);\n if (tripOptions) {\n tripOptions = JSON.parse(tripOptions);\n }\n return tripOptions as RadarTripOptions;\n }\n\n /** remove saved trip options from localStorage */\n static clearTripOptions() {\n Storage.removeItem(Storage.TRIP_OPTIONS);\n }\n\n /**\n * start a new trip\n * @param tripOptions - trip configuration and destination\n * @returns the created trip and any triggered events\n */\n static async startTrip(tripOptions: RadarTripOptions): Promise<RadarTripResponse> {\n const options = Config.get();\n tripOptions = tripOptions || TripsAPI.getTripOptions();\n\n if (!tripOptions) {\n Logger.warn('tripOptions not set when calling \"startTrip\"');\n }\n\n const userId = tripOptions.userId || Storage.getItem(Storage.USER_ID);\n if (userId && userId !== Storage.getItem(Storage.USER_ID)) {\n // set as userId for tracking if provided\n Storage.setItem(Storage.USER_ID, userId);\n }\n\n const {\n externalId,\n destinationGeofenceTag,\n destinationGeofenceExternalId,\n mode,\n metadata,\n approachingThreshold,\n scheduledArrivalAt,\n } = tripOptions;\n\n if (scheduledArrivalAt && !isValidDate(scheduledArrivalAt)) {\n Logger.warn('Invalid date format for scheduledArrivalAt');\n }\n\n const data = {\n userId,\n externalId,\n destinationGeofenceTag,\n destinationGeofenceExternalId,\n mode,\n metadata,\n approachingThreshold,\n scheduledArrivalAt: isValidDate(scheduledArrivalAt) ? scheduledArrivalAt!.toJSON() : undefined,\n };\n\n const response = await Http.request<Omit<RadarTripResponse, 'response'>>({\n method: 'POST',\n path: 'trips',\n data,\n });\n\n // save trip options\n TripsAPI.setTripOptions(tripOptions);\n\n const tripRes: RadarTripResponse = {\n trip: response.trip,\n events: response.events,\n };\n\n if (options.debug) {\n tripRes.response = response;\n }\n\n return tripRes;\n }\n\n /**\n * update an in-progress trip\n * @param tripOptions - updated trip configuration\n * @param status - optional trip status override\n * @returns the updated trip and any triggered events\n */\n static async updateTrip(tripOptions: RadarTripOptions, status?: RadarTripStatus): Promise<RadarTripResponse> {\n const options = Config.get();\n tripOptions = tripOptions || TripsAPI.getTripOptions();\n\n if (!tripOptions) {\n Logger.warn('tripOptions not set when calling \"startTrip\"');\n }\n\n const {\n externalId,\n destinationGeofenceTag,\n destinationGeofenceExternalId,\n mode,\n metadata,\n approachingThreshold,\n scheduledArrivalAt,\n } = tripOptions;\n\n if (scheduledArrivalAt && !isValidDate(scheduledArrivalAt)) {\n Logger.warn('Invalid date format for scheduledArrivalAt');\n }\n\n const data = {\n status,\n externalId,\n destinationGeofenceTag,\n destinationGeofenceExternalId,\n mode,\n metadata,\n approachingThreshold,\n scheduledArrivalAt: isValidDate(scheduledArrivalAt) ? scheduledArrivalAt!.toJSON() : undefined,\n };\n\n const response = await Http.request<Omit<RadarTripResponse, 'response'>>({\n method: 'PATCH',\n path: `trips/${externalId}/update`,\n data,\n });\n\n const tripRes: RadarTripResponse = {\n trip: response.trip,\n events: response.events,\n };\n\n if (options.debug) {\n tripRes.response = response;\n }\n\n return tripRes;\n }\n\n /** complete the current trip and clear local trip options */\n static async completeTrip(): Promise<RadarTripResponse> {\n const tripOptions = TripsAPI.getTripOptions();\n const tripResponse = await TripsAPI.updateTrip(tripOptions, 'completed');\n\n // clear local trip options\n TripsAPI.clearTripOptions();\n\n return tripResponse;\n }\n\n /** cancel the current trip and clear local trip options */\n static async cancelTrip(): Promise<RadarTripResponse> {\n const tripOptions = TripsAPI.getTripOptions();\n const tripResponse = await TripsAPI.updateTrip(tripOptions, 'canceled');\n\n // clear local trip options\n TripsAPI.clearTripOptions();\n\n return tripResponse;\n }\n}\n\nexport default TripsAPI;\n","import Config from '../config';\nimport Device from '../device';\nimport Http from '../http';\nimport Logger from '../logger';\nimport Navigator from '../navigator';\nimport Session from '../session';\nimport Storage from '../storage';\nimport SDK_VERSION from '../version';\nimport TripsAPI from './trips';\n\nimport type { RadarTrackParams, RadarTrackResponse } from '../types';\n\n/** @internal tracking API — use {@link Radar.trackOnce} instead */\nclass TrackAPI {\n /**\n * track the user's current location once\n * @param params - tracking parameters (location, user info, trip options)\n * @returns tracked user, events, and location\n */\n static async trackOnce(params: RadarTrackParams) {\n const options = Config.get();\n\n const { desiredAccuracy } = params;\n let { latitude, longitude, accuracy } = params;\n\n // if latitude & longitude are not provided,\n // try and retrieve device location (will prompt for location permissions)\n if (!latitude || !longitude) {\n const deviceLocation = await Navigator.getCurrentPosition({ desiredAccuracy });\n latitude = deviceLocation.latitude;\n longitude = deviceLocation.longitude;\n accuracy = deviceLocation.accuracy;\n }\n\n // location authorization\n const locationAuthorization = await Navigator.getPermissionStatus();\n\n // user indentification fields\n const userId = params.userId || Storage.getItem(Storage.USER_ID);\n const deviceId = params.deviceId || Device.getDeviceId();\n const installId = params.installId || Device.getInstallId();\n const sessionId = Session.getSessionId();\n const deviceType = params.deviceType || 'Web';\n const description = params.description || Storage.getItem(Storage.DESCRIPTION);\n\n // save userId for trip tracking\n if (!userId) {\n Logger.warn('userId not provided for trackOnce.');\n } else {\n Storage.setItem(Storage.USER_ID, userId);\n }\n\n // other info\n const metadata = params.metadata || Storage.getJSON(Storage.METADATA);\n\n // trips\n const tripOptions = params.tripOptions || TripsAPI.getTripOptions();\n if (tripOptions) {\n tripOptions.version = '2';\n }\n\n const body = {\n ...params,\n locationAuthorization,\n accuracy,\n description,\n deviceId,\n deviceType,\n foreground: true,\n installId,\n sessionId,\n latitude,\n longitude,\n metadata,\n sdkVersion: SDK_VERSION,\n stopped: true,\n userId,\n tripOptions,\n };\n\n const response = await Http.request<Omit<RadarTrackResponse, 'response' | 'location'>>({\n method: 'POST',\n path: 'track',\n data: body,\n });\n\n const { user, events } = response;\n const location = { latitude, longitude, accuracy };\n\n const trackRes: RadarTrackResponse = {\n user,\n events,\n location,\n };\n\n if (options.debug) {\n trackRes.response = response;\n }\n\n return trackRes;\n }\n}\n\nexport default TrackAPI;\n","import AddressesAPI from './api/addresses';\nimport ConfigAPI from './api/config';\nimport ContextAPI from './api/context';\nimport ConversionsAPI from './api/conversions';\nimport GeocodingAPI from './api/geocoding';\nimport RoutingAPI from './api/routing';\nimport SearchAPI from './api/search';\nimport TrackAPI from './api/track';\nimport TripsAPI from './api/trips';\nimport Config from './config';\nimport Device from './device';\nimport * as errors from './errors';\nimport { RadarPublishableKeyError } from './errors';\nimport Http from './http';\nimport Logger from './logger';\nimport Navigator from './navigator';\nimport Session from './session';\nimport Storage from './storage';\nimport SDK_VERSION from './version';\n\nimport type { RadarError } from './errors';\nimport type { RadarPlugin, RadarPluginContext, RadarStatic } from './plugin';\nimport type {\n Location,\n NavigatorPosition,\n RadarAutocompleteParams,\n RadarAutocompleteResponse,\n RadarContextResponse,\n RadarConversionParams,\n RadarConversionResponse,\n RadarDistanceParams,\n RadarForwardGeocodeParams,\n RadarGeocodeResponse,\n RadarIPGeocodeResponse,\n RadarMatrixParams,\n RadarMatrixResponse,\n RadarMetadata,\n RadarOptions,\n RadarReverseGeocodeParams,\n RadarRouteResponse,\n RadarSearchGeofencesParams,\n RadarSearchGeofencesResponse,\n RadarSearchPlacesParams,\n RadarSearchPlacesResponse,\n RadarTrackParams,\n RadarTrackResponse,\n RadarTripOptions,\n RadarTripResponse,\n RadarValidateAddressParams,\n RadarValidateAddressResponse,\n} from './types';\n\nconst isSecretKey = (key: string): boolean => key.includes('_sk_');\nconst isLiveKey = (key: string): boolean => key.includes('_live_');\n\n/**\n * main entry point for the Radar SDK. all methods are static — do not instantiate.\n *\n * @example\n * ```ts\n * Radar.initialize('prj_test_pk_...');\n * const { user, events } = await Radar.trackOnce();\n * ```\n */\nclass Radar {\n private static _plugins: Map<string, RadarPlugin> = new Map();\n\n public static errors = errors;\n\n /** current SDK version string */\n public static get VERSION() {\n return SDK_VERSION;\n }\n\n /** register one or more plugins (e.g. maps, autocomplete, fraud) */\n public static registerPlugin(...plugins: RadarPlugin[]) {\n const ctx = Radar._getPluginContext();\n for (const plugin of plugins) {\n if (Radar._plugins.has(plugin.name)) {\n Logger.warn(`plugin \"${plugin.name}\" already registered.`);\n continue;\n }\n\n plugin.install(ctx);\n Radar._plugins.set(plugin.name, plugin);\n }\n }\n\n private static _getPluginContext(): RadarPluginContext {\n return {\n Radar: Radar as RadarStatic,\n Config,\n Http,\n Storage,\n Device,\n Session,\n Logger,\n Navigator,\n apis: {\n Addresses: AddressesAPI,\n Config: ConfigAPI,\n Context: ContextAPI,\n Conversions: ConversionsAPI,\n Geocoding: GeocodingAPI,\n Routing: RoutingAPI,\n Search: SearchAPI,\n Track: TrackAPI,\n Trips: TripsAPI,\n },\n };\n }\n\n /**\n * initialize the SDK with a publishable key. must be called before any other method.\n * @param publishableKey - your Radar publishable key (starts with `prj_test_pk_` or `prj_live_pk_`)\n * @param options - optional SDK configuration\n * @throws {RadarPublishableKeyError} if the key is missing or is a secret key\n */\n public static initialize(publishableKey: string, options: RadarOptions = {}) {\n if (!publishableKey) {\n throw new RadarPublishableKeyError('Publishable key required in initialization.');\n }\n\n if (isSecretKey(publishableKey)) {\n throw new RadarPublishableKeyError('Secret keys are not allowed. Please use your Radar publishable key.');\n }\n\n // store settings in global config\n const live = isLiveKey(publishableKey);\n const logLevel = live ? 'error' : 'info';\n const debug = !live;\n const radarOptions = Object.assign(\n Config.defaultOptions,\n {\n publishableKey,\n live,\n logLevel,\n debug,\n },\n options,\n );\n Config.setup(radarOptions);\n\n Logger.info(`initialized with ${live ? 'live' : 'test'} publishableKey.`);\n if (options.debug) {\n Logger.debug('using options', options);\n }\n\n // NOTE(jasonl): this allows us to run jest tests\n // without having to mock the ConfigAPI.getConfig call\n if (!window?.RADAR_TEST_ENV) {\n ConfigAPI.getConfig().catch((err) => {\n Logger.warn(`Error calling /config: ${err.message}`);\n });\n }\n }\n\n /** clear all SDK state and configuration */\n public static clear() {\n Config.clear();\n }\n\n ///////////////////////\n // Geofencing Platform\n ///////////////////////\n\n /** set the user ID for tracking. pass `undefined` to clear. */\n public static setUserId(userId?: string) {\n if (!userId) {\n Storage.removeItem(Storage.USER_ID);\n return;\n }\n Storage.setItem(Storage.USER_ID, String(userId).trim());\n }\n\n /** set a description for the current user. pass `undefined` to clear. */\n public static setDescription(description?: string) {\n if (!description) {\n Storage.removeItem(Storage.DESCRIPTION);\n return;\n }\n Storage.setItem(Storage.DESCRIPTION, String(description).trim());\n }\n\n /** set custom metadata for the current user. pass `undefined` to clear. */\n public static setMetadata(metadata?: RadarMetadata) {\n if (!metadata) {\n Storage.removeItem(Storage.METADATA);\n return;\n }\n Storage.setItem(Storage.METADATA, JSON.stringify(metadata));\n }\n\n /** get the device's current location using the browser geolocation API */\n public static getLocation(): Promise<NavigatorPosition> {\n return Navigator.getCurrentPosition();\n }\n\n /** track the user's current location once, returning location context and events */\n public static trackOnce(params: RadarTrackParams = {}): Promise<RadarTrackResponse> {\n try {\n return TrackAPI.trackOnce(params);\n } finally {\n // call with updated permissions\n ConfigAPI.getConfig(params).catch((err) => {\n Logger.warn(`Error calling /config: ${err.message}`);\n });\n }\n }\n\n /** get context (geofences, place, regions) for a location without tracking */\n public static getContext(params: Location): Promise<RadarContextResponse> {\n return ContextAPI.getContext(params);\n }\n\n /** save trip options for tracking. pass `undefined` to clear */\n public static setTripOptions(tripOptions?: RadarTripOptions) {\n TripsAPI.setTripOptions(tripOptions);\n }\n\n /** clear saved trip options */\n public static clearTripOptions() {\n TripsAPI.clearTripOptions();\n }\n\n /** get the currently saved trip options */\n public static getTripOptions(): RadarTripOptions {\n return TripsAPI.getTripOptions();\n }\n\n /** start a new trip with the given options */\n public static startTrip(tripOptions: RadarTripOptions): Promise<RadarTripResponse> {\n return TripsAPI.startTrip(tripOptions);\n }\n\n /** update an in-progress trip */\n public static updateTrip(tripOptions: RadarTripOptions): Promise<RadarTripResponse> {\n return TripsAPI.updateTrip(tripOptions);\n }\n\n /** complete the current trip and clear local trip options */\n public static completeTrip(): Promise<RadarTripResponse> {\n return TripsAPI.completeTrip();\n }\n\n /** cancel the current trip and clear local trip options */\n public static cancelTrip(): Promise<RadarTripResponse> {\n return TripsAPI.cancelTrip();\n }\n\n /** log a conversion event */\n public static logConversion(params: RadarConversionParams): Promise<RadarConversionResponse> {\n return ConversionsAPI.logConversion(params);\n }\n\n /** set the product identifier for tracking requests. pass `undefined` to clear */\n public static setProduct(product?: string) {\n if (!product) {\n Storage.removeItem(Storage.PRODUCT);\n return;\n }\n Storage.setItem(Storage.PRODUCT, String(product).trim());\n }\n\n ///////////////////////\n // Listeners\n ///////////////////////\n\n /** register a global error callback invoked on SDK errors */\n public static onError(callback: (error: RadarError) => void) {\n Config.onError(callback);\n }\n\n /////////////////\n // Maps Platform\n /////////////////\n\n /** geocode an address or place name to coordinates */\n public static forwardGeocode(params: RadarForwardGeocodeParams): Promise<RadarGeocodeResponse> {\n return GeocodingAPI.forwardGeocode(params);\n }\n\n /** reverse geocode coordinates to addresses */\n public static reverseGeocode(params: RadarReverseGeocodeParams): Promise<RadarGeocodeResponse> {\n return GeocodingAPI.reverseGeocode(params);\n }\n\n /** geocode the device's IP address to a rough location */\n public static ipGeocode(): Promise<RadarIPGeocodeResponse> {\n return GeocodingAPI.ipGeocode();\n }\n\n /** autocomplete partial addresses and place names */\n public static autocomplete(params: RadarAutocompleteParams, requestId?: string): Promise<RadarAutocompleteResponse> {\n return SearchAPI.autocomplete(params, requestId);\n }\n\n /** search for geofences near a location */\n public static searchGeofences(params: RadarSearchGeofencesParams): Promise<RadarSearchGeofencesResponse> {\n return SearchAPI.searchGeofences(params);\n }\n\n /** search for places (POIs) near a location */\n public static searchPlaces(params: RadarSearchPlacesParams): Promise<RadarSearchPlacesResponse> {\n return SearchAPI.searchPlaces(params);\n }\n\n /** validate a structured address */\n public static validateAddress(params: RadarValidateAddressParams): Promise<RadarValidateAddressResponse> {\n return AddressesAPI.validateAddress(params);\n }\n\n /** calculate travel distance and duration between two points */\n public static distance(params: RadarDistanceParams): Promise<RadarRouteResponse> {\n return RoutingAPI.distance(params);\n }\n\n /** calculate a distance matrix between multiple origins and destinations */\n public static matrix(params: RadarMatrixParams): Promise<RadarMatrixResponse> {\n return RoutingAPI.matrix(params);\n }\n}\n\nexport default Radar;\n"],"names":["GeocodingAPI"],"mappings":"AAGA;AACA,MAAM,MAAM,CAAA;;AAgBH,IAAA,OAAO,KAAK,CAAC,OAAA,GAAwB,EAAE,EAAA;AAC5C,QAAA,MAAM,CAAC,OAAO,GAAG,OAAO;IAC1B;;AAGO,IAAA,OAAO,GAAG,GAAA;AACf,QAAA,OAAO,MAAM,CAAC,OAAO,IAAI,EAAE;IAC7B;;AAGO,IAAA,OAAO,KAAK,GAAA;AACjB,QAAA,MAAM,CAAC,OAAO,GAAG,EAAE;AACnB,QAAA,MAAM,CAAC,aAAa,GAAG,IAAI;IAC7B;;IAGO,OAAO,OAAO,CAAC,QAAqC,EAAA;AACzD,QAAA,MAAM,CAAC,aAAa,GAAG,QAAQ;IACjC;;IAGO,OAAO,SAAS,CAAC,KAAU,EAAA;AAChC,QAAA,IAAI,MAAM,CAAC,aAAa,IAAI,KAAK,EAAE;AACjC,YAAA,MAAM,CAAC,aAAa,CAAC,KAAK,CAAC;QAC7B;IACF;;AAtCA;AACO,MAAA,CAAA,aAAa,GAAyC,IAAI;AAEjE;AACO,MAAA,CAAA,cAAc,GAAG;AACtB,IAAA,IAAI,EAAE,KAAK;AACX,IAAA,QAAQ,EAAE,OAAO;AACjB,IAAA,IAAI,EAAE,sBAAsB;AAC5B,IAAA,OAAO,EAAE,IAAI;AACb,IAAA,KAAK,EAAE,KAAK;CACb;;ACfH;AACM,MAAgB,UAAW,SAAQ,KAAK,CAAA;AAK5C,IAAA,WAAA,CAAY,OAAe,EAAA;QACzB,KAAK,CAAC,OAAO,CAAC;IAChB;AACD;AAED;AACM,MAAO,wBAAyB,SAAQ,UAAU,CAAA;AAItD,IAAA,WAAA,CAAY,OAAe,EAAA;QACzB,KAAK,CAAC,OAAO,CAAC;QAJS,IAAA,CAAA,IAAI,GAAG,0BAA0B;QACjC,IAAA,CAAA,MAAM,GAAG,uBAAuB;IAIzD;AACD;AAED;AACM,MAAO,kBAAmB,SAAQ,UAAU,CAAA;AAIhD,IAAA,WAAA,CAAY,OAAe,EAAA;QACzB,KAAK,CAAC,OAAO,CAAC;QAJS,IAAA,CAAA,IAAI,GAAG,oBAAoB;QAC3B,IAAA,CAAA,MAAM,GAAG,gBAAgB;IAIlD;AACD;AAED;AACM,MAAO,qBAAsB,SAAQ,UAAU,CAAA;AAInD,IAAA,WAAA,CAAY,OAAe,EAAA;QACzB,KAAK,CAAC,OAAO,CAAC;QAJS,IAAA,CAAA,IAAI,GAAG,uBAAuB;QAC9B,IAAA,CAAA,MAAM,GAAG,mBAAmB;IAIrD;AACD;AAED;AACM,MAAO,oBAAqB,SAAQ,UAAU,CAAA;AAMlD,IAAA,WAAA,CAAY,QAAwB,EAAA;QAClC,KAAK,CAAC,QAAQ,EAAE,IAAI,EAAE,OAAO,IAAI,cAAc,CAAC;QANzB,IAAA,CAAA,IAAI,GAAG,sBAAsB;QAC7B,IAAA,CAAA,MAAM,GAAG,mBAAmB;QACrC,IAAA,CAAA,IAAI,GAAG,GAAG;AAMxB,QAAA,IAAI,CAAC,QAAQ,GAAG,QAAQ;IAC1B;AACD;AAED;AACM,MAAO,sBAAuB,SAAQ,UAAU,CAAA;AAMpD,IAAA,WAAA,CAAY,QAAwB,EAAA;QAClC,KAAK,CAAC,QAAQ,EAAE,IAAI,EAAE,OAAO,IAAI,eAAe,CAAC;QAN1B,IAAA,CAAA,IAAI,GAAG,wBAAwB;QAC/B,IAAA,CAAA,MAAM,GAAG,oBAAoB;QACtC,IAAA,CAAA,IAAI,GAAG,GAAG;AAMxB,QAAA,IAAI,CAAC,QAAQ,GAAG,QAAQ;IAC1B;AACD;AAED;AACM,MAAO,yBAA0B,SAAQ,UAAU,CAAA;AAMvD,IAAA,WAAA,CAAY,QAAwB,EAAA;QAClC,KAAK,CAAC,QAAQ,EAAE,IAAI,EAAE,OAAO,IAAI,mBAAmB,CAAC;QAN9B,IAAA,CAAA,IAAI,GAAG,2BAA2B;QAClC,IAAA,CAAA,MAAM,GAAG,wBAAwB;QAC1C,IAAA,CAAA,IAAI,GAAG,GAAG;AAMxB,QAAA,IAAI,CAAC,QAAQ,GAAG,QAAQ;IAC1B;AACD;AAED;AACM,MAAO,mBAAoB,SAAQ,UAAU,CAAA;AAMjD,IAAA,WAAA,CAAY,QAAwB,EAAA;QAClC,KAAK,CAAC,QAAQ,EAAE,IAAI,EAAE,OAAO,IAAI,YAAY,CAAC;QANvB,IAAA,CAAA,IAAI,GAAG,qBAAqB;QAC5B,IAAA,CAAA,MAAM,GAAG,iBAAiB;QACnC,IAAA,CAAA,IAAI,GAAG,GAAG;AAMxB,QAAA,IAAI,CAAC,QAAQ,GAAG,QAAQ;IAC1B;AACD;AAED;AACM,MAAO,kBAAmB,SAAQ,UAAU,CAAA;AAMhD,IAAA,WAAA,CAAY,QAAwB,EAAA;QAClC,KAAK,CAAC,QAAQ,EAAE,IAAI,EAAE,OAAO,IAAI,YAAY,CAAC;QANvB,IAAA,CAAA,IAAI,GAAG,oBAAoB;QAC3B,IAAA,CAAA,MAAM,GAAG,iBAAiB;QACnC,IAAA,CAAA,IAAI,GAAG,GAAG;AAMxB,QAAA,IAAI,CAAC,QAAQ,GAAG,QAAQ;IAC1B;AACD;AAED;AACM,MAAO,mBAAoB,SAAQ,UAAU,CAAA;AAQjD,IAAA,WAAA,CAAY,QAAwB,EAAA;QAClC,KAAK,CAAC,QAAQ,EAAE,IAAI,EAAE,OAAO,IAAI,sBAAsB,CAAC;QARjC,IAAA,CAAA,IAAI,GAAG,qBAAqB;QAC5B,IAAA,CAAA,MAAM,GAAG,kBAAkB;QACpC,IAAA,CAAA,IAAI,GAAG,GAAG;AAQxB,QAAA,IAAI,CAAC,QAAQ,GAAG,QAAQ;QACxB,IAAI,CAAC,IAAI,GAAG,QAAQ,EAAE,IAAI,EAAE,IAAI;IAClC;AACD;AAED;AACM,MAAO,gBAAiB,SAAQ,UAAU,CAAA;AAK9C,IAAA,WAAA,CAAY,QAAwB,EAAA;QAClC,KAAK,CAAC,QAAQ,EAAE,IAAI,EAAE,OAAO,IAAI,wBAAwB,CAAC;QALnC,IAAA,CAAA,IAAI,GAAG,kBAAkB;QACzB,IAAA,CAAA,MAAM,GAAG,cAAc;AAM9C,QAAA,IAAI,CAAC,QAAQ,GAAG,QAAQ;IAC1B;AACD;AAED;AACM,MAAO,iBAAkB,SAAQ,UAAU,CAAA;AAI/C,IAAA,WAAA,GAAA;QACE,KAAK,CAAC,oBAAoB,CAAC;QAJJ,IAAA,CAAA,IAAI,GAAG,mBAAmB;QAC1B,IAAA,CAAA,MAAM,GAAG,eAAe;IAIjD;AACD;AAED;AACM,MAAO,iBAAkB,SAAQ,UAAU,CAAA;AAK/C,IAAA,WAAA,CAAY,QAAwB,EAAA;QAClC,KAAK,CAAC,QAAQ,EAAE,IAAI,EAAE,OAAO,IAAI,uBAAuB,CAAC;QALlC,IAAA,CAAA,IAAI,GAAG,mBAAmB;QAC1B,IAAA,CAAA,MAAM,GAAG,eAAe;AAM/C,QAAA,IAAI,CAAC,QAAQ,GAAG,QAAQ;IAC1B;AACD;;;;;;;;;;;;;;;;;;;AClKD,MAAM,UAAU,GAAG;AACjB,IAAA,IAAI,EAAE,CAAC;AACP,IAAA,KAAK,EAAE,CAAC;AACR,IAAA,IAAI,EAAE,CAAC;AACP,IAAA,IAAI,EAAE,CAAC;AACP,IAAA,KAAK,EAAE,CAAC;CACT;AAED;AACA,MAAM,QAAQ,GAAG,MAAa;;AAE5B,IAAA,IAAI,MAAM,IAAI,MAAM,CAAC,cAAc,EAAE;QACnC,OAAO,UAAU,CAAC,IAAI;IACxB;IAEA,MAAM,EAAE,QAAQ,EAAE,KAAK,EAAE,GAAG,MAAM,CAAC,GAAG,EAAE;IACxC,IAAI,KAAK,EAAE;QACT,OAAO,UAAU,CAAC,KAAK;IACzB;IACA,IAAI,QAAQ,EAAE;AACZ,QAAA,OAAO,UAAU,CAAC,QAAQ,CAAC;IAC7B;AACA,IAAA,OAAO,UAAU,CAAC,KAAK,CAAC;AAC1B,CAAC;AAED;AACA,MAAM,MAAM,CAAA;;AAEH,IAAA,OAAO,KAAK,CAAC,OAAe,EAAE,OAAa,EAAA;AAChD,QAAA,IAAI,QAAQ,EAAE,KAAK,UAAU,CAAC,KAAK,EAAE;AACnC,YAAA,OAAO,CAAC,GAAG,CAAC,CAAA,mBAAA,EAAsB,OAAO,CAAC,IAAI,EAAE,CAAA,CAAE,EAAE,OAAO,CAAC;QAC9D;IACF;;IAGO,OAAO,IAAI,CAAC,OAAe,EAAA;AAChC,QAAA,IAAI,QAAQ,EAAE,IAAI,UAAU,CAAC,IAAI,EAAE;YACjC,OAAO,CAAC,GAAG,CAAC,CAAA,WAAA,EAAc,OAAO,CAAC,IAAI,EAAE,CAAA,CAAE,CAAC;QAC7C;IACF;;IAGO,OAAO,IAAI,CAAC,OAAe,EAAA;AAChC,QAAA,IAAI,QAAQ,EAAE,IAAI,UAAU,CAAC,IAAI,EAAE;YACjC,OAAO,CAAC,IAAI,CAAC,CAAA,WAAA,EAAc,OAAO,CAAC,IAAI,EAAE,CAAA,CAAE,CAAC;QAC9C;IACF;;IAGO,OAAO,KAAK,CAAC,OAAe,EAAA;AACjC,QAAA,IAAI,QAAQ,EAAE,IAAI,UAAU,CAAC,KAAK,EAAE;YAClC,OAAO,CAAC,KAAK,CAAC,CAAA,WAAA,EAAc,OAAO,CAAC,IAAI,EAAE,CAAA,CAAE,CAAC;QAC/C;IACF;AACD;;ACtDD;AACA,MAAM,OAAO,CAAA;;AAEJ,IAAA,WAAW,OAAO,GAAA;AACvB,QAAA,OAAO,cAAc;IACvB;;AAEO,IAAA,WAAW,SAAS,GAAA;AACzB,QAAA,OAAO,gBAAgB;IACzB;;AAEO,IAAA,WAAW,UAAU,GAAA;AAC1B,QAAA,OAAO,iBAAiB;IAC1B;;AAEO,IAAA,WAAW,UAAU,GAAA;AAC1B,QAAA,OAAO,iBAAiB;IAC1B;;AAEO,IAAA,WAAW,WAAW,GAAA;AAC3B,QAAA,OAAO,mBAAmB;IAC5B;;AAEO,IAAA,WAAW,QAAQ,GAAA;AACxB,QAAA,OAAO,gBAAgB;IACzB;;AAEO,IAAA,WAAW,eAAe,GAAA;AAC/B,QAAA,OAAO,uBAAuB;IAChC;;AAEO,IAAA,WAAW,YAAY,GAAA;AAC5B,QAAA,OAAO,oBAAoB;IAC7B;;AAGO,IAAA,WAAW,OAAO,GAAA;AACvB,QAAA,OAAO,eAAe;IACxB;;AAGQ,IAAA,OAAO,UAAU,GAAA;AACvB,QAAA,MAAM,OAAO,GAAG,MAAM,EAAE,YAAY;QACpC,IAAI,CAAC,OAAO,EAAE;AACZ,YAAA,MAAM,CAAC,IAAI,CAAC,6BAA6B,CAAC;QAC5C;AACA,QAAA,OAAO,OAAO;IAChB;AAEA;;;;AAIG;AACI,IAAA,OAAO,OAAO,CAAC,GAAW,EAAE,KAAa,EAAA;AAC9C,QAAA,MAAM,OAAO,GAAG,IAAI,CAAC,UAAU,EAAE;QACjC,IAAI,CAAC,OAAO,EAAE;YACZ;QACF;QACA,IAAI,KAAK,KAAK,SAAS,IAAI,KAAK,KAAK,IAAI,EAAE;YACzC;QACF;AACA,QAAA,OAAO,CAAC,OAAO,CAAC,GAAG,EAAE,KAAK,CAAC;IAC7B;AAEA;;;;AAIG;IACI,OAAO,OAAO,CAAC,GAAW,EAAA;AAC/B,QAAA,MAAM,OAAO,GAAG,IAAI,CAAC,UAAU,EAAE;QACjC,IAAI,CAAC,OAAO,EAAE;AACZ,YAAA,OAAO,IAAI;QACb;QACA,MAAM,KAAK,GAAG,OAAO,CAAC,OAAO,CAAC,GAAG,CAAC;QAClC,IAAI,KAAK,KAAK,SAAS,IAAI,KAAK,KAAK,IAAI,EAAE;AACzC,YAAA,OAAO,KAAK;QACd;AACA,QAAA,OAAO,IAAI;IACb;AAEA;;;;AAIG;IACI,OAAO,OAAO,CAAC,GAAW,EAAA;QAC/B,MAAM,IAAI,GAAG,IAAI,CAAC,OAAO,CAAC,GAAG,CAAC;QAC9B,IAAI,CAAC,IAAI,EAAE;AACT,YAAA,OAAO,IAAI;QACb;AAEA,QAAA,IAAI;AACF,YAAA,OAAO,IAAI,CAAC,KAAK,CAAC,IAAI,CAAC;QACzB;AAAE,QAAA,MAAM;AACN,YAAA,MAAM,CAAC,IAAI,CAAC,2CAA2C,GAAG,CAAA,CAAE,CAAC;AAC7D,YAAA,OAAO,IAAI;QACb;IACF;AAEA;;;AAGG;IACI,OAAO,UAAU,CAAC,GAAW,EAAA;AAClC,QAAA,MAAM,OAAO,GAAG,IAAI,CAAC,UAAU,EAAE;QACjC,IAAI,CAAC,OAAO,EAAE;AACZ,YAAA,OAAO,IAAI;QACb;AACA,QAAA,OAAO,CAAC,UAAU,CAAC,GAAG,CAAC;IACzB;;AAGO,IAAA,OAAO,KAAK,GAAA;AACjB,QAAA,MAAM,OAAO,GAAG,IAAI,CAAC,UAAU,EAAE;QACjC,IAAI,CAAC,OAAO,EAAE;AACZ,YAAA,OAAO,IAAI;QACb;QACA,OAAO,CAAC,KAAK,EAAE;IACjB;AACD;;AChHD,MAAM,wBAAwB,GAAoB;AAChD,IAAA,UAAU,EAAE,CAAC;AACb,IAAA,OAAO,EAAE,IAAI,GAAG,EAAE;AAClB,IAAA,kBAAkB,EAAE,IAAI;CACzB;AAED;AACA,MAAM,eAAe,GAAG,CAAC,eAAwB,KAAK,OAAO,CAAC,eAAe,KAAK,MAAM,CAAC;AAEzF;AACA,MAAM,SAAS,CAAA;AACb;;;;;;AAMG;AACI,IAAA,aAAa,kBAAkB,CAAC,YAAqC,EAAE,EAAA;QAC5E,OAAO,IAAI,OAAO,CAAC,CAAC,OAAO,EAAE,MAAM,KAAI;AACrC,YAAA,MAAM,OAAO,GAAG,MAAM,CAAC,GAAG,EAAE;YAE5B,IAAI,CAAC,SAAS,IAAI,CAAC,SAAS,CAAC,WAAW,EAAE;gBACxC,OAAO,MAAM,CAAC,IAAI,kBAAkB,CAAC,yCAAyC,CAAC,CAAC;YAClF;;AAGA,YAAA,IAAI,OAAO,CAAC,oBAAoB,EAAE;AAChC,gBAAA,IAAI;oBACF,MAAM,iBAAiB,GAAG,OAAO,CAAC,OAAO,CAAC,OAAO,CAAC,eAAe,CAAC;oBAClE,IAAI,iBAAiB,EAAE;wBACrB,MAAM,cAAc,GAAG,IAAI,CAAC,KAAK,CAAC,iBAAiB,CAAC;AACpD,wBAAA,MAAM,EAAE,QAAQ,EAAE,SAAS,EAAE,QAAQ,EAAE,SAAS,EAAE,GAAG,cAAc,IAAI,EAAE;wBACzE,IAAI,IAAI,CAAC,GAAG,EAAE,GAAG,QAAQ,CAAC,SAAS,CAAC,EAAE;AACpC,4BAAA,IAAI,QAAQ,IAAI,SAAS,IAAI,QAAQ,EAAE;gCACrC,OAAO,OAAO,CAAC,EAAE,QAAQ,EAAE,SAAS,EAAE,QAAQ,EAAE,CAAC;4BACnD;wBACF;oBACF;gBACF;AAAE,gBAAA,MAAM;AACN,oBAAA,MAAM,CAAC,IAAI,CAAC,iCAAiC,CAAC;gBAChD;YACF;;YAGA,MAAM,eAAe,GAAG,MAAM,CAAC,MAAM,CAAC,EAAE,EAAE,wBAAwB,CAAC;AACnE,YAAA,IAAI,OAAO,CAAC,kBAAkB,KAAK,SAAS,EAAE;AAC5C,gBAAA,eAAe,CAAC,UAAU,GAAG,OAAO,CAAC,kBAAkB;YACzD;AACA,YAAA,IAAI,OAAO,CAAC,eAAe,KAAK,SAAS,EAAE;AACzC,gBAAA,eAAe,CAAC,OAAO,GAAG,OAAO,CAAC,eAAe;YACnD;AACA,YAAA,IAAI,OAAO,CAAC,eAAe,KAAK,SAAS,EAAE;gBACzC,eAAe,CAAC,kBAAkB,GAAG,eAAe,CAAC,OAAO,CAAC,eAAe,CAAC;YAC/E;;AAGA,YAAA,IAAI,SAAS,CAAC,eAAe,KAAK,SAAS,EAAE;gBAC3C,eAAe,CAAC,kBAAkB,GAAG,eAAe,CAAC,SAAS,CAAC,eAAe,CAAC;YACjF;AAEA,YAAA,MAAM,CAAC,IAAI,CAAC,CAAA,2BAAA,EAA8B,IAAI,CAAC,SAAS,CAAC,eAAe,CAAC,CAAA,CAAE,CAAC;;YAG5E,SAAS,CAAC,WAAW,CAAC,kBAAkB,CACtC,CAAC,QAAQ,KAAI;gBACX,IAAI,CAAC,QAAQ,IAAI,CAAC,QAAQ,CAAC,MAAM,EAAE;oBACjC,OAAO,MAAM,CAAC,IAAI,kBAAkB,CAAC,2CAA2C,CAAC,CAAC;gBACpF;gBAEA,MAAM,EAAE,QAAQ,EAAE,SAAS,EAAE,QAAQ,EAAE,GAAG,QAAQ,CAAC,MAAM;;AAGzD,gBAAA,IAAI,OAAO,CAAC,oBAAoB,EAAE;oBAChC,MAAM,oBAAoB,GAAG,MAAM,CAAC,UAAU,CAAC,OAAO,CAAC,oBAA2B,CAAC;AACnF,oBAAA,MAAM,SAAS,GAAG,IAAI,CAAC,GAAG,EAAE;oBAC5B,MAAM,SAAS,GAAG,SAAS,GAAG,oBAAoB,GAAG,EAAE,GAAG,IAAI,CAAC;AAE/D,oBAAA,MAAM,YAAY,GAAG,EAAE,QAAQ,EAAE,SAAS,EAAE,QAAQ,EAAE,SAAS,EAAE,SAAS,EAAE;AAC5E,oBAAA,OAAO,CAAC,OAAO,CAAC,OAAO,CAAC,eAAe,EAAE,IAAI,CAAC,SAAS,CAAC,YAAY,CAAC,CAAC;gBACxE;gBAEA,OAAO,OAAO,CAAC,EAAE,QAAQ,EAAE,SAAS,EAAE,QAAQ,EAAE,CAAC;AACnD,YAAA,CAAC,EACD,CAAC,GAA6B,KAAI;;gBAEhC,IAAI,GAAG,IAAI,GAAG,CAAC,IAAI,KAAK,CAAC,EAAE;;;;oBAIzB,OAAO,MAAM,CAAC,IAAI,qBAAqB,CAAC,8BAA8B,CAAC,CAAC;gBAC1E;gBACA,OAAO,MAAM,CAAC,IAAI,kBAAkB,CAAC,+BAA+B,CAAC,CAAC;YACxE,CAAC,EACD,eAAe,CAChB;AACH,QAAA,CAAC,CAAC;IACJ;AAEA;;;AAGG;IACI,aAAa,mBAAmB,GAAA;AACrC,QAAA,OAAO,IAAI,OAAO,CAAC,CAAC,OAAO,KAAI;YAC7B,IAAI,qBAAqB,GAA0B,gBAAgB;YAEnE,IAAI,CAAC,SAAS,IAAI,CAAC,SAAS,CAAC,WAAW,EAAE;AACxC,gBAAA,OAAO,OAAO,CAAC,qBAAqB,CAAC;YACvC;AAEA,YAAA,KAAK,SAAS,CAAC,WAAW,CAAC,KAAK,CAAC,EAAE,IAAI,EAAE,aAAa,EAAE,CAAC,CAAC,IAAI,CAAC,CAAC,iBAAiB,KAAI;AACnF,gBAAA,QAAQ,iBAAiB,CAAC,KAAK;AAC7B,oBAAA,KAAK,SAAS;wBACZ,qBAAqB,GAAG,oBAAoB;wBAC5C;AACF,oBAAA,KAAK,QAAQ;wBACX,qBAAqB,GAAG,QAAQ;wBAChC;AACF,oBAAA,KAAK,QAAQ;wBACX,qBAAqB,GAAG,gBAAgB;wBACxC;;AAKJ,gBAAA,OAAO,OAAO,CAAC,qBAAqB,CAAC;AACvC,YAAA,CAAC,CAAC;AACJ,QAAA,CAAC,CAAC;IACJ;;AAGO,IAAA,OAAO,MAAM,GAAA;AAClB,QAAA,OAAO,SAAS,IAAI,SAAS,CAAC,MAAM;IACtC;AACD;;AClJD,kBAAe,cAAc;;ACwD7B,MAAM,gBAAgB,GAAG,IAAI,GAAG,EAA2B;AAE3D;AACA,MAAM,IAAI,CAAA;AAIR;;;;AAIG;AACH,IAAA,OAAO,wBAAwB,CAAC,WAAmB,EAAE,OAAmC,EAAA;QACtF,IAAI,CAAC,iBAAiB,CAAC,GAAG,CAAC,WAAW,EAAE,OAAO,CAAC;IAClD;IAeA,aAAa,OAAO,CAAmD,EACrE,MAAM,EACN,IAAI,EACJ,IAAI,EACJ,IAAI,EACJ,OAAO,EACP,OAAO,GAAG,EAAE,EACZ,YAAY,EACZ,SAAS,GACU,EAAA;AACnB,QAAA,MAAM,OAAO,GAAG,MAAM,CAAC,GAAG,EAAE;AAE5B,QAAA,MAAM,cAAc,GAAG,OAAO,CAAC,cAAc;QAC7C,IAAI,CAAC,cAAc,EAAE;AACnB,YAAA,MAAM,IAAI,wBAAwB,CAAC,yBAAyB,CAAC;QAC/D;AAEA,QAAA,MAAM,OAAO,GAAG,IAAI,IAAI,OAAO,CAAC,IAAI;AACpC,QAAA,MAAM,UAAU,GAAG,OAAO,IAAI,OAAO,CAAC,OAAO;QAC7C,IAAI,GAAG,GAAG,CAAA,EAAG,OAAO,IAAI,UAAU,CAAA,CAAA,EAAI,IAAI,CAAA,CAAE;;AAG5C,QAAA,MAAM,QAAQ,GAAG,MAAM,CAAC,WAAW,CAAC,MAAM,CAAC,OAAO,CAAC,IAAI,IAAI,EAAE,CAAC,CAAC,MAAM,CAAC,CAAC,GAAG,CAAC,CAAC,KAAK,CAAC,KAAK,SAAS,CAAC,CAAC;AAElG,QAAA,IAAI,IAAwB;AAE5B,QAAA,IAAI,MAAM,KAAK,KAAK,EAAE;AACpB,YAAA,MAAM,MAAM,GAAG,IAAI,eAAe,CAAC,MAAM,CAAC,OAAO,CAAC,QAAQ,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,KAAK,CAAC,CAAC,EAAE,MAAM,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC;AAC5F,YAAA,MAAM,EAAE,GAAG,MAAM,CAAC,QAAQ,EAAE;YAC5B,IAAI,EAAE,EAAE;AACN,gBAAA,GAAG,GAAG,CAAA,EAAG,GAAG,CAAA,CAAA,EAAI,EAAE,EAAE;YACtB;QACF;aAAO;AACL,YAAA,IAAI,GAAG,IAAI,CAAC,SAAS,CAAC,QAAQ,CAAC;QACjC;;QAGA,IAAI,SAAS,EAAE;YACb,gBAAgB,CAAC,GAAG,CAAC,SAAS,CAAC,EAAE,KAAK,EAAE;QAC1C;AAEA,QAAA,MAAM,eAAe,GAAG,IAAI,eAAe,EAAE;QAE7C,IAAI,SAAS,EAAE;AACb,YAAA,gBAAgB,CAAC,GAAG,CAAC,SAAS,EAAE,eAAe,CAAC;QAClD;AAEA,QAAA,MAAM,cAAc,GAA2B;AAC7C,YAAA,aAAa,EAAE,cAAc;AAC7B,YAAA,cAAc,EAAE,kBAAkB;AAClC,YAAA,qBAAqB,EAAE,KAAK;AAC5B,YAAA,qBAAqB,EAAE,WAAW;SACnC;QAED,IAAI,aAAa,GAA2B,EAAE;AAC9C,QAAA,IAAI,OAAO,OAAO,CAAC,iBAAiB,KAAK,UAAU,EAAE;AACnD,YAAA,aAAa,GAAG,OAAO,CAAC,iBAAiB,EAAE;QAC7C;AAEA,QAAA,MAAM,UAAU,GAA2B,EAAE,GAAG,cAAc,EAAE,GAAG,aAAa,EAAE,GAAG,OAAO,EAAE;AAE9F,QAAA,IAAI,QAAkB;AACtB,QAAA,IAAI;AACF,YAAA,QAAQ,GAAG,MAAM,KAAK,CAAC,GAAG,EAAE;gBAC1B,MAAM;AACN,gBAAA,OAAO,EAAE,UAAU;gBACnB,IAAI;gBACJ,MAAM,EAAE,eAAe,CAAC,MAAM;AAC/B,aAAA,CAAC;QACJ;AAAE,QAAA,MAAM;;YAEN,IAAI,SAAS,IAAI,gBAAgB,CAAC,GAAG,CAAC,SAAS,CAAC,KAAK,eAAe,EAAE;AACpE,gBAAA,gBAAgB,CAAC,MAAM,CAAC,SAAS,CAAC;YACpC;YAEA,IAAI,IAAI,EAAE;gBACR,KAAK,MAAM,CAAC,OAAO,EAAE,OAAO,CAAC,IAAI,IAAI,CAAC,iBAAiB,EAAE;AACvD,oBAAA,IAAI,IAAI,CAAC,QAAQ,CAAC,OAAO,CAAC,EAAE;wBAC1B,MAAM,OAAO,CAAC,CAAC,CAAC,SAAS,CAAC,MAAM,EAAE,CAAC;oBACrC;gBACF;YACF;YACA,MAAM,IAAI,iBAAiB,EAAE;QAC/B;QAEA,IAAI,SAAS,IAAI,gBAAgB,CAAC,GAAG,CAAC,SAAS,CAAC,KAAK,eAAe,EAAE;AACpE,YAAA,gBAAgB,CAAC,MAAM,CAAC,SAAS,CAAC;QACpC;AAEA,QAAA,IAAI,MAAiC;AACrC,QAAA,IAAI;AACF,YAAA,IAAI,YAAY,KAAK,MAAM,EAAE;AAC3B,gBAAA,MAAM,GAAG,EAAE,IAAI,EAAE,QAAQ,CAAC,MAAM,EAAE,IAAI,EAAE,MAAM,QAAQ,CAAC,IAAI,EAAE,EAAE;YACjE;iBAAO;gBACL,MAAM,IAAI,MAAM,QAAQ,CAAC,IAAI,EAAE,CAAqB;YACtD;QACF;QAAE,OAAO,GAAG,EAAE;YACZ,IAAI,MAAM,EAAE;AACV,gBAAA,MAAM,IAAI,gBAAgB,CAAC,MAAM,CAAC;YACpC;iBAAO;AACL,gBAAA,IAAI,OAAO,CAAC,KAAK,EAAE;AACjB,oBAAA,MAAM,CAAC,KAAK,CAAC,oBAAoB,GAAG,CAAA,CAAE,CAAC;oBACvC,MAAM,CAAC,KAAK,CAAC,MAAM,CAAC,GAAG,CAAC,CAAC;gBAC3B;AAEA,gBAAA,MAAM,IAAI,iBAAiB,CAAC,MAAM,CAAC;YACrC;QACF;QAEA,IAAI,MAAM,IAAI,OAAO,MAAM,KAAK,QAAQ,IAAI,MAAM,IAAI,MAAM,EAAE;AAC5D,YAAA,MAAM,KAAK,GAAG,MAAM,CAAC,IAAI,EAAE,KAAK;AAChC,YAAA,IAAI,KAAK,KAAK,mBAAmB,EAAE;AACjC,gBAAA,MAAM,IAAI,qBAAqB,CAAC,mCAAmC,CAAC;YACtE;AAAO,iBAAA,IAAI,KAAK,KAAK,gBAAgB,EAAE;AACrC,gBAAA,MAAM,IAAI,kBAAkB,CAAC,+BAA+B,CAAC;YAC/D;AAAO,iBAAA,IAAI,KAAK,KAAK,eAAe,EAAE;gBACpC,MAAM,IAAI,iBAAiB,EAAE;YAC/B;QACF;AAEA,QAAA,IAAI,QAAQ,CAAC,EAAE,EAAE;AACf,YAAA,OAAO,MAAW;QACpB;AAEA,QAAA,IAAI,OAAO,CAAC,KAAK,EAAE;AACjB,YAAA,MAAM,CAAC,KAAK,CAAC,oBAAoB,GAAG,CAAA,CAAE,CAAC;YACvC,MAAM,CAAC,KAAK,CAAC,IAAI,CAAC,SAAS,CAAC,MAAM,CAAC,CAAC;QACtC;AAEA,QAAA,IAAI,QAAQ,CAAC,MAAM,KAAK,GAAG,EAAE;AAC3B,YAAA,MAAM,IAAI,oBAAoB,CAAC,MAAM,CAAC;QACxC;AAAO,aAAA,IAAI,QAAQ,CAAC,MAAM,KAAK,GAAG,EAAE;AAClC,YAAA,MAAM,IAAI,sBAAsB,CAAC,MAAM,CAAC;QAC1C;AAAO,aAAA,IAAI,QAAQ,CAAC,MAAM,KAAK,GAAG,EAAE;AAClC,YAAA,MAAM,IAAI,yBAAyB,CAAC,MAAM,CAAC;QAC7C;AAAO,aAAA,IAAI,QAAQ,CAAC,MAAM,KAAK,GAAG,EAAE;AAClC,YAAA,MAAM,IAAI,mBAAmB,CAAC,MAAM,CAAC;QACvC;AAAO,aAAA,IAAI,QAAQ,CAAC,MAAM,KAAK,GAAG,EAAE;AAClC,YAAA,MAAM,IAAI,kBAAkB,CAAC,MAAM,CAAC;QACtC;AAAO,aAAA,IAAI,QAAQ,CAAC,MAAM,KAAK,GAAG,EAAE;AAClC,YAAA,MAAM,IAAI,mBAAmB,CAAC,MAAM,CAAC;QACvC;AAAO,aAAA,IAAI,QAAQ,CAAC,MAAM,IAAI,GAAG,IAAI,QAAQ,CAAC,MAAM,GAAG,GAAG,EAAE;AAC1D,YAAA,MAAM,IAAI,gBAAgB,CAAC,MAAM,CAAC;QACpC;aAAO;AACL,YAAA,MAAM,IAAI,iBAAiB,CAAC,MAAM,CAAC;QACrC;IACF;;AA3KA;AACO,IAAA,CAAA,iBAAiB,GAA4C,IAAI,GAAG,EAAE;;ACxD/E;AACA,MAAM,YAAY,CAAA;AAChB;;;;AAIG;AACH,IAAA,aAAa,eAAe,CAAC,MAAkC,EAAA;AAC7D,QAAA,MAAM,OAAO,GAAG,MAAM,CAAC,GAAG,EAAE;AAE5B,QAAA,MAAM,QAAQ,GAAG,MAAM,IAAI,CAAC,OAAO,CAAiD;AAClF,YAAA,MAAM,EAAE,KAAK;AACb,YAAA,IAAI,EAAE,oBAAoB;AAC1B,YAAA,IAAI,EAAE,MAAM;AACb,SAAA,CAAC;AACF,QAAA,MAAM,EAAE,OAAO,EAAE,MAAM,EAAE,GAAG,QAAQ;AAEpC,QAAA,MAAM,kBAAkB,GAAiC;YACvD,OAAO;YACP,MAAM;SACP;AAED,QAAA,IAAI,OAAO,CAAC,KAAK,EAAE;AACjB,YAAA,kBAAkB,CAAC,QAAQ,GAAG,QAAQ;QACxC;AAEA,QAAA,OAAO,kBAAkB;IAC3B;AACD;;AC/BD,MAAM,YAAY,GAAG,MAAa;IAChC,IAAI,OAAO,MAAM,KAAK,WAAW,IAAI,MAAM,CAAC,UAAU,EAAE;AACtD,QAAA,OAAO,MAAM,CAAC,UAAU,EAAE;IAC5B;;AAGA,IAAA,MAAM,KAAK,GAAG,IAAI,UAAU,CAAC,EAAE,CAAC;AAChC,IAAA,MAAM,CAAC,eAAe,CAAC,KAAK,CAAC;AAC7B,IAAA,KAAK,CAAC,CAAC,CAAC,GAAG,CAAC,KAAK,CAAC,CAAC,CAAE,GAAG,IAAI,IAAI,IAAI,CAAC;AACrC,IAAA,KAAK,CAAC,CAAC,CAAC,GAAG,CAAC,KAAK,CAAC,CAAC,CAAE,GAAG,IAAI,IAAI,IAAI,CAAC;AAErC,IAAA,MAAM,GAAG,GAAG,KAAK,CAAC,IAAI,CAAC,KAAK,EAAE,CAAC,CAAC,KAAK,CAAC,CAAC,QAAQ,CAAC,EAAE,CAAC,CAAC,QAAQ,CAAC,CAAC,EAAE,GAAG,CAAC,CAAC,CAAC,IAAI,CAAC,EAAE,CAAC;IAC9E,OAAO,CAAA,EAAG,GAAG,CAAC,KAAK,CAAC,CAAC,EAAE,CAAC,CAAC,CAAA,CAAA,EAAI,GAAG,CAAC,KAAK,CAAC,CAAC,EAAE,EAAE,CAAC,CAAA,CAAA,EAAI,GAAG,CAAC,KAAK,CAAC,EAAE,EAAE,EAAE,CAAC,CAAA,CAAA,EAAI,GAAG,CAAC,KAAK,CAAC,EAAE,EAAE,EAAE,CAAC,CAAA,CAAA,EAAI,GAAG,CAAC,KAAK,CAAC,EAAE,CAAC,EAAE;AAC5G,CAAC;AAED;AACA,MAAM,MAAM,CAAA;AACV;;;AAGG;AACH,IAAA,OAAO,WAAW,GAAA;;QAEhB,MAAM,QAAQ,GAAG,OAAO,CAAC,OAAO,CAAC,OAAO,CAAC,SAAS,CAAC;QACnD,IAAI,QAAQ,EAAE;AACZ,YAAA,OAAO,QAAQ;QACjB;;AAGA,QAAA,MAAM,IAAI,GAAG,YAAY,EAAE;QAC3B,OAAO,CAAC,OAAO,CAAC,OAAO,CAAC,SAAS,EAAE,IAAI,CAAC;AACxC,QAAA,OAAO,IAAI;IACb;AAEA;;;AAGG;AACH,IAAA,OAAO,YAAY,GAAA;;QAEjB,MAAM,QAAQ,GAAG,OAAO,CAAC,OAAO,CAAC,OAAO,CAAC,UAAU,CAAC;QACpD,IAAI,QAAQ,EAAE;AACZ,YAAA,OAAO,QAAQ;QACjB;;AAGA,QAAA,MAAM,IAAI,GAAG,YAAY,EAAE;QAC3B,OAAO,CAAC,OAAO,CAAC,OAAO,CAAC,UAAU,EAAE,IAAI,CAAC;AACzC,QAAA,OAAO,IAAI;IACb;AACD;;AClDD,MAAM,oBAAoB,GAAG,GAAG,CAAC;AAEjC,MAAM,OAAO,GAAG,CAAC,SAAiB,KAAa;AAC7C,IAAA,MAAM,GAAG,GAAG,IAAI,CAAC,KAAK,CAAC,IAAI,CAAC,GAAG,EAAE,GAAG,IAAI,CAAC;IACzC,MAAM,OAAO,GAAG,MAAM,CAAC,QAAQ,CAAC,SAAS,CAAC;IAC1C,MAAM,IAAI,GAAG,IAAI,CAAC,GAAG,CAAC,GAAG,GAAG,OAAO,CAAC;IACpC,OAAO,IAAI,GAAG,oBAAoB;AACpC,CAAC;AAED;AACA,MAAM,OAAO,CAAA;AACX;;;AAGG;AACH,IAAA,OAAO,YAAY,GAAA;QACjB,MAAM,SAAS,GAAG,OAAO,CAAC,OAAO,CAAC,OAAO,CAAC,UAAU,CAAC;;AAGrD,QAAA,IAAI,SAAS,IAAI,OAAO,CAAC,SAAS,CAAC,EAAE;AACnC,YAAA,OAAO,SAAS;QAClB;;AAGA,QAAA,MAAM,YAAY,GAAG,IAAI,CAAC,KAAK,CAAC,IAAI,CAAC,GAAG,EAAE,GAAG,IAAI,CAAC,CAAC,QAAQ,EAAE,CAAC;QAC9D,OAAO,CAAC,OAAO,CAAC,OAAO,CAAC,UAAU,EAAE,YAAY,CAAC;AACjD,QAAA,OAAO,YAAY;IACrB;AACD;;ACdD;AACA,MAAM,SAAS,CAAA;AACb;;;;;AAKG;IACI,aAAa,SAAS,CAC3B,MAAA,GAA2B,EAAE,EAC7B,OAAA,GAAgC,EAAE,EAAA;QAElC,MAAM,QAAQ,GAAG,MAAM,CAAC,QAAQ,IAAI,MAAM,CAAC,WAAW,EAAE;QACxD,MAAM,SAAS,GAAG,MAAM,CAAC,SAAS,IAAI,MAAM,CAAC,YAAY,EAAE;AAC3D,QAAA,MAAM,SAAS,GAAG,OAAO,CAAC,YAAY,EAAE;;AAGxC,QAAA,IAAI,qBAAwD;AAC5D,QAAA,IAAI;AACF,YAAA,qBAAqB,GAAG,MAAM,SAAS,CAAC,mBAAmB,EAAE;QAC/D;QAAE,OAAO,GAAQ,EAAE;YACjB,MAAM,CAAC,IAAI,CAAC,CAAA,8BAAA,EAAiC,GAAG,CAAC,OAAO,CAAA,CAAE,CAAC;QAC7D;AAEA,QAAA,MAAM,IAAI,GAAG;YACX,QAAQ;YACR,SAAS;YACT,SAAS;YACT,qBAAqB;SACtB;QAED,OAAO,IAAI,CAAC,OAAO,CAAI;AACrB,YAAA,MAAM,EAAE,KAAK;AACb,YAAA,IAAI,EAAE,QAAQ;YACd,IAAI;YACJ,IAAI,EAAE,OAAO,CAAC,IAAI;YAClB,OAAO,EAAE,OAAO,CAAC,OAAO;AACzB,SAAA,CAAC;IACJ;AACD;;ACjDD;AACA,MAAM,UAAU,CAAA;AACd;;;;AAIG;AACI,IAAA,aAAa,UAAU,CAAC,QAAkB,EAAA;AAC/C,QAAA,MAAM,OAAO,GAAG,MAAM,CAAC,GAAG,EAAE;;QAG5B,IAAI,CAAC,QAAQ,CAAC,QAAQ,IAAI,CAAC,QAAQ,CAAC,SAAS,EAAE;AAC7C,YAAA,QAAQ,GAAG,MAAM,SAAS,CAAC,kBAAkB,EAAE;QACjD;QAEA,MAAM,EAAE,QAAQ,EAAE,SAAS,EAAE,QAAQ,EAAE,GAAG,QAAQ;AAElD,QAAA,MAAM,QAAQ,GAAG,MAAM,IAAI,CAAC,OAAO,CAAsD;AACvF,YAAA,MAAM,EAAE,KAAK;AACb,YAAA,IAAI,EAAE,SAAS;AACf,YAAA,IAAI,EAAE;AACJ,gBAAA,WAAW,EAAE,CAAA,EAAG,QAAQ,CAAA,CAAA,EAAI,SAAS,CAAA,CAAE;gBACvC,QAAQ;AACT,aAAA;AACF,SAAA,CAAC;AAEF,QAAA,MAAM,EAAE,SAAS,EAAE,KAAK,EAAE,OAAO,EAAE,KAAK,EAAE,GAAG,EAAE,UAAU,EAAE,GAAG,QAAQ;AAEtE,QAAA,MAAM,UAAU,GAAyB;YACvC,QAAQ;YACR,SAAS;YACT,KAAK;YACL,OAAO;YACP,KAAK;YACL,GAAG;YACH,UAAU;SACX;AAED,QAAA,IAAI,OAAO,CAAC,KAAK,EAAE;AACjB,YAAA,UAAU,CAAC,QAAQ,GAAG,QAAQ;QAChC;AAEA,QAAA,OAAO,UAAU;IACnB;AACD;;AC3CD;AACA,MAAM,cAAc,CAAA;AAClB;;;;AAIG;AACH,IAAA,aAAa,aAAa,CAAC,MAA6B,EAAA;AACtD,QAAA,MAAM,OAAO,GAAG,MAAM,CAAC,GAAG,EAAE;AAE5B,QAAA,MAAM,IAAI,GAAG,MAAM,CAAC,IAAI;AACxB,QAAA,MAAM,MAAM,GAAG,MAAM,CAAC,MAAM,IAAI,OAAO,CAAC,OAAO,CAAC,OAAO,CAAC,OAAO,CAAC;QAChE,MAAM,QAAQ,GAAG,MAAM,CAAC,QAAQ,IAAI,MAAM,CAAC,WAAW,EAAE;QACxD,MAAM,SAAS,GAAG,MAAM,CAAC,SAAS,IAAI,MAAM,CAAC,YAAY,EAAE;AAC3D,QAAA,MAAM,QAAQ,GAAG,MAAM,CAAC,QAAQ,IAAI,EAAE;AACtC,QAAA,MAAM,SAAS,GAAG,MAAM,CAAC,SAAS;AAElC,QAAA,IAAI,MAAM,CAAC,OAAO,EAAE;AAClB,YAAA,QAAQ,CAAC,OAAO,GAAG,MAAM,CAAC,OAAO;QACnC;AAEA,QAAA,MAAM,cAAc,GAClB,OAAO,SAAS,KAAK;AACnB,cAAE;cACA,SAAS,YAAY;AACrB,kBAAE,SAAS,CAAC,WAAW;AACvB,kBAAE,IAAI,IAAI,EAAE,CAAC,WAAW,EAAE;AAEhC,QAAA,MAAM,IAAI,GAAG;YACX,IAAI;YACJ,MAAM;YACN,QAAQ;YACR,SAAS;YACT,QAAQ;AACR,YAAA,SAAS,EAAE,cAAc;SAC1B;AAED,QAAA,MAAM,QAAQ,GAAG,MAAM,IAAI,CAAC,OAAO,CAA4C;AAC7E,YAAA,MAAM,EAAE,MAAM;AACd,YAAA,IAAI,EAAE,QAAQ;YACd,IAAI;AACL,SAAA,CAAC;AAEF,QAAA,MAAM,aAAa,GAA4B;YAC7C,KAAK,EAAE,QAAQ,CAAC,KAAK;SACtB;AAED,QAAA,IAAI,OAAO,CAAC,KAAK,EAAE;AACjB,YAAA,aAAa,CAAC,QAAQ,GAAG,QAAQ;QACnC;AAEA,QAAA,OAAO,aAAa;IACtB;AACD;;ACjDD;AACA,MAAM,SAAS,CAAA;AACb;;;;AAIG;AACH,IAAA,aAAa,cAAc,CAAC,MAAiC,EAAA;AAC3D,QAAA,MAAM,OAAO,GAAG,MAAM,CAAC,GAAG,EAAE;QAE5B,MAAM,EAAE,KAAK,EAAE,MAAM,EAAE,OAAO,EAAE,IAAI,EAAE,GAAG,MAAM;AAE/C,QAAA,MAAM,QAAQ,GAAG,MAAM,IAAI,CAAC,OAAO,CAAyC;AAC1E,YAAA,MAAM,EAAE,KAAK;AACb,YAAA,IAAI,EAAE,iBAAiB;AACvB,YAAA,IAAI,EAAE;gBACJ,KAAK;gBACL,MAAM;gBACN,OAAO;gBACP,IAAI;AACL,aAAA;AACF,SAAA,CAAC;AAEF,QAAA,MAAM,iBAAiB,GAAyB;YAC9C,SAAS,EAAE,QAAQ,CAAC,SAAS;SAC9B;AAED,QAAA,IAAI,OAAO,CAAC,KAAK,EAAE;AACjB,YAAA,iBAAiB,CAAC,QAAQ,GAAG,QAAQ;QACvC;AAEA,QAAA,OAAO,iBAAiB;IAC1B;AAEA;;;;AAIG;AACH,IAAA,aAAa,cAAc,CAAC,MAAiC,EAAA;AAC3D,QAAA,MAAM,OAAO,GAAG,MAAM,CAAC,GAAG,EAAE;AAE5B,QAAA,MAAM,EAAE,MAAM,EAAE,GAAG,MAAM;AACzB,QAAA,IAAI,EAAE,QAAQ,EAAE,SAAS,EAAE,GAAG,MAAM;AAEpC,QAAA,IAAI,CAAC,QAAQ,IAAI,CAAC,SAAS,EAAE;AAC3B,YAAA,MAAM,QAAQ,GAAG,MAAM,SAAS,CAAC,kBAAkB,EAAE;AACrD,YAAA,QAAQ,GAAG,QAAQ,CAAC,QAAQ;AAC5B,YAAA,SAAS,GAAG,QAAQ,CAAC,SAAS;QAChC;AAEA,QAAA,MAAM,QAAQ,GAAG,MAAM,IAAI,CAAC,OAAO,CAAyC;AAC1E,YAAA,MAAM,EAAE,KAAK;AACb,YAAA,IAAI,EAAE,iBAAiB;AACvB,YAAA,IAAI,EAAE;AACJ,gBAAA,WAAW,EAAE,CAAA,EAAG,QAAQ,CAAA,CAAA,EAAI,SAAS,CAAA,CAAE;gBACvC,MAAM;AACP,aAAA;AACF,SAAA,CAAC;AAEF,QAAA,MAAM,iBAAiB,GAAyB;YAC9C,SAAS,EAAE,QAAQ,CAAC,SAAS;SAC9B;AAED,QAAA,IAAI,OAAO,CAAC,KAAK,EAAE;AACjB,YAAA,iBAAiB,CAAC,QAAQ,GAAG,QAAQ;QACvC;AAEA,QAAA,OAAO,iBAAiB;IAC1B;AAEA;;;AAGG;IACH,aAAa,SAAS,GAAA;AACpB,QAAA,MAAM,OAAO,GAAG,MAAM,CAAC,GAAG,EAAE;AAE5B,QAAA,MAAM,QAAQ,GAAG,MAAM,IAAI,CAAC,OAAO,CAA2C;AAC5E,YAAA,MAAM,EAAE,KAAK;AACb,YAAA,IAAI,EAAE,YAAY;AACnB,SAAA,CAAC;AAEF,QAAA,MAAM,YAAY,GAA2B;YAC3C,EAAE,EAAE,QAAQ,CAAC,EAAE;YACf,OAAO,EAAE,QAAQ,CAAC,OAAO;YACzB,KAAK,EAAE,QAAQ,CAAC,KAAK;SACtB;AAED,QAAA,IAAI,OAAO,CAAC,KAAK,EAAE;AACjB,YAAA,YAAY,CAAC,QAAQ,GAAG,QAAQ;QAClC;AAEA,QAAA,OAAO,YAAY;IACrB;AACD;;ACpGD;AACA,MAAM,UAAU,CAAA;AACd;;;;AAIG;AACH,IAAA,aAAa,QAAQ,CAAC,MAA2B,EAAA;AAC/C,QAAA,MAAM,OAAO,GAAG,MAAM,CAAC,GAAG,EAAE;QAE5B,MAAM,EAAE,KAAK,EAAE,QAAQ,EAAE,cAAc,EAAE,GAAG,MAAM;QAClD,IAAI,EAAE,MAAM,EAAE,WAAW,EAAE,KAAK,EAAE,KAAK,EAAE,GAAG,MAAM;;QAGlD,IAAI,CAAC,MAAM,EAAE;YACX,MAAM,EAAE,QAAQ,EAAE,SAAS,EAAE,GAAG,MAAM,SAAS,CAAC,kBAAkB,EAAE;AACpE,YAAA,MAAM,GAAG,CAAA,EAAG,QAAQ,CAAA,CAAA,EAAI,SAAS,EAAE;QACrC;AAAO,aAAA,IAAI,OAAO,MAAM,KAAK,QAAQ,EAAE;;AAErC,YAAA,MAAM,EAAE,QAAQ,EAAE,SAAS,EAAE,GAAG,MAAM;AACtC,YAAA,MAAM,GAAG,CAAA,EAAG,QAAQ,CAAA,CAAA,EAAI,SAAS,EAAE;QACrC;AAEA,QAAA,IAAI,OAAO,WAAW,KAAK,QAAQ,EAAE;AACnC,YAAA,MAAM,EAAE,QAAQ,EAAE,SAAS,EAAE,GAAG,WAAW;AAC3C,YAAA,WAAW,GAAG,CAAA,EAAG,QAAQ,CAAA,CAAA,EAAI,SAAS,EAAE;QAC1C;AAEA,QAAA,IAAI,KAAK,CAAC,OAAO,CAAC,KAAK,CAAC,EAAE;AACxB,YAAA,KAAK,GAAG,KAAK,CAAC,IAAI,CAAC,GAAG,CAAC;QACzB;AAEA,QAAA,IAAI,KAAK,CAAC,OAAO,CAAC,KAAK,CAAC,EAAE;AACxB,YAAA,KAAK,GAAG,KAAK,CAAC,IAAI,CAAC,GAAG,CAAC;QACzB;AAEA,QAAA,MAAM,QAAQ,GAAG,MAAM,IAAI,CAAC,OAAO,CAAuC;AACxE,YAAA,MAAM,EAAE,KAAK;AACb,YAAA,IAAI,EAAE,gBAAgB;AACtB,YAAA,IAAI,EAAE;gBACJ,MAAM;gBACN,WAAW;gBACX,KAAK;gBACL,KAAK;gBACL,QAAQ;gBACR,cAAc;gBACd,KAAK;AACN,aAAA;AACF,SAAA,CAAC;AAEF,QAAA,MAAM,WAAW,GAAuB;YACtC,MAAM,EAAE,QAAQ,CAAC,MAAM;SACxB;AAED,QAAA,IAAI,OAAO,CAAC,KAAK,EAAE;AACjB,YAAA,WAAW,CAAC,QAAQ,GAAG,QAAQ;QACjC;AAEA,QAAA,OAAO,WAAW;IACpB;AAEA;;;;AAIG;AACH,IAAA,aAAa,MAAM,CAAC,MAAyB,EAAA;AAC3C,QAAA,MAAM,OAAO,GAAG,MAAM,CAAC,GAAG,EAAE;AAE5B,QAAA,MAAM,EAAE,IAAI,EAAE,KAAK,EAAE,GAAG,MAAM;QAC9B,IAAI,EAAE,OAAO,EAAE,YAAY,EAAE,KAAK,EAAE,GAAG,MAAM;;QAG7C,IAAI,CAAC,OAAO,EAAE;YACZ,MAAM,EAAE,QAAQ,EAAE,SAAS,EAAE,GAAG,MAAM,SAAS,CAAC,kBAAkB,EAAE;YACpE,MAAM,aAAa,GAAG,EAAE;AACxB,YAAA,KAAK,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,YAAY,CAAC,MAAM,EAAE,CAAC,EAAE,EAAE;gBAC5C,aAAa,CAAC,IAAI,CAAC,CAAA,EAAG,QAAQ,CAAA,CAAA,EAAI,SAAS,CAAA,CAAE,CAAC;YAChD;AACA,YAAA,OAAO,GAAG,aAAa,CAAC,IAAI,CAAC,GAAG,CAAC;QACnC;AAAO,aAAA,IAAI,KAAK,CAAC,OAAO,CAAC,OAAO,CAAC,EAAE;;YAEjC,OAAO,GAAG,OAAO,CAAC,GAAG,CAAC,CAAC,QAAQ,KAAK,CAAA,EAAG,QAAQ,CAAC,QAAQ,CAAA,CAAA,EAAI,QAAQ,CAAC,SAAS,CAAA,CAAE,CAAC,CAAC,IAAI,CAAC,GAAG,CAAC;QAC7F;;AAGA,QAAA,IAAI,KAAK,CAAC,OAAO,CAAC,YAAY,CAAC,EAAE;YAC/B,YAAY,GAAG,YAAY,CAAC,GAAG,CAAC,CAAC,QAAQ,KAAK,CAAA,EAAG,QAAQ,CAAC,QAAQ,CAAA,CAAA,EAAI,QAAQ,CAAC,SAAS,CAAA,CAAE,CAAC,CAAC,IAAI,CAAC,GAAG,CAAC;QACvG;AAEA,QAAA,IAAI,KAAK,CAAC,OAAO,CAAC,KAAK,CAAC,EAAE;AACxB,YAAA,KAAK,GAAG,KAAK,CAAC,IAAI,CAAC,GAAG,CAAC;QACzB;AAEA,QAAA,MAAM,QAAQ,GAAG,MAAM,IAAI,CAAC,OAAO,CAAwC;AACzE,YAAA,MAAM,EAAE,KAAK;AACb,YAAA,IAAI,EAAE,cAAc;AACpB,YAAA,IAAI,EAAE;gBACJ,OAAO;gBACP,YAAY;gBACZ,IAAI;gBACJ,KAAK;gBACL,KAAK;AACN,aAAA;AACF,SAAA,CAAC;AAEF,QAAA,MAAM,SAAS,GAAwB;YACrC,OAAO,EAAE,QAAQ,CAAC,OAAO;YACzB,YAAY,EAAE,QAAQ,CAAC,YAAY;YACnC,MAAM,EAAE,QAAQ,CAAC,MAAM;SACxB;AAED,QAAA,IAAI,OAAO,CAAC,KAAK,EAAE;AACjB,YAAA,SAAS,CAAC,QAAQ,GAAG,QAAQ;QAC/B;AAEA,QAAA,OAAO,SAAS;IAClB;AACD;;AC/GD;AACA,MAAM,SAAS,CAAA;AACb;;;;;AAKG;AACH,IAAA,aAAa,YAAY,CAAC,MAA+B,EAAE,SAAkB,EAAA;AAC3E,QAAA,MAAM,OAAO,GAAG,MAAM,CAAC,GAAG,EAAE;AAE5B,QAAA,MAAM,EAAE,KAAK,EAAE,KAAK,EAAE,MAAM,EAAE,WAAW,EAAE,WAAW,EAAE,QAAQ,EAAE,IAAI,EAAE,UAAU,EAAE,GAAG,MAAM;AAC7F,QAAA,IAAI,EAAE,IAAI,EAAE,GAAG,MAAM;;;AAIrB,QAAA,IAAI,IAAI,IAAI,OAAO,IAAI,KAAK,QAAQ,EAAE;YACpC,IAAI,IAAI,CAAC,QAAQ,IAAI,IAAI,CAAC,SAAS,EAAE;gBACnC,IAAI,GAAG,CAAA,EAAG,IAAI,CAAC,QAAQ,IAAI,IAAI,CAAC,SAAS,CAAA,CAAE;YAC7C;QACF;AAEA,QAAA,MAAM,QAAQ,GAAG,MAAM,IAAI,CAAC,OAAO,CAA8C;AAC/E,YAAA,MAAM,EAAE,KAAK;AACb,YAAA,IAAI,EAAE,qBAAqB;AAC3B,YAAA,IAAI,EAAE;gBACJ,KAAK;gBACL,IAAI;gBACJ,KAAK;gBACL,MAAM;gBACN,WAAW;gBACX,WAAW;gBACX,QAAQ;gBACR,IAAI;gBACJ,UAAU;AACX,aAAA;YACD,SAAS;AACV,SAAA,CAAC;AAEF,QAAA,MAAM,eAAe,GAA8B;YACjD,SAAS,EAAE,QAAQ,CAAC,SAAS;SAC9B;AAED,QAAA,IAAI,OAAO,CAAC,KAAK,EAAE;AACjB,YAAA,eAAe,CAAC,QAAQ,GAAG,QAAQ;QACrC;AAEA,QAAA,OAAO,eAAe;IACxB;AAEA;;;;AAIG;AACH,IAAA,aAAa,eAAe,CAAC,MAAkC,EAAA;AAC7D,QAAA,MAAM,OAAO,GAAG,MAAM,CAAC,GAAG,EAAE;QAE5B,MAAM,EAAE,MAAM,EAAE,QAAQ,EAAE,KAAK,EAAE,eAAe,EAAE,GAAG,MAAM;AAC3D,QAAA,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,GAAG,MAAM;;QAG3B,IAAI,CAAC,IAAI,EAAE;YACT,MAAM,EAAE,QAAQ,EAAE,SAAS,EAAE,GAAG,MAAM,SAAS,CAAC,kBAAkB,EAAE;AACpE,YAAA,IAAI,GAAG,CAAA,EAAG,QAAQ,CAAA,CAAA,EAAI,SAAS,EAAE;QACnC;AAAO,aAAA,IAAI,OAAO,IAAI,KAAK,QAAQ,EAAE;;AAEnC,YAAA,MAAM,EAAE,QAAQ,EAAE,SAAS,EAAE,GAAG,IAAI;AACpC,YAAA,IAAI,GAAG,CAAA,EAAG,QAAQ,CAAA,CAAA,EAAI,SAAS,EAAE;QACnC;;AAGA,QAAA,IAAI,KAAK,CAAC,OAAO,CAAC,IAAI,CAAC,EAAE;AACvB,YAAA,IAAI,GAAG,IAAI,CAAC,IAAI,CAAC,GAAG,CAAC;QACvB;AAEA,QAAA,MAAM,QAAQ,GAAG,MAAM,IAAI,CAAC,OAAO,CAAiD;AAClF,YAAA,MAAM,EAAE,KAAK;AACb,YAAA,IAAI,EAAE,kBAAkB;AACxB,YAAA,IAAI,EAAE;gBACJ,IAAI;gBACJ,MAAM;gBACN,IAAI;gBACJ,QAAQ;gBACR,KAAK;gBACL,eAAe;AAChB,aAAA;AACF,SAAA,CAAC;AAEF,QAAA,MAAM,kBAAkB,GAAiC;YACvD,SAAS,EAAE,QAAQ,CAAC,SAAS;SAC9B;AAED,QAAA,IAAI,OAAO,CAAC,KAAK,EAAE;AACjB,YAAA,kBAAkB,CAAC,QAAQ,GAAG,QAAQ;QACxC;AAEA,QAAA,OAAO,kBAAkB;IAC3B;AAEA;;;;AAIG;AACH,IAAA,aAAa,YAAY,CAAC,MAA+B,EAAA;AACvD,QAAA,MAAM,OAAO,GAAG,MAAM,CAAC,GAAG,EAAE;AAE5B,QAAA,MAAM,EAAE,MAAM,EAAE,KAAK,EAAE,GAAG,MAAM;QAChC,IAAI,EAAE,IAAI,EAAE,MAAM,EAAE,UAAU,EAAE,MAAM,EAAE,GAAG,MAAM;;QAGjD,IAAI,CAAC,IAAI,EAAE;YACT,MAAM,EAAE,QAAQ,EAAE,SAAS,EAAE,GAAG,MAAM,SAAS,CAAC,kBAAkB,EAAE;AACpE,YAAA,IAAI,GAAG,CAAA,EAAG,QAAQ,CAAA,CAAA,EAAI,SAAS,EAAE;QACnC;AAAO,aAAA,IAAI,OAAO,IAAI,KAAK,QAAQ,EAAE;;AAEnC,YAAA,MAAM,EAAE,QAAQ,EAAE,SAAS,EAAE,GAAG,IAAI;AACpC,YAAA,IAAI,GAAG,CAAA,EAAG,QAAQ,CAAA,CAAA,EAAI,SAAS,EAAE;QACnC;;AAGA,QAAA,IAAI,KAAK,CAAC,OAAO,CAAC,MAAM,CAAC,EAAE;AACzB,YAAA,MAAM,GAAG,MAAM,CAAC,IAAI,CAAC,GAAG,CAAC;QAC3B;AACA,QAAA,IAAI,KAAK,CAAC,OAAO,CAAC,UAAU,CAAC,EAAE;AAC7B,YAAA,UAAU,GAAG,UAAU,CAAC,IAAI,CAAC,GAAG,CAAC;QACnC;AACA,QAAA,IAAI,KAAK,CAAC,OAAO,CAAC,MAAM,CAAC,EAAE;AACzB,YAAA,MAAM,GAAG,MAAM,CAAC,IAAI,CAAC,GAAG,CAAC;QAC3B;AAEA,QAAA,MAAM,QAAQ,GAAG,MAAM,IAAI,CAAC,OAAO,CAA8C;AAC/E,YAAA,MAAM,EAAE,KAAK;AACb,YAAA,IAAI,EAAE,eAAe;AACrB,YAAA,IAAI,EAAE;gBACJ,IAAI;gBACJ,MAAM;gBACN,MAAM;gBACN,UAAU;gBACV,MAAM;gBACN,KAAK;AACN,aAAA;AACF,SAAA,CAAC;AAEF,QAAA,MAAM,cAAc,GAA8B;YAChD,MAAM,EAAE,QAAQ,CAAC,MAAM;SACxB;AAED,QAAA,IAAI,OAAO,CAAC,KAAK,EAAE;AACjB,YAAA,cAAc,CAAC,QAAQ,GAAG,QAAQ;QACpC;AAEA,QAAA,OAAO,cAAc;IACvB;AACD;;ACjKD;AACA,MAAM,WAAW,GAAG,CAAC,IAAS,KAC5B,IAAI,IAAI,MAAM,CAAC,SAAS,CAAC,QAAQ,CAAC,IAAI,CAAC,IAAI,CAAC,KAAK,eAAe,IAAI,CAAC,KAAK,CAAC,IAAI,CAAC;AAElF;AACA,MAAM,QAAQ,CAAA;;IAEZ,OAAO,cAAc,CAAC,WAA8B,EAAA;QAClD,IAAI,CAAC,WAAW,EAAE;YAChB,QAAQ,CAAC,gBAAgB,EAAE;YAC3B;QACF;QACA,MAAM,iBAAiB,GAAG,IAAI,CAAC,SAAS,CAAC,WAAW,CAAC;AACrD,QAAA,MAAM,CAAC,KAAK,CAAC,wBAAwB,iBAAiB,CAAA,CAAE,CAAC;QACzD,OAAO,CAAC,OAAO,CAAC,OAAO,CAAC,YAAY,EAAE,iBAAiB,CAAC;IAC1D;;AAGA,IAAA,OAAO,cAAc,GAAA;QACnB,IAAI,WAAW,GAAG,OAAO,CAAC,OAAO,CAAC,OAAO,CAAC,YAAY,CAAC;QACvD,IAAI,WAAW,EAAE;AACf,YAAA,WAAW,GAAG,IAAI,CAAC,KAAK,CAAC,WAAW,CAAC;QACvC;AACA,QAAA,OAAO,WAA+B;IACxC;;AAGA,IAAA,OAAO,gBAAgB,GAAA;AACrB,QAAA,OAAO,CAAC,UAAU,CAAC,OAAO,CAAC,YAAY,CAAC;IAC1C;AAEA;;;;AAIG;AACH,IAAA,aAAa,SAAS,CAAC,WAA6B,EAAA;AAClD,QAAA,MAAM,OAAO,GAAG,MAAM,CAAC,GAAG,EAAE;AAC5B,QAAA,WAAW,GAAG,WAAW,IAAI,QAAQ,CAAC,cAAc,EAAE;QAEtD,IAAI,CAAC,WAAW,EAAE;AAChB,YAAA,MAAM,CAAC,IAAI,CAAC,8CAA8C,CAAC;QAC7D;AAEA,QAAA,MAAM,MAAM,GAAG,WAAW,CAAC,MAAM,IAAI,OAAO,CAAC,OAAO,CAAC,OAAO,CAAC,OAAO,CAAC;AACrE,QAAA,IAAI,MAAM,IAAI,MAAM,KAAK,OAAO,CAAC,OAAO,CAAC,OAAO,CAAC,OAAO,CAAC,EAAE;;YAEzD,OAAO,CAAC,OAAO,CAAC,OAAO,CAAC,OAAO,EAAE,MAAM,CAAC;QAC1C;AAEA,QAAA,MAAM,EACJ,UAAU,EACV,sBAAsB,EACtB,6BAA6B,EAC7B,IAAI,EACJ,QAAQ,EACR,oBAAoB,EACpB,kBAAkB,GACnB,GAAG,WAAW;QAEf,IAAI,kBAAkB,IAAI,CAAC,WAAW,CAAC,kBAAkB,CAAC,EAAE;AAC1D,YAAA,MAAM,CAAC,IAAI,CAAC,4CAA4C,CAAC;QAC3D;AAEA,QAAA,MAAM,IAAI,GAAG;YACX,MAAM;YACN,UAAU;YACV,sBAAsB;YACtB,6BAA6B;YAC7B,IAAI;YACJ,QAAQ;YACR,oBAAoB;AACpB,YAAA,kBAAkB,EAAE,WAAW,CAAC,kBAAkB,CAAC,GAAG,kBAAmB,CAAC,MAAM,EAAE,GAAG,SAAS;SAC/F;AAED,QAAA,MAAM,QAAQ,GAAG,MAAM,IAAI,CAAC,OAAO,CAAsC;AACvE,YAAA,MAAM,EAAE,MAAM;AACd,YAAA,IAAI,EAAE,OAAO;YACb,IAAI;AACL,SAAA,CAAC;;AAGF,QAAA,QAAQ,CAAC,cAAc,CAAC,WAAW,CAAC;AAEpC,QAAA,MAAM,OAAO,GAAsB;YACjC,IAAI,EAAE,QAAQ,CAAC,IAAI;YACnB,MAAM,EAAE,QAAQ,CAAC,MAAM;SACxB;AAED,QAAA,IAAI,OAAO,CAAC,KAAK,EAAE;AACjB,YAAA,OAAO,CAAC,QAAQ,GAAG,QAAQ;QAC7B;AAEA,QAAA,OAAO,OAAO;IAChB;AAEA;;;;;AAKG;AACH,IAAA,aAAa,UAAU,CAAC,WAA6B,EAAE,MAAwB,EAAA;AAC7E,QAAA,MAAM,OAAO,GAAG,MAAM,CAAC,GAAG,EAAE;AAC5B,QAAA,WAAW,GAAG,WAAW,IAAI,QAAQ,CAAC,cAAc,EAAE;QAEtD,IAAI,CAAC,WAAW,EAAE;AAChB,YAAA,MAAM,CAAC,IAAI,CAAC,8CAA8C,CAAC;QAC7D;AAEA,QAAA,MAAM,EACJ,UAAU,EACV,sBAAsB,EACtB,6BAA6B,EAC7B,IAAI,EACJ,QAAQ,EACR,oBAAoB,EACpB,kBAAkB,GACnB,GAAG,WAAW;QAEf,IAAI,kBAAkB,IAAI,CAAC,WAAW,CAAC,kBAAkB,CAAC,EAAE;AAC1D,YAAA,MAAM,CAAC,IAAI,CAAC,4CAA4C,CAAC;QAC3D;AAEA,QAAA,MAAM,IAAI,GAAG;YACX,MAAM;YACN,UAAU;YACV,sBAAsB;YACtB,6BAA6B;YAC7B,IAAI;YACJ,QAAQ;YACR,oBAAoB;AACpB,YAAA,kBAAkB,EAAE,WAAW,CAAC,kBAAkB,CAAC,GAAG,kBAAmB,CAAC,MAAM,EAAE,GAAG,SAAS;SAC/F;AAED,QAAA,MAAM,QAAQ,GAAG,MAAM,IAAI,CAAC,OAAO,CAAsC;AACvE,YAAA,MAAM,EAAE,OAAO;YACf,IAAI,EAAE,CAAA,MAAA,EAAS,UAAU,CAAA,OAAA,CAAS;YAClC,IAAI;AACL,SAAA,CAAC;AAEF,QAAA,MAAM,OAAO,GAAsB;YACjC,IAAI,EAAE,QAAQ,CAAC,IAAI;YACnB,MAAM,EAAE,QAAQ,CAAC,MAAM;SACxB;AAED,QAAA,IAAI,OAAO,CAAC,KAAK,EAAE;AACjB,YAAA,OAAO,CAAC,QAAQ,GAAG,QAAQ;QAC7B;AAEA,QAAA,OAAO,OAAO;IAChB;;IAGA,aAAa,YAAY,GAAA;AACvB,QAAA,MAAM,WAAW,GAAG,QAAQ,CAAC,cAAc,EAAE;QAC7C,MAAM,YAAY,GAAG,MAAM,QAAQ,CAAC,UAAU,CAAC,WAAW,EAAE,WAAW,CAAC;;QAGxE,QAAQ,CAAC,gBAAgB,EAAE;AAE3B,QAAA,OAAO,YAAY;IACrB;;IAGA,aAAa,UAAU,GAAA;AACrB,QAAA,MAAM,WAAW,GAAG,QAAQ,CAAC,cAAc,EAAE;QAC7C,MAAM,YAAY,GAAG,MAAM,QAAQ,CAAC,UAAU,CAAC,WAAW,EAAE,UAAU,CAAC;;QAGvE,QAAQ,CAAC,gBAAgB,EAAE;AAE3B,QAAA,OAAO,YAAY;IACrB;AACD;;ACzKD;AACA,MAAM,QAAQ,CAAA;AACZ;;;;AAIG;AACH,IAAA,aAAa,SAAS,CAAC,MAAwB,EAAA;AAC7C,QAAA,MAAM,OAAO,GAAG,MAAM,CAAC,GAAG,EAAE;AAE5B,QAAA,MAAM,EAAE,eAAe,EAAE,GAAG,MAAM;QAClC,IAAI,EAAE,QAAQ,EAAE,SAAS,EAAE,QAAQ,EAAE,GAAG,MAAM;;;AAI9C,QAAA,IAAI,CAAC,QAAQ,IAAI,CAAC,SAAS,EAAE;YAC3B,MAAM,cAAc,GAAG,MAAM,SAAS,CAAC,kBAAkB,CAAC,EAAE,eAAe,EAAE,CAAC;AAC9E,YAAA,QAAQ,GAAG,cAAc,CAAC,QAAQ;AAClC,YAAA,SAAS,GAAG,cAAc,CAAC,SAAS;AACpC,YAAA,QAAQ,GAAG,cAAc,CAAC,QAAQ;QACpC;;AAGA,QAAA,MAAM,qBAAqB,GAAG,MAAM,SAAS,CAAC,mBAAmB,EAAE;;AAGnE,QAAA,MAAM,MAAM,GAAG,MAAM,CAAC,MAAM,IAAI,OAAO,CAAC,OAAO,CAAC,OAAO,CAAC,OAAO,CAAC;QAChE,MAAM,QAAQ,GAAG,MAAM,CAAC,QAAQ,IAAI,MAAM,CAAC,WAAW,EAAE;QACxD,MAAM,SAAS,GAAG,MAAM,CAAC,SAAS,IAAI,MAAM,CAAC,YAAY,EAAE;AAC3D,QAAA,MAAM,SAAS,GAAG,OAAO,CAAC,YAAY,EAAE;AACxC,QAAA,MAAM,UAAU,GAAG,MAAM,CAAC,UAAU,IAAI,KAAK;AAC7C,QAAA,MAAM,WAAW,GAAG,MAAM,CAAC,WAAW,IAAI,OAAO,CAAC,OAAO,CAAC,OAAO,CAAC,WAAW,CAAC;;QAG9E,IAAI,CAAC,MAAM,EAAE;AACX,YAAA,MAAM,CAAC,IAAI,CAAC,oCAAoC,CAAC;QACnD;aAAO;YACL,OAAO,CAAC,OAAO,CAAC,OAAO,CAAC,OAAO,EAAE,MAAM,CAAC;QAC1C;;AAGA,QAAA,MAAM,QAAQ,GAAG,MAAM,CAAC,QAAQ,IAAI,OAAO,CAAC,OAAO,CAAC,OAAO,CAAC,QAAQ,CAAC;;QAGrE,MAAM,WAAW,GAAG,MAAM,CAAC,WAAW,IAAI,QAAQ,CAAC,cAAc,EAAE;QACnE,IAAI,WAAW,EAAE;AACf,YAAA,WAAW,CAAC,OAAO,GAAG,GAAG;QAC3B;AAEA,QAAA,MAAM,IAAI,GAAG;AACX,YAAA,GAAG,MAAM;YACT,qBAAqB;YACrB,QAAQ;YACR,WAAW;YACX,QAAQ;YACR,UAAU;AACV,YAAA,UAAU,EAAE,IAAI;YAChB,SAAS;YACT,SAAS;YACT,QAAQ;YACR,SAAS;YACT,QAAQ;AACR,YAAA,UAAU,EAAE,WAAW;AACvB,YAAA,OAAO,EAAE,IAAI;YACb,MAAM;YACN,WAAW;SACZ;AAED,QAAA,MAAM,QAAQ,GAAG,MAAM,IAAI,CAAC,OAAO,CAAoD;AACrF,YAAA,MAAM,EAAE,MAAM;AACd,YAAA,IAAI,EAAE,OAAO;AACb,YAAA,IAAI,EAAE,IAAI;AACX,SAAA,CAAC;AAEF,QAAA,MAAM,EAAE,IAAI,EAAE,MAAM,EAAE,GAAG,QAAQ;QACjC,MAAM,QAAQ,GAAG,EAAE,QAAQ,EAAE,SAAS,EAAE,QAAQ,EAAE;AAElD,QAAA,MAAM,QAAQ,GAAuB;YACnC,IAAI;YACJ,MAAM;YACN,QAAQ;SACT;AAED,QAAA,IAAI,OAAO,CAAC,KAAK,EAAE;AACjB,YAAA,QAAQ,CAAC,QAAQ,GAAG,QAAQ;QAC9B;AAEA,QAAA,OAAO,QAAQ;IACjB;AACD;;ACjDD,MAAM,WAAW,GAAG,CAAC,GAAW,KAAc,GAAG,CAAC,QAAQ,CAAC,MAAM,CAAC;AAClE,MAAM,SAAS,GAAG,CAAC,GAAW,KAAc,GAAG,CAAC,QAAQ,CAAC,QAAQ,CAAC;AAElE;;;;;;;;AAQG;AACH,MAAM,KAAK,CAAA;;AAMF,IAAA,WAAW,OAAO,GAAA;AACvB,QAAA,OAAO,WAAW;IACpB;;AAGO,IAAA,OAAO,cAAc,CAAC,GAAG,OAAsB,EAAA;AACpD,QAAA,MAAM,GAAG,GAAG,KAAK,CAAC,iBAAiB,EAAE;AACrC,QAAA,KAAK,MAAM,MAAM,IAAI,OAAO,EAAE;YAC5B,IAAI,KAAK,CAAC,QAAQ,CAAC,GAAG,CAAC,MAAM,CAAC,IAAI,CAAC,EAAE;gBACnC,MAAM,CAAC,IAAI,CAAC,CAAA,QAAA,EAAW,MAAM,CAAC,IAAI,CAAA,qBAAA,CAAuB,CAAC;gBAC1D;YACF;AAEA,YAAA,MAAM,CAAC,OAAO,CAAC,GAAG,CAAC;YACnB,KAAK,CAAC,QAAQ,CAAC,GAAG,CAAC,MAAM,CAAC,IAAI,EAAE,MAAM,CAAC;QACzC;IACF;AAEQ,IAAA,OAAO,iBAAiB,GAAA;QAC9B,OAAO;AACL,YAAA,KAAK,EAAE,KAAoB;YAC3B,MAAM;YACN,IAAI;YACJ,OAAO;YACP,MAAM;YACN,OAAO;YACP,MAAM;YACN,SAAS;AACT,YAAA,IAAI,EAAE;AACJ,gBAAA,SAAS,EAAE,YAAY;AACvB,gBAAA,MAAM,EAAE,SAAS;AACjB,gBAAA,OAAO,EAAE,UAAU;AACnB,gBAAA,WAAW,EAAE,cAAc;AAC3B,gBAAA,SAAS,EAAEA,SAAY;AACvB,gBAAA,OAAO,EAAE,UAAU;AACnB,gBAAA,MAAM,EAAE,SAAS;AACjB,gBAAA,KAAK,EAAE,QAAQ;AACf,gBAAA,KAAK,EAAE,QAAQ;AAChB,aAAA;SACF;IACH;AAEA;;;;;AAKG;AACI,IAAA,OAAO,UAAU,CAAC,cAAsB,EAAE,UAAwB,EAAE,EAAA;QACzE,IAAI,CAAC,cAAc,EAAE;AACnB,YAAA,MAAM,IAAI,wBAAwB,CAAC,6CAA6C,CAAC;QACnF;AAEA,QAAA,IAAI,WAAW,CAAC,cAAc,CAAC,EAAE;AAC/B,YAAA,MAAM,IAAI,wBAAwB,CAAC,qEAAqE,CAAC;QAC3G;;AAGA,QAAA,MAAM,IAAI,GAAG,SAAS,CAAC,cAAc,CAAC;QACtC,MAAM,QAAQ,GAAG,IAAI,GAAG,OAAO,GAAG,MAAM;AACxC,QAAA,MAAM,KAAK,GAAG,CAAC,IAAI;QACnB,MAAM,YAAY,GAAG,MAAM,CAAC,MAAM,CAChC,MAAM,CAAC,cAAc,EACrB;YACE,cAAc;YACd,IAAI;YACJ,QAAQ;YACR,KAAK;SACN,EACD,OAAO,CACR;AACD,QAAA,MAAM,CAAC,KAAK,CAAC,YAAY,CAAC;AAE1B,QAAA,MAAM,CAAC,IAAI,CAAC,CAAA,iBAAA,EAAoB,IAAI,GAAG,MAAM,GAAG,MAAM,CAAA,gBAAA,CAAkB,CAAC;AACzE,QAAA,IAAI,OAAO,CAAC,KAAK,EAAE;AACjB,YAAA,MAAM,CAAC,KAAK,CAAC,eAAe,EAAE,OAAO,CAAC;QACxC;;;AAIA,QAAA,IAAI,CAAC,MAAM,EAAE,cAAc,EAAE;YAC3B,SAAS,CAAC,SAAS,EAAE,CAAC,KAAK,CAAC,CAAC,GAAG,KAAI;gBAClC,MAAM,CAAC,IAAI,CAAC,CAAA,uBAAA,EAA0B,GAAG,CAAC,OAAO,CAAA,CAAE,CAAC;AACtD,YAAA,CAAC,CAAC;QACJ;IACF;;AAGO,IAAA,OAAO,KAAK,GAAA;QACjB,MAAM,CAAC,KAAK,EAAE;IAChB;;;;;IAOO,OAAO,SAAS,CAAC,MAAe,EAAA;QACrC,IAAI,CAAC,MAAM,EAAE;AACX,YAAA,OAAO,CAAC,UAAU,CAAC,OAAO,CAAC,OAAO,CAAC;YACnC;QACF;AACA,QAAA,OAAO,CAAC,OAAO,CAAC,OAAO,CAAC,OAAO,EAAE,MAAM,CAAC,MAAM,CAAC,CAAC,IAAI,EAAE,CAAC;IACzD;;IAGO,OAAO,cAAc,CAAC,WAAoB,EAAA;QAC/C,IAAI,CAAC,WAAW,EAAE;AAChB,YAAA,OAAO,CAAC,UAAU,CAAC,OAAO,CAAC,WAAW,CAAC;YACvC;QACF;AACA,QAAA,OAAO,CAAC,OAAO,CAAC,OAAO,CAAC,WAAW,EAAE,MAAM,CAAC,WAAW,CAAC,CAAC,IAAI,EAAE,CAAC;IAClE;;IAGO,OAAO,WAAW,CAAC,QAAwB,EAAA;QAChD,IAAI,CAAC,QAAQ,EAAE;AACb,YAAA,OAAO,CAAC,UAAU,CAAC,OAAO,CAAC,QAAQ,CAAC;YACpC;QACF;AACA,QAAA,OAAO,CAAC,OAAO,CAAC,OAAO,CAAC,QAAQ,EAAE,IAAI,CAAC,SAAS,CAAC,QAAQ,CAAC,CAAC;IAC7D;;AAGO,IAAA,OAAO,WAAW,GAAA;AACvB,QAAA,OAAO,SAAS,CAAC,kBAAkB,EAAE;IACvC;;AAGO,IAAA,OAAO,SAAS,CAAC,MAAA,GAA2B,EAAE,EAAA;AACnD,QAAA,IAAI;AACF,YAAA,OAAO,QAAQ,CAAC,SAAS,CAAC,MAAM,CAAC;QACnC;gBAAU;;YAER,SAAS,CAAC,SAAS,CAAC,MAAM,CAAC,CAAC,KAAK,CAAC,CAAC,GAAG,KAAI;gBACxC,MAAM,CAAC,IAAI,CAAC,CAAA,uBAAA,EAA0B,GAAG,CAAC,OAAO,CAAA,CAAE,CAAC;AACtD,YAAA,CAAC,CAAC;QACJ;IACF;;IAGO,OAAO,UAAU,CAAC,MAAgB,EAAA;AACvC,QAAA,OAAO,UAAU,CAAC,UAAU,CAAC,MAAM,CAAC;IACtC;;IAGO,OAAO,cAAc,CAAC,WAA8B,EAAA;AACzD,QAAA,QAAQ,CAAC,cAAc,CAAC,WAAW,CAAC;IACtC;;AAGO,IAAA,OAAO,gBAAgB,GAAA;QAC5B,QAAQ,CAAC,gBAAgB,EAAE;IAC7B;;AAGO,IAAA,OAAO,cAAc,GAAA;AAC1B,QAAA,OAAO,QAAQ,CAAC,cAAc,EAAE;IAClC;;IAGO,OAAO,SAAS,CAAC,WAA6B,EAAA;AACnD,QAAA,OAAO,QAAQ,CAAC,SAAS,CAAC,WAAW,CAAC;IACxC;;IAGO,OAAO,UAAU,CAAC,WAA6B,EAAA;AACpD,QAAA,OAAO,QAAQ,CAAC,UAAU,CAAC,WAAW,CAAC;IACzC;;AAGO,IAAA,OAAO,YAAY,GAAA;AACxB,QAAA,OAAO,QAAQ,CAAC,YAAY,EAAE;IAChC;;AAGO,IAAA,OAAO,UAAU,GAAA;AACtB,QAAA,OAAO,QAAQ,CAAC,UAAU,EAAE;IAC9B;;IAGO,OAAO,aAAa,CAAC,MAA6B,EAAA;AACvD,QAAA,OAAO,cAAc,CAAC,aAAa,CAAC,MAAM,CAAC;IAC7C;;IAGO,OAAO,UAAU,CAAC,OAAgB,EAAA;QACvC,IAAI,CAAC,OAAO,EAAE;AACZ,YAAA,OAAO,CAAC,UAAU,CAAC,OAAO,CAAC,OAAO,CAAC;YACnC;QACF;AACA,QAAA,OAAO,CAAC,OAAO,CAAC,OAAO,CAAC,OAAO,EAAE,MAAM,CAAC,OAAO,CAAC,CAAC,IAAI,EAAE,CAAC;IAC1D;;;;;IAOO,OAAO,OAAO,CAAC,QAAqC,EAAA;AACzD,QAAA,MAAM,CAAC,OAAO,CAAC,QAAQ,CAAC;IAC1B;;;;;IAOO,OAAO,cAAc,CAAC,MAAiC,EAAA;AAC5D,QAAA,OAAOA,SAAY,CAAC,cAAc,CAAC,MAAM,CAAC;IAC5C;;IAGO,OAAO,cAAc,CAAC,MAAiC,EAAA;AAC5D,QAAA,OAAOA,SAAY,CAAC,cAAc,CAAC,MAAM,CAAC;IAC5C;;AAGO,IAAA,OAAO,SAAS,GAAA;AACrB,QAAA,OAAOA,SAAY,CAAC,SAAS,EAAE;IACjC;;AAGO,IAAA,OAAO,YAAY,CAAC,MAA+B,EAAE,SAAkB,EAAA;QAC5E,OAAO,SAAS,CAAC,YAAY,CAAC,MAAM,EAAE,SAAS,CAAC;IAClD;;IAGO,OAAO,eAAe,CAAC,MAAkC,EAAA;AAC9D,QAAA,OAAO,SAAS,CAAC,eAAe,CAAC,MAAM,CAAC;IAC1C;;IAGO,OAAO,YAAY,CAAC,MAA+B,EAAA;AACxD,QAAA,OAAO,SAAS,CAAC,YAAY,CAAC,MAAM,CAAC;IACvC;;IAGO,OAAO,eAAe,CAAC,MAAkC,EAAA;AAC9D,QAAA,OAAO,YAAY,CAAC,eAAe,CAAC,MAAM,CAAC;IAC7C;;IAGO,OAAO,QAAQ,CAAC,MAA2B,EAAA;AAChD,QAAA,OAAO,UAAU,CAAC,QAAQ,CAAC,MAAM,CAAC;IACpC;;IAGO,OAAO,MAAM,CAAC,MAAyB,EAAA;AAC5C,QAAA,OAAO,UAAU,CAAC,MAAM,CAAC,MAAM,CAAC;IAClC;;AA/Pe,KAAA,CAAA,QAAQ,GAA6B,IAAI,GAAG,EAAE;AAE/C,KAAA,CAAA,MAAM,GAAG,MAAM;;;;"}
1
+ {"version":3,"file":"radar.js","sources":["../src/config.ts","../src/errors.ts","../src/logger.ts","../src/storage.ts","../src/navigator.ts","../src/version.ts","../src/http.ts","../src/api/addresses.ts","../src/device.ts","../src/session.ts","../src/api/config.ts","../src/api/context.ts","../src/api/conversions.ts","../src/api/geocoding.ts","../src/api/routing.ts","../src/api/search.ts","../src/api/trips.ts","../src/api/track.ts","../src/api.ts"],"sourcesContent":["import type { RadarError } from './errors';\nimport type { RadarOptions } from './types';\n\n/** global SDK configuration singleton */\nclass Config {\n /** current SDK options */\n static options: RadarOptions;\n /** registered error callback, if any */\n static errorCallback: ((error: RadarError) => void) | null = null;\n\n /** default option values applied during initialization */\n static defaultOptions = {\n live: false,\n logLevel: 'error',\n host: 'https://api.radar.io',\n version: 'v1',\n debug: false,\n };\n\n /** store SDK options (called by Radar.initialize) */\n public static setup(options: RadarOptions = {}) {\n Config.options = options;\n }\n\n /** get the current SDK options */\n public static get(): RadarOptions {\n return Config.options || {};\n }\n\n /** clear all SDK options and error callback */\n public static clear() {\n Config.options = {};\n Config.errorCallback = null;\n }\n\n /** register a callback invoked on SDK errors */\n public static onError(callback: (error: RadarError) => void) {\n Config.errorCallback = callback;\n }\n\n /** dispatch an error to the registered callback */\n public static sendError(error: any) {\n if (Config.errorCallback && error) {\n Config.errorCallback(error);\n }\n }\n}\n\nexport default Config;\n","import type { RadarResponse } from './http';\n\n/** base error class for all Radar SDK errors */\nexport abstract class RadarError extends Error {\n /** legacy status code string (e.g. `'ERROR_PUBLISHABLE_KEY'`) */\n public abstract readonly status: string;\n public abstract readonly name: string;\n\n constructor(message: string) {\n super(message);\n }\n}\n\n/** thrown when a publishable key is missing or invalid (e.g. secret key used) */\nexport class RadarPublishableKeyError extends RadarError {\n public override readonly name = 'RadarPublishableKeyError';\n public override readonly status = 'ERROR_PUBLISHABLE_KEY';\n\n constructor(message: string) {\n super(message);\n }\n}\n\n/** thrown when the device location cannot be determined */\nexport class RadarLocationError extends RadarError {\n public override readonly name = 'RadarLocationError';\n public override readonly status = 'ERROR_LOCATION';\n\n constructor(message: string) {\n super(message);\n }\n}\n\n/** thrown when location permissions are denied by the browser */\nexport class RadarPermissionsError extends RadarError {\n public override readonly name = 'RadarPermissionsError';\n public override readonly status = 'ERROR_PERMISSIONS';\n\n constructor(message: string) {\n super(message);\n }\n}\n\n/** thrown on HTTP 400 Bad Request responses */\nexport class RadarBadRequestError extends RadarError {\n public override readonly name = 'RadarBadRequestError';\n public override readonly status = 'ERROR_BAD_REQUEST';\n public readonly code = 400;\n public readonly response?: RadarResponse;\n\n constructor(response?: RadarResponse) {\n super(response?.meta?.message || 'Bad request.');\n\n this.response = response;\n }\n}\n\n/** thrown on HTTP 401 Unauthorized responses */\nexport class RadarUnauthorizedError extends RadarError {\n public override readonly name = 'RadarUnauthorizedError';\n public override readonly status = 'ERROR_UNAUTHORIZED';\n public readonly code = 401;\n public readonly response?: RadarResponse;\n\n constructor(response?: RadarResponse) {\n super(response?.meta?.message || 'Unauthorized.');\n\n this.response = response;\n }\n}\n\n/** thrown on HTTP 402 Payment Required responses */\nexport class RadarPaymentRequiredError extends RadarError {\n public override readonly name = 'RadarPaymentRequiredError';\n public override readonly status = 'ERROR_PAYMENT_REQUIRED';\n public readonly code = 402;\n public readonly response?: RadarResponse;\n\n constructor(response?: RadarResponse) {\n super(response?.meta?.message || 'Payment required.');\n\n this.response = response;\n }\n}\n\n/** thrown on HTTP 403 Forbidden responses */\nexport class RadarForbiddenError extends RadarError {\n public override readonly name = 'RadarForbiddenError';\n public override readonly status = 'ERROR_FORBIDDEN';\n public readonly code = 403;\n public readonly response?: RadarResponse;\n\n constructor(response?: RadarResponse) {\n super(response?.meta?.message || 'Forbidden.');\n\n this.response = response;\n }\n}\n\n/** thrown on HTTP 404 Not Found responses */\nexport class RadarNotFoundError extends RadarError {\n public override readonly name = 'RadarNotFoundError';\n public override readonly status = 'ERROR_NOT_FOUND';\n public readonly code = 404;\n public readonly response?: RadarResponse;\n\n constructor(response?: RadarResponse) {\n super(response?.meta?.message || 'Not found.');\n\n this.response = response;\n }\n}\n\n/** thrown on HTTP 429 Rate Limit responses */\nexport class RadarRateLimitError extends RadarError {\n public override readonly name = 'RadarRateLimitError';\n public override readonly status = 'ERROR_RATE_LIMIT';\n public readonly code = 429;\n public readonly response?: RadarResponse;\n /** rate limit type from the API response (e.g. `'hourly'`) */\n public readonly type?: string;\n\n constructor(response?: RadarResponse) {\n super(response?.meta?.message || 'Rate limit exceeded.');\n\n this.response = response;\n this.type = response?.meta?.type;\n }\n}\n\n/** thrown on HTTP 5xx server errors */\nexport class RadarServerError extends RadarError {\n public override readonly name = 'RadarServerError';\n public override readonly status = 'ERROR_SERVER';\n public readonly response?: RadarResponse;\n\n constructor(response?: RadarResponse) {\n super(response?.meta?.message || 'Internal server error.');\n\n this.response = response;\n }\n}\n\n/** thrown when a request times out or the network is unavailable */\nexport class RadarNetworkError extends RadarError {\n public override readonly name = 'RadarNetworkError';\n public override readonly status = 'ERROR_NETWORK';\n\n constructor() {\n super('Request timed out.');\n }\n}\n\n/** thrown for unexpected/unclassified errors */\nexport class RadarUnknownError extends RadarError {\n public override readonly name = 'RadarUnknownError';\n public override readonly status = 'ERROR_UNKNOWN';\n public readonly response?: RadarResponse;\n\n constructor(response?: RadarResponse) {\n super(response?.meta?.message || 'Something went wrong.');\n\n this.response = response;\n }\n}\n","import Config from './config';\n\nconst LOG_LEVELS = {\n none: 0,\n error: 1,\n warn: 2,\n info: 3,\n debug: 4,\n};\n\n// get the numeric level for logLevel option\nconst getLevel = (): number => {\n // disable logging in tests\n if (window && window.RADAR_TEST_ENV) {\n return LOG_LEVELS.none;\n }\n\n const { logLevel, debug } = Config.get();\n if (debug) {\n return LOG_LEVELS.debug;\n }\n if (logLevel) {\n return LOG_LEVELS[logLevel];\n }\n return LOG_LEVELS.error; // default to error-level logging if not set\n};\n\n/** leveled console logger controlled by SDK config */\nclass Logger {\n /** log a debug-level message (only when debug mode is enabled) */\n public static debug(message: string, options?: any) {\n if (getLevel() === LOG_LEVELS.debug) {\n console.log(`Radar SDK (debug): ${message.trim()}`, options);\n }\n }\n\n /** log an info-level message */\n public static info(message: string) {\n if (getLevel() >= LOG_LEVELS.info) {\n console.log(`Radar SDK: ${message.trim()}`);\n }\n }\n\n /** log a warning-level message */\n public static warn(message: string) {\n if (getLevel() >= LOG_LEVELS.warn) {\n console.warn(`Radar SDK: ${message.trim()}`);\n }\n }\n\n /** log an error-level message */\n public static error(message: string) {\n if (getLevel() >= LOG_LEVELS.error) {\n console.error(`Radar SDK: ${message.trim()}`);\n }\n }\n}\n\nexport default Logger;\n","import Logger from './logger';\n\n/** typed localStorage wrapper with `radar-*` namespaced keys */\nclass Storage {\n /** localStorage key for user ID */\n public static get USER_ID() {\n return 'radar-userId';\n }\n /** localStorage key for device ID */\n public static get DEVICE_ID() {\n return 'radar-deviceId';\n }\n /** localStorage key for install ID */\n public static get INSTALL_ID() {\n return 'radar-installId';\n }\n /** localStorage key for session ID */\n public static get SESSION_ID() {\n return 'radar-sessionId';\n }\n /** localStorage key for user description */\n public static get DESCRIPTION() {\n return 'radar-description';\n }\n /** localStorage key for user metadata */\n public static get METADATA() {\n return 'radar-metadata';\n }\n /** localStorage key for cached location */\n public static get CACHED_LOCATION() {\n return 'radar-cached-location';\n }\n /** localStorage key for trip options */\n public static get TRIP_OPTIONS() {\n return 'radar-trip-options';\n }\n\n /** localStorage key for product identifier */\n public static get PRODUCT() {\n return 'radar-product';\n }\n\n /** @internal get the underlying localStorage instance */\n private static getStorage() {\n const storage = window?.localStorage;\n if (!storage) {\n Logger.warn('localStorage not available.');\n }\n return storage;\n }\n\n /**\n * store a string value in localStorage\n * @param key - the storage key\n * @param value - the string value to store\n */\n public static setItem(key: string, value: string) {\n const storage = this.getStorage();\n if (!storage) {\n return;\n }\n if (value === undefined || value === null) {\n return;\n }\n storage.setItem(key, value);\n }\n\n /**\n * retrieve a string value from localStorage\n * @param key - the storage key\n * @returns the stored value, or null if not found\n */\n public static getItem(key: string) {\n const storage = this.getStorage();\n if (!storage) {\n return null;\n }\n const value = storage.getItem(key);\n if (value !== undefined && value !== null) {\n return value;\n }\n return null;\n }\n\n /**\n * retrieve and parse a JSON value from localStorage\n * @param key - the storage key\n * @returns the parsed object, or null if not found or parse fails\n */\n public static getJSON(key: string) {\n const item = this.getItem(key);\n if (!item) {\n return null;\n }\n\n try {\n return JSON.parse(item);\n } catch {\n Logger.warn(`could not getJSON from storage for key: ${key}`);\n return null;\n }\n }\n\n /**\n * remove an item from localStorage\n * @param key - the storage key to remove\n */\n public static removeItem(key: string) {\n const storage = this.getStorage();\n if (!storage) {\n return null;\n }\n storage.removeItem(key);\n }\n\n /** clear all localStorage entries */\n public static clear() {\n const storage = this.getStorage();\n if (!storage) {\n return null;\n }\n storage.clear();\n }\n}\n\nexport default Storage;\n","import Config from './config';\nimport { RadarLocationError, RadarPermissionsError } from './errors';\nimport Logger from './logger';\nimport Storage from './storage';\n\nimport type { LocationAuthorization, NavigatorPosition } from './types';\n\ninterface PositionOptionOverrides {\n desiredAccuracy?: string;\n}\n\nconst DEFAULT_POSITION_OPTIONS: PositionOptions = {\n maximumAge: 0,\n timeout: 1000 * 10, // 10 seconds\n enableHighAccuracy: true,\n};\n\n// set \"enableHighAccuracy\" for navigator only when desiredAccuracy is \"high\"\nconst useHighAccuracy = (desiredAccuracy?: string) => Boolean(desiredAccuracy === 'high');\n\n/** browser geolocation wrapper with caching and permission checks */\nclass Navigator {\n /**\n * get the device's current position via the browser geolocation API\n * @param overrides - optional accuracy overrides\n * @returns device coordinates with accuracy\n * @throws {RadarLocationError} if geolocation is unavailable or times out\n * @throws {RadarPermissionsError} if location permissions are denied\n */\n public static async getCurrentPosition(overrides: PositionOptionOverrides = {}): Promise<NavigatorPosition> {\n return new Promise((resolve, reject) => {\n const options = Config.get();\n\n if (!navigator || !navigator.geolocation) {\n return reject(new RadarLocationError('navigator.geolocation is not available.'));\n }\n\n // use cached location if available and options are set\n if (options.cacheLocationMinutes) {\n try {\n const rawCachedLocation = Storage.getItem(Storage.CACHED_LOCATION);\n if (rawCachedLocation) {\n const cachedLocation = JSON.parse(rawCachedLocation);\n const { latitude, longitude, accuracy, expiresAt } = cachedLocation || {};\n if (Date.now() < parseInt(expiresAt)) {\n if (latitude && longitude && accuracy) {\n return resolve({ latitude, longitude, accuracy });\n }\n }\n }\n } catch {\n Logger.warn('could not load cached location.');\n }\n }\n\n // set options from config\n const positionOptions = Object.assign({}, DEFAULT_POSITION_OPTIONS);\n if (options.locationMaximumAge !== undefined) {\n positionOptions.maximumAge = options.locationMaximumAge;\n }\n if (options.locationTimeout !== undefined) {\n positionOptions.timeout = options.locationTimeout;\n }\n if (options.desiredAccuracy !== undefined) {\n positionOptions.enableHighAccuracy = useHighAccuracy(options.desiredAccuracy);\n }\n\n // set options from overrides\n if (overrides.desiredAccuracy !== undefined) {\n positionOptions.enableHighAccuracy = useHighAccuracy(overrides.desiredAccuracy);\n }\n\n Logger.info(`Using geolocation options: ${JSON.stringify(positionOptions)}`);\n\n // get current location from browser\n navigator.geolocation.getCurrentPosition(\n (position) => {\n if (!position || !position.coords) {\n return reject(new RadarLocationError('device location return empty coordinates.'));\n }\n\n const { latitude, longitude, accuracy } = position.coords;\n\n // cache location if option is set\n if (options.cacheLocationMinutes) {\n const cacheLocationMinutes = Number.parseFloat(options.cacheLocationMinutes as any);\n const updatedAt = Date.now();\n const expiresAt = updatedAt + cacheLocationMinutes * 60 * 1000; // convert to ms\n\n const lastLocation = { latitude, longitude, accuracy, updatedAt, expiresAt };\n Storage.setItem(Storage.CACHED_LOCATION, JSON.stringify(lastLocation));\n }\n\n return resolve({ latitude, longitude, accuracy });\n },\n (err: GeolocationPositionError) => {\n // location call failed or user did not grant permission\n if (err && err.code === 1) {\n // https://developer.mozilla.org/en-US/docs/Web/API/GeolocationPositionError\n // code 1 means location permissions denied\n // codes 2 and 3 mean location unavailable or timeout\n return reject(new RadarPermissionsError('Location permissions denied.'));\n }\n return reject(new RadarLocationError('Could not determine location.'));\n },\n positionOptions,\n );\n });\n }\n\n /**\n * query the current geolocation permission status\n * @returns the current location authorization state\n */\n public static async getPermissionStatus(): Promise<LocationAuthorization> {\n return new Promise((resolve) => {\n let locationAuthorization: LocationAuthorization = 'NOT_DETERMINED';\n\n if (!navigator || !navigator.permissions) {\n return resolve(locationAuthorization);\n }\n\n void navigator.permissions.query({ name: 'geolocation' }).then((permissionsStatus) => {\n switch (permissionsStatus.state) {\n case 'granted':\n locationAuthorization = 'GRANTED_FOREGROUND';\n break;\n case 'denied':\n locationAuthorization = 'DENIED';\n break;\n case 'prompt':\n locationAuthorization = 'NOT_DETERMINED';\n break;\n default:\n break;\n }\n\n return resolve(locationAuthorization);\n });\n });\n }\n\n /** check whether the browser reports being online */\n public static online(): boolean {\n return navigator && navigator.onLine;\n }\n}\n\nexport default Navigator;\n","export default '5.0.0';\n","import Config from './config';\nimport {\n RadarBadRequestError,\n RadarForbiddenError,\n RadarLocationError,\n RadarNetworkError,\n RadarNotFoundError,\n RadarPaymentRequiredError,\n RadarPermissionsError,\n RadarPublishableKeyError,\n RadarRateLimitError,\n RadarServerError,\n RadarUnauthorizedError,\n RadarUnknownError,\n} from './errors';\nimport Logger from './logger';\nimport Navigator from './navigator';\nimport SDK_VERSION from './version';\n\n/** HTTP methods supported by the SDK */\ntype HttpMethod = 'GET' | 'PUT' | 'PATCH' | 'POST' | 'DELETE';\n\n/** Shape of the `meta` field present in all Radar API responses */\ninterface RadarApiMeta {\n error?: string;\n message?: string;\n type?: string;\n}\n\n/** Base shape all Radar API JSON responses share */\ninterface RadarApiResponse {\n meta?: RadarApiMeta;\n [key: string]: unknown;\n}\n\n/** Blob response shape returned when responseType is 'blob' */\ninterface RadarBlobResponse {\n meta?: undefined;\n code: number;\n data: Blob;\n}\n\nexport type RadarResponse = RadarApiResponse | RadarBlobResponse;\n\n/** Request configuration for Http.request */\ninterface HttpRequestOptions {\n method: HttpMethod;\n path: string;\n data?: Record<string, any>;\n host?: string;\n version?: string;\n headers?: Record<string, string>;\n responseType?: 'blob' | 'json';\n requestId?: string;\n}\n\nconst inFlightRequests = new Map<string, AbortController>();\n\n/** fetch-based HTTP client for Radar API requests */\nclass Http {\n /** map of host patterns to custom error factories for intercepting network errors */\n static errorInterceptors: Map<string, (online: boolean) => Error> = new Map();\n\n /**\n * register a custom error factory for network errors matching a host pattern\n * @param hostPattern - substring matched against the request host\n * @param handler - factory that receives online status and returns an error\n */\n static registerErrorInterceptor(hostPattern: string, handler: (online: boolean) => Error) {\n Http.errorInterceptors.set(hostPattern, handler);\n }\n\n /**\n * send an HTTP request to the Radar API\n * @param options - request configuration\n * @returns parsed response body, typed as `T`\n * @throws {RadarPublishableKeyError} if publishable key is not set\n * @throws {RadarBadRequestError} on 400 responses\n * @throws {RadarUnauthorizedError} on 401 responses\n * @throws {RadarNetworkError} on network failures\n */\n static async request(options: HttpRequestOptions & { responseType: 'blob' }): Promise<RadarBlobResponse>;\n static async request<T extends Record<string, any> = RadarApiResponse>(\n options: HttpRequestOptions,\n ): Promise<T & { meta?: RadarApiMeta }>;\n static async request<T extends Record<string, any> = RadarApiResponse>({\n method,\n path,\n data,\n host,\n version,\n headers = {},\n responseType,\n requestId,\n }: HttpRequestOptions): Promise<(T & { meta?: RadarApiMeta }) | RadarBlobResponse> {\n const options = Config.get();\n\n const publishableKey = options.publishableKey;\n if (!publishableKey) {\n throw new RadarPublishableKeyError('publishableKey not set.');\n }\n\n const urlHost = host || options.host;\n const urlVersion = version || options.version;\n let url = `${urlHost}/${urlVersion}/${path}`;\n\n // filter out undefined values from request data\n const filtered = Object.fromEntries(Object.entries(data ?? {}).filter(([, v]) => v !== undefined));\n\n let body: string | undefined;\n\n if (method === 'GET') {\n const params = new URLSearchParams(Object.entries(filtered).map(([k, v]) => [k, String(v)]));\n const qs = params.toString();\n if (qs) {\n url = `${url}?${qs}`;\n }\n } else {\n body = JSON.stringify(filtered);\n }\n\n // abort in-flight requests with matching requestIds\n if (requestId) {\n inFlightRequests.get(requestId)?.abort();\n }\n\n const abortController = new AbortController();\n\n if (requestId) {\n inFlightRequests.set(requestId, abortController);\n }\n\n const defaultHeaders: Record<string, string> = {\n Authorization: publishableKey,\n 'Content-Type': 'application/json',\n 'X-Radar-Device-Type': 'Web',\n 'X-Radar-SDK-Version': SDK_VERSION,\n };\n\n let configHeaders: Record<string, string> = {};\n if (typeof options.getRequestHeaders === 'function') {\n configHeaders = options.getRequestHeaders();\n }\n\n const allHeaders: Record<string, string> = { ...defaultHeaders, ...configHeaders, ...headers };\n\n let response: Response;\n try {\n response = await fetch(url, {\n method,\n headers: allHeaders,\n body,\n signal: abortController.signal,\n });\n } catch {\n // Delete abort controller instance for this request ID if it hasn't yet been replaced with a different one\n if (requestId && inFlightRequests.get(requestId) === abortController) {\n inFlightRequests.delete(requestId);\n }\n\n if (host) {\n for (const [pattern, handler] of Http.errorInterceptors) {\n if (host.includes(pattern)) {\n throw handler(!!Navigator.online());\n }\n }\n }\n throw new RadarNetworkError();\n }\n\n if (requestId && inFlightRequests.get(requestId) === abortController) {\n inFlightRequests.delete(requestId);\n }\n\n let parsed: RadarResponse | undefined;\n try {\n if (responseType === 'blob') {\n parsed = { code: response.status, data: await response.blob() };\n } else {\n parsed = (await response.json()) as RadarApiResponse;\n }\n } catch (err) {\n if (parsed) {\n throw new RadarServerError(parsed);\n } else {\n if (options.debug) {\n Logger.debug(`API call failed: ${url}`);\n Logger.debug(String(err));\n }\n\n throw new RadarUnknownError(parsed);\n }\n }\n\n if (parsed && typeof parsed === 'object' && 'meta' in parsed) {\n const error = parsed.meta?.error;\n if (error === 'ERROR_PERMISSIONS') {\n throw new RadarPermissionsError('Location permissions not granted.');\n } else if (error === 'ERROR_LOCATION') {\n throw new RadarLocationError('Could not determine location.');\n } else if (error === 'ERROR_NETWORK') {\n throw new RadarNetworkError();\n }\n }\n\n if (response.ok) {\n return parsed as T;\n }\n\n if (options.debug) {\n Logger.debug(`API call failed: ${url}`);\n Logger.debug(JSON.stringify(parsed));\n }\n\n if (response.status === 400) {\n throw new RadarBadRequestError(parsed);\n } else if (response.status === 401) {\n throw new RadarUnauthorizedError(parsed);\n } else if (response.status === 402) {\n throw new RadarPaymentRequiredError(parsed);\n } else if (response.status === 403) {\n throw new RadarForbiddenError(parsed);\n } else if (response.status === 404) {\n throw new RadarNotFoundError(parsed);\n } else if (response.status === 429) {\n throw new RadarRateLimitError(parsed);\n } else if (response.status >= 500 && response.status < 600) {\n throw new RadarServerError(parsed);\n } else {\n throw new RadarUnknownError(parsed);\n }\n }\n}\n\nexport default Http;\n","import Config from '../config';\nimport Http from '../http';\n\nimport type { RadarValidateAddressParams, RadarValidateAddressResponse } from '../types';\n\n/** @internal address validation API — use {@link Radar.validateAddress} instead */\nclass AddressesAPI {\n /**\n * validate a structured address\n * @param params - address fields to validate\n * @returns validated address and verification result\n */\n static async validateAddress(params: RadarValidateAddressParams): Promise<RadarValidateAddressResponse> {\n const options = Config.get();\n\n const response = await Http.request<Omit<RadarValidateAddressResponse, 'response'>>({\n method: 'GET',\n path: 'addresses/validate',\n data: params,\n });\n const { address, result } = response;\n\n const validateAddressRes: RadarValidateAddressResponse = {\n address,\n result,\n };\n\n if (options.debug) {\n validateAddressRes.response = response;\n }\n\n return validateAddressRes;\n }\n}\n\nexport default AddressesAPI;\n","import Storage from './storage';\n\nconst generateUUID = (): string => {\n if (typeof crypto !== 'undefined' && crypto.randomUUID) {\n return crypto.randomUUID();\n }\n\n // fallback for older browsers\n const bytes = new Uint8Array(16);\n crypto.getRandomValues(bytes);\n bytes[6] = (bytes[6]! & 0x0f) | 0x40; // version 4\n bytes[8] = (bytes[8]! & 0x3f) | 0x80; // variant 10\n\n const hex = Array.from(bytes, (b) => b.toString(16).padStart(2, '0')).join('');\n return `${hex.slice(0, 8)}-${hex.slice(8, 12)}-${hex.slice(12, 16)}-${hex.slice(16, 20)}-${hex.slice(20)}`;\n};\n\n/** device and install ID manager backed by localStorage */\nclass Device {\n /**\n * get or generate a persistent device ID\n * @returns the device UUID (persisted in localStorage)\n */\n static getDeviceId(): string {\n // use existing deviceId if present\n const deviceId = Storage.getItem(Storage.DEVICE_ID);\n if (deviceId) {\n return deviceId;\n }\n\n // generate new deviceId\n const uuid = generateUUID();\n Storage.setItem(Storage.DEVICE_ID, uuid);\n return uuid;\n }\n\n /**\n * get or generate a persistent install ID\n * @returns the install UUID (persisted in localStorage)\n */\n static getInstallId(): string {\n // use existing installId if present\n const deviceId = Storage.getItem(Storage.INSTALL_ID);\n if (deviceId) {\n return deviceId;\n }\n\n // generate new installId\n const uuid = generateUUID();\n Storage.setItem(Storage.INSTALL_ID, uuid);\n return uuid;\n }\n}\n\nexport default Device;\n","import Storage from './storage';\n\nconst SESSION_TIMEOUT_SECS = 300; // 5 mins\n\nconst isValid = (sessionId: string): boolean => {\n const now = Math.trunc(Date.now() / 1000);\n const session = Number.parseInt(sessionId);\n const diff = Math.abs(now - session);\n return diff < SESSION_TIMEOUT_SECS;\n};\n\n/** session ID manager with a 5-minute timeout */\nclass Session {\n /**\n * get the current session ID, creating a new one if expired\n * @returns unix timestamp string used as session ID\n */\n static getSessionId() {\n const sessionId = Storage.getItem(Storage.SESSION_ID);\n\n // reuse session if still within 5 min threshold\n if (sessionId && isValid(sessionId)) {\n return sessionId;\n }\n\n // create new session if does not already exist or expired\n const newSessionId = Math.trunc(Date.now() / 1000).toString(); // unix ts in seconds\n Storage.setItem(Storage.SESSION_ID, newSessionId);\n return newSessionId;\n }\n}\n\nexport default Session;\n","import Device from '../device';\nimport Http from '../http';\nimport Logger from '../logger';\nimport Navigator from '../navigator';\nimport Session from '../session';\n\nimport type { LocationAuthorization, RadarConfigResponse, RadarTrackParams } from '../types';\n\n/** options for customizing the config request (e.g. host, headers) */\ninterface ConfigRequestOptions {\n /** override the API host */\n host?: string;\n /** additional headers to include in the request */\n headers?: Record<string, string>;\n}\n\n/** @internal SDK configuration API for fetching remote config */\nclass ConfigAPI {\n /**\n * fetch remote SDK configuration from the Radar API. Generic so plugins can extend the response shape.\n *\n * @param params - optional tracking params for device/session identification\n * @param options - optional request overrides (host, headers)\n */\n public static async getConfig<T extends RadarConfigResponse = RadarConfigResponse>(\n params: RadarTrackParams = {},\n options: ConfigRequestOptions = {},\n ): Promise<T> {\n const deviceId = params.deviceId || Device.getDeviceId();\n const installId = params.installId || Device.getInstallId();\n const sessionId = Session.getSessionId();\n\n // location authorization\n let locationAuthorization: LocationAuthorization | undefined;\n try {\n locationAuthorization = await Navigator.getPermissionStatus();\n } catch (err: any) {\n Logger.warn(`Location authorization error: ${err.message}`);\n }\n\n const data = {\n deviceId,\n installId,\n sessionId,\n locationAuthorization,\n };\n\n return Http.request<T>({\n method: 'GET',\n path: 'config',\n data,\n host: options.host,\n headers: options.headers,\n });\n }\n}\n\nexport default ConfigAPI;\n","import Config from '../config';\nimport Http from '../http';\nimport Navigator from '../navigator';\n\nimport type { RadarContextResponse, Location } from '../types';\n\n/** @internal context API — use {@link Radar.getContext} instead */\nclass ContextAPI {\n /**\n * get context (geofences, place, region) for a location\n * @param location - coordinates to get context for\n * @returns geofences, place, country, state, DMA, and postal code\n */\n public static async getContext(location: Location): Promise<RadarContextResponse> {\n const options = Config.get();\n\n // get device location if coordinates not provided\n if (!location.latitude || !location.longitude) {\n location = await Navigator.getCurrentPosition();\n }\n\n const { latitude, longitude, accuracy } = location;\n\n const response = await Http.request<Omit<RadarContextResponse, 'response' | 'location'>>({\n method: 'GET',\n path: 'context',\n data: {\n coordinates: `${latitude},${longitude}`,\n accuracy,\n },\n });\n\n const { geofences, place, country, state, dma, postalCode } = response;\n\n const contextRes: RadarContextResponse = {\n location,\n geofences,\n place,\n country,\n state,\n dma,\n postalCode,\n };\n\n if (options.debug) {\n contextRes.response = response;\n }\n\n return contextRes;\n }\n}\n\nexport default ContextAPI;\n","import Config from '../config';\nimport Device from '../device';\nimport Http from '../http';\nimport Storage from '../storage';\n\nimport type { RadarConversionParams, RadarConversionResponse } from '../types';\n\n/** @internal conversions API — use {@link Radar.logConversion} instead */\nclass ConversionsAPI {\n /**\n * log a conversion event\n * @param params - conversion name, user info, and optional metadata/revenue\n * @returns the created event\n */\n static async logConversion(params: RadarConversionParams): Promise<RadarConversionResponse> {\n const options = Config.get();\n\n const name = params.name;\n const userId = params.userId || Storage.getItem(Storage.USER_ID);\n const deviceId = params.deviceId || Device.getDeviceId();\n const installId = params.installId || Device.getInstallId();\n const metadata = params.metadata || {};\n const createdAt = params.createdAt;\n\n if (params.revenue) {\n metadata.revenue = params.revenue;\n }\n\n const createdAtValue =\n typeof createdAt === 'string'\n ? createdAt\n : createdAt instanceof Date\n ? createdAt.toISOString()\n : new Date().toISOString();\n\n const data = {\n name,\n userId,\n deviceId,\n installId,\n metadata,\n createdAt: createdAtValue,\n };\n\n const response = await Http.request<Omit<RadarConversionResponse, 'response'>>({\n method: 'POST',\n path: 'events',\n data,\n });\n\n const conversionRes: RadarConversionResponse = {\n event: response.event,\n };\n\n if (options.debug) {\n conversionRes.response = response;\n }\n\n return conversionRes;\n }\n}\n\nexport default ConversionsAPI;\n","import Config from '../config';\nimport Http from '../http';\nimport Navigator from '../navigator';\n\nimport type {\n RadarForwardGeocodeParams,\n RadarReverseGeocodeParams,\n RadarGeocodeResponse,\n RadarIPGeocodeResponse,\n} from '../types';\n\n/** @internal geocoding API — use Radar.forwardGeocode / reverseGeocode / ipGeocode instead */\nclass Geocoding {\n /**\n * geocode an address or place name to coordinates\n * @param params - query string, optional layers and country filter\n * @returns matching addresses\n */\n static async forwardGeocode(params: RadarForwardGeocodeParams): Promise<RadarGeocodeResponse> {\n const options = Config.get();\n\n const { query, layers, country, lang } = params;\n\n const response = await Http.request<Omit<RadarGeocodeResponse, 'response'>>({\n method: 'GET',\n path: 'geocode/forward',\n data: {\n query,\n layers,\n country,\n lang,\n },\n });\n\n const forwardGeocodeRes: RadarGeocodeResponse = {\n addresses: response.addresses,\n };\n\n if (options.debug) {\n forwardGeocodeRes.response = response;\n }\n\n return forwardGeocodeRes;\n }\n\n /**\n * reverse geocode coordinates to addresses\n * @param params - latitude/longitude, optional layers filter\n * @returns matching addresses\n */\n static async reverseGeocode(params: RadarReverseGeocodeParams): Promise<RadarGeocodeResponse> {\n const options = Config.get();\n\n const { layers } = params;\n let { latitude, longitude } = params;\n\n if (!latitude || !longitude) {\n const location = await Navigator.getCurrentPosition();\n latitude = location.latitude;\n longitude = location.longitude;\n }\n\n const response = await Http.request<Omit<RadarGeocodeResponse, 'response'>>({\n method: 'GET',\n path: 'geocode/reverse',\n data: {\n coordinates: `${latitude},${longitude}`,\n layers,\n },\n });\n\n const reverseGeocodeRes: RadarGeocodeResponse = {\n addresses: response.addresses,\n };\n\n if (options.debug) {\n reverseGeocodeRes.response = response;\n }\n\n return reverseGeocodeRes;\n }\n\n /**\n * geocode the device's IP address to a rough location\n * @returns IP address, approximate address, and proxy info\n */\n static async ipGeocode(): Promise<RadarIPGeocodeResponse> {\n const options = Config.get();\n\n const response = await Http.request<Omit<RadarIPGeocodeResponse, 'response'>>({\n method: 'GET',\n path: 'geocode/ip',\n });\n\n const ipGeocodeRes: RadarIPGeocodeResponse = {\n ip: response.ip,\n address: response.address,\n proxy: response.proxy,\n };\n\n if (options.debug) {\n ipGeocodeRes.response = response;\n }\n\n return ipGeocodeRes;\n }\n}\n\nexport default Geocoding;\n","import Config from '../config';\nimport Http from '../http';\nimport Navigator from '../navigator';\n\nimport type { RadarDistanceParams, RadarRouteResponse, RadarMatrixParams, RadarMatrixResponse } from '../types';\n\n/** @internal routing API — use Radar.distance / matrix instead */\nclass RoutingAPI {\n /**\n * calculate travel distance and duration between two points\n * @param params - origin, destination, modes, and units\n * @returns routes with distance and duration per mode\n */\n static async distance(params: RadarDistanceParams): Promise<RadarRouteResponse> {\n const options = Config.get();\n\n const { units, geometry, geometryPoints } = params;\n let { origin, destination, modes, avoid } = params;\n\n // use browser location if \"near\" not provided\n if (!origin) {\n const { latitude, longitude } = await Navigator.getCurrentPosition();\n origin = `${latitude},${longitude}`;\n } else if (typeof origin !== 'string') {\n // origin is \"Location\" object\n const { latitude, longitude } = origin;\n origin = `${latitude},${longitude}`;\n }\n\n if (typeof destination !== 'string') {\n const { latitude, longitude } = destination;\n destination = `${latitude},${longitude}`;\n }\n\n if (Array.isArray(modes)) {\n modes = modes.join(',');\n }\n\n if (Array.isArray(avoid)) {\n avoid = avoid.join(',');\n }\n\n const response = await Http.request<Omit<RadarRouteResponse, 'response'>>({\n method: 'GET',\n path: 'route/distance',\n data: {\n origin,\n destination,\n modes,\n units,\n geometry,\n geometryPoints,\n avoid,\n },\n });\n\n const distanceRes: RadarRouteResponse = {\n routes: response.routes,\n };\n\n if (options.debug) {\n distanceRes.response = response;\n }\n\n return distanceRes;\n }\n\n /**\n * calculate a distance matrix between multiple origins and destinations\n * @param params - origins, destinations, mode, and units\n * @returns matrix of distances and durations\n */\n static async matrix(params: RadarMatrixParams): Promise<RadarMatrixResponse> {\n const options = Config.get();\n\n const { mode, units } = params;\n let { origins, destinations, avoid } = params;\n\n // use browser location if \"near\" not provided\n if (!origins) {\n const { latitude, longitude } = await Navigator.getCurrentPosition();\n const originStrings = [];\n for (let i = 0; i < destinations.length; i++) {\n originStrings.push(`${latitude},${longitude}`);\n }\n origins = originStrings.join('|');\n } else if (Array.isArray(origins)) {\n // origin is a list of \"Location\" objects\n origins = origins.map((location) => `${location.latitude},${location.longitude}`).join('|');\n }\n\n // convert array to pipe-delimited string\n if (Array.isArray(destinations)) {\n destinations = destinations.map((location) => `${location.latitude},${location.longitude}`).join('|');\n }\n\n if (Array.isArray(avoid)) {\n avoid = avoid.join(',');\n }\n\n const response = await Http.request<Omit<RadarMatrixResponse, 'response'>>({\n method: 'GET',\n path: 'route/matrix',\n data: {\n origins,\n destinations,\n mode,\n units,\n avoid,\n },\n });\n\n const matrixRes: RadarMatrixResponse = {\n origins: response.origins,\n destinations: response.destinations,\n matrix: response.matrix,\n };\n\n if (options.debug) {\n matrixRes.response = response;\n }\n\n return matrixRes;\n }\n}\n\nexport default RoutingAPI;\n","import Config from '../config';\nimport Http from '../http';\nimport Navigator from '../navigator';\n\nimport type {\n RadarAutocompleteParams,\n RadarAutocompleteResponse,\n RadarSearchPlacesParams,\n RadarSearchPlacesResponse,\n RadarSearchGeofencesParams,\n RadarSearchGeofencesResponse,\n} from '../types';\n\n/** @internal search API — use Radar.autocomplete / searchGeofences / searchPlaces instead */\nclass SearchAPI {\n /**\n * autocomplete partial addresses and place names\n * @param params - query and search configuration\n * @param requestId - optional ID for deduplicating in-flight requests\n * @returns matching addresses\n */\n static async autocomplete(params: RadarAutocompleteParams, requestId?: string): Promise<RadarAutocompleteResponse> {\n const options = Config.get();\n\n const { query, limit, layers, countryCode, expandUnits, mailable, lang, postalCode } = params;\n let { near } = params;\n\n // near can be provided as a string or Location object\n // if \"near\" is not provided, request will fallback to IP based location\n if (near && typeof near !== 'string') {\n if (near.latitude && near.longitude) {\n near = `${near.latitude},${near.longitude}`;\n }\n }\n\n const response = await Http.request<Omit<RadarAutocompleteResponse, 'response'>>({\n method: 'GET',\n path: 'search/autocomplete',\n data: {\n query,\n near,\n limit,\n layers,\n countryCode,\n expandUnits,\n mailable,\n lang,\n postalCode,\n },\n requestId,\n });\n\n const autocompleteRes: RadarAutocompleteResponse = {\n addresses: response.addresses,\n };\n\n if (options.debug) {\n autocompleteRes.response = response;\n }\n\n return autocompleteRes;\n }\n\n /**\n * search for geofences near a location\n * @param params - location, radius, tags, and filters\n * @returns matching geofences\n */\n static async searchGeofences(params: RadarSearchGeofencesParams): Promise<RadarSearchGeofencesResponse> {\n const options = Config.get();\n\n const { radius, metadata, limit, includeGeometry } = params;\n let { near, tags } = params;\n\n // use browser location if \"near\" not provided\n if (!near) {\n const { latitude, longitude } = await Navigator.getCurrentPosition();\n near = `${latitude},${longitude}`;\n } else if (typeof near !== 'string') {\n // near is \"Location\" object\n const { latitude, longitude } = near;\n near = `${latitude},${longitude}`;\n }\n\n // convert arrays to comma-strings\n if (Array.isArray(tags)) {\n tags = tags.join(',');\n }\n\n const response = await Http.request<Omit<RadarSearchGeofencesResponse, 'response'>>({\n method: 'GET',\n path: 'search/geofences',\n data: {\n near,\n radius,\n tags,\n metadata,\n limit,\n includeGeometry,\n },\n });\n\n const geofencesSearchRes: RadarSearchGeofencesResponse = {\n geofences: response.geofences,\n };\n\n if (options.debug) {\n geofencesSearchRes.response = response;\n }\n\n return geofencesSearchRes;\n }\n\n /**\n * search for places near a location\n * @param params - location, radius, chains, categories, and groups\n * @returns matching places\n */\n static async searchPlaces(params: RadarSearchPlacesParams): Promise<RadarSearchPlacesResponse> {\n const options = Config.get();\n\n const { radius, limit } = params;\n let { near, chains, categories, groups } = params;\n\n // use browser location if \"near\" not provided\n if (!near) {\n const { latitude, longitude } = await Navigator.getCurrentPosition();\n near = `${latitude},${longitude}`;\n } else if (typeof near !== 'string') {\n // near is \"Location\" object\n const { latitude, longitude } = near;\n near = `${latitude},${longitude}`;\n }\n\n // convert arrays to comma-strings\n if (Array.isArray(chains)) {\n chains = chains.join(',');\n }\n if (Array.isArray(categories)) {\n categories = categories.join(',');\n }\n if (Array.isArray(groups)) {\n groups = groups.join(',');\n }\n\n const response = await Http.request<Omit<RadarSearchPlacesResponse, 'response'>>({\n method: 'GET',\n path: 'search/places',\n data: {\n near,\n radius,\n chains,\n categories,\n groups,\n limit,\n },\n });\n\n const placeSearchRes: RadarSearchPlacesResponse = {\n places: response.places,\n };\n\n if (options.debug) {\n placeSearchRes.response = response;\n }\n\n return placeSearchRes;\n }\n}\n\nexport default SearchAPI;\n","import Config from '../config';\nimport Http from '../http';\nimport Logger from '../logger';\nimport Storage from '../storage';\n\nimport type { RadarTripOptions, RadarTripStatus, RadarTripResponse } from '../types';\n\n// https://stackoverflow.com/a/44198641\nconst isValidDate = (date: any): Date | undefined =>\n date && Object.prototype.toString.call(date) === '[object Date]' && !isNaN(date);\n\n/** @internal trips API — use Radar.startTrip / updateTrip / completeTrip / cancelTrip instead */\nclass TripsAPI {\n /** save trip options to localStorage, pass `undefined` to clear */\n static setTripOptions(tripOptions?: RadarTripOptions) {\n if (!tripOptions) {\n TripsAPI.clearTripOptions();\n return;\n }\n const tripOptionsString = JSON.stringify(tripOptions);\n Logger.debug(`Saving trip options: ${tripOptionsString}`);\n Storage.setItem(Storage.TRIP_OPTIONS, tripOptionsString);\n }\n\n /** get saved trip options from localStorage */\n static getTripOptions(): RadarTripOptions {\n let tripOptions = Storage.getItem(Storage.TRIP_OPTIONS);\n if (tripOptions) {\n tripOptions = JSON.parse(tripOptions);\n }\n return tripOptions as RadarTripOptions;\n }\n\n /** remove saved trip options from localStorage */\n static clearTripOptions() {\n Storage.removeItem(Storage.TRIP_OPTIONS);\n }\n\n /**\n * start a new trip\n * @param tripOptions - trip configuration and destination\n * @returns the created trip and any triggered events\n */\n static async startTrip(tripOptions: RadarTripOptions): Promise<RadarTripResponse> {\n const options = Config.get();\n tripOptions = tripOptions || TripsAPI.getTripOptions();\n\n if (!tripOptions) {\n Logger.warn('tripOptions not set when calling \"startTrip\"');\n }\n\n const userId = tripOptions.userId || Storage.getItem(Storage.USER_ID);\n if (userId && userId !== Storage.getItem(Storage.USER_ID)) {\n // set as userId for tracking if provided\n Storage.setItem(Storage.USER_ID, userId);\n }\n\n const {\n externalId,\n destinationGeofenceTag,\n destinationGeofenceExternalId,\n mode,\n metadata,\n approachingThreshold,\n scheduledArrivalAt,\n } = tripOptions;\n\n if (scheduledArrivalAt && !isValidDate(scheduledArrivalAt)) {\n Logger.warn('Invalid date format for scheduledArrivalAt');\n }\n\n const data = {\n userId,\n externalId,\n destinationGeofenceTag,\n destinationGeofenceExternalId,\n mode,\n metadata,\n approachingThreshold,\n scheduledArrivalAt: isValidDate(scheduledArrivalAt) ? scheduledArrivalAt!.toJSON() : undefined,\n };\n\n const response = await Http.request<Omit<RadarTripResponse, 'response'>>({\n method: 'POST',\n path: 'trips',\n data,\n });\n\n // save trip options\n TripsAPI.setTripOptions(tripOptions);\n\n const tripRes: RadarTripResponse = {\n trip: response.trip,\n events: response.events,\n };\n\n if (options.debug) {\n tripRes.response = response;\n }\n\n return tripRes;\n }\n\n /**\n * update an in-progress trip\n * @param tripOptions - updated trip configuration\n * @param status - optional trip status override\n * @returns the updated trip and any triggered events\n */\n static async updateTrip(tripOptions: RadarTripOptions, status?: RadarTripStatus): Promise<RadarTripResponse> {\n const options = Config.get();\n tripOptions = tripOptions || TripsAPI.getTripOptions();\n\n if (!tripOptions) {\n Logger.warn('tripOptions not set when calling \"startTrip\"');\n }\n\n const {\n externalId,\n destinationGeofenceTag,\n destinationGeofenceExternalId,\n mode,\n metadata,\n approachingThreshold,\n scheduledArrivalAt,\n } = tripOptions;\n\n if (scheduledArrivalAt && !isValidDate(scheduledArrivalAt)) {\n Logger.warn('Invalid date format for scheduledArrivalAt');\n }\n\n const data = {\n status,\n externalId,\n destinationGeofenceTag,\n destinationGeofenceExternalId,\n mode,\n metadata,\n approachingThreshold,\n scheduledArrivalAt: isValidDate(scheduledArrivalAt) ? scheduledArrivalAt!.toJSON() : undefined,\n };\n\n const response = await Http.request<Omit<RadarTripResponse, 'response'>>({\n method: 'PATCH',\n path: `trips/${externalId}/update`,\n data,\n });\n\n const tripRes: RadarTripResponse = {\n trip: response.trip,\n events: response.events,\n };\n\n if (options.debug) {\n tripRes.response = response;\n }\n\n return tripRes;\n }\n\n /** complete the current trip and clear local trip options */\n static async completeTrip(): Promise<RadarTripResponse> {\n const tripOptions = TripsAPI.getTripOptions();\n const tripResponse = await TripsAPI.updateTrip(tripOptions, 'completed');\n\n // clear local trip options\n TripsAPI.clearTripOptions();\n\n return tripResponse;\n }\n\n /** cancel the current trip and clear local trip options */\n static async cancelTrip(): Promise<RadarTripResponse> {\n const tripOptions = TripsAPI.getTripOptions();\n const tripResponse = await TripsAPI.updateTrip(tripOptions, 'canceled');\n\n // clear local trip options\n TripsAPI.clearTripOptions();\n\n return tripResponse;\n }\n}\n\nexport default TripsAPI;\n","import Config from '../config';\nimport Device from '../device';\nimport Http from '../http';\nimport Logger from '../logger';\nimport Navigator from '../navigator';\nimport Session from '../session';\nimport Storage from '../storage';\nimport SDK_VERSION from '../version';\nimport TripsAPI from './trips';\n\nimport type { RadarTrackParams, RadarTrackResponse } from '../types';\n\n/** @internal tracking API — use {@link Radar.trackOnce} instead */\nclass TrackAPI {\n /**\n * track the user's current location once\n * @param params - tracking parameters (location, user info, trip options)\n * @returns tracked user, events, and location\n */\n static async trackOnce(params: RadarTrackParams) {\n const options = Config.get();\n\n const { desiredAccuracy } = params;\n let { latitude, longitude, accuracy } = params;\n\n // if latitude & longitude are not provided,\n // try and retrieve device location (will prompt for location permissions)\n if (!latitude || !longitude) {\n const deviceLocation = await Navigator.getCurrentPosition({ desiredAccuracy });\n latitude = deviceLocation.latitude;\n longitude = deviceLocation.longitude;\n accuracy = deviceLocation.accuracy;\n }\n\n // location authorization\n const locationAuthorization = await Navigator.getPermissionStatus();\n\n // user indentification fields\n const userId = params.userId || Storage.getItem(Storage.USER_ID);\n const deviceId = params.deviceId || Device.getDeviceId();\n const installId = params.installId || Device.getInstallId();\n const sessionId = Session.getSessionId();\n const deviceType = params.deviceType || 'Web';\n const description = params.description || Storage.getItem(Storage.DESCRIPTION);\n\n // save userId for trip tracking\n if (!userId) {\n Logger.warn('userId not provided for trackOnce.');\n } else {\n Storage.setItem(Storage.USER_ID, userId);\n }\n\n // other info\n const metadata = params.metadata || Storage.getJSON(Storage.METADATA);\n\n // trips\n const tripOptions = params.tripOptions || TripsAPI.getTripOptions();\n if (tripOptions) {\n tripOptions.version = '2';\n }\n\n const body = {\n ...params,\n locationAuthorization,\n accuracy,\n description,\n deviceId,\n deviceType,\n foreground: true,\n installId,\n sessionId,\n latitude,\n longitude,\n metadata,\n sdkVersion: SDK_VERSION,\n stopped: true,\n userId,\n tripOptions,\n };\n\n const response = await Http.request<Omit<RadarTrackResponse, 'response' | 'location'>>({\n method: 'POST',\n path: 'track',\n data: body,\n });\n\n const { user, events } = response;\n const location = { latitude, longitude, accuracy };\n\n const trackRes: RadarTrackResponse = {\n user,\n events,\n location,\n };\n\n if (options.debug) {\n trackRes.response = response;\n }\n\n return trackRes;\n }\n}\n\nexport default TrackAPI;\n","import AddressesAPI from './api/addresses';\nimport ConfigAPI from './api/config';\nimport ContextAPI from './api/context';\nimport ConversionsAPI from './api/conversions';\nimport GeocodingAPI from './api/geocoding';\nimport RoutingAPI from './api/routing';\nimport SearchAPI from './api/search';\nimport TrackAPI from './api/track';\nimport TripsAPI from './api/trips';\nimport Config from './config';\nimport Device from './device';\nimport * as errors from './errors';\nimport { RadarPublishableKeyError } from './errors';\nimport Http from './http';\nimport Logger from './logger';\nimport Navigator from './navigator';\nimport Session from './session';\nimport Storage from './storage';\nimport SDK_VERSION from './version';\n\nimport type { RadarError } from './errors';\nimport type { RadarPlugin, RadarPluginContext, RadarStatic } from './plugin';\nimport type {\n Location,\n NavigatorPosition,\n RadarAutocompleteParams,\n RadarAutocompleteResponse,\n RadarContextResponse,\n RadarConversionParams,\n RadarConversionResponse,\n RadarDistanceParams,\n RadarForwardGeocodeParams,\n RadarGeocodeResponse,\n RadarIPGeocodeResponse,\n RadarMatrixParams,\n RadarMatrixResponse,\n RadarMetadata,\n RadarOptions,\n RadarReverseGeocodeParams,\n RadarRouteResponse,\n RadarSearchGeofencesParams,\n RadarSearchGeofencesResponse,\n RadarSearchPlacesParams,\n RadarSearchPlacesResponse,\n RadarTrackParams,\n RadarTrackResponse,\n RadarTripOptions,\n RadarTripResponse,\n RadarValidateAddressParams,\n RadarValidateAddressResponse,\n} from './types';\n\nconst isSecretKey = (key: string): boolean => key.includes('_sk_');\nconst isLiveKey = (key: string): boolean => key.includes('_live_');\n\n/**\n * main entry point for the Radar SDK. all methods are static — do not instantiate.\n *\n * @example\n * ```ts\n * Radar.initialize('prj_test_pk_...');\n * const { user, events } = await Radar.trackOnce();\n * ```\n */\nclass Radar {\n private static _plugins: Map<string, RadarPlugin> = new Map();\n\n public static errors = errors;\n\n /** current SDK version string */\n public static get VERSION() {\n return SDK_VERSION;\n }\n\n /** register one or more plugins (e.g. maps, autocomplete, fraud) */\n public static registerPlugin(...plugins: RadarPlugin[]) {\n const ctx = Radar._getPluginContext();\n for (const plugin of plugins) {\n if (Radar._plugins.has(plugin.name)) {\n Logger.warn(`plugin \"${plugin.name}\" already registered.`);\n continue;\n }\n\n plugin.install(ctx);\n Radar._plugins.set(plugin.name, plugin);\n }\n }\n\n private static _getPluginContext(): RadarPluginContext {\n return {\n Radar: Radar as RadarStatic,\n Config,\n Http,\n Storage,\n Device,\n Session,\n Logger,\n Navigator,\n apis: {\n Addresses: AddressesAPI,\n Config: ConfigAPI,\n Context: ContextAPI,\n Conversions: ConversionsAPI,\n Geocoding: GeocodingAPI,\n Routing: RoutingAPI,\n Search: SearchAPI,\n Track: TrackAPI,\n Trips: TripsAPI,\n },\n };\n }\n\n /**\n * initialize the SDK with a publishable key. must be called before any other method.\n * @param publishableKey - your Radar publishable key (starts with `prj_test_pk_` or `prj_live_pk_`)\n * @param options - optional SDK configuration\n * @throws {RadarPublishableKeyError} if the key is missing or is a secret key\n */\n public static initialize(publishableKey: string, options: RadarOptions = {}) {\n if (!publishableKey) {\n throw new RadarPublishableKeyError('Publishable key required in initialization.');\n }\n\n if (isSecretKey(publishableKey)) {\n throw new RadarPublishableKeyError('Secret keys are not allowed. Please use your Radar publishable key.');\n }\n\n // store settings in global config\n const live = isLiveKey(publishableKey);\n const logLevel = live ? 'error' : 'info';\n const debug = !live;\n const radarOptions = Object.assign(\n Config.defaultOptions,\n {\n publishableKey,\n live,\n logLevel,\n debug,\n },\n options,\n );\n Config.setup(radarOptions);\n\n Logger.info(`initialized with ${live ? 'live' : 'test'} publishableKey.`);\n if (options.debug) {\n Logger.debug('using options', options);\n }\n\n // NOTE(jasonl): this allows us to run jest tests\n // without having to mock the ConfigAPI.getConfig call\n if (!window?.RADAR_TEST_ENV) {\n ConfigAPI.getConfig().catch((err) => {\n Logger.warn(`Error calling /config: ${err.message}`);\n });\n }\n }\n\n /** clear all SDK state and configuration */\n public static clear() {\n Config.clear();\n }\n\n ///////////////////////\n // Geofencing Platform\n ///////////////////////\n\n /** set the user ID for tracking. pass `undefined` to clear. */\n public static setUserId(userId?: string) {\n if (!userId) {\n Storage.removeItem(Storage.USER_ID);\n return;\n }\n Storage.setItem(Storage.USER_ID, String(userId).trim());\n }\n\n /** set a description for the current user. pass `undefined` to clear. */\n public static setDescription(description?: string) {\n if (!description) {\n Storage.removeItem(Storage.DESCRIPTION);\n return;\n }\n Storage.setItem(Storage.DESCRIPTION, String(description).trim());\n }\n\n /** set custom metadata for the current user. pass `undefined` to clear. */\n public static setMetadata(metadata?: RadarMetadata) {\n if (!metadata) {\n Storage.removeItem(Storage.METADATA);\n return;\n }\n Storage.setItem(Storage.METADATA, JSON.stringify(metadata));\n }\n\n /** get the device's current location using the browser geolocation API */\n public static getLocation(): Promise<NavigatorPosition> {\n return Navigator.getCurrentPosition();\n }\n\n /** track the user's current location once, returning location context and events */\n public static trackOnce(params: RadarTrackParams = {}): Promise<RadarTrackResponse> {\n try {\n return TrackAPI.trackOnce(params);\n } finally {\n // call with updated permissions\n ConfigAPI.getConfig(params).catch((err) => {\n Logger.warn(`Error calling /config: ${err.message}`);\n });\n }\n }\n\n /** get context (geofences, place, regions) for a location without tracking */\n public static getContext(params: Location): Promise<RadarContextResponse> {\n return ContextAPI.getContext(params);\n }\n\n /** save trip options for tracking. pass `undefined` to clear */\n public static setTripOptions(tripOptions?: RadarTripOptions) {\n TripsAPI.setTripOptions(tripOptions);\n }\n\n /** clear saved trip options */\n public static clearTripOptions() {\n TripsAPI.clearTripOptions();\n }\n\n /** get the currently saved trip options */\n public static getTripOptions(): RadarTripOptions {\n return TripsAPI.getTripOptions();\n }\n\n /** start a new trip with the given options */\n public static startTrip(tripOptions: RadarTripOptions): Promise<RadarTripResponse> {\n return TripsAPI.startTrip(tripOptions);\n }\n\n /** update an in-progress trip */\n public static updateTrip(tripOptions: RadarTripOptions): Promise<RadarTripResponse> {\n return TripsAPI.updateTrip(tripOptions);\n }\n\n /** complete the current trip and clear local trip options */\n public static completeTrip(): Promise<RadarTripResponse> {\n return TripsAPI.completeTrip();\n }\n\n /** cancel the current trip and clear local trip options */\n public static cancelTrip(): Promise<RadarTripResponse> {\n return TripsAPI.cancelTrip();\n }\n\n /** log a conversion event */\n public static logConversion(params: RadarConversionParams): Promise<RadarConversionResponse> {\n return ConversionsAPI.logConversion(params);\n }\n\n /** set the product identifier for tracking requests. pass `undefined` to clear */\n public static setProduct(product?: string) {\n if (!product) {\n Storage.removeItem(Storage.PRODUCT);\n return;\n }\n Storage.setItem(Storage.PRODUCT, String(product).trim());\n }\n\n ///////////////////////\n // Listeners\n ///////////////////////\n\n /** register a global error callback invoked on SDK errors */\n public static onError(callback: (error: RadarError) => void) {\n Config.onError(callback);\n }\n\n /////////////////\n // Maps Platform\n /////////////////\n\n /** geocode an address or place name to coordinates */\n public static forwardGeocode(params: RadarForwardGeocodeParams): Promise<RadarGeocodeResponse> {\n return GeocodingAPI.forwardGeocode(params);\n }\n\n /** reverse geocode coordinates to addresses */\n public static reverseGeocode(params: RadarReverseGeocodeParams): Promise<RadarGeocodeResponse> {\n return GeocodingAPI.reverseGeocode(params);\n }\n\n /** geocode the device's IP address to a rough location */\n public static ipGeocode(): Promise<RadarIPGeocodeResponse> {\n return GeocodingAPI.ipGeocode();\n }\n\n /** autocomplete partial addresses and place names */\n public static autocomplete(params: RadarAutocompleteParams, requestId?: string): Promise<RadarAutocompleteResponse> {\n return SearchAPI.autocomplete(params, requestId);\n }\n\n /** search for geofences near a location */\n public static searchGeofences(params: RadarSearchGeofencesParams): Promise<RadarSearchGeofencesResponse> {\n return SearchAPI.searchGeofences(params);\n }\n\n /** search for places (POIs) near a location */\n public static searchPlaces(params: RadarSearchPlacesParams): Promise<RadarSearchPlacesResponse> {\n return SearchAPI.searchPlaces(params);\n }\n\n /** validate a structured address */\n public static validateAddress(params: RadarValidateAddressParams): Promise<RadarValidateAddressResponse> {\n return AddressesAPI.validateAddress(params);\n }\n\n /** calculate travel distance and duration between two points */\n public static distance(params: RadarDistanceParams): Promise<RadarRouteResponse> {\n return RoutingAPI.distance(params);\n }\n\n /** calculate a distance matrix between multiple origins and destinations */\n public static matrix(params: RadarMatrixParams): Promise<RadarMatrixResponse> {\n return RoutingAPI.matrix(params);\n }\n}\n\nexport default Radar;\n"],"names":["GeocodingAPI"],"mappings":"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"}
package/dist/version.d.ts CHANGED
@@ -1,2 +1,2 @@
1
- declare const _default: "5.0.0-beta.9";
1
+ declare const _default: "5.0.0";
2
2
  export default _default;
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "radar-sdk-js",
3
- "version": "5.0.0-beta.9",
3
+ "version": "5.0.0",
4
4
  "description": "Web Javascript SDK for Radar, location infrastructure for mobile and web apps.",
5
5
  "homepage": "https://radar.com",
6
6
  "license": "ISC",
package/src/version.ts CHANGED
@@ -1 +1 @@
1
- export default '5.0.0-beta.9';
1
+ export default '5.0.0';