openlimiter 0.4.0 → 1.2.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/README.md +21 -0
- package/dist/bin.js +41 -10
- package/dist/bin.js.map +1 -1
- package/dist/cli.d.ts +18 -1
- package/dist/cli.d.ts.map +1 -1
- package/dist/cli.js +214 -7
- package/dist/cli.js.map +1 -1
- package/dist/index.d.ts +2 -0
- package/dist/index.d.ts.map +1 -1
- package/dist/index.js +2 -0
- package/dist/index.js.map +1 -1
- package/dist/ingest.d.ts +10 -2
- package/dist/ingest.d.ts.map +1 -1
- package/dist/ingest.js +59 -5
- package/dist/ingest.js.map +1 -1
- package/dist/render.d.ts.map +1 -1
- package/dist/render.js +33 -16
- package/dist/render.js.map +1 -1
- package/dist/serve.d.ts +1 -1
- package/dist/serve.js +155 -155
- package/dist/smoke.d.ts +107 -0
- package/dist/smoke.d.ts.map +1 -0
- package/dist/smoke.js +327 -0
- package/dist/smoke.js.map +1 -0
- package/dist/statusline-wrapper.d.ts +32 -0
- package/dist/statusline-wrapper.d.ts.map +1 -0
- package/dist/statusline-wrapper.js +121 -0
- package/dist/statusline-wrapper.js.map +1 -0
- package/dist/statusline.d.ts.map +1 -1
- package/dist/statusline.js +3 -0
- package/dist/statusline.js.map +1 -1
- package/package.json +8 -6
package/dist/ingest.js
CHANGED
|
@@ -1,10 +1,47 @@
|
|
|
1
1
|
import path from "node:path";
|
|
2
2
|
import { MANUAL_FILE_MARKER, MANUAL_FILE_NAME } from "@openlimiter/connectors";
|
|
3
3
|
import { mergeSnapshotCache, readJsonFileSafely, resolveStateDirectory } from "@openlimiter/core";
|
|
4
|
+
import { writeAgentContextSnapshot } from "@openlimiter/adapters";
|
|
4
5
|
/** Largest document accepted on standard input. */
|
|
5
6
|
export const STDIN_BYTE_LIMIT = 262_144;
|
|
6
7
|
/** Hard ceiling on how long a command waits for standard input. */
|
|
7
8
|
export const STDIN_TIMEOUT_MILLISECONDS = 500;
|
|
9
|
+
/**
|
|
10
|
+
* Read one status line payload as bytes, once.
|
|
11
|
+
*
|
|
12
|
+
* Wrapper mode needs the bytes rather than decoded text because the foreign
|
|
13
|
+
* command must receive exactly what Claude wrote. There is deliberately no
|
|
14
|
+
* payload logging and no intermediate file.
|
|
15
|
+
*/
|
|
16
|
+
export async function readStandardInputBuffer(stream = process.stdin, timeoutMilliseconds = STDIN_TIMEOUT_MILLISECONDS) {
|
|
17
|
+
if (stream.isTTY === true)
|
|
18
|
+
return Buffer.alloc(0);
|
|
19
|
+
return await new Promise((resolve) => {
|
|
20
|
+
const chunks = [];
|
|
21
|
+
let settled = false;
|
|
22
|
+
const finish = () => {
|
|
23
|
+
if (settled)
|
|
24
|
+
return;
|
|
25
|
+
settled = true;
|
|
26
|
+
clearTimeout(timer);
|
|
27
|
+
stream.off("data", onData);
|
|
28
|
+
stream.off("end", onEnd);
|
|
29
|
+
stream.off("error", onError);
|
|
30
|
+
stream.pause();
|
|
31
|
+
resolve(Buffer.concat(chunks));
|
|
32
|
+
};
|
|
33
|
+
const onData = (chunk) => {
|
|
34
|
+
chunks.push(Buffer.from(chunk));
|
|
35
|
+
};
|
|
36
|
+
const onEnd = () => finish();
|
|
37
|
+
const onError = () => finish();
|
|
38
|
+
const timer = setTimeout(finish, timeoutMilliseconds);
|
|
39
|
+
stream.on("data", onData);
|
|
40
|
+
stream.on("end", onEnd);
|
|
41
|
+
stream.on("error", onError);
|
|
42
|
+
stream.resume();
|
|
43
|
+
});
|
|
44
|
+
}
|
|
8
45
|
/** Largest manual document accepted from the state directory. */
|
|
9
46
|
export const MANUAL_FILE_BYTE_LIMIT = 65_536;
|
|
10
47
|
/**
|
|
@@ -15,25 +52,39 @@ export const MANUAL_FILE_BYTE_LIMIT = 65_536;
|
|
|
15
52
|
* writes its statusline payload and closes the pipe, so the common path costs
|
|
16
53
|
* one tick rather than the full timeout.
|
|
17
54
|
*/
|
|
18
|
-
export async function readStandardInputText(stream = process.stdin, byteLimit = STDIN_BYTE_LIMIT, timeoutMilliseconds = STDIN_TIMEOUT_MILLISECONDS) {
|
|
19
|
-
if (stream.isTTY === true)
|
|
55
|
+
export async function readStandardInputText(stream = process.stdin, byteLimit = STDIN_BYTE_LIMIT, timeoutMilliseconds = STDIN_TIMEOUT_MILLISECONDS, signal) {
|
|
56
|
+
if (stream.isTTY === true || signal?.aborted === true)
|
|
20
57
|
return null;
|
|
21
58
|
return await new Promise((resolve) => {
|
|
22
59
|
const chunks = [];
|
|
23
60
|
let total = 0;
|
|
24
61
|
let settled = false;
|
|
25
|
-
const collected = () =>
|
|
62
|
+
const collected = () => {
|
|
63
|
+
if (chunks.length === 0)
|
|
64
|
+
return null;
|
|
65
|
+
try {
|
|
66
|
+
return new TextDecoder("utf-8", { fatal: true }).decode(Buffer.concat(chunks));
|
|
67
|
+
}
|
|
68
|
+
catch {
|
|
69
|
+
return null;
|
|
70
|
+
}
|
|
71
|
+
};
|
|
26
72
|
const finish = (value) => {
|
|
27
73
|
if (settled)
|
|
28
74
|
return;
|
|
29
75
|
settled = true;
|
|
30
76
|
clearTimeout(timer);
|
|
77
|
+
signal?.removeEventListener("abort", onAbort);
|
|
31
78
|
stream.off("data", onData);
|
|
32
79
|
stream.off("end", onEnd);
|
|
33
80
|
stream.off("error", onError);
|
|
34
81
|
stream.pause();
|
|
35
82
|
resolve(value);
|
|
36
83
|
};
|
|
84
|
+
/* A caller on a deadline stops listening the moment the deadline passes,
|
|
85
|
+
so a producer that never closes the pipe cannot keep this read alive
|
|
86
|
+
behind an answer that has already been given. */
|
|
87
|
+
const onAbort = () => finish(null);
|
|
37
88
|
const onData = (chunk) => {
|
|
38
89
|
total += chunk.length;
|
|
39
90
|
if (total > byteLimit) {
|
|
@@ -45,6 +96,7 @@ export async function readStandardInputText(stream = process.stdin, byteLimit =
|
|
|
45
96
|
const onEnd = () => finish(collected());
|
|
46
97
|
const onError = () => finish(null);
|
|
47
98
|
const timer = setTimeout(() => finish(collected()), timeoutMilliseconds);
|
|
99
|
+
signal?.addEventListener("abort", onAbort, { once: true });
|
|
48
100
|
stream.on("data", onData);
|
|
49
101
|
stream.on("end", onEnd);
|
|
50
102
|
stream.on("error", onError);
|
|
@@ -142,7 +194,9 @@ export async function environmentWithLocalMarkers(environment, directory) {
|
|
|
142
194
|
* merge, and the write happen under one lock inside the core, so a concurrent
|
|
143
195
|
* writer cannot drop these rows.
|
|
144
196
|
*/
|
|
145
|
-
export async function persistSnapshots(incoming, directory) {
|
|
146
|
-
|
|
197
|
+
export async function persistSnapshots(incoming, directory, now) {
|
|
198
|
+
const merged = await mergeSnapshotCache(incoming, directory ?? resolveStateDirectory());
|
|
199
|
+
await writeAgentContextSnapshot(merged.merged, directory, now);
|
|
200
|
+
return merged;
|
|
147
201
|
}
|
|
148
202
|
//# sourceMappingURL=ingest.js.map
|
package/dist/ingest.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"ingest.js","sourceRoot":"","sources":["../src/ingest.ts"],"names":[],"mappings":"AAAA,OAAO,IAAI,MAAM,WAAW,CAAC;AAC7B,OAAO,EACL,kBAAkB,EAClB,gBAAgB,EACjB,MAAM,yBAAyB,CAAC;AACjC,OAAO,EACL,kBAAkB,EAClB,kBAAkB,EAClB,qBAAqB,EAKtB,MAAM,mBAAmB,CAAC;
|
|
1
|
+
{"version":3,"file":"ingest.js","sourceRoot":"","sources":["../src/ingest.ts"],"names":[],"mappings":"AAAA,OAAO,IAAI,MAAM,WAAW,CAAC;AAC7B,OAAO,EACL,kBAAkB,EAClB,gBAAgB,EACjB,MAAM,yBAAyB,CAAC;AACjC,OAAO,EACL,kBAAkB,EAClB,kBAAkB,EAClB,qBAAqB,EAKtB,MAAM,mBAAmB,CAAC;AAC3B,OAAO,EAAE,yBAAyB,EAAE,MAAM,uBAAuB,CAAC;AAElE,mDAAmD;AACnD,MAAM,CAAC,MAAM,gBAAgB,GAAG,OAAO,CAAC;AAExC,mEAAmE;AACnE,MAAM,CAAC,MAAM,0BAA0B,GAAG,GAAG,CAAC;AAE9C;;;;;;GAMG;AACH,MAAM,CAAC,KAAK,UAAU,uBAAuB,CAC3C,SAA4B,OAAO,CAAC,KAAK,EACzC,mBAAmB,GAAG,0BAA0B;IAEhD,IAAI,MAAM,CAAC,KAAK,KAAK,IAAI;QAAE,OAAO,MAAM,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC;IAClD,OAAO,MAAM,IAAI,OAAO,CAAS,CAAC,OAAO,EAAE,EAAE;QAC3C,MAAM,MAAM,GAAa,EAAE,CAAC;QAC5B,IAAI,OAAO,GAAG,KAAK,CAAC;QACpB,MAAM,MAAM,GAAG,GAAS,EAAE;YACxB,IAAI,OAAO;gBAAE,OAAO;YACpB,OAAO,GAAG,IAAI,CAAC;YACf,YAAY,CAAC,KAAK,CAAC,CAAC;YACpB,MAAM,CAAC,GAAG,CAAC,MAAM,EAAE,MAAM,CAAC,CAAC;YAC3B,MAAM,CAAC,GAAG,CAAC,KAAK,EAAE,KAAK,CAAC,CAAC;YACzB,MAAM,CAAC,GAAG,CAAC,OAAO,EAAE,OAAO,CAAC,CAAC;YAC7B,MAAM,CAAC,KAAK,EAAE,CAAC;YACf,OAAO,CAAC,MAAM,CAAC,MAAM,CAAC,MAAM,CAAC,CAAC,CAAC;QACjC,CAAC,CAAC;QACF,MAAM,MAAM,GAAG,CAAC,KAAsB,EAAQ,EAAE;YAC9C,MAAM,CAAC,IAAI,CAAC,MAAM,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC,CAAC;QAClC,CAAC,CAAC;QACF,MAAM,KAAK,GAAG,GAAS,EAAE,CAAC,MAAM,EAAE,CAAC;QACnC,MAAM,OAAO,GAAG,GAAS,EAAE,CAAC,MAAM,EAAE,CAAC;QACrC,MAAM,KAAK,GAAG,UAAU,CAAC,MAAM,EAAE,mBAAmB,CAAC,CAAC;QACtD,MAAM,CAAC,EAAE,CAAC,MAAM,EAAE,MAAM,CAAC,CAAC;QAC1B,MAAM,CAAC,EAAE,CAAC,KAAK,EAAE,KAAK,CAAC,CAAC;QACxB,MAAM,CAAC,EAAE,CAAC,OAAO,EAAE,OAAO,CAAC,CAAC;QAC5B,MAAM,CAAC,MAAM,EAAE,CAAC;IAClB,CAAC,CAAC,CAAC;AACL,CAAC;AAED,iEAAiE;AACjE,MAAM,CAAC,MAAM,sBAAsB,GAAG,MAAM,CAAC;AAI7C;;;;;;;GAOG;AACH,MAAM,CAAC,KAAK,UAAU,qBAAqB,CACzC,SAA4B,OAAO,CAAC,KAAK,EACzC,SAAS,GAAG,gBAAgB,EAC5B,mBAAmB,GAAG,0BAA0B,EAChD,MAAoB;IAEpB,IAAI,MAAM,CAAC,KAAK,KAAK,IAAI,IAAI,MAAM,EAAE,OAAO,KAAK,IAAI;QAAE,OAAO,IAAI,CAAC;IACnE,OAAO,MAAM,IAAI,OAAO,CAAgB,CAAC,OAAO,EAAE,EAAE;QAClD,MAAM,MAAM,GAAa,EAAE,CAAC;QAC5B,IAAI,KAAK,GAAG,CAAC,CAAC;QACd,IAAI,OAAO,GAAG,KAAK,CAAC;QACpB,MAAM,SAAS,GAAG,GAAkB,EAAE;YACpC,IAAI,MAAM,CAAC,MAAM,KAAK,CAAC;gBAAE,OAAO,IAAI,CAAC;YACrC,IAAI,CAAC;gBACH,OAAO,IAAI,WAAW,CAAC,OAAO,EAAE,EAAE,KAAK,EAAE,IAAI,EAAE,CAAC,CAAC,MAAM,CAAC,MAAM,CAAC,MAAM,CAAC,MAAM,CAAC,CAAC,CAAC;YACjF,CAAC;YAAC,MAAM,CAAC;gBACP,OAAO,IAAI,CAAC;YACd,CAAC;QACH,CAAC,CAAC;QACF,MAAM,MAAM,GAAG,CAAC,KAAoB,EAAQ,EAAE;YAC5C,IAAI,OAAO;gBAAE,OAAO;YACpB,OAAO,GAAG,IAAI,CAAC;YACf,YAAY,CAAC,KAAK,CAAC,CAAC;YACpB,MAAM,EAAE,mBAAmB,CAAC,OAAO,EAAE,OAAO,CAAC,CAAC;YAC9C,MAAM,CAAC,GAAG,CAAC,MAAM,EAAE,MAAM,CAAC,CAAC;YAC3B,MAAM,CAAC,GAAG,CAAC,KAAK,EAAE,KAAK,CAAC,CAAC;YACzB,MAAM,CAAC,GAAG,CAAC,OAAO,EAAE,OAAO,CAAC,CAAC;YAC7B,MAAM,CAAC,KAAK,EAAE,CAAC;YACf,OAAO,CAAC,KAAK,CAAC,CAAC;QACjB,CAAC,CAAC;QACF;;2DAEmD;QACnD,MAAM,OAAO,GAAG,GAAS,EAAE,CAAC,MAAM,CAAC,IAAI,CAAC,CAAC;QACzC,MAAM,MAAM,GAAG,CAAC,KAAa,EAAQ,EAAE;YACrC,KAAK,IAAI,KAAK,CAAC,MAAM,CAAC;YACtB,IAAI,KAAK,GAAG,SAAS,EAAE,CAAC;gBACtB,MAAM,CAAC,IAAI,CAAC,CAAC;gBACb,OAAO;YACT,CAAC;YACD,MAAM,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC;QACrB,CAAC,CAAC;QACF,MAAM,KAAK,GAAG,GAAS,EAAE,CAAC,MAAM,CAAC,SAAS,EAAE,CAAC,CAAC;QAC9C,MAAM,OAAO,GAAG,GAAS,EAAE,CAAC,MAAM,CAAC,IAAI,CAAC,CAAC;QACzC,MAAM,KAAK,GAAG,UAAU,CAAC,GAAG,EAAE,CAAC,MAAM,CAAC,SAAS,EAAE,CAAC,EAAE,mBAAmB,CAAC,CAAC;QACzE,MAAM,EAAE,gBAAgB,CAAC,OAAO,EAAE,OAAO,EAAE,EAAE,IAAI,EAAE,IAAI,EAAE,CAAC,CAAC;QAC3D,MAAM,CAAC,EAAE,CAAC,MAAM,EAAE,MAAM,CAAC,CAAC;QAC1B,MAAM,CAAC,EAAE,CAAC,KAAK,EAAE,KAAK,CAAC,CAAC;QACxB,MAAM,CAAC,EAAE,CAAC,OAAO,EAAE,OAAO,CAAC,CAAC;QAC5B,MAAM,CAAC,MAAM,EAAE,CAAC;IAClB,CAAC,CAAC,CAAC;AACL,CAAC;AAED,qDAAqD;AACrD,MAAM,UAAU,aAAa,CAAC,IAAmB;IAC/C,IAAI,IAAI,KAAK,IAAI;QAAE,OAAO,EAAE,EAAE,EAAE,KAAK,EAAE,CAAC;IACxC,MAAM,OAAO,GAAG,IAAI,CAAC,IAAI,EAAE,CAAC;IAC5B,IAAI,OAAO,KAAK,EAAE,IAAI,OAAO,CAAC,MAAM,GAAG,gBAAgB;QAAE,OAAO,EAAE,EAAE,EAAE,KAAK,EAAE,CAAC;IAC9E,IAAI,CAAC;QACH,OAAO,EAAE,EAAE,EAAE,IAAI,EAAE,KAAK,EAAE,IAAI,CAAC,KAAK,CAAC,OAAO,CAAY,EAAE,CAAC;IAC7D,CAAC;IAAC,MAAM,CAAC;QACP,OAAO,EAAE,EAAE,EAAE,KAAK,EAAE,CAAC;IACvB,CAAC;AACH,CAAC;AAED;;;;;;;;GAQG;AAEH,sEAAsE;AACtE,MAAM,CAAC,MAAM,qBAAqB,GAAuB;IACvD,UAAU,EAAE,oBAAoB;IAChC,WAAW,EAAE,wBAAwB;CACtC,CAAC;AAEF,8DAA8D;AAC9D,MAAM,CAAC,MAAM,iBAAiB,GAAuB;IACnD,UAAU,EAAE,iBAAiB;IAC7B,WAAW,EAAE,gBAAgB;CAC9B,CAAC;AAEF,gEAAgE;AAChE,MAAM,CAAC,MAAM,iBAAiB,GAAuB;IACnD,UAAU,EAAE,iBAAiB;IAC7B,WAAW,EAAE,aAAa;CAC3B,CAAC;AAEF;;;;;;GAMG;AACH,MAAM,UAAU,cAAc,CAC5B,MAA2B,EAC3B,UAA8B;IAE9B,OAAO,MAAM,CAAC,GAAG,CAAC,CAAC,KAAK,EAAE,EAAE,CAAC,CAAC,EAAE,GAAG,KAAK,EAAE,UAAU,EAAE,CAAC,CAAC,CAAC;AAC3D,CAAC;AAED,SAAS,cAAc,CAAC,SAA6B;IACnD,OAAO,IAAI,CAAC,IAAI,CAAC,SAAS,IAAI,qBAAqB,EAAE,EAAE,gBAAgB,CAAC,CAAC;AAC3E,CAAC;AAED;;;;;;GAMG;AACH,MAAM,CAAC,KAAK,UAAU,kBAAkB,CACtC,SAA6B;IAE7B,MAAM,QAAQ,GAAG,MAAM,kBAAkB,CACvC,cAAc,CAAC,SAAS,CAAC,EACzB,sBAAsB,CACvB,CAAC;IACF,OAAO,QAAQ,CAAC,EAAE,CAAC,CAAC,CAAC,QAAQ,CAAC,KAAK,CAAC,CAAC,CAAC,SAAS,CAAC;AAClD,CAAC;AAED,uEAAuE;AACvE,MAAM,CAAC,KAAK,UAAU,iBAAiB,CAAC,SAA6B;IACnE,MAAM,QAAQ,GAAG,MAAM,kBAAkB,CACvC,cAAc,CAAC,SAAS,CAAC,EACzB,sBAAsB,CACvB,CAAC;IACF,OAAO,QAAQ,CAAC,EAAE,CAAC;AACrB,CAAC;AAED;;;;;;GAMG;AACH,MAAM,CAAC,KAAK,UAAU,2BAA2B,CAC/C,WAAyD,EACzD,SAA6B;IAE7B,MAAM,QAAQ,GAAuC,EAAE,GAAG,WAAW,EAAE,CAAC;IACxE,IAAI,MAAM,iBAAiB,CAAC,SAAS,CAAC,EAAE,CAAC;QACvC,QAAQ,CAAC,kBAAkB,CAAC,GAAG,WAAW,CAAC;IAC7C,CAAC;SAAM,CAAC;QACN,OAAO,QAAQ,CAAC,kBAAkB,CAAC,CAAC;IACtC,CAAC;IACD,OAAO,QAAQ,CAAC;AAClB,CAAC;AAED;;;;;;GAMG;AACH,MAAM,CAAC,KAAK,UAAU,gBAAgB,CACpC,QAA6B,EAC7B,SAA6B,EAC7B,GAAW;IAEX,MAAM,MAAM,GAAG,MAAM,kBAAkB,CACrC,QAAQ,EACR,SAAS,IAAI,qBAAqB,EAAE,CACrC,CAAC;IACF,MAAM,yBAAyB,CAAC,MAAM,CAAC,MAAM,EAAE,SAAS,EAAE,GAAG,CAAC,CAAC;IAC/D,OAAO,MAAM,CAAC;AAChB,CAAC"}
|
package/dist/render.d.ts.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"render.d.ts","sourceRoot":"","sources":["../src/render.ts"],"names":[],"mappings":"AAAA,OAAO,EAKL,KAAK,eAAe,EACpB,KAAK,eAAe,EACpB,KAAK,QAAQ,EAEb,KAAK,aAAa,EACnB,MAAM,mBAAmB,CAAC;AAE3B;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;GA+BG;AAEH,kEAAkE;AAClE,MAAM,MAAM,QAAQ,GAAG,SAAS,GAAG,OAAO,GAAG,QAAQ,GAAG,UAAU,GAAG,MAAM,CAAC;AAE5E,wBAAgB,UAAU,CAAC,OAAO,EAAE,MAAM,GAAG,QAAQ,CAMpD;AAED,6EAA6E;AAC7E,eAAO,MAAM,YAAY,KAAK,CAAC;AAE/B;;;;;;;;;GASG;AACH,eAAO,MAAM,uBAAuB,IAAI,CAAC;AAEzC,wBAAgB,cAAc,CAAC,OAAO,EAAE,MAAM,EAAE,QAAQ,SAAe,GAAG,MAAM,CAK/E;AAiCD;;;;;;GAMG;AACH,wBAAgB,aAAa,CAC3B,WAAW,EAAE,QAAQ,CAAC,MAAM,CAAC,MAAM,EAAE,MAAM,GAAG,SAAS,CAAC,CAAC,EACzD,KAAK,EAAE,OAAO,GACb,OAAO,CAGT;AAED;;;;;;;;;;;;;;GAcG;AACH,wBAAgB,gBAAgB,CAC9B,WAAW,EAAE,QAAQ,CAAC,MAAM,CAAC,MAAM,EAAE,MAAM,GAAG,SAAS,CAAC,CAAC,GACxD,OAAO,CAIT;AAED;;;;;;;;GAQG;AACH,wBAAgB,oBAAoB,CAClC,WAAW,EAAE,QAAQ,CAAC,MAAM,CAAC,MAAM,EAAE,MAAM,GAAG,SAAS,CAAC,CAAC,EACzD,KAAK,EAAE,OAAO,EACd,QAAQ,EAAE,MAAM,GACf,OAAO,CAKT;AAED;;;;;;GAMG;AACH,wBAAgB,QAAQ,CAAC,IAAI,EAAE,QAAQ,EAAE,IAAI,EAAE,OAAO,GAAG,MAAM,CAG9D;AASD;;;;;;;;;;;;;;;;;;;;;;;GAuBG;AACH,wBAAgB,QAAQ,CACtB,OAAO,EAAE,MAAM,EACf,KAAK,EAAE,aAAa,EACpB,KAAK,EAAE,OAAO,EACd,QAAQ,SAAe,EACvB,IAAI,UAAgC,EACpC,YAAY,UAIX,GACA,MAAM,CAsBR;AAED,iDAAiD;AACjD,wBAAgB,WAAW,CACzB,QAAQ,EAAE,MAAM,EAChB,QAAQ,EAAE,eAAe,EACzB,KAAK,EAAE,OAAO,GACb,MAAM,CAER;AAED,wBAAgB,YAAY,CAC1B,QAAQ,EAAE,SAAS,eAAe,EAAE,EACpC,KAAK,EAAE,OAAO,GACb,SAAS,MAAM,EAAE,CAGnB;AAQD;;;;;;GAMG;AACH,wBAAgB,WAAW,CAAC,OAAO,EAAE,MAAM,GAAG,IAAI,EAAE,GAAG,EAAE,MAAM,GAAG,MAAM,CAevE;AAED;;;;;GAKG;AACH,wBAAgB,WAAW,CAAC,QAAQ,EAAE,QAAQ,GAAG,MAAM,CAOtD;AAiBD,eAAO,MAAM,YAAY,QAAmD,CAAC;
|
|
1
|
+
{"version":3,"file":"render.d.ts","sourceRoot":"","sources":["../src/render.ts"],"names":[],"mappings":"AAAA,OAAO,EAKL,KAAK,eAAe,EACpB,KAAK,eAAe,EACpB,KAAK,QAAQ,EAEb,KAAK,aAAa,EACnB,MAAM,mBAAmB,CAAC;AAE3B;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;GA+BG;AAEH,kEAAkE;AAClE,MAAM,MAAM,QAAQ,GAAG,SAAS,GAAG,OAAO,GAAG,QAAQ,GAAG,UAAU,GAAG,MAAM,CAAC;AAE5E,wBAAgB,UAAU,CAAC,OAAO,EAAE,MAAM,GAAG,QAAQ,CAMpD;AAED,6EAA6E;AAC7E,eAAO,MAAM,YAAY,KAAK,CAAC;AAE/B;;;;;;;;;GASG;AACH,eAAO,MAAM,uBAAuB,IAAI,CAAC;AAEzC,wBAAgB,cAAc,CAAC,OAAO,EAAE,MAAM,EAAE,QAAQ,SAAe,GAAG,MAAM,CAK/E;AAiCD;;;;;;GAMG;AACH,wBAAgB,aAAa,CAC3B,WAAW,EAAE,QAAQ,CAAC,MAAM,CAAC,MAAM,EAAE,MAAM,GAAG,SAAS,CAAC,CAAC,EACzD,KAAK,EAAE,OAAO,GACb,OAAO,CAGT;AAED;;;;;;;;;;;;;;GAcG;AACH,wBAAgB,gBAAgB,CAC9B,WAAW,EAAE,QAAQ,CAAC,MAAM,CAAC,MAAM,EAAE,MAAM,GAAG,SAAS,CAAC,CAAC,GACxD,OAAO,CAIT;AAED;;;;;;;;GAQG;AACH,wBAAgB,oBAAoB,CAClC,WAAW,EAAE,QAAQ,CAAC,MAAM,CAAC,MAAM,EAAE,MAAM,GAAG,SAAS,CAAC,CAAC,EACzD,KAAK,EAAE,OAAO,EACd,QAAQ,EAAE,MAAM,GACf,OAAO,CAKT;AAED;;;;;;GAMG;AACH,wBAAgB,QAAQ,CAAC,IAAI,EAAE,QAAQ,EAAE,IAAI,EAAE,OAAO,GAAG,MAAM,CAG9D;AASD;;;;;;;;;;;;;;;;;;;;;;;GAuBG;AACH,wBAAgB,QAAQ,CACtB,OAAO,EAAE,MAAM,EACf,KAAK,EAAE,aAAa,EACpB,KAAK,EAAE,OAAO,EACd,QAAQ,SAAe,EACvB,IAAI,UAAgC,EACpC,YAAY,UAIX,GACA,MAAM,CAsBR;AAED,iDAAiD;AACjD,wBAAgB,WAAW,CACzB,QAAQ,EAAE,MAAM,EAChB,QAAQ,EAAE,eAAe,EACzB,KAAK,EAAE,OAAO,GACb,MAAM,CAER;AAED,wBAAgB,YAAY,CAC1B,QAAQ,EAAE,SAAS,eAAe,EAAE,EACpC,KAAK,EAAE,OAAO,GACb,SAAS,MAAM,EAAE,CAGnB;AAQD;;;;;;GAMG;AACH,wBAAgB,WAAW,CAAC,OAAO,EAAE,MAAM,GAAG,IAAI,EAAE,GAAG,EAAE,MAAM,GAAG,MAAM,CAevE;AAED;;;;;GAKG;AACH,wBAAgB,WAAW,CAAC,QAAQ,EAAE,QAAQ,GAAG,MAAM,CAOtD;AAiBD,eAAO,MAAM,YAAY,QAAmD,CAAC;AAyK7E,wBAAgB,WAAW,CACzB,SAAS,EAAE,SAAS,QAAQ,EAAE,EAC9B,GAAG,EAAE,MAAM,EACX,KAAK,EAAE,OAAO,GACb,MAAM,CAKR"}
|
package/dist/render.js
CHANGED
|
@@ -283,8 +283,7 @@ function provenanceChip(provenance) {
|
|
|
283
283
|
: state.replace(/_/gu, " ").toLowerCase();
|
|
284
284
|
return "[" + label + "]";
|
|
285
285
|
}
|
|
286
|
-
function buildRow(snapshot, now, color) {
|
|
287
|
-
const state = freshness(snapshot.observedAt, snapshot.expiresAt, now);
|
|
286
|
+
function buildRow(snapshot, state, now, color) {
|
|
288
287
|
return {
|
|
289
288
|
provider: truncateIdentity(providerIdentity(snapshot), MAX_PROVIDER_WIDTH),
|
|
290
289
|
meter: snapshot.meter,
|
|
@@ -320,30 +319,48 @@ function renderRows(rows) {
|
|
|
320
319
|
}
|
|
321
320
|
return lines.join("\n");
|
|
322
321
|
}
|
|
323
|
-
|
|
324
|
-
|
|
325
|
-
|
|
326
|
-
|
|
327
|
-
|
|
322
|
+
function providerRank(group) {
|
|
323
|
+
const known = group.filter((entry) => entry.state !== "unknown");
|
|
324
|
+
if (known.length === 0)
|
|
325
|
+
return { tier: 2, pressure: 0 };
|
|
326
|
+
const fresh = known.filter((entry) => entry.state === "fresh");
|
|
327
|
+
const ranked = fresh.length > 0 ? fresh : known;
|
|
328
|
+
return {
|
|
329
|
+
tier: fresh.length > 0 ? 0 : 1,
|
|
330
|
+
pressure: Math.max(...ranked.map((entry) => entry.snapshot.value))
|
|
331
|
+
};
|
|
332
|
+
}
|
|
333
|
+
function orderSnapshots(snapshots, now) {
|
|
328
334
|
const grouped = new Map();
|
|
329
335
|
for (const snapshot of snapshots) {
|
|
330
336
|
const group = grouped.get(snapshot.provider) ?? [];
|
|
331
|
-
group.push(
|
|
337
|
+
group.push({
|
|
338
|
+
snapshot,
|
|
339
|
+
state: freshness(snapshot.observedAt, snapshot.expiresAt, now)
|
|
340
|
+
});
|
|
332
341
|
grouped.set(snapshot.provider, group);
|
|
333
342
|
}
|
|
334
343
|
const ordered = [...grouped.entries()].sort((left, right) => {
|
|
335
|
-
const
|
|
336
|
-
const
|
|
337
|
-
if (
|
|
338
|
-
return
|
|
344
|
+
const leftRank = providerRank(left[1]);
|
|
345
|
+
const rightRank = providerRank(right[1]);
|
|
346
|
+
if (leftRank.tier !== rightRank.tier)
|
|
347
|
+
return leftRank.tier - rightRank.tier;
|
|
348
|
+
if (rightRank.pressure !== leftRank.pressure) {
|
|
349
|
+
return rightRank.pressure - leftRank.pressure;
|
|
350
|
+
}
|
|
339
351
|
return left[0].localeCompare(right[0]);
|
|
340
352
|
});
|
|
341
353
|
const result = [];
|
|
342
354
|
for (const [, group] of ordered) {
|
|
343
355
|
result.push(...[...group].sort((left, right) => {
|
|
344
|
-
|
|
345
|
-
|
|
346
|
-
|
|
356
|
+
const stateRank = { fresh: 0, stale: 1, unknown: 2 };
|
|
357
|
+
if (stateRank[left.state] !== stateRank[right.state]) {
|
|
358
|
+
return stateRank[left.state] - stateRank[right.state];
|
|
359
|
+
}
|
|
360
|
+
if (right.snapshot.value !== left.snapshot.value) {
|
|
361
|
+
return right.snapshot.value - left.snapshot.value;
|
|
362
|
+
}
|
|
363
|
+
return left.snapshot.meter.localeCompare(right.snapshot.meter);
|
|
347
364
|
}));
|
|
348
365
|
}
|
|
349
366
|
return result;
|
|
@@ -351,7 +368,7 @@ function orderSnapshots(snapshots) {
|
|
|
351
368
|
export function renderTable(snapshots, now, color) {
|
|
352
369
|
if (snapshots.length === 0)
|
|
353
370
|
return "No bounded quota data is available.";
|
|
354
|
-
const rows = orderSnapshots(snapshots).map((snapshot) => buildRow(snapshot, now, color));
|
|
371
|
+
const rows = orderSnapshots(snapshots, now).map(({ snapshot, state }) => buildRow(snapshot, state, now, color));
|
|
355
372
|
return renderRows(rows);
|
|
356
373
|
}
|
|
357
374
|
//# sourceMappingURL=render.js.map
|
package/dist/render.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"render.js","sourceRoot":"","sources":["../src/render.ts"],"names":[],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"render.js","sourceRoot":"","sources":["../src/render.ts"],"names":[],"mappings":"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"}
|
package/dist/serve.d.ts
CHANGED
|
@@ -60,7 +60,7 @@ export declare const TOKEN_PARAMETER = "t";
|
|
|
60
60
|
* in the tab's own memory and is sent as an Authorization header, so no URL
|
|
61
61
|
* anywhere on the phone carries the capability.
|
|
62
62
|
*
|
|
63
|
-
*
|
|
63
|
+
* A pairing link is a credential in a URL, so it gets the same treatment as one.
|
|
64
64
|
*/
|
|
65
65
|
export declare const TOKEN_FRAGMENT_PREFIX: string;
|
|
66
66
|
/**
|
package/dist/serve.js
CHANGED
|
@@ -65,7 +65,7 @@ export const TOKEN_PARAMETER = "t";
|
|
|
65
65
|
* in the tab's own memory and is sent as an Authorization header, so no URL
|
|
66
66
|
* anywhere on the phone carries the capability.
|
|
67
67
|
*
|
|
68
|
-
*
|
|
68
|
+
* A pairing link is a credential in a URL, so it gets the same treatment as one.
|
|
69
69
|
*/
|
|
70
70
|
export const TOKEN_FRAGMENT_PREFIX = "#" + TOKEN_PARAMETER + "=";
|
|
71
71
|
/** Key the page keeps the token under, inside its own tab and nowhere else. */
|
|
@@ -230,160 +230,160 @@ function sendHtml(request, response, status, html) {
|
|
|
230
230
|
* site, and the whole thing follows the reader's own light or dark setting.
|
|
231
231
|
*/
|
|
232
232
|
export function mobilePage() {
|
|
233
|
-
return `<!doctype html>
|
|
234
|
-
<html lang="en">
|
|
235
|
-
<head>
|
|
236
|
-
<meta charset="utf-8">
|
|
237
|
-
<meta name="viewport" content="width=device-width, initial-scale=1, viewport-fit=cover">
|
|
238
|
-
<meta name="robots" content="noindex, nofollow">
|
|
239
|
-
<meta name="color-scheme" content="light dark">
|
|
240
|
-
<title>OpenLimiter quota</title>
|
|
241
|
-
<style>
|
|
242
|
-
:root{color-scheme:light dark;--canvas:#fff;--surface:#f6f6f7;--track:#e2e2e6;--hairline:#e5e5e8;--heading:#0d0d0f;--body:#53535c;--muted:#62626c;--accent:#0866ff;--warn:#b45309;--stop:#b42318}
|
|
243
|
-
@media (prefers-color-scheme:dark){:root{--canvas:#0a0a0b;--surface:#121214;--track:#26262b;--hairline:#232327;--heading:#f2f2f3;--body:#adadb6;--muted:#94949e;--accent:#6ba6ff;--warn:#f0b429;--stop:#ff6b6b}}
|
|
244
|
-
*{box-sizing:border-box}
|
|
245
|
-
body{margin:0;padding:20px 16px 48px;background:var(--canvas);color:var(--body);font:15px/1.5 ui-sans-serif,system-ui,-apple-system,"Segoe UI",sans-serif;-webkit-font-smoothing:antialiased}
|
|
246
|
-
main{max-width:520px;margin:0 auto}
|
|
247
|
-
h1{margin:0 0 2px;font-size:19px;font-weight:600;letter-spacing:-.01em;color:var(--heading)}
|
|
248
|
-
.sub{margin:0 0 20px;font:12px/1.5 ui-monospace,SFMono-Regular,Menlo,monospace;color:var(--muted)}
|
|
249
|
-
.state{display:inline-flex;align-items:center;gap:7px;border:1px solid var(--hairline);border-radius:8px;padding:5px 10px;font:11px/1 ui-monospace,SFMono-Regular,Menlo,monospace;letter-spacing:.08em;text-transform:uppercase;color:var(--muted);background:var(--surface)}
|
|
250
|
-
.dot{width:7px;height:7px;border-radius:50%;background:var(--accent)}
|
|
251
|
-
.card{border:1px solid var(--hairline);border-radius:14px;background:var(--surface);padding:14px 16px;margin-top:10px}
|
|
252
|
-
.row{display:flex;align-items:baseline;justify-content:space-between;gap:12px}
|
|
253
|
-
.name{font-size:14px;font-weight:600;color:var(--heading);letter-spacing:.01em}
|
|
254
|
-
.pct{font:600 20px/1 ui-monospace,SFMono-Regular,Menlo,monospace;color:var(--heading);font-variant-numeric:tabular-nums}
|
|
255
|
-
.bar{margin-top:10px;height:6px;border-radius:999px;background:var(--track);overflow:hidden}
|
|
256
|
-
.fill{height:100%;border-radius:999px;background:var(--accent);transition:width .3s ease}
|
|
257
|
-
.fill.near{background:var(--warn)}
|
|
258
|
-
.fill.at{background:var(--stop)}
|
|
259
|
-
.meta{margin-top:8px;display:flex;gap:10px;flex-wrap:wrap;font:11px/1.4 ui-monospace,SFMono-Regular,Menlo,monospace;color:var(--muted)}
|
|
260
|
-
.note{margin-top:22px;font-size:12px;line-height:1.6;color:var(--muted)}
|
|
261
|
-
.err{color:var(--stop)}
|
|
262
|
-
</style>
|
|
263
|
-
</head>
|
|
264
|
-
<body>
|
|
265
|
-
<main>
|
|
266
|
-
<h1>OpenLimiter</h1>
|
|
267
|
-
<p class="sub" id="stamp">Loading quota from this machine.</p>
|
|
268
|
-
<p><span class="state"><span class="dot" id="dot"></span><span id="reason">reading</span></span></p>
|
|
269
|
-
<div id="cards"></div>
|
|
270
|
-
<p class="note" id="unknown"></p>
|
|
271
|
-
<p class="note">
|
|
272
|
-
Served from the machine running OpenLimiter, over your own network. Nothing here
|
|
273
|
-
left that machine, nothing was uploaded, and this page can only read.
|
|
274
|
-
</p>
|
|
275
|
-
</main>
|
|
276
|
-
<script>
|
|
277
|
-
(function(){
|
|
278
|
-
/* The token arrives in the fragment, which no server ever sees. Move it into
|
|
279
|
-
this tab's own memory and wipe the address, so the history entry the phone
|
|
280
|
-
keeps, and syncs, carries no capability.
|
|
281
|
-
|
|
282
|
-
The query is read as well, and first, because an address printed by an
|
|
283
|
-
older build put the token there. Such an address still reaches this page,
|
|
284
|
-
and a page that only looked at the fragment would sit at 401 forever with
|
|
285
|
-
the token visible in the address bar the whole time. Reading it, then
|
|
286
|
-
scrubbing BOTH the query and the fragment in one replaceState, turns the
|
|
287
|
-
old address into the new behaviour on its first load. */
|
|
288
|
-
var key = ${JSON.stringify(TOKEN_STORAGE_KEY)};
|
|
289
|
-
var name = ${JSON.stringify(TOKEN_PARAMETER)};
|
|
290
|
-
var prefix = ${JSON.stringify(TOKEN_FRAGMENT_PREFIX)};
|
|
291
|
-
var token = "";
|
|
292
|
-
var fromAddress = false;
|
|
293
|
-
try {
|
|
294
|
-
var queried = new URLSearchParams(location.search).get(name);
|
|
295
|
-
if (queried) {
|
|
296
|
-
token = queried;
|
|
297
|
-
fromAddress = true;
|
|
298
|
-
} else if (location.hash.indexOf(prefix) === 0) {
|
|
299
|
-
token = decodeURIComponent(location.hash.slice(prefix.length));
|
|
300
|
-
fromAddress = true;
|
|
301
|
-
}
|
|
302
|
-
} catch (error) {
|
|
303
|
-
token = "";
|
|
304
|
-
}
|
|
305
|
-
if (fromAddress) {
|
|
306
|
-
try { sessionStorage.setItem(key, token); } catch (error) {}
|
|
307
|
-
/* One rewrite, dropping the query and the fragment together. */
|
|
308
|
-
try { history.replaceState(null, "", location.pathname); } catch (error) {}
|
|
309
|
-
} else {
|
|
310
|
-
try { token = sessionStorage.getItem(key) || ""; } catch (error) { token = ""; }
|
|
311
|
-
}
|
|
312
|
-
var cards = document.getElementById("cards");
|
|
313
|
-
var stamp = document.getElementById("stamp");
|
|
314
|
-
var reason = document.getElementById("reason");
|
|
315
|
-
var dot = document.getElementById("dot");
|
|
316
|
-
var unknown = document.getElementById("unknown");
|
|
317
|
-
function tone(value){ return value >= 100 ? "at" : value >= 80 ? "near" : ""; }
|
|
318
|
-
function clock(value){
|
|
319
|
-
if (value === null) return "no reset";
|
|
320
|
-
var when = new Date(value);
|
|
321
|
-
return isNaN(when.getTime()) ? "no reset" : "resets " + when.toLocaleString();
|
|
322
|
-
}
|
|
323
|
-
function draw(document_){
|
|
324
|
-
reason.textContent = document_.reason.toLowerCase().replace("_"," ");
|
|
325
|
-
dot.style.background = document_.reason === "AT_CAP" ? "var(--stop)"
|
|
326
|
-
: document_.reason === "NEAR_CAP" ? "var(--warn)" : "var(--accent)";
|
|
327
|
-
stamp.textContent = "Updated " + new Date(document_.generatedAt).toLocaleTimeString();
|
|
328
|
-
stamp.className = "sub";
|
|
329
|
-
cards.textContent = "";
|
|
330
|
-
document_.providers.forEach(function(entry){
|
|
331
|
-
var card = document.createElement("div");
|
|
332
|
-
card.className = "card";
|
|
333
|
-
var row = document.createElement("div");
|
|
334
|
-
row.className = "row";
|
|
335
|
-
var name = document.createElement("span");
|
|
336
|
-
name.className = "name";
|
|
337
|
-
name.textContent = entry.provider;
|
|
338
|
-
var pct = document.createElement("span");
|
|
339
|
-
pct.className = "pct";
|
|
340
|
-
pct.textContent = entry.usagePercent.toFixed(1) + "%";
|
|
341
|
-
row.appendChild(name); row.appendChild(pct);
|
|
342
|
-
var bar = document.createElement("div");
|
|
343
|
-
bar.className = "bar";
|
|
344
|
-
var fill = document.createElement("div");
|
|
345
|
-
fill.className = "fill " + tone(entry.usagePercent);
|
|
346
|
-
fill.style.width = Math.min(100, Math.max(0, entry.usagePercent)) + "%";
|
|
347
|
-
bar.appendChild(fill);
|
|
348
|
-
var meta = document.createElement("div");
|
|
349
|
-
meta.className = "meta";
|
|
350
|
-
var state = document.createElement("span");
|
|
351
|
-
state.textContent = entry.state;
|
|
352
|
-
var reset = document.createElement("span");
|
|
353
|
-
reset.textContent = clock(entry.resetAt);
|
|
354
|
-
meta.appendChild(state); meta.appendChild(reset);
|
|
355
|
-
card.appendChild(row); card.appendChild(bar); card.appendChild(meta);
|
|
356
|
-
cards.appendChild(card);
|
|
357
|
-
});
|
|
358
|
-
unknown.textContent = document_.unknown.length === 0
|
|
359
|
-
? ""
|
|
360
|
-
: "Unknown, so nothing is claimed for them: " + document_.unknown.join(", ") + ".";
|
|
361
|
-
}
|
|
362
|
-
function load(){
|
|
363
|
-
/* The token goes in a header, never in a URL, so nothing that repeats every
|
|
364
|
-
fifteen seconds can write it into a log or a history entry. */
|
|
365
|
-
fetch("/quota.json", {
|
|
366
|
-
cache: "no-store",
|
|
367
|
-
headers: { "authorization": "Bearer " + token }
|
|
368
|
-
})
|
|
369
|
-
.then(function(response){
|
|
370
|
-
if (!response.ok) throw new Error(String(response.status));
|
|
371
|
-
return response.json();
|
|
372
|
-
})
|
|
373
|
-
.then(draw)
|
|
374
|
-
.catch(function(error){
|
|
375
|
-
stamp.className = "sub err";
|
|
376
|
-
stamp.textContent = error.message === "401"
|
|
377
|
-
? "The token in this address is not valid. Scan the code again."
|
|
378
|
-
: "Cannot reach the machine running OpenLimiter.";
|
|
379
|
-
});
|
|
380
|
-
}
|
|
381
|
-
load();
|
|
382
|
-
setInterval(load, 15000);
|
|
383
|
-
})();
|
|
384
|
-
</script>
|
|
385
|
-
</body>
|
|
386
|
-
</html>
|
|
233
|
+
return `<!doctype html>
|
|
234
|
+
<html lang="en">
|
|
235
|
+
<head>
|
|
236
|
+
<meta charset="utf-8">
|
|
237
|
+
<meta name="viewport" content="width=device-width, initial-scale=1, viewport-fit=cover">
|
|
238
|
+
<meta name="robots" content="noindex, nofollow">
|
|
239
|
+
<meta name="color-scheme" content="light dark">
|
|
240
|
+
<title>OpenLimiter quota</title>
|
|
241
|
+
<style>
|
|
242
|
+
:root{color-scheme:light dark;--canvas:#fff;--surface:#f6f6f7;--track:#e2e2e6;--hairline:#e5e5e8;--heading:#0d0d0f;--body:#53535c;--muted:#62626c;--accent:#0866ff;--warn:#b45309;--stop:#b42318}
|
|
243
|
+
@media (prefers-color-scheme:dark){:root{--canvas:#0a0a0b;--surface:#121214;--track:#26262b;--hairline:#232327;--heading:#f2f2f3;--body:#adadb6;--muted:#94949e;--accent:#6ba6ff;--warn:#f0b429;--stop:#ff6b6b}}
|
|
244
|
+
*{box-sizing:border-box}
|
|
245
|
+
body{margin:0;padding:20px 16px 48px;background:var(--canvas);color:var(--body);font:15px/1.5 ui-sans-serif,system-ui,-apple-system,"Segoe UI",sans-serif;-webkit-font-smoothing:antialiased}
|
|
246
|
+
main{max-width:520px;margin:0 auto}
|
|
247
|
+
h1{margin:0 0 2px;font-size:19px;font-weight:600;letter-spacing:-.01em;color:var(--heading)}
|
|
248
|
+
.sub{margin:0 0 20px;font:12px/1.5 ui-monospace,SFMono-Regular,Menlo,monospace;color:var(--muted)}
|
|
249
|
+
.state{display:inline-flex;align-items:center;gap:7px;border:1px solid var(--hairline);border-radius:8px;padding:5px 10px;font:11px/1 ui-monospace,SFMono-Regular,Menlo,monospace;letter-spacing:.08em;text-transform:uppercase;color:var(--muted);background:var(--surface)}
|
|
250
|
+
.dot{width:7px;height:7px;border-radius:50%;background:var(--accent)}
|
|
251
|
+
.card{border:1px solid var(--hairline);border-radius:14px;background:var(--surface);padding:14px 16px;margin-top:10px}
|
|
252
|
+
.row{display:flex;align-items:baseline;justify-content:space-between;gap:12px}
|
|
253
|
+
.name{font-size:14px;font-weight:600;color:var(--heading);letter-spacing:.01em}
|
|
254
|
+
.pct{font:600 20px/1 ui-monospace,SFMono-Regular,Menlo,monospace;color:var(--heading);font-variant-numeric:tabular-nums}
|
|
255
|
+
.bar{margin-top:10px;height:6px;border-radius:999px;background:var(--track);overflow:hidden}
|
|
256
|
+
.fill{height:100%;border-radius:999px;background:var(--accent);transition:width .3s ease}
|
|
257
|
+
.fill.near{background:var(--warn)}
|
|
258
|
+
.fill.at{background:var(--stop)}
|
|
259
|
+
.meta{margin-top:8px;display:flex;gap:10px;flex-wrap:wrap;font:11px/1.4 ui-monospace,SFMono-Regular,Menlo,monospace;color:var(--muted)}
|
|
260
|
+
.note{margin-top:22px;font-size:12px;line-height:1.6;color:var(--muted)}
|
|
261
|
+
.err{color:var(--stop)}
|
|
262
|
+
</style>
|
|
263
|
+
</head>
|
|
264
|
+
<body>
|
|
265
|
+
<main>
|
|
266
|
+
<h1>OpenLimiter</h1>
|
|
267
|
+
<p class="sub" id="stamp">Loading quota from this machine.</p>
|
|
268
|
+
<p><span class="state"><span class="dot" id="dot"></span><span id="reason">reading</span></span></p>
|
|
269
|
+
<div id="cards"></div>
|
|
270
|
+
<p class="note" id="unknown"></p>
|
|
271
|
+
<p class="note">
|
|
272
|
+
Served from the machine running OpenLimiter, over your own network. Nothing here
|
|
273
|
+
left that machine, nothing was uploaded, and this page can only read.
|
|
274
|
+
</p>
|
|
275
|
+
</main>
|
|
276
|
+
<script>
|
|
277
|
+
(function(){
|
|
278
|
+
/* The token arrives in the fragment, which no server ever sees. Move it into
|
|
279
|
+
this tab's own memory and wipe the address, so the history entry the phone
|
|
280
|
+
keeps, and syncs, carries no capability.
|
|
281
|
+
|
|
282
|
+
The query is read as well, and first, because an address printed by an
|
|
283
|
+
older build put the token there. Such an address still reaches this page,
|
|
284
|
+
and a page that only looked at the fragment would sit at 401 forever with
|
|
285
|
+
the token visible in the address bar the whole time. Reading it, then
|
|
286
|
+
scrubbing BOTH the query and the fragment in one replaceState, turns the
|
|
287
|
+
old address into the new behaviour on its first load. */
|
|
288
|
+
var key = ${JSON.stringify(TOKEN_STORAGE_KEY)};
|
|
289
|
+
var name = ${JSON.stringify(TOKEN_PARAMETER)};
|
|
290
|
+
var prefix = ${JSON.stringify(TOKEN_FRAGMENT_PREFIX)};
|
|
291
|
+
var token = "";
|
|
292
|
+
var fromAddress = false;
|
|
293
|
+
try {
|
|
294
|
+
var queried = new URLSearchParams(location.search).get(name);
|
|
295
|
+
if (queried) {
|
|
296
|
+
token = queried;
|
|
297
|
+
fromAddress = true;
|
|
298
|
+
} else if (location.hash.indexOf(prefix) === 0) {
|
|
299
|
+
token = decodeURIComponent(location.hash.slice(prefix.length));
|
|
300
|
+
fromAddress = true;
|
|
301
|
+
}
|
|
302
|
+
} catch (error) {
|
|
303
|
+
token = "";
|
|
304
|
+
}
|
|
305
|
+
if (fromAddress) {
|
|
306
|
+
try { sessionStorage.setItem(key, token); } catch (error) {}
|
|
307
|
+
/* One rewrite, dropping the query and the fragment together. */
|
|
308
|
+
try { history.replaceState(null, "", location.pathname); } catch (error) {}
|
|
309
|
+
} else {
|
|
310
|
+
try { token = sessionStorage.getItem(key) || ""; } catch (error) { token = ""; }
|
|
311
|
+
}
|
|
312
|
+
var cards = document.getElementById("cards");
|
|
313
|
+
var stamp = document.getElementById("stamp");
|
|
314
|
+
var reason = document.getElementById("reason");
|
|
315
|
+
var dot = document.getElementById("dot");
|
|
316
|
+
var unknown = document.getElementById("unknown");
|
|
317
|
+
function tone(value){ return value >= 100 ? "at" : value >= 80 ? "near" : ""; }
|
|
318
|
+
function clock(value){
|
|
319
|
+
if (value === null) return "no reset";
|
|
320
|
+
var when = new Date(value);
|
|
321
|
+
return isNaN(when.getTime()) ? "no reset" : "resets " + when.toLocaleString();
|
|
322
|
+
}
|
|
323
|
+
function draw(document_){
|
|
324
|
+
reason.textContent = document_.reason.toLowerCase().replace("_"," ");
|
|
325
|
+
dot.style.background = document_.reason === "AT_CAP" ? "var(--stop)"
|
|
326
|
+
: document_.reason === "NEAR_CAP" ? "var(--warn)" : "var(--accent)";
|
|
327
|
+
stamp.textContent = "Updated " + new Date(document_.generatedAt).toLocaleTimeString();
|
|
328
|
+
stamp.className = "sub";
|
|
329
|
+
cards.textContent = "";
|
|
330
|
+
document_.providers.forEach(function(entry){
|
|
331
|
+
var card = document.createElement("div");
|
|
332
|
+
card.className = "card";
|
|
333
|
+
var row = document.createElement("div");
|
|
334
|
+
row.className = "row";
|
|
335
|
+
var name = document.createElement("span");
|
|
336
|
+
name.className = "name";
|
|
337
|
+
name.textContent = entry.provider;
|
|
338
|
+
var pct = document.createElement("span");
|
|
339
|
+
pct.className = "pct";
|
|
340
|
+
pct.textContent = entry.usagePercent.toFixed(1) + "%";
|
|
341
|
+
row.appendChild(name); row.appendChild(pct);
|
|
342
|
+
var bar = document.createElement("div");
|
|
343
|
+
bar.className = "bar";
|
|
344
|
+
var fill = document.createElement("div");
|
|
345
|
+
fill.className = "fill " + tone(entry.usagePercent);
|
|
346
|
+
fill.style.width = Math.min(100, Math.max(0, entry.usagePercent)) + "%";
|
|
347
|
+
bar.appendChild(fill);
|
|
348
|
+
var meta = document.createElement("div");
|
|
349
|
+
meta.className = "meta";
|
|
350
|
+
var state = document.createElement("span");
|
|
351
|
+
state.textContent = entry.state;
|
|
352
|
+
var reset = document.createElement("span");
|
|
353
|
+
reset.textContent = clock(entry.resetAt);
|
|
354
|
+
meta.appendChild(state); meta.appendChild(reset);
|
|
355
|
+
card.appendChild(row); card.appendChild(bar); card.appendChild(meta);
|
|
356
|
+
cards.appendChild(card);
|
|
357
|
+
});
|
|
358
|
+
unknown.textContent = document_.unknown.length === 0
|
|
359
|
+
? ""
|
|
360
|
+
: "Unknown, so nothing is claimed for them: " + document_.unknown.join(", ") + ".";
|
|
361
|
+
}
|
|
362
|
+
function load(){
|
|
363
|
+
/* The token goes in a header, never in a URL, so nothing that repeats every
|
|
364
|
+
fifteen seconds can write it into a log or a history entry. */
|
|
365
|
+
fetch("/quota.json", {
|
|
366
|
+
cache: "no-store",
|
|
367
|
+
headers: { "authorization": "Bearer " + token }
|
|
368
|
+
})
|
|
369
|
+
.then(function(response){
|
|
370
|
+
if (!response.ok) throw new Error(String(response.status));
|
|
371
|
+
return response.json();
|
|
372
|
+
})
|
|
373
|
+
.then(draw)
|
|
374
|
+
.catch(function(error){
|
|
375
|
+
stamp.className = "sub err";
|
|
376
|
+
stamp.textContent = error.message === "401"
|
|
377
|
+
? "The token in this address is not valid. Scan the code again."
|
|
378
|
+
: "Cannot reach the machine running OpenLimiter.";
|
|
379
|
+
});
|
|
380
|
+
}
|
|
381
|
+
load();
|
|
382
|
+
setInterval(load, 15000);
|
|
383
|
+
})();
|
|
384
|
+
</script>
|
|
385
|
+
</body>
|
|
386
|
+
</html>
|
|
387
387
|
`;
|
|
388
388
|
}
|
|
389
389
|
/**
|