@harrylabsj/kiwi 0.7.22 → 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.
- package/README.md +45 -10
- package/dist/a2a/negotiate.d.ts +6 -2
- package/dist/a2a/negotiate.js +10 -3
- package/dist/a2a/negotiate.js.map +1 -1
- package/dist/a2a/node.d.ts +4 -1
- package/dist/a2a/node.js +57 -4
- package/dist/a2a/node.js.map +1 -1
- package/dist/a2a/server/merchant-handler.d.ts +11 -3
- package/dist/a2a/server/merchant-handler.js +84 -26
- package/dist/a2a/server/merchant-handler.js.map +1 -1
- package/dist/agent/buyer/buyer-tools.js +17 -10
- package/dist/agent/buyer/buyer-tools.js.map +1 -1
- package/dist/agent/buyer/scheduler.d.ts +1 -0
- package/dist/agent/buyer/scheduler.js +5 -1
- package/dist/agent/buyer/scheduler.js.map +1 -1
- package/dist/agent/buyer/task-store.js +5 -2
- package/dist/agent/buyer/task-store.js.map +1 -1
- package/dist/agent/chat-tools.js +10 -3
- package/dist/agent/chat-tools.js.map +1 -1
- package/dist/agent/context/fencing.d.ts +27 -0
- package/dist/agent/context/fencing.js +126 -0
- package/dist/agent/context/fencing.js.map +1 -0
- package/dist/agent/context/grounding.d.ts +18 -0
- package/dist/agent/context/grounding.js +22 -0
- package/dist/agent/context/grounding.js.map +1 -0
- package/dist/agent/host/events.d.ts +31 -0
- package/dist/agent/host/events.js +62 -0
- package/dist/agent/host/events.js.map +1 -0
- package/dist/agent/host/tui-renderer.d.ts +17 -0
- package/dist/agent/host/tui-renderer.js +125 -0
- package/dist/agent/host/tui-renderer.js.map +1 -0
- package/dist/agent/host/web-renderer.d.ts +71 -0
- package/dist/agent/host/web-renderer.js +185 -0
- package/dist/agent/host/web-renderer.js.map +1 -0
- package/dist/agent/kernel-builder.d.ts +3 -1
- package/dist/agent/kernel-builder.js +4 -1
- package/dist/agent/kernel-builder.js.map +1 -1
- package/dist/agent/kernel.d.ts +20 -1
- package/dist/agent/kernel.js +255 -14
- package/dist/agent/kernel.js.map +1 -1
- package/dist/agent/memory/schema.d.ts +1 -1
- package/dist/agent/memory/schema.js +9 -1
- package/dist/agent/memory/schema.js.map +1 -1
- package/dist/agent/merchant/action-candidate.d.ts +18 -0
- package/dist/agent/merchant/action-candidate.js +51 -0
- package/dist/agent/merchant/action-candidate.js.map +1 -1
- package/dist/agent/merchant/fake-merchant-client.js +6 -1
- package/dist/agent/merchant/fake-merchant-client.js.map +1 -1
- package/dist/agent/merchant/intelligence/backend.d.ts +40 -0
- package/dist/agent/merchant/intelligence/backend.js +2 -0
- package/dist/agent/merchant/intelligence/backend.js.map +1 -0
- package/dist/agent/merchant/intelligence/default-backend.d.ts +38 -0
- package/dist/agent/merchant/intelligence/default-backend.js +477 -0
- package/dist/agent/merchant/intelligence/default-backend.js.map +1 -0
- package/dist/agent/merchant/intelligence/http-analytics-source.d.ts +55 -0
- package/dist/agent/merchant/intelligence/http-analytics-source.js +193 -0
- package/dist/agent/merchant/intelligence/http-analytics-source.js.map +1 -0
- package/dist/agent/merchant/intelligence/types.d.ts +109 -0
- package/dist/agent/merchant/intelligence/types.js +2 -0
- package/dist/agent/merchant/intelligence/types.js.map +1 -0
- package/dist/agent/merchant/merchant-client.d.ts +50 -1
- package/dist/agent/merchant/merchant-client.js +157 -8
- package/dist/agent/merchant/merchant-client.js.map +1 -1
- package/dist/agent/merchant/merchant-enrichment.d.ts +10 -0
- package/dist/agent/merchant/merchant-enrichment.js +38 -0
- package/dist/agent/merchant/merchant-enrichment.js.map +1 -0
- package/dist/agent/merchant/merchant-grounding.d.ts +5 -0
- package/dist/agent/merchant/merchant-grounding.js +76 -0
- package/dist/agent/merchant/merchant-grounding.js.map +1 -0
- package/dist/agent/merchant/merchant-presentations.d.ts +8 -0
- package/dist/agent/merchant/merchant-presentations.js +207 -0
- package/dist/agent/merchant/merchant-presentations.js.map +1 -0
- package/dist/agent/merchant/merchant-tools.d.ts +8 -0
- package/dist/agent/merchant/merchant-tools.js +291 -178
- package/dist/agent/merchant/merchant-tools.js.map +1 -1
- package/dist/agent/merchant/types.d.ts +6 -2
- package/dist/agent/merchant/types.js +45 -0
- package/dist/agent/merchant/types.js.map +1 -1
- package/dist/agent/presentation/registry.d.ts +14 -0
- package/dist/agent/presentation/registry.js +24 -0
- package/dist/agent/presentation/registry.js.map +1 -0
- package/dist/agent/presentation/runner.d.ts +11 -0
- package/dist/agent/presentation/runner.js +17 -0
- package/dist/agent/presentation/runner.js.map +1 -0
- package/dist/agent/presentation/sanitize.d.ts +16 -0
- package/dist/agent/presentation/sanitize.js +37 -0
- package/dist/agent/presentation/sanitize.js.map +1 -0
- package/dist/agent/presentation/types.d.ts +28 -0
- package/dist/agent/presentation/types.js +8 -0
- package/dist/agent/presentation/types.js.map +1 -0
- package/dist/agent/session.d.ts +1 -1
- package/dist/agent/session.js +2 -2
- package/dist/agent/session.js.map +1 -1
- package/dist/agent/skills/registry.d.ts +11 -0
- package/dist/agent/skills/registry.js +119 -0
- package/dist/agent/skills/registry.js.map +1 -0
- package/dist/agent/skills/tools.d.ts +6 -0
- package/dist/agent/skills/tools.js +36 -0
- package/dist/agent/skills/tools.js.map +1 -0
- package/dist/agent/skills/types.d.ts +9 -0
- package/dist/agent/skills/types.js +2 -0
- package/dist/agent/skills/types.js.map +1 -0
- package/dist/agent/supplier/scheduler.d.ts +2 -0
- package/dist/agent/supplier/scheduler.js +101 -22
- package/dist/agent/supplier/scheduler.js.map +1 -1
- package/dist/agent/supplier/store.d.ts +2 -0
- package/dist/agent/supplier/store.js +44 -0
- package/dist/agent/supplier/store.js.map +1 -1
- package/dist/agent/system-prompt.d.ts +5 -1
- package/dist/agent/system-prompt.js +20 -3
- package/dist/agent/system-prompt.js.map +1 -1
- package/dist/auth/merchant-authorization.d.ts +49 -0
- package/dist/auth/merchant-authorization.js +61 -0
- package/dist/auth/merchant-authorization.js.map +1 -0
- package/dist/auth/merchant-oauth.d.ts +255 -0
- package/dist/auth/merchant-oauth.js +764 -0
- package/dist/auth/merchant-oauth.js.map +1 -0
- package/dist/auth/merchant-pairing.d.ts +62 -0
- package/dist/auth/merchant-pairing.js +199 -0
- package/dist/auth/merchant-pairing.js.map +1 -0
- package/dist/auth/merchant-sessions.d.ts +71 -0
- package/dist/auth/merchant-sessions.js +168 -0
- package/dist/auth/merchant-sessions.js.map +1 -0
- package/dist/buyer-core/build-service.d.ts +5 -0
- package/dist/buyer-core/build-service.js +12 -0
- package/dist/buyer-core/build-service.js.map +1 -1
- package/dist/buyer-core/errors.d.ts +1 -1
- package/dist/buyer-core/errors.js +2 -0
- package/dist/buyer-core/errors.js.map +1 -1
- package/dist/buyer-core/merchant-index.d.ts +19 -4
- package/dist/buyer-core/merchant-index.js +137 -16
- package/dist/buyer-core/merchant-index.js.map +1 -1
- package/dist/buyer-core/negotiator.d.ts +0 -10
- package/dist/buyer-core/negotiator.js +12 -1
- package/dist/buyer-core/negotiator.js.map +1 -1
- package/dist/buyer-core/quote-fetcher.js +2 -1
- package/dist/buyer-core/quote-fetcher.js.map +1 -1
- package/dist/buyer-core/service.d.ts +104 -0
- package/dist/buyer-core/service.js +105 -1
- package/dist/buyer-core/service.js.map +1 -1
- package/dist/cli.d.ts +4 -2
- package/dist/cli.js +644 -32
- package/dist/cli.js.map +1 -1
- package/dist/config/profile.d.ts +51 -0
- package/dist/config/profile.js +185 -61
- package/dist/config/profile.js.map +1 -1
- package/dist/demo/demo-runner.js +12 -9
- package/dist/demo/demo-runner.js.map +1 -1
- package/dist/discovery/catalog-source/buyer-follows.d.ts +82 -0
- package/dist/discovery/catalog-source/buyer-follows.js +228 -0
- package/dist/discovery/catalog-source/buyer-follows.js.map +1 -0
- package/dist/discovery/catalog-source/connector-identity.d.ts +75 -0
- package/dist/discovery/catalog-source/connector-identity.js +175 -0
- package/dist/discovery/catalog-source/connector-identity.js.map +1 -0
- package/dist/discovery/catalog-source/errors.d.ts +1 -1
- package/dist/discovery/catalog-source/errors.js +2 -0
- package/dist/discovery/catalog-source/errors.js.map +1 -1
- package/dist/discovery/catalog-source/kiwi-record.d.ts +2 -0
- package/dist/discovery/catalog-source/kiwi-record.js.map +1 -1
- package/dist/discovery/catalog-source/kiwi-source.js +2 -0
- package/dist/discovery/catalog-source/kiwi-source.js.map +1 -1
- package/dist/discovery/catalog-source/merchant-publications.d.ts +65 -0
- package/dist/discovery/catalog-source/merchant-publications.js +207 -0
- package/dist/discovery/catalog-source/merchant-publications.js.map +1 -0
- package/dist/discovery/catalog-source/register.d.ts +24 -0
- package/dist/discovery/catalog-source/register.js +46 -0
- package/dist/discovery/catalog-source/register.js.map +1 -1
- package/dist/discovery/catalog-source/source.js +2 -1
- package/dist/discovery/catalog-source/source.js.map +1 -1
- package/dist/fs/atomic-write.d.ts +18 -0
- package/dist/fs/atomic-write.js +29 -0
- package/dist/fs/atomic-write.js.map +1 -0
- package/dist/handoff/authorization.js +1 -1
- package/dist/http/merchant-server.d.ts +65 -0
- package/dist/http/merchant-server.js +346 -0
- package/dist/http/merchant-server.js.map +1 -0
- package/dist/http/server.js +4 -1
- package/dist/http/server.js.map +1 -1
- package/dist/mcp/cli.d.ts +2 -0
- package/dist/mcp/cli.js +7 -6
- package/dist/mcp/cli.js.map +1 -1
- package/dist/mcp/merchant-auth.d.ts +78 -0
- package/dist/mcp/merchant-auth.js +146 -0
- package/dist/mcp/merchant-auth.js.map +1 -0
- package/dist/mcp/merchant-dirs.d.ts +26 -0
- package/dist/mcp/merchant-dirs.js +44 -0
- package/dist/mcp/merchant-dirs.js.map +1 -0
- package/dist/mcp/merchant-resources.d.ts +38 -0
- package/dist/mcp/merchant-resources.js +146 -0
- package/dist/mcp/merchant-resources.js.map +1 -0
- package/dist/mcp/merchant-server.d.ts +106 -0
- package/dist/mcp/merchant-server.js +615 -0
- package/dist/mcp/merchant-server.js.map +1 -0
- package/dist/mcp/merchant-tools.d.ts +103 -0
- package/dist/mcp/merchant-tools.js +517 -0
- package/dist/mcp/merchant-tools.js.map +1 -0
- package/dist/mcp/server.js +4 -3
- package/dist/mcp/server.js.map +1 -1
- package/dist/mcp/tools.d.ts +5 -3
- package/dist/mcp/tools.js +102 -5
- package/dist/mcp/tools.js.map +1 -1
- package/dist/mcp/types.d.ts +1 -1
- package/dist/mcp/types.js +4 -0
- package/dist/mcp/types.js.map +1 -1
- package/dist/merchant/ops.d.ts +0 -11
- package/dist/merchant/ops.js +13 -1
- package/dist/merchant/ops.js.map +1 -1
- package/dist/merchant/stats-store.d.ts +7 -0
- package/dist/merchant/stats-store.js +11 -0
- package/dist/merchant/stats-store.js.map +1 -1
- package/dist/merchant/workbench-service.d.ts +189 -0
- package/dist/merchant/workbench-service.js +417 -0
- package/dist/merchant/workbench-service.js.map +1 -0
- package/dist/merchant-admin/pending-page.d.ts +35 -0
- package/dist/merchant-admin/pending-page.js +69 -0
- package/dist/merchant-admin/pending-page.js.map +1 -0
- package/dist/merchant-core/commands.d.ts +99 -0
- package/dist/merchant-core/commands.js +179 -0
- package/dist/merchant-core/commands.js.map +1 -0
- package/dist/merchant-core/executor.d.ts +69 -0
- package/dist/merchant-core/executor.js +218 -0
- package/dist/merchant-core/executor.js.map +1 -0
- package/dist/merchant-core/negotiation-adapters.d.ts +55 -0
- package/dist/merchant-core/negotiation-adapters.js +55 -0
- package/dist/merchant-core/negotiation-adapters.js.map +1 -0
- package/dist/merchant-core/network-checks.d.ts +65 -0
- package/dist/merchant-core/network-checks.js +111 -0
- package/dist/merchant-core/network-checks.js.map +1 -0
- package/dist/merchant-core/operations.d.ts +64 -0
- package/dist/merchant-core/operations.js +136 -0
- package/dist/merchant-core/operations.js.map +1 -0
- package/dist/merchant-core/policy-runtime.d.ts +70 -0
- package/dist/merchant-core/policy-runtime.js +181 -0
- package/dist/merchant-core/policy-runtime.js.map +1 -0
- package/dist/merchant-core/product-import.d.ts +67 -0
- package/dist/merchant-core/product-import.js +160 -0
- package/dist/merchant-core/product-import.js.map +1 -0
- package/dist/merchant-core/service.d.ts +203 -0
- package/dist/merchant-core/service.js +402 -0
- package/dist/merchant-core/service.js.map +1 -0
- package/dist/merchant-gateway/catalog-publications.d.ts +71 -0
- package/dist/merchant-gateway/catalog-publications.js +175 -0
- package/dist/merchant-gateway/catalog-publications.js.map +1 -0
- package/dist/merchant-gateway/catalog-tools.d.ts +46 -0
- package/dist/merchant-gateway/catalog-tools.js +277 -0
- package/dist/merchant-gateway/catalog-tools.js.map +1 -0
- package/dist/merchant-gateway/cli.d.ts +75 -0
- package/dist/merchant-gateway/cli.js +458 -0
- package/dist/merchant-gateway/cli.js.map +1 -0
- package/dist/merchant-gateway/credential-vault.d.ts +44 -0
- package/dist/merchant-gateway/credential-vault.js +111 -0
- package/dist/merchant-gateway/credential-vault.js.map +1 -0
- package/dist/merchant-gateway/entry-server.d.ts +117 -0
- package/dist/merchant-gateway/entry-server.js +710 -0
- package/dist/merchant-gateway/entry-server.js.map +1 -0
- package/dist/merchant-gateway/instance-registration.d.ts +143 -0
- package/dist/merchant-gateway/instance-registration.js +382 -0
- package/dist/merchant-gateway/instance-registration.js.map +1 -0
- package/dist/merchant-gateway/instance-tools.d.ts +58 -0
- package/dist/merchant-gateway/instance-tools.js +184 -0
- package/dist/merchant-gateway/instance-tools.js.map +1 -0
- package/dist/merchant-gateway/mcp-proxy.d.ts +25 -0
- package/dist/merchant-gateway/mcp-proxy.js +192 -0
- package/dist/merchant-gateway/mcp-proxy.js.map +1 -0
- package/dist/merchant-gateway/pinned-fetch.d.ts +52 -0
- package/dist/merchant-gateway/pinned-fetch.js +212 -0
- package/dist/merchant-gateway/pinned-fetch.js.map +1 -0
- package/dist/merchant-gateway/tenant-registry.d.ts +82 -0
- package/dist/merchant-gateway/tenant-registry.js +190 -0
- package/dist/merchant-gateway/tenant-registry.js.map +1 -0
- package/dist/merchant-gateway/tool-bundle.d.ts +26 -0
- package/dist/merchant-gateway/tool-bundle.js +56 -0
- package/dist/merchant-gateway/tool-bundle.js.map +1 -0
- package/dist/merchant-runtime/backup.d.ts +48 -0
- package/dist/merchant-runtime/backup.js +226 -0
- package/dist/merchant-runtime/backup.js.map +1 -0
- package/dist/merchant-runtime/health.d.ts +99 -0
- package/dist/merchant-runtime/health.js +206 -0
- package/dist/merchant-runtime/health.js.map +1 -0
- package/dist/merchant-runtime/jobs.d.ts +64 -0
- package/dist/merchant-runtime/jobs.js +107 -0
- package/dist/merchant-runtime/jobs.js.map +1 -0
- package/dist/merchant-runtime/manager.d.ts +94 -0
- package/dist/merchant-runtime/manager.js +305 -0
- package/dist/merchant-runtime/manager.js.map +1 -0
- package/dist/merchant-runtime/services.d.ts +30 -0
- package/dist/merchant-runtime/services.js +51 -0
- package/dist/merchant-runtime/services.js.map +1 -0
- package/dist/negotiation/action-candidate.js +1 -1
- package/dist/net/url.d.ts +26 -0
- package/dist/net/url.js +32 -0
- package/dist/net/url.js.map +1 -0
- package/dist/operator/types.d.ts +1 -1
- package/dist/product-cli.d.ts +2 -2
- package/dist/product-cli.js +27 -6
- package/dist/product-cli.js.map +1 -1
- package/dist/product-compat.d.ts +9 -1
- package/dist/product-compat.js +12 -1
- package/dist/product-compat.js.map +1 -1
- package/dist/product-init.js +17 -5
- package/dist/product-init.js.map +1 -1
- package/dist/product-publish.js +2 -1
- package/dist/product-publish.js.map +1 -1
- package/dist/product-supplier.d.ts +73 -0
- package/dist/product-supplier.js +224 -5
- package/dist/product-supplier.js.map +1 -1
- package/dist/runtime/fake-model.d.ts +1 -1
- package/dist/trust/identity/jwk.d.ts +11 -0
- package/dist/trust/identity/jwk.js +2 -0
- package/dist/trust/identity/jwk.js.map +1 -0
- package/dist/trust/identity/jws.d.ts +2 -1
- package/dist/trust/identity/jws.js.map +1 -1
- package/dist/trust/identity/keys.d.ts +2 -1
- package/dist/trust/identity/keys.js.map +1 -1
- package/dist/trust/identity/message-signature.d.ts +1 -14
- package/dist/trust/identity/message-signature.js.map +1 -1
- package/dist/weixin/channel.d.ts +3 -0
- package/dist/weixin/channel.js +18 -2
- package/dist/weixin/channel.js.map +1 -1
- package/examples/profiles/merchant.deepseek.yaml +6 -0
- package/examples/profiles/merchant.fake.yaml +6 -0
- package/examples/profiles/merchant.local.yaml +6 -0
- package/package.json +9 -7
- package/skills/kiwi-buyer/SKILL.md +68 -0
- package/skills/merchant/catalog-operations/SKILL.md +17 -0
- package/skills/merchant/change-approval/SKILL.md +16 -0
- package/skills/merchant/human-review/SKILL.md +17 -0
- package/skills/merchant/inventory-operations/SKILL.md +17 -0
- package/skills/merchant/negotiation-review/SKILL.md +18 -0
- package/skills/merchant/performance-insights/SKILL.md +19 -0
- package/contracts/candidate-agent-dto-1.0.README.md +0 -43
- package/contracts/conformance/python-service/README.md +0 -19
|
@@ -0,0 +1,402 @@
|
|
|
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
|
+
* Merchant Core 共享业务入口(V2 阶段二:src/merchant-core/service.ts)。
|
|
18
|
+
*
|
|
19
|
+
* 包装 V1 `MerchantWorkbenchService`(facade 语义不变:白名单脱敏、租户校验、
|
|
20
|
+
* MerchantWorkbenchError、fail-closed),在其上补齐阶段二业务面:
|
|
21
|
+
* - 两轨磋商统一列表(negotiation-adapters:source_protocol / source_id,
|
|
22
|
+
* 状态名保留各协议口径;人工处理按来源路由,A2A 人审绝不调 shopping 轨);
|
|
23
|
+
* - 私密阈值读取(F23):仅管理面接缝,读取写审计记录(落盘 jsonl,
|
|
24
|
+
* 绝不记值本身);不作为 MCP 工具暴露,私密数值不进任何工具结果。
|
|
25
|
+
*
|
|
26
|
+
* MCP 工具层(src/mcp/merchant-tools.ts)改调本服务;结构类型与
|
|
27
|
+
* MerchantWorkbenchService 方法面一致,既有调用方无感。
|
|
28
|
+
*/
|
|
29
|
+
import { appendFileSync, mkdirSync } from "node:fs";
|
|
30
|
+
import { createHash } from "node:crypto";
|
|
31
|
+
import path from "node:path";
|
|
32
|
+
import { parseProductCreateInput } from "../agent/merchant/types.js";
|
|
33
|
+
import { MerchantWorkbenchError, MerchantWorkbenchService, } from "../merchant/workbench-service.js";
|
|
34
|
+
import { MerchantCommandLog } from "./commands.js";
|
|
35
|
+
import { MerchantExecutorRegistry } from "./executor.js";
|
|
36
|
+
import { parseProductCsv } from "./product-import.js";
|
|
37
|
+
import { credentialsPathFor, syncStatePathFor } from "../weixin/credentials.js";
|
|
38
|
+
import { loadCredentials, loadSyncState } from "../weixin/credentials.js";
|
|
39
|
+
import { WeixinError } from "../weixin/types.js";
|
|
40
|
+
import { assertReviewRoute, fromA2aRow, fromShoppingConsultation, } from "./negotiation-adapters.js";
|
|
41
|
+
export class MerchantCoreService {
|
|
42
|
+
/** V1 facade(委托转发;facade 语义不变)。 */
|
|
43
|
+
workbench;
|
|
44
|
+
intelligence;
|
|
45
|
+
privateValues;
|
|
46
|
+
auditDir;
|
|
47
|
+
capabilities;
|
|
48
|
+
resolveShoppingReview;
|
|
49
|
+
applyPolicyOverride;
|
|
50
|
+
currentPolicy;
|
|
51
|
+
commandPrincipalId;
|
|
52
|
+
confirmationStore;
|
|
53
|
+
operationsStore;
|
|
54
|
+
merchantDataDir;
|
|
55
|
+
now;
|
|
56
|
+
principalId;
|
|
57
|
+
approvalsRef;
|
|
58
|
+
profileRef;
|
|
59
|
+
modeRef;
|
|
60
|
+
constructor(deps) {
|
|
61
|
+
this.workbench = new MerchantWorkbenchService(deps);
|
|
62
|
+
this.now = deps.now;
|
|
63
|
+
this.principalId = deps.profile.agent_id;
|
|
64
|
+
this.approvalsRef = deps.approvals;
|
|
65
|
+
this.profileRef = deps.profile;
|
|
66
|
+
this.modeRef = deps.mode;
|
|
67
|
+
this.commandPrincipalId = deps.commandPrincipalId ?? deps.profile.agent_id;
|
|
68
|
+
if (deps.intelligence !== undefined)
|
|
69
|
+
this.intelligence = deps.intelligence;
|
|
70
|
+
if (deps.privateValues !== undefined)
|
|
71
|
+
this.privateValues = deps.privateValues;
|
|
72
|
+
if (deps.auditDir !== undefined)
|
|
73
|
+
this.auditDir = deps.auditDir;
|
|
74
|
+
if (deps.capabilities !== undefined)
|
|
75
|
+
this.capabilities = deps.capabilities;
|
|
76
|
+
if (deps.resolveShoppingReview !== undefined)
|
|
77
|
+
this.resolveShoppingReview = deps.resolveShoppingReview;
|
|
78
|
+
if (deps.applyPolicyOverride !== undefined)
|
|
79
|
+
this.applyPolicyOverride = deps.applyPolicyOverride;
|
|
80
|
+
if (deps.currentPolicy !== undefined)
|
|
81
|
+
this.currentPolicy = deps.currentPolicy;
|
|
82
|
+
if (deps.operations !== undefined)
|
|
83
|
+
this.operationsStore = deps.operations;
|
|
84
|
+
if (deps.merchantDataDir !== undefined)
|
|
85
|
+
this.merchantDataDir = deps.merchantDataDir;
|
|
86
|
+
if (deps.confirmations !== undefined)
|
|
87
|
+
this.confirmationStore = deps.confirmations;
|
|
88
|
+
}
|
|
89
|
+
// ---- V1 facade 委托(MCP 工具层经此调用) --------------------------------
|
|
90
|
+
listPublicProducts() {
|
|
91
|
+
return this.workbench.listPublicProducts();
|
|
92
|
+
}
|
|
93
|
+
getPublicProduct(sku, merchantId) {
|
|
94
|
+
return this.workbench.getPublicProduct(sku, merchantId);
|
|
95
|
+
}
|
|
96
|
+
getInventorySnapshot(sku) {
|
|
97
|
+
return this.workbench.getInventorySnapshot(sku);
|
|
98
|
+
}
|
|
99
|
+
listA2aNegotiations(limit) {
|
|
100
|
+
return this.workbench.listA2aNegotiations(limit);
|
|
101
|
+
}
|
|
102
|
+
listActiveConsultations() {
|
|
103
|
+
return this.workbench.listActiveConsultations();
|
|
104
|
+
}
|
|
105
|
+
listHumanReviews() {
|
|
106
|
+
return this.workbench.listHumanReviews();
|
|
107
|
+
}
|
|
108
|
+
getAnalytics(period) {
|
|
109
|
+
return this.workbench.getAnalytics(period);
|
|
110
|
+
}
|
|
111
|
+
draftProductChange(input) {
|
|
112
|
+
return this.workbench.draftProductChange(input);
|
|
113
|
+
}
|
|
114
|
+
recoverPendingDrafts() {
|
|
115
|
+
return this.workbench.recoverPendingDrafts();
|
|
116
|
+
}
|
|
117
|
+
approveCandidate(candidateId) {
|
|
118
|
+
return this.workbench.approveCandidate(candidateId);
|
|
119
|
+
}
|
|
120
|
+
// ---- 写闭环(V2 阶段三:持久命令记录 + 固定执行器注册表) -----------------
|
|
121
|
+
commandLogInstance;
|
|
122
|
+
/** 持久命令记录(lazy;store 即 WriteApprovalCandidateStore,单 owner 写)。 */
|
|
123
|
+
get commands() {
|
|
124
|
+
if (this.commandLogInstance === undefined) {
|
|
125
|
+
const executorContext = {
|
|
126
|
+
merchantClient: this.workbench.merchantClientRef,
|
|
127
|
+
profile: this.profileRef,
|
|
128
|
+
ownerId: this.workbench.ownerIdRef,
|
|
129
|
+
...(this.operationsStore !== undefined ? { operations: this.operationsStore } : {}),
|
|
130
|
+
...(this.applyPolicyOverride !== undefined
|
|
131
|
+
? { applyPolicyOverride: this.applyPolicyOverride }
|
|
132
|
+
: {}),
|
|
133
|
+
...(this.currentPolicy !== undefined ? { currentPolicy: this.currentPolicy } : {}),
|
|
134
|
+
...(this.resolveShoppingReview !== undefined
|
|
135
|
+
? { resolveShoppingReview: this.resolveShoppingReview }
|
|
136
|
+
: {}),
|
|
137
|
+
};
|
|
138
|
+
this.commandLogInstance = new MerchantCommandLog({
|
|
139
|
+
store: this.approvalsRef,
|
|
140
|
+
executors: MerchantExecutorRegistry.buildDefault(executorContext),
|
|
141
|
+
executorContext,
|
|
142
|
+
profile: this.profileRef,
|
|
143
|
+
mode: this.modeRef,
|
|
144
|
+
now: this.now,
|
|
145
|
+
principalId: this.commandPrincipalId,
|
|
146
|
+
...(this.confirmationStore !== undefined ? { confirmations: this.confirmationStore } : {}),
|
|
147
|
+
});
|
|
148
|
+
}
|
|
149
|
+
return this.commandLogInstance;
|
|
150
|
+
}
|
|
151
|
+
/** prepare:商品创建(force_pending 候选,绝不直接执行)。入参白名单
|
|
152
|
+
* 校验 + merchant_id 钉死归属(审查 P1:否则批准后执行必然失败或可跨
|
|
153
|
+
* 商家写,白烧人工确认)。 */
|
|
154
|
+
prepareProductCreate(input) {
|
|
155
|
+
let product;
|
|
156
|
+
try {
|
|
157
|
+
product = parseProductCreateInput(input.product, this.workbench.ownerIdRef);
|
|
158
|
+
}
|
|
159
|
+
catch (err) {
|
|
160
|
+
throw new MerchantWorkbenchError("validation", `product 入参不合法:${err instanceof Error ? err.message : String(err)}`);
|
|
161
|
+
}
|
|
162
|
+
return this.commands.prepare({
|
|
163
|
+
tool: "kiwi_merchant_prepare_product_create",
|
|
164
|
+
arguments: { product },
|
|
165
|
+
...(input.reason !== undefined ? { reason: input.reason } : {}),
|
|
166
|
+
});
|
|
167
|
+
}
|
|
168
|
+
/** prepare:库存调整。 */
|
|
169
|
+
prepareInventoryUpdate(input) {
|
|
170
|
+
if (!Number.isInteger(input.stock) || input.stock < 0) {
|
|
171
|
+
throw new MerchantWorkbenchError("validation", "stock 必须是非负整数");
|
|
172
|
+
}
|
|
173
|
+
return this.commands.prepare({
|
|
174
|
+
tool: "kiwi_merchant_prepare_inventory_update",
|
|
175
|
+
arguments: { sku: input.sku, stock: input.stock },
|
|
176
|
+
...(input.reason !== undefined ? { reason: input.reason } : {}),
|
|
177
|
+
});
|
|
178
|
+
}
|
|
179
|
+
/** prepare:listing 销售状态变更(F08 语义;上游不支持 → fail-closed「不可得」)。 */
|
|
180
|
+
async prepareListingChange(input) {
|
|
181
|
+
if (this.capabilities?.listing_pause === false) {
|
|
182
|
+
throw new MerchantWorkbenchError("unavailable", "上游 shopping-cli 不支持 listing 暂停/恢复端点(能力探测 listing_pause=false);不可得,不降级为库存写零。");
|
|
183
|
+
}
|
|
184
|
+
return this.commands.prepare({
|
|
185
|
+
tool: "kiwi_merchant_prepare_listing_change",
|
|
186
|
+
arguments: { sku: input.sku, paused: input.paused },
|
|
187
|
+
...(input.reason !== undefined ? { reason: input.reason } : {}),
|
|
188
|
+
});
|
|
189
|
+
}
|
|
190
|
+
/** prepare:人工处理(F14 两轨;A2A 轨执行面 fail-closed「不可得」留后续)。 */
|
|
191
|
+
async prepareReviewResolve(input) {
|
|
192
|
+
if (input.source_protocol === "a2a") {
|
|
193
|
+
throw new MerchantWorkbenchError("unavailable", "A2A 轨人工处理的执行面尚未落地(不经 shopping-cli resolve-review);不可得。");
|
|
194
|
+
}
|
|
195
|
+
return this.commands.prepare({
|
|
196
|
+
tool: "kiwi_merchant_prepare_review_resolve",
|
|
197
|
+
arguments: { source_id: input.source_id, resolution: input.resolution },
|
|
198
|
+
...(input.reason !== undefined ? { reason: input.reason } : {}),
|
|
199
|
+
});
|
|
200
|
+
}
|
|
201
|
+
/** prepare:策略变更(F17 热更新;执行器写入覆盖层即生效)。 */
|
|
202
|
+
preparePolicyChange(input) {
|
|
203
|
+
return this.commands.prepare({
|
|
204
|
+
tool: "kiwi_merchant_prepare_policy_change",
|
|
205
|
+
arguments: { patch: input.patch },
|
|
206
|
+
...(input.reason !== undefined ? { reason: input.reason } : {}),
|
|
207
|
+
});
|
|
208
|
+
}
|
|
209
|
+
/** 确认通道:批准并执行(确认凭证 + 重校验 + 幂等 + 回读)。单商家单主体
|
|
210
|
+
* 实例的便捷包装——主体恒为本实例 commandPrincipalId;跨主体校验在
|
|
211
|
+
* commands.executeApproved(管理页传入会话主体时真实生效)。 */
|
|
212
|
+
executeApproved(commandId, confirmationToken) {
|
|
213
|
+
return this.commands.executeApproved(commandId, this.commandPrincipalId, confirmationToken);
|
|
214
|
+
}
|
|
215
|
+
/** 确认通道:拒绝候选(同上:单主体便捷包装)。 */
|
|
216
|
+
rejectCandidate(commandId, confirmationToken) {
|
|
217
|
+
return this.commands.reject(commandId, this.commandPrincipalId, confirmationToken);
|
|
218
|
+
}
|
|
219
|
+
/**
|
|
220
|
+
* 重启恢复(阶段三推广版):恢复全部已注册写工具的 pending 命令
|
|
221
|
+
* (覆盖 V1 recoverPendingDrafts 语义并推广);未注册工具的死候选标 expired。
|
|
222
|
+
*/
|
|
223
|
+
recoverPendingCommands() {
|
|
224
|
+
return this.commands.recoverPending();
|
|
225
|
+
}
|
|
226
|
+
listPendingCommands() {
|
|
227
|
+
return this.commands.listPending();
|
|
228
|
+
}
|
|
229
|
+
// ---- 长任务(V2 阶段四:CSV 导入/撤回 + operation 查询) -------------------
|
|
230
|
+
/** prepare:CSV 商品导入(预览逐行回执;幂等键缺省 = CSV 内容 hash)。 */
|
|
231
|
+
async prepareProductsImport(input) {
|
|
232
|
+
if (this.operationsStore === undefined) {
|
|
233
|
+
throw new MerchantWorkbenchError("unavailable", "operation store 未配置(不可得)");
|
|
234
|
+
}
|
|
235
|
+
// 幂等键(审查 P1):显式 key 与参数摘要绑定——同 key 同内容仍幂等重放,
|
|
236
|
+
// 同 key 不同内容不再碰撞(旧逻辑会静默返回旧 operation 并谎报成功);
|
|
237
|
+
// 空/纯空白 key 拒绝(nullish 兜底不覆盖空串)。
|
|
238
|
+
const userKey = input.idempotency_key?.trim() ?? "";
|
|
239
|
+
if (input.idempotency_key !== undefined && userKey === "") {
|
|
240
|
+
throw new MerchantWorkbenchError("validation", "idempotency_key 不能为空字符串(省略该参数即自动按内容摘要生成)");
|
|
241
|
+
}
|
|
242
|
+
const digest = createHash("sha256").update(input.csv).digest("hex").slice(0, 16);
|
|
243
|
+
const key = userKey !== "" ? `csv-${userKey}-${digest}` : `csv-${digest}`;
|
|
244
|
+
// 预览:解析 + 新增/更新判定(逐行错误回执)
|
|
245
|
+
const current = await this.workbench.merchantClientRef.listProducts(this.workbench.ownerIdRef);
|
|
246
|
+
const { preview } = parseProductCsv(input.csv, new Set(current.map((p) => p.sku)));
|
|
247
|
+
const prepared = await this.commands.prepare({
|
|
248
|
+
tool: "kiwi_merchant_prepare_products_import",
|
|
249
|
+
arguments: { csv: input.csv, idempotency_key: key },
|
|
250
|
+
...(input.reason !== undefined ? { reason: input.reason } : {}),
|
|
251
|
+
});
|
|
252
|
+
prepared.preview = { ...prepared.preview, import_preview: preview };
|
|
253
|
+
return prepared;
|
|
254
|
+
}
|
|
255
|
+
/** prepare:批量撤回(listing 销售状态语义;幂等键缺省 = skus hash)。 */
|
|
256
|
+
async prepareProductsWithdraw(input) {
|
|
257
|
+
if (this.operationsStore === undefined) {
|
|
258
|
+
throw new MerchantWorkbenchError("unavailable", "operation store 未配置(不可得)");
|
|
259
|
+
}
|
|
260
|
+
// 幂等键(审查 P1):与 CSV 导入同规则——显式 key 绑定 skus 摘要,空串拒绝。
|
|
261
|
+
const userKey = input.idempotency_key?.trim() ?? "";
|
|
262
|
+
if (input.idempotency_key !== undefined && userKey === "") {
|
|
263
|
+
throw new MerchantWorkbenchError("validation", "idempotency_key 不能为空字符串(省略该参数即自动按内容摘要生成)");
|
|
264
|
+
}
|
|
265
|
+
const digest = createHash("sha256").update(input.skus.join(",")).digest("hex").slice(0, 16);
|
|
266
|
+
const key = userKey !== "" ? `withdraw-${userKey}-${digest}` : `withdraw-${digest}`;
|
|
267
|
+
return this.commands.prepare({
|
|
268
|
+
tool: "kiwi_merchant_prepare_products_withdraw",
|
|
269
|
+
arguments: { skus: input.skus, idempotency_key: key },
|
|
270
|
+
...(input.reason !== undefined ? { reason: input.reason } : {}),
|
|
271
|
+
});
|
|
272
|
+
}
|
|
273
|
+
/** 长任务查询(read scope)。 */
|
|
274
|
+
getOperation(operationId) {
|
|
275
|
+
if (this.operationsStore === undefined) {
|
|
276
|
+
throw new MerchantWorkbenchError("unavailable", "operation store 未配置(不可得)");
|
|
277
|
+
}
|
|
278
|
+
const op = this.operationsStore.get(operationId);
|
|
279
|
+
if (op === undefined) {
|
|
280
|
+
throw new MerchantWorkbenchError("not_found", `未知 operation ${operationId}`);
|
|
281
|
+
}
|
|
282
|
+
return op;
|
|
283
|
+
}
|
|
284
|
+
// ---- 微信通道状态(F29:只读;脱敏;不可得明确标注) -----------------------
|
|
285
|
+
/**
|
|
286
|
+
* 微信绑定状态与同步概况(只读)。脱敏:绝不返回 bot_token。
|
|
287
|
+
* 最近事件列表:当前微信通道无事件存储——明确「不可得」(不编造)。
|
|
288
|
+
*/
|
|
289
|
+
getWeixinStatus() {
|
|
290
|
+
if (this.merchantDataDir === undefined) {
|
|
291
|
+
throw new MerchantWorkbenchError("unavailable", "未配置 merchantDataDir,微信状态不可得");
|
|
292
|
+
}
|
|
293
|
+
const credPath = credentialsPathFor(this.merchantDataDir);
|
|
294
|
+
try {
|
|
295
|
+
const creds = loadCredentials(credPath);
|
|
296
|
+
const sync = loadSyncState(syncStatePathFor(this.merchantDataDir));
|
|
297
|
+
return {
|
|
298
|
+
bound: true,
|
|
299
|
+
account: {
|
|
300
|
+
bot_id: creds.ilink_bot_id,
|
|
301
|
+
user_id: creds.ilink_user_id,
|
|
302
|
+
saved_at: creds.saved_at,
|
|
303
|
+
},
|
|
304
|
+
sync: { buffered: sync.get_updates_buf !== "", seen_count: sync.seen.length },
|
|
305
|
+
recent_events: "不可得(微信通道无事件存储;只有同步游标与去重指纹)",
|
|
306
|
+
};
|
|
307
|
+
}
|
|
308
|
+
catch (err) {
|
|
309
|
+
if (err instanceof WeixinError && err.code === "not_configured") {
|
|
310
|
+
return {
|
|
311
|
+
bound: false,
|
|
312
|
+
recent_events: "不可得(未绑定)",
|
|
313
|
+
note: "未绑定微信(kiwi weixin 扫码登录后绑定)",
|
|
314
|
+
};
|
|
315
|
+
}
|
|
316
|
+
throw new MerchantWorkbenchError("unavailable", `微信状态读取失败:${err instanceof Error ? err.message : String(err)}`);
|
|
317
|
+
}
|
|
318
|
+
}
|
|
319
|
+
// ---- 两轨磋商(V2 §5.2) ------------------------------------------------
|
|
320
|
+
/**
|
|
321
|
+
* 统一磋商列表:A2A 轨(Ledger)+ shopping 会话轨(merchantClient),每条带
|
|
322
|
+
* source_protocol/source_id,状态名保留各协议口径。needs_human_review:
|
|
323
|
+
* 有 intelligence 时用其权威口径,否则 A2A 轨退化相位判断。
|
|
324
|
+
* 单轨不可用(如未配置 ledger)不拖垮另一轨:tracks 标注 unavailable,
|
|
325
|
+
* 明确「不可得」而非静默缺半(V2 §4:缺失数据明确显示)。
|
|
326
|
+
*/
|
|
327
|
+
async listUnifiedNegotiations(limit) {
|
|
328
|
+
const tracks = { a2a: "ok", shopping: "ok" };
|
|
329
|
+
let a2aRows = [];
|
|
330
|
+
try {
|
|
331
|
+
a2aRows = (await this.workbench.listA2aNegotiations(limit)).items;
|
|
332
|
+
}
|
|
333
|
+
catch (err) {
|
|
334
|
+
// 仅「未配置/不可用」降级为单轨;其他错误(fail-closed)照常抛出。
|
|
335
|
+
if (err instanceof MerchantWorkbenchError && err.kind === "unavailable") {
|
|
336
|
+
tracks.a2a = "unavailable";
|
|
337
|
+
}
|
|
338
|
+
else {
|
|
339
|
+
throw err;
|
|
340
|
+
}
|
|
341
|
+
}
|
|
342
|
+
const a2aNeedsReview = new Map();
|
|
343
|
+
if (this.intelligence !== undefined && tracks.a2a === "ok") {
|
|
344
|
+
const digest = await this.intelligence.getNegotiationDigest({
|
|
345
|
+
merchant_id: this.workbench.ownerIdRef,
|
|
346
|
+
status: "all",
|
|
347
|
+
limit: 100,
|
|
348
|
+
});
|
|
349
|
+
for (const d of digest)
|
|
350
|
+
a2aNeedsReview.set(d.negotiation_id, d.needs_human_review);
|
|
351
|
+
}
|
|
352
|
+
const rows = a2aRows.map((row) => fromA2aRow(row, a2aNeedsReview.get(row.negotiation_id) ?? row.phase === "AWAITING_CLARIFICATION"));
|
|
353
|
+
// shopping 会话轨(上游故障 fail-closed:错误直接透出,不混轨填充)
|
|
354
|
+
let consultations = [];
|
|
355
|
+
try {
|
|
356
|
+
consultations = await this.workbench.merchantClientRef.listIncomingConsultations(this.workbench.ownerIdRef);
|
|
357
|
+
}
|
|
358
|
+
catch {
|
|
359
|
+
tracks.shopping = "unavailable";
|
|
360
|
+
}
|
|
361
|
+
for (const c of consultations)
|
|
362
|
+
rows.push(fromShoppingConsultation(c));
|
|
363
|
+
rows.sort((a, b) => (a.updated_at > b.updated_at ? -1 : a.updated_at < b.updated_at ? 1 : 0));
|
|
364
|
+
return { total: rows.length, items: rows, tracks };
|
|
365
|
+
}
|
|
366
|
+
/** 人工处理目标列表(两轨;每条带路由标记,调用方必须按来源路由)。 */
|
|
367
|
+
async listHumanReviewTargets() {
|
|
368
|
+
const { items } = await this.listUnifiedNegotiations(100);
|
|
369
|
+
return items.filter((r) => r.needs_human_review);
|
|
370
|
+
}
|
|
371
|
+
/**
|
|
372
|
+
* 人工处理路由守卫(V2 §5.2):A2A 来源走 a2a 通道,shopping 来源走
|
|
373
|
+
* shopping 通道;跨轨调用 fail-closed 抛错。
|
|
374
|
+
*/
|
|
375
|
+
assertReviewRoute(row, channel) {
|
|
376
|
+
assertReviewRoute(row.source_protocol, channel);
|
|
377
|
+
}
|
|
378
|
+
// ---- 私密阈值(F23:管理面接缝 + 读取审计;绝不进工具结果) ---------------
|
|
379
|
+
/**
|
|
380
|
+
* 读取私密阈值(店主私密面板用;不挂 MCP 工具)。读取动作写审计记录
|
|
381
|
+
* (at/principal/keys 数量——绝不记值)。未配置审计目录时拒绝(fail-closed:
|
|
382
|
+
* 无审计不裸读私密值)。
|
|
383
|
+
*/
|
|
384
|
+
readPrivateThresholds() {
|
|
385
|
+
if (this.privateValues === undefined) {
|
|
386
|
+
return [];
|
|
387
|
+
}
|
|
388
|
+
if (this.auditDir === undefined) {
|
|
389
|
+
throw new Error("私密阈值读取需要审计目录(auditDir);无审计不裸读(fail-closed)");
|
|
390
|
+
}
|
|
391
|
+
const values = this.privateValues();
|
|
392
|
+
mkdirSync(this.auditDir, { recursive: true, mode: 0o700 });
|
|
393
|
+
appendFileSync(path.join(this.auditDir, "private-access.jsonl"), `${JSON.stringify({
|
|
394
|
+
at: this.now(),
|
|
395
|
+
principal_id: this.principalId,
|
|
396
|
+
action: "read_private_thresholds",
|
|
397
|
+
keys_count: values.length,
|
|
398
|
+
})}\n`, { mode: 0o600 });
|
|
399
|
+
return values;
|
|
400
|
+
}
|
|
401
|
+
}
|
|
402
|
+
//# sourceMappingURL=service.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"service.js","sourceRoot":"","sources":["../../src/merchant-core/service.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
|
+
/** 商家公开资料(目录公开投影;写路径同样返回该投影)。 */
|
|
17
|
+
export interface MerchantPublicationView {
|
|
18
|
+
readonly publication_id: string;
|
|
19
|
+
readonly merchant_id: string;
|
|
20
|
+
readonly merchant_display_name: string;
|
|
21
|
+
readonly title: string;
|
|
22
|
+
readonly category: string;
|
|
23
|
+
readonly summary: string;
|
|
24
|
+
readonly shop_platform: string;
|
|
25
|
+
readonly shop_url: string;
|
|
26
|
+
readonly faq: ReadonlyArray<{
|
|
27
|
+
question: string;
|
|
28
|
+
answer: string;
|
|
29
|
+
}>;
|
|
30
|
+
readonly source_kind: string;
|
|
31
|
+
readonly status: string;
|
|
32
|
+
readonly version: number;
|
|
33
|
+
readonly published_at: string;
|
|
34
|
+
readonly expires_at: string;
|
|
35
|
+
readonly updated_at: string;
|
|
36
|
+
readonly inquiry_available: false;
|
|
37
|
+
}
|
|
38
|
+
export interface PublicationDraftInput {
|
|
39
|
+
merchantDisplayName: string;
|
|
40
|
+
title: string;
|
|
41
|
+
category?: string;
|
|
42
|
+
summary?: string;
|
|
43
|
+
shopPlatform?: string;
|
|
44
|
+
shopUrl?: string;
|
|
45
|
+
faq?: ReadonlyArray<{
|
|
46
|
+
question: string;
|
|
47
|
+
answer: string;
|
|
48
|
+
}>;
|
|
49
|
+
expiresAt?: string;
|
|
50
|
+
}
|
|
51
|
+
export interface PublicationSaveResult {
|
|
52
|
+
readonly publication: MerchantPublicationView;
|
|
53
|
+
readonly created: boolean;
|
|
54
|
+
readonly idempotent: boolean;
|
|
55
|
+
}
|
|
56
|
+
export interface MerchantPublicationClientDeps {
|
|
57
|
+
/** Catalog 服务根 URL。 */
|
|
58
|
+
baseUrl: string;
|
|
59
|
+
fetchImpl?: typeof fetch;
|
|
60
|
+
timeoutMs?: number;
|
|
61
|
+
}
|
|
62
|
+
export declare class MerchantPublicationClient {
|
|
63
|
+
private readonly baseUrl;
|
|
64
|
+
private readonly deps;
|
|
65
|
+
constructor(deps: MerchantPublicationClientDeps);
|
|
66
|
+
/** 保存草稿(action=draft;发布不由入口执行)。 */
|
|
67
|
+
saveDraft(token: string, input: PublicationDraftInput): Promise<PublicationSaveResult>;
|
|
68
|
+
getPublication(token: string, publicationId: string): Promise<MerchantPublicationView>;
|
|
69
|
+
withdraw(token: string, publicationId: string): Promise<MerchantPublicationView>;
|
|
70
|
+
private request;
|
|
71
|
+
}
|