@freighttech/shipment-tracking 0.6.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 (456) hide show
  1. package/LICENSE +21 -0
  2. package/NOTICE +25 -0
  3. package/dist/generated/entities/bic_config/index.js +21 -0
  4. package/dist/generated/entities/bic_config/index.js.map +7 -0
  5. package/dist/generated/entities/carrier_config/index.js +27 -0
  6. package/dist/generated/entities/carrier_config/index.js.map +7 -0
  7. package/dist/generated/entities/location_override/index.js +33 -0
  8. package/dist/generated/entities/location_override/index.js.map +7 -0
  9. package/dist/generated/entities/shipment/index.js +73 -0
  10. package/dist/generated/entities/shipment/index.js.map +7 -0
  11. package/dist/generated/entities/ships_go_config/index.js +31 -0
  12. package/dist/generated/entities/ships_go_config/index.js.map +7 -0
  13. package/dist/generated/entities/tracking_event/index.js +101 -0
  14. package/dist/generated/entities/tracking_event/index.js.map +7 -0
  15. package/dist/generated/entities/tracking_job/index.js +47 -0
  16. package/dist/generated/entities/tracking_job/index.js.map +7 -0
  17. package/dist/generated/entities/webhook/index.js +25 -0
  18. package/dist/generated/entities/webhook/index.js.map +7 -0
  19. package/dist/generated/entities/webhook_delivery/index.js +25 -0
  20. package/dist/generated/entities/webhook_delivery/index.js.map +7 -0
  21. package/dist/generated/entities.ids.generated.js +21 -0
  22. package/dist/generated/entities.ids.generated.js.map +7 -0
  23. package/dist/index.js +41 -0
  24. package/dist/index.js.map +7 -0
  25. package/dist/modules/shipment_tracking/acl.js +22 -0
  26. package/dist/modules/shipment_tracking/acl.js.map +7 -0
  27. package/dist/modules/shipment_tracking/api/bic-configs/route.js +176 -0
  28. package/dist/modules/shipment_tracking/api/bic-configs/route.js.map +7 -0
  29. package/dist/modules/shipment_tracking/api/bic-configs/test/route.js +95 -0
  30. package/dist/modules/shipment_tracking/api/bic-configs/test/route.js.map +7 -0
  31. package/dist/modules/shipment_tracking/api/cargo-events/route.js +93 -0
  32. package/dist/modules/shipment_tracking/api/cargo-events/route.js.map +7 -0
  33. package/dist/modules/shipment_tracking/api/carrier-configs/route.js +139 -0
  34. package/dist/modules/shipment_tracking/api/carrier-configs/route.js.map +7 -0
  35. package/dist/modules/shipment_tracking/api/dashboard/ships-map/route.js +177 -0
  36. package/dist/modules/shipment_tracking/api/dashboard/ships-map/route.js.map +7 -0
  37. package/dist/modules/shipment_tracking/api/location-overrides/route.js +179 -0
  38. package/dist/modules/shipment_tracking/api/location-overrides/route.js.map +7 -0
  39. package/dist/modules/shipment_tracking/api/openapi.js +27 -0
  40. package/dist/modules/shipment_tracking/api/openapi.js.map +7 -0
  41. package/dist/modules/shipment_tracking/api/shipments/route.js +192 -0
  42. package/dist/modules/shipment_tracking/api/shipments/route.js.map +7 -0
  43. package/dist/modules/shipment_tracking/api/shipsgo-configs/route.js +185 -0
  44. package/dist/modules/shipment_tracking/api/shipsgo-configs/route.js.map +7 -0
  45. package/dist/modules/shipment_tracking/api/tracking-jobs/route.js +144 -0
  46. package/dist/modules/shipment_tracking/api/tracking-jobs/route.js.map +7 -0
  47. package/dist/modules/shipment_tracking/api/tracking-jobs/sync/route.js +107 -0
  48. package/dist/modules/shipment_tracking/api/tracking-jobs/sync/route.js.map +7 -0
  49. package/dist/modules/shipment_tracking/api/utils.js +12 -0
  50. package/dist/modules/shipment_tracking/api/utils.js.map +7 -0
  51. package/dist/modules/shipment_tracking/api/webhooks/deliveries/route.js +76 -0
  52. package/dist/modules/shipment_tracking/api/webhooks/deliveries/route.js.map +7 -0
  53. package/dist/modules/shipment_tracking/api/webhooks/route.js +135 -0
  54. package/dist/modules/shipment_tracking/api/webhooks/route.js.map +7 -0
  55. package/dist/modules/shipment_tracking/api/webhooks/test/route.js +71 -0
  56. package/dist/modules/shipment_tracking/api/webhooks/test/route.js.map +7 -0
  57. package/dist/modules/shipment_tracking/assets/carriers/cma_cgm.png +0 -0
  58. package/dist/modules/shipment_tracking/assets/carriers/cosco.png +0 -0
  59. package/dist/modules/shipment_tracking/assets/carriers/evergreen.png +0 -0
  60. package/dist/modules/shipment_tracking/assets/carriers/hapag_lloyd.png +0 -0
  61. package/dist/modules/shipment_tracking/assets/carriers/maersk.png +0 -0
  62. package/dist/modules/shipment_tracking/assets/carriers/msc.png +0 -0
  63. package/dist/modules/shipment_tracking/assets/carriers/one.png +0 -0
  64. package/dist/modules/shipment_tracking/assets/carriers/oocl.png +0 -0
  65. package/dist/modules/shipment_tracking/assets/carriers/yang_ming.png +0 -0
  66. package/dist/modules/shipment_tracking/assets/carriers/zim.png +0 -0
  67. package/dist/modules/shipment_tracking/assets/index.js +52 -0
  68. package/dist/modules/shipment_tracking/assets/index.js.map +7 -0
  69. package/dist/modules/shipment_tracking/backend/carrier-configs/page.js +621 -0
  70. package/dist/modules/shipment_tracking/backend/carrier-configs/page.js.map +7 -0
  71. package/dist/modules/shipment_tracking/backend/carrier-configs/page.meta.js +19 -0
  72. package/dist/modules/shipment_tracking/backend/carrier-configs/page.meta.js.map +7 -0
  73. package/dist/modules/shipment_tracking/backend/location-overrides/page.js +198 -0
  74. package/dist/modules/shipment_tracking/backend/location-overrides/page.js.map +7 -0
  75. package/dist/modules/shipment_tracking/backend/location-overrides/page.meta.js +19 -0
  76. package/dist/modules/shipment_tracking/backend/location-overrides/page.meta.js.map +7 -0
  77. package/dist/modules/shipment_tracking/backend/shipment-tracking/page.js +279 -0
  78. package/dist/modules/shipment_tracking/backend/shipment-tracking/page.js.map +7 -0
  79. package/dist/modules/shipment_tracking/backend/shipment-tracking/page.meta.js +19 -0
  80. package/dist/modules/shipment_tracking/backend/shipment-tracking/page.meta.js.map +7 -0
  81. package/dist/modules/shipment_tracking/backend/tracking-jobs/page.js +10 -0
  82. package/dist/modules/shipment_tracking/backend/tracking-jobs/page.js.map +7 -0
  83. package/dist/modules/shipment_tracking/backend/tracking-jobs/page.meta.js +19 -0
  84. package/dist/modules/shipment_tracking/backend/tracking-jobs/page.meta.js.map +7 -0
  85. package/dist/modules/shipment_tracking/backend/webhooks/page.js +198 -0
  86. package/dist/modules/shipment_tracking/backend/webhooks/page.js.map +7 -0
  87. package/dist/modules/shipment_tracking/backend/webhooks/page.meta.js +19 -0
  88. package/dist/modules/shipment_tracking/backend/webhooks/page.meta.js.map +7 -0
  89. package/dist/modules/shipment_tracking/ce.js +52 -0
  90. package/dist/modules/shipment_tracking/ce.js.map +7 -0
  91. package/dist/modules/shipment_tracking/cli.js +229 -0
  92. package/dist/modules/shipment_tracking/cli.js.map +7 -0
  93. package/dist/modules/shipment_tracking/commands/bic-configs.js +66 -0
  94. package/dist/modules/shipment_tracking/commands/bic-configs.js.map +7 -0
  95. package/dist/modules/shipment_tracking/commands/carrier-configs.js +65 -0
  96. package/dist/modules/shipment_tracking/commands/carrier-configs.js.map +7 -0
  97. package/dist/modules/shipment_tracking/commands/index.js +9 -0
  98. package/dist/modules/shipment_tracking/commands/index.js.map +7 -0
  99. package/dist/modules/shipment_tracking/commands/location-overrides.js +93 -0
  100. package/dist/modules/shipment_tracking/commands/location-overrides.js.map +7 -0
  101. package/dist/modules/shipment_tracking/commands/shipments.js +200 -0
  102. package/dist/modules/shipment_tracking/commands/shipments.js.map +7 -0
  103. package/dist/modules/shipment_tracking/commands/shipsgo-configs.js +75 -0
  104. package/dist/modules/shipment_tracking/commands/shipsgo-configs.js.map +7 -0
  105. package/dist/modules/shipment_tracking/commands/tracking-jobs.js +120 -0
  106. package/dist/modules/shipment_tracking/commands/tracking-jobs.js.map +7 -0
  107. package/dist/modules/shipment_tracking/commands/tracking.js +140 -0
  108. package/dist/modules/shipment_tracking/commands/tracking.js.map +7 -0
  109. package/dist/modules/shipment_tracking/commands/webhooks.js +115 -0
  110. package/dist/modules/shipment_tracking/commands/webhooks.js.map +7 -0
  111. package/dist/modules/shipment_tracking/components/CombinedTimestampCell.js +168 -0
  112. package/dist/modules/shipment_tracking/components/CombinedTimestampCell.js.map +7 -0
  113. package/dist/modules/shipment_tracking/components/FacilityLocationInput.js +202 -0
  114. package/dist/modules/shipment_tracking/components/FacilityLocationInput.js.map +7 -0
  115. package/dist/modules/shipment_tracking/components/LocationOverrideDrawer.js +501 -0
  116. package/dist/modules/shipment_tracking/components/LocationOverrideDrawer.js.map +7 -0
  117. package/dist/modules/shipment_tracking/components/ShipmentDetailsDrawer.js +818 -0
  118. package/dist/modules/shipment_tracking/components/ShipmentDetailsDrawer.js.map +7 -0
  119. package/dist/modules/shipment_tracking/components/ShipmentDrawer.js +404 -0
  120. package/dist/modules/shipment_tracking/components/ShipmentDrawer.js.map +7 -0
  121. package/dist/modules/shipment_tracking/components/ShipsGoConfigSection.js +200 -0
  122. package/dist/modules/shipment_tracking/components/ShipsGoConfigSection.js.map +7 -0
  123. package/dist/modules/shipment_tracking/components/TimestampCell.js +108 -0
  124. package/dist/modules/shipment_tracking/components/TimestampCell.js.map +7 -0
  125. package/dist/modules/shipment_tracking/components/TrackingJobDrawer.js +343 -0
  126. package/dist/modules/shipment_tracking/components/TrackingJobDrawer.js.map +7 -0
  127. package/dist/modules/shipment_tracking/components/VesselTrackingMap.js +496 -0
  128. package/dist/modules/shipment_tracking/components/VesselTrackingMap.js.map +7 -0
  129. package/dist/modules/shipment_tracking/components/WebhookDrawer.js +332 -0
  130. package/dist/modules/shipment_tracking/components/WebhookDrawer.js.map +7 -0
  131. package/dist/modules/shipment_tracking/data/entities.js +686 -0
  132. package/dist/modules/shipment_tracking/data/entities.js.map +7 -0
  133. package/dist/modules/shipment_tracking/data/validators.js +434 -0
  134. package/dist/modules/shipment_tracking/data/validators.js.map +7 -0
  135. package/dist/modules/shipment_tracking/di.js +60 -0
  136. package/dist/modules/shipment_tracking/di.js.map +7 -0
  137. package/dist/modules/shipment_tracking/encryption.js +12 -0
  138. package/dist/modules/shipment_tracking/encryption.js.map +7 -0
  139. package/dist/modules/shipment_tracking/events.js +87 -0
  140. package/dist/modules/shipment_tracking/events.js.map +7 -0
  141. package/dist/modules/shipment_tracking/hooks/useVesselTracking.js +137 -0
  142. package/dist/modules/shipment_tracking/hooks/useVesselTracking.js.map +7 -0
  143. package/dist/modules/shipment_tracking/i18n/de.json +327 -0
  144. package/dist/modules/shipment_tracking/i18n/en.json +327 -0
  145. package/dist/modules/shipment_tracking/i18n/es.json +327 -0
  146. package/dist/modules/shipment_tracking/i18n/pl.json +327 -0
  147. package/dist/modules/shipment_tracking/index.js +15 -0
  148. package/dist/modules/shipment_tracking/index.js.map +7 -0
  149. package/dist/modules/shipment_tracking/lib/adapters/cma-cgm.js +66 -0
  150. package/dist/modules/shipment_tracking/lib/adapters/cma-cgm.js.map +7 -0
  151. package/dist/modules/shipment_tracking/lib/adapters/cosco-types.js +1 -0
  152. package/dist/modules/shipment_tracking/lib/adapters/cosco-types.js.map +7 -0
  153. package/dist/modules/shipment_tracking/lib/adapters/cosco.js +236 -0
  154. package/dist/modules/shipment_tracking/lib/adapters/cosco.js.map +7 -0
  155. package/dist/modules/shipment_tracking/lib/adapters/evergreen.js +87 -0
  156. package/dist/modules/shipment_tracking/lib/adapters/evergreen.js.map +7 -0
  157. package/dist/modules/shipment_tracking/lib/adapters/hapag-lloyd.js +68 -0
  158. package/dist/modules/shipment_tracking/lib/adapters/hapag-lloyd.js.map +7 -0
  159. package/dist/modules/shipment_tracking/lib/adapters/index.js +20 -0
  160. package/dist/modules/shipment_tracking/lib/adapters/index.js.map +7 -0
  161. package/dist/modules/shipment_tracking/lib/adapters/maersk.js +84 -0
  162. package/dist/modules/shipment_tracking/lib/adapters/maersk.js.map +7 -0
  163. package/dist/modules/shipment_tracking/lib/adapters/msc.js +170 -0
  164. package/dist/modules/shipment_tracking/lib/adapters/msc.js.map +7 -0
  165. package/dist/modules/shipment_tracking/lib/adapters/zim.js +85 -0
  166. package/dist/modules/shipment_tracking/lib/adapters/zim.js.map +7 -0
  167. package/dist/modules/shipment_tracking/lib/audit-helpers.js +20 -0
  168. package/dist/modules/shipment_tracking/lib/audit-helpers.js.map +7 -0
  169. package/dist/modules/shipment_tracking/lib/auth/base64url.js +8 -0
  170. package/dist/modules/shipment_tracking/lib/auth/base64url.js.map +7 -0
  171. package/dist/modules/shipment_tracking/lib/auth/oauth-client.js +38 -0
  172. package/dist/modules/shipment_tracking/lib/auth/oauth-client.js.map +7 -0
  173. package/dist/modules/shipment_tracking/lib/background.js +15 -0
  174. package/dist/modules/shipment_tracking/lib/background.js.map +7 -0
  175. package/dist/modules/shipment_tracking/lib/bic-api-client.js +106 -0
  176. package/dist/modules/shipment_tracking/lib/bic-api-client.js.map +7 -0
  177. package/dist/modules/shipment_tracking/lib/carrier-adapter.js +17 -0
  178. package/dist/modules/shipment_tracking/lib/carrier-adapter.js.map +7 -0
  179. package/dist/modules/shipment_tracking/lib/current-vessel.js +149 -0
  180. package/dist/modules/shipment_tracking/lib/current-vessel.js.map +7 -0
  181. package/dist/modules/shipment_tracking/lib/dcsa-event-mapping.js +124 -0
  182. package/dist/modules/shipment_tracking/lib/dcsa-event-mapping.js.map +7 -0
  183. package/dist/modules/shipment_tracking/lib/dcsa-event-parser.js +112 -0
  184. package/dist/modules/shipment_tracking/lib/dcsa-event-parser.js.map +7 -0
  185. package/dist/modules/shipment_tracking/lib/dcsa-params.js +16 -0
  186. package/dist/modules/shipment_tracking/lib/dcsa-params.js.map +7 -0
  187. package/dist/modules/shipment_tracking/lib/empty-return.js +48 -0
  188. package/dist/modules/shipment_tracking/lib/empty-return.js.map +7 -0
  189. package/dist/modules/shipment_tracking/lib/location-overrides.js +85 -0
  190. package/dist/modules/shipment_tracking/lib/location-overrides.js.map +7 -0
  191. package/dist/modules/shipment_tracking/lib/location-types.js +59 -0
  192. package/dist/modules/shipment_tracking/lib/location-types.js.map +7 -0
  193. package/dist/modules/shipment_tracking/lib/logger.js +113 -0
  194. package/dist/modules/shipment_tracking/lib/logger.js.map +7 -0
  195. package/dist/modules/shipment_tracking/lib/poi-event-processor.js +183 -0
  196. package/dist/modules/shipment_tracking/lib/poi-event-processor.js.map +7 -0
  197. package/dist/modules/shipment_tracking/lib/poi-nats-config.js +52 -0
  198. package/dist/modules/shipment_tracking/lib/poi-nats-config.js.map +7 -0
  199. package/dist/modules/shipment_tracking/lib/poi-types.js +43 -0
  200. package/dist/modules/shipment_tracking/lib/poi-types.js.map +7 -0
  201. package/dist/modules/shipment_tracking/lib/rate-limiter.js +31 -0
  202. package/dist/modules/shipment_tracking/lib/rate-limiter.js.map +7 -0
  203. package/dist/modules/shipment_tracking/lib/route-extraction.js +187 -0
  204. package/dist/modules/shipment_tracking/lib/route-extraction.js.map +7 -0
  205. package/dist/modules/shipment_tracking/lib/route-inference.js +106 -0
  206. package/dist/modules/shipment_tracking/lib/route-inference.js.map +7 -0
  207. package/dist/modules/shipment_tracking/lib/schedule-generator.js +63 -0
  208. package/dist/modules/shipment_tracking/lib/schedule-generator.js.map +7 -0
  209. package/dist/modules/shipment_tracking/lib/shipsgo-client.js +143 -0
  210. package/dist/modules/shipment_tracking/lib/shipsgo-client.js.map +7 -0
  211. package/dist/modules/shipment_tracking/lib/shipsgo-mapper.js +204 -0
  212. package/dist/modules/shipment_tracking/lib/shipsgo-mapper.js.map +7 -0
  213. package/dist/modules/shipment_tracking/lib/status-machine.js +131 -0
  214. package/dist/modules/shipment_tracking/lib/status-machine.js.map +7 -0
  215. package/dist/modules/shipment_tracking/lib/time-extraction.js +41 -0
  216. package/dist/modules/shipment_tracking/lib/time-extraction.js.map +7 -0
  217. package/dist/modules/shipment_tracking/lib/timestamp-utils.js +100 -0
  218. package/dist/modules/shipment_tracking/lib/timestamp-utils.js.map +7 -0
  219. package/dist/modules/shipment_tracking/lib/vessel-api.js +111 -0
  220. package/dist/modules/shipment_tracking/lib/vessel-api.js.map +7 -0
  221. package/dist/modules/shipment_tracking/lib/vessel-cache.js +50 -0
  222. package/dist/modules/shipment_tracking/lib/vessel-cache.js.map +7 -0
  223. package/dist/modules/shipment_tracking/lib/vessel-extraction.js +13 -0
  224. package/dist/modules/shipment_tracking/lib/vessel-extraction.js.map +7 -0
  225. package/dist/modules/shipment_tracking/lib/webhook-dispatcher.js +62 -0
  226. package/dist/modules/shipment_tracking/lib/webhook-dispatcher.js.map +7 -0
  227. package/dist/modules/shipment_tracking/migrations/Migration20260422161208_shipment_tracking.js +48 -0
  228. package/dist/modules/shipment_tracking/migrations/Migration20260422161208_shipment_tracking.js.map +7 -0
  229. package/dist/modules/shipment_tracking/migrations/Migration20260529120000_shipment_tracking_poi_region_names.js +15 -0
  230. package/dist/modules/shipment_tracking/migrations/Migration20260529120000_shipment_tracking_poi_region_names.js.map +7 -0
  231. package/dist/modules/shipment_tracking/migrations/Migration20260821120000_shipment_tracking_shipsgo.js +47 -0
  232. package/dist/modules/shipment_tracking/migrations/Migration20260821120000_shipment_tracking_shipsgo.js.map +7 -0
  233. package/dist/modules/shipment_tracking/notifications.js +145 -0
  234. package/dist/modules/shipment_tracking/notifications.js.map +7 -0
  235. package/dist/modules/shipment_tracking/services/carrierRegistry.js +24 -0
  236. package/dist/modules/shipment_tracking/services/carrierRegistry.js.map +7 -0
  237. package/dist/modules/shipment_tracking/services/poiNatsService.js +397 -0
  238. package/dist/modules/shipment_tracking/services/poiNatsService.js.map +7 -0
  239. package/dist/modules/shipment_tracking/services/shipsGoProvider.js +163 -0
  240. package/dist/modules/shipment_tracking/services/shipsGoProvider.js.map +7 -0
  241. package/dist/modules/shipment_tracking/services/trackingService.js +1283 -0
  242. package/dist/modules/shipment_tracking/services/trackingService.js.map +7 -0
  243. package/dist/modules/shipment_tracking/services/webhookService.js +263 -0
  244. package/dist/modules/shipment_tracking/services/webhookService.js.map +7 -0
  245. package/dist/modules/shipment_tracking/setup.js +72 -0
  246. package/dist/modules/shipment_tracking/setup.js.map +7 -0
  247. package/dist/modules/shipment_tracking/subscribers/cargo-event-created.js +60 -0
  248. package/dist/modules/shipment_tracking/subscribers/cargo-event-created.js.map +7 -0
  249. package/dist/modules/shipment_tracking/subscribers/dcsa-event-webhook-dispatch.js +58 -0
  250. package/dist/modules/shipment_tracking/subscribers/dcsa-event-webhook-dispatch.js.map +7 -0
  251. package/dist/modules/shipment_tracking/subscribers/poi-event-notification.js +82 -0
  252. package/dist/modules/shipment_tracking/subscribers/poi-event-notification.js.map +7 -0
  253. package/dist/modules/shipment_tracking/subscribers/poi-event-webhook-dispatch.js +53 -0
  254. package/dist/modules/shipment_tracking/subscribers/poi-event-webhook-dispatch.js.map +7 -0
  255. package/dist/modules/shipment_tracking/subscribers/shipment-status-changed.js +28 -0
  256. package/dist/modules/shipment_tracking/subscribers/shipment-status-changed.js.map +7 -0
  257. package/dist/modules/shipment_tracking/subscribers/terminal-event-ingest.js +67 -0
  258. package/dist/modules/shipment_tracking/subscribers/terminal-event-ingest.js.map +7 -0
  259. package/dist/modules/shipment_tracking/subscribers/tracking-job-initial-poll.js +30 -0
  260. package/dist/modules/shipment_tracking/subscribers/tracking-job-initial-poll.js.map +7 -0
  261. package/dist/modules/shipment_tracking/subscribers/tracking-job-webhook-dispatch.js +19 -0
  262. package/dist/modules/shipment_tracking/subscribers/tracking-job-webhook-dispatch.js.map +7 -0
  263. package/dist/modules/shipment_tracking/tables/index.js +6 -0
  264. package/dist/modules/shipment_tracking/tables/index.js.map +7 -0
  265. package/dist/modules/shipment_tracking/tables/tracking_job/table.client.js +284 -0
  266. package/dist/modules/shipment_tracking/tables/tracking_job/table.client.js.map +7 -0
  267. package/dist/modules/shipment_tracking/tables/tracking_job/table.js +36 -0
  268. package/dist/modules/shipment_tracking/tables/tracking_job/table.js.map +7 -0
  269. package/dist/modules/shipment_tracking/widgets/dashboard/ships-map/config.js +25 -0
  270. package/dist/modules/shipment_tracking/widgets/dashboard/ships-map/config.js.map +7 -0
  271. package/dist/modules/shipment_tracking/widgets/dashboard/ships-map/widget.client.js +355 -0
  272. package/dist/modules/shipment_tracking/widgets/dashboard/ships-map/widget.client.js.map +7 -0
  273. package/dist/modules/shipment_tracking/widgets/dashboard/ships-map/widget.js +26 -0
  274. package/dist/modules/shipment_tracking/widgets/dashboard/ships-map/widget.js.map +7 -0
  275. package/dist/types/assets.d.js +1 -0
  276. package/dist/types/assets.d.js.map +7 -0
  277. package/generated/entities/bic_config/index.ts +20 -0
  278. package/generated/entities/carrier_config/index.ts +23 -0
  279. package/generated/entities/location_override/index.ts +26 -0
  280. package/generated/entities/shipment/index.ts +46 -0
  281. package/generated/entities/ships_go_config/index.ts +25 -0
  282. package/generated/entities/tracking_event/index.ts +60 -0
  283. package/generated/entities/tracking_job/index.ts +33 -0
  284. package/generated/entities/webhook/index.ts +22 -0
  285. package/generated/entities/webhook_delivery/index.ts +22 -0
  286. package/generated/entities.ids.generated.ts +47 -0
  287. package/package.json +81 -0
  288. package/src/index.ts +39 -0
  289. package/src/modules/shipment_tracking/__integration__/TC-TRACK-410-shipsgo-config-api.spec.ts +133 -0
  290. package/src/modules/shipment_tracking/__integration__/meta.ts +4 -0
  291. package/src/modules/shipment_tracking/__tests__/empty-return-stop.test.ts +231 -0
  292. package/src/modules/shipment_tracking/__tests__/fixtures/hapag-lloyd-transship-container.json +702 -0
  293. package/src/modules/shipment_tracking/__tests__/fixtures/index.ts +434 -0
  294. package/src/modules/shipment_tracking/__tests__/fixtures/maersk-multi-transship-completed.json +1518 -0
  295. package/src/modules/shipment_tracking/__tests__/fixtures/maersk-transship-intransit.json +558 -0
  296. package/src/modules/shipment_tracking/__tests__/fixtures/msc-direct.json +222 -0
  297. package/src/modules/shipment_tracking/__tests__/fixtures/msc-multi-transship-completed.json +974 -0
  298. package/src/modules/shipment_tracking/__tests__/fixtures/msc-multi.json +4846 -0
  299. package/src/modules/shipment_tracking/__tests__/fixtures/msc-transship.json +409 -0
  300. package/src/modules/shipment_tracking/__tests__/fixtures/poi-events.json +240 -0
  301. package/src/modules/shipment_tracking/__tests__/fixtures/synthetic/index.ts +138 -0
  302. package/src/modules/shipment_tracking/__tests__/fixtures/synthetic-eta-updates.json +288 -0
  303. package/src/modules/shipment_tracking/__tests__/fixtures/synthetic-route-inference.json +201 -0
  304. package/src/modules/shipment_tracking/__tests__/fixtures/synthetic-voyage-progression.json +410 -0
  305. package/src/modules/shipment_tracking/__tests__/shipsgo-air-mapper.test.ts +157 -0
  306. package/src/modules/shipment_tracking/__tests__/shipsgo-client.test.ts +155 -0
  307. package/src/modules/shipment_tracking/__tests__/shipsgo-mapper.test.ts +201 -0
  308. package/src/modules/shipment_tracking/__tests__/shipsgo-poll.test.ts +357 -0
  309. package/src/modules/shipment_tracking/__tests__/shipsgo-provider.test.ts +364 -0
  310. package/src/modules/shipment_tracking/__tests__/trackingService.integration.test.ts +2248 -0
  311. package/src/modules/shipment_tracking/__tests__/webhookPayload.test.ts +151 -0
  312. package/src/modules/shipment_tracking/acl.ts +18 -0
  313. package/src/modules/shipment_tracking/api/bic-configs/route.ts +206 -0
  314. package/src/modules/shipment_tracking/api/bic-configs/test/route.ts +108 -0
  315. package/src/modules/shipment_tracking/api/cargo-events/route.ts +101 -0
  316. package/src/modules/shipment_tracking/api/carrier-configs/route.ts +142 -0
  317. package/src/modules/shipment_tracking/api/dashboard/ships-map/route.ts +246 -0
  318. package/src/modules/shipment_tracking/api/location-overrides/route.ts +185 -0
  319. package/src/modules/shipment_tracking/api/openapi.ts +28 -0
  320. package/src/modules/shipment_tracking/api/shipments/route.ts +197 -0
  321. package/src/modules/shipment_tracking/api/shipsgo-configs/route.ts +215 -0
  322. package/src/modules/shipment_tracking/api/tracking-jobs/route.ts +149 -0
  323. package/src/modules/shipment_tracking/api/tracking-jobs/sync/route.ts +116 -0
  324. package/src/modules/shipment_tracking/api/utils.ts +10 -0
  325. package/src/modules/shipment_tracking/api/webhooks/deliveries/route.ts +82 -0
  326. package/src/modules/shipment_tracking/api/webhooks/route.ts +138 -0
  327. package/src/modules/shipment_tracking/api/webhooks/test/route.ts +84 -0
  328. package/src/modules/shipment_tracking/assets/carriers/cma_cgm.png +0 -0
  329. package/src/modules/shipment_tracking/assets/carriers/cosco.png +0 -0
  330. package/src/modules/shipment_tracking/assets/carriers/evergreen.png +0 -0
  331. package/src/modules/shipment_tracking/assets/carriers/hapag_lloyd.png +0 -0
  332. package/src/modules/shipment_tracking/assets/carriers/maersk.png +0 -0
  333. package/src/modules/shipment_tracking/assets/carriers/msc.png +0 -0
  334. package/src/modules/shipment_tracking/assets/carriers/one.png +0 -0
  335. package/src/modules/shipment_tracking/assets/carriers/oocl.png +0 -0
  336. package/src/modules/shipment_tracking/assets/carriers/yang_ming.png +0 -0
  337. package/src/modules/shipment_tracking/assets/carriers/zim.png +0 -0
  338. package/src/modules/shipment_tracking/assets/index.ts +66 -0
  339. package/src/modules/shipment_tracking/backend/carrier-configs/page.meta.ts +16 -0
  340. package/src/modules/shipment_tracking/backend/carrier-configs/page.tsx +782 -0
  341. package/src/modules/shipment_tracking/backend/location-overrides/page.meta.ts +16 -0
  342. package/src/modules/shipment_tracking/backend/location-overrides/page.tsx +241 -0
  343. package/src/modules/shipment_tracking/backend/shipment-tracking/page.meta.ts +16 -0
  344. package/src/modules/shipment_tracking/backend/shipment-tracking/page.tsx +340 -0
  345. package/src/modules/shipment_tracking/backend/tracking-jobs/page.meta.ts +16 -0
  346. package/src/modules/shipment_tracking/backend/tracking-jobs/page.tsx +16 -0
  347. package/src/modules/shipment_tracking/backend/webhooks/page.meta.ts +16 -0
  348. package/src/modules/shipment_tracking/backend/webhooks/page.tsx +228 -0
  349. package/src/modules/shipment_tracking/ce.ts +48 -0
  350. package/src/modules/shipment_tracking/cli.ts +321 -0
  351. package/src/modules/shipment_tracking/commands/bic-configs.ts +94 -0
  352. package/src/modules/shipment_tracking/commands/carrier-configs.ts +89 -0
  353. package/src/modules/shipment_tracking/commands/index.ts +8 -0
  354. package/src/modules/shipment_tracking/commands/location-overrides.ts +119 -0
  355. package/src/modules/shipment_tracking/commands/shipments.ts +247 -0
  356. package/src/modules/shipment_tracking/commands/shipsgo-configs.ts +101 -0
  357. package/src/modules/shipment_tracking/commands/tracking-jobs.ts +158 -0
  358. package/src/modules/shipment_tracking/commands/tracking.ts +230 -0
  359. package/src/modules/shipment_tracking/commands/webhooks.ts +159 -0
  360. package/src/modules/shipment_tracking/components/CombinedTimestampCell.tsx +236 -0
  361. package/src/modules/shipment_tracking/components/FacilityLocationInput.tsx +235 -0
  362. package/src/modules/shipment_tracking/components/LocationOverrideDrawer.tsx +586 -0
  363. package/src/modules/shipment_tracking/components/ShipmentDetailsDrawer.tsx +1364 -0
  364. package/src/modules/shipment_tracking/components/ShipmentDrawer.tsx +498 -0
  365. package/src/modules/shipment_tracking/components/ShipsGoConfigSection.tsx +266 -0
  366. package/src/modules/shipment_tracking/components/TimestampCell.tsx +146 -0
  367. package/src/modules/shipment_tracking/components/TrackingJobDrawer.tsx +467 -0
  368. package/src/modules/shipment_tracking/components/VesselTrackingMap.tsx +761 -0
  369. package/src/modules/shipment_tracking/components/WebhookDrawer.tsx +434 -0
  370. package/src/modules/shipment_tracking/data/entities.ts +748 -0
  371. package/src/modules/shipment_tracking/data/validators.ts +523 -0
  372. package/src/modules/shipment_tracking/di.ts +73 -0
  373. package/src/modules/shipment_tracking/encryption.ts +17 -0
  374. package/src/modules/shipment_tracking/events.ts +122 -0
  375. package/src/modules/shipment_tracking/hooks/useVesselTracking.ts +297 -0
  376. package/src/modules/shipment_tracking/i18n/de.json +327 -0
  377. package/src/modules/shipment_tracking/i18n/en.json +327 -0
  378. package/src/modules/shipment_tracking/i18n/es.json +327 -0
  379. package/src/modules/shipment_tracking/i18n/pl.json +327 -0
  380. package/src/modules/shipment_tracking/index.ts +13 -0
  381. package/src/modules/shipment_tracking/lib/__tests__/dcsa-event-mapping.test.ts +385 -0
  382. package/src/modules/shipment_tracking/lib/__tests__/dcsa-event-parser.test.ts +398 -0
  383. package/src/modules/shipment_tracking/lib/__tests__/empty-return.test.ts +174 -0
  384. package/src/modules/shipment_tracking/lib/__tests__/poi-event-processor.test.ts +699 -0
  385. package/src/modules/shipment_tracking/lib/__tests__/route-inference.test.ts +402 -0
  386. package/src/modules/shipment_tracking/lib/__tests__/status-machine.test.ts +447 -0
  387. package/src/modules/shipment_tracking/lib/__tests__/time-extraction.test.ts +331 -0
  388. package/src/modules/shipment_tracking/lib/__tests__/timestamp-utils.test.ts +260 -0
  389. package/src/modules/shipment_tracking/lib/__tests__/vessel-api.test.ts +125 -0
  390. package/src/modules/shipment_tracking/lib/__tests__/vessel-extraction.test.ts +108 -0
  391. package/src/modules/shipment_tracking/lib/adapters/cma-cgm.ts +84 -0
  392. package/src/modules/shipment_tracking/lib/adapters/cosco-types.ts +145 -0
  393. package/src/modules/shipment_tracking/lib/adapters/cosco.ts +314 -0
  394. package/src/modules/shipment_tracking/lib/adapters/evergreen.ts +107 -0
  395. package/src/modules/shipment_tracking/lib/adapters/hapag-lloyd.ts +88 -0
  396. package/src/modules/shipment_tracking/lib/adapters/index.ts +18 -0
  397. package/src/modules/shipment_tracking/lib/adapters/maersk.ts +104 -0
  398. package/src/modules/shipment_tracking/lib/adapters/msc.ts +223 -0
  399. package/src/modules/shipment_tracking/lib/adapters/zim.ts +106 -0
  400. package/src/modules/shipment_tracking/lib/audit-helpers.ts +29 -0
  401. package/src/modules/shipment_tracking/lib/auth/base64url.ts +4 -0
  402. package/src/modules/shipment_tracking/lib/auth/oauth-client.ts +53 -0
  403. package/src/modules/shipment_tracking/lib/background.ts +24 -0
  404. package/src/modules/shipment_tracking/lib/bic-api-client.ts +199 -0
  405. package/src/modules/shipment_tracking/lib/carrier-adapter.ts +136 -0
  406. package/src/modules/shipment_tracking/lib/current-vessel.ts +274 -0
  407. package/src/modules/shipment_tracking/lib/dcsa-event-mapping.ts +202 -0
  408. package/src/modules/shipment_tracking/lib/dcsa-event-parser.ts +163 -0
  409. package/src/modules/shipment_tracking/lib/dcsa-params.ts +14 -0
  410. package/src/modules/shipment_tracking/lib/empty-return.ts +122 -0
  411. package/src/modules/shipment_tracking/lib/location-overrides.ts +150 -0
  412. package/src/modules/shipment_tracking/lib/location-types.ts +154 -0
  413. package/src/modules/shipment_tracking/lib/logger.ts +195 -0
  414. package/src/modules/shipment_tracking/lib/poi-event-processor.ts +302 -0
  415. package/src/modules/shipment_tracking/lib/poi-nats-config.ts +134 -0
  416. package/src/modules/shipment_tracking/lib/poi-types.ts +198 -0
  417. package/src/modules/shipment_tracking/lib/rate-limiter.ts +58 -0
  418. package/src/modules/shipment_tracking/lib/route-extraction.ts +439 -0
  419. package/src/modules/shipment_tracking/lib/route-inference.ts +238 -0
  420. package/src/modules/shipment_tracking/lib/schedule-generator.ts +92 -0
  421. package/src/modules/shipment_tracking/lib/shipsgo-client.ts +350 -0
  422. package/src/modules/shipment_tracking/lib/shipsgo-mapper.ts +296 -0
  423. package/src/modules/shipment_tracking/lib/status-machine.ts +230 -0
  424. package/src/modules/shipment_tracking/lib/time-extraction.ts +85 -0
  425. package/src/modules/shipment_tracking/lib/timestamp-utils.ts +244 -0
  426. package/src/modules/shipment_tracking/lib/vessel-api.ts +299 -0
  427. package/src/modules/shipment_tracking/lib/vessel-cache.ts +102 -0
  428. package/src/modules/shipment_tracking/lib/vessel-extraction.ts +39 -0
  429. package/src/modules/shipment_tracking/lib/webhook-dispatcher.ts +93 -0
  430. package/src/modules/shipment_tracking/migrations/.snapshot-open-mercato.json +2914 -0
  431. package/src/modules/shipment_tracking/migrations/Migration20260422161208_shipment_tracking.ts +60 -0
  432. package/src/modules/shipment_tracking/migrations/Migration20260529120000_shipment_tracking_poi_region_names.ts +22 -0
  433. package/src/modules/shipment_tracking/migrations/Migration20260821120000_shipment_tracking_shipsgo.ts +65 -0
  434. package/src/modules/shipment_tracking/notifications.ts +151 -0
  435. package/src/modules/shipment_tracking/services/carrierRegistry.ts +29 -0
  436. package/src/modules/shipment_tracking/services/poiNatsService.ts +526 -0
  437. package/src/modules/shipment_tracking/services/shipsGoProvider.ts +231 -0
  438. package/src/modules/shipment_tracking/services/trackingService.ts +1777 -0
  439. package/src/modules/shipment_tracking/services/webhookService.ts +347 -0
  440. package/src/modules/shipment_tracking/setup.ts +99 -0
  441. package/src/modules/shipment_tracking/subscribers/__tests__/terminal-event-ingest.test.ts +141 -0
  442. package/src/modules/shipment_tracking/subscribers/cargo-event-created.ts +115 -0
  443. package/src/modules/shipment_tracking/subscribers/dcsa-event-webhook-dispatch.ts +115 -0
  444. package/src/modules/shipment_tracking/subscribers/poi-event-notification.ts +144 -0
  445. package/src/modules/shipment_tracking/subscribers/poi-event-webhook-dispatch.ts +94 -0
  446. package/src/modules/shipment_tracking/subscribers/shipment-status-changed.ts +41 -0
  447. package/src/modules/shipment_tracking/subscribers/terminal-event-ingest.ts +109 -0
  448. package/src/modules/shipment_tracking/subscribers/tracking-job-initial-poll.ts +53 -0
  449. package/src/modules/shipment_tracking/subscribers/tracking-job-webhook-dispatch.ts +50 -0
  450. package/src/modules/shipment_tracking/tables/index.ts +4 -0
  451. package/src/modules/shipment_tracking/tables/tracking_job/table.client.tsx +337 -0
  452. package/src/modules/shipment_tracking/tables/tracking_job/table.ts +34 -0
  453. package/src/modules/shipment_tracking/widgets/dashboard/ships-map/config.ts +32 -0
  454. package/src/modules/shipment_tracking/widgets/dashboard/ships-map/widget.client.tsx +448 -0
  455. package/src/modules/shipment_tracking/widgets/dashboard/ships-map/widget.ts +25 -0
  456. package/src/types/assets.d.ts +5 -0
@@ -0,0 +1,7 @@
1
+ {
2
+ "version": 3,
3
+ "sources": ["../../../src/modules/shipment_tracking/setup.ts"],
4
+ "sourcesContent": ["import type { ModuleSetupConfig } from '@open-mercato/shared/modules/setup'\n\ntype SchedulerServiceType = {\n register: (registration: {\n name: string\n description?: string\n scopeType: 'system' | 'organization' | 'tenant'\n organizationId?: string\n tenantId?: string\n scheduleType: 'cron' | 'interval'\n scheduleValue: string\n timezone?: string\n targetType: 'queue' | 'command'\n targetQueue?: string\n targetCommand?: string\n targetPayload?: unknown\n sourceType?: 'user' | 'module'\n sourceModule?: string\n isEnabled?: boolean\n }) => Promise<void>\n}\n\nexport const setup: ModuleSetupConfig = {\n defaultRoleFeatures: {\n admin: ['shipment_tracking.*'],\n employee: [\n 'shipment_tracking.shipments.view',\n 'shipment_tracking.tracking_jobs.view',\n 'shipment_tracking.carrier_configs.view',\n 'shipment_tracking.shipsgo_config.view',\n 'shipment_tracking.webhooks.view',\n 'shipment_tracking.location_overrides.view',\n ],\n },\n\n seedDefaults: async (ctx) => {\n // Register scheduled jobs for this organization\n // The scheduler service may not be available in all installations\n try {\n const schedulerService = ctx.container.resolve<SchedulerServiceType>('schedulerService')\n\n // Register daily poll schedule\n await schedulerService.register({\n name: 'Daily Shipment Tracking Poll',\n description:\n 'Polls all active tracking jobs for carrier updates every day at 6:00 AM UTC. You can change the schedule time in the scheduler settings.',\n scopeType: 'organization',\n tenantId: ctx.tenantId,\n organizationId: ctx.organizationId,\n scheduleType: 'cron',\n scheduleValue: '0 6 * * *', // 6:00 AM UTC daily\n timezone: 'UTC',\n targetType: 'command',\n targetCommand: 'shipment_tracking.tracking.poll_all',\n targetPayload: {\n tenantId: ctx.tenantId,\n organizationId: ctx.organizationId,\n },\n sourceType: 'module',\n sourceModule: 'shipment_tracking',\n isEnabled: true,\n })\n console.log(\n `[shipment-tracking] Registered daily poll schedule for org ${ctx.organizationId}`,\n )\n\n // Register PRE_ARRIVAL evaluation schedule\n // Runs every 6 hours to check IN_TRANSIT shipments approaching destination\n await schedulerService.register({\n name: 'Pre-Arrival Status Evaluation',\n description:\n 'Checks IN_TRANSIT shipments every 6 hours and upgrades them to PRE_ARRIVAL when ETA is within 7 days.',\n scopeType: 'organization',\n tenantId: ctx.tenantId,\n organizationId: ctx.organizationId,\n scheduleType: 'cron',\n scheduleValue: '0 */6 * * *', // Every 6 hours\n timezone: 'UTC',\n targetType: 'command',\n targetCommand: 'shipment_tracking.tracking.evaluate_pre_arrival',\n targetPayload: {\n tenantId: ctx.tenantId,\n organizationId: ctx.organizationId,\n },\n sourceType: 'module',\n sourceModule: 'shipment_tracking',\n isEnabled: true,\n })\n console.log(\n `[shipment-tracking] Registered pre-arrival evaluation schedule for org ${ctx.organizationId}`,\n )\n } catch (error) {\n // Scheduler module may not be installed - this is fine\n console.debug('[shipment-tracking] Scheduler service not available, skipping schedule registration')\n }\n },\n}\n\nexport default setup\n"],
5
+ "mappings": "AAsBO,MAAM,QAA2B;AAAA,EACtC,qBAAqB;AAAA,IACnB,OAAO,CAAC,qBAAqB;AAAA,IAC7B,UAAU;AAAA,MACR;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,IACF;AAAA,EACF;AAAA,EAEA,cAAc,OAAO,QAAQ;AAG3B,QAAI;AACF,YAAM,mBAAmB,IAAI,UAAU,QAA8B,kBAAkB;AAGvF,YAAM,iBAAiB,SAAS;AAAA,QAC9B,MAAM;AAAA,QACN,aACE;AAAA,QACF,WAAW;AAAA,QACX,UAAU,IAAI;AAAA,QACd,gBAAgB,IAAI;AAAA,QACpB,cAAc;AAAA,QACd,eAAe;AAAA;AAAA,QACf,UAAU;AAAA,QACV,YAAY;AAAA,QACZ,eAAe;AAAA,QACf,eAAe;AAAA,UACb,UAAU,IAAI;AAAA,UACd,gBAAgB,IAAI;AAAA,QACtB;AAAA,QACA,YAAY;AAAA,QACZ,cAAc;AAAA,QACd,WAAW;AAAA,MACb,CAAC;AACD,cAAQ;AAAA,QACN,8DAA8D,IAAI,cAAc;AAAA,MAClF;AAIA,YAAM,iBAAiB,SAAS;AAAA,QAC9B,MAAM;AAAA,QACN,aACE;AAAA,QACF,WAAW;AAAA,QACX,UAAU,IAAI;AAAA,QACd,gBAAgB,IAAI;AAAA,QACpB,cAAc;AAAA,QACd,eAAe;AAAA;AAAA,QACf,UAAU;AAAA,QACV,YAAY;AAAA,QACZ,eAAe;AAAA,QACf,eAAe;AAAA,UACb,UAAU,IAAI;AAAA,UACd,gBAAgB,IAAI;AAAA,QACtB;AAAA,QACA,YAAY;AAAA,QACZ,cAAc;AAAA,QACd,WAAW;AAAA,MACb,CAAC;AACD,cAAQ;AAAA,QACN,0EAA0E,IAAI,cAAc;AAAA,MAC9F;AAAA,IACF,SAAS,OAAO;AAEd,cAAQ,MAAM,qFAAqF;AAAA,IACrG;AAAA,EACF;AACF;AAEA,IAAO,gBAAQ;",
6
+ "names": []
7
+ }
@@ -0,0 +1,60 @@
1
+ const metadata = {
2
+ event: "shipment_tracking.tracking_event.created",
3
+ persistent: true,
4
+ id: "shipment_tracking:tracking-event-created"
5
+ };
6
+ async function handle(payload, ctx) {
7
+ try {
8
+ const webhookService = ctx.resolve("shipmentTrackingWebhookService");
9
+ await webhookService.dispatchEvent({
10
+ eventType: "shipment_tracking.tracking_event.created",
11
+ payload: {
12
+ event: {
13
+ // IDs
14
+ id: payload.id,
15
+ trackingJobId: payload.trackingJobId,
16
+ // Event source
17
+ source: payload.source,
18
+ sourceEventId: payload.sourceEventId,
19
+ // Core event fields
20
+ eventType: payload.eventType,
21
+ eventCode: payload.eventCode,
22
+ eventClassifierCode: payload.eventClassifierCode,
23
+ eventDateTime: payload.eventDateTime,
24
+ description: payload.description,
25
+ // Equipment fields (critical for multi-container bookings)
26
+ equipmentReference: payload.equipmentReference,
27
+ isoEquipmentCode: payload.isoEquipmentCode,
28
+ emptyIndicatorCode: payload.emptyIndicatorCode,
29
+ isTransshipmentMove: payload.isTransshipmentMove,
30
+ // Location fields
31
+ locationName: payload.locationName,
32
+ locationUnlocode: payload.locationUnlocode,
33
+ locationCountry: payload.locationCountry,
34
+ facilityCode: payload.facilityCode,
35
+ facilityTypeCode: payload.facilityTypeCode,
36
+ // Transport call fields
37
+ vesselName: payload.vesselName,
38
+ vesselImo: payload.vesselImo,
39
+ voyageNumber: payload.voyageNumber,
40
+ carrierServiceCode: payload.carrierServiceCode,
41
+ modeOfTransport: payload.modeOfTransport,
42
+ // Document references
43
+ relatedDocumentReferences: payload.relatedDocumentReferences,
44
+ // Metadata
45
+ publisherName: payload.publisherName,
46
+ publisherRole: payload.publisherRole
47
+ }
48
+ },
49
+ tenantId: payload.tenantId,
50
+ organizationId: payload.organizationId
51
+ });
52
+ } catch (error) {
53
+ console.error("[shipment-tracking:subscriber] Failed to dispatch tracking_event.created webhook:", error);
54
+ }
55
+ }
56
+ export {
57
+ handle as default,
58
+ metadata
59
+ };
60
+ //# sourceMappingURL=cargo-event-created.js.map
@@ -0,0 +1,7 @@
1
+ {
2
+ "version": 3,
3
+ "sources": ["../../../../src/modules/shipment_tracking/subscribers/cargo-event-created.ts"],
4
+ "sourcesContent": ["import type { DocumentReference } from '../data/entities'\n\nexport const metadata = {\n event: 'shipment_tracking.tracking_event.created',\n persistent: true,\n id: 'shipment_tracking:tracking-event-created',\n}\n\ntype TrackingEventCreatedPayload = {\n id: string\n trackingJobId: string\n tenantId: string\n organizationId: string\n\n // Event source\n source: string\n sourceEventId?: string | null\n\n // Core event fields\n eventType: string\n eventCode: string\n eventClassifierCode?: string | null\n eventDateTime?: string | null\n description?: string | null\n\n // Equipment fields (critical for multi-container bookings)\n equipmentReference?: string | null\n isoEquipmentCode?: string | null\n emptyIndicatorCode?: string | null\n isTransshipmentMove?: boolean | null\n\n // Location fields\n locationName?: string | null\n locationUnlocode?: string | null\n locationCountry?: string | null\n facilityCode?: string | null\n facilityTypeCode?: string | null\n\n // Transport call fields\n vesselName?: string | null\n vesselImo?: string | null\n voyageNumber?: string | null\n carrierServiceCode?: string | null\n modeOfTransport?: string | null\n\n // Document references\n relatedDocumentReferences?: DocumentReference[] | null\n\n // Metadata\n publisherName?: string | null\n publisherRole?: string | null\n}\n\ntype ResolverContext = {\n resolve: <T = unknown>(name: string) => T\n}\n\nexport default async function handle(payload: TrackingEventCreatedPayload, ctx: ResolverContext) {\n try {\n const webhookService = ctx.resolve<any>('shipmentTrackingWebhookService')\n\n await webhookService.dispatchEvent({\n eventType: 'shipment_tracking.tracking_event.created',\n payload: {\n event: {\n // IDs\n id: payload.id,\n trackingJobId: payload.trackingJobId,\n\n // Event source\n source: payload.source,\n sourceEventId: payload.sourceEventId,\n\n // Core event fields\n eventType: payload.eventType,\n eventCode: payload.eventCode,\n eventClassifierCode: payload.eventClassifierCode,\n eventDateTime: payload.eventDateTime,\n description: payload.description,\n\n // Equipment fields (critical for multi-container bookings)\n equipmentReference: payload.equipmentReference,\n isoEquipmentCode: payload.isoEquipmentCode,\n emptyIndicatorCode: payload.emptyIndicatorCode,\n isTransshipmentMove: payload.isTransshipmentMove,\n\n // Location fields\n locationName: payload.locationName,\n locationUnlocode: payload.locationUnlocode,\n locationCountry: payload.locationCountry,\n facilityCode: payload.facilityCode,\n facilityTypeCode: payload.facilityTypeCode,\n\n // Transport call fields\n vesselName: payload.vesselName,\n vesselImo: payload.vesselImo,\n voyageNumber: payload.voyageNumber,\n carrierServiceCode: payload.carrierServiceCode,\n modeOfTransport: payload.modeOfTransport,\n\n // Document references\n relatedDocumentReferences: payload.relatedDocumentReferences,\n\n // Metadata\n publisherName: payload.publisherName,\n publisherRole: payload.publisherRole,\n },\n },\n tenantId: payload.tenantId,\n organizationId: payload.organizationId,\n })\n } catch (error) {\n console.error('[shipment-tracking:subscriber] Failed to dispatch tracking_event.created webhook:', error)\n }\n}\n"],
5
+ "mappings": "AAEO,MAAM,WAAW;AAAA,EACtB,OAAO;AAAA,EACP,YAAY;AAAA,EACZ,IAAI;AACN;AAmDA,eAAO,OAA8B,SAAsC,KAAsB;AAC/F,MAAI;AACF,UAAM,iBAAiB,IAAI,QAAa,gCAAgC;AAExE,UAAM,eAAe,cAAc;AAAA,MACjC,WAAW;AAAA,MACX,SAAS;AAAA,QACP,OAAO;AAAA;AAAA,UAEL,IAAI,QAAQ;AAAA,UACZ,eAAe,QAAQ;AAAA;AAAA,UAGvB,QAAQ,QAAQ;AAAA,UAChB,eAAe,QAAQ;AAAA;AAAA,UAGvB,WAAW,QAAQ;AAAA,UACnB,WAAW,QAAQ;AAAA,UACnB,qBAAqB,QAAQ;AAAA,UAC7B,eAAe,QAAQ;AAAA,UACvB,aAAa,QAAQ;AAAA;AAAA,UAGrB,oBAAoB,QAAQ;AAAA,UAC5B,kBAAkB,QAAQ;AAAA,UAC1B,oBAAoB,QAAQ;AAAA,UAC5B,qBAAqB,QAAQ;AAAA;AAAA,UAG7B,cAAc,QAAQ;AAAA,UACtB,kBAAkB,QAAQ;AAAA,UAC1B,iBAAiB,QAAQ;AAAA,UACzB,cAAc,QAAQ;AAAA,UACtB,kBAAkB,QAAQ;AAAA;AAAA,UAG1B,YAAY,QAAQ;AAAA,UACpB,WAAW,QAAQ;AAAA,UACnB,cAAc,QAAQ;AAAA,UACtB,oBAAoB,QAAQ;AAAA,UAC5B,iBAAiB,QAAQ;AAAA;AAAA,UAGzB,2BAA2B,QAAQ;AAAA;AAAA,UAGnC,eAAe,QAAQ;AAAA,UACvB,eAAe,QAAQ;AAAA,QACzB;AAAA,MACF;AAAA,MACA,UAAU,QAAQ;AAAA,MAClB,gBAAgB,QAAQ;AAAA,IAC1B,CAAC;AAAA,EACH,SAAS,OAAO;AACd,YAAQ,MAAM,qFAAqF,KAAK;AAAA,EAC1G;AACF;",
6
+ "names": []
7
+ }
@@ -0,0 +1,58 @@
1
+ const metadata = {
2
+ event: "shipment_tracking.transport.*,shipment_tracking.equipment.*",
3
+ persistent: true,
4
+ id: "shipment_tracking:dcsa-event-webhook-dispatch"
5
+ };
6
+ async function handle(payload, ctx) {
7
+ try {
8
+ const webhookService = ctx.resolve("shipmentTrackingWebhookService");
9
+ await webhookService.dispatchEvent({
10
+ eventType: ctx.eventName,
11
+ payload: {
12
+ event: {
13
+ // IDs
14
+ id: payload.id,
15
+ shipmentId: payload.shipmentId,
16
+ // Core event fields
17
+ eventType: payload.eventType,
18
+ eventCode: payload.eventCode,
19
+ eventClassifierCode: payload.eventClassifierCode,
20
+ eventDateTime: payload.eventDateTime,
21
+ description: payload.description,
22
+ // Equipment fields (critical for multi-container bookings)
23
+ equipmentReference: payload.equipmentReference,
24
+ isoEquipmentCode: payload.isoEquipmentCode,
25
+ emptyIndicatorCode: payload.emptyIndicatorCode,
26
+ isTransshipmentMove: payload.isTransshipmentMove,
27
+ // Location fields
28
+ locationName: payload.locationName,
29
+ locationUnlocode: payload.locationUnlocode,
30
+ locationCountry: payload.locationCountry,
31
+ facilityCode: payload.facilityCode,
32
+ facilityTypeCode: payload.facilityTypeCode,
33
+ // Transport call fields
34
+ vesselName: payload.vesselName,
35
+ vesselImo: payload.vesselImo,
36
+ voyageNumber: payload.voyageNumber,
37
+ carrierServiceCode: payload.carrierServiceCode,
38
+ modeOfTransport: payload.modeOfTransport,
39
+ // Document references
40
+ relatedDocumentReferences: payload.relatedDocumentReferences,
41
+ // Metadata
42
+ publisherName: payload.publisherName,
43
+ publisherRole: payload.publisherRole
44
+ }
45
+ },
46
+ tenantId: payload.tenantId,
47
+ organizationId: payload.organizationId
48
+ });
49
+ console.debug(`[shipment-tracking:dcsa-webhook] Dispatched ${ctx.eventName} for tracking event ${payload.id}`);
50
+ } catch (error) {
51
+ console.error(`[shipment-tracking:dcsa-webhook] Failed to dispatch ${ctx.eventName} webhook:`, error);
52
+ }
53
+ }
54
+ export {
55
+ handle as default,
56
+ metadata
57
+ };
58
+ //# sourceMappingURL=dcsa-event-webhook-dispatch.js.map
@@ -0,0 +1,7 @@
1
+ {
2
+ "version": 3,
3
+ "sources": ["../../../../src/modules/shipment_tracking/subscribers/dcsa-event-webhook-dispatch.ts"],
4
+ "sourcesContent": ["import type { DocumentReference } from '../data/entities'\n\n/**\n * Handles DCSA-compliant transport and equipment events and dispatches webhooks.\n * These are granular events like transport.departed, equipment.loaded, etc.\n */\nexport const metadata = {\n event: 'shipment_tracking.transport.*,shipment_tracking.equipment.*',\n persistent: true,\n id: 'shipment_tracking:dcsa-event-webhook-dispatch',\n}\n\ntype DcsaEventPayload = {\n id: string\n shipmentId: string\n tenantId: string\n organizationId: string\n\n // Core event fields\n eventId: string\n eventType: string\n eventCode: string\n eventClassifierCode?: string | null\n eventDateTime?: string | null\n description?: string | null\n\n // Equipment fields\n equipmentReference?: string | null\n isoEquipmentCode?: string | null\n emptyIndicatorCode?: string | null\n isTransshipmentMove?: boolean | null\n\n // Location fields\n locationName?: string | null\n locationUnlocode?: string | null\n locationCountry?: string | null\n facilityCode?: string | null\n facilityTypeCode?: string | null\n\n // Transport call fields\n vesselName?: string | null\n vesselImo?: string | null\n voyageNumber?: string | null\n carrierServiceCode?: string | null\n modeOfTransport?: string | null\n\n // Document references\n relatedDocumentReferences?: DocumentReference[] | null\n\n // Metadata\n publisherName?: string | null\n publisherRole?: string | null\n}\n\ntype ResolverContext = {\n resolve: <T = unknown>(name: string) => T\n eventName: string\n}\n\nexport default async function handle(payload: DcsaEventPayload, ctx: ResolverContext) {\n try {\n const webhookService = ctx.resolve<any>('shipmentTrackingWebhookService')\n\n await webhookService.dispatchEvent({\n eventType: ctx.eventName,\n payload: {\n event: {\n // IDs\n id: payload.id,\n shipmentId: payload.shipmentId,\n\n // Core event fields\n eventType: payload.eventType,\n eventCode: payload.eventCode,\n eventClassifierCode: payload.eventClassifierCode,\n eventDateTime: payload.eventDateTime,\n description: payload.description,\n\n // Equipment fields (critical for multi-container bookings)\n equipmentReference: payload.equipmentReference,\n isoEquipmentCode: payload.isoEquipmentCode,\n emptyIndicatorCode: payload.emptyIndicatorCode,\n isTransshipmentMove: payload.isTransshipmentMove,\n\n // Location fields\n locationName: payload.locationName,\n locationUnlocode: payload.locationUnlocode,\n locationCountry: payload.locationCountry,\n facilityCode: payload.facilityCode,\n facilityTypeCode: payload.facilityTypeCode,\n\n // Transport call fields\n vesselName: payload.vesselName,\n vesselImo: payload.vesselImo,\n voyageNumber: payload.voyageNumber,\n carrierServiceCode: payload.carrierServiceCode,\n modeOfTransport: payload.modeOfTransport,\n\n // Document references\n relatedDocumentReferences: payload.relatedDocumentReferences,\n\n // Metadata\n publisherName: payload.publisherName,\n publisherRole: payload.publisherRole,\n },\n },\n tenantId: payload.tenantId,\n organizationId: payload.organizationId,\n })\n\n console.debug(`[shipment-tracking:dcsa-webhook] Dispatched ${ctx.eventName} for tracking event ${payload.id}`)\n } catch (error) {\n console.error(`[shipment-tracking:dcsa-webhook] Failed to dispatch ${ctx.eventName} webhook:`, error)\n }\n}\n"],
5
+ "mappings": "AAMO,MAAM,WAAW;AAAA,EACtB,OAAO;AAAA,EACP,YAAY;AAAA,EACZ,IAAI;AACN;AAiDA,eAAO,OAA8B,SAA2B,KAAsB;AACpF,MAAI;AACF,UAAM,iBAAiB,IAAI,QAAa,gCAAgC;AAExE,UAAM,eAAe,cAAc;AAAA,MACjC,WAAW,IAAI;AAAA,MACf,SAAS;AAAA,QACP,OAAO;AAAA;AAAA,UAEL,IAAI,QAAQ;AAAA,UACZ,YAAY,QAAQ;AAAA;AAAA,UAGpB,WAAW,QAAQ;AAAA,UACnB,WAAW,QAAQ;AAAA,UACnB,qBAAqB,QAAQ;AAAA,UAC7B,eAAe,QAAQ;AAAA,UACvB,aAAa,QAAQ;AAAA;AAAA,UAGrB,oBAAoB,QAAQ;AAAA,UAC5B,kBAAkB,QAAQ;AAAA,UAC1B,oBAAoB,QAAQ;AAAA,UAC5B,qBAAqB,QAAQ;AAAA;AAAA,UAG7B,cAAc,QAAQ;AAAA,UACtB,kBAAkB,QAAQ;AAAA,UAC1B,iBAAiB,QAAQ;AAAA,UACzB,cAAc,QAAQ;AAAA,UACtB,kBAAkB,QAAQ;AAAA;AAAA,UAG1B,YAAY,QAAQ;AAAA,UACpB,WAAW,QAAQ;AAAA,UACnB,cAAc,QAAQ;AAAA,UACtB,oBAAoB,QAAQ;AAAA,UAC5B,iBAAiB,QAAQ;AAAA;AAAA,UAGzB,2BAA2B,QAAQ;AAAA;AAAA,UAGnC,eAAe,QAAQ;AAAA,UACvB,eAAe,QAAQ;AAAA,QACzB;AAAA,MACF;AAAA,MACA,UAAU,QAAQ;AAAA,MAClB,gBAAgB,QAAQ;AAAA,IAC1B,CAAC;AAED,YAAQ,MAAM,+CAA+C,IAAI,SAAS,uBAAuB,QAAQ,EAAE,EAAE;AAAA,EAC/G,SAAS,OAAO;AACd,YAAQ,MAAM,uDAAuD,IAAI,SAAS,aAAa,KAAK;AAAA,EACtG;AACF;",
6
+ "names": []
7
+ }
@@ -0,0 +1,82 @@
1
+ import { resolveNotificationService } from "@open-mercato/core/modules/notifications/lib/notificationService";
2
+ import { buildNotificationFromType } from "@open-mercato/core/modules/notifications/lib/notificationBuilder";
3
+ import { getTrackingJobCreator } from "../lib/audit-helpers.js";
4
+ import { notificationTypes } from "../notifications.js";
5
+ const metadata = {
6
+ event: "shipment_tracking.tracking_job.poi.*",
7
+ persistent: true,
8
+ id: "shipment_tracking:tracking-job-poi-notification"
9
+ };
10
+ function mapEventTypeToNotificationType(eventType) {
11
+ const map = {
12
+ PORT_ARRIVAL: "shipment_tracking.tracking_job.poi.port_arrival",
13
+ PORT_PROXIMITY_ARRIVAL: "shipment_tracking.tracking_job.poi.port_proximity_arrival",
14
+ PORT_PROXIMITY_DEPARTURE: "shipment_tracking.tracking_job.poi.port_departure",
15
+ TERMINAL_ARRIVAL: "shipment_tracking.tracking_job.poi.terminal_arrival",
16
+ TERMINAL_PROXIMITY_ARRIVAL: "shipment_tracking.tracking_job.poi.terminal_proximity_arrival",
17
+ TERMINAL_PROXIMITY_DEPARTURE: "shipment_tracking.tracking_job.poi.terminal_departure",
18
+ WAYPOINT_REACHED: "shipment_tracking.tracking_job.poi.waypoint_reached"
19
+ };
20
+ return map[eventType];
21
+ }
22
+ function buildReferenceInfo(bookingNumber, bolNumber, containerNumber) {
23
+ if (bookingNumber) {
24
+ return `Booking ${bookingNumber}`;
25
+ }
26
+ if (bolNumber) {
27
+ return `BOL ${bolNumber}`;
28
+ }
29
+ if (containerNumber) {
30
+ return `Container ${containerNumber}`;
31
+ }
32
+ return "Shipment";
33
+ }
34
+ async function handle(payload, ctx) {
35
+ try {
36
+ const em = ctx.resolve("em");
37
+ const creatorUserId = await getTrackingJobCreator(em, payload.trackingJobId, payload.tenantId);
38
+ if (!creatorUserId) {
39
+ console.info(
40
+ `[poi-notification] Skipping notification - no creator found for tracking job ${payload.trackingJobId}`
41
+ );
42
+ return;
43
+ }
44
+ const notificationType = mapEventTypeToNotificationType(payload.eventType);
45
+ const typeDef = notificationTypes.find((t) => t.type === notificationType);
46
+ if (!typeDef) {
47
+ console.warn(`[poi-notification] No notification type found for event: ${payload.eventType}`);
48
+ return;
49
+ }
50
+ const referenceInfo = buildReferenceInfo(
51
+ payload.bookingNumber,
52
+ payload.bolNumber,
53
+ payload.containerNumber
54
+ );
55
+ const notificationInput = buildNotificationFromType(typeDef, {
56
+ recipientUserId: creatorUserId,
57
+ bodyVariables: {
58
+ vesselName: payload.vesselName,
59
+ location: payload.poiCode ?? "unknown location",
60
+ referenceInfo
61
+ },
62
+ sourceEntityType: "shipment_tracking:shipment",
63
+ sourceEntityId: payload.shipmentId,
64
+ linkHref: `/backend/shipment-tracking?shipment=${payload.shipmentId}`
65
+ });
66
+ const notificationService = resolveNotificationService(ctx);
67
+ await notificationService.create(notificationInput, {
68
+ tenantId: payload.tenantId,
69
+ organizationId: payload.organizationId ?? null
70
+ });
71
+ console.info(
72
+ `[poi-notification] Created notification for tracking job ${payload.trackingJobId} (event: ${payload.eventType}, recipient: ${creatorUserId}, ref: ${referenceInfo})`
73
+ );
74
+ } catch (error) {
75
+ console.error("[poi-notification] Failed to process POI event notification:", error);
76
+ }
77
+ }
78
+ export {
79
+ handle as default,
80
+ metadata
81
+ };
82
+ //# sourceMappingURL=poi-event-notification.js.map
@@ -0,0 +1,7 @@
1
+ {
2
+ "version": 3,
3
+ "sources": ["../../../../src/modules/shipment_tracking/subscribers/poi-event-notification.ts"],
4
+ "sourcesContent": ["/**\n * POI Event Notification Subscriber\n *\n * Subscribes to per-tracking-job POI proximity events and creates in-app\n * notifications for the user who created the tracking job.\n *\n * These events are emitted once per tracking job (BOL/Booking), not per\n * shipment (container), so no deduplication is needed.\n */\n\nimport type { EntityManager } from '@mikro-orm/postgresql'\nimport { resolveNotificationService } from '@open-mercato/core/modules/notifications/lib/notificationService'\nimport { buildNotificationFromType } from '@open-mercato/core/modules/notifications/lib/notificationBuilder'\nimport type { ProximityEventType } from '../lib/poi-types'\nimport { getTrackingJobCreator } from '../lib/audit-helpers'\nimport { notificationTypes } from '../notifications'\n\nexport const metadata = {\n event: 'shipment_tracking.tracking_job.poi.*',\n persistent: true,\n id: 'shipment_tracking:tracking-job-poi-notification',\n}\n\ntype TrackingJobPoiEventPayload = {\n trackingJobId: string\n shipmentId: string\n trackingEventId: string\n organizationId: string\n tenantId: string\n vesselName: string\n vesselMmsi: number\n vesselImo: string | null\n eventType: ProximityEventType\n poiCode: string | null\n latitude: number\n longitude: number\n eventDateTime: string\n distanceToPoiMeters: number | null\n containerNumber?: string | null\n bookingNumber?: string | null\n bolNumber?: string | null\n}\n\ntype ResolverContext = {\n resolve: <T = unknown>(name: string) => T\n}\n\n/**\n * Map POI event types to per-job notification type identifiers.\n */\nfunction mapEventTypeToNotificationType(eventType: ProximityEventType): string {\n const map: Record<ProximityEventType, string> = {\n PORT_ARRIVAL: 'shipment_tracking.tracking_job.poi.port_arrival',\n PORT_PROXIMITY_ARRIVAL: 'shipment_tracking.tracking_job.poi.port_proximity_arrival',\n PORT_PROXIMITY_DEPARTURE: 'shipment_tracking.tracking_job.poi.port_departure',\n TERMINAL_ARRIVAL: 'shipment_tracking.tracking_job.poi.terminal_arrival',\n TERMINAL_PROXIMITY_ARRIVAL: 'shipment_tracking.tracking_job.poi.terminal_proximity_arrival',\n TERMINAL_PROXIMITY_DEPARTURE: 'shipment_tracking.tracking_job.poi.terminal_departure',\n WAYPOINT_REACHED: 'shipment_tracking.tracking_job.poi.waypoint_reached',\n }\n return map[eventType]\n}\n\n/**\n * Build a reference info string for the notification body.\n * Shows the booking number, BOL number, or container number.\n *\n * Format: \"Booking BOOK123\" or \"BOL 12345\" or \"Container MSCU1234567\"\n */\nfunction buildReferenceInfo(\n bookingNumber: string | null | undefined,\n bolNumber: string | null | undefined,\n containerNumber: string | null | undefined\n): string {\n if (bookingNumber) {\n return `Booking ${bookingNumber}`\n }\n if (bolNumber) {\n return `BOL ${bolNumber}`\n }\n if (containerNumber) {\n return `Container ${containerNumber}`\n }\n return 'Shipment'\n}\n\nexport default async function handle(payload: TrackingJobPoiEventPayload, ctx: ResolverContext) {\n try {\n const em = ctx.resolve<EntityManager>('em')\n\n // Get the creator of the tracking job from audit logs\n const creatorUserId = await getTrackingJobCreator(em, payload.trackingJobId, payload.tenantId)\n\n if (!creatorUserId) {\n console.info(\n `[poi-notification] Skipping notification - no creator found for tracking job ${payload.trackingJobId}`\n )\n return\n }\n\n // Find the notification type definition\n const notificationType = mapEventTypeToNotificationType(payload.eventType)\n const typeDef = notificationTypes.find((t) => t.type === notificationType)\n\n if (!typeDef) {\n console.warn(`[poi-notification] No notification type found for event: ${payload.eventType}`)\n return\n }\n\n // Build reference info string (e.g., \"Booking BOOK123\")\n const referenceInfo = buildReferenceInfo(\n payload.bookingNumber,\n payload.bolNumber,\n payload.containerNumber\n )\n\n // Build notification input\n const notificationInput = buildNotificationFromType(typeDef, {\n recipientUserId: creatorUserId,\n bodyVariables: {\n vesselName: payload.vesselName,\n location: payload.poiCode ?? 'unknown location',\n referenceInfo,\n },\n sourceEntityType: 'shipment_tracking:shipment',\n sourceEntityId: payload.shipmentId,\n linkHref: `/backend/shipment-tracking?shipment=${payload.shipmentId}`,\n })\n\n // Create the notification\n const notificationService = resolveNotificationService(ctx)\n await notificationService.create(notificationInput, {\n tenantId: payload.tenantId,\n organizationId: payload.organizationId ?? null,\n })\n\n console.info(\n `[poi-notification] Created notification for tracking job ${payload.trackingJobId} ` +\n `(event: ${payload.eventType}, recipient: ${creatorUserId}, ref: ${referenceInfo})`\n )\n } catch (error) {\n console.error('[poi-notification] Failed to process POI event notification:', error)\n }\n}\n"],
5
+ "mappings": "AAWA,SAAS,kCAAkC;AAC3C,SAAS,iCAAiC;AAE1C,SAAS,6BAA6B;AACtC,SAAS,yBAAyB;AAE3B,MAAM,WAAW;AAAA,EACtB,OAAO;AAAA,EACP,YAAY;AAAA,EACZ,IAAI;AACN;AA6BA,SAAS,+BAA+B,WAAuC;AAC7E,QAAM,MAA0C;AAAA,IAC9C,cAAc;AAAA,IACd,wBAAwB;AAAA,IACxB,0BAA0B;AAAA,IAC1B,kBAAkB;AAAA,IAClB,4BAA4B;AAAA,IAC5B,8BAA8B;AAAA,IAC9B,kBAAkB;AAAA,EACpB;AACA,SAAO,IAAI,SAAS;AACtB;AAQA,SAAS,mBACP,eACA,WACA,iBACQ;AACR,MAAI,eAAe;AACjB,WAAO,WAAW,aAAa;AAAA,EACjC;AACA,MAAI,WAAW;AACb,WAAO,OAAO,SAAS;AAAA,EACzB;AACA,MAAI,iBAAiB;AACnB,WAAO,aAAa,eAAe;AAAA,EACrC;AACA,SAAO;AACT;AAEA,eAAO,OAA8B,SAAqC,KAAsB;AAC9F,MAAI;AACF,UAAM,KAAK,IAAI,QAAuB,IAAI;AAG1C,UAAM,gBAAgB,MAAM,sBAAsB,IAAI,QAAQ,eAAe,QAAQ,QAAQ;AAE7F,QAAI,CAAC,eAAe;AAClB,cAAQ;AAAA,QACN,gFAAgF,QAAQ,aAAa;AAAA,MACvG;AACA;AAAA,IACF;AAGA,UAAM,mBAAmB,+BAA+B,QAAQ,SAAS;AACzE,UAAM,UAAU,kBAAkB,KAAK,CAAC,MAAM,EAAE,SAAS,gBAAgB;AAEzE,QAAI,CAAC,SAAS;AACZ,cAAQ,KAAK,4DAA4D,QAAQ,SAAS,EAAE;AAC5F;AAAA,IACF;AAGA,UAAM,gBAAgB;AAAA,MACpB,QAAQ;AAAA,MACR,QAAQ;AAAA,MACR,QAAQ;AAAA,IACV;AAGA,UAAM,oBAAoB,0BAA0B,SAAS;AAAA,MAC3D,iBAAiB;AAAA,MACjB,eAAe;AAAA,QACb,YAAY,QAAQ;AAAA,QACpB,UAAU,QAAQ,WAAW;AAAA,QAC7B;AAAA,MACF;AAAA,MACA,kBAAkB;AAAA,MAClB,gBAAgB,QAAQ;AAAA,MACxB,UAAU,uCAAuC,QAAQ,UAAU;AAAA,IACrE,CAAC;AAGD,UAAM,sBAAsB,2BAA2B,GAAG;AAC1D,UAAM,oBAAoB,OAAO,mBAAmB;AAAA,MAClD,UAAU,QAAQ;AAAA,MAClB,gBAAgB,QAAQ,kBAAkB;AAAA,IAC5C,CAAC;AAED,YAAQ;AAAA,MACN,4DAA4D,QAAQ,aAAa,YACpE,QAAQ,SAAS,gBAAgB,aAAa,UAAU,aAAa;AAAA,IACpF;AAAA,EACF,SAAS,OAAO;AACd,YAAQ,MAAM,gEAAgE,KAAK;AAAA,EACrF;AACF;",
6
+ "names": []
7
+ }
@@ -0,0 +1,53 @@
1
+ const metadata = {
2
+ event: "shipment_tracking.poi.*",
3
+ persistent: true,
4
+ id: "shipment_tracking:poi-event-webhook-dispatch"
5
+ };
6
+ async function handle(payload, ctx) {
7
+ try {
8
+ const webhookService = ctx.resolve("shipmentTrackingWebhookService");
9
+ if (!webhookService) {
10
+ console.debug("[shipment-tracking:poi-webhook] WebhookService not available, skipping dispatch");
11
+ return;
12
+ }
13
+ await webhookService.dispatchEvent({
14
+ eventType: ctx.eventName,
15
+ payload: {
16
+ event: {
17
+ // IDs
18
+ trackingEventId: payload.trackingEventId,
19
+ shipmentId: payload.shipmentId,
20
+ // Event type
21
+ eventType: payload.eventType,
22
+ eventDateTime: payload.eventDateTime,
23
+ // Vessel info
24
+ vesselName: payload.vesselName,
25
+ vesselMmsi: payload.vesselMmsi,
26
+ vesselImo: payload.vesselImo,
27
+ // Location info
28
+ poiCode: payload.poiCode,
29
+ latitude: payload.latitude,
30
+ longitude: payload.longitude,
31
+ distanceToPoiMeters: payload.distanceToPoiMeters,
32
+ // Source identifier
33
+ source: "ais"
34
+ }
35
+ },
36
+ tenantId: payload.tenantId,
37
+ organizationId: payload.organizationId
38
+ });
39
+ console.debug(
40
+ `[shipment-tracking:poi-webhook] Dispatched ${ctx.eventName} for shipment ${payload.shipmentId}`
41
+ );
42
+ } catch (error) {
43
+ console.error(
44
+ `[shipment-tracking:poi-webhook] Failed to dispatch ${ctx.eventName} webhook:`,
45
+ error
46
+ );
47
+ }
48
+ }
49
+ export {
50
+ handle as default,
51
+ metadata
52
+ };
53
+ //# sourceMappingURL=poi-event-webhook-dispatch.js.map
@@ -0,0 +1,7 @@
1
+ {
2
+ "version": 3,
3
+ "sources": ["../../../../src/modules/shipment_tracking/subscribers/poi-event-webhook-dispatch.ts"],
4
+ "sourcesContent": ["/**\n * POI Event Webhook Dispatcher\n *\n * Handles POI proximity events and dispatches webhooks to registered endpoints.\n */\n\nimport type { ProximityEventType } from '../lib/poi-types'\n\nexport const metadata = {\n event: 'shipment_tracking.poi.*',\n persistent: true,\n id: 'shipment_tracking:poi-event-webhook-dispatch',\n}\n\ntype PoiEventPayload = {\n shipmentId: string\n trackingEventId: string\n organizationId: string\n tenantId: string\n vesselName: string\n vesselMmsi: number\n vesselImo: string | null\n eventType: ProximityEventType\n poiCode: string | null\n latitude: number\n longitude: number\n eventDateTime: string\n distanceToPoiMeters: number | null\n}\n\ntype ResolverContext = {\n resolve: <T = unknown>(name: string) => T\n eventName: string\n}\n\ntype WebhookService = {\n dispatchEvent: (params: {\n eventType: string\n payload: unknown\n tenantId: string\n organizationId: string\n }) => Promise<void>\n}\n\nexport default async function handle(payload: PoiEventPayload, ctx: ResolverContext) {\n try {\n const webhookService = ctx.resolve<WebhookService | undefined>('shipmentTrackingWebhookService')\n\n if (!webhookService) {\n console.debug('[shipment-tracking:poi-webhook] WebhookService not available, skipping dispatch')\n return\n }\n\n await webhookService.dispatchEvent({\n eventType: ctx.eventName,\n payload: {\n event: {\n // IDs\n trackingEventId: payload.trackingEventId,\n shipmentId: payload.shipmentId,\n\n // Event type\n eventType: payload.eventType,\n eventDateTime: payload.eventDateTime,\n\n // Vessel info\n vesselName: payload.vesselName,\n vesselMmsi: payload.vesselMmsi,\n vesselImo: payload.vesselImo,\n\n // Location info\n poiCode: payload.poiCode,\n latitude: payload.latitude,\n longitude: payload.longitude,\n distanceToPoiMeters: payload.distanceToPoiMeters,\n\n // Source identifier\n source: 'ais',\n },\n },\n tenantId: payload.tenantId,\n organizationId: payload.organizationId,\n })\n\n console.debug(\n `[shipment-tracking:poi-webhook] Dispatched ${ctx.eventName} for shipment ${payload.shipmentId}`\n )\n } catch (error) {\n console.error(\n `[shipment-tracking:poi-webhook] Failed to dispatch ${ctx.eventName} webhook:`,\n error\n )\n }\n}\n"],
5
+ "mappings": "AAQO,MAAM,WAAW;AAAA,EACtB,OAAO;AAAA,EACP,YAAY;AAAA,EACZ,IAAI;AACN;AAgCA,eAAO,OAA8B,SAA0B,KAAsB;AACnF,MAAI;AACF,UAAM,iBAAiB,IAAI,QAAoC,gCAAgC;AAE/F,QAAI,CAAC,gBAAgB;AACnB,cAAQ,MAAM,iFAAiF;AAC/F;AAAA,IACF;AAEA,UAAM,eAAe,cAAc;AAAA,MACjC,WAAW,IAAI;AAAA,MACf,SAAS;AAAA,QACP,OAAO;AAAA;AAAA,UAEL,iBAAiB,QAAQ;AAAA,UACzB,YAAY,QAAQ;AAAA;AAAA,UAGpB,WAAW,QAAQ;AAAA,UACnB,eAAe,QAAQ;AAAA;AAAA,UAGvB,YAAY,QAAQ;AAAA,UACpB,YAAY,QAAQ;AAAA,UACpB,WAAW,QAAQ;AAAA;AAAA,UAGnB,SAAS,QAAQ;AAAA,UACjB,UAAU,QAAQ;AAAA,UAClB,WAAW,QAAQ;AAAA,UACnB,qBAAqB,QAAQ;AAAA;AAAA,UAG7B,QAAQ;AAAA,QACV;AAAA,MACF;AAAA,MACA,UAAU,QAAQ;AAAA,MAClB,gBAAgB,QAAQ;AAAA,IAC1B,CAAC;AAED,YAAQ;AAAA,MACN,8CAA8C,IAAI,SAAS,iBAAiB,QAAQ,UAAU;AAAA,IAChG;AAAA,EACF,SAAS,OAAO;AACd,YAAQ;AAAA,MACN,sDAAsD,IAAI,SAAS;AAAA,MACnE;AAAA,IACF;AAAA,EACF;AACF;",
6
+ "names": []
7
+ }
@@ -0,0 +1,28 @@
1
+ const metadata = {
2
+ event: "shipment_tracking.shipment.status_changed",
3
+ persistent: true,
4
+ id: "shipment_tracking:shipment-status-changed"
5
+ };
6
+ async function handle(payload, ctx) {
7
+ try {
8
+ const webhookService = ctx.resolve("shipmentTrackingWebhookService");
9
+ const shipmentData = await webhookService.buildFullShipmentPayload(payload.id);
10
+ await webhookService.dispatchEvent({
11
+ eventType: "shipment_tracking.shipment.status_changed",
12
+ payload: {
13
+ previousStatus: payload.previousStatus,
14
+ newStatus: payload.newStatus,
15
+ shipment: shipmentData
16
+ },
17
+ tenantId: payload.tenantId,
18
+ organizationId: payload.organizationId
19
+ });
20
+ } catch (error) {
21
+ console.error("[shipment-tracking:subscriber] Failed to dispatch status_changed webhook:", error);
22
+ }
23
+ }
24
+ export {
25
+ handle as default,
26
+ metadata
27
+ };
28
+ //# sourceMappingURL=shipment-status-changed.js.map
@@ -0,0 +1,7 @@
1
+ {
2
+ "version": 3,
3
+ "sources": ["../../../../src/modules/shipment_tracking/subscribers/shipment-status-changed.ts"],
4
+ "sourcesContent": ["import type { WebhookService } from '../services/webhookService'\n\nexport const metadata = {\n event: 'shipment_tracking.shipment.status_changed',\n persistent: true,\n id: 'shipment_tracking:shipment-status-changed',\n}\n\ntype StatusChangedPayload = {\n id: string\n previousStatus: string\n newStatus: string\n tenantId: string\n organizationId: string\n}\n\ntype ResolverContext = {\n resolve: <T = unknown>(name: string) => T\n}\n\nexport default async function handle(payload: StatusChangedPayload, ctx: ResolverContext) {\n try {\n const webhookService = ctx.resolve<WebhookService>('shipmentTrackingWebhookService')\n\n // Build full shipment payload to include in the webhook\n const shipmentData = await webhookService.buildFullShipmentPayload(payload.id)\n\n await webhookService.dispatchEvent({\n eventType: 'shipment_tracking.shipment.status_changed',\n payload: {\n previousStatus: payload.previousStatus,\n newStatus: payload.newStatus,\n shipment: shipmentData,\n },\n tenantId: payload.tenantId,\n organizationId: payload.organizationId,\n })\n } catch (error) {\n console.error('[shipment-tracking:subscriber] Failed to dispatch status_changed webhook:', error)\n }\n}\n"],
5
+ "mappings": "AAEO,MAAM,WAAW;AAAA,EACtB,OAAO;AAAA,EACP,YAAY;AAAA,EACZ,IAAI;AACN;AAcA,eAAO,OAA8B,SAA+B,KAAsB;AACxF,MAAI;AACF,UAAM,iBAAiB,IAAI,QAAwB,gCAAgC;AAGnF,UAAM,eAAe,MAAM,eAAe,yBAAyB,QAAQ,EAAE;AAE7E,UAAM,eAAe,cAAc;AAAA,MACjC,WAAW;AAAA,MACX,SAAS;AAAA,QACP,gBAAgB,QAAQ;AAAA,QACxB,WAAW,QAAQ;AAAA,QACnB,UAAU;AAAA,MACZ;AAAA,MACA,UAAU,QAAQ;AAAA,MAClB,gBAAgB,QAAQ;AAAA,IAC1B,CAAC;AAAA,EACH,SAAS,OAAO;AACd,YAAQ,MAAM,6EAA6E,KAAK;AAAA,EAClG;AACF;",
6
+ "names": []
7
+ }
@@ -0,0 +1,67 @@
1
+ import { Shipment, TrackingEvent } from "../data/entities.js";
2
+ const metadata = {
3
+ event: "terminal_tracking.terminal_event.created",
4
+ persistent: false,
5
+ id: "shipment_tracking:terminal-event-ingest"
6
+ };
7
+ async function handle(payload, ctx) {
8
+ if (!payload?.containerNumber || !payload?.sourceEventId) return;
9
+ const em = ctx.resolve("em").fork();
10
+ const trackingService = ctx.resolve("shipmentTrackingService");
11
+ const shipments = await em.find(
12
+ Shipment,
13
+ {
14
+ organizationId: payload.organizationId,
15
+ tenantId: payload.tenantId,
16
+ containerNumber: payload.containerNumber,
17
+ deletedAt: null,
18
+ isActive: true,
19
+ status: { $nin: ["DELIVERED"] }
20
+ },
21
+ { populate: ["trackingJob"] }
22
+ );
23
+ const eventDateTime = new Date(payload.eventDateTime);
24
+ const touchedJobs = /* @__PURE__ */ new Map();
25
+ for (const shipment of shipments) {
26
+ if (!shipment.trackingJob) continue;
27
+ const exists = await em.findOne(TrackingEvent, {
28
+ trackingJob: shipment.trackingJob.id,
29
+ source: "port",
30
+ sourceEventId: payload.sourceEventId
31
+ });
32
+ if (exists) continue;
33
+ const event = new TrackingEvent();
34
+ event.organizationId = shipment.organizationId;
35
+ event.tenantId = shipment.tenantId;
36
+ event.trackingJob = shipment.trackingJob;
37
+ event.source = "port";
38
+ event.sourceEventId = payload.sourceEventId;
39
+ event.eventType = payload.eventType;
40
+ event.eventCode = payload.eventCode;
41
+ event.eventClassifierCode = payload.eventClassifierCode ?? "ACT";
42
+ event.eventDateTime = eventDateTime;
43
+ event.equipmentReference = payload.containerNumber;
44
+ event.locationUnlocode = payload.unlocode ?? null;
45
+ event.facilityCode = payload.facilityCode ?? null;
46
+ event.facilityCodeListProvider = payload.facilityCodeListProvider ?? null;
47
+ event.vesselName = payload.vesselName ?? null;
48
+ event.voyageNumber = payload.voyageNumber ?? null;
49
+ event.modeOfTransport = payload.modeOfTransport ?? null;
50
+ event.seals = payload.seals ?? null;
51
+ event.rawData = payload.rawData ?? null;
52
+ em.persist(event);
53
+ const set = touchedJobs.get(shipment.trackingJob.id) ?? /* @__PURE__ */ new Set();
54
+ set.add(shipment.id);
55
+ touchedJobs.set(shipment.trackingJob.id, set);
56
+ }
57
+ if (touchedJobs.size === 0) return;
58
+ await em.flush();
59
+ for (const [jobId, shipmentIds] of touchedJobs) {
60
+ await trackingService.refreshShipmentsFromEvents(em, jobId, Array.from(shipmentIds));
61
+ }
62
+ }
63
+ export {
64
+ handle as default,
65
+ metadata
66
+ };
67
+ //# sourceMappingURL=terminal-event-ingest.js.map
@@ -0,0 +1,7 @@
1
+ {
2
+ "version": 3,
3
+ "sources": ["../../../../src/modules/shipment_tracking/subscribers/terminal-event-ingest.ts"],
4
+ "sourcesContent": ["/**\n * Terminal Event Ingest (bridge)\n *\n * Surfaces terminal-tracking events on the shipment-tracking timeline. Reacts\n * to the `terminal_tracking.terminal_event.created` event (string coupling\n * only \u2014 this module does NOT import @freighttech/terminal-tracking), finds the\n * matching tracked Shipment by container number, and records a `source:'port'`\n * TrackingEvent. Fully additive; no-ops when no matching shipment is tracked.\n */\nimport type { EntityManager } from '@mikro-orm/postgresql'\nimport { Shipment, TrackingEvent } from '../data/entities'\nimport type { TrackingService } from '../services/trackingService'\n\nexport const metadata = {\n event: 'terminal_tracking.terminal_event.created',\n persistent: false,\n id: 'shipment_tracking:terminal-event-ingest',\n}\n\ntype TerminalEventPayload = {\n sourceEventId: string\n eventType: 'EQUIPMENT' | 'TRANSPORT'\n eventCode: string\n eventClassifierCode?: 'ACT' | 'PLN' | 'EST' | null\n eventDateTime: string\n containerNumber: string\n tenantId: string\n organizationId: string\n unlocode?: string | null\n facilityCode?: string | null\n facilityCodeListProvider?: 'SMDG' | 'BIC' | null\n vesselName?: string | null\n voyageNumber?: string | null\n modeOfTransport?: 'VESSEL' | 'RAIL' | 'TRUCK' | 'BARGE' | null\n seals?: Array<{ number: string; type?: string | null; source?: string | null }> | null\n rawData?: Record<string, unknown> | null\n}\n\ntype ResolverContext = { resolve: <T = unknown>(name: string) => T }\n\nexport default async function handle(payload: TerminalEventPayload, ctx: ResolverContext) {\n if (!payload?.containerNumber || !payload?.sourceEventId) return\n\n const em = ctx.resolve<EntityManager>('em').fork()\n const trackingService = ctx.resolve<TrackingService>('shipmentTrackingService')\n\n // Scope to currently-tracked, non-delivered shipments (mirror\n // poi-event-processor). A container number is reused across journeys over\n // time, so without this a returned container's new-visit events would refresh\n // and override a historic, already-delivered shipment with the same number.\n const shipments = await em.find(\n Shipment,\n {\n organizationId: payload.organizationId,\n tenantId: payload.tenantId,\n containerNumber: payload.containerNumber,\n deletedAt: null,\n isActive: true,\n status: { $nin: ['DELIVERED'] },\n },\n { populate: ['trackingJob'] },\n )\n\n const eventDateTime = new Date(payload.eventDateTime)\n const touchedJobs = new Map<string, Set<string>>()\n\n for (const shipment of shipments) {\n if (!shipment.trackingJob) continue\n\n const exists = await em.findOne(TrackingEvent, {\n trackingJob: shipment.trackingJob.id,\n source: 'port',\n sourceEventId: payload.sourceEventId,\n })\n if (exists) continue\n\n const event = new TrackingEvent()\n event.organizationId = shipment.organizationId\n event.tenantId = shipment.tenantId\n event.trackingJob = shipment.trackingJob\n event.source = 'port'\n event.sourceEventId = payload.sourceEventId\n event.eventType = payload.eventType\n event.eventCode = payload.eventCode\n event.eventClassifierCode = payload.eventClassifierCode ?? 'ACT'\n event.eventDateTime = eventDateTime\n event.equipmentReference = payload.containerNumber\n event.locationUnlocode = payload.unlocode ?? null\n event.facilityCode = payload.facilityCode ?? null\n event.facilityCodeListProvider = payload.facilityCodeListProvider ?? null\n event.vesselName = payload.vesselName ?? null\n event.voyageNumber = payload.voyageNumber ?? null\n event.modeOfTransport = payload.modeOfTransport ?? null\n event.seals = payload.seals ?? null\n event.rawData = payload.rawData ?? null\n em.persist(event)\n\n const set = touchedJobs.get(shipment.trackingJob.id) ?? new Set<string>()\n set.add(shipment.id)\n touchedJobs.set(shipment.trackingJob.id, set)\n }\n\n if (touchedJobs.size === 0) return\n await em.flush()\n\n for (const [jobId, shipmentIds] of touchedJobs) {\n await trackingService.refreshShipmentsFromEvents(em, jobId, Array.from(shipmentIds))\n }\n}\n"],
5
+ "mappings": "AAUA,SAAS,UAAU,qBAAqB;AAGjC,MAAM,WAAW;AAAA,EACtB,OAAO;AAAA,EACP,YAAY;AAAA,EACZ,IAAI;AACN;AAuBA,eAAO,OAA8B,SAA+B,KAAsB;AACxF,MAAI,CAAC,SAAS,mBAAmB,CAAC,SAAS,cAAe;AAE1D,QAAM,KAAK,IAAI,QAAuB,IAAI,EAAE,KAAK;AACjD,QAAM,kBAAkB,IAAI,QAAyB,yBAAyB;AAM9E,QAAM,YAAY,MAAM,GAAG;AAAA,IACzB;AAAA,IACA;AAAA,MACE,gBAAgB,QAAQ;AAAA,MACxB,UAAU,QAAQ;AAAA,MAClB,iBAAiB,QAAQ;AAAA,MACzB,WAAW;AAAA,MACX,UAAU;AAAA,MACV,QAAQ,EAAE,MAAM,CAAC,WAAW,EAAE;AAAA,IAChC;AAAA,IACA,EAAE,UAAU,CAAC,aAAa,EAAE;AAAA,EAC9B;AAEA,QAAM,gBAAgB,IAAI,KAAK,QAAQ,aAAa;AACpD,QAAM,cAAc,oBAAI,IAAyB;AAEjD,aAAW,YAAY,WAAW;AAChC,QAAI,CAAC,SAAS,YAAa;AAE3B,UAAM,SAAS,MAAM,GAAG,QAAQ,eAAe;AAAA,MAC7C,aAAa,SAAS,YAAY;AAAA,MAClC,QAAQ;AAAA,MACR,eAAe,QAAQ;AAAA,IACzB,CAAC;AACD,QAAI,OAAQ;AAEZ,UAAM,QAAQ,IAAI,cAAc;AAChC,UAAM,iBAAiB,SAAS;AAChC,UAAM,WAAW,SAAS;AAC1B,UAAM,cAAc,SAAS;AAC7B,UAAM,SAAS;AACf,UAAM,gBAAgB,QAAQ;AAC9B,UAAM,YAAY,QAAQ;AAC1B,UAAM,YAAY,QAAQ;AAC1B,UAAM,sBAAsB,QAAQ,uBAAuB;AAC3D,UAAM,gBAAgB;AACtB,UAAM,qBAAqB,QAAQ;AACnC,UAAM,mBAAmB,QAAQ,YAAY;AAC7C,UAAM,eAAe,QAAQ,gBAAgB;AAC7C,UAAM,2BAA2B,QAAQ,4BAA4B;AACrE,UAAM,aAAa,QAAQ,cAAc;AACzC,UAAM,eAAe,QAAQ,gBAAgB;AAC7C,UAAM,kBAAkB,QAAQ,mBAAmB;AACnD,UAAM,QAAQ,QAAQ,SAAS;AAC/B,UAAM,UAAU,QAAQ,WAAW;AACnC,OAAG,QAAQ,KAAK;AAEhB,UAAM,MAAM,YAAY,IAAI,SAAS,YAAY,EAAE,KAAK,oBAAI,IAAY;AACxE,QAAI,IAAI,SAAS,EAAE;AACnB,gBAAY,IAAI,SAAS,YAAY,IAAI,GAAG;AAAA,EAC9C;AAEA,MAAI,YAAY,SAAS,EAAG;AAC5B,QAAM,GAAG,MAAM;AAEf,aAAW,CAAC,OAAO,WAAW,KAAK,aAAa;AAC9C,UAAM,gBAAgB,2BAA2B,IAAI,OAAO,MAAM,KAAK,WAAW,CAAC;AAAA,EACrF;AACF;",
6
+ "names": []
7
+ }
@@ -0,0 +1,30 @@
1
+ const metadata = {
2
+ event: "shipment_tracking.tracking_job.created",
3
+ persistent: false,
4
+ // In-process, immediate execution
5
+ id: "shipment_tracking:tracking-job-initial-poll"
6
+ };
7
+ async function handle(payload, ctx) {
8
+ const trackingService = ctx.resolve("shipmentTrackingService");
9
+ console.log("[shipment-tracking] Triggering initial poll for new tracking job:", {
10
+ jobId: payload.id,
11
+ carrierCode: payload.carrierCode,
12
+ reference: `${payload.referenceType}:${payload.referenceValue}`
13
+ });
14
+ try {
15
+ const result = await trackingService.pollTrackingJob(payload.id);
16
+ console.log("[shipment-tracking] Initial poll completed:", {
17
+ jobId: payload.id,
18
+ newEvents: result.newEvents,
19
+ shipmentsCreated: result.shipmentsCreated,
20
+ shipmentsUpdated: result.shipmentsUpdated
21
+ });
22
+ } catch (error) {
23
+ console.error("[shipment-tracking] Initial poll failed for job:", payload.id, error);
24
+ }
25
+ }
26
+ export {
27
+ handle as default,
28
+ metadata
29
+ };
30
+ //# sourceMappingURL=tracking-job-initial-poll.js.map
@@ -0,0 +1,7 @@
1
+ {
2
+ "version": 3,
3
+ "sources": ["../../../../src/modules/shipment_tracking/subscribers/tracking-job-initial-poll.ts"],
4
+ "sourcesContent": ["/**\n * Tracking Job Initial Poll Subscriber\n *\n * Triggers an immediate poll when a new tracking job is created.\n * This ensures the carrier API is queried right away instead of waiting\n * for the next scheduled poll interval.\n */\n\nimport type { TrackingService } from '../services/trackingService'\n\nexport const metadata = {\n event: 'shipment_tracking.tracking_job.created',\n persistent: false, // In-process, immediate execution\n id: 'shipment_tracking:tracking-job-initial-poll',\n}\n\ntype TrackingJobCreatedPayload = {\n id: string\n carrierCode: string\n referenceType: string\n referenceValue: string\n tenantId: string\n organizationId: string\n}\n\ntype ResolverContext = {\n resolve: <T = unknown>(name: string) => T\n}\n\nexport default async function handle(payload: TrackingJobCreatedPayload, ctx: ResolverContext) {\n const trackingService = ctx.resolve<TrackingService>('shipmentTrackingService')\n\n console.log('[shipment-tracking] Triggering initial poll for new tracking job:', {\n jobId: payload.id,\n carrierCode: payload.carrierCode,\n reference: `${payload.referenceType}:${payload.referenceValue}`,\n })\n\n try {\n const result = await trackingService.pollTrackingJob(payload.id)\n\n console.log('[shipment-tracking] Initial poll completed:', {\n jobId: payload.id,\n newEvents: result.newEvents,\n shipmentsCreated: result.shipmentsCreated,\n shipmentsUpdated: result.shipmentsUpdated,\n })\n } catch (error) {\n // Log error but don't rethrow - the job is created and will be polled on schedule\n // Errors are already recorded in the job's errorHistory by pollTrackingJob\n console.error('[shipment-tracking] Initial poll failed for job:', payload.id, error)\n }\n}\n"],
5
+ "mappings": "AAUO,MAAM,WAAW;AAAA,EACtB,OAAO;AAAA,EACP,YAAY;AAAA;AAAA,EACZ,IAAI;AACN;AAeA,eAAO,OAA8B,SAAoC,KAAsB;AAC7F,QAAM,kBAAkB,IAAI,QAAyB,yBAAyB;AAE9E,UAAQ,IAAI,qEAAqE;AAAA,IAC/E,OAAO,QAAQ;AAAA,IACf,aAAa,QAAQ;AAAA,IACrB,WAAW,GAAG,QAAQ,aAAa,IAAI,QAAQ,cAAc;AAAA,EAC/D,CAAC;AAED,MAAI;AACF,UAAM,SAAS,MAAM,gBAAgB,gBAAgB,QAAQ,EAAE;AAE/D,YAAQ,IAAI,+CAA+C;AAAA,MACzD,OAAO,QAAQ;AAAA,MACf,WAAW,OAAO;AAAA,MAClB,kBAAkB,OAAO;AAAA,MACzB,kBAAkB,OAAO;AAAA,IAC3B,CAAC;AAAA,EACH,SAAS,OAAO;AAGd,YAAQ,MAAM,oDAAoD,QAAQ,IAAI,KAAK;AAAA,EACrF;AACF;",
6
+ "names": []
7
+ }
@@ -0,0 +1,19 @@
1
+ const metadata = {
2
+ event: "shipment_tracking.tracking_job.*",
3
+ persistent: true,
4
+ id: "shipment_tracking:tracking-job-webhook-dispatch"
5
+ };
6
+ async function handle(payload, ctx) {
7
+ const eventParts = ctx.eventName.split(".");
8
+ const action = eventParts[eventParts.length - 1];
9
+ console.debug(`[shipment-tracking:internal] Tracking job event: ${action}`, {
10
+ jobId: payload.id,
11
+ shipmentId: payload.shipmentId,
12
+ carrierCode: payload.carrierCode
13
+ });
14
+ }
15
+ export {
16
+ handle as default,
17
+ metadata
18
+ };
19
+ //# sourceMappingURL=tracking-job-webhook-dispatch.js.map
@@ -0,0 +1,7 @@
1
+ {
2
+ "version": 3,
3
+ "sources": ["../../../../src/modules/shipment_tracking/subscribers/tracking-job-webhook-dispatch.ts"],
4
+ "sourcesContent": ["/**\n * Tracking Job Event Handler\n *\n * NOTE: As of DCSA T&T compliance update, tracking_job events are marked as\n * internal events (excludeFromTriggers: true) and are NOT dispatched to\n * external webhooks. These events are for internal system monitoring only.\n *\n * This subscriber remains for internal audit logging but does not dispatch\n * webhooks to external consumers. External consumers should subscribe to\n * DCSA-compliant events like:\n * - shipment_tracking.transport.* (departed, arrived, eta_updated, etc.)\n * - shipment_tracking.equipment.* (loaded, discharged, gate_in, etc.)\n * - shipment_tracking.shipment.* (created, updated, status_changed, etc.)\n */\n\nexport const metadata = {\n event: 'shipment_tracking.tracking_job.*',\n persistent: true,\n id: 'shipment_tracking:tracking-job-webhook-dispatch',\n}\n\ntype TrackingJobEventPayload = {\n id: string\n shipmentId?: string\n carrierCode?: string\n tenantId: string\n organizationId: string\n}\n\ntype ResolverContext = {\n resolve: <T = unknown>(name: string) => T\n eventName: string\n}\n\nexport default async function handle(payload: TrackingJobEventPayload, ctx: ResolverContext) {\n // Extract the action from the event name (e.g., \"created\", \"updated\", \"failed\")\n const eventParts = ctx.eventName.split('.')\n const action = eventParts[eventParts.length - 1]\n\n // Internal logging only - no webhook dispatch for tracking_job events\n // These are internal system events per DCSA compliance requirements\n console.debug(`[shipment-tracking:internal] Tracking job event: ${action}`, {\n jobId: payload.id,\n shipmentId: payload.shipmentId,\n carrierCode: payload.carrierCode,\n })\n\n // NOTE: Webhook dispatch removed - tracking_job events are internal only\n // External consumers should subscribe to DCSA-compliant transport/equipment events\n}\n"],
5
+ "mappings": "AAeO,MAAM,WAAW;AAAA,EACtB,OAAO;AAAA,EACP,YAAY;AAAA,EACZ,IAAI;AACN;AAeA,eAAO,OAA8B,SAAkC,KAAsB;AAE3F,QAAM,aAAa,IAAI,UAAU,MAAM,GAAG;AAC1C,QAAM,SAAS,WAAW,WAAW,SAAS,CAAC;AAI/C,UAAQ,MAAM,oDAAoD,MAAM,IAAI;AAAA,IAC1E,OAAO,QAAQ;AAAA,IACf,YAAY,QAAQ;AAAA,IACpB,aAAa,QAAQ;AAAA,EACvB,CAAC;AAIH;",
6
+ "names": []
7
+ }
@@ -0,0 +1,6 @@
1
+ import trackingJob from "./tracking_job/table.js";
2
+ const tables = [trackingJob];
3
+ export {
4
+ tables
5
+ };
6
+ //# sourceMappingURL=index.js.map
@@ -0,0 +1,7 @@
1
+ {
2
+ "version": 3,
3
+ "sources": ["../../../../src/modules/shipment_tracking/tables/index.ts"],
4
+ "sourcesContent": ["import type { TableDefinition } from '@freighttech/ui/backend/dynamic-table'\nimport trackingJob from './tracking_job/table'\n\nexport const tables: TableDefinition[] = [trackingJob]\n"],
5
+ "mappings": "AACA,OAAO,iBAAiB;AAEjB,MAAM,SAA4B,CAAC,WAAW;",
6
+ "names": []
7
+ }