@mono-agent/web 0.18.3 → 0.19.1
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/README.md +79 -18
- package/dist/contracts.d.ts +46 -1
- package/dist/contracts.d.ts.map +1 -1
- package/dist/contracts.js +3 -0
- package/dist/contracts.js.map +1 -1
- package/dist/index.d.ts +2 -2
- package/dist/index.d.ts.map +1 -1
- package/dist/index.js +1 -1
- package/dist/index.js.map +1 -1
- package/dist/operator-client.d.ts +10 -1
- package/dist/operator-client.d.ts.map +1 -1
- package/dist/operator-client.js +85 -0
- package/dist/operator-client.js.map +1 -1
- package/dist/push-preview.d.ts +8 -0
- package/dist/push-preview.d.ts.map +1 -0
- package/dist/push-preview.js +146 -0
- package/dist/push-preview.js.map +1 -0
- package/dist/push.d.ts +68 -0
- package/dist/push.d.ts.map +1 -0
- package/dist/push.js +594 -0
- package/dist/push.js.map +1 -0
- package/dist/server.d.ts +2 -0
- package/dist/server.d.ts.map +1 -1
- package/dist/server.js +195 -4
- package/dist/server.js.map +1 -1
- package/dist/service.d.ts +36 -2
- package/dist/service.d.ts.map +1 -1
- package/dist/service.js +251 -8
- package/dist/service.js.map +1 -1
- package/dist/store.d.ts +87 -1
- package/dist/store.d.ts.map +1 -1
- package/dist/store.js +590 -5
- package/dist/store.js.map +1 -1
- package/package.json +8 -6
- package/webapp/dist/assets/{assistant-ui-DTnHvSvW.js → assistant-ui-CxqQJmH9.js} +13 -13
- package/webapp/dist/assets/index-DBk-VjNE.css +1 -0
- package/webapp/dist/assets/index-DntvgDjy.js +51 -0
- package/webapp/dist/assets/{markdown-CTWk6ujC.js → markdown-8pwMczg6.js} +1 -1
- package/webapp/dist/index.html +8 -7
- package/webapp/dist/manifest.webmanifest +17 -1
- package/webapp/dist/notification-sw.js +162 -4
- package/webapp/dist/sw.js +1 -1
- package/webapp/dist/assets/index-BDLWl9d1.css +0 -1
- package/webapp/dist/assets/index-byaz_i41.js +0 -51
|
@@ -0,0 +1,8 @@
|
|
|
1
|
+
export declare const WEB_PUSH_PREVIEW_CODE_POINTS = 180;
|
|
2
|
+
/**
|
|
3
|
+
* Produce the only text allowed to leave the console in a push payload.
|
|
4
|
+
* The function is intentionally total: malformed Markdown/HTML is treated as
|
|
5
|
+
* text, obvious secret shapes are removed, and the result is code-point bound.
|
|
6
|
+
*/
|
|
7
|
+
export declare function webPushPreview(value: unknown, fallback?: string): string;
|
|
8
|
+
//# sourceMappingURL=push-preview.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"push-preview.d.ts","sourceRoot":"","sources":["../src/push-preview.ts"],"names":[],"mappings":"AACA,eAAO,MAAM,4BAA4B,MAAM,CAAC;AAWhD;;;;GAIG;AACH,wBAAgB,cAAc,CAAC,KAAK,EAAE,OAAO,EAAE,QAAQ,SAAsB,GAAG,MAAM,CAoCrF"}
|
|
@@ -0,0 +1,146 @@
|
|
|
1
|
+
const MAX_SCAN_CODE_POINTS = 8_192;
|
|
2
|
+
export const WEB_PUSH_PREVIEW_CODE_POINTS = 180;
|
|
3
|
+
const ENTITY_VALUES = {
|
|
4
|
+
amp: "&",
|
|
5
|
+
apos: "'",
|
|
6
|
+
gt: ">",
|
|
7
|
+
lt: "<",
|
|
8
|
+
nbsp: " ",
|
|
9
|
+
quot: '"',
|
|
10
|
+
};
|
|
11
|
+
/**
|
|
12
|
+
* Produce the only text allowed to leave the console in a push payload.
|
|
13
|
+
* The function is intentionally total: malformed Markdown/HTML is treated as
|
|
14
|
+
* text, obvious secret shapes are removed, and the result is code-point bound.
|
|
15
|
+
*/
|
|
16
|
+
export function webPushPreview(value, fallback = "Update available.") {
|
|
17
|
+
const source = typeof value === "string" ? value : "";
|
|
18
|
+
let text = [...source].slice(0, MAX_SCAN_CODE_POINTS).join("");
|
|
19
|
+
// Decode first because entities can introduce bidi/control characters, then
|
|
20
|
+
// delete invisible format and control separators before any redaction pass.
|
|
21
|
+
// Redacting first could consume only the visible prefix of one credential
|
|
22
|
+
// and strand its suffix after the separator is removed.
|
|
23
|
+
text = decodeEntities(text)
|
|
24
|
+
.replace(/\b(basic|bearer|token)[\u0000-\u0008\u000b\u000c\u000e-\u001f\u007f-\u009f\p{Cf}\p{Default_Ignorable_Code_Point}]+(?=[a-z\d._~+\/-])/giu, "$1 ")
|
|
25
|
+
.replace(/[\u0000-\u0008\u000b\u000c\u000e-\u001f\u007f-\u009f\p{Cf}\p{Default_Ignorable_Code_Point}]/gu, "");
|
|
26
|
+
text = text
|
|
27
|
+
.replace(/```[^\n]*\n?/gu, " ")
|
|
28
|
+
.replace(/~~~[^\n]*\n?/gu, " ")
|
|
29
|
+
.replace(/!\[([^\]]*)\]\([^)]*\)/gu, "$1")
|
|
30
|
+
.replace(/\[([^\]]+)\]\([^)]*\)/gu, "$1")
|
|
31
|
+
.replace(/<https?:\/\/[^>]+>/giu, " ")
|
|
32
|
+
.replace(/<[^>]*>/gu, " ")
|
|
33
|
+
.replace(/^\s{0,3}(?:#{1,6}|>|[-+*]|\d+[.)])\s+/gmu, "")
|
|
34
|
+
.replace(/(^|\s)[*_~]{1,3}([^\s][\s\S]*?)[*_~]{1,3}(?=\s|$|[.,!?;:])/gu, "$1$2")
|
|
35
|
+
.replace(/`+/gu, "");
|
|
36
|
+
text = redactSecrets(text);
|
|
37
|
+
text = text
|
|
38
|
+
.replace(/\s+/gu, " ")
|
|
39
|
+
.trim();
|
|
40
|
+
// Keep this second pass: whitespace/Markdown normalization can reveal a
|
|
41
|
+
// credential shape that was not contiguous in the source text.
|
|
42
|
+
text = redactSecrets(text);
|
|
43
|
+
const safe = text.length > 0 ? text : fallback;
|
|
44
|
+
const points = [...safe];
|
|
45
|
+
return points.length <= WEB_PUSH_PREVIEW_CODE_POINTS
|
|
46
|
+
? safe
|
|
47
|
+
: `${points.slice(0, WEB_PUSH_PREVIEW_CODE_POINTS - 1).join("").trimEnd()}…`;
|
|
48
|
+
}
|
|
49
|
+
function decodeEntities(value) {
|
|
50
|
+
return value.replace(/&(?:#(\d{1,7})|#x([\da-f]{1,6})|([a-z]+));/giu, (match, decimal, hex, named) => {
|
|
51
|
+
if (typeof named === "string")
|
|
52
|
+
return ENTITY_VALUES[named.toLowerCase()] ?? match;
|
|
53
|
+
const codePoint = Number.parseInt((decimal ?? hex), decimal === undefined ? 16 : 10);
|
|
54
|
+
if (!Number.isSafeInteger(codePoint) || codePoint <= 0 || codePoint > 0x10ffff)
|
|
55
|
+
return " ";
|
|
56
|
+
try {
|
|
57
|
+
return String.fromCodePoint(codePoint);
|
|
58
|
+
}
|
|
59
|
+
catch {
|
|
60
|
+
return " ";
|
|
61
|
+
}
|
|
62
|
+
});
|
|
63
|
+
}
|
|
64
|
+
function redactSecrets(value) {
|
|
65
|
+
let text = value
|
|
66
|
+
// URL userinfo and sensitive query values. Keep the surrounding URL useful.
|
|
67
|
+
.replace(/(https?:\/\/)[^\s/@:]+(?::[^\s/@]*)?@/giu, "$1[redacted]@")
|
|
68
|
+
.replace(/([?&](?:access_token|api[_-]?key|auth|key|password|secret|signature|token)=)[^&#\s]*/giu, "$1[redacted]")
|
|
69
|
+
// Authorization headers and common command-line/config assignments.
|
|
70
|
+
.replace(/\b(authorization\s*:\s*)(?:basic|bearer|token)\s+[^\s,;]+/giu, "$1[redacted]")
|
|
71
|
+
.replace(/\b(basic|bearer|token)\s+[a-z\d._~+\/-]{8,}={0,2}\b/giu, "$1 [redacted]");
|
|
72
|
+
text = redactCredentialAssignments(text);
|
|
73
|
+
// Well-known token families that are dangerous even without a label.
|
|
74
|
+
return text.replace(/\b(?:gh[opusr]_[a-z\d]{20,}|sk-[a-z\d_-]{20,}|xox[baprs]-[a-z\d-]{20,})\b/giu, "[redacted]");
|
|
75
|
+
}
|
|
76
|
+
function redactCredentialAssignments(value) {
|
|
77
|
+
return redactValuesAfterPrefixes(value, /(^|[\s,.;:{}()[\]])(?:(['"])(?:api[_-]?key|access[_-]?token|auth[_-]?token|client[_-]?secret|password|passwd|secret|token)\2[ \t]*[:=][ \t]*|--(?:api[_-]?key|token|password|secret)(?:=|[ \t]+)|(?:api[_-]?key|access[_-]?token|auth[_-]?token|client[_-]?secret|password|passwd|secret|token)[ \t]*[:=][ \t]*)/gimu);
|
|
78
|
+
}
|
|
79
|
+
function redactValuesAfterPrefixes(value, pattern) {
|
|
80
|
+
let cursor = 0;
|
|
81
|
+
let output = "";
|
|
82
|
+
const anchoredPattern = new RegExp(pattern.source, pattern.flags.replace("g", "y"));
|
|
83
|
+
pattern.lastIndex = 0;
|
|
84
|
+
for (let match = pattern.exec(value); match !== null; match = pattern.exec(value)) {
|
|
85
|
+
if (match.index < cursor)
|
|
86
|
+
continue;
|
|
87
|
+
const valueStart = match.index + match[0].length;
|
|
88
|
+
const scanned = scanCredentialValue(value, valueStart, anchoredPattern);
|
|
89
|
+
if (scanned.end === valueStart)
|
|
90
|
+
continue;
|
|
91
|
+
output += value.slice(cursor, valueStart);
|
|
92
|
+
output += scanned.quote === undefined ? "[redacted]" : `${scanned.quote}[redacted]${scanned.quote}`;
|
|
93
|
+
cursor = scanned.end;
|
|
94
|
+
pattern.lastIndex = scanned.end;
|
|
95
|
+
}
|
|
96
|
+
return cursor === 0 ? value : output + value.slice(cursor);
|
|
97
|
+
}
|
|
98
|
+
function scanCredentialValue(value, start, credentialPrefix) {
|
|
99
|
+
let cursor = start;
|
|
100
|
+
let segmentCount = 0;
|
|
101
|
+
let soleClosedQuote;
|
|
102
|
+
while (cursor < value.length) {
|
|
103
|
+
const character = value[cursor];
|
|
104
|
+
if (/\s/u.test(character) || /[,;]/u.test(character) || (segmentCount > 0 && /[}\])]/u.test(character)))
|
|
105
|
+
break;
|
|
106
|
+
segmentCount += 1;
|
|
107
|
+
if (character !== "\"" && character !== "'") {
|
|
108
|
+
soleClosedQuote = undefined;
|
|
109
|
+
while (cursor < value.length) {
|
|
110
|
+
const unquoted = value[cursor];
|
|
111
|
+
if (/\s/u.test(unquoted) || /[,;]/u.test(unquoted) || unquoted === "\"" || unquoted === "'")
|
|
112
|
+
break;
|
|
113
|
+
if (/[.:{}()[\]]/u.test(unquoted)) {
|
|
114
|
+
credentialPrefix.lastIndex = cursor;
|
|
115
|
+
if (credentialPrefix.exec(value) !== null)
|
|
116
|
+
return { end: cursor };
|
|
117
|
+
}
|
|
118
|
+
cursor += unquoted === "\\" ? Math.min(2, value.length - cursor) : 1;
|
|
119
|
+
}
|
|
120
|
+
continue;
|
|
121
|
+
}
|
|
122
|
+
const quote = character;
|
|
123
|
+
cursor += 1;
|
|
124
|
+
let closed = false;
|
|
125
|
+
while (cursor < value.length) {
|
|
126
|
+
const quoted = value[cursor];
|
|
127
|
+
if (quoted === "\\") {
|
|
128
|
+
cursor += Math.min(2, value.length - cursor);
|
|
129
|
+
continue;
|
|
130
|
+
}
|
|
131
|
+
if (quoted === quote) {
|
|
132
|
+
cursor += 1;
|
|
133
|
+
closed = true;
|
|
134
|
+
break;
|
|
135
|
+
}
|
|
136
|
+
cursor += 1;
|
|
137
|
+
}
|
|
138
|
+
if (!closed)
|
|
139
|
+
return { end: cursor };
|
|
140
|
+
soleClosedQuote = segmentCount === 1 ? quote : undefined;
|
|
141
|
+
}
|
|
142
|
+
return soleClosedQuote === undefined
|
|
143
|
+
? { end: cursor }
|
|
144
|
+
: { end: cursor, quote: soleClosedQuote };
|
|
145
|
+
}
|
|
146
|
+
//# sourceMappingURL=push-preview.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"push-preview.js","sourceRoot":"","sources":["../src/push-preview.ts"],"names":[],"mappings":"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"}
|
package/dist/push.d.ts
ADDED
|
@@ -0,0 +1,68 @@
|
|
|
1
|
+
import type { LookupAddress } from "node:dns";
|
|
2
|
+
import { type LookupFunction } from "node:net";
|
|
3
|
+
import { type Urgency } from "web-push";
|
|
4
|
+
import { type ClaimedWebPushDelivery, type StoredWebPushEvent, type WebPushIdentity, type WebStore } from "./store.js";
|
|
5
|
+
export declare const WEB_PUSH_SERVICE_WORKER_VERSION: 2;
|
|
6
|
+
export declare const DEFAULT_WEB_PUSH_SUBJECT = "https://github.com/robertsreberski/mono-agent";
|
|
7
|
+
export type WebPushDnsResolver = (hostname: string) => Promise<readonly LookupAddress[]>;
|
|
8
|
+
export interface WebPushHttpResult {
|
|
9
|
+
readonly statusCode: number;
|
|
10
|
+
readonly headers: Readonly<Record<string, string | readonly string[] | undefined>>;
|
|
11
|
+
readonly body?: string;
|
|
12
|
+
}
|
|
13
|
+
export type WebPushSend = (delivery: ClaimedWebPushDelivery, identity: WebPushIdentity, subject: string, signal: AbortSignal) => Promise<WebPushHttpResult>;
|
|
14
|
+
export interface WebPushDispatcherOptions {
|
|
15
|
+
readonly send?: WebPushSend;
|
|
16
|
+
readonly resolve?: WebPushDnsResolver;
|
|
17
|
+
readonly beforeSend?: (event: StoredWebPushEvent, signal: AbortSignal) => Promise<"current" | "stale" | "unknown">;
|
|
18
|
+
readonly logger?: {
|
|
19
|
+
debug?(message: string, metadata?: Readonly<Record<string, unknown>>): void;
|
|
20
|
+
warn?(message: string, metadata?: Readonly<Record<string, unknown>>): void;
|
|
21
|
+
};
|
|
22
|
+
readonly clock?: () => Date;
|
|
23
|
+
readonly random?: () => number;
|
|
24
|
+
readonly intervalMs?: number;
|
|
25
|
+
}
|
|
26
|
+
export interface ValidatedWebPushEndpoint {
|
|
27
|
+
readonly endpoint: string;
|
|
28
|
+
readonly url: URL;
|
|
29
|
+
readonly addresses: readonly LookupAddress[];
|
|
30
|
+
}
|
|
31
|
+
export declare function generateWebPushIdentity(): {
|
|
32
|
+
readonly publicKey: string;
|
|
33
|
+
readonly privateKey: string;
|
|
34
|
+
};
|
|
35
|
+
export declare function resolveWebPushSubject(value: string | undefined): string;
|
|
36
|
+
export declare function validateWebPushEndpoint(value: string, resolver?: WebPushDnsResolver): Promise<ValidatedWebPushEndpoint>;
|
|
37
|
+
/** Canonicalize an endpoint without resolving it or making an outbound request. */
|
|
38
|
+
export declare function normalizeWebPushEndpoint(value: string): string;
|
|
39
|
+
export declare function validateWebPushKeys(p256dh: string, auth: string): void;
|
|
40
|
+
export declare function webPushPayload(delivery: ClaimedWebPushDelivery): string;
|
|
41
|
+
export declare function webPushUrgency(kind: StoredWebPushEvent["kind"]): Urgency;
|
|
42
|
+
export declare function sendWebPushPinned(delivery: ClaimedWebPushDelivery, identity: WebPushIdentity, subject: string, signal: AbortSignal, resolver?: WebPushDnsResolver): Promise<WebPushHttpResult>;
|
|
43
|
+
export declare class WebPushDispatcher {
|
|
44
|
+
private readonly store;
|
|
45
|
+
private readonly identity;
|
|
46
|
+
private readonly subject;
|
|
47
|
+
private readonly options;
|
|
48
|
+
private readonly active;
|
|
49
|
+
private readonly circuits;
|
|
50
|
+
private readonly send;
|
|
51
|
+
private readonly clock;
|
|
52
|
+
private readonly random;
|
|
53
|
+
private timer;
|
|
54
|
+
private ticking;
|
|
55
|
+
private stopped;
|
|
56
|
+
constructor(store: WebStore, identity: WebPushIdentity, subject: string, options?: WebPushDispatcherOptions);
|
|
57
|
+
start(): void;
|
|
58
|
+
wake(): void;
|
|
59
|
+
isDegraded(): boolean;
|
|
60
|
+
stopAndDrain(timeoutMs?: number): Promise<void>;
|
|
61
|
+
private tick;
|
|
62
|
+
private deliver;
|
|
63
|
+
private retry;
|
|
64
|
+
private recordAuthFailure;
|
|
65
|
+
}
|
|
66
|
+
/** Preserve one validated address while honoring both Node lookup callback modes. */
|
|
67
|
+
export declare function createWebPushPinnedLookup(pinned: LookupAddress): LookupFunction;
|
|
68
|
+
//# sourceMappingURL=push.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"push.d.ts","sourceRoot":"","sources":["../src/push.ts"],"names":[],"mappings":"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"}
|