@callimacus/thamyr-core 4.14.1 → 4.16.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
@@ -493,6 +493,20 @@ type ShopifyStorefrontSettings = {
493
493
  };
494
494
  cartEnabled: boolean;
495
495
  };
496
+ type WooCommerceCart$1 = {
497
+ /**
498
+ * The site’s address: checkout opens there.
499
+ */
500
+ store: string;
501
+ /**
502
+ * The Store API root, `…/wp-json/wc/store/v1` (or `…/?rest_route=/wc/store/v1` on plain permalinks): append the route, e.g. `/cart/add-item`.
503
+ */
504
+ storeApi: string;
505
+ /**
506
+ * The `Cart-Token` header for the next cart call.
507
+ */
508
+ cartToken: string;
509
+ };
496
510
  type SkesisItemPage = {
497
511
  /**
498
512
  * The canonical page path, `/map/{locale}/{slug}/{id}`, as the sitemap lists it
@@ -837,15 +851,18 @@ type BlockPatchOutput = {
837
851
  type CartCommandOutput = {
838
852
  storyId: string;
839
853
  chapterId: string;
840
- command: 'shopify-add';
841
854
  /**
842
- * The Shopify product variant to add.
855
+ * The cart that adds it: the Shopify cart, or the WooCommerce Store API cart.
856
+ */
857
+ command: 'shopify-add' | 'woocommerce-add';
858
+ /**
859
+ * What to add: a Shopify product variant gid for `shopify-add`, a WooCommerce product or variation id for `woocommerce-add`.
843
860
  */
844
861
  variantId: string;
845
862
  quantity: number;
846
863
  item: {
847
864
  /**
848
- * The item the chat showed (`shopify:product:<gid>`).
865
+ * The item the chat showed (`shopify:product:<gid>`, `wordpress:product:<id>`).
849
866
  */
850
867
  id: string;
851
868
  name: string;
@@ -939,6 +956,10 @@ type CreateRoundContextOutput = {
939
956
  * The client runs a Shopify cart in the shopper's browser: the chat may then answer an add to the bag with a `cart-command`. Without it, an add to the bag shows the item's details.
940
957
  */
941
958
  shopifyCart?: boolean;
959
+ /**
960
+ * The client runs a WooCommerce cart in the shopper's browser: the chat may then answer an add to the bag of the store's product with a `cart-command`. Without it, an add to the bag shows the item's details.
961
+ */
962
+ woocommerceCart?: boolean;
942
963
  [key: string]: unknown;
943
964
  };
944
965
  type CustomBlockOutput = {
@@ -1096,7 +1117,7 @@ type SlDocumentOutput = {
1096
1117
  publishedAt?: string | null;
1097
1118
  unpublishedAt?: string | null;
1098
1119
  authors?: Array<string>;
1099
- source?: 'backoffice' | 'api' | 'salesforce';
1120
+ source?: 'backoffice' | 'api' | 'wordpress' | 'salesforce';
1100
1121
  slug?: string;
1101
1122
  documentGroupId: string;
1102
1123
  id: string;
@@ -1143,6 +1164,10 @@ type SlDocumentSectionOutput = {
1143
1164
  height: number;
1144
1165
  };
1145
1166
  poster?: string;
1167
+ /**
1168
+ * Length in seconds.
1169
+ */
1170
+ duration?: number;
1146
1171
  playerConfig?: {
1147
1172
  autoplay: boolean;
1148
1173
  muted: boolean;
@@ -1515,16 +1540,29 @@ type SkesisSimilarResponse = {
1515
1540
  item: SkesisItem;
1516
1541
  }>;
1517
1542
  /**
1518
- * Present only when the request set `explain: true`: what each stage of the pipeline decided, keyed by stage (search runs plan, route, retrieve, assess, relax and rank; the other pipelines a subset), plus `timings` in milliseconds. Decisions only — never what the engine was told.
1543
+ * System callers only: how the engine ran this request. Nobody else gets the key.
1519
1544
  */
1520
- trace?: {
1521
- [key: string]: unknown;
1545
+ diagnostic?: {
1546
+ /**
1547
+ * Present only when the request set `explain: true`: what each stage of the pipeline decided, keyed by stage (search runs retrieve, assess and rank; the other pipelines a subset), plus `timings` in milliseconds. Decisions only — never what the engine was told.
1548
+ */
1549
+ trace?: {
1550
+ [key: string]: unknown;
1551
+ };
1522
1552
  };
1523
1553
  };
1524
1554
  type SkesisRelatedResponse = {
1525
1555
  related: Array<{
1526
1556
  id: string;
1527
1557
  item: SkesisItem;
1558
+ /**
1559
+ * Which way the edge that surfaced the hit runs: `forward`, the anchor references the hit; `reverse`, the hit references the anchor. Under the fallback (`usedFallback`), relative to the neighbour whose edges were used.
1560
+ */
1561
+ direction: 'forward' | 'reverse';
1562
+ /**
1563
+ * The edge's relation as its source stored it, e.g. a commerce platform's recommendation type. Absent when the edge has none.
1564
+ */
1565
+ relation?: string;
1528
1566
  }>;
1529
1567
  siblingColors: Array<{
1530
1568
  id: string;
@@ -1532,10 +1570,15 @@ type SkesisRelatedResponse = {
1532
1570
  }>;
1533
1571
  usedFallback: boolean;
1534
1572
  /**
1535
- * Present only when the request set `explain: true`: what each stage of the pipeline decided, keyed by stage (search runs plan, route, retrieve, assess, relax and rank; the other pipelines a subset), plus `timings` in milliseconds. Decisions only — never what the engine was told.
1573
+ * System callers only: how the engine ran this request. Nobody else gets the key.
1536
1574
  */
1537
- trace?: {
1538
- [key: string]: unknown;
1575
+ diagnostic?: {
1576
+ /**
1577
+ * Present only when the request set `explain: true`: what each stage of the pipeline decided, keyed by stage (search runs retrieve, assess and rank; the other pipelines a subset), plus `timings` in milliseconds. Decisions only — never what the engine was told.
1578
+ */
1579
+ trace?: {
1580
+ [key: string]: unknown;
1581
+ };
1539
1582
  };
1540
1583
  };
1541
1584
  /**
@@ -3063,6 +3106,34 @@ type ShopifyGetStorefrontSettingsResponses = {
3063
3106
  */
3064
3107
  200: ShopifyStorefrontSettings;
3065
3108
  };
3109
+ type WoocommerceStartCartErrors = {
3110
+ /**
3111
+ * Validation error
3112
+ */
3113
+ 400: unknown;
3114
+ /**
3115
+ * Missing or invalid access token
3116
+ */
3117
+ 401: unknown;
3118
+ /**
3119
+ * The caller is not permitted to perform this operation
3120
+ */
3121
+ 403: PinaxForbidden;
3122
+ /**
3123
+ * No WordPress site with WooCommerce is connected to this project, or the request comes from the site’s preview
3124
+ */
3125
+ 404: PublicError;
3126
+ /**
3127
+ * The store did not answer.
3128
+ */
3129
+ 502: PublicError;
3130
+ };
3131
+ type WoocommerceStartCartResponses = {
3132
+ /**
3133
+ * Success
3134
+ */
3135
+ 200: WooCommerceCart$1;
3136
+ };
3066
3137
  type SkesisSimilarErrors = {
3067
3138
  /**
3068
3139
  * Validation error
@@ -3341,6 +3412,14 @@ declare class Shopify extends HeyApiClient {
3341
3412
  */
3342
3413
  getStorefrontSettings<ThrowOnError extends boolean = false>(options?: Options<never, ThrowOnError>): RequestResult<ShopifyGetStorefrontSettingsResponses, ShopifyGetStorefrontSettingsErrors, ThrowOnError>;
3343
3414
  }
3415
+ declare class Woocommerce extends HeyApiClient {
3416
+ /**
3417
+ * Start a WooCommerce cart
3418
+ *
3419
+ * A new, empty cart on the WooCommerce store of the WordPress site connected to the project: the site’s address, the Store API root and the cart’s first token. Every cart call after this one goes from the browser to the store with the token, and each answer carries the token to send next. Not found while no WordPress site is connected, the site sends no cart token (no WooCommerce on it), or the request comes from the site’s preview, where the cart is off.
3420
+ */
3421
+ startCart<ThrowOnError extends boolean = false>(options?: Options<never, ThrowOnError>): RequestResult<WoocommerceStartCartResponses, WoocommerceStartCartErrors, ThrowOnError>;
3422
+ }
3344
3423
  declare class Skesis extends HeyApiClient {
3345
3424
  /**
3346
3425
  * Similar items
@@ -3390,6 +3469,8 @@ declare class CallimacusApi extends HeyApiClient {
3390
3469
  get cart(): Cart;
3391
3470
  private _shopify?;
3392
3471
  get shopify(): Shopify;
3472
+ private _woocommerce?;
3473
+ get woocommerce(): Woocommerce;
3393
3474
  private _skesis?;
3394
3475
  get skesis(): Skesis;
3395
3476
  }
@@ -3453,10 +3534,11 @@ type ThamyrResponse = ThamyrResponse$1;
3453
3534
  */
3454
3535
  type BlockPatch = BlockPatchOutput;
3455
3536
  /**
3456
- An add to the bag the chat asks the shopper's browser to make in its Shopify cart,
3457
- at most once: it comes only on the socket whose round asked for it, only to a client
3458
- that declared `context.shopifyCart`, and is never stored with the round, so a replay
3459
- never sends it again. Run it with the Shopify cart (`@callimacus/thamyr-react` does).
3537
+ An add to the bag the chat asks the shopper's browser to make in its Shopify or
3538
+ WooCommerce cart, at most once: it comes only on the socket whose round asked for it,
3539
+ only to a client that declared `context.shopifyCart` or `context.woocommerceCart`, and
3540
+ is never stored with the round, so a replay never sends it again. Run it with the cart
3541
+ its `command` names (`@callimacus/thamyr-react` does).
3460
3542
  */
3461
3543
  type CartCommand = CartCommandOutput;
3462
3544
  /**
@@ -3593,6 +3675,10 @@ type InteractionContext = {
3593
3675
  The client runs a Shopify cart (`useShopifyCart`): a round that declares it may get the chat's add to the bag as a `cart-command`.
3594
3676
  */
3595
3677
  shopifyCart?: boolean;
3678
+ /**
3679
+ The client runs a WooCommerce cart (`useWooCommerceCart`): a round that declares it may get the chat's add to the bag of the store's product as a `cart-command`.
3680
+ */
3681
+ woocommerceCart?: boolean;
3596
3682
  };
3597
3683
  type UiObserverConfig = {
3598
3684
  enabled?: boolean;
@@ -4466,6 +4552,24 @@ Whether `variantId` is a Shopify product variant gid (`gid://shopify/ProductVari
4466
4552
  */
4467
4553
  declare const isVariantGid: (variantId: string) => boolean;
4468
4554
  /**
4555
+ A lock kept in `storage` for browsers without Web Locks: a lease with an owner
4556
+ and an expiry, read back after a short pause so two tabs that wrote at once
4557
+ agree on the last writer. Bounded: a tab waits `waitMs` at most, and a lease a
4558
+ crashed tab left behind expires after `ttlMs`.
4559
+ @internal
4560
+ */
4561
+ declare function leaseLock(storage: CartStorage, timing?: {
4562
+ waitMs?: number;
4563
+ ttlMs?: number;
4564
+ retryMs?: number;
4565
+ settleMs?: number;
4566
+ }): CartLock;
4567
+ /**
4568
+ The browser's Web Locks as a {@link CartLock}; undefined where there are none.
4569
+ @internal
4570
+ */
4571
+ declare function webLocks(): CartLock | undefined;
4572
+ /**
4469
4573
  The browser's storage, or one kept in memory where the browser refuses it. Pass the same one to every
4470
4574
  cart client of a page, so they share the cart id even where the browser keeps nothing.
4471
4575
  */
@@ -4483,6 +4587,166 @@ const {data, error, warnings} = await cart.addItem('gid://shopify/ProductVariant
4483
4587
  */
4484
4588
  declare function createShopifyCart(options: ShopifyCartClientOptions): ShopifyCartClient;
4485
4589
 
4590
+ /**
4591
+ Money as the Store API sends it: an integer string in the currency's minor unit, so `"1999"` with `currency_minor_unit: 2` is 19.99.
4592
+ */
4593
+ type WooCommerceMoney = {
4594
+ currency_code: string;
4595
+ currency_minor_unit: number;
4596
+ currency_symbol: string;
4597
+ };
4598
+ type WooCommerceCartItem = {
4599
+ /**
4600
+ The line's key: what `removeItem` and `updateQuantity` take.
4601
+ */
4602
+ key: string;
4603
+ /**
4604
+ The product, or the variation, the line holds.
4605
+ */
4606
+ id: number;
4607
+ quantity: number;
4608
+ name: string;
4609
+ permalink: string;
4610
+ images: Array<{
4611
+ src: string;
4612
+ thumbnail: string;
4613
+ alt: string;
4614
+ }>;
4615
+ /**
4616
+ The variation's attributes as the shopper reads them (`{attribute: 'Size', value: 'Medium'}`).
4617
+ */
4618
+ variation: Array<{
4619
+ attribute: string;
4620
+ value: string;
4621
+ }>;
4622
+ prices: WooCommerceMoney & {
4623
+ price: string;
4624
+ regular_price: string;
4625
+ sale_price: string;
4626
+ };
4627
+ totals: WooCommerceMoney & {
4628
+ line_subtotal: string;
4629
+ line_total: string;
4630
+ };
4631
+ };
4632
+ /**
4633
+ The cart as the Store API answers it (`/wc/store/v1/cart`), its fields WooCommerce's own; the ones a bag shows are typed.
4634
+ */
4635
+ type WooCommerceCart = {
4636
+ items: WooCommerceCartItem[];
4637
+ items_count: number;
4638
+ totals: WooCommerceMoney & {
4639
+ total_items: string;
4640
+ total_price: string;
4641
+ total_tax: string;
4642
+ };
4643
+ /**
4644
+ The store's notices on the cart as it stands: a line it no longer sells, a quantity it cut.
4645
+ */
4646
+ errors: Array<{
4647
+ code: string;
4648
+ message: string;
4649
+ }>;
4650
+ };
4651
+ /**
4652
+ - `cart_unavailable`: no store is connected to the site's project, or the store refuses the call (a security plugin).
4653
+ - `invalid_input`: not a product id, or not a whole quantity.
4654
+ - `refused`: the store said no (sold out, not for sale, a line no longer there); its words are in `message`.
4655
+ - `no_cart`: nothing to change or check out.
4656
+ - `throttled`: the store is rate limiting (429).
4657
+ - `busy`: another tab held the cart's start for too long.
4658
+ - `network`: no answer, or none in time. The store answers a token it no longer accepts without CORS headers, so that reads as this too.
4659
+ - `http`: any other failed status.
4660
+ */
4661
+ type WooCommerceCartErrorCode = 'cart_unavailable' | 'invalid_input' | 'refused' | 'no_cart' | 'throttled' | 'busy' | 'network' | 'http';
4662
+ type WooCommerceCartError = {
4663
+ code: WooCommerceCartErrorCode;
4664
+ message: string;
4665
+ /**
4666
+ The HTTP status, when the store answered with one.
4667
+ */
4668
+ status?: number;
4669
+ /**
4670
+ The store's own code for a refusal (`woocommerce_rest_product_out_of_stock`).
4671
+ */
4672
+ storeCode?: string;
4673
+ };
4674
+ /**
4675
+ What a cart method resolves, never rejects with. `data` is the cart (`undefined`: none yet), or
4676
+ the checkout URL for `checkout`. A refusal carries no cart: read it again with `getCart`.
4677
+ */
4678
+ type WooCommerceCartResult<T = WooCommerceCart | undefined> = {
4679
+ data: T;
4680
+ error?: undefined;
4681
+ } | {
4682
+ data?: undefined;
4683
+ error: WooCommerceCartError;
4684
+ };
4685
+ /**
4686
+ What callimacus-core's `POST /api/v3/woocommerce/cart` answers: the site, its Store API root and a new cart's first token.
4687
+ */
4688
+ type WooCommerceStart = {
4689
+ store: string;
4690
+ storeApi: string;
4691
+ cartToken: string;
4692
+ };
4693
+ type WooCommerceCartClientOptions = {
4694
+ /**
4695
+ Starts a cart on the store through callimacus-core; undefined (or a rejection) when the project has no store connected.
4696
+ */
4697
+ start: () => Promise<WooCommerceStart | undefined>;
4698
+ /**
4699
+ Defaults to the global `fetch`.
4700
+ */
4701
+ fetch?: (input: string, init: RequestInit) => Promise<Response>;
4702
+ /**
4703
+ Where the token is kept: `createPageStorage()`, shared by every cart client of the page.
4704
+ */
4705
+ storage: CartStorage;
4706
+ /**
4707
+ The lock the tabs start the cart under: `navigator.locks`, or `leaseLock(storage)` where there are none.
4708
+ */
4709
+ lock: CartLock;
4710
+ /**
4711
+ Sends the shopper to checkout. Defaults to `location.assign`.
4712
+ */
4713
+ navigate?: (url: string) => void;
4714
+ };
4715
+ type WooCommerceCartClient = {
4716
+ /**
4717
+ The cart as the store has it now; `data: undefined` when there is none yet, and the store is not asked then.
4718
+ */
4719
+ getCart: () => Promise<WooCommerceCartResult>;
4720
+ /**
4721
+ Adds `quantity` (default 1) of a product or a variation, by its WooCommerce id; starts the cart on the first add.
4722
+ */
4723
+ addItem: (productId: string | number, quantity?: number) => Promise<WooCommerceCartResult>;
4724
+ /**
4725
+ Removes a line (`WooCommerceCartItem.key`).
4726
+ */
4727
+ removeItem: (key: string) => Promise<WooCommerceCartResult>;
4728
+ /**
4729
+ Sets a line's quantity; 0 removes it.
4730
+ */
4731
+ updateQuantity: (key: string, quantity: number) => Promise<WooCommerceCartResult>;
4732
+ /**
4733
+ Sends the shopper to the store's checkout with the cart's lines, and resolves its URL. The cart moves to the
4734
+ store: the bag here is empty after, whether or not the shopper buys. An empty cart goes nowhere (`no_cart`).
4735
+ */
4736
+ checkout: () => Promise<WooCommerceCartResult<string>>;
4737
+ };
4738
+ /**
4739
+ The WooCommerce cart in the shopper's browser, on the Store API of the store `start` names. Every method resolves
4740
+ a {@link WooCommerceCartResult} and never rejects.
4741
+ @example
4742
+ ```ts
4743
+ const storage = createPageStorage();
4744
+ const cart = createWooCommerceCart({start: async () => startFromCore(), storage, lock: leaseLock(storage)});
4745
+ const {data, error} = await cart.addItem(201, 1);
4746
+ ```
4747
+ */
4748
+ declare function createWooCommerceCart(options: WooCommerceCartClientOptions): WooCommerceCartClient;
4749
+
4486
4750
  /**
4487
4751
  Logger utility for Thamyr SDK
4488
4752
  Provides configurable logging that can be enabled/disabled to avoid console spam
@@ -4573,5 +4837,5 @@ declare function transformImageUrl(cdnUrl: string, edits: ImageEdits): string;
4573
4837
  */
4574
4838
  declare function randomUuid(): string;
4575
4839
 
4576
- export { ACTION_TYPES, ADD_TO_CART_RESULT_BLOCK, CallimacusApi, CallimacusEvent, CallimacusService, ChapterStatus, ClientEvents, DELIVER_RESULT_BLOCK, GalleryMode, LANDING_VALUE_MAX_LENGTH, MAX_HANDSHAKE_RETRIES, SLInputEventType, STOREFRONT_API_VERSION, ServerEvents, ThamyrHttpError, ThamyrResponseType, UserInteractionType, actionOf, addToCartResultOf, applyBlockPatch, blockKeyOf, callimacusService, cartSettingsFor, classifyConnectError, createContractClient, createPageStorage, createShopifyCart, deliverResultOf, extractTtsAudio, fieldsOf, interactionRound, isCustomBlock, isMasterProduct, isSetProduct, isVariantGid, landingRound, logger, mergeShopifySettings, parseConnectRejection, parseMapPath, randomUuid, readShopifySettings, receptorsOf, resolveMapPage, shouldRetryHandshake, transformImageUrl };
4577
- export type { Action, ActionType, AddToCartResult, BCProduct, Basket, Block, BlockPatch, BoundingBox, CallimacusErrorMessage, CartCommand, CartLock, CartStorage, Chapter, ClientInfo, ConnectRejection, ConnectionStatusCallback, ContractClient, CustomBlock, DeliverResult, DocumentIndexEntry, ErrorCallback, ErrorMessage, Gallery, GenericProduct, HomePage, Image, ImageEdits, ImageFormatEdit, ImageResizeEdit, InteractionContext, InteractionId, InteractionOptions, InteractionPayload, InteractionPayloadMap, LegacyBlock, LocalizedEPArtwork, LocalizedEPChapter, LogLevel, LoggerConfig, MapPage, MapPath, MasterProduct, MasterProductWithVariationGroup, OptionItem, ProductItem, ProductMatch, RecommendationsResponse, RiveManifest, RoundOptions, SLDocument, SLDocumentSection, SLInputEvent, ServerResponseCallback, SetProduct, ShopifyCart, ShopifyCartClient, ShopifyCartClientOptions, ShopifyCartError, ShopifyCartErrorCode, ShopifyCartLine, ShopifyCartResult, ShopifyCartSettings, ShopifyCartWarning, ShopifyConfig, ShopifyMoney, ShopifySettings, ShopifyStorefront, ShopifyUserError, SkesisItem, SkesisItemPage, SkesisRelatedResponse, SkesisSimilarResponse, Story, SuggestPayload, Suggestions, ThamyrInteractionMap, ThamyrResponse, Topic, TopicContentsPage, TopicSummary, TtsAudio, UiElement, UiObserverConfig, UiSnapshot, UserInteraction, Variant, VariationAttribute, VariationGroup, Video, WhisperPayload };
4840
+ export { ACTION_TYPES, ADD_TO_CART_RESULT_BLOCK, CallimacusApi, CallimacusEvent, CallimacusService, ChapterStatus, ClientEvents, DELIVER_RESULT_BLOCK, GalleryMode, LANDING_VALUE_MAX_LENGTH, MAX_HANDSHAKE_RETRIES, SLInputEventType, STOREFRONT_API_VERSION, ServerEvents, ThamyrHttpError, ThamyrResponseType, UserInteractionType, actionOf, addToCartResultOf, applyBlockPatch, blockKeyOf, callimacusService, cartSettingsFor, classifyConnectError, createContractClient, createPageStorage, createShopifyCart, createWooCommerceCart, deliverResultOf, extractTtsAudio, fieldsOf, interactionRound, isCustomBlock, isMasterProduct, isSetProduct, isVariantGid, landingRound, leaseLock, logger, mergeShopifySettings, parseConnectRejection, parseMapPath, randomUuid, readShopifySettings, receptorsOf, resolveMapPage, shouldRetryHandshake, transformImageUrl, webLocks };
4841
+ export type { Action, ActionType, AddToCartResult, BCProduct, Basket, Block, BlockPatch, BoundingBox, CallimacusErrorMessage, CartCommand, CartLock, CartStorage, Chapter, ClientInfo, ConnectRejection, ConnectionStatusCallback, ContractClient, CustomBlock, DeliverResult, DocumentIndexEntry, ErrorCallback, ErrorMessage, Gallery, GenericProduct, HomePage, Image, ImageEdits, ImageFormatEdit, ImageResizeEdit, InteractionContext, InteractionId, InteractionOptions, InteractionPayload, InteractionPayloadMap, LegacyBlock, LocalizedEPArtwork, LocalizedEPChapter, LogLevel, LoggerConfig, MapPage, MapPath, MasterProduct, MasterProductWithVariationGroup, OptionItem, ProductItem, ProductMatch, RecommendationsResponse, RiveManifest, RoundOptions, SLDocument, SLDocumentSection, SLInputEvent, ServerResponseCallback, SetProduct, ShopifyCart, ShopifyCartClient, ShopifyCartClientOptions, ShopifyCartError, ShopifyCartErrorCode, ShopifyCartLine, ShopifyCartResult, ShopifyCartSettings, ShopifyCartWarning, ShopifyConfig, ShopifyMoney, ShopifySettings, ShopifyStorefront, ShopifyUserError, SkesisItem, SkesisItemPage, SkesisRelatedResponse, SkesisSimilarResponse, Story, SuggestPayload, Suggestions, ThamyrInteractionMap, ThamyrResponse, Topic, TopicContentsPage, TopicSummary, TtsAudio, UiElement, UiObserverConfig, UiSnapshot, UserInteraction, Variant, VariationAttribute, VariationGroup, Video, WhisperPayload, WooCommerceCart, WooCommerceCartClient, WooCommerceCartClientOptions, WooCommerceCartError, WooCommerceCartErrorCode, WooCommerceCartItem, WooCommerceCartResult, WooCommerceMoney, WooCommerceStart };