@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.
- package/LICENSE +21 -0
- package/NOTICE +25 -0
- package/dist/generated/entities/bic_config/index.js +21 -0
- package/dist/generated/entities/bic_config/index.js.map +7 -0
- package/dist/generated/entities/carrier_config/index.js +27 -0
- package/dist/generated/entities/carrier_config/index.js.map +7 -0
- package/dist/generated/entities/location_override/index.js +33 -0
- package/dist/generated/entities/location_override/index.js.map +7 -0
- package/dist/generated/entities/shipment/index.js +73 -0
- package/dist/generated/entities/shipment/index.js.map +7 -0
- package/dist/generated/entities/ships_go_config/index.js +31 -0
- package/dist/generated/entities/ships_go_config/index.js.map +7 -0
- package/dist/generated/entities/tracking_event/index.js +101 -0
- package/dist/generated/entities/tracking_event/index.js.map +7 -0
- package/dist/generated/entities/tracking_job/index.js +47 -0
- package/dist/generated/entities/tracking_job/index.js.map +7 -0
- package/dist/generated/entities/webhook/index.js +25 -0
- package/dist/generated/entities/webhook/index.js.map +7 -0
- package/dist/generated/entities/webhook_delivery/index.js +25 -0
- package/dist/generated/entities/webhook_delivery/index.js.map +7 -0
- package/dist/generated/entities.ids.generated.js +21 -0
- package/dist/generated/entities.ids.generated.js.map +7 -0
- package/dist/index.js +41 -0
- package/dist/index.js.map +7 -0
- package/dist/modules/shipment_tracking/acl.js +22 -0
- package/dist/modules/shipment_tracking/acl.js.map +7 -0
- package/dist/modules/shipment_tracking/api/bic-configs/route.js +176 -0
- package/dist/modules/shipment_tracking/api/bic-configs/route.js.map +7 -0
- package/dist/modules/shipment_tracking/api/bic-configs/test/route.js +95 -0
- package/dist/modules/shipment_tracking/api/bic-configs/test/route.js.map +7 -0
- package/dist/modules/shipment_tracking/api/cargo-events/route.js +93 -0
- package/dist/modules/shipment_tracking/api/cargo-events/route.js.map +7 -0
- package/dist/modules/shipment_tracking/api/carrier-configs/route.js +139 -0
- package/dist/modules/shipment_tracking/api/carrier-configs/route.js.map +7 -0
- package/dist/modules/shipment_tracking/api/dashboard/ships-map/route.js +177 -0
- package/dist/modules/shipment_tracking/api/dashboard/ships-map/route.js.map +7 -0
- package/dist/modules/shipment_tracking/api/location-overrides/route.js +179 -0
- package/dist/modules/shipment_tracking/api/location-overrides/route.js.map +7 -0
- package/dist/modules/shipment_tracking/api/openapi.js +27 -0
- package/dist/modules/shipment_tracking/api/openapi.js.map +7 -0
- package/dist/modules/shipment_tracking/api/shipments/route.js +192 -0
- package/dist/modules/shipment_tracking/api/shipments/route.js.map +7 -0
- package/dist/modules/shipment_tracking/api/shipsgo-configs/route.js +185 -0
- package/dist/modules/shipment_tracking/api/shipsgo-configs/route.js.map +7 -0
- package/dist/modules/shipment_tracking/api/tracking-jobs/route.js +144 -0
- package/dist/modules/shipment_tracking/api/tracking-jobs/route.js.map +7 -0
- package/dist/modules/shipment_tracking/api/tracking-jobs/sync/route.js +107 -0
- package/dist/modules/shipment_tracking/api/tracking-jobs/sync/route.js.map +7 -0
- package/dist/modules/shipment_tracking/api/utils.js +12 -0
- package/dist/modules/shipment_tracking/api/utils.js.map +7 -0
- package/dist/modules/shipment_tracking/api/webhooks/deliveries/route.js +76 -0
- package/dist/modules/shipment_tracking/api/webhooks/deliveries/route.js.map +7 -0
- package/dist/modules/shipment_tracking/api/webhooks/route.js +135 -0
- package/dist/modules/shipment_tracking/api/webhooks/route.js.map +7 -0
- package/dist/modules/shipment_tracking/api/webhooks/test/route.js +71 -0
- package/dist/modules/shipment_tracking/api/webhooks/test/route.js.map +7 -0
- package/dist/modules/shipment_tracking/assets/carriers/cma_cgm.png +0 -0
- package/dist/modules/shipment_tracking/assets/carriers/cosco.png +0 -0
- package/dist/modules/shipment_tracking/assets/carriers/evergreen.png +0 -0
- package/dist/modules/shipment_tracking/assets/carriers/hapag_lloyd.png +0 -0
- package/dist/modules/shipment_tracking/assets/carriers/maersk.png +0 -0
- package/dist/modules/shipment_tracking/assets/carriers/msc.png +0 -0
- package/dist/modules/shipment_tracking/assets/carriers/one.png +0 -0
- package/dist/modules/shipment_tracking/assets/carriers/oocl.png +0 -0
- package/dist/modules/shipment_tracking/assets/carriers/yang_ming.png +0 -0
- package/dist/modules/shipment_tracking/assets/carriers/zim.png +0 -0
- package/dist/modules/shipment_tracking/assets/index.js +52 -0
- package/dist/modules/shipment_tracking/assets/index.js.map +7 -0
- package/dist/modules/shipment_tracking/backend/carrier-configs/page.js +621 -0
- package/dist/modules/shipment_tracking/backend/carrier-configs/page.js.map +7 -0
- package/dist/modules/shipment_tracking/backend/carrier-configs/page.meta.js +19 -0
- package/dist/modules/shipment_tracking/backend/carrier-configs/page.meta.js.map +7 -0
- package/dist/modules/shipment_tracking/backend/location-overrides/page.js +198 -0
- package/dist/modules/shipment_tracking/backend/location-overrides/page.js.map +7 -0
- package/dist/modules/shipment_tracking/backend/location-overrides/page.meta.js +19 -0
- package/dist/modules/shipment_tracking/backend/location-overrides/page.meta.js.map +7 -0
- package/dist/modules/shipment_tracking/backend/shipment-tracking/page.js +279 -0
- package/dist/modules/shipment_tracking/backend/shipment-tracking/page.js.map +7 -0
- package/dist/modules/shipment_tracking/backend/shipment-tracking/page.meta.js +19 -0
- package/dist/modules/shipment_tracking/backend/shipment-tracking/page.meta.js.map +7 -0
- package/dist/modules/shipment_tracking/backend/tracking-jobs/page.js +10 -0
- package/dist/modules/shipment_tracking/backend/tracking-jobs/page.js.map +7 -0
- package/dist/modules/shipment_tracking/backend/tracking-jobs/page.meta.js +19 -0
- package/dist/modules/shipment_tracking/backend/tracking-jobs/page.meta.js.map +7 -0
- package/dist/modules/shipment_tracking/backend/webhooks/page.js +198 -0
- package/dist/modules/shipment_tracking/backend/webhooks/page.js.map +7 -0
- package/dist/modules/shipment_tracking/backend/webhooks/page.meta.js +19 -0
- package/dist/modules/shipment_tracking/backend/webhooks/page.meta.js.map +7 -0
- package/dist/modules/shipment_tracking/ce.js +52 -0
- package/dist/modules/shipment_tracking/ce.js.map +7 -0
- package/dist/modules/shipment_tracking/cli.js +229 -0
- package/dist/modules/shipment_tracking/cli.js.map +7 -0
- package/dist/modules/shipment_tracking/commands/bic-configs.js +66 -0
- package/dist/modules/shipment_tracking/commands/bic-configs.js.map +7 -0
- package/dist/modules/shipment_tracking/commands/carrier-configs.js +65 -0
- package/dist/modules/shipment_tracking/commands/carrier-configs.js.map +7 -0
- package/dist/modules/shipment_tracking/commands/index.js +9 -0
- package/dist/modules/shipment_tracking/commands/index.js.map +7 -0
- package/dist/modules/shipment_tracking/commands/location-overrides.js +93 -0
- package/dist/modules/shipment_tracking/commands/location-overrides.js.map +7 -0
- package/dist/modules/shipment_tracking/commands/shipments.js +200 -0
- package/dist/modules/shipment_tracking/commands/shipments.js.map +7 -0
- package/dist/modules/shipment_tracking/commands/shipsgo-configs.js +75 -0
- package/dist/modules/shipment_tracking/commands/shipsgo-configs.js.map +7 -0
- package/dist/modules/shipment_tracking/commands/tracking-jobs.js +120 -0
- package/dist/modules/shipment_tracking/commands/tracking-jobs.js.map +7 -0
- package/dist/modules/shipment_tracking/commands/tracking.js +140 -0
- package/dist/modules/shipment_tracking/commands/tracking.js.map +7 -0
- package/dist/modules/shipment_tracking/commands/webhooks.js +115 -0
- package/dist/modules/shipment_tracking/commands/webhooks.js.map +7 -0
- package/dist/modules/shipment_tracking/components/CombinedTimestampCell.js +168 -0
- package/dist/modules/shipment_tracking/components/CombinedTimestampCell.js.map +7 -0
- package/dist/modules/shipment_tracking/components/FacilityLocationInput.js +202 -0
- package/dist/modules/shipment_tracking/components/FacilityLocationInput.js.map +7 -0
- package/dist/modules/shipment_tracking/components/LocationOverrideDrawer.js +501 -0
- package/dist/modules/shipment_tracking/components/LocationOverrideDrawer.js.map +7 -0
- package/dist/modules/shipment_tracking/components/ShipmentDetailsDrawer.js +818 -0
- package/dist/modules/shipment_tracking/components/ShipmentDetailsDrawer.js.map +7 -0
- package/dist/modules/shipment_tracking/components/ShipmentDrawer.js +404 -0
- package/dist/modules/shipment_tracking/components/ShipmentDrawer.js.map +7 -0
- package/dist/modules/shipment_tracking/components/ShipsGoConfigSection.js +200 -0
- package/dist/modules/shipment_tracking/components/ShipsGoConfigSection.js.map +7 -0
- package/dist/modules/shipment_tracking/components/TimestampCell.js +108 -0
- package/dist/modules/shipment_tracking/components/TimestampCell.js.map +7 -0
- package/dist/modules/shipment_tracking/components/TrackingJobDrawer.js +343 -0
- package/dist/modules/shipment_tracking/components/TrackingJobDrawer.js.map +7 -0
- package/dist/modules/shipment_tracking/components/VesselTrackingMap.js +496 -0
- package/dist/modules/shipment_tracking/components/VesselTrackingMap.js.map +7 -0
- package/dist/modules/shipment_tracking/components/WebhookDrawer.js +332 -0
- package/dist/modules/shipment_tracking/components/WebhookDrawer.js.map +7 -0
- package/dist/modules/shipment_tracking/data/entities.js +686 -0
- package/dist/modules/shipment_tracking/data/entities.js.map +7 -0
- package/dist/modules/shipment_tracking/data/validators.js +434 -0
- package/dist/modules/shipment_tracking/data/validators.js.map +7 -0
- package/dist/modules/shipment_tracking/di.js +60 -0
- package/dist/modules/shipment_tracking/di.js.map +7 -0
- package/dist/modules/shipment_tracking/encryption.js +12 -0
- package/dist/modules/shipment_tracking/encryption.js.map +7 -0
- package/dist/modules/shipment_tracking/events.js +87 -0
- package/dist/modules/shipment_tracking/events.js.map +7 -0
- package/dist/modules/shipment_tracking/hooks/useVesselTracking.js +137 -0
- package/dist/modules/shipment_tracking/hooks/useVesselTracking.js.map +7 -0
- package/dist/modules/shipment_tracking/i18n/de.json +327 -0
- package/dist/modules/shipment_tracking/i18n/en.json +327 -0
- package/dist/modules/shipment_tracking/i18n/es.json +327 -0
- package/dist/modules/shipment_tracking/i18n/pl.json +327 -0
- package/dist/modules/shipment_tracking/index.js +15 -0
- package/dist/modules/shipment_tracking/index.js.map +7 -0
- package/dist/modules/shipment_tracking/lib/adapters/cma-cgm.js +66 -0
- package/dist/modules/shipment_tracking/lib/adapters/cma-cgm.js.map +7 -0
- package/dist/modules/shipment_tracking/lib/adapters/cosco-types.js +1 -0
- package/dist/modules/shipment_tracking/lib/adapters/cosco-types.js.map +7 -0
- package/dist/modules/shipment_tracking/lib/adapters/cosco.js +236 -0
- package/dist/modules/shipment_tracking/lib/adapters/cosco.js.map +7 -0
- package/dist/modules/shipment_tracking/lib/adapters/evergreen.js +87 -0
- package/dist/modules/shipment_tracking/lib/adapters/evergreen.js.map +7 -0
- package/dist/modules/shipment_tracking/lib/adapters/hapag-lloyd.js +68 -0
- package/dist/modules/shipment_tracking/lib/adapters/hapag-lloyd.js.map +7 -0
- package/dist/modules/shipment_tracking/lib/adapters/index.js +20 -0
- package/dist/modules/shipment_tracking/lib/adapters/index.js.map +7 -0
- package/dist/modules/shipment_tracking/lib/adapters/maersk.js +84 -0
- package/dist/modules/shipment_tracking/lib/adapters/maersk.js.map +7 -0
- package/dist/modules/shipment_tracking/lib/adapters/msc.js +170 -0
- package/dist/modules/shipment_tracking/lib/adapters/msc.js.map +7 -0
- package/dist/modules/shipment_tracking/lib/adapters/zim.js +85 -0
- package/dist/modules/shipment_tracking/lib/adapters/zim.js.map +7 -0
- package/dist/modules/shipment_tracking/lib/audit-helpers.js +20 -0
- package/dist/modules/shipment_tracking/lib/audit-helpers.js.map +7 -0
- package/dist/modules/shipment_tracking/lib/auth/base64url.js +8 -0
- package/dist/modules/shipment_tracking/lib/auth/base64url.js.map +7 -0
- package/dist/modules/shipment_tracking/lib/auth/oauth-client.js +38 -0
- package/dist/modules/shipment_tracking/lib/auth/oauth-client.js.map +7 -0
- package/dist/modules/shipment_tracking/lib/background.js +15 -0
- package/dist/modules/shipment_tracking/lib/background.js.map +7 -0
- package/dist/modules/shipment_tracking/lib/bic-api-client.js +106 -0
- package/dist/modules/shipment_tracking/lib/bic-api-client.js.map +7 -0
- package/dist/modules/shipment_tracking/lib/carrier-adapter.js +17 -0
- package/dist/modules/shipment_tracking/lib/carrier-adapter.js.map +7 -0
- package/dist/modules/shipment_tracking/lib/current-vessel.js +149 -0
- package/dist/modules/shipment_tracking/lib/current-vessel.js.map +7 -0
- package/dist/modules/shipment_tracking/lib/dcsa-event-mapping.js +124 -0
- package/dist/modules/shipment_tracking/lib/dcsa-event-mapping.js.map +7 -0
- package/dist/modules/shipment_tracking/lib/dcsa-event-parser.js +112 -0
- package/dist/modules/shipment_tracking/lib/dcsa-event-parser.js.map +7 -0
- package/dist/modules/shipment_tracking/lib/dcsa-params.js +16 -0
- package/dist/modules/shipment_tracking/lib/dcsa-params.js.map +7 -0
- package/dist/modules/shipment_tracking/lib/empty-return.js +48 -0
- package/dist/modules/shipment_tracking/lib/empty-return.js.map +7 -0
- package/dist/modules/shipment_tracking/lib/location-overrides.js +85 -0
- package/dist/modules/shipment_tracking/lib/location-overrides.js.map +7 -0
- package/dist/modules/shipment_tracking/lib/location-types.js +59 -0
- package/dist/modules/shipment_tracking/lib/location-types.js.map +7 -0
- package/dist/modules/shipment_tracking/lib/logger.js +113 -0
- package/dist/modules/shipment_tracking/lib/logger.js.map +7 -0
- package/dist/modules/shipment_tracking/lib/poi-event-processor.js +183 -0
- package/dist/modules/shipment_tracking/lib/poi-event-processor.js.map +7 -0
- package/dist/modules/shipment_tracking/lib/poi-nats-config.js +52 -0
- package/dist/modules/shipment_tracking/lib/poi-nats-config.js.map +7 -0
- package/dist/modules/shipment_tracking/lib/poi-types.js +43 -0
- package/dist/modules/shipment_tracking/lib/poi-types.js.map +7 -0
- package/dist/modules/shipment_tracking/lib/rate-limiter.js +31 -0
- package/dist/modules/shipment_tracking/lib/rate-limiter.js.map +7 -0
- package/dist/modules/shipment_tracking/lib/route-extraction.js +187 -0
- package/dist/modules/shipment_tracking/lib/route-extraction.js.map +7 -0
- package/dist/modules/shipment_tracking/lib/route-inference.js +106 -0
- package/dist/modules/shipment_tracking/lib/route-inference.js.map +7 -0
- package/dist/modules/shipment_tracking/lib/schedule-generator.js +63 -0
- package/dist/modules/shipment_tracking/lib/schedule-generator.js.map +7 -0
- package/dist/modules/shipment_tracking/lib/shipsgo-client.js +143 -0
- package/dist/modules/shipment_tracking/lib/shipsgo-client.js.map +7 -0
- package/dist/modules/shipment_tracking/lib/shipsgo-mapper.js +204 -0
- package/dist/modules/shipment_tracking/lib/shipsgo-mapper.js.map +7 -0
- package/dist/modules/shipment_tracking/lib/status-machine.js +131 -0
- package/dist/modules/shipment_tracking/lib/status-machine.js.map +7 -0
- package/dist/modules/shipment_tracking/lib/time-extraction.js +41 -0
- package/dist/modules/shipment_tracking/lib/time-extraction.js.map +7 -0
- package/dist/modules/shipment_tracking/lib/timestamp-utils.js +100 -0
- package/dist/modules/shipment_tracking/lib/timestamp-utils.js.map +7 -0
- package/dist/modules/shipment_tracking/lib/vessel-api.js +111 -0
- package/dist/modules/shipment_tracking/lib/vessel-api.js.map +7 -0
- package/dist/modules/shipment_tracking/lib/vessel-cache.js +50 -0
- package/dist/modules/shipment_tracking/lib/vessel-cache.js.map +7 -0
- package/dist/modules/shipment_tracking/lib/vessel-extraction.js +13 -0
- package/dist/modules/shipment_tracking/lib/vessel-extraction.js.map +7 -0
- package/dist/modules/shipment_tracking/lib/webhook-dispatcher.js +62 -0
- package/dist/modules/shipment_tracking/lib/webhook-dispatcher.js.map +7 -0
- package/dist/modules/shipment_tracking/migrations/Migration20260422161208_shipment_tracking.js +48 -0
- package/dist/modules/shipment_tracking/migrations/Migration20260422161208_shipment_tracking.js.map +7 -0
- package/dist/modules/shipment_tracking/migrations/Migration20260529120000_shipment_tracking_poi_region_names.js +15 -0
- package/dist/modules/shipment_tracking/migrations/Migration20260529120000_shipment_tracking_poi_region_names.js.map +7 -0
- package/dist/modules/shipment_tracking/migrations/Migration20260821120000_shipment_tracking_shipsgo.js +47 -0
- package/dist/modules/shipment_tracking/migrations/Migration20260821120000_shipment_tracking_shipsgo.js.map +7 -0
- package/dist/modules/shipment_tracking/notifications.js +145 -0
- package/dist/modules/shipment_tracking/notifications.js.map +7 -0
- package/dist/modules/shipment_tracking/services/carrierRegistry.js +24 -0
- package/dist/modules/shipment_tracking/services/carrierRegistry.js.map +7 -0
- package/dist/modules/shipment_tracking/services/poiNatsService.js +397 -0
- package/dist/modules/shipment_tracking/services/poiNatsService.js.map +7 -0
- package/dist/modules/shipment_tracking/services/shipsGoProvider.js +163 -0
- package/dist/modules/shipment_tracking/services/shipsGoProvider.js.map +7 -0
- package/dist/modules/shipment_tracking/services/trackingService.js +1283 -0
- package/dist/modules/shipment_tracking/services/trackingService.js.map +7 -0
- package/dist/modules/shipment_tracking/services/webhookService.js +263 -0
- package/dist/modules/shipment_tracking/services/webhookService.js.map +7 -0
- package/dist/modules/shipment_tracking/setup.js +72 -0
- package/dist/modules/shipment_tracking/setup.js.map +7 -0
- package/dist/modules/shipment_tracking/subscribers/cargo-event-created.js +60 -0
- package/dist/modules/shipment_tracking/subscribers/cargo-event-created.js.map +7 -0
- package/dist/modules/shipment_tracking/subscribers/dcsa-event-webhook-dispatch.js +58 -0
- package/dist/modules/shipment_tracking/subscribers/dcsa-event-webhook-dispatch.js.map +7 -0
- package/dist/modules/shipment_tracking/subscribers/poi-event-notification.js +82 -0
- package/dist/modules/shipment_tracking/subscribers/poi-event-notification.js.map +7 -0
- package/dist/modules/shipment_tracking/subscribers/poi-event-webhook-dispatch.js +53 -0
- package/dist/modules/shipment_tracking/subscribers/poi-event-webhook-dispatch.js.map +7 -0
- package/dist/modules/shipment_tracking/subscribers/shipment-status-changed.js +28 -0
- package/dist/modules/shipment_tracking/subscribers/shipment-status-changed.js.map +7 -0
- package/dist/modules/shipment_tracking/subscribers/terminal-event-ingest.js +67 -0
- package/dist/modules/shipment_tracking/subscribers/terminal-event-ingest.js.map +7 -0
- package/dist/modules/shipment_tracking/subscribers/tracking-job-initial-poll.js +30 -0
- package/dist/modules/shipment_tracking/subscribers/tracking-job-initial-poll.js.map +7 -0
- package/dist/modules/shipment_tracking/subscribers/tracking-job-webhook-dispatch.js +19 -0
- package/dist/modules/shipment_tracking/subscribers/tracking-job-webhook-dispatch.js.map +7 -0
- package/dist/modules/shipment_tracking/tables/index.js +6 -0
- package/dist/modules/shipment_tracking/tables/index.js.map +7 -0
- package/dist/modules/shipment_tracking/tables/tracking_job/table.client.js +284 -0
- package/dist/modules/shipment_tracking/tables/tracking_job/table.client.js.map +7 -0
- package/dist/modules/shipment_tracking/tables/tracking_job/table.js +36 -0
- package/dist/modules/shipment_tracking/tables/tracking_job/table.js.map +7 -0
- package/dist/modules/shipment_tracking/widgets/dashboard/ships-map/config.js +25 -0
- package/dist/modules/shipment_tracking/widgets/dashboard/ships-map/config.js.map +7 -0
- package/dist/modules/shipment_tracking/widgets/dashboard/ships-map/widget.client.js +355 -0
- package/dist/modules/shipment_tracking/widgets/dashboard/ships-map/widget.client.js.map +7 -0
- package/dist/modules/shipment_tracking/widgets/dashboard/ships-map/widget.js +26 -0
- package/dist/modules/shipment_tracking/widgets/dashboard/ships-map/widget.js.map +7 -0
- package/dist/types/assets.d.js +1 -0
- package/dist/types/assets.d.js.map +7 -0
- package/generated/entities/bic_config/index.ts +20 -0
- package/generated/entities/carrier_config/index.ts +23 -0
- package/generated/entities/location_override/index.ts +26 -0
- package/generated/entities/shipment/index.ts +46 -0
- package/generated/entities/ships_go_config/index.ts +25 -0
- package/generated/entities/tracking_event/index.ts +60 -0
- package/generated/entities/tracking_job/index.ts +33 -0
- package/generated/entities/webhook/index.ts +22 -0
- package/generated/entities/webhook_delivery/index.ts +22 -0
- package/generated/entities.ids.generated.ts +47 -0
- package/package.json +81 -0
- package/src/index.ts +39 -0
- package/src/modules/shipment_tracking/__integration__/TC-TRACK-410-shipsgo-config-api.spec.ts +133 -0
- package/src/modules/shipment_tracking/__integration__/meta.ts +4 -0
- package/src/modules/shipment_tracking/__tests__/empty-return-stop.test.ts +231 -0
- package/src/modules/shipment_tracking/__tests__/fixtures/hapag-lloyd-transship-container.json +702 -0
- package/src/modules/shipment_tracking/__tests__/fixtures/index.ts +434 -0
- package/src/modules/shipment_tracking/__tests__/fixtures/maersk-multi-transship-completed.json +1518 -0
- package/src/modules/shipment_tracking/__tests__/fixtures/maersk-transship-intransit.json +558 -0
- package/src/modules/shipment_tracking/__tests__/fixtures/msc-direct.json +222 -0
- package/src/modules/shipment_tracking/__tests__/fixtures/msc-multi-transship-completed.json +974 -0
- package/src/modules/shipment_tracking/__tests__/fixtures/msc-multi.json +4846 -0
- package/src/modules/shipment_tracking/__tests__/fixtures/msc-transship.json +409 -0
- package/src/modules/shipment_tracking/__tests__/fixtures/poi-events.json +240 -0
- package/src/modules/shipment_tracking/__tests__/fixtures/synthetic/index.ts +138 -0
- package/src/modules/shipment_tracking/__tests__/fixtures/synthetic-eta-updates.json +288 -0
- package/src/modules/shipment_tracking/__tests__/fixtures/synthetic-route-inference.json +201 -0
- package/src/modules/shipment_tracking/__tests__/fixtures/synthetic-voyage-progression.json +410 -0
- package/src/modules/shipment_tracking/__tests__/shipsgo-air-mapper.test.ts +157 -0
- package/src/modules/shipment_tracking/__tests__/shipsgo-client.test.ts +155 -0
- package/src/modules/shipment_tracking/__tests__/shipsgo-mapper.test.ts +201 -0
- package/src/modules/shipment_tracking/__tests__/shipsgo-poll.test.ts +357 -0
- package/src/modules/shipment_tracking/__tests__/shipsgo-provider.test.ts +364 -0
- package/src/modules/shipment_tracking/__tests__/trackingService.integration.test.ts +2248 -0
- package/src/modules/shipment_tracking/__tests__/webhookPayload.test.ts +151 -0
- package/src/modules/shipment_tracking/acl.ts +18 -0
- package/src/modules/shipment_tracking/api/bic-configs/route.ts +206 -0
- package/src/modules/shipment_tracking/api/bic-configs/test/route.ts +108 -0
- package/src/modules/shipment_tracking/api/cargo-events/route.ts +101 -0
- package/src/modules/shipment_tracking/api/carrier-configs/route.ts +142 -0
- package/src/modules/shipment_tracking/api/dashboard/ships-map/route.ts +246 -0
- package/src/modules/shipment_tracking/api/location-overrides/route.ts +185 -0
- package/src/modules/shipment_tracking/api/openapi.ts +28 -0
- package/src/modules/shipment_tracking/api/shipments/route.ts +197 -0
- package/src/modules/shipment_tracking/api/shipsgo-configs/route.ts +215 -0
- package/src/modules/shipment_tracking/api/tracking-jobs/route.ts +149 -0
- package/src/modules/shipment_tracking/api/tracking-jobs/sync/route.ts +116 -0
- package/src/modules/shipment_tracking/api/utils.ts +10 -0
- package/src/modules/shipment_tracking/api/webhooks/deliveries/route.ts +82 -0
- package/src/modules/shipment_tracking/api/webhooks/route.ts +138 -0
- package/src/modules/shipment_tracking/api/webhooks/test/route.ts +84 -0
- package/src/modules/shipment_tracking/assets/carriers/cma_cgm.png +0 -0
- package/src/modules/shipment_tracking/assets/carriers/cosco.png +0 -0
- package/src/modules/shipment_tracking/assets/carriers/evergreen.png +0 -0
- package/src/modules/shipment_tracking/assets/carriers/hapag_lloyd.png +0 -0
- package/src/modules/shipment_tracking/assets/carriers/maersk.png +0 -0
- package/src/modules/shipment_tracking/assets/carriers/msc.png +0 -0
- package/src/modules/shipment_tracking/assets/carriers/one.png +0 -0
- package/src/modules/shipment_tracking/assets/carriers/oocl.png +0 -0
- package/src/modules/shipment_tracking/assets/carriers/yang_ming.png +0 -0
- package/src/modules/shipment_tracking/assets/carriers/zim.png +0 -0
- package/src/modules/shipment_tracking/assets/index.ts +66 -0
- package/src/modules/shipment_tracking/backend/carrier-configs/page.meta.ts +16 -0
- package/src/modules/shipment_tracking/backend/carrier-configs/page.tsx +782 -0
- package/src/modules/shipment_tracking/backend/location-overrides/page.meta.ts +16 -0
- package/src/modules/shipment_tracking/backend/location-overrides/page.tsx +241 -0
- package/src/modules/shipment_tracking/backend/shipment-tracking/page.meta.ts +16 -0
- package/src/modules/shipment_tracking/backend/shipment-tracking/page.tsx +340 -0
- package/src/modules/shipment_tracking/backend/tracking-jobs/page.meta.ts +16 -0
- package/src/modules/shipment_tracking/backend/tracking-jobs/page.tsx +16 -0
- package/src/modules/shipment_tracking/backend/webhooks/page.meta.ts +16 -0
- package/src/modules/shipment_tracking/backend/webhooks/page.tsx +228 -0
- package/src/modules/shipment_tracking/ce.ts +48 -0
- package/src/modules/shipment_tracking/cli.ts +321 -0
- package/src/modules/shipment_tracking/commands/bic-configs.ts +94 -0
- package/src/modules/shipment_tracking/commands/carrier-configs.ts +89 -0
- package/src/modules/shipment_tracking/commands/index.ts +8 -0
- package/src/modules/shipment_tracking/commands/location-overrides.ts +119 -0
- package/src/modules/shipment_tracking/commands/shipments.ts +247 -0
- package/src/modules/shipment_tracking/commands/shipsgo-configs.ts +101 -0
- package/src/modules/shipment_tracking/commands/tracking-jobs.ts +158 -0
- package/src/modules/shipment_tracking/commands/tracking.ts +230 -0
- package/src/modules/shipment_tracking/commands/webhooks.ts +159 -0
- package/src/modules/shipment_tracking/components/CombinedTimestampCell.tsx +236 -0
- package/src/modules/shipment_tracking/components/FacilityLocationInput.tsx +235 -0
- package/src/modules/shipment_tracking/components/LocationOverrideDrawer.tsx +586 -0
- package/src/modules/shipment_tracking/components/ShipmentDetailsDrawer.tsx +1364 -0
- package/src/modules/shipment_tracking/components/ShipmentDrawer.tsx +498 -0
- package/src/modules/shipment_tracking/components/ShipsGoConfigSection.tsx +266 -0
- package/src/modules/shipment_tracking/components/TimestampCell.tsx +146 -0
- package/src/modules/shipment_tracking/components/TrackingJobDrawer.tsx +467 -0
- package/src/modules/shipment_tracking/components/VesselTrackingMap.tsx +761 -0
- package/src/modules/shipment_tracking/components/WebhookDrawer.tsx +434 -0
- package/src/modules/shipment_tracking/data/entities.ts +748 -0
- package/src/modules/shipment_tracking/data/validators.ts +523 -0
- package/src/modules/shipment_tracking/di.ts +73 -0
- package/src/modules/shipment_tracking/encryption.ts +17 -0
- package/src/modules/shipment_tracking/events.ts +122 -0
- package/src/modules/shipment_tracking/hooks/useVesselTracking.ts +297 -0
- package/src/modules/shipment_tracking/i18n/de.json +327 -0
- package/src/modules/shipment_tracking/i18n/en.json +327 -0
- package/src/modules/shipment_tracking/i18n/es.json +327 -0
- package/src/modules/shipment_tracking/i18n/pl.json +327 -0
- package/src/modules/shipment_tracking/index.ts +13 -0
- package/src/modules/shipment_tracking/lib/__tests__/dcsa-event-mapping.test.ts +385 -0
- package/src/modules/shipment_tracking/lib/__tests__/dcsa-event-parser.test.ts +398 -0
- package/src/modules/shipment_tracking/lib/__tests__/empty-return.test.ts +174 -0
- package/src/modules/shipment_tracking/lib/__tests__/poi-event-processor.test.ts +699 -0
- package/src/modules/shipment_tracking/lib/__tests__/route-inference.test.ts +402 -0
- package/src/modules/shipment_tracking/lib/__tests__/status-machine.test.ts +447 -0
- package/src/modules/shipment_tracking/lib/__tests__/time-extraction.test.ts +331 -0
- package/src/modules/shipment_tracking/lib/__tests__/timestamp-utils.test.ts +260 -0
- package/src/modules/shipment_tracking/lib/__tests__/vessel-api.test.ts +125 -0
- package/src/modules/shipment_tracking/lib/__tests__/vessel-extraction.test.ts +108 -0
- package/src/modules/shipment_tracking/lib/adapters/cma-cgm.ts +84 -0
- package/src/modules/shipment_tracking/lib/adapters/cosco-types.ts +145 -0
- package/src/modules/shipment_tracking/lib/adapters/cosco.ts +314 -0
- package/src/modules/shipment_tracking/lib/adapters/evergreen.ts +107 -0
- package/src/modules/shipment_tracking/lib/adapters/hapag-lloyd.ts +88 -0
- package/src/modules/shipment_tracking/lib/adapters/index.ts +18 -0
- package/src/modules/shipment_tracking/lib/adapters/maersk.ts +104 -0
- package/src/modules/shipment_tracking/lib/adapters/msc.ts +223 -0
- package/src/modules/shipment_tracking/lib/adapters/zim.ts +106 -0
- package/src/modules/shipment_tracking/lib/audit-helpers.ts +29 -0
- package/src/modules/shipment_tracking/lib/auth/base64url.ts +4 -0
- package/src/modules/shipment_tracking/lib/auth/oauth-client.ts +53 -0
- package/src/modules/shipment_tracking/lib/background.ts +24 -0
- package/src/modules/shipment_tracking/lib/bic-api-client.ts +199 -0
- package/src/modules/shipment_tracking/lib/carrier-adapter.ts +136 -0
- package/src/modules/shipment_tracking/lib/current-vessel.ts +274 -0
- package/src/modules/shipment_tracking/lib/dcsa-event-mapping.ts +202 -0
- package/src/modules/shipment_tracking/lib/dcsa-event-parser.ts +163 -0
- package/src/modules/shipment_tracking/lib/dcsa-params.ts +14 -0
- package/src/modules/shipment_tracking/lib/empty-return.ts +122 -0
- package/src/modules/shipment_tracking/lib/location-overrides.ts +150 -0
- package/src/modules/shipment_tracking/lib/location-types.ts +154 -0
- package/src/modules/shipment_tracking/lib/logger.ts +195 -0
- package/src/modules/shipment_tracking/lib/poi-event-processor.ts +302 -0
- package/src/modules/shipment_tracking/lib/poi-nats-config.ts +134 -0
- package/src/modules/shipment_tracking/lib/poi-types.ts +198 -0
- package/src/modules/shipment_tracking/lib/rate-limiter.ts +58 -0
- package/src/modules/shipment_tracking/lib/route-extraction.ts +439 -0
- package/src/modules/shipment_tracking/lib/route-inference.ts +238 -0
- package/src/modules/shipment_tracking/lib/schedule-generator.ts +92 -0
- package/src/modules/shipment_tracking/lib/shipsgo-client.ts +350 -0
- package/src/modules/shipment_tracking/lib/shipsgo-mapper.ts +296 -0
- package/src/modules/shipment_tracking/lib/status-machine.ts +230 -0
- package/src/modules/shipment_tracking/lib/time-extraction.ts +85 -0
- package/src/modules/shipment_tracking/lib/timestamp-utils.ts +244 -0
- package/src/modules/shipment_tracking/lib/vessel-api.ts +299 -0
- package/src/modules/shipment_tracking/lib/vessel-cache.ts +102 -0
- package/src/modules/shipment_tracking/lib/vessel-extraction.ts +39 -0
- package/src/modules/shipment_tracking/lib/webhook-dispatcher.ts +93 -0
- package/src/modules/shipment_tracking/migrations/.snapshot-open-mercato.json +2914 -0
- package/src/modules/shipment_tracking/migrations/Migration20260422161208_shipment_tracking.ts +60 -0
- package/src/modules/shipment_tracking/migrations/Migration20260529120000_shipment_tracking_poi_region_names.ts +22 -0
- package/src/modules/shipment_tracking/migrations/Migration20260821120000_shipment_tracking_shipsgo.ts +65 -0
- package/src/modules/shipment_tracking/notifications.ts +151 -0
- package/src/modules/shipment_tracking/services/carrierRegistry.ts +29 -0
- package/src/modules/shipment_tracking/services/poiNatsService.ts +526 -0
- package/src/modules/shipment_tracking/services/shipsGoProvider.ts +231 -0
- package/src/modules/shipment_tracking/services/trackingService.ts +1777 -0
- package/src/modules/shipment_tracking/services/webhookService.ts +347 -0
- package/src/modules/shipment_tracking/setup.ts +99 -0
- package/src/modules/shipment_tracking/subscribers/__tests__/terminal-event-ingest.test.ts +141 -0
- package/src/modules/shipment_tracking/subscribers/cargo-event-created.ts +115 -0
- package/src/modules/shipment_tracking/subscribers/dcsa-event-webhook-dispatch.ts +115 -0
- package/src/modules/shipment_tracking/subscribers/poi-event-notification.ts +144 -0
- package/src/modules/shipment_tracking/subscribers/poi-event-webhook-dispatch.ts +94 -0
- package/src/modules/shipment_tracking/subscribers/shipment-status-changed.ts +41 -0
- package/src/modules/shipment_tracking/subscribers/terminal-event-ingest.ts +109 -0
- package/src/modules/shipment_tracking/subscribers/tracking-job-initial-poll.ts +53 -0
- package/src/modules/shipment_tracking/subscribers/tracking-job-webhook-dispatch.ts +50 -0
- package/src/modules/shipment_tracking/tables/index.ts +4 -0
- package/src/modules/shipment_tracking/tables/tracking_job/table.client.tsx +337 -0
- package/src/modules/shipment_tracking/tables/tracking_job/table.ts +34 -0
- package/src/modules/shipment_tracking/widgets/dashboard/ships-map/config.ts +32 -0
- package/src/modules/shipment_tracking/widgets/dashboard/ships-map/widget.client.tsx +448 -0
- package/src/modules/shipment_tracking/widgets/dashboard/ships-map/widget.ts +25 -0
- package/src/types/assets.d.ts +5 -0
|
@@ -0,0 +1,60 @@
|
|
|
1
|
+
import { Migration } from '@mikro-orm/migrations';
|
|
2
|
+
|
|
3
|
+
export class Migration20260422161208_shipment_tracking extends Migration {
|
|
4
|
+
|
|
5
|
+
override async up(): Promise<void> {
|
|
6
|
+
this.addSql(`create table if not exists "shipment_tracking_bic_configs" ("id" uuid not null default gen_random_uuid(), "organization_id" uuid not null, "tenant_id" uuid not null, "is_enabled" boolean not null default false, "username" text not null, "password" text not null, "base_url" text not null default 'https://api.bic-code.org', "created_at" timestamptz not null default now(), "updated_at" timestamptz not null default now(), constraint "shipment_tracking_bic_configs_pkey" primary key ("id"));`);
|
|
7
|
+
this.addSql(`create index if not exists "st_bic_configs_org_tenant_idx" on "shipment_tracking_bic_configs" ("organization_id", "tenant_id");`);
|
|
8
|
+
this.addSql(`DO $$ BEGIN alter table "shipment_tracking_bic_configs" add constraint "st_bic_configs_scope_unique" unique ("organization_id", "tenant_id"); EXCEPTION WHEN duplicate_object THEN NULL; WHEN duplicate_table THEN NULL; END $$;`);
|
|
9
|
+
|
|
10
|
+
this.addSql(`create table if not exists "shipment_tracking_carrier_configs" ("id" uuid not null default gen_random_uuid(), "organization_id" uuid not null, "tenant_id" uuid not null, "carrier_code" text not null, "api_endpoint" text null, "auth_config" jsonb null, "rate_limit_requests" int not null default 60, "rate_limit_window_seconds" int not null default 60, "is_active" boolean not null default true, "created_at" timestamptz not null default now(), "updated_at" timestamptz not null default now(), "deleted_at" timestamptz null, constraint "shipment_tracking_carrier_configs_pkey" primary key ("id"));`);
|
|
11
|
+
this.addSql(`create index if not exists "st_carrier_configs_org_tenant_idx" on "shipment_tracking_carrier_configs" ("organization_id", "tenant_id");`);
|
|
12
|
+
this.addSql(`DO $$ BEGIN alter table "shipment_tracking_carrier_configs" add constraint "st_carrier_configs_code_uniq" unique ("organization_id", "tenant_id", "carrier_code"); EXCEPTION WHEN duplicate_object THEN NULL; WHEN duplicate_table THEN NULL; END $$;`);
|
|
13
|
+
|
|
14
|
+
this.addSql(`create table if not exists "shipment_tracking_location_overrides" ("id" uuid not null default gen_random_uuid(), "organization_id" uuid not null, "tenant_id" uuid not null, "carrier_code" text null, "unlocode" text not null, "facility_code" text not null, "facility_code_list_provider" text not null, "override_data" jsonb not null, "description" text null, "is_active" boolean not null default true, "created_at" timestamptz not null default now(), "updated_at" timestamptz not null default now(), "deleted_at" timestamptz null, "created_by_user_id" uuid null, "updated_by_user_id" uuid null, constraint "shipment_tracking_location_overrides_pkey" primary key ("id"));`);
|
|
15
|
+
this.addSql(`create index if not exists "st_location_overrides_lookup_idx" on "shipment_tracking_location_overrides" ("unlocode", "facility_code", "facility_code_list_provider");`);
|
|
16
|
+
this.addSql(`create index if not exists "st_location_overrides_org_tenant_idx" on "shipment_tracking_location_overrides" ("organization_id", "tenant_id");`);
|
|
17
|
+
this.addSql(`DO $$ BEGIN alter table "shipment_tracking_location_overrides" add constraint "st_location_overrides_match_uniq" unique ("organization_id", "tenant_id", "carrier_code", "unlocode", "facility_code", "facility_code_list_provider"); EXCEPTION WHEN duplicate_object THEN NULL; WHEN duplicate_table THEN NULL; END $$;`);
|
|
18
|
+
|
|
19
|
+
this.addSql(`create table if not exists "shipment_tracking_jobs" ("id" uuid not null default gen_random_uuid(), "organization_id" uuid not null, "tenant_id" uuid not null, "carrier_code" text not null, "reference_type" text not null, "reference_value" text not null, "origin_unlocode" text null, "destination_unlocode" text null, "status" text not null default 'active', "schedule" jsonb null, "next_poll_at" timestamptz null, "last_poll_at" timestamptz null, "retry_count" int not null default 0, "error_history" jsonb null, "created_at" timestamptz not null default now(), "updated_at" timestamptz not null default now(), "deleted_at" timestamptz null, constraint "shipment_tracking_jobs_pkey" primary key ("id"));`);
|
|
20
|
+
this.addSql(`create index if not exists "st_jobs_next_poll_idx" on "shipment_tracking_jobs" ("next_poll_at");`);
|
|
21
|
+
this.addSql(`create index if not exists "st_jobs_status_idx" on "shipment_tracking_jobs" ("status");`);
|
|
22
|
+
this.addSql(`create index if not exists "st_jobs_org_tenant_idx" on "shipment_tracking_jobs" ("organization_id", "tenant_id");`);
|
|
23
|
+
|
|
24
|
+
this.addSql(`create table if not exists "shipment_tracking_events" ("id" uuid not null default gen_random_uuid(), "organization_id" uuid not null, "tenant_id" uuid not null, "tracking_job_id" uuid not null, "source" text not null default 'dcsa', "source_event_id" text null, "event_type" text not null, "event_code" text not null, "event_classifier_code" text null, "event_date_time" timestamptz not null, "event_date_time_offset" text null, "description" text null, "raw_data" jsonb null, "equipment_reference" text null, "iso_equipment_code" text null, "empty_indicator_code" text null, "is_transshipment_move" boolean null, "location_name" text null, "location_unlocode" text null, "location_country" text null, "facility_code" text null, "facility_code_list_provider" text null, "facility_type_code" text null, "facility_address" text null, "latitude" real null, "longitude" real null, "transport_call_reference" text null, "mode_of_transport" text null, "vessel_name" text null, "vessel_imo" text null, "voyage_number" text null, "carrier_service_code" text null, "carrier_export_voyage_number" text null, "carrier_import_voyage_number" text null, "universal_service_reference" text null, "universal_export_voyage_reference" text null, "universal_import_voyage_reference" text null, "port_visit_reference" text null, "related_document_references" jsonb null, "event_created_date_time" timestamptz null, "retracted_event_id" text null, "publisher_name" text null, "publisher_role" text null, "delay_reason_code" text null, "change_remark" text null, "seals" jsonb null, "created_at" timestamptz not null default now(), constraint "shipment_tracking_events_pkey" primary key ("id"));`);
|
|
25
|
+
this.addSql(`create index if not exists "st_events_event_date_time_idx" on "shipment_tracking_events" ("event_date_time");`);
|
|
26
|
+
this.addSql(`create index if not exists "st_events_equipment_ref_idx" on "shipment_tracking_events" ("equipment_reference");`);
|
|
27
|
+
this.addSql(`create index if not exists "st_events_tracking_job_idx" on "shipment_tracking_events" ("tracking_job_id");`);
|
|
28
|
+
this.addSql(`create index if not exists "st_events_org_tenant_idx" on "shipment_tracking_events" ("organization_id", "tenant_id");`);
|
|
29
|
+
this.addSql(`DO $$ BEGIN alter table "shipment_tracking_events" add constraint "st_events_source_event_uniq" unique ("tracking_job_id", "source", "source_event_id"); EXCEPTION WHEN duplicate_object THEN NULL; WHEN duplicate_table THEN NULL; END $$;`);
|
|
30
|
+
|
|
31
|
+
this.addSql(`create table if not exists "shipment_tracking_shipments" ("id" uuid not null default gen_random_uuid(), "organization_id" uuid not null, "tenant_id" uuid not null, "status" text not null default 'PENDING', "carrier_code" text null, "container_number" text null, "iso_equipment_code" text null, "booking_number" text null, "bol_number" text null, "etd_timestamps" jsonb null, "eta_timestamps" jsonb null, "atd_timestamps" jsonb null, "ata_timestamps" jsonb null, "origin_location" jsonb null, "destination_location" jsonb null, "vessel_name" text null, "vessel_imo" text null, "voyage_number" text null, "event_count" int not null default 0, "last_event_at" timestamptz null, "extra" jsonb null, "route_stops" jsonb null, "cargo_events" jsonb null, "seals" jsonb null, "is_active" boolean not null default true, "created_at" timestamptz not null default now(), "updated_at" timestamptz not null default now(), "deleted_at" timestamptz null, "created_by_user_id" uuid null, "tracking_job_id" uuid null, constraint "shipment_tracking_shipments_pkey" primary key ("id"));`);
|
|
32
|
+
this.addSql(`create index if not exists "st_shipments_tracking_job_idx" on "shipment_tracking_shipments" ("tracking_job_id");`);
|
|
33
|
+
this.addSql(`create index if not exists "st_shipments_carrier_idx" on "shipment_tracking_shipments" ("carrier_code");`);
|
|
34
|
+
this.addSql(`create index if not exists "st_shipments_status_idx" on "shipment_tracking_shipments" ("status");`);
|
|
35
|
+
this.addSql(`create index if not exists "st_shipments_org_tenant_idx" on "shipment_tracking_shipments" ("organization_id", "tenant_id");`);
|
|
36
|
+
|
|
37
|
+
this.addSql(`create table if not exists "shipment_tracking_webhooks" ("id" uuid not null default gen_random_uuid(), "organization_id" uuid not null, "tenant_id" uuid not null, "url" text not null, "events_subscribed" jsonb not null, "hmac_secret" text null, "is_active" boolean not null default true, "created_at" timestamptz not null default now(), "updated_at" timestamptz not null default now(), "deleted_at" timestamptz null, constraint "shipment_tracking_webhooks_pkey" primary key ("id"));`);
|
|
38
|
+
this.addSql(`create index if not exists "st_webhooks_org_tenant_idx" on "shipment_tracking_webhooks" ("organization_id", "tenant_id");`);
|
|
39
|
+
|
|
40
|
+
this.addSql(`create table if not exists "shipment_tracking_webhook_deliveries" ("id" uuid not null default gen_random_uuid(), "webhook_id" uuid not null, "event_type" text not null, "status" text not null default 'pending', "retry_count" int not null default 0, "next_retry_at" timestamptz null, "payload" jsonb not null, "response_status" int null, "response_body" text null, "error_message" text null, "created_at" timestamptz not null default now(), constraint "shipment_tracking_webhook_deliveries_pkey" primary key ("id"));`);
|
|
41
|
+
this.addSql(`create index if not exists "st_webhook_deliveries_next_retry_idx" on "shipment_tracking_webhook_deliveries" ("next_retry_at");`);
|
|
42
|
+
this.addSql(`create index if not exists "st_webhook_deliveries_status_idx" on "shipment_tracking_webhook_deliveries" ("status");`);
|
|
43
|
+
this.addSql(`create index if not exists "st_webhook_deliveries_webhook_idx" on "shipment_tracking_webhook_deliveries" ("webhook_id");`);
|
|
44
|
+
|
|
45
|
+
this.addSql(`DO $$ BEGIN alter table "shipment_tracking_events" add constraint "shipment_tracking_events_tracking_job_id_foreign" foreign key ("tracking_job_id") references "shipment_tracking_jobs" ("id") on update cascade; EXCEPTION WHEN duplicate_object THEN NULL; WHEN duplicate_table THEN NULL; END $$;`);
|
|
46
|
+
|
|
47
|
+
this.addSql(`DO $$ BEGIN alter table "shipment_tracking_shipments" add constraint "shipment_tracking_shipments_tracking_job_id_foreign" foreign key ("tracking_job_id") references "shipment_tracking_jobs" ("id") on update cascade on delete set null; EXCEPTION WHEN duplicate_object THEN NULL; WHEN duplicate_table THEN NULL; END $$;`);
|
|
48
|
+
|
|
49
|
+
this.addSql(`DO $$ BEGIN alter table "shipment_tracking_webhook_deliveries" add constraint "shipment_tracking_webhook_deliveries_webhook_id_foreign" foreign key ("webhook_id") references "shipment_tracking_webhooks" ("id") on update cascade; EXCEPTION WHEN duplicate_object THEN NULL; WHEN duplicate_table THEN NULL; END $$;`);
|
|
50
|
+
}
|
|
51
|
+
|
|
52
|
+
override async down(): Promise<void> {
|
|
53
|
+
this.addSql(`alter table "shipment_tracking_events" drop constraint if exists "shipment_tracking_events_tracking_job_id_foreign";`);
|
|
54
|
+
|
|
55
|
+
this.addSql(`alter table "shipment_tracking_shipments" drop constraint if exists "shipment_tracking_shipments_tracking_job_id_foreign";`);
|
|
56
|
+
|
|
57
|
+
this.addSql(`alter table "shipment_tracking_webhook_deliveries" drop constraint if exists "shipment_tracking_webhook_deliveries_webhook_id_foreign";`);
|
|
58
|
+
}
|
|
59
|
+
|
|
60
|
+
}
|
|
@@ -0,0 +1,22 @@
|
|
|
1
|
+
import { Migration } from '@mikro-orm/migrations';
|
|
2
|
+
|
|
3
|
+
/**
|
|
4
|
+
* Additive: human-friendly region names for AIS POI events.
|
|
5
|
+
*
|
|
6
|
+
* The poi-proximity-detector now emits `regionNamePl` / `regionNameEn` alongside the raw
|
|
7
|
+
* POI code so the Journey Timeline can show e.g. "Morze Północne" instead of "N053W001-03738".
|
|
8
|
+
* Both columns are nullable (carrier/DCSA events and unnamed POIs leave them null).
|
|
9
|
+
*/
|
|
10
|
+
export class Migration20260529120000_shipment_tracking_poi_region_names extends Migration {
|
|
11
|
+
|
|
12
|
+
override async up(): Promise<void> {
|
|
13
|
+
this.addSql(`alter table "shipment_tracking_events" add column if not exists "region_name_pl" text null;`);
|
|
14
|
+
this.addSql(`alter table "shipment_tracking_events" add column if not exists "region_name_en" text null;`);
|
|
15
|
+
}
|
|
16
|
+
|
|
17
|
+
override async down(): Promise<void> {
|
|
18
|
+
this.addSql(`alter table "shipment_tracking_events" drop column if exists "region_name_pl";`);
|
|
19
|
+
this.addSql(`alter table "shipment_tracking_events" drop column if exists "region_name_en";`);
|
|
20
|
+
}
|
|
21
|
+
|
|
22
|
+
}
|
|
@@ -0,0 +1,65 @@
|
|
|
1
|
+
import { Migration } from '@mikro-orm/migrations';
|
|
2
|
+
|
|
3
|
+
/**
|
|
4
|
+
* ShipsGo fallback tracking (Phase 1 — ocean fallback + air groundwork).
|
|
5
|
+
*
|
|
6
|
+
* Additive only:
|
|
7
|
+
* - `shipment_tracking_shipsgo_configs`: per-tenant ShipsGo config (encrypted api_token).
|
|
8
|
+
* - `shipment_tracking_jobs`: `provider` ('carrier'|'shipsgo'), `mode` ('ocean'|'air'),
|
|
9
|
+
* `provider_shipment_id` (ShipsGo id, set on registration).
|
|
10
|
+
* - `shipment_tracking_shipments`: `mode` + air fields (awb/flight/airline), all nullable.
|
|
11
|
+
*
|
|
12
|
+
* Existing rows default to provider='carrier', mode='ocean' — no backfill needed.
|
|
13
|
+
*/
|
|
14
|
+
export class Migration20260821120000_shipment_tracking_shipsgo extends Migration {
|
|
15
|
+
|
|
16
|
+
override async up(): Promise<void> {
|
|
17
|
+
// ShipsGoConfig
|
|
18
|
+
this.addSql(`create table if not exists "shipment_tracking_shipsgo_configs" (
|
|
19
|
+
"id" uuid not null default gen_random_uuid(),
|
|
20
|
+
"organization_id" uuid not null,
|
|
21
|
+
"tenant_id" uuid not null,
|
|
22
|
+
"is_enabled" boolean not null default false,
|
|
23
|
+
"api_token" text not null,
|
|
24
|
+
"base_url" text not null default 'https://api.shipsgo.com/v2',
|
|
25
|
+
"ocean_enabled" boolean not null default true,
|
|
26
|
+
"air_enabled" boolean not null default true,
|
|
27
|
+
"rate_limit_requests" int not null default 60,
|
|
28
|
+
"rate_limit_window_seconds" int not null default 60,
|
|
29
|
+
"is_active" boolean not null default true,
|
|
30
|
+
"created_at" timestamptz not null default now(),
|
|
31
|
+
"updated_at" timestamptz not null default now(),
|
|
32
|
+
"deleted_at" timestamptz null,
|
|
33
|
+
constraint "shipment_tracking_shipsgo_configs_pkey" primary key ("id")
|
|
34
|
+
);`);
|
|
35
|
+
this.addSql(`create index if not exists "st_shipsgo_configs_org_tenant_idx" on "shipment_tracking_shipsgo_configs" ("organization_id", "tenant_id");`);
|
|
36
|
+
this.addSql(`create unique index if not exists "st_shipsgo_configs_scope_unique" on "shipment_tracking_shipsgo_configs" ("organization_id", "tenant_id");`);
|
|
37
|
+
|
|
38
|
+
// TrackingJob provider/mode
|
|
39
|
+
this.addSql(`alter table "shipment_tracking_jobs" add column if not exists "provider" text not null default 'carrier';`);
|
|
40
|
+
this.addSql(`alter table "shipment_tracking_jobs" add column if not exists "mode" text not null default 'ocean';`);
|
|
41
|
+
this.addSql(`alter table "shipment_tracking_jobs" add column if not exists "provider_shipment_id" text null;`);
|
|
42
|
+
|
|
43
|
+
// Shipment mode + air fields
|
|
44
|
+
this.addSql(`alter table "shipment_tracking_shipments" add column if not exists "mode" text not null default 'ocean';`);
|
|
45
|
+
this.addSql(`alter table "shipment_tracking_shipments" add column if not exists "awb_number" text null;`);
|
|
46
|
+
this.addSql(`alter table "shipment_tracking_shipments" add column if not exists "flight_number" text null;`);
|
|
47
|
+
this.addSql(`alter table "shipment_tracking_shipments" add column if not exists "airline_code" text null;`);
|
|
48
|
+
this.addSql(`alter table "shipment_tracking_shipments" add column if not exists "airline_name" text null;`);
|
|
49
|
+
}
|
|
50
|
+
|
|
51
|
+
override async down(): Promise<void> {
|
|
52
|
+
this.addSql(`alter table "shipment_tracking_shipments" drop column if exists "airline_name";`);
|
|
53
|
+
this.addSql(`alter table "shipment_tracking_shipments" drop column if exists "airline_code";`);
|
|
54
|
+
this.addSql(`alter table "shipment_tracking_shipments" drop column if exists "flight_number";`);
|
|
55
|
+
this.addSql(`alter table "shipment_tracking_shipments" drop column if exists "awb_number";`);
|
|
56
|
+
this.addSql(`alter table "shipment_tracking_shipments" drop column if exists "mode";`);
|
|
57
|
+
|
|
58
|
+
this.addSql(`alter table "shipment_tracking_jobs" drop column if exists "provider_shipment_id";`);
|
|
59
|
+
this.addSql(`alter table "shipment_tracking_jobs" drop column if exists "mode";`);
|
|
60
|
+
this.addSql(`alter table "shipment_tracking_jobs" drop column if exists "provider";`);
|
|
61
|
+
|
|
62
|
+
this.addSql(`drop table if exists "shipment_tracking_shipsgo_configs";`);
|
|
63
|
+
}
|
|
64
|
+
|
|
65
|
+
}
|
|
@@ -0,0 +1,151 @@
|
|
|
1
|
+
import type { NotificationTypeDefinition } from '@open-mercato/shared/modules/notifications/types'
|
|
2
|
+
|
|
3
|
+
/**
|
|
4
|
+
* Shipment Tracking Notification Types
|
|
5
|
+
*
|
|
6
|
+
* These are per-tracking-job notification types for POI proximity events.
|
|
7
|
+
* Using per-job events ensures only one notification per booking/BOL,
|
|
8
|
+
* regardless of how many containers are being tracked.
|
|
9
|
+
*/
|
|
10
|
+
export const notificationTypes: NotificationTypeDefinition[] = [
|
|
11
|
+
// ─── Tracking Job POI Port Events ──────────────────────────────
|
|
12
|
+
{
|
|
13
|
+
type: 'shipment_tracking.tracking_job.poi.port_arrival',
|
|
14
|
+
module: 'shipment_tracking',
|
|
15
|
+
titleKey: 'shipment_tracking.notifications.tracking_job.poi.port_arrival.title',
|
|
16
|
+
bodyKey: 'shipment_tracking.notifications.tracking_job.poi.port_arrival.body',
|
|
17
|
+
icon: 'anchor',
|
|
18
|
+
severity: 'success',
|
|
19
|
+
actions: [
|
|
20
|
+
{
|
|
21
|
+
id: 'view',
|
|
22
|
+
labelKey: 'common.view',
|
|
23
|
+
variant: 'outline',
|
|
24
|
+
href: '/backend/shipment-tracking?shipment={sourceEntityId}',
|
|
25
|
+
icon: 'external-link',
|
|
26
|
+
},
|
|
27
|
+
],
|
|
28
|
+
linkHref: '/backend/shipment-tracking?shipment={sourceEntityId}',
|
|
29
|
+
expiresAfterHours: 168, // 7 days
|
|
30
|
+
},
|
|
31
|
+
{
|
|
32
|
+
type: 'shipment_tracking.tracking_job.poi.port_proximity_arrival',
|
|
33
|
+
module: 'shipment_tracking',
|
|
34
|
+
titleKey: 'shipment_tracking.notifications.tracking_job.poi.port_proximity_arrival.title',
|
|
35
|
+
bodyKey: 'shipment_tracking.notifications.tracking_job.poi.port_proximity_arrival.body',
|
|
36
|
+
icon: 'navigation',
|
|
37
|
+
severity: 'info',
|
|
38
|
+
actions: [
|
|
39
|
+
{
|
|
40
|
+
id: 'view',
|
|
41
|
+
labelKey: 'common.view',
|
|
42
|
+
variant: 'outline',
|
|
43
|
+
href: '/backend/shipment-tracking?shipment={sourceEntityId}',
|
|
44
|
+
icon: 'external-link',
|
|
45
|
+
},
|
|
46
|
+
],
|
|
47
|
+
linkHref: '/backend/shipment-tracking?shipment={sourceEntityId}',
|
|
48
|
+
expiresAfterHours: 168,
|
|
49
|
+
},
|
|
50
|
+
{
|
|
51
|
+
type: 'shipment_tracking.tracking_job.poi.port_departure',
|
|
52
|
+
module: 'shipment_tracking',
|
|
53
|
+
titleKey: 'shipment_tracking.notifications.tracking_job.poi.port_departure.title',
|
|
54
|
+
bodyKey: 'shipment_tracking.notifications.tracking_job.poi.port_departure.body',
|
|
55
|
+
icon: 'ship',
|
|
56
|
+
severity: 'info',
|
|
57
|
+
actions: [
|
|
58
|
+
{
|
|
59
|
+
id: 'view',
|
|
60
|
+
labelKey: 'common.view',
|
|
61
|
+
variant: 'outline',
|
|
62
|
+
href: '/backend/shipment-tracking?shipment={sourceEntityId}',
|
|
63
|
+
icon: 'external-link',
|
|
64
|
+
},
|
|
65
|
+
],
|
|
66
|
+
linkHref: '/backend/shipment-tracking?shipment={sourceEntityId}',
|
|
67
|
+
expiresAfterHours: 168,
|
|
68
|
+
},
|
|
69
|
+
|
|
70
|
+
// ─── Tracking Job POI Terminal Events ──────────────────────────
|
|
71
|
+
{
|
|
72
|
+
type: 'shipment_tracking.tracking_job.poi.terminal_arrival',
|
|
73
|
+
module: 'shipment_tracking',
|
|
74
|
+
titleKey: 'shipment_tracking.notifications.tracking_job.poi.terminal_arrival.title',
|
|
75
|
+
bodyKey: 'shipment_tracking.notifications.tracking_job.poi.terminal_arrival.body',
|
|
76
|
+
icon: 'container',
|
|
77
|
+
severity: 'success',
|
|
78
|
+
actions: [
|
|
79
|
+
{
|
|
80
|
+
id: 'view',
|
|
81
|
+
labelKey: 'common.view',
|
|
82
|
+
variant: 'outline',
|
|
83
|
+
href: '/backend/shipment-tracking?shipment={sourceEntityId}',
|
|
84
|
+
icon: 'external-link',
|
|
85
|
+
},
|
|
86
|
+
],
|
|
87
|
+
linkHref: '/backend/shipment-tracking?shipment={sourceEntityId}',
|
|
88
|
+
expiresAfterHours: 168,
|
|
89
|
+
},
|
|
90
|
+
{
|
|
91
|
+
type: 'shipment_tracking.tracking_job.poi.terminal_proximity_arrival',
|
|
92
|
+
module: 'shipment_tracking',
|
|
93
|
+
titleKey: 'shipment_tracking.notifications.tracking_job.poi.terminal_proximity_arrival.title',
|
|
94
|
+
bodyKey: 'shipment_tracking.notifications.tracking_job.poi.terminal_proximity_arrival.body',
|
|
95
|
+
icon: 'navigation',
|
|
96
|
+
severity: 'info',
|
|
97
|
+
actions: [
|
|
98
|
+
{
|
|
99
|
+
id: 'view',
|
|
100
|
+
labelKey: 'common.view',
|
|
101
|
+
variant: 'outline',
|
|
102
|
+
href: '/backend/shipment-tracking?shipment={sourceEntityId}',
|
|
103
|
+
icon: 'external-link',
|
|
104
|
+
},
|
|
105
|
+
],
|
|
106
|
+
linkHref: '/backend/shipment-tracking?shipment={sourceEntityId}',
|
|
107
|
+
expiresAfterHours: 168,
|
|
108
|
+
},
|
|
109
|
+
{
|
|
110
|
+
type: 'shipment_tracking.tracking_job.poi.terminal_departure',
|
|
111
|
+
module: 'shipment_tracking',
|
|
112
|
+
titleKey: 'shipment_tracking.notifications.tracking_job.poi.terminal_departure.title',
|
|
113
|
+
bodyKey: 'shipment_tracking.notifications.tracking_job.poi.terminal_departure.body',
|
|
114
|
+
icon: 'ship',
|
|
115
|
+
severity: 'info',
|
|
116
|
+
actions: [
|
|
117
|
+
{
|
|
118
|
+
id: 'view',
|
|
119
|
+
labelKey: 'common.view',
|
|
120
|
+
variant: 'outline',
|
|
121
|
+
href: '/backend/shipment-tracking?shipment={sourceEntityId}',
|
|
122
|
+
icon: 'external-link',
|
|
123
|
+
},
|
|
124
|
+
],
|
|
125
|
+
linkHref: '/backend/shipment-tracking?shipment={sourceEntityId}',
|
|
126
|
+
expiresAfterHours: 168,
|
|
127
|
+
},
|
|
128
|
+
|
|
129
|
+
// ─── Tracking Job POI Waypoint Events ──────────────────────────
|
|
130
|
+
{
|
|
131
|
+
type: 'shipment_tracking.tracking_job.poi.waypoint_reached',
|
|
132
|
+
module: 'shipment_tracking',
|
|
133
|
+
titleKey: 'shipment_tracking.notifications.tracking_job.poi.waypoint_reached.title',
|
|
134
|
+
bodyKey: 'shipment_tracking.notifications.tracking_job.poi.waypoint_reached.body',
|
|
135
|
+
icon: 'map-pin',
|
|
136
|
+
severity: 'info',
|
|
137
|
+
actions: [
|
|
138
|
+
{
|
|
139
|
+
id: 'view',
|
|
140
|
+
labelKey: 'common.view',
|
|
141
|
+
variant: 'outline',
|
|
142
|
+
href: '/backend/shipment-tracking?shipment={sourceEntityId}',
|
|
143
|
+
icon: 'external-link',
|
|
144
|
+
},
|
|
145
|
+
],
|
|
146
|
+
linkHref: '/backend/shipment-tracking?shipment={sourceEntityId}',
|
|
147
|
+
expiresAfterHours: 168,
|
|
148
|
+
},
|
|
149
|
+
]
|
|
150
|
+
|
|
151
|
+
export default notificationTypes
|
|
@@ -0,0 +1,29 @@
|
|
|
1
|
+
import type { CarrierAdapter } from '../lib/carrier-adapter'
|
|
2
|
+
|
|
3
|
+
/**
|
|
4
|
+
* Singleton registry for carrier adapters.
|
|
5
|
+
* Modules register concrete adapters at startup via DI.
|
|
6
|
+
*/
|
|
7
|
+
export class CarrierRegistryService {
|
|
8
|
+
private adapters = new Map<string, CarrierAdapter>()
|
|
9
|
+
|
|
10
|
+
register(adapter: CarrierAdapter): void {
|
|
11
|
+
this.adapters.set(adapter.carrierCode.toLowerCase(), adapter)
|
|
12
|
+
}
|
|
13
|
+
|
|
14
|
+
get(carrierCode: string): CarrierAdapter | undefined {
|
|
15
|
+
return this.adapters.get(carrierCode.toLowerCase())
|
|
16
|
+
}
|
|
17
|
+
|
|
18
|
+
list(): CarrierAdapter[] {
|
|
19
|
+
return Array.from(this.adapters.values())
|
|
20
|
+
}
|
|
21
|
+
|
|
22
|
+
has(carrierCode: string): boolean {
|
|
23
|
+
return this.adapters.has(carrierCode.toLowerCase())
|
|
24
|
+
}
|
|
25
|
+
|
|
26
|
+
names(): string[] {
|
|
27
|
+
return Array.from(this.adapters.keys())
|
|
28
|
+
}
|
|
29
|
+
}
|