@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,50 @@
1
+ import { z } from 'zod';
2
+ export declare const scansParamSchema: {
3
+ periodo: z.ZodOptional<z.ZodEnum<{
4
+ hoy: "hoy";
5
+ ayer: "ayer";
6
+ ultimos_7_dias: "ultimos_7_dias";
7
+ ultimos_30_dias: "ultimos_30_dias";
8
+ todos: "todos";
9
+ }>>;
10
+ desde: z.ZodOptional<z.ZodString>;
11
+ hasta: z.ZodOptional<z.ZodString>;
12
+ };
13
+ export declare const scansFiltrosSchema: {
14
+ vigilante: z.ZodOptional<z.ZodString>;
15
+ checkpoint: z.ZodOptional<z.ZodString>;
16
+ ubicacion: z.ZodOptional<z.ZodString>;
17
+ solo_sospechosos: z.ZodOptional<z.ZodBoolean>;
18
+ solo_no_validos: z.ZodOptional<z.ZodBoolean>;
19
+ periodo: z.ZodOptional<z.ZodEnum<{
20
+ hoy: "hoy";
21
+ ayer: "ayer";
22
+ ultimos_7_dias: "ultimos_7_dias";
23
+ ultimos_30_dias: "ultimos_30_dias";
24
+ todos: "todos";
25
+ }>>;
26
+ desde: z.ZodOptional<z.ZodString>;
27
+ hasta: z.ZodOptional<z.ZodString>;
28
+ };
29
+ export declare const fechaSchema: (que: string) => z.ZodString;
30
+ export declare const rutaParamSchema: {
31
+ ruta: z.ZodOptional<z.ZodString>;
32
+ };
33
+ export declare const accesosParamSchema: {
34
+ periodo: z.ZodOptional<z.ZodEnum<{
35
+ hoy: "hoy";
36
+ ayer: "ayer";
37
+ ultimos_7_dias: "ultimos_7_dias";
38
+ ultimos_30_dias: "ultimos_30_dias";
39
+ }>>;
40
+ desde: z.ZodOptional<z.ZodString>;
41
+ hasta: z.ZodOptional<z.ZodString>;
42
+ ubicacion: z.ZodOptional<z.ZodString>;
43
+ zona: z.ZodOptional<z.ZodString>;
44
+ tipo: z.ZodOptional<z.ZodEnum<{
45
+ entrada: "entrada";
46
+ salida: "salida";
47
+ }>>;
48
+ solo_dentro: z.ZodOptional<z.ZodBoolean>;
49
+ };
50
+ //# sourceMappingURL=params.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"params.d.ts","sourceRoot":"","sources":["../../../src/reads/support/params.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,CAAC,EAAE,MAAM,KAAK,CAAC;AAOxB,eAAO,MAAM,gBAAgB;;;;;;;;;;CAiB5B,CAAC;AAEF,eAAO,MAAM,kBAAkB;;;;;;;;;;;;;;;CAyB9B,CAAC;AAEF,eAAO,MAAM,WAAW,GAAI,KAAK,MAAM,gBACoC,CAAC;AAE5E,eAAO,MAAM,eAAe;;CAQ3B,CAAC;AAEF,eAAO,MAAM,kBAAkB;;;;;;;;;;;;;;;;CAuB9B,CAAC"}
@@ -0,0 +1,73 @@
1
+ import { z } from 'zod';
2
+ /** Esquemas de parámetros que comparten varias capacidades (mismas descripciones que el bot). */
3
+ // Regex, no solo la descripción: una fecha en palabras lanzaba y se llevaba el turno.
4
+ const ymd = () => z.string().regex(/^\d{4}-\d{2}-\d{2}$/, 'Usa exactamente YYYY-MM-DD');
5
+ export const scansParamSchema = {
6
+ periodo: z
7
+ .enum(['hoy', 'ayer', 'ultimos_7_dias', 'ultimos_30_dias', 'todos'])
8
+ .optional()
9
+ .describe('Periodo relativo a consultar. Úsalo cuando el usuario diga "hoy", "ayer", "última semana", "último mes" o similar.'),
10
+ desde: ymd()
11
+ .optional()
12
+ .describe('Fecha de inicio del rango, formato YYYY-MM-DD (nunca palabras como "ayer"). Úsalo si el usuario da una fecha concreta.'),
13
+ hasta: ymd()
14
+ .optional()
15
+ .describe('Fecha de fin del rango (inclusive), formato YYYY-MM-DD (nunca palabras como "hoy").'),
16
+ };
17
+ export const scansFiltrosSchema = {
18
+ ...scansParamSchema,
19
+ vigilante: z
20
+ .string()
21
+ .min(1)
22
+ .optional()
23
+ .describe('Nombre del vigilante: solo sus escaneos. OMÍTELO si no se pide.'),
24
+ checkpoint: z
25
+ .string()
26
+ .min(1)
27
+ .optional()
28
+ .describe('Nombre del checkpoint: solo sus escaneos. OMÍTELO si no se pide.'),
29
+ ubicacion: z
30
+ .string()
31
+ .min(1)
32
+ .optional()
33
+ .describe('Nombre de la ubicación: solo sus escaneos. OMÍTELO si no se pide.'),
34
+ solo_sospechosos: z
35
+ .boolean()
36
+ .optional()
37
+ .describe('true: solo los escaneos marcados como sospechosos.'),
38
+ solo_no_validos: z
39
+ .boolean()
40
+ .optional()
41
+ .describe('true: solo los escaneos rechazados (no válidos).'),
42
+ };
43
+ export const fechaSchema = (que) => ymd().describe(`${que}, formato YYYY-MM-DD en el calendario del cliente`);
44
+ export const rutaParamSchema = {
45
+ ruta: z
46
+ .string()
47
+ .min(1)
48
+ .optional()
49
+ .describe('Nombre de la ruta. Opcional: OMÍTELO (no lo mandes vacío) si el usuario no lo ha indicado.'),
50
+ };
51
+ export const accesosParamSchema = {
52
+ periodo: z
53
+ .enum(['hoy', 'ayer', 'ultimos_7_dias', 'ultimos_30_dias'])
54
+ .optional()
55
+ .describe('Periodo a consultar. OMÍTELO (y desde/hasta) para las últimas 24 horas.'),
56
+ desde: scansParamSchema.desde,
57
+ hasta: scansParamSchema.hasta,
58
+ ubicacion: z.string().min(1).optional().describe('Nombre de la ubicación. OMÍTELO para todas.'),
59
+ zona: z
60
+ .string()
61
+ .min(1)
62
+ .optional()
63
+ .describe('Zona de acceso, escrita como en el panel. OMÍTELO para todas.'),
64
+ tipo: z
65
+ .enum(['entrada', 'salida'])
66
+ .optional()
67
+ .describe('Solo entradas o solo salidas. OMÍTELO para las dos.'),
68
+ solo_dentro: z
69
+ .boolean()
70
+ .optional()
71
+ .describe('true: solo quién está dentro ahora (entradas sin salida de las últimas 24 h; las más antiguas vienen aparte, como salidas sin registrar).'),
72
+ };
73
+ //# sourceMappingURL=params.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"params.js","sourceRoot":"","sources":["../../../src/reads/support/params.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,CAAC,EAAE,MAAM,KAAK,CAAC;AAExB,iGAAiG;AAEjG,sFAAsF;AACtF,MAAM,GAAG,GAAG,GAAG,EAAE,CAAC,CAAC,CAAC,MAAM,EAAE,CAAC,KAAK,CAAC,qBAAqB,EAAE,4BAA4B,CAAC,CAAC;AAExF,MAAM,CAAC,MAAM,gBAAgB,GAAG;IAC9B,OAAO,EAAE,CAAC;SACP,IAAI,CAAC,CAAC,KAAK,EAAE,MAAM,EAAE,gBAAgB,EAAE,iBAAiB,EAAE,OAAO,CAAC,CAAC;SACnE,QAAQ,EAAE;SACV,QAAQ,CACP,oHAAoH,CACrH;IACH,KAAK,EAAE,GAAG,EAAE;SACT,QAAQ,EAAE;SACV,QAAQ,CACP,wHAAwH,CACzH;IACH,KAAK,EAAE,GAAG,EAAE;SACT,QAAQ,EAAE;SACV,QAAQ,CACP,qFAAqF,CACtF;CACJ,CAAC;AAEF,MAAM,CAAC,MAAM,kBAAkB,GAAG;IAChC,GAAG,gBAAgB;IACnB,SAAS,EAAE,CAAC;SACT,MAAM,EAAE;SACR,GAAG,CAAC,CAAC,CAAC;SACN,QAAQ,EAAE;SACV,QAAQ,CAAC,iEAAiE,CAAC;IAC9E,UAAU,EAAE,CAAC;SACV,MAAM,EAAE;SACR,GAAG,CAAC,CAAC,CAAC;SACN,QAAQ,EAAE;SACV,QAAQ,CAAC,kEAAkE,CAAC;IAC/E,SAAS,EAAE,CAAC;SACT,MAAM,EAAE;SACR,GAAG,CAAC,CAAC,CAAC;SACN,QAAQ,EAAE;SACV,QAAQ,CAAC,mEAAmE,CAAC;IAChF,gBAAgB,EAAE,CAAC;SAChB,OAAO,EAAE;SACT,QAAQ,EAAE;SACV,QAAQ,CAAC,oDAAoD,CAAC;IACjE,eAAe,EAAE,CAAC;SACf,OAAO,EAAE;SACT,QAAQ,EAAE;SACV,QAAQ,CAAC,kDAAkD,CAAC;CAChE,CAAC;AAEF,MAAM,CAAC,MAAM,WAAW,GAAG,CAAC,GAAW,EAAE,EAAE,CACzC,GAAG,EAAE,CAAC,QAAQ,CAAC,GAAG,GAAG,mDAAmD,CAAC,CAAC;AAE5E,MAAM,CAAC,MAAM,eAAe,GAAG;IAC7B,IAAI,EAAE,CAAC;SACJ,MAAM,EAAE;SACR,GAAG,CAAC,CAAC,CAAC;SACN,QAAQ,EAAE;SACV,QAAQ,CACP,4FAA4F,CAC7F;CACJ,CAAC;AAEF,MAAM,CAAC,MAAM,kBAAkB,GAAG;IAChC,OAAO,EAAE,CAAC;SACP,IAAI,CAAC,CAAC,KAAK,EAAE,MAAM,EAAE,gBAAgB,EAAE,iBAAiB,CAAC,CAAC;SAC1D,QAAQ,EAAE;SACV,QAAQ,CAAC,yEAAyE,CAAC;IACtF,KAAK,EAAE,gBAAgB,CAAC,KAAK;IAC7B,KAAK,EAAE,gBAAgB,CAAC,KAAK;IAC7B,SAAS,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,QAAQ,EAAE,CAAC,QAAQ,CAAC,6CAA6C,CAAC;IAC/F,IAAI,EAAE,CAAC;SACJ,MAAM,EAAE;SACR,GAAG,CAAC,CAAC,CAAC;SACN,QAAQ,EAAE;SACV,QAAQ,CAAC,+DAA+D,CAAC;IAC5E,IAAI,EAAE,CAAC;SACJ,IAAI,CAAC,CAAC,SAAS,EAAE,QAAQ,CAAC,CAAC;SAC3B,QAAQ,EAAE;SACV,QAAQ,CAAC,qDAAqD,CAAC;IAClE,WAAW,EAAE,CAAC;SACX,OAAO,EAAE;SACT,QAAQ,EAAE;SACV,QAAQ,CACP,2IAA2I,CAC5I;CACJ,CAAC"}
@@ -0,0 +1,17 @@
1
+ import { type ToolResult } from '../../domain/tool-result.js';
2
+ import type { CheckpointRef, RouteRef } from '../../gateway/index.js';
3
+ /** Cómo se nombra cada tipo de elemento en los fallos: [singular, plural]. */
4
+ export declare const VIGILANTE: [string, string];
5
+ export declare const CHECKPOINT: [string, string];
6
+ export declare const UBICACION: [string, string];
7
+ /** Dos checkpoints pueden llamarse igual en ubicaciones distintas: la opción lleva la ubicación. */
8
+ export declare const etiquetaCheckpoint: (c: CheckpointRef) => string;
9
+ /** Resuelve un nombre dicho por el usuario contra una lista, con el mismo contrato de ambigua / no encontrado. */
10
+ export declare function resolveNamed<T>(valor: string, items: readonly T[], nameOf: (item: T) => string, [singular, plural]: [string, string], etiqueta?: (item: T) => string): {
11
+ item: T;
12
+ } | ToolResult<never>;
13
+ /** Sin nombre de ruta: la única activa (o la única) vale; con varias, se pregunta. */
14
+ export declare function resolveRuta(ruta: string | undefined, rutas: RouteRef[]): {
15
+ item: RouteRef;
16
+ } | ToolResult<never>;
17
+ //# sourceMappingURL=resolve.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"resolve.d.ts","sourceRoot":"","sources":["../../../src/reads/support/resolve.ts"],"names":[],"mappings":"AACA,OAAO,EAAQ,KAAK,UAAU,EAAE,MAAM,6BAA6B,CAAC;AACpE,OAAO,KAAK,EAAE,aAAa,EAAE,QAAQ,EAAE,MAAM,wBAAwB,CAAC;AAGtE,8EAA8E;AAC9E,eAAO,MAAM,SAAS,EAAE,CAAC,MAAM,EAAE,MAAM,CAA+B,CAAC;AACvE,eAAO,MAAM,UAAU,EAAE,CAAC,MAAM,EAAE,MAAM,CAAiC,CAAC;AAC1E,eAAO,MAAM,SAAS,EAAE,CAAC,MAAM,EAAE,MAAM,CAAgC,CAAC;AAGxE,oGAAoG;AACpG,eAAO,MAAM,kBAAkB,GAAI,GAAG,aAAa,KAAG,MAAyC,CAAC;AAEhG,kHAAkH;AAClH,wBAAgB,YAAY,CAAC,CAAC,EAC5B,KAAK,EAAE,MAAM,EACb,KAAK,EAAE,SAAS,CAAC,EAAE,EACnB,MAAM,EAAE,CAAC,IAAI,EAAE,CAAC,KAAK,MAAM,EAC3B,CAAC,QAAQ,EAAE,MAAM,CAAC,EAAE,CAAC,MAAM,EAAE,MAAM,CAAC,EACpC,QAAQ,GAAE,CAAC,IAAI,EAAE,CAAC,KAAK,MAAe,GACrC;IAAE,IAAI,EAAE,CAAC,CAAA;CAAE,GAAG,UAAU,CAAC,KAAK,CAAC,CAOjC;AAED,sFAAsF;AACtF,wBAAgB,WAAW,CACzB,IAAI,EAAE,MAAM,GAAG,SAAS,EACxB,KAAK,EAAE,QAAQ,EAAE,GAChB;IAAE,IAAI,EAAE,QAAQ,CAAA;CAAE,GAAG,UAAU,CAAC,KAAK,CAAC,CAUxC"}
@@ -0,0 +1,33 @@
1
+ import { resolveByName } from '../../domain/resolve-by-name.js';
2
+ import { fail } from '../../domain/tool-result.js';
3
+ import { failAmbigua, failNoEncontrado, MAX_OPCIONES } from './results.js';
4
+ /** Cómo se nombra cada tipo de elemento en los fallos: [singular, plural]. */
5
+ export const VIGILANTE = ['vigilante', 'vigilantes'];
6
+ export const CHECKPOINT = ['checkpoint', 'checkpoints'];
7
+ export const UBICACION = ['ubicación', 'ubicaciones'];
8
+ const RUTA = ['ruta', 'rutas'];
9
+ /** Dos checkpoints pueden llamarse igual en ubicaciones distintas: la opción lleva la ubicación. */
10
+ export const etiquetaCheckpoint = (c) => `${c.name} (${c.locationName})`;
11
+ /** Resuelve un nombre dicho por el usuario contra una lista, con el mismo contrato de ambigua / no encontrado. */
12
+ export function resolveNamed(valor, items, nameOf, [singular, plural], etiqueta = nameOf) {
13
+ const match = resolveByName(valor, items, nameOf);
14
+ if (match.kind === 'found')
15
+ return { item: match.item };
16
+ if (match.kind === 'ambiguous') {
17
+ return failAmbigua(valor, plural, match.matches.slice(0, MAX_OPCIONES).map(etiqueta));
18
+ }
19
+ return failNoEncontrado(singular, items.slice(0, MAX_OPCIONES).map(etiqueta));
20
+ }
21
+ /** Sin nombre de ruta: la única activa (o la única) vale; con varias, se pregunta. */
22
+ export function resolveRuta(ruta, rutas) {
23
+ if (rutas.length === 0)
24
+ return fail('La organización no tiene ninguna ruta creada.');
25
+ if (ruta)
26
+ return resolveNamed(ruta, rutas, (r) => r.name, RUTA);
27
+ const activas = rutas.filter((r) => r.isActive);
28
+ const candidatas = activas.length > 0 ? activas : rutas;
29
+ if (candidatas.length === 1)
30
+ return { item: candidatas[0] };
31
+ return fail('ruta no indicada: hay varias, pregunta al usuario cuál de estas quiere', candidatas.map((r) => r.name));
32
+ }
33
+ //# sourceMappingURL=resolve.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"resolve.js","sourceRoot":"","sources":["../../../src/reads/support/resolve.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,aAAa,EAAE,MAAM,iCAAiC,CAAC;AAChE,OAAO,EAAE,IAAI,EAAmB,MAAM,6BAA6B,CAAC;AAEpE,OAAO,EAAE,WAAW,EAAE,gBAAgB,EAAE,YAAY,EAAE,MAAM,cAAc,CAAC;AAE3E,8EAA8E;AAC9E,MAAM,CAAC,MAAM,SAAS,GAAqB,CAAC,WAAW,EAAE,YAAY,CAAC,CAAC;AACvE,MAAM,CAAC,MAAM,UAAU,GAAqB,CAAC,YAAY,EAAE,aAAa,CAAC,CAAC;AAC1E,MAAM,CAAC,MAAM,SAAS,GAAqB,CAAC,WAAW,EAAE,aAAa,CAAC,CAAC;AACxE,MAAM,IAAI,GAAqB,CAAC,MAAM,EAAE,OAAO,CAAC,CAAC;AAEjD,oGAAoG;AACpG,MAAM,CAAC,MAAM,kBAAkB,GAAG,CAAC,CAAgB,EAAU,EAAE,CAAC,GAAG,CAAC,CAAC,IAAI,KAAK,CAAC,CAAC,YAAY,GAAG,CAAC;AAEhG,kHAAkH;AAClH,MAAM,UAAU,YAAY,CAC1B,KAAa,EACb,KAAmB,EACnB,MAA2B,EAC3B,CAAC,QAAQ,EAAE,MAAM,CAAmB,EACpC,WAAgC,MAAM;IAEtC,MAAM,KAAK,GAAG,aAAa,CAAC,KAAK,EAAE,KAAK,EAAE,MAAM,CAAC,CAAC;IAClD,IAAI,KAAK,CAAC,IAAI,KAAK,OAAO;QAAE,OAAO,EAAE,IAAI,EAAE,KAAK,CAAC,IAAI,EAAE,CAAC;IACxD,IAAI,KAAK,CAAC,IAAI,KAAK,WAAW,EAAE,CAAC;QAC/B,OAAO,WAAW,CAAC,KAAK,EAAE,MAAM,EAAE,KAAK,CAAC,OAAO,CAAC,KAAK,CAAC,CAAC,EAAE,YAAY,CAAC,CAAC,GAAG,CAAC,QAAQ,CAAC,CAAC,CAAC;IACxF,CAAC;IACD,OAAO,gBAAgB,CAAC,QAAQ,EAAE,KAAK,CAAC,KAAK,CAAC,CAAC,EAAE,YAAY,CAAC,CAAC,GAAG,CAAC,QAAQ,CAAC,CAAC,CAAC;AAChF,CAAC;AAED,sFAAsF;AACtF,MAAM,UAAU,WAAW,CACzB,IAAwB,EACxB,KAAiB;IAEjB,IAAI,KAAK,CAAC,MAAM,KAAK,CAAC;QAAE,OAAO,IAAI,CAAC,+CAA+C,CAAC,CAAC;IACrF,IAAI,IAAI;QAAE,OAAO,YAAY,CAAC,IAAI,EAAE,KAAK,EAAE,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,IAAI,EAAE,IAAI,CAAC,CAAC;IAChE,MAAM,OAAO,GAAG,KAAK,CAAC,MAAM,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,QAAQ,CAAC,CAAC;IAChD,MAAM,UAAU,GAAG,OAAO,CAAC,MAAM,GAAG,CAAC,CAAC,CAAC,CAAC,OAAO,CAAC,CAAC,CAAC,KAAK,CAAC;IACxD,IAAI,UAAU,CAAC,MAAM,KAAK,CAAC;QAAE,OAAO,EAAE,IAAI,EAAE,UAAU,CAAC,CAAC,CAAC,EAAE,CAAC;IAC5D,OAAO,IAAI,CACT,wEAAwE,EACxE,UAAU,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,IAAI,CAAC,CAC9B,CAAC;AACJ,CAAC"}
@@ -0,0 +1,22 @@
1
+ import { type ToolResult } from '../../domain/tool-result.js';
2
+ import type { ListaTruncable } from '../../gateway/index.js';
3
+ /** Coletilla de las descripciones de las capacidades que devuelven listas capadas. */
4
+ export declare const TRUNCADO_HINT = " Si el resultado trae `truncado: true`, los datos est\u00E1n CAPADOS: no afirmes totales ni ausencias (\"no se ha escaneado nunca\", \"solo hay N\"); dilo y acota el periodo.";
5
+ /** Opciones como mucho en una pregunta de desambiguación. */
6
+ export declare const MAX_OPCIONES = 15;
7
+ /** ¿Es un fallo ya listo para devolver (y no el valor resuelto)? */
8
+ export declare function isFail<T extends object>(x: T | ToolResult<never>): x is ToolResult<never>;
9
+ /**
10
+ * Mismo contrato para TODA ambigüedad (organización, vigilante, ruta): el modelo
11
+ * no tiene que aprenderse un `found:false`/`ambigua` distinto por capacidad.
12
+ */
13
+ export declare function failAmbigua(valor: string, queSon: string, opciones: string[]): ToolResult<never>;
14
+ /** Lo mismo cuando no hay ninguna coincidencia. */
15
+ export declare function failNoEncontrado(queSon: string, opciones?: string[]): ToolResult<never>;
16
+ /** Texto del aviso de truncado, compartido por las listas y por el ranking. */
17
+ export declare function avisoTruncado(devueltos: number, total: number | undefined, queSon: string): string;
18
+ /** Envuelve una lista posiblemente capada, avisando al modelo de que hay más datos. */
19
+ export declare function okLista<T>(lista: ListaTruncable<T>, queSon: string, avisosExtra?: string[]): ToolResult<T[]>;
20
+ /** Aviso cuando alguna ubicación no se pudo leer: sus checkpoints faltan de la lista. */
21
+ export declare function avisosUbicaciones(ubicacionesConError: number): string[];
22
+ //# sourceMappingURL=results.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"results.d.ts","sourceRoot":"","sources":["../../../src/reads/support/results.ts"],"names":[],"mappings":"AAAA,OAAO,EAAY,KAAK,UAAU,EAAE,MAAM,6BAA6B,CAAC;AACxE,OAAO,KAAK,EAAE,cAAc,EAAE,MAAM,wBAAwB,CAAC;AAE7D,sFAAsF;AACtF,eAAO,MAAM,aAAa,mLAC+I,CAAC;AAE1K,6DAA6D;AAC7D,eAAO,MAAM,YAAY,KAAK,CAAC;AAE/B,oEAAoE;AACpE,wBAAgB,MAAM,CAAC,CAAC,SAAS,MAAM,EAAE,CAAC,EAAE,CAAC,GAAG,UAAU,CAAC,KAAK,CAAC,GAAG,CAAC,IAAI,UAAU,CAAC,KAAK,CAAC,CAEzF;AAED;;;GAGG;AACH,wBAAgB,WAAW,CAAC,KAAK,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM,EAAE,QAAQ,EAAE,MAAM,EAAE,GAAG,UAAU,CAAC,KAAK,CAAC,CAKhG;AAED,mDAAmD;AACnD,wBAAgB,gBAAgB,CAAC,MAAM,EAAE,MAAM,EAAE,QAAQ,CAAC,EAAE,MAAM,EAAE,GAAG,UAAU,CAAC,KAAK,CAAC,CAEvF;AAED,+EAA+E;AAC/E,wBAAgB,aAAa,CAC3B,SAAS,EAAE,MAAM,EACjB,KAAK,EAAE,MAAM,GAAG,SAAS,EACzB,MAAM,EAAE,MAAM,GACb,MAAM,CAGR;AAED,uFAAuF;AACvF,wBAAgB,OAAO,CAAC,CAAC,EACvB,KAAK,EAAE,cAAc,CAAC,CAAC,CAAC,EACxB,MAAM,EAAE,MAAM,EACd,WAAW,GAAE,MAAM,EAAO,GACzB,UAAU,CAAC,CAAC,EAAE,CAAC,CAIjB;AAED,yFAAyF;AACzF,wBAAgB,iBAAiB,CAAC,mBAAmB,EAAE,MAAM,GAAG,MAAM,EAAE,CAMvE"}
@@ -0,0 +1,41 @@
1
+ import { fail, ok } from '../../domain/tool-result.js';
2
+ /** Coletilla de las descripciones de las capacidades que devuelven listas capadas. */
3
+ export const TRUNCADO_HINT = ' Si el resultado trae `truncado: true`, los datos están CAPADOS: no afirmes totales ni ausencias ("no se ha escaneado nunca", "solo hay N"); dilo y acota el periodo.';
4
+ /** Opciones como mucho en una pregunta de desambiguación. */
5
+ export const MAX_OPCIONES = 15;
6
+ /** ¿Es un fallo ya listo para devolver (y no el valor resuelto)? */
7
+ export function isFail(x) {
8
+ return 'ok' in x;
9
+ }
10
+ /**
11
+ * Mismo contrato para TODA ambigüedad (organización, vigilante, ruta): el modelo
12
+ * no tiene que aprenderse un `found:false`/`ambigua` distinto por capacidad.
13
+ */
14
+ export function failAmbigua(valor, queSon, opciones) {
15
+ return fail(`ambigua: «${valor}» coincide con varios/as ${queSon}; pregunta al usuario cuál de estas quiere`, opciones);
16
+ }
17
+ /** Lo mismo cuando no hay ninguna coincidencia. */
18
+ export function failNoEncontrado(queSon, opciones) {
19
+ return fail(`no encontrado: no hay ningún/a ${queSon} con ese nombre`, opciones);
20
+ }
21
+ /** Texto del aviso de truncado, compartido por las listas y por el ranking. */
22
+ export function avisoTruncado(devueltos, total, queSon) {
23
+ const deTotal = typeof total === 'number' ? ` de ${total}` : '';
24
+ return `Resultado TRUNCADO: se devuelven ${devueltos}${deTotal} ${queSon}. No afirmes totales ni ausencias; acota el periodo o el filtro.`;
25
+ }
26
+ /** Envuelve una lista posiblemente capada, avisando al modelo de que hay más datos. */
27
+ export function okLista(lista, queSon, avisosExtra = []) {
28
+ const avisos = [...avisosExtra];
29
+ if (lista.truncado)
30
+ avisos.push(avisoTruncado(lista.items.length, lista.total, queSon));
31
+ return ok(lista.items, { truncado: lista.truncado, avisos });
32
+ }
33
+ /** Aviso cuando alguna ubicación no se pudo leer: sus checkpoints faltan de la lista. */
34
+ export function avisosUbicaciones(ubicacionesConError) {
35
+ return ubicacionesConError > 0
36
+ ? [
37
+ `${ubicacionesConError} ubicación(es) no se pudieron consultar: faltan sus checkpoints. NO afirmes que un checkpoint no existe o no se ha escaneado.`,
38
+ ]
39
+ : [];
40
+ }
41
+ //# sourceMappingURL=results.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"results.js","sourceRoot":"","sources":["../../../src/reads/support/results.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,IAAI,EAAE,EAAE,EAAmB,MAAM,6BAA6B,CAAC;AAGxE,sFAAsF;AACtF,MAAM,CAAC,MAAM,aAAa,GACxB,uKAAuK,CAAC;AAE1K,6DAA6D;AAC7D,MAAM,CAAC,MAAM,YAAY,GAAG,EAAE,CAAC;AAE/B,oEAAoE;AACpE,MAAM,UAAU,MAAM,CAAmB,CAAwB;IAC/D,OAAO,IAAI,IAAI,CAAC,CAAC;AACnB,CAAC;AAED;;;GAGG;AACH,MAAM,UAAU,WAAW,CAAC,KAAa,EAAE,MAAc,EAAE,QAAkB;IAC3E,OAAO,IAAI,CACT,aAAa,KAAK,4BAA4B,MAAM,4CAA4C,EAChG,QAAQ,CACT,CAAC;AACJ,CAAC;AAED,mDAAmD;AACnD,MAAM,UAAU,gBAAgB,CAAC,MAAc,EAAE,QAAmB;IAClE,OAAO,IAAI,CAAC,kCAAkC,MAAM,iBAAiB,EAAE,QAAQ,CAAC,CAAC;AACnF,CAAC;AAED,+EAA+E;AAC/E,MAAM,UAAU,aAAa,CAC3B,SAAiB,EACjB,KAAyB,EACzB,MAAc;IAEd,MAAM,OAAO,GAAG,OAAO,KAAK,KAAK,QAAQ,CAAC,CAAC,CAAC,OAAO,KAAK,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC;IAChE,OAAO,oCAAoC,SAAS,GAAG,OAAO,IAAI,MAAM,kEAAkE,CAAC;AAC7I,CAAC;AAED,uFAAuF;AACvF,MAAM,UAAU,OAAO,CACrB,KAAwB,EACxB,MAAc,EACd,cAAwB,EAAE;IAE1B,MAAM,MAAM,GAAG,CAAC,GAAG,WAAW,CAAC,CAAC;IAChC,IAAI,KAAK,CAAC,QAAQ;QAAE,MAAM,CAAC,IAAI,CAAC,aAAa,CAAC,KAAK,CAAC,KAAK,CAAC,MAAM,EAAE,KAAK,CAAC,KAAK,EAAE,MAAM,CAAC,CAAC,CAAC;IACxF,OAAO,EAAE,CAAC,KAAK,CAAC,KAAK,EAAE,EAAE,QAAQ,EAAE,KAAK,CAAC,QAAQ,EAAE,MAAM,EAAE,CAAC,CAAC;AAC/D,CAAC;AAED,yFAAyF;AACzF,MAAM,UAAU,iBAAiB,CAAC,mBAA2B;IAC3D,OAAO,mBAAmB,GAAG,CAAC;QAC5B,CAAC,CAAC;YACE,GAAG,mBAAmB,+HAA+H;SACtJ;QACH,CAAC,CAAC,EAAE,CAAC;AACT,CAAC"}
@@ -0,0 +1,13 @@
1
+ import { type FixedTextLanguage } from '../../domain/language.js';
2
+ /** Cómo se llama cada rol en el panel (lecturas: lo que ve el modelo, en español). */
3
+ export declare const ROL_LABEL: Readonly<Partial<Record<string, string>>>;
4
+ /**
5
+ * Cómo se nombra cada rol en las confirmaciones y resultados de las acciones,
6
+ * en el idioma del cliente. Textos distintos de `ROL_LABEL` a propósito (son
7
+ * los que ya ve el cliente en las propuestas del bot): no se unifican sin
8
+ * decidirlo antes.
9
+ */
10
+ export declare const ROL_LABEL_ACCION: Record<'VIEWER' | 'EDITOR' | 'ADMIN', Record<FixedTextLanguage, string>>;
11
+ /** «de toda la organización» / «de la ubicación «X»». */
12
+ export declare function ambito(idioma: FixedTextLanguage, ubicacion: string | undefined): string;
13
+ //# sourceMappingURL=roles.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"roles.d.ts","sourceRoot":"","sources":["../../../src/reads/support/roles.ts"],"names":[],"mappings":"AAAA,OAAO,EAAe,KAAK,iBAAiB,EAAE,MAAM,0BAA0B,CAAC;AAE/E,sFAAsF;AACtF,eAAO,MAAM,SAAS,EAAE,QAAQ,CAAC,OAAO,CAAC,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,CAAC,CAI/D,CAAC;AAEF;;;;;GAKG;AACH,eAAO,MAAM,gBAAgB,EAAE,MAAM,CACnC,QAAQ,GAAG,QAAQ,GAAG,OAAO,EAC7B,MAAM,CAAC,iBAAiB,EAAE,MAAM,CAAC,CAKlC,CAAC;AAEF,yDAAyD;AACzD,wBAAgB,MAAM,CAAC,MAAM,EAAE,iBAAiB,EAAE,SAAS,EAAE,MAAM,GAAG,SAAS,GAAG,MAAM,CAMvF"}
@@ -0,0 +1,27 @@
1
+ import { segunIdioma } from '../../domain/language.js';
2
+ /** Cómo se llama cada rol en el panel (lecturas: lo que ve el modelo, en español). */
3
+ export const ROL_LABEL = {
4
+ ADMIN: 'Admin',
5
+ EDITOR: 'Editor',
6
+ VIEWER: 'Observador (Viewer)',
7
+ };
8
+ /**
9
+ * Cómo se nombra cada rol en las confirmaciones y resultados de las acciones,
10
+ * en el idioma del cliente. Textos distintos de `ROL_LABEL` a propósito (son
11
+ * los que ya ve el cliente en las propuestas del bot): no se unifican sin
12
+ * decidirlo antes.
13
+ */
14
+ export const ROL_LABEL_ACCION = {
15
+ VIEWER: { es: 'Viewer (solo ver)', en: 'Viewer (view only)', fr: 'Viewer (lecture seule)' },
16
+ EDITOR: { es: 'Editor', en: 'Editor', fr: 'Editor' },
17
+ ADMIN: { es: 'Admin', en: 'Admin', fr: 'Admin' },
18
+ };
19
+ /** «de toda la organización» / «de la ubicación «X»». */
20
+ export function ambito(idioma, ubicacion) {
21
+ return segunIdioma(idioma, {
22
+ es: ubicacion ? `de la ubicación «${ubicacion}»` : 'de toda la organización',
23
+ en: ubicacion ? `of the location «${ubicacion}»` : 'of the whole organization',
24
+ fr: ubicacion ? `du site «${ubicacion}»` : "de toute l'organisation",
25
+ });
26
+ }
27
+ //# sourceMappingURL=roles.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"roles.js","sourceRoot":"","sources":["../../../src/reads/support/roles.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,WAAW,EAA0B,MAAM,0BAA0B,CAAC;AAE/E,sFAAsF;AACtF,MAAM,CAAC,MAAM,SAAS,GAA8C;IAClE,KAAK,EAAE,OAAO;IACd,MAAM,EAAE,QAAQ;IAChB,MAAM,EAAE,qBAAqB;CAC9B,CAAC;AAEF;;;;;GAKG;AACH,MAAM,CAAC,MAAM,gBAAgB,GAGzB;IACF,MAAM,EAAE,EAAE,EAAE,EAAE,mBAAmB,EAAE,EAAE,EAAE,oBAAoB,EAAE,EAAE,EAAE,wBAAwB,EAAE;IAC3F,MAAM,EAAE,EAAE,EAAE,EAAE,QAAQ,EAAE,EAAE,EAAE,QAAQ,EAAE,EAAE,EAAE,QAAQ,EAAE;IACpD,KAAK,EAAE,EAAE,EAAE,EAAE,OAAO,EAAE,EAAE,EAAE,OAAO,EAAE,EAAE,EAAE,OAAO,EAAE;CACjD,CAAC;AAEF,yDAAyD;AACzD,MAAM,UAAU,MAAM,CAAC,MAAyB,EAAE,SAA6B;IAC7E,OAAO,WAAW,CAAC,MAAM,EAAE;QACzB,EAAE,EAAE,SAAS,CAAC,CAAC,CAAC,oBAAoB,SAAS,GAAG,CAAC,CAAC,CAAC,yBAAyB;QAC5E,EAAE,EAAE,SAAS,CAAC,CAAC,CAAC,oBAAoB,SAAS,GAAG,CAAC,CAAC,CAAC,2BAA2B;QAC9E,EAAE,EAAE,SAAS,CAAC,CAAC,CAAC,YAAY,SAAS,GAAG,CAAC,CAAC,CAAC,yBAAyB;KACrE,CAAC,CAAC;AACL,CAAC"}
@@ -0,0 +1,31 @@
1
+ import type { ToolResult } from '../../domain/tool-result.js';
2
+ import type { PatrolTechGateway, RecentScan, ScanQuery } from '../../gateway/index.js';
3
+ export declare const TAM_PAGINA = 100;
4
+ export declare const MAX_FILAS = 2000;
5
+ export declare const DIA_MS = 86400000;
6
+ /**
7
+ * Los escaneos que casan con `query`, de 100 en 100 y del más reciente al más
8
+ * antiguo, hasta `maxFilas` o hasta que `seguir` (tras cada página) diga que ya
9
+ * basta. `hayMas`: quedaron escaneos sin leer.
10
+ */
11
+ export declare function paginarEscaneos(gateway: PatrolTechGateway, orgId: string, token: string, query: ScanQuery, { maxFilas, seguir, }?: {
12
+ maxFilas?: number;
13
+ seguir?: (pagina: RecentScan[]) => boolean;
14
+ }): Promise<{
15
+ escaneos: RecentScan[];
16
+ hayMas: boolean;
17
+ }>;
18
+ /** Filtros de escaneos tal como los dice el usuario (por nombre). */
19
+ export interface FiltrosEscaneos {
20
+ vigilante?: string;
21
+ checkpoint?: string;
22
+ ubicacion?: string;
23
+ solo_sospechosos?: boolean;
24
+ solo_no_validos?: boolean;
25
+ }
26
+ /**
27
+ * Filtros de escaneos dichos por su nombre → ids del backend (que no filtra por
28
+ * nombre). Lo comparten consultar_ultimos_scans y enviar_excel_escaneos.
29
+ */
30
+ export declare function resolverFiltrosEscaneos(gateway: PatrolTechGateway, orgId: string, token: string, args: FiltrosEscaneos): Promise<ScanQuery | ToolResult<never>>;
31
+ //# sourceMappingURL=scans.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"scans.d.ts","sourceRoot":"","sources":["../../../src/reads/support/scans.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,UAAU,EAAE,MAAM,6BAA6B,CAAC;AAC9D,OAAO,KAAK,EAAE,iBAAiB,EAAE,UAAU,EAAE,SAAS,EAAE,MAAM,wBAAwB,CAAC;AAKvF,eAAO,MAAM,UAAU,MAAM,CAAC;AAI9B,eAAO,MAAM,SAAS,OAAO,CAAC;AAC9B,eAAO,MAAM,MAAM,WAAa,CAAC;AAEjC;;;;GAIG;AACH,wBAAsB,eAAe,CACnC,OAAO,EAAE,iBAAiB,EAC1B,KAAK,EAAE,MAAM,EACb,KAAK,EAAE,MAAM,EACb,KAAK,EAAE,SAAS,EAChB,EACE,QAAoB,EACpB,MAAmB,GACpB,GAAE;IAAE,QAAQ,CAAC,EAAE,MAAM,CAAC;IAAC,MAAM,CAAC,EAAE,CAAC,MAAM,EAAE,UAAU,EAAE,KAAK,OAAO,CAAA;CAAO,GACxE,OAAO,CAAC;IAAE,QAAQ,EAAE,UAAU,EAAE,CAAC;IAAC,MAAM,EAAE,OAAO,CAAA;CAAE,CAAC,CActD;AAED,qEAAqE;AACrE,MAAM,WAAW,eAAe;IAC9B,SAAS,CAAC,EAAE,MAAM,CAAC;IACnB,UAAU,CAAC,EAAE,MAAM,CAAC;IACpB,SAAS,CAAC,EAAE,MAAM,CAAC;IACnB,gBAAgB,CAAC,EAAE,OAAO,CAAC;IAC3B,eAAe,CAAC,EAAE,OAAO,CAAC;CAC3B;AAED;;;GAGG;AACH,wBAAsB,uBAAuB,CAC3C,OAAO,EAAE,iBAAiB,EAC1B,KAAK,EAAE,MAAM,EACb,KAAK,EAAE,MAAM,EACb,IAAI,EAAE,eAAe,GACpB,OAAO,CAAC,SAAS,GAAG,UAAU,CAAC,KAAK,CAAC,CAAC,CAiCxC"}
@@ -0,0 +1,66 @@
1
+ import { isFail } from './results.js';
2
+ import { CHECKPOINT, etiquetaCheckpoint, resolveNamed, UBICACION, VIGILANTE } from './resolve.js';
3
+ // El backend da como mucho 100 filas por página (escaneos y registros de acceso).
4
+ export const TAM_PAGINA = 100;
5
+ // Tope de 2.000 filas (20 páginas) para no colgar al consumidor ni mandar
6
+ // ficheros enormes por el chat; más allá, que acote el periodo o los filtros, o
7
+ // exporte desde el panel.
8
+ export const MAX_FILAS = 2000;
9
+ export const DIA_MS = 86_400_000;
10
+ /**
11
+ * Los escaneos que casan con `query`, de 100 en 100 y del más reciente al más
12
+ * antiguo, hasta `maxFilas` o hasta que `seguir` (tras cada página) diga que ya
13
+ * basta. `hayMas`: quedaron escaneos sin leer.
14
+ */
15
+ export async function paginarEscaneos(gateway, orgId, token, query, { maxFilas = MAX_FILAS, seguir = () => true, } = {}) {
16
+ const escaneos = [];
17
+ let hayMas = true;
18
+ for (let page = 1; hayMas && escaneos.length < maxFilas; page++) {
19
+ const { items, total } = await gateway.getRecentScans(orgId, token, {
20
+ ...query,
21
+ limit: TAM_PAGINA,
22
+ page,
23
+ });
24
+ escaneos.push(...items);
25
+ hayMas = items.length === TAM_PAGINA && (total === undefined || escaneos.length < total);
26
+ if (!seguir(items))
27
+ break;
28
+ }
29
+ return { escaneos, hayMas };
30
+ }
31
+ /**
32
+ * Filtros de escaneos dichos por su nombre → ids del backend (que no filtra por
33
+ * nombre). Lo comparten consultar_ultimos_scans y enviar_excel_escaneos.
34
+ */
35
+ export async function resolverFiltrosEscaneos(gateway, orgId, token, args) {
36
+ const filtros = {
37
+ soloSospechosos: args.solo_sospechosos,
38
+ soloNoValidos: args.solo_no_validos,
39
+ };
40
+ if (args.vigilante) {
41
+ const vigilantes = await gateway.listPatrollers(orgId, token);
42
+ const r = resolveNamed(args.vigilante, vigilantes.items, (p) => p.name, VIGILANTE);
43
+ if (isFail(r))
44
+ return r;
45
+ filtros.patrollerId = r.item.id;
46
+ }
47
+ if (args.ubicacion) {
48
+ const ubicaciones = await gateway.listLocations(orgId, token);
49
+ const r = resolveNamed(args.ubicacion, ubicaciones, (l) => l.name, UBICACION);
50
+ if (isFail(r))
51
+ return r;
52
+ filtros.locationId = r.item.id;
53
+ }
54
+ if (args.checkpoint) {
55
+ const { items } = await gateway.listCheckpoints(orgId, token);
56
+ const candidatos = filtros.locationId
57
+ ? items.filter((c) => c.locationId === filtros.locationId)
58
+ : items;
59
+ const r = resolveNamed(args.checkpoint, candidatos, (c) => c.name, CHECKPOINT, etiquetaCheckpoint);
60
+ if (isFail(r))
61
+ return r;
62
+ filtros.checkpointId = r.item.id;
63
+ }
64
+ return filtros;
65
+ }
66
+ //# sourceMappingURL=scans.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"scans.js","sourceRoot":"","sources":["../../../src/reads/support/scans.ts"],"names":[],"mappings":"AAEA,OAAO,EAAE,MAAM,EAAE,MAAM,cAAc,CAAC;AACtC,OAAO,EAAE,UAAU,EAAE,kBAAkB,EAAE,YAAY,EAAE,SAAS,EAAE,SAAS,EAAE,MAAM,cAAc,CAAC;AAElG,kFAAkF;AAClF,MAAM,CAAC,MAAM,UAAU,GAAG,GAAG,CAAC;AAC9B,0EAA0E;AAC1E,gFAAgF;AAChF,0BAA0B;AAC1B,MAAM,CAAC,MAAM,SAAS,GAAG,IAAI,CAAC;AAC9B,MAAM,CAAC,MAAM,MAAM,GAAG,UAAU,CAAC;AAEjC;;;;GAIG;AACH,MAAM,CAAC,KAAK,UAAU,eAAe,CACnC,OAA0B,EAC1B,KAAa,EACb,KAAa,EACb,KAAgB,EAChB,EACE,QAAQ,GAAG,SAAS,EACpB,MAAM,GAAG,GAAG,EAAE,CAAC,IAAI,MACkD,EAAE;IAEzE,MAAM,QAAQ,GAAiB,EAAE,CAAC;IAClC,IAAI,MAAM,GAAG,IAAI,CAAC;IAClB,KAAK,IAAI,IAAI,GAAG,CAAC,EAAE,MAAM,IAAI,QAAQ,CAAC,MAAM,GAAG,QAAQ,EAAE,IAAI,EAAE,EAAE,CAAC;QAChE,MAAM,EAAE,KAAK,EAAE,KAAK,EAAE,GAAG,MAAM,OAAO,CAAC,cAAc,CAAC,KAAK,EAAE,KAAK,EAAE;YAClE,GAAG,KAAK;YACR,KAAK,EAAE,UAAU;YACjB,IAAI;SACL,CAAC,CAAC;QACH,QAAQ,CAAC,IAAI,CAAC,GAAG,KAAK,CAAC,CAAC;QACxB,MAAM,GAAG,KAAK,CAAC,MAAM,KAAK,UAAU,IAAI,CAAC,KAAK,KAAK,SAAS,IAAI,QAAQ,CAAC,MAAM,GAAG,KAAK,CAAC,CAAC;QACzF,IAAI,CAAC,MAAM,CAAC,KAAK,CAAC;YAAE,MAAM;IAC5B,CAAC;IACD,OAAO,EAAE,QAAQ,EAAE,MAAM,EAAE,CAAC;AAC9B,CAAC;AAWD;;;GAGG;AACH,MAAM,CAAC,KAAK,UAAU,uBAAuB,CAC3C,OAA0B,EAC1B,KAAa,EACb,KAAa,EACb,IAAqB;IAErB,MAAM,OAAO,GAAc;QACzB,eAAe,EAAE,IAAI,CAAC,gBAAgB;QACtC,aAAa,EAAE,IAAI,CAAC,eAAe;KACpC,CAAC;IACF,IAAI,IAAI,CAAC,SAAS,EAAE,CAAC;QACnB,MAAM,UAAU,GAAG,MAAM,OAAO,CAAC,cAAc,CAAC,KAAK,EAAE,KAAK,CAAC,CAAC;QAC9D,MAAM,CAAC,GAAG,YAAY,CAAC,IAAI,CAAC,SAAS,EAAE,UAAU,CAAC,KAAK,EAAE,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,IAAI,EAAE,SAAS,CAAC,CAAC;QACnF,IAAI,MAAM,CAAC,CAAC,CAAC;YAAE,OAAO,CAAC,CAAC;QACxB,OAAO,CAAC,WAAW,GAAG,CAAC,CAAC,IAAI,CAAC,EAAE,CAAC;IAClC,CAAC;IACD,IAAI,IAAI,CAAC,SAAS,EAAE,CAAC;QACnB,MAAM,WAAW,GAAG,MAAM,OAAO,CAAC,aAAa,CAAC,KAAK,EAAE,KAAK,CAAC,CAAC;QAC9D,MAAM,CAAC,GAAG,YAAY,CAAC,IAAI,CAAC,SAAS,EAAE,WAAW,EAAE,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,IAAI,EAAE,SAAS,CAAC,CAAC;QAC9E,IAAI,MAAM,CAAC,CAAC,CAAC;YAAE,OAAO,CAAC,CAAC;QACxB,OAAO,CAAC,UAAU,GAAG,CAAC,CAAC,IAAI,CAAC,EAAE,CAAC;IACjC,CAAC;IACD,IAAI,IAAI,CAAC,UAAU,EAAE,CAAC;QACpB,MAAM,EAAE,KAAK,EAAE,GAAG,MAAM,OAAO,CAAC,eAAe,CAAC,KAAK,EAAE,KAAK,CAAC,CAAC;QAC9D,MAAM,UAAU,GAAG,OAAO,CAAC,UAAU;YACnC,CAAC,CAAC,KAAK,CAAC,MAAM,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,UAAU,KAAK,OAAO,CAAC,UAAU,CAAC;YAC1D,CAAC,CAAC,KAAK,CAAC;QACV,MAAM,CAAC,GAAG,YAAY,CACpB,IAAI,CAAC,UAAU,EACf,UAAU,EACV,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,IAAI,EACb,UAAU,EACV,kBAAkB,CACnB,CAAC;QACF,IAAI,MAAM,CAAC,CAAC,CAAC;YAAE,OAAO,CAAC,CAAC;QACxB,OAAO,CAAC,YAAY,GAAG,CAAC,CAAC,IAAI,CAAC,EAAE,CAAC;IACnC,CAAC;IACD,OAAO,OAAO,CAAC;AACjB,CAAC"}
@@ -0,0 +1,48 @@
1
+ import type { z } from 'zod';
2
+ import type { SessionContext } from '../context.js';
3
+ import type { ToolResult } from '../domain/tool-result.js';
4
+ import type { FileSink } from '../ports/FileSink.js';
5
+ import type { CapabilityDeps, CapabilityEnv } from '../deps.js';
6
+ /**
7
+ * El contexto de una lectura: el de la sesión (`SessionContext`) y, si el canal
8
+ * puede entregarlos, dónde dejar los ficheros. La organización la resuelve el
9
+ * consumidor con `resolveOrganization`, solo entre `organizations`; el
10
+ * envoltorio de `readCapabilities` comprueba que sea una de ellas y usa SU
11
+ * entrada (rol y ámbito de la sesión).
12
+ */
13
+ export interface CapabilityContext extends SessionContext {
14
+ /**
15
+ * Dónde dejar el QR y los Excel de ESTA llamada (la conversación o la sesión
16
+ * del usuario). Va en el contexto y no en las dependencias: un `FileSink`
17
+ * compartido entre usuarios mandaría los ficheros de uno a otro.
18
+ */
19
+ files?: FileSink;
20
+ }
21
+ /**
22
+ * Una capacidad de lectura. `params` son sus parámetros PROPIOS: el de la
23
+ * organización no aparece nunca aquí (lo añade el consumidor solo si el usuario
24
+ * tiene más de una y lo resuelve con `resolveOrganization`).
25
+ */
26
+ export interface ReadCapability<P extends z.ZodRawShape = z.ZodRawShape> {
27
+ /** Nombre de la herramienta (el del bot, p. ej. `consultar_estado_rondas`). */
28
+ name: string;
29
+ description: string;
30
+ params: P;
31
+ call(ctx: CapabilityContext, args: z.infer<z.ZodObject<P>>): Promise<ToolResult<unknown>>;
32
+ }
33
+ /** Declara una capacidad conservando la inferencia de `params` en `call`. */
34
+ export declare function defineRead<P extends z.ZodRawShape>(read: ReadCapability<P>): ReadCapability;
35
+ /** Dependencias de `readCapabilities`: las comunes y si el canal entrega ficheros. */
36
+ export interface ReadDeps extends CapabilityDeps {
37
+ /**
38
+ * true = el canal puede entregar ficheros: existen `enviar_qr_checkpoint` y
39
+ * los dos `enviar_excel_*`, que los dejan en `ctx.files` de cada llamada. Por
40
+ * defecto, false (no se ofrecen).
41
+ */
42
+ offerFiles?: boolean;
43
+ }
44
+ /** Las dependencias ya con sus valores por defecto, tal como las reciben las áreas. */
45
+ export interface ReadEnv extends CapabilityEnv {
46
+ offerFiles: boolean;
47
+ }
48
+ //# sourceMappingURL=types.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"types.d.ts","sourceRoot":"","sources":["../../src/reads/types.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,CAAC,EAAE,MAAM,KAAK,CAAC;AAC7B,OAAO,KAAK,EAAE,cAAc,EAAE,MAAM,eAAe,CAAC;AACpD,OAAO,KAAK,EAAE,UAAU,EAAE,MAAM,0BAA0B,CAAC;AAC3D,OAAO,KAAK,EAAE,QAAQ,EAAE,MAAM,sBAAsB,CAAC;AACrD,OAAO,KAAK,EAAE,cAAc,EAAE,aAAa,EAAE,MAAM,YAAY,CAAC;AAEhE;;;;;;GAMG;AACH,MAAM,WAAW,iBAAkB,SAAQ,cAAc;IACvD;;;;OAIG;IACH,KAAK,CAAC,EAAE,QAAQ,CAAC;CAClB;AAED;;;;GAIG;AACH,MAAM,WAAW,cAAc,CAAC,CAAC,SAAS,CAAC,CAAC,WAAW,GAAG,CAAC,CAAC,WAAW;IACrE,+EAA+E;IAC/E,IAAI,EAAE,MAAM,CAAC;IACb,WAAW,EAAE,MAAM,CAAC;IACpB,MAAM,EAAE,CAAC,CAAC;IACV,IAAI,CAAC,GAAG,EAAE,iBAAiB,EAAE,IAAI,EAAE,CAAC,CAAC,KAAK,CAAC,CAAC,CAAC,SAAS,CAAC,CAAC,CAAC,CAAC,GAAG,OAAO,CAAC,UAAU,CAAC,OAAO,CAAC,CAAC,CAAC;CAC3F;AAED,6EAA6E;AAC7E,wBAAgB,UAAU,CAAC,CAAC,SAAS,CAAC,CAAC,WAAW,EAAE,IAAI,EAAE,cAAc,CAAC,CAAC,CAAC,GAAG,cAAc,CAE3F;AAED,sFAAsF;AACtF,MAAM,WAAW,QAAS,SAAQ,cAAc;IAC9C;;;;OAIG;IACH,UAAU,CAAC,EAAE,OAAO,CAAC;CACtB;AAED,uFAAuF;AACvF,MAAM,WAAW,OAAQ,SAAQ,aAAa;IAC5C,UAAU,EAAE,OAAO,CAAC;CACrB"}
@@ -0,0 +1,5 @@
1
+ /** Declara una capacidad conservando la inferencia de `params` en `call`. */
2
+ export function defineRead(read) {
3
+ return read;
4
+ }
5
+ //# sourceMappingURL=types.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"types.js","sourceRoot":"","sources":["../../src/reads/types.ts"],"names":[],"mappings":"AAmCA,6EAA6E;AAC7E,MAAM,UAAU,UAAU,CAA0B,IAAuB;IACzE,OAAO,IAAI,CAAC;AACd,CAAC"}
@@ -0,0 +1,4 @@
1
+ import { type ReadCapability, type ReadEnv } from './types.js';
2
+ /** Usuarios del panel con su rol y ámbito. */
3
+ export declare function userReads({ gateway, upsell }: ReadEnv): ReadCapability[];
4
+ //# sourceMappingURL=users.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"users.d.ts","sourceRoot":"","sources":["../../src/reads/users.ts"],"names":[],"mappings":"AAIA,OAAO,EAAc,KAAK,cAAc,EAAE,KAAK,OAAO,EAAE,MAAM,YAAY,CAAC;AAuB3E,8CAA8C;AAC9C,wBAAgB,SAAS,CAAC,EAAE,OAAO,EAAE,MAAM,EAAE,EAAE,OAAO,GAAG,cAAc,EAAE,CAqCxE"}
@@ -0,0 +1,57 @@
1
+ import { PatrolTechApiError } from '../domain/backend-errors.js';
2
+ import { fail, ok } from '../domain/tool-result.js';
3
+ import { ROL_LABEL } from './support/roles.js';
4
+ import { defineRead } from './types.js';
5
+ const usuariosRolesDesc = 'Lista los usuarios del panel de la organización (gestores y observadores) con su rol (Admin, Editor u Observador) y su ámbito (toda la organización o una ubicación), y explica qué puede cambiar cada rol. Úsala para «¿quién puede cambiar rutas, checkpoints o vigilantes?», «¿qué usuarios tenemos?». Solo la puede consultar un Admin de la organización: si falla por permisos, explícalo.';
6
+ const AMBITO_DE_LOS_ROLES = 'Un rol de organización vale para todas las ubicaciones; uno de ubicación, solo para esa (con los dos, vale el más alto). Con rol solo de ubicación no se pueden ver ni exportar los escaneos, ver o crear patrulleros, crear rutas, gestionar chips NFC ni generar el certificado.';
7
+ /**
8
+ * Qué puede hacer cada rol (Admin, Editor, Viewer) y con qué ámbito.
9
+ * Sin upsell (MCP) se omite lo de Licencia, facturas y pagos.
10
+ */
11
+ function queHaceCadaRol(upsell) {
12
+ return {
13
+ observador: upsell
14
+ ? 'Solo consulta: no crea ni edita nada, no imprime QR y no ve Licencia.'
15
+ : 'Solo consulta: no crea ni edita nada y no imprime QR.',
16
+ editor: `Además de consultar, crea y edita checkpoints, rutas, patrulleros (vigilantes), personas autorizadas e incidencias (en el panel)${upsell ? '; ve Licencia y facturas, pero no cambia el plan.' : '.'}`,
17
+ admin: `Además de lo del Editor, en el panel: usuarios y roles, ubicaciones, datos de empresa, privacidad del vigilante, Apps, zonas de acceso, categorías y plantillas de incidencias${upsell ? ', y pagos.' : '.'}`,
18
+ ambito: AMBITO_DE_LOS_ROLES,
19
+ };
20
+ }
21
+ /** Usuarios del panel con su rol y ámbito. */
22
+ export function userReads({ gateway, upsell }) {
23
+ return [
24
+ defineRead({
25
+ name: 'consultar_usuarios_y_roles',
26
+ description: usuariosRolesDesc,
27
+ params: {},
28
+ call: async ({ org, token }) => {
29
+ let usuarios;
30
+ try {
31
+ usuarios = await gateway.listOrgUsers(org.orgId, token);
32
+ }
33
+ catch (err) {
34
+ if (err instanceof PatrolTechApiError && err.status === 403) {
35
+ return fail('Solo un Admin de la organización puede ver sus usuarios y roles (en el panel, Usuarios). Con el rol de este usuario no se pueden consultar: que se lo pregunte a un Admin de su cuenta.');
36
+ }
37
+ throw err;
38
+ }
39
+ const ubicaciones = new Map((await gateway.listLocations(org.orgId, token)).map((l) => [l.id, l.name]));
40
+ return ok({
41
+ usuarios: usuarios.map((u) => ({
42
+ nombre: u.nombre,
43
+ email: u.email,
44
+ roles: u.roles.map((r) => {
45
+ const rol = ROL_LABEL[r.rol] ?? r.rol;
46
+ return r.ambito === 'LOCATION'
47
+ ? `${rol} de la ubicación «${ubicaciones.get(r.scopeId) ?? r.scopeId}»`
48
+ : `${rol} de toda la organización`;
49
+ }),
50
+ })),
51
+ queHaceCadaRol: queHaceCadaRol(upsell),
52
+ });
53
+ },
54
+ }),
55
+ ];
56
+ }
57
+ //# sourceMappingURL=users.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"users.js","sourceRoot":"","sources":["../../src/reads/users.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,kBAAkB,EAAE,MAAM,6BAA6B,CAAC;AACjE,OAAO,EAAE,IAAI,EAAE,EAAE,EAAE,MAAM,0BAA0B,CAAC;AAEpD,OAAO,EAAE,SAAS,EAAE,MAAM,oBAAoB,CAAC;AAC/C,OAAO,EAAE,UAAU,EAAqC,MAAM,YAAY,CAAC;AAE3E,MAAM,iBAAiB,GACrB,kYAAkY,CAAC;AAErY,MAAM,mBAAmB,GACvB,oRAAoR,CAAC;AAEvR;;;GAGG;AACH,SAAS,cAAc,CAAC,MAAe;IACrC,OAAO;QACL,UAAU,EAAE,MAAM;YAChB,CAAC,CAAC,uEAAuE;YACzE,CAAC,CAAC,uDAAuD;QAC3D,MAAM,EAAE,mIAAmI,MAAM,CAAC,CAAC,CAAC,mDAAmD,CAAC,CAAC,CAAC,GAAG,EAAE;QAC/M,KAAK,EAAE,iLAAiL,MAAM,CAAC,CAAC,CAAC,YAAY,CAAC,CAAC,CAAC,GAAG,EAAE;QACrN,MAAM,EAAE,mBAAmB;KAC5B,CAAC;AACJ,CAAC;AAED,8CAA8C;AAC9C,MAAM,UAAU,SAAS,CAAC,EAAE,OAAO,EAAE,MAAM,EAAW;IACpD,OAAO;QACL,UAAU,CAAC;YACT,IAAI,EAAE,4BAA4B;YAClC,WAAW,EAAE,iBAAiB;YAC9B,MAAM,EAAE,EAAE;YACV,IAAI,EAAE,KAAK,EAAE,EAAE,GAAG,EAAE,KAAK,EAAE,EAAE,EAAE;gBAC7B,IAAI,QAAmB,CAAC;gBACxB,IAAI,CAAC;oBACH,QAAQ,GAAG,MAAM,OAAO,CAAC,YAAY,CAAC,GAAG,CAAC,KAAK,EAAE,KAAK,CAAC,CAAC;gBAC1D,CAAC;gBAAC,OAAO,GAAG,EAAE,CAAC;oBACb,IAAI,GAAG,YAAY,kBAAkB,IAAI,GAAG,CAAC,MAAM,KAAK,GAAG,EAAE,CAAC;wBAC5D,OAAO,IAAI,CACT,yLAAyL,CAC1L,CAAC;oBACJ,CAAC;oBACD,MAAM,GAAG,CAAC;gBACZ,CAAC;gBACD,MAAM,WAAW,GAAG,IAAI,GAAG,CACzB,CAAC,MAAM,OAAO,CAAC,aAAa,CAAC,GAAG,CAAC,KAAK,EAAE,KAAK,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,IAAI,CAAC,CAAC,CAC3E,CAAC;gBACF,OAAO,EAAE,CAAC;oBACR,QAAQ,EAAE,QAAQ,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC;wBAC7B,MAAM,EAAE,CAAC,CAAC,MAAM;wBAChB,KAAK,EAAE,CAAC,CAAC,KAAK;wBACd,KAAK,EAAE,CAAC,CAAC,KAAK,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,EAAE;4BACvB,MAAM,GAAG,GAAG,SAAS,CAAC,CAAC,CAAC,GAAG,CAAC,IAAI,CAAC,CAAC,GAAG,CAAC;4BACtC,OAAO,CAAC,CAAC,MAAM,KAAK,UAAU;gCAC5B,CAAC,CAAC,GAAG,GAAG,qBAAqB,WAAW,CAAC,GAAG,CAAC,CAAC,CAAC,OAAO,CAAC,IAAI,CAAC,CAAC,OAAO,GAAG;gCACvE,CAAC,CAAC,GAAG,GAAG,0BAA0B,CAAC;wBACvC,CAAC,CAAC;qBACH,CAAC,CAAC;oBACH,cAAc,EAAE,cAAc,CAAC,MAAM,CAAC;iBACvC,CAAC,CAAC;YACL,CAAC;SACF,CAAC;KACH,CAAC;AACJ,CAAC"}