@yjzf/mcp-server-yjzf 0.2.5 → 0.2.7
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/index.js +20 -9
- package/dist/index.js.map +1 -1
- package/dist/tools/contract/investment_contract.d.ts +8 -0
- package/dist/tools/contract/investment_contract.d.ts.map +1 -0
- package/dist/tools/contract/investment_contract.js +100 -0
- package/dist/tools/contract/investment_contract.js.map +1 -0
- package/dist/tools/contract/lease_sale_contract_export.d.ts +30 -0
- package/dist/tools/contract/lease_sale_contract_export.d.ts.map +1 -0
- package/dist/tools/contract/lease_sale_contract_export.js +171 -0
- package/dist/tools/contract/lease_sale_contract_export.js.map +1 -0
- package/dist/tools/contract/new_house_contract_export.d.ts +14 -0
- package/dist/tools/contract/new_house_contract_export.d.ts.map +1 -0
- package/dist/tools/contract/new_house_contract_export.js +205 -0
- package/dist/tools/contract/new_house_contract_export.js.map +1 -0
- package/dist/tools/data/count_all_statement.d.ts +46 -0
- package/dist/tools/data/count_all_statement.d.ts.map +1 -0
- package/dist/tools/data/count_all_statement.js +322 -0
- package/dist/tools/data/count_all_statement.js.map +1 -0
- package/dist/tools/data/overview_by_c.d.ts +26 -0
- package/dist/tools/data/overview_by_c.d.ts.map +1 -0
- package/dist/tools/data/overview_by_c.js +190 -0
- package/dist/tools/data/overview_by_c.js.map +1 -0
- package/dist/tools/data/statement_query.d.ts +43 -0
- package/dist/tools/data/statement_query.d.ts.map +1 -0
- package/dist/tools/data/statement_query.js +430 -0
- package/dist/tools/data/statement_query.js.map +1 -0
- package/dist/tools/util/branch_select.d.ts +26 -0
- package/dist/tools/util/branch_select.d.ts.map +1 -0
- package/dist/tools/util/branch_select.js +50 -0
- package/dist/tools/util/branch_select.js.map +1 -0
- package/dist/tools/util/date_to_timestamp.d.ts +19 -0
- package/dist/tools/util/date_to_timestamp.d.ts.map +1 -0
- package/dist/tools/util/date_to_timestamp.js +45 -0
- package/dist/tools/util/date_to_timestamp.js.map +1 -0
- package/dist/tools/util/get_current_time.d.ts +13 -0
- package/dist/tools/util/get_current_time.d.ts.map +1 -0
- package/dist/tools/util/get_current_time.js +23 -0
- package/dist/tools/util/get_current_time.js.map +1 -0
- package/dist/tools/util/hello_world.d.ts +20 -0
- package/dist/tools/util/hello_world.d.ts.map +1 -0
- package/dist/tools/util/hello_world.js +47 -0
- package/dist/tools/util/hello_world.js.map +1 -0
- package/dist/utils/async-export.d.ts +37 -0
- package/dist/utils/async-export.d.ts.map +1 -0
- package/dist/utils/async-export.js +73 -0
- package/dist/utils/async-export.js.map +1 -0
- package/dist/utils/cities.d.ts +11 -0
- package/dist/utils/cities.d.ts.map +1 -0
- package/dist/utils/cities.js +22 -0
- package/dist/utils/cities.js.map +1 -0
- package/dist/utils/http.d.ts.map +1 -1
- package/dist/utils/http.js +4 -0
- package/dist/utils/http.js.map +1 -1
- package/package.json +1 -1
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"date_to_timestamp.js","sourceRoot":"","sources":["../../../src/tools/util/date_to_timestamp.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,CAAC,MAAM,QAAQ,CAAC;AAE5B,MAAM,CAAC,MAAM,IAAI,GAAG,mBAAmB,CAAC;AAExC,MAAM,CAAC,MAAM,MAAM,GAAG;IACpB,WAAW,EAAE,kJAAkJ;IAC/J,WAAW,EAAE,CAAC,CAAC,MAAM,CAAC;QACpB,IAAI,EAAE,CAAC,CAAC,MAAM,EAAE;aACb,MAAM,CAAC,CAAC,EAAE,eAAe,CAAC;aAC1B,KAAK,CAAC,SAAS,EAAE,8BAA8B,CAAC;aAChD,QAAQ,CAAC,+BAA+B,CAAC;QAC5C,QAAQ,EAAE,CAAC,CAAC,OAAO,EAAE,CAAC,QAAQ,EAAE;aAC7B,QAAQ,CAAC,sEAAsE,CAAC;KACpF,CAAC;CACH,CAAC;AAEF,MAAM,CAAC,KAAK,UAAU,OAAO,CAAC,IAA0C;IACtE,MAAM,EAAE,IAAI,EAAE,QAAQ,EAAE,GAAG,IAAI,CAAC;IAEhC,iBAAiB;IACjB,MAAM,IAAI,GAAG,QAAQ,CAAC,IAAI,CAAC,SAAS,CAAC,CAAC,EAAE,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC;IAChD,MAAM,KAAK,GAAG,QAAQ,CAAC,IAAI,CAAC,SAAS,CAAC,CAAC,EAAE,CAAC,CAAC,EAAE,EAAE,CAAC,GAAG,CAAC,CAAC,CAAC,WAAW;IACjE,MAAM,GAAG,GAAG,QAAQ,CAAC,IAAI,CAAC,SAAS,CAAC,CAAC,EAAE,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC;IAE/C,qBAAqB;IACrB,gDAAgD;IAChD,IAAI,gBAAwB,CAAC;IAC7B,IAAI,QAAQ,EAAE,CAAC;QACb,uBAAuB;QACvB,gBAAgB,GAAG,IAAI,CAAC,GAAG,CAAC,IAAI,EAAE,KAAK,EAAE,GAAG,EAAE,CAAC,CAAC,GAAG,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,GAAG,CAAC,CAAC;IACtE,CAAC;SAAM,CAAC;QACN,uBAAuB;QACvB,gBAAgB,GAAG,IAAI,CAAC,GAAG,CAAC,IAAI,EAAE,KAAK,EAAE,GAAG,EAAE,CAAC,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,CAAC,CAAC;IAC7D,CAAC;IAED,OAAO;QACL,OAAO,EAAE;YACP;gBACE,IAAI,EAAE,MAAe;gBACrB,IAAI,EAAE,IAAI,CAAC,SAAS,CAAC;oBACnB,IAAI,EAAE,IAAI;oBACV,QAAQ,EAAE,CAAC,CAAC,QAAQ;oBACpB,SAAS,EAAE,gBAAgB;oBAC3B,aAAa,EAAE,IAAI,IAAI,CAAC,gBAAgB,CAAC,CAAC,WAAW,EAAE;iBACxD,EAAE,IAAI,EAAE,CAAC,CAAC;aACZ;SACF;KACF,CAAC;AACJ,CAAC"}
|
|
@@ -0,0 +1,13 @@
|
|
|
1
|
+
import * as z from "zod/v4";
|
|
2
|
+
export declare const name = "get_current_time";
|
|
3
|
+
export declare const schema: {
|
|
4
|
+
description: string;
|
|
5
|
+
inputSchema: z.ZodObject<{}, z.core.$strip>;
|
|
6
|
+
};
|
|
7
|
+
export declare function handler(): Promise<{
|
|
8
|
+
content: {
|
|
9
|
+
type: "text";
|
|
10
|
+
text: string;
|
|
11
|
+
}[];
|
|
12
|
+
}>;
|
|
13
|
+
//# sourceMappingURL=get_current_time.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"get_current_time.d.ts","sourceRoot":"","sources":["../../../src/tools/util/get_current_time.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,CAAC,MAAM,QAAQ,CAAC;AAE5B,eAAO,MAAM,IAAI,qBAAqB,CAAC;AAEvC,eAAO,MAAM,MAAM;;;CAGlB,CAAC;AAEF,wBAAsB,OAAO;;;;;GAgB5B"}
|
|
@@ -0,0 +1,23 @@
|
|
|
1
|
+
import * as z from "zod/v4";
|
|
2
|
+
export const name = "get_current_time";
|
|
3
|
+
export const schema = {
|
|
4
|
+
description: "获取当前时间的毫秒时间戳和格式化时间 当需要知晓当前日期时间时必须先调用此工具",
|
|
5
|
+
inputSchema: z.object({}),
|
|
6
|
+
};
|
|
7
|
+
export async function handler() {
|
|
8
|
+
const now = new Date();
|
|
9
|
+
const timestamp = now.getTime();
|
|
10
|
+
const formattedTime = now.toISOString();
|
|
11
|
+
return {
|
|
12
|
+
content: [
|
|
13
|
+
{
|
|
14
|
+
type: "text",
|
|
15
|
+
text: JSON.stringify({
|
|
16
|
+
timestamp: timestamp,
|
|
17
|
+
formattedTime: formattedTime,
|
|
18
|
+
}, null, 2),
|
|
19
|
+
},
|
|
20
|
+
],
|
|
21
|
+
};
|
|
22
|
+
}
|
|
23
|
+
//# sourceMappingURL=get_current_time.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"get_current_time.js","sourceRoot":"","sources":["../../../src/tools/util/get_current_time.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,CAAC,MAAM,QAAQ,CAAC;AAE5B,MAAM,CAAC,MAAM,IAAI,GAAG,kBAAkB,CAAC;AAEvC,MAAM,CAAC,MAAM,MAAM,GAAG;IACpB,WAAW,EAAE,yCAAyC;IACtD,WAAW,EAAE,CAAC,CAAC,MAAM,CAAC,EAAE,CAAC;CAC1B,CAAC;AAEF,MAAM,CAAC,KAAK,UAAU,OAAO;IAC3B,MAAM,GAAG,GAAG,IAAI,IAAI,EAAE,CAAC;IACvB,MAAM,SAAS,GAAG,GAAG,CAAC,OAAO,EAAE,CAAC;IAChC,MAAM,aAAa,GAAG,GAAG,CAAC,WAAW,EAAE,CAAC;IAExC,OAAO;QACL,OAAO,EAAE;YACP;gBACE,IAAI,EAAE,MAAe;gBACrB,IAAI,EAAE,IAAI,CAAC,SAAS,CAAC;oBACnB,SAAS,EAAE,SAAS;oBACpB,aAAa,EAAE,aAAa;iBAC7B,EAAE,IAAI,EAAE,CAAC,CAAC;aACZ;SACF;KACF,CAAC;AACJ,CAAC"}
|
|
@@ -0,0 +1,20 @@
|
|
|
1
|
+
import * as z from "zod/v4";
|
|
2
|
+
export declare const name = "hello_world";
|
|
3
|
+
export declare const schema: {
|
|
4
|
+
description: string;
|
|
5
|
+
inputSchema: z.ZodObject<{}, z.core.$strip>;
|
|
6
|
+
};
|
|
7
|
+
export declare function handler(): Promise<{
|
|
8
|
+
content: {
|
|
9
|
+
type: "text";
|
|
10
|
+
text: string;
|
|
11
|
+
}[];
|
|
12
|
+
isError: boolean;
|
|
13
|
+
} | {
|
|
14
|
+
content: {
|
|
15
|
+
type: "text";
|
|
16
|
+
text: string;
|
|
17
|
+
}[];
|
|
18
|
+
isError?: undefined;
|
|
19
|
+
}>;
|
|
20
|
+
//# sourceMappingURL=hello_world.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"hello_world.d.ts","sourceRoot":"","sources":["../../../src/tools/util/hello_world.ts"],"names":[],"mappings":"AAEA,OAAO,KAAK,CAAC,MAAM,QAAQ,CAAC;AAI5B,eAAO,MAAM,IAAI,gBAAgB,CAAC;AAElC,eAAO,MAAM,MAAM;;;CAGlB,CAAC;AAEF,wBAAsB,OAAO;;;;;;;;;;;;GAyC5B"}
|
|
@@ -0,0 +1,47 @@
|
|
|
1
|
+
import * as fs from "node:fs";
|
|
2
|
+
import * as path from "node:path";
|
|
3
|
+
import * as z from "zod/v4";
|
|
4
|
+
import { getDataDir, getGatewayBaseUrl } from "../../utils/env.js";
|
|
5
|
+
import { buildGatewayHeaders } from "../../utils/http.js";
|
|
6
|
+
export const name = "hello_world";
|
|
7
|
+
export const schema = {
|
|
8
|
+
description: "Say hello world to YJZF",
|
|
9
|
+
inputSchema: z.object({}),
|
|
10
|
+
};
|
|
11
|
+
export async function handler() {
|
|
12
|
+
const headers = buildGatewayHeaders();
|
|
13
|
+
// HTTP GET request
|
|
14
|
+
const response = await fetch(`${getGatewayBaseUrl()}/hello_world`, {
|
|
15
|
+
method: "GET",
|
|
16
|
+
headers,
|
|
17
|
+
});
|
|
18
|
+
if (!response.ok) {
|
|
19
|
+
return {
|
|
20
|
+
content: [
|
|
21
|
+
{
|
|
22
|
+
type: "text",
|
|
23
|
+
text: `Request failed with status ${response.status}: ${response.statusText}`,
|
|
24
|
+
},
|
|
25
|
+
],
|
|
26
|
+
isError: true,
|
|
27
|
+
};
|
|
28
|
+
}
|
|
29
|
+
const body = await response.text();
|
|
30
|
+
// Ensure data directory exists
|
|
31
|
+
const dataDir = getDataDir();
|
|
32
|
+
fs.mkdirSync(dataDir, { recursive: true });
|
|
33
|
+
// Write response to file with datetime prefix
|
|
34
|
+
const now = new Date();
|
|
35
|
+
const datetimePrefix = now.toISOString().replace(/[:.]/g, "-").slice(0, 19);
|
|
36
|
+
const filePath = path.join(dataDir, `${datetimePrefix}-hello_world-response.txt`);
|
|
37
|
+
fs.writeFileSync(filePath, body, "utf-8");
|
|
38
|
+
return {
|
|
39
|
+
content: [
|
|
40
|
+
{
|
|
41
|
+
type: "text",
|
|
42
|
+
text: `Response saved to ${filePath}\n\n${body}`,
|
|
43
|
+
},
|
|
44
|
+
],
|
|
45
|
+
};
|
|
46
|
+
}
|
|
47
|
+
//# sourceMappingURL=hello_world.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"hello_world.js","sourceRoot":"","sources":["../../../src/tools/util/hello_world.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,MAAM,SAAS,CAAC;AAC9B,OAAO,KAAK,IAAI,MAAM,WAAW,CAAC;AAClC,OAAO,KAAK,CAAC,MAAM,QAAQ,CAAC;AAC5B,OAAO,EAAE,UAAU,EAAE,iBAAiB,EAAE,MAAM,oBAAoB,CAAC;AACnE,OAAO,EAAE,mBAAmB,EAAE,MAAM,qBAAqB,CAAC;AAE1D,MAAM,CAAC,MAAM,IAAI,GAAG,aAAa,CAAC;AAElC,MAAM,CAAC,MAAM,MAAM,GAAG;IACpB,WAAW,EAAE,yBAAyB;IACtC,WAAW,EAAE,CAAC,CAAC,MAAM,CAAC,EAAE,CAAC;CAC1B,CAAC;AAEF,MAAM,CAAC,KAAK,UAAU,OAAO;IAC3B,MAAM,OAAO,GAAG,mBAAmB,EAAE,CAAC;IAEtC,mBAAmB;IACnB,MAAM,QAAQ,GAAG,MAAM,KAAK,CAAC,GAAG,iBAAiB,EAAE,cAAc,EAAE;QACjE,MAAM,EAAE,KAAK;QACb,OAAO;KACR,CAAC,CAAC;IAEH,IAAI,CAAC,QAAQ,CAAC,EAAE,EAAE,CAAC;QACjB,OAAO;YACL,OAAO,EAAE;gBACP;oBACE,IAAI,EAAE,MAAe;oBACrB,IAAI,EAAE,8BAA8B,QAAQ,CAAC,MAAM,KAAK,QAAQ,CAAC,UAAU,EAAE;iBAC9E;aACF;YACD,OAAO,EAAE,IAAI;SACd,CAAC;IACJ,CAAC;IAED,MAAM,IAAI,GAAG,MAAM,QAAQ,CAAC,IAAI,EAAE,CAAC;IAEnC,+BAA+B;IAC/B,MAAM,OAAO,GAAG,UAAU,EAAE,CAAC;IAC7B,EAAE,CAAC,SAAS,CAAC,OAAO,EAAE,EAAE,SAAS,EAAE,IAAI,EAAE,CAAC,CAAC;IAE3C,8CAA8C;IAC9C,MAAM,GAAG,GAAG,IAAI,IAAI,EAAE,CAAC;IACvB,MAAM,cAAc,GAAG,GAAG,CAAC,WAAW,EAAE,CAAC,OAAO,CAAC,OAAO,EAAE,GAAG,CAAC,CAAC,KAAK,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC;IAC5E,MAAM,QAAQ,GAAG,IAAI,CAAC,IAAI,CAAC,OAAO,EAAE,GAAG,cAAc,2BAA2B,CAAC,CAAC;IAClF,EAAE,CAAC,aAAa,CAAC,QAAQ,EAAE,IAAI,EAAE,OAAO,CAAC,CAAC;IAE1C,OAAO;QACL,OAAO,EAAE;YACP;gBACE,IAAI,EAAE,MAAe;gBACrB,IAAI,EAAE,qBAAqB,QAAQ,OAAO,IAAI,EAAE;aACjD;SACF;KACF,CAAC;AACJ,CAAC"}
|
|
@@ -0,0 +1,37 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* 单次轮询返回的状态
|
|
3
|
+
*/
|
|
4
|
+
export type PollStatus = {
|
|
5
|
+
state: "pending";
|
|
6
|
+
} | {
|
|
7
|
+
state: "success";
|
|
8
|
+
downloadUrl: string;
|
|
9
|
+
} | {
|
|
10
|
+
state: "failed";
|
|
11
|
+
reason?: string;
|
|
12
|
+
};
|
|
13
|
+
/**
|
|
14
|
+
* 轮询配置
|
|
15
|
+
*/
|
|
16
|
+
export interface PollAsyncExportConfig {
|
|
17
|
+
/** 每次轮询调用,由各工具自行实现状态判定逻辑 */
|
|
18
|
+
checkStatus: () => Promise<PollStatus>;
|
|
19
|
+
/** 轮询间隔序列(ms),超出序列长度后重复最后一个值 */
|
|
20
|
+
intervals?: number[];
|
|
21
|
+
/** 最大等待时间(ms),默认 600000 (10分钟) */
|
|
22
|
+
maxWait?: number;
|
|
23
|
+
/** 连续错误次数上限,默认 3 */
|
|
24
|
+
maxConsecutiveErrors?: number;
|
|
25
|
+
/** 日志标签 */
|
|
26
|
+
logTag?: string;
|
|
27
|
+
}
|
|
28
|
+
/**
|
|
29
|
+
* 轮询异步导出状态,成功时返回 downloadUrl。
|
|
30
|
+
* 失败或超时时 throw Error。
|
|
31
|
+
*/
|
|
32
|
+
export declare function pollAsyncExport(config: PollAsyncExportConfig): Promise<string>;
|
|
33
|
+
/**
|
|
34
|
+
* 从 URL 下载文件到 DATA_DIR,返回本地文件绝对路径。
|
|
35
|
+
*/
|
|
36
|
+
export declare function downloadToDataDir(url: string, fileName: string): Promise<string>;
|
|
37
|
+
//# sourceMappingURL=async-export.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"async-export.d.ts","sourceRoot":"","sources":["../../src/utils/async-export.ts"],"names":[],"mappings":"AAQA;;GAEG;AACH,MAAM,MAAM,UAAU,GAChB;IAAE,KAAK,EAAE,SAAS,CAAA;CAAE,GACpB;IAAE,KAAK,EAAE,SAAS,CAAC;IAAC,WAAW,EAAE,MAAM,CAAA;CAAE,GACzC;IAAE,KAAK,EAAE,QAAQ,CAAC;IAAC,MAAM,CAAC,EAAE,MAAM,CAAA;CAAE,CAAC;AAE3C;;GAEG;AACH,MAAM,WAAW,qBAAqB;IAClC,4BAA4B;IAC5B,WAAW,EAAE,MAAM,OAAO,CAAC,UAAU,CAAC,CAAC;IACvC,gCAAgC;IAChC,SAAS,CAAC,EAAE,MAAM,EAAE,CAAC;IACrB,kCAAkC;IAClC,OAAO,CAAC,EAAE,MAAM,CAAC;IACjB,oBAAoB;IACpB,oBAAoB,CAAC,EAAE,MAAM,CAAC;IAC9B,WAAW;IACX,MAAM,CAAC,EAAE,MAAM,CAAC;CACnB;AAkBD;;;GAGG;AACH,wBAAsB,eAAe,CAAC,MAAM,EAAE,qBAAqB,GAAG,OAAO,CAAC,MAAM,CAAC,CA4CpF;AAED;;GAEG;AACH,wBAAsB,iBAAiB,CAAC,GAAG,EAAE,MAAM,EAAE,QAAQ,EAAE,MAAM,GAAG,OAAO,CAAC,MAAM,CAAC,CAWtF"}
|
|
@@ -0,0 +1,73 @@
|
|
|
1
|
+
import * as fs from "node:fs";
|
|
2
|
+
import * as path from "node:path";
|
|
3
|
+
import { getDataDir } from "./env.js";
|
|
4
|
+
// ---------------------------------------------------------------------------
|
|
5
|
+
// 默认配置
|
|
6
|
+
// ---------------------------------------------------------------------------
|
|
7
|
+
const DEFAULT_INTERVALS = [5000, 5000, 10000, 10000, 15000, 15000, 20000, 20000, 30000];
|
|
8
|
+
const DEFAULT_MAX_WAIT = 600_000; // 10分钟
|
|
9
|
+
const DEFAULT_MAX_CONSECUTIVE_ERRORS = 3;
|
|
10
|
+
// ---------------------------------------------------------------------------
|
|
11
|
+
// 公共方法
|
|
12
|
+
// ---------------------------------------------------------------------------
|
|
13
|
+
function sleep(ms) {
|
|
14
|
+
return new Promise(resolve => setTimeout(resolve, ms));
|
|
15
|
+
}
|
|
16
|
+
/**
|
|
17
|
+
* 轮询异步导出状态,成功时返回 downloadUrl。
|
|
18
|
+
* 失败或超时时 throw Error。
|
|
19
|
+
*/
|
|
20
|
+
export async function pollAsyncExport(config) {
|
|
21
|
+
const intervals = config.intervals ?? DEFAULT_INTERVALS;
|
|
22
|
+
const maxWait = config.maxWait ?? DEFAULT_MAX_WAIT;
|
|
23
|
+
const maxConsecutiveErrors = config.maxConsecutiveErrors ?? DEFAULT_MAX_CONSECUTIVE_ERRORS;
|
|
24
|
+
const logTag = config.logTag ?? "pollAsyncExport";
|
|
25
|
+
let totalWaited = 0;
|
|
26
|
+
let consecutiveErrors = 0;
|
|
27
|
+
for (let i = 0; totalWaited < maxWait; i++) {
|
|
28
|
+
const interval = intervals[Math.min(i, intervals.length - 1)];
|
|
29
|
+
await sleep(interval);
|
|
30
|
+
totalWaited += interval;
|
|
31
|
+
try {
|
|
32
|
+
const status = await config.checkStatus();
|
|
33
|
+
consecutiveErrors = 0;
|
|
34
|
+
if (status.state === "success") {
|
|
35
|
+
return status.downloadUrl;
|
|
36
|
+
}
|
|
37
|
+
if (status.state === "failed") {
|
|
38
|
+
throw new Error(status.reason ?? "异步导出失败");
|
|
39
|
+
}
|
|
40
|
+
// state === "pending",继续轮询
|
|
41
|
+
console.error(`[${logTag}] 尚未完成,已等待 ${totalWaited / 1000}s`);
|
|
42
|
+
}
|
|
43
|
+
catch (e) {
|
|
44
|
+
const msg = e instanceof Error ? e.message : String(e);
|
|
45
|
+
// 如果是业务层明确失败(非网络错误),直接抛出
|
|
46
|
+
if (msg.includes("导出失败") || msg.includes("执行失败")) {
|
|
47
|
+
throw e;
|
|
48
|
+
}
|
|
49
|
+
consecutiveErrors++;
|
|
50
|
+
if (consecutiveErrors >= maxConsecutiveErrors) {
|
|
51
|
+
throw new Error(`轮询连续失败${maxConsecutiveErrors}次: ${msg}`);
|
|
52
|
+
}
|
|
53
|
+
console.error(`[${logTag}] 请求异常(${consecutiveErrors}/${maxConsecutiveErrors}): ${msg}`);
|
|
54
|
+
}
|
|
55
|
+
}
|
|
56
|
+
throw new Error(`异步导出超时(${maxWait / 1000}s),请到 ERP"我的导出"页面查看`);
|
|
57
|
+
}
|
|
58
|
+
/**
|
|
59
|
+
* 从 URL 下载文件到 DATA_DIR,返回本地文件绝对路径。
|
|
60
|
+
*/
|
|
61
|
+
export async function downloadToDataDir(url, fileName) {
|
|
62
|
+
const resp = await fetch(url);
|
|
63
|
+
if (!resp.ok) {
|
|
64
|
+
throw new Error(`下载文件失败: ${resp.status} ${resp.statusText}`);
|
|
65
|
+
}
|
|
66
|
+
const buffer = Buffer.from(await resp.arrayBuffer());
|
|
67
|
+
const dataDir = getDataDir();
|
|
68
|
+
fs.mkdirSync(dataDir, { recursive: true });
|
|
69
|
+
const filePath = path.join(dataDir, fileName);
|
|
70
|
+
fs.writeFileSync(filePath, buffer);
|
|
71
|
+
return filePath;
|
|
72
|
+
}
|
|
73
|
+
//# sourceMappingURL=async-export.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"async-export.js","sourceRoot":"","sources":["../../src/utils/async-export.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,11 @@
|
|
|
1
|
+
export interface CityElement {
|
|
2
|
+
branchId: string;
|
|
3
|
+
cityCode: string;
|
|
4
|
+
branchName: string;
|
|
5
|
+
}
|
|
6
|
+
/**
|
|
7
|
+
* 从 Gateway 动态获取直营城市列表
|
|
8
|
+
* Gateway 端通过 ERP API 过滤: businessType=0(直营), mainType=2(二手), isEnabled=1(启用)
|
|
9
|
+
*/
|
|
10
|
+
export declare function fetchZyCities(): Promise<CityElement[]>;
|
|
11
|
+
//# sourceMappingURL=cities.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"cities.d.ts","sourceRoot":"","sources":["../../src/utils/cities.ts"],"names":[],"mappings":"AAIA,MAAM,WAAW,WAAW;IAC1B,QAAQ,EAAE,MAAM,CAAC;IACjB,QAAQ,EAAE,MAAM,CAAC;IACjB,UAAU,EAAE,MAAM,CAAC;CACpB;AAED;;;GAGG;AACH,wBAAsB,aAAa,IAAI,OAAO,CAAC,WAAW,EAAE,CAAC,CAgB5D"}
|
|
@@ -0,0 +1,22 @@
|
|
|
1
|
+
import { buildGatewayHeaders } from "./http.js";
|
|
2
|
+
import { getGatewayBaseUrl } from "./env.js";
|
|
3
|
+
import { debug } from "./debug.js";
|
|
4
|
+
/**
|
|
5
|
+
* 从 Gateway 动态获取直营城市列表
|
|
6
|
+
* Gateway 端通过 ERP API 过滤: businessType=0(直营), mainType=2(二手), isEnabled=1(启用)
|
|
7
|
+
*/
|
|
8
|
+
export async function fetchZyCities() {
|
|
9
|
+
const headers = buildGatewayHeaders();
|
|
10
|
+
const url = `${getGatewayBaseUrl()}/statement/branches?preset=直营`;
|
|
11
|
+
debug("fetchZyCities url", url);
|
|
12
|
+
const resp = await fetch(url, { method: "GET", headers });
|
|
13
|
+
if (!resp.ok) {
|
|
14
|
+
throw new Error(`获取直营城市列表失败: ${resp.status} ${resp.statusText}`);
|
|
15
|
+
}
|
|
16
|
+
const data = await resp.json();
|
|
17
|
+
if (!data.succeed) {
|
|
18
|
+
throw new Error(`获取直营城市列表失败: ${data.msg}`);
|
|
19
|
+
}
|
|
20
|
+
return data.data;
|
|
21
|
+
}
|
|
22
|
+
//# sourceMappingURL=cities.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"cities.js","sourceRoot":"","sources":["../../src/utils/cities.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,mBAAmB,EAAE,MAAM,WAAW,CAAC;AAChD,OAAO,EAAE,iBAAiB,EAAE,MAAM,UAAU,CAAC;AAC7C,OAAO,EAAE,KAAK,EAAE,MAAM,YAAY,CAAC;AAQnC;;;GAGG;AACH,MAAM,CAAC,KAAK,UAAU,aAAa;IACjC,MAAM,OAAO,GAAG,mBAAmB,EAAE,CAAC;IACtC,MAAM,GAAG,GAAG,GAAG,iBAAiB,EAAE,+BAA+B,CAAC;IAClE,KAAK,CAAC,mBAAmB,EAAE,GAAG,CAAC,CAAC;IAEhC,MAAM,IAAI,GAAG,MAAM,KAAK,CAAC,GAAG,EAAE,EAAE,MAAM,EAAE,KAAK,EAAE,OAAO,EAAE,CAAC,CAAC;IAC1D,IAAI,CAAC,IAAI,CAAC,EAAE,EAAE,CAAC;QACb,MAAM,IAAI,KAAK,CAAC,eAAe,IAAI,CAAC,MAAM,IAAI,IAAI,CAAC,UAAU,EAAE,CAAC,CAAC;IACnE,CAAC;IAED,MAAM,IAAI,GAAG,MAAM,IAAI,CAAC,IAAI,EAA6D,CAAC;IAC1F,IAAI,CAAC,IAAI,CAAC,OAAO,EAAE,CAAC;QAClB,MAAM,IAAI,KAAK,CAAC,eAAe,IAAI,CAAC,GAAG,EAAE,CAAC,CAAC;IAC7C,CAAC;IAED,OAAO,IAAI,CAAC,IAAI,CAAC;AACnB,CAAC"}
|
package/dist/utils/http.d.ts.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"http.d.ts","sourceRoot":"","sources":["../../src/utils/http.ts"],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"http.d.ts","sourceRoot":"","sources":["../../src/utils/http.ts"],"names":[],"mappings":"AAUA,UAAU,WAAW;IACnB,IAAI,EAAE,MAAM,CAAC;IACb,IAAI,EAAE,MAAM,CAAC;CACd;AAED,MAAM,WAAW,UAAU;IACzB,CAAC,CAAC,EAAE,MAAM,GAAG,OAAO,CAAC;IACrB,OAAO,EAAE,WAAW,EAAE,CAAC;IACvB,OAAO,CAAC,EAAE,OAAO,CAAC;CACnB;AAMD,wBAAgB,mBAAmB,IAAI,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,CAa5D;AAMD,wBAAgB,iBAAiB,CAAC,OAAO,EAAE,MAAM,GAAG,UAAU,CAK7D;AAED,wBAAgB,mBAAmB,CAAC,OAAO,EAAE,MAAM,GAAG,UAAU,CAI/D"}
|
package/dist/utils/http.js
CHANGED
|
@@ -1,4 +1,7 @@
|
|
|
1
|
+
import { createRequire } from "node:module";
|
|
1
2
|
import { getYjzfAccessToken } from "./env.js";
|
|
3
|
+
const require = createRequire(import.meta.url);
|
|
4
|
+
const { version } = require("../../package.json");
|
|
2
5
|
// ---------------------------------------------------------------------------
|
|
3
6
|
// Gateway 请求头
|
|
4
7
|
// ---------------------------------------------------------------------------
|
|
@@ -6,6 +9,7 @@ export function buildGatewayHeaders() {
|
|
|
6
9
|
const headers = {
|
|
7
10
|
Accept: "application/json",
|
|
8
11
|
"Content-Type": "application/json",
|
|
12
|
+
"X-MCP-Version": version,
|
|
9
13
|
};
|
|
10
14
|
const yjzfToken = getYjzfAccessToken();
|
|
11
15
|
if (yjzfToken) {
|
package/dist/utils/http.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"http.js","sourceRoot":"","sources":["../../src/utils/http.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,kBAAkB,EAAE,MAAM,UAAU,CAAC;
|
|
1
|
+
{"version":3,"file":"http.js","sourceRoot":"","sources":["../../src/utils/http.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,aAAa,EAAE,MAAM,aAAa,CAAC;AAC5C,OAAO,EAAE,kBAAkB,EAAE,MAAM,UAAU,CAAC;AAE9C,MAAM,OAAO,GAAG,aAAa,CAAC,MAAM,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC;AAC/C,MAAM,EAAE,OAAO,EAAE,GAAG,OAAO,CAAC,oBAAoB,CAAC,CAAC;AAiBlD,8EAA8E;AAC9E,cAAc;AACd,8EAA8E;AAE9E,MAAM,UAAU,mBAAmB;IACjC,MAAM,OAAO,GAA2B;QACtC,MAAM,EAAE,kBAAkB;QAC1B,cAAc,EAAE,kBAAkB;QAClC,eAAe,EAAE,OAAO;KACzB,CAAC;IAEF,MAAM,SAAS,GAAG,kBAAkB,EAAE,CAAC;IACvC,IAAI,SAAS,EAAE,CAAC;QACd,OAAO,CAAC,cAAc,CAAC,GAAG,SAAS,CAAC;IACtC,CAAC;IAED,OAAO,OAAO,CAAC;AACjB,CAAC;AAED,8EAA8E;AAC9E,QAAQ;AACR,8EAA8E;AAE9E,MAAM,UAAU,iBAAiB,CAAC,OAAe;IAC/C,OAAO;QACL,OAAO,EAAE,CAAC,EAAE,IAAI,EAAE,MAAe,EAAE,IAAI,EAAE,OAAO,EAAE,CAAC;QACnD,OAAO,EAAE,IAAI;KACd,CAAC;AACJ,CAAC;AAED,MAAM,UAAU,mBAAmB,CAAC,OAAe;IACjD,OAAO;QACL,OAAO,EAAE,CAAC,EAAE,IAAI,EAAE,MAAe,EAAE,IAAI,EAAE,OAAO,EAAE,CAAC;KACpD,CAAC;AACJ,CAAC"}
|