chunktech 0.2.0 → 0.3.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.
@@ -0,0 +1,33 @@
1
+ /**
2
+ * ChunkTech - Extension Loader Generator
3
+ * Creates a self-contained inscription that downloads Chrome/Firefox extensions from Base
4
+ */
5
+ import type { Hash } from 'viem';
6
+ export interface ExtensionBuild {
7
+ txHashes: Hash[];
8
+ sha256: string;
9
+ size: number;
10
+ chunks: number;
11
+ }
12
+ export interface ExtensionManifest {
13
+ version: number;
14
+ name: string;
15
+ extVersion: string;
16
+ developer: string;
17
+ description?: string;
18
+ homepage?: string;
19
+ dataChainId: number;
20
+ dataChain: string;
21
+ chrome?: ExtensionBuild;
22
+ firefox?: ExtensionBuild;
23
+ timestamp: number;
24
+ }
25
+ export interface ExtensionLoaderOptions {
26
+ name: string;
27
+ extVersion: string;
28
+ developer: string;
29
+ description?: string;
30
+ homepage?: string;
31
+ }
32
+ export declare function generateExtensionLoader(manifest: ExtensionManifest): string;
33
+ //# sourceMappingURL=extension-loader.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"extension-loader.d.ts","sourceRoot":"","sources":["../src/extension-loader.ts"],"names":[],"mappings":"AAAA;;;GAGG;AAEH,OAAO,KAAK,EAAE,IAAI,EAAE,MAAM,MAAM,CAAC;AAMjC,MAAM,WAAW,cAAc;IAC7B,QAAQ,EAAE,IAAI,EAAE,CAAC;IACjB,MAAM,EAAE,MAAM,CAAC;IACf,IAAI,EAAE,MAAM,CAAC;IACb,MAAM,EAAE,MAAM,CAAC;CAChB;AAED,MAAM,WAAW,iBAAiB;IAChC,OAAO,EAAE,MAAM,CAAC;IAChB,IAAI,EAAE,MAAM,CAAC;IACb,UAAU,EAAE,MAAM,CAAC;IACnB,SAAS,EAAE,MAAM,CAAC;IAClB,WAAW,CAAC,EAAE,MAAM,CAAC;IACrB,QAAQ,CAAC,EAAE,MAAM,CAAC;IAClB,WAAW,EAAE,MAAM,CAAC;IACpB,SAAS,EAAE,MAAM,CAAC;IAClB,MAAM,CAAC,EAAE,cAAc,CAAC;IACxB,OAAO,CAAC,EAAE,cAAc,CAAC;IACzB,SAAS,EAAE,MAAM,CAAC;CACnB;AAED,MAAM,WAAW,sBAAsB;IACrC,IAAI,EAAE,MAAM,CAAC;IACb,UAAU,EAAE,MAAM,CAAC;IACnB,SAAS,EAAE,MAAM,CAAC;IAClB,WAAW,CAAC,EAAE,MAAM,CAAC;IACrB,QAAQ,CAAC,EAAE,MAAM,CAAC;CACnB;AAMD,wBAAgB,uBAAuB,CACrC,QAAQ,EAAE,iBAAiB,GAC1B,MAAM,CAkRR"}
@@ -0,0 +1,299 @@
1
+ /**
2
+ * ChunkTech - Extension Loader Generator
3
+ * Creates a self-contained inscription that downloads Chrome/Firefox extensions from Base
4
+ */
5
+ // ============================================================================
6
+ // HTML Generator
7
+ // ============================================================================
8
+ export function generateExtensionLoader(manifest) {
9
+ const html = `<!DOCTYPE html>
10
+ <html>
11
+ <head>
12
+ <meta charset="UTF-8">
13
+ <meta name="viewport" content="width=device-width,initial-scale=1">
14
+ <title>${esc(manifest.name)} - On-Chain Extension</title>
15
+ <style>
16
+ *{margin:0;padding:0;box-sizing:border-box}
17
+ body{background:#0a0a0f;color:#fff;font-family:system-ui,-apple-system,sans-serif;min-height:100vh;padding:40px 20px}
18
+ .container{max-width:600px;margin:0 auto}
19
+ h1{font-size:2rem;margin-bottom:8px;background:linear-gradient(135deg,#f7931a,#ff6b35);-webkit-background-clip:text;-webkit-text-fill-color:transparent}
20
+ .version{color:#888;font-size:.9rem;margin-bottom:4px}
21
+ .developer{color:#667eea;font-size:.85rem;margin-bottom:16px;font-family:monospace}
22
+ .desc{color:#aaa;font-size:.95rem;margin-bottom:32px;line-height:1.5}
23
+ .builds{display:grid;grid-template-columns:repeat(auto-fit,minmax(250px,1fr));gap:16px;margin-bottom:32px}
24
+ .build{background:#12121a;border-radius:12px;padding:24px;border:2px solid transparent;transition:border-color .2s}
25
+ .build:hover{border-color:#333}
26
+ .build.detected{border-color:#667eea}
27
+ .build-header{display:flex;align-items:center;gap:12px;margin-bottom:16px}
28
+ .build-icon{width:40px;height:40px;border-radius:8px;display:flex;align-items:center;justify-content:center;font-size:1.5rem}
29
+ .build-icon.chrome{background:linear-gradient(135deg,#4285f4,#34a853,#fbbc05,#ea4335);background-size:200% 200%}
30
+ .build-icon.firefox{background:linear-gradient(135deg,#ff6611,#ff3366)}
31
+ .build-title{font-size:1.1rem;font-weight:600}
32
+ .build-subtitle{font-size:.75rem;color:#666}
33
+ .build-meta{font-size:.8rem;color:#888;margin-bottom:16px}
34
+ .build-btn{width:100%;padding:12px;border:none;border-radius:8px;font-size:.95rem;font-weight:500;cursor:pointer;transition:opacity .2s}
35
+ .build-btn:hover{opacity:.9}
36
+ .build-btn:disabled{opacity:.5;cursor:not-allowed}
37
+ .build-btn.chrome{background:linear-gradient(135deg,#4285f4,#357abd);color:#fff}
38
+ .build-btn.firefox{background:linear-gradient(135deg,#ff6611,#e55200);color:#fff}
39
+ .progress{background:#1a1a2e;border-radius:4px;height:6px;overflow:hidden;margin-top:12px;display:none}
40
+ .progress.show{display:block}
41
+ .progress-bar{background:linear-gradient(90deg,#667eea,#764ba2);height:100%;width:0;transition:width .3s}
42
+ .status{font-size:.8rem;color:#888;margin-top:8px;min-height:1.2em}
43
+ .instructions{background:#12121a;border-radius:12px;padding:24px;margin-bottom:24px}
44
+ .instructions h3{font-size:1rem;margin-bottom:16px;color:#667eea}
45
+ .instructions ol{padding-left:20px;color:#aaa;font-size:.9rem;line-height:1.8}
46
+ .instructions code{background:#1a1a2e;padding:2px 6px;border-radius:4px;font-size:.85rem;color:#fff}
47
+ .tabs{display:flex;gap:8px;margin-bottom:16px}
48
+ .tab{padding:8px 16px;border-radius:6px;background:#1a1a2e;color:#888;cursor:pointer;font-size:.85rem;border:none}
49
+ .tab.active{background:#667eea;color:#fff}
50
+ .tab-content{display:none}
51
+ .tab-content.active{display:block}
52
+ .meta{background:#12121a;border-radius:12px;padding:20px;font-size:.8rem}
53
+ .meta-row{display:flex;justify-content:space-between;padding:8px 0;border-bottom:1px solid #1a1a2e}
54
+ .meta-row:last-child{border:none}
55
+ .meta-label{color:#667eea}
56
+ .meta-value{color:#888;font-family:monospace}
57
+ .badge{display:inline-block;background:#1a1a2e;color:#667eea;padding:4px 8px;border-radius:4px;font-size:.7rem;margin-left:8px}
58
+ .error{color:#ff6b6b;background:#2a1a1a;padding:12px;border-radius:8px;margin-top:12px;font-size:.85rem;display:none}
59
+ .detected-badge{background:#667eea;color:#fff;font-size:.7rem;padding:2px 8px;border-radius:4px;margin-left:8px}
60
+ a{color:#667eea}
61
+ </style>
62
+ </head>
63
+ <body>
64
+ <div class="container">
65
+ <h1>${esc(manifest.name)}</h1>
66
+ <div class="version">v${esc(manifest.extVersion)}</div>
67
+ <div class="developer">${esc(manifest.developer)}${manifest.homepage ? ` · <a href="${esc(manifest.homepage)}" target="_blank">homepage</a>` : ''}</div>
68
+ <p class="desc">${esc(manifest.description || 'A censorship-resistant browser extension stored permanently on-chain.')}</p>
69
+
70
+ <div class="builds">
71
+ ${manifest.chrome ? `
72
+ <div class="build" id="chrome-build">
73
+ <div class="build-header">
74
+ <div class="build-icon chrome">🌐</div>
75
+ <div>
76
+ <div class="build-title">Chrome / Brave / Edge<span class="detected-badge" id="chrome-detected" style="display:none">Detected</span></div>
77
+ <div class="build-subtitle">Chromium-based browsers</div>
78
+ </div>
79
+ </div>
80
+ <div class="build-meta">${formatBytes(manifest.chrome.size)} · ${manifest.chrome.chunks} chunks · SHA256: ${manifest.chrome.sha256.slice(0, 8)}...</div>
81
+ <button class="build-btn chrome" id="chrome-btn" onclick="download('chrome')">Download for Chrome</button>
82
+ <div class="progress" id="chrome-progress"><div class="progress-bar" id="chrome-progress-bar"></div></div>
83
+ <div class="status" id="chrome-status"></div>
84
+ <div class="error" id="chrome-error"></div>
85
+ </div>
86
+ ` : ''}
87
+ ${manifest.firefox ? `
88
+ <div class="build" id="firefox-build">
89
+ <div class="build-header">
90
+ <div class="build-icon firefox">🦊</div>
91
+ <div>
92
+ <div class="build-title">Firefox<span class="detected-badge" id="firefox-detected" style="display:none">Detected</span></div>
93
+ <div class="build-subtitle">Mozilla Firefox</div>
94
+ </div>
95
+ </div>
96
+ <div class="build-meta">${formatBytes(manifest.firefox.size)} · ${manifest.firefox.chunks} chunks · SHA256: ${manifest.firefox.sha256.slice(0, 8)}...</div>
97
+ <button class="build-btn firefox" id="firefox-btn" onclick="download('firefox')">Download for Firefox</button>
98
+ <div class="progress" id="firefox-progress"><div class="progress-bar" id="firefox-progress-bar"></div></div>
99
+ <div class="status" id="firefox-status"></div>
100
+ <div class="error" id="firefox-error"></div>
101
+ </div>
102
+ ` : ''}
103
+ </div>
104
+
105
+ <div class="instructions">
106
+ <h3>Installation Instructions</h3>
107
+ <div class="tabs">
108
+ <button class="tab active" onclick="showTab('chrome-inst')">Chrome / Brave</button>
109
+ <button class="tab" onclick="showTab('firefox-inst')">Firefox</button>
110
+ </div>
111
+ <div class="tab-content active" id="chrome-inst">
112
+ <ol>
113
+ <li>Download the extension above</li>
114
+ <li>Unzip the downloaded file</li>
115
+ <li>Open <code>chrome://extensions</code> in your browser</li>
116
+ <li>Enable <strong>"Developer mode"</strong> (toggle in top right)</li>
117
+ <li>Click <strong>"Load unpacked"</strong></li>
118
+ <li>Select the unzipped folder</li>
119
+ </ol>
120
+ </div>
121
+ <div class="tab-content" id="firefox-inst">
122
+ <ol>
123
+ <li>Download the extension above</li>
124
+ <li>Open <code>about:addons</code> in Firefox</li>
125
+ <li>Click the gear icon ⚙️</li>
126
+ <li>Select <strong>"Install Add-on From File..."</strong></li>
127
+ <li>Choose the downloaded .xpi file</li>
128
+ <li>Click <strong>"Add"</strong> when prompted</li>
129
+ </ol>
130
+ </div>
131
+ </div>
132
+
133
+ <div class="meta">
134
+ <div class="meta-row"><span class="meta-label">Data Chain</span><span class="meta-value">${manifest.dataChain} (${manifest.dataChainId})</span></div>
135
+ <div class="meta-row"><span class="meta-label">Stored</span><span class="meta-value">${new Date(manifest.timestamp).toISOString().split('T')[0]}</span></div>
136
+ <div class="meta-row"><span class="meta-label">Format</span><span class="meta-value">ChunkTech v${manifest.version}</span></div>
137
+ </div>
138
+ </div>
139
+
140
+ <script>
141
+ const M=${JSON.stringify(manifest)};
142
+ // RPC discovery via calldata-rpc (https://github.com/chopperdaddy/calldata-rpc)
143
+ // Decentralized RPC endpoints hosted on IPFS via ENS
144
+ const TESTNET_RPC={84532:["https://sepolia.base.org"],421614:["https://sepolia-rollup.arbitrum.io/rpc"],11155111:["https://rpc.sepolia.org"]};
145
+ const rpcCache={};
146
+
147
+ async function getRPCs(chainId){
148
+ if(rpcCache[chainId])return rpcCache[chainId];
149
+ if(TESTNET_RPC[chainId]){rpcCache[chainId]=TESTNET_RPC[chainId];return TESTNET_RPC[chainId];}
150
+ const urls=["https://rpcs.calldata.eth.limo","https://rpcs.calldata.eth.link"];
151
+ for(const url of urls){
152
+ try{
153
+ const r=await fetch(url);
154
+ if(r.ok){const d=await r.json();if(d[chainId]&&Array.isArray(d[chainId])){rpcCache[chainId]=d[chainId];return d[chainId];}}
155
+ }catch(e){}
156
+ }
157
+ return[];
158
+ }
159
+
160
+ // Detect browser
161
+ const isFirefox=/Firefox/.test(navigator.userAgent);
162
+ const isChrome=/Chrome/.test(navigator.userAgent)&&!/Edg/.test(navigator.userAgent);
163
+ const isBrave=navigator.brave!==undefined;
164
+ const isEdge=/Edg/.test(navigator.userAgent);
165
+
166
+ if((isChrome||isBrave||isEdge)&&document.getElementById('chrome-detected')){
167
+ document.getElementById('chrome-detected').style.display='inline';
168
+ document.getElementById('chrome-build').classList.add('detected');
169
+ }
170
+ if(isFirefox&&document.getElementById('firefox-detected')){
171
+ document.getElementById('firefox-detected').style.display='inline';
172
+ document.getElementById('firefox-build').classList.add('detected');
173
+ }
174
+
175
+ function showTab(id){
176
+ document.querySelectorAll('.tab').forEach(t=>t.classList.remove('active'));
177
+ document.querySelectorAll('.tab-content').forEach(t=>t.classList.remove('active'));
178
+ document.getElementById(id).classList.add('active');
179
+ event.target.classList.add('active');
180
+ }
181
+
182
+ async function fetchChunkFromRpc(rpc,hash){
183
+ const r=await fetch(rpc,{method:"POST",headers:{"Content-Type":"application/json"},body:JSON.stringify({jsonrpc:"2.0",method:"eth_getTransactionByHash",params:[hash],id:1})});
184
+ const j=await r.json();
185
+ if(!j.result||!j.result.input)throw new Error("TX not found");
186
+ const hex=j.result.input.slice(2);
187
+ const bytes=new Uint8Array(hex.length/2);
188
+ for(let i=0;i<hex.length;i+=2)bytes[i/2]=parseInt(hex.substr(i,2),16);
189
+ const str=new TextDecoder().decode(bytes);
190
+ const prefix="data:chunk,";
191
+ if(!str.startsWith(prefix))throw new Error("Invalid chunk format");
192
+ const payload=JSON.parse(atob(str.slice(prefix.length)));
193
+ const binary=atob(payload.data);
194
+ const data=new Uint8Array(binary.length);
195
+ for(let i=0;i<binary.length;i++)data[i]=binary.charCodeAt(i);
196
+ return{part:payload.part,data};
197
+ }
198
+
199
+ async function fetchChunk(rpcs,hash){
200
+ let lastErr;
201
+ for(const rpc of rpcs){
202
+ try{return await fetchChunkFromRpc(rpc,hash);}catch(e){lastErr=e;}
203
+ }
204
+ throw new Error("All RPCs failed for "+hash.slice(0,10)+"...: "+(lastErr?.message||"unknown"));
205
+ }
206
+
207
+ async function download(browser){
208
+ const build=M[browser];
209
+ if(!build)return;
210
+
211
+ const btn=document.getElementById(browser+'-btn');
212
+ const progress=document.getElementById(browser+'-progress');
213
+ const progressBar=document.getElementById(browser+'-progress-bar');
214
+ const status=document.getElementById(browser+'-status');
215
+ const error=document.getElementById(browser+'-error');
216
+
217
+ btn.disabled=true;
218
+ progress.classList.add('show');
219
+ error.style.display='none';
220
+
221
+ try{
222
+ status.textContent="Discovering RPC endpoints...";
223
+ const rpcs=await getRPCs(M.dataChainId);
224
+ if(!rpcs.length){throw new Error("No RPC endpoints for chain "+M.dataChainId);}
225
+
226
+ const chunks=[];
227
+ for(let i=0;i<build.txHashes.length;i++){
228
+ status.textContent="Fetching chunk "+(i+1)+"/"+build.chunks+" from "+M.dataChain+"...";
229
+ const chunk=await fetchChunk(rpcs,build.txHashes[i]);
230
+ chunks.push(chunk);
231
+ progressBar.style.width=((i+1)/build.chunks*90)+"%";
232
+ }
233
+
234
+ status.textContent="Reassembling...";
235
+ chunks.sort((a,b)=>a.part-b.part);
236
+ const total=chunks.reduce((s,c)=>s+c.data.length,0);
237
+ const result=new Uint8Array(total);
238
+ let offset=0;
239
+ for(const c of chunks){result.set(c.data,offset);offset+=c.data.length;}
240
+
241
+ status.textContent="Verifying SHA256...";
242
+ const hashBuf=await crypto.subtle.digest("SHA-256",result);
243
+ const hash=Array.from(new Uint8Array(hashBuf)).map(b=>b.toString(16).padStart(2,"0")).join("");
244
+
245
+ if(hash!==build.sha256){
246
+ throw new Error("Hash mismatch! File may be corrupted.");
247
+ }
248
+
249
+ progressBar.style.width="100%";
250
+ status.textContent="Verified! Starting download...";
251
+
252
+ const ext=browser==='firefox'?'xpi':'zip';
253
+ const mime=browser==='firefox'?'application/x-xpinstall':'application/zip';
254
+ const filename=M.name.toLowerCase().replace(/[^a-z0-9]/g,'-')+'-v'+M.extVersion+'.'+ext;
255
+
256
+ const blob=new Blob([result],{type:mime});
257
+ const url=URL.createObjectURL(blob);
258
+ const a=document.createElement('a');
259
+ a.href=url;
260
+ a.download=filename;
261
+ a.click();
262
+ URL.revokeObjectURL(url);
263
+
264
+ status.textContent="Download complete! ✓";
265
+ btn.textContent="Download Again";
266
+ btn.disabled=false;
267
+
268
+ }catch(e){
269
+ error.textContent="Error: "+e.message;
270
+ error.style.display="block";
271
+ status.textContent="Failed";
272
+ btn.disabled=false;
273
+ }
274
+ }
275
+
276
+ function formatBytes(b){if(b<1024)return b+" B";if(b<1048576)return(b/1024).toFixed(1)+" KB";return(b/1048576).toFixed(2)+" MB";}
277
+ </script>
278
+ </body>
279
+ </html>`;
280
+ return `data:text/html;base64,${btoa(unescape(encodeURIComponent(html)))}`;
281
+ }
282
+ // ============================================================================
283
+ // Utilities
284
+ // ============================================================================
285
+ function esc(str) {
286
+ return str
287
+ .replace(/&/g, '&amp;')
288
+ .replace(/</g, '&lt;')
289
+ .replace(/>/g, '&gt;')
290
+ .replace(/"/g, '&quot;');
291
+ }
292
+ function formatBytes(bytes) {
293
+ if (bytes < 1024)
294
+ return bytes + ' B';
295
+ if (bytes < 1048576)
296
+ return (bytes / 1024).toFixed(1) + ' KB';
297
+ return (bytes / 1048576).toFixed(2) + ' MB';
298
+ }
299
+ //# sourceMappingURL=extension-loader.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"extension-loader.js","sourceRoot":"","sources":["../src/extension-loader.ts"],"names":[],"mappings":"AAAA;;;GAGG;AAqCH,+EAA+E;AAC/E,iBAAiB;AACjB,+EAA+E;AAE/E,MAAM,UAAU,uBAAuB,CACrC,QAA2B;IAE3B,MAAM,IAAI,GAAG;;;;;SAKN,GAAG,CAAC,QAAQ,CAAC,IAAI,CAAC;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;MAmDrB,GAAG,CAAC,QAAQ,CAAC,IAAI,CAAC;wBACA,GAAG,CAAC,QAAQ,CAAC,UAAU,CAAC;yBACvB,GAAG,CAAC,QAAQ,CAAC,SAAS,CAAC,GAAG,QAAQ,CAAC,QAAQ,CAAC,CAAC,CAAC,eAAe,GAAG,CAAC,QAAQ,CAAC,QAAQ,CAAC,gCAAgC,CAAC,CAAC,CAAC,EAAE;kBAC/H,GAAG,CAAC,QAAQ,CAAC,WAAW,IAAI,uEAAuE,CAAC;;;EAGpH,QAAQ,CAAC,MAAM,CAAC,CAAC,CAAC;;;;;;;;;0BASM,WAAW,CAAC,QAAQ,CAAC,MAAM,CAAC,IAAI,CAAC,MAAM,QAAQ,CAAC,MAAM,CAAC,MAAM,qBAAqB,QAAQ,CAAC,MAAM,CAAC,MAAM,CAAC,KAAK,CAAC,CAAC,EAAC,CAAC,CAAC;;;;;;CAM5I,CAAC,CAAC,CAAC,EAAE;EACJ,QAAQ,CAAC,OAAO,CAAC,CAAC,CAAC;;;;;;;;;0BASK,WAAW,CAAC,QAAQ,CAAC,OAAO,CAAC,IAAI,CAAC,MAAM,QAAQ,CAAC,OAAO,CAAC,MAAM,qBAAqB,QAAQ,CAAC,OAAO,CAAC,MAAM,CAAC,KAAK,CAAC,CAAC,EAAC,CAAC,CAAC;;;;;;CAM/I,CAAC,CAAC,CAAC,EAAE;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;2FAgCqF,QAAQ,CAAC,SAAS,KAAK,QAAQ,CAAC,WAAW;uFAC/C,IAAI,IAAI,CAAC,QAAQ,CAAC,SAAS,CAAC,CAAC,WAAW,EAAE,CAAC,KAAK,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC;kGAC7C,QAAQ,CAAC,OAAO;;;;;UAKxG,IAAI,CAAC,SAAS,CAAC,QAAQ,CAAC;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;QA0I1B,CAAC;IAEP,OAAO,yBAAyB,IAAI,CAAC,QAAQ,CAAC,kBAAkB,CAAC,IAAI,CAAC,CAAC,CAAC,EAAE,CAAC;AAC7E,CAAC;AAED,+EAA+E;AAC/E,YAAY;AACZ,+EAA+E;AAE/E,SAAS,GAAG,CAAC,GAAW;IACtB,OAAO,GAAG;SACP,OAAO,CAAC,IAAI,EAAE,OAAO,CAAC;SACtB,OAAO,CAAC,IAAI,EAAE,MAAM,CAAC;SACrB,OAAO,CAAC,IAAI,EAAE,MAAM,CAAC;SACrB,OAAO,CAAC,IAAI,EAAE,QAAQ,CAAC,CAAC;AAC7B,CAAC;AAED,SAAS,WAAW,CAAC,KAAa;IAChC,IAAI,KAAK,GAAG,IAAI;QAAE,OAAO,KAAK,GAAG,IAAI,CAAC;IACtC,IAAI,KAAK,GAAG,OAAO;QAAE,OAAO,CAAC,KAAK,GAAG,IAAI,CAAC,CAAC,OAAO,CAAC,CAAC,CAAC,GAAG,KAAK,CAAC;IAC9D,OAAO,CAAC,KAAK,GAAG,OAAO,CAAC,CAAC,OAAO,CAAC,CAAC,CAAC,GAAG,KAAK,CAAC;AAC9C,CAAC"}
@@ -0,0 +1,69 @@
1
+ /**
2
+ * ChunkTech - Extension Uploader
3
+ * Upload Chrome + Firefox builds to Base, create inscription on Ethereum
4
+ */
5
+ import type { WalletClient, Hash } from 'viem';
6
+ import type { ExtensionManifest } from './extension-loader.js';
7
+ export interface ExtensionUploaderConfig {
8
+ /** Wallet for the inscription (mainnet/sepolia) */
9
+ keyWalletClient: WalletClient;
10
+ /** Wallet for data storage (base/baseSepolia) */
11
+ dataWalletClient: WalletClient;
12
+ /** Chain for inscription */
13
+ keyChain: 'ethereum' | 'sepolia';
14
+ /** Chain for data */
15
+ dataChain: 'base' | 'baseSepolia';
16
+ /** Custom RPC URLs */
17
+ keyRpcUrl?: string;
18
+ dataRpcUrl?: string;
19
+ }
20
+ export interface ExtensionUploadInput {
21
+ /** Extension name */
22
+ name: string;
23
+ /** Extension version (e.g., "1.2.0") */
24
+ version: string;
25
+ /** Developer address or ENS */
26
+ developer: string;
27
+ /** Description */
28
+ description?: string;
29
+ /** Homepage URL */
30
+ homepage?: string;
31
+ /** Chrome build (zipped extension folder) */
32
+ chrome?: Uint8Array | ArrayBuffer;
33
+ /** Firefox build (.xpi file) */
34
+ firefox?: Uint8Array | ArrayBuffer;
35
+ }
36
+ export interface ExtensionUploadResult {
37
+ /** Inscription transaction hash (the "installer") */
38
+ inscriptionTxHash: Hash;
39
+ /** Chain ID for inscription */
40
+ inscriptionChainId: number;
41
+ /** Chrome build tx hashes (if uploaded) */
42
+ chromeTxHashes?: Hash[];
43
+ /** Firefox build tx hashes (if uploaded) */
44
+ firefoxTxHashes?: Hash[];
45
+ /** Data chain ID */
46
+ dataChainId: number;
47
+ /** Full manifest */
48
+ manifest: ExtensionManifest;
49
+ }
50
+ export type UploadProgressPhase = 'chrome' | 'firefox' | 'inscription';
51
+ export declare class ExtensionUploader {
52
+ private keyWalletClient;
53
+ private dataWalletClient;
54
+ private keyPublicClient;
55
+ private dataPublicClient;
56
+ private keyChain;
57
+ private dataChain;
58
+ constructor(config: ExtensionUploaderConfig);
59
+ /**
60
+ * Upload extension builds and create inscription
61
+ */
62
+ upload(input: ExtensionUploadInput, options?: {
63
+ onProgress?: (phase: UploadProgressPhase, sent: number, total: number) => void;
64
+ confirmations?: number;
65
+ }): Promise<ExtensionUploadResult>;
66
+ private uploadBuild;
67
+ private sendInscription;
68
+ }
69
+ //# sourceMappingURL=extension-uploader.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"extension-uploader.d.ts","sourceRoot":"","sources":["../src/extension-uploader.ts"],"names":[],"mappings":"AAAA;;;GAGG;AAGH,OAAO,KAAK,EAAE,YAAY,EAAE,IAAI,EAAE,MAAM,MAAM,CAAC;AAG/C,OAAO,KAAK,EAAE,iBAAiB,EAA0C,MAAM,uBAAuB,CAAC;AAWvG,MAAM,WAAW,uBAAuB;IACtC,mDAAmD;IACnD,eAAe,EAAE,YAAY,CAAC;IAC9B,iDAAiD;IACjD,gBAAgB,EAAE,YAAY,CAAC;IAC/B,4BAA4B;IAC5B,QAAQ,EAAE,UAAU,GAAG,SAAS,CAAC;IACjC,qBAAqB;IACrB,SAAS,EAAE,MAAM,GAAG,aAAa,CAAC;IAClC,sBAAsB;IACtB,SAAS,CAAC,EAAE,MAAM,CAAC;IACnB,UAAU,CAAC,EAAE,MAAM,CAAC;CACrB;AAED,MAAM,WAAW,oBAAoB;IACnC,qBAAqB;IACrB,IAAI,EAAE,MAAM,CAAC;IACb,wCAAwC;IACxC,OAAO,EAAE,MAAM,CAAC;IAChB,+BAA+B;IAC/B,SAAS,EAAE,MAAM,CAAC;IAClB,kBAAkB;IAClB,WAAW,CAAC,EAAE,MAAM,CAAC;IACrB,mBAAmB;IACnB,QAAQ,CAAC,EAAE,MAAM,CAAC;IAClB,6CAA6C;IAC7C,MAAM,CAAC,EAAE,UAAU,GAAG,WAAW,CAAC;IAClC,gCAAgC;IAChC,OAAO,CAAC,EAAE,UAAU,GAAG,WAAW,CAAC;CACpC;AAED,MAAM,WAAW,qBAAqB;IACpC,qDAAqD;IACrD,iBAAiB,EAAE,IAAI,CAAC;IACxB,+BAA+B;IAC/B,kBAAkB,EAAE,MAAM,CAAC;IAC3B,2CAA2C;IAC3C,cAAc,CAAC,EAAE,IAAI,EAAE,CAAC;IACxB,4CAA4C;IAC5C,eAAe,CAAC,EAAE,IAAI,EAAE,CAAC;IACzB,oBAAoB;IACpB,WAAW,EAAE,MAAM,CAAC;IACpB,oBAAoB;IACpB,QAAQ,EAAE,iBAAiB,CAAC;CAC7B;AAED,MAAM,MAAM,mBAAmB,GAAG,QAAQ,GAAG,SAAS,GAAG,aAAa,CAAC;AAavE,qBAAa,iBAAiB;IAC5B,OAAO,CAAC,eAAe,CAAe;IACtC,OAAO,CAAC,gBAAgB,CAAe;IACvC,OAAO,CAAC,eAAe,CAAM;IAC7B,OAAO,CAAC,gBAAgB,CAAM;IAC9B,OAAO,CAAC,QAAQ,CAAyB;IACzC,OAAO,CAAC,SAAS,CAAyB;gBAE9B,MAAM,EAAE,uBAAuB;IAiB3C;;OAEG;IACG,MAAM,CACV,KAAK,EAAE,oBAAoB,EAC3B,OAAO,GAAE;QACP,UAAU,CAAC,EAAE,CAAC,KAAK,EAAE,mBAAmB,EAAE,IAAI,EAAE,MAAM,EAAE,KAAK,EAAE,MAAM,KAAK,IAAI,CAAC;QAC/E,aAAa,CAAC,EAAE,MAAM,CAAC;KACnB,GACL,OAAO,CAAC,qBAAqB,CAAC;YAgEnB,WAAW;YAgCX,eAAe;CAgB9B"}
@@ -0,0 +1,153 @@
1
+ /**
2
+ * ChunkTech - Extension Uploader
3
+ * Upload Chrome + Firefox builds to Base, create inscription on Ethereum
4
+ */
5
+ import { createPublicClient, http } from 'viem';
6
+ import { mainnet, base, sepolia, baseSepolia } from 'viem/chains';
7
+ import { generateExtensionLoader } from './extension-loader.js';
8
+ import { chunkData } from './chunker.js';
9
+ import { sendChunks } from './sender.js';
10
+ import { waitForTransactions } from './tracker.js';
11
+ import { SUPPORTED_CHAINS } from './types.js';
12
+ // ============================================================================
13
+ // Uploader Class
14
+ // ============================================================================
15
+ const CHAINS = {
16
+ ethereum: mainnet,
17
+ base: base,
18
+ sepolia: sepolia,
19
+ baseSepolia: baseSepolia,
20
+ };
21
+ export class ExtensionUploader {
22
+ keyWalletClient;
23
+ dataWalletClient;
24
+ keyPublicClient;
25
+ dataPublicClient;
26
+ keyChain;
27
+ dataChain;
28
+ constructor(config) {
29
+ this.keyChain = config.keyChain;
30
+ this.dataChain = config.dataChain;
31
+ this.keyWalletClient = config.keyWalletClient;
32
+ this.dataWalletClient = config.dataWalletClient;
33
+ this.keyPublicClient = createPublicClient({
34
+ chain: CHAINS[config.keyChain],
35
+ transport: http(config.keyRpcUrl),
36
+ });
37
+ this.dataPublicClient = createPublicClient({
38
+ chain: CHAINS[config.dataChain],
39
+ transport: http(config.dataRpcUrl),
40
+ });
41
+ }
42
+ /**
43
+ * Upload extension builds and create inscription
44
+ */
45
+ async upload(input, options = {}) {
46
+ const { onProgress, confirmations = 1 } = options;
47
+ if (!input.chrome && !input.firefox) {
48
+ throw new Error('At least one build (chrome or firefox) is required');
49
+ }
50
+ const manifest = {
51
+ version: 1,
52
+ name: input.name,
53
+ extVersion: input.version,
54
+ developer: input.developer,
55
+ description: input.description,
56
+ homepage: input.homepage,
57
+ dataChainId: SUPPORTED_CHAINS[this.dataChain].id,
58
+ dataChain: this.dataChain,
59
+ timestamp: Date.now(),
60
+ };
61
+ let chromeTxHashes;
62
+ let firefoxTxHashes;
63
+ // Upload Chrome build
64
+ if (input.chrome) {
65
+ const bytes = toUint8Array(input.chrome);
66
+ const build = await this.uploadBuild(bytes, 'chrome', onProgress, confirmations);
67
+ manifest.chrome = build.meta;
68
+ chromeTxHashes = build.txHashes;
69
+ }
70
+ // Upload Firefox build
71
+ if (input.firefox) {
72
+ const bytes = toUint8Array(input.firefox);
73
+ const build = await this.uploadBuild(bytes, 'firefox', onProgress, confirmations);
74
+ manifest.firefox = build.meta;
75
+ firefoxTxHashes = build.txHashes;
76
+ }
77
+ // Generate and upload inscription
78
+ const inscriptionCalldata = generateExtensionLoader(manifest);
79
+ const inscriptionTxHash = await this.sendInscription(inscriptionCalldata);
80
+ if (onProgress) {
81
+ onProgress('inscription', 1, 1);
82
+ }
83
+ // Wait for inscription confirmation
84
+ if (confirmations > 0) {
85
+ await this.keyPublicClient.waitForTransactionReceipt({
86
+ hash: inscriptionTxHash,
87
+ confirmations,
88
+ });
89
+ }
90
+ return {
91
+ inscriptionTxHash,
92
+ inscriptionChainId: SUPPORTED_CHAINS[this.keyChain].id,
93
+ chromeTxHashes,
94
+ firefoxTxHashes,
95
+ dataChainId: SUPPORTED_CHAINS[this.dataChain].id,
96
+ manifest,
97
+ };
98
+ }
99
+ async uploadBuild(data, phase, onProgress, confirmations = 1) {
100
+ const sha256 = await computeSha256(data);
101
+ const chunked = chunkData(data);
102
+ const results = await sendChunks(this.dataWalletClient, chunked.chunks, {
103
+ onProgress: onProgress
104
+ ? (sent, total) => onProgress(phase, sent, total)
105
+ : undefined,
106
+ });
107
+ const txHashes = results.map((r) => r.hash);
108
+ if (confirmations > 0) {
109
+ await waitForTransactions(this.dataPublicClient, results, { confirmations });
110
+ }
111
+ return {
112
+ meta: {
113
+ txHashes,
114
+ sha256,
115
+ size: data.length,
116
+ chunks: chunked.total,
117
+ },
118
+ txHashes,
119
+ };
120
+ }
121
+ async sendInscription(calldata) {
122
+ const account = this.keyWalletClient.account;
123
+ if (!account) {
124
+ throw new Error('WalletClient must have an account');
125
+ }
126
+ const hexData = stringToHex(calldata);
127
+ return this.keyWalletClient.sendTransaction({
128
+ account,
129
+ chain: this.keyWalletClient.chain,
130
+ to: account.address,
131
+ value: 0n,
132
+ data: hexData,
133
+ });
134
+ }
135
+ }
136
+ // ============================================================================
137
+ // Utilities
138
+ // ============================================================================
139
+ function toUint8Array(data) {
140
+ return data instanceof ArrayBuffer ? new Uint8Array(data) : data;
141
+ }
142
+ async function computeSha256(data) {
143
+ const hashBuffer = await crypto.subtle.digest('SHA-256', data);
144
+ const hashArray = Array.from(new Uint8Array(hashBuffer));
145
+ return hashArray.map((b) => b.toString(16).padStart(2, '0')).join('');
146
+ }
147
+ function stringToHex(str) {
148
+ const bytes = new TextEncoder().encode(str);
149
+ return '0x' + Array.from(bytes)
150
+ .map((b) => b.toString(16).padStart(2, '0'))
151
+ .join('');
152
+ }
153
+ //# sourceMappingURL=extension-uploader.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"extension-uploader.js","sourceRoot":"","sources":["../src/extension-uploader.ts"],"names":[],"mappings":"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"}
package/dist/index.d.ts CHANGED
@@ -59,4 +59,8 @@ export { generateKeyPair, generateEncryptionKeys, deriveKeysFromSignature, encry
59
59
  export { MAX_CHUNK_SIZE, CHUNK_PREFIX, CHUNK_ENCRYPTED_PREFIX, SUPPORTED_CHAINS } from './types.js';
60
60
  export { CrossChainUploader, generateHtmlLoader } from './crosschain.js';
61
61
  export type { ChainName, CrossChainConfig, CrossChainUploadOptions, CrossChainUploadResult, CrossChainManifest, } from './types.js';
62
+ export { generateExtensionLoader } from './extension-loader.js';
63
+ export type { ExtensionBuild, ExtensionManifest, ExtensionLoaderOptions, } from './extension-loader.js';
64
+ export { ExtensionUploader } from './extension-uploader.js';
65
+ export type { ExtensionUploaderConfig, ExtensionUploadInput, ExtensionUploadResult, UploadProgressPhase, } from './extension-uploader.js';
62
66
  //# sourceMappingURL=index.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAAA;;;;;GAKG;AAGH,OAAO,KAAK,EAAgB,YAAY,EAAE,IAAI,EAAE,KAAK,EAAE,MAAM,MAAM,CAAC;AAGpE,OAAO,KAAK,EACV,eAAe,EACf,aAAa,EACb,YAAY,EACZ,eAAe,EACf,cAAc,EAIf,MAAM,YAAY,CAAC;AAIpB,OAAO,EAAuB,kBAAkB,EAAE,MAAM,cAAc,CAAC;AACvE,OAAO,EAAsB,kBAAkB,EAAE,MAAM,gBAAgB,CAAC;AAoBxE,qBAAa,SAAS;IACpB,OAAO,CAAC,YAAY,CAAe;IACnC,OAAO,CAAC,YAAY,CAAe;IACnC,OAAO,CAAC,KAAK,CAAQ;gBAET,MAAM,EAAE,eAAe;IAYnC,OAAO,CAAC,WAAW;IAQnB;;OAEG;IACG,MAAM,CACV,IAAI,EAAE,UAAU,GAAG,WAAW,GAAG,MAAM,EACvC,OAAO,GAAE,aAAkB,GAC1B,OAAO,CAAC,YAAY,CAAC;IA6CxB;;OAEG;IACG,QAAQ,CACZ,QAAQ,EAAE,IAAI,EAAE,EAChB,OAAO,GAAE,eAAoB,GAC5B,OAAO,CAAC,cAAc,CAAC;IA6B1B;;OAEG;IACH,qBAAqB,CAAC,OAAO,GAAE,eAAoB,GAAG,kBAAkB;IAIxE;;OAEG;IACH,qBAAqB,CAAC,OAAO,GAAE;QAAE,YAAY,CAAC,EAAE,MAAM,CAAC;QAAC,aAAa,CAAC,EAAE,MAAM,CAAA;KAAO,GAAG,kBAAkB;IAI1G;;OAEG;IACH,cAAc,CAAC,QAAQ,EAAE,MAAM,GAAG,MAAM;IAIxC;;OAEG;IACH,QAAQ,IAAI,KAAK;IAIjB;;OAEG;IACH,eAAe,IAAI,YAAY;CAGhC;AAOD,OAAO,EAAE,SAAS,IAAI,OAAO,EAAE,CAAC;AAGhC,YAAY,EACV,eAAe,EACf,aAAa,EACb,YAAY,EACZ,eAAe,EACf,cAAc,EACd,QAAQ,EACR,cAAc,EACd,SAAS,EACT,KAAK,EACL,WAAW,EACX,aAAa,GACd,MAAM,YAAY,CAAC;AAGpB,OAAO,EACL,SAAS,EACT,WAAW,EACX,WAAW,EACX,gBAAgB,EAChB,OAAO,EACP,gBAAgB,EAChB,eAAe,EACf,cAAc,EACd,oBAAoB,EACpB,YAAY,GACb,MAAM,cAAc,CAAC;AAGtB,OAAO,EAAE,SAAS,EAAE,UAAU,EAAE,kBAAkB,EAAE,MAAM,aAAa,CAAC;AACxE,YAAY,EAAE,UAAU,EAAE,WAAW,EAAE,MAAM,aAAa,CAAC;AAG3D,OAAO,EACL,kBAAkB,EAClB,mBAAmB,EACnB,sBAAsB,EACtB,kBAAkB,GACnB,MAAM,cAAc,CAAC;AACtB,YAAY,EAAE,cAAc,EAAE,MAAM,YAAY,CAAC;AAGjD,OAAO,EACL,gBAAgB,EAChB,UAAU,EACV,WAAW,EACX,mBAAmB,EACnB,kBAAkB,EAClB,kBAAkB,GACnB,MAAM,gBAAgB,CAAC;AACxB,YAAY,EAAE,WAAW,EAAE,MAAM,gBAAgB,CAAC;AAGlD,OAAO,EACL,eAAe,EACf,sBAAsB,EACtB,uBAAuB,EACvB,oBAAoB,EACpB,mBAAmB,EACnB,KAAK,EACL,OAAO,EACP,WAAW,EACX,aAAa,GACd,MAAM,aAAa,CAAC;AAGrB,OAAO,EAAE,cAAc,EAAE,YAAY,EAAE,sBAAsB,EAAE,gBAAgB,EAAE,MAAM,YAAY,CAAC;AAGpG,OAAO,EAAE,kBAAkB,EAAE,kBAAkB,EAAE,MAAM,iBAAiB,CAAC;AACzE,YAAY,EACV,SAAS,EACT,gBAAgB,EAChB,uBAAuB,EACvB,sBAAsB,EACtB,kBAAkB,GACnB,MAAM,YAAY,CAAC"}
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"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"}
package/dist/index.js CHANGED
@@ -168,6 +168,9 @@ export { generateKeyPair, generateEncryptionKeys, deriveKeysFromSignature, encry
168
168
  export { MAX_CHUNK_SIZE, CHUNK_PREFIX, CHUNK_ENCRYPTED_PREFIX, SUPPORTED_CHAINS } from './types.js';
169
169
  // Cross-chain utilities
170
170
  export { CrossChainUploader, generateHtmlLoader } from './crosschain.js';
171
+ // Extension utilities
172
+ export { generateExtensionLoader } from './extension-loader.js';
173
+ export { ExtensionUploader } from './extension-uploader.js';
171
174
  // ============================================================================
172
175
  // Utilities
173
176
  // ============================================================================
package/dist/index.js.map CHANGED
@@ -1 +1 @@
1
- {"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAAA;;;;;GAKG;AAEH,OAAO,EAAE,kBAAkB,EAAE,IAAI,EAAE,MAAM,MAAM,CAAC;AAEhD,OAAO,EAAE,OAAO,EAAE,IAAI,EAAE,QAAQ,EAAE,OAAO,EAAE,WAAW,EAAE,eAAe,EAAE,MAAM,aAAa,CAAC;AAa7F,OAAO,EAAE,SAAS,EAAmB,MAAM,cAAc,CAAC;AAC1D,OAAO,EAAE,UAAU,EAAE,MAAM,aAAa,CAAC;AACzC,OAAO,EAAE,mBAAmB,EAAE,kBAAkB,EAAE,MAAM,cAAc,CAAC;AACvE,OAAO,EAAE,kBAAkB,EAAE,kBAAkB,EAAE,MAAM,gBAAgB,CAAC;AACxE,OAAO,EAAE,oBAAoB,EAAuB,MAAM,aAAa,CAAC;AAExE,+EAA+E;AAC/E,iBAAiB;AACjB,+EAA+E;AAE/E,MAAM,MAAM,GAA0B;IACpC,CAAC,EAAE,OAAO;IACV,IAAI,EAAE,IAAI;IACV,KAAK,EAAE,QAAQ;IACf,QAAQ,EAAE,OAAO;IACjB,KAAK,EAAE,WAAW;IAClB,MAAM,EAAE,eAAe;CACxB,CAAC;AAEF,+EAA+E;AAC/E,kBAAkB;AAClB,+EAA+E;AAE/E,MAAM,OAAO,SAAS;IACZ,YAAY,CAAe;IAC3B,YAAY,CAAe;IAC3B,KAAK,CAAQ;IAErB,YAAY,MAAuB;QACjC,IAAI,CAAC,YAAY,GAAG,MAAM,CAAC,YAAY,CAAC;QACxC,IAAI,CAAC,KAAK,GAAG,MAAM,CAAC,KAAK,IAAI,IAAI,CAAC,WAAW,EAAE,CAAC;QAEhD,IAAI,CAAC,YAAY;YACf,MAAM,CAAC,YAAY;gBACnB,kBAAkB,CAAC;oBACjB,KAAK,EAAE,IAAI,CAAC,KAAK;oBACjB,SAAS,EAAE,IAAI,CAAC,MAAM,CAAC,MAAM,CAAC;iBAC/B,CAAC,CAAC;IACP,CAAC;IAEO,WAAW;QACjB,MAAM,OAAO,GAAG,IAAI,CAAC,YAAY,CAAC,KAAK,EAAE,EAAE,CAAC;QAC5C,IAAI,OAAO,IAAI,MAAM,CAAC,OAAO,CAAC,EAAE,CAAC;YAC/B,OAAO,MAAM,CAAC,OAAO,CAAC,CAAC;QACzB,CAAC;QACD,OAAO,IAAI,CAAC,CAAC,kBAAkB;IACjC,CAAC;IAED;;OAEG;IACH,KAAK,CAAC,MAAM,CACV,IAAuC,EACvC,UAAyB,EAAE;QAE3B,8BAA8B;QAC9B,IAAI,KAAiB,CAAC;QACtB,IAAI,OAAO,IAAI,KAAK,QAAQ,EAAE,CAAC;YAC7B,KAAK,GAAG,IAAI,WAAW,EAAE,CAAC,MAAM,CAAC,IAAI,CAAC,CAAC;QACzC,CAAC;aAAM,IAAI,IAAI,YAAY,WAAW,EAAE,CAAC;YACvC,KAAK,GAAG,IAAI,UAAU,CAAC,IAAI,CAAC,CAAC;QAC/B,CAAC;aAAM,CAAC;YACN,KAAK,GAAG,IAAI,CAAC;QACf,CAAC;QAED,uBAAuB;QACvB,IAAI,OAAO,GAAG,KAAK,CAAC;QACpB,IAAI,SAAS,GAAG,KAAK,CAAC;QAEtB,IAAI,OAAO,CAAC,OAAO,IAAI,OAAO,CAAC,IAAI,EAAE,CAAC;YACpC,MAAM,UAAU,GAAG,OAAO,CAAC,UAAU,IAAI,EAAE,CAAC;YAC5C,MAAM,gBAAgB,GAAG,MAAM,oBAAoB,CAAC,OAAO,CAAC,IAAI,EAAE,UAAU,EAAE,KAAK,CAAC,CAAC;YACrF,OAAO,GAAG,IAAI,WAAW,EAAE,CAAC,MAAM,CAAC,IAAI,CAAC,SAAS,CAAC,gBAAgB,CAAC,CAAC,CAAC;YACrE,SAAS,GAAG,IAAI,CAAC;QACnB,CAAC;QAED,iBAAiB;QACjB,MAAM,OAAO,GAAG,SAAS,CAAC,OAAO,CAAC,CAAC;QAEnC,cAAc;QACd,MAAM,OAAO,GAAG,MAAM,UAAU,CAAC,IAAI,CAAC,YAAY,EAAE,OAAO,CAAC,MAAM,EAAE;YAClE,UAAU,EAAE,OAAO,CAAC,UAAU;YAC9B,SAAS;SACV,CAAC,CAAC;QAEH,yBAAyB;QACzB,MAAM,aAAa,GAAG,OAAO,CAAC,aAAa,IAAI,CAAC,CAAC;QACjD,IAAI,aAAa,GAAG,CAAC,EAAE,CAAC;YACtB,MAAM,mBAAmB,CAAC,IAAI,CAAC,YAAY,EAAE,OAAO,EAAE,EAAE,aAAa,EAAE,CAAC,CAAC;QAC3E,CAAC;QAED,OAAO;YACL,OAAO,EAAE,OAAO,CAAC,EAAE;YACnB,QAAQ,EAAE,OAAO,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,IAAI,CAAC;YACpC,WAAW,EAAE,OAAO,CAAC,KAAK;YAC1B,UAAU,EAAE,KAAK,CAAC,MAAM;SACzB,CAAC;IACJ,CAAC;IAED;;OAEG;IACH,KAAK,CAAC,QAAQ,CACZ,QAAgB,EAChB,UAA2B,EAAE;QAE7B,MAAM,IAAI,GAAG,MAAM,kBAAkB,CAAC,IAAI,CAAC,YAAY,EAAE,QAAQ,EAAE,OAAO,CAAC,CAAC;QAE5E,IAAI,CAAC,IAAI,EAAE,CAAC;YACV,MAAM,IAAI,KAAK,CAAC,2CAA2C,CAAC,CAAC;QAC/D,CAAC;QAED,mDAAmD;QACnD,IAAI,OAAO,GAAG,EAAE,CAAC;QACjB,IAAI,CAAC;YACH,MAAM,EAAE,GAAG,MAAM,IAAI,CAAC,YAAY,CAAC,cAAc,CAAC,EAAE,IAAI,EAAE,QAAQ,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC;YACzE,IAAI,EAAE,EAAE,KAAK,EAAE,CAAC;gBACd,MAAM,QAAQ,GAAG,WAAW,CAAC,EAAE,CAAC,KAAK,CAAC,CAAC;gBACvC,MAAM,KAAK,GAAG,QAAQ,CAAC,KAAK,CAAC,gBAAgB,CAAC,CAAC;gBAC/C,IAAI,KAAK,EAAE,CAAC;oBACV,OAAO,GAAG,KAAK,CAAC,CAAC,CAAC,CAAC;gBACrB,CAAC;YACH,CAAC;QACH,CAAC;QAAC,MAAM,CAAC;YACP,+BAA+B;QACjC,CAAC;QAED,OAAO;YACL,IAAI;YACJ,OAAO;YACP,WAAW,EAAE,QAAQ,CAAC,MAAM;SAC7B,CAAC;IACJ,CAAC;IAED;;OAEG;IACH,qBAAqB,CAAC,UAA2B,EAAE;QACjD,OAAO,IAAI,kBAAkB,CAAC,IAAI,CAAC,YAAY,EAAE,OAAO,CAAC,CAAC;IAC5D,CAAC;IAED;;OAEG;IACH,qBAAqB,CAAC,UAA6D,EAAE;QACnF,OAAO,IAAI,kBAAkB,CAAC,IAAI,CAAC,YAAY,EAAE,OAAO,CAAC,CAAC;IAC5D,CAAC;IAED;;OAEG;IACH,cAAc,CAAC,QAAgB;QAC7B,OAAO,IAAI,CAAC,IAAI,CAAC,QAAQ,GAAG,KAAK,CAAC,CAAC;IACrC,CAAC;IAED;;OAEG;IACH,QAAQ;QACN,OAAO,IAAI,CAAC,KAAK,CAAC;IACpB,CAAC;IAED;;OAEG;IACH,eAAe;QACb,OAAO,IAAI,CAAC,YAAY,CAAC;IAC3B,CAAC;CACF;AAED,+EAA+E;AAC/E,UAAU;AACV,+EAA+E;AAE/E,aAAa;AACb,OAAO,EAAE,SAAS,IAAI,OAAO,EAAE,CAAC;AAiBhC,qBAAqB;AACrB,OAAO,EACL,SAAS,EACT,WAAW,EACX,WAAW,EACX,gBAAgB,EAChB,OAAO,EACP,gBAAgB,EAChB,eAAe,EACf,cAAc,EACd,oBAAoB,EACpB,YAAY,GACb,MAAM,cAAc,CAAC;AAEtB,mBAAmB;AACnB,OAAO,EAAE,SAAS,EAAE,UAAU,EAAE,kBAAkB,EAAE,MAAM,aAAa,CAAC;AAGxE,oBAAoB;AACpB,OAAO,EACL,kBAAkB,EAClB,mBAAmB,EACnB,sBAAsB,EACtB,kBAAkB,GACnB,MAAM,cAAc,CAAC;AAGtB,sBAAsB;AACtB,OAAO,EACL,gBAAgB,EAChB,UAAU,EACV,WAAW,EACX,mBAAmB,EACnB,kBAAkB,EAClB,kBAAkB,GACnB,MAAM,gBAAgB,CAAC;AAGxB,8BAA8B;AAC9B,OAAO,EACL,eAAe,EACf,sBAAsB,EACtB,uBAAuB,EACvB,oBAAoB,EACpB,mBAAmB,EACnB,KAAK,EACL,OAAO,EACP,WAAW,EACX,aAAa,GACd,MAAM,aAAa,CAAC;AAErB,YAAY;AACZ,OAAO,EAAE,cAAc,EAAE,YAAY,EAAE,sBAAsB,EAAE,gBAAgB,EAAE,MAAM,YAAY,CAAC;AAEpG,wBAAwB;AACxB,OAAO,EAAE,kBAAkB,EAAE,kBAAkB,EAAE,MAAM,iBAAiB,CAAC;AASzE,sBAAsB;AACtB,OAAO,EAAE,uBAAuB,EAAE,MAAM,uBAAuB,CAAC;AAOhE,OAAO,EAAE,iBAAiB,EAAE,MAAM,yBAAyB,CAAC;AAQ5D,+EAA+E;AAC/E,YAAY;AACZ,+EAA+E;AAE/E,SAAS,WAAW,CAAC,GAAW;IAC9B,MAAM,QAAQ,GAAG,GAAG,CAAC,UAAU,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC,GAAG,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,GAAG,CAAC;IAC3D,MAAM,KAAK,GAAG,IAAI,UAAU,CAAC,QAAQ,CAAC,MAAM,GAAG,CAAC,CAAC,CAAC;IAClD,KAAK,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,QAAQ,CAAC,MAAM,EAAE,CAAC,IAAI,CAAC,EAAE,CAAC;QAC5C,KAAK,CAAC,CAAC,GAAG,CAAC,CAAC,GAAG,QAAQ,CAAC,QAAQ,CAAC,MAAM,CAAC,CAAC,EAAE,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC;IACrD,CAAC;IACD,OAAO,IAAI,WAAW,EAAE,CAAC,MAAM,CAAC,KAAK,CAAC,CAAC;AACzC,CAAC"}