@shopnex/cj-plugin 1.0.1 → 1.0.2
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/dist/api-client.d.ts +2 -0
- package/dist/api-client.js +27 -0
- package/dist/api-client.js.map +1 -0
- package/dist/auth.d.ts +15 -0
- package/dist/auth.js +47 -0
- package/dist/auth.js.map +1 -0
- package/dist/cj-settings.d.ts +2 -0
- package/dist/cj-settings.js +51 -0
- package/dist/cj-settings.js.map +1 -0
- package/dist/error-handler.d.ts +12 -0
- package/dist/error-handler.js +41 -0
- package/dist/error-handler.js.map +1 -0
- package/dist/error-types.d.ts +20 -0
- package/dist/error-types.js +7 -0
- package/dist/error-types.js.map +1 -0
- package/dist/index.d.ts +8 -0
- package/dist/index.js +36 -0
- package/dist/index.js.map +1 -0
- package/dist/sdk/access-token.d.ts +8 -0
- package/dist/sdk/access-token.js +22 -0
- package/dist/sdk/access-token.js.map +1 -0
- package/dist/sdk/cj-sdk.d.ts +4 -0
- package/dist/sdk/cj-sdk.js +6 -0
- package/dist/sdk/cj-sdk.js.map +1 -0
- package/dist/sdk/dispute/dispute-types.d.ts +64 -0
- package/dist/sdk/dispute/dispute-types.js +4 -0
- package/dist/sdk/dispute/dispute-types.js.map +1 -0
- package/dist/sdk/dispute/dispute.d.ts +4 -0
- package/dist/sdk/dispute/dispute.js +52 -0
- package/dist/sdk/dispute/dispute.js.map +1 -0
- package/dist/sdk/inventory/inventory-types.d.ts +7 -0
- package/dist/sdk/inventory/inventory-types.js +3 -0
- package/dist/sdk/inventory/inventory-types.js.map +1 -0
- package/dist/sdk/inventory/inventory.d.ts +3 -0
- package/dist/sdk/inventory/inventory.js +41 -0
- package/dist/sdk/inventory/inventory.js.map +1 -0
- package/dist/sdk/orders/order-types.d.ts +135 -0
- package/dist/sdk/orders/order-types.js +3 -0
- package/dist/sdk/orders/order-types.js.map +1 -0
- package/dist/sdk/orders/orders.d.ts +16 -0
- package/dist/sdk/orders/orders.js +167 -0
- package/dist/sdk/orders/orders.js.map +1 -0
- package/dist/sdk/products/product-types.d.ts +186 -0
- package/dist/sdk/products/product-types.js +5 -0
- package/dist/sdk/products/product-types.js.map +1 -0
- package/dist/sdk/products/products.d.ts +9 -0
- package/dist/sdk/products/products.js +96 -0
- package/dist/sdk/products/products.js.map +1 -0
- package/dist/sdk/settings/settings-api.d.ts +2 -0
- package/dist/sdk/settings/settings-api.js +20 -0
- package/dist/sdk/settings/settings-api.js.map +1 -0
- package/dist/sdk/settings/settings-types.d.ts +22 -0
- package/dist/sdk/settings/settings-types.js +3 -0
- package/dist/sdk/settings/settings-types.js.map +1 -0
- package/dist/sdk/variants/variant-types.d.ts +18 -0
- package/dist/sdk/variants/variant-types.js +3 -0
- package/dist/sdk/variants/variant-types.js.map +1 -0
- package/dist/sdk/variants/variants.d.ts +8 -0
- package/dist/sdk/variants/variants.js +76 -0
- package/dist/sdk/variants/variants.js.map +1 -0
- package/dist/service/convert-html-to-lexical.d.ts +0 -0
- package/dist/service/convert-html-to-lexical.js +75 -0
- package/dist/service/convert-html-to-lexical.js.map +1 -0
- package/dist/service/create-order.hook.d.ts +12 -0
- package/dist/service/create-order.hook.js +64 -0
- package/dist/service/create-order.hook.js.map +1 -0
- package/dist/service/sync-products.d.ts +4 -0
- package/dist/service/sync-products.js +147 -0
- package/dist/service/sync-products.js.map +1 -0
- package/dist/types.d.ts +74 -0
- package/dist/types.js +3 -0
- package/dist/types.js.map +1 -0
- package/dist/ui/refund-button.d.ts +3 -0
- package/dist/ui/refund-button.js +24 -0
- package/dist/ui/refund-button.js.map +1 -0
- package/package.json +1 -1
@@ -0,0 +1,27 @@
|
|
1
|
+
import axios from 'axios';
|
2
|
+
import { handleCJError } from './error-handler';
|
3
|
+
export const cjApiClient = axios.create({
|
4
|
+
baseURL: 'https://developers.cjdropshipping.com/api2.0/v1/',
|
5
|
+
headers: {
|
6
|
+
'Content-Type': 'application/json'
|
7
|
+
},
|
8
|
+
timeout: 20000
|
9
|
+
});
|
10
|
+
// Response interceptor for automatic error handling
|
11
|
+
cjApiClient.interceptors.response.use((response)=>{
|
12
|
+
if (response.data.code !== 200) {
|
13
|
+
handleCJError(response.data);
|
14
|
+
}
|
15
|
+
return response;
|
16
|
+
}, (error)=>{
|
17
|
+
if (error.response) {
|
18
|
+
// Handle CJ API errors
|
19
|
+
handleCJError(error.response.data);
|
20
|
+
} else if (error.request) {
|
21
|
+
throw new Error('Network error: No response from CJ API');
|
22
|
+
} else {
|
23
|
+
throw new Error(`Axios error: ${error.message}`);
|
24
|
+
}
|
25
|
+
});
|
26
|
+
|
27
|
+
//# sourceMappingURL=api-client.js.map
|
@@ -0,0 +1 @@
|
|
1
|
+
{"version":3,"sources":["../src/api-client.ts"],"sourcesContent":["import axios, { type AxiosError, type AxiosInstance, type AxiosResponse } from 'axios'\n\nimport { handleCJError } from './error-handler'\n\nexport const cjApiClient: AxiosInstance = axios.create({\n baseURL: 'https://developers.cjdropshipping.com/api2.0/v1/',\n headers: {\n 'Content-Type': 'application/json',\n },\n timeout: 20000,\n})\n \n// Response interceptor for automatic error handling\ncjApiClient.interceptors.response.use(\n (response: AxiosResponse) => {\n if (response.data.code !== 200) {\n handleCJError(response.data)\n }\n return response\n },\n (error: AxiosError) => {\n if (error.response) {\n // Handle CJ API errors\n handleCJError(error.response.data as { code: number; message?: string })\n } else if (error.request) {\n throw new Error('Network error: No response from CJ API')\n } else {\n throw new Error(`Axios error: ${error.message}`)\n }\n },\n)\n"],"names":["axios","handleCJError","cjApiClient","create","baseURL","headers","timeout","interceptors","response","use","data","code","error","request","Error","message"],"mappings":"AAAA,OAAOA,WAAwE,QAAO;AAEtF,SAASC,aAAa,QAAQ,kBAAiB;AAE/C,OAAO,MAAMC,cAA6BF,MAAMG,MAAM,CAAC;IACrDC,SAAS;IACTC,SAAS;QACP,gBAAgB;IAClB;IACAC,SAAS;AACX,GAAE;AAEF,oDAAoD;AACpDJ,YAAYK,YAAY,CAACC,QAAQ,CAACC,GAAG,CACnC,CAACD;IACC,IAAIA,SAASE,IAAI,CAACC,IAAI,KAAK,KAAK;QAC9BV,cAAcO,SAASE,IAAI;IAC7B;IACA,OAAOF;AACT,GACA,CAACI;IACC,IAAIA,MAAMJ,QAAQ,EAAE;QAClB,uBAAuB;QACvBP,cAAcW,MAAMJ,QAAQ,CAACE,IAAI;IACnC,OAAO,IAAIE,MAAMC,OAAO,EAAE;QACxB,MAAM,IAAIC,MAAM;IAClB,OAAO;QACL,MAAM,IAAIA,MAAM,CAAC,aAAa,EAAEF,MAAMG,OAAO,EAAE;IACjD;AACF"}
|
package/dist/auth.d.ts
ADDED
@@ -0,0 +1,15 @@
|
|
1
|
+
export declare function getAccessToken(email: string, password: string): Promise<{
|
2
|
+
accessToken: string;
|
3
|
+
accessTokenExpiryDate: string | Date;
|
4
|
+
refreshToken: string;
|
5
|
+
refreshTokenExpiryDate: string | Date;
|
6
|
+
createDate: string;
|
7
|
+
}>;
|
8
|
+
export declare function refreshAccessToken(refreshToken: string): Promise<{
|
9
|
+
accessToken: string;
|
10
|
+
accessTokenExpiryDate: string;
|
11
|
+
createDate: string;
|
12
|
+
refreshToken: string;
|
13
|
+
refreshTokenExpiryDate: string;
|
14
|
+
}>;
|
15
|
+
export declare function logout(accessToken: string): Promise<void>;
|
package/dist/auth.js
ADDED
@@ -0,0 +1,47 @@
|
|
1
|
+
import { cjApiClient } from './api-client';
|
2
|
+
export async function getAccessToken(email, password) {
|
3
|
+
try {
|
4
|
+
const response = await cjApiClient.post('authentication/getAccessToken', {
|
5
|
+
email,
|
6
|
+
password
|
7
|
+
});
|
8
|
+
if (!response.data.data?.accessToken) {
|
9
|
+
throw new Error('Failed to fetch access token');
|
10
|
+
}
|
11
|
+
// TODO: add logger
|
12
|
+
// console.log('Access Token:', response.data.data?.accessToken)
|
13
|
+
return response.data.data;
|
14
|
+
} catch (error) {
|
15
|
+
console.error('Error fetching access token:', error);
|
16
|
+
throw error // Rethrow for caller to handle
|
17
|
+
;
|
18
|
+
}
|
19
|
+
}
|
20
|
+
export async function refreshAccessToken(refreshToken) {
|
21
|
+
try {
|
22
|
+
const response = await cjApiClient.post('authentication/refreshAccessToken', {
|
23
|
+
refreshToken
|
24
|
+
});
|
25
|
+
// TODO: add logger
|
26
|
+
// console.info('New Access Token:', response.data.data.accessToken)
|
27
|
+
return response.data.data;
|
28
|
+
} catch (error) {
|
29
|
+
console.error('Error refreshing access token:', error);
|
30
|
+
throw error;
|
31
|
+
}
|
32
|
+
}
|
33
|
+
export async function logout(accessToken) {
|
34
|
+
try {
|
35
|
+
await cjApiClient.post('authentication/logout', {}, {
|
36
|
+
headers: {
|
37
|
+
'CJ-Access-Token': accessToken
|
38
|
+
}
|
39
|
+
});
|
40
|
+
console.log('Successfully logged out');
|
41
|
+
} catch (error) {
|
42
|
+
console.error('Logout failed:', error);
|
43
|
+
throw error;
|
44
|
+
}
|
45
|
+
}
|
46
|
+
|
47
|
+
//# sourceMappingURL=auth.js.map
|
package/dist/auth.js.map
ADDED
@@ -0,0 +1 @@
|
|
1
|
+
{"version":3,"sources":["../src/auth.ts"],"sourcesContent":["import type { AccessTokenResponse } from './types'\n\nimport { cjApiClient } from './api-client'\n\ninterface RefreshTokenResponse {\n code: number\n data: {\n accessToken: string\n accessTokenExpiryDate: string\n createDate: string\n refreshToken: string\n refreshTokenExpiryDate: string\n }\n message: string\n requestId: string\n result: boolean\n}\n\ninterface LogoutResponse {\n code: number\n data: boolean\n message: string\n requestId: string\n result: boolean\n}\n\nexport async function getAccessToken(email: string, password: string) {\n try {\n const response = await cjApiClient.post<AccessTokenResponse>('authentication/getAccessToken', {\n email,\n password,\n })\n\n if (!response.data.data?.accessToken) {\n throw new Error('Failed to fetch access token')\n }\n // TODO: add logger\n // console.log('Access Token:', response.data.data?.accessToken)\n return response.data.data\n } catch (error) {\n console.error('Error fetching access token:', error)\n throw error // Rethrow for caller to handle\n }\n}\n\nexport async function refreshAccessToken(refreshToken: string) {\n try {\n const response = await cjApiClient.post<RefreshTokenResponse>(\n 'authentication/refreshAccessToken',\n {\n refreshToken,\n },\n )\n\n // TODO: add logger\n // console.info('New Access Token:', response.data.data.accessToken)\n return response.data.data\n } catch (error) {\n console.error('Error refreshing access token:', error)\n throw error\n }\n}\n\nexport async function logout(accessToken: string) {\n try {\n await cjApiClient.post<LogoutResponse>(\n 'authentication/logout',\n {},\n {\n headers: { 'CJ-Access-Token': accessToken },\n },\n )\n\n console.log('Successfully logged out')\n } catch (error) {\n console.error('Logout failed:', error)\n throw error\n }\n}\n"],"names":["cjApiClient","getAccessToken","email","password","response","post","data","accessToken","Error","error","console","refreshAccessToken","refreshToken","logout","headers","log"],"mappings":"AAEA,SAASA,WAAW,QAAQ,eAAc;AAwB1C,OAAO,eAAeC,eAAeC,KAAa,EAAEC,QAAgB;IAClE,IAAI;QACF,MAAMC,WAAW,MAAMJ,YAAYK,IAAI,CAAsB,iCAAiC;YAC5FH;YACAC;QACF;QAEA,IAAI,CAACC,SAASE,IAAI,CAACA,IAAI,EAAEC,aAAa;YACpC,MAAM,IAAIC,MAAM;QAClB;QACA,mBAAmB;QACnB,gEAAgE;QAChE,OAAOJ,SAASE,IAAI,CAACA,IAAI;IAC3B,EAAE,OAAOG,OAAO;QACdC,QAAQD,KAAK,CAAC,gCAAgCA;QAC9C,MAAMA,MAAM,+BAA+B;;IAC7C;AACF;AAEA,OAAO,eAAeE,mBAAmBC,YAAoB;IAC3D,IAAI;QACF,MAAMR,WAAW,MAAMJ,YAAYK,IAAI,CACrC,qCACA;YACEO;QACF;QAGF,mBAAmB;QACnB,oEAAoE;QACpE,OAAOR,SAASE,IAAI,CAACA,IAAI;IAC3B,EAAE,OAAOG,OAAO;QACdC,QAAQD,KAAK,CAAC,kCAAkCA;QAChD,MAAMA;IACR;AACF;AAEA,OAAO,eAAeI,OAAON,WAAmB;IAC9C,IAAI;QACF,MAAMP,YAAYK,IAAI,CACpB,yBACA,CAAC,GACD;YACES,SAAS;gBAAE,mBAAmBP;YAAY;QAC5C;QAGFG,QAAQK,GAAG,CAAC;IACd,EAAE,OAAON,OAAO;QACdC,QAAQD,KAAK,CAAC,kBAAkBA;QAChC,MAAMA;IACR;AACF"}
|
@@ -0,0 +1,51 @@
|
|
1
|
+
import { syncProducts } from "./service/sync-products";
|
2
|
+
export const CjSettings = {
|
3
|
+
slug: "cj-settings",
|
4
|
+
access: {
|
5
|
+
read: ()=>true,
|
6
|
+
update: ({ req })=>!!req.user?.roles?.includes("user")
|
7
|
+
},
|
8
|
+
admin: {
|
9
|
+
group: "Plugins"
|
10
|
+
},
|
11
|
+
fields: [
|
12
|
+
{
|
13
|
+
label: "Logo Area POD",
|
14
|
+
name: "pod",
|
15
|
+
type: "upload",
|
16
|
+
relationTo: "media"
|
17
|
+
},
|
18
|
+
{
|
19
|
+
name: "items",
|
20
|
+
type: "array",
|
21
|
+
admin: {
|
22
|
+
description: "A list of product URLs to sync with CJ Dropshipping"
|
23
|
+
},
|
24
|
+
fields: [
|
25
|
+
{
|
26
|
+
name: "productUrl",
|
27
|
+
type: "text"
|
28
|
+
}
|
29
|
+
],
|
30
|
+
label: "Products",
|
31
|
+
labels: {
|
32
|
+
plural: "Product URLs",
|
33
|
+
singular: "Product URL"
|
34
|
+
}
|
35
|
+
}
|
36
|
+
],
|
37
|
+
hooks: {
|
38
|
+
afterChange: [
|
39
|
+
async ({ doc, req: { payload } })=>{
|
40
|
+
const productIds = doc.items.map((item)=>{
|
41
|
+
const match = item.productUrl.match(/(?<=-p-)([0-9A-Fa-f-]+)(?=\.html)/);
|
42
|
+
return match ? match[0] : null;
|
43
|
+
});
|
44
|
+
await syncProducts(productIds, payload);
|
45
|
+
}
|
46
|
+
]
|
47
|
+
},
|
48
|
+
label: "CJ Dropshipping"
|
49
|
+
};
|
50
|
+
|
51
|
+
//# sourceMappingURL=cj-settings.js.map
|
@@ -0,0 +1 @@
|
|
1
|
+
{"version":3,"sources":["../src/cj-settings.ts"],"sourcesContent":["import type { GlobalConfig } from \"payload\";\n\nimport { syncProducts } from \"./service/sync-products\";\n\nexport const CjSettings: GlobalConfig = {\n slug: \"cj-settings\",\n access: {\n read: () => true,\n update: ({ req }) => !!req.user?.roles?.includes(\"user\"),\n },\n admin: {\n group: \"Plugins\",\n },\n fields: [\n {\n label: \"Logo Area POD\",\n name: \"pod\",\n type: \"upload\",\n relationTo: \"media\",\n },\n {\n name: \"items\",\n type: \"array\",\n admin: {\n description: \"A list of product URLs to sync with CJ Dropshipping\",\n },\n fields: [\n {\n name: \"productUrl\",\n type: \"text\",\n },\n ],\n label: \"Products\",\n labels: {\n plural: \"Product URLs\",\n singular: \"Product URL\",\n },\n },\n ],\n hooks: {\n afterChange: [\n async ({ doc, req: { payload } }) => {\n const productIds = doc.items.map((item: any) => {\n const match = item.productUrl.match(/(?<=-p-)([0-9A-Fa-f-]+)(?=\\.html)/);\n return match ? match[0] : null;\n });\n await syncProducts(productIds, payload);\n },\n ],\n },\n label: \"CJ Dropshipping\",\n};\n"],"names":["syncProducts","CjSettings","slug","access","read","update","req","user","roles","includes","admin","group","fields","label","name","type","relationTo","description","labels","plural","singular","hooks","afterChange","doc","payload","productIds","items","map","item","match","productUrl"],"mappings":"AAEA,SAASA,YAAY,QAAQ,0BAA0B;AAEvD,OAAO,MAAMC,aAA2B;IACpCC,MAAM;IACNC,QAAQ;QACJC,MAAM,IAAM;QACZC,QAAQ,CAAC,EAAEC,GAAG,EAAE,GAAK,CAAC,CAACA,IAAIC,IAAI,EAAEC,OAAOC,SAAS;IACrD;IACAC,OAAO;QACHC,OAAO;IACX;IACAC,QAAQ;QACJ;YACIC,OAAO;YACPC,MAAM;YACNC,MAAM;YACNC,YAAY;QAChB;QACA;YACIF,MAAM;YACNC,MAAM;YACNL,OAAO;gBACHO,aAAa;YACjB;YACAL,QAAQ;gBACJ;oBACIE,MAAM;oBACNC,MAAM;gBACV;aACH;YACDF,OAAO;YACPK,QAAQ;gBACJC,QAAQ;gBACRC,UAAU;YACd;QACJ;KACH;IACDC,OAAO;QACHC,aAAa;YACT,OAAO,EAAEC,GAAG,EAAEjB,KAAK,EAAEkB,OAAO,EAAE,EAAE;gBAC5B,MAAMC,aAAaF,IAAIG,KAAK,CAACC,GAAG,CAAC,CAACC;oBAC9B,MAAMC,QAAQD,KAAKE,UAAU,CAACD,KAAK,CAAC;oBACpC,OAAOA,QAAQA,KAAK,CAAC,EAAE,GAAG;gBAC9B;gBACA,MAAM7B,aAAayB,YAAYD;YACnC;SACH;IACL;IACAX,OAAO;AACX,EAAE"}
|
@@ -0,0 +1,12 @@
|
|
1
|
+
/**
|
2
|
+
* Gets a human-readable error message for a given error code.
|
3
|
+
*/
|
4
|
+
declare function getCJErrorMessage(code: number): string;
|
5
|
+
/**
|
6
|
+
* Throws a formatted error based on the API response.
|
7
|
+
*/
|
8
|
+
declare function handleCJError(response: {
|
9
|
+
code: number;
|
10
|
+
message?: string;
|
11
|
+
}): never;
|
12
|
+
export { getCJErrorMessage, handleCJError };
|
@@ -0,0 +1,41 @@
|
|
1
|
+
const CJ_ERROR_MESSAGES = {
|
2
|
+
200: "Success",
|
3
|
+
1600000: "System busy. Please try again later.",
|
4
|
+
1600001: "No permission. CJ-Access-Token is invalid.",
|
5
|
+
1600002: "CJ-Access-Token not found.",
|
6
|
+
1600003: "Refresh token failed.",
|
7
|
+
1600100: "The interface has been taken offline. Contact admin.",
|
8
|
+
1600101: "Interface not found. Check the endpoint URL.",
|
9
|
+
1600200: "Call exceeded limit. Try again later.",
|
10
|
+
1600201: "Quota has been used up. Contact support.",
|
11
|
+
1600300: "Illegal parameter. Check API documentation.",
|
12
|
+
1601000: "User not found. Check your email.",
|
13
|
+
1602000: "Variant not found.",
|
14
|
+
1602001: "Product not found or offline.",
|
15
|
+
1603000: "Order creation failed. Contact CJ support.",
|
16
|
+
1603001: "Order confirmation failed. Contact CJ support.",
|
17
|
+
1603002: "Order deletion failed. Contact CJ support.",
|
18
|
+
1603100: "Order not found. Check CJ order ID.",
|
19
|
+
1603101: "Order payment failed. Contact CJ Order Center.",
|
20
|
+
1604000: "Insufficient balance.",
|
21
|
+
1605000: "Logistics not found.",
|
22
|
+
1606000: "Webhook setup failed. Already exists.",
|
23
|
+
1606001: "Webhook setup failed. Contact CJ support.",
|
24
|
+
1607000: "Webhook URL error. URL cannot be empty."
|
25
|
+
};
|
26
|
+
/**
|
27
|
+
* Gets a human-readable error message for a given error code.
|
28
|
+
*/ function getCJErrorMessage(code) {
|
29
|
+
return CJ_ERROR_MESSAGES[code] || `Unknown error: ${code}`;
|
30
|
+
}
|
31
|
+
/**
|
32
|
+
* Throws a formatted error based on the API response.
|
33
|
+
*/ function handleCJError(response) {
|
34
|
+
const errorMessage = response.message || getCJErrorMessage(response.code);
|
35
|
+
const error = new Error(`CJ API Error (${response.code}): ${errorMessage}`);
|
36
|
+
error.code = response.code;
|
37
|
+
throw error;
|
38
|
+
}
|
39
|
+
export { getCJErrorMessage, handleCJError };
|
40
|
+
|
41
|
+
//# sourceMappingURL=error-handler.js.map
|
@@ -0,0 +1 @@
|
|
1
|
+
{"version":3,"sources":["../src/error-handler.ts"],"sourcesContent":["const CJ_ERROR_MESSAGES: Record<number, string> = {\n 200: \"Success\",\n 1600000: \"System busy. Please try again later.\",\n 1600001: \"No permission. CJ-Access-Token is invalid.\",\n 1600002: \"CJ-Access-Token not found.\",\n 1600003: \"Refresh token failed.\",\n 1600100: \"The interface has been taken offline. Contact admin.\",\n 1600101: \"Interface not found. Check the endpoint URL.\",\n 1600200: \"Call exceeded limit. Try again later.\",\n 1600201: \"Quota has been used up. Contact support.\",\n 1600300: \"Illegal parameter. Check API documentation.\",\n 1601000: \"User not found. Check your email.\",\n 1602000: \"Variant not found.\",\n 1602001: \"Product not found or offline.\",\n 1603000: \"Order creation failed. Contact CJ support.\",\n 1603001: \"Order confirmation failed. Contact CJ support.\",\n 1603002: \"Order deletion failed. Contact CJ support.\",\n 1603100: \"Order not found. Check CJ order ID.\",\n 1603101: \"Order payment failed. Contact CJ Order Center.\",\n 1604000: \"Insufficient balance.\",\n 1605000: \"Logistics not found.\",\n 1606000: \"Webhook setup failed. Already exists.\",\n 1606001: \"Webhook setup failed. Contact CJ support.\",\n 1607000: \"Webhook URL error. URL cannot be empty.\",\n};\n\n/**\n * Gets a human-readable error message for a given error code.\n */\nfunction getCJErrorMessage(code: number): string {\n return CJ_ERROR_MESSAGES[code] || `Unknown error: ${code}`;\n}\n\n/**\n * Throws a formatted error based on the API response.\n */\nfunction handleCJError(response: {\n code: number;\n message?: string;\n}): never {\n const errorMessage = response.message || getCJErrorMessage(response.code);\n const error = new Error(`CJ API Error (${response.code}): ${errorMessage}`);\n (error as any).code = response.code;\n throw error;\n}\n\nexport { getCJErrorMessage, handleCJError };\n"],"names":["CJ_ERROR_MESSAGES","getCJErrorMessage","code","handleCJError","response","errorMessage","message","error","Error"],"mappings":"AAAA,MAAMA,oBAA4C;IAC9C,KAAK;IACL,SAAS;IACT,SAAS;IACT,SAAS;IACT,SAAS;IACT,SAAS;IACT,SAAS;IACT,SAAS;IACT,SAAS;IACT,SAAS;IACT,SAAS;IACT,SAAS;IACT,SAAS;IACT,SAAS;IACT,SAAS;IACT,SAAS;IACT,SAAS;IACT,SAAS;IACT,SAAS;IACT,SAAS;IACT,SAAS;IACT,SAAS;IACT,SAAS;AACb;AAEA;;CAEC,GACD,SAASC,kBAAkBC,IAAY;IACnC,OAAOF,iBAAiB,CAACE,KAAK,IAAI,CAAC,eAAe,EAAEA,MAAM;AAC9D;AAEA;;CAEC,GACD,SAASC,cAAcC,QAGtB;IACG,MAAMC,eAAeD,SAASE,OAAO,IAAIL,kBAAkBG,SAASF,IAAI;IACxE,MAAMK,QAAQ,IAAIC,MAAM,CAAC,cAAc,EAAEJ,SAASF,IAAI,CAAC,GAAG,EAAEG,cAAc;IACzEE,MAAcL,IAAI,GAAGE,SAASF,IAAI;IACnC,MAAMK;AACV;AAEA,SAASN,iBAAiB,EAAEE,aAAa,GAAG"}
|
@@ -0,0 +1,20 @@
|
|
1
|
+
/**
|
2
|
+
* API Response Structure
|
3
|
+
*/
|
4
|
+
export type APIResponse<T> = {
|
5
|
+
data: T;
|
6
|
+
error?: never;
|
7
|
+
} | {
|
8
|
+
data?: never;
|
9
|
+
error: string;
|
10
|
+
};
|
11
|
+
/**
|
12
|
+
* API Error Response Structure
|
13
|
+
*/
|
14
|
+
export interface ApiResponseError {
|
15
|
+
code: number;
|
16
|
+
result: boolean;
|
17
|
+
message: string;
|
18
|
+
data: null;
|
19
|
+
requestId: string;
|
20
|
+
}
|
@@ -0,0 +1 @@
|
|
1
|
+
{"version":3,"sources":["../src/error-types.ts"],"sourcesContent":["/**\n * API Response Structure\n */\nexport type APIResponse<T> =\n | { data: T; error?: never }\n | { data?: never; error: string };\n\n/**\n * API Error Response Structure\n */\nexport interface ApiResponseError {\n code: number;\n result: boolean;\n message: string;\n data: null;\n requestId: string;\n}\n\n"],"names":[],"mappings":"AAAA;;CAEC,GAKD;;CAEC,GACD,WAMC"}
|
package/dist/index.d.ts
ADDED
package/dist/index.js
ADDED
@@ -0,0 +1,36 @@
|
|
1
|
+
import { CjSettings } from './cj-settings';
|
2
|
+
import { setCurrentAccessToken } from './sdk/access-token';
|
3
|
+
import { createOrderHook } from './service/create-order.hook';
|
4
|
+
const updateCollection = (collection)=>{
|
5
|
+
if (collection.slug === 'orders') {
|
6
|
+
return {
|
7
|
+
...collection,
|
8
|
+
hooks: {
|
9
|
+
...collection.hooks,
|
10
|
+
afterChange: [
|
11
|
+
...collection.hooks?.afterChange || [],
|
12
|
+
createOrderHook
|
13
|
+
]
|
14
|
+
}
|
15
|
+
};
|
16
|
+
}
|
17
|
+
return collection;
|
18
|
+
};
|
19
|
+
export const cjPlugin = (pluginOptions)=>(config)=>{
|
20
|
+
const updatedCollections = config.collections?.map(updateCollection);
|
21
|
+
setCurrentAccessToken({
|
22
|
+
emailAddress: pluginOptions.cjEmailAddress,
|
23
|
+
password: pluginOptions.cjApiKey,
|
24
|
+
refreshToken: pluginOptions.cjRefreshToken
|
25
|
+
});
|
26
|
+
return {
|
27
|
+
...config,
|
28
|
+
collections: updatedCollections,
|
29
|
+
globals: [
|
30
|
+
...config.globals || [],
|
31
|
+
CjSettings
|
32
|
+
]
|
33
|
+
};
|
34
|
+
};
|
35
|
+
|
36
|
+
//# sourceMappingURL=index.js.map
|
@@ -0,0 +1 @@
|
|
1
|
+
{"version":3,"sources":["../src/index.ts"],"sourcesContent":["import type { CollectionConfig, Config } from 'payload'\n\nimport { CjSettings } from './cj-settings'\nimport { setCurrentAccessToken } from './sdk/access-token'\nimport { createOrderHook } from './service/create-order.hook'\n\ninterface PluginOptions {\n cjApiKey: string\n cjEmailAddress: string\n cjRefreshToken?: string\n}\n\nconst updateCollection = (collection: CollectionConfig) => {\n if (collection.slug === 'orders') {\n return {\n ...collection,\n hooks: {\n ...collection.hooks,\n afterChange: [...(collection.hooks?.afterChange || []), createOrderHook],\n },\n }\n }\n return collection\n}\n\nexport const cjPlugin =\n (pluginOptions: PluginOptions) =>\n (config: Config): Config => {\n const updatedCollections = config.collections?.map(updateCollection)\n\n setCurrentAccessToken({\n emailAddress: pluginOptions.cjEmailAddress,\n password: pluginOptions.cjApiKey,\n refreshToken: pluginOptions.cjRefreshToken,\n })\n\n return {\n ...config,\n collections: updatedCollections,\n globals: [...(config.globals || []), CjSettings],\n }\n }\n"],"names":["CjSettings","setCurrentAccessToken","createOrderHook","updateCollection","collection","slug","hooks","afterChange","cjPlugin","pluginOptions","config","updatedCollections","collections","map","emailAddress","cjEmailAddress","password","cjApiKey","refreshToken","cjRefreshToken","globals"],"mappings":"AAEA,SAASA,UAAU,QAAQ,gBAAe;AAC1C,SAASC,qBAAqB,QAAQ,qBAAoB;AAC1D,SAASC,eAAe,QAAQ,8BAA6B;AAQ7D,MAAMC,mBAAmB,CAACC;IACxB,IAAIA,WAAWC,IAAI,KAAK,UAAU;QAChC,OAAO;YACL,GAAGD,UAAU;YACbE,OAAO;gBACL,GAAGF,WAAWE,KAAK;gBACnBC,aAAa;uBAAKH,WAAWE,KAAK,EAAEC,eAAe,EAAE;oBAAGL;iBAAgB;YAC1E;QACF;IACF;IACA,OAAOE;AACT;AAEA,OAAO,MAAMI,WACX,CAACC,gBACD,CAACC;QACC,MAAMC,qBAAqBD,OAAOE,WAAW,EAAEC,IAAIV;QAEnDF,sBAAsB;YACpBa,cAAcL,cAAcM,cAAc;YAC1CC,UAAUP,cAAcQ,QAAQ;YAChCC,cAAcT,cAAcU,cAAc;QAC5C;QAEA,OAAO;YACL,GAAGT,MAAM;YACTE,aAAaD;YACbS,SAAS;mBAAKV,OAAOU,OAAO,IAAI,EAAE;gBAAGpB;aAAW;QAClD;IACF,EAAC"}
|
@@ -0,0 +1,8 @@
|
|
1
|
+
type Credentials = {
|
2
|
+
emailAddress: string;
|
3
|
+
password: string;
|
4
|
+
refreshToken?: string;
|
5
|
+
};
|
6
|
+
export declare const getCurrentAccessToken: () => Promise<string>;
|
7
|
+
export declare const setCurrentAccessToken: ({ emailAddress, password, refreshToken }: Credentials) => void;
|
8
|
+
export {};
|
@@ -0,0 +1,22 @@
|
|
1
|
+
import * as cjSdk from './cj-sdk';
|
2
|
+
let credentials = null;
|
3
|
+
export const getCurrentAccessToken = async ()=>{
|
4
|
+
if (!credentials?.emailAddress || !credentials?.password) {
|
5
|
+
throw new Error('Email address and password token are required');
|
6
|
+
}
|
7
|
+
const { emailAddress, password, refreshToken } = credentials;
|
8
|
+
let accessToken = (await cjSdk.refreshAccessToken(refreshToken || '')).accessToken;
|
9
|
+
if (!accessToken) {
|
10
|
+
accessToken = (await cjSdk.getAccessToken(emailAddress, password)).accessToken;
|
11
|
+
}
|
12
|
+
return accessToken;
|
13
|
+
};
|
14
|
+
export const setCurrentAccessToken = ({ emailAddress, password, refreshToken })=>{
|
15
|
+
credentials = {
|
16
|
+
emailAddress,
|
17
|
+
password,
|
18
|
+
refreshToken
|
19
|
+
};
|
20
|
+
};
|
21
|
+
|
22
|
+
//# sourceMappingURL=access-token.js.map
|
@@ -0,0 +1 @@
|
|
1
|
+
{"version":3,"sources":["../../src/sdk/access-token.ts"],"sourcesContent":["import * as cjSdk from './cj-sdk'\n\ntype Credentials = {\n emailAddress: string\n password: string\n refreshToken?: string\n}\n\nlet credentials: Credentials | null = null\n\nexport const getCurrentAccessToken = async () => {\n if (!credentials?.emailAddress || !credentials?.password) {\n throw new Error('Email address and password token are required')\n }\n const { emailAddress, password, refreshToken } = credentials\n let accessToken = (await cjSdk.refreshAccessToken(refreshToken || '')).accessToken\n if (!accessToken) {\n accessToken = (await cjSdk.getAccessToken(emailAddress, password)).accessToken\n }\n return accessToken\n}\n\nexport const setCurrentAccessToken = ({ emailAddress, password, refreshToken }: Credentials) => {\n credentials = { emailAddress, password, refreshToken }\n}\n"],"names":["cjSdk","credentials","getCurrentAccessToken","emailAddress","password","Error","refreshToken","accessToken","refreshAccessToken","getAccessToken","setCurrentAccessToken"],"mappings":"AAAA,YAAYA,WAAW,WAAU;AAQjC,IAAIC,cAAkC;AAEtC,OAAO,MAAMC,wBAAwB;IACnC,IAAI,CAACD,aAAaE,gBAAgB,CAACF,aAAaG,UAAU;QACxD,MAAM,IAAIC,MAAM;IAClB;IACA,MAAM,EAAEF,YAAY,EAAEC,QAAQ,EAAEE,YAAY,EAAE,GAAGL;IACjD,IAAIM,cAAc,AAAC,CAAA,MAAMP,MAAMQ,kBAAkB,CAACF,gBAAgB,GAAE,EAAGC,WAAW;IAClF,IAAI,CAACA,aAAa;QAChBA,cAAc,AAAC,CAAA,MAAMP,MAAMS,cAAc,CAACN,cAAcC,SAAQ,EAAGG,WAAW;IAChF;IACA,OAAOA;AACT,EAAC;AAED,OAAO,MAAMG,wBAAwB,CAAC,EAAEP,YAAY,EAAEC,QAAQ,EAAEE,YAAY,EAAe;IACzFL,cAAc;QAAEE;QAAcC;QAAUE;IAAa;AACvD,EAAC"}
|
@@ -0,0 +1,4 @@
|
|
1
|
+
export { getAccessToken, logout, refreshAccessToken } from '../auth';
|
2
|
+
export { confirmOrder, createOrder, deleteOrder, listOrders, queryOrder } from './orders/orders';
|
3
|
+
export { getProductCategory, getProductDetails, getProductList } from './products/products';
|
4
|
+
export { getSettings } from './settings/settings-api';
|
@@ -0,0 +1,6 @@
|
|
1
|
+
export { getAccessToken, logout, refreshAccessToken } from '../auth';
|
2
|
+
export { confirmOrder, createOrder, deleteOrder, listOrders, queryOrder } from './orders/orders';
|
3
|
+
export { getProductCategory, getProductDetails, getProductList } from './products/products';
|
4
|
+
export { getSettings } from './settings/settings-api';
|
5
|
+
|
6
|
+
//# sourceMappingURL=cj-sdk.js.map
|
@@ -0,0 +1 @@
|
|
1
|
+
{"version":3,"sources":["../../src/sdk/cj-sdk.ts"],"sourcesContent":["export { getAccessToken, logout, refreshAccessToken } from '../auth'\nexport { confirmOrder, createOrder, deleteOrder, listOrders, queryOrder } from './orders/orders'\nexport { getProductCategory, getProductDetails, getProductList } from './products/products'\nexport { getSettings } from './settings/settings-api'\n"],"names":["getAccessToken","logout","refreshAccessToken","confirmOrder","createOrder","deleteOrder","listOrders","queryOrder","getProductCategory","getProductDetails","getProductList","getSettings"],"mappings":"AAAA,SAASA,cAAc,EAAEC,MAAM,EAAEC,kBAAkB,QAAQ,UAAS;AACpE,SAASC,YAAY,EAAEC,WAAW,EAAEC,WAAW,EAAEC,UAAU,EAAEC,UAAU,QAAQ,kBAAiB;AAChG,SAASC,kBAAkB,EAAEC,iBAAiB,EAAEC,cAAc,QAAQ,sBAAqB;AAC3F,SAASC,WAAW,QAAQ,0BAAyB"}
|
@@ -0,0 +1,64 @@
|
|
1
|
+
export interface CreateDisputeRequest {
|
2
|
+
businessDisputeId: string;
|
3
|
+
disputeReasonId: number;
|
4
|
+
expectType: number;
|
5
|
+
imageUrl?: string[];
|
6
|
+
messageText: string;
|
7
|
+
orderId: string;
|
8
|
+
productInfoList: {
|
9
|
+
lineItemId: string;
|
10
|
+
price?: number;
|
11
|
+
quantity: number;
|
12
|
+
}[];
|
13
|
+
refundType: number;
|
14
|
+
videoUrl?: string[];
|
15
|
+
}
|
16
|
+
export interface DisputeAPIResponse {
|
17
|
+
code: number;
|
18
|
+
data: any;
|
19
|
+
message: string;
|
20
|
+
redirectUri?: string;
|
21
|
+
requestId?: string;
|
22
|
+
result: boolean;
|
23
|
+
}
|
24
|
+
export interface ConfirmDisputeRequest {
|
25
|
+
orderId: string;
|
26
|
+
productInfoList: {
|
27
|
+
lineItemId: string;
|
28
|
+
price?: number;
|
29
|
+
quantity: number;
|
30
|
+
}[];
|
31
|
+
}
|
32
|
+
export interface ConfirmDisputeResponse {
|
33
|
+
code: number;
|
34
|
+
data: {
|
35
|
+
disputeReasonList: {
|
36
|
+
disputeReasonId: number;
|
37
|
+
reasonName: string;
|
38
|
+
}[];
|
39
|
+
expectResultOptionList: string[];
|
40
|
+
maxAmount: number;
|
41
|
+
maxIossHandTaxAmount: number;
|
42
|
+
maxIossTaxAmount: number;
|
43
|
+
maxPostage: number;
|
44
|
+
maxProductPrice: number;
|
45
|
+
orderId: string;
|
46
|
+
orderNumber: string;
|
47
|
+
productInfoList: {
|
48
|
+
canChoose: boolean;
|
49
|
+
cjImage: string;
|
50
|
+
cjProductId: string;
|
51
|
+
cjProductName: string;
|
52
|
+
cjVariantId: string;
|
53
|
+
lineItemId: string;
|
54
|
+
price: number;
|
55
|
+
quantity: number;
|
56
|
+
sku: string;
|
57
|
+
supplierName: string;
|
58
|
+
}[];
|
59
|
+
};
|
60
|
+
message: string;
|
61
|
+
requestId: string;
|
62
|
+
result: boolean;
|
63
|
+
success: boolean;
|
64
|
+
}
|
@@ -0,0 +1 @@
|
|
1
|
+
{"version":3,"sources":["../../../src/sdk/dispute/dispute-types.ts"],"sourcesContent":["// disputes-types.ts\nexport interface CreateDisputeRequest {\n businessDisputeId: string\n disputeReasonId: number\n expectType: number\n imageUrl?: string[]\n messageText: string\n orderId: string\n productInfoList: {\n lineItemId: string\n price?: number // If necessary\n quantity: number\n }[]\n refundType: number\n videoUrl?: string[]\n}\n\nexport interface DisputeAPIResponse {\n code: number\n data: any // Adjust based on the actual structure\n message: string\n redirectUri?: string\n requestId?: string\n result: boolean\n}\n\n// dispute-types.ts\nexport interface ConfirmDisputeRequest {\n orderId: string\n productInfoList: {\n lineItemId: string\n price?: number // If necessary\n quantity: number\n }[]\n}\n\nexport interface ConfirmDisputeResponse {\n code: number\n data: {\n disputeReasonList: {\n disputeReasonId: number\n reasonName: string\n }[]\n expectResultOptionList: string[]\n maxAmount: number\n maxIossHandTaxAmount: number\n maxIossTaxAmount: number\n maxPostage: number\n maxProductPrice: number\n orderId: string\n orderNumber: string\n productInfoList: {\n canChoose: boolean\n cjImage: string\n cjProductId: string\n cjProductName: string\n cjVariantId: string\n lineItemId: string\n price: number\n quantity: number\n sku: string\n supplierName: string\n }[]\n }\n message: string\n requestId: string\n result: boolean\n success: boolean\n}\n"],"names":[],"mappings":"AAAA,oBAAoB;AAoCpB,WAgCC"}
|
@@ -0,0 +1,4 @@
|
|
1
|
+
import type { APIResponse } from '../../error-types';
|
2
|
+
import type { ConfirmDisputeRequest, ConfirmDisputeResponse, CreateDisputeRequest, DisputeAPIResponse } from './dispute-types.ts';
|
3
|
+
export declare function createDispute(requestData: CreateDisputeRequest): Promise<APIResponse<DisputeAPIResponse>>;
|
4
|
+
export declare function confirmDispute(requestData: ConfirmDisputeRequest): Promise<APIResponse<ConfirmDisputeResponse>>;
|
@@ -0,0 +1,52 @@
|
|
1
|
+
import { cjApiClient } from '../../api-client';
|
2
|
+
import { getCurrentAccessToken } from '../access-token';
|
3
|
+
export async function createDispute(requestData) {
|
4
|
+
try {
|
5
|
+
const accessToken = await getCurrentAccessToken() // Ensure to populate this with a valid token
|
6
|
+
;
|
7
|
+
const response = await cjApiClient.post('disputes/create', requestData, {
|
8
|
+
headers: {
|
9
|
+
'CJ-Access-Token': accessToken
|
10
|
+
}
|
11
|
+
});
|
12
|
+
if (!response.data.result) {
|
13
|
+
return {
|
14
|
+
error: response.data.message || 'Failed to create dispute'
|
15
|
+
};
|
16
|
+
}
|
17
|
+
return {
|
18
|
+
data: response.data
|
19
|
+
};
|
20
|
+
} catch (error) {
|
21
|
+
console.error(`Error creating dispute [${error.code}]: ${error.message}`);
|
22
|
+
return {
|
23
|
+
error: error.message || 'An unknown error occurred'
|
24
|
+
};
|
25
|
+
}
|
26
|
+
}
|
27
|
+
export async function confirmDispute(requestData) {
|
28
|
+
try {
|
29
|
+
const accessToken = await getCurrentAccessToken() // Ensure to populate this with a valid token
|
30
|
+
;
|
31
|
+
const response = await cjApiClient.post('disputes/disputeConfirmInfo', requestData, {
|
32
|
+
headers: {
|
33
|
+
'CJ-Access-Token': accessToken
|
34
|
+
}
|
35
|
+
});
|
36
|
+
if (!response.data.result) {
|
37
|
+
return {
|
38
|
+
error: response.data.message || 'Failed to confirm dispute'
|
39
|
+
};
|
40
|
+
}
|
41
|
+
return {
|
42
|
+
data: response.data
|
43
|
+
};
|
44
|
+
} catch (error) {
|
45
|
+
console.error(`Error confirming dispute [${error.code}]: ${error.message}`);
|
46
|
+
return {
|
47
|
+
error: error.message || 'An unknown error occurred'
|
48
|
+
};
|
49
|
+
}
|
50
|
+
}
|
51
|
+
|
52
|
+
//# sourceMappingURL=dispute.js.map
|
@@ -0,0 +1 @@
|
|
1
|
+
{"version":3,"sources":["../../../src/sdk/dispute/dispute.ts"],"sourcesContent":["import type { APIResponse } from '../../error-types'\nimport type {\n ConfirmDisputeRequest,\n ConfirmDisputeResponse,\n CreateDisputeRequest,\n DisputeAPIResponse,\n} from './dispute-types.ts'\n\nimport { cjApiClient } from '../../api-client'\nimport { getCurrentAccessToken } from '../access-token'\n\nexport async function createDispute(\n requestData: CreateDisputeRequest,\n): Promise<APIResponse<DisputeAPIResponse>> {\n try {\n const accessToken = await getCurrentAccessToken() // Ensure to populate this with a valid token\n const response = await cjApiClient.post<DisputeAPIResponse>('disputes/create', requestData, {\n headers: {\n 'CJ-Access-Token': accessToken,\n },\n })\n\n if (!response.data.result) {\n return {\n error: response.data.message || 'Failed to create dispute',\n }\n }\n\n return { data: response.data }\n } catch (error: any) {\n console.error(`Error creating dispute [${error.code}]: ${error.message}`)\n return { error: error.message || 'An unknown error occurred' }\n }\n}\n\nexport async function confirmDispute(\n requestData: ConfirmDisputeRequest,\n): Promise<APIResponse<ConfirmDisputeResponse>> {\n try {\n const accessToken = await getCurrentAccessToken() // Ensure to populate this with a valid token\n const response = await cjApiClient.post<ConfirmDisputeResponse>(\n 'disputes/disputeConfirmInfo',\n requestData,\n {\n headers: {\n 'CJ-Access-Token': accessToken,\n },\n },\n )\n\n if (!response.data.result) {\n return {\n error: response.data.message || 'Failed to confirm dispute',\n }\n }\n\n return { data: response.data }\n } catch (error: any) {\n console.error(`Error confirming dispute [${error.code}]: ${error.message}`)\n return { error: error.message || 'An unknown error occurred' }\n }\n}\n"],"names":["cjApiClient","getCurrentAccessToken","createDispute","requestData","accessToken","response","post","headers","data","result","error","message","console","code","confirmDispute"],"mappings":"AAQA,SAASA,WAAW,QAAQ,mBAAkB;AAC9C,SAASC,qBAAqB,QAAQ,kBAAiB;AAEvD,OAAO,eAAeC,cACpBC,WAAiC;IAEjC,IAAI;QACF,MAAMC,cAAc,MAAMH,wBAAwB,6CAA6C;;QAC/F,MAAMI,WAAW,MAAML,YAAYM,IAAI,CAAqB,mBAAmBH,aAAa;YAC1FI,SAAS;gBACP,mBAAmBH;YACrB;QACF;QAEA,IAAI,CAACC,SAASG,IAAI,CAACC,MAAM,EAAE;YACzB,OAAO;gBACLC,OAAOL,SAASG,IAAI,CAACG,OAAO,IAAI;YAClC;QACF;QAEA,OAAO;YAAEH,MAAMH,SAASG,IAAI;QAAC;IAC/B,EAAE,OAAOE,OAAY;QACnBE,QAAQF,KAAK,CAAC,CAAC,wBAAwB,EAAEA,MAAMG,IAAI,CAAC,GAAG,EAAEH,MAAMC,OAAO,EAAE;QACxE,OAAO;YAAED,OAAOA,MAAMC,OAAO,IAAI;QAA4B;IAC/D;AACF;AAEA,OAAO,eAAeG,eACpBX,WAAkC;IAElC,IAAI;QACF,MAAMC,cAAc,MAAMH,wBAAwB,6CAA6C;;QAC/F,MAAMI,WAAW,MAAML,YAAYM,IAAI,CACrC,+BACAH,aACA;YACEI,SAAS;gBACP,mBAAmBH;YACrB;QACF;QAGF,IAAI,CAACC,SAASG,IAAI,CAACC,MAAM,EAAE;YACzB,OAAO;gBACLC,OAAOL,SAASG,IAAI,CAACG,OAAO,IAAI;YAClC;QACF;QAEA,OAAO;YAAEH,MAAMH,SAASG,IAAI;QAAC;IAC/B,EAAE,OAAOE,OAAY;QACnBE,QAAQF,KAAK,CAAC,CAAC,0BAA0B,EAAEA,MAAMG,IAAI,CAAC,GAAG,EAAEH,MAAMC,OAAO,EAAE;QAC1E,OAAO;YAAED,OAAOA,MAAMC,OAAO,IAAI;QAA4B;IAC/D;AACF"}
|
@@ -0,0 +1 @@
|
|
1
|
+
{"version":3,"sources":["../../../src/sdk/inventory/inventory-types.ts"],"sourcesContent":["export interface Inventory {\n areaEn: string\n areaId: string\n countryCode: string\n storageNum: number\n vid: string\n}\n"],"names":[],"mappings":"AAAA,WAMC"}
|
@@ -0,0 +1,41 @@
|
|
1
|
+
import { cjApiClient } from '../../api-client';
|
2
|
+
import { getCurrentAccessToken } from '../access-token';
|
3
|
+
export async function getInventoryByVariantId(vid) {
|
4
|
+
if (!vid) {
|
5
|
+
return {
|
6
|
+
error: 'vid 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/stock/queryByVid', {
|
13
|
+
headers: {
|
14
|
+
'CJ-Access-Token': accessToken
|
15
|
+
},
|
16
|
+
params: {
|
17
|
+
vid
|
18
|
+
}
|
19
|
+
});
|
20
|
+
if (!response.data.result) {
|
21
|
+
return {
|
22
|
+
error: response.data.message || 'Failed to fetch inventory'
|
23
|
+
};
|
24
|
+
}
|
25
|
+
if (!response.data.data) {
|
26
|
+
return {
|
27
|
+
error: 'No inventory found'
|
28
|
+
};
|
29
|
+
}
|
30
|
+
return {
|
31
|
+
data: response.data.data
|
32
|
+
};
|
33
|
+
} catch (error) {
|
34
|
+
console.error(`Error fetching inventory by variant ID [${error.code}]: ${error.message}`);
|
35
|
+
return {
|
36
|
+
error: error.message || 'An unknown error occurred'
|
37
|
+
};
|
38
|
+
}
|
39
|
+
}
|
40
|
+
|
41
|
+
//# sourceMappingURL=inventory.js.map
|
@@ -0,0 +1 @@
|
|
1
|
+
{"version":3,"sources":["../../../src/sdk/inventory/inventory.ts"],"sourcesContent":["import type { APIResponse } from '../../error-types'\nimport type { CJApiResponse } from '../../types'\nimport type { Inventory } from './inventory-types.ts'\n\nimport { cjApiClient } from '../../api-client'\nimport { getCurrentAccessToken } from '../access-token'\n\nexport async function getInventoryByVariantId(vid: string): Promise<APIResponse<Inventory[]>> {\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<Inventory[]>>('product/stock/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 inventory',\n }\n }\n\n if (!response.data.data) {\n return { error: 'No inventory found' }\n }\n\n return { data: response.data.data }\n } catch (error: any) {\n console.error(`Error fetching inventory by variant ID [${error.code}]: ${error.message}`)\n return { error: error.message || 'An unknown error occurred' }\n }\n}\n"],"names":["cjApiClient","getCurrentAccessToken","getInventoryByVariantId","vid","error","accessToken","response","get","headers","params","data","result","message","console","code"],"mappings":"AAIA,SAASA,WAAW,QAAQ,mBAAkB;AAC9C,SAASC,qBAAqB,QAAQ,kBAAiB;AAEvD,OAAO,eAAeC,wBAAwBC,GAAW;IACvD,IAAI,CAACA,KAAK;QACR,OAAO;YAAEC,OAAO;QAAwB;IAC1C;IAEA,IAAI;QACF,MAAMC,cAAc,MAAMJ,wBAAwB,8CAA8C;;QAChG,MAAMK,WAAW,MAAMN,YAAYO,GAAG,CAA6B,4BAA4B;YAC7FC,SAAS;gBACP,mBAAmBH;YACrB;YACAI,QAAQ;gBAAEN;YAAI;QAChB;QAEA,IAAI,CAACG,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;YAAqB;QACvC;QAEA,OAAO;YAAEM,MAAMJ,SAASI,IAAI,CAACA,IAAI;QAAC;IACpC,EAAE,OAAON,OAAY;QACnBS,QAAQT,KAAK,CAAC,CAAC,wCAAwC,EAAEA,MAAMU,IAAI,CAAC,GAAG,EAAEV,MAAMQ,OAAO,EAAE;QACxF,OAAO;YAAER,OAAOA,MAAMQ,OAAO,IAAI;QAA4B;IAC/D;AACF"}
|