@thorprovider/types 5.7.9 → 5.7.10
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/AGENTS.md +1 -1
- package/README.md +0 -8
- package/dist/index.d.mts +144 -373
- package/dist/index.d.ts +144 -373
- package/dist/index.js +138 -0
- package/dist/index.js.map +1 -1
- package/dist/index.mjs +125 -0
- package/dist/index.mjs.map +1 -1
- package/package.json +2 -2
- package/src/admin/DropshippingAdmin.ts +57 -0
- package/src/cart.ts +0 -40
- package/src/collection.ts +0 -10
- package/src/commerce-provider.ts +0 -36
- package/src/index.ts +18 -30
- package/src/provider.ts +178 -14
- package/src/storefront.ts +32 -5
- package/.turbo/turbo-build.log +0 -18
- package/.turbo/turbo-type-check.log +0 -0
- package/dist/.tsbuildinfo +0 -1
- package/publish.log +0 -60
- package/src/catalog.ts +0 -210
- package/src/commerce.ts +0 -88
package/dist/index.js
CHANGED
|
@@ -3,6 +3,10 @@ var __defProp = Object.defineProperty;
|
|
|
3
3
|
var __getOwnPropDesc = Object.getOwnPropertyDescriptor;
|
|
4
4
|
var __getOwnPropNames = Object.getOwnPropertyNames;
|
|
5
5
|
var __hasOwnProp = Object.prototype.hasOwnProperty;
|
|
6
|
+
var __export = (target, all) => {
|
|
7
|
+
for (var name in all)
|
|
8
|
+
__defProp(target, name, { get: all[name], enumerable: true });
|
|
9
|
+
};
|
|
6
10
|
var __copyProps = (to, from, except, desc) => {
|
|
7
11
|
if (from && typeof from === "object" || typeof from === "function") {
|
|
8
12
|
for (let key of __getOwnPropNames(from))
|
|
@@ -15,5 +19,139 @@ var __toCommonJS = (mod) => __copyProps(__defProp({}, "__esModule", { value: tru
|
|
|
15
19
|
|
|
16
20
|
// src/index.ts
|
|
17
21
|
var src_exports = {};
|
|
22
|
+
__export(src_exports, {
|
|
23
|
+
PROVIDER_METADATA: () => PROVIDER_METADATA,
|
|
24
|
+
StorefrontConfigError: () => StorefrontConfigError,
|
|
25
|
+
SupportedProviderType: () => SupportedProviderType,
|
|
26
|
+
getProviderMetadata: () => getProviderMetadata,
|
|
27
|
+
isSupportedProviderType: () => isSupportedProviderType
|
|
28
|
+
});
|
|
18
29
|
module.exports = __toCommonJS(src_exports);
|
|
30
|
+
|
|
31
|
+
// src/provider.ts
|
|
32
|
+
var SupportedProviderType = /* @__PURE__ */ ((SupportedProviderType2) => {
|
|
33
|
+
SupportedProviderType2["Mock"] = "mock";
|
|
34
|
+
SupportedProviderType2["Medusa"] = "medusa";
|
|
35
|
+
SupportedProviderType2["StelOrder"] = "stelorder";
|
|
36
|
+
SupportedProviderType2["Shopify"] = "shopify";
|
|
37
|
+
SupportedProviderType2["BigCommerce"] = "bigcommerce";
|
|
38
|
+
SupportedProviderType2["WooCommerce"] = "woocommerce";
|
|
39
|
+
SupportedProviderType2["Spree"] = "spree";
|
|
40
|
+
SupportedProviderType2["Magento"] = "magento";
|
|
41
|
+
return SupportedProviderType2;
|
|
42
|
+
})(SupportedProviderType || {});
|
|
43
|
+
var PROVIDER_METADATA = {
|
|
44
|
+
mock: {
|
|
45
|
+
name: "Mock",
|
|
46
|
+
description: "Fixture-backed runtime provider for layout/design mode without a real backend",
|
|
47
|
+
requiresStorefront: false,
|
|
48
|
+
requiredEnvVars: [],
|
|
49
|
+
maxRetries: 0
|
|
50
|
+
},
|
|
51
|
+
medusa: {
|
|
52
|
+
name: "Medusa JS",
|
|
53
|
+
description: "Medusa v2 commerce engine",
|
|
54
|
+
requiresStorefront: true,
|
|
55
|
+
requiredEnvVars: [
|
|
56
|
+
"NEXT_PUBLIC_COMMERCE_API_URL",
|
|
57
|
+
"NEXT_PUBLIC_COMMERCE_API_KEY",
|
|
58
|
+
"NEXT_PUBLIC_SALES_CHANNEL_ID"
|
|
59
|
+
],
|
|
60
|
+
maxRetries: 3
|
|
61
|
+
},
|
|
62
|
+
stelorder: {
|
|
63
|
+
name: "Stel Order",
|
|
64
|
+
description: "Stel Order ERP and sales document API",
|
|
65
|
+
requiresStorefront: false,
|
|
66
|
+
requiredEnvVars: [
|
|
67
|
+
"NEXT_PUBLIC_COMMERCE_API_URL",
|
|
68
|
+
"NEXT_PUBLIC_COMMERCE_API_KEY"
|
|
69
|
+
],
|
|
70
|
+
maxRetries: 2
|
|
71
|
+
},
|
|
72
|
+
shopify: {
|
|
73
|
+
name: "Shopify",
|
|
74
|
+
description: "Shopify Storefront API (GraphQL)",
|
|
75
|
+
requiresStorefront: false,
|
|
76
|
+
requiredEnvVars: [
|
|
77
|
+
"NEXT_PUBLIC_SHOPIFY_STORE_DOMAIN",
|
|
78
|
+
"NEXT_PUBLIC_SHOPIFY_STOREFRONT_TOKEN"
|
|
79
|
+
],
|
|
80
|
+
maxRetries: 3
|
|
81
|
+
},
|
|
82
|
+
bigcommerce: {
|
|
83
|
+
name: "BigCommerce",
|
|
84
|
+
description: "BigCommerce REST Storefront API",
|
|
85
|
+
requiresStorefront: false,
|
|
86
|
+
requiredEnvVars: [
|
|
87
|
+
"BIGCOMMERCE_STORE_HASH",
|
|
88
|
+
"BIGCOMMERCE_STOREFRONT_API_TOKEN",
|
|
89
|
+
"BIGCOMMERCE_CHANNEL_ID"
|
|
90
|
+
],
|
|
91
|
+
maxRetries: 3
|
|
92
|
+
},
|
|
93
|
+
woocommerce: {
|
|
94
|
+
name: "WooCommerce",
|
|
95
|
+
description: "WooCommerce Store API + REST API v3",
|
|
96
|
+
requiresStorefront: false,
|
|
97
|
+
requiredEnvVars: [
|
|
98
|
+
"WOOCOMMERCE_URL",
|
|
99
|
+
"WOOCOMMERCE_CONSUMER_KEY",
|
|
100
|
+
"WOOCOMMERCE_CONSUMER_SECRET"
|
|
101
|
+
],
|
|
102
|
+
maxRetries: 3
|
|
103
|
+
},
|
|
104
|
+
spree: {
|
|
105
|
+
name: "Spree Commerce",
|
|
106
|
+
description: "Spree API v2 Storefront (JSON:API)",
|
|
107
|
+
requiresStorefront: false,
|
|
108
|
+
requiredEnvVars: [
|
|
109
|
+
"SPREE_API_URL"
|
|
110
|
+
],
|
|
111
|
+
maxRetries: 3
|
|
112
|
+
},
|
|
113
|
+
magento: {
|
|
114
|
+
name: "Adobe Commerce (Magento)",
|
|
115
|
+
description: "Adobe Commerce GraphQL + REST API",
|
|
116
|
+
requiresStorefront: true,
|
|
117
|
+
requiredEnvVars: [
|
|
118
|
+
"MAGENTO_URL",
|
|
119
|
+
"MAGENTO_STORE_CODE"
|
|
120
|
+
],
|
|
121
|
+
maxRetries: 3
|
|
122
|
+
}
|
|
123
|
+
};
|
|
124
|
+
function isSupportedProviderType(value) {
|
|
125
|
+
return typeof value === "string" && Object.values(SupportedProviderType).includes(value);
|
|
126
|
+
}
|
|
127
|
+
function getProviderMetadata(type) {
|
|
128
|
+
if (!isSupportedProviderType(type)) {
|
|
129
|
+
throw new Error(
|
|
130
|
+
`Unsupported provider: ${type}. Supported: ${Object.values(
|
|
131
|
+
SupportedProviderType
|
|
132
|
+
).join(", ")}`
|
|
133
|
+
);
|
|
134
|
+
}
|
|
135
|
+
return PROVIDER_METADATA[type];
|
|
136
|
+
}
|
|
137
|
+
|
|
138
|
+
// src/storefront.ts
|
|
139
|
+
var StorefrontConfigError = class extends Error {
|
|
140
|
+
platformType;
|
|
141
|
+
requiredEnvVar;
|
|
142
|
+
constructor(message, platformType, requiredEnvVar) {
|
|
143
|
+
super(message);
|
|
144
|
+
this.name = "StorefrontConfigError";
|
|
145
|
+
this.platformType = platformType;
|
|
146
|
+
this.requiredEnvVar = requiredEnvVar;
|
|
147
|
+
}
|
|
148
|
+
};
|
|
149
|
+
// Annotate the CommonJS export names for ESM import in node:
|
|
150
|
+
0 && (module.exports = {
|
|
151
|
+
PROVIDER_METADATA,
|
|
152
|
+
StorefrontConfigError,
|
|
153
|
+
SupportedProviderType,
|
|
154
|
+
getProviderMetadata,
|
|
155
|
+
isSupportedProviderType
|
|
156
|
+
});
|
|
19
157
|
//# sourceMappingURL=index.js.map
|
package/dist/index.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"sources":["../src/index.ts"],"sourcesContent":["/**\n * @thorprovider/types v1.0\n * Shared TypeScript types for Thor Commerce ecosystem\n * \n * Pure type definitions with zero runtime dependencies.\n * Foundation for type-safe commerce operations following SOLID principles.\n */\n\n// ============================================\n// Common Types\n// ============================================\nexport type {\n Money,\n Image,\n SEO,\n Connection,\n Edge,\n PaginationOptions,\n SortOptions,\n Country,\n} from './common';\n\n// ============================================\n// Commerce Contracts (single-store context + guest shapes)\n// ============================================\nexport type {\n StoreContext,\n ShopperIdentity,\n CartSession,\n OrderReceipt,\n} from './commerce';\n\nexport type {\n AuthorConfig,\n BrandConfig,\n ModulesConfig,\n NavigationItem,\n SiteConfig,\n SocialConfig,\n} from './site-config';\n\nexport type { SiteConfigLabels } from './site-config-labels';\n\n// ============================================\n// Unified Query Types\n// ============================================\nexport type {\n QuerySortDirection,\n QueryEntityInput,\n QueryEntitiesInput,\n QueryMeta,\n QueryErrors,\n QueryResponse,\n} from './query';\n\n// ============================================\n// Catalog Query & Facet Support Types\n// ============================================\nexport type {\n CatalogSortKey,\n CatalogQuery,\n CatalogAppliedFilters,\n CatalogFacetId,\n CatalogFacetDemonstrationSource,\n FacetSupport,\n CatalogResults,\n CatalogQueryFailureCode,\n CatalogQueryFailureRepair,\n CatalogQueryFailure,\n CatalogQueryOutcome,\n} from './catalog';\n\n// ============================================\n// Product Types\n// ============================================\nexport type {\n Product,\n ProductOption,\n ProductVariant,\n SelectedOption,\n PriceRange,\n GetProductsOptions,\n ActiveFilter,\n SortOption,\n FilterSection,\n FilterOption,\n ProductPreview,\n Review,\n CompareProduct,\n AdminProductVariant,\n AdminProduct,\n AdvancedSearchProductsOptions,\n SearchResultMeta,\n FilterConfig,\n} from './product';\n\n// ============================================\n// Cart Types\n// ============================================\nexport type {\n Cart,\n CartItem,\n CartProduct,\n CartCost,\n CartLineInput,\n CartLineUpdate,\n ShippingMethod,\n DiscountCode,\n} from './cart';\n\n// ============================================\n// Inventory & Fulfillment Types\n// ============================================\nexport type {\n StockLocation,\n InventoryLevel,\n FulfillmentSet,\n FulfillmentOption,\n StockStatus,\n StockValidation,\n} from './stock-location';\n\n// ============================================\n// Collection Types\n// ============================================\nexport type {\n Collection,\n CollectionProductsOptions,\n GetCollectionsOptions,\n} from './collection';\n\n// ============================================\n// Category Types\n// ============================================\nexport type {\n ProductCategory,\n GetCategoriesOptions,\n GetCategoriesCallback,\n} from './category';\n\n// ============================================\n// Customer Types\n// ============================================\nexport type {\n Customer,\n Address,\n GetCustomersOptions,\n GetCustomersCallback,\n} from './customer';\n\n// ============================================\n// Region Types\n// ============================================\nexport type {\n Region,\n} from './region';\n\n// ============================================\n// Order Types\n// ============================================\nexport type {\n Order,\n OrderItem,\n OrderStatus,\n PaymentStatus,\n FulfillmentStatus,\n GetOrdersOptions,\n GetOrdersCallback,\n} from './order';\n\n// ============================================\n// Provider Types (L1 - type-only)\n// Runtime provider registry lives in @thorprovider/adapters\n// ============================================\nexport type { ProviderTypeString } from './provider';\n\n// ============================================\n// Storefront Types\n// ============================================\nexport type {\n StorefrontContext,\n StorefrontPlatformType,\n} from './storefront';\n\n// ============================================\n// Storefront Configuration Types\n// ============================================\nexport type {\n StorefrontConfig,\n StorefrontSeoDefaults,\n} from './storefront-config';\n\n// ============================================\n// Designer Configuration Types\n// ============================================\nexport type {\n DesignerConfig,\n DesignerThemeConfig,\n DesignerThemePreset,\n DesignerNavItem,\n DesignerHistoryEntry,\n} from './designer-config';\n\n// ============================================\n// Auth Types\n// ============================================\nexport type {\n AuthProvider,\n AuthConfig,\n AuthMethod,\n AuthStorage,\n LoginCredentials,\n RegisterData,\n AuthResponse,\n UpdateCustomerData,\n CreateAddressData,\n PasswordResetRequest,\n PasswordResetConfirm,\n TokenVerifyState,\n TokenVerifyResult,\n RecoveryConfirmResult,\n SalesChannelType,\n InterestCategory,\n RequestedProfile,\n SubmitApplicationSalesChannel,\n SubmitApplicationBody,\n SubmitApplicationCreated,\n SubmitApplicationConflictApplication,\n SubmitApplicationResponse,\n SubmitApplicationResult,\n} from './auth';\n\n// ============================================\n// Payment Types\n// ============================================\nexport type {\n PaymentMethod,\n PaymentMethodType,\n PaymentMethodFeatures,\n PaymentMethodsOptions,\n CachedPaymentMethods,\n} from './payment';\n\n// ============================================\n// Commerce Provider Interface\n// ============================================\nexport type {\n CommerceProvider,\n BackendCapabilities,\n ProviderConfig,\n} from './commerce-provider';\n\n// ============================================\n// Admin Types\n// ============================================\nexport type {\n AdminUser,\n AuditLog,\n DashboardConfig,\n DashboardMetrics,\n SalesMetrics,\n OrdersMetrics,\n ProductsMetrics,\n ChartDataPoint,\n DashboardMetricsAdapter,\n DashboardOrdersAdapter,\n DashboardProductsAdapter,\n AuditLogAdapter,\n SiteConfigMetadata,\n ConfigHistoryEntry,\n // Multi-tenant admin types\n AdminChannelCustomer,\n GetChannelCustomersResponse,\n GetChannelCustomersOptions,\n AdminApiKey,\n GetChannelApiKeysResponse,\n AdminChannelCategory,\n GetChannelCategoriesResponse,\n GetChannelCategoriesOptions,\n AdminSalesChannelRef,\n GetCategorySalesChannelsResponse,\n AssignCategoriesToChannelsBody,\n AssignCategoriesToChannelsResponse,\n UnassignCategoriesFromChannelsBody,\n UnassignCategoriesFromChannelsResponse,\n GetCollectionSalesChannelsResponse,\n AssignCollectionsToChannelsBody,\n AssignCollectionsToChannelsResponse,\n UnassignCollectionsFromChannelsBody,\n UnassignCollectionsFromChannelsResponse,\n AdminStorefrontSeoDefaults,\n AdminStorefrontConfig,\n GetAdminStorefrontConfigResponse,\n UpdateStorefrontConfigBody,\n UpdateStorefrontConfigResponse,\n AdminSiteConfigHistoryEntry,\n AdminSiteConfig,\n GetAdminSiteConfigResponse,\n UpdateSiteConfigBody,\n UpdateSiteConfigResponse,\n AdminSiteConfigHistoryEntryFull,\n GetAdminSiteConfigHistoryResponse,\n GetAdminSiteConfigHistoryOptions,\n RestoreSiteConfigResponse,\n LinkCustomerToChannelResponse,\n // Dropshipping types\n DropshipperAccountRef,\n DropshipperCostTier,\n DropshipperSaleTier,\n OnboardDropshipperBody,\n OnboardDropshipperResponse,\n DropshipperVariant,\n DropshipperProduct,\n DropshipperProductImage,\n DropshipperProductAttachment,\n DropshipperProductPrivateMedia,\n GetDropshipperProductsOptions,\n GetDropshipperProductsResponse,\n ValidateCheckoutItemsRequest,\n ValidatedCheckoutItem,\n ValidateCheckoutItemsResponse,\n UpdateDropshipperProductStatusBody,\n UpdateDropshipperProductStatusResponse,\n DropshipperPriceTier,\n DropshipperPriceItem,\n UpdateDropshipperPricesBody,\n UpdateDropshipperPricesResponse,\n DropshipperOrderCustomer,\n DropshipperOrder,\n GetDropshipperOrdersOptions,\n GetDropshipperOrdersResponse,\n DropshipperShippingOption,\n DropshipperShippingGroupOption,\n DropshipperShippingGroup,\n ShippingGroupInput,\n GetDropshipperShippingOptionsBody,\n GetDropshipperShippingOptionsResponse,\n DropshipperOrderShippingAddress,\n DropshipperOrderItem,\n DropshipperOrderTotals,\n DropshipperOrderTimelineEvent,\n DropshipperOrderDetail,\n GetDropshipperOrderDetailResponse,\n CreateOrderItem,\n CreateDropshipperOrderBody,\n CreateDropshipperOrderResponse,\n ExtendedCreateDropshipperOrderBody,\n ExtendedCreateDropshipperOrderResponse,\n SetPaymentCollectorBody,\n SetPaymentCollectorResponse,\n SetPaymentMethodBody,\n SetPaymentMethodResponse,\n DropshipperCategory,\n GetDropshipperCategoriesOptions,\n GetDropshipperCategoriesResponse,\n CreateDropshipperCategoryBody,\n UpdateDropshipperCategoryBody,\n DeleteDropshipperCategoryResponse,\n ProviderCategory,\n GetProviderCategoriesResponse,\n GetCategoryMappingsOptions,\n CategoryMapping,\n GetCategoryMappingsResponse,\n CreateCategoryMappingBody,\n CreateCategoryMappingResponse,\n DeleteCategoryMappingResponse,\n DropshipperCustomer,\n DropshipperCustomerStats,\n DropshipperCustomerFinancial,\n DropshipperCustomerAddress,\n DropshipperCustomerDetail,\n GetDropshipperCustomersOptions,\n GetDropshipperCustomersResponse,\n GetDropshipperCustomerDetailResponse,\n CreateDropshipperCustomerBody,\n CreateDropshipperCustomerResponse,\n UpdateDropshipperCustomerBody,\n UpdateDropshipperCustomerResponse,\n DropshipperBalance,\n DropshipperPendingOrders,\n DropshipperPaymentMethodConfig,\n DropshipperAccount,\n GetDropshipperAccountResponse,\n DropshipperPayableOrder,\n GetDropshipperPayableResponse,\n DropshipperReceivableOrder,\n GetDropshipperReceivableResponse,\n SettlementRecord,\n GetSettlementsOptions,\n GetSettlementsResponse,\n GetSettlementDetailResponse,\n CreateSettlementBody,\n CreateSettlementResponse,\n ConfirmSettlementBody,\n CancelSettlementBody,\n UpdateSettlementStatusResponse,\n AdminDropshipperAccount,\n AdminDropshipperBalance,\n GetAdminDropshipperAccountsResponse,\n GetAdminAccountBalanceResponse,\n GetAdminPriceListsResponse,\n GetUserChannelResponse,\n DropshipperPromotion,\n GetDropshipperPromotionsOptions,\n GetDropshipperPromotionsResponse,\n PromotionRule,\n CreateDropshipperPromotionBody,\n UpdateDropshipperPromotionBody,\n DeleteDropshipperPromotionResponse,\n GetDashboardStatsOptions,\n DashboardPeriodMetrics,\n DashboardChanges,\n DashboardTopProduct,\n DashboardStats,\n GetDashboardStatsResponse,\n GetStorefrontDropshipperCategoriesResponse,\n OrderNote,\n CreateOrderNoteBody,\n GetOrderNotesResponse,\n CreateOrderNoteResponse,\n DeleteOrderNoteResponse,\n // Order cancel and edits\n CancelDropshipperOrderResponse,\n CreateOrderEditBody,\n CreateOrderEditResponse,\n AddOrderEditItemBody,\n AddOrderEditItemResponse,\n ConfirmOrderEditResponse,\n // Draft Orders\n DropshipperDraftOrderItem,\n DropshipperDraftOrder,\n GetDropshipperDraftOrdersOptions,\n GetDropshipperDraftOrdersResponse,\n CreateDropshipperDraftOrderBody,\n CreateDropshipperDraftOrderResponse,\n GetDropshipperDraftOrderDetailResponse,\n UpdateDropshipperDraftOrderBody,\n UpdateDropshipperDraftOrderResponse,\n ConvertDropshipperDraftOrderBody,\n ConvertDropshipperDraftOrderResponse,\n DeleteDropshipperDraftOrderResponse,\n // Dropshipper addresses (channel-scoped)\n DropshipperAddressBody,\n DropshipperAddressResponse,\n GetDropshipperAddressesResponse,\n // Financial Endpoints — Group A\n SettlementStatus,\n GetDropshipperAccountBalanceResponse,\n GetDropshipperAccountOrdersOptions,\n GetDropshipperAccountOrdersResponse,\n GetAdminDropshipperAccountOrdersResponse,\n GetAdminDropshipperAccountSettlementsOptions,\n GetAdminDropshipperAccountSettlementsResponse,\n ResolveGuaranteeBody,\n ResolveGuaranteeResponse,\n CreateCompensacionBody,\n CreateCompensacionResponse,\n CreateAjusteBody,\n CreateAjusteResponse,\n // Financial Endpoints — Group B\n CreateCobroBody,\n CreateCobroResponse,\n CreatePagoBody,\n CreatePagoResponse,\n CreateReversoBody,\n CreateReversoResponse,\n ConfirmMovementBody,\n ConfirmMovementResponse,\n CancelMovementBody,\n CancelMovementResponse,\n GetFinancialAnalysisResponse,\n RegisterPaymentBody,\n RegisterPaymentResponse,\n // Dashboard Capabilities\n DropshipperDashboardCapabilities,\n // AI Assistant Chat\n ChatMessage,\n ChatRequest,\n ChatIntent,\n ChatSource,\n ChatSourceVariant,\n ChatResponse,\n ChatAssistantHealthResponse,\n // Geo-reference\n GeoCountry,\n GeoProvince,\n GeoCity,\n GetGeoCountriesResponse,\n GetGeoProvincesResponse,\n GetGeoCitiesResponse,\n // Product Attributes\n DropshipperProductAttribute,\n DropshipperProductAttributeValue,\n GetProductAttributesResponse,\n DropshipperAttributeDefinition,\n DropshipperAttributeDefinitionValue,\n GetDropshipperAttributesResponse,\n DropshipperProductOption,\n DropshipperProductOptionValue,\n // Dropshipper Profile\n DropshipperProfile,\n GetMyProfileResponse,\n // Cost Price Changes Detection\n CostPriceChangesCheckResponse,\n CostPriceChangeItem,\n CostPriceChangesResponse,\n AcknowledgeCostPriceChangesResponse,\n // Notifications\n NotificationData,\n PriceUpdatedNotificationData,\n ProductAssignedNotificationData,\n StockChangeNotificationData,\n ManualAdminNotificationData,\n RawNotification,\n GetNotificationsOptions,\n GetNotificationsResponse,\n // Notification preferences\n DropshipperNotificationEventType,\n DropshipperNotificationPreference,\n UpdateNotificationPreferencesBody,\n GetNotificationPreferencesResponse,\n } from './admin';\n\n// ============================================\n// Dropshipper Business Policy Types\n// ============================================\nexport type {\n GetBusinessPolicyResponse,\n UpdateBusinessPolicyBody,\n UpdateBusinessPolicyResponse,\n} from './dropshipper-business-policy';\n\n// ============================================\n// Header Configuration Types\n// ============================================\nexport type {\n IconConfig,\n NavigationCalloutItem,\n NavigationLinkItem,\n DynamicSource,\n HeaderLinkItem,\n AccountMenuItem,\n AccountDropdownConfig,\n SearchBarConfig,\n HeaderNavigationConfig,\n} from './header-config';\n"],"mappings":";;;;;;;;;;;;;;;;AAAA;AAAA;","names":[]}
|
|
1
|
+
{"version":3,"sources":["../src/index.ts","../src/provider.ts","../src/storefront.ts"],"sourcesContent":["/**\n * @thorprovider/types v1.0\n * Shared TypeScript types for Thor Commerce ecosystem\n * \n * Pure type definitions with zero runtime dependencies.\n * Foundation for type-safe commerce operations following SOLID principles.\n */\n\n// ============================================\n// Common Types\n// ============================================\nexport type {\n Money,\n Image,\n SEO,\n Connection,\n Edge,\n PaginationOptions,\n SortOptions,\n Country,\n} from './common';\n\nexport type {\n AuthorConfig,\n BrandConfig,\n ModulesConfig,\n NavigationItem,\n SiteConfig,\n SocialConfig,\n} from './site-config';\n\nexport type { SiteConfigLabels } from './site-config-labels';\n\n// ============================================\n// Unified Query Types\n// ============================================\nexport type {\n QuerySortDirection,\n QueryEntityInput,\n QueryEntitiesInput,\n QueryMeta,\n QueryErrors,\n QueryResponse,\n} from './query';\n\n// ============================================\n// Product Types\n// ============================================\nexport type {\n Product,\n ProductOption,\n ProductVariant,\n SelectedOption,\n PriceRange,\n GetProductsOptions,\n ActiveFilter,\n SortOption,\n FilterSection,\n FilterOption,\n ProductPreview,\n Review,\n CompareProduct,\n AdminProductVariant,\n AdminProduct,\n AdvancedSearchProductsOptions,\n SearchResultMeta,\n FilterConfig,\n} from './product';\n\n// ============================================\n// Cart Types\n// ============================================\nexport type {\n Cart,\n CartItem,\n CartProduct,\n CartCost,\n CartLineInput,\n CartLineUpdate,\n ShippingMethod,\n DiscountCode,\n} from './cart';\n\n// ============================================\n// Inventory & Fulfillment Types\n// ============================================\nexport type {\n StockLocation,\n InventoryLevel,\n FulfillmentSet,\n FulfillmentOption,\n StockStatus,\n StockValidation,\n} from './stock-location';\n\n// ============================================\n// Collection Types\n// ============================================\nexport type {\n Collection,\n CollectionProductsOptions,\n GetCollectionsOptions,\n} from './collection';\n\n// ============================================\n// Category Types\n// ============================================\nexport type {\n ProductCategory,\n GetCategoriesOptions,\n GetCategoriesCallback,\n} from './category';\n\n// ============================================\n// Customer Types\n// ============================================\nexport type {\n Customer,\n Address,\n GetCustomersOptions,\n GetCustomersCallback,\n} from './customer';\n\n// ============================================\n// Region Types\n// ============================================\nexport type {\n Region,\n} from './region';\n\n// ============================================\n// Order Types\n// ============================================\nexport type {\n Order,\n OrderItem,\n OrderStatus,\n PaymentStatus,\n FulfillmentStatus,\n GetOrdersOptions,\n GetOrdersCallback,\n} from './order';\n\n// ============================================\n// Provider Types (L1 - Source of Truth)\n// ============================================\nexport { SupportedProviderType, type ProviderTypeString } from './provider';\n\nexport {\n isSupportedProviderType,\n getProviderMetadata,\n PROVIDER_METADATA,\n} from './provider';\n\n// ============================================\n// Storefront Types\n// ============================================\nexport type {\n StorefrontContext,\n StorefrontPlatformType,\n} from './storefront';\n\nexport {\n StorefrontConfigError,\n} from './storefront';\n\n// ============================================\n// Storefront Configuration Types\n// ============================================\nexport type {\n StorefrontConfig,\n StorefrontSeoDefaults,\n} from './storefront-config';\n\n// ============================================\n// Designer Configuration Types\n// ============================================\nexport type {\n DesignerConfig,\n DesignerThemeConfig,\n DesignerThemePreset,\n DesignerNavItem,\n DesignerHistoryEntry,\n} from './designer-config';\n\n// ============================================\n// Auth Types\n// ============================================\nexport type {\n AuthProvider,\n AuthConfig,\n AuthMethod,\n AuthStorage,\n LoginCredentials,\n RegisterData,\n AuthResponse,\n UpdateCustomerData,\n CreateAddressData,\n PasswordResetRequest,\n PasswordResetConfirm,\n TokenVerifyState,\n TokenVerifyResult,\n RecoveryConfirmResult,\n SalesChannelType,\n InterestCategory,\n RequestedProfile,\n SubmitApplicationSalesChannel,\n SubmitApplicationBody,\n SubmitApplicationCreated,\n SubmitApplicationConflictApplication,\n SubmitApplicationResponse,\n SubmitApplicationResult,\n} from './auth';\n\n// ============================================\n// Payment Types\n// ============================================\nexport type {\n PaymentMethod,\n PaymentMethodType,\n PaymentMethodFeatures,\n PaymentMethodsOptions,\n CachedPaymentMethods,\n} from './payment';\n\n// ============================================\n// Commerce Provider Interface\n// ============================================\nexport type {\n CommerceProvider,\n BackendCapabilities,\n ProviderConfig,\n} from './commerce-provider';\n\n// ============================================\n// Admin Types\n// ============================================\nexport type {\n AdminUser,\n AuditLog,\n DashboardConfig,\n DashboardMetrics,\n SalesMetrics,\n OrdersMetrics,\n ProductsMetrics,\n ChartDataPoint,\n DashboardMetricsAdapter,\n DashboardOrdersAdapter,\n DashboardProductsAdapter,\n AuditLogAdapter,\n SiteConfigMetadata,\n ConfigHistoryEntry,\n // Multi-tenant admin types\n AdminChannelCustomer,\n GetChannelCustomersResponse,\n GetChannelCustomersOptions,\n AdminApiKey,\n GetChannelApiKeysResponse,\n AdminChannelCategory,\n GetChannelCategoriesResponse,\n GetChannelCategoriesOptions,\n AdminSalesChannelRef,\n GetCategorySalesChannelsResponse,\n AssignCategoriesToChannelsBody,\n AssignCategoriesToChannelsResponse,\n UnassignCategoriesFromChannelsBody,\n UnassignCategoriesFromChannelsResponse,\n GetCollectionSalesChannelsResponse,\n AssignCollectionsToChannelsBody,\n AssignCollectionsToChannelsResponse,\n UnassignCollectionsFromChannelsBody,\n UnassignCollectionsFromChannelsResponse,\n AdminStorefrontSeoDefaults,\n AdminStorefrontConfig,\n GetAdminStorefrontConfigResponse,\n UpdateStorefrontConfigBody,\n UpdateStorefrontConfigResponse,\n AdminSiteConfigHistoryEntry,\n AdminSiteConfig,\n GetAdminSiteConfigResponse,\n UpdateSiteConfigBody,\n UpdateSiteConfigResponse,\n AdminSiteConfigHistoryEntryFull,\n GetAdminSiteConfigHistoryResponse,\n GetAdminSiteConfigHistoryOptions,\n RestoreSiteConfigResponse,\n LinkCustomerToChannelResponse,\n // Dropshipping types\n DropshipperAccountRef,\n DropshipperCostTier,\n DropshipperSaleTier,\n OnboardDropshipperBody,\n OnboardDropshipperResponse,\n DropshipperVariant,\n DropshipperProduct,\n DropshipperProductImage,\n DropshipperProductAttachment,\n DropshipperProductPrivateMedia,\n GetDropshipperProductsOptions,\n GetDropshipperProductsResponse,\n ValidateCheckoutItemsRequest,\n ValidatedCheckoutItem,\n ValidateCheckoutItemsResponse,\n UpdateDropshipperProductStatusBody,\n UpdateDropshipperProductStatusResponse,\n DropshipperPriceTier,\n DropshipperPriceItem,\n UpdateDropshipperPricesBody,\n UpdateDropshipperPricesResponse,\n DropshipperOrderCustomer,\n DropshipperOrder,\n GetDropshipperOrdersOptions,\n GetDropshipperOrdersResponse,\n DropshipperShippingOption,\n DropshipperShippingGroupOption,\n DropshipperShippingGroup,\n ShippingGroupInput,\n GetDropshipperShippingOptionsBody,\n GetDropshipperShippingOptionsResponse,\n DropshipperOrderShippingAddress,\n DropshipperOrderItem,\n DropshipperOrderTotals,\n DropshipperOrderTimelineEvent,\n DropshipperOrderDetail,\n GetDropshipperOrderDetailResponse,\n CreateOrderItem,\n CreateDropshipperOrderBody,\n CreateDropshipperOrderResponse,\n ExtendedCreateDropshipperOrderBody,\n ExtendedCreateDropshipperOrderResponse,\n SetPaymentCollectorBody,\n SetPaymentCollectorResponse,\n SetPaymentMethodBody,\n SetPaymentMethodResponse,\n ValidateGiftCardBody,\n ValidateGiftCardResponse,\n DropshipperCategory,\n GetDropshipperCategoriesOptions,\n GetDropshipperCategoriesResponse,\n CreateDropshipperCategoryBody,\n UpdateDropshipperCategoryBody,\n DeleteDropshipperCategoryResponse,\n ProviderCategory,\n GetProviderCategoriesResponse,\n GetCategoryMappingsOptions,\n CategoryMapping,\n GetCategoryMappingsResponse,\n CreateCategoryMappingBody,\n CreateCategoryMappingResponse,\n DeleteCategoryMappingResponse,\n DropshipperCustomer,\n DropshipperCustomerStats,\n DropshipperCustomerFinancial,\n DropshipperCustomerAddress,\n DropshipperCustomerDetail,\n GetDropshipperCustomersOptions,\n GetDropshipperCustomersResponse,\n GetDropshipperCustomerDetailResponse,\n CreateDropshipperCustomerBody,\n CreateDropshipperCustomerResponse,\n UpdateDropshipperCustomerBody,\n UpdateDropshipperCustomerResponse,\n DropshipperBalance,\n DropshipperPendingOrders,\n DropshipperPaymentMethodConfig,\n DropshipperAccount,\n GetDropshipperAccountResponse,\n DropshipperPayableOrder,\n GetDropshipperPayableResponse,\n DropshipperReceivableOrder,\n GetDropshipperReceivableResponse,\n SettlementRecord,\n GetSettlementsOptions,\n GetSettlementsResponse,\n GetSettlementDetailResponse,\n CreateSettlementBody,\n CreateSettlementResponse,\n ConfirmSettlementBody,\n CancelSettlementBody,\n UpdateSettlementStatusResponse,\n AdminDropshipperAccount,\n AdminDropshipperBalance,\n GetAdminDropshipperAccountsResponse,\n GetAdminAccountBalanceResponse,\n GetAdminPriceListsResponse,\n GetUserChannelResponse,\n DropshipperPromotion,\n GetDropshipperPromotionsOptions,\n GetDropshipperPromotionsResponse,\n PromotionRule,\n CreateDropshipperPromotionBody,\n UpdateDropshipperPromotionBody,\n DeleteDropshipperPromotionResponse,\n GetDashboardStatsOptions,\n DashboardPeriodMetrics,\n DashboardChanges,\n DashboardTopProduct,\n DashboardStats,\n GetDashboardStatsResponse,\n GetStorefrontDropshipperCategoriesResponse,\n OrderNote,\n CreateOrderNoteBody,\n GetOrderNotesResponse,\n CreateOrderNoteResponse,\n DeleteOrderNoteResponse,\n // Order cancel and edits\n CancelDropshipperOrderResponse,\n CreateOrderEditBody,\n CreateOrderEditResponse,\n AddOrderEditItemBody,\n AddOrderEditItemResponse,\n ConfirmOrderEditResponse,\n // Draft Orders\n DropshipperDraftOrderItem,\n DropshipperDraftOrder,\n GetDropshipperDraftOrdersOptions,\n GetDropshipperDraftOrdersResponse,\n CreateDropshipperDraftOrderBody,\n CreateDropshipperDraftOrderResponse,\n GetDropshipperDraftOrderDetailResponse,\n UpdateDropshipperDraftOrderBody,\n UpdateDropshipperDraftOrderResponse,\n ConvertDropshipperDraftOrderBody,\n ConvertDropshipperDraftOrderResponse,\n DeleteDropshipperDraftOrderResponse,\n // Order totals preview\n PreviewDropshipperOrderItem,\n PreviewDropshipperOrderTotalsBody,\n PreviewDropshipperOrderTotalsResponse,\n // Dropshipper addresses (channel-scoped)\n DropshipperAddressBody,\n DropshipperAddressResponse,\n GetDropshipperAddressesResponse,\n // Financial Endpoints — Group A\n SettlementStatus,\n GetDropshipperAccountBalanceResponse,\n GetDropshipperAccountOrdersOptions,\n GetDropshipperAccountOrdersResponse,\n GetAdminDropshipperAccountOrdersResponse,\n GetAdminDropshipperAccountSettlementsOptions,\n GetAdminDropshipperAccountSettlementsResponse,\n ResolveGuaranteeBody,\n ResolveGuaranteeResponse,\n CreateCompensacionBody,\n CreateCompensacionResponse,\n CreateAjusteBody,\n CreateAjusteResponse,\n // Financial Endpoints — Group B\n CreateCobroBody,\n CreateCobroResponse,\n CreatePagoBody,\n CreatePagoResponse,\n CreateReversoBody,\n CreateReversoResponse,\n ConfirmMovementBody,\n ConfirmMovementResponse,\n CancelMovementBody,\n CancelMovementResponse,\n GetFinancialAnalysisResponse,\n RegisterPaymentBody,\n RegisterPaymentResponse,\n // Dashboard Capabilities\n DropshipperDashboardCapabilities,\n // AI Assistant Chat\n ChatMessage,\n ChatRequest,\n ChatIntent,\n ChatSource,\n ChatSourceVariant,\n ChatResponse,\n ChatAssistantHealthResponse,\n // Geo-reference\n GeoCountry,\n GeoProvince,\n GeoCity,\n GetGeoCountriesResponse,\n GetGeoProvincesResponse,\n GetGeoCitiesResponse,\n // Product Attributes\n DropshipperProductAttribute,\n DropshipperProductAttributeValue,\n GetProductAttributesResponse,\n DropshipperAttributeDefinition,\n DropshipperAttributeDefinitionValue,\n GetDropshipperAttributesResponse,\n DropshipperProductOption,\n DropshipperProductOptionValue,\n // Dropshipper Profile\n DropshipperProfile,\n GetMyProfileResponse,\n // Cost Price Changes Detection\n CostPriceChangesCheckResponse,\n CostPriceChangeItem,\n CostPriceChangesResponse,\n AcknowledgeCostPriceChangesResponse,\n // Notifications\n NotificationData,\n PriceUpdatedNotificationData,\n ProductAssignedNotificationData,\n StockChangeNotificationData,\n ManualAdminNotificationData,\n RawNotification,\n GetNotificationsOptions,\n GetNotificationsResponse,\n // Notification preferences\n DropshipperNotificationEventType,\n DropshipperNotificationPreference,\n UpdateNotificationPreferencesBody,\n GetNotificationPreferencesResponse,\n } from './admin';\n\n// ============================================\n// Dropshipper Business Policy Types\n// ============================================\nexport type {\n GetBusinessPolicyResponse,\n UpdateBusinessPolicyBody,\n UpdateBusinessPolicyResponse,\n} from './dropshipper-business-policy';\n\n// ============================================\n// Header Configuration Types\n// ============================================\nexport type {\n IconConfig,\n NavigationCalloutItem,\n NavigationLinkItem,\n DynamicSource,\n HeaderLinkItem,\n AccountMenuItem,\n AccountDropdownConfig,\n SearchBarConfig,\n HeaderNavigationConfig,\n} from './header-config';\n","/**\n * @thorprovider/types — Supported Providers\n *\n * Centralized list of all supported commerce providers.\n * This is the single source of truth for provider types across the monorepo.\n *\n * @remarks\n * - L1 (Foundation): Defines the contract\n * - L2 (@thorprovider/adapters) imports from here to build the factory\n * - L5 (Starters) uses the factory which is bound to this enum\n *\n * When adding a new provider (e.g., Stel Order):\n * 1. Add to SupportedProviderType enum below\n * 2. Update @thorprovider/adapters factory/index.ts with discriminated union\n * 3. Create packages/adapters/src/providers/shopify/\n * 4. Implement CommerceProvider interface\n * 5. Update StorefrontPlatformType in storefront.ts\n */\n\n/**\n * All supported commerce platform providers.\n * `mock` is the backend-optional runtime provider used for layout/design mode.\n * `medusa` is fully implemented for real backend usage; others are placeholders for future expansion.\n *\n * @remarks Implementation status:\n * - ✅ mock: Fixture-backed provider for backend-optional storefronts\n * - ✅ medusa: Fully implemented\n * - 🟡 stelorder: In progress (ERP adapter v1)\n * - 🟡 shopify: Planned (Phase 2)\n * - 🟡 bigcommerce: Planned (Phase 2)\n * - 🟡 woocommerce: Planned (Phase 3)\n * - 🟡 spree: Planned (Phase 3)\n * - 🟡 magento: Planned (Phase 3)\n */\nexport enum SupportedProviderType {\n Mock = 'mock',\n Medusa = 'medusa',\n StelOrder = 'stelorder',\n Shopify = 'shopify',\n BigCommerce = 'bigcommerce',\n WooCommerce = 'woocommerce',\n Spree = 'spree',\n Magento = 'magento',\n}\n\n/**\n * Union type of all supported provider string values.\n * Use this for type annotations when a provider type is expected.\n *\n * @example\n * ```typescript\n * function getProviderName(type: ProviderTypeString): string {\n * // type is 'medusa'\n * }\n * ```\n */\nexport type ProviderTypeString = 'mock' | 'medusa' | 'stelorder' | 'shopify' | 'bigcommerce' | 'woocommerce' | 'spree' | 'magento';\n\n/**\n * Metadata about each provider.\n * Useful for UI, error messages, validation, and documentation.\n *\n * @internal\n */\nexport const PROVIDER_METADATA: Record<\n ProviderTypeString,\n {\n name: string;\n description: string;\n requiresStorefront: boolean;\n requiredEnvVars: string[];\n maxRetries: number;\n }\n> = {\n mock: {\n name: 'Mock',\n description: 'Fixture-backed runtime provider for layout/design mode without a real backend',\n requiresStorefront: false,\n requiredEnvVars: [],\n maxRetries: 0,\n },\n medusa: {\n name: 'Medusa JS',\n description: 'Medusa v2 commerce engine',\n requiresStorefront: true,\n requiredEnvVars: [\n 'NEXT_PUBLIC_COMMERCE_API_URL',\n 'NEXT_PUBLIC_COMMERCE_API_KEY',\n 'NEXT_PUBLIC_SALES_CHANNEL_ID',\n ],\n maxRetries: 3,\n },\n stelorder: {\n name: 'Stel Order',\n description: 'Stel Order ERP and sales document API',\n requiresStorefront: false,\n requiredEnvVars: [\n 'NEXT_PUBLIC_COMMERCE_API_URL',\n 'NEXT_PUBLIC_COMMERCE_API_KEY',\n ],\n maxRetries: 2,\n },\n shopify: {\n name: 'Shopify',\n description: 'Shopify Storefront API (GraphQL)',\n requiresStorefront: false,\n requiredEnvVars: [\n 'NEXT_PUBLIC_SHOPIFY_STORE_DOMAIN',\n 'NEXT_PUBLIC_SHOPIFY_STOREFRONT_TOKEN',\n ],\n maxRetries: 3,\n },\n bigcommerce: {\n name: 'BigCommerce',\n description: 'BigCommerce REST Storefront API',\n requiresStorefront: false,\n requiredEnvVars: [\n 'BIGCOMMERCE_STORE_HASH',\n 'BIGCOMMERCE_STOREFRONT_API_TOKEN',\n 'BIGCOMMERCE_CHANNEL_ID',\n ],\n maxRetries: 3,\n },\n woocommerce: {\n name: 'WooCommerce',\n description: 'WooCommerce Store API + REST API v3',\n requiresStorefront: false,\n requiredEnvVars: [\n 'WOOCOMMERCE_URL',\n 'WOOCOMMERCE_CONSUMER_KEY',\n 'WOOCOMMERCE_CONSUMER_SECRET',\n ],\n maxRetries: 3,\n },\n spree: {\n name: 'Spree Commerce',\n description: 'Spree API v2 Storefront (JSON:API)',\n requiresStorefront: false,\n requiredEnvVars: [\n 'SPREE_API_URL',\n ],\n maxRetries: 3,\n },\n magento: {\n name: 'Adobe Commerce (Magento)',\n description: 'Adobe Commerce GraphQL + REST API',\n requiresStorefront: true,\n requiredEnvVars: [\n 'MAGENTO_URL',\n 'MAGENTO_STORE_CODE',\n ],\n maxRetries: 3,\n },\n};\n\n/**\n * Check if a string is a valid provider type.\n *\n * @example\n * ```typescript\n * if (isSupportedProviderType(process.env.COMMERCE_PROVIDER)) {\n * // type is narrowed to ProviderTypeString\n * }\n * ```\n */\nexport function isSupportedProviderType(\n value: unknown\n): value is ProviderTypeString {\n return (\n typeof value === 'string' &&\n Object.values(SupportedProviderType).includes(value as SupportedProviderType)\n );\n}\n\n/**\n * Get metadata for a provider type.\n * Useful for validation, error messages, and logging.\n *\n * @example\n * ```typescript\n * const meta = getProviderMetadata('medusa');\n * console.log(`Using ${meta.name} with max ${meta.maxRetries} retries`);\n * ```\n */\nexport function getProviderMetadata(\n type: ProviderTypeString\n): (typeof PROVIDER_METADATA)[ProviderTypeString] {\n if (!isSupportedProviderType(type)) {\n throw new Error(\n `Unsupported provider: ${type}. Supported: ${Object.values(\n SupportedProviderType\n ).join(', ')}`\n );\n }\n return PROVIDER_METADATA[type];\n}\n","/**\n * @thorprovider/types — Storefront Context\n *\n * Platform-agnostic representation of a \"sales channel\" or equivalent.\n * Abstracts differences between Medusa sales_channel, Shopify publications,\n * BigCommerce channels, WooCommerce sites, Spree stores, and Magento store views.\n *\n * @remarks\n * - Required for all multi-tenant deployments\n * - Returned by `CommerceProvider.getStorefrontContext()`\n * - MUST be validated on startup; errors should NOT be silently ignored\n */\n\n/**\n * Supported commerce platform types for storefront identification.\n *\n * @remarks\n * Keep this type in sync with SupportedProviderType from provider.ts.\n * When adding a new provider, update both packages/types/src/provider.ts\n * and this type.\n *\n * Currently supported:\n * - ✅ 'mock': Backend-optional layout/design mode using fixture data\n * - ✅ 'medusa': Fully implemented\n * - 🟡 'stelorder': ERP adapter v1\n *\n * Planned (not yet implemented):\n * - 🟡 'shopify': Phase 2\n * - 🟡 'bigcommerce': Phase 2\n * - 🟡 'woocommerce': Phase 3\n * - 🟡 'spree': Phase 3\n * - 🟡 'magento': Phase 3\n */\nexport type StorefrontPlatformType = 'mock' | 'medusa' | 'stelorder' | 'shopify' | 'bigcommerce' | 'woocommerce' | 'spree' | 'magento';\n\n/**\n * StorefrontContext\n *\n * Platform-agnostic representation of a \"sales channel\" or equivalent.\n *\n * @example\n * ```typescript\n * const ctx: StorefrontContext = {\n * id: 'sc_01J...',\n * name: 'B2C Storefront',\n * platformType: 'medusa',\n * requiresProductScoping: true,\n * currencyCode: 'USD',\n * };\n * ```\n */\nexport interface StorefrontContext {\n /**\n * Unique identifier for this storefront across the system.\n * Examples: \"sc_123\" (Medusa), \"gid://shopify/Channel/789\" (Shopify), \"1\" (WooCommerce)\n */\n id: string;\n\n /**\n * Human-readable name for logging and debugging.\n */\n name: string;\n\n /**\n * Platform this storefront belongs to.\n */\n platformType: StorefrontPlatformType;\n\n /**\n * Whether products must be explicitly linked/published to this storefront.\n *\n * @remarks\n * - Medusa: true (products must be linked to sales channel)\n * - Shopify: false (products visible by default unless unlisted)\n * - Stel Order: false (single-company ERP model, no native channel scoping)\n * - WooCommerce: false (no scoping concept)\n * - BigCommerce: false (products visible by default unless delisted)\n * - Spree: true (products must be assigned per store)\n * - Magento: true (products must be assigned per website)\n */\n requiresProductScoping: boolean;\n\n /**\n * Primary currency code for this storefront.\n * Examples: \"USD\", \"EUR\", \"GBP\"\n */\n currencyCode: string;\n\n /**\n * Optional region or locale code.\n * Examples: \"US\", \"EU\", \"en-US\", \"es-ES\"\n */\n locale?: string;\n\n /**\n * Optional: Store/Channel metadata from platform.\n * @internal\n */\n metadata?: Record<string, unknown>;\n}\n\n/**\n * Storefront validation error.\n * Thrown when storefront configuration is invalid or missing.\n *\n * @example\n * ```typescript\n * throw new StorefrontConfigError(\n * 'Medusa requires NEXT_PUBLIC_SALES_CHANNEL_ID',\n * 'medusa',\n * 'NEXT_PUBLIC_SALES_CHANNEL_ID',\n * );\n * ```\n */\nexport class StorefrontConfigError extends Error {\n public readonly platformType: string;\n public readonly requiredEnvVar?: string;\n\n constructor(\n message: string,\n platformType: string,\n requiredEnvVar?: string,\n ) {\n super(message);\n this.name = 'StorefrontConfigError';\n this.platformType = platformType;\n this.requiredEnvVar = requiredEnvVar;\n }\n}\n"],"mappings":";;;;;;;;;;;;;;;;;;;;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;;;ACkCO,IAAK,wBAAL,kBAAKA,2BAAL;AACL,EAAAA,uBAAA,UAAO;AACP,EAAAA,uBAAA,YAAS;AACT,EAAAA,uBAAA,eAAY;AACZ,EAAAA,uBAAA,aAAU;AACV,EAAAA,uBAAA,iBAAc;AACd,EAAAA,uBAAA,iBAAc;AACd,EAAAA,uBAAA,WAAQ;AACR,EAAAA,uBAAA,aAAU;AARA,SAAAA;AAAA,GAAA;AA8BL,IAAM,oBAST;AAAA,EACF,MAAM;AAAA,IACJ,MAAM;AAAA,IACN,aAAa;AAAA,IACb,oBAAoB;AAAA,IACpB,iBAAiB,CAAC;AAAA,IAClB,YAAY;AAAA,EACd;AAAA,EACA,QAAQ;AAAA,IACN,MAAM;AAAA,IACN,aAAa;AAAA,IACb,oBAAoB;AAAA,IACpB,iBAAiB;AAAA,MACf;AAAA,MACA;AAAA,MACA;AAAA,IACF;AAAA,IACA,YAAY;AAAA,EACd;AAAA,EACA,WAAW;AAAA,IACT,MAAM;AAAA,IACN,aAAa;AAAA,IACb,oBAAoB;AAAA,IACpB,iBAAiB;AAAA,MACf;AAAA,MACA;AAAA,IACF;AAAA,IACA,YAAY;AAAA,EACd;AAAA,EACA,SAAS;AAAA,IACP,MAAM;AAAA,IACN,aAAa;AAAA,IACb,oBAAoB;AAAA,IACpB,iBAAiB;AAAA,MACf;AAAA,MACA;AAAA,IACF;AAAA,IACA,YAAY;AAAA,EACd;AAAA,EACA,aAAa;AAAA,IACX,MAAM;AAAA,IACN,aAAa;AAAA,IACb,oBAAoB;AAAA,IACpB,iBAAiB;AAAA,MACf;AAAA,MACA;AAAA,MACA;AAAA,IACF;AAAA,IACA,YAAY;AAAA,EACd;AAAA,EACA,aAAa;AAAA,IACX,MAAM;AAAA,IACN,aAAa;AAAA,IACb,oBAAoB;AAAA,IACpB,iBAAiB;AAAA,MACf;AAAA,MACA;AAAA,MACA;AAAA,IACF;AAAA,IACA,YAAY;AAAA,EACd;AAAA,EACA,OAAO;AAAA,IACL,MAAM;AAAA,IACN,aAAa;AAAA,IACb,oBAAoB;AAAA,IACpB,iBAAiB;AAAA,MACf;AAAA,IACF;AAAA,IACA,YAAY;AAAA,EACd;AAAA,EACA,SAAS;AAAA,IACP,MAAM;AAAA,IACN,aAAa;AAAA,IACb,oBAAoB;AAAA,IACpB,iBAAiB;AAAA,MACf;AAAA,MACA;AAAA,IACF;AAAA,IACA,YAAY;AAAA,EACd;AACF;AAYO,SAAS,wBACd,OAC6B;AAC7B,SACE,OAAO,UAAU,YACjB,OAAO,OAAO,qBAAqB,EAAE,SAAS,KAA8B;AAEhF;AAYO,SAAS,oBACd,MACgD;AAChD,MAAI,CAAC,wBAAwB,IAAI,GAAG;AAClC,UAAM,IAAI;AAAA,MACR,yBAAyB,IAAI,gBAAgB,OAAO;AAAA,QAClD;AAAA,MACF,EAAE,KAAK,IAAI,CAAC;AAAA,IACd;AAAA,EACF;AACA,SAAO,kBAAkB,IAAI;AAC/B;;;ACjFO,IAAM,wBAAN,cAAoC,MAAM;AAAA,EAC/B;AAAA,EACA;AAAA,EAEhB,YACE,SACA,cACA,gBACA;AACA,UAAM,OAAO;AACb,SAAK,OAAO;AACZ,SAAK,eAAe;AACpB,SAAK,iBAAiB;AAAA,EACxB;AACF;","names":["SupportedProviderType"]}
|
package/dist/index.mjs
CHANGED
|
@@ -1 +1,126 @@
|
|
|
1
|
+
// src/provider.ts
|
|
2
|
+
var SupportedProviderType = /* @__PURE__ */ ((SupportedProviderType2) => {
|
|
3
|
+
SupportedProviderType2["Mock"] = "mock";
|
|
4
|
+
SupportedProviderType2["Medusa"] = "medusa";
|
|
5
|
+
SupportedProviderType2["StelOrder"] = "stelorder";
|
|
6
|
+
SupportedProviderType2["Shopify"] = "shopify";
|
|
7
|
+
SupportedProviderType2["BigCommerce"] = "bigcommerce";
|
|
8
|
+
SupportedProviderType2["WooCommerce"] = "woocommerce";
|
|
9
|
+
SupportedProviderType2["Spree"] = "spree";
|
|
10
|
+
SupportedProviderType2["Magento"] = "magento";
|
|
11
|
+
return SupportedProviderType2;
|
|
12
|
+
})(SupportedProviderType || {});
|
|
13
|
+
var PROVIDER_METADATA = {
|
|
14
|
+
mock: {
|
|
15
|
+
name: "Mock",
|
|
16
|
+
description: "Fixture-backed runtime provider for layout/design mode without a real backend",
|
|
17
|
+
requiresStorefront: false,
|
|
18
|
+
requiredEnvVars: [],
|
|
19
|
+
maxRetries: 0
|
|
20
|
+
},
|
|
21
|
+
medusa: {
|
|
22
|
+
name: "Medusa JS",
|
|
23
|
+
description: "Medusa v2 commerce engine",
|
|
24
|
+
requiresStorefront: true,
|
|
25
|
+
requiredEnvVars: [
|
|
26
|
+
"NEXT_PUBLIC_COMMERCE_API_URL",
|
|
27
|
+
"NEXT_PUBLIC_COMMERCE_API_KEY",
|
|
28
|
+
"NEXT_PUBLIC_SALES_CHANNEL_ID"
|
|
29
|
+
],
|
|
30
|
+
maxRetries: 3
|
|
31
|
+
},
|
|
32
|
+
stelorder: {
|
|
33
|
+
name: "Stel Order",
|
|
34
|
+
description: "Stel Order ERP and sales document API",
|
|
35
|
+
requiresStorefront: false,
|
|
36
|
+
requiredEnvVars: [
|
|
37
|
+
"NEXT_PUBLIC_COMMERCE_API_URL",
|
|
38
|
+
"NEXT_PUBLIC_COMMERCE_API_KEY"
|
|
39
|
+
],
|
|
40
|
+
maxRetries: 2
|
|
41
|
+
},
|
|
42
|
+
shopify: {
|
|
43
|
+
name: "Shopify",
|
|
44
|
+
description: "Shopify Storefront API (GraphQL)",
|
|
45
|
+
requiresStorefront: false,
|
|
46
|
+
requiredEnvVars: [
|
|
47
|
+
"NEXT_PUBLIC_SHOPIFY_STORE_DOMAIN",
|
|
48
|
+
"NEXT_PUBLIC_SHOPIFY_STOREFRONT_TOKEN"
|
|
49
|
+
],
|
|
50
|
+
maxRetries: 3
|
|
51
|
+
},
|
|
52
|
+
bigcommerce: {
|
|
53
|
+
name: "BigCommerce",
|
|
54
|
+
description: "BigCommerce REST Storefront API",
|
|
55
|
+
requiresStorefront: false,
|
|
56
|
+
requiredEnvVars: [
|
|
57
|
+
"BIGCOMMERCE_STORE_HASH",
|
|
58
|
+
"BIGCOMMERCE_STOREFRONT_API_TOKEN",
|
|
59
|
+
"BIGCOMMERCE_CHANNEL_ID"
|
|
60
|
+
],
|
|
61
|
+
maxRetries: 3
|
|
62
|
+
},
|
|
63
|
+
woocommerce: {
|
|
64
|
+
name: "WooCommerce",
|
|
65
|
+
description: "WooCommerce Store API + REST API v3",
|
|
66
|
+
requiresStorefront: false,
|
|
67
|
+
requiredEnvVars: [
|
|
68
|
+
"WOOCOMMERCE_URL",
|
|
69
|
+
"WOOCOMMERCE_CONSUMER_KEY",
|
|
70
|
+
"WOOCOMMERCE_CONSUMER_SECRET"
|
|
71
|
+
],
|
|
72
|
+
maxRetries: 3
|
|
73
|
+
},
|
|
74
|
+
spree: {
|
|
75
|
+
name: "Spree Commerce",
|
|
76
|
+
description: "Spree API v2 Storefront (JSON:API)",
|
|
77
|
+
requiresStorefront: false,
|
|
78
|
+
requiredEnvVars: [
|
|
79
|
+
"SPREE_API_URL"
|
|
80
|
+
],
|
|
81
|
+
maxRetries: 3
|
|
82
|
+
},
|
|
83
|
+
magento: {
|
|
84
|
+
name: "Adobe Commerce (Magento)",
|
|
85
|
+
description: "Adobe Commerce GraphQL + REST API",
|
|
86
|
+
requiresStorefront: true,
|
|
87
|
+
requiredEnvVars: [
|
|
88
|
+
"MAGENTO_URL",
|
|
89
|
+
"MAGENTO_STORE_CODE"
|
|
90
|
+
],
|
|
91
|
+
maxRetries: 3
|
|
92
|
+
}
|
|
93
|
+
};
|
|
94
|
+
function isSupportedProviderType(value) {
|
|
95
|
+
return typeof value === "string" && Object.values(SupportedProviderType).includes(value);
|
|
96
|
+
}
|
|
97
|
+
function getProviderMetadata(type) {
|
|
98
|
+
if (!isSupportedProviderType(type)) {
|
|
99
|
+
throw new Error(
|
|
100
|
+
`Unsupported provider: ${type}. Supported: ${Object.values(
|
|
101
|
+
SupportedProviderType
|
|
102
|
+
).join(", ")}`
|
|
103
|
+
);
|
|
104
|
+
}
|
|
105
|
+
return PROVIDER_METADATA[type];
|
|
106
|
+
}
|
|
107
|
+
|
|
108
|
+
// src/storefront.ts
|
|
109
|
+
var StorefrontConfigError = class extends Error {
|
|
110
|
+
platformType;
|
|
111
|
+
requiredEnvVar;
|
|
112
|
+
constructor(message, platformType, requiredEnvVar) {
|
|
113
|
+
super(message);
|
|
114
|
+
this.name = "StorefrontConfigError";
|
|
115
|
+
this.platformType = platformType;
|
|
116
|
+
this.requiredEnvVar = requiredEnvVar;
|
|
117
|
+
}
|
|
118
|
+
};
|
|
119
|
+
export {
|
|
120
|
+
PROVIDER_METADATA,
|
|
121
|
+
StorefrontConfigError,
|
|
122
|
+
SupportedProviderType,
|
|
123
|
+
getProviderMetadata,
|
|
124
|
+
isSupportedProviderType
|
|
125
|
+
};
|
|
1
126
|
//# sourceMappingURL=index.mjs.map
|
package/dist/index.mjs.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"sources":[],"sourcesContent":[],"mappings":"","names":[]}
|
|
1
|
+
{"version":3,"sources":["../src/provider.ts","../src/storefront.ts"],"sourcesContent":["/**\n * @thorprovider/types — Supported Providers\n *\n * Centralized list of all supported commerce providers.\n * This is the single source of truth for provider types across the monorepo.\n *\n * @remarks\n * - L1 (Foundation): Defines the contract\n * - L2 (@thorprovider/adapters) imports from here to build the factory\n * - L5 (Starters) uses the factory which is bound to this enum\n *\n * When adding a new provider (e.g., Stel Order):\n * 1. Add to SupportedProviderType enum below\n * 2. Update @thorprovider/adapters factory/index.ts with discriminated union\n * 3. Create packages/adapters/src/providers/shopify/\n * 4. Implement CommerceProvider interface\n * 5. Update StorefrontPlatformType in storefront.ts\n */\n\n/**\n * All supported commerce platform providers.\n * `mock` is the backend-optional runtime provider used for layout/design mode.\n * `medusa` is fully implemented for real backend usage; others are placeholders for future expansion.\n *\n * @remarks Implementation status:\n * - ✅ mock: Fixture-backed provider for backend-optional storefronts\n * - ✅ medusa: Fully implemented\n * - 🟡 stelorder: In progress (ERP adapter v1)\n * - 🟡 shopify: Planned (Phase 2)\n * - 🟡 bigcommerce: Planned (Phase 2)\n * - 🟡 woocommerce: Planned (Phase 3)\n * - 🟡 spree: Planned (Phase 3)\n * - 🟡 magento: Planned (Phase 3)\n */\nexport enum SupportedProviderType {\n Mock = 'mock',\n Medusa = 'medusa',\n StelOrder = 'stelorder',\n Shopify = 'shopify',\n BigCommerce = 'bigcommerce',\n WooCommerce = 'woocommerce',\n Spree = 'spree',\n Magento = 'magento',\n}\n\n/**\n * Union type of all supported provider string values.\n * Use this for type annotations when a provider type is expected.\n *\n * @example\n * ```typescript\n * function getProviderName(type: ProviderTypeString): string {\n * // type is 'medusa'\n * }\n * ```\n */\nexport type ProviderTypeString = 'mock' | 'medusa' | 'stelorder' | 'shopify' | 'bigcommerce' | 'woocommerce' | 'spree' | 'magento';\n\n/**\n * Metadata about each provider.\n * Useful for UI, error messages, validation, and documentation.\n *\n * @internal\n */\nexport const PROVIDER_METADATA: Record<\n ProviderTypeString,\n {\n name: string;\n description: string;\n requiresStorefront: boolean;\n requiredEnvVars: string[];\n maxRetries: number;\n }\n> = {\n mock: {\n name: 'Mock',\n description: 'Fixture-backed runtime provider for layout/design mode without a real backend',\n requiresStorefront: false,\n requiredEnvVars: [],\n maxRetries: 0,\n },\n medusa: {\n name: 'Medusa JS',\n description: 'Medusa v2 commerce engine',\n requiresStorefront: true,\n requiredEnvVars: [\n 'NEXT_PUBLIC_COMMERCE_API_URL',\n 'NEXT_PUBLIC_COMMERCE_API_KEY',\n 'NEXT_PUBLIC_SALES_CHANNEL_ID',\n ],\n maxRetries: 3,\n },\n stelorder: {\n name: 'Stel Order',\n description: 'Stel Order ERP and sales document API',\n requiresStorefront: false,\n requiredEnvVars: [\n 'NEXT_PUBLIC_COMMERCE_API_URL',\n 'NEXT_PUBLIC_COMMERCE_API_KEY',\n ],\n maxRetries: 2,\n },\n shopify: {\n name: 'Shopify',\n description: 'Shopify Storefront API (GraphQL)',\n requiresStorefront: false,\n requiredEnvVars: [\n 'NEXT_PUBLIC_SHOPIFY_STORE_DOMAIN',\n 'NEXT_PUBLIC_SHOPIFY_STOREFRONT_TOKEN',\n ],\n maxRetries: 3,\n },\n bigcommerce: {\n name: 'BigCommerce',\n description: 'BigCommerce REST Storefront API',\n requiresStorefront: false,\n requiredEnvVars: [\n 'BIGCOMMERCE_STORE_HASH',\n 'BIGCOMMERCE_STOREFRONT_API_TOKEN',\n 'BIGCOMMERCE_CHANNEL_ID',\n ],\n maxRetries: 3,\n },\n woocommerce: {\n name: 'WooCommerce',\n description: 'WooCommerce Store API + REST API v3',\n requiresStorefront: false,\n requiredEnvVars: [\n 'WOOCOMMERCE_URL',\n 'WOOCOMMERCE_CONSUMER_KEY',\n 'WOOCOMMERCE_CONSUMER_SECRET',\n ],\n maxRetries: 3,\n },\n spree: {\n name: 'Spree Commerce',\n description: 'Spree API v2 Storefront (JSON:API)',\n requiresStorefront: false,\n requiredEnvVars: [\n 'SPREE_API_URL',\n ],\n maxRetries: 3,\n },\n magento: {\n name: 'Adobe Commerce (Magento)',\n description: 'Adobe Commerce GraphQL + REST API',\n requiresStorefront: true,\n requiredEnvVars: [\n 'MAGENTO_URL',\n 'MAGENTO_STORE_CODE',\n ],\n maxRetries: 3,\n },\n};\n\n/**\n * Check if a string is a valid provider type.\n *\n * @example\n * ```typescript\n * if (isSupportedProviderType(process.env.COMMERCE_PROVIDER)) {\n * // type is narrowed to ProviderTypeString\n * }\n * ```\n */\nexport function isSupportedProviderType(\n value: unknown\n): value is ProviderTypeString {\n return (\n typeof value === 'string' &&\n Object.values(SupportedProviderType).includes(value as SupportedProviderType)\n );\n}\n\n/**\n * Get metadata for a provider type.\n * Useful for validation, error messages, and logging.\n *\n * @example\n * ```typescript\n * const meta = getProviderMetadata('medusa');\n * console.log(`Using ${meta.name} with max ${meta.maxRetries} retries`);\n * ```\n */\nexport function getProviderMetadata(\n type: ProviderTypeString\n): (typeof PROVIDER_METADATA)[ProviderTypeString] {\n if (!isSupportedProviderType(type)) {\n throw new Error(\n `Unsupported provider: ${type}. Supported: ${Object.values(\n SupportedProviderType\n ).join(', ')}`\n );\n }\n return PROVIDER_METADATA[type];\n}\n","/**\n * @thorprovider/types — Storefront Context\n *\n * Platform-agnostic representation of a \"sales channel\" or equivalent.\n * Abstracts differences between Medusa sales_channel, Shopify publications,\n * BigCommerce channels, WooCommerce sites, Spree stores, and Magento store views.\n *\n * @remarks\n * - Required for all multi-tenant deployments\n * - Returned by `CommerceProvider.getStorefrontContext()`\n * - MUST be validated on startup; errors should NOT be silently ignored\n */\n\n/**\n * Supported commerce platform types for storefront identification.\n *\n * @remarks\n * Keep this type in sync with SupportedProviderType from provider.ts.\n * When adding a new provider, update both packages/types/src/provider.ts\n * and this type.\n *\n * Currently supported:\n * - ✅ 'mock': Backend-optional layout/design mode using fixture data\n * - ✅ 'medusa': Fully implemented\n * - 🟡 'stelorder': ERP adapter v1\n *\n * Planned (not yet implemented):\n * - 🟡 'shopify': Phase 2\n * - 🟡 'bigcommerce': Phase 2\n * - 🟡 'woocommerce': Phase 3\n * - 🟡 'spree': Phase 3\n * - 🟡 'magento': Phase 3\n */\nexport type StorefrontPlatformType = 'mock' | 'medusa' | 'stelorder' | 'shopify' | 'bigcommerce' | 'woocommerce' | 'spree' | 'magento';\n\n/**\n * StorefrontContext\n *\n * Platform-agnostic representation of a \"sales channel\" or equivalent.\n *\n * @example\n * ```typescript\n * const ctx: StorefrontContext = {\n * id: 'sc_01J...',\n * name: 'B2C Storefront',\n * platformType: 'medusa',\n * requiresProductScoping: true,\n * currencyCode: 'USD',\n * };\n * ```\n */\nexport interface StorefrontContext {\n /**\n * Unique identifier for this storefront across the system.\n * Examples: \"sc_123\" (Medusa), \"gid://shopify/Channel/789\" (Shopify), \"1\" (WooCommerce)\n */\n id: string;\n\n /**\n * Human-readable name for logging and debugging.\n */\n name: string;\n\n /**\n * Platform this storefront belongs to.\n */\n platformType: StorefrontPlatformType;\n\n /**\n * Whether products must be explicitly linked/published to this storefront.\n *\n * @remarks\n * - Medusa: true (products must be linked to sales channel)\n * - Shopify: false (products visible by default unless unlisted)\n * - Stel Order: false (single-company ERP model, no native channel scoping)\n * - WooCommerce: false (no scoping concept)\n * - BigCommerce: false (products visible by default unless delisted)\n * - Spree: true (products must be assigned per store)\n * - Magento: true (products must be assigned per website)\n */\n requiresProductScoping: boolean;\n\n /**\n * Primary currency code for this storefront.\n * Examples: \"USD\", \"EUR\", \"GBP\"\n */\n currencyCode: string;\n\n /**\n * Optional region or locale code.\n * Examples: \"US\", \"EU\", \"en-US\", \"es-ES\"\n */\n locale?: string;\n\n /**\n * Optional: Store/Channel metadata from platform.\n * @internal\n */\n metadata?: Record<string, unknown>;\n}\n\n/**\n * Storefront validation error.\n * Thrown when storefront configuration is invalid or missing.\n *\n * @example\n * ```typescript\n * throw new StorefrontConfigError(\n * 'Medusa requires NEXT_PUBLIC_SALES_CHANNEL_ID',\n * 'medusa',\n * 'NEXT_PUBLIC_SALES_CHANNEL_ID',\n * );\n * ```\n */\nexport class StorefrontConfigError extends Error {\n public readonly platformType: string;\n public readonly requiredEnvVar?: string;\n\n constructor(\n message: string,\n platformType: string,\n requiredEnvVar?: string,\n ) {\n super(message);\n this.name = 'StorefrontConfigError';\n this.platformType = platformType;\n this.requiredEnvVar = requiredEnvVar;\n }\n}\n"],"mappings":";AAkCO,IAAK,wBAAL,kBAAKA,2BAAL;AACL,EAAAA,uBAAA,UAAO;AACP,EAAAA,uBAAA,YAAS;AACT,EAAAA,uBAAA,eAAY;AACZ,EAAAA,uBAAA,aAAU;AACV,EAAAA,uBAAA,iBAAc;AACd,EAAAA,uBAAA,iBAAc;AACd,EAAAA,uBAAA,WAAQ;AACR,EAAAA,uBAAA,aAAU;AARA,SAAAA;AAAA,GAAA;AA8BL,IAAM,oBAST;AAAA,EACF,MAAM;AAAA,IACJ,MAAM;AAAA,IACN,aAAa;AAAA,IACb,oBAAoB;AAAA,IACpB,iBAAiB,CAAC;AAAA,IAClB,YAAY;AAAA,EACd;AAAA,EACA,QAAQ;AAAA,IACN,MAAM;AAAA,IACN,aAAa;AAAA,IACb,oBAAoB;AAAA,IACpB,iBAAiB;AAAA,MACf;AAAA,MACA;AAAA,MACA;AAAA,IACF;AAAA,IACA,YAAY;AAAA,EACd;AAAA,EACA,WAAW;AAAA,IACT,MAAM;AAAA,IACN,aAAa;AAAA,IACb,oBAAoB;AAAA,IACpB,iBAAiB;AAAA,MACf;AAAA,MACA;AAAA,IACF;AAAA,IACA,YAAY;AAAA,EACd;AAAA,EACA,SAAS;AAAA,IACP,MAAM;AAAA,IACN,aAAa;AAAA,IACb,oBAAoB;AAAA,IACpB,iBAAiB;AAAA,MACf;AAAA,MACA;AAAA,IACF;AAAA,IACA,YAAY;AAAA,EACd;AAAA,EACA,aAAa;AAAA,IACX,MAAM;AAAA,IACN,aAAa;AAAA,IACb,oBAAoB;AAAA,IACpB,iBAAiB;AAAA,MACf;AAAA,MACA;AAAA,MACA;AAAA,IACF;AAAA,IACA,YAAY;AAAA,EACd;AAAA,EACA,aAAa;AAAA,IACX,MAAM;AAAA,IACN,aAAa;AAAA,IACb,oBAAoB;AAAA,IACpB,iBAAiB;AAAA,MACf;AAAA,MACA;AAAA,MACA;AAAA,IACF;AAAA,IACA,YAAY;AAAA,EACd;AAAA,EACA,OAAO;AAAA,IACL,MAAM;AAAA,IACN,aAAa;AAAA,IACb,oBAAoB;AAAA,IACpB,iBAAiB;AAAA,MACf;AAAA,IACF;AAAA,IACA,YAAY;AAAA,EACd;AAAA,EACA,SAAS;AAAA,IACP,MAAM;AAAA,IACN,aAAa;AAAA,IACb,oBAAoB;AAAA,IACpB,iBAAiB;AAAA,MACf;AAAA,MACA;AAAA,IACF;AAAA,IACA,YAAY;AAAA,EACd;AACF;AAYO,SAAS,wBACd,OAC6B;AAC7B,SACE,OAAO,UAAU,YACjB,OAAO,OAAO,qBAAqB,EAAE,SAAS,KAA8B;AAEhF;AAYO,SAAS,oBACd,MACgD;AAChD,MAAI,CAAC,wBAAwB,IAAI,GAAG;AAClC,UAAM,IAAI;AAAA,MACR,yBAAyB,IAAI,gBAAgB,OAAO;AAAA,QAClD;AAAA,MACF,EAAE,KAAK,IAAI,CAAC;AAAA,IACd;AAAA,EACF;AACA,SAAO,kBAAkB,IAAI;AAC/B;;;ACjFO,IAAM,wBAAN,cAAoC,MAAM;AAAA,EAC/B;AAAA,EACA;AAAA,EAEhB,YACE,SACA,cACA,gBACA;AACA,UAAM,OAAO;AACb,SAAK,OAAO;AACZ,SAAK,eAAe;AACpB,SAAK,iBAAiB;AAAA,EACxB;AACF;","names":["SupportedProviderType"]}
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@thorprovider/types",
|
|
3
|
-
"version": "5.7.
|
|
3
|
+
"version": "5.7.10",
|
|
4
4
|
"description": "Shared TypeScript types for Thor Commerce ecosystem - Framework-agnostic type definitions",
|
|
5
5
|
"main": "dist/index.js",
|
|
6
6
|
"types": "dist/index.d.ts",
|
|
@@ -32,4 +32,4 @@
|
|
|
32
32
|
"tsup": "^8.0.0",
|
|
33
33
|
"typescript": "^5.0.0"
|
|
34
34
|
}
|
|
35
|
-
}
|
|
35
|
+
}
|
|
@@ -1005,6 +1005,8 @@ export interface CreateDropshipperOrderBody {
|
|
|
1005
1005
|
/** One selected option per shipping group (contract v2). Replaces `shipping_method_id`. */
|
|
1006
1006
|
shipping_groups?: ShippingGroupInput[];
|
|
1007
1007
|
payment_method_id: string;
|
|
1008
|
+
/** Código de gift card (obligatorio si el método de pago es gift card). */
|
|
1009
|
+
gift_card_code?: string;
|
|
1008
1010
|
notes?: string;
|
|
1009
1011
|
}
|
|
1010
1012
|
|
|
@@ -1025,6 +1027,22 @@ export interface SetPaymentCollectorBody {
|
|
|
1025
1027
|
payment_collected_by: 'dropshipper' | 'provider';
|
|
1026
1028
|
}
|
|
1027
1029
|
|
|
1030
|
+
/** Body for `POST /admin/thor/dropshipper/gift-cards/validate` */
|
|
1031
|
+
export interface ValidateGiftCardBody {
|
|
1032
|
+
code: string;
|
|
1033
|
+
/** Moneda de la orden: si se envía, se valida que la gift card coincida. */
|
|
1034
|
+
currency_code?: string;
|
|
1035
|
+
}
|
|
1036
|
+
|
|
1037
|
+
/** Response for `POST /admin/thor/dropshipper/gift-cards/validate` */
|
|
1038
|
+
export interface ValidateGiftCardResponse {
|
|
1039
|
+
valid: boolean;
|
|
1040
|
+
/** Mensaje de usuario cuando `valid` es false. */
|
|
1041
|
+
reason?: string;
|
|
1042
|
+
balance?: number;
|
|
1043
|
+
currency_code?: string;
|
|
1044
|
+
}
|
|
1045
|
+
|
|
1028
1046
|
/** Response for `POST /admin/thor/dropshipper/orders/:id/set-payment-collector` */
|
|
1029
1047
|
export interface SetPaymentCollectorResponse {
|
|
1030
1048
|
order_id: string;
|
|
@@ -1136,6 +1154,8 @@ export interface DropshipperDraftOrder {
|
|
|
1136
1154
|
/** @deprecated legacy singular shipping method id; use `shipping_groups` instead. */
|
|
1137
1155
|
shipping_method_id: string | null;
|
|
1138
1156
|
payment_method_id: string | null;
|
|
1157
|
+
/** Código de gift card persistido en el borrador (metadata). */
|
|
1158
|
+
gift_card_code?: string | null;
|
|
1139
1159
|
notes: string | null;
|
|
1140
1160
|
converted_order_id: string | null; // Reference to Medusa order.id after conversion
|
|
1141
1161
|
converted_at: string | null; // ISO timestamp when converted
|
|
@@ -1186,6 +1206,7 @@ export interface CreateDropshipperDraftOrderBody {
|
|
|
1186
1206
|
/** @deprecated legacy singular shipping method id; use `shipping_groups` instead. */
|
|
1187
1207
|
shipping_method_id?: string;
|
|
1188
1208
|
payment_method_id?: string;
|
|
1209
|
+
gift_card_code?: string;
|
|
1189
1210
|
notes?: string;
|
|
1190
1211
|
}
|
|
1191
1212
|
|
|
@@ -1211,6 +1232,7 @@ export interface UpdateDropshipperDraftOrderBody {
|
|
|
1211
1232
|
/** @deprecated legacy singular shipping method id; use `shipping_groups` instead. */
|
|
1212
1233
|
shipping_method_id?: string;
|
|
1213
1234
|
payment_method_id?: string;
|
|
1235
|
+
gift_card_code?: string;
|
|
1214
1236
|
notes?: string;
|
|
1215
1237
|
}
|
|
1216
1238
|
|
|
@@ -1237,6 +1259,39 @@ export interface DeleteDropshipperDraftOrderResponse {
|
|
|
1237
1259
|
deleted: boolean;
|
|
1238
1260
|
}
|
|
1239
1261
|
|
|
1262
|
+
// ============================================================
|
|
1263
|
+
// Order totals preview (Solo Y)
|
|
1264
|
+
// ============================================================
|
|
1265
|
+
|
|
1266
|
+
/** Item for `POST /admin/thor/dropshipper/orders/preview-totals` */
|
|
1267
|
+
export interface PreviewDropshipperOrderItem {
|
|
1268
|
+
variant_id: string;
|
|
1269
|
+
quantity: number;
|
|
1270
|
+
/** Sale price per unit the dropshipper intends to charge (honored over the catalog price). */
|
|
1271
|
+
unit_price?: number;
|
|
1272
|
+
}
|
|
1273
|
+
|
|
1274
|
+
/** Body for `POST /admin/thor/dropshipper/orders/preview-totals` */
|
|
1275
|
+
export interface PreviewDropshipperOrderTotalsBody {
|
|
1276
|
+
customer_id: string;
|
|
1277
|
+
currency_code: string;
|
|
1278
|
+
items: PreviewDropshipperOrderItem[];
|
|
1279
|
+
shipping_address: DropshipperOrderShippingAddress;
|
|
1280
|
+
/** One selected option per shipping group (contract v2). Required when any item needs shipping. */
|
|
1281
|
+
shipping_groups?: ShippingGroupInput[];
|
|
1282
|
+
}
|
|
1283
|
+
|
|
1284
|
+
/** Response for `POST /admin/thor/dropshipper/orders/preview-totals` */
|
|
1285
|
+
export interface PreviewDropshipperOrderTotalsResponse {
|
|
1286
|
+
subtotal: number;
|
|
1287
|
+
items_subtotal: number;
|
|
1288
|
+
shipping_subtotal: number;
|
|
1289
|
+
shipping_total: number;
|
|
1290
|
+
tax_total: number;
|
|
1291
|
+
discount_total: number;
|
|
1292
|
+
total: number;
|
|
1293
|
+
}
|
|
1294
|
+
|
|
1240
1295
|
// ============================================================
|
|
1241
1296
|
// Custom Categories (Solo Y)
|
|
1242
1297
|
// ============================================================
|
|
@@ -1878,6 +1933,8 @@ export interface DashboardStats {
|
|
|
1878
1933
|
total: number;
|
|
1879
1934
|
profit: number;
|
|
1880
1935
|
status: string;
|
|
1936
|
+
/** Estado de cobro crudo del backend (captured/authorized/partially_captured/...). */
|
|
1937
|
+
payment_status: string;
|
|
1881
1938
|
created_at: string;
|
|
1882
1939
|
}>;
|
|
1883
1940
|
top_products_by_profit: DashboardTopProduct[];
|
package/src/cart.ts
CHANGED
|
@@ -26,13 +26,6 @@ export interface CartItem {
|
|
|
26
26
|
stockStatus?: StockStatus;
|
|
27
27
|
cost: {
|
|
28
28
|
totalAmount: Money;
|
|
29
|
-
/**
|
|
30
|
-
* Backend unit price for a single quantity, when the backend supplies it.
|
|
31
|
-
*
|
|
32
|
-
* Carried so the display never derives a unit price locally; absent when
|
|
33
|
-
* the backend did not return one.
|
|
34
|
-
*/
|
|
35
|
-
unitPrice?: Money;
|
|
36
29
|
};
|
|
37
30
|
merchandise: {
|
|
38
31
|
id: string;
|
|
@@ -44,20 +37,11 @@ export interface CartItem {
|
|
|
44
37
|
|
|
45
38
|
/**
|
|
46
39
|
* Cart cost breakdown
|
|
47
|
-
*
|
|
48
|
-
* Every amount is backend-authoritative: the adapter carries the backend's
|
|
49
|
-
* value through unchanged (including a legitimate `"0"`) and never derives a
|
|
50
|
-
* total locally. An optional amount is absent only when the backend did not
|
|
51
|
-
* supply it.
|
|
52
40
|
*/
|
|
53
41
|
export interface CartCost {
|
|
54
42
|
subtotalAmount: Money;
|
|
55
43
|
totalAmount: Money;
|
|
56
44
|
totalTaxAmount?: Money;
|
|
57
|
-
/** Backend discount total, when supplied. */
|
|
58
|
-
discountAmount?: Money;
|
|
59
|
-
/** Backend shipping total, when supplied. */
|
|
60
|
-
shippingAmount?: Money;
|
|
61
45
|
}
|
|
62
46
|
|
|
63
47
|
/**
|
|
@@ -100,30 +84,6 @@ export interface Cart {
|
|
|
100
84
|
stockValidation?: StockValidation;
|
|
101
85
|
/** ISO timestamp when cart was completed/converted to order (undefined if active) */
|
|
102
86
|
completedAt?: string;
|
|
103
|
-
/**
|
|
104
|
-
* Backend sales channel the cart is scoped to.
|
|
105
|
-
*
|
|
106
|
-
* Carried so the runtime can enforce that a cart belongs to the validated
|
|
107
|
-
* single-store context before it is mutated; absent when a provider does not
|
|
108
|
-
* expose it.
|
|
109
|
-
*/
|
|
110
|
-
salesChannelId?: string;
|
|
111
|
-
/** Backend region the cart is scoped to (context enforcement). */
|
|
112
|
-
regionId?: string;
|
|
113
|
-
/** Backend currency code, uppercased (context enforcement). */
|
|
114
|
-
currencyCode?: string;
|
|
115
|
-
/** Backend id of the applied shipping method, when one is selected. */
|
|
116
|
-
selectedShippingMethodId?: string;
|
|
117
|
-
/**
|
|
118
|
-
* Backend id of the shipping option the applied method was created from.
|
|
119
|
-
*
|
|
120
|
-
* This is the identity the checkout shipping UI selects (the value passed to
|
|
121
|
-
* `addShippingMethod`), which is distinct from `selectedShippingMethodId`
|
|
122
|
-
* (the applied shipping-method record id). Absent when no method is applied.
|
|
123
|
-
*/
|
|
124
|
-
selectedShippingOptionId?: string;
|
|
125
|
-
/** Platform-specific backend metadata, carried through unchanged. */
|
|
126
|
-
metadata?: Record<string, unknown>;
|
|
127
87
|
}
|
|
128
88
|
|
|
129
89
|
/**
|
package/src/collection.ts
CHANGED
|
@@ -26,16 +26,6 @@ export interface GetCollectionsOptions {
|
|
|
26
26
|
limit?: number;
|
|
27
27
|
/** Search query to filter collections by title */
|
|
28
28
|
query?: string;
|
|
29
|
-
/**
|
|
30
|
-
* Scope results to a specific sales channel / storefront channel.
|
|
31
|
-
* When provided, only collections that contain at least one product available
|
|
32
|
-
* in the given channel will be returned.
|
|
33
|
-
*
|
|
34
|
-
* Maps to: Medusa `sales_channel_id`, Shopify Sales Channel, etc.
|
|
35
|
-
* Adapters that support native server-side filtering should prefer it;
|
|
36
|
-
* others may fall back to a client-side post-filter pass.
|
|
37
|
-
*/
|
|
38
|
-
salesChannelId?: string;
|
|
39
29
|
}
|
|
40
30
|
|
|
41
31
|
/**
|
package/src/commerce-provider.ts
CHANGED
|
@@ -40,7 +40,6 @@ import type { StorefrontContext } from './storefront';
|
|
|
40
40
|
import type { StockLocation, InventoryLevel, StockValidation, FulfillmentOption } from './stock-location';
|
|
41
41
|
import type { StorefrontConfig } from './storefront-config';
|
|
42
42
|
import type { DesignerConfig, DesignerHistoryEntry } from './designer-config';
|
|
43
|
-
import type { CatalogQuery, CatalogQueryOutcome, CatalogSortKey } from './catalog';
|
|
44
43
|
|
|
45
44
|
/**
|
|
46
45
|
* Backend capabilities interface
|
|
@@ -214,22 +213,6 @@ export interface CommerceProvider {
|
|
|
214
213
|
*/
|
|
215
214
|
readonly capabilities: BackendCapabilities;
|
|
216
215
|
|
|
217
|
-
/**
|
|
218
|
-
* Canonical catalog sort keys this provider can actually apply at the query
|
|
219
|
-
* level (E2 `storefront-catalog-search-filters`, design Decision 6).
|
|
220
|
-
*
|
|
221
|
-
* Advertises only backend-verified orderings — for Medusa, `featured`
|
|
222
|
-
* (server default), `name` (translated to `title`), and `newest` (translated
|
|
223
|
-
* to `-created_at`). A global price or rating sort is never advertised. The
|
|
224
|
-
* runtime query boundary consumes this set as `supportedSortKeys` and turns a
|
|
225
|
-
* requested sort outside it into a typed unsupported-query error, so the
|
|
226
|
-
* listing never offers an ordering the backend cannot perform.
|
|
227
|
-
*
|
|
228
|
-
* Optional and additive: when absent, no ordering beyond the canonical default
|
|
229
|
-
* is assumed from the advertisement.
|
|
230
|
-
*/
|
|
231
|
-
readonly supportedCatalogSortKeys?: readonly CatalogSortKey[];
|
|
232
|
-
|
|
233
216
|
/**
|
|
234
217
|
* Whether this provider is backed by fixture/mock data instead of a live backend.
|
|
235
218
|
*
|
|
@@ -264,25 +247,6 @@ export interface CommerceProvider {
|
|
|
264
247
|
* for layout/design workflows until a real backend is configured.
|
|
265
248
|
*/
|
|
266
249
|
getProducts(options?: GetProductsOptions): Promise<Product[]>;
|
|
267
|
-
|
|
268
|
-
/**
|
|
269
|
-
* Run a canonical, validated catalog query against the real listing endpoint
|
|
270
|
-
* (OPTIONAL — E2 `storefront-catalog-search-filters`, task 2.2).
|
|
271
|
-
*
|
|
272
|
-
* The adapter translates the canonical `CatalogQuery` (text, the route
|
|
273
|
-
* category scope plus `categories`/`collections`, sort, pagination, and
|
|
274
|
-
* requested filters) into its backend's parameters and returns a truthful
|
|
275
|
-
* `CatalogQueryOutcome`: `{ ok: true, results }` only when **every** requested
|
|
276
|
-
* filter was applied, or `{ ok: false, error }` with `code:
|
|
277
|
-
* 'unsupported-query'` naming the fields it cannot apply. It never returns a
|
|
278
|
-
* partial result labelled success and never silently drops a requested filter.
|
|
279
|
-
*
|
|
280
|
-
* Optional and additive: providers that cannot forward a canonical query omit
|
|
281
|
-
* it and callers fall back to `getProducts`/`getCategoryProducts`. The legacy
|
|
282
|
-
* zero-argument and options-based methods keep their `Product[]` return and
|
|
283
|
-
* are unchanged. This is the typed seam the runtime catalog bridge consumes.
|
|
284
|
-
*/
|
|
285
|
-
getCatalogProducts?(query: CatalogQuery): Promise<CatalogQueryOutcome>;
|
|
286
250
|
|
|
287
251
|
/**
|
|
288
252
|
* Get product recommendations for a given product
|