@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.
Files changed (230) hide show
  1. package/README.md +10 -10
  2. package/bin/client/city.d.ts +90 -0
  3. package/bin/client/city.d.ts.map +1 -0
  4. package/bin/{city → client}/city.js +32 -22
  5. package/bin/client/city.js.map +1 -0
  6. package/bin/client/types.d.ts +77 -0
  7. package/bin/client/types.d.ts.map +1 -0
  8. package/bin/client/types.js +8 -0
  9. package/bin/{core → client}/types.js.map +1 -1
  10. package/bin/{core → federation}/auth/authenticator.d.ts +7 -7
  11. package/bin/federation/auth/authenticator.d.ts.map +1 -0
  12. package/bin/{core → federation}/auth/authenticator.js +15 -15
  13. package/bin/federation/auth/authenticator.js.map +1 -0
  14. package/bin/federation/auth/token-signer.d.ts.map +1 -0
  15. package/bin/{core → federation}/auth/token-signer.js +4 -4
  16. package/bin/federation/auth/token-signer.js.map +1 -0
  17. package/bin/{core → federation}/auth/types.d.ts +6 -6
  18. package/bin/federation/auth/types.d.ts.map +1 -0
  19. package/bin/federation/auth/types.js.map +1 -0
  20. package/bin/federation/federation-env-catalog.d.ts +13 -0
  21. package/bin/federation/federation-env-catalog.d.ts.map +1 -0
  22. package/bin/{core/base/base-env-catalog.js → federation/federation-env-catalog.js} +5 -5
  23. package/bin/federation/federation-env-catalog.js.map +1 -0
  24. package/bin/{core/base/base-init.d.ts → federation/federation-init.d.ts} +17 -17
  25. package/bin/federation/federation-init.d.ts.map +1 -0
  26. package/bin/{core/base/base-init.js → federation/federation-init.js} +27 -27
  27. package/bin/federation/federation-init.js.map +1 -0
  28. package/bin/federation/federation-instruction.d.ts +11 -0
  29. package/bin/federation/federation-instruction.d.ts.map +1 -0
  30. package/bin/{core/base/base-instruction.js → federation/federation-instruction.js} +4 -4
  31. package/bin/federation/federation-instruction.js.map +1 -0
  32. package/bin/{core/base/base-router.d.ts → federation/federation-router.d.ts} +11 -11
  33. package/bin/federation/federation-router.d.ts.map +1 -0
  34. package/bin/{core/base/base-router.js → federation/federation-router.js} +62 -45
  35. package/bin/federation/federation-router.js.map +1 -0
  36. package/bin/{core/base/base-runtime.d.ts → federation/federation-runtime.d.ts} +6 -6
  37. package/bin/federation/federation-runtime.d.ts.map +1 -0
  38. package/bin/{core/base/base-runtime.js → federation/federation-runtime.js} +10 -10
  39. package/bin/federation/federation-runtime.js.map +1 -0
  40. package/bin/{core/base/base.d.ts → federation/federation.d.ts} +15 -15
  41. package/bin/federation/federation.d.ts.map +1 -0
  42. package/bin/{core/base/base.js → federation/federation.js} +22 -22
  43. package/bin/federation/federation.js.map +1 -0
  44. package/bin/{core → federation}/runtime.d.ts +9 -9
  45. package/bin/federation/runtime.d.ts.map +1 -0
  46. package/bin/federation/runtime.js +13 -0
  47. package/bin/federation/runtime.js.map +1 -0
  48. package/bin/{core → federation}/types.d.ts +6 -6
  49. package/bin/federation/types.d.ts.map +1 -0
  50. package/bin/{city/user → federation}/types.js.map +1 -1
  51. package/bin/index.d.ts +23 -26
  52. package/bin/index.d.ts.map +1 -1
  53. package/bin/index.js +13 -15
  54. package/bin/index.js.map +1 -1
  55. package/bin/{city → pact}/admin/index.d.ts +23 -7
  56. package/bin/pact/admin/index.d.ts.map +1 -0
  57. package/bin/{city → pact}/admin/index.js +21 -8
  58. package/bin/pact/admin/index.js.map +1 -0
  59. package/bin/{city → pact}/admin/types.d.ts +7 -1
  60. package/bin/pact/admin/types.d.ts.map +1 -0
  61. package/bin/pact/admin/types.js.map +1 -0
  62. package/bin/{city → pact}/http.d.ts.map +1 -1
  63. package/bin/{city → pact}/http.js.map +1 -1
  64. package/bin/{city → pact}/invoker/ai/index.d.ts +1 -1
  65. package/bin/{city → pact}/invoker/ai/index.d.ts.map +1 -1
  66. package/bin/{city → pact}/invoker/ai/index.js +1 -1
  67. package/bin/{city → pact}/invoker/ai/index.js.map +1 -1
  68. package/bin/{city → pact}/invoker/ai/stream.d.ts +1 -1
  69. package/bin/{city → pact}/invoker/ai/stream.d.ts.map +1 -1
  70. package/bin/{city → pact}/invoker/ai/stream.js +1 -1
  71. package/bin/{city → pact}/invoker/ai/stream.js.map +1 -1
  72. package/bin/{city → pact}/invoker/ai/types.d.ts +2 -2
  73. package/bin/{city → pact}/invoker/ai/types.d.ts.map +1 -1
  74. package/bin/pact/invoker/ai/types.js +9 -0
  75. package/bin/pact/invoker/ai/types.js.map +1 -0
  76. package/bin/{city → pact}/invoker/balance/index.d.ts.map +1 -1
  77. package/bin/{city → pact}/invoker/balance/index.js.map +1 -1
  78. package/bin/{city → pact}/invoker/balance/types.d.ts.map +1 -1
  79. package/bin/pact/invoker/balance/types.js.map +1 -0
  80. package/bin/pact/invoker/cities/index.d.ts +46 -0
  81. package/bin/pact/invoker/cities/index.d.ts.map +1 -0
  82. package/bin/{city/invoker/towns → pact/invoker/cities}/index.js +16 -16
  83. package/bin/pact/invoker/cities/index.js.map +1 -0
  84. package/bin/pact/invoker/cities/types.d.ts +46 -0
  85. package/bin/pact/invoker/cities/types.d.ts.map +1 -0
  86. package/bin/pact/invoker/cities/types.js +5 -0
  87. package/bin/pact/invoker/cities/types.js.map +1 -0
  88. package/bin/{city → pact}/invoker/env/index.d.ts +2 -2
  89. package/bin/{city → pact}/invoker/env/index.d.ts.map +1 -1
  90. package/bin/{city → pact}/invoker/env/index.js +2 -2
  91. package/bin/{city → pact}/invoker/env/index.js.map +1 -1
  92. package/bin/{city → pact}/invoker/env/types.d.ts +2 -2
  93. package/bin/{city → pact}/invoker/env/types.d.ts.map +1 -1
  94. package/bin/pact/invoker/env/types.js +5 -0
  95. package/bin/pact/invoker/env/types.js.map +1 -0
  96. package/bin/{city → pact}/invoker/invoker.d.ts +9 -9
  97. package/bin/{city → pact}/invoker/invoker.d.ts.map +1 -1
  98. package/bin/{city → pact}/invoker/invoker.js +11 -11
  99. package/bin/{city → pact}/invoker/invoker.js.map +1 -1
  100. package/bin/{city → pact}/invoker/payment/index.d.ts +1 -1
  101. package/bin/{city → pact}/invoker/payment/index.d.ts.map +1 -1
  102. package/bin/{city → pact}/invoker/payment/index.js +1 -1
  103. package/bin/{city → pact}/invoker/payment/index.js.map +1 -1
  104. package/bin/{city → pact}/invoker/payment/types.d.ts +1 -1
  105. package/bin/{city → pact}/invoker/payment/types.d.ts.map +1 -1
  106. package/bin/pact/invoker/payment/types.js.map +1 -0
  107. package/bin/{city → pact}/user/index.d.ts +5 -5
  108. package/bin/{city → pact}/user/index.d.ts.map +1 -1
  109. package/bin/{city → pact}/user/index.js +9 -9
  110. package/bin/{city → pact}/user/index.js.map +1 -1
  111. package/bin/{city → pact}/user/types.d.ts +3 -3
  112. package/bin/{city → pact}/user/types.d.ts.map +1 -1
  113. package/bin/pact/user/types.js.map +1 -0
  114. package/bin/service/ai/ai-service.js +3 -3
  115. package/bin/service/ai/helpers.js +2 -2
  116. package/bin/service/ai/job-types.d.ts +8 -8
  117. package/bin/service/ai/job-types.d.ts.map +1 -1
  118. package/bin/service/ai/schema.d.ts +4 -4
  119. package/bin/service/ai/schema.js +6 -6
  120. package/bin/service/ai/schema.js.map +1 -1
  121. package/bin/service/cities/cities-service.d.ts +15 -0
  122. package/bin/service/cities/cities-service.d.ts.map +1 -0
  123. package/bin/service/{towns/towns-service.js → cities/cities-service.js} +17 -17
  124. package/bin/service/cities/cities-service.js.map +1 -0
  125. package/bin/service/cities/city-store.d.ts +17 -0
  126. package/bin/service/cities/city-store.d.ts.map +1 -0
  127. package/bin/service/{towns/town-store.js → cities/city-store.js} +17 -17
  128. package/bin/service/cities/city-store.js.map +1 -0
  129. package/bin/service/{towns → cities}/schema.d.ts +23 -23
  130. package/bin/service/cities/schema.d.ts.map +1 -0
  131. package/bin/service/cities/schema.js +60 -0
  132. package/bin/service/cities/schema.js.map +1 -0
  133. package/bin/service/cities/types.d.ts +51 -0
  134. package/bin/service/cities/types.d.ts.map +1 -0
  135. package/bin/service/cities/types.js +7 -0
  136. package/bin/service/cities/types.js.map +1 -0
  137. package/bin/service/env/env-service.d.ts +2 -2
  138. package/bin/service/env/env-service.js +3 -3
  139. package/bin/service/env/env-service.js.map +1 -1
  140. package/bin/service/env/types.d.ts +2 -2
  141. package/bin/service/env/types.js +1 -1
  142. package/bin/service/installable-service.d.ts +43 -12
  143. package/bin/service/installable-service.d.ts.map +1 -1
  144. package/bin/service/installable-service.js +20 -3
  145. package/bin/service/installable-service.js.map +1 -1
  146. package/bin/service/instruction.d.ts +2 -2
  147. package/bin/service/instruction.js +5 -5
  148. package/bin/service/instruction.js.map +1 -1
  149. package/bin/service/service.d.ts +45 -9
  150. package/bin/service/service.d.ts.map +1 -1
  151. package/bin/service/service.js +32 -2
  152. package/bin/service/service.js.map +1 -1
  153. package/package.json +3 -3
  154. package/bin/city/admin/index.d.ts.map +0 -1
  155. package/bin/city/admin/index.js.map +0 -1
  156. package/bin/city/admin/types.d.ts.map +0 -1
  157. package/bin/city/admin/types.js.map +0 -1
  158. package/bin/city/city.d.ts +0 -73
  159. package/bin/city/city.d.ts.map +0 -1
  160. package/bin/city/city.js.map +0 -1
  161. package/bin/city/index.d.ts +0 -20
  162. package/bin/city/index.d.ts.map +0 -1
  163. package/bin/city/index.js +0 -14
  164. package/bin/city/index.js.map +0 -1
  165. package/bin/city/invoker/ai/types.js +0 -9
  166. package/bin/city/invoker/ai/types.js.map +0 -1
  167. package/bin/city/invoker/balance/types.js.map +0 -1
  168. package/bin/city/invoker/env/types.js +0 -5
  169. package/bin/city/invoker/env/types.js.map +0 -1
  170. package/bin/city/invoker/payment/types.js.map +0 -1
  171. package/bin/city/invoker/towns/index.d.ts +0 -46
  172. package/bin/city/invoker/towns/index.d.ts.map +0 -1
  173. package/bin/city/invoker/towns/index.js.map +0 -1
  174. package/bin/city/invoker/towns/types.d.ts +0 -46
  175. package/bin/city/invoker/towns/types.d.ts.map +0 -1
  176. package/bin/city/invoker/towns/types.js +0 -5
  177. package/bin/city/invoker/towns/types.js.map +0 -1
  178. package/bin/city/types/city.d.ts +0 -71
  179. package/bin/city/types/city.d.ts.map +0 -1
  180. package/bin/city/types/city.js +0 -8
  181. package/bin/city/types/city.js.map +0 -1
  182. package/bin/core/auth/authenticator.d.ts.map +0 -1
  183. package/bin/core/auth/authenticator.js.map +0 -1
  184. package/bin/core/auth/token-signer.d.ts.map +0 -1
  185. package/bin/core/auth/token-signer.js.map +0 -1
  186. package/bin/core/auth/types.d.ts.map +0 -1
  187. package/bin/core/auth/types.js.map +0 -1
  188. package/bin/core/base/base-env-catalog.d.ts +0 -13
  189. package/bin/core/base/base-env-catalog.d.ts.map +0 -1
  190. package/bin/core/base/base-env-catalog.js.map +0 -1
  191. package/bin/core/base/base-init.d.ts.map +0 -1
  192. package/bin/core/base/base-init.js.map +0 -1
  193. package/bin/core/base/base-instruction.d.ts +0 -11
  194. package/bin/core/base/base-instruction.d.ts.map +0 -1
  195. package/bin/core/base/base-instruction.js.map +0 -1
  196. package/bin/core/base/base-router.d.ts.map +0 -1
  197. package/bin/core/base/base-router.js.map +0 -1
  198. package/bin/core/base/base-runtime.d.ts.map +0 -1
  199. package/bin/core/base/base-runtime.js.map +0 -1
  200. package/bin/core/base/base.d.ts.map +0 -1
  201. package/bin/core/base/base.js.map +0 -1
  202. package/bin/core/runtime.d.ts.map +0 -1
  203. package/bin/core/runtime.js +0 -13
  204. package/bin/core/runtime.js.map +0 -1
  205. package/bin/core/types.d.ts.map +0 -1
  206. package/bin/service/towns/schema.d.ts.map +0 -1
  207. package/bin/service/towns/schema.js +0 -60
  208. package/bin/service/towns/schema.js.map +0 -1
  209. package/bin/service/towns/town-store.d.ts +0 -17
  210. package/bin/service/towns/town-store.d.ts.map +0 -1
  211. package/bin/service/towns/town-store.js.map +0 -1
  212. package/bin/service/towns/towns-service.d.ts +0 -15
  213. package/bin/service/towns/towns-service.d.ts.map +0 -1
  214. package/bin/service/towns/towns-service.js.map +0 -1
  215. package/bin/service/towns/types.d.ts +0 -51
  216. package/bin/service/towns/types.d.ts.map +0 -1
  217. package/bin/service/towns/types.js +0 -7
  218. package/bin/service/towns/types.js.map +0 -1
  219. /package/bin/{core → federation}/auth/token-signer.d.ts +0 -0
  220. /package/bin/{core → federation}/auth/types.js +0 -0
  221. /package/bin/{core → federation}/types.js +0 -0
  222. /package/bin/{city → pact}/admin/types.js +0 -0
  223. /package/bin/{city → pact}/http.d.ts +0 -0
  224. /package/bin/{city → pact}/http.js +0 -0
  225. /package/bin/{city → pact}/invoker/balance/index.d.ts +0 -0
  226. /package/bin/{city → pact}/invoker/balance/index.js +0 -0
  227. /package/bin/{city → pact}/invoker/balance/types.d.ts +0 -0
  228. /package/bin/{city → pact}/invoker/balance/types.js +0 -0
  229. /package/bin/{city → pact}/invoker/payment/types.js +0 -0
  230. /package/bin/{city → pact}/user/types.js +0 -0
@@ -1,10 +1,10 @@
1
1
  /**
2
- * Town 数据存储。
2
+ * City 数据存储。
3
3
  *
4
4
  * 基于 CityTableApi,不直接依赖 Drizzle。
5
5
  */
6
6
  import { randomSecret } from "../../utils/helpers.js";
7
- export class TownStore {
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(town_id) {
16
- const rows = await this.table.select({ town_id });
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("Town name is required");
22
+ throw new TypeError("City name is required");
23
23
  const now = new Date().toISOString();
24
- const town = {
25
- town_id: input.town_id ?? `town_${randomSecret(12)}`,
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(town);
32
- return town;
31
+ await this.table.insert(city);
32
+ return city;
33
33
  }
34
- async setStatus(town_id, status) {
34
+ async setStatus(city_id, status) {
35
35
  if (status !== "active" && status !== "paused") {
36
- throw new TypeError(`Invalid town status: ${String(status)}`);
36
+ throw new TypeError(`Invalid city status: ${String(status)}`);
37
37
  }
38
- const existing = await this.get(town_id);
38
+ const existing = await this.get(city_id);
39
39
  if (!existing)
40
- throw new Error(`Unknown town: ${town_id}`);
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: { town_id }, values: next });
42
+ await this.table.update({ where: { city_id }, values: next });
43
43
  return next;
44
44
  }
45
- async remove(town_id) {
46
- await this.table.delete({ town_id });
45
+ async remove(city_id) {
46
+ await this.table.delete({ city_id });
47
47
  }
48
48
  }
49
- //# sourceMappingURL=town-store.js.map
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
- * Town 数据库 schema 模块。
2
+ * City 数据库 schema 模块。
3
3
  *
4
- * 定义 Downcity 内置的 Town 表结构(SQLite + Postgres)。
5
- * TownCity 多租户隔离的基本单位。
4
+ * 定义 Downcity 内置的 City 表结构(SQLite + Postgres)。
5
+ * CityAgent 的生活环境。
6
6
  */
7
7
  /**
8
- * 默认 SQLite Town 表。
8
+ * 默认 SQLite City 表。
9
9
  */
10
- export declare const sqliteTowns: import("drizzle-orm/sqlite-core").SQLiteTableWithColumns<{
11
- name: "towns";
10
+ export declare const sqliteCities: import("drizzle-orm/sqlite-core").SQLiteTableWithColumns<{
11
+ name: "cities";
12
12
  schema: undefined;
13
13
  columns: {
14
- town_id: import("drizzle-orm/sqlite-core").SQLiteColumn<{
15
- name: "town_id";
16
- tableName: "towns";
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: "towns";
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: "towns";
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: "towns";
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: "towns";
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 Town 表。
113
+ * 默认 Postgres City 表。
114
114
  */
115
- export declare const pgTowns: import("drizzle-orm/pg-core").PgTableWithColumns<{
116
- name: "towns";
115
+ export declare const pgCities: import("drizzle-orm/pg-core").PgTableWithColumns<{
116
+ name: "cities";
117
117
  schema: undefined;
118
118
  columns: {
119
- town_id: import("drizzle-orm/pg-core").PgColumn<{
120
- name: "town_id";
121
- tableName: "towns";
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: "towns";
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: "towns";
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: "towns";
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: "towns";
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,7 @@
1
+ /**
2
+ * City 公共类型模块。
3
+ *
4
+ * City 是 Agent 的生活环境,每个 API 调用都绑定到一个 City。
5
+ */
6
+ export {};
7
+ //# sourceMappingURL=types.js.map
@@ -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
- * - City 默认注册该 service。
6
- * - EnvProvider 由 City 初始化并注入,不需要产品手动传入。
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
- * - City 默认注册该 service。
6
- * - EnvProvider 由 City 初始化并注入,不需要产品手动传入。
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
- "适用于导入、列出、更新和删除 City 内部使用的 env 配置。",
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,mCAAmC;YACnC,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
+ {"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 统一由 City 内部管理。
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
- * 当前 City 是否已经配置了该 key。
67
+ * 当前 Federation 是否已经配置了该 key。
68
68
  */
69
69
  configured: boolean;
70
70
  /**
@@ -1,7 +1,7 @@
1
1
  /**
2
2
  * Env 层公共类型。
3
3
  *
4
- * Downcity 的业务 env 统一由 City 内部管理。
4
+ * Downcity 的业务 env 统一由 Federation 内部管理。
5
5
  * Service / Model 只声明自己需要哪些 key,具体值统一写入 City 的 env 表。
6
6
  */
7
7
  export {};
@@ -2,21 +2,16 @@
2
2
  * 可安装服务桥接模块。
3
3
  *
4
4
  * 提供 `InstallableService` 基类,把带 `install(ctx)` 生命周期的服务
5
- * 统一桥接到 `Service.action()` 体系。
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 "../core/auth/types.js";
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 对应的 town;免登录或 admin 请求时可能为空 */
32
- town?: {
33
- town_id: string;
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":"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"}
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
- * 统一桥接到 `Service.action()` 体系。
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
- town: svcCtx.town,
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.auth });
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":"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"}
1
+ {"version":3,"file":"installable-service.js","sourceRoot":"","sources":["../../src/service/installable-service.ts"],"names":[],"mappings":"AAAA;;;;;GAKG;AAEH,OAAO,EAAE,OAAO,EAA8F,MAAM,cAAc,CAAC;AACnI,OAAO,EAAE,IAAI,EAAE,MAAM,WAAW,CAAC;AACjC,OAAO,EAAE,QAAQ,EAAE,MAAM,uBAAuB,CAAC;AA6EjD,SAAS,sBAAsB,CAC7B,MAA2D;IAE3D,OAAO,OAAO,MAAM,CAAC,OAAO,KAAK,QAAQ,IAAI,MAAM,CAAC,OAAO,KAAK,IAAI,IAAI,SAAS,IAAI,MAAM,CAAC,OAAO,CAAC;AACtG,CAAC;AAED,SAAS,kBAAkB,CACzB,MAA4D;IAE5D,IAAI,MAAM,CAAC,MAAM,KAAK,IAAI;QAAE,OAAO,EAAE,CAAC;IACtC,OAAO,MAAM,CAAC,IAAI,CAAC;AACrB,CAAC;AAED,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,IAAI,sBAAsB,CAAC,MAAM,CAAC,EAAE,CAAC;oBACnC,IAAI,CAAC,oBAAoB,CAAC;wBACxB,MAAM,EAAE,MAAM,CAAC,MAAM;wBACrB,IAAI,EAAE,MAAM,CAAC,IAAI;wBACjB,IAAI,EAAE,kBAAkB,CAAC,MAAM,CAAC;wBAChC,OAAO,EAAE,MAAM,CAAC,OAAO,CAAC,OAAO;qBAChC,CAAC,CAAC;oBACH,OAAO;gBACT,CAAC;gBAED,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,IAAI,EAAE,MAAM,CAAC,IAAI;wBACjB,OAAO,EAAE,MAAM,CAAC,OAAO,IAAI,IAAI,OAAO,CAAC,cAAc,CAAC;wBACtD,IAAI,EAAE,KAAK,IAAiE,EAAE,CAAC,MAAM,CAAC,KAAU;wBAChG,IAAI,EAAE,KAAK,IAAI,EAAE,CAAC,MAAM,CAAC,QAAQ,IAAI,IAAI,CAAC,SAAS,CAAC,MAAM,CAAC,KAAK,CAAC;wBACjE,YAAY,EAAE,CAAC,IAAI,EAAE,MAAM,EAAE,EAAE,CAAC,IAAI,QAAQ,CAAC,IAAI,CAAC,SAAS,CAAC,IAAI,CAAC,EAAE;4BACjE,MAAM,EAAE,OAAO,EAAE,EAAE,cAAc,EAAE,kBAAkB,EAAE;yBACxD,CAAC;qBACH,CAAC,CAAC;gBACL,CAAC,EAAE,EAAE,MAAM,EAAE,MAAM,CAAC,MAAwB,EAAE,IAAI,EAAE,kBAAkB,CAAC,MAAM,CAAC,EAAE,CAAC,CAAC;YACpF,CAAC;YAED,IAAI,EAAE;gBACJ,MAAM,CAAC,EAAE,IAAI,IAAI,CAAC,UAAU,CAAC,MAAM,CAAC,EAAE,CAAC,CAAC,CAAC,CAAC;gBAC1C,KAAK,CAAC,EAAE,IAAI,IAAI,CAAC,UAAU,CAAC,KAAK,CAAC,EAAE,CAAC,CAAC,CAAC,CAAC;gBACxC,OAAO,CAAC,EAAE,IAAI,IAAI,CAAC,UAAU,CAAC,OAAO,CAAC,EAAE,CAAC,CAAC,CAAC,CAAC;aAC7C;YAED,KAAK,CAAC,eAAe,CAAC,KAAK;gBACzB,IAAI,CAAC,IAAI,CAAC,cAAc;oBAAE,MAAM,IAAI,KAAK,CAAC,yBAAyB,CAAC,CAAC;gBACrE,OAAO,IAAI,CAAC,cAAc,CAAC,WAAW,CAAC,KAAK,CAAC,CAAC;YAChD,CAAC;YAED,GAAG,CAAC,GAAG;gBACL,OAAO,IAAI,CAAC,IAAI,EAAE,GAAG,CAAC,GAAG,CAAC,CAAC;YAC7B,CAAC;SACF,CAAC;QAEF,IAAI,CAAC,OAAO,CAAC,GAAG,CAAC,CAAC;IACpB,CAAC;CACF;AAmBD,MAAM,UAAU,oBAAoB,CAAC,EAAqB;IACxD,OAAO,IAAI,CAAC,KAAM,SAAQ,kBAAkB;QAC1C;YACE,KAAK,CAAC,EAAE,CAAC,GAAG,CAAC,CAAC;YACb,IAAY,CAAC,EAAE,GAAG,EAAE,CAAC,EAAE,CAAC;YACzB,IAAI,EAAE,CAAC,IAAI;gBAAG,IAAY,CAAC,IAAI,GAAG,EAAE,CAAC,IAAI,CAAC;YAC1C,IAAI,EAAE,CAAC,MAAM;gBAAG,IAAY,CAAC,MAAM,GAAG,EAAE,CAAC,MAAM,CAAC;YAChD,IAAI,EAAE,CAAC,WAAW;gBAAE,IAAI,CAAC,WAAW,GAAG,EAAE,CAAC,WAAW,CAAC;QACxD,CAAC;QACD,OAAO,CAAC,GAA0B;YAChC,EAAE,CAAC,OAAO,CAAC,GAAG,CAAC,CAAC;QAClB,CAAC;KACF,CAAC,EAAE,CAAC;AACP,CAAC"}
@@ -2,7 +2,7 @@
2
2
  * 模块说明文档协议。
3
3
  *
4
4
  * 负责定义 City / Service / InstallableService 可共享的 instruction 能力,
5
- * 以及 City 聚合输出时使用的格式化工具。
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
- * City 聚合时看到的动作定义。
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
- * 以及 City 聚合输出时使用的格式化工具。
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 CityBase Instruction");
34
+ lines.push("# Downcity Federation Instruction");
35
35
  lines.push("");
36
- lines.push("## CityBase");
37
- lines.push("CityBase 是 Downcity 的服务端基础设施运行容器,负责挂载 Service、初始化内置 env/towns 能力、统一处理 /v1/* HTTP 路由,以及校验 user_token 与 admin_secret_key。");
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. 创建 CityBase 实例。");
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":"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"}
1
+ {"version":3,"file":"instruction.js","sourceRoot":"","sources":["../../src/service/instruction.ts"],"names":[],"mappings":"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"}