@downcity/city 0.2.211 → 0.2.213
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 +15 -7
- package/bin/client/bureau.d.ts +26 -11
- package/bin/client/bureau.d.ts.map +1 -1
- package/bin/client/bureau.js +47 -34
- package/bin/client/bureau.js.map +1 -1
- package/bin/client/city.d.ts +7 -0
- package/bin/client/city.d.ts.map +1 -1
- package/bin/client/city.js +40 -0
- package/bin/client/city.js.map +1 -1
- package/bin/client/types.d.ts +2 -2
- package/bin/client/types.js +2 -2
- package/bin/federation/auth/authenticator.d.ts +2 -5
- package/bin/federation/auth/authenticator.d.ts.map +1 -1
- package/bin/federation/auth/authenticator.js +4 -9
- package/bin/federation/auth/authenticator.js.map +1 -1
- package/bin/federation/auth/bureau-token-schema.d.ts +1 -73
- package/bin/federation/auth/bureau-token-schema.d.ts.map +1 -1
- package/bin/federation/auth/bureau-token-schema.js +1 -9
- package/bin/federation/auth/bureau-token-schema.js.map +1 -1
- package/bin/federation/auth/bureau-token-store.d.ts +3 -3
- package/bin/federation/auth/bureau-token-store.d.ts.map +1 -1
- package/bin/federation/auth/bureau-token-store.js +4 -31
- package/bin/federation/auth/bureau-token-store.js.map +1 -1
- package/bin/federation/federation-router.d.ts +1 -3
- package/bin/federation/federation-router.d.ts.map +1 -1
- package/bin/federation/federation-router.js +0 -1
- package/bin/federation/federation-router.js.map +1 -1
- package/bin/index.d.ts +1 -3
- package/bin/index.d.ts.map +1 -1
- package/bin/index.js +0 -1
- package/bin/index.js.map +1 -1
- package/bin/pact/admin/index.d.ts +2 -2
- package/bin/pact/admin/index.js +4 -4
- package/bin/pact/admin/index.js.map +1 -1
- package/bin/pact/admin/types.d.ts +3 -3
- package/bin/pact/admin/types.d.ts.map +1 -1
- package/bin/pact/invoker/bureaus/index.d.ts +3 -3
- package/bin/pact/invoker/bureaus/index.d.ts.map +1 -1
- package/bin/pact/invoker/bureaus/index.js +3 -3
- package/bin/pact/invoker/bureaus/index.js.map +1 -1
- package/bin/service/ai/ai-service.d.ts +1 -1
- package/bin/service/ai/ai-service.d.ts.map +1 -1
- package/bin/service/ai/model-registry.d.ts +1 -1
- package/bin/service/ai/model-registry.d.ts.map +1 -1
- package/bin/service/bureaus/bureaus-service.d.ts +2 -4
- package/bin/service/bureaus/bureaus-service.d.ts.map +1 -1
- package/bin/service/bureaus/bureaus-service.js +4 -23
- package/bin/service/bureaus/bureaus-service.js.map +1 -1
- package/bin/service/installable-service.d.ts +2 -5
- package/bin/service/installable-service.d.ts.map +1 -1
- package/bin/service/installable-service.js +0 -1
- package/bin/service/installable-service.js.map +1 -1
- package/bin/service/service.d.ts +1 -4
- package/bin/service/service.d.ts.map +1 -1
- package/bin/service/service.js.map +1 -1
- package/bin/types/Bureau.d.ts +5 -37
- package/bin/types/Bureau.d.ts.map +1 -1
- package/bin/types/Bureau.js +2 -2
- package/package.json +2 -2
- package/bin/client/federation-admin.d.ts +0 -32
- package/bin/client/federation-admin.d.ts.map +0 -1
- package/bin/client/federation-admin.js +0 -54
- package/bin/client/federation-admin.js.map +0 -1
- package/bin/types/FederationAdmin.d.ts +0 -16
- package/bin/types/FederationAdmin.d.ts.map +0 -1
- package/bin/types/FederationAdmin.js +0 -7
- package/bin/types/FederationAdmin.js.map +0 -1
package/README.md
CHANGED
|
@@ -236,7 +236,7 @@ City 直接访问 Federation,不依赖 Bureau。只有产品需要自己的后
|
|
|
236
236
|
`fed bureau token` 登记并部署 Bureau:
|
|
237
237
|
|
|
238
238
|
```bash
|
|
239
|
-
fed bureau token
|
|
239
|
+
fed bureau token
|
|
240
240
|
```
|
|
241
241
|
|
|
242
242
|
命令生成的高熵 `bureau_token` 只显示一次,Federation 数据库只保存 hash。将明文
|
|
@@ -247,7 +247,8 @@ DOWNCITY_FEDERATION_URL=https://fed.example.com
|
|
|
247
247
|
DOWNCITY_BUREAU_TOKEN=fb_br_xxx.secret
|
|
248
248
|
```
|
|
249
249
|
|
|
250
|
-
Bureau
|
|
250
|
+
Bureau 使用 Federation JWKS 在本地识别请求身份,并通过 `bureau_token` 调用 Federation
|
|
251
|
+
管理 API:
|
|
251
252
|
|
|
252
253
|
```ts
|
|
253
254
|
const bureau = new Bureau({
|
|
@@ -257,19 +258,27 @@ const bureau = new Bureau({
|
|
|
257
258
|
|
|
258
259
|
const identity = await bureau.identify(request);
|
|
259
260
|
const profile = await (await bureau.user(request)).profile();
|
|
261
|
+
|
|
262
|
+
await bureau.cities.list();
|
|
260
263
|
```
|
|
261
264
|
|
|
262
|
-
|
|
265
|
+
City 访问 Bureau 的独立服务时,使用 JSON `get()` / `post()` 自动注入当前 `user_token`:
|
|
263
266
|
|
|
264
267
|
```ts
|
|
265
|
-
const
|
|
268
|
+
const city = new City({
|
|
266
269
|
federation_url: "https://fed.example.com",
|
|
267
|
-
|
|
270
|
+
user_token,
|
|
268
271
|
});
|
|
269
272
|
|
|
270
|
-
await
|
|
273
|
+
const result = await city.post(
|
|
274
|
+
"https://bureau.example.com/reports/summary",
|
|
275
|
+
{ range: "today" },
|
|
276
|
+
);
|
|
271
277
|
```
|
|
272
278
|
|
|
279
|
+
`Bureau` 不绑定 `city_id`。`identify()` 返回 `user_token` 中的 `city_id`,由 Bureau 自己
|
|
280
|
+
决定是否允许该产品访问某个独立服务。
|
|
281
|
+
|
|
273
282
|
## 主要导出
|
|
274
283
|
|
|
275
284
|
- `City`
|
|
@@ -281,7 +290,6 @@ await admin.bureaus.list();
|
|
|
281
290
|
- `CityModel`
|
|
282
291
|
- `CityModelDescriptor`
|
|
283
292
|
- `Bureau`
|
|
284
|
-
- `FederationAdmin`
|
|
285
293
|
- `EnvService`
|
|
286
294
|
- `CitiesService`
|
|
287
295
|
|
package/bin/client/bureau.d.ts
CHANGED
|
@@ -1,11 +1,14 @@
|
|
|
1
1
|
/**
|
|
2
|
-
* Bureau
|
|
2
|
+
* Bureau 管理与独立服务节点客户端。
|
|
3
3
|
*
|
|
4
|
-
* Bureau
|
|
5
|
-
*
|
|
6
|
-
* Federation
|
|
4
|
+
* Bureau 使用 Bureau Token 管理 Federation,并使用 Federation JWKS 在本地
|
|
5
|
+
* 验证独立服务收到的 user_token。Bureau 不绑定 City,一个实例可以服务同一
|
|
6
|
+
* Federation 下的多个 City。
|
|
7
7
|
*/
|
|
8
|
-
import type {
|
|
8
|
+
import type { BureauFetch, BureauIdentity, BureauOptions } from "../types/Bureau.js";
|
|
9
|
+
import { AdminPactAccess } from "../pact/admin/index.js";
|
|
10
|
+
import type { ServiceClient } from "../pact/invoker/invoker.js";
|
|
11
|
+
import type { AdminModelRecord, AdminServiceSummary } from "../pact/admin/types.js";
|
|
9
12
|
import type { UserProfile } from "../types/User.js";
|
|
10
13
|
/** 已通过本地验签的用户后端会话。 */
|
|
11
14
|
export declare class BureauUser {
|
|
@@ -18,19 +21,31 @@ export declare class BureauUser {
|
|
|
18
21
|
/** 在线读取 Federation 当前用户 Profile。 */
|
|
19
22
|
profile(): Promise<UserProfile | null>;
|
|
20
23
|
}
|
|
21
|
-
/** Bureau
|
|
24
|
+
/** Bureau 管理与独立服务节点客户端。 */
|
|
22
25
|
export declare class Bureau {
|
|
23
|
-
/** 当前 Bureau 绑定的 City ID;首次读取上下文后可用。 */
|
|
24
|
-
get city_id(): string | undefined;
|
|
25
26
|
private readonly federation_url;
|
|
26
|
-
private readonly bureau_token;
|
|
27
27
|
private readonly fetcher;
|
|
28
28
|
private readonly cache_ttl;
|
|
29
|
+
private readonly admin_access;
|
|
29
30
|
private cache?;
|
|
30
31
|
private refresh_promise?;
|
|
31
32
|
constructor(options: BureauOptions);
|
|
32
|
-
/**
|
|
33
|
-
|
|
33
|
+
/** Federation 余额管理入口。 */
|
|
34
|
+
get balance(): AdminPactAccess["balance"];
|
|
35
|
+
/** Federation City 管理入口。 */
|
|
36
|
+
get cities(): AdminPactAccess["cities"];
|
|
37
|
+
/** Federation Bureau Token 注册表管理入口。 */
|
|
38
|
+
get bureaus(): AdminPactAccess["bureaus"];
|
|
39
|
+
/** Federation 环境变量管理入口。 */
|
|
40
|
+
get env(): AdminPactAccess["env"];
|
|
41
|
+
/** 获取 Federation 管理身份下的 Service 调用器。 */
|
|
42
|
+
service(name: string): ServiceClient;
|
|
43
|
+
/** 列出 Federation 暴露的 Service。 */
|
|
44
|
+
listServices(): Promise<AdminServiceSummary[]>;
|
|
45
|
+
/** 列出 Federation 模型目录及管理状态。 */
|
|
46
|
+
listModels(): Promise<AdminModelRecord[]>;
|
|
47
|
+
/** 读取 Federation 聚合说明文档。 */
|
|
48
|
+
instruction(): Promise<string>;
|
|
34
49
|
/** 从 HTTP Request 或 user_token 中本地识别 Federation 用户。 */
|
|
35
50
|
identify(input: Request | string): Promise<BureauIdentity>;
|
|
36
51
|
/** 验证请求并创建一个可读取 Federation 用户数据的会话。 */
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"bureau.d.ts","sourceRoot":"","sources":["../../src/client/bureau.ts"],"names":[],"mappings":"AAAA;;;;;;GAMG;AAIH,OAAO,KAAK,EACV,
|
|
1
|
+
{"version":3,"file":"bureau.d.ts","sourceRoot":"","sources":["../../src/client/bureau.ts"],"names":[],"mappings":"AAAA;;;;;;GAMG;AAIH,OAAO,KAAK,EACV,WAAW,EACX,cAAc,EACd,aAAa,EACd,MAAM,oBAAoB,CAAC;AAC5B,OAAO,EAAE,eAAe,EAAE,MAAM,wBAAwB,CAAC;AACzD,OAAO,KAAK,EAAE,aAAa,EAAE,MAAM,4BAA4B,CAAC;AAChE,OAAO,KAAK,EAAE,gBAAgB,EAAE,mBAAmB,EAAE,MAAM,wBAAwB,CAAC;AACpF,OAAO,KAAK,EAAE,WAAW,EAAE,MAAM,kBAAkB,CAAC;AAoBpD,sBAAsB;AACtB,qBAAa,UAAU;IAMnB,OAAO,CAAC,QAAQ,CAAC,cAAc;IAC/B,OAAO,CAAC,QAAQ,CAAC,UAAU;IAC3B,OAAO,CAAC,QAAQ,CAAC,OAAO;IAP1B,cAAc;IACd,QAAQ,CAAC,QAAQ,EAAE,cAAc,CAAC;gBAGhC,QAAQ,EAAE,cAAc,EACP,cAAc,EAAE,MAAM,EACtB,UAAU,EAAE,MAAM,EAClB,OAAO,EAAE,WAAW;IAKvC,oCAAoC;IAC9B,OAAO,IAAI,OAAO,CAAC,WAAW,GAAG,IAAI,CAAC;CAW7C;AAED,2BAA2B;AAC3B,qBAAa,MAAM;IACjB,OAAO,CAAC,QAAQ,CAAC,cAAc,CAAS;IACxC,OAAO,CAAC,QAAQ,CAAC,OAAO,CAAc;IACtC,OAAO,CAAC,QAAQ,CAAC,SAAS,CAAS;IACnC,OAAO,CAAC,QAAQ,CAAC,YAAY,CAAkB;IAC/C,OAAO,CAAC,KAAK,CAAC,CAAc;IAC5B,OAAO,CAAC,eAAe,CAAC,CAAuB;gBAEnC,OAAO,EAAE,aAAa;IAelC,yBAAyB;IACzB,IAAI,OAAO,IAAI,eAAe,CAAC,SAAS,CAAC,CAExC;IAED,4BAA4B;IAC5B,IAAI,MAAM,IAAI,eAAe,CAAC,QAAQ,CAAC,CAEtC;IAED,uCAAuC;IACvC,IAAI,OAAO,IAAI,eAAe,CAAC,SAAS,CAAC,CAExC;IAED,2BAA2B;IAC3B,IAAI,GAAG,IAAI,eAAe,CAAC,KAAK,CAAC,CAEhC;IAED,wCAAwC;IACxC,OAAO,CAAC,IAAI,EAAE,MAAM,GAAG,aAAa;IAIpC,iCAAiC;IACjC,YAAY,IAAI,OAAO,CAAC,mBAAmB,EAAE,CAAC;IAI9C,+BAA+B;IAC/B,UAAU,IAAI,OAAO,CAAC,gBAAgB,EAAE,CAAC;IAIzC,4BAA4B;IAC5B,WAAW,IAAI,OAAO,CAAC,MAAM,CAAC;IAI9B,uDAAuD;IACjD,QAAQ,CAAC,KAAK,EAAE,OAAO,GAAG,MAAM,GAAG,OAAO,CAAC,cAAc,CAAC;IAgChE,uCAAuC;IACjC,IAAI,CAAC,KAAK,EAAE,OAAO,GAAG,MAAM,GAAG,OAAO,CAAC,UAAU,CAAC;YAM1C,SAAS;YAUT,aAAa;CAsB5B"}
|
package/bin/client/bureau.js
CHANGED
|
@@ -1,12 +1,13 @@
|
|
|
1
1
|
/**
|
|
2
|
-
* Bureau
|
|
2
|
+
* Bureau 管理与独立服务节点客户端。
|
|
3
3
|
*
|
|
4
|
-
* Bureau
|
|
5
|
-
*
|
|
6
|
-
* Federation
|
|
4
|
+
* Bureau 使用 Bureau Token 管理 Federation,并使用 Federation JWKS 在本地
|
|
5
|
+
* 验证独立服务收到的 user_token。Bureau 不绑定 City,一个实例可以服务同一
|
|
6
|
+
* Federation 下的多个 City。
|
|
7
7
|
*/
|
|
8
8
|
import { decodeProtectedHeader, importJWK, jwtVerify } from "jose";
|
|
9
9
|
import { httpError } from "../utils/helpers.js";
|
|
10
|
+
import { AdminPactAccess } from "../pact/admin/index.js";
|
|
10
11
|
import { USER_TOKEN_ALGORITHM } from "../federation/auth/federation-key-store.js";
|
|
11
12
|
import { normalize_user_token, read_user_token_payload } from "../federation/auth/user-token-authority.js";
|
|
12
13
|
const DEFAULT_CACHE_TTL = 5 * 60 * 1000;
|
|
@@ -36,16 +37,12 @@ export class BureauUser {
|
|
|
36
37
|
return body.profile ?? null;
|
|
37
38
|
}
|
|
38
39
|
}
|
|
39
|
-
/** Bureau
|
|
40
|
+
/** Bureau 管理与独立服务节点客户端。 */
|
|
40
41
|
export class Bureau {
|
|
41
|
-
/** 当前 Bureau 绑定的 City ID;首次读取上下文后可用。 */
|
|
42
|
-
get city_id() {
|
|
43
|
-
return this.cache?.context.city_id;
|
|
44
|
-
}
|
|
45
42
|
federation_url;
|
|
46
|
-
bureau_token;
|
|
47
43
|
fetcher;
|
|
48
44
|
cache_ttl;
|
|
45
|
+
admin_access;
|
|
49
46
|
cache;
|
|
50
47
|
refresh_promise;
|
|
51
48
|
constructor(options) {
|
|
@@ -53,14 +50,46 @@ export class Bureau {
|
|
|
53
50
|
throw new TypeError("Bureau options are required");
|
|
54
51
|
}
|
|
55
52
|
this.federation_url = normalize_federation_url(options.federation_url);
|
|
56
|
-
|
|
53
|
+
const bureau_token = read_required_string(options.bureau_token, "bureau_token");
|
|
57
54
|
this.fetcher = options.fetch ?? globalThis.fetch.bind(globalThis);
|
|
58
55
|
this.cache_ttl = read_cache_ttl(options.jwks_cache_ttl);
|
|
56
|
+
this.admin_access = new AdminPactAccess({
|
|
57
|
+
base_url: this.federation_url,
|
|
58
|
+
credential: bureau_token,
|
|
59
|
+
fetch: options.fetch,
|
|
60
|
+
});
|
|
61
|
+
}
|
|
62
|
+
/** Federation 余额管理入口。 */
|
|
63
|
+
get balance() {
|
|
64
|
+
return this.admin_access.balance;
|
|
65
|
+
}
|
|
66
|
+
/** Federation City 管理入口。 */
|
|
67
|
+
get cities() {
|
|
68
|
+
return this.admin_access.cities;
|
|
69
|
+
}
|
|
70
|
+
/** Federation Bureau Token 注册表管理入口。 */
|
|
71
|
+
get bureaus() {
|
|
72
|
+
return this.admin_access.bureaus;
|
|
59
73
|
}
|
|
60
|
-
/**
|
|
61
|
-
|
|
62
|
-
|
|
63
|
-
|
|
74
|
+
/** Federation 环境变量管理入口。 */
|
|
75
|
+
get env() {
|
|
76
|
+
return this.admin_access.env;
|
|
77
|
+
}
|
|
78
|
+
/** 获取 Federation 管理身份下的 Service 调用器。 */
|
|
79
|
+
service(name) {
|
|
80
|
+
return this.admin_access.service(name);
|
|
81
|
+
}
|
|
82
|
+
/** 列出 Federation 暴露的 Service。 */
|
|
83
|
+
listServices() {
|
|
84
|
+
return this.admin_access.listServices();
|
|
85
|
+
}
|
|
86
|
+
/** 列出 Federation 模型目录及管理状态。 */
|
|
87
|
+
listModels() {
|
|
88
|
+
return this.admin_access.listModels();
|
|
89
|
+
}
|
|
90
|
+
/** 读取 Federation 聚合说明文档。 */
|
|
91
|
+
instruction() {
|
|
92
|
+
return this.admin_access.instruction();
|
|
64
93
|
}
|
|
65
94
|
/** 从 HTTP Request 或 user_token 中本地识别 Federation 用户。 */
|
|
66
95
|
async identify(input) {
|
|
@@ -82,9 +111,6 @@ export class Bureau {
|
|
|
82
111
|
issuer: cache.discovery.issuer,
|
|
83
112
|
});
|
|
84
113
|
const payload = read_user_token_payload(result.payload);
|
|
85
|
-
if (payload.city_id !== cache.context.city_id) {
|
|
86
|
-
throw httpError(403, "Token does not belong to this City");
|
|
87
|
-
}
|
|
88
114
|
return {
|
|
89
115
|
user_id: payload.user_id,
|
|
90
116
|
city_id: payload.city_id,
|
|
@@ -118,16 +144,11 @@ export class Bureau {
|
|
|
118
144
|
async refresh_cache() {
|
|
119
145
|
const discovery = await read_json(this.fetcher, `${this.federation_url}/.well-known/downcity.json`, "Federation discovery unavailable");
|
|
120
146
|
validate_discovery(discovery, this.federation_url);
|
|
121
|
-
const
|
|
122
|
-
read_json(this.fetcher, discovery.jwks_uri, "Federation signing keys unavailable"),
|
|
123
|
-
read_json(this.fetcher, `${this.federation_url}/v1/bureaus/context`, "Bureau context unavailable", { authorization: `Bearer ${this.bureau_token}` }),
|
|
124
|
-
]);
|
|
147
|
+
const jwks = await read_json(this.fetcher, discovery.jwks_uri, "Federation signing keys unavailable");
|
|
125
148
|
validate_jwks(jwks);
|
|
126
|
-
validate_context(context);
|
|
127
149
|
const cache = {
|
|
128
150
|
discovery,
|
|
129
151
|
jwks,
|
|
130
|
-
context,
|
|
131
152
|
expires_at: Date.now() + this.cache_ttl,
|
|
132
153
|
};
|
|
133
154
|
this.cache = cache;
|
|
@@ -187,18 +208,10 @@ function validate_jwks(jwks) {
|
|
|
187
208
|
throw httpError(503, "Federation JWKS exposed a private key");
|
|
188
209
|
}
|
|
189
210
|
}
|
|
190
|
-
function
|
|
191
|
-
if (!context || typeof context !== "object")
|
|
192
|
-
throw httpError(503, "Bureau context unavailable");
|
|
193
|
-
read_required_string(context.token_id, "Bureau token_id");
|
|
194
|
-
read_required_string(context.city_id, "Bureau city_id");
|
|
195
|
-
if (!Array.isArray(context.capabilities))
|
|
196
|
-
throw httpError(503, "Invalid Bureau capabilities");
|
|
197
|
-
}
|
|
198
|
-
async function read_json(fetcher, url, error_message, extra_headers = {}) {
|
|
211
|
+
async function read_json(fetcher, url, error_message) {
|
|
199
212
|
let response;
|
|
200
213
|
try {
|
|
201
|
-
response = await fetcher(url, { headers: { accept: "application/json"
|
|
214
|
+
response = await fetcher(url, { headers: { accept: "application/json" } });
|
|
202
215
|
}
|
|
203
216
|
catch {
|
|
204
217
|
throw httpError(503, error_message);
|
package/bin/client/bureau.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"bureau.js","sourceRoot":"","sources":["../../src/client/bureau.ts"],"names":[],"mappings":"AAAA;;;;;;GAMG;AAEH,OAAO,EAAE,qBAAqB,EAAE,SAAS,EAAE,SAAS,EAAE,MAAM,MAAM,CAAC;AACnE,OAAO,EAAE,SAAS,EAAE,MAAM,qBAAqB,CAAC;
|
|
1
|
+
{"version":3,"file":"bureau.js","sourceRoot":"","sources":["../../src/client/bureau.ts"],"names":[],"mappings":"AAAA;;;;;;GAMG;AAEH,OAAO,EAAE,qBAAqB,EAAE,SAAS,EAAE,SAAS,EAAE,MAAM,MAAM,CAAC;AACnE,OAAO,EAAE,SAAS,EAAE,MAAM,qBAAqB,CAAC;AAMhD,OAAO,EAAE,eAAe,EAAE,MAAM,wBAAwB,CAAC;AASzD,OAAO,EAAE,oBAAoB,EAAE,MAAM,4CAA4C,CAAC;AAClF,OAAO,EAAE,oBAAoB,EAAE,uBAAuB,EAAE,MAAM,4CAA4C,CAAC;AAE3G,MAAM,iBAAiB,GAAG,CAAC,GAAG,EAAE,GAAG,IAAI,CAAC;AAWxC,sBAAsB;AACtB,MAAM,OAAO,UAAU;IAMF;IACA;IACA;IAPnB,cAAc;IACL,QAAQ,CAAiB;IAElC,YACE,QAAwB,EACP,cAAsB,EACtB,UAAkB,EAClB,OAAoB;QAFpB,mBAAc,GAAd,cAAc,CAAQ;QACtB,eAAU,GAAV,UAAU,CAAQ;QAClB,YAAO,GAAP,OAAO,CAAa;QAErC,IAAI,CAAC,QAAQ,GAAG,QAAQ,CAAC;IAC3B,CAAC;IAED,oCAAoC;IACpC,KAAK,CAAC,OAAO;QACX,MAAM,QAAQ,GAAG,MAAM,IAAI,CAAC,OAAO,CAAC,GAAG,IAAI,CAAC,cAAc,iBAAiB,EAAE;YAC3E,MAAM,EAAE,KAAK;YACb,OAAO,EAAE,EAAE,aAAa,EAAE,UAAU,IAAI,CAAC,UAAU,EAAE,EAAE;SACxD,CAAC,CAAC;QACH,IAAI,CAAC,QAAQ,CAAC,EAAE,EAAE,CAAC;YACjB,MAAM,SAAS,CAAC,QAAQ,CAAC,MAAM,EAAE,qCAAqC,CAAC,CAAC;QAC1E,CAAC;QACD,MAAM,IAAI,GAAG,MAAM,QAAQ,CAAC,IAAI,EAAsC,CAAC;QACvE,OAAO,IAAI,CAAC,OAAO,IAAI,IAAI,CAAC;IAC9B,CAAC;CACF;AAED,2BAA2B;AAC3B,MAAM,OAAO,MAAM;IACA,cAAc,CAAS;IACvB,OAAO,CAAc;IACrB,SAAS,CAAS;IAClB,YAAY,CAAkB;IACvC,KAAK,CAAe;IACpB,eAAe,CAAwB;IAE/C,YAAY,OAAsB;QAChC,IAAI,CAAC,OAAO,IAAI,OAAO,OAAO,KAAK,QAAQ,EAAE,CAAC;YAC5C,MAAM,IAAI,SAAS,CAAC,6BAA6B,CAAC,CAAC;QACrD,CAAC;QACD,IAAI,CAAC,cAAc,GAAG,wBAAwB,CAAC,OAAO,CAAC,cAAc,CAAC,CAAC;QACvE,MAAM,YAAY,GAAG,oBAAoB,CAAC,OAAO,CAAC,YAAY,EAAE,cAAc,CAAC,CAAC;QAChF,IAAI,CAAC,OAAO,GAAG,OAAO,CAAC,KAAK,IAAI,UAAU,CAAC,KAAK,CAAC,IAAI,CAAC,UAAU,CAAC,CAAC;QAClE,IAAI,CAAC,SAAS,GAAG,cAAc,CAAC,OAAO,CAAC,cAAc,CAAC,CAAC;QACxD,IAAI,CAAC,YAAY,GAAG,IAAI,eAAe,CAAC;YACtC,QAAQ,EAAE,IAAI,CAAC,cAAc;YAC7B,UAAU,EAAE,YAAY;YACxB,KAAK,EAAE,OAAO,CAAC,KAAK;SACrB,CAAC,CAAC;IACL,CAAC;IAED,yBAAyB;IACzB,IAAI,OAAO;QACT,OAAO,IAAI,CAAC,YAAY,CAAC,OAAO,CAAC;IACnC,CAAC;IAED,4BAA4B;IAC5B,IAAI,MAAM;QACR,OAAO,IAAI,CAAC,YAAY,CAAC,MAAM,CAAC;IAClC,CAAC;IAED,uCAAuC;IACvC,IAAI,OAAO;QACT,OAAO,IAAI,CAAC,YAAY,CAAC,OAAO,CAAC;IACnC,CAAC;IAED,2BAA2B;IAC3B,IAAI,GAAG;QACL,OAAO,IAAI,CAAC,YAAY,CAAC,GAAG,CAAC;IAC/B,CAAC;IAED,wCAAwC;IACxC,OAAO,CAAC,IAAY;QAClB,OAAO,IAAI,CAAC,YAAY,CAAC,OAAO,CAAC,IAAI,CAAC,CAAC;IACzC,CAAC;IAED,iCAAiC;IACjC,YAAY;QACV,OAAO,IAAI,CAAC,YAAY,CAAC,YAAY,EAAE,CAAC;IAC1C,CAAC;IAED,+BAA+B;IAC/B,UAAU;QACR,OAAO,IAAI,CAAC,YAAY,CAAC,UAAU,EAAE,CAAC;IACxC,CAAC;IAED,4BAA4B;IAC5B,WAAW;QACT,OAAO,IAAI,CAAC,YAAY,CAAC,WAAW,EAAE,CAAC;IACzC,CAAC;IAED,uDAAuD;IACvD,KAAK,CAAC,QAAQ,CAAC,KAAuB;QACpC,MAAM,UAAU,GAAG,OAAO,KAAK,KAAK,QAAQ,CAAC,CAAC,CAAC,iBAAiB,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC,kBAAkB,CAAC,KAAK,CAAC,CAAC;QACpG,MAAM,gBAAgB,GAAG,oBAAoB,CAAC,UAAU,CAAC,CAAC;QAC1D,IAAI,KAAK,GAAG,MAAM,IAAI,CAAC,SAAS,CAAC,KAAK,CAAC,CAAC;QACxC,IAAI,GAAG,GAAG,QAAQ,CAAC,KAAK,CAAC,IAAI,EAAE,gBAAgB,CAAC,CAAC;QACjD,IAAI,CAAC,GAAG,EAAE,CAAC;YACT,KAAK,GAAG,MAAM,IAAI,CAAC,SAAS,CAAC,IAAI,CAAC,CAAC;YACnC,GAAG,GAAG,QAAQ,CAAC,KAAK,CAAC,IAAI,EAAE,gBAAgB,CAAC,CAAC;QAC/C,CAAC;QACD,IAAI,CAAC,GAAG;YAAE,MAAM,SAAS,CAAC,GAAG,EAAE,2BAA2B,CAAC,CAAC;QAE5D,IAAI,CAAC;YACH,MAAM,UAAU,GAAG,MAAM,SAAS,CAAC,GAAG,EAAE,oBAAoB,CAAC,CAAC;YAC9D,MAAM,MAAM,GAAG,MAAM,SAAS,CAAC,gBAAgB,EAAE,UAAU,EAAE;gBAC3D,UAAU,EAAE,CAAC,oBAAoB,CAAC;gBAClC,QAAQ,EAAE,KAAK,CAAC,SAAS,CAAC,mBAAmB;gBAC7C,MAAM,EAAE,KAAK,CAAC,SAAS,CAAC,MAAM;aAC/B,CAAC,CAAC;YACH,MAAM,OAAO,GAAG,uBAAuB,CAAC,MAAM,CAAC,OAAO,CAAC,CAAC;YACxD,OAAO;gBACL,OAAO,EAAE,OAAO,CAAC,OAAO;gBACxB,OAAO,EAAE,OAAO,CAAC,OAAO;gBACxB,QAAQ,EAAE,OAAO,CAAC,QAAQ,IAAI,EAAE;gBAChC,QAAQ,EAAE,OAAO,CAAC,GAAG;gBACrB,UAAU,EAAE,OAAO,CAAC,GAAG;aACxB,CAAC;QACJ,CAAC;QAAC,OAAO,KAAK,EAAE,CAAC;YACf,IAAI,aAAa,CAAC,KAAK,CAAC;gBAAE,MAAM,KAAK,CAAC;YACtC,MAAM,kBAAkB,CAAC,KAAK,CAAC,CAAC;QAClC,CAAC;IACH,CAAC;IAED,uCAAuC;IACvC,KAAK,CAAC,IAAI,CAAC,KAAuB;QAChC,MAAM,UAAU,GAAG,OAAO,KAAK,KAAK,QAAQ,CAAC,CAAC,CAAC,iBAAiB,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC,kBAAkB,CAAC,KAAK,CAAC,CAAC;QACpG,MAAM,QAAQ,GAAG,MAAM,IAAI,CAAC,QAAQ,CAAC,UAAU,CAAC,CAAC;QACjD,OAAO,IAAI,UAAU,CAAC,QAAQ,EAAE,IAAI,CAAC,cAAc,EAAE,UAAU,EAAE,IAAI,CAAC,OAAO,CAAC,CAAC;IACjF,CAAC;IAEO,KAAK,CAAC,SAAS,CAAC,aAAsB;QAC5C,IAAI,CAAC,aAAa,IAAI,IAAI,CAAC,KAAK,IAAI,IAAI,CAAC,KAAK,CAAC,UAAU,GAAG,IAAI,CAAC,GAAG,EAAE;YAAE,OAAO,IAAI,CAAC,KAAK,CAAC;QAC1F,IAAI,CAAC,IAAI,CAAC,eAAe,EAAE,CAAC;YAC1B,IAAI,CAAC,eAAe,GAAG,IAAI,CAAC,aAAa,EAAE,CAAC,OAAO,CAAC,GAAG,EAAE;gBACvD,IAAI,CAAC,eAAe,GAAG,SAAS,CAAC;YACnC,CAAC,CAAC,CAAC;QACL,CAAC;QACD,OAAO,IAAI,CAAC,eAAe,CAAC;IAC9B,CAAC;IAEO,KAAK,CAAC,aAAa;QACzB,MAAM,SAAS,GAAG,MAAM,SAAS,CAC/B,IAAI,CAAC,OAAO,EACZ,GAAG,IAAI,CAAC,cAAc,4BAA4B,EAClD,kCAAkC,CACnC,CAAC;QACF,kBAAkB,CAAC,SAAS,EAAE,IAAI,CAAC,cAAc,CAAC,CAAC;QAEnD,MAAM,IAAI,GAAG,MAAM,SAAS,CAC1B,IAAI,CAAC,OAAO,EACZ,SAAS,CAAC,QAAQ,EAClB,qCAAqC,CACtC,CAAC;QACF,aAAa,CAAC,IAAI,CAAC,CAAC;QACpB,MAAM,KAAK,GAAgB;YACzB,SAAS;YACT,IAAI;YACJ,UAAU,EAAE,IAAI,CAAC,GAAG,EAAE,GAAG,IAAI,CAAC,SAAS;SACxC,CAAC;QACF,IAAI,CAAC,KAAK,GAAG,KAAK,CAAC;QACnB,OAAO,KAAK,CAAC;IACf,CAAC;CACF;AAED,SAAS,QAAQ,CAAC,IAAoB,EAAE,GAAW;IACjD,MAAM,MAAM,GAAG,qBAAqB,CAAC,GAAG,CAAC,CAAC;IAC1C,IAAI,MAAM,CAAC,GAAG,KAAK,oBAAoB;QAAE,MAAM,SAAS,CAAC,GAAG,EAAE,8BAA8B,CAAC,CAAC;IAC9F,MAAM,MAAM,GAAG,OAAO,MAAM,CAAC,GAAG,KAAK,QAAQ,CAAC,CAAC,CAAC,MAAM,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,CAAC;IAChE,IAAI,CAAC,MAAM;QAAE,MAAM,SAAS,CAAC,GAAG,EAAE,2BAA2B,CAAC,CAAC;IAC/D,OAAO,IAAI,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC,GAAG,EAAE,EAAE,CAAC,GAAG,CAAC,GAAG,KAAK,MAAM,CAAC,CAAC;AACrD,CAAC;AAED,SAAS,kBAAkB,CAAC,OAAgB;IAC1C,MAAM,aAAa,GAAG,OAAO,CAAC,OAAO,CAAC,GAAG,CAAC,eAAe,CAAC,IAAI,EAAE,CAAC;IACjE,IAAI,CAAC,aAAa,CAAC,UAAU,CAAC,SAAS,CAAC;QAAE,MAAM,SAAS,CAAC,GAAG,EAAE,yBAAyB,CAAC,CAAC;IAC1F,OAAO,oBAAoB,CAAC,aAAa,CAAC,KAAK,CAAC,SAAS,CAAC,MAAM,CAAC,EAAE,YAAY,CAAC,CAAC;AACnF,CAAC;AAED,SAAS,iBAAiB,CAAC,KAAa;IACtC,MAAM,KAAK,GAAG,KAAK,CAAC,IAAI,EAAE,CAAC;IAC3B,OAAO,oBAAoB,CAAC,KAAK,CAAC,UAAU,CAAC,SAAS,CAAC,CAAC,CAAC,CAAC,KAAK,CAAC,KAAK,CAAC,SAAS,CAAC,MAAM,CAAC,CAAC,CAAC,CAAC,KAAK,EAAE,YAAY,CAAC,CAAC;AACjH,CAAC;AAED,SAAS,wBAAwB,CAAC,KAAc;IAC9C,MAAM,KAAK,GAAG,oBAAoB,CAAC,KAAK,EAAE,gBAAgB,CAAC,CAAC,OAAO,CAAC,MAAM,EAAE,EAAE,CAAC,CAAC;IAChF,MAAM,GAAG,GAAG,IAAI,GAAG,CAAC,KAAK,CAAC,CAAC;IAC3B,IAAI,GAAG,CAAC,QAAQ,KAAK,OAAO,IAAI,GAAG,CAAC,QAAQ,KAAK,QAAQ,EAAE,CAAC;QAC1D,MAAM,IAAI,SAAS,CAAC,uCAAuC,CAAC,CAAC;IAC/D,CAAC;IACD,IAAI,GAAG,CAAC,QAAQ,IAAI,GAAG,CAAC,QAAQ;QAAE,MAAM,IAAI,SAAS,CAAC,6CAA6C,CAAC,CAAC;IACrG,OAAO,KAAK,CAAC;AACf,CAAC;AAED,SAAS,kBAAkB,CAAC,SAA8B,EAAE,cAAsB;IAChF,IAAI,CAAC,SAAS,IAAI,OAAO,SAAS,KAAK,QAAQ;QAAE,MAAM,SAAS,CAAC,GAAG,EAAE,kCAAkC,CAAC,CAAC;IAC1G,oBAAoB,CAAC,SAAS,CAAC,MAAM,EAAE,mBAAmB,CAAC,CAAC;IAC5D,IAAI,SAAS,CAAC,mBAAmB,KAAK,eAAe;QAAE,MAAM,SAAS,CAAC,GAAG,EAAE,wCAAwC,CAAC,CAAC;IACtH,MAAM,QAAQ,GAAG,IAAI,GAAG,CAAC,GAAG,cAAc,wBAAwB,CAAC,CAAC;IACpE,MAAM,MAAM,GAAG,IAAI,GAAG,CAAC,SAAS,CAAC,QAAQ,CAAC,CAAC;IAC3C,IAAI,MAAM,CAAC,MAAM,KAAK,QAAQ,CAAC,MAAM,IAAI,MAAM,CAAC,QAAQ,KAAK,QAAQ,CAAC,QAAQ,EAAE,CAAC;QAC/E,MAAM,SAAS,CAAC,GAAG,EAAE,kCAAkC,CAAC,CAAC;IAC3D,CAAC;AACH,CAAC;AAED,SAAS,aAAa,CAAC,IAAoB;IACzC,IAAI,CAAC,IAAI,IAAI,CAAC,KAAK,CAAC,OAAO,CAAC,IAAI,CAAC,IAAI,CAAC;QAAE,MAAM,SAAS,CAAC,GAAG,EAAE,qCAAqC,CAAC,CAAC;IACpG,KAAK,MAAM,GAAG,IAAI,IAAI,CAAC,IAAI,EAAE,CAAC;QAC5B,IAAI,GAAG,CAAC,GAAG,KAAK,KAAK,IAAI,GAAG,CAAC,GAAG,KAAK,SAAS,IAAI,GAAG,CAAC,GAAG,KAAK,oBAAoB;eAC7E,GAAG,CAAC,GAAG,KAAK,KAAK,IAAI,OAAO,GAAG,CAAC,GAAG,KAAK,QAAQ,IAAI,OAAO,GAAG,CAAC,CAAC,KAAK,QAAQ,EAAE,CAAC;YACnF,MAAM,SAAS,CAAC,GAAG,EAAE,gCAAgC,CAAC,CAAC;QACzD,CAAC;QACD,IAAI,GAAG,IAAI,GAAG;YAAE,MAAM,SAAS,CAAC,GAAG,EAAE,uCAAuC,CAAC,CAAC;IAChF,CAAC;AACH,CAAC;AAED,KAAK,UAAU,SAAS,CACtB,OAAoB,EACpB,GAAW,EACX,aAAqB;IAErB,IAAI,QAAkB,CAAC;IACvB,IAAI,CAAC;QACH,QAAQ,GAAG,MAAM,OAAO,CAAC,GAAG,EAAE,EAAE,OAAO,EAAE,EAAE,MAAM,EAAE,kBAAkB,EAAE,EAAE,CAAC,CAAC;IAC7E,CAAC;IAAC,MAAM,CAAC;QACP,MAAM,SAAS,CAAC,GAAG,EAAE,aAAa,CAAC,CAAC;IACtC,CAAC;IACD,IAAI,CAAC,QAAQ,CAAC,EAAE;QAAE,MAAM,SAAS,CAAC,QAAQ,CAAC,MAAM,KAAK,GAAG,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,GAAG,EAAE,aAAa,CAAC,CAAC;IACtF,IAAI,CAAC;QACH,OAAO,MAAM,QAAQ,CAAC,IAAI,EAAO,CAAC;IACpC,CAAC;IAAC,MAAM,CAAC;QACP,MAAM,SAAS,CAAC,GAAG,EAAE,aAAa,CAAC,CAAC;IACtC,CAAC;AACH,CAAC;AAED,SAAS,oBAAoB,CAAC,KAAc,EAAE,IAAY;IACxD,IAAI,OAAO,KAAK,KAAK,QAAQ,IAAI,CAAC,KAAK,CAAC,IAAI,EAAE;QAAE,MAAM,IAAI,SAAS,CAAC,GAAG,IAAI,6BAA6B,CAAC,CAAC;IAC1G,OAAO,KAAK,CAAC,IAAI,EAAE,CAAC;AACtB,CAAC;AAED,SAAS,cAAc,CAAC,KAAyB;IAC/C,IAAI,KAAK,KAAK,SAAS;QAAE,OAAO,iBAAiB,CAAC;IAClD,IAAI,CAAC,MAAM,CAAC,QAAQ,CAAC,KAAK,CAAC,IAAI,KAAK,IAAI,CAAC;QAAE,MAAM,IAAI,SAAS,CAAC,0CAA0C,CAAC,CAAC;IAC3G,OAAO,KAAK,CAAC;AACf,CAAC;AAED,SAAS,aAAa,CAAC,KAAc;IACnC,OAAO,KAAK,YAAY,KAAK,IAAI,OAAQ,KAAkC,CAAC,UAAU,KAAK,QAAQ,CAAC;AACtG,CAAC;AAED,SAAS,kBAAkB,CAAC,KAAc;IACxC,MAAM,IAAI,GAAG,KAAK,IAAI,OAAO,KAAK,KAAK,QAAQ,CAAC,CAAC,CAAC,MAAM,CAAE,KAA4B,CAAC,IAAI,IAAI,EAAE,CAAC,CAAC,CAAC,CAAC,EAAE,CAAC;IACxG,IAAI,IAAI,KAAK,iBAAiB;QAAE,OAAO,SAAS,CAAC,GAAG,EAAE,oBAAoB,CAAC,CAAC;IAC5E,IAAI,IAAI,KAAK,uCAAuC;QAAE,OAAO,SAAS,CAAC,GAAG,EAAE,8BAA8B,CAAC,CAAC;IAC5G,IAAI,IAAI,KAAK,iCAAiC;QAAE,OAAO,SAAS,CAAC,GAAG,EAAE,2BAA2B,CAAC,CAAC;IACnG,OAAO,SAAS,CAAC,GAAG,EAAE,oBAAoB,CAAC,CAAC;AAC9C,CAAC"}
|
package/bin/client/city.d.ts
CHANGED
|
@@ -11,6 +11,8 @@ import type { UserServiceSummary } from "../pact/user/types.js";
|
|
|
11
11
|
/** Downcity City 用户客户端。 */
|
|
12
12
|
export declare class City {
|
|
13
13
|
private readonly user_access;
|
|
14
|
+
private readonly user_token?;
|
|
15
|
+
private readonly fetcher;
|
|
14
16
|
constructor(options: CityOptions);
|
|
15
17
|
/** 用户侧 AI 调用入口。 */
|
|
16
18
|
get ai(): UserPactAccess["ai"];
|
|
@@ -22,5 +24,10 @@ export declare class City {
|
|
|
22
24
|
service(name: string): ServiceClient;
|
|
23
25
|
/** 列出 Federation 暴露的 Service。 */
|
|
24
26
|
listServices(): Promise<UserServiceSummary[]>;
|
|
27
|
+
/** 发送 JSON GET 请求,并返回解析后的 JSON。 */
|
|
28
|
+
get<T = unknown>(url: string): Promise<T>;
|
|
29
|
+
/** 发送 JSON POST 请求,第二个参数会直接序列化为请求体。 */
|
|
30
|
+
post<T = unknown>(url: string, body?: unknown): Promise<T>;
|
|
31
|
+
private request_json;
|
|
25
32
|
}
|
|
26
33
|
//# sourceMappingURL=city.d.ts.map
|
package/bin/client/city.d.ts.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"city.d.ts","sourceRoot":"","sources":["../../src/client/city.ts"],"names":[],"mappings":"AAAA;;;;;GAKG;AAEH,OAAO,EAAE,cAAc,EAAE,MAAM,uBAAuB,CAAC;AACvD,OAAO,KAAK,EAAE,aAAa,EAAE,MAAM,4BAA4B,CAAC;AAChE,OAAO,KAAK,EAAE,WAAW,EAAE,MAAM,YAAY,CAAC;AAC9C,OAAO,KAAK,EAAE,kBAAkB,EAAE,MAAM,uBAAuB,CAAC;
|
|
1
|
+
{"version":3,"file":"city.d.ts","sourceRoot":"","sources":["../../src/client/city.ts"],"names":[],"mappings":"AAAA;;;;;GAKG;AAEH,OAAO,EAAE,cAAc,EAAE,MAAM,uBAAuB,CAAC;AACvD,OAAO,KAAK,EAAE,aAAa,EAAE,MAAM,4BAA4B,CAAC;AAChE,OAAO,KAAK,EAAE,WAAW,EAAE,MAAM,YAAY,CAAC;AAC9C,OAAO,KAAK,EAAE,kBAAkB,EAAE,MAAM,uBAAuB,CAAC;AAGhE,2BAA2B;AAC3B,qBAAa,IAAI;IACf,OAAO,CAAC,QAAQ,CAAC,WAAW,CAAiB;IAC7C,OAAO,CAAC,QAAQ,CAAC,UAAU,CAAC,CAAS;IACrC,OAAO,CAAC,QAAQ,CAAC,OAAO,CAAY;gBAExB,OAAO,EAAE,WAAW;IAahC,mBAAmB;IACnB,IAAI,EAAE,IAAI,cAAc,CAAC,IAAI,CAAC,CAE7B;IAED,eAAe;IACf,IAAI,OAAO,IAAI,cAAc,CAAC,SAAS,CAAC,CAEvC;IAED,2BAA2B;IAC3B,IAAI,IAAI,cAAc,CAAC,MAAM,CAAC;IAI9B,wBAAwB;IACxB,OAAO,CAAC,IAAI,EAAE,MAAM,GAAG,aAAa;IAIpC,iCAAiC;IACjC,YAAY,IAAI,OAAO,CAAC,kBAAkB,EAAE,CAAC;IAI7C,mCAAmC;IACnC,GAAG,CAAC,CAAC,GAAG,OAAO,EAAE,GAAG,EAAE,MAAM,GAAG,OAAO,CAAC,CAAC,CAAC;IAIzC,uCAAuC;IACvC,IAAI,CAAC,CAAC,GAAG,OAAO,EAAE,GAAG,EAAE,MAAM,EAAE,IAAI,GAAE,OAAY,GAAG,OAAO,CAAC,CAAC,CAAC;IAO9D,OAAO,CAAC,YAAY;CAYrB"}
|
package/bin/client/city.js
CHANGED
|
@@ -5,9 +5,12 @@
|
|
|
5
5
|
* 验签后从 token 中读取,客户端不能重复声明或覆盖。
|
|
6
6
|
*/
|
|
7
7
|
import { UserPactAccess } from "../pact/user/index.js";
|
|
8
|
+
import { defaultFetch, requestJSON } from "../pact/http.js";
|
|
8
9
|
/** Downcity City 用户客户端。 */
|
|
9
10
|
export class City {
|
|
10
11
|
user_access;
|
|
12
|
+
user_token;
|
|
13
|
+
fetcher;
|
|
11
14
|
constructor(options) {
|
|
12
15
|
if (!options || typeof options !== "object") {
|
|
13
16
|
throw new TypeError("City options are required");
|
|
@@ -17,6 +20,8 @@ export class City {
|
|
|
17
20
|
user_token: options.user_token,
|
|
18
21
|
fetch: options.fetch,
|
|
19
22
|
});
|
|
23
|
+
this.user_token = options.user_token;
|
|
24
|
+
this.fetcher = options.fetch ?? defaultFetch();
|
|
20
25
|
}
|
|
21
26
|
/** 用户侧 AI 调用入口。 */
|
|
22
27
|
get ai() {
|
|
@@ -38,5 +43,40 @@ export class City {
|
|
|
38
43
|
listServices() {
|
|
39
44
|
return this.user_access.listServices();
|
|
40
45
|
}
|
|
46
|
+
/** 发送 JSON GET 请求,并返回解析后的 JSON。 */
|
|
47
|
+
get(url) {
|
|
48
|
+
return this.request_json(url, { method: "GET" });
|
|
49
|
+
}
|
|
50
|
+
/** 发送 JSON POST 请求,第二个参数会直接序列化为请求体。 */
|
|
51
|
+
post(url, body = {}) {
|
|
52
|
+
return this.request_json(url, {
|
|
53
|
+
method: "POST",
|
|
54
|
+
body: JSON.stringify(body),
|
|
55
|
+
});
|
|
56
|
+
}
|
|
57
|
+
request_json(url, init) {
|
|
58
|
+
const headers = {
|
|
59
|
+
accept: "application/json",
|
|
60
|
+
"content-type": "application/json",
|
|
61
|
+
};
|
|
62
|
+
if (this.user_token)
|
|
63
|
+
headers.authorization = `Bearer ${this.user_token}`;
|
|
64
|
+
return requestJSON({
|
|
65
|
+
fetch: this.fetcher,
|
|
66
|
+
url: resolve_request_url(url, this.user_access.serverUrl),
|
|
67
|
+
init: { ...init, headers },
|
|
68
|
+
});
|
|
69
|
+
}
|
|
70
|
+
}
|
|
71
|
+
function resolve_request_url(value, base_url) {
|
|
72
|
+
const input = String(value ?? "").trim();
|
|
73
|
+
if (!input)
|
|
74
|
+
throw new TypeError("url is required");
|
|
75
|
+
try {
|
|
76
|
+
return new URL(input, base_url).toString();
|
|
77
|
+
}
|
|
78
|
+
catch {
|
|
79
|
+
throw new TypeError("url must be a valid URL");
|
|
80
|
+
}
|
|
41
81
|
}
|
|
42
82
|
//# sourceMappingURL=city.js.map
|
package/bin/client/city.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"city.js","sourceRoot":"","sources":["../../src/client/city.ts"],"names":[],"mappings":"AAAA;;;;;GAKG;AAEH,OAAO,EAAE,cAAc,EAAE,MAAM,uBAAuB,CAAC;
|
|
1
|
+
{"version":3,"file":"city.js","sourceRoot":"","sources":["../../src/client/city.ts"],"names":[],"mappings":"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"}
|
package/bin/client/types.d.ts
CHANGED
|
@@ -1,8 +1,8 @@
|
|
|
1
1
|
/**
|
|
2
2
|
* City 用户客户端构造类型模块。
|
|
3
3
|
*
|
|
4
|
-
* City 只表达终端用户访问 Federation。已登录身份和 city_id 均来自 user_token
|
|
5
|
-
*
|
|
4
|
+
* City 只表达终端用户访问 Federation。已登录身份和 city_id 均来自 user_token。
|
|
5
|
+
* City 也可以把同一个 user_token 携带到 Bureau 提供的可选独立服务。
|
|
6
6
|
*/
|
|
7
7
|
import type { FetchLike } from "../pact/http.js";
|
|
8
8
|
/** City 用户客户端构造参数。 */
|
package/bin/client/types.js
CHANGED
|
@@ -1,8 +1,8 @@
|
|
|
1
1
|
/**
|
|
2
2
|
* City 用户客户端构造类型模块。
|
|
3
3
|
*
|
|
4
|
-
* City 只表达终端用户访问 Federation。已登录身份和 city_id 均来自 user_token
|
|
5
|
-
*
|
|
4
|
+
* City 只表达终端用户访问 Federation。已登录身份和 city_id 均来自 user_token。
|
|
5
|
+
* City 也可以把同一个 user_token 携带到 Bureau 提供的可选独立服务。
|
|
6
6
|
*/
|
|
7
7
|
export {};
|
|
8
8
|
//# sourceMappingURL=types.js.map
|
|
@@ -1,8 +1,8 @@
|
|
|
1
1
|
/**
|
|
2
2
|
* 统一鉴权模块。
|
|
3
3
|
*
|
|
4
|
-
* Authenticator
|
|
5
|
-
*
|
|
4
|
+
* Authenticator 统一处理管理凭证(root secret 或 Bureau Token)和
|
|
5
|
+
* user_token(Ed25519 JWT)两类鉴权方式。
|
|
6
6
|
* 所有鉴权失败统一抛出 httpError(ErrorWithStatus)。
|
|
7
7
|
*/
|
|
8
8
|
import { type RouteAuth, type RouteIdentity } from "../../service/service.js";
|
|
@@ -11,7 +11,6 @@ import { type UserTokenAuthority } from "./user-token-authority.js";
|
|
|
11
11
|
import type { FederationKeyStore } from "./federation-key-store.js";
|
|
12
12
|
import type { BureauTokenStore } from "./bureau-token-store.js";
|
|
13
13
|
import type { CreateUserTokenInput, FederationDiscovery, FederationJwks, UserTokenPayload, UserTokenIssueResult, RuntimeUser } from "./types.js";
|
|
14
|
-
import type { RuntimeBureau } from "../../types/Bureau.js";
|
|
15
14
|
import type { FederationTrustedIdentity } from "../types.js";
|
|
16
15
|
/** 鉴权级别 */
|
|
17
16
|
/** 鉴权结果 */
|
|
@@ -25,8 +24,6 @@ export interface AuthResult {
|
|
|
25
24
|
city_id: string;
|
|
26
25
|
status: string;
|
|
27
26
|
};
|
|
28
|
-
/** 解析出的 Bureau 信息(bureau token 时可用)。 */
|
|
29
|
-
bureau?: RuntimeBureau;
|
|
30
27
|
}
|
|
31
28
|
/** 统一鉴权器 */
|
|
32
29
|
export declare class Authenticator {
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"authenticator.d.ts","sourceRoot":"","sources":["../../../src/federation/auth/authenticator.ts"],"names":[],"mappings":"AAAA;;;;;;GAMG;AAGH,OAAO,EAAsB,KAAK,SAAS,EAAE,KAAK,aAAa,EAAE,MAAM,0BAA0B,CAAC;AAClG,OAAO,KAAK,EAAE,WAAW,EAAE,MAAM,eAAe,CAAC;AACjD,OAAO,EAAwB,KAAK,kBAAkB,EAAE,MAAM,2BAA2B,CAAC;AAC1F,OAAO,KAAK,EAAE,kBAAkB,EAAE,MAAM,2BAA2B,CAAC;AACpE,OAAO,KAAK,EAAE,gBAAgB,EAAE,MAAM,yBAAyB,CAAC;AAEhE,OAAO,KAAK,EACV,oBAAoB,EACpB,mBAAmB,EACnB,cAAc,EACd,gBAAgB,EAChB,oBAAoB,EACpB,WAAW,EACZ,MAAM,YAAY,CAAC;AACpB,OAAO,KAAK,EAAE,
|
|
1
|
+
{"version":3,"file":"authenticator.d.ts","sourceRoot":"","sources":["../../../src/federation/auth/authenticator.ts"],"names":[],"mappings":"AAAA;;;;;;GAMG;AAGH,OAAO,EAAsB,KAAK,SAAS,EAAE,KAAK,aAAa,EAAE,MAAM,0BAA0B,CAAC;AAClG,OAAO,KAAK,EAAE,WAAW,EAAE,MAAM,eAAe,CAAC;AACjD,OAAO,EAAwB,KAAK,kBAAkB,EAAE,MAAM,2BAA2B,CAAC;AAC1F,OAAO,KAAK,EAAE,kBAAkB,EAAE,MAAM,2BAA2B,CAAC;AACpE,OAAO,KAAK,EAAE,gBAAgB,EAAE,MAAM,yBAAyB,CAAC;AAEhE,OAAO,KAAK,EACV,oBAAoB,EACpB,mBAAmB,EACnB,cAAc,EACd,gBAAgB,EAChB,oBAAoB,EACpB,WAAW,EACZ,MAAM,YAAY,CAAC;AACpB,OAAO,KAAK,EAAE,yBAAyB,EAAE,MAAM,aAAa,CAAC;AAE7D,WAAW;AACX,WAAW;AACX,MAAM,WAAW,UAAU;IACzB,eAAe;IACf,KAAK,EAAE,aAAa,CAAC;IACrB,2BAA2B;IAC3B,IAAI,CAAC,EAAE,WAAW,CAAC;IACnB,+BAA+B;IAC/B,IAAI,CAAC,EAAE;QAAE,OAAO,EAAE,MAAM,CAAC;QAAC,MAAM,EAAE,MAAM,CAAA;KAAE,CAAC;CAC5C;AAED,YAAY;AACZ,qBAAa,aAAa;IAEtB,OAAO,CAAC,GAAG;IACX,OAAO,CAAC,KAAK;IACb,OAAO,CAAC,QAAQ,CAAC,eAAe;IAChC,OAAO,CAAC,QAAQ,CAAC,SAAS;IAC1B,OAAO,CAAC,QAAQ,CAAC,kBAAkB;gBAJ3B,GAAG,EAAE,WAAW,EAChB,KAAK,EAAE,MAAM,OAAO,CAAC;QAAE,IAAI,EAAE;YAAE,GAAG,CAAC,EAAE,EAAE,MAAM,GAAG,OAAO,CAAC;gBAAE,OAAO,EAAE,MAAM,CAAC;gBAAC,MAAM,EAAE,MAAM,CAAA;aAAE,GAAG,SAAS,CAAC,CAAA;SAAE,CAAA;KAAE,CAAC,EACpG,eAAe,EAAE,kBAAkB,EACnC,SAAS,EAAE,kBAAkB,EAC7B,kBAAkB,EAAE,gBAAgB;IAGvD;;;;;OAKG;IACG,OAAO,CAAC,OAAO,EAAE,OAAO,GAAG,OAAO,CAAC,UAAU,CAAC;IA8BpD;;;;;;OAMG;IACH,cAAc,CAAC,QAAQ,EAAE,yBAAyB,GAAG,UAAU;IAW/D;;;;;;OAMG;IACH,SAAS,CAAC,MAAM,EAAE,UAAU,EAAE,QAAQ,CAAC,EAAE,SAAS,GAAG,UAAU;IAY/D;;OAEG;IACG,YAAY,CAAC,OAAO,EAAE,OAAO,EAAE,QAAQ,CAAC,EAAE,SAAS,GAAG,OAAO,CAAC,UAAU,CAAC;IAI/E;;;;;OAKG;IACG,WAAW,CAAC,KAAK,EAAE,oBAAoB,GAAG,OAAO,CAAC,oBAAoB,CAAC;IAgB7E;;;;;OAKG;IACG,WAAW,CAAC,KAAK,EAAE,MAAM,GAAG,OAAO,CAAC,gBAAgB,CAAC;IAI3D,mCAAmC;IACnC,eAAe,IAAI,OAAO,CAAC,cAAc,CAAC;IAI1C,wCAAwC;IACxC,aAAa,CAAC,MAAM,EAAE,MAAM,GAAG,mBAAmB;CASnD"}
|
|
@@ -1,8 +1,8 @@
|
|
|
1
1
|
/**
|
|
2
2
|
* 统一鉴权模块。
|
|
3
3
|
*
|
|
4
|
-
* Authenticator
|
|
5
|
-
*
|
|
4
|
+
* Authenticator 统一处理管理凭证(root secret 或 Bureau Token)和
|
|
5
|
+
* user_token(Ed25519 JWT)两类鉴权方式。
|
|
6
6
|
* 所有鉴权失败统一抛出 httpError(ErrorWithStatus)。
|
|
7
7
|
*/
|
|
8
8
|
import { bearerToken, httpError } from "../../utils/helpers.js";
|
|
@@ -36,13 +36,8 @@ export class Authenticator {
|
|
|
36
36
|
if (adminKey && token === adminKey) {
|
|
37
37
|
return { level: "admin" };
|
|
38
38
|
}
|
|
39
|
-
|
|
40
|
-
|
|
41
|
-
const store = await this.store();
|
|
42
|
-
const city = await store.city.get(bureau.city_id);
|
|
43
|
-
if (!city || city.status !== "active")
|
|
44
|
-
return { level: "guest" };
|
|
45
|
-
return { level: "bureau", bureau, city };
|
|
39
|
+
if (await this.bureau_token_store.resolve(token)) {
|
|
40
|
+
return { level: "admin" };
|
|
46
41
|
}
|
|
47
42
|
try {
|
|
48
43
|
const payload = await this.token_authority.verify(token);
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"authenticator.js","sourceRoot":"","sources":["../../../src/federation/auth/authenticator.ts"],"names":[],"mappings":"AAAA;;;;;;GAMG;AAEH,OAAO,EAAE,WAAW,EAAE,SAAS,EAAE,MAAM,wBAAwB,CAAC;AAChE,OAAO,EAAE,kBAAkB,EAAsC,MAAM,0BAA0B,CAAC;AAElG,OAAO,EAAE,oBAAoB,EAA2B,MAAM,2BAA2B,CAAC;
|
|
1
|
+
{"version":3,"file":"authenticator.js","sourceRoot":"","sources":["../../../src/federation/auth/authenticator.ts"],"names":[],"mappings":"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"}
|
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
/**
|
|
2
2
|
* Federation Bureau Token 数据库表。
|
|
3
3
|
*
|
|
4
|
-
* 只保存 Token hash
|
|
4
|
+
* 只保存 Token hash 和生命周期状态,不持久化 Bureau Token 明文。
|
|
5
5
|
*/
|
|
6
6
|
/** Federation SQLite Bureau Token 表。 */
|
|
7
7
|
export declare const sqlite_bureau_tokens: import("drizzle-orm/sqlite-core").SQLiteTableWithColumns<{
|
|
@@ -27,25 +27,6 @@ export declare const sqlite_bureau_tokens: import("drizzle-orm/sqlite-core").SQL
|
|
|
27
27
|
}, {}, {
|
|
28
28
|
length: number | undefined;
|
|
29
29
|
}>;
|
|
30
|
-
city_id: import("drizzle-orm/sqlite-core").SQLiteColumn<{
|
|
31
|
-
name: "city_id";
|
|
32
|
-
tableName: "federation_bureau_tokens";
|
|
33
|
-
dataType: "string";
|
|
34
|
-
columnType: "SQLiteText";
|
|
35
|
-
data: string;
|
|
36
|
-
driverParam: string;
|
|
37
|
-
notNull: true;
|
|
38
|
-
hasDefault: false;
|
|
39
|
-
isPrimaryKey: false;
|
|
40
|
-
isAutoincrement: false;
|
|
41
|
-
hasRuntimeDefault: false;
|
|
42
|
-
enumValues: [string, ...string[]];
|
|
43
|
-
baseColumn: never;
|
|
44
|
-
identity: undefined;
|
|
45
|
-
generated: undefined;
|
|
46
|
-
}, {}, {
|
|
47
|
-
length: number | undefined;
|
|
48
|
-
}>;
|
|
49
30
|
token_hash: import("drizzle-orm/sqlite-core").SQLiteColumn<{
|
|
50
31
|
name: "token_hash";
|
|
51
32
|
tableName: "federation_bureau_tokens";
|
|
@@ -65,25 +46,6 @@ export declare const sqlite_bureau_tokens: import("drizzle-orm/sqlite-core").SQL
|
|
|
65
46
|
}, {}, {
|
|
66
47
|
length: number | undefined;
|
|
67
48
|
}>;
|
|
68
|
-
capabilities: import("drizzle-orm/sqlite-core").SQLiteColumn<{
|
|
69
|
-
name: "capabilities";
|
|
70
|
-
tableName: "federation_bureau_tokens";
|
|
71
|
-
dataType: "string";
|
|
72
|
-
columnType: "SQLiteText";
|
|
73
|
-
data: string;
|
|
74
|
-
driverParam: string;
|
|
75
|
-
notNull: true;
|
|
76
|
-
hasDefault: false;
|
|
77
|
-
isPrimaryKey: false;
|
|
78
|
-
isAutoincrement: false;
|
|
79
|
-
hasRuntimeDefault: false;
|
|
80
|
-
enumValues: [string, ...string[]];
|
|
81
|
-
baseColumn: never;
|
|
82
|
-
identity: undefined;
|
|
83
|
-
generated: undefined;
|
|
84
|
-
}, {}, {
|
|
85
|
-
length: number | undefined;
|
|
86
|
-
}>;
|
|
87
49
|
status: import("drizzle-orm/sqlite-core").SQLiteColumn<{
|
|
88
50
|
name: "status";
|
|
89
51
|
tableName: "federation_bureau_tokens";
|
|
@@ -166,23 +128,6 @@ export declare const pg_bureau_tokens: import("drizzle-orm/pg-core").PgTableWith
|
|
|
166
128
|
identity: undefined;
|
|
167
129
|
generated: undefined;
|
|
168
130
|
}, {}, {}>;
|
|
169
|
-
city_id: import("drizzle-orm/pg-core").PgColumn<{
|
|
170
|
-
name: "city_id";
|
|
171
|
-
tableName: "federation_bureau_tokens";
|
|
172
|
-
dataType: "string";
|
|
173
|
-
columnType: "PgText";
|
|
174
|
-
data: string;
|
|
175
|
-
driverParam: string;
|
|
176
|
-
notNull: true;
|
|
177
|
-
hasDefault: false;
|
|
178
|
-
isPrimaryKey: false;
|
|
179
|
-
isAutoincrement: false;
|
|
180
|
-
hasRuntimeDefault: false;
|
|
181
|
-
enumValues: [string, ...string[]];
|
|
182
|
-
baseColumn: never;
|
|
183
|
-
identity: undefined;
|
|
184
|
-
generated: undefined;
|
|
185
|
-
}, {}, {}>;
|
|
186
131
|
token_hash: import("drizzle-orm/pg-core").PgColumn<{
|
|
187
132
|
name: "token_hash";
|
|
188
133
|
tableName: "federation_bureau_tokens";
|
|
@@ -200,23 +145,6 @@ export declare const pg_bureau_tokens: import("drizzle-orm/pg-core").PgTableWith
|
|
|
200
145
|
identity: undefined;
|
|
201
146
|
generated: undefined;
|
|
202
147
|
}, {}, {}>;
|
|
203
|
-
capabilities: import("drizzle-orm/pg-core").PgColumn<{
|
|
204
|
-
name: "capabilities";
|
|
205
|
-
tableName: "federation_bureau_tokens";
|
|
206
|
-
dataType: "string";
|
|
207
|
-
columnType: "PgText";
|
|
208
|
-
data: string;
|
|
209
|
-
driverParam: string;
|
|
210
|
-
notNull: true;
|
|
211
|
-
hasDefault: false;
|
|
212
|
-
isPrimaryKey: false;
|
|
213
|
-
isAutoincrement: false;
|
|
214
|
-
hasRuntimeDefault: false;
|
|
215
|
-
enumValues: [string, ...string[]];
|
|
216
|
-
baseColumn: never;
|
|
217
|
-
identity: undefined;
|
|
218
|
-
generated: undefined;
|
|
219
|
-
}, {}, {}>;
|
|
220
148
|
status: import("drizzle-orm/pg-core").PgColumn<{
|
|
221
149
|
name: "status";
|
|
222
150
|
tableName: "federation_bureau_tokens";
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"bureau-token-schema.d.ts","sourceRoot":"","sources":["../../../src/federation/auth/bureau-token-schema.ts"],"names":[],"mappings":"AAAA;;;;GAIG;AAOH,wCAAwC;AACxC,eAAO,MAAM,oBAAoB
|
|
1
|
+
{"version":3,"file":"bureau-token-schema.d.ts","sourceRoot":"","sources":["../../../src/federation/auth/bureau-token-schema.ts"],"names":[],"mappings":"AAAA;;;;GAIG;AAOH,wCAAwC;AACxC,eAAO,MAAM,oBAAoB;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;EAW/B,CAAC;AAEH,0CAA0C;AAC1C,eAAO,MAAM,gBAAgB;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;EAW3B,CAAC"}
|