@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,159 @@
1
+ import { z } from 'zod';
2
+ import { isFeatureDisabled } from '../domain/backend-errors.js';
3
+ import { INCIDENT_STATUS_LABELS, INCIDENT_STATUS_PARAM, INCIDENT_STATUS_PARAMS, } from '../domain/incident-status.js';
4
+ import { incidentPriorityLabel } from '../domain/incident-priority.js';
5
+ import { resolveByName } from '../domain/resolve-by-name.js';
6
+ import { fail, ok } from '../domain/tool-result.js';
7
+ import { failAmbigua, failNoEncontrado, isFail, MAX_OPCIONES, okLista, TRUNCADO_HINT, } from './support/results.js';
8
+ import { defineRead } from './types.js';
9
+ const incidenciasDesc = 'Lista las incidencias de la App de Incidencias de la organización, de la más reciente a la más antigua: número en la lista, `id`, título, estado (Abierto, En progreso, Resuelto, Cerrado, Descartado), a quién está asignada y fecha (UTC). Admite filtrar por estado. Úsala para «¿qué incidencias hay abiertas?» o antes de proponer_actualizar_incidencia para saber cuál es (pásale el título o el `id`, no el número).' +
10
+ TRUNCADO_HINT;
11
+ const incidenciaDesc = 'Detalle de UNA incidencia de la App de Incidencias: descripción, estado, prioridad, categoría, quién la reportó y a quién está asignada, checkpoints vinculados, el historial (comentarios y cambios de estado con autor y fecha UTC) y cuántas fotos y vídeos tiene. Úsala cuando pregunten qué pasó en una incidencia, su descripción o sus comentarios. Búscala por su título, su `id` o su número en consultar_incidencias. Las fotos y vídeos no se pueden enviar desde aquí: se ven en el panel (Incidencias).';
12
+ const APP_INCIDENCIAS_APAGADA = 'La App de Incidencias no está activa en esta organización: no hay incidencias. La activa un Admin en el panel, en Apps → Gestión de Incidencias.';
13
+ // El historial va al modelo entero hasta 30 entradas; las incidencias
14
+ // con más vida se cortan por las más recientes y se avisa.
15
+ const MAX_HISTORIAL = 30;
16
+ /** Las incidencias, o el fallo de «App apagada» si el backend la tiene desactivada. */
17
+ async function listarIncidencias(gateway, orgId, token, opts) {
18
+ try {
19
+ return await gateway.listIncidents(orgId, token, opts);
20
+ }
21
+ catch (err) {
22
+ if (isFeatureDisabled(err))
23
+ return fail(APP_INCIDENCIAS_APAGADA);
24
+ throw err;
25
+ }
26
+ }
27
+ /** El valor de un cambio en palabras del panel (los estados y prioridades vienen como códigos). */
28
+ function valorCambio(v) {
29
+ if (!v)
30
+ return '(vacío)';
31
+ if (v in INCIDENT_STATUS_LABELS)
32
+ return INCIDENT_STATUS_LABELS[v].es;
33
+ return incidentPriorityLabel(v);
34
+ }
35
+ /** Una entrada del historial en una frase, sin URLs. */
36
+ function queEntrada(e) {
37
+ const adjunto = e.conAdjunto ? ' (con un adjunto)' : '';
38
+ switch (e.tipo) {
39
+ case 'CREATED':
40
+ return `Creó la incidencia${adjunto}`;
41
+ case 'STATUS_CHANGE':
42
+ return `Cambió el estado: ${valorCambio(e.antes)} → ${valorCambio(e.despues)}${e.texto ? `, con el comentario «${e.texto}»` : ''}`;
43
+ case 'PRIORITY_CHANGE':
44
+ return `Cambió la prioridad: ${valorCambio(e.antes)} → ${valorCambio(e.despues)}`;
45
+ case 'ASSIGNMENT_CHANGE':
46
+ return e.despues ? `La asignó a ${e.despues}` : 'Quitó la asignación';
47
+ case 'COMMENT':
48
+ // Un comentario que es solo una foto no lleva texto: sin esto salía «Comentario: «»».
49
+ return e.texto
50
+ ? `Comentario: «${e.texto}»${adjunto}`
51
+ : `Comentario${adjunto ? ' con un adjunto' : ' vacío'}`;
52
+ case 'MEDIA_ADDED':
53
+ return 'Añadió una foto o un vídeo';
54
+ case 'MEDIA_REMOVED':
55
+ return 'Quitó una foto o un vídeo';
56
+ case 'FIELD_EDIT':
57
+ return `Editó la incidencia${e.texto ? `: ${e.texto}` : ''}`;
58
+ default:
59
+ return e.texto ? `${e.tipo}: ${e.texto}` : e.tipo;
60
+ }
61
+ }
62
+ async function consultarIncidencia(gateway, { org, token }, incidencia) {
63
+ const orgId = org.orgId;
64
+ const lista = await listarIncidencias(gateway, orgId, token);
65
+ if (isFail(lista))
66
+ return lista;
67
+ // El número es el de la lista de incidencias SIN filtro (misma lista, mismo orden).
68
+ const etiqueta = (i) => i.titulo ?? i.id;
69
+ const match = resolveByName(incidencia, lista.items, (i) => i.titulo ?? '', {
70
+ byIndex: true,
71
+ idOf: (i) => i.id,
72
+ });
73
+ if (match.kind === 'ambiguous') {
74
+ return failAmbigua(incidencia, 'incidencias', match.matches.slice(0, MAX_OPCIONES).map(etiqueta));
75
+ }
76
+ if (match.kind === 'none') {
77
+ return failNoEncontrado('incidencia', lista.items.slice(0, MAX_OPCIONES).map(etiqueta));
78
+ }
79
+ const ref = match.item;
80
+ const d = await gateway.getIncidentDetail({ incidentId: ref.id, organizationId: orgId, locationId: ref.locationId }, token);
81
+ if (!d) {
82
+ return fail('Esa incidencia ya no existe: puede que la hayan borrado. Vuelve a pedir la lista de incidencias.');
83
+ }
84
+ const estado = INCIDENT_STATUS_LABELS[d.estado]?.es ?? d.estado;
85
+ if (d.oculta) {
86
+ return ok({ id: d.id, oculta: true, estado, creadaEn: d.creadaEn }, {
87
+ avisos: [
88
+ 'Esta incidencia es más antigua que el periodo de retención de datos de la cuenta: ya no se conserva su detalle (título, descripción ni historial). Díselo así; no inventes nada.',
89
+ ],
90
+ });
91
+ }
92
+ const historial = d.timeline
93
+ .slice(-MAX_HISTORIAL)
94
+ .map((e) => ({ fecha: e.fecha, autor: e.autor, que: queEntrada(e) }));
95
+ const avisos = d.timeline.length > MAX_HISTORIAL
96
+ ? [
97
+ `El historial tiene ${d.timeline.length} entradas: van las ${MAX_HISTORIAL} más recientes.`,
98
+ ]
99
+ : [];
100
+ return ok({
101
+ id: d.id,
102
+ titulo: d.titulo,
103
+ descripcion: d.descripcion,
104
+ estado,
105
+ prioridad: incidentPriorityLabel(d.prioridad),
106
+ categoria: [d.categoria, d.subcategoria].filter(Boolean).join(' / ') || null,
107
+ reportadaPor: d.reportadaPor,
108
+ asignadaA: d.asignadaA,
109
+ creadaEn: d.creadaEn,
110
+ resueltaEn: d.resueltaEn,
111
+ cerradaEn: d.cerradaEn,
112
+ checkpoints: d.checkpoints,
113
+ fotos: d.fotos,
114
+ videos: d.videos,
115
+ historial,
116
+ }, { avisos });
117
+ }
118
+ /** Incidencias de la App de Incidencias: la lista y el detalle de una. */
119
+ export function incidentReads({ gateway }) {
120
+ return [
121
+ defineRead({
122
+ name: 'consultar_incidencias',
123
+ description: incidenciasDesc,
124
+ params: {
125
+ estado: z
126
+ .enum(INCIDENT_STATUS_PARAMS)
127
+ .optional()
128
+ .describe('Solo las de ese estado. OMÍTELO para verlas todas.'),
129
+ },
130
+ call: async ({ org, token }, { estado }) => {
131
+ const lista = await listarIncidencias(gateway, org.orgId, token, estado ? { estado: INCIDENT_STATUS_PARAM[estado] } : undefined);
132
+ if (isFail(lista))
133
+ return lista;
134
+ const items = lista.items.map((i, n) => ({
135
+ numero: n + 1,
136
+ id: i.id,
137
+ titulo: i.titulo ?? '(oculta por la retención de datos)',
138
+ estado: INCIDENT_STATUS_LABELS[i.estado].es,
139
+ prioridad: incidentPriorityLabel(i.prioridad),
140
+ asignadoA: i.asignadoAId ? (i.asignadoA ?? 'un usuario') : null,
141
+ fecha: i.creadaEn,
142
+ }));
143
+ return okLista({ ...lista, items }, 'incidencias');
144
+ },
145
+ }),
146
+ defineRead({
147
+ name: 'consultar_incidencia',
148
+ description: incidenciaDesc,
149
+ params: {
150
+ incidencia: z
151
+ .string()
152
+ .min(1)
153
+ .describe('Título (o parte), `id` o número en la lista de incidencias (sin filtro de estado)'),
154
+ },
155
+ call: async (ctx, { incidencia }) => consultarIncidencia(gateway, ctx, incidencia),
156
+ }),
157
+ ];
158
+ }
159
+ //# sourceMappingURL=incidents.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"incidents.js","sourceRoot":"","sources":["../../src/reads/incidents.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,11 @@
1
+ import type { ReadCapability, ReadDeps } from './types.js';
2
+ export * from './types.js';
3
+ export * from './organization.js';
4
+ /**
5
+ * Las 25 capacidades de lectura (22 sin `offerFiles`: el QR y los dos Excel solo
6
+ * existen si el canal puede entregar ficheros, en `ctx.files` de cada llamada). Cada `call`:
7
+ * - solo consulta si `ctx.org` es una de `ctx.organizations` (anti-fuga);
8
+ * - nunca lanza: un error se registra en `logger` y vuelve como `{ok:false}`.
9
+ */
10
+ export declare function readCapabilities(deps: ReadDeps): ReadCapability[];
11
+ //# sourceMappingURL=index.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/reads/index.ts"],"names":[],"mappings":"AAYA,OAAO,KAAK,EAAE,cAAc,EAAE,QAAQ,EAAW,MAAM,YAAY,CAAC;AAGpE,cAAc,YAAY,CAAC;AAC3B,cAAc,mBAAmB,CAAC;AAElC;;;;;GAKG;AACH,wBAAgB,gBAAgB,CAAC,IAAI,EAAE,QAAQ,GAAG,cAAc,EAAE,CAmCjE"}
@@ -0,0 +1,51 @@
1
+ import { canonicalOrganization, ORGANIZATION_NOT_RECOGNISED } from '../context.js';
2
+ import { fail, safeExecute } from '../domain/tool-result.js';
3
+ import { capabilityEnv } from '../deps.js';
4
+ import { accessReads } from './access.js';
5
+ import { checkpointReads } from './checkpoints.js';
6
+ import { fileReads } from './files.js';
7
+ import { incidentReads } from './incidents.js';
8
+ import { onboardingReads } from './onboarding.js';
9
+ import { patrollerReads } from './patrollers.js';
10
+ import { planReads } from './plan.js';
11
+ import { roundReads } from './rounds.js';
12
+ import { routeReads } from './routes.js';
13
+ import { userReads } from './users.js';
14
+ export * from './types.js';
15
+ export * from './organization.js';
16
+ /**
17
+ * Las 25 capacidades de lectura (22 sin `offerFiles`: el QR y los dos Excel solo
18
+ * existen si el canal puede entregar ficheros, en `ctx.files` de cada llamada). Cada `call`:
19
+ * - solo consulta si `ctx.org` es una de `ctx.organizations` (anti-fuga);
20
+ * - nunca lanza: un error se registra en `logger` y vuelve como `{ok:false}`.
21
+ */
22
+ export function readCapabilities(deps) {
23
+ const env = { ...capabilityEnv(deps), offerFiles: deps.offerFiles ?? false };
24
+ const { logger, urls, upsell } = env;
25
+ const reads = [
26
+ ...roundReads(env),
27
+ ...routeReads(env),
28
+ ...checkpointReads(env),
29
+ ...patrollerReads(env),
30
+ ...incidentReads(env),
31
+ ...accessReads(env),
32
+ ...userReads(env),
33
+ ...planReads(env),
34
+ ...onboardingReads(env),
35
+ ...(env.offerFiles ? fileReads(env) : []),
36
+ ];
37
+ return reads.map((read) => ({
38
+ ...read,
39
+ call: (ctx, args) => safeExecute(read.name, async () => {
40
+ // La entrada de la sesión, no la copia del consumidor: su rol y ámbito son los que valen.
41
+ const org = canonicalOrganization(ctx);
42
+ if (!org) {
43
+ return fail(ORGANIZATION_NOT_RECOGNISED, ctx.organizations.map((o) => o.name));
44
+ }
45
+ return read.call({ ...ctx, org }, args);
46
+ },
47
+ // Una lectura no cambia nada: su fallo no dice «No se ha hecho ningún cambio».
48
+ { logger, urls, upsell, language: ctx.language, operation: 'read' }),
49
+ }));
50
+ }
51
+ //# sourceMappingURL=index.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/reads/index.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,qBAAqB,EAAE,2BAA2B,EAAE,MAAM,eAAe,CAAC;AACnF,OAAO,EAAE,IAAI,EAAE,WAAW,EAAE,MAAM,0BAA0B,CAAC;AAC7D,OAAO,EAAE,aAAa,EAAE,MAAM,YAAY,CAAC;AAC3C,OAAO,EAAE,WAAW,EAAE,MAAM,aAAa,CAAC;AAC1C,OAAO,EAAE,eAAe,EAAE,MAAM,kBAAkB,CAAC;AACnD,OAAO,EAAE,SAAS,EAAE,MAAM,YAAY,CAAC;AACvC,OAAO,EAAE,aAAa,EAAE,MAAM,gBAAgB,CAAC;AAC/C,OAAO,EAAE,eAAe,EAAE,MAAM,iBAAiB,CAAC;AAClD,OAAO,EAAE,cAAc,EAAE,MAAM,iBAAiB,CAAC;AACjD,OAAO,EAAE,SAAS,EAAE,MAAM,WAAW,CAAC;AACtC,OAAO,EAAE,UAAU,EAAE,MAAM,aAAa,CAAC;AACzC,OAAO,EAAE,UAAU,EAAE,MAAM,aAAa,CAAC;AAEzC,OAAO,EAAE,SAAS,EAAE,MAAM,YAAY,CAAC;AAEvC,cAAc,YAAY,CAAC;AAC3B,cAAc,mBAAmB,CAAC;AAElC;;;;;GAKG;AACH,MAAM,UAAU,gBAAgB,CAAC,IAAc;IAC7C,MAAM,GAAG,GAAY,EAAE,GAAG,aAAa,CAAC,IAAI,CAAC,EAAE,UAAU,EAAE,IAAI,CAAC,UAAU,IAAI,KAAK,EAAE,CAAC;IACtF,MAAM,EAAE,MAAM,EAAE,IAAI,EAAE,MAAM,EAAE,GAAG,GAAG,CAAC;IACrC,MAAM,KAAK,GAAG;QACZ,GAAG,UAAU,CAAC,GAAG,CAAC;QAClB,GAAG,UAAU,CAAC,GAAG,CAAC;QAClB,GAAG,eAAe,CAAC,GAAG,CAAC;QACvB,GAAG,cAAc,CAAC,GAAG,CAAC;QACtB,GAAG,aAAa,CAAC,GAAG,CAAC;QACrB,GAAG,WAAW,CAAC,GAAG,CAAC;QACnB,GAAG,SAAS,CAAC,GAAG,CAAC;QACjB,GAAG,SAAS,CAAC,GAAG,CAAC;QACjB,GAAG,eAAe,CAAC,GAAG,CAAC;QACvB,GAAG,CAAC,GAAG,CAAC,UAAU,CAAC,CAAC,CAAC,SAAS,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,EAAE,CAAC;KAC1C,CAAC;IACF,OAAO,KAAK,CAAC,GAAG,CAAC,CAAC,IAAI,EAAE,EAAE,CAAC,CAAC;QAC1B,GAAG,IAAI;QACP,IAAI,EAAE,CAAC,GAAG,EAAE,IAAI,EAAE,EAAE,CAClB,WAAW,CACT,IAAI,CAAC,IAAI,EACT,KAAK,IAAI,EAAE;YACT,0FAA0F;YAC1F,MAAM,GAAG,GAAG,qBAAqB,CAAC,GAAG,CAAC,CAAC;YACvC,IAAI,CAAC,GAAG,EAAE,CAAC;gBACT,OAAO,IAAI,CACT,2BAA2B,EAC3B,GAAG,CAAC,aAAa,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,IAAI,CAAC,CACrC,CAAC;YACJ,CAAC;YACD,OAAO,IAAI,CAAC,IAAI,CAAC,EAAE,GAAG,GAAG,EAAE,GAAG,EAAE,EAAE,IAAI,CAAC,CAAC;QAC1C,CAAC;QACD,+EAA+E;QAC/E,EAAE,MAAM,EAAE,IAAI,EAAE,MAAM,EAAE,QAAQ,EAAE,GAAG,CAAC,QAAQ,EAAE,SAAS,EAAE,MAAM,EAAE,CACpE;KACJ,CAAC,CAAC,CAAC;AACN,CAAC"}
@@ -0,0 +1,4 @@
1
+ import { type ReadCapability, type ReadEnv } from './types.js';
2
+ /** Visión general de la cuenta: resumen y checklist de puesta en marcha. */
3
+ export declare function onboardingReads({ gateway }: ReadEnv): ReadCapability[];
4
+ //# sourceMappingURL=onboarding.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"onboarding.d.ts","sourceRoot":"","sources":["../../src/reads/onboarding.ts"],"names":[],"mappings":"AAEA,OAAO,EAAc,KAAK,cAAc,EAAE,KAAK,OAAO,EAAE,MAAM,YAAY,CAAC;AAuB3E,4EAA4E;AAC5E,wBAAgB,eAAe,CAAC,EAAE,OAAO,EAAE,EAAE,OAAO,GAAG,cAAc,EAAE,CAkBtE"}
@@ -0,0 +1,41 @@
1
+ import { leerPuestaEnMarcha } from '../domain/puesta-en-marcha.js';
2
+ import { ok } from '../domain/tool-result.js';
3
+ import { defineRead } from './types.js';
4
+ const resumenDesc = 'Consulta el resumen general de la cuenta del usuario: rondas de los últimos 7 días por estado (en curso, completadas, incompletas, expiradas), número de vigilantes por estado (activos, inactivos, en alerta), número total de checkpoints y escaneos sospechosos detectados. Úsala cuando el usuario pida un "resumen", "cómo va todo", "estado general", o pregunte por checkpoints.';
5
+ const puestaEnMarchaDesc = 'Checklist de puesta en marcha de la organización: checkpoints creados, vigilantes, vigilantes con algún escaneo (señal de que ya usan la app), si hay escaneos, rutas creadas y `siguientePaso` recomendado. Úsala para «¿qué me falta?», «¿lo tengo bien configurado?» o cuando un cliente nuevo no sabe por dónde seguir.';
6
+ /** Siguiente hito de la puesta en marcha, en el orden en que desbloquean el uso real. */
7
+ function siguientePaso(h) {
8
+ if (h.checkpointsCreados === 0) {
9
+ return 'Crear el primer checkpoint (Checkpoints → Nuevo checkpoint) e imprimir su QR.';
10
+ }
11
+ if (h.vigilantes === 0)
12
+ return 'Dar de alta al primer vigilante, desde el panel (Patrulleros → Nuevo).';
13
+ if (h.vigilantesConAlgunEscaneo === 0 && !h.hayEscaneos) {
14
+ return 'Que el cliente envíe a cada vigilante su enlace de la app para que haga su primer escaneo.';
15
+ }
16
+ if (h.rutasCreadas === 0) {
17
+ return 'Si quiere controlar rondas con horario, crear una ruta con sus checkpoints (Rutas).';
18
+ }
19
+ return 'Puesta en marcha completa: checkpoints, vigilantes, escaneos y rutas en marcha.';
20
+ }
21
+ /** Visión general de la cuenta: resumen y checklist de puesta en marcha. */
22
+ export function onboardingReads({ gateway }) {
23
+ return [
24
+ defineRead({
25
+ name: 'consultar_resumen_cuenta',
26
+ description: resumenDesc,
27
+ params: {},
28
+ call: async ({ org, token }) => ok(await gateway.getSupportSummary(org.orgId, token)),
29
+ }),
30
+ defineRead({
31
+ name: 'consultar_puesta_en_marcha',
32
+ description: puestaEnMarchaDesc,
33
+ params: {},
34
+ call: async ({ org, token }) => {
35
+ const hitos = await leerPuestaEnMarcha(gateway, org.orgId, token);
36
+ return ok({ ...hitos, siguientePaso: siguientePaso(hitos) });
37
+ },
38
+ }),
39
+ ];
40
+ }
41
+ //# sourceMappingURL=onboarding.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"onboarding.js","sourceRoot":"","sources":["../../src/reads/onboarding.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,kBAAkB,EAAuB,MAAM,+BAA+B,CAAC;AACxF,OAAO,EAAE,EAAE,EAAE,MAAM,0BAA0B,CAAC;AAC9C,OAAO,EAAE,UAAU,EAAqC,MAAM,YAAY,CAAC;AAE3E,MAAM,WAAW,GACf,yXAAyX,CAAC;AAC5X,MAAM,kBAAkB,GACtB,6TAA6T,CAAC;AAEhU,yFAAyF;AACzF,SAAS,aAAa,CAAC,CAAiB;IACtC,IAAI,CAAC,CAAC,kBAAkB,KAAK,CAAC,EAAE,CAAC;QAC/B,OAAO,+EAA+E,CAAC;IACzF,CAAC;IACD,IAAI,CAAC,CAAC,UAAU,KAAK,CAAC;QACpB,OAAO,wEAAwE,CAAC;IAClF,IAAI,CAAC,CAAC,yBAAyB,KAAK,CAAC,IAAI,CAAC,CAAC,CAAC,WAAW,EAAE,CAAC;QACxD,OAAO,4FAA4F,CAAC;IACtG,CAAC;IACD,IAAI,CAAC,CAAC,YAAY,KAAK,CAAC,EAAE,CAAC;QACzB,OAAO,qFAAqF,CAAC;IAC/F,CAAC;IACD,OAAO,iFAAiF,CAAC;AAC3F,CAAC;AAED,4EAA4E;AAC5E,MAAM,UAAU,eAAe,CAAC,EAAE,OAAO,EAAW;IAClD,OAAO;QACL,UAAU,CAAC;YACT,IAAI,EAAE,0BAA0B;YAChC,WAAW,EAAE,WAAW;YACxB,MAAM,EAAE,EAAE;YACV,IAAI,EAAE,KAAK,EAAE,EAAE,GAAG,EAAE,KAAK,EAAE,EAAE,EAAE,CAAC,EAAE,CAAC,MAAM,OAAO,CAAC,iBAAiB,CAAC,GAAG,CAAC,KAAK,EAAE,KAAK,CAAC,CAAC;SACtF,CAAC;QACF,UAAU,CAAC;YACT,IAAI,EAAE,4BAA4B;YAClC,WAAW,EAAE,kBAAkB;YAC/B,MAAM,EAAE,EAAE;YACV,IAAI,EAAE,KAAK,EAAE,EAAE,GAAG,EAAE,KAAK,EAAE,EAAE,EAAE;gBAC7B,MAAM,KAAK,GAAG,MAAM,kBAAkB,CAAC,OAAO,EAAE,GAAG,CAAC,KAAK,EAAE,KAAK,CAAC,CAAC;gBAClE,OAAO,EAAE,CAAC,EAAE,GAAG,KAAK,EAAE,aAAa,EAAE,aAAa,CAAC,KAAK,CAAC,EAAE,CAAC,CAAC;YAC/D,CAAC;SACF,CAAC;KACH,CAAC;AACJ,CAAC"}
@@ -0,0 +1,26 @@
1
+ import { z } from 'zod';
2
+ import { type OrganizationRef } from '../context.js';
3
+ import type { CapabilityContext } from './types.js';
4
+ /** Descripción del parámetro de organización que añade el consumidor cuando el usuario tiene varias. */
5
+ export declare const ORGANIZATION_PARAM_DESCRIPTION = "Nombre de la organizaci\u00F3n sobre la que consultar (una de las del usuario)";
6
+ /**
7
+ * El parámetro de organización (solo con más de una). `.min(1)`: con la cadena
8
+ * vacía se consultaba en silencio la PRIMERA organización.
9
+ */
10
+ export declare const organizationParam: z.ZodString;
11
+ /** Por qué no se ha podido resolver la organización, con las opciones para preguntar. */
12
+ export interface OrganizationResolutionError {
13
+ error: string;
14
+ opciones?: string[];
15
+ }
16
+ /**
17
+ * Resuelve la organización que nombra el usuario SOLO entre las suyas
18
+ * (`ctx.organizations`): invariante anti-fuga entre organizaciones.
19
+ * - con una sola organización, es esa (no se le pregunta);
20
+ * - con varias, el nombre (o su id, o su número en la lista) tiene que casar con
21
+ * una sola; si falta, no casa o es ambiguo, devuelve el error para el modelo.
22
+ */
23
+ export declare function resolveOrganization(ctx: Pick<CapabilityContext, 'organizations'>, requestedName?: string): OrganizationRef | OrganizationResolutionError;
24
+ /** ¿Es `ctx.org` una de las organizaciones del usuario? Si no, la capacidad no consulta nada. */
25
+ export declare function isOrganizationInContext(ctx: Pick<CapabilityContext, 'org' | 'organizations'>): boolean;
26
+ //# sourceMappingURL=organization.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"organization.d.ts","sourceRoot":"","sources":["../../src/reads/organization.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,CAAC,EAAE,MAAM,KAAK,CAAC;AACxB,OAAO,EAGL,KAAK,eAAe,EACrB,MAAM,eAAe,CAAC;AAEvB,OAAO,KAAK,EAAE,iBAAiB,EAAE,MAAM,YAAY,CAAC;AAEpD,wGAAwG;AACxG,eAAO,MAAM,8BAA8B,mFACkC,CAAC;AAE9E;;;GAGG;AACH,eAAO,MAAM,iBAAiB,aAA6D,CAAC;AAE5F,yFAAyF;AACzF,MAAM,WAAW,2BAA2B;IAC1C,KAAK,EAAE,MAAM,CAAC;IACd,QAAQ,CAAC,EAAE,MAAM,EAAE,CAAC;CACrB;AAID;;;;;;GAMG;AACH,wBAAgB,mBAAmB,CACjC,GAAG,EAAE,IAAI,CAAC,iBAAiB,EAAE,eAAe,CAAC,EAC7C,aAAa,CAAC,EAAE,MAAM,GACrB,eAAe,GAAG,2BAA2B,CAkB/C;AAED,iGAAiG;AACjG,wBAAgB,uBAAuB,CACrC,GAAG,EAAE,IAAI,CAAC,iBAAiB,EAAE,KAAK,GAAG,eAAe,CAAC,GACpD,OAAO,CAET"}
@@ -0,0 +1,45 @@
1
+ import { z } from 'zod';
2
+ import { canonicalOrganization, ORGANIZATION_NOT_RECOGNISED, } from '../context.js';
3
+ import { resolveByName } from '../domain/resolve-by-name.js';
4
+ /** Descripción del parámetro de organización que añade el consumidor cuando el usuario tiene varias. */
5
+ export const ORGANIZATION_PARAM_DESCRIPTION = 'Nombre de la organización sobre la que consultar (una de las del usuario)';
6
+ /**
7
+ * El parámetro de organización (solo con más de una). `.min(1)`: con la cadena
8
+ * vacía se consultaba en silencio la PRIMERA organización.
9
+ */
10
+ export const organizationParam = z.string().min(1).describe(ORGANIZATION_PARAM_DESCRIPTION);
11
+ const NO_RECONOCIDA = ORGANIZATION_NOT_RECOGNISED;
12
+ /**
13
+ * Resuelve la organización que nombra el usuario SOLO entre las suyas
14
+ * (`ctx.organizations`): invariante anti-fuga entre organizaciones.
15
+ * - con una sola organización, es esa (no se le pregunta);
16
+ * - con varias, el nombre (o su id, o su número en la lista) tiene que casar con
17
+ * una sola; si falta, no casa o es ambiguo, devuelve el error para el modelo.
18
+ */
19
+ export function resolveOrganization(ctx, requestedName) {
20
+ const { organizations } = ctx;
21
+ if (organizations.length === 1)
22
+ return organizations[0];
23
+ if (organizations.length === 0)
24
+ return { error: NO_RECONOCIDA };
25
+ const valor = requestedName ?? '';
26
+ const match = resolveByName(valor, organizations, (o) => o.name, {
27
+ byIndex: true,
28
+ idOf: (o) => o.orgId,
29
+ });
30
+ if (match.kind === 'found')
31
+ return match.item;
32
+ const nombres = (orgs) => orgs.map((o) => o.name);
33
+ if (match.kind === 'ambiguous') {
34
+ return {
35
+ error: `ambigua: «${valor}» coincide con varios/as organizaciones; pregunta al usuario cuál de estas quiere`,
36
+ opciones: nombres(match.matches),
37
+ };
38
+ }
39
+ return { error: NO_RECONOCIDA, opciones: nombres(organizations) };
40
+ }
41
+ /** ¿Es `ctx.org` una de las organizaciones del usuario? Si no, la capacidad no consulta nada. */
42
+ export function isOrganizationInContext(ctx) {
43
+ return canonicalOrganization(ctx) !== undefined;
44
+ }
45
+ //# sourceMappingURL=organization.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"organization.js","sourceRoot":"","sources":["../../src/reads/organization.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,CAAC,EAAE,MAAM,KAAK,CAAC;AACxB,OAAO,EACL,qBAAqB,EACrB,2BAA2B,GAE5B,MAAM,eAAe,CAAC;AACvB,OAAO,EAAE,aAAa,EAAE,MAAM,8BAA8B,CAAC;AAG7D,wGAAwG;AACxG,MAAM,CAAC,MAAM,8BAA8B,GACzC,2EAA2E,CAAC;AAE9E;;;GAGG;AACH,MAAM,CAAC,MAAM,iBAAiB,GAAG,CAAC,CAAC,MAAM,EAAE,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,QAAQ,CAAC,8BAA8B,CAAC,CAAC;AAQ5F,MAAM,aAAa,GAAG,2BAA2B,CAAC;AAElD;;;;;;GAMG;AACH,MAAM,UAAU,mBAAmB,CACjC,GAA6C,EAC7C,aAAsB;IAEtB,MAAM,EAAE,aAAa,EAAE,GAAG,GAAG,CAAC;IAC9B,IAAI,aAAa,CAAC,MAAM,KAAK,CAAC;QAAE,OAAO,aAAa,CAAC,CAAC,CAAC,CAAC;IACxD,IAAI,aAAa,CAAC,MAAM,KAAK,CAAC;QAAE,OAAO,EAAE,KAAK,EAAE,aAAa,EAAE,CAAC;IAChE,MAAM,KAAK,GAAG,aAAa,IAAI,EAAE,CAAC;IAClC,MAAM,KAAK,GAAG,aAAa,CAAC,KAAK,EAAE,aAAa,EAAE,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,IAAI,EAAE;QAC/D,OAAO,EAAE,IAAI;QACb,IAAI,EAAE,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,KAAK;KACrB,CAAC,CAAC;IACH,IAAI,KAAK,CAAC,IAAI,KAAK,OAAO;QAAE,OAAO,KAAK,CAAC,IAAI,CAAC;IAC9C,MAAM,OAAO,GAAG,CAAC,IAAgC,EAAE,EAAE,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC;IAC9E,IAAI,KAAK,CAAC,IAAI,KAAK,WAAW,EAAE,CAAC;QAC/B,OAAO;YACL,KAAK,EAAE,aAAa,KAAK,mFAAmF;YAC5G,QAAQ,EAAE,OAAO,CAAC,KAAK,CAAC,OAAO,CAAC;SACjC,CAAC;IACJ,CAAC;IACD,OAAO,EAAE,KAAK,EAAE,aAAa,EAAE,QAAQ,EAAE,OAAO,CAAC,aAAa,CAAC,EAAE,CAAC;AACpE,CAAC;AAED,iGAAiG;AACjG,MAAM,UAAU,uBAAuB,CACrC,GAAqD;IAErD,OAAO,qBAAqB,CAAC,GAAG,CAAC,KAAK,SAAS,CAAC;AAClD,CAAC"}
@@ -0,0 +1,11 @@
1
+ import { type FixedTextLanguage } from '../domain/language.js';
2
+ import { type ReadCapability, type ReadEnv } from './types.js';
3
+ /**
4
+ * Cómo presentar un ranking de personas: son recuentos de actividad del periodo, no una valoración
5
+ * de nadie (no ven turnos, ausencias ni tareas asignadas). Indicación, no prohibición: el
6
+ * ranking se da, con su contexto.
7
+ */
8
+ export declare function avisoRankingPrudente(idioma: FixedTextLanguage): string;
9
+ /** Vigilantes: actividad, estadísticas, rankings y enlaces de la app. */
10
+ export declare function patrollerReads({ gateway, urls }: ReadEnv): ReadCapability[];
11
+ //# sourceMappingURL=patrollers.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"patrollers.d.ts","sourceRoot":"","sources":["../../src/reads/patrollers.ts"],"names":[],"mappings":"AAGA,OAAO,EAAe,KAAK,iBAAiB,EAAE,MAAM,uBAAuB,CAAC;AAmB5E,OAAO,EAAsC,KAAK,cAAc,EAAE,KAAK,OAAO,EAAE,MAAM,YAAY,CAAC;AAuBnG;;;;GAIG;AACH,wBAAgB,oBAAoB,CAAC,MAAM,EAAE,iBAAiB,GAAG,MAAM,CAMtE;AA2ED,yEAAyE;AACzE,wBAAgB,cAAc,CAAC,EAAE,OAAO,EAAE,IAAI,EAAE,EAAE,OAAO,GAAG,cAAc,EAAE,CA6F3E"}
@@ -0,0 +1,172 @@
1
+ import { z } from 'zod';
2
+ import { resolveDateRange } from '../domain/date-range.js';
3
+ import { guardAppMessage } from '../domain/guard-app-message.js';
4
+ import { segunIdioma } from '../domain/language.js';
5
+ import { validationBucket } from '../domain/scan-explanation.js';
6
+ import { ok } from '../domain/tool-result.js';
7
+ import { scansParamSchema } from './support/params.js';
8
+ import { avisoTruncado, failAmbigua, failNoEncontrado, isFail, okLista, TRUNCADO_HINT, } from './support/results.js';
9
+ import { resolveNamed, VIGILANTE } from './support/resolve.js';
10
+ import { paginarEscaneos } from './support/scans.js';
11
+ import { defineRead } from './types.js';
12
+ const vigilantesDesc = 'Consulta la última actividad y el estado de los vigilantes de la cuenta del usuario.' +
13
+ TRUNCADO_HINT;
14
+ const statsVigilanteDesc = "Consulta las estadísticas de un vigilante concreto por su nombre: total de escaneos, rondas completadas/totales, tasa de finalización y tiempo medio entre escaneos. Úsala cuando el usuario pregunte por un vigilante específico (p. ej. '¿cómo va Juan García?', 'estadísticas de María'). Si el resultado trae `ambigua`, el nombre casa con varios vigilantes: pregunta cuál.";
15
+ const rankingDesc = "Consulta el ranking de vigilantes de la organización: cada uno con sus escaneos, rondas completadas y tasa de finalización (ordenado de mejor a peor), más un resumen del equipo y los checkpoints más escaneados. Admite periodo/fechas. Úsala para '¿quién va mejor/peor?', 'ranking de vigilantes', 'cómo va el equipo', 'qué checkpoint se escanea más', en vez de montar tú un ranking con la actividad o los escaneos. Son datos de actividad, no una valoración de las personas: preséntalos con su periodo y sin sacar por tu cuenta conclusiones sobre el desempeño o el empleo de nadie." +
16
+ TRUNCADO_HINT;
17
+ const escaneosPorVigilanteDesc = 'Recuento de escaneos por vigilante en un periodo (por defecto los últimos 7 días): total, válidos, sospechosos, no válidos (rechazados) y pendientes de revisión, ordenado de más a menos escaneos (`puesto`). Incluye a los vigilantes sin ningún escaneo. Úsala para «¿cuántos escaneos ha hecho cada vigilante?», «ranking por escaneos», «¿quién tiene más sospechosos?». Válido y sospechoso son independientes: un escaneo puede ser las dos cosas. Para rondas completadas y tasa de finalización usa consultar_ranking_vigilantes.';
18
+ const enlacesAppDesc = 'Devuelve el enlace de la app de cada vigilante (abre la app con ese vigilante ya elegido) y el enlace general de la organización (pide elegir el vigilante al entrar). Con `vigilante`, solo el suyo y `mensajeParaReenviar`: un mensaje ya escrito con su nombre y SU enlace para que el cliente se lo reenvíe por WhatsApp o email (qué es, su enlace y cómo instalar o abrir la app); dalo tal cual. Úsala cuando pida los enlaces o el acceso a la app de sus vigilantes, o cómo hacerle llegar la app a un vigilante (no se le puede enviar desde aquí al vigilante: compártelo tú, es decir, el cliente, con el vigilante). Cada enlace permite entrar como ESE vigilante sin contraseña: al darlos, avisa de que reenvíe cada uno SOLO a su vigilante, nunca a un grupo.' +
19
+ TRUNCADO_HINT;
20
+ /** Traduce el resultado del gateway a `ToolResult`: ambigua y no-encontrado son fallos, no datos. */
21
+ function statsVigilanteResult(result) {
22
+ if (result.found)
23
+ return ok(result);
24
+ if (result.ambigua)
25
+ return failAmbigua('el nombre indicado', 'vigilantes', result.opciones);
26
+ return failNoEncontrado('vigilante', result.opciones);
27
+ }
28
+ /**
29
+ * Cómo presentar un ranking de personas: son recuentos de actividad del periodo, no una valoración
30
+ * de nadie (no ven turnos, ausencias ni tareas asignadas). Indicación, no prohibición: el
31
+ * ranking se da, con su contexto.
32
+ */
33
+ export function avisoRankingPrudente(idioma) {
34
+ return segunIdioma(idioma, {
35
+ es: 'Son datos de actividad del periodo, no una valoración de las personas: no reflejan turnos, ausencias ni las tareas que tenía asignadas cada vigilante. Preséntalos como datos, con su periodo, y no saques de ellos por tu cuenta conclusiones sobre el desempeño ni decisiones laborales de nadie.',
36
+ en: "This is activity data for the period, not an assessment of the people: it does not reflect shifts, absences or each guard's assigned tasks. Present it as data, with its period, and do not draw conclusions about anyone's performance or employment from it on your own.",
37
+ fr: "Ce sont des données d'activité de la période, pas une évaluation des personnes : elles ne reflètent ni les horaires, ni les absences, ni les tâches assignées à chaque agent. Présentez-les comme des données, avec leur période, et n'en tirez pas vous-même de conclusions sur la performance ou l'emploi de quiconque.",
38
+ });
39
+ }
40
+ /**
41
+ * El ranking no es una `ListaTruncable`, pero avisa del cap igual que las demás (el recorte va en
42
+ * el resultado, no repetido en los datos) y siempre con el aviso de prudencia.
43
+ */
44
+ function okRanking({ truncado, ...ranking }, avisosExtra, idioma) {
45
+ const avisos = [...avisosExtra, avisoRankingPrudente(idioma)];
46
+ if (truncado) {
47
+ avisos.push(avisoTruncado(ranking.ranking.length, undefined, 'vigilantes del ranking'));
48
+ }
49
+ return ok(ranking, { truncado, avisos });
50
+ }
51
+ async function escaneosPorVigilante(gateway, { org, token, tz }, args) {
52
+ const periodo = args.periodo ?? (args.desde || args.hasta ? undefined : 'ultimos_7_dias');
53
+ const { dateFrom, dateTo, avisos } = resolveDateRange(periodo, args.desde, args.hasta, new Date(), tz);
54
+ const [{ escaneos, hayMas }, vigilantes] = await Promise.all([
55
+ paginarEscaneos(gateway, org.orgId, token, { dateFrom, dateTo }),
56
+ gateway.listPatrollers(org.orgId, token),
57
+ ]);
58
+ const vacio = () => ({
59
+ total: 0,
60
+ validos: 0,
61
+ sospechosos: 0,
62
+ noValidos: 0,
63
+ pendientesRevision: 0,
64
+ });
65
+ const cuenta = new Map(vigilantes.items.map((v) => [v.name, vacio()]));
66
+ for (const s of escaneos) {
67
+ const nombre = s.patrollerName ?? '(sin vigilante)';
68
+ const c = cuenta.get(nombre) ?? vacio();
69
+ cuenta.set(nombre, c);
70
+ c.total += 1;
71
+ if (s.fraudFlagged)
72
+ c.sospechosos += 1;
73
+ const estado = validationBucket(s.validacion);
74
+ if (estado === 'valido')
75
+ c.validos += 1;
76
+ else if (estado === 'rechazado')
77
+ c.noValidos += 1;
78
+ else if (estado === 'pendiente')
79
+ c.pendientesRevision += 1;
80
+ }
81
+ const ranking = [...cuenta]
82
+ .map(([vigilante, c]) => ({ vigilante, ...c }))
83
+ .sort((a, b) => b.total - a.total)
84
+ .map((r, i) => ({ puesto: i + 1, ...r }));
85
+ const todosAvisos = [...(avisos ?? [])];
86
+ if (hayMas) {
87
+ todosAvisos.push(`Solo se han contado los ${escaneos.length} escaneos más recientes del periodo: los recuentos son PARCIALES. Díselo y ofrécele acotar el periodo.`);
88
+ }
89
+ if (vigilantes.truncado) {
90
+ todosAvisos.push(avisoTruncado(vigilantes.items.length, vigilantes.total, 'vigilantes'));
91
+ }
92
+ return ok({ desde: dateFrom ?? null, hasta: dateTo ?? null, totalEscaneos: escaneos.length, ranking }, { truncado: hayMas || vigilantes.truncado, avisos: todosAvisos });
93
+ }
94
+ /** Vigilantes: actividad, estadísticas, rankings y enlaces de la app. */
95
+ export function patrollerReads({ gateway, urls }) {
96
+ return [
97
+ defineRead({
98
+ name: 'consultar_actividad_vigilantes',
99
+ description: vigilantesDesc,
100
+ params: {},
101
+ call: async ({ org, token }) => okLista(await gateway.getPatrollerActivity(org.orgId, token), 'vigilantes'),
102
+ }),
103
+ defineRead({
104
+ name: 'consultar_stats_vigilante',
105
+ description: statsVigilanteDesc,
106
+ params: {
107
+ vigilante: z
108
+ .string()
109
+ .min(1)
110
+ .describe('Nombre del vigilante/patrullero (nunca vacío: si no lo sabes, pregúntalo)'),
111
+ },
112
+ call: async ({ org, token }, { vigilante }) => statsVigilanteResult(await gateway.getPatrollerStats(org.orgId, token, vigilante)),
113
+ }),
114
+ defineRead({
115
+ name: 'consultar_ranking_vigilantes',
116
+ description: rankingDesc,
117
+ params: scansParamSchema,
118
+ call: async ({ org, token, tz, language }, { periodo, desde, hasta }) => {
119
+ const { dateFrom, dateTo, avisos } = resolveDateRange(periodo, desde, hasta, new Date(), tz);
120
+ const ranking = await gateway.getPatrollerRanking(org.orgId, token, { dateFrom, dateTo });
121
+ return okRanking(ranking, avisos ?? [], language);
122
+ },
123
+ }),
124
+ defineRead({
125
+ name: 'consultar_escaneos_por_vigilante',
126
+ description: escaneosPorVigilanteDesc,
127
+ params: scansParamSchema,
128
+ call: async (ctx, args) => escaneosPorVigilante(gateway, ctx, args),
129
+ }),
130
+ defineRead({
131
+ name: 'enlaces_app_vigilantes',
132
+ description: enlacesAppDesc,
133
+ params: {
134
+ vigilante: z
135
+ .string()
136
+ .min(1)
137
+ .optional()
138
+ .describe('Nombre del vigilante al que se le va a mandar: devuelve su enlace y el mensaje para reenviárselo. OMÍTELO para ver los enlaces de todos.'),
139
+ idioma: z
140
+ .enum(['es', 'en', 'fr'])
141
+ .optional()
142
+ .describe("Idioma del mensaje para reenviar: 'es', 'en' o 'fr' (en otro idioma, 'en'); OMÍTELO si es español."),
143
+ },
144
+ call: async ({ org, token }, { vigilante, idioma }) => {
145
+ const vigilantes = await gateway.listPatrollers(org.orgId, token);
146
+ const base = `${urls.app}/${org.orgId}`;
147
+ const enlaceDe = (p) => `${base}/${p.identifier}`;
148
+ const avisos = [
149
+ 'Cada enlace permite entrar en la app como ESE vigilante sin contraseña: reenvía cada enlace SOLO a su vigilante, nunca a un grupo. El enlace general pide elegir el vigilante al entrar.',
150
+ ];
151
+ if (vigilante) {
152
+ const r = resolveNamed(vigilante, vigilantes.items, (p) => p.name, VIGILANTE);
153
+ if (isFail(r))
154
+ return r;
155
+ return ok({
156
+ enlaceGeneral: base,
157
+ enlaces: [{ vigilante: r.item.name, enlace: enlaceDe(r.item) }],
158
+ mensajeParaReenviar: guardAppMessage(r.item.name, enlaceDe(r.item), idioma ?? 'es'),
159
+ }, { avisos });
160
+ }
161
+ if (vigilantes.truncado) {
162
+ avisos.push(avisoTruncado(vigilantes.items.length, vigilantes.total, 'vigilantes'));
163
+ }
164
+ return ok({
165
+ enlaceGeneral: base,
166
+ enlaces: vigilantes.items.map((p) => ({ vigilante: p.name, enlace: enlaceDe(p) })),
167
+ }, { truncado: vigilantes.truncado, avisos });
168
+ },
169
+ }),
170
+ ];
171
+ }
172
+ //# sourceMappingURL=patrollers.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"patrollers.js","sourceRoot":"","sources":["../../src/reads/patrollers.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,4 @@
1
+ import { type ReadCapability, type ReadEnv } from './types.js';
2
+ /** Plan y suscripción: uso frente a los límites y enlaces de pago de Stripe. */
3
+ export declare function planReads({ gateway, urls, upsell }: ReadEnv): ReadCapability[];
4
+ //# sourceMappingURL=plan.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"plan.d.ts","sourceRoot":"","sources":["../../src/reads/plan.ts"],"names":[],"mappings":"AAcA,OAAO,EAAsC,KAAK,cAAc,EAAE,KAAK,OAAO,EAAE,MAAM,YAAY,CAAC;AAmMnG,gFAAgF;AAChF,wBAAgB,SAAS,CAAC,EAAE,OAAO,EAAE,IAAI,EAAE,MAAM,EAAE,EAAE,OAAO,GAAG,cAAc,EAAE,CAyC9E"}