pigeongov 0.2.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/AGENTS.md +258 -0
- package/LICENSE +21 -0
- package/PRIVACY.md +38 -0
- package/README.md +234 -0
- package/agents.json +72 -0
- package/dist/bin/pigeongov.d.ts +2 -0
- package/dist/bin/pigeongov.js +4 -0
- package/dist/bin/pigeongov.js.map +1 -0
- package/dist/src/advisory/decision-support/contribution-optimizer.d.ts +36 -0
- package/dist/src/advisory/decision-support/contribution-optimizer.js +88 -0
- package/dist/src/advisory/decision-support/contribution-optimizer.js.map +1 -0
- package/dist/src/advisory/decision-support/deduction-optimizer.d.ts +31 -0
- package/dist/src/advisory/decision-support/deduction-optimizer.js +96 -0
- package/dist/src/advisory/decision-support/deduction-optimizer.js.map +1 -0
- package/dist/src/advisory/life-events/events.d.ts +4 -0
- package/dist/src/advisory/life-events/events.js +156 -0
- package/dist/src/advisory/life-events/events.js.map +1 -0
- package/dist/src/advisory/life-events/planner.d.ts +19 -0
- package/dist/src/advisory/life-events/planner.js +72 -0
- package/dist/src/advisory/life-events/planner.js.map +1 -0
- package/dist/src/advisory/screener/engine.d.ts +4 -0
- package/dist/src/advisory/screener/engine.js +368 -0
- package/dist/src/advisory/screener/engine.js.map +1 -0
- package/dist/src/advisory/screener/intake.d.ts +68 -0
- package/dist/src/advisory/screener/intake.js +93 -0
- package/dist/src/advisory/screener/intake.js.map +1 -0
- package/dist/src/analytics/stats.d.ts +18 -0
- package/dist/src/analytics/stats.js +158 -0
- package/dist/src/analytics/stats.js.map +1 -0
- package/dist/src/api/handlers/deadlines.d.ts +2 -0
- package/dist/src/api/handlers/deadlines.js +7 -0
- package/dist/src/api/handlers/deadlines.js.map +1 -0
- package/dist/src/api/handlers/openapi.d.ts +2 -0
- package/dist/src/api/handlers/openapi.js +7 -0
- package/dist/src/api/handlers/openapi.js.map +1 -0
- package/dist/src/api/handlers/workflows.d.ts +5 -0
- package/dist/src/api/handlers/workflows.js +73 -0
- package/dist/src/api/handlers/workflows.js.map +1 -0
- package/dist/src/api/index.d.ts +20 -0
- package/dist/src/api/index.js +70 -0
- package/dist/src/api/index.js.map +1 -0
- package/dist/src/api/openapi.d.ts +5 -0
- package/dist/src/api/openapi.js +384 -0
- package/dist/src/api/openapi.js.map +1 -0
- package/dist/src/api/router.d.ts +19 -0
- package/dist/src/api/router.js +57 -0
- package/dist/src/api/router.js.map +1 -0
- package/dist/src/cli/commands/completions.d.ts +2 -0
- package/dist/src/cli/commands/completions.js +396 -0
- package/dist/src/cli/commands/completions.js.map +1 -0
- package/dist/src/cli/commands/deadlines.d.ts +2 -0
- package/dist/src/cli/commands/deadlines.js +47 -0
- package/dist/src/cli/commands/deadlines.js.map +1 -0
- package/dist/src/cli/commands/doctor.d.ts +2 -0
- package/dist/src/cli/commands/doctor.js +50 -0
- package/dist/src/cli/commands/doctor.js.map +1 -0
- package/dist/src/cli/commands/drafts.d.ts +2 -0
- package/dist/src/cli/commands/drafts.js +75 -0
- package/dist/src/cli/commands/drafts.js.map +1 -0
- package/dist/src/cli/commands/extract.d.ts +2 -0
- package/dist/src/cli/commands/extract.js +17 -0
- package/dist/src/cli/commands/extract.js.map +1 -0
- package/dist/src/cli/commands/fees.d.ts +2 -0
- package/dist/src/cli/commands/fees.js +40 -0
- package/dist/src/cli/commands/fees.js.map +1 -0
- package/dist/src/cli/commands/fill.d.ts +25 -0
- package/dist/src/cli/commands/fill.js +354 -0
- package/dist/src/cli/commands/fill.js.map +1 -0
- package/dist/src/cli/commands/glossary.d.ts +2 -0
- package/dist/src/cli/commands/glossary.js +90 -0
- package/dist/src/cli/commands/glossary.js.map +1 -0
- package/dist/src/cli/commands/life-event.d.ts +2 -0
- package/dist/src/cli/commands/life-event.js +41 -0
- package/dist/src/cli/commands/life-event.js.map +1 -0
- package/dist/src/cli/commands/list.d.ts +2 -0
- package/dist/src/cli/commands/list.js +19 -0
- package/dist/src/cli/commands/list.js.map +1 -0
- package/dist/src/cli/commands/machine.d.ts +2 -0
- package/dist/src/cli/commands/machine.js +100 -0
- package/dist/src/cli/commands/machine.js.map +1 -0
- package/dist/src/cli/commands/merge.d.ts +2 -0
- package/dist/src/cli/commands/merge.js +24 -0
- package/dist/src/cli/commands/merge.js.map +1 -0
- package/dist/src/cli/commands/plugin.d.ts +2 -0
- package/dist/src/cli/commands/plugin.js +119 -0
- package/dist/src/cli/commands/plugin.js.map +1 -0
- package/dist/src/cli/commands/profile.d.ts +2 -0
- package/dist/src/cli/commands/profile.js +125 -0
- package/dist/src/cli/commands/profile.js.map +1 -0
- package/dist/src/cli/commands/review.d.ts +2 -0
- package/dist/src/cli/commands/review.js +25 -0
- package/dist/src/cli/commands/review.js.map +1 -0
- package/dist/src/cli/commands/scaffold.d.ts +2 -0
- package/dist/src/cli/commands/scaffold.js +304 -0
- package/dist/src/cli/commands/scaffold.js.map +1 -0
- package/dist/src/cli/commands/schemas.d.ts +2 -0
- package/dist/src/cli/commands/schemas.js +14 -0
- package/dist/src/cli/commands/schemas.js.map +1 -0
- package/dist/src/cli/commands/screen.d.ts +2 -0
- package/dist/src/cli/commands/screen.js +89 -0
- package/dist/src/cli/commands/screen.js.map +1 -0
- package/dist/src/cli/commands/serve.d.ts +2 -0
- package/dist/src/cli/commands/serve.js +46 -0
- package/dist/src/cli/commands/serve.js.map +1 -0
- package/dist/src/cli/commands/start.d.ts +2 -0
- package/dist/src/cli/commands/start.js +16 -0
- package/dist/src/cli/commands/start.js.map +1 -0
- package/dist/src/cli/commands/stats.d.ts +2 -0
- package/dist/src/cli/commands/stats.js +17 -0
- package/dist/src/cli/commands/stats.js.map +1 -0
- package/dist/src/cli/commands/testdata.d.ts +2 -0
- package/dist/src/cli/commands/testdata.js +60 -0
- package/dist/src/cli/commands/testdata.js.map +1 -0
- package/dist/src/cli/commands/tui.d.ts +2 -0
- package/dist/src/cli/commands/tui.js +26 -0
- package/dist/src/cli/commands/tui.js.map +1 -0
- package/dist/src/cli/commands/validate.d.ts +2 -0
- package/dist/src/cli/commands/validate.js +22 -0
- package/dist/src/cli/commands/validate.js.map +1 -0
- package/dist/src/cli/commands/vault.d.ts +2 -0
- package/dist/src/cli/commands/vault.js +73 -0
- package/dist/src/cli/commands/vault.js.map +1 -0
- package/dist/src/cli/commands/workflows.d.ts +2 -0
- package/dist/src/cli/commands/workflows.js +23 -0
- package/dist/src/cli/commands/workflows.js.map +1 -0
- package/dist/src/cli/display/review.d.ts +2 -0
- package/dist/src/cli/display/review.js +4 -0
- package/dist/src/cli/display/review.js.map +1 -0
- package/dist/src/cli/display/summary.d.ts +2 -0
- package/dist/src/cli/display/summary.js +19 -0
- package/dist/src/cli/display/summary.js.map +1 -0
- package/dist/src/cli/display/validation.d.ts +2 -0
- package/dist/src/cli/display/validation.js +16 -0
- package/dist/src/cli/display/validation.js.map +1 -0
- package/dist/src/cli/index.d.ts +1 -0
- package/dist/src/cli/index.js +83 -0
- package/dist/src/cli/index.js.map +1 -0
- package/dist/src/cli/output.d.ts +21 -0
- package/dist/src/cli/output.js +107 -0
- package/dist/src/cli/output.js.map +1 -0
- package/dist/src/cli/prompts/common.d.ts +21 -0
- package/dist/src/cli/prompts/common.js +53 -0
- package/dist/src/cli/prompts/common.js.map +1 -0
- package/dist/src/cli/prompts/credits.d.ts +3 -0
- package/dist/src/cli/prompts/credits.js +23 -0
- package/dist/src/cli/prompts/credits.js.map +1 -0
- package/dist/src/cli/prompts/deductions.d.ts +12 -0
- package/dist/src/cli/prompts/deductions.js +26 -0
- package/dist/src/cli/prompts/deductions.js.map +1 -0
- package/dist/src/cli/prompts/identity.d.ts +8 -0
- package/dist/src/cli/prompts/identity.js +36 -0
- package/dist/src/cli/prompts/identity.js.map +1 -0
- package/dist/src/cli/prompts/income.d.ts +15 -0
- package/dist/src/cli/prompts/income.js +61 -0
- package/dist/src/cli/prompts/income.js.map +1 -0
- package/dist/src/cli/prompts/workflow.d.ts +3 -0
- package/dist/src/cli/prompts/workflow.js +74 -0
- package/dist/src/cli/prompts/workflow.js.map +1 -0
- package/dist/src/cli/support.d.ts +53 -0
- package/dist/src/cli/support.js +80 -0
- package/dist/src/cli/support.js.map +1 -0
- package/dist/src/cli/tui.d.ts +22 -0
- package/dist/src/cli/tui.js +122 -0
- package/dist/src/cli/tui.js.map +1 -0
- package/dist/src/engine/audit-risk/scorer.d.ts +36 -0
- package/dist/src/engine/audit-risk/scorer.js +132 -0
- package/dist/src/engine/audit-risk/scorer.js.map +1 -0
- package/dist/src/engine/crypto/cost-basis.d.ts +19 -0
- package/dist/src/engine/crypto/cost-basis.js +115 -0
- package/dist/src/engine/crypto/cost-basis.js.map +1 -0
- package/dist/src/engine/crypto/transaction-parser.d.ts +36 -0
- package/dist/src/engine/crypto/transaction-parser.js +124 -0
- package/dist/src/engine/crypto/transaction-parser.js.map +1 -0
- package/dist/src/engine/crypto/wash-sale.d.ts +25 -0
- package/dist/src/engine/crypto/wash-sale.js +51 -0
- package/dist/src/engine/crypto/wash-sale.js.map +1 -0
- package/dist/src/engine/equity/espp.d.ts +41 -0
- package/dist/src/engine/equity/espp.js +90 -0
- package/dist/src/engine/equity/espp.js.map +1 -0
- package/dist/src/engine/equity/iso.d.ts +42 -0
- package/dist/src/engine/equity/iso.js +94 -0
- package/dist/src/engine/equity/iso.js.map +1 -0
- package/dist/src/engine/equity/nso.d.ts +35 -0
- package/dist/src/engine/equity/nso.js +63 -0
- package/dist/src/engine/equity/nso.js.map +1 -0
- package/dist/src/engine/equity/rsu.d.ts +33 -0
- package/dist/src/engine/equity/rsu.js +64 -0
- package/dist/src/engine/equity/rsu.js.map +1 -0
- package/dist/src/engine/field-mapper.d.ts +26 -0
- package/dist/src/engine/field-mapper.js +119 -0
- package/dist/src/engine/field-mapper.js.map +1 -0
- package/dist/src/engine/forms/core-1040.d.ts +2 -0
- package/dist/src/engine/forms/core-1040.js +124 -0
- package/dist/src/engine/forms/core-1040.js.map +1 -0
- package/dist/src/engine/forms/form-8949.d.ts +21 -0
- package/dist/src/engine/forms/form-8949.js +96 -0
- package/dist/src/engine/forms/form-8949.js.map +1 -0
- package/dist/src/engine/forms/index.d.ts +7 -0
- package/dist/src/engine/forms/index.js +6 -0
- package/dist/src/engine/forms/index.js.map +1 -0
- package/dist/src/engine/forms/schedule-b.d.ts +15 -0
- package/dist/src/engine/forms/schedule-b.js +78 -0
- package/dist/src/engine/forms/schedule-b.js.map +1 -0
- package/dist/src/engine/forms/schedule-d.d.ts +9 -0
- package/dist/src/engine/forms/schedule-d.js +86 -0
- package/dist/src/engine/forms/schedule-d.js.map +1 -0
- package/dist/src/engine/fpl.d.ts +70 -0
- package/dist/src/engine/fpl.js +127 -0
- package/dist/src/engine/fpl.js.map +1 -0
- package/dist/src/engine/gig/home-office.d.ts +34 -0
- package/dist/src/engine/gig/home-office.js +53 -0
- package/dist/src/engine/gig/home-office.js.map +1 -0
- package/dist/src/engine/gig/mileage.d.ts +30 -0
- package/dist/src/engine/gig/mileage.js +45 -0
- package/dist/src/engine/gig/mileage.js.map +1 -0
- package/dist/src/engine/gig/multi-1099.d.ts +19 -0
- package/dist/src/engine/gig/multi-1099.js +28 -0
- package/dist/src/engine/gig/multi-1099.js.map +1 -0
- package/dist/src/engine/multiyear/carryforward.d.ts +31 -0
- package/dist/src/engine/multiyear/carryforward.js +77 -0
- package/dist/src/engine/multiyear/carryforward.js.map +1 -0
- package/dist/src/engine/multiyear/compare.d.ts +25 -0
- package/dist/src/engine/multiyear/compare.js +94 -0
- package/dist/src/engine/multiyear/compare.js.map +1 -0
- package/dist/src/engine/multiyear/import.d.ts +23 -0
- package/dist/src/engine/multiyear/import.js +193 -0
- package/dist/src/engine/multiyear/import.js.map +1 -0
- package/dist/src/engine/optimizer/filing-status.d.ts +29 -0
- package/dist/src/engine/optimizer/filing-status.js +66 -0
- package/dist/src/engine/optimizer/filing-status.js.map +1 -0
- package/dist/src/engine/orchestrator.d.ts +14 -0
- package/dist/src/engine/orchestrator.js +135 -0
- package/dist/src/engine/orchestrator.js.map +1 -0
- package/dist/src/engine/scenarios/whatif.d.ts +34 -0
- package/dist/src/engine/scenarios/whatif.js +70 -0
- package/dist/src/engine/scenarios/whatif.js.map +1 -0
- package/dist/src/engine/state/ca/calculator.d.ts +3 -0
- package/dist/src/engine/state/ca/calculator.js +107 -0
- package/dist/src/engine/state/ca/calculator.js.map +1 -0
- package/dist/src/engine/state/common.d.ts +39 -0
- package/dist/src/engine/state/common.js +115 -0
- package/dist/src/engine/state/common.js.map +1 -0
- package/dist/src/engine/state/ga/calculator.d.ts +3 -0
- package/dist/src/engine/state/ga/calculator.js +82 -0
- package/dist/src/engine/state/ga/calculator.js.map +1 -0
- package/dist/src/engine/state/il/calculator.d.ts +3 -0
- package/dist/src/engine/state/il/calculator.js +49 -0
- package/dist/src/engine/state/il/calculator.js.map +1 -0
- package/dist/src/engine/state/mi/calculator.d.ts +3 -0
- package/dist/src/engine/state/mi/calculator.js +60 -0
- package/dist/src/engine/state/mi/calculator.js.map +1 -0
- package/dist/src/engine/state/nc/calculator.d.ts +3 -0
- package/dist/src/engine/state/nc/calculator.js +54 -0
- package/dist/src/engine/state/nc/calculator.js.map +1 -0
- package/dist/src/engine/state/nj/calculator.d.ts +3 -0
- package/dist/src/engine/state/nj/calculator.js +90 -0
- package/dist/src/engine/state/nj/calculator.js.map +1 -0
- package/dist/src/engine/state/ny/calculator.d.ts +3 -0
- package/dist/src/engine/state/ny/calculator.js +103 -0
- package/dist/src/engine/state/ny/calculator.js.map +1 -0
- package/dist/src/engine/state/oh/calculator.d.ts +3 -0
- package/dist/src/engine/state/oh/calculator.js +79 -0
- package/dist/src/engine/state/oh/calculator.js.map +1 -0
- package/dist/src/engine/state/pa/calculator.d.ts +3 -0
- package/dist/src/engine/state/pa/calculator.js +58 -0
- package/dist/src/engine/state/pa/calculator.js.map +1 -0
- package/dist/src/engine/state/registry.d.ts +9 -0
- package/dist/src/engine/state/registry.js +67 -0
- package/dist/src/engine/state/registry.js.map +1 -0
- package/dist/src/engine/state/types.d.ts +57 -0
- package/dist/src/engine/state/types.js +2 -0
- package/dist/src/engine/state/types.js.map +1 -0
- package/dist/src/engine/state/va/calculator.d.ts +3 -0
- package/dist/src/engine/state/va/calculator.js +76 -0
- package/dist/src/engine/state/va/calculator.js.map +1 -0
- package/dist/src/engine/suggestions/missed-deductions.d.ts +43 -0
- package/dist/src/engine/suggestions/missed-deductions.js +128 -0
- package/dist/src/engine/suggestions/missed-deductions.js.map +1 -0
- package/dist/src/engine/tax-calculator.d.ts +55 -0
- package/dist/src/engine/tax-calculator.js +156 -0
- package/dist/src/engine/tax-calculator.js.map +1 -0
- package/dist/src/engine/tax-constants-2025.d.ts +56 -0
- package/dist/src/engine/tax-constants-2025.js +138 -0
- package/dist/src/engine/tax-constants-2025.js.map +1 -0
- package/dist/src/engine/types.d.ts +77 -0
- package/dist/src/engine/types.js +2 -0
- package/dist/src/engine/types.js.map +1 -0
- package/dist/src/engine/va-math.d.ts +24 -0
- package/dist/src/engine/va-math.js +90 -0
- package/dist/src/engine/va-math.js.map +1 -0
- package/dist/src/engine/validator.d.ts +7 -0
- package/dist/src/engine/validator.js +108 -0
- package/dist/src/engine/validator.js.map +1 -0
- package/dist/src/glossary/entries/healthcare.d.ts +2 -0
- package/dist/src/glossary/entries/healthcare.js +78 -0
- package/dist/src/glossary/entries/healthcare.js.map +1 -0
- package/dist/src/glossary/entries/immigration.d.ts +2 -0
- package/dist/src/glossary/entries/immigration.js +112 -0
- package/dist/src/glossary/entries/immigration.js.map +1 -0
- package/dist/src/glossary/entries/tax.d.ts +2 -0
- package/dist/src/glossary/entries/tax.js +149 -0
- package/dist/src/glossary/entries/tax.js.map +1 -0
- package/dist/src/glossary/entries/unemployment.d.ts +2 -0
- package/dist/src/glossary/entries/unemployment.js +52 -0
- package/dist/src/glossary/entries/unemployment.js.map +1 -0
- package/dist/src/glossary/index.d.ts +19 -0
- package/dist/src/glossary/index.js +39 -0
- package/dist/src/glossary/index.js.map +1 -0
- package/dist/src/i18n/index.d.ts +21 -0
- package/dist/src/i18n/index.js +92 -0
- package/dist/src/i18n/index.js.map +1 -0
- package/dist/src/mcp/result.d.ts +3 -0
- package/dist/src/mcp/result.js +7 -0
- package/dist/src/mcp/result.js.map +1 -0
- package/dist/src/mcp/return-bundle.d.ts +19 -0
- package/dist/src/mcp/return-bundle.js +49 -0
- package/dist/src/mcp/return-bundle.js.map +1 -0
- package/dist/src/mcp/shared.d.ts +49102 -0
- package/dist/src/mcp/shared.js +354 -0
- package/dist/src/mcp/shared.js.map +1 -0
- package/dist/src/mcp/tools/build-packet.d.ts +7 -0
- package/dist/src/mcp/tools/build-packet.js +23 -0
- package/dist/src/mcp/tools/build-packet.js.map +1 -0
- package/dist/src/mcp/tools/calculate-tax.d.ts +40 -0
- package/dist/src/mcp/tools/calculate-tax.js +17 -0
- package/dist/src/mcp/tools/calculate-tax.js.map +1 -0
- package/dist/src/mcp/tools/deadlines.d.ts +7 -0
- package/dist/src/mcp/tools/deadlines.js +23 -0
- package/dist/src/mcp/tools/deadlines.js.map +1 -0
- package/dist/src/mcp/tools/describe-form.d.ts +14 -0
- package/dist/src/mcp/tools/describe-form.js +23 -0
- package/dist/src/mcp/tools/describe-form.js.map +1 -0
- package/dist/src/mcp/tools/describe-workflow.d.ts +6 -0
- package/dist/src/mcp/tools/describe-workflow.js +16 -0
- package/dist/src/mcp/tools/describe-workflow.js.map +1 -0
- package/dist/src/mcp/tools/explain-flag.d.ts +7 -0
- package/dist/src/mcp/tools/explain-flag.js +19 -0
- package/dist/src/mcp/tools/explain-flag.js.map +1 -0
- package/dist/src/mcp/tools/extract-document.d.ts +13 -0
- package/dist/src/mcp/tools/extract-document.js +20 -0
- package/dist/src/mcp/tools/extract-document.js.map +1 -0
- package/dist/src/mcp/tools/fees.d.ts +7 -0
- package/dist/src/mcp/tools/fees.js +24 -0
- package/dist/src/mcp/tools/fees.js.map +1 -0
- package/dist/src/mcp/tools/fill-form.d.ts +56 -0
- package/dist/src/mcp/tools/fill-form.js +47 -0
- package/dist/src/mcp/tools/fill-form.js.map +1 -0
- package/dist/src/mcp/tools/fill-workflow.d.ts +7 -0
- package/dist/src/mcp/tools/fill-workflow.js +24 -0
- package/dist/src/mcp/tools/fill-workflow.js.map +1 -0
- package/dist/src/mcp/tools/glossary.d.ts +8 -0
- package/dist/src/mcp/tools/glossary.js +54 -0
- package/dist/src/mcp/tools/glossary.js.map +1 -0
- package/dist/src/mcp/tools/list-forms.d.ts +6 -0
- package/dist/src/mcp/tools/list-forms.js +15 -0
- package/dist/src/mcp/tools/list-forms.js.map +1 -0
- package/dist/src/mcp/tools/list-workflows.d.ts +6 -0
- package/dist/src/mcp/tools/list-workflows.js +16 -0
- package/dist/src/mcp/tools/list-workflows.js.map +1 -0
- package/dist/src/mcp/tools/plan-life-event.d.ts +59 -0
- package/dist/src/mcp/tools/plan-life-event.js +41 -0
- package/dist/src/mcp/tools/plan-life-event.js.map +1 -0
- package/dist/src/mcp/tools/review-form.d.ts +40 -0
- package/dist/src/mcp/tools/review-form.js +26 -0
- package/dist/src/mcp/tools/review-form.js.map +1 -0
- package/dist/src/mcp/tools/review-workflow.d.ts +7 -0
- package/dist/src/mcp/tools/review-workflow.js +27 -0
- package/dist/src/mcp/tools/review-workflow.js.map +1 -0
- package/dist/src/mcp/tools/screen-eligibility.d.ts +53 -0
- package/dist/src/mcp/tools/screen-eligibility.js +44 -0
- package/dist/src/mcp/tools/screen-eligibility.js.map +1 -0
- package/dist/src/mcp/tools/start-workflow.d.ts +6 -0
- package/dist/src/mcp/tools/start-workflow.js +17 -0
- package/dist/src/mcp/tools/start-workflow.js.map +1 -0
- package/dist/src/mcp/tools/validate-form.d.ts +48 -0
- package/dist/src/mcp/tools/validate-form.js +30 -0
- package/dist/src/mcp/tools/validate-form.js.map +1 -0
- package/dist/src/mcp/tools/validate-workflow.d.ts +7 -0
- package/dist/src/mcp/tools/validate-workflow.js +24 -0
- package/dist/src/mcp/tools/validate-workflow.js.map +1 -0
- package/dist/src/pdf/batch.d.ts +8 -0
- package/dist/src/pdf/batch.js +15 -0
- package/dist/src/pdf/batch.js.map +1 -0
- package/dist/src/pdf/merge.d.ts +10 -0
- package/dist/src/pdf/merge.js +62 -0
- package/dist/src/pdf/merge.js.map +1 -0
- package/dist/src/pdf/ocr.d.ts +22 -0
- package/dist/src/pdf/ocr.js +52 -0
- package/dist/src/pdf/ocr.js.map +1 -0
- package/dist/src/pdf/reader.d.ts +2 -0
- package/dist/src/pdf/reader.js +354 -0
- package/dist/src/pdf/reader.js.map +1 -0
- package/dist/src/pdf/shared.d.ts +89 -0
- package/dist/src/pdf/shared.js +137 -0
- package/dist/src/pdf/shared.js.map +1 -0
- package/dist/src/pdf/writer.d.ts +7 -0
- package/dist/src/pdf/writer.js +311 -0
- package/dist/src/pdf/writer.js.map +1 -0
- package/dist/src/plugins/loader.d.ts +15 -0
- package/dist/src/plugins/loader.js +86 -0
- package/dist/src/plugins/loader.js.map +1 -0
- package/dist/src/plugins/sandbox.d.ts +14 -0
- package/dist/src/plugins/sandbox.js +88 -0
- package/dist/src/plugins/sandbox.js.map +1 -0
- package/dist/src/plugins/types.d.ts +17 -0
- package/dist/src/plugins/types.js +13 -0
- package/dist/src/plugins/types.js.map +1 -0
- package/dist/src/schemas/2025/f1040.d.ts +127 -0
- package/dist/src/schemas/2025/f1040.js +104 -0
- package/dist/src/schemas/2025/f1040.js.map +1 -0
- package/dist/src/schemas/2025/f1099-int.d.ts +53 -0
- package/dist/src/schemas/2025/f1099-int.js +51 -0
- package/dist/src/schemas/2025/f1099-int.js.map +1 -0
- package/dist/src/schemas/2025/f1099-nec.d.ts +47 -0
- package/dist/src/schemas/2025/f1099-nec.js +45 -0
- package/dist/src/schemas/2025/f1099-nec.js.map +1 -0
- package/dist/src/schemas/2025/form-8949.d.ts +46 -0
- package/dist/src/schemas/2025/form-8949.js +71 -0
- package/dist/src/schemas/2025/form-8949.js.map +1 -0
- package/dist/src/schemas/2025/index.d.ts +1004 -0
- package/dist/src/schemas/2025/index.js +60 -0
- package/dist/src/schemas/2025/index.js.map +1 -0
- package/dist/src/schemas/2025/schedule-1.d.ts +44 -0
- package/dist/src/schemas/2025/schedule-1.js +56 -0
- package/dist/src/schemas/2025/schedule-1.js.map +1 -0
- package/dist/src/schemas/2025/schedule-b.d.ts +32 -0
- package/dist/src/schemas/2025/schedule-b.js +53 -0
- package/dist/src/schemas/2025/schedule-b.js.map +1 -0
- package/dist/src/schemas/2025/schedule-c.d.ts +58 -0
- package/dist/src/schemas/2025/schedule-c.js +46 -0
- package/dist/src/schemas/2025/schedule-c.js.map +1 -0
- package/dist/src/schemas/2025/schedule-d.d.ts +36 -0
- package/dist/src/schemas/2025/schedule-d.js +52 -0
- package/dist/src/schemas/2025/schedule-d.js.map +1 -0
- package/dist/src/schemas/2025/shared.d.ts +98 -0
- package/dist/src/schemas/2025/shared.js +161 -0
- package/dist/src/schemas/2025/shared.js.map +1 -0
- package/dist/src/schemas/2025/w2.d.ts +57 -0
- package/dist/src/schemas/2025/w2.js +62 -0
- package/dist/src/schemas/2025/w2.js.map +1 -0
- package/dist/src/storage/drafts.d.ts +25 -0
- package/dist/src/storage/drafts.js +117 -0
- package/dist/src/storage/drafts.js.map +1 -0
- package/dist/src/storage/paths.d.ts +15 -0
- package/dist/src/storage/paths.js +33 -0
- package/dist/src/storage/paths.js.map +1 -0
- package/dist/src/storage/profile.d.ts +17 -0
- package/dist/src/storage/profile.js +59 -0
- package/dist/src/storage/profile.js.map +1 -0
- package/dist/src/storage/vault.d.ts +38 -0
- package/dist/src/storage/vault.js +187 -0
- package/dist/src/storage/vault.js.map +1 -0
- package/dist/src/testing/synthetic.d.ts +13 -0
- package/dist/src/testing/synthetic.js +164 -0
- package/dist/src/testing/synthetic.js.map +1 -0
- package/dist/src/types.d.ts +362 -0
- package/dist/src/types.js +2 -0
- package/dist/src/types.js.map +1 -0
- package/dist/src/workflows/deadlines.d.ts +13 -0
- package/dist/src/workflows/deadlines.js +88 -0
- package/dist/src/workflows/deadlines.js.map +1 -0
- package/dist/src/workflows/domains/benefits.d.ts +409 -0
- package/dist/src/workflows/domains/benefits.js +744 -0
- package/dist/src/workflows/domains/benefits.js.map +1 -0
- package/dist/src/workflows/domains/business.d.ts +65 -0
- package/dist/src/workflows/domains/business.js +76 -0
- package/dist/src/workflows/domains/business.js.map +1 -0
- package/dist/src/workflows/domains/education.d.ts +251 -0
- package/dist/src/workflows/domains/education.js +504 -0
- package/dist/src/workflows/domains/education.js.map +1 -0
- package/dist/src/workflows/domains/estate.d.ts +217 -0
- package/dist/src/workflows/domains/estate.js +407 -0
- package/dist/src/workflows/domains/estate.js.map +1 -0
- package/dist/src/workflows/domains/healthcare-ext.d.ts +88 -0
- package/dist/src/workflows/domains/healthcare-ext.js +150 -0
- package/dist/src/workflows/domains/healthcare-ext.js.map +1 -0
- package/dist/src/workflows/domains/healthcare.d.ts +92 -0
- package/dist/src/workflows/domains/healthcare.js +126 -0
- package/dist/src/workflows/domains/healthcare.js.map +1 -0
- package/dist/src/workflows/domains/identity-domain.d.ts +291 -0
- package/dist/src/workflows/domains/identity-domain.js +541 -0
- package/dist/src/workflows/domains/identity-domain.js.map +1 -0
- package/dist/src/workflows/domains/immigration-ext.d.ts +282 -0
- package/dist/src/workflows/domains/immigration-ext.js +590 -0
- package/dist/src/workflows/domains/immigration-ext.js.map +1 -0
- package/dist/src/workflows/domains/immigration.d.ts +121 -0
- package/dist/src/workflows/domains/immigration.js +152 -0
- package/dist/src/workflows/domains/immigration.js.map +1 -0
- package/dist/src/workflows/domains/legal.d.ts +235 -0
- package/dist/src/workflows/domains/legal.js +380 -0
- package/dist/src/workflows/domains/legal.js.map +1 -0
- package/dist/src/workflows/domains/permits.d.ts +65 -0
- package/dist/src/workflows/domains/permits.js +74 -0
- package/dist/src/workflows/domains/permits.js.map +1 -0
- package/dist/src/workflows/domains/retirement.d.ts +59 -0
- package/dist/src/workflows/domains/retirement.js +155 -0
- package/dist/src/workflows/domains/retirement.js.map +1 -0
- package/dist/src/workflows/domains/tax.d.ts +133 -0
- package/dist/src/workflows/domains/tax.js +187 -0
- package/dist/src/workflows/domains/tax.js.map +1 -0
- package/dist/src/workflows/domains/unemployment.d.ts +105 -0
- package/dist/src/workflows/domains/unemployment.js +122 -0
- package/dist/src/workflows/domains/unemployment.js.map +1 -0
- package/dist/src/workflows/domains/veterans.d.ts +189 -0
- package/dist/src/workflows/domains/veterans.js +380 -0
- package/dist/src/workflows/domains/veterans.js.map +1 -0
- package/dist/src/workflows/fees.d.ts +15 -0
- package/dist/src/workflows/fees.js +93 -0
- package/dist/src/workflows/fees.js.map +1 -0
- package/dist/src/workflows/helpers.d.ts +8 -0
- package/dist/src/workflows/helpers.js +66 -0
- package/dist/src/workflows/helpers.js.map +1 -0
- package/dist/src/workflows/io.d.ts +3 -0
- package/dist/src/workflows/io.js +38 -0
- package/dist/src/workflows/io.js.map +1 -0
- package/dist/src/workflows/registry.d.ts +51355 -0
- package/dist/src/workflows/registry.js +140 -0
- package/dist/src/workflows/registry.js.map +1 -0
- package/dist/src/workflows/schemas/benefits.d.ts +78 -0
- package/dist/src/workflows/schemas/benefits.js +91 -0
- package/dist/src/workflows/schemas/benefits.js.map +1 -0
- package/dist/src/workflows/schemas/common.d.ts +27 -0
- package/dist/src/workflows/schemas/common.js +28 -0
- package/dist/src/workflows/schemas/common.js.map +1 -0
- package/dist/src/workflows/schemas/education.d.ts +70 -0
- package/dist/src/workflows/schemas/education.js +85 -0
- package/dist/src/workflows/schemas/education.js.map +1 -0
- package/dist/src/workflows/schemas/estate.d.ts +64 -0
- package/dist/src/workflows/schemas/estate.js +85 -0
- package/dist/src/workflows/schemas/estate.js.map +1 -0
- package/dist/src/workflows/schemas/healthcare-ext.d.ts +15 -0
- package/dist/src/workflows/schemas/healthcare-ext.js +17 -0
- package/dist/src/workflows/schemas/healthcare-ext.js.map +1 -0
- package/dist/src/workflows/schemas/healthcare.d.ts +33 -0
- package/dist/src/workflows/schemas/healthcare.js +20 -0
- package/dist/src/workflows/schemas/healthcare.js.map +1 -0
- package/dist/src/workflows/schemas/identity-domain.d.ts +64 -0
- package/dist/src/workflows/schemas/identity-domain.js +87 -0
- package/dist/src/workflows/schemas/identity-domain.js.map +1 -0
- package/dist/src/workflows/schemas/immigration-ext.d.ts +63 -0
- package/dist/src/workflows/schemas/immigration-ext.js +58 -0
- package/dist/src/workflows/schemas/immigration-ext.js.map +1 -0
- package/dist/src/workflows/schemas/immigration.d.ts +48 -0
- package/dist/src/workflows/schemas/immigration.js +27 -0
- package/dist/src/workflows/schemas/immigration.js.map +1 -0
- package/dist/src/workflows/schemas/legal.d.ts +45 -0
- package/dist/src/workflows/schemas/legal.js +45 -0
- package/dist/src/workflows/schemas/legal.js.map +1 -0
- package/dist/src/workflows/schemas/planning.d.ts +23 -0
- package/dist/src/workflows/schemas/planning.js +15 -0
- package/dist/src/workflows/schemas/planning.js.map +1 -0
- package/dist/src/workflows/schemas/retirement.d.ts +14 -0
- package/dist/src/workflows/schemas/retirement.js +22 -0
- package/dist/src/workflows/schemas/retirement.js.map +1 -0
- package/dist/src/workflows/schemas/tax.d.ts +58 -0
- package/dist/src/workflows/schemas/tax.js +51 -0
- package/dist/src/workflows/schemas/tax.js.map +1 -0
- package/dist/src/workflows/schemas/unemployment.d.ts +33 -0
- package/dist/src/workflows/schemas/unemployment.js +19 -0
- package/dist/src/workflows/schemas/unemployment.js.map +1 -0
- package/dist/src/workflows/schemas/veterans.d.ts +47 -0
- package/dist/src/workflows/schemas/veterans.js +51 -0
- package/dist/src/workflows/schemas/veterans.js.map +1 -0
- package/dist/src/workflows/types.d.ts +9 -0
- package/dist/src/workflows/types.js +2 -0
- package/dist/src/workflows/types.js.map +1 -0
- package/dist/xmcp.config.d.ts +3 -0
- package/dist/xmcp.config.js +29 -0
- package/dist/xmcp.config.js.map +1 -0
- package/llms.txt +48 -0
- package/package.json +82 -0
|
@@ -0,0 +1,161 @@
|
|
|
1
|
+
import { z } from "zod";
|
|
2
|
+
export const filingStatusValues = [
|
|
3
|
+
"single",
|
|
4
|
+
"married_filing_jointly",
|
|
5
|
+
"married_filing_separately",
|
|
6
|
+
"head_of_household",
|
|
7
|
+
"qualifying_surviving_spouse",
|
|
8
|
+
];
|
|
9
|
+
export const filingStatusSchema = z
|
|
10
|
+
.enum(filingStatusValues)
|
|
11
|
+
.describe("Filing status");
|
|
12
|
+
export const taxYearSchema = z.literal(2025).describe("Tax year");
|
|
13
|
+
export const moneySchema = z
|
|
14
|
+
.coerce
|
|
15
|
+
.number()
|
|
16
|
+
.finite()
|
|
17
|
+
.describe("Monetary amount in dollars");
|
|
18
|
+
export const signedMoneySchema = moneySchema.describe("Signed monetary amount in dollars");
|
|
19
|
+
export const nonNegativeMoneySchema = moneySchema.min(0).describe("Non-negative monetary amount in dollars");
|
|
20
|
+
export const percentSchema = z
|
|
21
|
+
.coerce
|
|
22
|
+
.number()
|
|
23
|
+
.finite()
|
|
24
|
+
.min(0)
|
|
25
|
+
.max(100)
|
|
26
|
+
.describe("Percentage value");
|
|
27
|
+
export const ssnSchema = z
|
|
28
|
+
.string()
|
|
29
|
+
.trim()
|
|
30
|
+
.regex(/^\d{3}-\d{2}-\d{4}$/, "Expected SSN in ###-##-#### format")
|
|
31
|
+
.describe("Social Security number");
|
|
32
|
+
export const einSchema = z
|
|
33
|
+
.string()
|
|
34
|
+
.trim()
|
|
35
|
+
.regex(/^\d{2}-\d{7}$/, "Expected EIN in ##-####### format")
|
|
36
|
+
.describe("Employer identification number");
|
|
37
|
+
export const routingNumberSchema = z
|
|
38
|
+
.string()
|
|
39
|
+
.trim()
|
|
40
|
+
.regex(/^\d{9}$/, "Expected 9-digit routing number")
|
|
41
|
+
.describe("Direct-deposit routing number");
|
|
42
|
+
export const accountNumberSchema = z
|
|
43
|
+
.string()
|
|
44
|
+
.trim()
|
|
45
|
+
.min(4)
|
|
46
|
+
.max(17)
|
|
47
|
+
.describe("Direct-deposit account number");
|
|
48
|
+
export const stateCodeSchema = z
|
|
49
|
+
.string()
|
|
50
|
+
.trim()
|
|
51
|
+
.regex(/^[A-Z]{2}$/, "Expected two-letter state code")
|
|
52
|
+
.describe("State code");
|
|
53
|
+
export const zipCodeSchema = z
|
|
54
|
+
.string()
|
|
55
|
+
.trim()
|
|
56
|
+
.regex(/^\d{5}(?:-\d{4})?$/, "Expected ZIP code in ##### or #####-#### format")
|
|
57
|
+
.describe("ZIP code");
|
|
58
|
+
export const addressSchema = z
|
|
59
|
+
.object({
|
|
60
|
+
street1: z.string().trim().min(1).describe("Street address line 1"),
|
|
61
|
+
street2: z.string().trim().optional().describe("Street address line 2"),
|
|
62
|
+
city: z.string().trim().min(1).describe("City"),
|
|
63
|
+
state: stateCodeSchema,
|
|
64
|
+
zipCode: zipCodeSchema,
|
|
65
|
+
})
|
|
66
|
+
.strict()
|
|
67
|
+
.describe("Mailing address");
|
|
68
|
+
export const personIdentitySchema = z
|
|
69
|
+
.object({
|
|
70
|
+
firstName: z.string().trim().min(1).describe("First name"),
|
|
71
|
+
lastName: z.string().trim().min(1).describe("Last name"),
|
|
72
|
+
ssn: ssnSchema,
|
|
73
|
+
address: addressSchema,
|
|
74
|
+
})
|
|
75
|
+
.strict()
|
|
76
|
+
.describe("Person identity");
|
|
77
|
+
export const dependentSchema = z
|
|
78
|
+
.object({
|
|
79
|
+
name: z.string().trim().min(1).describe("Dependent name"),
|
|
80
|
+
ssn: ssnSchema,
|
|
81
|
+
relationship: z.string().trim().min(1).describe("Relationship to taxpayer"),
|
|
82
|
+
childTaxCreditEligible: z.boolean().describe("Child tax credit eligibility"),
|
|
83
|
+
eitcEligible: z.boolean().optional().describe("Earned income credit eligibility"),
|
|
84
|
+
})
|
|
85
|
+
.strict()
|
|
86
|
+
.describe("Dependent");
|
|
87
|
+
export const yesNoSchema = z.boolean().describe("Boolean yes/no value");
|
|
88
|
+
export const stateInfoSchema = z
|
|
89
|
+
.object({
|
|
90
|
+
state: stateCodeSchema,
|
|
91
|
+
stateIdNumber: z.string().trim().min(1).optional().describe("State identification number"),
|
|
92
|
+
stateIncome: signedMoneySchema.optional().describe("State income amount"),
|
|
93
|
+
stateTaxWithheld: nonNegativeMoneySchema.optional().describe("State tax withheld"),
|
|
94
|
+
localIncome: signedMoneySchema.optional().describe("Local income amount"),
|
|
95
|
+
localTaxWithheld: nonNegativeMoneySchema.optional().describe("Local tax withheld"),
|
|
96
|
+
})
|
|
97
|
+
.strict()
|
|
98
|
+
.describe("State and local tax information");
|
|
99
|
+
export const w2Box12ItemSchema = z
|
|
100
|
+
.object({
|
|
101
|
+
code: z.string().trim().min(1).max(2).describe("W-2 box 12 code"),
|
|
102
|
+
amount: nonNegativeMoneySchema.describe("W-2 box 12 amount"),
|
|
103
|
+
})
|
|
104
|
+
.strict()
|
|
105
|
+
.describe("W-2 box 12 entry");
|
|
106
|
+
export const scheduleCExpenseFields = [
|
|
107
|
+
"advertising",
|
|
108
|
+
"carAndTruck",
|
|
109
|
+
"commissionsAndFees",
|
|
110
|
+
"contractLabor",
|
|
111
|
+
"depletion",
|
|
112
|
+
"depreciation",
|
|
113
|
+
"employeeBenefitPrograms",
|
|
114
|
+
"insuranceOtherThanHealth",
|
|
115
|
+
"interestMortgage",
|
|
116
|
+
"interestOther",
|
|
117
|
+
"legalAndProfessional",
|
|
118
|
+
"officeExpense",
|
|
119
|
+
"pensionAndProfitSharing",
|
|
120
|
+
"rentalOrLeaseVehicles",
|
|
121
|
+
"rentalOrLeaseOtherBusinessProperty",
|
|
122
|
+
"repairsAndMaintenance",
|
|
123
|
+
"supplies",
|
|
124
|
+
"taxesAndLicenses",
|
|
125
|
+
"travel",
|
|
126
|
+
"meals",
|
|
127
|
+
"utilities",
|
|
128
|
+
"wages",
|
|
129
|
+
"otherExpenses",
|
|
130
|
+
];
|
|
131
|
+
const scheduleCExpenseShape = {
|
|
132
|
+
advertising: nonNegativeMoneySchema.optional().describe("Schedule C expense: advertising"),
|
|
133
|
+
carAndTruck: nonNegativeMoneySchema.optional().describe("Schedule C expense: car and truck"),
|
|
134
|
+
commissionsAndFees: nonNegativeMoneySchema.optional().describe("Schedule C expense: commissions and fees"),
|
|
135
|
+
contractLabor: nonNegativeMoneySchema.optional().describe("Schedule C expense: contract labor"),
|
|
136
|
+
depletion: nonNegativeMoneySchema.optional().describe("Schedule C expense: depletion"),
|
|
137
|
+
depreciation: nonNegativeMoneySchema.optional().describe("Schedule C expense: depreciation"),
|
|
138
|
+
employeeBenefitPrograms: nonNegativeMoneySchema.optional().describe("Schedule C expense: employee benefit programs"),
|
|
139
|
+
insuranceOtherThanHealth: nonNegativeMoneySchema.optional().describe("Schedule C expense: insurance other than health"),
|
|
140
|
+
interestMortgage: nonNegativeMoneySchema.optional().describe("Schedule C expense: interest mortgage"),
|
|
141
|
+
interestOther: nonNegativeMoneySchema.optional().describe("Schedule C expense: interest other"),
|
|
142
|
+
legalAndProfessional: nonNegativeMoneySchema.optional().describe("Schedule C expense: legal and professional"),
|
|
143
|
+
officeExpense: nonNegativeMoneySchema.optional().describe("Schedule C expense: office expense"),
|
|
144
|
+
pensionAndProfitSharing: nonNegativeMoneySchema.optional().describe("Schedule C expense: pension and profit sharing"),
|
|
145
|
+
rentalOrLeaseVehicles: nonNegativeMoneySchema.optional().describe("Schedule C expense: rental or lease vehicles"),
|
|
146
|
+
rentalOrLeaseOtherBusinessProperty: nonNegativeMoneySchema.optional().describe("Schedule C expense: rental or lease other business property"),
|
|
147
|
+
repairsAndMaintenance: nonNegativeMoneySchema.optional().describe("Schedule C expense: repairs and maintenance"),
|
|
148
|
+
supplies: nonNegativeMoneySchema.optional().describe("Schedule C expense: supplies"),
|
|
149
|
+
taxesAndLicenses: nonNegativeMoneySchema.optional().describe("Schedule C expense: taxes and licenses"),
|
|
150
|
+
travel: nonNegativeMoneySchema.optional().describe("Schedule C expense: travel"),
|
|
151
|
+
meals: nonNegativeMoneySchema.optional().describe("Schedule C expense: meals"),
|
|
152
|
+
utilities: nonNegativeMoneySchema.optional().describe("Schedule C expense: utilities"),
|
|
153
|
+
wages: nonNegativeMoneySchema.optional().describe("Schedule C expense: wages"),
|
|
154
|
+
otherExpenses: nonNegativeMoneySchema.optional().describe("Schedule C expense: other expenses"),
|
|
155
|
+
};
|
|
156
|
+
export const scheduleCExpenseSchema = z
|
|
157
|
+
.object(scheduleCExpenseShape)
|
|
158
|
+
.strict()
|
|
159
|
+
.describe("Schedule C expense breakdown");
|
|
160
|
+
export const formMeta = (meta) => meta;
|
|
161
|
+
//# sourceMappingURL=shared.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"shared.js","sourceRoot":"","sources":["../../../../src/schemas/2025/shared.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,57 @@
|
|
|
1
|
+
import { z } from "zod";
|
|
2
|
+
export declare const w2Meta: import("./shared.js").SchemaMeta;
|
|
3
|
+
export declare const w2Schema: z.ZodObject<{
|
|
4
|
+
taxYear: z.ZodLiteral<2025>;
|
|
5
|
+
employer: z.ZodObject<{
|
|
6
|
+
name: z.ZodString;
|
|
7
|
+
ein: z.ZodOptional<z.ZodString>;
|
|
8
|
+
address: z.ZodOptional<z.ZodObject<{
|
|
9
|
+
street1: z.ZodString;
|
|
10
|
+
street2: z.ZodOptional<z.ZodString>;
|
|
11
|
+
city: z.ZodString;
|
|
12
|
+
state: z.ZodString;
|
|
13
|
+
zipCode: z.ZodString;
|
|
14
|
+
}, z.core.$strict>>;
|
|
15
|
+
}, z.core.$strict>;
|
|
16
|
+
employee: z.ZodObject<{
|
|
17
|
+
ssn: z.ZodString;
|
|
18
|
+
firstName: z.ZodString;
|
|
19
|
+
lastName: z.ZodString;
|
|
20
|
+
address: z.ZodObject<{
|
|
21
|
+
street1: z.ZodString;
|
|
22
|
+
street2: z.ZodOptional<z.ZodString>;
|
|
23
|
+
city: z.ZodString;
|
|
24
|
+
state: z.ZodString;
|
|
25
|
+
zipCode: z.ZodString;
|
|
26
|
+
}, z.core.$strict>;
|
|
27
|
+
}, z.core.$strict>;
|
|
28
|
+
boxes: z.ZodObject<{
|
|
29
|
+
box1WagesTipsOtherCompensation: z.ZodOptional<z.ZodCoercedNumber<unknown>>;
|
|
30
|
+
box2FederalIncomeTaxWithheld: z.ZodOptional<z.ZodCoercedNumber<unknown>>;
|
|
31
|
+
box3SocialSecurityWages: z.ZodOptional<z.ZodCoercedNumber<unknown>>;
|
|
32
|
+
box4SocialSecurityTaxWithheld: z.ZodOptional<z.ZodCoercedNumber<unknown>>;
|
|
33
|
+
box5MedicareWagesAndTips: z.ZodOptional<z.ZodCoercedNumber<unknown>>;
|
|
34
|
+
box6MedicareTaxWithheld: z.ZodOptional<z.ZodCoercedNumber<unknown>>;
|
|
35
|
+
box7SocialSecurityTips: z.ZodOptional<z.ZodCoercedNumber<unknown>>;
|
|
36
|
+
box8AllocatedTips: z.ZodOptional<z.ZodCoercedNumber<unknown>>;
|
|
37
|
+
box10DependentCareBenefits: z.ZodOptional<z.ZodCoercedNumber<unknown>>;
|
|
38
|
+
box11NonqualifiedPlans: z.ZodOptional<z.ZodCoercedNumber<unknown>>;
|
|
39
|
+
box12: z.ZodDefault<z.ZodArray<z.ZodObject<{
|
|
40
|
+
code: z.ZodString;
|
|
41
|
+
amount: z.ZodCoercedNumber<unknown>;
|
|
42
|
+
}, z.core.$strict>>>;
|
|
43
|
+
box13StatutoryEmployee: z.ZodOptional<z.ZodBoolean>;
|
|
44
|
+
box13RetirementPlan: z.ZodOptional<z.ZodBoolean>;
|
|
45
|
+
box13ThirdPartySickPay: z.ZodOptional<z.ZodBoolean>;
|
|
46
|
+
box14Other: z.ZodDefault<z.ZodArray<z.ZodString>>;
|
|
47
|
+
state: z.ZodDefault<z.ZodArray<z.ZodObject<{
|
|
48
|
+
state: z.ZodString;
|
|
49
|
+
stateIdNumber: z.ZodOptional<z.ZodString>;
|
|
50
|
+
stateIncome: z.ZodOptional<z.ZodCoercedNumber<unknown>>;
|
|
51
|
+
stateTaxWithheld: z.ZodOptional<z.ZodCoercedNumber<unknown>>;
|
|
52
|
+
localIncome: z.ZodOptional<z.ZodCoercedNumber<unknown>>;
|
|
53
|
+
localTaxWithheld: z.ZodOptional<z.ZodCoercedNumber<unknown>>;
|
|
54
|
+
}, z.core.$strict>>>;
|
|
55
|
+
}, z.core.$strict>;
|
|
56
|
+
}, z.core.$strict>;
|
|
57
|
+
export type W2Schema = z.infer<typeof w2Schema>;
|
|
@@ -0,0 +1,62 @@
|
|
|
1
|
+
import { z } from "zod";
|
|
2
|
+
import { einSchema, formMeta, moneySchema, nonNegativeMoneySchema, personIdentitySchema, stateInfoSchema, taxYearSchema, w2Box12ItemSchema, } from "./shared.js";
|
|
3
|
+
export const w2Meta = formMeta({
|
|
4
|
+
id: "w2",
|
|
5
|
+
name: "Form W-2",
|
|
6
|
+
taxYear: 2025,
|
|
7
|
+
version: "2025.1",
|
|
8
|
+
kind: "source-document",
|
|
9
|
+
});
|
|
10
|
+
export const w2Schema = z
|
|
11
|
+
.object({
|
|
12
|
+
taxYear: taxYearSchema,
|
|
13
|
+
employer: z
|
|
14
|
+
.object({
|
|
15
|
+
name: z.string().trim().min(1).describe("Employer name"),
|
|
16
|
+
ein: einSchema.optional().describe("Employer EIN"),
|
|
17
|
+
address: z
|
|
18
|
+
.object({
|
|
19
|
+
street1: z.string().trim().min(1).describe("Employer street address line 1"),
|
|
20
|
+
street2: z.string().trim().optional().describe("Employer street address line 2"),
|
|
21
|
+
city: z.string().trim().min(1).describe("Employer city"),
|
|
22
|
+
state: z.string().trim().regex(/^[A-Z]{2}$/).describe("Employer state"),
|
|
23
|
+
zipCode: z.string().trim().regex(/^\d{5}(?:-\d{4})?$/).describe("Employer ZIP code"),
|
|
24
|
+
})
|
|
25
|
+
.strict()
|
|
26
|
+
.optional()
|
|
27
|
+
.describe("Employer address"),
|
|
28
|
+
})
|
|
29
|
+
.strict()
|
|
30
|
+
.describe("Employer information"),
|
|
31
|
+
employee: personIdentitySchema
|
|
32
|
+
.omit({ address: true })
|
|
33
|
+
.extend({
|
|
34
|
+
address: personIdentitySchema.shape.address,
|
|
35
|
+
})
|
|
36
|
+
.strict()
|
|
37
|
+
.describe("Employee information"),
|
|
38
|
+
boxes: z
|
|
39
|
+
.object({
|
|
40
|
+
box1WagesTipsOtherCompensation: moneySchema.optional().describe("Box 1 - wages, tips, other compensation"),
|
|
41
|
+
box2FederalIncomeTaxWithheld: nonNegativeMoneySchema.optional().describe("Box 2 - federal income tax withheld"),
|
|
42
|
+
box3SocialSecurityWages: nonNegativeMoneySchema.optional().describe("Box 3 - social security wages"),
|
|
43
|
+
box4SocialSecurityTaxWithheld: nonNegativeMoneySchema.optional().describe("Box 4 - social security tax withheld"),
|
|
44
|
+
box5MedicareWagesAndTips: nonNegativeMoneySchema.optional().describe("Box 5 - medicare wages and tips"),
|
|
45
|
+
box6MedicareTaxWithheld: nonNegativeMoneySchema.optional().describe("Box 6 - medicare tax withheld"),
|
|
46
|
+
box7SocialSecurityTips: nonNegativeMoneySchema.optional().describe("Box 7 - social security tips"),
|
|
47
|
+
box8AllocatedTips: nonNegativeMoneySchema.optional().describe("Box 8 - allocated tips"),
|
|
48
|
+
box10DependentCareBenefits: nonNegativeMoneySchema.optional().describe("Box 10 - dependent care benefits"),
|
|
49
|
+
box11NonqualifiedPlans: nonNegativeMoneySchema.optional().describe("Box 11 - nonqualified plans"),
|
|
50
|
+
box12: z.array(w2Box12ItemSchema).default([]).describe("Box 12 entries"),
|
|
51
|
+
box13StatutoryEmployee: z.boolean().optional().describe("Box 13 - statutory employee"),
|
|
52
|
+
box13RetirementPlan: z.boolean().optional().describe("Box 13 - retirement plan"),
|
|
53
|
+
box13ThirdPartySickPay: z.boolean().optional().describe("Box 13 - third-party sick pay"),
|
|
54
|
+
box14Other: z.array(z.string().trim().min(1)).default([]).describe("Box 14 - other entries"),
|
|
55
|
+
state: z.array(stateInfoSchema).default([]).describe("State and local boxes 15-20"),
|
|
56
|
+
})
|
|
57
|
+
.strict()
|
|
58
|
+
.describe("W-2 box data"),
|
|
59
|
+
})
|
|
60
|
+
.strict()
|
|
61
|
+
.describe("W-2 source document");
|
|
62
|
+
//# sourceMappingURL=w2.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"w2.js","sourceRoot":"","sources":["../../../../src/schemas/2025/w2.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,25 @@
|
|
|
1
|
+
import type { DraftMetadata } from "../types.js";
|
|
2
|
+
/**
|
|
3
|
+
* Save a draft of an in-progress workflow.
|
|
4
|
+
* Returns the draft metadata (including the generated id).
|
|
5
|
+
*/
|
|
6
|
+
export declare function saveDraft(workflowId: string, answers: Record<string, unknown>, completedSections: string[]): Promise<DraftMetadata>;
|
|
7
|
+
/**
|
|
8
|
+
* List all saved drafts, optionally filtered by workflow id.
|
|
9
|
+
* Sorted by most-recently-updated first.
|
|
10
|
+
*/
|
|
11
|
+
export declare function listDrafts(workflowId?: string): Promise<DraftMetadata[]>;
|
|
12
|
+
/**
|
|
13
|
+
* Load a specific draft by its id.
|
|
14
|
+
*/
|
|
15
|
+
export declare function loadDraft(draftId: string): Promise<DraftMetadata | null>;
|
|
16
|
+
/**
|
|
17
|
+
* Delete a draft by its id.
|
|
18
|
+
* Returns true if the file was deleted, false if it didn't exist.
|
|
19
|
+
*/
|
|
20
|
+
export declare function deleteDraft(draftId: string): Promise<boolean>;
|
|
21
|
+
/**
|
|
22
|
+
* Remove all drafts older than `olderThanDays` days.
|
|
23
|
+
* Returns the number of drafts removed.
|
|
24
|
+
*/
|
|
25
|
+
export declare function cleanupDrafts(olderThanDays: number): Promise<number>;
|
|
@@ -0,0 +1,117 @@
|
|
|
1
|
+
import { randomUUID } from "node:crypto";
|
|
2
|
+
import { readdir, readFile, writeFile, unlink } from "node:fs/promises";
|
|
3
|
+
import { join } from "node:path";
|
|
4
|
+
import { getDraftsDir, ensureDir } from "./paths.js";
|
|
5
|
+
/**
|
|
6
|
+
* Save a draft of an in-progress workflow.
|
|
7
|
+
* Returns the draft metadata (including the generated id).
|
|
8
|
+
*/
|
|
9
|
+
export async function saveDraft(workflowId, answers, completedSections) {
|
|
10
|
+
const draftsDir = getDraftsDir();
|
|
11
|
+
await ensureDir(draftsDir);
|
|
12
|
+
const id = randomUUID();
|
|
13
|
+
const now = new Date().toISOString();
|
|
14
|
+
const draft = {
|
|
15
|
+
id,
|
|
16
|
+
workflowId,
|
|
17
|
+
schemaVersion: "1.0.0",
|
|
18
|
+
answers,
|
|
19
|
+
completedSections,
|
|
20
|
+
createdAt: now,
|
|
21
|
+
updatedAt: now,
|
|
22
|
+
};
|
|
23
|
+
const filePath = join(draftsDir, `${id}.json`);
|
|
24
|
+
await writeFile(filePath, JSON.stringify(draft, null, 2), "utf-8");
|
|
25
|
+
return draft;
|
|
26
|
+
}
|
|
27
|
+
/**
|
|
28
|
+
* List all saved drafts, optionally filtered by workflow id.
|
|
29
|
+
* Sorted by most-recently-updated first.
|
|
30
|
+
*/
|
|
31
|
+
export async function listDrafts(workflowId) {
|
|
32
|
+
const draftsDir = getDraftsDir();
|
|
33
|
+
await ensureDir(draftsDir);
|
|
34
|
+
let entries;
|
|
35
|
+
try {
|
|
36
|
+
entries = await readdir(draftsDir);
|
|
37
|
+
}
|
|
38
|
+
catch {
|
|
39
|
+
return [];
|
|
40
|
+
}
|
|
41
|
+
const jsonFiles = entries.filter((f) => f.endsWith(".json"));
|
|
42
|
+
const drafts = [];
|
|
43
|
+
for (const file of jsonFiles) {
|
|
44
|
+
try {
|
|
45
|
+
const raw = await readFile(join(draftsDir, file), "utf-8");
|
|
46
|
+
const draft = JSON.parse(raw);
|
|
47
|
+
if (!workflowId || draft.workflowId === workflowId) {
|
|
48
|
+
drafts.push(draft);
|
|
49
|
+
}
|
|
50
|
+
}
|
|
51
|
+
catch {
|
|
52
|
+
// skip malformed files
|
|
53
|
+
}
|
|
54
|
+
}
|
|
55
|
+
drafts.sort((a, b) => new Date(b.updatedAt).getTime() - new Date(a.updatedAt).getTime());
|
|
56
|
+
return drafts;
|
|
57
|
+
}
|
|
58
|
+
/**
|
|
59
|
+
* Load a specific draft by its id.
|
|
60
|
+
*/
|
|
61
|
+
export async function loadDraft(draftId) {
|
|
62
|
+
const filePath = join(getDraftsDir(), `${draftId}.json`);
|
|
63
|
+
try {
|
|
64
|
+
const raw = await readFile(filePath, "utf-8");
|
|
65
|
+
return JSON.parse(raw);
|
|
66
|
+
}
|
|
67
|
+
catch {
|
|
68
|
+
return null;
|
|
69
|
+
}
|
|
70
|
+
}
|
|
71
|
+
/**
|
|
72
|
+
* Delete a draft by its id.
|
|
73
|
+
* Returns true if the file was deleted, false if it didn't exist.
|
|
74
|
+
*/
|
|
75
|
+
export async function deleteDraft(draftId) {
|
|
76
|
+
const filePath = join(getDraftsDir(), `${draftId}.json`);
|
|
77
|
+
try {
|
|
78
|
+
await unlink(filePath);
|
|
79
|
+
return true;
|
|
80
|
+
}
|
|
81
|
+
catch {
|
|
82
|
+
return false;
|
|
83
|
+
}
|
|
84
|
+
}
|
|
85
|
+
/**
|
|
86
|
+
* Remove all drafts older than `olderThanDays` days.
|
|
87
|
+
* Returns the number of drafts removed.
|
|
88
|
+
*/
|
|
89
|
+
export async function cleanupDrafts(olderThanDays) {
|
|
90
|
+
const draftsDir = getDraftsDir();
|
|
91
|
+
await ensureDir(draftsDir);
|
|
92
|
+
let entries;
|
|
93
|
+
try {
|
|
94
|
+
entries = await readdir(draftsDir);
|
|
95
|
+
}
|
|
96
|
+
catch {
|
|
97
|
+
return 0;
|
|
98
|
+
}
|
|
99
|
+
const cutoff = Date.now() - olderThanDays * 24 * 60 * 60 * 1000;
|
|
100
|
+
let removed = 0;
|
|
101
|
+
for (const file of entries.filter((f) => f.endsWith(".json"))) {
|
|
102
|
+
const filePath = join(draftsDir, file);
|
|
103
|
+
try {
|
|
104
|
+
const raw = await readFile(filePath, "utf-8");
|
|
105
|
+
const draft = JSON.parse(raw);
|
|
106
|
+
if (new Date(draft.updatedAt).getTime() < cutoff) {
|
|
107
|
+
await unlink(filePath);
|
|
108
|
+
removed++;
|
|
109
|
+
}
|
|
110
|
+
}
|
|
111
|
+
catch {
|
|
112
|
+
// skip files we can't parse — don't remove them either
|
|
113
|
+
}
|
|
114
|
+
}
|
|
115
|
+
return removed;
|
|
116
|
+
}
|
|
117
|
+
//# sourceMappingURL=drafts.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"drafts.js","sourceRoot":"","sources":["../../../src/storage/drafts.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,15 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Root directory for all PigeonGov local data.
|
|
3
|
+
* Respects `PIGEONGOV_HOME` env override; defaults to `~/.pigeongov/`.
|
|
4
|
+
*/
|
|
5
|
+
export declare const PIGEONGOV_HOME: string;
|
|
6
|
+
export declare function getDraftsDir(): string;
|
|
7
|
+
export declare function getVaultDir(): string;
|
|
8
|
+
export declare function getProfilePath(): string;
|
|
9
|
+
export declare function getConfigPath(): string;
|
|
10
|
+
export declare function getPluginsPath(): string;
|
|
11
|
+
export declare function getAuditLogPath(): string;
|
|
12
|
+
/**
|
|
13
|
+
* Recursively creates directory if it does not exist (mkdir -p).
|
|
14
|
+
*/
|
|
15
|
+
export declare function ensureDir(dirPath: string): Promise<void>;
|
|
@@ -0,0 +1,33 @@
|
|
|
1
|
+
import { homedir } from "node:os";
|
|
2
|
+
import { join } from "node:path";
|
|
3
|
+
import { mkdir } from "node:fs/promises";
|
|
4
|
+
/**
|
|
5
|
+
* Root directory for all PigeonGov local data.
|
|
6
|
+
* Respects `PIGEONGOV_HOME` env override; defaults to `~/.pigeongov/`.
|
|
7
|
+
*/
|
|
8
|
+
export const PIGEONGOV_HOME = process.env.PIGEONGOV_HOME ?? join(homedir(), ".pigeongov");
|
|
9
|
+
export function getDraftsDir() {
|
|
10
|
+
return join(PIGEONGOV_HOME, "drafts");
|
|
11
|
+
}
|
|
12
|
+
export function getVaultDir() {
|
|
13
|
+
return join(PIGEONGOV_HOME, "vault");
|
|
14
|
+
}
|
|
15
|
+
export function getProfilePath() {
|
|
16
|
+
return join(PIGEONGOV_HOME, "profile.json");
|
|
17
|
+
}
|
|
18
|
+
export function getConfigPath() {
|
|
19
|
+
return join(PIGEONGOV_HOME, "config.json");
|
|
20
|
+
}
|
|
21
|
+
export function getPluginsPath() {
|
|
22
|
+
return join(PIGEONGOV_HOME, "plugins.json");
|
|
23
|
+
}
|
|
24
|
+
export function getAuditLogPath() {
|
|
25
|
+
return join(PIGEONGOV_HOME, "audit.log");
|
|
26
|
+
}
|
|
27
|
+
/**
|
|
28
|
+
* Recursively creates directory if it does not exist (mkdir -p).
|
|
29
|
+
*/
|
|
30
|
+
export async function ensureDir(dirPath) {
|
|
31
|
+
await mkdir(dirPath, { recursive: true });
|
|
32
|
+
}
|
|
33
|
+
//# sourceMappingURL=paths.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"paths.js","sourceRoot":"","sources":["../../../src/storage/paths.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,OAAO,EAAE,MAAM,SAAS,CAAC;AAClC,OAAO,EAAE,IAAI,EAAE,MAAM,WAAW,CAAC;AACjC,OAAO,EAAE,KAAK,EAAE,MAAM,kBAAkB,CAAC;AAEzC;;;GAGG;AACH,MAAM,CAAC,MAAM,cAAc,GACzB,OAAO,CAAC,GAAG,CAAC,cAAc,IAAI,IAAI,CAAC,OAAO,EAAE,EAAE,YAAY,CAAC,CAAC;AAE9D,MAAM,UAAU,YAAY;IAC1B,OAAO,IAAI,CAAC,cAAc,EAAE,QAAQ,CAAC,CAAC;AACxC,CAAC;AAED,MAAM,UAAU,WAAW;IACzB,OAAO,IAAI,CAAC,cAAc,EAAE,OAAO,CAAC,CAAC;AACvC,CAAC;AAED,MAAM,UAAU,cAAc;IAC5B,OAAO,IAAI,CAAC,cAAc,EAAE,cAAc,CAAC,CAAC;AAC9C,CAAC;AAED,MAAM,UAAU,aAAa;IAC3B,OAAO,IAAI,CAAC,cAAc,EAAE,aAAa,CAAC,CAAC;AAC7C,CAAC;AAED,MAAM,UAAU,cAAc;IAC5B,OAAO,IAAI,CAAC,cAAc,EAAE,cAAc,CAAC,CAAC;AAC9C,CAAC;AAED,MAAM,UAAU,eAAe;IAC7B,OAAO,IAAI,CAAC,cAAc,EAAE,WAAW,CAAC,CAAC;AAC3C,CAAC;AAED;;GAEG;AACH,MAAM,CAAC,KAAK,UAAU,SAAS,CAAC,OAAe;IAC7C,MAAM,KAAK,CAAC,OAAO,EAAE,EAAE,SAAS,EAAE,IAAI,EAAE,CAAC,CAAC;AAC5C,CAAC"}
|
|
@@ -0,0 +1,17 @@
|
|
|
1
|
+
import type { HouseholdProfile } from "../types.js";
|
|
2
|
+
/**
|
|
3
|
+
* Load the household profile from disk.
|
|
4
|
+
* Returns null if the file does not exist or is malformed.
|
|
5
|
+
*/
|
|
6
|
+
export declare function loadProfile(): Promise<HouseholdProfile | null>;
|
|
7
|
+
/**
|
|
8
|
+
* Write the household profile to disk.
|
|
9
|
+
*/
|
|
10
|
+
export declare function saveProfile(profile: HouseholdProfile): Promise<void>;
|
|
11
|
+
/**
|
|
12
|
+
* Deep merge identity fields from a household profile into starter data.
|
|
13
|
+
*
|
|
14
|
+
* Only merges fields that exist in both the profile and the starter data schema:
|
|
15
|
+
* firstName, lastName, ssn, address (and address subfields).
|
|
16
|
+
*/
|
|
17
|
+
export declare function mergeProfileIntoStarterData(profile: HouseholdProfile, starterData: Record<string, unknown>): Record<string, unknown>;
|
|
@@ -0,0 +1,59 @@
|
|
|
1
|
+
import { readFile, writeFile } from "node:fs/promises";
|
|
2
|
+
import { getProfilePath, ensureDir, PIGEONGOV_HOME } from "./paths.js";
|
|
3
|
+
/**
|
|
4
|
+
* Load the household profile from disk.
|
|
5
|
+
* Returns null if the file does not exist or is malformed.
|
|
6
|
+
*/
|
|
7
|
+
export async function loadProfile() {
|
|
8
|
+
try {
|
|
9
|
+
const raw = await readFile(getProfilePath(), "utf-8");
|
|
10
|
+
return JSON.parse(raw);
|
|
11
|
+
}
|
|
12
|
+
catch {
|
|
13
|
+
return null;
|
|
14
|
+
}
|
|
15
|
+
}
|
|
16
|
+
/**
|
|
17
|
+
* Write the household profile to disk.
|
|
18
|
+
*/
|
|
19
|
+
export async function saveProfile(profile) {
|
|
20
|
+
await ensureDir(PIGEONGOV_HOME);
|
|
21
|
+
await writeFile(getProfilePath(), JSON.stringify(profile, null, 2), "utf-8");
|
|
22
|
+
}
|
|
23
|
+
/**
|
|
24
|
+
* Deep merge identity fields from a household profile into starter data.
|
|
25
|
+
*
|
|
26
|
+
* Only merges fields that exist in both the profile and the starter data schema:
|
|
27
|
+
* firstName, lastName, ssn, address (and address subfields).
|
|
28
|
+
*/
|
|
29
|
+
export function mergeProfileIntoStarterData(profile, starterData) {
|
|
30
|
+
const result = structuredClone(starterData);
|
|
31
|
+
// Find the primary person (relationship: "self")
|
|
32
|
+
const primary = profile.people.find((p) => p.relationship === "self") ?? profile.people[0];
|
|
33
|
+
if (!primary)
|
|
34
|
+
return result;
|
|
35
|
+
// Merge top-level identity fields only if they exist in starter data
|
|
36
|
+
const identityFields = ["firstName", "lastName", "ssn"];
|
|
37
|
+
for (const field of identityFields) {
|
|
38
|
+
if (field in result && primary[field] !== undefined) {
|
|
39
|
+
result[field] = primary[field];
|
|
40
|
+
}
|
|
41
|
+
}
|
|
42
|
+
// Merge address fields
|
|
43
|
+
if ("address" in result && typeof result.address === "object" && result.address !== null) {
|
|
44
|
+
const addrTarget = result.address;
|
|
45
|
+
const addrSource = profile.address;
|
|
46
|
+
const addressFields = ["street1", "street2", "city", "state", "zipCode"];
|
|
47
|
+
for (const field of addressFields) {
|
|
48
|
+
if (field in addrTarget && addrSource[field] !== undefined) {
|
|
49
|
+
addrTarget[field] = addrSource[field];
|
|
50
|
+
}
|
|
51
|
+
}
|
|
52
|
+
}
|
|
53
|
+
else if ("address" in result) {
|
|
54
|
+
// starter data has address as a key but it's null/undefined — set the whole object
|
|
55
|
+
result.address = structuredClone(profile.address);
|
|
56
|
+
}
|
|
57
|
+
return result;
|
|
58
|
+
}
|
|
59
|
+
//# sourceMappingURL=profile.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"profile.js","sourceRoot":"","sources":["../../../src/storage/profile.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,QAAQ,EAAE,SAAS,EAAE,MAAM,kBAAkB,CAAC;AAGvD,OAAO,EAAE,cAAc,EAAE,SAAS,EAAE,cAAc,EAAE,MAAM,YAAY,CAAC;AAEvE;;;GAGG;AACH,MAAM,CAAC,KAAK,UAAU,WAAW;IAC/B,IAAI,CAAC;QACH,MAAM,GAAG,GAAG,MAAM,QAAQ,CAAC,cAAc,EAAE,EAAE,OAAO,CAAC,CAAC;QACtD,OAAO,IAAI,CAAC,KAAK,CAAC,GAAG,CAAqB,CAAC;IAC7C,CAAC;IAAC,MAAM,CAAC;QACP,OAAO,IAAI,CAAC;IACd,CAAC;AACH,CAAC;AAED;;GAEG;AACH,MAAM,CAAC,KAAK,UAAU,WAAW,CAAC,OAAyB;IACzD,MAAM,SAAS,CAAC,cAAc,CAAC,CAAC;IAChC,MAAM,SAAS,CAAC,cAAc,EAAE,EAAE,IAAI,CAAC,SAAS,CAAC,OAAO,EAAE,IAAI,EAAE,CAAC,CAAC,EAAE,OAAO,CAAC,CAAC;AAC/E,CAAC;AAED;;;;;GAKG;AACH,MAAM,UAAU,2BAA2B,CACzC,OAAyB,EACzB,WAAoC;IAEpC,MAAM,MAAM,GAAG,eAAe,CAAC,WAAW,CAAC,CAAC;IAE5C,iDAAiD;IACjD,MAAM,OAAO,GAAG,OAAO,CAAC,MAAM,CAAC,IAAI,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,YAAY,KAAK,MAAM,CAAC,IAAI,OAAO,CAAC,MAAM,CAAC,CAAC,CAAC,CAAC;IAC3F,IAAI,CAAC,OAAO;QAAE,OAAO,MAAM,CAAC;IAE5B,qEAAqE;IACrE,MAAM,cAAc,GAA8B,CAAC,WAAW,EAAE,UAAU,EAAE,KAAK,CAAC,CAAC;IACnF,KAAK,MAAM,KAAK,IAAI,cAAc,EAAE,CAAC;QACnC,IAAI,KAAK,IAAI,MAAM,IAAI,OAAO,CAAC,KAAK,CAAC,KAAK,SAAS,EAAE,CAAC;YACpD,MAAM,CAAC,KAAK,CAAC,GAAG,OAAO,CAAC,KAAK,CAAC,CAAC;QACjC,CAAC;IACH,CAAC;IAED,uBAAuB;IACvB,IAAI,SAAS,IAAI,MAAM,IAAI,OAAO,MAAM,CAAC,OAAO,KAAK,QAAQ,IAAI,MAAM,CAAC,OAAO,KAAK,IAAI,EAAE,CAAC;QACzF,MAAM,UAAU,GAAG,MAAM,CAAC,OAAkC,CAAC;QAC7D,MAAM,UAAU,GAAG,OAAO,CAAC,OAAO,CAAC;QAEnC,MAAM,aAAa,GAAG,CAAC,SAAS,EAAE,SAAS,EAAE,MAAM,EAAE,OAAO,EAAE,SAAS,CAAU,CAAC;QAClF,KAAK,MAAM,KAAK,IAAI,aAAa,EAAE,CAAC;YAClC,IAAI,KAAK,IAAI,UAAU,IAAI,UAAU,CAAC,KAAK,CAAC,KAAK,SAAS,EAAE,CAAC;gBAC3D,UAAU,CAAC,KAAK,CAAC,GAAG,UAAU,CAAC,KAAK,CAAC,CAAC;YACxC,CAAC;QACH,CAAC;IACH,CAAC;SAAM,IAAI,SAAS,IAAI,MAAM,EAAE,CAAC;QAC/B,mFAAmF;QACnF,MAAM,CAAC,OAAO,GAAG,eAAe,CAAC,OAAO,CAAC,OAAO,CAAC,CAAC;IACpD,CAAC;IAED,OAAO,MAAM,CAAC;AAChB,CAAC"}
|
|
@@ -0,0 +1,38 @@
|
|
|
1
|
+
import type { VaultEntry } from "../types.js";
|
|
2
|
+
/**
|
|
3
|
+
* Derive a 256-bit key from a passphrase and salt using PBKDF2.
|
|
4
|
+
*/
|
|
5
|
+
export declare function deriveKey(passphrase: string, salt: Buffer): Buffer;
|
|
6
|
+
/**
|
|
7
|
+
* Encrypt data with AES-256-GCM.
|
|
8
|
+
*/
|
|
9
|
+
export declare function encrypt(data: Buffer, key: Buffer): {
|
|
10
|
+
iv: Buffer;
|
|
11
|
+
authTag: Buffer;
|
|
12
|
+
encrypted: Buffer;
|
|
13
|
+
};
|
|
14
|
+
/**
|
|
15
|
+
* Decrypt AES-256-GCM ciphertext.
|
|
16
|
+
*/
|
|
17
|
+
export declare function decrypt(encrypted: Buffer, key: Buffer, iv: Buffer, authTag: Buffer): Buffer;
|
|
18
|
+
/**
|
|
19
|
+
* Initialize the vault: create the salt file and return the derived key.
|
|
20
|
+
* Idempotent — safe to call when vault already exists.
|
|
21
|
+
*/
|
|
22
|
+
export declare function initVault(passphrase: string): Promise<Buffer>;
|
|
23
|
+
/**
|
|
24
|
+
* Encrypt a file and add it to the vault.
|
|
25
|
+
*/
|
|
26
|
+
export declare function addToVault(passphrase: string, filePath: string, label: string, tags: string[]): Promise<VaultEntry>;
|
|
27
|
+
/**
|
|
28
|
+
* List all vault entries (requires passphrase to decrypt the index).
|
|
29
|
+
*/
|
|
30
|
+
export declare function listVault(passphrase: string): Promise<VaultEntry[]>;
|
|
31
|
+
/**
|
|
32
|
+
* Decrypt a vault entry to a file on disk.
|
|
33
|
+
*/
|
|
34
|
+
export declare function getFromVault(passphrase: string, id: string, outputPath: string): Promise<void>;
|
|
35
|
+
/**
|
|
36
|
+
* Link a vault document to a workflow.
|
|
37
|
+
*/
|
|
38
|
+
export declare function linkToWorkflow(passphrase: string, docId: string, workflowId: string): Promise<void>;
|