@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,222 @@
1
+ import { z } from 'zod';
2
+ import { checkpointQrImage } from '../domain/qr-image.js';
3
+ import { segunIdioma } from '../domain/language.js';
4
+ import { INTERNO, maybeApplied, resolverCheckpoint, sinPlazaDeCheckpoint, ubicacionPara, } from './support/shared.js';
5
+ import { defineBotAction } from './types.js';
6
+ /**
7
+ * Alta y edición de checkpoints. Archivar va en
8
+ * `checkpoint-archive.ts`; el antifraude y la posición en el mapa, en `checkpoint-geo.ts`.
9
+ */
10
+ /** Un checkpoint con el mismo nombre dado de alta en este margen se toma por el nuestro tras un error dudoso. */
11
+ export const CHECKPOINT_RECOVERY_WINDOW_MS = 5 * 60_000;
12
+ // ---------------------------------------------------------------------------
13
+ // create_checkpoint
14
+ // ---------------------------------------------------------------------------
15
+ const createCheckpointParams = {
16
+ nombre: z
17
+ .string()
18
+ .trim()
19
+ .min(1)
20
+ .describe('Nombre del checkpoint: corto, que describa el lugar y en formato normal, p. ej. «Entrada principal» o «Módulo 2, 3 y cafetería». ' +
21
+ 'No todo en mayúsculas, sin prefijos genéricos como «Checkpoint 1» o «Punto 3» ni numeración. Si el cliente lo da así ' +
22
+ '(«Checkpoint 2 (MODULO 2,3, CAFETERIA)»), propón la versión limpia: la verá en el resumen y puede cancelar y pedir otro. ' +
23
+ 'Si insiste en su formato, respétalo.'),
24
+ ubicacion: z
25
+ .string()
26
+ .optional()
27
+ .describe('Ubicación en la que crearlo. Pregúntala solo si el usuario tiene varias.'),
28
+ metodo: z
29
+ .enum(['qr', 'codigo_manual'])
30
+ .describe('qr (por defecto: se imprime y se pega en el punto) o codigo_manual (el vigilante teclea el código; si no puede imprimir)'),
31
+ ubicacion_id: z.string().optional().describe(INTERNO),
32
+ };
33
+ export function createCheckpoint(env) {
34
+ const { gateway, urls } = env;
35
+ /** El alta que respondió con error pero sí se hizo: mismo nombre exacto, en esa ubicación y de hace nada. */
36
+ async function findJustCreated(locationId, nombre, token) {
37
+ const candidatos = await gateway.findCheckpointsByName(locationId, nombre, token);
38
+ const now = Date.now();
39
+ return candidatos.find((c) => c.name.trim() === nombre.trim() &&
40
+ c.creadoEn !== null &&
41
+ now - Date.parse(c.creadoEn) <= CHECKPOINT_RECOVERY_WINDOW_MS);
42
+ }
43
+ return defineBotAction({
44
+ nombre: 'create_checkpoint',
45
+ tool: 'proponer_crear_checkpoint',
46
+ descripcion: 'Prepara el alta de un checkpoint (punto de control) en una ubicación de la organización, con QR o con código manual. ' +
47
+ 'NO lo crea: le envía al cliente un resumen con un botón para confirmarlo, y solo cuando confirma se crea y le llega el QR. ' +
48
+ 'Úsala cuando el cliente quiera crear o añadir un checkpoint. Pregunta solo lo que falte: el nombre y, si tiene varias ' +
49
+ 'ubicaciones, en cuál. Método: QR por defecto; código manual si no puede imprimir. El código lo genera el panel: no lo pidas.',
50
+ params: createCheckpointParams,
51
+ rolMinimo: 'EDITOR',
52
+ async preparar(ctx, p) {
53
+ const u = ubicacionPara(await gateway.listLocations(ctx.org.orgId, ctx.token), p.ubicacion, 'crear el checkpoint');
54
+ if ('error' in u)
55
+ return u;
56
+ const ubicacion = u.item;
57
+ const sinPlaza = await sinPlazaDeCheckpoint(env, ctx, {
58
+ conPlan: (alLimite) => `${alLimite}. No lo propongas: ` +
59
+ `explícale que puede mejorar el plan en Licencia (${urls.license}) o, si su plan lo permite, añadir el checkpoint extra desde el panel.`,
60
+ sinPlan: (alLimite) => `${alLimite}. No lo propongas: explícale que la organización ya usa todos los checkpoints incluidos ` +
61
+ 'y que puede archivar uno que ya no use antes de crear otro.',
62
+ });
63
+ if (sinPlaza)
64
+ return { error: sinPlaza };
65
+ return { params: { ...p, ubicacion: ubicacion.name, ubicacion_id: ubicacion.id } };
66
+ },
67
+ resumen(p, { idioma, organizacion }) {
68
+ const qr = p.metodo === 'qr';
69
+ return segunIdioma(idioma, {
70
+ es: `Crear el checkpoint «${p.nombre}» en la ubicación «${p.ubicacion}» de ${organizacion}, ` +
71
+ `${qr ? 'con QR (para imprimirlo y pegarlo en el punto)' : 'con código manual'}. El código lo genera el panel.`,
72
+ en: `Create the checkpoint «${p.nombre}» in the location «${p.ubicacion}» of ${organizacion}, ` +
73
+ `${qr ? 'with a QR code (to print and stick at the checkpoint)' : 'with a manual code'}. The dashboard generates the code.`,
74
+ fr: `Créer le checkpoint «${p.nombre}» sur le site «${p.ubicacion}» de ${organizacion}, ` +
75
+ `${qr ? 'avec un QR code (à imprimer et coller au point de contrôle)' : 'avec un code manuel'}. Le code est généré par le tableau de bord.`,
76
+ });
77
+ },
78
+ async ejecutar(ctx, p) {
79
+ if (!p.ubicacion_id)
80
+ throw new Error('create_checkpoint sin ubicacion_id (no pasó por preparar)');
81
+ const metodo = p.metodo === 'qr' ? 'qr_static' : 'manual_code';
82
+ let cp;
83
+ try {
84
+ cp = await gateway.createCheckpoint({ name: p.nombre, locationId: p.ubicacion_id, metodo }, ctx.token);
85
+ }
86
+ catch (err) {
87
+ // Un timeout o un 5xx no dice si se creó: se busca antes de contestar «no se ha hecho nada».
88
+ const recovered = maybeApplied(err)
89
+ ? await findJustCreated(p.ubicacion_id, p.nombre, ctx.token).catch(() => undefined)
90
+ : undefined;
91
+ if (!recovered)
92
+ throw err;
93
+ cp = recovered;
94
+ }
95
+ const codigo = cp.codigo;
96
+ const t = segunIdioma(ctx.language, {
97
+ es: {
98
+ creado: `✅ Checkpoint «${cp.name}» creado en la ubicación «${p.ubicacion}» de ${ctx.org.name}.`,
99
+ sinCodigo: 'Su código lo tienes en el panel, en Checkpoints.',
100
+ manual: `Es de código manual: el vigilante teclea ${codigo} en la app, en «Código manual».`,
101
+ codigo: `Código del QR: ${codigo}`,
102
+ qr: 'Imprime su QR y pégalo en el punto; el vigilante lo escanea con la app.',
103
+ },
104
+ en: {
105
+ creado: `✅ Checkpoint «${cp.name}» created in the location «${p.ubicacion}» of ${ctx.org.name}.`,
106
+ sinCodigo: 'You can see its code in the dashboard, in Checkpoints.',
107
+ manual: `It uses a manual code: the guard types ${codigo} in the app, under «Manual code».`,
108
+ codigo: `QR code: ${codigo}`,
109
+ qr: 'Print its QR and stick it at the checkpoint; the guard scans it with the app.',
110
+ },
111
+ fr: {
112
+ creado: `✅ Checkpoint «${cp.name}» créé sur le site «${p.ubicacion}» de ${ctx.org.name}.`,
113
+ sinCodigo: 'Vous trouverez son code dans le tableau de bord, dans Checkpoints.',
114
+ manual: `Il utilise un code manuel : l'agent saisit ${codigo} dans l'application, dans «Code manuel».`,
115
+ codigo: `Code du QR : ${codigo}`,
116
+ qr: "Imprimez son QR code et collez-le au point de contrôle ; l'agent le scanne avec l'application.",
117
+ },
118
+ });
119
+ if (!codigo)
120
+ return { texto: `${t.creado}\n\n${t.sinCodigo}` };
121
+ if (metodo === 'manual_code')
122
+ return { texto: `${t.creado}\n\n${t.manual}` };
123
+ return {
124
+ texto: `${t.creado} ${t.codigo}\n\n${t.qr}`,
125
+ imagen: await checkpointQrImage({ code: codigo, name: cp.name }),
126
+ };
127
+ },
128
+ });
129
+ }
130
+ // ---------------------------------------------------------------------------
131
+ // edit_checkpoint
132
+ // ---------------------------------------------------------------------------
133
+ const editCheckpointParams = {
134
+ checkpoint: z.string().trim().min(1).describe('Nombre actual del checkpoint'),
135
+ ubicacion: z
136
+ .string()
137
+ .trim()
138
+ .min(1)
139
+ .optional()
140
+ .describe('Ubicación del checkpoint, si hay varios con ese nombre. OMÍTELO si no hace falta.'),
141
+ nombre: z
142
+ .string()
143
+ .trim()
144
+ .min(1)
145
+ .max(255)
146
+ .optional()
147
+ .describe('Nombre nuevo. OMÍTELO si no cambia.'),
148
+ descripcion: z
149
+ .string()
150
+ .trim()
151
+ .min(1)
152
+ .max(1000)
153
+ .optional()
154
+ .describe('Descripción nueva. OMÍTELO si no cambia.'),
155
+ checkpoint_id: z.string().optional().describe(INTERNO),
156
+ };
157
+ export function editCheckpoint({ gateway }) {
158
+ return defineBotAction({
159
+ nombre: 'edit_checkpoint',
160
+ tool: 'proponer_editar_checkpoint',
161
+ descripcion: 'Prepara cambiar el nombre y/o la descripción de un checkpoint. NO lo cambia: le envía al cliente un resumen con un botón para confirmarlo. ' +
162
+ 'NO sirve para cambiar el código ni el método de verificación (QR, código manual, NFC): con escaneos no se pueden cambiar; ' +
163
+ 'para eso se archiva y se crea un sucesor desde el panel. El QR impreso sigue valiendo tras renombrarlo.',
164
+ params: editCheckpointParams,
165
+ rolMinimo: 'EDITOR',
166
+ async preparar(ctx, p) {
167
+ if (!p.nombre && !p.descripcion)
168
+ return {
169
+ error: 'Falta qué cambiar: el nombre nuevo o la descripción. Pregúntaselo al usuario.',
170
+ };
171
+ const { items } = await gateway.listCheckpoints(ctx.org.orgId, ctx.token);
172
+ const r = resolverCheckpoint(items, p.checkpoint, p.ubicacion);
173
+ if ('error' in r)
174
+ return r;
175
+ return {
176
+ params: {
177
+ ...p,
178
+ checkpoint: r.item.name,
179
+ ubicacion: r.item.locationName,
180
+ checkpoint_id: r.item.id,
181
+ },
182
+ };
183
+ },
184
+ resumen(p, { idioma, organizacion }) {
185
+ const t = segunIdioma(idioma, {
186
+ es: { nombre: 'nombre', descripcion: 'descripción' },
187
+ en: { nombre: 'name', descripcion: 'description' },
188
+ fr: { nombre: 'nom', descripcion: 'description' },
189
+ });
190
+ const cambios = [
191
+ ...(p.nombre ? [`${t.nombre} → «${p.nombre}»`] : []),
192
+ ...(p.descripcion ? [`${t.descripcion} → «${p.descripcion}»`] : []),
193
+ ].join('; ');
194
+ return segunIdioma(idioma, {
195
+ es: `Cambiar el checkpoint «${p.checkpoint}» de la ubicación «${p.ubicacion}» de ${organizacion}: ${cambios}. ` +
196
+ 'Su código y su método de verificación no cambian (el QR impreso sigue valiendo).',
197
+ en: `Change the checkpoint «${p.checkpoint}» in the location «${p.ubicacion}» of ${organizacion}: ${cambios}. ` +
198
+ 'Its code and verification method stay the same (the printed QR still works).',
199
+ fr: `Modifier le checkpoint «${p.checkpoint}» du site «${p.ubicacion}» de ${organizacion} : ${cambios}. ` +
200
+ 'Son code et sa méthode de vérification ne changent pas (le QR code imprimé reste valable).',
201
+ });
202
+ },
203
+ async ejecutar(ctx, p) {
204
+ if (!p.checkpoint_id)
205
+ throw new Error('edit_checkpoint sin checkpoint_id (no pasó por preparar)');
206
+ await gateway.updateCheckpoint({
207
+ id: p.checkpoint_id,
208
+ ...(p.nombre ? { name: p.nombre } : {}),
209
+ ...(p.descripcion ? { description: p.descripcion } : {}),
210
+ }, ctx.token);
211
+ const nombre = p.nombre ?? p.checkpoint;
212
+ return {
213
+ texto: segunIdioma(ctx.language, {
214
+ es: `✅ Checkpoint «${nombre}» actualizado en la ubicación «${p.ubicacion}» de ${ctx.org.name}.`,
215
+ en: `✅ Checkpoint «${nombre}» updated in the location «${p.ubicacion}» of ${ctx.org.name}.`,
216
+ fr: `✅ Checkpoint «${nombre}» mis à jour sur le site «${p.ubicacion}» de ${ctx.org.name}.`,
217
+ }),
218
+ };
219
+ },
220
+ });
221
+ }
222
+ //# sourceMappingURL=checkpoints.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"checkpoints.js","sourceRoot":"","sources":["../../src/actions/checkpoints.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,13 @@
1
+ import type { ActionDefinition } from './types.js';
2
+ /**
3
+ * El mismo invariante anti-fuga que las lecturas, para las escrituras: `preparar`
4
+ * y `ejecutar` solo tocan el backend si `ctx.org` es una de `ctx.organizations`,
5
+ * y con SU entrada de la sesión (rol y ámbito), no con la copia del consumidor.
6
+ * - `preparar` devuelve `{ error: 'Organización no reconocida' }` (lo lee el modelo);
7
+ * - `ejecutar` lanza `AccionRechazada` con ese texto (queda `failed` sin cambios).
8
+ *
9
+ * `actionCatalog` lo aplica a todas sus acciones; un consumidor que monte una
10
+ * acción propia lo aplica igual.
11
+ */
12
+ export declare function withOrganizationGuard(definition: ActionDefinition): ActionDefinition;
13
+ //# sourceMappingURL=guard.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"guard.d.ts","sourceRoot":"","sources":["../../src/actions/guard.ts"],"names":[],"mappings":"AAEA,OAAO,KAAK,EAAE,gBAAgB,EAAE,MAAM,YAAY,CAAC;AAEnD;;;;;;;;;GASG;AACH,wBAAgB,qBAAqB,CAAC,UAAU,EAAE,gBAAgB,GAAG,gBAAgB,CAcpF"}
@@ -0,0 +1,30 @@
1
+ import { canonicalOrganization, ORGANIZATION_NOT_RECOGNISED } from '../context.js';
2
+ import { AccionRechazada } from './names.js';
3
+ /**
4
+ * El mismo invariante anti-fuga que las lecturas, para las escrituras: `preparar`
5
+ * y `ejecutar` solo tocan el backend si `ctx.org` es una de `ctx.organizations`,
6
+ * y con SU entrada de la sesión (rol y ámbito), no con la copia del consumidor.
7
+ * - `preparar` devuelve `{ error: 'Organización no reconocida' }` (lo lee el modelo);
8
+ * - `ejecutar` lanza `AccionRechazada` con ese texto (queda `failed` sin cambios).
9
+ *
10
+ * `actionCatalog` lo aplica a todas sus acciones; un consumidor que monte una
11
+ * acción propia lo aplica igual.
12
+ */
13
+ export function withOrganizationGuard(definition) {
14
+ return {
15
+ ...definition,
16
+ async preparar(ctx, params) {
17
+ const org = canonicalOrganization(ctx);
18
+ if (!org)
19
+ return { error: ORGANIZATION_NOT_RECOGNISED };
20
+ return definition.preparar ? definition.preparar({ ...ctx, org }, params) : { params };
21
+ },
22
+ async ejecutar(ctx, params) {
23
+ const org = canonicalOrganization(ctx);
24
+ if (!org)
25
+ throw new AccionRechazada(ORGANIZATION_NOT_RECOGNISED);
26
+ return definition.ejecutar({ ...ctx, org }, params);
27
+ },
28
+ };
29
+ }
30
+ //# sourceMappingURL=guard.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"guard.js","sourceRoot":"","sources":["../../src/actions/guard.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,qBAAqB,EAAE,2BAA2B,EAAE,MAAM,eAAe,CAAC;AACnF,OAAO,EAAE,eAAe,EAAE,MAAM,YAAY,CAAC;AAG7C;;;;;;;;;GASG;AACH,MAAM,UAAU,qBAAqB,CAAC,UAA4B;IAChE,OAAO;QACL,GAAG,UAAU;QACb,KAAK,CAAC,QAAQ,CAAC,GAAG,EAAE,MAAM;YACxB,MAAM,GAAG,GAAG,qBAAqB,CAAC,GAAG,CAAC,CAAC;YACvC,IAAI,CAAC,GAAG;gBAAE,OAAO,EAAE,KAAK,EAAE,2BAA2B,EAAE,CAAC;YACxD,OAAO,UAAU,CAAC,QAAQ,CAAC,CAAC,CAAC,UAAU,CAAC,QAAQ,CAAC,EAAE,GAAG,GAAG,EAAE,GAAG,EAAE,EAAE,MAAM,CAAC,CAAC,CAAC,CAAC,EAAE,MAAM,EAAE,CAAC;QACzF,CAAC;QACD,KAAK,CAAC,QAAQ,CAAC,GAAG,EAAE,MAAM;YACxB,MAAM,GAAG,GAAG,qBAAqB,CAAC,GAAG,CAAC,CAAC;YACvC,IAAI,CAAC,GAAG;gBAAE,MAAM,IAAI,eAAe,CAAC,2BAA2B,CAAC,CAAC;YACjE,OAAO,UAAU,CAAC,QAAQ,CAAC,EAAE,GAAG,GAAG,EAAE,GAAG,EAAE,EAAE,MAAM,CAAC,CAAC;QACtD,CAAC;KACF,CAAC;AACJ,CAAC"}
@@ -0,0 +1,3 @@
1
+ import { type ActionDefinition, type ActionEnv } from './types.js';
2
+ export declare function incidentUpdate({ gateway, logger }: ActionEnv): ActionDefinition;
3
+ //# sourceMappingURL=incidents.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"incidents.d.ts","sourceRoot":"","sources":["../../src/actions/incidents.ts"],"names":[],"mappings":"AAgBA,OAAO,EAAmB,KAAK,gBAAgB,EAAE,KAAK,SAAS,EAAE,MAAM,YAAY,CAAC;AAgDpF,wBAAgB,cAAc,CAAC,EAAE,OAAO,EAAE,MAAM,EAAE,EAAE,SAAS,GAAG,gBAAgB,CA2O/E"}
@@ -0,0 +1,260 @@
1
+ import { z } from 'zod';
2
+ import { isFeatureDisabled, PatrolTechApiError } from '../domain/backend-errors.js';
3
+ import { INCIDENT_FINAL, INCIDENT_REQUIRES_ASSIGNMENT, INCIDENT_REQUIRES_COMMENT, INCIDENT_STATUS_LABELS, INCIDENT_STATUS_PARAM, INCIDENT_STATUS_PARAMS, INCIDENT_TRANSITIONS, } from '../domain/incident-status.js';
4
+ import { segunIdioma } from '../domain/language.js';
5
+ import { INTERNO, resolver } from './support/shared.js';
6
+ import { defineBotAction } from './types.js';
7
+ /** Cambiar el estado, asignar y comentar una incidencia. */
8
+ const ESTADO_PARAM = INCIDENT_STATUS_PARAM;
9
+ const ESTADOS_PARAM = INCIDENT_STATUS_PARAMS;
10
+ const paramDe = (s) => ESTADOS_PARAM.find((k) => ESTADO_PARAM[k] === s);
11
+ /** `asignar_a_id` cuando se la asigna el propio usuario: su id solo se conoce al ejecutar (la sesión del momento). */
12
+ const ASIGNAR_A_MI = '@yo';
13
+ const YO_RE = /^(yo|a m[ií]|me|a m[ií] mismo|m[ií] mismo|myself|to me)$/i;
14
+ const incidentParams = {
15
+ incidencia: z
16
+ .string()
17
+ .trim()
18
+ .min(1)
19
+ .describe('Título de la incidencia (o parte de él), o su `id` tal como sale en la lista de incidencias'),
20
+ estado: z
21
+ .enum(ESTADOS_PARAM)
22
+ .optional()
23
+ .describe('Estado nuevo: abierto, en_progreso (exige que esté asignada), resuelto (exige comentario), cerrado (DEFINITIVO) o descartado (exige comentario; DEFINITIVO). OMÍTELO si no cambia el estado.'),
24
+ comentario: z
25
+ .string()
26
+ .trim()
27
+ .min(1)
28
+ .max(2000)
29
+ .optional()
30
+ .describe('Comentario a añadir. Obligatorio para resuelto y descartado (el motivo).'),
31
+ asignar_a: z
32
+ .string()
33
+ .trim()
34
+ .min(1)
35
+ .optional()
36
+ .describe('Usuario del panel al que asignarla (nombre o email), o «yo» si se la asigna el propio usuario. OMÍTELO si no se reasigna.'),
37
+ incidencia_id: z.string().optional().describe(INTERNO),
38
+ ubicacion_id: z.string().optional().describe(INTERNO),
39
+ estado_actual: z.enum(ESTADOS_PARAM).optional().describe(INTERNO),
40
+ asignar_a_id: z.string().optional().describe(INTERNO),
41
+ };
42
+ export function incidentUpdate({ gateway, logger }) {
43
+ return defineBotAction({
44
+ nombre: 'incident_update',
45
+ tool: 'proponer_actualizar_incidencia',
46
+ descripcion: 'Prepara un cambio en una incidencia de la App de Incidencias: cambiar su estado, asignarla y/o añadir un comentario, en una sola confirmación. ' +
47
+ 'NO lo hace: le envía al cliente un resumen con un botón para confirmarlo. Estados: Abierto → En progreso (exige asignarla) o Descartado; ' +
48
+ 'En progreso → Resuelto, Abierto o Descartado; Resuelto → Cerrado o En progreso. Resuelto y Descartado exigen comentario. Cerrado y Descartado son ' +
49
+ 'DEFINITIVOS. Si no sabes cuál es la incidencia, usa antes consultar_incidencias. Solo se puede asignar a otra persona si el usuario es Admin; ' +
50
+ 'cualquiera puede asignársela a sí mismo («yo»).',
51
+ params: incidentParams,
52
+ rolMinimo: 'EDITOR',
53
+ async preparar(ctx, p) {
54
+ if (!p.estado && !p.comentario && !p.asignar_a) {
55
+ return {
56
+ error: 'Falta qué cambiar: el estado, a quién asignarla o el comentario. Pregúntaselo al usuario.',
57
+ };
58
+ }
59
+ let incidencias;
60
+ try {
61
+ incidencias = (await gateway.listIncidents(ctx.org.orgId, ctx.token)).items.filter((i) => i.titulo !== null);
62
+ }
63
+ catch (err) {
64
+ if (isFeatureDisabled(err)) {
65
+ return {
66
+ error: `La App de Incidencias no está activa en «${ctx.org.name}». La activa un Admin en el panel, en Apps → Gestión de Incidencias.`,
67
+ };
68
+ }
69
+ if (err instanceof PatrolTechApiError && err.status === 403) {
70
+ return {
71
+ error: 'El usuario no puede ver las incidencias de la organización con su rol: que lo haga desde el panel o un Admin.',
72
+ };
73
+ }
74
+ throw err;
75
+ }
76
+ const r = resolver(p.incidencia, incidencias, (i) => i.titulo ?? '', ['la incidencia', 'incidencias'], { idOf: (i) => i.id });
77
+ if ('error' in r)
78
+ return r;
79
+ const inc = r.item;
80
+ const actual = INCIDENT_STATUS_LABELS[inc.estado].es;
81
+ if (INCIDENT_FINAL.includes(inc.estado)) {
82
+ return {
83
+ error: `La incidencia «${inc.titulo}» está ${actual}, que es DEFINITIVO: ya no se puede cambiar ni comentar.`,
84
+ };
85
+ }
86
+ const nuevo = p.estado ? ESTADO_PARAM[p.estado] : undefined;
87
+ if (nuevo) {
88
+ if (nuevo === inc.estado)
89
+ return { error: `La incidencia «${inc.titulo}» ya está ${actual}.` };
90
+ const permitidos = INCIDENT_TRANSITIONS[inc.estado];
91
+ if (!permitidos.includes(nuevo)) {
92
+ return {
93
+ error: `Desde ${actual} no se puede pasar a ${INCIDENT_STATUS_LABELS[nuevo].es}. ` +
94
+ `Desde ${actual} solo se puede pasar a: ${permitidos.map((s) => INCIDENT_STATUS_LABELS[s].es).join(', ')}.`,
95
+ };
96
+ }
97
+ if (INCIDENT_REQUIRES_COMMENT.includes(nuevo) && !p.comentario) {
98
+ return {
99
+ error: `Para pasarla a ${INCIDENT_STATUS_LABELS[nuevo].es} hace falta un comentario con el motivo: pídeselo al usuario.`,
100
+ };
101
+ }
102
+ if (INCIDENT_REQUIRES_ASSIGNMENT.includes(nuevo) && !inc.asignadoAId && !p.asignar_a) {
103
+ return {
104
+ error: 'Para pasarla a En progreso tiene que estar asignada: pregunta al usuario a quién asignarla (o si se la asigna él, «yo»).',
105
+ };
106
+ }
107
+ }
108
+ let asignarA;
109
+ if (p.asignar_a) {
110
+ if (YO_RE.test(p.asignar_a)) {
111
+ asignarA = { id: ASIGNAR_A_MI, nombre: 'yo' };
112
+ }
113
+ else {
114
+ let usuarios;
115
+ try {
116
+ usuarios = await gateway.listOrgUsers(ctx.org.orgId, ctx.token);
117
+ }
118
+ catch (err) {
119
+ if (err instanceof PatrolTechApiError && err.status === 403) {
120
+ return {
121
+ error: 'Solo un Admin puede ver los usuarios para asignar la incidencia a otra persona. El usuario sí puede asignársela a sí mismo («yo»).',
122
+ };
123
+ }
124
+ throw err;
125
+ }
126
+ const u = resolver(p.asignar_a, usuarios, (x) => x.nombre, ['el usuario', 'usuarios'], {
127
+ idOf: (x) => x.email,
128
+ });
129
+ if ('error' in u)
130
+ return u;
131
+ asignarA = { id: u.item.id, nombre: u.item.nombre };
132
+ }
133
+ }
134
+ return {
135
+ params: {
136
+ ...p,
137
+ incidencia: inc.titulo ?? p.incidencia,
138
+ incidencia_id: inc.id,
139
+ ubicacion_id: inc.locationId ?? undefined,
140
+ estado_actual: paramDe(inc.estado),
141
+ asignar_a: asignarA?.nombre,
142
+ asignar_a_id: asignarA?.id,
143
+ },
144
+ };
145
+ },
146
+ resumen(p, { idioma, organizacion }) {
147
+ const partes = [];
148
+ const nuevo = p.estado ? ESTADO_PARAM[p.estado] : undefined;
149
+ if (nuevo) {
150
+ const de = p.estado_actual
151
+ ? INCIDENT_STATUS_LABELS[ESTADO_PARAM[p.estado_actual]][idioma]
152
+ : undefined;
153
+ const a = INCIDENT_STATUS_LABELS[nuevo][idioma];
154
+ partes.push(segunIdioma(idioma, {
155
+ es: `cambiar su estado${de ? ` de «${de}»` : ''} a «${a}»${p.comentario ? ` con el comentario «${p.comentario}»` : ''}`,
156
+ en: `change its status${de ? ` from «${de}»` : ''} to «${a}»${p.comentario ? ` with the comment «${p.comentario}»` : ''}`,
157
+ fr: `passer son statut${de ? ` de «${de}»` : ''} à «${a}»${p.comentario ? ` avec le commentaire «${p.comentario}»` : ''}`,
158
+ }));
159
+ }
160
+ else if (p.comentario) {
161
+ partes.push(segunIdioma(idioma, {
162
+ es: `añadir el comentario «${p.comentario}»`,
163
+ en: `add the comment «${p.comentario}»`,
164
+ fr: `ajouter le commentaire «${p.comentario}»`,
165
+ }));
166
+ }
167
+ if (p.asignar_a_id) {
168
+ const aMi = p.asignar_a_id === ASIGNAR_A_MI;
169
+ partes.push(segunIdioma(idioma, {
170
+ es: aMi ? 'asignártela a ti' : `asignarla a ${p.asignar_a}`,
171
+ en: `assign it to ${aMi ? 'you' : p.asignar_a}`,
172
+ fr: aMi ? "vous l'assigner" : `l'assigner à ${p.asignar_a}`,
173
+ }));
174
+ }
175
+ const lista = partes.join('; ');
176
+ const texto = segunIdioma(idioma, {
177
+ es: `En la incidencia «${p.incidencia}» de ${organizacion}: ${lista}.`,
178
+ en: `In the incident «${p.incidencia}» of ${organizacion}: ${lista}.`,
179
+ fr: `Dans l'incident «${p.incidencia}» de ${organizacion} : ${lista}.`,
180
+ });
181
+ if (!nuevo || !INCIDENT_FINAL.includes(nuevo))
182
+ return texto;
183
+ const estado = INCIDENT_STATUS_LABELS[nuevo][idioma].toUpperCase();
184
+ return segunIdioma(idioma, {
185
+ es: `${texto}\n⚠️ «${estado}» ES DEFINITIVO: DESPUÉS LA INCIDENCIA NO SE PODRÁ REABRIR NI MODIFICAR.`,
186
+ en: `${texto}\n⚠️ «${estado}» IS FINAL: THE INCIDENT CANNOT BE REOPENED OR CHANGED AFTERWARDS.`,
187
+ fr: `${texto}\n⚠️ «${estado}» EST DÉFINITIF : L'INCIDENT NE POURRA PLUS ÊTRE ROUVERT NI MODIFIÉ.`,
188
+ });
189
+ },
190
+ async ejecutar(ctx, p) {
191
+ if (!p.incidencia_id)
192
+ throw new Error('incident_update sin incidencia_id (no pasó por preparar)');
193
+ const t = segunIdioma(ctx.language, {
194
+ es: {
195
+ asignada: (quien) => `asignada a ${quien}`,
196
+ estado: 'estado',
197
+ comentario: 'comentario añadido',
198
+ },
199
+ en: {
200
+ asignada: (quien) => `assigned to ${quien}`,
201
+ estado: 'status',
202
+ comentario: 'comment added',
203
+ },
204
+ fr: {
205
+ asignada: (quien) => `assigné à ${quien}`,
206
+ estado: 'statut',
207
+ comentario: 'commentaire ajouté',
208
+ },
209
+ });
210
+ const target = {
211
+ incidentId: p.incidencia_id,
212
+ organizationId: ctx.org.orgId,
213
+ locationId: p.ubicacion_id ?? null,
214
+ };
215
+ const hecho = [];
216
+ // Primero la asignación: pasar a En progreso la exige, y en un estado definitivo ya no se podría.
217
+ if (p.asignar_a_id) {
218
+ const aMi = p.asignar_a_id === ASIGNAR_A_MI;
219
+ await gateway.assignIncident({ ...target, userId: aMi ? ctx.user.id : p.asignar_a_id }, ctx.token);
220
+ hecho.push(t.asignada(aMi ? ctx.user.name : p.asignar_a));
221
+ }
222
+ const nuevo = p.estado ? ESTADO_PARAM[p.estado] : undefined;
223
+ try {
224
+ if (nuevo) {
225
+ await gateway.updateIncidentStatus({ ...target, estado: nuevo, ...(p.comentario ? { comentario: p.comentario } : {}) }, ctx.token);
226
+ hecho.push(`${t.estado} «${INCIDENT_STATUS_LABELS[nuevo][ctx.language]}»`);
227
+ if (p.comentario)
228
+ hecho.push(t.comentario);
229
+ }
230
+ else if (p.comentario) {
231
+ await gateway.commentIncident({ ...target, comentario: p.comentario }, ctx.token);
232
+ hecho.push(t.comentario);
233
+ }
234
+ }
235
+ catch (err) {
236
+ // Con la asignación ya hecha, «no se ha hecho ningún cambio» sería falso: se dice lo que sí se hizo.
237
+ if (hecho.length === 0)
238
+ throw err;
239
+ logger.warn('bot_action.incident_update_partial', { incidentId: p.incidencia_id, err });
240
+ const lista = hecho.join('; ');
241
+ return {
242
+ texto: segunIdioma(ctx.language, {
243
+ es: `✅ Incidencia «${p.incidencia}»: ${lista}.\n⚠️ Pero ${nuevo ? 'el cambio de estado' : 'el comentario'} no se ha podido hacer: revísalo en el panel (Incidencias).`,
244
+ en: `✅ Incident «${p.incidencia}»: ${lista}.\n⚠️ But the ${nuevo ? 'status change' : 'comment'} could not be made: check it in the dashboard (Incidents).`,
245
+ fr: `✅ Incident «${p.incidencia}» : ${lista}.\n⚠️ Mais ${nuevo ? 'le changement de statut' : 'le commentaire'} n'a pas pu être effectué : vérifiez-le dans le tableau de bord (Incidents).`,
246
+ }),
247
+ };
248
+ }
249
+ const lista = hecho.join('; ');
250
+ return {
251
+ texto: segunIdioma(ctx.language, {
252
+ es: `✅ Incidencia «${p.incidencia}» actualizada en ${ctx.org.name}: ${lista}.`,
253
+ en: `✅ Incident «${p.incidencia}» updated in ${ctx.org.name}: ${lista}.`,
254
+ fr: `✅ Incident «${p.incidencia}» mis à jour dans ${ctx.org.name} : ${lista}.`,
255
+ }),
256
+ };
257
+ },
258
+ });
259
+ }
260
+ //# sourceMappingURL=incidents.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"incidents.js","sourceRoot":"","sources":["../../src/actions/incidents.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,20 @@
1
+ import type { ActionDefinition, ActionDeps } from './types.js';
2
+ export * from './types.js';
3
+ export * from './names.js';
4
+ export * from './batch-policy.js';
5
+ export { withOrganizationGuard } from './guard.js';
6
+ export { CHECKPOINT_RECOVERY_WINDOW_MS } from './checkpoints.js';
7
+ export { newPatrollerIdentifier } from './patrollers.js';
8
+ export { nuevoTurno, turnoDe, type TurnoConRegistro } from './support/turno.js';
9
+ export { internalParamNames } from './support/shared.js';
10
+ export { isOnboardingAction, nextOnboardingStep, ONBOARDING_ACTIONS, type NextStep, type OnboardingAction, } from './support/next-step.js';
11
+ export { actionTexts, NEXT_STEP_TEXTS, type ActionTexts, type NextStepButton, } from './support/texts.js';
12
+ /**
13
+ * El catálogo de las 19 acciones de escritura, en el orden de `BOT_ACTIONS`. El
14
+ * motor de cada consumidor (tools `proponer_*`, confirmación, ejecución única)
15
+ * es el mismo para todas; cuáles se ofrecen lo deciden sus flags
16
+ * (`isActionEnabled`) y el rol del usuario (`roleAllows`). Todas van con
17
+ * `withOrganizationGuard`: ni preparan ni ejecutan fuera de las organizaciones de la sesión.
18
+ */
19
+ export declare function actionCatalog(deps: ActionDeps): ActionDefinition[];
20
+ //# sourceMappingURL=index.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/actions/index.ts"],"names":[],"mappings":"AAWA,OAAO,KAAK,EAAE,gBAAgB,EAAE,UAAU,EAAa,MAAM,YAAY,CAAC;AAI1E,cAAc,YAAY,CAAC;AAC3B,cAAc,YAAY,CAAC;AAC3B,cAAc,mBAAmB,CAAC;AAClC,OAAO,EAAE,qBAAqB,EAAE,MAAM,YAAY,CAAC;AACnD,OAAO,EAAE,6BAA6B,EAAE,MAAM,kBAAkB,CAAC;AACjE,OAAO,EAAE,sBAAsB,EAAE,MAAM,iBAAiB,CAAC;AACzD,OAAO,EAAE,UAAU,EAAE,OAAO,EAAE,KAAK,gBAAgB,EAAE,MAAM,oBAAoB,CAAC;AAChF,OAAO,EAAE,kBAAkB,EAAE,MAAM,qBAAqB,CAAC;AACzD,OAAO,EACL,kBAAkB,EAClB,kBAAkB,EAClB,kBAAkB,EAClB,KAAK,QAAQ,EACb,KAAK,gBAAgB,GACtB,MAAM,wBAAwB,CAAC;AAChC,OAAO,EACL,WAAW,EACX,eAAe,EACf,KAAK,WAAW,EAChB,KAAK,cAAc,GACpB,MAAM,oBAAoB,CAAC;AAE5B;;;;;;GAMG;AACH,wBAAgB,aAAa,CAAC,IAAI,EAAE,UAAU,GAAG,gBAAgB,EAAE,CA4BlE"}