@downcity/city 0.2.124 → 0.2.129
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 +31 -1
- package/bin/client/types.d.ts +6 -2
- package/bin/client/types.d.ts.map +1 -1
- package/bin/federation/auth/authenticator.d.ts +9 -0
- package/bin/federation/auth/authenticator.d.ts.map +1 -1
- package/bin/federation/auth/authenticator.js +17 -0
- package/bin/federation/auth/authenticator.js.map +1 -1
- package/bin/federation/federation-middleware.d.ts +17 -0
- package/bin/federation/federation-middleware.d.ts.map +1 -0
- package/bin/federation/federation-middleware.js +41 -0
- package/bin/federation/federation-middleware.js.map +1 -0
- package/bin/federation/federation-router.d.ts.map +1 -1
- package/bin/federation/federation-router.js +20 -4
- package/bin/federation/federation-router.js.map +1 -1
- package/bin/federation/federation.d.ts +13 -11
- package/bin/federation/federation.d.ts.map +1 -1
- package/bin/federation/federation.js +26 -18
- package/bin/federation/federation.js.map +1 -1
- package/bin/federation/middlewares.d.ts +44 -0
- package/bin/federation/middlewares.d.ts.map +1 -0
- package/bin/federation/middlewares.js +219 -0
- package/bin/federation/middlewares.js.map +1 -0
- package/bin/federation/types.d.ts +32 -2
- package/bin/federation/types.d.ts.map +1 -1
- package/bin/index.d.ts +3 -1
- package/bin/index.d.ts.map +1 -1
- package/bin/index.js +1 -0
- package/bin/index.js.map +1 -1
- package/bin/pact/admin/index.d.ts +1 -1
- package/bin/pact/admin/index.d.ts.map +1 -1
- package/bin/pact/admin/index.js +21 -15
- package/bin/pact/admin/index.js.map +1 -1
- package/bin/pact/admin/types.d.ts +2 -2
- package/bin/pact/admin/types.d.ts.map +1 -1
- package/bin/pact/requester.d.ts +47 -0
- package/bin/pact/requester.d.ts.map +1 -0
- package/bin/pact/requester.js +93 -0
- package/bin/pact/requester.js.map +1 -0
- package/bin/pact/rpc-client.d.ts +30 -0
- package/bin/pact/rpc-client.d.ts.map +1 -0
- package/bin/pact/rpc-client.js +99 -0
- package/bin/pact/rpc-client.js.map +1 -0
- package/bin/pact/user/index.d.ts +1 -1
- package/bin/pact/user/index.d.ts.map +1 -1
- package/bin/pact/user/index.js +21 -15
- package/bin/pact/user/index.js.map +1 -1
- package/bin/pact/user/types.d.ts +2 -2
- package/bin/pact/user/types.d.ts.map +1 -1
- package/bin/service/instruction.js +1 -1
- package/bin/service/instruction.js.map +1 -1
- package/bin/types/FederationMiddleware.d.ts +138 -0
- package/bin/types/FederationMiddleware.d.ts.map +1 -0
- package/bin/types/FederationMiddleware.js +9 -0
- package/bin/types/FederationMiddleware.js.map +1 -0
- package/package.json +2 -2
|
@@ -0,0 +1,30 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Federation RPC client。
|
|
3
|
+
*
|
|
4
|
+
* 关键点(中文)
|
|
5
|
+
* - 仅用于 `rpc://` 本机 Federation transport。
|
|
6
|
+
* - 使用 NDJSON over TCP,与 `@downcity/server` 的 FederationRPC 对接。
|
|
7
|
+
*/
|
|
8
|
+
import type { FederationRpcIdentity, FederationRpcResponseData } from "@downcity/type";
|
|
9
|
+
/**
|
|
10
|
+
* Federation RPC 请求输入。
|
|
11
|
+
*/
|
|
12
|
+
export interface FederationRpcClientRequest {
|
|
13
|
+
/** RPC URL,例如 `rpc://127.0.0.1:15315`。 */
|
|
14
|
+
url: string;
|
|
15
|
+
/** 本机可信身份。 */
|
|
16
|
+
identity: FederationRpcIdentity;
|
|
17
|
+
/** HTTP 方法。 */
|
|
18
|
+
method: string;
|
|
19
|
+
/** Federation 请求路径。 */
|
|
20
|
+
path: string;
|
|
21
|
+
/** 请求头。 */
|
|
22
|
+
headers?: Record<string, string>;
|
|
23
|
+
/** 请求 body。 */
|
|
24
|
+
body?: string;
|
|
25
|
+
}
|
|
26
|
+
/**
|
|
27
|
+
* 发送一次 Federation RPC 请求。
|
|
28
|
+
*/
|
|
29
|
+
export declare function request_federation_rpc(input: FederationRpcClientRequest): Promise<FederationRpcResponseData>;
|
|
30
|
+
//# sourceMappingURL=rpc-client.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"rpc-client.d.ts","sourceRoot":"","sources":["../../src/pact/rpc-client.ts"],"names":[],"mappings":"AAAA;;;;;;GAMG;AAEH,OAAO,KAAK,EACV,qBAAqB,EAErB,yBAAyB,EAE1B,MAAM,gBAAgB,CAAC;AA4BxB;;GAEG;AACH,MAAM,WAAW,0BAA0B;IACzC,0CAA0C;IAC1C,GAAG,EAAE,MAAM,CAAC;IACZ,cAAc;IACd,QAAQ,EAAE,qBAAqB,CAAC;IAChC,eAAe;IACf,MAAM,EAAE,MAAM,CAAC;IACf,uBAAuB;IACvB,IAAI,EAAE,MAAM,CAAC;IACb,WAAW;IACX,OAAO,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,CAAC;IACjC,eAAe;IACf,IAAI,CAAC,EAAE,MAAM,CAAC;CACf;AAED;;GAEG;AACH,wBAAsB,sBAAsB,CAC1C,KAAK,EAAE,0BAA0B,GAChC,OAAO,CAAC,yBAAyB,CAAC,CAsEpC"}
|
|
@@ -0,0 +1,99 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Federation RPC client。
|
|
3
|
+
*
|
|
4
|
+
* 关键点(中文)
|
|
5
|
+
* - 仅用于 `rpc://` 本机 Federation transport。
|
|
6
|
+
* - 使用 NDJSON over TCP,与 `@downcity/server` 的 FederationRPC 对接。
|
|
7
|
+
*/
|
|
8
|
+
/**
|
|
9
|
+
* 发送一次 Federation RPC 请求。
|
|
10
|
+
*/
|
|
11
|
+
export async function request_federation_rpc(input) {
|
|
12
|
+
const net = await load_node_net();
|
|
13
|
+
const endpoint = parse_federation_rpc_url(input.url);
|
|
14
|
+
const request_id = `fed_rpc_${Date.now()}_${Math.random().toString(36).slice(2)}`;
|
|
15
|
+
const request = {
|
|
16
|
+
id: request_id,
|
|
17
|
+
method: "federation.request",
|
|
18
|
+
params: {
|
|
19
|
+
method: input.method,
|
|
20
|
+
path: input.path,
|
|
21
|
+
headers: input.headers,
|
|
22
|
+
body: input.body,
|
|
23
|
+
identity: input.identity,
|
|
24
|
+
},
|
|
25
|
+
};
|
|
26
|
+
return await new Promise((resolve, reject) => {
|
|
27
|
+
const socket = net.createConnection(endpoint);
|
|
28
|
+
let buffered = "";
|
|
29
|
+
let settled = false;
|
|
30
|
+
const finish = (error, data) => {
|
|
31
|
+
if (settled)
|
|
32
|
+
return;
|
|
33
|
+
settled = true;
|
|
34
|
+
socket.destroy();
|
|
35
|
+
if (error) {
|
|
36
|
+
reject(error instanceof Error ? error : new Error(String(error)));
|
|
37
|
+
return;
|
|
38
|
+
}
|
|
39
|
+
resolve(data);
|
|
40
|
+
};
|
|
41
|
+
socket.on("connect", () => {
|
|
42
|
+
socket.write(`${JSON.stringify(request)}\n`);
|
|
43
|
+
});
|
|
44
|
+
socket.on("data", (chunk) => {
|
|
45
|
+
buffered += chunk.toString("utf8");
|
|
46
|
+
let newline_index = buffered.indexOf("\n");
|
|
47
|
+
while (newline_index >= 0) {
|
|
48
|
+
const line = buffered.slice(0, newline_index).trim();
|
|
49
|
+
buffered = buffered.slice(newline_index + 1);
|
|
50
|
+
if (line) {
|
|
51
|
+
try {
|
|
52
|
+
const frame = JSON.parse(line);
|
|
53
|
+
if (frame.id !== request_id) {
|
|
54
|
+
throw new Error(`Unexpected Federation RPC response id: ${frame.id}`);
|
|
55
|
+
}
|
|
56
|
+
if (!frame.success) {
|
|
57
|
+
throw new Error(frame.error);
|
|
58
|
+
}
|
|
59
|
+
finish(undefined, frame.data);
|
|
60
|
+
}
|
|
61
|
+
catch (error) {
|
|
62
|
+
finish(error);
|
|
63
|
+
}
|
|
64
|
+
}
|
|
65
|
+
newline_index = buffered.indexOf("\n");
|
|
66
|
+
}
|
|
67
|
+
});
|
|
68
|
+
socket.on("error", (error) => {
|
|
69
|
+
finish(error);
|
|
70
|
+
});
|
|
71
|
+
socket.on("close", () => {
|
|
72
|
+
if (!settled) {
|
|
73
|
+
finish(new Error("Federation RPC socket closed before response"));
|
|
74
|
+
}
|
|
75
|
+
});
|
|
76
|
+
});
|
|
77
|
+
}
|
|
78
|
+
async function load_node_net() {
|
|
79
|
+
const loader = new Function("specifier", "return import(specifier)");
|
|
80
|
+
return await loader("node:net");
|
|
81
|
+
}
|
|
82
|
+
function parse_federation_rpc_url(value) {
|
|
83
|
+
const url = new URL(value);
|
|
84
|
+
if (url.protocol !== "rpc:") {
|
|
85
|
+
throw new TypeError(`Unsupported Federation RPC protocol: ${url.protocol}`);
|
|
86
|
+
}
|
|
87
|
+
if (!url.hostname) {
|
|
88
|
+
throw new TypeError("Federation RPC url requires a host");
|
|
89
|
+
}
|
|
90
|
+
const port = Number(url.port);
|
|
91
|
+
if (!Number.isInteger(port) || port <= 0 || port > 65535) {
|
|
92
|
+
throw new TypeError("Federation RPC url requires a valid port");
|
|
93
|
+
}
|
|
94
|
+
return {
|
|
95
|
+
host: url.hostname,
|
|
96
|
+
port,
|
|
97
|
+
};
|
|
98
|
+
}
|
|
99
|
+
//# sourceMappingURL=rpc-client.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"rpc-client.js","sourceRoot":"","sources":["../../src/pact/rpc-client.ts"],"names":[],"mappings":"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"}
|
package/bin/pact/user/index.d.ts
CHANGED
|
@@ -11,7 +11,7 @@ export declare class UserPactAccess {
|
|
|
11
11
|
readonly serverUrl: string;
|
|
12
12
|
readonly token: string | undefined;
|
|
13
13
|
private readonly city_id?;
|
|
14
|
-
private readonly
|
|
14
|
+
private readonly requester;
|
|
15
15
|
constructor(options: UserPactAccessOptions);
|
|
16
16
|
/** 获取 Service 调用器 */
|
|
17
17
|
service(name: string): ServiceClient;
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../src/pact/user/index.ts"],"names":[],"mappings":"AAAA;;GAEG;AAEH,OAAO,EAAE,SAAS,EAAkB,MAAM,wBAAwB,CAAC;AACnE,OAAO,EAAE,cAAc,EAAE,MAAM,6BAA6B,CAAC;AAC7D,OAAO,EAAE,aAAa,EAAE,MAAM,uBAAuB,CAAC;AACtD,OAAO,KAAK,EAAE,qBAAqB,EAAoB,kBAAkB,EAAE,MAAM,YAAY,CAAC;
|
|
1
|
+
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../src/pact/user/index.ts"],"names":[],"mappings":"AAAA;;GAEG;AAEH,OAAO,EAAE,SAAS,EAAkB,MAAM,wBAAwB,CAAC;AACnE,OAAO,EAAE,cAAc,EAAE,MAAM,6BAA6B,CAAC;AAC7D,OAAO,EAAE,aAAa,EAAE,MAAM,uBAAuB,CAAC;AACtD,OAAO,KAAK,EAAE,qBAAqB,EAAoB,kBAAkB,EAAE,MAAM,YAAY,CAAC;AAY9F,qBAAa,cAAc;IACzB,QAAQ,CAAC,EAAE,EAAE,SAAS,CAAC;IACvB,QAAQ,CAAC,OAAO,EAAE,cAAc,CAAC;IAEjC,QAAQ,CAAC,SAAS,EAAE,MAAM,CAAC;IAC3B,QAAQ,CAAC,KAAK,EAAE,MAAM,GAAG,SAAS,CAAC;IAEnC,OAAO,CAAC,QAAQ,CAAC,OAAO,CAAC,CAAS;IAClC,OAAO,CAAC,QAAQ,CAAC,SAAS,CAAgB;gBAE9B,OAAO,EAAE,qBAAqB;IAuC1C,qBAAqB;IACrB,OAAO,CAAC,IAAI,EAAE,MAAM,GAAG,aAAa;IAWpC,wBAAwB;IAClB,YAAY,IAAI,OAAO,CAAC,kBAAkB,EAAE,CAAC;IASnD,OAAO,CAAC,IAAI;IAIZ,OAAO,CAAC,GAAG;IAKX,OAAO,CAAC,QAAQ;IAShB,OAAO,CAAC,UAAU;IAQlB,OAAO,CAAC,eAAe;IAKvB,OAAO,CAAC,YAAY;CAGrB"}
|
package/bin/pact/user/index.js
CHANGED
|
@@ -4,22 +4,35 @@
|
|
|
4
4
|
import { AIInvoker, serializeModel } from "../invoker/ai/index.js";
|
|
5
5
|
import { PaymentInvoker } from "../invoker/payment/index.js";
|
|
6
6
|
import { ServiceClient } from "../invoker/invoker.js";
|
|
7
|
-
import {
|
|
7
|
+
import { requiredString, } from "../http.js";
|
|
8
|
+
import { create_http_requester, create_rpc_requester, is_rpc_url, } from "../requester.js";
|
|
8
9
|
export class UserPactAccess {
|
|
9
10
|
ai;
|
|
10
11
|
payment;
|
|
11
12
|
serverUrl;
|
|
12
13
|
token;
|
|
13
14
|
city_id;
|
|
14
|
-
|
|
15
|
+
requester;
|
|
15
16
|
constructor(options) {
|
|
16
17
|
if (!options || typeof options !== "object") {
|
|
17
18
|
throw new TypeError("User City options are required");
|
|
18
19
|
}
|
|
19
|
-
this.serverUrl =
|
|
20
|
+
this.serverUrl = requiredString(options.base_url, "base_url").replace(/\/+$/, "");
|
|
20
21
|
this.token = readOptional(options.user_token);
|
|
21
22
|
this.city_id = readOptional(options.city_id);
|
|
22
|
-
this.
|
|
23
|
+
this.requester = is_rpc_url(this.serverUrl)
|
|
24
|
+
? create_rpc_requester({
|
|
25
|
+
base_url: this.serverUrl,
|
|
26
|
+
identity: {
|
|
27
|
+
role: "user",
|
|
28
|
+
city_id: this.require_city_id(),
|
|
29
|
+
},
|
|
30
|
+
})
|
|
31
|
+
: create_http_requester({
|
|
32
|
+
base_url: this.serverUrl,
|
|
33
|
+
fetch: options.fetch,
|
|
34
|
+
with_auth: (init) => this.withAuth(init),
|
|
35
|
+
});
|
|
23
36
|
this.ai = new AIInvoker({
|
|
24
37
|
baseUrl: this.serverUrl,
|
|
25
38
|
token: this.token,
|
|
@@ -51,19 +64,12 @@ export class UserPactAccess {
|
|
|
51
64
|
// 内部
|
|
52
65
|
// ===================================================================
|
|
53
66
|
json(path, init) {
|
|
54
|
-
return
|
|
55
|
-
fetch: this.fetchImpl,
|
|
56
|
-
url: `${this.serverUrl}${path}`,
|
|
57
|
-
init: this.withAuth(init),
|
|
58
|
-
});
|
|
67
|
+
return this.requester.json(path, init);
|
|
59
68
|
}
|
|
60
69
|
raw(path, init) {
|
|
61
|
-
this.
|
|
62
|
-
|
|
63
|
-
|
|
64
|
-
url: `${this.serverUrl}${path}`,
|
|
65
|
-
init: this.withAuth(init),
|
|
66
|
-
});
|
|
70
|
+
if (!is_rpc_url(this.serverUrl))
|
|
71
|
+
this.requireToken();
|
|
72
|
+
return this.requester.raw(path, init);
|
|
67
73
|
}
|
|
68
74
|
withAuth(init) {
|
|
69
75
|
const headers = {
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.js","sourceRoot":"","sources":["../../../src/pact/user/index.ts"],"names":[],"mappings":"AAAA;;GAEG;AAEH,OAAO,EAAE,SAAS,EAAE,cAAc,EAAE,MAAM,wBAAwB,CAAC;AACnE,OAAO,EAAE,cAAc,EAAE,MAAM,6BAA6B,CAAC;AAC7D,OAAO,EAAE,aAAa,EAAE,MAAM,uBAAuB,CAAC;AAEtD,OAAO,EACL,YAAY,
|
|
1
|
+
{"version":3,"file":"index.js","sourceRoot":"","sources":["../../../src/pact/user/index.ts"],"names":[],"mappings":"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"}
|
package/bin/pact/user/types.d.ts
CHANGED
|
@@ -35,11 +35,11 @@ export interface UserServiceSummary {
|
|
|
35
35
|
}
|
|
36
36
|
/** User City 内部访问层构造参数 */
|
|
37
37
|
export interface UserPactAccessOptions {
|
|
38
|
-
/** City
|
|
38
|
+
/** City 的访问入口地址,支持 `http(s)://` 与本机 `rpc://`。 */
|
|
39
39
|
base_url: string;
|
|
40
40
|
/** 当前 user_token 绑定的 City ID。 */
|
|
41
41
|
city_id?: string;
|
|
42
|
-
/** 终端用户访问 token
|
|
42
|
+
/** 终端用户访问 token;使用本机 `rpc://` 时不需要传入。 */
|
|
43
43
|
user_token?: string;
|
|
44
44
|
/** 自定义 fetch 实现。 */
|
|
45
45
|
fetch?: FetchLike;
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"types.d.ts","sourceRoot":"","sources":["../../../src/pact/user/types.ts"],"names":[],"mappings":"AAAA;;GAEG;AAEH,OAAO,KAAK,EAAE,SAAS,EAAE,cAAc,EAAE,MAAM,IAAI,CAAC;AACpD,OAAO,KAAK,EAAE,SAAS,EAAE,MAAM,YAAY,CAAC;AAC5C,OAAO,KAAK,EAAE,cAAc,EAAE,MAAM,wBAAwB,CAAC;AAC7D,OAAO,KAAK,EACV,gBAAgB,EAChB,wBAAwB,EACxB,kBAAkB,EAClB,uBAAuB,EACxB,MAAM,+BAA+B,CAAC;AACvC,OAAO,KAAK,EACV,iBAAiB,EACjB,uBAAuB,EACvB,qBAAqB,EACtB,MAAM,6BAA6B,CAAC;AAErC,gBAAgB;AAChB,MAAM,MAAM,iBAAiB,GAAG,MAAM,GAAG,MAAM,GAAG,OAAO,GAAG,IAAI,CAAC;AAEjE,eAAe;AACf,MAAM,WAAW,cAAc;IAC7B,gBAAgB;IAChB,CAAC,GAAG,EAAE,MAAM,GAAG,aAAa,CAAC;CAC9B;AAED,kBAAkB;AAClB,MAAM,MAAM,aAAa,GAAG,iBAAiB,GAAG,cAAc,GAAG,aAAa,EAAE,CAAC;AAEjF;;GAEG;AACH,MAAM,WAAW,kBAAkB;IACjC,qBAAqB;IACrB,EAAE,EAAE,MAAM,CAAC;IACX,oBAAoB;IACpB,IAAI,EAAE,MAAM,CAAC;IACb,2BAA2B;IAC3B,GAAG,EAAE,KAAK,CAAC;QACT,gBAAgB;QAChB,GAAG,EAAE,MAAM,CAAC;QACZ,kBAAkB;QAClB,WAAW,EAAE,MAAM,CAAC;QACpB,cAAc;QACd,QAAQ,EAAE,OAAO,CAAC;KACnB,CAAC,CAAC;CACJ;AAED,0BAA0B;AAC1B,MAAM,WAAW,qBAAqB;IACpC,
|
|
1
|
+
{"version":3,"file":"types.d.ts","sourceRoot":"","sources":["../../../src/pact/user/types.ts"],"names":[],"mappings":"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"}
|
|
@@ -40,7 +40,7 @@ export function formatInstructionDocument(input) {
|
|
|
40
40
|
lines.push("1. 创建 Federation 实例。");
|
|
41
41
|
lines.push("2. 通过 base.use(...) 注册业务 Service、AIService 或带 install(ctx) 生命周期的服务。");
|
|
42
42
|
lines.push("3. 先调用 await base.health() 完成初始化。");
|
|
43
|
-
lines.push("4. 通过 base.
|
|
43
|
+
lines.push("4. 通过 base.fetch 或 base.fetch(...) 对外提供请求处理。");
|
|
44
44
|
lines.push("");
|
|
45
45
|
lines.push(`内置服务:${input.base.builtin_services.join(", ")}`);
|
|
46
46
|
lines.push(`当前已加载模块:${input.base.loaded_modules.join(", ")}`);
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"instruction.js","sourceRoot":"","sources":["../../src/service/instruction.ts"],"names":[],"mappings":"AAAA;;;;;GAKG;AAqGH;;GAEG;AACH,MAAM,CAAC,KAAK,UAAU,kBAAkB,CACtC,WAA8C,EAC9C,GAAuB;IAEvB,IAAI,CAAC,WAAW;QAAE,OAAO,SAAS,CAAC;IACnC,MAAM,OAAO,GAAG,OAAO,WAAW,KAAK,UAAU;QAC/C,CAAC,CAAC,MAAM,WAAW,CAAC,GAAG,CAAC;QACxB,CAAC,CAAC,WAAW,CAAC;IAChB,MAAM,UAAU,GAAG,MAAM,CAAC,OAAO,IAAI,EAAE,CAAC,CAAC,IAAI,EAAE,CAAC;IAChD,OAAO,UAAU,IAAI,SAAS,CAAC;AACjC,CAAC;AAED;;GAEG;AACH,MAAM,UAAU,eAAe,CAAC,IAAe;IAC7C,IAAI,IAAI,CAAC,MAAM,KAAK,CAAC;QAAE,OAAO,sBAAsB,CAAC;IACrD,MAAM,MAAM,GAAG,IAAI,GAAG,CAAS,IAAI,CAAC,CAAC;IACrC,MAAM,CAAC,GAAG,CAAC,OAAO,CAAC,CAAC;IACpB,OAAO,CAAC,GAAG,MAAM,CAAC,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC;AACjC,CAAC;AAED;;GAEG;AACH,MAAM,UAAU,yBAAyB,CAAC,KAMzC;IACC,MAAM,KAAK,GAAa,EAAE,CAAC;IAE3B,KAAK,CAAC,IAAI,CAAC,mCAAmC,CAAC,CAAC;IAChD,KAAK,CAAC,IAAI,CAAC,EAAE,CAAC,CAAC;IACf,KAAK,CAAC,IAAI,CAAC,eAAe,CAAC,CAAC;IAC5B,KAAK,CAAC,IAAI,CAAC,4HAA4H,CAAC,CAAC;IACzI,KAAK,CAAC,IAAI,CAAC,EAAE,CAAC,CAAC;IACf,KAAK,CAAC,IAAI,CAAC,OAAO,CAAC,CAAC;IACpB,KAAK,CAAC,IAAI,CAAC,sBAAsB,CAAC,CAAC;IACnC,KAAK,CAAC,IAAI,CAAC,qEAAqE,CAAC,CAAC;IAClF,KAAK,CAAC,IAAI,CAAC,mCAAmC,CAAC,CAAC;IAChD,KAAK,CAAC,IAAI,CAAC
|
|
1
|
+
{"version":3,"file":"instruction.js","sourceRoot":"","sources":["../../src/service/instruction.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,138 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Federation HTTP Middleware 类型模块。
|
|
3
|
+
*
|
|
4
|
+
* 定义 `fed.middle()` 使用的中间件上下文、next 函数以及内置
|
|
5
|
+
* middleware helper 的公开配置类型。该层只处理 HTTP 入站横切策略,
|
|
6
|
+
* 不承载 Service / Action 的业务生命周期逻辑。
|
|
7
|
+
*/
|
|
8
|
+
import type { Service } from "../service/service.js";
|
|
9
|
+
import type { Runtime } from "../federation/runtime.js";
|
|
10
|
+
import type { FederationRequestExecutionContext } from "../federation/types.js";
|
|
11
|
+
/**
|
|
12
|
+
* Federation middleware 的后续执行函数。
|
|
13
|
+
*
|
|
14
|
+
* 关键说明(中文)
|
|
15
|
+
* - 调用 `next()` 会进入下一个 middleware 或最终的内部 router。
|
|
16
|
+
* - 每个 middleware 中的 `next()` 最多只能调用一次。
|
|
17
|
+
*/
|
|
18
|
+
export type FederationMiddlewareNext = () => Promise<Response>;
|
|
19
|
+
/**
|
|
20
|
+
* Federation HTTP middleware 函数。
|
|
21
|
+
*
|
|
22
|
+
* 关键说明(中文)
|
|
23
|
+
* - 返回 `Response` 可以短路请求。
|
|
24
|
+
* - `await next()` 后可以对响应 headers 做后处理。
|
|
25
|
+
* - middleware 运行在内部 Hono router 之前,因此可在 body 读取前拒绝请求。
|
|
26
|
+
*/
|
|
27
|
+
export type FederationMiddleware = (ctx: FederationMiddlewareContext, next: FederationMiddlewareNext) => Promise<Response> | Response;
|
|
28
|
+
/**
|
|
29
|
+
* 暴露给 middleware 的 Federation 只读引用。
|
|
30
|
+
*/
|
|
31
|
+
export interface FederationMiddlewareFederationRef {
|
|
32
|
+
/** 返回当前 Federation 已注册的 Service 列表。 */
|
|
33
|
+
services(): readonly Service[];
|
|
34
|
+
}
|
|
35
|
+
/**
|
|
36
|
+
* Federation middleware 单次请求上下文。
|
|
37
|
+
*/
|
|
38
|
+
export interface FederationMiddlewareContext {
|
|
39
|
+
/** 当前原始 HTTP 请求。 */
|
|
40
|
+
request: Request;
|
|
41
|
+
/** 宿主运行时的单次请求执行上下文。 */
|
|
42
|
+
execution?: FederationRequestExecutionContext;
|
|
43
|
+
/** 当前 Federation 的运行时能力集合。 */
|
|
44
|
+
runtime: Runtime;
|
|
45
|
+
/** 当前 Federation 的只读能力引用。 */
|
|
46
|
+
federation: FederationMiddlewareFederationRef;
|
|
47
|
+
/** middleware 之间共享的轻量临时上下文。 */
|
|
48
|
+
locals: Record<string, unknown>;
|
|
49
|
+
}
|
|
50
|
+
/**
|
|
51
|
+
* 请求体大小限制配置。
|
|
52
|
+
*/
|
|
53
|
+
export interface BodyLimitOptions {
|
|
54
|
+
/** 允许的最大请求体字节数。 */
|
|
55
|
+
max_bytes: number;
|
|
56
|
+
/** 需要检查的 HTTP 方法;默认检查 POST、PUT、PATCH。 */
|
|
57
|
+
methods?: readonly string[];
|
|
58
|
+
/** 需要检查的路径模式;支持精确路径和 `*` 后缀前缀匹配。 */
|
|
59
|
+
paths?: readonly string[];
|
|
60
|
+
}
|
|
61
|
+
/**
|
|
62
|
+
* CORS middleware 配置。
|
|
63
|
+
*/
|
|
64
|
+
export interface CorsOptions {
|
|
65
|
+
/** 允许的 Origin 列表;传 `"*"` 表示允许所有 Origin。 */
|
|
66
|
+
origins: readonly string[] | "*";
|
|
67
|
+
/** 允许的 HTTP 方法列表。 */
|
|
68
|
+
methods?: readonly string[];
|
|
69
|
+
/** 允许的请求头列表。 */
|
|
70
|
+
headers?: readonly string[];
|
|
71
|
+
/** preflight 响应的缓存秒数。 */
|
|
72
|
+
max_age?: number;
|
|
73
|
+
/** Origin 不允许时是否直接返回 403。 */
|
|
74
|
+
strict?: boolean;
|
|
75
|
+
}
|
|
76
|
+
/**
|
|
77
|
+
* 安全响应头配置。
|
|
78
|
+
*/
|
|
79
|
+
export interface SecurityHeadersOptions {
|
|
80
|
+
/** 是否设置 X-Content-Type-Options,默认 true。 */
|
|
81
|
+
content_type_options?: boolean;
|
|
82
|
+
/** Referrer-Policy 响应头值,默认 no-referrer。 */
|
|
83
|
+
referrer_policy?: string;
|
|
84
|
+
/** X-Frame-Options 响应头值,默认 DENY。 */
|
|
85
|
+
frame_options?: string;
|
|
86
|
+
/** Permissions-Policy 响应头值。 */
|
|
87
|
+
permissions_policy?: string;
|
|
88
|
+
/** Strict-Transport-Security 响应头值;未传入时不设置。 */
|
|
89
|
+
strict_transport_security?: string;
|
|
90
|
+
/** Content-Security-Policy 响应头值;未传入时不设置。 */
|
|
91
|
+
content_security_policy?: string;
|
|
92
|
+
}
|
|
93
|
+
/**
|
|
94
|
+
* 请求超时配置。
|
|
95
|
+
*/
|
|
96
|
+
export interface RequestTimeoutOptions {
|
|
97
|
+
/** 请求超时时间,单位毫秒。 */
|
|
98
|
+
ms: number;
|
|
99
|
+
/** 不启用超时保护的路径模式;支持精确路径和 `*` 后缀前缀匹配。 */
|
|
100
|
+
exclude_paths?: readonly string[];
|
|
101
|
+
}
|
|
102
|
+
/**
|
|
103
|
+
* 限流存储接口。
|
|
104
|
+
*/
|
|
105
|
+
export interface RateLimitStore {
|
|
106
|
+
/**
|
|
107
|
+
* 增加当前 key 在窗口内的请求次数。
|
|
108
|
+
*
|
|
109
|
+
* @param key - 限流维度 key。
|
|
110
|
+
* @param window_ms - 限流窗口长度,单位毫秒。
|
|
111
|
+
*/
|
|
112
|
+
increment(key: string, window_ms: number): Promise<RateLimitStoreIncrementResult>;
|
|
113
|
+
}
|
|
114
|
+
/**
|
|
115
|
+
* 限流存储增加计数后的结果。
|
|
116
|
+
*/
|
|
117
|
+
export interface RateLimitStoreIncrementResult {
|
|
118
|
+
/** 当前窗口内已经累计的请求次数。 */
|
|
119
|
+
count: number;
|
|
120
|
+
/** 当前窗口重置的 Unix 时间戳,单位毫秒。 */
|
|
121
|
+
reset_at: number;
|
|
122
|
+
}
|
|
123
|
+
/**
|
|
124
|
+
* 限流 middleware 配置。
|
|
125
|
+
*/
|
|
126
|
+
export interface RateLimitOptions {
|
|
127
|
+
/** 限流窗口长度,单位毫秒。 */
|
|
128
|
+
window_ms: number;
|
|
129
|
+
/** 单个窗口允许的最大请求数。 */
|
|
130
|
+
max: number;
|
|
131
|
+
/** 生成限流 key 的函数。 */
|
|
132
|
+
key(ctx: FederationMiddlewareContext): string | Promise<string>;
|
|
133
|
+
/** 判断当前请求是否需要限流的函数。 */
|
|
134
|
+
match?: (ctx: FederationMiddlewareContext) => boolean | Promise<boolean>;
|
|
135
|
+
/** 限流计数存储。 */
|
|
136
|
+
store: RateLimitStore;
|
|
137
|
+
}
|
|
138
|
+
//# sourceMappingURL=FederationMiddleware.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"FederationMiddleware.d.ts","sourceRoot":"","sources":["../../src/types/FederationMiddleware.ts"],"names":[],"mappings":"AAAA;;;;;;GAMG;AAEH,OAAO,KAAK,EAAE,OAAO,EAAE,MAAM,uBAAuB,CAAC;AACrD,OAAO,KAAK,EAAE,OAAO,EAAE,MAAM,0BAA0B,CAAC;AACxD,OAAO,KAAK,EAAE,iCAAiC,EAAE,MAAM,wBAAwB,CAAC;AAEhF;;;;;;GAMG;AACH,MAAM,MAAM,wBAAwB,GAAG,MAAM,OAAO,CAAC,QAAQ,CAAC,CAAC;AAE/D;;;;;;;GAOG;AACH,MAAM,MAAM,oBAAoB,GAAG,CACjC,GAAG,EAAE,2BAA2B,EAChC,IAAI,EAAE,wBAAwB,KAC3B,OAAO,CAAC,QAAQ,CAAC,GAAG,QAAQ,CAAC;AAElC;;GAEG;AACH,MAAM,WAAW,iCAAiC;IAChD,uCAAuC;IACvC,QAAQ,IAAI,SAAS,OAAO,EAAE,CAAC;CAChC;AAED;;GAEG;AACH,MAAM,WAAW,2BAA2B;IAC1C,oBAAoB;IACpB,OAAO,EAAE,OAAO,CAAC;IACjB,uBAAuB;IACvB,SAAS,CAAC,EAAE,iCAAiC,CAAC;IAC9C,8BAA8B;IAC9B,OAAO,EAAE,OAAO,CAAC;IACjB,6BAA6B;IAC7B,UAAU,EAAE,iCAAiC,CAAC;IAC9C,+BAA+B;IAC/B,MAAM,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAAC;CACjC;AAED;;GAEG;AACH,MAAM,WAAW,gBAAgB;IAC/B,mBAAmB;IACnB,SAAS,EAAE,MAAM,CAAC;IAClB,yCAAyC;IACzC,OAAO,CAAC,EAAE,SAAS,MAAM,EAAE,CAAC;IAC5B,oCAAoC;IACpC,KAAK,CAAC,EAAE,SAAS,MAAM,EAAE,CAAC;CAC3B;AAED;;GAEG;AACH,MAAM,WAAW,WAAW;IAC1B,2CAA2C;IAC3C,OAAO,EAAE,SAAS,MAAM,EAAE,GAAG,GAAG,CAAC;IACjC,qBAAqB;IACrB,OAAO,CAAC,EAAE,SAAS,MAAM,EAAE,CAAC;IAC5B,gBAAgB;IAChB,OAAO,CAAC,EAAE,SAAS,MAAM,EAAE,CAAC;IAC5B,yBAAyB;IACzB,OAAO,CAAC,EAAE,MAAM,CAAC;IACjB,6BAA6B;IAC7B,MAAM,CAAC,EAAE,OAAO,CAAC;CAClB;AAED;;GAEG;AACH,MAAM,WAAW,sBAAsB;IACrC,2CAA2C;IAC3C,oBAAoB,CAAC,EAAE,OAAO,CAAC;IAC/B,2CAA2C;IAC3C,eAAe,CAAC,EAAE,MAAM,CAAC;IACzB,oCAAoC;IACpC,aAAa,CAAC,EAAE,MAAM,CAAC;IACvB,+BAA+B;IAC/B,kBAAkB,CAAC,EAAE,MAAM,CAAC;IAC5B,8CAA8C;IAC9C,yBAAyB,CAAC,EAAE,MAAM,CAAC;IACnC,4CAA4C;IAC5C,uBAAuB,CAAC,EAAE,MAAM,CAAC;CAClC;AAED;;GAEG;AACH,MAAM,WAAW,qBAAqB;IACpC,mBAAmB;IACnB,EAAE,EAAE,MAAM,CAAC;IACX,uCAAuC;IACvC,aAAa,CAAC,EAAE,SAAS,MAAM,EAAE,CAAC;CACnC;AAED;;GAEG;AACH,MAAM,WAAW,cAAc;IAC7B;;;;;OAKG;IACH,SAAS,CAAC,GAAG,EAAE,MAAM,EAAE,SAAS,EAAE,MAAM,GAAG,OAAO,CAAC,6BAA6B,CAAC,CAAC;CACnF;AAED;;GAEG;AACH,MAAM,WAAW,6BAA6B;IAC5C,sBAAsB;IACtB,KAAK,EAAE,MAAM,CAAC;IACd,6BAA6B;IAC7B,QAAQ,EAAE,MAAM,CAAC;CAClB;AAED;;GAEG;AACH,MAAM,WAAW,gBAAgB;IAC/B,mBAAmB;IACnB,SAAS,EAAE,MAAM,CAAC;IAClB,oBAAoB;IACpB,GAAG,EAAE,MAAM,CAAC;IACZ,oBAAoB;IACpB,GAAG,CAAC,GAAG,EAAE,2BAA2B,GAAG,MAAM,GAAG,OAAO,CAAC,MAAM,CAAC,CAAC;IAChE,uBAAuB;IACvB,KAAK,CAAC,EAAE,CAAC,GAAG,EAAE,2BAA2B,KAAK,OAAO,GAAG,OAAO,CAAC,OAAO,CAAC,CAAC;IACzE,cAAc;IACd,KAAK,EAAE,cAAc,CAAC;CACvB"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"FederationMiddleware.js","sourceRoot":"","sources":["../../src/types/FederationMiddleware.ts"],"names":[],"mappings":"AAAA;;;;;;GAMG"}
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@downcity/city",
|
|
3
|
-
"version": "0.2.
|
|
3
|
+
"version": "0.2.129",
|
|
4
4
|
"description": "Downcity City runtime and City access SDK for services, actions, auth, env, and cities.",
|
|
5
5
|
"type": "module",
|
|
6
6
|
"main": "./bin/index.js",
|
|
@@ -41,7 +41,7 @@
|
|
|
41
41
|
"typescript": "^6.0.3"
|
|
42
42
|
},
|
|
43
43
|
"dependencies": {
|
|
44
|
-
"@downcity/type": "0.1.
|
|
44
|
+
"@downcity/type": "0.1.86",
|
|
45
45
|
"ai": "^6.0.193",
|
|
46
46
|
"drizzle-orm": "^0.45.2",
|
|
47
47
|
"hono": "^4.12.23"
|