@patroltech/agent-capabilities 0.0.0-stage → 0.2.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (439) 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 +14 -0
  112. package/dist/catalog/english.d.ts.map +1 -0
  113. package/dist/catalog/english.js +368 -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-status.d.ts +29 -0
  156. package/dist/domain/incident-status.d.ts.map +1 -0
  157. package/dist/domain/incident-status.js +44 -0
  158. package/dist/domain/incident-status.js.map +1 -0
  159. package/dist/domain/language.d.ts +39 -0
  160. package/dist/domain/language.d.ts.map +1 -0
  161. package/dist/domain/language.js +112 -0
  162. package/dist/domain/language.js.map +1 -0
  163. package/dist/domain/money.d.ts +3 -0
  164. package/dist/domain/money.d.ts.map +1 -0
  165. package/dist/domain/money.js +12 -0
  166. package/dist/domain/money.js.map +1 -0
  167. package/dist/domain/puesta-en-marcha.d.ts +47 -0
  168. package/dist/domain/puesta-en-marcha.d.ts.map +1 -0
  169. package/dist/domain/puesta-en-marcha.js +22 -0
  170. package/dist/domain/puesta-en-marcha.js.map +1 -0
  171. package/dist/domain/qr-image.d.ts +25 -0
  172. package/dist/domain/qr-image.d.ts.map +1 -0
  173. package/dist/domain/qr-image.js +28 -0
  174. package/dist/domain/qr-image.js.map +1 -0
  175. package/dist/domain/resolve-by-name.d.ts +32 -0
  176. package/dist/domain/resolve-by-name.d.ts.map +1 -0
  177. package/dist/domain/resolve-by-name.js +40 -0
  178. package/dist/domain/resolve-by-name.js.map +1 -0
  179. package/dist/domain/route-checkpoints.d.ts +31 -0
  180. package/dist/domain/route-checkpoints.d.ts.map +1 -0
  181. package/dist/domain/route-checkpoints.js +27 -0
  182. package/dist/domain/route-checkpoints.js.map +1 -0
  183. package/dist/domain/route-schedule.d.ts +88 -0
  184. package/dist/domain/route-schedule.d.ts.map +1 -0
  185. package/dist/domain/route-schedule.js +203 -0
  186. package/dist/domain/route-schedule.js.map +1 -0
  187. package/dist/domain/scan-explanation.d.ts +25 -0
  188. package/dist/domain/scan-explanation.d.ts.map +1 -0
  189. package/dist/domain/scan-explanation.js +99 -0
  190. package/dist/domain/scan-explanation.js.map +1 -0
  191. package/dist/domain/scans-csv.d.ts +37 -0
  192. package/dist/domain/scans-csv.d.ts.map +1 -0
  193. package/dist/domain/scans-csv.js +67 -0
  194. package/dist/domain/scans-csv.js.map +1 -0
  195. package/dist/domain/timezone.d.ts +61 -0
  196. package/dist/domain/timezone.d.ts.map +1 -0
  197. package/dist/domain/timezone.js +113 -0
  198. package/dist/domain/timezone.js.map +1 -0
  199. package/dist/domain/tool-result.d.ts +55 -0
  200. package/dist/domain/tool-result.d.ts.map +1 -0
  201. package/dist/domain/tool-result.js +47 -0
  202. package/dist/domain/tool-result.js.map +1 -0
  203. package/dist/domain/urls.d.ts +33 -0
  204. package/dist/domain/urls.d.ts.map +1 -0
  205. package/dist/domain/urls.js +20 -0
  206. package/dist/domain/urls.js.map +1 -0
  207. package/dist/gateway/PatrolTechGateway.d.ts +195 -0
  208. package/dist/gateway/PatrolTechGateway.d.ts.map +1 -0
  209. package/dist/gateway/PatrolTechGateway.js +2 -0
  210. package/dist/gateway/PatrolTechGateway.js.map +1 -0
  211. package/dist/gateway/index.d.ts +4 -0
  212. package/dist/gateway/index.d.ts.map +1 -0
  213. package/dist/gateway/index.js +4 -0
  214. package/dist/gateway/index.js.map +1 -0
  215. package/dist/gateway/sdk/SdkPatrolTechGateway.d.ts +145 -0
  216. package/dist/gateway/sdk/SdkPatrolTechGateway.d.ts.map +1 -0
  217. package/dist/gateway/sdk/SdkPatrolTechGateway.js +101 -0
  218. package/dist/gateway/sdk/SdkPatrolTechGateway.js.map +1 -0
  219. package/dist/gateway/sdk/access.d.ts +8 -0
  220. package/dist/gateway/sdk/access.d.ts.map +1 -0
  221. package/dist/gateway/sdk/access.js +39 -0
  222. package/dist/gateway/sdk/access.js.map +1 -0
  223. package/dist/gateway/sdk/billing.d.ts +7 -0
  224. package/dist/gateway/sdk/billing.d.ts.map +1 -0
  225. package/dist/gateway/sdk/billing.js +92 -0
  226. package/dist/gateway/sdk/billing.js.map +1 -0
  227. package/dist/gateway/sdk/checkpoint-mappers.d.ts +23 -0
  228. package/dist/gateway/sdk/checkpoint-mappers.d.ts.map +1 -0
  229. package/dist/gateway/sdk/checkpoint-mappers.js +59 -0
  230. package/dist/gateway/sdk/checkpoint-mappers.js.map +1 -0
  231. package/dist/gateway/sdk/checkpoints.d.ts +33 -0
  232. package/dist/gateway/sdk/checkpoints.d.ts.map +1 -0
  233. package/dist/gateway/sdk/checkpoints.js +163 -0
  234. package/dist/gateway/sdk/checkpoints.js.map +1 -0
  235. package/dist/gateway/sdk/errors.d.ts +10 -0
  236. package/dist/gateway/sdk/errors.d.ts.map +1 -0
  237. package/dist/gateway/sdk/errors.js +46 -0
  238. package/dist/gateway/sdk/errors.js.map +1 -0
  239. package/dist/gateway/sdk/incidents.d.ts +18 -0
  240. package/dist/gateway/sdk/incidents.d.ts.map +1 -0
  241. package/dist/gateway/sdk/incidents.js +98 -0
  242. package/dist/gateway/sdk/incidents.js.map +1 -0
  243. package/dist/gateway/sdk/index.d.ts +4 -0
  244. package/dist/gateway/sdk/index.d.ts.map +1 -0
  245. package/dist/gateway/sdk/index.js +4 -0
  246. package/dist/gateway/sdk/index.js.map +1 -0
  247. package/dist/gateway/sdk/list.d.ts +15 -0
  248. package/dist/gateway/sdk/list.d.ts.map +1 -0
  249. package/dist/gateway/sdk/list.js +12 -0
  250. package/dist/gateway/sdk/list.js.map +1 -0
  251. package/dist/gateway/sdk/locations.d.ts +24 -0
  252. package/dist/gateway/sdk/locations.d.ts.map +1 -0
  253. package/dist/gateway/sdk/locations.js +44 -0
  254. package/dist/gateway/sdk/locations.js.map +1 -0
  255. package/dist/gateway/sdk/patrollers.d.ts +26 -0
  256. package/dist/gateway/sdk/patrollers.d.ts.map +1 -0
  257. package/dist/gateway/sdk/patrollers.js +132 -0
  258. package/dist/gateway/sdk/patrollers.js.map +1 -0
  259. package/dist/gateway/sdk/rounds.d.ts +15 -0
  260. package/dist/gateway/sdk/rounds.d.ts.map +1 -0
  261. package/dist/gateway/sdk/rounds.js +142 -0
  262. package/dist/gateway/sdk/rounds.js.map +1 -0
  263. package/dist/gateway/sdk/routes.d.ts +18 -0
  264. package/dist/gateway/sdk/routes.d.ts.map +1 -0
  265. package/dist/gateway/sdk/routes.js +74 -0
  266. package/dist/gateway/sdk/routes.js.map +1 -0
  267. package/dist/gateway/sdk/scans.d.ts +4 -0
  268. package/dist/gateway/sdk/scans.d.ts.map +1 -0
  269. package/dist/gateway/sdk/scans.js +72 -0
  270. package/dist/gateway/sdk/scans.js.map +1 -0
  271. package/dist/gateway/sdk/transport.d.ts +77 -0
  272. package/dist/gateway/sdk/transport.d.ts.map +1 -0
  273. package/dist/gateway/sdk/transport.js +81 -0
  274. package/dist/gateway/sdk/transport.js.map +1 -0
  275. package/dist/gateway/sdk/users.d.ts +15 -0
  276. package/dist/gateway/sdk/users.d.ts.map +1 -0
  277. package/dist/gateway/sdk/users.js +49 -0
  278. package/dist/gateway/sdk/users.js.map +1 -0
  279. package/dist/gateway/types/access.d.ts +32 -0
  280. package/dist/gateway/types/access.d.ts.map +1 -0
  281. package/dist/gateway/types/access.js +2 -0
  282. package/dist/gateway/types/access.js.map +1 -0
  283. package/dist/gateway/types/billing.d.ts +60 -0
  284. package/dist/gateway/types/billing.d.ts.map +1 -0
  285. package/dist/gateway/types/billing.js +2 -0
  286. package/dist/gateway/types/billing.js.map +1 -0
  287. package/dist/gateway/types/checkpoints.d.ts +84 -0
  288. package/dist/gateway/types/checkpoints.d.ts.map +1 -0
  289. package/dist/gateway/types/checkpoints.js +2 -0
  290. package/dist/gateway/types/checkpoints.js.map +1 -0
  291. package/dist/gateway/types/common.d.ts +13 -0
  292. package/dist/gateway/types/common.d.ts.map +1 -0
  293. package/dist/gateway/types/common.js +2 -0
  294. package/dist/gateway/types/common.js.map +1 -0
  295. package/dist/gateway/types/incidents.d.ts +53 -0
  296. package/dist/gateway/types/incidents.d.ts.map +1 -0
  297. package/dist/gateway/types/incidents.js +2 -0
  298. package/dist/gateway/types/incidents.js.map +1 -0
  299. package/dist/gateway/types/index.d.ts +12 -0
  300. package/dist/gateway/types/index.d.ts.map +1 -0
  301. package/dist/gateway/types/index.js +12 -0
  302. package/dist/gateway/types/index.js.map +1 -0
  303. package/dist/gateway/types/locations.d.ts +7 -0
  304. package/dist/gateway/types/locations.d.ts.map +1 -0
  305. package/dist/gateway/types/locations.js +2 -0
  306. package/dist/gateway/types/locations.js.map +1 -0
  307. package/dist/gateway/types/patrollers.d.ts +68 -0
  308. package/dist/gateway/types/patrollers.d.ts.map +1 -0
  309. package/dist/gateway/types/patrollers.js +15 -0
  310. package/dist/gateway/types/patrollers.js.map +1 -0
  311. package/dist/gateway/types/rounds.d.ts +89 -0
  312. package/dist/gateway/types/rounds.d.ts.map +1 -0
  313. package/dist/gateway/types/rounds.js +2 -0
  314. package/dist/gateway/types/rounds.js.map +1 -0
  315. package/dist/gateway/types/routes.d.ts +48 -0
  316. package/dist/gateway/types/routes.d.ts.map +1 -0
  317. package/dist/gateway/types/routes.js +2 -0
  318. package/dist/gateway/types/routes.js.map +1 -0
  319. package/dist/gateway/types/scans.d.ts +44 -0
  320. package/dist/gateway/types/scans.d.ts.map +1 -0
  321. package/dist/gateway/types/scans.js +2 -0
  322. package/dist/gateway/types/scans.js.map +1 -0
  323. package/dist/gateway/types/users.d.ts +32 -0
  324. package/dist/gateway/types/users.d.ts.map +1 -0
  325. package/dist/gateway/types/users.js +2 -0
  326. package/dist/gateway/types/users.js.map +1 -0
  327. package/dist/index.d.ts +32 -0
  328. package/dist/index.d.ts.map +1 -0
  329. package/dist/index.js +40 -0
  330. package/dist/index.js.map +1 -0
  331. package/dist/ports/FileSink.d.ts +20 -0
  332. package/dist/ports/FileSink.d.ts.map +1 -0
  333. package/dist/ports/FileSink.js +2 -0
  334. package/dist/ports/FileSink.js.map +1 -0
  335. package/dist/ports/Logger.d.ts +16 -0
  336. package/dist/ports/Logger.d.ts.map +1 -0
  337. package/dist/ports/Logger.js +7 -0
  338. package/dist/ports/Logger.js.map +1 -0
  339. package/dist/ports/PendingActionStore.d.ts +84 -0
  340. package/dist/ports/PendingActionStore.d.ts.map +1 -0
  341. package/dist/ports/PendingActionStore.js +16 -0
  342. package/dist/ports/PendingActionStore.js.map +1 -0
  343. package/dist/reads/access.d.ts +4 -0
  344. package/dist/reads/access.d.ts.map +1 -0
  345. package/dist/reads/access.js +129 -0
  346. package/dist/reads/access.js.map +1 -0
  347. package/dist/reads/checkpoints.d.ts +4 -0
  348. package/dist/reads/checkpoints.d.ts.map +1 -0
  349. package/dist/reads/checkpoints.js +152 -0
  350. package/dist/reads/checkpoints.js.map +1 -0
  351. package/dist/reads/files.d.ts +9 -0
  352. package/dist/reads/files.d.ts.map +1 -0
  353. package/dist/reads/files.js +222 -0
  354. package/dist/reads/files.js.map +1 -0
  355. package/dist/reads/incidents.d.ts +4 -0
  356. package/dist/reads/incidents.d.ts.map +1 -0
  357. package/dist/reads/incidents.js +164 -0
  358. package/dist/reads/incidents.js.map +1 -0
  359. package/dist/reads/index.d.ts +11 -0
  360. package/dist/reads/index.d.ts.map +1 -0
  361. package/dist/reads/index.js +51 -0
  362. package/dist/reads/index.js.map +1 -0
  363. package/dist/reads/onboarding.d.ts +4 -0
  364. package/dist/reads/onboarding.d.ts.map +1 -0
  365. package/dist/reads/onboarding.js +41 -0
  366. package/dist/reads/onboarding.js.map +1 -0
  367. package/dist/reads/organization.d.ts +26 -0
  368. package/dist/reads/organization.d.ts.map +1 -0
  369. package/dist/reads/organization.js +45 -0
  370. package/dist/reads/organization.js.map +1 -0
  371. package/dist/reads/patrollers.d.ts +4 -0
  372. package/dist/reads/patrollers.d.ts.map +1 -0
  373. package/dist/reads/patrollers.js +156 -0
  374. package/dist/reads/patrollers.js.map +1 -0
  375. package/dist/reads/plan.d.ts +4 -0
  376. package/dist/reads/plan.d.ts.map +1 -0
  377. package/dist/reads/plan.js +195 -0
  378. package/dist/reads/plan.js.map +1 -0
  379. package/dist/reads/rounds.d.ts +4 -0
  380. package/dist/reads/rounds.d.ts.map +1 -0
  381. package/dist/reads/rounds.js +160 -0
  382. package/dist/reads/rounds.js.map +1 -0
  383. package/dist/reads/routes.d.ts +4 -0
  384. package/dist/reads/routes.d.ts.map +1 -0
  385. package/dist/reads/routes.js +34 -0
  386. package/dist/reads/routes.js.map +1 -0
  387. package/dist/reads/support/access-locations.d.ts +22 -0
  388. package/dist/reads/support/access-locations.d.ts.map +1 -0
  389. package/dist/reads/support/access-locations.js +55 -0
  390. package/dist/reads/support/access-locations.js.map +1 -0
  391. package/dist/reads/support/excel.d.ts +10 -0
  392. package/dist/reads/support/excel.d.ts.map +1 -0
  393. package/dist/reads/support/excel.js +35 -0
  394. package/dist/reads/support/excel.js.map +1 -0
  395. package/dist/reads/support/params.d.ts +50 -0
  396. package/dist/reads/support/params.d.ts.map +1 -0
  397. package/dist/reads/support/params.js +73 -0
  398. package/dist/reads/support/params.js.map +1 -0
  399. package/dist/reads/support/resolve.d.ts +17 -0
  400. package/dist/reads/support/resolve.d.ts.map +1 -0
  401. package/dist/reads/support/resolve.js +33 -0
  402. package/dist/reads/support/resolve.js.map +1 -0
  403. package/dist/reads/support/results.d.ts +22 -0
  404. package/dist/reads/support/results.d.ts.map +1 -0
  405. package/dist/reads/support/results.js +41 -0
  406. package/dist/reads/support/results.js.map +1 -0
  407. package/dist/reads/support/roles.d.ts +13 -0
  408. package/dist/reads/support/roles.d.ts.map +1 -0
  409. package/dist/reads/support/roles.js +27 -0
  410. package/dist/reads/support/roles.js.map +1 -0
  411. package/dist/reads/support/scans.d.ts +31 -0
  412. package/dist/reads/support/scans.d.ts.map +1 -0
  413. package/dist/reads/support/scans.js +66 -0
  414. package/dist/reads/support/scans.js.map +1 -0
  415. package/dist/reads/types.d.ts +48 -0
  416. package/dist/reads/types.d.ts.map +1 -0
  417. package/dist/reads/types.js +5 -0
  418. package/dist/reads/types.js.map +1 -0
  419. package/dist/reads/users.d.ts +4 -0
  420. package/dist/reads/users.d.ts.map +1 -0
  421. package/dist/reads/users.js +57 -0
  422. package/dist/reads/users.js.map +1 -0
  423. package/dist/testing/FakePatrolTechGateway.d.ts +212 -0
  424. package/dist/testing/FakePatrolTechGateway.d.ts.map +1 -0
  425. package/dist/testing/FakePatrolTechGateway.js +712 -0
  426. package/dist/testing/FakePatrolTechGateway.js.map +1 -0
  427. package/dist/testing/RecordingFileSink.d.ts +12 -0
  428. package/dist/testing/RecordingFileSink.d.ts.map +1 -0
  429. package/dist/testing/RecordingFileSink.js +12 -0
  430. package/dist/testing/RecordingFileSink.js.map +1 -0
  431. package/dist/testing/index.d.ts +4 -0
  432. package/dist/testing/index.d.ts.map +1 -0
  433. package/dist/testing/index.js +4 -0
  434. package/dist/testing/index.js.map +1 -0
  435. package/dist/testing/reads.d.ts +34 -0
  436. package/dist/testing/reads.d.ts.map +1 -0
  437. package/dist/testing/reads.js +39 -0
  438. package/dist/testing/reads.js.map +1 -0
  439. package/package.json +76 -4
@@ -0,0 +1,121 @@
1
+ import { z } from 'zod';
2
+ import { segunIdioma } from '../../domain/language.js';
3
+ import { INTERNO } from './shared.js';
4
+ /**
5
+ * Reglas antifraude de un checkpoint (proximidad GPS y modo subterráneo): qué
6
+ * cambios admite, cómo quedan tras aplicarlos y cómo se describen. Sin backend.
7
+ */
8
+ /** La que pone el panel al activar la proximidad GPS (checkpoint-wizard). */
9
+ const DISTANCIA_POR_DEFECTO_M = 100;
10
+ const reglasSchema = z.object({
11
+ gpsProximity: z
12
+ .object({ maxDistanceMeters: z.number(), maxAccuracyMeters: z.number().optional() })
13
+ .optional(),
14
+ undergroundMode: z.object({ enabled: z.boolean() }).optional(),
15
+ });
16
+ /** Parámetros de `edit_checkpoint_antifraud`: aquí, junto a las reglas, para que `CambiosAntifraude` salga de ellos. */
17
+ export const antifraudParams = {
18
+ checkpoint: z.string().trim().min(1).describe('Nombre del checkpoint'),
19
+ ubicacion: z
20
+ .string()
21
+ .trim()
22
+ .min(1)
23
+ .optional()
24
+ .describe('Ubicación del checkpoint, si hay varios con ese nombre. OMÍTELO si no hace falta.'),
25
+ proximidad_gps: z
26
+ .boolean()
27
+ .optional()
28
+ .describe('true = activar la proximidad GPS (o ajustarla); false = desactivarla. OMÍTELO si no cambia o si solo das la distancia.'),
29
+ // Aquí se acepta de 10 a 5000 m; la API solo exige > 0.
30
+ distancia_maxima_m: z
31
+ .number()
32
+ .int()
33
+ .min(10)
34
+ .max(5000)
35
+ .optional()
36
+ .describe('Distancia máxima en metros entre el móvil y el punto (10-5000). Si los avisos son por distancia, súbela (p. ej. a 100). OMÍTELA si no cambia.'),
37
+ precision_maxima_m: z
38
+ .number()
39
+ .int()
40
+ .min(1)
41
+ .max(1000)
42
+ .optional()
43
+ .describe('Precisión GPS máxima en metros: con una lectura peor, no se comprueba la distancia (por defecto 50). OMÍTELA salvo que el cliente la pida.'),
44
+ modo_subterraneo: z
45
+ .boolean()
46
+ .optional()
47
+ .describe('true = activar el modo subterráneo (avisa si el móvil tiene cobertura en el punto); false = desactivarlo. OMÍTELO si no cambia.'),
48
+ checkpoint_id: z.string().optional().describe(INTERNO),
49
+ ubicacion_id: z.string().optional().describe(INTERNO),
50
+ reglas_antes: reglasSchema.optional().describe(INTERNO),
51
+ reglas_despues: reglasSchema.optional().describe(INTERNO),
52
+ };
53
+ export const tocaGps = (c) => c.proximidad_gps === true ||
54
+ c.distancia_maxima_m !== undefined ||
55
+ c.precision_maxima_m !== undefined;
56
+ /**
57
+ * Por qué este checkpoint no admite estos cambios desde aquí (null = sí los admite).
58
+ * La misma comprobación al proponer y al confirmar, con el checkpoint del momento:
59
+ * una proximidad GPS escrita en un punto de geocerca o sin posición no se aplicaría.
60
+ */
61
+ export function bloqueoAntifraude(detalle, c) {
62
+ if (detalle.reglasDesconocidas.length > 0)
63
+ return 'reglas_desconocidas';
64
+ if (!tocaGps(c))
65
+ return null;
66
+ if (detalle.metodo === 'geofence')
67
+ return 'geocerca';
68
+ if (detalle.latitud === null || detalle.longitud === null)
69
+ return 'sin_posicion';
70
+ return null;
71
+ }
72
+ /** Sin una regla = desactivada; el modo subterráneo apagado no se guarda (como hace el panel). */
73
+ export function normalizar(r) {
74
+ return {
75
+ ...(r.gpsProximity ? { gpsProximity: r.gpsProximity } : {}),
76
+ ...(r.undergroundMode?.enabled ? { undergroundMode: { enabled: true } } : {}),
77
+ };
78
+ }
79
+ /**
80
+ * Las reglas actuales con los cambios pedidos. El backend REEMPLAZA `fraudRules`
81
+ * entero: lo que no se toca tiene que volver tal cual estaba.
82
+ */
83
+ export function reglasConCambios(actuales, c) {
84
+ const r = normalizar(actuales);
85
+ if (c.proximidad_gps === false) {
86
+ delete r.gpsProximity;
87
+ }
88
+ else if (tocaGps(c)) {
89
+ const antes = r.gpsProximity;
90
+ const precision = c.precision_maxima_m ?? antes?.maxAccuracyMeters;
91
+ r.gpsProximity = {
92
+ maxDistanceMeters: c.distancia_maxima_m ?? antes?.maxDistanceMeters ?? DISTANCIA_POR_DEFECTO_M,
93
+ ...(precision !== undefined ? { maxAccuracyMeters: precision } : {}),
94
+ };
95
+ }
96
+ if (c.modo_subterraneo === true)
97
+ r.undergroundMode = { enabled: true };
98
+ if (c.modo_subterraneo === false)
99
+ delete r.undergroundMode;
100
+ return r;
101
+ }
102
+ export const mismasReglas = (a, b) => JSON.stringify(normalizar(a)) === JSON.stringify(normalizar(b));
103
+ export function textoGps(g, idioma) {
104
+ const t = segunIdioma(idioma, {
105
+ es: { off: 'desactivada', max: 'máx.', precision: 'precisión GPS máx.' },
106
+ en: { off: 'off', max: 'max.', precision: 'GPS accuracy max.' },
107
+ fr: { off: 'désactivée', max: 'max.', precision: 'précision GPS max.' },
108
+ });
109
+ if (!g)
110
+ return t.off;
111
+ return `${t.max} ${g.maxDistanceMeters} m${g.maxAccuracyMeters !== undefined ? ` (${t.precision} ${g.maxAccuracyMeters} m)` : ''}`;
112
+ }
113
+ export function textoSubterraneo(u, idioma) {
114
+ const on = u?.enabled === true;
115
+ return segunIdioma(idioma, {
116
+ es: on ? 'activado' : 'desactivado',
117
+ en: on ? 'on' : 'off',
118
+ fr: on ? 'activé' : 'désactivé',
119
+ });
120
+ }
121
+ //# sourceMappingURL=antifraud-rules.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"antifraud-rules.js","sourceRoot":"","sources":["../../../src/actions/support/antifraud-rules.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,CAAC,EAAE,MAAM,KAAK,CAAC;AACxB,OAAO,EAAE,WAAW,EAA0B,MAAM,0BAA0B,CAAC;AAG/E,OAAO,EAAE,OAAO,EAAE,MAAM,aAAa,CAAC;AAEtC;;;GAGG;AAEH,6EAA6E;AAC7E,MAAM,uBAAuB,GAAG,GAAG,CAAC;AAEpC,MAAM,YAAY,GAAG,CAAC,CAAC,MAAM,CAAC;IAC5B,YAAY,EAAE,CAAC;SACZ,MAAM,CAAC,EAAE,iBAAiB,EAAE,CAAC,CAAC,MAAM,EAAE,EAAE,iBAAiB,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,QAAQ,EAAE,EAAE,CAAC;SACnF,QAAQ,EAAE;IACb,eAAe,EAAE,CAAC,CAAC,MAAM,CAAC,EAAE,OAAO,EAAE,CAAC,CAAC,OAAO,EAAE,EAAE,CAAC,CAAC,QAAQ,EAAE;CAC/D,CAAC,CAAC;AAEH,wHAAwH;AACxH,MAAM,CAAC,MAAM,eAAe,GAAG;IAC7B,UAAU,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,IAAI,EAAE,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,QAAQ,CAAC,uBAAuB,CAAC;IACtE,SAAS,EAAE,CAAC;SACT,MAAM,EAAE;SACR,IAAI,EAAE;SACN,GAAG,CAAC,CAAC,CAAC;SACN,QAAQ,EAAE;SACV,QAAQ,CAAC,mFAAmF,CAAC;IAChG,cAAc,EAAE,CAAC;SACd,OAAO,EAAE;SACT,QAAQ,EAAE;SACV,QAAQ,CACP,wHAAwH,CACzH;IACH,wDAAwD;IACxD,kBAAkB,EAAE,CAAC;SAClB,MAAM,EAAE;SACR,GAAG,EAAE;SACL,GAAG,CAAC,EAAE,CAAC;SACP,GAAG,CAAC,IAAI,CAAC;SACT,QAAQ,EAAE;SACV,QAAQ,CACP,+IAA+I,CAChJ;IACH,kBAAkB,EAAE,CAAC;SAClB,MAAM,EAAE;SACR,GAAG,EAAE;SACL,GAAG,CAAC,CAAC,CAAC;SACN,GAAG,CAAC,IAAI,CAAC;SACT,QAAQ,EAAE;SACV,QAAQ,CACP,4IAA4I,CAC7I;IACH,gBAAgB,EAAE,CAAC;SAChB,OAAO,EAAE;SACT,QAAQ,EAAE;SACV,QAAQ,CACP,iIAAiI,CAClI;IACH,aAAa,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,QAAQ,EAAE,CAAC,QAAQ,CAAC,OAAO,CAAC;IACtD,YAAY,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,QAAQ,EAAE,CAAC,QAAQ,CAAC,OAAO,CAAC;IACrD,YAAY,EAAE,YAAY,CAAC,QAAQ,EAAE,CAAC,QAAQ,CAAC,OAAO,CAAC;IACvD,cAAc,EAAE,YAAY,CAAC,QAAQ,EAAE,CAAC,QAAQ,CAAC,OAAO,CAAC;CAC1D,CAAC;AAQF,MAAM,CAAC,MAAM,OAAO,GAAG,CAAC,CAAoB,EAAW,EAAE,CACvD,CAAC,CAAC,cAAc,KAAK,IAAI;IACzB,CAAC,CAAC,kBAAkB,KAAK,SAAS;IAClC,CAAC,CAAC,kBAAkB,KAAK,SAAS,CAAC;AAErC;;;;GAIG;AACH,MAAM,UAAU,iBAAiB,CAC/B,OAAyB,EACzB,CAAoB;IAEpB,IAAI,OAAO,CAAC,kBAAkB,CAAC,MAAM,GAAG,CAAC;QAAE,OAAO,qBAAqB,CAAC;IACxE,IAAI,CAAC,OAAO,CAAC,CAAC,CAAC;QAAE,OAAO,IAAI,CAAC;IAC7B,IAAI,OAAO,CAAC,MAAM,KAAK,UAAU;QAAE,OAAO,UAAU,CAAC;IACrD,IAAI,OAAO,CAAC,OAAO,KAAK,IAAI,IAAI,OAAO,CAAC,QAAQ,KAAK,IAAI;QAAE,OAAO,cAAc,CAAC;IACjF,OAAO,IAAI,CAAC;AACd,CAAC;AAED,kGAAkG;AAClG,MAAM,UAAU,UAAU,CAAC,CAAuB;IAChD,OAAO;QACL,GAAG,CAAC,CAAC,CAAC,YAAY,CAAC,CAAC,CAAC,EAAE,YAAY,EAAE,CAAC,CAAC,YAAY,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC;QAC3D,GAAG,CAAC,CAAC,CAAC,eAAe,EAAE,OAAO,CAAC,CAAC,CAAC,EAAE,eAAe,EAAE,EAAE,OAAO,EAAE,IAAI,EAAE,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC;KAC9E,CAAC;AACJ,CAAC;AAED;;;GAGG;AACH,MAAM,UAAU,gBAAgB,CAC9B,QAA8B,EAC9B,CAAoB;IAEpB,MAAM,CAAC,GAAG,UAAU,CAAC,QAAQ,CAAC,CAAC;IAC/B,IAAI,CAAC,CAAC,cAAc,KAAK,KAAK,EAAE,CAAC;QAC/B,OAAO,CAAC,CAAC,YAAY,CAAC;IACxB,CAAC;SAAM,IAAI,OAAO,CAAC,CAAC,CAAC,EAAE,CAAC;QACtB,MAAM,KAAK,GAAG,CAAC,CAAC,YAAY,CAAC;QAC7B,MAAM,SAAS,GAAG,CAAC,CAAC,kBAAkB,IAAI,KAAK,EAAE,iBAAiB,CAAC;QACnE,CAAC,CAAC,YAAY,GAAG;YACf,iBAAiB,EACf,CAAC,CAAC,kBAAkB,IAAI,KAAK,EAAE,iBAAiB,IAAI,uBAAuB;YAC7E,GAAG,CAAC,SAAS,KAAK,SAAS,CAAC,CAAC,CAAC,EAAE,iBAAiB,EAAE,SAAS,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC;SACrE,CAAC;IACJ,CAAC;IACD,IAAI,CAAC,CAAC,gBAAgB,KAAK,IAAI;QAAE,CAAC,CAAC,eAAe,GAAG,EAAE,OAAO,EAAE,IAAI,EAAE,CAAC;IACvE,IAAI,CAAC,CAAC,gBAAgB,KAAK,KAAK;QAAE,OAAO,CAAC,CAAC,eAAe,CAAC;IAC3D,OAAO,CAAC,CAAC;AACX,CAAC;AAED,MAAM,CAAC,MAAM,YAAY,GAAG,CAAC,CAAuB,EAAE,CAAuB,EAAW,EAAE,CACxF,IAAI,CAAC,SAAS,CAAC,UAAU,CAAC,CAAC,CAAC,CAAC,KAAK,IAAI,CAAC,SAAS,CAAC,UAAU,CAAC,CAAC,CAAC,CAAC,CAAC;AAElE,MAAM,UAAU,QAAQ,CACtB,CAAuC,EACvC,MAAyB;IAEzB,MAAM,CAAC,GAAG,WAAW,CAAC,MAAM,EAAE;QAC5B,EAAE,EAAE,EAAE,GAAG,EAAE,aAAa,EAAE,GAAG,EAAE,MAAM,EAAE,SAAS,EAAE,oBAAoB,EAAE;QACxE,EAAE,EAAE,EAAE,GAAG,EAAE,KAAK,EAAE,GAAG,EAAE,MAAM,EAAE,SAAS,EAAE,mBAAmB,EAAE;QAC/D,EAAE,EAAE,EAAE,GAAG,EAAE,YAAY,EAAE,GAAG,EAAE,MAAM,EAAE,SAAS,EAAE,oBAAoB,EAAE;KACxE,CAAC,CAAC;IACH,IAAI,CAAC,CAAC;QAAE,OAAO,CAAC,CAAC,GAAG,CAAC;IACrB,OAAO,GAAG,CAAC,CAAC,GAAG,IAAI,CAAC,CAAC,iBAAiB,KAAK,CAAC,CAAC,iBAAiB,KAAK,SAAS,CAAC,CAAC,CAAC,KAAK,CAAC,CAAC,SAAS,IAAI,CAAC,CAAC,iBAAiB,KAAK,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC;AACrI,CAAC;AAED,MAAM,UAAU,gBAAgB,CAC9B,CAA0C,EAC1C,MAAyB;IAEzB,MAAM,EAAE,GAAG,CAAC,EAAE,OAAO,KAAK,IAAI,CAAC;IAC/B,OAAO,WAAW,CAAC,MAAM,EAAE;QACzB,EAAE,EAAE,EAAE,CAAC,CAAC,CAAC,UAAU,CAAC,CAAC,CAAC,aAAa;QACnC,EAAE,EAAE,EAAE,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,KAAK;QACrB,EAAE,EAAE,EAAE,CAAC,CAAC,CAAC,QAAQ,CAAC,CAAC,CAAC,WAAW;KAChC,CAAC,CAAC;AACL,CAAC"}
@@ -0,0 +1,31 @@
1
+ import type { LocationRef } from '../../gateway/index.js';
2
+ /**
3
+ * La ubicación dicha por el usuario, entre las de la organización (la comparten
4
+ * las acciones que crean checkpoints y rutas y las de ubicaciones e invitar). Sin
5
+ * decirla, la única que tenga si `unicaPorDefecto`.
6
+ *
7
+ * Dos ubicaciones con el mismo nombre solo se distinguen por su dirección y su
8
+ * número (el que acepta `resolveByName` con `byIndex`): sin ellos, el cliente no
9
+ * podía elegir y la conversación se quedaba en bucle.
10
+ */
11
+ export declare function elegirUbicacion(ubicaciones: readonly LocationRef[], nombre: string | undefined, opts: {
12
+ /** Error con la organización sin ubicaciones. */
13
+ sinUbicaciones: string;
14
+ /** Error cuando no la dice y hay varias, con las opciones ya formateadas. */
15
+ preguntar: (opciones: string) => string;
16
+ unicaPorDefecto?: boolean;
17
+ }): {
18
+ item: LocationRef;
19
+ } | {
20
+ error: string;
21
+ };
22
+ /**
23
+ * `elegirUbicacion` con los textos de ubicaciones e invitar. Sin decirla, la
24
+ * única solo si `unicaPorDefecto` (nunca para borrar ni acotar una invitación).
25
+ */
26
+ export declare function ubicacionPedida(ubicaciones: readonly LocationRef[], nombre: string | undefined, para: string, unicaPorDefecto?: boolean): {
27
+ item: LocationRef;
28
+ } | {
29
+ error: string;
30
+ };
31
+ //# sourceMappingURL=elegir-ubicacion.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"elegir-ubicacion.d.ts","sourceRoot":"","sources":["../../../src/actions/support/elegir-ubicacion.ts"],"names":[],"mappings":"AACA,OAAO,KAAK,EAAE,WAAW,EAAE,MAAM,wBAAwB,CAAC;AAI1D;;;;;;;;GAQG;AACH,wBAAgB,eAAe,CAC7B,WAAW,EAAE,SAAS,WAAW,EAAE,EACnC,MAAM,EAAE,MAAM,GAAG,SAAS,EAC1B,IAAI,EAAE;IACJ,iDAAiD;IACjD,cAAc,EAAE,MAAM,CAAC;IACvB,6EAA6E;IAC7E,SAAS,EAAE,CAAC,QAAQ,EAAE,MAAM,KAAK,MAAM,CAAC;IACxC,eAAe,CAAC,EAAE,OAAO,CAAC;CAC3B,GACA;IAAE,IAAI,EAAE,WAAW,CAAA;CAAE,GAAG;IAAE,KAAK,EAAE,MAAM,CAAA;CAAE,CAoB3C;AAED;;;GAGG;AACH,wBAAgB,eAAe,CAC7B,WAAW,EAAE,SAAS,WAAW,EAAE,EACnC,MAAM,EAAE,MAAM,GAAG,SAAS,EAC1B,IAAI,EAAE,MAAM,EACZ,eAAe,UAAO,GACrB;IAAE,IAAI,EAAE,WAAW,CAAA;CAAE,GAAG;IAAE,KAAK,EAAE,MAAM,CAAA;CAAE,CAM3C"}
@@ -0,0 +1,42 @@
1
+ import { normalizeName, resolveByName } from '../../domain/resolve-by-name.js';
2
+ const MAX_OPCIONES = 15;
3
+ /**
4
+ * La ubicación dicha por el usuario, entre las de la organización (la comparten
5
+ * las acciones que crean checkpoints y rutas y las de ubicaciones e invitar). Sin
6
+ * decirla, la única que tenga si `unicaPorDefecto`.
7
+ *
8
+ * Dos ubicaciones con el mismo nombre solo se distinguen por su dirección y su
9
+ * número (el que acepta `resolveByName` con `byIndex`): sin ellos, el cliente no
10
+ * podía elegir y la conversación se quedaba en bucle.
11
+ */
12
+ export function elegirUbicacion(ubicaciones, nombre, opts) {
13
+ if (ubicaciones.length === 0)
14
+ return { error: opts.sinUbicaciones };
15
+ const repetidos = new Set(ubicaciones.map((l) => normalizeName(l.name))).size < ubicaciones.length;
16
+ const opciones = ubicaciones
17
+ .slice(0, MAX_OPCIONES)
18
+ .map((l, i) => repetidos ? `${i + 1}. «${l.name}»${l.address ? ` (${l.address})` : ''}` : `«${l.name}»`)
19
+ .join(', ') + (repetidos ? ' (si elige una repetida, pasa su número en `ubicacion`)' : '');
20
+ if (nombre?.trim()) {
21
+ const r = resolveByName(nombre, ubicaciones, (l) => l.name, { byIndex: repetidos });
22
+ if (r.kind === 'found')
23
+ return { item: r.item };
24
+ const motivo = r.kind === 'ambiguous' ? 'Hay varias ubicaciones que casan con' : 'No encuentro la ubicación';
25
+ return { error: `${motivo} «${nombre}». Pregunta al usuario cuál: ${opciones}.` };
26
+ }
27
+ if ((opts.unicaPorDefecto ?? true) && ubicaciones.length === 1)
28
+ return { item: ubicaciones[0] };
29
+ return { error: opts.preguntar(opciones) };
30
+ }
31
+ /**
32
+ * `elegirUbicacion` con los textos de ubicaciones e invitar. Sin decirla, la
33
+ * única solo si `unicaPorDefecto` (nunca para borrar ni acotar una invitación).
34
+ */
35
+ export function ubicacionPedida(ubicaciones, nombre, para, unicaPorDefecto = true) {
36
+ return elegirUbicacion(ubicaciones, nombre, {
37
+ sinUbicaciones: 'La organización no tiene ubicaciones.',
38
+ preguntar: (opciones) => `Pregunta al usuario qué ubicación quiere ${para}: ${opciones}.`,
39
+ unicaPorDefecto,
40
+ });
41
+ }
42
+ //# sourceMappingURL=elegir-ubicacion.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"elegir-ubicacion.js","sourceRoot":"","sources":["../../../src/actions/support/elegir-ubicacion.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,aAAa,EAAE,aAAa,EAAE,MAAM,iCAAiC,CAAC;AAG/E,MAAM,YAAY,GAAG,EAAE,CAAC;AAExB;;;;;;;;GAQG;AACH,MAAM,UAAU,eAAe,CAC7B,WAAmC,EACnC,MAA0B,EAC1B,IAMC;IAED,IAAI,WAAW,CAAC,MAAM,KAAK,CAAC;QAAE,OAAO,EAAE,KAAK,EAAE,IAAI,CAAC,cAAc,EAAE,CAAC;IACpE,MAAM,SAAS,GACb,IAAI,GAAG,CAAC,WAAW,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,aAAa,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC,IAAI,GAAG,WAAW,CAAC,MAAM,CAAC;IACnF,MAAM,QAAQ,GACZ,WAAW;SACR,KAAK,CAAC,CAAC,EAAE,YAAY,CAAC;SACtB,GAAG,CAAC,CAAC,CAAC,EAAE,CAAC,EAAE,EAAE,CACZ,SAAS,CAAC,CAAC,CAAC,GAAG,CAAC,GAAG,CAAC,MAAM,CAAC,CAAC,IAAI,IAAI,CAAC,CAAC,OAAO,CAAC,CAAC,CAAC,KAAK,CAAC,CAAC,OAAO,GAAG,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC,IAAI,GAAG,CACzF;SACA,IAAI,CAAC,IAAI,CAAC,GAAG,CAAC,SAAS,CAAC,CAAC,CAAC,yDAAyD,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC;IAC/F,IAAI,MAAM,EAAE,IAAI,EAAE,EAAE,CAAC;QACnB,MAAM,CAAC,GAAG,aAAa,CAAC,MAAM,EAAE,WAAW,EAAE,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,IAAI,EAAE,EAAE,OAAO,EAAE,SAAS,EAAE,CAAC,CAAC;QACpF,IAAI,CAAC,CAAC,IAAI,KAAK,OAAO;YAAE,OAAO,EAAE,IAAI,EAAE,CAAC,CAAC,IAAI,EAAE,CAAC;QAChD,MAAM,MAAM,GACV,CAAC,CAAC,IAAI,KAAK,WAAW,CAAC,CAAC,CAAC,sCAAsC,CAAC,CAAC,CAAC,2BAA2B,CAAC;QAChG,OAAO,EAAE,KAAK,EAAE,GAAG,MAAM,KAAK,MAAM,gCAAgC,QAAQ,GAAG,EAAE,CAAC;IACpF,CAAC;IACD,IAAI,CAAC,IAAI,CAAC,eAAe,IAAI,IAAI,CAAC,IAAI,WAAW,CAAC,MAAM,KAAK,CAAC;QAAE,OAAO,EAAE,IAAI,EAAE,WAAW,CAAC,CAAC,CAAC,EAAE,CAAC;IAChG,OAAO,EAAE,KAAK,EAAE,IAAI,CAAC,SAAS,CAAC,QAAQ,CAAC,EAAE,CAAC;AAC7C,CAAC;AAED;;;GAGG;AACH,MAAM,UAAU,eAAe,CAC7B,WAAmC,EACnC,MAA0B,EAC1B,IAAY,EACZ,eAAe,GAAG,IAAI;IAEtB,OAAO,eAAe,CAAC,WAAW,EAAE,MAAM,EAAE;QAC1C,cAAc,EAAE,uCAAuC;QACvD,SAAS,EAAE,CAAC,QAAQ,EAAE,EAAE,CAAC,4CAA4C,IAAI,KAAK,QAAQ,GAAG;QACzF,eAAe;KAChB,CAAC,CAAC;AACL,CAAC"}
@@ -0,0 +1,26 @@
1
+ import type { BotActionName } from '../names.js';
2
+ import type { FixedTextLanguage } from '../../domain/language.js';
3
+ import type { PuestaEnMarcha } from '../../domain/puesta-en-marcha.js';
4
+ /** Acciones de la puesta en marcha tras las que el motor propone el siguiente paso. */
5
+ export declare const ONBOARDING_ACTIONS: readonly ["create_checkpoint", "create_patroller", "create_route"];
6
+ export type OnboardingAction = (typeof ONBOARDING_ACTIONS)[number];
7
+ export declare function isOnboardingAction(nombre: BotActionName): nombre is OnboardingAction;
8
+ /** Un mensaje con el siguiente paso y sus botones de respuesta rápida. */
9
+ export interface NextStep {
10
+ texto: string;
11
+ opciones: {
12
+ id: string;
13
+ name: string;
14
+ }[];
15
+ }
16
+ /**
17
+ * El siguiente paso de la puesta en marcha (checkpoints → vigilante → app y
18
+ * escaneo de prueba → ruta), decidido con el estado REAL de la organización.
19
+ * Criterio de Víctor: antes que la ruta, la app instalada y un primer escaneo
20
+ * real que cierre el ciclo; hasta entonces no se ofrece crear rutas.
21
+ * `after` es la acción recién hecha; sin ella (nudge) solo hay paso si la
22
+ * cuenta está a medio arrancar: sin checkpoints, sin vigilantes o sin ningún
23
+ * escaneo. Null = no hay nada que proponer.
24
+ */
25
+ export declare function nextOnboardingStep(s: PuestaEnMarcha, after: OnboardingAction | null, idioma: FixedTextLanguage): NextStep | null;
26
+ //# sourceMappingURL=next-step.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"next-step.d.ts","sourceRoot":"","sources":["../../../src/actions/support/next-step.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,aAAa,EAAE,MAAM,aAAa,CAAC;AACjD,OAAO,KAAK,EAAE,iBAAiB,EAAE,MAAM,0BAA0B,CAAC;AAClE,OAAO,KAAK,EAAE,cAAc,EAAE,MAAM,kCAAkC,CAAC;AAGvE,uFAAuF;AACvF,eAAO,MAAM,kBAAkB,oEAIc,CAAC;AAC9C,MAAM,MAAM,gBAAgB,GAAG,CAAC,OAAO,kBAAkB,CAAC,CAAC,MAAM,CAAC,CAAC;AAEnE,wBAAgB,kBAAkB,CAAC,MAAM,EAAE,aAAa,GAAG,MAAM,IAAI,gBAAgB,CAEpF;AAED,0EAA0E;AAC1E,MAAM,WAAW,QAAQ;IACvB,KAAK,EAAE,MAAM,CAAC;IACd,QAAQ,EAAE;QAAE,EAAE,EAAE,MAAM,CAAC;QAAC,IAAI,EAAE,MAAM,CAAA;KAAE,EAAE,CAAC;CAC1C;AAED;;;;;;;;GAQG;AACH,wBAAgB,kBAAkB,CAChC,CAAC,EAAE,cAAc,EACjB,KAAK,EAAE,gBAAgB,GAAG,IAAI,EAC9B,MAAM,EAAE,iBAAiB,GACxB,QAAQ,GAAG,IAAI,CAgCjB"}
@@ -0,0 +1,55 @@
1
+ import { NEXT_STEP_TEXTS } from './texts.js';
2
+ /** Acciones de la puesta en marcha tras las que el motor propone el siguiente paso. */
3
+ export const ONBOARDING_ACTIONS = [
4
+ 'create_checkpoint',
5
+ 'create_patroller',
6
+ 'create_route',
7
+ ];
8
+ export function isOnboardingAction(nombre) {
9
+ return ONBOARDING_ACTIONS.includes(nombre);
10
+ }
11
+ /**
12
+ * El siguiente paso de la puesta en marcha (checkpoints → vigilante → app y
13
+ * escaneo de prueba → ruta), decidido con el estado REAL de la organización.
14
+ * Criterio de Víctor: antes que la ruta, la app instalada y un primer escaneo
15
+ * real que cierre el ciclo; hasta entonces no se ofrece crear rutas.
16
+ * `after` es la acción recién hecha; sin ella (nudge) solo hay paso si la
17
+ * cuenta está a medio arrancar: sin checkpoints, sin vigilantes o sin ningún
18
+ * escaneo. Null = no hay nada que proponer.
19
+ */
20
+ export function nextOnboardingStep(s, after, idioma) {
21
+ const t = NEXT_STEP_TEXTS[idioma];
22
+ const step = (texto, botones) => ({
23
+ texto,
24
+ opciones: botones.map((b) => ({ id: `paso:${b}`, name: t.botones[b] })),
25
+ });
26
+ const escaneado = s.hayEscaneos || s.vigilantesConAlgunEscaneo > 0;
27
+ if (after === 'create_patroller') {
28
+ if (s.checkpointsCreados === 0)
29
+ return step(t.trasVigilanteSinCheckpoints, ['checkpoint', 'otroVigilante']);
30
+ return step(t.trasVigilante, [
31
+ 'yaEscaneado',
32
+ 'otroVigilante',
33
+ ...(escaneado && s.rutasCreadas === 0 ? ['ruta'] : []),
34
+ ]);
35
+ }
36
+ if (after === null && s.checkpointsCreados === 0)
37
+ return step(t.faltaCheckpoint, ['checkpoint']);
38
+ if (s.vigilantes === 0)
39
+ return step(t.faltaVigilante, ['vigilante', 'otroCheckpoint']);
40
+ // Sin un primer escaneo, lo único que se empuja es instalar la app y escanear (ni rutas ni más pasos).
41
+ if (!escaneado) {
42
+ if (after === 'create_checkpoint')
43
+ return step(t.trasCheckpointSinEscaneo, ['yaEscaneado', 'otroCheckpoint']);
44
+ return step(t.faltaEscaneo, ['probarEscaneo', 'yaEscaneado']);
45
+ }
46
+ if (after === 'create_route')
47
+ return step(t.trasRuta, ['probarEscaneo', 'rondas']);
48
+ if (after === 'create_checkpoint') {
49
+ return s.rutasCreadas === 0
50
+ ? step(t.trasCheckpointSinRutas, ['otroCheckpoint', 'ruta'])
51
+ : step(t.trasCheckpointConRutas, ['otroCheckpoint', 'anadirARuta']);
52
+ }
53
+ return null;
54
+ }
55
+ //# sourceMappingURL=next-step.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"next-step.js","sourceRoot":"","sources":["../../../src/actions/support/next-step.ts"],"names":[],"mappings":"AAGA,OAAO,EAAE,eAAe,EAAuB,MAAM,YAAY,CAAC;AAElE,uFAAuF;AACvF,MAAM,CAAC,MAAM,kBAAkB,GAAG;IAChC,mBAAmB;IACnB,kBAAkB;IAClB,cAAc;CAC6B,CAAC;AAG9C,MAAM,UAAU,kBAAkB,CAAC,MAAqB;IACtD,OAAQ,kBAA+C,CAAC,QAAQ,CAAC,MAAM,CAAC,CAAC;AAC3E,CAAC;AAQD;;;;;;;;GAQG;AACH,MAAM,UAAU,kBAAkB,CAChC,CAAiB,EACjB,KAA8B,EAC9B,MAAyB;IAEzB,MAAM,CAAC,GAAG,eAAe,CAAC,MAAM,CAAC,CAAC;IAClC,MAAM,IAAI,GAAG,CAAC,KAAa,EAAE,OAAyB,EAAY,EAAE,CAAC,CAAC;QACpE,KAAK;QACL,QAAQ,EAAE,OAAO,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,EAAE,EAAE,EAAE,QAAQ,CAAC,EAAE,EAAE,IAAI,EAAE,CAAC,CAAC,OAAO,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC;KACxE,CAAC,CAAC;IACH,MAAM,SAAS,GAAG,CAAC,CAAC,WAAW,IAAI,CAAC,CAAC,yBAAyB,GAAG,CAAC,CAAC;IAEnE,IAAI,KAAK,KAAK,kBAAkB,EAAE,CAAC;QACjC,IAAI,CAAC,CAAC,kBAAkB,KAAK,CAAC;YAC5B,OAAO,IAAI,CAAC,CAAC,CAAC,2BAA2B,EAAE,CAAC,YAAY,EAAE,eAAe,CAAC,CAAC,CAAC;QAC9E,OAAO,IAAI,CAAC,CAAC,CAAC,aAAa,EAAE;YAC3B,aAAa;YACb,eAAe;YACf,GAAG,CAAC,SAAS,IAAI,CAAC,CAAC,YAAY,KAAK,CAAC,CAAC,CAAC,CAAE,CAAC,MAAM,CAAW,CAAC,CAAC,CAAC,EAAE,CAAC;SAClE,CAAC,CAAC;IACL,CAAC;IACD,IAAI,KAAK,KAAK,IAAI,IAAI,CAAC,CAAC,kBAAkB,KAAK,CAAC;QAAE,OAAO,IAAI,CAAC,CAAC,CAAC,eAAe,EAAE,CAAC,YAAY,CAAC,CAAC,CAAC;IACjG,IAAI,CAAC,CAAC,UAAU,KAAK,CAAC;QAAE,OAAO,IAAI,CAAC,CAAC,CAAC,cAAc,EAAE,CAAC,WAAW,EAAE,gBAAgB,CAAC,CAAC,CAAC;IACvF,uGAAuG;IACvG,IAAI,CAAC,SAAS,EAAE,CAAC;QACf,IAAI,KAAK,KAAK,mBAAmB;YAC/B,OAAO,IAAI,CAAC,CAAC,CAAC,wBAAwB,EAAE,CAAC,aAAa,EAAE,gBAAgB,CAAC,CAAC,CAAC;QAC7E,OAAO,IAAI,CAAC,CAAC,CAAC,YAAY,EAAE,CAAC,eAAe,EAAE,aAAa,CAAC,CAAC,CAAC;IAChE,CAAC;IACD,IAAI,KAAK,KAAK,cAAc;QAAE,OAAO,IAAI,CAAC,CAAC,CAAC,QAAQ,EAAE,CAAC,eAAe,EAAE,QAAQ,CAAC,CAAC,CAAC;IACnF,IAAI,KAAK,KAAK,mBAAmB,EAAE,CAAC;QAClC,OAAO,CAAC,CAAC,YAAY,KAAK,CAAC;YACzB,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,sBAAsB,EAAE,CAAC,gBAAgB,EAAE,MAAM,CAAC,CAAC;YAC5D,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,sBAAsB,EAAE,CAAC,gBAAgB,EAAE,aAAa,CAAC,CAAC,CAAC;IACxE,CAAC;IACD,OAAO,IAAI,CAAC;AACd,CAAC"}
@@ -0,0 +1,25 @@
1
+ import { type EfectoDeQuitar, type RutaConCheckpoints } from '../../domain/route-checkpoints.js';
2
+ import type { ArchivedCheckpointRoute, ListaTruncable, PatrolTechGateway, RouteDetails, RouteRef } from '../../gateway/index.js';
3
+ import type { Logger } from '../../ports/Logger.js';
4
+ import type { ActionPrepareContext } from '../types.js';
5
+ /** Las rutas de la organización (una sola lectura por turno). */
6
+ export declare function leerRutas(gateway: PatrolTechGateway, ctx: ActionPrepareContext): Promise<ListaTruncable<RouteRef>>;
7
+ /** El detalle de una ruta (una sola lectura por turno). */
8
+ export declare function leerRuta(gateway: PatrolTechGateway, ctx: ActionPrepareContext, rutaId: string): Promise<RouteDetails | null>;
9
+ /** La ruta tal como la dejan las propuestas anteriores del lote. */
10
+ export declare function rutaEnElLote(ctx: ActionPrepareContext, detalle: RouteDetails): RutaConCheckpoints;
11
+ /** Quitar `checkpointId` de la ruta, después de lo que ya quita o añade el lote. */
12
+ export declare function efectoEnElLote(ctx: ActionPrepareContext, detalle: RouteDetails, checkpointId: string): EfectoDeQuitar;
13
+ /**
14
+ * Rutas en las que está el checkpoint (tras los cambios previos del lote) y si
15
+ * se quedarían vacías y se desactivarían sin él, para avisar ANTES de confirmar.
16
+ * Mismo vocabulario que devuelve el backend al archivar (`ArchivedCheckpointRoute`).
17
+ * Solo se leen las rutas de su ubicación (una ruta solo lleva checkpoints de la
18
+ * suya) y las de ubicación desconocida. Undefined si no se puede saber con
19
+ * certeza (lista truncada, una ruta sin detalle o fallo al leer): el resumen usa entonces el aviso genérico.
20
+ */
21
+ export declare function rutasDelCheckpoint(gateway: PatrolTechGateway, logger: Logger, ctx: ActionPrepareContext, checkpoint: {
22
+ id: string;
23
+ locationId: string;
24
+ }): Promise<ArchivedCheckpointRoute[] | undefined>;
25
+ //# sourceMappingURL=route-impact.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"route-impact.d.ts","sourceRoot":"","sources":["../../../src/actions/support/route-impact.ts"],"names":[],"mappings":"AAAA,OAAO,EAGL,KAAK,cAAc,EACnB,KAAK,kBAAkB,EACxB,MAAM,mCAAmC,CAAC;AAC3C,OAAO,KAAK,EACV,uBAAuB,EACvB,cAAc,EACd,iBAAiB,EACjB,YAAY,EACZ,QAAQ,EACT,MAAM,wBAAwB,CAAC;AAChC,OAAO,KAAK,EAAE,MAAM,EAAE,MAAM,uBAAuB,CAAC;AACpD,OAAO,KAAK,EAAE,oBAAoB,EAAE,MAAM,aAAa,CAAC;AAaxD,iEAAiE;AACjE,wBAAgB,SAAS,CACvB,OAAO,EAAE,iBAAiB,EAC1B,GAAG,EAAE,oBAAoB,GACxB,OAAO,CAAC,cAAc,CAAC,QAAQ,CAAC,CAAC,CAGnC;AAED,2DAA2D;AAC3D,wBAAgB,QAAQ,CACtB,OAAO,EAAE,iBAAiB,EAC1B,GAAG,EAAE,oBAAoB,EACzB,MAAM,EAAE,MAAM,GACb,OAAO,CAAC,YAAY,GAAG,IAAI,CAAC,CAG9B;AAED,oEAAoE;AACpE,wBAAgB,YAAY,CAAC,GAAG,EAAE,oBAAoB,EAAE,OAAO,EAAE,YAAY,GAAG,kBAAkB,CAEjG;AAED,oFAAoF;AACpF,wBAAgB,cAAc,CAC5B,GAAG,EAAE,oBAAoB,EACzB,OAAO,EAAE,YAAY,EACrB,YAAY,EAAE,MAAM,GACnB,cAAc,CAEhB;AAoBD;;;;;;;GAOG;AACH,wBAAsB,kBAAkB,CACtC,OAAO,EAAE,iBAAiB,EAC1B,MAAM,EAAE,MAAM,EACd,GAAG,EAAE,oBAAoB,EACzB,UAAU,EAAE;IAAE,EAAE,EAAE,MAAM,CAAC;IAAC,UAAU,EAAE,MAAM,CAAA;CAAE,GAC7C,OAAO,CAAC,uBAAuB,EAAE,GAAG,SAAS,CAAC,CAwBhD"}
@@ -0,0 +1,76 @@
1
+ import { aplicarCambios, efectoDeQuitar, } from '../../domain/route-checkpoints.js';
2
+ import { turnoDe } from './turno.js';
3
+ /**
4
+ * Qué les pasa a las rutas al quitarles checkpoints (quitar de una ruta,
5
+ * archivar), teniendo en cuenta lo que ya proponen las anteriores del lote. Lo
6
+ * usan las acciones de rutas y las de checkpoints; vive aquí para que ninguna
7
+ * de las dos tenga que importar a la otra.
8
+ */
9
+ /** Lecturas de detalle de rutas a la vez, como mucho: archivar no dispara una ráfaga contra el backend. */
10
+ const LECTURAS_A_LA_VEZ = 5;
11
+ /** Las rutas de la organización (una sola lectura por turno). */
12
+ export function leerRutas(gateway, ctx) {
13
+ const lectura = () => gateway.listRoutes(ctx.org.orgId, ctx.token);
14
+ return turnoDe(ctx).leer(`rutas:${ctx.org.orgId}`, lectura);
15
+ }
16
+ /** El detalle de una ruta (una sola lectura por turno). */
17
+ export function leerRuta(gateway, ctx, rutaId) {
18
+ const lectura = () => gateway.getRouteDetails(rutaId, ctx.token);
19
+ return turnoDe(ctx).leer(`ruta:${rutaId}`, lectura);
20
+ }
21
+ /** La ruta tal como la dejan las propuestas anteriores del lote. */
22
+ export function rutaEnElLote(ctx, detalle) {
23
+ return aplicarCambios(detalle, turnoDe(ctx).cambiosEnRuta(detalle.id));
24
+ }
25
+ /** Quitar `checkpointId` de la ruta, después de lo que ya quita o añade el lote. */
26
+ export function efectoEnElLote(ctx, detalle, checkpointId) {
27
+ return efectoDeQuitar(rutaEnElLote(ctx, detalle), new Set([checkpointId]));
28
+ }
29
+ /** `fn` sobre cada elemento, con `limite` en vuelo como mucho; el resultado, en el orden de `items`. */
30
+ async function enParalelo(items, limite, fn) {
31
+ const out = new Array(items.length);
32
+ let siguiente = 0;
33
+ const trabajador = async () => {
34
+ while (siguiente < items.length) {
35
+ const i = siguiente++;
36
+ out[i] = await fn(items[i]);
37
+ }
38
+ };
39
+ await Promise.all(Array.from({ length: Math.min(limite, items.length) }, trabajador));
40
+ return out;
41
+ }
42
+ /**
43
+ * Rutas en las que está el checkpoint (tras los cambios previos del lote) y si
44
+ * se quedarían vacías y se desactivarían sin él, para avisar ANTES de confirmar.
45
+ * Mismo vocabulario que devuelve el backend al archivar (`ArchivedCheckpointRoute`).
46
+ * Solo se leen las rutas de su ubicación (una ruta solo lleva checkpoints de la
47
+ * suya) y las de ubicación desconocida. Undefined si no se puede saber con
48
+ * certeza (lista truncada, una ruta sin detalle o fallo al leer): el resumen usa entonces el aviso genérico.
49
+ */
50
+ export async function rutasDelCheckpoint(gateway, logger, ctx, checkpoint) {
51
+ try {
52
+ const { items, truncado } = await leerRutas(gateway, ctx);
53
+ if (truncado)
54
+ return undefined;
55
+ const suyas = items.filter((r) => !r.locationId || r.locationId === checkpoint.locationId);
56
+ const detalles = await enParalelo(suyas, LECTURAS_A_LA_VEZ, (r) => leerRuta(gateway, ctx, r.id));
57
+ // Una ruta de la lista que no se puede leer puede llevar el checkpoint: no se sabe, aviso genérico.
58
+ if (detalles.some((d) => d === null))
59
+ return undefined;
60
+ return detalles.flatMap((d) => {
61
+ if (!d || !rutaEnElLote(ctx, d).checkpoints.some((c) => c.checkpointId === checkpoint.id)) {
62
+ return [];
63
+ }
64
+ const efecto = efectoEnElLote(ctx, d, checkpoint.id);
65
+ return [{ id: d.id, name: d.name, leftEmpty: efecto.vacia, deactivated: efecto.seDesactiva }];
66
+ });
67
+ }
68
+ catch (err) {
69
+ logger.warn('bot_action.archive_checkpoint_routes_unknown', {
70
+ checkpointId: checkpoint.id,
71
+ err,
72
+ });
73
+ return undefined;
74
+ }
75
+ }
76
+ //# sourceMappingURL=route-impact.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"route-impact.js","sourceRoot":"","sources":["../../../src/actions/support/route-impact.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,27 @@
1
+ import type { CheckpointRef, PatrolTechGateway, RouteDetails, RouteRef } from '../../gateway/index.js';
2
+ import type { ActionPrepareContext } from '../types.js';
3
+ /**
4
+ * Un checkpoint de la ubicación de una ruta, por nombre. Solo se ofrecen los no
5
+ * archivados (`listCheckpoints`): uno archivado no admite escaneos y el backend
6
+ * lo rechaza en una ruta (400 `CHECKPOINT_ARCHIVED`). Si el nombre es el de uno
7
+ * archivado de esa ubicación, se dice así en vez de «no lo encuentro».
8
+ */
9
+ export declare function elegirCheckpointParaRuta(gateway: PatrolTechGateway, ctx: ActionPrepareContext, nombre: string, candidatos: readonly CheckpointRef[], locationId: string | null | undefined, entre: string): Promise<{
10
+ item: CheckpointRef;
11
+ } | {
12
+ error: string;
13
+ }>;
14
+ /** Una ruta de la organización por su nombre. */
15
+ export declare function elegirRuta(gateway: PatrolTechGateway, ctx: ActionPrepareContext, nombre: string): Promise<{
16
+ item: RouteRef;
17
+ } | {
18
+ error: string;
19
+ }>;
20
+ /** Íd., con sus checkpoints y horarios. */
21
+ export declare function elegirRutaConDetalle(gateway: PatrolTechGateway, ctx: ActionPrepareContext, nombre: string): Promise<{
22
+ ruta: RouteRef;
23
+ detalle: RouteDetails;
24
+ } | {
25
+ error: string;
26
+ }>;
27
+ //# sourceMappingURL=route-lookup.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"route-lookup.d.ts","sourceRoot":"","sources":["../../../src/actions/support/route-lookup.ts"],"names":[],"mappings":"AACA,OAAO,KAAK,EACV,aAAa,EACb,iBAAiB,EACjB,YAAY,EACZ,QAAQ,EACT,MAAM,wBAAwB,CAAC;AAChC,OAAO,KAAK,EAAE,oBAAoB,EAAE,MAAM,aAAa,CAAC;AAIxD;;;;;GAKG;AACH,wBAAsB,wBAAwB,CAC5C,OAAO,EAAE,iBAAiB,EAC1B,GAAG,EAAE,oBAAoB,EACzB,MAAM,EAAE,MAAM,EACd,UAAU,EAAE,SAAS,aAAa,EAAE,EACpC,UAAU,EAAE,MAAM,GAAG,IAAI,GAAG,SAAS,EACrC,KAAK,EAAE,MAAM,GACZ,OAAO,CAAC;IAAE,IAAI,EAAE,aAAa,CAAA;CAAE,GAAG;IAAE,KAAK,EAAE,MAAM,CAAA;CAAE,CAAC,CAsBtD;AAED,iDAAiD;AACjD,wBAAsB,UAAU,CAC9B,OAAO,EAAE,iBAAiB,EAC1B,GAAG,EAAE,oBAAoB,EACzB,MAAM,EAAE,MAAM,GACb,OAAO,CAAC;IAAE,IAAI,EAAE,QAAQ,CAAA;CAAE,GAAG;IAAE,KAAK,EAAE,MAAM,CAAA;CAAE,CAAC,CAIjD;AAED,2CAA2C;AAC3C,wBAAsB,oBAAoB,CACxC,OAAO,EAAE,iBAAiB,EAC1B,GAAG,EAAE,oBAAoB,EACzB,MAAM,EAAE,MAAM,GACb,OAAO,CAAC;IAAE,IAAI,EAAE,QAAQ,CAAC;IAAC,OAAO,EAAE,YAAY,CAAA;CAAE,GAAG;IAAE,KAAK,EAAE,MAAM,CAAA;CAAE,CAAC,CAOxE"}
@@ -0,0 +1,44 @@
1
+ import { resolveByName } from '../../domain/resolve-by-name.js';
2
+ import { leerRuta, leerRutas } from './route-impact.js';
3
+ import { elegir } from './shared.js';
4
+ /**
5
+ * Un checkpoint de la ubicación de una ruta, por nombre. Solo se ofrecen los no
6
+ * archivados (`listCheckpoints`): uno archivado no admite escaneos y el backend
7
+ * lo rechaza en una ruta (400 `CHECKPOINT_ARCHIVED`). Si el nombre es el de uno
8
+ * archivado de esa ubicación, se dice así en vez de «no lo encuentro».
9
+ */
10
+ export async function elegirCheckpointParaRuta(gateway, ctx, nombre, candidatos, locationId, entre) {
11
+ const c = elegir(nombre, candidatos, (x) => x.name, entre);
12
+ if (!('error' in c) ||
13
+ !locationId ||
14
+ resolveByName(nombre, candidatos, (x) => x.name).kind !== 'none')
15
+ return c;
16
+ const archivados = await gateway
17
+ .listArchivedCheckpoints(ctx.org.orgId, ctx.token)
18
+ .catch(() => null);
19
+ const a = resolveByName(nombre, archivados?.items.filter((x) => x.locationId === locationId) ?? [], (x) => x.name);
20
+ if (a.kind !== 'found')
21
+ return c;
22
+ return {
23
+ error: `El checkpoint «${a.item.name}» está archivado: un checkpoint archivado no se puede usar en rutas. ` +
24
+ 'Díselo al usuario; si vuelve a estar en servicio, primero hay que desarchivarlo.',
25
+ };
26
+ }
27
+ /** Una ruta de la organización por su nombre. */
28
+ export async function elegirRuta(gateway, ctx, nombre) {
29
+ const rutas = (await leerRutas(gateway, ctx)).items;
30
+ if (rutas.length === 0)
31
+ return { error: 'La organización no tiene ninguna ruta creada.' };
32
+ return elegir(nombre, rutas, (r) => r.name, 'las rutas');
33
+ }
34
+ /** Íd., con sus checkpoints y horarios. */
35
+ export async function elegirRutaConDetalle(gateway, ctx, nombre) {
36
+ const r = await elegirRuta(gateway, ctx, nombre);
37
+ if ('error' in r)
38
+ return r;
39
+ const detalle = await leerRuta(gateway, ctx, r.item.id);
40
+ return detalle
41
+ ? { ruta: r.item, detalle }
42
+ : { error: `No he podido leer la ruta «${r.item.name}».` };
43
+ }
44
+ //# sourceMappingURL=route-lookup.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"route-lookup.js","sourceRoot":"","sources":["../../../src/actions/support/route-lookup.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,aAAa,EAAE,MAAM,iCAAiC,CAAC;AAQhE,OAAO,EAAE,QAAQ,EAAE,SAAS,EAAE,MAAM,mBAAmB,CAAC;AACxD,OAAO,EAAE,MAAM,EAAE,MAAM,aAAa,CAAC;AAErC;;;;;GAKG;AACH,MAAM,CAAC,KAAK,UAAU,wBAAwB,CAC5C,OAA0B,EAC1B,GAAyB,EACzB,MAAc,EACd,UAAoC,EACpC,UAAqC,EACrC,KAAa;IAEb,MAAM,CAAC,GAAG,MAAM,CAAC,MAAM,EAAE,UAAU,EAAE,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,IAAI,EAAE,KAAK,CAAC,CAAC;IAC3D,IACE,CAAC,CAAC,OAAO,IAAI,CAAC,CAAC;QACf,CAAC,UAAU;QACX,aAAa,CAAC,MAAM,EAAE,UAAU,EAAE,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC,IAAI,KAAK,MAAM;QAEhE,OAAO,CAAC,CAAC;IACX,MAAM,UAAU,GAAG,MAAM,OAAO;SAC7B,uBAAuB,CAAC,GAAG,CAAC,GAAG,CAAC,KAAK,EAAE,GAAG,CAAC,KAAK,CAAC;SACjD,KAAK,CAAC,GAAG,EAAE,CAAC,IAAI,CAAC,CAAC;IACrB,MAAM,CAAC,GAAG,aAAa,CACrB,MAAM,EACN,UAAU,EAAE,KAAK,CAAC,MAAM,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,UAAU,KAAK,UAAU,CAAC,IAAI,EAAE,EAClE,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,IAAI,CACd,CAAC;IACF,IAAI,CAAC,CAAC,IAAI,KAAK,OAAO;QAAE,OAAO,CAAC,CAAC;IACjC,OAAO;QACL,KAAK,EACH,kBAAkB,CAAC,CAAC,IAAI,CAAC,IAAI,uEAAuE;YACpG,kFAAkF;KACrF,CAAC;AACJ,CAAC;AAED,iDAAiD;AACjD,MAAM,CAAC,KAAK,UAAU,UAAU,CAC9B,OAA0B,EAC1B,GAAyB,EACzB,MAAc;IAEd,MAAM,KAAK,GAAG,CAAC,MAAM,SAAS,CAAC,OAAO,EAAE,GAAG,CAAC,CAAC,CAAC,KAAK,CAAC;IACpD,IAAI,KAAK,CAAC,MAAM,KAAK,CAAC;QAAE,OAAO,EAAE,KAAK,EAAE,+CAA+C,EAAE,CAAC;IAC1F,OAAO,MAAM,CAAC,MAAM,EAAE,KAAK,EAAE,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,IAAI,EAAE,WAAW,CAAC,CAAC;AAC3D,CAAC;AAED,2CAA2C;AAC3C,MAAM,CAAC,KAAK,UAAU,oBAAoB,CACxC,OAA0B,EAC1B,GAAyB,EACzB,MAAc;IAEd,MAAM,CAAC,GAAG,MAAM,UAAU,CAAC,OAAO,EAAE,GAAG,EAAE,MAAM,CAAC,CAAC;IACjD,IAAI,OAAO,IAAI,CAAC;QAAE,OAAO,CAAC,CAAC;IAC3B,MAAM,OAAO,GAAG,MAAM,QAAQ,CAAC,OAAO,EAAE,GAAG,EAAE,CAAC,CAAC,IAAI,CAAC,EAAE,CAAC,CAAC;IACxD,OAAO,OAAO;QACZ,CAAC,CAAC,EAAE,IAAI,EAAE,CAAC,CAAC,IAAI,EAAE,OAAO,EAAE;QAC3B,CAAC,CAAC,EAAE,KAAK,EAAE,8BAA8B,CAAC,CAAC,IAAI,CAAC,IAAI,IAAI,EAAE,CAAC;AAC/D,CAAC"}
@@ -0,0 +1,38 @@
1
+ import { z } from 'zod';
2
+ import { type FixedTextLanguage } from '../../domain/language.js';
3
+ import { type Franja } from '../../domain/route-schedule.js';
4
+ import type { NewTimeWindow } from '../../gateway/index.js';
5
+ /** Parámetros y textos de horarios que comparten crear ruta y añadir o borrar un horario. */
6
+ export declare const HORA: z.ZodString;
7
+ export declare const DIAS_PARAM: z.ZodArray<z.ZodEnum<{
8
+ lun: "lun";
9
+ mar: "mar";
10
+ mie: "mie";
11
+ jue: "jue";
12
+ vie: "vie";
13
+ sab: "sab";
14
+ dom: "dom";
15
+ }>>;
16
+ export declare const DESDE: z.ZodString;
17
+ export declare const HASTA: z.ZodString;
18
+ export declare const RUTA: z.ZodString;
19
+ export declare const HORAS_LOCALES = "Las horas son SIEMPRE las del cliente, tal como las dice: el bot las convierte a UTC.";
20
+ /** «lun, mar de 20:00 a 05:00 (acaba al día siguiente), una ronda cada 60 min: 9 horarios». */
21
+ export declare function describirFranja(f: Franja, idioma: FixedTextLanguage): string;
22
+ /** Los horarios UTC para el backend con la zona en que se configuraron. Lanza si ya no valen (los validó `preparar`). */
23
+ export declare function horariosUtc(franjas: readonly Franja[], tz: string): NewTimeWindow[];
24
+ export declare const franjaSchema: z.ZodObject<{
25
+ dias: z.ZodArray<z.ZodEnum<{
26
+ lun: "lun";
27
+ mar: "mar";
28
+ mie: "mie";
29
+ jue: "jue";
30
+ vie: "vie";
31
+ sab: "sab";
32
+ dom: "dom";
33
+ }>>;
34
+ desde: z.ZodString;
35
+ hasta: z.ZodString;
36
+ repetir_cada_min: z.ZodOptional<z.ZodNumber>;
37
+ }, z.core.$strip>;
38
+ //# sourceMappingURL=schedule.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"schedule.d.ts","sourceRoot":"","sources":["../../../src/actions/support/schedule.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,CAAC,EAAE,MAAM,KAAK,CAAC;AACxB,OAAO,EAAe,KAAK,iBAAiB,EAAE,MAAM,0BAA0B,CAAC;AAC/E,OAAO,EAKL,KAAK,MAAM,EACZ,MAAM,gCAAgC,CAAC;AAExC,OAAO,KAAK,EAAE,aAAa,EAAE,MAAM,wBAAwB,CAAC;AAE5D,6FAA6F;AAE7F,eAAO,MAAM,IAAI,aAAoE,CAAC;AACtF,eAAO,MAAM,UAAU;;;;;;;;GAG4D,CAAC;AACpF,eAAO,MAAM,KAAK,aAAsE,CAAC;AACzF,eAAO,MAAM,KAAK,aAEjB,CAAC;AACF,eAAO,MAAM,IAAI,aAAyD,CAAC;AAC3E,eAAO,MAAM,aAAa,0FAC+D,CAAC;AAE1F,+FAA+F;AAC/F,wBAAgB,eAAe,CAAC,CAAC,EAAE,MAAM,EAAE,MAAM,EAAE,iBAAiB,GAAG,MAAM,CAyB5E;AAED,yHAAyH;AACzH,wBAAgB,WAAW,CAAC,OAAO,EAAE,SAAS,MAAM,EAAE,EAAE,EAAE,EAAE,MAAM,GAAG,aAAa,EAAE,CAInF;AAED,eAAO,MAAM,YAAY;;;;;;;;;;;;;iBAavB,CAAC"}
@@ -0,0 +1,62 @@
1
+ import { z } from 'zod';
2
+ import { segunIdioma } from '../../domain/language.js';
3
+ import { DIAS, describirDias, expandirFranja, horariosParaBackend, } from '../../domain/route-schedule.js';
4
+ import { utcOffsetMinutes } from '../../domain/timezone.js';
5
+ /** Parámetros y textos de horarios que comparten crear ruta y añadir o borrar un horario. */
6
+ export const HORA = z.string().regex(/^([01]\d|2[0-3]):[0-5]\d$/, 'Usa HH:mm (24 h)');
7
+ export const DIAS_PARAM = z
8
+ .array(z.enum(DIAS))
9
+ .min(1)
10
+ .describe('Días en los que EMPIEZA la franja: lun, mar, mie, jue, vie, sab, dom');
11
+ export const DESDE = HORA.describe('Hora de inicio, HH:mm en la hora LOCAL del cliente');
12
+ export const HASTA = HORA.describe('Hora de fin, HH:mm local. Si es menor que `desde`, acaba al día siguiente (20:00-05:00)');
13
+ export const RUTA = z.string().trim().min(1).describe('Nombre de la ruta');
14
+ export const HORAS_LOCALES = 'Las horas son SIEMPRE las del cliente, tal como las dice: el bot las convierte a UTC.';
15
+ /** «lun, mar de 20:00 a 05:00 (acaba al día siguiente), una ronda cada 60 min: 9 horarios». */
16
+ export function describirFranja(f, idioma) {
17
+ const t = segunIdioma(idioma, {
18
+ es: {
19
+ de: 'de',
20
+ a: 'a',
21
+ cruza: ' (acaba al día siguiente)',
22
+ cada: (min, n) => `, una ronda cada ${min} min: ${n} horarios`,
23
+ },
24
+ en: {
25
+ de: 'from',
26
+ a: 'to',
27
+ cruza: ' (ends the next day)',
28
+ cada: (min, n) => `, one round every ${min} min: ${n} time slots`,
29
+ },
30
+ fr: {
31
+ de: 'de',
32
+ a: 'à',
33
+ cruza: ' (se termine le lendemain)',
34
+ cada: (min, n) => `, une ronde toutes les ${min} min : ${n} créneaux`,
35
+ },
36
+ });
37
+ const base = `${describirDias(f.dias, idioma)} ${t.de} ${f.desde} ${t.a} ${f.hasta}${f.hasta < f.desde ? t.cruza : ''}`;
38
+ if (!f.repetir_cada_min)
39
+ return base;
40
+ const r = expandirFranja(f);
41
+ return `${base}${t.cada(f.repetir_cada_min, 'error' in r ? 0 : r.length)}`;
42
+ }
43
+ /** Los horarios UTC para el backend con la zona en que se configuraron. Lanza si ya no valen (los validó `preparar`). */
44
+ export function horariosUtc(franjas, tz) {
45
+ const r = horariosParaBackend(franjas, utcOffsetMinutes(tz));
46
+ if ('error' in r)
47
+ throw new Error(`horarios no válidos al ejecutar: ${r.error}`);
48
+ return r.map((h) => ({ ...h, timezone: tz }));
49
+ }
50
+ export const franjaSchema = z.object({
51
+ dias: DIAS_PARAM,
52
+ desde: DESDE,
53
+ hasta: HASTA,
54
+ repetir_cada_min: z
55
+ .number()
56
+ .int()
57
+ .positive()
58
+ .optional()
59
+ .describe('SOLO si quiere una ronda cada X minutos dentro de la franja (60 = una ronda por hora): se parte en horarios de esa duración. ' +
60
+ 'Sin él, la franja es UN horario para una sola ronda.'),
61
+ });
62
+ //# sourceMappingURL=schedule.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"schedule.js","sourceRoot":"","sources":["../../../src/actions/support/schedule.ts"],"names":[],"mappings":"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"}