nx_js_urlfold.nx source
↩ module page · 258 lines · 13474 B
1// nx_js_urlfold.nx -- SOVEREIGN JS constant/template URL folder (operator 2026-07-08: "get to state of the art
2// that we can see and harvest the media as part of the browser capabilities" -- no manual network capture). The
3// hard class of page (Unity/heavy-JS ad loaders) never emits <img>/<script src> in the HTML; it CONSTRUCTS asset
4// URLs at runtime from string constants: const FALLBACK_HOST='client.x.com'; const BUILD_PATH='release_builds/..';
5// let host=FALLBACK_HOST; const baseUrl=`https://${host}/${BUILD_PATH}`; ... `${baseUrl}/rc/style.css`.
6// This reconstructs those URLs by READING (not executing) the JS: it collects `const|let|var NAME = <strexpr>`
7// assignments, resolves them to literals by iterated substitution (so baseUrl folds through host+BUILD_PATH),
8// then folds EVERY backtick template + the resolved consts to concrete strings and emits the URL-ish ones. No JS
9// engine, no segfault. Supported value forms: 'lit' / "lit" / `tmpl${IDENT}` / IDENT / A + 'x' + B (concat).
10// nx_js_fold_urls(js,len, obuf,ooff[],olen[], maxn) -> count (urls written into obuf, spans in ooff/olen)
11// NOTE: the resolved const table is a STRUCT (JTab*) so juf_fold/juf_lookup stay <=6 args -- an 11-arg juf_fold
12// returned a clobbered value on the x86 lane (measured 2026-07-08: literal fold returned 4230893 not 23).
13// license_tier: ORIGINAL
14import "nx_syscalls.nx"
15const JUF_MAGIC_8192: i64 = 8192
16
17const JUF_MAXT: i64 = 512 // max consts / assignments
18const JUF_TBUF: i64 = 131072 // resolved-value byte pool
19const JUF_PASSES: i64 = 10 // fixpoint iterations
20
21// resolved-constant table. names are spans INTO the js source (noff/nlen); values are spans into vbuf (voff/vlen).
22struct JTab { vbuf: *u8, noff: *i64, nlen: *i64, voff: *i64, vlen: *i64, js: *u8, cnt: i64, used: i64 }
23const JTAB_BYTES: i64 = 64
24
25// [A-Za-z0-9_$]
26func juf_isident(c: i64) -> i64 { if c>=48 { if c<=57 {return 1} } if c>=65 { if c<=90 {return 1} } if c>=97 { if c<=122 {return 1} } if c==95 {return 1} if c==36 {return 1} return 0 }
27// span-equal: a[aoff..+alen) vs b[boff..+blen)
28func juf_span_eq(a: *u8, aoff: i64, alen: i64, b: *u8, boff: i64, blen: i64) -> i64 { if alen != blen { return 0 } var i: i64=0; while i<alen { if a[aoff+i]!=b[boff+i] { return 0 } i=i+1 } return 1 }
29// lookup query name js[qoff..+qlen) in T -> index or -1 (all names are spans into T.js)
30func juf_lookup(qoff: i64, qlen: i64, T: *JTab) -> i64 { let js: *u8 = T.js; var i: i64=0; while i<T.cnt { if juf_span_eq(js, qoff, qlen, js, T.noff[i], T.nlen[i])==1 { return i } i=i+1 } return 0 - 1 }
31// URL-ish? starts '/' OR contains "://"
32func juf_urlish(s: *u8, off: i64, len: i64) -> i64 {
33 if len < 3 { return 0 }
34 if s[off]==(47 as u8) { return 1 }
35 var i: i64 = off; let end: i64 = off + len
36 while i + 2 < end { if s[i]==(58 as u8) { if s[i+1]==(47 as u8) { if s[i+2]==(47 as u8) { return 1 } } } i=i+1 }
37 return 0
38}
39// copy T value #idx into out at o (bounded by ocap); return new o
40func juf_put(T: *JTab, idx: i64, out: *u8, o: i64, ocap: i64) -> i64 { var w: i64=o; var m: i64=0; let vb: *u8=T.vbuf; while m < T.vlen[idx] { if w<ocap-1 { out[w]=vb[T.voff[idx]+m]; w=w+1 } m=m+1 } return w }
41
42// write one byte into out (bounded)
43func juf_wr(out: *u8, opos: *i64, ocap: i64, ch: u8) -> i64 { if opos[0] < ocap-1 { out[opos[0]]=ch; opos[0]=opos[0]+1 } return 0 }
44
45// consume ONE value piece starting at i0 (a 'lit / "lit / `tmpl / IDENT), writing folded bytes into out via
46// opos. returns the index just past the piece, or -1 (unresolved ident / unsupported). Flat by design -- the
47// deep else-nest form miscompiled on the x86 lane (a ' literal fell through to the tail return, 2026-07-08).
48func juf_piece(js: *u8, i0: i64, end: i64, T: *JTab, out: *u8, opos: *i64, ocap: i64) -> i64 {
49 let c: i64 = js[i0] as i64
50 if c == 39 { // ' literal
51 var j: i64 = i0 + 1; var d: i64 = 0
52 while d == 0 { if j >= end { d = 1 } else { if js[j]==(39 as u8) { d = 1 } else { juf_wr(out, opos, ocap, js[j]); j=j+1 } } }
53 return j + 1
54 }
55 if c == 34 { // " literal
56 var j2: i64 = i0 + 1; var d2: i64 = 0
57 while d2 == 0 { if j2 >= end { d2 = 1 } else { if js[j2]==(34 as u8) { d2 = 1 } else { juf_wr(out, opos, ocap, js[j2]); j2=j2+1 } } }
58 return j2 + 1
59 }
60 if c == 96 { // ` template with ${IDENT}
61 var j3: i64 = i0 + 1; var d3: i64 = 0
62 while d3 == 0 {
63 if j3 >= end { d3 = 1 } else {
64 let cc: i64 = js[j3] as i64
65 if cc == 96 { d3 = 1 } else {
66 var handled: i64 = 0
67 if cc == 36 { if j3+1 < end { if js[j3+1]==(123 as u8) {
68 var k: i64 = j3 + 2; let noff: i64 = k; var rd: i64 = 1
69 while rd == 1 { if k>=end { rd=0 } else { if juf_isident(js[k] as i64)==1 { k=k+1 } else { rd=0 } } }
70 let idx: i64 = juf_lookup(noff, k-noff, T)
71 if idx < 0 { return 0 - 1 }
72 opos[0] = juf_put(T, idx, out, opos[0], ocap)
73 if k < end { if js[k]==(125 as u8) { k=k+1 } }
74 j3 = k; handled = 1
75 } } }
76 if handled == 0 { juf_wr(out, opos, ocap, js[j3]); j3=j3+1 }
77 }
78 }
79 }
80 return j3 + 1
81 }
82 if juf_isident(c) == 1 { // bare identifier operand
83 var j4: i64 = i0; var rd4: i64 = 1
84 while rd4 == 1 { if j4>=end { rd4=0 } else { if juf_isident(js[j4] as i64)==1 { j4=j4+1 } else { rd4=0 } } }
85 let idx4: i64 = juf_lookup(i0, j4-i0, T)
86 if idx4 < 0 { return 0 - 1 }
87 opos[0] = juf_put(T, idx4, out, opos[0], ocap)
88 return j4
89 }
90 return 0 - 1 // unsupported token
91}
92
93// fold value expr js[soff..soff+slen) into out using T; return outlen or -1. FLAT dispatch (see juf_piece note).
94func juf_fold(js: *u8, soff: i64, slen: i64, T: *JTab, out: *u8, ocap: i64) -> i64 {
95 let opos: *i64 = sys_mmap(8) as *i64; opos[0] = 0
96 var i: i64 = soff
97 let end: i64 = soff + slen
98 var err: i64 = 0
99 while i < end {
100 if err == 1 { i = end } else {
101 let c: i64 = js[i] as i64
102 if c == 32 { i = i + 1 } else { if c == 9 { i = i + 1 } else { if c == 13 { i = i + 1 } else { if c == 10 { i = i + 1 } else { if c == 43 { i = i + 1 } else {
103 let ni: i64 = juf_piece(js, i, end, T, out, opos, ocap)
104 if ni < 0 { err = 1 } else { i = ni }
105 } } } } }
106 }
107 }
108 if err == 1 { return 0 - 1 }
109 return opos[0]
110}
111
112// keyword match at i: js[i..i+klen)==kw, preceding char non-ident, following char space/tab
113func juf_kw_at(js: *u8, i: i64, len: i64, kw: *u8, klen: i64) -> i64 {
114 if i + klen >= len { return 0 }
115 var k: i64 = 0; while k < klen { if js[i+k] != kw[k] { return 0 } k=k+1 }
116 if i > 0 { if juf_isident(js[i-1] as i64)==1 { return 0 } }
117 let nc: i64 = js[i+klen] as i64
118 if nc == 32 { return 1 }
119 if nc == 9 { return 1 }
120 return 0
121}
122
123// append src[soff..+slen) to obuf (dedup vs already-emitted). returns new count.
124func juf_emit(obuf: *u8, ooff: *i64, olen: *i64, count: i64, maxn: i64, opos: *i64, src: *u8, soff: i64, slen: i64) -> i64 {
125 if count >= maxn { return count }
126 if slen <= 0 { return count }
127 var i: i64 = 0
128 while i < count {
129 if olen[i] == slen {
130 var eq: i64 = 1; var k: i64 = 0
131 while k < slen { if obuf[ooff[i]+k] != src[soff+k] { eq=0; k=slen } else { k=k+1 } }
132 if eq == 1 { return count }
133 }
134 i = i + 1
135 }
136 var m: i64 = 0
137 while m < slen { obuf[opos[0]+m] = src[soff+m]; m=m+1 }
138 ooff[count] = opos[0]; olen[count] = slen
139 opos[0] = opos[0] + slen
140 return count + 1
141}
142
143// THE FOLD.
144func nx_js_fold_urls(js: *u8, len: i64, obuf: *u8, ooff: *i64, olen: *i64, maxn: i64) -> i64 {
145 // assignment raw list: name span + value-expr span (both into js)
146 let anoff: *i64 = sys_mmap(8*JUF_MAXT) as *i64
147 let anlen: *i64 = sys_mmap(8*JUF_MAXT) as *i64
148 let avoff: *i64 = sys_mmap(8*JUF_MAXT) as *i64
149 let avlen: *i64 = sys_mmap(8*JUF_MAXT) as *i64
150 var acnt: i64 = 0
151 // resolved table (struct so folders stay small-arg)
152 let T: *JTab = sys_mmap(JTAB_BYTES) as *JTab
153 T.vbuf = sys_mmap(JUF_TBUF)
154 T.noff = sys_mmap(8*JUF_MAXT) as *i64
155 T.nlen = sys_mmap(8*JUF_MAXT) as *i64
156 T.voff = sys_mmap(8*JUF_MAXT) as *i64
157 T.vlen = sys_mmap(8*JUF_MAXT) as *i64
158 T.js = js
159 T.cnt = 0
160 T.used = 0
161 let scratch: *u8 = sys_mmap(JUF_MAGIC_8192)
162
163 // ---- scan assignments ----
164 var i: i64 = 0
165 while i < len {
166 if acnt >= JUF_MAXT { i = len } else {
167 var kw: i64 = 0
168 if juf_kw_at(js, i, len, "const" as *u8, 5)==1 { kw = 5 }
169 if juf_kw_at(js, i, len, "let" as *u8, 3)==1 { kw = 3 }
170 if juf_kw_at(js, i, len, "var" as *u8, 3)==1 { kw = 3 }
171 if kw > 0 {
172 var p: i64 = i + kw
173 var sk0: i64 = 1
174 while sk0==1 { if p>=len { sk0=0 } else { let c: i64 = js[p] as i64; if c==32 { p=p+1 } else { if c==9 { p=p+1 } else { sk0=0 } } } }
175 let noff: i64 = p
176 var rd: i64 = 1
177 while rd==1 { if p>=len { rd=0 } else { if juf_isident(js[p] as i64)==1 { p=p+1 } else { rd=0 } } }
178 let nlen: i64 = p - noff
179 var sd: i64 = 1
180 while sd==1 { if p>=len { sd=0 } else { let c2: i64=js[p] as i64; if c2==32 { p=p+1 } else { if c2==9 { p=p+1 } else { sd=0 } } } }
181 if nlen > 0 { if p < len { if js[p]==(61 as u8) {
182 var eqok: i64 = 1
183 if p+1 < len { if js[p+1]==(61 as u8) { eqok=0 } if js[p+1]==(62 as u8) { eqok=0 } }
184 if eqok == 1 {
185 p = p + 1
186 var sd2: i64 = 1
187 while sd2==1 { if p>=len { sd2=0 } else { let c3: i64=js[p] as i64; if c3==32 { p=p+1 } else { if c3==9 { p=p+1 } else { sd2=0 } } } }
188 let voff: i64 = p
189 var q: i64 = p; var qs: i64 = 0; var instr: i64 = 0; var strc: i64 = 0
190 while qs == 0 {
191 if q >= len { qs = 1 } else {
192 let cq: i64 = js[q] as i64
193 if instr == 1 { if cq == strc { instr = 0 } q = q + 1 }
194 else {
195 if cq==39 { instr=1; strc=39; q=q+1 } else {
196 if cq==34 { instr=1; strc=34; q=q+1 } else {
197 if cq==96 { instr=1; strc=96; q=q+1 } else {
198 if cq==59 { qs=1 } else {
199 if cq==10 { qs=1 } else { q=q+1 } } } } }
200 }
201 }
202 }
203 anoff[acnt]=noff; anlen[acnt]=nlen; avoff[acnt]=voff; avlen[acnt]=q-voff; acnt=acnt+1
204 i = q
205 } else { i = i + kw }
206 } else { i = i + kw } } else { i = i + kw } }
207 else { i = i + kw }
208 } else { i = i + 1 }
209 }
210 }
211
212 // ---- resolve to a fixpoint ----
213 var pass: i64 = 0
214 while pass < JUF_PASSES {
215 var added: i64 = 0
216 var a: i64 = 0
217 while a < acnt {
218 if juf_lookup(anoff[a], anlen[a], T) < 0 {
219 let fl: i64 = juf_fold(js, avoff[a], avlen[a], T, scratch, JUF_MAGIC_8192)
220 if fl >= 0 {
221 if T.cnt < JUF_MAXT { if T.used + fl < JUF_TBUF {
222 let vb: *u8 = T.vbuf
223 var m: i64 = 0
224 while m < fl { vb[T.used+m]=scratch[m]; m=m+1 }
225 let cc: i64 = T.cnt
226 T.noff[cc]=anoff[a]; T.nlen[cc]=anlen[a]; T.voff[cc]=T.used; T.vlen[cc]=fl
227 T.used = T.used + fl; T.cnt = cc + 1; added = added + 1
228 } }
229 }
230 }
231 a = a + 1
232 }
233 if added == 0 { pass = JUF_PASSES } else { pass = pass + 1 }
234 }
235
236 // ---- emit: (1) resolved consts URL-ish, (2) every backtick template folded ----
237 var count: i64 = 0
238 let opos: *i64 = sys_mmap(8) as *i64; opos[0] = 0
239 let vbuf: *u8 = T.vbuf
240 var t: i64 = 0
241 while t < T.cnt {
242 if count < maxn { if juf_urlish(vbuf, T.voff[t], T.vlen[t]) == 1 { count = juf_emit(obuf, ooff, olen, count, maxn, opos, vbuf, T.voff[t], T.vlen[t]) } }
243 t = t + 1
244 }
245 var b: i64 = 0
246 while b < len {
247 if count >= maxn { b = len } else {
248 if js[b] == (96 as u8) {
249 var e: i64 = b + 1; var fe: i64 = 0
250 while fe == 0 { if e >= len { fe = 1 } else { if js[e]==(96 as u8) { fe = 1 } else { e = e + 1 } } }
251 let fl2: i64 = juf_fold(js, b, (e - b) + 1, T, scratch, JUF_MAGIC_8192)
252 if fl2 > 0 { if juf_urlish(scratch, 0, fl2) == 1 { count = juf_emit(obuf, ooff, olen, count, maxn, opos, scratch, 0, fl2) } }
253 b = e + 1
254 } else { b = b + 1 }
255 }
256 }
257 return count
258}