@gusto/embedded-react-sdk 0.34.0 → 0.35.0-rc.2
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/CHANGELOG.md +38 -0
- package/dist/components/Base/Base.d.ts +6 -2
- package/dist/components/Base/Base.js +105 -59
- package/dist/components/Base/Base.js.map +1 -1
- package/dist/components/Base/useBase.d.ts +1 -0
- package/dist/components/Base/useBase.js.map +1 -1
- package/dist/components/Base/useBaseSubmit.d.ts +1 -1
- package/dist/components/Base/useBaseSubmit.js +60 -33
- package/dist/components/Base/useBaseSubmit.js.map +1 -1
- package/dist/components/Common/HamburgerMenu/HamburgerMenu.d.ts +1 -1
- package/dist/components/Common/HamburgerMenu/HamburgerMenu.js +15 -13
- package/dist/components/Common/HamburgerMenu/HamburgerMenu.js.map +1 -1
- package/dist/components/Common/HamburgerMenu/HamburgerMenuTypes.d.ts +1 -0
- package/dist/components/Common/UI/Breadcrumbs/Breadcrumbs.js +1 -1
- package/dist/components/Common/UI/FileInput/FileInput.js +1 -1
- package/dist/components/Common/UI/Menu/Menu.js +26 -25
- package/dist/components/Common/UI/Menu/Menu.js.map +1 -1
- package/dist/components/Common/UI/Menu/Menu.module.scss.js +7 -7
- package/dist/components/Common/UI/Menu/MenuTypes.d.ts +5 -0
- package/dist/components/Common/UI/Menu/MenuTypes.js +4 -3
- package/dist/components/Common/UI/Menu/MenuTypes.js.map +1 -1
- package/dist/components/Common/UI/ProgressBar/ProgressBar.js +4 -4
- package/dist/components/Common/UI/Table/Table.module.scss.js +1 -1
- package/dist/components/Contractor/Payments/CreatePayment/CreatePayment.js +119 -113
- package/dist/components/Contractor/Payments/CreatePayment/CreatePayment.js.map +1 -1
- package/dist/components/Contractor/Profile/ContractorProfileForm.js +15 -15
- package/dist/components/Employee/Compensation/Edit.js +70 -70
- package/dist/components/Employee/Compensation/Edit.js.map +1 -1
- package/dist/components/Employee/DocumentSigner/SignatureForm/Form.js +5 -5
- package/dist/components/Employee/DocumentSigner/SignatureForm/Form.js.map +1 -1
- package/dist/components/Employee/DocumentSigner/SignatureForm/Preview.js +8 -8
- package/dist/components/Employee/DocumentSigner/SignatureForm/Preview.js.map +1 -1
- package/dist/components/Employee/StateTaxes/StateTaxes.js +69 -61
- package/dist/components/Employee/StateTaxes/StateTaxes.js.map +1 -1
- package/dist/components/Payroll/GrossUpModal/GrossUpModal.d.ts +2 -0
- package/dist/components/Payroll/GrossUpModal/GrossUpModal.js +101 -0
- package/dist/components/Payroll/GrossUpModal/GrossUpModal.js.map +1 -0
- package/dist/components/Payroll/GrossUpModal/GrossUpModal.module.scss.js +16 -0
- package/dist/components/Payroll/GrossUpModal/GrossUpModal.module.scss.js.map +1 -0
- package/dist/components/Payroll/GrossUpModal/GrossUpModalTypes.d.ts +7 -0
- package/dist/components/Payroll/GrossUpModal/index.d.ts +3 -0
- package/dist/components/Payroll/OffCycleCreation/OffCycleCreation.js +86 -67
- package/dist/components/Payroll/OffCycleCreation/OffCycleCreation.js.map +1 -1
- package/dist/components/Payroll/OffCycleCreation/OffCycleCreationPresentation.d.ts +1 -1
- package/dist/components/Payroll/OffCycleCreation/OffCycleCreationPresentation.js +83 -49
- package/dist/components/Payroll/OffCycleCreation/OffCycleCreationPresentation.js.map +1 -1
- package/dist/components/Payroll/OffCycleCreation/OffCycleCreationTypes.d.ts +6 -0
- package/dist/components/Payroll/OffCycleTaxWithholdingModal/OffCycleTaxWithholdingModal.js +102 -0
- package/dist/components/Payroll/OffCycleTaxWithholdingModal/OffCycleTaxWithholdingModal.js.map +1 -0
- package/dist/components/Payroll/OffCycleTaxWithholdingModal/OffCycleTaxWithholdingModal.module.scss.js +14 -0
- package/dist/components/Payroll/OffCycleTaxWithholdingModal/OffCycleTaxWithholdingModal.module.scss.js.map +1 -0
- package/dist/components/Payroll/OffCycleTaxWithholdingTable/OffCycleTaxWithholdingTable.js +52 -0
- package/dist/components/Payroll/OffCycleTaxWithholdingTable/OffCycleTaxWithholdingTable.js.map +1 -0
- package/dist/components/Payroll/OffCycleTaxWithholdingTable/OffCycleTaxWithholdingTable.module.scss.js +16 -0
- package/dist/components/Payroll/OffCycleTaxWithholdingTable/OffCycleTaxWithholdingTable.module.scss.js.map +1 -0
- package/dist/components/Payroll/OffCycleTaxWithholdingTable/OffCycleTaxWithholdingTableTypes.d.ts +12 -2
- package/dist/components/Payroll/OffCycleTaxWithholdingTable/OffCycleTaxWithholdingTableTypes.js +15 -0
- package/dist/components/Payroll/OffCycleTaxWithholdingTable/OffCycleTaxWithholdingTableTypes.js.map +1 -0
- package/dist/components/Payroll/OffCycleTaxWithholdingTable/index.d.ts +2 -1
- package/dist/components/Payroll/PayrollConfiguration/PayrollConfiguration.js +212 -120
- package/dist/components/Payroll/PayrollConfiguration/PayrollConfiguration.js.map +1 -1
- package/dist/components/Payroll/PayrollConfiguration/PayrollConfigurationPresentation.d.ts +3 -1
- package/dist/components/Payroll/PayrollConfiguration/PayrollConfigurationPresentation.js +76 -64
- package/dist/components/Payroll/PayrollConfiguration/PayrollConfigurationPresentation.js.map +1 -1
- package/dist/components/Payroll/PayrollConfiguration/grossUpHelpers.d.ts +2 -0
- package/dist/components/Payroll/PayrollConfiguration/grossUpHelpers.js +11 -0
- package/dist/components/Payroll/PayrollConfiguration/grossUpHelpers.js.map +1 -0
- package/dist/components/Payroll/PayrollConfiguration/usePayrollConfigurationData.js +67 -57
- package/dist/components/Payroll/PayrollConfiguration/usePayrollConfigurationData.js.map +1 -1
- package/dist/components/Payroll/usePreparedPayrollData.js +44 -43
- package/dist/components/Payroll/usePreparedPayrollData.js.map +1 -1
- package/dist/contexts/GustoProvider/GustoProviderCustomUIAdapter.d.ts +2 -0
- package/dist/contexts/GustoProvider/GustoProviderCustomUIAdapter.js +58 -38
- package/dist/contexts/GustoProvider/GustoProviderCustomUIAdapter.js.map +1 -1
- package/dist/contexts/ObservabilityProvider/ObservabilityContext.d.ts +5 -0
- package/dist/contexts/ObservabilityProvider/ObservabilityContext.js +6 -0
- package/dist/contexts/ObservabilityProvider/ObservabilityContext.js.map +1 -0
- package/dist/contexts/ObservabilityProvider/ObservabilityProvider.d.ts +7 -0
- package/dist/contexts/ObservabilityProvider/ObservabilityProvider.js +11 -0
- package/dist/contexts/ObservabilityProvider/ObservabilityProvider.js.map +1 -0
- package/dist/contexts/ObservabilityProvider/index.d.ts +5 -0
- package/dist/contexts/ObservabilityProvider/observabilityUtils.d.ts +5 -0
- package/dist/contexts/ObservabilityProvider/observabilityUtils.js +45 -0
- package/dist/contexts/ObservabilityProvider/observabilityUtils.js.map +1 -0
- package/dist/contexts/ObservabilityProvider/sanitization.d.ts +19 -0
- package/dist/contexts/ObservabilityProvider/sanitization.js +95 -0
- package/dist/contexts/ObservabilityProvider/sanitization.js.map +1 -0
- package/dist/contexts/ObservabilityProvider/sanitization.test.d.ts +1 -0
- package/dist/contexts/ObservabilityProvider/useObservability.d.ts +2 -0
- package/dist/contexts/ObservabilityProvider/useObservability.js +11 -0
- package/dist/contexts/ObservabilityProvider/useObservability.js.map +1 -0
- package/dist/contexts/ObservabilityProvider/useSanitizedObservability.d.ts +8 -0
- package/dist/contexts/ObservabilityProvider/useSanitizedObservability.js +28 -0
- package/dist/contexts/ObservabilityProvider/useSanitizedObservability.js.map +1 -0
- package/dist/contexts/index.d.ts +2 -0
- package/dist/helpers/rem.d.ts +7 -3
- package/dist/helpers/rem.js +14 -10
- package/dist/helpers/rem.js.map +1 -1
- package/dist/helpers/rem.test.d.ts +1 -0
- package/dist/helpers/retryAsync.d.ts +7 -0
- package/dist/helpers/retryAsync.js +18 -0
- package/dist/helpers/retryAsync.js.map +1 -0
- package/dist/i18n/I18n.js +15 -15
- package/dist/i18n/I18n.js.map +1 -1
- package/dist/i18n/en/Company.PaySchedule.json.js +1 -1
- package/dist/i18n/en/Payroll.GrossUpModal.json.js +24 -0
- package/dist/i18n/en/Payroll.GrossUpModal.json.js.map +1 -0
- package/dist/i18n/en/Payroll.OffCycleTaxWithholding.json.js +13 -11
- package/dist/i18n/en/Payroll.OffCycleTaxWithholding.json.js.map +1 -1
- package/dist/i18n/en/Payroll.PayrollConfiguration.json.js +1 -1
- package/dist/index.d.ts +2 -0
- package/dist/index.js +19 -13
- package/dist/index.js.map +1 -1
- package/dist/shared/constants.d.ts +5 -0
- package/dist/shared/constants.js +11 -8
- package/dist/shared/constants.js.map +1 -1
- package/dist/style.css +1 -1
- package/dist/types/i18next.d.ts +26 -1
- package/dist/types/observability.d.ts +145 -0
- package/docs/reference/endpoint-inventory.json +10 -1
- package/package.json +21 -21
|
@@ -1,71 +1,72 @@
|
|
|
1
|
-
import { useState as
|
|
2
|
-
import { usePayrollsPrepareMutation as
|
|
3
|
-
import { usePaySchedulesGet as
|
|
1
|
+
import { useState as b, useRef as y, useMemo as M, useCallback as m, useEffect as _ } from "react";
|
|
2
|
+
import { usePayrollsPrepareMutation as L } from "@gusto/embedded-api/react-query/payrollsPrepare";
|
|
3
|
+
import { usePaySchedulesGet as D } from "@gusto/embedded-api/react-query/paySchedulesGet";
|
|
4
|
+
import { UnprocessableEntityErrorObject as T } from "@gusto/embedded-api/models/errors/unprocessableentityerrorobject";
|
|
4
5
|
import "react/jsx-runtime";
|
|
5
6
|
import "react-error-boundary";
|
|
6
7
|
import "react-i18next";
|
|
7
8
|
import "@gusto/embedded-api/models/errors/gustoembeddederror";
|
|
8
9
|
import "@gusto/embedded-api/models/errors/sdkvalidationerror";
|
|
9
10
|
import "@tanstack/react-query";
|
|
10
|
-
import { useBase as
|
|
11
|
+
import { useBase as j } from "../Base/useBase.js";
|
|
11
12
|
import "../../shared/constants.js";
|
|
12
13
|
import "classnames";
|
|
13
14
|
import "../../contexts/ComponentAdapter/useComponentContext.js";
|
|
14
15
|
import "../../contexts/LoadingIndicatorProvider/useLoadingIndicator.js";
|
|
15
16
|
import "dompurify";
|
|
16
17
|
import "../../contexts/LocaleProvider/useLocale.js";
|
|
17
|
-
|
|
18
|
-
|
|
19
|
-
|
|
18
|
+
import { retryAsync as x } from "../../helpers/retryAsync.js";
|
|
19
|
+
const q = 4, v = 1500, w = (e) => e instanceof T ? Array.isArray(e.errors) && e.errors.some((r) => r.category === "invalid_operation") : !1, Z = ({
|
|
20
|
+
companyId: e,
|
|
21
|
+
payrollId: r,
|
|
20
22
|
employeeUuids: a,
|
|
21
23
|
sortBy: n,
|
|
22
24
|
onDataReady: l
|
|
23
25
|
}) => {
|
|
24
|
-
const { mutateAsync:
|
|
26
|
+
const { mutateAsync: c, isPending: p } = L(), [o, f] = b(), t = y(!1), u = y(!1), { baseSubmitHandler: d } = j(), h = M(() => a?.join(",") ?? "", [a]), { data: S, isLoading: E } = D(
|
|
25
27
|
{
|
|
26
|
-
companyId:
|
|
27
|
-
payScheduleId:
|
|
28
|
+
companyId: e,
|
|
29
|
+
payScheduleId: o?.payPeriod?.payScheduleUuid || ""
|
|
28
30
|
},
|
|
29
31
|
{
|
|
30
|
-
enabled: !!
|
|
32
|
+
enabled: !!o?.payPeriod?.payScheduleUuid
|
|
31
33
|
}
|
|
32
|
-
),
|
|
33
|
-
|
|
34
|
-
|
|
35
|
-
|
|
36
|
-
|
|
37
|
-
|
|
38
|
-
|
|
39
|
-
|
|
40
|
-
employeeUuids: a
|
|
41
|
-
}
|
|
34
|
+
), P = m(async () => {
|
|
35
|
+
const i = await c({
|
|
36
|
+
request: {
|
|
37
|
+
companyId: e,
|
|
38
|
+
payrollId: r,
|
|
39
|
+
sortBy: n,
|
|
40
|
+
requestBody: {
|
|
41
|
+
employeeUuids: a
|
|
42
42
|
}
|
|
43
|
-
}
|
|
44
|
-
m(o.payrollPrepared), o.payrollPrepared && (e.current = !0, l?.(o.payrollPrepared));
|
|
43
|
+
}
|
|
45
44
|
});
|
|
46
|
-
|
|
47
|
-
|
|
48
|
-
|
|
49
|
-
|
|
50
|
-
|
|
51
|
-
|
|
52
|
-
|
|
53
|
-
|
|
54
|
-
|
|
55
|
-
|
|
56
|
-
|
|
57
|
-
|
|
58
|
-
|
|
45
|
+
f(i.payrollPrepared), i.payrollPrepared && (t.current = !0, l?.(i.payrollPrepared));
|
|
46
|
+
}, [e, r, c, h, n, l]), s = m(async () => {
|
|
47
|
+
await d(
|
|
48
|
+
null,
|
|
49
|
+
() => x(P, {
|
|
50
|
+
maxAttempts: q,
|
|
51
|
+
delayMs: v,
|
|
52
|
+
shouldRetry: w
|
|
53
|
+
})
|
|
54
|
+
);
|
|
55
|
+
}, [d, P]);
|
|
56
|
+
_(() => {
|
|
57
|
+
u.current || (u.current = !0, s());
|
|
58
|
+
}, [s]);
|
|
59
|
+
const g = p && !t.current, A = p && t.current, R = g || E;
|
|
59
60
|
return {
|
|
60
|
-
handlePreparePayroll:
|
|
61
|
-
preparedPayroll:
|
|
62
|
-
paySchedule:
|
|
63
|
-
isLoading:
|
|
64
|
-
isPaginating:
|
|
65
|
-
hasInitialData:
|
|
61
|
+
handlePreparePayroll: s,
|
|
62
|
+
preparedPayroll: o,
|
|
63
|
+
paySchedule: S?.payScheduleObject,
|
|
64
|
+
isLoading: R,
|
|
65
|
+
isPaginating: A,
|
|
66
|
+
hasInitialData: t.current
|
|
66
67
|
};
|
|
67
68
|
};
|
|
68
69
|
export {
|
|
69
|
-
|
|
70
|
+
Z as usePreparedPayrollData
|
|
70
71
|
};
|
|
71
72
|
//# sourceMappingURL=usePreparedPayrollData.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"usePreparedPayrollData.js","sources":["../../../src/components/Payroll/usePreparedPayrollData.ts"],"sourcesContent":["import { useState, useEffect, useCallback, useRef, useMemo } from 'react'\nimport { usePayrollsPrepareMutation } from '@gusto/embedded-api/react-query/payrollsPrepare'\nimport { usePaySchedulesGet } from '@gusto/embedded-api/react-query/paySchedulesGet'\nimport type { PayrollPrepared } from '@gusto/embedded-api/models/components/payroll'\nimport type { PayScheduleObject } from '@gusto/embedded-api/models/components/payscheduleobject'\nimport type { QueryParamSortBy } from '@gusto/embedded-api/models/operations/putv1companiescompanyidpayrollspayrollidprepare'\nimport { useBase } from '../Base'\n\ninterface UsePreparedPayrollDataParams {\n companyId: string\n payrollId: string\n employeeUuids?: string[]\n sortBy?: QueryParamSortBy\n onDataReady?: (preparedPayroll: PayrollPrepared) => void\n}\n\ninterface UsePreparedPayrollDataReturn {\n handlePreparePayroll: () => Promise<void>\n preparedPayroll: PayrollPrepared | undefined\n paySchedule: PayScheduleObject | undefined\n isLoading: boolean\n isPaginating: boolean\n hasInitialData: boolean\n}\n\nexport const usePreparedPayrollData = ({\n companyId,\n payrollId,\n employeeUuids,\n sortBy,\n onDataReady,\n}: UsePreparedPayrollDataParams): UsePreparedPayrollDataReturn => {\n const { mutateAsync: preparePayroll, isPending: isPreparePayrollPending } =\n usePayrollsPrepareMutation()\n const [preparedPayroll, setPreparedPayroll] = useState<PayrollPrepared | undefined>()\n const hasInitialDataRef = useRef(false)\n const hasFiredRef = useRef(false)\n const { baseSubmitHandler } = useBase()\n\n const employeeUuidsKey = useMemo(() => employeeUuids?.join(',') ?? '', [employeeUuids])\n\n const { data: payScheduleData, isLoading: isPayScheduleLoading } = usePaySchedulesGet(\n {\n companyId,\n payScheduleId: preparedPayroll?.payPeriod?.payScheduleUuid || '',\n },\n {\n enabled: !!preparedPayroll?.payPeriod?.payScheduleUuid,\n },\n )\n\n const
|
|
1
|
+
{"version":3,"file":"usePreparedPayrollData.js","sources":["../../../src/components/Payroll/usePreparedPayrollData.ts"],"sourcesContent":["import { useState, useEffect, useCallback, useRef, useMemo } from 'react'\nimport { usePayrollsPrepareMutation } from '@gusto/embedded-api/react-query/payrollsPrepare'\nimport { usePaySchedulesGet } from '@gusto/embedded-api/react-query/paySchedulesGet'\nimport type { PayrollPrepared } from '@gusto/embedded-api/models/components/payroll'\nimport type { PayScheduleObject } from '@gusto/embedded-api/models/components/payscheduleobject'\nimport type { QueryParamSortBy } from '@gusto/embedded-api/models/operations/putv1companiescompanyidpayrollspayrollidprepare'\nimport { UnprocessableEntityErrorObject } from '@gusto/embedded-api/models/errors/unprocessableentityerrorobject'\nimport { useBase } from '../Base'\nimport { retryAsync } from '@/helpers/retryAsync'\n\ninterface UsePreparedPayrollDataParams {\n companyId: string\n payrollId: string\n employeeUuids?: string[]\n sortBy?: QueryParamSortBy\n onDataReady?: (preparedPayroll: PayrollPrepared) => void\n}\n\ninterface UsePreparedPayrollDataReturn {\n handlePreparePayroll: () => Promise<void>\n preparedPayroll: PayrollPrepared | undefined\n paySchedule: PayScheduleObject | undefined\n isLoading: boolean\n isPaginating: boolean\n hasInitialData: boolean\n}\n\nconst PREPARE_MAX_ATTEMPTS = 4\nconst PREPARE_RETRY_DELAY_MS = 1500\n\nconst isPayrollBeingProcessedError = (error: unknown): boolean => {\n if (!(error instanceof UnprocessableEntityErrorObject)) return false\n return Array.isArray(error.errors) && error.errors.some(e => e.category === 'invalid_operation')\n}\n\nexport const usePreparedPayrollData = ({\n companyId,\n payrollId,\n employeeUuids,\n sortBy,\n onDataReady,\n}: UsePreparedPayrollDataParams): UsePreparedPayrollDataReturn => {\n const { mutateAsync: preparePayroll, isPending: isPreparePayrollPending } =\n usePayrollsPrepareMutation()\n const [preparedPayroll, setPreparedPayroll] = useState<PayrollPrepared | undefined>()\n const hasInitialDataRef = useRef(false)\n const hasFiredRef = useRef(false)\n const { baseSubmitHandler } = useBase()\n\n const employeeUuidsKey = useMemo(() => employeeUuids?.join(',') ?? '', [employeeUuids])\n\n const { data: payScheduleData, isLoading: isPayScheduleLoading } = usePaySchedulesGet(\n {\n companyId,\n payScheduleId: preparedPayroll?.payPeriod?.payScheduleUuid || '',\n },\n {\n enabled: !!preparedPayroll?.payPeriod?.payScheduleUuid,\n },\n )\n\n const executePrepare = useCallback(async () => {\n const result = await preparePayroll({\n request: {\n companyId,\n payrollId,\n sortBy,\n requestBody: {\n employeeUuids,\n },\n },\n })\n setPreparedPayroll(result.payrollPrepared)\n if (result.payrollPrepared) {\n hasInitialDataRef.current = true\n onDataReady?.(result.payrollPrepared)\n }\n }, [companyId, payrollId, preparePayroll, employeeUuidsKey, sortBy, onDataReady])\n\n const handlePreparePayroll = useCallback(async () => {\n await baseSubmitHandler(null, () =>\n retryAsync(executePrepare, {\n maxAttempts: PREPARE_MAX_ATTEMPTS,\n delayMs: PREPARE_RETRY_DELAY_MS,\n shouldRetry: isPayrollBeingProcessedError,\n }),\n )\n }, [baseSubmitHandler, executePrepare])\n\n useEffect(() => {\n if (hasFiredRef.current) return\n hasFiredRef.current = true\n void handlePreparePayroll()\n }, [handlePreparePayroll])\n\n const isInitialLoading = isPreparePayrollPending && !hasInitialDataRef.current\n const isPaginating = isPreparePayrollPending && hasInitialDataRef.current\n const isLoading = isInitialLoading || isPayScheduleLoading\n\n return {\n handlePreparePayroll,\n preparedPayroll,\n paySchedule: payScheduleData?.payScheduleObject,\n isLoading,\n isPaginating,\n hasInitialData: hasInitialDataRef.current,\n }\n}\n"],"names":["PREPARE_MAX_ATTEMPTS","PREPARE_RETRY_DELAY_MS","isPayrollBeingProcessedError","error","UnprocessableEntityErrorObject","e","usePreparedPayrollData","companyId","payrollId","employeeUuids","sortBy","onDataReady","preparePayroll","isPreparePayrollPending","usePayrollsPrepareMutation","preparedPayroll","setPreparedPayroll","useState","hasInitialDataRef","useRef","hasFiredRef","baseSubmitHandler","useBase","employeeUuidsKey","useMemo","payScheduleData","isPayScheduleLoading","usePaySchedulesGet","executePrepare","useCallback","result","handlePreparePayroll","retryAsync","useEffect","isInitialLoading","isPaginating","isLoading"],"mappings":";;;;;;;;;;;;;;;;;;AA2BA,MAAMA,IAAuB,GACvBC,IAAyB,MAEzBC,IAA+B,CAACC,MAC9BA,aAAiBC,IAChB,MAAM,QAAQD,EAAM,MAAM,KAAKA,EAAM,OAAO,KAAK,CAAAE,MAAKA,EAAE,aAAa,mBAAmB,IADhC,IAIpDC,IAAyB,CAAC;AAAA,EACrC,WAAAC;AAAA,EACA,WAAAC;AAAA,EACA,eAAAC;AAAA,EACA,QAAAC;AAAA,EACA,aAAAC;AACF,MAAkE;AAChE,QAAM,EAAE,aAAaC,GAAgB,WAAWC,EAAA,IAC9CC,EAAA,GACI,CAACC,GAAiBC,CAAkB,IAAIC,EAAA,GACxCC,IAAoBC,EAAO,EAAK,GAChCC,IAAcD,EAAO,EAAK,GAC1B,EAAE,mBAAAE,EAAA,IAAsBC,EAAA,GAExBC,IAAmBC,EAAQ,MAAMf,GAAe,KAAK,GAAG,KAAK,IAAI,CAACA,CAAa,CAAC,GAEhF,EAAE,MAAMgB,GAAiB,WAAWC,MAAyBC;AAAA,IACjE;AAAA,MACE,WAAApB;AAAA,MACA,eAAeQ,GAAiB,WAAW,mBAAmB;AAAA,IAAA;AAAA,IAEhE;AAAA,MACE,SAAS,CAAC,CAACA,GAAiB,WAAW;AAAA,IAAA;AAAA,EACzC,GAGIa,IAAiBC,EAAY,YAAY;AAC7C,UAAMC,IAAS,MAAMlB,EAAe;AAAA,MAClC,SAAS;AAAA,QACP,WAAAL;AAAA,QACA,WAAAC;AAAA,QACA,QAAAE;AAAA,QACA,aAAa;AAAA,UACX,eAAAD;AAAA,QAAA;AAAA,MACF;AAAA,IACF,CACD;AACD,IAAAO,EAAmBc,EAAO,eAAe,GACrCA,EAAO,oBACTZ,EAAkB,UAAU,IAC5BP,IAAcmB,EAAO,eAAe;AAAA,EAExC,GAAG,CAACvB,GAAWC,GAAWI,GAAgBW,GAAkBb,GAAQC,CAAW,CAAC,GAE1EoB,IAAuBF,EAAY,YAAY;AACnD,UAAMR;AAAA,MAAkB;AAAA,MAAM,MAC5BW,EAAWJ,GAAgB;AAAA,QACzB,aAAa5B;AAAA,QACb,SAASC;AAAA,QACT,aAAaC;AAAA,MAAA,CACd;AAAA,IAAA;AAAA,EAEL,GAAG,CAACmB,GAAmBO,CAAc,CAAC;AAEtC,EAAAK,EAAU,MAAM;AACd,IAAIb,EAAY,YAChBA,EAAY,UAAU,IACjBW,EAAA;AAAA,EACP,GAAG,CAACA,CAAoB,CAAC;AAEzB,QAAMG,IAAmBrB,KAA2B,CAACK,EAAkB,SACjEiB,IAAetB,KAA2BK,EAAkB,SAC5DkB,IAAYF,KAAoBR;AAEtC,SAAO;AAAA,IACL,sBAAAK;AAAA,IACA,iBAAAhB;AAAA,IACA,aAAaU,GAAiB;AAAA,IAC9B,WAAAW;AAAA,IACA,cAAAD;AAAA,IACA,gBAAgBjB,EAAkB;AAAA,EAAA;AAEtC;"}
|
|
@@ -5,10 +5,12 @@ import { LoadingIndicatorContextProps } from '../LoadingIndicatorProvider/useLoa
|
|
|
5
5
|
import { GustoSDKTheme } from '../ThemeProvider/theme';
|
|
6
6
|
import { ResourceDictionary } from '../../types/Helpers';
|
|
7
7
|
import { SDKHooks } from '../../types/hooks';
|
|
8
|
+
import { ObservabilityHook } from '../../types/observability';
|
|
8
9
|
export interface APIConfig {
|
|
9
10
|
baseUrl: string;
|
|
10
11
|
headers?: HeadersInit;
|
|
11
12
|
hooks?: SDKHooks;
|
|
13
|
+
observability?: ObservabilityHook;
|
|
12
14
|
}
|
|
13
15
|
export interface GustoProviderProps {
|
|
14
16
|
config: APIConfig;
|
|
@@ -1,57 +1,77 @@
|
|
|
1
|
-
import { jsx as
|
|
2
|
-
import { ErrorBoundary as
|
|
3
|
-
import { I18nextProvider as
|
|
4
|
-
import { useEffect as
|
|
5
|
-
import { ComponentsProvider as
|
|
6
|
-
import { ApiProvider as
|
|
7
|
-
import { LoadingIndicatorProvider as
|
|
8
|
-
import {
|
|
1
|
+
import { jsx as o } from "react/jsx-runtime";
|
|
2
|
+
import { ErrorBoundary as y } from "react-error-boundary";
|
|
3
|
+
import { I18nextProvider as E } from "react-i18next";
|
|
4
|
+
import { useEffect as g, useMemo as k } from "react";
|
|
5
|
+
import { ComponentsProvider as P } from "../ComponentAdapter/ComponentsProvider.js";
|
|
6
|
+
import { ApiProvider as x } from "../ApiProvider/ApiProvider.js";
|
|
7
|
+
import { LoadingIndicatorProvider as C } from "../LoadingIndicatorProvider/LoadingIndicatorProvider.js";
|
|
8
|
+
import { ObservabilityProvider as I } from "../ObservabilityProvider/ObservabilityProvider.js";
|
|
9
|
+
import { sanitizeError as L } from "../ObservabilityProvider/sanitization.js";
|
|
10
|
+
import { SDKI18next as m } from "./SDKI18next.js";
|
|
9
11
|
import "../../shared/constants.js";
|
|
10
12
|
import "classnames";
|
|
11
|
-
import { InternalError as
|
|
13
|
+
import { InternalError as S } from "../../components/Common/InternalError/InternalError.js";
|
|
12
14
|
import "../ComponentAdapter/useComponentContext.js";
|
|
13
|
-
import { LocaleProvider as
|
|
15
|
+
import { LocaleProvider as U } from "../LocaleProvider/LocaleProvider.js";
|
|
14
16
|
import "../LocaleProvider/useLocale.js";
|
|
15
|
-
import { ThemeProvider as
|
|
16
|
-
const
|
|
17
|
+
import { ThemeProvider as z } from "../ThemeProvider/ThemeProvider.js";
|
|
18
|
+
const Q = (s) => {
|
|
17
19
|
const {
|
|
18
|
-
children:
|
|
19
|
-
config:
|
|
20
|
-
dictionary:
|
|
21
|
-
lng:
|
|
22
|
-
locale:
|
|
23
|
-
currency:
|
|
20
|
+
children: c,
|
|
21
|
+
config: r,
|
|
22
|
+
dictionary: n,
|
|
23
|
+
lng: a = "en",
|
|
24
|
+
locale: l = "en-US",
|
|
25
|
+
currency: d = "USD",
|
|
24
26
|
theme: p,
|
|
25
|
-
components:
|
|
26
|
-
LoaderComponent:
|
|
27
|
+
components: f,
|
|
28
|
+
LoaderComponent: v,
|
|
27
29
|
queryClient: u
|
|
28
|
-
} =
|
|
29
|
-
if (
|
|
30
|
-
for (const
|
|
31
|
-
const i =
|
|
32
|
-
for (const
|
|
33
|
-
|
|
30
|
+
} = s;
|
|
31
|
+
if (n)
|
|
32
|
+
for (const e in n) {
|
|
33
|
+
const i = e;
|
|
34
|
+
for (const t in n[i])
|
|
35
|
+
m.addResourceBundle(
|
|
34
36
|
i,
|
|
35
|
-
|
|
36
|
-
|
|
37
|
+
t,
|
|
38
|
+
n[i][t],
|
|
37
39
|
!0,
|
|
38
40
|
!0
|
|
39
41
|
);
|
|
40
42
|
}
|
|
41
|
-
|
|
42
|
-
(async () => await
|
|
43
|
-
}, [
|
|
44
|
-
|
|
43
|
+
g(() => {
|
|
44
|
+
(async () => await m.changeLanguage(a))();
|
|
45
|
+
}, [a]);
|
|
46
|
+
const b = k(() => {
|
|
47
|
+
if (r.observability?.onError)
|
|
48
|
+
return (e, i) => {
|
|
49
|
+
if (!r.observability?.onError) return;
|
|
50
|
+
const t = {
|
|
51
|
+
type: "internal_error",
|
|
52
|
+
message: e instanceof Error ? e.message : "Unknown error",
|
|
53
|
+
stack: e instanceof Error ? e.stack : void 0,
|
|
54
|
+
context: {
|
|
55
|
+
componentStack: i.componentStack ?? void 0
|
|
56
|
+
},
|
|
57
|
+
originalError: e,
|
|
58
|
+
timestamp: Date.now()
|
|
59
|
+
}, h = L(t, r.observability.sanitization);
|
|
60
|
+
r.observability.onError(h);
|
|
61
|
+
};
|
|
62
|
+
}, [r.observability]);
|
|
63
|
+
return /* @__PURE__ */ o(P, { value: f, children: /* @__PURE__ */ o(C, { value: v, children: /* @__PURE__ */ o(I, { observability: r.observability, children: /* @__PURE__ */ o(y, { FallbackComponent: S, onError: b, children: /* @__PURE__ */ o(z, { theme: p, children: /* @__PURE__ */ o(U, { locale: l, currency: d, children: /* @__PURE__ */ o(E, { i18n: m, children: /* @__PURE__ */ o(
|
|
64
|
+
x,
|
|
45
65
|
{
|
|
46
|
-
url:
|
|
47
|
-
headers:
|
|
48
|
-
hooks:
|
|
66
|
+
url: r.baseUrl,
|
|
67
|
+
headers: r.headers,
|
|
68
|
+
hooks: r.hooks,
|
|
49
69
|
queryClient: u,
|
|
50
|
-
children:
|
|
70
|
+
children: c
|
|
51
71
|
}
|
|
52
|
-
) },
|
|
72
|
+
) }, a) }) }) }) }) }) });
|
|
53
73
|
};
|
|
54
74
|
export {
|
|
55
|
-
|
|
75
|
+
Q as GustoProviderCustomUIAdapter
|
|
56
76
|
};
|
|
57
77
|
//# sourceMappingURL=GustoProviderCustomUIAdapter.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"GustoProviderCustomUIAdapter.js","sources":["../../../src/contexts/GustoProvider/GustoProviderCustomUIAdapter.tsx"],"sourcesContent":["import type React from 'react'\nimport { ErrorBoundary } from 'react-error-boundary'\nimport { I18nextProvider } from 'react-i18next'\nimport type { QueryClient } from '@tanstack/react-query'\nimport { useEffect } from 'react'\nimport { ComponentsProvider } from '../ComponentAdapter/ComponentsProvider'\nimport type { ComponentsContextType } from '../ComponentAdapter/useComponentContext'\nimport { ApiProvider } from '../ApiProvider/ApiProvider'\nimport { LoadingIndicatorProvider } from '../LoadingIndicatorProvider/LoadingIndicatorProvider'\nimport type { LoadingIndicatorContextProps } from '../LoadingIndicatorProvider/useLoadingIndicator'\nimport { SDKI18next } from './SDKI18next'\nimport { InternalError } from '@/components/Common'\nimport { LocaleProvider } from '@/contexts/LocaleProvider'\nimport { ThemeProvider } from '@/contexts/ThemeProvider'\nimport type { GustoSDKTheme } from '@/contexts/ThemeProvider/theme'\nimport type { ResourceDictionary, SupportedLanguages } from '@/types/Helpers'\nimport type { SDKHooks } from '@/types/hooks'\n\nexport interface APIConfig {\n baseUrl: string\n headers?: HeadersInit\n hooks?: SDKHooks\n}\n\nexport interface GustoProviderProps {\n config: APIConfig\n dictionary?: ResourceDictionary\n lng?: string\n locale?: string\n currency?: string\n theme?: GustoSDKTheme\n queryClient?: QueryClient\n components: ComponentsContextType\n LoaderComponent?: LoadingIndicatorContextProps['LoadingIndicator']\n}\n\nexport interface GustoProviderCustomUIAdapterProps extends GustoProviderProps {\n children?: React.ReactNode\n}\n\n/**\n * A provider that accepts UI component adapters through the components prop\n */\nconst GustoProviderCustomUIAdapter: React.FC<GustoProviderCustomUIAdapterProps> = props => {\n const {\n children,\n config,\n dictionary,\n lng = 'en',\n locale = 'en-US',\n currency = 'USD',\n theme,\n components,\n LoaderComponent,\n queryClient,\n } = props\n\n // Handle dictionary resources\n if (dictionary) {\n for (const language in dictionary) {\n const lang = language as SupportedLanguages\n for (const ns in dictionary[lang]) {\n // Adding resources overrides to i18next instance - initial load will override common namespace and add component specific dictionaries provided by partners\n SDKI18next.addResourceBundle(\n lang,\n ns,\n (dictionary[lang] as Record<string, unknown>)[ns],\n true,\n true,\n )\n }\n }\n }\n\n // Handle language change\n useEffect(() => {\n void (async () => {\n await SDKI18next.changeLanguage(lng)\n })()\n }, [lng])\n\n return (\n <ComponentsProvider value={components}>\n <LoadingIndicatorProvider value={LoaderComponent}>\n <ErrorBoundary FallbackComponent={InternalError}>\n
|
|
1
|
+
{"version":3,"file":"GustoProviderCustomUIAdapter.js","sources":["../../../src/contexts/GustoProvider/GustoProviderCustomUIAdapter.tsx"],"sourcesContent":["import type React from 'react'\nimport type { ErrorInfo } from 'react'\nimport { ErrorBoundary } from 'react-error-boundary'\nimport { I18nextProvider } from 'react-i18next'\nimport type { QueryClient } from '@tanstack/react-query'\nimport { useEffect, useMemo } from 'react'\nimport { ComponentsProvider } from '../ComponentAdapter/ComponentsProvider'\nimport type { ComponentsContextType } from '../ComponentAdapter/useComponentContext'\nimport { ApiProvider } from '../ApiProvider/ApiProvider'\nimport { LoadingIndicatorProvider } from '../LoadingIndicatorProvider/LoadingIndicatorProvider'\nimport type { LoadingIndicatorContextProps } from '../LoadingIndicatorProvider/useLoadingIndicator'\nimport { ObservabilityProvider } from '../ObservabilityProvider'\nimport { sanitizeError } from '../ObservabilityProvider/sanitization'\nimport { SDKI18next } from './SDKI18next'\nimport { InternalError } from '@/components/Common'\nimport { LocaleProvider } from '@/contexts/LocaleProvider'\nimport { ThemeProvider } from '@/contexts/ThemeProvider'\nimport type { GustoSDKTheme } from '@/contexts/ThemeProvider/theme'\nimport type { ResourceDictionary, SupportedLanguages } from '@/types/Helpers'\nimport type { SDKHooks } from '@/types/hooks'\nimport type { ObservabilityHook } from '@/types/observability'\n\nexport interface APIConfig {\n baseUrl: string\n headers?: HeadersInit\n hooks?: SDKHooks\n observability?: ObservabilityHook\n}\n\nexport interface GustoProviderProps {\n config: APIConfig\n dictionary?: ResourceDictionary\n lng?: string\n locale?: string\n currency?: string\n theme?: GustoSDKTheme\n queryClient?: QueryClient\n components: ComponentsContextType\n LoaderComponent?: LoadingIndicatorContextProps['LoadingIndicator']\n}\n\nexport interface GustoProviderCustomUIAdapterProps extends GustoProviderProps {\n children?: React.ReactNode\n}\n\n/**\n * A provider that accepts UI component adapters through the components prop\n */\nconst GustoProviderCustomUIAdapter: React.FC<GustoProviderCustomUIAdapterProps> = props => {\n const {\n children,\n config,\n dictionary,\n lng = 'en',\n locale = 'en-US',\n currency = 'USD',\n theme,\n components,\n LoaderComponent,\n queryClient,\n } = props\n\n // Handle dictionary resources\n if (dictionary) {\n for (const language in dictionary) {\n const lang = language as SupportedLanguages\n for (const ns in dictionary[lang]) {\n // Adding resources overrides to i18next instance - initial load will override common namespace and add component specific dictionaries provided by partners\n SDKI18next.addResourceBundle(\n lang,\n ns,\n (dictionary[lang] as Record<string, unknown>)[ns],\n true,\n true,\n )\n }\n }\n }\n\n // Handle language change\n useEffect(() => {\n void (async () => {\n await SDKI18next.changeLanguage(lng)\n })()\n }, [lng])\n\n // Create sanitized error handler that respects sanitization config\n const handleTopLevelError = useMemo(() => {\n if (!config.observability?.onError) return undefined\n\n return (error: unknown, errorInfo: ErrorInfo) => {\n if (!config.observability?.onError) return\n\n const unsanitizedError = {\n type: 'internal_error' as const,\n message: error instanceof Error ? error.message : 'Unknown error',\n stack: error instanceof Error ? error.stack : undefined,\n context: {\n componentStack: errorInfo.componentStack ?? undefined,\n },\n originalError: error,\n timestamp: Date.now(),\n }\n\n // Apply sanitization with the same config used for other errors\n const sanitizedError = sanitizeError(unsanitizedError, config.observability.sanitization)\n\n config.observability.onError(sanitizedError)\n }\n }, [config.observability])\n return (\n <ComponentsProvider value={components}>\n <LoadingIndicatorProvider value={LoaderComponent}>\n <ObservabilityProvider observability={config.observability}>\n <ErrorBoundary FallbackComponent={InternalError} onError={handleTopLevelError}>\n <ThemeProvider theme={theme}>\n <LocaleProvider locale={locale} currency={currency}>\n <I18nextProvider i18n={SDKI18next} key={lng}>\n <ApiProvider\n url={config.baseUrl}\n headers={config.headers}\n hooks={config.hooks}\n queryClient={queryClient}\n >\n {children}\n </ApiProvider>\n </I18nextProvider>\n </LocaleProvider>\n </ThemeProvider>\n </ErrorBoundary>\n </ObservabilityProvider>\n </LoadingIndicatorProvider>\n </ComponentsProvider>\n )\n}\n\nexport { GustoProviderCustomUIAdapter }\n"],"names":["GustoProviderCustomUIAdapter","props","children","config","dictionary","lng","locale","currency","theme","components","LoaderComponent","queryClient","language","lang","ns","SDKI18next","useEffect","handleTopLevelError","useMemo","error","errorInfo","unsanitizedError","sanitizedError","sanitizeError","jsx","ComponentsProvider","LoadingIndicatorProvider","ObservabilityProvider","ErrorBoundary","InternalError","ThemeProvider","LocaleProvider","I18nextProvider","ApiProvider"],"mappings":";;;;;;;;;;;;;;;;;AAgDA,MAAMA,IAA4E,CAAAC,MAAS;AACzF,QAAM;AAAA,IACJ,UAAAC;AAAA,IACA,QAAAC;AAAA,IACA,YAAAC;AAAA,IACA,KAAAC,IAAM;AAAA,IACN,QAAAC,IAAS;AAAA,IACT,UAAAC,IAAW;AAAA,IACX,OAAAC;AAAA,IACA,YAAAC;AAAA,IACA,iBAAAC;AAAA,IACA,aAAAC;AAAA,EAAA,IACEV;AAGJ,MAAIG;AACF,eAAWQ,KAAYR,GAAY;AACjC,YAAMS,IAAOD;AACb,iBAAWE,KAAMV,EAAWS,CAAI;AAE9B,QAAAE,EAAW;AAAA,UACTF;AAAA,UACAC;AAAA,UACCV,EAAWS,CAAI,EAA8BC,CAAE;AAAA,UAChD;AAAA,UACA;AAAA,QAAA;AAAA,IAGN;AAIF,EAAAE,EAAU,MAAM;AACd,KAAM,YACJ,MAAMD,EAAW,eAAeV,CAAG;AAAA,EAEvC,GAAG,CAACA,CAAG,CAAC;AAGR,QAAMY,IAAsBC,EAAQ,MAAM;AACxC,QAAKf,EAAO,eAAe;AAE3B,aAAO,CAACgB,GAAgBC,MAAyB;AAC/C,YAAI,CAACjB,EAAO,eAAe,QAAS;AAEpC,cAAMkB,IAAmB;AAAA,UACvB,MAAM;AAAA,UACN,SAASF,aAAiB,QAAQA,EAAM,UAAU;AAAA,UAClD,OAAOA,aAAiB,QAAQA,EAAM,QAAQ;AAAA,UAC9C,SAAS;AAAA,YACP,gBAAgBC,EAAU,kBAAkB;AAAA,UAAA;AAAA,UAE9C,eAAeD;AAAA,UACf,WAAW,KAAK,IAAA;AAAA,QAAI,GAIhBG,IAAiBC,EAAcF,GAAkBlB,EAAO,cAAc,YAAY;AAExF,QAAAA,EAAO,cAAc,QAAQmB,CAAc;AAAA,MAC7C;AAAA,EACF,GAAG,CAACnB,EAAO,aAAa,CAAC;AACzB,SACE,gBAAAqB,EAACC,GAAA,EAAmB,OAAOhB,GACzB,UAAA,gBAAAe,EAACE,GAAA,EAAyB,OAAOhB,GAC/B,UAAA,gBAAAc,EAACG,GAAA,EAAsB,eAAexB,EAAO,eAC3C,UAAA,gBAAAqB,EAACI,GAAA,EAAc,mBAAmBC,GAAe,SAASZ,GACxD,UAAA,gBAAAO,EAACM,GAAA,EAAc,OAAAtB,GACb,UAAA,gBAAAgB,EAACO,GAAA,EAAe,QAAAzB,GAAgB,UAAAC,GAC9B,UAAA,gBAAAiB,EAACQ,GAAA,EAAgB,MAAMjB,GACrB,UAAA,gBAAAS;AAAA,IAACS;AAAA,IAAA;AAAA,MACC,KAAK9B,EAAO;AAAA,MACZ,SAASA,EAAO;AAAA,MAChB,OAAOA,EAAO;AAAA,MACd,aAAAQ;AAAA,MAEC,UAAAT;AAAA,IAAA;AAAA,EAAA,KAPmCG,CASxC,GACF,GACF,EAAA,CACF,EAAA,CACF,GACF,GACF;AAEJ;"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"ObservabilityContext.js","sources":["../../../src/contexts/ObservabilityProvider/ObservabilityContext.ts"],"sourcesContent":["import { createContext } from 'react'\nimport type { ObservabilityHook } from '@/types/observability'\n\nexport interface ObservabilityContextValue {\n observability: ObservabilityHook | undefined\n}\n\nexport const ObservabilityContext = createContext<ObservabilityContextValue | undefined>(undefined)\n"],"names":["ObservabilityContext","createContext"],"mappings":";AAOO,MAAMA,IAAuBC,EAAqD,MAAS;"}
|
|
@@ -0,0 +1,7 @@
|
|
|
1
|
+
import { ReactNode } from 'react';
|
|
2
|
+
import { ObservabilityHook } from '../../types/observability';
|
|
3
|
+
export interface ObservabilityProviderProps {
|
|
4
|
+
children: ReactNode;
|
|
5
|
+
observability?: ObservabilityHook;
|
|
6
|
+
}
|
|
7
|
+
export declare const ObservabilityProvider: ({ children, observability }: ObservabilityProviderProps) => import("react/jsx-runtime").JSX.Element;
|
|
@@ -0,0 +1,11 @@
|
|
|
1
|
+
import { jsx as e } from "react/jsx-runtime";
|
|
2
|
+
import { useMemo as i } from "react";
|
|
3
|
+
import { ObservabilityContext as m } from "./ObservabilityContext.js";
|
|
4
|
+
const v = ({ children: o, observability: r }) => {
|
|
5
|
+
const t = i(() => ({ observability: r }), [r]);
|
|
6
|
+
return /* @__PURE__ */ e(m.Provider, { value: t, children: o });
|
|
7
|
+
};
|
|
8
|
+
export {
|
|
9
|
+
v as ObservabilityProvider
|
|
10
|
+
};
|
|
11
|
+
//# sourceMappingURL=ObservabilityProvider.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"ObservabilityProvider.js","sources":["../../../src/contexts/ObservabilityProvider/ObservabilityProvider.tsx"],"sourcesContent":["import type { ReactNode } from 'react'\nimport { useMemo } from 'react'\nimport { ObservabilityContext } from './ObservabilityContext'\nimport type { ObservabilityHook } from '@/types/observability'\n\nexport interface ObservabilityProviderProps {\n children: ReactNode\n observability?: ObservabilityHook\n}\n\nexport const ObservabilityProvider = ({ children, observability }: ObservabilityProviderProps) => {\n const value = useMemo(() => ({ observability }), [observability])\n\n return <ObservabilityContext.Provider value={value}>{children}</ObservabilityContext.Provider>\n}\n"],"names":["ObservabilityProvider","children","observability","value","useMemo","jsx","ObservabilityContext"],"mappings":";;;AAUO,MAAMA,IAAwB,CAAC,EAAE,UAAAC,GAAU,eAAAC,QAAgD;AAChG,QAAMC,IAAQC,EAAQ,OAAO,EAAE,eAAAF,MAAkB,CAACA,CAAa,CAAC;AAEhE,SAAO,gBAAAG,EAACC,EAAqB,UAArB,EAA8B,OAAAH,GAAe,UAAAF,EAAA,CAAS;AAChE;"}
|
|
@@ -0,0 +1,5 @@
|
|
|
1
|
+
import "./types/i18next.d.ts"
|
|
2
|
+
export { ObservabilityProvider } from './ObservabilityProvider';
|
|
3
|
+
export { useObservability } from './useObservability';
|
|
4
|
+
export { createObservabilityError } from './observabilityUtils';
|
|
5
|
+
export type { ObservabilityProviderProps } from './ObservabilityProvider';
|
|
@@ -0,0 +1,5 @@
|
|
|
1
|
+
import { ObservabilityError, ObservabilityErrorType } from '../../types/observability';
|
|
2
|
+
/**
|
|
3
|
+
* Converts SDK errors into structured ObservabilityError objects
|
|
4
|
+
*/
|
|
5
|
+
export declare function createObservabilityError(error: unknown, type?: ObservabilityErrorType): ObservabilityError | null;
|
|
@@ -0,0 +1,45 @@
|
|
|
1
|
+
import { APIError as r } from "@gusto/embedded-api/models/errors/apierror";
|
|
2
|
+
import { GustoEmbeddedError as s } from "@gusto/embedded-api/models/errors/gustoembeddederror";
|
|
3
|
+
import { SDKValidationError as e } from "@gusto/embedded-api/models/errors/sdkvalidationerror";
|
|
4
|
+
function u(t, n) {
|
|
5
|
+
const o = Date.now(), i = t instanceof Error ? t.message : "Unknown error", a = t instanceof Error ? t.stack : void 0;
|
|
6
|
+
return t instanceof e ? {
|
|
7
|
+
type: n || "validation_error",
|
|
8
|
+
message: i,
|
|
9
|
+
stack: a,
|
|
10
|
+
context: {
|
|
11
|
+
validationSchema: t.pretty()
|
|
12
|
+
},
|
|
13
|
+
originalError: t,
|
|
14
|
+
timestamp: o
|
|
15
|
+
} : t instanceof r ? {
|
|
16
|
+
type: n || "api_error",
|
|
17
|
+
message: i,
|
|
18
|
+
stack: a,
|
|
19
|
+
context: {
|
|
20
|
+
statusCode: t.httpMeta.response.status
|
|
21
|
+
},
|
|
22
|
+
originalError: t,
|
|
23
|
+
timestamp: o
|
|
24
|
+
} : t instanceof s ? {
|
|
25
|
+
type: n || "api_error",
|
|
26
|
+
message: i,
|
|
27
|
+
stack: a,
|
|
28
|
+
context: {
|
|
29
|
+
statusCode: t.httpMeta.response.status
|
|
30
|
+
},
|
|
31
|
+
originalError: t,
|
|
32
|
+
timestamp: o
|
|
33
|
+
} : n ? {
|
|
34
|
+
type: n,
|
|
35
|
+
message: i,
|
|
36
|
+
stack: a,
|
|
37
|
+
context: {},
|
|
38
|
+
originalError: t,
|
|
39
|
+
timestamp: o
|
|
40
|
+
} : null;
|
|
41
|
+
}
|
|
42
|
+
export {
|
|
43
|
+
u as createObservabilityError
|
|
44
|
+
};
|
|
45
|
+
//# sourceMappingURL=observabilityUtils.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"observabilityUtils.js","sources":["../../../src/contexts/ObservabilityProvider/observabilityUtils.ts"],"sourcesContent":["import { APIError } from '@gusto/embedded-api/models/errors/apierror'\nimport { GustoEmbeddedError } from '@gusto/embedded-api/models/errors/gustoembeddederror'\nimport { SDKValidationError } from '@gusto/embedded-api/models/errors/sdkvalidationerror'\nimport type { ObservabilityError, ObservabilityErrorType } from '@/types/observability'\n\n/**\n * Converts SDK errors into structured ObservabilityError objects\n */\nexport function createObservabilityError(\n error: unknown,\n type?: ObservabilityErrorType,\n): ObservabilityError | null {\n const timestamp = Date.now()\n const message = error instanceof Error ? error.message : 'Unknown error'\n const stack = error instanceof Error ? error.stack : undefined\n\n // Auto-detect error type based on instance if not provided\n if (error instanceof SDKValidationError) {\n return {\n type: type || 'validation_error',\n message,\n stack,\n context: {\n validationSchema: error.pretty(),\n },\n originalError: error,\n timestamp,\n }\n }\n\n if (error instanceof APIError) {\n return {\n type: type || 'api_error',\n message,\n stack,\n context: {\n statusCode: error.httpMeta.response.status,\n },\n originalError: error,\n timestamp,\n }\n }\n\n if (error instanceof GustoEmbeddedError) {\n return {\n type: type || 'api_error',\n message,\n stack,\n context: {\n statusCode: error.httpMeta.response.status,\n },\n originalError: error,\n timestamp,\n }\n }\n\n // For unknown errors, only create ObservabilityError if type is explicitly provided\n if (type) {\n return {\n type,\n message,\n stack,\n context: {},\n originalError: error,\n timestamp,\n }\n }\n\n return null\n}\n"],"names":["createObservabilityError","error","type","timestamp","message","stack","SDKValidationError","APIError","GustoEmbeddedError"],"mappings":";;;AAQO,SAASA,EACdC,GACAC,GAC2B;AAC3B,QAAMC,IAAY,KAAK,IAAA,GACjBC,IAAUH,aAAiB,QAAQA,EAAM,UAAU,iBACnDI,IAAQJ,aAAiB,QAAQA,EAAM,QAAQ;AAGrD,SAAIA,aAAiBK,IACZ;AAAA,IACL,MAAMJ,KAAQ;AAAA,IACd,SAAAE;AAAA,IACA,OAAAC;AAAA,IACA,SAAS;AAAA,MACP,kBAAkBJ,EAAM,OAAA;AAAA,IAAO;AAAA,IAEjC,eAAeA;AAAA,IACf,WAAAE;AAAA,EAAA,IAIAF,aAAiBM,IACZ;AAAA,IACL,MAAML,KAAQ;AAAA,IACd,SAAAE;AAAA,IACA,OAAAC;AAAA,IACA,SAAS;AAAA,MACP,YAAYJ,EAAM,SAAS,SAAS;AAAA,IAAA;AAAA,IAEtC,eAAeA;AAAA,IACf,WAAAE;AAAA,EAAA,IAIAF,aAAiBO,IACZ;AAAA,IACL,MAAMN,KAAQ;AAAA,IACd,SAAAE;AAAA,IACA,OAAAC;AAAA,IACA,SAAS;AAAA,MACP,YAAYJ,EAAM,SAAS,SAAS;AAAA,IAAA;AAAA,IAEtC,eAAeA;AAAA,IACf,WAAAE;AAAA,EAAA,IAKAD,IACK;AAAA,IACL,MAAAA;AAAA,IACA,SAAAE;AAAA,IACA,OAAAC;AAAA,IACA,SAAS,CAAA;AAAA,IACT,eAAeJ;AAAA,IACf,WAAAE;AAAA,EAAA,IAIG;AACT;"}
|
|
@@ -0,0 +1,19 @@
|
|
|
1
|
+
import { ObservabilityError, ObservabilityMetric, SanitizationConfig } from '../../types/observability';
|
|
2
|
+
/**
|
|
3
|
+
* Sanitizes a string by replacing PII patterns with redacted placeholders
|
|
4
|
+
*/
|
|
5
|
+
export declare function sanitizeString(value: string): string;
|
|
6
|
+
/**
|
|
7
|
+
* Recursively sanitizes an object by:
|
|
8
|
+
* 1. Removing sensitive field names
|
|
9
|
+
* 2. Redacting PII patterns in string values
|
|
10
|
+
*/
|
|
11
|
+
export declare function sanitizeObject(obj: unknown, additionalSensitiveFields?: string[]): unknown;
|
|
12
|
+
/**
|
|
13
|
+
* Sanitizes an ObservabilityError to remove PII
|
|
14
|
+
*/
|
|
15
|
+
export declare function sanitizeError(error: ObservabilityError, config?: SanitizationConfig): ObservabilityError;
|
|
16
|
+
/**
|
|
17
|
+
* Sanitizes an ObservabilityMetric to remove PII
|
|
18
|
+
*/
|
|
19
|
+
export declare function sanitizeMetric(metric: ObservabilityMetric, config?: SanitizationConfig): ObservabilityMetric;
|
|
@@ -0,0 +1,95 @@
|
|
|
1
|
+
const u = [
|
|
2
|
+
// SSN patterns (XXX-XX-XXXX, XXXXXXXXX)
|
|
3
|
+
{ pattern: /\b\d{3}-\d{2}-\d{4}\b/g, replacement: "[SSN-REDACTED]" },
|
|
4
|
+
{ pattern: /\b\d{9}\b/g, replacement: "[SSN-REDACTED]" },
|
|
5
|
+
// Email addresses
|
|
6
|
+
{
|
|
7
|
+
pattern: /\b[A-Za-z0-9._%+-]+@[A-Za-z0-9.-]+\.[A-Z|a-z]{2,}\b/g,
|
|
8
|
+
replacement: "[EMAIL-REDACTED]"
|
|
9
|
+
},
|
|
10
|
+
// Phone numbers (various formats)
|
|
11
|
+
{ pattern: /\b\d{3}[-.\s]?\d{3}[-.\s]?\d{4}\b/g, replacement: "[PHONE-REDACTED]" },
|
|
12
|
+
{ pattern: /\(\d{3}\)\s*\d{3}[-.\s]?\d{4}/g, replacement: "[PHONE-REDACTED]" },
|
|
13
|
+
// Credit card numbers (basic pattern)
|
|
14
|
+
{ pattern: /\b\d{4}[-\s]?\d{4}[-\s]?\d{4}[-\s]?\d{4}\b/g, replacement: "[CC-REDACTED]" },
|
|
15
|
+
// API keys and tokens (common patterns)
|
|
16
|
+
{ pattern: /\b[A-Za-z0-9_-]{32,}\b/g, replacement: "[TOKEN-REDACTED]" }
|
|
17
|
+
], d = [
|
|
18
|
+
"password",
|
|
19
|
+
"token",
|
|
20
|
+
"apiKey",
|
|
21
|
+
"api_key",
|
|
22
|
+
"secret",
|
|
23
|
+
"ssn",
|
|
24
|
+
"social_security_number",
|
|
25
|
+
"creditCard",
|
|
26
|
+
"credit_card",
|
|
27
|
+
"cvv",
|
|
28
|
+
"pin",
|
|
29
|
+
"bankAccount",
|
|
30
|
+
"bank_account",
|
|
31
|
+
"routingNumber",
|
|
32
|
+
"routing_number",
|
|
33
|
+
"accountNumber",
|
|
34
|
+
"account_number"
|
|
35
|
+
];
|
|
36
|
+
function c(t) {
|
|
37
|
+
let e = t;
|
|
38
|
+
for (const { pattern: n, replacement: r } of u)
|
|
39
|
+
e = e.replace(n, r);
|
|
40
|
+
return e;
|
|
41
|
+
}
|
|
42
|
+
function s(t, e = []) {
|
|
43
|
+
if (t == null)
|
|
44
|
+
return t;
|
|
45
|
+
if (typeof t == "string")
|
|
46
|
+
return c(t);
|
|
47
|
+
if (typeof t == "number" || typeof t == "boolean")
|
|
48
|
+
return t;
|
|
49
|
+
if (Array.isArray(t))
|
|
50
|
+
return t.map((n) => s(n, e));
|
|
51
|
+
if (typeof t == "object") {
|
|
52
|
+
const n = {}, r = [...d, ...e];
|
|
53
|
+
for (const [i, a] of Object.entries(t)) {
|
|
54
|
+
if (r.some((o) => i.toLowerCase().includes(o.toLowerCase()))) {
|
|
55
|
+
n[i] = "[REDACTED]";
|
|
56
|
+
continue;
|
|
57
|
+
}
|
|
58
|
+
n[i] = s(a, e);
|
|
59
|
+
}
|
|
60
|
+
return n;
|
|
61
|
+
}
|
|
62
|
+
return t;
|
|
63
|
+
}
|
|
64
|
+
function E(t, e = {}) {
|
|
65
|
+
const {
|
|
66
|
+
enabled: n = !0,
|
|
67
|
+
includeOriginalError: r = !1,
|
|
68
|
+
customErrorSanitizer: i,
|
|
69
|
+
additionalSensitiveFields: a = []
|
|
70
|
+
} = e;
|
|
71
|
+
return i ? i(t) : n ? {
|
|
72
|
+
...t,
|
|
73
|
+
message: c(t.message),
|
|
74
|
+
stack: t.stack ? c(t.stack) : void 0,
|
|
75
|
+
context: s(
|
|
76
|
+
t.context,
|
|
77
|
+
a
|
|
78
|
+
),
|
|
79
|
+
originalError: r ? t.originalError : void 0
|
|
80
|
+
} : r ? t : { ...t, originalError: void 0 };
|
|
81
|
+
}
|
|
82
|
+
function l(t, e = {}) {
|
|
83
|
+
const { enabled: n = !0, customMetricSanitizer: r, additionalSensitiveFields: i = [] } = e;
|
|
84
|
+
return r ? r(t) : n ? {
|
|
85
|
+
...t,
|
|
86
|
+
tags: t.tags ? s(t.tags, i) : void 0
|
|
87
|
+
} : t;
|
|
88
|
+
}
|
|
89
|
+
export {
|
|
90
|
+
E as sanitizeError,
|
|
91
|
+
l as sanitizeMetric,
|
|
92
|
+
s as sanitizeObject,
|
|
93
|
+
c as sanitizeString
|
|
94
|
+
};
|
|
95
|
+
//# sourceMappingURL=sanitization.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"sanitization.js","sources":["../../../src/contexts/ObservabilityProvider/sanitization.ts"],"sourcesContent":["import type {\n ObservabilityError,\n ObservabilityMetric,\n SanitizationConfig,\n} from '@/types/observability'\n\n/**\n * Common PII patterns to redact from strings\n */\nconst PII_PATTERNS = [\n // SSN patterns (XXX-XX-XXXX, XXXXXXXXX)\n { pattern: /\\b\\d{3}-\\d{2}-\\d{4}\\b/g, replacement: '[SSN-REDACTED]' },\n { pattern: /\\b\\d{9}\\b/g, replacement: '[SSN-REDACTED]' },\n\n // Email addresses\n {\n pattern: /\\b[A-Za-z0-9._%+-]+@[A-Za-z0-9.-]+\\.[A-Z|a-z]{2,}\\b/g,\n replacement: '[EMAIL-REDACTED]',\n },\n\n // Phone numbers (various formats)\n { pattern: /\\b\\d{3}[-.\\s]?\\d{3}[-.\\s]?\\d{4}\\b/g, replacement: '[PHONE-REDACTED]' },\n { pattern: /\\(\\d{3}\\)\\s*\\d{3}[-.\\s]?\\d{4}/g, replacement: '[PHONE-REDACTED]' },\n\n // Credit card numbers (basic pattern)\n { pattern: /\\b\\d{4}[-\\s]?\\d{4}[-\\s]?\\d{4}[-\\s]?\\d{4}\\b/g, replacement: '[CC-REDACTED]' },\n\n // API keys and tokens (common patterns)\n { pattern: /\\b[A-Za-z0-9_-]{32,}\\b/g, replacement: '[TOKEN-REDACTED]' },\n]\n\n/**\n * Fields that commonly contain sensitive data and should be removed\n */\nconst SENSITIVE_FIELD_NAMES = [\n 'password',\n 'token',\n 'apiKey',\n 'api_key',\n 'secret',\n 'ssn',\n 'social_security_number',\n 'creditCard',\n 'credit_card',\n 'cvv',\n 'pin',\n 'bankAccount',\n 'bank_account',\n 'routingNumber',\n 'routing_number',\n 'accountNumber',\n 'account_number',\n]\n\n/**\n * Sanitizes a string by replacing PII patterns with redacted placeholders\n */\nexport function sanitizeString(value: string): string {\n let sanitized = value\n\n for (const { pattern, replacement } of PII_PATTERNS) {\n sanitized = sanitized.replace(pattern, replacement)\n }\n\n return sanitized\n}\n\n/**\n * Recursively sanitizes an object by:\n * 1. Removing sensitive field names\n * 2. Redacting PII patterns in string values\n */\nexport function sanitizeObject(obj: unknown, additionalSensitiveFields: string[] = []): unknown {\n if (obj === null || obj === undefined) {\n return obj\n }\n\n if (typeof obj === 'string') {\n return sanitizeString(obj)\n }\n\n if (typeof obj === 'number' || typeof obj === 'boolean') {\n return obj\n }\n\n if (Array.isArray(obj)) {\n return obj.map(item => sanitizeObject(item, additionalSensitiveFields))\n }\n\n if (typeof obj === 'object') {\n const sanitized: Record<string, unknown> = {}\n\n // Combine default and additional sensitive fields for this call only\n const allSensitiveFields = [...SENSITIVE_FIELD_NAMES, ...additionalSensitiveFields]\n\n for (const [key, value] of Object.entries(obj)) {\n // Skip sensitive fields entirely\n if (allSensitiveFields.some(field => key.toLowerCase().includes(field.toLowerCase()))) {\n sanitized[key] = '[REDACTED]'\n continue\n }\n\n sanitized[key] = sanitizeObject(value, additionalSensitiveFields)\n }\n\n return sanitized\n }\n\n return obj\n}\n\n/**\n * Sanitizes an ObservabilityError to remove PII\n */\nexport function sanitizeError(\n error: ObservabilityError,\n config: SanitizationConfig = {},\n): ObservabilityError {\n const {\n enabled = true,\n includeOriginalError = false,\n customErrorSanitizer,\n additionalSensitiveFields = [],\n } = config\n\n // If custom sanitizer is provided, use it\n if (customErrorSanitizer) {\n return customErrorSanitizer(error)\n }\n\n // If sanitization is disabled, return as-is but still respect includeOriginalError\n if (!enabled) {\n return includeOriginalError ? error : { ...error, originalError: undefined }\n }\n\n // Sanitize the error, passing additionalSensitiveFields to sanitizeObject\n const sanitized: ObservabilityError = {\n ...error,\n message: sanitizeString(error.message),\n stack: error.stack ? sanitizeString(error.stack) : undefined,\n context: sanitizeObject(\n error.context,\n additionalSensitiveFields,\n ) as ObservabilityError['context'],\n originalError: includeOriginalError ? error.originalError : undefined,\n }\n\n return sanitized\n}\n\n/**\n * Sanitizes an ObservabilityMetric to remove PII\n */\nexport function sanitizeMetric(\n metric: ObservabilityMetric,\n config: SanitizationConfig = {},\n): ObservabilityMetric {\n const { enabled = true, customMetricSanitizer, additionalSensitiveFields = [] } = config\n\n // If custom sanitizer is provided, use it\n if (customMetricSanitizer) {\n return customMetricSanitizer(metric)\n }\n\n // If sanitization is disabled, return as-is\n if (!enabled) {\n return metric\n }\n\n // Sanitize metric tags (in case they contain dynamic values), passing additionalSensitiveFields\n const sanitized: ObservabilityMetric = {\n ...metric,\n tags: metric.tags\n ? (sanitizeObject(metric.tags, additionalSensitiveFields) as Record<string, string>)\n : undefined,\n }\n\n return sanitized\n}\n"],"names":["PII_PATTERNS","SENSITIVE_FIELD_NAMES","sanitizeString","value","sanitized","pattern","replacement","sanitizeObject","obj","additionalSensitiveFields","item","allSensitiveFields","key","field","sanitizeError","error","config","enabled","includeOriginalError","customErrorSanitizer","sanitizeMetric","metric","customMetricSanitizer"],"mappings":"AASA,MAAMA,IAAe;AAAA;AAAA,EAEnB,EAAE,SAAS,0BAA0B,aAAa,iBAAA;AAAA,EAClD,EAAE,SAAS,cAAc,aAAa,iBAAA;AAAA;AAAA,EAGtC;AAAA,IACE,SAAS;AAAA,IACT,aAAa;AAAA,EAAA;AAAA;AAAA,EAIf,EAAE,SAAS,sCAAsC,aAAa,mBAAA;AAAA,EAC9D,EAAE,SAAS,kCAAkC,aAAa,mBAAA;AAAA;AAAA,EAG1D,EAAE,SAAS,+CAA+C,aAAa,gBAAA;AAAA;AAAA,EAGvE,EAAE,SAAS,2BAA2B,aAAa,mBAAA;AACrD,GAKMC,IAAwB;AAAA,EAC5B;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AACF;AAKO,SAASC,EAAeC,GAAuB;AACpD,MAAIC,IAAYD;AAEhB,aAAW,EAAE,SAAAE,GAAS,aAAAC,EAAA,KAAiBN;AACrC,IAAAI,IAAYA,EAAU,QAAQC,GAASC,CAAW;AAGpD,SAAOF;AACT;AAOO,SAASG,EAAeC,GAAcC,IAAsC,IAAa;AAC9F,MAAID,KAAQ;AACV,WAAOA;AAGT,MAAI,OAAOA,KAAQ;AACjB,WAAON,EAAeM,CAAG;AAG3B,MAAI,OAAOA,KAAQ,YAAY,OAAOA,KAAQ;AAC5C,WAAOA;AAGT,MAAI,MAAM,QAAQA,CAAG;AACnB,WAAOA,EAAI,IAAI,CAAAE,MAAQH,EAAeG,GAAMD,CAAyB,CAAC;AAGxE,MAAI,OAAOD,KAAQ,UAAU;AAC3B,UAAMJ,IAAqC,CAAA,GAGrCO,IAAqB,CAAC,GAAGV,GAAuB,GAAGQ,CAAyB;AAElF,eAAW,CAACG,GAAKT,CAAK,KAAK,OAAO,QAAQK,CAAG,GAAG;AAE9C,UAAIG,EAAmB,KAAK,CAAAE,MAASD,EAAI,YAAA,EAAc,SAASC,EAAM,YAAA,CAAa,CAAC,GAAG;AACrF,QAAAT,EAAUQ,CAAG,IAAI;AACjB;AAAA,MACF;AAEA,MAAAR,EAAUQ,CAAG,IAAIL,EAAeJ,GAAOM,CAAyB;AAAA,IAClE;AAEA,WAAOL;AAAA,EACT;AAEA,SAAOI;AACT;AAKO,SAASM,EACdC,GACAC,IAA6B,IACT;AACpB,QAAM;AAAA,IACJ,SAAAC,IAAU;AAAA,IACV,sBAAAC,IAAuB;AAAA,IACvB,sBAAAC;AAAA,IACA,2BAAAV,IAA4B,CAAA;AAAA,EAAC,IAC3BO;AAGJ,SAAIG,IACKA,EAAqBJ,CAAK,IAI9BE,IAKiC;AAAA,IACpC,GAAGF;AAAA,IACH,SAASb,EAAea,EAAM,OAAO;AAAA,IACrC,OAAOA,EAAM,QAAQb,EAAea,EAAM,KAAK,IAAI;AAAA,IACnD,SAASR;AAAA,MACPQ,EAAM;AAAA,MACNN;AAAA,IAAA;AAAA,IAEF,eAAeS,IAAuBH,EAAM,gBAAgB;AAAA,EAAA,IAZrDG,IAAuBH,IAAQ,EAAE,GAAGA,GAAO,eAAe,OAAA;AAgBrE;AAKO,SAASK,EACdC,GACAL,IAA6B,IACR;AACrB,QAAM,EAAE,SAAAC,IAAU,IAAM,uBAAAK,GAAuB,2BAAAb,IAA4B,CAAA,MAAOO;AAGlF,SAAIM,IACKA,EAAsBD,CAAM,IAIhCJ,IAKkC;AAAA,IACrC,GAAGI;AAAA,IACH,MAAMA,EAAO,OACRd,EAAec,EAAO,MAAMZ,CAAyB,IACtD;AAAA,EAAA,IARGY;AAYX;"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
export {};
|
|
@@ -0,0 +1,11 @@
|
|
|
1
|
+
import { useContext as t } from "react";
|
|
2
|
+
import { ObservabilityContext as e } from "./ObservabilityContext.js";
|
|
3
|
+
import { useSanitizedObservability as r } from "./useSanitizedObservability.js";
|
|
4
|
+
const n = () => {
|
|
5
|
+
const i = t(e);
|
|
6
|
+
return i === void 0 ? { observability: void 0 } : { observability: r(i.observability) };
|
|
7
|
+
};
|
|
8
|
+
export {
|
|
9
|
+
n as useObservability
|
|
10
|
+
};
|
|
11
|
+
//# sourceMappingURL=useObservability.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"useObservability.js","sources":["../../../src/contexts/ObservabilityProvider/useObservability.ts"],"sourcesContent":["import { useContext } from 'react'\nimport { ObservabilityContext } from './ObservabilityContext'\nimport type { ObservabilityContextValue } from './ObservabilityContext'\nimport { useSanitizedObservability } from './useSanitizedObservability'\n\nexport const useObservability = (): ObservabilityContextValue => {\n const context = useContext(ObservabilityContext)\n if (context === undefined) {\n return { observability: undefined }\n }\n\n const sanitizedObservability = useSanitizedObservability(context.observability)\n\n return { observability: sanitizedObservability }\n}\n"],"names":["useObservability","context","useContext","ObservabilityContext","useSanitizedObservability"],"mappings":";;;AAKO,MAAMA,IAAmB,MAAiC;AAC/D,QAAMC,IAAUC,EAAWC,CAAoB;AAC/C,SAAIF,MAAY,SACP,EAAE,eAAe,OAAA,IAKnB,EAAE,eAFsBG,EAA0BH,EAAQ,aAAa,EAEtD;AAC1B;"}
|
|
@@ -0,0 +1,8 @@
|
|
|
1
|
+
import { ObservabilityError, ObservabilityMetric, ObservabilityHook } from '../../types/observability';
|
|
2
|
+
/**
|
|
3
|
+
* Wraps an ObservabilityHook to apply sanitization before calling the callbacks
|
|
4
|
+
*/
|
|
5
|
+
export declare function useSanitizedObservability(observability?: ObservabilityHook): {
|
|
6
|
+
onError: ((error: ObservabilityError) => void) | undefined;
|
|
7
|
+
onMetric: ((metric: ObservabilityMetric) => void) | undefined;
|
|
8
|
+
} | undefined;
|
|
@@ -0,0 +1,28 @@
|
|
|
1
|
+
import { useCallback as i } from "react";
|
|
2
|
+
import { sanitizeError as f, sanitizeMetric as u } from "./sanitization.js";
|
|
3
|
+
function E(n) {
|
|
4
|
+
const r = n?.sanitization, c = i(
|
|
5
|
+
(o) => {
|
|
6
|
+
if (!n?.onError) return;
|
|
7
|
+
const t = f(o, r);
|
|
8
|
+
n.onError(t);
|
|
9
|
+
},
|
|
10
|
+
[n, r]
|
|
11
|
+
), e = i(
|
|
12
|
+
(o) => {
|
|
13
|
+
if (!n?.onMetric) return;
|
|
14
|
+
const t = u(o, r);
|
|
15
|
+
n.onMetric(t);
|
|
16
|
+
},
|
|
17
|
+
[n, r]
|
|
18
|
+
);
|
|
19
|
+
if (n)
|
|
20
|
+
return {
|
|
21
|
+
onError: n.onError ? c : void 0,
|
|
22
|
+
onMetric: n.onMetric ? e : void 0
|
|
23
|
+
};
|
|
24
|
+
}
|
|
25
|
+
export {
|
|
26
|
+
E as useSanitizedObservability
|
|
27
|
+
};
|
|
28
|
+
//# sourceMappingURL=useSanitizedObservability.js.map
|