From d379097ec006c284564a94df32ea8c58e84e5e04 Mon Sep 17 00:00:00 2001 From: Justintime50 <39606064+Justintime50@users.noreply.github.com> Date: Mon, 10 Aug 2026 11:39:29 -0600 Subject: [PATCH 1/5] TSM-11 convert models group A to TypeScript --- src/models/{address.js => address.ts} | 2 +- src/models/{customs_info.js => customs_info.ts} | 0 src/models/{customs_item.js => customs_item.ts} | 0 src/models/{parcel.js => parcel.ts} | 2 +- src/models/{postage_label.js => postage_label.ts} | 0 src/models/{shipment.js => shipment.ts} | 6 ++++-- 6 files changed, 6 insertions(+), 4 deletions(-) rename src/models/{address.js => address.ts} (95%) rename src/models/{customs_info.js => customs_info.ts} (100%) rename src/models/{customs_item.js => customs_item.ts} (100%) rename src/models/{parcel.js => parcel.ts} (93%) rename src/models/{postage_label.js => postage_label.ts} (100%) rename src/models/{shipment.js => shipment.ts} (86%) diff --git a/src/models/address.js b/src/models/address.ts similarity index 95% rename from src/models/address.js rename to src/models/address.ts index aff20ae41..4dc5882e6 100644 --- a/src/models/address.js +++ b/src/models/address.ts @@ -14,7 +14,7 @@ export default class Address extends EasyPostObject { static country; static residential; static carrier_facility; - static name; + declare name: unknown; static company; static phone; static email; diff --git a/src/models/customs_info.js b/src/models/customs_info.ts similarity index 100% rename from src/models/customs_info.js rename to src/models/customs_info.ts diff --git a/src/models/customs_item.js b/src/models/customs_item.ts similarity index 100% rename from src/models/customs_item.js rename to src/models/customs_item.ts diff --git a/src/models/parcel.js b/src/models/parcel.ts similarity index 93% rename from src/models/parcel.js rename to src/models/parcel.ts index d8c31515a..4718fabdb 100644 --- a/src/models/parcel.js +++ b/src/models/parcel.ts @@ -7,7 +7,7 @@ import EasyPostObject from './easypost_object'; */ export default class Parcel extends EasyPostObject { static height; - static length; + declare length: unknown; static predefined_package; static weight; static width; diff --git a/src/models/postage_label.js b/src/models/postage_label.ts similarity index 100% rename from src/models/postage_label.js rename to src/models/postage_label.ts diff --git a/src/models/shipment.js b/src/models/shipment.ts similarity index 86% rename from src/models/shipment.js rename to src/models/shipment.ts index 8d82b5e18..8e1591955 100644 --- a/src/models/shipment.js +++ b/src/models/shipment.ts @@ -41,8 +41,10 @@ export default class Shipment extends EasyPostObject { * @returns {Rate} - The lowest rate * @throws {FilteringError} - If no applicable rates are found */ - lowestRate(carriers, services) { - const rates = this.rates || []; + lowestRate(carriers?: string[], services?: string[]): unknown { + const rates = ((this as Shipment & { rates?: unknown[] }).rates || []) as Parameters< + typeof Constants.Utils.getLowestRate + >[0]; return Constants.Utils.getLowestRate(rates, carriers, services); } From 3192425c4baa21862c22ae2949ef4ea0991c23df Mon Sep 17 00:00:00 2001 From: Justintime50 <39606064+Justintime50@users.noreply.github.com> Date: Mon, 10 Aug 2026 12:05:42 -0600 Subject: [PATCH 2/5] TSM-11 migrate model field types from declarations --- src/models/address.ts | 30 ++++++++++---------- src/models/customs_info.ts | 21 +++++++------- src/models/customs_item.ts | 16 +++++------ src/models/parcel.ts | 10 +++---- src/models/postage_label.ts | 18 ++++++------ src/models/shipment.ts | 55 +++++++++++++++++++------------------ 6 files changed, 77 insertions(+), 73 deletions(-) diff --git a/src/models/address.ts b/src/models/address.ts index 4dc5882e6..ce8fe2d8d 100644 --- a/src/models/address.ts +++ b/src/models/address.ts @@ -6,19 +6,19 @@ import EasyPostObject from './easypost_object'; * @extends EasyPostObject */ export default class Address extends EasyPostObject { - static street1; - static street2; - static city; - static state; - static zip; - static country; - static residential; - static carrier_facility; - declare name: unknown; - static company; - static phone; - static email; - static federal_tax_id; - static state_tax_id; - static verifications; + declare street1?: string | null; + declare street2?: string | null; + declare city?: string | null; + declare state?: string | null; + declare zip: string; + declare country: string; + declare residential?: boolean | null; + declare carrier_facility?: string | null; + declare name?: string | null; + declare company?: string | null; + declare phone?: string | null; + declare email?: string | null; + declare federal_tax_id?: string | null; + declare state_tax_id?: string | null; + declare verifications: Record; } diff --git a/src/models/customs_info.ts b/src/models/customs_info.ts index e448a737f..2d96626fc 100644 --- a/src/models/customs_info.ts +++ b/src/models/customs_info.ts @@ -6,14 +6,15 @@ import EasyPostObject from './easypost_object'; * @extends EasyPostObject */ export default class CustomsInfo extends EasyPostObject { - static content_explanation; - static contents_type; - static customs_certify; - static customs_items; - static customs_signer; - static declaration; - static eel_pfc; - static non_delivery_option; - static restriction_comments; - static restriction_type; + declare content_explanation?: string | null; + declare contents_type?: string | null; + declare customs_certify?: boolean | null; + declare customs_items: unknown[]; + declare customs_signer?: string | null; + declare declaration?: string | null; + declare eel_pfc?: string | null; + declare non_delivery_option?: 'abandon' | 'return' | null; + declare restriction_comments?: string | null; + declare restriction_type?: + 'none' | 'other' | 'quarantine' | 'sanitary_phytosanitary_inspection' | null; } diff --git a/src/models/customs_item.ts b/src/models/customs_item.ts index ec60ac54f..1c03d3a88 100644 --- a/src/models/customs_item.ts +++ b/src/models/customs_item.ts @@ -6,12 +6,12 @@ import EasyPostObject from './easypost_object'; * @extends EasyPostObject */ export default class CustomsItem extends EasyPostObject { - static code; - static currency; - static description; - static hs_tariff_number; - static origin_country; - static quantity; - static value; - static weight; + declare code?: string | null; + declare currency?: string | null; + declare description: string; + declare hs_tariff_number?: string | null; + declare origin_country: string; + declare quantity: number; + declare value: number; + declare weight: number; } diff --git a/src/models/parcel.ts b/src/models/parcel.ts index 4718fabdb..789ebaa5e 100644 --- a/src/models/parcel.ts +++ b/src/models/parcel.ts @@ -6,9 +6,9 @@ import EasyPostObject from './easypost_object'; * @extends EasyPostObject */ export default class Parcel extends EasyPostObject { - static height; - declare length: unknown; - static predefined_package; - static weight; - static width; + declare height?: number | null; + declare length?: number | null; + declare predefined_package?: string | null; + declare weight: number; + declare width?: number | null; } diff --git a/src/models/postage_label.ts b/src/models/postage_label.ts index e72a55252..03ac26a15 100644 --- a/src/models/postage_label.ts +++ b/src/models/postage_label.ts @@ -6,13 +6,13 @@ import EasyPostObject from './easypost_object'; * @extends EasyPostObject */ export default class PostageLabel extends EasyPostObject { - static label_date; - static label_epl2_url; - static label_file_type; - static label_pdf_url; - static label_resolution; - static label_size; - static label_type; - static label_url; - static label_zpl_url; + declare label_date: string; + declare label_epl2_url: string; + declare label_file_type: string; + declare label_pdf_url: string; + declare label_resolution: number; + declare label_size: string; + declare label_type: string; + declare label_url: string; + declare label_zpl_url: string; } diff --git a/src/models/shipment.ts b/src/models/shipment.ts index 8e1591955..1f530a2be 100644 --- a/src/models/shipment.ts +++ b/src/models/shipment.ts @@ -7,31 +7,31 @@ import EasyPostObject from './easypost_object'; * @extends EasyPostObject */ export default class Shipment extends EasyPostObject { - static batch_id; - static batch_message; - static batch_status; - static buyer_address; - static customs_info; - static fees; - static forms; - static from_address; - static insurance; - static is_return; - static messages; - static options; - static parcel; - static postage_label; - static rates; - static reference; - static refund_status; - static return_address; - static scan_form; - static selected_rate; - static status; - static to_address; - static tracker; - static tracking_code; - static usps_zone; + declare batch_id: string; + declare batch_message: string; + declare batch_status: string; + declare buyer_address?: Record | null; + declare customs_info?: Record | null; + declare fees: Record[]; + declare forms: Record[]; + declare from_address: Record; + declare insurance: Record; + declare is_return?: boolean | null; + declare messages: Record[]; + declare options?: Record | null; + declare parcel: Record; + declare postage_label: Record; + declare rates: Parameters[0]; + declare reference?: string | null; + declare refund_status: 'submitted' | 'refunded' | 'rejected'; + declare return_address?: Record | null; + declare scan_form: Record; + declare selected_rate: Parameters[0][number]; + declare status: string; + declare to_address: Record; + declare tracker: Record; + declare tracking_code: string; + declare usps_zone: string; /** * Get the lowest rate for this {@link Shipment}. @@ -41,7 +41,10 @@ export default class Shipment extends EasyPostObject { * @returns {Rate} - The lowest rate * @throws {FilteringError} - If no applicable rates are found */ - lowestRate(carriers?: string[], services?: string[]): unknown { + lowestRate( + carriers?: string[], + services?: string[], + ): ReturnType { const rates = ((this as Shipment & { rates?: unknown[] }).rates || []) as Parameters< typeof Constants.Utils.getLowestRate >[0]; From b8e45aada2ee598b673cfcfa2ea077d890994516 Mon Sep 17 00:00:00 2001 From: Justintime50 <39606064+Justintime50@users.noreply.github.com> Date: Mon, 10 Aug 2026 12:22:33 -0600 Subject: [PATCH 3/5] TSM-11 make model fields nullable for first pass --- src/models/address.ts | 6 +++--- src/models/customs_info.ts | 2 +- src/models/customs_item.ts | 10 +++++----- src/models/parcel.ts | 2 +- src/models/postage_label.ts | 18 +++++++++--------- src/models/shipment.ts | 38 ++++++++++++++++++------------------- 6 files changed, 38 insertions(+), 38 deletions(-) diff --git a/src/models/address.ts b/src/models/address.ts index ce8fe2d8d..58c067ce1 100644 --- a/src/models/address.ts +++ b/src/models/address.ts @@ -10,8 +10,8 @@ export default class Address extends EasyPostObject { declare street2?: string | null; declare city?: string | null; declare state?: string | null; - declare zip: string; - declare country: string; + declare zip: string | null; + declare country: string | null; declare residential?: boolean | null; declare carrier_facility?: string | null; declare name?: string | null; @@ -20,5 +20,5 @@ export default class Address extends EasyPostObject { declare email?: string | null; declare federal_tax_id?: string | null; declare state_tax_id?: string | null; - declare verifications: Record; + declare verifications: Record | null; } diff --git a/src/models/customs_info.ts b/src/models/customs_info.ts index 2d96626fc..033d7ce0e 100644 --- a/src/models/customs_info.ts +++ b/src/models/customs_info.ts @@ -9,7 +9,7 @@ export default class CustomsInfo extends EasyPostObject { declare content_explanation?: string | null; declare contents_type?: string | null; declare customs_certify?: boolean | null; - declare customs_items: unknown[]; + declare customs_items: unknown[] | null; declare customs_signer?: string | null; declare declaration?: string | null; declare eel_pfc?: string | null; diff --git a/src/models/customs_item.ts b/src/models/customs_item.ts index 1c03d3a88..eaf432ed8 100644 --- a/src/models/customs_item.ts +++ b/src/models/customs_item.ts @@ -8,10 +8,10 @@ import EasyPostObject from './easypost_object'; export default class CustomsItem extends EasyPostObject { declare code?: string | null; declare currency?: string | null; - declare description: string; + declare description: string | null; declare hs_tariff_number?: string | null; - declare origin_country: string; - declare quantity: number; - declare value: number; - declare weight: number; + declare origin_country: string | null; + declare quantity: number | null; + declare value: number | null; + declare weight: number | null; } diff --git a/src/models/parcel.ts b/src/models/parcel.ts index 789ebaa5e..959b5fc82 100644 --- a/src/models/parcel.ts +++ b/src/models/parcel.ts @@ -9,6 +9,6 @@ export default class Parcel extends EasyPostObject { declare height?: number | null; declare length?: number | null; declare predefined_package?: string | null; - declare weight: number; + declare weight: number | null; declare width?: number | null; } diff --git a/src/models/postage_label.ts b/src/models/postage_label.ts index 03ac26a15..2d53a65ec 100644 --- a/src/models/postage_label.ts +++ b/src/models/postage_label.ts @@ -6,13 +6,13 @@ import EasyPostObject from './easypost_object'; * @extends EasyPostObject */ export default class PostageLabel extends EasyPostObject { - declare label_date: string; - declare label_epl2_url: string; - declare label_file_type: string; - declare label_pdf_url: string; - declare label_resolution: number; - declare label_size: string; - declare label_type: string; - declare label_url: string; - declare label_zpl_url: string; + declare label_date: string | null; + declare label_epl2_url: string | null; + declare label_file_type: string | null; + declare label_pdf_url: string | null; + declare label_resolution: number | null; + declare label_size: string | null; + declare label_type: string | null; + declare label_url: string | null; + declare label_zpl_url: string | null; } diff --git a/src/models/shipment.ts b/src/models/shipment.ts index 1f530a2be..9053b3cb1 100644 --- a/src/models/shipment.ts +++ b/src/models/shipment.ts @@ -7,31 +7,31 @@ import EasyPostObject from './easypost_object'; * @extends EasyPostObject */ export default class Shipment extends EasyPostObject { - declare batch_id: string; - declare batch_message: string; - declare batch_status: string; + declare batch_id: string | null; + declare batch_message: string | null; + declare batch_status: string | null; declare buyer_address?: Record | null; declare customs_info?: Record | null; - declare fees: Record[]; - declare forms: Record[]; - declare from_address: Record; - declare insurance: Record; + declare fees: Record[] | null; + declare forms: Record[] | null; + declare from_address: Record | null; + declare insurance: Record | null; declare is_return?: boolean | null; - declare messages: Record[]; + declare messages: Record[] | null; declare options?: Record | null; - declare parcel: Record; - declare postage_label: Record; - declare rates: Parameters[0]; + declare parcel: Record | null; + declare postage_label: Record | null; + declare rates: Parameters[0] | null; declare reference?: string | null; - declare refund_status: 'submitted' | 'refunded' | 'rejected'; + declare refund_status: 'submitted' | 'refunded' | 'rejected' | null; declare return_address?: Record | null; - declare scan_form: Record; - declare selected_rate: Parameters[0][number]; - declare status: string; - declare to_address: Record; - declare tracker: Record; - declare tracking_code: string; - declare usps_zone: string; + declare scan_form: Record | null; + declare selected_rate: Parameters[0][number] | null; + declare status: string | null; + declare to_address: Record | null; + declare tracker: Record | null; + declare tracking_code: string | null; + declare usps_zone: string | null; /** * Get the lowest rate for this {@link Shipment}. From cd4e26a558ef51743093a978e00844a89ff2d0e8 Mon Sep 17 00:00:00 2001 From: Justintime50 <39606064+Justintime50@users.noreply.github.com> Date: Mon, 10 Aug 2026 12:28:39 -0600 Subject: [PATCH 4/5] TSM-11 make model fields optional and nullable for first pass --- src/models/address.ts | 6 +++--- src/models/customs_info.ts | 2 +- src/models/customs_item.ts | 10 +++++----- src/models/parcel.ts | 2 +- src/models/postage_label.ts | 18 +++++++++--------- src/models/shipment.ts | 38 ++++++++++++++++++------------------- 6 files changed, 38 insertions(+), 38 deletions(-) diff --git a/src/models/address.ts b/src/models/address.ts index 58c067ce1..eee80766c 100644 --- a/src/models/address.ts +++ b/src/models/address.ts @@ -10,8 +10,8 @@ export default class Address extends EasyPostObject { declare street2?: string | null; declare city?: string | null; declare state?: string | null; - declare zip: string | null; - declare country: string | null; + declare zip?: string | null; + declare country?: string | null; declare residential?: boolean | null; declare carrier_facility?: string | null; declare name?: string | null; @@ -20,5 +20,5 @@ export default class Address extends EasyPostObject { declare email?: string | null; declare federal_tax_id?: string | null; declare state_tax_id?: string | null; - declare verifications: Record | null; + declare verifications?: Record | null; } diff --git a/src/models/customs_info.ts b/src/models/customs_info.ts index 033d7ce0e..e40b06047 100644 --- a/src/models/customs_info.ts +++ b/src/models/customs_info.ts @@ -9,7 +9,7 @@ export default class CustomsInfo extends EasyPostObject { declare content_explanation?: string | null; declare contents_type?: string | null; declare customs_certify?: boolean | null; - declare customs_items: unknown[] | null; + declare customs_items?: unknown[] | null; declare customs_signer?: string | null; declare declaration?: string | null; declare eel_pfc?: string | null; diff --git a/src/models/customs_item.ts b/src/models/customs_item.ts index eaf432ed8..e2aac7b6c 100644 --- a/src/models/customs_item.ts +++ b/src/models/customs_item.ts @@ -8,10 +8,10 @@ import EasyPostObject from './easypost_object'; export default class CustomsItem extends EasyPostObject { declare code?: string | null; declare currency?: string | null; - declare description: string | null; + declare description?: string | null; declare hs_tariff_number?: string | null; - declare origin_country: string | null; - declare quantity: number | null; - declare value: number | null; - declare weight: number | null; + declare origin_country?: string | null; + declare quantity?: number | null; + declare value?: number | null; + declare weight?: number | null; } diff --git a/src/models/parcel.ts b/src/models/parcel.ts index 959b5fc82..17285fcea 100644 --- a/src/models/parcel.ts +++ b/src/models/parcel.ts @@ -9,6 +9,6 @@ export default class Parcel extends EasyPostObject { declare height?: number | null; declare length?: number | null; declare predefined_package?: string | null; - declare weight: number | null; + declare weight?: number | null; declare width?: number | null; } diff --git a/src/models/postage_label.ts b/src/models/postage_label.ts index 2d53a65ec..72540cfdc 100644 --- a/src/models/postage_label.ts +++ b/src/models/postage_label.ts @@ -6,13 +6,13 @@ import EasyPostObject from './easypost_object'; * @extends EasyPostObject */ export default class PostageLabel extends EasyPostObject { - declare label_date: string | null; - declare label_epl2_url: string | null; - declare label_file_type: string | null; - declare label_pdf_url: string | null; - declare label_resolution: number | null; - declare label_size: string | null; - declare label_type: string | null; - declare label_url: string | null; - declare label_zpl_url: string | null; + declare label_date?: string | null; + declare label_epl2_url?: string | null; + declare label_file_type?: string | null; + declare label_pdf_url?: string | null; + declare label_resolution?: number | null; + declare label_size?: string | null; + declare label_type?: string | null; + declare label_url?: string | null; + declare label_zpl_url?: string | null; } diff --git a/src/models/shipment.ts b/src/models/shipment.ts index 9053b3cb1..236d56eaf 100644 --- a/src/models/shipment.ts +++ b/src/models/shipment.ts @@ -7,31 +7,31 @@ import EasyPostObject from './easypost_object'; * @extends EasyPostObject */ export default class Shipment extends EasyPostObject { - declare batch_id: string | null; - declare batch_message: string | null; - declare batch_status: string | null; + declare batch_id?: string | null; + declare batch_message?: string | null; + declare batch_status?: string | null; declare buyer_address?: Record | null; declare customs_info?: Record | null; - declare fees: Record[] | null; - declare forms: Record[] | null; - declare from_address: Record | null; - declare insurance: Record | null; + declare fees?: Record[] | null; + declare forms?: Record[] | null; + declare from_address?: Record | null; + declare insurance?: Record | null; declare is_return?: boolean | null; - declare messages: Record[] | null; + declare messages?: Record[] | null; declare options?: Record | null; - declare parcel: Record | null; - declare postage_label: Record | null; - declare rates: Parameters[0] | null; + declare parcel?: Record | null; + declare postage_label?: Record | null; + declare rates?: Parameters[0] | null; declare reference?: string | null; - declare refund_status: 'submitted' | 'refunded' | 'rejected' | null; + declare refund_status?: 'submitted' | 'refunded' | 'rejected' | null; declare return_address?: Record | null; - declare scan_form: Record | null; - declare selected_rate: Parameters[0][number] | null; - declare status: string | null; - declare to_address: Record | null; - declare tracker: Record | null; - declare tracking_code: string | null; - declare usps_zone: string | null; + declare scan_form?: Record | null; + declare selected_rate?: Parameters[0][number] | null; + declare status?: string | null; + declare to_address?: Record | null; + declare tracker?: Record | null; + declare tracking_code?: string | null; + declare usps_zone?: string | null; /** * Get the lowest rate for this {@link Shipment}. From 42131e92188583d0862793a0d3a201304c30f178 Mon Sep 17 00:00:00 2001 From: Justintime50 <39606064+Justintime50@users.noreply.github.com> Date: Mon, 10 Aug 2026 12:38:27 -0600 Subject: [PATCH 5/5] TSM-11 allowlist nanoid advisory in audit-ci --- audit-ci.jsonc | 1 + 1 file changed, 1 insertion(+) diff --git a/audit-ci.jsonc b/audit-ci.jsonc index 009d43352..e2c0a08d5 100644 --- a/audit-ci.jsonc +++ b/audit-ci.jsonc @@ -4,6 +4,7 @@ "critical": true, // Can't update ESLint yet because we must support Node 16 "allowlist": [ + "GHSA-2v37-7h3g-55p8", "GHSA-3ppc-4f35-3m26", "GHSA-23c5-xmqv-rm74", "GHSA-7r86-cg39-jmmj",