@dsh-enhanced/event-triggers 0.1.3

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 ADDED
@@ -0,0 +1,21 @@
1
+ MIT License
2
+
3
+ Copyright (c) 2026 dsh-enhanced contributors
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 ADDED
@@ -0,0 +1,48 @@
1
+ # @dsh-enhanced/event-triggers
2
+
3
+ 把受限 file、HTTPS/JSON 和 HMAC webhook 边缘条件转换成 `assistant-automations` 的稳定 external occurrence。插件先在自己的 SQLite outbox 持久化 fire,再调用 Automations;下游失败或重启时重放相同 event id,不直接创建 Agent 或发送消息。失败项采用持久退避重试,已删除或禁用 trigger 的遗留事件进入 quarantine,不会阻塞后续事件。
4
+
5
+ ## 安装与默认状态
6
+
7
+ ```sh
8
+ dsh plugin --profile web add @dsh-enhanced/event-triggers
9
+ dsh --profile web --dump-config
10
+ ```
11
+
12
+ 默认 `triggers: []`、`pollerEnabled: false`。File/HTTP 需要给 `background:event-triggers:<id>` 的 filesystem/network `observe` 明确 Policy 规则;Webhook 还需要 `external:webhook:<id>` 的 automation `accept` 规则,Automations 本身会再次验证 external `ingest`。
13
+
14
+ HTTP 网络权限使用精确 HTTPS origin:
15
+
16
+ ```yaml
17
+ allowedHttpOrigins:
18
+ - https://api.example.com
19
+ - https://metrics.example.com:8443
20
+ ```
21
+
22
+ 旧配置 `allowedHttpHosts: [api.example.com]` 继续兼容,但只迁移为 `https://api.example.com`(默认 443);非默认端口必须显式写入 `allowedHttpOrigins`。Origin 条目不能包含凭据、路径、query 或 fragment。
23
+
24
+ 每个轮询触发器支持 baseline、`changed`/`truthy` edge、debounce、cooldown、TTL 和 maxFires;`pollConcurrency`(默认 8,范围 1–32)限制并发观测数,轮询起点会轮换,单个慢或失败 trigger 不会阻塞后续 trigger。单个 trigger 失败会记录健康状态并继续轮询其余 trigger。Webhook 同样执行持久 cooldown/TTL/maxFires,并使用 `credentials-keychain` handle(purpose 为 `verify-webhook`)、毫秒 timestamp、nonce 和签名:
25
+
26
+ ```text
27
+ sha256=HMAC_SHA256(secret, timestamp + "\n" + nonce + "\n" + rawBody)
28
+ ```
29
+
30
+ 签名 timestamp 只作为 occurrence 时间和防重放窗口输入;cooldown/TTL 使用服务端一次捕获的接收时间,调用方不能通过伪造窗口内 timestamp 绕过。宿主 adapter 可调用 `ctx.eventTriggers.ingestWebhook()`;本版本不自行暴露公网 listener。若需要 HTTP ingress,应由只监听 loopback、具备 body/rate limit 的部署网关转发,不能把该 service API 当 capability URL。
31
+
32
+ ## 权限与数据
33
+
34
+ - 文件系统:私有 SQLite(WAL/FULL、目录 `0700`、文件 `0600`);只读取 `allowedFileRoots` 内 regular non-symlink 文件,按 `maxBodyBytes` 限制。被 file trigger 使用的 root 必须在 service 初始化时已存在且为目录;此时一次性固定其配置路径与物理 realpath 的 dev/ino,后续每次读取都复核。文件使用 `O_NOFOLLOW | O_NONBLOCK` 打开,并在 descriptor 上复查 regular file、dev/ino 与固定 root,覆盖跨 poll 以及同一读取内的 leaf、祖先目录、root symlink/FIFO swap。`requestTimeoutMs` 也作为每个 file observation 的 service deadline;底层不可取消的文件系统调用超时后仅保留每 trigger 一个纯读取,结果会丢弃,后续轮询和销毁不会等待它或在关库后回写。
35
+ - 网络:HTTP sensor 仅允许精确 HTTPS origin。每次请求最多接受 16 个去重 DNS answer,只允许 global-unicast IPv4,并校验保留地址。IPv6 默认 `ipv6Mode: deny`,因为任意网络都可能使用无法仅从地址识别的自定义 NAT64/翻译前缀;只有运维方确认出口为纯原生 IPv6、不会把任何 IPv6 前缀翻译到 IPv4 时,才可显式设为 `native-only`。启用后仍会拒绝 mapped、6to4、ISATAP 等可识别的内嵌非公网 IPv4。生产 socket 固定到本次单次解析的已验证地址,同时保留原 hostname 做 TLS SNI/证书校验,并以 `agent: false` 禁止复用全局 keep-alive socket 绕过本次 pin。一个 deadline 覆盖 DNS、连接、响应和正文;禁止 redirect,拒绝响应会取消正文,正文受 `maxBodyBytes` 限制。若底层 resolver/fetch/body 不响应取消,service 会维持该 trigger 的 single-flight 记录直到真实底层 operation 结束,不会每轮重复累积资源。
36
+ - 凭据:只有 webhook 配置存在时才需要 `credentials-keychain`;secret 只在 HMAC callback 内短暂可见,不落库/日志/事件。
37
+ - 子进程、浏览器、任意 shell、安装脚本:无。
38
+ - 外部 body:验签后也不会成为 Agent prompt;只生成不含正文的 occurrence。
39
+
40
+ `health()` 会返回 pending/retrying/quarantined/delivered 数、失败 trigger 数以及最近的有界错误摘要。SQLite schema v2 会从 v1 原位迁移并保留已有 pending event;poller 即使关闭,独立 outbox flush 仍会运行。每轮 flush 分页处理并对失败项持久退避,因此 poison/stale 事件不会造成队头永久阻塞。
41
+
42
+ ## 限制
43
+
44
+ 单机 SQLite 语义,不承诺跨节点 exactly-once;下游调用是至少一次,但 stable event id 由 Automations 去重。单轮 flush 有有界工作量,超过上限的 due event 会在后续周期继续公平处理。首版没有 command sensor、redirect follow、任意 URL、payload-to-prompt 或公网监听器。
45
+
46
+ ## 兼容性与参考
47
+
48
+ 以 DSH rc.8 `141eb6fef83422698aef7a981029e843e8161534` 验证。设计借鉴 `dsh-sentinel@833a4e9` 的 baseline/edge/cooldown 与 fire-before-delivery watermark,但没有安装或复制其 JSONL、shell command、弱租约或 capability URL 设计。
@@ -0,0 +1,18 @@
1
+ - insert:
2
+ - id: dsh-enhanced-event-triggers
3
+ name: '@dsh-enhanced/event-triggers'
4
+ inject:
5
+ - assistantPolicy
6
+ - assistantAutomations
7
+ config:
8
+ databasePath: !!js dshHomePath('event-triggers/state.sqlite')
9
+ allowedFileRoots: []
10
+ allowedHttpOrigins: []
11
+ allowedHttpHosts: []
12
+ triggers: []
13
+ pollerEnabled: false
14
+ pollIntervalMs: 5000
15
+ pollConcurrency: 8
16
+ requestTimeoutMs: 10000
17
+ maxBodyBytes: 65536
18
+ ipv6Mode: deny
@@ -0,0 +1,73 @@
1
+ import Schema from '@deepseek-ai/schemastery';
2
+ export type FireWhen = 'changed' | 'truthy';
3
+ export type Ipv6Mode = 'deny' | 'native-only';
4
+ interface TriggerBase {
5
+ id: string;
6
+ automationId: string;
7
+ enabled?: boolean;
8
+ cooldownMs?: number;
9
+ maxFires?: number;
10
+ ttlMs?: number;
11
+ }
12
+ export interface FileTriggerConfig extends TriggerBase {
13
+ kind: 'file';
14
+ path: string;
15
+ fireWhen?: FireWhen;
16
+ debounceMs?: number;
17
+ mode?: 'content-hash' | 'exists';
18
+ }
19
+ export interface HttpJsonTriggerConfig extends TriggerBase {
20
+ kind: 'http-json';
21
+ url: string;
22
+ pointer: string;
23
+ fireWhen?: FireWhen;
24
+ debounceMs?: number;
25
+ }
26
+ export interface WebhookTriggerConfig extends TriggerBase {
27
+ kind: 'webhook';
28
+ credentialHandle: string;
29
+ maxSkewMs?: number;
30
+ }
31
+ export type EventTriggerConfig = FileTriggerConfig | HttpJsonTriggerConfig | WebhookTriggerConfig;
32
+ export interface Config {
33
+ databasePath: string;
34
+ allowedFileRoots?: string[];
35
+ allowedHttpOrigins?: string[];
36
+ /** @deprecated Use allowedHttpOrigins. Legacy hosts authorize HTTPS port 443 only. */
37
+ allowedHttpHosts?: string[];
38
+ triggers?: EventTriggerConfig[];
39
+ pollerEnabled?: boolean;
40
+ pollIntervalMs?: number;
41
+ pollConcurrency?: number;
42
+ requestTimeoutMs?: number;
43
+ maxBodyBytes?: number;
44
+ /**
45
+ * IPv6 is denied unless the operator asserts that the egress network is native-only
46
+ * and cannot translate network-specific prefixes to IPv4 destinations.
47
+ */
48
+ ipv6Mode?: Ipv6Mode;
49
+ }
50
+ export type NormalizedTrigger = (Required<Omit<FileTriggerConfig, 'ttlMs'>> & {
51
+ ttlMs?: number;
52
+ }) | (Required<Omit<HttpJsonTriggerConfig, 'ttlMs'>> & {
53
+ ttlMs?: number;
54
+ }) | (Required<Omit<WebhookTriggerConfig, 'ttlMs'>> & {
55
+ ttlMs?: number;
56
+ });
57
+ export interface NormalizedConfig {
58
+ databasePath: string;
59
+ triggers: readonly NormalizedTrigger[];
60
+ allowedFileRoots: readonly string[];
61
+ allowedHttpOrigins: readonly string[];
62
+ allowedHttpHosts: readonly string[];
63
+ pollerEnabled: boolean;
64
+ pollIntervalMs: number;
65
+ pollConcurrency: number;
66
+ requestTimeoutMs: number;
67
+ maxBodyBytes: number;
68
+ ipv6Mode: Ipv6Mode;
69
+ }
70
+ export declare const ConfigSchema: Schema<Config>;
71
+ export declare function normalizeEventTriggersConfig(input: Config): NormalizedConfig;
72
+ export {};
73
+ //# sourceMappingURL=config.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"config.d.ts","sourceRoot":"","sources":["../src/config.ts"],"names":[],"mappings":"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"}
package/lib/config.js ADDED
@@ -0,0 +1,149 @@
1
+ import { isAbsolute, relative, resolve } from 'node:path';
2
+ import Schema from '@deepseek-ai/schemastery';
3
+ const base = {
4
+ id: Schema.string().required(),
5
+ automationId: Schema.string().required(),
6
+ enabled: Schema.boolean().default(true),
7
+ cooldownMs: Schema.number().step(1).min(0).max(86_400_000).default(0),
8
+ maxFires: Schema.number().step(1).min(1).max(1_000_000).default(100),
9
+ ttlMs: Schema.number().step(1).min(1_000).max(31_536_000_000),
10
+ };
11
+ const triggerSchema = Schema.union([
12
+ Schema.object({
13
+ ...base,
14
+ kind: Schema.const('file').required(),
15
+ path: Schema.string().required(),
16
+ fireWhen: Schema.union(['changed', 'truthy']).default('changed'),
17
+ debounceMs: Schema.number().step(1).min(0).max(86_400_000).default(0),
18
+ mode: Schema.union(['content-hash', 'exists']).default('content-hash'),
19
+ }),
20
+ Schema.object({
21
+ ...base,
22
+ kind: Schema.const('http-json').required(),
23
+ url: Schema.string().required(),
24
+ pointer: Schema.string().required(),
25
+ fireWhen: Schema.union(['changed', 'truthy']).default('changed'),
26
+ debounceMs: Schema.number().step(1).min(0).max(86_400_000).default(0),
27
+ }),
28
+ Schema.object({
29
+ ...base,
30
+ kind: Schema.const('webhook').required(),
31
+ credentialHandle: Schema.string().required(),
32
+ maxSkewMs: Schema.number().step(1).min(1_000).max(3_600_000).default(300_000),
33
+ }),
34
+ ]);
35
+ export const ConfigSchema = Schema.object({
36
+ databasePath: Schema.string().required(),
37
+ allowedFileRoots: Schema.array(Schema.string()).default([]),
38
+ allowedHttpOrigins: Schema.array(Schema.string()).default([]),
39
+ allowedHttpHosts: Schema.array(Schema.string()).default([]),
40
+ triggers: Schema.array(triggerSchema).default([]),
41
+ pollerEnabled: Schema.boolean().default(false),
42
+ pollIntervalMs: Schema.number().step(1).min(1_000).max(3_600_000).default(5_000),
43
+ pollConcurrency: Schema.number().step(1).min(1).max(32).default(8),
44
+ requestTimeoutMs: Schema.number().step(1).min(100).max(300_000).default(10_000),
45
+ maxBodyBytes: Schema.number().step(1).min(1).max(16_777_216).default(65_536),
46
+ ipv6Mode: Schema.union(['deny', 'native-only']).default('deny'),
47
+ });
48
+ function id(value, field) {
49
+ const normalized = value.normalize('NFC').trim();
50
+ if (!/^[a-z0-9][a-z0-9._:-]{0,199}$/u.test(normalized)) {
51
+ throw new Error(`event-triggers: ${field} must be a stable lowercase identifier`);
52
+ }
53
+ return normalized;
54
+ }
55
+ function contained(path, roots) {
56
+ const target = resolve(path);
57
+ return roots.some(root => {
58
+ const child = relative(root, target);
59
+ return child === '' || (!child.startsWith('..') && !isAbsolute(child));
60
+ });
61
+ }
62
+ function httpOrigin(value) {
63
+ let url;
64
+ try {
65
+ url = new URL(value.normalize('NFC').trim());
66
+ }
67
+ catch {
68
+ throw new Error('event-triggers: invalid HTTP origin');
69
+ }
70
+ if (url.protocol !== 'https:' || url.username !== '' || url.password !== ''
71
+ || url.pathname !== '/' || url.search !== '' || url.hash !== '') {
72
+ throw new Error('event-triggers: HTTP origins must be exact HTTPS origins without credentials, path, query, or fragment');
73
+ }
74
+ return url.origin;
75
+ }
76
+ export function normalizeEventTriggersConfig(input) {
77
+ if (typeof input === 'object' && input !== null && 'webhookListen' in input) {
78
+ throw new Error('event-triggers: built-in webhook listener is not supported; use an authenticated loopback adapter');
79
+ }
80
+ let parsed;
81
+ try {
82
+ parsed = ConfigSchema(input);
83
+ }
84
+ catch (error) {
85
+ throw new Error(`event-triggers: invalid configuration: ${String(error)}`, { cause: error });
86
+ }
87
+ if (!isAbsolute(parsed.databasePath))
88
+ throw new Error('event-triggers: databasePath must be absolute');
89
+ const roots = parsed.allowedFileRoots.map(root => {
90
+ if (!isAbsolute(root))
91
+ throw new Error('event-triggers: allowed file roots must be absolute');
92
+ return resolve(root);
93
+ });
94
+ const hosts = parsed.allowedHttpHosts.map(host => host.normalize('NFC').trim().toLowerCase());
95
+ if (hosts.some(host => !/^[a-z0-9.-]+$/u.test(host))) {
96
+ throw new Error('event-triggers: HTTP allowlist contains an invalid hostname');
97
+ }
98
+ const origins = [...new Set([
99
+ ...hosts.map(host => `https://${host}`),
100
+ ...parsed.allowedHttpOrigins.map(httpOrigin),
101
+ ])];
102
+ const triggers = parsed.triggers.map(raw => {
103
+ const trigger = { ...raw, id: id(raw.id, 'trigger id'), automationId: id(raw.automationId, 'automationId') };
104
+ if (trigger.kind === 'file') {
105
+ if (!isAbsolute(trigger.path) || !contained(trigger.path, roots)) {
106
+ throw new Error('event-triggers: file path is outside allowedFileRoots');
107
+ }
108
+ return Object.freeze({ ...trigger, path: resolve(trigger.path) });
109
+ }
110
+ if (trigger.kind === 'http-json') {
111
+ let url;
112
+ try {
113
+ url = new URL(trigger.url);
114
+ }
115
+ catch {
116
+ throw new Error('event-triggers: invalid HTTP URL');
117
+ }
118
+ if (url.protocol !== 'https:')
119
+ throw new Error('event-triggers: HTTP sensors require HTTPS');
120
+ if (url.username !== '' || url.password !== '' || !origins.includes(url.origin)) {
121
+ throw new Error('event-triggers: HTTP sensor host/origin is not allowlisted');
122
+ }
123
+ if (trigger.pointer !== '' && !trigger.pointer.startsWith('/')) {
124
+ throw new Error('event-triggers: JSON pointer must be empty or start with /');
125
+ }
126
+ return Object.freeze({ ...trigger, url: url.toString() });
127
+ }
128
+ return Object.freeze({ ...trigger, credentialHandle: id(trigger.credentialHandle, 'credentialHandle') });
129
+ });
130
+ if (triggers.length > 1_000)
131
+ throw new Error('event-triggers: too many triggers');
132
+ if (new Set(triggers.map(trigger => trigger.id)).size !== triggers.length) {
133
+ throw new Error('event-triggers: trigger ids must be unique');
134
+ }
135
+ return Object.freeze({
136
+ databasePath: parsed.databasePath,
137
+ pollerEnabled: parsed.pollerEnabled,
138
+ pollIntervalMs: parsed.pollIntervalMs,
139
+ pollConcurrency: parsed.pollConcurrency,
140
+ requestTimeoutMs: parsed.requestTimeoutMs,
141
+ maxBodyBytes: parsed.maxBodyBytes,
142
+ ipv6Mode: parsed.ipv6Mode,
143
+ allowedFileRoots: Object.freeze(roots),
144
+ allowedHttpHosts: Object.freeze(hosts),
145
+ allowedHttpOrigins: Object.freeze(origins),
146
+ triggers: Object.freeze(triggers),
147
+ });
148
+ }
149
+ //# sourceMappingURL=config.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"config.js","sourceRoot":"","sources":["../src/config.ts"],"names":[],"mappings":"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"}
package/lib/index.d.ts ADDED
@@ -0,0 +1,10 @@
1
+ import type { Context } from '@deepseek-ai/cordis';
2
+ import { EventTriggersService, Config } from './service.js';
3
+ import { version } from './version.js';
4
+ export declare const name = "dsh-enhanced-event-triggers";
5
+ export { Config, EventTriggersService, version };
6
+ export * from './config.js';
7
+ export * from './service.js';
8
+ export declare function apply(ctx: Context, config: import('./config.js').Config): void;
9
+ export default EventTriggersService;
10
+ //# sourceMappingURL=index.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,OAAO,EAAE,MAAM,qBAAqB,CAAA;AAClD,OAAO,EAAE,oBAAoB,EAAE,MAAM,EAAE,MAAM,cAAc,CAAA;AAE3D,OAAO,EAAE,OAAO,EAAE,MAAM,cAAc,CAAA;AAEtC,eAAO,MAAM,IAAI,gCAAgC,CAAA;AACjD,OAAO,EAAE,MAAM,EAAE,oBAAoB,EAAE,OAAO,EAAE,CAAA;AAChD,cAAc,aAAa,CAAA;AAC3B,cAAc,cAAc,CAAA;AAE5B,wBAAgB,KAAK,CAAC,GAAG,EAAE,OAAO,EAAE,MAAM,EAAE,OAAO,aAAa,EAAE,MAAM,GAAG,IAAI,CAS9E;AAED,eAAe,oBAAoB,CAAA"}
package/lib/index.js ADDED
@@ -0,0 +1,19 @@
1
+ import { EventTriggersService, Config } from './service.js';
2
+ import { normalizeEventTriggersConfig } from './config.js';
3
+ import { version } from './version.js';
4
+ export const name = 'dsh-enhanced-event-triggers';
5
+ export { Config, EventTriggersService, version };
6
+ export * from './config.js';
7
+ export * from './service.js';
8
+ export function apply(ctx, config) {
9
+ const normalized = normalizeEventTriggersConfig(config);
10
+ if (normalized.triggers.some(trigger => trigger.kind === 'webhook')) {
11
+ ctx.inject(['credentialsKeychain'], (credentialsCtx) => {
12
+ new EventTriggersService(credentialsCtx, config);
13
+ });
14
+ return;
15
+ }
16
+ new EventTriggersService(ctx, config);
17
+ }
18
+ export default EventTriggersService;
19
+ //# sourceMappingURL=index.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,oBAAoB,EAAE,MAAM,EAAE,MAAM,cAAc,CAAA;AAC3D,OAAO,EAAE,4BAA4B,EAAE,MAAM,aAAa,CAAA;AAC1D,OAAO,EAAE,OAAO,EAAE,MAAM,cAAc,CAAA;AAEtC,MAAM,CAAC,MAAM,IAAI,GAAG,6BAA6B,CAAA;AACjD,OAAO,EAAE,MAAM,EAAE,oBAAoB,EAAE,OAAO,EAAE,CAAA;AAChD,cAAc,aAAa,CAAA;AAC3B,cAAc,cAAc,CAAA;AAE5B,MAAM,UAAU,KAAK,CAAC,GAAY,EAAE,MAAoC;IACtE,MAAM,UAAU,GAAG,4BAA4B,CAAC,MAAM,CAAC,CAAA;IACvD,IAAI,UAAU,CAAC,QAAQ,CAAC,IAAI,CAAC,OAAO,CAAC,EAAE,CAAC,OAAO,CAAC,IAAI,KAAK,SAAS,CAAC,EAAE,CAAC;QACpE,GAAG,CAAC,MAAM,CAAC,CAAC,qBAAqB,CAAC,EAAE,CAAC,cAAc,EAAE,EAAE;YACrD,IAAI,oBAAoB,CAAC,cAAc,EAAE,MAAM,CAAC,CAAA;QAClD,CAAC,CAAC,CAAA;QACF,OAAM;IACR,CAAC;IACD,IAAI,oBAAoB,CAAC,GAAG,EAAE,MAAM,CAAC,CAAA;AACvC,CAAC;AAED,eAAe,oBAAoB,CAAA"}
@@ -0,0 +1,52 @@
1
+ export interface SensorObservation {
2
+ fingerprint: string;
3
+ truthy: boolean;
4
+ }
5
+ export interface PinnedFileRoot {
6
+ configuredPath: string;
7
+ realPath: string;
8
+ configuredDevice: bigint;
9
+ configuredInode: bigint;
10
+ physicalDevice: bigint;
11
+ physicalInode: bigint;
12
+ }
13
+ export interface ResolvedAddress {
14
+ address: string;
15
+ family: number;
16
+ }
17
+ export interface ValidatedRoute {
18
+ addresses: readonly Readonly<{
19
+ address: string;
20
+ family: 4 | 6;
21
+ }>[];
22
+ }
23
+ export type Lookup = (hostname: string) => Promise<ResolvedAddress[]>;
24
+ export type Fetcher = (url: string, init: RequestInit, route: ValidatedRoute) => Promise<Response>;
25
+ export type OperationTracker = <T>(operation: Promise<T>) => Promise<T>;
26
+ export declare function pinFileRoots(roots: readonly string[]): readonly PinnedFileRoot[];
27
+ export declare function readFileObservation(input: {
28
+ path: string;
29
+ roots: readonly string[];
30
+ mode: 'content-hash' | 'exists';
31
+ maxBytes: number;
32
+ pinnedRoots?: readonly PinnedFileRoot[];
33
+ beforeOpen?: () => Promise<void>;
34
+ }): Promise<SensorObservation>;
35
+ export declare function defaultLookup(hostname: string): Promise<Array<{
36
+ address: string;
37
+ family: number;
38
+ }>>;
39
+ export declare function readHttpJsonObservation(input: {
40
+ url: string;
41
+ pointer: string;
42
+ maxBodyBytes: number;
43
+ timeoutMs: number;
44
+ allowedHosts?: ReadonlySet<string>;
45
+ allowedOrigins?: ReadonlySet<string>;
46
+ allowIpv6?: boolean;
47
+ fetcher?: Fetcher;
48
+ lookup?: Lookup;
49
+ trackOperation?: OperationTracker;
50
+ signal?: AbortSignal;
51
+ }): Promise<SensorObservation>;
52
+ //# sourceMappingURL=sensors.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"sensors.d.ts","sourceRoot":"","sources":["../src/sensors.ts"],"names":[],"mappings":"AASA,MAAM,WAAW,iBAAiB;IAChC,WAAW,EAAE,MAAM,CAAA;IACnB,MAAM,EAAE,OAAO,CAAA;CAChB;AAED,MAAM,WAAW,cAAc;IAC7B,cAAc,EAAE,MAAM,CAAA;IACtB,QAAQ,EAAE,MAAM,CAAA;IAChB,gBAAgB,EAAE,MAAM,CAAA;IACxB,eAAe,EAAE,MAAM,CAAA;IACvB,cAAc,EAAE,MAAM,CAAA;IACtB,aAAa,EAAE,MAAM,CAAA;CACtB;AAED,MAAM,WAAW,eAAe;IAAG,OAAO,EAAE,MAAM,CAAC;IAAC,MAAM,EAAE,MAAM,CAAA;CAAE;AACpE,MAAM,WAAW,cAAc;IAAG,SAAS,EAAE,SAAS,QAAQ,CAAC;QAAE,OAAO,EAAE,MAAM,CAAC;QAAC,MAAM,EAAE,CAAC,GAAG,CAAC,CAAA;KAAE,CAAC,EAAE,CAAA;CAAE;AACtG,MAAM,MAAM,MAAM,GAAG,CAAC,QAAQ,EAAE,MAAM,KAAK,OAAO,CAAC,eAAe,EAAE,CAAC,CAAA;AACrE,MAAM,MAAM,OAAO,GAAG,CAAC,GAAG,EAAE,MAAM,EAAE,IAAI,EAAE,WAAW,EAAE,KAAK,EAAE,cAAc,KAAK,OAAO,CAAC,QAAQ,CAAC,CAAA;AAClG,MAAM,MAAM,gBAAgB,GAAG,CAAC,CAAC,EAAE,SAAS,EAAE,OAAO,CAAC,CAAC,CAAC,KAAK,OAAO,CAAC,CAAC,CAAC,CAAA;AAkBvE,wBAAgB,YAAY,CAAC,KAAK,EAAE,SAAS,MAAM,EAAE,GAAG,SAAS,cAAc,EAAE,CAoBhF;AAyBD,wBAAsB,mBAAmB,CAAC,KAAK,EAAE;IAC/C,IAAI,EAAE,MAAM,CAAA;IACZ,KAAK,EAAE,SAAS,MAAM,EAAE,CAAA;IACxB,IAAI,EAAE,cAAc,GAAG,QAAQ,CAAA;IAC/B,QAAQ,EAAE,MAAM,CAAA;IAChB,WAAW,CAAC,EAAE,SAAS,cAAc,EAAE,CAAA;IACvC,UAAU,CAAC,EAAE,MAAM,OAAO,CAAC,IAAI,CAAC,CAAA;CACjC,GAAG,OAAO,CAAC,iBAAiB,CAAC,CAkD7B;AAkMD,wBAAsB,aAAa,CAAC,QAAQ,EAAE,MAAM,GAAG,OAAO,CAAC,KAAK,CAAC;IAAE,OAAO,EAAE,MAAM,CAAC;IAAC,MAAM,EAAE,MAAM,CAAA;CAAE,CAAC,CAAC,CAEzG;AAyCD,wBAAsB,uBAAuB,CAAC,KAAK,EAAE;IACnD,GAAG,EAAE,MAAM,CAAA;IACX,OAAO,EAAE,MAAM,CAAA;IACf,YAAY,EAAE,MAAM,CAAA;IACpB,SAAS,EAAE,MAAM,CAAA;IACjB,YAAY,CAAC,EAAE,WAAW,CAAC,MAAM,CAAC,CAAA;IAClC,cAAc,CAAC,EAAE,WAAW,CAAC,MAAM,CAAC,CAAA;IACpC,SAAS,CAAC,EAAE,OAAO,CAAA;IACnB,OAAO,CAAC,EAAE,OAAO,CAAA;IACjB,MAAM,CAAC,EAAE,MAAM,CAAA;IACf,cAAc,CAAC,EAAE,gBAAgB,CAAA;IACjC,MAAM,CAAC,EAAE,WAAW,CAAA;CACrB,GAAG,OAAO,CAAC,iBAAiB,CAAC,CA8C7B"}