wake-bridge 0.9.0-preview.8

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (115) hide show
  1. package/LICENSE +201 -0
  2. package/README.md +222 -0
  3. package/dist/src/adapters/botlingknows.d.ts +42 -0
  4. package/dist/src/adapters/botlingknows.js +141 -0
  5. package/dist/src/adapters/botlingknows.js.map +1 -0
  6. package/dist/src/adapters/group-chat.d.ts +43 -0
  7. package/dist/src/adapters/group-chat.js +120 -0
  8. package/dist/src/adapters/group-chat.js.map +1 -0
  9. package/dist/src/cli.d.ts +2 -0
  10. package/dist/src/cli.js +637 -0
  11. package/dist/src/cli.js.map +1 -0
  12. package/dist/src/connector-catalog.d.ts +17 -0
  13. package/dist/src/connector-catalog.js +43 -0
  14. package/dist/src/connector-catalog.js.map +1 -0
  15. package/dist/src/connectors/botlingknows-mcp.d.ts +15 -0
  16. package/dist/src/connectors/botlingknows-mcp.js +130 -0
  17. package/dist/src/connectors/botlingknows-mcp.js.map +1 -0
  18. package/dist/src/connectors/group-chat-http.d.ts +17 -0
  19. package/dist/src/connectors/group-chat-http.js +226 -0
  20. package/dist/src/connectors/group-chat-http.js.map +1 -0
  21. package/dist/src/connectors/mcp-http-client.d.ts +11 -0
  22. package/dist/src/connectors/mcp-http-client.js +108 -0
  23. package/dist/src/connectors/mcp-http-client.js.map +1 -0
  24. package/dist/src/core.d.ts +170 -0
  25. package/dist/src/core.js +1720 -0
  26. package/dist/src/core.js.map +1 -0
  27. package/dist/src/daemon.d.ts +31 -0
  28. package/dist/src/daemon.js +605 -0
  29. package/dist/src/daemon.js.map +1 -0
  30. package/dist/src/db.d.ts +31 -0
  31. package/dist/src/db.js +513 -0
  32. package/dist/src/db.js.map +1 -0
  33. package/dist/src/event-sdk.d.ts +43 -0
  34. package/dist/src/event-sdk.js +152 -0
  35. package/dist/src/event-sdk.js.map +1 -0
  36. package/dist/src/host-adapter-registry.d.ts +21 -0
  37. package/dist/src/host-adapter-registry.js +59 -0
  38. package/dist/src/host-adapter-registry.js.map +1 -0
  39. package/dist/src/index.d.ts +5 -0
  40. package/dist/src/index.js +6 -0
  41. package/dist/src/index.js.map +1 -0
  42. package/dist/src/instance-config.d.ts +46 -0
  43. package/dist/src/instance-config.js +176 -0
  44. package/dist/src/instance-config.js.map +1 -0
  45. package/dist/src/mcp.d.ts +51 -0
  46. package/dist/src/mcp.js +728 -0
  47. package/dist/src/mcp.js.map +1 -0
  48. package/dist/src/operator-control.d.ts +82 -0
  49. package/dist/src/operator-control.js +220 -0
  50. package/dist/src/operator-control.js.map +1 -0
  51. package/dist/src/out-of-process-host.d.ts +37 -0
  52. package/dist/src/out-of-process-host.js +196 -0
  53. package/dist/src/out-of-process-host.js.map +1 -0
  54. package/dist/src/policy-control.d.ts +3 -0
  55. package/dist/src/policy-control.js +120 -0
  56. package/dist/src/policy-control.js.map +1 -0
  57. package/dist/src/release-lifecycle.d.ts +98 -0
  58. package/dist/src/release-lifecycle.js +378 -0
  59. package/dist/src/release-lifecycle.js.map +1 -0
  60. package/dist/src/sdk-error.d.ts +6 -0
  61. package/dist/src/sdk-error.js +12 -0
  62. package/dist/src/sdk-error.js.map +1 -0
  63. package/dist/src/source-adapter.d.ts +32 -0
  64. package/dist/src/source-adapter.js +164 -0
  65. package/dist/src/source-adapter.js.map +1 -0
  66. package/dist/src/source-connector.d.ts +50 -0
  67. package/dist/src/source-connector.js +358 -0
  68. package/dist/src/source-connector.js.map +1 -0
  69. package/dist/src/source-control-client.d.ts +38 -0
  70. package/dist/src/source-control-client.js +61 -0
  71. package/dist/src/source-control-client.js.map +1 -0
  72. package/dist/src/source-ingress.d.ts +16 -0
  73. package/dist/src/source-ingress.js +47 -0
  74. package/dist/src/source-ingress.js.map +1 -0
  75. package/dist/src/source-sdk.d.ts +6 -0
  76. package/dist/src/source-sdk.js +53 -0
  77. package/dist/src/source-sdk.js.map +1 -0
  78. package/dist/src/transport-sdk.d.ts +102 -0
  79. package/dist/src/transport-sdk.js +222 -0
  80. package/dist/src/transport-sdk.js.map +1 -0
  81. package/dist/src/transport.d.ts +23 -0
  82. package/dist/src/transport.js +71 -0
  83. package/dist/src/transport.js.map +1 -0
  84. package/dist/src/types.d.ts +522 -0
  85. package/dist/src/types.js +2 -0
  86. package/dist/src/types.js.map +1 -0
  87. package/dist/src/util.d.ts +26 -0
  88. package/dist/src/util.js +136 -0
  89. package/dist/src/util.js.map +1 -0
  90. package/dist/src/version.d.ts +1 -0
  91. package/dist/src/version.js +2 -0
  92. package/dist/src/version.js.map +1 -0
  93. package/docs/adapters/botlingknows.md +40 -0
  94. package/docs/adapters/gmail-planned.md +16 -0
  95. package/docs/adapters/group-chat.md +126 -0
  96. package/docs/operations/connector-catalog.md +40 -0
  97. package/docs/operations/operator-control.md +83 -0
  98. package/docs/operations/out-of-process-host-adapter.md +150 -0
  99. package/docs/operations/policies.md +106 -0
  100. package/docs/operations/public-sdk.md +87 -0
  101. package/docs/operations/release-lifecycle.md +154 -0
  102. package/docs/operations/source-connectors.md +163 -0
  103. package/docs/operations/source-ingress.md +108 -0
  104. package/docs/operations/templates/botlingknows-connector.env.example +5 -0
  105. package/docs/operations/templates/sources.json.example +15 -0
  106. package/docs/quickstart.md +143 -0
  107. package/docs/releases/0.9.0-preview.8.md +44 -0
  108. package/docs/verification.md +19 -0
  109. package/examples/policies/botlingknows-conservative.json +44 -0
  110. package/examples/reference-host-adapter/README.md +41 -0
  111. package/examples/reference-host-adapter/adapter.mjs +173 -0
  112. package/examples/reference-host-adapter/host-adapters.json.example +26 -0
  113. package/package.json +94 -0
  114. package/schemas/event-v1.schema.json +26 -0
  115. package/schemas/policy-v1.schema.json +66 -0
@@ -0,0 +1,108 @@
1
+ import { BridgeError } from "../core.js";
2
+ const LOOPBACK_HOSTS = new Set(["127.0.0.1", "[::1]", "::1"]);
3
+ function decodeJsonRpc(text) {
4
+ const documents = text.split(/\r?\n/u)
5
+ .filter((line) => line.startsWith("data:"))
6
+ .map((line) => line.slice(5).trim())
7
+ .filter(Boolean);
8
+ const raw = documents.at(-1) || text.trim();
9
+ if (!raw)
10
+ return {};
11
+ try {
12
+ const value = JSON.parse(raw);
13
+ if (!value || typeof value !== "object" || Array.isArray(value))
14
+ throw new Error("object required");
15
+ return value;
16
+ }
17
+ catch {
18
+ throw new BridgeError("upstream MCP returned invalid JSON-RPC", "upstream_mcp_invalid_response", 424);
19
+ }
20
+ }
21
+ export class StreamableHttpMcpClient {
22
+ endpoint;
23
+ fetcher;
24
+ requestId = 0;
25
+ constructor(endpoint, fetcher = fetch) {
26
+ this.endpoint = endpoint;
27
+ this.fetcher = fetcher;
28
+ let url;
29
+ try {
30
+ url = new URL(endpoint);
31
+ }
32
+ catch {
33
+ throw new BridgeError("upstream MCP URL is invalid", "upstream_mcp_invalid_config", 400);
34
+ }
35
+ const transportAllowed = url.protocol === "https:"
36
+ || url.protocol === "http:" && LOOPBACK_HOSTS.has(url.hostname);
37
+ if (!transportAllowed || url.username || url.password || url.hash) {
38
+ throw new BridgeError("upstream MCP URL is invalid", "upstream_mcp_invalid_config", 400);
39
+ }
40
+ }
41
+ async callTool(name, args) {
42
+ const initialized = await this.post({
43
+ jsonrpc: "2.0",
44
+ id: this.nextId(),
45
+ method: "initialize",
46
+ params: {
47
+ protocolVersion: "2025-06-18",
48
+ capabilities: {},
49
+ clientInfo: { name: "wakebridge-source-connector", version: "0.1.0" },
50
+ },
51
+ });
52
+ if (initialized.body.error)
53
+ throw new BridgeError("upstream MCP initialize failed", "upstream_mcp_initialize_failed", 424);
54
+ await this.post({ jsonrpc: "2.0", method: "notifications/initialized" }, initialized.sessionId, true);
55
+ const called = await this.post({
56
+ jsonrpc: "2.0",
57
+ id: this.nextId(),
58
+ method: "tools/call",
59
+ params: { name, arguments: args },
60
+ }, initialized.sessionId);
61
+ if (called.body.error || called.body.result?.isError === true) {
62
+ throw new BridgeError("upstream MCP tool call failed", "upstream_mcp_tool_failed", 424);
63
+ }
64
+ const content = called.body.result?.content;
65
+ const text = Array.isArray(content)
66
+ ? content.find((item) => item && typeof item === "object" && item.type === "text")?.text
67
+ : undefined;
68
+ if (typeof text !== "string") {
69
+ throw new BridgeError("upstream MCP tool result has no text content", "upstream_mcp_invalid_response", 424);
70
+ }
71
+ return decodeJsonRpc(text);
72
+ }
73
+ nextId() {
74
+ this.requestId += 1;
75
+ return this.requestId;
76
+ }
77
+ async post(payload, sessionId, allowEmpty = false) {
78
+ let response;
79
+ try {
80
+ response = await this.fetcher(this.endpoint, {
81
+ method: "POST",
82
+ headers: {
83
+ accept: "application/json, text/event-stream",
84
+ "content-type": "application/json",
85
+ ...(sessionId ? { "mcp-session-id": sessionId } : {}),
86
+ },
87
+ body: JSON.stringify(payload),
88
+ signal: AbortSignal.timeout(15_000),
89
+ });
90
+ }
91
+ catch {
92
+ throw new BridgeError("upstream MCP is unavailable", "upstream_mcp_unavailable", 503);
93
+ }
94
+ if (!response.ok) {
95
+ const retryable = response.status === 408 || response.status === 425 || response.status === 429 || response.status >= 500;
96
+ const errorClass = response.status === 401 || response.status === 403
97
+ ? "upstream_mcp_unauthorized"
98
+ : retryable ? "upstream_mcp_http_error" : "upstream_mcp_contract_error";
99
+ throw new BridgeError(`upstream MCP returned HTTP ${response.status}`, errorClass, retryable ? 503 : 424);
100
+ }
101
+ const text = await response.text();
102
+ return {
103
+ body: allowEmpty && !text.trim() ? {} : decodeJsonRpc(text),
104
+ sessionId: response.headers.get("mcp-session-id") || sessionId,
105
+ };
106
+ }
107
+ }
108
+ //# sourceMappingURL=mcp-http-client.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"mcp-http-client.js","sourceRoot":"","sources":["../../../src/connectors/mcp-http-client.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,WAAW,EAAE,MAAM,YAAY,CAAC;AAGzC,MAAM,cAAc,GAAG,IAAI,GAAG,CAAC,CAAC,WAAW,EAAE,OAAO,EAAE,KAAK,CAAC,CAAC,CAAC;AAE9D,SAAS,aAAa,CAAC,IAAY;IACjC,MAAM,SAAS,GAAG,IAAI,CAAC,KAAK,CAAC,QAAQ,CAAC;SACnC,MAAM,CAAC,CAAC,IAAI,EAAE,EAAE,CAAC,IAAI,CAAC,UAAU,CAAC,OAAO,CAAC,CAAC;SAC1C,GAAG,CAAC,CAAC,IAAI,EAAE,EAAE,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC,IAAI,EAAE,CAAC;SACnC,MAAM,CAAC,OAAO,CAAC,CAAC;IACnB,MAAM,GAAG,GAAG,SAAS,CAAC,EAAE,CAAC,CAAC,CAAC,CAAC,IAAI,IAAI,CAAC,IAAI,EAAE,CAAC;IAC5C,IAAI,CAAC,GAAG;QAAE,OAAO,EAAE,CAAC;IACpB,IAAI,CAAC;QACH,MAAM,KAAK,GAAG,IAAI,CAAC,KAAK,CAAC,GAAG,CAAY,CAAC;QACzC,IAAI,CAAC,KAAK,IAAI,OAAO,KAAK,KAAK,QAAQ,IAAI,KAAK,CAAC,OAAO,CAAC,KAAK,CAAC;YAAE,MAAM,IAAI,KAAK,CAAC,iBAAiB,CAAC,CAAC;QACpG,OAAO,KAA4B,CAAC;IACtC,CAAC;IAAC,MAAM,CAAC;QACP,MAAM,IAAI,WAAW,CAAC,wCAAwC,EAAE,+BAA+B,EAAE,GAAG,CAAC,CAAC;IACxG,CAAC;AACH,CAAC;AAED,MAAM,OAAO,uBAAuB;IAIf;IACA;IAJX,SAAS,GAAG,CAAC,CAAC;IAEtB,YACmB,QAAgB,EAChB,UAAiB,KAAK;QADtB,aAAQ,GAAR,QAAQ,CAAQ;QAChB,YAAO,GAAP,OAAO,CAAe;QAEvC,IAAI,GAAQ,CAAC;QACb,IAAI,CAAC;YAAC,GAAG,GAAG,IAAI,GAAG,CAAC,QAAQ,CAAC,CAAC;QAAC,CAAC;QAAC,MAAM,CAAC;YACtC,MAAM,IAAI,WAAW,CAAC,6BAA6B,EAAE,6BAA6B,EAAE,GAAG,CAAC,CAAC;QAC3F,CAAC;QACD,MAAM,gBAAgB,GAAG,GAAG,CAAC,QAAQ,KAAK,QAAQ;eAC7C,GAAG,CAAC,QAAQ,KAAK,OAAO,IAAI,cAAc,CAAC,GAAG,CAAC,GAAG,CAAC,QAAQ,CAAC,CAAC;QAClE,IAAI,CAAC,gBAAgB,IAAI,GAAG,CAAC,QAAQ,IAAI,GAAG,CAAC,QAAQ,IAAI,GAAG,CAAC,IAAI,EAAE,CAAC;YAClE,MAAM,IAAI,WAAW,CAAC,6BAA6B,EAAE,6BAA6B,EAAE,GAAG,CAAC,CAAC;QAC3F,CAAC;IACH,CAAC;IAED,KAAK,CAAC,QAAQ,CAAC,IAAY,EAAE,IAA6B;QACxD,MAAM,WAAW,GAAG,MAAM,IAAI,CAAC,IAAI,CAAC;YAClC,OAAO,EAAE,KAAK;YACd,EAAE,EAAE,IAAI,CAAC,MAAM,EAAE;YACjB,MAAM,EAAE,YAAY;YACpB,MAAM,EAAE;gBACN,eAAe,EAAE,YAAY;gBAC7B,YAAY,EAAE,EAAE;gBAChB,UAAU,EAAE,EAAE,IAAI,EAAE,6BAA6B,EAAE,OAAO,EAAE,OAAO,EAAE;aACtE;SACF,CAAC,CAAC;QACH,IAAI,WAAW,CAAC,IAAI,CAAC,KAAK;YAAE,MAAM,IAAI,WAAW,CAAC,gCAAgC,EAAE,gCAAgC,EAAE,GAAG,CAAC,CAAC;QAC3H,MAAM,IAAI,CAAC,IAAI,CAAC,EAAE,OAAO,EAAE,KAAK,EAAE,MAAM,EAAE,2BAA2B,EAAE,EAAE,WAAW,CAAC,SAAS,EAAE,IAAI,CAAC,CAAC;QACtG,MAAM,MAAM,GAAG,MAAM,IAAI,CAAC,IAAI,CAAC;YAC7B,OAAO,EAAE,KAAK;YACd,EAAE,EAAE,IAAI,CAAC,MAAM,EAAE;YACjB,MAAM,EAAE,YAAY;YACpB,MAAM,EAAE,EAAE,IAAI,EAAE,SAAS,EAAE,IAAI,EAAE;SAClC,EAAE,WAAW,CAAC,SAAS,CAAC,CAAC;QAC1B,IAAI,MAAM,CAAC,IAAI,CAAC,KAAK,IAAI,MAAM,CAAC,IAAI,CAAC,MAAM,EAAE,OAAO,KAAK,IAAI,EAAE,CAAC;YAC9D,MAAM,IAAI,WAAW,CAAC,+BAA+B,EAAE,0BAA0B,EAAE,GAAG,CAAC,CAAC;QAC1F,CAAC;QACD,MAAM,OAAO,GAAG,MAAM,CAAC,IAAI,CAAC,MAAM,EAAE,OAAO,CAAC;QAC5C,MAAM,IAAI,GAAG,KAAK,CAAC,OAAO,CAAC,OAAO,CAAC;YACjC,CAAC,CAAC,OAAO,CAAC,IAAI,CAAC,CAAC,IAAa,EAAE,EAAE,CAAC,IAAI,IAAI,OAAO,IAAI,KAAK,QAAQ,IAAK,IAAY,CAAC,IAAI,KAAK,MAAM,CAAC,EAAE,IAAI;YAC1G,CAAC,CAAC,SAAS,CAAC;QACd,IAAI,OAAO,IAAI,KAAK,QAAQ,EAAE,CAAC;YAC7B,MAAM,IAAI,WAAW,CAAC,8CAA8C,EAAE,+BAA+B,EAAE,GAAG,CAAC,CAAC;QAC9G,CAAC;QACD,OAAO,aAAa,CAAC,IAAI,CAAC,CAAC;IAC7B,CAAC;IAEO,MAAM;QACZ,IAAI,CAAC,SAAS,IAAI,CAAC,CAAC;QACpB,OAAO,IAAI,CAAC,SAAS,CAAC;IACxB,CAAC;IAEO,KAAK,CAAC,IAAI,CAAC,OAAgC,EAAE,SAAkB,EAAE,UAAU,GAAG,KAAK;QACzF,IAAI,QAAkB,CAAC;QACvB,IAAI,CAAC;YACH,QAAQ,GAAG,MAAM,IAAI,CAAC,OAAO,CAAC,IAAI,CAAC,QAAQ,EAAE;gBAC3C,MAAM,EAAE,MAAM;gBACd,OAAO,EAAE;oBACP,MAAM,EAAE,qCAAqC;oBAC7C,cAAc,EAAE,kBAAkB;oBAClC,GAAG,CAAC,SAAS,CAAC,CAAC,CAAC,EAAE,gBAAgB,EAAE,SAAS,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC;iBACtD;gBACD,IAAI,EAAE,IAAI,CAAC,SAAS,CAAC,OAAO,CAAC;gBAC7B,MAAM,EAAE,WAAW,CAAC,OAAO,CAAC,MAAM,CAAC;aACpC,CAAC,CAAC;QACL,CAAC;QAAC,MAAM,CAAC;YACP,MAAM,IAAI,WAAW,CAAC,6BAA6B,EAAE,0BAA0B,EAAE,GAAG,CAAC,CAAC;QACxF,CAAC;QACD,IAAI,CAAC,QAAQ,CAAC,EAAE,EAAE,CAAC;YACjB,MAAM,SAAS,GAAG,QAAQ,CAAC,MAAM,KAAK,GAAG,IAAI,QAAQ,CAAC,MAAM,KAAK,GAAG,IAAI,QAAQ,CAAC,MAAM,KAAK,GAAG,IAAI,QAAQ,CAAC,MAAM,IAAI,GAAG,CAAC;YAC1H,MAAM,UAAU,GAAG,QAAQ,CAAC,MAAM,KAAK,GAAG,IAAI,QAAQ,CAAC,MAAM,KAAK,GAAG;gBACnE,CAAC,CAAC,2BAA2B;gBAC7B,CAAC,CAAC,SAAS,CAAC,CAAC,CAAC,yBAAyB,CAAC,CAAC,CAAC,6BAA6B,CAAC;YAC1E,MAAM,IAAI,WAAW,CACnB,8BAA8B,QAAQ,CAAC,MAAM,EAAE,EAC/C,UAAU,EACV,SAAS,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,GAAG,CACtB,CAAC;QACJ,CAAC;QACD,MAAM,IAAI,GAAG,MAAM,QAAQ,CAAC,IAAI,EAAE,CAAC;QACnC,OAAO;YACL,IAAI,EAAE,UAAU,IAAI,CAAC,IAAI,CAAC,IAAI,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,aAAa,CAAC,IAAI,CAAC;YAC3D,SAAS,EAAE,QAAQ,CAAC,OAAO,CAAC,GAAG,CAAC,gBAAgB,CAAC,IAAI,SAAS;SAC/D,CAAC;IACJ,CAAC;CACF"}
@@ -0,0 +1,170 @@
1
+ import { SqliteDatabase } from "./db.js";
2
+ import { MockTransport } from "./transport.js";
3
+ import { WakeBridgeSdkError } from "./sdk-error.js";
4
+ import type { ActivityObservation, ActivityObservationResult, ActivityWatch, ActivityWatchConfiguration, AttentionClaim, BatchState, Binding, BridgeConfig, ClaimState, DispatchResult, DeliveryCorrelation, Endpoint, EndpointRegistration, EventState, InstalledPolicyRule, JsonValue, PolicyMatchResult, PolicyPreviewResult, PolicyRule, PolicyVersionStatus, PresenceLease, PresenceRenewal, Receipt, ReceiptStage, ResourceRef, TickResult, WakeBatch, WakeEvent, WakeEventInput, WakeEchoObservation, WakeTransport } from "./types.js";
5
+ export interface WakeBridgeOptions {
6
+ clock?: () => Date;
7
+ transports?: WakeTransport[];
8
+ autoMockTransport?: boolean;
9
+ /** Only the canonical dispatcher owner may reclaim expired dispatch leases. */
10
+ recoverDispatchLeases?: boolean;
11
+ /** Schema changes are only authorized by the release upgrade workflow. */
12
+ allowSchemaUpgrade?: boolean;
13
+ }
14
+ export interface EmitResult {
15
+ event: WakeEvent;
16
+ claim?: AttentionClaim;
17
+ duplicate: boolean;
18
+ suppressed: boolean;
19
+ }
20
+ export interface ScheduleClaimInput {
21
+ resource: ResourceRef;
22
+ eligible_after: string;
23
+ attention_channel?: string;
24
+ reason_code?: string;
25
+ note?: string | null;
26
+ expires_at?: string | null;
27
+ idempotency_key?: string | null;
28
+ defer_while_presence?: boolean;
29
+ }
30
+ export declare class BridgeError extends WakeBridgeSdkError {
31
+ readonly code: string;
32
+ readonly status: number;
33
+ constructor(message: string, code?: string, status?: number);
34
+ }
35
+ type DbRow = Record<string, any>;
36
+ declare const DEFAULT_POLICY: PolicyRule;
37
+ export declare function normalizePolicy(policy: PolicyRule): PolicyRule;
38
+ export declare function activePolicyVersions(policies: PolicyRule[]): PolicyRule[];
39
+ export declare class WakeBridge {
40
+ readonly config: Required<Pick<BridgeConfig, "instance_id" | "owner_id" | "db_path">> & BridgeConfig;
41
+ readonly db: SqliteDatabase;
42
+ readonly transports: Map<string, WakeTransport>;
43
+ readonly mockTransport: MockTransport;
44
+ private readonly clock;
45
+ constructor(config: BridgeConfig, options?: WakeBridgeOptions);
46
+ close(): void;
47
+ now(): Date;
48
+ nowIso(): string;
49
+ registerTransport(transport: WakeTransport): void;
50
+ unregisterTransport(kind: string, expected?: WakeTransport): void;
51
+ listPolicies(): InstalledPolicyRule[];
52
+ listActivePolicies(): InstalledPolicyRule[];
53
+ listPolicyStatuses(): PolicyVersionStatus[];
54
+ installPolicies(policies: PolicyRule[]): void;
55
+ private ensureDefaultPolicy;
56
+ updatePolicy(policy: PolicyRule): PolicyRule;
57
+ private policyRows;
58
+ private policyForEvent;
59
+ testPolicy(source: string, input: WakeEventInput, candidates?: PolicyRule[]): PolicyMatchResult;
60
+ previewPolicy(source: string, input: WakeEventInput, candidates?: PolicyRule[]): PolicyPreviewResult;
61
+ private matches;
62
+ private targetChannel;
63
+ private claimEligibleAfter;
64
+ private claimExpiresAt;
65
+ private validateEvent;
66
+ private duplicateEmitResult;
67
+ private isUniqueConflict;
68
+ /** Accept both emitEvent(source, input) and emitEvent(input, source). */
69
+ emitEvent(sourceOrInput: string | WakeEventInput, inputOrSource?: WakeEventInput | string): EmitResult;
70
+ emit(source: string, input: WakeEventInput): EmitResult;
71
+ scheduleClaim(input: ScheduleClaimInput): {
72
+ event: WakeEvent;
73
+ claim: AttentionClaim;
74
+ duplicate: boolean;
75
+ };
76
+ getEvent(eventId: string): WakeEvent | null;
77
+ listEvents(filters?: {
78
+ state?: EventState;
79
+ source?: string;
80
+ after?: string;
81
+ limit?: number;
82
+ }): WakeEvent[];
83
+ private eventFromRow;
84
+ getClaim(claimId: string): AttentionClaim | null;
85
+ listClaims(filters?: {
86
+ state?: ClaimState;
87
+ channel?: string;
88
+ source?: string;
89
+ limit?: number;
90
+ }): AttentionClaim[];
91
+ private claimFromRow;
92
+ private policy;
93
+ getBinding(channel: string): Binding | null;
94
+ listBindings(): Binding[];
95
+ private endpointFromRow;
96
+ getEndpoint(endpointId: string): Endpoint | null;
97
+ listEndpoints(): Endpoint[];
98
+ registerEndpoint(registration: EndpointRegistration): Endpoint;
99
+ renewEndpoint(endpointId: string, leaseToken: string, leaseMs?: number): Endpoint;
100
+ renewBoundEndpoint(endpointId: string, channel: string, expectedGeneration: number, leaseMs?: number): Endpoint;
101
+ revokeEndpoint(endpointId: string, leaseToken: string): Endpoint;
102
+ revokeBoundEndpoint(endpointId: string, channel: string, expectedGeneration: number): Endpoint;
103
+ private revokeEndpointState;
104
+ takeover(channel: string, endpointId: string, expectedGeneration?: number): Binding;
105
+ private endpointAuthorized;
106
+ renewPresence(input: PresenceRenewal): PresenceLease;
107
+ configureActivityWatch(input: ActivityWatchConfiguration): ActivityWatch;
108
+ getActivityWatch(channel: string): ActivityWatch | null;
109
+ listActivityWatches(): ActivityWatch[];
110
+ private activityWatchFromRow;
111
+ observeActivity(input: ActivityObservation): ActivityObservationResult;
112
+ consumeWakeEcho(input: WakeEchoObservation): ActivityObservationResult;
113
+ listDeliveryCorrelations(): DeliveryCorrelation[];
114
+ getPresence(channel: string): PresenceLease | null;
115
+ listPresence(): PresenceLease[];
116
+ private presenceFromRow;
117
+ private presenceActive;
118
+ private recover;
119
+ private materializeDueActivityWatches;
120
+ /** Advance due claims and freeze eligible claims into durable batches. */
121
+ tick(): TickResult;
122
+ private claimStateSql;
123
+ private claimDeferSql;
124
+ private eventStateSql;
125
+ private coalesceKey;
126
+ private batchKey;
127
+ private batchInsertSql;
128
+ private batchUpdateArraysSql;
129
+ getBatch(batchId: string): WakeBatch | null;
130
+ listBatches(filters?: {
131
+ states?: BatchState[];
132
+ channel?: string;
133
+ limit?: number;
134
+ }): WakeBatch[];
135
+ private batchFromRow;
136
+ private resolveBinding;
137
+ private chooseTransport;
138
+ private buildPayload;
139
+ private markNoEndpoint;
140
+ private acquireBatch;
141
+ private bindingStillCurrent;
142
+ private finalizeAttempt;
143
+ /** Dispatch due durable batches. The lease CAS prevents double-dispatch. */
144
+ dispatchDue(nowDate?: Date): Promise<DispatchResult[]>;
145
+ private receiptInsertSql;
146
+ private detachClaimFromOpenBatches;
147
+ listReceipts(batchId?: string): Receipt[];
148
+ listAttempts(batchId?: string): DbRow[];
149
+ private acceptedAttempt;
150
+ ackBatch(batchId: string, endpointId: string, generation: number): WakeBatch;
151
+ recordReceipt(batchId: string, stage: ReceiptStage, details?: Record<string, JsonValue> | null, endpointId?: string, generation?: number): Receipt;
152
+ private claimAction;
153
+ snoozeClaim(claimId: string, until: string): AttentionClaim;
154
+ dismissClaim(claimId: string, reason?: string): AttentionClaim;
155
+ consumeClaim(claimId: string, result?: JsonValue | null): AttentionClaim;
156
+ inspect(): {
157
+ instance: Pick<BridgeConfig, "instance_id" | "owner_id" | "timezone">;
158
+ events: WakeEvent[];
159
+ claims: AttentionClaim[];
160
+ batches: WakeBatch[];
161
+ bindings: Binding[];
162
+ endpoints: Endpoint[];
163
+ presence: PresenceLease[];
164
+ activity_watches: ActivityWatch[];
165
+ delivery_correlations: DeliveryCorrelation[];
166
+ receipts: Receipt[];
167
+ attempts: DbRow[];
168
+ };
169
+ }
170
+ export { DEFAULT_POLICY };