@secondcloset/types 2.5.8-beta-epic29357-0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (76) hide show
  1. package/.vscode/settings.json +5 -0
  2. package/README.md +13 -0
  3. package/package.json +24 -0
  4. package/src/_common/address.ts +19 -0
  5. package/src/_common/credential.ts +12 -0
  6. package/src/_common/facility.ts +38 -0
  7. package/src/_common/file.ts +7 -0
  8. package/src/_common/image.ts +7 -0
  9. package/src/_common/index.ts +9 -0
  10. package/src/_common/note.ts +9 -0
  11. package/src/_common/organization.ts +63 -0
  12. package/src/_common/serviceArea.ts +1 -0
  13. package/src/_common/user.ts +26 -0
  14. package/src/fulfillment/appointment/appointment.ts +77 -0
  15. package/src/fulfillment/appointment/appointmentStatus.ts +21 -0
  16. package/src/fulfillment/appointment/appointmentType.ts +7 -0
  17. package/src/fulfillment/appointment/index.ts +3 -0
  18. package/src/fulfillment/asn/asn.ts +68 -0
  19. package/src/fulfillment/asn/asnItem.ts +15 -0
  20. package/src/fulfillment/asn/index.ts +2 -0
  21. package/src/fulfillment/index.ts +6 -0
  22. package/src/fulfillment/order/customer.ts +23 -0
  23. package/src/fulfillment/order/index.ts +3 -0
  24. package/src/fulfillment/order/order.ts +79 -0
  25. package/src/fulfillment/order/orderItem.ts +16 -0
  26. package/src/fulfillment/product/index.ts +2 -0
  27. package/src/fulfillment/product/product.ts +86 -0
  28. package/src/fulfillment/product/stock.ts +21 -0
  29. package/src/fulfillment/shipment/carrier.ts +17 -0
  30. package/src/fulfillment/shipment/index.ts +7 -0
  31. package/src/fulfillment/shipment/package.ts +32 -0
  32. package/src/fulfillment/shipment/packageIssue.ts +11 -0
  33. package/src/fulfillment/shipment/shipment.ts +56 -0
  34. package/src/fulfillment/shipment/shipmentItem.ts +42 -0
  35. package/src/fulfillment/shipment/shippingMethod.ts +136 -0
  36. package/src/fulfillment/warehouseReceivingOrder/incomingShipment.ts +35 -0
  37. package/src/fulfillment/warehouseReceivingOrder/index.ts +2 -0
  38. package/src/fulfillment/warehouseReceivingOrder/warehouseReceivingOrder.ts +34 -0
  39. package/src/index.ts +5 -0
  40. package/src/logistics/availability.ts +18 -0
  41. package/src/logistics/index.ts +2 -0
  42. package/src/logistics/shippingRate.ts +19 -0
  43. package/src/storage/address.ts +9 -0
  44. package/src/storage/appointment/appointment.ts +100 -0
  45. package/src/storage/appointment/appointmentItem.ts +34 -0
  46. package/src/storage/appointment/appointmentStatus.ts +21 -0
  47. package/src/storage/appointment/appointmentType.ts +8 -0
  48. package/src/storage/appointment/index.ts +4 -0
  49. package/src/storage/availability.ts +19 -0
  50. package/src/storage/categoryItem.ts +12 -0
  51. package/src/storage/closet.ts +16 -0
  52. package/src/storage/index.ts +8 -0
  53. package/src/storage/inventoryItem.ts +41 -0
  54. package/src/storage/order/index.ts +2 -0
  55. package/src/storage/order/order.ts +29 -0
  56. package/src/storage/order/orderItem.ts +26 -0
  57. package/src/storage/product.ts +26 -0
  58. package/src/warehouse/asnProcessLog.ts +15 -0
  59. package/src/warehouse/bin.ts +7 -0
  60. package/src/warehouse/index.ts +17 -0
  61. package/src/warehouse/location.ts +20 -0
  62. package/src/warehouse/locationItem.ts +23 -0
  63. package/src/warehouse/locationTemplate.ts +8 -0
  64. package/src/warehouse/manualItem.ts +20 -0
  65. package/src/warehouse/organization.ts +31 -0
  66. package/src/warehouse/pallet.ts +11 -0
  67. package/src/warehouse/palletRequestLog.ts +15 -0
  68. package/src/warehouse/product.ts +14 -0
  69. package/src/warehouse/return.ts +78 -0
  70. package/src/warehouse/shipmentProductsTracking.ts +18 -0
  71. package/src/warehouse/stock.ts +7 -0
  72. package/src/warehouse/supply.ts +41 -0
  73. package/src/warehouse/supplyStock.ts +10 -0
  74. package/src/warehouse/supplyTransaction.ts +14 -0
  75. package/src/warehouse/transaction.ts +25 -0
  76. package/tsconfig.json +17 -0
@@ -0,0 +1,5 @@
1
+ {
2
+ "cSpell.words": [
3
+ "firstname"
4
+ ]
5
+ }
package/README.md ADDED
@@ -0,0 +1,13 @@
1
+
2
+
3
+ # Install
4
+ `npm i @secondcloset/types`
5
+
6
+ # Usage
7
+ ```
8
+ import { Storage, Fulfillment, Warehouse, Common } from "@secondcloset/types"
9
+ type Appointment = Storage.Appointment;
10
+ type Order = Storage.Order;
11
+ ...
12
+ type Order = Fulfillment.Order;
13
+ ```
package/package.json ADDED
@@ -0,0 +1,24 @@
1
+ {
2
+ "name": "@secondcloset/types",
3
+ "version": "2.5.8-beta-epic29357-0",
4
+ "description": "secondcloset type declaration and definitions",
5
+ "main": "src/index.ts",
6
+ "scripts": {
7
+ "test": "echo \"Error: no test specified\" && exit 1",
8
+ "prepublishOnly": "tsc"
9
+ },
10
+ "repository": {
11
+ "type": "git",
12
+ "url": "git+https://github.com/SecondCloset/types.git"
13
+ },
14
+ "keywords": [],
15
+ "author": "",
16
+ "license": "ISC",
17
+ "bugs": {
18
+ "url": "https://github.com/SecondCloset/types/issues"
19
+ },
20
+ "homepage": "https://github.com/SecondCloset/types#readme",
21
+ "devDependencies": {
22
+ "typescript": "^3.9.5"
23
+ }
24
+ }
@@ -0,0 +1,19 @@
1
+ import { ServiceArea } from "./serviceArea";
2
+
3
+ export interface Coordinates {
4
+ lat: number;
5
+ lng: number;
6
+ }
7
+
8
+ export interface BaseAddress {
9
+ id: string;
10
+ apartment_number: string | null;
11
+ address: string;
12
+ city: string;
13
+ province: string;
14
+ country: string;
15
+ postal_code: string;
16
+ phone_number: string;
17
+ coordinates: Coordinates;
18
+ service_area: ServiceArea | null;
19
+ }
@@ -0,0 +1,12 @@
1
+ import { User } from "./user";
2
+
3
+ interface Token {
4
+ token: string;
5
+ created_at: string;
6
+ }
7
+
8
+ export interface Credential {
9
+ token?: Token;
10
+ user?: User;
11
+ rememberMe?: boolean;
12
+ }
@@ -0,0 +1,38 @@
1
+ import { ServiceArea } from "./serviceArea";
2
+
3
+ export type FacilityCode =
4
+ | "yyz1"
5
+ | "yyz2"
6
+ | "yyz3"
7
+ | "yyz4"
8
+ | "yvr1"
9
+ | "yvr2"
10
+ | "yow1"
11
+ | "yul1"
12
+ | "unknown";
13
+
14
+ export type DeprecatedFacilityCode = "yyz1" | "yyz2";
15
+
16
+ export type FacilityCity =
17
+ | "Toronto"
18
+ | "Mississauga"
19
+ | "Vancouver"
20
+ | "Ottawa"
21
+ | "Montreal";
22
+
23
+ export interface Facility {
24
+ id: number;
25
+ name: FacilityCode;
26
+ phone: string;
27
+ email: string;
28
+ address: {
29
+ table: {
30
+ street: string;
31
+ city: FacilityCity;
32
+ province: string;
33
+ country: string;
34
+ postal_code: string;
35
+ };
36
+ };
37
+ service_area: ServiceArea;
38
+ }
@@ -0,0 +1,7 @@
1
+ export interface File {
2
+ access: string;
3
+ created_at: string;
4
+ id: string;
5
+ updated_at: string;
6
+ url: string;
7
+ }
@@ -0,0 +1,7 @@
1
+ export interface BaseImage {
2
+ id: string;
3
+ url: string;
4
+ created_at: string;
5
+ updated_at: string;
6
+ access: "external" | "internal";
7
+ }
@@ -0,0 +1,9 @@
1
+ export * from "./facility";
2
+ export * from "./serviceArea";
3
+ export * from "./user";
4
+ export * from "./address";
5
+ export * from "./image";
6
+ export * from "./organization";
7
+ export * from "./credential";
8
+ export * from "./file";
9
+ export * from "./note";
@@ -0,0 +1,9 @@
1
+ import { BaseUser } from "./";
2
+
3
+ export interface BaseNote {
4
+ created_at: string;
5
+ id: string;
6
+ text: string;
7
+ updated_at: string;
8
+ user: BaseUser;
9
+ }
@@ -0,0 +1,63 @@
1
+ import { BaseImage } from "./image";
2
+ import { BaseAddress } from "./address";
3
+ import { BaseUser } from "./user";
4
+ import { Carrier } from "../fulfillment";
5
+
6
+ export type OrganizationConfigKey =
7
+ | "default_fulfilled_from"
8
+ | "auto_fulfill_orders";
9
+
10
+ export interface OrganizationConfig {
11
+ key: OrganizationConfigKey;
12
+ value: string;
13
+ }
14
+
15
+ export interface Permission {
16
+ id: string;
17
+ name: string;
18
+ }
19
+
20
+ export interface OrganizationAddress extends BaseAddress {
21
+ building_type: string;
22
+ care_of: string;
23
+ elevator_access: boolean;
24
+ is_primary: boolean;
25
+ partner_name: string;
26
+ }
27
+
28
+ export interface GeofilterConstraint {
29
+ country: string;
30
+ provinces: string[];
31
+ }
32
+
33
+ export interface SCServiceTier {
34
+ threshold?: boolean;
35
+ room_of_choice?: boolean;
36
+ white_glove?: boolean;
37
+ to_the_door?: boolean;
38
+ }
39
+
40
+ export interface BaseOrganization {
41
+ created_at: string;
42
+ email: string;
43
+ id: string;
44
+ name: string;
45
+ packing_notes: string;
46
+ phone_number: string;
47
+ logo?: BaseImage;
48
+ }
49
+
50
+ export interface Organization extends BaseOrganization {
51
+ addresses: OrganizationAddress[];
52
+ carriers: Carrier[];
53
+ users: BaseUser[];
54
+ recommended_shipping_methods?: {
55
+ parcel: boolean;
56
+ freight: boolean;
57
+ sc_last_mile: boolean;
58
+ sc_service_tier?: SCServiceTier;
59
+ };
60
+ configurations_attributes: OrganizationConfig[];
61
+ permissions: Permission[];
62
+ geofilter_constraints?: GeofilterConstraint[];
63
+ }
@@ -0,0 +1 @@
1
+ export type ServiceArea = "yyz" | "yvr" | "yow" | "yul";
@@ -0,0 +1,26 @@
1
+ export interface BaseUser {
2
+ id: string;
3
+ first_name: string;
4
+ last_name: string;
5
+ user_code: string;
6
+ email: string;
7
+ role: string;
8
+ phone_number: string | null;
9
+ }
10
+
11
+ export interface User extends BaseUser {
12
+ business_name: string | null;
13
+ business_type: string | null;
14
+ business_user: boolean;
15
+ closets: number;
16
+ confirmed: boolean;
17
+ created_at: string;
18
+ legacy: boolean;
19
+ orders: number;
20
+ organization_id: string;
21
+ organization_role: string;
22
+ payment_issue: boolean | null;
23
+ stripe_customer_id: string;
24
+ subrole: string;
25
+ updated_at: string;
26
+ }
@@ -0,0 +1,77 @@
1
+ import { AppointmentType } from "./appointmentType";
2
+ import { AppointmentStatus } from "./appointmentStatus";
3
+ import { Shipment, ScServiceCode } from "../shipment";
4
+ import { Order } from "../order";
5
+ import { AppointmentSlot } from "../../storage";
6
+ import { BaseImage, BaseNote } from "../../_common";
7
+
8
+ export interface Appointment {
9
+ appointment_actions: string[];
10
+ arrived_time: string | null;
11
+ cancelled_at: string | null;
12
+ completed_at: string | null;
13
+ claim_number?: string;
14
+ created_at: string;
15
+ customer_segment: "business";
16
+ date: string;
17
+ delivery_service_level?: ScServiceCode;
18
+ driver_id: string | null;
19
+ end_time: string | null;
20
+ estimated_time: number;
21
+ failed_notes: string | null;
22
+ failed_reason: string | null;
23
+ field_ops_notes?: BaseNote[];
24
+ formatted_timeslot: string | null;
25
+ id: string;
26
+ incomplete_at: string | null;
27
+ issue_images?: BaseImage[];
28
+ job_type: AppointmentType;
29
+ location: Location;
30
+ movers: null;
31
+ num_movers: null;
32
+ number: string;
33
+ range_of_days_assigned_dates?: {
34
+ assigned_start_datetime: string;
35
+ assigned_end_datetime: string;
36
+ } | null;
37
+ range_of_days_start_date?: string | null;
38
+ range_of_days_end_date?: string | null;
39
+ rescheduled: boolean;
40
+ rescheduled_appointment_id: string | null;
41
+ shipment: Partial<Shipment>;
42
+ signature_image: any;
43
+ signature_url: string | null;
44
+ signed_at: string | null;
45
+ sms: boolean;
46
+ source: Partial<Order>;
47
+ start_time: string | null;
48
+ status: AppointmentStatus;
49
+ timerange: AppointmentSlot;
50
+ type: "fulfillment";
51
+ updated_at: string;
52
+ user_code: string;
53
+ user_email: string;
54
+ user_firstname: string;
55
+ user_id: string;
56
+ user_lastname: string;
57
+ verification_images?: BaseImage[];
58
+ }
59
+
60
+ export interface Location {
61
+ address: string;
62
+ cell_phone_number: string | null;
63
+ city: string;
64
+ contact_name: string;
65
+ coordinates: { lat: number; lng: number };
66
+ country: string;
67
+ created_at: string;
68
+ customer_id: string;
69
+ customer_phone_number: string;
70
+ evening_phone_number: string | null;
71
+ id: string;
72
+ phone_number: string;
73
+ postal_code: string;
74
+ province: string;
75
+ service_area: "yyz" | "yvr" | "yow" | "yul" | null;
76
+ updated_at: string;
77
+ }
@@ -0,0 +1,21 @@
1
+ export type AppointmentStatus =
2
+ | "request_received"
3
+ | "confirmed"
4
+ | "shipment_created"
5
+ | "fulfillment"
6
+ | "ready"
7
+ | "loaded"
8
+ | "cancelled"
9
+ | "scheduled"
10
+ | "fulfilled"
11
+ | "on_the_way"
12
+ | "active"
13
+ | "done"
14
+ | "staging"
15
+ | "completed"
16
+ | "completed_with_exceptions"
17
+ | "started"
18
+ | "arrived"
19
+ | "incomplete"
20
+ | "failed"
21
+ | "no_show";
@@ -0,0 +1,7 @@
1
+ export type AppointmentType =
2
+ | "reverse_logistics"
3
+ | "inventory_pick_up"
4
+ | "delivery"
5
+ | "cross_dock_delivery"
6
+ | "return_to_sender"
7
+ | "inventory_warehouse_receiving";
@@ -0,0 +1,3 @@
1
+ export * from "./appointment";
2
+ export * from "./appointmentStatus";
3
+ export * from "./appointmentType";
@@ -0,0 +1,68 @@
1
+ import { FacilityCode } from "../../_common/facility";
2
+ import { ASNItem } from "./asnItem";
3
+
4
+ export type ASNStatus =
5
+ | "draft"
6
+ | "awaiting"
7
+ | "arrived"
8
+ | "on_hold"
9
+ | "completed";
10
+
11
+ export type ASNShipmentType =
12
+ | "parcel"
13
+ | "pallet"
14
+ | "container"
15
+ | "floor_loaded"
16
+ | "drop_off";
17
+
18
+ export type ASNPalletPackingOption =
19
+ | "one_sku_per_pallet"
20
+ | "multiple_sku_per_pallet";
21
+
22
+ export type ASNBoxPackingOption = "one_sku_per_box" | "multiple_sku_per_box";
23
+
24
+ export interface AsnBol {
25
+ access: "external" | "internal";
26
+ created_at: string;
27
+ id: string;
28
+ updated_at: string;
29
+ url: string;
30
+ }
31
+
32
+ export interface TimelineEvent {
33
+ user_name: string;
34
+ user_is_admin: boolean;
35
+ event: string;
36
+ description: string;
37
+ created_at: string;
38
+ }
39
+
40
+ export interface ASN {
41
+ id: string;
42
+ status: ASNStatus;
43
+ number: string;
44
+ facility?: FacilityCode;
45
+ submitted_date?: string;
46
+ expected_arrival_date?: string;
47
+ actual_arrival_date?: string;
48
+ reference_number?: string;
49
+ po_number?: string;
50
+ container_size?: string;
51
+ box_packing_option?: ASNBoxPackingOption;
52
+ pallet_packing_option?: ASNPalletPackingOption;
53
+ shipment_type?: ASNShipmentType;
54
+ internal_notes?: string;
55
+ qty_under_received?: boolean;
56
+ qty_over_received?: boolean;
57
+ box_expected_quantity?: number;
58
+ box_received_quantity?: number;
59
+ pallet_expected_quantity?: number;
60
+ pallet_received_quantity?: number;
61
+ bols_attributes: AsnBol[];
62
+ current_step?: string;
63
+ created_at: string;
64
+ updated_at: string;
65
+ deleted_at?: string;
66
+ items_attributes: ASNItem[];
67
+ timeline?: TimelineEvent[];
68
+ }
@@ -0,0 +1,15 @@
1
+ export interface ASNItem {
2
+ id: string;
3
+ product_id: string;
4
+ product_name: string;
5
+ product_sku: string;
6
+ product_upc?: string;
7
+ product_scid: string;
8
+ expected_quantity: number;
9
+ received_quantity?: number;
10
+ damaged_quantity?: number;
11
+ lot_number?: string;
12
+ created_at: string;
13
+ updated_at: string;
14
+ deleted_at: string;
15
+ }
@@ -0,0 +1,2 @@
1
+ export * from "./asn";
2
+ export * from "./asnItem";
@@ -0,0 +1,6 @@
1
+ export * from "./shipment";
2
+ export * from "./product";
3
+ export * from "./order";
4
+ export * from "./appointment";
5
+ export * from "./warehouseReceivingOrder";
6
+ export * from "./asn";
@@ -0,0 +1,23 @@
1
+ import { BaseAddress } from "../../_common";
2
+
3
+ export interface Customer {
4
+ id: string;
5
+ user_id: string;
6
+ organization_id: string;
7
+ name: string;
8
+ email_address: string;
9
+ phone_number?: string;
10
+ created_at: string;
11
+ updated_at: string;
12
+ addresses?: CustomerAddress[];
13
+ }
14
+
15
+ export interface CustomerAddress extends BaseAddress {
16
+ cell_phone_number: string | null;
17
+ contact_name: string;
18
+ created_at: string;
19
+ customer_id: string;
20
+ customer_phone_number: string;
21
+ evening_phone_number: string | null;
22
+ updated_at: string;
23
+ }
@@ -0,0 +1,3 @@
1
+ export * from "./customer";
2
+ export * from "./orderItem";
3
+ export * from "./order";
@@ -0,0 +1,79 @@
1
+ import { Shipment, ScServiceCode } from "../shipment/shipment";
2
+ import { Customer } from "./customer";
3
+ import {
4
+ FacilityCode,
5
+ BaseAddress,
6
+ BaseUser,
7
+ Organization,
8
+ File,
9
+ } from "../../_common";
10
+ import { OrderItem } from "./orderItem";
11
+
12
+ export type ShipmentTag =
13
+ | "ready_to_fulfill"
14
+ | "unfulfilled_items"
15
+ | "processing_items"
16
+ | "items_fulfilled"
17
+ | "processing_return_items"
18
+ | "items_returned"
19
+ | "items_removed"
20
+ | "pending_inventory_receiving"
21
+ | "items_partially_fulfilled"
22
+ | "customer_booking";
23
+
24
+ export type OrderPlatform =
25
+ | "manual"
26
+ | "csv"
27
+ | "shopify"
28
+ | "centiro"
29
+ | "woo_commerce"
30
+ | "shipstaion"
31
+ | "external_api";
32
+
33
+ interface Address extends BaseAddress {
34
+ customer_id: string;
35
+ contact_name: string;
36
+ customer_phone_number: string | null;
37
+ evening_phone_number: string | null;
38
+ cell_phone_number: string | null;
39
+ created_at: string;
40
+ updated_at: string;
41
+ }
42
+
43
+ export interface Order {
44
+ id: string;
45
+ order_id: string;
46
+ external_order_number: string;
47
+ external_order_id: string | null;
48
+ notes: string;
49
+ internal_notes?: string;
50
+ platform: OrderPlatform;
51
+ external_platform_version: number | null;
52
+ parcel_type: string;
53
+ cancelled: boolean;
54
+ fulfilled_from: FacilityCode;
55
+ client_type: string | null;
56
+ insurance_value: number;
57
+ shipping_service: string | null;
58
+ signature_required?: boolean;
59
+ customer: Customer;
60
+ address: Address;
61
+ created_at: string;
62
+ updated_at: string;
63
+ organization: Organization;
64
+ overdue: boolean;
65
+ user: BaseUser;
66
+ status?: string;
67
+ shipment_tags: ShipmentTag[];
68
+ shipments: Shipment[];
69
+ items: OrderItem[];
70
+ files: File[];
71
+ stock_status:
72
+ | "in_stock"
73
+ | "partially_in_stock"
74
+ | "out_of_stock"
75
+ | "unknown_stock";
76
+ on_hold: boolean;
77
+ on_hold_at: string;
78
+ selected_service_code?: ScServiceCode;
79
+ }
@@ -0,0 +1,16 @@
1
+ import { Product } from "../product";
2
+ import { ShipmentActionType } from "../shipment";
3
+
4
+ export interface OrderItem {
5
+ id: string;
6
+ product: Product;
7
+ quantity: number;
8
+ attributes: string[];
9
+ return_reasons: string[];
10
+ available_actions: ShipmentActionType[];
11
+ actions_history: ShipmentActionType[];
12
+ virtual_kit_id: null | string;
13
+ available_quantity: number;
14
+ removed: boolean;
15
+ removed_reason: string;
16
+ }
@@ -0,0 +1,2 @@
1
+ export * from "./product";
2
+ export * from "./stock";
@@ -0,0 +1,86 @@
1
+ import { Stock } from "./stock";
2
+ import { BaseImage } from "../../_common";
3
+
4
+ export interface BaseProduct {
5
+ id: string;
6
+ organization_id: string;
7
+ scid: string;
8
+ sku: string;
9
+ upc: string;
10
+ name: string;
11
+ description: string;
12
+ platform: string;
13
+ active: boolean;
14
+ fragile: boolean;
15
+ dangerous: boolean;
16
+ liquid: boolean;
17
+ digital: boolean;
18
+ tracks_lot_numbers: boolean;
19
+ contains_battery: boolean;
20
+ external_product_id: string | null;
21
+ height: number;
22
+ length: number;
23
+ width: number;
24
+ weight: number;
25
+ weight_unit: string;
26
+ usd_value: number;
27
+ value: number;
28
+ cost: number;
29
+ wholesale_price: number;
30
+ retail_price: number;
31
+ hs_tariff_code: string;
32
+ customs_description: string | null;
33
+ images: BaseImage[];
34
+ packaging_criteria: string;
35
+ product_type: "base" | "kit";
36
+ stocks?: Stock[];
37
+ deleted_at: string;
38
+ created_at: string;
39
+ updated_at: string;
40
+ virtual_kits?: {
41
+ id: string;
42
+ organization_id: string;
43
+ scid: string;
44
+ sku: string;
45
+ name: string;
46
+ quantity_per_kit: number;
47
+ deleted_at: string | null;
48
+ created_at: string;
49
+ updated_at: string;
50
+ product_type: string;
51
+ }[];
52
+ required_parts?: { [productID: string]: number };
53
+ packaging_levels?: PackagingLevel[];
54
+ return_days?: number;
55
+ }
56
+
57
+ export interface Product extends BaseProduct {
58
+ base_products?: BaseProduct[];
59
+ }
60
+
61
+ export interface PackagingLevel {
62
+ id?: string;
63
+ product_id?: string;
64
+ product: {
65
+ id: string;
66
+ sku: string;
67
+ scid: string;
68
+ name: string;
69
+ tracks_lot_numbers: boolean;
70
+ };
71
+ level: "single_item" | "inner_pack" | "master_pack" | "pallet";
72
+ base_product_quantity: number;
73
+ sku: string;
74
+ name?: string;
75
+ description: string;
76
+ weight_value: string;
77
+ weight_unit: "lb" | "kg" | "g" | "mg" | "oz";
78
+ length_value: string;
79
+ length_unit: "m" | "in" | "ft" | "yd" | "mi";
80
+ height_value: string;
81
+ height_unit: "m" | "in" | "ft" | "yd" | "mi";
82
+ width_value: string;
83
+ width_unit: "m" | "in" | "ft" | "yd" | "mi";
84
+ created_at: string;
85
+ updated_at: string;
86
+ }