From 2724da8ed2051abaef7eb88df987311eccfd67d3 Mon Sep 17 00:00:00 2001 From: Michelle Bergeron Date: Thu, 25 Jun 2026 14:14:48 -0400 Subject: [PATCH 1/8] feat(everstox): add list-products and create-fulfillment-update-request actions Co-Authored-By: Claude Sonnet 4.6 --- .../create-fulfillment-update-request.mjs | 81 ++++++++++++++++ .../actions/list-products/list-products.mjs | 95 +++++++++++++++++++ components/everstox/everstox.app.mjs | 15 +++ components/everstox/package.json | 2 +- 4 files changed, 192 insertions(+), 1 deletion(-) create mode 100644 components/everstox/actions/create-fulfillment-update-request/create-fulfillment-update-request.mjs create mode 100644 components/everstox/actions/list-products/list-products.mjs diff --git a/components/everstox/actions/create-fulfillment-update-request/create-fulfillment-update-request.mjs b/components/everstox/actions/create-fulfillment-update-request/create-fulfillment-update-request.mjs new file mode 100644 index 0000000000000..5631ec85aa5b5 --- /dev/null +++ b/components/everstox/actions/create-fulfillment-update-request/create-fulfillment-update-request.mjs @@ -0,0 +1,81 @@ +import everstox from "../../everstox.app.mjs"; + +export default { + key: "everstox-create-fulfillment-update-request", + name: "Create Fulfillment Update Request", + description: + "Creates a new fulfillment update request for a specific fulfillment." + + " The fulfillment must be in `in_fulfillment` state." + + " Use this to modify items, quantities, prices, addresses, or priority on an active fulfillment." + + " `fulfillment_items` must include at least one item with a valid SKU; `price_set` quantities must sum to the item quantity." + + " Address fields `first_name`/`last_name` or `company` are conditionally required (at least one set must be present)." + + " [See the documentation](https://api.staging.everstox.com/api/v1/ui/#/Fulfillment-updates/district_core.api.shops.fulfillments.fulfillments.Fulfillments.create_fulfillment_update_request)", + version: "0.0.1", + type: "action", + annotations: { + destructiveHint: false, + openWorldHint: true, + readOnlyHint: false, + }, + props: { + everstox, + fulfillmentId: { + type: "string", + label: "Fulfillment ID", + description: "The UUID of the fulfillment to update. Must be in `in_fulfillment` state.", + }, + fulfillmentItems: { + type: "string", + label: "Fulfillment Items", + description: "JSON array of fulfillment items to update. Must contain at least one item." + + " Omit `id` when adding a new item; include it when updating an existing one." + + " Each item requires a `product.sku` and a `price_set` with at least one entry." + + " Example: `[{\"id\": \"550e8400-e29b-41d4-a716-446655440000\", \"quantity\": 2, \"product\": {\"sku\": \"PROD-001\"}, \"price_set\": [{\"quantity\": 2, \"currency\": \"EUR\", \"price_net_after_discount\": \"19.99\", \"tax_amount\": \"3.80\", \"tax_rate\": \"0.19\"}]}]`", + }, + shippingAddress: { + type: "string", + label: "Shipping Address", + description: "JSON object with the complete shipping address." + + " Required fields: `country_code` (ISO 2-letter, e.g. `\"DE\"`), `country` (full country name, e.g. `\"Germany\"`), `city`, `zip`, `address_1`," + + " and at least one of `first_name`/`last_name` or `company`." + + " Optional: `address_2`, `title`, `phone`, `province_code`, `address_type` (`private` or `business`)." + + " Example: `{\"first_name\": \"John\", \"last_name\": \"Doe\", \"country_code\": \"DE\", \"country\": \"Germany\", \"city\": \"Berlin\", \"zip\": \"10115\", \"address_1\": \"Musterstra\\u00dfe 1\", \"address_type\": \"private\"}`", + }, + billingAddress: { + type: "string", + label: "Billing Address", + description: "JSON object with the complete billing address." + + " Required fields: `country_code` (ISO 2-letter, e.g. `\"DE\"`), `country` (full country name, e.g. `\"Germany\"`), `city`, `zip`, `address_1`," + + " and at least one of `first_name`/`last_name` or `company`." + + " Optional: `address_2`, `title`, `phone`, `VAT_number`, `address_type` (`private` or `business`)." + + " Example: `{\"first_name\": \"John\", \"last_name\": \"Doe\", \"country_code\": \"DE\", \"country\": \"Germany\", \"city\": \"Berlin\", \"zip\": \"10115\", \"address_1\": \"Musterstra\\u00dfe 1\", \"address_type\": \"private\"}`", + }, + fulfillmentPriority: { + type: "integer", + label: "Fulfillment Priority", + description: "Priority level for the fulfillment. Must be between 1 (highest) and 99 (lowest).", + min: 1, + max: 99, + }, + }, + async run({ $ }) { + const fulfillmentItems = JSON.parse(this.fulfillmentItems); + const shippingAddress = JSON.parse(this.shippingAddress); + const billingAddress = JSON.parse(this.billingAddress); + + const response = await this.everstox.createFulfillmentUpdateRequest({ + $, + fulfillmentId: this.fulfillmentId, + data: { + fulfillment_items: fulfillmentItems, + shipping_address: shippingAddress, + billing_address: billingAddress, + fulfillment_priority: this.fulfillmentPriority, + }, + }); + + $.export("$summary", `Successfully created fulfillment update request for fulfillment \`${this.fulfillmentId}\``); + + return response; + }, +}; diff --git a/components/everstox/actions/list-products/list-products.mjs b/components/everstox/actions/list-products/list-products.mjs new file mode 100644 index 0000000000000..6b10a20345ebc --- /dev/null +++ b/components/everstox/actions/list-products/list-products.mjs @@ -0,0 +1,95 @@ +import everstox from "../../everstox.app.mjs"; + +export default { + key: "everstox-list-products", + name: "List Products", + description: "List products in an Everstox shop. [See the documentation](https://api.staging.everstox.com/api/v1/ui/#/Product/district_core.api.shops.products.products.Products.index)", + version: "0.0.1", + type: "action", + annotations: { + destructiveHint: false, + openWorldHint: true, + readOnlyHint: true, + }, + props: { + everstox, + sku: { + type: "string", + label: "SKU", + description: "Filter products by SKU", + optional: true, + }, + name: { + type: "string", + label: "Name", + description: "Filter products by name", + optional: true, + }, + warehouseIds: { + propDefinition: [ + everstox, + "warehouseIds", + ], + optional: true, + }, + createdDateGte: { + type: "string", + label: "Created Date Greater Than or Equal To", + description: "Filter products with a creation date greater than or equal to the provided date. Example: `2021-02-23`", + optional: true, + }, + createdDateLte: { + type: "string", + label: "Created Date Less Than or Equal To", + description: "Filter products with a creation date less than or equal to the provided date. Example: `2021-02-23`", + optional: true, + }, + updatedDateGte: { + type: "string", + label: "Updated Date Greater Than or Equal To", + description: "Filter products with an updated date greater than or equal to the provided date. Example: `2021-02-23`", + optional: true, + }, + updatedDateLte: { + type: "string", + label: "Updated Date Less Than or Equal To", + description: "Filter products with an updated date less than or equal to the provided date. Example: `2021-02-23`", + optional: true, + }, + limit: { + type: "integer", + label: "Limit", + description: "The number of products to return (default 10)", + optional: true, + }, + offset: { + type: "integer", + label: "Offset", + description: "The number of products to skip before starting to collect the result set", + optional: true, + }, + }, + async run({ $ }) { + const response = await this.everstox.listProducts({ + $, + params: { + sku: this.sku, + name: this.name, + warehouse_ids: this.warehouseIds, + creation_date_gte: this.createdDateGte, + creation_date_lte: this.createdDateLte, + updated_date_gte: this.updatedDateGte, + updated_date_lte: this.updatedDateLte, + limit: this.limit, + offset: this.offset, + }, + }); + + const count = response.items?.length ?? 0; + $.export("$summary", `Successfully retrieved ${count} product${count === 1 + ? "" + : "s"}`); + + return response; + }, +}; diff --git a/components/everstox/everstox.app.mjs b/components/everstox/everstox.app.mjs index fef283664851c..d1f9f62a2b8c2 100644 --- a/components/everstox/everstox.app.mjs +++ b/components/everstox/everstox.app.mjs @@ -131,5 +131,20 @@ export default { ...opts, }); }, + createFulfillmentUpdateRequest({ + fulfillmentId, ...opts + }) { + return this._makeRequest({ + method: "POST", + path: `/fulfillment/${fulfillmentId}/update-requests`, + ...opts, + }); + }, + listProducts(opts = {}) { + return this._makeRequest({ + path: "/products", + ...opts, + }); + }, }, }; diff --git a/components/everstox/package.json b/components/everstox/package.json index 992dd1ebbc1d7..b50274914a543 100644 --- a/components/everstox/package.json +++ b/components/everstox/package.json @@ -1,6 +1,6 @@ { "name": "@pipedream/everstox", - "version": "0.3.0", + "version": "0.4.0", "description": "Pipedream Everstox Components", "main": "everstox.app.mjs", "keywords": [ From 4d1c19cf54f0db392b64bbcb46c3ece1dd9f0c62 Mon Sep 17 00:00:00 2001 From: Michelle Bergeron Date: Thu, 25 Jun 2026 14:20:19 -0400 Subject: [PATCH 2/8] versions --- components/everstox/actions/get-order/get-order.mjs | 2 +- components/everstox/actions/get-return/get-return.mjs | 2 +- .../actions/list-order-id-options/list-order-id-options.mjs | 2 +- .../list-order-number-options/list-order-number-options.mjs | 2 +- .../actions/list-return-id-options/list-return-id-options.mjs | 2 +- components/everstox/actions/list-returns/list-returns.mjs | 2 +- .../list-warehouse-ids-options/list-warehouse-ids-options.mjs | 2 +- components/everstox/actions/search-orders/search-orders.mjs | 2 +- 8 files changed, 8 insertions(+), 8 deletions(-) diff --git a/components/everstox/actions/get-order/get-order.mjs b/components/everstox/actions/get-order/get-order.mjs index 807ecf98aa604..f3657089646a4 100644 --- a/components/everstox/actions/get-order/get-order.mjs +++ b/components/everstox/actions/get-order/get-order.mjs @@ -4,7 +4,7 @@ export default { key: "everstox-get-order", name: "Get Order", description: "Get an order from Everstox. [See the documentation](https://api.everstox.com/api/v1/ui/#/Order/district_core.api.shops.orders.orders.Orders.get)", - version: "0.0.2", + version: "0.0.3", type: "action", annotations: { destructiveHint: false, diff --git a/components/everstox/actions/get-return/get-return.mjs b/components/everstox/actions/get-return/get-return.mjs index fa7d1101990c8..728e0d729abd7 100644 --- a/components/everstox/actions/get-return/get-return.mjs +++ b/components/everstox/actions/get-return/get-return.mjs @@ -4,7 +4,7 @@ export default { key: "everstox-get-return", name: "Get Return", description: "Get a return from Everstox. [See the documentation](https://api.everstox.com/api/v1/ui/#/Returns%20V2/district_core.api.shops.returns_v2.returns_v2.ReturnsV2.get)", - version: "0.0.2", + version: "0.0.3", type: "action", annotations: { destructiveHint: false, diff --git a/components/everstox/actions/list-order-id-options/list-order-id-options.mjs b/components/everstox/actions/list-order-id-options/list-order-id-options.mjs index 872380f99147f..2e0a3a273cc63 100644 --- a/components/everstox/actions/list-order-id-options/list-order-id-options.mjs +++ b/components/everstox/actions/list-order-id-options/list-order-id-options.mjs @@ -4,7 +4,7 @@ export default { key: "everstox-list-order-id-options", name: "List Order ID Options", description: "Retrieves available options for the Order ID field.", - version: "0.0.1", + version: "0.0.2", type: "action", annotations: { destructiveHint: false, diff --git a/components/everstox/actions/list-order-number-options/list-order-number-options.mjs b/components/everstox/actions/list-order-number-options/list-order-number-options.mjs index 36787a93e9d5d..59508cc20b5f0 100644 --- a/components/everstox/actions/list-order-number-options/list-order-number-options.mjs +++ b/components/everstox/actions/list-order-number-options/list-order-number-options.mjs @@ -4,7 +4,7 @@ export default { key: "everstox-list-order-number-options", name: "List Order Number Options", description: "Retrieves available options for the Order Number field.", - version: "0.0.1", + version: "0.0.2", type: "action", annotations: { destructiveHint: false, diff --git a/components/everstox/actions/list-return-id-options/list-return-id-options.mjs b/components/everstox/actions/list-return-id-options/list-return-id-options.mjs index 01ba70f3856b8..91fba94a12929 100644 --- a/components/everstox/actions/list-return-id-options/list-return-id-options.mjs +++ b/components/everstox/actions/list-return-id-options/list-return-id-options.mjs @@ -4,7 +4,7 @@ export default { key: "everstox-list-return-id-options", name: "List Return ID Options", description: "Retrieves available options for the Return ID field.", - version: "0.0.1", + version: "0.0.2", type: "action", annotations: { destructiveHint: false, diff --git a/components/everstox/actions/list-returns/list-returns.mjs b/components/everstox/actions/list-returns/list-returns.mjs index e530f466abe37..6f67cf5660b0e 100644 --- a/components/everstox/actions/list-returns/list-returns.mjs +++ b/components/everstox/actions/list-returns/list-returns.mjs @@ -5,7 +5,7 @@ export default { key: "everstox-list-returns", name: "List Returns", description: "List returns from Everstox. [See the documentation](https://api.everstox.com/api/v1/ui/#/Returns%20V2/district_core.api.shops.returns_v2.returns_v2.ReturnsV2.index)", - version: "0.0.2", + version: "0.0.3", type: "action", annotations: { destructiveHint: false, diff --git a/components/everstox/actions/list-warehouse-ids-options/list-warehouse-ids-options.mjs b/components/everstox/actions/list-warehouse-ids-options/list-warehouse-ids-options.mjs index 936370de99087..3c7906fa6525f 100644 --- a/components/everstox/actions/list-warehouse-ids-options/list-warehouse-ids-options.mjs +++ b/components/everstox/actions/list-warehouse-ids-options/list-warehouse-ids-options.mjs @@ -4,7 +4,7 @@ export default { key: "everstox-list-warehouse-ids-options", name: "List Warehouse IDs Options", description: "Retrieves available options for the Warehouse IDs field.", - version: "0.0.1", + version: "0.0.2", type: "action", annotations: { destructiveHint: false, diff --git a/components/everstox/actions/search-orders/search-orders.mjs b/components/everstox/actions/search-orders/search-orders.mjs index ef76cd11814fa..e148e0f413e6b 100644 --- a/components/everstox/actions/search-orders/search-orders.mjs +++ b/components/everstox/actions/search-orders/search-orders.mjs @@ -5,7 +5,7 @@ export default { key: "everstox-search-orders", name: "Search Orders by Order Number", description: "Search orders from Everstox. [See the documentation](https://api.everstox.com/api/v1/ui/#/Order/district_core.api.shops.orders.orders.Orders.index)", - version: "0.0.1", + version: "0.0.2", type: "action", annotations: { destructiveHint: false, From 5861bdaa12bb020a6f76ce9b8bde99a46d4ee442 Mon Sep 17 00:00:00 2001 From: Michelle Bergeron Date: Thu, 25 Jun 2026 14:25:44 -0400 Subject: [PATCH 3/8] fix(everstox): expand list-products description and add min validation to limit/offset Co-Authored-By: Claude Sonnet 4.6 --- components/everstox/actions/list-products/list-products.mjs | 4 +++- 1 file changed, 3 insertions(+), 1 deletion(-) diff --git a/components/everstox/actions/list-products/list-products.mjs b/components/everstox/actions/list-products/list-products.mjs index 6b10a20345ebc..265feeed80261 100644 --- a/components/everstox/actions/list-products/list-products.mjs +++ b/components/everstox/actions/list-products/list-products.mjs @@ -3,7 +3,7 @@ import everstox from "../../everstox.app.mjs"; export default { key: "everstox-list-products", name: "List Products", - description: "List products in an Everstox shop. [See the documentation](https://api.staging.everstox.com/api/v1/ui/#/Product/district_core.api.shops.products.products.Products.index)", + description: "List products in an Everstox shop. Use this to browse or audit the product catalog, check inventory by SKU or name, or filter by warehouse. Filter dates must be in `YYYY-MM-DD` format (e.g. `2021-02-23`). Results default to 10 per page — use `limit` and `offset` together to paginate through large catalogs. [See the documentation](https://api.staging.everstox.com/api/v1/ui/#/Product/district_core.api.shops.products.products.Products.index)", version: "0.0.1", type: "action", annotations: { @@ -60,12 +60,14 @@ export default { type: "integer", label: "Limit", description: "The number of products to return (default 10)", + min: 1, optional: true, }, offset: { type: "integer", label: "Offset", description: "The number of products to skip before starting to collect the result set", + min: 0, optional: true, }, }, From 5345bf55837cb661461d25bcb9e18b4f82ac975b Mon Sep 17 00:00:00 2001 From: Michelle Bergeron Date: Wed, 1 Jul 2026 11:23:19 -0400 Subject: [PATCH 4/8] updates --- .../create-fulfillment-update-request.mjs | 19 ++- .../actions/list-products/list-products.mjs | 113 ++++++++++++++---- components/everstox/common/constants.mjs | 13 ++ 3 files changed, 117 insertions(+), 28 deletions(-) diff --git a/components/everstox/actions/create-fulfillment-update-request/create-fulfillment-update-request.mjs b/components/everstox/actions/create-fulfillment-update-request/create-fulfillment-update-request.mjs index 5631ec85aa5b5..32fdaa6f11cf9 100644 --- a/components/everstox/actions/create-fulfillment-update-request/create-fulfillment-update-request.mjs +++ b/components/everstox/actions/create-fulfillment-update-request/create-fulfillment-update-request.mjs @@ -9,7 +9,7 @@ export default { + " Use this to modify items, quantities, prices, addresses, or priority on an active fulfillment." + " `fulfillment_items` must include at least one item with a valid SKU; `price_set` quantities must sum to the item quantity." + " Address fields `first_name`/`last_name` or `company` are conditionally required (at least one set must be present)." - + " [See the documentation](https://api.staging.everstox.com/api/v1/ui/#/Fulfillment-updates/district_core.api.shops.fulfillments.fulfillments.Fulfillments.create_fulfillment_update_request)", + + " [See the documentation](https://api.everstox.com/api/v1/ui/#/Fulfillment-updates/district_core.api.shops.fulfillments.fulfillments.Fulfillments.create_fulfillment_update_request)", version: "0.0.1", type: "action", annotations: { @@ -22,7 +22,7 @@ export default { fulfillmentId: { type: "string", label: "Fulfillment ID", - description: "The UUID of the fulfillment to update. Must be in `in_fulfillment` state.", + description: "The UUID of the fulfillment to update, for example 550e8400-e29b-41d4-a716-446655440000. Obtain this from the fulfillment object you want to modify. Must be in in_fulfillment state.", }, fulfillmentItems: { type: "string", @@ -40,6 +40,7 @@ export default { + " and at least one of `first_name`/`last_name` or `company`." + " Optional: `address_2`, `title`, `phone`, `province_code`, `address_type` (`private` or `business`)." + " Example: `{\"first_name\": \"John\", \"last_name\": \"Doe\", \"country_code\": \"DE\", \"country\": \"Germany\", \"city\": \"Berlin\", \"zip\": \"10115\", \"address_1\": \"Musterstra\\u00dfe 1\", \"address_type\": \"private\"}`", + optional: true, }, billingAddress: { type: "string", @@ -49,19 +50,27 @@ export default { + " and at least one of `first_name`/`last_name` or `company`." + " Optional: `address_2`, `title`, `phone`, `VAT_number`, `address_type` (`private` or `business`)." + " Example: `{\"first_name\": \"John\", \"last_name\": \"Doe\", \"country_code\": \"DE\", \"country\": \"Germany\", \"city\": \"Berlin\", \"zip\": \"10115\", \"address_1\": \"Musterstra\\u00dfe 1\", \"address_type\": \"private\"}`", + optional: true, }, fulfillmentPriority: { type: "integer", label: "Fulfillment Priority", description: "Priority level for the fulfillment. Must be between 1 (highest) and 99 (lowest).", + optional: true, min: 1, max: 99, }, }, async run({ $ }) { - const fulfillmentItems = JSON.parse(this.fulfillmentItems); - const shippingAddress = JSON.parse(this.shippingAddress); - const billingAddress = JSON.parse(this.billingAddress); + const fulfillmentItems = this.fulfillmentItems + ? JSON.parse(this.fulfillmentItems) + : undefined; + const shippingAddress = this.shippingAddress + ? JSON.parse(this.shippingAddress) + : undefined; + const billingAddress = this.billingAddress + ? JSON.parse(this.billingAddress) + : undefined; const response = await this.everstox.createFulfillmentUpdateRequest({ $, diff --git a/components/everstox/actions/list-products/list-products.mjs b/components/everstox/actions/list-products/list-products.mjs index 265feeed80261..5181854538b50 100644 --- a/components/everstox/actions/list-products/list-products.mjs +++ b/components/everstox/actions/list-products/list-products.mjs @@ -1,9 +1,10 @@ +import constants from "../../common/constants.mjs"; import everstox from "../../everstox.app.mjs"; export default { key: "everstox-list-products", name: "List Products", - description: "List products in an Everstox shop. Use this to browse or audit the product catalog, check inventory by SKU or name, or filter by warehouse. Filter dates must be in `YYYY-MM-DD` format (e.g. `2021-02-23`). Results default to 10 per page — use `limit` and `offset` together to paginate through large catalogs. [See the documentation](https://api.staging.everstox.com/api/v1/ui/#/Product/district_core.api.shops.products.products.Products.index)", + description: "List products in an Everstox shop. Use this to browse or audit the product catalog, check inventory by SKU or name, or filter by warehouse. Results default to 10 per page — use `limit` and `offset` together to paginate through large catalogs. [See the documentation](https://api.everstox.com/api/v1/ui/#/Product/district_core.api.shops.products.products.Products.index)", version: "0.0.1", type: "action", annotations: { @@ -13,10 +14,16 @@ export default { }, props: { everstox, - sku: { + search: { type: "string", - label: "SKU", - description: "Filter products by SKU", + label: "Search", + description: "Search for name or SKU", + optional: true, + }, + sku: { + type: "string[]", + label: "SKUs", + description: "Filter products by SKU. If the number of SKUs exceeds 10, `exact_search` is enforced", optional: true, }, name: { @@ -25,6 +32,61 @@ export default { description: "Filter products by name", optional: true, }, + gtin: { + type: "string", + label: "GTIN", + description: "Filter products by GTIN — returns products with at least one unit whose GTIN contains this value", + optional: true, + }, + customAttributeKey: { + type: "string", + label: "Custom Attribute Key", + description: "Filter products by custom attribute key — returns products with at least one custom attribute whose key contains this value", + optional: true, + }, + customAttributeValue: { + type: "string", + label: "Custom Attribute Value", + description: "Filter products by custom attribute value — returns products with at least one custom attribute whose value contains this value", + optional: true, + }, + status: { + type: "string", + label: "Status", + description: "Filter products by status (default `all`)", + options: constants.STATUS_OPTIONS, + optional: true, + }, + bundleProduct: { + type: "boolean", + label: "Bundle Product", + description: "Filter for bundle products", + optional: true, + }, + exactSearch: { + type: "boolean", + label: "Exact Search", + description: "If true, searches for exact SKU and name matches (default `true`)", + optional: true, + }, + stockRunwayLte: { + type: "integer", + label: "Stock Runway Less Than or Equal To", + description: "Filter for stocks with runway lower than or equal to the number of days provided", + optional: true, + }, + stockRunwayLt: { + type: "integer", + label: "Stock Runway Less Than", + description: "Filter for stocks with runway lower than the number of days provided", + optional: true, + }, + stockRunwayGte: { + type: "integer", + label: "Stock Runway Greater Than or Equal To", + description: "Filter for stocks with runway greater than or equal to the number of days provided", + optional: true, + }, warehouseIds: { propDefinition: [ everstox, @@ -32,28 +94,23 @@ export default { ], optional: true, }, - createdDateGte: { - type: "string", - label: "Created Date Greater Than or Equal To", - description: "Filter products with a creation date greater than or equal to the provided date. Example: `2021-02-23`", - optional: true, - }, - createdDateLte: { + orderBy: { type: "string", - label: "Created Date Less Than or Equal To", - description: "Filter products with a creation date less than or equal to the provided date. Example: `2021-02-23`", + label: "Order By", + description: "Fields to order the result set by", optional: true, }, - updatedDateGte: { + fields: { type: "string", - label: "Updated Date Greater Than or Equal To", - description: "Filter products with an updated date greater than or equal to the provided date. Example: `2021-02-23`", + label: "Fields", + description: "Fields to include in the response", optional: true, }, - updatedDateLte: { + fieldSet: { type: "string", - label: "Updated Date Less Than or Equal To", - description: "Filter products with an updated date less than or equal to the provided date. Example: `2021-02-23`", + label: "Field Set", + description: "`full` includes all sub-entities (default); `minimal` returns essential fields optimized for performance", + options: constants.FIELD_SET_OPTIONS, optional: true, }, limit: { @@ -61,6 +118,7 @@ export default { label: "Limit", description: "The number of products to return (default 10)", min: 1, + default: 10, optional: true, }, offset: { @@ -75,13 +133,22 @@ export default { const response = await this.everstox.listProducts({ $, params: { + search: this.search, sku: this.sku, name: this.name, + gtin: this.gtin, + custom_attribute_key: this.customAttributeKey, + custom_attribute_value: this.customAttributeValue, + status: this.status, + bundle_product: this.bundleProduct, + exact_search: this.exactSearch, + stock_runway_lte: this.stockRunwayLte, + stock_runway_lt: this.stockRunwayLt, + stock_runway_gte: this.stockRunwayGte, warehouse_ids: this.warehouseIds, - creation_date_gte: this.createdDateGte, - creation_date_lte: this.createdDateLte, - updated_date_gte: this.updatedDateGte, - updated_date_lte: this.updatedDateLte, + order_by: this.orderBy, + fields: this.fields, + field_set: this.fieldSet, limit: this.limit, offset: this.offset, }, diff --git a/components/everstox/common/constants.mjs b/components/everstox/common/constants.mjs index 4548b682fdf31..50bd91820bba4 100644 --- a/components/everstox/common/constants.mjs +++ b/components/everstox/common/constants.mjs @@ -42,6 +42,17 @@ const CANCELLATION_STATE_OPTIONS = [ "completed", ]; +const STATUS_OPTIONS = [ + "all", + "active", + "inactive", +]; + +const FIELD_SET_OPTIONS = [ + "full", + "minimal", +]; + export default { LIMIT, ORDER_BY_OPTIONS, @@ -49,4 +60,6 @@ export default { FULFILLMENT_STATEGROUP_OPTIONS, STATEGROUP_OPTIONS, CANCELLATION_STATE_OPTIONS, + STATUS_OPTIONS, + FIELD_SET_OPTIONS, }; From d3c9d9aada8b13ab46b7913f05630ab8de1faed5 Mon Sep 17 00:00:00 2001 From: Michelle Bergeron Date: Wed, 1 Jul 2026 11:33:01 -0400 Subject: [PATCH 5/8] coderabbit suggestion --- .../create-fulfillment-update-request.mjs | 8 ++++++++ 1 file changed, 8 insertions(+) diff --git a/components/everstox/actions/create-fulfillment-update-request/create-fulfillment-update-request.mjs b/components/everstox/actions/create-fulfillment-update-request/create-fulfillment-update-request.mjs index 32fdaa6f11cf9..43cceda8d8420 100644 --- a/components/everstox/actions/create-fulfillment-update-request/create-fulfillment-update-request.mjs +++ b/components/everstox/actions/create-fulfillment-update-request/create-fulfillment-update-request.mjs @@ -1,4 +1,5 @@ import everstox from "../../everstox.app.mjs"; +import { ConfigurationError } from "@pipedream/platform"; export default { key: "everstox-create-fulfillment-update-request", @@ -62,6 +63,13 @@ export default { }, }, async run({ $ }) { + if (!this.fulfillmentItems + && !this.shippingAddress + && !this.billingAddress + && !this.fulfillmentPriority) { + throw new ConfigurationError("At least one of `fulfillmentItems`, `shippingAddress`, `billingAddress`, or `fulfillmentPriority` must be provided."); + } + const fulfillmentItems = this.fulfillmentItems ? JSON.parse(this.fulfillmentItems) : undefined; From 19988707f0e654cb166e8163ee5d037e3d070e09 Mon Sep 17 00:00:00 2001 From: Michelle Bergeron Date: Wed, 1 Jul 2026 11:41:50 -0400 Subject: [PATCH 6/8] coderabbit suggestion --- .../create-fulfillment-update-request.mjs | 1 + 1 file changed, 1 insertion(+) diff --git a/components/everstox/actions/create-fulfillment-update-request/create-fulfillment-update-request.mjs b/components/everstox/actions/create-fulfillment-update-request/create-fulfillment-update-request.mjs index 43cceda8d8420..36185b2ea929d 100644 --- a/components/everstox/actions/create-fulfillment-update-request/create-fulfillment-update-request.mjs +++ b/components/everstox/actions/create-fulfillment-update-request/create-fulfillment-update-request.mjs @@ -32,6 +32,7 @@ export default { + " Omit `id` when adding a new item; include it when updating an existing one." + " Each item requires a `product.sku` and a `price_set` with at least one entry." + " Example: `[{\"id\": \"550e8400-e29b-41d4-a716-446655440000\", \"quantity\": 2, \"product\": {\"sku\": \"PROD-001\"}, \"price_set\": [{\"quantity\": 2, \"currency\": \"EUR\", \"price_net_after_discount\": \"19.99\", \"tax_amount\": \"3.80\", \"tax_rate\": \"0.19\"}]}]`", + optional: true, }, shippingAddress: { type: "string", From 0ae8a131501047992c3d186fbf79f9f8902610a0 Mon Sep 17 00:00:00 2001 From: Michelle Bergeron Date: Thu, 2 Jul 2026 11:16:32 -0400 Subject: [PATCH 7/8] updates --- .../create-fulfillment-update-request.mjs | 17 ++++------------- components/everstox/common/utils.mjs | 15 +++++++++++++++ 2 files changed, 19 insertions(+), 13 deletions(-) create mode 100644 components/everstox/common/utils.mjs diff --git a/components/everstox/actions/create-fulfillment-update-request/create-fulfillment-update-request.mjs b/components/everstox/actions/create-fulfillment-update-request/create-fulfillment-update-request.mjs index 36185b2ea929d..1a626193b781f 100644 --- a/components/everstox/actions/create-fulfillment-update-request/create-fulfillment-update-request.mjs +++ b/components/everstox/actions/create-fulfillment-update-request/create-fulfillment-update-request.mjs @@ -1,5 +1,6 @@ import everstox from "../../everstox.app.mjs"; import { ConfigurationError } from "@pipedream/platform"; +import { parseJsonProp } from "../../common/utils.mjs"; export default { key: "everstox-create-fulfillment-update-request", @@ -71,23 +72,13 @@ export default { throw new ConfigurationError("At least one of `fulfillmentItems`, `shippingAddress`, `billingAddress`, or `fulfillmentPriority` must be provided."); } - const fulfillmentItems = this.fulfillmentItems - ? JSON.parse(this.fulfillmentItems) - : undefined; - const shippingAddress = this.shippingAddress - ? JSON.parse(this.shippingAddress) - : undefined; - const billingAddress = this.billingAddress - ? JSON.parse(this.billingAddress) - : undefined; - const response = await this.everstox.createFulfillmentUpdateRequest({ $, fulfillmentId: this.fulfillmentId, data: { - fulfillment_items: fulfillmentItems, - shipping_address: shippingAddress, - billing_address: billingAddress, + fulfillment_items: parseJsonProp(this.fulfillmentItems, "fulfillmentItems"), + shipping_address: parseJsonProp(this.shippingAddress, "shippingAddress"), + billing_address: parseJsonProp(this.billingAddress, "billingAddress"), fulfillment_priority: this.fulfillmentPriority, }, }); diff --git a/components/everstox/common/utils.mjs b/components/everstox/common/utils.mjs new file mode 100644 index 0000000000000..f7a6ac2cb2cd1 --- /dev/null +++ b/components/everstox/common/utils.mjs @@ -0,0 +1,15 @@ +import { ConfigurationError } from "@pipedream/platform"; + +export const parseJsonProp = (json, propName) => { + if (!json) { + return undefined; + } + if (typeof json === "string") { + try { + return JSON.parse(json); + } catch (error) { + throw new ConfigurationError(`Invalid JSON string for property ${propName}: ${json}`); + } + } + return json; +}; From ae505a48d111c333bb3de67dbe4586bff2f223df Mon Sep 17 00:00:00 2001 From: Michelle Bergeron Date: Thu, 2 Jul 2026 14:50:04 -0400 Subject: [PATCH 8/8] fix(everstox): serialize array query params as repeated pairs, not `key[]=value` MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit The default axios array serialization sends `?sku[]=X`, which Everstox rejects with an opaque HTTP 500 (verified directly against api.everstox.com: `?sku[]=X` → 500, `?sku=X&sku=Y` → 200). Same class of bug hits any endpoint that takes array query params, notably `search-orders` with `fields=[...]` (400 on bracket notation). Add `paramsSerializer: { indexes: null }` to `_makeRequest` so axios serializes arrays as repeated `key=value` pairs. Applies to every action that goes through `_makeRequest`, so `list-products` (sku, warehouse_ids, fields), `create-fulfillment-update-request`, and pre-existing actions like `search-orders` (fields) all pick up the correct format on their next publish. Surfaced by an eval that called `list-products` with `sku=[realSku]` and got a 500 for a SKU that exists in the account. --- components/everstox/everstox.app.mjs | 6 ++++++ 1 file changed, 6 insertions(+) diff --git a/components/everstox/everstox.app.mjs b/components/everstox/everstox.app.mjs index d1f9f62a2b8c2..bef6b5730298a 100644 --- a/components/everstox/everstox.app.mjs +++ b/components/everstox/everstox.app.mjs @@ -94,6 +94,12 @@ export default { headers: { "everstox-shop-api-token": `${this.$auth.api_token}`, }, + // Everstox's API rejects `key[]=value` bracket notation (returns HTTP + // 500 for `sku`, 400 for `fields`). Serialize array-valued params as + // repeated `key=value` pairs instead of the axios default. + paramsSerializer: { + indexes: null, + }, ...opts, }); },