@downcity/city 0.2.205 → 0.2.213

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (101) hide show
  1. package/README.md +71 -5
  2. package/bin/client/bureau.d.ts +56 -0
  3. package/bin/client/bureau.d.ts.map +1 -0
  4. package/bin/client/bureau.js +253 -0
  5. package/bin/client/bureau.js.map +1 -0
  6. package/bin/client/city.d.ts +22 -79
  7. package/bin/client/city.d.ts.map +1 -1
  8. package/bin/client/city.js +51 -95
  9. package/bin/client/city.js.map +1 -1
  10. package/bin/client/types.d.ts +10 -70
  11. package/bin/client/types.d.ts.map +1 -1
  12. package/bin/client/types.js +3 -3
  13. package/bin/federation/auth/authenticator.d.ts +14 -13
  14. package/bin/federation/auth/authenticator.d.ts.map +1 -1
  15. package/bin/federation/auth/authenticator.js +33 -27
  16. package/bin/federation/auth/authenticator.js.map +1 -1
  17. package/bin/federation/auth/bureau-token-schema.d.ts +202 -0
  18. package/bin/federation/auth/bureau-token-schema.d.ts.map +1 -0
  19. package/bin/federation/auth/bureau-token-schema.js +35 -0
  20. package/bin/federation/auth/bureau-token-schema.js.map +1 -0
  21. package/bin/federation/auth/bureau-token-store.d.ts +22 -0
  22. package/bin/federation/auth/bureau-token-store.d.ts.map +1 -0
  23. package/bin/federation/auth/bureau-token-store.js +95 -0
  24. package/bin/federation/auth/bureau-token-store.js.map +1 -0
  25. package/bin/federation/auth/federation-key-store.d.ts +26 -0
  26. package/bin/federation/auth/federation-key-store.d.ts.map +1 -0
  27. package/bin/federation/auth/federation-key-store.js +96 -0
  28. package/bin/federation/auth/federation-key-store.js.map +1 -0
  29. package/bin/federation/auth/key-schema.d.ts +275 -0
  30. package/bin/federation/auth/key-schema.d.ts.map +1 -0
  31. package/bin/federation/auth/key-schema.js +44 -0
  32. package/bin/federation/auth/key-schema.js.map +1 -0
  33. package/bin/federation/auth/types.d.ts +62 -4
  34. package/bin/federation/auth/types.d.ts.map +1 -1
  35. package/bin/federation/auth/user-token-authority.d.ts +26 -0
  36. package/bin/federation/auth/user-token-authority.d.ts.map +1 -0
  37. package/bin/federation/auth/user-token-authority.js +179 -0
  38. package/bin/federation/auth/user-token-authority.js.map +1 -0
  39. package/bin/federation/federation-init.d.ts.map +1 -1
  40. package/bin/federation/federation-init.js +23 -4
  41. package/bin/federation/federation-init.js.map +1 -1
  42. package/bin/federation/federation-router.d.ts.map +1 -1
  43. package/bin/federation/federation-router.js +16 -0
  44. package/bin/federation/federation-router.js.map +1 -1
  45. package/bin/federation/federation-runtime.d.ts.map +1 -1
  46. package/bin/federation/federation-runtime.js +14 -2
  47. package/bin/federation/federation-runtime.js.map +1 -1
  48. package/bin/federation/federation.d.ts.map +1 -1
  49. package/bin/federation/federation.js +2 -0
  50. package/bin/federation/federation.js.map +1 -1
  51. package/bin/federation/runtime.d.ts +4 -0
  52. package/bin/federation/runtime.d.ts.map +1 -1
  53. package/bin/index.d.ts +6 -3
  54. package/bin/index.d.ts.map +1 -1
  55. package/bin/index.js +2 -1
  56. package/bin/index.js.map +1 -1
  57. package/bin/pact/admin/index.d.ts +7 -19
  58. package/bin/pact/admin/index.d.ts.map +1 -1
  59. package/bin/pact/admin/index.js +10 -18
  60. package/bin/pact/admin/index.js.map +1 -1
  61. package/bin/pact/admin/types.d.ts +4 -10
  62. package/bin/pact/admin/types.d.ts.map +1 -1
  63. package/bin/pact/invoker/bureaus/index.d.ts +25 -0
  64. package/bin/pact/invoker/bureaus/index.d.ts.map +1 -0
  65. package/bin/pact/invoker/bureaus/index.js +36 -0
  66. package/bin/pact/invoker/bureaus/index.js.map +1 -0
  67. package/bin/pact/invoker/cities/types.d.ts +2 -2
  68. package/bin/pact/invoker/cities/types.d.ts.map +1 -1
  69. package/bin/pact/invoker/user/index.d.ts +19 -0
  70. package/bin/pact/invoker/user/index.d.ts.map +1 -0
  71. package/bin/pact/invoker/user/index.js +24 -0
  72. package/bin/pact/invoker/user/index.js.map +1 -0
  73. package/bin/pact/user/index.d.ts +2 -1
  74. package/bin/pact/user/index.d.ts.map +1 -1
  75. package/bin/pact/user/index.js +7 -3
  76. package/bin/pact/user/index.js.map +1 -1
  77. package/bin/pact/user/types.d.ts +0 -2
  78. package/bin/pact/user/types.d.ts.map +1 -1
  79. package/bin/service/bureaus/bureaus-service.d.ts +13 -0
  80. package/bin/service/bureaus/bureaus-service.d.ts.map +1 -0
  81. package/bin/service/bureaus/bureaus-service.js +36 -0
  82. package/bin/service/bureaus/bureaus-service.js.map +1 -0
  83. package/bin/service/instruction.js +1 -1
  84. package/bin/service/instruction.js.map +1 -1
  85. package/bin/service/service.d.ts +3 -0
  86. package/bin/service/service.d.ts.map +1 -1
  87. package/bin/service/service.js +2 -0
  88. package/bin/service/service.js.map +1 -1
  89. package/bin/types/Bureau.d.ts +64 -0
  90. package/bin/types/Bureau.d.ts.map +1 -0
  91. package/bin/types/Bureau.js +8 -0
  92. package/bin/types/Bureau.js.map +1 -0
  93. package/bin/types/User.d.ts +24 -0
  94. package/bin/types/User.d.ts.map +1 -0
  95. package/bin/types/User.js +8 -0
  96. package/bin/types/User.js.map +1 -0
  97. package/package.json +4 -3
  98. package/bin/federation/auth/token-signer.d.ts +0 -27
  99. package/bin/federation/auth/token-signer.d.ts.map +0 -1
  100. package/bin/federation/auth/token-signer.js +0 -116
  101. package/bin/federation/auth/token-signer.js.map +0 -1
@@ -1,126 +1,82 @@
1
1
  /**
2
- * City 客户端统一访问入口。
2
+ * City 终端用户客户端。
3
3
  *
4
- * City 面向开发者表达“我以某种角色进入 Federation”,内部再委托给
5
- * admin / user 协议访问层(`pact/`),让用户在第一层概念上无需关心 client 拆分。
4
+ * City 只持有 Federation 地址与可选 user_token。city_id 由 Federation 在服务端
5
+ * 验签后从 token 中读取,客户端不能重复声明或覆盖。
6
6
  */
7
- import { AdminPactAccess } from "../pact/admin/index.js";
8
7
  import { UserPactAccess } from "../pact/user/index.js";
9
- /**
10
- * Downcity City 客户端。
11
- */
8
+ import { defaultFetch, requestJSON } from "../pact/http.js";
9
+ /** Downcity City 用户客户端。 */
12
10
  export class City {
13
- /**
14
- * 当前 City 客户端的访问角色。
15
- */
16
- role;
17
- /**
18
- * Admin 能力面。
19
- *
20
- * 仅 `role: "admin"` 时可用。
21
- */
22
- admin_access;
23
- /**
24
- * User 能力面。
25
- *
26
- * 仅 `role: "user"` 时可用。
27
- */
28
11
  user_access;
12
+ user_token;
13
+ fetcher;
29
14
  constructor(options) {
30
15
  if (!options || typeof options !== "object") {
31
16
  throw new TypeError("City options are required");
32
17
  }
33
- this.role = options.role;
34
- if (options.role === "admin") {
35
- this.admin_access = new AdminPactAccess({
36
- base_url: options.federation_url,
37
- city_id: options.city_id,
38
- admin_secret_key: options.admin_secret_key,
39
- fetch: options.fetch,
40
- });
41
- return;
42
- }
43
18
  this.user_access = new UserPactAccess({
44
19
  base_url: options.federation_url,
45
- city_id: options.city_id,
46
20
  user_token: options.user_token,
47
21
  fetch: options.fetch,
48
22
  });
23
+ this.user_token = options.user_token;
24
+ this.fetcher = options.fetch ?? defaultFetch();
49
25
  }
50
- /**
51
- * User 角色的 AI 调用入口。
52
- */
26
+ /** 用户侧 AI 调用入口。 */
53
27
  get ai() {
54
- return this.require_user().ai;
28
+ return this.user_access.ai;
55
29
  }
56
- /**
57
- * User 角色的支付入口。
58
- */
30
+ /** 用户侧支付入口。 */
59
31
  get payment() {
60
- return this.require_user().payment;
61
- }
62
- /**
63
- * Admin 角色的余额服务入口。
64
- */
65
- get balance() {
66
- return this.require_admin().balance;
67
- }
68
- /**
69
- * Admin 角色的 City 管理入口。
70
- */
71
- get cities() {
72
- return this.require_admin().cities;
73
- }
74
- /**
75
- * Admin 角色的环境变量服务入口。
76
- */
77
- get env() {
78
- return this.require_admin().env;
32
+ return this.user_access.payment;
79
33
  }
80
- /**
81
- * Token 管理入口。
82
- *
83
- * 不需要传 city_id,构造时传入的 city_id 会自动注入。
84
- */
85
- get tokens() {
86
- const admin = this.require_admin();
87
- return { apply: (input) => admin.applyToken(input) };
34
+ /** Federation 当前用户数据入口。 */
35
+ user() {
36
+ return this.user_access.user;
88
37
  }
89
- /**
90
- * 获取普通 service 调用器。
91
- */
38
+ /** 获取普通 Service 调用器。 */
92
39
  service(name) {
93
- return this.admin_access?.service(name) ?? this.require_user().service(name);
40
+ return this.user_access.service(name);
94
41
  }
95
- /**
96
- * 列出当前 Federation 暴露的 service。
97
- */
42
+ /** 列出 Federation 暴露的 Service。 */
98
43
  listServices() {
99
- return this.admin_access?.listServices() ?? this.require_user().listServices();
44
+ return this.user_access.listServices();
100
45
  }
101
- /**
102
- * 列出 Federation 模型目录。
103
- */
104
- listModels() {
105
- return this.require_admin().listModels();
46
+ /** 发送 JSON GET 请求,并返回解析后的 JSON。 */
47
+ get(url) {
48
+ return this.request_json(url, { method: "GET" });
106
49
  }
107
- /**
108
- * 读取 Federation 聚合说明文档。
109
- */
110
- instruction() {
111
- return this.require_admin().instruction();
50
+ /** 发送 JSON POST 请求,第二个参数会直接序列化为请求体。 */
51
+ post(url, body = {}) {
52
+ return this.request_json(url, {
53
+ method: "POST",
54
+ body: JSON.stringify(body),
55
+ });
112
56
  }
113
- require_admin() {
114
- if (!this.admin_access) {
115
- throw new TypeError("City role admin is required for this operation");
116
- }
117
- return this.admin_access;
57
+ request_json(url, init) {
58
+ const headers = {
59
+ accept: "application/json",
60
+ "content-type": "application/json",
61
+ };
62
+ if (this.user_token)
63
+ headers.authorization = `Bearer ${this.user_token}`;
64
+ return requestJSON({
65
+ fetch: this.fetcher,
66
+ url: resolve_request_url(url, this.user_access.serverUrl),
67
+ init: { ...init, headers },
68
+ });
118
69
  }
119
- require_user() {
120
- if (!this.user_access) {
121
- throw new TypeError("City role user is required for this operation");
122
- }
123
- return this.user_access;
70
+ }
71
+ function resolve_request_url(value, base_url) {
72
+ const input = String(value ?? "").trim();
73
+ if (!input)
74
+ throw new TypeError("url is required");
75
+ try {
76
+ return new URL(input, base_url).toString();
77
+ }
78
+ catch {
79
+ throw new TypeError("url must be a valid URL");
124
80
  }
125
81
  }
126
82
  //# sourceMappingURL=city.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"city.js","sourceRoot":"","sources":["../../src/client/city.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"city.js","sourceRoot":"","sources":["../../src/client/city.ts"],"names":[],"mappings":"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"}
@@ -1,81 +1,21 @@
1
1
  /**
2
- * City 客户端构造类型模块。
2
+ * City 用户客户端构造类型模块。
3
3
  *
4
- * City 是访问 Federation 的统一客户端入口:开发者只需要声明访问角色,
5
- * SDK 会在内部选择 admin user 能力面。底层 HTTP 协议实现位于 `pact/`。
4
+ * City 只表达终端用户访问 Federation。已登录身份和 city_id 均来自 user_token。
5
+ * City 也可以把同一个 user_token 携带到 Bureau 提供的可选独立服务。
6
6
  */
7
7
  import type { FetchLike } from "../pact/http.js";
8
- /**
9
- * City 访问角色。
10
- */
11
- export type CityRole = "admin" | "user";
12
- /**
13
- * City 客户端共享构造参数。
14
- */
15
- export interface CityBaseOptions {
16
- /**
17
- * Federation 的 HTTP 入口地址。
18
- *
19
- * 示例:`https://city.example.com`、`http://localhost:43127`
20
- * 或本机 loopback HTTP:`http://127.0.0.1:15315`。
21
- */
8
+ /** City 用户客户端构造参数。 */
9
+ export interface CityOptions {
10
+ /** Federation 的 HTTP 入口地址。 */
22
11
  federation_url: string;
23
12
  /**
24
- * 自定义 fetch 实现。
25
- *
26
- * 主要用于测试、Worker 运行时适配,或在请求层注入日志与追踪。
27
- */
28
- fetch?: FetchLike;
29
- }
30
- /**
31
- * Admin 角色的 City 构造参数。
32
- */
33
- export interface AdminCityOptions extends CityBaseOptions {
34
- /**
35
- * 使用 admin 身份访问 Federation。
36
- */
37
- role: "admin";
38
- /**
39
- * 当前管理的 City ID。
13
+ * Federation 签发的终端用户 token。
40
14
  *
41
- * token 签发等服务会自动使用该 ID,调用方无需再传 city_id。
42
- */
43
- city_id: string;
44
- /**
45
- * Federation 管理密钥。
46
- *
47
- * 未传入时会由 SDK 回退读取 `DOWNCITY_FEDERATION_ADMIN_SECRET_KEY`。
48
- */
49
- admin_secret_key?: string;
50
- }
51
- /**
52
- * User 角色的 City 构造参数。
53
- */
54
- export interface UserCityOptions extends CityBaseOptions {
55
- /**
56
- * 使用 user 身份访问 Federation。
57
- */
58
- role: "user";
59
- /**
60
- * 当前 user_token 绑定的 City ID。
61
- *
62
- * 普通 service action 调用会自动把该值注入为 `city_id`。
63
- * AI 调用会优先使用 `user_token` 解析出的 City 身份。
64
- */
65
- city_id?: string;
66
- /**
67
- * 终端用户访问 token。
68
- *
69
- * 仅访问 public action(例如 accounts 本地登录)时可以暂不传。
15
+ * 访问 accounts 登录等公开 Action 时可以省略;受保护操作必须提供。
70
16
  */
71
17
  user_token?: string;
18
+ /** 自定义 fetch 实现。 */
19
+ fetch?: FetchLike;
72
20
  }
73
- /**
74
- * City 构造参数。
75
- */
76
- export type CityOptions = AdminCityOptions | UserCityOptions;
77
- /**
78
- * 按角色收窄后的 City 构造参数。
79
- */
80
- export type CityOptionsForRole<TRole extends CityRole> = TRole extends "admin" ? AdminCityOptions : UserCityOptions;
81
21
  //# sourceMappingURL=types.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"types.d.ts","sourceRoot":"","sources":["../../src/client/types.ts"],"names":[],"mappings":"AAAA;;;;;GAKG;AAEH,OAAO,KAAK,EAAE,SAAS,EAAE,MAAM,iBAAiB,CAAC;AAEjD;;GAEG;AACH,MAAM,MAAM,QAAQ,GAAG,OAAO,GAAG,MAAM,CAAC;AAExC;;GAEG;AACH,MAAM,WAAW,eAAe;IAC9B;;;;;OAKG;IACH,cAAc,EAAE,MAAM,CAAC;IAEvB;;;;OAIG;IACH,KAAK,CAAC,EAAE,SAAS,CAAC;CACnB;AAED;;GAEG;AACH,MAAM,WAAW,gBAAiB,SAAQ,eAAe;IACvD;;OAEG;IACH,IAAI,EAAE,OAAO,CAAC;IAEd;;;;OAIG;IACH,OAAO,EAAE,MAAM,CAAC;IAEhB;;;;OAIG;IACH,gBAAgB,CAAC,EAAE,MAAM,CAAC;CAC3B;AAED;;GAEG;AACH,MAAM,WAAW,eAAgB,SAAQ,eAAe;IACtD;;OAEG;IACH,IAAI,EAAE,MAAM,CAAC;IAEb;;;;;OAKG;IACH,OAAO,CAAC,EAAE,MAAM,CAAC;IAEjB;;;;OAIG;IACH,UAAU,CAAC,EAAE,MAAM,CAAC;CACrB;AAED;;GAEG;AACH,MAAM,MAAM,WAAW,GAAG,gBAAgB,GAAG,eAAe,CAAC;AAE7D;;GAEG;AACH,MAAM,MAAM,kBAAkB,CAAC,KAAK,SAAS,QAAQ,IAAI,KAAK,SAAS,OAAO,GAC1E,gBAAgB,GAChB,eAAe,CAAC"}
1
+ {"version":3,"file":"types.d.ts","sourceRoot":"","sources":["../../src/client/types.ts"],"names":[],"mappings":"AAAA;;;;;GAKG;AAEH,OAAO,KAAK,EAAE,SAAS,EAAE,MAAM,iBAAiB,CAAC;AAEjD,sBAAsB;AACtB,MAAM,WAAW,WAAW;IAC1B,8BAA8B;IAC9B,cAAc,EAAE,MAAM,CAAC;IAEvB;;;;OAIG;IACH,UAAU,CAAC,EAAE,MAAM,CAAC;IAEpB,oBAAoB;IACpB,KAAK,CAAC,EAAE,SAAS,CAAC;CACnB"}
@@ -1,8 +1,8 @@
1
1
  /**
2
- * City 客户端构造类型模块。
2
+ * City 用户客户端构造类型模块。
3
3
  *
4
- * City 是访问 Federation 的统一客户端入口:开发者只需要声明访问角色,
5
- * SDK 会在内部选择 admin user 能力面。底层 HTTP 协议实现位于 `pact/`。
4
+ * City 只表达终端用户访问 Federation。已登录身份和 city_id 均来自 user_token。
5
+ * City 也可以把同一个 user_token 携带到 Bureau 提供的可选独立服务。
6
6
  */
7
7
  export {};
8
8
  //# sourceMappingURL=types.js.map
@@ -1,14 +1,16 @@
1
1
  /**
2
2
  * 统一鉴权模块。
3
3
  *
4
- * Authenticator 统一处理 admin(secret key)和 user(JWT token)两种鉴权方式。
4
+ * Authenticator 统一处理管理凭证(root secret Bureau Token)和
5
+ * user_token(Ed25519 JWT)两类鉴权方式。
5
6
  * 所有鉴权失败统一抛出 httpError(ErrorWithStatus)。
6
- *
7
- * TokenSigner 实例通过 getSigner() 缓存,避免重复 new TokenSigner(key)。
8
7
  */
9
8
  import { type RouteAuth, type RouteIdentity } from "../../service/service.js";
10
9
  import type { EnvProvider } from "../runtime.js";
11
- import type { CreateUserTokenInput, UserTokenPayload, UserTokenIssueResult, RuntimeUser } from "./types.js";
10
+ import { type UserTokenAuthority } from "./user-token-authority.js";
11
+ import type { FederationKeyStore } from "./federation-key-store.js";
12
+ import type { BureauTokenStore } from "./bureau-token-store.js";
13
+ import type { CreateUserTokenInput, FederationDiscovery, FederationJwks, UserTokenPayload, UserTokenIssueResult, RuntimeUser } from "./types.js";
12
14
  import type { FederationTrustedIdentity } from "../types.js";
13
15
  /** 鉴权级别 */
14
16
  /** 鉴权结果 */
@@ -27,8 +29,9 @@ export interface AuthResult {
27
29
  export declare class Authenticator {
28
30
  private env;
29
31
  private store;
30
- /** 缓存的 TokenSigner 实例 */
31
- private tokenSigner?;
32
+ private readonly token_authority;
33
+ private readonly key_store;
34
+ private readonly bureau_token_store;
32
35
  constructor(env: EnvProvider, store: () => Promise<{
33
36
  city: {
34
37
  get(id: string): Promise<{
@@ -36,13 +39,7 @@ export declare class Authenticator {
36
39
  status: string;
37
40
  } | undefined>;
38
41
  };
39
- }>);
40
- /**
41
- * 获取(或创建)TokenSigner 单例。
42
- *
43
- * 首次调用时从 env 读取 DOWNCITY_FEDERATION_TOKEN_SIGNING_KEY 创建实例并缓存。
44
- */
45
- private getSigner;
42
+ }>, token_authority: UserTokenAuthority, key_store: FederationKeyStore, bureau_token_store: BureauTokenStore);
46
43
  /**
47
44
  * 解析请求身份。
48
45
  *
@@ -84,5 +81,9 @@ export declare class Authenticator {
84
81
  * @returns 解析出的 token 载荷
85
82
  */
86
83
  verifyToken(token: string): Promise<UserTokenPayload>;
84
+ /** 返回 Federation 当前可公开使用的 JWKS。 */
85
+ get_public_jwks(): Promise<FederationJwks>;
86
+ /** 根据当前请求 origin 生成 Federation 发现信息。 */
87
+ get_discovery(origin: string): FederationDiscovery;
87
88
  }
88
89
  //# sourceMappingURL=authenticator.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"authenticator.d.ts","sourceRoot":"","sources":["../../../src/federation/auth/authenticator.ts"],"names":[],"mappings":"AAAA;;;;;;;GAOG;AAIH,OAAO,EAAsB,KAAK,SAAS,EAAE,KAAK,aAAa,EAAE,MAAM,0BAA0B,CAAC;AAClG,OAAO,KAAK,EAAE,WAAW,EAAE,MAAM,eAAe,CAAC;AAEjD,OAAO,KAAK,EAAE,oBAAoB,EAAE,gBAAgB,EAAE,oBAAoB,EAAE,WAAW,EAAE,MAAM,YAAY,CAAC;AAC5G,OAAO,KAAK,EAAE,yBAAyB,EAAE,MAAM,aAAa,CAAC;AAE7D,WAAW;AACX,WAAW;AACX,MAAM,WAAW,UAAU;IACzB,eAAe;IACf,KAAK,EAAE,aAAa,CAAC;IACrB,2BAA2B;IAC3B,IAAI,CAAC,EAAE,WAAW,CAAC;IACnB,+BAA+B;IAC/B,IAAI,CAAC,EAAE;QAAE,OAAO,EAAE,MAAM,CAAC;QAAC,MAAM,EAAE,MAAM,CAAA;KAAE,CAAC;CAC5C;AAED,YAAY;AACZ,qBAAa,aAAa;IAKtB,OAAO,CAAC,GAAG;IACX,OAAO,CAAC,KAAK;IALf,yBAAyB;IACzB,OAAO,CAAC,WAAW,CAAC,CAAc;gBAGxB,GAAG,EAAE,WAAW,EAChB,KAAK,EAAE,MAAM,OAAO,CAAC;QAAE,IAAI,EAAE;YAAE,GAAG,CAAC,EAAE,EAAE,MAAM,GAAG,OAAO,CAAC;gBAAE,OAAO,EAAE,MAAM,CAAC;gBAAC,MAAM,EAAE,MAAM,CAAA;aAAE,GAAG,SAAS,CAAC,CAAA;SAAE,CAAA;KAAE,CAAC;IAGvH;;;;OAIG;IACH,OAAO,CAAC,SAAS;IASjB;;;;;OAKG;IACG,OAAO,CAAC,OAAO,EAAE,OAAO,GAAG,OAAO,CAAC,UAAU,CAAC;IA0BpD;;;;;;OAMG;IACH,cAAc,CAAC,QAAQ,EAAE,yBAAyB,GAAG,UAAU;IAW/D;;;;;;OAMG;IACH,SAAS,CAAC,MAAM,EAAE,UAAU,EAAE,QAAQ,CAAC,EAAE,SAAS,GAAG,UAAU;IAY/D;;OAEG;IACG,YAAY,CAAC,OAAO,EAAE,OAAO,EAAE,QAAQ,CAAC,EAAE,SAAS,GAAG,OAAO,CAAC,UAAU,CAAC;IAI/E;;;;;OAKG;IACG,WAAW,CAAC,KAAK,EAAE,oBAAoB,GAAG,OAAO,CAAC,oBAAoB,CAAC;IAiB7E;;;;;OAKG;IACG,WAAW,CAAC,KAAK,EAAE,MAAM,GAAG,OAAO,CAAC,gBAAgB,CAAC;CAG5D"}
1
+ {"version":3,"file":"authenticator.d.ts","sourceRoot":"","sources":["../../../src/federation/auth/authenticator.ts"],"names":[],"mappings":"AAAA;;;;;;GAMG;AAGH,OAAO,EAAsB,KAAK,SAAS,EAAE,KAAK,aAAa,EAAE,MAAM,0BAA0B,CAAC;AAClG,OAAO,KAAK,EAAE,WAAW,EAAE,MAAM,eAAe,CAAC;AACjD,OAAO,EAAwB,KAAK,kBAAkB,EAAE,MAAM,2BAA2B,CAAC;AAC1F,OAAO,KAAK,EAAE,kBAAkB,EAAE,MAAM,2BAA2B,CAAC;AACpE,OAAO,KAAK,EAAE,gBAAgB,EAAE,MAAM,yBAAyB,CAAC;AAEhE,OAAO,KAAK,EACV,oBAAoB,EACpB,mBAAmB,EACnB,cAAc,EACd,gBAAgB,EAChB,oBAAoB,EACpB,WAAW,EACZ,MAAM,YAAY,CAAC;AACpB,OAAO,KAAK,EAAE,yBAAyB,EAAE,MAAM,aAAa,CAAC;AAE7D,WAAW;AACX,WAAW;AACX,MAAM,WAAW,UAAU;IACzB,eAAe;IACf,KAAK,EAAE,aAAa,CAAC;IACrB,2BAA2B;IAC3B,IAAI,CAAC,EAAE,WAAW,CAAC;IACnB,+BAA+B;IAC/B,IAAI,CAAC,EAAE;QAAE,OAAO,EAAE,MAAM,CAAC;QAAC,MAAM,EAAE,MAAM,CAAA;KAAE,CAAC;CAC5C;AAED,YAAY;AACZ,qBAAa,aAAa;IAEtB,OAAO,CAAC,GAAG;IACX,OAAO,CAAC,KAAK;IACb,OAAO,CAAC,QAAQ,CAAC,eAAe;IAChC,OAAO,CAAC,QAAQ,CAAC,SAAS;IAC1B,OAAO,CAAC,QAAQ,CAAC,kBAAkB;gBAJ3B,GAAG,EAAE,WAAW,EAChB,KAAK,EAAE,MAAM,OAAO,CAAC;QAAE,IAAI,EAAE;YAAE,GAAG,CAAC,EAAE,EAAE,MAAM,GAAG,OAAO,CAAC;gBAAE,OAAO,EAAE,MAAM,CAAC;gBAAC,MAAM,EAAE,MAAM,CAAA;aAAE,GAAG,SAAS,CAAC,CAAA;SAAE,CAAA;KAAE,CAAC,EACpG,eAAe,EAAE,kBAAkB,EACnC,SAAS,EAAE,kBAAkB,EAC7B,kBAAkB,EAAE,gBAAgB;IAGvD;;;;;OAKG;IACG,OAAO,CAAC,OAAO,EAAE,OAAO,GAAG,OAAO,CAAC,UAAU,CAAC;IA8BpD;;;;;;OAMG;IACH,cAAc,CAAC,QAAQ,EAAE,yBAAyB,GAAG,UAAU;IAW/D;;;;;;OAMG;IACH,SAAS,CAAC,MAAM,EAAE,UAAU,EAAE,QAAQ,CAAC,EAAE,SAAS,GAAG,UAAU;IAY/D;;OAEG;IACG,YAAY,CAAC,OAAO,EAAE,OAAO,EAAE,QAAQ,CAAC,EAAE,SAAS,GAAG,OAAO,CAAC,UAAU,CAAC;IAI/E;;;;;OAKG;IACG,WAAW,CAAC,KAAK,EAAE,oBAAoB,GAAG,OAAO,CAAC,oBAAoB,CAAC;IAgB7E;;;;;OAKG;IACG,WAAW,CAAC,KAAK,EAAE,MAAM,GAAG,OAAO,CAAC,gBAAgB,CAAC;IAI3D,mCAAmC;IACnC,eAAe,IAAI,OAAO,CAAC,cAAc,CAAC;IAI1C,wCAAwC;IACxC,aAAa,CAAC,MAAM,EAAE,MAAM,GAAG,mBAAmB;CASnD"}
@@ -1,37 +1,26 @@
1
1
  /**
2
2
  * 统一鉴权模块。
3
3
  *
4
- * Authenticator 统一处理 admin(secret key)和 user(JWT token)两种鉴权方式。
4
+ * Authenticator 统一处理管理凭证(root secret Bureau Token)和
5
+ * user_token(Ed25519 JWT)两类鉴权方式。
5
6
  * 所有鉴权失败统一抛出 httpError(ErrorWithStatus)。
6
- *
7
- * TokenSigner 实例通过 getSigner() 缓存,避免重复 new TokenSigner(key)。
8
7
  */
9
8
  import { bearerToken, httpError } from "../../utils/helpers.js";
10
- import { TokenSigner } from "./token-signer.js";
11
9
  import { normalizeRouteAuth } from "../../service/service.js";
10
+ import { parse_user_token_ttl } from "./user-token-authority.js";
12
11
  /** 统一鉴权器 */
13
12
  export class Authenticator {
14
13
  env;
15
14
  store;
16
- /** 缓存的 TokenSigner 实例 */
17
- tokenSigner;
18
- constructor(env, store) {
15
+ token_authority;
16
+ key_store;
17
+ bureau_token_store;
18
+ constructor(env, store, token_authority, key_store, bureau_token_store) {
19
19
  this.env = env;
20
20
  this.store = store;
21
- }
22
- /**
23
- * 获取(或创建)TokenSigner 单例。
24
- *
25
- * 首次调用时从 env 读取 DOWNCITY_FEDERATION_TOKEN_SIGNING_KEY 创建实例并缓存。
26
- */
27
- getSigner() {
28
- if (!this.tokenSigner) {
29
- const signingKey = this.env.get("DOWNCITY_FEDERATION_TOKEN_SIGNING_KEY");
30
- if (!signingKey)
31
- throw new Error("DOWNCITY_FEDERATION_TOKEN_SIGNING_KEY is required");
32
- this.tokenSigner = new TokenSigner(signingKey);
33
- }
34
- return this.tokenSigner;
21
+ this.token_authority = token_authority;
22
+ this.key_store = key_store;
23
+ this.bureau_token_store = bureau_token_store;
35
24
  }
36
25
  /**
37
26
  * 解析请求身份。
@@ -47,8 +36,11 @@ export class Authenticator {
47
36
  if (adminKey && token === adminKey) {
48
37
  return { level: "admin" };
49
38
  }
39
+ if (await this.bureau_token_store.resolve(token)) {
40
+ return { level: "admin" };
41
+ }
50
42
  try {
51
- const payload = await this.getSigner().verify(token);
43
+ const payload = await this.token_authority.verify(token);
52
44
  const store = await this.store();
53
45
  const city = await store.city.get(payload.city_id);
54
46
  if (!city)
@@ -119,14 +111,13 @@ export class Authenticator {
119
111
  throw httpError(404, `Unknown city: ${input.city_id}`);
120
112
  if (city.status !== "active")
121
113
  throw httpError(403, `City is not active: ${input.city_id}`);
122
- const user_token = await this.getSigner().sign(input);
114
+ const ttl_seconds = parse_user_token_ttl(input.ttl);
115
+ const user_token = await this.token_authority.sign(input);
123
116
  return {
124
117
  user_token,
125
118
  city_id: input.city_id,
126
119
  user_id: input.user_id,
127
- ...(input.ttl
128
- ? { expires_at: new Date(Date.now() + TokenSigner.parseTTL(input.ttl) * 1000).toISOString() }
129
- : {}),
120
+ expires_at: new Date(Date.now() + ttl_seconds * 1000).toISOString(),
130
121
  };
131
122
  }
132
123
  /**
@@ -136,7 +127,22 @@ export class Authenticator {
136
127
  * @returns 解析出的 token 载荷
137
128
  */
138
129
  async verifyToken(token) {
139
- return this.getSigner().verify(token);
130
+ return this.token_authority.verify(token);
131
+ }
132
+ /** 返回 Federation 当前可公开使用的 JWKS。 */
133
+ get_public_jwks() {
134
+ return this.key_store.get_public_jwks();
135
+ }
136
+ /** 根据当前请求 origin 生成 Federation 发现信息。 */
137
+ get_discovery(origin) {
138
+ const federation_id = this.env.get("DOWNCITY_FEDERATION_ID");
139
+ if (!federation_id)
140
+ throw new Error("DOWNCITY_FEDERATION_ID is required");
141
+ return {
142
+ issuer: `urn:downcity:federation:${federation_id}`,
143
+ jwks_uri: `${origin.replace(/\/+$/, "")}/.well-known/jwks.json`,
144
+ user_token_audience: "downcity:user",
145
+ };
140
146
  }
141
147
  }
142
148
  //# sourceMappingURL=authenticator.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"authenticator.js","sourceRoot":"","sources":["../../../src/federation/auth/authenticator.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"authenticator.js","sourceRoot":"","sources":["../../../src/federation/auth/authenticator.ts"],"names":[],"mappings":"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"}