@downcity/city 0.2.124 → 0.2.129

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (55) hide show
  1. package/README.md +31 -1
  2. package/bin/client/types.d.ts +6 -2
  3. package/bin/client/types.d.ts.map +1 -1
  4. package/bin/federation/auth/authenticator.d.ts +9 -0
  5. package/bin/federation/auth/authenticator.d.ts.map +1 -1
  6. package/bin/federation/auth/authenticator.js +17 -0
  7. package/bin/federation/auth/authenticator.js.map +1 -1
  8. package/bin/federation/federation-middleware.d.ts +17 -0
  9. package/bin/federation/federation-middleware.d.ts.map +1 -0
  10. package/bin/federation/federation-middleware.js +41 -0
  11. package/bin/federation/federation-middleware.js.map +1 -0
  12. package/bin/federation/federation-router.d.ts.map +1 -1
  13. package/bin/federation/federation-router.js +20 -4
  14. package/bin/federation/federation-router.js.map +1 -1
  15. package/bin/federation/federation.d.ts +13 -11
  16. package/bin/federation/federation.d.ts.map +1 -1
  17. package/bin/federation/federation.js +26 -18
  18. package/bin/federation/federation.js.map +1 -1
  19. package/bin/federation/middlewares.d.ts +44 -0
  20. package/bin/federation/middlewares.d.ts.map +1 -0
  21. package/bin/federation/middlewares.js +219 -0
  22. package/bin/federation/middlewares.js.map +1 -0
  23. package/bin/federation/types.d.ts +32 -2
  24. package/bin/federation/types.d.ts.map +1 -1
  25. package/bin/index.d.ts +3 -1
  26. package/bin/index.d.ts.map +1 -1
  27. package/bin/index.js +1 -0
  28. package/bin/index.js.map +1 -1
  29. package/bin/pact/admin/index.d.ts +1 -1
  30. package/bin/pact/admin/index.d.ts.map +1 -1
  31. package/bin/pact/admin/index.js +21 -15
  32. package/bin/pact/admin/index.js.map +1 -1
  33. package/bin/pact/admin/types.d.ts +2 -2
  34. package/bin/pact/admin/types.d.ts.map +1 -1
  35. package/bin/pact/requester.d.ts +47 -0
  36. package/bin/pact/requester.d.ts.map +1 -0
  37. package/bin/pact/requester.js +93 -0
  38. package/bin/pact/requester.js.map +1 -0
  39. package/bin/pact/rpc-client.d.ts +30 -0
  40. package/bin/pact/rpc-client.d.ts.map +1 -0
  41. package/bin/pact/rpc-client.js +99 -0
  42. package/bin/pact/rpc-client.js.map +1 -0
  43. package/bin/pact/user/index.d.ts +1 -1
  44. package/bin/pact/user/index.d.ts.map +1 -1
  45. package/bin/pact/user/index.js +21 -15
  46. package/bin/pact/user/index.js.map +1 -1
  47. package/bin/pact/user/types.d.ts +2 -2
  48. package/bin/pact/user/types.d.ts.map +1 -1
  49. package/bin/service/instruction.js +1 -1
  50. package/bin/service/instruction.js.map +1 -1
  51. package/bin/types/FederationMiddleware.d.ts +138 -0
  52. package/bin/types/FederationMiddleware.d.ts.map +1 -0
  53. package/bin/types/FederationMiddleware.js +9 -0
  54. package/bin/types/FederationMiddleware.js.map +1 -0
  55. package/package.json +2 -2
@@ -0,0 +1,219 @@
1
+ /**
2
+ * Federation 内置 HTTP middleware。
3
+ *
4
+ * 提供生产入口常用的横切安全策略:请求体大小限制、CORS、安全响应头、
5
+ * 请求超时和粗粒度限流。所有 helper 都运行在内部 router 之前。
6
+ */
7
+ const DEFAULT_BODY_LIMIT_METHODS = ["POST", "PUT", "PATCH"];
8
+ const DEFAULT_CORS_METHODS = ["GET", "POST", "OPTIONS"];
9
+ const DEFAULT_CORS_HEADERS = ["Content-Type", "Authorization"];
10
+ const DEFAULT_PERMISSIONS_POLICY = "camera=(), microphone=(), geolocation=()";
11
+ /**
12
+ * 在业务路由读取 body 前基于 Content-Length 拒绝过大请求。
13
+ */
14
+ export function bodyLimit(options) {
15
+ const methods = new Set((options.methods ?? DEFAULT_BODY_LIMIT_METHODS).map((method) => method.toUpperCase()));
16
+ return (ctx, next) => {
17
+ if (!methods.has(ctx.request.method.toUpperCase())) {
18
+ return next();
19
+ }
20
+ if (!match_path(ctx.request, options.paths)) {
21
+ return next();
22
+ }
23
+ const content_length = ctx.request.headers.get("content-length");
24
+ if (!content_length) {
25
+ return next();
26
+ }
27
+ const size = Number.parseInt(content_length, 10);
28
+ if (Number.isFinite(size) && size > options.max_bytes) {
29
+ return json_error("Request body too large", "request_too_large", 413);
30
+ }
31
+ return next();
32
+ };
33
+ }
34
+ /**
35
+ * 处理 CORS preflight,并为允许的 Origin 回填 CORS 响应头。
36
+ */
37
+ export function cors(options) {
38
+ const methods = options.methods ?? DEFAULT_CORS_METHODS;
39
+ const headers = options.headers ?? DEFAULT_CORS_HEADERS;
40
+ return async (ctx, next) => {
41
+ const origin = ctx.request.headers.get("origin");
42
+ const allowed_origin = resolve_allowed_origin(origin, options.origins);
43
+ if (origin && !allowed_origin && options.strict) {
44
+ return json_error("Origin is not allowed", "origin_forbidden", 403);
45
+ }
46
+ if (ctx.request.method.toUpperCase() === "OPTIONS") {
47
+ const response_headers = new Headers();
48
+ append_cors_headers(response_headers, allowed_origin, methods, headers, options.max_age);
49
+ return new Response(null, { status: 204, headers: response_headers });
50
+ }
51
+ const response = await next();
52
+ if (!allowed_origin) {
53
+ return response;
54
+ }
55
+ const response_headers = new Headers(response.headers);
56
+ append_cors_headers(response_headers, allowed_origin, methods, headers, options.max_age);
57
+ return clone_response_with_headers(response, response_headers);
58
+ };
59
+ }
60
+ /**
61
+ * 为响应增加基础安全头。
62
+ */
63
+ export function securityHeaders(options = {}) {
64
+ return async (_ctx, next) => {
65
+ const response = await next();
66
+ const headers = new Headers(response.headers);
67
+ if (options.content_type_options !== false) {
68
+ headers.set("X-Content-Type-Options", "nosniff");
69
+ }
70
+ headers.set("Referrer-Policy", options.referrer_policy ?? "no-referrer");
71
+ headers.set("X-Frame-Options", options.frame_options ?? "DENY");
72
+ headers.set("Permissions-Policy", options.permissions_policy ?? DEFAULT_PERMISSIONS_POLICY);
73
+ if (options.strict_transport_security) {
74
+ headers.set("Strict-Transport-Security", options.strict_transport_security);
75
+ }
76
+ if (options.content_security_policy) {
77
+ headers.set("Content-Security-Policy", options.content_security_policy);
78
+ }
79
+ return clone_response_with_headers(response, headers);
80
+ };
81
+ }
82
+ /**
83
+ * 为普通请求增加总耗时保护。
84
+ *
85
+ * 关键说明(中文)
86
+ * - 这里只能让 HTTP 层返回 504,不能保证取消下游 provider 外呼。
87
+ * - 流式接口建议通过 `exclude_paths` 排除。
88
+ */
89
+ export function requestTimeout(options) {
90
+ return async (ctx, next) => {
91
+ if (options.exclude_paths && match_path(ctx.request, options.exclude_paths)) {
92
+ return next();
93
+ }
94
+ let timer;
95
+ try {
96
+ return await Promise.race([
97
+ next(),
98
+ new Promise((resolve) => {
99
+ timer = setTimeout(() => {
100
+ resolve(json_error("Request timed out", "request_timeout", 504));
101
+ }, options.ms);
102
+ }),
103
+ ]);
104
+ }
105
+ finally {
106
+ if (timer)
107
+ clearTimeout(timer);
108
+ }
109
+ };
110
+ }
111
+ /**
112
+ * 基于可插拔 store 的粗粒度限流。
113
+ */
114
+ export function rateLimit(options) {
115
+ return async (ctx, next) => {
116
+ if (options.match && !await options.match(ctx)) {
117
+ return next();
118
+ }
119
+ const key = await options.key(ctx);
120
+ const result = await options.store.increment(key, options.window_ms);
121
+ const remaining = Math.max(options.max - result.count, 0);
122
+ if (result.count > options.max) {
123
+ const response = json_error("Too many requests", "rate_limited", 429);
124
+ set_rate_limit_headers(response.headers, options.max, remaining, result.reset_at);
125
+ return response;
126
+ }
127
+ const response = await next();
128
+ const headers = new Headers(response.headers);
129
+ set_rate_limit_headers(headers, options.max, remaining, result.reset_at);
130
+ return clone_response_with_headers(response, headers);
131
+ };
132
+ }
133
+ /**
134
+ * 创建进程内限流 store。
135
+ *
136
+ * 关键说明(中文)
137
+ * - 适合本地开发、Node 单进程或单 isolate 兜底。
138
+ * - 多实例 / 多区域生产限流应使用共享存储或平台能力。
139
+ */
140
+ export function memoryRateLimitStore() {
141
+ const windows = new Map();
142
+ return {
143
+ async increment(key, window_ms) {
144
+ const now = Date.now();
145
+ const current = windows.get(key);
146
+ if (!current || current.reset_at <= now) {
147
+ const next_window = { count: 1, reset_at: now + window_ms };
148
+ windows.set(key, next_window);
149
+ return next_window;
150
+ }
151
+ current.count += 1;
152
+ return current;
153
+ },
154
+ };
155
+ }
156
+ /**
157
+ * 从常见代理头读取客户端 IP。
158
+ */
159
+ export function clientIp(request) {
160
+ const cf_ip = request.headers.get("cf-connecting-ip");
161
+ if (cf_ip)
162
+ return cf_ip;
163
+ const forwarded_for = request.headers.get("x-forwarded-for");
164
+ if (forwarded_for) {
165
+ return forwarded_for.split(",")[0]?.trim() || "unknown";
166
+ }
167
+ return request.headers.get("x-real-ip") ?? "unknown";
168
+ }
169
+ function json_error(message, type, status) {
170
+ return Response.json({ error: { message, type } }, { status });
171
+ }
172
+ function resolve_allowed_origin(origin, origins) {
173
+ if (!origin)
174
+ return undefined;
175
+ if (origins === "*")
176
+ return "*";
177
+ return origins.includes(origin) ? origin : undefined;
178
+ }
179
+ function append_cors_headers(headers, allowed_origin, methods, request_headers, max_age) {
180
+ if (allowed_origin) {
181
+ headers.set("Access-Control-Allow-Origin", allowed_origin);
182
+ if (allowed_origin !== "*") {
183
+ headers.append("Vary", "Origin");
184
+ }
185
+ }
186
+ headers.set("Access-Control-Allow-Methods", methods.join(", "));
187
+ headers.set("Access-Control-Allow-Headers", request_headers.join(", "));
188
+ if (max_age !== undefined) {
189
+ headers.set("Access-Control-Max-Age", String(max_age));
190
+ }
191
+ }
192
+ function set_rate_limit_headers(headers, limit, remaining, reset_at) {
193
+ const reset_seconds = Math.ceil(reset_at / 1000);
194
+ const retry_after = Math.max(Math.ceil((reset_at - Date.now()) / 1000), 0);
195
+ headers.set("Retry-After", String(retry_after));
196
+ headers.set("X-RateLimit-Limit", String(limit));
197
+ headers.set("X-RateLimit-Remaining", String(remaining));
198
+ headers.set("X-RateLimit-Reset", String(reset_seconds));
199
+ }
200
+ function clone_response_with_headers(response, headers) {
201
+ return new Response(response.body, {
202
+ status: response.status,
203
+ statusText: response.statusText,
204
+ headers,
205
+ });
206
+ }
207
+ function match_path(request, patterns) {
208
+ if (!patterns || patterns.length === 0) {
209
+ return true;
210
+ }
211
+ const pathname = new URL(request.url).pathname;
212
+ return patterns.some((pattern) => {
213
+ if (pattern.endsWith("*")) {
214
+ return pathname.startsWith(pattern.slice(0, -1));
215
+ }
216
+ return pathname === pattern;
217
+ });
218
+ }
219
+ //# sourceMappingURL=middlewares.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"middlewares.js","sourceRoot":"","sources":["../../src/federation/middlewares.ts"],"names":[],"mappings":"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"}
@@ -5,6 +5,28 @@
5
5
  */
6
6
  import type { Database } from "../store/db.js";
7
7
  import type { FederationStorage } from "./storage.js";
8
+ import type { RuntimeUser } from "./auth/types.js";
9
+ /**
10
+ * Federation 进程内可信身份。
11
+ *
12
+ * 关键点(中文)
13
+ * - 只允许同进程调用 `Federation.fetch()` 时传入。
14
+ * - 不能通过 HTTP header、query 或 body 构造,避免绕过公网 token 鉴权。
15
+ */
16
+ export type FederationTrustedIdentity = {
17
+ /** 以管理端身份访问当前 Federation。 */
18
+ level: "admin";
19
+ } | {
20
+ /** 以终端用户身份访问当前 Federation。 */
21
+ level: "user";
22
+ /** 当前用户信息,会注入到 `ctx.user`。 */
23
+ user: RuntimeUser;
24
+ /** 当前用户所属 City。 */
25
+ city: {
26
+ city_id: string;
27
+ status: string;
28
+ };
29
+ };
8
30
  /**
9
31
  * 单次请求的运行时执行上下文。
10
32
  */
@@ -17,11 +39,19 @@ export interface FederationRequestExecutionContext {
17
39
  waitUntil(promise: Promise<unknown>): void;
18
40
  }
19
41
  /**
20
- * Federation.handleRequest 的可选参数。
42
+ * Federation.fetch 的可选参数。
21
43
  */
22
- export interface FederationHandleRequestOptions {
44
+ export interface FederationFetchOptions {
23
45
  /** 单次请求的运行时执行上下文。 */
24
46
  execution?: FederationRequestExecutionContext;
47
+ /**
48
+ * 进程内可信身份。
49
+ *
50
+ * 关键点(中文)
51
+ * - 供本机 RPC / 嵌入式 server 调用使用。
52
+ * - HTTP 入口不会从请求内容自动生成该身份。
53
+ */
54
+ trusted_identity?: FederationTrustedIdentity;
25
55
  }
26
56
  /**
27
57
  * City 健康检查结果。
@@ -1 +1 @@
1
- {"version":3,"file":"types.d.ts","sourceRoot":"","sources":["../../src/federation/types.ts"],"names":[],"mappings":"AAAA;;;;GAIG;AAEH,OAAO,KAAK,EAAE,QAAQ,EAAE,MAAM,gBAAgB,CAAC;AAC/C,OAAO,KAAK,EAAE,iBAAiB,EAAE,MAAM,cAAc,CAAC;AAEtD;;GAEG;AACH,MAAM,WAAW,iCAAiC;IAChD;;;;OAIG;IACH,SAAS,CAAC,OAAO,EAAE,OAAO,CAAC,OAAO,CAAC,GAAG,IAAI,CAAC;CAC5C;AAED;;GAEG;AACH,MAAM,WAAW,8BAA8B;IAC7C,qBAAqB;IACrB,SAAS,CAAC,EAAE,iCAAiC,CAAC;CAC/C;AAED;;GAEG;AACH,MAAM,WAAW,sBAAsB;IACrC,iCAAiC;IACjC,EAAE,EAAE,OAAO,CAAC;IACZ,2BAA2B;IAC3B,IAAI,EAAE,MAAM,CAAC;IACb,eAAe;IACf,UAAU,EAAE,MAAM,CAAC;IACnB,0BAA0B;IAC1B,QAAQ,EAAE,MAAM,EAAE,CAAC;IACnB,yBAAyB;IACzB,YAAY,EAAE;QAAE,EAAE,EAAE,MAAM,CAAC;QAAC,IAAI,EAAE,MAAM,CAAA;KAAE,EAAE,CAAC;CAC9C;AAED;;;;;;GAMG;AACH,MAAM,WAAW,iBAAiB;IAChC;;;;;;OAMG;IACH,EAAE,EAAE,QAAQ,GAAG;QAAE,OAAO,CAAC,EAAE,OAAO,CAAC;QAAC,OAAO,CAAC,EAAE,OAAO,CAAA;KAAE,CAAC;IACxD;;;;;;OAMG;IACH,OAAO,CAAC,EAAE,iBAAiB,CAAC;CAC7B"}
1
+ {"version":3,"file":"types.d.ts","sourceRoot":"","sources":["../../src/federation/types.ts"],"names":[],"mappings":"AAAA;;;;GAIG;AAEH,OAAO,KAAK,EAAE,QAAQ,EAAE,MAAM,gBAAgB,CAAC;AAC/C,OAAO,KAAK,EAAE,iBAAiB,EAAE,MAAM,cAAc,CAAC;AACtD,OAAO,KAAK,EAAE,WAAW,EAAE,MAAM,iBAAiB,CAAC;AAEnD;;;;;;GAMG;AACH,MAAM,MAAM,yBAAyB,GACjC;IACE,6BAA6B;IAC7B,KAAK,EAAE,OAAO,CAAC;CAChB,GACD;IACE,8BAA8B;IAC9B,KAAK,EAAE,MAAM,CAAC;IACd,8BAA8B;IAC9B,IAAI,EAAE,WAAW,CAAC;IAClB,mBAAmB;IACnB,IAAI,EAAE;QAAE,OAAO,EAAE,MAAM,CAAC;QAAC,MAAM,EAAE,MAAM,CAAA;KAAE,CAAC;CAC3C,CAAC;AAEN;;GAEG;AACH,MAAM,WAAW,iCAAiC;IAChD;;;;OAIG;IACH,SAAS,CAAC,OAAO,EAAE,OAAO,CAAC,OAAO,CAAC,GAAG,IAAI,CAAC;CAC5C;AAED;;GAEG;AACH,MAAM,WAAW,sBAAsB;IACrC,qBAAqB;IACrB,SAAS,CAAC,EAAE,iCAAiC,CAAC;IAC9C;;;;;;OAMG;IACH,gBAAgB,CAAC,EAAE,yBAAyB,CAAC;CAC9C;AAED;;GAEG;AACH,MAAM,WAAW,sBAAsB;IACrC,iCAAiC;IACjC,EAAE,EAAE,OAAO,CAAC;IACZ,2BAA2B;IAC3B,IAAI,EAAE,MAAM,CAAC;IACb,eAAe;IACf,UAAU,EAAE,MAAM,CAAC;IACnB,0BAA0B;IAC1B,QAAQ,EAAE,MAAM,EAAE,CAAC;IACnB,yBAAyB;IACzB,YAAY,EAAE;QAAE,EAAE,EAAE,MAAM,CAAC;QAAC,IAAI,EAAE,MAAM,CAAA;KAAE,EAAE,CAAC;CAC9C;AAED;;;;;;GAMG;AACH,MAAM,WAAW,iBAAiB;IAChC;;;;;;OAMG;IACH,EAAE,EAAE,QAAQ,GAAG;QAAE,OAAO,CAAC,EAAE,OAAO,CAAC;QAAC,OAAO,CAAC,EAAE,OAAO,CAAA;KAAE,CAAC;IACxD;;;;;;OAMG;IACH,OAAO,CAAC,EAAE,iBAAiB,CAAC;CAC7B"}
package/bin/index.d.ts CHANGED
@@ -7,11 +7,13 @@
7
7
  */
8
8
  export { Federation } from "./federation/federation.js";
9
9
  export type { FederationOptions, FederationHealthStatus } from "./federation/types.js";
10
- export type { FederationHandleRequestOptions, FederationRequestExecutionContext } from "./federation/types.js";
10
+ export type { FederationFetchOptions, FederationRequestExecutionContext } from "./federation/types.js";
11
11
  export type { Runtime, EnvProvider, BuiltinTables, TableDef } from "./federation/runtime.js";
12
12
  export type { CityQueueAdapter, CityQueueMessage } from "./federation/queue.js";
13
13
  export { R2Storage } from "./federation/storage.js";
14
14
  export type { FederationStorage, FederationStorageStoreInput, FederationStorageStoreResult, R2BucketLike, R2StorageOptions, } from "./federation/storage.js";
15
+ export { bodyLimit, clientIp, cors, memoryRateLimitStore, rateLimit, requestTimeout, securityHeaders, } from "./federation/middlewares.js";
16
+ export type { BodyLimitOptions, CorsOptions, FederationMiddleware, FederationMiddlewareContext, FederationMiddlewareFederationRef, FederationMiddlewareNext, RateLimitOptions, RateLimitStore, RateLimitStoreIncrementResult, RequestTimeoutOptions, SecurityHeadersOptions, } from "./types/FederationMiddleware.js";
15
17
  export { Service } from "./service/service.js";
16
18
  export { InstallableService } from "./service/installable-service.js";
17
19
  export { Action } from "./service/action.js";
@@ -1 +1 @@
1
- {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"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"}
package/bin/index.js CHANGED
@@ -10,6 +10,7 @@
10
10
  // ===========================================================================
11
11
  export { Federation } from "./federation/federation.js";
12
12
  export { R2Storage } from "./federation/storage.js";
13
+ export { bodyLimit, clientIp, cors, memoryRateLimitStore, rateLimit, requestTimeout, securityHeaders, } from "./federation/middlewares.js";
13
14
  // ===========================================================================
14
15
  // 场景 2:注册 Service / InstallableService / AI 模型
15
16
  // ===========================================================================
package/bin/index.js.map CHANGED
@@ -1 +1 @@
1
- {"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAAA;;;;;;GAMG;AAEH,8EAA8E;AAC9E,wBAAwB;AACxB,8EAA8E;AAE9E,OAAO,EAAE,UAAU,EAAE,MAAM,4BAA4B,CAAC;AAKxD,OAAO,EAAE,SAAS,EAAE,MAAM,yBAAyB,CAAC;AASpD,8EAA8E;AAC9E,+CAA+C;AAC/C,8EAA8E;AAE9E,OAAO,EAAE,OAAO,EAAE,MAAM,sBAAsB,CAAC;AAC/C,OAAO,EAAE,kBAAkB,EAAE,MAAM,kCAAkC,CAAC;AACtE,OAAO,EAAE,MAAM,EAAE,MAAM,qBAAqB,CAAC;AAmC7C,OAAO,EAAE,SAAS,EAAE,MAAM,4BAA4B,CAAC;AACvD,OAAO,EAAE,QAAQ,EAAE,MAAM,0BAA0B,CAAC;AAcpD,OAAO,EACL,qBAAqB,EACrB,iBAAiB,EACjB,YAAY,EACZ,QAAQ,EACR,gBAAgB,EAChB,6BAA6B,EAC7B,qCAAqC,EACrC,gBAAgB,EAChB,gBAAgB,EAChB,4BAA4B,EAC5B,eAAe,EACf,UAAU,EACV,oBAAoB,EACpB,cAAc,EACd,QAAQ,EACR,iBAAiB,GAClB,MAAM,yBAAyB,CAAC;AAiBjC,8EAA8E;AAC9E,mBAAmB;AACnB,8EAA8E;AAE9E,OAAO,EAAE,WAAW,EAAE,MAAM,mCAAmC,CAAC;AAShE,8EAA8E;AAC9E,0BAA0B;AAC1B,8EAA8E;AAE9E,OAAO,EAAE,UAAU,EAAE,MAAM,8BAA8B,CAAC;AAQ1D,OAAO,EAAE,QAAQ,EAAE,MAAM,4BAA4B,CAAC;AAOtD,OAAO,EAAE,UAAU,EAAE,MAAM,eAAe,CAAC;AAqB3C,OAAO,EAAE,IAAI,EAAE,MAAM,kBAAkB,CAAC;AAUxC,OAAO,EAAE,SAAS,EAAE,YAAY,EAAE,WAAW,EAAE,MAAM,4BAA4B,CAAC;AAClF,OAAO,EAAE,cAAc,EAAE,mBAAmB,EAAE,MAAM,iCAAiC,CAAC;AACtF,OAAO,EAAE,aAAa,EAAE,YAAY,EAAE,MAAM,2BAA2B,CAAC;AAyCxE,OAAO,EAAE,cAAc,EAAE,wBAAwB,EAAE,MAAM,iCAAiC,CAAC;AAC3F,OAAO,EAAE,aAAa,EAAE,MAAM,gCAAgC,CAAC;AAC/D,OAAO,EAAE,UAAU,EAAE,MAAM,6BAA6B,CAAC;AA8BzD,8EAA8E;AAC9E,kBAAkB;AAClB,8EAA8E;AAE9E,OAAO,EAAE,SAAS,EAAE,KAAK,EAAE,MAAM,yBAAyB,CAAC;AAC3D,OAAO,EAAE,eAAe,EAAE,WAAW,EAAE,MAAM,+BAA+B,CAAC;AAE7E,8EAA8E;AAC9E,YAAY;AACZ,8EAA8E;AAE9E,OAAO,EACL,YAAY,EACZ,eAAe,EACf,eAAe,EACf,oBAAoB,EACpB,oBAAoB,EACpB,oBAAoB,EACpB,SAAS,EACT,eAAe,EACf,WAAW,EACX,kBAAkB,GACnB,MAAM,oBAAoB,CAAC"}
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAAA;;;;;;GAMG;AAEH,8EAA8E;AAC9E,wBAAwB;AACxB,8EAA8E;AAE9E,OAAO,EAAE,UAAU,EAAE,MAAM,4BAA4B,CAAC;AAKxD,OAAO,EAAE,SAAS,EAAE,MAAM,yBAAyB,CAAC;AAQpD,OAAO,EACL,SAAS,EACT,QAAQ,EACR,IAAI,EACJ,oBAAoB,EACpB,SAAS,EACT,cAAc,EACd,eAAe,GAChB,MAAM,6BAA6B,CAAC;AAerC,8EAA8E;AAC9E,+CAA+C;AAC/C,8EAA8E;AAE9E,OAAO,EAAE,OAAO,EAAE,MAAM,sBAAsB,CAAC;AAC/C,OAAO,EAAE,kBAAkB,EAAE,MAAM,kCAAkC,CAAC;AACtE,OAAO,EAAE,MAAM,EAAE,MAAM,qBAAqB,CAAC;AAmC7C,OAAO,EAAE,SAAS,EAAE,MAAM,4BAA4B,CAAC;AACvD,OAAO,EAAE,QAAQ,EAAE,MAAM,0BAA0B,CAAC;AAcpD,OAAO,EACL,qBAAqB,EACrB,iBAAiB,EACjB,YAAY,EACZ,QAAQ,EACR,gBAAgB,EAChB,6BAA6B,EAC7B,qCAAqC,EACrC,gBAAgB,EAChB,gBAAgB,EAChB,4BAA4B,EAC5B,eAAe,EACf,UAAU,EACV,oBAAoB,EACpB,cAAc,EACd,QAAQ,EACR,iBAAiB,GAClB,MAAM,yBAAyB,CAAC;AAiBjC,8EAA8E;AAC9E,mBAAmB;AACnB,8EAA8E;AAE9E,OAAO,EAAE,WAAW,EAAE,MAAM,mCAAmC,CAAC;AAShE,8EAA8E;AAC9E,0BAA0B;AAC1B,8EAA8E;AAE9E,OAAO,EAAE,UAAU,EAAE,MAAM,8BAA8B,CAAC;AAQ1D,OAAO,EAAE,QAAQ,EAAE,MAAM,4BAA4B,CAAC;AAOtD,OAAO,EAAE,UAAU,EAAE,MAAM,eAAe,CAAC;AAqB3C,OAAO,EAAE,IAAI,EAAE,MAAM,kBAAkB,CAAC;AAUxC,OAAO,EAAE,SAAS,EAAE,YAAY,EAAE,WAAW,EAAE,MAAM,4BAA4B,CAAC;AAClF,OAAO,EAAE,cAAc,EAAE,mBAAmB,EAAE,MAAM,iCAAiC,CAAC;AACtF,OAAO,EAAE,aAAa,EAAE,YAAY,EAAE,MAAM,2BAA2B,CAAC;AAyCxE,OAAO,EAAE,cAAc,EAAE,wBAAwB,EAAE,MAAM,iCAAiC,CAAC;AAC3F,OAAO,EAAE,aAAa,EAAE,MAAM,gCAAgC,CAAC;AAC/D,OAAO,EAAE,UAAU,EAAE,MAAM,6BAA6B,CAAC;AA8BzD,8EAA8E;AAC9E,kBAAkB;AAClB,8EAA8E;AAE9E,OAAO,EAAE,SAAS,EAAE,KAAK,EAAE,MAAM,yBAAyB,CAAC;AAC3D,OAAO,EAAE,eAAe,EAAE,WAAW,EAAE,MAAM,+BAA+B,CAAC;AAE7E,8EAA8E;AAC9E,YAAY;AACZ,8EAA8E;AAE9E,OAAO,EACL,YAAY,EACZ,eAAe,EACf,eAAe,EACf,oBAAoB,EACpB,oBAAoB,EACpB,oBAAoB,EACpB,SAAS,EACT,eAAe,EACf,WAAW,EACX,kBAAkB,GACnB,MAAM,oBAAoB,CAAC"}
@@ -13,7 +13,7 @@ export declare class AdminPactAccess {
13
13
  private readonly base_url;
14
14
  readonly city_id: string;
15
15
  private readonly secret;
16
- private readonly fetchImpl;
16
+ private readonly requester;
17
17
  constructor(options: AdminPactAccessOptions);
18
18
  /** 获取 Service 调用器(与 User City 共用同一路由) */
19
19
  service(name: string): ServiceClient;
@@ -1 +1 @@
1
- {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../src/pact/admin/index.ts"],"names":[],"mappings":"AAAA;;GAEG;AAEH,OAAO,EAAE,aAAa,EAAE,MAAM,uBAAuB,CAAC;AACtD,OAAO,EAAE,cAAc,EAAE,MAAM,6BAA6B,CAAC;AAC7D,OAAO,EAAE,UAAU,EAAE,MAAM,yBAAyB,CAAC;AACrD,OAAO,EAAE,aAAa,EAAE,MAAM,4BAA4B,CAAC;AAU3D,OAAO,KAAK,EACV,sBAAsB,EACtB,gBAAgB,EAChB,mBAAmB,EACpB,MAAM,YAAY,CAAC;AAEpB,qBAAa,eAAe;IAC1B,QAAQ,CAAC,OAAO,EAAE,cAAc,CAAC;IACjC,QAAQ,CAAC,MAAM,EAAE,aAAa,CAAC;IAC/B,QAAQ,CAAC,GAAG,EAAE,UAAU,CAAC;IAEzB,OAAO,CAAC,QAAQ,CAAC,QAAQ,CAAS;IAClC,QAAQ,CAAC,OAAO,EAAE,MAAM,CAAC;IACzB,OAAO,CAAC,QAAQ,CAAC,MAAM,CAAS;IAChC,OAAO,CAAC,QAAQ,CAAC,SAAS,CAAY;gBAE1B,OAAO,EAAE,sBAAsB;IAmB3C,yCAAyC;IACzC,OAAO,CAAC,IAAI,EAAE,MAAM,GAAG,aAAa;IAUpC,sCAAsC;IAChC,YAAY,IAAI,OAAO,CAAC,mBAAmB,EAAE,CAAC;IAOpD,iDAAiD;IAC3C,UAAU,IAAI,OAAO,CAAC,gBAAgB,EAAE,CAAC;IAO/C,wBAAwB;IAClB,WAAW,IAAI,OAAO,CAAC,MAAM,CAAC;IAIpC,OAAO,CAAC,IAAI;IAQZ,OAAO,CAAC,IAAI;IASZ;;;;OAIG;IACG,UAAU,CAAC,KAAK,EAAE;QACtB,OAAO,EAAE,MAAM,CAAC;QAChB,QAAQ,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAAC;QACnC,GAAG,CAAC,EAAE,MAAM,GAAG,MAAM,CAAC;KACvB,GAAG,OAAO,CAAC;QAAE,UAAU,EAAE,MAAM,CAAC;QAAC,OAAO,EAAE,MAAM,CAAC;QAAC,OAAO,EAAE,MAAM,CAAC;QAAC,UAAU,CAAC,EAAE,MAAM,CAAA;KAAE,CAAC;IAO1F;;;;;;OAMG;IACH,OAAO,CAAC,QAAQ;CAUjB"}
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../src/pact/admin/index.ts"],"names":[],"mappings":"AAAA;;GAEG;AAEH,OAAO,EAAE,aAAa,EAAE,MAAM,uBAAuB,CAAC;AACtD,OAAO,EAAE,cAAc,EAAE,MAAM,6BAA6B,CAAC;AAC7D,OAAO,EAAE,UAAU,EAAE,MAAM,yBAAyB,CAAC;AACrD,OAAO,EAAE,aAAa,EAAE,MAAM,4BAA4B,CAAC;AAW3D,OAAO,KAAK,EACV,sBAAsB,EACtB,gBAAgB,EAChB,mBAAmB,EACpB,MAAM,YAAY,CAAC;AAEpB,qBAAa,eAAe;IAC1B,QAAQ,CAAC,OAAO,EAAE,cAAc,CAAC;IACjC,QAAQ,CAAC,MAAM,EAAE,aAAa,CAAC;IAC/B,QAAQ,CAAC,GAAG,EAAE,UAAU,CAAC;IAEzB,OAAO,CAAC,QAAQ,CAAC,QAAQ,CAAS;IAClC,QAAQ,CAAC,OAAO,EAAE,MAAM,CAAC;IACzB,OAAO,CAAC,QAAQ,CAAC,MAAM,CAAqB;IAC5C,OAAO,CAAC,QAAQ,CAAC,SAAS,CAAgB;gBAE9B,OAAO,EAAE,sBAAsB;IA8B3C,yCAAyC;IACzC,OAAO,CAAC,IAAI,EAAE,MAAM,GAAG,aAAa;IAUpC,sCAAsC;IAChC,YAAY,IAAI,OAAO,CAAC,mBAAmB,EAAE,CAAC;IAOpD,iDAAiD;IAC3C,UAAU,IAAI,OAAO,CAAC,gBAAgB,EAAE,CAAC;IAO/C,wBAAwB;IAClB,WAAW,IAAI,OAAO,CAAC,MAAM,CAAC;IAIpC,OAAO,CAAC,IAAI;IAIZ,OAAO,CAAC,IAAI;IAKZ;;;;OAIG;IACG,UAAU,CAAC,KAAK,EAAE;QACtB,OAAO,EAAE,MAAM,CAAC;QAChB,QAAQ,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAAC;QACnC,GAAG,CAAC,EAAE,MAAM,GAAG,MAAM,CAAC;KACvB,GAAG,OAAO,CAAC;QAAE,UAAU,EAAE,MAAM,CAAC;QAAC,OAAO,EAAE,MAAM,CAAC;QAAC,OAAO,EAAE,MAAM,CAAC;QAAC,UAAU,CAAC,EAAE,MAAM,CAAA;KAAE,CAAC;IAO1F;;;;;;OAMG;IACH,OAAO,CAAC,QAAQ;CAWjB"}
@@ -5,7 +5,8 @@ import { ServiceClient } from "../invoker/invoker.js";
5
5
  import { BalanceInvoker } from "../invoker/balance/index.js";
6
6
  import { EnvInvoker } from "../invoker/env/index.js";
7
7
  import { CitiesInvoker } from "../invoker/cities/index.js";
8
- import { defaultFetch, normalizeBaseURL, requestJSON, requestText, requiredString, } from "../http.js";
8
+ import { requiredString, } from "../http.js";
9
+ import { create_http_requester, create_rpc_requester, is_rpc_url, } from "../requester.js";
9
10
  export class AdminPactAccess {
10
11
  balance;
11
12
  cities;
@@ -13,15 +14,26 @@ export class AdminPactAccess {
13
14
  base_url;
14
15
  city_id;
15
16
  secret;
16
- fetchImpl;
17
+ requester;
17
18
  constructor(options) {
18
19
  if (!options || typeof options !== "object") {
19
20
  throw new TypeError("Admin City options are required");
20
21
  }
21
- this.base_url = normalizeBaseURL(options.base_url, "base_url");
22
+ this.base_url = requiredString(options.base_url, "base_url").replace(/\/+$/, "");
22
23
  this.city_id = requiredString(options.city_id, "city_id");
23
- this.secret = requiredString(options.admin_secret_key ?? process.env.DOWNCITY_FEDERATION_ADMIN_SECRET_KEY, "admin_secret_key");
24
- this.fetchImpl = options.fetch ?? defaultFetch();
24
+ this.secret = is_rpc_url(this.base_url)
25
+ ? undefined
26
+ : requiredString(options.admin_secret_key ?? process.env.DOWNCITY_FEDERATION_ADMIN_SECRET_KEY, "admin_secret_key");
27
+ this.requester = is_rpc_url(this.base_url)
28
+ ? create_rpc_requester({
29
+ base_url: this.base_url,
30
+ identity: { role: "admin" },
31
+ })
32
+ : create_http_requester({
33
+ base_url: this.base_url,
34
+ fetch: options.fetch,
35
+ with_auth: (init) => this.withAuth(init),
36
+ });
25
37
  const req = (path, init) => this.json(path, init);
26
38
  this.balance = new BalanceInvoker({ requestJSON: req });
27
39
  this.cities = new CitiesInvoker({ requestJSON: req });
@@ -53,18 +65,10 @@ export class AdminPactAccess {
53
65
  return this.text("/v1/federation/instruction", { method: "GET" });
54
66
  }
55
67
  json(path, init) {
56
- return requestJSON({
57
- fetch: this.fetchImpl,
58
- url: `${this.base_url}${path}`,
59
- init: this.withAuth(init),
60
- });
68
+ return this.requester.json(path, init);
61
69
  }
62
70
  text(path, init) {
63
- return requestText({
64
- fetch: this.fetchImpl,
65
- url: `${this.base_url}${path}`,
66
- init: this.withAuth(init),
67
- });
71
+ return this.requester.text(path, init);
68
72
  }
69
73
  /**
70
74
  * 为当前 City 签发 user token。
@@ -85,6 +89,8 @@ export class AdminPactAccess {
85
89
  * - 默认仍然补 `content-type: application/json`,便于 POST action 统一行为
86
90
  */
87
91
  withAuth(init) {
92
+ if (!this.secret)
93
+ return init;
88
94
  return {
89
95
  ...init,
90
96
  headers: {
@@ -1 +1 @@
1
- {"version":3,"file":"index.js","sourceRoot":"","sources":["../../../src/pact/admin/index.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../../../src/pact/admin/index.ts"],"names":[],"mappings":"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"}
@@ -6,7 +6,7 @@ import type { CityModelDescriptor } from "@downcity/type";
6
6
  import type { UserServiceSummary } from "../user/types.js";
7
7
  /** Admin City 内部访问层构造参数 */
8
8
  export interface AdminPactAccessOptions {
9
- /** City 管理端 server URL */
9
+ /** City 管理端入口地址,支持 `http(s)://` 与本机 `rpc://`。 */
10
10
  base_url: string;
11
11
  /**
12
12
  * 当前管理的 City ID。
@@ -14,7 +14,7 @@ export interface AdminPactAccessOptions {
14
14
  * 传入后 token 签发等服务会自动使用该 ID,调用方无需再传 city_id。
15
15
  */
16
16
  city_id: string;
17
- /** 管理密钥 */
17
+ /** 管理密钥;使用本机 `rpc://` 时不需要传入。 */
18
18
  admin_secret_key?: string;
19
19
  /** 自定义 fetch 实现 */
20
20
  fetch?: FetchLike;
@@ -1 +1 @@
1
- {"version":3,"file":"types.d.ts","sourceRoot":"","sources":["../../../src/pact/admin/types.ts"],"names":[],"mappings":"AAAA;;GAEG;AAEH,OAAO,KAAK,EAAE,SAAS,EAAE,MAAM,YAAY,CAAC;AAC5C,OAAO,KAAK,EAAE,mBAAmB,EAAE,MAAM,gBAAgB,CAAC;AAC1D,OAAO,KAAK,EAAE,kBAAkB,EAAE,MAAM,kBAAkB,CAAC;AAE3D,2BAA2B;AAC3B,MAAM,WAAW,sBAAsB;IACrC,0BAA0B;IAC1B,QAAQ,EAAE,MAAM,CAAC;IAEjB;;;;OAIG;IACH,OAAO,EAAE,MAAM,CAAC;IAEhB,WAAW;IACX,gBAAgB,CAAC,EAAE,MAAM,CAAC;IAC1B,mBAAmB;IACnB,KAAK,CAAC,EAAE,SAAS,CAAC;CACnB;AAED;;;;;;GAMG;AACH,MAAM,MAAM,mBAAmB,GAAG,kBAAkB,CAAC;AAErD;;;;;GAKG;AACH,MAAM,MAAM,gBAAgB,GAAG,mBAAmB,CAAC;AAEnD;;GAEG;AACH,MAAM,WAAW,sBAAsB;IACrC;;OAEG;IACH,IAAI,EAAE,MAAM,CAAC;CACd"}
1
+ {"version":3,"file":"types.d.ts","sourceRoot":"","sources":["../../../src/pact/admin/types.ts"],"names":[],"mappings":"AAAA;;GAEG;AAEH,OAAO,KAAK,EAAE,SAAS,EAAE,MAAM,YAAY,CAAC;AAC5C,OAAO,KAAK,EAAE,mBAAmB,EAAE,MAAM,gBAAgB,CAAC;AAC1D,OAAO,KAAK,EAAE,kBAAkB,EAAE,MAAM,kBAAkB,CAAC;AAE3D,2BAA2B;AAC3B,MAAM,WAAW,sBAAsB;IACrC,iDAAiD;IACjD,QAAQ,EAAE,MAAM,CAAC;IAEjB;;;;OAIG;IACH,OAAO,EAAE,MAAM,CAAC;IAEhB,iCAAiC;IACjC,gBAAgB,CAAC,EAAE,MAAM,CAAC;IAC1B,mBAAmB;IACnB,KAAK,CAAC,EAAE,SAAS,CAAC;CACnB;AAED;;;;;;GAMG;AACH,MAAM,MAAM,mBAAmB,GAAG,kBAAkB,CAAC;AAErD;;;;;GAKG;AACH,MAAM,MAAM,gBAAgB,GAAG,mBAAmB,CAAC;AAEnD;;GAEG;AACH,MAAM,WAAW,sBAAsB;IACrC;;OAEG;IACH,IAAI,EAAE,MAAM,CAAC;CACd"}
@@ -0,0 +1,47 @@
1
+ /**
2
+ * City Pact 请求抽象。
3
+ *
4
+ * 关键点(中文)
5
+ * - 上层 Admin/User invoker 只依赖 requester,不关心底层是 HTTP 还是本机 RPC。
6
+ * - HTTP 仍然使用 bearer token;RPC 通过本机可信身份进入 Federation。
7
+ */
8
+ import type { FederationRpcIdentity } from "@downcity/type";
9
+ import { type FetchLike, type FetchResponseLike, type RequestInitLike } from "./http.js";
10
+ /**
11
+ * City 请求器。
12
+ */
13
+ export interface CityRequester {
14
+ /** 请求入口根地址。 */
15
+ readonly base_url: string;
16
+ /** 请求 JSON 并解析。 */
17
+ json<T>(path: string, init: RequestInitLike): Promise<T>;
18
+ /** 请求文本。 */
19
+ text(path: string, init: RequestInitLike): Promise<string>;
20
+ /** 请求原始响应。 */
21
+ raw(path: string, init: RequestInitLike): Promise<FetchResponseLike>;
22
+ }
23
+ /**
24
+ * 创建 HTTP 请求器。
25
+ */
26
+ export declare function create_http_requester(options: {
27
+ /** Federation HTTP 入口地址。 */
28
+ base_url: string;
29
+ /** 自定义 fetch 实现。 */
30
+ fetch?: FetchLike;
31
+ /** 请求头增强函数。 */
32
+ with_auth(init: RequestInitLike): RequestInitLike;
33
+ }): CityRequester;
34
+ /**
35
+ * 创建 Federation RPC 请求器。
36
+ */
37
+ export declare function create_rpc_requester(options: {
38
+ /** Federation RPC 入口地址。 */
39
+ base_url: string;
40
+ /** 本机可信身份。 */
41
+ identity: FederationRpcIdentity;
42
+ }): CityRequester;
43
+ /**
44
+ * 判断 URL 是否为本机 Federation RPC。
45
+ */
46
+ export declare function is_rpc_url(value: string): boolean;
47
+ //# sourceMappingURL=requester.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"requester.d.ts","sourceRoot":"","sources":["../../src/pact/requester.ts"],"names":[],"mappings":"AAAA;;;;;;GAMG;AAEH,OAAO,KAAK,EACV,qBAAqB,EAEtB,MAAM,gBAAgB,CAAC;AACxB,OAAO,EAML,KAAK,SAAS,EACd,KAAK,iBAAiB,EACtB,KAAK,eAAe,EACrB,MAAM,WAAW,CAAC;AAGnB;;GAEG;AACH,MAAM,WAAW,aAAa;IAC5B,eAAe;IACf,QAAQ,CAAC,QAAQ,EAAE,MAAM,CAAC;IAC1B,mBAAmB;IACnB,IAAI,CAAC,CAAC,EAAE,IAAI,EAAE,MAAM,EAAE,IAAI,EAAE,eAAe,GAAG,OAAO,CAAC,CAAC,CAAC,CAAC;IACzD,YAAY;IACZ,IAAI,CAAC,IAAI,EAAE,MAAM,EAAE,IAAI,EAAE,eAAe,GAAG,OAAO,CAAC,MAAM,CAAC,CAAC;IAC3D,cAAc;IACd,GAAG,CAAC,IAAI,EAAE,MAAM,EAAE,IAAI,EAAE,eAAe,GAAG,OAAO,CAAC,iBAAiB,CAAC,CAAC;CACtE;AAED;;GAEG;AACH,wBAAgB,qBAAqB,CAAC,OAAO,EAAE;IAC7C,4BAA4B;IAC5B,QAAQ,EAAE,MAAM,CAAC;IACjB,oBAAoB;IACpB,KAAK,CAAC,EAAE,SAAS,CAAC;IAClB,eAAe;IACf,SAAS,CAAC,IAAI,EAAE,eAAe,GAAG,eAAe,CAAC;CACnD,GAAG,aAAa,CAqBhB;AAED;;GAEG;AACH,wBAAgB,oBAAoB,CAAC,OAAO,EAAE;IAC5C,2BAA2B;IAC3B,QAAQ,EAAE,MAAM,CAAC;IACjB,cAAc;IACd,QAAQ,EAAE,qBAAqB,CAAC;CACjC,GAAG,aAAa,CAsBhB;AAED;;GAEG;AACH,wBAAgB,UAAU,CAAC,KAAK,EAAE,MAAM,GAAG,OAAO,CAEjD"}
@@ -0,0 +1,93 @@
1
+ /**
2
+ * City Pact 请求抽象。
3
+ *
4
+ * 关键点(中文)
5
+ * - 上层 Admin/User invoker 只依赖 requester,不关心底层是 HTTP 还是本机 RPC。
6
+ * - HTTP 仍然使用 bearer token;RPC 通过本机可信身份进入 Federation。
7
+ */
8
+ import { defaultFetch, normalizeBaseURL, requestJSON, requestRaw, requestText, } from "./http.js";
9
+ import { request_federation_rpc } from "./rpc-client.js";
10
+ /**
11
+ * 创建 HTTP 请求器。
12
+ */
13
+ export function create_http_requester(options) {
14
+ const base_url = normalizeBaseURL(options.base_url, "base_url");
15
+ const fetch_impl = options.fetch ?? defaultFetch();
16
+ return {
17
+ base_url,
18
+ json: (path, init) => requestJSON({
19
+ fetch: fetch_impl,
20
+ url: `${base_url}${path}`,
21
+ init: options.with_auth(init),
22
+ }),
23
+ text: (path, init) => requestText({
24
+ fetch: fetch_impl,
25
+ url: `${base_url}${path}`,
26
+ init: options.with_auth(init),
27
+ }),
28
+ raw: (path, init) => requestRaw({
29
+ fetch: fetch_impl,
30
+ url: `${base_url}${path}`,
31
+ init: options.with_auth(init),
32
+ }),
33
+ };
34
+ }
35
+ /**
36
+ * 创建 Federation RPC 请求器。
37
+ */
38
+ export function create_rpc_requester(options) {
39
+ const base_url = normalizeBaseURL(options.base_url, "base_url");
40
+ const request = async (path, init) => {
41
+ const response = await request_federation_rpc({
42
+ url: base_url,
43
+ identity: options.identity,
44
+ method: init.method ?? "GET",
45
+ path,
46
+ headers: init.headers,
47
+ body: init.body,
48
+ });
49
+ if (response.status < 200 || response.status >= 300) {
50
+ throw rpc_error(response);
51
+ }
52
+ return response;
53
+ };
54
+ return {
55
+ base_url,
56
+ json: async (path, init) => JSON.parse((await request(path, init)).body),
57
+ text: async (path, init) => (await request(path, init)).body,
58
+ raw: async (path, init) => response_like(await request(path, init)),
59
+ };
60
+ }
61
+ /**
62
+ * 判断 URL 是否为本机 Federation RPC。
63
+ */
64
+ export function is_rpc_url(value) {
65
+ return /^rpc:\/\//i.test(value);
66
+ }
67
+ function rpc_error(response) {
68
+ const error = new Error(`Downcity request failed with ${response.status}: ${response.body}`);
69
+ error.status = response.status;
70
+ error.body = response.body;
71
+ return error;
72
+ }
73
+ function response_like(response) {
74
+ const body = encode_body(response.body);
75
+ return {
76
+ ok: response.status >= 200 && response.status < 300,
77
+ status: response.status,
78
+ body,
79
+ json: async () => JSON.parse(response.body),
80
+ text: async () => response.body,
81
+ };
82
+ }
83
+ function encode_body(body) {
84
+ const encoder = new TextEncoder();
85
+ const chunk = encoder.encode(body);
86
+ return new ReadableStream({
87
+ start(controller) {
88
+ controller.enqueue(chunk);
89
+ controller.close();
90
+ },
91
+ });
92
+ }
93
+ //# sourceMappingURL=requester.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"requester.js","sourceRoot":"","sources":["../../src/pact/requester.ts"],"names":[],"mappings":"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"}