@gusto/embedded-react-sdk 0.56.7 → 0.57.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.
- package/CHANGELOG.md +60 -0
- package/README.md +1 -1
- package/dist/components/Base/Base.js +3 -2
- package/dist/components/Base/Base.js.map +1 -1
- package/dist/components/Common/DataView/DataCards/DataCards.js +44 -42
- package/dist/components/Common/DataView/DataCards/DataCards.js.map +1 -1
- package/dist/components/Common/DataView/DataCards/DataCards.module.scss.js +17 -15
- package/dist/components/Common/DataView/DataCards/DataCards.module.scss.js.map +1 -1
- package/dist/components/Common/UI/Input/Input.js +35 -32
- package/dist/components/Common/UI/Input/Input.js.map +1 -1
- package/dist/components/Company/AssignSignatory/AssignSignatorySelection.js +8 -6
- package/dist/components/Company/AssignSignatory/AssignSignatorySelection.js.map +1 -1
- package/dist/components/Company/AssignSignatory/CreateSignatory/Actions.js +10 -8
- package/dist/components/Company/AssignSignatory/CreateSignatory/Actions.js.map +1 -1
- package/dist/components/Company/AssignSignatory/CreateSignatory/useCreateSignatory.js +6 -3
- package/dist/components/Company/AssignSignatory/CreateSignatory/useCreateSignatory.js.map +1 -1
- package/dist/components/Company/AssignSignatory/InviteSignatory/Actions.js +8 -6
- package/dist/components/Company/AssignSignatory/InviteSignatory/Actions.js.map +1 -1
- package/dist/components/Company/AssignSignatory/InviteSignatory/useInviteSignatory.js +6 -3
- package/dist/components/Company/AssignSignatory/InviteSignatory/useInviteSignatory.js.map +1 -1
- package/dist/components/Company/AssignSignatory/TitleSelect.js +11 -10
- package/dist/components/Company/AssignSignatory/TitleSelect.js.map +1 -1
- package/dist/components/Company/AssignSignatory/useAssignSignatory.js +8 -5
- package/dist/components/Company/AssignSignatory/useAssignSignatory.js.map +1 -1
- package/dist/components/Company/BankAccount/BankAccountForm/Actions.js +9 -8
- package/dist/components/Company/BankAccount/BankAccountForm/Actions.js.map +1 -1
- package/dist/components/Company/BankAccount/BankAccountForm/context.js +6 -3
- package/dist/components/Company/BankAccount/BankAccountForm/context.js.map +1 -1
- package/dist/components/Company/BankAccount/BankAccountList/Actions.js +12 -10
- package/dist/components/Company/BankAccount/BankAccountList/Actions.js.map +1 -1
- package/dist/components/Company/BankAccount/BankAccountVerify/Actions.js +13 -11
- package/dist/components/Company/BankAccount/BankAccountVerify/Actions.js.map +1 -1
- package/dist/components/Company/DocumentSigner/DocumentList/Actions.js +7 -5
- package/dist/components/Company/DocumentSigner/DocumentList/Actions.js.map +1 -1
- package/dist/components/Company/DocumentSigner/DocumentList/useDocumentList.js +6 -3
- package/dist/components/Company/DocumentSigner/DocumentList/useDocumentList.js.map +1 -1
- package/dist/components/Company/FederalTaxes/Actions.js +9 -7
- package/dist/components/Company/FederalTaxes/Actions.js.map +1 -1
- package/dist/components/Company/FederalTaxes/useFederalTaxes.js +11 -8
- package/dist/components/Company/FederalTaxes/useFederalTaxes.js.map +1 -1
- package/dist/components/Company/Industry/Actions.js +7 -5
- package/dist/components/Company/Industry/Actions.js.map +1 -1
- package/dist/components/Company/Industry/Context.js +9 -6
- package/dist/components/Company/Industry/Context.js.map +1 -1
- package/dist/components/Company/Industry/Edit.js +12 -10
- package/dist/components/Company/Industry/Edit.js.map +1 -1
- package/dist/components/Company/Locations/LocationForm/Actions.js +10 -8
- package/dist/components/Company/Locations/LocationForm/Actions.js.map +1 -1
- package/dist/components/Company/Locations/LocationForm/useLocationForm.js +6 -3
- package/dist/components/Company/Locations/LocationForm/useLocationForm.js.map +1 -1
- package/dist/components/Company/Locations/LocationsList/Actions.js +8 -6
- package/dist/components/Company/Locations/LocationsList/Actions.js.map +1 -1
- package/dist/components/Company/Locations/LocationsList/List.js +13 -11
- package/dist/components/Company/Locations/LocationsList/List.js.map +1 -1
- package/dist/components/Company/Locations/LocationsList/useLocationsList.js +6 -3
- package/dist/components/Company/Locations/LocationsList/useLocationsList.js.map +1 -1
- package/dist/components/Company/OnboardingOverview/context.js +6 -3
- package/dist/components/Company/OnboardingOverview/context.js.map +1 -1
- package/dist/components/Company/PaySchedule/management/PayScheduleAssignment/AssignmentCompensationStepPresentation.js +70 -0
- package/dist/components/Company/PaySchedule/management/PayScheduleAssignment/AssignmentCompensationStepPresentation.js.map +1 -0
- package/dist/components/Company/PaySchedule/management/PayScheduleAssignment/AssignmentScheduleStepPresentation.js +30 -32
- package/dist/components/Company/PaySchedule/management/PayScheduleAssignment/AssignmentScheduleStepPresentation.js.map +1 -1
- package/dist/components/Company/PaySchedule/management/PayScheduleAssignment/AssignmentTypeStepPresentation.js +35 -27
- package/dist/components/Company/PaySchedule/management/PayScheduleAssignment/AssignmentTypeStepPresentation.js.map +1 -1
- package/dist/components/Company/PaySchedule/management/PayScheduleAssignment/PayScheduleAssignment.js +52 -31
- package/dist/components/Company/PaySchedule/management/PayScheduleAssignment/PayScheduleAssignment.js.map +1 -1
- package/dist/components/Company/PaySchedule/management/PayScheduleAssignment/PayScheduleAssignmentComponents.js +106 -66
- package/dist/components/Company/PaySchedule/management/PayScheduleAssignment/PayScheduleAssignmentComponents.js.map +1 -1
- package/dist/components/Company/PaySchedule/management/PayScheduleAssignment/payScheduleAssignmentStateMachine.js +36 -30
- package/dist/components/Company/PaySchedule/management/PayScheduleAssignment/payScheduleAssignmentStateMachine.js.map +1 -1
- package/dist/components/Company/PaySchedule/management/PayScheduleAssignment/scheduleLabel.js +7 -0
- package/dist/components/Company/PaySchedule/management/PayScheduleAssignment/scheduleLabel.js.map +1 -0
- package/dist/components/Company/PaySchedule/management/PayScheduleCompensationOverviewPresentation.js +83 -0
- package/dist/components/Company/PaySchedule/management/PayScheduleCompensationOverviewPresentation.js.map +1 -0
- package/dist/components/Company/PaySchedule/management/PayScheduleOverview.js +46 -18
- package/dist/components/Company/PaySchedule/management/PayScheduleOverview.js.map +1 -1
- package/dist/components/Company/StateTaxes/StateTaxesForm/Actions.js +7 -5
- package/dist/components/Company/StateTaxes/StateTaxesForm/Actions.js.map +1 -1
- package/dist/components/Company/StateTaxes/StateTaxesForm/StateTaxesForm.js +96 -69
- package/dist/components/Company/StateTaxes/StateTaxesForm/StateTaxesForm.js.map +1 -1
- package/dist/components/Company/StateTaxes/StateTaxesForm/context.js +6 -3
- package/dist/components/Company/StateTaxes/StateTaxesForm/context.js.map +1 -1
- package/dist/components/Company/StateTaxes/StateTaxesList/Actions.js +8 -6
- package/dist/components/Company/StateTaxes/StateTaxesList/Actions.js.map +1 -1
- package/dist/components/Company/StateTaxes/StateTaxesList/context.js +6 -3
- package/dist/components/Company/StateTaxes/StateTaxesList/context.js.map +1 -1
- package/dist/components/Company/StateTaxes/TaxRateManagement/context.js +6 -3
- package/dist/components/Company/StateTaxes/TaxRateManagement/context.js.map +1 -1
- package/dist/components/Company/StateTaxes/shared/requirementSetError.js +27 -10
- package/dist/components/Company/StateTaxes/shared/requirementSetError.js.map +1 -1
- package/dist/components/Company/TaxPayments/TaxPaymentDetail/TaxPaymentDetail.js +77 -0
- package/dist/components/Company/TaxPayments/TaxPaymentDetail/TaxPaymentDetail.js.map +1 -0
- package/dist/components/Company/TaxPayments/TaxPaymentDetail/TaxPaymentDetailPresentation.js +94 -0
- package/dist/components/Company/TaxPayments/TaxPaymentDetail/TaxPaymentDetailPresentation.js.map +1 -0
- package/dist/components/Company/TaxPayments/TaxPaymentsFlow/TaxPaymentsFlow.js +26 -0
- package/dist/components/Company/TaxPayments/TaxPaymentsFlow/TaxPaymentsFlow.js.map +1 -0
- package/dist/components/Company/TaxPayments/TaxPaymentsFlow/TaxPaymentsFlowComponents.js +25 -0
- package/dist/components/Company/TaxPayments/TaxPaymentsFlow/TaxPaymentsFlowComponents.js.map +1 -0
- package/dist/components/Company/TaxPayments/TaxPaymentsFlow/taxPaymentsStateMachine.js +33 -0
- package/dist/components/Company/TaxPayments/TaxPaymentsFlow/taxPaymentsStateMachine.js.map +1 -0
- package/dist/components/Company/TaxPayments/TaxPaymentsList/TaxPaymentsList.js +55 -0
- package/dist/components/Company/TaxPayments/TaxPaymentsList/TaxPaymentsList.js.map +1 -0
- package/dist/components/Company/TaxPayments/TaxPaymentsList/TaxPaymentsListPresentation.js +153 -0
- package/dist/components/Company/TaxPayments/TaxPaymentsList/TaxPaymentsListPresentation.js.map +1 -0
- package/dist/components/Company/TaxPayments/TaxPaymentsList/TaxPaymentsListPresentation.module.scss.js +14 -0
- package/dist/components/Company/TaxPayments/TaxPaymentsList/TaxPaymentsListPresentation.module.scss.js.map +1 -0
- package/dist/components/Company/TaxPayments/shared/payrollLookupWindow.js +16 -0
- package/dist/components/Company/TaxPayments/shared/payrollLookupWindow.js.map +1 -0
- package/dist/components/Company/TaxPayments/shared/taxPaymentStatus.js +34 -0
- package/dist/components/Company/TaxPayments/shared/taxPaymentStatus.js.map +1 -0
- package/dist/components/Company/TaxPayments/shared/useAllTaxPayments.js +30 -0
- package/dist/components/Company/TaxPayments/shared/useAllTaxPayments.js.map +1 -0
- package/dist/components/Company/exports/companyManagement.js +10 -4
- package/dist/components/Company/exports/companyManagement.js.map +1 -1
- package/dist/components/Contractor/Compensation/management/CompensationCard/CompensationCard.js +17 -16
- package/dist/components/Contractor/Compensation/management/CompensationCard/CompensationCard.js.map +1 -1
- package/dist/components/Contractor/Documents/management/DocumentsCard/DocumentsCard.js +9 -8
- package/dist/components/Contractor/Documents/management/DocumentsCard/DocumentsCard.js.map +1 -1
- package/dist/components/Contractor/PaymentMethod/shared/ContractorBankAccountFormBody/ContractorBankAccountFormBody.js +8 -6
- package/dist/components/Contractor/PaymentMethod/shared/ContractorBankAccountFormBody/ContractorBankAccountFormBody.js.map +1 -1
- package/dist/components/Contractor/Profile/management/ProfileCard/ProfileCard.js +27 -26
- package/dist/components/Contractor/Profile/management/ProfileCard/ProfileCard.js.map +1 -1
- package/dist/components/Contractor/Profile/management/ProfileEditForm.js +11 -11
- package/dist/components/Employee/Deductions/management/DeductionsCard/DeductionsCard.js +13 -12
- package/dist/components/Employee/Deductions/management/DeductionsCard/DeductionsCard.js.map +1 -1
- package/dist/components/Employee/Documents/management/DocumentsCard/DocumentsCard.js +13 -12
- package/dist/components/Employee/Documents/management/DocumentsCard/DocumentsCard.js.map +1 -1
- package/dist/components/Employee/Documents/onboarding/DocumentSigner/DocumentList/Actions.js +8 -6
- package/dist/components/Employee/Documents/onboarding/DocumentSigner/DocumentList/Actions.js.map +1 -1
- package/dist/components/Employee/Documents/onboarding/DocumentSigner/DocumentList/useDocumentList.js +6 -3
- package/dist/components/Employee/Documents/onboarding/DocumentSigner/DocumentList/useDocumentList.js.map +1 -1
- package/dist/components/Employee/EmployeeListFlow/employeeListStateMachine.js +24 -23
- package/dist/components/Employee/EmployeeListFlow/employeeListStateMachine.js.map +1 -1
- package/dist/components/Employee/FederalTaxes/management/FederalTaxesEditForm.js +4 -3
- package/dist/components/Employee/FederalTaxes/management/FederalTaxesEditForm.js.map +1 -1
- package/dist/components/Employee/FederalTaxes/onboarding/FederalTaxes.js +4 -3
- package/dist/components/Employee/FederalTaxes/onboarding/FederalTaxes.js.map +1 -1
- package/dist/components/Employee/PaymentMethod/shared/BankFormBody/BankFormBody.js +24 -22
- package/dist/components/Employee/PaymentMethod/shared/BankFormBody/BankFormBody.js.map +1 -1
- package/dist/components/Employee/Paystubs/management/PaystubsCard/PaystubsCard.js +9 -8
- package/dist/components/Employee/Paystubs/management/PaystubsCard/PaystubsCard.js.map +1 -1
- package/dist/components/Employee/Profile/management/ProfileCard/ProfileCard.js +15 -14
- package/dist/components/Employee/Profile/management/ProfileCard/ProfileCard.js.map +1 -1
- package/dist/components/Employee/Profile/management/ProfileEditForm.js +1 -1
- package/dist/components/Employee/Profile/onboarding/EmployeeProfile.js +1 -1
- package/dist/components/Employee/Profile/shared/useEmployeeDetailsForm/employeeDetailsSchema.js +13 -13
- package/dist/components/Employee/Profile/shared/useEmployeeDetailsForm/employeeDetailsSchema.js.map +1 -1
- package/dist/components/Employee/StateTaxes/management/StateTaxesEditForm.js +8 -7
- package/dist/components/Employee/StateTaxes/management/StateTaxesEditForm.js.map +1 -1
- package/dist/components/Employee/StateTaxes/onboarding/StateTaxes.js +8 -7
- package/dist/components/Employee/StateTaxes/onboarding/StateTaxes.js.map +1 -1
- package/dist/components/Employee/Terminations/TerminationFlow/terminationStateMachine.js +42 -34
- package/dist/components/Employee/Terminations/TerminationFlow/terminationStateMachine.js.map +1 -1
- package/dist/components/Payroll/OffCyclePayPeriodDateForm/OffCyclePayPeriodDateFormPresentation.js +16 -14
- package/dist/components/Payroll/OffCyclePayPeriodDateForm/OffCyclePayPeriodDateFormPresentation.js.map +1 -1
- package/dist/components/Payroll/OffCycleReasonSelection/OffCycleReasonSelectionPresentation.js +8 -6
- package/dist/components/Payroll/OffCycleReasonSelection/OffCycleReasonSelectionPresentation.js.map +1 -1
- package/dist/components/Payroll/OffCycleTaxWithholdingModal/OffCycleTaxWithholdingModal.js +11 -9
- package/dist/components/Payroll/OffCycleTaxWithholdingModal/OffCycleTaxWithholdingModal.js.map +1 -1
- package/dist/components/Payroll/PayrollEditEmployee/shared/usePayrollEditEmployeeForm/payrollEditEmployeeHelpers.js +113 -111
- package/dist/components/Payroll/PayrollEditEmployee/shared/usePayrollEditEmployeeForm/payrollEditEmployeeHelpers.js.map +1 -1
- package/dist/components/Payroll/PayrollFlow/PayrollFlow.js.map +1 -1
- package/dist/components/Payroll/PayrollFlow/payrollStateMachine.js +60 -52
- package/dist/components/Payroll/PayrollFlow/payrollStateMachine.js.map +1 -1
- package/dist/components/Payroll/PayrollHistory/PayrollHistory.js +27 -31
- package/dist/components/Payroll/PayrollHistory/PayrollHistory.js.map +1 -1
- package/dist/components/Payroll/PayrollLanding/PayrollLanding.js.map +1 -1
- package/dist/components/Payroll/PayrollLanding/payrollLandingStateMachine.js +23 -18
- package/dist/components/Payroll/PayrollLanding/payrollLandingStateMachine.js.map +1 -1
- package/dist/components/Payroll/PayrollList/PayrollList.js +31 -35
- package/dist/components/Payroll/PayrollList/PayrollList.js.map +1 -1
- package/dist/components/Payroll/PayrollOverview/PayrollOverview.js +204 -179
- package/dist/components/Payroll/PayrollOverview/PayrollOverview.js.map +1 -1
- package/dist/components/Payroll/PayrollOverview/PayrollOverview.module.scss.js +8 -0
- package/dist/components/Payroll/PayrollOverview/PayrollOverview.module.scss.js.map +1 -0
- package/dist/components/Payroll/PrintChecks/PrintChecksForm/PrintChecksForm.js +4 -4
- package/dist/components/Payroll/PrintChecks/PrintChecksForm/PrintChecksForm.js.map +1 -1
- package/dist/components/Payroll/PrintChecks/PrintChecksForm/useGenerationPoll.js +50 -41
- package/dist/components/Payroll/PrintChecks/PrintChecksForm/useGenerationPoll.js.map +1 -1
- package/dist/components/Payroll/TransitionPayroll/useResolveTransitionPayroll.js +5 -9
- package/dist/components/Payroll/TransitionPayroll/useResolveTransitionPayroll.js.map +1 -1
- package/dist/components/Payroll/UNSTABLE_PayrollEditEmployee/UNSTABLE_PayrollEditEmployee.js +164 -154
- package/dist/components/Payroll/UNSTABLE_PayrollEditEmployee/UNSTABLE_PayrollEditEmployee.js.map +1 -1
- package/dist/components/Payroll/UNSTABLE_PayrollEditEmployee/UNSTABLE_PayrollEditEmployee.module.scss.js +9 -5
- package/dist/components/Payroll/UNSTABLE_PayrollEditEmployee/UNSTABLE_PayrollEditEmployee.module.scss.js.map +1 -1
- package/dist/components/Payroll/helpers.js +91 -84
- package/dist/components/Payroll/helpers.js.map +1 -1
- package/dist/components/Payroll/usePreparedPayrollData.js +16 -13
- package/dist/components/Payroll/usePreparedPayrollData.js.map +1 -1
- package/dist/components/TimeOff/HolidayPolicyDetail/HolidayPolicyDetailPresentation.js +4 -2
- package/dist/components/TimeOff/HolidayPolicyDetail/HolidayPolicyDetailPresentation.js.map +1 -1
- package/dist/components/TimeOff/shared/EmployeeTable/EmployeeTable.js +8 -6
- package/dist/components/TimeOff/shared/EmployeeTable/EmployeeTable.js.map +1 -1
- package/dist/components/TimeOff/shared/PolicyDetailLayout/PolicyDetailLayout.js +30 -28
- package/dist/components/TimeOff/shared/PolicyDetailLayout/PolicyDetailLayout.js.map +1 -1
- package/dist/contexts/ApiProvider/ApiProvider.js +19 -18
- package/dist/contexts/ApiProvider/ApiProvider.js.map +1 -1
- package/dist/contexts/ApiProvider/createSdkQueryClient.js +4 -3
- package/dist/contexts/ApiProvider/createSdkQueryClient.js.map +1 -1
- package/dist/contexts/ApiProvider/payrollOffCycleReasonEnumHook.js +36 -0
- package/dist/contexts/ApiProvider/payrollOffCycleReasonEnumHook.js.map +1 -0
- package/dist/contexts/GustoProvider/GustoProviderCustomUIAdapter.js +4 -2
- package/dist/contexts/GustoProvider/GustoProviderCustomUIAdapter.js.map +1 -1
- package/dist/contexts/ObservabilityProvider/sanitization.js +98 -47
- package/dist/contexts/ObservabilityProvider/sanitization.js.map +1 -1
- package/dist/contexts/UnstableFeaturesProvider/useUnstableFeature.js.map +1 -1
- package/dist/helpers/validations.js +1 -1
- package/dist/helpers/validations.js.map +1 -1
- package/dist/i18n/I18n.js +2 -0
- package/dist/i18n/I18n.js.map +1 -1
- package/dist/i18n/en/Company.AssignSignatory.json.js +1 -1
- package/dist/i18n/en/Company.Management.PaySchedule.json.js +24 -14
- package/dist/i18n/en/Company.Management.PaySchedule.json.js.map +1 -1
- package/dist/i18n/en/Company.Management.PayScheduleAssignment.json.js +12 -10
- package/dist/i18n/en/Company.Management.PayScheduleAssignment.json.js.map +1 -1
- package/dist/i18n/en/Company.Management.TaxPaymentDetail.json.js +26 -0
- package/dist/i18n/en/Company.Management.TaxPaymentDetail.json.js.map +1 -0
- package/dist/i18n/en/Company.Management.TaxPaymentsList.json.js +48 -0
- package/dist/i18n/en/Company.Management.TaxPaymentsList.json.js.map +1 -0
- package/dist/i18n/en/Company.StateTaxes.json.js +1 -1
- package/dist/i18n/en/Payroll.PayrollOverview.json.js +42 -36
- package/dist/i18n/en/Payroll.PayrollOverview.json.js.map +1 -1
- package/dist/package.json.js +1 -1
- package/dist/partner-hook-utils/form/fields/CheckboxHookField.js +10 -8
- package/dist/partner-hook-utils/form/fields/CheckboxHookField.js.map +1 -1
- package/dist/partner-hook-utils/form/fields/NumberInputHookField.js +14 -12
- package/dist/partner-hook-utils/form/fields/NumberInputHookField.js.map +1 -1
- package/dist/partner-hook-utils/form/fields/RadioGroupHookField.js +15 -13
- package/dist/partner-hook-utils/form/fields/RadioGroupHookField.js.map +1 -1
- package/dist/partner-hook-utils/form/fields/SelectHookField.js +12 -10
- package/dist/partner-hook-utils/form/fields/SelectHookField.js.map +1 -1
- package/dist/partner-hook-utils/form/fields/SwitchHookField.js +16 -14
- package/dist/partner-hook-utils/form/fields/SwitchHookField.js.map +1 -1
- package/dist/partner-hook-utils/form/fields/TextInputHookField.js +10 -8
- package/dist/partner-hook-utils/form/fields/TextInputHookField.js.map +1 -1
- package/dist/shared/constants.js +62 -56
- package/dist/shared/constants.js.map +1 -1
- package/dist/src/components/Company/PaySchedule/management/PayScheduleAssignment/AssignmentCompensationStepPresentation.d.ts +15 -0
- package/dist/src/components/Company/PaySchedule/management/PayScheduleAssignment/AssignmentTypeStepPresentation.d.ts +3 -3
- package/dist/src/components/Company/PaySchedule/management/PayScheduleAssignment/PayScheduleAssignment.d.ts +7 -3
- package/dist/src/components/Company/PaySchedule/management/PayScheduleAssignment/PayScheduleAssignmentComponents.d.ts +20 -4
- package/dist/src/components/Company/PaySchedule/management/PayScheduleAssignment/scheduleLabel.d.ts +3 -0
- package/dist/src/components/Company/PaySchedule/management/PayScheduleAssignment/usePayScheduleAssignment.d.ts +10 -1
- package/dist/src/components/Company/PaySchedule/management/PayScheduleCompensationOverviewPresentation.d.ts +25 -0
- package/dist/src/components/Company/StateTaxes/shared/requirementSetError.d.ts +18 -5
- package/dist/src/components/Company/TaxPayments/TaxPaymentDetail/TaxPaymentDetail.d.ts +31 -0
- package/dist/src/components/Company/TaxPayments/TaxPaymentDetail/TaxPaymentDetailPresentation.d.ts +19 -0
- package/dist/src/components/Company/TaxPayments/TaxPaymentsFlow/TaxPaymentsFlow.d.ts +42 -0
- package/dist/src/components/Company/TaxPayments/TaxPaymentsFlow/TaxPaymentsFlowComponents.d.ts +20 -0
- package/dist/src/components/Company/TaxPayments/TaxPaymentsFlow/taxPaymentsStateMachine.d.ts +10 -0
- package/dist/src/components/Company/TaxPayments/TaxPaymentsList/TaxPaymentsList.d.ts +28 -0
- package/dist/src/components/Company/TaxPayments/TaxPaymentsList/TaxPaymentsListPresentation.d.ts +33 -0
- package/dist/src/components/Company/TaxPayments/index.d.ts +6 -0
- package/dist/src/components/Company/TaxPayments/shared/payrollLookupWindow.d.ts +29 -0
- package/dist/src/components/Company/TaxPayments/shared/payrollLookupWindow.test.d.ts +1 -0
- package/dist/src/components/Company/TaxPayments/shared/taxPaymentStatus.d.ts +62 -0
- package/dist/src/components/Company/TaxPayments/shared/taxPaymentStatus.test.d.ts +1 -0
- package/dist/src/components/Company/TaxPayments/shared/useAllTaxPayments.d.ts +30 -0
- package/dist/src/components/Company/exports/companyManagement.d.ts +2 -0
- package/dist/src/components/Employee/Profile/shared/useEmployeeDetailsForm/employeeDetailsSchema.test.d.ts +1 -0
- package/dist/src/components/Payroll/PayrollConfiguration/__fixtures__/payrollConfigurationMocks.d.ts +6 -1
- package/dist/src/components/Payroll/PayrollFlow/PayrollFlow.d.ts +1 -0
- package/dist/src/components/Payroll/PayrollLanding/PayrollLanding.d.ts +1 -0
- package/dist/src/components/Payroll/PayrollOverview/PayrollOverview.d.ts +9 -3
- package/dist/src/components/Payroll/helpers.d.ts +14 -18
- package/dist/src/contexts/ApiProvider/createSdkQueryClient.d.ts +2 -0
- package/dist/src/contexts/ApiProvider/createSdkQueryClient.test.d.ts +1 -0
- package/dist/src/contexts/ApiProvider/payrollOffCycleReasonEnumHook.d.ts +14 -0
- package/dist/src/contexts/ApiProvider/payrollOffCycleReasonEnumHook.test.d.ts +1 -0
- package/dist/src/contexts/ObservabilityProvider/sanitization.d.ts +8 -17
- package/dist/src/contexts/ObservabilityProvider/useSanitizedObservability.test.d.ts +1 -0
- package/dist/src/contexts/UnstableFeaturesProvider/useUnstableFeature.d.ts +2 -0
- package/dist/src/helpers/validations.test.d.ts +1 -0
- package/dist/src/i18n/types.d.ts +192 -4
- package/dist/src/models/external.d.ts +9 -6
- package/dist/src/shared/constants.d.ts +18 -0
- package/dist/src/types/observability.d.ts +59 -20
- package/dist/style.css +1 -1
- package/docs/guides/endpoint-inventory.json +48 -0
- package/package.json +34 -31
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"PolicyDetailLayout.js","sources":["../../../../../src/components/TimeOff/shared/PolicyDetailLayout/PolicyDetailLayout.tsx"],"sourcesContent":["import { useTranslation } from 'react-i18next'\nimport type { EmployeeTableItem } from '../EmployeeTable/EmployeeTableTypes'\nimport { EmployeeTable } from '../EmployeeTable/EmployeeTable'\nimport type { PolicyDetailLayoutProps } from './PolicyDetailLayoutTypes'\nimport { DetailViewLayout, EmptyData } from '@/components/Common'\nimport { useComponentContext } from '@/contexts/ComponentAdapter/useComponentContext'\nimport { useI18n } from '@/i18n'\nimport PlusCircleIcon from '@/assets/icons/plus-circle.svg?react'\n\nconst EMPLOYEES_TAB_ID = 'employees'\n\n/** @internal */\nexport function PolicyDetailLayout<T extends EmployeeTableItem>({\n title,\n subtitle,\n onBack,\n backLabel,\n actions,\n firstTab,\n selectedTabId,\n onTabChange,\n employees,\n onAddEmployee,\n removeDialog,\n successAlert,\n onDismissAlert,\n className,\n}: PolicyDetailLayoutProps<T>) {\n useI18n('Company.TimeOff.PolicyDetail')\n const { t } = useTranslation('Company.TimeOff.PolicyDetail')\n const { Alert, Dialog, Button } = useComponentContext()\n\n const emptyEmployeesState =\n employees.emptyState ??\n (onAddEmployee\n ? () => (\n <EmptyData title={t('emptyEmployees.title')}>\n <Button\n variant=\"secondary\"\n icon={<PlusCircleIcon aria-hidden />}\n onClick={onAddEmployee}\n >\n {t('emptyEmployees.addEmployeeCta')}\n </Button>\n </EmptyData>\n )\n : undefined)\n\n const tabs = [\n {\n id: firstTab.id,\n label: firstTab.label,\n content: firstTab.content,\n },\n {\n id: EMPLOYEES_TAB_ID,\n label: t('tabs.employees'),\n content: (\n <EmployeeTable<T>\n data={employees.data}\n searchValue={employees.searchValue}\n onSearchChange={employees.onSearchChange}\n onSearchClear={employees.onSearchClear}\n searchPlaceholder={employees.searchPlaceholder}\n itemMenu={employees.itemMenu}\n pagination={employees.pagination}\n isFetching={employees.isFetching}\n emptyState={emptyEmployeesState}\n additionalColumns={employees.additionalColumns}\n hideJobTitle={employees.hideJobTitle}\n />\n ),\n },\n ]\n\n return (\n <>\n {successAlert && <Alert status=\"success\" label={successAlert} onDismiss={onDismissAlert} />}\n\n <DetailViewLayout\n title={title}\n subtitle={subtitle}\n onBack={onBack}\n backLabel={backLabel}\n actions={actions}\n tabs={tabs}\n selectedTabId={selectedTabId}\n onTabChange={onTabChange}\n className={className}\n />\n\n <Dialog\n isOpen={removeDialog.isOpen}\n onClose={removeDialog.onClose}\n onPrimaryActionClick={removeDialog.onConfirm}\n isPrimaryActionLoading={removeDialog.isPending}\n isDestructive\n title={t('removeEmployeeDialog.title', { name: removeDialog.employeeName })}\n primaryActionLabel={t('removeEmployeeDialog.confirmCta')}\n closeActionLabel={t('removeEmployeeDialog.cancelCta')}\n >\n {t('removeEmployeeDialog.description', { name: removeDialog.employeeName })}\n </Dialog>\n </>\n )\n}\n"],"names":["EMPLOYEES_TAB_ID","PolicyDetailLayout","title","subtitle","onBack","backLabel","actions","firstTab","selectedTabId","onTabChange","employees","onAddEmployee","removeDialog","successAlert","onDismissAlert","className","useI18n","useTranslation","Alert","Dialog","Button","useComponentContext","emptyEmployeesState","EmptyData","jsx","PlusCircleIcon","tabs","EmployeeTable","jsxs","Fragment","DetailViewLayout"],"mappings":"
|
|
1
|
+
{"version":3,"file":"PolicyDetailLayout.js","sources":["../../../../../src/components/TimeOff/shared/PolicyDetailLayout/PolicyDetailLayout.tsx"],"sourcesContent":["import { useTranslation } from 'react-i18next'\nimport type { EmployeeTableItem } from '../EmployeeTable/EmployeeTableTypes'\nimport { EmployeeTable } from '../EmployeeTable/EmployeeTable'\nimport type { PolicyDetailLayoutProps } from './PolicyDetailLayoutTypes'\nimport { DetailViewLayout, EmptyData } from '@/components/Common'\nimport { useComponentContext } from '@/contexts/ComponentAdapter/useComponentContext'\nimport { useI18n } from '@/i18n'\nimport PlusCircleIcon from '@/assets/icons/plus-circle.svg?react'\n\nconst EMPLOYEES_TAB_ID = 'employees'\n\n/** @internal */\nexport function PolicyDetailLayout<T extends EmployeeTableItem>({\n title,\n subtitle,\n onBack,\n backLabel,\n actions,\n firstTab,\n selectedTabId,\n onTabChange,\n employees,\n onAddEmployee,\n removeDialog,\n successAlert,\n onDismissAlert,\n className,\n}: PolicyDetailLayoutProps<T>) {\n useI18n('Company.TimeOff.PolicyDetail')\n const { t } = useTranslation('Company.TimeOff.PolicyDetail')\n const { Alert, Dialog, Button } = useComponentContext()\n\n const emptyEmployeesState =\n employees.emptyState ??\n (onAddEmployee\n ? () => (\n <EmptyData title={t('emptyEmployees.title')}>\n <Button\n variant=\"secondary\"\n icon={<PlusCircleIcon aria-hidden />}\n onClick={onAddEmployee}\n >\n {t('emptyEmployees.addEmployeeCta')}\n </Button>\n </EmptyData>\n )\n : undefined)\n\n const tabs = [\n {\n id: firstTab.id,\n label: firstTab.label,\n content: firstTab.content,\n },\n {\n id: EMPLOYEES_TAB_ID,\n label: t('tabs.employees'),\n content: (\n <EmployeeTable<T>\n data={employees.data}\n searchValue={employees.searchValue}\n onSearchChange={employees.onSearchChange}\n onSearchClear={employees.onSearchClear}\n searchPlaceholder={employees.searchPlaceholder}\n itemMenu={employees.itemMenu}\n pagination={employees.pagination}\n isFetching={employees.isFetching}\n emptyState={emptyEmployeesState}\n additionalColumns={employees.additionalColumns}\n hideJobTitle={employees.hideJobTitle}\n />\n ),\n },\n ]\n\n return (\n <>\n {successAlert && <Alert status=\"success\" label={successAlert} onDismiss={onDismissAlert} />}\n\n <DetailViewLayout\n title={title}\n subtitle={subtitle}\n onBack={onBack}\n backLabel={backLabel}\n actions={actions}\n tabs={tabs}\n selectedTabId={selectedTabId}\n onTabChange={onTabChange}\n className={className}\n />\n\n <Dialog\n isOpen={removeDialog.isOpen}\n onClose={removeDialog.onClose}\n onPrimaryActionClick={removeDialog.onConfirm}\n isPrimaryActionLoading={removeDialog.isPending}\n isDestructive\n title={t('removeEmployeeDialog.title', { name: removeDialog.employeeName })}\n primaryActionLabel={t('removeEmployeeDialog.confirmCta')}\n closeActionLabel={t('removeEmployeeDialog.cancelCta')}\n >\n {t('removeEmployeeDialog.description', { name: removeDialog.employeeName })}\n </Dialog>\n </>\n )\n}\n"],"names":["EMPLOYEES_TAB_ID","PolicyDetailLayout","title","subtitle","onBack","backLabel","actions","firstTab","selectedTabId","onTabChange","employees","onAddEmployee","removeDialog","successAlert","onDismissAlert","className","useI18n","t","useTranslation","Alert","Dialog","Button","useComponentContext","emptyEmployeesState","EmptyData","jsx","PlusCircleIcon","tabs","EmployeeTable","jsxs","Fragment","DetailViewLayout"],"mappings":";;;;;;;;;;AASA,MAAMA,IAAmB;AAGlB,SAASC,EAAgD;AAAA,EAC9D,OAAAC;AAAA,EACA,UAAAC;AAAA,EACA,QAAAC;AAAA,EACA,WAAAC;AAAA,EACA,SAAAC;AAAA,EACA,UAAAC;AAAA,EACA,eAAAC;AAAA,EACA,aAAAC;AAAA,EACA,WAAAC;AAAA,EACA,eAAAC;AAAA,EACA,cAAAC;AAAA,EACA,cAAAC;AAAA,EACA,gBAAAC;AAAA,EACA,WAAAC;AACF,GAA+B;AAC7B,EAAAC,EAAQ,8BAA8B;AACtC,QAAM,EAAE,GAAAC,EAAA,IAAMC,EAAe,8BAA8B,GACrD,EAAE,OAAAC,GAAO,QAAAC,GAAQ,QAAAC,EAAA,IAAWC,EAAA,GAE5BC,IACJb,EAAU,eACTC,IACG,wBACGa,GAAA,EAAU,OAAOP,EAAE,sBAAsB,GACxC,UAAA,gBAAAQ;AAAA,IAACJ;AAAA,IAAA;AAAA,MACC,SAAQ;AAAA,MACR,MAAM,gBAAAI,EAACC,GAAA,EAAe,eAAW,GAAA,CAAC;AAAA,MAClC,SAASf;AAAA,MAER,YAAE,+BAA+B;AAAA,IAAA;AAAA,EAAA,GAEtC,IAEF,SAEAgB,IAAO;AAAA,IACX;AAAA,MACE,IAAIpB,EAAS;AAAA,MACb,OAAOA,EAAS;AAAA,MAChB,SAASA,EAAS;AAAA,IAAA;AAAA,IAEpB;AAAA,MACE,IAAIP;AAAA,MACJ,OAAOiB,EAAE,gBAAgB;AAAA,MACzB,SACE,gBAAAQ;AAAA,QAACG;AAAA,QAAA;AAAA,UACC,MAAMlB,EAAU;AAAA,UAChB,aAAaA,EAAU;AAAA,UACvB,gBAAgBA,EAAU;AAAA,UAC1B,eAAeA,EAAU;AAAA,UACzB,mBAAmBA,EAAU;AAAA,UAC7B,UAAUA,EAAU;AAAA,UACpB,YAAYA,EAAU;AAAA,UACtB,YAAYA,EAAU;AAAA,UACtB,YAAYa;AAAA,UACZ,mBAAmBb,EAAU;AAAA,UAC7B,cAAcA,EAAU;AAAA,QAAA;AAAA,MAAA;AAAA,IAC1B;AAAA,EAEJ;AAGF,SACE,gBAAAmB,EAAAC,GAAA,EACG,UAAA;AAAA,IAAAjB,uBAAiBM,GAAA,EAAM,QAAO,WAAU,OAAON,GAAc,WAAWC,GAAgB;AAAA,IAEzF,gBAAAW;AAAA,MAACM;AAAA,MAAA;AAAA,QACC,OAAA7B;AAAA,QACA,UAAAC;AAAA,QACA,QAAAC;AAAA,QACA,WAAAC;AAAA,QACA,SAAAC;AAAA,QACA,MAAAqB;AAAA,QACA,eAAAnB;AAAA,QACA,aAAAC;AAAA,QACA,WAAAM;AAAA,MAAA;AAAA,IAAA;AAAA,IAGF,gBAAAU;AAAA,MAACL;AAAA,MAAA;AAAA,QACC,QAAQR,EAAa;AAAA,QACrB,SAASA,EAAa;AAAA,QACtB,sBAAsBA,EAAa;AAAA,QACnC,wBAAwBA,EAAa;AAAA,QACrC,eAAa;AAAA,QACb,OAAOK,EAAE,8BAA8B,EAAE,MAAML,EAAa,cAAc;AAAA,QAC1E,oBAAoBK,EAAE,iCAAiC;AAAA,QACvD,kBAAkBA,EAAE,gCAAgC;AAAA,QAEnD,YAAE,oCAAoC,EAAE,MAAML,EAAa,cAAc;AAAA,MAAA;AAAA,IAAA;AAAA,EAC5E,GACF;AAEJ;"}
|
|
@@ -1,28 +1,29 @@
|
|
|
1
|
-
import { jsx as
|
|
1
|
+
import { jsx as m } from "react/jsx-runtime";
|
|
2
2
|
import { QueryClientProvider as E } from "@tanstack/react-query";
|
|
3
3
|
import { GustoEmbeddedProvider as g } from "@gusto/embedded-api/react-query/_context";
|
|
4
|
-
import { GustoEmbeddedCore as
|
|
5
|
-
import { SDKHooks as
|
|
6
|
-
import { useMemo as
|
|
7
|
-
import { apiVersionHook as
|
|
4
|
+
import { GustoEmbeddedCore as l } from "@gusto/embedded-api/core";
|
|
5
|
+
import { SDKHooks as R } from "@gusto/embedded-api/hooks/hooks";
|
|
6
|
+
import { useMemo as u } from "react";
|
|
7
|
+
import { apiVersionHook as q } from "./apiVersionHook.js";
|
|
8
8
|
import { apiVersionMismatchHook as a } from "./apiVersionMismatchHook.js";
|
|
9
9
|
import { informationRequestEnumHook as A } from "./informationRequestEnumHook.js";
|
|
10
10
|
import { payrollDeductionAmountHook as C } from "./payrollDeductionAmountHook.js";
|
|
11
|
-
import {
|
|
12
|
-
|
|
13
|
-
|
|
14
|
-
|
|
11
|
+
import { payrollOffCycleReasonEnumHook as S } from "./payrollOffCycleReasonEnumHook.js";
|
|
12
|
+
import { createSdkQueryClient as b } from "./createSdkQueryClient.js";
|
|
13
|
+
function K({
|
|
14
|
+
url: i,
|
|
15
|
+
headers: s,
|
|
15
16
|
hooks: r,
|
|
16
17
|
children: H,
|
|
17
18
|
queryClient: f
|
|
18
19
|
}) {
|
|
19
|
-
const p =
|
|
20
|
-
const t = new
|
|
21
|
-
serverURL:
|
|
22
|
-
}), e = t._options.hooks || new
|
|
23
|
-
if (e.registerBeforeRequestHook(
|
|
20
|
+
const p = u(() => {
|
|
21
|
+
const t = new l({
|
|
22
|
+
serverURL: i
|
|
23
|
+
}), e = t._options.hooks || new R();
|
|
24
|
+
if (e.registerBeforeRequestHook(q), e.registerAfterSuccessHook(a), e.registerAfterErrorHook(a), e.registerAfterSuccessHook(A), e.registerAfterSuccessHook(C), e.registerAfterSuccessHook(S), s) {
|
|
24
25
|
const o = {
|
|
25
|
-
beforeRequest: (
|
|
26
|
+
beforeRequest: (y, n) => (new Headers(s).forEach((c, k) => {
|
|
26
27
|
c && n.headers.set(k, c);
|
|
27
28
|
}), n)
|
|
28
29
|
};
|
|
@@ -37,10 +38,10 @@ function Q({
|
|
|
37
38
|
}), r?.afterError && r.afterError.forEach((o) => {
|
|
38
39
|
e.registerAfterErrorHook(o);
|
|
39
40
|
}), t._options.hooks || (t._options.hooks = e), t;
|
|
40
|
-
}, [
|
|
41
|
-
return /* @__PURE__ */
|
|
41
|
+
}, [i, s, r]), d = u(() => f ?? b(), [f]);
|
|
42
|
+
return /* @__PURE__ */ m(E, { client: d, children: /* @__PURE__ */ m(g, { client: p, children: H }) });
|
|
42
43
|
}
|
|
43
44
|
export {
|
|
44
|
-
|
|
45
|
+
K as ApiProvider
|
|
45
46
|
};
|
|
46
47
|
//# sourceMappingURL=ApiProvider.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"ApiProvider.js","sources":["../../../src/contexts/ApiProvider/ApiProvider.tsx"],"sourcesContent":["import { QueryClientProvider, type QueryClient } from '@tanstack/react-query'\nimport { GustoEmbeddedProvider } from '@gusto/embedded-api/react-query/_context'\nimport { GustoEmbeddedCore } from '@gusto/embedded-api/core'\nimport { SDKHooks as NativeSDKHooks } from '@gusto/embedded-api/hooks/hooks'\nimport { useMemo } from 'react'\nimport { apiVersionHook } from './apiVersionHook'\nimport { apiVersionMismatchHook } from './apiVersionMismatchHook'\nimport { informationRequestEnumHook } from './informationRequestEnumHook'\nimport { payrollDeductionAmountHook } from './payrollDeductionAmountHook'\nimport { createSdkQueryClient } from './createSdkQueryClient'\nimport type { SDKHooks, BeforeRequestHook } from '@/types/hooks'\n\n/**\n * Props for {@link ApiProvider}.\n *\n * @internal\n */\nexport interface ApiProviderProps {\n /** Base URL the SDK uses for all `@gusto/embedded-api-v-2026-06-15` requests. */\n url: string\n /** Default headers applied to every SDK request, in addition to the `X-Gusto-API-Version` header set automatically. */\n headers?: HeadersInit\n /** Lifecycle hooks for intercepting and modifying SDK requests and responses. */\n hooks?: SDKHooks\n /** Subtree that renders inside the API + React Query providers. */\n children: React.ReactNode\n /** Optional React Query client. When omitted, a client is created with the SDK's defaults (auto-invalidation on mutation success). */\n queryClient?: QueryClient\n}\n\n/**\n * Wires the `@gusto/embedded-api-v-2026-06-15` client and a React Query client into the React tree.\n *\n * @remarks\n * Registers the SDK's `X-Gusto-API-Version` header on every request, warns via `console.warn` if a\n * response reports a different `X-Gusto-API-Version` than was requested (e.g. a proxy rewriting the\n * header), applies any default `headers`, and registers user-supplied lifecycle hooks\n * (`beforeCreateRequest`, `beforeRequest`, `afterSuccess`, `afterError`). When no `queryClient` is\n * supplied, one is created with the SDK's defaults so\n * successful mutations under the `['@gusto/embedded-api-v-2026-06-15']` key invalidate every SDK\n * query automatically. Partners who supply their own `QueryClient` are responsible for matching that\n * contract.\n *\n * Typically wrapped by {@link GustoProvider}; use directly only when composing the provider stack\n * manually.\n *\n * @param props - See {@link ApiProviderProps}.\n * @returns A React subtree wrapped in `QueryClientProvider` and the embedded API context.\n * @internal\n */\nexport function ApiProvider({\n url,\n headers,\n hooks,\n children,\n queryClient: queryClientFromProps,\n}: ApiProviderProps) {\n const gustoClient = useMemo(() => {\n const client = new GustoEmbeddedCore({\n serverURL: url,\n })\n\n const sdkHooks = client._options.hooks || new NativeSDKHooks()\n\n sdkHooks.registerBeforeRequestHook(apiVersionHook)\n sdkHooks.registerAfterSuccessHook(apiVersionMismatchHook)\n sdkHooks.registerAfterErrorHook(apiVersionMismatchHook)\n sdkHooks.registerAfterSuccessHook(informationRequestEnumHook)\n sdkHooks.registerAfterSuccessHook(payrollDeductionAmountHook)\n\n if (headers) {\n const defaultHeaderHook: BeforeRequestHook = {\n beforeRequest: (context, request) => {\n const headersInstance = new Headers(headers)\n headersInstance.forEach((headerValue, headerName) => {\n if (headerValue) {\n request.headers.set(headerName, headerValue)\n }\n })\n return request\n },\n }\n sdkHooks.registerBeforeRequestHook(defaultHeaderHook)\n }\n\n if (hooks?.beforeCreateRequest) {\n hooks.beforeCreateRequest.forEach(hook => {\n sdkHooks.registerBeforeCreateRequestHook(hook)\n })\n }\n\n if (hooks?.beforeRequest) {\n hooks.beforeRequest.forEach(hook => {\n sdkHooks.registerBeforeRequestHook(hook)\n })\n }\n\n if (hooks?.afterSuccess) {\n hooks.afterSuccess.forEach(hook => {\n sdkHooks.registerAfterSuccessHook(hook)\n })\n }\n\n if (hooks?.afterError) {\n hooks.afterError.forEach(hook => {\n sdkHooks.registerAfterErrorHook(hook)\n })\n }\n\n if (!client._options.hooks) {\n client._options.hooks = sdkHooks\n }\n\n return client\n }, [url, headers, hooks])\n\n const queryClient = useMemo(() => {\n return queryClientFromProps ?? createSdkQueryClient()\n }, [queryClientFromProps])\n\n return (\n <QueryClientProvider client={queryClient}>\n <GustoEmbeddedProvider client={gustoClient}>{children}</GustoEmbeddedProvider>\n </QueryClientProvider>\n )\n}\n"],"names":["ApiProvider","url","headers","hooks","children","queryClientFromProps","gustoClient","useMemo","client","GustoEmbeddedCore","sdkHooks","NativeSDKHooks","apiVersionHook","apiVersionMismatchHook","informationRequestEnumHook","payrollDeductionAmountHook","defaultHeaderHook","context","request","headerValue","headerName","hook","queryClient","createSdkQueryClient","jsx","QueryClientProvider","GustoEmbeddedProvider"],"mappings":"
|
|
1
|
+
{"version":3,"file":"ApiProvider.js","sources":["../../../src/contexts/ApiProvider/ApiProvider.tsx"],"sourcesContent":["import { QueryClientProvider, type QueryClient } from '@tanstack/react-query'\nimport { GustoEmbeddedProvider } from '@gusto/embedded-api/react-query/_context'\nimport { GustoEmbeddedCore } from '@gusto/embedded-api/core'\nimport { SDKHooks as NativeSDKHooks } from '@gusto/embedded-api/hooks/hooks'\nimport { useMemo } from 'react'\nimport { apiVersionHook } from './apiVersionHook'\nimport { apiVersionMismatchHook } from './apiVersionMismatchHook'\nimport { informationRequestEnumHook } from './informationRequestEnumHook'\nimport { payrollDeductionAmountHook } from './payrollDeductionAmountHook'\nimport { payrollOffCycleReasonEnumHook } from './payrollOffCycleReasonEnumHook'\nimport { createSdkQueryClient } from './createSdkQueryClient'\nimport type { SDKHooks, BeforeRequestHook } from '@/types/hooks'\n\n/**\n * Props for {@link ApiProvider}.\n *\n * @internal\n */\nexport interface ApiProviderProps {\n /** Base URL the SDK uses for all `@gusto/embedded-api-v-2026-06-15` requests. */\n url: string\n /** Default headers applied to every SDK request, in addition to the `X-Gusto-API-Version` header set automatically. */\n headers?: HeadersInit\n /** Lifecycle hooks for intercepting and modifying SDK requests and responses. */\n hooks?: SDKHooks\n /** Subtree that renders inside the API + React Query providers. */\n children: React.ReactNode\n /** Optional React Query client. When omitted, a client is created with the SDK's defaults (auto-invalidation on mutation success). */\n queryClient?: QueryClient\n}\n\n/**\n * Wires the `@gusto/embedded-api-v-2026-06-15` client and a React Query client into the React tree.\n *\n * @remarks\n * Registers the SDK's `X-Gusto-API-Version` header on every request, warns via `console.warn` if a\n * response reports a different `X-Gusto-API-Version` than was requested (e.g. a proxy rewriting the\n * header), applies any default `headers`, and registers user-supplied lifecycle hooks\n * (`beforeCreateRequest`, `beforeRequest`, `afterSuccess`, `afterError`). When no `queryClient` is\n * supplied, one is created with the SDK's defaults so\n * successful mutations under the `['@gusto/embedded-api-v-2026-06-15']` key invalidate every SDK\n * query automatically. Partners who supply their own `QueryClient` are responsible for matching that\n * contract.\n *\n * Typically wrapped by {@link GustoProvider}; use directly only when composing the provider stack\n * manually.\n *\n * @param props - See {@link ApiProviderProps}.\n * @returns A React subtree wrapped in `QueryClientProvider` and the embedded API context.\n * @internal\n */\nexport function ApiProvider({\n url,\n headers,\n hooks,\n children,\n queryClient: queryClientFromProps,\n}: ApiProviderProps) {\n const gustoClient = useMemo(() => {\n const client = new GustoEmbeddedCore({\n serverURL: url,\n })\n\n const sdkHooks = client._options.hooks || new NativeSDKHooks()\n\n sdkHooks.registerBeforeRequestHook(apiVersionHook)\n sdkHooks.registerAfterSuccessHook(apiVersionMismatchHook)\n sdkHooks.registerAfterErrorHook(apiVersionMismatchHook)\n sdkHooks.registerAfterSuccessHook(informationRequestEnumHook)\n sdkHooks.registerAfterSuccessHook(payrollDeductionAmountHook)\n sdkHooks.registerAfterSuccessHook(payrollOffCycleReasonEnumHook)\n\n if (headers) {\n const defaultHeaderHook: BeforeRequestHook = {\n beforeRequest: (context, request) => {\n const headersInstance = new Headers(headers)\n headersInstance.forEach((headerValue, headerName) => {\n if (headerValue) {\n request.headers.set(headerName, headerValue)\n }\n })\n return request\n },\n }\n sdkHooks.registerBeforeRequestHook(defaultHeaderHook)\n }\n\n if (hooks?.beforeCreateRequest) {\n hooks.beforeCreateRequest.forEach(hook => {\n sdkHooks.registerBeforeCreateRequestHook(hook)\n })\n }\n\n if (hooks?.beforeRequest) {\n hooks.beforeRequest.forEach(hook => {\n sdkHooks.registerBeforeRequestHook(hook)\n })\n }\n\n if (hooks?.afterSuccess) {\n hooks.afterSuccess.forEach(hook => {\n sdkHooks.registerAfterSuccessHook(hook)\n })\n }\n\n if (hooks?.afterError) {\n hooks.afterError.forEach(hook => {\n sdkHooks.registerAfterErrorHook(hook)\n })\n }\n\n if (!client._options.hooks) {\n client._options.hooks = sdkHooks\n }\n\n return client\n }, [url, headers, hooks])\n\n const queryClient = useMemo(() => {\n return queryClientFromProps ?? createSdkQueryClient()\n }, [queryClientFromProps])\n\n return (\n <QueryClientProvider client={queryClient}>\n <GustoEmbeddedProvider client={gustoClient}>{children}</GustoEmbeddedProvider>\n </QueryClientProvider>\n )\n}\n"],"names":["ApiProvider","url","headers","hooks","children","queryClientFromProps","gustoClient","useMemo","client","GustoEmbeddedCore","sdkHooks","NativeSDKHooks","apiVersionHook","apiVersionMismatchHook","informationRequestEnumHook","payrollDeductionAmountHook","payrollOffCycleReasonEnumHook","defaultHeaderHook","context","request","headerValue","headerName","hook","queryClient","createSdkQueryClient","jsx","QueryClientProvider","GustoEmbeddedProvider"],"mappings":";;;;;;;;;;;;AAmDO,SAASA,EAAY;AAAA,EAC1B,KAAAC;AAAA,EACA,SAAAC;AAAA,EACA,OAAAC;AAAA,EACA,UAAAC;AAAA,EACA,aAAaC;AACf,GAAqB;AACnB,QAAMC,IAAcC,EAAQ,MAAM;AAChC,UAAMC,IAAS,IAAIC,EAAkB;AAAA,MACnC,WAAWR;AAAA,IAAA,CACZ,GAEKS,IAAWF,EAAO,SAAS,SAAS,IAAIG,EAAA;AAS9C,QAPAD,EAAS,0BAA0BE,CAAc,GACjDF,EAAS,yBAAyBG,CAAsB,GACxDH,EAAS,uBAAuBG,CAAsB,GACtDH,EAAS,yBAAyBI,CAA0B,GAC5DJ,EAAS,yBAAyBK,CAA0B,GAC5DL,EAAS,yBAAyBM,CAA6B,GAE3Dd,GAAS;AACX,YAAMe,IAAuC;AAAA,QAC3C,eAAe,CAACC,GAASC,OACC,IAAI,QAAQjB,CAAO,EAC3B,QAAQ,CAACkB,GAAaC,MAAe;AACnD,UAAID,KACFD,EAAQ,QAAQ,IAAIE,GAAYD,CAAW;AAAA,QAE/C,CAAC,GACMD;AAAA,MACT;AAEF,MAAAT,EAAS,0BAA0BO,CAAiB;AAAA,IACtD;AAEA,WAAId,GAAO,uBACTA,EAAM,oBAAoB,QAAQ,CAAAmB,MAAQ;AACxC,MAAAZ,EAAS,gCAAgCY,CAAI;AAAA,IAC/C,CAAC,GAGCnB,GAAO,iBACTA,EAAM,cAAc,QAAQ,CAAAmB,MAAQ;AAClC,MAAAZ,EAAS,0BAA0BY,CAAI;AAAA,IACzC,CAAC,GAGCnB,GAAO,gBACTA,EAAM,aAAa,QAAQ,CAAAmB,MAAQ;AACjC,MAAAZ,EAAS,yBAAyBY,CAAI;AAAA,IACxC,CAAC,GAGCnB,GAAO,cACTA,EAAM,WAAW,QAAQ,CAAAmB,MAAQ;AAC/B,MAAAZ,EAAS,uBAAuBY,CAAI;AAAA,IACtC,CAAC,GAGEd,EAAO,SAAS,UACnBA,EAAO,SAAS,QAAQE,IAGnBF;AAAA,EACT,GAAG,CAACP,GAAKC,GAASC,CAAK,CAAC,GAElBoB,IAAchB,EAAQ,MACnBF,KAAwBmB,EAAA,GAC9B,CAACnB,CAAoB,CAAC;AAEzB,SACE,gBAAAoB,EAACC,KAAoB,QAAQH,GAC3B,4BAACI,GAAA,EAAsB,QAAQrB,GAAc,UAAAF,EAAA,CAAS,EAAA,CACxD;AAEJ;"}
|
|
@@ -1,15 +1,16 @@
|
|
|
1
1
|
import { QueryClient as r } from "@tanstack/react-query";
|
|
2
2
|
import { API_QUERY_NAMESPACE as t } from "./apiVersion.js";
|
|
3
|
-
function
|
|
3
|
+
function o() {
|
|
4
4
|
const e = new r();
|
|
5
|
-
return e.setQueryDefaults([t], { retry: !1 }), e.setMutationDefaults([t], {
|
|
5
|
+
return e.setQueryDefaults([t], { retry: !1, networkMode: "always" }), e.setMutationDefaults([t], {
|
|
6
6
|
retry: !1,
|
|
7
|
+
networkMode: "always",
|
|
7
8
|
onSuccess: async () => {
|
|
8
9
|
await e.invalidateQueries({ queryKey: [t] });
|
|
9
10
|
}
|
|
10
11
|
}), e;
|
|
11
12
|
}
|
|
12
13
|
export {
|
|
13
|
-
|
|
14
|
+
o as createSdkQueryClient
|
|
14
15
|
};
|
|
15
16
|
//# sourceMappingURL=createSdkQueryClient.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"createSdkQueryClient.js","sources":["../../../src/contexts/ApiProvider/createSdkQueryClient.ts"],"sourcesContent":["import { QueryClient } from '@tanstack/react-query'\nimport { API_QUERY_NAMESPACE } from './apiVersion'\n\n/**\n * Creates a `QueryClient` pre-configured with the SDK's defaults for queries and mutations under the {@link API_QUERY_NAMESPACE} key.\n *\n * @remarks\n * Defaults applied:\n * - `retry: false` on both queries and mutations.\n * - On any successful mutation, every SDK query under the namespace is invalidated so the next read refetches fresh data.\n *\n * {@link ApiProvider} uses this when no `queryClient` prop is supplied, and `GustoTestProvider` uses it so tests faithfully replicate production\n * mutation/refetch behavior. Partners who supply their own `QueryClient` to {@link ApiProvider} are responsible for configuring equivalent\n * defaults if they want mutations to invalidate cached reads.\n *\n * @returns A new `QueryClient` with the SDK's query and mutation defaults applied.\n * @internal\n */\nexport function createSdkQueryClient(): QueryClient {\n const client = new QueryClient()\n client.setQueryDefaults([API_QUERY_NAMESPACE], { retry: false })\n client.setMutationDefaults([API_QUERY_NAMESPACE], {\n retry: false,\n onSuccess: async () => {\n await client.invalidateQueries({ queryKey: [API_QUERY_NAMESPACE] })\n },\n })\n return client\n}\n"],"names":["createSdkQueryClient","client","QueryClient","API_QUERY_NAMESPACE"],"mappings":";;
|
|
1
|
+
{"version":3,"file":"createSdkQueryClient.js","sources":["../../../src/contexts/ApiProvider/createSdkQueryClient.ts"],"sourcesContent":["import { QueryClient } from '@tanstack/react-query'\nimport { API_QUERY_NAMESPACE } from './apiVersion'\n\n/**\n * Creates a `QueryClient` pre-configured with the SDK's defaults for queries and mutations under the {@link API_QUERY_NAMESPACE} key.\n *\n * @remarks\n * Defaults applied:\n * - `retry: false` on both queries and mutations.\n * - `networkMode: 'always'` on both queries and mutations, so requests made while the browser reports offline fail with an error instead of\n * staying paused (and showing an indefinite loading state) until connectivity returns.\n * - On any successful mutation, every SDK query under the namespace is invalidated so the next read refetches fresh data.\n *\n * {@link ApiProvider} uses this when no `queryClient` prop is supplied, and `GustoTestProvider` uses it so tests faithfully replicate production\n * mutation/refetch behavior. Partners who supply their own `QueryClient` to {@link ApiProvider} are responsible for configuring equivalent\n * defaults if they want mutations to invalidate cached reads.\n *\n * @returns A new `QueryClient` with the SDK's query and mutation defaults applied.\n * @internal\n */\nexport function createSdkQueryClient(): QueryClient {\n const client = new QueryClient()\n client.setQueryDefaults([API_QUERY_NAMESPACE], { retry: false, networkMode: 'always' })\n client.setMutationDefaults([API_QUERY_NAMESPACE], {\n retry: false,\n networkMode: 'always',\n onSuccess: async () => {\n await client.invalidateQueries({ queryKey: [API_QUERY_NAMESPACE] })\n },\n })\n return client\n}\n"],"names":["createSdkQueryClient","client","QueryClient","API_QUERY_NAMESPACE"],"mappings":";;AAoBO,SAASA,IAAoC;AAClD,QAAMC,IAAS,IAAIC,EAAA;AACnB,SAAAD,EAAO,iBAAiB,CAACE,CAAmB,GAAG,EAAE,OAAO,IAAO,aAAa,UAAU,GACtFF,EAAO,oBAAoB,CAACE,CAAmB,GAAG;AAAA,IAChD,OAAO;AAAA,IACP,aAAa;AAAA,IACb,WAAW,YAAY;AACrB,YAAMF,EAAO,kBAAkB,EAAE,UAAU,CAACE,CAAmB,GAAG;AAAA,IACpE;AAAA,EAAA,CACD,GACMF;AACT;"}
|
|
@@ -0,0 +1,36 @@
|
|
|
1
|
+
import { OffCycleReasonType as i } from "@gusto/embedded-api/models/components/payrollshow";
|
|
2
|
+
const c = "get-v1-companies-company_id-payrolls", p = /* @__PURE__ */ new Set([
|
|
3
|
+
"get-v1-companies-company_id-payrolls-payroll_id",
|
|
4
|
+
"post-v1-companies-company_id-payrolls",
|
|
5
|
+
"put-v1-companies-company_id-payrolls",
|
|
6
|
+
"put-v1-companies-company_id-payrolls-payroll_id-prepare",
|
|
7
|
+
"put-api-v1-companies-company_id-payrolls-payroll_id-cancel"
|
|
8
|
+
]), l = new Set(Object.values(i)), y = (e) => e !== null && typeof e == "object" && !Array.isArray(e), n = (e) => y(e) && typeof e.off_cycle_reason == "string" && !l.has(e.off_cycle_reason), r = (e) => ({
|
|
9
|
+
...e,
|
|
10
|
+
off_cycle_reason: null
|
|
11
|
+
}), f = (e, a) => a === c ? !Array.isArray(e) || !e.some(n) ? void 0 : e.map(
|
|
12
|
+
(o) => n(o) ? r(o) : o
|
|
13
|
+
) : n(e) ? r(e) : void 0, m = {
|
|
14
|
+
afterSuccess: async (e, a) => {
|
|
15
|
+
if (e.operationID !== c && !p.has(e.operationID))
|
|
16
|
+
return a;
|
|
17
|
+
let o;
|
|
18
|
+
try {
|
|
19
|
+
o = await a.clone().json();
|
|
20
|
+
} catch {
|
|
21
|
+
return a;
|
|
22
|
+
}
|
|
23
|
+
const t = f(o, e.operationID);
|
|
24
|
+
if (t === void 0) return a;
|
|
25
|
+
const s = new Headers(a.headers);
|
|
26
|
+
return s.delete("content-length"), new Response(JSON.stringify(t), {
|
|
27
|
+
status: a.status,
|
|
28
|
+
statusText: a.statusText,
|
|
29
|
+
headers: s
|
|
30
|
+
});
|
|
31
|
+
}
|
|
32
|
+
};
|
|
33
|
+
export {
|
|
34
|
+
m as payrollOffCycleReasonEnumHook
|
|
35
|
+
};
|
|
36
|
+
//# sourceMappingURL=payrollOffCycleReasonEnumHook.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"payrollOffCycleReasonEnumHook.js","sources":["../../../src/contexts/ApiProvider/payrollOffCycleReasonEnumHook.ts"],"sourcesContent":["import { OffCycleReasonType } from '@gusto/embedded-api/models/components/payrollshow'\nimport type { AfterSuccessHook } from '@/types/hooks'\n\nconst PAYROLL_LIST_OPERATION_ID = 'get-v1-companies-company_id-payrolls'\n\nconst SINGLE_PAYROLL_OPERATIONS: ReadonlySet<string> = new Set([\n 'get-v1-companies-company_id-payrolls-payroll_id',\n 'post-v1-companies-company_id-payrolls',\n 'put-v1-companies-company_id-payrolls',\n 'put-v1-companies-company_id-payrolls-payroll_id-prepare',\n 'put-api-v1-companies-company_id-payrolls-payroll_id-cancel',\n])\n\nconst KNOWN_OFF_CYCLE_REASONS: ReadonlySet<string> = new Set(Object.values(OffCycleReasonType))\n\nconst isRecord = (value: unknown): value is Record<string, unknown> =>\n value !== null && typeof value === 'object' && !Array.isArray(value)\n\nconst hasUnknownOffCycleReason = (payroll: unknown): payroll is Record<string, unknown> =>\n isRecord(payroll) &&\n typeof payroll.off_cycle_reason === 'string' &&\n !KNOWN_OFF_CYCLE_REASONS.has(payroll.off_cycle_reason)\n\n// `off_cycle_reason` is nullable in the schema, so an unrecognized reason collapses to `null`\n// (rendered as a generic off-cycle payroll) rather than being relabeled as some other reason.\nconst clearOffCycleReason = (payroll: Record<string, unknown>): Record<string, unknown> => ({\n ...payroll,\n off_cycle_reason: null,\n})\n\nconst remapBody = (body: unknown, operationID: string): unknown => {\n if (operationID === PAYROLL_LIST_OPERATION_ID) {\n if (!Array.isArray(body) || !body.some(hasUnknownOffCycleReason)) return undefined\n return body.map(payroll =>\n hasUnknownOffCycleReason(payroll) ? clearOffCycleReason(payroll) : payroll,\n )\n }\n\n return hasUnknownOffCycleReason(body) ? clearOffCycleReason(body) : undefined\n}\n\n/**\n * Temporary workaround for a Gusto-Partner-API spec gap: `off_cycle_reason` on payroll responses\n * is generated as a closed enum (`z.nativeEnum(OffCycleReasonType)`) in `@gusto/embedded-api`, but\n * the API also emits reasons the published OAS doesn't list (e.g. `Max out 401k`, `Other`). A\n * single such payroll makes the whole `GetV1CompaniesCompanyIdPayrolls` response throw an\n * `SDKValidationError`, taking down Payroll History and every other payroll list for the company.\n * This afterSuccess hook nulls out any reason outside the closed enum before the SDK's zod parse,\n * so the response still validates and the payroll renders as a generic off-cycle payroll. Remove\n * once the client supports lax/open enum parsing for this field.\n *\n * @internal\n */\nexport const payrollOffCycleReasonEnumHook: AfterSuccessHook = {\n afterSuccess: async (context, response) => {\n if (\n context.operationID !== PAYROLL_LIST_OPERATION_ID &&\n !SINGLE_PAYROLL_OPERATIONS.has(context.operationID)\n ) {\n return response\n }\n\n let body: unknown\n try {\n body = await response.clone().json()\n } catch {\n return response\n }\n\n const remapped = remapBody(body, context.operationID)\n if (remapped === undefined) return response\n\n const headers = new Headers(response.headers)\n headers.delete('content-length')\n return new Response(JSON.stringify(remapped), {\n status: response.status,\n statusText: response.statusText,\n headers,\n })\n },\n}\n"],"names":["PAYROLL_LIST_OPERATION_ID","SINGLE_PAYROLL_OPERATIONS","KNOWN_OFF_CYCLE_REASONS","OffCycleReasonType","isRecord","value","hasUnknownOffCycleReason","payroll","clearOffCycleReason","remapBody","body","operationID","payrollOffCycleReasonEnumHook","context","response","remapped","headers"],"mappings":";AAGA,MAAMA,IAA4B,wCAE5BC,wBAAqD,IAAI;AAAA,EAC7D;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AACF,CAAC,GAEKC,IAA+C,IAAI,IAAI,OAAO,OAAOC,CAAkB,CAAC,GAExFC,IAAW,CAACC,MAChBA,MAAU,QAAQ,OAAOA,KAAU,YAAY,CAAC,MAAM,QAAQA,CAAK,GAE/DC,IAA2B,CAACC,MAChCH,EAASG,CAAO,KAChB,OAAOA,EAAQ,oBAAqB,YACpC,CAACL,EAAwB,IAAIK,EAAQ,gBAAgB,GAIjDC,IAAsB,CAACD,OAA+D;AAAA,EAC1F,GAAGA;AAAA,EACH,kBAAkB;AACpB,IAEME,IAAY,CAACC,GAAeC,MAC5BA,MAAgBX,IACd,CAAC,MAAM,QAAQU,CAAI,KAAK,CAACA,EAAK,KAAKJ,CAAwB,IAAG,SAC3DI,EAAK;AAAA,EAAI,OACdJ,EAAyBC,CAAO,IAAIC,EAAoBD,CAAO,IAAIA;AAAA,IAIhED,EAAyBI,CAAI,IAAIF,EAAoBE,CAAI,IAAI,QAezDE,IAAkD;AAAA,EAC7D,cAAc,OAAOC,GAASC,MAAa;AACzC,QACED,EAAQ,gBAAgBb,KACxB,CAACC,EAA0B,IAAIY,EAAQ,WAAW;AAElD,aAAOC;AAGT,QAAIJ;AACJ,QAAI;AACF,MAAAA,IAAO,MAAMI,EAAS,MAAA,EAAQ,KAAA;AAAA,IAChC,QAAQ;AACN,aAAOA;AAAA,IACT;AAEA,UAAMC,IAAWN,EAAUC,GAAMG,EAAQ,WAAW;AACpD,QAAIE,MAAa,OAAW,QAAOD;AAEnC,UAAME,IAAU,IAAI,QAAQF,EAAS,OAAO;AAC5C,WAAAE,EAAQ,OAAO,gBAAgB,GACxB,IAAI,SAAS,KAAK,UAAUD,CAAQ,GAAG;AAAA,MAC5C,QAAQD,EAAS;AAAA,MACjB,YAAYA,EAAS;AAAA,MACrB,SAAAE;AAAA,IAAA,CACD;AAAA,EACH;AACF;"}
|
|
@@ -8,6 +8,8 @@ import { LoadingIndicatorProvider as U } from "../LoadingIndicatorProvider/Loadi
|
|
|
8
8
|
import { sanitizeError as z } from "../ObservabilityProvider/sanitization.js";
|
|
9
9
|
import { UnstableFeaturesProvider as D } from "../UnstableFeaturesProvider/UnstableFeaturesProvider.js";
|
|
10
10
|
import { SDKI18next as m } from "./SDKI18next.js";
|
|
11
|
+
import "classnames";
|
|
12
|
+
import "../../shared/constants.js";
|
|
11
13
|
import { InternalError as F } from "../../components/Common/InternalError/InternalError.js";
|
|
12
14
|
import { LocaleProvider as T } from "../LocaleProvider/LocaleProvider.js";
|
|
13
15
|
import "../LocaleProvider/useLocale.js";
|
|
@@ -15,7 +17,7 @@ import { ThemeProvider as w } from "../ThemeProvider/ThemeProvider.js";
|
|
|
15
17
|
import { normalizeToSDKError as A } from "../../types/sdkError.js";
|
|
16
18
|
import { NonceContext as B } from "../NonceProvider/useNonce.js";
|
|
17
19
|
import { ObservabilityProvider as K } from "../ObservabilityProvider/ObservabilityProvider.js";
|
|
18
|
-
function
|
|
20
|
+
function er(l) {
|
|
19
21
|
const {
|
|
20
22
|
children: s,
|
|
21
23
|
config: o,
|
|
@@ -70,6 +72,6 @@ function rr(l) {
|
|
|
70
72
|
) }, n) }) }) }) }) }) }) });
|
|
71
73
|
}
|
|
72
74
|
export {
|
|
73
|
-
|
|
75
|
+
er as GustoProviderCustomUIAdapter
|
|
74
76
|
};
|
|
75
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 type { ErrorInfo, JSX, ReactNode } 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 { ObservabilityProvider } from '../ObservabilityProvider'\nimport { sanitizeError } from '../ObservabilityProvider/sanitization'\nimport { UnstableFeaturesProvider } from '../UnstableFeaturesProvider/UnstableFeaturesProvider'\nimport type { UnstableFeatures } from '../UnstableFeaturesProvider/useUnstableFeature'\nimport { SDKI18next } from './SDKI18next'\nimport { InternalError } from '@/components/Common'\nimport { LocaleProvider } from '@/contexts/LocaleProvider'\nimport { NonceContext } from '@/contexts/NonceProvider'\nimport { ThemeProvider } from '@/contexts/ThemeProvider'\nimport type { GustoSDKTheme } from '@/contexts/ThemeProvider/theme'\nimport type { GlobalResourceDictionary, SupportedLanguages } from '@/types/Helpers'\nimport type { SDKHooks } from '@/types/hooks'\nimport type { ObservabilityHook } from '@/types/observability'\nimport { normalizeToSDKError } from '@/types/sdkError'\n\n/**\n * API client configuration passed to {@link GustoProvider} (and {@link GustoProviderCustomUIAdapter}).\n *\n * @public\n */\nexport interface APIConfig {\n /** URL of your backend proxy that forwards SDK requests to the Gusto Embedded API. SDK components never call Gusto directly. */\n baseUrl: string\n /** Extra headers applied to every API request. Combined with any headers your proxy adds. */\n headers?: HeadersInit\n /** Request interceptor hooks. Use these to inspect, modify, or react to requests and responses. See {@link SDKHooks}. */\n hooks?: SDKHooks\n /** Observability hook for surfacing errors and metrics from the SDK to your monitoring stack. See {@link ObservabilityHook}. */\n observability?: ObservabilityHook\n}\n\n/**\n * Shared configuration props accepted by {@link GustoProvider} and {@link GustoProviderCustomUIAdapter}.\n *\n * @public\n */\nexport interface GustoBaseProviderProps {\n /** API client configuration, including the proxy `baseUrl`, request hooks, and observability. See {@link APIConfig}. */\n config: APIConfig\n /** Translation overrides keyed by language and i18next namespace. Strings supplied here replace the SDK defaults for the matching keys. */\n dictionary?: GlobalResourceDictionary\n /** Active i18next language. Defaults to `'en'`. */\n lng?: string\n /** BCP 47 locale used for number, date, and currency formatting throughout the SDK. Defaults to `'en-US'`. */\n locale?: string\n /** ISO 4217 currency code used for monetary formatting. Defaults to `'USD'`. */\n currency?: string\n /** Theme overrides applied to SDK components. See {@link GustoSDKTheme}. */\n theme?: Partial<GustoSDKTheme>\n /**\n * CSP nonce to apply to runtime-injected `<style>` elements (theming, PDF download window).\n * Pass the same per-request nonce your app uses in its `style-src 'nonce-…'` directive.\n * Also exposed to custom UI components via `useNonce`.\n */\n nonce?: string\n /**\n * Element to use as the portal container for SDK popovers and dropdowns.\n * Defaults to a themed root element the SDK appends to `document.body`.\n *\n * Pass an element here if rendering inside a modal, or **required** if\n * rendering inside a shadow root — `document.body` sits outside every\n * shadow boundary, so without an explicit container overlays would\n * otherwise escape your shadow root's style encapsulation.\n */\n portalContainer?: HTMLElement\n /** Optional TanStack Query `QueryClient`. When omitted, the SDK creates its own client configured for Gusto's API. */\n queryClient?: QueryClient\n /** Complete map of UI components the SDK renders. Required because this adapter ships no defaults. */\n components: ComponentsContextType\n /** Loading indicator rendered while SDK queries are pending. Overrides the SDK default spinner. */\n LoaderComponent?: ({ children }: { children?: ReactNode }) => JSX.Element\n /**\n * Opt-in flags for alpha SDK functionality. See {@link UnstableFeatures}.\n * @alpha\n */\n unstableFeatures?: UnstableFeatures\n}\n\n/**\n * Props for {@link GustoProviderCustomUIAdapter}.\n *\n * @public\n */\nexport interface GustoProviderCustomUIAdapterProps extends GustoBaseProviderProps {\n /** The application tree that should have access to the SDK. */\n children?: React.ReactNode\n}\n\n/**\n * Top-level provider that requires a complete component map and ships no UI defaults.\n *\n * @remarks\n * Use this adapter when you want full control over every UI primitive the SDK renders, or when\n * you want to avoid the React Aria dependency for tree-shaking. Unlike {@link GustoProvider}, the\n * `components` prop on {@link GustoProviderProps} is required and must supply every component the\n * SDK renders.\n *\n * @param props - See {@link GustoProviderCustomUIAdapterProps}.\n * @returns The configured provider tree wrapping `children`.\n * @public\n * @group Providers\n */\nexport function GustoProviderCustomUIAdapter(props: GustoProviderCustomUIAdapterProps) {\n const {\n children,\n config,\n dictionary,\n lng = 'en',\n locale = 'en-US',\n currency = 'USD',\n theme,\n nonce,\n portalContainer,\n components,\n LoaderComponent,\n queryClient,\n unstableFeatures,\n } = props\n\n if (dictionary) {\n for (const language in dictionary) {\n const lang = language as SupportedLanguages\n for (const ns in dictionary[lang]) {\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 useEffect(() => {\n void (async () => {\n await SDKI18next.changeLanguage(lng)\n })()\n }, [lng])\n\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 sdkError = normalizeToSDKError(error)\n\n const observabilityError = {\n ...sdkError,\n timestamp: Date.now(),\n componentStack: errorInfo.componentStack ?? undefined,\n }\n\n const sanitizedError = sanitizeError(observabilityError, config.observability.sanitization)\n\n config.observability.onError(sanitizedError)\n }\n }, [config.observability])\n return (\n <NonceContext.Provider value={nonce}>\n <ComponentsProvider value={components}>\n <LoadingIndicatorProvider value={LoaderComponent}>\n <ObservabilityProvider observability={config.observability}>\n <ErrorBoundary FallbackComponent={InternalError} onError={handleTopLevelError}>\n <ThemeProvider theme={theme} portalContainer={portalContainer}>\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 <UnstableFeaturesProvider value={unstableFeatures}>\n {children}\n </UnstableFeaturesProvider>\n </ApiProvider>\n </I18nextProvider>\n </LocaleProvider>\n </ThemeProvider>\n </ErrorBoundary>\n </ObservabilityProvider>\n </LoadingIndicatorProvider>\n </ComponentsProvider>\n </NonceContext.Provider>\n )\n}\n"],"names":["GustoProviderCustomUIAdapter","props","children","config","dictionary","lng","locale","currency","theme","nonce","portalContainer","components","LoaderComponent","queryClient","unstableFeatures","language","lang","ns","SDKI18next","useEffect","handleTopLevelError","useMemo","error","errorInfo","observabilityError","normalizeToSDKError","sanitizedError","sanitizeError","NonceContext","jsx","ComponentsProvider","LoadingIndicatorProvider","ObservabilityProvider","ErrorBoundary","InternalError","ThemeProvider","LocaleProvider","I18nextProvider","ApiProvider","UnstableFeaturesProvider"],"mappings":";;;;;;;;;;;;;;;;;AAgHO,SAASA,GAA6BC,GAA0C;AACrF,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,OAAAC;AAAA,IACA,iBAAAC;AAAA,IACA,YAAAC;AAAA,IACA,iBAAAC;AAAA,IACA,aAAAC;AAAA,IACA,kBAAAC;AAAA,EAAA,IACEb;AAEJ,MAAIG;AACF,eAAWW,KAAYX,GAAY;AACjC,YAAMY,IAAOD;AACb,iBAAWE,KAAMb,EAAWY,CAAI;AAC9B,QAAAE,EAAW;AAAA,UACTF;AAAA,UACAC;AAAA,UACCb,EAAWY,CAAI,EAA8BC,CAAE;AAAA,UAChD;AAAA,UACA;AAAA,QAAA;AAAA,IAGN;AAGF,EAAAE,EAAU,MAAM;AACd,KAAM,YACJ,MAAMD,EAAW,eAAeb,CAAG;AAAA,EAEvC,GAAG,CAACA,CAAG,CAAC;AAER,QAAMe,IAAsBC,EAAQ,MAAM;AACxC,QAAKlB,EAAO,eAAe;AAE3B,aAAO,CAACmB,GAAgBC,MAAyB;AAC/C,YAAI,CAACpB,EAAO,eAAe,QAAS;AAIpC,cAAMqB,IAAqB;AAAA,UACzB,GAHeC,EAAoBH,CAAK;AAAA,UAIxC,WAAW,KAAK,IAAA;AAAA,UAChB,gBAAgBC,EAAU,kBAAkB;AAAA,QAAA,GAGxCG,IAAiBC,EAAcH,GAAoBrB,EAAO,cAAc,YAAY;AAE1F,QAAAA,EAAO,cAAc,QAAQuB,CAAc;AAAA,MAC7C;AAAA,EACF,GAAG,CAACvB,EAAO,aAAa,CAAC;AACzB,2BACGyB,EAAa,UAAb,EAAsB,OAAOnB,GAC5B,UAAA,gBAAAoB,EAACC,GAAA,EAAmB,OAAOnB,GACzB,4BAACoB,GAAA,EAAyB,OAAOnB,GAC/B,UAAA,gBAAAiB,EAACG,KAAsB,eAAe7B,EAAO,eAC3C,UAAA,gBAAA0B,EAACI,KAAc,mBAAmBC,GAAe,SAASd,GACxD,4BAACe,GAAA,EAAc,OAAA3B,GAAc,iBAAAE,GAC3B,UAAA,gBAAAmB,EAACO,KAAe,QAAA9B,GAAgB,UAAAC,GAC9B,UAAA,gBAAAsB,EAACQ,GAAA,EAAgB,MAAMnB,GACrB,UAAA,gBAAAW;AAAA,IAACS;AAAA,IAAA;AAAA,MACC,KAAKnC,EAAO;AAAA,MACZ,SAASA,EAAO;AAAA,MAChB,OAAOA,EAAO;AAAA,MACd,aAAAU;AAAA,MAEA,UAAA,gBAAAgB,EAACU,GAAA,EAAyB,OAAOzB,GAC9B,UAAAZ,EAAA,CACH;AAAA,IAAA;AAAA,EAAA,KAToCG,CAWxC,EAAA,CACF,EAAA,CACF,GACF,GACF,EAAA,CACF,GACF,GACF;AAEJ;"}
|
|
1
|
+
{"version":3,"file":"GustoProviderCustomUIAdapter.js","sources":["../../../src/contexts/GustoProvider/GustoProviderCustomUIAdapter.tsx"],"sourcesContent":["import type React from 'react'\nimport type { ErrorInfo, JSX, ReactNode } 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 { ObservabilityProvider } from '../ObservabilityProvider'\nimport { sanitizeError } from '../ObservabilityProvider/sanitization'\nimport { UnstableFeaturesProvider } from '../UnstableFeaturesProvider/UnstableFeaturesProvider'\nimport type { UnstableFeatures } from '../UnstableFeaturesProvider/useUnstableFeature'\nimport { SDKI18next } from './SDKI18next'\nimport { InternalError } from '@/components/Common'\nimport { LocaleProvider } from '@/contexts/LocaleProvider'\nimport { NonceContext } from '@/contexts/NonceProvider'\nimport { ThemeProvider } from '@/contexts/ThemeProvider'\nimport type { GustoSDKTheme } from '@/contexts/ThemeProvider/theme'\nimport type { GlobalResourceDictionary, SupportedLanguages } from '@/types/Helpers'\nimport type { SDKHooks } from '@/types/hooks'\nimport type { ObservabilityHook } from '@/types/observability'\nimport { normalizeToSDKError } from '@/types/sdkError'\n\n/**\n * API client configuration passed to {@link GustoProvider} (and {@link GustoProviderCustomUIAdapter}).\n *\n * @public\n */\nexport interface APIConfig {\n /** URL of your backend proxy that forwards SDK requests to the Gusto Embedded API. SDK components never call Gusto directly. */\n baseUrl: string\n /** Extra headers applied to every API request. Combined with any headers your proxy adds. */\n headers?: HeadersInit\n /** Request interceptor hooks. Use these to inspect, modify, or react to requests and responses. See {@link SDKHooks}. */\n hooks?: SDKHooks\n /** Observability hook for surfacing errors and metrics from the SDK to your monitoring stack. See {@link ObservabilityHook}. */\n observability?: ObservabilityHook\n}\n\n/**\n * Shared configuration props accepted by {@link GustoProvider} and {@link GustoProviderCustomUIAdapter}.\n *\n * @public\n */\nexport interface GustoBaseProviderProps {\n /** API client configuration, including the proxy `baseUrl`, request hooks, and observability. See {@link APIConfig}. */\n config: APIConfig\n /** Translation overrides keyed by language and i18next namespace. Strings supplied here replace the SDK defaults for the matching keys. */\n dictionary?: GlobalResourceDictionary\n /** Active i18next language. Defaults to `'en'`. */\n lng?: string\n /** BCP 47 locale used for number, date, and currency formatting throughout the SDK. Defaults to `'en-US'`. */\n locale?: string\n /** ISO 4217 currency code used for monetary formatting. Defaults to `'USD'`. */\n currency?: string\n /** Theme overrides applied to SDK components. See {@link GustoSDKTheme}. */\n theme?: Partial<GustoSDKTheme>\n /**\n * CSP nonce to apply to runtime-injected `<style>` elements (theming, PDF download window).\n * Pass the same per-request nonce your app uses in its `style-src 'nonce-…'` directive.\n * Also exposed to custom UI components via `useNonce`.\n */\n nonce?: string\n /**\n * Element to use as the portal container for SDK popovers and dropdowns.\n * Defaults to a themed root element the SDK appends to `document.body`.\n *\n * Pass an element here if rendering inside a modal, or **required** if\n * rendering inside a shadow root — `document.body` sits outside every\n * shadow boundary, so without an explicit container overlays would\n * otherwise escape your shadow root's style encapsulation.\n */\n portalContainer?: HTMLElement\n /** Optional TanStack Query `QueryClient`. When omitted, the SDK creates its own client configured for Gusto's API. */\n queryClient?: QueryClient\n /** Complete map of UI components the SDK renders. Required because this adapter ships no defaults. */\n components: ComponentsContextType\n /** Loading indicator rendered while SDK queries are pending. Overrides the SDK default spinner. */\n LoaderComponent?: ({ children }: { children?: ReactNode }) => JSX.Element\n /**\n * Opt-in flags for alpha SDK functionality. See {@link UnstableFeatures}.\n * @alpha\n */\n unstableFeatures?: UnstableFeatures\n}\n\n/**\n * Props for {@link GustoProviderCustomUIAdapter}.\n *\n * @public\n */\nexport interface GustoProviderCustomUIAdapterProps extends GustoBaseProviderProps {\n /** The application tree that should have access to the SDK. */\n children?: React.ReactNode\n}\n\n/**\n * Top-level provider that requires a complete component map and ships no UI defaults.\n *\n * @remarks\n * Use this adapter when you want full control over every UI primitive the SDK renders, or when\n * you want to avoid the React Aria dependency for tree-shaking. Unlike {@link GustoProvider}, the\n * `components` prop on {@link GustoProviderProps} is required and must supply every component the\n * SDK renders.\n *\n * @param props - See {@link GustoProviderCustomUIAdapterProps}.\n * @returns The configured provider tree wrapping `children`.\n * @public\n * @group Providers\n */\nexport function GustoProviderCustomUIAdapter(props: GustoProviderCustomUIAdapterProps) {\n const {\n children,\n config,\n dictionary,\n lng = 'en',\n locale = 'en-US',\n currency = 'USD',\n theme,\n nonce,\n portalContainer,\n components,\n LoaderComponent,\n queryClient,\n unstableFeatures,\n } = props\n\n if (dictionary) {\n for (const language in dictionary) {\n const lang = language as SupportedLanguages\n for (const ns in dictionary[lang]) {\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 useEffect(() => {\n void (async () => {\n await SDKI18next.changeLanguage(lng)\n })()\n }, [lng])\n\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 sdkError = normalizeToSDKError(error)\n\n const observabilityError = {\n ...sdkError,\n timestamp: Date.now(),\n componentStack: errorInfo.componentStack ?? undefined,\n }\n\n const sanitizedError = sanitizeError(observabilityError, config.observability.sanitization)\n\n config.observability.onError(sanitizedError)\n }\n }, [config.observability])\n return (\n <NonceContext.Provider value={nonce}>\n <ComponentsProvider value={components}>\n <LoadingIndicatorProvider value={LoaderComponent}>\n <ObservabilityProvider observability={config.observability}>\n <ErrorBoundary FallbackComponent={InternalError} onError={handleTopLevelError}>\n <ThemeProvider theme={theme} portalContainer={portalContainer}>\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 <UnstableFeaturesProvider value={unstableFeatures}>\n {children}\n </UnstableFeaturesProvider>\n </ApiProvider>\n </I18nextProvider>\n </LocaleProvider>\n </ThemeProvider>\n </ErrorBoundary>\n </ObservabilityProvider>\n </LoadingIndicatorProvider>\n </ComponentsProvider>\n </NonceContext.Provider>\n )\n}\n"],"names":["GustoProviderCustomUIAdapter","props","children","config","dictionary","lng","locale","currency","theme","nonce","portalContainer","components","LoaderComponent","queryClient","unstableFeatures","language","lang","ns","SDKI18next","useEffect","handleTopLevelError","useMemo","error","errorInfo","observabilityError","normalizeToSDKError","sanitizedError","sanitizeError","NonceContext","jsx","ComponentsProvider","LoadingIndicatorProvider","ObservabilityProvider","ErrorBoundary","InternalError","ThemeProvider","LocaleProvider","I18nextProvider","ApiProvider","UnstableFeaturesProvider"],"mappings":";;;;;;;;;;;;;;;;;;;AAgHO,SAASA,GAA6BC,GAA0C;AACrF,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,OAAAC;AAAA,IACA,iBAAAC;AAAA,IACA,YAAAC;AAAA,IACA,iBAAAC;AAAA,IACA,aAAAC;AAAA,IACA,kBAAAC;AAAA,EAAA,IACEb;AAEJ,MAAIG;AACF,eAAWW,KAAYX,GAAY;AACjC,YAAMY,IAAOD;AACb,iBAAWE,KAAMb,EAAWY,CAAI;AAC9B,QAAAE,EAAW;AAAA,UACTF;AAAA,UACAC;AAAA,UACCb,EAAWY,CAAI,EAA8BC,CAAE;AAAA,UAChD;AAAA,UACA;AAAA,QAAA;AAAA,IAGN;AAGF,EAAAE,EAAU,MAAM;AACd,KAAM,YACJ,MAAMD,EAAW,eAAeb,CAAG;AAAA,EAEvC,GAAG,CAACA,CAAG,CAAC;AAER,QAAMe,IAAsBC,EAAQ,MAAM;AACxC,QAAKlB,EAAO,eAAe;AAE3B,aAAO,CAACmB,GAAgBC,MAAyB;AAC/C,YAAI,CAACpB,EAAO,eAAe,QAAS;AAIpC,cAAMqB,IAAqB;AAAA,UACzB,GAHeC,EAAoBH,CAAK;AAAA,UAIxC,WAAW,KAAK,IAAA;AAAA,UAChB,gBAAgBC,EAAU,kBAAkB;AAAA,QAAA,GAGxCG,IAAiBC,EAAcH,GAAoBrB,EAAO,cAAc,YAAY;AAE1F,QAAAA,EAAO,cAAc,QAAQuB,CAAc;AAAA,MAC7C;AAAA,EACF,GAAG,CAACvB,EAAO,aAAa,CAAC;AACzB,2BACGyB,EAAa,UAAb,EAAsB,OAAOnB,GAC5B,UAAA,gBAAAoB,EAACC,GAAA,EAAmB,OAAOnB,GACzB,4BAACoB,GAAA,EAAyB,OAAOnB,GAC/B,UAAA,gBAAAiB,EAACG,KAAsB,eAAe7B,EAAO,eAC3C,UAAA,gBAAA0B,EAACI,KAAc,mBAAmBC,GAAe,SAASd,GACxD,4BAACe,GAAA,EAAc,OAAA3B,GAAc,iBAAAE,GAC3B,UAAA,gBAAAmB,EAACO,KAAe,QAAA9B,GAAgB,UAAAC,GAC9B,UAAA,gBAAAsB,EAACQ,GAAA,EAAgB,MAAMnB,GACrB,UAAA,gBAAAW;AAAA,IAACS;AAAA,IAAA;AAAA,MACC,KAAKnC,EAAO;AAAA,MACZ,SAASA,EAAO;AAAA,MAChB,OAAOA,EAAO;AAAA,MACd,aAAAU;AAAA,MAEA,UAAA,gBAAAgB,EAACU,GAAA,EAAyB,OAAOzB,GAC9B,UAAAZ,EAAA,CACH;AAAA,IAAA;AAAA,EAAA,KAToCG,CAWxC,EAAA,CACF,EAAA,CACF,GACF,GACF,EAAA,CACF,GACF,GACF;AAEJ;"}
|
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
const
|
|
1
|
+
const d = [
|
|
2
2
|
{ pattern: /\b\d{3}-\d{2}-\d{4}\b/g, replacement: "[SSN-REDACTED]" },
|
|
3
3
|
{ pattern: /\b\d{9}\b/g, replacement: "[SSN-REDACTED]" },
|
|
4
4
|
{
|
|
@@ -9,7 +9,7 @@ const o = [
|
|
|
9
9
|
{ pattern: /\(\d{3}\)\s*\d{3}[-.\s]?\d{4}/g, replacement: "[PHONE-REDACTED]" },
|
|
10
10
|
{ pattern: /\b\d{4}[-\s]?\d{4}[-\s]?\d{4}[-\s]?\d{4}\b/g, replacement: "[CC-REDACTED]" },
|
|
11
11
|
{ pattern: /\b[A-Za-z0-9_-]{32,}\b/g, replacement: "[TOKEN-REDACTED]" }
|
|
12
|
-
],
|
|
12
|
+
], _ = [
|
|
13
13
|
"password",
|
|
14
14
|
"token",
|
|
15
15
|
"apiKey",
|
|
@@ -26,70 +26,121 @@ const o = [
|
|
|
26
26
|
"routingNumber",
|
|
27
27
|
"routing_number",
|
|
28
28
|
"accountNumber",
|
|
29
|
-
"account_number"
|
|
30
|
-
|
|
31
|
-
|
|
32
|
-
|
|
33
|
-
|
|
34
|
-
|
|
35
|
-
|
|
29
|
+
"account_number",
|
|
30
|
+
"dateOfBirth",
|
|
31
|
+
"date_of_birth",
|
|
32
|
+
"birthDate",
|
|
33
|
+
"birth_date",
|
|
34
|
+
"birthday",
|
|
35
|
+
"firstName",
|
|
36
|
+
"first_name",
|
|
37
|
+
"lastName",
|
|
38
|
+
"last_name",
|
|
39
|
+
"middleName",
|
|
40
|
+
"middle_name",
|
|
41
|
+
"fullName",
|
|
42
|
+
"full_name",
|
|
43
|
+
"employeeName",
|
|
44
|
+
"employee_name",
|
|
45
|
+
"signatureText",
|
|
46
|
+
"signature_text",
|
|
47
|
+
"retirementLoanIdentifier",
|
|
48
|
+
"retirement_loan_identifier",
|
|
49
|
+
"phone",
|
|
50
|
+
"zipCode",
|
|
51
|
+
"zip_code",
|
|
52
|
+
"postalCode",
|
|
53
|
+
"postal_code",
|
|
54
|
+
"preparerCity",
|
|
55
|
+
"preparer_city",
|
|
56
|
+
"preparerZip",
|
|
57
|
+
"preparer_zip",
|
|
58
|
+
"preparer2City",
|
|
59
|
+
"preparer2_city",
|
|
60
|
+
"preparer2Zip",
|
|
61
|
+
"preparer2_zip",
|
|
62
|
+
"preparer3City",
|
|
63
|
+
"preparer3_city",
|
|
64
|
+
"preparer3Zip",
|
|
65
|
+
"preparer3_zip",
|
|
66
|
+
"preparer4City",
|
|
67
|
+
"preparer4_city",
|
|
68
|
+
"preparer4Zip",
|
|
69
|
+
"preparer4_zip",
|
|
70
|
+
"address",
|
|
71
|
+
"street1",
|
|
72
|
+
"street_1",
|
|
73
|
+
"street2",
|
|
74
|
+
"street_2",
|
|
75
|
+
"caseNumber",
|
|
76
|
+
"case_number",
|
|
77
|
+
"orderNumber",
|
|
78
|
+
"order_number",
|
|
79
|
+
"remittanceNumber",
|
|
80
|
+
"remittance_number",
|
|
81
|
+
"documentNumber",
|
|
82
|
+
"document_number"
|
|
83
|
+
], E = /* @__PURE__ */ new Set(["ein", "dob", "zip", "city"]);
|
|
84
|
+
function s(e) {
|
|
85
|
+
let r = e;
|
|
86
|
+
for (const { pattern: t, replacement: i } of d)
|
|
87
|
+
r = r.replace(t, i);
|
|
88
|
+
return r;
|
|
36
89
|
}
|
|
37
|
-
function
|
|
90
|
+
function p(e, r = []) {
|
|
38
91
|
if (e == null)
|
|
39
92
|
return e;
|
|
40
93
|
if (typeof e == "string")
|
|
41
|
-
return
|
|
94
|
+
return s(e);
|
|
42
95
|
if (typeof e == "number" || typeof e == "boolean")
|
|
43
96
|
return e;
|
|
44
97
|
if (Array.isArray(e))
|
|
45
|
-
return e.map((
|
|
98
|
+
return e.map((t) => p(t, r));
|
|
46
99
|
if (typeof e == "object") {
|
|
47
|
-
const
|
|
48
|
-
for (const [a,
|
|
49
|
-
|
|
50
|
-
|
|
100
|
+
const t = {}, i = [..._, ...r];
|
|
101
|
+
for (const [a, n] of Object.entries(e)) {
|
|
102
|
+
const c = a.toLowerCase();
|
|
103
|
+
if (E.has(c) || i.some((o) => c.includes(o.toLowerCase()))) {
|
|
104
|
+
t[a] = "[REDACTED]";
|
|
51
105
|
continue;
|
|
52
106
|
}
|
|
53
|
-
|
|
107
|
+
t[a] = p(n, r);
|
|
54
108
|
}
|
|
55
|
-
return
|
|
109
|
+
return t;
|
|
56
110
|
}
|
|
57
111
|
return e;
|
|
58
112
|
}
|
|
59
|
-
function
|
|
60
|
-
const
|
|
61
|
-
|
|
62
|
-
includeRawError: r = !1,
|
|
63
|
-
customErrorSanitizer: a,
|
|
64
|
-
additionalSensitiveFields: c = []
|
|
65
|
-
} = t;
|
|
66
|
-
if (a)
|
|
67
|
-
return a(e);
|
|
68
|
-
if (!n)
|
|
69
|
-
return r ? e : { ...e, raw: void 0 };
|
|
70
|
-
const u = e.fieldErrors.map((i) => ({
|
|
71
|
-
...i,
|
|
72
|
-
message: d(i.message),
|
|
73
|
-
metadata: i.metadata ? s(i.metadata, c) : void 0
|
|
74
|
-
}));
|
|
75
|
-
return {
|
|
113
|
+
function u(e, { enabled: r = !0, includeRawError: t = !1, additionalSensitiveFields: i = [] }) {
|
|
114
|
+
const a = t ? e.raw : void 0;
|
|
115
|
+
return r ? {
|
|
76
116
|
...e,
|
|
77
|
-
message:
|
|
78
|
-
fieldErrors:
|
|
79
|
-
|
|
80
|
-
|
|
117
|
+
message: s(e.message),
|
|
118
|
+
fieldErrors: e.fieldErrors.map((n) => ({
|
|
119
|
+
...n,
|
|
120
|
+
message: s(n.message),
|
|
121
|
+
metadata: n.metadata ? p(n.metadata, i) : void 0
|
|
122
|
+
})),
|
|
123
|
+
raw: a
|
|
124
|
+
} : { ...e, raw: a };
|
|
81
125
|
}
|
|
82
|
-
function
|
|
83
|
-
|
|
84
|
-
return r ? r(e) : n ? {
|
|
126
|
+
function m(e, { enabled: r = !0, additionalSensitiveFields: t = [] }) {
|
|
127
|
+
return r ? {
|
|
85
128
|
...e,
|
|
86
|
-
tags: e.tags ?
|
|
129
|
+
tags: e.tags ? p(e.tags, t) : void 0
|
|
87
130
|
} : e;
|
|
88
131
|
}
|
|
132
|
+
function l(e, r = {}) {
|
|
133
|
+
const t = u(e, r);
|
|
134
|
+
return r.customErrorSanitizer ? u(r.customErrorSanitizer(t), r) : t;
|
|
135
|
+
}
|
|
136
|
+
function b(e, r = {}) {
|
|
137
|
+
const t = m(e, r);
|
|
138
|
+
return r.customMetricSanitizer ? m(r.customMetricSanitizer(t), r) : t;
|
|
139
|
+
}
|
|
89
140
|
export {
|
|
90
|
-
|
|
91
|
-
|
|
92
|
-
|
|
93
|
-
|
|
141
|
+
l as sanitizeError,
|
|
142
|
+
b as sanitizeMetric,
|
|
143
|
+
p as sanitizeObject,
|
|
144
|
+
s as sanitizeString
|
|
94
145
|
};
|
|
95
146
|
//# sourceMappingURL=sanitization.js.map
|
|
@@ -1 +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\nconst PII_PATTERNS = [\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 pattern: /\\b[A-Za-z0-9._%+-]+@[A-Za-z0-9.-]+\\.[A-Z|a-z]{2,}\\b/g,\n replacement: '[EMAIL-REDACTED]',\n },\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 { pattern: /\\b\\d{4}[-\\s]?\\d{4}[-\\s]?\\d{4}[-\\s]?\\d{4}\\b/g, replacement: '[CC-REDACTED]' },\n { pattern: /\\b[A-Za-z0-9_-]{32,}\\b/g, replacement: '[TOKEN-REDACTED]' },\n]\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 * Replaces PII patterns (SSN, email, phone, credit card, long tokens) in a string with redacted placeholders.\n *\n * @param value - The string to scan and redact.\n * @returns The input with each matched pattern replaced by a `[TYPE-REDACTED]` placeholder.\n * @internal\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 walks a value, redacting sensitive object keys and PII patterns in nested strings.\n *\n * @remarks\n * Keys whose names match (case-insensitively contain) any built-in sensitive field name or any\n * entry in `additionalSensitiveFields` have their values replaced with `[REDACTED]`. String\n * values are passed through {@link sanitizeString} so PII patterns inside them are also redacted.\n * Numbers, booleans, `null`, and `undefined` pass through unchanged.\n *\n * @param obj - The value to sanitize. May be any JSON-shaped structure.\n * @param additionalSensitiveFields - Extra field names to treat as sensitive (case-insensitive substring match).\n * @returns A new value of the same shape with sensitive fields and PII patterns redacted.\n * @internal\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 const allSensitiveFields = [...SENSITIVE_FIELD_NAMES, ...additionalSensitiveFields]\n\n for (const [key, value] of Object.entries(obj)) {\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 * Returns a copy of an observability error with PII redacted from messages and field-error metadata.\n *\n * @remarks\n * If `config.customErrorSanitizer` is provided, it is invoked and its result returned directly.\n * When sanitization is disabled, the error passes through unchanged except that `raw` is stripped\n * unless `includeRawError` is true. When enabled, `message` and each `fieldErrors[].message` run\n * through {@link sanitizeString}, and each `fieldErrors[].metadata` runs through {@link sanitizeObject}\n * with `additionalSensitiveFields` applied.\n *\n * @param error - The error reported by SDK error boundaries or form submissions.\n * @param config - Optional sanitization configuration; defaults to enabled with `raw` stripped.\n * @returns The sanitized error suitable for forwarding to a partner observability hook.\n * @internal\n */\nexport function sanitizeError(\n error: ObservabilityError,\n config: SanitizationConfig = {},\n): ObservabilityError {\n const {\n enabled = true,\n includeRawError = false,\n customErrorSanitizer,\n additionalSensitiveFields = [],\n } = config\n\n if (customErrorSanitizer) {\n return customErrorSanitizer(error)\n }\n\n if (!enabled) {\n return includeRawError ? error : { ...error, raw: undefined }\n }\n\n const sanitizedFieldErrors = error.fieldErrors.map(fe => ({\n ...fe,\n message: sanitizeString(fe.message),\n metadata: fe.metadata\n ? (sanitizeObject(fe.metadata, additionalSensitiveFields) as Record<string, unknown>)\n : undefined,\n }))\n\n return {\n ...error,\n message: sanitizeString(error.message),\n fieldErrors: sanitizedFieldErrors,\n raw: includeRawError ? error.raw : undefined,\n }\n}\n\n/**\n * Returns a copy of an observability metric with sensitive values redacted from its tags.\n *\n * @remarks\n * If `config.customMetricSanitizer` is provided, it is invoked and its result returned directly.\n * When sanitization is disabled, the metric passes through unchanged. Otherwise the `tags` record\n * is run through {@link sanitizeObject} with `additionalSensitiveFields` applied.\n *\n * @param metric - The metric reported by SDK component instrumentation.\n * @param config - Optional sanitization configuration; defaults to enabled.\n * @returns The sanitized metric suitable for forwarding to a partner observability hook.\n * @internal\n */\nexport function sanitizeMetric(\n metric: ObservabilityMetric,\n config: SanitizationConfig = {},\n): ObservabilityMetric {\n const { enabled = true, customMetricSanitizer, additionalSensitiveFields = [] } = config\n\n if (customMetricSanitizer) {\n return customMetricSanitizer(metric)\n }\n\n if (!enabled) {\n return metric\n }\n\n return {\n ...metric,\n tags: metric.tags\n ? (sanitizeObject(metric.tags, additionalSensitiveFields) as Record<string, string>)\n : undefined,\n }\n}\n"],"names":["PII_PATTERNS","SENSITIVE_FIELD_NAMES","sanitizeString","value","sanitized","pattern","replacement","sanitizeObject","obj","additionalSensitiveFields","item","allSensitiveFields","key","field","sanitizeError","error","config","enabled","includeRawError","customErrorSanitizer","sanitizedFieldErrors","fe","sanitizeMetric","metric","customMetricSanitizer"],"mappings":"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"}
|
|
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\nconst PII_PATTERNS = [\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 pattern: /\\b[A-Za-z0-9._%+-]+@[A-Za-z0-9.-]+\\.[A-Z|a-z]{2,}\\b/g,\n replacement: '[EMAIL-REDACTED]',\n },\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 { pattern: /\\b\\d{4}[-\\s]?\\d{4}[-\\s]?\\d{4}[-\\s]?\\d{4}\\b/g, replacement: '[CC-REDACTED]' },\n { pattern: /\\b[A-Za-z0-9_-]{32,}\\b/g, replacement: '[TOKEN-REDACTED]' },\n]\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 'dateOfBirth',\n 'date_of_birth',\n 'birthDate',\n 'birth_date',\n 'birthday',\n 'firstName',\n 'first_name',\n 'lastName',\n 'last_name',\n 'middleName',\n 'middle_name',\n 'fullName',\n 'full_name',\n 'employeeName',\n 'employee_name',\n 'signatureText',\n 'signature_text',\n 'retirementLoanIdentifier',\n 'retirement_loan_identifier',\n 'phone',\n 'zipCode',\n 'zip_code',\n 'postalCode',\n 'postal_code',\n 'preparerCity',\n 'preparer_city',\n 'preparerZip',\n 'preparer_zip',\n 'preparer2City',\n 'preparer2_city',\n 'preparer2Zip',\n 'preparer2_zip',\n 'preparer3City',\n 'preparer3_city',\n 'preparer3Zip',\n 'preparer3_zip',\n 'preparer4City',\n 'preparer4_city',\n 'preparer4Zip',\n 'preparer4_zip',\n 'address',\n 'street1',\n 'street_1',\n 'street2',\n 'street_2',\n 'caseNumber',\n 'case_number',\n 'orderNumber',\n 'order_number',\n 'remittanceNumber',\n 'remittance_number',\n 'documentNumber',\n 'document_number',\n]\n\nconst EXACT_SENSITIVE_FIELD_NAMES = new Set(['ein', 'dob', 'zip', 'city'])\n\n/**\n * Replaces PII patterns (SSN, email, phone, credit card, long tokens) in a string with redacted placeholders.\n *\n * @param value - The string to scan and redact.\n * @returns The input with each matched pattern replaced by a `[TYPE-REDACTED]` placeholder.\n * @internal\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 walks a value, redacting sensitive object keys and PII patterns in nested strings.\n *\n * @remarks\n * Keys whose names match (case-insensitively contain) any built-in sensitive field name or any\n * entry in `additionalSensitiveFields` have their values replaced with `[REDACTED]`. Short names\n * (`ein`, `dob`, `zip`, `city`) match the whole key, case-insensitively. String\n * values are passed through {@link sanitizeString} so PII patterns inside them are also redacted.\n * Numbers, booleans, `null`, and `undefined` pass through unchanged.\n *\n * @param obj - The value to sanitize. May be any JSON-shaped structure.\n * @param additionalSensitiveFields - Extra field names to treat as sensitive (case-insensitive substring match).\n * @returns A new value of the same shape with sensitive fields and PII patterns redacted.\n * @internal\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 const allSensitiveFields = [...SENSITIVE_FIELD_NAMES, ...additionalSensitiveFields]\n\n for (const [key, value] of Object.entries(obj)) {\n const lowerKey = key.toLowerCase()\n if (\n EXACT_SENSITIVE_FIELD_NAMES.has(lowerKey) ||\n allSensitiveFields.some(field => lowerKey.includes(field.toLowerCase()))\n ) {\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\nfunction redactError(\n error: ObservabilityError,\n { enabled = true, includeRawError = false, additionalSensitiveFields = [] }: SanitizationConfig,\n): ObservabilityError {\n const raw = includeRawError ? error.raw : undefined\n\n if (!enabled) {\n return { ...error, raw }\n }\n\n return {\n ...error,\n message: sanitizeString(error.message),\n fieldErrors: error.fieldErrors.map(fieldError => ({\n ...fieldError,\n message: sanitizeString(fieldError.message),\n metadata: fieldError.metadata\n ? (sanitizeObject(fieldError.metadata, additionalSensitiveFields) as Record<\n string,\n unknown\n >)\n : undefined,\n })),\n raw,\n }\n}\n\nfunction redactMetric(\n metric: ObservabilityMetric,\n { enabled = true, additionalSensitiveFields = [] }: SanitizationConfig,\n): ObservabilityMetric {\n if (!enabled) {\n return metric\n }\n\n return {\n ...metric,\n tags: metric.tags\n ? (sanitizeObject(metric.tags, additionalSensitiveFields) as Record<string, string>)\n : undefined,\n }\n}\n\n/**\n * Redacts error messages and field-error metadata before and after a custom sanitizer runs.\n *\n * @remarks\n * `enabled: false` skips redaction. Independently, `raw` is excluded before and after the\n * custom sanitizer unless `includeRawError: true`. Opted-in `raw` is passed through unchanged.\n * Other error properties are preserved without redaction.\n *\n * @internal\n */\nexport function sanitizeError(\n error: ObservabilityError,\n config: SanitizationConfig = {},\n): ObservabilityError {\n const sanitized = redactError(error, config)\n return config.customErrorSanitizer\n ? redactError(config.customErrorSanitizer(sanitized), config)\n : sanitized\n}\n\n/**\n * Redacts metric tags before and after a custom sanitizer runs, unless `enabled: false`.\n *\n * @remarks\n * Other metric properties are preserved without redaction.\n *\n * @internal\n */\nexport function sanitizeMetric(\n metric: ObservabilityMetric,\n config: SanitizationConfig = {},\n): ObservabilityMetric {\n const sanitized = redactMetric(metric, config)\n return config.customMetricSanitizer\n ? redactMetric(config.customMetricSanitizer(sanitized), config)\n : sanitized\n}\n"],"names":["PII_PATTERNS","SENSITIVE_FIELD_NAMES","EXACT_SENSITIVE_FIELD_NAMES","sanitizeString","value","sanitized","pattern","replacement","sanitizeObject","obj","additionalSensitiveFields","item","allSensitiveFields","key","lowerKey","field","redactError","error","enabled","includeRawError","raw","fieldError","redactMetric","metric","sanitizeError","config","sanitizeMetric"],"mappings":"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"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"useUnstableFeature.js","sources":["../../../src/contexts/UnstableFeaturesProvider/useUnstableFeature.ts"],"sourcesContent":["import { createContext, useContext } from 'react'\n\n/**\n * Opt-in flags for SDK functionality that is still in active development.\n *\n * @remarks\n * Pass to {@link GustoProvider} via the `unstableFeatures` prop to enable a feature ahead of its\n * public release. Every flag defaults to disabled when omitted. When a feature graduates to\n * public release, its flag is deleted from this interface along with the conditional checks that\n * read it — there is no deprecation step. This interface may have no flags at all at any given\n * time — e.g. immediately after the last active flag graduates and before the next one is added —\n * the opt-in mechanism itself is permanent even when nothing is currently gated behind it.\n *\n * @alpha\n */\nexport interface UnstableFeatures {\n /** Enables recording past payments to contractors within the `ContractorManagement` flows. */\n historicalPayments?: boolean\n /**\n * Enables the in-development regular-rate-of-pay experience: the payroll editing flow, and the\n * workweek start day field on `PaySchedule` that RRoP's overtime calculations depend on.\n */\n payrollRegularRateOfPay?: boolean\n /** Enables the in-development `CompanyManagement.PaySchedule` flow for managing pay schedules and their assignments after onboarding. */\n managePaySchedules?: boolean\n}\n\n/**\n * React context backing {@link useUnstableFeature}.\n *\n * @internal\n */\nexport const UnstableFeaturesContext = createContext<UnstableFeatures>({})\n\n/**\n * Reads whether `feature` is enabled via {@link GustoProvider}'s `unstableFeatures` prop.\n *\n * @remarks\n * With `throwIfDisabled: true`, call unconditionally at the top of an alpha component's body —\n * not inside {@link WithUnstableFeature} — so mounting the component without opting in fails\n * loudly and immediately. This throws in every environment, including production: using an alpha\n * component without its flag is an integration mistake, not a runtime state, the same as\n * {@link useComponentContext} throwing when called outside a `ComponentsProvider`.\n *\n * @param feature - The {@link UnstableFeatures} flag to read.\n * @param options - Set `throwIfDisabled` to throw instead of returning `false` when `feature` is disabled.\n * @throws When `options.throwIfDisabled` is set and `feature` is not enabled.\n * @internal\n */\nexport const useUnstableFeature = (\n feature: keyof UnstableFeatures,\n options: { throwIfDisabled?: boolean } = { throwIfDisabled: false },\n): boolean => {\n const features = useContext(UnstableFeaturesContext)\n const isEnabled = !!features[feature]\n\n if (options.throwIfDisabled && !isEnabled) {\n throw new Error(\n `This component requires the unstable feature flag \"${feature}\" to be enabled via GustoProvider's \\`unstableFeatures\\` prop.`,\n )\n }\n\n return isEnabled\n}\n"],"names":["UnstableFeaturesContext","createContext","useUnstableFeature","feature","options","isEnabled","useContext"],"mappings":";
|
|
1
|
+
{"version":3,"file":"useUnstableFeature.js","sources":["../../../src/contexts/UnstableFeaturesProvider/useUnstableFeature.ts"],"sourcesContent":["import { createContext, useContext } from 'react'\n\n/**\n * Opt-in flags for SDK functionality that is still in active development.\n *\n * @remarks\n * Pass to {@link GustoProvider} via the `unstableFeatures` prop to enable a feature ahead of its\n * public release. Every flag defaults to disabled when omitted. When a feature graduates to\n * public release, its flag is deleted from this interface along with the conditional checks that\n * read it — there is no deprecation step. This interface may have no flags at all at any given\n * time — e.g. immediately after the last active flag graduates and before the next one is added —\n * the opt-in mechanism itself is permanent even when nothing is currently gated behind it.\n *\n * @alpha\n */\nexport interface UnstableFeatures {\n /** Enables recording past payments to contractors within the `ContractorManagement` flows. */\n historicalPayments?: boolean\n /**\n * Enables the in-development regular-rate-of-pay experience: the payroll editing flow, and the\n * workweek start day field on `PaySchedule` that RRoP's overtime calculations depend on.\n */\n payrollRegularRateOfPay?: boolean\n /** Enables the in-development `CompanyManagement.PaySchedule` flow for managing pay schedules and their assignments after onboarding. */\n managePaySchedules?: boolean\n /** Enables the in-development `CompanyManagement.TaxPaymentsFlow` for reviewing a company's tax payments and their liabilities. */\n taxPayments?: boolean\n}\n\n/**\n * React context backing {@link useUnstableFeature}.\n *\n * @internal\n */\nexport const UnstableFeaturesContext = createContext<UnstableFeatures>({})\n\n/**\n * Reads whether `feature` is enabled via {@link GustoProvider}'s `unstableFeatures` prop.\n *\n * @remarks\n * With `throwIfDisabled: true`, call unconditionally at the top of an alpha component's body —\n * not inside {@link WithUnstableFeature} — so mounting the component without opting in fails\n * loudly and immediately. This throws in every environment, including production: using an alpha\n * component without its flag is an integration mistake, not a runtime state, the same as\n * {@link useComponentContext} throwing when called outside a `ComponentsProvider`.\n *\n * @param feature - The {@link UnstableFeatures} flag to read.\n * @param options - Set `throwIfDisabled` to throw instead of returning `false` when `feature` is disabled.\n * @throws When `options.throwIfDisabled` is set and `feature` is not enabled.\n * @internal\n */\nexport const useUnstableFeature = (\n feature: keyof UnstableFeatures,\n options: { throwIfDisabled?: boolean } = { throwIfDisabled: false },\n): boolean => {\n const features = useContext(UnstableFeaturesContext)\n const isEnabled = !!features[feature]\n\n if (options.throwIfDisabled && !isEnabled) {\n throw new Error(\n `This component requires the unstable feature flag \"${feature}\" to be enabled via GustoProvider's \\`unstableFeatures\\` prop.`,\n )\n }\n\n return isEnabled\n}\n"],"names":["UnstableFeaturesContext","createContext","useUnstableFeature","feature","options","isEnabled","useContext"],"mappings":";AAkCO,MAAMA,IAA0BC,EAAgC,CAAA,CAAE,GAiB5DC,IAAqB,CAChCC,GACAC,IAAyC,EAAE,iBAAiB,SAChD;AAEZ,QAAMC,IAAY,CAAC,CADFC,EAAWN,CAAuB,EACtBG,CAAO;AAEpC,MAAIC,EAAQ,mBAAmB,CAACC;AAC9B,UAAM,IAAI;AAAA,MACR,sDAAsDF,CAAO;AAAA,IAAA;AAIjE,SAAOE;AACT;"}
|
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
import { z as n } from "zod";
|
|
2
2
|
import { formatWithMask as o, commonMasks as i } from "./mask.js";
|
|
3
3
|
import { removeNonDigits as r } from "./formattedStrings.js";
|
|
4
|
-
const s = /^([a-zA-Z\xC0-\uFFFF]+([ \-']{0,1}[a-zA-Z\xC0-\uFFFF]+)*[.]{0,1}){1,2}$/, g = n.string().min(1).regex(s), N = n.string().refine((t) => /(^\d{5}$)|(^\d{5}-\d{4}$)/.test(t)), F = /^(?!(000|666|9))\d{3}(?!00)\d{2}(?!0000)\d{4}$/, R = /^\d{2}-\d{7}$/, f = n.string().transform((t) => o(t, i.phoneMask)).refine((t) => r(t).length === 10), e = /^[0-9]{9}$/, p = n.string().regex(e), a = /^[0-9]{1,17}$/, u = n.string().regex(a);
|
|
4
|
+
const s = /^([a-zA-Z\xC0-\uFFFF]+([ \-']{0,1}[a-zA-Z\xC0-\uFFFF]+)*[.]{0,1}){1,2}$/, g = n.string().trim().min(1).regex(s), N = n.string().refine((t) => /(^\d{5}$)|(^\d{5}-\d{4}$)/.test(t)), F = /^(?!(000|666|9))\d{3}(?!00)\d{2}(?!0000)\d{4}$/, R = /^\d{2}-\d{7}$/, f = n.string().transform((t) => o(t, i.phoneMask)).refine((t) => r(t).length === 10), e = /^[0-9]{9}$/, p = n.string().regex(e), a = /^[0-9]{1,17}$/, u = n.string().regex(a);
|
|
5
5
|
export {
|
|
6
6
|
a as ACCOUNT_NUMBER_REGEX,
|
|
7
7
|
R as EIN_REGEX,
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"validations.js","sources":["../../src/helpers/validations.ts"],"sourcesContent":["import { z } from 'zod'\nimport { commonMasks, formatWithMask } from './mask'\nimport { removeNonDigits } from '@/helpers/formattedStrings'\n\n/**\n * Regex matching personal names: one or two words composed of Latin or extended-Latin letters,\n * with optional internal spaces, hyphens, or apostrophes, and an optional trailing period.\n *\n * @internal\n */\nexport const NAME_REGEX = /^([a-zA-Z\\xC0-\\uFFFF]+([ \\-']{0,1}[a-zA-Z\\xC0-\\uFFFF]+)*[.]{0,1}){1,2}$/\n\n/**\n * Zod schema validating a non-empty personal name against {@link NAME_REGEX}.\n *\n * @internal\n */\nexport const nameValidation = z.string().min(1).regex(NAME_REGEX)\n\n/**\n * Zod schema validating a US ZIP code in either 5-digit (`12345`) or ZIP+4 (`12345-6789`) form.\n *\n * @internal\n */\nexport const zipValidation = z.string().refine(zip => /(^\\d{5}$)|(^\\d{5}-\\d{4}$)/.test(zip))\n\n/**\n * Regex matching a valid US Social Security Number. Rejects reserved area numbers (000, 666, 9xx),\n * a group number of 00, and a serial number of 0000.\n *\n * @internal\n */\nexport const SSN_REGEX = /^(?!(000|666|9))\\d{3}(?!00)\\d{2}(?!0000)\\d{4}$/\n\n/**\n * Regex matching a federal EIN in the canonical display format `NN-NNNNNNN`\n * (two digits, a hyphen, then seven digits). Pair with `normalizeEin` to format\n * raw input before testing.\n *\n * @internal\n */\nexport const EIN_REGEX = /^\\d{2}-\\d{7}$/\n\n/**\n * Zod schema validating a US phone number. Formats the input with the phone mask and accepts it\n * only when the digit-only form is exactly ten digits.\n *\n * @internal\n */\nexport const phoneValidation = z\n .string()\n .transform(value => formatWithMask(value, commonMasks.phoneMask))\n .refine(phone => {\n const digits = removeNonDigits(phone)\n return digits.length === 10\n })\n\n/**\n * Regex matching a bank routing number (exactly nine digits).\n *\n * @internal\n */\nexport const ROUTING_NUMBER_REGEX = /^[0-9]{9}$/\n\n/**\n * Zod schema validating a bank routing number (exactly nine digits).\n *\n * @internal\n */\nexport const routingNumberValidation = z.string().regex(ROUTING_NUMBER_REGEX)\n\n/**\n * Regex matching a bank account number (one to seventeen digits).\n *\n * @internal\n */\nexport const ACCOUNT_NUMBER_REGEX = /^[0-9]{1,17}$/\n\n/**\n * Zod schema validating a bank account number (one to seventeen digits).\n *\n * @internal\n */\nexport const accountNumberValidation = z.string().regex(ACCOUNT_NUMBER_REGEX)\n"],"names":["NAME_REGEX","nameValidation","z","zipValidation","zip","SSN_REGEX","EIN_REGEX","phoneValidation","value","formatWithMask","commonMasks","phone","removeNonDigits","ROUTING_NUMBER_REGEX","routingNumberValidation","ACCOUNT_NUMBER_REGEX","accountNumberValidation"],"mappings":";;;AAUO,MAAMA,IAAa,2EAObC,IAAiBC,EAAE,
|
|
1
|
+
{"version":3,"file":"validations.js","sources":["../../src/helpers/validations.ts"],"sourcesContent":["import { z } from 'zod'\nimport { commonMasks, formatWithMask } from './mask'\nimport { removeNonDigits } from '@/helpers/formattedStrings'\n\n/**\n * Regex matching personal names: one or two words composed of Latin or extended-Latin letters,\n * with optional internal spaces, hyphens, or apostrophes, and an optional trailing period.\n *\n * @internal\n */\nexport const NAME_REGEX = /^([a-zA-Z\\xC0-\\uFFFF]+([ \\-']{0,1}[a-zA-Z\\xC0-\\uFFFF]+)*[.]{0,1}){1,2}$/\n\n/**\n * Zod schema validating a non-empty personal name against {@link NAME_REGEX}.\n *\n * @internal\n */\nexport const nameValidation = z.string().trim().min(1).regex(NAME_REGEX)\n\n/**\n * Zod schema validating a US ZIP code in either 5-digit (`12345`) or ZIP+4 (`12345-6789`) form.\n *\n * @internal\n */\nexport const zipValidation = z.string().refine(zip => /(^\\d{5}$)|(^\\d{5}-\\d{4}$)/.test(zip))\n\n/**\n * Regex matching a valid US Social Security Number. Rejects reserved area numbers (000, 666, 9xx),\n * a group number of 00, and a serial number of 0000.\n *\n * @internal\n */\nexport const SSN_REGEX = /^(?!(000|666|9))\\d{3}(?!00)\\d{2}(?!0000)\\d{4}$/\n\n/**\n * Regex matching a federal EIN in the canonical display format `NN-NNNNNNN`\n * (two digits, a hyphen, then seven digits). Pair with `normalizeEin` to format\n * raw input before testing.\n *\n * @internal\n */\nexport const EIN_REGEX = /^\\d{2}-\\d{7}$/\n\n/**\n * Zod schema validating a US phone number. Formats the input with the phone mask and accepts it\n * only when the digit-only form is exactly ten digits.\n *\n * @internal\n */\nexport const phoneValidation = z\n .string()\n .transform(value => formatWithMask(value, commonMasks.phoneMask))\n .refine(phone => {\n const digits = removeNonDigits(phone)\n return digits.length === 10\n })\n\n/**\n * Regex matching a bank routing number (exactly nine digits).\n *\n * @internal\n */\nexport const ROUTING_NUMBER_REGEX = /^[0-9]{9}$/\n\n/**\n * Zod schema validating a bank routing number (exactly nine digits).\n *\n * @internal\n */\nexport const routingNumberValidation = z.string().regex(ROUTING_NUMBER_REGEX)\n\n/**\n * Regex matching a bank account number (one to seventeen digits).\n *\n * @internal\n */\nexport const ACCOUNT_NUMBER_REGEX = /^[0-9]{1,17}$/\n\n/**\n * Zod schema validating a bank account number (one to seventeen digits).\n *\n * @internal\n */\nexport const accountNumberValidation = z.string().regex(ACCOUNT_NUMBER_REGEX)\n"],"names":["NAME_REGEX","nameValidation","z","zipValidation","zip","SSN_REGEX","EIN_REGEX","phoneValidation","value","formatWithMask","commonMasks","phone","removeNonDigits","ROUTING_NUMBER_REGEX","routingNumberValidation","ACCOUNT_NUMBER_REGEX","accountNumberValidation"],"mappings":";;;AAUO,MAAMA,IAAa,2EAObC,IAAiBC,EAAE,SAAS,KAAA,EAAO,IAAI,CAAC,EAAE,MAAMF,CAAU,GAO1DG,IAAgBD,EAAE,SAAS,OAAO,CAAAE,MAAO,4BAA4B,KAAKA,CAAG,CAAC,GAQ9EC,IAAY,kDASZC,IAAY,iBAQZC,IAAkBL,EAC5B,OAAA,EACA,UAAU,CAAAM,MAASC,EAAeD,GAAOE,EAAY,SAAS,CAAC,EAC/D,OAAO,CAAAC,MACSC,EAAgBD,CAAK,EACtB,WAAW,EAC1B,GAOUE,IAAuB,cAOvBC,IAA0BZ,EAAE,OAAA,EAAS,MAAMW,CAAoB,GAO/DE,IAAuB,iBAOvBC,IAA0Bd,EAAE,OAAA,EAAS,MAAMa,CAAoB;"}
|
package/dist/i18n/I18n.js
CHANGED
|
@@ -11,6 +11,8 @@ const j = "common", i = /* @__PURE__ */ Object.assign({
|
|
|
11
11
|
"./en/Company.Management.AutoPilotDialog.json": () => import("./en/Company.Management.AutoPilotDialog.json.js").then((e) => e.default),
|
|
12
12
|
"./en/Company.Management.PaySchedule.json": () => import("./en/Company.Management.PaySchedule.json.js").then((e) => e.default),
|
|
13
13
|
"./en/Company.Management.PayScheduleAssignment.json": () => import("./en/Company.Management.PayScheduleAssignment.json.js").then((e) => e.default),
|
|
14
|
+
"./en/Company.Management.TaxPaymentDetail.json": () => import("./en/Company.Management.TaxPaymentDetail.json.js").then((e) => e.default),
|
|
15
|
+
"./en/Company.Management.TaxPaymentsList.json": () => import("./en/Company.Management.TaxPaymentsList.json.js").then((e) => e.default),
|
|
14
16
|
"./en/Company.OnboardingOverview.json": () => import("./en/Company.OnboardingOverview.json.js").then((e) => e.default),
|
|
15
17
|
"./en/Company.PaySchedule.json": () => import("./en/Company.PaySchedule.json.js").then((e) => e.default),
|
|
16
18
|
"./en/Company.SignatureForm.json": () => import("./en/Company.SignatureForm.json.js").then((e) => e.default),
|