@omnitype-code/journal 2.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/dist/blame/legacy.d.ts +24 -0
- package/dist/blame/legacy.d.ts.map +1 -0
- package/dist/blame/legacy.js +219 -0
- package/dist/blame/legacy.js.map +1 -0
- package/dist/blame/merge.d.ts +17 -0
- package/dist/blame/merge.d.ts.map +1 -0
- package/dist/blame/merge.js +32 -0
- package/dist/blame/merge.js.map +1 -0
- package/dist/cli.d.ts +7 -0
- package/dist/cli.d.ts.map +1 -0
- package/dist/cli.js +638 -0
- package/dist/cli.js.map +1 -0
- package/dist/cloud/anchor.d.ts +78 -0
- package/dist/cloud/anchor.d.ts.map +1 -0
- package/dist/cloud/anchor.js +220 -0
- package/dist/cloud/anchor.js.map +1 -0
- package/dist/cloud/pending.d.ts +29 -0
- package/dist/cloud/pending.d.ts.map +1 -0
- package/dist/cloud/pending.js +115 -0
- package/dist/cloud/pending.js.map +1 -0
- package/dist/cloud/shipper.d.ts +67 -0
- package/dist/cloud/shipper.d.ts.map +1 -0
- package/dist/cloud/shipper.js +177 -0
- package/dist/cloud/shipper.js.map +1 -0
- package/dist/crypto/chain.d.ts +19 -0
- package/dist/crypto/chain.d.ts.map +1 -0
- package/dist/crypto/chain.js +123 -0
- package/dist/crypto/chain.js.map +1 -0
- package/dist/daemon/journal.d.ts +92 -0
- package/dist/daemon/journal.d.ts.map +1 -0
- package/dist/daemon/journal.js +370 -0
- package/dist/daemon/journal.js.map +1 -0
- package/dist/daemon/server.d.ts +89 -0
- package/dist/daemon/server.d.ts.map +1 -0
- package/dist/daemon/server.js +323 -0
- package/dist/daemon/server.js.map +1 -0
- package/dist/index.d.ts +8 -0
- package/dist/index.d.ts.map +1 -0
- package/dist/index.js +9 -0
- package/dist/index.js.map +1 -0
- package/dist/log/segment.d.ts +43 -0
- package/dist/log/segment.d.ts.map +1 -0
- package/dist/log/segment.js +180 -0
- package/dist/log/segment.js.map +1 -0
- package/dist/materializer/db.d.ts +47 -0
- package/dist/materializer/db.d.ts.map +1 -0
- package/dist/materializer/db.js +385 -0
- package/dist/materializer/db.js.map +1 -0
- package/dist/notes/git-notes.d.ts +50 -0
- package/dist/notes/git-notes.d.ts.map +1 -0
- package/dist/notes/git-notes.js +94 -0
- package/dist/notes/git-notes.js.map +1 -0
- package/dist/schema/events.d.ts +224 -0
- package/dist/schema/events.d.ts.map +1 -0
- package/dist/schema/events.js +10 -0
- package/dist/schema/events.js.map +1 -0
- package/dist/security/developer-identity.d.ts +35 -0
- package/dist/security/developer-identity.d.ts.map +1 -0
- package/dist/security/developer-identity.js +105 -0
- package/dist/security/developer-identity.js.map +1 -0
- package/dist/security/keychain.d.ts +20 -0
- package/dist/security/keychain.d.ts.map +1 -0
- package/dist/security/keychain.js +167 -0
- package/dist/security/keychain.js.map +1 -0
- package/dist/verify/chain-verify.d.ts +43 -0
- package/dist/verify/chain-verify.d.ts.map +1 -0
- package/dist/verify/chain-verify.js +119 -0
- package/dist/verify/chain-verify.js.map +1 -0
- package/package.json +47 -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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"}
|
|
@@ -0,0 +1,78 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Cloud anchor — periodic signed-tree-head publication. (§7.1, §7.2, §7.4)
|
|
3
|
+
*
|
|
4
|
+
* Every ANCHOR_INTERVAL_MS the daemon hashes the current chain head and posts it
|
|
5
|
+
* to the cloud receiver. The server tracks install_id → last-seen seq and alerts
|
|
6
|
+
* on unexplained seq regression (journal deletion/rotation without a wipe signal).
|
|
7
|
+
*
|
|
8
|
+
* Design rules:
|
|
9
|
+
* - Anchors are a separate wire object — they are NOT smuggled inside Heartbeat
|
|
10
|
+
* events, so a strict server validator can still validate event schema.
|
|
11
|
+
* - HMAC sig uses the install key.
|
|
12
|
+
* - Nonce is cryptographically random (16 bytes / 32 hex), matching Bytes16.
|
|
13
|
+
* - Anchors are queued through a dedicated AnchorQueue (not the event pending
|
|
14
|
+
* queue) so a backlog of anchors does not pollute the event stream.
|
|
15
|
+
* - Offline-first: anchors enqueue locally and the shipper posts them when online.
|
|
16
|
+
*/
|
|
17
|
+
export interface AnchorRecord {
|
|
18
|
+
type: 'chain-anchor';
|
|
19
|
+
v: 2;
|
|
20
|
+
install_id: string;
|
|
21
|
+
head_seq: number;
|
|
22
|
+
head_hash: string;
|
|
23
|
+
head_ts: number;
|
|
24
|
+
anchored_at: number;
|
|
25
|
+
nonce: string;
|
|
26
|
+
sig: string;
|
|
27
|
+
}
|
|
28
|
+
export declare function signAnchor(installKey: Buffer, partial: Omit<AnchorRecord, 'sig'>): AnchorRecord;
|
|
29
|
+
export declare function verifyAnchor(installKey: Buffer, anchor: AnchorRecord): boolean;
|
|
30
|
+
export declare class AnchorQueue {
|
|
31
|
+
private readonly path;
|
|
32
|
+
private pending;
|
|
33
|
+
constructor(journalRoot: string);
|
|
34
|
+
load(): void;
|
|
35
|
+
enqueue(anchor: AnchorRecord): void;
|
|
36
|
+
drain(maxBatch: number): AnchorRecord[];
|
|
37
|
+
confirm(uptoAnchoredAt: number): void;
|
|
38
|
+
get size(): number;
|
|
39
|
+
private rewrite;
|
|
40
|
+
}
|
|
41
|
+
export interface AnchorPublishConfig {
|
|
42
|
+
/** Base ingest URL, e.g. https://api.example.com/v2/journal/ingest. */
|
|
43
|
+
ingestUrl: string;
|
|
44
|
+
/** Bearer token from install.json / login. */
|
|
45
|
+
authToken: string;
|
|
46
|
+
/** Org id — anchoring is org-only; null disables publishing. */
|
|
47
|
+
orgId: string | null;
|
|
48
|
+
/** Project name (path segment in the anchor endpoint). */
|
|
49
|
+
projectName: string;
|
|
50
|
+
}
|
|
51
|
+
export declare class CloudAnchor {
|
|
52
|
+
private timer;
|
|
53
|
+
private readonly installKey;
|
|
54
|
+
private readonly installId;
|
|
55
|
+
private readonly queue;
|
|
56
|
+
private readonly getHead;
|
|
57
|
+
private readonly publishCfg;
|
|
58
|
+
private readonly anchorUrl;
|
|
59
|
+
private flushing;
|
|
60
|
+
constructor(installKey: Buffer, installId: string, queue: AnchorQueue, getHead: () => {
|
|
61
|
+
seq: number;
|
|
62
|
+
lastHash: string;
|
|
63
|
+
headTs: number;
|
|
64
|
+
}, publishCfg?: AnchorPublishConfig | null);
|
|
65
|
+
/** True when this anchor is configured to publish to the cloud (org install). */
|
|
66
|
+
get publishing(): boolean;
|
|
67
|
+
start(): void;
|
|
68
|
+
stop(): void;
|
|
69
|
+
/**
|
|
70
|
+
* Drain queued anchors to the backend. Offline-first: anything that fails to
|
|
71
|
+
* post stays in the queue and is retried on the next tick. Confirmed anchors
|
|
72
|
+
* are removed. No-op for personal installs (publishing == false).
|
|
73
|
+
*/
|
|
74
|
+
flushAnchors(): Promise<void>;
|
|
75
|
+
private postAnchor;
|
|
76
|
+
publishAnchor(): AnchorRecord | null;
|
|
77
|
+
}
|
|
78
|
+
//# sourceMappingURL=anchor.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"anchor.d.ts","sourceRoot":"","sources":["../../src/cloud/anchor.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;GAeG;AAMH,MAAM,WAAW,YAAY;IAC3B,IAAI,EAAE,cAAc,CAAC;IACrB,CAAC,EAAE,CAAC,CAAC;IACL,UAAU,EAAE,MAAM,CAAC;IACnB,QAAQ,EAAE,MAAM,CAAC;IACjB,SAAS,EAAE,MAAM,CAAC;IAClB,OAAO,EAAE,MAAM,CAAC;IAChB,WAAW,EAAE,MAAM,CAAC;IACpB,KAAK,EAAE,MAAM,CAAC;IACd,GAAG,EAAE,MAAM,CAAC;CACb;AAaD,wBAAgB,UAAU,CAAC,UAAU,EAAE,MAAM,EAAE,OAAO,EAAE,IAAI,CAAC,YAAY,EAAE,KAAK,CAAC,GAAG,YAAY,CAI/F;AAED,wBAAgB,YAAY,CAAC,UAAU,EAAE,MAAM,EAAE,MAAM,EAAE,YAAY,GAAG,OAAO,CAK9E;AAID,qBAAa,WAAW;IACtB,OAAO,CAAC,QAAQ,CAAC,IAAI,CAAS;IAC9B,OAAO,CAAC,OAAO,CAAsB;gBAEzB,WAAW,EAAE,MAAM;IAK/B,IAAI,IAAI,IAAI;IAeZ,OAAO,CAAC,MAAM,EAAE,YAAY,GAAG,IAAI;IASnC,KAAK,CAAC,QAAQ,EAAE,MAAM,GAAG,YAAY,EAAE;IAIvC,OAAO,CAAC,cAAc,EAAE,MAAM,GAAG,IAAI;IAKrC,IAAI,IAAI,IAAI,MAAM,CAEjB;IAED,OAAO,CAAC,OAAO;CAOhB;AAID,MAAM,WAAW,mBAAmB;IAClC,uEAAuE;IACvE,SAAS,EAAE,MAAM,CAAC;IAClB,8CAA8C;IAC9C,SAAS,EAAE,MAAM,CAAC;IAClB,gEAAgE;IAChE,KAAK,EAAE,MAAM,GAAG,IAAI,CAAC;IACrB,0DAA0D;IAC1D,WAAW,EAAE,MAAM,CAAC;CACrB;AAED,qBAAa,WAAW;IACtB,OAAO,CAAC,KAAK,CAA+C;IAC5D,OAAO,CAAC,QAAQ,CAAC,UAAU,CAAS;IACpC,OAAO,CAAC,QAAQ,CAAC,SAAS,CAAS;IACnC,OAAO,CAAC,QAAQ,CAAC,KAAK,CAAc;IACpC,OAAO,CAAC,QAAQ,CAAC,OAAO,CAA0D;IAClF,OAAO,CAAC,QAAQ,CAAC,UAAU,CAA6B;IACxD,OAAO,CAAC,QAAQ,CAAC,SAAS,CAAgB;IAC1C,OAAO,CAAC,QAAQ,CAAS;gBAGvB,UAAU,EAAE,MAAM,EAClB,SAAS,EAAE,MAAM,EACjB,KAAK,EAAE,WAAW,EAClB,OAAO,EAAE,MAAM;QAAE,GAAG,EAAE,MAAM,CAAC;QAAC,QAAQ,EAAE,MAAM,CAAC;QAAC,MAAM,EAAE,MAAM,CAAA;KAAE,EAChE,UAAU,GAAE,mBAAmB,GAAG,IAAW;IAc/C,iFAAiF;IACjF,IAAI,UAAU,IAAI,OAAO,CAExB;IAED,KAAK,IAAI,IAAI;IAYb,IAAI,IAAI,IAAI;IAOZ;;;;OAIG;IACG,YAAY,IAAI,OAAO,CAAC,IAAI,CAAC;YAmBrB,UAAU;IAgCxB,aAAa,IAAI,YAAY,GAAG,IAAI;CAmBrC"}
|
|
@@ -0,0 +1,220 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Cloud anchor — periodic signed-tree-head publication. (§7.1, §7.2, §7.4)
|
|
3
|
+
*
|
|
4
|
+
* Every ANCHOR_INTERVAL_MS the daemon hashes the current chain head and posts it
|
|
5
|
+
* to the cloud receiver. The server tracks install_id → last-seen seq and alerts
|
|
6
|
+
* on unexplained seq regression (journal deletion/rotation without a wipe signal).
|
|
7
|
+
*
|
|
8
|
+
* Design rules:
|
|
9
|
+
* - Anchors are a separate wire object — they are NOT smuggled inside Heartbeat
|
|
10
|
+
* events, so a strict server validator can still validate event schema.
|
|
11
|
+
* - HMAC sig uses the install key.
|
|
12
|
+
* - Nonce is cryptographically random (16 bytes / 32 hex), matching Bytes16.
|
|
13
|
+
* - Anchors are queued through a dedicated AnchorQueue (not the event pending
|
|
14
|
+
* queue) so a backlog of anchors does not pollute the event stream.
|
|
15
|
+
* - Offline-first: anchors enqueue locally and the shipper posts them when online.
|
|
16
|
+
*/
|
|
17
|
+
import { createHmac, randomBytes } from 'node:crypto';
|
|
18
|
+
import { mkdirSync, writeFileSync, readFileSync, existsSync, appendFileSync, renameSync } from 'node:fs';
|
|
19
|
+
import { join } from 'node:path';
|
|
20
|
+
const ANCHOR_INTERVAL_MS = 30_000;
|
|
21
|
+
const MAX_QUEUE = 2_000; // ~6 days of 30-s anchors
|
|
22
|
+
function canonicalize(obj) {
|
|
23
|
+
// RFC 8785 subset for flat anchor records: sort keys, JSON.stringify.
|
|
24
|
+
const sorted = Object.fromEntries(Object.entries(obj).sort(([a], [b]) => a.localeCompare(b)));
|
|
25
|
+
return Buffer.from(JSON.stringify(sorted), 'utf-8');
|
|
26
|
+
}
|
|
27
|
+
export function signAnchor(installKey, partial) {
|
|
28
|
+
const payload = canonicalize(partial);
|
|
29
|
+
const sig = createHmac('sha256', installKey).update(payload).digest('hex');
|
|
30
|
+
return { ...partial, sig };
|
|
31
|
+
}
|
|
32
|
+
export function verifyAnchor(installKey, anchor) {
|
|
33
|
+
const { sig, ...rest } = anchor;
|
|
34
|
+
const payload = canonicalize(rest);
|
|
35
|
+
const expected = createHmac('sha256', installKey).update(payload).digest('hex');
|
|
36
|
+
return expected === sig;
|
|
37
|
+
}
|
|
38
|
+
// ── Local anchor queue (separate from event pending queue) ──────────────────
|
|
39
|
+
export class AnchorQueue {
|
|
40
|
+
path;
|
|
41
|
+
pending = [];
|
|
42
|
+
constructor(journalRoot) {
|
|
43
|
+
this.path = join(journalRoot, 'cloud_anchors.ndjson');
|
|
44
|
+
mkdirSync(journalRoot, { recursive: true });
|
|
45
|
+
}
|
|
46
|
+
load() {
|
|
47
|
+
if (!existsSync(this.path))
|
|
48
|
+
return;
|
|
49
|
+
try {
|
|
50
|
+
const raw = readFileSync(this.path, 'utf-8');
|
|
51
|
+
for (const line of raw.split('\n')) {
|
|
52
|
+
if (!line.trim())
|
|
53
|
+
continue;
|
|
54
|
+
try {
|
|
55
|
+
this.pending.push(JSON.parse(line));
|
|
56
|
+
}
|
|
57
|
+
catch { /* skip */ }
|
|
58
|
+
}
|
|
59
|
+
if (this.pending.length > MAX_QUEUE) {
|
|
60
|
+
this.pending = this.pending.slice(-MAX_QUEUE);
|
|
61
|
+
this.rewrite();
|
|
62
|
+
}
|
|
63
|
+
}
|
|
64
|
+
catch { /* best effort */ }
|
|
65
|
+
}
|
|
66
|
+
enqueue(anchor) {
|
|
67
|
+
this.pending.push(anchor);
|
|
68
|
+
try {
|
|
69
|
+
appendFileSync(this.path, JSON.stringify(anchor) + '\n', 'utf-8');
|
|
70
|
+
}
|
|
71
|
+
catch { /* */ }
|
|
72
|
+
if (this.pending.length > MAX_QUEUE) {
|
|
73
|
+
this.pending = this.pending.slice(-MAX_QUEUE);
|
|
74
|
+
this.rewrite();
|
|
75
|
+
}
|
|
76
|
+
}
|
|
77
|
+
drain(maxBatch) {
|
|
78
|
+
return this.pending.slice(0, maxBatch);
|
|
79
|
+
}
|
|
80
|
+
confirm(uptoAnchoredAt) {
|
|
81
|
+
this.pending = this.pending.filter((a) => a.anchored_at > uptoAnchoredAt);
|
|
82
|
+
this.rewrite();
|
|
83
|
+
}
|
|
84
|
+
get size() {
|
|
85
|
+
return this.pending.length;
|
|
86
|
+
}
|
|
87
|
+
rewrite() {
|
|
88
|
+
try {
|
|
89
|
+
const tmp = this.path + '.tmp';
|
|
90
|
+
writeFileSync(tmp, this.pending.map((a) => JSON.stringify(a)).join('\n') + (this.pending.length ? '\n' : ''), 'utf-8');
|
|
91
|
+
renameSync(tmp, this.path);
|
|
92
|
+
}
|
|
93
|
+
catch { /* best effort */ }
|
|
94
|
+
}
|
|
95
|
+
}
|
|
96
|
+
export class CloudAnchor {
|
|
97
|
+
timer = null;
|
|
98
|
+
installKey;
|
|
99
|
+
installId;
|
|
100
|
+
queue;
|
|
101
|
+
getHead;
|
|
102
|
+
publishCfg;
|
|
103
|
+
anchorUrl;
|
|
104
|
+
flushing = false;
|
|
105
|
+
constructor(installKey, installId, queue, getHead, publishCfg = null) {
|
|
106
|
+
this.installKey = installKey;
|
|
107
|
+
this.installId = installId;
|
|
108
|
+
this.queue = queue;
|
|
109
|
+
this.getHead = getHead;
|
|
110
|
+
this.publishCfg = publishCfg;
|
|
111
|
+
// Anchor endpoint shares the ingest host: /v2/journal/ingest → /v2/journal/merge/{project}/_anchor
|
|
112
|
+
this.anchorUrl = publishCfg && publishCfg.orgId
|
|
113
|
+
? publishCfg.ingestUrl.replace(/\/v2\/journal\/ingest\/?$/, '/v2/journal/merge') +
|
|
114
|
+
`/${encodeURIComponent(publishCfg.projectName)}/_anchor`
|
|
115
|
+
: null;
|
|
116
|
+
}
|
|
117
|
+
/** True when this anchor is configured to publish to the cloud (org install). */
|
|
118
|
+
get publishing() {
|
|
119
|
+
return !!this.anchorUrl && !!this.publishCfg?.authToken;
|
|
120
|
+
}
|
|
121
|
+
start() {
|
|
122
|
+
if (this.timer)
|
|
123
|
+
return;
|
|
124
|
+
this.queue.load();
|
|
125
|
+
this.timer = setInterval(() => {
|
|
126
|
+
this.publishAnchor();
|
|
127
|
+
void this.flushAnchors();
|
|
128
|
+
}, ANCHOR_INTERVAL_MS);
|
|
129
|
+
this.timer.unref();
|
|
130
|
+
this.publishAnchor();
|
|
131
|
+
void this.flushAnchors();
|
|
132
|
+
}
|
|
133
|
+
stop() {
|
|
134
|
+
if (this.timer) {
|
|
135
|
+
clearInterval(this.timer);
|
|
136
|
+
this.timer = null;
|
|
137
|
+
}
|
|
138
|
+
}
|
|
139
|
+
/**
|
|
140
|
+
* Drain queued anchors to the backend. Offline-first: anything that fails to
|
|
141
|
+
* post stays in the queue and is retried on the next tick. Confirmed anchors
|
|
142
|
+
* are removed. No-op for personal installs (publishing == false).
|
|
143
|
+
*/
|
|
144
|
+
async flushAnchors() {
|
|
145
|
+
if (!this.publishing || this.flushing)
|
|
146
|
+
return;
|
|
147
|
+
this.flushing = true;
|
|
148
|
+
try {
|
|
149
|
+
const batch = this.queue.drain(50);
|
|
150
|
+
let lastConfirmed = -1;
|
|
151
|
+
for (const anchor of batch) {
|
|
152
|
+
const ok = await this.postAnchor(anchor);
|
|
153
|
+
if (!ok)
|
|
154
|
+
break; // stop on first failure — preserve order, retry next tick
|
|
155
|
+
lastConfirmed = anchor.anchored_at;
|
|
156
|
+
}
|
|
157
|
+
if (lastConfirmed >= 0)
|
|
158
|
+
this.queue.confirm(lastConfirmed);
|
|
159
|
+
}
|
|
160
|
+
catch {
|
|
161
|
+
/* best-effort — anchors remain queued for the next tick */
|
|
162
|
+
}
|
|
163
|
+
finally {
|
|
164
|
+
this.flushing = false;
|
|
165
|
+
}
|
|
166
|
+
}
|
|
167
|
+
async postAnchor(anchor) {
|
|
168
|
+
if (!this.anchorUrl || !this.publishCfg)
|
|
169
|
+
return false;
|
|
170
|
+
const controller = new AbortController();
|
|
171
|
+
const id = setTimeout(() => controller.abort(), 15_000);
|
|
172
|
+
try {
|
|
173
|
+
const resp = await fetch(this.anchorUrl, {
|
|
174
|
+
method: 'POST',
|
|
175
|
+
headers: {
|
|
176
|
+
'Content-Type': 'application/json',
|
|
177
|
+
'Authorization': `Bearer ${this.publishCfg.authToken}`,
|
|
178
|
+
'X-OmniType-Install': this.installId,
|
|
179
|
+
},
|
|
180
|
+
body: JSON.stringify({
|
|
181
|
+
install_id: anchor.install_id,
|
|
182
|
+
head_seq: anchor.head_seq,
|
|
183
|
+
head_hash: anchor.head_hash,
|
|
184
|
+
nonce: anchor.nonce,
|
|
185
|
+
sig: anchor.sig,
|
|
186
|
+
anchored_at: anchor.anchored_at,
|
|
187
|
+
}),
|
|
188
|
+
signal: controller.signal,
|
|
189
|
+
});
|
|
190
|
+
// 4xx (e.g. bound to another user) won't succeed on retry — drop by treating
|
|
191
|
+
// as confirmed so we don't wedge the queue. 5xx / network errors → retry.
|
|
192
|
+
return resp.ok || (resp.status >= 400 && resp.status < 500);
|
|
193
|
+
}
|
|
194
|
+
catch {
|
|
195
|
+
return false;
|
|
196
|
+
}
|
|
197
|
+
finally {
|
|
198
|
+
clearTimeout(id);
|
|
199
|
+
}
|
|
200
|
+
}
|
|
201
|
+
publishAnchor() {
|
|
202
|
+
const head = this.getHead();
|
|
203
|
+
if (head.seq < 0)
|
|
204
|
+
return null;
|
|
205
|
+
const partial = {
|
|
206
|
+
type: 'chain-anchor',
|
|
207
|
+
v: 2,
|
|
208
|
+
install_id: this.installId,
|
|
209
|
+
head_seq: head.seq,
|
|
210
|
+
head_hash: head.lastHash,
|
|
211
|
+
head_ts: head.headTs,
|
|
212
|
+
anchored_at: Date.now(),
|
|
213
|
+
nonce: randomBytes(16).toString('hex'),
|
|
214
|
+
};
|
|
215
|
+
const anchor = signAnchor(this.installKey, partial);
|
|
216
|
+
this.queue.enqueue(anchor);
|
|
217
|
+
return anchor;
|
|
218
|
+
}
|
|
219
|
+
}
|
|
220
|
+
//# sourceMappingURL=anchor.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"anchor.js","sourceRoot":"","sources":["../../src/cloud/anchor.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,29 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* PendingQueue — durable ring buffer for events not yet confirmed by the cloud.
|
|
3
|
+
*
|
|
4
|
+
* Writes events to `cloud_pending.ndjson` in the journal root.
|
|
5
|
+
* On daemon restart, un-confirmed events are re-queued automatically.
|
|
6
|
+
* The file is rotated when it exceeds MAX_BYTES to bound disk usage.
|
|
7
|
+
*/
|
|
8
|
+
import type { JournalEvent } from '../schema/events.js';
|
|
9
|
+
export declare class PendingQueue {
|
|
10
|
+
private readonly pendingPath;
|
|
11
|
+
private readonly confirmedPath;
|
|
12
|
+
private queue;
|
|
13
|
+
private confirmedUpTo;
|
|
14
|
+
constructor(journalRoot: string);
|
|
15
|
+
/** Load un-confirmed events from disk on daemon start. */
|
|
16
|
+
load(): void;
|
|
17
|
+
/** Enqueue a new event written to the journal. */
|
|
18
|
+
enqueue(event: JournalEvent): void;
|
|
19
|
+
/** Drain up to `maxBatch` events for upload. */
|
|
20
|
+
drain(maxBatch: number): JournalEvent[];
|
|
21
|
+
/** Mark events up to `upToSeq` as confirmed; compact the queue and update seq file. */
|
|
22
|
+
confirm(upToSeq: number): void;
|
|
23
|
+
get pendingCount(): number;
|
|
24
|
+
private loadConfirmed;
|
|
25
|
+
private saveConfirmed;
|
|
26
|
+
private rewritePending;
|
|
27
|
+
private rotate;
|
|
28
|
+
}
|
|
29
|
+
//# sourceMappingURL=pending.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"pending.d.ts","sourceRoot":"","sources":["../../src/cloud/pending.ts"],"names":[],"mappings":"AAAA;;;;;;GAMG;AAWH,OAAO,KAAK,EAAE,YAAY,EAAE,MAAM,qBAAqB,CAAC;AAKxD,qBAAa,YAAY;IACvB,OAAO,CAAC,QAAQ,CAAC,WAAW,CAAS;IACrC,OAAO,CAAC,QAAQ,CAAC,aAAa,CAAS;IACvC,OAAO,CAAC,KAAK,CAAsB;IACnC,OAAO,CAAC,aAAa,CAAM;gBAEf,WAAW,EAAE,MAAM;IAK/B,0DAA0D;IAC1D,IAAI,IAAI,IAAI;IAoBZ,kDAAkD;IAClD,OAAO,CAAC,KAAK,EAAE,YAAY,GAAG,IAAI;IAkBlC,gDAAgD;IAChD,KAAK,CAAC,QAAQ,EAAE,MAAM,GAAG,YAAY,EAAE;IAIvC,uFAAuF;IACvF,OAAO,CAAC,OAAO,EAAE,MAAM,GAAG,IAAI;IAO9B,IAAI,YAAY,IAAI,MAAM,CAEzB;IAED,OAAO,CAAC,aAAa;IASrB,OAAO,CAAC,aAAa;IAMrB,OAAO,CAAC,cAAc;IAYtB,OAAO,CAAC,MAAM;CAOf"}
|
|
@@ -0,0 +1,115 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* PendingQueue — durable ring buffer for events not yet confirmed by the cloud.
|
|
3
|
+
*
|
|
4
|
+
* Writes events to `cloud_pending.ndjson` in the journal root.
|
|
5
|
+
* On daemon restart, un-confirmed events are re-queued automatically.
|
|
6
|
+
* The file is rotated when it exceeds MAX_BYTES to bound disk usage.
|
|
7
|
+
*/
|
|
8
|
+
import { existsSync, readFileSync, writeFileSync, appendFileSync, renameSync, unlinkSync, } from 'node:fs';
|
|
9
|
+
import { join } from 'node:path';
|
|
10
|
+
const MAX_BYTES = 8 * 1024 * 1024; // 8 MiB — ~10 k events at avg 800 B each
|
|
11
|
+
const MAX_EVENTS = 10_000;
|
|
12
|
+
export class PendingQueue {
|
|
13
|
+
pendingPath;
|
|
14
|
+
confirmedPath;
|
|
15
|
+
queue = [];
|
|
16
|
+
confirmedUpTo = -1;
|
|
17
|
+
constructor(journalRoot) {
|
|
18
|
+
this.pendingPath = join(journalRoot, 'cloud_pending.ndjson');
|
|
19
|
+
this.confirmedPath = join(journalRoot, 'cloud_confirmed.seq');
|
|
20
|
+
}
|
|
21
|
+
/** Load un-confirmed events from disk on daemon start. */
|
|
22
|
+
load() {
|
|
23
|
+
this.confirmedUpTo = this.loadConfirmed();
|
|
24
|
+
if (!existsSync(this.pendingPath))
|
|
25
|
+
return;
|
|
26
|
+
const raw = readFileSync(this.pendingPath, 'utf-8');
|
|
27
|
+
const lines = raw.split('\n').filter(Boolean);
|
|
28
|
+
for (const line of lines) {
|
|
29
|
+
try {
|
|
30
|
+
const evt = JSON.parse(line);
|
|
31
|
+
if (evt.seq > this.confirmedUpTo) {
|
|
32
|
+
this.queue.push(evt);
|
|
33
|
+
}
|
|
34
|
+
}
|
|
35
|
+
catch { /* skip malformed */ }
|
|
36
|
+
}
|
|
37
|
+
// Bound queue size — drop oldest if over limit
|
|
38
|
+
if (this.queue.length > MAX_EVENTS) {
|
|
39
|
+
this.queue = this.queue.slice(-MAX_EVENTS);
|
|
40
|
+
}
|
|
41
|
+
}
|
|
42
|
+
/** Enqueue a new event written to the journal. */
|
|
43
|
+
enqueue(event) {
|
|
44
|
+
if (event.seq <= this.confirmedUpTo)
|
|
45
|
+
return;
|
|
46
|
+
this.queue.push(event);
|
|
47
|
+
// Append to persistent file
|
|
48
|
+
try {
|
|
49
|
+
appendFileSync(this.pendingPath, JSON.stringify(event) + '\n', 'utf-8');
|
|
50
|
+
}
|
|
51
|
+
catch { /* best-effort */ }
|
|
52
|
+
// Rotate if file too large
|
|
53
|
+
try {
|
|
54
|
+
const stat = existsSync(this.pendingPath)
|
|
55
|
+
? readFileSync(this.pendingPath).length
|
|
56
|
+
: 0;
|
|
57
|
+
if (stat > MAX_BYTES)
|
|
58
|
+
this.rotate();
|
|
59
|
+
}
|
|
60
|
+
catch { /* best-effort */ }
|
|
61
|
+
}
|
|
62
|
+
/** Drain up to `maxBatch` events for upload. */
|
|
63
|
+
drain(maxBatch) {
|
|
64
|
+
return this.queue.slice(0, maxBatch);
|
|
65
|
+
}
|
|
66
|
+
/** Mark events up to `upToSeq` as confirmed; compact the queue and update seq file. */
|
|
67
|
+
confirm(upToSeq) {
|
|
68
|
+
this.queue = this.queue.filter((e) => e.seq > upToSeq);
|
|
69
|
+
this.confirmedUpTo = upToSeq;
|
|
70
|
+
this.saveConfirmed(upToSeq);
|
|
71
|
+
this.rewritePending();
|
|
72
|
+
}
|
|
73
|
+
get pendingCount() {
|
|
74
|
+
return this.queue.length;
|
|
75
|
+
}
|
|
76
|
+
loadConfirmed() {
|
|
77
|
+
try {
|
|
78
|
+
if (existsSync(this.confirmedPath)) {
|
|
79
|
+
return parseInt(readFileSync(this.confirmedPath, 'utf-8').trim(), 10) || -1;
|
|
80
|
+
}
|
|
81
|
+
}
|
|
82
|
+
catch { /* */ }
|
|
83
|
+
return -1;
|
|
84
|
+
}
|
|
85
|
+
saveConfirmed(seq) {
|
|
86
|
+
try {
|
|
87
|
+
writeFileSync(this.confirmedPath, String(seq), 'utf-8');
|
|
88
|
+
}
|
|
89
|
+
catch { /* best-effort */ }
|
|
90
|
+
}
|
|
91
|
+
rewritePending() {
|
|
92
|
+
if (this.queue.length === 0) {
|
|
93
|
+
try {
|
|
94
|
+
unlinkSync(this.pendingPath);
|
|
95
|
+
}
|
|
96
|
+
catch { /* already gone */ }
|
|
97
|
+
return;
|
|
98
|
+
}
|
|
99
|
+
try {
|
|
100
|
+
const tmp = this.pendingPath + '.tmp';
|
|
101
|
+
writeFileSync(tmp, this.queue.map((e) => JSON.stringify(e)).join('\n') + '\n', 'utf-8');
|
|
102
|
+
renameSync(tmp, this.pendingPath);
|
|
103
|
+
}
|
|
104
|
+
catch { /* best-effort */ }
|
|
105
|
+
}
|
|
106
|
+
rotate() {
|
|
107
|
+
try {
|
|
108
|
+
const rotated = this.pendingPath + '.old';
|
|
109
|
+
renameSync(this.pendingPath, rotated);
|
|
110
|
+
// Keep only in-memory queue; old file is orphaned (will be GC'd later)
|
|
111
|
+
}
|
|
112
|
+
catch { /* */ }
|
|
113
|
+
}
|
|
114
|
+
}
|
|
115
|
+
//# sourceMappingURL=pending.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"pending.js","sourceRoot":"","sources":["../../src/cloud/pending.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,67 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* CloudShipper — uploads pending journal events to the OmniType backend.
|
|
3
|
+
*
|
|
4
|
+
* Lifecycle:
|
|
5
|
+
* shipper = new CloudShipper(journal, installInfo, journalRoot);
|
|
6
|
+
* shipper.start(); // begins background loop
|
|
7
|
+
* await shipper.flush(); // manual trigger (e.g. from CLI `push` command)
|
|
8
|
+
* shipper.stop(); // graceful shutdown
|
|
9
|
+
*
|
|
10
|
+
* Gate: only org installs upload. Personal installs (org_id == null) are local-only.
|
|
11
|
+
*
|
|
12
|
+
* Retry policy:
|
|
13
|
+
* - Failed upload: retry after RETRY_DELAYS[attempt] seconds
|
|
14
|
+
* - Confirmed events are removed from PendingQueue immediately
|
|
15
|
+
* - On daemon restart, PendingQueue.load() re-queues un-confirmed events
|
|
16
|
+
*/
|
|
17
|
+
import type { Journal } from '../daemon/journal.js';
|
|
18
|
+
import type { InstallInfo } from '../schema/events.js';
|
|
19
|
+
export interface ShipperConfig {
|
|
20
|
+
/** Override ingest URL (useful for self-hosted / staging). */
|
|
21
|
+
ingestUrl?: string;
|
|
22
|
+
/** Auth token — fetched from install.json or env. */
|
|
23
|
+
authToken?: string;
|
|
24
|
+
/** Org ID — if null, shipper is disabled (personal install). */
|
|
25
|
+
orgId?: string | null;
|
|
26
|
+
projectName?: string;
|
|
27
|
+
/**
|
|
28
|
+
* Explicit, LOCAL, per-user opt-in to ship raw prompt_text alongside hashes.
|
|
29
|
+
* The default is false. This is enforced client-side and overrides any
|
|
30
|
+
* server-side "org policy" claim: prompt text is stripped before upload
|
|
31
|
+
* unless the user has flipped this bit on this machine.
|
|
32
|
+
*/
|
|
33
|
+
allowPromptText?: boolean;
|
|
34
|
+
}
|
|
35
|
+
export declare class CloudShipper {
|
|
36
|
+
private readonly journal;
|
|
37
|
+
private readonly install;
|
|
38
|
+
private queue;
|
|
39
|
+
private timer;
|
|
40
|
+
private stopped;
|
|
41
|
+
private flushInProgress;
|
|
42
|
+
private readonly url;
|
|
43
|
+
private readonly authToken;
|
|
44
|
+
private readonly orgId;
|
|
45
|
+
private readonly projectName;
|
|
46
|
+
private readonly installId;
|
|
47
|
+
private readonly allowPromptText;
|
|
48
|
+
private unsubscribe?;
|
|
49
|
+
constructor(journal: Journal, install: InstallInfo, journalRoot: string, config?: ShipperConfig);
|
|
50
|
+
/**
|
|
51
|
+
* Strip fields that should never leave the developer's machine unless they
|
|
52
|
+
* have explicitly opted in. Currently scrubs PromptCapture.prompt_text.
|
|
53
|
+
* This is applied uniformly to every event before upload — there is no
|
|
54
|
+
* server-policy override path.
|
|
55
|
+
*/
|
|
56
|
+
private scrubForUpload;
|
|
57
|
+
start(): void;
|
|
58
|
+
stop(): void;
|
|
59
|
+
flush(): Promise<{
|
|
60
|
+
accepted: number;
|
|
61
|
+
skipped: number;
|
|
62
|
+
pending: number;
|
|
63
|
+
}>;
|
|
64
|
+
private uploadWithRetry;
|
|
65
|
+
private upload;
|
|
66
|
+
}
|
|
67
|
+
//# sourceMappingURL=shipper.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"shipper.d.ts","sourceRoot":"","sources":["../../src/cloud/shipper.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;GAeG;AAKH,OAAO,KAAK,EAAE,OAAO,EAAE,MAAM,sBAAsB,CAAC;AACpD,OAAO,KAAK,EAAE,WAAW,EAAgB,MAAM,qBAAqB,CAAC;AAUrE,MAAM,WAAW,aAAa;IAC5B,8DAA8D;IAC9D,SAAS,CAAC,EAAE,MAAM,CAAC;IACnB,qDAAqD;IACrD,SAAS,CAAC,EAAE,MAAM,CAAC;IACnB,gEAAgE;IAChE,KAAK,CAAC,EAAE,MAAM,GAAG,IAAI,CAAC;IACtB,WAAW,CAAC,EAAE,MAAM,CAAC;IACrB;;;;;OAKG;IACH,eAAe,CAAC,EAAE,OAAO,CAAC;CAC3B;AAED,qBAAa,YAAY;IAcrB,OAAO,CAAC,QAAQ,CAAC,OAAO;IACxB,OAAO,CAAC,QAAQ,CAAC,OAAO;IAd1B,OAAO,CAAC,KAAK,CAAe;IAC5B,OAAO,CAAC,KAAK,CAA+C;IAC5D,OAAO,CAAC,OAAO,CAAS;IACxB,OAAO,CAAC,eAAe,CAAS;IAChC,OAAO,CAAC,QAAQ,CAAC,GAAG,CAAS;IAC7B,OAAO,CAAC,QAAQ,CAAC,SAAS,CAAS;IACnC,OAAO,CAAC,QAAQ,CAAC,KAAK,CAAgB;IACtC,OAAO,CAAC,QAAQ,CAAC,WAAW,CAAS;IACrC,OAAO,CAAC,QAAQ,CAAC,SAAS,CAAS;IACnC,OAAO,CAAC,QAAQ,CAAC,eAAe,CAAU;IAC1C,OAAO,CAAC,WAAW,CAAC,CAAa;gBAGd,OAAO,EAAE,OAAO,EAChB,OAAO,EAAE,WAAW,EACrC,WAAW,EAAE,MAAM,EACnB,MAAM,GAAE,aAAkB;IAY5B;;;;;OAKG;IACH,OAAO,CAAC,cAAc;IAOtB,KAAK,IAAI,IAAI;IAyBb,IAAI,IAAI,IAAI;IASN,KAAK,IAAI,OAAO,CAAC;QAAE,QAAQ,EAAE,MAAM,CAAC;QAAC,OAAO,EAAE,MAAM,CAAC;QAAC,OAAO,EAAE,MAAM,CAAA;KAAE,CAAC;YAgBhE,eAAe;YA4Bf,MAAM;CA8BrB"}
|