@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.
Files changed (443) hide show
  1. package/LICENSE +21 -0
  2. package/README.md +171 -2
  3. package/dist/actions/alerts.d.ts +3 -0
  4. package/dist/actions/alerts.d.ts.map +1 -0
  5. package/dist/actions/alerts.js +90 -0
  6. package/dist/actions/alerts.js.map +1 -0
  7. package/dist/actions/batch-policy.d.ts +67 -0
  8. package/dist/actions/batch-policy.d.ts.map +1 -0
  9. package/dist/actions/batch-policy.js +73 -0
  10. package/dist/actions/batch-policy.js.map +1 -0
  11. package/dist/actions/checkpoint-archive.d.ts +3 -0
  12. package/dist/actions/checkpoint-archive.d.ts.map +1 -0
  13. package/dist/actions/checkpoint-archive.js +173 -0
  14. package/dist/actions/checkpoint-archive.js.map +1 -0
  15. package/dist/actions/checkpoint-geo.d.ts +4 -0
  16. package/dist/actions/checkpoint-geo.d.ts.map +1 -0
  17. package/dist/actions/checkpoint-geo.js +286 -0
  18. package/dist/actions/checkpoint-geo.js.map +1 -0
  19. package/dist/actions/checkpoints.d.ts +10 -0
  20. package/dist/actions/checkpoints.d.ts.map +1 -0
  21. package/dist/actions/checkpoints.js +222 -0
  22. package/dist/actions/checkpoints.js.map +1 -0
  23. package/dist/actions/guard.d.ts +13 -0
  24. package/dist/actions/guard.d.ts.map +1 -0
  25. package/dist/actions/guard.js +30 -0
  26. package/dist/actions/guard.js.map +1 -0
  27. package/dist/actions/incidents.d.ts +3 -0
  28. package/dist/actions/incidents.d.ts.map +1 -0
  29. package/dist/actions/incidents.js +260 -0
  30. package/dist/actions/incidents.js.map +1 -0
  31. package/dist/actions/index.d.ts +20 -0
  32. package/dist/actions/index.d.ts.map +1 -0
  33. package/dist/actions/index.js +60 -0
  34. package/dist/actions/index.js.map +1 -0
  35. package/dist/actions/locations.d.ts +4 -0
  36. package/dist/actions/locations.d.ts.map +1 -0
  37. package/dist/actions/locations.js +202 -0
  38. package/dist/actions/locations.js.map +1 -0
  39. package/dist/actions/names.d.ts +27 -0
  40. package/dist/actions/names.d.ts.map +1 -0
  41. package/dist/actions/names.js +48 -0
  42. package/dist/actions/names.js.map +1 -0
  43. package/dist/actions/patrollers.d.ts +6 -0
  44. package/dist/actions/patrollers.d.ts.map +1 -0
  45. package/dist/actions/patrollers.js +172 -0
  46. package/dist/actions/patrollers.js.map +1 -0
  47. package/dist/actions/route-schedules.d.ts +4 -0
  48. package/dist/actions/route-schedules.d.ts.map +1 -0
  49. package/dist/actions/route-schedules.js +110 -0
  50. package/dist/actions/route-schedules.js.map +1 -0
  51. package/dist/actions/routes.d.ts +5 -0
  52. package/dist/actions/routes.d.ts.map +1 -0
  53. package/dist/actions/routes.js +348 -0
  54. package/dist/actions/routes.js.map +1 -0
  55. package/dist/actions/support/antifraud-rules.d.ts +53 -0
  56. package/dist/actions/support/antifraud-rules.d.ts.map +1 -0
  57. package/dist/actions/support/antifraud-rules.js +121 -0
  58. package/dist/actions/support/antifraud-rules.js.map +1 -0
  59. package/dist/actions/support/elegir-ubicacion.d.ts +31 -0
  60. package/dist/actions/support/elegir-ubicacion.d.ts.map +1 -0
  61. package/dist/actions/support/elegir-ubicacion.js +42 -0
  62. package/dist/actions/support/elegir-ubicacion.js.map +1 -0
  63. package/dist/actions/support/next-step.d.ts +26 -0
  64. package/dist/actions/support/next-step.d.ts.map +1 -0
  65. package/dist/actions/support/next-step.js +55 -0
  66. package/dist/actions/support/next-step.js.map +1 -0
  67. package/dist/actions/support/route-impact.d.ts +25 -0
  68. package/dist/actions/support/route-impact.d.ts.map +1 -0
  69. package/dist/actions/support/route-impact.js +76 -0
  70. package/dist/actions/support/route-impact.js.map +1 -0
  71. package/dist/actions/support/route-lookup.d.ts +27 -0
  72. package/dist/actions/support/route-lookup.d.ts.map +1 -0
  73. package/dist/actions/support/route-lookup.js +44 -0
  74. package/dist/actions/support/route-lookup.js.map +1 -0
  75. package/dist/actions/support/schedule.d.ts +38 -0
  76. package/dist/actions/support/schedule.d.ts.map +1 -0
  77. package/dist/actions/support/schedule.js +62 -0
  78. package/dist/actions/support/schedule.js.map +1 -0
  79. package/dist/actions/support/shared.d.ts +112 -0
  80. package/dist/actions/support/shared.d.ts.map +1 -0
  81. package/dist/actions/support/shared.js +171 -0
  82. package/dist/actions/support/shared.js.map +1 -0
  83. package/dist/actions/support/texts.d.ts +47 -0
  84. package/dist/actions/support/texts.d.ts.map +1 -0
  85. package/dist/actions/support/texts.js +134 -0
  86. package/dist/actions/support/texts.js.map +1 -0
  87. package/dist/actions/support/turno.d.ts +16 -0
  88. package/dist/actions/support/turno.d.ts.map +1 -0
  89. package/dist/actions/support/turno.js +35 -0
  90. package/dist/actions/support/turno.js.map +1 -0
  91. package/dist/actions/support/user-access.d.ts +72 -0
  92. package/dist/actions/support/user-access.d.ts.map +1 -0
  93. package/dist/actions/support/user-access.js +194 -0
  94. package/dist/actions/support/user-access.js.map +1 -0
  95. package/dist/actions/types.d.ts +130 -0
  96. package/dist/actions/types.d.ts.map +1 -0
  97. package/dist/actions/types.js +20 -0
  98. package/dist/actions/types.js.map +1 -0
  99. package/dist/actions/user-roles.d.ts +4 -0
  100. package/dist/actions/user-roles.d.ts.map +1 -0
  101. package/dist/actions/user-roles.js +195 -0
  102. package/dist/actions/user-roles.js.map +1 -0
  103. package/dist/actions/users.d.ts +3 -0
  104. package/dist/actions/users.d.ts.map +1 -0
  105. package/dist/actions/users.js +146 -0
  106. package/dist/actions/users.js.map +1 -0
  107. package/dist/catalog/buildCatalog.d.ts +19 -0
  108. package/dist/catalog/buildCatalog.d.ts.map +1 -0
  109. package/dist/catalog/buildCatalog.js +38 -0
  110. package/dist/catalog/buildCatalog.js.map +1 -0
  111. package/dist/catalog/english.d.ts +17 -0
  112. package/dist/catalog/english.d.ts.map +1 -0
  113. package/dist/catalog/english.js +392 -0
  114. package/dist/catalog/english.js.map +1 -0
  115. package/dist/catalog/entries.d.ts +6 -0
  116. package/dist/catalog/entries.d.ts.map +1 -0
  117. package/dist/catalog/entries.js +610 -0
  118. package/dist/catalog/entries.js.map +1 -0
  119. package/dist/catalog/types.d.ts +61 -0
  120. package/dist/catalog/types.d.ts.map +1 -0
  121. package/dist/catalog/types.js +2 -0
  122. package/dist/catalog/types.js.map +1 -0
  123. package/dist/context.d.ts +37 -0
  124. package/dist/context.d.ts.map +1 -0
  125. package/dist/context.js +11 -0
  126. package/dist/context.js.map +1 -0
  127. package/dist/deps.d.ts +23 -0
  128. package/dist/deps.d.ts.map +1 -0
  129. package/dist/deps.js +12 -0
  130. package/dist/deps.js.map +1 -0
  131. package/dist/domain/access-logs-csv.d.ts +25 -0
  132. package/dist/domain/access-logs-csv.d.ts.map +1 -0
  133. package/dist/domain/access-logs-csv.js +36 -0
  134. package/dist/domain/access-logs-csv.js.map +1 -0
  135. package/dist/domain/backend-errors.d.ts +54 -0
  136. package/dist/domain/backend-errors.d.ts.map +1 -0
  137. package/dist/domain/backend-errors.js +364 -0
  138. package/dist/domain/backend-errors.js.map +1 -0
  139. package/dist/domain/country.d.ts +9 -0
  140. package/dist/domain/country.d.ts.map +1 -0
  141. package/dist/domain/country.js +13 -0
  142. package/dist/domain/country.js.map +1 -0
  143. package/dist/domain/date-range.d.ts +33 -0
  144. package/dist/domain/date-range.d.ts.map +1 -0
  145. package/dist/domain/date-range.js +110 -0
  146. package/dist/domain/date-range.js.map +1 -0
  147. package/dist/domain/geo.d.ts +14 -0
  148. package/dist/domain/geo.d.ts.map +1 -0
  149. package/dist/domain/geo.js +22 -0
  150. package/dist/domain/geo.js.map +1 -0
  151. package/dist/domain/guard-app-message.d.ts +15 -0
  152. package/dist/domain/guard-app-message.d.ts.map +1 -0
  153. package/dist/domain/guard-app-message.js +39 -0
  154. package/dist/domain/guard-app-message.js.map +1 -0
  155. package/dist/domain/incident-priority.d.ts +25 -0
  156. package/dist/domain/incident-priority.d.ts.map +1 -0
  157. package/dist/domain/incident-priority.js +15 -0
  158. package/dist/domain/incident-priority.js.map +1 -0
  159. package/dist/domain/incident-status.d.ts +29 -0
  160. package/dist/domain/incident-status.d.ts.map +1 -0
  161. package/dist/domain/incident-status.js +44 -0
  162. package/dist/domain/incident-status.js.map +1 -0
  163. package/dist/domain/language.d.ts +39 -0
  164. package/dist/domain/language.d.ts.map +1 -0
  165. package/dist/domain/language.js +112 -0
  166. package/dist/domain/language.js.map +1 -0
  167. package/dist/domain/money.d.ts +3 -0
  168. package/dist/domain/money.d.ts.map +1 -0
  169. package/dist/domain/money.js +12 -0
  170. package/dist/domain/money.js.map +1 -0
  171. package/dist/domain/puesta-en-marcha.d.ts +47 -0
  172. package/dist/domain/puesta-en-marcha.d.ts.map +1 -0
  173. package/dist/domain/puesta-en-marcha.js +22 -0
  174. package/dist/domain/puesta-en-marcha.js.map +1 -0
  175. package/dist/domain/qr-image.d.ts +25 -0
  176. package/dist/domain/qr-image.d.ts.map +1 -0
  177. package/dist/domain/qr-image.js +28 -0
  178. package/dist/domain/qr-image.js.map +1 -0
  179. package/dist/domain/resolve-by-name.d.ts +32 -0
  180. package/dist/domain/resolve-by-name.d.ts.map +1 -0
  181. package/dist/domain/resolve-by-name.js +40 -0
  182. package/dist/domain/resolve-by-name.js.map +1 -0
  183. package/dist/domain/route-checkpoints.d.ts +31 -0
  184. package/dist/domain/route-checkpoints.d.ts.map +1 -0
  185. package/dist/domain/route-checkpoints.js +27 -0
  186. package/dist/domain/route-checkpoints.js.map +1 -0
  187. package/dist/domain/route-schedule.d.ts +88 -0
  188. package/dist/domain/route-schedule.d.ts.map +1 -0
  189. package/dist/domain/route-schedule.js +203 -0
  190. package/dist/domain/route-schedule.js.map +1 -0
  191. package/dist/domain/scan-explanation.d.ts +25 -0
  192. package/dist/domain/scan-explanation.d.ts.map +1 -0
  193. package/dist/domain/scan-explanation.js +99 -0
  194. package/dist/domain/scan-explanation.js.map +1 -0
  195. package/dist/domain/scans-csv.d.ts +37 -0
  196. package/dist/domain/scans-csv.d.ts.map +1 -0
  197. package/dist/domain/scans-csv.js +67 -0
  198. package/dist/domain/scans-csv.js.map +1 -0
  199. package/dist/domain/timezone.d.ts +61 -0
  200. package/dist/domain/timezone.d.ts.map +1 -0
  201. package/dist/domain/timezone.js +113 -0
  202. package/dist/domain/timezone.js.map +1 -0
  203. package/dist/domain/tool-result.d.ts +55 -0
  204. package/dist/domain/tool-result.d.ts.map +1 -0
  205. package/dist/domain/tool-result.js +47 -0
  206. package/dist/domain/tool-result.js.map +1 -0
  207. package/dist/domain/urls.d.ts +33 -0
  208. package/dist/domain/urls.d.ts.map +1 -0
  209. package/dist/domain/urls.js +20 -0
  210. package/dist/domain/urls.js.map +1 -0
  211. package/dist/gateway/PatrolTechGateway.d.ts +195 -0
  212. package/dist/gateway/PatrolTechGateway.d.ts.map +1 -0
  213. package/dist/gateway/PatrolTechGateway.js +2 -0
  214. package/dist/gateway/PatrolTechGateway.js.map +1 -0
  215. package/dist/gateway/index.d.ts +4 -0
  216. package/dist/gateway/index.d.ts.map +1 -0
  217. package/dist/gateway/index.js +4 -0
  218. package/dist/gateway/index.js.map +1 -0
  219. package/dist/gateway/sdk/SdkPatrolTechGateway.d.ts +145 -0
  220. package/dist/gateway/sdk/SdkPatrolTechGateway.d.ts.map +1 -0
  221. package/dist/gateway/sdk/SdkPatrolTechGateway.js +101 -0
  222. package/dist/gateway/sdk/SdkPatrolTechGateway.js.map +1 -0
  223. package/dist/gateway/sdk/access.d.ts +8 -0
  224. package/dist/gateway/sdk/access.d.ts.map +1 -0
  225. package/dist/gateway/sdk/access.js +39 -0
  226. package/dist/gateway/sdk/access.js.map +1 -0
  227. package/dist/gateway/sdk/billing.d.ts +7 -0
  228. package/dist/gateway/sdk/billing.d.ts.map +1 -0
  229. package/dist/gateway/sdk/billing.js +92 -0
  230. package/dist/gateway/sdk/billing.js.map +1 -0
  231. package/dist/gateway/sdk/checkpoint-mappers.d.ts +23 -0
  232. package/dist/gateway/sdk/checkpoint-mappers.d.ts.map +1 -0
  233. package/dist/gateway/sdk/checkpoint-mappers.js +59 -0
  234. package/dist/gateway/sdk/checkpoint-mappers.js.map +1 -0
  235. package/dist/gateway/sdk/checkpoints.d.ts +33 -0
  236. package/dist/gateway/sdk/checkpoints.d.ts.map +1 -0
  237. package/dist/gateway/sdk/checkpoints.js +163 -0
  238. package/dist/gateway/sdk/checkpoints.js.map +1 -0
  239. package/dist/gateway/sdk/errors.d.ts +10 -0
  240. package/dist/gateway/sdk/errors.d.ts.map +1 -0
  241. package/dist/gateway/sdk/errors.js +46 -0
  242. package/dist/gateway/sdk/errors.js.map +1 -0
  243. package/dist/gateway/sdk/incidents.d.ts +18 -0
  244. package/dist/gateway/sdk/incidents.d.ts.map +1 -0
  245. package/dist/gateway/sdk/incidents.js +98 -0
  246. package/dist/gateway/sdk/incidents.js.map +1 -0
  247. package/dist/gateway/sdk/index.d.ts +4 -0
  248. package/dist/gateway/sdk/index.d.ts.map +1 -0
  249. package/dist/gateway/sdk/index.js +4 -0
  250. package/dist/gateway/sdk/index.js.map +1 -0
  251. package/dist/gateway/sdk/list.d.ts +15 -0
  252. package/dist/gateway/sdk/list.d.ts.map +1 -0
  253. package/dist/gateway/sdk/list.js +12 -0
  254. package/dist/gateway/sdk/list.js.map +1 -0
  255. package/dist/gateway/sdk/locations.d.ts +24 -0
  256. package/dist/gateway/sdk/locations.d.ts.map +1 -0
  257. package/dist/gateway/sdk/locations.js +44 -0
  258. package/dist/gateway/sdk/locations.js.map +1 -0
  259. package/dist/gateway/sdk/patrollers.d.ts +26 -0
  260. package/dist/gateway/sdk/patrollers.d.ts.map +1 -0
  261. package/dist/gateway/sdk/patrollers.js +132 -0
  262. package/dist/gateway/sdk/patrollers.js.map +1 -0
  263. package/dist/gateway/sdk/rounds.d.ts +15 -0
  264. package/dist/gateway/sdk/rounds.d.ts.map +1 -0
  265. package/dist/gateway/sdk/rounds.js +142 -0
  266. package/dist/gateway/sdk/rounds.js.map +1 -0
  267. package/dist/gateway/sdk/routes.d.ts +18 -0
  268. package/dist/gateway/sdk/routes.d.ts.map +1 -0
  269. package/dist/gateway/sdk/routes.js +74 -0
  270. package/dist/gateway/sdk/routes.js.map +1 -0
  271. package/dist/gateway/sdk/scans.d.ts +4 -0
  272. package/dist/gateway/sdk/scans.d.ts.map +1 -0
  273. package/dist/gateway/sdk/scans.js +72 -0
  274. package/dist/gateway/sdk/scans.js.map +1 -0
  275. package/dist/gateway/sdk/transport.d.ts +77 -0
  276. package/dist/gateway/sdk/transport.d.ts.map +1 -0
  277. package/dist/gateway/sdk/transport.js +81 -0
  278. package/dist/gateway/sdk/transport.js.map +1 -0
  279. package/dist/gateway/sdk/users.d.ts +15 -0
  280. package/dist/gateway/sdk/users.d.ts.map +1 -0
  281. package/dist/gateway/sdk/users.js +49 -0
  282. package/dist/gateway/sdk/users.js.map +1 -0
  283. package/dist/gateway/types/access.d.ts +32 -0
  284. package/dist/gateway/types/access.d.ts.map +1 -0
  285. package/dist/gateway/types/access.js +2 -0
  286. package/dist/gateway/types/access.js.map +1 -0
  287. package/dist/gateway/types/billing.d.ts +60 -0
  288. package/dist/gateway/types/billing.d.ts.map +1 -0
  289. package/dist/gateway/types/billing.js +2 -0
  290. package/dist/gateway/types/billing.js.map +1 -0
  291. package/dist/gateway/types/checkpoints.d.ts +84 -0
  292. package/dist/gateway/types/checkpoints.d.ts.map +1 -0
  293. package/dist/gateway/types/checkpoints.js +2 -0
  294. package/dist/gateway/types/checkpoints.js.map +1 -0
  295. package/dist/gateway/types/common.d.ts +13 -0
  296. package/dist/gateway/types/common.d.ts.map +1 -0
  297. package/dist/gateway/types/common.js +2 -0
  298. package/dist/gateway/types/common.js.map +1 -0
  299. package/dist/gateway/types/incidents.d.ts +53 -0
  300. package/dist/gateway/types/incidents.d.ts.map +1 -0
  301. package/dist/gateway/types/incidents.js +2 -0
  302. package/dist/gateway/types/incidents.js.map +1 -0
  303. package/dist/gateway/types/index.d.ts +12 -0
  304. package/dist/gateway/types/index.d.ts.map +1 -0
  305. package/dist/gateway/types/index.js +12 -0
  306. package/dist/gateway/types/index.js.map +1 -0
  307. package/dist/gateway/types/locations.d.ts +7 -0
  308. package/dist/gateway/types/locations.d.ts.map +1 -0
  309. package/dist/gateway/types/locations.js +2 -0
  310. package/dist/gateway/types/locations.js.map +1 -0
  311. package/dist/gateway/types/patrollers.d.ts +68 -0
  312. package/dist/gateway/types/patrollers.d.ts.map +1 -0
  313. package/dist/gateway/types/patrollers.js +15 -0
  314. package/dist/gateway/types/patrollers.js.map +1 -0
  315. package/dist/gateway/types/rounds.d.ts +89 -0
  316. package/dist/gateway/types/rounds.d.ts.map +1 -0
  317. package/dist/gateway/types/rounds.js +2 -0
  318. package/dist/gateway/types/rounds.js.map +1 -0
  319. package/dist/gateway/types/routes.d.ts +48 -0
  320. package/dist/gateway/types/routes.d.ts.map +1 -0
  321. package/dist/gateway/types/routes.js +2 -0
  322. package/dist/gateway/types/routes.js.map +1 -0
  323. package/dist/gateway/types/scans.d.ts +44 -0
  324. package/dist/gateway/types/scans.d.ts.map +1 -0
  325. package/dist/gateway/types/scans.js +2 -0
  326. package/dist/gateway/types/scans.js.map +1 -0
  327. package/dist/gateway/types/users.d.ts +32 -0
  328. package/dist/gateway/types/users.d.ts.map +1 -0
  329. package/dist/gateway/types/users.js +2 -0
  330. package/dist/gateway/types/users.js.map +1 -0
  331. package/dist/index.d.ts +32 -0
  332. package/dist/index.d.ts.map +1 -0
  333. package/dist/index.js +40 -0
  334. package/dist/index.js.map +1 -0
  335. package/dist/ports/FileSink.d.ts +20 -0
  336. package/dist/ports/FileSink.d.ts.map +1 -0
  337. package/dist/ports/FileSink.js +2 -0
  338. package/dist/ports/FileSink.js.map +1 -0
  339. package/dist/ports/Logger.d.ts +16 -0
  340. package/dist/ports/Logger.d.ts.map +1 -0
  341. package/dist/ports/Logger.js +7 -0
  342. package/dist/ports/Logger.js.map +1 -0
  343. package/dist/ports/PendingActionStore.d.ts +84 -0
  344. package/dist/ports/PendingActionStore.d.ts.map +1 -0
  345. package/dist/ports/PendingActionStore.js +16 -0
  346. package/dist/ports/PendingActionStore.js.map +1 -0
  347. package/dist/reads/access.d.ts +4 -0
  348. package/dist/reads/access.d.ts.map +1 -0
  349. package/dist/reads/access.js +129 -0
  350. package/dist/reads/access.js.map +1 -0
  351. package/dist/reads/checkpoints.d.ts +4 -0
  352. package/dist/reads/checkpoints.d.ts.map +1 -0
  353. package/dist/reads/checkpoints.js +152 -0
  354. package/dist/reads/checkpoints.js.map +1 -0
  355. package/dist/reads/files.d.ts +9 -0
  356. package/dist/reads/files.d.ts.map +1 -0
  357. package/dist/reads/files.js +222 -0
  358. package/dist/reads/files.js.map +1 -0
  359. package/dist/reads/incidents.d.ts +4 -0
  360. package/dist/reads/incidents.d.ts.map +1 -0
  361. package/dist/reads/incidents.js +159 -0
  362. package/dist/reads/incidents.js.map +1 -0
  363. package/dist/reads/index.d.ts +11 -0
  364. package/dist/reads/index.d.ts.map +1 -0
  365. package/dist/reads/index.js +51 -0
  366. package/dist/reads/index.js.map +1 -0
  367. package/dist/reads/onboarding.d.ts +4 -0
  368. package/dist/reads/onboarding.d.ts.map +1 -0
  369. package/dist/reads/onboarding.js +41 -0
  370. package/dist/reads/onboarding.js.map +1 -0
  371. package/dist/reads/organization.d.ts +26 -0
  372. package/dist/reads/organization.d.ts.map +1 -0
  373. package/dist/reads/organization.js +45 -0
  374. package/dist/reads/organization.js.map +1 -0
  375. package/dist/reads/patrollers.d.ts +11 -0
  376. package/dist/reads/patrollers.d.ts.map +1 -0
  377. package/dist/reads/patrollers.js +172 -0
  378. package/dist/reads/patrollers.js.map +1 -0
  379. package/dist/reads/plan.d.ts +4 -0
  380. package/dist/reads/plan.d.ts.map +1 -0
  381. package/dist/reads/plan.js +195 -0
  382. package/dist/reads/plan.js.map +1 -0
  383. package/dist/reads/rounds.d.ts +4 -0
  384. package/dist/reads/rounds.d.ts.map +1 -0
  385. package/dist/reads/rounds.js +160 -0
  386. package/dist/reads/rounds.js.map +1 -0
  387. package/dist/reads/routes.d.ts +4 -0
  388. package/dist/reads/routes.d.ts.map +1 -0
  389. package/dist/reads/routes.js +34 -0
  390. package/dist/reads/routes.js.map +1 -0
  391. package/dist/reads/support/access-locations.d.ts +22 -0
  392. package/dist/reads/support/access-locations.d.ts.map +1 -0
  393. package/dist/reads/support/access-locations.js +55 -0
  394. package/dist/reads/support/access-locations.js.map +1 -0
  395. package/dist/reads/support/excel.d.ts +10 -0
  396. package/dist/reads/support/excel.d.ts.map +1 -0
  397. package/dist/reads/support/excel.js +35 -0
  398. package/dist/reads/support/excel.js.map +1 -0
  399. package/dist/reads/support/params.d.ts +50 -0
  400. package/dist/reads/support/params.d.ts.map +1 -0
  401. package/dist/reads/support/params.js +73 -0
  402. package/dist/reads/support/params.js.map +1 -0
  403. package/dist/reads/support/resolve.d.ts +17 -0
  404. package/dist/reads/support/resolve.d.ts.map +1 -0
  405. package/dist/reads/support/resolve.js +33 -0
  406. package/dist/reads/support/resolve.js.map +1 -0
  407. package/dist/reads/support/results.d.ts +22 -0
  408. package/dist/reads/support/results.d.ts.map +1 -0
  409. package/dist/reads/support/results.js +41 -0
  410. package/dist/reads/support/results.js.map +1 -0
  411. package/dist/reads/support/roles.d.ts +13 -0
  412. package/dist/reads/support/roles.d.ts.map +1 -0
  413. package/dist/reads/support/roles.js +27 -0
  414. package/dist/reads/support/roles.js.map +1 -0
  415. package/dist/reads/support/scans.d.ts +31 -0
  416. package/dist/reads/support/scans.d.ts.map +1 -0
  417. package/dist/reads/support/scans.js +66 -0
  418. package/dist/reads/support/scans.js.map +1 -0
  419. package/dist/reads/types.d.ts +48 -0
  420. package/dist/reads/types.d.ts.map +1 -0
  421. package/dist/reads/types.js +5 -0
  422. package/dist/reads/types.js.map +1 -0
  423. package/dist/reads/users.d.ts +4 -0
  424. package/dist/reads/users.d.ts.map +1 -0
  425. package/dist/reads/users.js +57 -0
  426. package/dist/reads/users.js.map +1 -0
  427. package/dist/testing/FakePatrolTechGateway.d.ts +212 -0
  428. package/dist/testing/FakePatrolTechGateway.d.ts.map +1 -0
  429. package/dist/testing/FakePatrolTechGateway.js +712 -0
  430. package/dist/testing/FakePatrolTechGateway.js.map +1 -0
  431. package/dist/testing/RecordingFileSink.d.ts +12 -0
  432. package/dist/testing/RecordingFileSink.d.ts.map +1 -0
  433. package/dist/testing/RecordingFileSink.js +12 -0
  434. package/dist/testing/RecordingFileSink.js.map +1 -0
  435. package/dist/testing/index.d.ts +4 -0
  436. package/dist/testing/index.d.ts.map +1 -0
  437. package/dist/testing/index.js +4 -0
  438. package/dist/testing/index.js.map +1 -0
  439. package/dist/testing/reads.d.ts +34 -0
  440. package/dist/testing/reads.d.ts.map +1 -0
  441. package/dist/testing/reads.js +39 -0
  442. package/dist/testing/reads.js.map +1 -0
  443. package/package.json +76 -4
@@ -0,0 +1,110 @@
1
+ import { z } from 'zod';
2
+ import { segunIdioma } from '../domain/language.js';
3
+ import { elegirHorario, horariosParaBackend, listarHorarios } from '../domain/route-schedule.js';
4
+ import { utcOffsetMinutes } from '../domain/timezone.js';
5
+ import { elegirRutaConDetalle } from './support/route-lookup.js';
6
+ import { DESDE, describirFranja, DIAS_PARAM, HASTA, horariosUtc, HORAS_LOCALES, RUTA, } from './support/schedule.js';
7
+ import { INTERNO } from './support/shared.js';
8
+ import { defineBotAction } from './types.js';
9
+ /** Añadir y borrar horarios de una ruta, siempre en la hora local del cliente. */
10
+ const addTimeWindowParams = {
11
+ ruta: RUTA,
12
+ dias: DIAS_PARAM,
13
+ desde: DESDE,
14
+ hasta: HASTA,
15
+ ruta_id: z.string().optional().describe(INTERNO),
16
+ };
17
+ export function addTimeWindow({ gateway }) {
18
+ return defineBotAction({
19
+ nombre: 'add_time_window',
20
+ tool: 'proponer_anadir_horario',
21
+ descripcion: 'Prepara añadir UN horario (días y franja, para una ronda) a una ruta existente. NO lo añade: le envía al cliente un resumen con un botón ' +
22
+ `para confirmarlo. ${HORAS_LOCALES} Si se solapa con otro horario de la ruta te lo dirá: pregunta al usuario cómo ajustarlo.`,
23
+ params: addTimeWindowParams,
24
+ rolMinimo: 'EDITOR',
25
+ async preparar(ctx, p) {
26
+ const r = await elegirRutaConDetalle(gateway, ctx, p.ruta);
27
+ if ('error' in r)
28
+ return r;
29
+ const h = horariosParaBackend([p], utcOffsetMinutes(ctx.tz), r.detalle.timeWindows);
30
+ if ('error' in h)
31
+ return h;
32
+ return { params: { ...p, ruta: r.ruta.name, ruta_id: r.ruta.id } };
33
+ },
34
+ resumen(p, { idioma, organizacion }) {
35
+ const franja = describirFranja(p, idioma);
36
+ return segunIdioma(idioma, {
37
+ es: `Añadir a la ruta «${p.ruta}» de ${organizacion} el horario ${franja} (tu hora local).`,
38
+ en: `Add to the route «${p.ruta}» of ${organizacion} the time slot ${franja} (your local time).`,
39
+ fr: `Ajouter au parcours «${p.ruta}» de ${organizacion} le créneau ${franja} (votre heure locale).`,
40
+ });
41
+ },
42
+ async ejecutar(ctx, p) {
43
+ if (!p.ruta_id)
44
+ throw new Error('add_time_window sin ruta_id (no pasó por preparar)');
45
+ await gateway.addRouteTimeWindow(p.ruta_id, horariosUtc([p], ctx.tz)[0], ctx.token);
46
+ const franja = describirFranja(p, ctx.language);
47
+ return {
48
+ texto: segunIdioma(ctx.language, {
49
+ es: `✅ Horario ${franja} añadido a la ruta «${p.ruta}».`,
50
+ en: `✅ Time slot ${franja} added to the route «${p.ruta}».`,
51
+ fr: `✅ Créneau ${franja} ajouté au parcours «${p.ruta}».`,
52
+ }),
53
+ };
54
+ },
55
+ });
56
+ }
57
+ const deleteTimeWindowParams = {
58
+ ruta: RUTA,
59
+ horario: z
60
+ .string()
61
+ .trim()
62
+ .min(1)
63
+ .describe('Cuál borrar: su número en la lista de consultar_horarios_ruta o cómo lo dice el cliente («lun 20:00-21:00»), en hora local'),
64
+ horario_id: z.string().optional().describe(INTERNO),
65
+ horario_texto: z.string().optional().describe(INTERNO),
66
+ };
67
+ export function deleteTimeWindow({ gateway }) {
68
+ return defineBotAction({
69
+ nombre: 'delete_time_window',
70
+ tool: 'proponer_borrar_horario',
71
+ descripcion: 'Prepara borrar UN horario de una ruta. NO lo borra: le envía al cliente un resumen con un botón para confirmarlo. ' +
72
+ 'Si no sabes cuál es, llama antes a consultar_horarios_ruta y enséñale la lista (en su hora local). Si hay dudas, te devuelve la lista para preguntar.',
73
+ params: deleteTimeWindowParams,
74
+ rolMinimo: 'EDITOR',
75
+ async preparar(ctx, p) {
76
+ const r = await elegirRutaConDetalle(gateway, ctx, p.ruta);
77
+ if ('error' in r)
78
+ return r;
79
+ const horarios = listarHorarios(r.detalle.timeWindows, utcOffsetMinutes(ctx.tz));
80
+ if (horarios.length === 0)
81
+ return { error: `La ruta «${r.ruta.name}» no tiene ningún horario.` };
82
+ const h = elegirHorario(horarios, p.horario);
83
+ if ('error' in h)
84
+ return h;
85
+ return {
86
+ params: { ...p, ruta: r.ruta.name, horario_id: h.item.id, horario_texto: h.item.texto },
87
+ };
88
+ },
89
+ resumen(p, { idioma, organizacion }) {
90
+ return segunIdioma(idioma, {
91
+ es: `Borrar de la ruta «${p.ruta}» de ${organizacion} el horario ${p.horario_texto} (tu hora local). Dejarán de generarse rondas en él.`,
92
+ en: `Delete from the route «${p.ruta}» of ${organizacion} the time slot ${p.horario_texto} (your local time). No more rounds will be generated in it.`,
93
+ fr: `Supprimer du parcours «${p.ruta}» de ${organizacion} le créneau ${p.horario_texto} (votre heure locale). Aucune ronde ne sera plus générée sur ce créneau.`,
94
+ });
95
+ },
96
+ async ejecutar(ctx, p) {
97
+ if (!p.horario_id)
98
+ throw new Error('delete_time_window sin horario_id (no pasó por preparar)');
99
+ await gateway.deleteRouteTimeWindow(p.horario_id, ctx.token);
100
+ return {
101
+ texto: segunIdioma(ctx.language, {
102
+ es: `✅ Horario ${p.horario_texto} borrado de la ruta «${p.ruta}».`,
103
+ en: `✅ Time slot ${p.horario_texto} deleted from the route «${p.ruta}».`,
104
+ fr: `✅ Créneau ${p.horario_texto} supprimé du parcours «${p.ruta}».`,
105
+ }),
106
+ };
107
+ },
108
+ });
109
+ }
110
+ //# sourceMappingURL=route-schedules.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"route-schedules.js","sourceRoot":"","sources":["../../src/actions/route-schedules.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,5 @@
1
+ import { type ActionDefinition, type ActionEnv } from './types.js';
2
+ export declare function createRoute({ gateway }: ActionEnv): ActionDefinition;
3
+ export declare function setRouteActive({ gateway }: ActionEnv): ActionDefinition;
4
+ export declare function routeCheckpoint({ gateway, logger }: ActionEnv): ActionDefinition;
5
+ //# sourceMappingURL=routes.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"routes.d.ts","sourceRoot":"","sources":["../../src/actions/routes.ts"],"names":[],"mappings":"AAuBA,OAAO,EAAmB,KAAK,gBAAgB,EAAE,KAAK,SAAS,EAAE,MAAM,YAAY,CAAC;AA2BpF,wBAAgB,WAAW,CAAC,EAAE,OAAO,EAAE,EAAE,SAAS,GAAG,gBAAgB,CAqHpE;AAQD,wBAAgB,cAAc,CAAC,EAAE,OAAO,EAAE,EAAE,SAAS,GAAG,gBAAgB,CAuEvE;AAuCD,wBAAgB,eAAe,CAAC,EAAE,OAAO,EAAE,MAAM,EAAE,EAAE,SAAS,GAAG,gBAAgB,CAiHhF"}
@@ -0,0 +1,348 @@
1
+ import { randomUUID } from 'node:crypto';
2
+ import { z } from 'zod';
3
+ import { segunIdioma } from '../domain/language.js';
4
+ import { efectoDeQuitar } from '../domain/route-checkpoints.js';
5
+ import { horariosParaBackend } from '../domain/route-schedule.js';
6
+ import { utcOffsetMinutes } from '../domain/timezone.js';
7
+ import { efectoEnElLote, leerRuta, rutaEnElLote } from './support/route-impact.js';
8
+ import { elegirCheckpointParaRuta, elegirRuta, elegirRutaConDetalle, } from './support/route-lookup.js';
9
+ import { describirFranja, franjaSchema, horariosUtc, HORAS_LOCALES, RUTA, } from './support/schedule.js';
10
+ import { avisoRutaVacia, elegir, INTERNO, maybeApplied, ubicacionPara } from './support/shared.js';
11
+ import { turnoDe } from './support/turno.js';
12
+ import { defineBotAction } from './types.js';
13
+ /**
14
+ * Rutas: crear ruta, activar y desactivar, y añadir o quitar
15
+ * checkpoints de una ruta. Sus horarios van en `route-schedules.ts`.
16
+ */
17
+ const createRouteParams = {
18
+ nombre: z.string().trim().min(1).describe('Nombre de la ruta'),
19
+ ubicacion: z
20
+ .string()
21
+ .optional()
22
+ .describe('Ubicación de la ruta. Pregúntala solo si el usuario tiene varias.'),
23
+ checkpoints: z
24
+ .array(z.string().trim().min(1))
25
+ .min(1)
26
+ .describe('Nombres de los checkpoints de la ruta, en el orden en que se recorren'),
27
+ orden_estricto: z
28
+ .boolean()
29
+ .optional()
30
+ .describe('true = hay que escanearlos en ese orden. Por defecto, no.'),
31
+ franjas: z.array(franjaSchema).min(1).describe('Horarios de la ruta, en hora LOCAL del cliente'),
32
+ ubicacion_id: z.string().optional().describe(INTERNO),
33
+ checkpoint_ids: z.array(z.string()).optional().describe(INTERNO),
34
+ ruta_id: z.string().optional().describe(INTERNO),
35
+ };
36
+ export function createRoute({ gateway }) {
37
+ return defineBotAction({
38
+ nombre: 'create_route',
39
+ tool: 'proponer_crear_ruta',
40
+ descripcion: 'Prepara el alta de una ruta con sus checkpoints (en orden) y sus horarios. NO la crea: le envía al cliente un resumen con un botón ' +
41
+ 'para confirmarla. Pregunta solo lo que falte: nombre, checkpoints (ya existentes) y horarios; la ubicación solo si tiene varias. ' +
42
+ `${HORAS_LOCALES} Si dice «cada hora», «cada 30 minutos»… y no está claro si quiere UNA ronda en toda la franja o una ronda en cada hora, ` +
43
+ 'pregúntaselo antes (p. ej. «de 20:00 a 05:00 cada hora»: ¿una ronda por hora, 9 en total?). Si quiere una por hora, usa `repetir_cada_min: 60`.',
44
+ params: createRouteParams,
45
+ rolMinimo: 'EDITOR',
46
+ rolDeOrganizacion: true,
47
+ async preparar(ctx, p) {
48
+ const u = ubicacionPara(await gateway.listLocations(ctx.org.orgId, ctx.token), p.ubicacion, 'crear la ruta');
49
+ if ('error' in u)
50
+ return u;
51
+ const igual = (await gateway.listRoutes(ctx.org.orgId, ctx.token)).items.find((r) => r.name.trim().toLowerCase() === p.nombre.trim().toLowerCase());
52
+ if (igual)
53
+ return {
54
+ error: `Ya existe una ruta «${igual.name}». Pregunta al usuario si quiere otro nombre o cambiar los horarios de esa ruta.`,
55
+ };
56
+ const enUbicacion = (await gateway.listCheckpoints(ctx.org.orgId, ctx.token)).items.filter((c) => c.locationId === u.item.id);
57
+ const ids = [];
58
+ for (const nombre of p.checkpoints) {
59
+ const c = await elegirCheckpointParaRuta(gateway, ctx, nombre, enUbicacion, u.item.id, `los checkpoints de «${u.item.name}»`);
60
+ if ('error' in c)
61
+ return c;
62
+ if (ids.includes(c.item.id))
63
+ return {
64
+ error: `El checkpoint «${c.item.name}» está dos veces en la lista: una ruta lo lleva una sola vez.`,
65
+ };
66
+ ids.push(c.item.id);
67
+ }
68
+ const horarios = horariosParaBackend(p.franjas, utcOffsetMinutes(ctx.tz));
69
+ if ('error' in horarios)
70
+ return horarios;
71
+ // El id de la ruta lo pone el bot: un alta dudosa se comprueba por él.
72
+ const rutaId = randomUUID();
73
+ return {
74
+ params: {
75
+ ...p,
76
+ ubicacion: u.item.name,
77
+ ubicacion_id: u.item.id,
78
+ checkpoint_ids: ids,
79
+ ruta_id: rutaId,
80
+ },
81
+ idempotencyKey: rutaId,
82
+ };
83
+ },
84
+ resumen(p, { idioma, organizacion }) {
85
+ const orden = p.checkpoints.join(' → ');
86
+ const n = p.checkpoints.length;
87
+ const franjas = p.franjas.map((f) => `• ${describirFranja(f, idioma)}`).join('\n');
88
+ return segunIdioma(idioma, {
89
+ es: `Crear la ruta «${p.nombre}» en la ubicación «${p.ubicacion}» de ${organizacion} con ${n} checkpoints: ${orden}` +
90
+ `${p.orden_estricto ? ' (hay que escanearlos en ese orden)' : ' (en cualquier orden)'}.\nHorarios (tu hora local):\n${franjas}`,
91
+ en: `Create the route «${p.nombre}» in the location «${p.ubicacion}» of ${organizacion} with ${n} checkpoints: ${orden}` +
92
+ `${p.orden_estricto ? ' (they must be scanned in this order)' : ' (in any order)'}.\nSchedule (your local time):\n${franjas}`,
93
+ fr: `Créer le parcours «${p.nombre}» sur le site «${p.ubicacion}» de ${organizacion} avec ${n} checkpoints : ${orden}` +
94
+ `${p.orden_estricto ? ' (à scanner dans cet ordre)' : " (dans n'importe quel ordre)"}.\nHoraires (votre heure locale) :\n${franjas}`,
95
+ });
96
+ },
97
+ async ejecutar(ctx, p) {
98
+ if (!p.ubicacion_id || !p.checkpoint_ids || !p.ruta_id)
99
+ throw new Error('create_route sin ids (no pasó por preparar)');
100
+ const timeWindows = horariosUtc(p.franjas, ctx.tz);
101
+ try {
102
+ await gateway.createRoute({
103
+ id: p.ruta_id,
104
+ name: p.nombre,
105
+ organizationId: ctx.org.orgId,
106
+ locationId: p.ubicacion_id,
107
+ requiresOrderedScan: p.orden_estricto ?? false,
108
+ checkpoints: p.checkpoint_ids.map((checkpointId, i) => ({
109
+ checkpointId,
110
+ order: i + 1,
111
+ })),
112
+ timeWindows,
113
+ scheduleTimezone: ctx.tz,
114
+ }, ctx.token);
115
+ }
116
+ catch (err) {
117
+ // Un timeout o un 5xx no dice si se creó: si la ruta con nuestro id existe, se hizo.
118
+ const hecha = maybeApplied(err)
119
+ ? await gateway.getRouteDetails(p.ruta_id, ctx.token).catch(() => null)
120
+ : null;
121
+ if (!hecha)
122
+ throw err;
123
+ }
124
+ const cps = `${p.checkpoint_ids.length} checkpoint${p.checkpoint_ids.length === 1 ? '' : 's'}`;
125
+ const s = timeWindows.length === 1 ? '' : 's';
126
+ const x = timeWindows.length === 1 ? '' : 'x';
127
+ return {
128
+ texto: segunIdioma(ctx.language, {
129
+ es: `✅ Ruta «${p.nombre}» creada en «${p.ubicacion}» de ${ctx.org.name}, con ${cps} y ${timeWindows.length} horario${s}. Ya está activa: las rondas se generan en sus horarios.`,
130
+ en: `✅ Route «${p.nombre}» created in «${p.ubicacion}» of ${ctx.org.name}, with ${cps} and ${timeWindows.length} time slot${s}. It's active: rounds are generated in its time slots.`,
131
+ fr: `✅ Parcours «${p.nombre}» créé sur le site «${p.ubicacion}» de ${ctx.org.name}, avec ${cps} et ${timeWindows.length} créneau${x}. Il est actif : les rondes sont générées sur ses créneaux.`,
132
+ }),
133
+ };
134
+ },
135
+ });
136
+ }
137
+ const setRouteActiveParams = {
138
+ ruta: RUTA,
139
+ activa: z.boolean().describe('true = activarla; false = desactivarla'),
140
+ ruta_id: z.string().optional().describe(INTERNO),
141
+ };
142
+ export function setRouteActive({ gateway }) {
143
+ return defineBotAction({
144
+ nombre: 'set_route_active',
145
+ tool: 'proponer_activar_ruta',
146
+ descripcion: 'Prepara activar o desactivar una ruta. NO lo cambia: le envía al cliente un resumen con un botón para confirmarlo. ' +
147
+ 'Una ruta desactivada no genera rondas ni alertas (conserva sus horarios y checkpoints). Una ruta sin checkpoints no se puede activar: ' +
148
+ 'primero propón añadirle checkpoints y, cuando el cliente haya CONFIRMADO ese cambio, propón activarla (en otra confirmación, no en la misma).',
149
+ params: setRouteActiveParams,
150
+ rolMinimo: 'EDITOR',
151
+ async preparar(ctx, p) {
152
+ const r = await elegirRuta(gateway, ctx, p.ruta);
153
+ if ('error' in r)
154
+ return r;
155
+ if (r.item.isActive === p.activa) {
156
+ return {
157
+ error: `La ruta «${r.item.name}» ya está ${p.activa ? 'activa' : 'desactivada'}: no hace falta cambiar nada.`,
158
+ };
159
+ }
160
+ if (p.activa) {
161
+ // El backend no deja activar una ruta sin checkpoints (ROUTE_HAS_NO_CHECKPOINTS): no se propone.
162
+ // Vacía ahora (añadir y activar van en dos confirmaciones) o vacía tras lo que ya quita el lote.
163
+ const detalle = await leerRuta(gateway, ctx, r.item.id);
164
+ if (detalle &&
165
+ (efectoDeQuitar(detalle, new Set()).vacia ||
166
+ efectoDeQuitar(rutaEnElLote(ctx, detalle), new Set()).vacia)) {
167
+ return {
168
+ error: `La ruta «${r.item.name}» no tiene checkpoints y una ruta sin checkpoints no se puede activar. ` +
169
+ 'No lo propongas: explícale que primero hay que añadirle checkpoints (puedes proponerlo tú) y después activarla.',
170
+ };
171
+ }
172
+ }
173
+ return { params: { ...p, ruta: r.item.name, ruta_id: r.item.id } };
174
+ },
175
+ resumen(p, { idioma, organizacion }) {
176
+ if (p.activa) {
177
+ return segunIdioma(idioma, {
178
+ es: `Activar la ruta «${p.ruta}» de ${organizacion}: volverá a generar rondas y alertas en sus horarios.`,
179
+ en: `Activate the route «${p.ruta}» of ${organizacion}: it will generate rounds and alerts in its time slots again.`,
180
+ fr: `Activer le parcours «${p.ruta}» de ${organizacion} : il générera à nouveau des rondes et des alertes sur ses créneaux.`,
181
+ });
182
+ }
183
+ return segunIdioma(idioma, {
184
+ es: `Desactivar la ruta «${p.ruta}» de ${organizacion}. Mientras esté desactivada no genera rondas ni alertas.`,
185
+ en: `Deactivate the route «${p.ruta}» of ${organizacion}. While it's deactivated it generates no rounds and no alerts.`,
186
+ fr: `Désactiver le parcours «${p.ruta}» de ${organizacion}. Tant qu'il est désactivé, il ne génère ni rondes ni alertes.`,
187
+ });
188
+ },
189
+ async ejecutar(ctx, p) {
190
+ if (!p.ruta_id)
191
+ throw new Error('set_route_active sin ruta_id (no pasó por preparar)');
192
+ await gateway.setRouteActive(p.ruta_id, p.activa, ctx.token);
193
+ if (p.activa) {
194
+ return {
195
+ texto: segunIdioma(ctx.language, {
196
+ es: `✅ Ruta «${p.ruta}» activada.`,
197
+ en: `✅ Route «${p.ruta}» activated.`,
198
+ fr: `✅ Parcours «${p.ruta}» activé.`,
199
+ }),
200
+ };
201
+ }
202
+ return {
203
+ texto: segunIdioma(ctx.language, {
204
+ es: `✅ Ruta «${p.ruta}» desactivada: no generará rondas ni alertas.`,
205
+ en: `✅ Route «${p.ruta}» deactivated: it won't generate rounds or alerts.`,
206
+ fr: `✅ Parcours «${p.ruta}» désactivé : il ne générera ni rondes ni alertes.`,
207
+ }),
208
+ };
209
+ },
210
+ });
211
+ }
212
+ const routeCheckpointParams = {
213
+ ruta: RUTA,
214
+ checkpoint: z.string().trim().min(1).describe('Nombre del checkpoint'),
215
+ operacion: z.enum(['añadir', 'quitar']).describe('añadir (al final de la ruta) o quitar'),
216
+ ruta_id: z.string().optional().describe(INTERNO),
217
+ checkpoint_id: z.string().optional().describe(INTERNO),
218
+ orden: z.number().optional().describe(INTERNO),
219
+ desactiva: z.boolean().optional().describe(INTERNO),
220
+ };
221
+ /**
222
+ * Tras quitar un checkpoint que `preparar` previó que desactivaba la ruta
223
+ * (`desactiva`): lo confirma releyéndola (el DELETE no devuelve cuerpo) y lo
224
+ * dice. Una ruta que ya estaba inactiva no «se ha desactivado». El cambio ya
225
+ * está hecho, así que un fallo al releer no lo convierte en error.
226
+ */
227
+ async function avisoRutaDesactivada(gateway, logger, rutaId, token, idioma) {
228
+ try {
229
+ const detalle = await gateway.getRouteDetails(rutaId, token);
230
+ if (!detalle || detalle.isActive)
231
+ return '';
232
+ }
233
+ catch (err) {
234
+ logger.warn('bot_action.route_checkpoint_reread_failed', { rutaId, err });
235
+ return '';
236
+ }
237
+ return `\n${segunIdioma(idioma, {
238
+ es: 'La ruta se ha quedado sin checkpoints y se ha desactivado.',
239
+ en: 'The route has no checkpoints left and has been deactivated.',
240
+ fr: "Le parcours n'a plus de checkpoints et a été désactivé.",
241
+ })}`;
242
+ }
243
+ export function routeCheckpoint({ gateway, logger }) {
244
+ return defineBotAction({
245
+ nombre: 'route_checkpoint',
246
+ tool: 'proponer_cambiar_checkpoint_ruta',
247
+ descripcion: 'Prepara añadir un checkpoint existente al final de una ruta, o quitarlo de ella (el checkpoint no se borra). NO lo cambia: ' +
248
+ 'le envía al cliente un resumen con un botón para confirmarlo. Para varios, llámala una vez por cada uno en el MISMO turno (en el orden en que deben quedar): van juntos en una sola confirmación. ' +
249
+ 'Si cambia unos checkpoints por otros, propón primero los que se AÑADEN y después los que se quitan: una ruta que se queda vacía, aunque sea un momento, se desactiva.',
250
+ params: routeCheckpointParams,
251
+ rolMinimo: 'EDITOR',
252
+ // `desactiva` y `orden` dependen de las anteriores del lote: la identidad es ruta, checkpoint y operación.
253
+ huella: (p) => [p.ruta_id, p.checkpoint_id, p.operacion],
254
+ async preparar(ctx, p) {
255
+ const r = await elegirRutaConDetalle(gateway, ctx, p.ruta);
256
+ if ('error' in r)
257
+ return r;
258
+ const enRuta = new Set(r.detalle.checkpoints.map((c) => c.checkpointId));
259
+ // Lo que lleva la ruta tras las anteriores del lote: quitar X y luego añadirlo vale; quitarlo dos veces, no.
260
+ const enLote = new Set(rutaEnElLote(ctx, r.detalle).checkpoints.map((c) => c.checkpointId));
261
+ const todos = (await gateway.listCheckpoints(ctx.org.orgId, ctx.token)).items;
262
+ const anadir = p.operacion === 'añadir';
263
+ // Se añade uno de la ubicación de la ruta; se quita uno de los que tiene (o tenía antes del lote, para decir que ya sale).
264
+ const candidatos = todos.filter((c) => anadir ? c.locationId === r.detalle.locationId : enRuta.has(c.id) || enLote.has(c.id));
265
+ const entre = anadir
266
+ ? 'los checkpoints de la ubicación de la ruta'
267
+ : `los checkpoints de la ruta «${r.ruta.name}»`;
268
+ const c = anadir
269
+ ? await elegirCheckpointParaRuta(gateway, ctx, p.checkpoint, candidatos, r.detalle.locationId, entre)
270
+ : elegir(p.checkpoint, candidatos, (x) => x.name, entre);
271
+ if ('error' in c)
272
+ return c;
273
+ if (anadir && enLote.has(c.item.id)) {
274
+ if (enRuta.has(c.item.id))
275
+ return { error: `El checkpoint «${c.item.name}» ya está en la ruta «${r.ruta.name}».` };
276
+ return {
277
+ error: `Añadir el checkpoint «${c.item.name}» a la ruta «${r.ruta.name}» ya está propuesto en el lote pendiente: no lo repitas.`,
278
+ };
279
+ }
280
+ if (!anadir && !enLote.has(c.item.id)) {
281
+ return {
282
+ error: `El checkpoint «${c.item.name}» ya sale de la ruta «${r.ruta.name}» con otra acción del lote pendiente: no lo repitas.`,
283
+ };
284
+ }
285
+ // Al final de la ruta, detrás de los que ya añaden las anteriores del lote.
286
+ const anadidosEnLote = turnoDe(ctx)
287
+ .cambiosEnRuta(r.ruta.id)
288
+ .filter((x) => x.op === 'añadir').length;
289
+ const orden = Math.max(0, ...r.detalle.checkpoints.map((x) => x.order)) + 1 + anadidosEnLote;
290
+ // Quitar el último que le queda (contando lo que ya quitan o añaden las anteriores del lote) la deja vacía, y el backend la desactiva.
291
+ const desactiva = !anadir && efectoEnElLote(ctx, r.detalle, c.item.id).seDesactiva;
292
+ return {
293
+ params: {
294
+ ...p,
295
+ ruta: r.ruta.name,
296
+ checkpoint: c.item.name,
297
+ ruta_id: r.ruta.id,
298
+ checkpoint_id: c.item.id,
299
+ orden,
300
+ desactiva,
301
+ },
302
+ cambiosEnRutas: [{ rutaId: r.ruta.id, checkpointId: c.item.id, op: p.operacion }],
303
+ };
304
+ },
305
+ resumen(p, { idioma, organizacion }) {
306
+ if (p.operacion === 'añadir') {
307
+ return segunIdioma(idioma, {
308
+ es: `Añadir el checkpoint «${p.checkpoint}» al final de la ruta «${p.ruta}» de ${organizacion}. Las rondas nuevas lo incluirán.`,
309
+ en: `Add the checkpoint «${p.checkpoint}» at the end of the route «${p.ruta}» of ${organizacion}. New rounds will include it.`,
310
+ fr: `Ajouter le checkpoint «${p.checkpoint}» à la fin du parcours «${p.ruta}» de ${organizacion}. Les nouvelles rondes l'incluront.`,
311
+ });
312
+ }
313
+ const quitar = segunIdioma(idioma, {
314
+ es: `Quitar el checkpoint «${p.checkpoint}» de la ruta «${p.ruta}» de ${organizacion}. Las rondas dejarán de pedirlo (el checkpoint no se borra).`,
315
+ en: `Remove the checkpoint «${p.checkpoint}» from the route «${p.ruta}» of ${organizacion}. Rounds will no longer ask for it (the checkpoint isn't deleted).`,
316
+ fr: `Retirer le checkpoint «${p.checkpoint}» du parcours «${p.ruta}» de ${organizacion}. Les rondes ne le demanderont plus (le checkpoint n'est pas supprimé).`,
317
+ });
318
+ return p.desactiva ? `${quitar}\n${avisoRutaVacia([p.ruta], idioma)}` : quitar;
319
+ },
320
+ async ejecutar(ctx, p) {
321
+ if (!p.ruta_id || !p.checkpoint_id)
322
+ throw new Error('route_checkpoint sin ids (no pasó por preparar)');
323
+ if (p.operacion === 'añadir') {
324
+ await gateway.addCheckpointToRoute(p.ruta_id, p.checkpoint_id, p.orden ?? 1, ctx.token);
325
+ return {
326
+ texto: segunIdioma(ctx.language, {
327
+ es: `✅ Checkpoint «${p.checkpoint}» añadido a la ruta «${p.ruta}».`,
328
+ en: `✅ Checkpoint «${p.checkpoint}» added to the route «${p.ruta}».`,
329
+ fr: `✅ Checkpoint «${p.checkpoint}» ajouté au parcours «${p.ruta}».`,
330
+ }),
331
+ };
332
+ }
333
+ await gateway.removeCheckpointFromRoute(p.ruta_id, p.checkpoint_id, ctx.token);
334
+ const quitado = segunIdioma(ctx.language, {
335
+ es: `✅ Checkpoint «${p.checkpoint}» quitado de la ruta «${p.ruta}».`,
336
+ en: `✅ Checkpoint «${p.checkpoint}» removed from the route «${p.ruta}».`,
337
+ fr: `✅ Checkpoint «${p.checkpoint}» retiré du parcours «${p.ruta}».`,
338
+ });
339
+ return {
340
+ texto: quitado +
341
+ (p.desactiva
342
+ ? await avisoRutaDesactivada(gateway, logger, p.ruta_id, ctx.token, ctx.language)
343
+ : ''),
344
+ };
345
+ },
346
+ });
347
+ }
348
+ //# sourceMappingURL=routes.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"routes.js","sourceRoot":"","sources":["../../src/actions/routes.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,53 @@
1
+ import { z } from 'zod';
2
+ import { type FixedTextLanguage } from '../../domain/language.js';
3
+ import type { CheckpointDetail, CheckpointFraudRules } from '../../gateway/index.js';
4
+ import type { BotActionParams } from '../types.js';
5
+ /** Parámetros de `edit_checkpoint_antifraud`: aquí, junto a las reglas, para que `CambiosAntifraude` salga de ellos. */
6
+ export declare const antifraudParams: {
7
+ checkpoint: z.ZodString;
8
+ ubicacion: z.ZodOptional<z.ZodString>;
9
+ proximidad_gps: z.ZodOptional<z.ZodBoolean>;
10
+ distancia_maxima_m: z.ZodOptional<z.ZodNumber>;
11
+ precision_maxima_m: z.ZodOptional<z.ZodNumber>;
12
+ modo_subterraneo: z.ZodOptional<z.ZodBoolean>;
13
+ checkpoint_id: z.ZodOptional<z.ZodString>;
14
+ ubicacion_id: z.ZodOptional<z.ZodString>;
15
+ reglas_antes: z.ZodOptional<z.ZodObject<{
16
+ gpsProximity: z.ZodOptional<z.ZodObject<{
17
+ maxDistanceMeters: z.ZodNumber;
18
+ maxAccuracyMeters: z.ZodOptional<z.ZodNumber>;
19
+ }, z.core.$strip>>;
20
+ undergroundMode: z.ZodOptional<z.ZodObject<{
21
+ enabled: z.ZodBoolean;
22
+ }, z.core.$strip>>;
23
+ }, z.core.$strip>>;
24
+ reglas_despues: z.ZodOptional<z.ZodObject<{
25
+ gpsProximity: z.ZodOptional<z.ZodObject<{
26
+ maxDistanceMeters: z.ZodNumber;
27
+ maxAccuracyMeters: z.ZodOptional<z.ZodNumber>;
28
+ }, z.core.$strip>>;
29
+ undergroundMode: z.ZodOptional<z.ZodObject<{
30
+ enabled: z.ZodBoolean;
31
+ }, z.core.$strip>>;
32
+ }, z.core.$strip>>;
33
+ };
34
+ /** Los cambios de antifraude que pide el cliente (derivados de los parámetros: no pueden divergir). */
35
+ export type CambiosAntifraude = Pick<BotActionParams<typeof antifraudParams>, 'proximidad_gps' | 'distancia_maxima_m' | 'precision_maxima_m' | 'modo_subterraneo'>;
36
+ export declare const tocaGps: (c: CambiosAntifraude) => boolean;
37
+ /**
38
+ * Por qué este checkpoint no admite estos cambios desde aquí (null = sí los admite).
39
+ * La misma comprobación al proponer y al confirmar, con el checkpoint del momento:
40
+ * una proximidad GPS escrita en un punto de geocerca o sin posición no se aplicaría.
41
+ */
42
+ export declare function bloqueoAntifraude(detalle: CheckpointDetail, c: CambiosAntifraude): 'reglas_desconocidas' | 'geocerca' | 'sin_posicion' | null;
43
+ /** Sin una regla = desactivada; el modo subterráneo apagado no se guarda (como hace el panel). */
44
+ export declare function normalizar(r: CheckpointFraudRules): CheckpointFraudRules;
45
+ /**
46
+ * Las reglas actuales con los cambios pedidos. El backend REEMPLAZA `fraudRules`
47
+ * entero: lo que no se toca tiene que volver tal cual estaba.
48
+ */
49
+ export declare function reglasConCambios(actuales: CheckpointFraudRules, c: CambiosAntifraude): CheckpointFraudRules;
50
+ export declare const mismasReglas: (a: CheckpointFraudRules, b: CheckpointFraudRules) => boolean;
51
+ export declare function textoGps(g: CheckpointFraudRules['gpsProximity'], idioma: FixedTextLanguage): string;
52
+ export declare function textoSubterraneo(u: CheckpointFraudRules['undergroundMode'], idioma: FixedTextLanguage): string;
53
+ //# sourceMappingURL=antifraud-rules.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"antifraud-rules.d.ts","sourceRoot":"","sources":["../../../src/actions/support/antifraud-rules.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,CAAC,EAAE,MAAM,KAAK,CAAC;AACxB,OAAO,EAAe,KAAK,iBAAiB,EAAE,MAAM,0BAA0B,CAAC;AAC/E,OAAO,KAAK,EAAE,gBAAgB,EAAE,oBAAoB,EAAE,MAAM,wBAAwB,CAAC;AACrF,OAAO,KAAK,EAAE,eAAe,EAAE,MAAM,aAAa,CAAC;AAkBnD,wHAAwH;AACxH,eAAO,MAAM,eAAe;;;;;;;;;;;;;;;;;;;;;;;;;;;CA2C3B,CAAC;AAEF,uGAAuG;AACvG,MAAM,MAAM,iBAAiB,GAAG,IAAI,CAClC,eAAe,CAAC,OAAO,eAAe,CAAC,EACvC,gBAAgB,GAAG,oBAAoB,GAAG,oBAAoB,GAAG,kBAAkB,CACpF,CAAC;AAEF,eAAO,MAAM,OAAO,GAAI,GAAG,iBAAiB,KAAG,OAGX,CAAC;AAErC;;;;GAIG;AACH,wBAAgB,iBAAiB,CAC/B,OAAO,EAAE,gBAAgB,EACzB,CAAC,EAAE,iBAAiB,GACnB,qBAAqB,GAAG,UAAU,GAAG,cAAc,GAAG,IAAI,CAM5D;AAED,kGAAkG;AAClG,wBAAgB,UAAU,CAAC,CAAC,EAAE,oBAAoB,GAAG,oBAAoB,CAKxE;AAED;;;GAGG;AACH,wBAAgB,gBAAgB,CAC9B,QAAQ,EAAE,oBAAoB,EAC9B,CAAC,EAAE,iBAAiB,GACnB,oBAAoB,CAgBtB;AAED,eAAO,MAAM,YAAY,GAAI,GAAG,oBAAoB,EAAE,GAAG,oBAAoB,KAAG,OACf,CAAC;AAElE,wBAAgB,QAAQ,CACtB,CAAC,EAAE,oBAAoB,CAAC,cAAc,CAAC,EACvC,MAAM,EAAE,iBAAiB,GACxB,MAAM,CAQR;AAED,wBAAgB,gBAAgB,CAC9B,CAAC,EAAE,oBAAoB,CAAC,iBAAiB,CAAC,EAC1C,MAAM,EAAE,iBAAiB,GACxB,MAAM,CAOR"}