@downcity/city 0.2.82 → 0.2.93
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 +10 -10
- package/bin/client/city.d.ts +90 -0
- package/bin/client/city.d.ts.map +1 -0
- package/bin/{city → client}/city.js +32 -22
- package/bin/client/city.js.map +1 -0
- package/bin/client/types.d.ts +77 -0
- package/bin/client/types.d.ts.map +1 -0
- package/bin/client/types.js +8 -0
- package/bin/{core → client}/types.js.map +1 -1
- package/bin/{core → federation}/auth/authenticator.d.ts +7 -7
- package/bin/federation/auth/authenticator.d.ts.map +1 -0
- package/bin/{core → federation}/auth/authenticator.js +15 -15
- package/bin/federation/auth/authenticator.js.map +1 -0
- package/bin/federation/auth/token-signer.d.ts.map +1 -0
- package/bin/{core → federation}/auth/token-signer.js +4 -4
- package/bin/federation/auth/token-signer.js.map +1 -0
- package/bin/{core → federation}/auth/types.d.ts +6 -6
- package/bin/federation/auth/types.d.ts.map +1 -0
- package/bin/federation/auth/types.js.map +1 -0
- package/bin/federation/federation-env-catalog.d.ts +13 -0
- package/bin/federation/federation-env-catalog.d.ts.map +1 -0
- package/bin/{core/base/base-env-catalog.js → federation/federation-env-catalog.js} +5 -5
- package/bin/federation/federation-env-catalog.js.map +1 -0
- package/bin/{core/base/base-init.d.ts → federation/federation-init.d.ts} +17 -17
- package/bin/federation/federation-init.d.ts.map +1 -0
- package/bin/{core/base/base-init.js → federation/federation-init.js} +27 -27
- package/bin/federation/federation-init.js.map +1 -0
- package/bin/federation/federation-instruction.d.ts +11 -0
- package/bin/federation/federation-instruction.d.ts.map +1 -0
- package/bin/{core/base/base-instruction.js → federation/federation-instruction.js} +4 -4
- package/bin/federation/federation-instruction.js.map +1 -0
- package/bin/{core/base/base-router.d.ts → federation/federation-router.d.ts} +11 -11
- package/bin/federation/federation-router.d.ts.map +1 -0
- package/bin/{core/base/base-router.js → federation/federation-router.js} +62 -45
- package/bin/federation/federation-router.js.map +1 -0
- package/bin/{core/base/base-runtime.d.ts → federation/federation-runtime.d.ts} +6 -6
- package/bin/federation/federation-runtime.d.ts.map +1 -0
- package/bin/{core/base/base-runtime.js → federation/federation-runtime.js} +10 -10
- package/bin/federation/federation-runtime.js.map +1 -0
- package/bin/{core/base/base.d.ts → federation/federation.d.ts} +15 -15
- package/bin/federation/federation.d.ts.map +1 -0
- package/bin/{core/base/base.js → federation/federation.js} +22 -22
- package/bin/federation/federation.js.map +1 -0
- package/bin/{core → federation}/runtime.d.ts +9 -9
- package/bin/federation/runtime.d.ts.map +1 -0
- package/bin/federation/runtime.js +13 -0
- package/bin/federation/runtime.js.map +1 -0
- package/bin/{core → federation}/types.d.ts +6 -6
- package/bin/federation/types.d.ts.map +1 -0
- package/bin/{city/user → federation}/types.js.map +1 -1
- package/bin/index.d.ts +23 -26
- package/bin/index.d.ts.map +1 -1
- package/bin/index.js +13 -15
- package/bin/index.js.map +1 -1
- package/bin/{city → pact}/admin/index.d.ts +23 -7
- package/bin/pact/admin/index.d.ts.map +1 -0
- package/bin/{city → pact}/admin/index.js +21 -8
- package/bin/pact/admin/index.js.map +1 -0
- package/bin/{city → pact}/admin/types.d.ts +7 -1
- package/bin/pact/admin/types.d.ts.map +1 -0
- package/bin/pact/admin/types.js.map +1 -0
- package/bin/{city → pact}/http.d.ts.map +1 -1
- package/bin/{city → pact}/http.js.map +1 -1
- package/bin/{city → pact}/invoker/ai/index.d.ts +1 -1
- package/bin/{city → pact}/invoker/ai/index.d.ts.map +1 -1
- package/bin/{city → pact}/invoker/ai/index.js +1 -1
- package/bin/{city → pact}/invoker/ai/index.js.map +1 -1
- package/bin/{city → pact}/invoker/ai/stream.d.ts +1 -1
- package/bin/{city → pact}/invoker/ai/stream.d.ts.map +1 -1
- package/bin/{city → pact}/invoker/ai/stream.js +1 -1
- package/bin/{city → pact}/invoker/ai/stream.js.map +1 -1
- package/bin/{city → pact}/invoker/ai/types.d.ts +2 -2
- package/bin/{city → pact}/invoker/ai/types.d.ts.map +1 -1
- package/bin/pact/invoker/ai/types.js +9 -0
- package/bin/pact/invoker/ai/types.js.map +1 -0
- package/bin/{city → pact}/invoker/balance/index.d.ts.map +1 -1
- package/bin/{city → pact}/invoker/balance/index.js.map +1 -1
- package/bin/{city → pact}/invoker/balance/types.d.ts.map +1 -1
- package/bin/pact/invoker/balance/types.js.map +1 -0
- package/bin/pact/invoker/cities/index.d.ts +46 -0
- package/bin/pact/invoker/cities/index.d.ts.map +1 -0
- package/bin/{city/invoker/towns → pact/invoker/cities}/index.js +16 -16
- package/bin/pact/invoker/cities/index.js.map +1 -0
- package/bin/pact/invoker/cities/types.d.ts +46 -0
- package/bin/pact/invoker/cities/types.d.ts.map +1 -0
- package/bin/pact/invoker/cities/types.js +5 -0
- package/bin/pact/invoker/cities/types.js.map +1 -0
- package/bin/{city → pact}/invoker/env/index.d.ts +2 -2
- package/bin/{city → pact}/invoker/env/index.d.ts.map +1 -1
- package/bin/{city → pact}/invoker/env/index.js +2 -2
- package/bin/{city → pact}/invoker/env/index.js.map +1 -1
- package/bin/{city → pact}/invoker/env/types.d.ts +2 -2
- package/bin/{city → pact}/invoker/env/types.d.ts.map +1 -1
- package/bin/pact/invoker/env/types.js +5 -0
- package/bin/pact/invoker/env/types.js.map +1 -0
- package/bin/{city → pact}/invoker/invoker.d.ts +9 -9
- package/bin/{city → pact}/invoker/invoker.d.ts.map +1 -1
- package/bin/{city → pact}/invoker/invoker.js +11 -11
- package/bin/{city → pact}/invoker/invoker.js.map +1 -1
- package/bin/{city → pact}/invoker/payment/index.d.ts +1 -1
- package/bin/{city → pact}/invoker/payment/index.d.ts.map +1 -1
- package/bin/{city → pact}/invoker/payment/index.js +1 -1
- package/bin/{city → pact}/invoker/payment/index.js.map +1 -1
- package/bin/{city → pact}/invoker/payment/types.d.ts +1 -1
- package/bin/{city → pact}/invoker/payment/types.d.ts.map +1 -1
- package/bin/pact/invoker/payment/types.js.map +1 -0
- package/bin/{city → pact}/user/index.d.ts +5 -5
- package/bin/{city → pact}/user/index.d.ts.map +1 -1
- package/bin/{city → pact}/user/index.js +9 -9
- package/bin/{city → pact}/user/index.js.map +1 -1
- package/bin/{city → pact}/user/types.d.ts +3 -3
- package/bin/{city → pact}/user/types.d.ts.map +1 -1
- package/bin/pact/user/types.js.map +1 -0
- package/bin/service/ai/ai-service.js +3 -3
- package/bin/service/ai/helpers.js +2 -2
- package/bin/service/ai/job-types.d.ts +8 -8
- package/bin/service/ai/job-types.d.ts.map +1 -1
- package/bin/service/ai/schema.d.ts +4 -4
- package/bin/service/ai/schema.js +6 -6
- package/bin/service/ai/schema.js.map +1 -1
- package/bin/service/cities/cities-service.d.ts +15 -0
- package/bin/service/cities/cities-service.d.ts.map +1 -0
- package/bin/service/{towns/towns-service.js → cities/cities-service.js} +17 -17
- package/bin/service/cities/cities-service.js.map +1 -0
- package/bin/service/cities/city-store.d.ts +17 -0
- package/bin/service/cities/city-store.d.ts.map +1 -0
- package/bin/service/{towns/town-store.js → cities/city-store.js} +17 -17
- package/bin/service/cities/city-store.js.map +1 -0
- package/bin/service/{towns → cities}/schema.d.ts +23 -23
- package/bin/service/cities/schema.d.ts.map +1 -0
- package/bin/service/cities/schema.js +60 -0
- package/bin/service/cities/schema.js.map +1 -0
- package/bin/service/cities/types.d.ts +51 -0
- package/bin/service/cities/types.d.ts.map +1 -0
- package/bin/service/cities/types.js +7 -0
- package/bin/service/cities/types.js.map +1 -0
- package/bin/service/env/env-service.d.ts +2 -2
- package/bin/service/env/env-service.js +3 -3
- package/bin/service/env/env-service.js.map +1 -1
- package/bin/service/env/types.d.ts +2 -2
- package/bin/service/env/types.js +1 -1
- package/bin/service/installable-service.d.ts +43 -12
- package/bin/service/installable-service.d.ts.map +1 -1
- package/bin/service/installable-service.js +20 -3
- package/bin/service/installable-service.js.map +1 -1
- package/bin/service/instruction.d.ts +2 -2
- package/bin/service/instruction.js +5 -5
- package/bin/service/instruction.js.map +1 -1
- package/bin/service/service.d.ts +45 -9
- package/bin/service/service.d.ts.map +1 -1
- package/bin/service/service.js +32 -2
- package/bin/service/service.js.map +1 -1
- package/package.json +3 -3
- package/bin/city/admin/index.d.ts.map +0 -1
- package/bin/city/admin/index.js.map +0 -1
- package/bin/city/admin/types.d.ts.map +0 -1
- package/bin/city/admin/types.js.map +0 -1
- package/bin/city/city.d.ts +0 -73
- package/bin/city/city.d.ts.map +0 -1
- package/bin/city/city.js.map +0 -1
- package/bin/city/index.d.ts +0 -20
- package/bin/city/index.d.ts.map +0 -1
- package/bin/city/index.js +0 -14
- package/bin/city/index.js.map +0 -1
- package/bin/city/invoker/ai/types.js +0 -9
- package/bin/city/invoker/ai/types.js.map +0 -1
- package/bin/city/invoker/balance/types.js.map +0 -1
- package/bin/city/invoker/env/types.js +0 -5
- package/bin/city/invoker/env/types.js.map +0 -1
- package/bin/city/invoker/payment/types.js.map +0 -1
- package/bin/city/invoker/towns/index.d.ts +0 -46
- package/bin/city/invoker/towns/index.d.ts.map +0 -1
- package/bin/city/invoker/towns/index.js.map +0 -1
- package/bin/city/invoker/towns/types.d.ts +0 -46
- package/bin/city/invoker/towns/types.d.ts.map +0 -1
- package/bin/city/invoker/towns/types.js +0 -5
- package/bin/city/invoker/towns/types.js.map +0 -1
- package/bin/city/types/city.d.ts +0 -71
- package/bin/city/types/city.d.ts.map +0 -1
- package/bin/city/types/city.js +0 -8
- package/bin/city/types/city.js.map +0 -1
- package/bin/core/auth/authenticator.d.ts.map +0 -1
- package/bin/core/auth/authenticator.js.map +0 -1
- package/bin/core/auth/token-signer.d.ts.map +0 -1
- package/bin/core/auth/token-signer.js.map +0 -1
- package/bin/core/auth/types.d.ts.map +0 -1
- package/bin/core/auth/types.js.map +0 -1
- package/bin/core/base/base-env-catalog.d.ts +0 -13
- package/bin/core/base/base-env-catalog.d.ts.map +0 -1
- package/bin/core/base/base-env-catalog.js.map +0 -1
- package/bin/core/base/base-init.d.ts.map +0 -1
- package/bin/core/base/base-init.js.map +0 -1
- package/bin/core/base/base-instruction.d.ts +0 -11
- package/bin/core/base/base-instruction.d.ts.map +0 -1
- package/bin/core/base/base-instruction.js.map +0 -1
- package/bin/core/base/base-router.d.ts.map +0 -1
- package/bin/core/base/base-router.js.map +0 -1
- package/bin/core/base/base-runtime.d.ts.map +0 -1
- package/bin/core/base/base-runtime.js.map +0 -1
- package/bin/core/base/base.d.ts.map +0 -1
- package/bin/core/base/base.js.map +0 -1
- package/bin/core/runtime.d.ts.map +0 -1
- package/bin/core/runtime.js +0 -13
- package/bin/core/runtime.js.map +0 -1
- package/bin/core/types.d.ts.map +0 -1
- package/bin/service/towns/schema.d.ts.map +0 -1
- package/bin/service/towns/schema.js +0 -60
- package/bin/service/towns/schema.js.map +0 -1
- package/bin/service/towns/town-store.d.ts +0 -17
- package/bin/service/towns/town-store.d.ts.map +0 -1
- package/bin/service/towns/town-store.js.map +0 -1
- package/bin/service/towns/towns-service.d.ts +0 -15
- package/bin/service/towns/towns-service.d.ts.map +0 -1
- package/bin/service/towns/towns-service.js.map +0 -1
- package/bin/service/towns/types.d.ts +0 -51
- package/bin/service/towns/types.d.ts.map +0 -1
- package/bin/service/towns/types.js +0 -7
- package/bin/service/towns/types.js.map +0 -1
- /package/bin/{core → federation}/auth/token-signer.d.ts +0 -0
- /package/bin/{core → federation}/auth/types.js +0 -0
- /package/bin/{core → federation}/types.js +0 -0
- /package/bin/{city → pact}/admin/types.js +0 -0
- /package/bin/{city → pact}/http.d.ts +0 -0
- /package/bin/{city → pact}/http.js +0 -0
- /package/bin/{city → pact}/invoker/balance/index.d.ts +0 -0
- /package/bin/{city → pact}/invoker/balance/index.js +0 -0
- /package/bin/{city → pact}/invoker/balance/types.d.ts +0 -0
- /package/bin/{city → pact}/invoker/balance/types.js +0 -0
- /package/bin/{city → pact}/invoker/payment/types.js +0 -0
- /package/bin/{city → pact}/user/types.js +0 -0
|
@@ -1,10 +1,10 @@
|
|
|
1
1
|
/**
|
|
2
|
-
*
|
|
2
|
+
* City 数据存储。
|
|
3
3
|
*
|
|
4
4
|
* 基于 CityTableApi,不直接依赖 Drizzle。
|
|
5
5
|
*/
|
|
6
6
|
import { randomSecret } from "../../utils/helpers.js";
|
|
7
|
-
export class
|
|
7
|
+
export class CityStore {
|
|
8
8
|
table;
|
|
9
9
|
constructor(table) {
|
|
10
10
|
this.table = table;
|
|
@@ -12,38 +12,38 @@ export class TownStore {
|
|
|
12
12
|
async list() {
|
|
13
13
|
return this.table.select();
|
|
14
14
|
}
|
|
15
|
-
async get(
|
|
16
|
-
const rows = await this.table.select({
|
|
15
|
+
async get(city_id) {
|
|
16
|
+
const rows = await this.table.select({ city_id });
|
|
17
17
|
return rows[0];
|
|
18
18
|
}
|
|
19
19
|
async create(input) {
|
|
20
20
|
const name = String(input.name ?? "").trim();
|
|
21
21
|
if (!name)
|
|
22
|
-
throw new TypeError("
|
|
22
|
+
throw new TypeError("City name is required");
|
|
23
23
|
const now = new Date().toISOString();
|
|
24
|
-
const
|
|
25
|
-
|
|
24
|
+
const city = {
|
|
25
|
+
city_id: input.city_id ?? `city_${randomSecret(12)}`,
|
|
26
26
|
name,
|
|
27
27
|
status: "active",
|
|
28
28
|
created_at: now,
|
|
29
29
|
updated_at: now,
|
|
30
30
|
};
|
|
31
|
-
await this.table.insert(
|
|
32
|
-
return
|
|
31
|
+
await this.table.insert(city);
|
|
32
|
+
return city;
|
|
33
33
|
}
|
|
34
|
-
async setStatus(
|
|
34
|
+
async setStatus(city_id, status) {
|
|
35
35
|
if (status !== "active" && status !== "paused") {
|
|
36
|
-
throw new TypeError(`Invalid
|
|
36
|
+
throw new TypeError(`Invalid city status: ${String(status)}`);
|
|
37
37
|
}
|
|
38
|
-
const existing = await this.get(
|
|
38
|
+
const existing = await this.get(city_id);
|
|
39
39
|
if (!existing)
|
|
40
|
-
throw new Error(`Unknown
|
|
40
|
+
throw new Error(`Unknown city: ${city_id}`);
|
|
41
41
|
const next = { ...existing, status, updated_at: new Date().toISOString() };
|
|
42
|
-
await this.table.update({ where: {
|
|
42
|
+
await this.table.update({ where: { city_id }, values: next });
|
|
43
43
|
return next;
|
|
44
44
|
}
|
|
45
|
-
async remove(
|
|
46
|
-
await this.table.delete({
|
|
45
|
+
async remove(city_id) {
|
|
46
|
+
await this.table.delete({ city_id });
|
|
47
47
|
}
|
|
48
48
|
}
|
|
49
|
-
//# sourceMappingURL=
|
|
49
|
+
//# sourceMappingURL=city-store.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"city-store.js","sourceRoot":"","sources":["../../../src/service/cities/city-store.ts"],"names":[],"mappings":"AAAA;;;;GAIG;AAEH,OAAO,EAAE,YAAY,EAAE,MAAM,wBAAwB,CAAC;AAItD,MAAM,OAAO,SAAS;IACA;IAApB,YAAoB,KAA+B;QAA/B,UAAK,GAAL,KAAK,CAA0B;IAAG,CAAC;IAEvD,KAAK,CAAC,IAAI;QACR,OAAO,IAAI,CAAC,KAAK,CAAC,MAAM,EAAE,CAAC;IAC7B,CAAC;IAED,KAAK,CAAC,GAAG,CAAC,OAAe;QACvB,MAAM,IAAI,GAAG,MAAM,IAAI,CAAC,KAAK,CAAC,MAAM,CAAC,EAAE,OAAO,EAAyB,CAAC,CAAC;QACzE,OAAO,IAAI,CAAC,CAAC,CAAC,CAAC;IACjB,CAAC;IAED,KAAK,CAAC,MAAM,CAAC,KAAsB;QACjC,MAAM,IAAI,GAAG,MAAM,CAAC,KAAK,CAAC,IAAI,IAAI,EAAE,CAAC,CAAC,IAAI,EAAE,CAAC;QAC7C,IAAI,CAAC,IAAI;YAAE,MAAM,IAAI,SAAS,CAAC,uBAAuB,CAAC,CAAC;QACxD,MAAM,GAAG,GAAG,IAAI,IAAI,EAAE,CAAC,WAAW,EAAE,CAAC;QACrC,MAAM,IAAI,GAAe;YACvB,OAAO,EAAE,KAAK,CAAC,OAAO,IAAI,QAAQ,YAAY,CAAC,EAAE,CAAC,EAAE;YACpD,IAAI;YACJ,MAAM,EAAE,QAAQ;YAChB,UAAU,EAAE,GAAG;YACf,UAAU,EAAE,GAAG;SAChB,CAAC;QACF,MAAM,IAAI,CAAC,KAAK,CAAC,MAAM,CAAC,IAAI,CAAC,CAAC;QAC9B,OAAO,IAAI,CAAC;IACd,CAAC;IAED,KAAK,CAAC,SAAS,CAAC,OAAe,EAAE,MAAkB;QACjD,IAAI,MAAM,KAAK,QAAQ,IAAI,MAAM,KAAK,QAAQ,EAAE,CAAC;YAC/C,MAAM,IAAI,SAAS,CAAC,wBAAwB,MAAM,CAAC,MAAM,CAAC,EAAE,CAAC,CAAC;QAChE,CAAC;QACD,MAAM,QAAQ,GAAG,MAAM,IAAI,CAAC,GAAG,CAAC,OAAO,CAAC,CAAC;QACzC,IAAI,CAAC,QAAQ;YAAE,MAAM,IAAI,KAAK,CAAC,iBAAiB,OAAO,EAAE,CAAC,CAAC;QAC3D,MAAM,IAAI,GAAe,EAAE,GAAG,QAAQ,EAAE,MAAM,EAAE,UAAU,EAAE,IAAI,IAAI,EAAE,CAAC,WAAW,EAAE,EAAE,CAAC;QACvF,MAAM,IAAI,CAAC,KAAK,CAAC,MAAM,CAAC,EAAE,KAAK,EAAE,EAAE,OAAO,EAAyB,EAAE,MAAM,EAAE,IAAI,EAAE,CAAC,CAAC;QACrF,OAAO,IAAI,CAAC;IACd,CAAC;IAED,KAAK,CAAC,MAAM,CAAC,OAAe;QAC1B,MAAM,IAAI,CAAC,KAAK,CAAC,MAAM,CAAC,EAAE,OAAO,EAAyB,CAAC,CAAC;IAC9D,CAAC;CACF"}
|
|
@@ -1,19 +1,19 @@
|
|
|
1
1
|
/**
|
|
2
|
-
*
|
|
2
|
+
* City 数据库 schema 模块。
|
|
3
3
|
*
|
|
4
|
-
* 定义 Downcity 内置的
|
|
5
|
-
*
|
|
4
|
+
* 定义 Downcity 内置的 City 表结构(SQLite + Postgres)。
|
|
5
|
+
* City 是 Agent 的生活环境。
|
|
6
6
|
*/
|
|
7
7
|
/**
|
|
8
|
-
* 默认 SQLite
|
|
8
|
+
* 默认 SQLite City 表。
|
|
9
9
|
*/
|
|
10
|
-
export declare const
|
|
11
|
-
name: "
|
|
10
|
+
export declare const sqliteCities: import("drizzle-orm/sqlite-core").SQLiteTableWithColumns<{
|
|
11
|
+
name: "cities";
|
|
12
12
|
schema: undefined;
|
|
13
13
|
columns: {
|
|
14
|
-
|
|
15
|
-
name: "
|
|
16
|
-
tableName: "
|
|
14
|
+
city_id: import("drizzle-orm/sqlite-core").SQLiteColumn<{
|
|
15
|
+
name: "city_id";
|
|
16
|
+
tableName: "cities";
|
|
17
17
|
dataType: "string";
|
|
18
18
|
columnType: "SQLiteText";
|
|
19
19
|
data: string;
|
|
@@ -32,7 +32,7 @@ export declare const sqliteTowns: import("drizzle-orm/sqlite-core").SQLiteTableW
|
|
|
32
32
|
}>;
|
|
33
33
|
name: import("drizzle-orm/sqlite-core").SQLiteColumn<{
|
|
34
34
|
name: "name";
|
|
35
|
-
tableName: "
|
|
35
|
+
tableName: "cities";
|
|
36
36
|
dataType: "string";
|
|
37
37
|
columnType: "SQLiteText";
|
|
38
38
|
data: string;
|
|
@@ -51,7 +51,7 @@ export declare const sqliteTowns: import("drizzle-orm/sqlite-core").SQLiteTableW
|
|
|
51
51
|
}>;
|
|
52
52
|
status: import("drizzle-orm/sqlite-core").SQLiteColumn<{
|
|
53
53
|
name: "status";
|
|
54
|
-
tableName: "
|
|
54
|
+
tableName: "cities";
|
|
55
55
|
dataType: "string";
|
|
56
56
|
columnType: "SQLiteText";
|
|
57
57
|
data: string;
|
|
@@ -70,7 +70,7 @@ export declare const sqliteTowns: import("drizzle-orm/sqlite-core").SQLiteTableW
|
|
|
70
70
|
}>;
|
|
71
71
|
created_at: import("drizzle-orm/sqlite-core").SQLiteColumn<{
|
|
72
72
|
name: "created_at";
|
|
73
|
-
tableName: "
|
|
73
|
+
tableName: "cities";
|
|
74
74
|
dataType: "string";
|
|
75
75
|
columnType: "SQLiteText";
|
|
76
76
|
data: string;
|
|
@@ -89,7 +89,7 @@ export declare const sqliteTowns: import("drizzle-orm/sqlite-core").SQLiteTableW
|
|
|
89
89
|
}>;
|
|
90
90
|
updated_at: import("drizzle-orm/sqlite-core").SQLiteColumn<{
|
|
91
91
|
name: "updated_at";
|
|
92
|
-
tableName: "
|
|
92
|
+
tableName: "cities";
|
|
93
93
|
dataType: "string";
|
|
94
94
|
columnType: "SQLiteText";
|
|
95
95
|
data: string;
|
|
@@ -110,15 +110,15 @@ export declare const sqliteTowns: import("drizzle-orm/sqlite-core").SQLiteTableW
|
|
|
110
110
|
dialect: "sqlite";
|
|
111
111
|
}>;
|
|
112
112
|
/**
|
|
113
|
-
* 默认 Postgres
|
|
113
|
+
* 默认 Postgres City 表。
|
|
114
114
|
*/
|
|
115
|
-
export declare const
|
|
116
|
-
name: "
|
|
115
|
+
export declare const pgCities: import("drizzle-orm/pg-core").PgTableWithColumns<{
|
|
116
|
+
name: "cities";
|
|
117
117
|
schema: undefined;
|
|
118
118
|
columns: {
|
|
119
|
-
|
|
120
|
-
name: "
|
|
121
|
-
tableName: "
|
|
119
|
+
city_id: import("drizzle-orm/pg-core").PgColumn<{
|
|
120
|
+
name: "city_id";
|
|
121
|
+
tableName: "cities";
|
|
122
122
|
dataType: "string";
|
|
123
123
|
columnType: "PgText";
|
|
124
124
|
data: string;
|
|
@@ -135,7 +135,7 @@ export declare const pgTowns: import("drizzle-orm/pg-core").PgTableWithColumns<{
|
|
|
135
135
|
}, {}, {}>;
|
|
136
136
|
name: import("drizzle-orm/pg-core").PgColumn<{
|
|
137
137
|
name: "name";
|
|
138
|
-
tableName: "
|
|
138
|
+
tableName: "cities";
|
|
139
139
|
dataType: "string";
|
|
140
140
|
columnType: "PgText";
|
|
141
141
|
data: string;
|
|
@@ -152,7 +152,7 @@ export declare const pgTowns: import("drizzle-orm/pg-core").PgTableWithColumns<{
|
|
|
152
152
|
}, {}, {}>;
|
|
153
153
|
status: import("drizzle-orm/pg-core").PgColumn<{
|
|
154
154
|
name: "status";
|
|
155
|
-
tableName: "
|
|
155
|
+
tableName: "cities";
|
|
156
156
|
dataType: "string";
|
|
157
157
|
columnType: "PgText";
|
|
158
158
|
data: string;
|
|
@@ -169,7 +169,7 @@ export declare const pgTowns: import("drizzle-orm/pg-core").PgTableWithColumns<{
|
|
|
169
169
|
}, {}, {}>;
|
|
170
170
|
created_at: import("drizzle-orm/pg-core").PgColumn<{
|
|
171
171
|
name: "created_at";
|
|
172
|
-
tableName: "
|
|
172
|
+
tableName: "cities";
|
|
173
173
|
dataType: "string";
|
|
174
174
|
columnType: "PgText";
|
|
175
175
|
data: string;
|
|
@@ -186,7 +186,7 @@ export declare const pgTowns: import("drizzle-orm/pg-core").PgTableWithColumns<{
|
|
|
186
186
|
}, {}, {}>;
|
|
187
187
|
updated_at: import("drizzle-orm/pg-core").PgColumn<{
|
|
188
188
|
name: "updated_at";
|
|
189
|
-
tableName: "
|
|
189
|
+
tableName: "cities";
|
|
190
190
|
dataType: "string";
|
|
191
191
|
columnType: "PgText";
|
|
192
192
|
data: string;
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"schema.d.ts","sourceRoot":"","sources":["../../../src/service/cities/schema.ts"],"names":[],"mappings":"AAAA;;;;;GAKG;AAOH;;GAEG;AACH,eAAO,MAAM,YAAY;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;EAyBvB,CAAC;AAEH;;GAEG;AACH,eAAO,MAAM,QAAQ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;EAyBnB,CAAC"}
|
|
@@ -0,0 +1,60 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* City 数据库 schema 模块。
|
|
3
|
+
*
|
|
4
|
+
* 定义 Downcity 内置的 City 表结构(SQLite + Postgres)。
|
|
5
|
+
* City 是 Agent 的生活环境。
|
|
6
|
+
*/
|
|
7
|
+
import { pgTable, text as pgText } from "drizzle-orm/pg-core";
|
|
8
|
+
import { sqliteTable, text as sqliteText } from "drizzle-orm/sqlite-core";
|
|
9
|
+
const DEFAULT_CITY_TABLE = "cities";
|
|
10
|
+
/**
|
|
11
|
+
* 默认 SQLite City 表。
|
|
12
|
+
*/
|
|
13
|
+
export const sqliteCities = sqliteTable(DEFAULT_CITY_TABLE, {
|
|
14
|
+
/**
|
|
15
|
+
* City ID。
|
|
16
|
+
*/
|
|
17
|
+
city_id: sqliteText("city_id").primaryKey(),
|
|
18
|
+
/**
|
|
19
|
+
* City 名称。
|
|
20
|
+
*/
|
|
21
|
+
name: sqliteText("name").notNull(),
|
|
22
|
+
/**
|
|
23
|
+
* City 状态。
|
|
24
|
+
*/
|
|
25
|
+
status: sqliteText("status").notNull(),
|
|
26
|
+
/**
|
|
27
|
+
* City 创建时间。
|
|
28
|
+
*/
|
|
29
|
+
created_at: sqliteText("created_at").notNull(),
|
|
30
|
+
/**
|
|
31
|
+
* City 更新时间。
|
|
32
|
+
*/
|
|
33
|
+
updated_at: sqliteText("updated_at").notNull(),
|
|
34
|
+
});
|
|
35
|
+
/**
|
|
36
|
+
* 默认 Postgres City 表。
|
|
37
|
+
*/
|
|
38
|
+
export const pgCities = pgTable(DEFAULT_CITY_TABLE, {
|
|
39
|
+
/**
|
|
40
|
+
* City ID。
|
|
41
|
+
*/
|
|
42
|
+
city_id: pgText("city_id").primaryKey(),
|
|
43
|
+
/**
|
|
44
|
+
* City 名称。
|
|
45
|
+
*/
|
|
46
|
+
name: pgText("name").notNull(),
|
|
47
|
+
/**
|
|
48
|
+
* City 状态。
|
|
49
|
+
*/
|
|
50
|
+
status: pgText("status").notNull(),
|
|
51
|
+
/**
|
|
52
|
+
* City 创建时间。
|
|
53
|
+
*/
|
|
54
|
+
created_at: pgText("created_at").notNull(),
|
|
55
|
+
/**
|
|
56
|
+
* City 更新时间。
|
|
57
|
+
*/
|
|
58
|
+
updated_at: pgText("updated_at").notNull(),
|
|
59
|
+
});
|
|
60
|
+
//# sourceMappingURL=schema.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"schema.js","sourceRoot":"","sources":["../../../src/service/cities/schema.ts"],"names":[],"mappings":"AAAA;;;;;GAKG;AAEH,OAAO,EAAE,OAAO,EAAE,IAAI,IAAI,MAAM,EAAE,MAAM,qBAAqB,CAAC;AAC9D,OAAO,EAAE,WAAW,EAAE,IAAI,IAAI,UAAU,EAAE,MAAM,yBAAyB,CAAC;AAE1E,MAAM,kBAAkB,GAAG,QAAQ,CAAC;AAEpC;;GAEG;AACH,MAAM,CAAC,MAAM,YAAY,GAAG,WAAW,CAAC,kBAAkB,EAAE;IAC1D;;OAEG;IACH,OAAO,EAAE,UAAU,CAAC,SAAS,CAAC,CAAC,UAAU,EAAE;IAE3C;;OAEG;IACH,IAAI,EAAE,UAAU,CAAC,MAAM,CAAC,CAAC,OAAO,EAAE;IAElC;;OAEG;IACH,MAAM,EAAE,UAAU,CAAC,QAAQ,CAAC,CAAC,OAAO,EAAE;IAEtC;;OAEG;IACH,UAAU,EAAE,UAAU,CAAC,YAAY,CAAC,CAAC,OAAO,EAAE;IAE9C;;OAEG;IACH,UAAU,EAAE,UAAU,CAAC,YAAY,CAAC,CAAC,OAAO,EAAE;CAC/C,CAAC,CAAC;AAEH;;GAEG;AACH,MAAM,CAAC,MAAM,QAAQ,GAAG,OAAO,CAAC,kBAAkB,EAAE;IAClD;;OAEG;IACH,OAAO,EAAE,MAAM,CAAC,SAAS,CAAC,CAAC,UAAU,EAAE;IAEvC;;OAEG;IACH,IAAI,EAAE,MAAM,CAAC,MAAM,CAAC,CAAC,OAAO,EAAE;IAE9B;;OAEG;IACH,MAAM,EAAE,MAAM,CAAC,QAAQ,CAAC,CAAC,OAAO,EAAE;IAElC;;OAEG;IACH,UAAU,EAAE,MAAM,CAAC,YAAY,CAAC,CAAC,OAAO,EAAE;IAE1C;;OAEG;IACH,UAAU,EAAE,MAAM,CAAC,YAAY,CAAC,CAAC,OAAO,EAAE;CAC3C,CAAC,CAAC"}
|
|
@@ -0,0 +1,51 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* City 公共类型模块。
|
|
3
|
+
*
|
|
4
|
+
* City 是 Agent 的生活环境,每个 API 调用都绑定到一个 City。
|
|
5
|
+
*/
|
|
6
|
+
/**
|
|
7
|
+
* City 当前状态。
|
|
8
|
+
*/
|
|
9
|
+
export type CityStatus = "active" | "paused";
|
|
10
|
+
/**
|
|
11
|
+
* City 记录。
|
|
12
|
+
*/
|
|
13
|
+
export interface CityRecord extends Record<string, unknown> {
|
|
14
|
+
/**
|
|
15
|
+
* City 的唯一 ID。
|
|
16
|
+
*/
|
|
17
|
+
city_id: string;
|
|
18
|
+
/**
|
|
19
|
+
* City 展示名称。
|
|
20
|
+
*/
|
|
21
|
+
name: string;
|
|
22
|
+
/**
|
|
23
|
+
* City 当前状态。
|
|
24
|
+
*/
|
|
25
|
+
status: CityStatus;
|
|
26
|
+
/**
|
|
27
|
+
* City 创建时间。
|
|
28
|
+
*/
|
|
29
|
+
created_at: string;
|
|
30
|
+
/**
|
|
31
|
+
* City 最后更新时间。
|
|
32
|
+
*/
|
|
33
|
+
updated_at: string;
|
|
34
|
+
}
|
|
35
|
+
/**
|
|
36
|
+
* 创建 City 时的输入。
|
|
37
|
+
*/
|
|
38
|
+
export interface CityCreateInput {
|
|
39
|
+
/**
|
|
40
|
+
* City 展示名称。
|
|
41
|
+
*/
|
|
42
|
+
name: string;
|
|
43
|
+
/**
|
|
44
|
+
* 自定义 City ID。
|
|
45
|
+
*
|
|
46
|
+
* 未传入时由 Federation 自动生成 `city_${randomSecret(12)}` 格式的 ID。
|
|
47
|
+
* 传入时直接采用该值,便于在种子场景中使用固定 ID。
|
|
48
|
+
*/
|
|
49
|
+
city_id?: string;
|
|
50
|
+
}
|
|
51
|
+
//# sourceMappingURL=types.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"types.d.ts","sourceRoot":"","sources":["../../../src/service/cities/types.ts"],"names":[],"mappings":"AAAA;;;;GAIG;AAEH;;GAEG;AACH,MAAM,MAAM,UAAU,GAAG,QAAQ,GAAG,QAAQ,CAAC;AAE7C;;GAEG;AACH,MAAM,WAAW,UAAW,SAAQ,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC;IACzD;;OAEG;IACH,OAAO,EAAE,MAAM,CAAC;IAEhB;;OAEG;IACH,IAAI,EAAE,MAAM,CAAC;IAEb;;OAEG;IACH,MAAM,EAAE,UAAU,CAAC;IAEnB;;OAEG;IACH,UAAU,EAAE,MAAM,CAAC;IAEnB;;OAEG;IACH,UAAU,EAAE,MAAM,CAAC;CACpB;AAED;;GAEG;AACH,MAAM,WAAW,eAAe;IAC9B;;OAEG;IACH,IAAI,EAAE,MAAM,CAAC;IAEb;;;;;OAKG;IACH,OAAO,CAAC,EAAE,MAAM,CAAC;CAClB"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"types.js","sourceRoot":"","sources":["../../../src/service/cities/types.ts"],"names":[],"mappings":"AAAA;;;;GAIG"}
|
|
@@ -2,8 +2,8 @@
|
|
|
2
2
|
* env 内置服务。
|
|
3
3
|
*
|
|
4
4
|
* 关键说明(中文)
|
|
5
|
-
* -
|
|
6
|
-
* - EnvProvider 由
|
|
5
|
+
* - Federation 默认注册该 service。
|
|
6
|
+
* - EnvProvider 由 Federation 初始化并注入,不需要产品手动传入。
|
|
7
7
|
*/
|
|
8
8
|
import { Service } from "../service.js";
|
|
9
9
|
export declare class EnvService extends Service {
|
|
@@ -2,8 +2,8 @@
|
|
|
2
2
|
* env 内置服务。
|
|
3
3
|
*
|
|
4
4
|
* 关键说明(中文)
|
|
5
|
-
* -
|
|
6
|
-
* - EnvProvider 由
|
|
5
|
+
* - Federation 默认注册该 service。
|
|
6
|
+
* - EnvProvider 由 Federation 初始化并注入,不需要产品手动传入。
|
|
7
7
|
*/
|
|
8
8
|
import { Service } from "../service.js";
|
|
9
9
|
export class EnvService extends Service {
|
|
@@ -11,7 +11,7 @@ export class EnvService extends Service {
|
|
|
11
11
|
super({ id: "env", name: "Env" });
|
|
12
12
|
this.instruction = [
|
|
13
13
|
"管理 City 运行时环境变量。",
|
|
14
|
-
"适用于导入、列出、更新和删除
|
|
14
|
+
"适用于导入、列出、更新和删除 Federation 内部使用的 env 配置。",
|
|
15
15
|
"不要把真实密钥暴露给产品前端;应只在可信管理端调用这些接口。",
|
|
16
16
|
].join("\n");
|
|
17
17
|
this.action("list", async (ctx) => {
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"env-service.js","sourceRoot":"","sources":["../../../src/service/env/env-service.ts"],"names":[],"mappings":"AAAA;;;;;;GAMG;AAEH,OAAO,EAAE,OAAO,EAAE,MAAM,eAAe,CAAC;AAExC,MAAM,OAAO,UAAW,SAAQ,OAAO;IACrC;QACE,KAAK,CAAC,EAAE,EAAE,EAAE,KAAK,EAAE,IAAI,EAAE,KAAK,EAAE,CAAC,CAAC;QAClC,IAAI,CAAC,WAAW,GAAG;YACjB,kBAAkB;YAClB,
|
|
1
|
+
{"version":3,"file":"env-service.js","sourceRoot":"","sources":["../../../src/service/env/env-service.ts"],"names":[],"mappings":"AAAA;;;;;;GAMG;AAEH,OAAO,EAAE,OAAO,EAAE,MAAM,eAAe,CAAC;AAExC,MAAM,OAAO,UAAW,SAAQ,OAAO;IACrC;QACE,KAAK,CAAC,EAAE,EAAE,EAAE,KAAK,EAAE,IAAI,EAAE,KAAK,EAAE,CAAC,CAAC;QAClC,IAAI,CAAC,WAAW,GAAG;YACjB,kBAAkB;YAClB,yCAAyC;YACzC,gCAAgC;SACjC,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;QAEb,IAAI,CAAC,MAAM,CAAC,MAAM,EAAE,KAAK,EAAE,GAAG,EAAE,EAAE;YAChC,MAAM,IAAI,GAAG,MAAM,IAAI,CAAC,IAAK,CAAC,IAAI,EAAE,CAAC;YACrC,MAAM,KAAK,GAAG,KAAK,CAAC,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,EAAE,CAAC;YAC9C,OAAO,EAAE,KAAK,EAAE,CAAC;QACnB,CAAC,EAAE,EAAE,MAAM,EAAE,KAAK,EAAE,IAAI,EAAE,CAAC,OAAO,CAAC,EAAE,CAAC,CAAC;QAEvC,IAAI,CAAC,MAAM,CAAC,QAAQ,EAAE,KAAK,EAAE,GAAG,EAAE,EAAE;YAClC,MAAM,KAAK,GAAG,MAAM,IAAI,CAAC,IAAK,CAAC,MAAM,CAAC;gBACpC,GAAG,EAAE,MAAM,CAAC,GAAG,CAAC,KAAK,CAAC,GAAG,IAAI,EAAE,CAAC;gBAChC,KAAK,EAAE,MAAM,CAAC,GAAG,CAAC,KAAK,CAAC,KAAK,IAAI,EAAE,CAAC;aACrC,CAAC,CAAC;YACH,OAAO,EAAE,OAAO,EAAE,IAAI,EAAE,GAAG,EAAE,KAAK,CAAC,GAAG,EAAE,CAAC;QAC3C,CAAC,EAAE,EAAE,IAAI,EAAE,CAAC,OAAO,CAAC,EAAE,CAAC,CAAC;QAExB,IAAI,CAAC,MAAM,CAAC,QAAQ,EAAE,KAAK,EAAE,GAAG,EAAE,EAAE;YAClC,MAAM,IAAI,CAAC,IAAK,CAAC,MAAM,CAAC,MAAM,CAAC,GAAG,CAAC,KAAK,CAAC,GAAG,IAAI,EAAE,CAAC,CAAC,CAAC;YACrD,OAAO,EAAE,OAAO,EAAE,IAAI,EAAE,GAAG,EAAE,MAAM,CAAC,GAAG,CAAC,KAAK,CAAC,GAAG,IAAI,EAAE,CAAC,EAAE,CAAC;QAC7D,CAAC,EAAE,EAAE,IAAI,EAAE,CAAC,OAAO,CAAC,EAAE,CAAC,CAAC;QAExB,IAAI,CAAC,MAAM,CAAC,QAAQ,EAAE,KAAK,EAAE,GAAG,EAAE,EAAE;YAClC,MAAM,OAAO,GAAG,MAAM,IAAI,CAAC,IAAK,CAAC,MAAM,CAAC,GAAG,CAAC,KAAK,CAAC,GAAG,CAAC,CAAC;YACvD,OAAO,EAAE,OAAO,EAAE,IAAI,EAAE,KAAK,EAAE,OAAO,CAAC,MAAM,EAAE,IAAI,EAAE,OAAO,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,GAAG,CAAC,EAAE,CAAC;QACnF,CAAC,EAAE,EAAE,IAAI,EAAE,CAAC,OAAO,CAAC,EAAE,CAAC,CAAC;QAExB,IAAI,CAAC,MAAM,CAAC,SAAS,EAAE,KAAK,IAAI,EAAE;YAChC,MAAM,IAAI,CAAC,IAAK,CAAC,OAAO,EAAE,CAAC;YAC3B,MAAM,KAAK,GAAG,MAAM,IAAI,CAAC,IAAK,CAAC,IAAI,EAAE,CAAC;YACtC,OAAO,EAAE,OAAO,EAAE,IAAI,EAAE,KAAK,EAAE,KAAK,CAAC,MAAM,EAAE,CAAC;QAChD,CAAC,EAAE,EAAE,IAAI,EAAE,CAAC,OAAO,CAAC,EAAE,CAAC,CAAC;IAC1B,CAAC;CACF"}
|
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
/**
|
|
2
2
|
* Env 层公共类型。
|
|
3
3
|
*
|
|
4
|
-
* Downcity 的业务 env 统一由
|
|
4
|
+
* Downcity 的业务 env 统一由 Federation 内部管理。
|
|
5
5
|
* Service / Model 只声明自己需要哪些 key,具体值统一写入 City 的 env 表。
|
|
6
6
|
*/
|
|
7
7
|
/**
|
|
@@ -64,7 +64,7 @@ export interface EnvRequirementStatus {
|
|
|
64
64
|
*/
|
|
65
65
|
required: boolean;
|
|
66
66
|
/**
|
|
67
|
-
* 当前
|
|
67
|
+
* 当前 Federation 是否已经配置了该 key。
|
|
68
68
|
*/
|
|
69
69
|
configured: boolean;
|
|
70
70
|
/**
|
package/bin/service/env/types.js
CHANGED
|
@@ -2,21 +2,16 @@
|
|
|
2
2
|
* 可安装服务桥接模块。
|
|
3
3
|
*
|
|
4
4
|
* 提供 `InstallableService` 基类,把带 `install(ctx)` 生命周期的服务
|
|
5
|
-
* 统一桥接到
|
|
5
|
+
* 统一桥接到 Downcity action route 与原生 HTTP route 体系。
|
|
6
6
|
*/
|
|
7
|
-
import { Service, type Context, type EnvRequirement } from "./service.js";
|
|
7
|
+
import { Service, type Context, type EnvRequirement, type ServiceNativeRouteHandler, type ServiceRouteMethod } from "./service.js";
|
|
8
8
|
import { Hook } from "./hook.js";
|
|
9
9
|
import type { CityTableApi } from "../store/table-api.js";
|
|
10
|
-
import type { CreateUserTokenInput, UserTokenIssueResult, RuntimeUser } from "../
|
|
10
|
+
import type { CreateUserTokenInput, UserTokenIssueResult, RuntimeUser } from "../federation/auth/types.js";
|
|
11
11
|
import type { InstructionDefinition } from "./instruction.js";
|
|
12
12
|
export interface ServiceInstallContext {
|
|
13
13
|
table<TRow extends Record<string, unknown> = Record<string, unknown>>(name: string): CityTableApi<TRow>;
|
|
14
|
-
route(config:
|
|
15
|
-
method: "GET" | "POST";
|
|
16
|
-
path: string;
|
|
17
|
-
auth?: Array<"user" | "admin">;
|
|
18
|
-
handler: (ctx: ServiceRouteContext) => Promise<Response> | Response;
|
|
19
|
-
}): void;
|
|
14
|
+
route(config: ServiceActionRouteConfig | ServiceNativeRouteConfig): void;
|
|
20
15
|
hook: {
|
|
21
16
|
before(fn: (ctx: Context) => Promise<void> | void): void;
|
|
22
17
|
after(fn: (ctx: Context) => Promise<void> | void): void;
|
|
@@ -25,12 +20,48 @@ export interface ServiceInstallContext {
|
|
|
25
20
|
createUserToken(input: CreateUserTokenInput): Promise<UserTokenIssueResult>;
|
|
26
21
|
env(key: string): string | undefined;
|
|
27
22
|
}
|
|
23
|
+
export interface ServiceActionRouteConfig {
|
|
24
|
+
method: "GET" | "POST";
|
|
25
|
+
path: string;
|
|
26
|
+
auth?: Array<"user" | "admin">;
|
|
27
|
+
/**
|
|
28
|
+
* 是否公开访问。
|
|
29
|
+
*
|
|
30
|
+
* 关键说明(中文)
|
|
31
|
+
* - `true` 等价于 `auth: []`
|
|
32
|
+
* - 仅影响 Downcity Action 路由的鉴权要求
|
|
33
|
+
*/
|
|
34
|
+
public?: boolean;
|
|
35
|
+
handler: (ctx: ServiceRouteContext) => Promise<Response> | Response;
|
|
36
|
+
}
|
|
37
|
+
export interface ServiceNativeRouteConfig {
|
|
38
|
+
method: ServiceRouteMethod;
|
|
39
|
+
path: string;
|
|
40
|
+
/**
|
|
41
|
+
* 是否公开访问。
|
|
42
|
+
*
|
|
43
|
+
* 关键说明(中文)
|
|
44
|
+
* - `true` 等价于 `auth: []`
|
|
45
|
+
* - native HTTP route 不进入 action/hook 管线,但仍可声明 route 级鉴权
|
|
46
|
+
*/
|
|
47
|
+
public?: boolean;
|
|
48
|
+
auth?: Array<"user" | "admin">;
|
|
49
|
+
handler: {
|
|
50
|
+
/**
|
|
51
|
+
* 原生 HTTP 请求处理器。
|
|
52
|
+
*
|
|
53
|
+
* 适用于 OAuth callback、第三方 webhook、better-auth 等需要完整
|
|
54
|
+
* `Request` / `Response` 语义的协议入口。
|
|
55
|
+
*/
|
|
56
|
+
request: ServiceNativeRouteHandler;
|
|
57
|
+
};
|
|
58
|
+
}
|
|
28
59
|
export interface ServiceRouteContext {
|
|
29
60
|
/** 当前 user_token 解析出的用户;免登录或 admin 请求时可能为空 */
|
|
30
61
|
user?: RuntimeUser;
|
|
31
|
-
/** 当前 user_token 对应的
|
|
32
|
-
|
|
33
|
-
|
|
62
|
+
/** 当前 user_token 对应的 city;免登录或 admin 请求时可能为空 */
|
|
63
|
+
city?: {
|
|
64
|
+
city_id: string;
|
|
34
65
|
status: string;
|
|
35
66
|
};
|
|
36
67
|
/** 原始 HTTP 请求 */
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"installable-service.d.ts","sourceRoot":"","sources":["../../src/service/installable-service.ts"],"names":[],"mappings":"AAAA;;;;;GAKG;AAEH,OAAO,EAAE,OAAO,EAAE,KAAK,OAAO,EAAE,KAAK,cAAc,EAAE,MAAM,cAAc,CAAC;
|
|
1
|
+
{"version":3,"file":"installable-service.d.ts","sourceRoot":"","sources":["../../src/service/installable-service.ts"],"names":[],"mappings":"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"}
|
|
@@ -2,11 +2,19 @@
|
|
|
2
2
|
* 可安装服务桥接模块。
|
|
3
3
|
*
|
|
4
4
|
* 提供 `InstallableService` 基类,把带 `install(ctx)` 生命周期的服务
|
|
5
|
-
* 统一桥接到
|
|
5
|
+
* 统一桥接到 Downcity action route 与原生 HTTP route 体系。
|
|
6
6
|
*/
|
|
7
7
|
import { Service } from "./service.js";
|
|
8
8
|
import { Hook } from "./hook.js";
|
|
9
9
|
import { TableApi } from "../store/table-api.js";
|
|
10
|
+
function is_native_route_config(config) {
|
|
11
|
+
return typeof config.handler === "object" && config.handler !== null && "request" in config.handler;
|
|
12
|
+
}
|
|
13
|
+
function resolve_route_auth(config) {
|
|
14
|
+
if (config.public === true)
|
|
15
|
+
return [];
|
|
16
|
+
return config.auth;
|
|
17
|
+
}
|
|
10
18
|
// ===========================================================================
|
|
11
19
|
// InstallableService 基类
|
|
12
20
|
// ===========================================================================
|
|
@@ -37,12 +45,21 @@ export class InstallableService extends Service {
|
|
|
37
45
|
return new TableApi(self._db, table);
|
|
38
46
|
},
|
|
39
47
|
route(config) {
|
|
48
|
+
if (is_native_route_config(config)) {
|
|
49
|
+
self._registerNativeRoute({
|
|
50
|
+
method: config.method,
|
|
51
|
+
path: config.path,
|
|
52
|
+
auth: resolve_route_auth(config),
|
|
53
|
+
handler: config.handler.request,
|
|
54
|
+
});
|
|
55
|
+
return;
|
|
56
|
+
}
|
|
40
57
|
// 去掉前导 /,与 client ServiceClient.action() 的 normalizeName 对齐
|
|
41
58
|
const actionId = config.path.replace(/^\/+/, "");
|
|
42
59
|
self.action(actionId, async (svcCtx) => {
|
|
43
60
|
return await config.handler({
|
|
44
61
|
user: svcCtx.user,
|
|
45
|
-
|
|
62
|
+
city: svcCtx.city,
|
|
46
63
|
request: svcCtx.request ?? new Request("http://local"),
|
|
47
64
|
json: async () => svcCtx.input,
|
|
48
65
|
text: async () => svcCtx.raw_body ?? JSON.stringify(svcCtx.input),
|
|
@@ -50,7 +67,7 @@ export class InstallableService extends Service {
|
|
|
50
67
|
status, headers: { "content-type": "application/json" },
|
|
51
68
|
}),
|
|
52
69
|
});
|
|
53
|
-
}, { method: config.method, auth: config
|
|
70
|
+
}, { method: config.method, auth: resolve_route_auth(config) });
|
|
54
71
|
},
|
|
55
72
|
hook: {
|
|
56
73
|
before(fn) { self.globalHook.before(fn); },
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"installable-service.js","sourceRoot":"","sources":["../../src/service/installable-service.ts"],"names":[],"mappings":"AAAA;;;;;GAKG;AAEH,OAAO,EAAE,OAAO,
|
|
1
|
+
{"version":3,"file":"installable-service.js","sourceRoot":"","sources":["../../src/service/installable-service.ts"],"names":[],"mappings":"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"}
|
|
@@ -2,7 +2,7 @@
|
|
|
2
2
|
* 模块说明文档协议。
|
|
3
3
|
*
|
|
4
4
|
* 负责定义 City / Service / InstallableService 可共享的 instruction 能力,
|
|
5
|
-
* 以及
|
|
5
|
+
* 以及 Federation 聚合输出时使用的格式化工具。
|
|
6
6
|
*/
|
|
7
7
|
import type { EnvRequirement, RouteAuth } from "./service.js";
|
|
8
8
|
/**
|
|
@@ -27,7 +27,7 @@ export interface InstructionContext {
|
|
|
27
27
|
actions: InstructionActionDefinition[];
|
|
28
28
|
}
|
|
29
29
|
/**
|
|
30
|
-
*
|
|
30
|
+
* Federation 聚合时看到的动作定义。
|
|
31
31
|
*/
|
|
32
32
|
export interface InstructionActionDefinition {
|
|
33
33
|
/**
|
|
@@ -2,7 +2,7 @@
|
|
|
2
2
|
* 模块说明文档协议。
|
|
3
3
|
*
|
|
4
4
|
* 负责定义 City / Service / InstallableService 可共享的 instruction 能力,
|
|
5
|
-
* 以及
|
|
5
|
+
* 以及 Federation 聚合输出时使用的格式化工具。
|
|
6
6
|
*/
|
|
7
7
|
/**
|
|
8
8
|
* 解析模块 instruction。
|
|
@@ -31,13 +31,13 @@ export function formatRouteAuth(auth) {
|
|
|
31
31
|
*/
|
|
32
32
|
export function formatInstructionDocument(input) {
|
|
33
33
|
const lines = [];
|
|
34
|
-
lines.push("# Downcity
|
|
34
|
+
lines.push("# Downcity Federation Instruction");
|
|
35
35
|
lines.push("");
|
|
36
|
-
lines.push("##
|
|
37
|
-
lines.push("
|
|
36
|
+
lines.push("## Federation");
|
|
37
|
+
lines.push("Federation 是 Downcity 的服务端基础设施运行容器,负责挂载 Service、初始化内置 env/cities 能力、统一处理 /v1/* HTTP 路由,以及校验 user_token 与 admin_secret_key。");
|
|
38
38
|
lines.push("");
|
|
39
39
|
lines.push("基础使用:");
|
|
40
|
-
lines.push("1. 创建
|
|
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
43
|
lines.push("4. 通过 base.router().fetch 或 base.handleRequest(...) 对外提供请求处理。");
|
|
@@ -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,
|
|
1
|
+
{"version":3,"file":"instruction.js","sourceRoot":"","sources":["../../src/service/instruction.ts"],"names":[],"mappings":"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"}
|