Files
dingtalk-workspace-cli/internal/event/bus/doc.go
aa6abc5ed6 feat(event): add personal event subscriptions (#589)
* dws event

* fix consume fail

* test: add stream ticket injection probe

* feat: add portal ticket stream mode

* user event

* fix: allow portal ticket normal without app secret

* event

* user event

* eventType filter

* refactor(event): 优化IPC端点路径处理和改进相关测试

- 用dwsevent.IPCEndpoint替代原先根据GOOS判断的路径逻辑
- 新增event包实现Unix socket路径长度限制及长路径fallback机制
- 添加endpoint_test.go覆盖路径短长及唯一性的单元测试
- 修改busctl模块使用统一的IPC端点获取方法,避免重复实现
- transport_unix.go新增checkSocketPath函数检查路径长度,防止EINVAL错误
- 在监听和连接Unix socket时加入路径限制检查,提升错误明晰度
- 去除多个文件中无用的runtime导入,简化代码依赖

* opt

* event skill

* default value

* install script event

* fix: remove subscribe id event fanout filter

* fix(personal): 修正指定发送人消息描述错误

* more im event

* filter subId

* fix: align personal event schema with stream payload

* fix: avoid duplicate app helper name

* feat: simplify personal event schemas

* feat: simplify event schema output

* docs: refine dingtalk event skill references

* feat: align personal event consume flags

* fix event stop and status visibility

* hide app event public entrypoints

* hide incomplete personal sender event

* remove external event reference comments

* chore(event): prepare official release

* fix(event): harden personal stream lifecycle

---------

Co-authored-by: 玉澜 <yulan.wqy@alibaba-inc.com>
Co-authored-by: zhengyubai <zhengyubai618@gmail.com>
2026-07-10 17:54:43 +08:00

35 lines
1.7 KiB
Go
Raw Permalink Blame History

This file contains ambiguous Unicode characters
This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.
// Copyright 2026 Alibaba Group
// Licensed under the Apache License, Version 2.0 (the "License");
// you may not use this file except in compliance with the License.
// You may obtain a copy of the License at
//
// http://www.apache.org/licenses/LICENSE-2.0
//
// Unless required by applicable law or agreed to in writing, software
// distributed under the License is distributed on an "AS IS" BASIS,
// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
// See the License for the specific language governing permissions and
// limitations under the License.
// Package bus implements the daemon side of the dws event subsystem: one
// long-lived process per ClientID that holds the single cloud connection
// and fans out events to N local consumers over IPC.
//
// Files (mirroring plan §5 layout):
//
// daemon.go main loop: lock → meta → IPC listen → ready → source.Start
// hub.go consumer registry, per-consumer sendCh, drop-oldest backpressure
// metrics.go per-event-type + per-consumer received/dropped counters
// lockfile.go single bus.lock (flock + PID content + stale recovery)
// meta.go bus.meta JSON (clientID/edition/started_at) for list/status reverse mapping
//
// Lifecycle invariants (plan §4 invariants 1–7):
// 1. emit non-blocking (drop-oldest, never block SDK callback)
// 2. dedup on event_id (LRU) to absorb cloud-side redelivery
// 3. single bus per ClientID (bus.lock enforces, all FS paths use clientIDHash)
// 4. upstream always full subscription; consumer filter only affects bus→consume
// 5. dead-consumer auto-reap on socket EOF
// 6. startup order: lock → meta → IPC listen → ready pipe → Source.Start
// 7. stdio detach when fork'd by busctl/spawn
package bus