@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,70 @@
1
+ import * as cjSdk from "../sdk/cj-sdk";
2
+ export const createOrderHook = async ({ doc, req })=>{
3
+ if (doc.orderStatus !== "processing") {
4
+ return;
5
+ }
6
+ const payload = req.payload;
7
+ const cjSettings = await payload.find({
8
+ collection: "cj-settings",
9
+ where: {
10
+ shop: {
11
+ equals: doc.shopId
12
+ }
13
+ }
14
+ });
15
+ const cjConfig = cjSettings?.docs[0];
16
+ const podProperties = cjConfig?.pod?.url ? [
17
+ {
18
+ areaName: "LogoArea",
19
+ links: [
20
+ cjConfig?.pod?.url
21
+ ],
22
+ type: "1",
23
+ layer: []
24
+ }
25
+ ] : [];
26
+ const result = await cjSdk.createOrder({
27
+ consigneeID: doc.billingAddress?.name || "",
28
+ email: doc.billingAddress?.email || "",
29
+ fromCountryCode: "CN",
30
+ houseNumber: doc.shippingAddress?.address?.line2 || "",
31
+ iossType: 1,
32
+ logisticName: "CJPacket Liquid US",
33
+ orderNumber: doc.orderId,
34
+ payType: 2,
35
+ products: doc.items.map((item)=>({
36
+ quantity: item.quantity,
37
+ vid: item.variant.variantId
38
+ })),
39
+ podProperties,
40
+ remark: "",
41
+ shippingAddress: doc.shippingAddress?.address?.line1 || "",
42
+ shippingAddress2: doc.shippingAddress?.address?.line2 || "",
43
+ shippingCity: doc.shippingAddress?.address?.city || "",
44
+ shippingCountry: doc.shippingAddress?.address?.country || "",
45
+ shippingCountryCode: doc.shippingAddress?.address?.country || "",
46
+ shippingCounty: doc.shippingAddress?.address?.city || "",
47
+ shippingCustomerName: doc.shippingAddress?.name || "",
48
+ shippingPhone: doc.shippingAddress?.phone || "+9999999999",
49
+ shippingProvince: doc.shippingAddress?.address?.state || "",
50
+ shippingZip: doc.shippingAddress?.address?.postal_code || "",
51
+ taxId: ""
52
+ });
53
+ const orderResult = await payload.update({
54
+ collection: "orders",
55
+ data: {
56
+ orderStatus: "shipped"
57
+ },
58
+ where: {
59
+ id: {
60
+ equals: doc.orderId
61
+ }
62
+ }
63
+ });
64
+ return {
65
+ cjResult: result,
66
+ orderResult
67
+ };
68
+ };
69
+
70
+ //# sourceMappingURL=create-order.hook.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"sources":["../../src/service/create-order.hook.ts"],"sourcesContent":["import type { BasePayload, CollectionAfterChangeHook, Document } from \"payload\";\n\nimport * as cjSdk from \"../sdk/cj-sdk\";\n\nexport interface Orders extends Document {\n id: string;\n items: Array<{\n productUrl: string;\n quantity: number;\n variant: {\n variantId: string;\n };\n }>;\n}\n\nexport const createOrderHook: CollectionAfterChangeHook<Orders> = async ({ doc, req }) => {\n if (doc.orderStatus !== \"processing\") {\n return;\n }\n const payload: BasePayload = req.payload;\n const cjSettings = await payload.find({\n collection: \"cj-settings\",\n where: {\n shop: {\n equals: doc.shopId,\n },\n },\n });\n const cjConfig: any = cjSettings?.docs[0];\n const podProperties = cjConfig?.pod?.url\n ? [\n {\n areaName: \"LogoArea\",\n links: [cjConfig?.pod?.url],\n type: \"1\",\n layer: [],\n },\n ]\n : [];\n const result = await cjSdk.createOrder({\n consigneeID: doc.billingAddress?.name || \"\",\n email: doc.billingAddress?.email || \"\",\n fromCountryCode: \"CN\",\n houseNumber: doc.shippingAddress?.address?.line2 || \"\",\n iossType: 1,\n logisticName: \"CJPacket Liquid US\",\n orderNumber: doc.orderId,\n payType: 2,\n products: doc.items.map((item) => ({\n quantity: item.quantity,\n vid: item.variant.variantId,\n })),\n podProperties,\n remark: \"\",\n shippingAddress: doc.shippingAddress?.address?.line1 || \"\",\n shippingAddress2: doc.shippingAddress?.address?.line2 || \"\",\n shippingCity: doc.shippingAddress?.address?.city || \"\",\n shippingCountry: doc.shippingAddress?.address?.country || \"\",\n shippingCountryCode: doc.shippingAddress?.address?.country || \"\",\n shippingCounty: doc.shippingAddress?.address?.city || \"\",\n shippingCustomerName: doc.shippingAddress?.name || \"\",\n shippingPhone: doc.shippingAddress?.phone || \"+9999999999\",\n shippingProvince: doc.shippingAddress?.address?.state || \"\",\n shippingZip: doc.shippingAddress?.address?.postal_code || \"\",\n taxId: \"\",\n });\n\n const orderResult = await payload.update({\n collection: \"orders\",\n data: {\n orderStatus: \"shipped\",\n },\n where: {\n id: {\n equals: doc.orderId,\n },\n },\n });\n\n return {\n cjResult: result,\n orderResult,\n };\n};\n"],"names":["cjSdk","createOrderHook","doc","req","orderStatus","payload","cjSettings","find","collection","where","shop","equals","shopId","cjConfig","docs","podProperties","pod","url","areaName","links","type","layer","result","createOrder","consigneeID","billingAddress","name","email","fromCountryCode","houseNumber","shippingAddress","address","line2","iossType","logisticName","orderNumber","orderId","payType","products","items","map","item","quantity","vid","variant","variantId","remark","line1","shippingAddress2","shippingCity","city","shippingCountry","country","shippingCountryCode","shippingCounty","shippingCustomerName","shippingPhone","phone","shippingProvince","state","shippingZip","postal_code","taxId","orderResult","update","data","id","cjResult"],"mappings":"AAEA,YAAYA,WAAW,gBAAgB;AAavC,OAAO,MAAMC,kBAAqD,OAAO,EAAEC,GAAG,EAAEC,GAAG,EAAE;IACjF,IAAID,IAAIE,WAAW,KAAK,cAAc;QAClC;IACJ;IACA,MAAMC,UAAuBF,IAAIE,OAAO;IACxC,MAAMC,aAAa,MAAMD,QAAQE,IAAI,CAAC;QAClCC,YAAY;QACZC,OAAO;YACHC,MAAM;gBACFC,QAAQT,IAAIU,MAAM;YACtB;QACJ;IACJ;IACA,MAAMC,WAAgBP,YAAYQ,IAAI,CAAC,EAAE;IACzC,MAAMC,gBAAgBF,UAAUG,KAAKC,MAC/B;QACI;YACIC,UAAU;YACVC,OAAO;gBAACN,UAAUG,KAAKC;aAAI;YAC3BG,MAAM;YACNC,OAAO,EAAE;QACb;KACH,GACD,EAAE;IACR,MAAMC,SAAS,MAAMtB,MAAMuB,WAAW,CAAC;QACnCC,aAAatB,IAAIuB,cAAc,EAAEC,QAAQ;QACzCC,OAAOzB,IAAIuB,cAAc,EAAEE,SAAS;QACpCC,iBAAiB;QACjBC,aAAa3B,IAAI4B,eAAe,EAAEC,SAASC,SAAS;QACpDC,UAAU;QACVC,cAAc;QACdC,aAAajC,IAAIkC,OAAO;QACxBC,SAAS;QACTC,UAAUpC,IAAIqC,KAAK,CAACC,GAAG,CAAC,CAACC,OAAU,CAAA;gBAC/BC,UAAUD,KAAKC,QAAQ;gBACvBC,KAAKF,KAAKG,OAAO,CAACC,SAAS;YAC/B,CAAA;QACA9B;QACA+B,QAAQ;QACRhB,iBAAiB5B,IAAI4B,eAAe,EAAEC,SAASgB,SAAS;QACxDC,kBAAkB9C,IAAI4B,eAAe,EAAEC,SAASC,SAAS;QACzDiB,cAAc/C,IAAI4B,eAAe,EAAEC,SAASmB,QAAQ;QACpDC,iBAAiBjD,IAAI4B,eAAe,EAAEC,SAASqB,WAAW;QAC1DC,qBAAqBnD,IAAI4B,eAAe,EAAEC,SAASqB,WAAW;QAC9DE,gBAAgBpD,IAAI4B,eAAe,EAAEC,SAASmB,QAAQ;QACtDK,sBAAsBrD,IAAI4B,eAAe,EAAEJ,QAAQ;QACnD8B,eAAetD,IAAI4B,eAAe,EAAE2B,SAAS;QAC7CC,kBAAkBxD,IAAI4B,eAAe,EAAEC,SAAS4B,SAAS;QACzDC,aAAa1D,IAAI4B,eAAe,EAAEC,SAAS8B,eAAe;QAC1DC,OAAO;IACX;IAEA,MAAMC,cAAc,MAAM1D,QAAQ2D,MAAM,CAAC;QACrCxD,YAAY;QACZyD,MAAM;YACF7D,aAAa;QACjB;QACAK,OAAO;YACHyD,IAAI;gBACAvD,QAAQT,IAAIkC,OAAO;YACvB;QACJ;IACJ;IAEA,OAAO;QACH+B,UAAU7C;QACVyC;IACJ;AACJ,EAAE"}
@@ -0,0 +1,4 @@
1
+ import type { BasePayload } from "payload";
2
+ import type { ProductDetails } from "../sdk/products/product-types";
3
+ export declare const fetchExchangeRates: () => Promise<any>;
4
+ export declare const syncProducts: (productIds: string[], payload: BasePayload) => Promise<ProductDetails[]>;
@@ -0,0 +1,148 @@
1
+ import { convertHTMLToLexical, editorConfigFactory } from "@payloadcms/richtext-lexical";
2
+ import decimal from "decimal.js";
3
+ import { JSDOM } from "jsdom";
4
+ import * as cjSdk from "../sdk/cj-sdk";
5
+ import path, { dirname } from "path";
6
+ import fs from "fs";
7
+ import { promisify } from "util";
8
+ import { pipeline } from "stream";
9
+ import { writeFile } from "fs/promises";
10
+ import { fileURLToPath } from "url";
11
+ const __filename = fileURLToPath(import.meta.url);
12
+ const __dirname = dirname(__filename);
13
+ const streamPipeline = promisify(pipeline);
14
+ const delay = (ms)=>new Promise((resolve)=>setTimeout(resolve, ms));
15
+ const download = async (uri, filename)=>{
16
+ try {
17
+ const response = await fetch(uri);
18
+ if (!response.ok) {
19
+ throw new Error(`Failed to fetch ${uri}: ${response.statusText}`);
20
+ }
21
+ const contentType = response.headers.get("content-type");
22
+ const contentLength = response.headers.get("content-length");
23
+ console.log("content-type:", contentType);
24
+ console.log("content-length:", contentLength);
25
+ const buffer = Buffer.from(await response.arrayBuffer());
26
+ await writeFile(filename, buffer);
27
+ console.log("Download complete:", filename);
28
+ } catch (error) {
29
+ console.error("Error downloading file:", error);
30
+ }
31
+ };
32
+ async function uploadImageToPayload(src, payload) {
33
+ const tempFilePath = path.join(__dirname, "temp-image.jpg");
34
+ try {
35
+ // Fetch the image
36
+ const response = await fetch(src);
37
+ if (!response.ok) throw new Error(`Failed to fetch image: ${response.statusText}`);
38
+ // Stream the response body to a temporary file
39
+ await download(src, tempFilePath);
40
+ // Upload the image using Payload's Local API
41
+ const uploadedImage = await payload.create({
42
+ collection: "media",
43
+ data: {
44
+ alt: "Some alt text"
45
+ },
46
+ filePath: tempFilePath
47
+ });
48
+ console.log("Uploaded media document:", uploadedImage);
49
+ // Clean up: delete the temporary file
50
+ fs.unlink(tempFilePath, (err)=>{
51
+ if (err) console.error("Error deleting temporary file:", err);
52
+ });
53
+ return {
54
+ id: uploadedImage.id,
55
+ alt: uploadedImage.alt || "",
56
+ prefix: "media",
57
+ updatedAt: uploadedImage.updatedAt,
58
+ createdAt: uploadedImage.createdAt,
59
+ url: uploadedImage.url,
60
+ thumbnailURL: uploadedImage.thumbnailURL || null,
61
+ filename: uploadedImage.filename,
62
+ mimeType: uploadedImage.mimeType,
63
+ filesize: uploadedImage.filesize,
64
+ width: uploadedImage.width,
65
+ height: uploadedImage.height,
66
+ focalX: 50,
67
+ focalY: 50
68
+ };
69
+ } catch (error) {
70
+ console.error("Error uploading image:", error);
71
+ }
72
+ }
73
+ function mapMockProductToSchema(product, editorConfig, rate, payload) {
74
+ return {
75
+ description: convertHTMLToLexical({
76
+ editorConfig,
77
+ html: product.description || "",
78
+ JSDOM
79
+ }),
80
+ source: "cj",
81
+ pid: product.pid,
82
+ title: product.productNameEn,
83
+ variants: product.variants?.map((variant)=>({
84
+ imageUrl: variant.variantImage,
85
+ options: variant.variantKey?.split("-").map((key, index)=>({
86
+ option: index === 0 ? "Color" : "Size",
87
+ value: key
88
+ })),
89
+ price: new decimal(variant.variantSellPrice || 0).mul(rate).toNumber().toFixed(2),
90
+ vid: variant.vid
91
+ }))
92
+ };
93
+ }
94
+ const findProductById = async (productId)=>{
95
+ const result = await cjSdk.getProductDetails({
96
+ pid: productId
97
+ });
98
+ return result.data;
99
+ };
100
+ const createOrUpdateProduct = async (product, payload)=>{
101
+ const { totalDocs } = await payload.count({
102
+ collection: "products",
103
+ where: {
104
+ pid: {
105
+ equals: product.pid
106
+ }
107
+ }
108
+ });
109
+ if (totalDocs === 0) {
110
+ return payload.create({
111
+ collection: "products",
112
+ data: {
113
+ ...product
114
+ }
115
+ });
116
+ }
117
+ };
118
+ export const fetchExchangeRates = async ()=>{
119
+ const response = await fetch("https://open.er-api.com/v6/latest/USD");
120
+ const data = await response.json();
121
+ return data;
122
+ };
123
+ export const syncProducts = async (productIds, payload)=>{
124
+ const exchangeRates = await fetchExchangeRates();
125
+ const storeSettings = await payload.findGlobal({
126
+ slug: "store-settings"
127
+ });
128
+ const rate = exchangeRates.rates[storeSettings.currency || "USD"];
129
+ const editorConfig = await editorConfigFactory.default({
130
+ config: payload.config
131
+ });
132
+ const products = [];
133
+ for (const productId of productIds){
134
+ const product = await findProductById(productId);
135
+ if (!product) {
136
+ continue;
137
+ }
138
+ products.push(product);
139
+ await delay(1010);
140
+ }
141
+ const mappedProducts = products.map((product)=>{
142
+ return mapMockProductToSchema(product, editorConfig, rate, payload);
143
+ });
144
+ await Promise.all(mappedProducts.map((product)=>createOrUpdateProduct(product, payload)));
145
+ return products;
146
+ };
147
+
148
+ //# sourceMappingURL=sync-products.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"sources":["../../src/service/sync-products.ts"],"sourcesContent":["import type { DefaultNodeTypes, TypedEditorState } from \"@payloadcms/richtext-lexical\";\nimport type { BasePayload } from \"payload\";\n\nimport { convertHTMLToLexical, editorConfigFactory } from \"@payloadcms/richtext-lexical\";\nimport decimal from \"decimal.js\";\nimport { JSDOM } from \"jsdom\";\n\nimport type { ProductDetails } from \"../sdk/products/product-types\";\n\nimport * as cjSdk from \"../sdk/cj-sdk\";\nimport path, { dirname, join } from \"path\";\nimport fs from \"fs\";\nimport { promisify } from \"util\";\nimport { pipeline } from \"stream\";\nimport { writeFile } from \"fs/promises\";\nimport { fileURLToPath } from \"url\";\n\nconst __filename = fileURLToPath(import.meta.url);\nconst __dirname = dirname(__filename);\n\nconst streamPipeline = promisify(pipeline);\n\ninterface Product {\n description: TypedEditorState<DefaultNodeTypes>;\n pid: string;\n title: string;\n source: \"manual\" | \"cj\";\n variants?: Array<{\n imageUrl?: string;\n options?: Array<{ option: string; value: string }>;\n price?: number;\n vid: string;\n }>;\n}\n\nconst delay = (ms: number) => new Promise((resolve) => setTimeout(resolve, ms));\n\nconst download = async (uri: string, filename: string): Promise<void> => {\n try {\n const response = await fetch(uri);\n\n if (!response.ok) {\n throw new Error(`Failed to fetch ${uri}: ${response.statusText}`);\n }\n\n const contentType = response.headers.get(\"content-type\");\n const contentLength = response.headers.get(\"content-length\");\n\n console.log(\"content-type:\", contentType);\n console.log(\"content-length:\", contentLength);\n\n const buffer = Buffer.from(await response.arrayBuffer());\n\n await writeFile(filename, buffer);\n\n console.log(\"Download complete:\", filename);\n } catch (error) {\n console.error(\"Error downloading file:\", error);\n }\n};\n\nasync function uploadImageToPayload(src: string, payload: BasePayload): Promise<any | null> {\n const tempFilePath = path.join(__dirname, \"temp-image.jpg\");\n\n try {\n // Fetch the image\n const response = await fetch(src);\n if (!response.ok) throw new Error(`Failed to fetch image: ${response.statusText}`);\n\n // Stream the response body to a temporary file\n await download(src, tempFilePath);\n\n // Upload the image using Payload's Local API\n const uploadedImage = await payload.create({\n collection: \"media\",\n data: {\n alt: \"Some alt text\",\n },\n\n filePath: tempFilePath,\n });\n\n console.log(\"Uploaded media document:\", uploadedImage);\n\n // Clean up: delete the temporary file\n fs.unlink(tempFilePath, (err) => {\n if (err) console.error(\"Error deleting temporary file:\", err);\n });\n\n return {\n id: uploadedImage.id,\n alt: uploadedImage.alt || \"\",\n prefix: \"media\",\n updatedAt: uploadedImage.updatedAt,\n createdAt: uploadedImage.createdAt,\n url: uploadedImage.url,\n thumbnailURL: uploadedImage.thumbnailURL || null,\n filename: uploadedImage.filename,\n mimeType: uploadedImage.mimeType,\n filesize: uploadedImage.filesize,\n width: uploadedImage.width,\n height: uploadedImage.height,\n focalX: 50,\n focalY: 50,\n };\n } catch (error) {\n console.error(\"Error uploading image:\", error);\n }\n}\nfunction mapMockProductToSchema(\n product: ProductDetails,\n editorConfig: any,\n rate: number,\n payload: BasePayload,\n) {\n return {\n description: convertHTMLToLexical({\n editorConfig,\n html: product.description || \"\",\n JSDOM,\n // uploadImage: async (src: string) => {\n // return uploadImageToPayload(src, payload);\n // },\n }),\n source: \"cj\",\n pid: product.pid,\n title: product.productNameEn,\n variants: product.variants?.map((variant) => ({\n imageUrl: variant.variantImage, // Map image URL to 'id' if using media collection\n options: variant.variantKey?.split(\"-\").map((key, index) => ({\n option: index === 0 ? \"Color\" : \"Size\", // Assuming 'Color' and 'Size', adjust keys if needed\n value: key,\n })),\n price: new decimal(variant.variantSellPrice || 0).mul(rate).toNumber().toFixed(2),\n vid: variant.vid,\n })),\n };\n}\n\nconst findProductById = async (productId: string) => {\n const result = await cjSdk.getProductDetails({\n pid: productId,\n });\n return result.data;\n};\n\nconst createOrUpdateProduct = async (\n product: Omit<Product, \"createdAt\" | \"id\" | \"updatedAt\">,\n payload: BasePayload,\n) => {\n const { totalDocs } = await payload.count({\n collection: \"products\",\n where: {\n pid: {\n equals: product.pid,\n },\n },\n });\n\n if (totalDocs === 0) {\n return payload.create({\n collection: \"products\",\n data: { ...product } as any,\n });\n }\n};\n\nexport const fetchExchangeRates = async () => {\n const response = await fetch(\"https://open.er-api.com/v6/latest/USD\");\n const data = await response.json();\n\n return data;\n};\n\nexport const syncProducts = async (productIds: string[], payload: BasePayload) => {\n const exchangeRates = await fetchExchangeRates();\n const storeSettings = await payload.findGlobal({\n slug: \"store-settings\",\n });\n const rate = exchangeRates.rates[storeSettings.currency || \"USD\"];\n\n const editorConfig = await editorConfigFactory.default({\n config: payload.config,\n });\n const products: ProductDetails[] = [];\n for (const productId of productIds) {\n const product = await findProductById(productId);\n if (!product) {\n continue;\n }\n products.push(product);\n await delay(1010);\n }\n const mappedProducts = products.map((product) => {\n return mapMockProductToSchema(product, editorConfig, rate, payload);\n });\n\n await Promise.all(\n mappedProducts.map((product) => createOrUpdateProduct(product as any, payload)),\n );\n\n return products;\n};\n"],"names":["convertHTMLToLexical","editorConfigFactory","decimal","JSDOM","cjSdk","path","dirname","fs","promisify","pipeline","writeFile","fileURLToPath","__filename","url","__dirname","streamPipeline","delay","ms","Promise","resolve","setTimeout","download","uri","filename","response","fetch","ok","Error","statusText","contentType","headers","get","contentLength","console","log","buffer","Buffer","from","arrayBuffer","error","uploadImageToPayload","src","payload","tempFilePath","join","uploadedImage","create","collection","data","alt","filePath","unlink","err","id","prefix","updatedAt","createdAt","thumbnailURL","mimeType","filesize","width","height","focalX","focalY","mapMockProductToSchema","product","editorConfig","rate","description","html","source","pid","title","productNameEn","variants","map","variant","imageUrl","variantImage","options","variantKey","split","key","index","option","value","price","variantSellPrice","mul","toNumber","toFixed","vid","findProductById","productId","result","getProductDetails","createOrUpdateProduct","totalDocs","count","where","equals","fetchExchangeRates","json","syncProducts","productIds","exchangeRates","storeSettings","findGlobal","slug","rates","currency","default","config","products","push","mappedProducts","all"],"mappings":"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"}
@@ -0,0 +1,74 @@
1
+ export interface CJApiResponse<T> {
2
+ code: number;
3
+ result: boolean;
4
+ message: string;
5
+ data: T | null;
6
+ requestId: string;
7
+ }
8
+ export interface AccessTokenResponse {
9
+ code: number;
10
+ result: boolean;
11
+ message: string;
12
+ data: {
13
+ accessToken: string;
14
+ accessTokenExpiryDate: string | Date;
15
+ refreshToken: string;
16
+ refreshTokenExpiryDate: string | Date;
17
+ createDate: string;
18
+ } | null;
19
+ requestId: string;
20
+ }
21
+ export interface Variant {
22
+ vid: string;
23
+ pid: string;
24
+ variantName: string | null;
25
+ variantNameEn: string | null;
26
+ variantSku: string;
27
+ variantImage: string | null;
28
+ variantStandard: string | null;
29
+ variantUnit: string | null;
30
+ variantProperty: string | null;
31
+ variantKey: string;
32
+ variantLength: number;
33
+ variantWidth: number;
34
+ variantHeight: number;
35
+ variantVolume: number;
36
+ variantWeight: number;
37
+ variantSellPrice: number;
38
+ variantSugSellPrice: number;
39
+ createTime: string;
40
+ }
41
+ export interface ProductDetailResponseData {
42
+ pid: string;
43
+ productName: string[];
44
+ productNameEn: string;
45
+ productSku: string;
46
+ productImage: string;
47
+ productWeight: number;
48
+ productUnit: string;
49
+ productType: string;
50
+ categoryId: string;
51
+ categoryName: string;
52
+ entryCode: string;
53
+ entryName: string;
54
+ entryNameEn: string;
55
+ materialName: string[];
56
+ materialNameEn: string[];
57
+ materialKey: string[];
58
+ packingWeight: number;
59
+ packingName: string[];
60
+ packingNameEn: string[];
61
+ packingKey: string[];
62
+ productKey: string[];
63
+ productKeyEn: string;
64
+ sellPrice: number;
65
+ sourceFrom: number;
66
+ description: string;
67
+ suggestSellPrice: string;
68
+ listedNum: number;
69
+ status: string;
70
+ supplierName: string;
71
+ supplierId: string;
72
+ variants: Variant[];
73
+ createrTime: string;
74
+ }
package/dist/types.js ADDED
@@ -0,0 +1,3 @@
1
+ export { };
2
+
3
+ //# sourceMappingURL=types.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"sources":["../src/types.ts"],"sourcesContent":["export interface CJApiResponse<T> {\n code: number;\n result: boolean;\n message: string;\n data: T | null;\n requestId: string;\n}\n\nexport interface AccessTokenResponse {\n code: number;\n result: boolean;\n message: string;\n data: {\n accessToken: string;\n accessTokenExpiryDate: string | Date;\n refreshToken: string;\n refreshTokenExpiryDate: string | Date;\n createDate: string;\n } | null;\n requestId: string;\n}\n\nexport interface Variant {\n vid: string;\n pid: string;\n variantName: string | null;\n variantNameEn: string | null;\n variantSku: string;\n variantImage: string | null;\n variantStandard: string | null;\n variantUnit: string | null;\n variantProperty: string | null;\n variantKey: string;\n variantLength: number;\n variantWidth: number;\n variantHeight: number;\n variantVolume: number;\n variantWeight: number;\n variantSellPrice: number;\n variantSugSellPrice: number;\n createTime: string;\n}\n\nexport interface ProductDetailResponseData {\n pid: string;\n productName: string[];\n productNameEn: string;\n productSku: string;\n productImage: string;\n productWeight: number;\n productUnit: string;\n productType: string;\n categoryId: string;\n categoryName: string;\n entryCode: string;\n entryName: string;\n entryNameEn: string;\n materialName: string[];\n materialNameEn: string[];\n materialKey: string[];\n packingWeight: number;\n packingName: string[];\n packingNameEn: string[];\n packingKey: string[];\n productKey: string[];\n productKeyEn: string;\n sellPrice: number;\n sourceFrom: number;\n description: string;\n suggestSellPrice: string;\n listedNum: number;\n status: string;\n supplierName: string;\n supplierId: string;\n variants: Variant[];\n createrTime: string;\n}\n"],"names":[],"mappings":"AA2CA,WAiCC"}
@@ -0,0 +1,3 @@
1
+ import type { FieldServerComponent } from 'payload';
2
+ declare const RefundButton: FieldServerComponent;
3
+ export default RefundButton;
@@ -0,0 +1,24 @@
1
+ import { jsx as _jsx, jsxs as _jsxs, Fragment as _Fragment } from "react/jsx-runtime";
2
+ import { Button, Modal } from '@payloadcms/ui';
3
+ import React from 'react';
4
+ const RefundButton = ({ data, payload })=>{
5
+ return /*#__PURE__*/ _jsxs(_Fragment, {
6
+ children: [
7
+ /*#__PURE__*/ _jsx(Modal, {
8
+ slug: "refundModal",
9
+ title: "Refund",
10
+ children: /*#__PURE__*/ _jsx("h1", {
11
+ children: "Refund"
12
+ })
13
+ }),
14
+ /*#__PURE__*/ _jsx(Button, {
15
+ buttonStyle: "secondary",
16
+ size: "small",
17
+ children: "Refund"
18
+ })
19
+ ]
20
+ });
21
+ };
22
+ export default RefundButton;
23
+
24
+ //# sourceMappingURL=refund-button.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"sources":["../../src/ui/refund-button.tsx"],"sourcesContent":["import type { FieldServerComponent } from 'payload'\n\nimport { Button, Modal } from '@payloadcms/ui'\nimport React from 'react'\n\nconst RefundButton: FieldServerComponent = ({ data, payload }) => {\n return (\n <>\n <Modal slug=\"refundModal\" title=\"Refund\">\n <h1>Refund</h1>\n </Modal>\n <Button buttonStyle=\"secondary\" size=\"small\">\n Refund\n </Button>\n </>\n )\n}\n\nexport default RefundButton\n"],"names":["Button","Modal","React","RefundButton","data","payload","slug","title","h1","buttonStyle","size"],"mappings":";AAEA,SAASA,MAAM,EAAEC,KAAK,QAAQ,iBAAgB;AAC9C,OAAOC,WAAW,QAAO;AAEzB,MAAMC,eAAqC,CAAC,EAAEC,IAAI,EAAEC,OAAO,EAAE;IAC3D,qBACE;;0BACE,KAACJ;gBAAMK,MAAK;gBAAcC,OAAM;0BAC9B,cAAA,KAACC;8BAAG;;;0BAEN,KAACR;gBAAOS,aAAY;gBAAYC,MAAK;0BAAQ;;;;AAKnD;AAEA,eAAeP,aAAY"}
@@ -0,0 +1,4 @@
1
+ type TokenPayload = string;
2
+ export declare const encryptToken: (token: TokenPayload) => string;
3
+ export declare const decryptToken: (encryptedToken: string) => string;
4
+ export {};
@@ -0,0 +1,41 @@
1
+ import crypto from "crypto";
2
+ const getKey = (rawKey)=>{
3
+ return crypto.createHash("sha256").update(rawKey).digest();
4
+ };
5
+ const getTenantSecret = (tenantId)=>{
6
+ const key = tenantId;
7
+ if (!key) throw new Error(`Missing secret for tenant: ${tenantId}`);
8
+ return Buffer.from(key, "hex");
9
+ };
10
+ export const encryptToken = (token)=>{
11
+ const key = getKey(process.env.ENCRYPTION_KEY);
12
+ const iv = crypto.randomBytes(12);
13
+ const cipher = crypto.createCipheriv("aes-256-gcm", key, iv);
14
+ const encrypted = Buffer.concat([
15
+ cipher.update(token, "utf8"),
16
+ cipher.final()
17
+ ]);
18
+ const tag = cipher.getAuthTag();
19
+ const result = {
20
+ iv: iv.toString("hex"),
21
+ tag: tag.toString("hex"),
22
+ content: encrypted.toString("hex")
23
+ };
24
+ return Buffer.from(JSON.stringify(result)).toString("base64");
25
+ };
26
+ export const decryptToken = (encryptedToken)=>{
27
+ const key = getKey(process.env.ENCRYPTION_KEY);
28
+ const decoded = JSON.parse(Buffer.from(encryptedToken, "base64").toString("utf8"));
29
+ const iv = Buffer.from(decoded.iv, "hex");
30
+ const tag = Buffer.from(decoded.tag, "hex");
31
+ const content = Buffer.from(decoded.content, "hex");
32
+ const decipher = crypto.createDecipheriv("aes-256-gcm", key, iv);
33
+ decipher.setAuthTag(tag);
34
+ const decrypted = Buffer.concat([
35
+ decipher.update(content),
36
+ decipher.final()
37
+ ]);
38
+ return decrypted.toString("utf8");
39
+ };
40
+
41
+ //# sourceMappingURL=manage-tokens.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"sources":["../../src/util/manage-tokens.ts"],"sourcesContent":["import crypto from \"crypto\";\n\ntype TokenPayload = string;\ntype EncryptedData = {\n iv: string;\n tag: string;\n content: string;\n};\n\nconst getKey = (rawKey: string): Buffer => {\n return crypto.createHash(\"sha256\").update(rawKey).digest();\n};\n\nconst getTenantSecret = (tenantId: string): Buffer => {\n const key = tenantId;\n if (!key) throw new Error(`Missing secret for tenant: ${tenantId}`);\n return Buffer.from(key, \"hex\");\n};\n\nexport const encryptToken = (token: TokenPayload): string => {\n const key = getKey(process.env.ENCRYPTION_KEY!);\n const iv = crypto.randomBytes(12);\n const cipher = crypto.createCipheriv(\"aes-256-gcm\", key, iv);\n\n const encrypted = Buffer.concat([cipher.update(token, \"utf8\"), cipher.final()]);\n\n const tag = cipher.getAuthTag();\n\n const result: EncryptedData = {\n iv: iv.toString(\"hex\"),\n tag: tag.toString(\"hex\"),\n content: encrypted.toString(\"hex\"),\n };\n\n return Buffer.from(JSON.stringify(result)).toString(\"base64\");\n};\n\nexport const decryptToken = (encryptedToken: string): string => {\n const key = getKey(process.env.ENCRYPTION_KEY!);\n const decoded = JSON.parse(\n Buffer.from(encryptedToken, \"base64\").toString(\"utf8\"),\n ) as EncryptedData;\n\n const iv = Buffer.from(decoded.iv, \"hex\");\n const tag = Buffer.from(decoded.tag, \"hex\");\n const content = Buffer.from(decoded.content, \"hex\");\n\n const decipher = crypto.createDecipheriv(\"aes-256-gcm\", key, iv);\n decipher.setAuthTag(tag);\n\n const decrypted = Buffer.concat([decipher.update(content), decipher.final()]);\n\n return decrypted.toString(\"utf8\");\n};\n"],"names":["crypto","getKey","rawKey","createHash","update","digest","getTenantSecret","tenantId","key","Error","Buffer","from","encryptToken","token","process","env","ENCRYPTION_KEY","iv","randomBytes","cipher","createCipheriv","encrypted","concat","final","tag","getAuthTag","result","toString","content","JSON","stringify","decryptToken","encryptedToken","decoded","parse","decipher","createDecipheriv","setAuthTag","decrypted"],"mappings":"AAAA,OAAOA,YAAY,SAAS;AAS5B,MAAMC,SAAS,CAACC;IACZ,OAAOF,OAAOG,UAAU,CAAC,UAAUC,MAAM,CAACF,QAAQG,MAAM;AAC5D;AAEA,MAAMC,kBAAkB,CAACC;IACrB,MAAMC,MAAMD;IACZ,IAAI,CAACC,KAAK,MAAM,IAAIC,MAAM,CAAC,2BAA2B,EAAEF,UAAU;IAClE,OAAOG,OAAOC,IAAI,CAACH,KAAK;AAC5B;AAEA,OAAO,MAAMI,eAAe,CAACC;IACzB,MAAML,MAAMP,OAAOa,QAAQC,GAAG,CAACC,cAAc;IAC7C,MAAMC,KAAKjB,OAAOkB,WAAW,CAAC;IAC9B,MAAMC,SAASnB,OAAOoB,cAAc,CAAC,eAAeZ,KAAKS;IAEzD,MAAMI,YAAYX,OAAOY,MAAM,CAAC;QAACH,OAAOf,MAAM,CAACS,OAAO;QAASM,OAAOI,KAAK;KAAG;IAE9E,MAAMC,MAAML,OAAOM,UAAU;IAE7B,MAAMC,SAAwB;QAC1BT,IAAIA,GAAGU,QAAQ,CAAC;QAChBH,KAAKA,IAAIG,QAAQ,CAAC;QAClBC,SAASP,UAAUM,QAAQ,CAAC;IAChC;IAEA,OAAOjB,OAAOC,IAAI,CAACkB,KAAKC,SAAS,CAACJ,SAASC,QAAQ,CAAC;AACxD,EAAE;AAEF,OAAO,MAAMI,eAAe,CAACC;IACzB,MAAMxB,MAAMP,OAAOa,QAAQC,GAAG,CAACC,cAAc;IAC7C,MAAMiB,UAAUJ,KAAKK,KAAK,CACtBxB,OAAOC,IAAI,CAACqB,gBAAgB,UAAUL,QAAQ,CAAC;IAGnD,MAAMV,KAAKP,OAAOC,IAAI,CAACsB,QAAQhB,EAAE,EAAE;IACnC,MAAMO,MAAMd,OAAOC,IAAI,CAACsB,QAAQT,GAAG,EAAE;IACrC,MAAMI,UAAUlB,OAAOC,IAAI,CAACsB,QAAQL,OAAO,EAAE;IAE7C,MAAMO,WAAWnC,OAAOoC,gBAAgB,CAAC,eAAe5B,KAAKS;IAC7DkB,SAASE,UAAU,CAACb;IAEpB,MAAMc,YAAY5B,OAAOY,MAAM,CAAC;QAACa,SAAS/B,MAAM,CAACwB;QAAUO,SAASZ,KAAK;KAAG;IAE5E,OAAOe,UAAUX,QAAQ,CAAC;AAC9B,EAAE"}
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@shopnex/cj-plugin",
3
- "version": "1.0.1",
3
+ "version": "1.0.3",
4
4
  "description": "A blank template to get started with Payload 3.0",
5
5
  "type": "module",
6
6
  "exports": {