@patroltech/agent-capabilities 0.0.0-stage → 0.2.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (439) hide show
  1. package/LICENSE +21 -0
  2. package/README.md +171 -2
  3. package/dist/actions/alerts.d.ts +3 -0
  4. package/dist/actions/alerts.d.ts.map +1 -0
  5. package/dist/actions/alerts.js +90 -0
  6. package/dist/actions/alerts.js.map +1 -0
  7. package/dist/actions/batch-policy.d.ts +67 -0
  8. package/dist/actions/batch-policy.d.ts.map +1 -0
  9. package/dist/actions/batch-policy.js +73 -0
  10. package/dist/actions/batch-policy.js.map +1 -0
  11. package/dist/actions/checkpoint-archive.d.ts +3 -0
  12. package/dist/actions/checkpoint-archive.d.ts.map +1 -0
  13. package/dist/actions/checkpoint-archive.js +173 -0
  14. package/dist/actions/checkpoint-archive.js.map +1 -0
  15. package/dist/actions/checkpoint-geo.d.ts +4 -0
  16. package/dist/actions/checkpoint-geo.d.ts.map +1 -0
  17. package/dist/actions/checkpoint-geo.js +286 -0
  18. package/dist/actions/checkpoint-geo.js.map +1 -0
  19. package/dist/actions/checkpoints.d.ts +10 -0
  20. package/dist/actions/checkpoints.d.ts.map +1 -0
  21. package/dist/actions/checkpoints.js +222 -0
  22. package/dist/actions/checkpoints.js.map +1 -0
  23. package/dist/actions/guard.d.ts +13 -0
  24. package/dist/actions/guard.d.ts.map +1 -0
  25. package/dist/actions/guard.js +30 -0
  26. package/dist/actions/guard.js.map +1 -0
  27. package/dist/actions/incidents.d.ts +3 -0
  28. package/dist/actions/incidents.d.ts.map +1 -0
  29. package/dist/actions/incidents.js +260 -0
  30. package/dist/actions/incidents.js.map +1 -0
  31. package/dist/actions/index.d.ts +20 -0
  32. package/dist/actions/index.d.ts.map +1 -0
  33. package/dist/actions/index.js +60 -0
  34. package/dist/actions/index.js.map +1 -0
  35. package/dist/actions/locations.d.ts +4 -0
  36. package/dist/actions/locations.d.ts.map +1 -0
  37. package/dist/actions/locations.js +202 -0
  38. package/dist/actions/locations.js.map +1 -0
  39. package/dist/actions/names.d.ts +27 -0
  40. package/dist/actions/names.d.ts.map +1 -0
  41. package/dist/actions/names.js +48 -0
  42. package/dist/actions/names.js.map +1 -0
  43. package/dist/actions/patrollers.d.ts +6 -0
  44. package/dist/actions/patrollers.d.ts.map +1 -0
  45. package/dist/actions/patrollers.js +172 -0
  46. package/dist/actions/patrollers.js.map +1 -0
  47. package/dist/actions/route-schedules.d.ts +4 -0
  48. package/dist/actions/route-schedules.d.ts.map +1 -0
  49. package/dist/actions/route-schedules.js +110 -0
  50. package/dist/actions/route-schedules.js.map +1 -0
  51. package/dist/actions/routes.d.ts +5 -0
  52. package/dist/actions/routes.d.ts.map +1 -0
  53. package/dist/actions/routes.js +348 -0
  54. package/dist/actions/routes.js.map +1 -0
  55. package/dist/actions/support/antifraud-rules.d.ts +53 -0
  56. package/dist/actions/support/antifraud-rules.d.ts.map +1 -0
  57. package/dist/actions/support/antifraud-rules.js +121 -0
  58. package/dist/actions/support/antifraud-rules.js.map +1 -0
  59. package/dist/actions/support/elegir-ubicacion.d.ts +31 -0
  60. package/dist/actions/support/elegir-ubicacion.d.ts.map +1 -0
  61. package/dist/actions/support/elegir-ubicacion.js +42 -0
  62. package/dist/actions/support/elegir-ubicacion.js.map +1 -0
  63. package/dist/actions/support/next-step.d.ts +26 -0
  64. package/dist/actions/support/next-step.d.ts.map +1 -0
  65. package/dist/actions/support/next-step.js +55 -0
  66. package/dist/actions/support/next-step.js.map +1 -0
  67. package/dist/actions/support/route-impact.d.ts +25 -0
  68. package/dist/actions/support/route-impact.d.ts.map +1 -0
  69. package/dist/actions/support/route-impact.js +76 -0
  70. package/dist/actions/support/route-impact.js.map +1 -0
  71. package/dist/actions/support/route-lookup.d.ts +27 -0
  72. package/dist/actions/support/route-lookup.d.ts.map +1 -0
  73. package/dist/actions/support/route-lookup.js +44 -0
  74. package/dist/actions/support/route-lookup.js.map +1 -0
  75. package/dist/actions/support/schedule.d.ts +38 -0
  76. package/dist/actions/support/schedule.d.ts.map +1 -0
  77. package/dist/actions/support/schedule.js +62 -0
  78. package/dist/actions/support/schedule.js.map +1 -0
  79. package/dist/actions/support/shared.d.ts +112 -0
  80. package/dist/actions/support/shared.d.ts.map +1 -0
  81. package/dist/actions/support/shared.js +171 -0
  82. package/dist/actions/support/shared.js.map +1 -0
  83. package/dist/actions/support/texts.d.ts +47 -0
  84. package/dist/actions/support/texts.d.ts.map +1 -0
  85. package/dist/actions/support/texts.js +134 -0
  86. package/dist/actions/support/texts.js.map +1 -0
  87. package/dist/actions/support/turno.d.ts +16 -0
  88. package/dist/actions/support/turno.d.ts.map +1 -0
  89. package/dist/actions/support/turno.js +35 -0
  90. package/dist/actions/support/turno.js.map +1 -0
  91. package/dist/actions/support/user-access.d.ts +72 -0
  92. package/dist/actions/support/user-access.d.ts.map +1 -0
  93. package/dist/actions/support/user-access.js +194 -0
  94. package/dist/actions/support/user-access.js.map +1 -0
  95. package/dist/actions/types.d.ts +130 -0
  96. package/dist/actions/types.d.ts.map +1 -0
  97. package/dist/actions/types.js +20 -0
  98. package/dist/actions/types.js.map +1 -0
  99. package/dist/actions/user-roles.d.ts +4 -0
  100. package/dist/actions/user-roles.d.ts.map +1 -0
  101. package/dist/actions/user-roles.js +195 -0
  102. package/dist/actions/user-roles.js.map +1 -0
  103. package/dist/actions/users.d.ts +3 -0
  104. package/dist/actions/users.d.ts.map +1 -0
  105. package/dist/actions/users.js +146 -0
  106. package/dist/actions/users.js.map +1 -0
  107. package/dist/catalog/buildCatalog.d.ts +19 -0
  108. package/dist/catalog/buildCatalog.d.ts.map +1 -0
  109. package/dist/catalog/buildCatalog.js +38 -0
  110. package/dist/catalog/buildCatalog.js.map +1 -0
  111. package/dist/catalog/english.d.ts +14 -0
  112. package/dist/catalog/english.d.ts.map +1 -0
  113. package/dist/catalog/english.js +368 -0
  114. package/dist/catalog/english.js.map +1 -0
  115. package/dist/catalog/entries.d.ts +6 -0
  116. package/dist/catalog/entries.d.ts.map +1 -0
  117. package/dist/catalog/entries.js +610 -0
  118. package/dist/catalog/entries.js.map +1 -0
  119. package/dist/catalog/types.d.ts +61 -0
  120. package/dist/catalog/types.d.ts.map +1 -0
  121. package/dist/catalog/types.js +2 -0
  122. package/dist/catalog/types.js.map +1 -0
  123. package/dist/context.d.ts +37 -0
  124. package/dist/context.d.ts.map +1 -0
  125. package/dist/context.js +11 -0
  126. package/dist/context.js.map +1 -0
  127. package/dist/deps.d.ts +23 -0
  128. package/dist/deps.d.ts.map +1 -0
  129. package/dist/deps.js +12 -0
  130. package/dist/deps.js.map +1 -0
  131. package/dist/domain/access-logs-csv.d.ts +25 -0
  132. package/dist/domain/access-logs-csv.d.ts.map +1 -0
  133. package/dist/domain/access-logs-csv.js +36 -0
  134. package/dist/domain/access-logs-csv.js.map +1 -0
  135. package/dist/domain/backend-errors.d.ts +54 -0
  136. package/dist/domain/backend-errors.d.ts.map +1 -0
  137. package/dist/domain/backend-errors.js +364 -0
  138. package/dist/domain/backend-errors.js.map +1 -0
  139. package/dist/domain/country.d.ts +9 -0
  140. package/dist/domain/country.d.ts.map +1 -0
  141. package/dist/domain/country.js +13 -0
  142. package/dist/domain/country.js.map +1 -0
  143. package/dist/domain/date-range.d.ts +33 -0
  144. package/dist/domain/date-range.d.ts.map +1 -0
  145. package/dist/domain/date-range.js +110 -0
  146. package/dist/domain/date-range.js.map +1 -0
  147. package/dist/domain/geo.d.ts +14 -0
  148. package/dist/domain/geo.d.ts.map +1 -0
  149. package/dist/domain/geo.js +22 -0
  150. package/dist/domain/geo.js.map +1 -0
  151. package/dist/domain/guard-app-message.d.ts +15 -0
  152. package/dist/domain/guard-app-message.d.ts.map +1 -0
  153. package/dist/domain/guard-app-message.js +39 -0
  154. package/dist/domain/guard-app-message.js.map +1 -0
  155. package/dist/domain/incident-status.d.ts +29 -0
  156. package/dist/domain/incident-status.d.ts.map +1 -0
  157. package/dist/domain/incident-status.js +44 -0
  158. package/dist/domain/incident-status.js.map +1 -0
  159. package/dist/domain/language.d.ts +39 -0
  160. package/dist/domain/language.d.ts.map +1 -0
  161. package/dist/domain/language.js +112 -0
  162. package/dist/domain/language.js.map +1 -0
  163. package/dist/domain/money.d.ts +3 -0
  164. package/dist/domain/money.d.ts.map +1 -0
  165. package/dist/domain/money.js +12 -0
  166. package/dist/domain/money.js.map +1 -0
  167. package/dist/domain/puesta-en-marcha.d.ts +47 -0
  168. package/dist/domain/puesta-en-marcha.d.ts.map +1 -0
  169. package/dist/domain/puesta-en-marcha.js +22 -0
  170. package/dist/domain/puesta-en-marcha.js.map +1 -0
  171. package/dist/domain/qr-image.d.ts +25 -0
  172. package/dist/domain/qr-image.d.ts.map +1 -0
  173. package/dist/domain/qr-image.js +28 -0
  174. package/dist/domain/qr-image.js.map +1 -0
  175. package/dist/domain/resolve-by-name.d.ts +32 -0
  176. package/dist/domain/resolve-by-name.d.ts.map +1 -0
  177. package/dist/domain/resolve-by-name.js +40 -0
  178. package/dist/domain/resolve-by-name.js.map +1 -0
  179. package/dist/domain/route-checkpoints.d.ts +31 -0
  180. package/dist/domain/route-checkpoints.d.ts.map +1 -0
  181. package/dist/domain/route-checkpoints.js +27 -0
  182. package/dist/domain/route-checkpoints.js.map +1 -0
  183. package/dist/domain/route-schedule.d.ts +88 -0
  184. package/dist/domain/route-schedule.d.ts.map +1 -0
  185. package/dist/domain/route-schedule.js +203 -0
  186. package/dist/domain/route-schedule.js.map +1 -0
  187. package/dist/domain/scan-explanation.d.ts +25 -0
  188. package/dist/domain/scan-explanation.d.ts.map +1 -0
  189. package/dist/domain/scan-explanation.js +99 -0
  190. package/dist/domain/scan-explanation.js.map +1 -0
  191. package/dist/domain/scans-csv.d.ts +37 -0
  192. package/dist/domain/scans-csv.d.ts.map +1 -0
  193. package/dist/domain/scans-csv.js +67 -0
  194. package/dist/domain/scans-csv.js.map +1 -0
  195. package/dist/domain/timezone.d.ts +61 -0
  196. package/dist/domain/timezone.d.ts.map +1 -0
  197. package/dist/domain/timezone.js +113 -0
  198. package/dist/domain/timezone.js.map +1 -0
  199. package/dist/domain/tool-result.d.ts +55 -0
  200. package/dist/domain/tool-result.d.ts.map +1 -0
  201. package/dist/domain/tool-result.js +47 -0
  202. package/dist/domain/tool-result.js.map +1 -0
  203. package/dist/domain/urls.d.ts +33 -0
  204. package/dist/domain/urls.d.ts.map +1 -0
  205. package/dist/domain/urls.js +20 -0
  206. package/dist/domain/urls.js.map +1 -0
  207. package/dist/gateway/PatrolTechGateway.d.ts +195 -0
  208. package/dist/gateway/PatrolTechGateway.d.ts.map +1 -0
  209. package/dist/gateway/PatrolTechGateway.js +2 -0
  210. package/dist/gateway/PatrolTechGateway.js.map +1 -0
  211. package/dist/gateway/index.d.ts +4 -0
  212. package/dist/gateway/index.d.ts.map +1 -0
  213. package/dist/gateway/index.js +4 -0
  214. package/dist/gateway/index.js.map +1 -0
  215. package/dist/gateway/sdk/SdkPatrolTechGateway.d.ts +145 -0
  216. package/dist/gateway/sdk/SdkPatrolTechGateway.d.ts.map +1 -0
  217. package/dist/gateway/sdk/SdkPatrolTechGateway.js +101 -0
  218. package/dist/gateway/sdk/SdkPatrolTechGateway.js.map +1 -0
  219. package/dist/gateway/sdk/access.d.ts +8 -0
  220. package/dist/gateway/sdk/access.d.ts.map +1 -0
  221. package/dist/gateway/sdk/access.js +39 -0
  222. package/dist/gateway/sdk/access.js.map +1 -0
  223. package/dist/gateway/sdk/billing.d.ts +7 -0
  224. package/dist/gateway/sdk/billing.d.ts.map +1 -0
  225. package/dist/gateway/sdk/billing.js +92 -0
  226. package/dist/gateway/sdk/billing.js.map +1 -0
  227. package/dist/gateway/sdk/checkpoint-mappers.d.ts +23 -0
  228. package/dist/gateway/sdk/checkpoint-mappers.d.ts.map +1 -0
  229. package/dist/gateway/sdk/checkpoint-mappers.js +59 -0
  230. package/dist/gateway/sdk/checkpoint-mappers.js.map +1 -0
  231. package/dist/gateway/sdk/checkpoints.d.ts +33 -0
  232. package/dist/gateway/sdk/checkpoints.d.ts.map +1 -0
  233. package/dist/gateway/sdk/checkpoints.js +163 -0
  234. package/dist/gateway/sdk/checkpoints.js.map +1 -0
  235. package/dist/gateway/sdk/errors.d.ts +10 -0
  236. package/dist/gateway/sdk/errors.d.ts.map +1 -0
  237. package/dist/gateway/sdk/errors.js +46 -0
  238. package/dist/gateway/sdk/errors.js.map +1 -0
  239. package/dist/gateway/sdk/incidents.d.ts +18 -0
  240. package/dist/gateway/sdk/incidents.d.ts.map +1 -0
  241. package/dist/gateway/sdk/incidents.js +98 -0
  242. package/dist/gateway/sdk/incidents.js.map +1 -0
  243. package/dist/gateway/sdk/index.d.ts +4 -0
  244. package/dist/gateway/sdk/index.d.ts.map +1 -0
  245. package/dist/gateway/sdk/index.js +4 -0
  246. package/dist/gateway/sdk/index.js.map +1 -0
  247. package/dist/gateway/sdk/list.d.ts +15 -0
  248. package/dist/gateway/sdk/list.d.ts.map +1 -0
  249. package/dist/gateway/sdk/list.js +12 -0
  250. package/dist/gateway/sdk/list.js.map +1 -0
  251. package/dist/gateway/sdk/locations.d.ts +24 -0
  252. package/dist/gateway/sdk/locations.d.ts.map +1 -0
  253. package/dist/gateway/sdk/locations.js +44 -0
  254. package/dist/gateway/sdk/locations.js.map +1 -0
  255. package/dist/gateway/sdk/patrollers.d.ts +26 -0
  256. package/dist/gateway/sdk/patrollers.d.ts.map +1 -0
  257. package/dist/gateway/sdk/patrollers.js +132 -0
  258. package/dist/gateway/sdk/patrollers.js.map +1 -0
  259. package/dist/gateway/sdk/rounds.d.ts +15 -0
  260. package/dist/gateway/sdk/rounds.d.ts.map +1 -0
  261. package/dist/gateway/sdk/rounds.js +142 -0
  262. package/dist/gateway/sdk/rounds.js.map +1 -0
  263. package/dist/gateway/sdk/routes.d.ts +18 -0
  264. package/dist/gateway/sdk/routes.d.ts.map +1 -0
  265. package/dist/gateway/sdk/routes.js +74 -0
  266. package/dist/gateway/sdk/routes.js.map +1 -0
  267. package/dist/gateway/sdk/scans.d.ts +4 -0
  268. package/dist/gateway/sdk/scans.d.ts.map +1 -0
  269. package/dist/gateway/sdk/scans.js +72 -0
  270. package/dist/gateway/sdk/scans.js.map +1 -0
  271. package/dist/gateway/sdk/transport.d.ts +77 -0
  272. package/dist/gateway/sdk/transport.d.ts.map +1 -0
  273. package/dist/gateway/sdk/transport.js +81 -0
  274. package/dist/gateway/sdk/transport.js.map +1 -0
  275. package/dist/gateway/sdk/users.d.ts +15 -0
  276. package/dist/gateway/sdk/users.d.ts.map +1 -0
  277. package/dist/gateway/sdk/users.js +49 -0
  278. package/dist/gateway/sdk/users.js.map +1 -0
  279. package/dist/gateway/types/access.d.ts +32 -0
  280. package/dist/gateway/types/access.d.ts.map +1 -0
  281. package/dist/gateway/types/access.js +2 -0
  282. package/dist/gateway/types/access.js.map +1 -0
  283. package/dist/gateway/types/billing.d.ts +60 -0
  284. package/dist/gateway/types/billing.d.ts.map +1 -0
  285. package/dist/gateway/types/billing.js +2 -0
  286. package/dist/gateway/types/billing.js.map +1 -0
  287. package/dist/gateway/types/checkpoints.d.ts +84 -0
  288. package/dist/gateway/types/checkpoints.d.ts.map +1 -0
  289. package/dist/gateway/types/checkpoints.js +2 -0
  290. package/dist/gateway/types/checkpoints.js.map +1 -0
  291. package/dist/gateway/types/common.d.ts +13 -0
  292. package/dist/gateway/types/common.d.ts.map +1 -0
  293. package/dist/gateway/types/common.js +2 -0
  294. package/dist/gateway/types/common.js.map +1 -0
  295. package/dist/gateway/types/incidents.d.ts +53 -0
  296. package/dist/gateway/types/incidents.d.ts.map +1 -0
  297. package/dist/gateway/types/incidents.js +2 -0
  298. package/dist/gateway/types/incidents.js.map +1 -0
  299. package/dist/gateway/types/index.d.ts +12 -0
  300. package/dist/gateway/types/index.d.ts.map +1 -0
  301. package/dist/gateway/types/index.js +12 -0
  302. package/dist/gateway/types/index.js.map +1 -0
  303. package/dist/gateway/types/locations.d.ts +7 -0
  304. package/dist/gateway/types/locations.d.ts.map +1 -0
  305. package/dist/gateway/types/locations.js +2 -0
  306. package/dist/gateway/types/locations.js.map +1 -0
  307. package/dist/gateway/types/patrollers.d.ts +68 -0
  308. package/dist/gateway/types/patrollers.d.ts.map +1 -0
  309. package/dist/gateway/types/patrollers.js +15 -0
  310. package/dist/gateway/types/patrollers.js.map +1 -0
  311. package/dist/gateway/types/rounds.d.ts +89 -0
  312. package/dist/gateway/types/rounds.d.ts.map +1 -0
  313. package/dist/gateway/types/rounds.js +2 -0
  314. package/dist/gateway/types/rounds.js.map +1 -0
  315. package/dist/gateway/types/routes.d.ts +48 -0
  316. package/dist/gateway/types/routes.d.ts.map +1 -0
  317. package/dist/gateway/types/routes.js +2 -0
  318. package/dist/gateway/types/routes.js.map +1 -0
  319. package/dist/gateway/types/scans.d.ts +44 -0
  320. package/dist/gateway/types/scans.d.ts.map +1 -0
  321. package/dist/gateway/types/scans.js +2 -0
  322. package/dist/gateway/types/scans.js.map +1 -0
  323. package/dist/gateway/types/users.d.ts +32 -0
  324. package/dist/gateway/types/users.d.ts.map +1 -0
  325. package/dist/gateway/types/users.js +2 -0
  326. package/dist/gateway/types/users.js.map +1 -0
  327. package/dist/index.d.ts +32 -0
  328. package/dist/index.d.ts.map +1 -0
  329. package/dist/index.js +40 -0
  330. package/dist/index.js.map +1 -0
  331. package/dist/ports/FileSink.d.ts +20 -0
  332. package/dist/ports/FileSink.d.ts.map +1 -0
  333. package/dist/ports/FileSink.js +2 -0
  334. package/dist/ports/FileSink.js.map +1 -0
  335. package/dist/ports/Logger.d.ts +16 -0
  336. package/dist/ports/Logger.d.ts.map +1 -0
  337. package/dist/ports/Logger.js +7 -0
  338. package/dist/ports/Logger.js.map +1 -0
  339. package/dist/ports/PendingActionStore.d.ts +84 -0
  340. package/dist/ports/PendingActionStore.d.ts.map +1 -0
  341. package/dist/ports/PendingActionStore.js +16 -0
  342. package/dist/ports/PendingActionStore.js.map +1 -0
  343. package/dist/reads/access.d.ts +4 -0
  344. package/dist/reads/access.d.ts.map +1 -0
  345. package/dist/reads/access.js +129 -0
  346. package/dist/reads/access.js.map +1 -0
  347. package/dist/reads/checkpoints.d.ts +4 -0
  348. package/dist/reads/checkpoints.d.ts.map +1 -0
  349. package/dist/reads/checkpoints.js +152 -0
  350. package/dist/reads/checkpoints.js.map +1 -0
  351. package/dist/reads/files.d.ts +9 -0
  352. package/dist/reads/files.d.ts.map +1 -0
  353. package/dist/reads/files.js +222 -0
  354. package/dist/reads/files.js.map +1 -0
  355. package/dist/reads/incidents.d.ts +4 -0
  356. package/dist/reads/incidents.d.ts.map +1 -0
  357. package/dist/reads/incidents.js +164 -0
  358. package/dist/reads/incidents.js.map +1 -0
  359. package/dist/reads/index.d.ts +11 -0
  360. package/dist/reads/index.d.ts.map +1 -0
  361. package/dist/reads/index.js +51 -0
  362. package/dist/reads/index.js.map +1 -0
  363. package/dist/reads/onboarding.d.ts +4 -0
  364. package/dist/reads/onboarding.d.ts.map +1 -0
  365. package/dist/reads/onboarding.js +41 -0
  366. package/dist/reads/onboarding.js.map +1 -0
  367. package/dist/reads/organization.d.ts +26 -0
  368. package/dist/reads/organization.d.ts.map +1 -0
  369. package/dist/reads/organization.js +45 -0
  370. package/dist/reads/organization.js.map +1 -0
  371. package/dist/reads/patrollers.d.ts +4 -0
  372. package/dist/reads/patrollers.d.ts.map +1 -0
  373. package/dist/reads/patrollers.js +156 -0
  374. package/dist/reads/patrollers.js.map +1 -0
  375. package/dist/reads/plan.d.ts +4 -0
  376. package/dist/reads/plan.d.ts.map +1 -0
  377. package/dist/reads/plan.js +195 -0
  378. package/dist/reads/plan.js.map +1 -0
  379. package/dist/reads/rounds.d.ts +4 -0
  380. package/dist/reads/rounds.d.ts.map +1 -0
  381. package/dist/reads/rounds.js +160 -0
  382. package/dist/reads/rounds.js.map +1 -0
  383. package/dist/reads/routes.d.ts +4 -0
  384. package/dist/reads/routes.d.ts.map +1 -0
  385. package/dist/reads/routes.js +34 -0
  386. package/dist/reads/routes.js.map +1 -0
  387. package/dist/reads/support/access-locations.d.ts +22 -0
  388. package/dist/reads/support/access-locations.d.ts.map +1 -0
  389. package/dist/reads/support/access-locations.js +55 -0
  390. package/dist/reads/support/access-locations.js.map +1 -0
  391. package/dist/reads/support/excel.d.ts +10 -0
  392. package/dist/reads/support/excel.d.ts.map +1 -0
  393. package/dist/reads/support/excel.js +35 -0
  394. package/dist/reads/support/excel.js.map +1 -0
  395. package/dist/reads/support/params.d.ts +50 -0
  396. package/dist/reads/support/params.d.ts.map +1 -0
  397. package/dist/reads/support/params.js +73 -0
  398. package/dist/reads/support/params.js.map +1 -0
  399. package/dist/reads/support/resolve.d.ts +17 -0
  400. package/dist/reads/support/resolve.d.ts.map +1 -0
  401. package/dist/reads/support/resolve.js +33 -0
  402. package/dist/reads/support/resolve.js.map +1 -0
  403. package/dist/reads/support/results.d.ts +22 -0
  404. package/dist/reads/support/results.d.ts.map +1 -0
  405. package/dist/reads/support/results.js +41 -0
  406. package/dist/reads/support/results.js.map +1 -0
  407. package/dist/reads/support/roles.d.ts +13 -0
  408. package/dist/reads/support/roles.d.ts.map +1 -0
  409. package/dist/reads/support/roles.js +27 -0
  410. package/dist/reads/support/roles.js.map +1 -0
  411. package/dist/reads/support/scans.d.ts +31 -0
  412. package/dist/reads/support/scans.d.ts.map +1 -0
  413. package/dist/reads/support/scans.js +66 -0
  414. package/dist/reads/support/scans.js.map +1 -0
  415. package/dist/reads/types.d.ts +48 -0
  416. package/dist/reads/types.d.ts.map +1 -0
  417. package/dist/reads/types.js +5 -0
  418. package/dist/reads/types.js.map +1 -0
  419. package/dist/reads/users.d.ts +4 -0
  420. package/dist/reads/users.d.ts.map +1 -0
  421. package/dist/reads/users.js +57 -0
  422. package/dist/reads/users.js.map +1 -0
  423. package/dist/testing/FakePatrolTechGateway.d.ts +212 -0
  424. package/dist/testing/FakePatrolTechGateway.d.ts.map +1 -0
  425. package/dist/testing/FakePatrolTechGateway.js +712 -0
  426. package/dist/testing/FakePatrolTechGateway.js.map +1 -0
  427. package/dist/testing/RecordingFileSink.d.ts +12 -0
  428. package/dist/testing/RecordingFileSink.d.ts.map +1 -0
  429. package/dist/testing/RecordingFileSink.js +12 -0
  430. package/dist/testing/RecordingFileSink.js.map +1 -0
  431. package/dist/testing/index.d.ts +4 -0
  432. package/dist/testing/index.d.ts.map +1 -0
  433. package/dist/testing/index.js +4 -0
  434. package/dist/testing/index.js.map +1 -0
  435. package/dist/testing/reads.d.ts +34 -0
  436. package/dist/testing/reads.d.ts.map +1 -0
  437. package/dist/testing/reads.js +39 -0
  438. package/dist/testing/reads.js.map +1 -0
  439. package/package.json +76 -4
@@ -0,0 +1,712 @@
1
+ import { explainScan } from '../domain/scan-explanation.js';
2
+ export class FakePatrolTechGateway {
3
+ calls = [];
4
+ tokens = [];
5
+ /** Si true, las listas se devuelven marcadas como truncadas (para probar el aviso al modelo). */
6
+ truncado = false;
7
+ /** Opciones (rango, límite y filtros ya resueltos a id) con las que se pidieron los escaneos. */
8
+ scanOpts = [];
9
+ /** Páginas de rondas pedidas (`<routeId>:<page>`) y rondas cuyo detalle se pidió. */
10
+ roundPageCalls = [];
11
+ roundDetailCalls = [];
12
+ /** Escrituras recibidas (lo que se mandó al backend), en orden. */
13
+ writes = [];
14
+ /** Errores que lanzan las siguientes escrituras (uno por llamada, en orden). */
15
+ writeErrors = [];
16
+ /** Checkpoints que devuelve `findCheckpointsByName` (filtrados por ubicación y nombre). */
17
+ existingCheckpoints = [];
18
+ /** Vigilantes que devuelve `getPatrollerByIdentifier`. */
19
+ existingPatrollers = [];
20
+ locations = [
21
+ { id: 'loc-central', name: 'Sede Central' },
22
+ { id: 'loc-norte', name: 'Sucursal Norte' },
23
+ ];
24
+ patrollers = [
25
+ {
26
+ id: 'p-juan',
27
+ name: 'Juan Pérez',
28
+ identifier: 'A1B2C3D4',
29
+ lastScanAt: '2026-07-22T08:00:00Z',
30
+ },
31
+ { id: 'p-ana', name: 'Ana López', identifier: 'E5F6A7B8', lastScanAt: null },
32
+ ];
33
+ routes = [
34
+ { id: 'r-norte', name: 'Ruta Norte', isActive: true },
35
+ { id: 'r-sur', name: 'Ruta Sur', isActive: false },
36
+ ];
37
+ /** `codigo: null` en un QR = el usuario no es EDITOR de esa ubicación (el backend lo oculta). */
38
+ checkpointRefs = [
39
+ {
40
+ id: 'cp-entrada',
41
+ name: 'Entrada principal',
42
+ locationId: 'loc-central',
43
+ locationName: 'Sede Central',
44
+ metodo: 'qr_static',
45
+ codigo: 'PT-ENTRADA01',
46
+ },
47
+ {
48
+ id: 'cp-almacen',
49
+ name: 'Almacén',
50
+ locationId: 'loc-central',
51
+ locationName: 'Sede Central',
52
+ metodo: 'manual_code',
53
+ codigo: 'ALM-1234',
54
+ },
55
+ {
56
+ id: 'cp-recepcion',
57
+ name: 'Recepción',
58
+ locationId: 'loc-norte',
59
+ locationName: 'Sucursal Norte',
60
+ metodo: 'qr_static',
61
+ codigo: null,
62
+ },
63
+ ];
64
+ /** Detalle de cada ruta (checkpoints y horarios en UTC); una ruta sin entrada no existe (404). */
65
+ routeDetails = {
66
+ 'r-norte': {
67
+ id: 'r-norte',
68
+ name: 'Ruta Norte',
69
+ isActive: true,
70
+ locationId: 'loc-central',
71
+ checkpoints: [{ checkpointId: 'cp-entrada', order: 1 }],
72
+ timeWindows: [{ id: 'tw-1', startTime: '18:00', endTime: '19:00', days: [1, 2, 3, 4, 5] }],
73
+ },
74
+ };
75
+ /** Rondas por ruta, de la más reciente a la más antigua (como las devuelve el backend). */
76
+ rounds = {
77
+ 'r-norte': [
78
+ {
79
+ id: 'rd-3',
80
+ status: 'in_progress',
81
+ patrollerName: 'Juan Pérez',
82
+ completedCheckpoints: 1,
83
+ totalCheckpoints: 3,
84
+ startTime: '2026-07-29T20:00:00Z',
85
+ endTime: null,
86
+ },
87
+ {
88
+ id: 'rd-2',
89
+ status: 'incomplete',
90
+ patrollerName: 'Ana López',
91
+ completedCheckpoints: 2,
92
+ totalCheckpoints: 3,
93
+ startTime: '2026-07-28T21:00:00Z',
94
+ endTime: '2026-07-28T22:00:00Z',
95
+ },
96
+ {
97
+ id: 'rd-1',
98
+ status: 'completed',
99
+ patrollerName: 'Juan Pérez',
100
+ completedCheckpoints: 3,
101
+ totalCheckpoints: 3,
102
+ startTime: '2026-07-20T06:00:00Z',
103
+ endTime: '2026-07-20T07:00:00Z',
104
+ },
105
+ ],
106
+ };
107
+ scans = [
108
+ {
109
+ timestamp: '2026-07-29T08:00:00Z',
110
+ checkpointName: 'Entrada principal',
111
+ patrollerName: 'Juan Pérez',
112
+ fraudFlagged: false,
113
+ ...explainScan({
114
+ validationStatus: 'verified',
115
+ validationReason: null,
116
+ fraudFlags: { flagged: false },
117
+ }),
118
+ },
119
+ {
120
+ timestamp: '2026-07-29T07:45:00Z',
121
+ checkpointName: 'Almacén',
122
+ patrollerName: 'Ana López',
123
+ fraudFlagged: true,
124
+ ...explainScan({
125
+ validationStatus: 'pending_review',
126
+ validationReason: 'untyped_scan_on_protected_checkpoint',
127
+ fraudFlags: { flagged: true, gpsProximity: { status: 'fail' } },
128
+ }),
129
+ },
130
+ ];
131
+ planUsage = {
132
+ plan: 'Free',
133
+ estadoLicencia: 'active',
134
+ pagaSuscripcion: false,
135
+ uso: {
136
+ checkpoints: { usados: 7, incluidos: 7, extraFacturados: 0 },
137
+ ubicaciones: { usadas: 2, limite: 2 },
138
+ gestores: { usados: 3, limite: 3 },
139
+ },
140
+ };
141
+ /** Rangos (dateFrom/dateTo) con los que se pidió el ranking. */
142
+ rankingOpts = [];
143
+ supportSummary = {
144
+ rounds: { windowDays: 7, inProgress: 2, completed: 15, incomplete: 1, expired: 0 },
145
+ patrollers: { total: 8, active: 6, inactive: 1, alert: 1 },
146
+ checkpoints: { total: 24 },
147
+ suspiciousScans: { windowDays: 7, flagged: 0 },
148
+ };
149
+ async getRoundsStatus(accountId, token) {
150
+ const summary = await this.getSupportSummary(accountId, token);
151
+ return {
152
+ windowDays: summary.rounds.windowDays,
153
+ open: summary.rounds.inProgress,
154
+ completed: summary.rounds.completed,
155
+ incomplete: summary.rounds.incomplete + summary.rounds.expired,
156
+ };
157
+ }
158
+ async getPatrollerActivity(accountId, token) {
159
+ this.calls.push(accountId);
160
+ this.tokens.push(token);
161
+ const items = [
162
+ { name: 'Juan Pérez', lastScanAt: '2026-07-22T08:00:00Z', status: 'active' },
163
+ { name: 'Ana López', lastScanAt: null, status: 'alert' },
164
+ ];
165
+ return { items, total: items.length, truncado: this.truncado };
166
+ }
167
+ async getSupportSummary(accountId, token, _windowDays) {
168
+ this.calls.push(accountId);
169
+ this.tokens.push(token);
170
+ return this.supportSummary;
171
+ }
172
+ async getRecentScans(accountId, token, opts) {
173
+ this.calls.push(accountId);
174
+ this.tokens.push(token);
175
+ this.scanOpts.push(opts);
176
+ // Nota: la fake ignora las fechas y los filtros (se comprueban en `scanOpts`), pero respeta limit y page.
177
+ const scans = this.scans;
178
+ const inicio = opts?.limit ? ((opts.page ?? 1) - 1) * opts.limit : 0;
179
+ const items = opts?.limit ? scans.slice(inicio, inicio + opts.limit) : scans;
180
+ return { items, total: scans.length, truncado: this.truncado || items.length < scans.length };
181
+ }
182
+ async getRoundsDetail(accountId, token) {
183
+ this.calls.push(accountId);
184
+ this.tokens.push(token);
185
+ const items = [
186
+ {
187
+ routeName: 'Ruta Norte',
188
+ isActive: true,
189
+ rounds: [
190
+ {
191
+ status: 'completed',
192
+ patrollerName: 'Juan Pérez',
193
+ completedCheckpoints: 6,
194
+ totalCheckpoints: 6,
195
+ startTime: '2026-07-29T06:00:00Z',
196
+ endTime: '2026-07-29T07:00:00Z',
197
+ },
198
+ ],
199
+ },
200
+ {
201
+ routeName: 'Ruta Sur',
202
+ isActive: false,
203
+ rounds: [],
204
+ },
205
+ ];
206
+ return { items, total: items.length, truncado: this.truncado };
207
+ }
208
+ async getPatrollerStats(accountId, token, patrollerName) {
209
+ this.calls.push(accountId);
210
+ this.tokens.push(token);
211
+ const lower = patrollerName.trim().toLowerCase();
212
+ // Vacío no resuelve a nadie: mismo invariante que el cliente real.
213
+ if (!lower)
214
+ return { found: false, opciones: ['Juan García', 'María López'] };
215
+ if (lower === 'juan garcía' || lower === 'juan garcia' || lower.includes('juan')) {
216
+ return {
217
+ found: true,
218
+ name: 'Juan García',
219
+ totalScans: 42,
220
+ roundsCompleted: 8,
221
+ totalRounds: 10,
222
+ completionRate: 0.8,
223
+ avgTimeBetweenScans: 15.5,
224
+ incidentsReported: 3,
225
+ incidentsOpen: 1,
226
+ };
227
+ }
228
+ return { found: false, opciones: ['Juan García', 'María López'] };
229
+ }
230
+ async getRoundCheckpoints(accountId, token, routeName) {
231
+ this.calls.push(accountId);
232
+ this.tokens.push(token);
233
+ if (!routeName?.trim()) {
234
+ return { found: false, reason: 'route_not_specified', opciones: ['Ruta Norte', 'Ruta Sur'] };
235
+ }
236
+ const lower = routeName.trim().toLowerCase();
237
+ if (lower === 'ruta norte' || lower.includes('norte')) {
238
+ return {
239
+ found: true,
240
+ routeName: 'Ruta Norte',
241
+ status: 'incomplete',
242
+ scannedCount: 2,
243
+ totalCount: 3,
244
+ checkpoints: [
245
+ {
246
+ checkpointName: 'Entrada principal',
247
+ order: 1,
248
+ scanned: true,
249
+ scanTime: '2026-07-29T06:05:00Z',
250
+ },
251
+ { checkpointName: 'Almacén', order: 2, scanned: true, scanTime: '2026-07-29T06:20:00Z' },
252
+ { checkpointName: 'Azotea', order: 3, scanned: false, scanTime: null },
253
+ ],
254
+ };
255
+ }
256
+ return { found: false, reason: 'route_not_found', opciones: ['Ruta Norte', 'Ruta Sur'] };
257
+ }
258
+ async getCheckpoints(accountId, token) {
259
+ this.calls.push(accountId);
260
+ this.tokens.push(token);
261
+ // Los mismos checkpoints que `listCheckpoints` (por defecto: Entrada principal, Almacén y Recepción).
262
+ const items = this.checkpointRefs.map((c) => ({
263
+ id: c.id,
264
+ name: c.name,
265
+ locationName: c.locationName,
266
+ ...(c.identificador ? { identificador: c.identificador } : {}),
267
+ }));
268
+ return { items, total: items.length, truncado: this.truncado, ubicacionesConError: 0 };
269
+ }
270
+ async getPatrollerRanking(accountId, token, opts) {
271
+ this.calls.push(accountId);
272
+ this.tokens.push(token);
273
+ this.rankingOpts.push(opts);
274
+ return {
275
+ truncado: this.truncado,
276
+ summary: {
277
+ totalScans: 87,
278
+ activePatrollers: 3,
279
+ avgScansPerPatroller: 29,
280
+ bestCompletionRate: 0.95,
281
+ },
282
+ ranking: [
283
+ {
284
+ patrollerName: 'Juan García',
285
+ totalScans: 42,
286
+ roundsCompleted: 8,
287
+ completionRate: 0.95,
288
+ avgTimeBetweenScans: 15.5,
289
+ },
290
+ {
291
+ patrollerName: 'María López',
292
+ totalScans: 30,
293
+ roundsCompleted: 6,
294
+ completionRate: 0.8,
295
+ avgTimeBetweenScans: 18.2,
296
+ },
297
+ {
298
+ patrollerName: 'Ana López',
299
+ totalScans: 15,
300
+ roundsCompleted: 3,
301
+ completionRate: 0.6,
302
+ avgTimeBetweenScans: 25.0,
303
+ },
304
+ ],
305
+ topCheckpoints: [
306
+ { checkpointName: 'Entrada principal', totalScans: 30 },
307
+ { checkpointName: 'Almacén', totalScans: 22 },
308
+ ],
309
+ };
310
+ }
311
+ async listLocations(accountId, token) {
312
+ this.calls.push(accountId);
313
+ this.tokens.push(token);
314
+ return this.locations;
315
+ }
316
+ async listPatrollers(accountId, token) {
317
+ this.calls.push(accountId);
318
+ this.tokens.push(token);
319
+ return { items: this.patrollers, total: this.patrollers.length, truncado: this.truncado };
320
+ }
321
+ async listRoutes(accountId, token) {
322
+ this.calls.push(accountId);
323
+ this.tokens.push(token);
324
+ return { items: this.routes, total: this.routes.length, truncado: this.truncado };
325
+ }
326
+ async listCheckpoints(accountId, token) {
327
+ this.calls.push(accountId);
328
+ this.tokens.push(token);
329
+ return {
330
+ items: this.checkpointRefs,
331
+ total: this.checkpointRefs.length,
332
+ truncado: this.truncado,
333
+ ubicacionesConError: 0,
334
+ };
335
+ }
336
+ async getRouteRounds(routeId, token, { page, limit }) {
337
+ this.tokens.push(token);
338
+ this.roundPageCalls.push(`${routeId}:${page}`);
339
+ const all = this.rounds[routeId] ?? [];
340
+ return {
341
+ items: all.slice((page - 1) * limit, page * limit),
342
+ totalPages: Math.ceil(all.length / limit),
343
+ };
344
+ }
345
+ async getRoundDetail(_routeId, roundId, token) {
346
+ this.tokens.push(token);
347
+ this.roundDetailCalls.push(roundId);
348
+ return {
349
+ status: 'incomplete',
350
+ scannedCount: 2,
351
+ totalCount: 3,
352
+ checkpoints: [
353
+ {
354
+ checkpointName: 'Entrada principal',
355
+ order: 1,
356
+ scanned: true,
357
+ scanTime: '2026-07-28T21:05:00Z',
358
+ },
359
+ { checkpointName: 'Almacén', order: 2, scanned: true, scanTime: '2026-07-28T21:20:00Z' },
360
+ { checkpointName: 'Azotea', order: 3, scanned: false, scanTime: null },
361
+ ],
362
+ };
363
+ }
364
+ async getPlanUsage(accountId, token) {
365
+ this.calls.push(accountId);
366
+ this.tokens.push(token);
367
+ return this.planUsage;
368
+ }
369
+ plans = [
370
+ {
371
+ tierId: 'tier-pro',
372
+ nombre: 'Pro',
373
+ identificador: 'pro',
374
+ moneda: 'EUR',
375
+ checkpointsIncluidos: 12,
376
+ mensual: { base: 11, extra: 3 },
377
+ anual: { base: 110, extra: 30 },
378
+ },
379
+ {
380
+ tierId: 'tier-business',
381
+ nombre: 'Business',
382
+ identificador: 'business',
383
+ moneda: 'EUR',
384
+ checkpointsIncluidos: 48,
385
+ mensual: { base: 22, extra: 4 },
386
+ anual: { base: 220, extra: 40 },
387
+ },
388
+ ];
389
+ /** Enlaces de pago pedidos (checkout y portal), en orden. */
390
+ paymentLinks = [];
391
+ /** Error que lanzan los enlaces de pago (p. ej. 403 a quien no es Admin). */
392
+ paymentLinkError = null;
393
+ /** Error que lanza solo el checkout (p. ej. 409 `ALREADY_SUBSCRIBED` a quien ya paga). */
394
+ checkoutError = null;
395
+ checkoutUrl = 'https://checkout.stripe.com/c/pay/cs_test_fake';
396
+ portalUrl = 'https://billing.stripe.com/p/session/test_fake';
397
+ /** Consultas al catálogo de precios, en orden (organización y país que se pidieron). */
398
+ plansQueries = [];
399
+ /** Error que lanza el catálogo de precios (backend caído). */
400
+ plansError = null;
401
+ async getPlans(accountId, token, country) {
402
+ this.plansQueries.push({ accountId, country: country ?? null });
403
+ if (accountId)
404
+ this.calls.push(accountId);
405
+ if (token)
406
+ this.tokens.push(token);
407
+ if (this.plansError)
408
+ throw this.plansError;
409
+ return this.plans;
410
+ }
411
+ async createCheckoutLink(accountId, input, token) {
412
+ this.tokens.push(token);
413
+ this.paymentLinks.push({ op: 'checkout', accountId, input });
414
+ if (this.paymentLinkError)
415
+ throw this.paymentLinkError;
416
+ if (this.checkoutError)
417
+ throw this.checkoutError;
418
+ return this.checkoutUrl;
419
+ }
420
+ async createCustomerPortalLink(accountId, returnUrl, token) {
421
+ this.tokens.push(token);
422
+ this.paymentLinks.push({ op: 'portal', accountId, returnUrl });
423
+ if (this.paymentLinkError)
424
+ throw this.paymentLinkError;
425
+ return this.portalUrl;
426
+ }
427
+ write(op, input, token) {
428
+ this.writes.push({ op, input, token });
429
+ const err = this.writeErrors.shift();
430
+ if (err)
431
+ throw err;
432
+ }
433
+ async createCheckpoint(input, token) {
434
+ this.write('createCheckpoint', input, token);
435
+ return {
436
+ id: 'cp-new',
437
+ name: input.name,
438
+ locationId: input.locationId,
439
+ metodo: input.metodo,
440
+ codigo: 'PT-NEW0000001',
441
+ creadoEn: new Date().toISOString(),
442
+ };
443
+ }
444
+ async findCheckpointsByName(locationId, name, token) {
445
+ this.tokens.push(token);
446
+ return this.existingCheckpoints.filter((c) => c.locationId === locationId && c.name.toLowerCase().includes(name.toLowerCase()));
447
+ }
448
+ async createPatroller(input, token) {
449
+ this.write('createPatroller', input, token);
450
+ return {
451
+ id: 'p-new',
452
+ name: input.name,
453
+ identifier: input.identifier,
454
+ organizationId: input.organizationId,
455
+ };
456
+ }
457
+ async getPatrollerByIdentifier(identifier, token) {
458
+ this.tokens.push(token);
459
+ return this.existingPatrollers.find((p) => p.identifier === identifier) ?? null;
460
+ }
461
+ async setAlertPreference(input, token) {
462
+ this.write('setAlertPreference', input, token);
463
+ }
464
+ async getRouteDetails(routeId, token) {
465
+ this.tokens.push(token);
466
+ return this.routeDetails[routeId] ?? null;
467
+ }
468
+ async createRoute(input, token) {
469
+ this.write('createRoute', input, token);
470
+ return { id: input.id, name: input.name };
471
+ }
472
+ async addRouteTimeWindow(routeId, window, token) {
473
+ this.write('addRouteTimeWindow', { routeId, ...window }, token);
474
+ }
475
+ async deleteRouteTimeWindow(timeWindowId, token) {
476
+ this.write('deleteRouteTimeWindow', { timeWindowId }, token);
477
+ }
478
+ async setRouteActive(routeId, isActive, token) {
479
+ this.write('setRouteActive', { routeId, isActive }, token);
480
+ }
481
+ async addCheckpointToRoute(routeId, checkpointId, order, token) {
482
+ this.write('addCheckpointToRoute', { routeId, checkpointId, order }, token);
483
+ }
484
+ async removeCheckpointFromRoute(routeId, checkpointId, token) {
485
+ this.write('removeCheckpointFromRoute', { routeId, checkpointId }, token);
486
+ }
487
+ // Incidencias, ediciones y usuarios ---------------------------------------
488
+ incidents = [
489
+ {
490
+ id: 'inc-1',
491
+ titulo: 'Puerta del almacén forzada',
492
+ estado: 'OPEN',
493
+ prioridad: 'HIGH',
494
+ locationId: 'loc-central',
495
+ asignadoAId: null,
496
+ asignadoA: null,
497
+ creadaEn: '2026-07-29T09:00:00Z',
498
+ },
499
+ {
500
+ id: 'inc-2',
501
+ titulo: 'Luz fundida en recepción',
502
+ estado: 'IN_PROGRESS',
503
+ prioridad: 'LOW',
504
+ locationId: 'loc-norte',
505
+ asignadoAId: 'u-marta',
506
+ asignadoA: 'Marta Ruiz',
507
+ creadaEn: '2026-07-28T20:00:00Z',
508
+ },
509
+ {
510
+ id: 'inc-3',
511
+ titulo: 'Cámara rota',
512
+ estado: 'CLOSED',
513
+ prioridad: 'MEDIUM',
514
+ locationId: 'loc-central',
515
+ asignadoAId: 'u-marta',
516
+ asignadoA: 'Marta Ruiz',
517
+ creadaEn: '2026-07-20T08:00:00Z',
518
+ },
519
+ ];
520
+ /** Error que lanza `listIncidents` (p. ej. la App de incidencias apagada). */
521
+ incidentsError = null;
522
+ /** Estados con los que se pidieron las incidencias. */
523
+ incidentOpts = [];
524
+ orgUsers = [
525
+ {
526
+ id: 'u-marta',
527
+ nombre: 'Marta Ruiz',
528
+ email: 'marta@acme.test',
529
+ roles: [{ id: 'r-marta', rol: 'ADMIN', ambito: 'ORGANIZATION', scopeId: 'org-1' }],
530
+ },
531
+ {
532
+ id: 'u-pedro',
533
+ nombre: 'Pedro Gil',
534
+ email: 'pedro@acme.test',
535
+ roles: [{ id: 'r-pedro', rol: 'VIEWER', ambito: 'LOCATION', scopeId: 'loc-norte' }],
536
+ },
537
+ ];
538
+ /** Error que lanza `listOrgUsers` (p. ej. 403 a quien no es Admin). */
539
+ orgUsersError = null;
540
+ archivedCheckpointRefs = [
541
+ {
542
+ id: 'cp-viejo',
543
+ name: 'Garaje',
544
+ locationId: 'loc-central',
545
+ locationName: 'Sede Central',
546
+ metodo: 'qr_static',
547
+ codigo: 'PT-GARAJE01',
548
+ },
549
+ ];
550
+ async listIncidents(accountId, token, opts) {
551
+ this.calls.push(accountId);
552
+ this.tokens.push(token);
553
+ this.incidentOpts.push(opts);
554
+ if (this.incidentsError)
555
+ throw this.incidentsError;
556
+ const items = opts?.estado
557
+ ? this.incidents.filter((i) => i.estado === opts.estado)
558
+ : this.incidents;
559
+ return { items, total: items.length, truncado: this.truncado };
560
+ }
561
+ async updateIncidentStatus(input, token) {
562
+ this.write('updateIncidentStatus', input, token);
563
+ }
564
+ async assignIncident(input, token) {
565
+ this.write('assignIncident', input, token);
566
+ }
567
+ async commentIncident(input, token) {
568
+ this.write('commentIncident', input, token);
569
+ }
570
+ async listOrgUsers(accountId, token) {
571
+ this.calls.push(accountId);
572
+ this.tokens.push(token);
573
+ if (this.orgUsersError)
574
+ throw this.orgUsersError;
575
+ return this.orgUsers;
576
+ }
577
+ async updatePatroller(input, token) {
578
+ this.write('updatePatroller', input, token);
579
+ const p = this.patrollers.find((x) => x.id === input.id);
580
+ return {
581
+ id: input.id,
582
+ name: input.name ?? p?.name ?? '',
583
+ identifier: p?.identifier ?? '',
584
+ organizationId: 'org-1',
585
+ };
586
+ }
587
+ async updateCheckpoint(input, token) {
588
+ this.write('updateCheckpoint', input, token);
589
+ }
590
+ /** Lo que devuelve `archiveCheckpoint`: las rutas afectadas según el backend (null = no las manda). */
591
+ archiveResult = null;
592
+ async archiveCheckpoint(id, token) {
593
+ this.write('archiveCheckpoint', { id }, token);
594
+ return this.archiveResult;
595
+ }
596
+ async unarchiveCheckpoint(id, token) {
597
+ this.write('unarchiveCheckpoint', { id }, token);
598
+ }
599
+ async listArchivedCheckpoints(accountId, token) {
600
+ this.calls.push(accountId);
601
+ this.tokens.push(token);
602
+ return {
603
+ items: this.archivedCheckpointRefs,
604
+ total: this.archivedCheckpointRefs.length,
605
+ truncado: false,
606
+ ubicacionesConError: 0,
607
+ };
608
+ }
609
+ // Antifraude y posición del checkpoint -----------------------------------
610
+ /** Posición y reglas por id de checkpoint; sin entrada = sin coordenadas ni reglas. Las escrituras las actualizan. */
611
+ checkpointGeo = {};
612
+ async getCheckpointDetail(input, token) {
613
+ this.tokens.push(token);
614
+ const cp = this.checkpointRefs.find((c) => c.id === input.id && c.locationId === input.locationId);
615
+ if (!cp)
616
+ return null;
617
+ const g = this.checkpointGeo[cp.id] ?? {};
618
+ return {
619
+ id: cp.id,
620
+ name: cp.name,
621
+ locationId: cp.locationId,
622
+ metodo: cp.metodo,
623
+ latitud: g.latitud ?? null,
624
+ longitud: g.longitud ?? null,
625
+ reglasAntifraude: g.reglasAntifraude ?? {},
626
+ reglasDesconocidas: g.reglasDesconocidas ?? [],
627
+ };
628
+ }
629
+ async updateCheckpointFraudRules(input, token) {
630
+ this.write('updateCheckpointFraudRules', input, token);
631
+ this.checkpointGeo[input.id] = {
632
+ ...this.checkpointGeo[input.id],
633
+ reglasAntifraude: input.fraudRules ?? {},
634
+ };
635
+ }
636
+ async moveCheckpoint(input, token) {
637
+ this.write('moveCheckpoint', input, token);
638
+ this.checkpointGeo[input.id] = {
639
+ ...this.checkpointGeo[input.id],
640
+ latitud: input.latitude,
641
+ longitud: input.longitude,
642
+ };
643
+ }
644
+ // Incidencias y Control de Acceso -----------------------------------------
645
+ /** Detalle de cada incidencia por id; sin entrada = no existe (404 → null). */
646
+ incidentDetails = {};
647
+ /** Incidencias cuyo detalle se pidió, con la ubicación/organización de la query. */
648
+ incidentDetailCalls = [];
649
+ async getIncidentDetail(target, token) {
650
+ this.tokens.push(token);
651
+ this.incidentDetailCalls.push(target);
652
+ return this.incidentDetails[target.incidentId] ?? null;
653
+ }
654
+ /** Registros del Control de Acceso de todas las ubicaciones (se filtran como el backend). */
655
+ accessLogs = [];
656
+ /** Lo que devuelve `listActiveAccessEntries` (filtrado por ubicación). */
657
+ activeAccessEntries = [];
658
+ /** Error que lanzan las lecturas del Control de Acceso (p. ej. la App apagada). */
659
+ accessLogsError = null;
660
+ accessLogQueries = [];
661
+ async listAccessLogs(query, token) {
662
+ this.tokens.push(token);
663
+ this.accessLogQueries.push(query);
664
+ if (this.accessLogsError)
665
+ throw this.accessLogsError;
666
+ const filtrados = this.accessLogs
667
+ .filter((a) => a.locationId === query.locationId &&
668
+ (!query.tipo || a.tipo === query.tipo) &&
669
+ (!query.zona || a.zona === query.zona) &&
670
+ (!query.desde || a.fecha >= query.desde) &&
671
+ (!query.hasta || a.fecha <= query.hasta))
672
+ .sort((a, b) => b.fecha.localeCompare(a.fecha));
673
+ const limit = Math.min(query.limit ?? 20, 100);
674
+ const desde = ((query.page ?? 1) - 1) * limit;
675
+ return { items: filtrados.slice(desde, desde + limit), total: filtrados.length };
676
+ }
677
+ async listActiveAccessEntries(locationId, token, zona) {
678
+ this.tokens.push(token);
679
+ if (this.accessLogsError)
680
+ throw this.accessLogsError;
681
+ return this.activeAccessEntries.filter((a) => a.locationId === locationId && (!zona || a.zona === zona));
682
+ }
683
+ // Ubicaciones y usuarios del panel ----------------------------------------
684
+ /** Lo que devuelve `inviteUser` (cuenta nueva con el correo enviado, por defecto). */
685
+ inviteResult = { cuentaNueva: true, emailEnviado: true };
686
+ async updateLocation(input, token) {
687
+ this.write('updateLocation', input, token);
688
+ }
689
+ async deleteLocation(id, token) {
690
+ this.write('deleteLocation', { id }, token);
691
+ }
692
+ async inviteUser(input, token) {
693
+ this.write('inviteUser', input, token);
694
+ return this.inviteResult;
695
+ }
696
+ /** Las dos escrituras de roles cambian `orgUsers`, como el backend: en un lote, la siguiente ve la lista nueva. */
697
+ async updateUserRole(input, token) {
698
+ this.write('updateUserRole', input, token);
699
+ this.orgUsers = this.orgUsers.map((u) => ({
700
+ ...u,
701
+ roles: u.roles.map((r) => (r.id === input.userRoleId ? { ...r, rol: input.roleType } : r)),
702
+ }));
703
+ }
704
+ async deleteUserRole(userRoleId, token) {
705
+ this.write('deleteUserRole', { userRoleId }, token);
706
+ this.orgUsers = this.orgUsers.map((u) => ({
707
+ ...u,
708
+ roles: u.roles.filter((r) => r.id !== userRoleId),
709
+ }));
710
+ }
711
+ }
712
+ //# sourceMappingURL=FakePatrolTechGateway.js.map