@preventive/triage 1.0.0-alpha.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.
Files changed (49) hide show
  1. package/LICENSE +21 -0
  2. package/common/save-error-reason.ts +53 -0
  3. package/common/utf8.d.ts +13 -0
  4. package/common/utf8.js +57 -0
  5. package/out/brotli-fallback.js +3 -0
  6. package/out/client-sync.js +15 -0
  7. package/out/graph.js +4 -0
  8. package/out/icon-maskable.svg +5 -0
  9. package/out/icon.svg +5 -0
  10. package/out/index.html +78 -0
  11. package/out/manifest.webmanifest +30 -0
  12. package/out/prism.js +14 -0
  13. package/out/terminal.js +39 -0
  14. package/out/view.css +1 -0
  15. package/out/view.html +12 -0
  16. package/out/view.js +138 -0
  17. package/package.json +129 -0
  18. package/server/auth.ts +99 -0
  19. package/server/config.example.json +3 -0
  20. package/server/config.ts +196 -0
  21. package/server/db-neon.ts +374 -0
  22. package/server/db-revision-sql.ts +152 -0
  23. package/server/db-stmt.ts +53 -0
  24. package/server/db.ts +577 -0
  25. package/server/http.ts +142 -0
  26. package/server/hub.ts +98 -0
  27. package/server/index.ts +353 -0
  28. package/server/lifecycle.ts +177 -0
  29. package/server/neon-driver.ts +26 -0
  30. package/server/objstore/blob-fs.ts +164 -0
  31. package/server/objstore/blob-vercel.ts +508 -0
  32. package/server/objstore/blob.ts +169 -0
  33. package/server/objstore/fs.ts +67 -0
  34. package/server/objstore/handlers.ts +235 -0
  35. package/server/objstore/init.ts +118 -0
  36. package/server/objstore/reaper.ts +199 -0
  37. package/server/objstore/rest.ts +484 -0
  38. package/server/objstore/sign.ts +164 -0
  39. package/server/objstore/store-neon.ts +351 -0
  40. package/server/objstore/store.ts +799 -0
  41. package/server/objstore/tokens.ts +168 -0
  42. package/server/origin.ts +68 -0
  43. package/server/peer.ts +38 -0
  44. package/server/sign.ts +231 -0
  45. package/server/static.ts +374 -0
  46. package/server/sync-handlers.ts +311 -0
  47. package/server/util.ts +27 -0
  48. package/server/validation.ts +36 -0
  49. package/server/ws-server.ts +245 -0
package/LICENSE ADDED
@@ -0,0 +1,21 @@
1
+ MIT License
2
+
3
+ Copyright (c) 2026 Nikita Skovoroda
4
+
5
+ Permission is hereby granted, free of charge, to any person obtaining a copy
6
+ of this software and associated documentation files (the "Software"), to deal
7
+ in the Software without restriction, including without limitation the rights
8
+ to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
9
+ copies of the Software, and to permit persons to whom the Software is
10
+ furnished to do so, subject to the following conditions:
11
+
12
+ The above copyright notice and this permission notice shall be included in all
13
+ copies or substantial portions of the Software.
14
+
15
+ THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
16
+ IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
17
+ FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
18
+ AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
19
+ LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
20
+ OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
21
+ SOFTWARE.
@@ -0,0 +1,53 @@
1
+ // `workspace-save-error` reason taxonomy — shared by server (emits)
2
+ // and client (parses). Single source of truth so a server-side
3
+ // change to the closed set surfaces at the client's
4
+ // compile-error, not at runtime as a silent `'rejected'` coercion.
5
+ //
6
+ // Wire shape (server → client):
7
+ // { type: 'workspace-save-error',
8
+ // workspaceTag: string,
9
+ // base: string | null,
10
+ // reason: SaveErrorReason }
11
+ //
12
+ // Semantics:
13
+ // `too-large` — ciphertext exceeded MAX_CIPHERTEXT_LEN. Hard
14
+ // error; retry won't help. Client surfaces via
15
+ // `session.error` until `dismissError()`.
16
+ // `busy` — per-socket inflight cap dropped the save
17
+ // (transport backpressure). Recoverable; the
18
+ // client clears `pending` and re-arms
19
+ // `pendingSave` for the next natural trigger.
20
+ // `stale-base` — concurrent commit advanced the head past the
21
+ // client's claimed base. The server emits the
22
+ // typed frame AFTER a `workspace-state` catch-up
23
+ // on the same wire — in normal protocol order,
24
+ // the catch-up handler clears `pending` first
25
+ // and this frame's handler then early-returns
26
+ // on the missing pending. So `stale-base` is
27
+ // NOT in the recoverable set: in the happy path
28
+ // the recoverable branch is unreachable; in the
29
+ // pathological case where wire order flipped,
30
+ // we'd rather mark the session errored (visible
31
+ // via UI + recoverable via `dismissError()`)
32
+ // than silently swallow a state divergence.
33
+
34
+ export type SaveErrorReason = 'too-large' | 'busy' | 'stale-base'
35
+
36
+ // Reasons the client treats as recoverable backpressure / race
37
+ // signals rather than hard rejections. Typed so a future addition
38
+ // like `'rate-limited'` MUST decide which bucket it belongs in at
39
+ // compile time. See module docstring for why `'stale-base'` is
40
+ // deliberately absent.
41
+ export const RECOVERABLE_SAVE_ERROR_REASONS: ReadonlySet<SaveErrorReason> = new Set<SaveErrorReason>([
42
+ 'busy',
43
+ ])
44
+
45
+ // Every typed reason the server is currently allowed to emit.
46
+ // Tests pin this — a server-side addition that doesn't update the
47
+ // taxonomy here would fail the regression in
48
+ // `tests/save-error-reason-taxonomy.test.js`.
49
+ export const SAVE_ERROR_REASONS: ReadonlySet<SaveErrorReason> = new Set<SaveErrorReason>([
50
+ 'too-large',
51
+ 'busy',
52
+ 'stale-base',
53
+ ])
@@ -0,0 +1,13 @@
1
+ // Type declarations for `common/utf8.js`. Hand-written to keep
2
+ // `tsc --noEmit` (server-only type-lint) from needing `allowJs:
3
+ // true` to traverse the JS source — the helpers' contracts are
4
+ // small enough that the .d.ts is the cleanest way to expose them.
5
+
6
+ // `Uint8Array<ArrayBuffer>` (not the default `Uint8Array<ArrayBufferLike>`)
7
+ // because the helper feeds WebCrypto / signature paths that reject
8
+ // SharedArrayBuffer-backed views via `BufferSource =
9
+ // NonSharedArrayBufferView | ArrayBuffer`. Node's `TextEncoder`
10
+ // always allocates a regular `ArrayBuffer` at runtime, so the
11
+ // narrower declaration is safe.
12
+ export function encodeUtf8(str: string): Uint8Array<ArrayBuffer>
13
+ export function decodeUtf8(bytes: Uint8Array | ArrayBuffer | ArrayBufferView): string
package/common/utf8.js ADDED
@@ -0,0 +1,57 @@
1
+ // UTF-8 helpers. Centralised so callers don't reach for
2
+ // `new TextEncoder().encode(...)` / `new TextDecoder().decode(...)`
3
+ // directly — the WHATWG encoder silently replaces lone surrogates
4
+ // with U+FFFD, and the default decoder silently replaces invalid
5
+ // byte sequences the same way. Either is fine for best-effort
6
+ // display but a footgun anywhere the bytes feed into a hash, AEAD,
7
+ // signature, JSON parse, or storage round-trip (the input the
8
+ // signer / parser / hasher actually saw is no longer recoverable
9
+ // from the string we thought we'd produced). Both helpers fail
10
+ // fast with an explicit throw, so that class of bug surfaces at
11
+ // the call site rather than as a downstream verification mismatch
12
+ // or a silently-corrupted JSON parse.
13
+ //
14
+ // The TextEncoder / TextDecoder instances are reused — the spec
15
+ // guarantees both are stateless across `.encode()` / `.decode()`
16
+ // calls (with the default `stream: false`).
17
+
18
+ const encoder = new TextEncoder()
19
+ // `fatal: true` makes `decode()` throw a TypeError on invalid
20
+ // UTF-8 instead of substituting U+FFFD. Every call site here
21
+ // either feeds the result into JSON.parse (where U+FFFD would
22
+ // usually but not always provoke a parse error — `"�"` is
23
+ // valid JSON, so a corrupted string field would silently survive)
24
+ // or stores it; in both cases we want to know about the
25
+ // corruption immediately.
26
+ // `ignoreBOM: true` keeps a leading U+FEFF (EF BB BF in UTF-8)
27
+ // in the output as a regular character. The default
28
+ // `ignoreBOM: false` *strips* a leading BOM, which is invisible
29
+ // at the call site but breaks byte-exact round-trips: encoding
30
+ // the decoded string would not reproduce the original bytes,
31
+ // and any downstream hash / sig / storage compare would mismatch.
32
+ // We treat the BOM as data — callers that want it stripped can
33
+ // do so explicitly.
34
+ const decoder = new TextDecoder('utf-8', { fatal: true, ignoreBOM: true })
35
+
36
+ export function encodeUtf8(str) {
37
+ if (typeof str !== 'string') {
38
+ throw new TypeError(`encodeUtf8 expects a string, got ${typeof str}`)
39
+ }
40
+ if (!str.isWellFormed()) {
41
+ throw new TypeError('encodeUtf8: input contains lone surrogates')
42
+ }
43
+ return encoder.encode(str)
44
+ }
45
+
46
+ export function decodeUtf8(bytes) {
47
+ // Reject non-BufferSource so a missed destructure / optional field /
48
+ // misnamed property surfaces here instead of silently defaulting to
49
+ // `decoder.decode(undefined)` → `""`. The empty string then JSON-
50
+ // parses to `""` and hashes to the empty-string digest — exactly
51
+ // the "fail late" class of bug this module exists to prevent.
52
+ // Mirrors `encodeUtf8`'s explicit type-check.
53
+ if (!ArrayBuffer.isView(bytes) && !(bytes instanceof ArrayBuffer)) {
54
+ throw new TypeError(`decodeUtf8 expects a BufferSource, got ${bytes === null ? 'null' : typeof bytes}`)
55
+ }
56
+ return decoder.decode(bytes)
57
+ }
@@ -0,0 +1,3 @@
1
+ var Jr=Object.create;var ir=Object.defineProperty;var zr=Object.getOwnPropertyDescriptor;var cr=Object.getOwnPropertyNames;var Cr=Object.getPrototypeOf,br=Object.prototype.hasOwnProperty;var A=(e,r)=>()=>(r||e((r={exports:{}}).exports,r),r.exports);var gr=(e,r,a,t)=>{if(r&&typeof r=="object"||typeof r=="function")for(let n of cr(r))!br.call(e,n)&&n!==a&&ir(e,n,{get:()=>r[n],enumerable:!(t=zr(r,n))||t.enumerable});return e};var Sr=(e,r,a)=>(a=e!=null?Jr(Cr(e)):{},gr(r||!e||!e.__esModule?ir(a,"default",{value:e,enumerable:!0}):a,e));var y0=A(x0=>{function nr(e){this.buffer=e,this.pos=0}nr.prototype.read=function(e,r,a){this.pos+a>this.buffer.length&&(a=this.buffer.length-this.pos);for(var t=0;t<a;t++)e[r+t]=this.buffer[this.pos+t];return this.pos+=a,a};x0.BrotliInput=nr;function fr(e){this.buffer=e,this.pos=0}fr.prototype.write=function(e,r){if(this.pos+r>this.buffer.length)throw new Error("Output buffer is not large enough");return this.buffer.set(e.subarray(0,r),this.pos),this.pos+=r,r};x0.BrotliOutput=fr});var sr=A((Je,or)=>{var K=4096,jr=2*K+32,vr=2*K-1,Qr=new Uint32Array([0,1,3,7,15,31,63,127,255,511,1023,2047,4095,8191,16383,32767,65535,131071,262143,524287,1048575,2097151,4194303,8388607,16777215]);function X(e){this.buf_=new Uint8Array(jr),this.input_=e,this.reset()}X.READ_SIZE=K;X.IBUF_MASK=vr;X.prototype.reset=function(){this.buf_ptr_=0,this.val_=0,this.pos_=0,this.bit_pos_=0,this.bit_end_pos_=0,this.eos_=0,this.readMoreInput();for(var e=0;e<4;e++)this.val_|=this.buf_[this.pos_]<<8*e,++this.pos_;return this.bit_end_pos_>0};X.prototype.readMoreInput=function(){if(!(this.bit_end_pos_>256))if(this.eos_){if(this.bit_pos_>this.bit_end_pos_)throw new Error("Unexpected end of input "+this.bit_pos_+" "+this.bit_end_pos_)}else{var e=this.buf_ptr_,r=this.input_.read(this.buf_,e,K);if(r<0)throw new Error("Unexpected end of input");if(r<K){this.eos_=1;for(var a=0;a<32;a++)this.buf_[e+r+a]=0}if(e===0){for(var a=0;a<32;a++)this.buf_[(K<<1)+a]=this.buf_[a];this.buf_ptr_=K}else this.buf_ptr_=0;this.bit_end_pos_+=r<<3}};X.prototype.fillBitWindow=function(){for(;this.bit_pos_>=8;)this.val_>>>=8,this.val_|=this.buf_[this.pos_&vr]<<24,++this.pos_,this.bit_pos_=this.bit_pos_-8>>>0,this.bit_end_pos_=this.bit_end_pos_-8>>>0};X.prototype.readBits=function(e){32-this.bit_pos_<e&&this.fillBitWindow();var r=this.val_>>>this.bit_pos_&Qr[e];return this.bit_pos_+=e,r};or.exports=X});var hr=A(u0=>{"use strict";u0.byteLength=_r;u0.toByteArray=ee;u0.fromByteArray=ie;var l=[],Y=[],$r=typeof Uint8Array<"u"?Uint8Array:Array,A0="ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/";for(D=0,wr=A0.length;D<wr;++D)l[D]=A0[D],Y[A0.charCodeAt(D)]=D;var D,wr;Y[45]=62;Y[95]=63;function ur(e){var r=e.length;if(r%4>0)throw new Error("Invalid string. Length must be a multiple of 4");var a=e.indexOf("=");a===-1&&(a=r);var t=a===r?0:4-a%4;return[a,t]}function _r(e){var r=ur(e),a=r[0],t=r[1];return(a+t)*3/4-t}function re(e,r,a){return(r+a)*3/4-a}function ee(e){var r,a=ur(e),t=a[0],n=a[1],w=new $r(re(e,t,n)),o=0,f=n>0?t-4:t,u;for(u=0;u<f;u+=4)r=Y[e.charCodeAt(u)]<<18|Y[e.charCodeAt(u+1)]<<12|Y[e.charCodeAt(u+2)]<<6|Y[e.charCodeAt(u+3)],w[o++]=r>>16&255,w[o++]=r>>8&255,w[o++]=r&255;return n===2&&(r=Y[e.charCodeAt(u)]<<2|Y[e.charCodeAt(u+1)]>>4,w[o++]=r&255),n===1&&(r=Y[e.charCodeAt(u)]<<10|Y[e.charCodeAt(u+1)]<<4|Y[e.charCodeAt(u+2)]>>2,w[o++]=r>>8&255,w[o++]=r&255),w}function te(e){return l[e>>18&63]+l[e>>12&63]+l[e>>6&63]+l[e&63]}function ae(e,r,a){for(var t,n=[],w=r;w<a;w+=3)t=(e[w]<<16&16711680)+(e[w+1]<<8&65280)+(e[w+2]&255),n.push(te(t));return n.join("")}function ie(e){for(var r,a=e.length,t=a%3,n=[],w=16383,o=0,f=a-t;o<f;o+=w)n.push(ae(e,o,o+w>f?f:o+w));return t===1?(r=e[a-1],n.push(l[r>>2]+l[r<<4&63]+"==")):t===2&&(r=(e[a-2]<<8)+e[a-1],n.push(l[r>>10]+l[r>>4&63]+l[r<<2&63]+"=")),n.join("")}});var dr=A((ce,pr)=>{pr.exports="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"});var Br=A(Wr=>{var ne=hr();Wr.init=function(){var e=Y0().BrotliDecompressBuffer,r=ne.toByteArray(dr());return e(r)}});var L0=A(G=>{var fe=Br();G.init=function(){G.dictionary=fe.init()};G.offsetsByLength=new Uint32Array([0,0,0,0,0,4096,9216,21504,35840,44032,53248,63488,74752,87040,93696,100864,104704,106752,108928,113536,115968,118528,119872,121280,122016]);G.sizeBitsByLength=new Uint8Array([0,0,0,0,10,10,11,11,10,10,10,10,10,9,9,8,7,7,8,7,7,6,6,5,5]);G.minDictionaryWordLength=4;G.maxDictionaryWordLength=24});var l0=A(m0=>{function b(e,r){this.bits=e,this.value=r}m0.HuffmanCode=b;var C=15;function Or(e,r){for(var a=1<<r-1;e&a;)a>>=1;return(e&a-1)+a}function Ur(e,r,a,t,n){do t-=a,e[r+t]=new b(n.bits,n.value);while(t>0)}function ve(e,r,a){for(var t=1<<r-a;r<C&&(t-=e[r],!(t<=0));)++r,t<<=1;return r-a}m0.BrotliBuildHuffmanTable=function(e,r,a,t,n){var w=r,o,f,u,h,s,d,E,R,O,N,B,U=new Int32Array(C+1),H=new Int32Array(C+1);for(B=new Int32Array(n),u=0;u<n;u++)U[t[u]]++;for(H[1]=0,f=1;f<C;f++)H[f+1]=H[f]+U[f];for(u=0;u<n;u++)t[u]!==0&&(B[H[t[u]]++]=u);if(R=a,O=1<<R,N=O,H[C]===1){for(h=0;h<N;++h)e[r+h]=new b(0,B[0]&65535);return N}for(h=0,u=0,f=1,s=2;f<=a;++f,s<<=1)for(;U[f]>0;--U[f])o=new b(f&255,B[u++]&65535),Ur(e,r+h,s,O,o),h=Or(h,f);for(E=N-1,d=-1,f=a+1,s=2;f<=C;++f,s<<=1)for(;U[f]>0;--U[f])(h&E)!==d&&(r+=O,R=ve(U,f,a),O=1<<R,N+=O,d=h&E,e[w+d]=new b(R+a&255,r-w-d&65535)),o=new b(f-a&255,B[u++]&65535),Ur(e,r+(h>>a),s,O,o),h=Or(h,f);return N}});var Er=A(T0=>{T0.lookup=new Uint8Array([0,0,0,0,0,0,0,0,0,4,4,0,0,4,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,8,12,16,12,12,20,12,16,24,28,12,12,32,12,36,12,44,44,44,44,44,44,44,44,44,44,32,32,24,40,28,12,12,48,52,52,52,48,52,52,52,48,52,52,52,52,52,48,52,52,52,52,52,48,52,52,52,52,52,24,12,28,12,12,12,56,60,60,60,56,60,60,60,56,60,60,60,60,60,56,60,60,60,60,60,56,60,60,60,60,60,24,12,28,12,0,0,1,0,1,0,1,0,1,0,1,0,1,0,1,0,1,0,1,0,1,0,1,0,1,0,1,0,1,0,1,0,1,0,1,0,1,0,1,0,1,0,1,0,1,0,1,0,1,0,1,0,1,0,1,0,1,0,1,0,1,0,1,0,1,2,3,2,3,2,3,2,3,2,3,2,3,2,3,2,3,2,3,2,3,2,3,2,3,2,3,2,3,2,3,2,3,2,3,2,3,2,3,2,3,2,3,2,3,2,3,2,3,2,3,2,3,2,3,2,3,2,3,2,3,2,3,2,3,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,2,2,2,2,2,2,2,2,2,2,1,1,1,1,1,1,1,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,1,1,1,1,1,1,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,1,1,1,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,0,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,6,6,6,6,6,6,6,6,6,6,6,6,6,6,6,7,0,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,24,24,24,24,24,24,24,24,24,24,24,24,24,24,24,24,24,24,24,24,24,24,24,24,24,24,24,24,24,24,24,24,24,24,24,24,24,24,24,24,24,24,24,24,24,24,24,24,24,24,24,24,24,24,24,24,24,24,24,24,24,24,24,24,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,40,40,40,40,40,40,40,40,40,40,40,40,40,40,40,40,40,40,40,40,40,40,40,40,40,40,40,40,40,40,40,40,40,40,40,40,40,40,40,40,40,40,40,40,40,40,40,40,48,48,48,48,48,48,48,48,48,48,48,48,48,48,48,56,0,1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16,17,18,19,20,21,22,23,24,25,26,27,28,29,30,31,32,33,34,35,36,37,38,39,40,41,42,43,44,45,46,47,48,49,50,51,52,53,54,55,56,57,58,59,60,61,62,63,0,1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16,17,18,19,20,21,22,23,24,25,26,27,28,29,30,31,32,33,34,35,36,37,38,39,40,41,42,43,44,45,46,47,48,49,50,51,52,53,54,55,56,57,58,59,60,61,62,63,0,1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16,17,18,19,20,21,22,23,24,25,26,27,28,29,30,31,32,33,34,35,36,37,38,39,40,41,42,43,44,45,46,47,48,49,50,51,52,53,54,55,56,57,58,59,60,61,62,63,0,1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16,17,18,19,20,21,22,23,24,25,26,27,28,29,30,31,32,33,34,35,36,37,38,39,40,41,42,43,44,45,46,47,48,49,50,51,52,53,54,55,56,57,58,59,60,61,62,63,0,0,0,0,1,1,1,1,2,2,2,2,3,3,3,3,4,4,4,4,5,5,5,5,6,6,6,6,7,7,7,7,8,8,8,8,9,9,9,9,10,10,10,10,11,11,11,11,12,12,12,12,13,13,13,13,14,14,14,14,15,15,15,15,16,16,16,16,17,17,17,17,18,18,18,18,19,19,19,19,20,20,20,20,21,21,21,21,22,22,22,22,23,23,23,23,24,24,24,24,25,25,25,25,26,26,26,26,27,27,27,27,28,28,28,28,29,29,29,29,30,30,30,30,31,31,31,31,32,32,32,32,33,33,33,33,34,34,34,34,35,35,35,35,36,36,36,36,37,37,37,37,38,38,38,38,39,39,39,39,40,40,40,40,41,41,41,41,42,42,42,42,43,43,43,43,44,44,44,44,45,45,45,45,46,46,46,46,47,47,47,47,48,48,48,48,49,49,49,49,50,50,50,50,51,51,51,51,52,52,52,52,53,53,53,53,54,54,54,54,55,55,55,55,56,56,56,56,57,57,57,57,58,58,58,58,59,59,59,59,60,60,60,60,61,61,61,61,62,62,62,62,63,63,63,63,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0]);T0.lookupOffsets=new Uint16Array([1024,1536,1280,1536,0,256,768,512])});var Fr=A(g=>{function v(e,r){this.offset=e,this.nbits=r}g.kBlockLengthPrefixCode=[new v(1,2),new v(5,2),new v(9,2),new v(13,2),new v(17,3),new v(25,3),new v(33,3),new v(41,3),new v(49,4),new v(65,4),new v(81,4),new v(97,4),new v(113,5),new v(145,5),new v(177,5),new v(209,5),new v(241,6),new v(305,6),new v(369,7),new v(497,8),new v(753,9),new v(1265,10),new v(2289,11),new v(4337,12),new v(8433,13),new v(16625,24)];g.kInsertLengthPrefixCode=[new v(0,0),new v(1,0),new v(2,0),new v(3,0),new v(4,0),new v(5,0),new v(6,1),new v(8,1),new v(10,2),new v(14,2),new v(18,3),new v(26,3),new v(34,4),new v(50,4),new v(66,5),new v(98,5),new v(130,6),new v(194,7),new v(322,8),new v(578,9),new v(1090,10),new v(2114,12),new v(6210,14),new v(22594,24)];g.kCopyLengthPrefixCode=[new v(2,0),new v(3,0),new v(4,0),new v(5,0),new v(6,0),new v(7,0),new v(8,0),new v(9,0),new v(10,1),new v(12,1),new v(14,2),new v(18,2),new v(22,3),new v(30,3),new v(38,4),new v(54,4),new v(70,5),new v(102,5),new v(134,6),new v(198,7),new v(326,8),new v(582,9),new v(1094,10),new v(2118,24)];g.kInsertRangeLut=[0,0,8,8,0,16,8,16,16];g.kCopyRangeLut=[0,8,0,8,16,0,16,8,16]});var Rr=A(h0=>{var oe=L0(),p=0,Nr=1,se=2,we=3,ue=4,he=5,pe=6,de=7,We=8,qr=9,F=10,V=11,Z0=12,Be=13,Oe=14,Ue=15,Ee=16,Fe=17,Ne=18,Ve=20;function i(e,r,a){this.prefix=new Uint8Array(e.length),this.transform=r,this.suffix=new Uint8Array(a.length);for(var t=0;t<e.length;t++)this.prefix[t]=e.charCodeAt(t);for(var t=0;t<a.length;t++)this.suffix[t]=a.charCodeAt(t)}var i0=[new i("",p,""),new i("",p," "),new i(" ",p," "),new i("",Z0,""),new i("",F," "),new i("",p," the "),new i(" ",p,""),new i("s ",p," "),new i("",p," of "),new i("",F,""),new i("",p," and "),new i("",Be,""),new i("",Nr,""),new i(", ",p," "),new i("",p,", "),new i(" ",F," "),new i("",p," in "),new i("",p," to "),new i("e ",p," "),new i("",p,'"'),new i("",p,"."),new i("",p,'">'),new i("",p,`
2
+ `),new i("",we,""),new i("",p,"]"),new i("",p," for "),new i("",Oe,""),new i("",se,""),new i("",p," a "),new i("",p," that "),new i(" ",F,""),new i("",p,". "),new i(".",p,""),new i(" ",p,", "),new i("",Ue,""),new i("",p," with "),new i("",p,"'"),new i("",p," from "),new i("",p," by "),new i("",Ee,""),new i("",Fe,""),new i(" the ",p,""),new i("",ue,""),new i("",p,". The "),new i("",V,""),new i("",p," on "),new i("",p," as "),new i("",p," is "),new i("",de,""),new i("",Nr,"ing "),new i("",p,`
3
+ `),new i("",p,":"),new i(" ",p,". "),new i("",p,"ed "),new i("",Ve,""),new i("",Ne,""),new i("",pe,""),new i("",p,"("),new i("",F,", "),new i("",We,""),new i("",p," at "),new i("",p,"ly "),new i(" the ",p," of "),new i("",he,""),new i("",qr,""),new i(" ",F,", "),new i("",F,'"'),new i(".",p,"("),new i("",V," "),new i("",F,'">'),new i("",p,'="'),new i(" ",p,"."),new i(".com/",p,""),new i(" the ",p," of the "),new i("",F,"'"),new i("",p,". This "),new i("",p,","),new i(".",p," "),new i("",F,"("),new i("",F,"."),new i("",p," not "),new i(" ",p,'="'),new i("",p,"er "),new i(" ",V," "),new i("",p,"al "),new i(" ",V,""),new i("",p,"='"),new i("",V,'"'),new i("",F,". "),new i(" ",p,"("),new i("",p,"ful "),new i(" ",F,". "),new i("",p,"ive "),new i("",p,"less "),new i("",V,"'"),new i("",p,"est "),new i(" ",F,"."),new i("",V,'">'),new i(" ",p,"='"),new i("",F,","),new i("",p,"ize "),new i("",V,"."),new i("\xC2\xA0",p,""),new i(" ",p,","),new i("",F,'="'),new i("",V,'="'),new i("",p,"ous "),new i("",V,", "),new i("",F,"='"),new i(" ",F,","),new i(" ",V,'="'),new i(" ",V,", "),new i("",V,","),new i("",V,"("),new i("",V,". "),new i(" ",V,"."),new i("",V,"='"),new i(" ",V,". "),new i(" ",F,'="'),new i(" ",V,"='"),new i(" ",F,"='")];h0.kTransforms=i0;h0.kNumTransforms=i0.length;function Vr(e,r){return e[r]<192?(e[r]>=97&&e[r]<=122&&(e[r]^=32),1):e[r]<224?(e[r+1]^=32,2):(e[r+2]^=5,3)}h0.transformDictionaryWord=function(e,r,a,t,n){var w=i0[n].prefix,o=i0[n].suffix,f=i0[n].transform,u=f<Z0?0:f-(Z0-1),h=0,s=r,d;u>t&&(u=t);for(var E=0;E<w.length;)e[r++]=w[E++];for(a+=u,t-=u,f<=qr&&(t-=f),h=0;h<t;h++)e[r++]=oe.dictionary[a+h];if(d=r-t,f===F)Vr(e,d);else if(f===V)for(;t>0;){var R=Vr(e,d);d+=R,t-=R}for(var O=0;O<o.length;)e[r++]=o[O++];return r-s}});var Y0=A(W0=>{var Yr=y0().BrotliInput,qe=y0().BrotliOutput,Q=sr(),j=L0(),q=l0().HuffmanCode,Lr=l0().BrotliBuildHuffmanTable,S=Er(),P=Fr(),Hr=Rr(),Re=8,Mr=16,He=256,Me=704,xe=26,xr=6,yr=2,k0=8,ye=255,k=1080,K0=18,Ae=new Uint8Array([1,2,3,4,0,5,17,6,16,7,8,9,10,11,12,13,14,15]),X0=16,Ye=new Uint8Array([3,2,1,0,3,3,3,3,3,3,2,2,2,2,2,2]),Le=new Int8Array([0,0,0,0,-1,1,-2,2,-3,3,-1,1,-2,2,-3,3]),me=new Uint16Array([256,402,436,468,500,534,566,598,630,662,694,726,758,790,822,854,886,920,952,984,1016,1048,1080]);function mr(e){var r;return e.readBits(1)===0?16:(r=e.readBits(3),r>0?17+r:(r=e.readBits(3),r>0?8+r:17))}function lr(e){if(e.readBits(1)){var r=e.readBits(3);return r===0?1:e.readBits(r)+(1<<r)}return 0}function le(){this.meta_block_length=0,this.input_end=0,this.is_uncompressed=0,this.is_metadata=!1}function Tr(e){var r=new le,a,t,n;if(r.input_end=e.readBits(1),r.input_end&&e.readBits(1))return r;if(a=e.readBits(2)+4,a===7){if(r.is_metadata=!0,e.readBits(1)!==0)throw new Error("Invalid reserved bit");if(t=e.readBits(2),t===0)return r;for(n=0;n<t;n++){var w=e.readBits(8);if(n+1===t&&t>1&&w===0)throw new Error("Invalid size byte");r.meta_block_length|=w<<n*8}}else for(n=0;n<a;++n){var o=e.readBits(4);if(n+1===a&&a>4&&o===0)throw new Error("Invalid size nibble");r.meta_block_length|=o<<n*4}return++r.meta_block_length,!r.input_end&&!r.is_metadata&&(r.is_uncompressed=e.readBits(1)),r}function $(e,r,a){var t=r,n;return a.fillBitWindow(),r+=a.val_>>>a.bit_pos_&ye,n=e[r].bits-k0,n>0&&(a.bit_pos_+=k0,r+=e[r].value,r+=a.val_>>>a.bit_pos_&(1<<n)-1),a.bit_pos_+=e[r].bits,e[r].value}function Te(e,r,a,t){for(var n=0,w=Re,o=0,f=0,u=32768,h=[],s=0;s<32;s++)h.push(new q(0,0));for(Lr(h,0,5,e,K0);n<r&&u>0;){var d=0,E;if(t.readMoreInput(),t.fillBitWindow(),d+=t.val_>>>t.bit_pos_&31,t.bit_pos_+=h[d].bits,E=h[d].value&255,E<Mr)o=0,a[n++]=E,E!==0&&(w=E,u-=32768>>E);else{var R=E-14,O,N,B=0;if(E===Mr&&(B=w),f!==B&&(o=0,f=B),O=o,o>0&&(o-=2,o<<=R),o+=t.readBits(R)+3,N=o-O,n+N>r)throw new Error("[ReadHuffmanCodeLengths] symbol + repeat_delta > num_symbols");for(var U=0;U<N;U++)a[n+U]=f;n+=N,f!==0&&(u-=N<<15-f)}}if(u!==0)throw new Error("[ReadHuffmanCodeLengths] space = "+u);for(;n<r;n++)a[n]=0}function d0(e,r,a,t){var n=0,w,o=new Uint8Array(e);if(t.readMoreInput(),w=t.readBits(2),w===1){for(var f,u=e-1,h=0,s=new Int32Array(4),d=t.readBits(2)+1;u;)u>>=1,++h;for(f=0;f<d;++f)s[f]=t.readBits(h)%e,o[s[f]]=2;switch(o[s[0]]=1,d){case 1:break;case 3:if(s[0]===s[1]||s[0]===s[2]||s[1]===s[2])throw new Error("[ReadHuffmanCode] invalid symbols");break;case 2:if(s[0]===s[1])throw new Error("[ReadHuffmanCode] invalid symbols");o[s[1]]=1;break;case 4:if(s[0]===s[1]||s[0]===s[2]||s[0]===s[3]||s[1]===s[2]||s[1]===s[3]||s[2]===s[3])throw new Error("[ReadHuffmanCode] invalid symbols");t.readBits(1)?(o[s[2]]=3,o[s[3]]=3):o[s[0]]=2;break}}else{var f,E=new Uint8Array(K0),R=32,O=0,N=[new q(2,0),new q(2,4),new q(2,3),new q(3,2),new q(2,0),new q(2,4),new q(2,3),new q(4,1),new q(2,0),new q(2,4),new q(2,3),new q(3,2),new q(2,0),new q(2,4),new q(2,3),new q(4,5)];for(f=w;f<K0&&R>0;++f){var B=Ae[f],U=0,H;t.fillBitWindow(),U+=t.val_>>>t.bit_pos_&15,t.bit_pos_+=N[U].bits,H=N[U].value,E[B]=H,H!==0&&(R-=32>>H,++O)}if(!(O===1||R===0))throw new Error("[ReadHuffmanCode] invalid num_codes or space");Te(E,e,o,t)}if(n=Lr(r,a,k0,o,e),n===0)throw new Error("[ReadHuffmanCode] BuildHuffmanTable failed: ");return n}function p0(e,r,a){var t,n;return t=$(e,r,a),n=P.kBlockLengthPrefixCode[t].nbits,P.kBlockLengthPrefixCode[t].offset+a.readBits(n)}function Ze(e,r,a){var t;return e<X0?(a+=Ye[e],a&=3,t=r[a]+Le[e]):t=e-X0+1,t}function Pe(e,r){for(var a=e[r],t=r;t;--t)e[t]=e[t-1];e[0]=a}function ke(e,r){var a=new Uint8Array(256),t;for(t=0;t<256;++t)a[t]=t;for(t=0;t<r;++t){var n=e[t];e[t]=a[n],n&&Pe(a,n)}}function I(e,r){this.alphabet_size=e,this.num_htrees=r,this.codes=new Array(r+r*me[e+31>>>5]),this.htrees=new Uint32Array(r)}I.prototype.decode=function(e){var r,a,t=0;for(r=0;r<this.num_htrees;++r)this.htrees[r]=t,a=d0(this.alphabet_size,this.codes,t,e),t+=a};function Ar(e,r){var a={num_htrees:null,context_map:null},t,n=0,w,o;r.readMoreInput();var f=a.num_htrees=lr(r)+1,u=a.context_map=new Uint8Array(e);if(f<=1)return a;for(t=r.readBits(1),t&&(n=r.readBits(4)+1),w=[],o=0;o<k;o++)w[o]=new q(0,0);for(d0(f+n,w,0,r),o=0;o<e;){var h;if(r.readMoreInput(),h=$(w,0,r),h===0)u[o]=0,++o;else if(h<=n)for(var s=1+(1<<h)+r.readBits(h);--s;){if(o>=e)throw new Error("[DecodeContextMap] i >= context_map_size");u[o]=0,++o}else u[o]=h-n,++o}return r.readBits(1)&&ke(u,e),a}function P0(e,r,a,t,n,w,o){var f=a*2,u=a,h=$(r,a*k,o),s;h===0?s=n[f+(w[u]&1)]:h===1?s=n[f+(w[u]-1&1)]+1:s=h-2,s>=e&&(s-=e),t[a]=s,n[f+(w[u]&1)]=s,++w[u]}function Ke(e,r,a,t,n,w){var o=n+1,f=a&n,u=w.pos_&Q.IBUF_MASK,h;if(r<8||w.bit_pos_+(r<<3)<w.bit_end_pos_){for(;r-- >0;)w.readMoreInput(),t[f++]=w.readBits(8),f===o&&(e.write(t,o),f=0);return}if(w.bit_end_pos_<32)throw new Error("[CopyUncompressedBlockToOutput] br.bit_end_pos_ < 32");for(;w.bit_pos_<32;)t[f]=w.val_>>>w.bit_pos_,w.bit_pos_+=8,++f,--r;if(h=w.bit_end_pos_-w.bit_pos_>>3,u+h>Q.IBUF_MASK){for(var s=Q.IBUF_MASK+1-u,d=0;d<s;d++)t[f+d]=w.buf_[u+d];h-=s,f+=s,r-=s,u=0}for(var d=0;d<h;d++)t[f+d]=w.buf_[u+d];if(f+=h,r-=h,f>=o){e.write(t,o),f-=o;for(var d=0;d<f;d++)t[d]=t[o+d]}for(;f+r>=o;){if(h=o-f,w.input_.read(t,f,h)<h)throw new Error("[CopyUncompressedBlockToOutput] not enough bytes");e.write(t,o),r-=h,f=0}if(w.input_.read(t,f,r)<r)throw new Error("[CopyUncompressedBlockToOutput] not enough bytes");w.reset()}function Xe(e){var r=e.bit_pos_+7&-8,a=e.readBits(r-e.bit_pos_);return a==0}function Zr(e){var r=new Yr(e),a=new Q(r);mr(a);var t=Tr(a);return t.meta_block_length}W0.BrotliDecompressedSize=Zr;function De(e,r){var a=new Yr(e);r==null&&(r=Zr(e));var t=new Uint8Array(r),n=new qe(t);return Pr(a,n),n.pos<n.buffer.length&&(n.buffer=n.buffer.subarray(0,n.pos)),n.buffer}W0.BrotliDecompressBuffer=De;function Pr(e,r){var a,t=0,n=0,w=0,o,f=0,u,h,s,d,E=[16,15,11,4],R=0,O=0,N=0,B=[new I(0,0),new I(0,0),new I(0,0)],U,H,W,Dr=128+Q.READ_SIZE;W=new Q(e),w=mr(W),o=(1<<w)-16,u=1<<w,h=u-1,s=new Uint8Array(u+Dr+j.maxDictionaryWordLength),d=u,U=[],H=[];for(var n0=0;n0<3*k;n0++)U[n0]=new q(0,0),H[n0]=new q(0,0);for(;!n;){var M=0,D0,m=[1<<28,1<<28,1<<28],Z=[0],L=[1,1,1],B0=[0,1,0,1,0,1],f0=[0],J,_,G0,I0,J0=null,v0=null,z0,c0=null,C0,b0=0,O0=null,g0=0,S0=0,U0=null,j0=0,E0=0,F0=0,z,N0;for(a=0;a<3;++a)B[a].codes=null,B[a].htrees=null;W.readMoreInput();var o0=Tr(W);if(M=o0.meta_block_length,t+M>r.buffer.length){var Q0=new Uint8Array(t+M);Q0.set(r.buffer),r.buffer=Q0}if(n=o0.input_end,D0=o0.is_uncompressed,o0.is_metadata){for(Xe(W);M>0;--M)W.readMoreInput(),W.readBits(8);continue}if(M!==0){if(D0){W.bit_pos_=W.bit_pos_+7&-8,Ke(r,M,t,s,h,W),t+=M;continue}for(a=0;a<3;++a)L[a]=lr(W)+1,L[a]>=2&&(d0(L[a]+2,U,a*k,W),d0(xe,H,a*k,W),m[a]=p0(H,a*k,W),f0[a]=1);for(W.readMoreInput(),J=W.readBits(2),_=X0+(W.readBits(4)<<J),G0=(1<<J)-1,I0=_+(48<<J),v0=new Uint8Array(L[0]),a=0;a<L[0];++a)W.readMoreInput(),v0[a]=W.readBits(2)<<1;var $0=Ar(L[0]<<xr,W);z0=$0.num_htrees,J0=$0.context_map;var _0=Ar(L[2]<<yr,W);for(C0=_0.num_htrees,c0=_0.context_map,B[0]=new I(He,z0),B[1]=new I(Me,L[1]),B[2]=new I(I0,C0),a=0;a<3;++a)B[a].decode(W);for(O0=0,U0=0,z=v0[Z[0]],E0=S.lookupOffsets[z],F0=S.lookupOffsets[z+1],N0=B[1].htrees[0];M>0;){var s0,r0,V0,q0,R0,x,y,T,e0,c,t0;for(W.readMoreInput(),m[1]===0&&(P0(L[1],U,1,Z,B0,f0,W),m[1]=p0(H,k,W),N0=B[1].htrees[Z[1]]),--m[1],s0=$(B[1].codes,N0,W),r0=s0>>6,r0>=2?(r0-=2,y=-1):y=0,V0=P.kInsertRangeLut[r0]+(s0>>3&7),q0=P.kCopyRangeLut[r0]+(s0&7),R0=P.kInsertLengthPrefixCode[V0].offset+W.readBits(P.kInsertLengthPrefixCode[V0].nbits),x=P.kCopyLengthPrefixCode[q0].offset+W.readBits(P.kCopyLengthPrefixCode[q0].nbits),O=s[t-1&h],N=s[t-2&h],c=0;c<R0;++c)W.readMoreInput(),m[0]===0&&(P0(L[0],U,0,Z,B0,f0,W),m[0]=p0(H,0,W),b0=Z[0]<<xr,O0=b0,z=v0[Z[0]],E0=S.lookupOffsets[z],F0=S.lookupOffsets[z+1]),e0=S.lookup[E0+O]|S.lookup[F0+N],g0=J0[O0+e0],--m[0],N=O,O=$(B[0].codes,B[0].htrees[g0],W),s[t&h]=O,(t&h)===h&&r.write(s,u),++t;if(M-=R0,M<=0)break;if(y<0){var e0;if(W.readMoreInput(),m[2]===0&&(P0(L[2],U,2,Z,B0,f0,W),m[2]=p0(H,2*k,W),S0=Z[2]<<yr,U0=S0),--m[2],e0=(x>4?3:x-2)&255,j0=c0[U0+e0],y=$(B[2].codes,B[2].htrees[j0],W),y>=_){var H0,rr,a0;y-=_,rr=y&G0,y>>=J,H0=(y>>1)+1,a0=(2+(y&1)<<H0)-4,y=_+(a0+W.readBits(H0)<<J)+rr}}if(T=Ze(y,E,R),T<0)throw new Error("[BrotliDecompress] invalid distance");if(t<o&&f!==o?f=t:f=o,t0=t&h,T>f)if(x>=j.minDictionaryWordLength&&x<=j.maxDictionaryWordLength){var a0=j.offsetsByLength[x],er=T-f-1,tr=j.sizeBitsByLength[x],Gr=(1<<tr)-1,Ir=er&Gr,ar=er>>tr;if(a0+=Ir*x,ar<Hr.kNumTransforms){var M0=Hr.transformDictionaryWord(s,t0,a0,x,ar);if(t0+=M0,t+=M0,M-=M0,t0>=d){r.write(s,u);for(var w0=0;w0<t0-d;w0++)s[w0]=s[d+w0]}}else throw new Error("Invalid backward reference. pos: "+t+" distance: "+T+" len: "+x+" bytes left: "+M)}else throw new Error("Invalid backward reference. pos: "+t+" distance: "+T+" len: "+x+" bytes left: "+M);else{if(y>0&&(E[R&3]=T,++R),x>M)throw new Error("Invalid backward reference. pos: "+t+" distance: "+T+" len: "+x+" bytes left: "+M);for(c=0;c<x;++c)s[t&h]=s[t-T&h],(t&h)===h&&r.write(s,u),++t,--M}O=s[t-1&h],N=s[t-2&h]}t&=1073741823}}r.write(s,t&h)}W0.BrotliDecompress=Pr;j.init()});var Kr=A((_e,kr)=>{kr.exports=Y0().BrotliDecompressBuffer});var Xr=Sr(Kr(),1);function r2(e){return(0,Xr.default)(e)}export{r2 as brotliDecompress};
@@ -0,0 +1,15 @@
1
+ function Sr(e){return e instanceof Uint8Array||ArrayBuffer.isView(e)&&e.constructor.name==="Uint8Array"&&"BYTES_PER_ELEMENT"in e&&e.BYTES_PER_ELEMENT===1}function De(e){if(typeof e!="boolean")throw new TypeError(`boolean expected, not ${e}`)}function Se(e){if(typeof e!="number")throw new TypeError("number expected, got "+typeof e);if(!Number.isSafeInteger(e)||e<0)throw new RangeError("positive integer expected, got "+e)}function V(e,t,n=""){let r=Sr(e),o=e?.length,s=t!==void 0;if(!r||s&&o!==t){let i=n&&`"${n}" `,a=s?` of length ${t}`:"",l=r?`length=${o}`:`type=${typeof e}`,f=i+"expected Uint8Array"+a+", got "+l;throw r?new RangeError(f):new TypeError(f)}return e}function ft(e,t=!0){if(e.destroyed)throw new Error("Hash instance has been destroyed");if(t&&e.finished)throw new Error("Hash#digest() has already been called")}function en(e,t,n=!1){V(e,void 0,"output");let r=t.outputLen;if(e.length<r)throw new RangeError("digestInto() expects output buffer of length at least "+r);if(n&&!ke(e))throw new Error("invalid output, must be aligned")}function ae(e){return new Uint32Array(e.buffer,e.byteOffset,Math.floor(e.byteLength/4))}function oe(...e){for(let t=0;t<e.length;t++)e[t].fill(0)}function kr(e){return new DataView(e.buffer,e.byteOffset,e.byteLength)}var he=new Uint8Array(new Uint32Array([287454020]).buffer)[0]===68,xr=e=>e<<24&4278190080|e<<8&16711680|e>>>8&65280|e>>>24&255;var Tr=e=>{for(let t=0;t<e.length;t++)e[t]=xr(e[t]);return e},ce=he?e=>e:Tr;function tn(e,t){if(t==null||typeof t!="object")throw new Error("options must be defined");return Object.assign(e,t)}function nn(e,t){if(e.length!==t.length)return!1;let n=0;for(let r=0;r<e.length;r++)n|=e[r]^t[r];return n===0}function rn(e,t,n){let r=t,o=n||(()=>[]),s=(a,l)=>r(l,...o(a)).update(a).digest(),i=r(new Uint8Array(e),...o(new Uint8Array(0)));return s.outputLen=i.outputLen,s.blockLen=i.blockLen,s.create=(a,...l)=>r(a,...l),s}var on=(e,t)=>{function n(r,...o){if(V(r,void 0,"key"),e.nonceLength!==void 0){let h=o[0];V(h,e.varSizeNonce?void 0:e.nonceLength,"nonce")}let s=e.tagLength;s&&o[1]!==void 0&&V(o[1],void 0,"AAD");let i=t(r,...o),a=(h,m)=>{if(m!==void 0){if(h!==2)throw new Error("cipher output not supported");V(m,void 0,"output")}},l=!1;return{encrypt(h,m){if(l)throw new Error("cannot encrypt() twice with same key + nonce");return l=!0,V(h),a(i.encrypt.length,m),i.encrypt(h,m)},decrypt(h,m){if(V(h),s&&h.length<s)throw new Error('"ciphertext" expected length bigger than tagLength='+s);return a(i.decrypt.length,m),i.decrypt(h,m)}}}return Object.assign(n,e),n};function Re(e,t,n=!0){if(t===void 0)return new Uint8Array(e);if(V(t,void 0,"output"),t.length!==e)throw new Error('"output" expected Uint8Array of length '+e+", got: "+t.length);if(n&&!ke(t))throw new Error("invalid output, must be aligned");return t}function sn(e,t,n){Se(e),Se(t),De(n);let r=new Uint8Array(16),o=kr(r);return o.setBigUint64(0,BigInt(t),n),o.setBigUint64(8,BigInt(e),n),r}function ke(e){return e.byteOffset%4===0}function xe(e){return Uint8Array.from(V(e))}var cn=e=>Uint8Array.from(e.split(""),t=>t.charCodeAt(0)),Ar=ce(ae(cn("expand 16-byte k"))),Br=ce(ae(cn("expand 32-byte k")));function C(e,t){return e<<t|e>>>32-t}var je=64,Er=16,dt=2**32-1,an=Uint32Array.of();function Pr(e,t,n,r,o,s,i,a){let l=o.length,f=new Uint8Array(je),h=ae(f),m=he&&ke(o)&&ke(s),P=m?ae(o):an,w=m?ae(s):an;if(!he){for(let k=0;k<l;i++){if(e(t,n,r,h,i,a),ce(h),i>=dt)throw new Error("arx: counter overflow");let x=Math.min(je,l-k);for(let T=0,E;T<x;T++)E=k+T,s[E]=o[E]^f[T];k+=x}return}for(let k=0;k<l;i++){if(e(t,n,r,h,i,a),i>=dt)throw new Error("arx: counter overflow");let x=Math.min(je,l-k);if(m&&x===je){let T=k/4;if(k%4!==0)throw new Error("arx: invalid block position");for(let E=0,H;E<Er;E++)H=T+E,w[H]=P[H]^h[E];k+=je;continue}for(let T=0,E;T<x;T++)E=k+T,s[E]=o[E]^f[T];k+=x}}function ln(e,t){let{allowShortKeys:n,extendNonceFn:r,counterLength:o,counterRight:s,rounds:i}=tn({allowShortKeys:!1,counterLength:8,counterRight:!1,rounds:20},t);if(typeof e!="function")throw new Error("core must be a function");return Se(o),Se(i),De(s),De(n),(a,l,f,h,m=0)=>{V(a,void 0,"key"),V(l,void 0,"nonce"),V(f,void 0,"data");let P=f.length;if(h=Re(P,h,!1),Se(m),m<0||m>=dt)throw new Error("arx: counter overflow");let w=[],k=a.length,x,T;if(k===32)w.push(x=xe(a)),T=Br;else if(k===16&&n)x=new Uint8Array(32),x.set(a),x.set(a,16),T=Ar,w.push(x);else throw V(a,32,"arx key"),new Error("invalid key size");(!he||!ke(l))&&w.push(l=xe(l));let E=ae(x);if(r){if(l.length!==24)throw new Error("arx: extended nonce must be 24 bytes");let Q=l.subarray(0,16);if(he)r(T,E,ae(Q),E);else{let te=ce(Uint32Array.from(T));r(te,E,ae(Q),E),oe(te),ce(E)}l=l.subarray(16)}else he||ce(E);let H=16-o;if(H!==l.length)throw new Error(`arx: nonce must be ${H} or 16 bytes`);if(H!==12){let Q=new Uint8Array(12);Q.set(l,s?0:12-l.length),l=Q,w.push(l)}let Z=ce(ae(l));try{return Pr(e,T,E,Z,f,h,m,i),h}finally{oe(...w)}}}function X(e,t){return e[t++]&255|(e[t++]&255)<<8}var gt=class{blockLen=16;outputLen=16;buffer=new Uint8Array(16);r=new Uint16Array(10);h=new Uint16Array(10);pad=new Uint16Array(8);pos=0;finished=!1;destroyed=!1;constructor(t){t=xe(V(t,32,"key"));let n=X(t,0),r=X(t,2),o=X(t,4),s=X(t,6),i=X(t,8),a=X(t,10),l=X(t,12),f=X(t,14);this.r[0]=n&8191,this.r[1]=(n>>>13|r<<3)&8191,this.r[2]=(r>>>10|o<<6)&7939,this.r[3]=(o>>>7|s<<9)&8191,this.r[4]=(s>>>4|i<<12)&255,this.r[5]=i>>>1&8190,this.r[6]=(i>>>14|a<<2)&8191,this.r[7]=(a>>>11|l<<5)&8065,this.r[8]=(l>>>8|f<<8)&8191,this.r[9]=f>>>5&127;for(let h=0;h<8;h++)this.pad[h]=X(t,16+2*h)}process(t,n,r=!1){let o=r?0:2048,{h:s,r:i}=this,a=i[0],l=i[1],f=i[2],h=i[3],m=i[4],P=i[5],w=i[6],k=i[7],x=i[8],T=i[9],E=X(t,n+0),H=X(t,n+2),Z=X(t,n+4),Q=X(t,n+6),te=X(t,n+8),$=X(t,n+10),D=X(t,n+12),W=X(t,n+14),U=s[0]+(E&8191),M=s[1]+((E>>>13|H<<3)&8191),L=s[2]+((H>>>10|Z<<6)&8191),O=s[3]+((Z>>>7|Q<<9)&8191),K=s[4]+((Q>>>4|te<<12)&8191),N=s[5]+(te>>>1&8191),u=s[6]+((te>>>14|$<<2)&8191),d=s[7]+(($>>>11|D<<5)&8191),p=s[8]+((D>>>8|W<<8)&8191),b=s[9]+(W>>>5|o),c=0,y=c+U*a+M*(5*T)+L*(5*x)+O*(5*k)+K*(5*w);c=y>>>13,y&=8191,y+=N*(5*P)+u*(5*m)+d*(5*h)+p*(5*f)+b*(5*l),c+=y>>>13,y&=8191;let g=c+U*l+M*a+L*(5*T)+O*(5*x)+K*(5*k);c=g>>>13,g&=8191,g+=N*(5*w)+u*(5*P)+d*(5*m)+p*(5*h)+b*(5*f),c+=g>>>13,g&=8191;let S=c+U*f+M*l+L*a+O*(5*T)+K*(5*x);c=S>>>13,S&=8191,S+=N*(5*k)+u*(5*w)+d*(5*P)+p*(5*m)+b*(5*h),c+=S>>>13,S&=8191;let I=c+U*h+M*f+L*l+O*a+K*(5*T);c=I>>>13,I&=8191,I+=N*(5*x)+u*(5*k)+d*(5*w)+p*(5*P)+b*(5*m),c+=I>>>13,I&=8191;let j=c+U*m+M*h+L*f+O*l+K*a;c=j>>>13,j&=8191,j+=N*(5*T)+u*(5*x)+d*(5*k)+p*(5*w)+b*(5*P),c+=j>>>13,j&=8191;let q=c+U*P+M*m+L*h+O*f+K*l;c=q>>>13,q&=8191,q+=N*a+u*(5*T)+d*(5*x)+p*(5*k)+b*(5*w),c+=q>>>13,q&=8191;let G=c+U*w+M*P+L*m+O*h+K*f;c=G>>>13,G&=8191,G+=N*l+u*a+d*(5*T)+p*(5*x)+b*(5*k),c+=G>>>13,G&=8191;let Y=c+U*k+M*w+L*P+O*m+K*h;c=Y>>>13,Y&=8191,Y+=N*f+u*l+d*a+p*(5*T)+b*(5*x),c+=Y>>>13,Y&=8191;let de=c+U*x+M*k+L*w+O*P+K*m;c=de>>>13,de&=8191,de+=N*h+u*f+d*l+p*a+b*(5*T),c+=de>>>13,de&=8191;let ge=c+U*T+M*x+L*k+O*w+K*P;c=ge>>>13,ge&=8191,ge+=N*m+u*h+d*f+p*l+b*a,c+=ge>>>13,ge&=8191,c=(c<<2)+c|0,c=c+y|0,y=c&8191,c=c>>>13,g+=c,s[0]=y,s[1]=g,s[2]=S,s[3]=I,s[4]=j,s[5]=q,s[6]=G,s[7]=Y,s[8]=de,s[9]=ge}finalize(){let{h:t,pad:n}=this,r=new Uint16Array(10),o=t[1]>>>13;t[1]&=8191;for(let a=2;a<10;a++)t[a]+=o,o=t[a]>>>13,t[a]&=8191;t[0]+=o*5,o=t[0]>>>13,t[0]&=8191,t[1]+=o,o=t[1]>>>13,t[1]&=8191,t[2]+=o,r[0]=t[0]+5,o=r[0]>>>13,r[0]&=8191;for(let a=1;a<10;a++)r[a]=t[a]+o,o=r[a]>>>13,r[a]&=8191;r[9]-=8192;let s=(o^1)-1;for(let a=0;a<10;a++)r[a]&=s;s=~s;for(let a=0;a<10;a++)t[a]=t[a]&s|r[a];t[0]=(t[0]|t[1]<<13)&65535,t[1]=(t[1]>>>3|t[2]<<10)&65535,t[2]=(t[2]>>>6|t[3]<<7)&65535,t[3]=(t[3]>>>9|t[4]<<4)&65535,t[4]=(t[4]>>>12|t[5]<<1|t[6]<<14)&65535,t[5]=(t[6]>>>2|t[7]<<11)&65535,t[6]=(t[7]>>>5|t[8]<<8)&65535,t[7]=(t[8]>>>8|t[9]<<5)&65535;let i=t[0]+n[0];t[0]=i&65535;for(let a=1;a<8;a++)i=(t[a]+n[a]|0)+(i>>>16)|0,t[a]=i&65535;oe(r)}update(t){ft(this),V(t),t=xe(t);let{buffer:n,blockLen:r}=this,o=t.length;for(let s=0;s<o;){let i=Math.min(r-this.pos,o-s);if(i===r){for(;r<=o-s;s+=r)this.process(t,s);continue}n.set(t.subarray(s,s+i),this.pos),this.pos+=i,s+=i,this.pos===r&&(this.process(n,0,!1),this.pos=0)}return this}destroy(){this.destroyed=!0,oe(this.h,this.r,this.buffer,this.pad)}digestInto(t){ft(this),en(t,this),this.finished=!0;let{buffer:n,h:r}=this,{pos:o}=this;if(o){for(n[o++]=1;o<16;o++)n[o]=0;this.process(n,0,!0)}this.finalize();let s=0;for(let i=0;i<8;i++)t[s++]=r[i]>>>0,t[s++]=r[i]>>>8}digest(){let{buffer:t,outputLen:n}=this;this.digestInto(t);let r=t.slice(0,n);return this.destroy(),r}},un=rn(32,e=>new gt(e));function Rr(e,t,n,r,o,s=20){let i=e[0],a=e[1],l=e[2],f=e[3],h=t[0],m=t[1],P=t[2],w=t[3],k=t[4],x=t[5],T=t[6],E=t[7],H=o,Z=n[0],Q=n[1],te=n[2],$=i,D=a,W=l,U=f,M=h,L=m,O=P,K=w,N=k,u=x,d=T,p=E,b=H,c=Z,y=Q,g=te;for(let I=0;I<s;I+=2)$=$+M|0,b=C(b^$,16),N=N+b|0,M=C(M^N,12),$=$+M|0,b=C(b^$,8),N=N+b|0,M=C(M^N,7),D=D+L|0,c=C(c^D,16),u=u+c|0,L=C(L^u,12),D=D+L|0,c=C(c^D,8),u=u+c|0,L=C(L^u,7),W=W+O|0,y=C(y^W,16),d=d+y|0,O=C(O^d,12),W=W+O|0,y=C(y^W,8),d=d+y|0,O=C(O^d,7),U=U+K|0,g=C(g^U,16),p=p+g|0,K=C(K^p,12),U=U+K|0,g=C(g^U,8),p=p+g|0,K=C(K^p,7),$=$+L|0,g=C(g^$,16),d=d+g|0,L=C(L^d,12),$=$+L|0,g=C(g^$,8),d=d+g|0,L=C(L^d,7),D=D+O|0,b=C(b^D,16),p=p+b|0,O=C(O^p,12),D=D+O|0,b=C(b^D,8),p=p+b|0,O=C(O^p,7),W=W+K|0,c=C(c^W,16),N=N+c|0,K=C(K^N,12),W=W+K|0,c=C(c^W,8),N=N+c|0,K=C(K^N,7),U=U+M|0,y=C(y^U,16),u=u+y|0,M=C(M^u,12),U=U+M|0,y=C(y^U,8),u=u+y|0,M=C(M^u,7);let S=0;r[S++]=i+$|0,r[S++]=a+D|0,r[S++]=l+W|0,r[S++]=f+U|0,r[S++]=h+M|0,r[S++]=m+L|0,r[S++]=P+O|0,r[S++]=w+K|0,r[S++]=k+N|0,r[S++]=x+u|0,r[S++]=T+d|0,r[S++]=E+p|0,r[S++]=H+b|0,r[S++]=Z+c|0,r[S++]=Q+y|0,r[S++]=te+g|0}var jr=ln(Rr,{counterRight:!1,counterLength:4,allowShortKeys:!1});var Cr=new Uint8Array(16),fn=(e,t)=>{e.update(t);let n=t.length%16;n&&e.update(Cr.subarray(n))},Ur=new Uint8Array(32);function dn(e,t,n,r,o){o!==void 0&&V(o,void 0,"AAD");let s=e(t,n,Ur),i=sn(r.length,o?o.length:0,!0),a=un.create(s);o&&fn(a,o),fn(a,r),a.update(i);let l=a.digest();return oe(s,i),l}var Or=e=>(t,n,r)=>({encrypt(s,i){let a=s.length;i=Re(a+16,i,!1),i.set(s);let l=i.subarray(0,-16);e(t,n,l,l,1);let f=dn(e,t,n,l,r);return i.set(f,a),oe(f),i},decrypt(s,i){i=Re(s.length-16,i,!1);let a=s.subarray(0,-16),l=s.subarray(-16),f=dn(e,t,n,a,r);if(!nn(l,f))throw oe(f),new Error("invalid tag");return i.set(s.subarray(0,-16)),e(t,n,i,i,1),oe(f),i}}),Te=on({blockSize:64,nonceLength:12,tagLength:16},Or(jr));var Kr=new TextEncoder,Mr=new TextDecoder("utf-8",{fatal:!0,ignoreBOM:!0});function z(e){if(typeof e!="string")throw new TypeError(`encodeUtf8 expects a string, got ${typeof e}`);if(!e.isWellFormed())throw new TypeError("encodeUtf8: input contains lone surrogates");return Kr.encode(e)}function Ce(e){if(!ArrayBuffer.isView(e)&&!(e instanceof ArrayBuffer))throw new TypeError(`decodeUtf8 expects a BufferSource, got ${e===null?"null":typeof e}`);return Mr.decode(e)}async function gn(e){let t=new Blob([e]).stream().pipeThrough(new CompressionStream("gzip"));return new Uint8Array(await new Response(t).arrayBuffer())}async function pn(e){let t=new Blob([e]).stream().pipeThrough(new DecompressionStream("gzip"));return new Uint8Array(await new Response(t).arrayBuffer())}var Lr="deepview-triage-sync.v1.content-key",Nr="deepview-triage-sync.v1.sign-key",Hr="deepview-triage-sync.v1.save",Ir="deepview-triage-sync.v1.subscribe",_r=12,pt=new Uint8Array([48,46,2,1,0,48,5,6,3,43,101,112,4,34,4,32]),Ve=null;function yn(){return Ve||(Ve=(async()=>{try{return await crypto.subtle.importKey("raw",new Uint8Array(32),{name:"ChaCha20-Poly1305"},!1,["encrypt","decrypt"]),!0}catch{return!1}})(),Ve)}async function hn(e,t){let n=Uint8Array.fromBase64(e);if(n.length!==32)throw new Error(`workspace private key must be 32 bytes (got ${n.length})`);let r=await crypto.subtle.importKey("raw",n,"HKDF",!1,["deriveBits"]),o=await crypto.subtle.deriveBits({name:"HKDF",hash:"SHA-256",salt:new Uint8Array,info:z(t)},r,256);return new Uint8Array(o)}async function mn(e){return await hn(e,Lr)}async function ze(e,t){let n=await hn(e,`${Nr}|${t}`),r=new Uint8Array(pt.length+32);r.set(pt,0),r.set(n,pt.length);let o=await crypto.subtle.importKey("pkcs8",r,{name:"Ed25519"},!0,["sign"]),s=await crypto.subtle.exportKey("jwk",o),i=s.x;if(delete s.d,i==null)throw new Error("Ed25519 JWK export returned no public key");let a=Uint8Array.fromBase64(i,{alphabet:"base64url"}),l=await crypto.subtle.importKey("pkcs8",r,{name:"Ed25519"},!1,["sign"]);return n.fill(0),r.fill(0),{privateKey:l,publicKey:a,publicKeyB64:i}}function yt({publicKeyB64:e,base:t,keyframe:n,nonceB64:r,ciphertextB64:o}){return z([Hr,e,t==null?"":String(t),n===!0?"1":"",r,o].join(`
2
+ `))}async function bn(e,t){let n=await crypto.subtle.sign({name:"Ed25519"},e,t);return new Uint8Array(n).toBase64({alphabet:"base64url",omitPadding:!0})}async function wn(e,t){return await bn(e,yt(t))}async function ht(e){let t=yt(e),n=await crypto.subtle.digest("SHA-256",t);return new Uint8Array(n).toBase64({alphabet:"base64url",omitPadding:!0})}function Fr(e,t,n){let r=t==null?"":String(t);return z([Ir,e,r,n].join(`
3
+ `))}async function vn(e,t,n,r){return await bn(e,Fr(t,n,r))}async function Sn(e,t,n){try{let r=await crypto.subtle.importKey("raw",e,{name:"Ed25519"},!1,["verify"]),o=Uint8Array.fromBase64(n,{alphabet:"base64url"}),s=yt(t);return await crypto.subtle.verify({name:"Ed25519"},r,o,s)}catch{return!1}}function Wr(){let e=new Uint8Array(_r);return crypto.getRandomValues(e),e}function mt(e,t){let n=t==null?"":String(t);return z(`${e}|${n}`)}async function $r(e,t,n){let r=Wr();if(await yn()){let s=await crypto.subtle.importKey("raw",e,{name:"ChaCha20-Poly1305"},!1,["encrypt"]),i=new Uint8Array(await crypto.subtle.encrypt({name:"ChaCha20-Poly1305",iv:r,additionalData:n},s,t));return{nonce:r,ciphertext:i}}let o=Te(e,r,n);return{nonce:r,ciphertext:o.encrypt(t)}}async function Dr(e,t,n,r){if(await yn()){let s=await crypto.subtle.importKey("raw",e,{name:"ChaCha20-Poly1305"},!1,["decrypt"]);return new Uint8Array(await crypto.subtle.decrypt({name:"ChaCha20-Poly1305",iv:t,additionalData:r},s,n))}return Te(e,t,r).decrypt(n)}var Vr=64;function zr(e,t){return e<=t?t:2**(32-Math.clz32(e-1))}async function qr(e){let t=z(JSON.stringify(e)),n=await gn(t);if(n.length>1073741820)throw new Error("payload too large");let r=zr(4+n.length,Vr),o=new Uint8Array(r);return new DataView(o.buffer,o.byteOffset,o.byteLength).setUint32(0,n.length,!1),o.set(n,4),o}async function Gr(e){if(e.length<4)throw new Error("plaintext too short");let n=new DataView(e.buffer,e.byteOffset,e.byteLength).getUint32(0,!1);if(n+4>e.length)throw new Error("length prefix exceeds buffer");let r=e.subarray(4,4+n),o=await pn(r);return JSON.parse(Ce(o))}async function kn(e,t,n){let r=await qr(t),{nonce:o,ciphertext:s}=await $r(e,r,n);return{nonce:o.toBase64(),ciphertext:s.toBase64()}}async function xn(e,t,n,r){let o=Uint8Array.fromBase64(t),s=Uint8Array.fromBase64(n),i=await Dr(e,o,s,r);return Gr(i)}var Jr="deepview-objstore.v1.content",Yr="deepview-objstore.v1.tag",Xr=`objstore-tag
4
+ `,Qr=`objstore-bundle-tag
5
+ `,Ae=12;async function bt(e,t){let n=Uint8Array.fromBase64(e);if(n.length!==32)throw new Error(`workspace private key must be 32 bytes (got ${n.length})`);let r=await Tn(n,Jr,32),o=await Tn(n,Yr,32);n.fill(0);let{privateKey:s,publicKeyB64:i}=await ze(e,t);return{signingKey:s,contentKey:r,tagKey:o,workspaceTag:i}}async function Tn(e,t,n){let r=await crypto.subtle.importKey("raw",e,"HKDF",!1,["deriveBits"]),o=await crypto.subtle.deriveBits({name:"HKDF",hash:"SHA-256",salt:new Uint8Array,info:z(t)},r,n*8);return new Uint8Array(o)}async function le(e,t){let n=await crypto.subtle.importKey("raw",e,{name:"HMAC",hash:"SHA-256"},!1,["sign"]);return new Uint8Array(await crypto.subtle.sign("HMAC",n,z(Xr+t))).toBase64({alphabet:"base64url",omitPadding:!0})}async function pe(e,t){let n=await crypto.subtle.importKey("raw",e,{name:"HMAC",hash:"SHA-256"},!1,["sign"]);return new Uint8Array(await crypto.subtle.sign("HMAC",n,z(Qr+t))).toBase64({alphabet:"base64url",omitPadding:!0})}function wt(e,t,n,r,o){let s=z(t);if(s.length>65535)throw new Error(`fileName too long: ${s.length} bytes (max 65535)`);let i=new Uint8Array(2+s.length+n.length);new DataView(i.buffer).setUint16(0,s.length,!1),i.set(s,2),i.set(n,2+s.length);let l=new Uint8Array(Ae);crypto.getRandomValues(l);let f=z(`${r}
6
+ ${o}`),h=Te(e,l,f).encrypt(i),m=new Uint8Array(Ae+h.length);return m.set(l,0),m.set(h,Ae),m}function An(e,t){let n=z(e);if(n.length>65535)throw new Error(`bundle name too long: ${n.length} bytes (max 65535)`);let r=new Uint8Array(2+n.length+t.length);return new DataView(r.buffer).setUint16(0,n.length,!1),r.set(n,2),r.set(t,2+n.length),r}function vt(e){if(e.length<2)throw new Error(`bundle wrapped content truncated: ${e.length} bytes`);let n=new DataView(e.buffer,e.byteOffset,e.byteLength).getUint16(0,!1);if(2+n>e.length)throw new Error(`bundle wrapped nameLen ${n} overflows ${e.length}`);let r=new TextDecoder("utf-8",{fatal:!0}).decode(e.subarray(2,2+n)),o=new Uint8Array(e.subarray(2+n));return{name:r,content:o}}function qe(e,t,n,r){if(t.length<Ae+16)throw new Error(`objstore payload too short: ${t.length} bytes`);let o=t.subarray(0,Ae),s=t.subarray(Ae),i=z(`${n}
7
+ ${r}`),a=Te(e,o,i).decrypt(s);if(a.length<2)throw new Error(`objstore plaintext truncated: ${a.length} bytes`);let f=new DataView(a.buffer,a.byteOffset,a.byteLength).getUint16(0,!1);if(2+f>a.length)throw new Error(`objstore plaintext nameLen ${f} overflows ${a.length}`);let h=new TextDecoder("utf-8",{fatal:!0}).decode(a.subarray(2,2+f)),m=a.subarray(2+f);return{fileName:h,content:new Uint8Array(m)}}var Zr="deepview-objstore.v1.put",eo="deepview-objstore.v1.delete",to="deepview-objstore.v1.fetch";function Bn(e){return e==null?"":String(e)}function En(e){return e??""}function no(e,t){return z([Zr,e.workspaceTag,e.resourceTag,Bn(e.prevVersion),En(e.prevIncarnation),e.contentHash,String(e.expectedLength),t].join(`
8
+ `))}function ro(e,t){return z([eo,e.workspaceTag,e.resourceTag,Bn(e.prevVersion),En(e.prevIncarnation),t].join(`
9
+ `))}function oo(e,t,n){return z([to,e,t,n].join(`
10
+ `))}async function St(e,t){return new Uint8Array(await crypto.subtle.sign({name:"Ed25519"},e,t)).toBase64({alphabet:"base64url",omitPadding:!0})}function Pn(e,t,n){return St(e,no(t,n))}function Rn(e,t,n){return St(e,ro(t,n))}function jn(e,t,n,r){return St(e,oo(t,n,r))}async function kt(e){let t=await crypto.subtle.digest("SHA-256",e);return new Uint8Array(t).toBase64({alphabet:"base64url",omitPadding:!0})}var me=null,Cn=[];function so(e){if(me===e)return;if(me!==null)throw new Error("SyncHost: a different host is already installed");me=e;let t=Cn.splice(0);for(let n of t)try{n(e)}catch(r){console.warn("SyncHost install listener:",r)}}function ne(){if(me===null)throw new Error("SyncHost: not installed \u2014 call installSyncHost(host) during app boot");return me}function Ge(e){if(me!==null){try{e(me)}catch(t){console.warn("SyncHost install listener:",t)}return}Cn.push(e)}var xt="deepview.sync.password",Tt=null;function Un(){return Tt}function On(){let e=ne().getSecureItem(xt);Tt=typeof e=="string"&&e.length>0?e:null}async function Ue(e){Tt=e;let t=ne();e==null?t.removeSecureItem(xt):await t.setSecureItem(xt,e)}var At=1e3,io=3e4;function Je(e){let t=e.serverUrl,n=e.pingIntervalMs??15e3,r=e.pongTimeoutMs??5e3,o=null,s=null,i=0,a=!1,l=null,f=At,h=null,m=null,P=null,w=!1,k=null,x=new Set;function T(){l&&(clearTimeout(l),l=null)}function E(){T(),!a&&i!==0&&t&&(l=setTimeout(()=>{l=null,K()},f),f=Math.min(f*2,io))}function H(){Z(),!(n<=0)&&(h=setInterval(()=>{!o||o.readyState!==WebSocket.OPEN||m||(U({type:"ping"}),m=setTimeout(()=>{m=null,console.warn("socket-transport: heartbeat timeout; closing socket");try{o?.close()}catch{}},r))},n))}function Z(){h&&(clearInterval(h),h=null),m&&(clearTimeout(m),m=null)}function Q(y){for(let g of x)try{g.onDisconnected(y)}catch(S){console.warn("socket-transport: consumer.onDisconnected threw:",S)}}function te(y){for(let g of x)try{g.onConnected(y)}catch(S){console.warn("socket-transport: consumer.onConnected threw:",S)}}function $(y){for(let g of x)try{g.onMessage(y)}catch(S){console.warn("socket-transport: consumer.onMessage threw:",S)}}function D(y){let g;try{let S=typeof y.data=="string"?y.data:new TextDecoder().decode(y.data);g=JSON.parse(S)}catch(S){console.warn("socket-transport: dropping malformed wire frame:",S);return}if(!(!g||typeof g!="object")){if(g.type==="pong"){m&&(clearTimeout(m),m=null);return}if(g.type==="challenge"){if(typeof g.nonce!="string")return;s=g.nonce,te(s);return}if(g.type==="authenticated"){W(!0),$(g);return}if(g.type==="unauthorized"&&g.kind==="auth-failed"){W(!1);return}$(g)}}function W(y){if(!k)return;let g=k;k=null,g(y)}function U(y){if(!o||o.readyState!==WebSocket.OPEN)return!1;try{return o.send(JSON.stringify(y)),!0}catch(g){return console.warn("socket-transport: send failed:",g),!1}}function M(y){return new Promise(g=>{k=g,U({type:"authenticate",password:y})||(k=null,g(!1))})}function L(){if(P)return P;if(!o||o.readyState!==WebSocket.OPEN)return Promise.resolve(!1);let y=o,g=(async()=>{try{let S=Un();if(S!=null&&!w){w=!0;let j=await M(S);if(o!==y)return!1;if(j)return!0;try{await Ue(null)}catch(q){console.warn("socket-transport: failed to clear cached auth password:",q)}}let I=!0;for(;;){if(o!==y||!o||o.readyState!==WebSocket.OPEN||!e.authResolver)return!1;let j;try{j=await e.authResolver({retry:!I})}catch(G){return console.warn("socket-transport: authentication resolver threw:",G),!1}if(o!==y||(I=!1,j==null||j===""))return!1;let q=await M(j);if(o!==y)return!1;if(q){try{await Ue(j)}catch(G){console.warn("socket-transport: failed to cache auth password:",G)}return!0}}}finally{P=null}})();return P=g,g}function O(y){if(!o)return;let g=o;o=null,s=null,w=!1,W(!1),Z(),Q(y);try{g.close()}catch{}}function K(){if(a||o||i===0||!t)return;let y;try{y=new WebSocket(t)}catch(g){console.warn("socket-transport: WebSocket constructor failed:",g),E();return}o=y,s=null,w=!1,y.addEventListener("open",()=>{o===y&&(f=At,H())}),y.addEventListener("message",D),y.addEventListener("close",()=>{o===y&&(o=null,s=null,w=!1,W(!1),Z(),Q("socket closed"),!a&&i>0&&E())}),y.addEventListener("error",()=>{})}function N(){if(a)return{release(){}};i+=1,i===1&&!o&&K();let y=!1;return{release(){y||(y=!0,!a&&(i-=1,i===0&&(T(),f=At,O("released"))))}}}function u(y){y!==t&&(t=y,o&&O("serverUrl changed"),i>0&&t&&K())}function d(y){x.add(y);let g=!1;return{remove(){g||(g=!0,x.delete(y))}}}function p(){a||(a=!0,T(),O("transport closed"),x.clear(),i=0)}function b(y){let{pingMs:g,pongMs:S}=y;typeof g=="number"&&g>=0&&(n=g),typeof S=="number"&&S>0&&(r=S),h&&H()}function c(){w=!1}return{acquire:N,setServerUrl:u,addConsumer:d,send:U,getNonce:()=>s,getSocket:()=>o,runAuthFlow:L,close:p,setHeartbeatTimings:b,resetCachedReplayGuard:c}}var Bt=64,Kn=4,ao=15;function co(e,t){if(!/^\/api\/objstore\/[\w-]+\/[\w-]+$/u.test(e))throw new TypeError(`objstore: urlPath rejected (unexpected shape): ${JSON.stringify(e)}`);let n=new URL(t).origin,r=new URL(e,n);if(r.origin!==n)throw new TypeError(`objstore: urlPath origin mismatch \u2014 expected ${n}, got ${r.origin}`);return r.href}function Mn(e){let t=e.requestTimeoutMs??1e4,n=new URL(e.httpOrigin).origin,r=e.transport===void 0,o=e.transport??Je(e.authResolver===void 0?{serverUrl:e.serverUrl}:{serverUrl:e.serverUrl,authResolver:e.authResolver}),s=!1,i=new Map,a=new Map,l=[],f=[];function h(u,d,p,b){let c=u.seenVersions.get(d);(!c||c.incarnation!==p||b>c.version)&&u.seenVersions.set(d,{incarnation:p,version:b})}function m(u){u.connectedPromise=new Promise((d,p)=>{u.resolveConnected=d,u.rejectConnected=p}),u.connectedPromise.catch(()=>{})}function P(u){u.listedPromise=new Promise((d,p)=>{u.resolveListed=d,u.rejectListed=p}),u.listedPromise.catch(()=>{})}function w(u,d){u.inventory.clear();for(let p of d)u.inventory.set(p.resourceTag,{version:p.version,incarnation:p.incarnation,contentLength:p.contentLength}),h(u,p.resourceTag,p.incarnation,p.version);u.resolveListed()}function k(u){if(!Array.isArray(u))return[];let d=[];for(let p of u)Oe(p)&&d.push(Ke(p));return d}function x(u){let d;return new Promise((p,b)=>{d=setTimeout(()=>b(new Error(`objstore: inventory not seeded (no subscribe ack) after ${t}ms`)),t),u.listedPromise.then(p,b)}).finally(()=>clearTimeout(d))}function T(u){for(let d=0;d<l.length;d++)if(u(l[d]))return Promise.resolve(l.splice(d,1)[0]);return new Promise((d,p)=>{let b={predicate:u,resolve:()=>{},reject:y=>{clearTimeout(c);let g=f.indexOf(b);g>=0&&f.splice(g,1),p(y)}},c=setTimeout(()=>b.reject(new Error(`objstore: response timeout after ${t}ms`)),t);b.resolve=y=>{clearTimeout(c),d(y)},f.push(b)})}function E(u){if(!o.send(u))throw new Error("objstore: socket not open")}function H(u){for(let d of f.splice(0))try{d.reject(new Error(`objstore: ${u}`))}catch{}}function Z(u){if(u.type==="objstore-put"&&typeof u.workspaceTag=="string"&&Oe(u)){let d=i.get(u.workspaceTag);if(!d)return;let p=Ke(u);h(d,p.resourceTag,p.incarnation,p.version),d.inventory.set(p.resourceTag,{version:p.version,incarnation:p.incarnation,contentLength:p.contentLength});let b={resourceTag:p.resourceTag,version:p.version,contentLength:p.contentLength};for(let c of d.putHandlers)try{c(b)}catch{}return}if(u.type==="objstore-deleted"&&typeof u.workspaceTag=="string"&&typeof u.resourceTag=="string"&&typeof u.version=="number"){let d=i.get(u.workspaceTag);if(!d)return;let p=u.resourceTag,b=u.version;d.seenVersions.delete(p),d.inventory.delete(p);let c={resourceTag:p,version:b};for(let y of d.deletedHandlers)try{y(c)}catch{}return}if(!(u.type==="workspace-state"||u.type==="workspace-save-ack"||u.type==="workspace-save-error"||u.type==="workspace-subscribed"||u.type==="authenticated")){for(let d=0;d<f.length;d++)if(f[d].predicate(u)){let p=f[d];f.splice(d,1),p.resolve(u);return}if(l.push(u),l.length>Bt){let d=l.splice(0,l.length-Bt),p=[...new Set(d.map(b=>b.type??"<no-type>"))].slice(0,4);console.warn(`objstore: dropping ${d.length} unmatched frame(s) over MAX_QUEUE_SIZE=${Bt} (types: ${p.join(", ")})`)}}}function Q(){for(let u of i.values())u.closed||u.connected||(u.connected=!0,u.resolveConnected())}function te(u){H(u);for(let d of i.values())d.closed||d.connected&&(d.connected=!1,m(d))}let $=o.addConsumer({onMessage:Z,onConnected:Q,onDisconnected:te}),D=u=>co(u,n);async function W(u,d){if(await u.connectedPromise,u.closed)throw new Error("objstore: session closed");let p=o.getNonce();if(!p)throw new Error("objstore: socket not open");let b=await kt(d.bytes),c={workspaceTag:u.workspaceTag,resourceTag:d.resourceTag,prevVersion:d.prev?.version??null,prevIncarnation:d.prev?.incarnation??null,expectedLength:d.bytes.byteLength,contentHash:b},y=await Pn(u.signingKey,c,p),g,S=!1;for(;E({type:"objstore-put-begin",...c,signature:y}),g=await T(Y=>Y.workspaceTag===u.workspaceTag&&Y.resourceTag===d.resourceTag&&(Y.type==="objstore-put-token"||Y.type==="objstore-put-error"||Y.type==="objstore-conflict"||Y.type==="unauthorized"&&Y.kind==="gated")),!(g.type!=="unauthorized"||S||(S=!0,!await o.runAuthFlow())););if(g.type==="unauthorized")return{ok:!1,reason:"unauthorized"};if(g.type==="objstore-put-error"){if(g.reason==="workspace-full")return{ok:!1,reason:"workspace-full"};throw new Error(`objstore: put-error reason='${String(g.reason)}'`)}if(g.type==="objstore-conflict")return{ok:!1,reason:"conflict",current:Oe(g.current)?Ke(g.current):null};if(typeof g.urlPath!="string"||typeof g.token!="string")throw new TypeError("objstore: malformed put-token (missing urlPath/token)");let I=await globalThis.fetch(D(g.urlPath),{method:"PUT",headers:{authorization:`Bearer ${g.token}`,"content-type":"application/octet-stream"},body:d.bytes});if(!I.ok){if(I.status===409||I.status===410)return{ok:!1,reason:"conflict",current:I.status===409?await lo(I):null};let G="";try{G=await I.text()}catch{}throw new Error(`objstore: REST PUT failed ${I.status} ${G.slice(0,200)}`)}let j;try{j=await I.json()}catch{throw new TypeError("objstore: PUT ack JSON parse failed")}if(!j||typeof j!="object"||typeof j.version!="number"||typeof j.incarnation!="string"||typeof j.contentHash!="string"||typeof j.contentLength!="number")throw new TypeError("objstore: PUT ack malformed (missing version/incarnation/contentHash/contentLength)");let q=j;if(q.contentHash!==b||q.contentLength!==d.bytes.byteLength)throw new Error(`objstore: PUT ack mismatch \u2014 server returned contentHash=${q.contentHash.slice(0,16)}\u2026 length=${q.contentLength}, client signed ${b.slice(0,16)}\u2026 length=${d.bytes.byteLength}`);return{ok:!0,meta:q}}async function U(u,d){for(let p=0;p<Kn;p++){let b=await M(u,d);if(b.kind==="ok")return b.value;if(b.kind==="not-found")return null;p+1<Kn&&await new Promise(c=>{setTimeout(c,ao)})}return null}async function M(u,d){if(await u.connectedPromise,u.closed)throw new Error("objstore: session closed");let p=o.getNonce();if(!p)throw new Error("objstore: socket not open");let b=await jn(u.signingKey,u.workspaceTag,d,p);E({type:"objstore-fetch",workspaceTag:u.workspaceTag,resourceTag:d,signature:b});let c=await T(j=>j.workspaceTag===u.workspaceTag&&j.resourceTag===d&&(j.type==="objstore-fetch-token"||j.type==="objstore-fetch-not-found"));if(c.type==="objstore-fetch-not-found")return{kind:"not-found"};if(typeof c.urlPath!="string"||typeof c.token!="string"||!Oe(c))throw new TypeError("objstore: malformed fetch-token (missing urlPath / token / metadata)");let y=Ke(c),g=await globalThis.fetch(D(c.urlPath),{method:"GET",headers:{authorization:`Bearer ${c.token}`}});if(!g.ok){if(g.status===404||g.status===503)return{kind:"retry"};let j="";try{j=await g.text()}catch{}throw new Error(`objstore: REST GET failed ${g.status} ${j.slice(0,200)}`)}let S=new Uint8Array(await g.arrayBuffer()),I=await kt(S);if(I!==y.contentHash)throw new Error(`objstore: contentHash mismatch \u2014 expected ${y.contentHash.slice(0,16)}\u2026, got ${I.slice(0,16)}\u2026`);return{kind:"ok",value:{bytes:S,meta:y}}}async function L(u,d,p){if(await u.connectedPromise,u.closed)throw new Error("objstore: session closed");let b=o.getNonce();if(!b)throw new Error("objstore: socket not open");let c={workspaceTag:u.workspaceTag,resourceTag:d,prevVersion:p?.version??null,prevIncarnation:p?.incarnation??null},y=await Rn(u.signingKey,c,b);E({type:"objstore-delete",...c,signature:y});let g=await T(S=>S.workspaceTag===u.workspaceTag&&S.resourceTag===d&&(S.type==="objstore-deleted-ack"||S.type==="objstore-delete-error"||S.type==="objstore-conflict"));if(g.type==="objstore-deleted-ack"){if(typeof g.deletedVersion!="number")throw new TypeError("objstore: malformed deleted-ack (deletedVersion not a number)");return{ok:!0,deletedVersion:g.deletedVersion}}if(g.type==="objstore-conflict")return{ok:!1,reason:"conflict",current:Oe(g.current)?Ke(g.current):null};if(g.reason==="not-found")return{ok:!1,reason:"not-found"};throw new Error(`objstore: delete-error reason='${String(g.reason)}'`)}function O(u,d,p,b){let c=u.seenVersions.get(d);if(c&&c.incarnation===p&&b<c.version)throw new Error(`objstore: version-rollback rejected \u2014 fetched v${b} for an incarnation we've already seen at v${c.version}`)}async function K(u,d){if(s)throw new Error("objstore: client closed");if(!d||typeof d.workspaceId!="string")throw new Error("objstore: openWorkspace requires a WorkspaceSubscription (triageSync.ensureSubscription) \u2014 the client must not open a session for a tag with no backing sync subscribe");let p=u.workspaceTag;if(d.workspaceTag!=null&&d.workspaceTag!==p)throw new Error("objstore: openWorkspace \u2014 WorkspaceSubscription is for a different workspace than these keys");if(i.has(p))throw new Error(`objstore: workspace ${p.slice(0,8)}\u2026 is already open on this client`);let b={workspaceTag:p,signingKey:u.signingKey,contentKey:new Uint8Array(u.contentKey),tagKey:new Uint8Array(u.tagKey),putHandlers:new Set,deletedHandlers:new Set,seenVersions:new Map,inventory:new Map,connected:!1,closed:!1};m(b),P(b),i.set(p,b);let c=b;(async()=>{let v;try{v=await d.resources}catch{return}c.closed||w(c,k(v))})();let y=o.acquire();a.set(p,y),o.getNonce()&&(c.connected=!0,c.resolveConnected());let g=null;try{await new Promise((v,A)=>{g=setTimeout(()=>{A(new Error(`objstore: connect timeout after ${t}ms`))},t),c.connectedPromise.then(()=>v(),B=>A(B))})}catch(v){g&&clearTimeout(g),i.delete(p),a.delete(p),c.closed=!0;try{c.contentKey.fill(0)}catch{}try{c.tagKey.fill(0)}catch{}throw y.release(),v}g&&clearTimeout(g);async function S(v,A,B){let _=await W(c,{resourceTag:v,bytes:A,prev:B});return _.ok?(B==null&&c.seenVersions.delete(v),h(c,v,_.meta.incarnation,_.meta.version),c.inventory.set(v,{version:_.meta.version,incarnation:_.meta.incarnation,contentLength:_.meta.contentLength}),{ok:!0,meta:{version:_.meta.version,incarnation:_.meta.incarnation,contentLength:_.meta.contentLength}}):_.reason==="workspace-full"?{ok:!1,reason:"workspace-full"}:_.reason==="unauthorized"?{ok:!1,reason:"unauthorized"}:(_.current&&h(c,v,_.current.incarnation,_.current.version),{ok:!1,reason:"conflict",current:_.current})}async function I(v){let A=await le(c.tagKey,v.fileName),B=wt(c.contentKey,v.fileName,v.content,p,A);return await S(A,B,v.prev)}async function j(v){let A=await le(c.tagKey,v),B=await U(c,A);if(!B)return null;O(c,A,B.meta.incarnation,B.meta.version);let{fileName:_,content:$e}=qe(c.contentKey,B.bytes,p,A);if(_!==v)throw new Error(`objstore: fileName-binding mismatch \u2014 requested '${v}', payload encoded '${_}'`);return h(c,A,B.meta.incarnation,B.meta.version),{content:$e,version:B.meta.version,incarnation:B.meta.incarnation}}async function q(v){let A=await U(c,v);if(!A)return null;O(c,v,A.meta.incarnation,A.meta.version);let{fileName:B,content:_}=qe(c.contentKey,A.bytes,p,v);if(await le(c.tagKey,B)===v)return h(c,v,A.meta.incarnation,A.meta.version),{kind:"report",fileName:B,content:_,version:A.meta.version,incarnation:A.meta.incarnation};if(await pe(c.tagKey,B)===v){let{name:ut,content:vr}=vt(_);return h(c,v,A.meta.incarnation,A.meta.version),{kind:"bundle",integrity:B,name:ut,content:vr,version:A.meta.version,incarnation:A.meta.incarnation}}throw new Error("objstore: fetchByTag \u2014 decrypted name does not derive back to the requested resourceTag under either the report or bundle tag scheme (relay or workspace member produced a non-round-trippable tag-name pair)")}async function G(v,A){let B=await L(c,v,A);return B.ok?(c.seenVersions.delete(v),c.inventory.delete(v),B):B.reason==="not-found"?{ok:!1,reason:"not-found"}:(B.current&&h(c,v,B.current.incarnation,B.current.version),{ok:!1,reason:"conflict",current:B.current})}async function Y(v,A){let B=await le(c.tagKey,v);return await G(B,A)}async function de(){if(await x(c),c.closed)throw new Error("objstore: session closed");return[...c.inventory.entries()].map(([v,A])=>({resourceTag:v,version:A.version,incarnation:A.incarnation,contentLength:A.contentLength}))}async function ge(v){let A=await pe(c.tagKey,v.integrity),B=An(v.name,v.content),_=wt(c.contentKey,v.integrity,B,p,A);return await S(A,_,v.prev)}async function br(v){let A=await pe(c.tagKey,v),B=await U(c,A);if(!B)return null;O(c,A,B.meta.incarnation,B.meta.version);let{fileName:_,content:$e}=qe(c.contentKey,B.bytes,p,A);if(_!==v)throw new Error(`objstore: bundle-integrity binding mismatch \u2014 requested '${v}', payload encoded '${_}'`);let{name:Zt,content:ut}=vt($e);return h(c,A,B.meta.incarnation,B.meta.version),{name:Zt,content:ut,version:B.meta.version,incarnation:B.meta.incarnation}}async function wr(v,A){let B=await pe(c.tagKey,v);return await G(B,A)}return{put:I,fetch:j,fetchByTag:q,delete:Y,list:de,putBundle:ge,fetchBundle:br,deleteBundle:wr,onPut(v){return c.putHandlers.add(v),()=>{c.putHandlers.delete(v)}},onDeleted(v){return c.deletedHandlers.add(v),()=>{c.deletedHandlers.delete(v)}},close(){if(c.closed)return;c.closed=!0,i.delete(p);try{c.contentKey.fill(0)}catch{}try{c.tagKey.fill(0)}catch{}try{c.rejectConnected(new Error("objstore: session closed"))}catch{}try{c.rejectListed(new Error("objstore: session closed"))}catch{}let v=a.get(p);a.delete(p),v&&v.release()}}}function N(){if(!s){s=!0;for(let u of i.values()){u.closed=!0;try{u.contentKey.fill(0)}catch{}try{u.tagKey.fill(0)}catch{}try{u.rejectConnected(new Error("objstore: client closed"))}catch{}try{u.rejectListed(new Error("objstore: client closed"))}catch{}}i.clear();for(let u of a.values())u.release();a.clear(),$.remove(),r&&o.close()}}return{openWorkspace:K,close:N}}async function lo(e){try{let t=await e.json();if(typeof t.currentVersion=="number"&&Number.isSafeInteger(t.currentVersion)&&typeof t.currentIncarnation=="string")return{version:t.currentVersion,incarnation:t.currentIncarnation}}catch{}return null}function Oe(e){return!e||typeof e!="object"?!1:typeof e.resourceTag=="string"&&typeof e.version=="number"&&typeof e.incarnation=="string"&&typeof e.contentHash=="string"&&typeof e.contentLength=="number"&&typeof e.signature=="string"}function Ke(e){return{resourceTag:e.resourceTag,version:e.version,incarnation:e.incarnation,contentHash:e.contentHash,contentLength:e.contentLength,signature:e.signature}}var Et=null;function Ln(e){Et=typeof e=="function"?e:null}var uo=Je({serverUrl:"",authResolver:e=>Et==null?Promise.resolve(null):Et(e)});function Ye(){return uo}var Nn=new Set(["busy"]);function fo(e){return typeof e?.color=="string"?e.color:""}function go(e){return e?.triage==="fixed"||e?.triage==="invalid"||e?.triage==="deleted"?e.triage:e?.deleted?"deleted":""}function po(e){return typeof e?.comment=="string"?e.comment:""}function yo(e){return typeof e?.fix=="string"?e.fix:""}function Hn(e,t,n){let r=[];for(let o of Object.keys(e)){let s=e[o],i=t[o],a=n[o],l=s??null,f=[{name:"color",norm:fo},{name:"triage",norm:go},{name:"comment",norm:po},{name:"fix",norm:yo}];for(let{name:h,norm:m}of f){let P=m(i),w=m(l),k=m(a);w!==P&&k!==P&&w!==k&&r.push({id:o,property:h,local:w,imported:k})}}return r}function ho(e,t){let n=Array.isArray(e)?e:[],r=Array.isArray(t)?t:[];if(n.length!==r.length)return!1;if(n.length===0)return!0;let o=new Set(n);for(let s of r)if(!o.has(s))return!1;return!0}function In(e,t){let n=e.triage??(e.deleted?"deleted":""),r=t.triage??(t.deleted?"deleted":"");return e.color===t.color&&n===r&&(e.comment??"")===(t.comment??"")&&(e.fix??"")===(t.fix??"")&&ho(e.ignoredReports,t.ignoredReports)}function Pt(e,t){let n=new Set([...Object.keys(e),...Object.keys(t)]);for(let r of n)if(!In(e[r]??{},t[r]??{}))return!1;return!0}function Xe(e,t){let n=Object.assign(Object.create(null),e);for(let[r,o]of Object.entries(t))o===null?delete n[r]:o!==void 0&&(n[r]=o);return n}function Rt(e,t){let n=Object.create(null),r=new Set([...Object.keys(e),...Object.keys(t)]);for(let o of r){let s=e[o]??{},i=t[o]??{};In(s,i)||(n[o]=t[o]??null)}return n}function _n(e){for(let t in e)return!1;return!0}function Fn(e){return e==="fixed"||e==="invalid"||e==="deleted"?e:void 0}function ue(e){if(e)return Fn(e.triage)??(e.deleted?"deleted":void 0)}function mo(e){return e?!e.color&&!ue(e)&&!e.comment&&!e.fix&&!(e.ignoredReports&&e.ignoredReports.length>0):!0}function Qe(e){if(!e||typeof e!="object")return;let t=e,n={};typeof t.color=="string"&&t.color&&(n.color=t.color);let r=Fn(t.triage)??(t.deleted?"deleted":void 0);if(r&&(n.triage=r),typeof t.comment=="string"&&t.comment&&(n.comment=t.comment),typeof t.fix=="string"&&t.fix&&(n.fix=t.fix),Array.isArray(t.ignoredReports)){let o=t.ignoredReports.filter(s=>typeof s=="string"&&s.length>0);o.length>0&&(n.ignoredReports=o)}return mo(n)?void 0:n}function bo(e,t){let n=e??[],r=t??[];if(n.length!==r.length)return!1;if(n.length===0)return!0;let o=new Set(n);for(let s of r)if(!o.has(s))return!1;return!0}function Wn(e,t){let n=e??{},r=t??{};return(n.color??"")===(r.color??"")&&(ue(n)??"")===(ue(r)??"")&&(n.comment??"")===(r.comment??"")&&(n.fix??"")===(r.fix??"")&&bo(n.ignoredReports,r.ignoredReports)}function se(e,t,n){let r=e.get(t),o=Qe({...r,...n});return o===void 0?e.delete(t):Wn(r,o)?!1:(e.set(t,o),!0)}function $n(e,t,n){let r=Qe(n),o=e.get(t);return r===void 0?e.delete(t):Wn(o,r)?!1:(e.set(t,r),!0)}function Dn(e,t,n,r){let o=new Set(e.get(t)?.ignoredReports??[]);return r?o.add(n):o.delete(n),se(e,t,{ignoredReports:o.size>0?[...o]:void 0})}function Be(e,t){let n=Object.assign(Object.create(null),e),r=ne().state,o=t instanceof Set?t:new Set(t);for(let s of o){let i=Qe(r.triage.get(s));i?n[s]=i:delete n[s]}return n}function jt(e,t){let n=ne().state,r=[];for(let o of t){let s=e[o];if(!s||typeof s!="object")continue;let i=n.triage.get(o);if(s.color){let f=i?.color;f===void 0?se(n.triage,o,{color:s.color}):f!==s.color&&r.push({id:o,property:"color",local:f,imported:s.color})}let a=ue(s);if(a){let f=ue(i);f===void 0?se(n.triage,o,{triage:a}):f!==a&&r.push({id:o,property:"triage",local:f,imported:a})}if(s.comment){let f=i?.comment;f===void 0?se(n.triage,o,{comment:s.comment}):f!==s.comment&&r.push({id:o,property:"comment",local:f,imported:s.comment})}if(s.fix){let f=i?.fix;f===void 0?se(n.triage,o,{fix:s.fix}):f!==s.fix&&r.push({id:o,property:"fix",local:f,imported:s.fix})}if(!(a!=null||ue(i)!=null||!Array.isArray(s.ignoredReports))&&!((i?.ignoredReports?.length??0)>0))for(let f of s.ignoredReports)typeof f=="string"&&Dn(n.triage,o,f,!0)}return r}function Ct(e,t){let n=ne().state;for(let r of e){let o=`${r.id}:${r.property}`;t[o]==="imported"&&wo(r.id,r.property)===r.local&&(r.property==="color"?se(n.triage,r.id,{color:r.imported}):r.property==="comment"?se(n.triage,r.id,{comment:r.imported}):r.property==="fix"?se(n.triage,r.id,{fix:r.imported}):r.property==="triage"&&(r.imported==="fixed"||r.imported==="invalid"||r.imported==="deleted"?se(n.triage,r.id,{triage:r.imported,ignoredReports:void 0}):se(n.triage,r.id,{triage:void 0})))}}function wo(e,t){let n=ne().state.triage.get(e);return t==="color"?n?.color??"":t==="triage"?ue(n)??"":t==="comment"?n?.comment??"":t==="fix"?n?.fix??"":""}function Vn(e,t){let n=ne().state,r=t instanceof Set?t:new Set(t);for(let o of r){let s=e[o],i=ue(s)?void 0:s?.ignoredReports;$n(n.triage,o,{...s,ignoredReports:i})}}var Ot="deepview.sync.sessions",vo=Ot,Ut=1,et=!1,Ze=new Set;function zn(){return et}function Me(e){if(et!==e){et=e,console.warn(e?"triage-sync: can't persist the sessions blob \u2014 either it's an unrecognised future version (writes skipped to avoid clobbering a newer build's data) or the write itself failed (storage full / vault locked). Your in-memory triage state still works this session but will not persist across reload. Free up storage and/or clear localStorage[deepview.sync.sessions]; the badge clears on the next successful save.":"triage-sync: persistence recovered; persisted-sessions blob is now writable.");for(let t of Ze)try{t(e)}catch(n){console.warn("persistenceDegraded listener:",n)}}}function qn(e){return Ze.add(e),queueMicrotask(()=>{if(Ze.has(e))try{e(et)}catch(t){console.warn("persistenceDegraded listener:",t)}}),()=>Ze.delete(e)}function tt(){try{let e=ne().getSecureItem(Ot);if(!e)return{kind:"empty"};let t=JSON.parse(e);if(!t||typeof t!="object")return{kind:"empty"};let n=t;return n.version===Ut&&n.sessions&&typeof n.sessions=="object"&&!Array.isArray(n.sessions)?{kind:"v1",map:n.sessions}:n.version===Ut?{kind:"empty"}:"version"in n?{kind:"unknown-version"}:{kind:"legacy",map:n}}catch{return{kind:"empty"}}}function So(){let e=tt();return e.kind==="v1"||e.kind==="legacy"?e.map:{}}async function ko(e){try{return await ne().setSecureItem(Ot,JSON.stringify({version:Ut,sessions:e})),!0}catch(t){return console.warn("Triage sync: could not persist session state:",t),!1}}function Kt(e,t){if(!t)return null;let r=So()[e];return!r||r.serverUrl!==t?null:{baseRevision:typeof r.baseRevision=="string"?r.baseRevision:null,baseState:r.baseState&&typeof r.baseState=="object"?Object.assign(Object.create(null),r.baseState):Object.create(null),savesSinceKeyframe:typeof r.savesSinceKeyframe=="number"?r.savesSinceKeyframe:0}}async function nt(e){await navigator.locks.request(vo,async()=>{let t=tt();if(t.kind==="unknown-version"){Me(!0);return}let n=t.kind==="v1"||t.kind==="legacy"?t.map:{};if(await e(n)===!1)return;let o=await ko(n);Me(!o)})}function Mt(e=null){nt(t=>{let n=Object.keys(t);if(n.length===0)return!1;let r=new Set(ne().listWorkspaces().map(s=>s.id)),o=!1;for(let s of n){let i=t[s];(!r.has(s)||e!=null&&i?.serverUrl!==e)&&(delete t[s],o=!0)}return o?void 0:!1}).catch(t=>{console.warn("Triage sync: prunePersistedSessions lock failed:",t)})}function rt(e){return nt(t=>{if(!(e in t))return!1;delete t[e]})}var Zn,Ie,ot,Gn,er,xo="deepview.triageSyncUrl",tr="deepview.sync.userEnabled",To=/^\d+$/u,Wt=()=>{},He=null,ye="",Ne=!0,Ht=!1,ee=Ye(),Le=null,be=100,Ao=5;function st(){return Ne&&!Ht&&!!ye&&Bo()}function Bo(){try{return Ie().length>0}catch{return!1}}var It=new Set;function nr(){if(!st())return"off";for(let t of R.values())if(t.error)return"error";let e=ee.getSocket();if(!e||e.readyState!==WebSocket.OPEN)return"offline";for(let t of R.values())if(t.subscribed&&!t.subscribeAcked)return"connecting";return"online"}var Jn="off";function J(){let e=nr();if(e!==Jn){Jn=e;for(let t of It)try{t(e)}catch(n){console.warn("Triage sync status listener:",n)}}}var _t=0,R=new Map;function Yn(e){for(let t of R.values())if(t.workspaceTag===e)return t;return null}function ie(e){return R.get(e.workspaceId)===e}function Xn(e){if(e.key){try{e.key.fill(0)}catch{}e.key=null}if(e.signingKey=null,e.verifyingKey=null,e.objstoreResourceWaiters.length>0){let t=e.objstoreResourceWaiters.splice(0);for(let n of t)try{n([])}catch{}}}function rr(e){let t=new Set,n=Ie().find(o=>o.id===e);if(!n)return t;let r=new Set(n.reports??[]);for(let o of Zn.reports)if(r.has(o.fileName))for(let s of o.groups)for(let i of s){let a=i.id??String(i._id);To.test(a)||t.add(a)}return t}function $t(e){let t=rr(e.workspaceId),n=[];for(let o of t)e.ids.has(o)||n.push(o);let r=[];return n.length>0&&(r=jt(e.baseState,n)),e.ids=t,{conflicts:r,hydrated:n.length>0}}function Eo(){let e=tt();e.kind==="unknown-version"?Me(!0):(e.kind==="v1"||e.kind==="legacy")&&Me(!1),On(),ee.resetCachedReplayGuard()}function or(e){if(!e||!ye)return;let t=ye;nt(n=>{n[e.workspaceId]={serverUrl:t,baseRevision:e.baseRevision,savesSinceKeyframe:e.savesSinceKeyframe??0,baseState:e.baseState}}).catch(n=>{console.warn("Triage sync: persistSession lock failed:",n)})}function Ft(e){let t=Ie().find(r=>r.id===e.workspaceId);if(!t){e.error="workspace no longer exists",J();return}let n=(e.keyDerivationGen??0)+1;e.keyDerivationGen=n,(async()=>{try{let[r,o]=await Promise.all([mn(t.privateKey),ze(t.privateKey,e.workspaceId)]);if(R.get(e.workspaceId)!==e||e.keyDerivationGen!==n)return;if(e.key=r,e.signingKey=o.privateKey,e.verifyingKey=o.publicKey,e.workspaceTag=o.publicKeyB64,ee.getSocket()?.readyState!==WebSocket.OPEN){we();return}Ee(e),re(e),J()}catch(r){console.warn("Triage sync: key derivation failed:",r),R.get(e.workspaceId)===e&&e.keyDerivationGen===n&&(e.error=`key derivation failed: ${r instanceof Error?r.message:String(r)}`,J())}})()}function sr(e){return ee.send(e)}function Ee(e,t=!1){if(!e)return;let n=ee.getSocket();if(!n||n.readyState!==WebSocket.OPEN||!t&&e.subscribed||!e.signingKey||!e.workspaceTag)return;let r=ee.getNonce();if(r==null)return;let o=e.baseRevision,s=n,i=e.signingKey,a=e.workspaceTag;(async()=>{try{let l=await vn(i,a,o,r);if(R.get(e.workspaceId)!==e||e.workspaceTag!==a||ee.getSocket()!==s||ee.getNonce()!==r)return;e.subscribed=!0,sr({type:"workspace-subscribe",workspaceTag:a,from:o,signature:l})}catch(l){console.warn("Triage sync: subscribe sign failed:",l)}})()}function re(e){if(!e||e.error)return;if(e.pending||e.encrypting){e.pendingSave=!0;return}if(!e.key||!e.signingKey||!e.workspaceTag){e.pendingSave=!0;return}$t(e),e.localState=Be(e.baseState,e.ids);let t=ee.getSocket();if(!t||t.readyState!==WebSocket.OPEN)return;let n=(e.savesSinceKeyframe??0)>=be,r=n?Object.create(null):e.baseState,o=Rt(r,e.localState);if(_n(o)&&!n)return;let s=e.baseRevision,i=e.key,a=e.signingKey,l=e.workspaceTag;e.encrypting=!0,(async()=>{try{let f=mt(l,s),{nonce:h,ciphertext:m}=await kn(i,o,f),P={publicKeyB64:l,base:s,keyframe:n,nonceB64:h,ciphertextB64:m},w=await wn(a,P),k=await ht(P);if(R.get(e.workspaceId)!==e||e.workspaceTag!==l)return;if(e.baseRevision!==s){e.pendingSave=!0;return}e.pending={base:s,id:k,changeset:o,keyframe:n},e.pendingSave=!1;let x={type:"workspace-save",workspaceTag:l,base:s,nonce:h,ciphertext:m,signature:w};n&&(x.keyframe=!0),sr(x),e.consecutiveFailures=0,e.error&&(e.error=null,J())}catch(f){console.warn("Triage sync: encrypt/sign failed:",f),R.get(e.workspaceId)===e&&(e.consecutiveFailures=(e.consecutiveFailures??0)+1,e.consecutiveFailures>=Ao&&(e.error=`encrypt/sign failed: ${f instanceof Error?f.message:String(f)}`,J()))}finally{R.get(e.workspaceId)===e&&(e.encrypting=!1,!e.error&&e.pendingSave&&!e.pending&&(e.pendingSave=!1,re(e)))}})()}async function Po(e,t){for(let n of t){if(!n||typeof n!="object"||typeof n.id=="string"&&n.id===e.baseRevision)continue;let r=e.baseRevision,o=!!n.keyframe;if(!(r==null?n.base==null||o:n.base===r))return console.warn(`Triage sync: chain base mismatch (expected ${r}, got ${n.base})`),!1;if(typeof n.signature!="string"||typeof n.nonce!="string"||typeof n.ciphertext!="string"||typeof n.id!="string")return console.warn("Triage sync: revision missing signature/nonce/ciphertext/id; resyncing"),e.savesSinceKeyframe=be,!1;if(!e.workspaceTag||!e.verifyingKey||!e.key)return!1;let i=typeof n.base=="string"?n.base:null,a={publicKeyB64:e.workspaceTag,base:i,keyframe:o,nonceB64:n.nonce,ciphertextB64:n.ciphertext},l=await Sn(e.verifyingKey,a,n.signature);if(!ie(e))return!1;if(!l)return console.warn("Triage sync: revision signature did not verify; resyncing"),e.savesSinceKeyframe=be,!1;let f=await ht(a);if(!ie(e))return!1;if(n.id!==f)return console.warn("Triage sync: revision id does not match content hash; resyncing"),e.savesSinceKeyframe=be,!1;let h;try{let P=mt(e.workspaceTag,i);h=await xn(e.key,n.nonce,n.ciphertext,P)}catch(P){return console.warn("Triage sync: decrypt failed; resyncing",P),e.savesSinceKeyframe=be,!1}if(!ie(e))return!1;let m=o?Object.create(null):e.baseState;e.baseState=Xe(m,h??{}),e.baseRevision=n.id,o?e.savesSinceKeyframe=0:e.savesSinceKeyframe=Math.min((e.savesSinceKeyframe??0)+1,be)}return!0}async function ir(e,t,n=[],r=null){if(ie(e)){e.localState=Xe(e.baseState,t),_t++;try{Vn(e.localState,e.ids),r&&n.length>0&&(Ct(n,r),e.localState=Be(e.baseState,e.ids)),or(e),await ot()}finally{_t--}if(ie(e)){Wt();for(let o of R.values())o!==e&&re(o)}}}function ar(e){return $t(e),e.localState=Be(e.baseState,e.ids),Rt(e.baseState,e.localState)}async function Ro(e,t){if(e.pending&&t.base===e.pending.base&&typeof t.id=="string"&&t.id===e.pending.id){let n=ar(e),r=e.pending.keyframe?Object.create(null):e.baseState;if(e.baseState=Xe(r,e.pending.changeset),e.baseRevision=t.id,e.savesSinceKeyframe=e.pending.keyframe?0:Math.min((e.savesSinceKeyframe??0)+1,be),e.pending=null,await ir(e,n),!ie(e))return;(e.pendingSave||!Pt(e.localState,e.baseState))&&(e.pendingSave=!1,re(e));return}if(e.pending){let n=typeof t.id=="string"?t.id.slice(0,8):String(t.id);console.warn(`Triage sync: ack mismatch (pending ${e.pending.base}/${e.pending.id.slice(0,8)}, ack ${t.base}/${n})`);return}if(t.id!==e.baseRevision){let n=typeof t.id=="string"?t.id.slice(0,8):String(t.id);console.warn(`Triage sync: late ack for base=${t.base} id=${n}\u2026; pending was already cleared`),e.pendingSave=!0,re(e)}}async function jo(e,t){if(!Array.isArray(t)||t.length===0||!e.key)return;let n=ar(e),r=e.baseRevision,o=e.baseState,s=await Po(e,t);if(!ie(e))return;if(!s){if(!e.resyncAttempted){e.resyncAttempted=!0,console.warn("Triage sync: requesting catch-up from last known baseRevision"),Ee(e,!0);return}console.warn("Triage sync: catch-up also broke continuity; full state push"),e.baseRevision=null,e.baseState=Object.create(null),e.pending=null,e.pendingSave=!1,e.resyncAttempted=!1,or(e),Wt(),re(e);return}if(e.resyncAttempted=!1,e.pending&&(e.pending=null,e.pendingSave=!0),e.baseRevision===r){if(!ie(e))return;e.pendingSave&&(e.pendingSave=!1,re(e));return}let i=Hn(n,o,e.baseState),a=null;if(i.length>0&&He){try{a=await He(i,e.baseState,"chain")??null}catch(l){console.warn("Triage sync: chain-conflict resolver failed:",l)}if(!ie(e))return}await ir(e,n,i,a),ie(e)&&(e.pendingSave||!Pt(e.localState,e.baseState))&&(e.pendingSave=!1,re(e))}async function Co(e){if(e.type==="authenticated"){for(let n of R.values())Ee(n),re(n);return}if(e.type==="unauthorized"){if(e.kind==="gated"){if(typeof e.workspaceTag=="string"){let n=Yn(e.workspaceTag);n&&typeof e.resourceTag!="string"&&Uo(n,e)}ee.runAuthFlow().catch(n=>{console.warn("Triage sync: auth flow failed:",n)})}return}if(typeof e.workspaceTag!="string")return;let t=Yn(e.workspaceTag);if(t){if(e.type==="workspace-save-ack")await Ro(t,e);else if(e.type==="workspace-state")await jo(t,e.revisions);else if(e.type==="workspace-save-error")Ko(t,e);else if(e.type==="workspace-subscribed"){t.subscribeAcked=!0;let n=Array.isArray(e.resources)?e.resources:[],r=t.objstoreResourceWaiters.splice(0);for(let o of r)try{o(n)}catch{}J()}}}function Uo(e,t){e.pending&&(typeof t.base!="string"&&t.base!==null||t.base===e.pending.base&&(e.pending=null,e.pendingSave=!0))}var Oo=/^[\w-]+$/u;function Ko(e,t){if(!e.pending||typeof t.base!="string"&&t.base!==null||t.base!==e.pending.base)return;let n=t.reason,r=typeof n=="string"&&n.length>0&&n.length<=64&&Oo.test(n)?n:"rejected";if(e.pending=null,Nn.has(r)){e.pendingSave=!0;return}e.consecutiveFailures=(e.consecutiveFailures??0)+1,e.error=`server rejected save: ${r}`,J()}var Qn=Promise.resolve();function Mo(e){Qn=Qn.then(()=>Co(e)).catch(t=>{console.warn("Triage sync handler error:",t)})}function Lo(e){for(let t of R.values())t.pending=null,t.pendingSave=!1,Ee(t),re(t);J()}function No(e){for(let t of R.values())t.pending=null,t.subscribed=!1,t.subscribeAcked=!1,t.resyncAttempted=!1,t.pendingSave=!0;J()}ee.addConsumer({onMessage:Mo,onConnected:Lo,onDisconnected:No});function we(){st()?Le||(Le=ee.acquire()):Le&&(Le.release(),Le=null)}function Ho(e){Wt=typeof e=="function"?e:()=>{}}function Io(e){He=typeof e=="function"?e:null}function _o(e){Ln(e)}function Lt(e){let t=e.error!=null;e.error=null,e.consecutiveFailures=0,t&&(!e.key||!e.signingKey)&&Ft(e)}function Nt(e){e.pending=null,e.pendingSave=!1,e.encrypting=!1,e.subscribed=!1,e.subscribeAcked=!1,e.resyncAttempted=!1}var ve={setServerUrl(e){let t=(e??"").trim();if(t===ye)return;let n=ye;ye=t,t&&Mt(t),n&&t&&n!==t&&Ue(null).catch(r=>{console.warn("Triage sync: failed to drop cached auth password on server change:",r)}),ee.setServerUrl(t);for(let r of R.values()){Nt(r);let o=t?Kt(r.workspaceId,t):null;r.baseRevision=o?.baseRevision??null,r.baseState=o?.baseState??Object.create(null),r.savesSinceKeyframe=o?.savesSinceKeyframe??0,r.localState=Be(r.baseState,r.ids),Lt(r)}we(),J()},setEnabled(e){let t=!!e;if(t!==Ne){if(Ne=t,er(tr,t?"1":"0").catch(n=>{console.warn("Triage sync: could not persist user-enabled:",n)}),st())for(let n of R.values())Lt(n);else for(let n of R.values())Nt(n);we(),J()}},isEnabled(){return Ne},setForcedOff(e){let t=!!e;if(t!==Ht){if(Ht=t,st())for(let n of R.values())Lt(n);else for(let n of R.values())Nt(n);we(),J()}},getServerUrl(){return ye},get connected(){return ee.getSocket()?.readyState===WebSocket.OPEN},get status(){return nr()},onStatusChange(e){return It.add(e),()=>It.delete(e)},notify(){if(!(_t>0))for(let e of R.values())re(e)},ensureSubscription(e){let t=R.has(e);ve.openSession(e);let n=R.get(e);if(!n)return null;let r=new Promise(o=>{n.objstoreResourceWaiters.push(o)});return t&&Ee(n,!0),{workspaceId:e,workspaceTag:n.workspaceTag,resources:r}},openSession(e){if(!e||R.has(e)||!Ie().find(i=>i.id===e))return;let n=rr(e),r=Kt(e,ye),o=r?.baseState??Object.create(null);jt(o,n);let s={workspaceId:e,workspaceTag:null,signingKey:null,verifyingKey:null,ids:n,baseRevision:r?.baseRevision??null,baseState:o,savesSinceKeyframe:r?.savesSinceKeyframe??0,localState:Be(o,n),pending:null,pendingSave:!1,key:null,encrypting:!1,subscribed:!1,subscribeAcked:!1,resyncAttempted:!1,consecutiveFailures:0,error:null,objstoreResourceWaiters:[]};R.set(e,s),Ft(s),we(),J()},closeSession(e){if(e==null){for(let t of R.values())Xn(t);R.clear()}else{let t=R.get(e);t&&Xn(t),R.delete(e)}J()},refreshSession(e){let t=R.get(e);if(!t){console.debug("triage-sync: refreshSession bail \u2014 no session for",e,"(caller must openSession first)");return}cr(t)},sessionInfo(e){let t=R.get(e);return t?{workspaceId:t.workspaceId,workspaceTag:t.workspaceTag,baseRevision:t.baseRevision,pending:t.pending&&{base:t.pending.base,keyframe:t.pending.keyframe},pendingSave:t.pendingSave,keyReady:t.key!==null,encrypting:t.encrypting,tracked:t.ids.size,savesSinceKeyframe:t.savesSinceKeyframe??0,error:t.error??null}:null},get openSessions(){return[...R.keys()].map(e=>this.sessionInfo(e)).filter(e=>e!==null)},dismissError(e){let t=e==null?[...R.keys()]:[e],n=!1;for(let r of t){let o=R.get(r);!o||!o.error||(o.error=null,o.consecutiveFailures=0,n=!0,!o.key||!o.signingKey?Ft(o):ee.getSocket()?.readyState===WebSocket.OPEN&&(Ee(o),re(o)))}n&&J()},get persistenceDegraded(){return zn()},onPersistenceDegraded(e){return qn(e)}};Ge(e=>{Zn=e.state,Ie=e.listWorkspaces,ot=e.saveTriage,Gn=e.getSecureItem,er=e.setSecureItem,e.onSecureStorageHydrated(Eo);try{localStorage.removeItem(xo),Gn(tr)==="0"&&(Ne=!1),we()}catch{}e.onWorkspaceDeleted(t=>{let n=R.delete(t);rt(t).catch(r=>{console.warn("Triage sync: dropPersistedSession lock failed:",r)}),we(),n&&J()}),e.onWorkspacePrivateKeyChanged(t=>{let n=R.get(t);if(!n){rt(t).catch(r=>{console.warn("Triage sync: dropPersistedSession lock failed:",r)});return}n.signingKey=null,n.key=null,n.verifyingKey=null,n.workspaceTag=null,(async()=>{await rt(t),R.delete(t),ve.openSession(t),J()})().catch(r=>{console.warn("Triage sync: privateKey rotation IIFE failed:",r),R.delete(t),J()})}),e.onReportMembershipChanged(t=>{ve.openSession(t);let n=R.get(t);n&&cr(n)}),Mt()});function cr(e){let{conflicts:t,hydrated:n}=$t(e);(async()=>{if(t.length===0){n?await ot():re(e);return}let r=null;if(He)try{r=await He(t,e.baseState,"attach")}catch(o){console.warn("Triage sync: hydration conflict resolver failed:",o)}ie(e)&&(r&&Ct(t,r),await ot())})().catch(r=>{console.warn("Triage sync: refreshAndPropagate failed:",r)})}async function Dt(e){let t=await crypto.subtle.digest("SHA-512",e);return`sha512-${new Uint8Array(t).toBase64()}`}var Pe,zt,qt,fr,dr,gr,lt,pr,yr,Yt,hr,F=new Map,Gt=new Set,Fo="deepview.objstore-presence.";function Xt(e){return Fo+e}function Wo(e){try{let t=localStorage.getItem(Xt(e));if(!t)return null;let n=JSON.parse(t);return!n||typeof n!="object"?null:{names:n.names&&typeof n.names=="object"?n.names:{},bundles:n.bundles&&typeof n.bundles=="object"?n.bundles:{},bundleNames:n.bundleNames&&typeof n.bundleNames=="object"?n.bundleNames:{}}}catch{return null}}function Jt(e,t){try{let n={names:Object.fromEntries(t.remoteNameByTag),bundles:Object.fromEntries(t.remoteBundleByTag),bundleNames:Object.fromEntries(t.remoteBundleNameByIntegrity)};localStorage.setItem(Xt(e),JSON.stringify(n))}catch(n){console.warn(`objstore-presence: cache persist failed for ${e}:`,n)}}function lr(e){try{localStorage.removeItem(Xt(e))}catch{}}var Vt=null;function $o(e){return Vt||(Vt=Mn({serverUrl:"",httpOrigin:e,transport:Ye()})),Vt}var it=new Set,Fe=new Set;function fe(){for(let e of Gt)try{e()}catch{}}function Do(e){if(e==null)return"";if(e instanceof Error&&e.message)return`: ${e.message}`;if(typeof e=="string"&&e)return`: ${e}`;if(typeof e=="object"&&typeof e.message=="string"&&e.message)return`: ${e.message}`;try{return`: ${String(e)}`}catch{return""}}var ur=256;function mr(e){return typeof e!="string"?"":e.length<=ur?e:e.slice(0,ur)}function Vo(e){try{let t=new URL(e);return t.protocol=t.protocol==="wss:"?"https:":"http:",t.pathname="/",t.search="",t.hash="",t.origin}catch{return null}}function _e(e){if(F.has(e))return;let t=Pe().find(o=>o.id===e);if(!t)return;let n=ve.ensureSubscription(e);if(!n)return;let r={workspaceId:e,session:null,keys:null,remoteTags:new Set,fileTags:new Map,bundleTags:new Map,remoteNameByTag:new Map,remoteBundleByTag:new Map,remoteBundleNameByIntegrity:new Map,inFlight:new Map,err:null,disposed:!1,ready:null};F.set(e,r),r.ready=(async()=>{if(r.keys=await bt(t.privateKey,t.id),r.disposed)return;let o=new Map;for(let l of t.reports??[]){let f=await le(r.keys.tagKey,l);r.fileTags.set(l,f),o.set(f,l)}if(r.disposed)return;let s=new Map;for(let l of t.bundles??[]){let f=await pe(r.keys.tagKey,l);r.bundleTags.set(l,f),s.set(f,l)}if(r.disposed)return;try{let l=await lt();if(r.disposed)return;for(let f of l)r.bundleTags.has(f.integrity)&&r.remoteBundleNameByIntegrity.set(f.integrity,f.name)}catch(l){console.warn(`objstore-presence: listBundles failed during ${e} open:`,l)}fe();let i=ve.getServerUrl();if(!i)return;let a=Vo(i);if(a)try{let f=await $o(a).openWorkspace(r.keys,n);if(r.disposed){try{f.close()}catch{}return}r.session=f;let h=await f.list();if(r.disposed)return;for(let w of h)r.remoteTags.add(w.resourceTag);let m=Wo(e),P=!1;for(let w of r.remoteTags){let k=o.get(w);k!==void 0&&!r.remoteNameByTag.has(w)&&(r.remoteNameByTag.set(w,k),P=!0);let x=s.get(w);if(x!==void 0&&!r.remoteBundleByTag.has(w)&&(r.remoteBundleByTag.set(w,x),P=!0),m){let T=m.names[w];typeof T=="string"&&!r.remoteNameByTag.has(w)&&!r.remoteBundleByTag.has(w)&&(r.remoteNameByTag.set(w,T),r.fileTags.set(T,w),P=!0);let E=m.bundles[w];if(typeof E=="string"&&!r.remoteBundleByTag.has(w)&&!r.remoteNameByTag.has(w)){r.remoteBundleByTag.set(w,E),r.bundleTags.set(E,w);let H=m.bundleNames[E];typeof H=="string"&&!r.remoteBundleNameByIntegrity.has(E)&&r.remoteBundleNameByIntegrity.set(E,H),P=!0}}}(P||m)&&Jt(e,r),fe(),ct(r),f.onPut(({resourceTag:w})=>{r.remoteTags.add(w),fe(),ct(r)}),f.onDeleted(({resourceTag:w})=>{r.remoteTags.delete(w);let k=r.remoteNameByTag.get(w);r.remoteNameByTag.delete(w);let x=Pe().find(Z=>Z.id===e),T=x?.reports??[],E=x?.bundles??[];k&&!T.includes(k)&&r.fileTags.delete(k);let H=r.remoteBundleByTag.get(w);r.remoteBundleByTag.delete(w),H&&(r.remoteBundleNameByIntegrity.delete(H),E.includes(H)||r.bundleTags.delete(H)),Jt(e,r),fe()})}catch(l){r.err=l}})(),r.ready.catch(()=>{})}function at(e){let t=F.get(e);if(t){t.disposed=!0;try{t.session?.close()}catch{}if(t.keys){try{t.keys.contentKey.fill(0)}catch{}try{t.keys.tagKey.fill(0)}catch{}t.keys=null}F.delete(e),fe()}}Ge(e=>{Pe=e.listWorkspaces,zt=e.addReportToWorkspace,qt=e.addBundleToWorkspace,fr=e.analyzeContent,dr=e.setCount,gr=e.gunzipBytes,lt=e.listBundles,pr=e.listFiles,yr=e.readBundle,Yt=e.saveBundle,hr=e.saveFileBytes,e.onReportMembershipChanged(t=>{F.has(t)||_e(t);let n=F.get(t);if(!n)return;let r=Pe().find(o=>o.id===t);if(r)for(let o of r.reports??[])n.fileTags.has(o)||Go(t,o).catch(()=>{})}),e.onBundleMembershipChanged(t=>{F.has(t)||_e(t);let n=F.get(t);if(!n)return;let r=Pe().find(o=>o.id===t);if(r)for(let o of r.bundles??[])n.bundleTags.has(o)||Yo(t,o).catch(()=>{})}),e.onWorkspaceDeleted(t=>{at(t),lr(t)}),e.onWorkspacePrivateKeyChanged(t=>{F.has(t)&&(at(t),lr(t),_e(t))})});function zo(){return Array.from(F.keys())}function qo(e,t){let n=F.get(e);if(!n)return!1;let r=n.fileTags.get(t);return r?n.remoteTags.has(r):!1}async function Go(e,t){let n=F.get(e);!n||n.fileTags.has(t)||(n.ready&&!n.keys&&await n.ready,n.keys&&(n.fileTags.set(t,await le(n.keys.tagKey,t)),n.disposed||fe()))}function Jo(e,t){let n=F.get(e);if(!n)return!1;let r=n.bundleTags.get(t);return r?n.remoteTags.has(r):!1}async function Yo(e,t){let n=F.get(e);!n||n.bundleTags.has(t)||(n.ready&&!n.keys&&await n.ready,n.keys&&(n.bundleTags.set(t,await pe(n.keys.tagKey,t)),n.disposed||fe()))}function Xo(e){return Gt.add(e),()=>Gt.delete(e)}function Qo(e){return it.add(e),()=>it.delete(e)}function Zo(e){return Fe.add(e),()=>Fe.delete(e)}function es(e){let t=F.get(e);return t?t.remoteTags.size:0}async function ts(e){let t=F.get(e);return t?(t.ready&&!t.session&&await t.ready,t.session?(await ct(t),Array.from(t.remoteNameByTag.values())):[]):[]}async function ns(e){let t=F.get(e);return t?(t.ready&&!t.session&&await t.ready,t.session?(await ct(t),Array.from(t.remoteBundleByTag.values())):[]):[]}function rs(e,t){let n=F.get(e);if(n)return n.remoteBundleNameByIntegrity.get(t)}async function ct(e){if(!e.session||e.disposed)return;let t=[];for(let n of e.remoteTags){if(e.remoteNameByTag.has(n))continue;if(e.remoteBundleByTag.has(n)){let o=e.remoteBundleByTag.get(n);if(e.remoteBundleNameByIntegrity.has(o))continue}let r=e.inFlight.get(n);r||(r=e.session.fetchByTag(n).then(async o=>(e.inFlight.delete(n),!o||e.disposed||!e.remoteTags.has(n)?null:o.kind==="bundle"?(e.remoteBundleByTag.set(n,o.integrity),e.bundleTags.set(o.integrity,n),o.name&&e.remoteBundleNameByIntegrity.set(o.integrity,o.name),await ss(e,n,o.integrity,o.name,o.content),null):(e.remoteNameByTag.set(n,o.fileName),e.fileTags.set(o.fileName,n),await os(e,n,o.fileName,o.content),null)),()=>(e.inFlight.delete(n),null)),e.inFlight.set(n,r)),t.push(r)}t.length!==0&&(await Promise.all(t),!e.disposed&&(Jt(e.workspaceId,e),fe()))}async function os(e,t,n,r){if(e.disposed||!e.remoteTags.has(t))return;let o=Pe().find(l=>l.id===e.workspaceId);if(o&&Array.isArray(o.reports)&&o.reports.includes(n))return;let s;try{let l=await pr();if(e.disposed||!e.remoteTags.has(t))return;s=l.includes(n)}catch(l){console.warn(`auto-download: listFiles failed before saving "${n}":`,l);return}if(s){if(e.disposed||!e.remoteTags.has(t))return;try{await zt(n,e.workspaceId)}catch(l){console.warn(`auto-download: attaching local "${n}" to workspace "${e.workspaceId}" failed:`,l);return}if(e.disposed)return;for(let l of it)try{l(e.workspaceId,n)}catch{}return}let i;try{i=Ce(await gr(r))}catch(l){console.warn(`auto-download: gunzip/decode of "${n}" failed (likely forged peer payload):`,l);return}if(e.disposed||!e.remoteTags.has(t))return;let a=fr(i);if(a.recognized){try{if(await hr(n,r),e.disposed||!e.remoteTags.has(t)||(dr(n,a.count,a.source),!e.remoteTags.has(t)))return;await zt(n,e.workspaceId)}catch(l){console.warn(`auto-download: persisting "${n}" to workspace "${e.workspaceId}" failed:`,l);return}if(!e.disposed)for(let l of it)try{l(e.workspaceId,n)}catch{}}}async function ss(e,t,n,r,o){if(e.disposed||!e.remoteTags.has(t))return;let s;try{s=await lt()}catch(f){console.warn(`auto-download: listBundles failed before saving bundle "${n}":`,f);return}if(e.disposed||!e.remoteTags.has(t))return;if(s.some(f=>f.integrity===n)){try{await qt(n,e.workspaceId)}catch(h){console.warn("auto-download: attach pre-existing bundle failed:",h);return}if(e.disposed)return;let f=s.find(h=>h.integrity===n)?.name??"";for(let h of Fe)try{h(e.workspaceId,n,f)}catch{}return}let i=await Dt(o);if(e.disposed||!e.remoteTags.has(t))return;if(i!==n){console.warn(`auto-download: bundle integrity mismatch (claimed ${n}, got ${i}) \u2014 refusing to save`);return}let a=r&&r.length>0?r:`bundle-${n.slice(7,15)}`,l=mr(a);try{if(await Yt(l,o),e.disposed||!e.remoteTags.has(t))return;await qt(n,e.workspaceId)}catch(f){console.warn(`auto-download: persisting bundle "${n}" to workspace "${e.workspaceId}" failed:`,f);return}if(!e.disposed)for(let f of Fe)try{f(e.workspaceId,n,l)}catch{}}async function We(e){if(e.ready&&!e.session&&await e.ready,!e.session)throw new Error(`Objstore session is not connected${Do(e.err)}`)}async function Qt(e){let t=await e(null);return!t.ok&&t.reason==="conflict"&&t.current&&(t=await e(t.current)),t}async function is(e,t){let n=F.get(e);if(!n)throw new Error(`Workspace ${e} is not open`);return await We(n),n.session.fetch(t)}async function as(e,t,n){let r=F.get(e);if(!r)throw new Error(`Workspace ${e} is not open`);return await We(r),await Qt(o=>r.session.put({fileName:t,content:n,prev:o}))}async function cs(e,t){let n=!1;F.has(e)||(_e(e),n=!0);try{let r=F.get(e);if(!r)throw new Error(`Workspace ${e} could not be opened \u2014 not in listWorkspaces()?`);if(await We(r),!r.keys)throw new Error("Objstore session keys missing \u2014 derivation failed during open");r.fileTags.has(t)||r.fileTags.set(t,await le(r.keys.tagKey,t));let o=r.fileTags.get(t),s=await Qt(i=>r.session.delete(t,i));return s.ok&&(r.remoteTags.delete(o),r.remoteNameByTag.delete(o),fe()),s}finally{n&&at(e)}}async function ls(e,t){let n=F.get(e);if(!n)throw new Error(`Workspace ${e} is not open`);await We(n);let r=await yr(t),i=(await lt()).find(a=>a.integrity===t)?.name??`bundle-${t.slice(7,15)}`;return await Qt(a=>n.session.putBundle({integrity:t,name:i,content:r,prev:a}))}async function us(e,t){let n=F.get(e);if(!n)throw new Error(`Workspace ${e} is not open`);await We(n);let r=await n.session.fetchBundle(t);if(!r)return{ok:!1,reason:"not-found"};if(await Dt(r.content)!==t)return{ok:!1,reason:"integrity-mismatch"};let s=r.name&&r.name.length>0?r.name:`bundle-${t.slice(7,15)}`,i=mr(s);await Yt(i,r.content);for(let a of Fe)try{a(e,t,i)}catch{}return{ok:!0,integrity:t,name:i}}export{at as closeWorkspace,cs as deleteFromRemote,ns as discoverRemoteBundleIntegrities,ts as discoverRemoteFileNames,us as fetchBundleFromRemote,is as fetchFile,so as installSyncHost,Jo as isBundleInRemote,qo as isInRemote,Qo as onAutoDownloaded,Zo as onBundleAutoDownloaded,Xo as onChange,_e as openWorkspace,zo as openWorkspaceIds,ls as putBundleToRemote,as as putFile,rs as remoteBundleName,es as remoteCount,_o as setAuthenticationResolver,Io as setHydrationConflictResolver,Ho as setRedraw,ve as triageSync};
11
+ /*! Bundled license information:
12
+
13
+ @noble/ciphers/utils.js:
14
+ (*! noble-ciphers - MIT License (c) 2023 Paul Miller (paulmillr.com) *)
15
+ */