@patroltech/agent-capabilities 0.0.0-stage → 0.2.1
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/LICENSE +21 -0
- package/README.md +171 -2
- package/dist/actions/alerts.d.ts +3 -0
- package/dist/actions/alerts.d.ts.map +1 -0
- package/dist/actions/alerts.js +90 -0
- package/dist/actions/alerts.js.map +1 -0
- package/dist/actions/batch-policy.d.ts +67 -0
- package/dist/actions/batch-policy.d.ts.map +1 -0
- package/dist/actions/batch-policy.js +73 -0
- package/dist/actions/batch-policy.js.map +1 -0
- package/dist/actions/checkpoint-archive.d.ts +3 -0
- package/dist/actions/checkpoint-archive.d.ts.map +1 -0
- package/dist/actions/checkpoint-archive.js +173 -0
- package/dist/actions/checkpoint-archive.js.map +1 -0
- package/dist/actions/checkpoint-geo.d.ts +4 -0
- package/dist/actions/checkpoint-geo.d.ts.map +1 -0
- package/dist/actions/checkpoint-geo.js +286 -0
- package/dist/actions/checkpoint-geo.js.map +1 -0
- package/dist/actions/checkpoints.d.ts +10 -0
- package/dist/actions/checkpoints.d.ts.map +1 -0
- package/dist/actions/checkpoints.js +222 -0
- package/dist/actions/checkpoints.js.map +1 -0
- package/dist/actions/guard.d.ts +13 -0
- package/dist/actions/guard.d.ts.map +1 -0
- package/dist/actions/guard.js +30 -0
- package/dist/actions/guard.js.map +1 -0
- package/dist/actions/incidents.d.ts +3 -0
- package/dist/actions/incidents.d.ts.map +1 -0
- package/dist/actions/incidents.js +260 -0
- package/dist/actions/incidents.js.map +1 -0
- package/dist/actions/index.d.ts +20 -0
- package/dist/actions/index.d.ts.map +1 -0
- package/dist/actions/index.js +60 -0
- package/dist/actions/index.js.map +1 -0
- package/dist/actions/locations.d.ts +4 -0
- package/dist/actions/locations.d.ts.map +1 -0
- package/dist/actions/locations.js +202 -0
- package/dist/actions/locations.js.map +1 -0
- package/dist/actions/names.d.ts +27 -0
- package/dist/actions/names.d.ts.map +1 -0
- package/dist/actions/names.js +48 -0
- package/dist/actions/names.js.map +1 -0
- package/dist/actions/patrollers.d.ts +6 -0
- package/dist/actions/patrollers.d.ts.map +1 -0
- package/dist/actions/patrollers.js +172 -0
- package/dist/actions/patrollers.js.map +1 -0
- package/dist/actions/route-schedules.d.ts +4 -0
- package/dist/actions/route-schedules.d.ts.map +1 -0
- package/dist/actions/route-schedules.js +110 -0
- package/dist/actions/route-schedules.js.map +1 -0
- package/dist/actions/routes.d.ts +5 -0
- package/dist/actions/routes.d.ts.map +1 -0
- package/dist/actions/routes.js +348 -0
- package/dist/actions/routes.js.map +1 -0
- package/dist/actions/support/antifraud-rules.d.ts +53 -0
- package/dist/actions/support/antifraud-rules.d.ts.map +1 -0
- package/dist/actions/support/antifraud-rules.js +121 -0
- package/dist/actions/support/antifraud-rules.js.map +1 -0
- package/dist/actions/support/elegir-ubicacion.d.ts +31 -0
- package/dist/actions/support/elegir-ubicacion.d.ts.map +1 -0
- package/dist/actions/support/elegir-ubicacion.js +42 -0
- package/dist/actions/support/elegir-ubicacion.js.map +1 -0
- package/dist/actions/support/next-step.d.ts +26 -0
- package/dist/actions/support/next-step.d.ts.map +1 -0
- package/dist/actions/support/next-step.js +55 -0
- package/dist/actions/support/next-step.js.map +1 -0
- package/dist/actions/support/route-impact.d.ts +25 -0
- package/dist/actions/support/route-impact.d.ts.map +1 -0
- package/dist/actions/support/route-impact.js +76 -0
- package/dist/actions/support/route-impact.js.map +1 -0
- package/dist/actions/support/route-lookup.d.ts +27 -0
- package/dist/actions/support/route-lookup.d.ts.map +1 -0
- package/dist/actions/support/route-lookup.js +44 -0
- package/dist/actions/support/route-lookup.js.map +1 -0
- package/dist/actions/support/schedule.d.ts +38 -0
- package/dist/actions/support/schedule.d.ts.map +1 -0
- package/dist/actions/support/schedule.js +62 -0
- package/dist/actions/support/schedule.js.map +1 -0
- package/dist/actions/support/shared.d.ts +112 -0
- package/dist/actions/support/shared.d.ts.map +1 -0
- package/dist/actions/support/shared.js +171 -0
- package/dist/actions/support/shared.js.map +1 -0
- package/dist/actions/support/texts.d.ts +47 -0
- package/dist/actions/support/texts.d.ts.map +1 -0
- package/dist/actions/support/texts.js +134 -0
- package/dist/actions/support/texts.js.map +1 -0
- package/dist/actions/support/turno.d.ts +16 -0
- package/dist/actions/support/turno.d.ts.map +1 -0
- package/dist/actions/support/turno.js +35 -0
- package/dist/actions/support/turno.js.map +1 -0
- package/dist/actions/support/user-access.d.ts +72 -0
- package/dist/actions/support/user-access.d.ts.map +1 -0
- package/dist/actions/support/user-access.js +194 -0
- package/dist/actions/support/user-access.js.map +1 -0
- package/dist/actions/types.d.ts +130 -0
- package/dist/actions/types.d.ts.map +1 -0
- package/dist/actions/types.js +20 -0
- package/dist/actions/types.js.map +1 -0
- package/dist/actions/user-roles.d.ts +4 -0
- package/dist/actions/user-roles.d.ts.map +1 -0
- package/dist/actions/user-roles.js +195 -0
- package/dist/actions/user-roles.js.map +1 -0
- package/dist/actions/users.d.ts +3 -0
- package/dist/actions/users.d.ts.map +1 -0
- package/dist/actions/users.js +146 -0
- package/dist/actions/users.js.map +1 -0
- package/dist/catalog/buildCatalog.d.ts +19 -0
- package/dist/catalog/buildCatalog.d.ts.map +1 -0
- package/dist/catalog/buildCatalog.js +38 -0
- package/dist/catalog/buildCatalog.js.map +1 -0
- package/dist/catalog/english.d.ts +17 -0
- package/dist/catalog/english.d.ts.map +1 -0
- package/dist/catalog/english.js +392 -0
- package/dist/catalog/english.js.map +1 -0
- package/dist/catalog/entries.d.ts +6 -0
- package/dist/catalog/entries.d.ts.map +1 -0
- package/dist/catalog/entries.js +610 -0
- package/dist/catalog/entries.js.map +1 -0
- package/dist/catalog/types.d.ts +61 -0
- package/dist/catalog/types.d.ts.map +1 -0
- package/dist/catalog/types.js +2 -0
- package/dist/catalog/types.js.map +1 -0
- package/dist/context.d.ts +37 -0
- package/dist/context.d.ts.map +1 -0
- package/dist/context.js +11 -0
- package/dist/context.js.map +1 -0
- package/dist/deps.d.ts +23 -0
- package/dist/deps.d.ts.map +1 -0
- package/dist/deps.js +12 -0
- package/dist/deps.js.map +1 -0
- package/dist/domain/access-logs-csv.d.ts +25 -0
- package/dist/domain/access-logs-csv.d.ts.map +1 -0
- package/dist/domain/access-logs-csv.js +36 -0
- package/dist/domain/access-logs-csv.js.map +1 -0
- package/dist/domain/backend-errors.d.ts +54 -0
- package/dist/domain/backend-errors.d.ts.map +1 -0
- package/dist/domain/backend-errors.js +364 -0
- package/dist/domain/backend-errors.js.map +1 -0
- package/dist/domain/country.d.ts +9 -0
- package/dist/domain/country.d.ts.map +1 -0
- package/dist/domain/country.js +13 -0
- package/dist/domain/country.js.map +1 -0
- package/dist/domain/date-range.d.ts +33 -0
- package/dist/domain/date-range.d.ts.map +1 -0
- package/dist/domain/date-range.js +110 -0
- package/dist/domain/date-range.js.map +1 -0
- package/dist/domain/geo.d.ts +14 -0
- package/dist/domain/geo.d.ts.map +1 -0
- package/dist/domain/geo.js +22 -0
- package/dist/domain/geo.js.map +1 -0
- package/dist/domain/guard-app-message.d.ts +15 -0
- package/dist/domain/guard-app-message.d.ts.map +1 -0
- package/dist/domain/guard-app-message.js +39 -0
- package/dist/domain/guard-app-message.js.map +1 -0
- package/dist/domain/incident-priority.d.ts +25 -0
- package/dist/domain/incident-priority.d.ts.map +1 -0
- package/dist/domain/incident-priority.js +15 -0
- package/dist/domain/incident-priority.js.map +1 -0
- package/dist/domain/incident-status.d.ts +29 -0
- package/dist/domain/incident-status.d.ts.map +1 -0
- package/dist/domain/incident-status.js +44 -0
- package/dist/domain/incident-status.js.map +1 -0
- package/dist/domain/language.d.ts +39 -0
- package/dist/domain/language.d.ts.map +1 -0
- package/dist/domain/language.js +112 -0
- package/dist/domain/language.js.map +1 -0
- package/dist/domain/money.d.ts +3 -0
- package/dist/domain/money.d.ts.map +1 -0
- package/dist/domain/money.js +12 -0
- package/dist/domain/money.js.map +1 -0
- package/dist/domain/puesta-en-marcha.d.ts +47 -0
- package/dist/domain/puesta-en-marcha.d.ts.map +1 -0
- package/dist/domain/puesta-en-marcha.js +22 -0
- package/dist/domain/puesta-en-marcha.js.map +1 -0
- package/dist/domain/qr-image.d.ts +25 -0
- package/dist/domain/qr-image.d.ts.map +1 -0
- package/dist/domain/qr-image.js +28 -0
- package/dist/domain/qr-image.js.map +1 -0
- package/dist/domain/resolve-by-name.d.ts +32 -0
- package/dist/domain/resolve-by-name.d.ts.map +1 -0
- package/dist/domain/resolve-by-name.js +40 -0
- package/dist/domain/resolve-by-name.js.map +1 -0
- package/dist/domain/route-checkpoints.d.ts +31 -0
- package/dist/domain/route-checkpoints.d.ts.map +1 -0
- package/dist/domain/route-checkpoints.js +27 -0
- package/dist/domain/route-checkpoints.js.map +1 -0
- package/dist/domain/route-schedule.d.ts +88 -0
- package/dist/domain/route-schedule.d.ts.map +1 -0
- package/dist/domain/route-schedule.js +203 -0
- package/dist/domain/route-schedule.js.map +1 -0
- package/dist/domain/scan-explanation.d.ts +25 -0
- package/dist/domain/scan-explanation.d.ts.map +1 -0
- package/dist/domain/scan-explanation.js +99 -0
- package/dist/domain/scan-explanation.js.map +1 -0
- package/dist/domain/scans-csv.d.ts +37 -0
- package/dist/domain/scans-csv.d.ts.map +1 -0
- package/dist/domain/scans-csv.js +67 -0
- package/dist/domain/scans-csv.js.map +1 -0
- package/dist/domain/timezone.d.ts +61 -0
- package/dist/domain/timezone.d.ts.map +1 -0
- package/dist/domain/timezone.js +113 -0
- package/dist/domain/timezone.js.map +1 -0
- package/dist/domain/tool-result.d.ts +55 -0
- package/dist/domain/tool-result.d.ts.map +1 -0
- package/dist/domain/tool-result.js +47 -0
- package/dist/domain/tool-result.js.map +1 -0
- package/dist/domain/urls.d.ts +33 -0
- package/dist/domain/urls.d.ts.map +1 -0
- package/dist/domain/urls.js +20 -0
- package/dist/domain/urls.js.map +1 -0
- package/dist/gateway/PatrolTechGateway.d.ts +195 -0
- package/dist/gateway/PatrolTechGateway.d.ts.map +1 -0
- package/dist/gateway/PatrolTechGateway.js +2 -0
- package/dist/gateway/PatrolTechGateway.js.map +1 -0
- package/dist/gateway/index.d.ts +4 -0
- package/dist/gateway/index.d.ts.map +1 -0
- package/dist/gateway/index.js +4 -0
- package/dist/gateway/index.js.map +1 -0
- package/dist/gateway/sdk/SdkPatrolTechGateway.d.ts +145 -0
- package/dist/gateway/sdk/SdkPatrolTechGateway.d.ts.map +1 -0
- package/dist/gateway/sdk/SdkPatrolTechGateway.js +101 -0
- package/dist/gateway/sdk/SdkPatrolTechGateway.js.map +1 -0
- package/dist/gateway/sdk/access.d.ts +8 -0
- package/dist/gateway/sdk/access.d.ts.map +1 -0
- package/dist/gateway/sdk/access.js +39 -0
- package/dist/gateway/sdk/access.js.map +1 -0
- package/dist/gateway/sdk/billing.d.ts +7 -0
- package/dist/gateway/sdk/billing.d.ts.map +1 -0
- package/dist/gateway/sdk/billing.js +92 -0
- package/dist/gateway/sdk/billing.js.map +1 -0
- package/dist/gateway/sdk/checkpoint-mappers.d.ts +23 -0
- package/dist/gateway/sdk/checkpoint-mappers.d.ts.map +1 -0
- package/dist/gateway/sdk/checkpoint-mappers.js +59 -0
- package/dist/gateway/sdk/checkpoint-mappers.js.map +1 -0
- package/dist/gateway/sdk/checkpoints.d.ts +33 -0
- package/dist/gateway/sdk/checkpoints.d.ts.map +1 -0
- package/dist/gateway/sdk/checkpoints.js +163 -0
- package/dist/gateway/sdk/checkpoints.js.map +1 -0
- package/dist/gateway/sdk/errors.d.ts +10 -0
- package/dist/gateway/sdk/errors.d.ts.map +1 -0
- package/dist/gateway/sdk/errors.js +46 -0
- package/dist/gateway/sdk/errors.js.map +1 -0
- package/dist/gateway/sdk/incidents.d.ts +18 -0
- package/dist/gateway/sdk/incidents.d.ts.map +1 -0
- package/dist/gateway/sdk/incidents.js +98 -0
- package/dist/gateway/sdk/incidents.js.map +1 -0
- package/dist/gateway/sdk/index.d.ts +4 -0
- package/dist/gateway/sdk/index.d.ts.map +1 -0
- package/dist/gateway/sdk/index.js +4 -0
- package/dist/gateway/sdk/index.js.map +1 -0
- package/dist/gateway/sdk/list.d.ts +15 -0
- package/dist/gateway/sdk/list.d.ts.map +1 -0
- package/dist/gateway/sdk/list.js +12 -0
- package/dist/gateway/sdk/list.js.map +1 -0
- package/dist/gateway/sdk/locations.d.ts +24 -0
- package/dist/gateway/sdk/locations.d.ts.map +1 -0
- package/dist/gateway/sdk/locations.js +44 -0
- package/dist/gateway/sdk/locations.js.map +1 -0
- package/dist/gateway/sdk/patrollers.d.ts +26 -0
- package/dist/gateway/sdk/patrollers.d.ts.map +1 -0
- package/dist/gateway/sdk/patrollers.js +132 -0
- package/dist/gateway/sdk/patrollers.js.map +1 -0
- package/dist/gateway/sdk/rounds.d.ts +15 -0
- package/dist/gateway/sdk/rounds.d.ts.map +1 -0
- package/dist/gateway/sdk/rounds.js +142 -0
- package/dist/gateway/sdk/rounds.js.map +1 -0
- package/dist/gateway/sdk/routes.d.ts +18 -0
- package/dist/gateway/sdk/routes.d.ts.map +1 -0
- package/dist/gateway/sdk/routes.js +74 -0
- package/dist/gateway/sdk/routes.js.map +1 -0
- package/dist/gateway/sdk/scans.d.ts +4 -0
- package/dist/gateway/sdk/scans.d.ts.map +1 -0
- package/dist/gateway/sdk/scans.js +72 -0
- package/dist/gateway/sdk/scans.js.map +1 -0
- package/dist/gateway/sdk/transport.d.ts +77 -0
- package/dist/gateway/sdk/transport.d.ts.map +1 -0
- package/dist/gateway/sdk/transport.js +81 -0
- package/dist/gateway/sdk/transport.js.map +1 -0
- package/dist/gateway/sdk/users.d.ts +15 -0
- package/dist/gateway/sdk/users.d.ts.map +1 -0
- package/dist/gateway/sdk/users.js +49 -0
- package/dist/gateway/sdk/users.js.map +1 -0
- package/dist/gateway/types/access.d.ts +32 -0
- package/dist/gateway/types/access.d.ts.map +1 -0
- package/dist/gateway/types/access.js +2 -0
- package/dist/gateway/types/access.js.map +1 -0
- package/dist/gateway/types/billing.d.ts +60 -0
- package/dist/gateway/types/billing.d.ts.map +1 -0
- package/dist/gateway/types/billing.js +2 -0
- package/dist/gateway/types/billing.js.map +1 -0
- package/dist/gateway/types/checkpoints.d.ts +84 -0
- package/dist/gateway/types/checkpoints.d.ts.map +1 -0
- package/dist/gateway/types/checkpoints.js +2 -0
- package/dist/gateway/types/checkpoints.js.map +1 -0
- package/dist/gateway/types/common.d.ts +13 -0
- package/dist/gateway/types/common.d.ts.map +1 -0
- package/dist/gateway/types/common.js +2 -0
- package/dist/gateway/types/common.js.map +1 -0
- package/dist/gateway/types/incidents.d.ts +53 -0
- package/dist/gateway/types/incidents.d.ts.map +1 -0
- package/dist/gateway/types/incidents.js +2 -0
- package/dist/gateway/types/incidents.js.map +1 -0
- package/dist/gateway/types/index.d.ts +12 -0
- package/dist/gateway/types/index.d.ts.map +1 -0
- package/dist/gateway/types/index.js +12 -0
- package/dist/gateway/types/index.js.map +1 -0
- package/dist/gateway/types/locations.d.ts +7 -0
- package/dist/gateway/types/locations.d.ts.map +1 -0
- package/dist/gateway/types/locations.js +2 -0
- package/dist/gateway/types/locations.js.map +1 -0
- package/dist/gateway/types/patrollers.d.ts +68 -0
- package/dist/gateway/types/patrollers.d.ts.map +1 -0
- package/dist/gateway/types/patrollers.js +15 -0
- package/dist/gateway/types/patrollers.js.map +1 -0
- package/dist/gateway/types/rounds.d.ts +89 -0
- package/dist/gateway/types/rounds.d.ts.map +1 -0
- package/dist/gateway/types/rounds.js +2 -0
- package/dist/gateway/types/rounds.js.map +1 -0
- package/dist/gateway/types/routes.d.ts +48 -0
- package/dist/gateway/types/routes.d.ts.map +1 -0
- package/dist/gateway/types/routes.js +2 -0
- package/dist/gateway/types/routes.js.map +1 -0
- package/dist/gateway/types/scans.d.ts +44 -0
- package/dist/gateway/types/scans.d.ts.map +1 -0
- package/dist/gateway/types/scans.js +2 -0
- package/dist/gateway/types/scans.js.map +1 -0
- package/dist/gateway/types/users.d.ts +32 -0
- package/dist/gateway/types/users.d.ts.map +1 -0
- package/dist/gateway/types/users.js +2 -0
- package/dist/gateway/types/users.js.map +1 -0
- package/dist/index.d.ts +32 -0
- package/dist/index.d.ts.map +1 -0
- package/dist/index.js +40 -0
- package/dist/index.js.map +1 -0
- package/dist/ports/FileSink.d.ts +20 -0
- package/dist/ports/FileSink.d.ts.map +1 -0
- package/dist/ports/FileSink.js +2 -0
- package/dist/ports/FileSink.js.map +1 -0
- package/dist/ports/Logger.d.ts +16 -0
- package/dist/ports/Logger.d.ts.map +1 -0
- package/dist/ports/Logger.js +7 -0
- package/dist/ports/Logger.js.map +1 -0
- package/dist/ports/PendingActionStore.d.ts +84 -0
- package/dist/ports/PendingActionStore.d.ts.map +1 -0
- package/dist/ports/PendingActionStore.js +16 -0
- package/dist/ports/PendingActionStore.js.map +1 -0
- package/dist/reads/access.d.ts +4 -0
- package/dist/reads/access.d.ts.map +1 -0
- package/dist/reads/access.js +129 -0
- package/dist/reads/access.js.map +1 -0
- package/dist/reads/checkpoints.d.ts +4 -0
- package/dist/reads/checkpoints.d.ts.map +1 -0
- package/dist/reads/checkpoints.js +152 -0
- package/dist/reads/checkpoints.js.map +1 -0
- package/dist/reads/files.d.ts +9 -0
- package/dist/reads/files.d.ts.map +1 -0
- package/dist/reads/files.js +222 -0
- package/dist/reads/files.js.map +1 -0
- package/dist/reads/incidents.d.ts +4 -0
- package/dist/reads/incidents.d.ts.map +1 -0
- package/dist/reads/incidents.js +159 -0
- package/dist/reads/incidents.js.map +1 -0
- package/dist/reads/index.d.ts +11 -0
- package/dist/reads/index.d.ts.map +1 -0
- package/dist/reads/index.js +51 -0
- package/dist/reads/index.js.map +1 -0
- package/dist/reads/onboarding.d.ts +4 -0
- package/dist/reads/onboarding.d.ts.map +1 -0
- package/dist/reads/onboarding.js +41 -0
- package/dist/reads/onboarding.js.map +1 -0
- package/dist/reads/organization.d.ts +26 -0
- package/dist/reads/organization.d.ts.map +1 -0
- package/dist/reads/organization.js +45 -0
- package/dist/reads/organization.js.map +1 -0
- package/dist/reads/patrollers.d.ts +11 -0
- package/dist/reads/patrollers.d.ts.map +1 -0
- package/dist/reads/patrollers.js +172 -0
- package/dist/reads/patrollers.js.map +1 -0
- package/dist/reads/plan.d.ts +4 -0
- package/dist/reads/plan.d.ts.map +1 -0
- package/dist/reads/plan.js +195 -0
- package/dist/reads/plan.js.map +1 -0
- package/dist/reads/rounds.d.ts +4 -0
- package/dist/reads/rounds.d.ts.map +1 -0
- package/dist/reads/rounds.js +160 -0
- package/dist/reads/rounds.js.map +1 -0
- package/dist/reads/routes.d.ts +4 -0
- package/dist/reads/routes.d.ts.map +1 -0
- package/dist/reads/routes.js +34 -0
- package/dist/reads/routes.js.map +1 -0
- package/dist/reads/support/access-locations.d.ts +22 -0
- package/dist/reads/support/access-locations.d.ts.map +1 -0
- package/dist/reads/support/access-locations.js +55 -0
- package/dist/reads/support/access-locations.js.map +1 -0
- package/dist/reads/support/excel.d.ts +10 -0
- package/dist/reads/support/excel.d.ts.map +1 -0
- package/dist/reads/support/excel.js +35 -0
- package/dist/reads/support/excel.js.map +1 -0
- package/dist/reads/support/params.d.ts +50 -0
- package/dist/reads/support/params.d.ts.map +1 -0
- package/dist/reads/support/params.js +73 -0
- package/dist/reads/support/params.js.map +1 -0
- package/dist/reads/support/resolve.d.ts +17 -0
- package/dist/reads/support/resolve.d.ts.map +1 -0
- package/dist/reads/support/resolve.js +33 -0
- package/dist/reads/support/resolve.js.map +1 -0
- package/dist/reads/support/results.d.ts +22 -0
- package/dist/reads/support/results.d.ts.map +1 -0
- package/dist/reads/support/results.js +41 -0
- package/dist/reads/support/results.js.map +1 -0
- package/dist/reads/support/roles.d.ts +13 -0
- package/dist/reads/support/roles.d.ts.map +1 -0
- package/dist/reads/support/roles.js +27 -0
- package/dist/reads/support/roles.js.map +1 -0
- package/dist/reads/support/scans.d.ts +31 -0
- package/dist/reads/support/scans.d.ts.map +1 -0
- package/dist/reads/support/scans.js +66 -0
- package/dist/reads/support/scans.js.map +1 -0
- package/dist/reads/types.d.ts +48 -0
- package/dist/reads/types.d.ts.map +1 -0
- package/dist/reads/types.js +5 -0
- package/dist/reads/types.js.map +1 -0
- package/dist/reads/users.d.ts +4 -0
- package/dist/reads/users.d.ts.map +1 -0
- package/dist/reads/users.js +57 -0
- package/dist/reads/users.js.map +1 -0
- package/dist/testing/FakePatrolTechGateway.d.ts +212 -0
- package/dist/testing/FakePatrolTechGateway.d.ts.map +1 -0
- package/dist/testing/FakePatrolTechGateway.js +712 -0
- package/dist/testing/FakePatrolTechGateway.js.map +1 -0
- package/dist/testing/RecordingFileSink.d.ts +12 -0
- package/dist/testing/RecordingFileSink.d.ts.map +1 -0
- package/dist/testing/RecordingFileSink.js +12 -0
- package/dist/testing/RecordingFileSink.js.map +1 -0
- package/dist/testing/index.d.ts +4 -0
- package/dist/testing/index.d.ts.map +1 -0
- package/dist/testing/index.js +4 -0
- package/dist/testing/index.js.map +1 -0
- package/dist/testing/reads.d.ts +34 -0
- package/dist/testing/reads.d.ts.map +1 -0
- package/dist/testing/reads.js +39 -0
- package/dist/testing/reads.js.map +1 -0
- package/package.json +76 -4
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"user-access.d.ts","sourceRoot":"","sources":["../../../src/actions/support/user-access.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,194 @@
|
|
|
1
|
+
import { segunIdioma } from '../../domain/language.js';
|
|
2
|
+
import { normalizeName, resolveByName } from '../../domain/resolve-by-name.js';
|
|
3
|
+
import { ambito, ROL_LABEL_ACCION } from '../../reads/support/roles.js';
|
|
4
|
+
import { ROLES } from '../types.js';
|
|
5
|
+
import { buscarPorEmail, sinCambios } from './shared.js';
|
|
6
|
+
export const esAdminDeOrganizacion = (r, orgId) => r.rol === 'ADMIN' && r.ambito === 'ORGANIZATION' && r.scopeId === orgId;
|
|
7
|
+
/** «Viewer (solo ver)» o el rol tal cual si el backend trae uno que no conocemos. */
|
|
8
|
+
export const etiquetaRol = (rol, idioma) => ROLES.includes(rol ?? '')
|
|
9
|
+
? ROL_LABEL_ACCION[rol][idioma]
|
|
10
|
+
: (rol ?? '?');
|
|
11
|
+
/** La persona por email (exacto, sin mayúsculas) o por nombre, entre los usuarios de la organización. */
|
|
12
|
+
export function elegirPersona(usuarios, dicho) {
|
|
13
|
+
const texto = dicho.trim();
|
|
14
|
+
const noEsta = 'Comprueba con consultar_usuarios_y_roles quién tiene acceso; si es alguien nuevo, propón proponer_invitar_usuario.';
|
|
15
|
+
if (texto.includes('@')) {
|
|
16
|
+
const u = buscarPorEmail(usuarios, texto);
|
|
17
|
+
return u
|
|
18
|
+
? { item: u }
|
|
19
|
+
: {
|
|
20
|
+
error: `Nadie con el email «${texto}» tiene acceso al panel de la organización. ${noEsta}`,
|
|
21
|
+
};
|
|
22
|
+
}
|
|
23
|
+
const r = resolveByName(texto, usuarios, (u) => u.nombre);
|
|
24
|
+
if (r.kind === 'found')
|
|
25
|
+
return { item: r.item };
|
|
26
|
+
if (r.kind === 'ambiguous') {
|
|
27
|
+
const opciones = r.matches.map((u) => `${u.nombre} (${u.email})`).join(', ');
|
|
28
|
+
return {
|
|
29
|
+
error: `Hay varias personas que casan con «${texto}»: ${opciones}. Pregunta al usuario cuál y pasa su email en \`usuario\`.`,
|
|
30
|
+
};
|
|
31
|
+
}
|
|
32
|
+
return {
|
|
33
|
+
error: `No encuentro a «${texto}» entre los usuarios del panel de la organización. ${noEsta}`,
|
|
34
|
+
};
|
|
35
|
+
}
|
|
36
|
+
// Relleno en es/en/fr alrededor de «la organización»; lo que quede tiene que ser UNA de estas palabras.
|
|
37
|
+
export const RELLENO_ORGANIZACION = new Set([
|
|
38
|
+
'el',
|
|
39
|
+
'la',
|
|
40
|
+
'l',
|
|
41
|
+
'de',
|
|
42
|
+
'del',
|
|
43
|
+
'a',
|
|
44
|
+
'al',
|
|
45
|
+
'su',
|
|
46
|
+
'toda',
|
|
47
|
+
'todo',
|
|
48
|
+
'acceso',
|
|
49
|
+
'the',
|
|
50
|
+
'whole',
|
|
51
|
+
'entire',
|
|
52
|
+
'of',
|
|
53
|
+
'to',
|
|
54
|
+
'access',
|
|
55
|
+
'toute',
|
|
56
|
+
'tout',
|
|
57
|
+
'acces',
|
|
58
|
+
'sa',
|
|
59
|
+
'son',
|
|
60
|
+
]);
|
|
61
|
+
export const ORGANIZACION = new Set([
|
|
62
|
+
'organizacion',
|
|
63
|
+
'organization',
|
|
64
|
+
'organisation',
|
|
65
|
+
'empresa',
|
|
66
|
+
'company',
|
|
67
|
+
'entreprise',
|
|
68
|
+
'org',
|
|
69
|
+
'global',
|
|
70
|
+
]);
|
|
71
|
+
/** ¿Dice «el de toda la organización» y nada más? «Nave Global» o «Todas las naves» no. */
|
|
72
|
+
export function diceOrganizacion(texto) {
|
|
73
|
+
const palabras = normalizeName(texto)
|
|
74
|
+
.split(/[^\p{L}\p{N}]+/u)
|
|
75
|
+
.filter((w) => w && !RELLENO_ORGANIZACION.has(w));
|
|
76
|
+
return palabras.length === 1 && ORGANIZACION.has(palabras[0]);
|
|
77
|
+
}
|
|
78
|
+
/**
|
|
79
|
+
* Cuál de sus accesos: con uno solo y sin decirlo, ese. Si lo dice, se busca
|
|
80
|
+
* siempre (aunque tenga uno): «quítale el de Norte» a quien solo tiene el de
|
|
81
|
+
* organización no puede quitarle el de organización en silencio.
|
|
82
|
+
*/
|
|
83
|
+
export function elegirAcceso(nombre, accesos, dicho, para) {
|
|
84
|
+
const opciones = accesos
|
|
85
|
+
.map((a, i) => `${i + 1}. ${etiquetaRol(a.rol, 'es')} ${ambito('es', a.ubicacion)}`)
|
|
86
|
+
.join(', ');
|
|
87
|
+
const preguntar = `Pregunta al usuario cuál quiere ${para} y pásalo en \`acceso\` (su número): ${opciones}.`;
|
|
88
|
+
const texto = dicho?.trim();
|
|
89
|
+
if (!texto)
|
|
90
|
+
return accesos.length === 1
|
|
91
|
+
? { item: accesos[0] }
|
|
92
|
+
: { error: `${nombre} tiene varios accesos en la organización. ${preguntar}` };
|
|
93
|
+
if (/^\d+$/.test(texto)) {
|
|
94
|
+
const a = accesos[Number(texto) - 1];
|
|
95
|
+
return a ? { item: a } : { error: `No hay un acceso número ${texto}. ${preguntar}` };
|
|
96
|
+
}
|
|
97
|
+
const deUbicacion = accesos.filter((a) => a.ubicacion);
|
|
98
|
+
const r = resolveByName(texto, deUbicacion, (a) => a.ubicacion);
|
|
99
|
+
if (r.kind === 'found')
|
|
100
|
+
return { item: r.item };
|
|
101
|
+
// Después de las ubicaciones: una que se llame «Global» gana. El número siempre funciona.
|
|
102
|
+
const deOrganizacion = accesos.find((a) => !a.ubicacion);
|
|
103
|
+
if (deOrganizacion && diceOrganizacion(texto))
|
|
104
|
+
return { item: deOrganizacion };
|
|
105
|
+
return { error: `No encuentro el acceso «${texto}» de ${nombre}. ${preguntar}` };
|
|
106
|
+
}
|
|
107
|
+
/** Lo que resuelven las dos acciones en `preparar`: persona, su acceso y la lista para las protecciones. */
|
|
108
|
+
export async function resolverAcceso(gateway, ctx, p, para) {
|
|
109
|
+
const [usuarios, ubicaciones] = await Promise.all([
|
|
110
|
+
gateway.listOrgUsers(ctx.org.orgId, ctx.token),
|
|
111
|
+
gateway.listLocations(ctx.org.orgId, ctx.token),
|
|
112
|
+
]);
|
|
113
|
+
const persona = elegirPersona(usuarios, p.usuario);
|
|
114
|
+
if ('error' in persona)
|
|
115
|
+
return persona;
|
|
116
|
+
const nombres = new Map(ubicaciones.map((l) => [l.id, l.name]));
|
|
117
|
+
const accesos = persona.item.roles.map((r) => ({
|
|
118
|
+
id: r.id,
|
|
119
|
+
rol: r.rol,
|
|
120
|
+
ubicacion: r.ambito === 'LOCATION' ? (nombres.get(r.scopeId) ?? 'ubicación ya borrada') : undefined,
|
|
121
|
+
}));
|
|
122
|
+
if (accesos.length === 0)
|
|
123
|
+
return { error: `${persona.item.nombre} no tiene ningún acceso en la organización.` };
|
|
124
|
+
const acceso = elegirAcceso(persona.item.nombre, accesos, p.acceso, para);
|
|
125
|
+
if ('error' in acceso)
|
|
126
|
+
return acceso;
|
|
127
|
+
return { persona: persona.item, acceso: acceso.item, accesos, usuarios };
|
|
128
|
+
}
|
|
129
|
+
/** ¿Quitar este rol (o bajarlo de ADMIN) deja la organización sin ningún Admin de organización? */
|
|
130
|
+
export function dejaSinAdmin(usuarios, orgId, rolId) {
|
|
131
|
+
const roles = usuarios.flatMap((u) => u.roles);
|
|
132
|
+
const rol = roles.find((r) => r.id === rolId);
|
|
133
|
+
if (!rol || !esAdminDeOrganizacion(rol, orgId))
|
|
134
|
+
return false;
|
|
135
|
+
return !roles.some((r) => r.id !== rolId && esAdminDeOrganizacion(r, orgId));
|
|
136
|
+
}
|
|
137
|
+
/** Error al modelo de las dos protecciones en `preparar` (null = se puede). */
|
|
138
|
+
export function proteccionAlPreparar(ctx, usuarios, persona, acceso, quitaAdmin) {
|
|
139
|
+
if (persona.id === ctx.user.id) {
|
|
140
|
+
return (`No lo propongas: ${persona.nombre} es el propio usuario. Explícale: «No puedo cambiar tu propio rol ni quitarte tu propio ` +
|
|
141
|
+
`acceso; puede hacerlo otro Admin de ${ctx.org.name} desde el panel».`);
|
|
142
|
+
}
|
|
143
|
+
if (quitaAdmin && dejaSinAdmin(usuarios, ctx.org.orgId, acceso.id)) {
|
|
144
|
+
return (`${persona.nombre} es el único Admin de toda la organización «${ctx.org.name}»: sin él la organización se queda sin nadie que ` +
|
|
145
|
+
'pueda gestionarla. No lo propongas: primero hay que hacer Admin de la organización a otra persona ' +
|
|
146
|
+
'(proponer_cambiar_rol_usuario o proponer_invitar_usuario).');
|
|
147
|
+
}
|
|
148
|
+
return null;
|
|
149
|
+
}
|
|
150
|
+
/**
|
|
151
|
+
* Las mismas protecciones al confirmar, con la lista del momento. Si alguna ya no
|
|
152
|
+
* se cumple, lanza `AccionRechazada` con el texto al cliente (no se hace nada y
|
|
153
|
+
* queda `failed`); si no, devuelve el `rol_id` ya comprobado. Un rol que ya no está en la lista también se para aquí: el
|
|
154
|
+
* backend no da 404 sino 403 («Organization could not be resolved», porque saca
|
|
155
|
+
* la organización del propio rol) y se traduciría como «no tienes permiso».
|
|
156
|
+
*/
|
|
157
|
+
export async function proteccionAlEjecutar(gateway, ctx, p, quitaAdmin) {
|
|
158
|
+
// Sin ellos no se puede comprobar «uno mismo»: solo pasa si no vino de `preparar`, y entonces no se hace.
|
|
159
|
+
if (!p.usuario_id || !p.rol_id)
|
|
160
|
+
throw new Error('acción de roles sin usuario_id o rol_id (no pasó por preparar)');
|
|
161
|
+
const org = ctx.org.name;
|
|
162
|
+
if (p.usuario_id === ctx.user.id) {
|
|
163
|
+
throw sinCambios(ctx.language, {
|
|
164
|
+
es: `desde aquí no puedes cambiar tu propio rol ni quitarte tu propio acceso. Puede hacerlo otro Admin de ${org}.`,
|
|
165
|
+
en: `you can't change your own role or remove your own access from here. Another Admin of ${org} can do it.`,
|
|
166
|
+
fr: `vous ne pouvez pas modifier votre propre rôle ni retirer votre propre accès d'ici. Un autre Admin de ${org} peut le faire.`,
|
|
167
|
+
});
|
|
168
|
+
}
|
|
169
|
+
const usuarios = await gateway.listOrgUsers(ctx.org.orgId, ctx.token);
|
|
170
|
+
if (!usuarios.some((u) => u.roles.some((r) => r.id === p.rol_id))) {
|
|
171
|
+
throw sinCambios(ctx.language, {
|
|
172
|
+
es: `${p.usuario} ya no tiene ese acceso en ${org} (quizá se cambió desde el panel). Pídemelo de nuevo si hace falta.`,
|
|
173
|
+
en: `${p.usuario} no longer has that access in ${org} (it may have been changed in the dashboard). Ask me again if needed.`,
|
|
174
|
+
fr: `${p.usuario} n'a plus cet accès dans ${org} (il a peut-être été modifié depuis le tableau de bord). Redemandez-le-moi si besoin.`,
|
|
175
|
+
});
|
|
176
|
+
}
|
|
177
|
+
if (quitaAdmin && dejaSinAdmin(usuarios, ctx.org.orgId, p.rol_id)) {
|
|
178
|
+
throw sinCambios(ctx.language, {
|
|
179
|
+
es: `${p.usuario} es ahora el único Admin de toda la organización ${org}, y la organización no puede quedarse sin ninguno. Primero haz Admin de la organización a otra persona.`,
|
|
180
|
+
en: `${p.usuario} is now the only Admin of the whole organization ${org}, and the organization can't be left without one. First make someone else an Admin of the organization.`,
|
|
181
|
+
fr: `${p.usuario} est désormais le seul Admin de toute l'organisation ${org}, et l'organisation ne peut pas rester sans Admin. Nommez d'abord une autre personne Admin de l'organisation.`,
|
|
182
|
+
});
|
|
183
|
+
}
|
|
184
|
+
return p.rol_id;
|
|
185
|
+
}
|
|
186
|
+
/** «al acceso de toda la organización» / «a la ubicación «X»», para el resumen del cambio de rol. */
|
|
187
|
+
export function accesoA(idioma, ubicacion) {
|
|
188
|
+
return segunIdioma(idioma, {
|
|
189
|
+
es: ubicacion ? `acceso a la ubicación «${ubicacion}»` : 'acceso a toda la organización',
|
|
190
|
+
en: ubicacion ? `access to the location «${ubicacion}»` : 'access to the whole organization',
|
|
191
|
+
fr: ubicacion ? `accès au site «${ubicacion}»` : "accès à toute l'organisation",
|
|
192
|
+
});
|
|
193
|
+
}
|
|
194
|
+
//# sourceMappingURL=user-access.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"user-access.js","sourceRoot":"","sources":["../../../src/actions/support/user-access.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,130 @@
|
|
|
1
|
+
import type { z } from 'zod';
|
|
2
|
+
import type { OrganizationRef, SessionContext } from '../context.js';
|
|
3
|
+
import type { FixedTextLanguage } from '../domain/language.js';
|
|
4
|
+
import type { CambioDeCheckpoint } from '../domain/route-checkpoints.js';
|
|
5
|
+
import type { CapabilityDeps, CapabilityEnv } from '../deps.js';
|
|
6
|
+
import type { BotActionFlags, BotActionName } from './names.js';
|
|
7
|
+
/** Roles de la sesión y de los usuarios del panel, de menos a más. */
|
|
8
|
+
export declare const ROLES: readonly ["VIEWER", "EDITOR", "ADMIN"];
|
|
9
|
+
export type RoleType = (typeof ROLES)[number];
|
|
10
|
+
/** Un cambio de checkpoints en una ruta que hace una propuesta (para las siguientes del mismo lote). */
|
|
11
|
+
export interface CambioEnRuta extends CambioDeCheckpoint {
|
|
12
|
+
rutaId: string;
|
|
13
|
+
}
|
|
14
|
+
/**
|
|
15
|
+
* Lo que comparten las propuestas de UN turno (una sola confirmación), que se
|
|
16
|
+
* preparan una tras otra en el orden de la lista.
|
|
17
|
+
*/
|
|
18
|
+
export interface TurnoDePropuestas {
|
|
19
|
+
/** Una lectura del backend hecha una sola vez por turno: la misma clave da el mismo resultado. */
|
|
20
|
+
leer<T>(clave: string, lectura: () => Promise<T>): Promise<T>;
|
|
21
|
+
/** Los cambios que las propuestas ya aceptadas del turno hacen en esa ruta, en orden. */
|
|
22
|
+
cambiosEnRuta(rutaId: string): readonly CambioDeCheckpoint[];
|
|
23
|
+
}
|
|
24
|
+
/**
|
|
25
|
+
* Lo que tiene una acción al prepararse (antes de pedir la confirmación): el
|
|
26
|
+
* contexto de la sesión (las horas que dice son de `tz`, los textos van en
|
|
27
|
+
* `language`) más quién propone y en qué turno. El envoltorio de `actionCatalog`
|
|
28
|
+
* comprueba que `org` sea una de `organizations` y usa SU entrada.
|
|
29
|
+
*/
|
|
30
|
+
export interface ActionPrepareContext extends SessionContext {
|
|
31
|
+
/** Quien propone (el usuario de la sesión). Lo usan las acciones que no pueden tocarle a él (su rol). */
|
|
32
|
+
user: {
|
|
33
|
+
id: string;
|
|
34
|
+
name: string;
|
|
35
|
+
};
|
|
36
|
+
/** El turno en el que se propone; ausente si la propuesta va sola (sin lote ni lecturas compartidas). */
|
|
37
|
+
turno?: TurnoDePropuestas;
|
|
38
|
+
}
|
|
39
|
+
/** Lo que tiene una acción al ejecutarse, tras la confirmación, con la sesión del momento. */
|
|
40
|
+
export interface ActionContext extends ActionPrepareContext {
|
|
41
|
+
/** La que devolvió `preparar` (p. ej. el `identifier` del vigilante), o null. */
|
|
42
|
+
idempotencyKey: string | null;
|
|
43
|
+
}
|
|
44
|
+
/** Imagen que acompaña al resultado (el QR de un checkpoint o del enlace de un vigilante). */
|
|
45
|
+
export interface ActionImage {
|
|
46
|
+
png: Uint8Array;
|
|
47
|
+
caption?: string;
|
|
48
|
+
}
|
|
49
|
+
/** Lo que recibe el cliente cuando la acción se hace. */
|
|
50
|
+
export interface ActionResult {
|
|
51
|
+
texto: string;
|
|
52
|
+
imagen?: ActionImage;
|
|
53
|
+
}
|
|
54
|
+
export type BotActionParams<S extends z.ZodRawShape> = z.infer<z.ZodObject<S>>;
|
|
55
|
+
/**
|
|
56
|
+
* Una acción de escritura que se puede proponer y, tras la confirmación del
|
|
57
|
+
* cliente, ejecutar. El modelo solo ve la tool `proponer_*`; `ejecutar` la llama
|
|
58
|
+
* el motor del consumidor de forma determinista, nunca el modelo.
|
|
59
|
+
*
|
|
60
|
+
* `resumen`, `preparar` y `ejecutar` van con sintaxis de método a propósito:
|
|
61
|
+
* así una definición con sus parámetros concretos cabe en el catálogo genérico
|
|
62
|
+
* (mismo borrado de tipos que `ReadCapability`).
|
|
63
|
+
*/
|
|
64
|
+
export interface ActionDefinition<S extends z.ZodRawShape = z.ZodRawShape> {
|
|
65
|
+
nombre: BotActionName;
|
|
66
|
+
/** Nombre de la tool que ve el modelo. */
|
|
67
|
+
tool: `proponer_${string}`;
|
|
68
|
+
/** Descripción de la tool para el modelo. */
|
|
69
|
+
descripcion: string;
|
|
70
|
+
/** Parámetros de la tool (sin `organizacion`: la añade el motor si el usuario tiene varias). */
|
|
71
|
+
params: S;
|
|
72
|
+
/** Rol mínimo del usuario en la organización. */
|
|
73
|
+
rolMinimo: RoleType;
|
|
74
|
+
/** true = el rol tiene que ser de ORGANIZACIÓN; uno solo de ubicación no basta (crear vigilante). */
|
|
75
|
+
rolDeOrganizacion?: boolean;
|
|
76
|
+
/**
|
|
77
|
+
* Opcional, antes de proponer: resuelve nombres a ids, comprueba límites del
|
|
78
|
+
* plan, genera la clave idempotente… Devuelve los parámetros que se guardan
|
|
79
|
+
* (y que verá `ejecutar`) o el error que se le devuelve al modelo, y los
|
|
80
|
+
* cambios que hace en los checkpoints de rutas (los ven las siguientes del lote).
|
|
81
|
+
*/
|
|
82
|
+
preparar?(ctx: ActionPrepareContext, params: BotActionParams<S>): Promise<{
|
|
83
|
+
params: BotActionParams<S>;
|
|
84
|
+
idempotencyKey?: string;
|
|
85
|
+
cambiosEnRutas?: CambioEnRuta[];
|
|
86
|
+
} | {
|
|
87
|
+
error: string;
|
|
88
|
+
}>;
|
|
89
|
+
/**
|
|
90
|
+
* Opcional: la identidad de la acción para detectar la misma propuesta dos
|
|
91
|
+
* veces en un lote. Hace falta cuando `preparar` deriva campos que dependen de
|
|
92
|
+
* las anteriores del lote (`desactiva`, `rutas`, `orden`): sin ella se comparan
|
|
93
|
+
* todos los parámetros y dos iguales parecerían distintas.
|
|
94
|
+
*/
|
|
95
|
+
huella?(params: BotActionParams<S>): unknown;
|
|
96
|
+
/**
|
|
97
|
+
* Qué se va a hacer, en una o dos líneas, para la confirmación y para el aviso
|
|
98
|
+
* al equipo. Determinista (sin modelo) y repitiendo organización y ubicación.
|
|
99
|
+
*/
|
|
100
|
+
resumen(params: BotActionParams<S>, ctx: {
|
|
101
|
+
idioma: FixedTextLanguage;
|
|
102
|
+
organizacion: string;
|
|
103
|
+
}): string;
|
|
104
|
+
/**
|
|
105
|
+
* Hace el cambio en el backend. Lanza `PatrolTechApiError` si el backend lo rechaza, o
|
|
106
|
+
* `AccionRechazada` si es la acción quien no lo hace (una protección que al confirmar ya no se cumple).
|
|
107
|
+
*/
|
|
108
|
+
ejecutar(ctx: ActionContext, params: BotActionParams<S>): Promise<ActionResult>;
|
|
109
|
+
}
|
|
110
|
+
/** Declara una acción conservando la inferencia de `params` en sus métodos. */
|
|
111
|
+
export declare function defineBotAction<S extends z.ZodRawShape>(d: ActionDefinition<S>): ActionDefinition;
|
|
112
|
+
/** Lo que el motor necesita de las acciones: el catálogo y a quién están abiertas. */
|
|
113
|
+
export interface BotActionsConfig {
|
|
114
|
+
catalog: readonly ActionDefinition[];
|
|
115
|
+
flags: BotActionFlags;
|
|
116
|
+
/** Minutos que vive una propuesta sin confirmar. */
|
|
117
|
+
ttlMin: number;
|
|
118
|
+
}
|
|
119
|
+
/** Dependencias de `actionCatalog`: las comunes (`gateway`, `logger`, `urls`). */
|
|
120
|
+
export type ActionDeps = CapabilityDeps;
|
|
121
|
+
/** Las dependencias ya con sus valores por defecto, tal como las reciben las áreas. */
|
|
122
|
+
export type ActionEnv = CapabilityEnv;
|
|
123
|
+
/**
|
|
124
|
+
* ¿Puede ese rol de la sesión hacer esta acción? El backend sigue siendo quien
|
|
125
|
+
* decide (403); esto solo evita proponer lo que seguro va a rechazar. Un rol
|
|
126
|
+
* desconocido o ausente cuenta como VIEWER. Sin `scope` se asume de organización (sesiones
|
|
127
|
+
* anteriores al campo).
|
|
128
|
+
*/
|
|
129
|
+
export declare function roleAllows(definition: ActionDefinition, org: Pick<OrganizationRef, 'roleType' | 'scope'>): boolean;
|
|
130
|
+
//# sourceMappingURL=types.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"types.d.ts","sourceRoot":"","sources":["../../src/actions/types.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,20 @@
|
|
|
1
|
+
/** Roles de la sesión y de los usuarios del panel, de menos a más. */
|
|
2
|
+
export const ROLES = ['VIEWER', 'EDITOR', 'ADMIN'];
|
|
3
|
+
const ROLE_RANK = { VIEWER: 0, EDITOR: 1, ADMIN: 2 };
|
|
4
|
+
/** Declara una acción conservando la inferencia de `params` en sus métodos. */
|
|
5
|
+
export function defineBotAction(d) {
|
|
6
|
+
return d;
|
|
7
|
+
}
|
|
8
|
+
/**
|
|
9
|
+
* ¿Puede ese rol de la sesión hacer esta acción? El backend sigue siendo quien
|
|
10
|
+
* decide (403); esto solo evita proponer lo que seguro va a rechazar. Un rol
|
|
11
|
+
* desconocido o ausente cuenta como VIEWER. Sin `scope` se asume de organización (sesiones
|
|
12
|
+
* anteriores al campo).
|
|
13
|
+
*/
|
|
14
|
+
export function roleAllows(definition, org) {
|
|
15
|
+
const rank = ROLE_RANK[(org.roleType ?? '').toUpperCase()] ?? ROLE_RANK.VIEWER;
|
|
16
|
+
if (rank < ROLE_RANK[definition.rolMinimo])
|
|
17
|
+
return false;
|
|
18
|
+
return !definition.rolDeOrganizacion || org.scope !== 'location';
|
|
19
|
+
}
|
|
20
|
+
//# sourceMappingURL=types.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"types.js","sourceRoot":"","sources":["../../src/actions/types.ts"],"names":[],"mappings":"AAOA,sEAAsE;AACtE,MAAM,CAAC,MAAM,KAAK,GAAG,CAAC,QAAQ,EAAE,QAAQ,EAAE,OAAO,CAAU,CAAC;AAG5D,MAAM,SAAS,GAA6B,EAAE,MAAM,EAAE,CAAC,EAAE,MAAM,EAAE,CAAC,EAAE,KAAK,EAAE,CAAC,EAAE,CAAC;AA2G/E,+EAA+E;AAC/E,MAAM,UAAU,eAAe,CAA0B,CAAsB;IAC7E,OAAO,CAAC,CAAC;AACX,CAAC;AAgBD;;;;;GAKG;AACH,MAAM,UAAU,UAAU,CACxB,UAA4B,EAC5B,GAAgD;IAEhD,MAAM,IAAI,GAAG,SAAS,CAAC,CAAC,GAAG,CAAC,QAAQ,IAAI,EAAE,CAAC,CAAC,WAAW,EAAc,CAAC,IAAI,SAAS,CAAC,MAAM,CAAC;IAC3F,IAAI,IAAI,GAAG,SAAS,CAAC,UAAU,CAAC,SAAS,CAAC;QAAE,OAAO,KAAK,CAAC;IACzD,OAAO,CAAC,UAAU,CAAC,iBAAiB,IAAI,GAAG,CAAC,KAAK,KAAK,UAAU,CAAC;AACnE,CAAC"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"user-roles.d.ts","sourceRoot":"","sources":["../../src/actions/user-roles.ts"],"names":[],"mappings":"AAWA,OAAO,EAA0B,KAAK,gBAAgB,EAAE,KAAK,SAAS,EAAE,MAAM,YAAY,CAAC;AA+C3F,wBAAgB,cAAc,CAAC,GAAG,EAAE,SAAS,GAAG,gBAAgB,CAmE/D;AAiBD,wBAAgB,gBAAgB,CAAC,EAAE,OAAO,EAAE,EAAE,SAAS,GAAG,gBAAgB,CAqEzE"}
|
|
@@ -0,0 +1,195 @@
|
|
|
1
|
+
import { z } from 'zod';
|
|
2
|
+
import { segunIdioma } from '../domain/language.js';
|
|
3
|
+
import { ambito } from '../reads/support/roles.js';
|
|
4
|
+
import { INTERNO, quien, sinPlazaDeGestor } from './support/shared.js';
|
|
5
|
+
import { accesoA, etiquetaRol, proteccionAlEjecutar, proteccionAlPreparar, resolverAcceso, } from './support/user-access.js';
|
|
6
|
+
import { defineBotAction, ROLES } from './types.js';
|
|
7
|
+
/**
|
|
8
|
+
* Cambiar el rol y quitar el acceso a quien YA está en el panel de la
|
|
9
|
+
* organización (lo de invitar a alguien nuevo es `invite_user`).
|
|
10
|
+
*
|
|
11
|
+
* La persona y el `userRoleId` salen SOLO de `listOrgUsers` de la organización
|
|
12
|
+
* de la sesión, nunca de lo que diga el modelo. El backend no protege a nadie de
|
|
13
|
+
* sí mismo ni impide dejar la organización sin Admin: esas dos protecciones son
|
|
14
|
+
* de la acción, en `preparar` y otra vez en `ejecutar` (con la lista del momento: en
|
|
15
|
+
* un lote, o con la propuesta un rato esperando, la de antes ya no vale).
|
|
16
|
+
*/
|
|
17
|
+
const usuarioParam = z
|
|
18
|
+
.string()
|
|
19
|
+
.trim()
|
|
20
|
+
.min(1)
|
|
21
|
+
.max(255)
|
|
22
|
+
.describe('Nombre o email de la persona, tal como aparece en consultar_usuarios_y_roles');
|
|
23
|
+
const accesoParam = z
|
|
24
|
+
.string()
|
|
25
|
+
.trim()
|
|
26
|
+
.min(1)
|
|
27
|
+
.optional()
|
|
28
|
+
.describe('SOLO si tiene varios accesos (organización y ubicaciones): cuál, por su número en la lista que te dé el bot, el nombre de la ubicación o «organización». OMÍTELO si tiene uno.');
|
|
29
|
+
// ---------------------------------------------------------------------------
|
|
30
|
+
// change_user_role
|
|
31
|
+
// ---------------------------------------------------------------------------
|
|
32
|
+
const changeRoleParams = {
|
|
33
|
+
usuario: usuarioParam,
|
|
34
|
+
rol: z
|
|
35
|
+
.enum(ROLES)
|
|
36
|
+
.describe('Rol nuevo: VIEWER (solo ver; no ocupa plaza de gestor), EDITOR (gestiona checkpoints, rutas y vigilantes) o ADMIN (todo, también usuarios y licencia)'),
|
|
37
|
+
acceso: accesoParam,
|
|
38
|
+
usuario_id: z.string().optional().describe(INTERNO),
|
|
39
|
+
email: z.string().optional().describe(INTERNO),
|
|
40
|
+
rol_id: z.string().optional().describe(INTERNO),
|
|
41
|
+
rol_actual: z.string().optional().describe(INTERNO),
|
|
42
|
+
ubicacion: z.string().optional().describe(INTERNO),
|
|
43
|
+
};
|
|
44
|
+
export function changeUserRole(env) {
|
|
45
|
+
const { gateway } = env;
|
|
46
|
+
return defineBotAction({
|
|
47
|
+
nombre: 'change_user_role',
|
|
48
|
+
tool: 'proponer_cambiar_rol_usuario',
|
|
49
|
+
descripcion: 'Prepara cambiar el rol (VIEWER, EDITOR o ADMIN) de una persona que YA tiene acceso al panel de la organización. NO lo cambia: ' +
|
|
50
|
+
'le envía al cliente un resumen con un botón para confirmarlo. Hace falta su nombre o email y el rol nuevo; si tiene varios ' +
|
|
51
|
+
'accesos (organización y ubicaciones), el bot pregunta cuál. Para alguien que aún no tiene acceso, usa proponer_invitar_usuario. ' +
|
|
52
|
+
'Nadie puede cambiar su propio rol, y la organización no puede quedarse sin ningún Admin de organización.',
|
|
53
|
+
params: changeRoleParams,
|
|
54
|
+
rolMinimo: 'ADMIN',
|
|
55
|
+
// Como invitar: un admin de ubicación no gestiona los usuarios de la organización.
|
|
56
|
+
rolDeOrganizacion: true,
|
|
57
|
+
async preparar(ctx, p) {
|
|
58
|
+
const r = await resolverAcceso(gateway, ctx, p, 'cambiar');
|
|
59
|
+
if ('error' in r)
|
|
60
|
+
return r;
|
|
61
|
+
const { persona, acceso, usuarios } = r;
|
|
62
|
+
const proteccion = proteccionAlPreparar(ctx, usuarios, persona, acceso, p.rol !== 'ADMIN');
|
|
63
|
+
if (proteccion)
|
|
64
|
+
return { error: proteccion };
|
|
65
|
+
if (acceso.rol === p.rol) {
|
|
66
|
+
return {
|
|
67
|
+
error: `${persona.nombre} ya es ${etiquetaRol(p.rol, 'es')} ${ambito('es', acceso.ubicacion)}: no hay nada que cambiar.`,
|
|
68
|
+
};
|
|
69
|
+
}
|
|
70
|
+
// Igual que la API: solo cuenta pasar de no ocupar plaza de gestor a ocuparla.
|
|
71
|
+
if (acceso.rol === 'VIEWER' && p.rol !== 'VIEWER') {
|
|
72
|
+
const lleno = await sinPlazaDeGestor(env, ctx, {
|
|
73
|
+
conPlan: 'puede seguir como VIEWER, quitar el rol de gestor a otra persona',
|
|
74
|
+
sinPlan: 'puede seguir como VIEWER o quitar el rol de gestor a otra persona',
|
|
75
|
+
});
|
|
76
|
+
if (lleno)
|
|
77
|
+
return { error: lleno };
|
|
78
|
+
}
|
|
79
|
+
return {
|
|
80
|
+
params: {
|
|
81
|
+
usuario: persona.nombre,
|
|
82
|
+
rol: p.rol,
|
|
83
|
+
usuario_id: persona.id,
|
|
84
|
+
email: persona.email.trim(),
|
|
85
|
+
rol_id: acceso.id,
|
|
86
|
+
rol_actual: acceso.rol,
|
|
87
|
+
ubicacion: acceso.ubicacion,
|
|
88
|
+
},
|
|
89
|
+
};
|
|
90
|
+
},
|
|
91
|
+
resumen(p, { idioma, organizacion }) {
|
|
92
|
+
const cambio = `${etiquetaRol(p.rol_actual, idioma)} → ${etiquetaRol(p.rol, idioma)} (${accesoA(idioma, p.ubicacion)})`;
|
|
93
|
+
return segunIdioma(idioma, {
|
|
94
|
+
es: `Cambiar el rol de ${quien(p)} en ${organizacion}: ${cambio}.`,
|
|
95
|
+
en: `Change the role of ${quien(p)} in ${organizacion}: ${cambio}.`,
|
|
96
|
+
fr: `Changer le rôle de ${quien(p)} dans ${organizacion} : ${cambio}.`,
|
|
97
|
+
});
|
|
98
|
+
},
|
|
99
|
+
async ejecutar(ctx, p) {
|
|
100
|
+
const rolId = await proteccionAlEjecutar(gateway, ctx, p, p.rol !== 'ADMIN');
|
|
101
|
+
await gateway.updateUserRole({ userRoleId: rolId, roleType: p.rol }, ctx.token);
|
|
102
|
+
const rol = etiquetaRol(p.rol, ctx.language);
|
|
103
|
+
const donde = ambito(ctx.language, p.ubicacion);
|
|
104
|
+
return {
|
|
105
|
+
texto: segunIdioma(ctx.language, {
|
|
106
|
+
es: `✅ ${quien(p)} ahora es ${rol} ${donde} en ${ctx.org.name}. Si tenía el panel abierto, puede que tenga que volver a entrar para verlo.`,
|
|
107
|
+
en: `✅ ${quien(p)} is now ${rol} ${donde} in ${ctx.org.name}. If they had the dashboard open, they may need to log in again to see it.`,
|
|
108
|
+
fr: `✅ ${quien(p)} est maintenant ${rol} ${donde} dans ${ctx.org.name}. Si cette personne avait le tableau de bord ouvert, elle devra peut-être se reconnecter pour le voir.`,
|
|
109
|
+
}),
|
|
110
|
+
};
|
|
111
|
+
},
|
|
112
|
+
});
|
|
113
|
+
}
|
|
114
|
+
// ---------------------------------------------------------------------------
|
|
115
|
+
// remove_user_access
|
|
116
|
+
// ---------------------------------------------------------------------------
|
|
117
|
+
const removeAccessParams = {
|
|
118
|
+
usuario: usuarioParam,
|
|
119
|
+
acceso: accesoParam,
|
|
120
|
+
usuario_id: z.string().optional().describe(INTERNO),
|
|
121
|
+
email: z.string().optional().describe(INTERNO),
|
|
122
|
+
rol_id: z.string().optional().describe(INTERNO),
|
|
123
|
+
rol_actual: z.string().optional().describe(INTERNO),
|
|
124
|
+
ubicacion: z.string().optional().describe(INTERNO),
|
|
125
|
+
unico: z.boolean().optional().describe(INTERNO),
|
|
126
|
+
};
|
|
127
|
+
export function removeUserAccess({ gateway }) {
|
|
128
|
+
return defineBotAction({
|
|
129
|
+
nombre: 'remove_user_access',
|
|
130
|
+
tool: 'proponer_quitar_acceso_usuario',
|
|
131
|
+
descripcion: 'Prepara quitarle a una persona un acceso al panel de la organización (su rol de organización o el de una ubicación). NO lo ' +
|
|
132
|
+
'quita: le envía al cliente un resumen con un botón para confirmarlo. Su cuenta de PatrolTech no se borra y se puede deshacer ' +
|
|
133
|
+
'volviendo a invitarla (proponer_invitar_usuario). Si tiene varios accesos, el bot pregunta cuál; para quitárselos todos, propón ' +
|
|
134
|
+
'uno por acceso en el mismo turno. Nadie puede quitarse su propio acceso, y la organización no puede quedarse sin ningún Admin ' +
|
|
135
|
+
'de organización. Para que vea menos sin echarla, propón mejor proponer_cambiar_rol_usuario a VIEWER.',
|
|
136
|
+
params: removeAccessParams,
|
|
137
|
+
rolMinimo: 'ADMIN',
|
|
138
|
+
rolDeOrganizacion: true,
|
|
139
|
+
async preparar(ctx, p) {
|
|
140
|
+
const r = await resolverAcceso(gateway, ctx, p, 'quitar');
|
|
141
|
+
if ('error' in r)
|
|
142
|
+
return r;
|
|
143
|
+
const { persona, acceso, accesos, usuarios } = r;
|
|
144
|
+
const proteccion = proteccionAlPreparar(ctx, usuarios, persona, acceso, true);
|
|
145
|
+
if (proteccion)
|
|
146
|
+
return { error: proteccion };
|
|
147
|
+
return {
|
|
148
|
+
params: {
|
|
149
|
+
usuario: persona.nombre,
|
|
150
|
+
usuario_id: persona.id,
|
|
151
|
+
email: persona.email.trim(),
|
|
152
|
+
rol_id: acceso.id,
|
|
153
|
+
rol_actual: acceso.rol,
|
|
154
|
+
ubicacion: acceso.ubicacion,
|
|
155
|
+
unico: accesos.length === 1,
|
|
156
|
+
},
|
|
157
|
+
};
|
|
158
|
+
},
|
|
159
|
+
resumen(p, { idioma, organizacion }) {
|
|
160
|
+
const rol = etiquetaRol(p.rol_actual, idioma);
|
|
161
|
+
const donde = ambito(idioma, p.ubicacion);
|
|
162
|
+
return segunIdioma(idioma, {
|
|
163
|
+
es: `Quitar a ${quien(p)} el acceso como ${rol} ${donde} en ${organizacion}. ` +
|
|
164
|
+
(p.unico
|
|
165
|
+
? `Era su único acceso: dejará de poder entrar en el panel de ${organizacion} (su cuenta de PatrolTech no se borra). `
|
|
166
|
+
: `Conserva sus otros accesos en ${organizacion}, salvo que también se los quites en esta misma confirmación. `) +
|
|
167
|
+
'Se puede deshacer: basta con volver a invitarla.',
|
|
168
|
+
en: `Remove ${quien(p)}'s access as ${rol} ${donde} in ${organizacion}. ` +
|
|
169
|
+
(p.unico
|
|
170
|
+
? `It's their only access: they won't be able to log in to the ${organizacion} dashboard (their PatrolTech account isn't deleted). `
|
|
171
|
+
: `They keep their other access in ${organizacion}, unless you also remove it in this same confirmation. `) +
|
|
172
|
+
'This can be undone: just invite them again.',
|
|
173
|
+
fr: `Retirer à ${quien(p)} l'accès en tant que ${rol} ${donde} dans ${organizacion}. ` +
|
|
174
|
+
(p.unico
|
|
175
|
+
? `C'était son seul accès : cette personne ne pourra plus se connecter au tableau de bord de ${organizacion} (son compte PatrolTech n'est pas supprimé). `
|
|
176
|
+
: `Cette personne conserve ses autres accès dans ${organizacion}, sauf si vous les lui retirez aussi dans cette même confirmation. `) +
|
|
177
|
+
"C'est réversible : il suffit de l'inviter à nouveau.",
|
|
178
|
+
});
|
|
179
|
+
},
|
|
180
|
+
async ejecutar(ctx, p) {
|
|
181
|
+
const rolId = await proteccionAlEjecutar(gateway, ctx, p, true);
|
|
182
|
+
await gateway.deleteUserRole(rolId, ctx.token);
|
|
183
|
+
const rol = etiquetaRol(p.rol_actual, ctx.language);
|
|
184
|
+
const donde = ambito(ctx.language, p.ubicacion);
|
|
185
|
+
return {
|
|
186
|
+
texto: segunIdioma(ctx.language, {
|
|
187
|
+
es: `✅ ${quien(p)} ya no tiene acceso como ${rol} ${donde} en ${ctx.org.name}. Si hace falta, se le puede volver a invitar.`,
|
|
188
|
+
en: `✅ ${quien(p)} no longer has access as ${rol} ${donde} in ${ctx.org.name}. If needed, they can be invited again.`,
|
|
189
|
+
fr: `✅ ${quien(p)} n'a plus accès en tant que ${rol} ${donde} dans ${ctx.org.name}. Si besoin, cette personne peut être invitée à nouveau.`,
|
|
190
|
+
}),
|
|
191
|
+
};
|
|
192
|
+
},
|
|
193
|
+
});
|
|
194
|
+
}
|
|
195
|
+
//# sourceMappingURL=user-roles.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"user-roles.js","sourceRoot":"","sources":["../../src/actions/user-roles.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"users.d.ts","sourceRoot":"","sources":["../../src/actions/users.ts"],"names":[],"mappings":"AAMA,OAAO,EAGL,KAAK,gBAAgB,EACrB,KAAK,SAAS,EAEf,MAAM,YAAY,CAAC;AAgCpB,wBAAgB,UAAU,CAAC,GAAG,EAAE,SAAS,GAAG,gBAAgB,CAiI3D"}
|