@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
package/LICENSE
ADDED
|
@@ -0,0 +1,21 @@
|
|
|
1
|
+
MIT License
|
|
2
|
+
|
|
3
|
+
Copyright (c) 2026 Ingenieros Web SL
|
|
4
|
+
|
|
5
|
+
Permission is hereby granted, free of charge, to any person obtaining a copy
|
|
6
|
+
of this software and associated documentation files (the "Software"), to deal
|
|
7
|
+
in the Software without restriction, including without limitation the rights
|
|
8
|
+
to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
|
|
9
|
+
copies of the Software, and to permit persons to whom the Software is
|
|
10
|
+
furnished to do so, subject to the following conditions:
|
|
11
|
+
|
|
12
|
+
The above copyright notice and this permission notice shall be included in all
|
|
13
|
+
copies or substantial portions of the Software.
|
|
14
|
+
|
|
15
|
+
THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
|
|
16
|
+
IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
|
|
17
|
+
FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
|
|
18
|
+
AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
|
|
19
|
+
LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
|
|
20
|
+
OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
|
|
21
|
+
SOFTWARE.
|
package/README.md
CHANGED
|
@@ -1,3 +1,172 @@
|
|
|
1
|
-
#
|
|
1
|
+
# PatrolTech agent capabilities
|
|
2
2
|
|
|
3
|
-
|
|
3
|
+
Channel-agnostic building blocks to let an AI agent **read and act on a PatrolTech account**: rounds, routes, checkpoints, guards, incidents, users, locations, access control and scans. The same catalog powers the PatrolTech chat assistant (WhatsApp and Telegram) and the [PatrolTech MCP connector](https://mcp.patroltech.online/mcp).
|
|
4
|
+
|
|
5
|
+
[](https://github.com/PatrolTech/agent-capabilities/actions/workflows/ci.yml)
|
|
6
|
+
[](https://www.npmjs.com/package/@patroltech/agent-capabilities)
|
|
7
|
+
[](./LICENSE)
|
|
8
|
+
|
|
9
|
+
- **Reads** return a `ToolResult` the model can read (`{ ok, data, avisos }` or `{ ok: false, error }`).
|
|
10
|
+
- **Actions** never write on their own: each one _prepares_ a proposal, your app shows its summary to the user, and only after the user confirms does it _execute_.
|
|
11
|
+
- Built on the official SDK [`@patroltech/sdk-api`](https://github.com/PatrolTech/sdk-api), generated from the public OpenAPI contract. Every operation the catalog calls is checked against that contract in CI.
|
|
12
|
+
- No channel, database, logger or LLM framework inside: everything external comes in through small ports.
|
|
13
|
+
|
|
14
|
+
> **This package grants no access by itself.** Every call carries the user's token and the PatrolTech API authorizes it (organization and location roles, OAuth scopes and, for MCP agents, a closed list of allowed writes). The checks in this package only produce better messages.
|
|
15
|
+
|
|
16
|
+
## Install
|
|
17
|
+
|
|
18
|
+
```bash
|
|
19
|
+
npm install @patroltech/agent-capabilities zod
|
|
20
|
+
```
|
|
21
|
+
|
|
22
|
+
Node.js 22 or later. `zod` 4 is a peer dependency (the capabilities describe their parameters with it). The package is ESM.
|
|
23
|
+
|
|
24
|
+
## Quick start
|
|
25
|
+
|
|
26
|
+
```ts
|
|
27
|
+
import {
|
|
28
|
+
SdkPatrolTechGateway,
|
|
29
|
+
buildCatalog,
|
|
30
|
+
noopLogger,
|
|
31
|
+
type CapabilityContext,
|
|
32
|
+
} from '@patroltech/agent-capabilities';
|
|
33
|
+
|
|
34
|
+
const gateway = new SdkPatrolTechGateway({
|
|
35
|
+
baseUrl: 'https://api.patroltech.online',
|
|
36
|
+
logger: noopLogger, // or your own { info, warn, error }
|
|
37
|
+
timeoutMs: 10_000,
|
|
38
|
+
});
|
|
39
|
+
|
|
40
|
+
// Build once. In the `mcp` channel only operational capabilities are offered, with neutral texts.
|
|
41
|
+
const { reads, actions } = buildCatalog({ gateway }, { channel: 'mcp' });
|
|
42
|
+
|
|
43
|
+
// Per call: the user's session. The token is a PatrolTech API session token
|
|
44
|
+
// (see the OAuth flow in @patroltech/sdk-api); `organizations` come from that session.
|
|
45
|
+
const org = { orgId: 'org-123', name: 'Acme Security', roleType: 'EDITOR', scope: 'organization' };
|
|
46
|
+
const ctx: CapabilityContext = {
|
|
47
|
+
org,
|
|
48
|
+
organizations: [org],
|
|
49
|
+
token: apiSessionToken,
|
|
50
|
+
tz: 'Europe/Madrid',
|
|
51
|
+
country: 'ES',
|
|
52
|
+
language: 'en',
|
|
53
|
+
};
|
|
54
|
+
|
|
55
|
+
const status = reads.find(({ meta }) => meta.id === 'rounds.get_status');
|
|
56
|
+
const result = await status?.read.call(ctx, {});
|
|
57
|
+
// result: { ok: true, data: ... } or { ok: false, error: '...' } (never a raw API error)
|
|
58
|
+
```
|
|
59
|
+
|
|
60
|
+
Each entry comes with its metadata (`meta`): a stable `id` (`rounds.get_status`), `title` and `summary` in English and Spanish, `returns` (how to read the result, for reads), `readOnly`, `destructive`, `scope` and the SDK `operationIds` it calls. MCP servers should describe tools with `meta.title`, `meta.summary` and `meta.returns`. For English tool schemas, `englishInputSchema(meta.id, params)` translates the parameter names and descriptions, `argsFromEnglish` maps the arguments back and `englishFields` translates the output field names (and the fixed incident status and priority labels, to the values the English params use). Texts written for people (summaries, notices, reasons) follow the language of the user.
|
|
61
|
+
|
|
62
|
+
### One gateway, many users
|
|
63
|
+
|
|
64
|
+
`SdkPatrolTechGateway` keeps no global state: each call builds its own SDK configuration (base URL, token, `fetch`, timeout) with `createApiClient`, so one instance can serve any number of users concurrently. Options:
|
|
65
|
+
|
|
66
|
+
| Option | Default | Notes |
|
|
67
|
+
| ---------------- | -------------- | ------------------------------------------------------------------------------------------------------------------------------------- |
|
|
68
|
+
| `baseUrl` | required | API origin, without `/api`. |
|
|
69
|
+
| `fetchImpl` | global `fetch` | For tests or instrumentation. |
|
|
70
|
+
| `timeoutMs` | `10000` | Per call, with `AbortSignal.timeout`. |
|
|
71
|
+
| `logger` | no-op | Receives failures with their detail; the model never does. |
|
|
72
|
+
| `defaultHeaders` | none | `() => Record<string, string>`, evaluated per request (for example `X-Request-Id`). Any `Authorization` header it returns is dropped. |
|
|
73
|
+
|
|
74
|
+
API rejections surface as `PatrolTechApiError` (status, path and body). `translateBackendError(err, language, options)` turns them into a message for the user in Spanish, English or French. `callSdk(config, token, path, call)` runs any other `@patroltech/sdk-api` function the same way (per-call config, timeout, errors as `PatrolTechApiError`).
|
|
75
|
+
|
|
76
|
+
## Proposals and confirmation
|
|
77
|
+
|
|
78
|
+
Write actions follow a propose → confirm → execute flow:
|
|
79
|
+
|
|
80
|
+
1. `action.preparar(ctx, params)` resolves names to ids, checks limits and returns the parameters to store, or `{ error }` for the model.
|
|
81
|
+
2. Your app stores the proposal in a `PendingActionStore` and shows `action.resumen(params, { idioma, organizacion })` to the user.
|
|
82
|
+
3. When the user confirms, claim it with `claimForExecution` and run `action.ejecutar(ctx, params)` with the session of that moment.
|
|
83
|
+
|
|
84
|
+
Batch helpers (`reservarEnLote`, `liberarEnLote`, `aceptarEnLote`, `huellaDePropuesta`, `MAX_POR_LOTE`) cap a batch at 10 proposals and drop duplicates. They protect the user from model mistakes; they are not a security barrier (the API is).
|
|
85
|
+
|
|
86
|
+
### `PendingActionStore` and the `contextKey` rule
|
|
87
|
+
|
|
88
|
+
`PendingActionStore` is a port: implement it on your own storage (a database table, Redis, memory for a single-process server). Proposals are indexed by a `contextKey`.
|
|
89
|
+
|
|
90
|
+
**Bind the `contextKey` to the user _and_ to the conversation or client session**, for example `<userId>:<conversationId>` in a chat bot or `<userId>:<clientId>:<sessionId>` in an MCP server, and never share it between users. Whoever holds a `contextKey` can see, confirm or cancel the proposals stored under it. Also check, when executing, that the session user is still the one who proposed.
|
|
91
|
+
|
|
92
|
+
## Ports
|
|
93
|
+
|
|
94
|
+
| Port | What it does | Who implements it |
|
|
95
|
+
| -------------------- | -------------------------------------------------------------------------- | -------------------------------------------------------------- |
|
|
96
|
+
| `PatrolTechGateway` | Every call to the PatrolTech API. | `SdkPatrolTechGateway` (included) or a test double. |
|
|
97
|
+
| `PendingActionStore` | Stores proposals until the user confirms them, by `contextKey`. | You (database, Redis, memory). |
|
|
98
|
+
| `FileSink` | Where generated files go (checkpoint QR codes, CSV exports). One per call. | You: a chat sends them, an MCP server returns them as content. |
|
|
99
|
+
| `Logger` | Traces and failures. `noopLogger` if you want none. | You. |
|
|
100
|
+
|
|
101
|
+
`FileSink` goes in the call context (`ctx.files`), never in the shared dependencies: a sink shared between users would send one user's files to another. File capabilities are only offered with `buildCatalog({ gateway, offerFiles: true }, …)`.
|
|
102
|
+
|
|
103
|
+
## Channels
|
|
104
|
+
|
|
105
|
+
- **`mcp`**: operational reads and the writes the PatrolTech API allows to agents. Destructive or sensitive actions (deleting a time window or a location, archiving or moving a checkpoint, anti-fraud settings, changing or removing a user's access), actions that give access to someone else (inviting a user, creating a guard) and billing links are not offered. Texts never mention plans or upgrades (`upsell: false`).
|
|
106
|
+
- **`bot`**: everything, for a first-party assistant where the user talks to PatrolTech directly.
|
|
107
|
+
|
|
108
|
+
Every catalog entry declares its channels; the tests check that no `mcp` capability calls an operation that grants access and that its writes are exactly the ones the API allows to agents.
|
|
109
|
+
|
|
110
|
+
## Prompt injection
|
|
111
|
+
|
|
112
|
+
Names of routes, checkpoints, locations and guards, incident texts and user names are written by people in the account and reach the model as data inside `ToolResult`. Treat them as data, never as instructions (for example, wrap tool results with a note saying so), and keep the human confirmation of every write.
|
|
113
|
+
|
|
114
|
+
## Testing
|
|
115
|
+
|
|
116
|
+
`@patroltech/agent-capabilities/testing` exports `FakePatrolTechGateway` (in-memory, with fictitious data), `RecordingFileSink` and helpers to build read contexts.
|
|
117
|
+
|
|
118
|
+
## Contract checks
|
|
119
|
+
|
|
120
|
+
- `src/catalog/public-contract.spec.ts` downloads the public contract published by [`PatrolTech/sdk-api`](https://github.com/PatrolTech/sdk-api) at the tag of the installed SDK version (`v<version>/openapi/openapi.public.json`) and checks that every `operationId` of every capability exists there and as a function of `@patroltech/sdk-api`. Offline, point `PATROLTECH_PUBLIC_CONTRACT` to a local copy of that file.
|
|
121
|
+
- Dependabot opens a pull request for every new SDK version; CI runs that check on it.
|
|
122
|
+
|
|
123
|
+
### Known contract gaps
|
|
124
|
+
|
|
125
|
+
Calls made with `sdkFetch` and the SDK URL builder because the contract does not declare a query parameter the API needs yet:
|
|
126
|
+
|
|
127
|
+
| operationId | Call | Missing in the contract |
|
|
128
|
+
| ----------------------------- | --------------------------------------------------------------- | -------------------------------------- |
|
|
129
|
+
| `getIncidentDetail` | `GET /api/features/incident-reporting/incidents/{id}` | query `locationId` or `organizationId` |
|
|
130
|
+
| `updateIncidentStatus` | `PATCH /api/features/incident-reporting/incidents/{id}/status` | same |
|
|
131
|
+
| `assignIncident` | `PATCH /api/features/incident-reporting/incidents/{id}/assign` | same |
|
|
132
|
+
| `addIncidentComment` | `POST /api/features/incident-reporting/incidents/{id}/comments` | same |
|
|
133
|
+
| `createCheckoutSession` | `POST /api/payments/checkout-session` | query `organizationId` |
|
|
134
|
+
| `createCustomerPortalSession` | `POST /api/payments/customer-portal` | same |
|
|
135
|
+
|
|
136
|
+
Types completed by hand where the contract is loose:
|
|
137
|
+
|
|
138
|
+
| operationId | Gap | Local type |
|
|
139
|
+
| ------------------------------------- | ------------------------------------------------------------------- | -------------------------------------------------------- |
|
|
140
|
+
| `getRouteRounds` | Each round is a free-form object. | `RouteRoundItem` |
|
|
141
|
+
| `getIncidentDetail` | `media[].type` (`PHOTO`/`VIDEO`) is not declared. | `IncidentDetailItem` |
|
|
142
|
+
| `listCheckpoints`, `createCheckpoint` | `createdAt` is not declared; `fraudRules` may arrive as JSON text. | `CheckpointItem`, `RawFraudRules` |
|
|
143
|
+
| `getLicenseInfo`, `getPaymentPrices` | The nullable `allOf` generated by orval loses `null`. | Read as `LicenseUsage \| null` / `PlanPricing \| null` |
|
|
144
|
+
| `getLicenseInfo` | Whether the organization already pays a subscription is not public. | `PlanUsage.pagaSuscripcion` is always `null` (see below) |
|
|
145
|
+
| `createOrganizationUser` | `meta.emailSent` (outside `data`) is not declared. | Defensive read of `meta` |
|
|
146
|
+
|
|
147
|
+
Because the public contract does not say whether an organization already pays, the checkout link capability relies on the API: when it refuses a second subscription (`409 ALREADY_SUBSCRIBED`), the capability returns the customer portal link instead.
|
|
148
|
+
|
|
149
|
+
## Development
|
|
150
|
+
|
|
151
|
+
```bash
|
|
152
|
+
npm ci
|
|
153
|
+
npm run format:check
|
|
154
|
+
npm run lint
|
|
155
|
+
npm test # needs network access to read the published contract
|
|
156
|
+
npm run build
|
|
157
|
+
```
|
|
158
|
+
|
|
159
|
+
Contributions are welcome through pull requests. Security issues: see [SECURITY.md](./SECURITY.md); never include credentials, tokens or customer data in issues.
|
|
160
|
+
|
|
161
|
+
## Related
|
|
162
|
+
|
|
163
|
+
- [`@patroltech/sdk-api`](https://github.com/PatrolTech/sdk-api): the TypeScript SDK and the public OpenAPI contract, with the OAuth 2.1 flow.
|
|
164
|
+
- [PatrolTech MCP connector](https://mcp.patroltech.online/mcp) and its client configurations in [`PatrolTech/ai-integrations`](https://github.com/PatrolTech/ai-integrations).
|
|
165
|
+
|
|
166
|
+
## About PatrolTech
|
|
167
|
+
|
|
168
|
+
PatrolTech is guard tour and security patrol software developed by Ingenieros Web SL in Madrid, Spain: QR/NFC checkpoint recording, offline patrol records, incident reports and a management dashboard. [patroltech.online](https://patroltech.online/en)
|
|
169
|
+
|
|
170
|
+
## License
|
|
171
|
+
|
|
172
|
+
[MIT](./LICENSE) © Ingenieros Web SL
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"alerts.d.ts","sourceRoot":"","sources":["../../src/actions/alerts.ts"],"names":[],"mappings":"AAQA,OAAO,EAAmB,KAAK,gBAAgB,EAAE,KAAK,SAAS,EAAE,MAAM,YAAY,CAAC;AAgDpF,wBAAgB,kBAAkB,CAAC,EAAE,OAAO,EAAE,EAAE,SAAS,GAAG,gBAAgB,CAkD3E"}
|
|
@@ -0,0 +1,90 @@
|
|
|
1
|
+
import { z } from 'zod';
|
|
2
|
+
import { segunIdioma } from '../domain/language.js';
|
|
3
|
+
import { ALERT_CHANNELS, ALERT_TYPES, } from '../gateway/index.js';
|
|
4
|
+
import { defineBotAction } from './types.js';
|
|
5
|
+
/** Activar o desactivar una alerta del propio usuario. */
|
|
6
|
+
/** Nombre de cada alerta tal como sale en «Preferencias de notificaciones» del panel. */
|
|
7
|
+
const ALERT_LABELS = {
|
|
8
|
+
pending_route: { es: 'Ruta pendiente', en: 'Pending route', fr: 'Parcours en attente' },
|
|
9
|
+
missed_route: { es: 'Ruta no completada', en: 'Missed route', fr: 'Parcours non effectué' },
|
|
10
|
+
upcoming_deadline: { es: 'Fecha límite próxima', en: 'Upcoming deadline', fr: 'Échéance proche' },
|
|
11
|
+
patroller_inactive: { es: 'Patrullero inactivo', en: 'Inactive patroller', fr: 'Agent inactif' },
|
|
12
|
+
suspicious_scan: { es: 'Escaneo sospechoso', en: 'Suspicious scan', fr: 'Scan suspect' },
|
|
13
|
+
role_assignment: { es: 'Asignación de rol', en: 'Role assignment', fr: 'Attribution de rôle' },
|
|
14
|
+
incident_created: { es: 'Nueva incidencia', en: 'New incident', fr: 'Nouvel incident' },
|
|
15
|
+
incident_status_changed: {
|
|
16
|
+
es: 'Estado de incidencia cambiado',
|
|
17
|
+
en: 'Incident status changed',
|
|
18
|
+
fr: "Statut d'incident modifié",
|
|
19
|
+
},
|
|
20
|
+
incident_assigned: { es: 'Incidencia asignada', en: 'Incident assigned', fr: 'Incident assigné' },
|
|
21
|
+
incident_comment: {
|
|
22
|
+
es: 'Comentario en incidencia',
|
|
23
|
+
en: 'Incident comment',
|
|
24
|
+
fr: 'Commentaire sur un incident',
|
|
25
|
+
},
|
|
26
|
+
};
|
|
27
|
+
const CHANNEL_LABELS = {
|
|
28
|
+
email: 'email',
|
|
29
|
+
push: 'push',
|
|
30
|
+
whatsapp: 'WhatsApp',
|
|
31
|
+
};
|
|
32
|
+
/** Tipos sin canal WhatsApp en el registro de alertas del backend (`availableChannels`). */
|
|
33
|
+
const SIN_WHATSAPP = ['incident_assigned', 'incident_comment'];
|
|
34
|
+
const alertParams = {
|
|
35
|
+
tipo: z
|
|
36
|
+
.enum(ALERT_TYPES)
|
|
37
|
+
.describe('Tipo de alerta: pending_route = Ruta pendiente; missed_route = Ruta no completada; upcoming_deadline = Fecha límite próxima; ' +
|
|
38
|
+
'patroller_inactive = Patrullero inactivo; suspicious_scan = Escaneo sospechoso; role_assignment = Asignación de rol; ' +
|
|
39
|
+
'incident_created = Nueva incidencia; incident_status_changed = Estado de incidencia cambiado; incident_assigned = Incidencia asignada; ' +
|
|
40
|
+
'incident_comment = Comentario en incidencia'),
|
|
41
|
+
canal: z.enum(ALERT_CHANNELS).describe('Canal: email, push o whatsapp'),
|
|
42
|
+
activar: z
|
|
43
|
+
.boolean()
|
|
44
|
+
.describe('true = empezar a recibirla por ese canal; false = dejar de recibirla'),
|
|
45
|
+
};
|
|
46
|
+
export function setAlertPreference({ gateway }) {
|
|
47
|
+
return defineBotAction({
|
|
48
|
+
nombre: 'set_alert_preference',
|
|
49
|
+
tool: 'proponer_cambiar_alerta',
|
|
50
|
+
descripcion: 'Prepara activar o desactivar UNA alerta del propio usuario por un canal (email, push o WhatsApp). Solo cambia sus avisos, ' +
|
|
51
|
+
'no los de otros usuarios. NO lo cambia: le envía un resumen con un botón para confirmarlo. Úsala cuando el cliente quiera ' +
|
|
52
|
+
'dejar de recibir o empezar a recibir un aviso. Para varios cambios, llámala una vez por cada uno en el MISMO turno: van juntos en una sola confirmación. ' +
|
|
53
|
+
'Por WhatsApp solo llegan de verdad Ruta no completada, Patrullero inactivo y Escaneo sospechoso.',
|
|
54
|
+
params: alertParams,
|
|
55
|
+
rolMinimo: 'VIEWER',
|
|
56
|
+
async preparar(_ctx, p) {
|
|
57
|
+
if (p.canal === 'whatsapp' && SIN_WHATSAPP.includes(p.tipo)) {
|
|
58
|
+
return {
|
|
59
|
+
error: `La alerta «${ALERT_LABELS[p.tipo].es}» no tiene canal WhatsApp: solo email y push.`,
|
|
60
|
+
};
|
|
61
|
+
}
|
|
62
|
+
return { params: p };
|
|
63
|
+
},
|
|
64
|
+
resumen(p, { idioma }) {
|
|
65
|
+
const alerta = ALERT_LABELS[p.tipo][idioma];
|
|
66
|
+
const canal = CHANNEL_LABELS[p.canal];
|
|
67
|
+
return segunIdioma(idioma, {
|
|
68
|
+
es: `${p.activar ? 'Activar' : 'Desactivar'} la alerta «${alerta}» por ${canal} para tu usuario. ` +
|
|
69
|
+
'Solo te afecta a ti, en todas tus organizaciones; no cambia los avisos de nadie más.',
|
|
70
|
+
en: `${p.activar ? 'Turn on' : 'Turn off'} the «${alerta}» alert by ${canal} for your user. ` +
|
|
71
|
+
'It only affects you, in all your organizations; nobody else’s notices change.',
|
|
72
|
+
fr: `${p.activar ? 'Activer' : 'Désactiver'} l'alerte «${alerta}» par ${canal} pour votre utilisateur. ` +
|
|
73
|
+
'Cela ne concerne que vous, dans toutes vos organisations ; les avis des autres ne changent pas.',
|
|
74
|
+
});
|
|
75
|
+
},
|
|
76
|
+
async ejecutar(ctx, p) {
|
|
77
|
+
await gateway.setAlertPreference({ tipo: p.tipo, canal: p.canal, activar: p.activar }, ctx.token);
|
|
78
|
+
const alerta = ALERT_LABELS[p.tipo][ctx.language];
|
|
79
|
+
const canal = CHANNEL_LABELS[p.canal];
|
|
80
|
+
return {
|
|
81
|
+
texto: segunIdioma(ctx.language, {
|
|
82
|
+
es: `✅ Hecho: la alerta «${alerta}» por ${canal} queda ${p.activar ? 'activada' : 'desactivada'} para tu usuario.`,
|
|
83
|
+
en: `✅ Done: the «${alerta}» alert by ${canal} is now ${p.activar ? 'on' : 'off'} for your user.`,
|
|
84
|
+
fr: `✅ C'est fait : l'alerte «${alerta}» par ${canal} est maintenant ${p.activar ? 'activée' : 'désactivée'} pour votre utilisateur.`,
|
|
85
|
+
}),
|
|
86
|
+
};
|
|
87
|
+
},
|
|
88
|
+
});
|
|
89
|
+
}
|
|
90
|
+
//# sourceMappingURL=alerts.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"alerts.js","sourceRoot":"","sources":["../../src/actions/alerts.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,67 @@
|
|
|
1
|
+
import type { ActionDefinition } from './types.js';
|
|
2
|
+
/**
|
|
3
|
+
* Reglas de negocio de un lote de propuestas (las de UN turno, que salen juntas
|
|
4
|
+
* en una sola confirmación), sacadas del colector del bot (`collectProposals`)
|
|
5
|
+
* para que el bot y el servidor MCP apliquen exactamente las mismas.
|
|
6
|
+
*
|
|
7
|
+
* Funciones puras sobre un estado inmutable: sin BD, sin canal y sin reloj. El
|
|
8
|
+
* orden de la lista y la serialización de las llamadas concurrentes son del
|
|
9
|
+
* motor de cada consumidor. Uso por propuesta:
|
|
10
|
+
* 1. `reservarEnLote` ANTES de preparar (cupo del lote y un borrado por confirmación);
|
|
11
|
+
* 2. si preparar falla o lanza, `liberarEnLote` (un borrado no preparado no cuenta);
|
|
12
|
+
* 3. si sale bien, `aceptarEnLote` (descarta la repetida).
|
|
13
|
+
*/
|
|
14
|
+
/** Máximo de acciones en una confirmación: la lista tiene que poder leerse entera antes de pulsar. */
|
|
15
|
+
export declare const MAX_POR_LOTE = 10;
|
|
16
|
+
export declare const LOTE_LLENO = "m\u00E1ximo 10 por confirmaci\u00F3n; prop\u00F3n el resto despu\u00E9s";
|
|
17
|
+
export declare const UN_BORRADO_POR_LOTE = "Solo se puede borrar una ubicaci\u00F3n por confirmaci\u00F3n: prop\u00F3n la siguiente cuando esta est\u00E9 hecha.";
|
|
18
|
+
export declare const REPETIDA: string;
|
|
19
|
+
/** Una propuesta ya preparada, tal como la compara el lote. */
|
|
20
|
+
export interface PropuestaDelLote {
|
|
21
|
+
definition: Pick<ActionDefinition, 'nombre' | 'huella'>;
|
|
22
|
+
orgId: string;
|
|
23
|
+
params: Record<string, unknown>;
|
|
24
|
+
}
|
|
25
|
+
/** Lo que el lote lleva contado en el turno. */
|
|
26
|
+
export interface EstadoDelLote {
|
|
27
|
+
/**
|
|
28
|
+
* Huecos ya pedidos en el turno. El hueco de una propuesta rechazada
|
|
29
|
+
* sigue contando para el máximo; liberarlo desordenaría la lista y, con 10 de
|
|
30
|
+
* margen, no compensa.
|
|
31
|
+
*/
|
|
32
|
+
reservas: number;
|
|
33
|
+
/** Borrados de ubicación reservados o aceptados (como mucho uno). */
|
|
34
|
+
borrados: number;
|
|
35
|
+
/** Huellas de las propuestas aceptadas, en orden. */
|
|
36
|
+
huellas: readonly string[];
|
|
37
|
+
}
|
|
38
|
+
/** El lote al empezar el turno (y tras enviarlo). */
|
|
39
|
+
export declare const LOTE_VACIO: EstadoDelLote;
|
|
40
|
+
type Decision = {
|
|
41
|
+
ok: true;
|
|
42
|
+
estado: EstadoDelLote;
|
|
43
|
+
} | {
|
|
44
|
+
ok: false;
|
|
45
|
+
error: string;
|
|
46
|
+
};
|
|
47
|
+
/**
|
|
48
|
+
* Misma acción, organización e identidad: la que define la acción (`huella`) o,
|
|
49
|
+
* sin ella, todos los parámetros ya preparados (las claves en cualquier orden).
|
|
50
|
+
*/
|
|
51
|
+
export declare function huellaDePropuesta(p: PropuestaDelLote): string;
|
|
52
|
+
/** Antes de preparar: ¿cabe otra propuesta de esta acción en el lote? Si cabe, la reserva. */
|
|
53
|
+
export declare function reservarEnLote(estado: EstadoDelLote, nombre: string): Decision;
|
|
54
|
+
/**
|
|
55
|
+
* La preparación de una reservada falló o lanzó: un borrado que no llega a
|
|
56
|
+
* prepararse (nombre mal escrito, backend caído) no cuenta, para que el reintento
|
|
57
|
+
* corregido del mismo turno se admita. Su hueco sigue contando.
|
|
58
|
+
*/
|
|
59
|
+
export declare function liberarEnLote(estado: EstadoDelLote, nombre: string): EstadoDelLote;
|
|
60
|
+
/**
|
|
61
|
+
* Tras preparar: la acepta salvo que sea la misma que otra ya aceptada (p. ej.
|
|
62
|
+
* quitar un acceso dos veces haría fallar la segunda al confirmar, con la primera
|
|
63
|
+
* ya hecha). Se compara lo preparado: dos formas de nombrar lo mismo son la misma.
|
|
64
|
+
*/
|
|
65
|
+
export declare function aceptarEnLote(estado: EstadoDelLote, propuesta: PropuestaDelLote): Decision;
|
|
66
|
+
export {};
|
|
67
|
+
//# sourceMappingURL=batch-policy.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"batch-policy.d.ts","sourceRoot":"","sources":["../../src/actions/batch-policy.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,gBAAgB,EAAE,MAAM,YAAY,CAAC;AAEnD;;;;;;;;;;;GAWG;AAEH,sGAAsG;AACtG,eAAO,MAAM,YAAY,KAAK,CAAC;AAC/B,eAAO,MAAM,UAAU,4EAAwD,CAAC;AAChF,eAAO,MAAM,mBAAmB,yHACoE,CAAC;AACrG,eAAO,MAAM,QAAQ,QAEkB,CAAC;AAExC,+DAA+D;AAC/D,MAAM,WAAW,gBAAgB;IAC/B,UAAU,EAAE,IAAI,CAAC,gBAAgB,EAAE,QAAQ,GAAG,QAAQ,CAAC,CAAC;IACxD,KAAK,EAAE,MAAM,CAAC;IACd,MAAM,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAAC;CACjC;AAED,gDAAgD;AAChD,MAAM,WAAW,aAAa;IAC5B;;;;OAIG;IACH,QAAQ,EAAE,MAAM,CAAC;IACjB,qEAAqE;IACrE,QAAQ,EAAE,MAAM,CAAC;IACjB,qDAAqD;IACrD,OAAO,EAAE,SAAS,MAAM,EAAE,CAAC;CAC5B;AAED,qDAAqD;AACrD,eAAO,MAAM,UAAU,EAAE,aAAyD,CAAC;AAEnF,KAAK,QAAQ,GAAG;IAAE,EAAE,EAAE,IAAI,CAAC;IAAC,MAAM,EAAE,aAAa,CAAA;CAAE,GAAG;IAAE,EAAE,EAAE,KAAK,CAAC;IAAC,KAAK,EAAE,MAAM,CAAA;CAAE,CAAC;AAQnF;;;GAGG;AACH,wBAAgB,iBAAiB,CAAC,CAAC,EAAE,gBAAgB,GAAG,MAAM,CAQ7D;AAED,8FAA8F;AAC9F,wBAAgB,cAAc,CAAC,MAAM,EAAE,aAAa,EAAE,MAAM,EAAE,MAAM,GAAG,QAAQ,CAW9E;AAED;;;;GAIG;AACH,wBAAgB,aAAa,CAAC,MAAM,EAAE,aAAa,EAAE,MAAM,EAAE,MAAM,GAAG,aAAa,CAElF;AAED;;;;GAIG;AACH,wBAAgB,aAAa,CAAC,MAAM,EAAE,aAAa,EAAE,SAAS,EAAE,gBAAgB,GAAG,QAAQ,CAI1F"}
|
|
@@ -0,0 +1,73 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Reglas de negocio de un lote de propuestas (las de UN turno, que salen juntas
|
|
3
|
+
* en una sola confirmación), sacadas del colector del bot (`collectProposals`)
|
|
4
|
+
* para que el bot y el servidor MCP apliquen exactamente las mismas.
|
|
5
|
+
*
|
|
6
|
+
* Funciones puras sobre un estado inmutable: sin BD, sin canal y sin reloj. El
|
|
7
|
+
* orden de la lista y la serialización de las llamadas concurrentes son del
|
|
8
|
+
* motor de cada consumidor. Uso por propuesta:
|
|
9
|
+
* 1. `reservarEnLote` ANTES de preparar (cupo del lote y un borrado por confirmación);
|
|
10
|
+
* 2. si preparar falla o lanza, `liberarEnLote` (un borrado no preparado no cuenta);
|
|
11
|
+
* 3. si sale bien, `aceptarEnLote` (descarta la repetida).
|
|
12
|
+
*/
|
|
13
|
+
/** Máximo de acciones en una confirmación: la lista tiene que poder leerse entera antes de pulsar. */
|
|
14
|
+
export const MAX_POR_LOTE = 10;
|
|
15
|
+
export const LOTE_LLENO = 'máximo 10 por confirmación; propón el resto después';
|
|
16
|
+
export const UN_BORRADO_POR_LOTE = 'Solo se puede borrar una ubicación por confirmación: propón la siguiente cuando esta esté hecha.';
|
|
17
|
+
export const REPETIDA = 'Esta acción ya está propuesta en este turno con los mismos datos (la misma organización, persona, checkpoint…): no la repitas. ' +
|
|
18
|
+
'Va una sola vez en la confirmación.';
|
|
19
|
+
/** El lote al empezar el turno (y tras enviarlo). */
|
|
20
|
+
export const LOTE_VACIO = { reservas: 0, borrados: 0, huellas: [] };
|
|
21
|
+
/**
|
|
22
|
+
* Cada borrado de ubicación comprueba «no es la última» por separado: dos en el
|
|
23
|
+
* mismo lote podrían dejar la organización sin ninguna. Uno por confirmación.
|
|
24
|
+
*/
|
|
25
|
+
const esBorrado = (nombre) => nombre === 'delete_location';
|
|
26
|
+
/**
|
|
27
|
+
* Misma acción, organización e identidad: la que define la acción (`huella`) o,
|
|
28
|
+
* sin ella, todos los parámetros ya preparados (las claves en cualquier orden).
|
|
29
|
+
*/
|
|
30
|
+
export function huellaDePropuesta(p) {
|
|
31
|
+
return JSON.stringify([
|
|
32
|
+
p.definition.nombre,
|
|
33
|
+
p.orgId,
|
|
34
|
+
p.definition.huella
|
|
35
|
+
? p.definition.huella(p.params)
|
|
36
|
+
: Object.entries(p.params).sort(([a], [b]) => a.localeCompare(b)),
|
|
37
|
+
]);
|
|
38
|
+
}
|
|
39
|
+
/** Antes de preparar: ¿cabe otra propuesta de esta acción en el lote? Si cabe, la reserva. */
|
|
40
|
+
export function reservarEnLote(estado, nombre) {
|
|
41
|
+
if (estado.reservas >= MAX_POR_LOTE)
|
|
42
|
+
return { ok: false, error: LOTE_LLENO };
|
|
43
|
+
if (esBorrado(nombre) && estado.borrados > 0)
|
|
44
|
+
return { ok: false, error: UN_BORRADO_POR_LOTE };
|
|
45
|
+
return {
|
|
46
|
+
ok: true,
|
|
47
|
+
estado: {
|
|
48
|
+
...estado,
|
|
49
|
+
reservas: estado.reservas + 1,
|
|
50
|
+
borrados: estado.borrados + (esBorrado(nombre) ? 1 : 0),
|
|
51
|
+
},
|
|
52
|
+
};
|
|
53
|
+
}
|
|
54
|
+
/**
|
|
55
|
+
* La preparación de una reservada falló o lanzó: un borrado que no llega a
|
|
56
|
+
* prepararse (nombre mal escrito, backend caído) no cuenta, para que el reintento
|
|
57
|
+
* corregido del mismo turno se admita. Su hueco sigue contando.
|
|
58
|
+
*/
|
|
59
|
+
export function liberarEnLote(estado, nombre) {
|
|
60
|
+
return esBorrado(nombre) ? { ...estado, borrados: Math.max(0, estado.borrados - 1) } : estado;
|
|
61
|
+
}
|
|
62
|
+
/**
|
|
63
|
+
* Tras preparar: la acepta salvo que sea la misma que otra ya aceptada (p. ej.
|
|
64
|
+
* quitar un acceso dos veces haría fallar la segunda al confirmar, con la primera
|
|
65
|
+
* ya hecha). Se compara lo preparado: dos formas de nombrar lo mismo son la misma.
|
|
66
|
+
*/
|
|
67
|
+
export function aceptarEnLote(estado, propuesta) {
|
|
68
|
+
const huella = huellaDePropuesta(propuesta);
|
|
69
|
+
if (estado.huellas.includes(huella))
|
|
70
|
+
return { ok: false, error: REPETIDA };
|
|
71
|
+
return { ok: true, estado: { ...estado, huellas: [...estado.huellas, huella] } };
|
|
72
|
+
}
|
|
73
|
+
//# sourceMappingURL=batch-policy.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"batch-policy.js","sourceRoot":"","sources":["../../src/actions/batch-policy.ts"],"names":[],"mappings":"AAEA;;;;;;;;;;;GAWG;AAEH,sGAAsG;AACtG,MAAM,CAAC,MAAM,YAAY,GAAG,EAAE,CAAC;AAC/B,MAAM,CAAC,MAAM,UAAU,GAAG,qDAAqD,CAAC;AAChF,MAAM,CAAC,MAAM,mBAAmB,GAC9B,kGAAkG,CAAC;AACrG,MAAM,CAAC,MAAM,QAAQ,GACnB,iIAAiI;IACjI,qCAAqC,CAAC;AAuBxC,qDAAqD;AACrD,MAAM,CAAC,MAAM,UAAU,GAAkB,EAAE,QAAQ,EAAE,CAAC,EAAE,QAAQ,EAAE,CAAC,EAAE,OAAO,EAAE,EAAE,EAAE,CAAC;AAInF;;;GAGG;AACH,MAAM,SAAS,GAAG,CAAC,MAAc,EAAW,EAAE,CAAC,MAAM,KAAK,iBAAiB,CAAC;AAE5E;;;GAGG;AACH,MAAM,UAAU,iBAAiB,CAAC,CAAmB;IACnD,OAAO,IAAI,CAAC,SAAS,CAAC;QACpB,CAAC,CAAC,UAAU,CAAC,MAAM;QACnB,CAAC,CAAC,KAAK;QACP,CAAC,CAAC,UAAU,CAAC,MAAM;YACjB,CAAC,CAAC,CAAC,CAAC,UAAU,CAAC,MAAM,CAAC,CAAC,CAAC,MAAM,CAAC;YAC/B,CAAC,CAAC,MAAM,CAAC,OAAO,CAAC,CAAC,CAAC,MAAM,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,aAAa,CAAC,CAAC,CAAC,CAAC;KACpE,CAAC,CAAC;AACL,CAAC;AAED,8FAA8F;AAC9F,MAAM,UAAU,cAAc,CAAC,MAAqB,EAAE,MAAc;IAClE,IAAI,MAAM,CAAC,QAAQ,IAAI,YAAY;QAAE,OAAO,EAAE,EAAE,EAAE,KAAK,EAAE,KAAK,EAAE,UAAU,EAAE,CAAC;IAC7E,IAAI,SAAS,CAAC,MAAM,CAAC,IAAI,MAAM,CAAC,QAAQ,GAAG,CAAC;QAAE,OAAO,EAAE,EAAE,EAAE,KAAK,EAAE,KAAK,EAAE,mBAAmB,EAAE,CAAC;IAC/F,OAAO;QACL,EAAE,EAAE,IAAI;QACR,MAAM,EAAE;YACN,GAAG,MAAM;YACT,QAAQ,EAAE,MAAM,CAAC,QAAQ,GAAG,CAAC;YAC7B,QAAQ,EAAE,MAAM,CAAC,QAAQ,GAAG,CAAC,SAAS,CAAC,MAAM,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC;SACxD;KACF,CAAC;AACJ,CAAC;AAED;;;;GAIG;AACH,MAAM,UAAU,aAAa,CAAC,MAAqB,EAAE,MAAc;IACjE,OAAO,SAAS,CAAC,MAAM,CAAC,CAAC,CAAC,CAAC,EAAE,GAAG,MAAM,EAAE,QAAQ,EAAE,IAAI,CAAC,GAAG,CAAC,CAAC,EAAE,MAAM,CAAC,QAAQ,GAAG,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,MAAM,CAAC;AAChG,CAAC;AAED;;;;GAIG;AACH,MAAM,UAAU,aAAa,CAAC,MAAqB,EAAE,SAA2B;IAC9E,MAAM,MAAM,GAAG,iBAAiB,CAAC,SAAS,CAAC,CAAC;IAC5C,IAAI,MAAM,CAAC,OAAO,CAAC,QAAQ,CAAC,MAAM,CAAC;QAAE,OAAO,EAAE,EAAE,EAAE,KAAK,EAAE,KAAK,EAAE,QAAQ,EAAE,CAAC;IAC3E,OAAO,EAAE,EAAE,EAAE,IAAI,EAAE,MAAM,EAAE,EAAE,GAAG,MAAM,EAAE,OAAO,EAAE,CAAC,GAAG,MAAM,CAAC,OAAO,EAAE,MAAM,CAAC,EAAE,EAAE,CAAC;AACnF,CAAC"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"checkpoint-archive.d.ts","sourceRoot":"","sources":["../../src/actions/checkpoint-archive.ts"],"names":[],"mappings":"AAWA,OAAO,EAAmB,KAAK,gBAAgB,EAAE,KAAK,SAAS,EAAE,MAAM,YAAY,CAAC;AAgGpF,wBAAgB,iBAAiB,CAAC,GAAG,EAAE,SAAS,GAAG,gBAAgB,CA2FlE"}
|