@reactionary/hcl 0.9.8 → 0.9.11
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.
- package/capabilities/cart.capability.js +411 -0
- package/capabilities/category.capability.js +111 -35
- package/capabilities/checkout.capability.js +337 -0
- package/capabilities/identity.capability.js +214 -0
- package/capabilities/inventory.capability.js +75 -0
- package/capabilities/price.capability.js +122 -0
- package/capabilities/product-search.capability.js +64 -13
- package/capabilities/product.capability.js +114 -28
- package/core/client.js +81 -90
- package/core/initialize.js +111 -5
- package/core/session-keys.js +14 -0
- package/factories/cart/cart.factory.js +135 -0
- package/factories/checkout/checkout.factory.js +131 -0
- package/factories/identity/identity.factory.js +12 -0
- package/factories/index.js +5 -0
- package/factories/inventory/inventory.factory.js +38 -0
- package/factories/price/price.factory.js +39 -0
- package/index.js +5 -0
- package/package.json +8 -5
- package/schema/capabilities.schema.js +2 -0
- package/schema/configuration.schema.js +9 -1
- package/src/capabilities/cart.capability.d.ts +69 -0
- package/src/capabilities/category.capability.d.ts +20 -1
- package/src/capabilities/checkout.capability.d.ts +41 -0
- package/src/capabilities/identity.capability.d.ts +29 -0
- package/src/capabilities/inventory.capability.d.ts +13 -0
- package/src/capabilities/price.capability.d.ts +16 -0
- package/src/capabilities/product-search.capability.d.ts +7 -2
- package/src/capabilities/product.capability.d.ts +14 -2
- package/src/core/client.d.ts +41 -14
- package/src/core/initialize.types.d.ts +11 -5
- package/src/core/session-keys.d.ts +14 -0
- package/src/factories/cart/cart.factory.d.ts +11 -0
- package/src/factories/checkout/checkout.factory.d.ts +11 -0
- package/src/factories/identity/identity.factory.d.ts +7 -0
- package/src/factories/index.d.ts +5 -0
- package/src/factories/inventory/inventory.factory.d.ts +29 -0
- package/src/factories/price/price.factory.d.ts +26 -0
- package/src/index.d.ts +5 -0
- package/src/schema/capabilities.schema.d.ts +7 -1
- package/src/schema/configuration.schema.d.ts +6 -0
- package/src/schema/hcl.schema.d.ts +321 -0
- package/src/test/test-utils.d.ts +2 -1
|
@@ -0,0 +1,69 @@
|
|
|
1
|
+
import { CartCapability, type Cache, type CartFactory, type CartFactoryCartOutput, type CartFactoryIdentifierOutput, type CartFactoryWithOutput, type CartMutationApplyCoupon, type CartMutationChangeCurrency, type CartMutationCreateCart, type CartMutationDeleteCart, type CartMutationItemAdd, type CartMutationItemQuantityChange, type CartMutationItemRemove, type CartMutationRemoveCoupon, type CartMutationRenameCart, type CartQueryById, type CartQueryList, type NotFoundError, type RequestContext, type Result } from '@reactionary/core';
|
|
2
|
+
import { type HclClient } from '../core/client.js';
|
|
3
|
+
import type { HclCartFactory } from '../factories/cart/cart.factory.js';
|
|
4
|
+
import type { HclConfiguration } from '../schema/configuration.schema.js';
|
|
5
|
+
import type { HclWcsCartResponse } from '../schema/hcl.schema.js';
|
|
6
|
+
export declare class HclCartCapability<TFactory extends CartFactory = HclCartFactory> extends CartCapability<CartFactoryCartOutput<TFactory>, CartFactoryIdentifierOutput<TFactory>> {
|
|
7
|
+
protected config: HclConfiguration;
|
|
8
|
+
protected client: HclClient;
|
|
9
|
+
protected factory: CartFactoryWithOutput<TFactory>;
|
|
10
|
+
constructor(cache: Cache, context: RequestContext, config: HclConfiguration, client: HclClient, factory: CartFactoryWithOutput<TFactory>);
|
|
11
|
+
protected setPendingOrderUrl(orderId: string): string;
|
|
12
|
+
protected setPendingOrderPayload(orderId: string): {
|
|
13
|
+
orderId: string;
|
|
14
|
+
};
|
|
15
|
+
/**
|
|
16
|
+
* Set the specified order as the current pending (@self) order.
|
|
17
|
+
* After this call, @self endpoints will operate on that orderId.
|
|
18
|
+
*/
|
|
19
|
+
protected fetchSetPendingOrder(orderId: string): Promise<void>;
|
|
20
|
+
protected wcsOrderUrl(orderId: string): string;
|
|
21
|
+
/**
|
|
22
|
+
* Fetch a specific order by ID directly from the Order API.
|
|
23
|
+
* Does NOT call set_pending_order — safe to use for read-only access.
|
|
24
|
+
* Throws HclCartNotFoundError on 404.
|
|
25
|
+
*/
|
|
26
|
+
protected fetchWcsOrder(orderId: string): Promise<HclWcsCartResponse>;
|
|
27
|
+
protected cartUrl(): string;
|
|
28
|
+
/**
|
|
29
|
+
* Fetch the raw WCS cart response.
|
|
30
|
+
* If orderId is provided, uses GET /order/{orderId} directly (no side effects).
|
|
31
|
+
* Without orderId, falls back to GET /cart/@self (current pending order).
|
|
32
|
+
* Throws HclCartNotFoundError on 404.
|
|
33
|
+
*/
|
|
34
|
+
protected fetchWcsCart(orderId?: string): Promise<HclWcsCartResponse>;
|
|
35
|
+
/** Fetch and parse the current cart via the factory. */
|
|
36
|
+
protected fetchCart(orderId?: string): Promise<CartFactoryCartOutput<TFactory>>;
|
|
37
|
+
protected addOrderItemUrl(currency?: string): string;
|
|
38
|
+
protected addOrderItemPayload(partNumber: string, quantity: number): object;
|
|
39
|
+
protected updateOrderItemUrl(): string;
|
|
40
|
+
protected updateOrderItemPayload(orderItemId: string, quantity: number): object;
|
|
41
|
+
protected deleteOrderItemUrl(): string;
|
|
42
|
+
protected deleteOrderItemPayload(orderItemId: string): object;
|
|
43
|
+
protected deleteCartUrl(orderId?: string): string;
|
|
44
|
+
protected orderListUrl(): string;
|
|
45
|
+
protected createOrderUrl(): string;
|
|
46
|
+
protected createOrderParams(description?: string, currency?: string): URLSearchParams;
|
|
47
|
+
protected updateOrderDescriptionUrl(): string;
|
|
48
|
+
protected updateOrderDescriptionPayload(description: string, orderItem: Array<{
|
|
49
|
+
orderItemId: string;
|
|
50
|
+
quantity: string;
|
|
51
|
+
}>): object;
|
|
52
|
+
protected addPromotionCodeUrl(): string;
|
|
53
|
+
protected addPromotionCodePayload(code: string): {
|
|
54
|
+
promoCode: string;
|
|
55
|
+
};
|
|
56
|
+
protected removePromotionCodeUrl(code: string): string;
|
|
57
|
+
getById(payload: CartQueryById): Promise<Result<CartFactoryCartOutput<TFactory>, NotFoundError>>;
|
|
58
|
+
getActiveCartId(): Promise<Result<CartFactoryIdentifierOutput<TFactory>, NotFoundError>>;
|
|
59
|
+
add(payload: CartMutationItemAdd): Promise<Result<CartFactoryCartOutput<TFactory>>>;
|
|
60
|
+
remove(payload: CartMutationItemRemove): Promise<Result<CartFactoryCartOutput<TFactory>>>;
|
|
61
|
+
changeQuantity(payload: CartMutationItemQuantityChange): Promise<Result<CartFactoryCartOutput<TFactory>>>;
|
|
62
|
+
listCarts(payload: CartQueryList): Promise<Result<ReturnType<CartFactoryWithOutput<TFactory>['parseCartPaginatedSearchResult']>>>;
|
|
63
|
+
createCart(payload: CartMutationCreateCart): Promise<Result<CartFactoryCartOutput<TFactory>>>;
|
|
64
|
+
deleteCart(payload: CartMutationDeleteCart): Promise<Result<void>>;
|
|
65
|
+
renameCart(payload: CartMutationRenameCart): Promise<Result<CartFactoryCartOutput<TFactory>>>;
|
|
66
|
+
applyCouponCode(payload: CartMutationApplyCoupon): Promise<Result<CartFactoryCartOutput<TFactory>>>;
|
|
67
|
+
removeCouponCode(payload: CartMutationRemoveCoupon): Promise<Result<CartFactoryCartOutput<TFactory>>>;
|
|
68
|
+
changeCurrency(payload: CartMutationChangeCurrency): Promise<Result<CartFactoryCartOutput<TFactory>>>;
|
|
69
|
+
}
|
|
@@ -2,6 +2,7 @@ import { CategoryCapability, type Cache, type CategoryFactory, type CategoryFact
|
|
|
2
2
|
import type { HclConfiguration } from '../schema/configuration.schema.js';
|
|
3
3
|
import type { HclClient } from '../core/client.js';
|
|
4
4
|
import type { HclCategoryFactory } from '../factories/category/category.factory.js';
|
|
5
|
+
import type { HclFindCategoriesQuery, HclUrlResponse } from '../schema/hcl.schema.js';
|
|
5
6
|
export declare class HclCategoryCapability<TFactory extends CategoryFactory = HclCategoryFactory> extends CategoryCapability<CategoryFactoryCategoryOutput<TFactory>, CategoryFactoryPaginatedOutput<TFactory>> {
|
|
6
7
|
protected readonly config: HclConfiguration;
|
|
7
8
|
protected readonly client: HclClient;
|
|
@@ -10,6 +11,24 @@ export declare class HclCategoryCapability<TFactory extends CategoryFactory = Hc
|
|
|
10
11
|
getById(payload: CategoryQueryById): Promise<Result<CategoryFactoryCategoryOutput<TFactory>, NotFoundError>>;
|
|
11
12
|
getBySlug(payload: CategoryQueryBySlug): Promise<Result<CategoryFactoryCategoryOutput<TFactory>, NotFoundError>>;
|
|
12
13
|
getBreadcrumbPathToCategory(payload: CategoryQueryForBreadcrumb): Promise<Result<Array<CategoryFactoryCategoryOutput<TFactory>>>>;
|
|
13
|
-
findChildCategories(payload: CategoryQueryForChildCategories): Promise<Result<CategoryFactoryPaginatedOutput<TFactory
|
|
14
|
+
findChildCategories(payload: CategoryQueryForChildCategories): Promise<Result<CategoryFactoryPaginatedOutput<TFactory>, NotFoundError>>;
|
|
14
15
|
findTopCategories(payload: CategoryQueryForTopCategories): Promise<Result<CategoryFactoryPaginatedOutput<TFactory>>>;
|
|
16
|
+
protected getByIdUrl(_payload: CategoryQueryById): string;
|
|
17
|
+
protected getBySlugUrl(_token: HclUrlResponse): string;
|
|
18
|
+
protected getBreadcrumbLeafUrl(_payload: CategoryQueryForBreadcrumb): string;
|
|
19
|
+
protected getBreadcrumbAncestorsUrl(_ancestorIds: string[]): string;
|
|
20
|
+
protected findChildCategoriesParentUrl(_payload: CategoryQueryForChildCategories): string;
|
|
21
|
+
protected findChildCategoriesUrl(_parentUniqueId: string): string;
|
|
22
|
+
protected findTopCategoriesUrl(_payload: CategoryQueryForTopCategories): string;
|
|
23
|
+
protected getByIdPayload(payload: CategoryQueryById): URLSearchParams;
|
|
24
|
+
protected getBySlugPayload(token: HclUrlResponse): URLSearchParams;
|
|
25
|
+
protected getBreadcrumbLeafPayload(payload: CategoryQueryForBreadcrumb): URLSearchParams;
|
|
26
|
+
protected getBreadcrumbAncestorsPayload(ancestorIds: string[]): URLSearchParams;
|
|
27
|
+
protected findChildCategoriesParentPayload(payload: CategoryQueryForChildCategories): URLSearchParams;
|
|
28
|
+
protected findChildCategoriesPayload(parentUniqueId: string): URLSearchParams;
|
|
29
|
+
protected findTopCategoriesPayload(): URLSearchParams;
|
|
30
|
+
protected categoriesUrl(): string;
|
|
31
|
+
protected categoriesParams(query: HclFindCategoriesQuery): URLSearchParams;
|
|
32
|
+
protected urlsUrl(): string;
|
|
33
|
+
protected urlsParams(slug: string): URLSearchParams;
|
|
15
34
|
}
|
|
@@ -0,0 +1,41 @@
|
|
|
1
|
+
import { CheckoutCapability, type Cache, type CheckoutFactory, type CheckoutFactoryCheckoutOutput, type CheckoutFactoryPaymentMethodOutput, type CheckoutFactoryShippingMethodOutput, type CheckoutFactoryWithOutput, type CheckoutMutationAddPaymentInstruction, type CheckoutMutationFinalizeCheckout, type CheckoutMutationInitiateCheckout, type CheckoutMutationRemovePaymentInstruction, type CheckoutMutationSetShippingAddress, type CheckoutMutationSetShippingInstruction, type CheckoutQueryById, type CheckoutQueryForAvailablePaymentMethods, type CheckoutQueryForAvailableShippingMethods, type NotFoundError, type RequestContext, type Result } from '@reactionary/core';
|
|
2
|
+
import type { HclConfiguration } from '../schema/configuration.schema.js';
|
|
3
|
+
import { type HclClient } from '../core/client.js';
|
|
4
|
+
import type { HclCheckoutFactory } from '../factories/checkout/checkout.factory.js';
|
|
5
|
+
import type { HclWcsAddress, HclWcsCartResponse } from '../schema/hcl.schema.js';
|
|
6
|
+
export declare class HclCheckoutCapability<TFactory extends CheckoutFactory = HclCheckoutFactory> extends CheckoutCapability<CheckoutFactoryCheckoutOutput<TFactory>, CheckoutFactoryShippingMethodOutput<TFactory>, CheckoutFactoryPaymentMethodOutput<TFactory>> {
|
|
7
|
+
protected config: HclConfiguration;
|
|
8
|
+
protected client: HclClient;
|
|
9
|
+
protected factory: CheckoutFactoryWithOutput<TFactory>;
|
|
10
|
+
constructor(cache: Cache, context: RequestContext, config: HclConfiguration, client: HclClient, factory: CheckoutFactoryWithOutput<TFactory>);
|
|
11
|
+
protected cartUrl(): string;
|
|
12
|
+
/** Fetch the raw WCS cart response. Throws HclCartNotFoundError on 404. */
|
|
13
|
+
protected fetchWcsCart(): Promise<HclWcsCartResponse>;
|
|
14
|
+
/** Fetch and parse the active cart as a Checkout. */
|
|
15
|
+
protected fetchCheckout(extra?: Partial<HclWcsCartResponse & {
|
|
16
|
+
resultingOrderKey?: string;
|
|
17
|
+
}>): Promise<CheckoutFactoryCheckoutOutput<TFactory>>;
|
|
18
|
+
protected paymentMethodsUrl(): string;
|
|
19
|
+
protected addPaymentInstructionUrl(): string;
|
|
20
|
+
protected deletePaymentInstructionUrl(piId: string): string;
|
|
21
|
+
protected shippingModesUrl(): string;
|
|
22
|
+
protected shippingModesParams(): URLSearchParams;
|
|
23
|
+
protected shippingInfoUrl(): string;
|
|
24
|
+
protected setShippingInfoPayload(body: {
|
|
25
|
+
shipModeId?: string;
|
|
26
|
+
orderItemId?: string[];
|
|
27
|
+
x_addr?: HclWcsAddress;
|
|
28
|
+
}): object;
|
|
29
|
+
protected setShippingAddressForItemsPayload(orderItemIds: string[], addr: HclWcsAddress): object;
|
|
30
|
+
protected precheckoutUrl(): string;
|
|
31
|
+
protected submitCheckoutUrl(): string;
|
|
32
|
+
initiateCheckoutForCart(payload: CheckoutMutationInitiateCheckout): Promise<Result<CheckoutFactoryCheckoutOutput<TFactory>>>;
|
|
33
|
+
getById(_payload: CheckoutQueryById): Promise<Result<CheckoutFactoryCheckoutOutput<TFactory>, NotFoundError>>;
|
|
34
|
+
setShippingAddress(payload: CheckoutMutationSetShippingAddress): Promise<Result<CheckoutFactoryCheckoutOutput<TFactory>>>;
|
|
35
|
+
getAvailableShippingMethods(_payload: CheckoutQueryForAvailableShippingMethods): Promise<Result<CheckoutFactoryShippingMethodOutput<TFactory>[]>>;
|
|
36
|
+
getAvailablePaymentMethods(_payload: CheckoutQueryForAvailablePaymentMethods): Promise<Result<CheckoutFactoryPaymentMethodOutput<TFactory>[]>>;
|
|
37
|
+
addPaymentInstruction(payload: CheckoutMutationAddPaymentInstruction): Promise<Result<CheckoutFactoryCheckoutOutput<TFactory>>>;
|
|
38
|
+
removePaymentInstruction(payload: CheckoutMutationRemovePaymentInstruction): Promise<Result<CheckoutFactoryCheckoutOutput<TFactory>>>;
|
|
39
|
+
setShippingInstruction(payload: CheckoutMutationSetShippingInstruction): Promise<Result<CheckoutFactoryCheckoutOutput<TFactory>>>;
|
|
40
|
+
finalizeCheckout(_payload: CheckoutMutationFinalizeCheckout): Promise<Result<CheckoutFactoryCheckoutOutput<TFactory>>>;
|
|
41
|
+
}
|
|
@@ -0,0 +1,29 @@
|
|
|
1
|
+
import { type Cache, type IdentityFactory, type IdentityFactoryOutput, type IdentityFactoryWithOutput, type IdentityMutationLogin, type IdentityMutationLogout, type IdentityMutationRegister, type IdentityQuerySelf, IdentityCapability, type RequestContext, type Result } from '@reactionary/core';
|
|
2
|
+
import type { HclConfiguration } from '../schema/configuration.schema.js';
|
|
3
|
+
import type { HclClient } from '../core/client.js';
|
|
4
|
+
import type { HclIdentityFactory } from '../factories/identity/identity.factory.js';
|
|
5
|
+
export declare class HclIdentityCapability<TFactory extends IdentityFactory = HclIdentityFactory> extends IdentityCapability<IdentityFactoryOutput<TFactory>> {
|
|
6
|
+
protected config: HclConfiguration;
|
|
7
|
+
protected client: HclClient;
|
|
8
|
+
protected factory: IdentityFactoryWithOutput<TFactory>;
|
|
9
|
+
constructor(cache: Cache, context: RequestContext, config: HclConfiguration, client: HclClient, factory: IdentityFactoryWithOutput<TFactory>);
|
|
10
|
+
getSelf(_payload: IdentityQuerySelf): Promise<Result<IdentityFactoryOutput<TFactory>>>;
|
|
11
|
+
login(payload: IdentityMutationLogin): Promise<Result<IdentityFactoryOutput<TFactory>>>;
|
|
12
|
+
logout(_payload: IdentityMutationLogout): Promise<Result<IdentityFactoryOutput<TFactory>>>;
|
|
13
|
+
register(payload: IdentityMutationRegister): Promise<Result<IdentityFactoryOutput<TFactory>>>;
|
|
14
|
+
private storeSessionTokens;
|
|
15
|
+
private clearSessionTokens;
|
|
16
|
+
protected loginIdentityUrl(): string;
|
|
17
|
+
protected loginIdentityPayload(logonId: string, logonPassword: string): {
|
|
18
|
+
logonId: string;
|
|
19
|
+
logonPassword: string;
|
|
20
|
+
};
|
|
21
|
+
protected deleteLoginIdentityUrl(userId: string): string;
|
|
22
|
+
protected createGuestIdentityUrl(): string;
|
|
23
|
+
protected registerPersonUrl(): string;
|
|
24
|
+
protected registerPersonPayload(logonId: string, logonPassword: string): {
|
|
25
|
+
logonId: string;
|
|
26
|
+
logonPassword: string;
|
|
27
|
+
logonPasswordVerify: string;
|
|
28
|
+
};
|
|
29
|
+
}
|
|
@@ -0,0 +1,13 @@
|
|
|
1
|
+
import { InventoryCapability, type Cache, type InventoryFactory, type InventoryFactoryOutput, type InventoryFactoryWithOutput, type InventoryQueryBySKU, type NotFoundError, type RequestContext, type Result } from '@reactionary/core';
|
|
2
|
+
import type { HclConfiguration } from '../schema/configuration.schema.js';
|
|
3
|
+
import type { HclClient } from '../core/client.js';
|
|
4
|
+
import type { HclInventoryFactory } from '../factories/inventory/inventory.factory.js';
|
|
5
|
+
export declare class HclInventoryCapability<TFactory extends InventoryFactory = HclInventoryFactory> extends InventoryCapability<InventoryFactoryOutput<TFactory>> {
|
|
6
|
+
protected readonly config: HclConfiguration;
|
|
7
|
+
protected readonly client: HclClient;
|
|
8
|
+
protected readonly factory: InventoryFactoryWithOutput<TFactory>;
|
|
9
|
+
constructor(cache: Cache, context: RequestContext, config: HclConfiguration, client: HclClient, factory: InventoryFactoryWithOutput<TFactory>);
|
|
10
|
+
getBySKU(payload: InventoryQueryBySKU): Promise<Result<InventoryFactoryOutput<TFactory>, NotFoundError>>;
|
|
11
|
+
protected getBySKUUrl(payload: InventoryQueryBySKU): string;
|
|
12
|
+
protected getBySKUPayload(payload: InventoryQueryBySKU): URLSearchParams;
|
|
13
|
+
}
|
|
@@ -0,0 +1,16 @@
|
|
|
1
|
+
import { PriceCapability, type Cache, type CustomerPriceQuery, type ListPriceQuery, type PriceFactory, type PriceFactoryOutput, type PriceFactoryWithOutput, type RequestContext, type Result } from '@reactionary/core';
|
|
2
|
+
import type { HclConfiguration } from '../schema/configuration.schema.js';
|
|
3
|
+
import type { HclClient } from '../core/client.js';
|
|
4
|
+
import type { HclPriceFactory } from '../factories/price/price.factory.js';
|
|
5
|
+
export declare class HclPriceCapability<TFactory extends PriceFactory = HclPriceFactory> extends PriceCapability<PriceFactoryOutput<TFactory>> {
|
|
6
|
+
protected readonly config: HclConfiguration;
|
|
7
|
+
protected readonly client: HclClient;
|
|
8
|
+
protected readonly factory: PriceFactoryWithOutput<TFactory>;
|
|
9
|
+
constructor(cache: Cache, context: RequestContext, config: HclConfiguration, client: HclClient, factory: PriceFactoryWithOutput<TFactory>);
|
|
10
|
+
getListPrice(payload: ListPriceQuery): Promise<Result<PriceFactoryOutput<TFactory>>>;
|
|
11
|
+
getCustomerPrice(payload: CustomerPriceQuery): Promise<Result<PriceFactoryOutput<TFactory>>>;
|
|
12
|
+
protected getListPriceUrl(): string;
|
|
13
|
+
protected getListPricePayload(sku: string, priceRuleId: string): URLSearchParams;
|
|
14
|
+
protected getCustomerPriceUrl(): string;
|
|
15
|
+
protected getCustomerPricePayload(sku: string): URLSearchParams;
|
|
16
|
+
}
|
|
@@ -2,13 +2,18 @@ import { ProductSearchCapability, type Cache, type FacetValueIdentifier, type Pr
|
|
|
2
2
|
import type { HclConfiguration } from '../schema/configuration.schema.js';
|
|
3
3
|
import type { HclClient } from '../core/client.js';
|
|
4
4
|
import type { HclProductSearchFactory } from '../factories/product-search/product-search.factory.js';
|
|
5
|
-
import type { HclFindProductsQuery } from '../schema/hcl.schema.js';
|
|
5
|
+
import type { HclFindCategoriesQuery, HclFindProductsQuery } from '../schema/hcl.schema.js';
|
|
6
6
|
export declare class HclProductSearchCapability<TFactory extends ProductSearchFactory = HclProductSearchFactory> extends ProductSearchCapability<ProductSearchFactoryOutput<TFactory>> {
|
|
7
7
|
protected readonly config: HclConfiguration;
|
|
8
8
|
protected readonly client: HclClient;
|
|
9
9
|
protected readonly factory: ProductSearchFactoryWithOutput<TFactory>;
|
|
10
10
|
constructor(cache: Cache, context: RequestContext, config: HclConfiguration, client: HclClient, factory: ProductSearchFactoryWithOutput<TFactory>);
|
|
11
|
-
protected queryByTermPayload(payload: ProductSearchQueryByTerm):
|
|
11
|
+
protected queryByTermPayload(payload: ProductSearchQueryByTerm): URLSearchParams;
|
|
12
12
|
queryByTerm(payload: ProductSearchQueryByTerm): Promise<Result<ProductSearchFactoryOutput<TFactory>>>;
|
|
13
13
|
createCategoryNavigationFilter(payload: ProductSearchQueryCreateNavigationFilter): Promise<Result<FacetValueIdentifier>>;
|
|
14
|
+
protected queryByTermUrl(_payload: ProductSearchQueryByTerm): string;
|
|
15
|
+
protected productsUrl(): string;
|
|
16
|
+
protected productsParams(query: HclFindProductsQuery): URLSearchParams;
|
|
17
|
+
protected categoriesUrl(): string;
|
|
18
|
+
protected categoriesParams(query: HclFindCategoriesQuery): URLSearchParams;
|
|
14
19
|
}
|
|
@@ -2,7 +2,7 @@ import { ProductCapability, type Cache, type NotFoundError, type ProductFactory,
|
|
|
2
2
|
import type { HclConfiguration } from '../schema/configuration.schema.js';
|
|
3
3
|
import type { HclClient } from '../core/client.js';
|
|
4
4
|
import type { HclProductFactory } from '../factories/product/product.factory.js';
|
|
5
|
-
import type { HclProductResponse } from '../schema/hcl.schema.js';
|
|
5
|
+
import type { HclFindCategoriesQuery, HclFindProductsQuery, HclProductResponse, HclUrlResponse } from '../schema/hcl.schema.js';
|
|
6
6
|
export declare class HclProductCapability<TFactory extends ProductFactory = HclProductFactory> extends ProductCapability<ProductFactoryOutput<TFactory>> {
|
|
7
7
|
protected readonly config: HclConfiguration;
|
|
8
8
|
protected readonly client: HclClient;
|
|
@@ -16,5 +16,17 @@ export declare class HclProductCapability<TFactory extends ProductFactory = HclP
|
|
|
16
16
|
* category identifiers (e.g. "LivingRoomFurniture") so the factory receives
|
|
17
17
|
* human-readable keys rather than internal uniqueIDs.
|
|
18
18
|
*/
|
|
19
|
-
protected withResolvedParentCategories(data: HclProductResponse
|
|
19
|
+
protected withResolvedParentCategories(data: HclProductResponse): Promise<HclProductResponse>;
|
|
20
|
+
protected getByIdUrl(_payload: ProductQueryById): string;
|
|
21
|
+
protected getBySlugUrl(_token: HclUrlResponse): string;
|
|
22
|
+
protected getBySKUUrl(_payload: ProductQueryBySKU): string;
|
|
23
|
+
protected getByIdPayload(payload: ProductQueryById): URLSearchParams;
|
|
24
|
+
protected getBySlugPayload(token: HclUrlResponse): URLSearchParams;
|
|
25
|
+
protected getBySKUPayload(payload: ProductQueryBySKU): URLSearchParams;
|
|
26
|
+
protected productsUrl(): string;
|
|
27
|
+
protected productsParams(query: HclFindProductsQuery): URLSearchParams;
|
|
28
|
+
protected categoriesUrl(): string;
|
|
29
|
+
protected categoriesParams(query: HclFindCategoriesQuery): URLSearchParams;
|
|
30
|
+
protected urlsUrl(): string;
|
|
31
|
+
protected urlsParams(slug: string): URLSearchParams;
|
|
20
32
|
}
|
package/src/core/client.d.ts
CHANGED
|
@@ -1,19 +1,46 @@
|
|
|
1
|
+
import type { RequestContext } from '@reactionary/core';
|
|
1
2
|
import type { HclConfiguration } from '../schema/configuration.schema.js';
|
|
2
|
-
|
|
3
|
+
/** Thrown when the WCS server returns 404 for a cart endpoint (no active cart). */
|
|
4
|
+
export declare class HclCartNotFoundError extends Error {
|
|
5
|
+
constructor();
|
|
6
|
+
}
|
|
7
|
+
/**
|
|
8
|
+
* Unified HCL Commerce HTTP client.
|
|
9
|
+
*
|
|
10
|
+
* Covers both the Query Service (catalog/search) and the WCS Transaction
|
|
11
|
+
* Service through two base URL prefixes:
|
|
12
|
+
*
|
|
13
|
+
* catalogBaseUrl — {apiUrl}/search/resources
|
|
14
|
+
* transactionBaseUrl — {apiUrl}/wcs/resources/store/{storeId}
|
|
15
|
+
*
|
|
16
|
+
* Auth headers are read from the injected RequestContext on every request,
|
|
17
|
+
* so capabilities never need to extract and forward session tokens manually.
|
|
18
|
+
*
|
|
19
|
+
* Use the generic `callGet` / `callPost` / `callPut` / `callDelete` helpers
|
|
20
|
+
* in capability subclasses, passing the appropriate base URL + path, so that
|
|
21
|
+
* project-level subclasses can intercept and customise individual API calls.
|
|
22
|
+
*/
|
|
3
23
|
export declare class HclClient {
|
|
4
|
-
|
|
5
|
-
|
|
6
|
-
|
|
7
|
-
|
|
8
|
-
/**
|
|
9
|
-
|
|
10
|
-
|
|
11
|
-
|
|
12
|
-
|
|
13
|
-
|
|
24
|
+
protected readonly config: HclConfiguration;
|
|
25
|
+
protected readonly context: RequestContext;
|
|
26
|
+
/** Base URL for the Query Service (catalog / search). */
|
|
27
|
+
readonly catalogBaseUrl: string;
|
|
28
|
+
/** Base URL for the Transaction Service (WCS REST). */
|
|
29
|
+
readonly transactionBaseUrl: string;
|
|
30
|
+
constructor(config: HclConfiguration, context: RequestContext);
|
|
31
|
+
callGet<T>(url: string, params?: URLSearchParams): Promise<T>;
|
|
32
|
+
callGet<T>(url: string, params: URLSearchParams | undefined, opts: {
|
|
33
|
+
allowUndefined: true;
|
|
34
|
+
}): Promise<T | undefined>;
|
|
35
|
+
callPost<T>(url: string, body?: unknown): Promise<T>;
|
|
36
|
+
callPut<T>(url: string, body: unknown): Promise<T>;
|
|
37
|
+
callDelete(url: string, opts?: {
|
|
38
|
+
ignore404?: boolean;
|
|
39
|
+
}): Promise<void>;
|
|
14
40
|
/**
|
|
15
|
-
*
|
|
16
|
-
*
|
|
41
|
+
* Merges caller-supplied params with locale defaults (langId, currency)
|
|
42
|
+
* derived from the request context. Caller-supplied values always win.
|
|
17
43
|
*/
|
|
18
|
-
|
|
44
|
+
protected buildParams(params?: URLSearchParams): URLSearchParams;
|
|
45
|
+
protected buildHeaders(): Record<string, string>;
|
|
19
46
|
}
|
|
@@ -1,9 +1,14 @@
|
|
|
1
1
|
import type { ClientFromCapabilities } from '@reactionary/core';
|
|
2
2
|
import type { HclCapabilities } from '../schema/capabilities.schema.js';
|
|
3
|
+
import type { HclCartCapability } from '../capabilities/cart.capability.js';
|
|
4
|
+
import type { HclCheckoutCapability } from '../capabilities/checkout.capability.js';
|
|
3
5
|
import type { HclProductCapability } from '../capabilities/product.capability.js';
|
|
4
6
|
import type { HclCategoryCapability } from '../capabilities/category.capability.js';
|
|
5
7
|
import type { HclProductSearchCapability } from '../capabilities/product-search.capability.js';
|
|
6
|
-
type
|
|
8
|
+
import type { HclPriceCapability } from '../capabilities/price.capability.js';
|
|
9
|
+
import type { HclInventoryCapability } from '../capabilities/inventory.capability.js';
|
|
10
|
+
import type { HclIdentityCapability } from '../capabilities/identity.capability.js';
|
|
11
|
+
type OverridableCapabilityKey = 'product' | 'productSearch' | 'cart' | 'checkout' | 'category' | 'price' | 'inventory' | 'identity';
|
|
7
12
|
type EnabledCapability<TCapability> = TCapability extends {
|
|
8
13
|
enabled: true;
|
|
9
14
|
} ? true : false;
|
|
@@ -17,11 +22,12 @@ type ExtractCapabilityImplementation<TCapability, TDefaultCapability> = TCapabil
|
|
|
17
22
|
type DefaultCapabilityMap = {
|
|
18
23
|
product: HclProductCapability;
|
|
19
24
|
productSearch: HclProductSearchCapability;
|
|
20
|
-
cart:
|
|
21
|
-
checkout:
|
|
25
|
+
cart: HclCartCapability;
|
|
26
|
+
checkout: HclCheckoutCapability;
|
|
22
27
|
category: HclCategoryCapability;
|
|
23
|
-
price:
|
|
24
|
-
inventory:
|
|
28
|
+
price: HclPriceCapability;
|
|
29
|
+
inventory: HclInventoryCapability;
|
|
30
|
+
identity: HclIdentityCapability;
|
|
25
31
|
};
|
|
26
32
|
type CapabilityImplementationMap<T extends HclCapabilities> = {
|
|
27
33
|
[K in OverridableCapabilityKey]: ExtractCapabilityImplementation<T[K], DefaultCapabilityMap[K]>;
|
|
@@ -0,0 +1,14 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Session key constants for WCS auth data stored in RequestContext.session.
|
|
3
|
+
* All keys use the `hcl.` prefix per provider convention.
|
|
4
|
+
*
|
|
5
|
+
* Centralised here so that both HclTransactionClient (which reads them to build
|
|
6
|
+
* auth headers) and HclIdentityCapability (which writes them after login/logout)
|
|
7
|
+
* use the exact same string values.
|
|
8
|
+
*/
|
|
9
|
+
export declare const SESSION_KEY_WC_TOKEN = "hcl.WCToken";
|
|
10
|
+
export declare const SESSION_KEY_WC_TRUSTED_TOKEN = "hcl.WCTrustedToken";
|
|
11
|
+
export declare const SESSION_KEY_USER_ID = "hcl.userId";
|
|
12
|
+
export declare const SESSION_KEY_IDENTITY_TYPE = "hcl.identityType";
|
|
13
|
+
export declare const SESSION_KEY_PERSONALIZATION_ID = "hcl.personalizationID";
|
|
14
|
+
export declare const SESSION_KEY_PRICE_RULE_ID = "hcl.priceRuleId";
|
|
@@ -0,0 +1,11 @@
|
|
|
1
|
+
import type * as z from 'zod';
|
|
2
|
+
import { type CartSchema, CartIdentifierSchema, CartPaginatedSearchResultSchema, type AnyCartSchema, type AnyCartIdentifierSchema, type AnyCartPaginatedSearchResult, type CartFactory, type RequestContext, type CartQueryList } from '@reactionary/core';
|
|
3
|
+
export declare class HclCartFactory<TCartSchema extends AnyCartSchema = typeof CartSchema, TCartIdentifierSchema extends AnyCartIdentifierSchema = typeof CartIdentifierSchema, TCartPaginatedSearchResult extends AnyCartPaginatedSearchResult = typeof CartPaginatedSearchResultSchema> implements CartFactory<TCartSchema, TCartIdentifierSchema, TCartPaginatedSearchResult> {
|
|
4
|
+
readonly cartSchema: TCartSchema;
|
|
5
|
+
readonly cartIdentifierSchema: TCartIdentifierSchema;
|
|
6
|
+
readonly cartPaginatedSearchResultSchema: TCartPaginatedSearchResult;
|
|
7
|
+
constructor(cartSchema: TCartSchema, cartIdentifierSchema?: TCartIdentifierSchema, cartPaginatedSearchResultSchema?: TCartPaginatedSearchResult);
|
|
8
|
+
parseCart(context: RequestContext, data: unknown): z.output<TCartSchema>;
|
|
9
|
+
parseCartIdentifier(_context: RequestContext, data: unknown): z.output<TCartIdentifierSchema>;
|
|
10
|
+
parseCartPaginatedSearchResult(context: RequestContext, data: unknown, _query: CartQueryList): z.output<TCartPaginatedSearchResult>;
|
|
11
|
+
}
|
|
@@ -0,0 +1,11 @@
|
|
|
1
|
+
import type * as z from 'zod';
|
|
2
|
+
import { type CheckoutSchema, ShippingMethodSchema, PaymentMethodSchema, type AnyCheckoutSchema, type AnyShippingMethodSchema, type AnyPaymentMethodSchema, type CheckoutFactory, type RequestContext } from '@reactionary/core';
|
|
3
|
+
export declare class HclCheckoutFactory<TCheckoutSchema extends AnyCheckoutSchema = typeof CheckoutSchema, TShippingMethodSchema extends AnyShippingMethodSchema = typeof ShippingMethodSchema, TPaymentMethodSchema extends AnyPaymentMethodSchema = typeof PaymentMethodSchema> implements CheckoutFactory<TCheckoutSchema, TShippingMethodSchema, TPaymentMethodSchema> {
|
|
4
|
+
readonly checkoutSchema: TCheckoutSchema;
|
|
5
|
+
readonly shippingMethodSchema: TShippingMethodSchema;
|
|
6
|
+
readonly paymentMethodSchema: TPaymentMethodSchema;
|
|
7
|
+
constructor(checkoutSchema: TCheckoutSchema, shippingMethodSchema?: TShippingMethodSchema, paymentMethodSchema?: TPaymentMethodSchema);
|
|
8
|
+
parseCheckout(context: RequestContext, data: unknown): z.output<TCheckoutSchema>;
|
|
9
|
+
parseShippingMethod(_context: RequestContext, data: unknown): z.output<TShippingMethodSchema>;
|
|
10
|
+
parsePaymentMethod(_context: RequestContext, data: unknown): z.output<TPaymentMethodSchema>;
|
|
11
|
+
}
|
|
@@ -0,0 +1,7 @@
|
|
|
1
|
+
import type { AnyIdentitySchema, IdentityFactory, IdentitySchema, RequestContext } from '@reactionary/core';
|
|
2
|
+
import type * as z from 'zod';
|
|
3
|
+
export declare class HclIdentityFactory<TIdentitySchema extends AnyIdentitySchema = typeof IdentitySchema> implements IdentityFactory<TIdentitySchema> {
|
|
4
|
+
readonly identitySchema: TIdentitySchema;
|
|
5
|
+
constructor(identitySchema: TIdentitySchema);
|
|
6
|
+
parseIdentity(_context: RequestContext, data: unknown): z.output<TIdentitySchema>;
|
|
7
|
+
}
|
package/src/factories/index.d.ts
CHANGED
|
@@ -1,3 +1,8 @@
|
|
|
1
|
+
export * from './cart/cart.factory.js';
|
|
2
|
+
export * from './checkout/checkout.factory.js';
|
|
1
3
|
export * from './product/product.factory.js';
|
|
2
4
|
export * from './category/category.factory.js';
|
|
3
5
|
export * from './product-search/product-search.factory.js';
|
|
6
|
+
export * from './price/price.factory.js';
|
|
7
|
+
export * from './inventory/inventory.factory.js';
|
|
8
|
+
export * from './identity/identity.factory.js';
|
|
@@ -0,0 +1,29 @@
|
|
|
1
|
+
import type { InventorySchema, AnyInventorySchema, Inventory, InventoryFactory, RequestContext } from '@reactionary/core';
|
|
2
|
+
import type * as z from 'zod';
|
|
3
|
+
import type { HclInventoryAvailabilityItem } from '../../schema/hcl.schema.js';
|
|
4
|
+
/**
|
|
5
|
+
* Input shape for HclInventoryFactory.parseInventory.
|
|
6
|
+
* Bundles the WCS response item with request context needed to build the identifier.
|
|
7
|
+
*/
|
|
8
|
+
export interface HclInventoryFactoryInput {
|
|
9
|
+
/** One entry from InventoryAvailability[] in the WCS response. */
|
|
10
|
+
item: HclInventoryAvailabilityItem;
|
|
11
|
+
/** The requested part number / SKU (from the getBySKU payload). */
|
|
12
|
+
sku: string;
|
|
13
|
+
/** The requested fulfilment center key. Empty string means online inventory. */
|
|
14
|
+
fulfilmentCenterKey: string;
|
|
15
|
+
}
|
|
16
|
+
export declare class HclInventoryFactory<TSchema extends AnyInventorySchema = typeof InventorySchema> implements InventoryFactory<TSchema> {
|
|
17
|
+
readonly inventorySchema: TSchema;
|
|
18
|
+
constructor(inventorySchema: TSchema);
|
|
19
|
+
/**
|
|
20
|
+
* Map an HclInventoryAvailabilityItem to an Inventory model.
|
|
21
|
+
* The `data.sku` is used for the identifier since WCS items carry only an
|
|
22
|
+
* internal `productId`, not the human-readable part number.
|
|
23
|
+
*/
|
|
24
|
+
parseInventory(_context: RequestContext, data: HclInventoryFactoryInput): z.output<TSchema>;
|
|
25
|
+
/** Create an empty (out-of-stock) inventory when no matching record was found. */
|
|
26
|
+
createEmpty(sku: string, fulfilmentCenterKey: string): z.output<TSchema>;
|
|
27
|
+
}
|
|
28
|
+
export type AnyHclInventorySchema = AnyInventorySchema;
|
|
29
|
+
export type HclInventoryFactoryOutput<T extends InventoryFactory> = T extends HclInventoryFactory<infer TSchema> ? z.output<TSchema> : Inventory;
|
|
@@ -0,0 +1,26 @@
|
|
|
1
|
+
import type { PriceSchema, AnyPriceSchema, Price, PriceFactory, RequestContext } from '@reactionary/core';
|
|
2
|
+
import type * as z from 'zod';
|
|
3
|
+
import type { HclDisplayPriceItem, HclEntitledPriceItem } from '../../schema/hcl.schema.js';
|
|
4
|
+
/**
|
|
5
|
+
* Input shape for HclPriceFactory.parsePrice.
|
|
6
|
+
* Accepts items from either the /price (EntitledPrice) or /display_price (resultList) endpoints.
|
|
7
|
+
* The `item.partNumber` is used as the variant SKU identifier.
|
|
8
|
+
*/
|
|
9
|
+
export interface HclPriceFactoryInput {
|
|
10
|
+
item: HclEntitledPriceItem | HclDisplayPriceItem;
|
|
11
|
+
}
|
|
12
|
+
export declare class HclPriceFactory<TSchema extends AnyPriceSchema = typeof PriceSchema> implements PriceFactory<TSchema> {
|
|
13
|
+
readonly priceSchema: TSchema;
|
|
14
|
+
constructor(priceSchema: TSchema);
|
|
15
|
+
/**
|
|
16
|
+
* Map a price response item to a Price model.
|
|
17
|
+
* Supports both /price (EntitledPrice with capital `UnitPrice`) and
|
|
18
|
+
* /display_price (resultList with lowercase `unitPrice`) response shapes.
|
|
19
|
+
* The `item.partNumber` is used as the variant SKU identifier.
|
|
20
|
+
*/
|
|
21
|
+
parsePrice(_context: RequestContext, data: HclPriceFactoryInput): z.output<TSchema>;
|
|
22
|
+
/** Create an empty (placeholder) price when no result was found for a SKU. */
|
|
23
|
+
createEmpty(sku: string, currency: string): z.output<TSchema>;
|
|
24
|
+
}
|
|
25
|
+
export type AnyHclPriceSchema = AnyPriceSchema;
|
|
26
|
+
export type HclPriceFactoryOutput<T extends PriceFactory> = T extends HclPriceFactory<infer TSchema> ? z.output<TSchema> : Price;
|
package/src/index.d.ts
CHANGED
|
@@ -6,6 +6,11 @@ export * from './core/client.js';
|
|
|
6
6
|
export * from './core/initialize.js';
|
|
7
7
|
export * from './core/initialize.types.js';
|
|
8
8
|
export * from './factories/index.js';
|
|
9
|
+
export * from './capabilities/cart.capability.js';
|
|
10
|
+
export * from './capabilities/checkout.capability.js';
|
|
9
11
|
export * from './capabilities/product.capability.js';
|
|
10
12
|
export * from './capabilities/category.capability.js';
|
|
11
13
|
export * from './capabilities/product-search.capability.js';
|
|
14
|
+
export * from './capabilities/price.capability.js';
|
|
15
|
+
export * from './capabilities/inventory.capability.js';
|
|
16
|
+
export * from './capabilities/identity.capability.js';
|
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
import type { Cache, RequestContext, CartFactory, CartFactoryWithOutput, CartCapability, CategoryFactory, CategoryFactoryWithOutput, CategoryCapability, CheckoutFactory, CheckoutFactoryWithOutput, CheckoutCapability, InventoryFactory, InventoryFactoryWithOutput, InventoryCapability, PriceFactory, PriceFactoryWithOutput, PriceCapability, ProductFactory, ProductFactoryWithOutput, ProductCapability, ProductSearchFactory, ProductSearchFactoryWithOutput, ProductSearchCapability } from '@reactionary/core';
|
|
1
|
+
import type { Cache, RequestContext, CartFactory, CartFactoryWithOutput, CartCapability, CategoryFactory, CategoryFactoryWithOutput, CategoryCapability, CheckoutFactory, CheckoutFactoryWithOutput, CheckoutCapability, IdentityFactory, IdentityFactoryWithOutput, IdentityCapability, InventoryFactory, InventoryFactoryWithOutput, InventoryCapability, PriceFactory, PriceFactoryWithOutput, PriceCapability, ProductFactory, ProductFactoryWithOutput, ProductCapability, ProductSearchFactory, ProductSearchFactoryWithOutput, ProductSearchCapability } from '@reactionary/core';
|
|
2
2
|
import type { HclConfiguration } from './configuration.schema.js';
|
|
3
3
|
import type { HclClient } from '../core/client.js';
|
|
4
4
|
import * as z from 'zod';
|
|
@@ -33,6 +33,11 @@ export declare const HclCapabilitiesSchema: z.ZodObject<{
|
|
|
33
33
|
factory: z.ZodOptional<z.ZodUnknown>;
|
|
34
34
|
capability: z.ZodOptional<z.ZodUnknown>;
|
|
35
35
|
}, z.core.$loose>>>;
|
|
36
|
+
identity: z.ZodOptional<z.ZodOptional<z.ZodObject<{
|
|
37
|
+
enabled: z.ZodBoolean;
|
|
38
|
+
factory: z.ZodOptional<z.ZodUnknown>;
|
|
39
|
+
capability: z.ZodOptional<z.ZodUnknown>;
|
|
40
|
+
}, z.core.$loose>>>;
|
|
36
41
|
productSearch: z.ZodOptional<z.ZodOptional<z.ZodObject<{
|
|
37
42
|
enabled: z.ZodBoolean;
|
|
38
43
|
factory: z.ZodOptional<z.ZodUnknown>;
|
|
@@ -61,3 +66,4 @@ export type HclInventoryCapabilityConfig = HclCapabilityConfig<InventoryFactoryW
|
|
|
61
66
|
export type HclPriceCapabilityConfig = HclCapabilityConfig<PriceFactoryWithOutput<PriceFactory>, PriceCapability>;
|
|
62
67
|
export type HclProductCapabilityConfig = HclCapabilityConfig<ProductFactoryWithOutput<ProductFactory>, ProductCapability>;
|
|
63
68
|
export type HclProductSearchCapabilityConfig = HclCapabilityConfig<ProductSearchFactoryWithOutput<ProductSearchFactory>, ProductSearchCapability>;
|
|
69
|
+
export type HclIdentityCapabilityConfig = HclCapabilityConfig<IdentityFactoryWithOutput<IdentityFactory>, IdentityCapability>;
|
|
@@ -15,5 +15,11 @@ export declare const HclConfigurationSchema: z.ZodObject<{
|
|
|
15
15
|
productSearch: z.ZodDefault<z.ZodString>;
|
|
16
16
|
categoryBrowse: z.ZodDefault<z.ZodString>;
|
|
17
17
|
}, z.core.$loose>>;
|
|
18
|
+
/**
|
|
19
|
+
* Optional price rule ID passed to /display_price?q=byPartNumbersAndPriceRuleId.
|
|
20
|
+
* When omitted the server applies its default configured price rule.
|
|
21
|
+
* In Karkkainen this is '10003'.
|
|
22
|
+
*/
|
|
23
|
+
priceRuleId: z.ZodOptional<z.ZodString>;
|
|
18
24
|
}, z.core.$loose>;
|
|
19
25
|
export type HclConfiguration = z.infer<typeof HclConfigurationSchema>;
|