diff --git a/packages/document/.storybook/main.ts b/packages/document/.storybook/main.ts index 6254fd4a..d78999e9 100644 --- a/packages/document/.storybook/main.ts +++ b/packages/document/.storybook/main.ts @@ -28,6 +28,9 @@ const viteOverrides: UserConfig = { ], }), ], + resolve: { + dedupe: ["react", "react-dom"], + }, } const storybookConfig: StorybookConfig = { diff --git a/packages/document/.storybook/preview.tsx b/packages/document/.storybook/preview.tsx index 8da4d4e3..deea745d 100644 --- a/packages/document/.storybook/preview.tsx +++ b/packages/document/.storybook/preview.tsx @@ -8,7 +8,6 @@ import { } from "@storybook/addon-docs/blocks" import type { Parameters, Preview } from "@storybook/react-vite" import React from "react" -import { worker } from "../mocks/browser" export const parameters: Parameters = { layout: "centered", @@ -23,7 +22,7 @@ export const parameters: Parameters = { overlay: { name: "overlay", value: "#F8F8F8", - } + }, }, }, options: { @@ -99,29 +98,6 @@ export const parameters: Parameters = { // [PARAM_KEY]: true, // } -// Storybook executes this module in both bootstap phase (Node) -// and a story's runtime (browser). However, we cannot call `setupWorker` -// in Node environment, so need to check if we're in a browser. -if (typeof global.process === "undefined") { - // Start the mocking when each story is loaded. - // Repetitive calls to the `.start()` method do not register a new worker, - // but check whether there's an existing once, reusing it, if so. - worker.start({ - serviceWorker: { - url: `${import.meta.env.BASE_URL}mockServiceWorker.js`, - }, - quiet: import.meta.env.PROD, - onUnhandledRequest: !import.meta.env.PROD - ? (req, reqPrint) => { - const url = new URL(req.url) - if (url.hostname === "mock.localhost") { - reqPrint.warning() - } - } - : () => {}, - }) -} - const argTypesEnhancers: Preview["argTypesEnhancers"] = [ (context) => { // when the className prop comes from `JSX.IntrinsicElements['div' | 'span']` @@ -141,5 +117,5 @@ const argTypesEnhancers: Preview["argTypesEnhancers"] = [ export default { parameters, argTypesEnhancers, - tags: ["autodocs"] -}; + tags: ["autodocs"], +} diff --git a/packages/document/eslint.config.js b/packages/document/eslint.config.js deleted file mode 100644 index 092408a9..00000000 --- a/packages/document/eslint.config.js +++ /dev/null @@ -1,28 +0,0 @@ -import js from '@eslint/js' -import globals from 'globals' -import reactHooks from 'eslint-plugin-react-hooks' -import reactRefresh from 'eslint-plugin-react-refresh' -import tseslint from 'typescript-eslint' - -export default tseslint.config( - { ignores: ['dist'] }, - { - extends: [js.configs.recommended, ...tseslint.configs.recommended], - files: ['**/*.{ts,tsx}'], - languageOptions: { - ecmaVersion: 2020, - globals: globals.browser, - }, - plugins: { - 'react-hooks': reactHooks, - 'react-refresh': reactRefresh, - }, - rules: { - ...reactHooks.configs.recommended.rules, - 'react-refresh/only-export-components': [ - 'warn', - { allowConstantExport: true }, - ], - }, - }, -) diff --git a/packages/document/mocks/browser.js b/packages/document/mocks/browser.js deleted file mode 100644 index c578a6eb..00000000 --- a/packages/document/mocks/browser.js +++ /dev/null @@ -1,6 +0,0 @@ -// src/mocks/browser.js -import { setupWorker } from 'msw/browser' -import { handlers } from './handlers' - -// This configures a Service Worker with the given request handlers. -export const worker = setupWorker(...handlers) diff --git a/packages/document/mocks/data/adjustments.js b/packages/document/mocks/data/adjustments.js deleted file mode 100644 index 72d4a6f1..00000000 --- a/packages/document/mocks/data/adjustments.js +++ /dev/null @@ -1,39 +0,0 @@ -import { http } from 'msw' - -const restPost = http.post( - `https://mock.localhost/api/adjustments`, - async (req, res, ctx) => { - return await new Promise((resolve) => { - setTimeout(() => { - resolve( - res( - ctx.status(200), - ctx.json({ - data: { - id: 'eqJGhgEeBb', - type: 'adjustments', - links: { - self: 'https://mock.localhost/api/adjustments/eqJGhgEeBb' - }, - attributes: { - name: 'Manual adjustment', - currency_code: 'EUR', - amount_cents: -100, - amount_float: -1.0, - formatted_amount: '-€1,00', - created_at: '2023-08-23T15:59:30.059Z', - updated_at: '2023-08-23T15:59:30.059Z', - reference: null, - reference_origin: null, - metadata: {} - } - } - }) - ) - ) - }, 1000) - }) - } -) - -export default [restPost] diff --git a/packages/document/mocks/data/bundles.js b/packages/document/mocks/data/bundles.js deleted file mode 100644 index 7053b89e..00000000 --- a/packages/document/mocks/data/bundles.js +++ /dev/null @@ -1,388 +0,0 @@ -import { http } from 'msw' - -const bundles = http.get( - 'https://mock.localhost/api/bundles?include=sku_list.sku_list_items.sku&filter[q][code_in]=WELCOME_KIT_001', - (req, res, ctx) => { - return res( - ctx.status(200), - ctx.json({ - data: [ - { - id: 'PljQzimxgB', - type: 'bundles', - links: { - self: 'https://mock.localhost/api/bundles/PljQzimxgB' - }, - attributes: { - code: 'SHIRTSETSINGLE', - name: 'Commerce Layer Shirt set single', - currency_code: 'EUR', - description: '', - image_url: '', - do_not_ship: false, - do_not_track: false, - price_amount_cents: 10500, - price_amount_float: 105.0, - formatted_price_amount: '€105,00', - compare_at_amount_cents: 10500, - compare_at_amount_float: 105.0, - formatted_compare_at_amount: '€105,00', - skus_count: 2, - created_at: '2022-03-11T10:20:48.680Z', - updated_at: '2022-03-11T10:20:48.680Z', - reference: '', - reference_origin: '', - metadata: {} - }, - relationships: { - market: { - links: { - self: 'https://mock.localhost/api/bundles/PljQzimxgB/relationships/market', - related: - 'https://mock.localhost/api/bundles/PljQzimxgB/market' - } - }, - sku_list: { - links: { - self: 'https://mock.localhost/api/bundles/PljQzimxgB/relationships/sku_list', - related: - 'https://mock.localhost/api/bundles/PljQzimxgB/sku_list' - }, - data: { type: 'sku_lists', id: 'myPrZIqano' } - }, - skus: { - links: { - self: 'https://mock.localhost/api/bundles/PljQzimxgB/relationships/skus', - related: 'https://mock.localhost/api/bundles/PljQzimxgB/skus' - } - }, - attachments: { - links: { - self: 'https://mock.localhost/api/bundles/PljQzimxgB/relationships/attachments', - related: - 'https://mock.localhost/api/bundles/PljQzimxgB/attachments' - } - }, - events: { - links: { - self: 'https://mock.localhost/api/bundles/PljQzimxgB/relationships/events', - related: - 'https://mock.localhost/api/bundles/PljQzimxgB/events' - } - }, - tags: { - links: { - self: 'https://mock.localhost/api/bundles/PljQzimxgB/relationships/tags', - related: 'https://mock.localhost/api/bundles/PljQzimxgB/tags' - } - } - }, - meta: { mode: 'test', organization_id: 'WXlEOFrjnr' } - } - ], - included: [ - { - id: 'myPrZIqano', - type: 'sku_lists', - links: { - self: 'https://mock.localhost/api/sku_lists/myPrZIqano' - }, - attributes: { - name: 'CL SHIRTS (Single shipment)', - slug: 'cl-shirts-single-shipment', - description: '', - image_url: '', - manual: true, - sku_code_regex: null, - created_at: '2022-03-11T10:17:50.637Z', - updated_at: '2022-03-11T10:18:03.442Z', - reference: null, - reference_origin: null, - metadata: {} - }, - relationships: { - customer: { - links: { - self: 'https://mock.localhost/api/sku_lists/myPrZIqano/relationships/customer', - related: - 'https://mock.localhost/api/sku_lists/myPrZIqano/customer' - } - }, - skus: { - links: { - self: 'https://mock.localhost/api/sku_lists/myPrZIqano/relationships/skus', - related: - 'https://mock.localhost/api/sku_lists/myPrZIqano/skus' - } - }, - sku_list_items: { - links: { - self: 'https://mock.localhost/api/sku_lists/myPrZIqano/relationships/sku_list_items', - related: - 'https://mock.localhost/api/sku_lists/myPrZIqano/sku_list_items' - }, - data: [ - { type: 'sku_list_items', id: 'LWKOPINkWM' }, - { type: 'sku_list_items', id: 'vWbjGINmWn' } - ] - }, - bundles: { - links: { - self: 'https://mock.localhost/api/sku_lists/myPrZIqano/relationships/bundles', - related: - 'https://mock.localhost/api/sku_lists/myPrZIqano/bundles' - } - }, - attachments: { - links: { - self: 'https://mock.localhost/api/sku_lists/myPrZIqano/relationships/attachments', - related: - 'https://mock.localhost/api/sku_lists/myPrZIqano/attachments' - } - } - }, - meta: { mode: 'test', organization_id: 'WXlEOFrjnr' } - }, - { - id: 'LWKOPINkWM', - type: 'sku_list_items', - links: { - self: 'https://mock.localhost/api/sku_list_items/LWKOPINkWM' - }, - attributes: { - position: 1, - sku_code: 'TSHIRTMS000000FFFFFFLXXX', - quantity: 1, - created_at: '2022-03-11T10:17:59.154Z', - updated_at: '2022-03-11T10:17:59.154Z', - reference: null, - reference_origin: null, - metadata: {} - }, - relationships: { - sku_list: { - links: { - self: 'https://mock.localhost/api/sku_list_items/LWKOPINkWM/relationships/sku_list', - related: - 'https://mock.localhost/api/sku_list_items/LWKOPINkWM/sku_list' - } - }, - sku: { - links: { - self: 'https://mock.localhost/api/sku_list_items/LWKOPINkWM/relationships/sku', - related: - 'https://mock.localhost/api/sku_list_items/LWKOPINkWM/sku' - }, - data: { type: 'skus', id: 'EWzPQSpRzn' } - } - }, - meta: { mode: 'test', organization_id: 'WXlEOFrjnr' } - }, - { - id: 'vWbjGINmWn', - type: 'sku_list_items', - links: { - self: 'https://mock.localhost/api/sku_list_items/vWbjGINmWn' - }, - attributes: { - position: 2, - sku_code: 'SWEETHMUB7B7B7000000MXXX', - quantity: 1, - created_at: '2022-03-11T10:18:03.437Z', - updated_at: '2022-03-11T10:18:03.437Z', - reference: null, - reference_origin: null, - metadata: {} - }, - relationships: { - sku_list: { - links: { - self: 'https://mock.localhost/api/sku_list_items/vWbjGINmWn/relationships/sku_list', - related: - 'https://mock.localhost/api/sku_list_items/vWbjGINmWn/sku_list' - } - }, - sku: { - links: { - self: 'https://mock.localhost/api/sku_list_items/vWbjGINmWn/relationships/sku', - related: - 'https://mock.localhost/api/sku_list_items/vWbjGINmWn/sku' - }, - data: { type: 'skus', id: 'MBrxeSaGpZ' } - } - }, - meta: { mode: 'test', organization_id: 'WXlEOFrjnr' } - }, - { - id: 'EWzPQSpRzn', - type: 'skus', - links: { - self: 'https://mock.localhost/api/skus/EWzPQSpRzn' - }, - attributes: { - code: 'TSHIRTMS000000FFFFFFLXXX', - name: 'Black Men T-Shirt with White Logo (L)', - description: - 'With a large front pouch pocket and drawstrings in a matching color, this hoodie is a sure crowd-favorite. It’s soft, stylish, and perfect for the cooler evenings.', - image_url: - 'https://data.commercelayer.app/seed/images/skus/TSHIRTMS000000FFFFFFLXXX_FLAT.png', - pieces_per_pack: null, - weight: null, - unit_of_weight: '', - hs_tariff_number: '', - do_not_ship: false, - do_not_track: false, - inventory: null, - created_at: '2022-03-11T09:42:47.300Z', - updated_at: '2022-03-11T10:17:22.143Z', - reference: 'sku_69', - reference_origin: 'CLI', - metadata: {} - }, - relationships: { - shipping_category: { - links: { - self: 'https://mock.localhost/api/skus/EWzPQSpRzn/relationships/shipping_category', - related: - 'https://mock.localhost/api/skus/EWzPQSpRzn/shipping_category' - } - }, - prices: { - links: { - self: 'https://mock.localhost/api/skus/EWzPQSpRzn/relationships/prices', - related: 'https://mock.localhost/api/skus/EWzPQSpRzn/prices' - } - }, - stock_items: { - links: { - self: 'https://mock.localhost/api/skus/EWzPQSpRzn/relationships/stock_items', - related: - 'https://mock.localhost/api/skus/EWzPQSpRzn/stock_items' - } - }, - delivery_lead_times: { - links: { - self: 'https://mock.localhost/api/skus/EWzPQSpRzn/relationships/delivery_lead_times', - related: - 'https://mock.localhost/api/skus/EWzPQSpRzn/delivery_lead_times' - } - }, - sku_options: { - links: { - self: 'https://mock.localhost/api/skus/EWzPQSpRzn/relationships/sku_options', - related: - 'https://mock.localhost/api/skus/EWzPQSpRzn/sku_options' - } - }, - attachments: { - links: { - self: 'https://mock.localhost/api/skus/EWzPQSpRzn/relationships/attachments', - related: - 'https://mock.localhost/api/skus/EWzPQSpRzn/attachments' - } - }, - events: { - links: { - self: 'https://mock.localhost/api/skus/EWzPQSpRzn/relationships/events', - related: 'https://mock.localhost/api/skus/EWzPQSpRzn/events' - } - }, - tags: { - links: { - self: 'https://mock.localhost/api/skus/EWzPQSpRzn/relationships/tags', - related: 'https://mock.localhost/api/skus/EWzPQSpRzn/tags' - } - } - }, - meta: { mode: 'test', organization_id: 'WXlEOFrjnr' } - }, - { - id: 'MBrxeSaGpZ', - type: 'skus', - links: { - self: 'https://mock.localhost/api/skus/MBrxeSaGpZ' - }, - attributes: { - code: 'SWEETHMUB7B7B7000000MXXX', - name: 'Sport Grey Unisex Hoodie Sweatshirt with Black Logo (M)', - description: - 'With a large front pouch pocket and drawstrings in a matching color, this hoodie is a sure crowd-favorite. It’s soft, stylish, and perfect for the cooler evenings.', - image_url: - 'https://data.commercelayer.app/seed/images/skus/HOODIEMX7F7F7F000000MXXX_FLAT.png', - pieces_per_pack: null, - weight: null, - unit_of_weight: '', - hs_tariff_number: '', - do_not_ship: false, - do_not_track: false, - inventory: null, - created_at: '2022-03-11T09:42:48.985Z', - updated_at: '2022-03-11T10:17:41.219Z', - reference: 'sku_70', - reference_origin: 'CLI', - metadata: {} - }, - relationships: { - shipping_category: { - links: { - self: 'https://mock.localhost/api/skus/MBrxeSaGpZ/relationships/shipping_category', - related: - 'https://mock.localhost/api/skus/MBrxeSaGpZ/shipping_category' - } - }, - prices: { - links: { - self: 'https://mock.localhost/api/skus/MBrxeSaGpZ/relationships/prices', - related: 'https://mock.localhost/api/skus/MBrxeSaGpZ/prices' - } - }, - stock_items: { - links: { - self: 'https://mock.localhost/api/skus/MBrxeSaGpZ/relationships/stock_items', - related: - 'https://mock.localhost/api/skus/MBrxeSaGpZ/stock_items' - } - }, - delivery_lead_times: { - links: { - self: 'https://mock.localhost/api/skus/MBrxeSaGpZ/relationships/delivery_lead_times', - related: - 'https://mock.localhost/api/skus/MBrxeSaGpZ/delivery_lead_times' - } - }, - sku_options: { - links: { - self: 'https://mock.localhost/api/skus/MBrxeSaGpZ/relationships/sku_options', - related: - 'https://mock.localhost/api/skus/MBrxeSaGpZ/sku_options' - } - }, - attachments: { - links: { - self: 'https://mock.localhost/api/skus/MBrxeSaGpZ/relationships/attachments', - related: - 'https://mock.localhost/api/skus/MBrxeSaGpZ/attachments' - } - }, - events: { - links: { - self: 'https://mock.localhost/api/skus/MBrxeSaGpZ/relationships/events', - related: 'https://mock.localhost/api/skus/MBrxeSaGpZ/events' - } - }, - tags: { - links: { - self: 'https://mock.localhost/api/skus/MBrxeSaGpZ/relationships/tags', - related: 'https://mock.localhost/api/skus/MBrxeSaGpZ/tags' - } - } - }, - meta: { mode: 'test', organization_id: 'WXlEOFrjnr' } - } - ] - }) - ) - } -) - -export default [bundles] diff --git a/packages/document/mocks/data/line_items.js b/packages/document/mocks/data/line_items.js deleted file mode 100644 index 95139b05..00000000 --- a/packages/document/mocks/data/line_items.js +++ /dev/null @@ -1,82 +0,0 @@ -import { http } from 'msw' - -const restPatch = http.patch( - `https://mock.localhost/api/line_items/:id`, - async (req, res, ctx) => { - return await new Promise((resolve) => { - setTimeout(() => { - resolve(res(ctx.status(200), ctx.body(`Update ${req.params.id}`))) - }, 1000) - }) - } -) - -const restDelete = http.delete( - `https://mock.localhost/api/line_items/:id`, - async (req, res, ctx) => { - return await new Promise((resolve) => { - setTimeout(() => { - resolve(res(ctx.status(200), ctx.body(`Removed ${req.params.id}`))) - }, 1000) - }) - } -) - -const restPost = http.post( - `https://mock.localhost/api/line_items`, - async (req, res, ctx) => { - return await new Promise((resolve) => { - setTimeout(() => { - resolve( - res( - ctx.status(200), - ctx.json({ - data: { - id: 'vrEAtOmRaz', - type: 'line_items', - links: { - self: 'https://mock.localhost/api/line_items/vrEAtOmRaz' - }, - attributes: { - sku_code: null, - bundle_code: null, - quantity: 1, - currency_code: 'EUR', - unit_amount_cents: -100, - unit_amount_float: -1.0, - formatted_unit_amount: '-€1,00', - options_amount_cents: 0, - options_amount_float: 0.0, - formatted_options_amount: '€0,00', - discount_cents: 0, - discount_float: 0.0, - formatted_discount: '€0,00', - total_amount_cents: -100, - total_amount_float: -1.0, - formatted_total_amount: '-€1,00', - tax_amount_cents: 0, - tax_amount_float: 0.0, - formatted_tax_amount: '€0,00', - name: 'Manual adjustment', - image_url: null, - discount_breakdown: {}, - tax_rate: 0.0, - tax_breakdown: {}, - item_type: 'adjustments', - frequency: null, - created_at: '2023-08-23T15:59:30.205Z', - updated_at: '2023-08-23T15:59:30.205Z', - reference: null, - reference_origin: null, - metadata: {} - } - } - }) - ) - ) - }, 1000) - }) - } -) - -export default [restPatch, restDelete, restPost] diff --git a/packages/document/mocks/data/markets.js b/packages/document/mocks/data/markets.js deleted file mode 100644 index b5db10ae..00000000 --- a/packages/document/mocks/data/markets.js +++ /dev/null @@ -1,447 +0,0 @@ -import { http } from 'msw' - -// used in HookedInputResourceGroup -const someMarkets = http.get( - 'https://mock.localhost/api/markets?fields[markets]=id,name&sort=name&page[size]=3', - (req, res, ctx) => { - return res( - ctx.status(200), - ctx.json({ - data: [ - { - id: 'rlEPzheRgO', - type: 'markets', - links: { - self: 'https://mock.localhost/api/markets/rlEPzheRgO' - }, - attributes: { name: 'Adyen' }, - meta: { mode: 'test', organization_id: 'WXlEOFrjnr' } - }, - { - id: 'dlQbPhNNop', - type: 'markets', - links: { - self: 'https://mock.localhost/api/markets/dlQbPhNNop' - }, - attributes: { name: 'Europe' }, - meta: { mode: 'test', organization_id: 'WXlEOFrjnr' } - }, - { - id: 'AlRevhXQga', - type: 'markets', - links: { - self: 'https://mock.localhost/api/markets/AlRevhXQga' - }, - attributes: { name: 'Milan' }, - meta: { mode: 'test', organization_id: 'WXlEOFrjnr' } - } - ], - meta: { record_count: 5, page_count: 2 }, - links: { - first: - 'https://mock.localhost/api/markets?fields%5Bmarkets%5D=id%2Cname&page%5Bnumber%5D=1&page%5Bsize%5D=3&sort=name', - next: 'https://mock.localhost/api/markets?fields%5Bmarkets%5D=id%2Cname&page%5Bnumber%5D=2&page%5Bsize%5D=3&sort=name', - last: 'https://mock.localhost/api/markets?fields%5Bmarkets%5D=id%2Cname&page%5Bnumber%5D=2&page%5Bsize%5D=3&sort=name' - } - }) - ) - } -) - -// used in HookedInputResourceGroup -const allMarkets = http.get( - 'https://mock.localhost/api/markets?sort=name&page[number]=1&page[size]=25', - (req, res, ctx) => { - return res( - ctx.status(200), - ctx.json({ - data: [ - { - id: 'rlEPzheRgO', - type: 'markets', - links: { - self: 'https://mock.localhost/api/markets/rlEPzheRgO' - }, - attributes: { - number: 475, - name: 'Adyen', - facebook_pixel_id: null, - checkout_url: '', - external_prices_url: '', - external_order_validation_url: null, - shared_secret: '5a4c961792866897db26dd3aad9c435e', - private: false, - disabled_at: null, - created_at: '2022-08-23T09:59:25.940Z', - updated_at: '2022-08-23T09:59:25.940Z', - reference: '', - reference_origin: '', - metadata: {} - }, - relationships: { - merchant: { - links: { - self: 'https://mock.localhost/api/markets/rlEPzheRgO/relationships/merchant', - related: - 'https://mock.localhost/api/markets/rlEPzheRgO/merchant' - } - }, - price_list: { - links: { - self: 'https://mock.localhost/api/markets/rlEPzheRgO/relationships/price_list', - related: - 'https://mock.localhost/api/markets/rlEPzheRgO/price_list' - } - }, - inventory_model: { - links: { - self: 'https://mock.localhost/api/markets/rlEPzheRgO/relationships/inventory_model', - related: - 'https://mock.localhost/api/markets/rlEPzheRgO/inventory_model' - } - }, - subscription_model: { - links: { - self: 'https://mock.localhost/api/markets/rlEPzheRgO/relationships/subscription_model', - related: - 'https://mock.localhost/api/markets/rlEPzheRgO/subscription_model' - } - }, - tax_calculator: { - links: { - self: 'https://mock.localhost/api/markets/rlEPzheRgO/relationships/tax_calculator', - related: - 'https://mock.localhost/api/markets/rlEPzheRgO/tax_calculator' - } - }, - customer_group: { - links: { - self: 'https://mock.localhost/api/markets/rlEPzheRgO/relationships/customer_group', - related: - 'https://mock.localhost/api/markets/rlEPzheRgO/customer_group' - } - }, - attachments: { - links: { - self: 'https://mock.localhost/api/markets/rlEPzheRgO/relationships/attachments', - related: - 'https://mock.localhost/api/markets/rlEPzheRgO/attachments' - } - } - }, - meta: { mode: 'test', organization_id: 'WXlEOFrjnr' } - }, - { - id: 'dlQbPhNNop', - type: 'markets', - links: { - self: 'https://mock.localhost/api/markets/dlQbPhNNop' - }, - attributes: { - number: 350, - name: 'Europe', - facebook_pixel_id: null, - checkout_url: '', - external_prices_url: - 'https://pippo.malessani.commercelayer.dev/api/verify', - external_order_validation_url: '', - shared_secret: '4ea4390961025de791d5bb92e92744eb', - private: false, - disabled_at: null, - created_at: '2022-03-11T09:40:49.000Z', - updated_at: '2023-03-13T13:30:32.184Z', - reference: 'market_1', - reference_origin: 'CLI', - metadata: {} - }, - relationships: { - merchant: { - links: { - self: 'https://mock.localhost/api/markets/dlQbPhNNop/relationships/merchant', - related: - 'https://mock.localhost/api/markets/dlQbPhNNop/merchant' - } - }, - price_list: { - links: { - self: 'https://mock.localhost/api/markets/dlQbPhNNop/relationships/price_list', - related: - 'https://mock.localhost/api/markets/dlQbPhNNop/price_list' - } - }, - inventory_model: { - links: { - self: 'https://mock.localhost/api/markets/dlQbPhNNop/relationships/inventory_model', - related: - 'https://mock.localhost/api/markets/dlQbPhNNop/inventory_model' - } - }, - subscription_model: { - links: { - self: 'https://mock.localhost/api/markets/dlQbPhNNop/relationships/subscription_model', - related: - 'https://mock.localhost/api/markets/dlQbPhNNop/subscription_model' - } - }, - tax_calculator: { - links: { - self: 'https://mock.localhost/api/markets/dlQbPhNNop/relationships/tax_calculator', - related: - 'https://mock.localhost/api/markets/dlQbPhNNop/tax_calculator' - } - }, - customer_group: { - links: { - self: 'https://mock.localhost/api/markets/dlQbPhNNop/relationships/customer_group', - related: - 'https://mock.localhost/api/markets/dlQbPhNNop/customer_group' - } - }, - attachments: { - links: { - self: 'https://mock.localhost/api/markets/dlQbPhNNop/relationships/attachments', - related: - 'https://mock.localhost/api/markets/dlQbPhNNop/attachments' - } - } - }, - meta: { mode: 'test', organization_id: 'WXlEOFrjnr' } - }, - { - id: 'AlRevhXQga', - type: 'markets', - links: { - self: 'https://mock.localhost/api/markets/AlRevhXQga' - }, - attributes: { - number: 418, - name: 'Milan', - facebook_pixel_id: null, - checkout_url: '', - external_prices_url: '', - external_order_validation_url: null, - shared_secret: 'fc9954fc7ae851d9588d456656ba102f', - private: false, - disabled_at: null, - created_at: '2022-05-13T12:27:05.075Z', - updated_at: '2022-05-13T12:27:05.075Z', - reference: '', - reference_origin: '', - metadata: {} - }, - relationships: { - merchant: { - links: { - self: 'https://mock.localhost/api/markets/AlRevhXQga/relationships/merchant', - related: - 'https://mock.localhost/api/markets/AlRevhXQga/merchant' - } - }, - price_list: { - links: { - self: 'https://mock.localhost/api/markets/AlRevhXQga/relationships/price_list', - related: - 'https://mock.localhost/api/markets/AlRevhXQga/price_list' - } - }, - inventory_model: { - links: { - self: 'https://mock.localhost/api/markets/AlRevhXQga/relationships/inventory_model', - related: - 'https://mock.localhost/api/markets/AlRevhXQga/inventory_model' - } - }, - subscription_model: { - links: { - self: 'https://mock.localhost/api/markets/AlRevhXQga/relationships/subscription_model', - related: - 'https://mock.localhost/api/markets/AlRevhXQga/subscription_model' - } - }, - tax_calculator: { - links: { - self: 'https://mock.localhost/api/markets/AlRevhXQga/relationships/tax_calculator', - related: - 'https://mock.localhost/api/markets/AlRevhXQga/tax_calculator' - } - }, - customer_group: { - links: { - self: 'https://mock.localhost/api/markets/AlRevhXQga/relationships/customer_group', - related: - 'https://mock.localhost/api/markets/AlRevhXQga/customer_group' - } - }, - attachments: { - links: { - self: 'https://mock.localhost/api/markets/AlRevhXQga/relationships/attachments', - related: - 'https://mock.localhost/api/markets/AlRevhXQga/attachments' - } - } - }, - meta: { mode: 'test', organization_id: 'WXlEOFrjnr' } - }, - { - id: 'AjRevhQOoa', - type: 'markets', - links: { - self: 'https://mock.localhost/api/markets/AjRevhQOoa' - }, - attributes: { - number: 351, - name: 'UK', - facebook_pixel_id: null, - checkout_url: null, - external_prices_url: null, - external_order_validation_url: null, - shared_secret: 'a028eb9f9812ee2949da28cd3f8f5268', - private: false, - disabled_at: null, - created_at: '2022-03-11T09:40:50.558Z', - updated_at: '2022-03-11T09:40:50.558Z', - reference: 'market_3', - reference_origin: 'CLI', - metadata: {} - }, - relationships: { - merchant: { - links: { - self: 'https://mock.localhost/api/markets/AjRevhQOoa/relationships/merchant', - related: - 'https://mock.localhost/api/markets/AjRevhQOoa/merchant' - } - }, - price_list: { - links: { - self: 'https://mock.localhost/api/markets/AjRevhQOoa/relationships/price_list', - related: - 'https://mock.localhost/api/markets/AjRevhQOoa/price_list' - } - }, - inventory_model: { - links: { - self: 'https://mock.localhost/api/markets/AjRevhQOoa/relationships/inventory_model', - related: - 'https://mock.localhost/api/markets/AjRevhQOoa/inventory_model' - } - }, - subscription_model: { - links: { - self: 'https://mock.localhost/api/markets/AjRevhQOoa/relationships/subscription_model', - related: - 'https://mock.localhost/api/markets/AjRevhQOoa/subscription_model' - } - }, - tax_calculator: { - links: { - self: 'https://mock.localhost/api/markets/AjRevhQOoa/relationships/tax_calculator', - related: - 'https://mock.localhost/api/markets/AjRevhQOoa/tax_calculator' - } - }, - customer_group: { - links: { - self: 'https://mock.localhost/api/markets/AjRevhQOoa/relationships/customer_group', - related: - 'https://mock.localhost/api/markets/AjRevhQOoa/customer_group' - } - }, - attachments: { - links: { - self: 'https://mock.localhost/api/markets/AjRevhQOoa/relationships/attachments', - related: - 'https://mock.localhost/api/markets/AjRevhQOoa/attachments' - } - } - }, - meta: { mode: 'test', organization_id: 'WXlEOFrjnr' } - }, - { - id: 'EjDkXhNEoD', - type: 'markets', - links: { - self: 'https://mock.localhost/api/markets/EjDkXhNEoD' - }, - attributes: { - number: 349, - name: 'USA', - facebook_pixel_id: null, - checkout_url: '', - external_prices_url: '', - external_order_validation_url: null, - shared_secret: '60860b96e891725099e0b1a72dceb510', - private: false, - disabled_at: null, - created_at: '2022-02-24T14:08:20.092Z', - updated_at: '2022-03-21T09:37:44.202Z', - reference: 'market_2', - reference_origin: 'CLI', - metadata: {} - }, - relationships: { - merchant: { - links: { - self: 'https://mock.localhost/api/markets/EjDkXhNEoD/relationships/merchant', - related: - 'https://mock.localhost/api/markets/EjDkXhNEoD/merchant' - } - }, - price_list: { - links: { - self: 'https://mock.localhost/api/markets/EjDkXhNEoD/relationships/price_list', - related: - 'https://mock.localhost/api/markets/EjDkXhNEoD/price_list' - } - }, - inventory_model: { - links: { - self: 'https://mock.localhost/api/markets/EjDkXhNEoD/relationships/inventory_model', - related: - 'https://mock.localhost/api/markets/EjDkXhNEoD/inventory_model' - } - }, - subscription_model: { - links: { - self: 'https://mock.localhost/api/markets/EjDkXhNEoD/relationships/subscription_model', - related: - 'https://mock.localhost/api/markets/EjDkXhNEoD/subscription_model' - } - }, - tax_calculator: { - links: { - self: 'https://mock.localhost/api/markets/EjDkXhNEoD/relationships/tax_calculator', - related: - 'https://mock.localhost/api/markets/EjDkXhNEoD/tax_calculator' - } - }, - customer_group: { - links: { - self: 'https://mock.localhost/api/markets/EjDkXhNEoD/relationships/customer_group', - related: - 'https://mock.localhost/api/markets/EjDkXhNEoD/customer_group' - } - }, - attachments: { - links: { - self: 'https://mock.localhost/api/markets/EjDkXhNEoD/relationships/attachments', - related: - 'https://mock.localhost/api/markets/EjDkXhNEoD/attachments' - } - } - }, - meta: { mode: 'test', organization_id: 'WXlEOFrjnr' } - } - ], - meta: { record_count: 5, page_count: 1 }, - links: { - first: - 'https://mock.localhost/api/markets?page%5Bnumber%5D=1&page%5Bsize%5D=25&sort=name', - last: 'https://mock.localhost/api/markets?page%5Bnumber%5D=1&page%5Bsize%5D=25&sort=name' - } - }) - ) - } -) - -export default [allMarkets, someMarkets] diff --git a/packages/document/mocks/data/orders.js b/packages/document/mocks/data/orders.js deleted file mode 100644 index 49afe454..00000000 --- a/packages/document/mocks/data/orders.js +++ /dev/null @@ -1,3713 +0,0 @@ -import { http } from 'msw' - -const order = { - id: 'NMWYhbGorj', - type: 'orders', - links: { - self: 'https://alessani.commercelayer.co/api/orders/NMWYhbGorj' - }, - attributes: { - number: 2485862, - autorefresh: true, - status: 'approved', - payment_status: 'paid', - fulfillment_status: 'in_progress', - guest: true, - editable: false, - customer_email: 'customer@tk.com', - language_code: 'en', - currency_code: 'EUR', - tax_included: true, - tax_rate: null, - freight_taxable: null, - requires_billing_info: true, - country_code: 'IT', - shipping_country_code_lock: null, - coupon_code: null, - gift_card_code: '9951a05f-741a-4ab1-8405-2a7e57612792', - gift_card_or_coupon_code: '9951a05f-741a-4ab1-8405-2a7e57612792', - subtotal_amount_cents: 24400, - subtotal_amount_float: 244.0, - formatted_subtotal_amount: '€244,00', - shipping_amount_cents: 0, - shipping_amount_float: 0.0, - formatted_shipping_amount: '€0,00', - payment_method_amount_cents: 1000, - payment_method_amount_float: 10.0, - formatted_payment_method_amount: '€10,00', - discount_amount_cents: 0, - discount_amount_float: 0.0, - formatted_discount_amount: '€0,00', - adjustment_amount_cents: 0, - adjustment_amount_float: 0.0, - formatted_adjustment_amount: '€0,00', - gift_card_amount_cents: -10000, - gift_card_amount_float: -100.0, - formatted_gift_card_amount: '-€100,00', - total_tax_amount_cents: 0, - total_tax_amount_float: 0.0, - formatted_total_tax_amount: '€0,00', - subtotal_tax_amount_cents: 0, - subtotal_tax_amount_float: 0.0, - formatted_subtotal_tax_amount: '€0,00', - shipping_tax_amount_cents: 0, - shipping_tax_amount_float: 0.0, - formatted_shipping_tax_amount: '€0,00', - payment_method_tax_amount_cents: 0, - payment_method_tax_amount_float: 0.0, - formatted_payment_method_tax_amount: '€0,00', - adjustment_tax_amount_cents: 0, - adjustment_tax_amount_float: 0.0, - formatted_adjustment_tax_amount: '€0,00', - total_amount_cents: 25400, - total_amount_float: 254.0, - formatted_total_amount: '€254,00', - total_taxable_amount_cents: 25400, - total_taxable_amount_float: 254.0, - formatted_total_taxable_amount: '€254,00', - subtotal_taxable_amount_cents: 24400, - subtotal_taxable_amount_float: 244.0, - formatted_subtotal_taxable_amount: '€244,00', - shipping_taxable_amount_cents: 0, - shipping_taxable_amount_float: 0.0, - formatted_shipping_taxable_amount: '€0,00', - payment_method_taxable_amount_cents: 1000, - payment_method_taxable_amount_float: 10.0, - formatted_payment_method_taxable_amount: '€10,00', - adjustment_taxable_amount_cents: 0, - adjustment_taxable_amount_float: 0.0, - formatted_adjustment_taxable_amount: '€0,00', - total_amount_with_taxes_cents: 15400, - total_amount_with_taxes_float: 154.0, - formatted_total_amount_with_taxes: '€154,00', - fees_amount_cents: 0, - fees_amount_float: 0.0, - formatted_fees_amount: '€0,00', - duty_amount_cents: null, - duty_amount_float: null, - formatted_duty_amount: null, - skus_count: 6, - line_item_options_count: 0, - shipments_count: 2, - tax_calculations_count: 0, - validations_count: 0, - payment_source_details: { - type: 'stripe_payment', - payment_method_id: 'pm_1N8LhuK5j6INEBBIHXkK0FFF', - payment_method_type: 'card', - payment_method_details: { - brand: 'visa', - last4: '4242', - checks: { - cvc_check: 'pass', - address_line1_check: 'pass', - address_postal_code_check: 'pass' - }, - wallet: null, - country: 'US', - funding: 'credit', - exp_year: 2031, - networks: { available: ['visa'], preferred: null }, - exp_month: 2, - fingerprint: 'bVaeOEKRmYhi20Nj', - generated_from: null, - three_d_secure_usage: { supported: true } - } - }, - token: '7fe6285a3dfdabeb8cb9324980743396', - cart_url: null, - return_url: null, - terms_url: null, - privacy_url: null, - checkout_url: null, - placed_at: '2023-05-16T11:06:22.012Z', - approved_at: '2023-05-16T14:18:16.775Z', - cancelled_at: null, - payment_updated_at: '2023-05-16T14:18:35.404Z', - fulfillment_updated_at: '2023-05-16T14:18:35.411Z', - refreshed_at: '2023-05-16T11:06:04.613Z', - archived_at: null, - expires_at: null, - subscription_created_at: null, - created_at: '2023-05-16T11:06:02.074Z', - updated_at: '2023-05-16T14:18:35.572Z', - reference: null, - reference_origin: null, - metadata: {} - }, - relationships: { - market: { - links: { - self: 'https://alessani.commercelayer.co/api/orders/NMWYhbGorj/relationships/market', - related: - 'https://alessani.commercelayer.co/api/orders/NMWYhbGorj/market' - }, - data: { type: 'markets', id: 'dlQbPhNNop' } - }, - customer: { - links: { - self: 'https://alessani.commercelayer.co/api/orders/NMWYhbGorj/relationships/customer', - related: - 'https://alessani.commercelayer.co/api/orders/NMWYhbGorj/customer' - }, - data: { type: 'customers', id: 'JkAdBhNGjQ' } - }, - shipping_address: { - links: { - self: 'https://alessani.commercelayer.co/api/orders/NMWYhbGorj/relationships/shipping_address', - related: - 'https://alessani.commercelayer.co/api/orders/NMWYhbGorj/shipping_address' - }, - data: { type: 'addresses', id: 'dPoNukZmnB' } - }, - billing_address: { - links: { - self: 'https://alessani.commercelayer.co/api/orders/NMWYhbGorj/relationships/billing_address', - related: - 'https://alessani.commercelayer.co/api/orders/NMWYhbGorj/billing_address' - }, - data: { type: 'addresses', id: 'dQxruwZDnB' } - }, - available_payment_methods: { - links: { - self: 'https://alessani.commercelayer.co/api/orders/NMWYhbGorj/relationships/available_payment_methods', - related: - 'https://alessani.commercelayer.co/api/orders/NMWYhbGorj/available_payment_methods' - } - }, - available_customer_payment_sources: { - links: { - self: 'https://alessani.commercelayer.co/api/orders/NMWYhbGorj/relationships/available_customer_payment_sources', - related: - 'https://alessani.commercelayer.co/api/orders/NMWYhbGorj/available_customer_payment_sources' - } - }, - available_free_skus: { - links: { - self: 'https://alessani.commercelayer.co/api/orders/NMWYhbGorj/relationships/available_free_skus', - related: - 'https://alessani.commercelayer.co/api/orders/NMWYhbGorj/available_free_skus' - } - }, - available_free_bundles: { - links: { - self: 'https://alessani.commercelayer.co/api/orders/NMWYhbGorj/relationships/available_free_bundles', - related: - 'https://alessani.commercelayer.co/api/orders/NMWYhbGorj/available_free_bundles' - } - }, - payment_method: { - links: { - self: 'https://alessani.commercelayer.co/api/orders/NMWYhbGorj/relationships/payment_method', - related: - 'https://alessani.commercelayer.co/api/orders/NMWYhbGorj/payment_method' - }, - data: { type: 'payment_methods', id: 'wmBvQsARml' } - }, - payment_source: { - links: { - self: 'https://alessani.commercelayer.co/api/orders/NMWYhbGorj/relationships/payment_source', - related: - 'https://alessani.commercelayer.co/api/orders/NMWYhbGorj/payment_source' - }, - data: { type: 'stripe_payments', id: 'onXELSmbQy' } - }, - line_items: { - links: { - self: 'https://alessani.commercelayer.co/api/orders/NMWYhbGorj/relationships/line_items', - related: - 'https://alessani.commercelayer.co/api/orders/NMWYhbGorj/line_items' - }, - data: [ - { type: 'line_items', id: 'vaoMtAZlXy' }, - { type: 'line_items', id: 'kmnptjPlBv' }, - { type: 'line_items', id: 'vWEZtMGVKy' }, - { type: 'line_items', id: 'NqYatGaKnN' }, - { type: 'line_items', id: 'NoEntBwEdk' }, - { type: 'line_items', id: 'NlQmtMAnGy' } - ] - }, - shipments: { - links: { - self: 'https://alessani.commercelayer.co/api/orders/NMWYhbGorj/relationships/shipments', - related: - 'https://alessani.commercelayer.co/api/orders/NMWYhbGorj/shipments' - }, - data: [ - { type: 'shipments', id: 'YpLwCnNQgY' }, - { type: 'shipments', id: 'PabvCpOxRy' } - ] - }, - transactions: { - links: { - self: 'https://alessani.commercelayer.co/api/orders/NMWYhbGorj/relationships/transactions', - related: - 'https://alessani.commercelayer.co/api/orders/NMWYhbGorj/transactions' - }, - data: [ - { type: 'authorizations', id: 'nKZkPUDBVj' }, - { type: 'captures', id: 'kyAnxUgegE' } - ] - }, - authorizations: { - links: { - self: 'https://alessani.commercelayer.co/api/orders/NMWYhbGorj/relationships/authorizations', - related: - 'https://alessani.commercelayer.co/api/orders/NMWYhbGorj/authorizations' - } - }, - captures: { - links: { - self: 'https://alessani.commercelayer.co/api/orders/NMWYhbGorj/relationships/captures', - related: - 'https://alessani.commercelayer.co/api/orders/NMWYhbGorj/captures' - } - }, - voids: { - links: { - self: 'https://alessani.commercelayer.co/api/orders/NMWYhbGorj/relationships/voids', - related: 'https://alessani.commercelayer.co/api/orders/NMWYhbGorj/voids' - } - }, - refunds: { - links: { - self: 'https://alessani.commercelayer.co/api/orders/NMWYhbGorj/relationships/refunds', - related: - 'https://alessani.commercelayer.co/api/orders/NMWYhbGorj/refunds' - } - }, - returns: { - links: { - self: 'https://alessani.commercelayer.co/api/orders/NMWYhbGorj/relationships/returns', - related: - 'https://alessani.commercelayer.co/api/orders/NMWYhbGorj/returns' - } - }, - order_subscriptions: { - links: { - self: 'https://alessani.commercelayer.co/api/orders/NMWYhbGorj/relationships/order_subscriptions', - related: - 'https://alessani.commercelayer.co/api/orders/NMWYhbGorj/order_subscriptions' - } - }, - order_factories: { - links: { - self: 'https://alessani.commercelayer.co/api/orders/NMWYhbGorj/relationships/order_factories', - related: - 'https://alessani.commercelayer.co/api/orders/NMWYhbGorj/order_factories' - } - }, - order_copies: { - links: { - self: 'https://alessani.commercelayer.co/api/orders/NMWYhbGorj/relationships/order_copies', - related: - 'https://alessani.commercelayer.co/api/orders/NMWYhbGorj/order_copies' - } - }, - recurring_order_copies: { - links: { - self: 'https://alessani.commercelayer.co/api/orders/NMWYhbGorj/relationships/recurring_order_copies', - related: - 'https://alessani.commercelayer.co/api/orders/NMWYhbGorj/recurring_order_copies' - } - }, - attachments: { - links: { - self: 'https://alessani.commercelayer.co/api/orders/NMWYhbGorj/relationships/attachments', - related: - 'https://alessani.commercelayer.co/api/orders/NMWYhbGorj/attachments' - }, - data: [{ type: 'attachments', id: 'EqGrksxWNW' }] - }, - events: { - links: { - self: 'https://alessani.commercelayer.co/api/orders/NMWYhbGorj/relationships/events', - related: - 'https://alessani.commercelayer.co/api/orders/NMWYhbGorj/events' - } - }, - tags: { - links: { - self: 'https://alessani.commercelayer.co/api/orders/NMWYhbGorj/relationships/tags', - related: 'https://alessani.commercelayer.co/api/orders/NMWYhbGorj/tags' - } - }, - versions: { - links: { - self: 'https://alessani.commercelayer.co/api/orders/NMWYhbGorj/relationships/versions', - related: - 'https://alessani.commercelayer.co/api/orders/NMWYhbGorj/versions' - } - } - }, - meta: { mode: 'test', organization_id: 'WXlEOFrjnr' } -} - -const orderDetail = http.get( - 'https://mock.localhost/api/orders/NMWYhbGorj?include=shipments,transactions,payment_method,payment_source,attachments', - async (req, res, ctx) => { - return await new Promise((resolve) => { - setTimeout(() => { - resolve( - res( - ctx.status(200), - ctx.json({ - data: order, - included: [ - { - id: 'dlQbPhNNop', - type: 'markets', - links: { - self: 'https://alessani.commercelayer.co/api/markets/dlQbPhNNop' - }, - attributes: { - number: 350, - name: 'Europe', - facebook_pixel_id: null, - checkout_url: '', - external_prices_url: - 'https://pippo.malessani.commercelayer.dev/api/verify', - external_order_validation_url: '', - private: false, - disabled_at: null, - created_at: '2022-03-11T09:40:49.000Z', - updated_at: '2023-03-13T13:30:32.184Z', - reference: 'market_1', - reference_origin: 'CLI', - metadata: {} - }, - relationships: { - merchant: { - links: { - self: 'https://alessani.commercelayer.co/api/markets/dlQbPhNNop/relationships/merchant', - related: - 'https://alessani.commercelayer.co/api/markets/dlQbPhNNop/merchant' - } - }, - price_list: { - links: { - self: 'https://alessani.commercelayer.co/api/markets/dlQbPhNNop/relationships/price_list', - related: - 'https://alessani.commercelayer.co/api/markets/dlQbPhNNop/price_list' - } - }, - inventory_model: { - links: { - self: 'https://alessani.commercelayer.co/api/markets/dlQbPhNNop/relationships/inventory_model', - related: - 'https://alessani.commercelayer.co/api/markets/dlQbPhNNop/inventory_model' - } - }, - subscription_model: { - links: { - self: 'https://alessani.commercelayer.co/api/markets/dlQbPhNNop/relationships/subscription_model', - related: - 'https://alessani.commercelayer.co/api/markets/dlQbPhNNop/subscription_model' - } - }, - tax_calculator: { - links: { - self: 'https://alessani.commercelayer.co/api/markets/dlQbPhNNop/relationships/tax_calculator', - related: - 'https://alessani.commercelayer.co/api/markets/dlQbPhNNop/tax_calculator' - } - }, - customer_group: { - links: { - self: 'https://alessani.commercelayer.co/api/markets/dlQbPhNNop/relationships/customer_group', - related: - 'https://alessani.commercelayer.co/api/markets/dlQbPhNNop/customer_group' - } - }, - attachments: { - links: { - self: 'https://alessani.commercelayer.co/api/markets/dlQbPhNNop/relationships/attachments', - related: - 'https://alessani.commercelayer.co/api/markets/dlQbPhNNop/attachments' - } - }, - versions: { - links: { - self: 'https://alessani.commercelayer.co/api/markets/dlQbPhNNop/relationships/versions', - related: - 'https://alessani.commercelayer.co/api/markets/dlQbPhNNop/versions' - } - } - }, - meta: { mode: 'test', organization_id: 'WXlEOFrjnr' } - }, - { - id: 'JkAdBhNGjQ', - type: 'customers', - links: { - self: 'https://alessani.commercelayer.co/api/customers/JkAdBhNGjQ' - }, - attributes: { - email: 'customer@tk.com', - status: 'repeat', - has_password: false, - total_orders_count: 2753, - created_at: '2022-03-14T09:13:06.633Z', - updated_at: '2023-07-31T09:13:06.049Z', - reference: null, - reference_origin: null, - metadata: {} - }, - relationships: { - customer_group: { - links: { - self: 'https://alessani.commercelayer.co/api/customers/JkAdBhNGjQ/relationships/customer_group', - related: - 'https://alessani.commercelayer.co/api/customers/JkAdBhNGjQ/customer_group' - } - }, - customer_addresses: { - links: { - self: 'https://alessani.commercelayer.co/api/customers/JkAdBhNGjQ/relationships/customer_addresses', - related: - 'https://alessani.commercelayer.co/api/customers/JkAdBhNGjQ/customer_addresses' - } - }, - customer_payment_sources: { - links: { - self: 'https://alessani.commercelayer.co/api/customers/JkAdBhNGjQ/relationships/customer_payment_sources', - related: - 'https://alessani.commercelayer.co/api/customers/JkAdBhNGjQ/customer_payment_sources' - } - }, - customer_subscriptions: { - links: { - self: 'https://alessani.commercelayer.co/api/customers/JkAdBhNGjQ/relationships/customer_subscriptions', - related: - 'https://alessani.commercelayer.co/api/customers/JkAdBhNGjQ/customer_subscriptions' - } - }, - orders: { - links: { - self: 'https://alessani.commercelayer.co/api/customers/JkAdBhNGjQ/relationships/orders', - related: - 'https://alessani.commercelayer.co/api/customers/JkAdBhNGjQ/orders' - } - }, - order_subscriptions: { - links: { - self: 'https://alessani.commercelayer.co/api/customers/JkAdBhNGjQ/relationships/order_subscriptions', - related: - 'https://alessani.commercelayer.co/api/customers/JkAdBhNGjQ/order_subscriptions' - } - }, - returns: { - links: { - self: 'https://alessani.commercelayer.co/api/customers/JkAdBhNGjQ/relationships/returns', - related: - 'https://alessani.commercelayer.co/api/customers/JkAdBhNGjQ/returns' - } - }, - sku_lists: { - links: { - self: 'https://alessani.commercelayer.co/api/customers/JkAdBhNGjQ/relationships/sku_lists', - related: - 'https://alessani.commercelayer.co/api/customers/JkAdBhNGjQ/sku_lists' - } - }, - attachments: { - links: { - self: 'https://alessani.commercelayer.co/api/customers/JkAdBhNGjQ/relationships/attachments', - related: - 'https://alessani.commercelayer.co/api/customers/JkAdBhNGjQ/attachments' - } - }, - events: { - links: { - self: 'https://alessani.commercelayer.co/api/customers/JkAdBhNGjQ/relationships/events', - related: - 'https://alessani.commercelayer.co/api/customers/JkAdBhNGjQ/events' - } - }, - tags: { - links: { - self: 'https://alessani.commercelayer.co/api/customers/JkAdBhNGjQ/relationships/tags', - related: - 'https://alessani.commercelayer.co/api/customers/JkAdBhNGjQ/tags' - } - } - }, - meta: { mode: 'test', organization_id: 'WXlEOFrjnr' } - }, - { - id: 'dPoNukZmnB', - type: 'addresses', - links: { - self: 'https://alessani.commercelayer.co/api/addresses/dPoNukZmnB' - }, - attributes: { - business: false, - first_name: 'Darth', - last_name: 'Vader', - company: null, - full_name: 'Darth Vader', - line_1: 'Via Morte Nera, 13', - line_2: 'Ragnatela, 99', - city: 'Cogorno', - zip_code: '16030', - state_code: 'GE', - country_code: 'IT', - phone: '+39 055 1234567890', - full_address: - 'Via Morte Nera, 13 Ragnatela, 99, 16030 Cogorno GE (IT) +39 055 1234567890', - name: 'Darth Vader, Via Morte Nera, 13 Ragnatela, 99, 16030 Cogorno GE (IT) +39 055 1234567890', - email: null, - notes: null, - lat: null, - lng: null, - is_localized: false, - is_geocoded: false, - provider_name: null, - map_url: null, - static_map_url: null, - billing_info: 'ABCDEFGHIJKLMNOPQRSTUVWYXZ', - created_at: '2023-05-16T11:06:07.638Z', - updated_at: '2023-05-16T11:06:07.638Z', - reference: null, - reference_origin: null, - metadata: {} - }, - relationships: { - geocoder: { - links: { - self: 'https://alessani.commercelayer.co/api/addresses/dPoNukZmnB/relationships/geocoder', - related: - 'https://alessani.commercelayer.co/api/addresses/dPoNukZmnB/geocoder' - } - }, - events: { - links: { - self: 'https://alessani.commercelayer.co/api/addresses/dPoNukZmnB/relationships/events', - related: - 'https://alessani.commercelayer.co/api/addresses/dPoNukZmnB/events' - } - }, - tags: { - links: { - self: 'https://alessani.commercelayer.co/api/addresses/dPoNukZmnB/relationships/tags', - related: - 'https://alessani.commercelayer.co/api/addresses/dPoNukZmnB/tags' - } - }, - versions: { - links: { - self: 'https://alessani.commercelayer.co/api/addresses/dPoNukZmnB/relationships/versions', - related: - 'https://alessani.commercelayer.co/api/addresses/dPoNukZmnB/versions' - } - } - }, - meta: { mode: 'test', organization_id: 'WXlEOFrjnr' } - }, - { - id: 'dQxruwZDnB', - type: 'addresses', - links: { - self: 'https://alessani.commercelayer.co/api/addresses/dQxruwZDnB' - }, - attributes: { - business: false, - first_name: 'Darth', - last_name: 'Vader', - company: null, - full_name: 'Darth Vader', - line_1: 'Via Morte Nera, 13', - line_2: 'Ragnatela, 99', - city: 'Cogorno', - zip_code: '16030', - state_code: 'GE', - country_code: 'IT', - phone: '+39 055 1234567890', - full_address: - 'Via Morte Nera, 13 Ragnatela, 99, 16030 Cogorno GE (IT) +39 055 1234567890', - name: 'Darth Vader, Via Morte Nera, 13 Ragnatela, 99, 16030 Cogorno GE (IT) +39 055 1234567890', - email: null, - notes: null, - lat: null, - lng: null, - is_localized: false, - is_geocoded: false, - provider_name: null, - map_url: null, - static_map_url: null, - billing_info: 'ABCDEFGHIJKLMNOPQRSTUVWYXZ', - created_at: '2023-05-16T11:06:07.493Z', - updated_at: '2023-05-16T11:06:07.493Z', - reference: null, - reference_origin: null, - metadata: {} - }, - relationships: { - geocoder: { - links: { - self: 'https://alessani.commercelayer.co/api/addresses/dQxruwZDnB/relationships/geocoder', - related: - 'https://alessani.commercelayer.co/api/addresses/dQxruwZDnB/geocoder' - } - }, - events: { - links: { - self: 'https://alessani.commercelayer.co/api/addresses/dQxruwZDnB/relationships/events', - related: - 'https://alessani.commercelayer.co/api/addresses/dQxruwZDnB/events' - } - }, - tags: { - links: { - self: 'https://alessani.commercelayer.co/api/addresses/dQxruwZDnB/relationships/tags', - related: - 'https://alessani.commercelayer.co/api/addresses/dQxruwZDnB/tags' - } - }, - versions: { - links: { - self: 'https://alessani.commercelayer.co/api/addresses/dQxruwZDnB/relationships/versions', - related: - 'https://alessani.commercelayer.co/api/addresses/dQxruwZDnB/versions' - } - } - }, - meta: { mode: 'test', organization_id: 'WXlEOFrjnr' } - }, - { - id: 'wmBvQsARml', - type: 'payment_methods', - links: { - self: 'https://alessani.commercelayer.co/api/payment_methods/wmBvQsARml' - }, - attributes: { - payment_source_type: 'stripe_payments', - name: 'Stripe Payment', - currency_code: 'EUR', - moto: false, - require_capture: true, - auto_capture: false, - disabled_at: null, - price_amount_cents: 1000, - price_amount_float: 10.0, - formatted_price_amount: '€10,00', - auto_capture_max_amount_cents: null, - auto_capture_max_amount_float: null, - formatted_auto_capture_max_amount: null, - created_at: '2022-03-11T14:18:08.420Z', - updated_at: '2022-03-11T14:18:08.420Z', - reference: '', - reference_origin: '', - metadata: {} - }, - relationships: { - market: { - links: { - self: 'https://alessani.commercelayer.co/api/payment_methods/wmBvQsARml/relationships/market', - related: - 'https://alessani.commercelayer.co/api/payment_methods/wmBvQsARml/market' - } - }, - payment_gateway: { - links: { - self: 'https://alessani.commercelayer.co/api/payment_methods/wmBvQsARml/relationships/payment_gateway', - related: - 'https://alessani.commercelayer.co/api/payment_methods/wmBvQsARml/payment_gateway' - } - }, - attachments: { - links: { - self: 'https://alessani.commercelayer.co/api/payment_methods/wmBvQsARml/relationships/attachments', - related: - 'https://alessani.commercelayer.co/api/payment_methods/wmBvQsARml/attachments' - } - }, - versions: { - links: { - self: 'https://alessani.commercelayer.co/api/payment_methods/wmBvQsARml/relationships/versions', - related: - 'https://alessani.commercelayer.co/api/payment_methods/wmBvQsARml/versions' - } - } - }, - meta: { mode: 'test', organization_id: 'WXlEOFrjnr' } - }, - { - id: 'onXELSmbQy', - type: 'stripe_payments', - links: { - self: 'https://alessani.commercelayer.co/api/stripe_payments/onXELSmbQy' - }, - attributes: { - client_secret: - 'pi_3N8LhsK5j6INEBBI0JicoLOo_secret_CKWfEPSnvyBHIQrEfRXkrJYd7', - publishable_key: - 'pk_test_51KH86yK5j6INEBBIdkXoh0UwOoOlAbFZc3b8j0vjRHKQHdaUfEJm24F0A9QkrQXVlgh1nXJCpWR6PG3epaUWzE2z00BdEe9fho', - options: { - id: 'pm_1N8LhuK5j6INEBBI71U1QOlu', - card: { - brand: 'visa', - last4: '4242', - checks: { - cvc_check: null, - address_line1_check: null, - address_postal_code_check: null - }, - wallet: null, - country: 'US', - funding: 'credit', - exp_year: 2031, - networks: { available: ['visa'], preferred: null }, - exp_month: 2, - generated_from: null, - three_d_secure_usage: { supported: true } - }, - type: 'card', - object: 'payment_method', - created: 1684235178, - customer: null, - livemode: false, - billing_details: { - name: 'Darth Vader', - email: 'customer@tk.com', - phone: '+39 055 1234567890', - address: { - city: 'Cogorno', - line1: 'Via Morte Nera, 13', - line2: null, - state: 'GE', - country: 'IT', - postal_code: '16030' - } - }, - setup_future_usage: 'off_session', - intent_amount_cents: 15400 - }, - payment_method: { - id: 'pm_1N8LhuK5j6INEBBIHXkK0FFF', - card: { - brand: 'visa', - last4: '4242', - checks: { - cvc_check: 'pass', - address_line1_check: 'pass', - address_postal_code_check: 'pass' - }, - wallet: null, - country: 'US', - funding: 'credit', - exp_year: 2031, - networks: { available: ['visa'], preferred: null }, - exp_month: 2, - fingerprint: 'bVaeOEKRmYhi20Nj', - generated_from: null, - three_d_secure_usage: { supported: true } - }, - type: 'card', - object: 'payment_method', - created: 1684235179, - customer: null, - livemode: false, - metadata: {}, - billing_details: { - name: 'Darth Vader', - email: 'customer@tk.com', - phone: '+39 055 1234567890', - address: { - city: 'Cogorno', - line1: 'Via Morte Nera, 13', - line2: null, - state: 'GE', - country: 'IT', - postal_code: '16030' - } - } - }, - mismatched_amounts: false, - intent_amount_cents: 15400, - intent_amount_float: 154.0, - formatted_intent_amount: '€154,00', - return_url: null, - payment_instrument: { - issuer_type: 'card', - card_type: 'visa', - card_last_digits: '4242', - card_expiry_month: '2', - card_expiry_year: '2031' - }, - created_at: '2023-05-16T11:06:16.338Z', - updated_at: '2023-05-16T11:06:21.948Z', - reference: null, - reference_origin: null, - metadata: {} - }, - relationships: { - order: { - links: { - self: 'https://alessani.commercelayer.co/api/stripe_payments/onXELSmbQy/relationships/order', - related: - 'https://alessani.commercelayer.co/api/stripe_payments/onXELSmbQy/order' - } - }, - payment_gateway: { - links: { - self: 'https://alessani.commercelayer.co/api/stripe_payments/onXELSmbQy/relationships/payment_gateway', - related: - 'https://alessani.commercelayer.co/api/stripe_payments/onXELSmbQy/payment_gateway' - } - }, - versions: { - links: { - self: 'https://alessani.commercelayer.co/api/stripe_payments/onXELSmbQy/relationships/versions', - related: - 'https://alessani.commercelayer.co/api/stripe_payments/onXELSmbQy/versions' - } - } - }, - meta: { mode: 'test', organization_id: 'WXlEOFrjnr' } - }, - { - id: 'vaoMtAZlXy', - type: 'line_items', - links: { - self: 'https://alessani.commercelayer.co/api/line_items/vaoMtAZlXy' - }, - attributes: { - sku_code: null, - bundle_code: null, - quantity: 1, - currency_code: 'EUR', - unit_amount_cents: -10000, - unit_amount_float: -100.0, - formatted_unit_amount: '-€100,00', - options_amount_cents: 0, - options_amount_float: 0.0, - formatted_options_amount: '€0,00', - discount_cents: 0, - discount_float: 0.0, - formatted_discount: '€0,00', - total_amount_cents: -10000, - total_amount_float: -100.0, - formatted_total_amount: '-€100,00', - tax_amount_cents: 0, - tax_amount_float: 0.0, - formatted_tax_amount: '€0,00', - name: 'Gift card: €100,00', - image_url: null, - discount_breakdown: {}, - tax_rate: 0.0, - tax_breakdown: {}, - item_type: 'gift_cards', - frequency: null, - created_at: '2023-05-16T11:06:14.674Z', - updated_at: '2023-05-16T11:06:14.674Z', - reference: null, - reference_origin: null, - metadata: {} - }, - relationships: { - order: { - links: { - self: 'https://alessani.commercelayer.co/api/line_items/vaoMtAZlXy/relationships/order', - related: - 'https://alessani.commercelayer.co/api/line_items/vaoMtAZlXy/order' - } - }, - item: { - links: { - self: 'https://alessani.commercelayer.co/api/line_items/vaoMtAZlXy/relationships/item', - related: - 'https://alessani.commercelayer.co/api/line_items/vaoMtAZlXy/item' - } - }, - line_item_options: { - links: { - self: 'https://alessani.commercelayer.co/api/line_items/vaoMtAZlXy/relationships/line_item_options', - related: - 'https://alessani.commercelayer.co/api/line_items/vaoMtAZlXy/line_item_options' - } - }, - shipment_line_items: { - links: { - self: 'https://alessani.commercelayer.co/api/line_items/vaoMtAZlXy/relationships/shipment_line_items', - related: - 'https://alessani.commercelayer.co/api/line_items/vaoMtAZlXy/shipment_line_items' - } - }, - stock_reservations: { - links: { - self: 'https://alessani.commercelayer.co/api/line_items/vaoMtAZlXy/relationships/stock_reservations', - related: - 'https://alessani.commercelayer.co/api/line_items/vaoMtAZlXy/stock_reservations' - } - }, - stock_line_items: { - links: { - self: 'https://alessani.commercelayer.co/api/line_items/vaoMtAZlXy/relationships/stock_line_items', - related: - 'https://alessani.commercelayer.co/api/line_items/vaoMtAZlXy/stock_line_items' - } - }, - stock_transfers: { - links: { - self: 'https://alessani.commercelayer.co/api/line_items/vaoMtAZlXy/relationships/stock_transfers', - related: - 'https://alessani.commercelayer.co/api/line_items/vaoMtAZlXy/stock_transfers' - } - }, - events: { - links: { - self: 'https://alessani.commercelayer.co/api/line_items/vaoMtAZlXy/relationships/events', - related: - 'https://alessani.commercelayer.co/api/line_items/vaoMtAZlXy/events' - } - }, - tags: { - links: { - self: 'https://alessani.commercelayer.co/api/line_items/vaoMtAZlXy/relationships/tags', - related: - 'https://alessani.commercelayer.co/api/line_items/vaoMtAZlXy/tags' - } - } - }, - meta: { mode: 'test', organization_id: 'WXlEOFrjnr' } - }, - { - id: 'kmnptjPlBv', - type: 'line_items', - links: { - self: 'https://alessani.commercelayer.co/api/line_items/kmnptjPlBv' - }, - attributes: { - sku_code: null, - bundle_code: null, - quantity: 1, - currency_code: 'EUR', - unit_amount_cents: 1000, - unit_amount_float: 10.0, - formatted_unit_amount: '€10,00', - options_amount_cents: 0, - options_amount_float: 0.0, - formatted_options_amount: '€0,00', - discount_cents: 0, - discount_float: 0.0, - formatted_discount: '€0,00', - total_amount_cents: 1000, - total_amount_float: 10.0, - formatted_total_amount: '€10,00', - tax_amount_cents: 0, - tax_amount_float: 0.0, - formatted_tax_amount: '€0,00', - name: 'Stripe Payment', - image_url: null, - discount_breakdown: {}, - tax_rate: 0.0, - tax_breakdown: {}, - item_type: 'payment_methods', - frequency: null, - created_at: '2023-05-16T11:06:14.629Z', - updated_at: '2023-05-16T11:06:14.629Z', - reference: null, - reference_origin: null, - metadata: {} - }, - relationships: { - order: { - links: { - self: 'https://alessani.commercelayer.co/api/line_items/kmnptjPlBv/relationships/order', - related: - 'https://alessani.commercelayer.co/api/line_items/kmnptjPlBv/order' - } - }, - item: { - links: { - self: 'https://alessani.commercelayer.co/api/line_items/kmnptjPlBv/relationships/item', - related: - 'https://alessani.commercelayer.co/api/line_items/kmnptjPlBv/item' - } - }, - line_item_options: { - links: { - self: 'https://alessani.commercelayer.co/api/line_items/kmnptjPlBv/relationships/line_item_options', - related: - 'https://alessani.commercelayer.co/api/line_items/kmnptjPlBv/line_item_options' - } - }, - shipment_line_items: { - links: { - self: 'https://alessani.commercelayer.co/api/line_items/kmnptjPlBv/relationships/shipment_line_items', - related: - 'https://alessani.commercelayer.co/api/line_items/kmnptjPlBv/shipment_line_items' - } - }, - stock_reservations: { - links: { - self: 'https://alessani.commercelayer.co/api/line_items/kmnptjPlBv/relationships/stock_reservations', - related: - 'https://alessani.commercelayer.co/api/line_items/kmnptjPlBv/stock_reservations' - } - }, - stock_line_items: { - links: { - self: 'https://alessani.commercelayer.co/api/line_items/kmnptjPlBv/relationships/stock_line_items', - related: - 'https://alessani.commercelayer.co/api/line_items/kmnptjPlBv/stock_line_items' - } - }, - stock_transfers: { - links: { - self: 'https://alessani.commercelayer.co/api/line_items/kmnptjPlBv/relationships/stock_transfers', - related: - 'https://alessani.commercelayer.co/api/line_items/kmnptjPlBv/stock_transfers' - } - }, - events: { - links: { - self: 'https://alessani.commercelayer.co/api/line_items/kmnptjPlBv/relationships/events', - related: - 'https://alessani.commercelayer.co/api/line_items/kmnptjPlBv/events' - } - }, - tags: { - links: { - self: 'https://alessani.commercelayer.co/api/line_items/kmnptjPlBv/relationships/tags', - related: - 'https://alessani.commercelayer.co/api/line_items/kmnptjPlBv/tags' - } - } - }, - meta: { mode: 'test', organization_id: 'WXlEOFrjnr' } - }, - { - id: 'vWEZtMGVKy', - type: 'line_items', - links: { - self: 'https://alessani.commercelayer.co/api/line_items/vWEZtMGVKy' - }, - attributes: { - sku_code: null, - bundle_code: null, - quantity: 1, - currency_code: 'EUR', - unit_amount_cents: 0, - unit_amount_float: 0.0, - formatted_unit_amount: '€0,00', - options_amount_cents: 0, - options_amount_float: 0.0, - formatted_options_amount: '€0,00', - discount_cents: 0, - discount_float: 0.0, - formatted_discount: '€0,00', - total_amount_cents: 0, - total_amount_float: 0.0, - formatted_total_amount: '€0,00', - tax_amount_cents: 0, - tax_amount_float: 0.0, - formatted_tax_amount: '€0,00', - name: 'Shipment #2485862/S/001', - image_url: null, - discount_breakdown: {}, - tax_rate: 0.0, - tax_breakdown: {}, - item_type: 'shipments', - frequency: null, - created_at: '2023-05-16T11:06:09.728Z', - updated_at: '2023-05-16T11:06:09.728Z', - reference: null, - reference_origin: null, - metadata: {} - }, - relationships: { - order: { - links: { - self: 'https://alessani.commercelayer.co/api/line_items/vWEZtMGVKy/relationships/order', - related: - 'https://alessani.commercelayer.co/api/line_items/vWEZtMGVKy/order' - } - }, - item: { - links: { - self: 'https://alessani.commercelayer.co/api/line_items/vWEZtMGVKy/relationships/item', - related: - 'https://alessani.commercelayer.co/api/line_items/vWEZtMGVKy/item' - } - }, - line_item_options: { - links: { - self: 'https://alessani.commercelayer.co/api/line_items/vWEZtMGVKy/relationships/line_item_options', - related: - 'https://alessani.commercelayer.co/api/line_items/vWEZtMGVKy/line_item_options' - } - }, - shipment_line_items: { - links: { - self: 'https://alessani.commercelayer.co/api/line_items/vWEZtMGVKy/relationships/shipment_line_items', - related: - 'https://alessani.commercelayer.co/api/line_items/vWEZtMGVKy/shipment_line_items' - } - }, - stock_reservations: { - links: { - self: 'https://alessani.commercelayer.co/api/line_items/vWEZtMGVKy/relationships/stock_reservations', - related: - 'https://alessani.commercelayer.co/api/line_items/vWEZtMGVKy/stock_reservations' - } - }, - stock_line_items: { - links: { - self: 'https://alessani.commercelayer.co/api/line_items/vWEZtMGVKy/relationships/stock_line_items', - related: - 'https://alessani.commercelayer.co/api/line_items/vWEZtMGVKy/stock_line_items' - } - }, - stock_transfers: { - links: { - self: 'https://alessani.commercelayer.co/api/line_items/vWEZtMGVKy/relationships/stock_transfers', - related: - 'https://alessani.commercelayer.co/api/line_items/vWEZtMGVKy/stock_transfers' - } - }, - events: { - links: { - self: 'https://alessani.commercelayer.co/api/line_items/vWEZtMGVKy/relationships/events', - related: - 'https://alessani.commercelayer.co/api/line_items/vWEZtMGVKy/events' - } - }, - tags: { - links: { - self: 'https://alessani.commercelayer.co/api/line_items/vWEZtMGVKy/relationships/tags', - related: - 'https://alessani.commercelayer.co/api/line_items/vWEZtMGVKy/tags' - } - } - }, - meta: { mode: 'test', organization_id: 'WXlEOFrjnr' } - }, - { - id: 'NqYatGaKnN', - type: 'line_items', - links: { - self: 'https://alessani.commercelayer.co/api/line_items/NqYatGaKnN' - }, - attributes: { - sku_code: null, - bundle_code: null, - quantity: 1, - currency_code: 'EUR', - unit_amount_cents: 0, - unit_amount_float: 0.0, - formatted_unit_amount: '€0,00', - options_amount_cents: 0, - options_amount_float: 0.0, - formatted_options_amount: '€0,00', - discount_cents: 0, - discount_float: 0.0, - formatted_discount: '€0,00', - total_amount_cents: 0, - total_amount_float: 0.0, - formatted_total_amount: '€0,00', - tax_amount_cents: 0, - tax_amount_float: 0.0, - formatted_tax_amount: '€0,00', - name: 'Shipment #2485862/S/002', - image_url: null, - discount_breakdown: {}, - tax_rate: 0.0, - tax_breakdown: {}, - item_type: 'shipments', - frequency: null, - created_at: '2023-05-16T11:06:09.602Z', - updated_at: '2023-05-16T11:06:09.602Z', - reference: null, - reference_origin: null, - metadata: {} - }, - relationships: { - order: { - links: { - self: 'https://alessani.commercelayer.co/api/line_items/NqYatGaKnN/relationships/order', - related: - 'https://alessani.commercelayer.co/api/line_items/NqYatGaKnN/order' - } - }, - item: { - links: { - self: 'https://alessani.commercelayer.co/api/line_items/NqYatGaKnN/relationships/item', - related: - 'https://alessani.commercelayer.co/api/line_items/NqYatGaKnN/item' - } - }, - line_item_options: { - links: { - self: 'https://alessani.commercelayer.co/api/line_items/NqYatGaKnN/relationships/line_item_options', - related: - 'https://alessani.commercelayer.co/api/line_items/NqYatGaKnN/line_item_options' - } - }, - shipment_line_items: { - links: { - self: 'https://alessani.commercelayer.co/api/line_items/NqYatGaKnN/relationships/shipment_line_items', - related: - 'https://alessani.commercelayer.co/api/line_items/NqYatGaKnN/shipment_line_items' - } - }, - stock_reservations: { - links: { - self: 'https://alessani.commercelayer.co/api/line_items/NqYatGaKnN/relationships/stock_reservations', - related: - 'https://alessani.commercelayer.co/api/line_items/NqYatGaKnN/stock_reservations' - } - }, - stock_line_items: { - links: { - self: 'https://alessani.commercelayer.co/api/line_items/NqYatGaKnN/relationships/stock_line_items', - related: - 'https://alessani.commercelayer.co/api/line_items/NqYatGaKnN/stock_line_items' - } - }, - stock_transfers: { - links: { - self: 'https://alessani.commercelayer.co/api/line_items/NqYatGaKnN/relationships/stock_transfers', - related: - 'https://alessani.commercelayer.co/api/line_items/NqYatGaKnN/stock_transfers' - } - }, - events: { - links: { - self: 'https://alessani.commercelayer.co/api/line_items/NqYatGaKnN/relationships/events', - related: - 'https://alessani.commercelayer.co/api/line_items/NqYatGaKnN/events' - } - }, - tags: { - links: { - self: 'https://alessani.commercelayer.co/api/line_items/NqYatGaKnN/relationships/tags', - related: - 'https://alessani.commercelayer.co/api/line_items/NqYatGaKnN/tags' - } - } - }, - meta: { mode: 'test', organization_id: 'WXlEOFrjnr' } - }, - { - id: 'NoEntBwEdk', - type: 'line_items', - links: { - self: 'https://alessani.commercelayer.co/api/line_items/NoEntBwEdk' - }, - attributes: { - sku_code: 'TSHIRTMMFFFFFF000000XLXX', - bundle_code: null, - quantity: 5, - currency_code: 'EUR', - unit_amount_cents: 2900, - unit_amount_float: 29.0, - formatted_unit_amount: '€29,00', - options_amount_cents: 0, - options_amount_float: 0.0, - formatted_options_amount: '€0,00', - discount_cents: -5943, - discount_float: -59.43, - formatted_discount: '-€59,43', - total_amount_cents: 14500, - total_amount_float: 145.0, - formatted_total_amount: '€145,00', - tax_amount_cents: 0, - tax_amount_float: 0.0, - formatted_tax_amount: '€0,00', - name: 'White Men T-Shirt with Black Logo (XL)', - image_url: - 'https://data.commercelayer.app/seed/images/skus/TSHIRTMSFFFFFF000000XLXX_FLAT.png', - discount_breakdown: { - vaoMtAZlXy: { cents: -5943, weight: 0.5942622950819673 } - }, - tax_rate: 0.0, - tax_breakdown: {}, - item_type: 'skus', - frequency: null, - created_at: '2023-05-16T11:06:02.458Z', - updated_at: '2023-05-16T11:06:02.458Z', - reference: null, - reference_origin: null, - metadata: {} - }, - relationships: { - order: { - links: { - self: 'https://alessani.commercelayer.co/api/line_items/NoEntBwEdk/relationships/order', - related: - 'https://alessani.commercelayer.co/api/line_items/NoEntBwEdk/order' - } - }, - item: { - links: { - self: 'https://alessani.commercelayer.co/api/line_items/NoEntBwEdk/relationships/item', - related: - 'https://alessani.commercelayer.co/api/line_items/NoEntBwEdk/item' - } - }, - line_item_options: { - links: { - self: 'https://alessani.commercelayer.co/api/line_items/NoEntBwEdk/relationships/line_item_options', - related: - 'https://alessani.commercelayer.co/api/line_items/NoEntBwEdk/line_item_options' - } - }, - shipment_line_items: { - links: { - self: 'https://alessani.commercelayer.co/api/line_items/NoEntBwEdk/relationships/shipment_line_items', - related: - 'https://alessani.commercelayer.co/api/line_items/NoEntBwEdk/shipment_line_items' - } - }, - stock_reservations: { - links: { - self: 'https://alessani.commercelayer.co/api/line_items/NoEntBwEdk/relationships/stock_reservations', - related: - 'https://alessani.commercelayer.co/api/line_items/NoEntBwEdk/stock_reservations' - } - }, - stock_line_items: { - links: { - self: 'https://alessani.commercelayer.co/api/line_items/NoEntBwEdk/relationships/stock_line_items', - related: - 'https://alessani.commercelayer.co/api/line_items/NoEntBwEdk/stock_line_items' - } - }, - stock_transfers: { - links: { - self: 'https://alessani.commercelayer.co/api/line_items/NoEntBwEdk/relationships/stock_transfers', - related: - 'https://alessani.commercelayer.co/api/line_items/NoEntBwEdk/stock_transfers' - } - }, - events: { - links: { - self: 'https://alessani.commercelayer.co/api/line_items/NoEntBwEdk/relationships/events', - related: - 'https://alessani.commercelayer.co/api/line_items/NoEntBwEdk/events' - } - }, - tags: { - links: { - self: 'https://alessani.commercelayer.co/api/line_items/NoEntBwEdk/relationships/tags', - related: - 'https://alessani.commercelayer.co/api/line_items/NoEntBwEdk/tags' - } - } - }, - meta: { mode: 'test', organization_id: 'WXlEOFrjnr' } - }, - { - id: 'NlQmtMAnGy', - type: 'line_items', - links: { - self: 'https://alessani.commercelayer.co/api/line_items/NlQmtMAnGy' - }, - attributes: { - sku_code: 'CANVASAU000000FFFFFF1824', - bundle_code: null, - quantity: 1, - currency_code: 'EUR', - unit_amount_cents: 9900, - unit_amount_float: 99.0, - formatted_unit_amount: '€99,00', - options_amount_cents: 0, - options_amount_float: 0.0, - formatted_options_amount: '€0,00', - discount_cents: -4057, - discount_float: -40.57, - formatted_discount: '-€40,57', - total_amount_cents: 9900, - total_amount_float: 99.0, - formatted_total_amount: '€99,00', - tax_amount_cents: 0, - tax_amount_float: 0.0, - formatted_tax_amount: '€0,00', - name: 'Black Canvas with White Logo (18x24)', - image_url: - 'https://img.commercelayer.io/skus/CANVASAU000000FFFFFF.png?fm=jpg&q=90', - discount_breakdown: { - vaoMtAZlXy: { cents: -4057, weight: 0.4057377049180328 } - }, - tax_rate: 0.0, - tax_breakdown: {}, - item_type: 'skus', - frequency: null, - created_at: '2023-05-16T11:06:02.444Z', - updated_at: '2023-05-16T11:06:02.444Z', - reference: null, - reference_origin: null, - metadata: {} - }, - relationships: { - order: { - links: { - self: 'https://alessani.commercelayer.co/api/line_items/NlQmtMAnGy/relationships/order', - related: - 'https://alessani.commercelayer.co/api/line_items/NlQmtMAnGy/order' - } - }, - item: { - links: { - self: 'https://alessani.commercelayer.co/api/line_items/NlQmtMAnGy/relationships/item', - related: - 'https://alessani.commercelayer.co/api/line_items/NlQmtMAnGy/item' - } - }, - line_item_options: { - links: { - self: 'https://alessani.commercelayer.co/api/line_items/NlQmtMAnGy/relationships/line_item_options', - related: - 'https://alessani.commercelayer.co/api/line_items/NlQmtMAnGy/line_item_options' - } - }, - shipment_line_items: { - links: { - self: 'https://alessani.commercelayer.co/api/line_items/NlQmtMAnGy/relationships/shipment_line_items', - related: - 'https://alessani.commercelayer.co/api/line_items/NlQmtMAnGy/shipment_line_items' - } - }, - stock_reservations: { - links: { - self: 'https://alessani.commercelayer.co/api/line_items/NlQmtMAnGy/relationships/stock_reservations', - related: - 'https://alessani.commercelayer.co/api/line_items/NlQmtMAnGy/stock_reservations' - } - }, - stock_line_items: { - links: { - self: 'https://alessani.commercelayer.co/api/line_items/NlQmtMAnGy/relationships/stock_line_items', - related: - 'https://alessani.commercelayer.co/api/line_items/NlQmtMAnGy/stock_line_items' - } - }, - stock_transfers: { - links: { - self: 'https://alessani.commercelayer.co/api/line_items/NlQmtMAnGy/relationships/stock_transfers', - related: - 'https://alessani.commercelayer.co/api/line_items/NlQmtMAnGy/stock_transfers' - } - }, - events: { - links: { - self: 'https://alessani.commercelayer.co/api/line_items/NlQmtMAnGy/relationships/events', - related: - 'https://alessani.commercelayer.co/api/line_items/NlQmtMAnGy/events' - } - }, - tags: { - links: { - self: 'https://alessani.commercelayer.co/api/line_items/NlQmtMAnGy/relationships/tags', - related: - 'https://alessani.commercelayer.co/api/line_items/NlQmtMAnGy/tags' - } - } - }, - meta: { mode: 'test', organization_id: 'WXlEOFrjnr' } - }, - { - id: 'YpLwCnNQgY', - type: 'shipments', - links: { - self: 'https://alessani.commercelayer.co/api/shipments/YpLwCnNQgY' - }, - attributes: { - number: '2485862/S/001', - status: 'on_hold', - currency_code: 'EUR', - cost_amount_cents: 0, - cost_amount_float: 0.0, - formatted_cost_amount: '$0.00', - skus_count: 5, - selected_rate_id: null, - rates: [], - purchase_error_code: null, - purchase_error_message: null, - get_rates_errors: [], - get_rates_started_at: null, - get_rates_completed_at: null, - purchase_started_at: null, - purchase_completed_at: null, - purchase_failed_at: null, - on_hold_at: '2023-07-21T14:12:13.287Z', - picking_at: '2023-07-21T14:12:08.574Z', - packing_at: '2023-07-21T14:10:54.107Z', - ready_to_ship_at: null, - shipped_at: null, - created_at: '2023-05-16T11:06:07.685Z', - updated_at: '2023-07-21T14:12:13.286Z', - reference: null, - reference_origin: null, - metadata: {} - }, - relationships: { - order: { - links: { - self: 'https://alessani.commercelayer.co/api/shipments/YpLwCnNQgY/relationships/order', - related: - 'https://alessani.commercelayer.co/api/shipments/YpLwCnNQgY/order' - } - }, - shipping_category: { - links: { - self: 'https://alessani.commercelayer.co/api/shipments/YpLwCnNQgY/relationships/shipping_category', - related: - 'https://alessani.commercelayer.co/api/shipments/YpLwCnNQgY/shipping_category' - } - }, - stock_location: { - links: { - self: 'https://alessani.commercelayer.co/api/shipments/YpLwCnNQgY/relationships/stock_location', - related: - 'https://alessani.commercelayer.co/api/shipments/YpLwCnNQgY/stock_location' - } - }, - origin_address: { - links: { - self: 'https://alessani.commercelayer.co/api/shipments/YpLwCnNQgY/relationships/origin_address', - related: - 'https://alessani.commercelayer.co/api/shipments/YpLwCnNQgY/origin_address' - } - }, - shipping_address: { - links: { - self: 'https://alessani.commercelayer.co/api/shipments/YpLwCnNQgY/relationships/shipping_address', - related: - 'https://alessani.commercelayer.co/api/shipments/YpLwCnNQgY/shipping_address' - } - }, - shipping_method: { - links: { - self: 'https://alessani.commercelayer.co/api/shipments/YpLwCnNQgY/relationships/shipping_method', - related: - 'https://alessani.commercelayer.co/api/shipments/YpLwCnNQgY/shipping_method' - } - }, - delivery_lead_time: { - links: { - self: 'https://alessani.commercelayer.co/api/shipments/YpLwCnNQgY/relationships/delivery_lead_time', - related: - 'https://alessani.commercelayer.co/api/shipments/YpLwCnNQgY/delivery_lead_time' - } - }, - shipment_line_items: { - links: { - self: 'https://alessani.commercelayer.co/api/shipments/YpLwCnNQgY/relationships/shipment_line_items', - related: - 'https://alessani.commercelayer.co/api/shipments/YpLwCnNQgY/shipment_line_items' - } - }, - stock_line_items: { - links: { - self: 'https://alessani.commercelayer.co/api/shipments/YpLwCnNQgY/relationships/stock_line_items', - related: - 'https://alessani.commercelayer.co/api/shipments/YpLwCnNQgY/stock_line_items' - } - }, - stock_transfers: { - links: { - self: 'https://alessani.commercelayer.co/api/shipments/YpLwCnNQgY/relationships/stock_transfers', - related: - 'https://alessani.commercelayer.co/api/shipments/YpLwCnNQgY/stock_transfers' - } - }, - available_shipping_methods: { - links: { - self: 'https://alessani.commercelayer.co/api/shipments/YpLwCnNQgY/relationships/available_shipping_methods', - related: - 'https://alessani.commercelayer.co/api/shipments/YpLwCnNQgY/available_shipping_methods' - } - }, - carrier_accounts: { - links: { - self: 'https://alessani.commercelayer.co/api/shipments/YpLwCnNQgY/relationships/carrier_accounts', - related: - 'https://alessani.commercelayer.co/api/shipments/YpLwCnNQgY/carrier_accounts' - } - }, - parcels: { - links: { - self: 'https://alessani.commercelayer.co/api/shipments/YpLwCnNQgY/relationships/parcels', - related: - 'https://alessani.commercelayer.co/api/shipments/YpLwCnNQgY/parcels' - } - }, - attachments: { - links: { - self: 'https://alessani.commercelayer.co/api/shipments/YpLwCnNQgY/relationships/attachments', - related: - 'https://alessani.commercelayer.co/api/shipments/YpLwCnNQgY/attachments' - } - }, - events: { - links: { - self: 'https://alessani.commercelayer.co/api/shipments/YpLwCnNQgY/relationships/events', - related: - 'https://alessani.commercelayer.co/api/shipments/YpLwCnNQgY/events' - } - }, - versions: { - links: { - self: 'https://alessani.commercelayer.co/api/shipments/YpLwCnNQgY/relationships/versions', - related: - 'https://alessani.commercelayer.co/api/shipments/YpLwCnNQgY/versions' - } - } - }, - meta: { mode: 'test', organization_id: 'WXlEOFrjnr' } - }, - { - id: 'PabvCpOxRy', - type: 'shipments', - links: { - self: 'https://alessani.commercelayer.co/api/shipments/PabvCpOxRy' - }, - attributes: { - number: '2485862/S/002', - status: 'shipped', - currency_code: 'EUR', - cost_amount_cents: 0, - cost_amount_float: 0.0, - formatted_cost_amount: '$0.00', - skus_count: 1, - selected_rate_id: null, - rates: [], - purchase_error_code: null, - purchase_error_message: null, - get_rates_errors: [], - get_rates_started_at: null, - get_rates_completed_at: null, - purchase_started_at: null, - purchase_completed_at: null, - purchase_failed_at: null, - on_hold_at: null, - picking_at: '2023-05-16T14:18:35.559Z', - packing_at: '2023-05-16T14:20:24.459Z', - ready_to_ship_at: '2023-05-16T14:21:43.665Z', - shipped_at: '2023-05-16T14:22:42.632Z', - created_at: '2023-05-16T11:06:07.711Z', - updated_at: '2023-05-16T14:22:42.633Z', - reference: null, - reference_origin: null, - metadata: {} - }, - relationships: { - order: { - links: { - self: 'https://alessani.commercelayer.co/api/shipments/PabvCpOxRy/relationships/order', - related: - 'https://alessani.commercelayer.co/api/shipments/PabvCpOxRy/order' - } - }, - shipping_category: { - links: { - self: 'https://alessani.commercelayer.co/api/shipments/PabvCpOxRy/relationships/shipping_category', - related: - 'https://alessani.commercelayer.co/api/shipments/PabvCpOxRy/shipping_category' - } - }, - stock_location: { - links: { - self: 'https://alessani.commercelayer.co/api/shipments/PabvCpOxRy/relationships/stock_location', - related: - 'https://alessani.commercelayer.co/api/shipments/PabvCpOxRy/stock_location' - } - }, - origin_address: { - links: { - self: 'https://alessani.commercelayer.co/api/shipments/PabvCpOxRy/relationships/origin_address', - related: - 'https://alessani.commercelayer.co/api/shipments/PabvCpOxRy/origin_address' - } - }, - shipping_address: { - links: { - self: 'https://alessani.commercelayer.co/api/shipments/PabvCpOxRy/relationships/shipping_address', - related: - 'https://alessani.commercelayer.co/api/shipments/PabvCpOxRy/shipping_address' - } - }, - shipping_method: { - links: { - self: 'https://alessani.commercelayer.co/api/shipments/PabvCpOxRy/relationships/shipping_method', - related: - 'https://alessani.commercelayer.co/api/shipments/PabvCpOxRy/shipping_method' - } - }, - delivery_lead_time: { - links: { - self: 'https://alessani.commercelayer.co/api/shipments/PabvCpOxRy/relationships/delivery_lead_time', - related: - 'https://alessani.commercelayer.co/api/shipments/PabvCpOxRy/delivery_lead_time' - } - }, - shipment_line_items: { - links: { - self: 'https://alessani.commercelayer.co/api/shipments/PabvCpOxRy/relationships/shipment_line_items', - related: - 'https://alessani.commercelayer.co/api/shipments/PabvCpOxRy/shipment_line_items' - } - }, - stock_line_items: { - links: { - self: 'https://alessani.commercelayer.co/api/shipments/PabvCpOxRy/relationships/stock_line_items', - related: - 'https://alessani.commercelayer.co/api/shipments/PabvCpOxRy/stock_line_items' - } - }, - stock_transfers: { - links: { - self: 'https://alessani.commercelayer.co/api/shipments/PabvCpOxRy/relationships/stock_transfers', - related: - 'https://alessani.commercelayer.co/api/shipments/PabvCpOxRy/stock_transfers' - } - }, - available_shipping_methods: { - links: { - self: 'https://alessani.commercelayer.co/api/shipments/PabvCpOxRy/relationships/available_shipping_methods', - related: - 'https://alessani.commercelayer.co/api/shipments/PabvCpOxRy/available_shipping_methods' - } - }, - carrier_accounts: { - links: { - self: 'https://alessani.commercelayer.co/api/shipments/PabvCpOxRy/relationships/carrier_accounts', - related: - 'https://alessani.commercelayer.co/api/shipments/PabvCpOxRy/carrier_accounts' - } - }, - parcels: { - links: { - self: 'https://alessani.commercelayer.co/api/shipments/PabvCpOxRy/relationships/parcels', - related: - 'https://alessani.commercelayer.co/api/shipments/PabvCpOxRy/parcels' - } - }, - attachments: { - links: { - self: 'https://alessani.commercelayer.co/api/shipments/PabvCpOxRy/relationships/attachments', - related: - 'https://alessani.commercelayer.co/api/shipments/PabvCpOxRy/attachments' - } - }, - events: { - links: { - self: 'https://alessani.commercelayer.co/api/shipments/PabvCpOxRy/relationships/events', - related: - 'https://alessani.commercelayer.co/api/shipments/PabvCpOxRy/events' - } - }, - versions: { - links: { - self: 'https://alessani.commercelayer.co/api/shipments/PabvCpOxRy/relationships/versions', - related: - 'https://alessani.commercelayer.co/api/shipments/PabvCpOxRy/versions' - } - } - }, - meta: { mode: 'test', organization_id: 'WXlEOFrjnr' } - }, - { - id: 'nKZkPUDBVj', - type: 'authorizations', - links: { - self: 'https://alessani.commercelayer.co/api/authorizations/nKZkPUDBVj' - }, - attributes: { - number: '2485862/T/001', - currency_code: 'EUR', - amount_cents: 15400, - amount_float: 154.0, - formatted_amount: '€154,00', - succeeded: true, - message: 'Success!', - error_code: null, - error_detail: null, - token: 'pi_3N8LhsK5j6INEBBI0JicoLOo', - gateway_transaction_id: 'pi_3N8LhsK5j6INEBBI0JicoLOo', - created_at: '2023-05-16T11:06:21.964Z', - updated_at: '2023-05-16T11:06:21.964Z', - reference: null, - reference_origin: null, - metadata: {}, - cvv_code: null, - cvv_message: null, - avs_code: null, - avs_message: null, - fraud_review: null, - capture_amount_cents: 0, - capture_amount_float: 0.0, - formatted_capture_amount: '€0,00', - capture_balance_cents: 0, - capture_balance_float: 0.0, - formatted_capture_balance: '€0,00', - void_balance_cents: 15400, - void_balance_float: 154.0, - formatted_void_balance: '€154,00' - }, - relationships: { - order: { - links: { - self: 'https://alessani.commercelayer.co/api/authorizations/nKZkPUDBVj/relationships/order', - related: - 'https://alessani.commercelayer.co/api/authorizations/nKZkPUDBVj/order' - } - }, - attachments: { - links: { - self: 'https://alessani.commercelayer.co/api/authorizations/nKZkPUDBVj/relationships/attachments', - related: - 'https://alessani.commercelayer.co/api/authorizations/nKZkPUDBVj/attachments' - } - }, - versions: { - links: { - self: 'https://alessani.commercelayer.co/api/authorizations/nKZkPUDBVj/relationships/versions', - related: - 'https://alessani.commercelayer.co/api/authorizations/nKZkPUDBVj/versions' - } - }, - captures: { - links: { - self: 'https://alessani.commercelayer.co/api/authorizations/nKZkPUDBVj/relationships/captures', - related: - 'https://alessani.commercelayer.co/api/authorizations/nKZkPUDBVj/captures' - } - }, - voids: { - links: { - self: 'https://alessani.commercelayer.co/api/authorizations/nKZkPUDBVj/relationships/voids', - related: - 'https://alessani.commercelayer.co/api/authorizations/nKZkPUDBVj/voids' - } - }, - events: { - links: { - self: 'https://alessani.commercelayer.co/api/authorizations/nKZkPUDBVj/relationships/events', - related: - 'https://alessani.commercelayer.co/api/authorizations/nKZkPUDBVj/events' - } - } - }, - meta: { mode: 'test', organization_id: 'WXlEOFrjnr' } - }, - { - id: 'kyAnxUgegE', - type: 'captures', - links: { - self: 'https://alessani.commercelayer.co/api/captures/kyAnxUgegE' - }, - attributes: { - number: '2485862/T/002', - currency_code: 'EUR', - amount_cents: 15400, - amount_float: 154.0, - formatted_amount: '€154,00', - succeeded: true, - message: 'Success!', - error_code: null, - error_detail: null, - token: 'pi_3N8LhsK5j6INEBBI0JicoLOo', - gateway_transaction_id: 'pi_3N8LhsK5j6INEBBI0JicoLOo', - created_at: '2023-05-16T14:18:35.368Z', - updated_at: '2023-05-16T14:18:35.368Z', - reference: null, - reference_origin: null, - metadata: {}, - refund_amount_cents: 15400, - refund_amount_float: 154.0, - formatted_refund_amount: '€154,00', - refund_balance_cents: 15400, - refund_balance_float: 154.0, - formatted_refund_balance: '€154,00' - }, - relationships: { - order: { - links: { - self: 'https://alessani.commercelayer.co/api/captures/kyAnxUgegE/relationships/order', - related: - 'https://alessani.commercelayer.co/api/captures/kyAnxUgegE/order' - } - }, - attachments: { - links: { - self: 'https://alessani.commercelayer.co/api/captures/kyAnxUgegE/relationships/attachments', - related: - 'https://alessani.commercelayer.co/api/captures/kyAnxUgegE/attachments' - } - }, - versions: { - links: { - self: 'https://alessani.commercelayer.co/api/captures/kyAnxUgegE/relationships/versions', - related: - 'https://alessani.commercelayer.co/api/captures/kyAnxUgegE/versions' - } - }, - reference_authorization: { - links: { - self: 'https://alessani.commercelayer.co/api/captures/kyAnxUgegE/relationships/reference_authorization', - related: - 'https://alessani.commercelayer.co/api/captures/kyAnxUgegE/reference_authorization' - } - }, - refunds: { - links: { - self: 'https://alessani.commercelayer.co/api/captures/kyAnxUgegE/relationships/refunds', - related: - 'https://alessani.commercelayer.co/api/captures/kyAnxUgegE/refunds' - } - }, - events: { - links: { - self: 'https://alessani.commercelayer.co/api/captures/kyAnxUgegE/relationships/events', - related: - 'https://alessani.commercelayer.co/api/captures/kyAnxUgegE/events' - } - } - }, - meta: { mode: 'test', organization_id: 'WXlEOFrjnr' } - }, - { - id: 'EqGrksxWNW', - type: 'attachments', - links: { - self: 'https://alessani.commercelayer.co/api/attachments/EqGrksxWNW' - }, - attributes: { - name: 'M. Montalbano', - description: 'Ehi there!', - url: null, - created_at: '2023-07-20T13:58:52.184Z', - updated_at: '2023-07-20T13:58:52.184Z', - reference: null, - reference_origin: 'app-orders--note', - metadata: {} - }, - relationships: { - attachable: { - links: { - self: 'https://alessani.commercelayer.co/api/attachments/EqGrksxWNW/relationships/attachable', - related: - 'https://alessani.commercelayer.co/api/attachments/EqGrksxWNW/attachable' - } - } - }, - meta: { mode: 'test', organization_id: 'WXlEOFrjnr' } - } - ] - }) - ) - ) - }, 2000) - }) - } -) - -function getRandomFormattedPrice() { - return `€${Math.floor(Math.random() * 1000)}.00` -} - -function getRandomOrderStatus() { - const statues = [ - { - status: 'placed', - payment_status: 'authorized', - fulfillment_status: 'unfulfilled' - }, - { - status: 'approved', - payment_status: 'paid', - fulfillment_status: 'in_progress' - }, - { - status: 'approved', - payment_status: 'paid', - fulfillment_status: 'fulfilled' - } - ] - return statues[Math.floor(Math.random() * statues.length)] -} - -const orderList = http.get( - 'https://mock.localhost/api/orders', - async (req, res, ctx) => { - const currentPage = parseInt( - req.url.searchParams.get('page[number]') ?? '1' - ) - const itemPerPage = parseInt(req.url.searchParams.get('page[size]') ?? '5') - const pageCount = itemPerPage <= 5 ? 1 : 3 - - return res( - ctx.delay(2000), - ctx.status(200), - ctx.json({ - data: Array(itemPerPage) - .fill(order) - .map((order, idx) => ({ - ...order, - id: `mocked-${currentPage}-${idx}`, - attributes: { - ...order.attributes, - number: parseInt(`26372${currentPage}${idx}`, 10), - formatted_total_amount: getRandomFormattedPrice(), - ...getRandomOrderStatus() - } - })), - meta: { - record_count: itemPerPage * pageCount, - page_count: pageCount - }, - included: [ - { - id: 'dlQbPhNNop', - type: 'markets', - links: { - self: 'https://alessani.commercelayer.co/api/markets/dlQbPhNNop' - }, - attributes: { - number: 350, - name: 'Europe', - facebook_pixel_id: null, - checkout_url: '', - external_prices_url: - 'https://pippo.malessani.commercelayer.dev/api/verify', - external_order_validation_url: '', - private: false, - disabled_at: null, - created_at: '2022-03-11T09:40:49.000Z', - updated_at: '2023-03-13T13:30:32.184Z', - reference: 'market_1', - reference_origin: 'CLI', - metadata: {} - }, - relationships: { - merchant: { - links: { - self: 'https://alessani.commercelayer.co/api/markets/dlQbPhNNop/relationships/merchant', - related: - 'https://alessani.commercelayer.co/api/markets/dlQbPhNNop/merchant' - } - }, - price_list: { - links: { - self: 'https://alessani.commercelayer.co/api/markets/dlQbPhNNop/relationships/price_list', - related: - 'https://alessani.commercelayer.co/api/markets/dlQbPhNNop/price_list' - } - }, - inventory_model: { - links: { - self: 'https://alessani.commercelayer.co/api/markets/dlQbPhNNop/relationships/inventory_model', - related: - 'https://alessani.commercelayer.co/api/markets/dlQbPhNNop/inventory_model' - } - }, - subscription_model: { - links: { - self: 'https://alessani.commercelayer.co/api/markets/dlQbPhNNop/relationships/subscription_model', - related: - 'https://alessani.commercelayer.co/api/markets/dlQbPhNNop/subscription_model' - } - }, - tax_calculator: { - links: { - self: 'https://alessani.commercelayer.co/api/markets/dlQbPhNNop/relationships/tax_calculator', - related: - 'https://alessani.commercelayer.co/api/markets/dlQbPhNNop/tax_calculator' - } - }, - customer_group: { - links: { - self: 'https://alessani.commercelayer.co/api/markets/dlQbPhNNop/relationships/customer_group', - related: - 'https://alessani.commercelayer.co/api/markets/dlQbPhNNop/customer_group' - } - }, - attachments: { - links: { - self: 'https://alessani.commercelayer.co/api/markets/dlQbPhNNop/relationships/attachments', - related: - 'https://alessani.commercelayer.co/api/markets/dlQbPhNNop/attachments' - } - }, - versions: { - links: { - self: 'https://alessani.commercelayer.co/api/markets/dlQbPhNNop/relationships/versions', - related: - 'https://alessani.commercelayer.co/api/markets/dlQbPhNNop/versions' - } - } - }, - meta: { mode: 'test', organization_id: 'WXlEOFrjnr' } - }, - { - id: 'JkAdBhNGjQ', - type: 'customers', - links: { - self: 'https://alessani.commercelayer.co/api/customers/JkAdBhNGjQ' - }, - attributes: { - email: 'customer@tk.com', - status: 'repeat', - has_password: false, - total_orders_count: 2753, - created_at: '2022-03-14T09:13:06.633Z', - updated_at: '2023-07-31T09:13:06.049Z', - reference: null, - reference_origin: null, - metadata: {} - }, - relationships: { - customer_group: { - links: { - self: 'https://alessani.commercelayer.co/api/customers/JkAdBhNGjQ/relationships/customer_group', - related: - 'https://alessani.commercelayer.co/api/customers/JkAdBhNGjQ/customer_group' - } - }, - customer_addresses: { - links: { - self: 'https://alessani.commercelayer.co/api/customers/JkAdBhNGjQ/relationships/customer_addresses', - related: - 'https://alessani.commercelayer.co/api/customers/JkAdBhNGjQ/customer_addresses' - } - }, - customer_payment_sources: { - links: { - self: 'https://alessani.commercelayer.co/api/customers/JkAdBhNGjQ/relationships/customer_payment_sources', - related: - 'https://alessani.commercelayer.co/api/customers/JkAdBhNGjQ/customer_payment_sources' - } - }, - customer_subscriptions: { - links: { - self: 'https://alessani.commercelayer.co/api/customers/JkAdBhNGjQ/relationships/customer_subscriptions', - related: - 'https://alessani.commercelayer.co/api/customers/JkAdBhNGjQ/customer_subscriptions' - } - }, - orders: { - links: { - self: 'https://alessani.commercelayer.co/api/customers/JkAdBhNGjQ/relationships/orders', - related: - 'https://alessani.commercelayer.co/api/customers/JkAdBhNGjQ/orders' - } - }, - order_subscriptions: { - links: { - self: 'https://alessani.commercelayer.co/api/customers/JkAdBhNGjQ/relationships/order_subscriptions', - related: - 'https://alessani.commercelayer.co/api/customers/JkAdBhNGjQ/order_subscriptions' - } - }, - returns: { - links: { - self: 'https://alessani.commercelayer.co/api/customers/JkAdBhNGjQ/relationships/returns', - related: - 'https://alessani.commercelayer.co/api/customers/JkAdBhNGjQ/returns' - } - }, - sku_lists: { - links: { - self: 'https://alessani.commercelayer.co/api/customers/JkAdBhNGjQ/relationships/sku_lists', - related: - 'https://alessani.commercelayer.co/api/customers/JkAdBhNGjQ/sku_lists' - } - }, - attachments: { - links: { - self: 'https://alessani.commercelayer.co/api/customers/JkAdBhNGjQ/relationships/attachments', - related: - 'https://alessani.commercelayer.co/api/customers/JkAdBhNGjQ/attachments' - } - }, - events: { - links: { - self: 'https://alessani.commercelayer.co/api/customers/JkAdBhNGjQ/relationships/events', - related: - 'https://alessani.commercelayer.co/api/customers/JkAdBhNGjQ/events' - } - }, - tags: { - links: { - self: 'https://alessani.commercelayer.co/api/customers/JkAdBhNGjQ/relationships/tags', - related: - 'https://alessani.commercelayer.co/api/customers/JkAdBhNGjQ/tags' - } - } - }, - meta: { mode: 'test', organization_id: 'WXlEOFrjnr' } - }, - { - id: 'dPoNukZmnB', - type: 'addresses', - links: { - self: 'https://alessani.commercelayer.co/api/addresses/dPoNukZmnB' - }, - attributes: { - business: false, - first_name: 'Darth', - last_name: 'Vader', - company: null, - full_name: 'Darth Vader', - line_1: 'Via Morte Nera, 13', - line_2: 'Ragnatela, 99', - city: 'Cogorno', - zip_code: '16030', - state_code: 'GE', - country_code: 'IT', - phone: '+39 055 1234567890', - full_address: - 'Via Morte Nera, 13 Ragnatela, 99, 16030 Cogorno GE (IT) +39 055 1234567890', - name: 'Darth Vader, Via Morte Nera, 13 Ragnatela, 99, 16030 Cogorno GE (IT) +39 055 1234567890', - email: null, - notes: null, - lat: null, - lng: null, - is_localized: false, - is_geocoded: false, - provider_name: null, - map_url: null, - static_map_url: null, - billing_info: 'ABCDEFGHIJKLMNOPQRSTUVWYXZ', - created_at: '2023-05-16T11:06:07.638Z', - updated_at: '2023-05-16T11:06:07.638Z', - reference: null, - reference_origin: null, - metadata: {} - }, - relationships: { - geocoder: { - links: { - self: 'https://alessani.commercelayer.co/api/addresses/dPoNukZmnB/relationships/geocoder', - related: - 'https://alessani.commercelayer.co/api/addresses/dPoNukZmnB/geocoder' - } - }, - events: { - links: { - self: 'https://alessani.commercelayer.co/api/addresses/dPoNukZmnB/relationships/events', - related: - 'https://alessani.commercelayer.co/api/addresses/dPoNukZmnB/events' - } - }, - tags: { - links: { - self: 'https://alessani.commercelayer.co/api/addresses/dPoNukZmnB/relationships/tags', - related: - 'https://alessani.commercelayer.co/api/addresses/dPoNukZmnB/tags' - } - }, - versions: { - links: { - self: 'https://alessani.commercelayer.co/api/addresses/dPoNukZmnB/relationships/versions', - related: - 'https://alessani.commercelayer.co/api/addresses/dPoNukZmnB/versions' - } - } - }, - meta: { mode: 'test', organization_id: 'WXlEOFrjnr' } - }, - { - id: 'dQxruwZDnB', - type: 'addresses', - links: { - self: 'https://alessani.commercelayer.co/api/addresses/dQxruwZDnB' - }, - attributes: { - business: false, - first_name: 'Darth', - last_name: 'Vader', - company: null, - full_name: 'Darth Vader', - line_1: 'Via Morte Nera, 13', - line_2: 'Ragnatela, 99', - city: 'Cogorno', - zip_code: '16030', - state_code: 'GE', - country_code: 'IT', - phone: '+39 055 1234567890', - full_address: - 'Via Morte Nera, 13 Ragnatela, 99, 16030 Cogorno GE (IT) +39 055 1234567890', - name: 'Darth Vader, Via Morte Nera, 13 Ragnatela, 99, 16030 Cogorno GE (IT) +39 055 1234567890', - email: null, - notes: null, - lat: null, - lng: null, - is_localized: false, - is_geocoded: false, - provider_name: null, - map_url: null, - static_map_url: null, - billing_info: 'ABCDEFGHIJKLMNOPQRSTUVWYXZ', - created_at: '2023-05-16T11:06:07.493Z', - updated_at: '2023-05-16T11:06:07.493Z', - reference: null, - reference_origin: null, - metadata: {} - }, - relationships: { - geocoder: { - links: { - self: 'https://alessani.commercelayer.co/api/addresses/dQxruwZDnB/relationships/geocoder', - related: - 'https://alessani.commercelayer.co/api/addresses/dQxruwZDnB/geocoder' - } - }, - events: { - links: { - self: 'https://alessani.commercelayer.co/api/addresses/dQxruwZDnB/relationships/events', - related: - 'https://alessani.commercelayer.co/api/addresses/dQxruwZDnB/events' - } - }, - tags: { - links: { - self: 'https://alessani.commercelayer.co/api/addresses/dQxruwZDnB/relationships/tags', - related: - 'https://alessani.commercelayer.co/api/addresses/dQxruwZDnB/tags' - } - }, - versions: { - links: { - self: 'https://alessani.commercelayer.co/api/addresses/dQxruwZDnB/relationships/versions', - related: - 'https://alessani.commercelayer.co/api/addresses/dQxruwZDnB/versions' - } - } - }, - meta: { mode: 'test', organization_id: 'WXlEOFrjnr' } - }, - { - id: 'wmBvQsARml', - type: 'payment_methods', - links: { - self: 'https://alessani.commercelayer.co/api/payment_methods/wmBvQsARml' - }, - attributes: { - payment_source_type: 'stripe_payments', - name: 'Stripe Payment', - currency_code: 'EUR', - moto: false, - require_capture: true, - auto_capture: false, - disabled_at: null, - price_amount_cents: 1000, - price_amount_float: 10.0, - formatted_price_amount: '€10,00', - auto_capture_max_amount_cents: null, - auto_capture_max_amount_float: null, - formatted_auto_capture_max_amount: null, - created_at: '2022-03-11T14:18:08.420Z', - updated_at: '2022-03-11T14:18:08.420Z', - reference: '', - reference_origin: '', - metadata: {} - }, - relationships: { - market: { - links: { - self: 'https://alessani.commercelayer.co/api/payment_methods/wmBvQsARml/relationships/market', - related: - 'https://alessani.commercelayer.co/api/payment_methods/wmBvQsARml/market' - } - }, - payment_gateway: { - links: { - self: 'https://alessani.commercelayer.co/api/payment_methods/wmBvQsARml/relationships/payment_gateway', - related: - 'https://alessani.commercelayer.co/api/payment_methods/wmBvQsARml/payment_gateway' - } - }, - attachments: { - links: { - self: 'https://alessani.commercelayer.co/api/payment_methods/wmBvQsARml/relationships/attachments', - related: - 'https://alessani.commercelayer.co/api/payment_methods/wmBvQsARml/attachments' - } - }, - versions: { - links: { - self: 'https://alessani.commercelayer.co/api/payment_methods/wmBvQsARml/relationships/versions', - related: - 'https://alessani.commercelayer.co/api/payment_methods/wmBvQsARml/versions' - } - } - }, - meta: { mode: 'test', organization_id: 'WXlEOFrjnr' } - }, - { - id: 'onXELSmbQy', - type: 'stripe_payments', - links: { - self: 'https://alessani.commercelayer.co/api/stripe_payments/onXELSmbQy' - }, - attributes: { - client_secret: - 'pi_3N8LhsK5j6INEBBI0JicoLOo_secret_CKWfEPSnvyBHIQrEfRXkrJYd7', - publishable_key: - 'pk_test_51KH86yK5j6INEBBIdkXoh0UwOoOlAbFZc3b8j0vjRHKQHdaUfEJm24F0A9QkrQXVlgh1nXJCpWR6PG3epaUWzE2z00BdEe9fho', - options: { - id: 'pm_1N8LhuK5j6INEBBI71U1QOlu', - card: { - brand: 'visa', - last4: '4242', - checks: { - cvc_check: null, - address_line1_check: null, - address_postal_code_check: null - }, - wallet: null, - country: 'US', - funding: 'credit', - exp_year: 2031, - networks: { available: ['visa'], preferred: null }, - exp_month: 2, - generated_from: null, - three_d_secure_usage: { supported: true } - }, - type: 'card', - object: 'payment_method', - created: 1684235178, - customer: null, - livemode: false, - billing_details: { - name: 'Darth Vader', - email: 'customer@tk.com', - phone: '+39 055 1234567890', - address: { - city: 'Cogorno', - line1: 'Via Morte Nera, 13', - line2: null, - state: 'GE', - country: 'IT', - postal_code: '16030' - } - }, - setup_future_usage: 'off_session', - intent_amount_cents: 15400 - }, - payment_method: { - id: 'pm_1N8LhuK5j6INEBBIHXkK0FFF', - card: { - brand: 'visa', - last4: '4242', - checks: { - cvc_check: 'pass', - address_line1_check: 'pass', - address_postal_code_check: 'pass' - }, - wallet: null, - country: 'US', - funding: 'credit', - exp_year: 2031, - networks: { available: ['visa'], preferred: null }, - exp_month: 2, - fingerprint: 'bVaeOEKRmYhi20Nj', - generated_from: null, - three_d_secure_usage: { supported: true } - }, - type: 'card', - object: 'payment_method', - created: 1684235179, - customer: null, - livemode: false, - metadata: {}, - billing_details: { - name: 'Darth Vader', - email: 'customer@tk.com', - phone: '+39 055 1234567890', - address: { - city: 'Cogorno', - line1: 'Via Morte Nera, 13', - line2: null, - state: 'GE', - country: 'IT', - postal_code: '16030' - } - } - }, - mismatched_amounts: false, - intent_amount_cents: 15400, - intent_amount_float: 154.0, - formatted_intent_amount: '€154,00', - return_url: null, - payment_instrument: { - issuer_type: 'card', - card_type: 'visa', - card_last_digits: '4242', - card_expiry_month: '2', - card_expiry_year: '2031' - }, - created_at: '2023-05-16T11:06:16.338Z', - updated_at: '2023-05-16T11:06:21.948Z', - reference: null, - reference_origin: null, - metadata: {} - }, - relationships: { - order: { - links: { - self: 'https://alessani.commercelayer.co/api/stripe_payments/onXELSmbQy/relationships/order', - related: - 'https://alessani.commercelayer.co/api/stripe_payments/onXELSmbQy/order' - } - }, - payment_gateway: { - links: { - self: 'https://alessani.commercelayer.co/api/stripe_payments/onXELSmbQy/relationships/payment_gateway', - related: - 'https://alessani.commercelayer.co/api/stripe_payments/onXELSmbQy/payment_gateway' - } - }, - versions: { - links: { - self: 'https://alessani.commercelayer.co/api/stripe_payments/onXELSmbQy/relationships/versions', - related: - 'https://alessani.commercelayer.co/api/stripe_payments/onXELSmbQy/versions' - } - } - }, - meta: { mode: 'test', organization_id: 'WXlEOFrjnr' } - }, - { - id: 'vaoMtAZlXy', - type: 'line_items', - links: { - self: 'https://alessani.commercelayer.co/api/line_items/vaoMtAZlXy' - }, - attributes: { - sku_code: null, - bundle_code: null, - quantity: 1, - currency_code: 'EUR', - unit_amount_cents: -10000, - unit_amount_float: -100.0, - formatted_unit_amount: '-€100,00', - options_amount_cents: 0, - options_amount_float: 0.0, - formatted_options_amount: '€0,00', - discount_cents: 0, - discount_float: 0.0, - formatted_discount: '€0,00', - total_amount_cents: -10000, - total_amount_float: -100.0, - formatted_total_amount: '-€100,00', - tax_amount_cents: 0, - tax_amount_float: 0.0, - formatted_tax_amount: '€0,00', - name: 'Gift card: €100,00', - image_url: null, - discount_breakdown: {}, - tax_rate: 0.0, - tax_breakdown: {}, - item_type: 'gift_cards', - frequency: null, - created_at: '2023-05-16T11:06:14.674Z', - updated_at: '2023-05-16T11:06:14.674Z', - reference: null, - reference_origin: null, - metadata: {} - }, - relationships: { - order: { - links: { - self: 'https://alessani.commercelayer.co/api/line_items/vaoMtAZlXy/relationships/order', - related: - 'https://alessani.commercelayer.co/api/line_items/vaoMtAZlXy/order' - } - }, - item: { - links: { - self: 'https://alessani.commercelayer.co/api/line_items/vaoMtAZlXy/relationships/item', - related: - 'https://alessani.commercelayer.co/api/line_items/vaoMtAZlXy/item' - } - }, - line_item_options: { - links: { - self: 'https://alessani.commercelayer.co/api/line_items/vaoMtAZlXy/relationships/line_item_options', - related: - 'https://alessani.commercelayer.co/api/line_items/vaoMtAZlXy/line_item_options' - } - }, - shipment_line_items: { - links: { - self: 'https://alessani.commercelayer.co/api/line_items/vaoMtAZlXy/relationships/shipment_line_items', - related: - 'https://alessani.commercelayer.co/api/line_items/vaoMtAZlXy/shipment_line_items' - } - }, - stock_reservations: { - links: { - self: 'https://alessani.commercelayer.co/api/line_items/vaoMtAZlXy/relationships/stock_reservations', - related: - 'https://alessani.commercelayer.co/api/line_items/vaoMtAZlXy/stock_reservations' - } - }, - stock_line_items: { - links: { - self: 'https://alessani.commercelayer.co/api/line_items/vaoMtAZlXy/relationships/stock_line_items', - related: - 'https://alessani.commercelayer.co/api/line_items/vaoMtAZlXy/stock_line_items' - } - }, - stock_transfers: { - links: { - self: 'https://alessani.commercelayer.co/api/line_items/vaoMtAZlXy/relationships/stock_transfers', - related: - 'https://alessani.commercelayer.co/api/line_items/vaoMtAZlXy/stock_transfers' - } - }, - events: { - links: { - self: 'https://alessani.commercelayer.co/api/line_items/vaoMtAZlXy/relationships/events', - related: - 'https://alessani.commercelayer.co/api/line_items/vaoMtAZlXy/events' - } - }, - tags: { - links: { - self: 'https://alessani.commercelayer.co/api/line_items/vaoMtAZlXy/relationships/tags', - related: - 'https://alessani.commercelayer.co/api/line_items/vaoMtAZlXy/tags' - } - } - }, - meta: { mode: 'test', organization_id: 'WXlEOFrjnr' } - }, - { - id: 'kmnptjPlBv', - type: 'line_items', - links: { - self: 'https://alessani.commercelayer.co/api/line_items/kmnptjPlBv' - }, - attributes: { - sku_code: null, - bundle_code: null, - quantity: 1, - currency_code: 'EUR', - unit_amount_cents: 1000, - unit_amount_float: 10.0, - formatted_unit_amount: '€10,00', - options_amount_cents: 0, - options_amount_float: 0.0, - formatted_options_amount: '€0,00', - discount_cents: 0, - discount_float: 0.0, - formatted_discount: '€0,00', - total_amount_cents: 1000, - total_amount_float: 10.0, - formatted_total_amount: '€10,00', - tax_amount_cents: 0, - tax_amount_float: 0.0, - formatted_tax_amount: '€0,00', - name: 'Stripe Payment', - image_url: null, - discount_breakdown: {}, - tax_rate: 0.0, - tax_breakdown: {}, - item_type: 'payment_methods', - frequency: null, - created_at: '2023-05-16T11:06:14.629Z', - updated_at: '2023-05-16T11:06:14.629Z', - reference: null, - reference_origin: null, - metadata: {} - }, - relationships: { - order: { - links: { - self: 'https://alessani.commercelayer.co/api/line_items/kmnptjPlBv/relationships/order', - related: - 'https://alessani.commercelayer.co/api/line_items/kmnptjPlBv/order' - } - }, - item: { - links: { - self: 'https://alessani.commercelayer.co/api/line_items/kmnptjPlBv/relationships/item', - related: - 'https://alessani.commercelayer.co/api/line_items/kmnptjPlBv/item' - } - }, - line_item_options: { - links: { - self: 'https://alessani.commercelayer.co/api/line_items/kmnptjPlBv/relationships/line_item_options', - related: - 'https://alessani.commercelayer.co/api/line_items/kmnptjPlBv/line_item_options' - } - }, - shipment_line_items: { - links: { - self: 'https://alessani.commercelayer.co/api/line_items/kmnptjPlBv/relationships/shipment_line_items', - related: - 'https://alessani.commercelayer.co/api/line_items/kmnptjPlBv/shipment_line_items' - } - }, - stock_reservations: { - links: { - self: 'https://alessani.commercelayer.co/api/line_items/kmnptjPlBv/relationships/stock_reservations', - related: - 'https://alessani.commercelayer.co/api/line_items/kmnptjPlBv/stock_reservations' - } - }, - stock_line_items: { - links: { - self: 'https://alessani.commercelayer.co/api/line_items/kmnptjPlBv/relationships/stock_line_items', - related: - 'https://alessani.commercelayer.co/api/line_items/kmnptjPlBv/stock_line_items' - } - }, - stock_transfers: { - links: { - self: 'https://alessani.commercelayer.co/api/line_items/kmnptjPlBv/relationships/stock_transfers', - related: - 'https://alessani.commercelayer.co/api/line_items/kmnptjPlBv/stock_transfers' - } - }, - events: { - links: { - self: 'https://alessani.commercelayer.co/api/line_items/kmnptjPlBv/relationships/events', - related: - 'https://alessani.commercelayer.co/api/line_items/kmnptjPlBv/events' - } - }, - tags: { - links: { - self: 'https://alessani.commercelayer.co/api/line_items/kmnptjPlBv/relationships/tags', - related: - 'https://alessani.commercelayer.co/api/line_items/kmnptjPlBv/tags' - } - } - }, - meta: { mode: 'test', organization_id: 'WXlEOFrjnr' } - }, - { - id: 'vWEZtMGVKy', - type: 'line_items', - links: { - self: 'https://alessani.commercelayer.co/api/line_items/vWEZtMGVKy' - }, - attributes: { - sku_code: null, - bundle_code: null, - quantity: 1, - currency_code: 'EUR', - unit_amount_cents: 0, - unit_amount_float: 0.0, - formatted_unit_amount: '€0,00', - options_amount_cents: 0, - options_amount_float: 0.0, - formatted_options_amount: '€0,00', - discount_cents: 0, - discount_float: 0.0, - formatted_discount: '€0,00', - total_amount_cents: 0, - total_amount_float: 0.0, - formatted_total_amount: '€0,00', - tax_amount_cents: 0, - tax_amount_float: 0.0, - formatted_tax_amount: '€0,00', - name: 'Shipment #2485862/S/001', - image_url: null, - discount_breakdown: {}, - tax_rate: 0.0, - tax_breakdown: {}, - item_type: 'shipments', - frequency: null, - created_at: '2023-05-16T11:06:09.728Z', - updated_at: '2023-05-16T11:06:09.728Z', - reference: null, - reference_origin: null, - metadata: {} - }, - relationships: { - order: { - links: { - self: 'https://alessani.commercelayer.co/api/line_items/vWEZtMGVKy/relationships/order', - related: - 'https://alessani.commercelayer.co/api/line_items/vWEZtMGVKy/order' - } - }, - item: { - links: { - self: 'https://alessani.commercelayer.co/api/line_items/vWEZtMGVKy/relationships/item', - related: - 'https://alessani.commercelayer.co/api/line_items/vWEZtMGVKy/item' - } - }, - line_item_options: { - links: { - self: 'https://alessani.commercelayer.co/api/line_items/vWEZtMGVKy/relationships/line_item_options', - related: - 'https://alessani.commercelayer.co/api/line_items/vWEZtMGVKy/line_item_options' - } - }, - shipment_line_items: { - links: { - self: 'https://alessani.commercelayer.co/api/line_items/vWEZtMGVKy/relationships/shipment_line_items', - related: - 'https://alessani.commercelayer.co/api/line_items/vWEZtMGVKy/shipment_line_items' - } - }, - stock_reservations: { - links: { - self: 'https://alessani.commercelayer.co/api/line_items/vWEZtMGVKy/relationships/stock_reservations', - related: - 'https://alessani.commercelayer.co/api/line_items/vWEZtMGVKy/stock_reservations' - } - }, - stock_line_items: { - links: { - self: 'https://alessani.commercelayer.co/api/line_items/vWEZtMGVKy/relationships/stock_line_items', - related: - 'https://alessani.commercelayer.co/api/line_items/vWEZtMGVKy/stock_line_items' - } - }, - stock_transfers: { - links: { - self: 'https://alessani.commercelayer.co/api/line_items/vWEZtMGVKy/relationships/stock_transfers', - related: - 'https://alessani.commercelayer.co/api/line_items/vWEZtMGVKy/stock_transfers' - } - }, - events: { - links: { - self: 'https://alessani.commercelayer.co/api/line_items/vWEZtMGVKy/relationships/events', - related: - 'https://alessani.commercelayer.co/api/line_items/vWEZtMGVKy/events' - } - }, - tags: { - links: { - self: 'https://alessani.commercelayer.co/api/line_items/vWEZtMGVKy/relationships/tags', - related: - 'https://alessani.commercelayer.co/api/line_items/vWEZtMGVKy/tags' - } - } - }, - meta: { mode: 'test', organization_id: 'WXlEOFrjnr' } - }, - { - id: 'NqYatGaKnN', - type: 'line_items', - links: { - self: 'https://alessani.commercelayer.co/api/line_items/NqYatGaKnN' - }, - attributes: { - sku_code: null, - bundle_code: null, - quantity: 1, - currency_code: 'EUR', - unit_amount_cents: 0, - unit_amount_float: 0.0, - formatted_unit_amount: '€0,00', - options_amount_cents: 0, - options_amount_float: 0.0, - formatted_options_amount: '€0,00', - discount_cents: 0, - discount_float: 0.0, - formatted_discount: '€0,00', - total_amount_cents: 0, - total_amount_float: 0.0, - formatted_total_amount: '€0,00', - tax_amount_cents: 0, - tax_amount_float: 0.0, - formatted_tax_amount: '€0,00', - name: 'Shipment #2485862/S/002', - image_url: null, - discount_breakdown: {}, - tax_rate: 0.0, - tax_breakdown: {}, - item_type: 'shipments', - frequency: null, - created_at: '2023-05-16T11:06:09.602Z', - updated_at: '2023-05-16T11:06:09.602Z', - reference: null, - reference_origin: null, - metadata: {} - }, - relationships: { - order: { - links: { - self: 'https://alessani.commercelayer.co/api/line_items/NqYatGaKnN/relationships/order', - related: - 'https://alessani.commercelayer.co/api/line_items/NqYatGaKnN/order' - } - }, - item: { - links: { - self: 'https://alessani.commercelayer.co/api/line_items/NqYatGaKnN/relationships/item', - related: - 'https://alessani.commercelayer.co/api/line_items/NqYatGaKnN/item' - } - }, - line_item_options: { - links: { - self: 'https://alessani.commercelayer.co/api/line_items/NqYatGaKnN/relationships/line_item_options', - related: - 'https://alessani.commercelayer.co/api/line_items/NqYatGaKnN/line_item_options' - } - }, - shipment_line_items: { - links: { - self: 'https://alessani.commercelayer.co/api/line_items/NqYatGaKnN/relationships/shipment_line_items', - related: - 'https://alessani.commercelayer.co/api/line_items/NqYatGaKnN/shipment_line_items' - } - }, - stock_reservations: { - links: { - self: 'https://alessani.commercelayer.co/api/line_items/NqYatGaKnN/relationships/stock_reservations', - related: - 'https://alessani.commercelayer.co/api/line_items/NqYatGaKnN/stock_reservations' - } - }, - stock_line_items: { - links: { - self: 'https://alessani.commercelayer.co/api/line_items/NqYatGaKnN/relationships/stock_line_items', - related: - 'https://alessani.commercelayer.co/api/line_items/NqYatGaKnN/stock_line_items' - } - }, - stock_transfers: { - links: { - self: 'https://alessani.commercelayer.co/api/line_items/NqYatGaKnN/relationships/stock_transfers', - related: - 'https://alessani.commercelayer.co/api/line_items/NqYatGaKnN/stock_transfers' - } - }, - events: { - links: { - self: 'https://alessani.commercelayer.co/api/line_items/NqYatGaKnN/relationships/events', - related: - 'https://alessani.commercelayer.co/api/line_items/NqYatGaKnN/events' - } - }, - tags: { - links: { - self: 'https://alessani.commercelayer.co/api/line_items/NqYatGaKnN/relationships/tags', - related: - 'https://alessani.commercelayer.co/api/line_items/NqYatGaKnN/tags' - } - } - }, - meta: { mode: 'test', organization_id: 'WXlEOFrjnr' } - }, - { - id: 'NoEntBwEdk', - type: 'line_items', - links: { - self: 'https://alessani.commercelayer.co/api/line_items/NoEntBwEdk' - }, - attributes: { - sku_code: 'TSHIRTMMFFFFFF000000XLXX', - bundle_code: null, - quantity: 5, - currency_code: 'EUR', - unit_amount_cents: 2900, - unit_amount_float: 29.0, - formatted_unit_amount: '€29,00', - options_amount_cents: 0, - options_amount_float: 0.0, - formatted_options_amount: '€0,00', - discount_cents: -5943, - discount_float: -59.43, - formatted_discount: '-€59,43', - total_amount_cents: 14500, - total_amount_float: 145.0, - formatted_total_amount: '€145,00', - tax_amount_cents: 0, - tax_amount_float: 0.0, - formatted_tax_amount: '€0,00', - name: 'White Men T-Shirt with Black Logo (XL)', - image_url: - 'https://data.commercelayer.app/seed/images/skus/TSHIRTMSFFFFFF000000XLXX_FLAT.png', - discount_breakdown: { - vaoMtAZlXy: { cents: -5943, weight: 0.5942622950819673 } - }, - tax_rate: 0.0, - tax_breakdown: {}, - item_type: 'skus', - frequency: null, - created_at: '2023-05-16T11:06:02.458Z', - updated_at: '2023-05-16T11:06:02.458Z', - reference: null, - reference_origin: null, - metadata: {} - }, - relationships: { - order: { - links: { - self: 'https://alessani.commercelayer.co/api/line_items/NoEntBwEdk/relationships/order', - related: - 'https://alessani.commercelayer.co/api/line_items/NoEntBwEdk/order' - } - }, - item: { - links: { - self: 'https://alessani.commercelayer.co/api/line_items/NoEntBwEdk/relationships/item', - related: - 'https://alessani.commercelayer.co/api/line_items/NoEntBwEdk/item' - } - }, - line_item_options: { - links: { - self: 'https://alessani.commercelayer.co/api/line_items/NoEntBwEdk/relationships/line_item_options', - related: - 'https://alessani.commercelayer.co/api/line_items/NoEntBwEdk/line_item_options' - } - }, - shipment_line_items: { - links: { - self: 'https://alessani.commercelayer.co/api/line_items/NoEntBwEdk/relationships/shipment_line_items', - related: - 'https://alessani.commercelayer.co/api/line_items/NoEntBwEdk/shipment_line_items' - } - }, - stock_reservations: { - links: { - self: 'https://alessani.commercelayer.co/api/line_items/NoEntBwEdk/relationships/stock_reservations', - related: - 'https://alessani.commercelayer.co/api/line_items/NoEntBwEdk/stock_reservations' - } - }, - stock_line_items: { - links: { - self: 'https://alessani.commercelayer.co/api/line_items/NoEntBwEdk/relationships/stock_line_items', - related: - 'https://alessani.commercelayer.co/api/line_items/NoEntBwEdk/stock_line_items' - } - }, - stock_transfers: { - links: { - self: 'https://alessani.commercelayer.co/api/line_items/NoEntBwEdk/relationships/stock_transfers', - related: - 'https://alessani.commercelayer.co/api/line_items/NoEntBwEdk/stock_transfers' - } - }, - events: { - links: { - self: 'https://alessani.commercelayer.co/api/line_items/NoEntBwEdk/relationships/events', - related: - 'https://alessani.commercelayer.co/api/line_items/NoEntBwEdk/events' - } - }, - tags: { - links: { - self: 'https://alessani.commercelayer.co/api/line_items/NoEntBwEdk/relationships/tags', - related: - 'https://alessani.commercelayer.co/api/line_items/NoEntBwEdk/tags' - } - } - }, - meta: { mode: 'test', organization_id: 'WXlEOFrjnr' } - }, - { - id: 'NlQmtMAnGy', - type: 'line_items', - links: { - self: 'https://alessani.commercelayer.co/api/line_items/NlQmtMAnGy' - }, - attributes: { - sku_code: 'CANVASAU000000FFFFFF1824', - bundle_code: null, - quantity: 1, - currency_code: 'EUR', - unit_amount_cents: 9900, - unit_amount_float: 99.0, - formatted_unit_amount: '€99,00', - options_amount_cents: 0, - options_amount_float: 0.0, - formatted_options_amount: '€0,00', - discount_cents: -4057, - discount_float: -40.57, - formatted_discount: '-€40,57', - total_amount_cents: 9900, - total_amount_float: 99.0, - formatted_total_amount: '€99,00', - tax_amount_cents: 0, - tax_amount_float: 0.0, - formatted_tax_amount: '€0,00', - name: 'Black Canvas with White Logo (18x24)', - image_url: - 'https://img.commercelayer.io/skus/CANVASAU000000FFFFFF.png?fm=jpg&q=90', - discount_breakdown: { - vaoMtAZlXy: { cents: -4057, weight: 0.4057377049180328 } - }, - tax_rate: 0.0, - tax_breakdown: {}, - item_type: 'skus', - frequency: null, - created_at: '2023-05-16T11:06:02.444Z', - updated_at: '2023-05-16T11:06:02.444Z', - reference: null, - reference_origin: null, - metadata: {} - }, - relationships: { - order: { - links: { - self: 'https://alessani.commercelayer.co/api/line_items/NlQmtMAnGy/relationships/order', - related: - 'https://alessani.commercelayer.co/api/line_items/NlQmtMAnGy/order' - } - }, - item: { - links: { - self: 'https://alessani.commercelayer.co/api/line_items/NlQmtMAnGy/relationships/item', - related: - 'https://alessani.commercelayer.co/api/line_items/NlQmtMAnGy/item' - } - }, - line_item_options: { - links: { - self: 'https://alessani.commercelayer.co/api/line_items/NlQmtMAnGy/relationships/line_item_options', - related: - 'https://alessani.commercelayer.co/api/line_items/NlQmtMAnGy/line_item_options' - } - }, - shipment_line_items: { - links: { - self: 'https://alessani.commercelayer.co/api/line_items/NlQmtMAnGy/relationships/shipment_line_items', - related: - 'https://alessani.commercelayer.co/api/line_items/NlQmtMAnGy/shipment_line_items' - } - }, - stock_reservations: { - links: { - self: 'https://alessani.commercelayer.co/api/line_items/NlQmtMAnGy/relationships/stock_reservations', - related: - 'https://alessani.commercelayer.co/api/line_items/NlQmtMAnGy/stock_reservations' - } - }, - stock_line_items: { - links: { - self: 'https://alessani.commercelayer.co/api/line_items/NlQmtMAnGy/relationships/stock_line_items', - related: - 'https://alessani.commercelayer.co/api/line_items/NlQmtMAnGy/stock_line_items' - } - }, - stock_transfers: { - links: { - self: 'https://alessani.commercelayer.co/api/line_items/NlQmtMAnGy/relationships/stock_transfers', - related: - 'https://alessani.commercelayer.co/api/line_items/NlQmtMAnGy/stock_transfers' - } - }, - events: { - links: { - self: 'https://alessani.commercelayer.co/api/line_items/NlQmtMAnGy/relationships/events', - related: - 'https://alessani.commercelayer.co/api/line_items/NlQmtMAnGy/events' - } - }, - tags: { - links: { - self: 'https://alessani.commercelayer.co/api/line_items/NlQmtMAnGy/relationships/tags', - related: - 'https://alessani.commercelayer.co/api/line_items/NlQmtMAnGy/tags' - } - } - }, - meta: { mode: 'test', organization_id: 'WXlEOFrjnr' } - }, - { - id: 'YpLwCnNQgY', - type: 'shipments', - links: { - self: 'https://alessani.commercelayer.co/api/shipments/YpLwCnNQgY' - }, - attributes: { - number: '2485862/S/001', - status: 'on_hold', - currency_code: 'EUR', - cost_amount_cents: 0, - cost_amount_float: 0.0, - formatted_cost_amount: '$0.00', - skus_count: 5, - selected_rate_id: null, - rates: [], - purchase_error_code: null, - purchase_error_message: null, - get_rates_errors: [], - get_rates_started_at: null, - get_rates_completed_at: null, - purchase_started_at: null, - purchase_completed_at: null, - purchase_failed_at: null, - on_hold_at: '2023-07-21T14:12:13.287Z', - picking_at: '2023-07-21T14:12:08.574Z', - packing_at: '2023-07-21T14:10:54.107Z', - ready_to_ship_at: null, - shipped_at: null, - created_at: '2023-05-16T11:06:07.685Z', - updated_at: '2023-07-21T14:12:13.286Z', - reference: null, - reference_origin: null, - metadata: {} - }, - relationships: { - order: { - links: { - self: 'https://alessani.commercelayer.co/api/shipments/YpLwCnNQgY/relationships/order', - related: - 'https://alessani.commercelayer.co/api/shipments/YpLwCnNQgY/order' - } - }, - shipping_category: { - links: { - self: 'https://alessani.commercelayer.co/api/shipments/YpLwCnNQgY/relationships/shipping_category', - related: - 'https://alessani.commercelayer.co/api/shipments/YpLwCnNQgY/shipping_category' - } - }, - stock_location: { - links: { - self: 'https://alessani.commercelayer.co/api/shipments/YpLwCnNQgY/relationships/stock_location', - related: - 'https://alessani.commercelayer.co/api/shipments/YpLwCnNQgY/stock_location' - } - }, - origin_address: { - links: { - self: 'https://alessani.commercelayer.co/api/shipments/YpLwCnNQgY/relationships/origin_address', - related: - 'https://alessani.commercelayer.co/api/shipments/YpLwCnNQgY/origin_address' - } - }, - shipping_address: { - links: { - self: 'https://alessani.commercelayer.co/api/shipments/YpLwCnNQgY/relationships/shipping_address', - related: - 'https://alessani.commercelayer.co/api/shipments/YpLwCnNQgY/shipping_address' - } - }, - shipping_method: { - links: { - self: 'https://alessani.commercelayer.co/api/shipments/YpLwCnNQgY/relationships/shipping_method', - related: - 'https://alessani.commercelayer.co/api/shipments/YpLwCnNQgY/shipping_method' - } - }, - delivery_lead_time: { - links: { - self: 'https://alessani.commercelayer.co/api/shipments/YpLwCnNQgY/relationships/delivery_lead_time', - related: - 'https://alessani.commercelayer.co/api/shipments/YpLwCnNQgY/delivery_lead_time' - } - }, - shipment_line_items: { - links: { - self: 'https://alessani.commercelayer.co/api/shipments/YpLwCnNQgY/relationships/shipment_line_items', - related: - 'https://alessani.commercelayer.co/api/shipments/YpLwCnNQgY/shipment_line_items' - } - }, - stock_line_items: { - links: { - self: 'https://alessani.commercelayer.co/api/shipments/YpLwCnNQgY/relationships/stock_line_items', - related: - 'https://alessani.commercelayer.co/api/shipments/YpLwCnNQgY/stock_line_items' - } - }, - stock_transfers: { - links: { - self: 'https://alessani.commercelayer.co/api/shipments/YpLwCnNQgY/relationships/stock_transfers', - related: - 'https://alessani.commercelayer.co/api/shipments/YpLwCnNQgY/stock_transfers' - } - }, - available_shipping_methods: { - links: { - self: 'https://alessani.commercelayer.co/api/shipments/YpLwCnNQgY/relationships/available_shipping_methods', - related: - 'https://alessani.commercelayer.co/api/shipments/YpLwCnNQgY/available_shipping_methods' - } - }, - carrier_accounts: { - links: { - self: 'https://alessani.commercelayer.co/api/shipments/YpLwCnNQgY/relationships/carrier_accounts', - related: - 'https://alessani.commercelayer.co/api/shipments/YpLwCnNQgY/carrier_accounts' - } - }, - parcels: { - links: { - self: 'https://alessani.commercelayer.co/api/shipments/YpLwCnNQgY/relationships/parcels', - related: - 'https://alessani.commercelayer.co/api/shipments/YpLwCnNQgY/parcels' - } - }, - attachments: { - links: { - self: 'https://alessani.commercelayer.co/api/shipments/YpLwCnNQgY/relationships/attachments', - related: - 'https://alessani.commercelayer.co/api/shipments/YpLwCnNQgY/attachments' - } - }, - events: { - links: { - self: 'https://alessani.commercelayer.co/api/shipments/YpLwCnNQgY/relationships/events', - related: - 'https://alessani.commercelayer.co/api/shipments/YpLwCnNQgY/events' - } - }, - versions: { - links: { - self: 'https://alessani.commercelayer.co/api/shipments/YpLwCnNQgY/relationships/versions', - related: - 'https://alessani.commercelayer.co/api/shipments/YpLwCnNQgY/versions' - } - } - }, - meta: { mode: 'test', organization_id: 'WXlEOFrjnr' } - }, - { - id: 'PabvCpOxRy', - type: 'shipments', - links: { - self: 'https://alessani.commercelayer.co/api/shipments/PabvCpOxRy' - }, - attributes: { - number: '2485862/S/002', - status: 'shipped', - currency_code: 'EUR', - cost_amount_cents: 0, - cost_amount_float: 0.0, - formatted_cost_amount: '$0.00', - skus_count: 1, - selected_rate_id: null, - rates: [], - purchase_error_code: null, - purchase_error_message: null, - get_rates_errors: [], - get_rates_started_at: null, - get_rates_completed_at: null, - purchase_started_at: null, - purchase_completed_at: null, - purchase_failed_at: null, - on_hold_at: null, - picking_at: '2023-05-16T14:18:35.559Z', - packing_at: '2023-05-16T14:20:24.459Z', - ready_to_ship_at: '2023-05-16T14:21:43.665Z', - shipped_at: '2023-05-16T14:22:42.632Z', - created_at: '2023-05-16T11:06:07.711Z', - updated_at: '2023-05-16T14:22:42.633Z', - reference: null, - reference_origin: null, - metadata: {} - }, - relationships: { - order: { - links: { - self: 'https://alessani.commercelayer.co/api/shipments/PabvCpOxRy/relationships/order', - related: - 'https://alessani.commercelayer.co/api/shipments/PabvCpOxRy/order' - } - }, - shipping_category: { - links: { - self: 'https://alessani.commercelayer.co/api/shipments/PabvCpOxRy/relationships/shipping_category', - related: - 'https://alessani.commercelayer.co/api/shipments/PabvCpOxRy/shipping_category' - } - }, - stock_location: { - links: { - self: 'https://alessani.commercelayer.co/api/shipments/PabvCpOxRy/relationships/stock_location', - related: - 'https://alessani.commercelayer.co/api/shipments/PabvCpOxRy/stock_location' - } - }, - origin_address: { - links: { - self: 'https://alessani.commercelayer.co/api/shipments/PabvCpOxRy/relationships/origin_address', - related: - 'https://alessani.commercelayer.co/api/shipments/PabvCpOxRy/origin_address' - } - }, - shipping_address: { - links: { - self: 'https://alessani.commercelayer.co/api/shipments/PabvCpOxRy/relationships/shipping_address', - related: - 'https://alessani.commercelayer.co/api/shipments/PabvCpOxRy/shipping_address' - } - }, - shipping_method: { - links: { - self: 'https://alessani.commercelayer.co/api/shipments/PabvCpOxRy/relationships/shipping_method', - related: - 'https://alessani.commercelayer.co/api/shipments/PabvCpOxRy/shipping_method' - } - }, - delivery_lead_time: { - links: { - self: 'https://alessani.commercelayer.co/api/shipments/PabvCpOxRy/relationships/delivery_lead_time', - related: - 'https://alessani.commercelayer.co/api/shipments/PabvCpOxRy/delivery_lead_time' - } - }, - shipment_line_items: { - links: { - self: 'https://alessani.commercelayer.co/api/shipments/PabvCpOxRy/relationships/shipment_line_items', - related: - 'https://alessani.commercelayer.co/api/shipments/PabvCpOxRy/shipment_line_items' - } - }, - stock_line_items: { - links: { - self: 'https://alessani.commercelayer.co/api/shipments/PabvCpOxRy/relationships/stock_line_items', - related: - 'https://alessani.commercelayer.co/api/shipments/PabvCpOxRy/stock_line_items' - } - }, - stock_transfers: { - links: { - self: 'https://alessani.commercelayer.co/api/shipments/PabvCpOxRy/relationships/stock_transfers', - related: - 'https://alessani.commercelayer.co/api/shipments/PabvCpOxRy/stock_transfers' - } - }, - available_shipping_methods: { - links: { - self: 'https://alessani.commercelayer.co/api/shipments/PabvCpOxRy/relationships/available_shipping_methods', - related: - 'https://alessani.commercelayer.co/api/shipments/PabvCpOxRy/available_shipping_methods' - } - }, - carrier_accounts: { - links: { - self: 'https://alessani.commercelayer.co/api/shipments/PabvCpOxRy/relationships/carrier_accounts', - related: - 'https://alessani.commercelayer.co/api/shipments/PabvCpOxRy/carrier_accounts' - } - }, - parcels: { - links: { - self: 'https://alessani.commercelayer.co/api/shipments/PabvCpOxRy/relationships/parcels', - related: - 'https://alessani.commercelayer.co/api/shipments/PabvCpOxRy/parcels' - } - }, - attachments: { - links: { - self: 'https://alessani.commercelayer.co/api/shipments/PabvCpOxRy/relationships/attachments', - related: - 'https://alessani.commercelayer.co/api/shipments/PabvCpOxRy/attachments' - } - }, - events: { - links: { - self: 'https://alessani.commercelayer.co/api/shipments/PabvCpOxRy/relationships/events', - related: - 'https://alessani.commercelayer.co/api/shipments/PabvCpOxRy/events' - } - }, - versions: { - links: { - self: 'https://alessani.commercelayer.co/api/shipments/PabvCpOxRy/relationships/versions', - related: - 'https://alessani.commercelayer.co/api/shipments/PabvCpOxRy/versions' - } - } - }, - meta: { mode: 'test', organization_id: 'WXlEOFrjnr' } - }, - { - id: 'nKZkPUDBVj', - type: 'authorizations', - links: { - self: 'https://alessani.commercelayer.co/api/authorizations/nKZkPUDBVj' - }, - attributes: { - number: '2485862/T/001', - currency_code: 'EUR', - amount_cents: 15400, - amount_float: 154.0, - formatted_amount: '€154,00', - succeeded: true, - message: 'Success!', - error_code: null, - error_detail: null, - token: 'pi_3N8LhsK5j6INEBBI0JicoLOo', - gateway_transaction_id: 'pi_3N8LhsK5j6INEBBI0JicoLOo', - created_at: '2023-05-16T11:06:21.964Z', - updated_at: '2023-05-16T11:06:21.964Z', - reference: null, - reference_origin: null, - metadata: {}, - cvv_code: null, - cvv_message: null, - avs_code: null, - avs_message: null, - fraud_review: null, - capture_amount_cents: 0, - capture_amount_float: 0.0, - formatted_capture_amount: '€0,00', - capture_balance_cents: 0, - capture_balance_float: 0.0, - formatted_capture_balance: '€0,00', - void_balance_cents: 15400, - void_balance_float: 154.0, - formatted_void_balance: '€154,00' - }, - relationships: { - order: { - links: { - self: 'https://alessani.commercelayer.co/api/authorizations/nKZkPUDBVj/relationships/order', - related: - 'https://alessani.commercelayer.co/api/authorizations/nKZkPUDBVj/order' - } - }, - attachments: { - links: { - self: 'https://alessani.commercelayer.co/api/authorizations/nKZkPUDBVj/relationships/attachments', - related: - 'https://alessani.commercelayer.co/api/authorizations/nKZkPUDBVj/attachments' - } - }, - versions: { - links: { - self: 'https://alessani.commercelayer.co/api/authorizations/nKZkPUDBVj/relationships/versions', - related: - 'https://alessani.commercelayer.co/api/authorizations/nKZkPUDBVj/versions' - } - }, - captures: { - links: { - self: 'https://alessani.commercelayer.co/api/authorizations/nKZkPUDBVj/relationships/captures', - related: - 'https://alessani.commercelayer.co/api/authorizations/nKZkPUDBVj/captures' - } - }, - voids: { - links: { - self: 'https://alessani.commercelayer.co/api/authorizations/nKZkPUDBVj/relationships/voids', - related: - 'https://alessani.commercelayer.co/api/authorizations/nKZkPUDBVj/voids' - } - }, - events: { - links: { - self: 'https://alessani.commercelayer.co/api/authorizations/nKZkPUDBVj/relationships/events', - related: - 'https://alessani.commercelayer.co/api/authorizations/nKZkPUDBVj/events' - } - } - }, - meta: { mode: 'test', organization_id: 'WXlEOFrjnr' } - }, - { - id: 'kyAnxUgegE', - type: 'captures', - links: { - self: 'https://alessani.commercelayer.co/api/captures/kyAnxUgegE' - }, - attributes: { - number: '2485862/T/002', - currency_code: 'EUR', - amount_cents: 15400, - amount_float: 154.0, - formatted_amount: '€154,00', - succeeded: true, - message: 'Success!', - error_code: null, - error_detail: null, - token: 'pi_3N8LhsK5j6INEBBI0JicoLOo', - gateway_transaction_id: 'pi_3N8LhsK5j6INEBBI0JicoLOo', - created_at: '2023-05-16T14:18:35.368Z', - updated_at: '2023-05-16T14:18:35.368Z', - reference: null, - reference_origin: null, - metadata: {}, - refund_amount_cents: 15400, - refund_amount_float: 154.0, - formatted_refund_amount: '€154,00', - refund_balance_cents: 15400, - refund_balance_float: 154.0, - formatted_refund_balance: '€154,00' - }, - relationships: { - order: { - links: { - self: 'https://alessani.commercelayer.co/api/captures/kyAnxUgegE/relationships/order', - related: - 'https://alessani.commercelayer.co/api/captures/kyAnxUgegE/order' - } - }, - attachments: { - links: { - self: 'https://alessani.commercelayer.co/api/captures/kyAnxUgegE/relationships/attachments', - related: - 'https://alessani.commercelayer.co/api/captures/kyAnxUgegE/attachments' - } - }, - versions: { - links: { - self: 'https://alessani.commercelayer.co/api/captures/kyAnxUgegE/relationships/versions', - related: - 'https://alessani.commercelayer.co/api/captures/kyAnxUgegE/versions' - } - }, - reference_authorization: { - links: { - self: 'https://alessani.commercelayer.co/api/captures/kyAnxUgegE/relationships/reference_authorization', - related: - 'https://alessani.commercelayer.co/api/captures/kyAnxUgegE/reference_authorization' - } - }, - refunds: { - links: { - self: 'https://alessani.commercelayer.co/api/captures/kyAnxUgegE/relationships/refunds', - related: - 'https://alessani.commercelayer.co/api/captures/kyAnxUgegE/refunds' - } - }, - events: { - links: { - self: 'https://alessani.commercelayer.co/api/captures/kyAnxUgegE/relationships/events', - related: - 'https://alessani.commercelayer.co/api/captures/kyAnxUgegE/events' - } - } - }, - meta: { mode: 'test', organization_id: 'WXlEOFrjnr' } - }, - { - id: 'EqGrksxWNW', - type: 'attachments', - links: { - self: 'https://alessani.commercelayer.co/api/attachments/EqGrksxWNW' - }, - attributes: { - name: 'M. Montalbano', - description: 'Ehi there!', - url: null, - created_at: '2023-07-20T13:58:52.184Z', - updated_at: '2023-07-20T13:58:52.184Z', - reference: null, - reference_origin: 'app-orders--note', - metadata: {} - }, - relationships: { - attachable: { - links: { - self: 'https://alessani.commercelayer.co/api/attachments/EqGrksxWNW/relationships/attachable', - related: - 'https://alessani.commercelayer.co/api/attachments/EqGrksxWNW/attachable' - } - } - }, - meta: { mode: 'test', organization_id: 'WXlEOFrjnr' } - } - ] - }) - ) - } -) - -export default [orderDetail, orderList] diff --git a/packages/document/mocks/data/sku_lists.js b/packages/document/mocks/data/sku_lists.js deleted file mode 100644 index fd6b6265..00000000 --- a/packages/document/mocks/data/sku_lists.js +++ /dev/null @@ -1,70 +0,0 @@ -import { http, HttpResponse } from 'msw' - -const skuListData = { - id: 'SkuListAbc01', - type: 'sku_lists', - links: { - self: 'https://react-components-store.commercelayer.io/api/sku_lists/SkuListAbc01' - }, - attributes: { - name: 'Summer Collection', - slug: 'summer-collection', - description: 'Our summer collection SKU list.', - image_url: null, - manual: true, - sku_count: 2, - created_at: '2023-01-01T00:00:00.000Z', - updated_at: '2023-01-01T00:00:00.000Z', - reference: null, - reference_origin: null, - metadata: {} - }, - relationships: { - skus: { - data: [ - { type: 'skus', id: 'SkuAbc001' }, - { type: 'skus', id: 'SkuAbc002' } - ] - } - }, - meta: { mode: 'test' } -} - -const included = [ - { - id: 'SkuAbc001', - type: 'skus', - links: { self: 'https://react-components-store.commercelayer.io/api/skus/SkuAbc001' }, - attributes: { - code: 'TSHIRTMM000000FFFFFFXLXX', - name: 'Black T-Shirt XL', - image_url: 'https://img.commercelayer.io/skus/TSHIRTMM000000FFFFFFXLXX.png' - }, - relationships: {}, - meta: { mode: 'test' } - }, - { - id: 'SkuAbc002', - type: 'skus', - links: { self: 'https://react-components-store.commercelayer.io/api/skus/SkuAbc002' }, - attributes: { - code: 'PANTSMM000000FFFFFFXXXX', - name: 'Black Pants', - image_url: 'https://img.commercelayer.io/skus/PANTSMM000000FFFFFFXXXX.png' - }, - relationships: {}, - meta: { mode: 'test' } - } -] - -export default [ - http.get( - 'https://react-components-store.commercelayer.io/api/sku_lists/:id', - () => { - return HttpResponse.json({ - data: skuListData, - included - }) - } - ) -] diff --git a/packages/document/mocks/data/skus.js b/packages/document/mocks/data/skus.js deleted file mode 100644 index 18b1ab66..00000000 --- a/packages/document/mocks/data/skus.js +++ /dev/null @@ -1,73 +0,0 @@ -import { http, HttpResponse } from 'msw' - -const skuList = [ - { - id: 'SkuAbc001', - type: 'skus', - links: { self: 'https://react-components-store.commercelayer.io/api/skus/SkuAbc001' }, - attributes: { - code: 'TSHIRTMM000000FFFFFFXLXX', - name: 'Black T-Shirt XL', - description: 'A comfortable black t-shirt in XL size.', - image_url: 'https://img.commercelayer.io/skus/TSHIRTMM000000FFFFFFXLXX.png', - do_not_ship: false, - do_not_track: false, - pieces_per_pack: null, - weight: null, - unit_of_weight: null, - hs_tariff_number: null, - inbound_tracking: null, - created_at: '2023-01-01T00:00:00.000Z', - updated_at: '2023-01-01T00:00:00.000Z', - reference: null, - reference_origin: null, - metadata: {} - }, - relationships: {}, - meta: { mode: 'test' } - }, - { - id: 'SkuAbc002', - type: 'skus', - links: { self: 'https://react-components-store.commercelayer.io/api/skus/SkuAbc002' }, - attributes: { - code: 'PANTSMM000000FFFFFFXXXX', - name: 'Black Pants', - description: 'Classic black pants.', - image_url: 'https://img.commercelayer.io/skus/PANTSMM000000FFFFFFXXXX.png', - do_not_ship: false, - do_not_track: false, - pieces_per_pack: null, - weight: null, - unit_of_weight: null, - hs_tariff_number: null, - inbound_tracking: null, - created_at: '2023-01-01T00:00:00.000Z', - updated_at: '2023-01-01T00:00:00.000Z', - reference: null, - reference_origin: null, - metadata: {} - }, - relationships: {}, - meta: { mode: 'test' } - } -] - -// MSW v2 handler (canonical pattern for this project — existing handlers use the v1 compat shim). -// This broad match intercepts all GET /api/skus requests regardless of query params. -// Add more specific handlers above this one if you need different responses per query. -export default [ - http.get( - 'https://react-components-store.commercelayer.io/api/skus', - () => { - return HttpResponse.json({ - data: skuList, - meta: { record_count: 2, page_count: 1 }, - links: { - first: 'https://react-components-store.commercelayer.io/api/skus?page[number]=1', - last: 'https://react-components-store.commercelayer.io/api/skus?page[number]=1' - } - }) - } - ) -] diff --git a/packages/document/mocks/data/tags.js b/packages/document/mocks/data/tags.js deleted file mode 100644 index 3fdf23d7..00000000 --- a/packages/document/mocks/data/tags.js +++ /dev/null @@ -1,42 +0,0 @@ -import { HttpResponse, http } from 'msw' - -const mockedTags = Array(15) - .fill(null) - .map((item, idx) => ({ - id: Math.random().toString().substring(2, 12), - type: 'tags', - attributes: { - name: `tag-${idx}`, - created_at: '2023-03-17T14:07:36.604Z', - updated_at: '2023-03-17T14:07:36.604Z' - }, - meta: { mode: 'test', organization_id: 'WXlEOFrjnr' } - })) - -const customerTags = http.get( - `https://mock.localhost/api/customers/NMWYhbGorj/tags`, - async () => { - return HttpResponse.json( - { - data: mockedTags.slice(0, 2), - meta: { record_count: 2, page_count: 1 } - }, - { status: 200 } - ) - } -) - -const organizationTags = http.get( - `https://mock.localhost/api/tags`, - async () => { - return HttpResponse.json( - { - data: mockedTags, - meta: { record_count: 100, page_count: 10 } - }, - { status: 200 } - ) - } -) - -export default [customerTags, organizationTags] diff --git a/packages/document/mocks/handlers.js b/packages/document/mocks/handlers.js deleted file mode 100644 index e529f35d..00000000 --- a/packages/document/mocks/handlers.js +++ /dev/null @@ -1,19 +0,0 @@ -import adjustments from './data/adjustments' -import bundles from './data/bundles' -import lineItems from './data/line_items' -import markets from './data/markets' -import orders from './data/orders' -import skus from './data/skus' -import skuLists from './data/sku_lists' -import tags from './data/tags' - -export const handlers = [ - ...adjustments, - ...bundles, - ...lineItems, - ...markets, - ...orders, - ...skus, - ...skuLists, - ...tags -] diff --git a/packages/document/package.json b/packages/document/package.json index c6861c60..508ed245 100644 --- a/packages/document/package.json +++ b/packages/document/package.json @@ -5,49 +5,37 @@ "type": "module", "scripts": { "dev": "vite", - "lint": "eslint .", + "lint": "biome lint ./src", "preview": "vite preview", "storybook": "storybook dev -p 6006", "build-storybook": "storybook build", "mcp": "storybook mcp" }, "dependencies": { - "@commercelayer/js-auth": "^7.1.2", "@commercelayer/react-components": "workspace:*", - "js-cookie": "^3.0.5", - "jwt-decode": "^4.0.0", "react": "^19.2.3", "react-dom": "^19.2.3" }, "devDependencies": { - "@types/js-cookie": "^3.0.6", "@chromatic-com/storybook": "^5.1.1", - "@eslint/js": "^9.39.2", + "@commercelayer/js-auth": "^7.3.0", "@storybook/addon-docs": "^10.3.5", "@storybook/addon-links": "^10.3.5", - "@storybook/addon-mcp": "^0.4.2", + "@storybook/addon-mcp": "^0.5.0", "@storybook/addon-onboarding": "^10.3.5", "@storybook/icons": "^2.0.1", + "@storybook/react": "^10.3.5", "@storybook/react-vite": "^10.3.5", + "@types/js-cookie": "^3.0.6", "@types/react": "^19.2.8", "@types/react-dom": "^19.2.3", "@vitejs/plugin-react": "^5.1.2", - "eslint": "^9.39.2", - "eslint-plugin-react-hooks": "^7.0.1", - "eslint-plugin-react-refresh": "^0.4.26", - "eslint-plugin-storybook": "^10.3.5", - "globals": "^17.0.0", - "msw": "^2.12.7", + "js-cookie": "^3.0.5", + "jwt-decode": "^4.0.0", "remark-gfm": "^4.0.1", "storybook": "^10.3.5", "typescript": "~5.9.3", - "typescript-eslint": "^8.53.0", "vite": "^7.3.1", "vite-tsconfig-paths": "^6.0.4" - }, - "eslintConfig": { - "extends": [ - "plugin:storybook/recommended" - ] } } \ No newline at end of file diff --git a/packages/document/public/mockServiceWorker.js b/packages/document/public/mockServiceWorker.js deleted file mode 100644 index 87e0f31b..00000000 --- a/packages/document/public/mockServiceWorker.js +++ /dev/null @@ -1,303 +0,0 @@ -/* eslint-disable */ -/* tslint:disable */ - -/** - * Mock Service Worker (1.2.1). - * @see https://github.com/mswjs/msw - * - Please do NOT modify this file. - * - Please do NOT serve this file on production. - */ - -const INTEGRITY_CHECKSUM = '3d6b9f06410d179a7f7404d4bf4c3c70' -const activeClientIds = new Set() - -self.addEventListener('install', function () { - self.skipWaiting() -}) - -self.addEventListener('activate', function (event) { - event.waitUntil(self.clients.claim()) -}) - -self.addEventListener('message', async function (event) { - const clientId = event.source.id - - if (!clientId || !self.clients) { - return - } - - const client = await self.clients.get(clientId) - - if (!client) { - return - } - - const allClients = await self.clients.matchAll({ - type: 'window', - }) - - switch (event.data) { - case 'KEEPALIVE_REQUEST': { - sendToClient(client, { - type: 'KEEPALIVE_RESPONSE', - }) - break - } - - case 'INTEGRITY_CHECK_REQUEST': { - sendToClient(client, { - type: 'INTEGRITY_CHECK_RESPONSE', - payload: INTEGRITY_CHECKSUM, - }) - break - } - - case 'MOCK_ACTIVATE': { - activeClientIds.add(clientId) - - sendToClient(client, { - type: 'MOCKING_ENABLED', - payload: true, - }) - break - } - - case 'MOCK_DEACTIVATE': { - activeClientIds.delete(clientId) - break - } - - case 'CLIENT_CLOSED': { - activeClientIds.delete(clientId) - - const remainingClients = allClients.filter((client) => { - return client.id !== clientId - }) - - // Unregister itself when there are no more clients - if (remainingClients.length === 0) { - self.registration.unregister() - } - - break - } - } -}) - -self.addEventListener('fetch', function (event) { - const { request } = event - const accept = request.headers.get('accept') || '' - - // Bypass server-sent events. - if (accept.includes('text/event-stream')) { - return - } - - // Bypass navigation requests. - if (request.mode === 'navigate') { - return - } - - // Opening the DevTools triggers the "only-if-cached" request - // that cannot be handled by the worker. Bypass such requests. - if (request.cache === 'only-if-cached' && request.mode !== 'same-origin') { - return - } - - // Bypass all requests when there are no active clients. - // Prevents the self-unregistered worked from handling requests - // after it's been deleted (still remains active until the next reload). - if (activeClientIds.size === 0) { - return - } - - // Generate unique request ID. - const requestId = Math.random().toString(16).slice(2) - - event.respondWith( - handleRequest(event, requestId).catch((error) => { - if (error.name === 'NetworkError') { - console.warn( - '[MSW] Successfully emulated a network error for the "%s %s" request.', - request.method, - request.url, - ) - return - } - - // At this point, any exception indicates an issue with the original request/response. - console.error( - `\ -[MSW] Caught an exception from the "%s %s" request (%s). This is probably not a problem with Mock Service Worker. There is likely an additional logging output above.`, - request.method, - request.url, - `${error.name}: ${error.message}`, - ) - }), - ) -}) - -async function handleRequest(event, requestId) { - const client = await resolveMainClient(event) - const response = await getResponse(event, client, requestId) - - // Send back the response clone for the "response:*" life-cycle events. - // Ensure MSW is active and ready to handle the message, otherwise - // this message will pend indefinitely. - if (client && activeClientIds.has(client.id)) { - ;(async function () { - const clonedResponse = response.clone() - sendToClient(client, { - type: 'RESPONSE', - payload: { - requestId, - type: clonedResponse.type, - ok: clonedResponse.ok, - status: clonedResponse.status, - statusText: clonedResponse.statusText, - body: - clonedResponse.body === null ? null : await clonedResponse.text(), - headers: Object.fromEntries(clonedResponse.headers.entries()), - redirected: clonedResponse.redirected, - }, - }) - })() - } - - return response -} - -// Resolve the main client for the given event. -// Client that issues a request doesn't necessarily equal the client -// that registered the worker. It's with the latter the worker should -// communicate with during the response resolving phase. -async function resolveMainClient(event) { - const client = await self.clients.get(event.clientId) - - if (client?.frameType === 'top-level') { - return client - } - - const allClients = await self.clients.matchAll({ - type: 'window', - }) - - return allClients - .filter((client) => { - // Get only those clients that are currently visible. - return client.visibilityState === 'visible' - }) - .find((client) => { - // Find the client ID that's recorded in the - // set of clients that have registered the worker. - return activeClientIds.has(client.id) - }) -} - -async function getResponse(event, client, requestId) { - const { request } = event - const clonedRequest = request.clone() - - function passthrough() { - // Clone the request because it might've been already used - // (i.e. its body has been read and sent to the client). - const headers = Object.fromEntries(clonedRequest.headers.entries()) - - // Remove MSW-specific request headers so the bypassed requests - // comply with the server's CORS preflight check. - // Operate with the headers as an object because request "Headers" - // are immutable. - delete headers['x-msw-bypass'] - - return fetch(clonedRequest, { headers }) - } - - // Bypass mocking when the client is not active. - if (!client) { - return passthrough() - } - - // Bypass initial page load requests (i.e. static assets). - // The absence of the immediate/parent client in the map of the active clients - // means that MSW hasn't dispatched the "MOCK_ACTIVATE" event yet - // and is not ready to handle requests. - if (!activeClientIds.has(client.id)) { - return passthrough() - } - - // Bypass requests with the explicit bypass header. - // Such requests can be issued by "ctx.fetch()". - if (request.headers.get('x-msw-bypass') === 'true') { - return passthrough() - } - - // Notify the client that a request has been intercepted. - const clientMessage = await sendToClient(client, { - type: 'REQUEST', - payload: { - id: requestId, - url: request.url, - method: request.method, - headers: Object.fromEntries(request.headers.entries()), - cache: request.cache, - mode: request.mode, - credentials: request.credentials, - destination: request.destination, - integrity: request.integrity, - redirect: request.redirect, - referrer: request.referrer, - referrerPolicy: request.referrerPolicy, - body: await request.text(), - bodyUsed: request.bodyUsed, - keepalive: request.keepalive, - }, - }) - - switch (clientMessage.type) { - case 'MOCK_RESPONSE': { - return respondWithMock(clientMessage.data) - } - - case 'MOCK_NOT_FOUND': { - return passthrough() - } - - case 'NETWORK_ERROR': { - const { name, message } = clientMessage.data - const networkError = new Error(message) - networkError.name = name - - // Rejecting a "respondWith" promise emulates a network error. - throw networkError - } - } - - return passthrough() -} - -function sendToClient(client, message) { - return new Promise((resolve, reject) => { - const channel = new MessageChannel() - - channel.port1.onmessage = (event) => { - if (event.data && event.data.error) { - return reject(event.data.error) - } - - resolve(event.data) - } - - client.postMessage(message, [channel.port2]) - }) -} - -function sleep(timeMs) { - return new Promise((resolve) => { - setTimeout(resolve, timeMs) - }) -} - -async function respondWithMock(response) { - await sleep(response.delay) - return new Response(response.body, response) -} diff --git a/packages/document/src/stories/_internals/CommerceLayer.tsx b/packages/document/src/stories/_internals/CommerceLayer.tsx index e4bed7a8..c947e1bd 100644 --- a/packages/document/src/stories/_internals/CommerceLayer.tsx +++ b/packages/document/src/stories/_internals/CommerceLayer.tsx @@ -1,7 +1,8 @@ -import { type DefaultChildrenType } from '#typings/globals' -import CommerceLayerComponent from '#components/auth/CommerceLayer' +import { CommerceLayer as CommerceLayerComponent } from '@commercelayer/react-components' import { useGetToken } from './useGetToken' +type DefaultChildrenType = JSX.Element[] | JSX.Element | null + interface Props { children: DefaultChildrenType accessToken: diff --git a/packages/document/src/stories/getting-started/006.core.mdx b/packages/document/src/stories/getting-started/006.core.mdx new file mode 100644 index 00000000..9204c811 --- /dev/null +++ b/packages/document/src/stories/getting-started/006.core.mdx @@ -0,0 +1,136 @@ +import { Meta, Source } from '@storybook/addon-docs/blocks'; + + + +# Core package + +The `@commercelayer/core` package is a collection of **low-level async functions** that wrap the [Commerce Layer SDK](https://github.com/commercelayer/commercelayer-sdk). + +It is the foundation layer used internally by the `@commercelayer/hooks` package and by the React components. You can use it directly if you need to fetch or mutate Commerce Layer resources outside of a React component. + + +This package has no React dependency — it can be used in any JavaScript/TypeScript environment (Node.js, edge functions, plain scripts, etc.). + + +## Installation + +The package is published to npm as part of this monorepo and listed as a workspace dependency. To install it in a standalone project: + + + +## All exports + +| Function | Description | +|---|---| +| `getAccessToken` | Retrieve an OAuth access token via `@commercelayer/js-auth` | +| `getSkus` | Fetch a paginated list of SKUs | +| `retrieveSku` | Fetch a single SKU by ID | +| `updateSku` | Update a single SKU by ID | +| `getPrices` | Fetch a paginated list of prices | +| `retrievePrice` | Fetch a single price by ID | +| `updatePrice` | Update a single price | +| `getSkuAvailability` | Fetch availability for a given SKU code or ID | +| `getSkuLists` | Fetch a paginated list of SKU lists | +| `retrieveSkuList` | Fetch a single SKU list by ID (with optional includes) | + +## Function signature + +Every function follows the same pattern: + + + +The first argument is always an object with: + +| Property | Type | Required | Description | +|---|---|---|---| +| `accessToken` | `string` | ✅ | Commerce Layer API access token | +| `params` | `QueryParamsList` or `QueryParamsRetrieve` | ❌ | Optional SDK query params (filters, fields, include, pagination) | +| `options` | `ResourcesConfig` | ❌ | Optional SDK request configuration | + +## Examples + +### Authentication + + + +### Fetch a filtered list of SKUs + + + +### Retrieve a SKU list with included SKUs + + diff --git a/packages/document/src/stories/getting-started/007.hooks.mdx b/packages/document/src/stories/getting-started/007.hooks.mdx new file mode 100644 index 00000000..e6b2331d --- /dev/null +++ b/packages/document/src/stories/getting-started/007.hooks.mdx @@ -0,0 +1,171 @@ +import { Meta, Source } from '@storybook/addon-docs/blocks'; + + + +# Hooks package + +The `@commercelayer/hooks` package provides **SWR-based React hooks** built on top of the `@commercelayer/core` package. + +These hooks handle caching, deduplication, loading states, and error handling automatically. They are used internally by the React components in this library and are available for direct use if you want to build custom UI on top of Commerce Layer data. + + +This package requires React 18+ and depends on `swr` for data fetching and caching. + + +## Installation + + + +## All exports + +| Hook | Description | +|---|---| +| `useSkus` | Fetch, retrieve, and update SKUs | +| `usePrices` | Fetch, retrieve, and update prices | +| `useSkuLists` | Fetch and retrieve SKU lists | +| `useAvailability` | Fetch availability for a SKU code or ID | + +## Return shape + +Every hook returns a consistent object shape: + +| Property | Type | Description | +|---|---|---| +| `data` (e.g. `skus`, `prices`) | `Resource[]` | The fetched list of resources. Empty array until loaded. | +| `isLoading` | `boolean` | `true` while the first fetch is in-flight | +| `isValidating` | `boolean` | `true` during any background revalidation | +| `error` | `string \| null` | Error message if the last request failed | +| `fetchXxx` | `(params?) => void` | Triggers the list fetch. Calling it again with new params re-fetches. | +| `retrieveXxx` | `(id) => Promise` | Fetches a single resource by ID | +| `updateXxx` | `(resource) => Promise` | Mutates a resource and updates the local cache | +| `clearXxx` | `() => void` | Resets the cache and stops auto-revalidation | +| `mutate` | `KeyedMutator` | Direct access to the underlying SWR mutate function | + +## Caching behaviour + +All hooks use [SWR](https://swr.vercel.app/) with `revalidateOnFocus: false` and `revalidateOnReconnect: false` by default. This means: + +- Data is cached per `[resource, action, accessToken, params]` key +- A second call with the same arguments is a no-op (served from cache) +- Calling `fetchXxx` with different params triggers a new request + +## Examples + +### useSkus — fetch and render a filtered list + + { + fetchSkus({ + filters: { code_in: 'TSHIRTWS000000FFFFFFLXXX,TSHIRTWKFFFFFF000000MXXX' }, + fields: { skus: ['name', 'code', 'image_url'] }, + }) + }, []) + + if (isLoading) return

Loading…

+ + return ( +
    + {skus.map((sku) => ( +
  • {sku.name} — {sku.code}
  • + ))} +
+ ) +} +`} +/> + +### useSkuLists — retrieve a SKU list with included SKUs + + { + retrieveSkuList('yZjQIDxrly', { + include: ['skus'], + fields: { skus: ['name', 'code'] }, + }).then((list) => setSkus(list?.skus ?? [])) + }, []) + + return ( +
    + {skus.map((sku) => ( +
  • {sku.name}
  • + ))} +
+ ) +} +`} +/> + +### usePrices — fetch prices for a set of SKU codes + + { + fetchPrices({ filters: { sku_code_in: 'TSHIRTWS000000FFFFFFLXXX' } }) + }, []) + + if (isLoading) return

Loading…

+ + return ( +
    + {prices.map((price) => ( +
  • {price.sku_code} — {price.formatted_amount}
  • + ))} +
+ ) +} +`} +/> + +### useAvailability — check stock for a SKU + + { + fetchAvailability({ skuCode }) + }, [skuCode]) + + if (isLoading) return null + + return {quantity != null && quantity > 0 ? 'In stock' : 'Out of stock'} +} +`} +/> diff --git a/packages/document/src/stories/skus/001.skus.mdx b/packages/document/src/stories/skus/001.skus.mdx index 1dcdf880..18cb2c0d 100644 --- a/packages/document/src/stories/skus/001.skus.mdx +++ b/packages/document/src/stories/skus/001.skus.mdx @@ -39,7 +39,7 @@ Must be a child of the `` component. import { CommerceLayer, SkusContainer } from '@commercelayer/react-components' - + {/* goes here */} @@ -65,7 +65,7 @@ Must be a child of the `` component. language="jsx" dark code={` - + {/* rendered once per SKU */} @@ -109,7 +109,7 @@ import { } from '@commercelayer/react-components' - + @@ -184,7 +184,7 @@ import { - + diff --git a/packages/document/src/stories/skus/skus.stories.tsx b/packages/document/src/stories/skus/skus.stories.tsx index 4a086266..9d37ffc7 100644 --- a/packages/document/src/stories/skus/skus.stories.tsx +++ b/packages/document/src/stories/skus/skus.stories.tsx @@ -1,17 +1,17 @@ -import type { Meta, StoryObj } from '@storybook/react-vite' -import CommerceLayer from '../_internals/CommerceLayer' +import type { Meta, StoryObj } from "@storybook/react-vite" +import CommerceLayer from "../_internals/CommerceLayer" import { SkuField, SkuList, SkuListsContainer, Skus, SkusContainer, -} from '@commercelayer/react-components' +} from "@commercelayer/react-components" const meta = { - title: 'Skus/Stories', + title: "Skus/Stories", parameters: { - layout: 'centered', + layout: "centered", }, } satisfies Meta @@ -19,10 +19,12 @@ export default meta type Story = StoryObj export const SkusContainerStory: Story = { - name: 'SkusContainer — name and code', + name: "SkusContainer — name and code", render: () => ( - +
@@ -35,11 +37,11 @@ export const SkusContainerStory: Story = { } export const SkuListsContainerStory: Story = { - name: 'SkuListsContainer — list items', + name: "SkuListsContainer — list items", render: () => ( - - + +
@@ -53,17 +55,17 @@ export const SkuListsContainerStory: Story = { } export const SkuFieldImageStory: Story = { - name: 'SkuField — image', + name: "SkuField — image", render: () => ( - + diff --git a/packages/react-components/src/components/skus/SkuList.tsx b/packages/react-components/src/components/skus/SkuList.tsx index 3b7bdc81..ef1c2bd8 100644 --- a/packages/react-components/src/components/skus/SkuList.tsx +++ b/packages/react-components/src/components/skus/SkuList.tsx @@ -1,4 +1,5 @@ -import { type JSX, type ReactNode, useContext, useEffect } from "react" +import { type JSX, type ReactNode, useContext, useEffect, useMemo } from "react" +import SkuContext from "#context/SkuContext" import SkuListsContext from "#context/SkuListsContext" interface Props { @@ -11,11 +12,30 @@ interface Props { export function SkuList(props: Props): JSX.Element { const { id, children } = props - const { registerListId } = useContext(SkuListsContext) + const { registerListId, skuLists } = useContext(SkuListsContext) + useEffect(() => { registerListId(id) }, [id, registerListId]) - return <>{children} + + // Bridge the fetched skus for this list into SkuContext so that + // and work the same way they do under . + // skuLists[id] is undefined while loading, an array once fetched. + const skusForList = skuLists[id] + const skuContextValue = useMemo( + () => ({ + skus: skusForList ?? [], + loading: skusForList === undefined, + skuCodes: (skusForList ?? []).map((s) => s.code ?? ""), + }), + [skusForList], + ) + + return ( + + {children} + + ) } export default SkuList diff --git a/packages/react-components/src/components/skus/SkuListsContainer.tsx b/packages/react-components/src/components/skus/SkuListsContainer.tsx index ab2bfee5..0a89e412 100644 --- a/packages/react-components/src/components/skus/SkuListsContainer.tsx +++ b/packages/react-components/src/components/skus/SkuListsContainer.tsx @@ -1,5 +1,5 @@ import { useSkuLists } from "@commercelayer/hooks" -import type { Sku } from "@commercelayer/sdk" +import type { QueryParamsRetrieve, Sku, SkuList } from "@commercelayer/sdk" import { type JSX, type ReactNode, @@ -16,10 +16,16 @@ import SkuListsContext, { interface Props { children: ReactNode + /** + * Optional query parameters forwarded to each SKU list retrieval call. + * `include: ["skus"]` is always enforced; any `include` entries here are merged. + * Use `fields.skus` to request additional SKU attributes (default is `["code"]`). + */ + params?: QueryParamsRetrieve } export function SkuListsContainer(props: Props): JSX.Element { - const { children } = props + const { children, params } = props const config = useContext(CommerceLayerContext) const { retrieveSkuList } = useSkuLists(config.accessToken ?? "") const [registeredIds, setRegisteredIds] = useState([]) @@ -31,12 +37,21 @@ export function SkuListsContainer(props: Props): JSX.Element { useEffect(() => { if (config.accessToken != null && registeredIds.length > 0) { + const mergedParams: QueryParamsRetrieve = { + ...params, + // Always include skus relationship; merge with any caller-supplied includes. + include: [...new Set([...(params?.include ?? []), "skus"])], + fields: { + skus: ["code"], + ...params?.fields, + }, + } void Promise.all( registeredIds.map((id) => - retrieveSkuList(id, { - include: ["skus"], - fields: { skus: ["code"] }, - }).then((skuList) => ({ id, skus: (skuList?.skus ?? []) as Sku[] })), + retrieveSkuList(id, mergedParams).then((skuList) => ({ + id, + skus: (skuList?.skus ?? []) as Sku[], + })), ), ).then((results) => { const updated: Record = {} @@ -46,7 +61,7 @@ export function SkuListsContainer(props: Props): JSX.Element { setSkuLists(updated) }) } - }, [config.accessToken, registeredIds, retrieveSkuList]) + }, [config.accessToken, registeredIds, retrieveSkuList, params]) const contextValue = useMemo( () => ({ listIds: registeredIds, skuLists, registerListId }), diff --git a/packages/react-components/src/context/SkuContext.ts b/packages/react-components/src/context/SkuContext.ts index 84a52db7..e72ac9be 100644 --- a/packages/react-components/src/context/SkuContext.ts +++ b/packages/react-components/src/context/SkuContext.ts @@ -1,7 +1,11 @@ -import type { SkuState } from '#reducers/SkuReducer' +import type { Sku } from '@commercelayer/sdk' import { createContext } from 'react' -export type SkuContextValue = SkuState +export type SkuContextValue = Partial<{ + skus: Sku[] + loading: boolean + skuCodes: string[] +}> const SkuContext = createContext({}) diff --git a/packages/react-components/src/reducers/SkuListsReducer.ts b/packages/react-components/src/reducers/SkuListsReducer.ts deleted file mode 100644 index e7e4d4b8..00000000 --- a/packages/react-components/src/reducers/SkuListsReducer.ts +++ /dev/null @@ -1,65 +0,0 @@ -import baseReducer from '#utils/baseReducer' -import type { Dispatch } from 'react' -import type { CommerceLayerConfig } from '#context/CommerceLayerContext' -import getSdk from '#utils/getSdk' - -type SkuListsActionType = 'getSkuList' | 'setSkuList' - -const actionType: SkuListsActionType[] = ['getSkuList', 'setSkuList'] - -export type SkuListsState = Partial<{ - listIds: string[] - skuLists: Record -}> - -export const skuListsInitialState: SkuListsState = { - listIds: [] -} - -export interface SkuListsAction { - payload: Partial - type: SkuListsActionType -} - -export type GetSkuList = (params: { - config: CommerceLayerConfig - dispatch: Dispatch - listIds: string[] - state: SkuListsState -}) => Promise - -export const getSkuList: GetSkuList = async ({ listIds, config, dispatch }) => { - const skuLists: Record = {} - try { - const sdk = getSdk(config) - // eslint-disable-next-line @typescript-eslint/no-misused-promises - listIds.forEach(async (id) => { - const skuList = await sdk.sku_lists.retrieve(id, { - include: ['skus'], - fields: { skus: ['code'] } - }) - const skuCodes = skuList.skus - skuLists[id] = skuCodes - }) - dispatch({ - payload: { - skuLists - }, - type: 'getSkuList' - }) - } catch (error: any) { - console.error(error) - } -} - -const skuListsReducer = ( - state: SkuListsState, - reducer: SkuListsAction -): SkuListsState => - baseReducer( - state, - reducer, - actionType - ) - -export default skuListsReducer diff --git a/packages/react-components/src/reducers/SkuReducer.ts b/packages/react-components/src/reducers/SkuReducer.ts deleted file mode 100644 index 5918c5a3..00000000 --- a/packages/react-components/src/reducers/SkuReducer.ts +++ /dev/null @@ -1,7 +0,0 @@ -import type { Sku } from '@commercelayer/sdk' - -export type SkuState = Partial<{ - skus: Sku[] - loading: boolean - skuCodes: string[] -}> diff --git a/packages/react-components/src/utils/getSkus.ts b/packages/react-components/src/utils/getSkus.ts deleted file mode 100644 index 03879be3..00000000 --- a/packages/react-components/src/utils/getSkus.ts +++ /dev/null @@ -1,13 +0,0 @@ -import type { Sku } from '@commercelayer/sdk' - -const getSkus = (skus: Sku[], sortBy: string[]): Record => { - const obj: Record = {} - sortBy.forEach((sku) => { - skus.forEach((o) => { - if (o?.code === sku) obj[o.code] = o - }) - }) - return obj -} - -export default getSkus diff --git a/pnpm-lock.yaml b/pnpm-lock.yaml index 87677ebd..a425c537 100644 --- a/pnpm-lock.yaml +++ b/pnpm-lock.yaml @@ -31,7 +31,7 @@ importers: version: 9.1.7 lerna: specifier: ^9.0.7 - version: 9.0.7(@types/node@25.0.8) + version: 9.0.7(@types/node@25.5.2) typescript: specifier: ^5.9.3 version: 5.9.3 @@ -50,7 +50,7 @@ importers: version: 0.18.2 '@vitest/coverage-v8': specifier: ^4.1.0 - version: 4.1.2(vitest@4.1.2(@types/node@25.0.8)(jsdom@27.4.0)(msw@2.12.7(@types/node@25.0.8)(typescript@5.9.3))(vite@7.3.1(@types/node@25.0.8)(terser@5.44.0)(yaml@2.7.0))) + version: 4.1.2(vitest@4.1.2(@types/node@25.5.2)(jsdom@27.4.0)(msw@2.12.7(@types/node@25.5.2)(typescript@5.9.3))(vite@7.3.1(@types/node@25.5.2)(terser@5.46.1)(yaml@2.7.0))) tsup: specifier: ^8.5.1 version: 8.5.1(postcss@8.5.6)(typescript@5.9.3)(yaml@2.7.0) @@ -59,10 +59,10 @@ importers: version: 5.9.3 vite-tsconfig-paths: specifier: ^6.1.1 - version: 6.1.1(typescript@5.9.3)(vite@7.3.1(@types/node@25.0.8)(terser@5.44.0)(yaml@2.7.0)) + version: 6.1.1(typescript@5.9.3)(vite@7.3.1(@types/node@25.5.2)(terser@5.46.1)(yaml@2.7.0)) vitest: specifier: ^4.1.0 - version: 4.1.2(@types/node@25.0.8)(jsdom@27.4.0)(msw@2.12.7(@types/node@25.0.8)(typescript@5.9.3))(vite@7.3.1(@types/node@25.0.8)(terser@5.44.0)(yaml@2.7.0)) + version: 4.1.2(@types/node@25.5.2)(jsdom@27.4.0)(msw@2.12.7(@types/node@25.5.2)(typescript@5.9.3))(vite@7.3.1(@types/node@25.5.2)(terser@5.46.1)(yaml@2.7.0)) packages/docs: devDependencies: @@ -89,7 +89,7 @@ importers: version: 9.0.8 '@storybook/addon-docs': specifier: ^10.1.11 - version: 10.1.11(@types/react@19.2.8)(esbuild@0.25.12)(rollup@4.60.0)(storybook@10.3.3(@testing-library/dom@10.4.1)(prettier@2.8.8)(react-dom@19.2.3(react@19.2.3))(react@19.2.3))(vite@7.3.1(@types/node@25.0.8)(terser@5.44.0)(yaml@2.7.0))(webpack@5.98.0(esbuild@0.25.12)) + version: 10.1.11(@types/react@19.2.8)(esbuild@0.25.12)(rollup@4.60.0)(storybook@10.3.3(@testing-library/dom@10.4.1)(prettier@2.8.8)(react-dom@19.2.3(react@19.2.3))(react@19.2.3))(vite@7.3.1(@types/node@25.5.2)(terser@5.46.1)(yaml@2.7.0))(webpack@5.98.0(esbuild@0.25.12)) '@storybook/addon-essentials': specifier: ^8.6.14 version: 8.6.14(@types/react@19.2.8)(storybook@10.3.3(@testing-library/dom@10.4.1)(prettier@2.8.8)(react-dom@19.2.3(react@19.2.3))(react@19.2.3)) @@ -134,7 +134,7 @@ importers: version: 10.1.11(react-dom@19.2.3(react@19.2.3))(react@19.2.3)(storybook@10.3.3(@testing-library/dom@10.4.1)(prettier@2.8.8)(react-dom@19.2.3(react@19.2.3))(react@19.2.3))(typescript@5.9.3) '@storybook/react-vite': specifier: ^10.1.11 - version: 10.1.11(esbuild@0.25.12)(msw@2.12.7(@types/node@25.0.8)(typescript@5.9.3))(react-dom@19.2.3(react@19.2.3))(react@19.2.3)(rollup@4.60.0)(storybook@10.3.3(@testing-library/dom@10.4.1)(prettier@2.8.8)(react-dom@19.2.3(react@19.2.3))(react@19.2.3))(typescript@5.9.3)(vite@7.3.1(@types/node@25.0.8)(terser@5.44.0)(yaml@2.7.0))(webpack@5.98.0(esbuild@0.25.12)) + version: 10.1.11(esbuild@0.25.12)(msw@2.12.7(@types/node@25.5.2)(typescript@5.9.3))(react-dom@19.2.3(react@19.2.3))(react@19.2.3)(rollup@4.60.0)(storybook@10.3.3(@testing-library/dom@10.4.1)(prettier@2.8.8)(react-dom@19.2.3(react@19.2.3))(react@19.2.3))(typescript@5.9.3)(vite@7.3.1(@types/node@25.5.2)(terser@5.46.1)(yaml@2.7.0))(webpack@5.98.0(esbuild@0.25.12)) '@storybook/testing-library': specifier: ^0.2.2 version: 0.2.2 @@ -149,7 +149,7 @@ importers: version: 19.2.8 '@vitejs/plugin-react': specifier: ^5.1.2 - version: 5.1.2(vite@7.3.1(@types/node@25.0.8)(terser@5.44.0)(yaml@2.7.0)) + version: 5.1.2(vite@7.3.1(@types/node@25.5.2)(terser@5.46.1)(yaml@2.7.0)) babel-loader: specifier: ^10.0.0 version: 10.0.0(@babel/core@7.28.6)(webpack@5.98.0(esbuild@0.25.12)) @@ -161,7 +161,7 @@ importers: version: 4.0.0 msw: specifier: ^2.12.7 - version: 2.12.7(@types/node@25.0.8)(typescript@5.9.3) + version: 2.12.7(@types/node@25.5.2)(typescript@5.9.3) prop-types: specifier: ^15.8.1 version: 15.8.1 @@ -182,25 +182,16 @@ importers: version: 5.9.3 vite: specifier: ^7.3.1 - version: 7.3.1(@types/node@25.0.8)(terser@5.44.0)(yaml@2.7.0) + version: 7.3.1(@types/node@25.5.2)(terser@5.46.1)(yaml@2.7.0) vite-tsconfig-paths: specifier: ^6.0.4 - version: 6.0.4(typescript@5.9.3)(vite@7.3.1(@types/node@25.0.8)(terser@5.44.0)(yaml@2.7.0)) + version: 6.0.4(typescript@5.9.3)(vite@7.3.1(@types/node@25.5.2)(terser@5.46.1)(yaml@2.7.0)) packages/document: dependencies: - '@commercelayer/js-auth': - specifier: ^7.1.2 - version: 7.3.0 '@commercelayer/react-components': specifier: workspace:* version: link:../react-components - js-cookie: - specifier: ^3.0.5 - version: 3.0.5 - jwt-decode: - specifier: ^4.0.0 - version: 4.0.0 react: specifier: ^19.2.3 version: 19.2.3 @@ -211,27 +202,30 @@ importers: '@chromatic-com/storybook': specifier: ^5.1.1 version: 5.1.1(storybook@10.3.5(@testing-library/dom@10.4.1)(prettier@2.8.8)(react-dom@19.2.3(react@19.2.3))(react@19.2.3)) - '@eslint/js': - specifier: ^9.39.2 - version: 9.39.2 + '@commercelayer/js-auth': + specifier: ^7.3.0 + version: 7.3.0 '@storybook/addon-docs': specifier: ^10.3.5 - version: 10.3.5(@types/react@19.2.8)(esbuild@0.25.12)(rollup@4.60.0)(storybook@10.3.5(@testing-library/dom@10.4.1)(prettier@2.8.8)(react-dom@19.2.3(react@19.2.3))(react@19.2.3))(vite@7.3.1(@types/node@25.0.8)(terser@5.44.0)(yaml@2.7.0))(webpack@5.98.0(esbuild@0.25.12)) + version: 10.3.5(@types/react@19.2.8)(esbuild@0.25.12)(rollup@4.60.0)(storybook@10.3.5(@testing-library/dom@10.4.1)(prettier@2.8.8)(react-dom@19.2.3(react@19.2.3))(react@19.2.3))(vite@7.3.1(@types/node@25.5.2)(terser@5.46.1)(yaml@2.7.0))(webpack@5.98.0(esbuild@0.25.12)) '@storybook/addon-links': specifier: ^10.3.5 version: 10.3.5(react@19.2.3)(storybook@10.3.5(@testing-library/dom@10.4.1)(prettier@2.8.8)(react-dom@19.2.3(react@19.2.3))(react@19.2.3)) '@storybook/addon-mcp': - specifier: ^0.4.2 - version: 0.4.2(storybook@10.3.5(@testing-library/dom@10.4.1)(prettier@2.8.8)(react-dom@19.2.3(react@19.2.3))(react@19.2.3))(typescript@5.9.3) + specifier: ^0.5.0 + version: 0.5.0(storybook@10.3.5(@testing-library/dom@10.4.1)(prettier@2.8.8)(react-dom@19.2.3(react@19.2.3))(react@19.2.3))(typescript@5.9.3) '@storybook/addon-onboarding': specifier: ^10.3.5 version: 10.3.5(storybook@10.3.5(@testing-library/dom@10.4.1)(prettier@2.8.8)(react-dom@19.2.3(react@19.2.3))(react@19.2.3)) '@storybook/icons': specifier: ^2.0.1 version: 2.0.1(react-dom@19.2.3(react@19.2.3))(react@19.2.3) + '@storybook/react': + specifier: ^10.3.5 + version: 10.3.5(react-dom@19.2.3(react@19.2.3))(react@19.2.3)(storybook@10.3.5(@testing-library/dom@10.4.1)(prettier@2.8.8)(react-dom@19.2.3(react@19.2.3))(react@19.2.3))(typescript@5.9.3) '@storybook/react-vite': specifier: ^10.3.5 - version: 10.3.5(esbuild@0.25.12)(react-dom@19.2.3(react@19.2.3))(react@19.2.3)(rollup@4.60.0)(storybook@10.3.5(@testing-library/dom@10.4.1)(prettier@2.8.8)(react-dom@19.2.3(react@19.2.3))(react@19.2.3))(typescript@5.9.3)(vite@7.3.1(@types/node@25.0.8)(terser@5.44.0)(yaml@2.7.0))(webpack@5.98.0(esbuild@0.25.12)) + version: 10.3.5(esbuild@0.25.12)(react-dom@19.2.3(react@19.2.3))(react@19.2.3)(rollup@4.60.0)(storybook@10.3.5(@testing-library/dom@10.4.1)(prettier@2.8.8)(react-dom@19.2.3(react@19.2.3))(react@19.2.3))(typescript@5.9.3)(vite@7.3.1(@types/node@25.5.2)(terser@5.46.1)(yaml@2.7.0))(webpack@5.98.0(esbuild@0.25.12)) '@types/js-cookie': specifier: ^3.0.6 version: 3.0.6 @@ -243,25 +237,13 @@ importers: version: 19.2.3(@types/react@19.2.8) '@vitejs/plugin-react': specifier: ^5.1.2 - version: 5.1.2(vite@7.3.1(@types/node@25.0.8)(terser@5.44.0)(yaml@2.7.0)) - eslint: - specifier: ^9.39.2 - version: 9.39.2 - eslint-plugin-react-hooks: - specifier: ^7.0.1 - version: 7.0.1(eslint@9.39.2) - eslint-plugin-react-refresh: - specifier: ^0.4.26 - version: 0.4.26(eslint@9.39.2) - eslint-plugin-storybook: - specifier: ^10.3.5 - version: 10.3.5(eslint@9.39.2)(storybook@10.3.5(@testing-library/dom@10.4.1)(prettier@2.8.8)(react-dom@19.2.3(react@19.2.3))(react@19.2.3))(typescript@5.9.3) - globals: - specifier: ^17.0.0 - version: 17.0.0 - msw: - specifier: ^2.12.7 - version: 2.12.7(@types/node@25.0.8)(typescript@5.9.3) + version: 5.1.2(vite@7.3.1(@types/node@25.5.2)(terser@5.46.1)(yaml@2.7.0)) + js-cookie: + specifier: ^3.0.5 + version: 3.0.5 + jwt-decode: + specifier: ^4.0.0 + version: 4.0.0 remark-gfm: specifier: ^4.0.1 version: 4.0.1 @@ -271,15 +253,12 @@ importers: typescript: specifier: ~5.9.3 version: 5.9.3 - typescript-eslint: - specifier: ^8.53.0 - version: 8.53.0(eslint@9.39.2)(typescript@5.9.3) vite: specifier: ^7.3.1 - version: 7.3.1(@types/node@25.0.8)(terser@5.44.0)(yaml@2.7.0) + version: 7.3.1(@types/node@25.5.2)(terser@5.46.1)(yaml@2.7.0) vite-tsconfig-paths: specifier: ^6.0.4 - version: 6.0.4(typescript@5.9.3)(vite@7.3.1(@types/node@25.0.8)(terser@5.44.0)(yaml@2.7.0)) + version: 6.0.4(typescript@5.9.3)(vite@7.3.1(@types/node@25.5.2)(terser@5.46.1)(yaml@2.7.0)) packages/hooks: dependencies: @@ -310,7 +289,7 @@ importers: version: 19.2.3(@types/react@19.2.14) '@vitest/coverage-v8': specifier: ^4.1.0 - version: 4.1.2(vitest@4.1.2(@types/node@25.0.8)(jsdom@27.4.0)(msw@2.12.7(@types/node@25.0.8)(typescript@5.9.3))(vite@7.3.1(@types/node@25.0.8)(terser@5.44.0)(yaml@2.7.0))) + version: 4.1.2(vitest@4.1.2(@types/node@25.5.2)(jsdom@27.4.0)(msw@2.12.7(@types/node@25.5.2)(typescript@5.9.3))(vite@7.3.1(@types/node@25.5.2)(terser@5.46.1)(yaml@2.7.0))) babel-plugin-react-compiler: specifier: ^1.0.0 version: 1.0.0 @@ -328,10 +307,10 @@ importers: version: 5.9.3 vite-tsconfig-paths: specifier: ^6.1.1 - version: 6.1.1(typescript@5.9.3)(vite@7.3.1(@types/node@25.0.8)(terser@5.44.0)(yaml@2.7.0)) + version: 6.1.1(typescript@5.9.3)(vite@7.3.1(@types/node@25.5.2)(terser@5.46.1)(yaml@2.7.0)) vitest: specifier: ^4.1.0 - version: 4.1.2(@types/node@25.0.8)(jsdom@27.4.0)(msw@2.12.7(@types/node@25.0.8)(typescript@5.9.3))(vite@7.3.1(@types/node@25.0.8)(terser@5.44.0)(yaml@2.7.0)) + version: 4.1.2(@types/node@25.5.2)(jsdom@27.4.0)(msw@2.12.7(@types/node@25.5.2)(typescript@5.9.3))(vite@7.3.1(@types/node@25.5.2)(terser@5.46.1)(yaml@2.7.0)) packages/react-components: dependencies: @@ -416,10 +395,10 @@ importers: version: 2.0.0(react-dom@19.2.4(react@19.2.4))(react@19.2.4) '@vitejs/plugin-react': specifier: ^5.1.2 - version: 5.1.2(vite@7.3.1(@types/node@25.0.8)(terser@5.44.0)(yaml@2.7.0)) + version: 5.1.2(vite@7.3.1(@types/node@25.0.8)(terser@5.46.1)(yaml@2.7.0)) '@vitest/coverage-v8': specifier: ^4.1.0 - version: 4.1.2(vitest@4.1.2(@types/node@25.0.8)(jsdom@27.4.0)(msw@2.12.7(@types/node@25.0.8)(typescript@5.9.3))(vite@7.3.1(@types/node@25.0.8)(terser@5.44.0)(yaml@2.7.0))) + version: 4.1.2(vitest@4.1.2(@types/node@25.0.8)(jsdom@27.4.0)(msw@2.12.7(@types/node@25.0.8)(typescript@5.9.3))(vite@7.3.1(@types/node@25.0.8)(terser@5.46.1)(yaml@2.7.0))) babel-plugin-react-compiler: specifier: ^1.0.0 version: 1.0.0 @@ -452,13 +431,13 @@ importers: version: 5.9.3 vite: specifier: ^7.3.1 - version: 7.3.1(@types/node@25.0.8)(terser@5.44.0)(yaml@2.7.0) + version: 7.3.1(@types/node@25.0.8)(terser@5.46.1)(yaml@2.7.0) vite-tsconfig-paths: specifier: ^6.0.3 - version: 6.0.4(typescript@5.9.3)(vite@7.3.1(@types/node@25.0.8)(terser@5.44.0)(yaml@2.7.0)) + version: 6.0.4(typescript@5.9.3)(vite@7.3.1(@types/node@25.0.8)(terser@5.46.1)(yaml@2.7.0)) vitest: specifier: ^4.1.0 - version: 4.1.2(@types/node@25.0.8)(jsdom@27.4.0)(msw@2.12.7(@types/node@25.0.8)(typescript@5.9.3))(vite@7.3.1(@types/node@25.0.8)(terser@5.44.0)(yaml@2.7.0)) + version: 4.1.2(@types/node@25.0.8)(jsdom@27.4.0)(msw@2.12.7(@types/node@25.0.8)(typescript@5.9.3))(vite@7.3.1(@types/node@25.0.8)(terser@5.46.1)(yaml@2.7.0)) packages: @@ -1559,50 +1538,6 @@ packages: cpu: [x64] os: [win32] - '@eslint-community/eslint-utils@4.9.0': - resolution: {integrity: sha512-ayVFHdtZ+hsq1t2Dy24wCmGXGe4q9Gu3smhLYALJrr473ZH27MsnSL+LKUlimp4BWJqMDMLmPpx/Q9R3OAlL4g==} - engines: {node: ^12.22.0 || ^14.17.0 || >=16.0.0} - peerDependencies: - eslint: ^6.0.0 || ^7.0.0 || >=8.0.0 - - '@eslint-community/eslint-utils@4.9.1': - resolution: {integrity: sha512-phrYmNiYppR7znFEdqgfWHXR6NCkZEK7hwWDHZUjit/2/U0r6XvkDl0SYnoM51Hq7FhCGdLDT6zxCCOY1hexsQ==} - engines: {node: ^12.22.0 || ^14.17.0 || >=16.0.0} - peerDependencies: - eslint: ^6.0.0 || ^7.0.0 || >=8.0.0 - - '@eslint-community/regexpp@4.12.2': - resolution: {integrity: sha512-EriSTlt5OC9/7SXkRSCAhfSxxoSUgBm33OH+IkwbdpgoqsSsUg7y3uh+IICI/Qg4BBWr3U2i39RpmycbxMq4ew==} - engines: {node: ^12.0.0 || ^14.0.0 || >=16.0.0} - - '@eslint/config-array@0.21.1': - resolution: {integrity: sha512-aw1gNayWpdI/jSYVgzN5pL0cfzU02GT3NBpeT/DXbx1/1x7ZKxFPd9bwrzygx/qiwIQiJ1sw/zD8qY/kRvlGHA==} - engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0} - - '@eslint/config-helpers@0.4.2': - resolution: {integrity: sha512-gBrxN88gOIf3R7ja5K9slwNayVcZgK6SOUORm2uBzTeIEfeVaIhOpCtTox3P6R7o2jLFwLFTLnC7kU/RGcYEgw==} - engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0} - - '@eslint/core@0.17.0': - resolution: {integrity: sha512-yL/sLrpmtDaFEiUj1osRP4TI2MDz1AddJL+jZ7KSqvBuliN4xqYY54IfdN8qD8Toa6g1iloph1fxQNkjOxrrpQ==} - engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0} - - '@eslint/eslintrc@3.3.3': - resolution: {integrity: sha512-Kr+LPIUVKz2qkx1HAMH8q1q6azbqBAsXJUxBl/ODDuVPX45Z9DfwB8tPjTi6nNZ8BuM3nbJxC5zCAg5elnBUTQ==} - engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0} - - '@eslint/js@9.39.2': - resolution: {integrity: sha512-q1mjIoW1VX4IvSocvM/vbTiveKC4k9eLrajNEuSsmjymSDEbpGddtpfOoN7YGAqBK3NG+uqo8ia4PDTt8buCYA==} - engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0} - - '@eslint/object-schema@2.1.7': - resolution: {integrity: sha512-VtAOaymWVfZcmZbp6E2mympDIHvyjXs/12LqWYjVw6qjrfF+VK+fyG33kChz3nnK+SU5/NeHOqrTEHS8sXO3OA==} - engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0} - - '@eslint/plugin-kit@0.4.1': - resolution: {integrity: sha512-43/qtrDUokr7LJqoF2c3+RInu/t4zfrpYdoSDfYyhg52rwLV6TnOvdG4fXm7IkSB3wErkcmJS9iEhjVtOSEjjA==} - engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0} - '@exodus/bytes@1.8.0': resolution: {integrity: sha512-8JPn18Bcp8Uo1T82gR8lh2guEOa5KKU/IEKvvdp0sgmi7coPBWf1Doi1EXsGZb2ehc8ym/StJCjffYV+ne7sXQ==} engines: {node: ^20.19.0 || ^22.12.0 || >=24.0.0} @@ -1616,22 +1551,6 @@ packages: resolution: {integrity: sha512-rTXwAsIxpCqzUnZvrxVh3L0QA0NzToqWBLAhV+zDV3MIIwiQhAZHMdPCIaj5n/yADu/tyk12wIPgL6YHGXJP+g==} engines: {node: ^20.19.0 || ^22.13.0 || ^23.5.0 || >=24.0.0, npm: '>=10'} - '@humanfs/core@0.19.1': - resolution: {integrity: sha512-5DyQ4+1JEUzejeK1JGICcideyfUbGixgS9jNgex5nqkW+cY7WZhxBigmieN5Qnw9ZosSNVC9KQKyb+GUaGyKUA==} - engines: {node: '>=18.18.0'} - - '@humanfs/node@0.16.7': - resolution: {integrity: sha512-/zUx+yOsIrG4Y43Eh2peDeKCxlRt/gET6aHfaKpuq267qXdYDFViVHfMaLyygZOnl0kGWxFIgsBy8QFuTLUXEQ==} - engines: {node: '>=18.18.0'} - - '@humanwhocodes/module-importer@1.0.1': - resolution: {integrity: sha512-bxveV4V8v5Yb4ncFTT3rPSgZBOpCkjfK0y4oVVVJwIuDVBRMDXrPyXRL988i5ap9m9bnyEEjWfm5WkBmtffLfA==} - engines: {node: '>=12.22'} - - '@humanwhocodes/retry@0.4.3': - resolution: {integrity: sha512-bV0Tgo9K4hfPCek+aMAn81RppFKv2ySDQeMoSZuvTASywNTnVJCArCZE2FWqpvIatKu7VMRLWlR1EazvVhDyhQ==} - engines: {node: '>=18.18'} - '@hutson/parse-repository-url@3.0.2': resolution: {integrity: sha512-H9XAx3hc0BQHY6l+IFSWHDySypcXsvsuLhgYLUGywmJ5pswRVQJUHpOsobnLYp2ZUaUlKiKDrgWWhosOwAEM8Q==} engines: {node: '>=6.9.0'} @@ -2079,6 +1998,15 @@ packages: rollup: optional: true + '@rollup/pluginutils@5.3.0': + resolution: {integrity: sha512-5EdhGZtnu3V88ces7s53hhfK5KSASnJZv8Lulpc04cWO3REESroJXg73DFsOmgbU2BhwV0E20bu2IDZb3VKW4Q==} + engines: {node: '>=14.0.0'} + peerDependencies: + rollup: '>=4.59.0' + peerDependenciesMeta: + rollup: + optional: true + '@rollup/rollup-android-arm-eabi@4.60.0': resolution: {integrity: sha512-WOhNW9K8bR3kf4zLxbfg6Pxu2ybOUbB2AjMDHSQx86LIF4rH4Ft7vmMwNt0loO0eonglSNy4cpD3MKXXKQu0/A==} cpu: [arm] @@ -2320,8 +2248,8 @@ packages: react: optional: true - '@storybook/addon-mcp@0.4.2': - resolution: {integrity: sha512-vFIhpOrk9mzBivnuDBdw+2V45LCWpAXnJtZzWtELA+Vd5mU5U7CikKgFZuSarISX4nMJ+gETfjZijWC0qPzH6A==} + '@storybook/addon-mcp@0.5.0': + resolution: {integrity: sha512-yaw6S7a0596sgsAQpfhaatImRwlm+XfxLG28xZSGHXlVfaIYz9+5k1PFh6yWeKPPeJ+B6oUWD1pZCGcK5FOoYw==} peerDependencies: '@storybook/addon-vitest': ^9.1.16 || ^10.0.0 || ^10.1.0-0 || ^10.2.0-0 || ^10.3.0-0 || ^10.4.0-0 storybook: '>=10.2.10' @@ -2485,8 +2413,8 @@ packages: peerDependencies: storybook: ^8.2.0 || ^8.3.0-0 || ^8.4.0-0 || ^8.5.0-0 || ^8.6.0-0 - '@storybook/mcp@0.6.1': - resolution: {integrity: sha512-fdVJ3Br9/7Taj/sMCeM0jXM5rwdBbsRoh+nz8krMJj+Cj1vzfXRewkeadjt1Bg0q5UcV/0CSOHwj0QI8S5TIgA==} + '@storybook/mcp@0.6.2': + resolution: {integrity: sha512-zND9XHI2G4+sjpcxx79AZOg3ShWAA8Kj1W+GS+URT40l8Bml1t9K/72/Juco1uxAkh7+uxybR5OR0lPmg1kGUg==} '@storybook/node-logger@8.6.14': resolution: {integrity: sha512-/H67NMvc9hDOaNgVragsHaeXQ5JzwAQfyx1QeL4vlx2SPGoWXmxpoRXZTpOJRaNOhKlYh6sDj/3Lx2xOH5IxnQ==} @@ -2726,6 +2654,9 @@ packages: '@types/chai@5.2.2': resolution: {integrity: sha512-8kB30R7Hwqf40JPiKhVzodJs2Qc1ZJ5zuT3uzw5Hq/dhNCl3G3l83jfpdI1e20BP348+fV7VIL/+FxaXkqBmWg==} + '@types/chai@5.2.3': + resolution: {integrity: sha512-Mw558oeA9fFbv65/y4mHtXDs9bPnFMZAL/jxdPFUpOHHIXX91mcgEHbS5Lahr+pwZFR8A7GQleRWeI6cGFC2UA==} + '@types/connect@3.4.38': resolution: {integrity: sha512-K6uROf1LD88uDQqJCktA4yzL1YYAK6NgfsI0v/mTgyPKWsX1CnJ0XPSDhViejru1GcRkLWb8RlzFYJRqGUbaug==} @@ -2789,6 +2720,9 @@ packages: '@types/node@25.0.8': resolution: {integrity: sha512-powIePYMmC3ibL0UJ2i2s0WIbq6cg6UyVFQxSCpaPxxzAaziRfimGivjdF943sSGV6RADVbk0Nvlm5P/FB44Zg==} + '@types/node@25.5.2': + resolution: {integrity: sha512-tO4ZIRKNC+MDWV4qKVZe3Ql/woTnmHDr5JD8UI5hn2pwBrHEwOEMZK7WlNb5RKB6EoJ02gwmQS9OrjuFnZYdpg==} + '@types/normalize-package-data@2.4.4': resolution: {integrity: sha512-37i+OaWTh9qeK4LSHPsyRC7NahnGotNuZvjLSgcPzblpHB3rrCJxAOgI5gCdKm7coonsaX1Of0ILiTcnZjbfxA==} @@ -2840,65 +2774,6 @@ packages: '@types/uuid@9.0.8': resolution: {integrity: sha512-jg+97EGIcY9AGHJJRaaPVgetKDsrTgbRjQ5Msgjh/DQKEFl0DtyRr/VCOyD1T2R1MNeWPK/u7JoGhlDZnKBAfA==} - '@typescript-eslint/eslint-plugin@8.53.0': - resolution: {integrity: sha512-eEXsVvLPu8Z4PkFibtuFJLJOTAV/nPdgtSjkGoPpddpFk3/ym2oy97jynY6ic2m6+nc5M8SE1e9v/mHKsulcJg==} - engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0} - peerDependencies: - '@typescript-eslint/parser': ^8.53.0 - eslint: ^8.57.0 || ^9.0.0 - typescript: '>=4.8.4 <6.0.0' - - '@typescript-eslint/parser@8.53.0': - resolution: {integrity: sha512-npiaib8XzbjtzS2N4HlqPvlpxpmZ14FjSJrteZpPxGUaYPlvhzlzUZ4mZyABo0EFrOWnvyd0Xxroq//hKhtAWg==} - engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0} - peerDependencies: - eslint: ^8.57.0 || ^9.0.0 - typescript: '>=4.8.4 <6.0.0' - - '@typescript-eslint/project-service@8.53.0': - resolution: {integrity: sha512-Bl6Gdr7NqkqIP5yP9z1JU///Nmes4Eose6L1HwpuVHwScgDPPuEWbUVhvlZmb8hy0vX9syLk5EGNL700WcBlbg==} - engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0} - peerDependencies: - typescript: '>=4.8.4 <6.0.0' - - '@typescript-eslint/scope-manager@8.53.0': - resolution: {integrity: sha512-kWNj3l01eOGSdVBnfAF2K1BTh06WS0Yet6JUgb9Cmkqaz3Jlu0fdVUjj9UI8gPidBWSMqDIglmEXifSgDT/D0g==} - engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0} - - '@typescript-eslint/tsconfig-utils@8.53.0': - resolution: {integrity: sha512-K6Sc0R5GIG6dNoPdOooQ+KtvT5KCKAvTcY8h2rIuul19vxH5OTQk7ArKkd4yTzkw66WnNY0kPPzzcmWA+XRmiA==} - engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0} - peerDependencies: - typescript: '>=4.8.4 <6.0.0' - - '@typescript-eslint/type-utils@8.53.0': - resolution: {integrity: sha512-BBAUhlx7g4SmcLhn8cnbxoxtmS7hcq39xKCgiutL3oNx1TaIp+cny51s8ewnKMpVUKQUGb41RAUWZ9kxYdovuw==} - engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0} - peerDependencies: - eslint: ^8.57.0 || ^9.0.0 - typescript: '>=4.8.4 <6.0.0' - - '@typescript-eslint/types@8.53.0': - resolution: {integrity: sha512-Bmh9KX31Vlxa13+PqPvt4RzKRN1XORYSLlAE+sO1i28NkisGbTtSLFVB3l7PWdHtR3E0mVMuC7JilWJ99m2HxQ==} - engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0} - - '@typescript-eslint/typescript-estree@8.53.0': - resolution: {integrity: sha512-pw0c0Gdo7Z4xOG987u3nJ8akL9093yEEKv8QTJ+Bhkghj1xyj8cgPaavlr9rq8h7+s6plUJ4QJYw2gCZodqmGw==} - engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0} - peerDependencies: - typescript: '>=4.8.4 <6.0.0' - - '@typescript-eslint/utils@8.53.0': - resolution: {integrity: sha512-XDY4mXTez3Z1iRDI5mbRhH4DFSt46oaIFsLg+Zn97+sYrXACziXSQcSelMybnVZ5pa1P6xYkPr5cMJyunM1ZDA==} - engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0} - peerDependencies: - eslint: ^8.57.0 || ^9.0.0 - typescript: '>=4.8.4 <6.0.0' - - '@typescript-eslint/visitor-keys@8.53.0': - resolution: {integrity: sha512-LZ2NqIHFhvFwxG0qZeLL9DvdNAHPGCY5dIRwBhyYeU+LfLhcStE1ImjsuTG/WaVh3XysGaeLW8Rqq7cGkPCFvw==} - engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0} - '@valibot/to-json-schema@1.6.0': resolution: {integrity: sha512-d6rYyK5KVa2XdqamWgZ4/Nr+cXhxjy7lmpe6Iajw15J/jmU+gyxl2IEd1Otg1d7Rl3gOQL5reulnSypzBtYy1A==} peerDependencies: @@ -3066,16 +2941,16 @@ packages: resolution: {integrity: sha512-a1wflyaL0tHtJSmLSOVybYhy22vRih4eduhhrkcjgrWGnRfrZtovJ2FRjxuTtkkj47O/baf0R86QU5OuYpz8fA==} engines: {node: ^20.17.0 || >=22.9.0} - acorn-jsx@5.3.2: - resolution: {integrity: sha512-rq9s+JNhf0IChjtDXxllJ7g41oZk5SlXtp0LHwyA5cejwn7vKmKp4pPri6YEePv2PU65sAsegbXtIinmDFDXgQ==} - peerDependencies: - acorn: ^6.0.0 || ^7.0.0 || ^8.0.0 - acorn@8.15.0: resolution: {integrity: sha512-NZyJarBfL7nWwIq+FDL6Zp/yHEhePMNnnJ0y3qfieCrmNvYct8uvtiV41UvlSe6apAfk0fY1FbWx+NwfmpvtTg==} engines: {node: '>=0.4.0'} hasBin: true + acorn@8.16.0: + resolution: {integrity: sha512-UVJyE9MttOsBQIDKw1skb9nAwQuR5wuGD3+82K6JgJlm/Y+KI92oNsMNGZCYdDsVtRHSak0pcV5Dno5+4jh9sw==} + engines: {node: '>=0.4.0'} + hasBin: true + add-stream@1.0.0: resolution: {integrity: sha512-qQLMr+8o0WC4FZGQTcJiKBVC59JylcPSrTtk6usvmIDFUOCKegapy1VHQwRbFMOFyb/inzUVqHs+eMYKDM1YeQ==} @@ -3100,9 +2975,6 @@ packages: peerDependencies: ajv: ^8.18.0 - ajv@6.12.6: - resolution: {integrity: sha512-j3fVLgvTo527anyYyJOGTYJbG+vnnQYvE0m5mmkc1TK+nxAppkCLMIL0aZ4dblVCNoGShhm+kzE4ZUykBoMg4g==} - ajv@8.18.0: resolution: {integrity: sha512-PlXPeEWMXMZ7sPYOHqmDyCJzcfNrUr3fGNKtezX14ykXOEIvyK81d+qydx89KY5O71FKMPaQ2vBfBFI5NHR63A==} @@ -3322,6 +3194,10 @@ packages: resolution: {integrity: sha512-mCuXncKXk5iCLhfhwTc0izo0gtEmpz5CtG2y8GiOINBlMVS6v8TMRc5TaLWKS6692m9+dVVfzgeVxR5UxWHTYw==} engines: {node: '>=12'} + chai@5.3.3: + resolution: {integrity: sha512-4zNhdJD/iOjSH0A05ea+Ke6MU5mmpQcbQsSOkgdaUMJ9zTlDTD/GYlwohmIE2u0gaxHYiVHEn1Fw9mZ/ktJWgw==} + engines: {node: '>=18'} + chai@6.2.2: resolution: {integrity: sha512-NUPRluOfOiTKBKvWPtSD4PhFvWCqOi0BGStNWs57X9js7XGTprSmFoz5F0tWhR4WPjNeR9jXqdC7/UpSJTnlRg==} engines: {node: '>=18'} @@ -3356,6 +3232,10 @@ packages: resolution: {integrity: sha512-OAlb+T7V4Op9OwdkjmguYRqncdlx5JiofwOAUkmTF+jNdHwzTaTs4sRAGpzLF3oOz5xAyDGrPgeIDFQmDOTiJw==} engines: {node: '>= 16'} + check-error@2.1.3: + resolution: {integrity: sha512-PAJdDJusoxnwm1VwW07VWwUN1sl7smmC3OKggvndJFadxxDRyFJBX/ggnu/KE4kQAB7a3Dp8f/YXC1FlUprWmA==} + engines: {node: '>= 16'} + chokidar@4.0.3: resolution: {integrity: sha512-Qgzu8kfBvo+cA4962jnP1KkS6Dop5NS6g7R5LFYJr4b8Ub94PPQXUksCw9PvXoeXPRRddRNC5C1JQUR2SMGtnA==} engines: {node: '>= 14.16.0'} @@ -3636,9 +3516,6 @@ packages: resolution: {integrity: sha512-ZIwpnevOurS8bpT4192sqAowWM76JDKSHYzMLty3BZGSswgq6pBaH3DhCSW5xVAZICZyKdOBPjwww5wfgT/6PA==} engines: {node: '>= 0.4'} - deep-is@0.1.4: - resolution: {integrity: sha512-oIPzksmTg4/MriiaYGO+okXDT7ztn/w3Eptv/+gSIdMdKsJo0u4CfYNFJPy+4SKMuCqGw2wxnA+URMg3t8a/bQ==} - default-browser-id@5.0.1: resolution: {integrity: sha512-x1VCxdX4t+8wVfd1so/9w+vQ4vx7lKd2Qp5tDRutErwmR85OgmfX7RlLRMWafRMY7hbEiXIbudNrjOAPa/hL8Q==} engines: {node: '>=18'} @@ -3739,8 +3616,8 @@ packages: end-of-stream@1.4.4: resolution: {integrity: sha512-+uw1inIHVPQoaVuHzRyXd21icM+cnt4CzD5rW+NC1wjOUSTOs+Te7FOv7AhN7vS9x/oIyhLP5PR1H+phQAHu5Q==} - enhanced-resolve@5.18.3: - resolution: {integrity: sha512-d4lC8xfavMeBjzGr2vECC3fsGXziXZQyJxD868h2M/mBI3PwAuODxAkLkq5HYuvrPYcUtiLzsTo8U3PgX3Ocww==} + enhanced-resolve@5.20.1: + resolution: {integrity: sha512-Qohcme7V1inbAfvjItgw0EaxVX5q2rdVEZHRBrEQdRZTssLDGsL8Lwrznl8oQ/6kuTJONLaDcGjkNP247XEhcA==} engines: {node: '>=10.13.0'} enquirer@2.3.6: @@ -3817,73 +3694,22 @@ packages: resolution: {integrity: sha512-vbRorB5FUQWvla16U8R/qgaFIya2qGzwDrNmCZuYKrbdSUMG6I1ZCGQRefkRVhuOkIGVne7BQ35DSfo1qvJqFg==} engines: {node: '>=0.8.0'} - escape-string-regexp@4.0.0: - resolution: {integrity: sha512-TtpcNJ3XAzx3Gq8sWRzJaVajRs0uVxA2YAkdb1jm2YkPz4G6egUFAyA3n5vtEIZefPk5Wa4UXbKuS5fKkJWdgA==} - engines: {node: '>=10'} - escape-string-regexp@5.0.0: resolution: {integrity: sha512-/veY75JbMK4j1yjvuUxuVsiS/hr/4iHs9FTT6cgTexxdE0Ly/glccBAkloH/DofkjRbZU3bnoj38mOmhkZ0lHw==} engines: {node: '>=12'} - eslint-plugin-react-hooks@7.0.1: - resolution: {integrity: sha512-O0d0m04evaNzEPoSW+59Mezf8Qt0InfgGIBJnpC0h3NH/WjUAR7BIKUfysC6todmtiZ/A0oUVS8Gce0WhBrHsA==} - engines: {node: '>=18'} - peerDependencies: - eslint: ^3.0.0 || ^4.0.0 || ^5.0.0 || ^6.0.0 || ^7.0.0 || ^8.0.0-0 || ^9.0.0 - - eslint-plugin-react-refresh@0.4.26: - resolution: {integrity: sha512-1RETEylht2O6FM/MvgnyvT+8K21wLqDNg4qD51Zj3guhjt433XbnnkVttHMyaVyAFD03QSV4LPS5iE3VQmO7XQ==} - peerDependencies: - eslint: '>=8.40' - - eslint-plugin-storybook@10.3.5: - resolution: {integrity: sha512-rEFkfU3ypF44GpB4tiJ9EFDItueoGvGi3+weLHZax2ON2MB7VIDsxdSUGvIU5tMURg+oWYlpzCyLm4TpDq2deA==} - peerDependencies: - eslint: '>=8' - storybook: ^10.3.5 - eslint-scope@5.1.1: resolution: {integrity: sha512-2NxwbF/hZ0KpepYN0cNbo+FN6XoK7GaHlQhgx/hIZl6Va0bF45RQOOwhLIy8lQDbuCiadSLCBnH2CFYquit5bw==} engines: {node: '>=8.0.0'} - eslint-scope@8.4.0: - resolution: {integrity: sha512-sNXOfKCn74rt8RICKMvJS7XKV/Xk9kA7DyJr8mJik3S7Cwgy3qlkkmyS2uQB3jiJg6VNdZd/pDBJu0nvG2NlTg==} - engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0} - - eslint-visitor-keys@3.4.3: - resolution: {integrity: sha512-wpc+LXeiyiisxPlEkUzU6svyS1frIO3Mgxj1fdy7Pm8Ygzguax2N3Fa/D/ag1WqbOprdI+uY6wMUl8/a2G+iag==} - engines: {node: ^12.22.0 || ^14.17.0 || >=16.0.0} - - eslint-visitor-keys@4.2.1: - resolution: {integrity: sha512-Uhdk5sfqcee/9H/rCOJikYz67o0a2Tw2hGRPOG2Y1R2dg7brRe1uG0yaNQDHu+TO/uQPF/5eCapvYSmHUjt7JQ==} - engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0} - - eslint@9.39.2: - resolution: {integrity: sha512-LEyamqS7W5HB3ujJyvi0HQK/dtVINZvd5mAAp9eT5S/ujByGjiZLCzPcHVzuXbpJDJF/cxwHlfceVUDZ2lnSTw==} - engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0} - hasBin: true - peerDependencies: - jiti: '*' - peerDependenciesMeta: - jiti: - optional: true - esm-env@1.2.2: resolution: {integrity: sha512-Epxrv+Nr/CaL4ZcFGPJIYLWFom+YeV1DqMLHJoEd9SYRxNbaFruBwfEX/kkHUJf55j2+TUbmDcmuilbP1TmXHA==} - espree@10.4.0: - resolution: {integrity: sha512-j6PAQ2uUr79PZhBjP5C5fhl8e39FmRnOjsD5lGnWrFU8i2G776tBK7+nP8KuQUTTyAZUwfQqXAgrVH5MbH9CYQ==} - engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0} - esprima@4.0.1: resolution: {integrity: sha512-eGuFFw7Upda+g4p+QHvnW0RyTX/SVeJBDM/gCtMARO0cLuT2HcEKnTPvhjV6aGeqrCB/sbNop0Kszm0jsaWU4A==} engines: {node: '>=4'} hasBin: true - esquery@1.6.0: - resolution: {integrity: sha512-ca9pw9fomFcKPvFLXhBKUK90ZvGibiGOvRJNbjljY7s7uq/5YO4BOzcYtJqExdx99rF6aAcnRxHmcUHcz6sQsg==} - engines: {node: '>=0.10'} - esrecurse@4.3.0: resolution: {integrity: sha512-KmfKL3b6G+RXvP8N1vr3Tq1kL/oCFgn2NYXEtqP8/L3pKapUA4G8cFVaoF3SU323CD4XypR/ffioHmkti6/Tag==} engines: {node: '>=4.0'} @@ -3930,14 +3756,8 @@ packages: fast-deep-equal@3.1.3: resolution: {integrity: sha512-f3qQ9oQy9j2AhBe/H9VC91wLmKBCCU/gDOnKNAYG5hswO7BLKj09Hc5HYNz9cGI++xlpDCIgDaitVs03ATR84Q==} - fast-json-stable-stringify@2.1.0: - resolution: {integrity: sha512-lhd/wF+Lk98HZoTCtlVraHtfh5XYijIjalXck7saUtuanSDyLMxnHhSXEDJqHxD7msR8D0uCmqlkwjCV8xvwHw==} - - fast-levenshtein@2.0.6: - resolution: {integrity: sha512-DCXu6Ifhqcks7TZKY3Hxp3y6qphY5SJZmrWMDrKcERSOXWQdMhU9Ig/PYrzyw/ul9jOIyh0N4M0tbC5hodg8dw==} - - fast-uri@3.0.6: - resolution: {integrity: sha512-Atfo14OibSv5wAp4VWNsFYE1AchQRTv9cBGWET4pZWHzYshFSS9NQI6I57rdKn9croWVMbYFbLhJ+yJvmZIIHw==} + fast-uri@3.1.0: + resolution: {integrity: sha512-iPeeDKJSWf4IEOasVVrknXpaBV0IApz/gp7S2bb7Z4Lljbl2MGJRqInZiUrQwV16cpzw/D3S5j5Julj/gT52AA==} fdir@6.5.0: resolution: {integrity: sha512-tIbYtZbucOs0BRGqPJkshJUYdL+SDH7dVM8gjy+ERp3WAUjLEFJE+02kanyHtwjWOnwrKYBiwAmM0p4kLJAnXg==} @@ -3955,10 +3775,6 @@ packages: resolution: {integrity: sha512-yaduQFRKLXYOGgEn6AZau90j3ggSOyiqXU0F9JZfeXYhNa+Jk4X+s45A2zg5jns87GAFa34BBm2kXw4XpNcbdg==} engines: {node: '>=8'} - file-entry-cache@8.0.0: - resolution: {integrity: sha512-XXTUwCvisa5oacNGRP9SfNtYBNAMi+RPwBFmblZEF7N7swHYQS6/Zfk7SRwx4D5j3CH211YNRco1DEMNVfZCnQ==} - engines: {node: '>=16.0.0'} - file-system-cache@2.3.0: resolution: {integrity: sha512-l4DMNdsIPsVnKrgEXbJwDJsA5mB8rGwHYERMgqQx/xAUtChPJMre1bXBzDEqqVbWv9AIbFezXMxeEkZDSrXUOQ==} @@ -3988,17 +3804,10 @@ packages: fix-dts-default-cjs-exports@1.0.1: resolution: {integrity: sha512-pVIECanWFC61Hzl2+oOCtoJ3F17kglZC/6N94eRWycFgBH35hHx0Li604ZIzhseh97mf2p0cv7vVrOZGoqhlEg==} - flat-cache@4.0.1: - resolution: {integrity: sha512-f7ccFPK3SXFHpx15UIGyRJ/FJQctuKZ0zVuN3frBo4HnK3cay9VEW0R6yPYFHC0AgqhukPzKjq22t5DmAyqGyw==} - engines: {node: '>=16'} - flat@5.0.2: resolution: {integrity: sha512-b6suED+5/3rTpUBdG1gupIl8MPFCAMA0QXwmljLhvCUKcUvdE4gWky9zpuGCcXHOsz4J9wPGNWq6OKpmIzz3hQ==} hasBin: true - flatted@3.3.3: - resolution: {integrity: sha512-GX+ysw4PBCz0PzosHDepZGANEuFCMLrnRTiEy9McGjmkCQYwRq4A/X786G/fjM/+OjsWSU1ZrY5qyARZmO/uwg==} - follow-redirects@1.15.9: resolution: {integrity: sha512-gew4GsXizNgdoRyqmyfMHyAmXsZDk6mHkSxZFCzW9gwlbtOW44CDtYavM+y+72qD/Vq2l550kMF52DT8fOLJqQ==} engines: {node: '>=4.0'} @@ -4141,14 +3950,6 @@ packages: resolution: {integrity: sha512-Wjlyrolmm8uDpm/ogGyXZXb1Z+Ca2B8NbJwqBVg0axK9GbBeoS7yGV6vjXnYdGm6X53iehEuxxbyiKp8QmN4Vw==} engines: {node: 18 || 20 || >=22} - globals@14.0.0: - resolution: {integrity: sha512-oahGvuMGQlPw/ivIYBjVSrWAfWLBeku5tpPE2fOPLi+WHffIWbuh2tCjhyQhTBPMf5E9jDEH4FOmTYgYwbKwtQ==} - engines: {node: '>=18'} - - globals@17.0.0: - resolution: {integrity: sha512-gv5BeD2EssA793rlFWVPMMCqefTlpusw6/2TbAVMy0FzcG8wKJn4O+NqJ4+XWmmwrayJgw5TzrmWjFgmz1XPqw==} - engines: {node: '>=18'} - globrex@0.1.2: resolution: {integrity: sha512-uHJgbwAMwNFf5mLst7IWLNg14x1CkeqglJb/K3doi4dw6q2IvAAmM/Y81kevy83wP+Sst+nutFTYOGg3d1lsxg==} @@ -4201,12 +4002,6 @@ packages: headers-polyfill@4.0.3: resolution: {integrity: sha512-IScLbePpkvO846sIwOtOTDjutRMWdXdJmXdMvk6gCBHxFO8d+QKOQedyZSxFTTFYRSmlgSTDtXqqq4pcenBXLQ==} - hermes-estree@0.25.1: - resolution: {integrity: sha512-0wUoCcLp+5Ev5pDW2OriHC2MJCbwLwuRx+gAqMTOkGKJJiBCLjtrvy4PWUGn6MIVefecRpzoOZ/UV6iGdOr+Cw==} - - hermes-parser@0.25.1: - resolution: {integrity: sha512-6pEjquH3rqaI6cYAXYPcz9MS4rY6R4ngRgrgfDshRptUZIc3lw0MCIJIGDj9++mfySOuPTHB4nrSW99BCvOPIA==} - highlight.js@10.7.3: resolution: {integrity: sha512-tzcUFauisWKNHaRkN4Wjl/ZA07gENAjFl3J/c480dprkGTg5EQstgaNFqBfUqCq54kZRIEcreTsAgF/m2quD7A==} @@ -4271,10 +4066,6 @@ packages: resolution: {integrity: sha512-FCeMZT4NiRQGh+YkeKMtWrOmBgWjHjMJ26WQWrRQyoyzqevdaGSakUaJW5xQYmjLlUVk2qUnCjYVBax9EKKg8A==} engines: {node: ^20.17.0 || >=22.9.0} - ignore@5.3.2: - resolution: {integrity: sha512-hsBTNUqQTDwkWtcdYI2i06Y/nUBEsNEDJKjWdigLvegy8kDuJAS8uRlpkkcQpyEXL0Z/pjDy5HBmMjRCJ2gq+g==} - engines: {node: '>= 4'} - ignore@7.0.5: resolution: {integrity: sha512-Hs59xBNfUIunMFgWAbGX5cq6893IbWg4KnrjbYwX3tx0ztorVgTDA6B2sxf8ejHJ4wz8BqGUMYlnzNBer5NvGg==} engines: {node: '>= 4'} @@ -4562,9 +4353,6 @@ packages: engines: {node: '>=6'} hasBin: true - json-buffer@3.0.1: - resolution: {integrity: sha512-4bV5BfR2mqfQTJm+V5tPPdf+ZpuhiIvTuAB5g8kcrXOZpTT/QwwVRWBywX1ozr6lEuPdbHxwaJlm9G6mI2sfSQ==} - json-parse-better-errors@1.0.2: resolution: {integrity: sha512-mrqyZKfX5EhL7hvqcV6WG1yYjnjeuYDzDhhcAAUrq8Po85NBQBJP+ZDUT75qZQ98IkUoBqdkExkukOU7Ts2wrw==} @@ -4582,15 +4370,9 @@ packages: json-rpc-2.0@1.7.1: resolution: {integrity: sha512-JqZjhjAanbpkXIzFE7u8mE/iFblawwlXtONaCvRqI+pyABVz7B4M1EUNpyVW+dZjqgQ2L5HFmZCmOCgUKm00hg==} - json-schema-traverse@0.4.1: - resolution: {integrity: sha512-xbbCH5dCYU5T8LcEhhuh7HJ88HXuW3qsI3Y0zOZFKfZEHcpWiHU/Jxzk629Brsab/mMiHQti9wMP+845RPe3Vg==} - json-schema-traverse@1.0.0: resolution: {integrity: sha512-NM8/P9n3XjXhIZn1lLhkFaACTOURQXjWhV4BA/RnOv8xvgqtqpAX9IO4mRQxSx1Rlo4tqzeqb0sOlruaOy3dug==} - json-stable-stringify-without-jsonify@1.0.1: - resolution: {integrity: sha512-Bdboy+l7tA3OGW6FjyFHWkP5LuByj1Tk33Ljyq0axyzdk9//JSi2u3fP1QSmd1KNwq6VOKYGlAu87CisVir6Pw==} - json-stringify-nice@1.1.4: resolution: {integrity: sha512-5Z5RFW63yxReJ7vANgW6eZFGWaQvnPE3WNmZoOJrSkGju2etKA2L5rrOa1sm877TVTFt57A80BH1bArcmlLfPw==} @@ -4622,9 +4404,6 @@ packages: resolution: {integrity: sha512-+KJGIyHgkGuIq3IEBNftfhW/LfWhXUIY6OmyVWjliu5KH1y0fw7VQ8YndE2O4qZdMSd9SqbnC8GOcZEy0Om7sA==} engines: {node: '>=18'} - keyv@4.5.4: - resolution: {integrity: sha512-oxVHkHR/EJf2CNXnWxRLW6mg7JyCCUcG0DtEGmL2ctUo1PNTin1PUil+r/+4r5MpVgC/fn1kjsx7mjSujKqIpw==} - kind-of@6.0.3: resolution: {integrity: sha512-dcS1ul+9tmeD95T+x28/ehLgd9mENa3LsvDTtzm3vyBEO7RPptvAD+t44WVXaUjTBRcrpFeFlC8WCruUR456hw==} engines: {node: '>=0.10.0'} @@ -4634,10 +4413,6 @@ packages: engines: {node: ^20.19.0 || ^22.12.0 || >=24.0.0} hasBin: true - levn@0.4.1: - resolution: {integrity: sha512-+bT2uH4E5LGE7h/n3evcS/sQlJXCpIp6ym8OWJ5eV6+67Dsql/LaaT7qJBAt2rzfoa/5QBGBhxDix1dMt2kQKQ==} - engines: {node: '>= 0.8.0'} - libnpmaccess@10.0.3: resolution: {integrity: sha512-JPHTfWJxIK+NVPdNMNGnkz4XGX56iijPbe0qFWbdt68HL+kIvSzh+euBL8npLZvl2fpaxo+1eZSdoG15f5YdIQ==} engines: {node: ^20.17.0 || >=22.9.0} @@ -4691,9 +4466,6 @@ packages: lodash.ismatch@4.4.0: resolution: {integrity: sha512-fPMfXjGQEV9Xsq/8MTSgUf255gawYRbjwMyDbcvDhXgV7enSZA0hynz6vMPnpAb5iONEzBHBPsT+0zes5Z301g==} - lodash.merge@4.6.2: - resolution: {integrity: sha512-0KpjqXRVvrYyCsX1swR/XTK0va6VQkQM6MNo7PqW77ByjAhoARA8EfrP1N4+KlKj8YS0ZUCtRT/YUuhyYDujIQ==} - lodash@4.17.21: resolution: {integrity: sha512-v2kDEe57lecTulaDIuNTPy3Ry4gLGJ6Z1O3vE1krgXZNrsQ+LFTGHVxVjcXPs17LhbZVGedAJv8XZ1tvj5FvSg==} @@ -4711,6 +4483,9 @@ packages: loupe@3.1.4: resolution: {integrity: sha512-wJzkKwJrheKtknCOKNEtDK4iqg/MxmZheEMtSTYvnzRdEYaZzmgH976nenp8WdJRdx5Vc1X/9MO0Oszl6ezeXg==} + loupe@3.2.1: + resolution: {integrity: sha512-CdzqowRJCeLU72bHvWqwRBBlLcMEtIvGrlvef74kMnV2AolS9Y8xUv1I0U/MNAWMhBlKIoyuEgoJ0t/bbwHbLQ==} + lru-cache@10.4.3: resolution: {integrity: sha512-JNAzZcXrCt42VGLuYz0zfAzDfAvJWW6AfYlDBQyDV5DClI2m5sAmK+OIO7s59XfsRsWHp02jAJrRadPRGTt6SQ==} @@ -4718,6 +4493,10 @@ packages: resolution: {integrity: sha512-B5Y16Jr9LB9dHVkh6ZevG+vAbOsNOYCX+sXvFWFu7B3Iz5mijW3zdbMyhsh8ANd2mSWBYdJgnqi+mL7/LrOPYg==} engines: {node: 20 || >=22} + lru-cache@11.3.2: + resolution: {integrity: sha512-wgWa6FWQ3QRRJbIjbsldRJZxdxYngT/dO0I5Ynmlnin8qy7tC6xYzbcJjtN4wHLXtkbVwHzk0C+OejVw1XM+DQ==} + engines: {node: 20 || >=22} + lru-cache@5.1.1: resolution: {integrity: sha512-KpNARQA3Iwv+jTA0utUVVbrh+Jlrr1Fv0e56GGzAFOXN7dk/FviaDW8LHmK52DlcH4WP2n6gI8vN1aesBFgo9w==} @@ -4930,6 +4709,10 @@ packages: resolution: {integrity: sha512-oRjTw/97aTBN0RHbYCdtF1MQfvusSIBQM0IZEgzl6426+8jSC0nF1a/GmnVLpfB9yyr6g6FTqWqiZVbxrtaCIg==} engines: {node: 18 || 20 || >=22} + minimatch@10.2.5: + resolution: {integrity: sha512-MULkVLfKGYDFYejP07QOurDLLQpcjk7Fw+7jXS2R2czRQzR56yHRveU5NDJEOviH+hETZKSkIk5c+T23GjFUMg==} + engines: {node: 18 || 20 || >=22} + minimatch@3.1.4: resolution: {integrity: sha512-twmL+S8+7yIsE9wsqgzU3E8/LumN3M3QELrBZ20OdmQ9jB2JvW5oZtBEmft84k/Gs5CG9mqtWc6Y9vW+JEzGxw==} @@ -5008,9 +4791,6 @@ packages: engines: {node: ^10 || ^12 || ^13.7 || ^14 || >=15.0.1} hasBin: true - natural-compare@1.4.0: - resolution: {integrity: sha512-OWND8ei3VtNC9h7V60qff3SVobHr996CTwgxubgyQYEpg290h9J0buyECNNJexkFm5sOajh5G116RYA1c8ZMSw==} - negotiator@1.0.0: resolution: {integrity: sha512-8Ofs/AUQh8MaEcrlq5xOX0CQ9ypTF5dl78mjlMNfOK08fzpgTHQRQPBxcPlEtIw0yRpws+Zo/3r+5WRby7u3Gg==} engines: {node: '>= 0.6'} @@ -5152,10 +4932,6 @@ packages: resolution: {integrity: sha512-7x81NCL719oNbsq/3mh+hVrAWmFuEYUqrq/Iw3kUzH8ReypT9QQ0BLoJS7/G9k6N81XjW4qHWtjWwe/9eLy1EQ==} engines: {node: '>=12'} - optionator@0.9.4: - resolution: {integrity: sha512-6IpQ7mKUxRcZNLIObR0hz7lxsapSSIYNZJwXPGeF0mTVqGKFIXj1DQcMoT22S3ROcLyY/rz0PWaWZ9ayWmad9g==} - engines: {node: '>= 0.8.0'} - ora@5.3.0: resolution: {integrity: sha512-zAKMgGXUim0Jyd6CXK9lraBnD3H5yPGBPPOkC23a2BG6hsm4Zu6OQSjQuEtV0BHDf4aKHcUFvJiGRrFuW3MG8g==} engines: {node: '>=10'} @@ -5315,6 +5091,10 @@ packages: resolution: {integrity: sha512-vE7JKRyES09KiunauX7nd2Q9/L7lhok4smP9RZTDeD4MVs72Dp2qNFVz39Nz5a0FVEW0BJR6C0DYrq6unoziZA==} engines: {node: '>= 14.16'} + pathval@2.0.1: + resolution: {integrity: sha512-//nshmD55c46FuFw26xV/xFAaB5HF9Xdap7HJBBnrKdAd6/GxDBaNA1870O79+9ueg61cZLSVc+OaFlfmObYVQ==} + engines: {node: '>= 14.16'} + picocolors@1.1.1: resolution: {integrity: sha512-xceH2snhtb5M9liqDsmEw56le376mTZkEX/jEb/RxNFyegNul7eNslCXP9FDj/Lcu0X8KEyMceP2ntpaHrDEVA==} @@ -5391,10 +5171,6 @@ packages: preact@10.22.1: resolution: {integrity: sha512-jRYbDDgMpIb5LHq3hkI0bbl+l/TQ9UnkdQ0ww+lp+4MMOdqaUYdFc5qeyP+IV8FAd/2Em7drVPeKdQxsiWCf/A==} - prelude-ls@1.2.1: - resolution: {integrity: sha512-vkcDPrRZo1QZLbn5RLGPpg/WmIQ65qoWWhcGKf/b5eplkkarX0m9z8ppCat4mlOqUsWpyNuYgO3VRyrYHSzX5g==} - engines: {node: '>= 0.8.0'} - prettier@2.8.8: resolution: {integrity: sha512-tdN8qQGvNjw4CHbY+XXk0JgCXn9QiF21a55rBe5LJAU+kDyC4WQn4+awm2Xfk2lQMk5fKup9XgzTZtGkjBdP9Q==} engines: {node: '>=10.13.0'} @@ -5464,17 +5240,14 @@ packages: ramda@0.29.0: resolution: {integrity: sha512-BBea6L67bYLtdbOqfp8f58fPMqEwx0doL+pAi8TZyp2YWz8R9G8z9x75CZI8W+ftqhFHCpEX2cRnUUXK130iKA==} - randombytes@2.1.0: - resolution: {integrity: sha512-vYl3iOX+4CKUWuxGi9Ukhie6fsqXqS9FE2Zaic4tNFD2N2QQaXOMFbuKK4QmDHC0JO6B1Zp41J0LpT0oR68amQ==} - rapid-form@3.1.0: resolution: {integrity: sha512-gZf8H9O98xdUz8p4cHZng/JBigLfb6VrIezQdIh+xYejccMxvo5TnZmjIzd3HZA0keYT+t0uJazzRksvBBLPBw==} peerDependencies: react: ^16.9.0 react-dom: ^16.9.0 - react-docgen-typescript@2.2.2: - resolution: {integrity: sha512-tvg2ZtOpOi6QDwsb3GZhOjDkkX0h8Z2gipvTg6OVMUyoYoURhEiRNePT8NZItTVCDh39JJHnLdfCOkzoLbFnTg==} + react-docgen-typescript@2.4.0: + resolution: {integrity: sha512-ZtAp5XTO5HRzQctjPU0ybY0RRCQO19X/8fxn3w7y2VVTUbGHDKULPTL4ky3vB05euSgG5NpALhEhDPvQ56wvXg==} peerDependencies: typescript: '>= 4.3.x' @@ -5482,6 +5255,10 @@ packages: resolution: {integrity: sha512-+NRMYs2DyTP4/tqWz371Oo50JqmWltR1h2gcdgUMAWZJIAvrd0/SqlCfx7tpzpl/s36rzw6qH2MjoNrxtRNYhA==} engines: {node: ^20.9.0 || >=22} + react-docgen@8.0.3: + resolution: {integrity: sha512-aEZ9qP+/M+58x2qgfSFEWH1BxLyHe5+qkLNJOZQb5iGS017jpbRnoKhNRrXPeA6RfBrZO5wZrT9DMC1UqE1f1w==} + engines: {node: ^20.9.0 || >=22} + react-dom@19.2.3: resolution: {integrity: sha512-yELu4WmLPw5Mr/lmeEpox5rw3RETacE++JgHqQzd2dg+YbJuat3jH4ingc+WPZhxaoFzdv9y33G+F7Nl5O0GBg==} peerDependencies: @@ -5637,6 +5414,11 @@ packages: engines: {node: '>= 0.4'} hasBin: true + resolve@1.22.11: + resolution: {integrity: sha512-RfqAvLnMl313r7c9oclB1HhUEAezcpLjz95wFH4LVuhk9JF/r22qmVP9AMmOU4vMX7Q8pN8jwNg/CSpdFnMjTQ==} + engines: {node: '>= 0.4'} + hasBin: true + restore-cursor@3.1.0: resolution: {integrity: sha512-l+sSefzHpj5qimhFSE5a8nufZYAM3sBSVMAPtYkmC+4EH2anSGaEMXSD0izRQbu9nfyQ9y5JrVmp7E8oZrUjvA==} engines: {node: '>=8'} @@ -5720,8 +5502,10 @@ packages: engines: {node: '>=10'} hasBin: true - serialize-javascript@6.0.2: - resolution: {integrity: sha512-Saa1xPByTTq2gdeFZYLLo+RFE35NHZkAbqZeWNd3BpzppeVisAqpDjcp8dyf6uIvEqJRd46jemmyA4iFIeVk8g==} + semver@7.7.4: + resolution: {integrity: sha512-vFKC2IEtQnVhpT78h1Yp8wzwrf8CM+MzKMHGJZfBtzhZNycRFnXsHk6E5TxIkkMsgNS7mdX3AGB7x2QM2di4lA==} + engines: {node: '>=10'} + hasBin: true set-function-length@1.2.2: resolution: {integrity: sha512-pgRc4hJ4/sNjWCSS9AmnS40x3bNMDTknHgL5UaMBTMyJnU90EgWh1Rz+MC9eFu4BuN/UwZjKQuY/1v3rM7HMfg==} @@ -5919,9 +5703,9 @@ packages: resolution: {integrity: sha512-mnVSV2l+Zv6BLpSD/8V87CW/y9EmmbYzGCIavsnsI6/nwn26DwffM/yztm30Z/I2DY9wdS3vXVCMnHDgZaVNoA==} engines: {node: '>=12'} - strip-json-comments@3.1.1: - resolution: {integrity: sha512-6fPc+R4ihwqP6N/aIv2f1gMH8lOVtWQHoqC4yK6oSDVVocumAsfCqjkXnqiYMhmMwS/mEHLp7Vehlt3ql6lEig==} - engines: {node: '>=8'} + strip-indent@4.1.1: + resolution: {integrity: sha512-SlyRoSkdh1dYP0PzclLE7r0M9sgbFKKMFXpFRUMNuKhQSbC6VQIGzq3E0qsfvGJaUFJPGv6Ws1NZ/haTAjfbMA==} + engines: {node: '>=12'} sucrase@3.35.1: resolution: {integrity: sha512-DhuTmvZWux4H1UOnWMB3sk0sbaCVOoQZjv8u1rDoTV0HTdGem9hkAZtl4JZy8P2z4Bg0nT+YMeOFyVr4zcG5Tw==} @@ -5959,8 +5743,8 @@ packages: resolution: {integrity: sha512-yEFYrVhod+hdNyx7g5Bnkkb0G6si8HJurOoOEgC8B/O0uXLHlaey/65KRv6cuWBNhBgHKAROVpc7QyYqE5gFng==} engines: {node: '>=20'} - tapable@2.3.0: - resolution: {integrity: sha512-g9ljZiwki/LfxmQADO3dEY1CbpmXT5Hm2fJ+QaGKwSXUylMybePR7/67YW7jOrrvjEgL1Fmz5kzyAjWVWLlucg==} + tapable@2.3.2: + resolution: {integrity: sha512-1MOpMXuhGzGL5TTCZFItxCc0AARf1EZFQkGqMm7ERKj8+Hgr5oLvJOVFcC+lRmR8hCe2S3jC4T5D7Vg/d7/fhA==} engines: {node: '>=6'} tar-stream@2.2.0: @@ -5974,8 +5758,8 @@ packages: telejson@7.2.0: resolution: {integrity: sha512-1QTEcJkJEhc8OnStBx/ILRu5J2p0GjvWsBx56bmZRqnrkdBMUe+nX92jxV+p3dB4CP6PZCdJMQJwCggkNBMzkQ==} - terser-webpack-plugin@5.3.14: - resolution: {integrity: sha512-vkZjpUjb6OMS7dhV+tILUW6BhpDR7P2L/aQSAv+Uwk+m8KATX9EccViHTJR2qDtACKPIYndLGCyl3FMo+r2LMw==} + terser-webpack-plugin@5.4.0: + resolution: {integrity: sha512-Bn5vxm48flOIfkdl5CaD2+1CiUVbonWQ3KQPyP7/EuIl9Gbzq/gQFOzaMFUEgVjB1396tcK0SG8XcNJ/2kDH8g==} engines: {node: '>= 10.13.0'} peerDependencies: '@swc/core': '*' @@ -5990,8 +5774,8 @@ packages: uglify-js: optional: true - terser@5.44.0: - resolution: {integrity: sha512-nIVck8DK+GM/0Frwd+nIhZ84pR/BX7rmXMfYwyg+Sri5oGVE99/E3KvXqpC2xHFxyqXyGHTKBSioxxplrO4I4w==} + terser@5.46.1: + resolution: {integrity: sha512-vzCjQO/rgUuK9sf8VJZvjqiqiHFaZLnOiimmUuOKODxWL8mm/xua7viT7aqX7dgPY60otQjUotzFMmCB4VdmqQ==} engines: {node: '>=10'} hasBin: true @@ -6049,8 +5833,8 @@ packages: resolution: {integrity: sha512-n1cw8k1k0x4pgA2+9XrOkFydTerNcJ1zWCO5Nn9scWHTD+5tp8dghT2x1uduQePZTZgd3Tupf+x9BxJjeJi77Q==} engines: {node: '>=14.0.0'} - tinyspy@4.0.3: - resolution: {integrity: sha512-t2T/WLB2WRgZ9EpE4jgPJ9w+i66UZfDc8wHh0xrwiRNN+UwH98GIJkTeZqX9rg0i0ptwzqW+uYeIF0T4F8LR7A==} + tinyspy@4.0.4: + resolution: {integrity: sha512-azl+t0z7pw/z958Gy9svOTuzqIk6xq+NSheJzn5MMWtWTFywIacg2wUlzKFGtt3cthx0r2SxMK0yzJOR0IES7Q==} engines: {node: '>=14.0.0'} tldts-core@7.0.13: @@ -6090,12 +5874,6 @@ packages: trough@2.2.0: resolution: {integrity: sha512-tmMpK00BjZiUyVyvrBK7knerNgmgvcV/KLVyuma/SC+TQN167GrMRciANTz09+k3zW8L8t60jWO1GpfkZdjTaw==} - ts-api-utils@2.4.0: - resolution: {integrity: sha512-3TaVTaAv2gTiMB35i3FiGJaRfwb3Pyn/j3m/bfAvGe8FB7CF6u+LMYqYlDh7reQf7UNvoTvdfAqHGmPGOSsPmA==} - engines: {node: '>=18.12'} - peerDependencies: - typescript: '>=4.8.4' - ts-dedent@2.2.0: resolution: {integrity: sha512-q5W7tVM71e2xjHZTlgfTDoPF/SmqKG5hddq9SzR49CH2hayqRKJtQ4mtRlSxKaJlR/+9rEM+mnBHf7I2/BQcpQ==} engines: {node: '>=6.10'} @@ -6143,10 +5921,6 @@ packages: resolution: {integrity: sha512-Lq7ieeGvXDXwpoSmOSgLWVdsGGV9J4a77oDTAPe/Ltrqnnm/ETaRlBAQTH5JatEh8KXuE6sddf9qAv1Q2282Hg==} engines: {node: ^20.17.0 || >=22.9.0} - type-check@0.4.0: - resolution: {integrity: sha512-XleUoc9uwGXqjWwXaUTZAmzMcFZ5858QA2vvx1Ur5xIcixXIP+8LnFDgRplU30us6teqdlskFfu+ae4K79Ooew==} - engines: {node: '>= 0.8.0'} - type-fest@0.18.1: resolution: {integrity: sha512-OIAYXk8+ISY+qTOwkHtKqzAuxchoMiD9Udx+FSGQDuiRR+PJKJHc2NJAXlbhkGwTt/4/nKZxELY1w3ReWOL8mw==} engines: {node: '>=10'} @@ -6170,13 +5944,6 @@ packages: typedarray@0.0.6: resolution: {integrity: sha512-/aCDEGatGvZ2BIk+HmLf4ifCJFwvKFNb9/JeZPMulfgFracn9QFcAf5GO8B/mweUjSoblS5In0cWhqpfs/5PQA==} - typescript-eslint@8.53.0: - resolution: {integrity: sha512-xHURCQNxZ1dsWn0sdOaOfCSQG0HKeqSj9OexIxrz6ypU6wHYOdX2I3D2b8s8wFSsSOYJb+6q283cLiLlkEsBYw==} - engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0} - peerDependencies: - eslint: ^8.57.0 || ^9.0.0 - typescript: '>=4.8.4 <6.0.0' - typescript@4.9.5: resolution: {integrity: sha512-1FXk9E2Hm+QzZQ7z+McJiHL4NW1F2EzMu9Nq9i3zAaGqibafqYwCVU6WyWAuyQRRzOlxou8xZSyXLEN8oKj24g==} engines: {node: '>=4.2.0'} @@ -6203,6 +5970,9 @@ packages: undici-types@7.16.0: resolution: {integrity: sha512-Zz+aZWSj8LE6zoxD+xrjh4VfkIG8Ya6LvYkZqtUQGJPZjYl53ypCaUwWqo7eI0x66KBGeRo+mlBEkMSeSZ38Nw==} + undici-types@7.18.2: + resolution: {integrity: sha512-AsuCzffGHJybSaRrmr5eHr81mwJU3kjw6M+uprWvCXiNeN9SOGwQ3Jn8jb8m3Z6izVgknn1R0FTCEAP2QrLY/w==} + unicode-canonical-property-names-ecmascript@2.0.1: resolution: {integrity: sha512-dA8WbNeb2a6oQzAQ55YlT5vQAWGV9WXOsi3SskE3bcCdM0P4SDd+24zS/OCacdRq5BkdsRj9q3Pg6YyQoxIGqg==} engines: {node: '>=4'} @@ -6274,9 +6044,6 @@ packages: peerDependencies: browserslist: '>= 4.21.0' - uri-js@4.4.1: - resolution: {integrity: sha512-7rKUyy33Q1yc98pQ1DAmLtwX109F7TIfWlW1Ydo8Wl1ii1SeHieeh0HHfPeL2fMXK6z0s8ecKs9frCuLJvndBg==} - uri-template-matcher@1.1.2: resolution: {integrity: sha512-uZc1h12jdO3m/R77SfTEOuo6VbMhgWznaawKpBjRGSJb7i91x5PgI37NQJtG+Cerxkk0yr1pylBY2qG1kQ+aEQ==} @@ -6413,8 +6180,8 @@ packages: resolution: {integrity: sha512-3hu+tD8YzSLGuFYtPRb48vdhKMi0KQV5sn+uWr8+7dMEq/2G/dtLrdDinkLjqq5TIbIBjYJ4Ax/n3YiaW7QM8A==} engines: {node: 20 || >=22} - watchpack@2.4.4: - resolution: {integrity: sha512-c5EGNOiyxxV5qmTtAB7rbiXxi1ooX1pQKMLX/MIabJjRA0SJBQOjKF+KSVfHkr9U1cADPon0mRiVe/riyaiDUA==} + watchpack@2.5.1: + resolution: {integrity: sha512-Zn5uXdcFNIA1+1Ei5McRd+iRzfhENPCe7LeABkJtNulSxjma+l7ltNx55BWZkRlwRnpOgHqxnjyaDgJnNXnqzg==} engines: {node: '>=10.13.0'} wcwidth@1.0.1: @@ -6424,8 +6191,8 @@ packages: resolution: {integrity: sha512-n4W4YFyz5JzOfQeA8oN7dUYpR+MBP3PIUsn2jLjWXwK5ASUzt0Jc/A5sAUZoCYFJRGF0FBKJ+1JjN43rNdsQzA==} engines: {node: '>=20'} - webpack-sources@3.3.3: - resolution: {integrity: sha512-yd1RBzSGanHkitROoPFd6qsrxt+oFhg/129YzheDGqeustzX0vTZJZsSsQjVQC4yzBQ56K55XU8gaNCtIzOnTg==} + webpack-sources@3.3.4: + resolution: {integrity: sha512-7tP1PdV4vF+lYPnkMR0jMY5/la2ub5Fc/8VQrrU+lXkiM6C4TjVfGw7iKfyhnTQOsD+6Q/iKw0eFciziRgD58Q==} engines: {node: '>=10.13.0'} webpack-virtual-modules@0.6.2: @@ -6484,10 +6251,6 @@ packages: wide-align@1.1.5: resolution: {integrity: sha512-eDMORYaPNZ4sQIuuYPDHdQvf4gyCF9rEEV/yPxGfwPkRodwEgiMUUXTx/dex+Me0wxx53S+NgUHaP7y3MGlDmg==} - word-wrap@1.2.5: - resolution: {integrity: sha512-BN22B5eaMMI9UMtjrGd5g5eCYPpCPDUy0FJXbYsaT5zYxjFOckS53SQDE3pWkVoWpHXVb3BrYcEN4Twa55B5cA==} - engines: {node: '>=0.10.0'} - wordwrap@1.0.0: resolution: {integrity: sha512-gvVzJFlPycKc5dZN4yPkP8w7Dc37BtP1yczEneOb4uq34pXZcvrtRTmWV8W+Ume+XCxKgbjM+nevkyFPMybd4Q==} @@ -6526,6 +6289,18 @@ packages: utf-8-validate: optional: true + ws@8.20.0: + resolution: {integrity: sha512-sAt8BhgNbzCtgGbt2OxmpuryO63ZoDk/sqaB/znQm94T4fCEsy/yV+7CdC1kJhOU9lboAEU7R3kquuycDoibVA==} + engines: {node: '>=10.0.0'} + peerDependencies: + bufferutil: ^4.0.1 + utf-8-validate: '>=5.0.2' + peerDependenciesMeta: + bufferutil: + optional: true + utf-8-validate: + optional: true + wsl-utils@0.1.0: resolution: {integrity: sha512-h3Fbisa2nKGPxCpm89Hk33lBLsnaGBvctQopaBSOW/uIs6FTe1ATyAnKFJrzVs9vpGdsTe73WF3V4lIsk4Gacw==} engines: {node: '>=18'} @@ -6584,15 +6359,6 @@ packages: resolution: {integrity: sha512-U/PBtDf35ff0D8X8D0jfdzHYEPFxAI7jJlxZXwCSez5M3190m+QobIfh+sWDWSHMCWWJN2AWamkegn6vr6YBTw==} engines: {node: '>=18'} - zod-validation-error@4.0.2: - resolution: {integrity: sha512-Q6/nZLe6jxuU80qb/4uJ4t5v2VEZ44lzQjPDhYJNztRQ4wyWc6VF3D3Kb/fAuPetZQnhS3hnajCf9CsWesghLQ==} - engines: {node: '>=18.0.0'} - peerDependencies: - zod: ^3.25.0 || ^4.0.0 - - zod@4.2.1: - resolution: {integrity: sha512-0wZ1IRqGGhMP76gLqz8EyfBXKk0J2qo2+H3fi4mcUP/KtTocoX08nmIAHl1Z2kJIZbZee8KOpBCSNPRgauucjw==} - zwitch@2.0.4: resolution: {integrity: sha512-bXE4cR/kVZhKZX/RjPEflHaKVhUVl85noU3v6b8apfQEc1x4A+zBxjZ4lN8LqGd6WZ3dl98pY4o717VFmoPp+A==} @@ -6771,7 +6537,7 @@ snapshots: '@babel/helper-plugin-utils': 7.28.6 debug: 4.4.3 lodash.debounce: 4.0.8 - resolve: 1.22.10 + resolve: 1.22.11 transitivePeerDependencies: - supports-color @@ -6779,15 +6545,15 @@ snapshots: '@babel/helper-member-expression-to-functions@7.28.5': dependencies: - '@babel/traverse': 7.28.6 - '@babel/types': 7.28.6 + '@babel/traverse': 7.29.0 + '@babel/types': 7.29.0 transitivePeerDependencies: - supports-color '@babel/helper-module-imports@7.27.1': dependencies: - '@babel/traverse': 7.28.6 - '@babel/types': 7.28.6 + '@babel/traverse': 7.29.0 + '@babel/types': 7.29.0 transitivePeerDependencies: - supports-color @@ -6827,7 +6593,7 @@ snapshots: '@babel/helper-optimise-call-expression@7.27.1': dependencies: - '@babel/types': 7.28.6 + '@babel/types': 7.29.0 '@babel/helper-plugin-utils@7.27.1': {} @@ -6880,8 +6646,8 @@ snapshots: '@babel/helper-wrap-function@7.28.3': dependencies: '@babel/template': 7.28.6 - '@babel/traverse': 7.28.6 - '@babel/types': 7.28.6 + '@babel/traverse': 7.29.0 + '@babel/types': 7.29.0 transitivePeerDependencies: - supports-color @@ -7730,85 +7496,23 @@ snapshots: '@esbuild/win32-x64@0.27.2': optional: true - '@eslint-community/eslint-utils@4.9.0(eslint@9.39.2)': - dependencies: - eslint: 9.39.2 - eslint-visitor-keys: 3.4.3 - - '@eslint-community/eslint-utils@4.9.1(eslint@9.39.2)': - dependencies: - eslint: 9.39.2 - eslint-visitor-keys: 3.4.3 - - '@eslint-community/regexpp@4.12.2': {} - - '@eslint/config-array@0.21.1': - dependencies: - '@eslint/object-schema': 2.1.7 - debug: 4.4.3 - minimatch: 10.2.4 - transitivePeerDependencies: - - supports-color - - '@eslint/config-helpers@0.4.2': - dependencies: - '@eslint/core': 0.17.0 - - '@eslint/core@0.17.0': - dependencies: - '@types/json-schema': 7.0.15 - - '@eslint/eslintrc@3.3.3': - dependencies: - ajv: 6.12.6 - debug: 4.4.3 - espree: 10.4.0 - globals: 14.0.0 - ignore: 5.3.2 - import-fresh: 3.3.1 - js-yaml: 4.1.1 - minimatch: 10.2.4 - strip-json-comments: 3.1.1 - transitivePeerDependencies: - - supports-color - - '@eslint/js@9.39.2': {} - - '@eslint/object-schema@2.1.7': {} - - '@eslint/plugin-kit@0.4.1': - dependencies: - '@eslint/core': 0.17.0 - levn: 0.4.1 - '@exodus/bytes@1.8.0': {} '@faker-js/faker@10.2.0': {} - '@humanfs/core@0.19.1': {} - - '@humanfs/node@0.16.7': - dependencies: - '@humanfs/core': 0.19.1 - '@humanwhocodes/retry': 0.4.3 - - '@humanwhocodes/module-importer@1.0.1': {} - - '@humanwhocodes/retry@0.4.3': {} - '@hutson/parse-repository-url@3.0.2': {} '@inquirer/ansi@1.0.2': {} - '@inquirer/checkbox@4.3.2(@types/node@25.0.8)': + '@inquirer/checkbox@4.3.2(@types/node@25.5.2)': dependencies: '@inquirer/ansi': 1.0.2 - '@inquirer/core': 10.3.2(@types/node@25.0.8) + '@inquirer/core': 10.3.2(@types/node@25.5.2) '@inquirer/figures': 1.0.15 - '@inquirer/type': 3.0.10(@types/node@25.0.8) + '@inquirer/type': 3.0.10(@types/node@25.5.2) yoctocolors-cjs: 2.1.3 optionalDependencies: - '@types/node': 25.0.8 + '@types/node': 25.5.2 '@inquirer/confirm@5.1.21(@types/node@25.0.8)': dependencies: @@ -7817,6 +7521,13 @@ snapshots: optionalDependencies: '@types/node': 25.0.8 + '@inquirer/confirm@5.1.21(@types/node@25.5.2)': + dependencies: + '@inquirer/core': 10.3.2(@types/node@25.5.2) + '@inquirer/type': 3.0.10(@types/node@25.5.2) + optionalDependencies: + '@types/node': 25.5.2 + '@inquirer/core@10.3.2(@types/node@25.0.8)': dependencies: '@inquirer/ansi': 1.0.2 @@ -7830,99 +7541,116 @@ snapshots: optionalDependencies: '@types/node': 25.0.8 - '@inquirer/editor@4.2.23(@types/node@25.0.8)': + '@inquirer/core@10.3.2(@types/node@25.5.2)': dependencies: - '@inquirer/core': 10.3.2(@types/node@25.0.8) - '@inquirer/external-editor': 1.0.3(@types/node@25.0.8) - '@inquirer/type': 3.0.10(@types/node@25.0.8) + '@inquirer/ansi': 1.0.2 + '@inquirer/figures': 1.0.15 + '@inquirer/type': 3.0.10(@types/node@25.5.2) + cli-width: 4.1.0 + mute-stream: 2.0.0 + signal-exit: 4.1.0 + wrap-ansi: 6.2.0 + yoctocolors-cjs: 2.1.3 optionalDependencies: - '@types/node': 25.0.8 + '@types/node': 25.5.2 - '@inquirer/expand@4.0.23(@types/node@25.0.8)': + '@inquirer/editor@4.2.23(@types/node@25.5.2)': dependencies: - '@inquirer/core': 10.3.2(@types/node@25.0.8) - '@inquirer/type': 3.0.10(@types/node@25.0.8) + '@inquirer/core': 10.3.2(@types/node@25.5.2) + '@inquirer/external-editor': 1.0.3(@types/node@25.5.2) + '@inquirer/type': 3.0.10(@types/node@25.5.2) + optionalDependencies: + '@types/node': 25.5.2 + + '@inquirer/expand@4.0.23(@types/node@25.5.2)': + dependencies: + '@inquirer/core': 10.3.2(@types/node@25.5.2) + '@inquirer/type': 3.0.10(@types/node@25.5.2) yoctocolors-cjs: 2.1.3 optionalDependencies: - '@types/node': 25.0.8 + '@types/node': 25.5.2 - '@inquirer/external-editor@1.0.3(@types/node@25.0.8)': + '@inquirer/external-editor@1.0.3(@types/node@25.5.2)': dependencies: chardet: 2.1.1 iconv-lite: 0.7.1 optionalDependencies: - '@types/node': 25.0.8 + '@types/node': 25.5.2 '@inquirer/figures@1.0.15': {} - '@inquirer/input@4.3.1(@types/node@25.0.8)': + '@inquirer/input@4.3.1(@types/node@25.5.2)': dependencies: - '@inquirer/core': 10.3.2(@types/node@25.0.8) - '@inquirer/type': 3.0.10(@types/node@25.0.8) + '@inquirer/core': 10.3.2(@types/node@25.5.2) + '@inquirer/type': 3.0.10(@types/node@25.5.2) optionalDependencies: - '@types/node': 25.0.8 + '@types/node': 25.5.2 - '@inquirer/number@3.0.23(@types/node@25.0.8)': + '@inquirer/number@3.0.23(@types/node@25.5.2)': dependencies: - '@inquirer/core': 10.3.2(@types/node@25.0.8) - '@inquirer/type': 3.0.10(@types/node@25.0.8) + '@inquirer/core': 10.3.2(@types/node@25.5.2) + '@inquirer/type': 3.0.10(@types/node@25.5.2) optionalDependencies: - '@types/node': 25.0.8 + '@types/node': 25.5.2 - '@inquirer/password@4.0.23(@types/node@25.0.8)': + '@inquirer/password@4.0.23(@types/node@25.5.2)': dependencies: '@inquirer/ansi': 1.0.2 - '@inquirer/core': 10.3.2(@types/node@25.0.8) - '@inquirer/type': 3.0.10(@types/node@25.0.8) + '@inquirer/core': 10.3.2(@types/node@25.5.2) + '@inquirer/type': 3.0.10(@types/node@25.5.2) optionalDependencies: - '@types/node': 25.0.8 - - '@inquirer/prompts@7.10.1(@types/node@25.0.8)': - dependencies: - '@inquirer/checkbox': 4.3.2(@types/node@25.0.8) - '@inquirer/confirm': 5.1.21(@types/node@25.0.8) - '@inquirer/editor': 4.2.23(@types/node@25.0.8) - '@inquirer/expand': 4.0.23(@types/node@25.0.8) - '@inquirer/input': 4.3.1(@types/node@25.0.8) - '@inquirer/number': 3.0.23(@types/node@25.0.8) - '@inquirer/password': 4.0.23(@types/node@25.0.8) - '@inquirer/rawlist': 4.1.11(@types/node@25.0.8) - '@inquirer/search': 3.2.2(@types/node@25.0.8) - '@inquirer/select': 4.4.2(@types/node@25.0.8) + '@types/node': 25.5.2 + + '@inquirer/prompts@7.10.1(@types/node@25.5.2)': + dependencies: + '@inquirer/checkbox': 4.3.2(@types/node@25.5.2) + '@inquirer/confirm': 5.1.21(@types/node@25.5.2) + '@inquirer/editor': 4.2.23(@types/node@25.5.2) + '@inquirer/expand': 4.0.23(@types/node@25.5.2) + '@inquirer/input': 4.3.1(@types/node@25.5.2) + '@inquirer/number': 3.0.23(@types/node@25.5.2) + '@inquirer/password': 4.0.23(@types/node@25.5.2) + '@inquirer/rawlist': 4.1.11(@types/node@25.5.2) + '@inquirer/search': 3.2.2(@types/node@25.5.2) + '@inquirer/select': 4.4.2(@types/node@25.5.2) optionalDependencies: - '@types/node': 25.0.8 + '@types/node': 25.5.2 - '@inquirer/rawlist@4.1.11(@types/node@25.0.8)': + '@inquirer/rawlist@4.1.11(@types/node@25.5.2)': dependencies: - '@inquirer/core': 10.3.2(@types/node@25.0.8) - '@inquirer/type': 3.0.10(@types/node@25.0.8) + '@inquirer/core': 10.3.2(@types/node@25.5.2) + '@inquirer/type': 3.0.10(@types/node@25.5.2) yoctocolors-cjs: 2.1.3 optionalDependencies: - '@types/node': 25.0.8 + '@types/node': 25.5.2 - '@inquirer/search@3.2.2(@types/node@25.0.8)': + '@inquirer/search@3.2.2(@types/node@25.5.2)': dependencies: - '@inquirer/core': 10.3.2(@types/node@25.0.8) + '@inquirer/core': 10.3.2(@types/node@25.5.2) '@inquirer/figures': 1.0.15 - '@inquirer/type': 3.0.10(@types/node@25.0.8) + '@inquirer/type': 3.0.10(@types/node@25.5.2) yoctocolors-cjs: 2.1.3 optionalDependencies: - '@types/node': 25.0.8 + '@types/node': 25.5.2 - '@inquirer/select@4.4.2(@types/node@25.0.8)': + '@inquirer/select@4.4.2(@types/node@25.5.2)': dependencies: '@inquirer/ansi': 1.0.2 - '@inquirer/core': 10.3.2(@types/node@25.0.8) + '@inquirer/core': 10.3.2(@types/node@25.5.2) '@inquirer/figures': 1.0.15 - '@inquirer/type': 3.0.10(@types/node@25.0.8) + '@inquirer/type': 3.0.10(@types/node@25.5.2) yoctocolors-cjs: 2.1.3 optionalDependencies: - '@types/node': 25.0.8 + '@types/node': 25.5.2 '@inquirer/type@3.0.10(@types/node@25.0.8)': optionalDependencies: '@types/node': 25.0.8 + '@inquirer/type@3.0.10(@types/node@25.5.2)': + optionalDependencies: + '@types/node': 25.5.2 + '@isaacs/cliui@8.0.2': dependencies: string-width: 5.1.2 @@ -7946,19 +7674,19 @@ snapshots: dependencies: '@sinclair/typebox': 0.34.41 - '@joshwooding/vite-plugin-react-docgen-typescript@0.6.3(typescript@5.9.3)(vite@7.3.1(@types/node@25.0.8)(terser@5.44.0)(yaml@2.7.0))': + '@joshwooding/vite-plugin-react-docgen-typescript@0.6.3(typescript@5.9.3)(vite@7.3.1(@types/node@25.5.2)(terser@5.46.1)(yaml@2.7.0))': dependencies: glob: 11.1.0 - react-docgen-typescript: 2.2.2(typescript@5.9.3) - vite: 7.3.1(@types/node@25.0.8)(terser@5.44.0)(yaml@2.7.0) + react-docgen-typescript: 2.4.0(typescript@5.9.3) + vite: 7.3.1(@types/node@25.5.2)(terser@5.46.1)(yaml@2.7.0) optionalDependencies: typescript: 5.9.3 - '@joshwooding/vite-plugin-react-docgen-typescript@0.7.0(typescript@5.9.3)(vite@7.3.1(@types/node@25.0.8)(terser@5.44.0)(yaml@2.7.0))': + '@joshwooding/vite-plugin-react-docgen-typescript@0.7.0(typescript@5.9.3)(vite@7.3.1(@types/node@25.5.2)(terser@5.46.1)(yaml@2.7.0))': dependencies: glob: 13.0.6 - react-docgen-typescript: 2.2.2(typescript@5.9.3) - vite: 7.3.1(@types/node@25.0.8)(terser@5.44.0)(yaml@2.7.0) + react-docgen-typescript: 2.4.0(typescript@5.9.3) + vite: 7.3.1(@types/node@25.5.2)(terser@5.46.1)(yaml@2.7.0) optionalDependencies: typescript: 5.9.3 @@ -8307,6 +8035,14 @@ snapshots: optionalDependencies: rollup: 4.60.0 + '@rollup/pluginutils@5.3.0(rollup@4.60.0)': + dependencies: + '@types/estree': 1.0.8 + estree-walker: 2.0.2 + picomatch: 4.0.4 + optionalDependencies: + rollup: 4.60.0 + '@rollup/rollup-android-arm-eabi@4.60.0': optional: true @@ -8447,10 +8183,10 @@ snapshots: storybook: 10.3.3(@testing-library/dom@10.4.1)(prettier@2.8.8)(react-dom@19.2.3(react@19.2.3))(react@19.2.3) ts-dedent: 2.2.0 - '@storybook/addon-docs@10.1.11(@types/react@19.2.8)(esbuild@0.25.12)(rollup@4.60.0)(storybook@10.3.3(@testing-library/dom@10.4.1)(prettier@2.8.8)(react-dom@19.2.3(react@19.2.3))(react@19.2.3))(vite@7.3.1(@types/node@25.0.8)(terser@5.44.0)(yaml@2.7.0))(webpack@5.98.0(esbuild@0.25.12))': + '@storybook/addon-docs@10.1.11(@types/react@19.2.8)(esbuild@0.25.12)(rollup@4.60.0)(storybook@10.3.3(@testing-library/dom@10.4.1)(prettier@2.8.8)(react-dom@19.2.3(react@19.2.3))(react@19.2.3))(vite@7.3.1(@types/node@25.5.2)(terser@5.46.1)(yaml@2.7.0))(webpack@5.98.0(esbuild@0.25.12))': dependencies: '@mdx-js/react': 3.1.1(@types/react@19.2.8)(react@19.2.3) - '@storybook/csf-plugin': 10.1.11(esbuild@0.25.12)(rollup@4.60.0)(storybook@10.3.3(@testing-library/dom@10.4.1)(prettier@2.8.8)(react-dom@19.2.3(react@19.2.3))(react@19.2.3))(vite@7.3.1(@types/node@25.0.8)(terser@5.44.0)(yaml@2.7.0))(webpack@5.98.0(esbuild@0.25.12)) + '@storybook/csf-plugin': 10.1.11(esbuild@0.25.12)(rollup@4.60.0)(storybook@10.3.3(@testing-library/dom@10.4.1)(prettier@2.8.8)(react-dom@19.2.3(react@19.2.3))(react@19.2.3))(vite@7.3.1(@types/node@25.5.2)(terser@5.46.1)(yaml@2.7.0))(webpack@5.98.0(esbuild@0.25.12)) '@storybook/icons': 2.0.1(react-dom@19.2.3(react@19.2.3))(react@19.2.3) '@storybook/react-dom-shim': 10.1.11(react-dom@19.2.3(react@19.2.3))(react@19.2.3)(storybook@10.3.3(@testing-library/dom@10.4.1)(prettier@2.8.8)(react-dom@19.2.3(react@19.2.3))(react@19.2.3)) react: 19.2.3 @@ -8464,10 +8200,10 @@ snapshots: - vite - webpack - '@storybook/addon-docs@10.3.5(@types/react@19.2.8)(esbuild@0.25.12)(rollup@4.60.0)(storybook@10.3.5(@testing-library/dom@10.4.1)(prettier@2.8.8)(react-dom@19.2.3(react@19.2.3))(react@19.2.3))(vite@7.3.1(@types/node@25.0.8)(terser@5.44.0)(yaml@2.7.0))(webpack@5.98.0(esbuild@0.25.12))': + '@storybook/addon-docs@10.3.5(@types/react@19.2.8)(esbuild@0.25.12)(rollup@4.60.0)(storybook@10.3.5(@testing-library/dom@10.4.1)(prettier@2.8.8)(react-dom@19.2.3(react@19.2.3))(react@19.2.3))(vite@7.3.1(@types/node@25.5.2)(terser@5.46.1)(yaml@2.7.0))(webpack@5.98.0(esbuild@0.25.12))': dependencies: '@mdx-js/react': 3.1.1(@types/react@19.2.8)(react@19.2.4) - '@storybook/csf-plugin': 10.3.5(esbuild@0.25.12)(rollup@4.60.0)(storybook@10.3.5(@testing-library/dom@10.4.1)(prettier@2.8.8)(react-dom@19.2.3(react@19.2.3))(react@19.2.3))(vite@7.3.1(@types/node@25.0.8)(terser@5.44.0)(yaml@2.7.0))(webpack@5.98.0(esbuild@0.25.12)) + '@storybook/csf-plugin': 10.3.5(esbuild@0.25.12)(rollup@4.60.0)(storybook@10.3.5(@testing-library/dom@10.4.1)(prettier@2.8.8)(react-dom@19.2.3(react@19.2.3))(react@19.2.3))(vite@7.3.1(@types/node@25.5.2)(terser@5.46.1)(yaml@2.7.0))(webpack@5.98.0(esbuild@0.25.12)) '@storybook/icons': 2.0.1(react-dom@19.2.4(react@19.2.4))(react@19.2.4) '@storybook/react-dom-shim': 10.3.5(react-dom@19.2.4(react@19.2.4))(react@19.2.4)(storybook@10.3.5(@testing-library/dom@10.4.1)(prettier@2.8.8)(react-dom@19.2.3(react@19.2.3))(react@19.2.3)) react: 19.2.4 @@ -8538,9 +8274,9 @@ snapshots: optionalDependencies: react: 19.2.3 - '@storybook/addon-mcp@0.4.2(storybook@10.3.5(@testing-library/dom@10.4.1)(prettier@2.8.8)(react-dom@19.2.3(react@19.2.3))(react@19.2.3))(typescript@5.9.3)': + '@storybook/addon-mcp@0.5.0(storybook@10.3.5(@testing-library/dom@10.4.1)(prettier@2.8.8)(react-dom@19.2.3(react@19.2.3))(react@19.2.3))(typescript@5.9.3)': dependencies: - '@storybook/mcp': 0.6.1(typescript@5.9.3) + '@storybook/mcp': 0.6.2(typescript@5.9.3) '@tmcp/adapter-valibot': 0.1.5(tmcp@1.19.3(typescript@5.9.3))(valibot@1.2.0(typescript@5.9.3)) '@tmcp/transport-http': 0.8.5(tmcp@1.19.3(typescript@5.9.3)) picoquery: 2.5.0 @@ -8623,25 +8359,25 @@ snapshots: react: 19.2.4 react-dom: 19.2.4(react@19.2.4) - '@storybook/builder-vite@10.1.11(esbuild@0.25.12)(msw@2.12.7(@types/node@25.0.8)(typescript@5.9.3))(rollup@4.60.0)(storybook@10.3.3(@testing-library/dom@10.4.1)(prettier@2.8.8)(react-dom@19.2.3(react@19.2.3))(react@19.2.3))(vite@7.3.1(@types/node@25.0.8)(terser@5.44.0)(yaml@2.7.0))(webpack@5.98.0(esbuild@0.25.12))': + '@storybook/builder-vite@10.1.11(esbuild@0.25.12)(msw@2.12.7(@types/node@25.5.2)(typescript@5.9.3))(rollup@4.60.0)(storybook@10.3.3(@testing-library/dom@10.4.1)(prettier@2.8.8)(react-dom@19.2.3(react@19.2.3))(react@19.2.3))(vite@7.3.1(@types/node@25.5.2)(terser@5.46.1)(yaml@2.7.0))(webpack@5.98.0(esbuild@0.25.12))': dependencies: - '@storybook/csf-plugin': 10.1.11(esbuild@0.25.12)(rollup@4.60.0)(storybook@10.3.3(@testing-library/dom@10.4.1)(prettier@2.8.8)(react-dom@19.2.3(react@19.2.3))(react@19.2.3))(vite@7.3.1(@types/node@25.0.8)(terser@5.44.0)(yaml@2.7.0))(webpack@5.98.0(esbuild@0.25.12)) - '@vitest/mocker': 3.2.4(msw@2.12.7(@types/node@25.0.8)(typescript@5.9.3))(vite@7.3.1(@types/node@25.0.8)(terser@5.44.0)(yaml@2.7.0)) + '@storybook/csf-plugin': 10.1.11(esbuild@0.25.12)(rollup@4.60.0)(storybook@10.3.3(@testing-library/dom@10.4.1)(prettier@2.8.8)(react-dom@19.2.3(react@19.2.3))(react@19.2.3))(vite@7.3.1(@types/node@25.5.2)(terser@5.46.1)(yaml@2.7.0))(webpack@5.98.0(esbuild@0.25.12)) + '@vitest/mocker': 3.2.4(msw@2.12.7(@types/node@25.5.2)(typescript@5.9.3))(vite@7.3.1(@types/node@25.5.2)(terser@5.46.1)(yaml@2.7.0)) storybook: 10.3.3(@testing-library/dom@10.4.1)(prettier@2.8.8)(react-dom@19.2.3(react@19.2.3))(react@19.2.3) ts-dedent: 2.2.0 - vite: 7.3.1(@types/node@25.0.8)(terser@5.44.0)(yaml@2.7.0) + vite: 7.3.1(@types/node@25.5.2)(terser@5.46.1)(yaml@2.7.0) transitivePeerDependencies: - esbuild - msw - rollup - webpack - '@storybook/builder-vite@10.3.5(esbuild@0.25.12)(rollup@4.60.0)(storybook@10.3.5(@testing-library/dom@10.4.1)(prettier@2.8.8)(react-dom@19.2.3(react@19.2.3))(react@19.2.3))(vite@7.3.1(@types/node@25.0.8)(terser@5.44.0)(yaml@2.7.0))(webpack@5.98.0(esbuild@0.25.12))': + '@storybook/builder-vite@10.3.5(esbuild@0.25.12)(rollup@4.60.0)(storybook@10.3.5(@testing-library/dom@10.4.1)(prettier@2.8.8)(react-dom@19.2.3(react@19.2.3))(react@19.2.3))(vite@7.3.1(@types/node@25.5.2)(terser@5.46.1)(yaml@2.7.0))(webpack@5.98.0(esbuild@0.25.12))': dependencies: - '@storybook/csf-plugin': 10.3.5(esbuild@0.25.12)(rollup@4.60.0)(storybook@10.3.5(@testing-library/dom@10.4.1)(prettier@2.8.8)(react-dom@19.2.3(react@19.2.3))(react@19.2.3))(vite@7.3.1(@types/node@25.0.8)(terser@5.44.0)(yaml@2.7.0))(webpack@5.98.0(esbuild@0.25.12)) + '@storybook/csf-plugin': 10.3.5(esbuild@0.25.12)(rollup@4.60.0)(storybook@10.3.5(@testing-library/dom@10.4.1)(prettier@2.8.8)(react-dom@19.2.3(react@19.2.3))(react@19.2.3))(vite@7.3.1(@types/node@25.5.2)(terser@5.46.1)(yaml@2.7.0))(webpack@5.98.0(esbuild@0.25.12)) storybook: 10.3.5(@testing-library/dom@10.4.1)(prettier@2.8.8)(react-dom@19.2.3(react@19.2.3))(react@19.2.3) ts-dedent: 2.2.0 - vite: 7.3.1(@types/node@25.0.8)(terser@5.44.0)(yaml@2.7.0) + vite: 7.3.1(@types/node@25.5.2)(terser@5.46.1)(yaml@2.7.0) transitivePeerDependencies: - esbuild - rollup @@ -8673,24 +8409,24 @@ snapshots: dependencies: ts-dedent: 2.2.0 - '@storybook/csf-plugin@10.1.11(esbuild@0.25.12)(rollup@4.60.0)(storybook@10.3.3(@testing-library/dom@10.4.1)(prettier@2.8.8)(react-dom@19.2.3(react@19.2.3))(react@19.2.3))(vite@7.3.1(@types/node@25.0.8)(terser@5.44.0)(yaml@2.7.0))(webpack@5.98.0(esbuild@0.25.12))': + '@storybook/csf-plugin@10.1.11(esbuild@0.25.12)(rollup@4.60.0)(storybook@10.3.3(@testing-library/dom@10.4.1)(prettier@2.8.8)(react-dom@19.2.3(react@19.2.3))(react@19.2.3))(vite@7.3.1(@types/node@25.5.2)(terser@5.46.1)(yaml@2.7.0))(webpack@5.98.0(esbuild@0.25.12))': dependencies: storybook: 10.3.3(@testing-library/dom@10.4.1)(prettier@2.8.8)(react-dom@19.2.3(react@19.2.3))(react@19.2.3) unplugin: 2.3.11 optionalDependencies: esbuild: 0.25.12 rollup: 4.60.0 - vite: 7.3.1(@types/node@25.0.8)(terser@5.44.0)(yaml@2.7.0) + vite: 7.3.1(@types/node@25.5.2)(terser@5.46.1)(yaml@2.7.0) webpack: 5.98.0(esbuild@0.25.12) - '@storybook/csf-plugin@10.3.5(esbuild@0.25.12)(rollup@4.60.0)(storybook@10.3.5(@testing-library/dom@10.4.1)(prettier@2.8.8)(react-dom@19.2.3(react@19.2.3))(react@19.2.3))(vite@7.3.1(@types/node@25.0.8)(terser@5.44.0)(yaml@2.7.0))(webpack@5.98.0(esbuild@0.25.12))': + '@storybook/csf-plugin@10.3.5(esbuild@0.25.12)(rollup@4.60.0)(storybook@10.3.5(@testing-library/dom@10.4.1)(prettier@2.8.8)(react-dom@19.2.3(react@19.2.3))(react@19.2.3))(vite@7.3.1(@types/node@25.5.2)(terser@5.46.1)(yaml@2.7.0))(webpack@5.98.0(esbuild@0.25.12))': dependencies: storybook: 10.3.5(@testing-library/dom@10.4.1)(prettier@2.8.8)(react-dom@19.2.3(react@19.2.3))(react@19.2.3) unplugin: 2.3.11 optionalDependencies: esbuild: 0.25.12 rollup: 4.60.0 - vite: 7.3.1(@types/node@25.0.8)(terser@5.44.0)(yaml@2.7.0) + vite: 7.3.1(@types/node@25.5.2)(terser@5.46.1)(yaml@2.7.0) webpack: 5.98.0(esbuild@0.25.12) '@storybook/csf-plugin@8.6.14(storybook@10.3.3(@testing-library/dom@10.4.1)(prettier@2.8.8)(react-dom@19.2.3(react@19.2.3))(react@19.2.3))': @@ -8754,7 +8490,7 @@ snapshots: dependencies: storybook: 10.3.3(@testing-library/dom@10.4.1)(prettier@2.8.8)(react-dom@19.2.3(react@19.2.3))(react@19.2.3) - '@storybook/mcp@0.6.1(typescript@5.9.3)': + '@storybook/mcp@0.6.2(typescript@5.9.3)': dependencies: '@tmcp/adapter-valibot': 0.1.5(tmcp@1.19.3(typescript@5.9.3))(valibot@1.2.0(typescript@5.9.3)) '@tmcp/transport-http': 0.8.5(tmcp@1.19.3(typescript@5.9.3)) @@ -8809,11 +8545,11 @@ snapshots: react-dom: 19.2.4(react@19.2.4) storybook: 10.3.3(@testing-library/dom@10.4.1)(prettier@2.8.8)(react-dom@19.2.3(react@19.2.3))(react@19.2.3) - '@storybook/react-vite@10.1.11(esbuild@0.25.12)(msw@2.12.7(@types/node@25.0.8)(typescript@5.9.3))(react-dom@19.2.3(react@19.2.3))(react@19.2.3)(rollup@4.60.0)(storybook@10.3.3(@testing-library/dom@10.4.1)(prettier@2.8.8)(react-dom@19.2.3(react@19.2.3))(react@19.2.3))(typescript@5.9.3)(vite@7.3.1(@types/node@25.0.8)(terser@5.44.0)(yaml@2.7.0))(webpack@5.98.0(esbuild@0.25.12))': + '@storybook/react-vite@10.1.11(esbuild@0.25.12)(msw@2.12.7(@types/node@25.5.2)(typescript@5.9.3))(react-dom@19.2.3(react@19.2.3))(react@19.2.3)(rollup@4.60.0)(storybook@10.3.3(@testing-library/dom@10.4.1)(prettier@2.8.8)(react-dom@19.2.3(react@19.2.3))(react@19.2.3))(typescript@5.9.3)(vite@7.3.1(@types/node@25.5.2)(terser@5.46.1)(yaml@2.7.0))(webpack@5.98.0(esbuild@0.25.12))': dependencies: - '@joshwooding/vite-plugin-react-docgen-typescript': 0.6.3(typescript@5.9.3)(vite@7.3.1(@types/node@25.0.8)(terser@5.44.0)(yaml@2.7.0)) + '@joshwooding/vite-plugin-react-docgen-typescript': 0.6.3(typescript@5.9.3)(vite@7.3.1(@types/node@25.5.2)(terser@5.46.1)(yaml@2.7.0)) '@rollup/pluginutils': 5.1.4(rollup@4.60.0) - '@storybook/builder-vite': 10.1.11(esbuild@0.25.12)(msw@2.12.7(@types/node@25.0.8)(typescript@5.9.3))(rollup@4.60.0)(storybook@10.3.3(@testing-library/dom@10.4.1)(prettier@2.8.8)(react-dom@19.2.3(react@19.2.3))(react@19.2.3))(vite@7.3.1(@types/node@25.0.8)(terser@5.44.0)(yaml@2.7.0))(webpack@5.98.0(esbuild@0.25.12)) + '@storybook/builder-vite': 10.1.11(esbuild@0.25.12)(msw@2.12.7(@types/node@25.5.2)(typescript@5.9.3))(rollup@4.60.0)(storybook@10.3.3(@testing-library/dom@10.4.1)(prettier@2.8.8)(react-dom@19.2.3(react@19.2.3))(react@19.2.3))(vite@7.3.1(@types/node@25.5.2)(terser@5.46.1)(yaml@2.7.0))(webpack@5.98.0(esbuild@0.25.12)) '@storybook/react': 10.1.11(react-dom@19.2.3(react@19.2.3))(react@19.2.3)(storybook@10.3.3(@testing-library/dom@10.4.1)(prettier@2.8.8)(react-dom@19.2.3(react@19.2.3))(react@19.2.3))(typescript@5.9.3) empathic: 2.0.0 magic-string: 0.30.21 @@ -8823,7 +8559,7 @@ snapshots: resolve: 1.22.10 storybook: 10.3.3(@testing-library/dom@10.4.1)(prettier@2.8.8)(react-dom@19.2.3(react@19.2.3))(react@19.2.3) tsconfig-paths: 4.2.0 - vite: 7.3.1(@types/node@25.0.8)(terser@5.44.0)(yaml@2.7.0) + vite: 7.3.1(@types/node@25.5.2)(terser@5.46.1)(yaml@2.7.0) transitivePeerDependencies: - esbuild - msw @@ -8832,21 +8568,21 @@ snapshots: - typescript - webpack - '@storybook/react-vite@10.3.5(esbuild@0.25.12)(react-dom@19.2.3(react@19.2.3))(react@19.2.3)(rollup@4.60.0)(storybook@10.3.5(@testing-library/dom@10.4.1)(prettier@2.8.8)(react-dom@19.2.3(react@19.2.3))(react@19.2.3))(typescript@5.9.3)(vite@7.3.1(@types/node@25.0.8)(terser@5.44.0)(yaml@2.7.0))(webpack@5.98.0(esbuild@0.25.12))': + '@storybook/react-vite@10.3.5(esbuild@0.25.12)(react-dom@19.2.3(react@19.2.3))(react@19.2.3)(rollup@4.60.0)(storybook@10.3.5(@testing-library/dom@10.4.1)(prettier@2.8.8)(react-dom@19.2.3(react@19.2.3))(react@19.2.3))(typescript@5.9.3)(vite@7.3.1(@types/node@25.5.2)(terser@5.46.1)(yaml@2.7.0))(webpack@5.98.0(esbuild@0.25.12))': dependencies: - '@joshwooding/vite-plugin-react-docgen-typescript': 0.7.0(typescript@5.9.3)(vite@7.3.1(@types/node@25.0.8)(terser@5.44.0)(yaml@2.7.0)) - '@rollup/pluginutils': 5.1.4(rollup@4.60.0) - '@storybook/builder-vite': 10.3.5(esbuild@0.25.12)(rollup@4.60.0)(storybook@10.3.5(@testing-library/dom@10.4.1)(prettier@2.8.8)(react-dom@19.2.3(react@19.2.3))(react@19.2.3))(vite@7.3.1(@types/node@25.0.8)(terser@5.44.0)(yaml@2.7.0))(webpack@5.98.0(esbuild@0.25.12)) + '@joshwooding/vite-plugin-react-docgen-typescript': 0.7.0(typescript@5.9.3)(vite@7.3.1(@types/node@25.5.2)(terser@5.46.1)(yaml@2.7.0)) + '@rollup/pluginutils': 5.3.0(rollup@4.60.0) + '@storybook/builder-vite': 10.3.5(esbuild@0.25.12)(rollup@4.60.0)(storybook@10.3.5(@testing-library/dom@10.4.1)(prettier@2.8.8)(react-dom@19.2.3(react@19.2.3))(react@19.2.3))(vite@7.3.1(@types/node@25.5.2)(terser@5.46.1)(yaml@2.7.0))(webpack@5.98.0(esbuild@0.25.12)) '@storybook/react': 10.3.5(react-dom@19.2.3(react@19.2.3))(react@19.2.3)(storybook@10.3.5(@testing-library/dom@10.4.1)(prettier@2.8.8)(react-dom@19.2.3(react@19.2.3))(react@19.2.3))(typescript@5.9.3) empathic: 2.0.0 magic-string: 0.30.21 react: 19.2.3 - react-docgen: 8.0.2 + react-docgen: 8.0.3 react-dom: 19.2.3(react@19.2.3) - resolve: 1.22.10 + resolve: 1.22.11 storybook: 10.3.5(@testing-library/dom@10.4.1)(prettier@2.8.8)(react-dom@19.2.3(react@19.2.3))(react@19.2.3) tsconfig-paths: 4.2.0 - vite: 7.3.1(@types/node@25.0.8)(terser@5.44.0)(yaml@2.7.0) + vite: 7.3.1(@types/node@25.5.2)(terser@5.46.1)(yaml@2.7.0) transitivePeerDependencies: - esbuild - rollup @@ -8872,8 +8608,8 @@ snapshots: '@storybook/global': 5.0.0 '@storybook/react-dom-shim': 10.3.5(react-dom@19.2.3(react@19.2.3))(react@19.2.3)(storybook@10.3.5(@testing-library/dom@10.4.1)(prettier@2.8.8)(react-dom@19.2.3(react@19.2.3))(react@19.2.3)) react: 19.2.3 - react-docgen: 8.0.2 - react-docgen-typescript: 2.2.2(typescript@5.9.3) + react-docgen: 8.0.3 + react-docgen-typescript: 2.4.0(typescript@5.9.3) react-dom: 19.2.3(react@19.2.3) storybook: 10.3.5(@testing-library/dom@10.4.1)(prettier@2.8.8)(react-dom@19.2.3(react@19.2.3))(react@19.2.3) optionalDependencies: @@ -9047,7 +8783,7 @@ snapshots: '@tufjs/models@4.0.0': dependencies: '@tufjs/canonical-json': 2.0.0 - minimatch: 10.2.4 + minimatch: 10.2.5 '@tybys/wasm-util@0.9.0': dependencies: @@ -9080,7 +8816,7 @@ snapshots: '@types/babel__traverse@7.28.0': dependencies: - '@babel/types': 7.28.6 + '@babel/types': 7.29.0 '@types/body-parser@1.19.5': dependencies: @@ -9096,6 +8832,11 @@ snapshots: dependencies: '@types/deep-eql': 4.0.2 + '@types/chai@5.2.3': + dependencies: + '@types/deep-eql': 4.0.2 + assertion-error: 2.0.1 + '@types/connect@3.4.38': dependencies: '@types/node': 25.0.8 @@ -9162,6 +8903,10 @@ snapshots: dependencies: undici-types: 7.16.0 + '@types/node@25.5.2': + dependencies: + undici-types: 7.18.2 + '@types/normalize-package-data@2.4.4': {} '@types/paypal-checkout-components@4.0.8': {} @@ -9218,102 +8963,23 @@ snapshots: '@types/uuid@9.0.8': {} - '@typescript-eslint/eslint-plugin@8.53.0(@typescript-eslint/parser@8.53.0(eslint@9.39.2)(typescript@5.9.3))(eslint@9.39.2)(typescript@5.9.3)': - dependencies: - '@eslint-community/regexpp': 4.12.2 - '@typescript-eslint/parser': 8.53.0(eslint@9.39.2)(typescript@5.9.3) - '@typescript-eslint/scope-manager': 8.53.0 - '@typescript-eslint/type-utils': 8.53.0(eslint@9.39.2)(typescript@5.9.3) - '@typescript-eslint/utils': 8.53.0(eslint@9.39.2)(typescript@5.9.3) - '@typescript-eslint/visitor-keys': 8.53.0 - eslint: 9.39.2 - ignore: 7.0.5 - natural-compare: 1.4.0 - ts-api-utils: 2.4.0(typescript@5.9.3) - typescript: 5.9.3 - transitivePeerDependencies: - - supports-color - - '@typescript-eslint/parser@8.53.0(eslint@9.39.2)(typescript@5.9.3)': - dependencies: - '@typescript-eslint/scope-manager': 8.53.0 - '@typescript-eslint/types': 8.53.0 - '@typescript-eslint/typescript-estree': 8.53.0(typescript@5.9.3) - '@typescript-eslint/visitor-keys': 8.53.0 - debug: 4.4.3 - eslint: 9.39.2 - typescript: 5.9.3 - transitivePeerDependencies: - - supports-color - - '@typescript-eslint/project-service@8.53.0(typescript@5.9.3)': - dependencies: - '@typescript-eslint/tsconfig-utils': 8.53.0(typescript@5.9.3) - '@typescript-eslint/types': 8.53.0 - debug: 4.4.3 - typescript: 5.9.3 - transitivePeerDependencies: - - supports-color - - '@typescript-eslint/scope-manager@8.53.0': - dependencies: - '@typescript-eslint/types': 8.53.0 - '@typescript-eslint/visitor-keys': 8.53.0 - - '@typescript-eslint/tsconfig-utils@8.53.0(typescript@5.9.3)': - dependencies: - typescript: 5.9.3 - - '@typescript-eslint/type-utils@8.53.0(eslint@9.39.2)(typescript@5.9.3)': - dependencies: - '@typescript-eslint/types': 8.53.0 - '@typescript-eslint/typescript-estree': 8.53.0(typescript@5.9.3) - '@typescript-eslint/utils': 8.53.0(eslint@9.39.2)(typescript@5.9.3) - debug: 4.4.3 - eslint: 9.39.2 - ts-api-utils: 2.4.0(typescript@5.9.3) - typescript: 5.9.3 - transitivePeerDependencies: - - supports-color - - '@typescript-eslint/types@8.53.0': {} - - '@typescript-eslint/typescript-estree@8.53.0(typescript@5.9.3)': + '@valibot/to-json-schema@1.6.0(valibot@1.2.0(typescript@5.9.3))': dependencies: - '@typescript-eslint/project-service': 8.53.0(typescript@5.9.3) - '@typescript-eslint/tsconfig-utils': 8.53.0(typescript@5.9.3) - '@typescript-eslint/types': 8.53.0 - '@typescript-eslint/visitor-keys': 8.53.0 - debug: 4.4.3 - minimatch: 10.2.4 - semver: 7.7.3 - tinyglobby: 0.2.15 - ts-api-utils: 2.4.0(typescript@5.9.3) - typescript: 5.9.3 - transitivePeerDependencies: - - supports-color + valibot: 1.2.0(typescript@5.9.3) - '@typescript-eslint/utils@8.53.0(eslint@9.39.2)(typescript@5.9.3)': + '@vitejs/plugin-react@5.1.2(vite@7.3.1(@types/node@25.0.8)(terser@5.46.1)(yaml@2.7.0))': dependencies: - '@eslint-community/eslint-utils': 4.9.1(eslint@9.39.2) - '@typescript-eslint/scope-manager': 8.53.0 - '@typescript-eslint/types': 8.53.0 - '@typescript-eslint/typescript-estree': 8.53.0(typescript@5.9.3) - eslint: 9.39.2 - typescript: 5.9.3 + '@babel/core': 7.28.6 + '@babel/plugin-transform-react-jsx-self': 7.27.1(@babel/core@7.28.6) + '@babel/plugin-transform-react-jsx-source': 7.27.1(@babel/core@7.28.6) + '@rolldown/pluginutils': 1.0.0-beta.53 + '@types/babel__core': 7.20.5 + react-refresh: 0.18.0 + vite: 7.3.1(@types/node@25.0.8)(terser@5.46.1)(yaml@2.7.0) transitivePeerDependencies: - supports-color - '@typescript-eslint/visitor-keys@8.53.0': - dependencies: - '@typescript-eslint/types': 8.53.0 - eslint-visitor-keys: 4.2.1 - - '@valibot/to-json-schema@1.6.0(valibot@1.2.0(typescript@5.9.3))': - dependencies: - valibot: 1.2.0(typescript@5.9.3) - - '@vitejs/plugin-react@5.1.2(vite@7.3.1(@types/node@25.0.8)(terser@5.44.0)(yaml@2.7.0))': + '@vitejs/plugin-react@5.1.2(vite@7.3.1(@types/node@25.5.2)(terser@5.46.1)(yaml@2.7.0))': dependencies: '@babel/core': 7.28.6 '@babel/plugin-transform-react-jsx-self': 7.27.1(@babel/core@7.28.6) @@ -9321,11 +8987,11 @@ snapshots: '@rolldown/pluginutils': 1.0.0-beta.53 '@types/babel__core': 7.20.5 react-refresh: 0.18.0 - vite: 7.3.1(@types/node@25.0.8)(terser@5.44.0)(yaml@2.7.0) + vite: 7.3.1(@types/node@25.5.2)(terser@5.46.1)(yaml@2.7.0) transitivePeerDependencies: - supports-color - '@vitest/coverage-v8@4.1.2(vitest@4.1.2(@types/node@25.0.8)(jsdom@27.4.0)(msw@2.12.7(@types/node@25.0.8)(typescript@5.9.3))(vite@7.3.1(@types/node@25.0.8)(terser@5.44.0)(yaml@2.7.0)))': + '@vitest/coverage-v8@4.1.2(vitest@4.1.2(@types/node@25.0.8)(jsdom@27.4.0)(msw@2.12.7(@types/node@25.0.8)(typescript@5.9.3))(vite@7.3.1(@types/node@25.0.8)(terser@5.46.1)(yaml@2.7.0)))': dependencies: '@bcoe/v8-coverage': 1.0.2 '@vitest/utils': 4.1.2 @@ -9337,7 +9003,21 @@ snapshots: obug: 2.1.1 std-env: 4.0.0 tinyrainbow: 3.1.0 - vitest: 4.1.2(@types/node@25.0.8)(jsdom@27.4.0)(msw@2.12.7(@types/node@25.0.8)(typescript@5.9.3))(vite@7.3.1(@types/node@25.0.8)(terser@5.44.0)(yaml@2.7.0)) + vitest: 4.1.2(@types/node@25.0.8)(jsdom@27.4.0)(msw@2.12.7(@types/node@25.0.8)(typescript@5.9.3))(vite@7.3.1(@types/node@25.0.8)(terser@5.46.1)(yaml@2.7.0)) + + '@vitest/coverage-v8@4.1.2(vitest@4.1.2(@types/node@25.5.2)(jsdom@27.4.0)(msw@2.12.7(@types/node@25.5.2)(typescript@5.9.3))(vite@7.3.1(@types/node@25.5.2)(terser@5.46.1)(yaml@2.7.0)))': + dependencies: + '@bcoe/v8-coverage': 1.0.2 + '@vitest/utils': 4.1.2 + ast-v8-to-istanbul: 1.0.0 + istanbul-lib-coverage: 3.2.2 + istanbul-lib-report: 3.0.1 + istanbul-reports: 3.2.0 + magicast: 0.5.2 + obug: 2.1.1 + std-env: 4.0.0 + tinyrainbow: 3.1.0 + vitest: 4.1.2(@types/node@25.5.2)(jsdom@27.4.0)(msw@2.12.7(@types/node@25.5.2)(typescript@5.9.3))(vite@7.3.1(@types/node@25.5.2)(terser@5.46.1)(yaml@2.7.0)) '@vitest/expect@2.0.5': dependencies: @@ -9348,10 +9028,10 @@ snapshots: '@vitest/expect@3.2.4': dependencies: - '@types/chai': 5.2.2 + '@types/chai': 5.2.3 '@vitest/spy': 3.2.4 '@vitest/utils': 3.2.4 - chai: 5.2.0 + chai: 5.3.3 tinyrainbow: 2.0.0 '@vitest/expect@4.1.2': @@ -9363,23 +9043,32 @@ snapshots: chai: 6.2.2 tinyrainbow: 3.1.0 - '@vitest/mocker@3.2.4(msw@2.12.7(@types/node@25.0.8)(typescript@5.9.3))(vite@7.3.1(@types/node@25.0.8)(terser@5.44.0)(yaml@2.7.0))': + '@vitest/mocker@3.2.4(msw@2.12.7(@types/node@25.5.2)(typescript@5.9.3))(vite@7.3.1(@types/node@25.5.2)(terser@5.46.1)(yaml@2.7.0))': dependencies: '@vitest/spy': 3.2.4 estree-walker: 3.0.3 magic-string: 0.30.21 optionalDependencies: - msw: 2.12.7(@types/node@25.0.8)(typescript@5.9.3) - vite: 7.3.1(@types/node@25.0.8)(terser@5.44.0)(yaml@2.7.0) + msw: 2.12.7(@types/node@25.5.2)(typescript@5.9.3) + vite: 7.3.1(@types/node@25.5.2)(terser@5.46.1)(yaml@2.7.0) - '@vitest/mocker@4.1.2(msw@2.12.7(@types/node@25.0.8)(typescript@5.9.3))(vite@7.3.1(@types/node@25.0.8)(terser@5.44.0)(yaml@2.7.0))': + '@vitest/mocker@4.1.2(msw@2.12.7(@types/node@25.0.8)(typescript@5.9.3))(vite@7.3.1(@types/node@25.0.8)(terser@5.46.1)(yaml@2.7.0))': dependencies: '@vitest/spy': 4.1.2 estree-walker: 3.0.3 magic-string: 0.30.21 optionalDependencies: msw: 2.12.7(@types/node@25.0.8)(typescript@5.9.3) - vite: 7.3.1(@types/node@25.0.8)(terser@5.44.0)(yaml@2.7.0) + vite: 7.3.1(@types/node@25.0.8)(terser@5.46.1)(yaml@2.7.0) + + '@vitest/mocker@4.1.2(msw@2.12.7(@types/node@25.5.2)(typescript@5.9.3))(vite@7.3.1(@types/node@25.5.2)(terser@5.46.1)(yaml@2.7.0))': + dependencies: + '@vitest/spy': 4.1.2 + estree-walker: 3.0.3 + magic-string: 0.30.21 + optionalDependencies: + msw: 2.12.7(@types/node@25.5.2)(typescript@5.9.3) + vite: 7.3.1(@types/node@25.5.2)(terser@5.46.1)(yaml@2.7.0) '@vitest/pretty-format@2.0.5': dependencies: @@ -9415,7 +9104,7 @@ snapshots: '@vitest/spy@3.2.4': dependencies: - tinyspy: 4.0.3 + tinyspy: 4.0.4 '@vitest/spy@4.1.2': {} @@ -9435,7 +9124,7 @@ snapshots: '@vitest/utils@3.2.4': dependencies: '@vitest/pretty-format': 3.2.4 - loupe: 3.1.4 + loupe: 3.2.1 tinyrainbow: 2.0.0 '@vitest/utils@4.1.2': @@ -9546,12 +9235,10 @@ snapshots: abbrev@4.0.0: {} - acorn-jsx@5.3.2(acorn@8.15.0): - dependencies: - acorn: 8.15.0 - acorn@8.15.0: {} + acorn@8.16.0: {} + add-stream@1.0.0: {} agent-base@7.1.3: {} @@ -9570,17 +9257,10 @@ snapshots: ajv: 8.18.0 fast-deep-equal: 3.1.3 - ajv@6.12.6: - dependencies: - fast-deep-equal: 3.1.3 - fast-json-stable-stringify: 2.1.0 - json-schema-traverse: 0.4.1 - uri-js: 4.4.1 - ajv@8.18.0: dependencies: fast-deep-equal: 3.1.3 - fast-uri: 3.0.6 + fast-uri: 3.1.0 json-schema-traverse: 1.0.0 require-from-string: 2.0.2 @@ -9833,6 +9513,14 @@ snapshots: loupe: 3.1.4 pathval: 2.0.0 + chai@5.3.3: + dependencies: + assertion-error: 2.0.1 + check-error: 2.1.3 + deep-eql: 5.0.2 + loupe: 3.2.1 + pathval: 2.0.1 + chai@6.2.2: {} chalk@3.0.0: @@ -9860,6 +9548,8 @@ snapshots: check-error@2.1.1: {} + check-error@2.1.3: {} + chokidar@4.0.3: dependencies: readdirp: 4.1.2 @@ -10121,8 +9811,6 @@ snapshots: which-collection: 1.0.2 which-typed-array: 1.1.19 - deep-is@0.1.4: {} - default-browser-id@5.0.1: {} default-browser@5.4.0: @@ -10211,10 +9899,10 @@ snapshots: dependencies: once: 1.4.0 - enhanced-resolve@5.18.3: + enhanced-resolve@5.20.1: dependencies: graceful-fs: 4.2.11 - tapable: 2.3.0 + tapable: 2.3.2 enquirer@2.3.6: dependencies: @@ -10332,101 +10020,17 @@ snapshots: escape-string-regexp@1.0.5: {} - escape-string-regexp@4.0.0: {} - escape-string-regexp@5.0.0: {} - eslint-plugin-react-hooks@7.0.1(eslint@9.39.2): - dependencies: - '@babel/core': 7.28.6 - '@babel/parser': 7.28.5 - eslint: 9.39.2 - hermes-parser: 0.25.1 - zod: 4.2.1 - zod-validation-error: 4.0.2(zod@4.2.1) - transitivePeerDependencies: - - supports-color - - eslint-plugin-react-refresh@0.4.26(eslint@9.39.2): - dependencies: - eslint: 9.39.2 - - eslint-plugin-storybook@10.3.5(eslint@9.39.2)(storybook@10.3.5(@testing-library/dom@10.4.1)(prettier@2.8.8)(react-dom@19.2.3(react@19.2.3))(react@19.2.3))(typescript@5.9.3): - dependencies: - '@typescript-eslint/utils': 8.53.0(eslint@9.39.2)(typescript@5.9.3) - eslint: 9.39.2 - storybook: 10.3.5(@testing-library/dom@10.4.1)(prettier@2.8.8)(react-dom@19.2.3(react@19.2.3))(react@19.2.3) - transitivePeerDependencies: - - supports-color - - typescript - eslint-scope@5.1.1: dependencies: esrecurse: 4.3.0 estraverse: 4.3.0 - eslint-scope@8.4.0: - dependencies: - esrecurse: 4.3.0 - estraverse: 5.3.0 - - eslint-visitor-keys@3.4.3: {} - - eslint-visitor-keys@4.2.1: {} - - eslint@9.39.2: - dependencies: - '@eslint-community/eslint-utils': 4.9.0(eslint@9.39.2) - '@eslint-community/regexpp': 4.12.2 - '@eslint/config-array': 0.21.1 - '@eslint/config-helpers': 0.4.2 - '@eslint/core': 0.17.0 - '@eslint/eslintrc': 3.3.3 - '@eslint/js': 9.39.2 - '@eslint/plugin-kit': 0.4.1 - '@humanfs/node': 0.16.7 - '@humanwhocodes/module-importer': 1.0.1 - '@humanwhocodes/retry': 0.4.3 - '@types/estree': 1.0.8 - ajv: 6.12.6 - chalk: 4.1.2 - cross-spawn: 7.0.6 - debug: 4.4.1 - escape-string-regexp: 4.0.0 - eslint-scope: 8.4.0 - eslint-visitor-keys: 4.2.1 - espree: 10.4.0 - esquery: 1.6.0 - esutils: 2.0.3 - fast-deep-equal: 3.1.3 - file-entry-cache: 8.0.0 - find-up: 5.0.0 - glob-parent: 6.0.2 - ignore: 5.3.2 - imurmurhash: 0.1.4 - is-glob: 4.0.3 - json-stable-stringify-without-jsonify: 1.0.1 - lodash.merge: 4.6.2 - minimatch: 10.2.4 - natural-compare: 1.4.0 - optionator: 0.9.4 - transitivePeerDependencies: - - supports-color - esm-env@1.2.2: {} - espree@10.4.0: - dependencies: - acorn: 8.15.0 - acorn-jsx: 5.3.2(acorn@8.15.0) - eslint-visitor-keys: 4.2.1 - esprima@4.0.1: {} - esquery@1.6.0: - dependencies: - estraverse: 5.3.0 - esrecurse@4.3.0: dependencies: estraverse: 5.3.0 @@ -10467,11 +10071,7 @@ snapshots: fast-deep-equal@3.1.3: {} - fast-json-stable-stringify@2.1.0: {} - - fast-levenshtein@2.0.6: {} - - fast-uri@3.0.6: {} + fast-uri@3.1.0: {} fdir@6.5.0(picomatch@4.0.4): optionalDependencies: @@ -10483,10 +10083,6 @@ snapshots: dependencies: escape-string-regexp: 1.0.5 - file-entry-cache@8.0.0: - dependencies: - flat-cache: 4.0.1 - file-system-cache@2.3.0: dependencies: fs-extra: 11.1.1 @@ -10524,15 +10120,8 @@ snapshots: mlly: 1.8.0 rollup: 4.60.0 - flat-cache@4.0.1: - dependencies: - flatted: 3.3.3 - keyv: 4.5.4 - flat@5.0.2: {} - flatted@3.3.3: {} - follow-redirects@1.15.9: {} for-each@0.3.5: @@ -10690,14 +10279,10 @@ snapshots: glob@13.0.6: dependencies: - minimatch: 10.2.4 + minimatch: 10.2.5 minipass: 7.1.3 path-scurry: 2.0.2 - globals@14.0.0: {} - - globals@17.0.0: {} - globrex@0.1.2: {} gopd@1.2.0: {} @@ -10739,12 +10324,6 @@ snapshots: headers-polyfill@4.0.3: {} - hermes-estree@0.25.1: {} - - hermes-parser@0.25.1: - dependencies: - hermes-estree: 0.25.1 - highlight.js@10.7.3: {} hosted-git-info@2.8.9: {} @@ -10806,8 +10385,6 @@ snapshots: dependencies: minimatch: 10.2.4 - ignore@5.3.2: {} - ignore@7.0.5: {} import-fresh@3.3.1: @@ -10844,17 +10421,17 @@ snapshots: inject-stylesheet@6.0.2: {} - inquirer@12.9.6(@types/node@25.0.8): + inquirer@12.9.6(@types/node@25.5.2): dependencies: '@inquirer/ansi': 1.0.2 - '@inquirer/core': 10.3.2(@types/node@25.0.8) - '@inquirer/prompts': 7.10.1(@types/node@25.0.8) - '@inquirer/type': 3.0.10(@types/node@25.0.8) + '@inquirer/core': 10.3.2(@types/node@25.5.2) + '@inquirer/prompts': 7.10.1(@types/node@25.5.2) + '@inquirer/type': 3.0.10(@types/node@25.5.2) mute-stream: 2.0.0 run-async: 4.0.6 rxjs: 7.8.2 optionalDependencies: - '@types/node': 25.0.8 + '@types/node': 25.5.2 internal-slot@1.1.0: dependencies: @@ -11033,7 +10610,7 @@ snapshots: jest-worker@27.5.1: dependencies: - '@types/node': 25.0.8 + '@types/node': 25.5.2 merge-stream: 2.0.0 supports-color: 8.1.1 @@ -11086,8 +10663,6 @@ snapshots: jsesc@3.1.0: {} - json-buffer@3.0.1: {} - json-parse-better-errors@1.0.2: {} json-parse-even-better-errors@2.3.1: {} @@ -11098,12 +10673,8 @@ snapshots: json-rpc-2.0@1.7.1: {} - json-schema-traverse@0.4.1: {} - json-schema-traverse@1.0.0: {} - json-stable-stringify-without-jsonify@1.0.1: {} - json-stringify-nice@1.1.4: {} json-stringify-safe@5.0.1: {} @@ -11126,13 +10697,9 @@ snapshots: jwt-decode@4.0.0: {} - keyv@4.5.4: - dependencies: - json-buffer: 3.0.1 - kind-of@6.0.3: {} - lerna@9.0.7(@types/node@25.0.8): + lerna@9.0.7(@types/node@25.5.2): dependencies: '@npmcli/arborist': 9.1.6 '@npmcli/package-json': 7.0.2 @@ -11163,7 +10730,7 @@ snapshots: import-local: 3.1.0 ini: 1.3.8 init-package-json: 8.2.2 - inquirer: 12.9.6(@types/node@25.0.8) + inquirer: 12.9.6(@types/node@25.5.2) is-ci: 3.0.1 jest-diff: 30.2.0 js-yaml: 4.1.1 @@ -11208,11 +10775,6 @@ snapshots: - debug - supports-color - levn@0.4.1: - dependencies: - prelude-ls: 1.2.1 - type-check: 0.4.0 - libnpmaccess@10.0.3: dependencies: npm-package-arg: 13.0.1 @@ -11274,8 +10836,6 @@ snapshots: lodash.ismatch@4.4.0: {} - lodash.merge@4.6.2: {} - lodash@4.17.21: {} log-symbols@4.1.0: @@ -11291,10 +10851,14 @@ snapshots: loupe@3.1.4: {} + loupe@3.2.1: {} + lru-cache@10.4.3: {} lru-cache@11.2.4: {} + lru-cache@11.3.2: {} + lru-cache@5.1.1: dependencies: yallist: 3.1.1 @@ -11695,6 +11259,10 @@ snapshots: dependencies: brace-expansion: 5.0.5 + minimatch@10.2.5: + dependencies: + brace-expansion: 5.0.5 + minimatch@3.1.4: dependencies: brace-expansion: 1.1.12 @@ -11779,6 +11347,31 @@ snapshots: transitivePeerDependencies: - '@types/node' + msw@2.12.7(@types/node@25.5.2)(typescript@5.9.3): + dependencies: + '@inquirer/confirm': 5.1.21(@types/node@25.5.2) + '@mswjs/interceptors': 0.40.0 + '@open-draft/deferred-promise': 2.2.0 + '@types/statuses': 2.0.6 + cookie: 1.1.1 + graphql: 16.12.0 + headers-polyfill: 4.0.3 + is-node-process: 1.2.0 + outvariant: 1.4.3 + path-to-regexp: 6.3.0 + picocolors: 1.1.1 + rettime: 0.7.0 + statuses: 2.0.2 + strict-event-emitter: 0.5.1 + tough-cookie: 6.0.0 + type-fest: 5.4.1 + until-async: 3.0.2 + yargs: 17.7.2 + optionalDependencies: + typescript: 5.9.3 + transitivePeerDependencies: + - '@types/node' + mute-stream@2.0.0: {} mz@2.7.0: @@ -11789,8 +11382,6 @@ snapshots: nanoid@3.3.11: {} - natural-compare@1.4.0: {} - negotiator@1.0.0: {} neo-async@2.6.2: {} @@ -11832,7 +11423,7 @@ snapshots: normalize-package-data@2.5.0: dependencies: hosted-git-info: 2.8.9 - resolve: 1.22.10 + resolve: 1.22.11 semver: 5.7.2 validate-npm-package-license: 3.0.4 @@ -12007,15 +11598,6 @@ snapshots: is-docker: 2.2.1 is-wsl: 2.2.0 - optionator@0.9.4: - dependencies: - deep-is: 0.1.4 - fast-levenshtein: 2.0.6 - levn: 0.4.1 - prelude-ls: 1.2.1 - type-check: 0.4.0 - word-wrap: 1.2.5 - ora@5.3.0: dependencies: bl: 4.1.0 @@ -12187,7 +11769,7 @@ snapshots: path-scurry@2.0.2: dependencies: - lru-cache: 11.2.4 + lru-cache: 11.3.2 minipass: 7.1.3 path-to-regexp@6.3.0: {} @@ -12200,6 +11782,8 @@ snapshots: pathval@2.0.0: {} + pathval@2.0.1: {} + picocolors@1.1.1: {} picomatch@4.0.4: {} @@ -12256,8 +11840,6 @@ snapshots: preact@10.22.1: {} - prelude-ls@1.2.1: {} - prettier@2.8.8: optional: true @@ -12316,17 +11898,13 @@ snapshots: ramda@0.29.0: {} - randombytes@2.1.0: - dependencies: - safe-buffer: 5.2.1 - rapid-form@3.1.0(react-dom@19.2.4(react@19.2.4))(react@19.2.4): dependencies: '@example/basics': link:../../../../alessandrocasazza/Documents/GitHub/okeo-academy react: 19.2.4 react-dom: 19.2.4(react@19.2.4) - react-docgen-typescript@2.2.2(typescript@5.9.3): + react-docgen-typescript@2.4.0(typescript@5.9.3): dependencies: typescript: 5.9.3 @@ -12345,6 +11923,21 @@ snapshots: transitivePeerDependencies: - supports-color + react-docgen@8.0.3: + dependencies: + '@babel/core': 7.29.0 + '@babel/traverse': 7.29.0 + '@babel/types': 7.29.0 + '@types/babel__core': 7.20.5 + '@types/babel__traverse': 7.28.0 + '@types/doctrine': 0.0.9 + '@types/resolve': 1.20.6 + doctrine: 3.0.0 + resolve: 1.22.11 + strip-indent: 4.1.1 + transitivePeerDependencies: + - supports-color + react-dom@19.2.3(react@19.2.3): dependencies: react: 19.2.3 @@ -12521,6 +12114,12 @@ snapshots: path-parse: 1.0.7 supports-preserve-symlinks-flag: 1.0.0 + resolve@1.22.11: + dependencies: + is-core-module: 2.16.1 + path-parse: 1.0.7 + supports-preserve-symlinks-flag: 1.0.0 + restore-cursor@3.1.0: dependencies: onetime: 5.1.2 @@ -12618,9 +12217,7 @@ snapshots: semver@7.7.3: {} - serialize-javascript@6.0.2: - dependencies: - randombytes: 2.1.0 + semver@7.7.4: {} set-function-length@1.2.2: dependencies: @@ -12805,9 +12402,9 @@ snapshots: esbuild: 0.25.12 open: 10.2.0 recast: 0.23.11 - semver: 7.7.3 + semver: 7.7.4 use-sync-external-store: 1.6.0(react@19.2.3) - ws: 8.18.3 + ws: 8.20.0 optionalDependencies: prettier: 2.8.8 transitivePeerDependencies: @@ -12861,7 +12458,7 @@ snapshots: dependencies: min-indent: 1.0.1 - strip-json-comments@3.1.1: {} + strip-indent@4.1.1: {} sucrase@3.35.1: dependencies: @@ -12900,7 +12497,7 @@ snapshots: tagged-tag@1.0.0: {} - tapable@2.3.0: {} + tapable@2.3.2: {} tar-stream@2.2.0: dependencies: @@ -12922,21 +12519,20 @@ snapshots: dependencies: memoizerific: 1.11.3 - terser-webpack-plugin@5.3.14(esbuild@0.25.12)(webpack@5.98.0(esbuild@0.25.12)): + terser-webpack-plugin@5.4.0(esbuild@0.25.12)(webpack@5.98.0(esbuild@0.25.12)): dependencies: '@jridgewell/trace-mapping': 0.3.31 jest-worker: 27.5.1 schema-utils: 4.3.3 - serialize-javascript: 6.0.2 - terser: 5.44.0 + terser: 5.46.1 webpack: 5.98.0(esbuild@0.25.12) optionalDependencies: esbuild: 0.25.12 - terser@5.44.0: + terser@5.46.1: dependencies: '@jridgewell/source-map': 0.3.11 - acorn: 8.15.0 + acorn: 8.16.0 commander: 2.20.3 source-map-support: 0.5.21 @@ -12983,7 +12579,7 @@ snapshots: tinyspy@3.0.2: {} - tinyspy@4.0.3: {} + tinyspy@4.0.4: {} tldts-core@7.0.13: {} @@ -13019,10 +12615,6 @@ snapshots: trough@2.2.0: {} - ts-api-utils@2.4.0(typescript@5.9.3): - dependencies: - typescript: 5.9.3 - ts-dedent@2.2.0: {} ts-interface-checker@0.1.13: {} @@ -13075,10 +12667,6 @@ snapshots: transitivePeerDependencies: - supports-color - type-check@0.4.0: - dependencies: - prelude-ls: 1.2.1 - type-fest@0.18.1: {} type-fest@0.6.0: {} @@ -13093,17 +12681,6 @@ snapshots: typedarray@0.0.6: {} - typescript-eslint@8.53.0(eslint@9.39.2)(typescript@5.9.3): - dependencies: - '@typescript-eslint/eslint-plugin': 8.53.0(@typescript-eslint/parser@8.53.0(eslint@9.39.2)(typescript@5.9.3))(eslint@9.39.2)(typescript@5.9.3) - '@typescript-eslint/parser': 8.53.0(eslint@9.39.2)(typescript@5.9.3) - '@typescript-eslint/typescript-estree': 8.53.0(typescript@5.9.3) - '@typescript-eslint/utils': 8.53.0(eslint@9.39.2)(typescript@5.9.3) - eslint: 9.39.2 - typescript: 5.9.3 - transitivePeerDependencies: - - supports-color - typescript@4.9.5: {} typescript@5.6.1-rc: {} @@ -13117,6 +12694,8 @@ snapshots: undici-types@7.16.0: {} + undici-types@7.18.2: {} + unicode-canonical-property-names-ecmascript@2.0.1: {} unicode-emoji-modifier-base@1.0.0: {} @@ -13193,10 +12772,6 @@ snapshots: escalade: 3.2.0 picocolors: 1.1.1 - uri-js@4.4.1: - dependencies: - punycode: 2.3.1 - uri-template-matcher@1.1.2: {} use-sync-external-store@1.6.0(react@19.2.3): @@ -13234,28 +12809,39 @@ snapshots: '@types/unist': 3.0.3 vfile-message: 4.0.3 - vite-tsconfig-paths@6.0.4(typescript@5.9.3)(vite@7.3.1(@types/node@25.0.8)(terser@5.44.0)(yaml@2.7.0)): + vite-tsconfig-paths@6.0.4(typescript@5.9.3)(vite@7.3.1(@types/node@25.0.8)(terser@5.46.1)(yaml@2.7.0)): dependencies: debug: 4.4.1 globrex: 0.1.2 tsconfck: 3.1.5(typescript@5.9.3) optionalDependencies: - vite: 7.3.1(@types/node@25.0.8)(terser@5.44.0)(yaml@2.7.0) + vite: 7.3.1(@types/node@25.0.8)(terser@5.46.1)(yaml@2.7.0) transitivePeerDependencies: - supports-color - typescript - vite-tsconfig-paths@6.1.1(typescript@5.9.3)(vite@7.3.1(@types/node@25.0.8)(terser@5.44.0)(yaml@2.7.0)): + vite-tsconfig-paths@6.0.4(typescript@5.9.3)(vite@7.3.1(@types/node@25.5.2)(terser@5.46.1)(yaml@2.7.0)): + dependencies: + debug: 4.4.1 + globrex: 0.1.2 + tsconfck: 3.1.5(typescript@5.9.3) + optionalDependencies: + vite: 7.3.1(@types/node@25.5.2)(terser@5.46.1)(yaml@2.7.0) + transitivePeerDependencies: + - supports-color + - typescript + + vite-tsconfig-paths@6.1.1(typescript@5.9.3)(vite@7.3.1(@types/node@25.5.2)(terser@5.46.1)(yaml@2.7.0)): dependencies: debug: 4.4.3 globrex: 0.1.2 tsconfck: 3.1.5(typescript@5.9.3) - vite: 7.3.1(@types/node@25.0.8)(terser@5.44.0)(yaml@2.7.0) + vite: 7.3.1(@types/node@25.5.2)(terser@5.46.1)(yaml@2.7.0) transitivePeerDependencies: - supports-color - typescript - vite@7.3.1(@types/node@25.0.8)(terser@5.44.0)(yaml@2.7.0): + vite@7.3.1(@types/node@25.0.8)(terser@5.46.1)(yaml@2.7.0): dependencies: esbuild: 0.27.2 fdir: 6.5.0(picomatch@4.0.4) @@ -13266,13 +12852,27 @@ snapshots: optionalDependencies: '@types/node': 25.0.8 fsevents: 2.3.3 - terser: 5.44.0 + terser: 5.46.1 yaml: 2.7.0 - vitest@4.1.2(@types/node@25.0.8)(jsdom@27.4.0)(msw@2.12.7(@types/node@25.0.8)(typescript@5.9.3))(vite@7.3.1(@types/node@25.0.8)(terser@5.44.0)(yaml@2.7.0)): + vite@7.3.1(@types/node@25.5.2)(terser@5.46.1)(yaml@2.7.0): + dependencies: + esbuild: 0.27.2 + fdir: 6.5.0(picomatch@4.0.4) + picomatch: 4.0.4 + postcss: 8.5.6 + rollup: 4.60.0 + tinyglobby: 0.2.15 + optionalDependencies: + '@types/node': 25.5.2 + fsevents: 2.3.3 + terser: 5.46.1 + yaml: 2.7.0 + + vitest@4.1.2(@types/node@25.0.8)(jsdom@27.4.0)(msw@2.12.7(@types/node@25.0.8)(typescript@5.9.3))(vite@7.3.1(@types/node@25.0.8)(terser@5.46.1)(yaml@2.7.0)): dependencies: '@vitest/expect': 4.1.2 - '@vitest/mocker': 4.1.2(msw@2.12.7(@types/node@25.0.8)(typescript@5.9.3))(vite@7.3.1(@types/node@25.0.8)(terser@5.44.0)(yaml@2.7.0)) + '@vitest/mocker': 4.1.2(msw@2.12.7(@types/node@25.0.8)(typescript@5.9.3))(vite@7.3.1(@types/node@25.0.8)(terser@5.46.1)(yaml@2.7.0)) '@vitest/pretty-format': 4.1.2 '@vitest/runner': 4.1.2 '@vitest/snapshot': 4.1.2 @@ -13289,7 +12889,7 @@ snapshots: tinyexec: 1.0.2 tinyglobby: 0.2.15 tinyrainbow: 3.1.0 - vite: 7.3.1(@types/node@25.0.8)(terser@5.44.0)(yaml@2.7.0) + vite: 7.3.1(@types/node@25.0.8)(terser@5.46.1)(yaml@2.7.0) why-is-node-running: 2.3.0 optionalDependencies: '@types/node': 25.0.8 @@ -13297,13 +12897,41 @@ snapshots: transitivePeerDependencies: - msw + vitest@4.1.2(@types/node@25.5.2)(jsdom@27.4.0)(msw@2.12.7(@types/node@25.5.2)(typescript@5.9.3))(vite@7.3.1(@types/node@25.5.2)(terser@5.46.1)(yaml@2.7.0)): + dependencies: + '@vitest/expect': 4.1.2 + '@vitest/mocker': 4.1.2(msw@2.12.7(@types/node@25.5.2)(typescript@5.9.3))(vite@7.3.1(@types/node@25.5.2)(terser@5.46.1)(yaml@2.7.0)) + '@vitest/pretty-format': 4.1.2 + '@vitest/runner': 4.1.2 + '@vitest/snapshot': 4.1.2 + '@vitest/spy': 4.1.2 + '@vitest/utils': 4.1.2 + es-module-lexer: 2.0.0 + expect-type: 1.3.0 + magic-string: 0.30.21 + obug: 2.1.1 + pathe: 2.0.3 + picomatch: 4.0.4 + std-env: 4.0.0 + tinybench: 2.9.0 + tinyexec: 1.0.2 + tinyglobby: 0.2.15 + tinyrainbow: 3.1.0 + vite: 7.3.1(@types/node@25.5.2)(terser@5.46.1)(yaml@2.7.0) + why-is-node-running: 2.3.0 + optionalDependencies: + '@types/node': 25.5.2 + jsdom: 27.4.0 + transitivePeerDependencies: + - msw + w3c-xmlserializer@5.0.0: dependencies: xml-name-validator: 5.0.0 walk-up-path@4.0.0: {} - watchpack@2.4.4: + watchpack@2.5.1: dependencies: glob-to-regexp: 0.4.1 graceful-fs: 4.2.11 @@ -13314,7 +12942,7 @@ snapshots: webidl-conversions@8.0.0: {} - webpack-sources@3.3.3: {} + webpack-sources@3.3.4: {} webpack-virtual-modules@0.6.2: {} @@ -13325,10 +12953,10 @@ snapshots: '@webassemblyjs/ast': 1.14.1 '@webassemblyjs/wasm-edit': 1.14.1 '@webassemblyjs/wasm-parser': 1.14.1 - acorn: 8.15.0 + acorn: 8.16.0 browserslist: 4.28.1 chrome-trace-event: 1.0.4 - enhanced-resolve: 5.18.3 + enhanced-resolve: 5.20.1 es-module-lexer: 1.7.0 eslint-scope: 5.1.1 events: 3.3.0 @@ -13339,10 +12967,10 @@ snapshots: mime-types: 2.1.35 neo-async: 2.6.2 schema-utils: 4.3.3 - tapable: 2.3.0 - terser-webpack-plugin: 5.3.14(esbuild@0.25.12)(webpack@5.98.0(esbuild@0.25.12)) - watchpack: 2.4.4 - webpack-sources: 3.3.3 + tapable: 2.3.2 + terser-webpack-plugin: 5.4.0(esbuild@0.25.12)(webpack@5.98.0(esbuild@0.25.12)) + watchpack: 2.5.1 + webpack-sources: 3.3.4 transitivePeerDependencies: - '@swc/core' - esbuild @@ -13401,8 +13029,6 @@ snapshots: dependencies: string-width: 4.2.3 - word-wrap@1.2.5: {} - wordwrap@1.0.0: {} wrap-ansi@6.2.0: @@ -13437,6 +13063,8 @@ snapshots: ws@8.18.3: {} + ws@8.20.0: {} + wsl-utils@0.1.0: dependencies: is-wsl: 3.1.0 @@ -13485,10 +13113,4 @@ snapshots: yoctocolors-cjs@2.1.3: {} - zod-validation-error@4.0.2(zod@4.2.1): - dependencies: - zod: 4.2.1 - - zod@4.2.1: {} - zwitch@2.0.4: {}