@fudanda/client 2.20261024.1-beta.2 → 2.20261109.1-beta.1
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/LICENSE +21 -21
- package/README.md +53 -51
- package/dist/goa-stream.js.map +1 -1
- package/dist/goa.d.ts +15 -0
- package/dist/goa.d.ts.map +1 -1
- package/dist/goa.js +34 -5
- package/dist/goa.js.map +1 -1
- package/dist/index.d.ts +1 -1
- package/dist/index.d.ts.map +1 -1
- package/dist/index.js.map +1 -1
- package/dist/shared/foundation.d.ts +24 -8
- package/dist/shared/foundation.d.ts.map +1 -1
- package/dist/shared/foundation.js +3 -1
- package/dist/shared/foundation.js.map +1 -1
- package/dist/shared/generated/api/activity.d.ts +2 -0
- package/dist/shared/generated/api/activity.d.ts.map +1 -1
- package/dist/shared/generated/api/activity.js +1 -1
- package/dist/shared/generated/api/activity.js.map +1 -1
- package/dist/shared/generated/api/audit.d.ts +8 -0
- package/dist/shared/generated/api/audit.d.ts.map +1 -1
- package/dist/shared/generated/api/audit.js +6 -6
- package/dist/shared/generated/api/audit.js.map +1 -1
- package/dist/shared/generated/api/identity.d.ts +65 -1
- package/dist/shared/generated/api/identity.d.ts.map +1 -1
- package/dist/shared/generated/api/identity.js +12 -5
- package/dist/shared/generated/api/identity.js.map +1 -1
- package/dist/shared/generated/api/settings.d.ts +283 -4
- package/dist/shared/generated/api/settings.d.ts.map +1 -1
- package/dist/shared/generated/api/settings.js +50 -6
- package/dist/shared/generated/api/settings.js.map +1 -1
- package/dist/shared/generated/api/system.d.ts +79 -0
- package/dist/shared/generated/api/system.d.ts.map +1 -1
- package/dist/shared/generated/api/system.js +10 -0
- package/dist/shared/generated/api/system.js.map +1 -1
- package/dist/shared/permissions.d.ts +34 -14
- package/dist/shared/permissions.d.ts.map +1 -1
- package/dist/shared/platform/permissions.d.ts +34 -14
- package/dist/shared/platform/permissions.d.ts.map +1 -1
- package/dist/shared/platform/permissions.js +9 -8
- package/dist/shared/platform/permissions.js.map +1 -1
- package/dist/shared/seed/menus/integrations.d.ts +3 -0
- package/dist/shared/seed/menus/integrations.d.ts.map +1 -0
- package/dist/shared/seed/menus/integrations.js +7 -0
- package/dist/shared/seed/menus/integrations.js.map +1 -0
- package/dist/shared/seed/menus/settings.d.ts.map +1 -1
- package/dist/shared/seed/menus/settings.js +5 -7
- package/dist/shared/seed/menus/settings.js.map +1 -1
- package/dist/shared/seed/menus.d.ts.map +1 -1
- package/dist/shared/seed/menus.js +2 -0
- package/dist/shared/seed/menus.js.map +1 -1
- package/dist/shared/settings/foundation.d.ts +4 -0
- package/dist/shared/settings/foundation.d.ts.map +1 -1
- package/dist/shared/settings/foundation.js +6 -2
- package/dist/shared/settings/foundation.js.map +1 -1
- package/dist/shared/settings/index.d.ts +12 -2
- package/dist/shared/settings/index.d.ts.map +1 -1
- package/dist/shared/settings/index.js +3 -1
- package/dist/shared/settings/index.js.map +1 -1
- package/package.json +143 -143
package/LICENSE
CHANGED
|
@@ -1,21 +1,21 @@
|
|
|
1
|
-
# MIT License
|
|
2
|
-
|
|
3
|
-
Copyright (c) 2026 iwangbowen
|
|
4
|
-
|
|
5
|
-
Permission is hereby granted, free of charge, to any person obtaining a copy
|
|
6
|
-
of this software and associated documentation files (the "Software"), to deal
|
|
7
|
-
in the Software without restriction, including without limitation the rights
|
|
8
|
-
to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
|
|
9
|
-
copies of the Software, and to permit persons to whom the Software is
|
|
10
|
-
furnished to do so, subject to the following conditions:
|
|
11
|
-
|
|
12
|
-
The above copyright notice and this permission notice shall be included in all
|
|
13
|
-
copies or substantial portions of the Software.
|
|
14
|
-
|
|
15
|
-
THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
|
|
16
|
-
IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
|
|
17
|
-
FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
|
|
18
|
-
AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
|
|
19
|
-
LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
|
|
20
|
-
OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
|
|
21
|
-
SOFTWARE.
|
|
1
|
+
# MIT License
|
|
2
|
+
|
|
3
|
+
Copyright (c) 2026 iwangbowen
|
|
4
|
+
|
|
5
|
+
Permission is hereby granted, free of charge, to any person obtaining a copy
|
|
6
|
+
of this software and associated documentation files (the "Software"), to deal
|
|
7
|
+
in the Software without restriction, including without limitation the rights
|
|
8
|
+
to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
|
|
9
|
+
copies of the Software, and to permit persons to whom the Software is
|
|
10
|
+
furnished to do so, subject to the following conditions:
|
|
11
|
+
|
|
12
|
+
The above copyright notice and this permission notice shall be included in all
|
|
13
|
+
copies or substantial portions of the Software.
|
|
14
|
+
|
|
15
|
+
THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
|
|
16
|
+
IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
|
|
17
|
+
FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
|
|
18
|
+
AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
|
|
19
|
+
LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
|
|
20
|
+
OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
|
|
21
|
+
SOFTWARE.
|
package/README.md
CHANGED
|
@@ -1,51 +1,53 @@
|
|
|
1
|
-
# @fudanda/client
|
|
2
|
-
|
|
3
|
-
原生 Goa TypeScript 客户端,运行时只依赖 `@fudanda/shared`。支持浏览器 Cookie/CSRF、脚本 API Key、严格请求/响应校验、multipart、上传进度、下载和 SSE,不依赖 React、UI 或查询缓存。
|
|
4
|
-
|
|
5
|
-
```ts
|
|
6
|
-
import { GoaClient } from '@fudanda/client';
|
|
7
|
-
import { authMe } from '@fudanda/shared/api/identity';
|
|
8
|
-
import { positionsList } from '@fudanda/shared/api/positions';
|
|
9
|
-
|
|
10
|
-
const client = new GoaClient();
|
|
11
|
-
const session = await client.call(authMe);
|
|
12
|
-
client.setCSRFToken(session.csrfToken);
|
|
13
|
-
const page = await client.call(positionsList, {
|
|
14
|
-
query: { page: 1, pageSize: 10, keyword: '工程' },
|
|
15
|
-
});
|
|
16
|
-
```
|
|
17
|
-
|
|
18
|
-
Goa DSL 生成路径、方法、参数、Result、错误及协议描述。`call` 直接返回原生 Result,204 返回 `undefined`;`callWithResponse` 另外返回状态和响应头。旧 `Client`、`callRaw` 和响应包装接口已退出公共包。
|
|
19
|
-
|
|
20
|
-
## 会话与错误
|
|
21
|
-
|
|
22
|
-
浏览器默认同源并发送 HttpOnly Cookie;刷新页面后读取 `authMe` 恢复 CSRF。登录成功后调用 `setCSRFToken`,退出或身份改变时调用 `clearSession`。`subscribeUnauthorized` 和 `onUnauthorized` 供宿主更新登录状态。受保护请求的 401 清除当前会话,503 不清除;迟到的旧会话结果以 `AbortError` 结束,不能覆盖新会话。
|
|
23
|
-
|
|
24
|
-
`
|
|
25
|
-
|
|
26
|
-
`
|
|
27
|
-
|
|
28
|
-
|
|
29
|
-
|
|
30
|
-
|
|
31
|
-
|
|
32
|
-
`
|
|
33
|
-
|
|
34
|
-
`
|
|
35
|
-
|
|
36
|
-
|
|
37
|
-
|
|
38
|
-
|
|
39
|
-
|
|
40
|
-
|
|
41
|
-
|
|
42
|
-
|
|
43
|
-
npm run
|
|
44
|
-
npm run
|
|
45
|
-
|
|
46
|
-
|
|
47
|
-
|
|
48
|
-
|
|
49
|
-
|
|
50
|
-
|
|
51
|
-
|
|
1
|
+
# @fudanda/client
|
|
2
|
+
|
|
3
|
+
原生 Goa TypeScript 客户端,运行时只依赖 `@fudanda/shared`。支持浏览器 Cookie/CSRF、脚本 API Key、严格请求/响应校验、multipart、上传进度、下载和 SSE,不依赖 React、UI 或查询缓存。
|
|
4
|
+
|
|
5
|
+
```ts
|
|
6
|
+
import { GoaClient } from '@fudanda/client';
|
|
7
|
+
import { authMe } from '@fudanda/shared/api/identity';
|
|
8
|
+
import { positionsList } from '@fudanda/shared/api/positions';
|
|
9
|
+
|
|
10
|
+
const client = new GoaClient();
|
|
11
|
+
const session = await client.call(authMe);
|
|
12
|
+
client.setCSRFToken(session.csrfToken);
|
|
13
|
+
const page = await client.call(positionsList, {
|
|
14
|
+
query: { page: 1, pageSize: 10, keyword: '工程' },
|
|
15
|
+
});
|
|
16
|
+
```
|
|
17
|
+
|
|
18
|
+
Goa DSL 生成路径、方法、参数、Result、错误及协议描述。`call` 直接返回原生 Result,204 返回 `undefined`;`callWithResponse` 另外返回状态和响应头。旧 `Client`、`callRaw` 和响应包装接口已退出公共包。
|
|
19
|
+
|
|
20
|
+
## 会话与错误
|
|
21
|
+
|
|
22
|
+
浏览器默认同源并发送 HttpOnly Cookie;刷新页面后读取 `authMe` 恢复 CSRF。登录成功后调用 `setCSRFToken`,退出或身份改变时调用 `clearSession`。`subscribeUnauthorized` 和 `onUnauthorized` 供宿主更新登录状态。受保护请求的 401 清除当前会话,503 不清除;迟到的旧会话结果以 `AbortError` 结束,不能覆盖新会话。
|
|
23
|
+
|
|
24
|
+
会话期限和续期策略通过每次请求的 `X-ArcBase-Session-Metadata: true` 可选头启用。例如 `client.call(authMe, { headers: { 'X-ArcBase-Session-Metadata': true } })` 会获取期限提示;登录、会话冲突确认、身份安全设置读写及个人设置投影也支持此头。未声明时保持旧 DTO 形状,兼容已有严格校验客户端;`authRenew` 始终返回完整续期 DTO。内置管理台和会话 adapter 已按操作启用,无需在全局请求头中设置。
|
|
25
|
+
|
|
26
|
+
`GoaError` 提供 `status`、`reason`、`errorId`、`requestId`、`temporary`、`timeout` 和 `fault`;网络与取消错误保留原语义。请求的 `signal` 支持取消。PATCH 省略字段保持原值,清空使用设计允许的 `clearFields`,集合 PUT 允许 `[]`。客户端不自动重放写入。
|
|
27
|
+
|
|
28
|
+
`baseURL` 只能是 HTTP origin;Node 原生 fetch 不维护 Cookie,Cookie 模式须注入维护 Cookie 的 `transport`。`new GoaClient({ baseURL, apiKey })` 使用受限 Bearer Key,默认不携带 Cookie,不保存 Key 到浏览器存储。服务端继续校验实时账号权限、Key scope 和数据范围。
|
|
29
|
+
|
|
30
|
+
## 文件与 SSE
|
|
31
|
+
|
|
32
|
+
`upload(operation, input, { signal, onProgress })` 接收生成的 multipart 输入;普通上传使用 fetch,需要进度时使用 XHR。二者使用最新 CSRF,浏览器自行生成 multipart boundary,宿主不能覆盖认证头。Blob、Blob 数组或 FormData 仍按生成操作校验。
|
|
33
|
+
|
|
34
|
+
`download(operation, input, options)` 返回未缓冲的 `Response`,调用者须消费或取消 body。宿主负责保存文件、Toast 和界面状态。
|
|
35
|
+
|
|
36
|
+
`stream(operation, input, { onEvent, onConnection, onError, signal })` 返回 `{ close, done }`。事件以生成 schema 校验,支持 UTF-8 分片、多行 data、Last-Event-ID 和有界重连;权限或会话失效终止观察。卸载时调用 `close()` 并等待 `done`,不会取消服务端业务运行。缓存重查由宿主负责。
|
|
37
|
+
|
|
38
|
+
独立业务模块直接将自身 Goa 生成的描述符传给同一个客户端。TypeScript 生成器公开为 `create-arcbase/goa-contracts`,不能自行维护第二份请求 schema。
|
|
39
|
+
|
|
40
|
+
## 验证
|
|
41
|
+
|
|
42
|
+
```sh
|
|
43
|
+
npm run check:types -w @fudanda/client
|
|
44
|
+
npm run test:client
|
|
45
|
+
npm run lint -w @fudanda/client
|
|
46
|
+
npm run check:boundaries
|
|
47
|
+
```
|
|
48
|
+
|
|
49
|
+
两套管理台通过 `@fudanda/react-core` 共享会话、Query、缓存失效和文件适配。完整协议与权限说明见 [集成扩展](../../docs/guide/go-integrations.md)。
|
|
50
|
+
|
|
51
|
+
## 契约与校验入口
|
|
52
|
+
|
|
53
|
+
原 shared 的纯契约、Zod 校验、权限类型与基础元数据随 Client 交付。`@fudanda/client/contracts` 对应原 shared 根入口,`@fudanda/client/core`、`@fudanda/client/api/*` 等对应原域子路径。Client 的运行依赖只有纯工具,不引入 React、UI 或浏览器全局状态;shared 继续作为私有源码作者边界。
|
package/dist/goa-stream.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"goa-stream.js","sourceRoot":"","sources":["../src/goa-stream.ts"],"names":[],"mappings":"AAEA,MAAM,OAAO,gBAAiB,SAAQ,KAAK;CAAG;AAE9C,2EAA2E;AAC3E,MAAM,CAAC,KAAK,SAAS,CAAC,CAAC,OAAO,CAAC,IAAgC,EAAE,MAAmB;IAClF,MAAM,MAAM,GAAG,IAAI,CAAC,SAAS,EAAE,CAAC;IAChC,MAAM,OAAO,GAAG,IAAI,WAAW,CAAC,OAAO,EAAE,EAAE,KAAK,EAAE,IAAI,EAAE,CAAC,CAAC;IAC1D,MAAM,OAAO,GAAG,IAAI,WAAW,EAAE,CAAC;IAClC,IAAI,IAAI,GAAG,EAAE,EAAE,KAAK,GAAG,EAAE,EAAE,IAAI,GAAa,EAAE,EAAE,EAAsB,EAAE,KAAyB,CAAC;IAClG,IAAI,UAAU,GAAG,CAAC,EAAE,OAAO,GAAG,KAAK,EAAE,QAAQ,GAAG,KAAK,EAAE,SAAS,GAAG,KAAK,CAAC;IACzE,MAAM,MAAM,GAAG,KAAK,IAAI,EAAE;QACxB,IAAI,QAAQ,IAAI,SAAS;YAAE,OAAO;QAClC,SAAS,GAAG,IAAI,CAAC;QACjB,IAAI,CAAC;YAAC,MAAM,MAAM,CAAC,MAAM,EAAE,CAAC;QAAC,CAAC;QAAC,MAAM,CAAC,CAAC,0DAA0D,CAAC,CAAC;IACrG,CAAC,CAAC;IACF,MAAM,KAAK,GAAG,GAAG,EAAE,GAAG,KAAK,MAAM,EAAE,CAAC,CAAC,CAAC,CAAC;IACvC,MAAM,MAAM,GAAG,CAAC,QAAgB,EAAE,EAAE;QAClC,UAAU,IAAI,OAAO,CAAC,MAAM,CAAC,QAAQ,CAAC,CAAC,UAAU,CAAC;QAClD,IAAI,UAAU,GAAG,GAAG,GAAG,IAAI;YAAE,MAAM,IAAI,gBAAgB,CAAC,2BAA2B,CAAC,CAAC;QACrF,IAAI,IAAI,QAAQ,CAAC;IACnB,CAAC,CAAC;IACF,MAAM,OAAO,GAAG,GAAyB,EAAE;QACzC,MAAM,OAAO,GAAG,IAAI,CAAC;QACrB,IAAI,GAAG,EAAE,CAAC;QACV,IAAI,CAAC,OAAO,EAAE,CAAC;YACb,MAAM,KAAK,GAAG,IAAI,CAAC,MAAM,IAAI,EAAE,KAAK,SAAS,IAAI,KAAK,KAAK,SAAS,CAAC,CAAC,CAAC,EAAE,KAAK,EAAE,KAAK,IAAI,SAAS,EAAE,IAAI,EAAE,IAAI,CAAC,MAAM,CAAC,CAAC,CAAC,IAAI,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC,SAAS,EAAE,EAAE,EAAE,KAAK,EAAE,CAAC,CAAC,CAAC,SAAS,CAAC;YAC7K,KAAK,GAAG,EAAE,CAAC;YAAC,IAAI,GAAG,EAAE,CAAC;YAAC,EAAE,GAAG,SAAS,CAAC;YAAC,KAAK,GAAG,SAAS,CAAC;YAAC,UAAU,GAAG,CAAC,CAAC;YACzE,OAAO,KAAK,CAAC;QACf,CAAC;QACD,IAAI,OAAO,CAAC,UAAU,CAAC,GAAG,CAAC,EAAE,CAAC;YAAC,UAAU,IAAI,OAAO,CAAC,MAAM,CAAC,OAAO,CAAC,CAAC,UAAU,CAAC;YAAC,OAAO;QAAC,CAAC;QAC1F,MAAM,KAAK,GAAG,OAAO,CAAC,OAAO,CAAC,GAAG,CAAC,CAAC;QACnC,MAAM,KAAK,GAAG,KAAK,KAAK,CAAC,CAAC,CAAC,CAAC,CAAC,OAAO,CAAC,CAAC,CAAC,OAAO,CAAC,KAAK,CAAC,CAAC,EAAE,KAAK,CAAC,CAAC;QAC/D,IAAI,KAAK,GAAG,KAAK,KAAK,CAAC,CAAC,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,OAAO,CAAC,KAAK,CAAC,KAAK,GAAG,CAAC,CAAC,CAAC;QACzD,IAAI,KAAK,CAAC,UAAU,CAAC,GAAG,CAAC;YAAE,KAAK,GAAG,KAAK,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC;QAClD,IAAI,KAAK,KAAK,OAAO;YAAE,KAAK,GAAG,KAAK,CAAC;aAChC,IAAI,KAAK,KAAK,MAAM;YAAE,IAAI,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC;aACvC,IAAI,KAAK,KAAK,IAAI,IAAI,CAAC,KAAK,CAAC,QAAQ,CAAC,IAAI,CAAC;YAAE,EAAE,GAAG,KAAK,CAAC;aACxD,IAAI,KAAK,KAAK,OAAO,IAAI,OAAO,CAAC,IAAI,CAAC,KAAK,CAAC,IAAI,MAAM,CAAC,aAAa,CAAC,MAAM,CAAC,KAAK,CAAC,CAAC;YAAE,KAAK,GAAG,MAAM,CAAC,KAAK,CAAC,CAAC;IAClH,CAAC,CAAC;IACF,MAAM,CAAC,gBAAgB,CAAC,OAAO,EAAE,KAAK,EAAE,EAAE,IAAI,EAAE,IAAI,EAAE,CAAC,CAAC;IACxD,IAAI,CAAC;QACH,MAAM,CAAC,cAAc,EAAE,CAAC;QACxB,OAAO,IAAI,EAAE,CAAC;YACZ,MAAM,IAAI,GAAG,MAAM,MAAM,CAAC,IAAI,EAAE,CAAC;YACjC,MAAM,CAAC,cAAc,EAAE,CAAC;YACxB,IAAI,IAAI,CAAC,IAAI,EAAE,CAAC;gBAAC,QAAQ,GAAG,IAAI,CAAC;gBAAC,MAAM;YAAC,CAAC;YAC1C,IAAI,IAAY,CAAC;YACjB,IAAI,CAAC;gBAAC,IAAI,GAAG,OAAO,CAAC,MAAM,CAAC,IAAI,CAAC,KAAK,EAAE,EAAE,MAAM,EAAE,IAAI,EAAE,CAAC,CAAC;YAAC,CAAC;YAC5D,MAAM,CAAC;gBAAC,MAAM,IAAI,gBAAgB,CAAC,4BAA4B,CAAC,CAAC;YAAC,CAAC;YACnE,IAAI,KAAK,GAAG,CAAC,CAAC;YACd,KAAK,IAAI,KAAK,GAAG,CAAC,EAAE,KAAK,GAAG,IAAI,CAAC,MAAM,EAAE,KAAK,EAAE,EAAE,CAAC;gBACjD,MAAM,IAAI,GAAG,IAAI,CAAC,KAAK,CAAC,CAAC;gBACzB,IAAI,OAAO,EAAE,CAAC;oBAAC,OAAO,GAAG,KAAK,CAAC;oBAAC,IAAI,IAAI,KAAK,IAAI,EAAE,CAAC;wBAAC,KAAK,GAAG,KAAK,GAAG,CAAC,CAAC;wBAAC,SAAS;oBAAC,CAAC;gBAAC,CAAC;gBACrF,IAAI,IAAI,KAAK,IAAI,IAAI,IAAI,KAAK,IAAI;oBAAE,SAAS;gBAC7C,MAAM,CAAC,IAAI,CAAC,KAAK,CAAC,KAAK,EAAE,KAAK,CAAC,CAAC,CAAC;gBACjC,MAAM,KAAK,GAAG,OAAO,EAAE,CAAC;gBACxB,IAAI,KAAK;oBAAE,MAAM,KAAK,CAAC;gBACvB,OAAO,GAAG,IAAI,KAAK,IAAI,CAAC;gBACxB,KAAK,GAAG,KAAK,GAAG,CAAC,CAAC;YACpB,CAAC;YACD,MAAM,CAAC,IAAI,CAAC,KAAK,CAAC,KAAK,CAAC,CAAC,CAAC;QAC5B,CAAC;QACD,IAAI,CAAC;YAAC,OAAO,CAAC,MAAM,EAAE,CAAC;QAAC,CAAC;QAAC,MAAM,CAAC;YAAC,MAAM,IAAI,gBAAgB,CAAC,+BAA+B,CAAC,CAAC;QAAC,CAAC;QAChG,4EAA4E;IAC9E,CAAC;YAAS,CAAC;QACT,MAAM,CAAC,mBAAmB,CAAC,OAAO,EAAE,KAAK,CAAC,CAAC;QAC3C,MAAM,MAAM,EAAE,CAAC;QACf,MAAM,CAAC,WAAW,EAAE,CAAC;IACvB,CAAC;AACH,CAAC;AAED,MAAM,UAAU,gBAAgB,CAAC,YAAoB,EAAE,MAAmB;IACxE,OAAO,IAAI,OAAO,CAAC,OAAO,CAAC,EAAE;QAC3B,MAAM,MAAM,GAAG,GAAG,EAAE,GAAG,YAAY,CAAC,KAAK,CAAC,CAAC,CAAC,MAAM,CAAC,mBAAmB,CAAC,OAAO,EAAE,MAAM,CAAC,CAAC,CAAC,OAAO,EAAE,CAAC,CAAC,CAAC,CAAC;QACtG,MAAM,KAAK,GAAG,UAAU,CAAC,MAAM,EAAE,YAAY,CAAC,CAAC;QAC/C,MAAM,CAAC,gBAAgB,CAAC,OAAO,EAAE,MAAM,EAAE,EAAE,IAAI,EAAE,IAAI,EAAE,CAAC,CAAC;QACzD,IAAI,MAAM,CAAC,OAAO;YAAE,MAAM,EAAE,CAAC;IAC/B,CAAC,CAAC,CAAC;AACL,CAAC"}
|
|
1
|
+
{"version":3,"file":"goa-stream.js","sourceRoot":"","sources":["../src/goa-stream.ts"],"names":[],"mappings":"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","sourcesContent":["export interface SSEFrame { event: string; data?: string; id?: string; retry?: number }\n\nexport class SSEProtocolError extends Error {}\n\n/** Incremental SSE framing. Bound each frame before retaining its text. */\nexport async function* readSSE(body: ReadableStream<Uint8Array>, signal: AbortSignal): AsyncGenerator<SSEFrame> {\n const reader = body.getReader();\n const decoder = new TextDecoder('utf-8', { fatal: true });\n const encoder = new TextEncoder();\n let line = '', event = '', data: string[] = [], id: string | undefined, retry: number | undefined;\n let frameBytes = 0, afterCR = false, finished = false, cancelled = false;\n const cancel = async () => {\n if (finished || cancelled) return;\n cancelled = true;\n try { await reader.cancel(); } catch { /* The original read failure is reported by the caller. */ }\n };\n const abort = () => { void cancel(); };\n const append = (fragment: string) => {\n frameBytes += encoder.encode(fragment).byteLength;\n if (frameBytes > 512 * 1024) throw new SSEProtocolError('SSE frame exceeds 512 KiB');\n line += fragment;\n };\n const consume = (): SSEFrame | undefined => {\n const current = line;\n line = '';\n if (!current) {\n const frame = data.length || id !== undefined || retry !== undefined ? { event: event || 'message', data: data.length ? data.join('\\n') : undefined, id, retry } : undefined;\n event = ''; data = []; id = undefined; retry = undefined; frameBytes = 0;\n return frame;\n }\n if (current.startsWith(':')) { frameBytes -= encoder.encode(current).byteLength; return; }\n const colon = current.indexOf(':');\n const field = colon === -1 ? current : current.slice(0, colon);\n let value = colon === -1 ? '' : current.slice(colon + 1);\n if (value.startsWith(' ')) value = value.slice(1);\n if (field === 'event') event = value;\n else if (field === 'data') data.push(value);\n else if (field === 'id' && !value.includes('\\0')) id = value;\n else if (field === 'retry' && /^\\d+$/.test(value) && Number.isSafeInteger(Number(value))) retry = Number(value);\n };\n signal.addEventListener('abort', abort, { once: true });\n try {\n signal.throwIfAborted();\n while (true) {\n const part = await reader.read();\n signal.throwIfAborted();\n if (part.done) { finished = true; break; }\n let text: string;\n try { text = decoder.decode(part.value, { stream: true }); }\n catch { throw new SSEProtocolError('SSE contains invalid UTF-8'); }\n let start = 0;\n for (let index = 0; index < text.length; index++) {\n const char = text[index];\n if (afterCR) { afterCR = false; if (char === '\\n') { start = index + 1; continue; } }\n if (char !== '\\r' && char !== '\\n') continue;\n append(text.slice(start, index));\n const frame = consume();\n if (frame) yield frame;\n afterCR = char === '\\r';\n start = index + 1;\n }\n append(text.slice(start));\n }\n try { decoder.decode(); } catch { throw new SSEProtocolError('SSE contains incomplete UTF-8'); }\n // The SSE protocol discards a final event without its empty-line delimiter.\n } finally {\n signal.removeEventListener('abort', abort);\n await cancel();\n reader.releaseLock();\n }\n}\n\nexport function waitForReconnect(milliseconds: number, signal: AbortSignal): Promise<void> {\n return new Promise(resolve => {\n const finish = () => { clearTimeout(timer); signal.removeEventListener('abort', finish); resolve(); };\n const timer = setTimeout(finish, milliseconds);\n signal.addEventListener('abort', finish, { once: true });\n if (signal.aborted) finish();\n });\n}\n"]}
|
package/dist/goa.d.ts
CHANGED
|
@@ -8,6 +8,16 @@ export interface GoaClientOptions {
|
|
|
8
8
|
csrfToken?: string;
|
|
9
9
|
onUnauthorized?: () => void;
|
|
10
10
|
}
|
|
11
|
+
/** Safe transport metadata: descriptor IDs/templates, never URL values or data. */
|
|
12
|
+
export interface GoaRequestObservation {
|
|
13
|
+
readonly operation: string;
|
|
14
|
+
readonly method: string;
|
|
15
|
+
readonly route: string;
|
|
16
|
+
readonly status: number;
|
|
17
|
+
readonly outcome: 'success' | 'http_error' | 'network_error' | 'canceled';
|
|
18
|
+
/** Time to response headers, including uploads. Does not consume stream bodies. */
|
|
19
|
+
readonly durationMs: number;
|
|
20
|
+
}
|
|
11
21
|
export interface GoaRequestOptions {
|
|
12
22
|
signal?: AbortSignal | null;
|
|
13
23
|
headers?: HeadersInit;
|
|
@@ -52,11 +62,16 @@ export declare class GoaClient {
|
|
|
52
62
|
private sessionRevision;
|
|
53
63
|
private readonly responseSessions;
|
|
54
64
|
private readonly unauthorizedListeners;
|
|
65
|
+
private readonly requestListeners;
|
|
55
66
|
constructor(options?: GoaClientOptions);
|
|
56
67
|
setCSRFToken(token: string): void;
|
|
68
|
+
/** Resolve server-relative public resources against this client's API origin. */
|
|
69
|
+
resolveURL(path: string): string;
|
|
57
70
|
clearSession(): void;
|
|
58
71
|
sessionHeaders(): Record<string, string>;
|
|
59
72
|
subscribeUnauthorized(listener: () => void): () => void;
|
|
73
|
+
subscribeRequests(listener: (event: GoaRequestObservation) => void): () => void;
|
|
74
|
+
private observeRequest;
|
|
60
75
|
expireSession(): void;
|
|
61
76
|
call<Operation extends GoaOperation>(operation: Operation, ...args: Arguments<Operation>): Promise<GoaOutputOf<Operation>>;
|
|
62
77
|
callWithResponse<Operation extends GoaOperation>(operation: Operation, ...args: Arguments<Operation>): Promise<GoaResponse<GoaOutputOf<Operation>>>;
|
package/dist/goa.d.ts.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"goa.d.ts","sourceRoot":"","sources":["../src/goa.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,UAAU,EAAE,YAAY,EAAE,WAAW,EAAE,MAAM,sBAAsB,CAAC;AAGlF,MAAM,WAAW,gBAAgB;IAC/B,OAAO,CAAC,EAAE,MAAM,CAAC;IACjB,WAAW,CAAC,EAAE,kBAAkB,CAAC;IACjC,SAAS,CAAC,EAAE,OAAO,KAAK,CAAC;IACzB,UAAU,CAAC,EAAE,MAAM,cAAc,CAAC;IAClC,MAAM,CAAC,EAAE,MAAM,CAAC;IAChB,SAAS,CAAC,EAAE,MAAM,CAAC;IACnB,cAAc,CAAC,EAAE,MAAM,IAAI,CAAC;CAC7B;AAED,MAAM,WAAW,iBAAiB;IAChC,MAAM,CAAC,EAAE,WAAW,GAAG,IAAI,CAAC;IAC5B,OAAO,CAAC,EAAE,WAAW,CAAC;CACvB;AAED,MAAM,WAAW,gBAAiB,SAAQ,iBAAiB;IACzD,UAAU,CAAC,EAAE,CAAC,OAAO,EAAE,MAAM,KAAK,IAAI,CAAC;CACxC;AAED,MAAM,MAAM,kBAAkB,GAAG,YAAY,GAAG,WAAW,GAAG,cAAc,GAAG,QAAQ,CAAC;AACxF,MAAM,WAAW,gBAAgB,CAAC,IAAI,CAAE,SAAQ,iBAAiB;IAC/D,OAAO,EAAE,CAAC,KAAK,EAAE,IAAI,KAAK,IAAI,CAAC;IAC/B,YAAY,CAAC,EAAE,CAAC,KAAK,EAAE,kBAAkB,KAAK,IAAI,CAAC;IACnD,OAAO,CAAC,EAAE,CAAC,KAAK,EAAE,KAAK,KAAK,IAAI,CAAC;IACjC,cAAc,CAAC,EAAE,MAAM,CAAC;CACzB;AACD,MAAM,WAAW,eAAe;IAAG,KAAK,IAAI,IAAI,CAAC;IAAC,IAAI,EAAE,OAAO,CAAC,IAAI,CAAC,CAAA;CAAE;AAEvE,qBAAa,QAAS,SAAQ,KAAK;IASrB,QAAQ,CAAC,MAAM,EAAE,MAAM;IAAE,QAAQ,CAAC,MAAM,EAAE,MAAM;IAR5D,QAAQ,CAAC,IAAI,cAAc;IAC3B,OAAO,CAAC,EAAE,MAAM,CAAC;IACjB,SAAS,CAAC,EAAE,MAAM,CAAC;IACnB,SAAS,UAAS;IAClB,OAAO,UAAS;IAChB,KAAK,UAAS;IACd,OAAO,CAAC,EAAE,OAAO,CAAC;IAElB,YAAqB,MAAM,EAAE,MAAM,EAAW,MAAM,EAAE,MAAM,EAAE,OAAO,EAAE,MAAM,EAAqB;CACnG;AAED,KAAK,SAAS,CAAC,SAAS,SAAS,YAAY,IAAI,SAAS,SAAS,UAAU,CAAC,SAAS,CAAC,GACpF,CAAC,KAAK,CAAC,EAAE,UAAU,CAAC,SAAS,CAAC,EAAE,OAAO,CAAC,EAAE,iBAAiB,CAAC,GAC5D,CAAC,KAAK,EAAE,UAAU,CAAC,SAAS,CAAC,EAAE,OAAO,CAAC,EAAE,iBAAiB,CAAC,CAAC;AAChE,KAAK,eAAe,CAAC,SAAS,SAAS,YAAY,IAAI,CAAC,KAAK,EAAE,UAAU,CAAC,SAAS,CAAC,EAAE,OAAO,CAAC,EAAE,gBAAgB,CAAC,CAAC;AAIlH,MAAM,WAAW,WAAW,CAAC,IAAI;IAAI,IAAI,EAAE,IAAI,CAAC;IAAC,MAAM,EAAE,MAAM,CAAC;IAAC,OAAO,EAAE,OAAO,CAAA;CAAE;AAqBnF,iFAAiF;AACjF,qBAAa,SAAS;
|
|
1
|
+
{"version":3,"file":"goa.d.ts","sourceRoot":"","sources":["../src/goa.ts"],"names":[],"mappings":"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"}
|
package/dist/goa.js
CHANGED
|
@@ -46,6 +46,7 @@ export class GoaClient {
|
|
|
46
46
|
sessionRevision = 0;
|
|
47
47
|
responseSessions = new WeakMap();
|
|
48
48
|
unauthorizedListeners = new Set();
|
|
49
|
+
requestListeners = new Set();
|
|
49
50
|
constructor(options = {}) {
|
|
50
51
|
this.options = options;
|
|
51
52
|
const baseURL = options.baseURL ?? '';
|
|
@@ -59,12 +60,31 @@ export class GoaClient {
|
|
|
59
60
|
this.csrfToken = token;
|
|
60
61
|
this.sessionRevision++;
|
|
61
62
|
} }
|
|
63
|
+
/** Resolve server-relative public resources against this client's API origin. */
|
|
64
|
+
resolveURL(path) {
|
|
65
|
+
if (!path.startsWith('/') || path.startsWith('//') || path.includes('\\'))
|
|
66
|
+
throw new Error('Expected a server-relative URL');
|
|
67
|
+
return (this.options.baseURL ?? '').replace(/\/$/, '') + path;
|
|
68
|
+
}
|
|
62
69
|
clearSession() { this.csrfToken = ''; this.sessionRevision++; }
|
|
63
70
|
sessionHeaders() { return this.csrfToken ? { 'X-CSRF-Token': this.csrfToken } : {}; }
|
|
64
71
|
subscribeUnauthorized(listener) {
|
|
65
72
|
this.unauthorizedListeners.add(listener);
|
|
66
73
|
return () => { this.unauthorizedListeners.delete(listener); };
|
|
67
74
|
}
|
|
75
|
+
subscribeRequests(listener) {
|
|
76
|
+
this.requestListeners.add(listener);
|
|
77
|
+
return () => { this.requestListeners.delete(listener); };
|
|
78
|
+
}
|
|
79
|
+
observeRequest(event) {
|
|
80
|
+
for (const listener of this.requestListeners) {
|
|
81
|
+
// Monitoring is optional and must never change request/error semantics.
|
|
82
|
+
try {
|
|
83
|
+
void Promise.resolve(listener(event)).catch(() => { });
|
|
84
|
+
}
|
|
85
|
+
catch { /* host telemetry failed */ }
|
|
86
|
+
}
|
|
87
|
+
}
|
|
68
88
|
expireSession() {
|
|
69
89
|
this.clearSession();
|
|
70
90
|
for (const listener of this.unauthorizedListeners)
|
|
@@ -172,7 +192,7 @@ export class GoaClient {
|
|
|
172
192
|
if (controller.signal.aborted || error instanceof DOMException && error.name === 'AbortError')
|
|
173
193
|
return;
|
|
174
194
|
options.onError?.(error instanceof Error ? error : new Error('流式连接中断'));
|
|
175
|
-
if (error instanceof SSEProtocolError || error instanceof GoaError && (error.reason === 'invalid_response' || error.status < 500 && error.status !== 429))
|
|
195
|
+
if (error instanceof SSEProtocolError || error instanceof GoaError && (error.reason === 'invalid_response' || error.status > 0 && error.status < 500 && error.status !== 429))
|
|
176
196
|
return;
|
|
177
197
|
}
|
|
178
198
|
attempts++;
|
|
@@ -289,11 +309,20 @@ export class GoaClient {
|
|
|
289
309
|
body = JSON.stringify(input.body);
|
|
290
310
|
}
|
|
291
311
|
}
|
|
292
|
-
const url =
|
|
312
|
+
const url = this.resolveURL(pathFor(operation, input));
|
|
293
313
|
const init = { method: operation.method, credentials: this.options.credentials ?? (this.options.apiKey ? 'omit' : 'include'), headers, body, signal: options.signal, cache: 'no-store' };
|
|
294
|
-
const
|
|
295
|
-
|
|
296
|
-
|
|
314
|
+
const started = performance.now();
|
|
315
|
+
let response;
|
|
316
|
+
try {
|
|
317
|
+
response = operation.kind === 'multipart' && options.onProgress
|
|
318
|
+
? await this.sendUpload(url, init, options.onProgress)
|
|
319
|
+
: await (this.options.transport ?? globalThis.fetch)(url, init);
|
|
320
|
+
}
|
|
321
|
+
catch (error) {
|
|
322
|
+
this.observeRequest({ operation: operation.id, method: operation.method, route: operation.path, status: 0, outcome: options.signal?.aborted ? 'canceled' : 'network_error', durationMs: performance.now() - started });
|
|
323
|
+
throw error;
|
|
324
|
+
}
|
|
325
|
+
this.observeRequest({ operation: operation.id, method: operation.method, route: operation.path, status: response.status, outcome: options.signal?.aborted ? 'canceled' : response.ok ? 'success' : 'http_error', durationMs: performance.now() - started });
|
|
297
326
|
this.responseSessions.set(response, sessionRevision);
|
|
298
327
|
if (options.signal?.aborted) {
|
|
299
328
|
await response.body?.cancel();
|
package/dist/goa.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"goa.js","sourceRoot":"","sources":["../src/goa.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,OAAO,EAAE,gBAAgB,EAAE,gBAAgB,EAAE,MAAM,cAAc,CAAC;AA8B3E,MAAM,OAAO,QAAS,SAAQ,KAAK;IASZ,MAAM;IAAmB,MAAM;IAR3C,IAAI,GAAG,UAAU,CAAC;IAC3B,OAAO,CAAU;IACjB,SAAS,CAAU;IACnB,SAAS,GAAG,KAAK,CAAC;IAClB,OAAO,GAAG,KAAK,CAAC;IAChB,KAAK,GAAG,KAAK,CAAC;IACd,OAAO,CAAW;IAElB,YAAqB,MAAc,EAAW,MAAc,EAAE,OAAe;QAAI,KAAK,CAAC,OAAO,CAAC,CAAC;sBAA3E,MAAM;sBAAmB,MAAM;IAA6C,CAAC;CACnG;AAWD,SAAS,OAAO,CAAC,SAAuB,EAAE,KAAa;IACrD,IAAI,CAAC,SAAS,CAAC,IAAI,CAAC,UAAU,CAAC,UAAU,CAAC,IAAI,UAAU,CAAC,IAAI,CAAC,SAAS,CAAC,IAAI,CAAC,IAAI,SAAS,CAAC,IAAI,CAAC,KAAK,CAAC,GAAG,CAAC,CAAC,IAAI,CAAC,IAAI,CAAC,EAAE,CAAC,IAAI,KAAK,GAAG,IAAI,IAAI,KAAK,IAAI,CAAC;QAAE,MAAM,IAAI,KAAK,CAAC,4BAA4B,CAAC,CAAC;IACtM,MAAM,IAAI,GAAG,SAAS,CAAC,IAAI,CAAC,OAAO,CAAC,eAAe,EAAE,CAAC,MAAM,EAAE,IAAY,EAAE,EAAE;QAC5E,MAAM,QAAQ,GAAG,IAAI,CAAC,UAAU,CAAC,GAAG,CAAC,CAAC;QACtC,MAAM,KAAK,GAAG,KAAK,CAAC,MAAM,EAAE,CAAC,QAAQ,CAAC,CAAC,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC;QAC9D,IAAI,KAAK,KAAK,SAAS,IAAI,KAAK,KAAK,IAAI;YAAE,MAAM,IAAI,KAAK,CAAC,2BAA2B,IAAI,EAAE,CAAC,CAAC;QAC9F,IAAI,CAAC,QAAQ;YAAE,OAAO,kBAAkB,CAAC,MAAM,CAAC,KAAK,CAAC,CAAC,CAAC;QACxD,MAAM,KAAK,GAAG,MAAM,CAAC,KAAK,CAAC,CAAC,KAAK,CAAC,GAAG,CAAC,CAAC;QACvC,IAAI,KAAK,CAAC,IAAI,CAAC,IAAI,CAAC,EAAE,CAAC,IAAI,KAAK,GAAG,IAAI,IAAI,KAAK,IAAI,CAAC;YAAE,MAAM,IAAI,KAAK,CAAC,uBAAuB,CAAC,CAAC;QAChG,OAAO,KAAK,CAAC,GAAG,CAAC,kBAAkB,CAAC,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC;IACjD,CAAC,CAAC,CAAC;IACH,MAAM,KAAK,GAAG,IAAI,eAAe,EAAE,CAAC;IACpC,KAAK,MAAM,CAAC,GAAG,EAAE,KAAK,CAAC,IAAI,MAAM,CAAC,OAAO,CAAC,KAAK,CAAC,KAAK,IAAI,EAAE,CAAC,EAAE,CAAC;QAC7D,IAAI,KAAK,KAAK,SAAS,IAAI,KAAK,KAAK,IAAI;YAAE,SAAS;QACpD,KAAK,MAAM,IAAI,IAAI,KAAK,CAAC,OAAO,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC,KAAK,CAAC;YAAE,KAAK,CAAC,MAAM,CAAC,GAAG,EAAE,MAAM,CAAC,IAAI,CAAC,CAAC,CAAC;IAC7F,CAAC;IACD,OAAO,IAAI,GAAG,CAAC,KAAK,CAAC,IAAI,CAAC,CAAC,CAAC,GAAG,GAAG,KAAK,CAAC,QAAQ,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC;AAC3D,CAAC;AAED,iFAAiF;AACjF,MAAM,OAAO,SAAS;IAMS,OAAO;IAL5B,SAAS,CAAS;IAClB,eAAe,GAAG,CAAC,CAAC;IACX,gBAAgB,GAAG,IAAI,OAAO,EAAoB,CAAC;IACnD,qBAAqB,GAAG,IAAI,GAAG,EAAc,CAAC;IAE/D,YAA6B,OAAO,GAAqB,EAAE;uBAA9B,OAAO;QAClC,MAAM,OAAO,GAAG,OAAO,CAAC,OAAO,IAAI,EAAE,CAAC;QACtC,IAAI,OAAO,IAAI,CAAC,CAAC,cAAc,CAAC,IAAI,CAAC,OAAO,CAAC,IAAI,IAAI,GAAG,CAAC,OAAO,CAAC,CAAC,MAAM,KAAK,OAAO,CAAC,OAAO,CAAC,KAAK,EAAE,EAAE,CAAC,CAAC;YAAE,MAAM,IAAI,KAAK,CAAC,gCAAgC,CAAC,CAAC;QAC5J,IAAI,OAAO,CAAC,MAAM,IAAI,CAAC,oBAAoB,CAAC,IAAI,CAAC,OAAO,CAAC,MAAM,CAAC;YAAE,MAAM,IAAI,KAAK,CAAC,yBAAyB,CAAC,CAAC;QAC7G,IAAI,CAAC,SAAS,GAAG,OAAO,CAAC,SAAS,IAAI,EAAE,CAAC;IAC3C,CAAC;IAED,YAAY,CAAC,KAAa,IAAU,IAAI,KAAK,KAAK,IAAI,CAAC,SAAS,EAAE,CAAC;QAAC,IAAI,CAAC,SAAS,GAAG,KAAK,CAAC;QAAC,IAAI,CAAC,eAAe,EAAE,CAAC;IAAC,CAAC,CAAC,CAAC;IACvH,YAAY,KAAW,IAAI,CAAC,SAAS,GAAG,EAAE,CAAC,CAAC,IAAI,CAAC,eAAe,EAAE,CAAC,CAAC,CAAC;IACrE,cAAc,KAA4B,OAAO,IAAI,CAAC,SAAS,CAAC,CAAC,CAAC,EAAE,cAAc,EAAE,IAAI,CAAC,SAAS,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC;IAC5G,qBAAqB,CAAC,QAAoB;QACxC,IAAI,CAAC,qBAAqB,CAAC,GAAG,CAAC,QAAQ,CAAC,CAAC;QACzC,OAAO,GAAG,EAAE,GAAG,IAAI,CAAC,qBAAqB,CAAC,MAAM,CAAC,QAAQ,CAAC,CAAC,CAAC,CAAC,CAAC;IAChE,CAAC;IACD,aAAa;QACX,IAAI,CAAC,YAAY,EAAE,CAAC;QACpB,KAAK,MAAM,QAAQ,IAAI,IAAI,CAAC,qBAAqB;YAAE,QAAQ,EAAE,CAAC;QAC9D,IAAI,CAAC,OAAO,CAAC,cAAc,EAAE,EAAE,CAAC;IAClC,CAAC;IAED,IAAI,CAAiC,SAAoB,EAAE,GAAG,IAA0B;QACtF,OAAO,IAAI,CAAC,OAAO,CAAC,SAAS,EAAE,IAAI,CAAC,CAAC,CAAC,EAAE,IAAI,CAAC,CAAC,CAAC,CAAC,CAAC,IAAI,CAAC,QAAQ,CAAC,EAAE,CAAC,QAAQ,CAAC,IAAI,CAAC,CAAC;IACnF,CAAC;IAED,gBAAgB,CAAiC,SAAoB,EAAE,GAAG,IAA0B;QAClG,OAAO,IAAI,CAAC,OAAO,CAAC,SAAS,EAAE,IAAI,CAAC,CAAC,CAAC,EAAE,IAAI,CAAC,CAAC,CAAC,CAAC,CAAC;IACnD,CAAC;IAED,MAAM,CAAkE,SAAoB,EAAE,GAAG,IAAgC;QAC/H,OAAO,IAAI,CAAC,OAAO,CAAC,SAAS,EAAE,IAAI,CAAC,CAAC,CAAC,EAAE,IAAI,CAAC,CAAC,CAAC,EAAE,WAAW,CAAC,CAAC,IAAI,CAAC,QAAQ,CAAC,EAAE,CAAC,QAAQ,CAAC,IAAI,CAAC,CAAC;IAChG,CAAC;IAED,iFAAiF;IACjF,MAAM,CAA4D,SAAoB,EAAE,KAA4B,EAAE,OAAiD;QACrK,IAAI,SAAS,CAAC,IAAI,KAAK,KAAK,IAAI,SAAS,CAAC,MAAM,KAAK,KAAK;YAAE,MAAM,IAAI,KAAK,CAAC,8BAA8B,CAAC,CAAC;QAC5G,MAAM,MAAM,GAAG,SAAS,CAAC,KAAK,CAAC,KAAK,CAAC,KAAK,CAAW,CAAC;QACtD,MAAM,UAAU,GAAG,IAAI,eAAe,EAAE,CAAC;QACzC,MAAM,cAAc,GAAG,IAAI,CAAC,eAAe,CAAC;QAC5C,MAAM,KAAK,GAAG,GAAG,EAAE,CAAC,UAAU,CAAC,KAAK,CAAC,OAAO,CAAC,MAAM,EAAE,MAAM,CAAC,CAAC;QAC7D,OAAO,CAAC,MAAM,EAAE,gBAAgB,CAAC,OAAO,EAAE,KAAK,EAAE,EAAE,IAAI,EAAE,IAAI,EAAE,CAAC,CAAC;QACjE,IAAI,OAAO,CAAC,MAAM,EAAE,OAAO;YAAE,KAAK,EAAE,CAAC;QACrC,MAAM,KAAK,GAAG,GAAG,EAAE,CAAC,UAAU,CAAC,KAAK,EAAE,CAAC;QACvC,MAAM,IAAI,GAAG,CAAC,KAAK,IAAI,EAAE;YACvB,MAAM,cAAc,GAAG,IAAI,OAAO,EAAE,CAAC;YACrC,KAAK,MAAM,CAAC,GAAG,EAAE,KAAK,CAAC,IAAI,MAAM,CAAC,OAAO,CAAC,MAAM,CAAC,OAAO,IAAI,EAAE,CAAC;gBAAE,IAAI,KAAK,KAAK,SAAS,IAAI,KAAK,KAAK,IAAI;oBAAE,cAAc,CAAC,GAAG,CAAC,GAAG,EAAE,MAAM,CAAC,KAAK,CAAC,CAAC,CAAC;YACnJ,IAAI,MAAM,GAAG,cAAc,CAAC,GAAG,CAAC,eAAe,CAAC,CAAC;YACjD,IAAI,KAAK,GAAG,IAAI,CAAC,GAAG,CAAC,KAAK,EAAE,IAAI,CAAC,GAAG,CAAC,GAAG,EAAE,OAAO,CAAC,cAAc,IAAI,IAAI,CAAC,CAAC,CAAC;YAC3E,IAAI,QAAQ,GAAG,CAAC,CAAC;YACjB,IAAI,CAAC;gBACH,OAAO,CAAC,UAAU,CAAC,MAAM,CAAC,OAAO,EAAE,CAAC;oBAClC,IAAI,SAAS,CAAC,MAAM,CAAC,IAAI,KAAK,QAAQ,IAAI,IAAI,CAAC,eAAe,KAAK,cAAc;wBAAE,OAAO;oBAC1F,OAAO,CAAC,YAAY,EAAE,CAAC,QAAQ,CAAC,CAAC,CAAC,cAAc,CAAC,CAAC,CAAC,YAAY,CAAC,CAAC;oBACjE,IAAI,CAAC;wBACH,MAAM,OAAO,GAAG,EAAE,GAAG,MAAM,EAAE,OAAO,EAAE,EAAE,GAAG,MAAM,CAAC,OAAO,EAAE,EAAE,CAAC;wBAC9D,IAAI,SAAS,CAAC,GAAG,EAAE,cAAc,IAAI,MAAM,KAAK,IAAI;4BAAE,OAAO,CAAC,OAAO,CAAC,eAAe,CAAC,GAAG,MAAM,CAAC;wBAChG,IAAI,CAAC,SAAS,CAAC,KAAK,CAAC,SAAS,CAAC,OAAO,CAAC,CAAC,OAAO;4BAAE,MAAM,IAAI,QAAQ,CAAC,GAAG,EAAE,kBAAkB,EAAE,cAAc,CAAC,CAAC;wBAC7G,MAAM,QAAQ,GAAG,MAAM,IAAI,CAAC,KAAK,CAAC,SAAS,EAAE,OAAO,EAAE,EAAE,GAAG,OAAO,EAAE,MAAM,EAAE,UAAU,CAAC,MAAM,EAAE,CAAC,CAAC;wBACjG,IAAI,CAAC,QAAQ,CAAC,EAAE;4BAAE,MAAM,MAAM,IAAI,CAAC,KAAK,CAAC,SAAS,EAAE,QAAQ,CAAC,CAAC;wBAC9D,MAAM,IAAI,CAAC,qBAAqB,CAAC,SAAS,EAAE,QAAQ,CAAC,CAAC;wBACtD,MAAM,MAAM,GAAG,SAAS,CAAC,SAAS,CAAC,QAAQ,CAAC,MAAM,CAAC,CAAC;wBACpD,IAAI,CAAC,MAAM,IAAI,CAAC,QAAQ,CAAC,IAAI,IAAI,QAAQ,CAAC,OAAO,CAAC,GAAG,CAAC,cAAc,CAAC,EAAE,KAAK,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,CAAC,IAAI,EAAE,CAAC,WAAW,EAAE,KAAK,mBAAmB,EAAE,CAAC;4BAClI,MAAM,QAAQ,CAAC,IAAI,EAAE,MAAM,EAAE,CAAC;4BAC9B,MAAM,IAAI,QAAQ,CAAC,QAAQ,CAAC,MAAM,EAAE,kBAAkB,EAAE,cAAc,CAAC,CAAC;wBAC1E,CAAC;wBACD,OAAO,CAAC,YAAY,EAAE,CAAC,WAAW,CAAC,CAAC;wBACpC,QAAQ,GAAG,CAAC,CAAC;wBACb,IAAI,KAAK,EAAE,MAAM,KAAK,IAAI,OAAO,CAAC,QAAQ,CAAC,IAAI,EAAE,UAAU,CAAC,MAAM,CAAC,EAAE,CAAC;4BACpE,IAAI,SAAS,CAAC,MAAM,CAAC,IAAI,KAAK,QAAQ,IAAI,IAAI,CAAC,eAAe,KAAK,cAAc;gCAAE,OAAO;4BAC1F,IAAI,KAAK,CAAC,EAAE,KAAK,SAAS;gCAAE,MAAM,GAAG,KAAK,CAAC,EAAE,CAAC;4BAC9C,IAAI,KAAK,CAAC,KAAK,KAAK,SAAS;gCAAE,KAAK,GAAG,IAAI,CAAC,GAAG,CAAC,KAAK,EAAE,IAAI,CAAC,GAAG,CAAC,GAAG,EAAE,KAAK,CAAC,KAAK,CAAC,CAAC,CAAC;4BACnF,IAAI,KAAK,CAAC,IAAI,KAAK,SAAS;gCAAE,SAAS;4BACvC,IAAI,KAAK,CAAC,KAAK,KAAK,iBAAiB,EAAE,CAAC;gCACtC,IAAI,IAAI,CAAC,gBAAgB,CAAC,GAAG,CAAC,QAAQ,CAAC,KAAK,IAAI,CAAC,eAAe;oCAAE,IAAI,CAAC,aAAa,EAAE,CAAC;gCACvF,OAAO;4BACT,CAAC;4BACD,IAAI,KAAK,CAAC,KAAK,KAAK,QAAQ;gCAAE,MAAM,IAAI,QAAQ,CAAC,GAAG,EAAE,eAAe,EAAE,SAAS,CAAC,CAAC;4BAClF,IAAI,GAAY,CAAC;4BACjB,IAAI,CAAC;gCAAC,GAAG,GAAG,IAAI,CAAC,KAAK,CAAC,KAAK,CAAC,IAAI,CAAC,CAAC;4BAAC,CAAC;4BACrC,MAAM,CAAC;gCAAC,MAAM,IAAI,QAAQ,CAAC,QAAQ,CAAC,MAAM,EAAE,kBAAkB,EAAE,aAAa,CAAC,CAAC;4BAAC,CAAC;4BACjF,MAAM,IAAI,GAAG,SAAS,CAAC,GAAG,CAAC;4BAC3B,IAAI,IAAI,EAAE,SAAS;gCAAE,GAAG,GAAG,EAAE,CAAC,IAAI,CAAC,SAAS,CAAC,EAAE,GAAG,EAAE,CAAC;4BACrD,IAAI,IAAI,EAAE,OAAO,IAAI,IAAI,EAAE,UAAU,IAAI,IAAI,EAAE,UAAU,EAAE,CAAC;gCAC1D,IAAI,CAAC,GAAG,IAAI,OAAO,GAAG,KAAK,QAAQ,IAAI,KAAK,CAAC,OAAO,CAAC,GAAG,CAAC;oCAAE,MAAM,IAAI,QAAQ,CAAC,QAAQ,CAAC,MAAM,EAAE,kBAAkB,EAAE,aAAa,CAAC,CAAC;gCAClI,MAAM,MAAM,GAA4B,EAAE,GAAG,GAAG,EAAE,CAAC;gCACnD,IAAI,IAAI,CAAC,OAAO;oCAAE,MAAM,CAAC,IAAI,CAAC,OAAO,CAAC,GAAG,MAAM,IAAI,EAAE,CAAC;gCACtD,IAAI,IAAI,CAAC,UAAU;oCAAE,MAAM,CAAC,IAAI,CAAC,UAAU,CAAC,GAAG,KAAK,CAAC,KAAK,CAAC;gCAC3D,IAAI,IAAI,CAAC,UAAU,IAAI,KAAK,CAAC,KAAK,KAAK,SAAS;oCAAE,MAAM,CAAC,IAAI,CAAC,UAAU,CAAC,GAAG,KAAK,CAAC,KAAK,CAAC;gCACxF,GAAG,GAAG,MAAM,CAAC;4BACf,CAAC;4BACD,MAAM,MAAM,GAAG,MAAM,CAAC,SAAS,CAAC,GAAG,CAAC,CAAC;4BACrC,IAAI,CAAC,MAAM,CAAC,OAAO;gCAAE,MAAM,IAAI,QAAQ,CAAC,QAAQ,CAAC,MAAM,EAAE,kBAAkB,EAAE,cAAc,CAAC,CAAC;4BAC7F,OAAO,CAAC,OAAO,CAAC,MAAM,CAAC,IAA8B,CAAC,CAAC;4BACvD,IAAI,KAAK,CAAC,KAAK,KAAK,MAAM;gCAAE,OAAO;wBACrC,CAAC;oBACH,CAAC;oBAAC,OAAO,KAAK,EAAE,CAAC;wBACf,IAAI,UAAU,CAAC,MAAM,CAAC,OAAO,IAAI,KAAK,YAAY,YAAY,IAAI,KAAK,CAAC,IAAI,KAAK,YAAY;4BAAE,OAAO;wBACtG,OAAO,CAAC,OAAO,EAAE,CAAC,KAAK,YAAY,KAAK,CAAC,CAAC,CAAC,KAAK,CAAC,CAAC,CAAC,IAAI,KAAK,CAAC,QAAQ,CAAC,CAAC,CAAC;wBACxE,IAAI,KAAK,YAAY,gBAAgB,IAAI,KAAK,YAAY,QAAQ,IAAI,CAAC,KAAK,CAAC,MAAM,KAAK,kBAAkB,IAAI,KAAK,CAAC,MAAM,GAAG,GAAG,IAAI,KAAK,CAAC,MAAM,KAAK,GAAG,CAAC;4BAAE,OAAO;oBACpK,CAAC;oBACD,QAAQ,EAAE,CAAC;oBACX,MAAM,gBAAgB,CAAC,IAAI,CAAC,GAAG,CAAC,KAAK,EAAE,KAAK,GAAG,CAAC,IAAI,IAAI,CAAC,GAAG,CAAC,QAAQ,GAAG,CAAC,EAAE,CAAC,CAAC,CAAC,EAAE,UAAU,CAAC,MAAM,CAAC,CAAC;gBACrG,CAAC;YACH,CAAC;oBAAS,CAAC;gBACT,OAAO,CAAC,MAAM,EAAE,mBAAmB,CAAC,OAAO,EAAE,KAAK,CAAC,CAAC;gBACpD,OAAO,CAAC,YAAY,EAAE,CAAC,QAAQ,CAAC,CAAC;YACnC,CAAC;QACH,CAAC,CAAC,EAAE,CAAC;QACL,OAAO,EAAE,KAAK,EAAE,IAAI,EAAE,CAAC;IACzB,CAAC;IAED,2FAA2F;IAC3F,KAAK,CAAC,QAAQ,CAAqE,SAAoB,EAAE,GAAG,IAA0B;QACpI,IAAI,SAAS,CAAC,IAAI,KAAK,MAAM,IAAI,SAAS,CAAC,IAAI,KAAK,KAAK;YAAE,MAAM,IAAI,KAAK,CAAC,aAAa,SAAS,CAAC,EAAE,oBAAoB,CAAC,CAAC;QAC1H,MAAM,MAAM,GAAG,SAAS,CAAC,KAAK,CAAC,KAAK,CAAC,IAAI,CAAC,CAAC,CAAC,CAAW,CAAC;QACxD,MAAM,QAAQ,GAAG,MAAM,IAAI,CAAC,KAAK,CAAC,SAAS,EAAE,MAAM,EAAE,IAAI,CAAC,CAAC,CAAC,IAAI,EAAE,CAAC,CAAC;QACpE,IAAI,CAAC,QAAQ,CAAC,EAAE;YAAE,MAAM,MAAM,IAAI,CAAC,KAAK,CAAC,SAAS,EAAE,QAAQ,CAAC,CAAC;QAC9D,MAAM,IAAI,CAAC,qBAAqB,CAAC,SAAS,EAAE,QAAQ,CAAC,CAAC;QACtD,MAAM,QAAQ,GAAG,SAAS,CAAC,UAAU,EAAE,CAAC,QAAQ,CAAC,MAAM,CAAC,IAAI,EAAE,CAAC;QAC/D,MAAM,WAAW,GAAG,QAAQ,CAAC,OAAO,CAAC,GAAG,CAAC,cAAc,CAAC,EAAE,KAAK,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,CAAC,IAAI,EAAE,CAAC,WAAW,EAAE,CAAC;QAC7F,MAAM,gBAAgB,GAAG,QAAQ,CAAC,IAAI,CAAC,SAAS,CAAC,EAAE;YACjD,MAAM,QAAQ,GAAG,SAAS,CAAC,KAAK,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,CAAC,IAAI,EAAE,CAAC,WAAW,EAAE,CAAC;YAC9D,IAAI,CAAC,WAAW,IAAI,CAAC,sBAAsB,CAAC,IAAI,CAAC,WAAW,CAAC;gBAAE,OAAO,KAAK,CAAC;YAC5E,OAAO,QAAQ,KAAK,WAAW,IAAI,QAAQ,KAAK,KAAK,IAAI,QAAQ,CAAC,QAAQ,CAAC,IAAI,CAAC,IAAI,WAAW,CAAC,UAAU,CAAC,QAAQ,CAAC,KAAK,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,CAAC,CAAC;QACpI,CAAC,CAAC,CAAC;QACH,IAAI,CAAC,SAAS,CAAC,SAAS,CAAC,QAAQ,CAAC,MAAM,CAAC,IAAI,CAAC,gBAAgB,EAAE,CAAC;YAC/D,MAAM,QAAQ,CAAC,IAAI,EAAE,MAAM,EAAE,CAAC;YAC9B,MAAM,IAAI,QAAQ,CAAC,QAAQ,CAAC,MAAM,EAAE,kBAAkB,EAAE,WAAW,CAAC,CAAC;QACvE,CAAC;QACD,OAAO,QAAQ,CAAC;IAClB,CAAC;IAEO,KAAK,CAAC,OAAO,CAAiC,SAAoB,EAAE,KAAc,EAAE,OAAO,GAAqB,EAAE,EAAE,OAAO,GAAyB,MAAM;QAChK,IAAI,SAAS,CAAC,IAAI,KAAK,OAAO;YAAE,MAAM,IAAI,KAAK,CAAC,aAAa,SAAS,CAAC,EAAE,iBAAiB,SAAS,CAAC,IAAI,UAAU,CAAC,CAAC;QACpH,MAAM,MAAM,GAAG,SAAS,CAAC,KAAK,CAAC,KAAK,CAAC,KAAK,CAAW,CAAC;QACtD,MAAM,QAAQ,GAAG,MAAM,IAAI,CAAC,KAAK,CAAC,SAAS,EAAE,MAAM,EAAE,OAAO,CAAC,CAAC;QAC9D,IAAI,CAAC,QAAQ,CAAC,EAAE;YAAE,MAAM,MAAM,IAAI,CAAC,KAAK,CAAC,SAAS,EAAE,QAAQ,CAAC,CAAC;QAC9D,MAAM,IAAI,CAAC,qBAAqB,CAAC,SAAS,EAAE,QAAQ,CAAC,CAAC;QACtD,MAAM,MAAM,GAAG,SAAS,CAAC,SAAS,CAAC,QAAQ,CAAC,MAAM,CAAC,CAAC;QACpD,IAAI,CAAC,MAAM;YAAE,MAAM,IAAI,QAAQ,CAAC,QAAQ,CAAC,MAAM,EAAE,mBAAmB,EAAE,cAAc,CAAC,CAAC;QACtF,IAAI,GAAY,CAAC;QACjB,IAAI,QAAQ,CAAC,MAAM,KAAK,GAAG,EAAE,CAAC;YAC5B,IAAI,CAAC;gBAAC,GAAG,GAAG,MAAM,QAAQ,CAAC,IAAI,EAAE,CAAC;YAAC,CAAC;YAAC,MAAM,CAAC;gBAAC,MAAM,IAAI,QAAQ,CAAC,QAAQ,CAAC,MAAM,EAAE,kBAAkB,EAAE,WAAW,CAAC,CAAC;YAAC,CAAC;QACtH,CAAC;QACD,MAAM,MAAM,GAAG,MAAM,CAAC,SAAS,CAAC,GAAG,CAAC,CAAC;QACrC,IAAI,CAAC,MAAM,CAAC,OAAO;YAAE,MAAM,IAAI,QAAQ,CAAC,QAAQ,CAAC,MAAM,EAAE,kBAAkB,EAAE,YAAY,CAAC,CAAC;QAC3F,MAAM,IAAI,CAAC,qBAAqB,CAAC,SAAS,EAAE,QAAQ,CAAC,CAAC;QACtD,OAAO,EAAE,IAAI,EAAE,MAAM,CAAC,IAA8B,EAAE,MAAM,EAAE,QAAQ,CAAC,MAAM,EAAE,OAAO,EAAE,QAAQ,CAAC,OAAO,EAAE,CAAC;IAC7G,CAAC;IAEO,KAAK,CAAC,qBAAqB,CAAC,SAAuB,EAAE,QAAkB;QAC7E,IAAI,SAAS,CAAC,MAAM,CAAC,IAAI,KAAK,QAAQ,IAAI,IAAI,CAAC,OAAO,CAAC,MAAM,IAAI,IAAI,CAAC,gBAAgB,CAAC,GAAG,CAAC,QAAQ,CAAC,KAAK,IAAI,CAAC,eAAe;YAAE,OAAO;QACtI,IAAI,CAAC,QAAQ,CAAC,QAAQ;YAAE,MAAM,QAAQ,CAAC,IAAI,EAAE,MAAM,EAAE,CAAC;QACtD,MAAM,IAAI,YAAY,CAAC,gBAAgB,EAAE,YAAY,CAAC,CAAC;IACzD,CAAC;IAEO,KAAK,CAAC,KAAK,CAAC,SAAuB,EAAE,KAAa,EAAE,OAAyB;QACnF,OAAO,CAAC,MAAM,EAAE,cAAc,EAAE,CAAC;QACjC,MAAM,eAAe,GAAG,IAAI,CAAC,eAAe,CAAC;QAC7C,MAAM,OAAO,GAAG,IAAI,OAAO,CAAC,OAAO,CAAC,OAAO,CAAC,CAAC;QAC7C,KAAK,MAAM,CAAC,GAAG,EAAE,KAAK,CAAC,IAAI,MAAM,CAAC,OAAO,CAAC,KAAK,CAAC,OAAO,IAAI,EAAE,CAAC;YAAE,IAAI,KAAK,KAAK,SAAS,IAAI,KAAK,KAAK,IAAI;gBAAE,OAAO,CAAC,GAAG,CAAC,GAAG,EAAE,MAAM,CAAC,KAAK,CAAC,CAAC,CAAC;QAC3I,OAAO,CAAC,MAAM,CAAC,eAAe,CAAC,CAAC;QAChC,OAAO,CAAC,MAAM,CAAC,QAAQ,CAAC,CAAC;QACzB,OAAO,CAAC,MAAM,CAAC,cAAc,CAAC,CAAC;QAC/B,OAAO,CAAC,GAAG,CAAC,QAAQ,EAAE,SAAS,CAAC,IAAI,KAAK,MAAM,IAAI,SAAS,CAAC,IAAI,KAAK,KAAK;YACzE,CAAC,CAAC,CAAC,GAAG,IAAI,GAAG,CAAC,MAAM,CAAC,MAAM,CAAC,SAAS,CAAC,UAAU,IAAI,EAAE,CAAC,CAAC,IAAI,EAAE,CAAC,CAAC,CAAC,IAAI,CAAC,IAAI,CAAC;YAC3E,CAAC,CAAC,SAAS,CAAC,IAAI,KAAK,KAAK,CAAC,CAAC,CAAC,mBAAmB,CAAC,CAAC,CAAC,kBAAkB,CAAC,CAAC;QACzE,IAAI,IAAI,CAAC,OAAO,CAAC,MAAM,EAAE,CAAC;YACxB,IAAI,CAAC,SAAS,CAAC,MAAM,CAAC,OAAO;gBAAE,MAAM,IAAI,QAAQ,CAAC,GAAG,EAAE,kBAAkB,EAAE,YAAY,CAAC,CAAC;YACzF,OAAO,CAAC,GAAG,CAAC,eAAe,EAAE,SAAS,GAAG,IAAI,CAAC,OAAO,CAAC,MAAM,CAAC,CAAC;QAChE,CAAC;aAAM,IAAI,CAAC,CAAC,KAAK,EAAE,MAAM,EAAE,SAAS,CAAC,CAAC,QAAQ,CAAC,SAAS,CAAC,MAAM,CAAC,IAAI,SAAS,CAAC,MAAM,CAAC,IAAI,KAAK,QAAQ,EAAE,CAAC;YACxG,IAAI,CAAC,IAAI,CAAC,SAAS;gBAAE,MAAM,IAAI,QAAQ,CAAC,GAAG,EAAE,iBAAiB,EAAE,UAAU,CAAC,CAAC;YAC5E,OAAO,CAAC,GAAG,CAAC,cAAc,EAAE,IAAI,CAAC,SAAS,CAAC,CAAC;QAC9C,CAAC;QACD,IAAI,IAA0B,CAAC;QAC/B,IAAI,KAAK,CAAC,IAAI,KAAK,SAAS,EAAE,CAAC;YAC7B,IAAI,SAAS,CAAC,IAAI,KAAK,WAAW,EAAE,CAAC;gBACnC,OAAO,CAAC,MAAM,CAAC,cAAc,CAAC,CAAC;gBAC/B,MAAM,IAAI,GAAG,IAAI,QAAQ,EAAE,CAAC;gBAC5B,KAAK,MAAM,CAAC,IAAI,EAAE,KAAK,CAAC,IAAI,MAAM,CAAC,OAAO,CAAC,KAAK,CAAC,IAA+B,CAAC,EAAE,CAAC;oBAClF,IAAI,KAAK,KAAK,SAAS;wBAAE,SAAS;oBAClC,KAAK,MAAM,IAAI,IAAI,KAAK,CAAC,OAAO,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC,KAAK,CAAC,EAAE,CAAC;wBAC1D,IAAI,IAAI,YAAY,IAAI;4BAAE,IAAI,CAAC,MAAM,CAAC,IAAI,EAAE,IAAI,CAAC,CAAC;6BAC7C,IAAI,OAAO,IAAI,KAAK,QAAQ,IAAI,OAAO,IAAI,KAAK,QAAQ,IAAI,OAAO,IAAI,KAAK,SAAS;4BAAE,IAAI,CAAC,MAAM,CAAC,IAAI,EAAE,MAAM,CAAC,IAAI,CAAC,CAAC,CAAC;;4BACvH,MAAM,IAAI,KAAK,CAAC,gCAAgC,IAAI,EAAE,CAAC,CAAC;oBAC/D,CAAC;gBACH,CAAC;gBACD,IAAI,GAAG,IAAI,CAAC;YACd,CAAC;iBACI,CAAC;gBAAC,OAAO,CAAC,GAAG,CAAC,cAAc,EAAE,kBAAkB,CAAC,CAAC;gBAAC,IAAI,GAAG,IAAI,CAAC,SAAS,CAAC,KAAK,CAAC,IAAI,CAAC,CAAC;YAAC,CAAC;QAC9F,CAAC;QACD,MAAM,GAAG,GAAG,CAAC,IAAI,CAAC,OAAO,CAAC,OAAO,IAAI,EAAE,CAAC,CAAC,OAAO,CAAC,KAAK,EAAE,EAAE,CAAC,GAAG,OAAO,CAAC,SAAS,EAAE,KAAK,CAAC,CAAC;QACxF,MAAM,IAAI,GAAgB,EAAE,MAAM,EAAE,SAAS,CAAC,MAAM,EAAE,WAAW,EAAE,IAAI,CAAC,OAAO,CAAC,WAAW,IAAI,CAAC,IAAI,CAAC,OAAO,CAAC,MAAM,CAAC,CAAC,CAAC,MAAM,CAAC,CAAC,CAAC,SAAS,CAAC,EAAE,OAAO,EAAE,IAAI,EAAE,MAAM,EAAE,OAAO,CAAC,MAAM,EAAE,KAAK,EAAE,UAAU,EAAE,CAAC;QACtM,MAAM,QAAQ,GAAG,SAAS,CAAC,IAAI,KAAK,WAAW,IAAI,OAAO,CAAC,UAAU;YACnE,CAAC,CAAC,MAAM,IAAI,CAAC,UAAU,CAAC,GAAG,EAAE,IAAI,EAAE,OAAO,CAAC,UAAU,CAAC;YACtD,CAAC,CAAC,MAAM,CAAC,IAAI,CAAC,OAAO,CAAC,SAAS,IAAI,UAAU,CAAC,KAAK,CAAC,CAAC,GAAG,EAAE,IAAI,CAAC,CAAC;QAClE,IAAI,CAAC,gBAAgB,CAAC,GAAG,CAAC,QAAQ,EAAE,eAAe,CAAC,CAAC;QACrD,IAAI,OAAO,CAAC,MAAM,EAAE,OAAO,EAAE,CAAC;YAC5B,MAAM,QAAQ,CAAC,IAAI,EAAE,MAAM,EAAE,CAAC;YAC9B,OAAO,CAAC,MAAM,CAAC,cAAc,EAAE,CAAC;QAClC,CAAC;QACD,OAAO,QAAQ,CAAC;IAClB,CAAC;IAEO,UAAU,CAAC,GAAW,EAAE,IAAiB,EAAE,QAAmC;QACpF,MAAM,GAAG,GAAG,IAAI,CAAC,OAAO,CAAC,UAAU,EAAE,EAAE,IAAI,IAAI,cAAc,EAAE,CAAC;QAChE,OAAO,IAAI,OAAO,CAAC,CAAC,OAAO,EAAE,MAAM,EAAE,EAAE;YACrC,GAAG,CAAC,IAAI,CAAC,IAAI,CAAC,MAAO,EAAE,GAAG,CAAC,CAAC;YAC5B,MAAM,MAAM,GAAG,IAAI,GAAG,CAAC,GAAG,EAAE,UAAU,CAAC,QAAQ,EAAE,IAAI,IAAI,kBAAkB,CAAC,CAAC;YAC7E,GAAG,CAAC,eAAe,GAAG,IAAI,CAAC,WAAW,KAAK,SAAS,IAAI,IAAI,CAAC,WAAW,KAAK,aAAa,IAAI,MAAM,CAAC,MAAM,KAAK,UAAU,CAAC,QAAQ,EAAE,MAAM,CAAC;YAC5I,IAAI,OAAO,CAAC,IAAI,CAAC,OAAO,CAAC,CAAC,OAAO,CAAC,CAAC,KAAK,EAAE,IAAI,EAAE,EAAE,CAAC,GAAG,CAAC,gBAAgB,CAAC,IAAI,EAAE,KAAK,CAAC,CAAC,CAAC;YACtF,MAAM,OAAO,GAAG,GAAG,EAAE;gBACnB,IAAI,CAAC,MAAM,EAAE,mBAAmB,CAAC,OAAO,EAAE,KAAK,CAAC,CAAC;gBACjD,GAAG,CAAC,MAAM,CAAC,mBAAmB,CAAC,UAAU,EAAE,MAAM,CAAC,CAAC;gBACnD,GAAG,CAAC,mBAAmB,CAAC,MAAM,EAAE,IAAI,CAAC,CAAC;gBACtC,GAAG,CAAC,mBAAmB,CAAC,OAAO,EAAE,MAAM,CAAC,CAAC;gBACzC,GAAG,CAAC,mBAAmB,CAAC,OAAO,EAAE,OAAO,CAAC,CAAC;gBAC1C,GAAG,CAAC,mBAAmB,CAAC,SAAS,EAAE,OAAO,CAAC,CAAC;YAC9C,CAAC,CAAC;YACF,MAAM,MAAM,GAAG,CAAC,KAAoB,EAAE,EAAE,GAAG,IAAI,KAAK,CAAC,gBAAgB,IAAI,KAAK,CAAC,KAAK,GAAG,CAAC;gBAAE,QAAQ,CAAC,IAAI,CAAC,GAAG,CAAC,GAAG,EAAE,IAAI,CAAC,KAAK,CAAC,KAAK,CAAC,MAAM,GAAG,KAAK,CAAC,KAAK,GAAG,GAAG,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC;YACnK,MAAM,OAAO,GAAG,GAAG,EAAE,GAAG,OAAO,EAAE,CAAC,CAAC,MAAM,CAAC,IAAI,CAAC,MAAM,EAAE,MAAM,IAAI,IAAI,YAAY,CAAC,KAAK,EAAE,YAAY,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC;YAC3G,MAAM,KAAK,GAAG,GAAG,EAAE,GAAG,OAAO,EAAE,CAAC,CAAC,GAAG,CAAC,KAAK,EAAE,CAAC,CAAC,OAAO,EAAE,CAAC,CAAC,CAAC,CAAC;YAC3D,MAAM,MAAM,GAAG,GAAG,EAAE,GAAG,OAAO,EAAE,CAAC,CAAC,MAAM,CAAC,IAAI,QAAQ,CAAC,CAAC,EAAE,eAAe,EAAE,cAAc,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC;YAC9F,MAAM,OAAO,GAAG,GAAG,EAAE,GAAG,OAAO,EAAE,CAAC,CAAC,MAAM,CAAC,IAAI,QAAQ,CAAC,CAAC,EAAE,SAAS,EAAE,MAAM,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC;YACjF,MAAM,IAAI,GAAG,GAAG,EAAE;gBAChB,OAAO,EAAE,CAAC;gBACV,MAAM,OAAO,GAAG,IAAI,OAAO,EAAE,CAAC;gBAC9B,KAAK,MAAM,IAAI,IAAI,CAAC,cAAc,EAAE,cAAc,EAAE,aAAa,CAAC,EAAE,CAAC;oBACnE,MAAM,KAAK,GAAG,GAAG,CAAC,iBAAiB,CAAC,IAAI,CAAC,CAAC;oBAC1C,IAAI,KAAK;wBAAE,OAAO,CAAC,GAAG,CAAC,IAAI,EAAE,KAAK,CAAC,CAAC;gBACtC,CAAC;gBACD,IAAI,CAAC;oBAAC,OAAO,CAAC,IAAI,QAAQ,CAAC,GAAG,CAAC,MAAM,KAAK,GAAG,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,GAAG,CAAC,YAAY,EAAE,EAAE,MAAM,EAAE,GAAG,CAAC,MAAM,EAAE,OAAO,EAAE,CAAC,CAAC,CAAC;gBAAC,CAAC;gBAC7G,OAAO,KAAK,EAAE,CAAC;oBAAC,MAAM,CAAC,KAAK,CAAC,CAAC;gBAAC,CAAC;YAClC,CAAC,CAAC;YACF,IAAI,CAAC,MAAM,EAAE,gBAAgB,CAAC,OAAO,EAAE,KAAK,EAAE,EAAE,IAAI,EAAE,IAAI,EAAE,CAAC,CAAC;YAC9D,GAAG,CAAC,MAAM,CAAC,gBAAgB,CAAC,UAAU,EAAE,MAAM,CAAC,CAAC;YAChD,GAAG,CAAC,gBAAgB,CAAC,MAAM,EAAE,IAAI,CAAC,CAAC;YACnC,GAAG,CAAC,gBAAgB,CAAC,OAAO,EAAE,MAAM,CAAC,CAAC;YACtC,GAAG,CAAC,gBAAgB,CAAC,OAAO,EAAE,OAAO,CAAC,CAAC;YACvC,GAAG,CAAC,gBAAgB,CAAC,SAAS,EAAE,OAAO,CAAC,CAAC;YACzC,IAAI,IAAI,CAAC,MAAM,EAAE,OAAO,EAAE,CAAC;gBAAC,KAAK,EAAE,CAAC;gBAAC,OAAO;YAAC,CAAC;YAC9C,IAAI,CAAC;gBAAC,GAAG,CAAC,IAAI,CAAC,IAAI,CAAC,IAAgB,CAAC,CAAC;YAAC,CAAC;YAAC,MAAM,CAAC;gBAAC,MAAM,EAAE,CAAC;YAAC,CAAC;QAC9D,CAAC,CAAC,CAAC;IACL,CAAC;IAEO,KAAK,CAAC,KAAK,CAAC,SAAuB,EAAE,QAAkB;QAC7D,IAAI,QAAQ,CAAC,MAAM,KAAK,GAAG,IAAI,SAAS,CAAC,MAAM,CAAC,IAAI,KAAK,QAAQ,IAAI,IAAI,CAAC,gBAAgB,CAAC,GAAG,CAAC,QAAQ,CAAC,KAAK,IAAI,CAAC,eAAe;YAAE,IAAI,CAAC,aAAa,EAAE,CAAC;QACxJ,IAAI,KAAc,CAAC;QACnB,IAAI,CAAC;YAAC,KAAK,GAAG,MAAM,QAAQ,CAAC,IAAI,EAAE,CAAC;QAAC,CAAC;QAAC,MAAM,CAAC;YAAC,OAAO,IAAI,QAAQ,CAAC,QAAQ,CAAC,MAAM,EAAE,kBAAkB,EAAE,aAAa,CAAC,CAAC;QAAC,CAAC;QACzH,MAAM,MAAM,GAAG,SAAS,CAAC,MAAM,CAAC,QAAQ,CAAC,MAAM,CAAC,CAAC;QACjD,IAAI,MAAM,EAAE,CAAC;YACX,MAAM,MAAM,GAAG,MAAM,CAAC,SAAS,CAAC,KAAK,CAAC,CAAC;YACvC,IAAI,CAAC,MAAM,CAAC,OAAO;gBAAE,OAAO,IAAI,QAAQ,CAAC,QAAQ,CAAC,MAAM,EAAE,kBAAkB,EAAE,cAAc,CAAC,CAAC;YAC9F,KAAK,GAAG,MAAM,CAAC,IAAI,CAAC;QACtB,CAAC;QACD,IAAI,CAAC,KAAK,IAAI,OAAO,KAAK,KAAK,QAAQ,IAAI,CAAC,CAAC,MAAM,IAAI,KAAK,CAAC,IAAI,OAAO,KAAK,CAAC,IAAI,KAAK,QAAQ,IAAI,CAAC,CAAC,SAAS,IAAI,KAAK,CAAC,IAAI,OAAO,KAAK,CAAC,OAAO,KAAK,QAAQ;YAAE,OAAO,IAAI,QAAQ,CAAC,QAAQ,CAAC,MAAM,EAAE,kBAAkB,EAAE,aAAa,CAAC,CAAC;QACvO,MAAM,KAAK,GAAG,IAAI,QAAQ,CAAC,QAAQ,CAAC,MAAM,EAAE,KAAK,CAAC,IAAI,EAAE,KAAK,CAAC,OAAO,CAAC,CAAC;QACvE,KAAK,CAAC,SAAS,GAAG,QAAQ,CAAC,OAAO,CAAC,GAAG,CAAC,cAAc,CAAC,IAAI,SAAS,CAAC;QACpE,IAAI,IAAI,IAAI,KAAK,IAAI,OAAO,KAAK,CAAC,EAAE,KAAK,QAAQ;YAAE,KAAK,CAAC,OAAO,GAAG,KAAK,CAAC,EAAE,CAAC;QAC5E,IAAI,WAAW,IAAI,KAAK,IAAI,OAAO,KAAK,CAAC,SAAS,KAAK,SAAS;YAAE,KAAK,CAAC,SAAS,GAAG,KAAK,CAAC,SAAS,CAAC;QACpG,IAAI,SAAS,IAAI,KAAK,IAAI,OAAO,KAAK,CAAC,OAAO,KAAK,SAAS;YAAE,KAAK,CAAC,OAAO,GAAG,KAAK,CAAC,OAAO,CAAC;QAC5F,IAAI,OAAO,IAAI,KAAK,IAAI,OAAO,KAAK,CAAC,KAAK,KAAK,SAAS;YAAE,KAAK,CAAC,KAAK,GAAG,KAAK,CAAC,KAAK,CAAC;QACpF,KAAK,CAAC,OAAO,GAAG,KAAK,CAAC;QACtB,OAAO,KAAK,CAAC;IACf,CAAC;CACF"}
|
|
1
|
+
{"version":3,"file":"goa.js","sourceRoot":"","sources":["../src/goa.ts"],"names":[],"mappings":"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","sourcesContent":["import type { GoaInputOf, GoaOperation, GoaOutputOf } from '@fudanda/shared/core';\nimport { readSSE, SSEProtocolError, waitForReconnect } from './goa-stream';\n\nexport interface GoaClientOptions {\n baseURL?: string;\n credentials?: RequestCredentials;\n transport?: typeof fetch;\n xhrFactory?: () => XMLHttpRequest;\n apiKey?: string;\n csrfToken?: string;\n onUnauthorized?: () => void;\n}\n\n/** Safe transport metadata: descriptor IDs/templates, never URL values or data. */\nexport interface GoaRequestObservation {\n readonly operation: string;\n readonly method: string;\n readonly route: string;\n readonly status: number;\n readonly outcome: 'success' | 'http_error' | 'network_error' | 'canceled';\n /** Time to response headers, including uploads. Does not consume stream bodies. */\n readonly durationMs: number;\n}\n\nexport interface GoaRequestOptions {\n signal?: AbortSignal | null;\n headers?: HeadersInit;\n}\n\nexport interface GoaUploadOptions extends GoaRequestOptions {\n onProgress?: (percent: number) => void;\n}\n\nexport type GoaConnectionState = 'connecting' | 'connected' | 'reconnecting' | 'closed';\nexport interface GoaStreamOptions<Data> extends GoaRequestOptions {\n onEvent: (event: Data) => void;\n onConnection?: (state: GoaConnectionState) => void;\n onError?: (error: Error) => void;\n reconnectDelay?: number;\n}\nexport interface GoaSubscription { close(): void; done: Promise<void> }\n\nexport class GoaError extends Error {\n readonly name = 'GoaError';\n errorId?: string;\n requestId?: string;\n temporary = false;\n timeout = false;\n fault = false;\n details?: unknown;\n\n constructor(readonly status: number, readonly reason: string, message: string) { super(message); }\n}\n\ntype Arguments<Operation extends GoaOperation> = undefined extends GoaInputOf<Operation>\n ? [input?: GoaInputOf<Operation>, options?: GoaRequestOptions]\n : [input: GoaInputOf<Operation>, options?: GoaRequestOptions];\ntype UploadArguments<Operation extends GoaOperation> = [input: GoaInputOf<Operation>, options?: GoaUploadOptions];\n\ntype Values = { params?: Record<string, unknown>; query?: Record<string, unknown>; headers?: Record<string, unknown>; body?: unknown };\n\nexport interface GoaResponse<Data> { data: Data; status: number; headers: Headers }\n\nfunction pathFor(operation: GoaOperation, input: Values): string {\n if (!operation.path.startsWith('/api/v1/') || /[?#\\\\\\s]/.test(operation.path) || operation.path.split('/').some(part => part === '.' || part === '..')) throw new Error('Invalid generated API path');\n const path = operation.path.replace(/\\{(\\*?\\w+)\\}/g, (_match, name: string) => {\n const wildcard = name.startsWith('*');\n const value = input.params?.[wildcard ? name.slice(1) : name];\n if (value === undefined || value === null) throw new Error(`Missing path parameter: ${name}`);\n if (!wildcard) return encodeURIComponent(String(value));\n const parts = String(value).split('/');\n if (parts.some(part => part === '.' || part === '..')) throw new Error('Invalid wildcard path');\n return parts.map(encodeURIComponent).join('/');\n });\n const query = new URLSearchParams();\n for (const [key, value] of Object.entries(input.query ?? {})) {\n if (value === undefined || value === null) continue;\n for (const item of Array.isArray(value) ? value : [value]) query.append(key, String(item));\n }\n return path + (query.size ? '?' + query.toString() : '');\n}\n\n/** Native Goa HTTP client. Generated schemas own request and response shapes. */\nexport class GoaClient {\n private csrfToken: string;\n private sessionRevision = 0;\n private readonly responseSessions = new WeakMap<Response, number>();\n private readonly unauthorizedListeners = new Set<() => void>();\n private readonly requestListeners = new Set<(event: GoaRequestObservation) => void>();\n\n constructor(private readonly options: GoaClientOptions = {}) {\n const baseURL = options.baseURL ?? '';\n if (baseURL && (!/^https?:\\/\\//.test(baseURL) || new URL(baseURL).origin !== baseURL.replace(/\\/$/, ''))) throw new Error('baseURL must be an HTTP origin');\n if (options.apiKey && !/^arc_[a-f0-9]{64}$/.test(options.apiKey)) throw new Error('Invalid ArcBase API Key');\n this.csrfToken = options.csrfToken ?? '';\n }\n\n setCSRFToken(token: string): void { if (token !== this.csrfToken) { this.csrfToken = token; this.sessionRevision++; } }\n /** Resolve server-relative public resources against this client's API origin. */\n resolveURL(path: string): string {\n if (!path.startsWith('/') || path.startsWith('//') || path.includes('\\\\')) throw new Error('Expected a server-relative URL');\n return (this.options.baseURL ?? '').replace(/\\/$/, '') + path;\n }\n clearSession(): void { this.csrfToken = ''; this.sessionRevision++; }\n sessionHeaders(): Record<string,string> { return this.csrfToken ? { 'X-CSRF-Token': this.csrfToken } : {}; }\n subscribeUnauthorized(listener: () => void): () => void {\n this.unauthorizedListeners.add(listener);\n return () => { this.unauthorizedListeners.delete(listener); };\n }\n subscribeRequests(listener: (event: GoaRequestObservation) => void): () => void {\n this.requestListeners.add(listener);\n return () => { this.requestListeners.delete(listener); };\n }\n private observeRequest(event: GoaRequestObservation): void {\n for (const listener of this.requestListeners) {\n // Monitoring is optional and must never change request/error semantics.\n try { void Promise.resolve(listener(event)).catch(() => {}); } catch { /* host telemetry failed */ }\n }\n }\n expireSession(): void {\n this.clearSession();\n for (const listener of this.unauthorizedListeners) listener();\n this.options.onUnauthorized?.();\n }\n\n call<Operation extends GoaOperation>(operation: Operation, ...args: Arguments<Operation>): Promise<GoaOutputOf<Operation>> {\n return this.execute(operation, args[0], args[1]).then(response => response.data);\n }\n\n callWithResponse<Operation extends GoaOperation>(operation: Operation, ...args: Arguments<Operation>): Promise<GoaResponse<GoaOutputOf<Operation>>> {\n return this.execute(operation, args[0], args[1]);\n }\n\n upload<Operation extends GoaOperation & { readonly kind: 'multipart' }>(operation: Operation, ...args: UploadArguments<Operation>): Promise<GoaOutputOf<Operation>> {\n return this.execute(operation, args[0], args[1], 'multipart').then(response => response.data);\n }\n\n /** Observe a generated GET stream; closing it never cancels domain execution. */\n stream<Operation extends GoaOperation & { readonly kind: 'sse' }>(operation: Operation, input: GoaInputOf<Operation>, options: GoaStreamOptions<GoaOutputOf<Operation>>): GoaSubscription {\n if (operation.kind !== 'sse' || operation.method !== 'GET') throw new Error('Expected a GET SSE operation');\n const values = operation.input.parse(input) as Values;\n const controller = new AbortController();\n const streamRevision = this.sessionRevision;\n const abort = () => controller.abort(options.signal?.reason);\n options.signal?.addEventListener('abort', abort, { once: true });\n if (options.signal?.aborted) abort();\n const close = () => controller.abort();\n const done = (async () => {\n const initialHeaders = new Headers();\n for (const [key, value] of Object.entries(values.headers ?? {})) if (value !== undefined && value !== null) initialHeaders.set(key, String(value));\n let cursor = initialHeaders.get('Last-Event-ID');\n let delay = Math.min(15000, Math.max(250, options.reconnectDelay ?? 1000));\n let attempts = 0;\n try {\n while (!controller.signal.aborted) {\n if (operation.access.kind !== 'public' && this.sessionRevision !== streamRevision) return;\n options.onConnection?.(attempts ? 'reconnecting' : 'connecting');\n try {\n const resumed = { ...values, headers: { ...values.headers } };\n if (operation.sse?.requestIdField && cursor !== null) resumed.headers['Last-Event-ID'] = cursor;\n if (!operation.input.safeParse(resumed).success) throw new GoaError(400, 'invalid_response', '服务端续传标识不符合契约');\n const response = await this.fetch(operation, resumed, { ...options, signal: controller.signal });\n if (!response.ok) throw await this.error(operation, response);\n await this.requireCurrentSession(operation, response);\n const schema = operation.responses[response.status];\n if (!schema || !response.body || response.headers.get('Content-Type')?.split(';')[0].trim().toLowerCase() !== 'text/event-stream') {\n await response.body?.cancel();\n throw new GoaError(response.status, 'invalid_response', '服务端流式响应不符合契约');\n }\n options.onConnection?.('connected');\n attempts = 0;\n for await (const frame of readSSE(response.body, controller.signal)) {\n if (operation.access.kind !== 'public' && this.sessionRevision !== streamRevision) return;\n if (frame.id !== undefined) cursor = frame.id;\n if (frame.retry !== undefined) delay = Math.min(15000, Math.max(250, frame.retry));\n if (frame.data === undefined) continue;\n if (frame.event === 'session-expired') {\n if (this.responseSessions.get(response) === this.sessionRevision) this.expireSession();\n return;\n }\n if (frame.event === 'denied') throw new GoaError(403, 'stream_denied', '订阅权限已失效');\n let raw: unknown;\n try { raw = JSON.parse(frame.data); }\n catch { throw new GoaError(response.status, 'invalid_response', '服务端流式事件格式错误'); }\n const wire = operation.sse;\n if (wire?.dataField) raw = { [wire.dataField]: raw };\n if (wire?.idField || wire?.eventField || wire?.retryField) {\n if (!raw || typeof raw !== 'object' || Array.isArray(raw)) throw new GoaError(response.status, 'invalid_response', '服务端流式事件格式错误');\n const mapped: Record<string, unknown> = { ...raw };\n if (wire.idField) mapped[wire.idField] = cursor ?? '';\n if (wire.eventField) mapped[wire.eventField] = frame.event;\n if (wire.retryField && frame.retry !== undefined) mapped[wire.retryField] = frame.retry;\n raw = mapped;\n }\n const parsed = schema.safeParse(raw);\n if (!parsed.success) throw new GoaError(response.status, 'invalid_response', '服务端流式事件不符合契约');\n options.onEvent(parsed.data as GoaOutputOf<Operation>);\n if (frame.event === 'done') return;\n }\n } catch (error) {\n if (controller.signal.aborted || error instanceof DOMException && error.name === 'AbortError') return;\n options.onError?.(error instanceof Error ? error : new Error('流式连接中断'));\n if (error instanceof SSEProtocolError || error instanceof GoaError && (error.reason === 'invalid_response' || error.status > 0 && error.status < 500 && error.status !== 429)) return;\n }\n attempts++;\n await waitForReconnect(Math.min(15000, delay * 2 ** Math.min(attempts - 1, 4)), controller.signal);\n }\n } finally {\n options.signal?.removeEventListener('abort', abort);\n options.onConnection?.('closed');\n }\n })();\n return { close, done };\n }\n\n /** The caller consumes or cancels the returned body; the transport never buffers files. */\n async download<Operation extends GoaOperation & { readonly kind: 'file' | 'csv' }>(operation: Operation, ...args: Arguments<Operation>): Promise<Response> {\n if (operation.kind !== 'file' && operation.kind !== 'csv') throw new Error(`Operation ${operation.id} is not a download`);\n const values = operation.input.parse(args[0]) as Values;\n const response = await this.fetch(operation, values, args[1] ?? {});\n if (!response.ok) throw await this.error(operation, response);\n await this.requireCurrentSession(operation, response);\n const declared = operation.mediaTypes?.[response.status] ?? [];\n const contentType = response.headers.get('Content-Type')?.split(';')[0].trim().toLowerCase();\n const matchesMediaType = declared.some(mediaType => {\n const expected = mediaType.split(';')[0].trim().toLowerCase();\n if (!contentType || !/^[^\\s/;]+\\/[^\\s/;]+$/.test(contentType)) return false;\n return expected === contentType || expected === '*/*' || expected.endsWith('/*') && contentType.startsWith(expected.slice(0, -1));\n });\n if (!operation.responses[response.status] || !matchesMediaType) {\n await response.body?.cancel();\n throw new GoaError(response.status, 'invalid_response', '文件响应不符合契约');\n }\n return response;\n }\n\n private async execute<Operation extends GoaOperation>(operation: Operation, input: unknown, options: GoaUploadOptions = {}, channel: 'json' | 'multipart' = 'json'): Promise<GoaResponse<GoaOutputOf<Operation>>> {\n if (operation.kind !== channel) throw new Error(`Operation ${operation.id} requires the ${operation.kind} channel`);\n const values = operation.input.parse(input) as Values;\n const response = await this.fetch(operation, values, options);\n if (!response.ok) throw await this.error(operation, response);\n await this.requireCurrentSession(operation, response);\n const schema = operation.responses[response.status];\n if (!schema) throw new GoaError(response.status, 'unexpected_status', '服务端返回了未声明的状态');\n let raw: unknown;\n if (response.status !== 204) {\n try { raw = await response.json(); } catch { throw new GoaError(response.status, 'invalid_response', '服务端响应格式错误'); }\n }\n const parsed = schema.safeParse(raw);\n if (!parsed.success) throw new GoaError(response.status, 'invalid_response', '服务端响应不符合契约');\n await this.requireCurrentSession(operation, response);\n return { data: parsed.data as GoaOutputOf<Operation>, status: response.status, headers: response.headers };\n }\n\n private async requireCurrentSession(operation: GoaOperation, response: Response): Promise<void> {\n if (operation.access.kind === 'public' || this.options.apiKey || this.responseSessions.get(response) === this.sessionRevision) return;\n if (!response.bodyUsed) await response.body?.cancel();\n throw new DOMException('会话已变更,已丢弃旧请求结果', 'AbortError');\n }\n\n private async fetch(operation: GoaOperation, input: Values, options: GoaUploadOptions): Promise<Response> {\n options.signal?.throwIfAborted();\n const sessionRevision = this.sessionRevision;\n const headers = new Headers(options.headers);\n for (const [key, value] of Object.entries(input.headers ?? {})) if (value !== undefined && value !== null) headers.set(key, String(value));\n headers.delete('Authorization');\n headers.delete('Cookie');\n headers.delete('X-CSRF-Token');\n headers.set('Accept', operation.kind === 'file' || operation.kind === 'csv'\n ? [...new Set(Object.values(operation.mediaTypes ?? {}).flat())].join(', ')\n : operation.kind === 'sse' ? 'text/event-stream' : 'application/json');\n if (this.options.apiKey) {\n if (!operation.apiKey.allowed) throw new GoaError(403, 'key_route_denied', '此接口需要浏览器会话');\n headers.set('Authorization', 'Bearer ' + this.options.apiKey);\n } else if (!['GET', 'HEAD', 'OPTIONS'].includes(operation.method) && operation.access.kind !== 'public') {\n if (!this.csrfToken) throw new GoaError(401, 'session_missing', '登录状态尚未恢复');\n headers.set('X-CSRF-Token', this.csrfToken);\n }\n let body: BodyInit | undefined;\n if (input.body !== undefined) {\n if (operation.kind === 'multipart') {\n headers.delete('Content-Type');\n const form = new FormData();\n for (const [name, value] of Object.entries(input.body as Record<string, unknown>)) {\n if (value === undefined) continue;\n for (const item of Array.isArray(value) ? value : [value]) {\n if (item instanceof Blob) form.append(name, item);\n else if (typeof item === 'string' || typeof item === 'number' || typeof item === 'boolean') form.append(name, String(item));\n else throw new Error(`Unsupported multipart field: ${name}`);\n }\n }\n body = form;\n }\n else { headers.set('Content-Type', 'application/json'); body = JSON.stringify(input.body); }\n }\n const url = this.resolveURL(pathFor(operation, input));\n const init: RequestInit = { method: operation.method, credentials: this.options.credentials ?? (this.options.apiKey ? 'omit' : 'include'), headers, body, signal: options.signal, cache: 'no-store' };\n const started = performance.now();\n let response: Response;\n try {\n response = operation.kind === 'multipart' && options.onProgress\n ? await this.sendUpload(url, init, options.onProgress)\n : await (this.options.transport ?? globalThis.fetch)(url, init);\n } catch (error) {\n this.observeRequest({operation: operation.id, method: operation.method, route: operation.path, status: 0, outcome: options.signal?.aborted ? 'canceled' : 'network_error', durationMs: performance.now() - started});\n throw error;\n }\n this.observeRequest({operation: operation.id, method: operation.method, route: operation.path, status: response.status, outcome: options.signal?.aborted ? 'canceled' : response.ok ? 'success' : 'http_error', durationMs: performance.now() - started});\n this.responseSessions.set(response, sessionRevision);\n if (options.signal?.aborted) {\n await response.body?.cancel();\n options.signal.throwIfAborted();\n }\n return response;\n }\n\n private sendUpload(url: string, init: RequestInit, progress: (percent: number) => void): Promise<Response> {\n const xhr = this.options.xhrFactory?.() ?? new XMLHttpRequest();\n return new Promise((resolve, reject) => {\n xhr.open(init.method!, url);\n const target = new URL(url, globalThis.location?.href ?? 'http://localhost');\n xhr.withCredentials = init.credentials === 'include' || init.credentials === 'same-origin' && target.origin === globalThis.location?.origin;\n new Headers(init.headers).forEach((value, name) => xhr.setRequestHeader(name, value));\n const cleanup = () => {\n init.signal?.removeEventListener('abort', abort);\n xhr.upload.removeEventListener('progress', report);\n xhr.removeEventListener('load', load);\n xhr.removeEventListener('error', failed);\n xhr.removeEventListener('abort', aborted);\n xhr.removeEventListener('timeout', timeout);\n };\n const report = (event: ProgressEvent) => { if (event.lengthComputable && event.total > 0) progress(Math.min(100, Math.round(event.loaded / event.total * 100))); };\n const aborted = () => { cleanup(); reject(init.signal?.reason ?? new DOMException('已取消', 'AbortError')); };\n const abort = () => { cleanup(); xhr.abort(); aborted(); };\n const failed = () => { cleanup(); reject(new GoaError(0, 'network_error', '上传失败,请检查网络连接')); };\n const timeout = () => { cleanup(); reject(new GoaError(0, 'timeout', '上传超时')); };\n const load = () => {\n cleanup();\n const headers = new Headers();\n for (const name of ['Content-Type', 'X-Request-Id', 'Retry-After']) {\n const value = xhr.getResponseHeader(name);\n if (value) headers.set(name, value);\n }\n try { resolve(new Response(xhr.status === 204 ? null : xhr.responseText, { status: xhr.status, headers })); }\n catch (error) { reject(error); }\n };\n init.signal?.addEventListener('abort', abort, { once: true });\n xhr.upload.addEventListener('progress', report);\n xhr.addEventListener('load', load);\n xhr.addEventListener('error', failed);\n xhr.addEventListener('abort', aborted);\n xhr.addEventListener('timeout', timeout);\n if (init.signal?.aborted) { abort(); return; }\n try { xhr.send(init.body as FormData); } catch { failed(); }\n });\n }\n\n private async error(operation: GoaOperation, response: Response): Promise<GoaError> {\n if (response.status === 401 && operation.access.kind !== 'public' && this.responseSessions.get(response) === this.sessionRevision) this.expireSession();\n let value: unknown;\n try { value = await response.json(); } catch { return new GoaError(response.status, 'invalid_response', '服务端错误响应格式错误'); }\n const schema = operation.errors[response.status];\n if (schema) {\n const parsed = schema.safeParse(value);\n if (!parsed.success) return new GoaError(response.status, 'invalid_response', '服务端错误响应不符合契约');\n value = parsed.data;\n }\n if (!value || typeof value !== 'object' || !('name' in value) || typeof value.name !== 'string' || !('message' in value) || typeof value.message !== 'string') return new GoaError(response.status, 'invalid_response', '服务端错误响应格式错误');\n const error = new GoaError(response.status, value.name, value.message);\n error.requestId = response.headers.get('X-Request-Id') ?? undefined;\n if ('id' in value && typeof value.id === 'string') error.errorId = value.id;\n if ('temporary' in value && typeof value.temporary === 'boolean') error.temporary = value.temporary;\n if ('timeout' in value && typeof value.timeout === 'boolean') error.timeout = value.timeout;\n if ('fault' in value && typeof value.fault === 'boolean') error.fault = value.fault;\n error.details = value;\n return error;\n }\n}\n"]}
|
package/dist/index.d.ts
CHANGED
|
@@ -1,3 +1,3 @@
|
|
|
1
1
|
export { GoaClient, GoaError } from './goa.js';
|
|
2
|
-
export type { GoaClientOptions, GoaRequestOptions, GoaUploadOptions, GoaResponse, GoaStreamOptions, GoaSubscription, GoaConnectionState } from './goa.js';
|
|
2
|
+
export type { GoaClientOptions, GoaRequestOptions, GoaUploadOptions, GoaResponse, GoaStreamOptions, GoaSubscription, GoaConnectionState, GoaRequestObservation } from './goa.js';
|
|
3
3
|
//# sourceMappingURL=index.d.ts.map
|
package/dist/index.d.ts.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,SAAS,EAAE,QAAQ,EAAE,MAAM,OAAO,CAAC;AAC5C,YAAY,EAAE,gBAAgB,EAAE,iBAAiB,EAAE,gBAAgB,EAAE,WAAW,EAAE,gBAAgB,EAAE,eAAe,EAAE,kBAAkB,EAAE,MAAM,OAAO,CAAC"}
|
|
1
|
+
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,SAAS,EAAE,QAAQ,EAAE,MAAM,OAAO,CAAC;AAC5C,YAAY,EAAE,gBAAgB,EAAE,iBAAiB,EAAE,gBAAgB,EAAE,WAAW,EAAE,gBAAgB,EAAE,eAAe,EAAE,kBAAkB,EAAE,qBAAqB,EAAE,MAAM,OAAO,CAAC"}
|
package/dist/index.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,SAAS,EAAE,QAAQ,EAAE,MAAM,OAAO,CAAC"}
|
|
1
|
+
{"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,SAAS,EAAE,QAAQ,EAAE,MAAM,OAAO,CAAC","sourcesContent":["export { GoaClient, GoaError } from './goa';\nexport type { GoaClientOptions, GoaRequestOptions, GoaUploadOptions, GoaResponse, GoaStreamOptions, GoaSubscription, GoaConnectionState, GoaRequestObservation } from './goa';\n"]}
|
|
@@ -36,12 +36,20 @@ export declare const foundationPages: readonly [{
|
|
|
36
36
|
readonly component: 'system/settings/SettingsPage';
|
|
37
37
|
readonly connected: true;
|
|
38
38
|
}, {
|
|
39
|
-
readonly path: '/system/
|
|
40
|
-
readonly component: 'system/
|
|
39
|
+
readonly path: '/system/project-info';
|
|
40
|
+
readonly component: 'system/project-info/ProjectInfoPage';
|
|
41
|
+
readonly connected: true;
|
|
42
|
+
}, {
|
|
43
|
+
readonly path: '/system/api-tokens';
|
|
44
|
+
readonly component: 'system/api-tokens/ApiTokensPage';
|
|
41
45
|
readonly connected: true;
|
|
42
46
|
}, {
|
|
43
|
-
readonly path: '/system/
|
|
44
|
-
readonly component: 'system/
|
|
47
|
+
readonly path: '/system/mcp';
|
|
48
|
+
readonly component: 'system/mcp/McpSettingsPage';
|
|
49
|
+
readonly connected: true;
|
|
50
|
+
}, {
|
|
51
|
+
readonly path: '/system/identity-security';
|
|
52
|
+
readonly component: 'system/identity-security/IdentitySecurityPage';
|
|
45
53
|
readonly connected: true;
|
|
46
54
|
}, {
|
|
47
55
|
readonly path: '/system/files';
|
|
@@ -101,12 +109,20 @@ export declare const connectedFoundationPages: ({
|
|
|
101
109
|
readonly component: 'system/settings/SettingsPage';
|
|
102
110
|
readonly connected: true;
|
|
103
111
|
} | {
|
|
104
|
-
readonly path: '/system/
|
|
105
|
-
readonly component: 'system/
|
|
112
|
+
readonly path: '/system/project-info';
|
|
113
|
+
readonly component: 'system/project-info/ProjectInfoPage';
|
|
114
|
+
readonly connected: true;
|
|
115
|
+
} | {
|
|
116
|
+
readonly path: '/system/api-tokens';
|
|
117
|
+
readonly component: 'system/api-tokens/ApiTokensPage';
|
|
106
118
|
readonly connected: true;
|
|
107
119
|
} | {
|
|
108
|
-
readonly path: '/system/
|
|
109
|
-
readonly component: 'system/
|
|
120
|
+
readonly path: '/system/mcp';
|
|
121
|
+
readonly component: 'system/mcp/McpSettingsPage';
|
|
122
|
+
readonly connected: true;
|
|
123
|
+
} | {
|
|
124
|
+
readonly path: '/system/identity-security';
|
|
125
|
+
readonly component: 'system/identity-security/IdentitySecurityPage';
|
|
110
126
|
readonly connected: true;
|
|
111
127
|
} | {
|
|
112
128
|
readonly path: '/system/files';
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"foundation.d.ts","sourceRoot":"","sources":["../src/foundation.ts"],"names":[],"mappings":"AACA,eAAO,MAAM,mBAAmB,YAAI,eAAe,EAAE,WAAW,EAAE,cAAc,EAAE,aAAa,EAAE,qBAAqB,CAAU,CAAC;AAEjI,eAAO,MAAM,eAAe;aACxB,IAAI,EAAE,GAAG;aAAE,SAAS,EAAE,yBAAyB;aAAE,SAAS;;aAC1D,IAAI,EAAE,qBAAqB;aAAE,SAAS,EAAE,oCAAoC;aAAE,SAAS;;aACvF,IAAI,EAAE,mBAAmB;aAAE,SAAS,EAAE,gCAAgC;aAAE,SAAS;;aACjF,IAAI,EAAE,eAAe;aAAE,SAAS,EAAE,iBAAiB;aAAE,SAAS;;aAC9D,IAAI,EAAE,eAAe;aAAE,SAAS,EAAE,wBAAwB;aAAE,SAAS;;aACrE,IAAI,EAAE,eAAe;aAAE,SAAS,EAAE,wBAAwB;aAAE,SAAS;;aACrE,IAAI,EAAE,qBAAqB;aAAE,SAAS,EAAE,mCAAmC;aAAE,SAAS;;aACtF,IAAI,EAAE,eAAe;aAAE,SAAS,EAAE,wBAAwB;aAAE,SAAS;;aACrE,IAAI,EAAE,kBAAkB;aAAE,SAAS,EAAE,8BAA8B;aAAE,SAAS;;aAC9E,IAAI,EAAE,
|
|
1
|
+
{"version":3,"file":"foundation.d.ts","sourceRoot":"","sources":["../src/foundation.ts"],"names":[],"mappings":"AACA,eAAO,MAAM,mBAAmB,YAAI,eAAe,EAAE,WAAW,EAAE,cAAc,EAAE,aAAa,EAAE,qBAAqB,CAAU,CAAC;AAEjI,eAAO,MAAM,eAAe;aACxB,IAAI,EAAE,GAAG;aAAE,SAAS,EAAE,yBAAyB;aAAE,SAAS;;aAC1D,IAAI,EAAE,qBAAqB;aAAE,SAAS,EAAE,oCAAoC;aAAE,SAAS;;aACvF,IAAI,EAAE,mBAAmB;aAAE,SAAS,EAAE,gCAAgC;aAAE,SAAS;;aACjF,IAAI,EAAE,eAAe;aAAE,SAAS,EAAE,iBAAiB;aAAE,SAAS;;aAC9D,IAAI,EAAE,eAAe;aAAE,SAAS,EAAE,wBAAwB;aAAE,SAAS;;aACrE,IAAI,EAAE,eAAe;aAAE,SAAS,EAAE,wBAAwB;aAAE,SAAS;;aACrE,IAAI,EAAE,qBAAqB;aAAE,SAAS,EAAE,mCAAmC;aAAE,SAAS;;aACtF,IAAI,EAAE,eAAe;aAAE,SAAS,EAAE,wBAAwB;aAAE,SAAS;;aACrE,IAAI,EAAE,kBAAkB;aAAE,SAAS,EAAE,8BAA8B;aAAE,SAAS;;aAC9E,IAAI,EAAE,sBAAsB;aAAE,SAAS,EAAE,qCAAqC;aAAE,SAAS;;aACzF,IAAI,EAAE,oBAAoB;aAAE,SAAS,EAAE,iCAAiC;aAAE,SAAS;;aACnF,IAAI,EAAE,aAAa;aAAE,SAAS,EAAE,4BAA4B;aAAE,SAAS;;aACvE,IAAI,EAAE,2BAA2B;aAAE,SAAS,EAAE,+CAA+C;aAAE,SAAS;;aACxG,IAAI,EAAE,eAAe;aAAE,SAAS,EAAE,wBAAwB;aAAE,SAAS;;aACrE,IAAI,EAAE,kBAAkB;aAAE,SAAS,EAAE,oCAAoC;aAAE,SAAS;;aACpF,IAAI,EAAE,oBAAoB;aAAE,SAAS,EAAE,iCAAiC;aAAE,SAAS;;aACnF,IAAI,EAAE,wBAAwB;aAAE,SAAS,EAAE,yCAAyC;aAAE,SAAS;;aAC/F,IAAI,EAAE,UAAU;aAAE,SAAS,EAAE,qBAAqB;aAAE,SAAS;EACvD,CAAC;AACX,eAAO,MAAM,wBAAwB;mBAnB3B,GAAG;wBAAa,yBAAyB;;;mBACzC,qBAAqB;wBAAa,oCAAoC;;;mBACtE,mBAAmB;wBAAa,gCAAgC;;;mBAChE,eAAe;wBAAa,iBAAiB;;;mBAC7C,eAAe;wBAAa,wBAAwB;;;mBACpD,eAAe;wBAAa,wBAAwB;;;mBACpD,qBAAqB;wBAAa,mCAAmC;;;mBACrE,eAAe;wBAAa,wBAAwB;;;mBACpD,kBAAkB;wBAAa,8BAA8B;;;mBAC7D,sBAAsB;wBAAa,qCAAqC;;;mBACxE,oBAAoB;wBAAa,iCAAiC;;;mBAClE,aAAa;wBAAa,4BAA4B;;;mBACtD,2BAA2B;wBAAa,+CAA+C;;;mBACvF,eAAe;wBAAa,wBAAwB;;;mBACpD,kBAAkB;wBAAa,oCAAoC;;;mBACnE,oBAAoB;wBAAa,iCAAiC;;;mBAClE,wBAAwB;wBAAa,yCAAyC;;;mBAC9E,UAAU;wBAAa,qBAAqB;;IAEkC,CAAC"}
|
|
@@ -9,8 +9,10 @@ export const foundationPages = [
|
|
|
9
9
|
{ path: '/system/user-groups', component: 'system/user-groups/UserGroupsPage', connected: true },
|
|
10
10
|
{ path: '/system/dicts', component: 'system/dicts/DictsPage', connected: true },
|
|
11
11
|
{ path: '/system/settings', component: 'system/settings/SettingsPage', connected: true },
|
|
12
|
+
{ path: '/system/project-info', component: 'system/project-info/ProjectInfoPage', connected: true },
|
|
13
|
+
{ path: '/system/api-tokens', component: 'system/api-tokens/ApiTokensPage', connected: true },
|
|
14
|
+
{ path: '/system/mcp', component: 'system/mcp/McpSettingsPage', connected: true },
|
|
12
15
|
{ path: '/system/identity-security', component: 'system/identity-security/IdentitySecurityPage', connected: true },
|
|
13
|
-
{ path: '/system/file-configs', component: 'system/file-configs/FileStorageConfigsPage', connected: true },
|
|
14
16
|
{ path: '/system/files', component: 'system/files/FilesPage', connected: true },
|
|
15
17
|
{ path: '/system/sessions', component: 'system/sessions/OnlineSessionsPage', connected: true },
|
|
16
18
|
{ path: '/system/login-logs', component: 'system/login-logs/LoginLogsPage', connected: true },
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"foundation.js","sourceRoot":"","sources":["../src/foundation.ts"],"names":[],"mappings":"AACA,MAAM,CAAC,MAAM,mBAAmB,GAAG,CAAC,eAAe,EAAE,WAAW,EAAE,cAAc,EAAE,aAAa,EAAE,qBAAqB,CAAU,CAAC;AAEjI,MAAM,CAAC,MAAM,eAAe,GAAG;IAC7B,EAAE,IAAI,EAAE,GAAG,EAAE,SAAS,EAAE,yBAAyB,EAAE,SAAS,EAAE,IAAI,EAAE;IACpE,EAAE,IAAI,EAAE,qBAAqB,EAAE,SAAS,EAAE,oCAAoC,EAAE,SAAS,EAAE,IAAI,EAAE;IACjG,EAAE,IAAI,EAAE,mBAAmB,EAAE,SAAS,EAAE,gCAAgC,EAAE,SAAS,EAAE,IAAI,EAAE;IAC3F,EAAE,IAAI,EAAE,eAAe,EAAE,SAAS,EAAE,iBAAiB,EAAE,SAAS,EAAE,IAAI,EAAE;IACxE,EAAE,IAAI,EAAE,eAAe,EAAE,SAAS,EAAE,wBAAwB,EAAE,SAAS,EAAE,IAAI,EAAE;IAC/E,EAAE,IAAI,EAAE,eAAe,EAAE,SAAS,EAAE,wBAAwB,EAAE,SAAS,EAAE,IAAI,EAAE;IAC/E,EAAE,IAAI,EAAE,qBAAqB,EAAE,SAAS,EAAE,mCAAmC,EAAE,SAAS,EAAE,IAAI,EAAE;IAChG,EAAE,IAAI,EAAE,eAAe,EAAE,SAAS,EAAE,wBAAwB,EAAE,SAAS,EAAE,IAAI,EAAE;IAC/E,EAAE,IAAI,EAAE,kBAAkB,EAAE,SAAS,EAAE,8BAA8B,EAAE,SAAS,EAAE,IAAI,EAAE;IACxF,EAAE,IAAI,EAAE,
|
|
1
|
+
{"version":3,"file":"foundation.js","sourceRoot":"","sources":["../src/foundation.ts"],"names":[],"mappings":"AACA,MAAM,CAAC,MAAM,mBAAmB,GAAG,CAAC,eAAe,EAAE,WAAW,EAAE,cAAc,EAAE,aAAa,EAAE,qBAAqB,CAAU,CAAC;AAEjI,MAAM,CAAC,MAAM,eAAe,GAAG;IAC7B,EAAE,IAAI,EAAE,GAAG,EAAE,SAAS,EAAE,yBAAyB,EAAE,SAAS,EAAE,IAAI,EAAE;IACpE,EAAE,IAAI,EAAE,qBAAqB,EAAE,SAAS,EAAE,oCAAoC,EAAE,SAAS,EAAE,IAAI,EAAE;IACjG,EAAE,IAAI,EAAE,mBAAmB,EAAE,SAAS,EAAE,gCAAgC,EAAE,SAAS,EAAE,IAAI,EAAE;IAC3F,EAAE,IAAI,EAAE,eAAe,EAAE,SAAS,EAAE,iBAAiB,EAAE,SAAS,EAAE,IAAI,EAAE;IACxE,EAAE,IAAI,EAAE,eAAe,EAAE,SAAS,EAAE,wBAAwB,EAAE,SAAS,EAAE,IAAI,EAAE;IAC/E,EAAE,IAAI,EAAE,eAAe,EAAE,SAAS,EAAE,wBAAwB,EAAE,SAAS,EAAE,IAAI,EAAE;IAC/E,EAAE,IAAI,EAAE,qBAAqB,EAAE,SAAS,EAAE,mCAAmC,EAAE,SAAS,EAAE,IAAI,EAAE;IAChG,EAAE,IAAI,EAAE,eAAe,EAAE,SAAS,EAAE,wBAAwB,EAAE,SAAS,EAAE,IAAI,EAAE;IAC/E,EAAE,IAAI,EAAE,kBAAkB,EAAE,SAAS,EAAE,8BAA8B,EAAE,SAAS,EAAE,IAAI,EAAE;IACxF,EAAE,IAAI,EAAE,sBAAsB,EAAE,SAAS,EAAE,qCAAqC,EAAE,SAAS,EAAE,IAAI,EAAE;IACnG,EAAE,IAAI,EAAE,oBAAoB,EAAE,SAAS,EAAE,iCAAiC,EAAE,SAAS,EAAE,IAAI,EAAE;IAC7F,EAAE,IAAI,EAAE,aAAa,EAAE,SAAS,EAAE,4BAA4B,EAAE,SAAS,EAAE,IAAI,EAAE;IACjF,EAAE,IAAI,EAAE,2BAA2B,EAAE,SAAS,EAAE,+CAA+C,EAAE,SAAS,EAAE,IAAI,EAAE;IAClH,EAAE,IAAI,EAAE,eAAe,EAAE,SAAS,EAAE,wBAAwB,EAAE,SAAS,EAAE,IAAI,EAAE;IAC/E,EAAE,IAAI,EAAE,kBAAkB,EAAE,SAAS,EAAE,oCAAoC,EAAE,SAAS,EAAE,IAAI,EAAE;IAC9F,EAAE,IAAI,EAAE,oBAAoB,EAAE,SAAS,EAAE,iCAAiC,EAAE,SAAS,EAAE,IAAI,EAAE;IAC7F,EAAE,IAAI,EAAE,wBAAwB,EAAE,SAAS,EAAE,yCAAyC,EAAE,SAAS,EAAE,IAAI,EAAE;IACzG,EAAE,IAAI,EAAE,UAAU,EAAE,SAAS,EAAE,qBAAqB,EAAE,SAAS,EAAE,IAAI,EAAE;CAC/D,CAAC;AACX,MAAM,CAAC,MAAM,wBAAwB,GAAG,eAAe,CAAC,MAAM,CAAC,CAAC,IAAI,EAAE,EAAE,CAAC,IAAI,CAAC,SAAS,CAAC,CAAC"}
|
|
@@ -66,6 +66,7 @@ export type ApiOperationRecord = {
|
|
|
66
66
|
"createdAt": string;
|
|
67
67
|
"description": string;
|
|
68
68
|
"durationMs": number;
|
|
69
|
+
"durationUs"?: number;
|
|
69
70
|
"id": number;
|
|
70
71
|
"ip": string;
|
|
71
72
|
"method": string;
|
|
@@ -85,6 +86,7 @@ export type ApiOperationRecordInput = {
|
|
|
85
86
|
"createdAt": string;
|
|
86
87
|
"description": string;
|
|
87
88
|
"durationMs": number;
|
|
89
|
+
"durationUs"?: number;
|
|
88
90
|
"id": number;
|
|
89
91
|
"ip": string;
|
|
90
92
|
"method": string;
|