attio-mcp 0.1.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/CHANGELOG.md +62 -0
- package/LICENSE +236 -0
- package/README.md +105 -0
- package/dist/api/attio-client.d.ts +25 -0
- package/dist/api/attio-client.d.ts.map +1 -0
- package/dist/api/attio-client.js +64 -0
- package/dist/api/attio-client.js.map +1 -0
- package/dist/api/attribute-types.d.ts +119 -0
- package/dist/api/attribute-types.d.ts.map +1 -0
- package/dist/api/attribute-types.js +320 -0
- package/dist/api/attribute-types.js.map +1 -0
- package/dist/api/client.d.ts +3 -0
- package/dist/api/client.d.ts.map +1 -0
- package/dist/api/client.js +61 -0
- package/dist/api/client.js.map +1 -0
- package/dist/api/operations/batch.d.ts +55 -0
- package/dist/api/operations/batch.d.ts.map +1 -0
- package/dist/api/operations/batch.js +176 -0
- package/dist/api/operations/batch.js.map +1 -0
- package/dist/api/operations/crud.d.ts +61 -0
- package/dist/api/operations/crud.d.ts.map +1 -0
- package/dist/api/operations/crud.js +192 -0
- package/dist/api/operations/crud.js.map +1 -0
- package/dist/api/operations/index.d.ts +14 -0
- package/dist/api/operations/index.d.ts.map +1 -0
- package/dist/api/operations/index.js +18 -0
- package/dist/api/operations/index.js.map +1 -0
- package/dist/api/operations/lists.d.ts +66 -0
- package/dist/api/operations/lists.d.ts.map +1 -0
- package/dist/api/operations/lists.js +300 -0
- package/dist/api/operations/lists.js.map +1 -0
- package/dist/api/operations/notes.d.ts +29 -0
- package/dist/api/operations/notes.d.ts.map +1 -0
- package/dist/api/operations/notes.js +63 -0
- package/dist/api/operations/notes.js.map +1 -0
- package/dist/api/operations/retry.d.ts +48 -0
- package/dist/api/operations/retry.d.ts.map +1 -0
- package/dist/api/operations/retry.js +98 -0
- package/dist/api/operations/retry.js.map +1 -0
- package/dist/api/operations/search.d.ts +37 -0
- package/dist/api/operations/search.d.ts.map +1 -0
- package/dist/api/operations/search.js +186 -0
- package/dist/api/operations/search.js.map +1 -0
- package/dist/api/operations/tasks.d.ts +20 -0
- package/dist/api/operations/tasks.d.ts.map +1 -0
- package/dist/api/operations/tasks.js +87 -0
- package/dist/api/operations/tasks.js.map +1 -0
- package/dist/api/operations/types.d.ts +61 -0
- package/dist/api/operations/types.d.ts.map +1 -0
- package/dist/api/operations/types.js +10 -0
- package/dist/api/operations/types.js.map +1 -0
- package/dist/cli/commands/attributes.d.ts +34 -0
- package/dist/cli/commands/attributes.d.ts.map +1 -0
- package/dist/cli/commands/attributes.js +171 -0
- package/dist/cli/commands/attributes.js.map +1 -0
- package/dist/cli/discover.d.ts +3 -0
- package/dist/cli/discover.d.ts.map +1 -0
- package/dist/cli/discover.js +72 -0
- package/dist/cli/discover.js.map +1 -0
- package/dist/errors/api-errors.d.ts +191 -0
- package/dist/errors/api-errors.d.ts.map +1 -0
- package/dist/errors/api-errors.js +305 -0
- package/dist/errors/api-errors.js.map +1 -0
- package/dist/errors/company-errors.d.ts +40 -0
- package/dist/errors/company-errors.d.ts.map +1 -0
- package/dist/errors/company-errors.js +62 -0
- package/dist/errors/company-errors.js.map +1 -0
- package/dist/errors/value-match-error.d.ts +15 -0
- package/dist/errors/value-match-error.d.ts.map +1 -0
- package/dist/errors/value-match-error.js +40 -0
- package/dist/errors/value-match-error.js.map +1 -0
- package/dist/handlers/error-interceptor.d.ts +6 -0
- package/dist/handlers/error-interceptor.d.ts.map +1 -0
- package/dist/handlers/error-interceptor.js +17 -0
- package/dist/handlers/error-interceptor.js.map +1 -0
- package/dist/handlers/rate-limited-handler.d.ts +17 -0
- package/dist/handlers/rate-limited-handler.d.ts.map +1 -0
- package/dist/handlers/rate-limited-handler.js +126 -0
- package/dist/handlers/rate-limited-handler.js.map +1 -0
- package/dist/handlers/resources.d.ts +11 -0
- package/dist/handlers/resources.d.ts.map +1 -0
- package/dist/handlers/resources.js +109 -0
- package/dist/handlers/resources.js.map +1 -0
- package/dist/handlers/tool-configs/companies/attributes.d.ts +85 -0
- package/dist/handlers/tool-configs/companies/attributes.d.ts.map +1 -0
- package/dist/handlers/tool-configs/companies/attributes.js +203 -0
- package/dist/handlers/tool-configs/companies/attributes.js.map +1 -0
- package/dist/handlers/tool-configs/companies/batch.d.ts +145 -0
- package/dist/handlers/tool-configs/companies/batch.d.ts.map +1 -0
- package/dist/handlers/tool-configs/companies/batch.js +249 -0
- package/dist/handlers/tool-configs/companies/batch.js.map +1 -0
- package/dist/handlers/tool-configs/companies/crud.d.ts +103 -0
- package/dist/handlers/tool-configs/companies/crud.d.ts.map +1 -0
- package/dist/handlers/tool-configs/companies/crud.js +157 -0
- package/dist/handlers/tool-configs/companies/crud.js.map +1 -0
- package/dist/handlers/tool-configs/companies/definitions.d.ts +5 -0
- package/dist/handlers/tool-configs/companies/definitions.d.ts.map +1 -0
- package/dist/handlers/tool-configs/companies/definitions.js +9 -0
- package/dist/handlers/tool-configs/companies/definitions.js.map +1 -0
- package/dist/handlers/tool-configs/companies/formatters.d.ts +42 -0
- package/dist/handlers/tool-configs/companies/formatters.d.ts.map +1 -0
- package/dist/handlers/tool-configs/companies/formatters.js +324 -0
- package/dist/handlers/tool-configs/companies/formatters.js.map +1 -0
- package/dist/handlers/tool-configs/companies/index.d.ts +642 -0
- package/dist/handlers/tool-configs/companies/index.d.ts.map +1 -0
- package/dist/handlers/tool-configs/companies/index.js +86 -0
- package/dist/handlers/tool-configs/companies/index.js.map +1 -0
- package/dist/handlers/tool-configs/companies/notes.d.ts +61 -0
- package/dist/handlers/tool-configs/companies/notes.d.ts.map +1 -0
- package/dist/handlers/tool-configs/companies/notes.js +109 -0
- package/dist/handlers/tool-configs/companies/notes.js.map +1 -0
- package/dist/handlers/tool-configs/companies/relationships.d.ts +137 -0
- package/dist/handlers/tool-configs/companies/relationships.d.ts.map +1 -0
- package/dist/handlers/tool-configs/companies/relationships.js +163 -0
- package/dist/handlers/tool-configs/companies/relationships.js.map +1 -0
- package/dist/handlers/tool-configs/companies/search.d.ts +101 -0
- package/dist/handlers/tool-configs/companies/search.d.ts.map +1 -0
- package/dist/handlers/tool-configs/companies/search.js +163 -0
- package/dist/handlers/tool-configs/companies/search.js.map +1 -0
- package/dist/handlers/tool-configs/companies/types.d.ts +6 -0
- package/dist/handlers/tool-configs/companies/types.d.ts.map +1 -0
- package/dist/handlers/tool-configs/companies/types.js +2 -0
- package/dist/handlers/tool-configs/companies/types.js.map +1 -0
- package/dist/handlers/tool-configs/index.d.ts +12 -0
- package/dist/handlers/tool-configs/index.d.ts.map +1 -0
- package/dist/handlers/tool-configs/index.js +12 -0
- package/dist/handlers/tool-configs/index.js.map +1 -0
- package/dist/handlers/tool-configs/lists.d.ts +459 -0
- package/dist/handlers/tool-configs/lists.d.ts.map +1 -0
- package/dist/handlers/tool-configs/lists.js +597 -0
- package/dist/handlers/tool-configs/lists.js.map +1 -0
- package/dist/handlers/tool-configs/paginated-people.d.ts +197 -0
- package/dist/handlers/tool-configs/paginated-people.d.ts.map +1 -0
- package/dist/handlers/tool-configs/paginated-people.js +256 -0
- package/dist/handlers/tool-configs/paginated-people.js.map +1 -0
- package/dist/handlers/tool-configs/people/activity-search.d.ts +98 -0
- package/dist/handlers/tool-configs/people/activity-search.d.ts.map +1 -0
- package/dist/handlers/tool-configs/people/activity-search.js +113 -0
- package/dist/handlers/tool-configs/people/activity-search.js.map +1 -0
- package/dist/handlers/tool-configs/people/advanced-search.d.ts +62 -0
- package/dist/handlers/tool-configs/people/advanced-search.d.ts.map +1 -0
- package/dist/handlers/tool-configs/people/advanced-search.js +74 -0
- package/dist/handlers/tool-configs/people/advanced-search.js.map +1 -0
- package/dist/handlers/tool-configs/people/crud.d.ts +63 -0
- package/dist/handlers/tool-configs/people/crud.d.ts.map +1 -0
- package/dist/handlers/tool-configs/people/crud.js +71 -0
- package/dist/handlers/tool-configs/people/crud.js.map +1 -0
- package/dist/handlers/tool-configs/people/date-search.d.ts +42 -0
- package/dist/handlers/tool-configs/people/date-search.d.ts.map +1 -0
- package/dist/handlers/tool-configs/people/date-search.js +93 -0
- package/dist/handlers/tool-configs/people/date-search.js.map +1 -0
- package/dist/handlers/tool-configs/people/formatters.d.ts +19 -0
- package/dist/handlers/tool-configs/people/formatters.d.ts.map +1 -0
- package/dist/handlers/tool-configs/people/formatters.js +98 -0
- package/dist/handlers/tool-configs/people/formatters.js.map +1 -0
- package/dist/handlers/tool-configs/people/index.d.ts +407 -0
- package/dist/handlers/tool-configs/people/index.d.ts.map +1 -0
- package/dist/handlers/tool-configs/people/index.js +30 -0
- package/dist/handlers/tool-configs/people/index.js.map +1 -0
- package/dist/handlers/tool-configs/people/notes.d.ts +38 -0
- package/dist/handlers/tool-configs/people/notes.d.ts.map +1 -0
- package/dist/handlers/tool-configs/people/notes.js +57 -0
- package/dist/handlers/tool-configs/people/notes.js.map +1 -0
- package/dist/handlers/tool-configs/people/relationships.d.ts +112 -0
- package/dist/handlers/tool-configs/people/relationships.d.ts.map +1 -0
- package/dist/handlers/tool-configs/people/relationships.js +173 -0
- package/dist/handlers/tool-configs/people/relationships.js.map +1 -0
- package/dist/handlers/tool-configs/people/search.d.ts +53 -0
- package/dist/handlers/tool-configs/people/search.d.ts.map +1 -0
- package/dist/handlers/tool-configs/people/search.js +61 -0
- package/dist/handlers/tool-configs/people/search.js.map +1 -0
- package/dist/handlers/tool-configs/people-fix-complete.d.ts +6 -0
- package/dist/handlers/tool-configs/people-fix-complete.d.ts.map +1 -0
- package/dist/handlers/tool-configs/people-fix-complete.js +76 -0
- package/dist/handlers/tool-configs/people-fix-complete.js.map +1 -0
- package/dist/handlers/tool-configs/people-fixed.d.ts +12 -0
- package/dist/handlers/tool-configs/people-fixed.d.ts.map +1 -0
- package/dist/handlers/tool-configs/people-fixed.js +58 -0
- package/dist/handlers/tool-configs/people-fixed.js.map +1 -0
- package/dist/handlers/tool-configs/people-types.d.ts +32 -0
- package/dist/handlers/tool-configs/people-types.d.ts.map +1 -0
- package/dist/handlers/tool-configs/people-types.js +5 -0
- package/dist/handlers/tool-configs/people-types.js.map +1 -0
- package/dist/handlers/tool-configs/people.d.ts +599 -0
- package/dist/handlers/tool-configs/people.d.ts.map +1 -0
- package/dist/handlers/tool-configs/people.js +817 -0
- package/dist/handlers/tool-configs/people.js.map +1 -0
- package/dist/handlers/tool-configs/prompts.d.ts +69 -0
- package/dist/handlers/tool-configs/prompts.d.ts.map +1 -0
- package/dist/handlers/tool-configs/prompts.js +90 -0
- package/dist/handlers/tool-configs/prompts.js.map +1 -0
- package/dist/handlers/tool-configs/rate-limited-people.d.ts +203 -0
- package/dist/handlers/tool-configs/rate-limited-people.d.ts.map +1 -0
- package/dist/handlers/tool-configs/rate-limited-people.js +44 -0
- package/dist/handlers/tool-configs/rate-limited-people.js.map +1 -0
- package/dist/handlers/tool-configs/records/index.d.ts +282 -0
- package/dist/handlers/tool-configs/records/index.d.ts.map +1 -0
- package/dist/handlers/tool-configs/records/index.js +277 -0
- package/dist/handlers/tool-configs/records/index.js.map +1 -0
- package/dist/handlers/tool-configs/records.d.ts +282 -0
- package/dist/handlers/tool-configs/records.d.ts.map +1 -0
- package/dist/handlers/tool-configs/records.js +277 -0
- package/dist/handlers/tool-configs/records.js.map +1 -0
- package/dist/handlers/tool-configs/resource-specific-tools.d.ts +15 -0
- package/dist/handlers/tool-configs/resource-specific-tools.d.ts.map +1 -0
- package/dist/handlers/tool-configs/resource-specific-tools.js +33 -0
- package/dist/handlers/tool-configs/resource-specific-tools.js.map +1 -0
- package/dist/handlers/tool-configs/tasks.d.ts +127 -0
- package/dist/handlers/tool-configs/tasks.d.ts.map +1 -0
- package/dist/handlers/tool-configs/tasks.js +95 -0
- package/dist/handlers/tool-configs/tasks.js.map +1 -0
- package/dist/handlers/tool-types.d.ts +47 -0
- package/dist/handlers/tool-types.d.ts.map +1 -0
- package/dist/handlers/tool-types.js +2 -0
- package/dist/handlers/tool-types.js.map +1 -0
- package/dist/handlers/tools/config-verifier.d.ts +27 -0
- package/dist/handlers/tools/config-verifier.d.ts.map +1 -0
- package/dist/handlers/tools/config-verifier.js +108 -0
- package/dist/handlers/tools/config-verifier.js.map +1 -0
- package/dist/handlers/tools/dispatcher/core.d.ts +12 -0
- package/dist/handlers/tools/dispatcher/core.d.ts.map +1 -0
- package/dist/handlers/tools/dispatcher/core.js +276 -0
- package/dist/handlers/tools/dispatcher/core.js.map +1 -0
- package/dist/handlers/tools/dispatcher/formatting.d.ts +17 -0
- package/dist/handlers/tools/dispatcher/formatting.d.ts.map +1 -0
- package/dist/handlers/tools/dispatcher/formatting.js +25 -0
- package/dist/handlers/tools/dispatcher/formatting.js.map +1 -0
- package/dist/handlers/tools/dispatcher/logging.d.ts +63 -0
- package/dist/handlers/tools/dispatcher/logging.d.ts.map +1 -0
- package/dist/handlers/tools/dispatcher/logging.js +108 -0
- package/dist/handlers/tools/dispatcher/logging.js.map +1 -0
- package/dist/handlers/tools/dispatcher/operations/batch.d.ts +29 -0
- package/dist/handlers/tools/dispatcher/operations/batch.d.ts.map +1 -0
- package/dist/handlers/tools/dispatcher/operations/batch.js +137 -0
- package/dist/handlers/tools/dispatcher/operations/batch.js.map +1 -0
- package/dist/handlers/tools/dispatcher/operations/crud.d.ts +25 -0
- package/dist/handlers/tools/dispatcher/operations/crud.d.ts.map +1 -0
- package/dist/handlers/tools/dispatcher/operations/crud.js +110 -0
- package/dist/handlers/tools/dispatcher/operations/crud.js.map +1 -0
- package/dist/handlers/tools/dispatcher/operations/details.d.ts +13 -0
- package/dist/handlers/tools/dispatcher/operations/details.d.ts.map +1 -0
- package/dist/handlers/tools/dispatcher/operations/details.js +52 -0
- package/dist/handlers/tools/dispatcher/operations/details.js.map +1 -0
- package/dist/handlers/tools/dispatcher/operations/info.d.ts +25 -0
- package/dist/handlers/tools/dispatcher/operations/info.d.ts.map +1 -0
- package/dist/handlers/tools/dispatcher/operations/info.js +82 -0
- package/dist/handlers/tools/dispatcher/operations/info.js.map +1 -0
- package/dist/handlers/tools/dispatcher/operations/lists.d.ts +62 -0
- package/dist/handlers/tools/dispatcher/operations/lists.d.ts.map +1 -0
- package/dist/handlers/tools/dispatcher/operations/lists.js +283 -0
- package/dist/handlers/tools/dispatcher/operations/lists.js.map +1 -0
- package/dist/handlers/tools/dispatcher/operations/notes.d.ts +17 -0
- package/dist/handlers/tools/dispatcher/operations/notes.d.ts.map +1 -0
- package/dist/handlers/tools/dispatcher/operations/notes.js +102 -0
- package/dist/handlers/tools/dispatcher/operations/notes.js.map +1 -0
- package/dist/handlers/tools/dispatcher/operations/search.d.ts +43 -0
- package/dist/handlers/tools/dispatcher/operations/search.d.ts.map +1 -0
- package/dist/handlers/tools/dispatcher/operations/search.js +190 -0
- package/dist/handlers/tools/dispatcher/operations/search.js.map +1 -0
- package/dist/handlers/tools/dispatcher/validation.d.ts +27 -0
- package/dist/handlers/tools/dispatcher/validation.d.ts.map +1 -0
- package/dist/handlers/tools/dispatcher/validation.js +47 -0
- package/dist/handlers/tools/dispatcher/validation.js.map +1 -0
- package/dist/handlers/tools/dispatcher.d.ts +11 -0
- package/dist/handlers/tools/dispatcher.d.ts.map +1 -0
- package/dist/handlers/tools/dispatcher.js +15 -0
- package/dist/handlers/tools/dispatcher.js.map +1 -0
- package/dist/handlers/tools/error-types.d.ts +33 -0
- package/dist/handlers/tools/error-types.d.ts.map +1 -0
- package/dist/handlers/tools/error-types.js +21 -0
- package/dist/handlers/tools/error-types.js.map +1 -0
- package/dist/handlers/tools/formatters.d.ts +43 -0
- package/dist/handlers/tools/formatters.d.ts.map +1 -0
- package/dist/handlers/tools/formatters.js +170 -0
- package/dist/handlers/tools/formatters.js.map +1 -0
- package/dist/handlers/tools/index.d.ts +15 -0
- package/dist/handlers/tools/index.d.ts.map +1 -0
- package/dist/handlers/tools/index.js +34 -0
- package/dist/handlers/tools/index.js.map +1 -0
- package/dist/handlers/tools/registry.d.ts +1874 -0
- package/dist/handlers/tools/registry.d.ts.map +1 -0
- package/dist/handlers/tools/registry.js +103 -0
- package/dist/handlers/tools/registry.js.map +1 -0
- package/dist/health/http-server.d.ts +24 -0
- package/dist/health/http-server.d.ts.map +1 -0
- package/dist/health/http-server.js +106 -0
- package/dist/health/http-server.js.map +1 -0
- package/dist/index.d.ts +3 -0
- package/dist/index.d.ts.map +1 -0
- package/dist/index.js +238 -0
- package/dist/index.js.map +1 -0
- package/dist/objects/base-operations.d.ts +41 -0
- package/dist/objects/base-operations.d.ts.map +1 -0
- package/dist/objects/base-operations.js +116 -0
- package/dist/objects/base-operations.js.map +1 -0
- package/dist/objects/batch-companies.d.ts +112 -0
- package/dist/objects/batch-companies.d.ts.map +1 -0
- package/dist/objects/batch-companies.js +347 -0
- package/dist/objects/batch-companies.js.map +1 -0
- package/dist/objects/companies/attributes.d.ts +83 -0
- package/dist/objects/companies/attributes.d.ts.map +1 -0
- package/dist/objects/companies/attributes.js +426 -0
- package/dist/objects/companies/attributes.js.map +1 -0
- package/dist/objects/companies/basic.d.ts +117 -0
- package/dist/objects/companies/basic.d.ts.map +1 -0
- package/dist/objects/companies/basic.js +367 -0
- package/dist/objects/companies/basic.js.map +1 -0
- package/dist/objects/companies/batch.d.ts +6 -0
- package/dist/objects/companies/batch.d.ts.map +1 -0
- package/dist/objects/companies/batch.js +6 -0
- package/dist/objects/companies/batch.js.map +1 -0
- package/dist/objects/companies/index.d.ts +13 -0
- package/dist/objects/companies/index.d.ts.map +1 -0
- package/dist/objects/companies/index.js +17 -0
- package/dist/objects/companies/index.js.map +1 -0
- package/dist/objects/companies/notes.d.ts +26 -0
- package/dist/objects/companies/notes.d.ts.map +1 -0
- package/dist/objects/companies/notes.js +199 -0
- package/dist/objects/companies/notes.js.map +1 -0
- package/dist/objects/companies/relationships.d.ts +41 -0
- package/dist/objects/companies/relationships.d.ts.map +1 -0
- package/dist/objects/companies/relationships.js +142 -0
- package/dist/objects/companies/relationships.js.map +1 -0
- package/dist/objects/companies/search.d.ts +158 -0
- package/dist/objects/companies/search.d.ts.map +1 -0
- package/dist/objects/companies/search.js +463 -0
- package/dist/objects/companies/search.js.map +1 -0
- package/dist/objects/companies/types.d.ts +27 -0
- package/dist/objects/companies/types.d.ts.map +1 -0
- package/dist/objects/companies/types.js +3 -0
- package/dist/objects/companies/types.js.map +1 -0
- package/dist/objects/lists.d.ts +148 -0
- package/dist/objects/lists.d.ts.map +1 -0
- package/dist/objects/lists.js +586 -0
- package/dist/objects/lists.js.map +1 -0
- package/dist/objects/paginated-people.d.ts +50 -0
- package/dist/objects/paginated-people.d.ts.map +1 -0
- package/dist/objects/paginated-people.js +171 -0
- package/dist/objects/paginated-people.js.map +1 -0
- package/dist/objects/people/basic.d.ts +90 -0
- package/dist/objects/people/basic.d.ts.map +1 -0
- package/dist/objects/people/basic.js +157 -0
- package/dist/objects/people/basic.js.map +1 -0
- package/dist/objects/people/batch.d.ts +24 -0
- package/dist/objects/people/batch.d.ts.map +1 -0
- package/dist/objects/people/batch.js +145 -0
- package/dist/objects/people/batch.js.map +1 -0
- package/dist/objects/people/index.d.ts +11 -0
- package/dist/objects/people/index.d.ts.map +1 -0
- package/dist/objects/people/index.js +17 -0
- package/dist/objects/people/index.js.map +1 -0
- package/dist/objects/people/notes.d.ts +20 -0
- package/dist/objects/people/notes.d.ts.map +1 -0
- package/dist/objects/people/notes.js +60 -0
- package/dist/objects/people/notes.js.map +1 -0
- package/dist/objects/people/relationships.d.ts +23 -0
- package/dist/objects/people/relationships.d.ts.map +1 -0
- package/dist/objects/people/relationships.js +116 -0
- package/dist/objects/people/relationships.js.map +1 -0
- package/dist/objects/people/search.d.ts +83 -0
- package/dist/objects/people/search.d.ts.map +1 -0
- package/dist/objects/people/search.js +286 -0
- package/dist/objects/people/search.js.map +1 -0
- package/dist/objects/people/types.d.ts +37 -0
- package/dist/objects/people/types.d.ts.map +1 -0
- package/dist/objects/people/types.js +71 -0
- package/dist/objects/people/types.js.map +1 -0
- package/dist/objects/people-write.d.ts +71 -0
- package/dist/objects/people-write.d.ts.map +1 -0
- package/dist/objects/people-write.js +261 -0
- package/dist/objects/people-write.js.map +1 -0
- package/dist/objects/records/formatters.d.ts +20 -0
- package/dist/objects/records/formatters.d.ts.map +1 -0
- package/dist/objects/records/formatters.js +47 -0
- package/dist/objects/records/formatters.js.map +1 -0
- package/dist/objects/records/index.d.ts +74 -0
- package/dist/objects/records/index.d.ts.map +1 -0
- package/dist/objects/records/index.js +374 -0
- package/dist/objects/records/index.js.map +1 -0
- package/dist/objects/records.d.ts +88 -0
- package/dist/objects/records.d.ts.map +1 -0
- package/dist/objects/records.js +432 -0
- package/dist/objects/records.js.map +1 -0
- package/dist/objects/tasks.d.ts +19 -0
- package/dist/objects/tasks.d.ts.map +1 -0
- package/dist/objects/tasks.js +23 -0
- package/dist/objects/tasks.js.map +1 -0
- package/dist/prompts/error-handler.d.ts +28 -0
- package/dist/prompts/error-handler.d.ts.map +1 -0
- package/dist/prompts/error-handler.js +47 -0
- package/dist/prompts/error-handler.js.map +1 -0
- package/dist/prompts/handlers.d.ts +49 -0
- package/dist/prompts/handlers.d.ts.map +1 -0
- package/dist/prompts/handlers.js +353 -0
- package/dist/prompts/handlers.js.map +1 -0
- package/dist/prompts/index.d.ts +11 -0
- package/dist/prompts/index.d.ts.map +1 -0
- package/dist/prompts/index.js +15 -0
- package/dist/prompts/index.js.map +1 -0
- package/dist/prompts/templates/companies.d.ts +10 -0
- package/dist/prompts/templates/companies.d.ts.map +1 -0
- package/dist/prompts/templates/companies.js +128 -0
- package/dist/prompts/templates/companies.js.map +1 -0
- package/dist/prompts/templates/index.d.ts +42 -0
- package/dist/prompts/templates/index.d.ts.map +1 -0
- package/dist/prompts/templates/index.js +58 -0
- package/dist/prompts/templates/index.js.map +1 -0
- package/dist/prompts/templates/lists.d.ts +10 -0
- package/dist/prompts/templates/lists.d.ts.map +1 -0
- package/dist/prompts/templates/lists.js +127 -0
- package/dist/prompts/templates/lists.js.map +1 -0
- package/dist/prompts/templates/notes.d.ts +10 -0
- package/dist/prompts/templates/notes.d.ts.map +1 -0
- package/dist/prompts/templates/notes.js +119 -0
- package/dist/prompts/templates/notes.js.map +1 -0
- package/dist/prompts/templates/people.d.ts +10 -0
- package/dist/prompts/templates/people.d.ts.map +1 -0
- package/dist/prompts/templates/people.js +127 -0
- package/dist/prompts/templates/people.js.map +1 -0
- package/dist/prompts/types.d.ts +52 -0
- package/dist/prompts/types.d.ts.map +1 -0
- package/dist/prompts/types.js +5 -0
- package/dist/prompts/types.js.map +1 -0
- package/dist/types/attio.d.ts +424 -0
- package/dist/types/attio.d.ts.map +1 -0
- package/dist/types/attio.js +116 -0
- package/dist/types/attio.js.map +1 -0
- package/dist/types/company-types.d.ts +52 -0
- package/dist/types/company-types.d.ts.map +1 -0
- package/dist/types/company-types.js +5 -0
- package/dist/types/company-types.js.map +1 -0
- package/dist/types/tool-types.d.ts +262 -0
- package/dist/types/tool-types.d.ts.map +1 -0
- package/dist/types/tool-types.js +6 -0
- package/dist/types/tool-types.js.map +1 -0
- package/dist/utils/api-fallback.d.ts +39 -0
- package/dist/utils/api-fallback.d.ts.map +1 -0
- package/dist/utils/api-fallback.js +94 -0
- package/dist/utils/api-fallback.js.map +1 -0
- package/dist/utils/attribute-mapping/attribute-mappers.d.ts +39 -0
- package/dist/utils/attribute-mapping/attribute-mappers.d.ts.map +1 -0
- package/dist/utils/attribute-mapping/attribute-mappers.js +394 -0
- package/dist/utils/attribute-mapping/attribute-mappers.js.map +1 -0
- package/dist/utils/attribute-mapping/filter-translator.d.ts +9 -0
- package/dist/utils/attribute-mapping/filter-translator.d.ts.map +1 -0
- package/dist/utils/attribute-mapping/filter-translator.js +104 -0
- package/dist/utils/attribute-mapping/filter-translator.js.map +1 -0
- package/dist/utils/attribute-mapping/index.d.ts +10 -0
- package/dist/utils/attribute-mapping/index.d.ts.map +1 -0
- package/dist/utils/attribute-mapping/index.js +12 -0
- package/dist/utils/attribute-mapping/index.js.map +1 -0
- package/dist/utils/attribute-mapping/legacy-maps.d.ts +11 -0
- package/dist/utils/attribute-mapping/legacy-maps.d.ts.map +1 -0
- package/dist/utils/attribute-mapping/legacy-maps.js +54 -0
- package/dist/utils/attribute-mapping/legacy-maps.js.map +1 -0
- package/dist/utils/attribute-mapping/mapping-utils.d.ts +90 -0
- package/dist/utils/attribute-mapping/mapping-utils.d.ts.map +1 -0
- package/dist/utils/attribute-mapping/mapping-utils.js +145 -0
- package/dist/utils/attribute-mapping/mapping-utils.js.map +1 -0
- package/dist/utils/auto-discovery.d.ts +22 -0
- package/dist/utils/auto-discovery.d.ts.map +1 -0
- package/dist/utils/auto-discovery.js +143 -0
- package/dist/utils/auto-discovery.js.map +1 -0
- package/dist/utils/cli-colors.d.ts +36 -0
- package/dist/utils/cli-colors.d.ts.map +1 -0
- package/dist/utils/cli-colors.js +35 -0
- package/dist/utils/cli-colors.js.map +1 -0
- package/dist/utils/config-loader.d.ts +41 -0
- package/dist/utils/config-loader.d.ts.map +1 -0
- package/dist/utils/config-loader.js +167 -0
- package/dist/utils/config-loader.js.map +1 -0
- package/dist/utils/config-migration.d.ts +140 -0
- package/dist/utils/config-migration.d.ts.map +1 -0
- package/dist/utils/config-migration.js +310 -0
- package/dist/utils/config-migration.js.map +1 -0
- package/dist/utils/date-utils.d.ts +63 -0
- package/dist/utils/date-utils.d.ts.map +1 -0
- package/dist/utils/date-utils.js +329 -0
- package/dist/utils/date-utils.js.map +1 -0
- package/dist/utils/debug-b2b-segment.d.ts +2 -0
- package/dist/utils/debug-b2b-segment.d.ts.map +1 -0
- package/dist/utils/debug-b2b-segment.js +67 -0
- package/dist/utils/debug-b2b-segment.js.map +1 -0
- package/dist/utils/domain-utils.d.ts +46 -0
- package/dist/utils/domain-utils.d.ts.map +1 -0
- package/dist/utils/domain-utils.js +143 -0
- package/dist/utils/domain-utils.js.map +1 -0
- package/dist/utils/dynamic-import.d.ts +33 -0
- package/dist/utils/dynamic-import.d.ts.map +1 -0
- package/dist/utils/dynamic-import.js +41 -0
- package/dist/utils/dynamic-import.js.map +1 -0
- package/dist/utils/error-enhancer.d.ts +23 -0
- package/dist/utils/error-enhancer.d.ts.map +1 -0
- package/dist/utils/error-enhancer.js +188 -0
- package/dist/utils/error-enhancer.js.map +1 -0
- package/dist/utils/error-handler.d.ts +89 -0
- package/dist/utils/error-handler.d.ts.map +1 -0
- package/dist/utils/error-handler.js +336 -0
- package/dist/utils/error-handler.js.map +1 -0
- package/dist/utils/filters/builders/activity.d.ts +13 -0
- package/dist/utils/filters/builders/activity.d.ts.map +1 -0
- package/dist/utils/filters/builders/activity.js +65 -0
- package/dist/utils/filters/builders/activity.js.map +1 -0
- package/dist/utils/filters/builders/basic.d.ts +13 -0
- package/dist/utils/filters/builders/basic.d.ts.map +1 -0
- package/dist/utils/filters/builders/basic.js +36 -0
- package/dist/utils/filters/builders/basic.js.map +1 -0
- package/dist/utils/filters/builders/complex.d.ts +31 -0
- package/dist/utils/filters/builders/complex.d.ts.map +1 -0
- package/dist/utils/filters/builders/complex.js +92 -0
- package/dist/utils/filters/builders/complex.js.map +1 -0
- package/dist/utils/filters/builders/date.d.ts +17 -0
- package/dist/utils/filters/builders/date.d.ts.map +1 -0
- package/dist/utils/filters/builders/date.js +51 -0
- package/dist/utils/filters/builders/date.js.map +1 -0
- package/dist/utils/filters/builders/index.d.ts +8 -0
- package/dist/utils/filters/builders/index.d.ts.map +1 -0
- package/dist/utils/filters/builders/index.js +8 -0
- package/dist/utils/filters/builders/index.js.map +1 -0
- package/dist/utils/filters/builders/numeric.d.ts +17 -0
- package/dist/utils/filters/builders/numeric.d.ts.map +1 -0
- package/dist/utils/filters/builders/numeric.js +61 -0
- package/dist/utils/filters/builders/numeric.js.map +1 -0
- package/dist/utils/filters/builders/text.d.ts +17 -0
- package/dist/utils/filters/builders/text.d.ts.map +1 -0
- package/dist/utils/filters/builders/text.js +47 -0
- package/dist/utils/filters/builders/text.js.map +1 -0
- package/dist/utils/filters/builders/types.d.ts +2 -0
- package/dist/utils/filters/builders/types.d.ts.map +1 -0
- package/dist/utils/filters/builders/types.js +2 -0
- package/dist/utils/filters/builders/types.js.map +1 -0
- package/dist/utils/filters/builders.d.ts +2 -0
- package/dist/utils/filters/builders.d.ts.map +1 -0
- package/dist/utils/filters/builders.js +2 -0
- package/dist/utils/filters/builders.js.map +1 -0
- package/dist/utils/filters/cache.d.ts +80 -0
- package/dist/utils/filters/cache.d.ts.map +1 -0
- package/dist/utils/filters/cache.js +212 -0
- package/dist/utils/filters/cache.js.map +1 -0
- package/dist/utils/filters/index.d.ts +51 -0
- package/dist/utils/filters/index.d.ts.map +1 -0
- package/dist/utils/filters/index.js +67 -0
- package/dist/utils/filters/index.js.map +1 -0
- package/dist/utils/filters/operators.d.ts +65 -0
- package/dist/utils/filters/operators.d.ts.map +1 -0
- package/dist/utils/filters/operators.js +214 -0
- package/dist/utils/filters/operators.js.map +1 -0
- package/dist/utils/filters/relationship.d.ts +81 -0
- package/dist/utils/filters/relationship.d.ts.map +1 -0
- package/dist/utils/filters/relationship.js +393 -0
- package/dist/utils/filters/relationship.js.map +1 -0
- package/dist/utils/filters/translators.d.ts +120 -0
- package/dist/utils/filters/translators.d.ts.map +1 -0
- package/dist/utils/filters/translators.js +397 -0
- package/dist/utils/filters/translators.js.map +1 -0
- package/dist/utils/filters/types.d.ts +77 -0
- package/dist/utils/filters/types.d.ts.map +1 -0
- package/dist/utils/filters/types.js +85 -0
- package/dist/utils/filters/types.js.map +1 -0
- package/dist/utils/filters/utils.d.ts +86 -0
- package/dist/utils/filters/utils.d.ts.map +1 -0
- package/dist/utils/filters/utils.js +142 -0
- package/dist/utils/filters/utils.js.map +1 -0
- package/dist/utils/filters/validation-utils.d.ts +123 -0
- package/dist/utils/filters/validation-utils.d.ts.map +1 -0
- package/dist/utils/filters/validation-utils.js +282 -0
- package/dist/utils/filters/validation-utils.js.map +1 -0
- package/dist/utils/filters/validators.d.ts +73 -0
- package/dist/utils/filters/validators.d.ts.map +1 -0
- package/dist/utils/filters/validators.js +311 -0
- package/dist/utils/filters/validators.js.map +1 -0
- package/dist/utils/json-serializer.d.ts +68 -0
- package/dist/utils/json-serializer.d.ts.map +1 -0
- package/dist/utils/json-serializer.js +235 -0
- package/dist/utils/json-serializer.js.map +1 -0
- package/dist/utils/logger.d.ts +226 -0
- package/dist/utils/logger.d.ts.map +1 -0
- package/dist/utils/logger.js +323 -0
- package/dist/utils/logger.js.map +1 -0
- package/dist/utils/numeric-utils.d.ts +27 -0
- package/dist/utils/numeric-utils.d.ts.map +1 -0
- package/dist/utils/numeric-utils.js +83 -0
- package/dist/utils/numeric-utils.js.map +1 -0
- package/dist/utils/pagination.d.ts +85 -0
- package/dist/utils/pagination.d.ts.map +1 -0
- package/dist/utils/pagination.js +169 -0
- package/dist/utils/pagination.js.map +1 -0
- package/dist/utils/person-lookup.d.ts +35 -0
- package/dist/utils/person-lookup.d.ts.map +1 -0
- package/dist/utils/person-lookup.js +67 -0
- package/dist/utils/person-lookup.js.map +1 -0
- package/dist/utils/rate-limiter.d.ts +82 -0
- package/dist/utils/rate-limiter.d.ts.map +1 -0
- package/dist/utils/rate-limiter.js +159 -0
- package/dist/utils/rate-limiter.js.map +1 -0
- package/dist/utils/record-utils.d.ts +74 -0
- package/dist/utils/record-utils.d.ts.map +1 -0
- package/dist/utils/record-utils.js +312 -0
- package/dist/utils/record-utils.js.map +1 -0
- package/dist/utils/relationship-utils.d.ts +61 -0
- package/dist/utils/relationship-utils.d.ts.map +1 -0
- package/dist/utils/relationship-utils.js +242 -0
- package/dist/utils/relationship-utils.js.map +1 -0
- package/dist/utils/response-formatter.d.ts +121 -0
- package/dist/utils/response-formatter.d.ts.map +1 -0
- package/dist/utils/response-formatter.js +188 -0
- package/dist/utils/response-formatter.js.map +1 -0
- package/dist/utils/uri-parser.d.ts +18 -0
- package/dist/utils/uri-parser.d.ts.map +1 -0
- package/dist/utils/uri-parser.js +31 -0
- package/dist/utils/uri-parser.js.map +1 -0
- package/dist/utils/validation.d.ts +59 -0
- package/dist/utils/validation.d.ts.map +1 -0
- package/dist/utils/validation.js +264 -0
- package/dist/utils/validation.js.map +1 -0
- package/dist/utils/value-matcher.d.ts +58 -0
- package/dist/utils/value-matcher.d.ts.map +1 -0
- package/dist/utils/value-matcher.js +131 -0
- package/dist/utils/value-matcher.js.map +1 -0
- package/dist/validators/attribute-validator.d.ts +59 -0
- package/dist/validators/attribute-validator.d.ts.map +1 -0
- package/dist/validators/attribute-validator.js +531 -0
- package/dist/validators/attribute-validator.js.map +1 -0
- package/dist/validators/company/field_detector.d.ts +5 -0
- package/dist/validators/company/field_detector.d.ts.map +1 -0
- package/dist/validators/company/field_detector.js +95 -0
- package/dist/validators/company/field_detector.js.map +1 -0
- package/dist/validators/company/index.d.ts +26 -0
- package/dist/validators/company/index.d.ts.map +1 -0
- package/dist/validators/company/index.js +433 -0
- package/dist/validators/company/index.js.map +1 -0
- package/dist/validators/company/type_cache.d.ts +14 -0
- package/dist/validators/company/type_cache.d.ts.map +1 -0
- package/dist/validators/company/type_cache.js +28 -0
- package/dist/validators/company/type_cache.js.map +1 -0
- package/dist/validators/company/types.d.ts +8 -0
- package/dist/validators/company/types.d.ts.map +1 -0
- package/dist/validators/company/types.js +2 -0
- package/dist/validators/company/types.js.map +1 -0
- package/dist/validators/company-validator.d.ts +2 -0
- package/dist/validators/company-validator.d.ts.map +1 -0
- package/dist/validators/company-validator.js +2 -0
- package/dist/validators/company-validator.js.map +1 -0
- package/package.json +167 -0
|
@@ -0,0 +1,311 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* @module validators
|
|
3
|
+
*
|
|
4
|
+
* Consolidated filter validation utilities
|
|
5
|
+
* Provides functions to validate and normalize filter parameters
|
|
6
|
+
*
|
|
7
|
+
* This module provides:
|
|
8
|
+
* - Structure validation for filter objects
|
|
9
|
+
* - Date range validation and normalization
|
|
10
|
+
* - Numeric range validation
|
|
11
|
+
* - Activity filter validation
|
|
12
|
+
* - Filter condition validation
|
|
13
|
+
* - Parameter type validation and conversion
|
|
14
|
+
*/
|
|
15
|
+
// External dependencies
|
|
16
|
+
import { DateRangePreset, isValidFilterCondition } from '../../types/attio.js';
|
|
17
|
+
import { FilterValidationError } from '../../errors/api-errors.js';
|
|
18
|
+
import { isValidISODateString } from '../date-utils.js';
|
|
19
|
+
// Internal module dependencies
|
|
20
|
+
import { InteractionType, FilterConditionType, } from './types.js';
|
|
21
|
+
/**
|
|
22
|
+
* Validates a filter structure for basic required properties
|
|
23
|
+
*
|
|
24
|
+
* @param filter - The filter to validate
|
|
25
|
+
* @returns True if filter is valid, false otherwise
|
|
26
|
+
*/
|
|
27
|
+
export function validateFilterStructure(filter) {
|
|
28
|
+
if (!filter) {
|
|
29
|
+
return false;
|
|
30
|
+
}
|
|
31
|
+
if (!filter.attribute || !filter.attribute.slug) {
|
|
32
|
+
return false;
|
|
33
|
+
}
|
|
34
|
+
if (!filter.condition) {
|
|
35
|
+
return false;
|
|
36
|
+
}
|
|
37
|
+
return true;
|
|
38
|
+
}
|
|
39
|
+
/**
|
|
40
|
+
* Validates a date range object
|
|
41
|
+
*
|
|
42
|
+
* @param dateRange - The date range to validate
|
|
43
|
+
* @returns Validated and normalized date range
|
|
44
|
+
* @throws FilterValidationError if validation fails
|
|
45
|
+
*/
|
|
46
|
+
export function validateDateRange(dateRange) {
|
|
47
|
+
if (!dateRange) {
|
|
48
|
+
throw new FilterValidationError('Date range is required');
|
|
49
|
+
}
|
|
50
|
+
// Normalize dateRange if it's a string
|
|
51
|
+
if (typeof dateRange === 'string') {
|
|
52
|
+
try {
|
|
53
|
+
dateRange = JSON.parse(dateRange);
|
|
54
|
+
}
|
|
55
|
+
catch (error) {
|
|
56
|
+
throw new FilterValidationError(`Invalid date range format: ${error instanceof Error ? error.message : String(error)}`);
|
|
57
|
+
}
|
|
58
|
+
}
|
|
59
|
+
// Check if it's a proper object
|
|
60
|
+
if (typeof dateRange !== 'object' || Array.isArray(dateRange)) {
|
|
61
|
+
throw new FilterValidationError('Date range must be an object with start, end, or preset properties');
|
|
62
|
+
}
|
|
63
|
+
// Must have at least one of preset, start, or end
|
|
64
|
+
if (!dateRange.preset && !dateRange.start && !dateRange.end) {
|
|
65
|
+
throw new FilterValidationError('Date range must specify at least one of: preset, start, or end');
|
|
66
|
+
}
|
|
67
|
+
// Validate preset if provided
|
|
68
|
+
if (dateRange.preset) {
|
|
69
|
+
const normalizedPreset = typeof dateRange.preset === 'string'
|
|
70
|
+
? dateRange.preset.toLowerCase().trim()
|
|
71
|
+
: String(dateRange.preset);
|
|
72
|
+
const validPresets = Object.values(DateRangePreset);
|
|
73
|
+
if (!validPresets.includes(normalizedPreset)) {
|
|
74
|
+
throw new FilterValidationError(`Invalid date preset: "${dateRange.preset}". ` +
|
|
75
|
+
`Valid presets are: ${validPresets.join(', ')}`);
|
|
76
|
+
}
|
|
77
|
+
// Normalize the preset to ensure proper casing
|
|
78
|
+
dateRange.preset = normalizedPreset;
|
|
79
|
+
}
|
|
80
|
+
// Validate start date if provided
|
|
81
|
+
if (dateRange.start) {
|
|
82
|
+
if (typeof dateRange.start === 'string') {
|
|
83
|
+
// Validate ISO string format
|
|
84
|
+
if (!isValidISODateString(dateRange.start)) {
|
|
85
|
+
throw new FilterValidationError(`Invalid ISO date string format for start date: ${dateRange.start}`);
|
|
86
|
+
}
|
|
87
|
+
}
|
|
88
|
+
else if (typeof dateRange.start === 'object' &&
|
|
89
|
+
!Array.isArray(dateRange.start)) {
|
|
90
|
+
// It's a relative date object, validate basic structure
|
|
91
|
+
if (!dateRange.start.unit ||
|
|
92
|
+
!dateRange.start.value ||
|
|
93
|
+
!dateRange.start.direction) {
|
|
94
|
+
throw new FilterValidationError('Relative start date must have unit, value, and direction properties');
|
|
95
|
+
}
|
|
96
|
+
// Validate value is a number
|
|
97
|
+
if (typeof dateRange.start.value !== 'number' ||
|
|
98
|
+
isNaN(dateRange.start.value)) {
|
|
99
|
+
throw new FilterValidationError('Relative date value must be a number');
|
|
100
|
+
}
|
|
101
|
+
// Validate direction
|
|
102
|
+
if (dateRange.start.direction !== 'past' &&
|
|
103
|
+
dateRange.start.direction !== 'future') {
|
|
104
|
+
throw new FilterValidationError('Relative date direction must be either "past" or "future"');
|
|
105
|
+
}
|
|
106
|
+
}
|
|
107
|
+
else {
|
|
108
|
+
throw new FilterValidationError('Start date must be either an ISO date string or a relative date object');
|
|
109
|
+
}
|
|
110
|
+
}
|
|
111
|
+
// Validate end date if provided
|
|
112
|
+
if (dateRange.end) {
|
|
113
|
+
if (typeof dateRange.end === 'string') {
|
|
114
|
+
// Validate ISO string format
|
|
115
|
+
if (!isValidISODateString(dateRange.end)) {
|
|
116
|
+
throw new FilterValidationError(`Invalid ISO date string format for end date: ${dateRange.end}`);
|
|
117
|
+
}
|
|
118
|
+
}
|
|
119
|
+
else if (typeof dateRange.end === 'object' &&
|
|
120
|
+
!Array.isArray(dateRange.end)) {
|
|
121
|
+
// It's a relative date object, validate basic structure
|
|
122
|
+
if (!dateRange.end.unit ||
|
|
123
|
+
!dateRange.end.value ||
|
|
124
|
+
!dateRange.end.direction) {
|
|
125
|
+
throw new FilterValidationError('Relative end date must have unit, value, and direction properties');
|
|
126
|
+
}
|
|
127
|
+
// Validate value is a number
|
|
128
|
+
if (typeof dateRange.end.value !== 'number' ||
|
|
129
|
+
isNaN(dateRange.end.value)) {
|
|
130
|
+
throw new FilterValidationError('Relative date value must be a number');
|
|
131
|
+
}
|
|
132
|
+
// Validate direction
|
|
133
|
+
if (dateRange.end.direction !== 'past' &&
|
|
134
|
+
dateRange.end.direction !== 'future') {
|
|
135
|
+
throw new FilterValidationError('Relative date direction must be either "past" or "future"');
|
|
136
|
+
}
|
|
137
|
+
}
|
|
138
|
+
else {
|
|
139
|
+
throw new FilterValidationError('End date must be either an ISO date string or a relative date object');
|
|
140
|
+
}
|
|
141
|
+
}
|
|
142
|
+
return dateRange;
|
|
143
|
+
}
|
|
144
|
+
/**
|
|
145
|
+
* Validates an activity filter object
|
|
146
|
+
*
|
|
147
|
+
* @param activityFilter - The activity filter to validate
|
|
148
|
+
* @returns Validated and normalized activity filter
|
|
149
|
+
* @throws FilterValidationError if validation fails
|
|
150
|
+
*/
|
|
151
|
+
export function validateActivityFilter(activityFilter) {
|
|
152
|
+
if (!activityFilter) {
|
|
153
|
+
throw new FilterValidationError('Activity filter is required');
|
|
154
|
+
}
|
|
155
|
+
// Normalize if it's a string
|
|
156
|
+
if (typeof activityFilter === 'string') {
|
|
157
|
+
try {
|
|
158
|
+
activityFilter = JSON.parse(activityFilter);
|
|
159
|
+
}
|
|
160
|
+
catch (error) {
|
|
161
|
+
throw new FilterValidationError(`Invalid activity filter format: ${error instanceof Error ? error.message : String(error)}`);
|
|
162
|
+
}
|
|
163
|
+
}
|
|
164
|
+
// Check if it's a proper object
|
|
165
|
+
if (typeof activityFilter !== 'object' || Array.isArray(activityFilter)) {
|
|
166
|
+
throw new FilterValidationError('Activity filter must be an object with dateRange and optional interactionType');
|
|
167
|
+
}
|
|
168
|
+
// Validate required dateRange property
|
|
169
|
+
if (!activityFilter.dateRange) {
|
|
170
|
+
throw new FilterValidationError('Activity filter must include a dateRange property');
|
|
171
|
+
}
|
|
172
|
+
// Validate dateRange
|
|
173
|
+
try {
|
|
174
|
+
activityFilter.dateRange = validateDateRange(activityFilter.dateRange);
|
|
175
|
+
}
|
|
176
|
+
catch (error) {
|
|
177
|
+
throw new FilterValidationError(`Invalid dateRange in activity filter: ${error instanceof Error ? error.message : String(error)}`);
|
|
178
|
+
}
|
|
179
|
+
// Validate interactionType if provided
|
|
180
|
+
if (activityFilter.interactionType !== undefined) {
|
|
181
|
+
const validTypes = Object.values(InteractionType);
|
|
182
|
+
if (typeof activityFilter.interactionType !== 'string' ||
|
|
183
|
+
!validTypes.includes(activityFilter.interactionType)) {
|
|
184
|
+
throw new FilterValidationError(`Invalid interaction type: "${activityFilter.interactionType}". ` +
|
|
185
|
+
`Valid types are: ${validTypes.join(', ')}`);
|
|
186
|
+
}
|
|
187
|
+
}
|
|
188
|
+
return activityFilter;
|
|
189
|
+
}
|
|
190
|
+
/**
|
|
191
|
+
* Validates a numeric range object
|
|
192
|
+
*
|
|
193
|
+
* @param range - The numeric range to validate
|
|
194
|
+
* @returns Validated and normalized numeric range
|
|
195
|
+
* @throws FilterValidationError if validation fails
|
|
196
|
+
*/
|
|
197
|
+
export function validateNumericRange(range) {
|
|
198
|
+
if (!range) {
|
|
199
|
+
throw new FilterValidationError('Numeric range is required');
|
|
200
|
+
}
|
|
201
|
+
// Normalize if it's a string
|
|
202
|
+
if (typeof range === 'string') {
|
|
203
|
+
try {
|
|
204
|
+
range = JSON.parse(range);
|
|
205
|
+
}
|
|
206
|
+
catch (error) {
|
|
207
|
+
throw new FilterValidationError(`Invalid numeric range format: ${error instanceof Error ? error.message : String(error)}`);
|
|
208
|
+
}
|
|
209
|
+
}
|
|
210
|
+
// Check if it's a proper object
|
|
211
|
+
if (typeof range !== 'object' || Array.isArray(range)) {
|
|
212
|
+
throw new FilterValidationError('Numeric range must be an object with min, max, or equals properties');
|
|
213
|
+
}
|
|
214
|
+
// Must have at least one of min, max, or equals
|
|
215
|
+
if (range.min === undefined &&
|
|
216
|
+
range.max === undefined &&
|
|
217
|
+
range.equals === undefined) {
|
|
218
|
+
throw new FilterValidationError('Numeric range must specify at least one of: min, max, or equals');
|
|
219
|
+
}
|
|
220
|
+
// If equals is specified, min and max should not be
|
|
221
|
+
if (range.equals !== undefined &&
|
|
222
|
+
(range.min !== undefined || range.max !== undefined)) {
|
|
223
|
+
throw new FilterValidationError('Cannot specify both equals and min/max in a numeric range');
|
|
224
|
+
}
|
|
225
|
+
// Check types and convert to number if needed
|
|
226
|
+
if (range.min !== undefined) {
|
|
227
|
+
range.min = Number(range.min);
|
|
228
|
+
if (isNaN(range.min)) {
|
|
229
|
+
throw new FilterValidationError('Min value must be a valid number');
|
|
230
|
+
}
|
|
231
|
+
}
|
|
232
|
+
if (range.max !== undefined) {
|
|
233
|
+
range.max = Number(range.max);
|
|
234
|
+
if (isNaN(range.max)) {
|
|
235
|
+
throw new FilterValidationError('Max value must be a valid number');
|
|
236
|
+
}
|
|
237
|
+
}
|
|
238
|
+
if (range.equals !== undefined) {
|
|
239
|
+
range.equals = Number(range.equals);
|
|
240
|
+
if (isNaN(range.equals)) {
|
|
241
|
+
throw new FilterValidationError('Equals value must be a valid number');
|
|
242
|
+
}
|
|
243
|
+
}
|
|
244
|
+
// Check that min <= max if both are specified
|
|
245
|
+
if (range.min !== undefined &&
|
|
246
|
+
range.max !== undefined &&
|
|
247
|
+
range.min > range.max) {
|
|
248
|
+
throw new FilterValidationError(`Invalid numeric range: min (${range.min}) cannot be greater than max (${range.max})`);
|
|
249
|
+
}
|
|
250
|
+
return range;
|
|
251
|
+
}
|
|
252
|
+
/**
|
|
253
|
+
* Validates a filter condition string
|
|
254
|
+
*
|
|
255
|
+
* @param condition - The condition to validate
|
|
256
|
+
* @returns The validated condition
|
|
257
|
+
* @throws FilterValidationError if validation fails
|
|
258
|
+
*/
|
|
259
|
+
export function validateFilterCondition(condition) {
|
|
260
|
+
if (!condition) {
|
|
261
|
+
throw new FilterValidationError('Filter condition is required');
|
|
262
|
+
}
|
|
263
|
+
// Use the isValidFilterCondition from types/attio.js
|
|
264
|
+
if (!isValidFilterCondition(condition)) {
|
|
265
|
+
const validConditions = Object.values(FilterConditionType);
|
|
266
|
+
throw new FilterValidationError(`Invalid filter condition: "${condition}". ` +
|
|
267
|
+
`Valid conditions are: ${validConditions.join(', ')}`);
|
|
268
|
+
}
|
|
269
|
+
return condition;
|
|
270
|
+
}
|
|
271
|
+
/**
|
|
272
|
+
* Ensures a value is a number, converting if necessary
|
|
273
|
+
*
|
|
274
|
+
* @param value - The value to validate and convert
|
|
275
|
+
* @param paramName - Name of the parameter (for error messages)
|
|
276
|
+
* @param defaultValue - Optional default value if undefined
|
|
277
|
+
* @returns The validated number
|
|
278
|
+
* @throws FilterValidationError if validation fails
|
|
279
|
+
*/
|
|
280
|
+
export function validateNumericParam(value, paramName, defaultValue) {
|
|
281
|
+
if (value === undefined || value === null) {
|
|
282
|
+
if (defaultValue !== undefined) {
|
|
283
|
+
return defaultValue;
|
|
284
|
+
}
|
|
285
|
+
throw new FilterValidationError(`${paramName} is required`);
|
|
286
|
+
}
|
|
287
|
+
const num = Number(value);
|
|
288
|
+
if (isNaN(num)) {
|
|
289
|
+
throw new FilterValidationError(`${paramName} must be a valid number`);
|
|
290
|
+
}
|
|
291
|
+
return num;
|
|
292
|
+
}
|
|
293
|
+
/**
|
|
294
|
+
* Validates filter structure and conditions
|
|
295
|
+
*
|
|
296
|
+
* @param filter - The filter to validate
|
|
297
|
+
* @param validateConditions - Whether to validate condition types (default: true)
|
|
298
|
+
* @throws FilterValidationError if validation fails
|
|
299
|
+
*/
|
|
300
|
+
export function validateFilterWithConditions(filter, validateConditions = true) {
|
|
301
|
+
if (!validateFilterStructure(filter)) {
|
|
302
|
+
const slugInfo = filter?.attribute?.slug ? ` ${filter.attribute.slug}` : '';
|
|
303
|
+
throw new FilterValidationError(`Invalid filter: Incomplete filter structure for${slugInfo}`);
|
|
304
|
+
}
|
|
305
|
+
const { slug } = filter.attribute;
|
|
306
|
+
if (validateConditions && !isValidFilterCondition(filter.condition)) {
|
|
307
|
+
throw new FilterValidationError(`Invalid filter condition '${filter.condition}' for attribute '${slug}'. ` +
|
|
308
|
+
`Valid conditions are: ${Object.values(FilterConditionType).join(', ')}`);
|
|
309
|
+
}
|
|
310
|
+
}
|
|
311
|
+
//# sourceMappingURL=validators.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"validators.js","sourceRoot":"","sources":["../../../src/utils/filters/validators.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,68 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Interface for serialization options
|
|
3
|
+
*/
|
|
4
|
+
export interface SerializationOptions {
|
|
5
|
+
/** Maximum depth for nested objects (only used in the legacy implementation) */
|
|
6
|
+
maxDepth?: number;
|
|
7
|
+
/** Maximum string length before truncation */
|
|
8
|
+
maxStringLength?: number;
|
|
9
|
+
/** Whether to include stack traces in error objects */
|
|
10
|
+
includeStackTraces?: boolean;
|
|
11
|
+
/** Custom replacer function */
|
|
12
|
+
replacer?: (key: string, value: any) => any;
|
|
13
|
+
/** Indent spaces for pretty printing (default: 2) */
|
|
14
|
+
indent?: number;
|
|
15
|
+
}
|
|
16
|
+
/**
|
|
17
|
+
* Safe JSON stringify that handles circular references and non-serializable values
|
|
18
|
+
*
|
|
19
|
+
* Uses fast-safe-stringify for high performance and reliability
|
|
20
|
+
*
|
|
21
|
+
* @param obj - The object to stringify
|
|
22
|
+
* @param options - Serialization options
|
|
23
|
+
* @returns Safe JSON string
|
|
24
|
+
*/
|
|
25
|
+
export declare function safeJsonStringify(obj: any, options?: SerializationOptions): string;
|
|
26
|
+
/**
|
|
27
|
+
* Validates that a JSON string is properly formed and can be parsed
|
|
28
|
+
*
|
|
29
|
+
* @param jsonString - The JSON string to validate
|
|
30
|
+
* @returns Object with validation result and parsed data if successful
|
|
31
|
+
*/
|
|
32
|
+
export declare function validateJsonString(jsonString: string): {
|
|
33
|
+
isValid: boolean;
|
|
34
|
+
data?: any;
|
|
35
|
+
error?: string;
|
|
36
|
+
size: number;
|
|
37
|
+
};
|
|
38
|
+
/**
|
|
39
|
+
* Detects potential circular references in an object before serialization
|
|
40
|
+
*
|
|
41
|
+
* NOTE: This is less critical now with fast-safe-stringify, but kept for
|
|
42
|
+
* compatibility with existing code that uses it.
|
|
43
|
+
*
|
|
44
|
+
* @param obj - The object to check
|
|
45
|
+
* @param maxDepth - Maximum depth to check
|
|
46
|
+
* @returns True if circular references are detected
|
|
47
|
+
*/
|
|
48
|
+
export declare function hasCircularReferences(obj: any, maxDepth?: number): boolean;
|
|
49
|
+
/**
|
|
50
|
+
* Creates a safe copy of an object that can be JSON serialized
|
|
51
|
+
*
|
|
52
|
+
* Uses fast-safe-stringify for improved performance and reliability
|
|
53
|
+
*
|
|
54
|
+
* @param obj - The object to copy
|
|
55
|
+
* @param options - Serialization options
|
|
56
|
+
* @returns Safe copy of the object
|
|
57
|
+
*/
|
|
58
|
+
export declare function createSafeCopy(obj: any, options?: SerializationOptions): any;
|
|
59
|
+
/**
|
|
60
|
+
* Sanitizes MCP response objects to prevent JSON parsing errors
|
|
61
|
+
*
|
|
62
|
+
* Uses fast-safe-stringify to ensure all responses are safely serializable
|
|
63
|
+
*
|
|
64
|
+
* @param response - The MCP response object to sanitize
|
|
65
|
+
* @returns Sanitized response object
|
|
66
|
+
*/
|
|
67
|
+
export declare function sanitizeMcpResponse(response: any): any;
|
|
68
|
+
//# sourceMappingURL=json-serializer.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"json-serializer.d.ts","sourceRoot":"","sources":["../../src/utils/json-serializer.ts"],"names":[],"mappings":"AAeA;;GAEG;AACH,MAAM,WAAW,oBAAoB;IACnC,gFAAgF;IAChF,QAAQ,CAAC,EAAE,MAAM,CAAC;IAClB,8CAA8C;IAC9C,eAAe,CAAC,EAAE,MAAM,CAAC;IACzB,uDAAuD;IACvD,kBAAkB,CAAC,EAAE,OAAO,CAAC;IAC7B,+BAA+B;IAC/B,QAAQ,CAAC,EAAE,CAAC,GAAG,EAAE,MAAM,EAAE,KAAK,EAAE,GAAG,KAAK,GAAG,CAAC;IAC5C,qDAAqD;IACrD,MAAM,CAAC,EAAE,MAAM,CAAC;CACjB;AAaD;;;;;;;;GAQG;AACH,wBAAgB,iBAAiB,CAC/B,GAAG,EAAE,GAAG,EACR,OAAO,GAAE,oBAAyB,GACjC,MAAM,CAyFR;AAED;;;;;GAKG;AACH,wBAAgB,kBAAkB,CAAC,UAAU,EAAE,MAAM,GAAG;IACtD,OAAO,EAAE,OAAO,CAAC;IACjB,IAAI,CAAC,EAAE,GAAG,CAAC;IACX,KAAK,CAAC,EAAE,MAAM,CAAC;IACf,IAAI,EAAE,MAAM,CAAC;CACd,CAiBA;AAED;;;;;;;;;GASG;AACH,wBAAgB,qBAAqB,CACnC,GAAG,EAAE,GAAG,EACR,QAAQ,GAAE,MAAW,GACpB,OAAO,CAuBT;AAED;;;;;;;;GAQG;AACH,wBAAgB,cAAc,CAC5B,GAAG,EAAE,GAAG,EACR,OAAO,GAAE,oBAAyB,GACjC,GAAG,CAoBL;AAED;;;;;;;GAOG;AACH,wBAAgB,mBAAmB,CAAC,QAAQ,EAAE,GAAG,GAAG,GAAG,CA4CtD"}
|
|
@@ -0,0 +1,235 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Safe JSON serialization utilities to prevent MCP protocol breakdown
|
|
3
|
+
* Handles circular references, non-serializable values, and large objects
|
|
4
|
+
*
|
|
5
|
+
* Uses fast-safe-stringify for improved performance and reliability
|
|
6
|
+
*
|
|
7
|
+
* IMPORTANT MCP PROTOCOL WARNING:
|
|
8
|
+
* Never use console.log() in this file or any MCP-related code.
|
|
9
|
+
* Always use console.error() or logger.safeMcpLog() instead.
|
|
10
|
+
* Using console.log will break the MCP protocol, as it writes to stdout
|
|
11
|
+
* which is used for client-server communication.
|
|
12
|
+
*/
|
|
13
|
+
// @ts-ignore - Fast-safe-stringify has CommonJS exports
|
|
14
|
+
import fastSafeStringify from 'fast-safe-stringify';
|
|
15
|
+
/**
|
|
16
|
+
* Default serialization options
|
|
17
|
+
*/
|
|
18
|
+
const DEFAULT_OPTIONS = {
|
|
19
|
+
maxDepth: 20, // Kept for backward compatibility
|
|
20
|
+
maxStringLength: 25000, // 25KB max string length - more reasonable for MCP
|
|
21
|
+
includeStackTraces: false,
|
|
22
|
+
replacer: (key, value) => value,
|
|
23
|
+
indent: 2,
|
|
24
|
+
};
|
|
25
|
+
/**
|
|
26
|
+
* Safe JSON stringify that handles circular references and non-serializable values
|
|
27
|
+
*
|
|
28
|
+
* Uses fast-safe-stringify for high performance and reliability
|
|
29
|
+
*
|
|
30
|
+
* @param obj - The object to stringify
|
|
31
|
+
* @param options - Serialization options
|
|
32
|
+
* @returns Safe JSON string
|
|
33
|
+
*/
|
|
34
|
+
export function safeJsonStringify(obj, options = {}) {
|
|
35
|
+
const opts = { ...DEFAULT_OPTIONS, ...options };
|
|
36
|
+
// Performance monitoring for large objects
|
|
37
|
+
const startTime = performance.now();
|
|
38
|
+
try {
|
|
39
|
+
// Create a custom replacer to handle non-standard values
|
|
40
|
+
const customReplacer = (key, value) => {
|
|
41
|
+
// First apply user-provided replacer if any
|
|
42
|
+
value = opts.replacer(key, value);
|
|
43
|
+
// Handle undefined (normally skipped by JSON)
|
|
44
|
+
if (value === undefined) {
|
|
45
|
+
return null;
|
|
46
|
+
}
|
|
47
|
+
// Handle very long strings
|
|
48
|
+
if (typeof value === 'string' && value.length > opts.maxStringLength) {
|
|
49
|
+
return value.substring(0, opts.maxStringLength) + '... [truncated]';
|
|
50
|
+
}
|
|
51
|
+
// Handle special object types more gracefully
|
|
52
|
+
if (value instanceof Error) {
|
|
53
|
+
const errorObj = {
|
|
54
|
+
name: value.name,
|
|
55
|
+
message: value.message,
|
|
56
|
+
};
|
|
57
|
+
if (opts.includeStackTraces && value.stack) {
|
|
58
|
+
errorObj.stack = value.stack;
|
|
59
|
+
}
|
|
60
|
+
if (value.cause) {
|
|
61
|
+
errorObj.cause = value.cause;
|
|
62
|
+
}
|
|
63
|
+
return errorObj;
|
|
64
|
+
}
|
|
65
|
+
if (value instanceof Map) {
|
|
66
|
+
return '[Map: ' + value.size + ' entries]';
|
|
67
|
+
}
|
|
68
|
+
if (value instanceof Set) {
|
|
69
|
+
return '[Set: ' + value.size + ' items]';
|
|
70
|
+
}
|
|
71
|
+
if (ArrayBuffer && value instanceof ArrayBuffer) {
|
|
72
|
+
return '[ArrayBuffer: ' + value.byteLength + ' bytes]';
|
|
73
|
+
}
|
|
74
|
+
return value;
|
|
75
|
+
};
|
|
76
|
+
// Use fast-safe-stringify with our custom replacer
|
|
77
|
+
const result = fastSafeStringify(obj, customReplacer, opts.indent);
|
|
78
|
+
// Performance monitoring and logging
|
|
79
|
+
const duration = performance.now() - startTime;
|
|
80
|
+
if (duration > 100) {
|
|
81
|
+
console.error(`[safeJsonStringify] Slow serialization detected: ${duration.toFixed(2)}ms for ${typeof obj} (${result.length} chars)`);
|
|
82
|
+
}
|
|
83
|
+
return result;
|
|
84
|
+
}
|
|
85
|
+
catch (error) {
|
|
86
|
+
// Enhanced error context
|
|
87
|
+
const duration = performance.now() - startTime;
|
|
88
|
+
console.error(`[safeJsonStringify] Serialization failed after ${duration.toFixed(2)}ms for ${typeof obj}:`, error);
|
|
89
|
+
// Use fast-safe-stringify directly for the error fallback
|
|
90
|
+
return fastSafeStringify({
|
|
91
|
+
error: 'Serialization failed',
|
|
92
|
+
message: error instanceof Error ? error.message : String(error),
|
|
93
|
+
originalType: typeof obj,
|
|
94
|
+
timestamp: new Date().toISOString(),
|
|
95
|
+
duration: `${duration.toFixed(2)}ms`,
|
|
96
|
+
}, undefined, 2);
|
|
97
|
+
}
|
|
98
|
+
}
|
|
99
|
+
/**
|
|
100
|
+
* Validates that a JSON string is properly formed and can be parsed
|
|
101
|
+
*
|
|
102
|
+
* @param jsonString - The JSON string to validate
|
|
103
|
+
* @returns Object with validation result and parsed data if successful
|
|
104
|
+
*/
|
|
105
|
+
export function validateJsonString(jsonString) {
|
|
106
|
+
const size = Buffer.byteLength(jsonString, 'utf8');
|
|
107
|
+
try {
|
|
108
|
+
const data = JSON.parse(jsonString);
|
|
109
|
+
return {
|
|
110
|
+
isValid: true,
|
|
111
|
+
data,
|
|
112
|
+
size,
|
|
113
|
+
};
|
|
114
|
+
}
|
|
115
|
+
catch (error) {
|
|
116
|
+
return {
|
|
117
|
+
isValid: false,
|
|
118
|
+
error: error instanceof Error ? error.message : String(error),
|
|
119
|
+
size,
|
|
120
|
+
};
|
|
121
|
+
}
|
|
122
|
+
}
|
|
123
|
+
/**
|
|
124
|
+
* Detects potential circular references in an object before serialization
|
|
125
|
+
*
|
|
126
|
+
* NOTE: This is less critical now with fast-safe-stringify, but kept for
|
|
127
|
+
* compatibility with existing code that uses it.
|
|
128
|
+
*
|
|
129
|
+
* @param obj - The object to check
|
|
130
|
+
* @param maxDepth - Maximum depth to check
|
|
131
|
+
* @returns True if circular references are detected
|
|
132
|
+
*/
|
|
133
|
+
export function hasCircularReferences(obj, maxDepth = 10) {
|
|
134
|
+
const seen = new WeakSet();
|
|
135
|
+
function check(value, depth) {
|
|
136
|
+
if (depth > maxDepth)
|
|
137
|
+
return false;
|
|
138
|
+
if (value === null || typeof value !== 'object')
|
|
139
|
+
return false;
|
|
140
|
+
if (seen.has(value))
|
|
141
|
+
return true;
|
|
142
|
+
seen.add(value);
|
|
143
|
+
try {
|
|
144
|
+
if (Array.isArray(value)) {
|
|
145
|
+
return value.some((item) => check(item, depth + 1));
|
|
146
|
+
}
|
|
147
|
+
else {
|
|
148
|
+
return Object.values(value).some((val) => check(val, depth + 1));
|
|
149
|
+
}
|
|
150
|
+
}
|
|
151
|
+
finally {
|
|
152
|
+
seen.delete(value);
|
|
153
|
+
}
|
|
154
|
+
}
|
|
155
|
+
return check(obj, 0);
|
|
156
|
+
}
|
|
157
|
+
/**
|
|
158
|
+
* Creates a safe copy of an object that can be JSON serialized
|
|
159
|
+
*
|
|
160
|
+
* Uses fast-safe-stringify for improved performance and reliability
|
|
161
|
+
*
|
|
162
|
+
* @param obj - The object to copy
|
|
163
|
+
* @param options - Serialization options
|
|
164
|
+
* @returns Safe copy of the object
|
|
165
|
+
*/
|
|
166
|
+
export function createSafeCopy(obj, options = {}) {
|
|
167
|
+
try {
|
|
168
|
+
// Fast path: directly use fast-safe-stringify to create a JSON string
|
|
169
|
+
const jsonString = safeJsonStringify(obj, options);
|
|
170
|
+
// Parse it back to create the safe copy
|
|
171
|
+
return JSON.parse(jsonString);
|
|
172
|
+
}
|
|
173
|
+
catch (error) {
|
|
174
|
+
console.error('[createSafeCopy] Failed to create safe copy:', error instanceof Error ? error.message : String(error));
|
|
175
|
+
// Return a structured error object
|
|
176
|
+
return {
|
|
177
|
+
error: 'Failed to create safe copy',
|
|
178
|
+
message: error instanceof Error ? error.message : String(error),
|
|
179
|
+
originalType: typeof obj,
|
|
180
|
+
};
|
|
181
|
+
}
|
|
182
|
+
}
|
|
183
|
+
/**
|
|
184
|
+
* Sanitizes MCP response objects to prevent JSON parsing errors
|
|
185
|
+
*
|
|
186
|
+
* Uses fast-safe-stringify to ensure all responses are safely serializable
|
|
187
|
+
*
|
|
188
|
+
* @param response - The MCP response object to sanitize
|
|
189
|
+
* @returns Sanitized response object
|
|
190
|
+
*/
|
|
191
|
+
export function sanitizeMcpResponse(response) {
|
|
192
|
+
// Ensure response has the correct structure
|
|
193
|
+
if (!response || typeof response !== 'object') {
|
|
194
|
+
return {
|
|
195
|
+
content: [
|
|
196
|
+
{
|
|
197
|
+
type: 'text',
|
|
198
|
+
text: 'Invalid response structure',
|
|
199
|
+
},
|
|
200
|
+
],
|
|
201
|
+
isError: true,
|
|
202
|
+
error: {
|
|
203
|
+
code: 500,
|
|
204
|
+
message: 'Response sanitization failed',
|
|
205
|
+
type: 'sanitization_error',
|
|
206
|
+
},
|
|
207
|
+
};
|
|
208
|
+
}
|
|
209
|
+
try {
|
|
210
|
+
// Create safe copy with MCP-specific options optimized for Attio responses
|
|
211
|
+
return createSafeCopy(response, {
|
|
212
|
+
maxStringLength: 40000, // 40KB for response content - reasonable limit
|
|
213
|
+
includeStackTraces: process.env.NODE_ENV === 'development',
|
|
214
|
+
});
|
|
215
|
+
}
|
|
216
|
+
catch (error) {
|
|
217
|
+
// Provide a valid fallback response if sanitization fails
|
|
218
|
+
return {
|
|
219
|
+
content: [
|
|
220
|
+
{
|
|
221
|
+
type: 'text',
|
|
222
|
+
text: 'Error processing response. The server encountered an error while formatting the response data.',
|
|
223
|
+
},
|
|
224
|
+
],
|
|
225
|
+
isError: true,
|
|
226
|
+
error: {
|
|
227
|
+
code: 500,
|
|
228
|
+
message: 'Response sanitization failed: ' +
|
|
229
|
+
(error instanceof Error ? error.message : String(error)),
|
|
230
|
+
type: 'sanitization_error',
|
|
231
|
+
},
|
|
232
|
+
};
|
|
233
|
+
}
|
|
234
|
+
}
|
|
235
|
+
//# sourceMappingURL=json-serializer.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"json-serializer.js","sourceRoot":"","sources":["../../src/utils/json-serializer.ts"],"names":[],"mappings":"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"}
|