@downcity/city 0.2.17 → 0.2.26
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 +33 -16
- package/bin/city/admin/index.d.ts +36 -0
- package/bin/city/admin/index.d.ts.map +1 -0
- package/bin/city/admin/index.js +85 -0
- package/bin/city/admin/index.js.map +1 -0
- package/bin/city/admin/types.d.ts +41 -0
- package/bin/city/admin/types.d.ts.map +1 -0
- package/bin/city/admin/types.js +5 -0
- package/bin/city/admin/types.js.map +1 -0
- package/bin/city/city.d.ts +73 -0
- package/bin/city/city.d.ts.map +1 -0
- package/bin/city/city.js +116 -0
- package/bin/city/city.js.map +1 -0
- package/bin/city/http.d.ts +55 -0
- package/bin/city/http.d.ts.map +1 -0
- package/bin/city/http.js +78 -0
- package/bin/city/http.js.map +1 -0
- package/bin/city/index.d.ts +20 -0
- package/bin/city/index.d.ts.map +1 -0
- package/bin/city/index.js +14 -0
- package/bin/city/index.js.map +1 -0
- package/bin/city/invoker/ai/index.d.ts +126 -0
- package/bin/city/invoker/ai/index.d.ts.map +1 -0
- package/bin/city/invoker/ai/index.js +247 -0
- package/bin/city/invoker/ai/index.js.map +1 -0
- package/bin/city/invoker/ai/stream.d.ts +8 -0
- package/bin/city/invoker/ai/stream.d.ts.map +1 -0
- package/bin/city/invoker/ai/stream.js +17 -0
- package/bin/city/invoker/ai/stream.js.map +1 -0
- package/bin/city/invoker/ai/types.d.ts +14 -0
- package/bin/city/invoker/ai/types.d.ts.map +1 -0
- package/bin/city/invoker/ai/types.js +9 -0
- package/bin/city/invoker/ai/types.js.map +1 -0
- package/bin/city/invoker/balance/index.d.ts +76 -0
- package/bin/city/invoker/balance/index.d.ts.map +1 -0
- package/bin/city/invoker/balance/index.js +137 -0
- package/bin/city/invoker/balance/index.js.map +1 -0
- package/bin/city/invoker/balance/types.d.ts +324 -0
- package/bin/city/invoker/balance/types.d.ts.map +1 -0
- package/bin/city/invoker/balance/types.js +9 -0
- package/bin/city/invoker/balance/types.js.map +1 -0
- package/bin/city/invoker/env/index.d.ts +33 -0
- package/bin/city/invoker/env/index.d.ts.map +1 -0
- package/bin/city/invoker/env/index.js +53 -0
- package/bin/city/invoker/env/index.js.map +1 -0
- package/bin/city/invoker/env/types.d.ts +57 -0
- package/bin/city/invoker/env/types.d.ts.map +1 -0
- package/bin/city/invoker/env/types.js +5 -0
- package/bin/city/invoker/env/types.js.map +1 -0
- package/bin/city/invoker/invoker.d.ts +44 -0
- package/bin/city/invoker/invoker.d.ts.map +1 -0
- package/bin/city/invoker/invoker.js +87 -0
- package/bin/city/invoker/invoker.js.map +1 -0
- package/bin/city/invoker/payment/index.d.ts +69 -0
- package/bin/city/invoker/payment/index.d.ts.map +1 -0
- package/bin/city/invoker/payment/index.js +110 -0
- package/bin/city/invoker/payment/index.js.map +1 -0
- package/bin/city/invoker/payment/types.d.ts +66 -0
- package/bin/city/invoker/payment/types.d.ts.map +1 -0
- package/bin/city/invoker/payment/types.js +10 -0
- package/bin/city/invoker/payment/types.js.map +1 -0
- package/bin/city/invoker/towns/index.d.ts +46 -0
- package/bin/city/invoker/towns/index.d.ts.map +1 -0
- package/bin/city/invoker/towns/index.js +73 -0
- package/bin/city/invoker/towns/index.js.map +1 -0
- package/bin/city/invoker/towns/types.d.ts +46 -0
- package/bin/city/invoker/towns/types.d.ts.map +1 -0
- package/bin/city/invoker/towns/types.js +5 -0
- package/bin/city/invoker/towns/types.js.map +1 -0
- package/bin/city/types/city.d.ts +71 -0
- package/bin/city/types/city.d.ts.map +1 -0
- package/bin/city/types/city.js +8 -0
- package/bin/city/types/city.js.map +1 -0
- package/bin/city/user/index.d.ts +27 -0
- package/bin/city/user/index.d.ts.map +1 -0
- package/bin/city/user/index.js +100 -0
- package/bin/city/user/index.js.map +1 -0
- package/bin/city/user/types.d.ts +49 -0
- package/bin/city/user/types.d.ts.map +1 -0
- package/bin/city/user/types.js +5 -0
- package/bin/city/user/types.js.map +1 -0
- package/bin/core/auth/authenticator.d.ts +6 -6
- package/bin/core/auth/authenticator.d.ts.map +1 -1
- package/bin/core/auth/authenticator.js +11 -11
- package/bin/core/auth/authenticator.js.map +1 -1
- package/bin/core/auth/token-signer.js +4 -4
- package/bin/core/auth/token-signer.js.map +1 -1
- package/bin/core/auth/types.d.ts +7 -7
- package/bin/core/auth/types.d.ts.map +1 -1
- package/bin/core/base/base-init.d.ts +5 -5
- package/bin/core/base/base-init.d.ts.map +1 -1
- package/bin/core/base/base-init.js +8 -8
- package/bin/core/base/base-init.js.map +1 -1
- package/bin/core/base/base-instruction.js +1 -1
- package/bin/core/base/base-instruction.js.map +1 -1
- package/bin/core/base/base-router.d.ts +2 -2
- package/bin/core/base/base-router.d.ts.map +1 -1
- package/bin/core/base/base-router.js +15 -15
- package/bin/core/base/base-router.js.map +1 -1
- package/bin/core/base/base-runtime.d.ts +3 -3
- package/bin/core/base/base-runtime.d.ts.map +1 -1
- package/bin/core/base/base-runtime.js +4 -4
- package/bin/core/base/base-runtime.js.map +1 -1
- package/bin/core/base/base.d.ts +8 -8
- package/bin/core/base/base.d.ts.map +1 -1
- package/bin/core/base/base.js +10 -10
- package/bin/core/base/base.js.map +1 -1
- package/bin/core/runtime.d.ts +4 -4
- package/bin/core/runtime.d.ts.map +1 -1
- package/bin/core/runtime.js +1 -1
- package/bin/core/types.d.ts +3 -3
- package/bin/core/types.d.ts.map +1 -1
- package/bin/index.d.ts +25 -5
- package/bin/index.d.ts.map +1 -1
- package/bin/index.js +18 -7
- package/bin/index.js.map +1 -1
- package/bin/service/ai/openai-compatible-provider.d.ts +1 -1
- package/bin/service/ai/openai-compatible-provider.js +2 -2
- package/bin/service/ai/openai-compatible-provider.js.map +1 -1
- package/bin/service/ai/provider.d.ts +1 -1
- package/bin/service/ai/provider.js +1 -1
- package/bin/service/ai/types.d.ts +1 -1
- package/bin/service/installable-service.d.ts +3 -3
- package/bin/service/installable-service.d.ts.map +1 -1
- package/bin/service/installable-service.js +1 -1
- package/bin/service/installable-service.js.map +1 -1
- package/bin/service/instruction.js +7 -7
- package/bin/service/instruction.js.map +1 -1
- package/bin/service/service.d.ts +5 -5
- package/bin/service/service.d.ts.map +1 -1
- package/bin/service/service.js +1 -1
- package/bin/service/service.js.map +1 -1
- package/bin/service/{studios → towns}/schema.d.ts +23 -23
- package/bin/service/towns/schema.d.ts.map +1 -0
- package/bin/service/towns/schema.js +60 -0
- package/bin/service/towns/schema.js.map +1 -0
- package/bin/service/towns/town-store.d.ts +17 -0
- package/bin/service/towns/town-store.d.ts.map +1 -0
- package/bin/service/towns/town-store.js +49 -0
- package/bin/service/towns/town-store.js.map +1 -0
- package/bin/service/towns/towns-service.d.ts +15 -0
- package/bin/service/towns/towns-service.d.ts.map +1 -0
- package/bin/service/towns/towns-service.js +54 -0
- package/bin/service/towns/towns-service.js.map +1 -0
- package/bin/service/towns/types.d.ts +51 -0
- package/bin/service/towns/types.d.ts.map +1 -0
- package/bin/service/towns/types.js +7 -0
- package/bin/service/towns/types.js.map +1 -0
- package/package.json +9 -8
- package/bin/service/studios/schema.d.ts.map +0 -1
- package/bin/service/studios/schema.js +0 -60
- package/bin/service/studios/schema.js.map +0 -1
- package/bin/service/studios/studio-store.d.ts +0 -17
- package/bin/service/studios/studio-store.d.ts.map +0 -1
- package/bin/service/studios/studio-store.js +0 -49
- package/bin/service/studios/studio-store.js.map +0 -1
- package/bin/service/studios/studios-service.d.ts +0 -15
- package/bin/service/studios/studios-service.d.ts.map +0 -1
- package/bin/service/studios/studios-service.js +0 -51
- package/bin/service/studios/studios-service.js.map +0 -1
- package/bin/service/studios/types.d.ts +0 -51
- package/bin/service/studios/types.d.ts.map +0 -1
- package/bin/service/studios/types.js +0 -7
- package/bin/service/studios/types.js.map +0 -1
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"openai-compatible-provider.js","sourceRoot":"","sources":["../../../src/service/ai/openai-compatible-provider.ts"],"names":[],"mappings":"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
|
|
1
|
+
{"version":3,"file":"openai-compatible-provider.js","sourceRoot":"","sources":["../../../src/service/ai/openai-compatible-provider.ts"],"names":[],"mappings":"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"}
|
|
@@ -5,7 +5,7 @@
|
|
|
5
5
|
* 通过 model() 方法生成模型配置,可直接传给 AIService.use() 完成注册。
|
|
6
6
|
*
|
|
7
7
|
* 两条独立通路:
|
|
8
|
-
* - SDK 通路:text / stream — 给
|
|
8
|
+
* - SDK 通路:text / stream — 给 User City 用
|
|
9
9
|
* - OpenAI 兼容通路:openai — 给 /chat/completions 端点用
|
|
10
10
|
* - 未提供 openai action → AIService 自动透传(需 baseURL + envKey)
|
|
11
11
|
* - 提供了 openai action → 按自定义逻辑处理
|
|
@@ -5,7 +5,7 @@
|
|
|
5
5
|
* 通过 model() 方法生成模型配置,可直接传给 AIService.use() 完成注册。
|
|
6
6
|
*
|
|
7
7
|
* 两条独立通路:
|
|
8
|
-
* - SDK 通路:text / stream — 给
|
|
8
|
+
* - SDK 通路:text / stream — 给 User City 用
|
|
9
9
|
* - OpenAI 兼容通路:openai — 给 /chat/completions 端点用
|
|
10
10
|
* - 未提供 openai action → AIService 自动透传(需 baseURL + envKey)
|
|
11
11
|
* - 提供了 openai action → 按自定义逻辑处理
|
|
@@ -8,7 +8,7 @@ import type { ActionFn } from "../action.js";
|
|
|
8
8
|
* 模型 action 映射,key 为通路名称。
|
|
9
9
|
*
|
|
10
10
|
* 两条独立通路:
|
|
11
|
-
* - SDK 通路:text / stream / image / video / tts / asr — 给
|
|
11
|
+
* - SDK 通路:text / stream / image / video / tts / asr — 给 User City 用
|
|
12
12
|
* - OpenAI 兼容通路:openai — 给 /chat/completions 端点用
|
|
13
13
|
*
|
|
14
14
|
* 每个 action 接收 Context,返回对应通路的结果。
|
|
@@ -28,9 +28,9 @@ export interface ServiceInstallContext {
|
|
|
28
28
|
export interface ServiceRouteContext {
|
|
29
29
|
/** 当前 user_token 解析出的用户;免登录或 admin 请求时可能为空 */
|
|
30
30
|
user?: RuntimeUser;
|
|
31
|
-
/** 当前 user_token 对应的
|
|
32
|
-
|
|
33
|
-
|
|
31
|
+
/** 当前 user_token 对应的 town;免登录或 admin 请求时可能为空 */
|
|
32
|
+
town?: {
|
|
33
|
+
town_id: string;
|
|
34
34
|
status: string;
|
|
35
35
|
};
|
|
36
36
|
/** 原始 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;AAC1E,OAAO,EAAE,IAAI,EAAE,MAAM,WAAW,CAAC;AAEjC,OAAO,KAAK,EAAE,YAAY,EAAE,MAAM,uBAAuB,CAAC;AAC1D,OAAO,KAAK,EAAE,oBAAoB,EAAE,oBAAoB,EAAE,WAAW,EAAE,MAAM,uBAAuB,CAAC;AACrG,OAAO,KAAK,EAAE,qBAAqB,EAAE,MAAM,kBAAkB,CAAC;AAM9D,MAAM,WAAW,qBAAqB;IACpC,KAAK,CAAC,IAAI,SAAS,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,GAAG,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,EAAE,IAAI,EAAE,MAAM,GAAG,YAAY,CAAC,IAAI,CAAC,CAAC;IAExG,KAAK,CAAC,MAAM,EAAE;QACZ,MAAM,EAAE,KAAK,GAAG,MAAM,CAAC;QACvB,IAAI,EAAE,MAAM,CAAC;QACb,IAAI,CAAC,EAAE,KAAK,CAAC,MAAM,GAAG,OAAO,CAAC,CAAC;QAC/B,OAAO,EAAE,CAAC,GAAG,EAAE,mBAAmB,KAAK,OAAO,CAAC,QAAQ,CAAC,GAAG,QAAQ,CAAC;KACrE,GAAG,IAAI,CAAC;IAET,IAAI,EAAE;QACJ,MAAM,CAAC,EAAE,EAAE,CAAC,GAAG,EAAE,OAAO,KAAK,OAAO,CAAC,IAAI,CAAC,GAAG,IAAI,GAAG,IAAI,CAAC;QACzD,KAAK,CAAC,EAAE,EAAE,CAAC,GAAG,EAAE,OAAO,KAAK,OAAO,CAAC,IAAI,CAAC,GAAG,IAAI,GAAG,IAAI,CAAC;QACxD,OAAO,CAAC,EAAE,EAAE,CAAC,GAAG,EAAE,OAAO,KAAK,OAAO,CAAC,IAAI,CAAC,GAAG,IAAI,GAAG,IAAI,CAAC;KAC3D,CAAC;IAEF,eAAe,CAAC,KAAK,EAAE,oBAAoB,GAAG,OAAO,CAAC,oBAAoB,CAAC,CAAC;IAC5E,GAAG,CAAC,GAAG,EAAE,MAAM,GAAG,MAAM,GAAG,SAAS,CAAC;CACtC;AAED,MAAM,WAAW,mBAAmB;IAClC,8CAA8C;IAC9C,IAAI,CAAC,EAAE,WAAW,CAAC;IACnB,
|
|
1
|
+
{"version":3,"file":"installable-service.d.ts","sourceRoot":"","sources":["../../src/service/installable-service.ts"],"names":[],"mappings":"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"}
|
|
@@ -42,7 +42,7 @@ export class InstallableService extends Service {
|
|
|
42
42
|
self.action(actionId, async (svcCtx) => {
|
|
43
43
|
return await config.handler({
|
|
44
44
|
user: svcCtx.user,
|
|
45
|
-
|
|
45
|
+
town: svcCtx.town,
|
|
46
46
|
request: svcCtx.request ?? new Request("http://local"),
|
|
47
47
|
json: async () => svcCtx.input,
|
|
48
48
|
text: async () => svcCtx.raw_body ?? JSON.stringify(svcCtx.input),
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"installable-service.js","sourceRoot":"","sources":["../../src/service/installable-service.ts"],"names":[],"mappings":"AAAA;;;;;GAKG;AAEH,OAAO,EAAE,OAAO,EAAqC,MAAM,cAAc,CAAC;AAC1E,OAAO,EAAE,IAAI,EAAE,MAAM,WAAW,CAAC;AACjC,OAAO,EAAE,QAAQ,EAAE,MAAM,uBAAuB,CAAC;AA4CjD,8EAA8E;AAC9E,wBAAwB;AACxB,8EAA8E;AAE9E,MAAM,OAAgB,kBAAmB,SAAQ,OAAO;IAC7C,MAAM,CAAuB;IACtC;;;;;OAKG;IACM,UAAU,GAAG,IAAI,IAAI,EAAE,CAAC;IAEjC,YAAY,GAAsB;QAChC,KAAK,CAAC,EAAE,EAAE,EAAE,SAAS,EAAE,GAAG,EAAE,CAAC,CAAC;IAChC,CAAC;IAID,KAAK,CAAC,OAAO;QACX,IAAI,IAAI,CAAC,MAAM,IAAI,CAAC,IAAI,CAAC,MAAM,EAAE,CAAC;YAC/B,IAAY,CAAC,MAAM,GAAG,IAAI,CAAC,MAAM,CAAC;QACrC,CAAC;QAED,MAAM,IAAI,GAAG,IAAI,CAAC;QAClB,MAAM,GAAG,GAA0B;YACjC,KAAK,CAAiE,IAAY;gBAChF,IAAI,CAAC,IAAI,CAAC,GAAG;oBAAE,MAAM,IAAI,KAAK,CAAC,0CAA0C,CAAC,CAAC;gBAC3E,MAAM,KAAK,GAAG,IAAI,CAAC,MAAM,EAAE,CAAC,IAAI,CAAC,CAAC;gBAClC,IAAI,CAAC,KAAK;oBAAE,MAAM,IAAI,KAAK,CAAC,kBAAkB,IAAI,EAAE,CAAC,CAAC;gBACtD,OAAO,IAAI,QAAQ,CAAC,IAAI,CAAC,GAAG,EAAE,KAAK,CAAkC,CAAC;YACxE,CAAC;YAED,KAAK,CAAC,MAAM;gBACV,4DAA4D;gBAC5D,MAAM,QAAQ,GAAG,MAAM,CAAC,IAAI,CAAC,OAAO,CAAC,MAAM,EAAE,EAAE,CAAC,CAAC;gBACjD,IAAI,CAAC,MAAM,CAAC,QAAQ,EAAE,KAAK,EAAE,MAAe,EAAE,EAAE;oBAC9C,OAAO,MAAM,MAAM,CAAC,OAAO,CAAC;wBAC1B,IAAI,EAAE,MAAM,CAAC,IAAI;wBACjB,
|
|
1
|
+
{"version":3,"file":"installable-service.js","sourceRoot":"","sources":["../../src/service/installable-service.ts"],"names":[],"mappings":"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"}
|
|
@@ -31,16 +31,16 @@ export function formatRouteAuth(auth) {
|
|
|
31
31
|
*/
|
|
32
32
|
export function formatInstructionDocument(input) {
|
|
33
33
|
const lines = [];
|
|
34
|
-
lines.push("# Downcity
|
|
34
|
+
lines.push("# Downcity CityBase Instruction");
|
|
35
35
|
lines.push("");
|
|
36
|
-
lines.push("##
|
|
37
|
-
lines.push("
|
|
36
|
+
lines.push("## CityBase");
|
|
37
|
+
lines.push("CityBase 是 Downcity 的服务端基础设施运行容器,负责挂载 Service、初始化内置 env/towns 能力、统一处理 /v1/* HTTP 路由,以及校验 user_token 与 admin_secret_key。");
|
|
38
38
|
lines.push("");
|
|
39
39
|
lines.push("基础使用:");
|
|
40
|
-
lines.push("1. 创建
|
|
41
|
-
lines.push("2. 通过
|
|
42
|
-
lines.push("3. 先调用 await
|
|
43
|
-
lines.push("4. 通过
|
|
40
|
+
lines.push("1. 创建 CityBase 实例。");
|
|
41
|
+
lines.push("2. 通过 base.use(...) 注册业务 Service、AIService 或带 install(ctx) 生命周期的服务。");
|
|
42
|
+
lines.push("3. 先调用 await base.health() 完成初始化。");
|
|
43
|
+
lines.push("4. 通过 base.router().fetch 或 base.handleRequest(...) 对外提供请求处理。");
|
|
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,
|
|
1
|
+
{"version":3,"file":"instruction.js","sourceRoot":"","sources":["../../src/service/instruction.ts"],"names":[],"mappings":"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"}
|
package/bin/service/service.d.ts
CHANGED
|
@@ -14,7 +14,7 @@ import type { Database, DbClient } from "../store/db.js";
|
|
|
14
14
|
import type { RuntimeUser } from "../core/auth/types.js";
|
|
15
15
|
import type { Authenticator } from "../core/auth/authenticator.js";
|
|
16
16
|
import type { EnvProvider } from "../core/runtime.js";
|
|
17
|
-
import type {
|
|
17
|
+
import type { TownStore } from "./towns/town-store.js";
|
|
18
18
|
import type { InstructionActionDefinition, InstructionCapable, InstructionDefinition } from "./instruction.js";
|
|
19
19
|
/** 当前请求最终解析出的身份。 */
|
|
20
20
|
export type RouteIdentity = "guest" | "user" | "admin";
|
|
@@ -37,9 +37,9 @@ export interface Context {
|
|
|
37
37
|
identity?: {
|
|
38
38
|
kind: RouteIdentity;
|
|
39
39
|
};
|
|
40
|
-
/** 所属
|
|
41
|
-
|
|
42
|
-
|
|
40
|
+
/** 所属 town */
|
|
41
|
+
town?: {
|
|
42
|
+
town_id: string;
|
|
43
43
|
status: string;
|
|
44
44
|
};
|
|
45
45
|
/** 当前解析的 variant(如 AI model、翻译语言对等)。由 Service 自行注入 */
|
|
@@ -105,7 +105,7 @@ export declare class Service {
|
|
|
105
105
|
};
|
|
106
106
|
_authenticator?: Authenticator;
|
|
107
107
|
_env?: EnvProvider;
|
|
108
|
-
|
|
108
|
+
_townStore?: TownStore;
|
|
109
109
|
/** 原始数据库实例(better-sqlite3 / D1 等) */
|
|
110
110
|
_raw?: unknown;
|
|
111
111
|
/** 服务公网 URL */
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"service.d.ts","sourceRoot":"","sources":["../../src/service/service.ts"],"names":[],"mappings":"AAAA;;;;;;GAMG;AAEH,OAAO,KAAK,EAAE,cAAc,EAAE,MAAM,yBAAyB,CAAC;AAC9D,OAAO,KAAK,EAAE,UAAU,EAAE,MAAM,qBAAqB,CAAC;AACtD,OAAO,EAAE,IAAI,EAAE,MAAM,WAAW,CAAC;AACjC,OAAO,EAAE,MAAM,EAAE,KAAK,QAAQ,EAAE,MAAM,aAAa,CAAC;AACpD,OAAO,KAAK,EAAE,YAAY,EAAE,MAAM,uBAAuB,CAAC;AAC1D,OAAO,KAAK,EAAE,QAAQ,EAAE,QAAQ,EAAE,MAAM,gBAAgB,CAAC;AACzD,OAAO,KAAK,EAAE,WAAW,EAAE,MAAM,uBAAuB,CAAC;AACzD,OAAO,KAAK,EAAE,aAAa,EAAE,MAAM,+BAA+B,CAAC;AACnE,OAAO,KAAK,EAAE,WAAW,EAAE,MAAM,oBAAoB,CAAC;AACtD,OAAO,KAAK,EAAE,
|
|
1
|
+
{"version":3,"file":"service.d.ts","sourceRoot":"","sources":["../../src/service/service.ts"],"names":[],"mappings":"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"}
|
package/bin/service/service.js
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"service.js","sourceRoot":"","sources":["../../src/service/service.ts"],"names":[],"mappings":"AAAA;;;;;;GAMG;AAIH,OAAO,EAAE,IAAI,EAAE,MAAM,WAAW,CAAC;AACjC,OAAO,EAAE,MAAM,EAAiB,MAAM,aAAa,CAAC;AA8EpD;;;;;;;GAOG;AACH,MAAM,UAAU,kBAAkB,CAAC,IAAgB;IACjD,IAAI,IAAI,KAAK,SAAS;QAAE,OAAO,CAAC,MAAM,CAAC,CAAC;IACxC,OAAO,CAAC,GAAG,IAAI,GAAG,CAAC,IAAI,CAAC,CAAC,CAAC;AAC5B,CAAC;AAED,8EAA8E;AAC9E,UAAU;AACV,8EAA8E;AAE9E,MAAM,OAAO,OAAO;IACT,EAAE,CAAS;IACX,IAAI,CAAS;IACtB,6CAA6C;IACpC,IAAI,GAAG,IAAI,IAAI,EAAE,CAAC;IAClB,MAAM,CAA+C;IACrD,GAAG,CAAoB;IAChC,mBAAmB;IACnB,WAAW,CAAyB;IAEpC,iBAAiB;IACT,SAAS,GAAG,IAAI,GAAG,EAAuE,CAAC;IAEnG,gCAAgC;IAEhC,GAAG,CAAY;IACf,OAAO,CAAyB;IAChC,cAAc,CAAiB;IAC/B,IAAI,CAAe;IACnB,
|
|
1
|
+
{"version":3,"file":"service.js","sourceRoot":"","sources":["../../src/service/service.ts"],"names":[],"mappings":"AAAA;;;;;;GAMG;AAIH,OAAO,EAAE,IAAI,EAAE,MAAM,WAAW,CAAC;AACjC,OAAO,EAAE,MAAM,EAAiB,MAAM,aAAa,CAAC;AA8EpD;;;;;;;GAOG;AACH,MAAM,UAAU,kBAAkB,CAAC,IAAgB;IACjD,IAAI,IAAI,KAAK,SAAS;QAAE,OAAO,CAAC,MAAM,CAAC,CAAC;IACxC,OAAO,CAAC,GAAG,IAAI,GAAG,CAAC,IAAI,CAAC,CAAC,CAAC;AAC5B,CAAC;AAED,8EAA8E;AAC9E,UAAU;AACV,8EAA8E;AAE9E,MAAM,OAAO,OAAO;IACT,EAAE,CAAS;IACX,IAAI,CAAS;IACtB,6CAA6C;IACpC,IAAI,GAAG,IAAI,IAAI,EAAE,CAAC;IAClB,MAAM,CAA+C;IACrD,GAAG,CAAoB;IAChC,mBAAmB;IACnB,WAAW,CAAyB;IAEpC,iBAAiB;IACT,SAAS,GAAG,IAAI,GAAG,EAAuE,CAAC;IAEnG,gCAAgC;IAEhC,GAAG,CAAY;IACf,OAAO,CAAyB;IAChC,cAAc,CAAiB;IAC/B,IAAI,CAAe;IACnB,UAAU,CAAa;IAEvB,qCAAqC;IACrC,IAAI,CAAW;IAEf,eAAe;IACf,QAAQ,CAAU;IAElB,YAAY,OAKX;QACC,IAAI,CAAC,EAAE,GAAG,OAAO,CAAC,EAAE,CAAC;QACrB,IAAI,CAAC,IAAI,GAAG,OAAO,CAAC,IAAI,IAAI,OAAO,CAAC,EAAE,CAAC;QACvC,IAAI,CAAC,MAAM,GAAG,OAAO,CAAC,MAAM,CAAC;QAC7B,IAAI,CAAC,GAAG,GAAG,OAAO,CAAC,GAAG,CAAC;IACzB,CAAC;IAED,6BAA6B;IAE7B,KAAK,CAAC,OAAO,KAAmB,CAAC;IAEjC,kCAAkC;IAElC;;OAEG;IACH,MAAM,CAAC,EAAU,EAAE,EAAY,EAAE,IAAoB;QACnD,IAAI,IAAI,CAAC,SAAS,CAAC,GAAG,CAAC,EAAE,CAAC,EAAE,CAAC;YAC3B,MAAM,IAAI,KAAK,CAAC,qBAAqB,IAAI,CAAC,EAAE,IAAI,EAAE,EAAE,CAAC,CAAC;QACxD,CAAC;QACD,MAAM,MAAM,GAAG,IAAI,MAAM,CAAC,EAAE,EAAE,EAAE,CAAC,CAAC;QAClC,IAAI,CAAC,SAAS,CAAC,GAAG,CAAC,EAAE,EAAE;YACrB,MAAM;YACN,MAAM,EAAE,IAAI,EAAE,MAAM,IAAI,MAAM;YAC9B,IAAI,EAAE,kBAAkB,CAAC,IAAI,EAAE,IAAI,CAAC;SACrC,CAAC,CAAC;QACH,OAAO,MAAM,CAAC;IAChB,CAAC;IAED,oBAAoB;IACpB,GAAG,CAAC,EAAU;QACZ,OAAO,IAAI,CAAC,SAAS,CAAC,GAAG,CAAC,EAAE,CAAC,EAAE,MAAM,CAAC;IACxC,CAAC;IAED,sBAAsB;IACtB,IAAI;QACF,OAAO,CAAC,GAAG,IAAI,CAAC,SAAS,CAAC,MAAM,EAAE,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,MAAM,CAAC,CAAC;IAC3D,CAAC;IAED,iCAAiC;IACjC,eAAe;QACb,OAAO,CAAC,GAAG,IAAI,CAAC,SAAS,CAAC,MAAM,EAAE,CAAC,CAAC;IACtC,CAAC;IAED;;OAEG;IACH,uBAAuB;QACrB,OAAO,IAAI,CAAC,eAAe,EAAE,CAAC,GAAG,CAAC,CAAC,IAAI,EAAE,EAAE,CAAC,CAAC;YAC3C,EAAE,EAAE,IAAI,CAAC,MAAM,CAAC,EAAE;YAClB,MAAM,EAAE,IAAI,CAAC,MAAM;YACnB,IAAI,EAAE,IAAI,CAAC,IAAI;SAChB,CAAC,CAAC,CAAC;IACN,CAAC;CACF"}
|
|
@@ -1,19 +1,19 @@
|
|
|
1
1
|
/**
|
|
2
|
-
*
|
|
2
|
+
* Town 数据库 schema 模块。
|
|
3
3
|
*
|
|
4
|
-
* 定义 Downcity 内置的
|
|
5
|
-
*
|
|
4
|
+
* 定义 Downcity 内置的 Town 表结构(SQLite + Postgres)。
|
|
5
|
+
* Town 是 City 多租户隔离的基本单位。
|
|
6
6
|
*/
|
|
7
7
|
/**
|
|
8
|
-
* 默认 SQLite
|
|
8
|
+
* 默认 SQLite Town 表。
|
|
9
9
|
*/
|
|
10
|
-
export declare const
|
|
11
|
-
name: "
|
|
10
|
+
export declare const sqliteTowns: import("drizzle-orm/sqlite-core").SQLiteTableWithColumns<{
|
|
11
|
+
name: "towns";
|
|
12
12
|
schema: undefined;
|
|
13
13
|
columns: {
|
|
14
|
-
|
|
15
|
-
name: "
|
|
16
|
-
tableName: "
|
|
14
|
+
town_id: import("drizzle-orm/sqlite-core").SQLiteColumn<{
|
|
15
|
+
name: "town_id";
|
|
16
|
+
tableName: "towns";
|
|
17
17
|
dataType: "string";
|
|
18
18
|
columnType: "SQLiteText";
|
|
19
19
|
data: string;
|
|
@@ -32,7 +32,7 @@ export declare const sqliteStudios: import("drizzle-orm/sqlite-core").SQLiteTabl
|
|
|
32
32
|
}>;
|
|
33
33
|
name: import("drizzle-orm/sqlite-core").SQLiteColumn<{
|
|
34
34
|
name: "name";
|
|
35
|
-
tableName: "
|
|
35
|
+
tableName: "towns";
|
|
36
36
|
dataType: "string";
|
|
37
37
|
columnType: "SQLiteText";
|
|
38
38
|
data: string;
|
|
@@ -51,7 +51,7 @@ export declare const sqliteStudios: import("drizzle-orm/sqlite-core").SQLiteTabl
|
|
|
51
51
|
}>;
|
|
52
52
|
status: import("drizzle-orm/sqlite-core").SQLiteColumn<{
|
|
53
53
|
name: "status";
|
|
54
|
-
tableName: "
|
|
54
|
+
tableName: "towns";
|
|
55
55
|
dataType: "string";
|
|
56
56
|
columnType: "SQLiteText";
|
|
57
57
|
data: string;
|
|
@@ -70,7 +70,7 @@ export declare const sqliteStudios: import("drizzle-orm/sqlite-core").SQLiteTabl
|
|
|
70
70
|
}>;
|
|
71
71
|
created_at: import("drizzle-orm/sqlite-core").SQLiteColumn<{
|
|
72
72
|
name: "created_at";
|
|
73
|
-
tableName: "
|
|
73
|
+
tableName: "towns";
|
|
74
74
|
dataType: "string";
|
|
75
75
|
columnType: "SQLiteText";
|
|
76
76
|
data: string;
|
|
@@ -89,7 +89,7 @@ export declare const sqliteStudios: import("drizzle-orm/sqlite-core").SQLiteTabl
|
|
|
89
89
|
}>;
|
|
90
90
|
updated_at: import("drizzle-orm/sqlite-core").SQLiteColumn<{
|
|
91
91
|
name: "updated_at";
|
|
92
|
-
tableName: "
|
|
92
|
+
tableName: "towns";
|
|
93
93
|
dataType: "string";
|
|
94
94
|
columnType: "SQLiteText";
|
|
95
95
|
data: string;
|
|
@@ -110,15 +110,15 @@ export declare const sqliteStudios: import("drizzle-orm/sqlite-core").SQLiteTabl
|
|
|
110
110
|
dialect: "sqlite";
|
|
111
111
|
}>;
|
|
112
112
|
/**
|
|
113
|
-
* 默认 Postgres
|
|
113
|
+
* 默认 Postgres Town 表。
|
|
114
114
|
*/
|
|
115
|
-
export declare const
|
|
116
|
-
name: "
|
|
115
|
+
export declare const pgTowns: import("drizzle-orm/pg-core").PgTableWithColumns<{
|
|
116
|
+
name: "towns";
|
|
117
117
|
schema: undefined;
|
|
118
118
|
columns: {
|
|
119
|
-
|
|
120
|
-
name: "
|
|
121
|
-
tableName: "
|
|
119
|
+
town_id: import("drizzle-orm/pg-core").PgColumn<{
|
|
120
|
+
name: "town_id";
|
|
121
|
+
tableName: "towns";
|
|
122
122
|
dataType: "string";
|
|
123
123
|
columnType: "PgText";
|
|
124
124
|
data: string;
|
|
@@ -135,7 +135,7 @@ export declare const pgStudios: 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: "towns";
|
|
139
139
|
dataType: "string";
|
|
140
140
|
columnType: "PgText";
|
|
141
141
|
data: string;
|
|
@@ -152,7 +152,7 @@ export declare const pgStudios: 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: "towns";
|
|
156
156
|
dataType: "string";
|
|
157
157
|
columnType: "PgText";
|
|
158
158
|
data: string;
|
|
@@ -169,7 +169,7 @@ export declare const pgStudios: 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: "towns";
|
|
173
173
|
dataType: "string";
|
|
174
174
|
columnType: "PgText";
|
|
175
175
|
data: string;
|
|
@@ -186,7 +186,7 @@ export declare const pgStudios: 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: "towns";
|
|
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/towns/schema.ts"],"names":[],"mappings":"AAAA;;;;;GAKG;AAOH;;GAEG;AACH,eAAO,MAAM,WAAW;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;EAyBtB,CAAC;AAEH;;GAEG;AACH,eAAO,MAAM,OAAO;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;EAyBlB,CAAC"}
|
|
@@ -0,0 +1,60 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Town 数据库 schema 模块。
|
|
3
|
+
*
|
|
4
|
+
* 定义 Downcity 内置的 Town 表结构(SQLite + Postgres)。
|
|
5
|
+
* Town 是 City 多租户隔离的基本单位。
|
|
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_TOWN_TABLE = "towns";
|
|
10
|
+
/**
|
|
11
|
+
* 默认 SQLite Town 表。
|
|
12
|
+
*/
|
|
13
|
+
export const sqliteTowns = sqliteTable(DEFAULT_TOWN_TABLE, {
|
|
14
|
+
/**
|
|
15
|
+
* Town ID。
|
|
16
|
+
*/
|
|
17
|
+
town_id: sqliteText("town_id").primaryKey(),
|
|
18
|
+
/**
|
|
19
|
+
* Town 名称。
|
|
20
|
+
*/
|
|
21
|
+
name: sqliteText("name").notNull(),
|
|
22
|
+
/**
|
|
23
|
+
* Town 状态。
|
|
24
|
+
*/
|
|
25
|
+
status: sqliteText("status").notNull(),
|
|
26
|
+
/**
|
|
27
|
+
* Town 创建时间。
|
|
28
|
+
*/
|
|
29
|
+
created_at: sqliteText("created_at").notNull(),
|
|
30
|
+
/**
|
|
31
|
+
* Town 更新时间。
|
|
32
|
+
*/
|
|
33
|
+
updated_at: sqliteText("updated_at").notNull(),
|
|
34
|
+
});
|
|
35
|
+
/**
|
|
36
|
+
* 默认 Postgres Town 表。
|
|
37
|
+
*/
|
|
38
|
+
export const pgTowns = pgTable(DEFAULT_TOWN_TABLE, {
|
|
39
|
+
/**
|
|
40
|
+
* Town ID。
|
|
41
|
+
*/
|
|
42
|
+
town_id: pgText("town_id").primaryKey(),
|
|
43
|
+
/**
|
|
44
|
+
* Town 名称。
|
|
45
|
+
*/
|
|
46
|
+
name: pgText("name").notNull(),
|
|
47
|
+
/**
|
|
48
|
+
* Town 状态。
|
|
49
|
+
*/
|
|
50
|
+
status: pgText("status").notNull(),
|
|
51
|
+
/**
|
|
52
|
+
* Town 创建时间。
|
|
53
|
+
*/
|
|
54
|
+
created_at: pgText("created_at").notNull(),
|
|
55
|
+
/**
|
|
56
|
+
* Town 更新时间。
|
|
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/towns/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,OAAO,CAAC;AAEnC;;GAEG;AACH,MAAM,CAAC,MAAM,WAAW,GAAG,WAAW,CAAC,kBAAkB,EAAE;IACzD;;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,OAAO,GAAG,OAAO,CAAC,kBAAkB,EAAE;IACjD;;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,17 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Town 数据存储。
|
|
3
|
+
*
|
|
4
|
+
* 基于 CityTableApi,不直接依赖 Drizzle。
|
|
5
|
+
*/
|
|
6
|
+
import type { CityTableApi } from "../../store/table-api.js";
|
|
7
|
+
import type { Town, TownCreateInput, TownStatus } from "./types.js";
|
|
8
|
+
export declare class TownStore {
|
|
9
|
+
private table;
|
|
10
|
+
constructor(table: CityTableApi<Town>);
|
|
11
|
+
list(): Promise<Town[]>;
|
|
12
|
+
get(town_id: string): Promise<Town | undefined>;
|
|
13
|
+
create(input: TownCreateInput): Promise<Town>;
|
|
14
|
+
setStatus(town_id: string, status: TownStatus): Promise<Town>;
|
|
15
|
+
remove(town_id: string): Promise<void>;
|
|
16
|
+
}
|
|
17
|
+
//# sourceMappingURL=town-store.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"town-store.d.ts","sourceRoot":"","sources":["../../../src/service/towns/town-store.ts"],"names":[],"mappings":"AAAA;;;;GAIG;AAGH,OAAO,KAAK,EAAE,YAAY,EAAE,MAAM,0BAA0B,CAAC;AAC7D,OAAO,KAAK,EAAE,IAAI,EAAE,eAAe,EAAE,UAAU,EAAE,MAAM,YAAY,CAAC;AAEpE,qBAAa,SAAS;IACR,OAAO,CAAC,KAAK;gBAAL,KAAK,EAAE,YAAY,CAAC,IAAI,CAAC;IAEvC,IAAI,IAAI,OAAO,CAAC,IAAI,EAAE,CAAC;IAIvB,GAAG,CAAC,OAAO,EAAE,MAAM,GAAG,OAAO,CAAC,IAAI,GAAG,SAAS,CAAC;IAK/C,MAAM,CAAC,KAAK,EAAE,eAAe,GAAG,OAAO,CAAC,IAAI,CAAC;IAe7C,SAAS,CAAC,OAAO,EAAE,MAAM,EAAE,MAAM,EAAE,UAAU,GAAG,OAAO,CAAC,IAAI,CAAC;IAW7D,MAAM,CAAC,OAAO,EAAE,MAAM,GAAG,OAAO,CAAC,IAAI,CAAC;CAG7C"}
|
|
@@ -0,0 +1,49 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Town 数据存储。
|
|
3
|
+
*
|
|
4
|
+
* 基于 CityTableApi,不直接依赖 Drizzle。
|
|
5
|
+
*/
|
|
6
|
+
import { randomSecret } from "../../utils/helpers.js";
|
|
7
|
+
export class TownStore {
|
|
8
|
+
table;
|
|
9
|
+
constructor(table) {
|
|
10
|
+
this.table = table;
|
|
11
|
+
}
|
|
12
|
+
async list() {
|
|
13
|
+
return this.table.select();
|
|
14
|
+
}
|
|
15
|
+
async get(town_id) {
|
|
16
|
+
const rows = await this.table.select({ town_id });
|
|
17
|
+
return rows[0];
|
|
18
|
+
}
|
|
19
|
+
async create(input) {
|
|
20
|
+
const name = String(input.name ?? "").trim();
|
|
21
|
+
if (!name)
|
|
22
|
+
throw new TypeError("Town name is required");
|
|
23
|
+
const now = new Date().toISOString();
|
|
24
|
+
const town = {
|
|
25
|
+
town_id: input.town_id ?? `town_${randomSecret(12)}`,
|
|
26
|
+
name,
|
|
27
|
+
status: "active",
|
|
28
|
+
created_at: now,
|
|
29
|
+
updated_at: now,
|
|
30
|
+
};
|
|
31
|
+
await this.table.insert(town);
|
|
32
|
+
return town;
|
|
33
|
+
}
|
|
34
|
+
async setStatus(town_id, status) {
|
|
35
|
+
if (status !== "active" && status !== "paused") {
|
|
36
|
+
throw new TypeError(`Invalid town status: ${String(status)}`);
|
|
37
|
+
}
|
|
38
|
+
const existing = await this.get(town_id);
|
|
39
|
+
if (!existing)
|
|
40
|
+
throw new Error(`Unknown town: ${town_id}`);
|
|
41
|
+
const next = { ...existing, status, updated_at: new Date().toISOString() };
|
|
42
|
+
await this.table.update({ where: { town_id }, values: next });
|
|
43
|
+
return next;
|
|
44
|
+
}
|
|
45
|
+
async remove(town_id) {
|
|
46
|
+
await this.table.delete({ town_id });
|
|
47
|
+
}
|
|
48
|
+
}
|
|
49
|
+
//# sourceMappingURL=town-store.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"town-store.js","sourceRoot":"","sources":["../../../src/service/towns/town-store.ts"],"names":[],"mappings":"AAAA;;;;GAIG;AAEH,OAAO,EAAE,YAAY,EAAE,MAAM,wBAAwB,CAAC;AAItD,MAAM,OAAO,SAAS;IACA;IAApB,YAAoB,KAAyB;QAAzB,UAAK,GAAL,KAAK,CAAoB;IAAG,CAAC;IAEjD,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,EAAmB,CAAC,CAAC;QACnE,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,GAAS;YACjB,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,GAAS,EAAE,GAAG,QAAQ,EAAE,MAAM,EAAE,UAAU,EAAE,IAAI,IAAI,EAAE,CAAC,WAAW,EAAE,EAAE,CAAC;QACjF,MAAM,IAAI,CAAC,KAAK,CAAC,MAAM,CAAC,EAAE,KAAK,EAAE,EAAE,OAAO,EAAmB,EAAE,MAAM,EAAE,IAAI,EAAE,CAAC,CAAC;QAC/E,OAAO,IAAI,CAAC;IACd,CAAC;IAED,KAAK,CAAC,MAAM,CAAC,OAAe;QAC1B,MAAM,IAAI,CAAC,KAAK,CAAC,MAAM,CAAC,EAAE,OAAO,EAAmB,CAAC,CAAC;IACxD,CAAC;CACF"}
|
|
@@ -0,0 +1,15 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* towns 内置服务。
|
|
3
|
+
*
|
|
4
|
+
* 关键说明(中文)
|
|
5
|
+
* - City 默认注册该 service。
|
|
6
|
+
* - TownStore 由 City 初始化并注入,确保鉴权和管理 API 使用同一份 town 状态。
|
|
7
|
+
*/
|
|
8
|
+
import { Service } from "../service.js";
|
|
9
|
+
export declare class TownsService extends Service {
|
|
10
|
+
private store;
|
|
11
|
+
private auth;
|
|
12
|
+
constructor();
|
|
13
|
+
_onInit(): Promise<void>;
|
|
14
|
+
}
|
|
15
|
+
//# sourceMappingURL=towns-service.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"towns-service.d.ts","sourceRoot":"","sources":["../../../src/service/towns/towns-service.ts"],"names":[],"mappings":"AAAA;;;;;;GAMG;AAEH,OAAO,EAAE,OAAO,EAAE,MAAM,eAAe,CAAC;AAIxC,qBAAa,YAAa,SAAQ,OAAO;IACvC,OAAO,CAAC,KAAK,CAAa;IAC1B,OAAO,CAAC,IAAI,CAAiB;;IA0CvB,OAAO,IAAI,OAAO,CAAC,IAAI,CAAC;CAS/B"}
|
|
@@ -0,0 +1,54 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* towns 内置服务。
|
|
3
|
+
*
|
|
4
|
+
* 关键说明(中文)
|
|
5
|
+
* - City 默认注册该 service。
|
|
6
|
+
* - TownStore 由 City 初始化并注入,确保鉴权和管理 API 使用同一份 town 状态。
|
|
7
|
+
*/
|
|
8
|
+
import { Service } from "../service.js";
|
|
9
|
+
export class TownsService extends Service {
|
|
10
|
+
store;
|
|
11
|
+
auth;
|
|
12
|
+
constructor() {
|
|
13
|
+
super({ id: "towns", name: "Towns" });
|
|
14
|
+
this.instruction = [
|
|
15
|
+
"管理 City 中的 town 实体与用户 token 签发。",
|
|
16
|
+
"town 是用户侧调用的边界,user_token 会绑定到具体 town。",
|
|
17
|
+
"管理端通常先创建 town,再通过 tokens/apply 为某个 user_id 签发可调用的 user_token。",
|
|
18
|
+
].join("\n");
|
|
19
|
+
this.action("list", async () => ({ items: await this.store.list() }), { method: "GET", auth: ["admin"] });
|
|
20
|
+
this.action("create", async (ctx) => {
|
|
21
|
+
return await this.store.create({
|
|
22
|
+
name: String(ctx.input.name ?? ""),
|
|
23
|
+
town_id: String(ctx.input.town_id ?? "").trim() || undefined,
|
|
24
|
+
});
|
|
25
|
+
}, { auth: ["admin"] });
|
|
26
|
+
this.action("pause", async (ctx) => {
|
|
27
|
+
return await this.store.setStatus(String(ctx.input.town_id ?? ""), "paused");
|
|
28
|
+
}, { auth: ["admin"] });
|
|
29
|
+
this.action("activate", async (ctx) => {
|
|
30
|
+
return await this.store.setStatus(String(ctx.input.town_id ?? ""), "active");
|
|
31
|
+
}, { auth: ["admin"] });
|
|
32
|
+
this.action("remove", async (ctx) => {
|
|
33
|
+
await this.store.remove(String(ctx.input.town_id ?? ""));
|
|
34
|
+
return { success: true };
|
|
35
|
+
}, { auth: ["admin"] });
|
|
36
|
+
this.action("tokens/apply", async (ctx) => {
|
|
37
|
+
return await this.auth.createToken({
|
|
38
|
+
town_id: String(ctx.input.town_id ?? ""),
|
|
39
|
+
user_id: String(ctx.input.user_id ?? ""),
|
|
40
|
+
metadata: ctx.input.metadata,
|
|
41
|
+
ttl: ctx.input.ttl,
|
|
42
|
+
});
|
|
43
|
+
}, { auth: ["admin"] });
|
|
44
|
+
}
|
|
45
|
+
async _onInit() {
|
|
46
|
+
this.store = this._townStore;
|
|
47
|
+
this.auth = this._authenticator;
|
|
48
|
+
const existing = await this.store.get("town_downcity");
|
|
49
|
+
if (!existing) {
|
|
50
|
+
await this.store.create({ town_id: "town_downcity", name: "Downcity" });
|
|
51
|
+
}
|
|
52
|
+
}
|
|
53
|
+
}
|
|
54
|
+
//# sourceMappingURL=towns-service.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"towns-service.js","sourceRoot":"","sources":["../../../src/service/towns/towns-service.ts"],"names":[],"mappings":"AAAA;;;;;;GAMG;AAEH,OAAO,EAAE,OAAO,EAAE,MAAM,eAAe,CAAC;AAIxC,MAAM,OAAO,YAAa,SAAQ,OAAO;IAC/B,KAAK,CAAa;IAClB,IAAI,CAAiB;IAE7B;QACE,KAAK,CAAC,EAAE,EAAE,EAAE,OAAO,EAAE,IAAI,EAAE,OAAO,EAAE,CAAC,CAAC;QACtC,IAAI,CAAC,WAAW,GAAG;YACjB,iCAAiC;YACjC,wCAAwC;YACxC,+DAA+D;SAChE,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;QAEb,IAAI,CAAC,MAAM,CAAC,MAAM,EAAE,KAAK,IAAI,EAAE,CAAC,CAAC,EAAE,KAAK,EAAE,MAAM,IAAI,CAAC,KAAK,CAAC,IAAI,EAAE,EAAE,CAAC,EAAE,EAAE,MAAM,EAAE,KAAK,EAAE,IAAI,EAAE,CAAC,OAAO,CAAC,EAAE,CAAC,CAAC;QAE1G,IAAI,CAAC,MAAM,CAAC,QAAQ,EAAE,KAAK,EAAE,GAAG,EAAE,EAAE;YAClC,OAAO,MAAM,IAAI,CAAC,KAAK,CAAC,MAAM,CAAC;gBAC7B,IAAI,EAAE,MAAM,CAAC,GAAG,CAAC,KAAK,CAAC,IAAI,IAAI,EAAE,CAAC;gBAClC,OAAO,EAAE,MAAM,CAAC,GAAG,CAAC,KAAK,CAAC,OAAO,IAAI,EAAE,CAAC,CAAC,IAAI,EAAE,IAAI,SAAS;aAC7D,CAAC,CAAC;QACL,CAAC,EAAE,EAAE,IAAI,EAAE,CAAC,OAAO,CAAC,EAAE,CAAC,CAAC;QAExB,IAAI,CAAC,MAAM,CAAC,OAAO,EAAE,KAAK,EAAE,GAAG,EAAE,EAAE;YACjC,OAAO,MAAM,IAAI,CAAC,KAAK,CAAC,SAAS,CAAC,MAAM,CAAC,GAAG,CAAC,KAAK,CAAC,OAAO,IAAI,EAAE,CAAC,EAAE,QAAQ,CAAC,CAAC;QAC/E,CAAC,EAAE,EAAE,IAAI,EAAE,CAAC,OAAO,CAAC,EAAE,CAAC,CAAC;QAExB,IAAI,CAAC,MAAM,CAAC,UAAU,EAAE,KAAK,EAAE,GAAG,EAAE,EAAE;YACpC,OAAO,MAAM,IAAI,CAAC,KAAK,CAAC,SAAS,CAAC,MAAM,CAAC,GAAG,CAAC,KAAK,CAAC,OAAO,IAAI,EAAE,CAAC,EAAE,QAAQ,CAAC,CAAC;QAC/E,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,KAAK,CAAC,MAAM,CAAC,MAAM,CAAC,GAAG,CAAC,KAAK,CAAC,OAAO,IAAI,EAAE,CAAC,CAAC,CAAC;YACzD,OAAO,EAAE,OAAO,EAAE,IAAI,EAAE,CAAC;QAC3B,CAAC,EAAE,EAAE,IAAI,EAAE,CAAC,OAAO,CAAC,EAAE,CAAC,CAAC;QAExB,IAAI,CAAC,MAAM,CAAC,cAAc,EAAE,KAAK,EAAE,GAAG,EAAE,EAAE;YACxC,OAAO,MAAM,IAAI,CAAC,IAAI,CAAC,WAAW,CAAC;gBACjC,OAAO,EAAE,MAAM,CAAC,GAAG,CAAC,KAAK,CAAC,OAAO,IAAI,EAAE,CAAC;gBACxC,OAAO,EAAE,MAAM,CAAC,GAAG,CAAC,KAAK,CAAC,OAAO,IAAI,EAAE,CAAC;gBACxC,QAAQ,EAAE,GAAG,CAAC,KAAK,CAAC,QAA+C;gBACnE,GAAG,EAAE,GAAG,CAAC,KAAK,CAAC,GAAkC;aAClD,CAAC,CAAC;QACL,CAAC,EAAE,EAAE,IAAI,EAAE,CAAC,OAAO,CAAC,EAAE,CAAC,CAAC;IAC1B,CAAC;IAED,KAAK,CAAC,OAAO;QACX,IAAI,CAAC,KAAK,GAAG,IAAI,CAAC,UAAW,CAAC;QAC9B,IAAI,CAAC,IAAI,GAAG,IAAI,CAAC,cAAe,CAAC;QAEjC,MAAM,QAAQ,GAAG,MAAM,IAAI,CAAC,KAAK,CAAC,GAAG,CAAC,eAAe,CAAC,CAAC;QACvD,IAAI,CAAC,QAAQ,EAAE,CAAC;YACd,MAAM,IAAI,CAAC,KAAK,CAAC,MAAM,CAAC,EAAE,OAAO,EAAE,eAAe,EAAE,IAAI,EAAE,UAAU,EAAE,CAAC,CAAC;QAC1E,CAAC;IACH,CAAC;CACF"}
|
|
@@ -0,0 +1,51 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Town 层公共类型。
|
|
3
|
+
*
|
|
4
|
+
* Town 是 City 多租户隔离的基本单位,每个 API 调用都绑定到一个 Town。
|
|
5
|
+
*/
|
|
6
|
+
/**
|
|
7
|
+
* Town 当前状态。
|
|
8
|
+
*/
|
|
9
|
+
export type TownStatus = "active" | "paused";
|
|
10
|
+
/**
|
|
11
|
+
* City 中的 Town 记录。
|
|
12
|
+
*/
|
|
13
|
+
export interface Town extends Record<string, unknown> {
|
|
14
|
+
/**
|
|
15
|
+
* Town 的唯一 ID。
|
|
16
|
+
*/
|
|
17
|
+
town_id: string;
|
|
18
|
+
/**
|
|
19
|
+
* Town 展示名称。
|
|
20
|
+
*/
|
|
21
|
+
name: string;
|
|
22
|
+
/**
|
|
23
|
+
* Town 当前状态。
|
|
24
|
+
*/
|
|
25
|
+
status: TownStatus;
|
|
26
|
+
/**
|
|
27
|
+
* Town 创建时间。
|
|
28
|
+
*/
|
|
29
|
+
created_at: string;
|
|
30
|
+
/**
|
|
31
|
+
* Town 最后更新时间。
|
|
32
|
+
*/
|
|
33
|
+
updated_at: string;
|
|
34
|
+
}
|
|
35
|
+
/**
|
|
36
|
+
* 创建 Town 时的输入。
|
|
37
|
+
*/
|
|
38
|
+
export interface TownCreateInput {
|
|
39
|
+
/**
|
|
40
|
+
* Town 展示名称。
|
|
41
|
+
*/
|
|
42
|
+
name: string;
|
|
43
|
+
/**
|
|
44
|
+
* 自定义 Town ID。
|
|
45
|
+
*
|
|
46
|
+
* 未传入时由 City 自动生成 `town_${randomSecret(12)}` 格式的 ID。
|
|
47
|
+
* 传入时直接采用该值,便于在种子场景中使用固定 ID。
|
|
48
|
+
*/
|
|
49
|
+
town_id?: string;
|
|
50
|
+
}
|
|
51
|
+
//# sourceMappingURL=types.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"types.d.ts","sourceRoot":"","sources":["../../../src/service/towns/types.ts"],"names":[],"mappings":"AAAA;;;;GAIG;AAEH;;GAEG;AACH,MAAM,MAAM,UAAU,GAAG,QAAQ,GAAG,QAAQ,CAAC;AAE7C;;GAEG;AACH,MAAM,WAAW,IAAK,SAAQ,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC;IACnD;;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"}
|