@harrylabsj/kiwi 0.8.0 → 0.9.0

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 (214) hide show
  1. package/README.md +1 -1
  2. package/dist/a2a/negotiate.d.ts +6 -2
  3. package/dist/a2a/negotiate.js +10 -3
  4. package/dist/a2a/negotiate.js.map +1 -1
  5. package/dist/a2a/node.d.ts +4 -1
  6. package/dist/a2a/node.js +56 -3
  7. package/dist/a2a/node.js.map +1 -1
  8. package/dist/a2a/server/merchant-handler.d.ts +11 -3
  9. package/dist/a2a/server/merchant-handler.js +84 -26
  10. package/dist/a2a/server/merchant-handler.js.map +1 -1
  11. package/dist/agent/buyer/buyer-tools.js +2 -2
  12. package/dist/agent/buyer/buyer-tools.js.map +1 -1
  13. package/dist/agent/kernel.js +5 -1
  14. package/dist/agent/kernel.js.map +1 -1
  15. package/dist/agent/memory/schema.d.ts +1 -1
  16. package/dist/agent/memory/schema.js +9 -1
  17. package/dist/agent/memory/schema.js.map +1 -1
  18. package/dist/agent/merchant/action-candidate.d.ts +18 -0
  19. package/dist/agent/merchant/action-candidate.js +51 -0
  20. package/dist/agent/merchant/action-candidate.js.map +1 -1
  21. package/dist/agent/merchant/fake-merchant-client.js +6 -1
  22. package/dist/agent/merchant/fake-merchant-client.js.map +1 -1
  23. package/dist/agent/merchant/intelligence/default-backend.js +25 -2
  24. package/dist/agent/merchant/intelligence/default-backend.js.map +1 -1
  25. package/dist/agent/merchant/merchant-client.d.ts +50 -1
  26. package/dist/agent/merchant/merchant-client.js +157 -8
  27. package/dist/agent/merchant/merchant-client.js.map +1 -1
  28. package/dist/agent/merchant/merchant-presentations.js +25 -2
  29. package/dist/agent/merchant/merchant-presentations.js.map +1 -1
  30. package/dist/agent/merchant/merchant-tools.js +102 -188
  31. package/dist/agent/merchant/merchant-tools.js.map +1 -1
  32. package/dist/agent/merchant/types.d.ts +6 -2
  33. package/dist/agent/merchant/types.js +45 -0
  34. package/dist/agent/merchant/types.js.map +1 -1
  35. package/dist/auth/merchant-authorization.d.ts +49 -0
  36. package/dist/auth/merchant-authorization.js +61 -0
  37. package/dist/auth/merchant-authorization.js.map +1 -0
  38. package/dist/auth/merchant-oauth.d.ts +255 -0
  39. package/dist/auth/merchant-oauth.js +764 -0
  40. package/dist/auth/merchant-oauth.js.map +1 -0
  41. package/dist/auth/merchant-pairing.d.ts +62 -0
  42. package/dist/auth/merchant-pairing.js +199 -0
  43. package/dist/auth/merchant-pairing.js.map +1 -0
  44. package/dist/auth/merchant-sessions.d.ts +71 -0
  45. package/dist/auth/merchant-sessions.js +168 -0
  46. package/dist/auth/merchant-sessions.js.map +1 -0
  47. package/dist/buyer-core/build-service.d.ts +5 -0
  48. package/dist/buyer-core/build-service.js +12 -0
  49. package/dist/buyer-core/build-service.js.map +1 -1
  50. package/dist/buyer-core/errors.d.ts +1 -1
  51. package/dist/buyer-core/errors.js +2 -0
  52. package/dist/buyer-core/errors.js.map +1 -1
  53. package/dist/buyer-core/merchant-index.d.ts +19 -4
  54. package/dist/buyer-core/merchant-index.js +137 -16
  55. package/dist/buyer-core/merchant-index.js.map +1 -1
  56. package/dist/buyer-core/negotiator.d.ts +0 -10
  57. package/dist/buyer-core/negotiator.js +12 -1
  58. package/dist/buyer-core/negotiator.js.map +1 -1
  59. package/dist/buyer-core/quote-fetcher.js +2 -1
  60. package/dist/buyer-core/quote-fetcher.js.map +1 -1
  61. package/dist/buyer-core/service.d.ts +104 -0
  62. package/dist/buyer-core/service.js +105 -1
  63. package/dist/buyer-core/service.js.map +1 -1
  64. package/dist/cli.d.ts +4 -2
  65. package/dist/cli.js +612 -20
  66. package/dist/cli.js.map +1 -1
  67. package/dist/config/profile.d.ts +30 -0
  68. package/dist/config/profile.js +126 -61
  69. package/dist/config/profile.js.map +1 -1
  70. package/dist/demo/demo-runner.js +12 -9
  71. package/dist/demo/demo-runner.js.map +1 -1
  72. package/dist/discovery/catalog-source/buyer-follows.d.ts +82 -0
  73. package/dist/discovery/catalog-source/buyer-follows.js +228 -0
  74. package/dist/discovery/catalog-source/buyer-follows.js.map +1 -0
  75. package/dist/discovery/catalog-source/connector-identity.d.ts +75 -0
  76. package/dist/discovery/catalog-source/connector-identity.js +175 -0
  77. package/dist/discovery/catalog-source/connector-identity.js.map +1 -0
  78. package/dist/discovery/catalog-source/errors.d.ts +1 -1
  79. package/dist/discovery/catalog-source/errors.js +2 -0
  80. package/dist/discovery/catalog-source/errors.js.map +1 -1
  81. package/dist/discovery/catalog-source/merchant-publications.d.ts +65 -0
  82. package/dist/discovery/catalog-source/merchant-publications.js +207 -0
  83. package/dist/discovery/catalog-source/merchant-publications.js.map +1 -0
  84. package/dist/discovery/catalog-source/register.d.ts +24 -0
  85. package/dist/discovery/catalog-source/register.js +46 -0
  86. package/dist/discovery/catalog-source/register.js.map +1 -1
  87. package/dist/discovery/catalog-source/source.js +2 -1
  88. package/dist/discovery/catalog-source/source.js.map +1 -1
  89. package/dist/fs/atomic-write.d.ts +18 -0
  90. package/dist/fs/atomic-write.js +29 -0
  91. package/dist/fs/atomic-write.js.map +1 -0
  92. package/dist/http/server.js +4 -1
  93. package/dist/http/server.js.map +1 -1
  94. package/dist/mcp/cli.d.ts +2 -0
  95. package/dist/mcp/cli.js +7 -6
  96. package/dist/mcp/cli.js.map +1 -1
  97. package/dist/mcp/merchant-auth.d.ts +78 -0
  98. package/dist/mcp/merchant-auth.js +146 -0
  99. package/dist/mcp/merchant-auth.js.map +1 -0
  100. package/dist/mcp/merchant-dirs.d.ts +26 -0
  101. package/dist/mcp/merchant-dirs.js +44 -0
  102. package/dist/mcp/merchant-dirs.js.map +1 -0
  103. package/dist/mcp/merchant-resources.d.ts +38 -0
  104. package/dist/mcp/merchant-resources.js +146 -0
  105. package/dist/mcp/merchant-resources.js.map +1 -0
  106. package/dist/mcp/merchant-server.d.ts +106 -0
  107. package/dist/mcp/merchant-server.js +615 -0
  108. package/dist/mcp/merchant-server.js.map +1 -0
  109. package/dist/mcp/merchant-tools.d.ts +103 -0
  110. package/dist/mcp/merchant-tools.js +517 -0
  111. package/dist/mcp/merchant-tools.js.map +1 -0
  112. package/dist/mcp/server.js +4 -3
  113. package/dist/mcp/server.js.map +1 -1
  114. package/dist/mcp/tools.d.ts +5 -3
  115. package/dist/mcp/tools.js +102 -5
  116. package/dist/mcp/tools.js.map +1 -1
  117. package/dist/mcp/types.d.ts +1 -1
  118. package/dist/mcp/types.js +4 -0
  119. package/dist/mcp/types.js.map +1 -1
  120. package/dist/merchant/ops.d.ts +0 -11
  121. package/dist/merchant/ops.js +13 -1
  122. package/dist/merchant/ops.js.map +1 -1
  123. package/dist/merchant/workbench-service.d.ts +189 -0
  124. package/dist/merchant/workbench-service.js +417 -0
  125. package/dist/merchant/workbench-service.js.map +1 -0
  126. package/dist/merchant-admin/pending-page.d.ts +35 -0
  127. package/dist/merchant-admin/pending-page.js +69 -0
  128. package/dist/merchant-admin/pending-page.js.map +1 -0
  129. package/dist/merchant-core/commands.d.ts +99 -0
  130. package/dist/merchant-core/commands.js +179 -0
  131. package/dist/merchant-core/commands.js.map +1 -0
  132. package/dist/merchant-core/executor.d.ts +69 -0
  133. package/dist/merchant-core/executor.js +218 -0
  134. package/dist/merchant-core/executor.js.map +1 -0
  135. package/dist/merchant-core/negotiation-adapters.d.ts +55 -0
  136. package/dist/merchant-core/negotiation-adapters.js +55 -0
  137. package/dist/merchant-core/negotiation-adapters.js.map +1 -0
  138. package/dist/merchant-core/network-checks.d.ts +65 -0
  139. package/dist/merchant-core/network-checks.js +111 -0
  140. package/dist/merchant-core/network-checks.js.map +1 -0
  141. package/dist/merchant-core/operations.d.ts +64 -0
  142. package/dist/merchant-core/operations.js +136 -0
  143. package/dist/merchant-core/operations.js.map +1 -0
  144. package/dist/merchant-core/policy-runtime.d.ts +70 -0
  145. package/dist/merchant-core/policy-runtime.js +181 -0
  146. package/dist/merchant-core/policy-runtime.js.map +1 -0
  147. package/dist/merchant-core/product-import.d.ts +67 -0
  148. package/dist/merchant-core/product-import.js +160 -0
  149. package/dist/merchant-core/product-import.js.map +1 -0
  150. package/dist/merchant-core/service.d.ts +203 -0
  151. package/dist/merchant-core/service.js +402 -0
  152. package/dist/merchant-core/service.js.map +1 -0
  153. package/dist/merchant-gateway/catalog-publications.d.ts +71 -0
  154. package/dist/merchant-gateway/catalog-publications.js +175 -0
  155. package/dist/merchant-gateway/catalog-publications.js.map +1 -0
  156. package/dist/merchant-gateway/catalog-tools.d.ts +46 -0
  157. package/dist/merchant-gateway/catalog-tools.js +277 -0
  158. package/dist/merchant-gateway/catalog-tools.js.map +1 -0
  159. package/dist/merchant-gateway/cli.d.ts +75 -0
  160. package/dist/merchant-gateway/cli.js +458 -0
  161. package/dist/merchant-gateway/cli.js.map +1 -0
  162. package/dist/merchant-gateway/credential-vault.d.ts +44 -0
  163. package/dist/merchant-gateway/credential-vault.js +111 -0
  164. package/dist/merchant-gateway/credential-vault.js.map +1 -0
  165. package/dist/merchant-gateway/entry-server.d.ts +117 -0
  166. package/dist/merchant-gateway/entry-server.js +710 -0
  167. package/dist/merchant-gateway/entry-server.js.map +1 -0
  168. package/dist/merchant-gateway/instance-registration.d.ts +143 -0
  169. package/dist/merchant-gateway/instance-registration.js +382 -0
  170. package/dist/merchant-gateway/instance-registration.js.map +1 -0
  171. package/dist/merchant-gateway/instance-tools.d.ts +58 -0
  172. package/dist/merchant-gateway/instance-tools.js +184 -0
  173. package/dist/merchant-gateway/instance-tools.js.map +1 -0
  174. package/dist/merchant-gateway/mcp-proxy.d.ts +25 -0
  175. package/dist/merchant-gateway/mcp-proxy.js +192 -0
  176. package/dist/merchant-gateway/mcp-proxy.js.map +1 -0
  177. package/dist/merchant-gateway/pinned-fetch.d.ts +52 -0
  178. package/dist/merchant-gateway/pinned-fetch.js +212 -0
  179. package/dist/merchant-gateway/pinned-fetch.js.map +1 -0
  180. package/dist/merchant-gateway/tenant-registry.d.ts +82 -0
  181. package/dist/merchant-gateway/tenant-registry.js +190 -0
  182. package/dist/merchant-gateway/tenant-registry.js.map +1 -0
  183. package/dist/merchant-gateway/tool-bundle.d.ts +26 -0
  184. package/dist/merchant-gateway/tool-bundle.js +56 -0
  185. package/dist/merchant-gateway/tool-bundle.js.map +1 -0
  186. package/dist/merchant-runtime/backup.d.ts +48 -0
  187. package/dist/merchant-runtime/backup.js +226 -0
  188. package/dist/merchant-runtime/backup.js.map +1 -0
  189. package/dist/merchant-runtime/health.d.ts +99 -0
  190. package/dist/merchant-runtime/health.js +206 -0
  191. package/dist/merchant-runtime/health.js.map +1 -0
  192. package/dist/merchant-runtime/jobs.d.ts +64 -0
  193. package/dist/merchant-runtime/jobs.js +107 -0
  194. package/dist/merchant-runtime/jobs.js.map +1 -0
  195. package/dist/merchant-runtime/manager.d.ts +94 -0
  196. package/dist/merchant-runtime/manager.js +305 -0
  197. package/dist/merchant-runtime/manager.js.map +1 -0
  198. package/dist/merchant-runtime/services.d.ts +30 -0
  199. package/dist/merchant-runtime/services.js +51 -0
  200. package/dist/merchant-runtime/services.js.map +1 -0
  201. package/dist/net/url.d.ts +26 -0
  202. package/dist/net/url.js +32 -0
  203. package/dist/net/url.js.map +1 -0
  204. package/dist/product-cli.js +22 -3
  205. package/dist/product-cli.js.map +1 -1
  206. package/dist/product-compat.d.ts +9 -1
  207. package/dist/product-compat.js +12 -1
  208. package/dist/product-compat.js.map +1 -1
  209. package/dist/product-init.js +17 -5
  210. package/dist/product-init.js.map +1 -1
  211. package/dist/product-publish.js +2 -1
  212. package/dist/product-publish.js.map +1 -1
  213. package/package.json +3 -2
  214. package/skills/kiwi-buyer/SKILL.md +2 -0
@@ -0,0 +1 @@
1
+ {"version":3,"file":"merchant-oauth.js","sourceRoot":"","sources":["../../src/auth/merchant-oauth.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,62 @@
1
+ /**
2
+ * Copyright 2026 harrylabsj
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
+ export declare const PAIRING_FILE = "pairing.json";
17
+ export declare const DEFAULT_PAIRING_TTL_MS: number;
18
+ export interface PairingState {
19
+ expiresAt: string;
20
+ createdAt: string;
21
+ }
22
+ /**
23
+ * 生成配对码(覆盖旧码)。返回明文码与到期时间——明文只在此处出现一次。
24
+ */
25
+ export declare function createPairingCode(dir: string, options?: {
26
+ ttlMs?: number;
27
+ now?: () => Date;
28
+ }): {
29
+ code: string;
30
+ expiresAt: string;
31
+ };
32
+ export declare const PAIRED_CREDENTIAL_FILE = "paired-credential.json";
33
+ /**
34
+ * 为一次配对签发**新的**实例凭据(单槽:重配对即轮换,旧凭据立即失效)。
35
+ *
36
+ * 与静态 `KIWI_MERCHANT_MCP_TOKEN` 并存:静态令牌仍是运维自己的入口,
37
+ * 配对凭据是给网关用的、可随时轮换的那一份。明文返回一次,落盘只存摘要。
38
+ */
39
+ export declare function issuePairedCredential(dir: string, options?: {
40
+ now?: () => Date;
41
+ }): {
42
+ credential: string;
43
+ issuedAt: string;
44
+ };
45
+ /** 已签发的配对凭据摘要(无则 undefined);供校验器逐请求比对。 */
46
+ export declare function readPairedCredentialDigest(dir: string): string | undefined;
47
+ /** 校验一个候选凭据是否等于已签发的配对凭据(恒定时间比较)。 */
48
+ export declare function matchesPairedCredential(dir: string, candidate: string, deps?: {
49
+ compare?: (a: string, b: string) => boolean;
50
+ }): boolean;
51
+ /** 吊销配对凭据(网关侧随后会因 401 而路由失败,直到重新配对)。 */
52
+ export declare function revokePairedCredential(dir: string): boolean;
53
+ /** 当前配对码状态(不含明文);无码或已过期返回 undefined。 */
54
+ export declare function readPairingState(dir: string, options?: {
55
+ now?: () => Date;
56
+ }): PairingState | undefined;
57
+ /**
58
+ * 兑换配对码:成功即删除(单次),失败不动状态(仍可重试到过期)。
59
+ */
60
+ export declare function redeemPairingCode(dir: string, code: string, options?: {
61
+ now?: () => Date;
62
+ }): boolean;
@@ -0,0 +1,199 @@
1
+ /**
2
+ * Copyright 2026 harrylabsj
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
+ * 商家实例的一次性配对码(设计 §8.4 第二期)。
18
+ *
19
+ * 目的:商家把实例接入网关时**不必把长期内部令牌贴进任何表单**——在实例所在
20
+ * 机器上执行 `kiwi merchant mcp pair` 生成一个短时、单次、可读性好的配对码,
21
+ * 把它填进网关的绑定页即可;网关用该码向实例兑换内部凭据。
22
+ *
23
+ * 语义(fail-closed):
24
+ * - 一次性:兑换成功即从盘上删除,重复兑换一律失败;
25
+ * - 短 TTL:缺省 10 分钟,过期即失效(`readPairingState` 也按 TTL 判定);
26
+ * - 只存摘要:`pairing.json` 里只有 sha256 摘要与到期时间(0600),
27
+ * 明文只在生成时打印一次;
28
+ * - 重新生成即覆盖(旧码立即失效)。
29
+ *
30
+ * 范围限制:配对码只解决「谁在实例这台机器上」——网关仍要求商家先完成
31
+ * OAuth 目录连接(merchant_id 来自已验证会话),两者缺一不可。
32
+ */
33
+ import { createHash, randomBytes, timingSafeEqual } from "node:crypto";
34
+ import { chmodSync, existsSync, mkdirSync, readFileSync, rmSync, writeFileSync } from "node:fs";
35
+ import path from "node:path";
36
+ export const PAIRING_FILE = "pairing.json";
37
+ export const DEFAULT_PAIRING_TTL_MS = 10 * 60 * 1000;
38
+ /** 无歧义字母表(去掉 0/O/1/I/L),便于商家手抄。 */
39
+ const CODE_ALPHABET = "23456789ABCDEFGHJKMNPQRSTUVWXYZ";
40
+ const CODE_GROUPS = 3;
41
+ const CODE_GROUP_LEN = 4;
42
+ function digest(code) {
43
+ return createHash("sha256").update(code.trim().toUpperCase()).digest("hex");
44
+ }
45
+ function pairingPath(dir) {
46
+ return path.join(dir, PAIRING_FILE);
47
+ }
48
+ /** 拒绝采样的接受上限:256 不是字母表长度的整数倍,尾部余数区间必须丢弃。 */
49
+ const CODE_ALPHABET_ACCEPT_LIMIT = 256 - (256 % CODE_ALPHABET.length);
50
+ /**
51
+ * 生成一组字符(无偏)。
52
+ *
53
+ * `byte % 31` 直接取模会让字母表前 8 个字符的概率高出 1/8(9/256 vs 8/256),
54
+ * 因此丢弃落在不完整区间尾部的字节(约 3% 拒绝率)。
55
+ */
56
+ function randomGroup() {
57
+ let group = "";
58
+ while (group.length < CODE_GROUP_LEN) {
59
+ for (const byte of randomBytes(CODE_GROUP_LEN - group.length)) {
60
+ if (byte >= CODE_ALPHABET_ACCEPT_LIMIT)
61
+ continue;
62
+ group += CODE_ALPHABET[byte % CODE_ALPHABET.length];
63
+ }
64
+ }
65
+ return group;
66
+ }
67
+ function generateCode() {
68
+ const groups = [];
69
+ for (let g = 0; g < CODE_GROUPS; g++)
70
+ groups.push(randomGroup());
71
+ return groups.join("-");
72
+ }
73
+ /**
74
+ * 生成配对码(覆盖旧码)。返回明文码与到期时间——明文只在此处出现一次。
75
+ */
76
+ export function createPairingCode(dir, options = {}) {
77
+ const now = options.now ?? (() => new Date());
78
+ const ttlMs = options.ttlMs ?? DEFAULT_PAIRING_TTL_MS;
79
+ const createdAt = now();
80
+ const expiresAt = new Date(createdAt.getTime() + ttlMs);
81
+ const code = generateCode();
82
+ mkdirSync(dir, { recursive: true, mode: 0o700 });
83
+ const file = pairingPath(dir);
84
+ writeFileSync(file, `${JSON.stringify({
85
+ code_digest: digest(code),
86
+ created_at: createdAt.toISOString(),
87
+ expires_at: expiresAt.toISOString(),
88
+ }, null, 2)}\n`, { mode: 0o600 });
89
+ chmodSync(file, 0o600);
90
+ return { code, expiresAt: expiresAt.toISOString() };
91
+ }
92
+ // ── 配对凭据(最小授权:由实例侧签发并持有,网关只拿到调用凭据)────────────
93
+ export const PAIRED_CREDENTIAL_FILE = "paired-credential.json";
94
+ function pairedCredentialPath(dir) {
95
+ return path.join(dir, PAIRED_CREDENTIAL_FILE);
96
+ }
97
+ /**
98
+ * 为一次配对签发**新的**实例凭据(单槽:重配对即轮换,旧凭据立即失效)。
99
+ *
100
+ * 与静态 `KIWI_MERCHANT_MCP_TOKEN` 并存:静态令牌仍是运维自己的入口,
101
+ * 配对凭据是给网关用的、可随时轮换的那一份。明文返回一次,落盘只存摘要。
102
+ */
103
+ export function issuePairedCredential(dir, options = {}) {
104
+ const now = (options.now ?? (() => new Date()))();
105
+ const credential = `pair_${randomBytes(24).toString("base64url")}`;
106
+ mkdirSync(dir, { recursive: true, mode: 0o700 });
107
+ const file = pairedCredentialPath(dir);
108
+ writeFileSync(file, `${JSON.stringify({ credential_digest: digest(credential), issued_at: now.toISOString() }, null, 2)}\n`, { mode: 0o600 });
109
+ chmodSync(file, 0o600);
110
+ return { credential, issuedAt: now.toISOString() };
111
+ }
112
+ /** 已签发的配对凭据摘要(无则 undefined);供校验器逐请求比对。 */
113
+ export function readPairedCredentialDigest(dir) {
114
+ const file = pairedCredentialPath(dir);
115
+ if (!existsSync(file))
116
+ return undefined;
117
+ try {
118
+ const raw = JSON.parse(readFileSync(file, "utf8"));
119
+ return typeof raw.credential_digest === "string" && raw.credential_digest !== ""
120
+ ? raw.credential_digest
121
+ : undefined;
122
+ }
123
+ catch {
124
+ return undefined;
125
+ }
126
+ }
127
+ /** 校验一个候选凭据是否等于已签发的配对凭据(恒定时间比较)。 */
128
+ export function matchesPairedCredential(dir, candidate, deps = {}) {
129
+ const expected = readPairedCredentialDigest(dir);
130
+ if (expected === undefined)
131
+ return false;
132
+ const presented = digest(String(candidate ?? ""));
133
+ const compare = deps.compare ?? ((a, b) => a.length === b.length && timingSafeEqualHex(a, b));
134
+ return compare(presented, expected);
135
+ }
136
+ /** 吊销配对凭据(网关侧随后会因 401 而路由失败,直到重新配对)。 */
137
+ export function revokePairedCredential(dir) {
138
+ const file = pairedCredentialPath(dir);
139
+ if (!existsSync(file))
140
+ return false;
141
+ rmSync(file, { force: true });
142
+ return true;
143
+ }
144
+ function timingSafeEqualHex(a, b) {
145
+ const left = Buffer.from(a, "hex");
146
+ const right = Buffer.from(b, "hex");
147
+ if (left.length === 0 || left.length !== right.length)
148
+ return false;
149
+ return timingSafeEqual(left, right);
150
+ }
151
+ /** 当前配对码状态(不含明文);无码或已过期返回 undefined。 */
152
+ export function readPairingState(dir, options = {}) {
153
+ const file = pairingPath(dir);
154
+ if (!existsSync(file))
155
+ return undefined;
156
+ let raw;
157
+ try {
158
+ raw = JSON.parse(readFileSync(file, "utf8"));
159
+ }
160
+ catch {
161
+ return undefined;
162
+ }
163
+ const expiresAt = typeof raw.expires_at === "string" ? raw.expires_at : "";
164
+ const createdAt = typeof raw.created_at === "string" ? raw.created_at : "";
165
+ if (expiresAt === "")
166
+ return undefined;
167
+ const now = (options.now ?? (() => new Date()))();
168
+ if (expiresAt <= now.toISOString())
169
+ return undefined;
170
+ return { createdAt, expiresAt };
171
+ }
172
+ /**
173
+ * 兑换配对码:成功即删除(单次),失败不动状态(仍可重试到过期)。
174
+ */
175
+ export function redeemPairingCode(dir, code, options = {}) {
176
+ const file = pairingPath(dir);
177
+ if (!existsSync(file))
178
+ return false;
179
+ const state = readPairingState(dir, options);
180
+ if (state === undefined) {
181
+ // 已过期:清理掉,避免残留
182
+ rmSync(file, { force: true });
183
+ return false;
184
+ }
185
+ let stored;
186
+ try {
187
+ stored = JSON.parse(readFileSync(file, "utf8"));
188
+ }
189
+ catch {
190
+ return false;
191
+ }
192
+ if (typeof stored.code_digest !== "string" || stored.code_digest === "")
193
+ return false;
194
+ if (stored.code_digest !== digest(String(code ?? "")))
195
+ return false;
196
+ rmSync(file, { force: true });
197
+ return true;
198
+ }
199
+ //# sourceMappingURL=merchant-pairing.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"merchant-pairing.js","sourceRoot":"","sources":["../../src/auth/merchant-pairing.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,71 @@
1
+ /**
2
+ * Copyright 2026 harrylabsj
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
+ import type { DatabaseSync } from "node:sqlite";
17
+ /** 管理会话有效期(12 小时)。 */
18
+ export declare const ADMIN_SESSION_TTL_MS: number;
19
+ /** 会话 cookie 名。 */
20
+ export declare const ADMIN_SESSION_COOKIE = "kiwi_admin";
21
+ /** scrypt 哈希(格式 scrypt$N$salt$hash,base64url)。 */
22
+ export declare function hashAdminPassword(password: string): string;
23
+ /** 恒定时间校验。 */
24
+ export declare function verifyAdminPassword(password: string, stored: string): boolean;
25
+ export interface MerchantAdminCredentials {
26
+ principal_id: string;
27
+ merchant_id: string;
28
+ password_hash: string;
29
+ created_at: string;
30
+ }
31
+ export declare function adminCredentialsPath(dir: string): string;
32
+ /** 初始化管理员凭据(已存在且未 force → 拒绝,防覆盖)。 */
33
+ export declare function writeAdminCredentials(dir: string, input: {
34
+ principalId: string;
35
+ merchantId: string;
36
+ password: string;
37
+ force?: boolean;
38
+ }): MerchantAdminCredentials;
39
+ /** 读取管理员凭据;未初始化 → undefined(登录不可用,fail-closed)。 */
40
+ export declare function readAdminCredentials(dir: string): MerchantAdminCredentials | undefined;
41
+ export declare const ADMIN_SESSION_SCHEMA = "\nCREATE TABLE IF NOT EXISTS admin_sessions (\n session_digest TEXT PRIMARY KEY,\n principal_id TEXT NOT NULL,\n merchant_id TEXT NOT NULL,\n expires_at TEXT NOT NULL,\n revoked_at TEXT,\n created_at TEXT NOT NULL\n);\n";
42
+ export interface AdminSession {
43
+ principal_id: string;
44
+ merchant_id: string;
45
+ expires_at: string;
46
+ }
47
+ export declare class MerchantAdminSessions {
48
+ private readonly db;
49
+ private readonly now;
50
+ constructor(options: {
51
+ db: DatabaseSync;
52
+ now?: () => string;
53
+ });
54
+ /** 登录成功签发会话(明文只在响应 cookie 中;落库为 sha256 摘要)。 */
55
+ createSession(input: {
56
+ principalId: string;
57
+ merchantId: string;
58
+ }): {
59
+ sessionId: string;
60
+ expiresAt: string;
61
+ };
62
+ /** 校验会话(未过期、未撤销才返回)。 */
63
+ getSession(sessionId: string): AdminSession | undefined;
64
+ /** 撤销会话(登出/失效)。 */
65
+ revoke(sessionId: string): void;
66
+ }
67
+ /** 登录页(最小可用;与 OAuth 授权页同风格)。 */
68
+ export declare function renderAdminLoginPage(options: {
69
+ error?: string;
70
+ next?: string;
71
+ }): string;
@@ -0,0 +1,168 @@
1
+ /**
2
+ * Copyright 2026 harrylabsj
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
+ * 商家管理登录会话(BUG-01/BUG-03 修复)。
18
+ *
19
+ * 账户来源设计(单商家实例语义):安装/初始化时由商家管理员经 CLI
20
+ * (`kiwi merchant mcp admin-passwd`,新口令只从环境变量读取,绝不出现在
21
+ * 命令行/日志)设置管理员口令;口令以 scrypt 哈希落 `admin-credentials.json`
22
+ * (0600,不明文落盘)。管理员即本实例 principal(profile.agent_id)。
23
+ *
24
+ * 登录会话:POST /admin/login 校验口令(恒定时间比较)→ 签发短期会话
25
+ * (HttpOnly + SameSite=Lax + 生产 Secure cookie),会话记录落 oauth.sqlite
26
+ * (可撤销、12 小时过期)。OAuth 授权页与 /admin/* 均要求有效会话;
27
+ * 授权挂起单绑定会话认证的 principal_id + merchant_id——token 主体来自
28
+ * 认证用户,不再来自服务启动参数。
29
+ */
30
+ import { createHash, randomBytes, scryptSync, timingSafeEqual } from "node:crypto";
31
+ import { chmodSync, existsSync, mkdirSync, readFileSync, writeFileSync } from "node:fs";
32
+ import path from "node:path";
33
+ /** 管理会话有效期(12 小时)。 */
34
+ export const ADMIN_SESSION_TTL_MS = 12 * 60 * 60 * 1000;
35
+ /** 会话 cookie 名。 */
36
+ export const ADMIN_SESSION_COOKIE = "kiwi_admin";
37
+ // ── 口令哈希(scrypt,node:crypto 内置;不明文落盘)─────────────────────────
38
+ const SCRYPT_N = 16384;
39
+ /** scrypt 哈希(格式 scrypt$N$salt$hash,base64url)。 */
40
+ export function hashAdminPassword(password) {
41
+ if (password.length < 8)
42
+ throw new Error("管理员口令至少 8 位");
43
+ const salt = randomBytes(16).toString("base64url");
44
+ const hash = scryptSync(password, salt, 32, { N: SCRYPT_N }).toString("base64url");
45
+ return `scrypt$${SCRYPT_N}$${salt}$${hash}`;
46
+ }
47
+ /** 恒定时间校验。 */
48
+ export function verifyAdminPassword(password, stored) {
49
+ const parts = stored.split("$");
50
+ if (parts.length !== 4 || parts[0] !== "scrypt")
51
+ return false;
52
+ const salt = parts[2] ?? "";
53
+ const expected = Buffer.from(parts[3] ?? "", "base64url");
54
+ const actual = scryptSync(password, salt, expected.length, { N: Number(parts[1]) });
55
+ return expected.length === actual.length && timingSafeEqual(expected, actual);
56
+ }
57
+ export function adminCredentialsPath(dir) {
58
+ return path.join(dir, "admin-credentials.json");
59
+ }
60
+ /** 初始化管理员凭据(已存在且未 force → 拒绝,防覆盖)。 */
61
+ export function writeAdminCredentials(dir, input) {
62
+ const file = adminCredentialsPath(dir);
63
+ if (existsSync(file) && input.force !== true) {
64
+ throw new Error(`管理员凭据已存在(${file});重置需显式 --force`);
65
+ }
66
+ const creds = {
67
+ principal_id: input.principalId,
68
+ merchant_id: input.merchantId,
69
+ password_hash: hashAdminPassword(input.password),
70
+ created_at: new Date().toISOString(),
71
+ };
72
+ mkdirSync(dir, { recursive: true, mode: 0o700 });
73
+ writeFileSync(file, `${JSON.stringify(creds, null, 2)}\n`, { mode: 0o600 });
74
+ // mode 参数对已存在文件不生效(审查 P2):重置口令时收紧历史遗留的宽权限。
75
+ chmodSync(file, 0o600);
76
+ return creds;
77
+ }
78
+ /** 读取管理员凭据;未初始化 → undefined(登录不可用,fail-closed)。 */
79
+ export function readAdminCredentials(dir) {
80
+ const file = adminCredentialsPath(dir);
81
+ if (!existsSync(file))
82
+ return undefined;
83
+ const raw = JSON.parse(readFileSync(file, "utf8"));
84
+ return raw;
85
+ }
86
+ // ── 会话存储(oauth.sqlite admin_sessions 表)──────────────────────────────
87
+ export const ADMIN_SESSION_SCHEMA = `
88
+ CREATE TABLE IF NOT EXISTS admin_sessions (
89
+ session_digest TEXT PRIMARY KEY,
90
+ principal_id TEXT NOT NULL,
91
+ merchant_id TEXT NOT NULL,
92
+ expires_at TEXT NOT NULL,
93
+ revoked_at TEXT,
94
+ created_at TEXT NOT NULL
95
+ );
96
+ `;
97
+ export class MerchantAdminSessions {
98
+ db;
99
+ now;
100
+ constructor(options) {
101
+ this.db = options.db;
102
+ this.now = options.now ?? (() => new Date().toISOString());
103
+ this.db.exec(ADMIN_SESSION_SCHEMA);
104
+ // 过期会话清理(审查 P2:管理会话表只增不删)。
105
+ this.db.prepare("DELETE FROM admin_sessions WHERE expires_at <= ?").run(this.now());
106
+ }
107
+ /** 登录成功签发会话(明文只在响应 cookie 中;落库为 sha256 摘要)。 */
108
+ createSession(input) {
109
+ const sessionId = `kadm_${randomBytes(24).toString("base64url")}`;
110
+ const expiresAt = new Date(Date.parse(this.now()) + ADMIN_SESSION_TTL_MS).toISOString();
111
+ this.db
112
+ .prepare("INSERT INTO admin_sessions (session_digest, principal_id, merchant_id, expires_at, created_at) VALUES (?, ?, ?, ?, ?)")
113
+ .run(sessionDigest(sessionId), input.principalId, input.merchantId, expiresAt, this.now());
114
+ return { sessionId, expiresAt };
115
+ }
116
+ /** 校验会话(未过期、未撤销才返回)。 */
117
+ getSession(sessionId) {
118
+ const row = this.db
119
+ .prepare("SELECT * FROM admin_sessions WHERE session_digest = ?")
120
+ .get(sessionDigest(sessionId));
121
+ if (row === undefined || row.revoked_at !== null)
122
+ return undefined;
123
+ if (row.expires_at <= this.now())
124
+ return undefined;
125
+ return {
126
+ principal_id: row.principal_id,
127
+ merchant_id: row.merchant_id,
128
+ expires_at: row.expires_at,
129
+ };
130
+ }
131
+ /** 撤销会话(登出/失效)。 */
132
+ revoke(sessionId) {
133
+ this.db
134
+ .prepare("UPDATE admin_sessions SET revoked_at = ? WHERE session_digest = ? AND revoked_at IS NULL")
135
+ .run(this.now(), sessionDigest(sessionId));
136
+ }
137
+ }
138
+ function sessionDigest(value) {
139
+ // 会话 id 是高熵随机串,sha256 摘要落库(与 oauth token 同口径)
140
+ return createHash("sha256").update(value).digest("hex");
141
+ }
142
+ function escapeHtml(text) {
143
+ return text
144
+ .replaceAll("&", "&amp;")
145
+ .replaceAll("<", "&lt;")
146
+ .replaceAll(">", "&gt;")
147
+ .replaceAll('"', "&quot;")
148
+ .replaceAll("'", "&#39;");
149
+ }
150
+ /** 登录页(最小可用;与 OAuth 授权页同风格)。 */
151
+ export function renderAdminLoginPage(options) {
152
+ const error = options.error === undefined ? undefined : escapeHtml(options.error);
153
+ const next = escapeHtml(options.next ?? "/admin/pending");
154
+ return `<!doctype html>
155
+ <html lang="zh-CN">
156
+ <head><meta charset="utf-8"><title>商家管理员登录 — Kiwi</title></head>
157
+ <body>
158
+ <h1>商家管理员登录</h1>
159
+ ${error !== undefined ? `<p style="color:red">${error}</p>` : ""}
160
+ <form method="post" action="/admin/login">
161
+ <input type="hidden" name="next" value="${next}">
162
+ <label>管理员口令:<input type="password" name="password" required></label>
163
+ <button type="submit">登录</button>
164
+ </form>
165
+ </body>
166
+ </html>`;
167
+ }
168
+ //# sourceMappingURL=merchant-sessions.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"merchant-sessions.js","sourceRoot":"","sources":["../../src/auth/merchant-sessions.ts"],"names":[],"mappings":"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"}
@@ -23,6 +23,11 @@ export interface BuyerServiceConfig {
23
23
  catalogUrl?: string;
24
24
  marketplaceUrl?: string;
25
25
  buyerBootstrapToken?: string;
26
+ /**
27
+ * catalog 账号会话 token(M4 买家关注;cookie kiwi_session)。缺省时关注
28
+ * 工具返回"需要先在 Kiwi 目录登录"的可解释引导,不伪造买家身份。
29
+ */
30
+ catalogSessionToken?: string;
26
31
  /** A2A 出站 bearer(服务器为 signature 认证时匿名放行可省)。 */
27
32
  a2aBearerToken?: string;
28
33
  /** A2A 允许打到私网/保留网段(SSRF 逃生门;本地试点直连时开)。 */
@@ -21,6 +21,7 @@
21
21
  * 包装层只负责 manifest/tool description/路由,业务判断全部回到 buyer-core。
22
22
  */
23
23
  import { assertNorthboundContractValid } from "../contracts/northbound-schema.js";
24
+ import { BuyerFollowsSource } from "../discovery/catalog-source/buyer-follows.js";
24
25
  import { A2ANegotiator } from "./a2a-negotiator.js";
25
26
  import { A2AQuoteFetcher } from "./a2a-quote-fetcher.js";
26
27
  import { KiwiCatalogMerchantIndex, MarketplaceMerchantIndex } from "./merchant-index.js";
@@ -43,6 +44,7 @@ export function buildBuyerService(config) {
43
44
  let merchantIndex;
44
45
  let quoteFetcher;
45
46
  let negotiator;
47
+ let followsClient;
46
48
  if (config.marketplaceUrl !== undefined) {
47
49
  merchantIndex = new MarketplaceMerchantIndex({ baseUrl: config.marketplaceUrl });
48
50
  quoteFetcher = new MarketplaceQuoteFetcher({
@@ -58,6 +60,15 @@ export function buildBuyerService(config) {
58
60
  baseUrl: config.catalogUrl,
59
61
  buyerId: config.buyerAgentId,
60
62
  });
63
+ // M4 买家关注:仅在显式配置了 catalog 账号会话时接线;缺省不伪造身份,
64
+ // 由 service 层返回"需要先在 Kiwi 目录登录"的可解释引导。
65
+ if (config.catalogSessionToken !== undefined && config.catalogSessionToken !== "") {
66
+ followsClient = new BuyerFollowsSource({
67
+ baseUrl: config.catalogUrl,
68
+ sessionToken: config.catalogSessionToken,
69
+ buyerId: config.buyerAgentId,
70
+ });
71
+ }
61
72
  const a2a = {
62
73
  bearerToken: config.a2aBearerToken,
63
74
  allowPrivateRanges: config.a2aAllowPrivateRanges,
@@ -76,6 +87,7 @@ export function buildBuyerService(config) {
76
87
  ...(merchantIndex !== undefined ? { merchantIndex } : {}),
77
88
  ...(quoteFetcher !== undefined ? { quoteFetcher } : {}),
78
89
  ...(negotiator !== undefined ? { negotiator } : {}),
90
+ ...(followsClient !== undefined ? { followsClient } : {}),
79
91
  });
80
92
  }
81
93
  //# sourceMappingURL=build-service.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"build-service.js","sourceRoot":"","sources":["../../src/buyer-core/build-service.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;GAcG;AAEH;;;;;;GAMG;AAEH,OAAO,EAAE,6BAA6B,EAAE,MAAM,mCAAmC,CAAC;AAClF,OAAO,EAAE,aAAa,EAAE,MAAM,qBAAqB,CAAC;AACpD,OAAO,EAAE,eAAe,EAAE,MAAM,wBAAwB,CAAC;AACzD,OAAO,EAAE,wBAAwB,EAAE,wBAAwB,EAAE,MAAM,qBAAqB,CAAC;AACzF,OAAO,EAAE,qBAAqB,EAAE,MAAM,iBAAiB,CAAC;AACxD,OAAO,EAAE,uBAAuB,EAAE,MAAM,oBAAoB,CAAC;AAC7D,OAAO,EAAE,gBAAgB,EAAE,MAAM,cAAc,CAAC;AAChD,OAAO,EAAE,iBAAiB,EAAE,MAAM,YAAY,CAAC;AAqB/C;;;;;;;;GAQG;AACH,MAAM,UAAU,iBAAiB,CAAC,MAA0B;IAC1D,6BAA6B,CAAC,mBAAmB,EAAE,MAAM,CAAC,MAAM,EAAE,mBAAmB,CAAC,CAAC;IACvF,MAAM,KAAK,GAAG,IAAI,iBAAiB,CAAC,EAAE,MAAM,EAAE,MAAM,CAAC,MAAM,EAAE,CAAC,CAAC;IAC/D,IAAI,aAAa,CAAC;IAClB,IAAI,YAAY,CAAC;IACjB,IAAI,UAAU,CAAC;IACf,IAAI,MAAM,CAAC,cAAc,KAAK,SAAS,EAAE,CAAC;QACxC,aAAa,GAAG,IAAI,wBAAwB,CAAC,EAAE,OAAO,EAAE,MAAM,CAAC,cAAc,EAAE,CAAC,CAAC;QACjF,YAAY,GAAG,IAAI,uBAAuB,CAAC;YACzC,OAAO,EAAE,MAAM,CAAC,cAAc;YAC9B,mBAAmB,EAAE,MAAM,CAAC,mBAAmB,IAAI,EAAE;SACtD,CAAC,CAAC;QACH,UAAU,GAAG,IAAI,qBAAqB,CAAC,EAAE,OAAO,EAAE,MAAM,CAAC,cAAc,EAAE,CAAC,CAAC;IAC7E,CAAC;SAAM,IAAI,MAAM,CAAC,UAAU,KAAK,SAAS,EAAE,CAAC;QAC3C,uDAAuD;QACvD,uDAAuD;QACvD,aAAa,GAAG,IAAI,wBAAwB,CAAC;YAC3C,OAAO,EAAE,MAAM,CAAC,UAAU;YAC1B,OAAO,EAAE,MAAM,CAAC,YAAY;SAC7B,CAAC,CAAC;QACH,MAAM,GAAG,GAAG;YACV,WAAW,EAAE,MAAM,CAAC,cAAc;YAClC,kBAAkB,EAAE,MAAM,CAAC,qBAAqB;YAChD,YAAY,EAAE,MAAM,CAAC,eAAe;YACpC,SAAS,EAAE,MAAM,CAAC,YAAY;SAC/B,CAAC;QACF,YAAY,GAAG,IAAI,eAAe,CAAC,GAAG,CAAC,CAAC;QACxC,UAAU,GAAG,IAAI,aAAa,CAAC,GAAG,CAAC,CAAC;IACtC,CAAC;IACD,OAAO,IAAI,gBAAgB,CAAC;QAC1B,KAAK;QACL,SAAS,EAAE,MAAM,CAAC,SAAS;QAC3B,YAAY,EAAE,MAAM,CAAC,YAAY;QACjC,SAAS,EAAE,MAAM,CAAC,SAAS;QAC3B,gBAAgB,EAAE,MAAM,CAAC,MAAM;QAC/B,GAAG,CAAC,aAAa,KAAK,SAAS,CAAC,CAAC,CAAC,EAAE,aAAa,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC;QACzD,GAAG,CAAC,YAAY,KAAK,SAAS,CAAC,CAAC,CAAC,EAAE,YAAY,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC;QACvD,GAAG,CAAC,UAAU,KAAK,SAAS,CAAC,CAAC,CAAC,EAAE,UAAU,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC;KACpD,CAAC,CAAC;AACL,CAAC"}
1
+ {"version":3,"file":"build-service.js","sourceRoot":"","sources":["../../src/buyer-core/build-service.ts"],"names":[],"mappings":"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"}