@patroltech/agent-capabilities 0.0.0-stage → 0.2.1
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/LICENSE +21 -0
- package/README.md +171 -2
- package/dist/actions/alerts.d.ts +3 -0
- package/dist/actions/alerts.d.ts.map +1 -0
- package/dist/actions/alerts.js +90 -0
- package/dist/actions/alerts.js.map +1 -0
- package/dist/actions/batch-policy.d.ts +67 -0
- package/dist/actions/batch-policy.d.ts.map +1 -0
- package/dist/actions/batch-policy.js +73 -0
- package/dist/actions/batch-policy.js.map +1 -0
- package/dist/actions/checkpoint-archive.d.ts +3 -0
- package/dist/actions/checkpoint-archive.d.ts.map +1 -0
- package/dist/actions/checkpoint-archive.js +173 -0
- package/dist/actions/checkpoint-archive.js.map +1 -0
- package/dist/actions/checkpoint-geo.d.ts +4 -0
- package/dist/actions/checkpoint-geo.d.ts.map +1 -0
- package/dist/actions/checkpoint-geo.js +286 -0
- package/dist/actions/checkpoint-geo.js.map +1 -0
- package/dist/actions/checkpoints.d.ts +10 -0
- package/dist/actions/checkpoints.d.ts.map +1 -0
- package/dist/actions/checkpoints.js +222 -0
- package/dist/actions/checkpoints.js.map +1 -0
- package/dist/actions/guard.d.ts +13 -0
- package/dist/actions/guard.d.ts.map +1 -0
- package/dist/actions/guard.js +30 -0
- package/dist/actions/guard.js.map +1 -0
- package/dist/actions/incidents.d.ts +3 -0
- package/dist/actions/incidents.d.ts.map +1 -0
- package/dist/actions/incidents.js +260 -0
- package/dist/actions/incidents.js.map +1 -0
- package/dist/actions/index.d.ts +20 -0
- package/dist/actions/index.d.ts.map +1 -0
- package/dist/actions/index.js +60 -0
- package/dist/actions/index.js.map +1 -0
- package/dist/actions/locations.d.ts +4 -0
- package/dist/actions/locations.d.ts.map +1 -0
- package/dist/actions/locations.js +202 -0
- package/dist/actions/locations.js.map +1 -0
- package/dist/actions/names.d.ts +27 -0
- package/dist/actions/names.d.ts.map +1 -0
- package/dist/actions/names.js +48 -0
- package/dist/actions/names.js.map +1 -0
- package/dist/actions/patrollers.d.ts +6 -0
- package/dist/actions/patrollers.d.ts.map +1 -0
- package/dist/actions/patrollers.js +172 -0
- package/dist/actions/patrollers.js.map +1 -0
- package/dist/actions/route-schedules.d.ts +4 -0
- package/dist/actions/route-schedules.d.ts.map +1 -0
- package/dist/actions/route-schedules.js +110 -0
- package/dist/actions/route-schedules.js.map +1 -0
- package/dist/actions/routes.d.ts +5 -0
- package/dist/actions/routes.d.ts.map +1 -0
- package/dist/actions/routes.js +348 -0
- package/dist/actions/routes.js.map +1 -0
- package/dist/actions/support/antifraud-rules.d.ts +53 -0
- package/dist/actions/support/antifraud-rules.d.ts.map +1 -0
- package/dist/actions/support/antifraud-rules.js +121 -0
- package/dist/actions/support/antifraud-rules.js.map +1 -0
- package/dist/actions/support/elegir-ubicacion.d.ts +31 -0
- package/dist/actions/support/elegir-ubicacion.d.ts.map +1 -0
- package/dist/actions/support/elegir-ubicacion.js +42 -0
- package/dist/actions/support/elegir-ubicacion.js.map +1 -0
- package/dist/actions/support/next-step.d.ts +26 -0
- package/dist/actions/support/next-step.d.ts.map +1 -0
- package/dist/actions/support/next-step.js +55 -0
- package/dist/actions/support/next-step.js.map +1 -0
- package/dist/actions/support/route-impact.d.ts +25 -0
- package/dist/actions/support/route-impact.d.ts.map +1 -0
- package/dist/actions/support/route-impact.js +76 -0
- package/dist/actions/support/route-impact.js.map +1 -0
- package/dist/actions/support/route-lookup.d.ts +27 -0
- package/dist/actions/support/route-lookup.d.ts.map +1 -0
- package/dist/actions/support/route-lookup.js +44 -0
- package/dist/actions/support/route-lookup.js.map +1 -0
- package/dist/actions/support/schedule.d.ts +38 -0
- package/dist/actions/support/schedule.d.ts.map +1 -0
- package/dist/actions/support/schedule.js +62 -0
- package/dist/actions/support/schedule.js.map +1 -0
- package/dist/actions/support/shared.d.ts +112 -0
- package/dist/actions/support/shared.d.ts.map +1 -0
- package/dist/actions/support/shared.js +171 -0
- package/dist/actions/support/shared.js.map +1 -0
- package/dist/actions/support/texts.d.ts +47 -0
- package/dist/actions/support/texts.d.ts.map +1 -0
- package/dist/actions/support/texts.js +134 -0
- package/dist/actions/support/texts.js.map +1 -0
- package/dist/actions/support/turno.d.ts +16 -0
- package/dist/actions/support/turno.d.ts.map +1 -0
- package/dist/actions/support/turno.js +35 -0
- package/dist/actions/support/turno.js.map +1 -0
- package/dist/actions/support/user-access.d.ts +72 -0
- package/dist/actions/support/user-access.d.ts.map +1 -0
- package/dist/actions/support/user-access.js +194 -0
- package/dist/actions/support/user-access.js.map +1 -0
- package/dist/actions/types.d.ts +130 -0
- package/dist/actions/types.d.ts.map +1 -0
- package/dist/actions/types.js +20 -0
- package/dist/actions/types.js.map +1 -0
- package/dist/actions/user-roles.d.ts +4 -0
- package/dist/actions/user-roles.d.ts.map +1 -0
- package/dist/actions/user-roles.js +195 -0
- package/dist/actions/user-roles.js.map +1 -0
- package/dist/actions/users.d.ts +3 -0
- package/dist/actions/users.d.ts.map +1 -0
- package/dist/actions/users.js +146 -0
- package/dist/actions/users.js.map +1 -0
- package/dist/catalog/buildCatalog.d.ts +19 -0
- package/dist/catalog/buildCatalog.d.ts.map +1 -0
- package/dist/catalog/buildCatalog.js +38 -0
- package/dist/catalog/buildCatalog.js.map +1 -0
- package/dist/catalog/english.d.ts +17 -0
- package/dist/catalog/english.d.ts.map +1 -0
- package/dist/catalog/english.js +392 -0
- package/dist/catalog/english.js.map +1 -0
- package/dist/catalog/entries.d.ts +6 -0
- package/dist/catalog/entries.d.ts.map +1 -0
- package/dist/catalog/entries.js +610 -0
- package/dist/catalog/entries.js.map +1 -0
- package/dist/catalog/types.d.ts +61 -0
- package/dist/catalog/types.d.ts.map +1 -0
- package/dist/catalog/types.js +2 -0
- package/dist/catalog/types.js.map +1 -0
- package/dist/context.d.ts +37 -0
- package/dist/context.d.ts.map +1 -0
- package/dist/context.js +11 -0
- package/dist/context.js.map +1 -0
- package/dist/deps.d.ts +23 -0
- package/dist/deps.d.ts.map +1 -0
- package/dist/deps.js +12 -0
- package/dist/deps.js.map +1 -0
- package/dist/domain/access-logs-csv.d.ts +25 -0
- package/dist/domain/access-logs-csv.d.ts.map +1 -0
- package/dist/domain/access-logs-csv.js +36 -0
- package/dist/domain/access-logs-csv.js.map +1 -0
- package/dist/domain/backend-errors.d.ts +54 -0
- package/dist/domain/backend-errors.d.ts.map +1 -0
- package/dist/domain/backend-errors.js +364 -0
- package/dist/domain/backend-errors.js.map +1 -0
- package/dist/domain/country.d.ts +9 -0
- package/dist/domain/country.d.ts.map +1 -0
- package/dist/domain/country.js +13 -0
- package/dist/domain/country.js.map +1 -0
- package/dist/domain/date-range.d.ts +33 -0
- package/dist/domain/date-range.d.ts.map +1 -0
- package/dist/domain/date-range.js +110 -0
- package/dist/domain/date-range.js.map +1 -0
- package/dist/domain/geo.d.ts +14 -0
- package/dist/domain/geo.d.ts.map +1 -0
- package/dist/domain/geo.js +22 -0
- package/dist/domain/geo.js.map +1 -0
- package/dist/domain/guard-app-message.d.ts +15 -0
- package/dist/domain/guard-app-message.d.ts.map +1 -0
- package/dist/domain/guard-app-message.js +39 -0
- package/dist/domain/guard-app-message.js.map +1 -0
- package/dist/domain/incident-priority.d.ts +25 -0
- package/dist/domain/incident-priority.d.ts.map +1 -0
- package/dist/domain/incident-priority.js +15 -0
- package/dist/domain/incident-priority.js.map +1 -0
- package/dist/domain/incident-status.d.ts +29 -0
- package/dist/domain/incident-status.d.ts.map +1 -0
- package/dist/domain/incident-status.js +44 -0
- package/dist/domain/incident-status.js.map +1 -0
- package/dist/domain/language.d.ts +39 -0
- package/dist/domain/language.d.ts.map +1 -0
- package/dist/domain/language.js +112 -0
- package/dist/domain/language.js.map +1 -0
- package/dist/domain/money.d.ts +3 -0
- package/dist/domain/money.d.ts.map +1 -0
- package/dist/domain/money.js +12 -0
- package/dist/domain/money.js.map +1 -0
- package/dist/domain/puesta-en-marcha.d.ts +47 -0
- package/dist/domain/puesta-en-marcha.d.ts.map +1 -0
- package/dist/domain/puesta-en-marcha.js +22 -0
- package/dist/domain/puesta-en-marcha.js.map +1 -0
- package/dist/domain/qr-image.d.ts +25 -0
- package/dist/domain/qr-image.d.ts.map +1 -0
- package/dist/domain/qr-image.js +28 -0
- package/dist/domain/qr-image.js.map +1 -0
- package/dist/domain/resolve-by-name.d.ts +32 -0
- package/dist/domain/resolve-by-name.d.ts.map +1 -0
- package/dist/domain/resolve-by-name.js +40 -0
- package/dist/domain/resolve-by-name.js.map +1 -0
- package/dist/domain/route-checkpoints.d.ts +31 -0
- package/dist/domain/route-checkpoints.d.ts.map +1 -0
- package/dist/domain/route-checkpoints.js +27 -0
- package/dist/domain/route-checkpoints.js.map +1 -0
- package/dist/domain/route-schedule.d.ts +88 -0
- package/dist/domain/route-schedule.d.ts.map +1 -0
- package/dist/domain/route-schedule.js +203 -0
- package/dist/domain/route-schedule.js.map +1 -0
- package/dist/domain/scan-explanation.d.ts +25 -0
- package/dist/domain/scan-explanation.d.ts.map +1 -0
- package/dist/domain/scan-explanation.js +99 -0
- package/dist/domain/scan-explanation.js.map +1 -0
- package/dist/domain/scans-csv.d.ts +37 -0
- package/dist/domain/scans-csv.d.ts.map +1 -0
- package/dist/domain/scans-csv.js +67 -0
- package/dist/domain/scans-csv.js.map +1 -0
- package/dist/domain/timezone.d.ts +61 -0
- package/dist/domain/timezone.d.ts.map +1 -0
- package/dist/domain/timezone.js +113 -0
- package/dist/domain/timezone.js.map +1 -0
- package/dist/domain/tool-result.d.ts +55 -0
- package/dist/domain/tool-result.d.ts.map +1 -0
- package/dist/domain/tool-result.js +47 -0
- package/dist/domain/tool-result.js.map +1 -0
- package/dist/domain/urls.d.ts +33 -0
- package/dist/domain/urls.d.ts.map +1 -0
- package/dist/domain/urls.js +20 -0
- package/dist/domain/urls.js.map +1 -0
- package/dist/gateway/PatrolTechGateway.d.ts +195 -0
- package/dist/gateway/PatrolTechGateway.d.ts.map +1 -0
- package/dist/gateway/PatrolTechGateway.js +2 -0
- package/dist/gateway/PatrolTechGateway.js.map +1 -0
- package/dist/gateway/index.d.ts +4 -0
- package/dist/gateway/index.d.ts.map +1 -0
- package/dist/gateway/index.js +4 -0
- package/dist/gateway/index.js.map +1 -0
- package/dist/gateway/sdk/SdkPatrolTechGateway.d.ts +145 -0
- package/dist/gateway/sdk/SdkPatrolTechGateway.d.ts.map +1 -0
- package/dist/gateway/sdk/SdkPatrolTechGateway.js +101 -0
- package/dist/gateway/sdk/SdkPatrolTechGateway.js.map +1 -0
- package/dist/gateway/sdk/access.d.ts +8 -0
- package/dist/gateway/sdk/access.d.ts.map +1 -0
- package/dist/gateway/sdk/access.js +39 -0
- package/dist/gateway/sdk/access.js.map +1 -0
- package/dist/gateway/sdk/billing.d.ts +7 -0
- package/dist/gateway/sdk/billing.d.ts.map +1 -0
- package/dist/gateway/sdk/billing.js +92 -0
- package/dist/gateway/sdk/billing.js.map +1 -0
- package/dist/gateway/sdk/checkpoint-mappers.d.ts +23 -0
- package/dist/gateway/sdk/checkpoint-mappers.d.ts.map +1 -0
- package/dist/gateway/sdk/checkpoint-mappers.js +59 -0
- package/dist/gateway/sdk/checkpoint-mappers.js.map +1 -0
- package/dist/gateway/sdk/checkpoints.d.ts +33 -0
- package/dist/gateway/sdk/checkpoints.d.ts.map +1 -0
- package/dist/gateway/sdk/checkpoints.js +163 -0
- package/dist/gateway/sdk/checkpoints.js.map +1 -0
- package/dist/gateway/sdk/errors.d.ts +10 -0
- package/dist/gateway/sdk/errors.d.ts.map +1 -0
- package/dist/gateway/sdk/errors.js +46 -0
- package/dist/gateway/sdk/errors.js.map +1 -0
- package/dist/gateway/sdk/incidents.d.ts +18 -0
- package/dist/gateway/sdk/incidents.d.ts.map +1 -0
- package/dist/gateway/sdk/incidents.js +98 -0
- package/dist/gateway/sdk/incidents.js.map +1 -0
- package/dist/gateway/sdk/index.d.ts +4 -0
- package/dist/gateway/sdk/index.d.ts.map +1 -0
- package/dist/gateway/sdk/index.js +4 -0
- package/dist/gateway/sdk/index.js.map +1 -0
- package/dist/gateway/sdk/list.d.ts +15 -0
- package/dist/gateway/sdk/list.d.ts.map +1 -0
- package/dist/gateway/sdk/list.js +12 -0
- package/dist/gateway/sdk/list.js.map +1 -0
- package/dist/gateway/sdk/locations.d.ts +24 -0
- package/dist/gateway/sdk/locations.d.ts.map +1 -0
- package/dist/gateway/sdk/locations.js +44 -0
- package/dist/gateway/sdk/locations.js.map +1 -0
- package/dist/gateway/sdk/patrollers.d.ts +26 -0
- package/dist/gateway/sdk/patrollers.d.ts.map +1 -0
- package/dist/gateway/sdk/patrollers.js +132 -0
- package/dist/gateway/sdk/patrollers.js.map +1 -0
- package/dist/gateway/sdk/rounds.d.ts +15 -0
- package/dist/gateway/sdk/rounds.d.ts.map +1 -0
- package/dist/gateway/sdk/rounds.js +142 -0
- package/dist/gateway/sdk/rounds.js.map +1 -0
- package/dist/gateway/sdk/routes.d.ts +18 -0
- package/dist/gateway/sdk/routes.d.ts.map +1 -0
- package/dist/gateway/sdk/routes.js +74 -0
- package/dist/gateway/sdk/routes.js.map +1 -0
- package/dist/gateway/sdk/scans.d.ts +4 -0
- package/dist/gateway/sdk/scans.d.ts.map +1 -0
- package/dist/gateway/sdk/scans.js +72 -0
- package/dist/gateway/sdk/scans.js.map +1 -0
- package/dist/gateway/sdk/transport.d.ts +77 -0
- package/dist/gateway/sdk/transport.d.ts.map +1 -0
- package/dist/gateway/sdk/transport.js +81 -0
- package/dist/gateway/sdk/transport.js.map +1 -0
- package/dist/gateway/sdk/users.d.ts +15 -0
- package/dist/gateway/sdk/users.d.ts.map +1 -0
- package/dist/gateway/sdk/users.js +49 -0
- package/dist/gateway/sdk/users.js.map +1 -0
- package/dist/gateway/types/access.d.ts +32 -0
- package/dist/gateway/types/access.d.ts.map +1 -0
- package/dist/gateway/types/access.js +2 -0
- package/dist/gateway/types/access.js.map +1 -0
- package/dist/gateway/types/billing.d.ts +60 -0
- package/dist/gateway/types/billing.d.ts.map +1 -0
- package/dist/gateway/types/billing.js +2 -0
- package/dist/gateway/types/billing.js.map +1 -0
- package/dist/gateway/types/checkpoints.d.ts +84 -0
- package/dist/gateway/types/checkpoints.d.ts.map +1 -0
- package/dist/gateway/types/checkpoints.js +2 -0
- package/dist/gateway/types/checkpoints.js.map +1 -0
- package/dist/gateway/types/common.d.ts +13 -0
- package/dist/gateway/types/common.d.ts.map +1 -0
- package/dist/gateway/types/common.js +2 -0
- package/dist/gateway/types/common.js.map +1 -0
- package/dist/gateway/types/incidents.d.ts +53 -0
- package/dist/gateway/types/incidents.d.ts.map +1 -0
- package/dist/gateway/types/incidents.js +2 -0
- package/dist/gateway/types/incidents.js.map +1 -0
- package/dist/gateway/types/index.d.ts +12 -0
- package/dist/gateway/types/index.d.ts.map +1 -0
- package/dist/gateway/types/index.js +12 -0
- package/dist/gateway/types/index.js.map +1 -0
- package/dist/gateway/types/locations.d.ts +7 -0
- package/dist/gateway/types/locations.d.ts.map +1 -0
- package/dist/gateway/types/locations.js +2 -0
- package/dist/gateway/types/locations.js.map +1 -0
- package/dist/gateway/types/patrollers.d.ts +68 -0
- package/dist/gateway/types/patrollers.d.ts.map +1 -0
- package/dist/gateway/types/patrollers.js +15 -0
- package/dist/gateway/types/patrollers.js.map +1 -0
- package/dist/gateway/types/rounds.d.ts +89 -0
- package/dist/gateway/types/rounds.d.ts.map +1 -0
- package/dist/gateway/types/rounds.js +2 -0
- package/dist/gateway/types/rounds.js.map +1 -0
- package/dist/gateway/types/routes.d.ts +48 -0
- package/dist/gateway/types/routes.d.ts.map +1 -0
- package/dist/gateway/types/routes.js +2 -0
- package/dist/gateway/types/routes.js.map +1 -0
- package/dist/gateway/types/scans.d.ts +44 -0
- package/dist/gateway/types/scans.d.ts.map +1 -0
- package/dist/gateway/types/scans.js +2 -0
- package/dist/gateway/types/scans.js.map +1 -0
- package/dist/gateway/types/users.d.ts +32 -0
- package/dist/gateway/types/users.d.ts.map +1 -0
- package/dist/gateway/types/users.js +2 -0
- package/dist/gateway/types/users.js.map +1 -0
- package/dist/index.d.ts +32 -0
- package/dist/index.d.ts.map +1 -0
- package/dist/index.js +40 -0
- package/dist/index.js.map +1 -0
- package/dist/ports/FileSink.d.ts +20 -0
- package/dist/ports/FileSink.d.ts.map +1 -0
- package/dist/ports/FileSink.js +2 -0
- package/dist/ports/FileSink.js.map +1 -0
- package/dist/ports/Logger.d.ts +16 -0
- package/dist/ports/Logger.d.ts.map +1 -0
- package/dist/ports/Logger.js +7 -0
- package/dist/ports/Logger.js.map +1 -0
- package/dist/ports/PendingActionStore.d.ts +84 -0
- package/dist/ports/PendingActionStore.d.ts.map +1 -0
- package/dist/ports/PendingActionStore.js +16 -0
- package/dist/ports/PendingActionStore.js.map +1 -0
- package/dist/reads/access.d.ts +4 -0
- package/dist/reads/access.d.ts.map +1 -0
- package/dist/reads/access.js +129 -0
- package/dist/reads/access.js.map +1 -0
- package/dist/reads/checkpoints.d.ts +4 -0
- package/dist/reads/checkpoints.d.ts.map +1 -0
- package/dist/reads/checkpoints.js +152 -0
- package/dist/reads/checkpoints.js.map +1 -0
- package/dist/reads/files.d.ts +9 -0
- package/dist/reads/files.d.ts.map +1 -0
- package/dist/reads/files.js +222 -0
- package/dist/reads/files.js.map +1 -0
- package/dist/reads/incidents.d.ts +4 -0
- package/dist/reads/incidents.d.ts.map +1 -0
- package/dist/reads/incidents.js +159 -0
- package/dist/reads/incidents.js.map +1 -0
- package/dist/reads/index.d.ts +11 -0
- package/dist/reads/index.d.ts.map +1 -0
- package/dist/reads/index.js +51 -0
- package/dist/reads/index.js.map +1 -0
- package/dist/reads/onboarding.d.ts +4 -0
- package/dist/reads/onboarding.d.ts.map +1 -0
- package/dist/reads/onboarding.js +41 -0
- package/dist/reads/onboarding.js.map +1 -0
- package/dist/reads/organization.d.ts +26 -0
- package/dist/reads/organization.d.ts.map +1 -0
- package/dist/reads/organization.js +45 -0
- package/dist/reads/organization.js.map +1 -0
- package/dist/reads/patrollers.d.ts +11 -0
- package/dist/reads/patrollers.d.ts.map +1 -0
- package/dist/reads/patrollers.js +172 -0
- package/dist/reads/patrollers.js.map +1 -0
- package/dist/reads/plan.d.ts +4 -0
- package/dist/reads/plan.d.ts.map +1 -0
- package/dist/reads/plan.js +195 -0
- package/dist/reads/plan.js.map +1 -0
- package/dist/reads/rounds.d.ts +4 -0
- package/dist/reads/rounds.d.ts.map +1 -0
- package/dist/reads/rounds.js +160 -0
- package/dist/reads/rounds.js.map +1 -0
- package/dist/reads/routes.d.ts +4 -0
- package/dist/reads/routes.d.ts.map +1 -0
- package/dist/reads/routes.js +34 -0
- package/dist/reads/routes.js.map +1 -0
- package/dist/reads/support/access-locations.d.ts +22 -0
- package/dist/reads/support/access-locations.d.ts.map +1 -0
- package/dist/reads/support/access-locations.js +55 -0
- package/dist/reads/support/access-locations.js.map +1 -0
- package/dist/reads/support/excel.d.ts +10 -0
- package/dist/reads/support/excel.d.ts.map +1 -0
- package/dist/reads/support/excel.js +35 -0
- package/dist/reads/support/excel.js.map +1 -0
- package/dist/reads/support/params.d.ts +50 -0
- package/dist/reads/support/params.d.ts.map +1 -0
- package/dist/reads/support/params.js +73 -0
- package/dist/reads/support/params.js.map +1 -0
- package/dist/reads/support/resolve.d.ts +17 -0
- package/dist/reads/support/resolve.d.ts.map +1 -0
- package/dist/reads/support/resolve.js +33 -0
- package/dist/reads/support/resolve.js.map +1 -0
- package/dist/reads/support/results.d.ts +22 -0
- package/dist/reads/support/results.d.ts.map +1 -0
- package/dist/reads/support/results.js +41 -0
- package/dist/reads/support/results.js.map +1 -0
- package/dist/reads/support/roles.d.ts +13 -0
- package/dist/reads/support/roles.d.ts.map +1 -0
- package/dist/reads/support/roles.js +27 -0
- package/dist/reads/support/roles.js.map +1 -0
- package/dist/reads/support/scans.d.ts +31 -0
- package/dist/reads/support/scans.d.ts.map +1 -0
- package/dist/reads/support/scans.js +66 -0
- package/dist/reads/support/scans.js.map +1 -0
- package/dist/reads/types.d.ts +48 -0
- package/dist/reads/types.d.ts.map +1 -0
- package/dist/reads/types.js +5 -0
- package/dist/reads/types.js.map +1 -0
- package/dist/reads/users.d.ts +4 -0
- package/dist/reads/users.d.ts.map +1 -0
- package/dist/reads/users.js +57 -0
- package/dist/reads/users.js.map +1 -0
- package/dist/testing/FakePatrolTechGateway.d.ts +212 -0
- package/dist/testing/FakePatrolTechGateway.d.ts.map +1 -0
- package/dist/testing/FakePatrolTechGateway.js +712 -0
- package/dist/testing/FakePatrolTechGateway.js.map +1 -0
- package/dist/testing/RecordingFileSink.d.ts +12 -0
- package/dist/testing/RecordingFileSink.d.ts.map +1 -0
- package/dist/testing/RecordingFileSink.js +12 -0
- package/dist/testing/RecordingFileSink.js.map +1 -0
- package/dist/testing/index.d.ts +4 -0
- package/dist/testing/index.d.ts.map +1 -0
- package/dist/testing/index.js +4 -0
- package/dist/testing/index.js.map +1 -0
- package/dist/testing/reads.d.ts +34 -0
- package/dist/testing/reads.d.ts.map +1 -0
- package/dist/testing/reads.js +39 -0
- package/dist/testing/reads.js.map +1 -0
- package/package.json +76 -4
|
@@ -0,0 +1,129 @@
|
|
|
1
|
+
import { TIPO_ACCESO } from '../domain/access-logs-csv.js';
|
|
2
|
+
import { resolveDateRange } from '../domain/date-range.js';
|
|
3
|
+
import { fechaLocal } from '../domain/scans-csv.js';
|
|
4
|
+
import { ok } from '../domain/tool-result.js';
|
|
5
|
+
import { avisoUbicacionesSinLeer, porUbicacion, TIPO_PARAM, ubicacionesAccesos, } from './support/access-locations.js';
|
|
6
|
+
import { accesosParamSchema } from './support/params.js';
|
|
7
|
+
import { isFail } from './support/results.js';
|
|
8
|
+
import { DIA_MS } from './support/scans.js';
|
|
9
|
+
import { defineRead } from './types.js';
|
|
10
|
+
const accesosDesc = 'Historial del Control de Acceso (App de Control de Acceso): entradas y salidas de personas autorizadas y visitantes. Por defecto, las últimas 24 h de todas las ubicaciones. Devuelve los totales (entradas y salidas) y los 20 registros más recientes con hora LOCAL del cliente, tipo, quién, zona y ubicación. Con `solo_dentro: true`, quién ha entrado y aún no ha salido. Úsala para «¿quién ha entrado hoy?», «accesos de anoche», «¿quién está dentro?». Para el listado completo en Excel, enviar_excel_accesos. Nunca escribas en el chat el documento de un visitante.';
|
|
11
|
+
const ULTIMOS_ACCESOS = 20;
|
|
12
|
+
/** Quién, en una frase y SIN el documento del visitante. */
|
|
13
|
+
function quienAcceso(a) {
|
|
14
|
+
if (a.oculto)
|
|
15
|
+
return '(oculto por la retención de datos)';
|
|
16
|
+
if (a.persona)
|
|
17
|
+
return a.persona;
|
|
18
|
+
if (a.visitante) {
|
|
19
|
+
return `${a.visitante} (visitante${a.empresaVisitante ? `, ${a.empresaVisitante}` : ''})`;
|
|
20
|
+
}
|
|
21
|
+
return '(sin nombre)';
|
|
22
|
+
}
|
|
23
|
+
/** `YYYY-MM-DD HH:mm` en la hora del cliente. */
|
|
24
|
+
function horaLocal(iso, tz) {
|
|
25
|
+
return fechaLocal(iso, tz).slice(0, 16);
|
|
26
|
+
}
|
|
27
|
+
async function consultarAccesos(gateway, { org, token, tz }, args, { conExcel }) {
|
|
28
|
+
const u = await ubicacionesAccesos(gateway, org.orgId, token, args.ubicacion);
|
|
29
|
+
if (isFail(u))
|
|
30
|
+
return u;
|
|
31
|
+
const nombreDe = (id) => u.ubicaciones.find((l) => l.id === id)?.name ?? id;
|
|
32
|
+
if (args.solo_dentro) {
|
|
33
|
+
const r = await porUbicacion(u.ubicaciones, (l) => gateway.listActiveAccessEntries(l.id, token, args.zona));
|
|
34
|
+
if (isFail(r))
|
|
35
|
+
return r;
|
|
36
|
+
const activas = r.resultados
|
|
37
|
+
.flatMap((x) => x.valor)
|
|
38
|
+
.sort((a, b) => b.fecha.localeCompare(a.fecha));
|
|
39
|
+
// Una entrada sin salida de hace meses es una salida que no se registró, no alguien dentro
|
|
40
|
+
// (en staging, 17 «activas» de febrero y marzo): pasadas 24 h van aparte.
|
|
41
|
+
const limite = new Date(Date.now() - DIA_MS).toISOString();
|
|
42
|
+
const dentro = activas.filter((a) => a.fecha >= limite);
|
|
43
|
+
const antiguas = activas.filter((a) => a.fecha < limite);
|
|
44
|
+
const fila = (a) => ({
|
|
45
|
+
desde: horaLocal(a.fecha, tz),
|
|
46
|
+
quien: quienAcceso(a),
|
|
47
|
+
zona: a.zona,
|
|
48
|
+
ubicacion: nombreDe(a.locationId),
|
|
49
|
+
});
|
|
50
|
+
const avisos = [...u.avisos, ...avisoUbicacionesSinLeer(r.conError)];
|
|
51
|
+
if (antiguas.length > 0) {
|
|
52
|
+
avisos.push(`${antiguas.length} entrada(s) de hace más de 24 h siguen sin salida registrada (la más antigua, del ${horaLocal(antiguas[antiguas.length - 1].fecha, tz).slice(0, 10)}): ` +
|
|
53
|
+
'NO las cuentes como dentro ahora; lo más probable es que no se registrara la salida. Díselo así.');
|
|
54
|
+
}
|
|
55
|
+
return ok({
|
|
56
|
+
dentroAhora: dentro.length,
|
|
57
|
+
personas: dentro.slice(0, ULTIMOS_ACCESOS).map(fila),
|
|
58
|
+
...(antiguas.length > 0
|
|
59
|
+
? {
|
|
60
|
+
sinSalidaRegistrada: antiguas.length,
|
|
61
|
+
entradasSinSalida: antiguas.slice(0, ULTIMOS_ACCESOS).map(fila),
|
|
62
|
+
}
|
|
63
|
+
: {}),
|
|
64
|
+
}, { avisos });
|
|
65
|
+
}
|
|
66
|
+
// Sin periodo, las últimas 24 h (no «hoy»: a las 8:00 «hoy» se deja la noche fuera).
|
|
67
|
+
const ahora = new Date();
|
|
68
|
+
const rango = args.periodo || args.desde || args.hasta
|
|
69
|
+
? resolveDateRange(args.periodo, args.desde, args.hasta, ahora, tz)
|
|
70
|
+
: {
|
|
71
|
+
dateFrom: new Date(ahora.getTime() - DIA_MS).toISOString(),
|
|
72
|
+
dateTo: ahora.toISOString(),
|
|
73
|
+
avisos: undefined,
|
|
74
|
+
};
|
|
75
|
+
const tipo = args.tipo ? TIPO_PARAM[args.tipo] : undefined;
|
|
76
|
+
const base = { zona: args.zona, tipo, desde: rango.dateFrom, hasta: rango.dateTo };
|
|
77
|
+
const r = await porUbicacion(u.ubicaciones, async (l) => {
|
|
78
|
+
const pagina = await gateway.listAccessLogs({ ...base, locationId: l.id, page: 1, limit: ULTIMOS_ACCESOS }, token);
|
|
79
|
+
// Sin filtro de tipo, una consulta de 1 fila más da el total de entradas (las salidas son el resto).
|
|
80
|
+
const entradas = tipo
|
|
81
|
+
? tipo === 'ENTRY'
|
|
82
|
+
? pagina.total
|
|
83
|
+
: 0
|
|
84
|
+
: (await gateway.listAccessLogs({ ...base, locationId: l.id, tipo: 'ENTRY', page: 1, limit: 1 }, token)).total;
|
|
85
|
+
return { ...pagina, entradas };
|
|
86
|
+
});
|
|
87
|
+
if (isFail(r))
|
|
88
|
+
return r;
|
|
89
|
+
const total = r.resultados.reduce((n, x) => n + x.valor.total, 0);
|
|
90
|
+
const entradas = r.resultados.reduce((n, x) => n + x.valor.entradas, 0);
|
|
91
|
+
const ultimos = r.resultados
|
|
92
|
+
.flatMap((x) => x.valor.items)
|
|
93
|
+
.sort((a, b) => b.fecha.localeCompare(a.fecha))
|
|
94
|
+
.slice(0, ULTIMOS_ACCESOS)
|
|
95
|
+
.map((a) => ({
|
|
96
|
+
hora: horaLocal(a.fecha, tz),
|
|
97
|
+
tipo: TIPO_ACCESO[a.tipo],
|
|
98
|
+
quien: quienAcceso(a),
|
|
99
|
+
zona: a.zona,
|
|
100
|
+
ubicacion: nombreDe(a.locationId),
|
|
101
|
+
}));
|
|
102
|
+
const avisos = [...(rango.avisos ?? []), ...u.avisos, ...avisoUbicacionesSinLeer(r.conError)];
|
|
103
|
+
if (total > ULTIMOS_ACCESOS) {
|
|
104
|
+
avisos.push(`Hay ${total} registros: aquí van los ${ULTIMOS_ACCESOS} más recientes.${conExcel ? ' Si quiere verlos todos, ofrécele enviárselos en Excel con enviar_excel_accesos.' : ' El listado completo está en el panel (Control de Acceso).'}`);
|
|
105
|
+
}
|
|
106
|
+
if (total === 0 && args.zona) {
|
|
107
|
+
avisos.push('Ningún registro con esa zona: la zona tiene que escribirse como en el panel; compruébala con el cliente.');
|
|
108
|
+
}
|
|
109
|
+
return ok({
|
|
110
|
+
desde: rango.dateFrom ?? null,
|
|
111
|
+
hasta: rango.dateTo ?? null,
|
|
112
|
+
total,
|
|
113
|
+
entradas,
|
|
114
|
+
salidas: total - entradas,
|
|
115
|
+
ultimos,
|
|
116
|
+
}, { avisos });
|
|
117
|
+
}
|
|
118
|
+
/** Control de Acceso: entradas, salidas y quién está dentro. */
|
|
119
|
+
export function accessReads({ gateway, offerFiles }) {
|
|
120
|
+
return [
|
|
121
|
+
defineRead({
|
|
122
|
+
name: 'consultar_accesos',
|
|
123
|
+
description: accesosDesc,
|
|
124
|
+
params: accesosParamSchema,
|
|
125
|
+
call: async (ctx, args) => consultarAccesos(gateway, ctx, args, { conExcel: offerFiles }),
|
|
126
|
+
}),
|
|
127
|
+
];
|
|
128
|
+
}
|
|
129
|
+
//# sourceMappingURL=access.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"access.js","sourceRoot":"","sources":["../../src/reads/access.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,4 @@
|
|
|
1
|
+
import { type ReadCapability, type ReadEnv } from './types.js';
|
|
2
|
+
/** Checkpoints: los configurados, los que llevan más sin revisarse y sus escaneos. */
|
|
3
|
+
export declare function checkpointReads({ gateway }: ReadEnv): ReadCapability[];
|
|
4
|
+
//# sourceMappingURL=checkpoints.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"checkpoints.d.ts","sourceRoot":"","sources":["../../src/reads/checkpoints.ts"],"names":[],"mappings":"AAcA,OAAO,EAAsC,KAAK,cAAc,EAAE,KAAK,OAAO,EAAE,MAAM,YAAY,CAAC;AA4HnG,sFAAsF;AACtF,wBAAgB,eAAe,CAAC,EAAE,OAAO,EAAE,EAAE,OAAO,GAAG,cAAc,EAAE,CA2DtE"}
|
|
@@ -0,0 +1,152 @@
|
|
|
1
|
+
import { z } from 'zod';
|
|
2
|
+
import { resolveDateRange } from '../domain/date-range.js';
|
|
3
|
+
import { ok } from '../domain/tool-result.js';
|
|
4
|
+
import { scansFiltrosSchema } from './support/params.js';
|
|
5
|
+
import { resolveNamed, UBICACION } from './support/resolve.js';
|
|
6
|
+
import { avisosUbicaciones, avisoTruncado, isFail, okLista, TRUNCADO_HINT, } from './support/results.js';
|
|
7
|
+
import { DIA_MS, MAX_FILAS, paginarEscaneos, resolverFiltrosEscaneos } from './support/scans.js';
|
|
8
|
+
import { defineRead } from './types.js';
|
|
9
|
+
const checkpointsDesc = 'Lista TODOS los puntos de control (checkpoints) configurados en la organización, con su ubicación y su `identificador`: el código de 8 caracteres de la columna «Identificador» del panel, el que se teclea en el «Código manual» de la app. Úsala para saber qué checkpoints existen o cuando pidan los identificadores. Para saber cuáles NO se han revisado o llevan más tiempo sin escanearse, usa consultar_checkpoints_sin_revisar.' +
|
|
10
|
+
TRUNCADO_HINT;
|
|
11
|
+
const sinRevisarDesc = 'Checkpoints ordenados por los días que llevan sin escanearse: primero los que nunca se han escaneado y luego de más a menos días. Cada uno con su ubicación, `ultimoEscaneo` (UTC) y `diasSinEscanear`. Úsala para «¿qué checkpoints llevan más tiempo sin revisarse?», «¿qué puntos no se han hecho esta semana?». Con `alMenos: true` el último escaneo es más antiguo que lo que se ha podido leer: di «más de N días». Con `sinEscaneosVisibles: true` no hay ningún escaneo suyo visible (nunca, o anteriores a la retención de datos del plan).';
|
|
12
|
+
const scansDesc = 'Consulta los escaneos/fichajes registrados en la organización, con checkpoint, vigilante, fecha y si hay sospecha de fraude. Úsala cuando el usuario pida ver los últimos escaneos, fichajes recientes o detalle de actividad reciente. ADMITE FILTRO POR FECHA/PERIODO: el usuario puede pedir "hoy", "ayer", "última semana", "últimos 30 días", "todos" o un rango de fechas concreto (desde/hasta); pásaselo en los parámetros correspondientes en vez de decir que no puedes filtrar por fecha.' +
|
|
13
|
+
' ADMITE FILTROS: `vigilante`, `checkpoint` y `ubicacion` por su nombre, `solo_sospechosos` y `solo_no_validos` (rechazados); úsalos para «escaneos de Juan ayer», «los sospechosos de esta semana» o «los del almacén» en vez de traer los últimos de todos.' +
|
|
14
|
+
' Cada escaneo trae `validacion` (si es válido, está pendiente de revisión o se rechazó, con su motivo) y `motivosSospecha` (vacío si no es sospechoso). «Sospechoso» y «válido» son cosas distintas: un escaneo puede ser válido y a la vez sospechoso. Explica el estado y el motivo usando SOLO `validacion` y `motivosSospecha`; nunca adivines causas («duplicado», «problema de sincronización», «timing anomalies»…).' +
|
|
15
|
+
' Si vienen, cada escaneo trae también `dispositivo` (modelo, sistema, `bateriaPct`, `cargando`, `conexion`) y `distanciaGpsM`/`precisionGpsM` (metros al punto y precisión del GPS según la regla de proximidad). Si no vienen, no los supongas.' +
|
|
16
|
+
TRUNCADO_HINT;
|
|
17
|
+
async function checkpointsSinRevisar(gateway, { org, token }, args) {
|
|
18
|
+
const orgId = org.orgId;
|
|
19
|
+
const lista = await gateway.listCheckpoints(orgId, token);
|
|
20
|
+
let checkpoints = lista.items;
|
|
21
|
+
if (args.ubicacion) {
|
|
22
|
+
const ubicaciones = await gateway.listLocations(orgId, token);
|
|
23
|
+
const u = resolveNamed(args.ubicacion, ubicaciones, (l) => l.name, UBICACION);
|
|
24
|
+
if (isFail(u))
|
|
25
|
+
return u;
|
|
26
|
+
checkpoints = checkpoints.filter((c) => c.locationId === u.item.id);
|
|
27
|
+
}
|
|
28
|
+
// El escaneo solo trae el nombre del checkpoint: se busca ubicación a ubicación.
|
|
29
|
+
const clave = (locationId, nombre) => `${locationId}\u0000${nombre}`;
|
|
30
|
+
const ultimo = new Map();
|
|
31
|
+
const leidoHasta = new Map();
|
|
32
|
+
const sinLeer = new Set();
|
|
33
|
+
const porUbicacion = new Map();
|
|
34
|
+
for (const c of checkpoints) {
|
|
35
|
+
if (c.primerEscaneo === null)
|
|
36
|
+
continue; // nunca escaneado: lo dice el backend
|
|
37
|
+
porUbicacion.set(c.locationId, (porUbicacion.get(c.locationId) ?? new Set()).add(c.name));
|
|
38
|
+
}
|
|
39
|
+
// La API no da el último escaneo de cada checkpoint: se deduce de
|
|
40
|
+
// los escaneos más recientes, leyendo como mucho 2.000 (20 páginas) entre todas
|
|
41
|
+
// las ubicaciones; lo que no aparezca ahí se da como «al menos N días».
|
|
42
|
+
let presupuesto = MAX_FILAS;
|
|
43
|
+
let leidos = 0;
|
|
44
|
+
for (const [locationId, pendientes] of porUbicacion) {
|
|
45
|
+
if (presupuesto <= 0) {
|
|
46
|
+
sinLeer.add(locationId);
|
|
47
|
+
continue;
|
|
48
|
+
}
|
|
49
|
+
const { escaneos, hayMas } = await paginarEscaneos(gateway, orgId, token, { locationId }, {
|
|
50
|
+
maxFilas: presupuesto,
|
|
51
|
+
seguir: (pagina) => {
|
|
52
|
+
for (const s of pagina) {
|
|
53
|
+
if (s.checkpointName && pendientes.delete(s.checkpointName)) {
|
|
54
|
+
ultimo.set(clave(locationId, s.checkpointName), s.timestamp);
|
|
55
|
+
}
|
|
56
|
+
}
|
|
57
|
+
return pendientes.size > 0;
|
|
58
|
+
},
|
|
59
|
+
});
|
|
60
|
+
presupuesto -= escaneos.length;
|
|
61
|
+
leidos += escaneos.length;
|
|
62
|
+
const masAntiguo = escaneos.at(-1)?.timestamp;
|
|
63
|
+
if (pendientes.size > 0 && hayMas && masAntiguo)
|
|
64
|
+
leidoHasta.set(locationId, masAntiguo);
|
|
65
|
+
}
|
|
66
|
+
const ahora = Date.now();
|
|
67
|
+
const dias = (iso) => Math.floor((ahora - Date.parse(iso)) / DIA_MS);
|
|
68
|
+
const filas = checkpoints.map((c) => {
|
|
69
|
+
const base = {
|
|
70
|
+
checkpoint: c.name,
|
|
71
|
+
ubicacion: c.locationName,
|
|
72
|
+
ultimoEscaneo: null,
|
|
73
|
+
diasSinEscanear: null,
|
|
74
|
+
};
|
|
75
|
+
if (c.primerEscaneo === null)
|
|
76
|
+
return { ...base, nuncaEscaneado: true };
|
|
77
|
+
const u = ultimo.get(clave(c.locationId, c.name));
|
|
78
|
+
if (u)
|
|
79
|
+
return { ...base, ultimoEscaneo: u, diasSinEscanear: dias(u) };
|
|
80
|
+
const hasta = leidoHasta.get(c.locationId);
|
|
81
|
+
if (hasta)
|
|
82
|
+
return { ...base, diasSinEscanear: dias(hasta), alMenos: true };
|
|
83
|
+
if (sinLeer.has(c.locationId))
|
|
84
|
+
return { ...base, sinDatos: true };
|
|
85
|
+
return { ...base, sinEscaneosVisibles: true };
|
|
86
|
+
});
|
|
87
|
+
const prioridad = (f) => f.nuncaEscaneado ? 3 : f.sinEscaneosVisibles ? 2 : f.sinDatos ? 0 : 1;
|
|
88
|
+
const ordenadas = filas
|
|
89
|
+
.filter((f) => !args.dias_minimos ||
|
|
90
|
+
f.diasSinEscanear === null ||
|
|
91
|
+
f.alMenos === true ||
|
|
92
|
+
f.diasSinEscanear >= args.dias_minimos)
|
|
93
|
+
.sort((a, b) => prioridad(b) - prioridad(a) || (b.diasSinEscanear ?? 0) - (a.diasSinEscanear ?? 0));
|
|
94
|
+
const avisos = avisosUbicaciones(lista.ubicacionesConError);
|
|
95
|
+
if (lista.truncado)
|
|
96
|
+
avisos.push(avisoTruncado(lista.items.length, lista.total, 'checkpoints'));
|
|
97
|
+
if (leidoHasta.size > 0 || sinLeer.size > 0) {
|
|
98
|
+
avisos.push(`Se han leído los ${leidos} escaneos más recientes: los que traen \`alMenos: true\` llevan COMO MÍNIMO esos días sin escanearse, y los que traen \`sinDatos: true\` no se han podido comprobar (acota con \`ubicacion\`).`);
|
|
99
|
+
}
|
|
100
|
+
return ok({ checkpoints: ordenadas }, { truncado: lista.truncado || sinLeer.size > 0, avisos });
|
|
101
|
+
}
|
|
102
|
+
/** Checkpoints: los configurados, los que llevan más sin revisarse y sus escaneos. */
|
|
103
|
+
export function checkpointReads({ gateway }) {
|
|
104
|
+
return [
|
|
105
|
+
defineRead({
|
|
106
|
+
name: 'consultar_ultimos_scans',
|
|
107
|
+
description: scansDesc,
|
|
108
|
+
params: scansFiltrosSchema,
|
|
109
|
+
call: async ({ org, token, tz }, args) => {
|
|
110
|
+
const filtros = await resolverFiltrosEscaneos(gateway, org.orgId, token, args);
|
|
111
|
+
if (isFail(filtros))
|
|
112
|
+
return filtros;
|
|
113
|
+
const { dateFrom, dateTo, limit, avisos } = resolveDateRange(args.periodo, args.desde, args.hasta, new Date(), tz);
|
|
114
|
+
const scans = await gateway.getRecentScans(org.orgId, token, {
|
|
115
|
+
limit,
|
|
116
|
+
dateFrom,
|
|
117
|
+
dateTo,
|
|
118
|
+
...filtros,
|
|
119
|
+
});
|
|
120
|
+
return okLista(scans, 'escaneos', avisos ?? []);
|
|
121
|
+
},
|
|
122
|
+
}),
|
|
123
|
+
defineRead({
|
|
124
|
+
name: 'obtener_checkpoints',
|
|
125
|
+
description: checkpointsDesc,
|
|
126
|
+
params: {},
|
|
127
|
+
call: async ({ org, token }) => {
|
|
128
|
+
const checkpoints = await gateway.getCheckpoints(org.orgId, token);
|
|
129
|
+
return okLista(checkpoints, 'checkpoints', avisosUbicaciones(checkpoints.ubicacionesConError));
|
|
130
|
+
},
|
|
131
|
+
}),
|
|
132
|
+
defineRead({
|
|
133
|
+
name: 'consultar_checkpoints_sin_revisar',
|
|
134
|
+
description: sinRevisarDesc,
|
|
135
|
+
params: {
|
|
136
|
+
ubicacion: z
|
|
137
|
+
.string()
|
|
138
|
+
.min(1)
|
|
139
|
+
.optional()
|
|
140
|
+
.describe('Solo los checkpoints de esa ubicación. OMÍTELO para todas.'),
|
|
141
|
+
dias_minimos: z
|
|
142
|
+
.number()
|
|
143
|
+
.int()
|
|
144
|
+
.min(1)
|
|
145
|
+
.optional()
|
|
146
|
+
.describe('Solo los que llevan al menos estos días sin escanearse. OMÍTELO para verlos todos.'),
|
|
147
|
+
},
|
|
148
|
+
call: async (ctx, args) => checkpointsSinRevisar(gateway, ctx, args),
|
|
149
|
+
}),
|
|
150
|
+
];
|
|
151
|
+
}
|
|
152
|
+
//# sourceMappingURL=checkpoints.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"checkpoints.js","sourceRoot":"","sources":["../../src/reads/checkpoints.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,9 @@
|
|
|
1
|
+
import { type ReadCapability, type ReadEnv } from './types.js';
|
|
2
|
+
/** Lo que se le dice al modelo si la llamada no trae dónde dejar el fichero. */
|
|
3
|
+
export declare const SIN_FICHEROS = "No puedo enviar ficheros en esta conversaci\u00F3n: no se ha enviado nada. Dale los datos en texto o rem\u00EDtele al panel.";
|
|
4
|
+
/**
|
|
5
|
+
* Ficheros al cliente (QR y Excel): solo existen con `offerFiles`, y cada
|
|
6
|
+
* llamada los deja en SU `ctx.files`; sin él, falla sin consultar nada.
|
|
7
|
+
*/
|
|
8
|
+
export declare function fileReads({ gateway }: ReadEnv): ReadCapability[];
|
|
9
|
+
//# sourceMappingURL=files.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"files.d.ts","sourceRoot":"","sources":["../../src/reads/files.ts"],"names":[],"mappings":"AA6BA,OAAO,EAAsC,KAAK,cAAc,EAAE,KAAK,OAAO,EAAE,MAAM,YAAY,CAAC;AAgNnG,gFAAgF;AAChF,eAAO,MAAM,YAAY,iIAC6F,CAAC;AAEvH;;;GAGG;AACH,wBAAgB,SAAS,CAAC,EAAE,OAAO,EAAE,EAAE,OAAO,GAAG,cAAc,EAAE,CAuDhE"}
|
|
@@ -0,0 +1,222 @@
|
|
|
1
|
+
import { z } from 'zod';
|
|
2
|
+
import { accessLogsCsv } from '../domain/access-logs-csv.js';
|
|
3
|
+
import { resolveDateRange } from '../domain/date-range.js';
|
|
4
|
+
import { checkpointQrImage } from '../domain/qr-image.js';
|
|
5
|
+
import { scansCsv } from '../domain/scans-csv.js';
|
|
6
|
+
import { fail, ok } from '../domain/tool-result.js';
|
|
7
|
+
import { avisoUbicacionesSinLeer, porUbicacion, TIPO_PARAM, ubicacionesAccesos, } from './support/access-locations.js';
|
|
8
|
+
import { enviarCsv, validarPeriodoExcel } from './support/excel.js';
|
|
9
|
+
import { accesosParamSchema, fechaSchema, scansFiltrosSchema } from './support/params.js';
|
|
10
|
+
import { CHECKPOINT, etiquetaCheckpoint, resolveNamed, UBICACION } from './support/resolve.js';
|
|
11
|
+
import { isFail } from './support/results.js';
|
|
12
|
+
import { MAX_FILAS, TAM_PAGINA, paginarEscaneos, resolverFiltrosEscaneos, } from './support/scans.js';
|
|
13
|
+
import { defineRead } from './types.js';
|
|
14
|
+
const enviarQrDesc = 'Envía al cliente, por este chat, la imagen del QR de un checkpoint existente (con su nombre y código al pie) para imprimirlo. Úsala cuando pida el QR o el código de un checkpoint. Si el nombre es ambiguo o hay varias ubicaciones, pasa `ubicacion`. Solo un Editor o Admin de esa ubicación puede ver el código: si no lo tiene, explícale que se lo pida a un editor. Si devuelve `enviado: true`, la imagen YA le ha llegado: no la describas ni repitas el código, confirma en una frase. Si es de código manual, devuelve el código para dárselo en texto. Trae también el `identificador` (columna «Identificador» del panel) si lo piden.';
|
|
15
|
+
const excelDesc = 'Envía al cliente, por este chat, un fichero con los escaneos de un periodo (máximo 31 días) para abrirlo con Excel: fecha y hora, vigilante, checkpoint, ubicación, validación, sospecha, distancia GPS, dispositivo y batería. Úsala cuando pida los escaneos «en Excel», «en un fichero» o «para descargar», o cuando el Excel del panel le dé problemas. Admite los mismos filtros que consultar_ultimos_scans. Para un mes más largo que 31 días o «todo el año», pídelo por meses. Si devuelve `enviado: true`, el fichero YA le ha llegado: no repitas los datos, confírmalo en una frase.';
|
|
16
|
+
const excelAccesosDesc = 'Envía al cliente, por este chat, un fichero para Excel con los registros del Control de Acceso de un periodo (máximo 31 días): fecha y hora, tipo, ubicación, zona, persona autorizada e identificador, visitante con su documento y empresa, destino y notas (lo mismo que la tabla del panel). Úsala cuando pida los accesos «en Excel» o cuando consultar_accesos tenga muchos registros. Si devuelve `enviado: true`, el fichero YA le ha llegado: confírmalo en una frase sin repetir los datos.';
|
|
17
|
+
const excelParamSchema = {
|
|
18
|
+
desde: fechaSchema('Primer día del periodo'),
|
|
19
|
+
hasta: fechaSchema('Último día del periodo (inclusive; máximo 31 días después de «desde»)'),
|
|
20
|
+
vigilante: scansFiltrosSchema.vigilante,
|
|
21
|
+
checkpoint: scansFiltrosSchema.checkpoint,
|
|
22
|
+
ubicacion: scansFiltrosSchema.ubicacion,
|
|
23
|
+
solo_sospechosos: scansFiltrosSchema.solo_sospechosos,
|
|
24
|
+
solo_no_validos: scansFiltrosSchema.solo_no_validos,
|
|
25
|
+
};
|
|
26
|
+
const excelAccesosParamSchema = {
|
|
27
|
+
desde: fechaSchema('Primer día del periodo'),
|
|
28
|
+
hasta: fechaSchema('Último día del periodo (inclusive; máximo 31 días después de «desde»)'),
|
|
29
|
+
ubicacion: accesosParamSchema.ubicacion,
|
|
30
|
+
zona: accesosParamSchema.zona,
|
|
31
|
+
tipo: accesosParamSchema.tipo,
|
|
32
|
+
};
|
|
33
|
+
/**
|
|
34
|
+
* El código solo viene si el usuario es EDITOR de la ubicación del checkpoint;
|
|
35
|
+
* sin él no hay QR que generar (el mismo criterio que el panel: un Viewer no
|
|
36
|
+
* imprime QR).
|
|
37
|
+
*/
|
|
38
|
+
async function enviarQr(cp, files) {
|
|
39
|
+
if (cp.metodo !== 'qr_static' && cp.metodo !== 'manual_code') {
|
|
40
|
+
return fail(`«${cp.name}» no se marca con QR ni con código manual (método: ${cp.metodo ?? 'ninguno'}), así que no tiene QR que enviar.`);
|
|
41
|
+
}
|
|
42
|
+
if (!cp.codigo) {
|
|
43
|
+
return fail(`Tu usuario no puede ver el código de «${cp.name}»: solo lo ve un Editor o Admin de la ubicación «${cp.locationName}». Pídeselo a un editor, que puede imprimirlo en Checkpoints → Imprimir QR.`);
|
|
44
|
+
}
|
|
45
|
+
const identificador = cp.identificador ? { identificador: cp.identificador } : {};
|
|
46
|
+
if (cp.metodo === 'manual_code') {
|
|
47
|
+
return ok({
|
|
48
|
+
enviado: false,
|
|
49
|
+
nombre: cp.name,
|
|
50
|
+
metodo: 'codigo_manual',
|
|
51
|
+
codigo: cp.codigo,
|
|
52
|
+
...identificador,
|
|
53
|
+
}, {
|
|
54
|
+
avisos: [
|
|
55
|
+
'Este checkpoint es de código manual, no de QR: dale el código en texto; el vigilante lo teclea en la app.',
|
|
56
|
+
],
|
|
57
|
+
});
|
|
58
|
+
}
|
|
59
|
+
const { png, caption } = await checkpointQrImage({ code: cp.codigo, name: cp.name });
|
|
60
|
+
await files.sendImage({ png, caption });
|
|
61
|
+
return ok({ enviado: true, nombre: cp.name, codigo: cp.codigo, ...identificador });
|
|
62
|
+
}
|
|
63
|
+
/**
|
|
64
|
+
* Los escaneos del periodo en un CSV para Excel, enviado como documento. La
|
|
65
|
+
* lista de escaneos no trae la ubicación: se deduce del nombre del checkpoint
|
|
66
|
+
* (si ese nombre está en varias ubicaciones, se ponen todas).
|
|
67
|
+
*/
|
|
68
|
+
async function enviarExcelEscaneos(gateway, files, { org, token, tz }, args) {
|
|
69
|
+
const periodoMalo = validarPeriodoExcel(args.desde, args.hasta);
|
|
70
|
+
if (periodoMalo)
|
|
71
|
+
return periodoMalo;
|
|
72
|
+
const orgId = org.orgId;
|
|
73
|
+
const filtros = await resolverFiltrosEscaneos(gateway, orgId, token, args);
|
|
74
|
+
if (isFail(filtros))
|
|
75
|
+
return filtros;
|
|
76
|
+
const { dateFrom, dateTo } = resolveDateRange(undefined, args.desde, args.hasta, new Date(), tz);
|
|
77
|
+
const { escaneos, hayMas } = await paginarEscaneos(gateway, orgId, token, {
|
|
78
|
+
...filtros,
|
|
79
|
+
dateFrom,
|
|
80
|
+
dateTo,
|
|
81
|
+
});
|
|
82
|
+
const periodo = { desde: args.desde, hasta: args.hasta };
|
|
83
|
+
if (escaneos.length === 0) {
|
|
84
|
+
return ok({ enviado: false, filas: 0, periodo }, {
|
|
85
|
+
avisos: [
|
|
86
|
+
'No hay escaneos con esos filtros en ese periodo: no se ha enviado ningún fichero.',
|
|
87
|
+
],
|
|
88
|
+
});
|
|
89
|
+
}
|
|
90
|
+
const ubicaciones = new Map();
|
|
91
|
+
for (const c of (await gateway.listCheckpoints(orgId, token)).items) {
|
|
92
|
+
ubicaciones.set(c.name, (ubicaciones.get(c.name) ?? new Set()).add(c.locationName));
|
|
93
|
+
}
|
|
94
|
+
const bytes = scansCsv(escaneos, {
|
|
95
|
+
tz,
|
|
96
|
+
ubicacionDe: (s) => [...(ubicaciones.get(s.checkpointName ?? '') ?? [])].join(' / '),
|
|
97
|
+
});
|
|
98
|
+
await enviarCsv(files, bytes, `escaneos_${args.desde}_${args.hasta}.csv`, `Escaneos del ${args.desde} al ${args.hasta} (${escaneos.length} filas). Se abre con Excel.`);
|
|
99
|
+
const avisos = hayMas
|
|
100
|
+
? [
|
|
101
|
+
`El fichero tiene los ${MAX_FILAS} escaneos más recientes del periodo: hay más. Díselo y ofrécele acotar las fechas o los filtros.`,
|
|
102
|
+
]
|
|
103
|
+
: [];
|
|
104
|
+
return ok({ enviado: true, filas: escaneos.length, periodo }, { truncado: hayMas, avisos });
|
|
105
|
+
}
|
|
106
|
+
async function enviarExcelAccesos(gateway, files, { org, token, tz }, args) {
|
|
107
|
+
const periodoMalo = validarPeriodoExcel(args.desde, args.hasta);
|
|
108
|
+
if (periodoMalo)
|
|
109
|
+
return periodoMalo;
|
|
110
|
+
const u = await ubicacionesAccesos(gateway, org.orgId, token, args.ubicacion);
|
|
111
|
+
if (isFail(u))
|
|
112
|
+
return u;
|
|
113
|
+
const { dateFrom, dateTo } = resolveDateRange(undefined, args.desde, args.hasta, new Date(), tz);
|
|
114
|
+
const tipo = args.tipo ? TIPO_PARAM[args.tipo] : undefined;
|
|
115
|
+
const query = { zona: args.zona, tipo, desde: dateFrom, hasta: dateTo };
|
|
116
|
+
// Mismo tope que el Excel de escaneos, repartido entre las ubicaciones en orden.
|
|
117
|
+
let presupuesto = MAX_FILAS;
|
|
118
|
+
// Objeto y no `let`: se marca dentro del recorrido de ubicaciones.
|
|
119
|
+
const corte = { hayMas: false };
|
|
120
|
+
const r = await porUbicacion(u.ubicaciones, async (l) => {
|
|
121
|
+
const filas = [];
|
|
122
|
+
if (presupuesto <= 0) {
|
|
123
|
+
// Tope ya lleno: solo hay «más» si esta ubicación tiene alguno (con justo 2000 se avisaba en falso).
|
|
124
|
+
const resto = await gateway.listAccessLogs({ ...query, locationId: l.id, page: 1, limit: 1 }, token);
|
|
125
|
+
if (resto.total > 0)
|
|
126
|
+
corte.hayMas = true;
|
|
127
|
+
return filas;
|
|
128
|
+
}
|
|
129
|
+
for (let page = 1;; page++) {
|
|
130
|
+
const { items, total } = await gateway.listAccessLogs({ ...query, locationId: l.id, page, limit: TAM_PAGINA }, token);
|
|
131
|
+
const tomadas = items.slice(0, presupuesto);
|
|
132
|
+
filas.push(...tomadas);
|
|
133
|
+
presupuesto -= tomadas.length;
|
|
134
|
+
const quedan = tomadas.length < items.length || (items.length === TAM_PAGINA && page * TAM_PAGINA < total);
|
|
135
|
+
if (!quedan)
|
|
136
|
+
return filas;
|
|
137
|
+
if (presupuesto <= 0) {
|
|
138
|
+
corte.hayMas = true;
|
|
139
|
+
return filas;
|
|
140
|
+
}
|
|
141
|
+
}
|
|
142
|
+
});
|
|
143
|
+
if (isFail(r))
|
|
144
|
+
return r;
|
|
145
|
+
const registros = r.resultados
|
|
146
|
+
.flatMap((x) => x.valor)
|
|
147
|
+
.sort((a, b) => b.fecha.localeCompare(a.fecha));
|
|
148
|
+
const periodo = { desde: args.desde, hasta: args.hasta };
|
|
149
|
+
const avisos = [...u.avisos, ...avisoUbicacionesSinLeer(r.conError)];
|
|
150
|
+
if (registros.length === 0) {
|
|
151
|
+
return ok({ enviado: false, filas: 0, periodo }, {
|
|
152
|
+
avisos: [
|
|
153
|
+
...avisos,
|
|
154
|
+
'No hay registros de acceso con esos filtros en ese periodo: no se ha enviado ningún fichero.',
|
|
155
|
+
],
|
|
156
|
+
});
|
|
157
|
+
}
|
|
158
|
+
const nombres = new Map(u.ubicaciones.map((l) => [l.id, l.name]));
|
|
159
|
+
const bytes = accessLogsCsv(registros, {
|
|
160
|
+
tz,
|
|
161
|
+
ubicacionDe: (a) => nombres.get(a.locationId) ?? '',
|
|
162
|
+
});
|
|
163
|
+
await enviarCsv(files, bytes, `accesos_${args.desde}_${args.hasta}.csv`, `Accesos del ${args.desde} al ${args.hasta} (${registros.length} filas). Se abre con Excel.`);
|
|
164
|
+
if (corte.hayMas) {
|
|
165
|
+
avisos.push(`El fichero tiene ${MAX_FILAS} registros y hay más: díselo y ofrécele acotar las fechas, la ubicación o la zona.`);
|
|
166
|
+
}
|
|
167
|
+
return ok({ enviado: true, filas: registros.length, periodo }, { truncado: corte.hayMas, avisos });
|
|
168
|
+
}
|
|
169
|
+
/** Lo que se le dice al modelo si la llamada no trae dónde dejar el fichero. */
|
|
170
|
+
export const SIN_FICHEROS = 'No puedo enviar ficheros en esta conversación: no se ha enviado nada. Dale los datos en texto o remítele al panel.';
|
|
171
|
+
/**
|
|
172
|
+
* Ficheros al cliente (QR y Excel): solo existen con `offerFiles`, y cada
|
|
173
|
+
* llamada los deja en SU `ctx.files`; sin él, falla sin consultar nada.
|
|
174
|
+
*/
|
|
175
|
+
export function fileReads({ gateway }) {
|
|
176
|
+
return [
|
|
177
|
+
defineRead({
|
|
178
|
+
name: 'enviar_qr_checkpoint',
|
|
179
|
+
description: enviarQrDesc,
|
|
180
|
+
params: {
|
|
181
|
+
checkpoint: z.string().min(1).describe('Nombre del checkpoint'),
|
|
182
|
+
ubicacion: z
|
|
183
|
+
.string()
|
|
184
|
+
.min(1)
|
|
185
|
+
.optional()
|
|
186
|
+
.describe('Nombre de la ubicación, si hay varios checkpoints con ese nombre. OMÍTELO si no hace falta.'),
|
|
187
|
+
},
|
|
188
|
+
call: async ({ org, token, files }, { checkpoint, ubicacion }) => {
|
|
189
|
+
if (!files)
|
|
190
|
+
return fail(SIN_FICHEROS);
|
|
191
|
+
const { items } = await gateway.listCheckpoints(org.orgId, token);
|
|
192
|
+
let candidatos = items;
|
|
193
|
+
if (ubicacion) {
|
|
194
|
+
const ubicaciones = [
|
|
195
|
+
...new Map(items.map((c) => [c.locationId, { id: c.locationId, name: c.locationName }])).values(),
|
|
196
|
+
];
|
|
197
|
+
const u = resolveNamed(ubicacion, ubicaciones, (l) => l.name, UBICACION);
|
|
198
|
+
if (isFail(u))
|
|
199
|
+
return u;
|
|
200
|
+
candidatos = items.filter((c) => c.locationId === u.item.id);
|
|
201
|
+
}
|
|
202
|
+
const r = resolveNamed(checkpoint, candidatos, (c) => c.name, CHECKPOINT, etiquetaCheckpoint);
|
|
203
|
+
if (isFail(r))
|
|
204
|
+
return r;
|
|
205
|
+
return enviarQr(r.item, files);
|
|
206
|
+
},
|
|
207
|
+
}),
|
|
208
|
+
defineRead({
|
|
209
|
+
name: 'enviar_excel_escaneos',
|
|
210
|
+
description: excelDesc,
|
|
211
|
+
params: excelParamSchema,
|
|
212
|
+
call: async (ctx, args) => ctx.files ? enviarExcelEscaneos(gateway, ctx.files, ctx, args) : fail(SIN_FICHEROS),
|
|
213
|
+
}),
|
|
214
|
+
defineRead({
|
|
215
|
+
name: 'enviar_excel_accesos',
|
|
216
|
+
description: excelAccesosDesc,
|
|
217
|
+
params: excelAccesosParamSchema,
|
|
218
|
+
call: async (ctx, args) => ctx.files ? enviarExcelAccesos(gateway, ctx.files, ctx, args) : fail(SIN_FICHEROS),
|
|
219
|
+
}),
|
|
220
|
+
];
|
|
221
|
+
}
|
|
222
|
+
//# sourceMappingURL=files.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"files.js","sourceRoot":"","sources":["../../src/reads/files.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,CAAC,EAAE,MAAM,KAAK,CAAC;AACxB,OAAO,EAAE,aAAa,EAAE,MAAM,8BAA8B,CAAC;AAC7D,OAAO,EAAE,gBAAgB,EAAE,MAAM,yBAAyB,CAAC;AAC3D,OAAO,EAAE,iBAAiB,EAAE,MAAM,uBAAuB,CAAC;AAC1D,OAAO,EAAE,QAAQ,EAAE,MAAM,wBAAwB,CAAC;AAClD,OAAO,EAAE,IAAI,EAAE,EAAE,EAAmB,MAAM,0BAA0B,CAAC;AAQrE,OAAO,EACL,uBAAuB,EACvB,YAAY,EACZ,UAAU,EACV,kBAAkB,GACnB,MAAM,+BAA+B,CAAC;AACvC,OAAO,EAAE,SAAS,EAAE,mBAAmB,EAAE,MAAM,oBAAoB,CAAC;AACpE,OAAO,EAAE,kBAAkB,EAAE,WAAW,EAAE,kBAAkB,EAAE,MAAM,qBAAqB,CAAC;AAC1F,OAAO,EAAE,UAAU,EAAE,kBAAkB,EAAE,YAAY,EAAE,SAAS,EAAE,MAAM,sBAAsB,CAAC;AAC/F,OAAO,EAAE,MAAM,EAAE,MAAM,sBAAsB,CAAC;AAC9C,OAAO,EACL,SAAS,EACT,UAAU,EACV,eAAe,EACf,uBAAuB,GACxB,MAAM,oBAAoB,CAAC;AAC5B,OAAO,EAAE,UAAU,EAA6D,MAAM,YAAY,CAAC;AAEnG,MAAM,YAAY,GAChB,qnBAAqnB,CAAC;AACxnB,MAAM,SAAS,GACb,kkBAAkkB,CAAC;AACrkB,MAAM,gBAAgB,GACpB,ueAAue,CAAC;AAE1e,MAAM,gBAAgB,GAAG;IACvB,KAAK,EAAE,WAAW,CAAC,wBAAwB,CAAC;IAC5C,KAAK,EAAE,WAAW,CAAC,uEAAuE,CAAC;IAC3F,SAAS,EAAE,kBAAkB,CAAC,SAAS;IACvC,UAAU,EAAE,kBAAkB,CAAC,UAAU;IACzC,SAAS,EAAE,kBAAkB,CAAC,SAAS;IACvC,gBAAgB,EAAE,kBAAkB,CAAC,gBAAgB;IACrD,eAAe,EAAE,kBAAkB,CAAC,eAAe;CACpD,CAAC;AACF,MAAM,uBAAuB,GAAG;IAC9B,KAAK,EAAE,WAAW,CAAC,wBAAwB,CAAC;IAC5C,KAAK,EAAE,WAAW,CAAC,uEAAuE,CAAC;IAC3F,SAAS,EAAE,kBAAkB,CAAC,SAAS;IACvC,IAAI,EAAE,kBAAkB,CAAC,IAAI;IAC7B,IAAI,EAAE,kBAAkB,CAAC,IAAI;CAC9B,CAAC;AAEF;;;;GAIG;AACH,KAAK,UAAU,QAAQ,CAAC,EAAiB,EAAE,KAAe;IACxD,IAAI,EAAE,CAAC,MAAM,KAAK,WAAW,IAAI,EAAE,CAAC,MAAM,KAAK,aAAa,EAAE,CAAC;QAC7D,OAAO,IAAI,CACT,IAAI,EAAE,CAAC,IAAI,sDAAsD,EAAE,CAAC,MAAM,IAAI,SAAS,oCAAoC,CAC5H,CAAC;IACJ,CAAC;IACD,IAAI,CAAC,EAAE,CAAC,MAAM,EAAE,CAAC;QACf,OAAO,IAAI,CACT,yCAAyC,EAAE,CAAC,IAAI,oDAAoD,EAAE,CAAC,YAAY,6EAA6E,CACjM,CAAC;IACJ,CAAC;IACD,MAAM,aAAa,GAAG,EAAE,CAAC,aAAa,CAAC,CAAC,CAAC,EAAE,aAAa,EAAE,EAAE,CAAC,aAAa,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC;IAClF,IAAI,EAAE,CAAC,MAAM,KAAK,aAAa,EAAE,CAAC;QAChC,OAAO,EAAE,CACP;YACE,OAAO,EAAE,KAAK;YACd,MAAM,EAAE,EAAE,CAAC,IAAI;YACf,MAAM,EAAE,eAAe;YACvB,MAAM,EAAE,EAAE,CAAC,MAAM;YACjB,GAAG,aAAa;SACjB,EACD;YACE,MAAM,EAAE;gBACN,2GAA2G;aAC5G;SACF,CACF,CAAC;IACJ,CAAC;IACD,MAAM,EAAE,GAAG,EAAE,OAAO,EAAE,GAAG,MAAM,iBAAiB,CAAC,EAAE,IAAI,EAAE,EAAE,CAAC,MAAM,EAAE,IAAI,EAAE,EAAE,CAAC,IAAI,EAAE,CAAC,CAAC;IACrF,MAAM,KAAK,CAAC,SAAS,CAAC,EAAE,GAAG,EAAE,OAAO,EAAE,CAAC,CAAC;IACxC,OAAO,EAAE,CAAC,EAAE,OAAO,EAAE,IAAI,EAAE,MAAM,EAAE,EAAE,CAAC,IAAI,EAAE,MAAM,EAAE,EAAE,CAAC,MAAM,EAAE,GAAG,aAAa,EAAE,CAAC,CAAC;AACrF,CAAC;AAED;;;;GAIG;AACH,KAAK,UAAU,mBAAmB,CAChC,OAA0B,EAC1B,KAAe,EACf,EAAE,GAAG,EAAE,KAAK,EAAE,EAAE,EAAqB,EACrC,IAAmD;IAEnD,MAAM,WAAW,GAAG,mBAAmB,CAAC,IAAI,CAAC,KAAK,EAAE,IAAI,CAAC,KAAK,CAAC,CAAC;IAChE,IAAI,WAAW;QAAE,OAAO,WAAW,CAAC;IAEpC,MAAM,KAAK,GAAG,GAAG,CAAC,KAAK,CAAC;IACxB,MAAM,OAAO,GAAG,MAAM,uBAAuB,CAAC,OAAO,EAAE,KAAK,EAAE,KAAK,EAAE,IAAI,CAAC,CAAC;IAC3E,IAAI,MAAM,CAAC,OAAO,CAAC;QAAE,OAAO,OAAO,CAAC;IACpC,MAAM,EAAE,QAAQ,EAAE,MAAM,EAAE,GAAG,gBAAgB,CAAC,SAAS,EAAE,IAAI,CAAC,KAAK,EAAE,IAAI,CAAC,KAAK,EAAE,IAAI,IAAI,EAAE,EAAE,EAAE,CAAC,CAAC;IAEjG,MAAM,EAAE,QAAQ,EAAE,MAAM,EAAE,GAAG,MAAM,eAAe,CAAC,OAAO,EAAE,KAAK,EAAE,KAAK,EAAE;QACxE,GAAG,OAAO;QACV,QAAQ;QACR,MAAM;KACP,CAAC,CAAC;IACH,MAAM,OAAO,GAAG,EAAE,KAAK,EAAE,IAAI,CAAC,KAAK,EAAE,KAAK,EAAE,IAAI,CAAC,KAAK,EAAE,CAAC;IACzD,IAAI,QAAQ,CAAC,MAAM,KAAK,CAAC,EAAE,CAAC;QAC1B,OAAO,EAAE,CACP,EAAE,OAAO,EAAE,KAAK,EAAE,KAAK,EAAE,CAAC,EAAE,OAAO,EAAE,EACrC;YACE,MAAM,EAAE;gBACN,mFAAmF;aACpF;SACF,CACF,CAAC;IACJ,CAAC;IAED,MAAM,WAAW,GAAG,IAAI,GAAG,EAAuB,CAAC;IACnD,KAAK,MAAM,CAAC,IAAI,CAAC,MAAM,OAAO,CAAC,eAAe,CAAC,KAAK,EAAE,KAAK,CAAC,CAAC,CAAC,KAAK,EAAE,CAAC;QACpE,WAAW,CAAC,GAAG,CAAC,CAAC,CAAC,IAAI,EAAE,CAAC,WAAW,CAAC,GAAG,CAAC,CAAC,CAAC,IAAI,CAAC,IAAI,IAAI,GAAG,EAAE,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,YAAY,CAAC,CAAC,CAAC;IACtF,CAAC;IACD,MAAM,KAAK,GAAG,QAAQ,CAAC,QAAQ,EAAE;QAC/B,EAAE;QACF,WAAW,EAAE,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,GAAG,CAAC,WAAW,CAAC,GAAG,CAAC,CAAC,CAAC,cAAc,IAAI,EAAE,CAAC,IAAI,EAAE,CAAC,CAAC,CAAC,IAAI,CAAC,KAAK,CAAC;KACrF,CAAC,CAAC;IACH,MAAM,SAAS,CACb,KAAK,EACL,KAAK,EACL,YAAY,IAAI,CAAC,KAAK,IAAI,IAAI,CAAC,KAAK,MAAM,EAC1C,gBAAgB,IAAI,CAAC,KAAK,OAAO,IAAI,CAAC,KAAK,KAAK,QAAQ,CAAC,MAAM,6BAA6B,CAC7F,CAAC;IACF,MAAM,MAAM,GAAG,MAAM;QACnB,CAAC,CAAC;YACE,wBAAwB,SAAS,kGAAkG;SACpI;QACH,CAAC,CAAC,EAAE,CAAC;IACP,OAAO,EAAE,CAAC,EAAE,OAAO,EAAE,IAAI,EAAE,KAAK,EAAE,QAAQ,CAAC,MAAM,EAAE,OAAO,EAAE,EAAE,EAAE,QAAQ,EAAE,MAAM,EAAE,MAAM,EAAE,CAAC,CAAC;AAC9F,CAAC;AAED,KAAK,UAAU,kBAAkB,CAC/B,OAA0B,EAC1B,KAAe,EACf,EAAE,GAAG,EAAE,KAAK,EAAE,EAAE,EAAqB,EACrC,IAA0D;IAE1D,MAAM,WAAW,GAAG,mBAAmB,CAAC,IAAI,CAAC,KAAK,EAAE,IAAI,CAAC,KAAK,CAAC,CAAC;IAChE,IAAI,WAAW;QAAE,OAAO,WAAW,CAAC;IACpC,MAAM,CAAC,GAAG,MAAM,kBAAkB,CAAC,OAAO,EAAE,GAAG,CAAC,KAAK,EAAE,KAAK,EAAE,IAAI,CAAC,SAAS,CAAC,CAAC;IAC9E,IAAI,MAAM,CAAC,CAAC,CAAC;QAAE,OAAO,CAAC,CAAC;IACxB,MAAM,EAAE,QAAQ,EAAE,MAAM,EAAE,GAAG,gBAAgB,CAAC,SAAS,EAAE,IAAI,CAAC,KAAK,EAAE,IAAI,CAAC,KAAK,EAAE,IAAI,IAAI,EAAE,EAAE,EAAE,CAAC,CAAC;IACjG,MAAM,IAAI,GAAG,IAAI,CAAC,IAAI,CAAC,CAAC,CAAC,UAAU,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC,SAAS,CAAC;IAC3D,MAAM,KAAK,GAAG,EAAE,IAAI,EAAE,IAAI,CAAC,IAAI,EAAE,IAAI,EAAE,KAAK,EAAE,QAAQ,EAAE,KAAK,EAAE,MAAM,EAAE,CAAC;IAExE,iFAAiF;IACjF,IAAI,WAAW,GAAG,SAAS,CAAC;IAC5B,mEAAmE;IACnE,MAAM,KAAK,GAAG,EAAE,MAAM,EAAE,KAAK,EAAE,CAAC;IAChC,MAAM,CAAC,GAAG,MAAM,YAAY,CAAC,CAAC,CAAC,WAAW,EAAE,KAAK,EAAE,CAAC,EAAE,EAAE;QACtD,MAAM,KAAK,GAAqB,EAAE,CAAC;QACnC,IAAI,WAAW,IAAI,CAAC,EAAE,CAAC;YACrB,qGAAqG;YACrG,MAAM,KAAK,GAAG,MAAM,OAAO,CAAC,cAAc,CACxC,EAAE,GAAG,KAAK,EAAE,UAAU,EAAE,CAAC,CAAC,EAAE,EAAE,IAAI,EAAE,CAAC,EAAE,KAAK,EAAE,CAAC,EAAE,EACjD,KAAK,CACN,CAAC;YACF,IAAI,KAAK,CAAC,KAAK,GAAG,CAAC;gBAAE,KAAK,CAAC,MAAM,GAAG,IAAI,CAAC;YACzC,OAAO,KAAK,CAAC;QACf,CAAC;QACD,KAAK,IAAI,IAAI,GAAG,CAAC,GAAI,IAAI,EAAE,EAAE,CAAC;YAC5B,MAAM,EAAE,KAAK,EAAE,KAAK,EAAE,GAAG,MAAM,OAAO,CAAC,cAAc,CACnD,EAAE,GAAG,KAAK,EAAE,UAAU,EAAE,CAAC,CAAC,EAAE,EAAE,IAAI,EAAE,KAAK,EAAE,UAAU,EAAE,EACvD,KAAK,CACN,CAAC;YACF,MAAM,OAAO,GAAG,KAAK,CAAC,KAAK,CAAC,CAAC,EAAE,WAAW,CAAC,CAAC;YAC5C,KAAK,CAAC,IAAI,CAAC,GAAG,OAAO,CAAC,CAAC;YACvB,WAAW,IAAI,OAAO,CAAC,MAAM,CAAC;YAC9B,MAAM,MAAM,GACV,OAAO,CAAC,MAAM,GAAG,KAAK,CAAC,MAAM,IAAI,CAAC,KAAK,CAAC,MAAM,KAAK,UAAU,IAAI,IAAI,GAAG,UAAU,GAAG,KAAK,CAAC,CAAC;YAC9F,IAAI,CAAC,MAAM;gBAAE,OAAO,KAAK,CAAC;YAC1B,IAAI,WAAW,IAAI,CAAC,EAAE,CAAC;gBACrB,KAAK,CAAC,MAAM,GAAG,IAAI,CAAC;gBACpB,OAAO,KAAK,CAAC;YACf,CAAC;QACH,CAAC;IACH,CAAC,CAAC,CAAC;IACH,IAAI,MAAM,CAAC,CAAC,CAAC;QAAE,OAAO,CAAC,CAAC;IAExB,MAAM,SAAS,GAAG,CAAC,CAAC,UAAU;SAC3B,OAAO,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,KAAK,CAAC;SACvB,IAAI,CAAC,CAAC,CAAC,EAAE,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,KAAK,CAAC,aAAa,CAAC,CAAC,CAAC,KAAK,CAAC,CAAC,CAAC;IAClD,MAAM,OAAO,GAAG,EAAE,KAAK,EAAE,IAAI,CAAC,KAAK,EAAE,KAAK,EAAE,IAAI,CAAC,KAAK,EAAE,CAAC;IACzD,MAAM,MAAM,GAAG,CAAC,GAAG,CAAC,CAAC,MAAM,EAAE,GAAG,uBAAuB,CAAC,CAAC,CAAC,QAAQ,CAAC,CAAC,CAAC;IACrE,IAAI,SAAS,CAAC,MAAM,KAAK,CAAC,EAAE,CAAC;QAC3B,OAAO,EAAE,CACP,EAAE,OAAO,EAAE,KAAK,EAAE,KAAK,EAAE,CAAC,EAAE,OAAO,EAAE,EACrC;YACE,MAAM,EAAE;gBACN,GAAG,MAAM;gBACT,8FAA8F;aAC/F;SACF,CACF,CAAC;IACJ,CAAC;IACD,MAAM,OAAO,GAAG,IAAI,GAAG,CAAC,CAAC,CAAC,WAAW,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;IAClE,MAAM,KAAK,GAAG,aAAa,CAAC,SAAS,EAAE;QACrC,EAAE;QACF,WAAW,EAAE,CAAC,CAAC,EAAE,EAAE,CAAC,OAAO,CAAC,GAAG,CAAC,CAAC,CAAC,UAAU,CAAC,IAAI,EAAE;KACpD,CAAC,CAAC;IACH,MAAM,SAAS,CACb,KAAK,EACL,KAAK,EACL,WAAW,IAAI,CAAC,KAAK,IAAI,IAAI,CAAC,KAAK,MAAM,EACzC,eAAe,IAAI,CAAC,KAAK,OAAO,IAAI,CAAC,KAAK,KAAK,SAAS,CAAC,MAAM,6BAA6B,CAC7F,CAAC;IACF,IAAI,KAAK,CAAC,MAAM,EAAE,CAAC;QACjB,MAAM,CAAC,IAAI,CACT,oBAAoB,SAAS,oFAAoF,CAClH,CAAC;IACJ,CAAC;IACD,OAAO,EAAE,CACP,EAAE,OAAO,EAAE,IAAI,EAAE,KAAK,EAAE,SAAS,CAAC,MAAM,EAAE,OAAO,EAAE,EACnD,EAAE,QAAQ,EAAE,KAAK,CAAC,MAAM,EAAE,MAAM,EAAE,CACnC,CAAC;AACJ,CAAC;AAED,gFAAgF;AAChF,MAAM,CAAC,MAAM,YAAY,GACvB,oHAAoH,CAAC;AAEvH;;;GAGG;AACH,MAAM,UAAU,SAAS,CAAC,EAAE,OAAO,EAAW;IAC5C,OAAO;QACL,UAAU,CAAC;YACT,IAAI,EAAE,sBAAsB;YAC5B,WAAW,EAAE,YAAY;YACzB,MAAM,EAAE;gBACN,UAAU,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,QAAQ,CAAC,uBAAuB,CAAC;gBAC/D,SAAS,EAAE,CAAC;qBACT,MAAM,EAAE;qBACR,GAAG,CAAC,CAAC,CAAC;qBACN,QAAQ,EAAE;qBACV,QAAQ,CACP,6FAA6F,CAC9F;aACJ;YACD,IAAI,EAAE,KAAK,EAAE,EAAE,GAAG,EAAE,KAAK,EAAE,KAAK,EAAE,EAAE,EAAE,UAAU,EAAE,SAAS,EAAE,EAAE,EAAE;gBAC/D,IAAI,CAAC,KAAK;oBAAE,OAAO,IAAI,CAAC,YAAY,CAAC,CAAC;gBACtC,MAAM,EAAE,KAAK,EAAE,GAAG,MAAM,OAAO,CAAC,eAAe,CAAC,GAAG,CAAC,KAAK,EAAE,KAAK,CAAC,CAAC;gBAClE,IAAI,UAAU,GAAG,KAAK,CAAC;gBACvB,IAAI,SAAS,EAAE,CAAC;oBACd,MAAM,WAAW,GAAG;wBAClB,GAAG,IAAI,GAAG,CACR,KAAK,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,CAAC,UAAU,EAAE,EAAE,EAAE,EAAE,CAAC,CAAC,UAAU,EAAE,IAAI,EAAE,CAAC,CAAC,YAAY,EAAE,CAAC,CAAC,CAC7E,CAAC,MAAM,EAAE;qBACX,CAAC;oBACF,MAAM,CAAC,GAAG,YAAY,CAAC,SAAS,EAAE,WAAW,EAAE,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,IAAI,EAAE,SAAS,CAAC,CAAC;oBACzE,IAAI,MAAM,CAAC,CAAC,CAAC;wBAAE,OAAO,CAAC,CAAC;oBACxB,UAAU,GAAG,KAAK,CAAC,MAAM,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,UAAU,KAAK,CAAC,CAAC,IAAI,CAAC,EAAE,CAAC,CAAC;gBAC/D,CAAC;gBACD,MAAM,CAAC,GAAG,YAAY,CACpB,UAAU,EACV,UAAU,EACV,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,IAAI,EACb,UAAU,EACV,kBAAkB,CACnB,CAAC;gBACF,IAAI,MAAM,CAAC,CAAC,CAAC;oBAAE,OAAO,CAAC,CAAC;gBACxB,OAAO,QAAQ,CAAC,CAAC,CAAC,IAAI,EAAE,KAAK,CAAC,CAAC;YACjC,CAAC;SACF,CAAC;QACF,UAAU,CAAC;YACT,IAAI,EAAE,uBAAuB;YAC7B,WAAW,EAAE,SAAS;YACtB,MAAM,EAAE,gBAAgB;YACxB,IAAI,EAAE,KAAK,EAAE,GAAG,EAAE,IAAI,EAAE,EAAE,CACxB,GAAG,CAAC,KAAK,CAAC,CAAC,CAAC,mBAAmB,CAAC,OAAO,EAAE,GAAG,CAAC,KAAK,EAAE,GAAG,EAAE,IAAI,CAAC,CAAC,CAAC,CAAC,IAAI,CAAC,YAAY,CAAC;SACtF,CAAC;QACF,UAAU,CAAC;YACT,IAAI,EAAE,sBAAsB;YAC5B,WAAW,EAAE,gBAAgB;YAC7B,MAAM,EAAE,uBAAuB;YAC/B,IAAI,EAAE,KAAK,EAAE,GAAG,EAAE,IAAI,EAAE,EAAE,CACxB,GAAG,CAAC,KAAK,CAAC,CAAC,CAAC,kBAAkB,CAAC,OAAO,EAAE,GAAG,CAAC,KAAK,EAAE,GAAG,EAAE,IAAI,CAAC,CAAC,CAAC,CAAC,IAAI,CAAC,YAAY,CAAC;SACrF,CAAC;KACH,CAAC;AACJ,CAAC"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"incidents.d.ts","sourceRoot":"","sources":["../../src/reads/incidents.ts"],"names":[],"mappings":"AAyBA,OAAO,EAAsC,KAAK,cAAc,EAAE,KAAK,OAAO,EAAE,MAAM,YAAY,CAAC;AA6InG,0EAA0E;AAC1E,wBAAgB,aAAa,CAAC,EAAE,OAAO,EAAE,EAAE,OAAO,GAAG,cAAc,EAAE,CA6CpE"}
|