@xgspz/base-sdk 0.0.0-stage → 1.0.5
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/express.d.ts +30 -0
- package/dist/express.d.ts.map +1 -0
- package/dist/express.js +37 -0
- package/dist/index.d.ts +246 -0
- package/dist/index.d.ts.map +1 -0
- package/dist/index.js +383 -0
- package/dist/index.test.d.ts +2 -0
- package/dist/index.test.d.ts.map +1 -0
- package/dist/index.test.js +219 -0
- package/dist/storage-upload.d.ts +25 -0
- package/dist/storage-upload.d.ts.map +1 -0
- package/dist/storage-upload.js +102 -0
- package/dist/storage-upload.test.d.ts +2 -0
- package/dist/storage-upload.test.d.ts.map +1 -0
- package/dist/storage-upload.test.js +97 -0
- package/package.json +24 -4
- package/src/express.ts +53 -0
- package/src/index.test.ts +231 -0
- package/src/index.ts +529 -0
- package/src/storage-upload.test.ts +82 -0
- package/src/storage-upload.ts +101 -0
- package/tsconfig.json +16 -0
- package/README.md +0 -3
|
@@ -0,0 +1,30 @@
|
|
|
1
|
+
import type { NextFunction, Request, Response } from "express";
|
|
2
|
+
import type { InternalUserLookup } from "@xgspz/contracts";
|
|
3
|
+
/** 通过基础服务校验后的终端用户。与 ActingUser(只含 personId)不是一回事。 */
|
|
4
|
+
export interface AuthenticatedUser {
|
|
5
|
+
accessToken: string;
|
|
6
|
+
personId: string;
|
|
7
|
+
userId: string;
|
|
8
|
+
empId: string | null;
|
|
9
|
+
userName: string;
|
|
10
|
+
/** 平台部门。业务服务的准入控制按它判断,没有部门时是空数组。 */
|
|
11
|
+
departments: Array<{
|
|
12
|
+
id: string;
|
|
13
|
+
name: string;
|
|
14
|
+
isMain: boolean;
|
|
15
|
+
}>;
|
|
16
|
+
/** Base「用户与服务权限」里这个人在本服务上的角色,没授权(或 Base 是旧版)为 null。 */
|
|
17
|
+
serviceRole: NonNullable<InternalUserLookup["serviceRole"]> | null;
|
|
18
|
+
}
|
|
19
|
+
export type AuthRequest = Request & {
|
|
20
|
+
actor?: AuthenticatedUser;
|
|
21
|
+
};
|
|
22
|
+
/**
|
|
23
|
+
* 业务服务的用户鉴权中间件。
|
|
24
|
+
*
|
|
25
|
+
* 业务服务不自己发会话,也不能直接相信前端传来的头,一律回基础服务校验。
|
|
26
|
+
* verifier 内部有短 TTL 缓存,不会每个请求都往返。
|
|
27
|
+
*/
|
|
28
|
+
export declare function requireUser(verify: (token: string, personId: string) => Promise<InternalUserLookup>): (req: Request, _res: Response, next: NextFunction) => Promise<void>;
|
|
29
|
+
export declare function actor(req: Request): AuthenticatedUser;
|
|
30
|
+
//# sourceMappingURL=express.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"express.d.ts","sourceRoot":"","sources":["../src/express.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,YAAY,EAAE,OAAO,EAAE,QAAQ,EAAE,MAAM,SAAS,CAAC;AAE/D,OAAO,KAAK,EAAE,kBAAkB,EAAE,MAAM,kBAAkB,CAAC;AAE3D,qDAAqD;AACrD,MAAM,WAAW,iBAAiB;IAChC,WAAW,EAAE,MAAM,CAAC;IACpB,QAAQ,EAAE,MAAM,CAAC;IACjB,MAAM,EAAE,MAAM,CAAC;IACf,KAAK,EAAE,MAAM,GAAG,IAAI,CAAC;IACrB,QAAQ,EAAE,MAAM,CAAC;IACjB,oCAAoC;IACpC,WAAW,EAAE,KAAK,CAAC;QAAE,EAAE,EAAE,MAAM,CAAC;QAAC,IAAI,EAAE,MAAM,CAAC;QAAC,MAAM,EAAE,OAAO,CAAA;KAAE,CAAC,CAAC;IAClE,uDAAuD;IACvD,WAAW,EAAE,WAAW,CAAC,kBAAkB,CAAC,aAAa,CAAC,CAAC,GAAG,IAAI,CAAC;CACpE;AAED,MAAM,MAAM,WAAW,GAAG,OAAO,GAAG;IAAE,KAAK,CAAC,EAAE,iBAAiB,CAAA;CAAE,CAAC;AAElE;;;;;GAKG;AACH,wBAAgB,WAAW,CAAC,MAAM,EAAE,CAAC,KAAK,EAAE,MAAM,EAAE,QAAQ,EAAE,MAAM,KAAK,OAAO,CAAC,kBAAkB,CAAC,IACjE,KAAK,OAAO,EAAE,MAAM,QAAQ,EAAE,MAAM,YAAY,mBAoBlF;AAED,wBAAgB,KAAK,CAAC,GAAG,EAAE,OAAO,GAAG,iBAAiB,CAIrD"}
|
package/dist/express.js
ADDED
|
@@ -0,0 +1,37 @@
|
|
|
1
|
+
import { apiError } from "@xgspz/service-kit";
|
|
2
|
+
/**
|
|
3
|
+
* 业务服务的用户鉴权中间件。
|
|
4
|
+
*
|
|
5
|
+
* 业务服务不自己发会话,也不能直接相信前端传来的头,一律回基础服务校验。
|
|
6
|
+
* verifier 内部有短 TTL 缓存,不会每个请求都往返。
|
|
7
|
+
*/
|
|
8
|
+
export function requireUser(verify) {
|
|
9
|
+
return async function middleware(req, _res, next) {
|
|
10
|
+
try {
|
|
11
|
+
const token = String(req.header("access-token") || req.header("authorization")?.replace(/^Bearer\s+/i, "") || "").trim();
|
|
12
|
+
const personId = String(req.header("personId") || req.header("person-id") || "").trim();
|
|
13
|
+
if (!token || !personId)
|
|
14
|
+
throw apiError("缺少 access-token 或 personId", "UNAUTHORIZED");
|
|
15
|
+
const user = await verify(token, personId);
|
|
16
|
+
req.actor = {
|
|
17
|
+
accessToken: token,
|
|
18
|
+
personId: user.personId,
|
|
19
|
+
userId: user.userId,
|
|
20
|
+
empId: user.empId,
|
|
21
|
+
userName: user.userName,
|
|
22
|
+
departments: user.departments ?? [],
|
|
23
|
+
serviceRole: user.serviceRole ?? null,
|
|
24
|
+
};
|
|
25
|
+
next();
|
|
26
|
+
}
|
|
27
|
+
catch (error) {
|
|
28
|
+
next(error);
|
|
29
|
+
}
|
|
30
|
+
};
|
|
31
|
+
}
|
|
32
|
+
export function actor(req) {
|
|
33
|
+
const value = req.actor;
|
|
34
|
+
if (!value)
|
|
35
|
+
throw apiError("未登录", "UNAUTHORIZED");
|
|
36
|
+
return value;
|
|
37
|
+
}
|
package/dist/index.d.ts
ADDED
|
@@ -0,0 +1,246 @@
|
|
|
1
|
+
import type { HuiJiDetailResult, InternalCollaborationRequest, InternalCollaborationDetail, InternalEmployee, InternalCredential, InternalCredentialRequest, InternalCollaborationResult, InternalJobRequest, InternalConversationRequest, InternalConversationResult, InternalConversationMessageRequest, InternalConversationTurn, InternalJobResult, InternalOrigin, InternalTodoRequest, InternalTodoResult, InternalUploadResult, InternalUploadTextRequest, InternalAttachmentTextRequest, InternalAttachmentResult, InternalUserLookup, InternalJobLineToken, InternalDepartment } from "@xgspz/contracts";
|
|
2
|
+
import type { MediaImageRequest, MediaImageResult, MediaQuota, MediaVisionRequest, MediaVisionResult, StorageFetchResult, StorageStat, StorageUploadTicket } from "@xgspz/contracts";
|
|
3
|
+
import type { InternalVoiceCall, InternalVoiceCallBatchRequest, InternalVoiceCallBatchResult, InternalVoiceCallRequest, InternalVoiceInboundRoute, InternalVoiceInboundRouteRequest, VoiceConfigView, VoiceQueueStatus } from "@xgspz/contracts";
|
|
4
|
+
/**
|
|
5
|
+
* 基础服务客户端。业务服务只依赖这个包,不直接认识平台接口。
|
|
6
|
+
*
|
|
7
|
+
* 设计要点:
|
|
8
|
+
* - 每次调用都要显式声明 `actingPersonId`(代表谁操作)。不提供"系统身份"
|
|
9
|
+
* 的默认值,因为平台侧的发起人必须是真实的人,审计也要能追到责任人。
|
|
10
|
+
* - 写操作强制 `idempotencyKey`:网络重试、业务重投都不会造成重复送达。
|
|
11
|
+
* - 只对**读**和网络层错误重试;写操作交给基础服务的幂等键兜底。
|
|
12
|
+
*/
|
|
13
|
+
export declare class BaseServiceError extends Error {
|
|
14
|
+
readonly code: string;
|
|
15
|
+
readonly status: number;
|
|
16
|
+
constructor(message: string, code: string, status: number);
|
|
17
|
+
}
|
|
18
|
+
export interface BaseClientOptions {
|
|
19
|
+
/** 基础服务地址,如 http://xg-base:4000。 */
|
|
20
|
+
baseUrl: string;
|
|
21
|
+
/** 本服务名,必须与基础服务 SERVICE_TOKENS 里登记的一致。 */
|
|
22
|
+
serviceName: string;
|
|
23
|
+
/** 本服务的服务令牌。 */
|
|
24
|
+
serviceToken: string;
|
|
25
|
+
timeoutMs?: number;
|
|
26
|
+
/** 只作用于读操作。 */
|
|
27
|
+
retries?: number;
|
|
28
|
+
}
|
|
29
|
+
export interface ActingUser {
|
|
30
|
+
/** 平台 personId。该用户必须在基础服务中存在(至少登录过一次)。 */
|
|
31
|
+
personId: string;
|
|
32
|
+
/** 当前登录用户调用第三方平台时使用的 access-token。 */
|
|
33
|
+
accessToken?: string;
|
|
34
|
+
}
|
|
35
|
+
/**
|
|
36
|
+
* 校验基础服务发来的语音请求(turnUrl 的每一轮、notifyUrl 的通话结果)确实出自基础服务、说的确实是这一通电话。
|
|
37
|
+
* 基础服务用**本服务的服务令牌**对「时间戳.通话 id」做 HMAC-SHA256,放在 X-Base-Timestamp / X-Base-Signature 两个头里。
|
|
38
|
+
* callId 取请求体里的:每一轮是 `body.callId`,通话结果是 `body.call.id`。时间戳超过容差(默认 5 分钟)的一律不认,防重放。
|
|
39
|
+
*/
|
|
40
|
+
export declare function verifyVoiceSignature(input: {
|
|
41
|
+
headers: Record<string, string | string[] | undefined>;
|
|
42
|
+
callId: string;
|
|
43
|
+
serviceToken: string;
|
|
44
|
+
toleranceMs?: number;
|
|
45
|
+
now?: number;
|
|
46
|
+
}): boolean;
|
|
47
|
+
export declare class BaseClient {
|
|
48
|
+
private readonly options;
|
|
49
|
+
private readonly baseUrl;
|
|
50
|
+
private readonly timeoutMs;
|
|
51
|
+
private readonly retries;
|
|
52
|
+
constructor(options: BaseClientOptions);
|
|
53
|
+
get configured(): boolean;
|
|
54
|
+
/** 音频生成不自动重试;TTS 调用可能计费。调用方应设置足够的 timeoutMs。 */
|
|
55
|
+
generateAudio(input: {
|
|
56
|
+
text: string;
|
|
57
|
+
provider?: "doubao" | "minimax";
|
|
58
|
+
voiceId?: string;
|
|
59
|
+
speed?: number;
|
|
60
|
+
}, acting: ActingUser): Promise<{
|
|
61
|
+
provider: string;
|
|
62
|
+
voiceId: string;
|
|
63
|
+
audioUrl: string;
|
|
64
|
+
}>;
|
|
65
|
+
/**
|
|
66
|
+
* 生图:基础服务先扣额度,主模型失败换备用(审核拦截不换),结果立即转存对象存储。
|
|
67
|
+
* 可能要几分钟;不自动重试(每次调用都计次数),重试请带同一个 idempotencyKey。
|
|
68
|
+
*/
|
|
69
|
+
generateImage(input: MediaImageRequest, acting: ActingUser, opts?: {
|
|
70
|
+
timeoutMs?: number;
|
|
71
|
+
}): Promise<MediaImageResult>;
|
|
72
|
+
/** 看图:多张图 + 提示词,可要求按 JSON 回答。不自动重试(计次数)。 */
|
|
73
|
+
analyzeImages(input: MediaVisionRequest, acting: ActingUser, opts?: {
|
|
74
|
+
timeoutMs?: number;
|
|
75
|
+
}): Promise<MediaVisionResult>;
|
|
76
|
+
/** 当天的生图 / 看图额度。 */
|
|
77
|
+
mediaQuota(acting: ActingUser): Promise<MediaQuota>;
|
|
78
|
+
/** 对象存储上传令牌:只对 svc/<本服务>/<keySuffix> 这一个 key 有效、只能新建。配合 uploadToStorage 直传。 */
|
|
79
|
+
storageUploadToken(input: {
|
|
80
|
+
keySuffix: string;
|
|
81
|
+
maxBytes?: number;
|
|
82
|
+
}, acting: ActingUser): Promise<StorageUploadTicket>;
|
|
83
|
+
/** 让基础服务代为下载一个地址并存进对象存储(例如会失效的外部链接)。 */
|
|
84
|
+
fetchIntoStorage(input: {
|
|
85
|
+
url: string;
|
|
86
|
+
keySuffix?: string;
|
|
87
|
+
}, acting: ActingUser): Promise<StorageFetchResult>;
|
|
88
|
+
/** 本服务对象的短期签名下载链接(不要入库)。 */
|
|
89
|
+
signStorageUrls(input: {
|
|
90
|
+
keys: string[];
|
|
91
|
+
expiresSec?: number;
|
|
92
|
+
downloadName?: string;
|
|
93
|
+
}, acting: ActingUser): Promise<{
|
|
94
|
+
urls: Record<string, string>;
|
|
95
|
+
}>;
|
|
96
|
+
statStorage(key: string, acting: ActingUser): Promise<StorageStat>;
|
|
97
|
+
/**
|
|
98
|
+
* 在自己的 turnUrl / notifyUrl 处理函数里调:确认请求出自基础服务。
|
|
99
|
+
* 每一轮传 `body.callId`,通话结果传 `body.call.id`。返回 false 就回 401,不要处理。
|
|
100
|
+
*/
|
|
101
|
+
verifyVoiceRequest(headers: Record<string, string | string[] | undefined>, callId: string): boolean;
|
|
102
|
+
/** 语音外呼是否已配置好(不含任何密钥和回调地址)。 */
|
|
103
|
+
voiceConfig(acting: ActingUser): Promise<VoiceConfigView>;
|
|
104
|
+
/**
|
|
105
|
+
* 提交一通外呼。**只是排队**:基础服务按并发上限和拨号间隔一通一通拨出,所以返回的状态通常是 QUEUED,
|
|
106
|
+
* 结果通过 notifyUrl 送回(或用 getVoiceCall 查)。接通后先说 greeting,之后对方每说一句,
|
|
107
|
+
* 基础服务把文字 POST 到 turnUrl,由业务回下一句;不传 turnUrl 用内置示例对话。
|
|
108
|
+
* 重试请带同一个 idempotencyKey:已经排上或拨出的不会多打一通。
|
|
109
|
+
*/
|
|
110
|
+
startVoiceCall(input: InternalVoiceCallRequest, acting: ActingUser): Promise<InternalVoiceCall>;
|
|
111
|
+
/**
|
|
112
|
+
* 批量提交(一次最多 500 通,再多就分几次调)。每一通各自校验、各自幂等,结果逐条返回;
|
|
113
|
+
* 一通号码写错不影响其它的。上千人的调研也是这样全部交进来排队,拨出的节奏由基础服务控制。
|
|
114
|
+
*/
|
|
115
|
+
startVoiceCalls(input: InternalVoiceCallBatchRequest, acting: ActingUser): Promise<InternalVoiceCallBatchResult>;
|
|
116
|
+
/** 取消某个业务对象名下所有还在排队的外呼(比如调研被叫停);不传 entityId 就是这一类全部。已拨出的不受影响。 */
|
|
117
|
+
cancelQueuedVoiceCalls(input: {
|
|
118
|
+
entityType: string;
|
|
119
|
+
entityId?: string;
|
|
120
|
+
}, acting: ActingUser): Promise<{
|
|
121
|
+
cancelled: number;
|
|
122
|
+
}>;
|
|
123
|
+
/** 外呼队列现状:排队多少、正在打多少、并发上限、是否在外呼时段、是否被暂停。 */
|
|
124
|
+
voiceQueue(acting: ActingUser): Promise<VoiceQueueStatus>;
|
|
125
|
+
/** 通话状态和全程文字记录。只能查本服务发起(或归本服务接听)的通话。 */
|
|
126
|
+
getVoiceCall(callId: string, acting: ActingUser): Promise<InternalVoiceCall>;
|
|
127
|
+
/** 不想打了:还在排队的直接取消;已拨出的在对方下一次说话或沉默时挂断(平台没有即时挂断接口)。 */
|
|
128
|
+
hangupVoiceCall(callId: string, acting: ActingUser): Promise<InternalVoiceCall>;
|
|
129
|
+
/** 本服务登记的呼入路由(哪些号码的来电归本服务接)。 */
|
|
130
|
+
listVoiceInboundRoutes(acting: ActingUser): Promise<InternalVoiceInboundRoute[]>;
|
|
131
|
+
/** 登记或更新一条呼入路由。号码已登记给别的服务时返回 409。 */
|
|
132
|
+
saveVoiceInboundRoute(input: InternalVoiceInboundRouteRequest, acting: ActingUser): Promise<InternalVoiceInboundRoute>;
|
|
133
|
+
deleteVoiceInboundRoute(number: string, acting: ActingUser): Promise<{
|
|
134
|
+
deleted: boolean;
|
|
135
|
+
}>;
|
|
136
|
+
private headers;
|
|
137
|
+
private call;
|
|
138
|
+
/** 探活。业务服务的 /api/health 用它报告依赖状态。 */
|
|
139
|
+
ping(): Promise<{
|
|
140
|
+
ok: boolean;
|
|
141
|
+
message?: string;
|
|
142
|
+
}>;
|
|
143
|
+
/**
|
|
144
|
+
* 校验终端用户会话。业务服务的鉴权中间件用它。
|
|
145
|
+
* 结果建议缓存几十秒——不缓存的话每个业务请求都多一次内网往返。
|
|
146
|
+
*/
|
|
147
|
+
verifySession(token: string, personId: string, acting: ActingUser): Promise<InternalUserLookup>;
|
|
148
|
+
/** 查人。发工作协同前用它补齐 empId。 */
|
|
149
|
+
lookupUser(personId: string, acting: ActingUser): Promise<InternalUserLookup>;
|
|
150
|
+
/** 按姓名查工作协同员工(姓名完全一致;重名全部返回)。 */
|
|
151
|
+
searchEmployees(name: string, acting: ActingUser): Promise<InternalEmployee[]>;
|
|
152
|
+
/** 平台上出现过的部门(来自登录过的人的 deptList),用于按部门授权。 */
|
|
153
|
+
listDepartments(acting: ActingUser): Promise<InternalDepartment[]>;
|
|
154
|
+
sendCollaboration(input: Omit<InternalCollaborationRequest, "origin"> & {
|
|
155
|
+
origin: InternalOrigin;
|
|
156
|
+
}, acting: ActingUser): Promise<InternalCollaborationResult>;
|
|
157
|
+
sendTodo(input: InternalTodoRequest, acting: ActingUser): Promise<InternalTodoResult>;
|
|
158
|
+
revokeTodo(todoId: string, acting: ActingUser): Promise<InternalTodoResult>;
|
|
159
|
+
/**
|
|
160
|
+
* 把自己发的待办标为已办。已办过再调返回当前状态,不算错误。
|
|
161
|
+
* force=true:本地已记为已办的也再回写一次(代收件人回写时平台可能静默不生效,需要补办)。
|
|
162
|
+
*/
|
|
163
|
+
completeTodo(todoId: string, acting: ActingUser, options?: {
|
|
164
|
+
force?: boolean;
|
|
165
|
+
}): Promise<InternalTodoResult>;
|
|
166
|
+
/**
|
|
167
|
+
* 登记一把平台凭据(AppKey)。同 scope+label 再登记一次就是换 key。
|
|
168
|
+
* 明文只进不出:返回里没有 appKey,只有末四位。
|
|
169
|
+
*/
|
|
170
|
+
saveCredential(input: InternalCredentialRequest, acting: ActingUser): Promise<InternalCredential>;
|
|
171
|
+
listCredentials(scope: string, acting: ActingUser): Promise<InternalCredential[]>;
|
|
172
|
+
updateCredential(id: string, input: {
|
|
173
|
+
label?: string;
|
|
174
|
+
role?: string;
|
|
175
|
+
usage?: string;
|
|
176
|
+
enabled?: boolean;
|
|
177
|
+
}, acting: ActingUser): Promise<InternalCredential>;
|
|
178
|
+
deleteCredential(id: string, acting: ActingUser): Promise<{
|
|
179
|
+
deleted: boolean;
|
|
180
|
+
}>;
|
|
181
|
+
/** 本服务的产品线 Token 状态。明文永远不回传,只有末四位。 */
|
|
182
|
+
jobLineToken(acting: ActingUser): Promise<InternalJobLineToken>;
|
|
183
|
+
/** 配置本服务的产品线 Token。每个业务一把,互不共用。 */
|
|
184
|
+
saveJobLineToken(input: {
|
|
185
|
+
token: string;
|
|
186
|
+
label?: string;
|
|
187
|
+
}, acting: ActingUser): Promise<InternalJobLineToken>;
|
|
188
|
+
deleteJobLineToken(acting: ActingUser): Promise<InternalJobLineToken>;
|
|
189
|
+
/** 按工作协同汇报记录 ID 拉回详情(正文、回复、各节点处理意见)。只能拉本服务自己发出的。 */
|
|
190
|
+
getCollaborationDetail(recordId: string, acting: ActingUser, options?: {
|
|
191
|
+
includeAssociated?: boolean;
|
|
192
|
+
}): Promise<InternalCollaborationDetail>;
|
|
193
|
+
createJob(input: InternalJobRequest, acting: ActingUser): Promise<InternalJobResult>;
|
|
194
|
+
/** 取消自己发的 Job。重复取消不算错误,会直接返回当前状态。 */
|
|
195
|
+
cancelJob(jobId: string, acting: ActingUser): Promise<InternalJobResult>;
|
|
196
|
+
/** 重试自己发出的 Job 失败子任务。 */
|
|
197
|
+
retryJob(jobId: string, acting: ActingUser, taskKeys?: string[]): Promise<InternalJobResult>;
|
|
198
|
+
getJob(jobId: string, acting: ActingUser): Promise<InternalJobResult & {
|
|
199
|
+
tasks: Array<{
|
|
200
|
+
taskKey: string;
|
|
201
|
+
status: string;
|
|
202
|
+
errorMessage: string | null;
|
|
203
|
+
}>;
|
|
204
|
+
}>;
|
|
205
|
+
/** 建对话任务(任务中心 mode=conversation):firstMessage 是第 1 轮,之后每条消息一轮,每轮结果转发到 notifyUrl。 */
|
|
206
|
+
createConversation(input: InternalConversationRequest, acting: ActingUser): Promise<InternalConversationResult>;
|
|
207
|
+
/** 发一条消息 = 一轮。带 businessId 时重复提交只算一轮。 */
|
|
208
|
+
sendConversationMessage(conversationId: string, input: InternalConversationMessageRequest, acting: ActingUser): Promise<InternalConversationResult>;
|
|
209
|
+
getConversation(conversationId: string, acting: ActingUser): Promise<InternalConversationResult>;
|
|
210
|
+
/** 回调之外的兜底:直接问任务中心各轮状态。 */
|
|
211
|
+
getConversationTurns(conversationId: string, acting: ActingUser, afterSeq?: number): Promise<{
|
|
212
|
+
externalJobId?: string;
|
|
213
|
+
turns: InternalConversationTurn[];
|
|
214
|
+
}>;
|
|
215
|
+
/** 结束对话。重复结束不算错误。 */
|
|
216
|
+
closeConversation(conversationId: string, acting: ActingUser): Promise<InternalConversationResult>;
|
|
217
|
+
/** 把文本变成工作协同附件(只生成物理资源,不进知识库,不需要知识库配置)。附件最大 50MB,上传对象存储要时间,默认等 3 分钟。 */
|
|
218
|
+
uploadAttachmentText(input: InternalAttachmentTextRequest, acting: ActingUser, opts?: {
|
|
219
|
+
timeoutMs?: number;
|
|
220
|
+
}): Promise<InternalAttachmentResult>;
|
|
221
|
+
/**
|
|
222
|
+
* 以当前用户本人身份读取慧记会议的完整正文(逐段发言 + 整理纪要)。只读,不生成附件。
|
|
223
|
+
* 必须带 acting.accessToken:慧记是「我的数据」。一次最多 10 场。
|
|
224
|
+
*/
|
|
225
|
+
fetchHuiJiDetails(items: Array<string | {
|
|
226
|
+
id: string;
|
|
227
|
+
title?: string;
|
|
228
|
+
}>, acting: ActingUser): Promise<HuiJiDetailResult>;
|
|
229
|
+
uploadText(input: InternalUploadTextRequest, acting: ActingUser): Promise<InternalUploadResult>;
|
|
230
|
+
}
|
|
231
|
+
/** 从环境变量装配客户端,避免每个业务服务重复写一遍。 */
|
|
232
|
+
export declare function createBaseClient(env: NodeJS.ProcessEnv, serviceName: string): BaseClient;
|
|
233
|
+
export type { InternalJobNotification, InternalOrigin, InternalConversationNotification, InternalConversationResult, InternalConversationTurn } from "@xgspz/contracts";
|
|
234
|
+
export type { InternalVoiceCall, InternalVoiceCallBatchRequest, InternalVoiceCallBatchResult, InternalVoiceCallNotification, InternalVoiceCallRequest, VoiceCallOutcome, VoiceQueueStatus, InternalVoiceInboundRoute, InternalVoiceInboundRouteRequest, InternalVoiceTurnReply, InternalVoiceTurnRequest, } from "@xgspz/contracts";
|
|
235
|
+
/**
|
|
236
|
+
* 业务服务的用户鉴权中间件工厂。
|
|
237
|
+
*
|
|
238
|
+
* 前端把 access-token + personId 传给业务服务,业务服务**不能**直接相信它们,
|
|
239
|
+
* 必须回基础服务验一次。这里带一个短 TTL 的内存缓存,避免每个请求都往返。
|
|
240
|
+
*/
|
|
241
|
+
export declare function createSessionVerifier(client: BaseClient, options?: {
|
|
242
|
+
ttlMs?: number;
|
|
243
|
+
}): (token: string, personId: string) => Promise<InternalUserLookup>;
|
|
244
|
+
export { requireUser, actor, type AuthenticatedUser, type AuthRequest } from "./express.js";
|
|
245
|
+
export { uploadToStorage, StorageUploadError } from "./storage-upload.js";
|
|
246
|
+
//# sourceMappingURL=index.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"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"}
|