@open-mercato/core 0.4.9-develop-ce96cffe00 → 0.4.9-develop-5d884303ad

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 (63) hide show
  1. package/dist/modules/auth/lib/setup-app.js +17 -1
  2. package/dist/modules/auth/lib/setup-app.js.map +2 -2
  3. package/dist/modules/sales/backend/sales/documents/[id]/page.js +23 -12
  4. package/dist/modules/sales/backend/sales/documents/[id]/page.js.map +2 -2
  5. package/dist/modules/shipping_carriers/api/cancel/route.js +5 -1
  6. package/dist/modules/shipping_carriers/api/cancel/route.js.map +2 -2
  7. package/dist/modules/shipping_carriers/api/points/route.js +59 -0
  8. package/dist/modules/shipping_carriers/api/points/route.js.map +7 -0
  9. package/dist/modules/shipping_carriers/api/providers/route.js +38 -0
  10. package/dist/modules/shipping_carriers/api/providers/route.js.map +7 -0
  11. package/dist/modules/shipping_carriers/backend/shipping-carriers/create/page.js +90 -0
  12. package/dist/modules/shipping_carriers/backend/shipping-carriers/create/page.js.map +7 -0
  13. package/dist/modules/shipping_carriers/backend/shipping-carriers/create/page.meta.js +8 -0
  14. package/dist/modules/shipping_carriers/backend/shipping-carriers/create/page.meta.js.map +7 -0
  15. package/dist/modules/shipping_carriers/data/validators.js +17 -2
  16. package/dist/modules/shipping_carriers/data/validators.js.map +2 -2
  17. package/dist/modules/shipping_carriers/lib/shipment-wizard/components/AddressFields.js +76 -0
  18. package/dist/modules/shipping_carriers/lib/shipment-wizard/components/AddressFields.js.map +7 -0
  19. package/dist/modules/shipping_carriers/lib/shipment-wizard/components/ConfigureStep.js +243 -0
  20. package/dist/modules/shipping_carriers/lib/shipment-wizard/components/ConfigureStep.js.map +7 -0
  21. package/dist/modules/shipping_carriers/lib/shipment-wizard/components/ConfirmStep.js +134 -0
  22. package/dist/modules/shipping_carriers/lib/shipment-wizard/components/ConfirmStep.js.map +7 -0
  23. package/dist/modules/shipping_carriers/lib/shipment-wizard/components/PackageEditor.js +70 -0
  24. package/dist/modules/shipping_carriers/lib/shipment-wizard/components/PackageEditor.js.map +7 -0
  25. package/dist/modules/shipping_carriers/lib/shipment-wizard/components/ProviderStep.js +32 -0
  26. package/dist/modules/shipping_carriers/lib/shipment-wizard/components/ProviderStep.js.map +7 -0
  27. package/dist/modules/shipping_carriers/lib/shipment-wizard/components/WizardNav.js +37 -0
  28. package/dist/modules/shipping_carriers/lib/shipment-wizard/components/WizardNav.js.map +7 -0
  29. package/dist/modules/shipping_carriers/lib/shipment-wizard/hooks/shipmentApi.js +92 -0
  30. package/dist/modules/shipping_carriers/lib/shipment-wizard/hooks/shipmentApi.js.map +7 -0
  31. package/dist/modules/shipping_carriers/lib/shipment-wizard/hooks/useShipmentWizard.js +212 -0
  32. package/dist/modules/shipping_carriers/lib/shipment-wizard/hooks/useShipmentWizard.js.map +7 -0
  33. package/dist/modules/shipping_carriers/lib/shipment-wizard/types.js +1 -0
  34. package/dist/modules/shipping_carriers/lib/shipment-wizard/types.js.map +7 -0
  35. package/dist/modules/shipping_carriers/lib/shipping-service.js +36 -3
  36. package/dist/modules/shipping_carriers/lib/shipping-service.js.map +2 -2
  37. package/dist/modules/shipping_carriers/lib/status-sync.js +7 -0
  38. package/dist/modules/shipping_carriers/lib/status-sync.js.map +2 -2
  39. package/package.json +7 -4
  40. package/src/modules/auth/lib/setup-app.ts +22 -0
  41. package/src/modules/sales/backend/sales/documents/[id]/page.tsx +17 -9
  42. package/src/modules/shipping_carriers/api/cancel/route.ts +5 -1
  43. package/src/modules/shipping_carriers/api/points/route.ts +57 -0
  44. package/src/modules/shipping_carriers/api/providers/route.ts +35 -0
  45. package/src/modules/shipping_carriers/backend/shipping-carriers/create/page.meta.ts +4 -0
  46. package/src/modules/shipping_carriers/backend/shipping-carriers/create/page.tsx +93 -0
  47. package/src/modules/shipping_carriers/data/validators.ts +15 -0
  48. package/src/modules/shipping_carriers/i18n/de.json +66 -0
  49. package/src/modules/shipping_carriers/i18n/en.json +66 -0
  50. package/src/modules/shipping_carriers/i18n/es.json +66 -0
  51. package/src/modules/shipping_carriers/i18n/pl.json +66 -0
  52. package/src/modules/shipping_carriers/lib/adapter.ts +20 -0
  53. package/src/modules/shipping_carriers/lib/shipment-wizard/components/AddressFields.tsx +72 -0
  54. package/src/modules/shipping_carriers/lib/shipment-wizard/components/ConfigureStep.tsx +343 -0
  55. package/src/modules/shipping_carriers/lib/shipment-wizard/components/ConfirmStep.tsx +213 -0
  56. package/src/modules/shipping_carriers/lib/shipment-wizard/components/PackageEditor.tsx +82 -0
  57. package/src/modules/shipping_carriers/lib/shipment-wizard/components/ProviderStep.tsx +54 -0
  58. package/src/modules/shipping_carriers/lib/shipment-wizard/components/WizardNav.tsx +46 -0
  59. package/src/modules/shipping_carriers/lib/shipment-wizard/hooks/shipmentApi.ts +153 -0
  60. package/src/modules/shipping_carriers/lib/shipment-wizard/hooks/useShipmentWizard.ts +312 -0
  61. package/src/modules/shipping_carriers/lib/shipment-wizard/types.ts +76 -0
  62. package/src/modules/shipping_carriers/lib/shipping-service.ts +53 -3
  63. package/src/modules/shipping_carriers/lib/status-sync.ts +7 -0
@@ -2,6 +2,7 @@ import { NextResponse } from "next/server";
2
2
  import { getAuthFromRequest } from "@open-mercato/shared/lib/auth/server";
3
3
  import { createRequestContainer } from "@open-mercato/shared/lib/di/container";
4
4
  import { readJsonSafe } from "@open-mercato/shared/lib/http/readJsonSafe";
5
+ import { ShipmentCancelNotAllowedError } from "../../lib/status-sync.js";
5
6
  import { cancelShipmentSchema } from "../../data/validators.js";
6
7
  import { shippingCarriersTag } from "../openapi.js";
7
8
  const metadata = {
@@ -28,6 +29,9 @@ async function POST(req) {
28
29
  });
29
30
  return NextResponse.json(result);
30
31
  } catch (error) {
32
+ if (error instanceof ShipmentCancelNotAllowedError) {
33
+ return NextResponse.json({ error: error.message }, { status: 422 });
34
+ }
31
35
  const message = error instanceof Error ? error.message : "Failed to cancel shipment";
32
36
  return NextResponse.json({ error: message }, { status: 502 });
33
37
  }
@@ -41,7 +45,7 @@ const openApi = {
41
45
  tags: [shippingCarriersTag],
42
46
  responses: [
43
47
  { status: 200, description: "Shipment cancelled" },
44
- { status: 422, description: "Validation failed" },
48
+ { status: 422, description: "Validation failed or shipment cannot be cancelled in its current status" },
45
49
  { status: 502, description: "Provider upstream error" }
46
50
  ]
47
51
  }
@@ -1,7 +1,7 @@
1
1
  {
2
2
  "version": 3,
3
3
  "sources": ["../../../../../src/modules/shipping_carriers/api/cancel/route.ts"],
4
- "sourcesContent": ["import { NextResponse } from 'next/server'\nimport { getAuthFromRequest } from '@open-mercato/shared/lib/auth/server'\nimport { createRequestContainer } from '@open-mercato/shared/lib/di/container'\nimport { readJsonSafe } from '@open-mercato/shared/lib/http/readJsonSafe'\nimport type { ShippingCarrierService } from '../../lib/shipping-service'\nimport { cancelShipmentSchema } from '../../data/validators'\nimport { shippingCarriersTag } from '../openapi'\n\nexport const metadata = {\n path: '/shipping-carriers/cancel',\n POST: { requireAuth: true, requireFeatures: ['shipping_carriers.manage'] },\n}\n\nexport async function POST(req: Request) {\n const auth = await getAuthFromRequest(req)\n if (!auth?.tenantId || !auth.orgId) {\n return NextResponse.json({ error: 'Unauthorized' }, { status: 401 })\n }\n const payload = await readJsonSafe<unknown>(req)\n const parsed = cancelShipmentSchema.safeParse(payload)\n if (!parsed.success) {\n return NextResponse.json({ error: 'Invalid payload', details: parsed.error.flatten() }, { status: 422 })\n }\n const container = await createRequestContainer()\n const service = container.resolve('shippingCarrierService') as ShippingCarrierService\n try {\n const result = await service.cancelShipment({\n ...parsed.data,\n organizationId: auth.orgId as string,\n tenantId: auth.tenantId,\n })\n return NextResponse.json(result)\n } catch (error: unknown) {\n const message = error instanceof Error ? error.message : 'Failed to cancel shipment'\n return NextResponse.json({ error: message }, { status: 502 })\n }\n}\n\nexport const openApi = {\n tags: [shippingCarriersTag],\n summary: 'Cancel shipment',\n methods: {\n POST: {\n summary: 'Cancel shipment',\n tags: [shippingCarriersTag],\n responses: [\n { status: 200, description: 'Shipment cancelled' },\n { status: 422, description: 'Validation failed' },\n { status: 502, description: 'Provider upstream error' },\n ],\n },\n },\n}\n"],
5
- "mappings": "AAAA,SAAS,oBAAoB;AAC7B,SAAS,0BAA0B;AACnC,SAAS,8BAA8B;AACvC,SAAS,oBAAoB;AAE7B,SAAS,4BAA4B;AACrC,SAAS,2BAA2B;AAE7B,MAAM,WAAW;AAAA,EACtB,MAAM;AAAA,EACN,MAAM,EAAE,aAAa,MAAM,iBAAiB,CAAC,0BAA0B,EAAE;AAC3E;AAEA,eAAsB,KAAK,KAAc;AACvC,QAAM,OAAO,MAAM,mBAAmB,GAAG;AACzC,MAAI,CAAC,MAAM,YAAY,CAAC,KAAK,OAAO;AAClC,WAAO,aAAa,KAAK,EAAE,OAAO,eAAe,GAAG,EAAE,QAAQ,IAAI,CAAC;AAAA,EACrE;AACA,QAAM,UAAU,MAAM,aAAsB,GAAG;AAC/C,QAAM,SAAS,qBAAqB,UAAU,OAAO;AACrD,MAAI,CAAC,OAAO,SAAS;AACnB,WAAO,aAAa,KAAK,EAAE,OAAO,mBAAmB,SAAS,OAAO,MAAM,QAAQ,EAAE,GAAG,EAAE,QAAQ,IAAI,CAAC;AAAA,EACzG;AACA,QAAM,YAAY,MAAM,uBAAuB;AAC/C,QAAM,UAAU,UAAU,QAAQ,wBAAwB;AAC1D,MAAI;AACF,UAAM,SAAS,MAAM,QAAQ,eAAe;AAAA,MAC1C,GAAG,OAAO;AAAA,MACV,gBAAgB,KAAK;AAAA,MACrB,UAAU,KAAK;AAAA,IACjB,CAAC;AACD,WAAO,aAAa,KAAK,MAAM;AAAA,EACjC,SAAS,OAAgB;AACvB,UAAM,UAAU,iBAAiB,QAAQ,MAAM,UAAU;AACzD,WAAO,aAAa,KAAK,EAAE,OAAO,QAAQ,GAAG,EAAE,QAAQ,IAAI,CAAC;AAAA,EAC9D;AACF;AAEO,MAAM,UAAU;AAAA,EACrB,MAAM,CAAC,mBAAmB;AAAA,EAC1B,SAAS;AAAA,EACT,SAAS;AAAA,IACP,MAAM;AAAA,MACJ,SAAS;AAAA,MACT,MAAM,CAAC,mBAAmB;AAAA,MAC1B,WAAW;AAAA,QACT,EAAE,QAAQ,KAAK,aAAa,qBAAqB;AAAA,QACjD,EAAE,QAAQ,KAAK,aAAa,oBAAoB;AAAA,QAChD,EAAE,QAAQ,KAAK,aAAa,0BAA0B;AAAA,MACxD;AAAA,IACF;AAAA,EACF;AACF;",
4
+ "sourcesContent": ["import { NextResponse } from 'next/server'\nimport { getAuthFromRequest } from '@open-mercato/shared/lib/auth/server'\nimport { createRequestContainer } from '@open-mercato/shared/lib/di/container'\nimport { readJsonSafe } from '@open-mercato/shared/lib/http/readJsonSafe'\nimport type { ShippingCarrierService } from '../../lib/shipping-service'\nimport { ShipmentCancelNotAllowedError } from '../../lib/status-sync'\nimport { cancelShipmentSchema } from '../../data/validators'\nimport { shippingCarriersTag } from '../openapi'\n\nexport const metadata = {\n path: '/shipping-carriers/cancel',\n POST: { requireAuth: true, requireFeatures: ['shipping_carriers.manage'] },\n}\n\nexport async function POST(req: Request) {\n const auth = await getAuthFromRequest(req)\n if (!auth?.tenantId || !auth.orgId) {\n return NextResponse.json({ error: 'Unauthorized' }, { status: 401 })\n }\n const payload = await readJsonSafe<unknown>(req)\n const parsed = cancelShipmentSchema.safeParse(payload)\n if (!parsed.success) {\n return NextResponse.json({ error: 'Invalid payload', details: parsed.error.flatten() }, { status: 422 })\n }\n const container = await createRequestContainer()\n const service = container.resolve('shippingCarrierService') as ShippingCarrierService\n try {\n const result = await service.cancelShipment({\n ...parsed.data,\n organizationId: auth.orgId as string,\n tenantId: auth.tenantId,\n })\n return NextResponse.json(result)\n } catch (error: unknown) {\n if (error instanceof ShipmentCancelNotAllowedError) {\n return NextResponse.json({ error: error.message }, { status: 422 })\n }\n const message = error instanceof Error ? error.message : 'Failed to cancel shipment'\n return NextResponse.json({ error: message }, { status: 502 })\n }\n}\n\nexport const openApi = {\n tags: [shippingCarriersTag],\n summary: 'Cancel shipment',\n methods: {\n POST: {\n summary: 'Cancel shipment',\n tags: [shippingCarriersTag],\n responses: [\n { status: 200, description: 'Shipment cancelled' },\n { status: 422, description: 'Validation failed or shipment cannot be cancelled in its current status' },\n { status: 502, description: 'Provider upstream error' },\n ],\n },\n },\n}\n"],
5
+ "mappings": "AAAA,SAAS,oBAAoB;AAC7B,SAAS,0BAA0B;AACnC,SAAS,8BAA8B;AACvC,SAAS,oBAAoB;AAE7B,SAAS,qCAAqC;AAC9C,SAAS,4BAA4B;AACrC,SAAS,2BAA2B;AAE7B,MAAM,WAAW;AAAA,EACtB,MAAM;AAAA,EACN,MAAM,EAAE,aAAa,MAAM,iBAAiB,CAAC,0BAA0B,EAAE;AAC3E;AAEA,eAAsB,KAAK,KAAc;AACvC,QAAM,OAAO,MAAM,mBAAmB,GAAG;AACzC,MAAI,CAAC,MAAM,YAAY,CAAC,KAAK,OAAO;AAClC,WAAO,aAAa,KAAK,EAAE,OAAO,eAAe,GAAG,EAAE,QAAQ,IAAI,CAAC;AAAA,EACrE;AACA,QAAM,UAAU,MAAM,aAAsB,GAAG;AAC/C,QAAM,SAAS,qBAAqB,UAAU,OAAO;AACrD,MAAI,CAAC,OAAO,SAAS;AACnB,WAAO,aAAa,KAAK,EAAE,OAAO,mBAAmB,SAAS,OAAO,MAAM,QAAQ,EAAE,GAAG,EAAE,QAAQ,IAAI,CAAC;AAAA,EACzG;AACA,QAAM,YAAY,MAAM,uBAAuB;AAC/C,QAAM,UAAU,UAAU,QAAQ,wBAAwB;AAC1D,MAAI;AACF,UAAM,SAAS,MAAM,QAAQ,eAAe;AAAA,MAC1C,GAAG,OAAO;AAAA,MACV,gBAAgB,KAAK;AAAA,MACrB,UAAU,KAAK;AAAA,IACjB,CAAC;AACD,WAAO,aAAa,KAAK,MAAM;AAAA,EACjC,SAAS,OAAgB;AACvB,QAAI,iBAAiB,+BAA+B;AAClD,aAAO,aAAa,KAAK,EAAE,OAAO,MAAM,QAAQ,GAAG,EAAE,QAAQ,IAAI,CAAC;AAAA,IACpE;AACA,UAAM,UAAU,iBAAiB,QAAQ,MAAM,UAAU;AACzD,WAAO,aAAa,KAAK,EAAE,OAAO,QAAQ,GAAG,EAAE,QAAQ,IAAI,CAAC;AAAA,EAC9D;AACF;AAEO,MAAM,UAAU;AAAA,EACrB,MAAM,CAAC,mBAAmB;AAAA,EAC1B,SAAS;AAAA,EACT,SAAS;AAAA,IACP,MAAM;AAAA,MACJ,SAAS;AAAA,MACT,MAAM,CAAC,mBAAmB;AAAA,MAC1B,WAAW;AAAA,QACT,EAAE,QAAQ,KAAK,aAAa,qBAAqB;AAAA,QACjD,EAAE,QAAQ,KAAK,aAAa,0EAA0E;AAAA,QACtG,EAAE,QAAQ,KAAK,aAAa,0BAA0B;AAAA,MACxD;AAAA,IACF;AAAA,EACF;AACF;",
6
6
  "names": []
7
7
  }
@@ -0,0 +1,59 @@
1
+ import { NextResponse } from "next/server";
2
+ import { getAuthFromRequest } from "@open-mercato/shared/lib/auth/server";
3
+ import { createRequestContainer } from "@open-mercato/shared/lib/di/container";
4
+ import { searchDropOffPointsQuerySchema } from "../../data/validators.js";
5
+ import { shippingCarriersTag } from "../openapi.js";
6
+ const metadata = {
7
+ path: "/shipping-carriers/points",
8
+ GET: { requireAuth: true, requireFeatures: ["shipping_carriers.view"] }
9
+ };
10
+ async function GET(req) {
11
+ const auth = await getAuthFromRequest(req);
12
+ if (!auth?.tenantId || !auth.orgId) {
13
+ return NextResponse.json({ error: "Unauthorized" }, { status: 401 });
14
+ }
15
+ const url = new URL(req.url);
16
+ const parsed = searchDropOffPointsQuerySchema.safeParse({
17
+ providerKey: url.searchParams.get("providerKey"),
18
+ query: url.searchParams.get("query") ?? void 0,
19
+ type: url.searchParams.get("type") ?? void 0,
20
+ postCode: url.searchParams.get("postCode") ?? void 0
21
+ });
22
+ if (!parsed.success) {
23
+ return NextResponse.json({ error: "Invalid query", details: parsed.error.flatten() }, { status: 422 });
24
+ }
25
+ const container = await createRequestContainer();
26
+ const service = container.resolve("shippingCarrierService");
27
+ try {
28
+ const points = await service.searchDropOffPoints({
29
+ ...parsed.data,
30
+ organizationId: auth.orgId,
31
+ tenantId: auth.tenantId
32
+ });
33
+ return NextResponse.json({ points });
34
+ } catch (error) {
35
+ const message = error instanceof Error ? error.message : "Failed to search drop-off points";
36
+ return NextResponse.json({ error: message }, { status: 502 });
37
+ }
38
+ }
39
+ const openApi = {
40
+ tags: [shippingCarriersTag],
41
+ summary: "Search drop-off points",
42
+ methods: {
43
+ GET: {
44
+ summary: "Search carrier drop-off points (lockers, POP points)",
45
+ tags: [shippingCarriersTag],
46
+ responses: [
47
+ { status: 200, description: "Points returned" },
48
+ { status: 422, description: "Validation failed" },
49
+ { status: 502, description: "Provider upstream error or unsupported" }
50
+ ]
51
+ }
52
+ }
53
+ };
54
+ export {
55
+ GET,
56
+ metadata,
57
+ openApi
58
+ };
59
+ //# sourceMappingURL=route.js.map
@@ -0,0 +1,7 @@
1
+ {
2
+ "version": 3,
3
+ "sources": ["../../../../../src/modules/shipping_carriers/api/points/route.ts"],
4
+ "sourcesContent": ["import { NextResponse } from 'next/server'\nimport { getAuthFromRequest } from '@open-mercato/shared/lib/auth/server'\nimport { createRequestContainer } from '@open-mercato/shared/lib/di/container'\nimport type { ShippingCarrierService } from '../../lib/shipping-service'\nimport { searchDropOffPointsQuerySchema } from '../../data/validators'\nimport { shippingCarriersTag } from '../openapi'\n\nexport const metadata = {\n path: '/shipping-carriers/points',\n GET: { requireAuth: true, requireFeatures: ['shipping_carriers.view'] },\n}\n\nexport async function GET(req: Request) {\n const auth = await getAuthFromRequest(req)\n if (!auth?.tenantId || !auth.orgId) {\n return NextResponse.json({ error: 'Unauthorized' }, { status: 401 })\n }\n const url = new URL(req.url)\n const parsed = searchDropOffPointsQuerySchema.safeParse({\n providerKey: url.searchParams.get('providerKey'),\n query: url.searchParams.get('query') ?? undefined,\n type: url.searchParams.get('type') ?? undefined,\n postCode: url.searchParams.get('postCode') ?? undefined,\n })\n if (!parsed.success) {\n return NextResponse.json({ error: 'Invalid query', details: parsed.error.flatten() }, { status: 422 })\n }\n const container = await createRequestContainer()\n const service = container.resolve('shippingCarrierService') as ShippingCarrierService\n try {\n const points = await service.searchDropOffPoints({\n ...parsed.data,\n organizationId: auth.orgId as string,\n tenantId: auth.tenantId,\n })\n return NextResponse.json({ points })\n } catch (error: unknown) {\n const message = error instanceof Error ? error.message : 'Failed to search drop-off points'\n return NextResponse.json({ error: message }, { status: 502 })\n }\n}\n\nexport const openApi = {\n tags: [shippingCarriersTag],\n summary: 'Search drop-off points',\n methods: {\n GET: {\n summary: 'Search carrier drop-off points (lockers, POP points)',\n tags: [shippingCarriersTag],\n responses: [\n { status: 200, description: 'Points returned' },\n { status: 422, description: 'Validation failed' },\n { status: 502, description: 'Provider upstream error or unsupported' },\n ],\n },\n },\n}\n"],
5
+ "mappings": "AAAA,SAAS,oBAAoB;AAC7B,SAAS,0BAA0B;AACnC,SAAS,8BAA8B;AAEvC,SAAS,sCAAsC;AAC/C,SAAS,2BAA2B;AAE7B,MAAM,WAAW;AAAA,EACtB,MAAM;AAAA,EACN,KAAK,EAAE,aAAa,MAAM,iBAAiB,CAAC,wBAAwB,EAAE;AACxE;AAEA,eAAsB,IAAI,KAAc;AACtC,QAAM,OAAO,MAAM,mBAAmB,GAAG;AACzC,MAAI,CAAC,MAAM,YAAY,CAAC,KAAK,OAAO;AAClC,WAAO,aAAa,KAAK,EAAE,OAAO,eAAe,GAAG,EAAE,QAAQ,IAAI,CAAC;AAAA,EACrE;AACA,QAAM,MAAM,IAAI,IAAI,IAAI,GAAG;AAC3B,QAAM,SAAS,+BAA+B,UAAU;AAAA,IACtD,aAAa,IAAI,aAAa,IAAI,aAAa;AAAA,IAC/C,OAAO,IAAI,aAAa,IAAI,OAAO,KAAK;AAAA,IACxC,MAAM,IAAI,aAAa,IAAI,MAAM,KAAK;AAAA,IACtC,UAAU,IAAI,aAAa,IAAI,UAAU,KAAK;AAAA,EAChD,CAAC;AACD,MAAI,CAAC,OAAO,SAAS;AACnB,WAAO,aAAa,KAAK,EAAE,OAAO,iBAAiB,SAAS,OAAO,MAAM,QAAQ,EAAE,GAAG,EAAE,QAAQ,IAAI,CAAC;AAAA,EACvG;AACA,QAAM,YAAY,MAAM,uBAAuB;AAC/C,QAAM,UAAU,UAAU,QAAQ,wBAAwB;AAC1D,MAAI;AACF,UAAM,SAAS,MAAM,QAAQ,oBAAoB;AAAA,MAC/C,GAAG,OAAO;AAAA,MACV,gBAAgB,KAAK;AAAA,MACrB,UAAU,KAAK;AAAA,IACjB,CAAC;AACD,WAAO,aAAa,KAAK,EAAE,OAAO,CAAC;AAAA,EACrC,SAAS,OAAgB;AACvB,UAAM,UAAU,iBAAiB,QAAQ,MAAM,UAAU;AACzD,WAAO,aAAa,KAAK,EAAE,OAAO,QAAQ,GAAG,EAAE,QAAQ,IAAI,CAAC;AAAA,EAC9D;AACF;AAEO,MAAM,UAAU;AAAA,EACrB,MAAM,CAAC,mBAAmB;AAAA,EAC1B,SAAS;AAAA,EACT,SAAS;AAAA,IACP,KAAK;AAAA,MACH,SAAS;AAAA,MACT,MAAM,CAAC,mBAAmB;AAAA,MAC1B,WAAW;AAAA,QACT,EAAE,QAAQ,KAAK,aAAa,kBAAkB;AAAA,QAC9C,EAAE,QAAQ,KAAK,aAAa,oBAAoB;AAAA,QAChD,EAAE,QAAQ,KAAK,aAAa,yCAAyC;AAAA,MACvE;AAAA,IACF;AAAA,EACF;AACF;",
6
+ "names": []
7
+ }
@@ -0,0 +1,38 @@
1
+ import { NextResponse } from "next/server";
2
+ import { getAuthFromRequest } from "@open-mercato/shared/lib/auth/server";
3
+ import { listShippingAdapters } from "../../lib/adapter-registry.js";
4
+ import { shippingCarriersTag } from "../openapi.js";
5
+ const metadata = {
6
+ path: "/shipping-carriers/providers",
7
+ GET: { requireAuth: true, requireFeatures: ["shipping_carriers.manage"] }
8
+ };
9
+ async function GET(req) {
10
+ const auth = await getAuthFromRequest(req);
11
+ if (!auth?.tenantId || !auth.orgId) {
12
+ return NextResponse.json({ error: "Unauthorized" }, { status: 401 });
13
+ }
14
+ const adapters = listShippingAdapters();
15
+ const providers = adapters.map((adapter) => ({
16
+ providerKey: adapter.providerKey
17
+ }));
18
+ return NextResponse.json({ providers });
19
+ }
20
+ const openApi = {
21
+ tags: [shippingCarriersTag],
22
+ summary: "List registered shipping providers",
23
+ methods: {
24
+ GET: {
25
+ summary: "List registered shipping providers",
26
+ tags: [shippingCarriersTag],
27
+ responses: [
28
+ { status: 200, description: "List of registered provider keys" }
29
+ ]
30
+ }
31
+ }
32
+ };
33
+ export {
34
+ GET,
35
+ metadata,
36
+ openApi
37
+ };
38
+ //# sourceMappingURL=route.js.map
@@ -0,0 +1,7 @@
1
+ {
2
+ "version": 3,
3
+ "sources": ["../../../../../src/modules/shipping_carriers/api/providers/route.ts"],
4
+ "sourcesContent": ["import { NextResponse } from 'next/server'\nimport { getAuthFromRequest } from '@open-mercato/shared/lib/auth/server'\nimport { listShippingAdapters } from '../../lib/adapter-registry'\nimport { shippingCarriersTag } from '../openapi'\n\nexport const metadata = {\n path: '/shipping-carriers/providers',\n GET: { requireAuth: true, requireFeatures: ['shipping_carriers.manage'] },\n}\n\nexport async function GET(req: Request) {\n const auth = await getAuthFromRequest(req)\n if (!auth?.tenantId || !auth.orgId) {\n return NextResponse.json({ error: 'Unauthorized' }, { status: 401 })\n }\n const adapters = listShippingAdapters()\n const providers = adapters.map((adapter) => ({\n providerKey: adapter.providerKey,\n }))\n return NextResponse.json({ providers })\n}\n\nexport const openApi = {\n tags: [shippingCarriersTag],\n summary: 'List registered shipping providers',\n methods: {\n GET: {\n summary: 'List registered shipping providers',\n tags: [shippingCarriersTag],\n responses: [\n { status: 200, description: 'List of registered provider keys' },\n ],\n },\n },\n}\n"],
5
+ "mappings": "AAAA,SAAS,oBAAoB;AAC7B,SAAS,0BAA0B;AACnC,SAAS,4BAA4B;AACrC,SAAS,2BAA2B;AAE7B,MAAM,WAAW;AAAA,EACtB,MAAM;AAAA,EACN,KAAK,EAAE,aAAa,MAAM,iBAAiB,CAAC,0BAA0B,EAAE;AAC1E;AAEA,eAAsB,IAAI,KAAc;AACtC,QAAM,OAAO,MAAM,mBAAmB,GAAG;AACzC,MAAI,CAAC,MAAM,YAAY,CAAC,KAAK,OAAO;AAClC,WAAO,aAAa,KAAK,EAAE,OAAO,eAAe,GAAG,EAAE,QAAQ,IAAI,CAAC;AAAA,EACrE;AACA,QAAM,WAAW,qBAAqB;AACtC,QAAM,YAAY,SAAS,IAAI,CAAC,aAAa;AAAA,IAC3C,aAAa,QAAQ;AAAA,EACvB,EAAE;AACF,SAAO,aAAa,KAAK,EAAE,UAAU,CAAC;AACxC;AAEO,MAAM,UAAU;AAAA,EACrB,MAAM,CAAC,mBAAmB;AAAA,EAC1B,SAAS;AAAA,EACT,SAAS;AAAA,IACP,KAAK;AAAA,MACH,SAAS;AAAA,MACT,MAAM,CAAC,mBAAmB;AAAA,MAC1B,WAAW;AAAA,QACT,EAAE,QAAQ,KAAK,aAAa,mCAAmC;AAAA,MACjE;AAAA,IACF;AAAA,EACF;AACF;",
6
+ "names": []
7
+ }
@@ -0,0 +1,90 @@
1
+ "use client";
2
+ import { jsx, jsxs } from "react/jsx-runtime";
3
+ import { match } from "ts-pattern";
4
+ import { Page, PageBody } from "@open-mercato/ui/backend/Page";
5
+ import { FormHeader } from "@open-mercato/ui/backend/forms";
6
+ import { useT } from "@open-mercato/shared/lib/i18n/context";
7
+ import { WizardNav } from "../../../lib/shipment-wizard/components/WizardNav.js";
8
+ import { ProviderStep } from "../../../lib/shipment-wizard/components/ProviderStep.js";
9
+ import { ConfigureStep } from "../../../lib/shipment-wizard/components/ConfigureStep.js";
10
+ import { ConfirmStep } from "../../../lib/shipment-wizard/components/ConfirmStep.js";
11
+ import { useShipmentWizard } from "../../../lib/shipment-wizard/hooks/useShipmentWizard.js";
12
+ const CreateCarrierShipmentPage = () => {
13
+ const t = useT();
14
+ const wizard = useShipmentWizard();
15
+ return /* @__PURE__ */ jsx(Page, { children: /* @__PURE__ */ jsxs(PageBody, { children: [
16
+ /* @__PURE__ */ jsx(
17
+ FormHeader,
18
+ {
19
+ backHref: wizard.backHref,
20
+ title: t("shipping_carriers.create.title", "Create carrier shipment")
21
+ }
22
+ ),
23
+ /* @__PURE__ */ jsx(WizardNav, { step: wizard.step, onNavigate: wizard.goToStep }),
24
+ match(wizard.step).with("provider", () => /* @__PURE__ */ jsx(
25
+ ProviderStep,
26
+ {
27
+ isLoading: wizard.isLoadingProviders,
28
+ error: wizard.providerError,
29
+ providers: wizard.providers,
30
+ onSelect: wizard.handleProviderSelect
31
+ }
32
+ )).with("configure", () => /* @__PURE__ */ jsx(
33
+ ConfigureStep,
34
+ {
35
+ origin: wizard.origin,
36
+ destination: wizard.destination,
37
+ packages: wizard.packages,
38
+ labelFormat: wizard.labelFormat,
39
+ senderContact: wizard.senderContact,
40
+ receiverContact: wizard.receiverContact,
41
+ targetPoint: wizard.targetPoint,
42
+ c2cSendingMethod: wizard.c2cSendingMethod,
43
+ isFetchingRates: wizard.isFetchingRates,
44
+ canProceed: wizard.canProceedFromConfigure,
45
+ senderContactErrors: wizard.senderContactErrors,
46
+ receiverContactErrors: wizard.receiverContactErrors,
47
+ dropOffPointQuery: wizard.dropOffPointQuery,
48
+ dropOffPoints: wizard.dropOffPoints,
49
+ isFetchingDropOffPoints: wizard.isFetchingDropOffPoints,
50
+ dropOffPointsError: wizard.dropOffPointsError,
51
+ onOriginChange: wizard.setOrigin,
52
+ onDestinationChange: wizard.setDestination,
53
+ onPackagesChange: wizard.setPackages,
54
+ onLabelFormatChange: wizard.setLabelFormat,
55
+ onSenderContactChange: wizard.setSenderContact,
56
+ onReceiverContactChange: wizard.setReceiverContact,
57
+ onTargetPointChange: wizard.setTargetPoint,
58
+ onC2cSendingMethodChange: wizard.setC2cSendingMethod,
59
+ onSearchDropOffPoints: wizard.searchDropOffPoints,
60
+ onBack: () => wizard.goToStep("provider"),
61
+ onNext: wizard.handleConfigureNext
62
+ }
63
+ )).with("confirm", () => /* @__PURE__ */ jsx(
64
+ ConfirmStep,
65
+ {
66
+ rates: wizard.rates,
67
+ ratesError: wizard.ratesError,
68
+ selectedRate: wizard.selectedRate,
69
+ selectedProvider: wizard.selectedProvider ?? "",
70
+ origin: wizard.origin,
71
+ destination: wizard.destination,
72
+ packages: wizard.packages,
73
+ labelFormat: wizard.labelFormat,
74
+ senderContact: wizard.senderContact,
75
+ receiverContact: wizard.receiverContact,
76
+ targetPoint: wizard.targetPoint,
77
+ c2cSendingMethod: wizard.c2cSendingMethod,
78
+ isSubmitting: wizard.isSubmitting,
79
+ onRateSelect: wizard.setSelectedRate,
80
+ onBack: () => wizard.goToStep("configure"),
81
+ onSubmit: wizard.handleSubmit
82
+ }
83
+ )).exhaustive()
84
+ ] }) });
85
+ };
86
+ var page_default = CreateCarrierShipmentPage;
87
+ export {
88
+ page_default as default
89
+ };
90
+ //# sourceMappingURL=page.js.map
@@ -0,0 +1,7 @@
1
+ {
2
+ "version": 3,
3
+ "sources": ["../../../../../../src/modules/shipping_carriers/backend/shipping-carriers/create/page.tsx"],
4
+ "sourcesContent": ["\"use client\"\n\nimport { match } from 'ts-pattern'\nimport { Page, PageBody } from '@open-mercato/ui/backend/Page'\nimport { FormHeader } from '@open-mercato/ui/backend/forms'\nimport { useT } from '@open-mercato/shared/lib/i18n/context'\nimport { WizardNav } from '../../../lib/shipment-wizard/components/WizardNav'\nimport { ProviderStep } from '../../../lib/shipment-wizard/components/ProviderStep'\nimport { ConfigureStep } from '../../../lib/shipment-wizard/components/ConfigureStep'\nimport { ConfirmStep } from '../../../lib/shipment-wizard/components/ConfirmStep'\nimport { useShipmentWizard } from '../../../lib/shipment-wizard/hooks/useShipmentWizard'\n\nconst CreateCarrierShipmentPage = () => {\n const t = useT()\n const wizard = useShipmentWizard()\n\n return (\n <Page>\n <PageBody>\n <FormHeader\n backHref={wizard.backHref}\n title={t('shipping_carriers.create.title', 'Create carrier shipment')}\n />\n\n <WizardNav step={wizard.step} onNavigate={wizard.goToStep} />\n\n {match(wizard.step)\n .with('provider', () => (\n <ProviderStep\n isLoading={wizard.isLoadingProviders}\n error={wizard.providerError}\n providers={wizard.providers}\n onSelect={wizard.handleProviderSelect}\n />\n ))\n .with('configure', () => (\n <ConfigureStep\n origin={wizard.origin}\n destination={wizard.destination}\n packages={wizard.packages}\n labelFormat={wizard.labelFormat}\n senderContact={wizard.senderContact}\n receiverContact={wizard.receiverContact}\n targetPoint={wizard.targetPoint}\n c2cSendingMethod={wizard.c2cSendingMethod}\n isFetchingRates={wizard.isFetchingRates}\n canProceed={wizard.canProceedFromConfigure}\n senderContactErrors={wizard.senderContactErrors}\n receiverContactErrors={wizard.receiverContactErrors}\n dropOffPointQuery={wizard.dropOffPointQuery}\n dropOffPoints={wizard.dropOffPoints}\n isFetchingDropOffPoints={wizard.isFetchingDropOffPoints}\n dropOffPointsError={wizard.dropOffPointsError}\n onOriginChange={wizard.setOrigin}\n onDestinationChange={wizard.setDestination}\n onPackagesChange={wizard.setPackages}\n onLabelFormatChange={wizard.setLabelFormat}\n onSenderContactChange={wizard.setSenderContact}\n onReceiverContactChange={wizard.setReceiverContact}\n onTargetPointChange={wizard.setTargetPoint}\n onC2cSendingMethodChange={wizard.setC2cSendingMethod}\n onSearchDropOffPoints={wizard.searchDropOffPoints}\n onBack={() => wizard.goToStep('provider')}\n onNext={wizard.handleConfigureNext}\n />\n ))\n .with('confirm', () => (\n <ConfirmStep\n rates={wizard.rates}\n ratesError={wizard.ratesError}\n selectedRate={wizard.selectedRate}\n selectedProvider={wizard.selectedProvider ?? ''}\n origin={wizard.origin}\n destination={wizard.destination}\n packages={wizard.packages}\n labelFormat={wizard.labelFormat}\n senderContact={wizard.senderContact}\n receiverContact={wizard.receiverContact}\n targetPoint={wizard.targetPoint}\n c2cSendingMethod={wizard.c2cSendingMethod}\n isSubmitting={wizard.isSubmitting}\n onRateSelect={wizard.setSelectedRate}\n onBack={() => wizard.goToStep('configure')}\n onSubmit={wizard.handleSubmit}\n />\n ))\n .exhaustive()}\n </PageBody>\n </Page>\n )\n}\n\nexport default CreateCarrierShipmentPage\n"],
5
+ "mappings": ";AAkBM,SACE,KADF;AAhBN,SAAS,aAAa;AACtB,SAAS,MAAM,gBAAgB;AAC/B,SAAS,kBAAkB;AAC3B,SAAS,YAAY;AACrB,SAAS,iBAAiB;AAC1B,SAAS,oBAAoB;AAC7B,SAAS,qBAAqB;AAC9B,SAAS,mBAAmB;AAC5B,SAAS,yBAAyB;AAElC,MAAM,4BAA4B,MAAM;AACtC,QAAM,IAAI,KAAK;AACf,QAAM,SAAS,kBAAkB;AAEjC,SACE,oBAAC,QACC,+BAAC,YACC;AAAA;AAAA,MAAC;AAAA;AAAA,QACC,UAAU,OAAO;AAAA,QACjB,OAAO,EAAE,kCAAkC,yBAAyB;AAAA;AAAA,IACtE;AAAA,IAEA,oBAAC,aAAU,MAAM,OAAO,MAAM,YAAY,OAAO,UAAU;AAAA,IAE1D,MAAM,OAAO,IAAI,EACf,KAAK,YAAY,MAChB;AAAA,MAAC;AAAA;AAAA,QACC,WAAW,OAAO;AAAA,QAClB,OAAO,OAAO;AAAA,QACd,WAAW,OAAO;AAAA,QAClB,UAAU,OAAO;AAAA;AAAA,IACnB,CACD,EACA,KAAK,aAAa,MACjB;AAAA,MAAC;AAAA;AAAA,QACC,QAAQ,OAAO;AAAA,QACf,aAAa,OAAO;AAAA,QACpB,UAAU,OAAO;AAAA,QACjB,aAAa,OAAO;AAAA,QACpB,eAAe,OAAO;AAAA,QACtB,iBAAiB,OAAO;AAAA,QACxB,aAAa,OAAO;AAAA,QACpB,kBAAkB,OAAO;AAAA,QACzB,iBAAiB,OAAO;AAAA,QACxB,YAAY,OAAO;AAAA,QACnB,qBAAqB,OAAO;AAAA,QAC5B,uBAAuB,OAAO;AAAA,QAC9B,mBAAmB,OAAO;AAAA,QAC1B,eAAe,OAAO;AAAA,QACtB,yBAAyB,OAAO;AAAA,QAChC,oBAAoB,OAAO;AAAA,QAC3B,gBAAgB,OAAO;AAAA,QACvB,qBAAqB,OAAO;AAAA,QAC5B,kBAAkB,OAAO;AAAA,QACzB,qBAAqB,OAAO;AAAA,QAC5B,uBAAuB,OAAO;AAAA,QAC9B,yBAAyB,OAAO;AAAA,QAChC,qBAAqB,OAAO;AAAA,QAC5B,0BAA0B,OAAO;AAAA,QACjC,uBAAuB,OAAO;AAAA,QAC9B,QAAQ,MAAM,OAAO,SAAS,UAAU;AAAA,QACxC,QAAQ,OAAO;AAAA;AAAA,IACjB,CACD,EACA,KAAK,WAAW,MACf;AAAA,MAAC;AAAA;AAAA,QACC,OAAO,OAAO;AAAA,QACd,YAAY,OAAO;AAAA,QACnB,cAAc,OAAO;AAAA,QACrB,kBAAkB,OAAO,oBAAoB;AAAA,QAC7C,QAAQ,OAAO;AAAA,QACf,aAAa,OAAO;AAAA,QACpB,UAAU,OAAO;AAAA,QACjB,aAAa,OAAO;AAAA,QACpB,eAAe,OAAO;AAAA,QACtB,iBAAiB,OAAO;AAAA,QACxB,aAAa,OAAO;AAAA,QACpB,kBAAkB,OAAO;AAAA,QACzB,cAAc,OAAO;AAAA,QACrB,cAAc,OAAO;AAAA,QACrB,QAAQ,MAAM,OAAO,SAAS,WAAW;AAAA,QACzC,UAAU,OAAO;AAAA;AAAA,IACnB,CACD,EACA,WAAW;AAAA,KAChB,GACF;AAEJ;AAEA,IAAO,eAAQ;",
6
+ "names": []
7
+ }
@@ -0,0 +1,8 @@
1
+ const metadata = {
2
+ requireAuth: true,
3
+ requireFeatures: ["shipping_carriers.manage"]
4
+ };
5
+ export {
6
+ metadata
7
+ };
8
+ //# sourceMappingURL=page.meta.js.map
@@ -0,0 +1,7 @@
1
+ {
2
+ "version": 3,
3
+ "sources": ["../../../../../../src/modules/shipping_carriers/backend/shipping-carriers/create/page.meta.ts"],
4
+ "sourcesContent": ["export const metadata = {\n requireAuth: true,\n requireFeatures: ['shipping_carriers.manage'],\n} as const\n"],
5
+ "mappings": "AAAO,MAAM,WAAW;AAAA,EACtB,aAAa;AAAA,EACb,iBAAiB,CAAC,0BAA0B;AAC9C;",
6
+ "names": []
7
+ }
@@ -16,7 +16,9 @@ const calculateRatesSchema = z.object({
16
16
  providerKey: z.string().min(1),
17
17
  origin: addressSchema,
18
18
  destination: addressSchema,
19
- packages: z.array(packageSchema).min(1)
19
+ packages: z.array(packageSchema).min(1),
20
+ receiverPhone: z.string().optional(),
21
+ receiverEmail: z.string().optional()
20
22
  });
21
23
  const createShipmentSchema = z.object({
22
24
  providerKey: z.string().min(1),
@@ -25,7 +27,13 @@ const createShipmentSchema = z.object({
25
27
  destination: addressSchema,
26
28
  packages: z.array(packageSchema).min(1),
27
29
  serviceCode: z.string().min(1),
28
- labelFormat: z.enum(["pdf", "zpl", "png"]).optional()
30
+ labelFormat: z.enum(["pdf", "zpl", "png"]).optional(),
31
+ senderPhone: z.string().optional(),
32
+ senderEmail: z.string().optional(),
33
+ receiverPhone: z.string().optional(),
34
+ receiverEmail: z.string().optional(),
35
+ targetPoint: z.string().optional(),
36
+ c2cSendingMethod: z.enum(["parcel_locker", "dispatch_order", "pop", "any_point"]).optional()
29
37
  });
30
38
  const trackingQuerySchema = z.object({
31
39
  providerKey: z.string().min(1),
@@ -40,10 +48,17 @@ const cancelShipmentSchema = z.object({
40
48
  shipmentId: z.string().uuid(),
41
49
  reason: z.string().max(200).optional()
42
50
  });
51
+ const searchDropOffPointsQuerySchema = z.object({
52
+ providerKey: z.string().min(1),
53
+ query: z.string().optional(),
54
+ type: z.string().optional(),
55
+ postCode: z.string().optional()
56
+ });
43
57
  export {
44
58
  calculateRatesSchema,
45
59
  cancelShipmentSchema,
46
60
  createShipmentSchema,
61
+ searchDropOffPointsQuerySchema,
47
62
  trackingQuerySchema
48
63
  };
49
64
  //# sourceMappingURL=validators.js.map
@@ -1,7 +1,7 @@
1
1
  {
2
2
  "version": 3,
3
3
  "sources": ["../../../../src/modules/shipping_carriers/data/validators.ts"],
4
- "sourcesContent": ["import { z } from 'zod'\n\nconst addressSchema = z.object({\n countryCode: z.string().min(2).max(3),\n postalCode: z.string().min(1),\n city: z.string().min(1),\n line1: z.string().min(1),\n line2: z.string().optional(),\n})\n\nconst packageSchema = z.object({\n weightKg: z.number().positive(),\n lengthCm: z.number().positive(),\n widthCm: z.number().positive(),\n heightCm: z.number().positive(),\n})\n\nexport const calculateRatesSchema = z.object({\n providerKey: z.string().min(1),\n origin: addressSchema,\n destination: addressSchema,\n packages: z.array(packageSchema).min(1),\n})\n\nexport const createShipmentSchema = z.object({\n providerKey: z.string().min(1),\n orderId: z.string().uuid(),\n origin: addressSchema,\n destination: addressSchema,\n packages: z.array(packageSchema).min(1),\n serviceCode: z.string().min(1),\n labelFormat: z.enum(['pdf', 'zpl', 'png']).optional(),\n})\n\nexport const trackingQuerySchema = z.object({\n providerKey: z.string().min(1),\n shipmentId: z.string().uuid().optional(),\n trackingNumber: z.string().min(1).optional(),\n}).refine((value) => Boolean(value.shipmentId || value.trackingNumber), {\n message: 'shipmentId or trackingNumber is required',\n path: ['shipmentId'],\n})\n\nexport const cancelShipmentSchema = z.object({\n providerKey: z.string().min(1),\n shipmentId: z.string().uuid(),\n reason: z.string().max(200).optional(),\n})\n"],
5
- "mappings": "AAAA,SAAS,SAAS;AAElB,MAAM,gBAAgB,EAAE,OAAO;AAAA,EAC7B,aAAa,EAAE,OAAO,EAAE,IAAI,CAAC,EAAE,IAAI,CAAC;AAAA,EACpC,YAAY,EAAE,OAAO,EAAE,IAAI,CAAC;AAAA,EAC5B,MAAM,EAAE,OAAO,EAAE,IAAI,CAAC;AAAA,EACtB,OAAO,EAAE,OAAO,EAAE,IAAI,CAAC;AAAA,EACvB,OAAO,EAAE,OAAO,EAAE,SAAS;AAC7B,CAAC;AAED,MAAM,gBAAgB,EAAE,OAAO;AAAA,EAC7B,UAAU,EAAE,OAAO,EAAE,SAAS;AAAA,EAC9B,UAAU,EAAE,OAAO,EAAE,SAAS;AAAA,EAC9B,SAAS,EAAE,OAAO,EAAE,SAAS;AAAA,EAC7B,UAAU,EAAE,OAAO,EAAE,SAAS;AAChC,CAAC;AAEM,MAAM,uBAAuB,EAAE,OAAO;AAAA,EAC3C,aAAa,EAAE,OAAO,EAAE,IAAI,CAAC;AAAA,EAC7B,QAAQ;AAAA,EACR,aAAa;AAAA,EACb,UAAU,EAAE,MAAM,aAAa,EAAE,IAAI,CAAC;AACxC,CAAC;AAEM,MAAM,uBAAuB,EAAE,OAAO;AAAA,EAC3C,aAAa,EAAE,OAAO,EAAE,IAAI,CAAC;AAAA,EAC7B,SAAS,EAAE,OAAO,EAAE,KAAK;AAAA,EACzB,QAAQ;AAAA,EACR,aAAa;AAAA,EACb,UAAU,EAAE,MAAM,aAAa,EAAE,IAAI,CAAC;AAAA,EACtC,aAAa,EAAE,OAAO,EAAE,IAAI,CAAC;AAAA,EAC7B,aAAa,EAAE,KAAK,CAAC,OAAO,OAAO,KAAK,CAAC,EAAE,SAAS;AACtD,CAAC;AAEM,MAAM,sBAAsB,EAAE,OAAO;AAAA,EAC1C,aAAa,EAAE,OAAO,EAAE,IAAI,CAAC;AAAA,EAC7B,YAAY,EAAE,OAAO,EAAE,KAAK,EAAE,SAAS;AAAA,EACvC,gBAAgB,EAAE,OAAO,EAAE,IAAI,CAAC,EAAE,SAAS;AAC7C,CAAC,EAAE,OAAO,CAAC,UAAU,QAAQ,MAAM,cAAc,MAAM,cAAc,GAAG;AAAA,EACtE,SAAS;AAAA,EACT,MAAM,CAAC,YAAY;AACrB,CAAC;AAEM,MAAM,uBAAuB,EAAE,OAAO;AAAA,EAC3C,aAAa,EAAE,OAAO,EAAE,IAAI,CAAC;AAAA,EAC7B,YAAY,EAAE,OAAO,EAAE,KAAK;AAAA,EAC5B,QAAQ,EAAE,OAAO,EAAE,IAAI,GAAG,EAAE,SAAS;AACvC,CAAC;",
4
+ "sourcesContent": ["import { z } from 'zod'\n\nconst addressSchema = z.object({\n countryCode: z.string().min(2).max(3),\n postalCode: z.string().min(1),\n city: z.string().min(1),\n line1: z.string().min(1),\n line2: z.string().optional(),\n})\n\nconst packageSchema = z.object({\n weightKg: z.number().positive(),\n lengthCm: z.number().positive(),\n widthCm: z.number().positive(),\n heightCm: z.number().positive(),\n})\n\nexport const calculateRatesSchema = z.object({\n providerKey: z.string().min(1),\n origin: addressSchema,\n destination: addressSchema,\n packages: z.array(packageSchema).min(1),\n receiverPhone: z.string().optional(),\n receiverEmail: z.string().optional(),\n})\n\nexport const createShipmentSchema = z.object({\n providerKey: z.string().min(1),\n orderId: z.string().uuid(),\n origin: addressSchema,\n destination: addressSchema,\n packages: z.array(packageSchema).min(1),\n serviceCode: z.string().min(1),\n labelFormat: z.enum(['pdf', 'zpl', 'png']).optional(),\n senderPhone: z.string().optional(),\n senderEmail: z.string().optional(),\n receiverPhone: z.string().optional(),\n receiverEmail: z.string().optional(),\n targetPoint: z.string().optional(),\n c2cSendingMethod: z.enum(['parcel_locker', 'dispatch_order', 'pop', 'any_point']).optional(),\n})\n\nexport const trackingQuerySchema = z.object({\n providerKey: z.string().min(1),\n shipmentId: z.string().uuid().optional(),\n trackingNumber: z.string().min(1).optional(),\n}).refine((value) => Boolean(value.shipmentId || value.trackingNumber), {\n message: 'shipmentId or trackingNumber is required',\n path: ['shipmentId'],\n})\n\nexport const cancelShipmentSchema = z.object({\n providerKey: z.string().min(1),\n shipmentId: z.string().uuid(),\n reason: z.string().max(200).optional(),\n})\n\nexport const searchDropOffPointsQuerySchema = z.object({\n providerKey: z.string().min(1),\n query: z.string().optional(),\n type: z.string().optional(),\n postCode: z.string().optional(),\n})\n"],
5
+ "mappings": "AAAA,SAAS,SAAS;AAElB,MAAM,gBAAgB,EAAE,OAAO;AAAA,EAC7B,aAAa,EAAE,OAAO,EAAE,IAAI,CAAC,EAAE,IAAI,CAAC;AAAA,EACpC,YAAY,EAAE,OAAO,EAAE,IAAI,CAAC;AAAA,EAC5B,MAAM,EAAE,OAAO,EAAE,IAAI,CAAC;AAAA,EACtB,OAAO,EAAE,OAAO,EAAE,IAAI,CAAC;AAAA,EACvB,OAAO,EAAE,OAAO,EAAE,SAAS;AAC7B,CAAC;AAED,MAAM,gBAAgB,EAAE,OAAO;AAAA,EAC7B,UAAU,EAAE,OAAO,EAAE,SAAS;AAAA,EAC9B,UAAU,EAAE,OAAO,EAAE,SAAS;AAAA,EAC9B,SAAS,EAAE,OAAO,EAAE,SAAS;AAAA,EAC7B,UAAU,EAAE,OAAO,EAAE,SAAS;AAChC,CAAC;AAEM,MAAM,uBAAuB,EAAE,OAAO;AAAA,EAC3C,aAAa,EAAE,OAAO,EAAE,IAAI,CAAC;AAAA,EAC7B,QAAQ;AAAA,EACR,aAAa;AAAA,EACb,UAAU,EAAE,MAAM,aAAa,EAAE,IAAI,CAAC;AAAA,EACtC,eAAe,EAAE,OAAO,EAAE,SAAS;AAAA,EACnC,eAAe,EAAE,OAAO,EAAE,SAAS;AACrC,CAAC;AAEM,MAAM,uBAAuB,EAAE,OAAO;AAAA,EAC3C,aAAa,EAAE,OAAO,EAAE,IAAI,CAAC;AAAA,EAC7B,SAAS,EAAE,OAAO,EAAE,KAAK;AAAA,EACzB,QAAQ;AAAA,EACR,aAAa;AAAA,EACb,UAAU,EAAE,MAAM,aAAa,EAAE,IAAI,CAAC;AAAA,EACtC,aAAa,EAAE,OAAO,EAAE,IAAI,CAAC;AAAA,EAC7B,aAAa,EAAE,KAAK,CAAC,OAAO,OAAO,KAAK,CAAC,EAAE,SAAS;AAAA,EACpD,aAAa,EAAE,OAAO,EAAE,SAAS;AAAA,EACjC,aAAa,EAAE,OAAO,EAAE,SAAS;AAAA,EACjC,eAAe,EAAE,OAAO,EAAE,SAAS;AAAA,EACnC,eAAe,EAAE,OAAO,EAAE,SAAS;AAAA,EACnC,aAAa,EAAE,OAAO,EAAE,SAAS;AAAA,EACjC,kBAAkB,EAAE,KAAK,CAAC,iBAAiB,kBAAkB,OAAO,WAAW,CAAC,EAAE,SAAS;AAC7F,CAAC;AAEM,MAAM,sBAAsB,EAAE,OAAO;AAAA,EAC1C,aAAa,EAAE,OAAO,EAAE,IAAI,CAAC;AAAA,EAC7B,YAAY,EAAE,OAAO,EAAE,KAAK,EAAE,SAAS;AAAA,EACvC,gBAAgB,EAAE,OAAO,EAAE,IAAI,CAAC,EAAE,SAAS;AAC7C,CAAC,EAAE,OAAO,CAAC,UAAU,QAAQ,MAAM,cAAc,MAAM,cAAc,GAAG;AAAA,EACtE,SAAS;AAAA,EACT,MAAM,CAAC,YAAY;AACrB,CAAC;AAEM,MAAM,uBAAuB,EAAE,OAAO;AAAA,EAC3C,aAAa,EAAE,OAAO,EAAE,IAAI,CAAC;AAAA,EAC7B,YAAY,EAAE,OAAO,EAAE,KAAK;AAAA,EAC5B,QAAQ,EAAE,OAAO,EAAE,IAAI,GAAG,EAAE,SAAS;AACvC,CAAC;AAEM,MAAM,iCAAiC,EAAE,OAAO;AAAA,EACrD,aAAa,EAAE,OAAO,EAAE,IAAI,CAAC;AAAA,EAC7B,OAAO,EAAE,OAAO,EAAE,SAAS;AAAA,EAC3B,MAAM,EAAE,OAAO,EAAE,SAAS;AAAA,EAC1B,UAAU,EAAE,OAAO,EAAE,SAAS;AAChC,CAAC;",
6
6
  "names": []
7
7
  }
@@ -0,0 +1,76 @@
1
+ "use client";
2
+ import { jsx, jsxs } from "react/jsx-runtime";
3
+ import { Input } from "@open-mercato/ui/primitives/input";
4
+ import { useT } from "@open-mercato/shared/lib/i18n/context";
5
+ const AddressFields = (props) => {
6
+ const { prefix, address, onChange, disabled } = props;
7
+ const t = useT();
8
+ return /* @__PURE__ */ jsxs("div", { className: "grid gap-3 sm:grid-cols-2", children: [
9
+ /* @__PURE__ */ jsxs("div", { className: "sm:col-span-2", children: [
10
+ /* @__PURE__ */ jsx("label", { htmlFor: `${prefix}-line1`, className: "mb-1 block text-xs font-medium text-muted-foreground", children: t("shipping_carriers.create.field.addressLine1", "Address line 1") }),
11
+ /* @__PURE__ */ jsx(
12
+ Input,
13
+ {
14
+ id: `${prefix}-line1`,
15
+ value: address.line1,
16
+ onChange: (event) => onChange({ ...address, line1: event.target.value }),
17
+ disabled
18
+ }
19
+ )
20
+ ] }),
21
+ /* @__PURE__ */ jsxs("div", { className: "sm:col-span-2", children: [
22
+ /* @__PURE__ */ jsx("label", { htmlFor: `${prefix}-line2`, className: "mb-1 block text-xs font-medium text-muted-foreground", children: t("shipping_carriers.create.field.addressLine2", "Address line 2") }),
23
+ /* @__PURE__ */ jsx(
24
+ Input,
25
+ {
26
+ id: `${prefix}-line2`,
27
+ value: address.line2 ?? "",
28
+ onChange: (event) => onChange({ ...address, line2: event.target.value || void 0 }),
29
+ disabled
30
+ }
31
+ )
32
+ ] }),
33
+ /* @__PURE__ */ jsxs("div", { children: [
34
+ /* @__PURE__ */ jsx("label", { htmlFor: `${prefix}-city`, className: "mb-1 block text-xs font-medium text-muted-foreground", children: t("shipping_carriers.create.field.city", "City") }),
35
+ /* @__PURE__ */ jsx(
36
+ Input,
37
+ {
38
+ id: `${prefix}-city`,
39
+ value: address.city,
40
+ onChange: (event) => onChange({ ...address, city: event.target.value }),
41
+ disabled
42
+ }
43
+ )
44
+ ] }),
45
+ /* @__PURE__ */ jsxs("div", { children: [
46
+ /* @__PURE__ */ jsx("label", { htmlFor: `${prefix}-postal`, className: "mb-1 block text-xs font-medium text-muted-foreground", children: t("shipping_carriers.create.field.postalCode", "Postal code") }),
47
+ /* @__PURE__ */ jsx(
48
+ Input,
49
+ {
50
+ id: `${prefix}-postal`,
51
+ value: address.postalCode,
52
+ onChange: (event) => onChange({ ...address, postalCode: event.target.value }),
53
+ disabled
54
+ }
55
+ )
56
+ ] }),
57
+ /* @__PURE__ */ jsxs("div", { children: [
58
+ /* @__PURE__ */ jsx("label", { htmlFor: `${prefix}-country`, className: "mb-1 block text-xs font-medium text-muted-foreground", children: t("shipping_carriers.create.field.countryCode", "Country code (ISO)") }),
59
+ /* @__PURE__ */ jsx(
60
+ Input,
61
+ {
62
+ id: `${prefix}-country`,
63
+ value: address.countryCode,
64
+ placeholder: "PL",
65
+ maxLength: 3,
66
+ onChange: (event) => onChange({ ...address, countryCode: event.target.value.toUpperCase() }),
67
+ disabled
68
+ }
69
+ )
70
+ ] })
71
+ ] });
72
+ };
73
+ export {
74
+ AddressFields
75
+ };
76
+ //# sourceMappingURL=AddressFields.js.map
@@ -0,0 +1,7 @@
1
+ {
2
+ "version": 3,
3
+ "sources": ["../../../../../../src/modules/shipping_carriers/lib/shipment-wizard/components/AddressFields.tsx"],
4
+ "sourcesContent": ["\"use client\"\n\nimport { Input } from '@open-mercato/ui/primitives/input'\nimport { useT } from '@open-mercato/shared/lib/i18n/context'\nimport type { AddressFieldsProps } from '../types'\n\nexport const AddressFields = (props: AddressFieldsProps) => {\n const { prefix, address, onChange, disabled } = props\n const t = useT()\n\n return (\n <div className=\"grid gap-3 sm:grid-cols-2\">\n <div className=\"sm:col-span-2\">\n <label htmlFor={`${prefix}-line1`} className=\"mb-1 block text-xs font-medium text-muted-foreground\">\n {t('shipping_carriers.create.field.addressLine1', 'Address line 1')}\n </label>\n <Input\n id={`${prefix}-line1`}\n value={address.line1}\n onChange={(event) => onChange({ ...address, line1: event.target.value })}\n disabled={disabled}\n />\n </div>\n <div className=\"sm:col-span-2\">\n <label htmlFor={`${prefix}-line2`} className=\"mb-1 block text-xs font-medium text-muted-foreground\">\n {t('shipping_carriers.create.field.addressLine2', 'Address line 2')}\n </label>\n <Input\n id={`${prefix}-line2`}\n value={address.line2 ?? ''}\n onChange={(event) => onChange({ ...address, line2: event.target.value || undefined })}\n disabled={disabled}\n />\n </div>\n <div>\n <label htmlFor={`${prefix}-city`} className=\"mb-1 block text-xs font-medium text-muted-foreground\">\n {t('shipping_carriers.create.field.city', 'City')}\n </label>\n <Input\n id={`${prefix}-city`}\n value={address.city}\n onChange={(event) => onChange({ ...address, city: event.target.value })}\n disabled={disabled}\n />\n </div>\n <div>\n <label htmlFor={`${prefix}-postal`} className=\"mb-1 block text-xs font-medium text-muted-foreground\">\n {t('shipping_carriers.create.field.postalCode', 'Postal code')}\n </label>\n <Input\n id={`${prefix}-postal`}\n value={address.postalCode}\n onChange={(event) => onChange({ ...address, postalCode: event.target.value })}\n disabled={disabled}\n />\n </div>\n <div>\n <label htmlFor={`${prefix}-country`} className=\"mb-1 block text-xs font-medium text-muted-foreground\">\n {t('shipping_carriers.create.field.countryCode', 'Country code (ISO)')}\n </label>\n <Input\n id={`${prefix}-country`}\n value={address.countryCode}\n placeholder=\"PL\"\n maxLength={3}\n onChange={(event) => onChange({ ...address, countryCode: event.target.value.toUpperCase() })}\n disabled={disabled}\n />\n </div>\n </div>\n )\n}\n"],
5
+ "mappings": ";AAYM,SACE,KADF;AAVN,SAAS,aAAa;AACtB,SAAS,YAAY;AAGd,MAAM,gBAAgB,CAAC,UAA8B;AAC1D,QAAM,EAAE,QAAQ,SAAS,UAAU,SAAS,IAAI;AAChD,QAAM,IAAI,KAAK;AAEf,SACE,qBAAC,SAAI,WAAU,6BACb;AAAA,yBAAC,SAAI,WAAU,iBACb;AAAA,0BAAC,WAAM,SAAS,GAAG,MAAM,UAAU,WAAU,wDAC1C,YAAE,+CAA+C,gBAAgB,GACpE;AAAA,MACA;AAAA,QAAC;AAAA;AAAA,UACC,IAAI,GAAG,MAAM;AAAA,UACb,OAAO,QAAQ;AAAA,UACf,UAAU,CAAC,UAAU,SAAS,EAAE,GAAG,SAAS,OAAO,MAAM,OAAO,MAAM,CAAC;AAAA,UACvE;AAAA;AAAA,MACF;AAAA,OACF;AAAA,IACA,qBAAC,SAAI,WAAU,iBACb;AAAA,0BAAC,WAAM,SAAS,GAAG,MAAM,UAAU,WAAU,wDAC1C,YAAE,+CAA+C,gBAAgB,GACpE;AAAA,MACA;AAAA,QAAC;AAAA;AAAA,UACC,IAAI,GAAG,MAAM;AAAA,UACb,OAAO,QAAQ,SAAS;AAAA,UACxB,UAAU,CAAC,UAAU,SAAS,EAAE,GAAG,SAAS,OAAO,MAAM,OAAO,SAAS,OAAU,CAAC;AAAA,UACpF;AAAA;AAAA,MACF;AAAA,OACF;AAAA,IACA,qBAAC,SACC;AAAA,0BAAC,WAAM,SAAS,GAAG,MAAM,SAAS,WAAU,wDACzC,YAAE,uCAAuC,MAAM,GAClD;AAAA,MACA;AAAA,QAAC;AAAA;AAAA,UACC,IAAI,GAAG,MAAM;AAAA,UACb,OAAO,QAAQ;AAAA,UACf,UAAU,CAAC,UAAU,SAAS,EAAE,GAAG,SAAS,MAAM,MAAM,OAAO,MAAM,CAAC;AAAA,UACtE;AAAA;AAAA,MACF;AAAA,OACF;AAAA,IACA,qBAAC,SACC;AAAA,0BAAC,WAAM,SAAS,GAAG,MAAM,WAAW,WAAU,wDAC3C,YAAE,6CAA6C,aAAa,GAC/D;AAAA,MACA;AAAA,QAAC;AAAA;AAAA,UACC,IAAI,GAAG,MAAM;AAAA,UACb,OAAO,QAAQ;AAAA,UACf,UAAU,CAAC,UAAU,SAAS,EAAE,GAAG,SAAS,YAAY,MAAM,OAAO,MAAM,CAAC;AAAA,UAC5E;AAAA;AAAA,MACF;AAAA,OACF;AAAA,IACA,qBAAC,SACC;AAAA,0BAAC,WAAM,SAAS,GAAG,MAAM,YAAY,WAAU,wDAC5C,YAAE,8CAA8C,oBAAoB,GACvE;AAAA,MACA;AAAA,QAAC;AAAA;AAAA,UACC,IAAI,GAAG,MAAM;AAAA,UACb,OAAO,QAAQ;AAAA,UACf,aAAY;AAAA,UACZ,WAAW;AAAA,UACX,UAAU,CAAC,UAAU,SAAS,EAAE,GAAG,SAAS,aAAa,MAAM,OAAO,MAAM,YAAY,EAAE,CAAC;AAAA,UAC3F;AAAA;AAAA,MACF;AAAA,OACF;AAAA,KACF;AAEJ;",
6
+ "names": []
7
+ }