@reactionary/medusa 0.6.3

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.
Files changed (72) hide show
  1. package/README.md +11 -0
  2. package/capabilities/cart.capability.js +517 -0
  3. package/capabilities/category.capability.js +216 -0
  4. package/capabilities/checkout.capability.js +533 -0
  5. package/capabilities/identity.capability.js +128 -0
  6. package/capabilities/inventory.capability.js +142 -0
  7. package/capabilities/order-search.capability.js +161 -0
  8. package/capabilities/order.capability.js +179 -0
  9. package/capabilities/price.capability.js +120 -0
  10. package/capabilities/product-associations.capability.js +148 -0
  11. package/capabilities/product-recommendations.capability.js +116 -0
  12. package/capabilities/product-search.capability.js +177 -0
  13. package/capabilities/product.capability.js +252 -0
  14. package/capabilities/profile.capability.js +333 -0
  15. package/core/client.js +269 -0
  16. package/core/initialize.js +290 -0
  17. package/core/initialize.types.js +13 -0
  18. package/factories/cart/cart.factory.js +17 -0
  19. package/factories/category/category.factory.js +17 -0
  20. package/factories/checkout/checkout.factory.js +22 -0
  21. package/factories/identity/identity.factory.js +12 -0
  22. package/factories/index.js +12 -0
  23. package/factories/inventory/inventory.factory.js +12 -0
  24. package/factories/order/order.factory.js +12 -0
  25. package/factories/order-search/order-search.factory.js +12 -0
  26. package/factories/price/price.factory.js +12 -0
  27. package/factories/product/product.factory.js +12 -0
  28. package/factories/product-associations/product-associations.factory.js +12 -0
  29. package/factories/product-search/product-search.factory.js +12 -0
  30. package/factories/profile/profile.factory.js +12 -0
  31. package/index.js +17 -0
  32. package/package.json +17 -0
  33. package/schema/capabilities.schema.js +43 -0
  34. package/schema/configuration.schema.js +11 -0
  35. package/schema/medusa.schema.js +26 -0
  36. package/src/capabilities/cart.capability.d.ts +100 -0
  37. package/src/capabilities/category.capability.d.ts +36 -0
  38. package/src/capabilities/checkout.capability.d.ts +88 -0
  39. package/src/capabilities/identity.capability.d.ts +13 -0
  40. package/src/capabilities/inventory.capability.d.ts +21 -0
  41. package/src/capabilities/order-search.capability.d.ts +53 -0
  42. package/src/capabilities/order.capability.d.ts +49 -0
  43. package/src/capabilities/price.capability.d.ts +16 -0
  44. package/src/capabilities/product-associations.capability.d.ts +19 -0
  45. package/src/capabilities/product-recommendations.capability.d.ts +41 -0
  46. package/src/capabilities/product-search.capability.d.ts +45 -0
  47. package/src/capabilities/product.capability.d.ts +32 -0
  48. package/src/capabilities/profile.capability.d.ts +39 -0
  49. package/src/core/client.d.ts +81 -0
  50. package/src/core/initialize.d.ts +5 -0
  51. package/src/core/initialize.types.d.ts +108 -0
  52. package/src/factories/cart/cart.factory.d.ts +9 -0
  53. package/src/factories/category/category.factory.d.ts +9 -0
  54. package/src/factories/checkout/checkout.factory.d.ts +11 -0
  55. package/src/factories/identity/identity.factory.d.ts +7 -0
  56. package/src/factories/index.d.ts +12 -0
  57. package/src/factories/inventory/inventory.factory.d.ts +7 -0
  58. package/src/factories/order/order.factory.d.ts +7 -0
  59. package/src/factories/order-search/order-search.factory.d.ts +7 -0
  60. package/src/factories/price/price.factory.d.ts +9 -0
  61. package/src/factories/product/product.factory.d.ts +7 -0
  62. package/src/factories/product-associations/product-associations.factory.d.ts +7 -0
  63. package/src/factories/product-search/product-search.factory.d.ts +7 -0
  64. package/src/factories/profile/profile.factory.d.ts +7 -0
  65. package/src/index.d.ts +17 -0
  66. package/src/schema/capabilities.schema.d.ts +116 -0
  67. package/src/schema/configuration.schema.d.ts +9 -0
  68. package/src/schema/medusa.schema.d.ts +33 -0
  69. package/src/test/test-utils.d.ts +2 -0
  70. package/src/utils/medusa-helpers.d.ts +35 -0
  71. package/test/test-utils.js +12 -0
  72. package/utils/medusa-helpers.js +72 -0
@@ -0,0 +1,81 @@
1
+ import { Admin, Auth, Client, type Config, Store } from '@medusajs/js-sdk';
2
+ import type { MedusaConfiguration } from '../schema/configuration.schema.js';
3
+ import { type RequestContext } from '@reactionary/core';
4
+ import { type MedusaSession } from '../index.js';
5
+ import type { StoreProduct } from '@medusajs/types';
6
+ export declare const SESSION_KEY = "MEDUSA_PROVIDER";
7
+ export interface MedusaAuthToken {
8
+ token: string;
9
+ expires_at?: Date;
10
+ }
11
+ export interface MedusaCustomStorage {
12
+ getItem(key: string): Promise<string | null>;
13
+ setItem(key: string, value: string): Promise<void>;
14
+ removeItem(key: string): Promise<void>;
15
+ }
16
+ export declare class RequestContextTokenStore implements MedusaCustomStorage {
17
+ protected context: RequestContext;
18
+ keyPrefix: string;
19
+ constructor(context: RequestContext, keyPrefix?: string);
20
+ getItem(key: string): Promise<string | null>;
21
+ setItem(key: string, value: string): Promise<void>;
22
+ removeItem(key: string): Promise<void>;
23
+ }
24
+ declare class Medusa {
25
+ client: Client;
26
+ admin: Admin;
27
+ store: Store;
28
+ auth: Auth;
29
+ constructor(config: Config);
30
+ }
31
+ export declare class MedusaAdminAPI {
32
+ protected config: MedusaConfiguration;
33
+ protected client: Medusa;
34
+ protected context: RequestContext;
35
+ constructor(config: MedusaConfiguration, context: RequestContext);
36
+ getClient(): Promise<Medusa>;
37
+ }
38
+ export declare class MedusaAPI {
39
+ protected config: MedusaConfiguration;
40
+ protected client: Promise<Medusa> | undefined;
41
+ protected context: RequestContext;
42
+ constructor(config: MedusaConfiguration, context: RequestContext);
43
+ getActiveRegion(): Promise<{
44
+ [x: string]: unknown;
45
+ id: string;
46
+ name: string;
47
+ currency_code: string;
48
+ }>;
49
+ resolveProductForSKU(sku: string): Promise<StoreProduct>;
50
+ /**
51
+ * This function should not need to exist.
52
+ * It returns a product-id, given a SKU.
53
+ * @param sku
54
+ * @returns
55
+ */
56
+ resolveVariantId(sku: string): Promise<string>;
57
+ getClient(): Promise<Medusa>;
58
+ getSessionData(): MedusaSession;
59
+ setSessionData(sessionData: Partial<MedusaSession>): void;
60
+ register(email: string, password: string, firstName: string, lastName: string, reqCtx: RequestContext): Promise<{
61
+ id: {
62
+ userId: string;
63
+ };
64
+ type: "Registered";
65
+ } | {
66
+ type: "Anonymous";
67
+ }>;
68
+ login(email: string, password: string, reqCtx: RequestContext): Promise<{
69
+ id: {
70
+ userId: string;
71
+ };
72
+ type: "Registered";
73
+ } | {
74
+ type: "Anonymous";
75
+ }>;
76
+ logout(reqCtx: RequestContext): Promise<{
77
+ type: "Anonymous";
78
+ }>;
79
+ protected createAuthenticatedClient(reqCtx: RequestContext): Promise<Medusa>;
80
+ }
81
+ export {};
@@ -0,0 +1,5 @@
1
+ import type { Cache, RequestContext } from '@reactionary/core';
2
+ import { type MedusaCapabilities } from '../schema/capabilities.schema.js';
3
+ import { type MedusaConfiguration } from '../schema/configuration.schema.js';
4
+ import { type MedusaClientFromCapabilities } from './initialize.types.js';
5
+ export declare function withMedusaCapabilities<T extends MedusaCapabilities>(configuration: MedusaConfiguration, capabilities: T): (cache: Cache, context: RequestContext) => MedusaClientFromCapabilities<T>;
@@ -0,0 +1,108 @@
1
+ import type { CartFactory, CategoryFactory, CheckoutFactory, ClientFromCapabilities, InventoryFactory, OrderFactory, OrderSearchFactory, PriceFactory, ProductAssociationsFactory, ProductFactory, ProductSearchFactory, ProfileFactory } from '@reactionary/core';
2
+ import type { MedusaCapabilities } from '../schema/capabilities.schema.js';
3
+ import type { MedusaCartFactory } from '../factories/cart/cart.factory.js';
4
+ import type { MedusaCategoryFactory } from '../factories/category/category.factory.js';
5
+ import type { MedusaCheckoutFactory } from '../factories/checkout/checkout.factory.js';
6
+ import type { MedusaInventoryFactory } from '../factories/inventory/inventory.factory.js';
7
+ import type { MedusaOrderFactory } from '../factories/order/order.factory.js';
8
+ import type { MedusaOrderSearchFactory } from '../factories/order-search/order-search.factory.js';
9
+ import type { MedusaPriceFactory } from '../factories/price/price.factory.js';
10
+ import type { MedusaProductAssociationsFactory } from '../factories/product-associations/product-associations.factory.js';
11
+ import type { MedusaProductFactory } from '../factories/product/product.factory.js';
12
+ import type { MedusaProductSearchFactory } from '../factories/product-search/product-search.factory.js';
13
+ import type { MedusaProfileFactory } from '../factories/profile/profile.factory.js';
14
+ import type { MedusaCartCapability } from '../capabilities/cart.capability.js';
15
+ import type { MedusaCategoryCapability } from '../capabilities/category.capability.js';
16
+ import type { MedusaCheckoutCapability } from '../capabilities/checkout.capability.js';
17
+ import type { MedusaInventoryCapability } from '../capabilities/inventory.capability.js';
18
+ import type { MedusaOrderCapability } from '../capabilities/order.capability.js';
19
+ import type { MedusaOrderSearchCapability } from '../capabilities/order-search.capability.js';
20
+ import type { MedusaPriceCapability } from '../capabilities/price.capability.js';
21
+ import type { MedusaProductAssociationsCapability } from '../capabilities/product-associations.capability.js';
22
+ import type { MedusaProductCapability } from '../capabilities/product.capability.js';
23
+ import type { MedusaProductSearchCapability } from '../capabilities/product-search.capability.js';
24
+ import type { MedusaProfileCapability } from '../capabilities/profile.capability.js';
25
+ import type { MedusaProductRecommendationsCapability } from '../capabilities/product-recommendations.capability.js';
26
+ import type { MedusaIdentityCapability } from '../capabilities/identity.capability.js';
27
+ type OverridableCapabilityKey = 'product' | 'productSearch' | 'cart' | 'checkout' | 'category' | 'price' | 'order' | 'orderSearch' | 'inventory' | 'profile' | 'productAssociations';
28
+ type EnabledCapability<TCapability> = TCapability extends {
29
+ enabled: true;
30
+ } ? true : false;
31
+ type NormalizeConfiguredCapabilities<T extends MedusaCapabilities> = Omit<T, OverridableCapabilityKey | 'productRecommendations'> & {
32
+ [K in OverridableCapabilityKey]?: EnabledCapability<T[K]>;
33
+ } & {
34
+ productRecommendations?: EnabledCapability<T['productRecommendations']>;
35
+ identity?: EnabledCapability<T['identity']>;
36
+ };
37
+ type ExtractCapabilityFactory<TCapability, TContract, TDefaultFactory> = TCapability extends {
38
+ enabled: true;
39
+ factory?: infer TFactory;
40
+ } ? TFactory extends TContract ? TFactory : TDefaultFactory : TDefaultFactory;
41
+ type ExtractCapabilityImplementation<TCapability, TDefaultCapability> = TCapability extends {
42
+ enabled: true;
43
+ capability?: infer TCapabilityFactory;
44
+ } ? TCapabilityFactory extends (...args: unknown[]) => infer TResolvedCapability ? TResolvedCapability : TDefaultCapability : TDefaultCapability;
45
+ type FactoryContractMap = {
46
+ product: ProductFactory;
47
+ productSearch: ProductSearchFactory;
48
+ cart: CartFactory;
49
+ checkout: CheckoutFactory;
50
+ category: CategoryFactory;
51
+ price: PriceFactory;
52
+ order: OrderFactory;
53
+ orderSearch: OrderSearchFactory;
54
+ inventory: InventoryFactory;
55
+ profile: ProfileFactory;
56
+ productAssociations: ProductAssociationsFactory;
57
+ };
58
+ type DefaultFactoryMap = {
59
+ product: MedusaProductFactory;
60
+ productSearch: MedusaProductSearchFactory;
61
+ cart: MedusaCartFactory;
62
+ checkout: MedusaCheckoutFactory;
63
+ category: MedusaCategoryFactory;
64
+ price: MedusaPriceFactory;
65
+ order: MedusaOrderFactory;
66
+ orderSearch: MedusaOrderSearchFactory;
67
+ inventory: MedusaInventoryFactory;
68
+ profile: MedusaProfileFactory;
69
+ productAssociations: MedusaProductAssociationsFactory;
70
+ };
71
+ type ResolvedFactoryMap<T extends MedusaCapabilities> = {
72
+ [K in OverridableCapabilityKey]: ExtractCapabilityFactory<T[K], FactoryContractMap[K], DefaultFactoryMap[K]>;
73
+ };
74
+ type DefaultCapabilityMap<T extends MedusaCapabilities> = {
75
+ product: MedusaProductCapability<ResolvedFactoryMap<T>['product']>;
76
+ productSearch: MedusaProductSearchCapability<ResolvedFactoryMap<T>['productSearch']>;
77
+ cart: MedusaCartCapability<ResolvedFactoryMap<T>['cart']>;
78
+ checkout: MedusaCheckoutCapability<ResolvedFactoryMap<T>['checkout']>;
79
+ category: MedusaCategoryCapability<ResolvedFactoryMap<T>['category']>;
80
+ price: MedusaPriceCapability<ResolvedFactoryMap<T>['price']>;
81
+ order: MedusaOrderCapability<ResolvedFactoryMap<T>['order']>;
82
+ orderSearch: MedusaOrderSearchCapability<ResolvedFactoryMap<T>['orderSearch']>;
83
+ inventory: MedusaInventoryCapability<ResolvedFactoryMap<T>['inventory']>;
84
+ profile: MedusaProfileCapability<ResolvedFactoryMap<T>['profile']>;
85
+ productAssociations: MedusaProductAssociationsCapability<ResolvedFactoryMap<T>['productAssociations']>;
86
+ identity: MedusaIdentityCapability;
87
+ productRecommendations: MedusaProductRecommendationsCapability;
88
+ };
89
+ type CapabilityImplementationMap<T extends MedusaCapabilities> = {
90
+ [K in OverridableCapabilityKey | 'productRecommendations' | 'identity']: ExtractCapabilityImplementation<T[K], DefaultCapabilityMap<T>[K]>;
91
+ };
92
+ type EnabledCapabilityOverrideMap<T extends MedusaCapabilities> = {
93
+ [K in OverridableCapabilityKey | 'productRecommendations' | 'identity' as T[K] extends {
94
+ enabled: true;
95
+ } ? K : never]: CapabilityImplementationMap<T>[K];
96
+ };
97
+ export type MedusaClientFromCapabilities<T extends MedusaCapabilities> = Omit<ClientFromCapabilities<NormalizeConfiguredCapabilities<T>>, OverridableCapabilityKey | 'productRecommendations' | 'identity'> & EnabledCapabilityOverrideMap<T>;
98
+ export declare function resolveCapabilityWithFactory<TFactory, TResolvedCapability, TCapabilityArgs>(capability: {
99
+ factory?: TFactory;
100
+ capability?: (args: TCapabilityArgs) => TResolvedCapability;
101
+ } | undefined, defaults: {
102
+ factory: TFactory;
103
+ capability: (args: TCapabilityArgs) => TResolvedCapability;
104
+ }, buildCapabilityArgs: (factory: TFactory) => TCapabilityArgs): TResolvedCapability;
105
+ export declare function resolveDirectCapability<TResolvedCapability, TCapabilityArgs>(capability: {
106
+ capability?: (args: TCapabilityArgs) => TResolvedCapability;
107
+ } | undefined, defaultCapability: (args: TCapabilityArgs) => TResolvedCapability, args: TCapabilityArgs): TResolvedCapability;
108
+ export {};
@@ -0,0 +1,9 @@
1
+ import type { AnyCartIdentifierSchema, AnyCartSchema, CartFactory, CartIdentifierSchema, CartSchema, RequestContext } from '@reactionary/core';
2
+ import type * as z from 'zod';
3
+ export declare class MedusaCartFactory<TCartSchema extends AnyCartSchema = typeof CartSchema, TCartIdentifierSchema extends AnyCartIdentifierSchema = typeof CartIdentifierSchema> implements CartFactory<TCartSchema, TCartIdentifierSchema> {
4
+ readonly cartSchema: TCartSchema;
5
+ readonly cartIdentifierSchema: TCartIdentifierSchema;
6
+ constructor(cartSchema: TCartSchema, cartIdentifierSchema: TCartIdentifierSchema);
7
+ parseCart(_context: RequestContext, data: unknown): z.output<TCartSchema>;
8
+ parseCartIdentifier(_context: RequestContext, data: unknown): z.output<TCartIdentifierSchema>;
9
+ }
@@ -0,0 +1,9 @@
1
+ import type { AnyCategoryPaginatedResultSchema, AnyCategorySchema, CategoryFactory, CategoryPaginatedResultSchema, CategorySchema, RequestContext } from '@reactionary/core';
2
+ import type * as z from 'zod';
3
+ export declare class MedusaCategoryFactory<TCategorySchema extends AnyCategorySchema = typeof CategorySchema, TCategoryPaginatedSchema extends AnyCategoryPaginatedResultSchema = typeof CategoryPaginatedResultSchema> implements CategoryFactory<TCategorySchema, TCategoryPaginatedSchema> {
4
+ readonly categorySchema: TCategorySchema;
5
+ readonly categoryPaginatedResultSchema: TCategoryPaginatedSchema;
6
+ constructor(categorySchema: TCategorySchema, categoryPaginatedResultSchema: TCategoryPaginatedSchema);
7
+ parseCategory(_context: RequestContext, data: unknown): z.output<TCategorySchema>;
8
+ parseCategoryPaginatedResult(_context: RequestContext, data: unknown): z.output<TCategoryPaginatedSchema>;
9
+ }
@@ -0,0 +1,11 @@
1
+ import type { AnyCheckoutSchema, AnyPaymentMethodSchema, AnyShippingMethodSchema, CheckoutFactory, CheckoutSchema, PaymentMethodSchema, RequestContext, ShippingMethodSchema } from '@reactionary/core';
2
+ import type * as z from 'zod';
3
+ export declare class MedusaCheckoutFactory<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 MedusaIdentityFactory<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
+ }
@@ -0,0 +1,12 @@
1
+ export * from './cart/cart.factory.js';
2
+ export * from './category/category.factory.js';
3
+ export * from './checkout/checkout.factory.js';
4
+ export * from './identity/identity.factory.js';
5
+ export * from './inventory/inventory.factory.js';
6
+ export * from './order/order.factory.js';
7
+ export * from './order-search/order-search.factory.js';
8
+ export * from './price/price.factory.js';
9
+ export * from './product/product.factory.js';
10
+ export * from './product-associations/product-associations.factory.js';
11
+ export * from './product-search/product-search.factory.js';
12
+ export * from './profile/profile.factory.js';
@@ -0,0 +1,7 @@
1
+ import type { AnyInventorySchema, InventoryFactory, InventorySchema, RequestContext } from '@reactionary/core';
2
+ import type * as z from 'zod';
3
+ export declare class MedusaInventoryFactory<TInventorySchema extends AnyInventorySchema = typeof InventorySchema> implements InventoryFactory<TInventorySchema> {
4
+ readonly inventorySchema: TInventorySchema;
5
+ constructor(inventorySchema: TInventorySchema);
6
+ parseInventory(_context: RequestContext, data: unknown): z.output<TInventorySchema>;
7
+ }
@@ -0,0 +1,7 @@
1
+ import type { AnyOrderSchema, OrderFactory, OrderSchema, RequestContext } from '@reactionary/core';
2
+ import type * as z from 'zod';
3
+ export declare class MedusaOrderFactory<TOrderSchema extends AnyOrderSchema = typeof OrderSchema> implements OrderFactory<TOrderSchema> {
4
+ readonly orderSchema: TOrderSchema;
5
+ constructor(orderSchema: TOrderSchema);
6
+ parseOrder(_context: RequestContext, data: unknown): z.output<TOrderSchema>;
7
+ }
@@ -0,0 +1,7 @@
1
+ import type { AnyOrderSearchResultSchema, OrderSearchFactory, OrderSearchQueryByTerm, OrderSearchResultSchema, RequestContext } from '@reactionary/core';
2
+ import type * as z from 'zod';
3
+ export declare class MedusaOrderSearchFactory<TOrderSearchResultSchema extends AnyOrderSearchResultSchema = typeof OrderSearchResultSchema> implements OrderSearchFactory<TOrderSearchResultSchema> {
4
+ readonly orderSearchResultSchema: TOrderSearchResultSchema;
5
+ constructor(orderSearchResultSchema: TOrderSearchResultSchema);
6
+ parseOrderSearchResult(_context: RequestContext, data: unknown, _query: OrderSearchQueryByTerm): z.output<TOrderSearchResultSchema>;
7
+ }
@@ -0,0 +1,9 @@
1
+ import type { AnyPriceSchema, PriceFactory, PriceSchema, RequestContext } from '@reactionary/core';
2
+ import type * as z from 'zod';
3
+ export declare class MedusaPriceFactory<TPriceSchema extends AnyPriceSchema = typeof PriceSchema> implements PriceFactory<TPriceSchema> {
4
+ readonly priceSchema: TPriceSchema;
5
+ constructor(priceSchema: TPriceSchema);
6
+ parsePrice(_context: RequestContext, data: unknown, _options?: {
7
+ includeDiscounts: boolean;
8
+ }): z.output<TPriceSchema>;
9
+ }
@@ -0,0 +1,7 @@
1
+ import type { AnyProductSchema, ProductFactory, ProductSchema, RequestContext } from '@reactionary/core';
2
+ import type * as z from 'zod';
3
+ export declare class MedusaProductFactory<TProductSchema extends AnyProductSchema = typeof ProductSchema> implements ProductFactory<TProductSchema> {
4
+ readonly productSchema: TProductSchema;
5
+ constructor(productSchema: TProductSchema);
6
+ parseProduct(_context: RequestContext, data: unknown): z.output<TProductSchema>;
7
+ }
@@ -0,0 +1,7 @@
1
+ import type { AnyProductAssociationSchema, ProductAssociationSchema, ProductAssociationsFactory, RequestContext } from '@reactionary/core';
2
+ import type * as z from 'zod';
3
+ export declare class MedusaProductAssociationsFactory<TProductAssociationSchema extends AnyProductAssociationSchema = typeof ProductAssociationSchema> implements ProductAssociationsFactory<TProductAssociationSchema> {
4
+ readonly productAssociationSchema: TProductAssociationSchema;
5
+ constructor(productAssociationSchema: TProductAssociationSchema);
6
+ parseAssociation(_context: RequestContext, data: unknown): z.output<TProductAssociationSchema>;
7
+ }
@@ -0,0 +1,7 @@
1
+ import type { AnyProductSearchResultSchema, ProductSearchFactory, ProductSearchQueryByTerm, ProductSearchResultSchema, RequestContext } from '@reactionary/core';
2
+ import type * as z from 'zod';
3
+ export declare class MedusaProductSearchFactory<TProductSearchResultSchema extends AnyProductSearchResultSchema = typeof ProductSearchResultSchema> implements ProductSearchFactory<TProductSearchResultSchema> {
4
+ readonly productSearchResultSchema: TProductSearchResultSchema;
5
+ constructor(productSearchResultSchema: TProductSearchResultSchema);
6
+ parseSearchResult(_context: RequestContext, data: unknown, _query: ProductSearchQueryByTerm): z.output<TProductSearchResultSchema>;
7
+ }
@@ -0,0 +1,7 @@
1
+ import type { AnyProfileSchema, ProfileFactory, ProfileSchema, RequestContext } from '@reactionary/core';
2
+ import type * as z from 'zod';
3
+ export declare class MedusaProfileFactory<TProfileSchema extends AnyProfileSchema = typeof ProfileSchema> implements ProfileFactory<TProfileSchema> {
4
+ readonly profileSchema: TProfileSchema;
5
+ constructor(profileSchema: TProfileSchema);
6
+ parseProfile(_context: RequestContext, data: unknown): z.output<TProfileSchema>;
7
+ }
package/src/index.d.ts ADDED
@@ -0,0 +1,17 @@
1
+ export * from './schema/configuration.schema.js';
2
+ export * from './schema/medusa.schema.js';
3
+ export * from './schema/capabilities.schema.js';
4
+ export * from './core/initialize.js';
5
+ export * from './core/initialize.types.js';
6
+ export * from './core/client.js';
7
+ export * from './factories/index.js';
8
+ export * from './capabilities/cart.capability.js';
9
+ export * from './capabilities/identity.capability.js';
10
+ export * from './capabilities/inventory.capability.js';
11
+ export * from './capabilities/order.capability.js';
12
+ export * from './capabilities/order-search.capability.js';
13
+ export * from './capabilities/price.capability.js';
14
+ export * from './capabilities/product-search.capability.js';
15
+ export * from './capabilities/product-recommendations.capability.js';
16
+ export * from './capabilities/product-associations.capability.js';
17
+ export * from './capabilities/profile.capability.js';
@@ -0,0 +1,116 @@
1
+ import type { CartFactory, CartFactoryWithOutput, CartCapability, CategoryFactory, CategoryFactoryWithOutput, CategoryCapability, CheckoutFactory, CheckoutFactoryWithOutput, CheckoutCapability, IdentityCapability, InventoryFactory, InventoryFactoryWithOutput, InventoryCapability, OrderFactory, OrderFactoryWithOutput, OrderCapability, OrderSearchFactory, OrderSearchFactoryWithOutput, OrderSearchCapability, PriceFactory, PriceFactoryWithOutput, PriceCapability, ProductAssociationsFactory, ProductAssociationsFactoryWithOutput, ProductAssociationsCapability, ProductFactory, ProductFactoryWithOutput, ProductCapability, ProductRecommendationsCapability, ProductSearchFactory, ProductSearchFactoryWithOutput, ProductSearchCapability, ProfileFactory, ProfileFactoryWithOutput, ProfileCapability, RequestContext, Cache } from '@reactionary/core';
2
+ import type { MedusaConfiguration } from './configuration.schema.js';
3
+ import type { MedusaAPI } from '../core/client.js';
4
+ import * as z from 'zod';
5
+ export declare const MedusaCapabilitiesSchema: z.ZodObject<{
6
+ product: z.ZodOptional<z.ZodOptional<z.ZodObject<{
7
+ enabled: z.ZodBoolean;
8
+ factory: z.ZodOptional<z.ZodUnknown>;
9
+ capability: z.ZodOptional<z.ZodUnknown>;
10
+ }, z.core.$loose>>>;
11
+ productSearch: z.ZodOptional<z.ZodOptional<z.ZodObject<{
12
+ enabled: z.ZodBoolean;
13
+ factory: z.ZodOptional<z.ZodUnknown>;
14
+ capability: z.ZodOptional<z.ZodUnknown>;
15
+ }, z.core.$loose>>>;
16
+ cart: z.ZodOptional<z.ZodOptional<z.ZodObject<{
17
+ enabled: z.ZodBoolean;
18
+ factory: z.ZodOptional<z.ZodUnknown>;
19
+ capability: z.ZodOptional<z.ZodUnknown>;
20
+ }, z.core.$loose>>>;
21
+ checkout: z.ZodOptional<z.ZodOptional<z.ZodObject<{
22
+ enabled: z.ZodBoolean;
23
+ factory: z.ZodOptional<z.ZodUnknown>;
24
+ capability: z.ZodOptional<z.ZodUnknown>;
25
+ }, z.core.$loose>>>;
26
+ category: z.ZodOptional<z.ZodOptional<z.ZodObject<{
27
+ enabled: z.ZodBoolean;
28
+ factory: z.ZodOptional<z.ZodUnknown>;
29
+ capability: z.ZodOptional<z.ZodUnknown>;
30
+ }, z.core.$loose>>>;
31
+ price: z.ZodOptional<z.ZodOptional<z.ZodObject<{
32
+ enabled: z.ZodBoolean;
33
+ factory: z.ZodOptional<z.ZodUnknown>;
34
+ capability: z.ZodOptional<z.ZodUnknown>;
35
+ }, z.core.$loose>>>;
36
+ order: 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>>>;
41
+ orderSearch: z.ZodOptional<z.ZodOptional<z.ZodObject<{
42
+ enabled: z.ZodBoolean;
43
+ factory: z.ZodOptional<z.ZodUnknown>;
44
+ capability: z.ZodOptional<z.ZodUnknown>;
45
+ }, z.core.$loose>>>;
46
+ inventory: z.ZodOptional<z.ZodOptional<z.ZodObject<{
47
+ enabled: z.ZodBoolean;
48
+ factory: z.ZodOptional<z.ZodUnknown>;
49
+ capability: z.ZodOptional<z.ZodUnknown>;
50
+ }, z.core.$loose>>>;
51
+ identity: z.ZodOptional<z.ZodOptional<z.ZodObject<{
52
+ enabled: z.ZodBoolean;
53
+ capability: z.ZodOptional<z.ZodUnknown>;
54
+ }, z.core.$loose>>>;
55
+ profile: z.ZodOptional<z.ZodOptional<z.ZodObject<{
56
+ enabled: z.ZodBoolean;
57
+ factory: z.ZodOptional<z.ZodUnknown>;
58
+ capability: z.ZodOptional<z.ZodUnknown>;
59
+ }, z.core.$loose>>>;
60
+ productAssociations: z.ZodOptional<z.ZodOptional<z.ZodObject<{
61
+ enabled: z.ZodBoolean;
62
+ factory: z.ZodOptional<z.ZodUnknown>;
63
+ capability: z.ZodOptional<z.ZodUnknown>;
64
+ }, z.core.$loose>>>;
65
+ productRecommendations: z.ZodOptional<z.ZodOptional<z.ZodObject<{
66
+ enabled: z.ZodBoolean;
67
+ capability: z.ZodOptional<z.ZodUnknown>;
68
+ }, z.core.$loose>>>;
69
+ }, z.core.$loose>;
70
+ export interface MedusaCapabilityFactoryArgs {
71
+ cache: Cache;
72
+ context: RequestContext;
73
+ config: MedusaConfiguration;
74
+ medusaApi: MedusaAPI;
75
+ }
76
+ export interface MedusaFactoryCapabilityArgs<TFactory> extends MedusaCapabilityFactoryArgs {
77
+ factory: TFactory;
78
+ }
79
+ export interface MedusaCapabilityConfig<TFactory, TCapability> {
80
+ enabled: boolean;
81
+ factory?: TFactory;
82
+ capability?: (args: MedusaFactoryCapabilityArgs<TFactory>) => TCapability;
83
+ }
84
+ export interface MedusaDirectCapabilityConfig<TCapability> {
85
+ enabled: boolean;
86
+ capability?: (args: MedusaCapabilityFactoryArgs) => TCapability;
87
+ }
88
+ export type MedusaProductCapabilityConfig = MedusaCapabilityConfig<ProductFactoryWithOutput<ProductFactory>, ProductCapability>;
89
+ export type MedusaProductSearchCapabilityConfig = MedusaCapabilityConfig<ProductSearchFactoryWithOutput<ProductSearchFactory>, ProductSearchCapability>;
90
+ export type MedusaCartCapabilityConfig = MedusaCapabilityConfig<CartFactoryWithOutput<CartFactory>, CartCapability>;
91
+ export type MedusaCheckoutCapabilityConfig = MedusaCapabilityConfig<CheckoutFactoryWithOutput<CheckoutFactory>, CheckoutCapability>;
92
+ export type MedusaCategoryCapabilityConfig = MedusaCapabilityConfig<CategoryFactoryWithOutput<CategoryFactory>, CategoryCapability>;
93
+ export type MedusaPriceCapabilityConfig = MedusaCapabilityConfig<PriceFactoryWithOutput<PriceFactory>, PriceCapability>;
94
+ export type MedusaOrderCapabilityConfig = MedusaCapabilityConfig<OrderFactoryWithOutput<OrderFactory>, OrderCapability>;
95
+ export type MedusaOrderSearchCapabilityConfig = MedusaCapabilityConfig<OrderSearchFactoryWithOutput<OrderSearchFactory>, OrderSearchCapability>;
96
+ export type MedusaInventoryCapabilityConfig = MedusaCapabilityConfig<InventoryFactoryWithOutput<InventoryFactory>, InventoryCapability>;
97
+ export type MedusaIdentityCapabilityConfig = MedusaDirectCapabilityConfig<IdentityCapability>;
98
+ export type MedusaProfileCapabilityConfig = MedusaCapabilityConfig<ProfileFactoryWithOutput<ProfileFactory>, ProfileCapability>;
99
+ export type MedusaProductAssociationsCapabilityConfig = MedusaCapabilityConfig<ProductAssociationsFactoryWithOutput<ProductAssociationsFactory>, ProductAssociationsCapability>;
100
+ export type MedusaProductRecommendationsCapabilityConfig = MedusaDirectCapabilityConfig<ProductRecommendationsCapability>;
101
+ export type MedusaCapabilities<TProductFactory extends ProductFactory = ProductFactory, TProductCapability extends ProductCapability = ProductCapability, TProductSearchFactory extends ProductSearchFactory = ProductSearchFactory, TProductSearchCapability extends ProductSearchCapability = ProductSearchCapability, TCartFactory extends CartFactory = CartFactory, TCartCapability extends CartCapability = CartCapability, TCheckoutFactory extends CheckoutFactory = CheckoutFactory, TCheckoutCapability extends CheckoutCapability = CheckoutCapability, TCategoryFactory extends CategoryFactory = CategoryFactory, TCategoryCapability extends CategoryCapability = CategoryCapability, TPriceFactory extends PriceFactory = PriceFactory, TPriceCapability extends PriceCapability = PriceCapability, TOrderFactory extends OrderFactory = OrderFactory, TOrderCapability extends OrderCapability = OrderCapability, TOrderSearchFactory extends OrderSearchFactory = OrderSearchFactory, TOrderSearchCapability extends OrderSearchCapability = OrderSearchCapability, TInventoryFactory extends InventoryFactory = InventoryFactory, TInventoryCapability extends InventoryCapability = InventoryCapability, TIdentityCapability extends IdentityCapability = IdentityCapability, TProfileFactory extends ProfileFactory = ProfileFactory, TProfileCapability extends ProfileCapability = ProfileCapability, TProductAssociationsFactory extends ProductAssociationsFactory = ProductAssociationsFactory, TProductAssociationsCapability extends ProductAssociationsCapability = ProductAssociationsCapability, TProductRecommendationsCapability extends ProductRecommendationsCapability = ProductRecommendationsCapability> = {
102
+ product?: MedusaCapabilityConfig<ProductFactoryWithOutput<TProductFactory>, TProductCapability>;
103
+ productSearch?: MedusaCapabilityConfig<ProductSearchFactoryWithOutput<TProductSearchFactory>, TProductSearchCapability>;
104
+ cart?: MedusaCapabilityConfig<CartFactoryWithOutput<TCartFactory>, TCartCapability>;
105
+ checkout?: MedusaCapabilityConfig<CheckoutFactoryWithOutput<TCheckoutFactory>, TCheckoutCapability>;
106
+ category?: MedusaCapabilityConfig<CategoryFactoryWithOutput<TCategoryFactory>, TCategoryCapability>;
107
+ price?: MedusaCapabilityConfig<PriceFactoryWithOutput<TPriceFactory>, TPriceCapability>;
108
+ order?: MedusaCapabilityConfig<OrderFactoryWithOutput<TOrderFactory>, TOrderCapability>;
109
+ orderSearch?: MedusaCapabilityConfig<OrderSearchFactoryWithOutput<TOrderSearchFactory>, TOrderSearchCapability>;
110
+ inventory?: MedusaCapabilityConfig<InventoryFactoryWithOutput<TInventoryFactory>, TInventoryCapability>;
111
+ identity?: MedusaDirectCapabilityConfig<TIdentityCapability>;
112
+ profile?: MedusaCapabilityConfig<ProfileFactoryWithOutput<TProfileFactory>, TProfileCapability>;
113
+ productAssociations?: MedusaCapabilityConfig<ProductAssociationsFactoryWithOutput<TProductAssociationsFactory>, TProductAssociationsCapability>;
114
+ productRecommendations?: MedusaDirectCapabilityConfig<TProductRecommendationsCapability>;
115
+ };
116
+ export type ParsedMedusaCapabilities = z.infer<typeof MedusaCapabilitiesSchema>;
@@ -0,0 +1,9 @@
1
+ import * as z from 'zod';
2
+ export declare const MedusaConfigurationSchema: z.ZodObject<{
3
+ publishable_key: z.ZodString;
4
+ adminApiKey: z.ZodString;
5
+ apiUrl: z.ZodString;
6
+ defaultCurrency: z.ZodDefault<z.ZodString>;
7
+ allCurrencies: z.ZodDefault<z.ZodArray<z.ZodString>>;
8
+ }, z.core.$loose>;
9
+ export type MedusaConfiguration = z.infer<typeof MedusaConfigurationSchema>;
@@ -0,0 +1,33 @@
1
+ import * as z from 'zod';
2
+ export declare const MedusaCartIdentifierSchema: z.ZodObject<{
3
+ key: z.ZodString;
4
+ region_id: z.ZodOptional<z.ZodString>;
5
+ }, z.core.$loose>;
6
+ export declare const MedusaOrderIdentifierSchema: z.ZodObject<{
7
+ key: z.ZodString;
8
+ display_id: z.ZodOptional<z.ZodNumber>;
9
+ }, z.core.$loose>;
10
+ export declare const MedusaRegionSchema: z.ZodObject<{
11
+ id: z.ZodString;
12
+ name: z.ZodString;
13
+ currency_code: z.ZodString;
14
+ }, z.core.$loose>;
15
+ export declare const MedusaSessionSchema: z.ZodObject<{
16
+ activeCartId: z.ZodOptional<z.ZodString>;
17
+ token: z.ZodOptional<z.ZodString>;
18
+ expires: z.ZodOptional<z.ZodString>;
19
+ allRegions: z.ZodOptional<z.ZodArray<z.ZodObject<{
20
+ id: z.ZodString;
21
+ name: z.ZodString;
22
+ currency_code: z.ZodString;
23
+ }, z.core.$loose>>>;
24
+ selectedRegion: z.ZodOptional<z.ZodObject<{
25
+ id: z.ZodString;
26
+ name: z.ZodString;
27
+ currency_code: z.ZodString;
28
+ }, z.core.$loose>>;
29
+ }, z.core.$loose>;
30
+ export type MedusaCartIdentifier = z.infer<typeof MedusaCartIdentifierSchema>;
31
+ export type MedusaOrderIdentifier = z.infer<typeof MedusaOrderIdentifierSchema>;
32
+ export type MedusaSession = z.infer<typeof MedusaSessionSchema>;
33
+ export type MedusaRegion = z.infer<typeof MedusaRegionSchema>;
@@ -0,0 +1,2 @@
1
+ import { type MedusaConfiguration } from '../schema/configuration.schema.js';
2
+ export declare function getMedusaTestConfiguration(): MedusaConfiguration;
@@ -0,0 +1,35 @@
1
+ import type { StoreCart, StoreOrder } from '@medusajs/types';
2
+ import type { CostBreakDown, Currency } from '@reactionary/core';
3
+ /**
4
+ * Parses cost breakdown from Medusa StoreCart
5
+ */
6
+ export declare function parseMedusaCostBreakdown(remote: StoreCart | StoreOrder): CostBreakDown;
7
+ /**
8
+ * Parses item price structure from Medusa line item
9
+ */
10
+ export declare function parseMedusaItemPrice(remoteItem: {
11
+ unit_price?: number;
12
+ quantity: number;
13
+ discount_total?: number;
14
+ }, currency: Currency): {
15
+ unitPrice: {
16
+ value: number;
17
+ currency: Currency;
18
+ };
19
+ unitDiscount: {
20
+ value: number;
21
+ currency: Currency;
22
+ };
23
+ totalPrice: {
24
+ value: number;
25
+ currency: Currency;
26
+ };
27
+ totalDiscount: {
28
+ value: number;
29
+ currency: Currency;
30
+ };
31
+ };
32
+ /**
33
+ * Handles capability implementation errors with consistent formatting
34
+ */
35
+ export declare function handleProviderError(action: string, error: unknown): never;
@@ -0,0 +1,12 @@
1
+ import { MedusaConfigurationSchema } from "../schema/configuration.schema.js";
2
+ function getMedusaTestConfiguration() {
3
+ return MedusaConfigurationSchema.parse({
4
+ publishable_key: process.env["MEDUSA_PUBLISHABLE_KEY"] || "",
5
+ adminApiKey: process.env["MEDUSA_ADMIN_KEY"] || "",
6
+ apiUrl: process.env["MEDUSA_API_URL"] || "",
7
+ defaultCurrency: process.env["MEDUSA_DEFAULT_CURRENCY"] || ""
8
+ });
9
+ }
10
+ export {
11
+ getMedusaTestConfiguration
12
+ };
@@ -0,0 +1,72 @@
1
+ import createDebug from "debug";
2
+ const debug = createDebug("reactionary:medusa:helpers");
3
+ function parseMedusaCostBreakdown(remote) {
4
+ const grandTotal = remote.total || 0;
5
+ const shippingTotal = remote.shipping_total || 0;
6
+ const taxTotal = remote.tax_total || 0;
7
+ const discountTotal = remote.discount_total || 0;
8
+ const subtotal = remote.subtotal || 0;
9
+ const currency = (remote.currency_code || "EUR").toUpperCase();
10
+ return {
11
+ totalTax: {
12
+ value: taxTotal,
13
+ currency
14
+ },
15
+ totalDiscount: {
16
+ value: discountTotal,
17
+ currency
18
+ },
19
+ totalSurcharge: {
20
+ value: 0,
21
+ currency
22
+ },
23
+ totalShipping: {
24
+ value: shippingTotal,
25
+ currency
26
+ },
27
+ totalProductPrice: {
28
+ value: subtotal,
29
+ currency
30
+ },
31
+ grandTotal: {
32
+ value: grandTotal,
33
+ currency
34
+ }
35
+ };
36
+ }
37
+ function parseMedusaItemPrice(remoteItem, currency) {
38
+ const unitPrice = remoteItem.unit_price || 0;
39
+ const totalPrice = unitPrice * remoteItem.quantity || 0;
40
+ const discountTotal = remoteItem.discount_total || 0;
41
+ return {
42
+ unitPrice: {
43
+ value: unitPrice,
44
+ currency
45
+ },
46
+ unitDiscount: {
47
+ value: discountTotal / remoteItem.quantity,
48
+ currency
49
+ },
50
+ totalPrice: {
51
+ value: totalPrice,
52
+ currency
53
+ },
54
+ totalDiscount: {
55
+ value: discountTotal,
56
+ currency
57
+ }
58
+ };
59
+ }
60
+ function handleProviderError(action, error) {
61
+ if (debug.enabled) {
62
+ debug(`Failed to ${action}:`, error);
63
+ }
64
+ throw new Error(
65
+ `Failed to ${action}: ${error instanceof Error ? error.message : "Unknown error"}`
66
+ );
67
+ }
68
+ export {
69
+ handleProviderError,
70
+ parseMedusaCostBreakdown,
71
+ parseMedusaItemPrice
72
+ };