@zhin.js/plugin-calendar 0.1.15 → 0.1.17
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/CHANGELOG.md +95 -0
- package/LICENSE +21 -0
- package/README.md +7 -1
- package/commands/calendar/auth/index.js +1 -1
- package/commands/calendar/auth/index.ts +1 -1
- package/commands/calendar/logout/index.js +1 -1
- package/commands/calendar/logout/index.ts +1 -1
- package/commands/calendar/status/index.js +1 -1
- package/commands/calendar/status/index.ts +1 -1
- package/lib/config.d.ts.map +1 -1
- package/lib/config.js +15 -10
- package/lib/config.js.map +1 -1
- package/lib/console.d.ts +9 -0
- package/lib/console.d.ts.map +1 -1
- package/lib/console.js +88 -0
- package/lib/console.js.map +1 -1
- package/lib/http-callback.d.ts +3 -2
- package/lib/http-callback.d.ts.map +1 -1
- package/lib/http-callback.js +5 -6
- package/lib/http-callback.js.map +1 -1
- package/lib/index.d.ts +1 -1
- package/lib/index.d.ts.map +1 -1
- package/lib/index.js +1 -1
- package/lib/index.js.map +1 -1
- package/lib/notify.d.ts +10 -0
- package/lib/notify.d.ts.map +1 -0
- package/lib/notify.js +15 -0
- package/lib/notify.js.map +1 -0
- package/package.json +15 -19
- package/pages/index/index.js +72 -4
- package/pages/index/index.ts +75 -4
- package/plugin.js +2 -5
- package/schema.json +47 -6
- package/skills/calendar-scheduling/tools/create_event/index.js +1 -1
- package/skills/calendar-scheduling/tools/create_event/index.ts +1 -1
- package/src/config.ts +15 -10
- package/src/console.ts +104 -0
- package/src/http-callback.ts +6 -9
- package/src/index.ts +4 -1
- package/src/notify.ts +19 -0
package/CHANGELOG.md
CHANGED
|
@@ -1,5 +1,100 @@
|
|
|
1
1
|
# @zhin.js/plugin-calendar
|
|
2
2
|
|
|
3
|
+
## 0.1.17
|
|
4
|
+
|
|
5
|
+
### Patch Changes
|
|
6
|
+
|
|
7
|
+
- e1fda87: fix: 按审计待审清单处理(安全、功能、清理)
|
|
8
|
+
|
|
9
|
+
**行为变更(升级前请阅读)**
|
|
10
|
+
|
|
11
|
+
- kernel / core / zhin.js:出站文本中的 `${…}` 不再用 `vm` 求值,只替换 `TemplateContext` 上能解析到值的属性路径(如 `${sender.name}`);表达式、函数调用、未知名字原样保留。整套 vm 沙箱(`evaluate` / `execute` / `compiler` / `getValueWithRuntime`)已移除。
|
|
12
|
+
- kernel / core / zhin.js:移除零引用的遗留导出——`Scheduler`、错误管理器与 `ZhinError` 子类、`compose`、`segment.from/toString`、AI 触发/准入函数、`@zhin.js/core/queue-im-field-contract`、`zhin.js/contexts`。
|
|
13
|
+
- agent:readonly 执行预设不再放行重定向、后台 `&`、进程替换、`find -delete/-exec`、`sed -i`、`sort -o`、`tee`、`xargs`、awk;curl/wget 校验每个 URL 与裸主机并识别更多上传参数;自定义 `execAllowlist` 中的只读命令带写入风险时改走审批。沙箱超时/取消会杀掉进程组或具名容器,默认镜像改为 `node:22-bookworm-slim` + `bash`。移除无生产调用的 `AuditLogger`、`AnomalyDetector`、旧 vision 回合等导出。
|
|
14
|
+
- ai:移除 `storage`、`FileStateCache`、`CostTracker`、`model-name-utils`、`./agent-step-checkpoint` 子路径、`ContextManager` 及旧压缩管线;延迟工具快照改为有界 LRU。
|
|
15
|
+
- cli:`zhin send` / `watch` / `schedule` 改为与运行中的 Host 通信(新增 `POST /message/send` 与 `/assistant/jobs` 写接口),`schedule` 不再支持离线改文件;移除 `zhin uninstall service`(用 `zhin service uninstall`)、`build --analyze`、`install -S`;`zhin stop` 杀不掉进程时保留 pid 文件并以非零退出;`runtime migrate` 新增 `verify`;未设置 `TZ` 时调度默认时区改为系统时区;不带 `ZHIN_SUPERVISOR_PID` 的进程被 init 接管后不再自行退出。
|
|
16
|
+
- schedule:后台 reconcile 出错不再产生未处理 rejection(新增 `onStoreError`);启动途中 `stop()` 不再遗留定时器。
|
|
17
|
+
- schema:元组校验与 `safeParse`、JSON Schema 一致(空数组不通过,缺省的可选元组为 `undefined`)。
|
|
18
|
+
- client / contract:删除无后端路由的 agent-stream API、未使用的 `definePage` 与旧 PageManager 类型;`@zhin.js/contract` 不再依赖 `@zhin.js/ai`;客户端收到 401 会清除已保存的凭据;安装/更新/卸载 RPC 默认超时 120 秒。
|
|
19
|
+
- a2a:流式响应中途出错写入 SSE error 并结束;未配置 token 的非生产环境只接受本机请求;任务存储有上限与过期;Mailbox 凭据回退与生产环境缺密钥检查修复。
|
|
20
|
+
- speech:`provider: openai` 不再套用 Ollama 的默认 host/model;识别语言改为可配置,不再写死 `zh`。
|
|
21
|
+
- adapter-lark:支持 `encryptKey` 加密事件解密。adapter-github:Device Flow 可取消、带超时并回复失败原因。adapter-wecom / dingtalk:请求加超时并校验 HTTP 状态。adapter-weixin-ilink:输入关闭期间暂停轮询。adapter-milky:SSE 支持 CRLF、缓冲上限与空闲重连。adapter-onebot-events:好友删除通知改为 `notice.friend.decrease`。
|
|
22
|
+
- plugin-group-suite:`teachAllowRegex` 默认关闭,正则安全检查更严格。plugin-qrcode:改为本地生成,回复 data URL 图片。plugin-rss / short-url / link-poster:拒绝解析到内网的地址;rss 修复条目每周重复推送;short-url 的 Console 创建改为真实调用 is.gd。plugin-lottery:按 `historyLimit` 同步。
|
|
23
|
+
|
|
24
|
+
**其余**
|
|
25
|
+
|
|
26
|
+
- host-http:插件市场详情加缓存与包名校验,SSE 回放容忍背压。host-http-contract:新增 `readTextBody()`,九个适配器改用它。
|
|
27
|
+
- pagemanager:页面外壳 importmap 升级到 React 19.2.8 / react-router 7.12.0。console-contract:`definePage` 接受 `description` / `group` / `parent` / `fullWidth`。
|
|
28
|
+
- command:进度提示本地化,匹配不再重复拷贝消息段。runtime:源码监听降级后退避重试原生监听。
|
|
29
|
+
- html-renderer:删除未接线的 `aiTextAsImage`。create-zhin-app / scaffold-wizard:移除不起作用的"全局安装 CLI"与运行时选择提示。
|
|
30
|
+
- 依赖声明清理、发布清单不再携带解析不到的 `src` 目录、移除未使用的 Skill 挂载、README 与示例配置按当前实现更正。
|
|
31
|
+
|
|
32
|
+
- 120e225: 聊天角色(ADR 0056,2026-11-12 修订):zhin 角色 owner / admin / trusted 分四级、只来自授予;发言者的平台身份与机器人自身的平台身份是独立维度,命令、Agent 工具 / 技能、中间件与按钮按三条维度共用一个评估器过滤。升级说明见 docs/migrations/chat-roles.md。
|
|
33
|
+
|
|
34
|
+
- zhin.js:实例首次启动把适配器 `master` / `trusted`、`endpoints[i].master|trusted` 与 `ai.trigger.masters|trusted` 迁入项目数据库 `chat_roles`(先记入 `.zhin/chat-roles-migration.json`,再从配置移除并记日志);之后配置再出现这些字段时启动报错并指向升级指南。平台身份不再映射为 zhin 角色:删除 `roles.mappings`(适配器块与 `endpoints[i].roles` 出现即启动报错)、`chat_role_mappings` 表与 Console `chat-roles.mappings` / `chat-roles.set-mappings`;`features.selfService.platformAdmins|roles|allowUsers` 删除;群内「功能」「角色」命令只认 zhin 角色,平台群主不再自动具备;聊天改配置、聊天重启、Agent 主人审批按 zhin `owner` 判断。
|
|
35
|
+
- @zhin.js/core(minor,破坏性):角色模型与解析移入 core(`ChatRoleService`、`createChatRoleSenderEnricher`),入站消息带 `sender.chatRole` 与归一的 `sender.platform`;删除 `SenderRole`、`senderRolesFromMessage`、`roleSatisfies` 等,`master` 改名 `owner`;删除映射规则 API(`createMappingChatRoleSource`、`DEFAULT_CHAT_ROLE_MAPPINGS` 等)与 `ChatRoleSource`;`createSenderEnricher` / `createConfigurationChatAuthorizer` 改为基于聊天角色。IM Runtime 为 PermissionHost 提供机器人自身身份(经 Adapter 索引缓存),机器人的角色变化事件使缓存失效;命令拒绝回复说明缺少的平台 / 机器人条件;`<Button permit>` 按点击者鉴权;场景治理工具工厂同时要求 `platform:*` 与 `bot:*`;`ai.trigger.masters|trusted` 删除。
|
|
36
|
+
- @zhin.js/permission(minor,破坏性):permit 语法 `owner` / `admin` / `trusted` / `role(...)`(zhin 角色)、`platform:owner|admin`、`platform-role:<id>`、`platform-permission:<name>`(发言者平台身份),新增 `bot:owner|admin`、`bot-role:<id>`、`bot-permission:<name>`(机器人自身平台身份,`PermissionSubject.bot`);`PermissionHost` 新增 `setBotStandingResolver`、`withBotStanding`、`firstDenied`,`checkAll` 可带 `source` 解析机器人身份;新增 `describeDeniedPermit`、`permitsNeedBotStanding`。删除 `role(master)`、`scene_admin`、`scene_owner`、`platform(adapter,perm)` 及 `registerPlatform`、`createSceneRolePlatformChecker`、`platformPermission`、`definePlatformPermission`,定义时报错并给出替代写法。
|
|
37
|
+
- @zhin.js/command(minor,破坏性):命令会话的发送者改为 `chatRole` / `platform`,不再从 metadata 读角色;`CONVERSATION_MANAGER_PERMIT` 改为 `admin`(平台群主不再自动满足);分发结果 `denied` 带 `denial`(第一条不满足的规则与原因);指令菜单只列出当前发送者在本会话可用的命令。
|
|
38
|
+
- @zhin.js/agent(minor,破坏性):危险工具、文件 / exec 策略、主人审批、Agent 回合主体只读 zhin 角色(`principal.roles` 只含展开的聊天角色,平台地位在 `principal.platform`);`SenderRole` → `PrincipalRole`,`SELF_CHANGE_MASTER_ROLE` → `SELF_CHANGE_OWNER_ROLE`;回合开始时读取机器人自身身份(`contextState.bot.platform`),按三条维度过滤 tool / skill / Agent 包后才披露,执行工具时再校验一次;群规「群主和管理员豁免」改为平台群主 / 管理员与 zhin `owner`。
|
|
39
|
+
- @zhin.js/feature-kit:`OperationSession.sender` 改为 `chatRole` / `platform`。
|
|
40
|
+
- @zhin.js/im-contract:新增 `PlatformStanding`、`SelfStandingRequest`、`standingFromMemberRole`。
|
|
41
|
+
- @zhin.js/adapter:入站 sender 可带 `platform`;账号管理命令需要聊天角色 `owner`;`EndpointManagement` 新增可选 `inspectSelfStanding`,能力画像新增 `scene.selfStanding`(声明即须实现),`AdapterIndex.selfStanding` / `invalidateSelfStanding` 按会话缓存机器人自身身份。
|
|
42
|
+
- @zhin.js/middleware:入站中间件可声明 `permit`,不满足时跳过该中间件(机器人身份只读缓存)。
|
|
43
|
+
- @zhin.js/tool:定义工具时拒绝已移除的 permit 写法。
|
|
44
|
+
- @zhin.js/ai:注释更新。
|
|
45
|
+
- @zhin.js/console-protocol:`chat-roles.list|grant|revoke`(`iam.manage`);`ConsoleChatRoleSource` 只有 `grant`。
|
|
46
|
+
- @zhin.js/runtime:Host 配置 Schema 删除 `features.selfService.platformAdmins|roles|allowUsers`。
|
|
47
|
+
- @zhin.js/testing:伪造消息与 `PluginTestKit` 用 `sender.chatRole` 声明测试身份。
|
|
48
|
+
- @zhin.js/scaffold-wizard:ICQQ 向导不再写 `master`,完成后提示在 Console 账号「角色」页签或聊天 `角色 授予` 设置 owner。
|
|
49
|
+
- 适配器:配置 Schema 删除 `master` / `trusted`(以及预览版的 `roles`);群管理类工具同时声明发言者条件与机器人条件(如 `platform:admin` + `bot:admin`、`bot-permission:manage_roles`),NapCat / OneBot11 工具不再使用已移除的 `platform(adapter,…)` 写法。
|
|
50
|
+
- 插件:内容审核以 `inbound.bypass`(permit 列表,默认 `owner` 或 `platform:admin`)取代 `masters` / `inbound.bypassMasters`;群管、音乐、日历、地震、B 站、轮盘赌的权限改用 zhin 角色,订阅类命令只认 zhin `admin` / `owner`。
|
|
51
|
+
|
|
52
|
+
- 5cd9d3d: HTTP 路由契约改为 Web 标准 `Request` / `Response`(ADR 0054 §2,B1.0)
|
|
53
|
+
|
|
54
|
+
- host-http-contract:路由处理函数签名改为 `(request, context) => Response`,`context` 提供 `url`、`params`、`principal`、`remoteAddress`;新增 `readBodyBytes` / `readTextBody` / `readJsonBody`(带大小上限,超限先读完再报 413)、`jsonResponse` / `emptyResponse`、带背压的 `createResponseStream`(SSE、大文件下载)与 `WsConnection`。契约不再引用 `node:http` / `ws`。
|
|
55
|
+
- host-http:Node 服务器移到 `@zhin.js/host-http/node`(`createHttpHost`),负责 Node 请求与 `Request` / `Response` 的互转;认证结果经 `context.principal` 传给路由,删除旧的按请求取主体的辅助函数;未预期的异常只返回通用错误信息,细节写日志。
|
|
56
|
+
- runtime、mcp、a2a、gateway、zhin.js、calendar 插件与各适配器的 Webhook / 反向 WebSocket 路由迁移到新契约,行为不变。
|
|
57
|
+
|
|
58
|
+
- eae4ea8: 官方插件接入分层功能配置(ADR 0050 / 0055):所有带配置 Schema 的官方插件都声明全部四级(全局 / 适配器 / 账号 / 会话),Console 的适配器、账号与会话页面都能开关它们;密钥、调度与全局资源类字段收窄为仅全局。answers 与 group-suite 可按会话覆盖字段并开放群内自助字段(答题超时、科目一开关;欢迎语、排行条数、教学冷却与分页),ledger 的 `reportWhenEmpty` 可按订阅者会话覆盖。主动推送在发送前按目标会话检查开关:提醒(含管理员提醒)、日历授权通知、地震速报、记账日报、彩票推送、B 站开播 / 动态推送、activity-feedback 的状态提示在已停用的账号或会话上不再发送;roulette 的超时扫描在已停用的会话里静默结束对局(不结算、不禁言、不发消息)。`@zhin.js/schema` 新增 `.fieldLevels(levels)` 用于收窄单个字段的层级;`@zhin.js/testing` 的假插件上下文提供 `isEnabledFor` / `configFor`(`feature` 选项可模拟按会话停用与字段覆盖)。
|
|
59
|
+
- 5cd9d3d: 插件权限按级别授予内置角色,插件 Console RPC 按方法鉴权(ADR 0049 修订)
|
|
60
|
+
|
|
61
|
+
- console-protocol:插件权限(`<plugin>:<action>`)分为 read / operate / manage 三级,可在 `definePluginConsoleRpc({ permissions })` 声明,未声明时按后缀推断;新增目录权限 `plugin.perms.read|operate|manage`:viewer 得到 read,operator 得到 read + operate,admin 与 owner 得到全部。
|
|
62
|
+
- gateway / host-http:自定义角色与 API 令牌可以写入插件权限;`iam.roles.list` 返回各角色实际生效的插件权限与当前运行时的插件权限目录(`pluginPermissions`);`/auth/me` 按已加载插件展开级别授予。
|
|
63
|
+
- zhin.js:已登录用户与 API 令牌调用 `plugin.<id>.<method>` 时,按方法自身、所属页面或目录兜底权限逐一检查(此前只检查 `feature.view` / `feature.configure`,operator 可以审批 `ops:approve` 操作);门禁放行但无插件分发器应答的请求一律拒绝并记审计。
|
|
64
|
+
- adapter:账号类方法的授权目标与处理函数选择账号的方式一致(`consoleAccountTarget`,先看 `data.instanceId`),`id` / `instanceId` 不一致或放在 `data` 之外时拒绝,避免按一个账号授权、却操作另一个账号;适配器 / 账号作用域的绑定可满足目录与插件权限。
|
|
65
|
+
- plugin-runtime:`definePluginConsoleRpc` 支持声明权限级别。
|
|
66
|
+
- rss / reminder / ledger / calendar / qrcode / short-url:补充权限级别声明(写操作为 operate 级)。
|
|
67
|
+
|
|
68
|
+
- 68659cd: `zod` 改为运行时依赖(原为可选对等依赖):插件运行时在启动时就会加载这些包的约定目录(Agent 工具、命令等),其中静态导入了 `zod`;生成的项目里没有安装可选对等依赖,启动会报 `Cannot find package 'zod'`。范围为 `^4.6.7`(已修复的版本)。
|
|
69
|
+
- Updated dependencies [57c6cdc]
|
|
70
|
+
- Updated dependencies [e1fda87]
|
|
71
|
+
- Updated dependencies [4e8ba38]
|
|
72
|
+
- Updated dependencies [120e225]
|
|
73
|
+
- Updated dependencies [c2bbdcf]
|
|
74
|
+
- Updated dependencies [c2bbdcf]
|
|
75
|
+
- Updated dependencies [fd055d2]
|
|
76
|
+
- Updated dependencies [4e8ba38]
|
|
77
|
+
- Updated dependencies [cc7a5f9]
|
|
78
|
+
- Updated dependencies [4e8ba38]
|
|
79
|
+
- Updated dependencies [f8bf684]
|
|
80
|
+
- Updated dependencies [e0bc008]
|
|
81
|
+
- Updated dependencies [5cd9d3d]
|
|
82
|
+
- Updated dependencies [5cd9d3d]
|
|
83
|
+
- Updated dependencies [f8bf684]
|
|
84
|
+
- Updated dependencies [5cd9d3d]
|
|
85
|
+
- Updated dependencies [1e54b1e]
|
|
86
|
+
- @zhin.js/host-http@1.2.0
|
|
87
|
+
- @zhin.js/console-contract@1.1.6
|
|
88
|
+
- @zhin.js/skill@1.1.17
|
|
89
|
+
- @zhin.js/tool@1.1.19
|
|
90
|
+
- @zhin.js/page@1.1.18
|
|
91
|
+
|
|
92
|
+
## 0.1.16
|
|
93
|
+
|
|
94
|
+
### Patch Changes
|
|
95
|
+
|
|
96
|
+
- 0d76a7c: Overhaul Console interactive workbenches, platform-specific adapter account onboarding/login flows, DeclarativePageView visual/interactive capabilities, and official utility plugin Console pages.
|
|
97
|
+
|
|
3
98
|
## 0.1.15
|
|
4
99
|
|
|
5
100
|
### Patch Changes
|
package/LICENSE
ADDED
|
@@ -0,0 +1,21 @@
|
|
|
1
|
+
MIT License
|
|
2
|
+
|
|
3
|
+
Copyright (c) 2025 凉菜
|
|
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
|
@@ -108,6 +108,12 @@ oauth_callback_path: /grokbot/calendar/oauth/callback
|
|
|
108
108
|
|
|
109
109
|
注意:Google「桌面应用」客户端只接受 `127.0.0.1` / `localhost` 回调。如果用公网域名回调,需要创建「Web 应用」类型的客户端,并把完整回调地址加入「已获授权的重定向 URI」。
|
|
110
110
|
|
|
111
|
+
## 分层配置(ADR 0050 / 0055)
|
|
112
|
+
|
|
113
|
+
日历只有一个共享的后端账号,所有字段(后端、时区、OAuth、各提供方凭据)只能在全局层修改;启停开关支持适配器、账号与会话四级。在 Console「功能」区可以按适配器、账号或会话(群 / 私聊)单独停用;开启 `features.selfService.enabled` 后,群里有 `admin` 角色(默认含群主 / 管理员)的人也可以用 `功能 关闭 calendar` 关闭本群。上级停用后下级锁定,不能再开启。
|
|
114
|
+
|
|
115
|
+
授权成功 / 失败 / 失效等通知不是消息,插件在发送前按目标会话检查开关,已停用的会话不会收到。
|
|
116
|
+
|
|
111
117
|
## Google Cloud 设置
|
|
112
118
|
|
|
113
119
|
1. 打开 [Google Cloud Console](https://console.cloud.google.com/),创建或选择一个项目。
|
|
@@ -189,7 +195,7 @@ npx zhin-calendar-auth microsoft
|
|
|
189
195
|
| ---------------- | ------------------------------------- |
|
|
190
196
|
| `list_events` | 列出时间范围内事件 |
|
|
191
197
|
| `find_free_time` | 工作时段内找空档 |
|
|
192
|
-
| `create_event` | 创建事件(`
|
|
198
|
+
| `create_event` | 创建事件(`owner` + 始终批准) |
|
|
193
199
|
|
|
194
200
|
创建前应向用户确认标题、时间与时区。
|
|
195
201
|
|
|
@@ -9,7 +9,7 @@ export default defineCommand({
|
|
|
9
9
|
params: {
|
|
10
10
|
provider: { type: "string", description: "google 或 microsoft(outlook)", descriptionI18n: { en: "google or microsoft (outlook)" } },
|
|
11
11
|
},
|
|
12
|
-
permit: ["
|
|
12
|
+
permit: ["owner"],
|
|
13
13
|
async execute({ input, params, use, locale, formatCommand }) {
|
|
14
14
|
const provider = parseOAuthProvider(params.provider);
|
|
15
15
|
if (!provider) {
|
|
@@ -9,7 +9,7 @@ export default defineCommand({
|
|
|
9
9
|
params: {
|
|
10
10
|
provider: { type: "string", description: "google 或 microsoft(outlook)", descriptionI18n: { en: "google or microsoft (outlook)" } },
|
|
11
11
|
},
|
|
12
|
-
permit: ["
|
|
12
|
+
permit: ["owner"],
|
|
13
13
|
async execute({ input, params, use, locale, formatCommand }) {
|
|
14
14
|
const provider = parseOAuthProvider(params.provider);
|
|
15
15
|
if (!provider) {
|
|
@@ -8,7 +8,7 @@ export default defineCommand({
|
|
|
8
8
|
params: {
|
|
9
9
|
provider: { type: "string", description: "google 或 microsoft(outlook)", descriptionI18n: { en: "google or microsoft (outlook)" } },
|
|
10
10
|
},
|
|
11
|
-
permit: ["
|
|
11
|
+
permit: ["owner"],
|
|
12
12
|
async execute({ params, use, locale, formatCommand }) {
|
|
13
13
|
const provider = parseOAuthProvider(params.provider);
|
|
14
14
|
if (!provider) {
|
|
@@ -8,7 +8,7 @@ export default defineCommand({
|
|
|
8
8
|
params: {
|
|
9
9
|
provider: { type: "string", description: "google 或 microsoft(outlook)", descriptionI18n: { en: "google or microsoft (outlook)" } },
|
|
10
10
|
},
|
|
11
|
-
permit: ["
|
|
11
|
+
permit: ["owner"],
|
|
12
12
|
async execute({ params, use, locale, formatCommand }) {
|
|
13
13
|
const provider = parseOAuthProvider(params.provider);
|
|
14
14
|
if (!provider) {
|
|
@@ -4,7 +4,7 @@ import { defineCommand } from "zhin.js/command";
|
|
|
4
4
|
import { calendarRuntimeToken } from "../../../lib/runtime.js";
|
|
5
5
|
export default defineCommand({
|
|
6
6
|
description: "查看日历授权状态(master 专用)", descriptionI18n: { en: "View calendar authorization status (bot master only)" },
|
|
7
|
-
permit: ["
|
|
7
|
+
permit: ["owner"],
|
|
8
8
|
async execute({ use, locale, formatCommand }) {
|
|
9
9
|
return use(calendarRuntimeToken).auth.describeStatus(locale, formatCommand('calendar auth'));
|
|
10
10
|
},
|
|
@@ -4,7 +4,7 @@ import { calendarRuntimeToken } from "../../../src/runtime.js";
|
|
|
4
4
|
|
|
5
5
|
export default defineCommand({
|
|
6
6
|
description: "查看日历授权状态(master 专用)", descriptionI18n: { en: "View calendar authorization status (bot master only)" },
|
|
7
|
-
permit: ["
|
|
7
|
+
permit: ["owner"],
|
|
8
8
|
async execute({ use, locale, formatCommand }) {
|
|
9
9
|
return use(calendarRuntimeToken).auth.describeStatus(locale, formatCommand('calendar auth'));
|
|
10
10
|
},
|
package/lib/config.d.ts.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"config.d.ts","sourceRoot":"","sources":["../src/config.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,MAAM,EAAE,MAAM,SAAS,CAAC;AAEjC,eAAO,MAAM,cAAc;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
|
|
1
|
+
{"version":3,"file":"config.d.ts","sourceRoot":"","sources":["../src/config.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,MAAM,EAAE,MAAM,SAAS,CAAC;AAEjC,eAAO,MAAM,cAAc;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;CAgGwC,CAAC;AAEpE,MAAM,MAAM,cAAc,GAAG,MAAM,CAAC,MAAM,CAAC,OAAO,cAAc,CAAC,CAAC;AAElE,wBAAgB,sBAAsB,CAAC,QAAQ,EAAE,MAAM,GAAG,IAAI,CAQ7D;AAED,OAAO,EAAE,WAAW,EAAE,MAAM,cAAc,CAAC"}
|
package/lib/config.js
CHANGED
|
@@ -8,21 +8,25 @@ export const calendarConfig = Schema.object({
|
|
|
8
8
|
])
|
|
9
9
|
.default("none")
|
|
10
10
|
.description("日历后端;none 时工具返回未启用提示").i18n({ "en": { "description": "Calendar backend. Tools report that the calendar is disabled when set to none." } })
|
|
11
|
-
.effect("reload")
|
|
11
|
+
.effect("reload")
|
|
12
|
+
.fieldLevels(["global"]),
|
|
12
13
|
timezone: Schema.string()
|
|
13
14
|
.default("Asia/Manila")
|
|
14
15
|
.description("解释无偏移时间与展示用的 IANA 时区").i18n({ "en": { "description": "IANA timezone for interpreting times without offsets and for display." } })
|
|
15
|
-
.effect("reload")
|
|
16
|
-
|
|
17
|
-
|
|
16
|
+
.effect("reload")
|
|
17
|
+
.fieldLevels(["global"]),
|
|
18
|
+
work_day_start: Schema.string().default("09:00").effect("reload").fieldLevels(["global"]),
|
|
19
|
+
work_day_end: Schema.string().default("18:00").effect("reload").fieldLevels(["global"]),
|
|
18
20
|
oauth_redirect_base_url: Schema.string()
|
|
19
21
|
.default("")
|
|
20
22
|
.description("聊天授权回调的外部基础地址(如 https://bot.example.com);留空时使用 zhin HTTP Host 的本机地址")
|
|
21
|
-
.effect("reload")
|
|
23
|
+
.effect("reload")
|
|
24
|
+
.fieldLevels(["global"]),
|
|
22
25
|
oauth_callback_path: Schema.string()
|
|
23
26
|
.default("/calendar/oauth/callback")
|
|
24
27
|
.description("聊天授权回调路由,挂在 zhin HTTP Host 上;反向代理/隧道只转发部分路径时可调整")
|
|
25
|
-
.effect("reload")
|
|
28
|
+
.effect("reload")
|
|
29
|
+
.fieldLevels(["global"]),
|
|
26
30
|
caldav: Schema.object({
|
|
27
31
|
enabled: Schema.boolean().default(false),
|
|
28
32
|
calendar_url: Schema.string()
|
|
@@ -31,7 +35,7 @@ export const calendarConfig = Schema.object({
|
|
|
31
35
|
.effect("reload"),
|
|
32
36
|
username: Schema.string().default("").effect("reload"),
|
|
33
37
|
password: Schema.string().default("").effect("reload"),
|
|
34
|
-
}),
|
|
38
|
+
}).fieldLevels(["global"]),
|
|
35
39
|
google: Schema.object({
|
|
36
40
|
enabled: Schema.boolean().default(false),
|
|
37
41
|
client_id: Schema.string()
|
|
@@ -54,7 +58,7 @@ export const calendarConfig = Schema.object({
|
|
|
54
58
|
.default("")
|
|
55
59
|
.description("可选:持久化轮换后的 refresh_token 的 JSON 路径(如 data/calendar-google-token.json)")
|
|
56
60
|
.effect("reload"),
|
|
57
|
-
}),
|
|
61
|
+
}).fieldLevels(["global"]),
|
|
58
62
|
microsoft: Schema.object({
|
|
59
63
|
enabled: Schema.boolean().default(false),
|
|
60
64
|
client_id: Schema.string()
|
|
@@ -81,8 +85,9 @@ export const calendarConfig = Schema.object({
|
|
|
81
85
|
.default("")
|
|
82
86
|
.description("可选:持久化轮换后的 refresh_token 的 JSON 路径(如 data/calendar-ms-token.json)")
|
|
83
87
|
.effect("reload"),
|
|
84
|
-
}),
|
|
85
|
-
|
|
88
|
+
}).fieldLevels(["global"]),
|
|
89
|
+
// ADR 0050 / 0055: one shared calendar backend, so every field stays global; the switch works at every level.
|
|
90
|
+
}).featureLevels(["global", "adapter", "endpoint", "conversation"]);
|
|
86
91
|
export function assertCalendarTimezone(timezone) {
|
|
87
92
|
try {
|
|
88
93
|
new Intl.DateTimeFormat("zh-CN", { timeZone: timezone }).format(0);
|
package/lib/config.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"config.js","sourceRoot":"","sources":["../src/config.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,MAAM,EAAE,MAAM,SAAS,CAAC;AAEjC,MAAM,CAAC,MAAM,cAAc,GAAG,MAAM,CAAC,MAAM,CAAC;IAC1C,QAAQ,EAAE,MAAM,CAAC,KAAK,CAAC;QACrB,MAAM,CAAC,KAAK,CAAC,MAAM,CAAC;QACpB,MAAM,CAAC,KAAK,CAAC,QAAQ,CAAC;QACtB,MAAM,CAAC,KAAK,CAAC,QAAQ,CAAC;QACtB,MAAM,CAAC,KAAK,CAAC,WAAW,CAAC;KAC1B,CAAC;SACC,OAAO,CAAC,MAAM,CAAC;SACf,WAAW,CAAC,sBAAsB,CAAC,CAAC,IAAI,CAAC,EAAC,IAAI,EAAE,EAAC,aAAa,EAAE,gFAAgF,EAAC,EAAC,CAAC;SACnJ,MAAM,CAAC,QAAQ,CAAC;
|
|
1
|
+
{"version":3,"file":"config.js","sourceRoot":"","sources":["../src/config.ts"],"names":[],"mappings":"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"}
|
package/lib/console.d.ts
CHANGED
|
@@ -1,4 +1,13 @@
|
|
|
1
1
|
import { type PluginConsoleRpc } from 'zhin.js';
|
|
2
2
|
import { type CalendarRuntime } from './runtime.js';
|
|
3
|
+
export interface CalendarConsoleEventItem {
|
|
4
|
+
readonly id: string;
|
|
5
|
+
readonly title: string;
|
|
6
|
+
readonly date: string;
|
|
7
|
+
readonly time: string;
|
|
8
|
+
readonly repeat: string;
|
|
9
|
+
readonly createdAt: string;
|
|
10
|
+
readonly [key: string]: string;
|
|
11
|
+
}
|
|
3
12
|
export declare function createCalendarConsoleRpc(defaultRuntime?: CalendarRuntime): PluginConsoleRpc;
|
|
4
13
|
//# sourceMappingURL=console.d.ts.map
|
package/lib/console.d.ts.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"console.d.ts","sourceRoot":"","sources":["../src/console.ts"],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"console.d.ts","sourceRoot":"","sources":["../src/console.ts"],"names":[],"mappings":"AACA,OAAO,EAGL,KAAK,gBAAgB,EAItB,MAAM,SAAS,CAAC;AAGjB,OAAO,EAAwB,KAAK,eAAe,EAAE,MAAM,cAAc,CAAC;AAE1E,MAAM,WAAW,wBAAwB;IACvC,QAAQ,CAAC,EAAE,EAAE,MAAM,CAAC;IACpB,QAAQ,CAAC,KAAK,EAAE,MAAM,CAAC;IACvB,QAAQ,CAAC,IAAI,EAAE,MAAM,CAAC;IACtB,QAAQ,CAAC,IAAI,EAAE,MAAM,CAAC;IACtB,QAAQ,CAAC,MAAM,EAAE,MAAM,CAAC;IACxB,QAAQ,CAAC,SAAS,EAAE,MAAM,CAAC;IAC3B,QAAQ,EAAE,GAAG,EAAE,MAAM,GAAG,MAAM,CAAC;CAChC;AAmBD,wBAAgB,wBAAwB,CAAC,cAAc,CAAC,EAAE,eAAe,GAAG,gBAAgB,CAuH3F"}
|
package/lib/console.js
CHANGED
|
@@ -1,3 +1,4 @@
|
|
|
1
|
+
import { randomUUID } from 'node:crypto';
|
|
1
2
|
import { definePluginConsoleRpc, PluginConsoleRpcError, } from 'zhin.js';
|
|
2
3
|
import { DEFAULT_OAUTH_CALLBACK_PATH } from './chat-auth.js';
|
|
3
4
|
import { calendarRuntimeToken } from './runtime.js';
|
|
@@ -9,7 +10,10 @@ function resolveCalendarRuntime(call, fallback) {
|
|
|
9
10
|
return runtime;
|
|
10
11
|
}
|
|
11
12
|
export function createCalendarConsoleRpc(defaultRuntime) {
|
|
13
|
+
const localEvents = [];
|
|
12
14
|
return definePluginConsoleRpc({
|
|
15
|
+
// Day-to-day edits belong to operators; `:write` would otherwise infer `manage` (ADR 0049).
|
|
16
|
+
permissions: [{ id: 'calendar:write', level: 'operate', description: '编辑日程' }],
|
|
13
17
|
status: {
|
|
14
18
|
page: 'index',
|
|
15
19
|
requiredPermissions: ['calendar:read'],
|
|
@@ -28,9 +32,93 @@ export function createCalendarConsoleRpc(defaultRuntime) {
|
|
|
28
32
|
ready: Boolean(runtime.provider),
|
|
29
33
|
oauthCallbackPath: cfg.oauth_callback_path?.trim() || DEFAULT_OAUTH_CALLBACK_PATH,
|
|
30
34
|
workingHours: `${start} - ${end}`,
|
|
35
|
+
...(localEvents.length > 0
|
|
36
|
+
? {
|
|
37
|
+
eventCount: localEvents.length,
|
|
38
|
+
events: [...localEvents],
|
|
39
|
+
}
|
|
40
|
+
: {}),
|
|
31
41
|
};
|
|
32
42
|
},
|
|
33
43
|
},
|
|
44
|
+
actions: {
|
|
45
|
+
create: {
|
|
46
|
+
page: 'index',
|
|
47
|
+
requiredPermissions: ['calendar:write'],
|
|
48
|
+
async handler(input, call) {
|
|
49
|
+
const runtime = resolveCalendarRuntime(call, defaultRuntime);
|
|
50
|
+
const title = typeof input.title === 'string' ? input.title.trim() : '';
|
|
51
|
+
if (!title) {
|
|
52
|
+
throw new PluginConsoleRpcError('invalid_input', '请输入日程标题');
|
|
53
|
+
}
|
|
54
|
+
const date = typeof input.date === 'string' ? input.date.trim() : '';
|
|
55
|
+
if (!/^\d{4}-\d{2}-\d{2}$/u.test(date)) {
|
|
56
|
+
throw new PluginConsoleRpcError('invalid_input', '请提供 YYYY-MM-DD 格式的日期');
|
|
57
|
+
}
|
|
58
|
+
const time = typeof input.time === 'string' && input.time.trim()
|
|
59
|
+
? input.time.trim()
|
|
60
|
+
: '09:00';
|
|
61
|
+
const repeat = typeof input.repeat === 'string' &&
|
|
62
|
+
['none', 'daily', 'weekly', 'monthly', 'yearly'].includes(input.repeat)
|
|
63
|
+
? input.repeat
|
|
64
|
+
: 'none';
|
|
65
|
+
let id = randomUUID().slice(0, 8);
|
|
66
|
+
if (runtime.provider) {
|
|
67
|
+
try {
|
|
68
|
+
const start = new Date(`${date}T${time}:00`);
|
|
69
|
+
const end = new Date(start.getTime() + 3600_000);
|
|
70
|
+
if (!Number.isNaN(start.getTime())) {
|
|
71
|
+
const created = await runtime.provider.createEvent({ title, start, end }, call.signal);
|
|
72
|
+
if (created?.id)
|
|
73
|
+
id = created.id;
|
|
74
|
+
}
|
|
75
|
+
}
|
|
76
|
+
catch {
|
|
77
|
+
// Keep console event creation working even when external provider is unreachable
|
|
78
|
+
}
|
|
79
|
+
}
|
|
80
|
+
const eventItem = {
|
|
81
|
+
id,
|
|
82
|
+
title,
|
|
83
|
+
date,
|
|
84
|
+
time,
|
|
85
|
+
repeat,
|
|
86
|
+
createdAt: new Date().toISOString(),
|
|
87
|
+
};
|
|
88
|
+
localEvents.unshift(eventItem);
|
|
89
|
+
return {
|
|
90
|
+
ok: true,
|
|
91
|
+
id,
|
|
92
|
+
title,
|
|
93
|
+
date,
|
|
94
|
+
time,
|
|
95
|
+
repeat,
|
|
96
|
+
message: `已添加日程:${title} (${date} ${time})`,
|
|
97
|
+
};
|
|
98
|
+
},
|
|
99
|
+
},
|
|
100
|
+
delete: {
|
|
101
|
+
page: 'index',
|
|
102
|
+
requiredPermissions: ['calendar:write'],
|
|
103
|
+
handler(input, call) {
|
|
104
|
+
resolveCalendarRuntime(call, defaultRuntime);
|
|
105
|
+
const id = typeof input.id === 'string' ? input.id.trim() : '';
|
|
106
|
+
if (!id) {
|
|
107
|
+
throw new PluginConsoleRpcError('invalid_input', '请提供要删除的日程 ID');
|
|
108
|
+
}
|
|
109
|
+
const idx = localEvents.findIndex((item) => item.id === id);
|
|
110
|
+
const removed = idx >= 0;
|
|
111
|
+
if (removed) {
|
|
112
|
+
localEvents.splice(idx, 1);
|
|
113
|
+
}
|
|
114
|
+
return {
|
|
115
|
+
ok: removed,
|
|
116
|
+
id,
|
|
117
|
+
message: removed ? `已删除日程 ${id}` : `未找到日程 ${id}`,
|
|
118
|
+
};
|
|
119
|
+
},
|
|
120
|
+
},
|
|
121
|
+
},
|
|
34
122
|
});
|
|
35
123
|
}
|
|
36
124
|
//# sourceMappingURL=console.js.map
|
package/lib/console.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"console.js","sourceRoot":"","sources":["../src/console.ts"],"names":[],"mappings":"AAAA,OAAO,EACL,sBAAsB,EACtB,qBAAqB,GAKtB,MAAM,SAAS,CAAC;AACjB,OAAO,EAAE,2BAA2B,EAAE,MAAM,gBAAgB,CAAC;AAE7D,OAAO,EAAE,oBAAoB,EAAwB,MAAM,cAAc,CAAC;
|
|
1
|
+
{"version":3,"file":"console.js","sourceRoot":"","sources":["../src/console.ts"],"names":[],"mappings":"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"}
|
package/lib/http-callback.d.ts
CHANGED
|
@@ -1,10 +1,11 @@
|
|
|
1
1
|
/**
|
|
2
2
|
* OAuth redirect endpoint mounted on zhin's shared HTTP host.
|
|
3
3
|
*/
|
|
4
|
-
import type { IncomingMessage, ServerResponse } from "node:http";
|
|
5
4
|
import type { CallbackResult } from "./chat-auth.js";
|
|
6
5
|
export interface CalendarRouteHost {
|
|
7
|
-
route(method: string, path: string, handler: (request:
|
|
6
|
+
route(method: string, path: string, handler: (request: Request, context: {
|
|
7
|
+
readonly url: URL;
|
|
8
|
+
}) => Response | Promise<Response>, meta?: {
|
|
8
9
|
readonly summary?: string;
|
|
9
10
|
readonly tags?: readonly string[];
|
|
10
11
|
}): () => void;
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"http-callback.d.ts","sourceRoot":"","sources":["../src/http-callback.ts"],"names":[],"mappings":"AAAA;;GAEG;AACH,OAAO,KAAK,EAAE,
|
|
1
|
+
{"version":3,"file":"http-callback.d.ts","sourceRoot":"","sources":["../src/http-callback.ts"],"names":[],"mappings":"AAAA;;GAEG;AACH,OAAO,KAAK,EAAE,cAAc,EAAE,MAAM,gBAAgB,CAAC;AAErD,MAAM,WAAW,iBAAiB;IAChC,KAAK,CACH,MAAM,EAAE,MAAM,EACd,IAAI,EAAE,MAAM,EACZ,OAAO,EAAE,CACP,OAAO,EAAE,OAAO,EAChB,OAAO,EAAE;QAAE,QAAQ,CAAC,GAAG,EAAE,GAAG,CAAA;KAAE,KAC3B,QAAQ,GAAG,OAAO,CAAC,QAAQ,CAAC,EACjC,IAAI,CAAC,EAAE;QAAE,QAAQ,CAAC,OAAO,CAAC,EAAE,MAAM,CAAC;QAAC,QAAQ,CAAC,IAAI,CAAC,EAAE,SAAS,MAAM,EAAE,CAAA;KAAE,GACtE,MAAM,IAAI,CAAC;CACf;AAmBD,wBAAgB,0BAA0B,CACxC,IAAI,EAAE,iBAAiB,EACvB,YAAY,EAAE,MAAM,EACpB,cAAc,EAAE,CAAC,YAAY,EAAE,eAAe,KAAK,OAAO,CAAC,cAAc,CAAC,GACzE,MAAM,IAAI,CAaZ"}
|
package/lib/http-callback.js
CHANGED
|
@@ -14,13 +14,12 @@ function renderPage(result) {
|
|
|
14
14
|
].join("\n");
|
|
15
15
|
}
|
|
16
16
|
export function registerOAuthCallbackRoute(http, callbackPath, handleCallback) {
|
|
17
|
-
return http.route("GET", callbackPath, async (_request,
|
|
17
|
+
return http.route("GET", callbackPath, async (_request, { url }) => {
|
|
18
18
|
const result = await handleCallback(url.searchParams);
|
|
19
|
-
|
|
20
|
-
|
|
21
|
-
|
|
22
|
-
|
|
23
|
-
response.end(renderPage(result));
|
|
19
|
+
return new Response(renderPage(result), { status: result.statusCode, headers: {
|
|
20
|
+
"content-type": "text/html; charset=utf-8",
|
|
21
|
+
"cache-control": "no-store",
|
|
22
|
+
} });
|
|
24
23
|
}, { summary: "Calendar OAuth callback", tags: ["calendar"] });
|
|
25
24
|
}
|
|
26
25
|
//# sourceMappingURL=http-callback.js.map
|
package/lib/http-callback.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"http-callback.js","sourceRoot":"","sources":["../src/http-callback.ts"],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"http-callback.js","sourceRoot":"","sources":["../src/http-callback.ts"],"names":[],"mappings":"AAiBA,SAAS,UAAU,CAAC,IAAY;IAC9B,OAAO,IAAI;SACR,UAAU,CAAC,GAAG,EAAE,OAAO,CAAC;SACxB,UAAU,CAAC,GAAG,EAAE,MAAM,CAAC;SACvB,UAAU,CAAC,GAAG,EAAE,MAAM,CAAC;SACvB,UAAU,CAAC,GAAG,EAAE,QAAQ,CAAC,CAAC;AAC/B,CAAC;AAED,SAAS,UAAU,CAAC,MAAsB;IACxC,OAAO;QACL,iBAAiB;QACjB,wBAAwB;QACxB,8BAA8B;QAC9B,MAAM,UAAU,CAAC,MAAM,CAAC,OAAO,CAAC,MAAM;KACvC,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;AACf,CAAC;AAED,MAAM,UAAU,0BAA0B,CACxC,IAAuB,EACvB,YAAoB,EACpB,cAA0E;IAE1E,OAAO,IAAI,CAAC,KAAK,CACf,KAAK,EACL,YAAY,EACZ,KAAK,EAAE,QAAQ,EAAE,EAAE,GAAG,EAAE,EAAE,EAAE;QAC1B,MAAM,MAAM,GAAG,MAAM,cAAc,CAAC,GAAG,CAAC,YAAY,CAAC,CAAC;QACtD,OAAO,IAAI,QAAQ,CAAC,UAAU,CAAC,MAAM,CAAC,EAAE,EAAE,MAAM,EAAE,MAAM,CAAC,UAAU,EAAE,OAAO,EAAE;gBAC5E,cAAc,EAAE,0BAA0B;gBAC1C,eAAe,EAAE,UAAU;aAC5B,EAAE,CAAC,CAAC;IACP,CAAC,EACD,EAAE,OAAO,EAAE,yBAAyB,EAAE,IAAI,EAAE,CAAC,UAAU,CAAC,EAAE,CAC3D,CAAC;AACJ,CAAC"}
|
package/lib/index.d.ts
CHANGED
|
@@ -8,7 +8,7 @@ export { parseCalDavEvents } from "./caldav.js";
|
|
|
8
8
|
export { calendarConfig, assertCalendarTimezone, type CalendarConfig, } from "./config.js";
|
|
9
9
|
export { cleanSecret } from "./secrets.js";
|
|
10
10
|
export { calendarRuntimeToken, type CalendarRuntime } from "./runtime.js";
|
|
11
|
-
export { createCalendarConsoleRpc } from "./console.js";
|
|
11
|
+
export { createCalendarConsoleRpc, type CalendarConsoleEventItem, } from "./console.js";
|
|
12
12
|
export { OAuthTokenManager, OAuthTokenError, authCommandFor, type OAuthProviderKind, type RefreshTokenStore, type TokenManagerOptions, type TokenSet, } from "./token-manager.js";
|
|
13
13
|
export { CalendarCredentialStore, type CalendarStateStore, type CredentialOwner, type StoredCredential, } from "./credential-store.js";
|
|
14
14
|
export { CalendarAuthService, DEFAULT_OAUTH_CALLBACK_PATH, buildRedirectUri, localOriginFromAddress, parseOAuthProvider, } from "./chat-auth.js";
|
package/lib/index.d.ts.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,cAAc,EAAE,MAAM,aAAa,CAAC;AAOlD,OAAO,KAAK,EAAE,gBAAgB,EAAE,MAAM,YAAY,CAAC;AACnD,OAAO,KAAK,EAAE,uBAAuB,EAAE,MAAM,uBAAuB,CAAC;AACrE,OAAO,EACL,iBAAiB,EACjB,KAAK,yBAAyB,EAC9B,KAAK,iBAAiB,EACvB,MAAM,oBAAoB,CAAC;AAE5B,YAAY,EACV,aAAa,EACb,gBAAgB,EAChB,QAAQ,EACR,gBAAgB,GACjB,MAAM,YAAY,CAAC;AACpB,OAAO,EAAE,aAAa,EAAE,MAAM,gBAAgB,CAAC;AAC/C,OAAO,EAAE,iBAAiB,EAAE,MAAM,aAAa,CAAC;AAChD,OAAO,EACL,cAAc,EACd,sBAAsB,EACtB,KAAK,cAAc,GACpB,MAAM,aAAa,CAAC;AACrB,OAAO,EAAE,WAAW,EAAE,MAAM,cAAc,CAAC;AAC3C,OAAO,EAAE,oBAAoB,EAAE,KAAK,eAAe,EAAE,MAAM,cAAc,CAAC;AAC1E,OAAO,
|
|
1
|
+
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,cAAc,EAAE,MAAM,aAAa,CAAC;AAOlD,OAAO,KAAK,EAAE,gBAAgB,EAAE,MAAM,YAAY,CAAC;AACnD,OAAO,KAAK,EAAE,uBAAuB,EAAE,MAAM,uBAAuB,CAAC;AACrE,OAAO,EACL,iBAAiB,EACjB,KAAK,yBAAyB,EAC9B,KAAK,iBAAiB,EACvB,MAAM,oBAAoB,CAAC;AAE5B,YAAY,EACV,aAAa,EACb,gBAAgB,EAChB,QAAQ,EACR,gBAAgB,GACjB,MAAM,YAAY,CAAC;AACpB,OAAO,EAAE,aAAa,EAAE,MAAM,gBAAgB,CAAC;AAC/C,OAAO,EAAE,iBAAiB,EAAE,MAAM,aAAa,CAAC;AAChD,OAAO,EACL,cAAc,EACd,sBAAsB,EACtB,KAAK,cAAc,GACpB,MAAM,aAAa,CAAC;AACrB,OAAO,EAAE,WAAW,EAAE,MAAM,cAAc,CAAC;AAC3C,OAAO,EAAE,oBAAoB,EAAE,KAAK,eAAe,EAAE,MAAM,cAAc,CAAC;AAC1E,OAAO,EACL,wBAAwB,EACxB,KAAK,wBAAwB,GAC9B,MAAM,cAAc,CAAC;AACtB,OAAO,EACL,iBAAiB,EACjB,eAAe,EACf,cAAc,EACd,KAAK,iBAAiB,EACtB,KAAK,iBAAiB,EACtB,KAAK,mBAAmB,EACxB,KAAK,QAAQ,GACd,MAAM,oBAAoB,CAAC;AAC5B,OAAO,EACL,uBAAuB,EACvB,KAAK,kBAAkB,EACvB,KAAK,eAAe,EACpB,KAAK,gBAAgB,GACtB,MAAM,uBAAuB,CAAC;AAC/B,OAAO,EACL,mBAAmB,EACnB,2BAA2B,EAC3B,gBAAgB,EAChB,sBAAsB,EACtB,kBAAkB,GACnB,MAAM,gBAAgB,CAAC;AACxB,OAAO,EAAE,oBAAoB,EAAE,oBAAoB,EAAE,MAAM,oBAAoB,CAAC;AAChF,OAAO,EACL,iBAAiB,EACjB,cAAc,EACd,gBAAgB,EAChB,yBAAyB,EACzB,kBAAkB,EAClB,qBAAqB,GACtB,MAAM,iBAAiB,CAAC;AACzB,OAAO,EAAE,qBAAqB,EAAE,MAAM,YAAY,CAAC;AAEnD,MAAM,WAAW,4BAA4B;IAC3C,8DAA8D;IAC9D,QAAQ,CAAC,QAAQ,CAAC,EAAE,OAAO,CAAC,MAAM,CAAC,iBAAiB,EAAE,iBAAiB,CAAC,CAAC,CAAC;CAC3E;AAED,MAAM,WAAW,wBAAwB;IACvC,QAAQ,CAAC,WAAW,CAAC,EAAE,uBAAuB,CAAC;IAC/C,QAAQ,CAAC,mBAAmB,CAAC,EAAE,yBAAyB,CAAC;CAC1D;AAED;;;GAGG;AACH,wBAAgB,wBAAwB,CACtC,MAAM,EAAE,cAAc,EACtB,YAAY,GAAE,wBAA6B,GAC1C,OAAO,CAAC,MAAM,CAAC,iBAAiB,EAAE,iBAAiB,CAAC,CAAC,CAiCvD;AAED,2EAA2E;AAC3E,wBAAgB,sBAAsB,CACpC,MAAM,EAAE,cAAc,EACtB,YAAY,GAAE,4BAAiC,GAC9C,gBAAgB,GAAG,SAAS,CAyE9B"}
|
package/lib/index.js
CHANGED
|
@@ -7,7 +7,7 @@ export { parseCalDavEvents } from "./caldav.js";
|
|
|
7
7
|
export { calendarConfig, assertCalendarTimezone, } from "./config.js";
|
|
8
8
|
export { cleanSecret } from "./secrets.js";
|
|
9
9
|
export { calendarRuntimeToken } from "./runtime.js";
|
|
10
|
-
export { createCalendarConsoleRpc } from "./console.js";
|
|
10
|
+
export { createCalendarConsoleRpc, } from "./console.js";
|
|
11
11
|
export { OAuthTokenManager, OAuthTokenError, authCommandFor, } from "./token-manager.js";
|
|
12
12
|
export { CalendarCredentialStore, } from "./credential-store.js";
|
|
13
13
|
export { CalendarAuthService, DEFAULT_OAUTH_CALLBACK_PATH, buildRedirectUri, localOriginFromAddress, parseOAuthProvider, } from "./chat-auth.js";
|
package/lib/index.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,WAAW,EAAE,MAAM,cAAc,CAAC;AAC3C,OAAO,EAAE,oBAAoB,EAAE,MAAM,aAAa,CAAC;AACnD,OAAO,EACL,4BAA4B,EAC5B,+BAA+B,GAChC,MAAM,YAAY,CAAC;AAGpB,OAAO,EACL,iBAAiB,GAGlB,MAAM,oBAAoB,CAAC;AAQ5B,OAAO,EAAE,aAAa,EAAE,MAAM,gBAAgB,CAAC;AAC/C,OAAO,EAAE,iBAAiB,EAAE,MAAM,aAAa,CAAC;AAChD,OAAO,EACL,cAAc,EACd,sBAAsB,GAEvB,MAAM,aAAa,CAAC;AACrB,OAAO,EAAE,WAAW,EAAE,MAAM,cAAc,CAAC;AAC3C,OAAO,EAAE,oBAAoB,EAAwB,MAAM,cAAc,CAAC;AAC1E,OAAO,
|
|
1
|
+
{"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"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"}
|
package/lib/notify.d.ts
ADDED
|
@@ -0,0 +1,10 @@
|
|
|
1
|
+
import type { DeliveryTarget, OutboundHost } from "zhin.js";
|
|
2
|
+
import type { CalendarNotifier } from "./chat-auth.js";
|
|
3
|
+
/**
|
|
4
|
+
* Authorization notices are not messages, so the dispatch gate does not see them (ADR 0050 / 0055):
|
|
5
|
+
* skip targets whose account or conversation switched calendar off.
|
|
6
|
+
*/
|
|
7
|
+
export declare function createCalendarNotifier(outbound: Pick<OutboundHost, "sendTarget"> | undefined, isEnabledFor: (target: {
|
|
8
|
+
conversation: DeliveryTarget;
|
|
9
|
+
}) => boolean): CalendarNotifier<DeliveryTarget> | undefined;
|
|
10
|
+
//# sourceMappingURL=notify.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"notify.d.ts","sourceRoot":"","sources":["../src/notify.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,cAAc,EAAE,YAAY,EAAE,MAAM,SAAS,CAAC;AAE5D,OAAO,KAAK,EAAE,gBAAgB,EAAE,MAAM,gBAAgB,CAAC;AAEvD;;;GAGG;AACH,wBAAgB,sBAAsB,CACpC,QAAQ,EAAE,IAAI,CAAC,YAAY,EAAE,YAAY,CAAC,GAAG,SAAS,EACtD,YAAY,EAAE,CAAC,MAAM,EAAE;IAAE,YAAY,EAAE,cAAc,CAAA;CAAE,KAAK,OAAO,GAClE,gBAAgB,CAAC,cAAc,CAAC,GAAG,SAAS,CAO9C"}
|
package/lib/notify.js
ADDED
|
@@ -0,0 +1,15 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Authorization notices are not messages, so the dispatch gate does not see them (ADR 0050 / 0055):
|
|
3
|
+
* skip targets whose account or conversation switched calendar off.
|
|
4
|
+
*/
|
|
5
|
+
export function createCalendarNotifier(outbound, isEnabledFor) {
|
|
6
|
+
const sendTarget = outbound?.sendTarget;
|
|
7
|
+
if (!sendTarget)
|
|
8
|
+
return undefined;
|
|
9
|
+
return async (target, text, locale) => {
|
|
10
|
+
if (!isEnabledFor({ conversation: target }))
|
|
11
|
+
return;
|
|
12
|
+
await sendTarget.call(outbound, target, text, { locale });
|
|
13
|
+
};
|
|
14
|
+
}
|
|
15
|
+
//# sourceMappingURL=notify.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"notify.js","sourceRoot":"","sources":["../src/notify.ts"],"names":[],"mappings":"AAIA;;;GAGG;AACH,MAAM,UAAU,sBAAsB,CACpC,QAAsD,EACtD,YAAmE;IAEnE,MAAM,UAAU,GAAG,QAAQ,EAAE,UAAU,CAAC;IACxC,IAAI,CAAC,UAAU;QAAE,OAAO,SAAS,CAAC;IAClC,OAAO,KAAK,EAAE,MAAsB,EAAE,IAAY,EAAE,MAAc,EAAE,EAAE;QACpE,IAAI,CAAC,YAAY,CAAC,EAAE,YAAY,EAAE,MAAM,EAAE,CAAC;YAAE,OAAO;QACpD,MAAM,UAAU,CAAC,IAAI,CAAC,QAAQ,EAAE,MAAM,EAAE,IAAI,EAAE,EAAE,MAAM,EAAE,CAAC,CAAC;IAC5D,CAAC,CAAC;AACJ,CAAC"}
|