Skip to content

Conversation

@danh91
Copy link
Member

@danh91 danh91 commented Jan 31, 2026

Karrio 2026.1.5

Changes

Feat

  • feat: add carrier-agnostic POST /v1/pickups endpoint with carrier_code and options.connection_id
  • feat: add pickup status tracking with lifecycle events (scheduled, picked_up, cancelled, closed)
  • feat(core): add pickup status filtering and carrier-agnostic scheduling support
  • feat(dashboard): update pickup scheduling to use new carrier-agnostic API
  • feat(dashboard): update pickup scheduling dialog and hooks for new API
  • feat(dashboard): add pickup detail sheet with activity timeline, tracking records, and related shipments

Test

  • test: extend pickup API test coverage for status transitions and lifecycle events

Chore

  • chore: update API schemas and generated types for pickup enhancements

Docs

  • docs: add Pickup API Modernization PRD
  • docs: prepare PRD for carrier_name/carrier_id future refactoring
  • docs: rename carrier connection architecture document

Ansh-Dev-Nagar and others added 13 commits January 25, 2026 21:41
Design document for deprecating POST /v1/pickups/{carrier_name}/schedule
in favor of POST /v1/pickups with carrier_code and options.connection_id
in the request body, matching the shipments API pattern.
Add POST handler to PickupList view so GET /v1/pickups lists pickups and
POST /v1/pickups creates them, matching the shipments API pattern.

Backend changes:
- Add carrier_code field to PickupRequest serializer
- Resolve carrier from body fields (carrier_code, options.connection_id)
  when no URL-based carrier_filter is provided
- Exclude carrier_code from gateway payload to avoid SDK errors
- Mark legacy POST /v1/pickups/{carrier_name}/schedule as deprecated
  with Deprecation and Link headers

Tests:
- Add TestPickupScheduleNewAPI: carrier_code, connection_id, standalone,
  validation
- Add TestLegacyEndpointDeprecation: deprecation headers, backward compat
- Update response fixtures to include carrier_code field
… API

- Change schedulePickup mutation from generated REST client with
  carrierName URL param to direct axios POST /v1/pickups
- Add connection_id to form state and use it as carrier dropdown value
  to support multiple connections per carrier
- Send carrier_code and options.connection_id in request payload
@vercel
Copy link

vercel bot commented Jan 31, 2026

The latest updates on your projects. Learn more about Vercel for GitHub.

Project Deployment Actions Updated (UTC)
karrio-web Ready Ready Preview, Comment Feb 4, 2026 6:38am

Request Review

Add pickup status field (scheduled/picked_up/cancelled/closed) to the
pickup model with a database migration. Implement pickup lifecycle event
signals (pickup_scheduled, pickup_cancelled, pickup_closed) and
background tasks. Update GraphQL schema to expose status field on pickup
queries. Add status column and conditional cancel action to pickups table.
…ng support

Add status filter for pickup list queries. Update gateway to support
carrier-agnostic pickup scheduling via carrier_code. Extend core
serializers with pickup status field support and filter abstractions.
Regenerate OpenAPI schema, GraphQL introspection schemas, and REST
client types reflecting pickup status field, carrier-agnostic scheduling
endpoint, pickup lifecycle events, and updated pickup API documentation.
Update schedule pickup dialog for carrier-agnostic API. Adjust pickup
hooks to work with the new POST /v1/pickups endpoint.
Add pickup preview sheet (side panel) matching the shipment detail sheet
pattern. Includes pickup detail view with header, status badge, details
sidebar (carrier, confirmation, dates, time window, location), pickup
address, parcels, related shipments table with tracker status, tracking
records from related shipments, metadata viewer, and activity timeline
with API logs and system events. Expand GET_PICKUP GraphQL query to
include tracker data on related shipments. Add View details menu option
and clickable table rows on the pickups list page.
Add tests for carrier-agnostic pickup scheduling, status transitions,
and pickup lifecycle event handling.
Rename CARRIER_CONNECTION_ARCHITECTURE.md to use hyphenated casing
(CARRIER-CONNECTION-ARCHITECTURE.md) for consistency.
…se-parsing

fix(fedex):TypeError in pickup cancel response parsing when output is None
Add a dedicated tracker detail page at /trackers/[id] with tracking
events timeline, shipment link, metadata editor, and ActivityTimeline
for API logs, traces, and system events. Augment the tracker preview
sheet with a condensed activity section and "View all" navigation.

- Create TrackerComponent with entity-based log/event filtering
- Add stacked layout mode to ActivityTimeline for inline detail viewing
- Add condensed prop to ActivityTimeline for compact rendering
- Fix infinite re-render in trackers list (searchParams object ref)
- Fix infinite re-render in trackers filter (variables object ref)
- Fix preview sheet showing unrelated logs (hooks initialized before
  tracker selection)
…ents

Stabilize useEffect dependencies across all list pages and filter
components to prevent maximum update depth errors. Replace object
reference dependencies with stable string representations.

- Use searchParams.toString() instead of searchParams object in
  Shipments, Pickups, Orders, Manifests, and Workflows list pages
- Use JSON.stringify(variables) instead of variables object in
  shipments-filter and orders-filter components
Replace jinja2.Template() with jinja2.sandbox.SandboxedEnvironment
in the document generator and workflow automation engine to prevent
Server-Side Template Injection allowing authenticated users to
execute arbitrary Python code via crafted document templates.

Reported by: i0.rs (Georgios Tsimpidas, Edward Passenidis)
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

2 participants