agentwake 1.0.0
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/.cursor/hooks.json +15 -0
- package/.env.example +19 -0
- package/README.md +137 -0
- package/dist/adapters/claude-hook-adapter.d.ts +3 -0
- package/dist/adapters/claude-hook-adapter.d.ts.map +1 -0
- package/dist/adapters/claude-hook-adapter.js +25 -0
- package/dist/adapters/claude-hook-adapter.js.map +1 -0
- package/dist/adapters/cursor-hook-adapter.d.ts +3 -0
- package/dist/adapters/cursor-hook-adapter.d.ts.map +1 -0
- package/dist/adapters/cursor-hook-adapter.js +144 -0
- package/dist/adapters/cursor-hook-adapter.js.map +1 -0
- package/dist/adapters/cursor-terminal-hook.d.ts +20 -0
- package/dist/adapters/cursor-terminal-hook.d.ts.map +1 -0
- package/dist/adapters/cursor-terminal-hook.js +120 -0
- package/dist/adapters/cursor-terminal-hook.js.map +1 -0
- package/dist/adapters/hook-common.d.ts +6 -0
- package/dist/adapters/hook-common.d.ts.map +1 -0
- package/dist/adapters/hook-common.js +69 -0
- package/dist/adapters/hook-common.js.map +1 -0
- package/dist/adapters/qoder-log-adapter.d.ts +19 -0
- package/dist/adapters/qoder-log-adapter.d.ts.map +1 -0
- package/dist/adapters/qoder-log-adapter.js +320 -0
- package/dist/adapters/qoder-log-adapter.js.map +1 -0
- package/dist/bootstrap.d.ts +19 -0
- package/dist/bootstrap.d.ts.map +1 -0
- package/dist/bootstrap.js +106 -0
- package/dist/bootstrap.js.map +1 -0
- package/dist/cli.d.ts +3 -0
- package/dist/cli.d.ts.map +1 -0
- package/dist/cli.js +187 -0
- package/dist/cli.js.map +1 -0
- package/dist/config.d.ts +21 -0
- package/dist/config.d.ts.map +1 -0
- package/dist/config.js +63 -0
- package/dist/config.js.map +1 -0
- package/dist/domain/notify-event.d.ts +17 -0
- package/dist/domain/notify-event.d.ts.map +1 -0
- package/dist/domain/notify-event.js +10 -0
- package/dist/domain/notify-event.js.map +1 -0
- package/dist/gateway/adapter-registry.d.ts +9 -0
- package/dist/gateway/adapter-registry.d.ts.map +1 -0
- package/dist/gateway/adapter-registry.js +26 -0
- package/dist/gateway/adapter-registry.js.map +1 -0
- package/dist/gateway/adapter.d.ts +14 -0
- package/dist/gateway/adapter.d.ts.map +1 -0
- package/dist/gateway/adapter.js +3 -0
- package/dist/gateway/adapter.js.map +1 -0
- package/dist/gateway/event-router.d.ts +20 -0
- package/dist/gateway/event-router.d.ts.map +1 -0
- package/dist/gateway/event-router.js +72 -0
- package/dist/gateway/event-router.js.map +1 -0
- package/dist/main.d.ts +2 -0
- package/dist/main.d.ts.map +1 -0
- package/dist/main.js +9 -0
- package/dist/main.js.map +1 -0
- package/dist/notifiers/desktop-notifier.d.ts +11 -0
- package/dist/notifiers/desktop-notifier.d.ts.map +1 -0
- package/dist/notifiers/desktop-notifier.js +78 -0
- package/dist/notifiers/desktop-notifier.js.map +1 -0
- package/dist/notifiers/mobile-ws-notifier.d.ts +13 -0
- package/dist/notifiers/mobile-ws-notifier.d.ts.map +1 -0
- package/dist/notifiers/mobile-ws-notifier.js +65 -0
- package/dist/notifiers/mobile-ws-notifier.js.map +1 -0
- package/dist/notifiers/notifier.d.ts +6 -0
- package/dist/notifiers/notifier.d.ts.map +1 -0
- package/dist/notifiers/notifier.js +3 -0
- package/dist/notifiers/notifier.js.map +1 -0
- package/dist/notifiers/pwa-push-notifier.d.ts +12 -0
- package/dist/notifiers/pwa-push-notifier.d.ts.map +1 -0
- package/dist/notifiers/pwa-push-notifier.js +69 -0
- package/dist/notifiers/pwa-push-notifier.js.map +1 -0
- package/dist/run-gateway.d.ts +3 -0
- package/dist/run-gateway.d.ts.map +1 -0
- package/dist/run-gateway.js +66 -0
- package/dist/run-gateway.js.map +1 -0
- package/dist/utils/approval-match.d.ts +2 -0
- package/dist/utils/approval-match.d.ts.map +1 -0
- package/dist/utils/approval-match.js +32 -0
- package/dist/utils/approval-match.js.map +1 -0
- package/dist/utils/logger.d.ts +7 -0
- package/dist/utils/logger.d.ts.map +1 -0
- package/dist/utils/logger.js +19 -0
- package/dist/utils/logger.js.map +1 -0
- package/package.json +60 -0
- package/scripts/cursor-hook-forwarder.mjs +269 -0
- package/web/app.js +350 -0
- package/web/icons/icon-192.svg +6 -0
- package/web/icons/icon-512.svg +6 -0
- package/web/index.html +117 -0
- package/web/manifest.webmanifest +25 -0
- package/web/sw.js +32 -0
package/dist/cli.js.map
ADDED
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"cli.js","sourceRoot":"","sources":["../src/cli.ts"],"names":[],"mappings":"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"}
|
package/dist/config.d.ts
ADDED
|
@@ -0,0 +1,21 @@
|
|
|
1
|
+
export type AppConfig = {
|
|
2
|
+
host: string;
|
|
3
|
+
port: number;
|
|
4
|
+
httpsEnabled: boolean;
|
|
5
|
+
httpsCertPath: string;
|
|
6
|
+
httpsKeyPath: string;
|
|
7
|
+
cursorHookPath: string;
|
|
8
|
+
claudeHookPath: string;
|
|
9
|
+
qoderLogPath: string | undefined;
|
|
10
|
+
dedupeWindowMs: number;
|
|
11
|
+
rateLimitWindowMs: number;
|
|
12
|
+
rateLimitMaxEvents: number;
|
|
13
|
+
webRootPath: string;
|
|
14
|
+
wsPath: string;
|
|
15
|
+
vapidPublicKey: string | undefined;
|
|
16
|
+
vapidPrivateKey: string | undefined;
|
|
17
|
+
vapidSubject: string;
|
|
18
|
+
allowedHookIps: string[];
|
|
19
|
+
};
|
|
20
|
+
export declare function loadConfig(): AppConfig;
|
|
21
|
+
//# sourceMappingURL=config.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"config.d.ts","sourceRoot":"","sources":["../src/config.ts"],"names":[],"mappings":"AAEA,MAAM,MAAM,SAAS,GAAG;IACtB,IAAI,EAAE,MAAM,CAAC;IACb,IAAI,EAAE,MAAM,CAAC;IACb,YAAY,EAAE,OAAO,CAAC;IACtB,aAAa,EAAE,MAAM,CAAC;IACtB,YAAY,EAAE,MAAM,CAAC;IACrB,cAAc,EAAE,MAAM,CAAC;IACvB,cAAc,EAAE,MAAM,CAAC;IACvB,YAAY,EAAE,MAAM,GAAG,SAAS,CAAC;IACjC,cAAc,EAAE,MAAM,CAAC;IACvB,iBAAiB,EAAE,MAAM,CAAC;IAC1B,kBAAkB,EAAE,MAAM,CAAC;IAC3B,WAAW,EAAE,MAAM,CAAC;IACpB,MAAM,EAAE,MAAM,CAAC;IACf,cAAc,EAAE,MAAM,GAAG,SAAS,CAAC;IACnC,eAAe,EAAE,MAAM,GAAG,SAAS,CAAC;IACpC,YAAY,EAAE,MAAM,CAAC;IACrB,cAAc,EAAE,MAAM,EAAE,CAAC;CAC1B,CAAC;AAcF,wBAAgB,UAAU,IAAI,SAAS,CA6CtC"}
|
package/dist/config.js
ADDED
|
@@ -0,0 +1,63 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
var __importDefault = (this && this.__importDefault) || function (mod) {
|
|
3
|
+
return (mod && mod.__esModule) ? mod : { "default": mod };
|
|
4
|
+
};
|
|
5
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
6
|
+
exports.loadConfig = loadConfig;
|
|
7
|
+
const web_push_1 = __importDefault(require("web-push"));
|
|
8
|
+
function numEnv(name, fallback) {
|
|
9
|
+
const raw = process.env[name];
|
|
10
|
+
if (!raw) {
|
|
11
|
+
return fallback;
|
|
12
|
+
}
|
|
13
|
+
const parsed = Number(raw);
|
|
14
|
+
if (!Number.isFinite(parsed) || parsed <= 0) {
|
|
15
|
+
return fallback;
|
|
16
|
+
}
|
|
17
|
+
return Math.floor(parsed);
|
|
18
|
+
}
|
|
19
|
+
function loadConfig() {
|
|
20
|
+
const host = process.env.AGENTWAKE_HOST ?? "0.0.0.0";
|
|
21
|
+
const port = numEnv("AGENTWAKE_PORT", 3199);
|
|
22
|
+
const httpsEnabled = (process.env.AGENTWAKE_HTTPS_ENABLED || "0") === "1";
|
|
23
|
+
const httpsCertPath = process.env.AGENTWAKE_HTTPS_CERT_PATH ?? "certs/dev-cert.pem";
|
|
24
|
+
const httpsKeyPath = process.env.AGENTWAKE_HTTPS_KEY_PATH ?? "certs/dev-key.pem";
|
|
25
|
+
const cursorHookPath = process.env.AGENTWAKE_CURSOR_HOOK_PATH ?? "/hooks/cursor";
|
|
26
|
+
const claudeHookPath = process.env.AGENTWAKE_CLAUDE_HOOK_PATH ?? "/hooks/claude";
|
|
27
|
+
const qoderLogPath = process.env.AGENTWAKE_QODER_LOG_PATH;
|
|
28
|
+
const dedupeWindowMs = numEnv("AGENTWAKE_DEDUPE_WINDOW_MS", 10_000);
|
|
29
|
+
const rateLimitWindowMs = numEnv("AGENTWAKE_RATE_LIMIT_WINDOW_MS", 10_000);
|
|
30
|
+
const rateLimitMaxEvents = numEnv("AGENTWAKE_RATE_LIMIT_MAX_EVENTS", 40);
|
|
31
|
+
const webRootPath = process.env.AGENTWAKE_WEB_ROOT ?? "web";
|
|
32
|
+
const wsPath = process.env.AGENTWAKE_WS_PATH ?? "/ws";
|
|
33
|
+
const vapidPublicKey = process.env.AGENTWAKE_VAPID_PUBLIC_KEY;
|
|
34
|
+
const vapidPrivateKey = process.env.AGENTWAKE_VAPID_PRIVATE_KEY;
|
|
35
|
+
const vapidSubject = process.env.AGENTWAKE_VAPID_SUBJECT ?? "mailto:agentwake@example.com";
|
|
36
|
+
const allowedHookIps = (process.env.AGENTWAKE_ALLOWED_HOOK_IPS ?? "")
|
|
37
|
+
.split(",")
|
|
38
|
+
.map((item) => item.trim())
|
|
39
|
+
.filter(Boolean);
|
|
40
|
+
if (vapidPublicKey && vapidPrivateKey) {
|
|
41
|
+
web_push_1.default.setVapidDetails(vapidSubject, vapidPublicKey, vapidPrivateKey);
|
|
42
|
+
}
|
|
43
|
+
return {
|
|
44
|
+
host,
|
|
45
|
+
port,
|
|
46
|
+
httpsEnabled,
|
|
47
|
+
httpsCertPath,
|
|
48
|
+
httpsKeyPath,
|
|
49
|
+
cursorHookPath,
|
|
50
|
+
claudeHookPath,
|
|
51
|
+
qoderLogPath,
|
|
52
|
+
dedupeWindowMs,
|
|
53
|
+
rateLimitWindowMs,
|
|
54
|
+
rateLimitMaxEvents,
|
|
55
|
+
webRootPath,
|
|
56
|
+
wsPath,
|
|
57
|
+
vapidPublicKey,
|
|
58
|
+
vapidPrivateKey,
|
|
59
|
+
vapidSubject,
|
|
60
|
+
allowedHookIps,
|
|
61
|
+
};
|
|
62
|
+
}
|
|
63
|
+
//# sourceMappingURL=config.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"config.js","sourceRoot":"","sources":["../src/config.ts"],"names":[],"mappings":";;;;;AAkCA,gCA6CC;AA/ED,wDAA+B;AAsB/B,SAAS,MAAM,CAAC,IAAY,EAAE,QAAgB;IAC5C,MAAM,GAAG,GAAG,OAAO,CAAC,GAAG,CAAC,IAAI,CAAC,CAAC;IAC9B,IAAI,CAAC,GAAG,EAAE,CAAC;QACT,OAAO,QAAQ,CAAC;IAClB,CAAC;IACD,MAAM,MAAM,GAAG,MAAM,CAAC,GAAG,CAAC,CAAC;IAC3B,IAAI,CAAC,MAAM,CAAC,QAAQ,CAAC,MAAM,CAAC,IAAI,MAAM,IAAI,CAAC,EAAE,CAAC;QAC5C,OAAO,QAAQ,CAAC;IAClB,CAAC;IACD,OAAO,IAAI,CAAC,KAAK,CAAC,MAAM,CAAC,CAAC;AAC5B,CAAC;AAED,SAAgB,UAAU;IACxB,MAAM,IAAI,GAAG,OAAO,CAAC,GAAG,CAAC,cAAc,IAAI,SAAS,CAAC;IACrD,MAAM,IAAI,GAAG,MAAM,CAAC,gBAAgB,EAAE,IAAI,CAAC,CAAC;IAC5C,MAAM,YAAY,GAAG,CAAC,OAAO,CAAC,GAAG,CAAC,uBAAuB,IAAI,GAAG,CAAC,KAAK,GAAG,CAAC;IAC1E,MAAM,aAAa,GAAG,OAAO,CAAC,GAAG,CAAC,yBAAyB,IAAI,oBAAoB,CAAC;IACpF,MAAM,YAAY,GAAG,OAAO,CAAC,GAAG,CAAC,wBAAwB,IAAI,mBAAmB,CAAC;IACjF,MAAM,cAAc,GAAG,OAAO,CAAC,GAAG,CAAC,0BAA0B,IAAI,eAAe,CAAC;IACjF,MAAM,cAAc,GAAG,OAAO,CAAC,GAAG,CAAC,0BAA0B,IAAI,eAAe,CAAC;IACjF,MAAM,YAAY,GAAG,OAAO,CAAC,GAAG,CAAC,wBAAwB,CAAC;IAC1D,MAAM,cAAc,GAAG,MAAM,CAAC,4BAA4B,EAAE,MAAM,CAAC,CAAC;IACpE,MAAM,iBAAiB,GAAG,MAAM,CAAC,gCAAgC,EAAE,MAAM,CAAC,CAAC;IAC3E,MAAM,kBAAkB,GAAG,MAAM,CAAC,iCAAiC,EAAE,EAAE,CAAC,CAAC;IACzE,MAAM,WAAW,GAAG,OAAO,CAAC,GAAG,CAAC,kBAAkB,IAAI,KAAK,CAAC;IAC5D,MAAM,MAAM,GAAG,OAAO,CAAC,GAAG,CAAC,iBAAiB,IAAI,KAAK,CAAC;IACtD,MAAM,cAAc,GAAG,OAAO,CAAC,GAAG,CAAC,0BAA0B,CAAC;IAC9D,MAAM,eAAe,GAAG,OAAO,CAAC,GAAG,CAAC,2BAA2B,CAAC;IAChE,MAAM,YAAY,GAAG,OAAO,CAAC,GAAG,CAAC,uBAAuB,IAAI,8BAA8B,CAAC;IAC3F,MAAM,cAAc,GAAG,CAAC,OAAO,CAAC,GAAG,CAAC,0BAA0B,IAAI,EAAE,CAAC;SAClE,KAAK,CAAC,GAAG,CAAC;SACV,GAAG,CAAC,CAAC,IAAI,EAAE,EAAE,CAAC,IAAI,CAAC,IAAI,EAAE,CAAC;SAC1B,MAAM,CAAC,OAAO,CAAC,CAAC;IAEnB,IAAI,cAAc,IAAI,eAAe,EAAE,CAAC;QACtC,kBAAO,CAAC,eAAe,CAAC,YAAY,EAAE,cAAc,EAAE,eAAe,CAAC,CAAC;IACzE,CAAC;IAED,OAAO;QACL,IAAI;QACJ,IAAI;QACJ,YAAY;QACZ,aAAa;QACb,YAAY;QACZ,cAAc;QACd,cAAc;QACd,YAAY;QACZ,cAAc;QACd,iBAAiB;QACjB,kBAAkB;QAClB,WAAW;QACX,MAAM;QACN,cAAc;QACd,eAAe;QACf,YAAY;QACZ,cAAc;KACf,CAAC;AACJ,CAAC"}
|
|
@@ -0,0 +1,17 @@
|
|
|
1
|
+
export type EditorKind = "cursor" | "claude-code" | "qoder" | "unknown";
|
|
2
|
+
export type NotifyLevel = "info" | "warn" | "error" | "critical";
|
|
3
|
+
export type NotifyEvent = {
|
|
4
|
+
source: string;
|
|
5
|
+
editor: EditorKind;
|
|
6
|
+
level: NotifyLevel;
|
|
7
|
+
title: string;
|
|
8
|
+
body: string;
|
|
9
|
+
timestamp: number;
|
|
10
|
+
dedupeKey: string;
|
|
11
|
+
meta?: Record<string, unknown>;
|
|
12
|
+
};
|
|
13
|
+
export type NotifyEventInput = Omit<NotifyEvent, "timestamp"> & {
|
|
14
|
+
timestamp?: number;
|
|
15
|
+
};
|
|
16
|
+
export declare function createNotifyEvent(input: NotifyEventInput): NotifyEvent;
|
|
17
|
+
//# sourceMappingURL=notify-event.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"notify-event.d.ts","sourceRoot":"","sources":["../../src/domain/notify-event.ts"],"names":[],"mappings":"AAAA,MAAM,MAAM,UAAU,GAAG,QAAQ,GAAG,aAAa,GAAG,OAAO,GAAG,SAAS,CAAC;AAExE,MAAM,MAAM,WAAW,GAAG,MAAM,GAAG,MAAM,GAAG,OAAO,GAAG,UAAU,CAAC;AAEjE,MAAM,MAAM,WAAW,GAAG;IACxB,MAAM,EAAE,MAAM,CAAC;IACf,MAAM,EAAE,UAAU,CAAC;IACnB,KAAK,EAAE,WAAW,CAAC;IACnB,KAAK,EAAE,MAAM,CAAC;IACd,IAAI,EAAE,MAAM,CAAC;IACb,SAAS,EAAE,MAAM,CAAC;IAClB,SAAS,EAAE,MAAM,CAAC;IAClB,IAAI,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAAC;CAChC,CAAC;AAEF,MAAM,MAAM,gBAAgB,GAAG,IAAI,CAAC,WAAW,EAAE,WAAW,CAAC,GAAG;IAC9D,SAAS,CAAC,EAAE,MAAM,CAAC;CACpB,CAAC;AAEF,wBAAgB,iBAAiB,CAAC,KAAK,EAAE,gBAAgB,GAAG,WAAW,CAKtE"}
|
|
@@ -0,0 +1,10 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
+
exports.createNotifyEvent = createNotifyEvent;
|
|
4
|
+
function createNotifyEvent(input) {
|
|
5
|
+
return {
|
|
6
|
+
...input,
|
|
7
|
+
timestamp: input.timestamp ?? Date.now(),
|
|
8
|
+
};
|
|
9
|
+
}
|
|
10
|
+
//# sourceMappingURL=notify-event.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"notify-event.js","sourceRoot":"","sources":["../../src/domain/notify-event.ts"],"names":[],"mappings":";;AAmBA,8CAKC;AALD,SAAgB,iBAAiB,CAAC,KAAuB;IACvD,OAAO;QACL,GAAG,KAAK;QACR,SAAS,EAAE,KAAK,CAAC,SAAS,IAAI,IAAI,CAAC,GAAG,EAAE;KACzC,CAAC;AACJ,CAAC"}
|
|
@@ -0,0 +1,9 @@
|
|
|
1
|
+
import type { AdapterContext, GatewayAdapter } from "./adapter";
|
|
2
|
+
export declare class AdapterRegistry {
|
|
3
|
+
private readonly adapters;
|
|
4
|
+
private readonly stops;
|
|
5
|
+
register(adapter: GatewayAdapter): void;
|
|
6
|
+
startAll(context: AdapterContext): Promise<void>;
|
|
7
|
+
stopAll(): Promise<void>;
|
|
8
|
+
}
|
|
9
|
+
//# sourceMappingURL=adapter-registry.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"adapter-registry.d.ts","sourceRoot":"","sources":["../../src/gateway/adapter-registry.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,cAAc,EAAe,cAAc,EAAE,MAAM,WAAW,CAAC;AAE7E,qBAAa,eAAe;IAC1B,OAAO,CAAC,QAAQ,CAAC,QAAQ,CAAwB;IACjD,OAAO,CAAC,QAAQ,CAAC,KAAK,CAAqB;IAE3C,QAAQ,CAAC,OAAO,EAAE,cAAc,GAAG,IAAI;IAIjC,QAAQ,CAAC,OAAO,EAAE,cAAc,GAAG,OAAO,CAAC,IAAI,CAAC;IAShD,OAAO,IAAI,OAAO,CAAC,IAAI,CAAC;CAM/B"}
|
|
@@ -0,0 +1,26 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
+
exports.AdapterRegistry = void 0;
|
|
4
|
+
class AdapterRegistry {
|
|
5
|
+
adapters = [];
|
|
6
|
+
stops = [];
|
|
7
|
+
register(adapter) {
|
|
8
|
+
this.adapters.push(adapter);
|
|
9
|
+
}
|
|
10
|
+
async startAll(context) {
|
|
11
|
+
for (const adapter of this.adapters) {
|
|
12
|
+
const stop = await adapter.start(context);
|
|
13
|
+
if (stop) {
|
|
14
|
+
this.stops.push(stop);
|
|
15
|
+
}
|
|
16
|
+
}
|
|
17
|
+
}
|
|
18
|
+
async stopAll() {
|
|
19
|
+
const tasks = this.stops.splice(0).reverse().map(async (stop) => {
|
|
20
|
+
await stop();
|
|
21
|
+
});
|
|
22
|
+
await Promise.all(tasks);
|
|
23
|
+
}
|
|
24
|
+
}
|
|
25
|
+
exports.AdapterRegistry = AdapterRegistry;
|
|
26
|
+
//# sourceMappingURL=adapter-registry.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"adapter-registry.js","sourceRoot":"","sources":["../../src/gateway/adapter-registry.ts"],"names":[],"mappings":";;;AAEA,MAAa,eAAe;IACT,QAAQ,GAAqB,EAAE,CAAC;IAChC,KAAK,GAAkB,EAAE,CAAC;IAE3C,QAAQ,CAAC,OAAuB;QAC9B,IAAI,CAAC,QAAQ,CAAC,IAAI,CAAC,OAAO,CAAC,CAAC;IAC9B,CAAC;IAED,KAAK,CAAC,QAAQ,CAAC,OAAuB;QACpC,KAAK,MAAM,OAAO,IAAI,IAAI,CAAC,QAAQ,EAAE,CAAC;YACpC,MAAM,IAAI,GAAG,MAAM,OAAO,CAAC,KAAK,CAAC,OAAO,CAAC,CAAC;YAC1C,IAAI,IAAI,EAAE,CAAC;gBACT,IAAI,CAAC,KAAK,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;YACxB,CAAC;QACH,CAAC;IACH,CAAC;IAED,KAAK,CAAC,OAAO;QACX,MAAM,KAAK,GAAG,IAAI,CAAC,KAAK,CAAC,MAAM,CAAC,CAAC,CAAC,CAAC,OAAO,EAAE,CAAC,GAAG,CAAC,KAAK,EAAE,IAAI,EAAE,EAAE;YAC9D,MAAM,IAAI,EAAE,CAAC;QACf,CAAC,CAAC,CAAC;QACH,MAAM,OAAO,CAAC,GAAG,CAAC,KAAK,CAAC,CAAC;IAC3B,CAAC;CACF;AAvBD,0CAuBC"}
|
|
@@ -0,0 +1,14 @@
|
|
|
1
|
+
import type { Express } from "express";
|
|
2
|
+
import type { AppConfig } from "../config";
|
|
3
|
+
import type { NotifyEvent } from "../domain/notify-event";
|
|
4
|
+
export type AdapterContext = {
|
|
5
|
+
app: Express;
|
|
6
|
+
config: AppConfig;
|
|
7
|
+
emit: (event: NotifyEvent) => Promise<void>;
|
|
8
|
+
};
|
|
9
|
+
export type AdapterStop = () => Promise<void> | void;
|
|
10
|
+
export interface GatewayAdapter {
|
|
11
|
+
readonly id: string;
|
|
12
|
+
start(context: AdapterContext): Promise<AdapterStop | void> | AdapterStop | void;
|
|
13
|
+
}
|
|
14
|
+
//# sourceMappingURL=adapter.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"adapter.d.ts","sourceRoot":"","sources":["../../src/gateway/adapter.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,OAAO,EAAE,MAAM,SAAS,CAAC;AACvC,OAAO,KAAK,EAAE,SAAS,EAAE,MAAM,WAAW,CAAC;AAC3C,OAAO,KAAK,EAAE,WAAW,EAAE,MAAM,wBAAwB,CAAC;AAE1D,MAAM,MAAM,cAAc,GAAG;IAC3B,GAAG,EAAE,OAAO,CAAC;IACb,MAAM,EAAE,SAAS,CAAC;IAClB,IAAI,EAAE,CAAC,KAAK,EAAE,WAAW,KAAK,OAAO,CAAC,IAAI,CAAC,CAAC;CAC7C,CAAC;AAEF,MAAM,MAAM,WAAW,GAAG,MAAM,OAAO,CAAC,IAAI,CAAC,GAAG,IAAI,CAAC;AAErD,MAAM,WAAW,cAAc;IAC7B,QAAQ,CAAC,EAAE,EAAE,MAAM,CAAC;IACpB,KAAK,CAAC,OAAO,EAAE,cAAc,GAAG,OAAO,CAAC,WAAW,GAAG,IAAI,CAAC,GAAG,WAAW,GAAG,IAAI,CAAC;CAClF"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"adapter.js","sourceRoot":"","sources":["../../src/gateway/adapter.ts"],"names":[],"mappings":""}
|
|
@@ -0,0 +1,20 @@
|
|
|
1
|
+
import type { NotifyEvent } from "../domain/notify-event";
|
|
2
|
+
import type { Notifier } from "../notifiers/notifier";
|
|
3
|
+
export type EventRouterOptions = {
|
|
4
|
+
dedupeWindowMs: number;
|
|
5
|
+
rateLimitWindowMs: number;
|
|
6
|
+
rateLimitMaxEvents: number;
|
|
7
|
+
};
|
|
8
|
+
export declare class EventRouter {
|
|
9
|
+
private readonly notifiers;
|
|
10
|
+
private readonly options;
|
|
11
|
+
private readonly dedupeTimestamps;
|
|
12
|
+
private readonly rateWindowStarts;
|
|
13
|
+
private readonly rateWindowCounts;
|
|
14
|
+
constructor(notifiers: Notifier[], options: EventRouterOptions);
|
|
15
|
+
route(event: NotifyEvent): Promise<void>;
|
|
16
|
+
private isDeduped;
|
|
17
|
+
private isRateAllowed;
|
|
18
|
+
private gcDedupe;
|
|
19
|
+
}
|
|
20
|
+
//# sourceMappingURL=event-router.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"event-router.d.ts","sourceRoot":"","sources":["../../src/gateway/event-router.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,WAAW,EAAE,MAAM,wBAAwB,CAAC;AAC1D,OAAO,KAAK,EAAE,QAAQ,EAAE,MAAM,uBAAuB,CAAC;AAGtD,MAAM,MAAM,kBAAkB,GAAG;IAC/B,cAAc,EAAE,MAAM,CAAC;IACvB,iBAAiB,EAAE,MAAM,CAAC;IAC1B,kBAAkB,EAAE,MAAM,CAAC;CAC5B,CAAC;AAEF,qBAAa,WAAW;IAMpB,OAAO,CAAC,QAAQ,CAAC,SAAS;IAC1B,OAAO,CAAC,QAAQ,CAAC,OAAO;IAN1B,OAAO,CAAC,QAAQ,CAAC,gBAAgB,CAA6B;IAC9D,OAAO,CAAC,QAAQ,CAAC,gBAAgB,CAA6B;IAC9D,OAAO,CAAC,QAAQ,CAAC,gBAAgB,CAA6B;gBAG3C,SAAS,EAAE,QAAQ,EAAE,EACrB,OAAO,EAAE,kBAAkB;IAGxC,KAAK,CAAC,KAAK,EAAE,WAAW,GAAG,OAAO,CAAC,IAAI,CAAC;IAwB9C,OAAO,CAAC,SAAS;IAWjB,OAAO,CAAC,aAAa;IAqBrB,OAAO,CAAC,QAAQ;CAOjB"}
|
|
@@ -0,0 +1,72 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
+
exports.EventRouter = void 0;
|
|
4
|
+
const logger_1 = require("../utils/logger");
|
|
5
|
+
class EventRouter {
|
|
6
|
+
notifiers;
|
|
7
|
+
options;
|
|
8
|
+
dedupeTimestamps = new Map();
|
|
9
|
+
rateWindowStarts = new Map();
|
|
10
|
+
rateWindowCounts = new Map();
|
|
11
|
+
constructor(notifiers, options) {
|
|
12
|
+
this.notifiers = notifiers;
|
|
13
|
+
this.options = options;
|
|
14
|
+
}
|
|
15
|
+
async route(event) {
|
|
16
|
+
if (this.isDeduped(event)) {
|
|
17
|
+
return;
|
|
18
|
+
}
|
|
19
|
+
if (!this.isRateAllowed(event)) {
|
|
20
|
+
logger_1.logger.warn("event dropped by rate limit", { source: event.source, dedupeKey: event.dedupeKey });
|
|
21
|
+
return;
|
|
22
|
+
}
|
|
23
|
+
await Promise.all(this.notifiers.map(async (notifier) => {
|
|
24
|
+
try {
|
|
25
|
+
await notifier.notify(event);
|
|
26
|
+
}
|
|
27
|
+
catch (error) {
|
|
28
|
+
logger_1.logger.error("notifier failed", {
|
|
29
|
+
notifier: notifier.id,
|
|
30
|
+
error: String(error),
|
|
31
|
+
source: event.source,
|
|
32
|
+
});
|
|
33
|
+
}
|
|
34
|
+
}));
|
|
35
|
+
}
|
|
36
|
+
isDeduped(event) {
|
|
37
|
+
const now = event.timestamp;
|
|
38
|
+
const last = this.dedupeTimestamps.get(event.dedupeKey);
|
|
39
|
+
this.gcDedupe(now);
|
|
40
|
+
if (typeof last === "number" && now - last <= this.options.dedupeWindowMs) {
|
|
41
|
+
return true;
|
|
42
|
+
}
|
|
43
|
+
this.dedupeTimestamps.set(event.dedupeKey, now);
|
|
44
|
+
return false;
|
|
45
|
+
}
|
|
46
|
+
isRateAllowed(event) {
|
|
47
|
+
const key = event.source;
|
|
48
|
+
const now = event.timestamp;
|
|
49
|
+
const startedAt = this.rateWindowStarts.get(key) ?? now;
|
|
50
|
+
const count = this.rateWindowCounts.get(key) ?? 0;
|
|
51
|
+
if (now - startedAt > this.options.rateLimitWindowMs) {
|
|
52
|
+
this.rateWindowStarts.set(key, now);
|
|
53
|
+
this.rateWindowCounts.set(key, 1);
|
|
54
|
+
return true;
|
|
55
|
+
}
|
|
56
|
+
if (count >= this.options.rateLimitMaxEvents) {
|
|
57
|
+
return false;
|
|
58
|
+
}
|
|
59
|
+
this.rateWindowStarts.set(key, startedAt);
|
|
60
|
+
this.rateWindowCounts.set(key, count + 1);
|
|
61
|
+
return true;
|
|
62
|
+
}
|
|
63
|
+
gcDedupe(now) {
|
|
64
|
+
for (const [key, ts] of this.dedupeTimestamps.entries()) {
|
|
65
|
+
if (now - ts > this.options.dedupeWindowMs) {
|
|
66
|
+
this.dedupeTimestamps.delete(key);
|
|
67
|
+
}
|
|
68
|
+
}
|
|
69
|
+
}
|
|
70
|
+
}
|
|
71
|
+
exports.EventRouter = EventRouter;
|
|
72
|
+
//# sourceMappingURL=event-router.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"event-router.js","sourceRoot":"","sources":["../../src/gateway/event-router.ts"],"names":[],"mappings":"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"}
|
package/dist/main.d.ts
ADDED
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"main.d.ts","sourceRoot":"","sources":["../src/main.ts"],"names":[],"mappings":""}
|
package/dist/main.js
ADDED
|
@@ -0,0 +1,9 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
+
const run_gateway_1 = require("./run-gateway");
|
|
4
|
+
const logger_1 = require("./utils/logger");
|
|
5
|
+
void (0, run_gateway_1.runGateway)().catch((error) => {
|
|
6
|
+
logger_1.logger.error("startup failed", { error: String(error) });
|
|
7
|
+
process.exit(1);
|
|
8
|
+
});
|
|
9
|
+
//# sourceMappingURL=main.js.map
|
package/dist/main.js.map
ADDED
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"main.js","sourceRoot":"","sources":["../src/main.ts"],"names":[],"mappings":";;AAAA,+CAA2C;AAC3C,2CAAwC;AACxC,KAAK,IAAA,wBAAU,GAAE,CAAC,KAAK,CAAC,CAAC,KAAK,EAAE,EAAE;IAChC,eAAM,CAAC,KAAK,CAAC,gBAAgB,EAAE,EAAE,KAAK,EAAE,MAAM,CAAC,KAAK,CAAC,EAAE,CAAC,CAAC;IACzD,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;AAClB,CAAC,CAAC,CAAC"}
|
|
@@ -0,0 +1,11 @@
|
|
|
1
|
+
import type { NotifyEvent } from "../domain/notify-event";
|
|
2
|
+
import type { Notifier } from "./notifier";
|
|
3
|
+
export declare class DesktopNotifier implements Notifier {
|
|
4
|
+
readonly id = "desktop-notifier";
|
|
5
|
+
private readonly mode;
|
|
6
|
+
constructor();
|
|
7
|
+
notify(event: NotifyEvent): Promise<void>;
|
|
8
|
+
private sendSystemNotification;
|
|
9
|
+
private sendDialog;
|
|
10
|
+
}
|
|
11
|
+
//# sourceMappingURL=desktop-notifier.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"desktop-notifier.d.ts","sourceRoot":"","sources":["../../src/notifiers/desktop-notifier.ts"],"names":[],"mappings":"AAGA,OAAO,KAAK,EAAE,WAAW,EAAE,MAAM,wBAAwB,CAAC;AAE1D,OAAO,KAAK,EAAE,QAAQ,EAAE,MAAM,YAAY,CAAC;AAM3C,qBAAa,eAAgB,YAAW,QAAQ;IAC9C,QAAQ,CAAC,EAAE,sBAAsB;IACjC,OAAO,CAAC,QAAQ,CAAC,IAAI,CAAc;;IAe7B,MAAM,CAAC,KAAK,EAAE,WAAW,GAAG,OAAO,CAAC,IAAI,CAAC;YAWjC,sBAAsB;YA0BtB,UAAU;CAgBzB"}
|
|
@@ -0,0 +1,78 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
var __importDefault = (this && this.__importDefault) || function (mod) {
|
|
3
|
+
return (mod && mod.__esModule) ? mod : { "default": mod };
|
|
4
|
+
};
|
|
5
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
6
|
+
exports.DesktopNotifier = void 0;
|
|
7
|
+
const node_notifier_1 = __importDefault(require("node-notifier"));
|
|
8
|
+
const node_child_process_1 = require("node:child_process");
|
|
9
|
+
const node_util_1 = require("node:util");
|
|
10
|
+
const logger_1 = require("../utils/logger");
|
|
11
|
+
const execFileAsync = (0, node_util_1.promisify)(node_child_process_1.execFile);
|
|
12
|
+
class DesktopNotifier {
|
|
13
|
+
id = "desktop-notifier";
|
|
14
|
+
mode;
|
|
15
|
+
constructor() {
|
|
16
|
+
const raw = (process.env.AGENTWAKE_DESKTOP_MODE || "notification").trim().toLowerCase();
|
|
17
|
+
const desiredMode = raw === "dialog" || raw === "both" ? raw : "notification";
|
|
18
|
+
const approvalMode = (process.env.AGENTWAKE_CURSOR_APPROVAL_MODE || "").trim().toLowerCase();
|
|
19
|
+
// When cursor approval already uses osascript dialog, avoid second dialog popup here.
|
|
20
|
+
if (approvalMode === "osascript" && (desiredMode === "dialog" || desiredMode === "both")) {
|
|
21
|
+
this.mode = "notification";
|
|
22
|
+
logger_1.logger.warn("desktop notifier mode downgraded to notification to avoid duplicate dialogs");
|
|
23
|
+
return;
|
|
24
|
+
}
|
|
25
|
+
this.mode = desiredMode;
|
|
26
|
+
}
|
|
27
|
+
async notify(event) {
|
|
28
|
+
const tasks = [];
|
|
29
|
+
if (this.mode === "notification" || this.mode === "both") {
|
|
30
|
+
tasks.push(this.sendSystemNotification(event));
|
|
31
|
+
}
|
|
32
|
+
if (this.mode === "dialog" || this.mode === "both") {
|
|
33
|
+
tasks.push(this.sendDialog(event));
|
|
34
|
+
}
|
|
35
|
+
await Promise.all(tasks);
|
|
36
|
+
}
|
|
37
|
+
async sendSystemNotification(event) {
|
|
38
|
+
await new Promise((resolve, reject) => {
|
|
39
|
+
node_notifier_1.default.notify({
|
|
40
|
+
title: event.title,
|
|
41
|
+
message: event.body,
|
|
42
|
+
wait: false,
|
|
43
|
+
timeout: 5,
|
|
44
|
+
}, (err) => {
|
|
45
|
+
if (err) {
|
|
46
|
+
logger_1.logger.error("desktop notifier failed", {
|
|
47
|
+
mode: "notification",
|
|
48
|
+
title: event.title,
|
|
49
|
+
error: String(err),
|
|
50
|
+
});
|
|
51
|
+
reject(err);
|
|
52
|
+
return;
|
|
53
|
+
}
|
|
54
|
+
logger_1.logger.info("desktop notifier sent", { mode: "notification", title: event.title });
|
|
55
|
+
resolve();
|
|
56
|
+
});
|
|
57
|
+
});
|
|
58
|
+
}
|
|
59
|
+
async sendDialog(event) {
|
|
60
|
+
const escapedTitle = event.title.replaceAll("\"", "\\\"");
|
|
61
|
+
const escapedBody = event.body.replaceAll("\"", "\\\"");
|
|
62
|
+
const script = `display dialog "${escapedBody}" with title "${escapedTitle}" buttons {"OK"} default button 1 giving up after 3`;
|
|
63
|
+
try {
|
|
64
|
+
await execFileAsync("osascript", ["-e", script]);
|
|
65
|
+
logger_1.logger.info("desktop notifier sent", { mode: "dialog", title: event.title });
|
|
66
|
+
}
|
|
67
|
+
catch (error) {
|
|
68
|
+
logger_1.logger.error("desktop notifier failed", {
|
|
69
|
+
mode: "dialog",
|
|
70
|
+
title: event.title,
|
|
71
|
+
error: String(error),
|
|
72
|
+
});
|
|
73
|
+
throw error;
|
|
74
|
+
}
|
|
75
|
+
}
|
|
76
|
+
}
|
|
77
|
+
exports.DesktopNotifier = DesktopNotifier;
|
|
78
|
+
//# sourceMappingURL=desktop-notifier.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"desktop-notifier.js","sourceRoot":"","sources":["../../src/notifiers/desktop-notifier.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,13 @@
|
|
|
1
|
+
import type { Server as HttpServer } from "node:http";
|
|
2
|
+
import type { Server as HttpsServer } from "node:https";
|
|
3
|
+
import type { NotifyEvent } from "../domain/notify-event";
|
|
4
|
+
import type { Notifier } from "./notifier";
|
|
5
|
+
export declare class MobileWsNotifier implements Notifier {
|
|
6
|
+
readonly id = "mobile-ws-notifier";
|
|
7
|
+
private readonly sockets;
|
|
8
|
+
private wsServer;
|
|
9
|
+
attach(server: HttpServer | HttpsServer, path: string): void;
|
|
10
|
+
notify(event: NotifyEvent): Promise<void>;
|
|
11
|
+
close(): Promise<void>;
|
|
12
|
+
}
|
|
13
|
+
//# sourceMappingURL=mobile-ws-notifier.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"mobile-ws-notifier.d.ts","sourceRoot":"","sources":["../../src/notifiers/mobile-ws-notifier.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,MAAM,IAAI,UAAU,EAAE,MAAM,WAAW,CAAC;AACtD,OAAO,KAAK,EAAE,MAAM,IAAI,WAAW,EAAE,MAAM,YAAY,CAAC;AAExD,OAAO,KAAK,EAAE,WAAW,EAAE,MAAM,wBAAwB,CAAC;AAE1D,OAAO,KAAK,EAAE,QAAQ,EAAE,MAAM,YAAY,CAAC;AAE3C,qBAAa,gBAAiB,YAAW,QAAQ;IAC/C,QAAQ,CAAC,EAAE,wBAAwB;IACnC,OAAO,CAAC,QAAQ,CAAC,OAAO,CAAwB;IAChD,OAAO,CAAC,QAAQ,CAAgC;IAEhD,MAAM,CAAC,MAAM,EAAE,UAAU,GAAG,WAAW,EAAE,IAAI,EAAE,MAAM,GAAG,IAAI;IAwBtD,MAAM,CAAC,KAAK,EAAE,WAAW,GAAG,OAAO,CAAC,IAAI,CAAC;IAqBzC,KAAK,IAAI,OAAO,CAAC,IAAI,CAAC;CAU7B"}
|
|
@@ -0,0 +1,65 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
+
exports.MobileWsNotifier = void 0;
|
|
4
|
+
const ws_1 = require("ws");
|
|
5
|
+
const logger_1 = require("../utils/logger");
|
|
6
|
+
class MobileWsNotifier {
|
|
7
|
+
id = "mobile-ws-notifier";
|
|
8
|
+
sockets = new Set();
|
|
9
|
+
wsServer = null;
|
|
10
|
+
attach(server, path) {
|
|
11
|
+
this.wsServer = new ws_1.WebSocketServer({ server, path });
|
|
12
|
+
logger_1.logger.info("mobile ws notifier attached", { path });
|
|
13
|
+
this.wsServer.on("connection", (socket, req) => {
|
|
14
|
+
this.sockets.add(socket);
|
|
15
|
+
socket.send(JSON.stringify({ type: "hello", payload: { ok: true } }));
|
|
16
|
+
logger_1.logger.info("mobile ws client connected", {
|
|
17
|
+
clients: this.sockets.size,
|
|
18
|
+
ip: req.socket.remoteAddress,
|
|
19
|
+
});
|
|
20
|
+
socket.on("close", () => {
|
|
21
|
+
this.sockets.delete(socket);
|
|
22
|
+
logger_1.logger.info("mobile ws client disconnected", { clients: this.sockets.size });
|
|
23
|
+
});
|
|
24
|
+
socket.on("error", (error) => {
|
|
25
|
+
this.sockets.delete(socket);
|
|
26
|
+
logger_1.logger.warn("mobile ws client error", {
|
|
27
|
+
clients: this.sockets.size,
|
|
28
|
+
error: String(error),
|
|
29
|
+
});
|
|
30
|
+
});
|
|
31
|
+
});
|
|
32
|
+
}
|
|
33
|
+
async notify(event) {
|
|
34
|
+
const message = JSON.stringify({ type: "notify-event", payload: event });
|
|
35
|
+
const closed = [];
|
|
36
|
+
for (const socket of this.sockets) {
|
|
37
|
+
if (socket.readyState !== socket.OPEN) {
|
|
38
|
+
closed.push(socket);
|
|
39
|
+
continue;
|
|
40
|
+
}
|
|
41
|
+
socket.send(message);
|
|
42
|
+
}
|
|
43
|
+
for (const socket of closed) {
|
|
44
|
+
this.sockets.delete(socket);
|
|
45
|
+
}
|
|
46
|
+
logger_1.logger.info("mobile ws event broadcast", {
|
|
47
|
+
dedupeKey: event.dedupeKey,
|
|
48
|
+
eventSource: event.source,
|
|
49
|
+
onlineClients: this.sockets.size,
|
|
50
|
+
droppedClients: closed.length,
|
|
51
|
+
});
|
|
52
|
+
}
|
|
53
|
+
async close() {
|
|
54
|
+
if (!this.wsServer) {
|
|
55
|
+
return;
|
|
56
|
+
}
|
|
57
|
+
await new Promise((resolve, reject) => {
|
|
58
|
+
this.wsServer?.close((err) => (err ? reject(err) : resolve()));
|
|
59
|
+
});
|
|
60
|
+
this.wsServer = null;
|
|
61
|
+
this.sockets.clear();
|
|
62
|
+
}
|
|
63
|
+
}
|
|
64
|
+
exports.MobileWsNotifier = MobileWsNotifier;
|
|
65
|
+
//# sourceMappingURL=mobile-ws-notifier.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"mobile-ws-notifier.js","sourceRoot":"","sources":["../../src/notifiers/mobile-ws-notifier.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"notifier.d.ts","sourceRoot":"","sources":["../../src/notifiers/notifier.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,WAAW,EAAE,MAAM,wBAAwB,CAAC;AAE1D,MAAM,WAAW,QAAQ;IACvB,QAAQ,CAAC,EAAE,EAAE,MAAM,CAAC;IACpB,MAAM,CAAC,KAAK,EAAE,WAAW,GAAG,OAAO,CAAC,IAAI,CAAC,CAAC;CAC3C"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"notifier.js","sourceRoot":"","sources":["../../src/notifiers/notifier.ts"],"names":[],"mappings":""}
|
|
@@ -0,0 +1,12 @@
|
|
|
1
|
+
import type { Express } from "express";
|
|
2
|
+
import type { NotifyEvent } from "../domain/notify-event";
|
|
3
|
+
import type { Notifier } from "./notifier";
|
|
4
|
+
export declare class PwaPushNotifier implements Notifier {
|
|
5
|
+
private readonly vapidPublicKey?;
|
|
6
|
+
readonly id = "pwa-push-notifier";
|
|
7
|
+
private readonly subscriptions;
|
|
8
|
+
constructor(vapidPublicKey?: string | undefined);
|
|
9
|
+
mountRoutes(app: Express): void;
|
|
10
|
+
notify(event: NotifyEvent): Promise<void>;
|
|
11
|
+
}
|
|
12
|
+
//# sourceMappingURL=pwa-push-notifier.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"pwa-push-notifier.d.ts","sourceRoot":"","sources":["../../src/notifiers/pwa-push-notifier.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,OAAO,EAAE,MAAM,SAAS,CAAC;AAEvC,OAAO,KAAK,EAAE,WAAW,EAAE,MAAM,wBAAwB,CAAC;AAC1D,OAAO,KAAK,EAAE,QAAQ,EAAE,MAAM,YAAY,CAAC;AAW3C,qBAAa,eAAgB,YAAW,QAAQ;IAIlC,OAAO,CAAC,QAAQ,CAAC,cAAc,CAAC;IAH5C,QAAQ,CAAC,EAAE,uBAAuB;IAClC,OAAO,CAAC,QAAQ,CAAC,aAAa,CAA2C;gBAE5C,cAAc,CAAC,EAAE,MAAM,YAAA;IAEpD,WAAW,CAAC,GAAG,EAAE,OAAO,GAAG,IAAI;IA8BzB,MAAM,CAAC,KAAK,EAAE,WAAW,GAAG,OAAO,CAAC,IAAI,CAAC;CA4BhD"}
|