@patroltech/agent-capabilities 0.0.0-stage → 0.2.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/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 +14 -0
- package/dist/catalog/english.d.ts.map +1 -0
- package/dist/catalog/english.js +368 -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-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 +164 -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 +4 -0
- package/dist/reads/patrollers.d.ts.map +1 -0
- package/dist/reads/patrollers.js +156 -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,173 @@
|
|
|
1
|
+
import { z } from 'zod';
|
|
2
|
+
import { segunIdioma } from '../domain/language.js';
|
|
3
|
+
import { rutasDelCheckpoint } from './support/route-impact.js';
|
|
4
|
+
import { avisoRutaVacia, INTERNO, listaCitada, resolverCheckpoint, sinPlazaDeCheckpoint, } from './support/shared.js';
|
|
5
|
+
import { defineBotAction } from './types.js';
|
|
6
|
+
/**
|
|
7
|
+
* Archivar y desarchivar un checkpoint: sale de sus rutas,
|
|
8
|
+
* con el aviso previo de las que se quedarían vacías y se desactivarían.
|
|
9
|
+
*/
|
|
10
|
+
// ---------------------------------------------------------------------------
|
|
11
|
+
// archive_checkpoint
|
|
12
|
+
// ---------------------------------------------------------------------------
|
|
13
|
+
const archiveParams = {
|
|
14
|
+
checkpoint: z.string().trim().min(1).describe('Nombre del checkpoint'),
|
|
15
|
+
ubicacion: z
|
|
16
|
+
.string()
|
|
17
|
+
.trim()
|
|
18
|
+
.min(1)
|
|
19
|
+
.optional()
|
|
20
|
+
.describe('Ubicación del checkpoint, si hay varios con ese nombre. OMÍTELO si no hace falta.'),
|
|
21
|
+
archivar: z
|
|
22
|
+
.boolean()
|
|
23
|
+
.describe('true = archivarlo (darlo de baja); false = desarchivarlo (recuperarlo)'),
|
|
24
|
+
checkpoint_id: z.string().optional().describe(INTERNO),
|
|
25
|
+
// Las rutas de las que saldría, con lo que prevé el bot: el mismo vocabulario que devuelve el backend al archivar.
|
|
26
|
+
rutas: z
|
|
27
|
+
.array(z.object({
|
|
28
|
+
id: z.string(),
|
|
29
|
+
name: z.string(),
|
|
30
|
+
leftEmpty: z.boolean(),
|
|
31
|
+
deactivated: z.boolean(),
|
|
32
|
+
}))
|
|
33
|
+
.optional()
|
|
34
|
+
.describe(INTERNO),
|
|
35
|
+
};
|
|
36
|
+
/** Frases del resumen de archivar sobre sus rutas; con `rutas` undefined (no se pudieron leer), el aviso genérico. */
|
|
37
|
+
function avisoRutas(rutas, idioma) {
|
|
38
|
+
if (!rutas) {
|
|
39
|
+
return segunIdioma(idioma, {
|
|
40
|
+
es: 'Se quitará de todas las rutas en las que esté y se cancelarán las rondas en curso de esas rutas; si alguna se queda sin checkpoints, se desactivará. Se puede desarchivar después, pero habrá que volver a añadirlo a las rutas.',
|
|
41
|
+
en: 'It will be removed from every route it is on and the rounds in progress on those routes will be cancelled; if any is left without checkpoints, it will be deactivated. You can unarchive it later, but it will have to be added to the routes again.',
|
|
42
|
+
fr: "Il sera retiré de tous les parcours où il figure et les rondes en cours de ces parcours seront annulées ; si l'un d'eux reste sans checkpoints, il sera désactivé. Vous pourrez le désarchiver plus tard, mais il faudra le rajouter aux parcours.",
|
|
43
|
+
});
|
|
44
|
+
}
|
|
45
|
+
if (rutas.length === 0) {
|
|
46
|
+
return segunIdioma(idioma, {
|
|
47
|
+
es: 'No está en ninguna ruta. Se puede desarchivar después.',
|
|
48
|
+
en: 'It is not on any route. You can unarchive it later.',
|
|
49
|
+
fr: 'Il ne figure dans aucun parcours. Vous pourrez le désarchiver plus tard.',
|
|
50
|
+
});
|
|
51
|
+
}
|
|
52
|
+
const todas = listaCitada(rutas.map((r) => r.name), idioma);
|
|
53
|
+
const texto = segunIdioma(idioma, {
|
|
54
|
+
es: `Se quitará de las rutas ${todas} y se cancelarán sus rondas en curso. Se puede desarchivar después, pero habrá que volver a añadirlo a las rutas.`,
|
|
55
|
+
en: `It will be removed from the routes ${todas} and their rounds in progress will be cancelled. You can unarchive it later, but it will have to be added to the routes again.`,
|
|
56
|
+
fr: `Il sera retiré des parcours ${todas} et leurs rondes en cours seront annulées. Vous pourrez le désarchiver plus tard, mais il faudra le rajouter aux parcours.`,
|
|
57
|
+
});
|
|
58
|
+
const seDesactivan = rutas.filter((r) => r.deactivated).map((r) => r.name);
|
|
59
|
+
return seDesactivan.length > 0 ? `${texto}\n${avisoRutaVacia(seDesactivan, idioma)}` : texto;
|
|
60
|
+
}
|
|
61
|
+
/** Tras archivar: de qué rutas ha salido y cuáles ha desactivado el backend (lo que él devuelve, no lo previsto). */
|
|
62
|
+
function resultadoRutas(rutas, idioma) {
|
|
63
|
+
if (!rutas || rutas.length === 0)
|
|
64
|
+
return '';
|
|
65
|
+
const desactivadas = rutas.filter((r) => r.deactivated).map((r) => r.name);
|
|
66
|
+
const t = segunIdioma(idioma, {
|
|
67
|
+
es: {
|
|
68
|
+
quitado: 'Se ha quitado de las rutas',
|
|
69
|
+
desactivadas: 'Desactivadas por quedarse sin checkpoints:',
|
|
70
|
+
},
|
|
71
|
+
en: {
|
|
72
|
+
quitado: 'Removed from the routes',
|
|
73
|
+
desactivadas: 'Deactivated for having no checkpoints left:',
|
|
74
|
+
},
|
|
75
|
+
fr: { quitado: 'Retiré des parcours', desactivadas: 'Désactivés faute de checkpoints :' },
|
|
76
|
+
});
|
|
77
|
+
const quitado = listaCitada(rutas.map((r) => r.name), idioma);
|
|
78
|
+
let texto = `\n${t.quitado} ${quitado}.`;
|
|
79
|
+
if (desactivadas.length > 0)
|
|
80
|
+
texto += `\n${t.desactivadas} ${listaCitada(desactivadas, idioma)}.`;
|
|
81
|
+
return texto;
|
|
82
|
+
}
|
|
83
|
+
export function archiveCheckpoint(env) {
|
|
84
|
+
const { gateway, logger, urls } = env;
|
|
85
|
+
return defineBotAction({
|
|
86
|
+
nombre: 'archive_checkpoint',
|
|
87
|
+
tool: 'proponer_archivar_checkpoint',
|
|
88
|
+
descripcion: 'Prepara archivar (dar de baja) o desarchivar (recuperar) un checkpoint. NO lo hace: le envía al cliente un resumen con un botón para ' +
|
|
89
|
+
'confirmarlo. Archivado: su QR o código deja de valer y los escaneos nuevos se rechazan; sus escaneos se conservan y deja de contar para ' +
|
|
90
|
+
'el plan. Además se QUITA de todas las rutas en las que esté y se cancelan las rondas en curso de esas rutas. Desarchivar vuelve a contar ' +
|
|
91
|
+
'para el plan (si el plan está en su límite no se puede: se mejora en Licencia) pero NO lo devuelve a las rutas: hay que volver a añadirlo.',
|
|
92
|
+
params: archiveParams,
|
|
93
|
+
rolMinimo: 'EDITOR',
|
|
94
|
+
// `rutas` depende de las anteriores del lote: el mismo checkpoint dos veces es la misma acción.
|
|
95
|
+
huella: (p) => [p.checkpoint_id, p.archivar],
|
|
96
|
+
async preparar(ctx, p) {
|
|
97
|
+
const { items } = p.archivar
|
|
98
|
+
? await gateway.listCheckpoints(ctx.org.orgId, ctx.token)
|
|
99
|
+
: await gateway.listArchivedCheckpoints(ctx.org.orgId, ctx.token);
|
|
100
|
+
if (!p.archivar && items.length === 0)
|
|
101
|
+
return { error: `«${ctx.org.name}» no tiene ningún checkpoint archivado.` };
|
|
102
|
+
const r = resolverCheckpoint(items, p.checkpoint, p.ubicacion);
|
|
103
|
+
if ('error' in r)
|
|
104
|
+
return { error: p.archivar ? r.error : `Entre los checkpoints ARCHIVADOS: ${r.error}` };
|
|
105
|
+
const resuelto = {
|
|
106
|
+
...p,
|
|
107
|
+
checkpoint: r.item.name,
|
|
108
|
+
ubicacion: r.item.locationName,
|
|
109
|
+
checkpoint_id: r.item.id,
|
|
110
|
+
};
|
|
111
|
+
if (!p.archivar) {
|
|
112
|
+
// Desarchivar pasa el mismo gate del plan que crear.
|
|
113
|
+
const sinPlaza = await sinPlazaDeCheckpoint(env, ctx, {
|
|
114
|
+
conPlan: (alLimite) => `${alLimite} y desarchivar cuenta como crear uno. ` +
|
|
115
|
+
`No lo propongas: explícale que puede mejorar el plan en Licencia (${urls.license}), archivar otro antes o, si su plan lo permite, desarchivarlo desde el panel con el cargo extra.`,
|
|
116
|
+
sinPlan: (alLimite) => `${alLimite} y desarchivar cuenta como crear uno. ` +
|
|
117
|
+
'No lo propongas: explícale que puede archivar otro antes de desarchivarlo.',
|
|
118
|
+
});
|
|
119
|
+
if (sinPlaza)
|
|
120
|
+
return { error: sinPlaza };
|
|
121
|
+
return { params: { ...resuelto, rutas: undefined } };
|
|
122
|
+
}
|
|
123
|
+
const rutas = await rutasDelCheckpoint(gateway, logger, ctx, r.item);
|
|
124
|
+
return {
|
|
125
|
+
params: { ...resuelto, rutas },
|
|
126
|
+
// Las siguientes del lote ven que ya sale de estas rutas (dos archivados pueden vaciar la misma).
|
|
127
|
+
cambiosEnRutas: (rutas ?? []).map((ruta) => ({
|
|
128
|
+
rutaId: ruta.id,
|
|
129
|
+
checkpointId: r.item.id,
|
|
130
|
+
op: 'quitar',
|
|
131
|
+
})),
|
|
132
|
+
};
|
|
133
|
+
},
|
|
134
|
+
resumen(p, { idioma, organizacion }) {
|
|
135
|
+
const cual = segunIdioma(idioma, {
|
|
136
|
+
es: `el checkpoint «${p.checkpoint}» de la ubicación «${p.ubicacion}» de ${organizacion}`,
|
|
137
|
+
en: `the checkpoint «${p.checkpoint}» in the location «${p.ubicacion}» of ${organizacion}`,
|
|
138
|
+
fr: `le checkpoint «${p.checkpoint}» du site «${p.ubicacion}» de ${organizacion}`,
|
|
139
|
+
});
|
|
140
|
+
if (!p.archivar) {
|
|
141
|
+
return segunIdioma(idioma, {
|
|
142
|
+
es: `Desarchivar ${cual}: vuelve a aceptar escaneos y a contar para tu plan. No vuelve solo a las rutas en las que estaba: habrá que añadirlo de nuevo.`,
|
|
143
|
+
en: `Unarchive ${cual}: it accepts scans again and counts towards your plan again. It does not go back to the routes it was on: it has to be added again.`,
|
|
144
|
+
fr: `Désarchiver ${cual} : il accepte à nouveau les scans et compte à nouveau dans votre forfait. Il ne revient pas dans les parcours où il était : il faudra l'y rajouter.`,
|
|
145
|
+
});
|
|
146
|
+
}
|
|
147
|
+
const rutas = avisoRutas(p.rutas, idioma);
|
|
148
|
+
return segunIdioma(idioma, {
|
|
149
|
+
es: `Archivar ${cual}.\n⚠️ Su QR o código dejará de valer: los escaneos nuevos de ese punto se rechazarán. Sus escaneos anteriores se conservan y deja de contar para tu plan. ${rutas}`,
|
|
150
|
+
en: `Archive ${cual}.\n⚠️ Its QR or code will stop working: new scans of that point will be rejected. Its past scans are kept and it no longer counts towards your plan. ${rutas}`,
|
|
151
|
+
fr: `Archiver ${cual}.\n⚠️ Son QR code ou son code ne fonctionnera plus : les nouveaux scans de ce point seront refusés. Ses scans précédents sont conservés et il ne compte plus dans votre forfait. ${rutas}`,
|
|
152
|
+
});
|
|
153
|
+
},
|
|
154
|
+
async ejecutar(ctx, p) {
|
|
155
|
+
if (!p.checkpoint_id)
|
|
156
|
+
throw new Error('archive_checkpoint sin checkpoint_id (no pasó por preparar)');
|
|
157
|
+
let rutas = null;
|
|
158
|
+
if (p.archivar)
|
|
159
|
+
rutas = await gateway.archiveCheckpoint(p.checkpoint_id, ctx.token);
|
|
160
|
+
else
|
|
161
|
+
await gateway.unarchiveCheckpoint(p.checkpoint_id, ctx.token);
|
|
162
|
+
const a = p.archivar;
|
|
163
|
+
return {
|
|
164
|
+
texto: segunIdioma(ctx.language, {
|
|
165
|
+
es: `✅ Checkpoint «${p.checkpoint}» ${a ? 'archivado' : 'desarchivado'} en la ubicación «${p.ubicacion}» de ${ctx.org.name}.`,
|
|
166
|
+
en: `✅ Checkpoint «${p.checkpoint}» ${a ? 'archived' : 'unarchived'} in the location «${p.ubicacion}» of ${ctx.org.name}.`,
|
|
167
|
+
fr: `✅ Checkpoint «${p.checkpoint}» ${a ? 'archivé' : 'désarchivé'} sur le site «${p.ubicacion}» de ${ctx.org.name}.`,
|
|
168
|
+
}) + resultadoRutas(rutas, ctx.language),
|
|
169
|
+
};
|
|
170
|
+
},
|
|
171
|
+
});
|
|
172
|
+
}
|
|
173
|
+
//# sourceMappingURL=checkpoint-archive.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"checkpoint-archive.js","sourceRoot":"","sources":["../../src/actions/checkpoint-archive.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,4 @@
|
|
|
1
|
+
import { type ActionDefinition, type ActionEnv } from './types.js';
|
|
2
|
+
export declare function editCheckpointAntifraud({ gateway }: ActionEnv): ActionDefinition;
|
|
3
|
+
export declare function moveCheckpoint({ gateway }: ActionEnv): ActionDefinition;
|
|
4
|
+
//# sourceMappingURL=checkpoint-geo.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"checkpoint-geo.d.ts","sourceRoot":"","sources":["../../src/actions/checkpoint-geo.ts"],"names":[],"mappings":"AAeA,OAAO,EAEL,KAAK,gBAAgB,EACrB,KAAK,SAAS,EAEf,MAAM,YAAY,CAAC;AAkCpB,wBAAgB,uBAAuB,CAAC,EAAE,OAAO,EAAE,EAAE,SAAS,GAAG,gBAAgB,CAuJhF;AAiCD,wBAAgB,cAAc,CAAC,EAAE,OAAO,EAAE,EAAE,SAAS,GAAG,gBAAgB,CAmHvE"}
|
|
@@ -0,0 +1,286 @@
|
|
|
1
|
+
import { z } from 'zod';
|
|
2
|
+
import { distanciaMetros, enlaceMapa, formatoDistancia } from '../domain/geo.js';
|
|
3
|
+
import { segunIdioma } from '../domain/language.js';
|
|
4
|
+
import { antifraudParams, bloqueoAntifraude, mismasReglas, normalizar, reglasConCambios, textoGps, textoSubterraneo, tocaGps, } from './support/antifraud-rules.js';
|
|
5
|
+
import { INTERNO, resolverCheckpoint, sinCambios } from './support/shared.js';
|
|
6
|
+
import { defineBotAction, } from './types.js';
|
|
7
|
+
/**
|
|
8
|
+
* Antifraude y posición de un checkpoint: los avisos
|
|
9
|
+
* diarios de escaneo sospechoso por una distancia demasiado ajustada, por el modo
|
|
10
|
+
* subterráneo en un punto al aire libre o por un punto mal situado en el mapa.
|
|
11
|
+
* Las dos escriben con `PUT /api/checkpoints/:id`, cada una SOLO con su campo.
|
|
12
|
+
*/
|
|
13
|
+
/** El checkpoint dicho por el usuario, entre los de la organización, con su posición y sus reglas actuales. */
|
|
14
|
+
async function leerCheckpoint(gateway, ctx, checkpoint, ubicacion) {
|
|
15
|
+
const { items } = await gateway.listCheckpoints(ctx.org.orgId, ctx.token);
|
|
16
|
+
const r = resolverCheckpoint(items, checkpoint, ubicacion);
|
|
17
|
+
if ('error' in r)
|
|
18
|
+
return r;
|
|
19
|
+
const detalle = await gateway.getCheckpointDetail({ id: r.item.id, locationId: r.item.locationId, name: r.item.name }, ctx.token);
|
|
20
|
+
if (!detalle)
|
|
21
|
+
return {
|
|
22
|
+
error: `No he podido leer el checkpoint «${r.item.name}». No lo propongas: que lo revise en el panel (Checkpoints).`,
|
|
23
|
+
};
|
|
24
|
+
return { detalle, ubicacion: r.item.locationName };
|
|
25
|
+
}
|
|
26
|
+
// ---------------------------------------------------------------------------
|
|
27
|
+
// edit_checkpoint_antifraud
|
|
28
|
+
// ---------------------------------------------------------------------------
|
|
29
|
+
export function editCheckpointAntifraud({ gateway }) {
|
|
30
|
+
return defineBotAction({
|
|
31
|
+
nombre: 'edit_checkpoint_antifraud',
|
|
32
|
+
tool: 'proponer_cambiar_antifraude',
|
|
33
|
+
descripcion: 'Prepara cambiar las reglas antifraude de un checkpoint: la proximidad GPS (distancia máxima entre el móvil y el punto) y el modo ' +
|
|
34
|
+
'subterráneo (avisa si el móvil tiene cobertura en el punto). NO lo cambia: le envía al cliente un resumen con un botón para ' +
|
|
35
|
+
'confirmarlo. Úsala cuando los avisos de escaneo sospechoso se deban a una distancia demasiado ajustada (súbela, p. ej. a 100 m) o al ' +
|
|
36
|
+
'modo subterráneo en un punto con cobertura (desactívalo). Si el punto está mal situado en el mapa, lo que toca es proponer_mover_checkpoint. ' +
|
|
37
|
+
'Afecta solo a los escaneos nuevos.',
|
|
38
|
+
params: antifraudParams,
|
|
39
|
+
rolMinimo: 'EDITOR',
|
|
40
|
+
async preparar(ctx, p) {
|
|
41
|
+
if (p.proximidad_gps === undefined && !tocaGps(p) && p.modo_subterraneo === undefined) {
|
|
42
|
+
return {
|
|
43
|
+
error: 'Falta qué cambiar: la proximidad GPS (activarla, desactivarla o su distancia) o el modo subterráneo. Pregúntaselo al usuario.',
|
|
44
|
+
};
|
|
45
|
+
}
|
|
46
|
+
if (p.proximidad_gps === false &&
|
|
47
|
+
(p.distancia_maxima_m !== undefined || p.precision_maxima_m !== undefined)) {
|
|
48
|
+
return {
|
|
49
|
+
error: 'Contradictorio: desactivar la proximidad GPS y a la vez cambiar su distancia o su precisión. Pregunta al usuario qué quiere.',
|
|
50
|
+
};
|
|
51
|
+
}
|
|
52
|
+
const leido = await leerCheckpoint(gateway, ctx, p.checkpoint, p.ubicacion);
|
|
53
|
+
if ('error' in leido)
|
|
54
|
+
return leido;
|
|
55
|
+
const { detalle } = leido;
|
|
56
|
+
switch (bloqueoAntifraude(detalle, p)) {
|
|
57
|
+
case 'reglas_desconocidas':
|
|
58
|
+
return {
|
|
59
|
+
error: `El checkpoint «${detalle.name}» tiene reglas antifraude que no puedo cambiar desde aquí sin perderlas (${detalle.reglasDesconocidas.join(', ')}). ` +
|
|
60
|
+
'No lo propongas: que lo cambie en el panel (Checkpoints → editar → Antifraude).',
|
|
61
|
+
};
|
|
62
|
+
case 'geocerca':
|
|
63
|
+
return {
|
|
64
|
+
error: `El checkpoint «${detalle.name}» verifica por geocerca, que ya es la comprobación de distancia: la proximidad GPS no se le aplica. Su radio se cambia en el panel.`,
|
|
65
|
+
};
|
|
66
|
+
case 'sin_posicion':
|
|
67
|
+
return {
|
|
68
|
+
error: `El checkpoint «${detalle.name}» no tiene posición guardada, y la proximidad GPS mide la distancia a ella. No lo propongas aún: ` +
|
|
69
|
+
'pide al cliente que vaya al punto y te comparta su ubicación de WhatsApp desde allí, propón con ella proponer_mover_checkpoint y, cuando esté hecho, esto.',
|
|
70
|
+
};
|
|
71
|
+
}
|
|
72
|
+
const antes = normalizar(detalle.reglasAntifraude);
|
|
73
|
+
const despues = reglasConCambios(detalle.reglasAntifraude, p);
|
|
74
|
+
if (mismasReglas(antes, despues))
|
|
75
|
+
return {
|
|
76
|
+
error: `El checkpoint «${detalle.name}» ya tiene esas reglas antifraude: no hay nada que cambiar.`,
|
|
77
|
+
};
|
|
78
|
+
return {
|
|
79
|
+
params: {
|
|
80
|
+
...p,
|
|
81
|
+
checkpoint: detalle.name,
|
|
82
|
+
ubicacion: leido.ubicacion,
|
|
83
|
+
checkpoint_id: detalle.id,
|
|
84
|
+
ubicacion_id: detalle.locationId,
|
|
85
|
+
reglas_antes: antes,
|
|
86
|
+
reglas_despues: despues,
|
|
87
|
+
},
|
|
88
|
+
};
|
|
89
|
+
},
|
|
90
|
+
resumen(p, { idioma, organizacion }) {
|
|
91
|
+
const antes = p.reglas_antes ?? {};
|
|
92
|
+
const despues = p.reglas_despues ?? {};
|
|
93
|
+
const t = segunIdioma(idioma, {
|
|
94
|
+
es: { gps: 'proximidad GPS', sub: 'modo subterráneo', sep: ':' },
|
|
95
|
+
en: { gps: 'GPS proximity', sub: 'underground mode', sep: ':' },
|
|
96
|
+
fr: { gps: 'proximité GPS', sub: 'mode souterrain', sep: ' :' },
|
|
97
|
+
});
|
|
98
|
+
const cambios = [];
|
|
99
|
+
if (JSON.stringify(antes.gpsProximity) !== JSON.stringify(despues.gpsProximity)) {
|
|
100
|
+
cambios.push(`${t.gps}${t.sep} ${textoGps(antes.gpsProximity, idioma)} → ${textoGps(despues.gpsProximity, idioma)}`);
|
|
101
|
+
}
|
|
102
|
+
if (Boolean(antes.undergroundMode?.enabled) !== Boolean(despues.undergroundMode?.enabled)) {
|
|
103
|
+
cambios.push(`${t.sub}${t.sep} ${textoSubterraneo(antes.undergroundMode, idioma)} → ${textoSubterraneo(despues.undergroundMode, idioma)}`);
|
|
104
|
+
}
|
|
105
|
+
const lista = cambios.join('; ');
|
|
106
|
+
return segunIdioma(idioma, {
|
|
107
|
+
es: `Cambiar el antifraude del checkpoint «${p.checkpoint}» de la ubicación «${p.ubicacion}» de ${organizacion}: ${lista}. ` +
|
|
108
|
+
'Afecta a los escaneos nuevos; los avisos ya enviados no cambian.',
|
|
109
|
+
en: `Change the anti-fraud settings of the checkpoint «${p.checkpoint}» in the location «${p.ubicacion}» of ${organizacion}: ${lista}. ` +
|
|
110
|
+
'It applies to new scans; alerts already sent do not change.',
|
|
111
|
+
fr: `Modifier l'anti-fraude du checkpoint «${p.checkpoint}» du site «${p.ubicacion}» de ${organizacion} : ${lista}. ` +
|
|
112
|
+
"Cela s'applique aux nouveaux scans ; les alertes déjà envoyées ne changent pas.",
|
|
113
|
+
});
|
|
114
|
+
},
|
|
115
|
+
async ejecutar(ctx, p) {
|
|
116
|
+
if (!p.checkpoint_id || !p.ubicacion_id)
|
|
117
|
+
throw new Error('edit_checkpoint_antifraud sin checkpoint_id (no pasó por preparar)');
|
|
118
|
+
// Leer-fusionar-escribir al confirmar, no al proponer: lo cambiado entretanto en el panel no se pisa.
|
|
119
|
+
// Entre esta lectura y el PUT queda una ventana de milisegundos: la API no tiene versión para cerrarla.
|
|
120
|
+
const actual = await gateway.getCheckpointDetail({ id: p.checkpoint_id, locationId: p.ubicacion_id, name: p.checkpoint }, ctx.token);
|
|
121
|
+
// La lectura busca por nombre; renombrado entretanto cuenta como «ya no está» (pedirlo de nuevo lo arregla).
|
|
122
|
+
if (!actual) {
|
|
123
|
+
throw sinCambios(ctx.language, {
|
|
124
|
+
es: `el checkpoint «${p.checkpoint}» ya no está en la ubicación «${p.ubicacion}» (quizá se borró, archivó o renombró desde el panel). Pídemelo de nuevo si hace falta.`,
|
|
125
|
+
en: `the checkpoint «${p.checkpoint}» is no longer in the location «${p.ubicacion}» (it may have been deleted, archived or renamed in the dashboard). Ask me again if needed.`,
|
|
126
|
+
fr: `le checkpoint «${p.checkpoint}» n'est plus sur le site «${p.ubicacion}» (il a peut-être été supprimé, archivé ou renommé depuis le tableau de bord). Redemandez-le-moi si besoin.`,
|
|
127
|
+
});
|
|
128
|
+
}
|
|
129
|
+
switch (bloqueoAntifraude(actual, p)) {
|
|
130
|
+
case 'reglas_desconocidas':
|
|
131
|
+
throw sinCambios(ctx.language, {
|
|
132
|
+
es: `el checkpoint «${p.checkpoint}» tiene ahora reglas antifraude que no puedo cambiar desde aquí sin perderlas. Cámbialo en el panel (Checkpoints → editar → Antifraude).`,
|
|
133
|
+
en: `the checkpoint «${p.checkpoint}» now has anti-fraud rules I can't change from here without losing them. Change it in the dashboard (Checkpoints → edit → Anti-fraud).`,
|
|
134
|
+
fr: `le checkpoint «${p.checkpoint}» a maintenant des règles anti-fraude que je ne peux pas modifier d'ici sans les perdre. Modifiez-le dans le tableau de bord (Checkpoints → modifier → Anti-fraude).`,
|
|
135
|
+
});
|
|
136
|
+
case 'geocerca':
|
|
137
|
+
throw sinCambios(ctx.language, {
|
|
138
|
+
es: `el checkpoint «${p.checkpoint}» verifica ahora por geocerca, que ya comprueba la distancia: la proximidad GPS no se le aplica. Su radio se cambia en el panel.`,
|
|
139
|
+
en: `the checkpoint «${p.checkpoint}» is now verified by geofence, which already checks the distance: GPS proximity doesn't apply to it. Its radius is changed in the dashboard.`,
|
|
140
|
+
fr: `le checkpoint «${p.checkpoint}» est maintenant vérifié par géorepérage, qui contrôle déjà la distance : la proximité GPS ne s'y applique pas. Son rayon se modifie dans le tableau de bord.`,
|
|
141
|
+
});
|
|
142
|
+
case 'sin_posicion':
|
|
143
|
+
throw sinCambios(ctx.language, {
|
|
144
|
+
es: `el checkpoint «${p.checkpoint}» ya no tiene posición guardada, y la proximidad GPS mide la distancia a ella. Compárteme tu ubicación de WhatsApp desde el punto para fijarla y pídemelo de nuevo.`,
|
|
145
|
+
en: `the checkpoint «${p.checkpoint}» no longer has a saved position, and GPS proximity measures the distance to it. Share your WhatsApp location with me from the checkpoint to set it, then ask me again.`,
|
|
146
|
+
fr: `le checkpoint «${p.checkpoint}» n'a plus de position enregistrée, et la proximité GPS mesure la distance par rapport à elle. Partagez-moi votre position WhatsApp depuis le point pour la définir, puis redemandez-le-moi.`,
|
|
147
|
+
});
|
|
148
|
+
}
|
|
149
|
+
const nuevas = reglasConCambios(actual.reglasAntifraude, p);
|
|
150
|
+
// Sin ninguna regla, null: lo mismo que guarda el panel.
|
|
151
|
+
await gateway.updateCheckpointFraudRules({ id: p.checkpoint_id, fraudRules: Object.keys(nuevas).length > 0 ? nuevas : null }, ctx.token);
|
|
152
|
+
return {
|
|
153
|
+
texto: segunIdioma(ctx.language, {
|
|
154
|
+
es: `✅ Antifraude del checkpoint «${p.checkpoint}» actualizado en la ubicación «${p.ubicacion}» de ${ctx.org.name}.`,
|
|
155
|
+
en: `✅ Anti-fraud settings of the checkpoint «${p.checkpoint}» updated in the location «${p.ubicacion}» of ${ctx.org.name}.`,
|
|
156
|
+
fr: `✅ Anti-fraude du checkpoint «${p.checkpoint}» mis à jour sur le site «${p.ubicacion}» de ${ctx.org.name}.`,
|
|
157
|
+
}),
|
|
158
|
+
};
|
|
159
|
+
},
|
|
160
|
+
});
|
|
161
|
+
}
|
|
162
|
+
// ---------------------------------------------------------------------------
|
|
163
|
+
// move_checkpoint
|
|
164
|
+
// ---------------------------------------------------------------------------
|
|
165
|
+
const moveParams = {
|
|
166
|
+
checkpoint: z.string().trim().min(1).describe('Nombre del checkpoint'),
|
|
167
|
+
ubicacion: z
|
|
168
|
+
.string()
|
|
169
|
+
.trim()
|
|
170
|
+
.min(1)
|
|
171
|
+
.optional()
|
|
172
|
+
.describe('Ubicación del checkpoint, si hay varios con ese nombre. OMÍTELO si no hace falta.'),
|
|
173
|
+
latitud: z
|
|
174
|
+
.number()
|
|
175
|
+
.min(-90)
|
|
176
|
+
.max(90)
|
|
177
|
+
.describe('Latitud de la ubicación que el cliente ha compartido DESDE el punto («latitud …» del mensaje). Nunca inventada ni sacada de una dirección.'),
|
|
178
|
+
longitud: z
|
|
179
|
+
.number()
|
|
180
|
+
.min(-180)
|
|
181
|
+
.max(180)
|
|
182
|
+
.describe('Longitud de esa misma ubicación compartida («longitud …» del mensaje).'),
|
|
183
|
+
checkpoint_id: z.string().optional().describe(INTERNO),
|
|
184
|
+
latitud_actual: z.number().optional().describe(INTERNO),
|
|
185
|
+
longitud_actual: z.number().optional().describe(INTERNO),
|
|
186
|
+
proximidad_m: z.number().optional().describe(INTERNO),
|
|
187
|
+
geocerca: z.boolean().optional().describe(INTERNO),
|
|
188
|
+
};
|
|
189
|
+
export function moveCheckpoint({ gateway }) {
|
|
190
|
+
return defineBotAction({
|
|
191
|
+
nombre: 'move_checkpoint',
|
|
192
|
+
tool: 'proponer_mover_checkpoint',
|
|
193
|
+
descripcion: 'Prepara corregir la posición en el mapa de un checkpoint (sus coordenadas). NO lo cambia: le envía al cliente un resumen con un ' +
|
|
194
|
+
'botón para confirmarlo. Las coordenadas salen SOLO de la ubicación que el cliente te comparte por WhatsApp estando EN el punto ' +
|
|
195
|
+
'(te llega como «[El usuario ha compartido una ubicación: latitud X, longitud Y]»). Si no te la ha mandado, pídesela antes. Su QR, ' +
|
|
196
|
+
'su código y sus escaneos no cambian.',
|
|
197
|
+
params: moveParams,
|
|
198
|
+
rolMinimo: 'EDITOR',
|
|
199
|
+
async preparar(ctx, p) {
|
|
200
|
+
// (0, 0) es mar abierto; casi siempre es un GPS sin señal o un valor por defecto, no un punto real.
|
|
201
|
+
if (p.latitud === 0 && p.longitud === 0) {
|
|
202
|
+
return {
|
|
203
|
+
error: 'Las coordenadas (0, 0) no son una posición real (GPS sin señal). Pide al cliente que vuelva a compartir su ubicación desde el punto.',
|
|
204
|
+
};
|
|
205
|
+
}
|
|
206
|
+
const leido = await leerCheckpoint(gateway, ctx, p.checkpoint, p.ubicacion);
|
|
207
|
+
if ('error' in leido)
|
|
208
|
+
return leido;
|
|
209
|
+
const { detalle } = leido;
|
|
210
|
+
const anterior = detalle.latitud !== null && detalle.longitud !== null
|
|
211
|
+
? { lat: detalle.latitud, lng: detalle.longitud }
|
|
212
|
+
: null;
|
|
213
|
+
if (anterior) {
|
|
214
|
+
const distancia = distanciaMetros(anterior, { lat: p.latitud, lng: p.longitud });
|
|
215
|
+
if (distancia < 1)
|
|
216
|
+
return {
|
|
217
|
+
error: `El checkpoint «${detalle.name}» ya está en esa posición: no hay nada que cambiar.`,
|
|
218
|
+
};
|
|
219
|
+
// Latitud y longitud al revés (copiadas a mano): la dada cae lejísimos y la girada, junto a la de antes.
|
|
220
|
+
if (distancia > 100_000 &&
|
|
221
|
+
Math.abs(p.longitud) <= 90 &&
|
|
222
|
+
distanciaMetros(anterior, { lat: p.longitud, lng: p.latitud }) < 5_000) {
|
|
223
|
+
return {
|
|
224
|
+
error: `Parece que la latitud y la longitud van al revés: así el checkpoint «${detalle.name}» se iría a ${formatoDistancia(distancia, 'es')} de donde está. ` +
|
|
225
|
+
'No lo propongas así: comprueba el orden con la ubicación compartida («latitud …, longitud …»).',
|
|
226
|
+
};
|
|
227
|
+
}
|
|
228
|
+
}
|
|
229
|
+
return {
|
|
230
|
+
params: {
|
|
231
|
+
checkpoint: detalle.name,
|
|
232
|
+
ubicacion: leido.ubicacion,
|
|
233
|
+
latitud: p.latitud,
|
|
234
|
+
longitud: p.longitud,
|
|
235
|
+
checkpoint_id: detalle.id,
|
|
236
|
+
latitud_actual: anterior?.lat,
|
|
237
|
+
longitud_actual: anterior?.lng,
|
|
238
|
+
proximidad_m: detalle.reglasAntifraude.gpsProximity?.maxDistanceMeters,
|
|
239
|
+
geocerca: detalle.metodo === 'geofence' || undefined,
|
|
240
|
+
},
|
|
241
|
+
};
|
|
242
|
+
},
|
|
243
|
+
resumen(p, { idioma, organizacion }) {
|
|
244
|
+
const mapa = enlaceMapa(p.latitud, p.longitud);
|
|
245
|
+
const dist = p.latitud_actual !== undefined && p.longitud_actual !== undefined
|
|
246
|
+
? formatoDistancia(distanciaMetros({ lat: p.latitud_actual, lng: p.longitud_actual }, { lat: p.latitud, lng: p.longitud }), idioma)
|
|
247
|
+
: null;
|
|
248
|
+
const lineas = [
|
|
249
|
+
segunIdioma(idioma, {
|
|
250
|
+
es: `Mover el checkpoint «${p.checkpoint}» de la ubicación «${p.ubicacion}» de ${organizacion} a su nueva posición: ${mapa} (${dist ? `a ${dist} de la anterior` : 'no tenía posición guardada'}).`,
|
|
251
|
+
en: `Move the checkpoint «${p.checkpoint}» in the location «${p.ubicacion}» of ${organizacion} to its new position: ${mapa} (${dist ? `${dist} from the previous one` : 'it had no saved position'}).`,
|
|
252
|
+
fr: `Déplacer le checkpoint «${p.checkpoint}» du site «${p.ubicacion}» de ${organizacion} à sa nouvelle position : ${mapa} (${dist ? `à ${dist} de la précédente` : "il n'avait pas de position enregistrée"}).`,
|
|
253
|
+
}),
|
|
254
|
+
];
|
|
255
|
+
if (p.proximidad_m !== undefined) {
|
|
256
|
+
lineas.push(segunIdioma(idioma, {
|
|
257
|
+
es: `⚠️ Tiene activada la proximidad GPS (máx. ${p.proximidad_m} m): los escaneos se medirán desde esta nueva posición.`,
|
|
258
|
+
en: `⚠️ GPS proximity is on (max. ${p.proximidad_m} m): scans will be measured from this new position.`,
|
|
259
|
+
fr: `⚠️ La proximité GPS est activée (max. ${p.proximidad_m} m) : les scans seront mesurés depuis cette nouvelle position.`,
|
|
260
|
+
}));
|
|
261
|
+
}
|
|
262
|
+
if (p.geocerca) {
|
|
263
|
+
lineas.push(segunIdioma(idioma, {
|
|
264
|
+
es: '⚠️ Verifica por geocerca: los escaneos se comprobarán contra esta nueva posición.',
|
|
265
|
+
en: '⚠️ It is verified by geofence: scans will be checked against this new position.',
|
|
266
|
+
fr: '⚠️ Il est vérifié par géorepérage : les scans seront contrôlés par rapport à cette nouvelle position.',
|
|
267
|
+
}));
|
|
268
|
+
}
|
|
269
|
+
return lineas.join('\n');
|
|
270
|
+
},
|
|
271
|
+
async ejecutar(ctx, p) {
|
|
272
|
+
if (!p.checkpoint_id)
|
|
273
|
+
throw new Error('move_checkpoint sin checkpoint_id (no pasó por preparar)');
|
|
274
|
+
await gateway.moveCheckpoint({ id: p.checkpoint_id, latitude: p.latitud, longitude: p.longitud }, ctx.token);
|
|
275
|
+
const mapa = enlaceMapa(p.latitud, p.longitud);
|
|
276
|
+
return {
|
|
277
|
+
texto: segunIdioma(ctx.language, {
|
|
278
|
+
es: `✅ Checkpoint «${p.checkpoint}» movido en la ubicación «${p.ubicacion}» de ${ctx.org.name}: ${mapa}`,
|
|
279
|
+
en: `✅ Checkpoint «${p.checkpoint}» moved in the location «${p.ubicacion}» of ${ctx.org.name}: ${mapa}`,
|
|
280
|
+
fr: `✅ Checkpoint «${p.checkpoint}» déplacé sur le site «${p.ubicacion}» de ${ctx.org.name} : ${mapa}`,
|
|
281
|
+
}),
|
|
282
|
+
};
|
|
283
|
+
},
|
|
284
|
+
});
|
|
285
|
+
}
|
|
286
|
+
//# sourceMappingURL=checkpoint-geo.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"checkpoint-geo.js","sourceRoot":"","sources":["../../src/actions/checkpoint-geo.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,10 @@
|
|
|
1
|
+
import { type ActionDefinition, type ActionEnv } from './types.js';
|
|
2
|
+
/**
|
|
3
|
+
* Alta y edición de checkpoints. Archivar va en
|
|
4
|
+
* `checkpoint-archive.ts`; el antifraude y la posición en el mapa, en `checkpoint-geo.ts`.
|
|
5
|
+
*/
|
|
6
|
+
/** Un checkpoint con el mismo nombre dado de alta en este margen se toma por el nuestro tras un error dudoso. */
|
|
7
|
+
export declare const CHECKPOINT_RECOVERY_WINDOW_MS: number;
|
|
8
|
+
export declare function createCheckpoint(env: ActionEnv): ActionDefinition;
|
|
9
|
+
export declare function editCheckpoint({ gateway }: ActionEnv): ActionDefinition;
|
|
10
|
+
//# sourceMappingURL=checkpoints.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"checkpoints.d.ts","sourceRoot":"","sources":["../../src/actions/checkpoints.ts"],"names":[],"mappings":"AAWA,OAAO,EAAmB,KAAK,gBAAgB,EAAE,KAAK,SAAS,EAAE,MAAM,YAAY,CAAC;AAEpF;;;GAGG;AAEH,iHAAiH;AACjH,eAAO,MAAM,6BAA6B,QAAa,CAAC;AA6BxD,wBAAgB,gBAAgB,CAAC,GAAG,EAAE,SAAS,GAAG,gBAAgB,CAiHjE;AA+BD,wBAAgB,cAAc,CAAC,EAAE,OAAO,EAAE,EAAE,SAAS,GAAG,gBAAgB,CAsEvE"}
|