@harrylabsj/kiwi 0.7.16 → 0.7.18
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/agent/merchant/merchant-tools.js +45 -11
- package/dist/agent/merchant/merchant-tools.js.map +1 -1
- package/dist/buyer-core/merchant-index.js +8 -2
- package/dist/buyer-core/merchant-index.js.map +1 -1
- package/dist/buyer-core/service.d.ts +5 -0
- package/dist/buyer-core/service.js.map +1 -1
- package/dist/cli.d.ts +4 -0
- package/dist/cli.js +310 -12
- package/dist/cli.js.map +1 -1
- package/dist/config/profile.d.ts +16 -0
- package/dist/config/profile.js +31 -0
- package/dist/config/profile.js.map +1 -1
- package/dist/product-cli.d.ts +1 -1
- package/dist/product-cli.js +15 -3
- package/dist/product-cli.js.map +1 -1
- package/dist/product-init.d.ts +19 -0
- package/dist/product-init.js +50 -2
- package/dist/product-init.js.map +1 -1
- package/dist/product-setup-public.d.ts +51 -0
- package/dist/product-setup-public.js +165 -0
- package/dist/product-setup-public.js.map +1 -0
- package/package.json +1 -1
package/dist/product-init.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"product-init.js","sourceRoot":"","sources":["../src/product-init.ts"],"names":[],"mappings":";AACA;;;;;;;;;;;;;;GAcG;AAEH;;;;;;;;;;;;;;GAcG;AAEH,OAAO,EAAE,SAAS,EAAE,MAAM,oBAAoB,CAAC;AAC/C,OAAO,EAAE,WAAW,EAAE,MAAM,aAAa,CAAC;AAC1C,OAAO,EAAE,UAAU,EAAE,aAAa,EAAE,MAAM,SAAS,CAAC;
|
|
1
|
+
{"version":3,"file":"product-init.js","sourceRoot":"","sources":["../src/product-init.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,51 @@
|
|
|
1
|
+
/** setup-public 类型化错误(fail-closed)。 */
|
|
2
|
+
export declare class SetupPublicError extends Error {
|
|
3
|
+
code: string;
|
|
4
|
+
constructor(code: string, message: string);
|
|
5
|
+
}
|
|
6
|
+
/** 从 `KIWI_A2A_PUBLIC_URL`(https://<domain>)提取公网域名;无效返回 null。 */
|
|
7
|
+
export declare function extractPublicDomain(publicUrl: string | undefined): string | null;
|
|
8
|
+
/** 校验并归一化公网域名(无 scheme/path/port/userinfo)。 */
|
|
9
|
+
export declare function validatePublicDomain(domain: string): string;
|
|
10
|
+
/** 生成 Caddy 反代配置(把 `<domain>` 转发到本机 A2A 节点)。 */
|
|
11
|
+
export declare function buildCaddyfile(domain: string, port: number): string;
|
|
12
|
+
/** 检测本机公网 IP;不可达/失败返回 null(降级为手动确认,不 crash)。 */
|
|
13
|
+
export declare function detectPublicIp(fetchImpl?: typeof fetch): Promise<string | null>;
|
|
14
|
+
export interface DnsCheckResult {
|
|
15
|
+
status: "ok" | "mismatch" | "unresolved" | "skipped";
|
|
16
|
+
resolved: string | null;
|
|
17
|
+
expected: string | null;
|
|
18
|
+
}
|
|
19
|
+
/** 解析域名 A 记录并对比期望 IP(服务器公网 IP)。 */
|
|
20
|
+
export declare function checkDomainDns(domain: string, expectedIp: string | null, lookupImpl?: (hostname: string) => Promise<string | null>): Promise<DnsCheckResult>;
|
|
21
|
+
export interface WellKnownCheck {
|
|
22
|
+
url: string;
|
|
23
|
+
httpStatus: number | null;
|
|
24
|
+
}
|
|
25
|
+
/** `--check`:验证 `https://<domain>/.well-known/agent-card.json` 可达。 */
|
|
26
|
+
export declare function verifyWellKnown(domain: string, fetchImpl?: typeof fetch): Promise<WellKnownCheck>;
|
|
27
|
+
export interface SetupPublicOptions {
|
|
28
|
+
domain: string;
|
|
29
|
+
port: number;
|
|
30
|
+
caddyfilePath: string;
|
|
31
|
+
merchantAgentId: string;
|
|
32
|
+
profilePath?: string;
|
|
33
|
+
checkNow?: boolean;
|
|
34
|
+
publicIpOverride?: string | null;
|
|
35
|
+
fetchImpl?: typeof fetch;
|
|
36
|
+
lookupImpl?: (hostname: string) => Promise<string | null>;
|
|
37
|
+
writeFileImpl?: (path: string, content: string) => Promise<void>;
|
|
38
|
+
}
|
|
39
|
+
export interface SetupPublicReport {
|
|
40
|
+
merchantAgentId: string;
|
|
41
|
+
domain: string;
|
|
42
|
+
port: number;
|
|
43
|
+
publicIp: string | null;
|
|
44
|
+
dns: DnsCheckResult;
|
|
45
|
+
caddyfilePath: string;
|
|
46
|
+
caddyfile: string;
|
|
47
|
+
check: WellKnownCheck | null;
|
|
48
|
+
instructions: string[];
|
|
49
|
+
}
|
|
50
|
+
/** 编排 setup-public:检测 IP → DNS 检查 → 生成/写 Caddyfile → 可选验证。 */
|
|
51
|
+
export declare function runMerchantSetupPublic(opts: SetupPublicOptions): Promise<SetupPublicReport>;
|
|
@@ -0,0 +1,165 @@
|
|
|
1
|
+
/*
|
|
2
|
+
* Copyright 2026 Harrylabs
|
|
3
|
+
*
|
|
4
|
+
* Licensed under the Apache License, Version 2.0 (the "License");
|
|
5
|
+
* you may not use this file except in compliance with the License.
|
|
6
|
+
* You may obtain a copy of the License at
|
|
7
|
+
*
|
|
8
|
+
* http://www.apache.org/licenses/LICENSE-2.0
|
|
9
|
+
*
|
|
10
|
+
* Unless required by applicable law or agreed to in writing, software
|
|
11
|
+
* distributed under the License is distributed on an "AS IS" BASIS,
|
|
12
|
+
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
|
|
13
|
+
* See the License for the specific language governing permissions and
|
|
14
|
+
* limitations under the License.
|
|
15
|
+
*/
|
|
16
|
+
/**
|
|
17
|
+
* `kiwi merchant setup-public`(产品层 D3)——公网 A2A 暴露引导。
|
|
18
|
+
*
|
|
19
|
+
* well-known 文件(`/.well-known/agent-card.json`、`/.well-known/ucp`)由跑着的
|
|
20
|
+
* `kiwi merchant start` 节点自动生成并服务(a2a/server),商家无需手写。本模块把
|
|
21
|
+
* 「域名 → A2A endpoint」这一步变成引导向导:检测本机公网 IP、检查域名 DNS、生成
|
|
22
|
+
* Caddy 反代配置、输出启动与验证命令。
|
|
23
|
+
*
|
|
24
|
+
* 幂等:只生成配置 + 打印指引 + 可选 `--check` 验证,不改 profile/DB。
|
|
25
|
+
*/
|
|
26
|
+
import { promises as dnsPromises } from "node:dns";
|
|
27
|
+
import { writeFile } from "node:fs/promises";
|
|
28
|
+
const DEFAULT_IP_SERVICE = "https://api.ipify.org";
|
|
29
|
+
const DEFAULT_WELL_KNOWN_PATH = "/.well-known/agent-card.json";
|
|
30
|
+
/** setup-public 类型化错误(fail-closed)。 */
|
|
31
|
+
export class SetupPublicError extends Error {
|
|
32
|
+
code;
|
|
33
|
+
constructor(code, message) {
|
|
34
|
+
super(message);
|
|
35
|
+
this.name = "SetupPublicError";
|
|
36
|
+
this.code = code;
|
|
37
|
+
}
|
|
38
|
+
}
|
|
39
|
+
/** 从 `KIWI_A2A_PUBLIC_URL`(https://<domain>)提取公网域名;无效返回 null。 */
|
|
40
|
+
export function extractPublicDomain(publicUrl) {
|
|
41
|
+
if (publicUrl === undefined || publicUrl.trim() === "")
|
|
42
|
+
return null;
|
|
43
|
+
try {
|
|
44
|
+
const u = new URL(publicUrl.trim());
|
|
45
|
+
if (u.protocol !== "https:")
|
|
46
|
+
return null;
|
|
47
|
+
if (u.username !== "" || u.password !== "")
|
|
48
|
+
return null;
|
|
49
|
+
if (u.pathname !== "/" && u.pathname !== "")
|
|
50
|
+
return null;
|
|
51
|
+
if (u.search !== "" || u.hash !== "")
|
|
52
|
+
return null;
|
|
53
|
+
return u.hostname.toLowerCase();
|
|
54
|
+
}
|
|
55
|
+
catch {
|
|
56
|
+
return null;
|
|
57
|
+
}
|
|
58
|
+
}
|
|
59
|
+
/** 校验并归一化公网域名(无 scheme/path/port/userinfo)。 */
|
|
60
|
+
export function validatePublicDomain(domain) {
|
|
61
|
+
const raw = String(domain ?? "").trim().toLowerCase();
|
|
62
|
+
if (raw === "") {
|
|
63
|
+
throw new SetupPublicError("domain_required", "请提供公网域名(如 merchant.example.com)");
|
|
64
|
+
}
|
|
65
|
+
if (raw.includes("://")) {
|
|
66
|
+
throw new SetupPublicError("domain_scheme", "域名不应含 scheme(只需 merchant.example.com)");
|
|
67
|
+
}
|
|
68
|
+
if (raw.includes("/")) {
|
|
69
|
+
throw new SetupPublicError("domain_path", "域名不应含路径");
|
|
70
|
+
}
|
|
71
|
+
if (raw.includes(":") || raw.includes("@") || raw.includes("?") || raw.includes("#")) {
|
|
72
|
+
throw new SetupPublicError("domain_invalid", `域名含非法字符(: @ ? #): "${raw}"`);
|
|
73
|
+
}
|
|
74
|
+
if (!/^[a-z0-9.-]+$/.test(raw)) {
|
|
75
|
+
throw new SetupPublicError("domain_invalid", `域名含非法字符: "${raw}"`);
|
|
76
|
+
}
|
|
77
|
+
if (!raw.includes(".")) {
|
|
78
|
+
throw new SetupPublicError("domain_tld", `域名缺少点(应形如 merchant.example.com): "${raw}"`);
|
|
79
|
+
}
|
|
80
|
+
return raw;
|
|
81
|
+
}
|
|
82
|
+
/** 生成 Caddy 反代配置(把 `<domain>` 转发到本机 A2A 节点)。 */
|
|
83
|
+
export function buildCaddyfile(domain, port) {
|
|
84
|
+
const safePort = Number.isInteger(port) && port > 0 ? port : 9000;
|
|
85
|
+
return `${domain} {
|
|
86
|
+
reverse_proxy 127.0.0.1:${safePort}
|
|
87
|
+
}`;
|
|
88
|
+
}
|
|
89
|
+
/** 检测本机公网 IP;不可达/失败返回 null(降级为手动确认,不 crash)。 */
|
|
90
|
+
export async function detectPublicIp(fetchImpl = fetch) {
|
|
91
|
+
try {
|
|
92
|
+
const res = await fetchImpl(DEFAULT_IP_SERVICE, { signal: AbortSignal.timeout(8000) });
|
|
93
|
+
if (!res.ok)
|
|
94
|
+
return null;
|
|
95
|
+
const text = (await res.text()).trim();
|
|
96
|
+
return /^\d{1,3}(\.\d{1,3}){3}$/.test(text) ? text : null;
|
|
97
|
+
}
|
|
98
|
+
catch {
|
|
99
|
+
return null;
|
|
100
|
+
}
|
|
101
|
+
}
|
|
102
|
+
/** 解析域名 A 记录并对比期望 IP(服务器公网 IP)。 */
|
|
103
|
+
export async function checkDomainDns(domain, expectedIp, lookupImpl = async (hostname) => {
|
|
104
|
+
try {
|
|
105
|
+
const { address } = await dnsPromises.lookup(hostname, { family: 4 });
|
|
106
|
+
return address;
|
|
107
|
+
}
|
|
108
|
+
catch {
|
|
109
|
+
return null;
|
|
110
|
+
}
|
|
111
|
+
}) {
|
|
112
|
+
const resolved = await lookupImpl(domain);
|
|
113
|
+
if (resolved === null) {
|
|
114
|
+
return { status: "unresolved", resolved: null, expected: expectedIp };
|
|
115
|
+
}
|
|
116
|
+
if (expectedIp === null) {
|
|
117
|
+
return { status: "skipped", resolved, expected: null };
|
|
118
|
+
}
|
|
119
|
+
return resolved === expectedIp
|
|
120
|
+
? { status: "ok", resolved, expected: expectedIp }
|
|
121
|
+
: { status: "mismatch", resolved, expected: expectedIp };
|
|
122
|
+
}
|
|
123
|
+
/** `--check`:验证 `https://<domain>/.well-known/agent-card.json` 可达。 */
|
|
124
|
+
export async function verifyWellKnown(domain, fetchImpl = fetch) {
|
|
125
|
+
const url = `https://${domain}${DEFAULT_WELL_KNOWN_PATH}`;
|
|
126
|
+
try {
|
|
127
|
+
const res = await fetchImpl(url, { signal: AbortSignal.timeout(8000) });
|
|
128
|
+
return { url, httpStatus: res.status };
|
|
129
|
+
}
|
|
130
|
+
catch {
|
|
131
|
+
return { url, httpStatus: null };
|
|
132
|
+
}
|
|
133
|
+
}
|
|
134
|
+
/** 编排 setup-public:检测 IP → DNS 检查 → 生成/写 Caddyfile → 可选验证。 */
|
|
135
|
+
export async function runMerchantSetupPublic(opts) {
|
|
136
|
+
const publicIp = opts.publicIpOverride !== undefined ? opts.publicIpOverride : await detectPublicIp(opts.fetchImpl);
|
|
137
|
+
const dns = await checkDomainDns(opts.domain, publicIp, opts.lookupImpl);
|
|
138
|
+
const caddyfile = `${buildCaddyfile(opts.domain, opts.port)}\n`;
|
|
139
|
+
const writeImpl = opts.writeFileImpl ?? writeFile;
|
|
140
|
+
await writeImpl(opts.caddyfilePath, caddyfile);
|
|
141
|
+
const check = opts.checkNow === true ? await verifyWellKnown(opts.domain, opts.fetchImpl) : null;
|
|
142
|
+
const profileFlag = opts.profilePath !== undefined && opts.profilePath !== "" ? ` --profile ${opts.profilePath}` : "";
|
|
143
|
+
const instructions = [
|
|
144
|
+
`1) 安装并启动 Caddy(TLS 自动签发):`,
|
|
145
|
+
` caddy run --config ${opts.caddyfilePath}`,
|
|
146
|
+
``,
|
|
147
|
+
`2) 启动 A2A 节点(广告公网地址,well-known 由节点自动生成):`,
|
|
148
|
+
` KIWI_A2A_PUBLIC_URL=https://${opts.domain} kiwi merchant start${profileFlag} --port ${opts.port} &`,
|
|
149
|
+
``,
|
|
150
|
+
`3) 验证 well-known(期望 200):`,
|
|
151
|
+
` curl -sI https://${opts.domain}${DEFAULT_WELL_KNOWN_PATH}`,
|
|
152
|
+
];
|
|
153
|
+
return {
|
|
154
|
+
merchantAgentId: opts.merchantAgentId,
|
|
155
|
+
domain: opts.domain,
|
|
156
|
+
port: opts.port,
|
|
157
|
+
publicIp,
|
|
158
|
+
dns,
|
|
159
|
+
caddyfilePath: opts.caddyfilePath,
|
|
160
|
+
caddyfile,
|
|
161
|
+
check,
|
|
162
|
+
instructions,
|
|
163
|
+
};
|
|
164
|
+
}
|
|
165
|
+
//# sourceMappingURL=product-setup-public.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"product-setup-public.js","sourceRoot":"","sources":["../src/product-setup-public.ts"],"names":[],"mappings":"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"}
|
package/package.json
CHANGED