== Changelog Archive ==

This is a brief text document keeping track of changes to the plugin. For a full history, see the Github Repository.

= 1.2.11 =

Relase Date: June 30, 2026

* Overview
	* Accommodates ShipStation for WooCommerce 5.2.0 integration settings update (Thanks @zurety)!
		* ShipStation for WooCommerce has updated their integration settings.
		* Backwards compatibility built-in for both `auth_key` and `shipstation_credentials` depending on installed ShipStation for WooCommerce version.
	* Accommodates US Outlier Territories such as Puerto Rico, U.S. Virgin Islands, Guam, American Samoa, and Northern Marinana Islands (Thanks @lgs77717)!
		* WooCommerce does not recognize some of these as terriroties, but their own countries. To accommodate, we have to apply it as a State and set the country to US.
	* Updates the readme for various ShipStation links - API access is still a premium feature unfortunately.

= 1.2.10 =

Relase Date: June 15, 2026

* Overview
	* Support for countries that do not require postcodes. (Thanks @lgs77717)!
		* The system now defaults to `00000` for specific countries.
		* @see Shipping_Calculator->get_postcode_exempt_countries()
	* Bumped the required WordPress version to 6.5 due to wp_register_script_module() use.

= 1.2.9 =

Relase Date: June 05, 2026

* Overview
	* WordPress 7.0 release.
		* WordPress automatically updates the compatibility version with each minor release (after a major).
		* This release is to denote support for 7.0 through 8.0.

= 1.2.7 =

Relase Date: May 11, 2026

* Overview
	* Fixes Shipping_Calculator::setup_rates() method
		* Metadata Rates now combines all found rates instead of holding onto only the latest.
		* Rates now only return those that encompass all packed packages.
		* Rates Cost moved from multiplication via quantity to merging.
			* This creates a flat array of all costs (rate, service, upcharge), allowing WooCommerce to array_sum() the full array.
	* Fixes usort() to use array_sum comparison instead of the first found cost comparison.
	* Adds a quantity to all the packaging methods for consistency and ease-of-access.
	* Thanks @sinisterfish for the bug report!

= 1.2.6 =

Relase Date: May 04, 2026

* Overview
	* Fixes quantity issue with Individual Packaging (Thanks @piexxer)!
	* WooCommerce has resolved caclulate_shipping() caching.
		* Removes `iqlrss/cache/cart_rates` filter hook.
		* Removes WC_Session caching from IQLRSS Shipping Method class.
		* Adds new customer cache invalidation.
	* Flips `iqlrss/cache/shipstation` hook to return TRUE instead of FALSE.
	* Adds new Debug Types box to allow admins to log events, but not all events possible.
		* This will allow admins to log errors without having to log API notices, or they may do both.

= 1.2.5 =

Relase Date: March 12, 2026

* Overview
	* Fixes isset() isse when checking FROM address (Thanks @richecolocity)!
	* Fixes return value on WooCommerce Integration filter hook.
	* Adds new cache busting when WooCommerce > Settings > General options are saved.
		* This is important for when the shop address changes.

= 1.2.4 =

Relase Date: February 12, 2026

* Overview
	* New Setting under WooCommerce > Settings > Integration to denote a full uninstall.
		* The uninstall will try to remove all created iqlrss data when this is both enabled and an uninstall trigger is triggered.
		* Otherwise, only caches are cleared on uninstall, all other settings are preserved.
	* New Admin Notification if/when the ShipStation API is missing. Thanks to .org user @robersw for the idea!
	* Various Shipping Calculator patches applied that were found during Unit Testing.

= 1.2.3 =

Relase Date: February 04, 2026

* Overview
	* Patches issue of a misnamed method call.
		* Thanks to user @centuryperf for reporting this issue!
		* Future unit tests will harden against this kind of error.
	* Patches issue where warehouses would be called multiple times a request.
		* When there were no ShipStation warehouses, the API would retry. This now checks against the transient FALSE first, then attempts an API call.
		* This unfortunately means possibly storing an empty transient, weighing the options this seems acceptable.

= 1.2.2 =

Relase Date: February 04, 2026

* Overview
	* Replaces a PHP 8.5 function call of array_first() for reset()
		* Thanks to Theo for reporting this issue!

= 1.2.1 =

Relase Date: February 02, 2026

* Overview
	* Patches an issue where adjustments would overwrite the shipping cost.
		* Thanks to user @nextphase for reporting this issue!

= 1.2.0 =

Relase Date: February 02, 2026

* Overview
	* Shipping Calculations moved to it's own Class for better PHPUnit testing.
		* See unit-tests branch; work-in-progress.
	* ShipStation Warehouses are now supported Globally and per Shipping Zone.
		* Defaults to WooCommerce Store. Global overrides Store. Zone overrides Global.
	* ShipStation Packages are now integrated into Custom Packages.
	* Multiple new filter hooks added to manage caching, warehouses, and Shipping Calculator object.

* Code Updates
	* Filter Hook `iqlrss/cache/shipstation`
		* Boolean to disable caching for API requests.
	* Filter Hook `iqlrss/cache/shipstation_expires`
		* Integer seconds for how long to cache package rates for a customer.
		* 1 Week is the default.
	* Filter Hook `iqlrss/cache/cart_rates`
		* Boolean to diable caching at a cart level.
		* This is not recommended to disable since WC (sometimes) makes multiple calls to the cart per page load, but the option is available if you have a usecase.
	* Fitler Hook `iqlrss/shipping/calculator_object`
		* Expects a \IQLRSS\Core\Classes\Shipping_Calculator Object.
		* Must inherit the IQLRSS Calculator to be valid.
		* The shipping method calculations had an overhaul and broken into multiple methods of the new Shipping Calculator object.
		* This is for PHPUnit testing and to make it easier for developers to override specific calculator functionality for their usecases.

= 1.1.2 =

Relase Date: January 19, 2026

* Overview
	* Minor update that patches a caching issue and prepares for unit testing.
	* Fixed issue when adding a verification key, the Shipping Price Adjustment would not initially appear.
	* Moved autoload to it's own file for easier unit testing support.
	* The next update will see ShipStation Warehouses, ShipStation Packages, and the Shipping Method calculations moved to it's own class for easier unit tests and management.

= 1.1.1 =

Release Date: December 04, 2025

* Overview
	* Changes in how WordPress handles Modules means we cannot define jQuery as a dependency.
		* Removes dependency and add additional check in module JS for it's existence.

= 1.1.0 =

Release Date: December 01, 2025

* Overview
	* Custom Packages really needed to be redone to better support label creation.
		* Having modal support will make creating custom options / screens easier in future updates.
		* Having named custom boxes and a modal of options will allow users to better manage product and boxes when requesting a shipping label in a future update.
			* For example, if products need to be repackaged into different boxes before label creation.
	* Redo of the Custom Packages options.
		* New options for Weight Only
		* New options for Stacked Vertically
		* New Box Price field.
		* New Package Presets.
			* These are pulled from static JSON files + known values.
			* Support: UPS, FedEx, USPS.
	* New default product weight field.

* Code Updates
	* Filter hook `iqlrss/zone/settings`
		* Expects array of setting fields.
		* This hook is useful to manage custom Product Packing options.
		* core\shipping-method-shipstation.php LN 543
	* Filter hook `iqlrss/zone/package_presets`
		* Expects an array of specific key value pairs.
		* This hook is useful to manage the Custom Package Options when a zone uses this setting.
		* The carrier_code is important to correctly get One rates from supported carriers.
		* core\shipping-method-shipstation.php LN 1569
	* Filter hook `iqlrss/shipping/packages`
		* Expects an array of ShipStation API v2 /rates/estimate API args.
			* https://docs.shipstation.com/openapi/rates/estimate_rates
		* Useful for custom shipping / package rules. This gives developers the cart items to repackage and retrieve rates from.
		* core\shipping-method-shipstation.php LN 742
	* Lots of code rearranging, better comments, and better methods to prepare for future updates, features, and functionalty.

= 1.0.8 =

Release Date: October 10, 2025

* Overview
	* Fixes an issue where some carriers return additional costs that were not being added to the rate estimate.
		* This gets reflected for new orders when outputting the rate information.
		* Thanks to @centuryperf for reporting this issue on the WordPress.org forums!
	* Fixes Shipping Zone WP_Error Fatal Error.
		* Shoutout to @sarawill as well for reporting the WP_Error issue on the WordPress.org forums!
	* Fixes WC Status Logs formatting.
		* Carrier API responses would break the WC Status formatting due to double quotes.
		* This has been fixed by replacing double quotes with double single quotes because for logging, it doesn't matter.
	* Adds better formatting for rates and packages.
		* This applies to packed individually, but mostly for custom packages.
	* Adds a layer of caching for Shipping Calculations.
		* Ugh, the Block Editor + WooCommerce makes _multiple_ async requests to shipping calculations which would re-trigger things unnecessarily.
		* The new methodology uses the WC()->session to automatically return the known rates if the cart has not changed.
		* This is a noticeable increase in speed when browsing the shop when your cart hasn't necessarily changed.
	* Caching layer also prevents multiple / duplicate API requests being logged which is nice.

* Code Updates
	* I don't think I'm going to do code updating moving forward unless it's for Developer Hook updates.
		* See Github for code, commits, changes, branches.

= 1.0.7 =

Release Date: October 08, 2025

* Overview
	* Better Shipping Rate information on the Order screen.
		* This denotes what items got what rates, the adjustments, where the adjustments come from.
	* Patches issue on Shipping Zone where WP_Error was treated as an Exception
	* Starts to normalize code for carrier_id and carrier_code.
		* Doing this makes it easier to integrate the v1 API.
		* The Carrier ID is the ShipStation `se-` code.
		* The Carrier Code is `usps` or `stamps` depending.
	* Adds a Deactivate and Uninstall hooks for data removal.
		* IQLRSS removes settings on uninstall, but not Shipping Zones.
		* On Deativate, the cache gets cleared.

	* Code Updates
		* See Github, too many to track here.

= 1.0.6 =

Release Date: September 22, 2025

* Overview
	* Updated ShipStation links in the readme.md

= 1.0.5 =

Release Date: September 16, 2025

* Overview
	* Patches an issue where shipping rates would come back much higher than expected
		* This was due to rates with multiple package types, but used the same service code.
		* Now, only the generic 'package' rate is returned.
	* Patches issue where disabled services would display during checkout.
	* Patches issue where service nickname would not apply.
		* This patch also ensures that during export/import to ShipStation it does not
			use the nickname, but service name for clarify.
	* Order item metadata added that breaks down:
		* Service (sevice_code)
		* Carrier (carrier_code)
		* Rate [Found shipping rate]
		* Adjustment [Any price adjustments made and whehter it's Global or Specific]

* Code Updates
	* \IQLRSS\Core\Shipping_Method_Shipstation::labelify_meta_keys()
		* Translatable Order Item metadata keys.
	* \IQLRSS\Core\Shipping_Method_Shipstation::calculate_shipping()
		* Updates to store metadata
	* \IQLRSS\Core\Shipstation_Api::get_shipping_estimates()
		* Adds conditional to exclude any rates that are not for generic 'package' types.

= 1.0.4 =

Release Date: September 15, 2025

* Overview
	* Patches an issue where the exports would not take the Stores set product units.
	* Adds functionality for Flat Rate Adjustments on a global scale.
	* Adds functionality for Flat Rate Adjustments on a per service scale.
	* Shoutouts to both @centuryperf and @jkmail120 for reporting these issues!

* Code Updates
	* \IQLRSS\Core\Settings_Shipstation::export_shipstation_shipping_method()
		* Hopefully better ShipStation integration when orders export.
	* \IQLRSS\Core\Shipping_Method_Shipstation::get_individual_requests()
		* Updates to garb the store dimensions.
	* \IQLRSS\Core\Shipping_Method_Shipstation::calculate_shipping()
		* Updates for flatrate calculations.

= 1.0.3 =

Release Date: August 05, 2025

* Overview
	* Patches an issue where the Shipping Method would not display due to not being supported.
		* Shoutout to .org user @sportswreathshop for reporting this issue!

* Code Updates
	* \IQLRSS\Core\Shipping_Method_Shipstation::__construct()
		* Shipping Method support conditional has been updated to check against the objects carriers.

= 1.0.2 =

Release Date: August 04, 2025

* Overview
	* Automatically clears the API caching whenever Integration settings or Shipping Zone settings are saved.
		* Shoutout to .org user @dpkonofa for their assistance in debugging this issue!

* Code Updates
	* Moves the \IQLRSS\Core\Settings_Shipstation::api_actions_endpoint() clearcache action into it's own method.
		* In a future release, the caching will be in it's own class definition.

= 1.0.1 =

Release Date: August 01, 2025

* Overview
	* Patches an issue where the individual requests method would not return their requests back to the shipping method.
		* Shoutout to .org user @dpkonofa for their assistance in debugging this issue!
	* Tries another method to discern ShipStation Core Carriers from Manually Connected Carriers using the `primary` carrier property.
		* ShipStation suggests the `balance` flag should be empty for Manually Connected Carriers, but we find that this is not always the case.

* Code Updates
	* \IQLRSS\Core\Shipping_Method_Shipstation::get_individual_requests() now returns it's request array.
	* \IQLRSS\Core\Shipstation_Api::get_carriers() `is_shipstation` value discerned using `primary` Carrier API property.

= 1.0.0 =

Release Date: July 28, 2025

* Overview
	* Initial release.