Skip to content

Commit ad55861

Browse files
committed
release: 2026.1.2
1 parent 012d524 commit ad55861

File tree

54 files changed

+527
-1143
lines changed

Some content is hidden

Large Commits have some content hidden by default. Use the searchbox below for content that may be hidden.

54 files changed

+527
-1143
lines changed

CHANGELOG.md

Lines changed: 36 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1,3 +1,39 @@
1+
# Karrio 2026.1.2
2+
3+
## Changes
4+
5+
### Feat
6+
7+
- feat(asendia): add Asendia carrier integration with shipping, tracking, manifest support and multi-package handling
8+
- feat(spring): add Spring carrier integration with shipping, tracking, cancellation and CSV-based rating
9+
- feat: add event injection API for programmatic tracking event creation
10+
- feat: introduce products GraphQL API with JSONField optimization for better query performance
11+
- feat: add options meta and document category unified enum
12+
- feat: add carrier icons for new integrations
13+
- feat: improve address, parcel and products templates with database structure optimization
14+
15+
### Fix
16+
17+
- fix(dhl_parcel_de): correct addressHouse parsing
18+
- fix(fedex): update signed_by fallback for B2B shipments
19+
- fix(fedex): OC status should not be considered picked up
20+
- fix(fedex): update TrackingStatus to new format
21+
- fix(ups): correct shipment_origin values and add pickup date to trackers
22+
- fix(frontend): add GLS to carrier images
23+
24+
### Refactor
25+
26+
- refactor: migrate order details page to shadcn components with sidebar layout
27+
- refactor: connections management for better data normalization and optimized reads
28+
- refactor: enhance tracking events with TrackingIncidentReason
29+
30+
### Chore
31+
32+
- chore: QA improvements and migration integrity fixes
33+
- test: add comprehensive tracking tests
34+
35+
---
36+
137
# Karrio 2026.1.1
238

339
## Changes
Lines changed: 3 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,3 @@
1+
import { dynamicMetadata } from "@karrio/core/components/metadata";
2+
export { default } from "@karrio/admin/modules/carriers";
3+
export const generateMetadata = dynamicMetadata("Carriers Network");
Lines changed: 29 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,29 @@
1+
import { auth } from "@karrio/core/context/auth";
2+
import {
3+
loadMetadata,
4+
loadUserData,
5+
getCurrentDomain,
6+
requireAuthentication,
7+
} from "@karrio/core/context/main";
8+
import { Metadata } from "@karrio/types";
9+
import { redirect } from "next/navigation";
10+
11+
interface AdminLayoutProps {
12+
children: React.ReactNode;
13+
}
14+
15+
export default async function AdminLayout({ children }: AdminLayoutProps) {
16+
const session = await auth();
17+
await requireAuthentication(session);
18+
19+
const domain = await getCurrentDomain();
20+
const metadata = await loadMetadata(domain!);
21+
const user = await loadUserData(session, metadata.metadata as Metadata, domain!);
22+
23+
// Permission check: redirect if not staff or admin dashboard not enabled
24+
if (!(user.user as any)?.is_staff || !metadata.metadata?.ADMIN_DASHBOARD) {
25+
redirect("/");
26+
}
27+
28+
return <>{children}</>;
29+
}
Lines changed: 3 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,3 @@
1+
import { dynamicMetadata } from "@karrio/core/components/metadata";
2+
export { default } from "@karrio/admin/modules/platform";
3+
export const generateMetadata = dynamicMetadata("Platform Console");
Lines changed: 3 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,3 @@
1+
import { dynamicMetadata } from "@karrio/core/components/metadata";
2+
export { default } from "@karrio/admin/modules/staff";
3+
export const generateMetadata = dynamicMetadata("Staff & Permissions");
Lines changed: 3 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,3 @@
1+
import { dynamicMetadata } from "@karrio/core/components/metadata";
2+
export { default } from "@karrio/admin/modules/carriers";
3+
export const generateMetadata = dynamicMetadata("Carriers Network");
Lines changed: 29 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,29 @@
1+
import { auth } from "@karrio/core/context/auth";
2+
import {
3+
loadMetadata,
4+
loadUserData,
5+
getCurrentDomain,
6+
requireAuthentication,
7+
} from "@karrio/core/context/main";
8+
import { Metadata } from "@karrio/types";
9+
import { redirect } from "next/navigation";
10+
11+
interface AdminLayoutProps {
12+
children: React.ReactNode;
13+
}
14+
15+
export default async function AdminLayout({ children }: AdminLayoutProps) {
16+
const session = await auth();
17+
await requireAuthentication(session);
18+
19+
const domain = await getCurrentDomain();
20+
const metadata = await loadMetadata(domain!);
21+
const user = await loadUserData(session, metadata.metadata as Metadata, domain!);
22+
23+
// Permission check: redirect if not staff or admin dashboard not enabled
24+
if (!(user.user as any)?.is_staff || !metadata.metadata?.ADMIN_DASHBOARD) {
25+
redirect("/");
26+
}
27+
28+
return <>{children}</>;
29+
}
Lines changed: 3 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,3 @@
1+
import { dynamicMetadata } from "@karrio/core/components/metadata";
2+
export { default } from "@karrio/admin/modules/platform";
3+
export const generateMetadata = dynamicMetadata("Platform Console");
Lines changed: 3 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,3 @@
1+
import { dynamicMetadata } from "@karrio/core/components/metadata";
2+
export { default } from "@karrio/admin/modules/staff";
3+
export const generateMetadata = dynamicMetadata("Staff & Permissions");
Lines changed: 3 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,3 @@
1+
import { dynamicMetadata } from "@karrio/core/components/metadata";
2+
export { default } from "@karrio/admin/modules/carriers";
3+
export const generateMetadata = dynamicMetadata("Carriers Network");

0 commit comments

Comments
 (0)