@shopnex/cj-plugin 1.0.1 → 1.0.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 (90) hide show
  1. package/README.md +110 -0
  2. package/dist/CjConfig.d.ts +7 -0
  3. package/dist/CjConfig.js +93 -0
  4. package/dist/CjConfig.js.map +1 -0
  5. package/dist/api-client.d.ts +2 -0
  6. package/dist/api-client.js +27 -0
  7. package/dist/api-client.js.map +1 -0
  8. package/dist/auth.d.ts +15 -0
  9. package/dist/auth.js +47 -0
  10. package/dist/auth.js.map +1 -0
  11. package/dist/cj-settings.d.ts +2 -0
  12. package/dist/cj-settings.js +90 -0
  13. package/dist/cj-settings.js.map +1 -0
  14. package/dist/error-handler.d.ts +12 -0
  15. package/dist/error-handler.js +41 -0
  16. package/dist/error-handler.js.map +1 -0
  17. package/dist/error-types.d.ts +20 -0
  18. package/dist/error-types.js +7 -0
  19. package/dist/error-types.js.map +1 -0
  20. package/dist/exports/rsc.d.ts +1 -0
  21. package/dist/exports/rsc.js +3 -0
  22. package/dist/exports/rsc.js.map +1 -0
  23. package/dist/index.d.ts +11 -0
  24. package/dist/index.js +56 -0
  25. package/dist/index.js.map +1 -0
  26. package/dist/rsc/ApiToken.d.ts +9 -0
  27. package/dist/rsc/ApiToken.js +21 -0
  28. package/dist/rsc/ApiToken.js.map +1 -0
  29. package/dist/rsc/ApiToken.scss +5 -0
  30. package/dist/sdk/access-token.d.ts +9 -0
  31. package/dist/sdk/access-token.js +24 -0
  32. package/dist/sdk/access-token.js.map +1 -0
  33. package/dist/sdk/cj-sdk.d.ts +4 -0
  34. package/dist/sdk/cj-sdk.js +6 -0
  35. package/dist/sdk/cj-sdk.js.map +1 -0
  36. package/dist/sdk/dispute/dispute-types.d.ts +64 -0
  37. package/dist/sdk/dispute/dispute-types.js +4 -0
  38. package/dist/sdk/dispute/dispute-types.js.map +1 -0
  39. package/dist/sdk/dispute/dispute.d.ts +4 -0
  40. package/dist/sdk/dispute/dispute.js +52 -0
  41. package/dist/sdk/dispute/dispute.js.map +1 -0
  42. package/dist/sdk/inventory/inventory-types.d.ts +7 -0
  43. package/dist/sdk/inventory/inventory-types.js +3 -0
  44. package/dist/sdk/inventory/inventory-types.js.map +1 -0
  45. package/dist/sdk/inventory/inventory.d.ts +3 -0
  46. package/dist/sdk/inventory/inventory.js +41 -0
  47. package/dist/sdk/inventory/inventory.js.map +1 -0
  48. package/dist/sdk/orders/order-types.d.ts +135 -0
  49. package/dist/sdk/orders/order-types.js +3 -0
  50. package/dist/sdk/orders/order-types.js.map +1 -0
  51. package/dist/sdk/orders/orders.d.ts +16 -0
  52. package/dist/sdk/orders/orders.js +167 -0
  53. package/dist/sdk/orders/orders.js.map +1 -0
  54. package/dist/sdk/products/product-types.d.ts +186 -0
  55. package/dist/sdk/products/product-types.js +5 -0
  56. package/dist/sdk/products/product-types.js.map +1 -0
  57. package/dist/sdk/products/products.d.ts +9 -0
  58. package/dist/sdk/products/products.js +96 -0
  59. package/dist/sdk/products/products.js.map +1 -0
  60. package/dist/sdk/settings/settings-api.d.ts +2 -0
  61. package/dist/sdk/settings/settings-api.js +20 -0
  62. package/dist/sdk/settings/settings-api.js.map +1 -0
  63. package/dist/sdk/settings/settings-types.d.ts +22 -0
  64. package/dist/sdk/settings/settings-types.js +3 -0
  65. package/dist/sdk/settings/settings-types.js.map +1 -0
  66. package/dist/sdk/variants/variant-types.d.ts +18 -0
  67. package/dist/sdk/variants/variant-types.js +3 -0
  68. package/dist/sdk/variants/variant-types.js.map +1 -0
  69. package/dist/sdk/variants/variants.d.ts +8 -0
  70. package/dist/sdk/variants/variants.js +76 -0
  71. package/dist/sdk/variants/variants.js.map +1 -0
  72. package/dist/service/convert-html-to-lexical.d.ts +0 -0
  73. package/dist/service/convert-html-to-lexical.js +75 -0
  74. package/dist/service/convert-html-to-lexical.js.map +1 -0
  75. package/dist/service/create-order.hook.d.ts +12 -0
  76. package/dist/service/create-order.hook.js +70 -0
  77. package/dist/service/create-order.hook.js.map +1 -0
  78. package/dist/service/sync-products.d.ts +4 -0
  79. package/dist/service/sync-products.js +148 -0
  80. package/dist/service/sync-products.js.map +1 -0
  81. package/dist/types.d.ts +74 -0
  82. package/dist/types.js +3 -0
  83. package/dist/types.js.map +1 -0
  84. package/dist/ui/refund-button.d.ts +3 -0
  85. package/dist/ui/refund-button.js +24 -0
  86. package/dist/ui/refund-button.js.map +1 -0
  87. package/dist/util/manage-tokens.d.ts +4 -0
  88. package/dist/util/manage-tokens.js +41 -0
  89. package/dist/util/manage-tokens.js.map +1 -0
  90. package/package.json +1 -1
@@ -0,0 +1 @@
1
+ {"version":3,"sources":["../../../src/sdk/orders/orders.ts"],"sourcesContent":["import type { APIResponse } from '../../error-types'\nimport type { CJApiResponse } from '../../types'\nimport type {\n CreateOrderPayload,\n CreateOrderResponse,\n ListOrderResponse,\n QueryOrderParams,\n QueryOrderResponse,\n} from './order-types.ts'\n\nimport { cjApiClient } from '../../api-client'\nimport { getCurrentAccessToken } from '../access-token'\n\ninterface ListOrderParams {\n orderIds?: string[]\n pageNum?: number\n pageSize?: number\n status?: string\n}\n\nexport async function createOrder(\n orderData: CreateOrderPayload,\n): Promise<APIResponse<CreateOrderResponse>> {\n try {\n const accessToken = await getCurrentAccessToken()\n const response = await cjApiClient.post<CJApiResponse<CreateOrderResponse>>(\n 'shopping/order/createOrderV2',\n orderData,\n {\n headers: {\n 'CJ-Access-Token': accessToken,\n 'Content-Type': 'application/json',\n },\n },\n )\n\n if (!response.data.result) {\n return {\n error: response.data.message || 'Failed to create order',\n }\n }\n\n if (!response.data.data) {\n return { error: 'No order created' }\n }\n\n return { data: response.data.data }\n } catch (error: any) {\n console.error(`Error creating order [${error.code}]: ${error.message}`)\n return { error: error.message || 'An unknown error occurred' }\n }\n}\n\nexport async function listOrders(\n accessToken: string,\n params: ListOrderParams = {},\n): Promise<APIResponse<ListOrderResponse>> {\n try {\n const response = await cjApiClient.get<CJApiResponse<ListOrderResponse>>(\n 'shopping/order/list',\n {\n headers: {\n 'CJ-Access-Token': accessToken,\n },\n params,\n },\n )\n\n if (!response.data.result) {\n return {\n error: response.data.message || 'Failed to retrieve orders',\n }\n }\n\n if (!response.data.data) {\n return { error: 'No orders found' }\n }\n\n return { data: response.data.data }\n } catch (error: any) {\n console.error(`Error listing orders [${error.code}]: ${error.message}`)\n return { error: error.message || 'An unknown error occurred' }\n }\n}\n\nexport async function queryOrder(\n params: QueryOrderParams,\n): Promise<APIResponse<QueryOrderResponse>> {\n if (!params.orderId && !params.orderNum) {\n return { error: 'Either orderId or orderNum must be provided.' }\n }\n\n try {\n const accessToken = await getCurrentAccessToken()\n const response = await cjApiClient.get<CJApiResponse<QueryOrderResponse>>(\n 'shopping/order/getOrderDetail',\n {\n headers: {\n 'CJ-Access-Token': accessToken,\n },\n params,\n },\n )\n\n if (!response.data.result) {\n return {\n error: response.data.message || 'Failed to retrieve order details',\n }\n }\n\n if (!response.data.data) {\n return { error: 'No order details found' }\n }\n\n return { data: response.data.data }\n } catch (error: any) {\n console.error(`Error querying order [${error.code}]: ${error.message}`)\n return { error: error.message || 'An unknown error occurred' }\n }\n}\n\nexport async function deleteOrder(orderId: string): Promise<APIResponse<{ data: string }>> {\n if (!orderId) {\n return { error: 'orderId must be provided.' }\n }\n\n try {\n const accessToken = await getCurrentAccessToken()\n const response = await cjApiClient.delete<CJApiResponse<{ data: string }>>(\n 'shopping/order/deleteOrder',\n {\n headers: {\n 'CJ-Access-Token': accessToken,\n },\n params: { orderId },\n },\n )\n\n if (!response.data.result) {\n return {\n error: response.data.message || 'Failed to delete order',\n }\n }\n\n if (!response.data.data) {\n return { error: 'Order deletion not confirmed, no data returned' }\n }\n\n return { data: response.data.data }\n } catch (error: any) {\n console.error(`Error deleting order [${error.code}]: ${error.message}`)\n return { error: error.message || 'An unknown error occurred' }\n }\n}\n\nexport async function confirmOrder(orderId: string): Promise<APIResponse<string>> {\n if (!orderId) {\n return { error: 'orderId must be provided.' }\n }\n\n try {\n const accessToken = await getCurrentAccessToken()\n const response = await cjApiClient.patch<CJApiResponse<string>>(\n 'shopping/order/confirmOrder',\n { orderId },\n {\n headers: {\n 'CJ-Access-Token': accessToken,\n 'Content-Type': 'application/json',\n },\n },\n )\n\n if (!response.data.result) {\n return {\n error: response.data.message || 'Failed to confirm order',\n }\n }\n\n if (!response.data.data) {\n return {\n error: 'Order confirmation not confirmed, no data returned',\n }\n }\n\n return { data: response.data.data }\n } catch (error: any) {\n console.error(`Error confirming order [${error.code}]: ${error.message}`)\n return { error: error.message || 'An unknown error occurred' }\n }\n}\n"],"names":["cjApiClient","getCurrentAccessToken","createOrder","orderData","accessToken","response","post","headers","data","result","error","message","console","code","listOrders","params","get","queryOrder","orderId","orderNum","deleteOrder","delete","confirmOrder","patch"],"mappings":"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"}
@@ -0,0 +1,186 @@
1
+ import type { CJApiResponse } from '../../types';
2
+ /**
3
+ * API Request Parameters for CJ Dropshipping Product List
4
+ */
5
+ export interface ProductListParams {
6
+ /** Brand ID filter */
7
+ brandOpenId?: number;
8
+ /** Category ID for filtering */
9
+ categoryId?: string;
10
+ /** Country code, e.g., CN, US */
11
+ countryCode?: string;
12
+ /** Start creation time, format: yyyy-MM-dd hh:mm:ss */
13
+ createTimeFrom?: string;
14
+ /** End creation time, format: yyyy-MM-dd hh:mm:ss */
15
+ createTimeTo?: string;
16
+ /** Delivery time in hours, values: 24, 48, 72 */
17
+ deliveryTime?: string;
18
+ /** Maximum inventory filter */
19
+ endInventory?: number;
20
+ /** Maximum listed number */
21
+ maxListedNum?: number;
22
+ /** Maximum price filter */
23
+ maxPrice?: number;
24
+ /** Minimum listed number */
25
+ minListedNum?: number;
26
+ /** Minimum price filter */
27
+ minPrice?: number;
28
+ /** Sort field: createAt/listedNum, default is createAt */
29
+ orderBy?: string;
30
+ /** Page number
31
+ * @default 1
32
+ * @example 1
33
+ */
34
+ pageNum?: number;
35
+ /** Quantity of results on each page, default is 20 */
36
+ pageSize?: number;
37
+ /** Product ID for specific lookup */
38
+ pid?: string;
39
+ /** Product name for search */
40
+ productName?: string;
41
+ /** Product name in English */
42
+ productNameEn?: string;
43
+ /** Product SKU for specific lookup */
44
+ productSku?: string;
45
+ /** Product type, values: ORDINARY_PRODUCT, SUPPLIER_PRODUCT */
46
+ productType?: string;
47
+ /** Search type: 0 = All, 2 = Trending, 21 = Trending View More */
48
+ searchType?: number;
49
+ /** Sort order: asc/desc, default is desc */
50
+ sort?: string;
51
+ /** Minimum inventory filter */
52
+ startInventory?: number;
53
+ /** Verified inventory type: 1 = Verified, 2 = Unverified */
54
+ verifiedWarehouse?: number;
55
+ }
56
+ /**
57
+ * Product Data Structure
58
+ */
59
+ export interface Product {
60
+ addMarkStatus?: boolean;
61
+ categoryId: string;
62
+ categoryName: string;
63
+ createTime?: string;
64
+ isVideo?: number;
65
+ listedNum?: number;
66
+ listingCount?: number;
67
+ pid: string;
68
+ productImage: string;
69
+ productName: string[];
70
+ productNameEn: string;
71
+ productSku: string;
72
+ productType: null | string;
73
+ productUnit: string;
74
+ productWeight: number;
75
+ saleStatus?: number;
76
+ sellPrice: number;
77
+ sourceFrom?: string;
78
+ supplierId?: string;
79
+ supplierName?: string;
80
+ }
81
+ /**
82
+ * Parameters for querying product details.
83
+ */
84
+ export interface ProductQueryParams {
85
+ /** Product ID
86
+ * @example "000B9312-456A-4D31-94BD-B083E2A198E8"
87
+ */
88
+ pid?: string;
89
+ /** Product SKU
90
+ * @example "CJJJJTJT05843"
91
+ */
92
+ productSku?: string;
93
+ /** Variant SKU
94
+ * @example "CJJJJTJT05843-Black"
95
+ */
96
+ variantSku?: string;
97
+ }
98
+ /**
99
+ * Variant details of a product.
100
+ */
101
+ export interface ProductVariant {
102
+ createTime?: string;
103
+ pid: string;
104
+ variantHeight?: number;
105
+ variantImage?: string;
106
+ variantKey?: string;
107
+ variantLength?: number;
108
+ variantName?: string;
109
+ variantNameEn: string;
110
+ variantProperty?: string;
111
+ variantSellPrice?: number;
112
+ variantSku: string;
113
+ variantStandard?: string;
114
+ variantSugSellPrice?: number;
115
+ variantUnit?: string;
116
+ variantVolume?: number;
117
+ variantWeight?: number;
118
+ variantWidth?: number;
119
+ vid: string;
120
+ }
121
+ /**
122
+ * Product details.
123
+ */
124
+ export interface ProductDetails {
125
+ categoryId: string;
126
+ categoryName: string;
127
+ createrTime?: string;
128
+ description?: string;
129
+ entryCode?: string;
130
+ entryName?: string;
131
+ entryNameEn?: string;
132
+ listedNum: number;
133
+ materialKey?: string[];
134
+ materialName?: string[];
135
+ materialNameEn?: string[];
136
+ packingKey?: string[];
137
+ packingName?: string[];
138
+ packingNameEn?: string[];
139
+ packingWeight?: number;
140
+ pid: string;
141
+ productImage: string;
142
+ productKey?: string[];
143
+ productKeyEn?: string;
144
+ productName: string[];
145
+ productNameEn: string;
146
+ productSku: string;
147
+ productType: 'ORDINARY_PRODUCT' | 'PACKAGING_PRODUCT' | 'SERVICE_PRODUCT' | 'SUPPLIER_PRODUCT' | 'SUPPLIER_SHIPPED_PRODUCT';
148
+ productUnit: string;
149
+ productWeight: number;
150
+ sellPrice: number;
151
+ status: '0' | '1' | '2' | '3' | '4' | '5' | '6';
152
+ suggestSellPrice?: string;
153
+ supplierId?: string;
154
+ supplierName?: string;
155
+ variants?: ProductVariant[];
156
+ }
157
+ export interface CategoryThirdLevel {
158
+ categoryId: string;
159
+ categoryName: string;
160
+ }
161
+ interface CategorySecondLevel {
162
+ categorySecondList: CategoryThirdLevel[];
163
+ categorySecondName: string;
164
+ }
165
+ export interface CategoryFirstLevel {
166
+ categoryFirstList: CategorySecondLevel[];
167
+ categoryFirstName: string;
168
+ }
169
+ /**
170
+ * API Response Structure for CJ Dropshipping Category List
171
+ */
172
+ export type CategoryListResponse = CJApiResponse<CategoryFirstLevel[]>;
173
+ /**
174
+ * API Response Structure for CJ Dropshipping Product List
175
+ */
176
+ export type ProductListResponse = CJApiResponse<{
177
+ list: Product[];
178
+ pageNum: number;
179
+ pageSize: number;
180
+ total: number;
181
+ }>;
182
+ /**
183
+ * API response format for product query.
184
+ */
185
+ export type ProductQueryResponse = CJApiResponse<ProductDetails>;
186
+ export {};
@@ -0,0 +1,5 @@
1
+ /**
2
+ * API response format for product query.
3
+ */ export { };
4
+
5
+ //# sourceMappingURL=product-types.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"sources":["../../../src/sdk/products/product-types.ts"],"sourcesContent":["import type { CJApiResponse } from '../../types'\n\n/**\n * API Request Parameters for CJ Dropshipping Product List\n */\nexport interface ProductListParams {\n /** Brand ID filter */\n brandOpenId?: number\n /** Category ID for filtering */\n categoryId?: string\n /** Country code, e.g., CN, US */\n countryCode?: string\n /** Start creation time, format: yyyy-MM-dd hh:mm:ss */\n createTimeFrom?: string\n /** End creation time, format: yyyy-MM-dd hh:mm:ss */\n createTimeTo?: string\n /** Delivery time in hours, values: 24, 48, 72 */\n deliveryTime?: string\n /** Maximum inventory filter */\n endInventory?: number\n /** Maximum listed number */\n maxListedNum?: number\n /** Maximum price filter */\n maxPrice?: number\n /** Minimum listed number */\n minListedNum?: number\n /** Minimum price filter */\n minPrice?: number\n /** Sort field: createAt/listedNum, default is createAt */\n orderBy?: string\n /** Page number\n * @default 1\n * @example 1\n */\n pageNum?: number\n /** Quantity of results on each page, default is 20 */\n pageSize?: number\n /** Product ID for specific lookup */\n pid?: string\n /** Product name for search */\n productName?: string\n /** Product name in English */\n productNameEn?: string\n /** Product SKU for specific lookup */\n productSku?: string\n /** Product type, values: ORDINARY_PRODUCT, SUPPLIER_PRODUCT */\n productType?: string\n /** Search type: 0 = All, 2 = Trending, 21 = Trending View More */\n searchType?: number\n /** Sort order: asc/desc, default is desc */\n sort?: string\n /** Minimum inventory filter */\n startInventory?: number\n /** Verified inventory type: 1 = Verified, 2 = Unverified */\n verifiedWarehouse?: number\n}\n\n/**\n * Product Data Structure\n */\nexport interface Product {\n addMarkStatus?: boolean\n categoryId: string\n categoryName: string\n createTime?: string\n isVideo?: number\n listedNum?: number\n listingCount?: number\n pid: string\n productImage: string\n productName: string[]\n productNameEn: string\n productSku: string\n productType: null | string\n productUnit: string\n productWeight: number\n saleStatus?: number\n sellPrice: number\n sourceFrom?: string\n supplierId?: string\n supplierName?: string\n}\n\n/**\n * Parameters for querying product details.\n */\nexport interface ProductQueryParams {\n /** Product ID\n * @example \"000B9312-456A-4D31-94BD-B083E2A198E8\"\n */\n pid?: string\n\n /** Product SKU\n * @example \"CJJJJTJT05843\"\n */\n productSku?: string\n\n /** Variant SKU\n * @example \"CJJJJTJT05843-Black\"\n */\n variantSku?: string\n}\n\n/**\n * Variant details of a product.\n */\nexport interface ProductVariant {\n createTime?: string\n pid: string\n variantHeight?: number\n variantImage?: string\n variantKey?: string\n variantLength?: number\n variantName?: string\n variantNameEn: string\n variantProperty?: string\n variantSellPrice?: number\n variantSku: string\n variantStandard?: string\n variantSugSellPrice?: number\n variantUnit?: string\n variantVolume?: number\n variantWeight?: number\n variantWidth?: number\n vid: string\n}\n\n/**\n * Product details.\n */\nexport interface ProductDetails {\n categoryId: string\n categoryName: string\n createrTime?: string\n description?: string\n entryCode?: string\n entryName?: string\n entryNameEn?: string\n listedNum: number\n materialKey?: string[]\n materialName?: string[]\n materialNameEn?: string[]\n packingKey?: string[]\n packingName?: string[]\n packingNameEn?: string[]\n packingWeight?: number\n pid: string\n productImage: string\n productKey?: string[]\n productKeyEn?: string\n productName: string[]\n productNameEn: string\n productSku: string\n productType:\n | 'ORDINARY_PRODUCT'\n | 'PACKAGING_PRODUCT'\n | 'SERVICE_PRODUCT'\n | 'SUPPLIER_PRODUCT'\n | 'SUPPLIER_SHIPPED_PRODUCT'\n productUnit: string\n productWeight: number\n sellPrice: number\n status: '0' | '1' | '2' | '3' | '4' | '5' | '6'\n suggestSellPrice?: string\n supplierId?: string\n supplierName?: string\n variants?: ProductVariant[]\n}\n\nexport interface CategoryThirdLevel {\n categoryId: string\n categoryName: string\n}\n\ninterface CategorySecondLevel {\n categorySecondList: CategoryThirdLevel[]\n categorySecondName: string\n}\n\nexport interface CategoryFirstLevel {\n categoryFirstList: CategorySecondLevel[]\n categoryFirstName: string\n}\n/**\n * API Response Structure for CJ Dropshipping Category List\n */\nexport type CategoryListResponse = CJApiResponse<CategoryFirstLevel[]>\n\n/**\n * API Response Structure for CJ Dropshipping Product List\n */\nexport type ProductListResponse = CJApiResponse<{\n list: Product[]\n pageNum: number\n pageSize: number\n total: number\n}>\n\n/**\n * API response format for product query.\n */\nexport type ProductQueryResponse = CJApiResponse<ProductDetails>\n"],"names":[],"mappings":"AAsMA;;CAEC,GACD,WAAgE"}
@@ -0,0 +1,9 @@
1
+ import type { APIResponse } from '../../error-types';
2
+ import type { CategoryFirstLevel, Product, ProductDetails } from './product-types.ts';
3
+ export declare function getProductCategory(accessToken: string, params: any): Promise<APIResponse<CategoryFirstLevel[]>>;
4
+ export declare function getProductList(params?: Record<string, any>): Promise<APIResponse<Product[]>>;
5
+ export declare function getProductDetails(queryParams: {
6
+ pid?: string;
7
+ productSku?: string;
8
+ variantSku?: string;
9
+ }): Promise<APIResponse<ProductDetails>>;
@@ -0,0 +1,96 @@
1
+ import { cjApiClient } from '../../api-client';
2
+ import { getCurrentAccessToken } from '../access-token';
3
+ export async function getProductCategory(accessToken, params) {
4
+ try {
5
+ const response = await cjApiClient.get('/product/getCategory', {
6
+ headers: {
7
+ 'CJ-Access-Token': accessToken
8
+ },
9
+ params
10
+ });
11
+ const data = response.data.data;
12
+ if (!data) {
13
+ return {
14
+ error: 'No categories found'
15
+ };
16
+ }
17
+ return {
18
+ data
19
+ };
20
+ } catch (error) {
21
+ console.error(`Error fetching categories [${error.code}]: ${error.message}`);
22
+ return {
23
+ error: error.message || 'Failed to fetch categories'
24
+ };
25
+ }
26
+ }
27
+ export async function getProductList(params = {}) {
28
+ const defaultParams = {
29
+ pageNum: 1,
30
+ pageSize: 20
31
+ };
32
+ const query = {
33
+ ...defaultParams,
34
+ ...params
35
+ };
36
+ try {
37
+ const accessToken = await getCurrentAccessToken();
38
+ const response = await cjApiClient.get('https://developers.cjdropshipping.com/api2.0/v1/product/list', {
39
+ headers: {
40
+ 'CJ-Access-Token': accessToken
41
+ },
42
+ params: query
43
+ });
44
+ const data = response.data;
45
+ if (!data.result) {
46
+ return {
47
+ error: data.message || 'Failed to fetch product list'
48
+ };
49
+ }
50
+ if (!data.data?.list) {
51
+ return {
52
+ error: 'No products found'
53
+ };
54
+ }
55
+ return {
56
+ data: data.data.list
57
+ };
58
+ } catch (error) {
59
+ console.error(`Error fetching product list [${error.code}]: ${error.message}`);
60
+ return {
61
+ error: error.message || 'Failed to fetch product list'
62
+ };
63
+ }
64
+ }
65
+ export async function getProductDetails(queryParams) {
66
+ const { pid, productSku, variantSku } = queryParams;
67
+ if (!pid && !productSku && !variantSku) {
68
+ return {
69
+ error: 'One of pid, productSku, or variantSku must be provided.'
70
+ };
71
+ }
72
+ try {
73
+ const accessToken = await getCurrentAccessToken();
74
+ const response = await cjApiClient.get('https://developers.cjdropshipping.com/api2.0/v1/product/query', {
75
+ headers: {
76
+ 'CJ-Access-Token': accessToken
77
+ },
78
+ params: queryParams
79
+ });
80
+ if (!response.data.result) {
81
+ return {
82
+ error: response.data.message || 'Failed to fetch product details'
83
+ };
84
+ }
85
+ return {
86
+ data: response.data.data
87
+ };
88
+ } catch (error) {
89
+ console.error(`Error fetching product details [${error.code}]: ${error.message}`);
90
+ return {
91
+ error: error.message || 'Failed to fetch product details'
92
+ };
93
+ }
94
+ }
95
+
96
+ //# sourceMappingURL=products.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"sources":["../../../src/sdk/products/products.ts"],"sourcesContent":["import type { APIResponse } from '../../error-types'\nimport type {\n CategoryFirstLevel,\n CategoryListResponse,\n Product,\n ProductDetails,\n ProductListResponse,\n} from './product-types.ts'\n\nimport { cjApiClient } from '../../api-client'\nimport { getCurrentAccessToken } from '../access-token'\n\nexport async function getProductCategory(\n accessToken: string,\n params: any,\n): Promise<APIResponse<CategoryFirstLevel[]>> {\n try {\n const response = await cjApiClient.get<CategoryListResponse>('/product/getCategory', {\n headers: { 'CJ-Access-Token': accessToken },\n params,\n })\n\n const data = response.data.data\n if (!data) {\n return { error: 'No categories found' }\n }\n\n return { data }\n } catch (error: any) {\n console.error(`Error fetching categories [${error.code}]: ${error.message}`)\n return { error: error.message || 'Failed to fetch categories' }\n }\n}\n\nexport async function getProductList(\n params: Record<string, any> = {},\n): Promise<APIResponse<Product[]>> {\n const defaultParams = {\n pageNum: 1,\n pageSize: 20,\n }\n const query = { ...defaultParams, ...params }\n\n try {\n const accessToken = await getCurrentAccessToken();\n const response = await cjApiClient.get<ProductListResponse>(\n 'https://developers.cjdropshipping.com/api2.0/v1/product/list',\n {\n headers: {\n 'CJ-Access-Token': accessToken,\n },\n params: query,\n },\n )\n\n const data = response.data\n\n if (!data.result) {\n return { error: data.message || 'Failed to fetch product list' }\n }\n\n if (!data.data?.list) {\n return { error: 'No products found' }\n }\n\n return { data: data.data.list }\n } catch (error: any) {\n console.error(`Error fetching product list [${error.code}]: ${error.message}`)\n return { error: error.message || 'Failed to fetch product list' }\n }\n}\n\nexport async function getProductDetails(queryParams: {\n pid?: string\n productSku?: string\n variantSku?: string\n}): Promise<APIResponse<ProductDetails>> {\n const { pid, productSku, variantSku } = queryParams\n if (!pid && !productSku && !variantSku) {\n return {\n error: 'One of pid, productSku, or variantSku must be provided.',\n }\n }\n\n try {\n const accessToken = await getCurrentAccessToken()\n const response = await cjApiClient.get<{\n code: number\n data: ProductDetails\n message: string\n result: boolean\n }>('https://developers.cjdropshipping.com/api2.0/v1/product/query', {\n headers: {\n 'CJ-Access-Token': accessToken,\n },\n params: queryParams,\n })\n\n if (!response.data.result) {\n return {\n error: response.data.message || 'Failed to fetch product details',\n }\n }\n\n return { data: response.data.data }\n } catch (error: any) {\n console.error(`Error fetching product details [${error.code}]: ${error.message}`)\n return { error: error.message || 'Failed to fetch product details' }\n }\n}\n"],"names":["cjApiClient","getCurrentAccessToken","getProductCategory","accessToken","params","response","get","headers","data","error","console","code","message","getProductList","defaultParams","pageNum","pageSize","query","result","list","getProductDetails","queryParams","pid","productSku","variantSku"],"mappings":"AASA,SAASA,WAAW,QAAQ,mBAAkB;AAC9C,SAASC,qBAAqB,QAAQ,kBAAiB;AAEvD,OAAO,eAAeC,mBACpBC,WAAmB,EACnBC,MAAW;IAEX,IAAI;QACF,MAAMC,WAAW,MAAML,YAAYM,GAAG,CAAuB,wBAAwB;YACnFC,SAAS;gBAAE,mBAAmBJ;YAAY;YAC1CC;QACF;QAEA,MAAMI,OAAOH,SAASG,IAAI,CAACA,IAAI;QAC/B,IAAI,CAACA,MAAM;YACT,OAAO;gBAAEC,OAAO;YAAsB;QACxC;QAEA,OAAO;YAAED;QAAK;IAChB,EAAE,OAAOC,OAAY;QACnBC,QAAQD,KAAK,CAAC,CAAC,2BAA2B,EAAEA,MAAME,IAAI,CAAC,GAAG,EAAEF,MAAMG,OAAO,EAAE;QAC3E,OAAO;YAAEH,OAAOA,MAAMG,OAAO,IAAI;QAA6B;IAChE;AACF;AAEA,OAAO,eAAeC,eACpBT,SAA8B,CAAC,CAAC;IAEhC,MAAMU,gBAAgB;QACpBC,SAAS;QACTC,UAAU;IACZ;IACA,MAAMC,QAAQ;QAAE,GAAGH,aAAa;QAAE,GAAGV,MAAM;IAAC;IAE5C,IAAI;QACF,MAAMD,cAAc,MAAMF;QAC1B,MAAMI,WAAW,MAAML,YAAYM,GAAG,CACpC,gEACA;YACEC,SAAS;gBACP,mBAAmBJ;YACrB;YACAC,QAAQa;QACV;QAGF,MAAMT,OAAOH,SAASG,IAAI;QAE1B,IAAI,CAACA,KAAKU,MAAM,EAAE;YAChB,OAAO;gBAAET,OAAOD,KAAKI,OAAO,IAAI;YAA+B;QACjE;QAEA,IAAI,CAACJ,KAAKA,IAAI,EAAEW,MAAM;YACpB,OAAO;gBAAEV,OAAO;YAAoB;QACtC;QAEA,OAAO;YAAED,MAAMA,KAAKA,IAAI,CAACW,IAAI;QAAC;IAChC,EAAE,OAAOV,OAAY;QACnBC,QAAQD,KAAK,CAAC,CAAC,6BAA6B,EAAEA,MAAME,IAAI,CAAC,GAAG,EAAEF,MAAMG,OAAO,EAAE;QAC7E,OAAO;YAAEH,OAAOA,MAAMG,OAAO,IAAI;QAA+B;IAClE;AACF;AAEA,OAAO,eAAeQ,kBAAkBC,WAIvC;IACC,MAAM,EAAEC,GAAG,EAAEC,UAAU,EAAEC,UAAU,EAAE,GAAGH;IACxC,IAAI,CAACC,OAAO,CAACC,cAAc,CAACC,YAAY;QACtC,OAAO;YACLf,OAAO;QACT;IACF;IAEA,IAAI;QACF,MAAMN,cAAc,MAAMF;QAC1B,MAAMI,WAAW,MAAML,YAAYM,GAAG,CAKnC,iEAAiE;YAClEC,SAAS;gBACP,mBAAmBJ;YACrB;YACAC,QAAQiB;QACV;QAEA,IAAI,CAAChB,SAASG,IAAI,CAACU,MAAM,EAAE;YACzB,OAAO;gBACLT,OAAOJ,SAASG,IAAI,CAACI,OAAO,IAAI;YAClC;QACF;QAEA,OAAO;YAAEJ,MAAMH,SAASG,IAAI,CAACA,IAAI;QAAC;IACpC,EAAE,OAAOC,OAAY;QACnBC,QAAQD,KAAK,CAAC,CAAC,gCAAgC,EAAEA,MAAME,IAAI,CAAC,GAAG,EAAEF,MAAMG,OAAO,EAAE;QAChF,OAAO;YAAEH,OAAOA,MAAMG,OAAO,IAAI;QAAkC;IACrE;AACF"}
@@ -0,0 +1,2 @@
1
+ import type { AccountSettings } from './settings-types';
2
+ export declare function getSettings(accessToken: string): Promise<AccountSettings>;
@@ -0,0 +1,20 @@
1
+ import { cjApiClient } from '../../api-client';
2
+ export async function getSettings(accessToken) {
3
+ try {
4
+ const response = await cjApiClient.get('setting/get', {
5
+ headers: {
6
+ 'CJ-Access-Token': accessToken
7
+ }
8
+ });
9
+ const result = response.data.data;
10
+ if (!result) {
11
+ throw new Error('No settings found');
12
+ }
13
+ return result;
14
+ } catch (error) {
15
+ console.error(`Error fetching settings [${error.code}]: ${error.message}`);
16
+ throw error;
17
+ }
18
+ }
19
+
20
+ //# sourceMappingURL=settings-api.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"sources":["../../../src/sdk/settings/settings-api.ts"],"sourcesContent":["import type { CJApiResponse } from '../../types'\nimport type { AccountSettings } from './settings-types'\n\nimport { cjApiClient } from '../../api-client'\n\nexport async function getSettings(accessToken: string): Promise<AccountSettings> {\n try {\n const response = await cjApiClient.get<CJApiResponse<AccountSettings>>('setting/get', {\n headers: { 'CJ-Access-Token': accessToken },\n })\n\n const result = response.data.data\n if (!result) {\n throw new Error('No settings found')\n }\n\n return result\n } catch (error: any) {\n console.error(`Error fetching settings [${error.code}]: ${error.message}`)\n throw error\n }\n}\n"],"names":["cjApiClient","getSettings","accessToken","response","get","headers","result","data","Error","error","console","code","message"],"mappings":"AAGA,SAASA,WAAW,QAAQ,mBAAkB;AAE9C,OAAO,eAAeC,YAAYC,WAAmB;IACnD,IAAI;QACF,MAAMC,WAAW,MAAMH,YAAYI,GAAG,CAAiC,eAAe;YACpFC,SAAS;gBAAE,mBAAmBH;YAAY;QAC5C;QAEA,MAAMI,SAASH,SAASI,IAAI,CAACA,IAAI;QACjC,IAAI,CAACD,QAAQ;YACX,MAAM,IAAIE,MAAM;QAClB;QAEA,OAAOF;IACT,EAAE,OAAOG,OAAY;QACnBC,QAAQD,KAAK,CAAC,CAAC,yBAAyB,EAAEA,MAAME,IAAI,CAAC,GAAG,EAAEF,MAAMG,OAAO,EAAE;QACzE,MAAMH;IACR;AACF"}
@@ -0,0 +1,22 @@
1
+ export interface QuotaLimit {
2
+ quotaLimit: number;
3
+ quotaType: number;
4
+ quotaUrl: string;
5
+ }
6
+ export interface Setting {
7
+ qpsLimit: number;
8
+ quotaLimits: QuotaLimit[];
9
+ }
10
+ export interface Callback {
11
+ productCallbackUrls: string[];
12
+ productType: string;
13
+ }
14
+ export interface AccountSettings {
15
+ callback: Callback;
16
+ isSandbox: boolean;
17
+ openEmail: string;
18
+ openId: string;
19
+ openName: string;
20
+ root: string;
21
+ setting: Setting;
22
+ }
@@ -0,0 +1,3 @@
1
+ export { };
2
+
3
+ //# sourceMappingURL=settings-types.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"sources":["../../../src/sdk/settings/settings-types.ts"],"sourcesContent":["export interface QuotaLimit {\n quotaLimit: number\n quotaType: number\n quotaUrl: string\n}\n\nexport interface Setting {\n qpsLimit: number\n quotaLimits: QuotaLimit[]\n}\n\nexport interface Callback {\n productCallbackUrls: string[]\n productType: string\n}\n\nexport interface AccountSettings {\n callback: Callback\n isSandbox: boolean\n openEmail: string\n openId: string\n openName: string\n root: string\n setting: Setting\n}\n"],"names":[],"mappings":"AAgBA,WAQC"}
@@ -0,0 +1,18 @@
1
+ export interface Variant {
2
+ createTime: null | string;
3
+ pid: string;
4
+ variantHeight: number;
5
+ variantKey: string;
6
+ variantLength: number;
7
+ variantName: null | string;
8
+ variantNameEn: null | string;
9
+ variantProperty: null | string;
10
+ variantSellPrice: number;
11
+ variantSku: string;
12
+ variantStandard: null | string;
13
+ variantUnit: null | string;
14
+ variantVolume: number;
15
+ variantWeight: number;
16
+ variantWidth: number;
17
+ vid: string;
18
+ }
@@ -0,0 +1,3 @@
1
+ export { };
2
+
3
+ //# sourceMappingURL=variant-types.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"sources":["../../../src/sdk/variants/variant-types.ts"],"sourcesContent":["export interface Variant {\n createTime: null | string\n pid: string\n variantHeight: number\n variantKey: string\n variantLength: number\n variantName: null | string\n variantNameEn: null | string\n variantProperty: null | string\n variantSellPrice: number\n variantSku: string\n variantStandard: null | string\n variantUnit: null | string\n variantVolume: number\n variantWeight: number\n variantWidth: number\n vid: string\n}\n"],"names":[],"mappings":"AAAA,WAiBC"}
@@ -0,0 +1,8 @@
1
+ import type { APIResponse } from '../../error-types';
2
+ import type { Variant } from './variant-types.js';
3
+ export declare function getAllVariants(queryParams: {
4
+ pid?: string;
5
+ productSku?: string;
6
+ variantSku?: string;
7
+ }): Promise<APIResponse<Variant[]>>;
8
+ export declare function getVariantById(vid: string): Promise<APIResponse<Variant>>;
@@ -0,0 +1,76 @@
1
+ import { cjApiClient } from '../../api-client';
2
+ import { getCurrentAccessToken } from '../access-token';
3
+ export async function getAllVariants(queryParams) {
4
+ if (!queryParams.pid && !queryParams.productSku && !queryParams.variantSku) {
5
+ return {
6
+ error: 'One of pid, productSku, or variantSku must be provided.'
7
+ };
8
+ }
9
+ try {
10
+ const accessToken = await getCurrentAccessToken() // Ensure you populate this with a valid token
11
+ ;
12
+ const response = await cjApiClient.get('product/variant/query', {
13
+ headers: {
14
+ 'CJ-Access-Token': accessToken
15
+ },
16
+ params: queryParams
17
+ });
18
+ if (!response.data.result) {
19
+ return {
20
+ error: response.data.message || 'Failed to fetch variants'
21
+ };
22
+ }
23
+ if (!response.data.data) {
24
+ return {
25
+ error: 'No variants found'
26
+ };
27
+ }
28
+ return {
29
+ data: response.data.data
30
+ };
31
+ } catch (error) {
32
+ console.error(`Error fetching all variants [${error.code}]: ${error.message}`);
33
+ return {
34
+ error: error.message || 'An unknown error occurred'
35
+ };
36
+ }
37
+ }
38
+ export async function getVariantById(vid) {
39
+ if (!vid) {
40
+ return {
41
+ error: 'vid must be provided.'
42
+ };
43
+ }
44
+ try {
45
+ const accessToken = await getCurrentAccessToken() // Ensure you populate this with a valid token
46
+ ;
47
+ const response = await cjApiClient.get('product/variant/queryByVid', {
48
+ headers: {
49
+ 'CJ-Access-Token': accessToken
50
+ },
51
+ params: {
52
+ vid
53
+ }
54
+ });
55
+ if (!response.data.result) {
56
+ return {
57
+ error: response.data.message || 'Failed to fetch variant by ID'
58
+ };
59
+ }
60
+ if (!response.data.data) {
61
+ return {
62
+ error: 'No variant found'
63
+ };
64
+ }
65
+ return {
66
+ data: response.data.data
67
+ };
68
+ } catch (error) {
69
+ console.error(`Error fetching variant by ID [${error.code}]: ${error.message}`);
70
+ return {
71
+ error: error.message || 'An unknown error occurred'
72
+ };
73
+ }
74
+ }
75
+
76
+ //# sourceMappingURL=variants.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"sources":["../../../src/sdk/variants/variants.ts"],"sourcesContent":["import type { APIResponse } from '../../error-types'\nimport type { CJApiResponse } from '../../types'\nimport type { Variant } from './variant-types.js'\n\nimport { cjApiClient } from '../../api-client'\nimport { getCurrentAccessToken } from '../access-token'\n\nexport async function getAllVariants(queryParams: {\n pid?: string\n productSku?: string\n variantSku?: string\n}): Promise<APIResponse<Variant[]>> {\n if (!queryParams.pid && !queryParams.productSku && !queryParams.variantSku) {\n return {\n error: 'One of pid, productSku, or variantSku must be provided.',\n }\n }\n\n try {\n const accessToken = await getCurrentAccessToken() // Ensure you populate this with a valid token\n const response = await cjApiClient.get<CJApiResponse<Variant[]>>('product/variant/query', {\n headers: {\n 'CJ-Access-Token': accessToken,\n },\n params: queryParams,\n })\n\n if (!response.data.result) {\n return {\n error: response.data.message || 'Failed to fetch variants',\n }\n }\n\n if (!response.data.data) {\n return { error: 'No variants found' }\n }\n\n return { data: response.data.data }\n } catch (error: any) {\n console.error(`Error fetching all variants [${error.code}]: ${error.message}`)\n return { error: error.message || 'An unknown error occurred' }\n }\n}\n\nexport async function getVariantById(vid: string): Promise<APIResponse<Variant>> {\n if (!vid) {\n return { error: 'vid must be provided.' }\n }\n\n try {\n const accessToken = await getCurrentAccessToken() // Ensure you populate this with a valid token\n const response = await cjApiClient.get<CJApiResponse<Variant>>('product/variant/queryByVid', {\n headers: {\n 'CJ-Access-Token': accessToken,\n },\n params: { vid },\n })\n\n if (!response.data.result) {\n return {\n error: response.data.message || 'Failed to fetch variant by ID',\n }\n }\n\n if (!response.data.data) {\n return { error: 'No variant found' }\n }\n\n return { data: response.data.data }\n } catch (error: any) {\n console.error(`Error fetching variant by ID [${error.code}]: ${error.message}`)\n return { error: error.message || 'An unknown error occurred' }\n }\n}\n"],"names":["cjApiClient","getCurrentAccessToken","getAllVariants","queryParams","pid","productSku","variantSku","error","accessToken","response","get","headers","params","data","result","message","console","code","getVariantById","vid"],"mappings":"AAIA,SAASA,WAAW,QAAQ,mBAAkB;AAC9C,SAASC,qBAAqB,QAAQ,kBAAiB;AAEvD,OAAO,eAAeC,eAAeC,WAIpC;IACC,IAAI,CAACA,YAAYC,GAAG,IAAI,CAACD,YAAYE,UAAU,IAAI,CAACF,YAAYG,UAAU,EAAE;QAC1E,OAAO;YACLC,OAAO;QACT;IACF;IAEA,IAAI;QACF,MAAMC,cAAc,MAAMP,wBAAwB,8CAA8C;;QAChG,MAAMQ,WAAW,MAAMT,YAAYU,GAAG,CAA2B,yBAAyB;YACxFC,SAAS;gBACP,mBAAmBH;YACrB;YACAI,QAAQT;QACV;QAEA,IAAI,CAACM,SAASI,IAAI,CAACC,MAAM,EAAE;YACzB,OAAO;gBACLP,OAAOE,SAASI,IAAI,CAACE,OAAO,IAAI;YAClC;QACF;QAEA,IAAI,CAACN,SAASI,IAAI,CAACA,IAAI,EAAE;YACvB,OAAO;gBAAEN,OAAO;YAAoB;QACtC;QAEA,OAAO;YAAEM,MAAMJ,SAASI,IAAI,CAACA,IAAI;QAAC;IACpC,EAAE,OAAON,OAAY;QACnBS,QAAQT,KAAK,CAAC,CAAC,6BAA6B,EAAEA,MAAMU,IAAI,CAAC,GAAG,EAAEV,MAAMQ,OAAO,EAAE;QAC7E,OAAO;YAAER,OAAOA,MAAMQ,OAAO,IAAI;QAA4B;IAC/D;AACF;AAEA,OAAO,eAAeG,eAAeC,GAAW;IAC9C,IAAI,CAACA,KAAK;QACR,OAAO;YAAEZ,OAAO;QAAwB;IAC1C;IAEA,IAAI;QACF,MAAMC,cAAc,MAAMP,wBAAwB,8CAA8C;;QAChG,MAAMQ,WAAW,MAAMT,YAAYU,GAAG,CAAyB,8BAA8B;YAC3FC,SAAS;gBACP,mBAAmBH;YACrB;YACAI,QAAQ;gBAAEO;YAAI;QAChB;QAEA,IAAI,CAACV,SAASI,IAAI,CAACC,MAAM,EAAE;YACzB,OAAO;gBACLP,OAAOE,SAASI,IAAI,CAACE,OAAO,IAAI;YAClC;QACF;QAEA,IAAI,CAACN,SAASI,IAAI,CAACA,IAAI,EAAE;YACvB,OAAO;gBAAEN,OAAO;YAAmB;QACrC;QAEA,OAAO;YAAEM,MAAMJ,SAASI,IAAI,CAACA,IAAI;QAAC;IACpC,EAAE,OAAON,OAAY;QACnBS,QAAQT,KAAK,CAAC,CAAC,8BAA8B,EAAEA,MAAMU,IAAI,CAAC,GAAG,EAAEV,MAAMQ,OAAO,EAAE;QAC9E,OAAO;YAAER,OAAOA,MAAMQ,OAAO,IAAI;QAA4B;IAC/D;AACF"}
File without changes
@@ -0,0 +1,75 @@
1
+ // import {
2
+ // DefaultNodeTypes,
3
+ // SanitizedServerEditorConfig,
4
+ // TypedEditorState,
5
+ // getEnabledNodes,
6
+ // } from "@payloadcms/richtext-lexical";
7
+ // import { UploadNode } from "@payloadcms/richtext-lexical/client";
8
+ // import { createHeadlessEditor } from "@lexical/headless";
9
+ // import { $generateNodesFromDOM } from "@lexical/html";
10
+ // import { $getRoot, $getSelection, type SerializedLexicalNode } from "lexical";
11
+ // export const customConvertHTMLToLexical = async <
12
+ // TNodeTypes extends SerializedLexicalNode = DefaultNodeTypes,
13
+ // >({
14
+ // editorConfig,
15
+ // html,
16
+ // JSDOM,
17
+ // uploadImage, // Function to upload image
18
+ // }: {
19
+ // editorConfig: SanitizedServerEditorConfig;
20
+ // html: string;
21
+ // JSDOM: new (html: string) => {
22
+ // window: {
23
+ // document: Document;
24
+ // };
25
+ // };
26
+ // uploadImage: (src: string) => Promise<any>; // Upload function returns the uploaded image object
27
+ // }): Promise<TypedEditorState<TNodeTypes>> => {
28
+ // const dom = new JSDOM(html);
29
+ // const document = dom.window.document;
30
+ // const images = Array.from(document.querySelectorAll("img"));
31
+ // // Store image replacement data
32
+ // const imageReplacements = new Map<string, any>();
33
+ // // Upload images and store their Payload data
34
+ // await Promise.all(
35
+ // images.map(async (img) => {
36
+ // if (img.src) {
37
+ // const uploadedImage = await uploadImage(img.src);
38
+ // imageReplacements.set(img.src, uploadedImage);
39
+ // }
40
+ // }),
41
+ // );
42
+ // // Create a headless editor
43
+ // const headlessEditor = createHeadlessEditor({
44
+ // nodes: getEnabledNodes({ editorConfig }),
45
+ // });
46
+ // // Convert updated HTML into Lexical nodes
47
+ // headlessEditor.update(
48
+ // () => {
49
+ // const nodes = $generateNodesFromDOM(headlessEditor, document);
50
+ // // Replace <img> nodes with custom upload nodes
51
+ // nodes.forEach((node, index) => {
52
+ // if (node.getType() === "image") {
53
+ // const src = (node as any).__src; // Get original image src
54
+ // const uploadedImage = imageReplacements.get(src);
55
+ // if (uploadedImage) {
56
+ // // Replace image node with upload node
57
+ // // const uploadNode = new UploadNode(uploadedImage);
58
+ // // nodes[index] = uploadNode;
59
+ // }
60
+ // }
61
+ // });
62
+ // $getRoot().select();
63
+ // const selection = $getSelection();
64
+ // if (selection === null) {
65
+ // throw new Error("Selection is null");
66
+ // }
67
+ // selection.insertNodes(nodes);
68
+ // },
69
+ // { discrete: true },
70
+ // );
71
+ // // Return the Lexical JSON state
72
+ // return headlessEditor.getEditorState().toJSON() as TypedEditorState<TNodeTypes>;
73
+ // };
74
+
75
+ //# sourceMappingURL=convert-html-to-lexical.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"sources":["../../src/service/convert-html-to-lexical.ts"],"sourcesContent":["// import {\n// DefaultNodeTypes,\n// SanitizedServerEditorConfig,\n// TypedEditorState,\n// getEnabledNodes,\n// } from \"@payloadcms/richtext-lexical\";\n// import { UploadNode } from \"@payloadcms/richtext-lexical/client\";\n// import { createHeadlessEditor } from \"@lexical/headless\";\n// import { $generateNodesFromDOM } from \"@lexical/html\";\n// import { $getRoot, $getSelection, type SerializedLexicalNode } from \"lexical\";\n\n// export const customConvertHTMLToLexical = async <\n// TNodeTypes extends SerializedLexicalNode = DefaultNodeTypes,\n// >({\n// editorConfig,\n// html,\n// JSDOM,\n// uploadImage, // Function to upload image\n// }: {\n// editorConfig: SanitizedServerEditorConfig;\n// html: string;\n// JSDOM: new (html: string) => {\n// window: {\n// document: Document;\n// };\n// };\n// uploadImage: (src: string) => Promise<any>; // Upload function returns the uploaded image object\n// }): Promise<TypedEditorState<TNodeTypes>> => {\n// const dom = new JSDOM(html);\n// const document = dom.window.document;\n// const images = Array.from(document.querySelectorAll(\"img\"));\n\n// // Store image replacement data\n// const imageReplacements = new Map<string, any>();\n\n// // Upload images and store their Payload data\n// await Promise.all(\n// images.map(async (img) => {\n// if (img.src) {\n// const uploadedImage = await uploadImage(img.src);\n// imageReplacements.set(img.src, uploadedImage);\n// }\n// }),\n// );\n\n// // Create a headless editor\n// const headlessEditor = createHeadlessEditor({\n// nodes: getEnabledNodes({ editorConfig }),\n// });\n\n// // Convert updated HTML into Lexical nodes\n// headlessEditor.update(\n// () => {\n// const nodes = $generateNodesFromDOM(headlessEditor, document);\n\n// // Replace <img> nodes with custom upload nodes\n// nodes.forEach((node, index) => {\n// if (node.getType() === \"image\") {\n// const src = (node as any).__src; // Get original image src\n// const uploadedImage = imageReplacements.get(src);\n\n// if (uploadedImage) {\n// // Replace image node with upload node\n// // const uploadNode = new UploadNode(uploadedImage);\n// // nodes[index] = uploadNode;\n// }\n// }\n// });\n\n// $getRoot().select();\n// const selection = $getSelection();\n// if (selection === null) {\n// throw new Error(\"Selection is null\");\n// }\n// selection.insertNodes(nodes);\n// },\n// { discrete: true },\n// );\n\n// // Return the Lexical JSON state\n// return headlessEditor.getEditorState().toJSON() as TypedEditorState<TNodeTypes>;\n// };\n"],"names":[],"mappings":"AAAA,WAAW;AACX,wBAAwB;AACxB,mCAAmC;AACnC,wBAAwB;AACxB,uBAAuB;AACvB,yCAAyC;AACzC,oEAAoE;AACpE,4DAA4D;AAC5D,yDAAyD;AACzD,iFAAiF;AAEjF,oDAAoD;AACpD,mEAAmE;AACnE,MAAM;AACN,oBAAoB;AACpB,YAAY;AACZ,aAAa;AACb,+CAA+C;AAC/C,OAAO;AACP,iDAAiD;AACjD,oBAAoB;AACpB,qCAAqC;AACrC,oBAAoB;AACpB,kCAAkC;AAClC,aAAa;AACb,SAAS;AACT,uGAAuG;AACvG,iDAAiD;AACjD,mCAAmC;AACnC,4CAA4C;AAC5C,mEAAmE;AAEnE,sCAAsC;AACtC,wDAAwD;AAExD,oDAAoD;AACpD,yBAAyB;AACzB,sCAAsC;AACtC,6BAA6B;AAC7B,oEAAoE;AACpE,iEAAiE;AACjE,gBAAgB;AAChB,cAAc;AACd,SAAS;AAET,kCAAkC;AAClC,oDAAoD;AACpD,oDAAoD;AACpD,UAAU;AAEV,iDAAiD;AACjD,6BAA6B;AAC7B,kBAAkB;AAClB,6EAA6E;AAE7E,8DAA8D;AAC9D,+CAA+C;AAC/C,oDAAoD;AACpD,iFAAiF;AACjF,wEAAwE;AAExE,2CAA2C;AAC3C,iEAAiE;AACjE,+EAA+E;AAC/E,wDAAwD;AACxD,wBAAwB;AACxB,oBAAoB;AACpB,kBAAkB;AAElB,mCAAmC;AACnC,iDAAiD;AACjD,wCAAwC;AACxC,wDAAwD;AACxD,gBAAgB;AAChB,4CAA4C;AAC5C,aAAa;AACb,8BAA8B;AAC9B,SAAS;AAET,uCAAuC;AACvC,uFAAuF;AACvF,KAAK"}
@@ -0,0 +1,12 @@
1
+ import type { CollectionAfterChangeHook, Document } from "payload";
2
+ export interface Orders extends Document {
3
+ id: string;
4
+ items: Array<{
5
+ productUrl: string;
6
+ quantity: number;
7
+ variant: {
8
+ variantId: string;
9
+ };
10
+ }>;
11
+ }
12
+ export declare const createOrderHook: CollectionAfterChangeHook<Orders>;