@experian-ecs/connected-api-sdk 1.0.1

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.
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.mjs","sources":["../../src/lib/Error.ts","../../src/globals.ts","../../src/lib/ApiClient/ApiClient.ts","../../src/resources/CreditScores/CreditScores.ts","../../src/resources/Entitlements/Entitlements.ts","../../src/resources/CreditAttributes/CreditAttributes.ts","../../src/resources/CreditScoreSimulator/CreditScoreSimulator.ts","../../src/resources/CreditScorePlanner/CreditScorePlanner.ts","../../src/resources/Alerts/Alerts.ts","../../src/resources/CreditReports/CreditReports.ts","../../src/resources/Customers/Customers.ts","../../src/resources/CustomerAuth/CustomerAuth.ts","../../src/resources/Registrations/Registrations.ts","../../src/resources/ProductConfigs/ProductConfigs.ts","../../src/utils.ts","../../src/lib/AuthClient/AuthClient.ts","../../src/lib/SDKClient/SDKClient.ts","../../src/resources/CreditScorePlanner/typeGuards.ts","../../src/resources/CreditScoreSimulator/typeGuards.ts"],"sourcesContent":["export type ConnectedSolutionsAPIErrorData = {\n dev_url: string;\n code: string;\n message: string;\n};\n\nexport type ConnectedSolutionsSDKErrorTypes =\n | 'api_error'\n | 'auth_error'\n | 'sdk_error'\n | 'unknown_error';\n\nexport type ConnectedSolutionsClientRawError = {\n message: string;\n type: ConnectedSolutionsSDKErrorTypes;\n status?: number;\n data?: ConnectedSolutionsAPIErrorData;\n};\n\nfunction generateError(rawError: ConnectedSolutionsClientRawError) {\n switch (rawError.type) {\n case 'api_error':\n return new ConnectedSolutionsClientApiError(rawError);\n case 'auth_error':\n return new ConnectedSolutionsClientAuthError(rawError);\n case 'sdk_error':\n return new ConnectedSolutionsClientSDKError(rawError);\n default:\n return new ConnectedSolutionsClientUnknownError(rawError);\n }\n}\n\nexport class ConnectedSolutionsClientError extends Error {\n readonly message: string;\n readonly data?: ConnectedSolutionsAPIErrorData;\n readonly status?: number;\n\n constructor(raw: ConnectedSolutionsClientRawError) {\n super(raw.message);\n this.message = raw.data?.message || raw.message || '';\n this.data = raw.data;\n this.status = raw.status;\n }\n\n static generateError = generateError;\n}\n\nexport class ConnectedSolutionsClientApiError extends ConnectedSolutionsClientError {\n constructor(args: ConnectedSolutionsClientRawError) {\n super(args);\n this.name = 'ConnectedSolutionsClientApiError';\n }\n}\n\nexport class ConnectedSolutionsClientAuthError extends ConnectedSolutionsClientError {\n constructor(args: ConnectedSolutionsClientRawError) {\n super(args);\n this.name = 'ConnectedSolutionsClientAuthError';\n }\n}\n\nexport class ConnectedSolutionsClientUnknownError extends ConnectedSolutionsClientError {\n constructor(args: ConnectedSolutionsClientRawError) {\n super(args);\n this.name = 'ConnectedSolutionsClientUnknownError';\n }\n}\n\nexport class ConnectedSolutionsClientSDKError extends ConnectedSolutionsClientError {\n constructor(args: ConnectedSolutionsClientRawError) {\n super(args);\n this.name = 'ConnectedSolutionsClientSDKError';\n }\n}\n","export const ENVIRONMENT_URLS = {\n PRODUCTION: 'https://api.ecs.experian.com',\n SANDBOX: 'https://sandbox-api.ecs.experian.com',\n UAT: 'https://uat-api.ecs.experian.com',\n INTEGRATION: 'https://integration-api.ecs.experian.com',\n DEVELOPMENT: 'https://dev-api.ecs.experian.com'\n};\n\nexport const CONTENTSTACK_URLS = {\n PRODUCTION:\n 'https://unity-contentstack.integration.us-exp-api.experiancs.com/',\n SANDBOX: 'https://unity-contentstack.dev.us-exp-api.experiancs.com/'\n};\n","import {\n type ConnectedSolutionsClientApiError,\n type ConnectedSolutionsClientAuthError,\n ConnectedSolutionsClientError,\n type ConnectedSolutionsClientRawError,\n type ConnectedSolutionsClientSDKError,\n type ConnectedSolutionsClientUnknownError,\n type ConnectedSolutionsAPIErrorData\n} from 'lib/Error';\nimport type { ConnectedSolutionsSDKConfig } from 'lib/SDKClient/types';\nimport { CONTENTSTACK_URLS, ENVIRONMENT_URLS } from 'globals';\n\nexport type ConnectedSolutionsClientMeta = {\n status: number;\n statusText: string;\n};\n\nexport type ConnectedSolutionsClientErrors =\n | ConnectedSolutionsClientApiError\n | ConnectedSolutionsClientAuthError\n | ConnectedSolutionsClientUnknownError\n | ConnectedSolutionsClientSDKError;\n\nexport type ApiClientResponse<DataType = Record<string, unknown>> =\n | {\n data: DataType;\n error: undefined;\n meta: ConnectedSolutionsClientMeta;\n }\n | {\n data: undefined;\n error: ConnectedSolutionsClientErrors;\n meta: ConnectedSolutionsClientMeta;\n };\n\nexport class ApiClient {\n config: ConnectedSolutionsSDKConfig;\n baseUrl = '';\n contentstackUrl = '';\n\n constructor(config: ConnectedSolutionsSDKConfig) {\n const defaultEnvironement = 'PRODUCTION';\n const environment = config.environment ?? defaultEnvironement;\n\n this.config = config;\n this.baseUrl = ENVIRONMENT_URLS[environment];\n this.contentstackUrl = CONTENTSTACK_URLS[environment];\n }\n\n #validateConfig(): void {\n if (!this.config.token) {\n const error: ConnectedSolutionsClientRawError = {\n type: 'sdk_error',\n message:\n 'You must first obtain and set a token before using an SDK method'\n };\n\n throw ConnectedSolutionsClientError.generateError(error);\n }\n }\n\n #isJsonResponse(response: Response) {\n return (\n response?.headers.get('content-type')?.includes('application/json') ||\n response?.headers\n .get('content-type')\n ?.includes('application/octet-stream')\n );\n }\n\n public setConfig(partialConfig: Partial<ConnectedSolutionsSDKConfig>) {\n if ('environment' in partialConfig) {\n this.config.environment = partialConfig.environment;\n }\n\n if ('token' in partialConfig) {\n this.config.token = partialConfig.token;\n }\n }\n\n public async fetchWithAuth<DataType>(\n input: RequestInfo,\n init?: RequestInit\n ): Promise<ApiClientResponse<DataType>> {\n try {\n this.#validateConfig();\n const headers =\n typeof Headers !== 'undefined' && new Headers(init?.headers);\n\n // biome-ignore lint/complexity/useLiteralKeys: works\n if (headers && !headers['Authorization']) {\n headers.set('Authorization', `Bearer ${this.config.token}`);\n }\n\n const options = {\n ...init,\n headers: headers ? headers : init?.headers || {}\n };\n\n const response = await this.fetchRequest<DataType>(input, options);\n\n return response;\n } catch (error) {\n const e = error as ConnectedSolutionsClientErrors;\n return {\n data: undefined,\n error: e,\n meta: {\n status: e.status ?? 500,\n statusText: e.message ?? ''\n }\n };\n }\n }\n\n public async fetchRequest<DataType>(\n input: RequestInfo,\n init?: RequestInit\n ): Promise<ApiClientResponse<DataType>> {\n try {\n this.#validateConfig();\n\n const response = await fetch(input, init);\n\n if (!response?.ok) {\n let err: ConnectedSolutionsClientRawError;\n\n const apiError: ConnectedSolutionsClientRawError = {\n type: 'api_error',\n status: response?.status,\n message: response?.statusText\n };\n\n if (\n response?.headers.get('content-type')?.includes('application/json')\n ) {\n const errorResponseClone = response.clone();\n const errorJson = (await errorResponseClone.json()) as {\n error: ConnectedSolutionsAPIErrorData;\n };\n apiError.data = errorJson.error;\n }\n\n if (response?.status === 401) {\n err = {\n ...apiError,\n type: 'auth_error'\n };\n } else {\n err = {\n ...apiError,\n type: 'api_error'\n };\n }\n\n throw ConnectedSolutionsClientError.generateError(err);\n }\n\n if (!this.#isJsonResponse(response)) {\n return {\n data: undefined,\n error: undefined,\n meta: {\n status: response.status,\n statusText: response.statusText\n }\n } as ApiClientResponse<DataType>;\n }\n\n const responseClone = response.clone();\n const json = await responseClone.json();\n\n return {\n data: json,\n error: undefined,\n meta: {\n status: response.status,\n statusText: response.statusText\n }\n };\n } catch (error) {\n const e = error as ConnectedSolutionsClientErrors;\n return {\n data: undefined,\n error: e,\n meta: {\n status: e.status ?? 500,\n statusText: e.message\n }\n };\n }\n }\n}\n","import { ApiClient, type ApiClientResponse } from 'lib/ApiClient';\n\nimport type { CreditScore } from 'resources/CreditScores/types';\nimport type { ConnectedSolutionsSDKConfig } from 'lib/SDKClient/types';\n\nexport class CreditScoresService extends ApiClient {\n static #basePath = '/v1/credit/scores';\n\n constructor(config: ConnectedSolutionsSDKConfig) {\n super(config);\n }\n\n async getCreditScores(\n options?: {\n product_config_id?: string;\n include_factors?: boolean;\n include_ingredients?: boolean;\n },\n fetchOptions?: RequestInit\n ): Promise<ApiClientResponse<CreditScore[]>> {\n const searchOptions: {\n product_config_id?: string;\n include_factors?: string;\n include_ingredients?: string;\n } = {\n ...(options?.product_config_id\n ? { product_config_id: options.product_config_id }\n : {}),\n ...(options?.include_factors\n ? { include_factors: options.include_factors.toString() }\n : {}),\n ...(options?.include_ingredients\n ? { include_ingredients: options.include_ingredients.toString() }\n : {})\n };\n const query = new URLSearchParams(searchOptions).toString();\n const queryString = query ? `?${query}` : '';\n const endpoint = `${this.baseUrl}${CreditScoresService.#basePath}${queryString}`;\n\n return this.fetchWithAuth(endpoint, fetchOptions);\n }\n\n async orderCreditScore(\n requestOptions: {\n product_config_id: string;\n include_factors?: boolean;\n include_ingredients?: boolean;\n },\n fetchOptions?: RequestInit\n ): Promise<ApiClientResponse<CreditScore>> {\n const searchOptions: {\n include_factors?: string;\n include_ingredients?: string;\n } = {\n ...(requestOptions?.include_factors\n ? { include_factors: requestOptions.include_factors.toString() }\n : {}),\n ...(requestOptions?.include_ingredients\n ? { include_ingredients: requestOptions.include_ingredients.toString() }\n : {})\n };\n const query = new URLSearchParams(searchOptions).toString();\n const queryString = query ? `?${query}` : '';\n const endpoint = `${this.baseUrl}${CreditScoresService.#basePath}?${queryString}`;\n\n return this.fetchWithAuth(endpoint, {\n method: 'POST',\n headers: {\n ...(fetchOptions?.headers ?? {}),\n 'Content-Type': 'application/json'\n },\n body: JSON.stringify({\n product_config_id: requestOptions.product_config_id\n }),\n ...(fetchOptions ?? {})\n });\n }\n}\n","import { ApiClient, type ApiClientResponse } from 'lib/ApiClient/ApiClient';\nimport type { ConnectedSolutionsSDKConfig } from 'lib/SDKClient/types';\nimport type {\n Entitlement,\n Entitlements,\n ProductEligibility,\n EntitleCustomerResponse\n} from 'resources/Entitlements/types';\n\nexport class EntitlementsService extends ApiClient {\n static #basePath = '/v1/entitlements';\n\n constructor(config: ConnectedSolutionsSDKConfig) {\n super(config);\n }\n\n async getEntitlements(\n requestOptions: { customer_id: string },\n fetchOptions?: RequestInit\n ): Promise<ApiClientResponse<Entitlements>> {\n return this.fetchWithAuth(\n `${this.baseUrl}${EntitlementsService.#basePath}?customer_id=${requestOptions.customer_id}`,\n fetchOptions\n );\n }\n\n async getEntitlementById(\n { entitlement_id }: { entitlement_id: string },\n fetchOptions?: RequestInit\n ): Promise<ApiClientResponse<Entitlement>> {\n return this.fetchWithAuth(\n `${this.baseUrl}${EntitlementsService.#basePath}/${entitlement_id}`,\n fetchOptions\n );\n }\n\n async createEntitlement(\n requestOptions: {\n name: string;\n description: string;\n product_config_ids: string[];\n customer_id: string;\n },\n fetchOptions?: RequestInit\n ): Promise<ApiClientResponse<Entitlement>> {\n return this.fetchWithAuth(\n `${this.baseUrl}${EntitlementsService.#basePath}`,\n {\n method: 'POST',\n headers: {\n ...(fetchOptions?.headers ?? {}),\n 'Content-Type': 'application/json'\n },\n body: JSON.stringify(requestOptions),\n ...(fetchOptions ?? {})\n }\n );\n }\n\n async updateEntitlement(\n requestOptions: {\n entitlement_id: string;\n product_config_ids: string[];\n customer_id: string;\n },\n fetchOptions?: RequestInit\n ): Promise<ApiClientResponse<Entitlement>> {\n const { entitlement_id, ...body } = requestOptions;\n return this.fetchWithAuth(\n `${this.baseUrl}${EntitlementsService.#basePath}/${entitlement_id}`,\n {\n method: 'PUT',\n headers: {\n ...(fetchOptions?.headers ?? {}),\n 'Content-Type': 'application/json'\n },\n body: JSON.stringify(body),\n ...(fetchOptions ?? {})\n }\n );\n }\n\n async deleteEntitlement(\n { entitlement_id }: { entitlement_id: string },\n fetchOptions?: RequestInit\n ): Promise<ApiClientResponse> {\n return this.fetchWithAuth(\n `${this.baseUrl}${EntitlementsService.#basePath}/${entitlement_id}`,\n {\n method: 'DELETE',\n ...(fetchOptions ?? {})\n }\n );\n }\n\n async activateEntitlement(\n { entitlement_id }: { entitlement_id: string },\n fetchOptions?: RequestInit\n ): Promise<ApiClientResponse<Entitlement>> {\n const endpoint = `${this.baseUrl}${EntitlementsService.#basePath}/${entitlement_id}/activate`;\n return this.fetchWithAuth(endpoint, {\n method: 'POST',\n ...(fetchOptions ?? {})\n });\n }\n\n async entitleCustomerToNewProduct(\n requestOptions: {\n product_config_id: string;\n entitlement_id: string;\n customer_id: string;\n },\n fetchOptions?: RequestInit\n ): Promise<ApiClientResponse<EntitleCustomerResponse>> {\n const { product_config_id, entitlement_id, customer_id } = requestOptions;\n const endpoint = `${this.baseUrl}${EntitlementsService.#basePath}/${entitlement_id}/products/${product_config_id}/activate`;\n return this.fetchWithAuth(endpoint, {\n method: 'POST',\n ...(fetchOptions ?? {}),\n headers: {\n ...(fetchOptions?.headers ?? {}),\n 'X-Customer-ID': customer_id\n }\n });\n }\n\n async activateProduct(\n requestOptions: {\n product_config_id: string;\n entitlement_id: string;\n },\n fetchOptions?: RequestInit\n ): Promise<ApiClientResponse<Entitlement>> {\n const { product_config_id, entitlement_id } = requestOptions;\n const endpoint = `${this.baseUrl}${EntitlementsService.#basePath}/${entitlement_id}/products/${product_config_id}/activate`;\n return this.fetchWithAuth(endpoint, {\n method: 'POST',\n ...(fetchOptions ?? {})\n });\n }\n\n async getProductEligibility(\n requestOptions: { product_config_id: string; customer_id: string },\n fetchOptions?: RequestInit\n ): Promise<ApiClientResponse<ProductEligibility>> {\n const search = new URLSearchParams(requestOptions).toString();\n const endpoint = `${this.baseUrl}${EntitlementsService.#basePath}/eligibility?${search}`;\n return this.fetchWithAuth(endpoint, fetchOptions);\n }\n}\n","import { ApiClient, type ApiClientResponse } from 'lib/ApiClient';\n\nimport type { CreditAttributes } from 'resources/CreditAttributes/types';\nimport type { ConnectedSolutionsSDKConfig } from 'lib/SDKClient/types';\n\nexport class CreditAttributesService extends ApiClient {\n /**\n * Update the path below to the endpoint of the service you are adding\n */\n static #basePath = '/v1/credit/attributes';\n\n constructor(config: ConnectedSolutionsSDKConfig) {\n super(config);\n }\n\n async getCreditAttributes(\n fetchOptions?: RequestInit\n ): Promise<ApiClientResponse<CreditAttributes[]>> {\n const endpoint = `${this.baseUrl}${CreditAttributesService.#basePath}`;\n\n return this.fetchWithAuth(endpoint, fetchOptions);\n }\n}\n","import { ApiClient, type ApiClientResponse } from 'lib/ApiClient';\n\nimport type {\n CreditScoreSimulator,\n CreditScoreSimulatorPostRequest,\n CreditScoreSimulatorPostResponse,\n SimulationCategoryType\n} from 'resources/CreditScoreSimulator/types';\nimport type { ConnectedSolutionsSDKConfig } from 'lib/SDKClient/types';\n\nexport class CreditScoreSimulatorService extends ApiClient {\n static #basePath = '/v1/credit/tools/simulator';\n\n constructor(config: ConnectedSolutionsSDKConfig) {\n super(config);\n }\n\n async getSimulations(\n requestOptions: {\n product_config_id: string;\n run_all?: boolean;\n cateogory?: SimulationCategoryType;\n },\n fetchOptions?: RequestInit\n ): Promise<ApiClientResponse<CreditScoreSimulator>> {\n const searchOptions = {\n ...requestOptions,\n ...(requestOptions?.run_all\n ? { run_all: requestOptions.run_all.toString() }\n : {})\n } as Record<string, string>;\n\n const query = new URLSearchParams(searchOptions).toString();\n const queryString = query ? `?${query}` : '';\n const endpoint = `${this.baseUrl}${CreditScoreSimulatorService.#basePath}${queryString}`;\n\n return this.fetchWithAuth(endpoint, fetchOptions);\n }\n\n async simulateScenario(\n requestOptions: CreditScoreSimulatorPostRequest & {\n product_config_id: string;\n },\n fetchOptions?: RequestInit\n ): Promise<ApiClientResponse<CreditScoreSimulatorPostResponse>> {\n const { product_config_id, ...requestBody } = requestOptions;\n const query = new URLSearchParams({ product_config_id }).toString();\n const queryString = query ? `?${query}` : '';\n return this.fetchWithAuth(\n `${this.baseUrl}${CreditScoreSimulatorService.#basePath}${queryString}`,\n {\n method: 'POST',\n headers: {\n ...(fetchOptions?.headers ?? {}),\n 'Content-Type': 'application/json'\n },\n body: JSON.stringify(requestBody),\n ...(fetchOptions ?? {})\n }\n );\n }\n}\n","import { ApiClient, type ApiClientResponse } from 'lib/ApiClient';\n\nimport type {\n CreditScorePlan,\n ScorePlanCreateResponse,\n ScorePlanRevision,\n ScorePlanRevisionsRequest\n} from 'resources/CreditScorePlanner/types';\nimport type { ConnectedSolutionsSDKConfig } from 'lib/SDKClient/types';\n\nexport class CreditScorePlannerService extends ApiClient {\n static #basePath = '/v1/credit/tools/planners';\n static #revisionPath = '/revisions';\n\n constructor(config: ConnectedSolutionsSDKConfig) {\n super(config);\n }\n\n async getCreditScorePlan(\n requestOptions: { product_config_id: string },\n fetchOptions?: RequestInit\n ): Promise<ApiClientResponse<CreditScorePlan>> {\n const query = new URLSearchParams(requestOptions).toString();\n const queryString = query ? `?${query}` : '';\n const endpoint = `${this.baseUrl}${CreditScorePlannerService.#basePath}${queryString}`;\n\n return this.fetchWithAuth(endpoint, {\n ...(fetchOptions ?? {})\n });\n }\n\n async createCreditScorePlan(\n requestOptions: ScorePlanRevision & { product_config_id: string },\n fetchOptions?: RequestInit\n ): Promise<ApiClientResponse<ScorePlanCreateResponse>> {\n const { product_config_id, ...requestBody } = requestOptions;\n const query = new URLSearchParams({ product_config_id }).toString();\n const queryString = query ? `?${query}` : '';\n const endpoint = `${this.baseUrl}${CreditScorePlannerService.#basePath}${queryString}`;\n\n return this.fetchWithAuth(endpoint, {\n method: 'POST',\n headers: {\n ...(fetchOptions?.headers ?? {}),\n 'Content-Type': 'application/json'\n },\n body: JSON.stringify(requestBody),\n ...(fetchOptions ?? {})\n });\n }\n\n async deleteCreditScorePlan(\n requestOptions: { product_config_id: string },\n fetchOptions?: RequestInit\n ): Promise<ApiClientResponse<void>> {\n const query = new URLSearchParams(requestOptions).toString();\n const queryString = query ? `?${query}` : '';\n const endpoint = `${this.baseUrl}${CreditScorePlannerService.#basePath}${queryString}`;\n\n return this.fetchWithAuth(endpoint, {\n method: 'DELETE',\n ...(fetchOptions ?? {})\n });\n }\n\n async getCreditScorePlanRevisions(\n requestOptions: ScorePlanRevisionsRequest & { product_config_id: string },\n fetchOptions?: RequestInit\n ): Promise<ApiClientResponse<ScorePlanRevision[]>> {\n const { product_config_id, ...requestBody } = requestOptions;\n const query = new URLSearchParams({ product_config_id }).toString();\n const queryString = query ? `?${query}` : '';\n const endpoint = `${this.baseUrl}${CreditScorePlannerService.#basePath}${CreditScorePlannerService.#revisionPath}${queryString}`;\n\n return this.fetchWithAuth(endpoint, {\n method: 'POST',\n body: JSON.stringify(requestBody),\n headers: {\n ...(fetchOptions?.headers ?? {}),\n 'Content-Type': 'application/json'\n },\n ...(fetchOptions ?? {})\n });\n }\n}\n","import { ApiClient, type ApiClientResponse } from 'lib/ApiClient';\n\nimport type { Alert, Alerts, TotalAlertCounts } from 'resources/Alerts/types';\nimport type { ConnectedSolutionsSDKConfig } from 'lib/SDKClient/types';\n\nexport class AlertsService extends ApiClient {\n static #basePath = '/v1/events-alerts';\n\n constructor(config: ConnectedSolutionsSDKConfig) {\n super(config);\n }\n\n async getAlerts(\n requestOptions?: {\n page_limit: number;\n next_page_token: string | null;\n disposition_status?: 'READ' | 'UNREAD';\n },\n fetchOptions?: RequestInit\n ): Promise<ApiClientResponse<Alerts>> {\n const options = {\n page_limit: '10',\n next_page_token: '',\n ...(requestOptions ?? {})\n } as Record<string, string>;\n\n const query = new URLSearchParams(options).toString();\n\n const endpoint = `${this.baseUrl}${AlertsService.#basePath}?${query}`;\n\n return this.fetchWithAuth(endpoint, fetchOptions);\n }\n\n async getAlertById(\n { id }: { id: string },\n fetchOptions?: RequestInit\n ): Promise<ApiClientResponse<Alert>> {\n const endpoint = `${this.baseUrl}${AlertsService.#basePath}/${id}`;\n return this.fetchWithAuth(endpoint, fetchOptions);\n }\n\n async markAlertAsRead(\n { id }: { id: string },\n fetchOptions?: RequestInit\n ): Promise<ApiClientResponse<Alert>> {\n const endpoint = `${this.baseUrl}${AlertsService.#basePath}/${id}/dispose`;\n return this.fetchWithAuth(endpoint, {\n method: 'PATCH',\n ...(fetchOptions ?? {})\n });\n }\n\n async getAlertCounts(\n fetchOptions?: RequestInit\n ): Promise<ApiClientResponse<TotalAlertCounts>> {\n const endpoint = `${this.baseUrl}${AlertsService.#basePath}/counts`;\n return this.fetchWithAuth(endpoint, fetchOptions);\n }\n}\n","import { ApiClient, type ApiClientResponse } from 'lib/ApiClient';\n\nimport type { ConnectedSolutionsSDKConfig } from 'lib/SDKClient/types';\nimport type {\n CreditReportMeta,\n CreditReport\n} from 'resources/CreditReports/types';\n\nexport class CreditReportsService extends ApiClient {\n static #basePath = '/v1/credit/reports';\n\n constructor(config: ConnectedSolutionsSDKConfig) {\n super(config);\n }\n\n async getReports(\n requestOptions?: {\n product_config_id?: string;\n include_fields?: string;\n report_date?: string;\n report_between?: string;\n },\n fetchOptions?: RequestInit\n ): Promise<ApiClientResponse<CreditReport[]>> {\n const query = new URLSearchParams(requestOptions).toString();\n const queryString = query ? `?${query}` : '';\n const endpoint = `${this.baseUrl}${CreditReportsService.#basePath}${queryString}`;\n\n return this.fetchWithAuth(endpoint, fetchOptions);\n }\n\n async getReportById(\n requestOptions: {\n id: string;\n include_fields?: string;\n },\n fetchOptions?: RequestInit\n ): Promise<ApiClientResponse<CreditReport>> {\n const { id, ...searchOptions } = requestOptions;\n const query = new URLSearchParams(searchOptions).toString();\n const queryString = query ? `?${query}` : '';\n const endpoint = `${this.baseUrl}${CreditReportsService.#basePath}/${requestOptions.id}${queryString}`;\n\n return this.fetchWithAuth(endpoint, fetchOptions);\n }\n\n async getReportsMeta(\n requestOptions?: {\n product_config_id?: string;\n report_date?: string;\n report_between?: string;\n latest_only?: boolean;\n report_read?: boolean;\n },\n fetchOptions?: RequestInit\n ): Promise<ApiClientResponse<CreditReportMeta[]>> {\n const { latest_only, report_read, ...options } = requestOptions ?? {};\n\n const searchOptions: {\n product_config_id?: string;\n report_date?: string;\n report_between?: string;\n latest_only?: string;\n report_read?: string;\n } = {\n ...(options ?? {}),\n ...(latest_only ? { latest_only: latest_only.toString() } : {}),\n ...(report_read ? { report_read: report_read.toString() } : {})\n };\n\n const query = new URLSearchParams(searchOptions).toString();\n const queryString = query ? `?${query}` : '';\n const endpoint = `${this.baseUrl}${CreditReportsService.#basePath}/meta${queryString}`;\n\n return this.fetchWithAuth(endpoint, fetchOptions);\n }\n\n async getReportMetaById(\n requestOptions: {\n id: string;\n product_config_id?: string;\n include_fields?: string;\n },\n fetchOptions?: RequestInit\n ): Promise<ApiClientResponse<CreditReportMeta>> {\n const { id, ...searchOptions } = requestOptions;\n const query = new URLSearchParams(searchOptions).toString();\n const queryString = query ? `?${query}` : '';\n const endpoint = `${this.baseUrl}${CreditReportsService.#basePath}/${id}/meta${queryString}`;\n\n return this.fetchWithAuth(endpoint, fetchOptions);\n }\n\n async markReportAsRead(\n requestOptions: {\n id: string;\n },\n fetchOptions?: RequestInit\n ): Promise<ApiClientResponse> {\n const endpoint = `${this.baseUrl}${CreditReportsService.#basePath}/${requestOptions.id}/read`;\n\n return this.fetchWithAuth(endpoint, {\n method: 'PUT',\n ...(fetchOptions ?? {})\n });\n }\n\n async orderReport(\n requestOptions: {\n product_config_id: string;\n include_fields?: string;\n },\n fetchOptions?: RequestInit\n ): Promise<ApiClientResponse<CreditReport>> {\n const searchOptions = {\n ...(requestOptions.include_fields\n ? { include_fields: requestOptions.include_fields.toString() }\n : {})\n };\n const query = new URLSearchParams(searchOptions).toString();\n const queryString = query ? `?${query}` : '';\n const endpoint = `${this.baseUrl}${CreditReportsService.#basePath}${queryString}`;\n\n return this.fetchWithAuth(endpoint, {\n method: 'POST',\n headers: {\n ...(fetchOptions?.headers ?? {}),\n 'Content-Type': 'application/json'\n },\n body: JSON.stringify({\n product_config_id: requestOptions.product_config_id\n }),\n ...(fetchOptions ?? {})\n });\n }\n}\n","import { ApiClient, type ApiClientResponse } from 'lib/ApiClient';\n\nimport type { ConnectedSolutionsSDKConfig } from 'lib/SDKClient/types';\nimport type {\n CreateCustomerOptions,\n Customer,\n CustomerSearchOptions,\n CustomerSearchResults\n} from 'resources/Customers/types';\n\nexport class CustomersService extends ApiClient {\n static #basePath = '/v1/customers';\n\n constructor(config: ConnectedSolutionsSDKConfig) {\n super(config);\n }\n\n async getCustomerById(\n requestOptions: { customer_id: string },\n fetchOptions?: RequestInit\n ): Promise<ApiClientResponse<Customer>> {\n const endpoint = `${this.baseUrl}${CustomersService.#basePath}/${requestOptions.customer_id}`;\n return this.fetchWithAuth(endpoint, fetchOptions);\n }\n\n async updateCustomer(\n requestOptions: Pick<Customer, 'customer_id'> &\n Partial<Omit<Customer, 'customer_id'>>,\n fetchOptions?: RequestInit\n ): Promise<ApiClientResponse<Customer>> {\n const { customer_id, ...updates } = requestOptions;\n const endpoint = `${this.baseUrl}${CustomersService.#basePath}/${customer_id}`;\n return this.fetchWithAuth(endpoint, {\n method: 'PATCH',\n headers: {\n ...(fetchOptions?.headers ?? {}),\n 'Content-Type': 'application/json'\n },\n body: JSON.stringify(updates ?? {}),\n ...(fetchOptions ?? {})\n });\n }\n\n async deleteCustomer(\n requestOptions: { customer_id: string },\n fetchOptions?: RequestInit\n ): Promise<ApiClientResponse> {\n const endpoint = `${this.baseUrl}${CustomersService.#basePath}/${requestOptions.customer_id}`;\n return this.fetchWithAuth(endpoint, {\n method: 'DELETE',\n ...(fetchOptions ?? {})\n });\n }\n\n async createCustomer(\n requestOptions: CreateCustomerOptions,\n fetchOptions?: RequestInit\n ): Promise<ApiClientResponse<Customer>> {\n const endpoint = `${this.baseUrl}${CustomersService.#basePath}`;\n return this.fetchWithAuth(endpoint, {\n method: 'POST',\n headers: {\n ...(fetchOptions?.headers ?? {}),\n 'Content-Type': 'application/json'\n },\n body: JSON.stringify(requestOptions ?? {}),\n ...(fetchOptions ?? {})\n });\n }\n\n async searchCustomers(\n requestOptions: CustomerSearchOptions,\n fetchOptions?: RequestInit\n ): Promise<ApiClientResponse<CustomerSearchResults>> {\n const { next_cursor = '', ...searchOptions } = requestOptions;\n const endpoint = `${this.baseUrl}${CustomersService.#basePath}/search`;\n\n return this.fetchWithAuth(endpoint, {\n method: 'POST',\n headers: {\n ...(fetchOptions?.headers ?? {}),\n 'Content-Type': 'application/json'\n },\n body: JSON.stringify({ next_cursor, ...(searchOptions ?? {}) }),\n ...(fetchOptions ?? {})\n });\n }\n}\n","import { ApiClient } from 'lib/ApiClient';\nimport type {\n ApiClientResponse,\n ConnectedSolutionsSDKConfig\n} from 'lib/SDKClient/types';\nimport type {\n AuthAnswersRequest,\n AuthQuestions\n} from 'resources/CustomerAuth/types';\n\nexport class CustomerAuthService extends ApiClient {\n static #basePath = '/v1/authentication';\n\n constructor(config: ConnectedSolutionsSDKConfig) {\n super(config);\n }\n\n async getAuthQuestions(\n fetchOptions?: RequestInit\n ): Promise<ApiClientResponse<AuthQuestions>> {\n const endpoint = `${this.baseUrl}${CustomerAuthService.#basePath}/questions`;\n return this.fetchWithAuth(endpoint, fetchOptions);\n }\n\n async submitAuthAnswers(\n answers: AuthAnswersRequest,\n fetchOptions?: RequestInit\n ): Promise<ApiClientResponse> {\n const endpoint = `${this.baseUrl}${CustomerAuthService.#basePath}/questions`;\n return this.fetchWithAuth(endpoint, {\n method: 'POST',\n headers: {\n ...(fetchOptions?.headers ?? {}),\n 'Content-Type': 'application/json'\n },\n body: JSON.stringify(answers),\n ...(fetchOptions ?? {})\n });\n }\n}\n","import { ApiClient, type ApiClientResponse } from 'lib/ApiClient';\n\nimport type { ConnectedSolutionsSDKConfig } from 'lib/SDKClient/types';\n\nimport type {\n CreateRegistrationsRequest,\n CreateRegistrationsResponse\n} from 'resources/Registrations/types';\n\nexport class RegistrationsService extends ApiClient {\n static #basePath = '/v1/registrations';\n\n constructor(config: ConnectedSolutionsSDKConfig) {\n super(config);\n }\n\n async createRegistration(\n requestOptions: CreateRegistrationsRequest,\n fetchOptions?: RequestInit\n ): Promise<ApiClientResponse<CreateRegistrationsResponse>> {\n const endpoint = `${this.baseUrl}${RegistrationsService.#basePath}`;\n return this.fetchWithAuth(endpoint, {\n method: 'POST',\n headers: {\n ...(fetchOptions?.headers ?? {}),\n 'Content-Type': 'application/json'\n },\n body: JSON.stringify(requestOptions ?? {}),\n ...(fetchOptions ?? {})\n });\n }\n}\n","import { ApiClient, type ApiClientResponse } from 'lib/ApiClient';\n\nimport type {\n ProductConfig,\n ProductConfigs\n} from 'resources/ProductConfigs/types';\nimport type { ConnectedSolutionsSDKConfig } from 'lib/SDKClient/types';\n\nexport class ProductConfigsService extends ApiClient {\n static #basePath = '/v1/product-configs';\n\n constructor(config: ConnectedSolutionsSDKConfig) {\n super(config);\n }\n\n async getProductConfigs(\n fetchOptions?: RequestInit\n ): Promise<ApiClientResponse<ProductConfigs>> {\n const endpoint = `${this.baseUrl}${ProductConfigsService.#basePath}`;\n\n return this.fetchWithAuth(endpoint, {\n ...(fetchOptions ? fetchOptions : {})\n });\n }\n\n async getProductConfigById(\n requestOptions: { product_config_id: string },\n fetchOptions?: RequestInit\n ): Promise<ApiClientResponse<ProductConfig>> {\n const endpoint = `${this.baseUrl}${ProductConfigsService.#basePath}/${requestOptions.product_config_id}`;\n\n return this.fetchWithAuth(endpoint, {\n ...(fetchOptions ?? {})\n });\n }\n}\n","export function pascalToCamelCase(name: string): string {\n const result = `${name[0].toLowerCase()}${name.substring(1)}`.replace(\n 'Service',\n ''\n );\n\n return result;\n}\n\nexport const isNode =\n typeof process !== 'undefined' &&\n process.versions &&\n process.versions.node &&\n typeof window === 'undefined';\n","import {\n ConnectedSolutionsClientError,\n type ConnectedSolutionsClientRawError,\n type ConnectedSolutionsAPIErrorData\n} from 'lib/Error';\nimport { ENVIRONMENT_URLS } from 'src/globals';\nimport type { ConnectedSolutionsSDKConfig } from 'lib/SDKClient';\nimport { isNode } from 'utils';\n\nexport type BearerToken = {\n access_token: string;\n token_type: string;\n expires_in: number;\n expires: string;\n};\n\nexport type AuthCredentials = {\n grantType: 'client_credentials' | 'trusted_partner';\n clientId: string;\n clientSecret: string;\n customerId?: string;\n};\n\nexport type AuthServiceConfig = Omit<ConnectedSolutionsSDKConfig, 'token'>;\n\nexport class AuthService {\n config: AuthServiceConfig;\n #cache: Map<string, Promise<Response>>;\n #ttl: number | null = null;\n baseUrl = '';\n\n static #basePath = '/v1/oauth2/token';\n\n constructor(config: AuthServiceConfig) {\n this.config = config;\n this.baseUrl = ENVIRONMENT_URLS[config.environment ?? 'PRODUCTION'];\n this.#cache = new Map();\n }\n\n public async getAccessToken(credentials: AuthCredentials) {\n const isBrowser = !isNode;\n\n if (isBrowser) {\n throw ConnectedSolutionsClientError.generateError({\n type: 'sdk_error',\n message: 'getAccessToken is not supported in browser'\n });\n }\n\n try {\n const response = await this.#fetchToken(credentials);\n\n return {\n data: response,\n errors: undefined,\n meta: {\n status: 200,\n statusText: 'OK'\n }\n };\n } catch (e) {\n // don't cache errors\n this.clearCache();\n return {\n data: undefined,\n error: e,\n meta: {\n status: e.status,\n statusText: e.message\n }\n };\n }\n }\n\n public getCacheLength() {\n return this.#cache.size;\n }\n\n public clearCache(): void {\n const endpoint = `${this.baseUrl}${AuthService.#basePath}`;\n\n const cacheKeys = Array.from(this.#cache.keys()).filter((key) =>\n key.includes(endpoint)\n );\n\n for (const key of cacheKeys) {\n this.#cache.delete(key);\n }\n }\n\n async #fetchToken({\n grantType,\n clientId,\n clientSecret,\n customerId\n }: AuthCredentials) {\n this.#checkTokenExpiry();\n\n const endpoint = `${this.baseUrl}${AuthService.#basePath}`;\n\n const options = {\n method: 'POST',\n headers: { 'content-type': 'application/json' },\n credentials: 'include' as RequestCredentials,\n body: JSON.stringify({\n grant_type: grantType,\n client_id: clientId,\n client_secret: clientSecret,\n partner_customer_id: customerId ?? ''\n })\n };\n\n const tokenRequest = await this.#executeRequest(endpoint, options);\n\n if (tokenRequest?.ok) {\n const tokenRequestClone = tokenRequest.clone();\n const accessToken = (await tokenRequestClone.json()) as BearerToken;\n\n if (this.#ttl === null) {\n this.#setTTL(accessToken.expires_in);\n }\n\n return accessToken;\n }\n\n // response was not ok\n let err: ConnectedSolutionsClientRawError;\n\n const errorMeta = {\n status: tokenRequest?.status,\n message: tokenRequest?.statusText || '',\n data: undefined\n };\n\n if (tokenRequest?.status === 401) {\n err = {\n type: 'auth_error',\n ...errorMeta\n };\n } else {\n err = {\n type: 'api_error',\n ...errorMeta\n };\n }\n\n if (\n tokenRequest?.headers.get('content-type')?.includes('application/json')\n ) {\n const errorResponseClone = tokenRequest.clone();\n const errorJson = (await errorResponseClone.json()) as {\n error: ConnectedSolutionsAPIErrorData;\n };\n err.data = errorJson.error;\n }\n\n throw ConnectedSolutionsClientError.generateError(err);\n }\n\n #setTTL(value: number | null) {\n const now = new Date().getTime();\n const oneHourInMilliseconds = 60 * 60 * 1000;\n const nextTimestamp = now + oneHourInMilliseconds;\n const nextState =\n value === null ? value : new Date(nextTimestamp).valueOf();\n\n this.#ttl = nextState;\n }\n\n #checkTokenExpiry() {\n const now = new Date(Date.now());\n const expires = new Date(this.#ttl ?? Number.NaN);\n const isTokenExpired = isAfter(now, expires);\n\n if (isTokenExpired) {\n this.#setTTL(null);\n this.#cache.clear();\n }\n }\n\n async #executeRequest(\n input: RequestInfo,\n init?: RequestInit\n ): Promise<Response | undefined> {\n const cacheKey = `${input}${JSON.stringify(init || {})}`;\n\n if (!this.#cache.has(cacheKey)) {\n const promise = fetch(input, init ?? {});\n this.#cache.set(cacheKey, promise);\n }\n\n return await this.#cache.get(cacheKey);\n }\n}\n\nfunction isAfter(date1: Date, date2: Date) {\n return date1 > date2;\n}\n","import * as resources from 'resources';\nimport { pascalToCamelCase } from 'utils';\nimport type { CreditScoresService } from 'resources/CreditScores';\nimport type { EntitlementsService } from 'resources/Entitlements';\nimport type {\n ConnectedSolutionsSDK,\n ConnectedSolutionsSDKConfig\n} from 'lib/SDKClient/types';\nimport type { CreditScoreSimulatorService } from 'resources/CreditScoreSimulator/CreditScoreSimulator';\nimport type { CreditScorePlannerService } from 'resources/CreditScorePlanner';\nimport type { CreditAttributesService } from 'resources/CreditAttributes/CreditAttributes';\nimport { AuthService } from 'lib/AuthClient/AuthClient';\nimport { ApiClient } from 'lib/ApiClient';\nimport type { AlertsService } from 'resources/Alerts';\nimport type { CreditReportsService } from 'resources/CreditReports';\nimport type { CustomersService } from 'resources/Customers';\nimport type { CustomerAuthService } from 'resources/CustomerAuth';\nimport type { RegistrationsService } from 'resources/Registrations';\nimport type { ProductConfigsService } from 'resources/ProductConfigs';\n// new service imports go here\n\nexport class SDKClient extends ApiClient implements ConnectedSolutionsSDK {\n static #instance: SDKClient | null = null;\n alerts: AlertsService;\n auth: AuthService;\n creditReports: CreditReportsService;\n creditScores: CreditScoresService;\n creditAttributes: CreditAttributesService;\n creditScorePlanner: CreditScorePlannerService;\n creditScoreSimulator: CreditScoreSimulatorService;\n customerAuth: CustomerAuthService;\n customers: CustomersService;\n entitlements: EntitlementsService;\n productConfigs: ProductConfigsService;\n registrations: RegistrationsService;\n // new services go here\n\n // The method is static as we need to access the method only through the class here\n static getInstance(config: ConnectedSolutionsSDKConfig): SDKClient {\n // if instance is already created return that otherwise create it\n if (SDKClient.#instance) {\n return SDKClient.#instance;\n }\n\n SDKClient.#instance = new SDKClient(config);\n return SDKClient.#instance;\n }\n\n static clearInstance() {\n SDKClient.#instance = null;\n }\n\n // constructor is private so that no other class can access it.\n private constructor(config: ConnectedSolutionsSDKConfig) {\n super(config);\n for (const name in resources) {\n if (typeof resources[name] === 'function') {\n this[pascalToCamelCase(name)] = new resources[name](config);\n }\n }\n\n this.auth = new AuthService({\n environment: config.environment\n });\n }\n}\n\nexport function createSDK(userConfig: ConnectedSolutionsSDKConfig) {\n return SDKClient.getInstance(userConfig);\n}\n","import type {\n CreditScorePlan,\n FicoCreditScorePlanCompleted,\n VantageCreditScorePlanCompleted,\n FicoCreditScorePlanSet,\n VantageCreditScorePlanSet,\n VantageCreditScorePlan,\n FicoCreditScorePlan,\n ScorePlanRevisionsRequest,\n FicoScorePlanRevisionsRequest,\n VantageScorePlanRevisionsRequest,\n ScorePlanRevision,\n FicoScorePlanRevision,\n VantageScorePlanRevision\n} from 'resources/CreditScorePlanner/types';\n\nexport function isPlanCompleted(\n plan: CreditScorePlan\n): plan is FicoCreditScorePlanCompleted | VantageCreditScorePlanCompleted {\n return (\n plan.progress_status === 'TARGET_NOT_MET' ||\n plan.progress_status === 'COMPLETED'\n );\n}\n\nexport function isPlanSet(\n plan: CreditScorePlan\n): plan is\n | FicoCreditScorePlanCompleted\n | FicoCreditScorePlanSet\n | VantageCreditScorePlanCompleted\n | VantageCreditScorePlanSet {\n return (\n isPlanCompleted(plan) ||\n plan.progress_status === 'TARGET_SCORE_AND_PLAN_SET' ||\n plan.progress_status === 'ON_TRACK' ||\n plan.progress_status === 'OFF_TRACK'\n );\n}\n\nexport function isVantagePlan(\n plan: CreditScorePlan\n): plan is VantageCreditScorePlan {\n return plan.score_model.includes('VANTAGE');\n}\n\nexport function isFicoPlan(plan: CreditScorePlan): plan is FicoCreditScorePlan {\n return plan.score_model.includes('FICO');\n}\n\nexport function isFicoRevisionsRequest(\n request: ScorePlanRevisionsRequest\n): request is FicoScorePlanRevisionsRequest {\n return (request as FicoScorePlanRevisionsRequest).target_score !== undefined;\n}\n\nexport function isVantageRevisionsRequest(\n request: ScorePlanRevisionsRequest\n): request is VantageScorePlanRevisionsRequest {\n return (\n (request as VantageScorePlanRevisionsRequest).max_actions_per_plan !==\n undefined\n );\n}\n\nexport function isFicoRevision(\n revision: ScorePlanRevision\n): revision is FicoScorePlanRevision {\n return revision.score_model.includes('FICO');\n}\n\nexport function isVantageRevision(\n revision: ScorePlanRevision\n): revision is VantageScorePlanRevision {\n return revision.score_model.includes('VANTAGE');\n}\n","import type {\n CreditScoreSimulator,\n FicoScenario,\n FicoScenarioVariation,\n FicoScoreSimulator,\n Scenario,\n ScenarioVariation,\n VantageScenario,\n VantageScenarioVariation\n} from 'resources/CreditScoreSimulator/types';\n\nexport function isFicoSimulator(\n data?: CreditScoreSimulator\n): data is FicoScoreSimulator {\n return Boolean(data && 'best_action' in data);\n}\n\nexport function isVantageScenario(\n scenario?: Scenario\n): scenario is VantageScenario {\n return Boolean(scenario && 'simulated_score' in scenario);\n}\n\nexport function isFicoScenario(scenario: Scenario): scenario is FicoScenario {\n return !('simulated_score' in scenario);\n}\n\nexport function isFicoScenarioVariation(\n variation?: ScenarioVariation\n): variation is FicoScenarioVariation {\n return Boolean(\n variation &&\n 'slider_min_value' in variation &&\n 'slider_max_value' in variation\n );\n}\n\nexport function isVantageScenarioVariation(\n variation?: ScenarioVariation\n): variation is VantageScenarioVariation {\n return Boolean(\n variation && 'value' in variation && 'simulated_score' in variation\n );\n}\n"],"names":["generateError","rawError","ConnectedSolutionsClientApiError","ConnectedSolutionsClientAuthError","ConnectedSolutionsClientSDKError","ConnectedSolutionsClientUnknownError","ConnectedSolutionsClientError","raw","_a","__publicField","args","ENVIRONMENT_URLS","CONTENTSTACK_URLS","_ApiClient_instances","validateConfig_fn","isJsonResponse_fn","ApiClient","config","__privateAdd","environment","partialConfig","input","init","__privateMethod","headers","options","error","e","response","err","apiError","errorJson","_b","_basePath","_CreditScoresService","fetchOptions","searchOptions","query","queryString","endpoint","__privateGet","requestOptions","CreditScoresService","_EntitlementsService","entitlement_id","body","product_config_id","customer_id","search","EntitlementsService","_CreditAttributesService","CreditAttributesService","_CreditScoreSimulatorService","requestBody","CreditScoreSimulatorService","_revisionPath","_CreditScorePlannerService","CreditScorePlannerService","_AlertsService","id","AlertsService","_CreditReportsService","latest_only","report_read","CreditReportsService","_CustomersService","updates","next_cursor","CustomersService","_CustomerAuthService","answers","CustomerAuthService","_RegistrationsService","RegistrationsService","_ProductConfigsService","ProductConfigsService","pascalToCamelCase","name","isNode","_cache","_ttl","_AuthService_instances","fetchToken_fn","setTTL_fn","checkTokenExpiry_fn","executeRequest_fn","_AuthService","__privateSet","credentials","cacheKeys","key","grantType","clientId","clientSecret","customerId","tokenRequest","accessToken","errorMeta","value","now","oneHourInMilliseconds","nextTimestamp","nextState","expires","isAfter","cacheKey","promise","AuthService","date1","date2","_instance","_SDKClient","resources","SDKClient","createSDK","userConfig","isPlanCompleted","plan","isPlanSet","isVantagePlan","isFicoPlan","isFicoRevisionsRequest","request","isVantageRevisionsRequest","isFicoRevision","revision","isVantageRevision","isFicoSimulator","data","isVantageScenario","scenario","isFicoScenario","isFicoScenarioVariation","variation","isVantageScenarioVariation"],"mappings":"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"}