buckyos 0.7.138 → 0.7.142

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 (91) hide show
  1. package/cli/core/app.ts +4 -0
  2. package/cli/core/auth.ts +2 -3
  3. package/cli/dist/cli.mjs +547 -127
  4. package/cli/dist/cli.mjs.map +1 -1
  5. package/cli/modules/aiws.ts +294 -0
  6. package/cli/modules/executor.ts +98 -0
  7. package/cli/version.ts +1 -1
  8. package/dist/account.d.ts +0 -2
  9. package/dist/account.d.ts.map +1 -1
  10. package/dist/aiworkspace_client.d.ts +91 -0
  11. package/dist/aiworkspace_client.d.ts.map +1 -0
  12. package/dist/app-frame.cjs +1 -1
  13. package/dist/app-frame.cjs.map +1 -1
  14. package/dist/app-frame.d.ts +103 -3
  15. package/dist/app-frame.d.ts.map +1 -1
  16. package/dist/app-frame.mjs +189 -8
  17. package/dist/app-frame.mjs.map +1 -1
  18. package/dist/browser.cjs +1 -1
  19. package/dist/browser.cjs.map +1 -1
  20. package/dist/browser.d.ts +2 -0
  21. package/dist/browser.d.ts.map +1 -1
  22. package/dist/browser.mjs +18 -15
  23. package/dist/browser.mjs.map +1 -1
  24. package/dist/content.cjs +1 -1
  25. package/dist/content.cjs.map +1 -1
  26. package/dist/content.d.ts +18 -0
  27. package/dist/content.d.ts.map +1 -1
  28. package/dist/content.mjs +61 -1
  29. package/dist/content.mjs.map +1 -1
  30. package/dist/executor_client-b3ff97ba.js +13 -0
  31. package/dist/executor_client-b3ff97ba.js.map +1 -0
  32. package/dist/{ndm_proxy-6b03b9ec.mjs → executor_client-eb372968.mjs} +901 -396
  33. package/dist/executor_client-eb372968.mjs.map +1 -0
  34. package/dist/executor_client.d.ts +138 -0
  35. package/dist/executor_client.d.ts.map +1 -0
  36. package/dist/index.cjs +1 -1
  37. package/dist/index.cjs.map +1 -1
  38. package/dist/index.d.ts +4 -0
  39. package/dist/index.d.ts.map +1 -1
  40. package/dist/index.mjs +23 -15
  41. package/dist/index.mjs.map +1 -1
  42. package/dist/internal/hash_worker.d.ts +2 -1
  43. package/dist/internal/hash_worker.d.ts.map +1 -1
  44. package/dist/internal/tus_client.d.ts +3 -0
  45. package/dist/internal/tus_client.d.ts.map +1 -1
  46. package/dist/namelib.d.ts +1 -10
  47. package/dist/namelib.d.ts.map +1 -1
  48. package/dist/ndm_client.d.ts +56 -7
  49. package/dist/ndm_client.d.ts.map +1 -1
  50. package/dist/ndn_types-08dc9ef1.js +2 -0
  51. package/dist/ndn_types-08dc9ef1.js.map +1 -0
  52. package/dist/{ndn_types-ac9c1e48.mjs → ndn_types-bbb1f6a6.mjs} +53 -100
  53. package/dist/ndn_types-bbb1f6a6.mjs.map +1 -0
  54. package/dist/nfsp.cjs +1 -1
  55. package/dist/nfsp.cjs.map +1 -1
  56. package/dist/nfsp.d.ts +16 -0
  57. package/dist/nfsp.d.ts.map +1 -1
  58. package/dist/nfsp.mjs +6 -0
  59. package/dist/nfsp.mjs.map +1 -1
  60. package/dist/node.cjs +1 -1
  61. package/dist/node.cjs.map +1 -1
  62. package/dist/node.d.ts +2 -0
  63. package/dist/node.d.ts.map +1 -1
  64. package/dist/node.mjs +18 -15
  65. package/dist/node.mjs.map +1 -1
  66. package/dist/provision.cjs +2 -2
  67. package/dist/provision.cjs.map +1 -1
  68. package/dist/provision.mjs +18 -12
  69. package/dist/provision.mjs.map +1 -1
  70. package/dist/provision_activate.d.ts.map +1 -1
  71. package/dist/runtime.d.ts +3 -4
  72. package/dist/runtime.d.ts.map +1 -1
  73. package/dist/sdk_core.d.ts +4 -0
  74. package/dist/sdk_core.d.ts.map +1 -1
  75. package/dist/{tus_client-2b915a81.js → tus_client-65c5fc5e.js} +4 -4
  76. package/dist/tus_client-65c5fc5e.js.map +1 -0
  77. package/dist/{tus_client-19baa342.mjs → tus_client-d313689e.mjs} +40 -2
  78. package/dist/tus_client-d313689e.mjs.map +1 -0
  79. package/dist/types.d.ts +0 -9
  80. package/dist/types.d.ts.map +1 -1
  81. package/dist/verify-hub-client.d.ts +1 -9
  82. package/dist/verify-hub-client.d.ts.map +1 -1
  83. package/package.json +1 -1
  84. package/dist/ndm_proxy-67651066.js +0 -13
  85. package/dist/ndm_proxy-67651066.js.map +0 -1
  86. package/dist/ndm_proxy-6b03b9ec.mjs.map +0 -1
  87. package/dist/ndn_types-324121ae.js +0 -2
  88. package/dist/ndn_types-324121ae.js.map +0 -1
  89. package/dist/ndn_types-ac9c1e48.mjs.map +0 -1
  90. package/dist/tus_client-19baa342.mjs.map +0 -1
  91. package/dist/tus_client-2b915a81.js.map +0 -1
@@ -1 +0,0 @@
1
- {"version":3,"file":"ndn_types-ac9c1e48.mjs","sources":["../node_modules/.pnpm/jssha@3.3.1/node_modules/jssha/dist/sha.mjs","../src/account.ts","../src/types.ts","../src/namelib.ts","../node_modules/.pnpm/canonicalize@2.1.0/node_modules/canonicalize/lib/canonicalize.js","../src/ndn_types.ts"],"sourcesContent":["/**\n * A JavaScript implementation of the SHA family of hashes - defined in FIPS PUB 180-4, FIPS PUB 202,\n * and SP 800-185 - as well as the corresponding HMAC implementation as defined in FIPS PUB 198-1.\n *\n * Copyright 2008-2023 Brian Turek, 1998-2009 Paul Johnston & Contributors\n * Distributed under the BSD License\n * See http://caligatio.github.com/jsSHA/ for more information\n */\nconst t=\"ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/\",n=\"ARRAYBUFFER not supported by this environment\",e=\"UINT8ARRAY not supported by this environment\";function r(t,n,e,r){let i,s,o;const h=n||[0],u=(e=e||0)>>>3,w=-1===r?3:0;for(i=0;i<t.length;i+=1)o=i+u,s=o>>>2,h.length<=s&&h.push(0),h[s]|=t[i]<<8*(w+r*(o%4));return{value:h,binLen:8*t.length+e}}function i(i,s,o){switch(s){case\"UTF8\":case\"UTF16BE\":case\"UTF16LE\":break;default:throw new Error(\"encoding must be UTF8, UTF16BE, or UTF16LE\")}switch(i){case\"HEX\":return function(t,n,e){return function(t,n,e,r){let i,s,o,h;if(0!=t.length%2)throw new Error(\"String of HEX type must be in byte increments\");const u=n||[0],w=(e=e||0)>>>3,c=-1===r?3:0;for(i=0;i<t.length;i+=2){if(s=parseInt(t.substr(i,2),16),isNaN(s))throw new Error(\"String of HEX type contains invalid characters\");for(h=(i>>>1)+w,o=h>>>2;u.length<=o;)u.push(0);u[o]|=s<<8*(c+r*(h%4))}return{value:u,binLen:4*t.length+e}}(t,n,e,o)};case\"TEXT\":return function(t,n,e){return function(t,n,e,r,i){let s,o,h,u,w,c,f,a,l=0;const A=e||[0],E=(r=r||0)>>>3;if(\"UTF8\"===n)for(f=-1===i?3:0,h=0;h<t.length;h+=1)for(s=t.charCodeAt(h),o=[],128>s?o.push(s):2048>s?(o.push(192|s>>>6),o.push(128|63&s)):55296>s||57344<=s?o.push(224|s>>>12,128|s>>>6&63,128|63&s):(h+=1,s=65536+((1023&s)<<10|1023&t.charCodeAt(h)),o.push(240|s>>>18,128|s>>>12&63,128|s>>>6&63,128|63&s)),u=0;u<o.length;u+=1){for(c=l+E,w=c>>>2;A.length<=w;)A.push(0);A[w]|=o[u]<<8*(f+i*(c%4)),l+=1}else for(f=-1===i?2:0,a=\"UTF16LE\"===n&&1!==i||\"UTF16LE\"!==n&&1===i,h=0;h<t.length;h+=1){for(s=t.charCodeAt(h),!0===a&&(u=255&s,s=u<<8|s>>>8),c=l+E,w=c>>>2;A.length<=w;)A.push(0);A[w]|=s<<8*(f+i*(c%4)),l+=2}return{value:A,binLen:8*l+r}}(t,s,n,e,o)};case\"B64\":return function(n,e,r){return function(n,e,r,i){let s,o,h,u,w,c,f,a=0;const l=e||[0],A=(r=r||0)>>>3,E=-1===i?3:0,H=n.indexOf(\"=\");if(-1===n.search(/^[a-zA-Z0-9=+/]+$/))throw new Error(\"Invalid character in base-64 string\");if(n=n.replace(/=/g,\"\"),-1!==H&&H<n.length)throw new Error(\"Invalid '=' found in base-64 string\");for(o=0;o<n.length;o+=4){for(w=n.substr(o,4),u=0,h=0;h<w.length;h+=1)s=t.indexOf(w.charAt(h)),u|=s<<18-6*h;for(h=0;h<w.length-1;h+=1){for(f=a+A,c=f>>>2;l.length<=c;)l.push(0);l[c]|=(u>>>16-8*h&255)<<8*(E+i*(f%4)),a+=1}}return{value:l,binLen:8*a+r}}(n,e,r,o)};case\"BYTES\":return function(t,n,e){return function(t,n,e,r){let i,s,o,h;const u=n||[0],w=(e=e||0)>>>3,c=-1===r?3:0;for(s=0;s<t.length;s+=1)i=t.charCodeAt(s),h=s+w,o=h>>>2,u.length<=o&&u.push(0),u[o]|=i<<8*(c+r*(h%4));return{value:u,binLen:8*t.length+e}}(t,n,e,o)};case\"ARRAYBUFFER\":try{new ArrayBuffer(0)}catch(t){throw new Error(n)}return function(t,n,e){return function(t,n,e,i){return r(new Uint8Array(t),n,e,i)}(t,n,e,o)};case\"UINT8ARRAY\":try{new Uint8Array(0)}catch(t){throw new Error(e)}return function(t,n,e){return r(t,n,e,o)};default:throw new Error(\"format must be HEX, TEXT, B64, BYTES, ARRAYBUFFER, or UINT8ARRAY\")}}function s(r,i,s,o){switch(r){case\"HEX\":return function(t){return function(t,n,e,r){const i=\"0123456789abcdef\";let s,o,h=\"\";const u=n/8,w=-1===e?3:0;for(s=0;s<u;s+=1)o=t[s>>>2]>>>8*(w+e*(s%4)),h+=i.charAt(o>>>4&15)+i.charAt(15&o);return r.outputUpper?h.toUpperCase():h}(t,i,s,o)};case\"B64\":return function(n){return function(n,e,r,i){let s,o,h,u,w,c=\"\";const f=e/8,a=-1===r?3:0;for(s=0;s<f;s+=3)for(u=s+1<f?n[s+1>>>2]:0,w=s+2<f?n[s+2>>>2]:0,h=(n[s>>>2]>>>8*(a+r*(s%4))&255)<<16|(u>>>8*(a+r*((s+1)%4))&255)<<8|w>>>8*(a+r*((s+2)%4))&255,o=0;o<4;o+=1)c+=8*s+6*o<=e?t.charAt(h>>>6*(3-o)&63):i.b64Pad;return c}(n,i,s,o)};case\"BYTES\":return function(t){return function(t,n,e){let r,i,s=\"\";const o=n/8,h=-1===e?3:0;for(r=0;r<o;r+=1)i=t[r>>>2]>>>8*(h+e*(r%4))&255,s+=String.fromCharCode(i);return s}(t,i,s)};case\"ARRAYBUFFER\":try{new ArrayBuffer(0)}catch(t){throw new Error(n)}return function(t){return function(t,n,e){let r;const i=n/8,s=new ArrayBuffer(i),o=new Uint8Array(s),h=-1===e?3:0;for(r=0;r<i;r+=1)o[r]=t[r>>>2]>>>8*(h+e*(r%4))&255;return s}(t,i,s)};case\"UINT8ARRAY\":try{new Uint8Array(0)}catch(t){throw new Error(e)}return function(t){return function(t,n,e){let r;const i=n/8,s=-1===e?3:0,o=new Uint8Array(i);for(r=0;r<i;r+=1)o[r]=t[r>>>2]>>>8*(s+e*(r%4))&255;return o}(t,i,s)};default:throw new Error(\"format must be HEX, B64, BYTES, ARRAYBUFFER, or UINT8ARRAY\")}}const o=4294967296,h=[1116352408,1899447441,3049323471,3921009573,961987163,1508970993,2453635748,2870763221,3624381080,310598401,607225278,1426881987,1925078388,2162078206,2614888103,3248222580,3835390401,4022224774,264347078,604807628,770255983,1249150122,1555081692,1996064986,2554220882,2821834349,2952996808,3210313671,3336571891,3584528711,113926993,338241895,666307205,773529912,1294757372,1396182291,1695183700,1986661051,2177026350,2456956037,2730485921,2820302411,3259730800,3345764771,3516065817,3600352804,4094571909,275423344,430227734,506948616,659060556,883997877,958139571,1322822218,1537002063,1747873779,1955562222,2024104815,2227730452,2361852424,2428436474,2756734187,3204031479,3329325298],u=[3238371032,914150663,812702999,4144912697,4290775857,1750603025,1694076839,3204075428],w=[1779033703,3144134277,1013904242,2773480762,1359893119,2600822924,528734635,1541459225],c=\"Chosen SHA variant is not supported\",f=\"Cannot set numRounds with MAC\";function a(t,n){let e,r;const i=t.binLen>>>3,s=n.binLen>>>3,o=i<<3,h=4-i<<3;if(i%4!=0){for(e=0;e<s;e+=4)r=i+e>>>2,t.value[r]|=n.value[e>>>2]<<o,t.value.push(0),t.value[r+1]|=n.value[e>>>2]>>>h;return(t.value.length<<2)-4>=s+i&&t.value.pop(),{value:t.value,binLen:t.binLen+n.binLen}}return{value:t.value.concat(n.value),binLen:t.binLen+n.binLen}}function l(t){const n={outputUpper:!1,b64Pad:\"=\",outputLen:-1},e=t||{},r=\"Output length must be a multiple of 8\";if(n.outputUpper=e.outputUpper||!1,e.b64Pad&&(n.b64Pad=e.b64Pad),e.outputLen){if(e.outputLen%8!=0)throw new Error(r);n.outputLen=e.outputLen}else if(e.shakeLen){if(e.shakeLen%8!=0)throw new Error(r);n.outputLen=e.shakeLen}if(\"boolean\"!=typeof n.outputUpper)throw new Error(\"Invalid outputUpper formatting option\");if(\"string\"!=typeof n.b64Pad)throw new Error(\"Invalid b64Pad formatting option\");return n}function A(t,n,e,r){const s=t+\" must include a value and format\";if(!n){if(!r)throw new Error(s);return r}if(void 0===n.value||!n.format)throw new Error(s);return i(n.format,n.encoding||\"UTF8\",e)(n.value)}class E{constructor(t,n,e){const r=e||{};if(this.t=n,this.i=r.encoding||\"UTF8\",this.numRounds=r.numRounds||1,isNaN(this.numRounds)||this.numRounds!==parseInt(this.numRounds,10)||1>this.numRounds)throw new Error(\"numRounds must a integer >= 1\");this.o=t,this.h=[],this.u=0,this.l=!1,this.A=0,this.H=!1,this.S=[],this.p=[]}update(t){let n,e=0;const r=this.m>>>5,i=this.C(t,this.h,this.u),s=i.binLen,o=i.value,h=s>>>5;for(n=0;n<h;n+=r)e+this.m<=s&&(this.U=this.v(o.slice(n,n+r),this.U),e+=this.m);return this.A+=e,this.h=o.slice(e>>>5),this.u=s%this.m,this.l=!0,this}getHash(t,n){let e,r,i=this.R;const o=l(n);if(this.K){if(-1===o.outputLen)throw new Error(\"Output length must be specified in options\");i=o.outputLen}const h=s(t,i,this.T,o);if(this.H&&this.g)return h(this.g(o));for(r=this.F(this.h.slice(),this.u,this.A,this.L(this.U),i),e=1;e<this.numRounds;e+=1)this.K&&i%32!=0&&(r[r.length-1]&=16777215>>>24-i%32),r=this.F(r,i,0,this.B(this.o),i);return h(r)}setHMACKey(t,n,e){if(!this.M)throw new Error(\"Variant does not support HMAC\");if(this.l)throw new Error(\"Cannot set MAC key after calling update\");const r=i(n,(e||{}).encoding||\"UTF8\",this.T);this.k(r(t))}k(t){const n=this.m>>>3,e=n/4-1;let r;if(1!==this.numRounds)throw new Error(f);if(this.H)throw new Error(\"MAC key already set\");for(n<t.binLen/8&&(t.value=this.F(t.value,t.binLen,0,this.B(this.o),this.R));t.value.length<=e;)t.value.push(0);for(r=0;r<=e;r+=1)this.S[r]=909522486^t.value[r],this.p[r]=1549556828^t.value[r];this.U=this.v(this.S,this.U),this.A=this.m,this.H=!0}getHMAC(t,n){const e=l(n);return s(t,this.R,this.T,e)(this.Y())}Y(){let t;if(!this.H)throw new Error(\"Cannot call getHMAC without first setting MAC key\");const n=this.F(this.h.slice(),this.u,this.A,this.L(this.U),this.R);return t=this.v(this.p,this.B(this.o)),t=this.F(n,this.R,this.m,t,this.R),t}}function H(t,n){return t<<n|t>>>32-n}function S(t,n){return t>>>n|t<<32-n}function b(t,n){return t>>>n}function p(t,n,e){return t^n^e}function d(t,n,e){return t&n^~t&e}function m(t,n,e){return t&n^t&e^n&e}function C(t){return S(t,2)^S(t,13)^S(t,22)}function y(t,n){const e=(65535&t)+(65535&n);return(65535&(t>>>16)+(n>>>16)+(e>>>16))<<16|65535&e}function U(t,n,e,r){const i=(65535&t)+(65535&n)+(65535&e)+(65535&r);return(65535&(t>>>16)+(n>>>16)+(e>>>16)+(r>>>16)+(i>>>16))<<16|65535&i}function v(t,n,e,r,i){const s=(65535&t)+(65535&n)+(65535&e)+(65535&r)+(65535&i);return(65535&(t>>>16)+(n>>>16)+(e>>>16)+(r>>>16)+(i>>>16)+(s>>>16))<<16|65535&s}function R(t){return S(t,7)^S(t,18)^b(t,3)}function K(t){return S(t,6)^S(t,11)^S(t,25)}function T(t){return[1732584193,4023233417,2562383102,271733878,3285377520]}function g(t,n){let e,r,i,s,o,h,u;const w=[];for(e=n[0],r=n[1],i=n[2],s=n[3],o=n[4],u=0;u<80;u+=1)w[u]=u<16?t[u]:H(w[u-3]^w[u-8]^w[u-14]^w[u-16],1),h=u<20?v(H(e,5),d(r,i,s),o,1518500249,w[u]):u<40?v(H(e,5),p(r,i,s),o,1859775393,w[u]):u<60?v(H(e,5),m(r,i,s),o,2400959708,w[u]):v(H(e,5),p(r,i,s),o,3395469782,w[u]),o=s,s=i,i=H(r,30),r=e,e=h;return n[0]=y(e,n[0]),n[1]=y(r,n[1]),n[2]=y(i,n[2]),n[3]=y(s,n[3]),n[4]=y(o,n[4]),n}function F(t,n,e,r){let i;const s=15+(n+65>>>9<<4),h=n+e;for(;t.length<=s;)t.push(0);for(t[n>>>5]|=128<<24-n%32,t[s]=4294967295&h,t[s-1]=h/o|0,i=0;i<t.length;i+=16)r=g(t.slice(i,i+16),r);return r}let L=class extends E{constructor(t,n,e){if(\"SHA-1\"!==t)throw new Error(c);super(t,n,e);const r=e||{};this.M=!0,this.g=this.Y,this.T=-1,this.C=i(this.t,this.i,this.T),this.v=g,this.L=function(t){return t.slice()},this.B=T,this.F=F,this.U=[1732584193,4023233417,2562383102,271733878,3285377520],this.m=512,this.R=160,this.K=!1,r.hmacKey&&this.k(A(\"hmacKey\",r.hmacKey,this.T))}};function B(t){let n;return n=\"SHA-224\"==t?u.slice():w.slice(),n}function M(t,n){let e,r,i,s,o,u,w,c,f,a,l;const A=[];for(e=n[0],r=n[1],i=n[2],s=n[3],o=n[4],u=n[5],w=n[6],c=n[7],l=0;l<64;l+=1)A[l]=l<16?t[l]:U(S(E=A[l-2],17)^S(E,19)^b(E,10),A[l-7],R(A[l-15]),A[l-16]),f=v(c,K(o),d(o,u,w),h[l],A[l]),a=y(C(e),m(e,r,i)),c=w,w=u,u=o,o=y(s,f),s=i,i=r,r=e,e=y(f,a);var E;return n[0]=y(e,n[0]),n[1]=y(r,n[1]),n[2]=y(i,n[2]),n[3]=y(s,n[3]),n[4]=y(o,n[4]),n[5]=y(u,n[5]),n[6]=y(w,n[6]),n[7]=y(c,n[7]),n}let k=class extends E{constructor(t,n,e){if(\"SHA-224\"!==t&&\"SHA-256\"!==t)throw new Error(c);super(t,n,e);const r=e||{};this.g=this.Y,this.M=!0,this.T=-1,this.C=i(this.t,this.i,this.T),this.v=M,this.L=function(t){return t.slice()},this.B=B,this.F=function(n,e,r,i){return function(t,n,e,r,i){let s,h;const u=15+(n+65>>>9<<4),w=n+e;for(;t.length<=u;)t.push(0);for(t[n>>>5]|=128<<24-n%32,t[u]=4294967295&w,t[u-1]=w/o|0,s=0;s<t.length;s+=16)r=M(t.slice(s,s+16),r);return h=\"SHA-224\"===i?[r[0],r[1],r[2],r[3],r[4],r[5],r[6]]:r,h}(n,e,r,i,t)},this.U=B(t),this.m=512,this.R=\"SHA-224\"===t?224:256,this.K=!1,r.hmacKey&&this.k(A(\"hmacKey\",r.hmacKey,this.T))}};class Y{constructor(t,n){this.N=t,this.I=n}}function N(t,n){let e;return n>32?(e=64-n,new Y(t.I<<n|t.N>>>e,t.N<<n|t.I>>>e)):0!==n?(e=32-n,new Y(t.N<<n|t.I>>>e,t.I<<n|t.N>>>e)):t}function I(t,n){let e;return n<32?(e=32-n,new Y(t.N>>>n|t.I<<e,t.I>>>n|t.N<<e)):(e=64-n,new Y(t.I>>>n|t.N<<e,t.N>>>n|t.I<<e))}function X(t,n){return new Y(t.N>>>n,t.I>>>n|t.N<<32-n)}function z(t,n,e){return new Y(t.N&n.N^t.N&e.N^n.N&e.N,t.I&n.I^t.I&e.I^n.I&e.I)}function x(t){const n=I(t,28),e=I(t,34),r=I(t,39);return new Y(n.N^e.N^r.N,n.I^e.I^r.I)}function _(t,n){let e,r;e=(65535&t.I)+(65535&n.I),r=(t.I>>>16)+(n.I>>>16)+(e>>>16);const i=(65535&r)<<16|65535&e;e=(65535&t.N)+(65535&n.N)+(r>>>16),r=(t.N>>>16)+(n.N>>>16)+(e>>>16);return new Y((65535&r)<<16|65535&e,i)}function O(t,n,e,r){let i,s;i=(65535&t.I)+(65535&n.I)+(65535&e.I)+(65535&r.I),s=(t.I>>>16)+(n.I>>>16)+(e.I>>>16)+(r.I>>>16)+(i>>>16);const o=(65535&s)<<16|65535&i;i=(65535&t.N)+(65535&n.N)+(65535&e.N)+(65535&r.N)+(s>>>16),s=(t.N>>>16)+(n.N>>>16)+(e.N>>>16)+(r.N>>>16)+(i>>>16);return new Y((65535&s)<<16|65535&i,o)}function P(t,n,e,r,i){let s,o;s=(65535&t.I)+(65535&n.I)+(65535&e.I)+(65535&r.I)+(65535&i.I),o=(t.I>>>16)+(n.I>>>16)+(e.I>>>16)+(r.I>>>16)+(i.I>>>16)+(s>>>16);const h=(65535&o)<<16|65535&s;s=(65535&t.N)+(65535&n.N)+(65535&e.N)+(65535&r.N)+(65535&i.N)+(o>>>16),o=(t.N>>>16)+(n.N>>>16)+(e.N>>>16)+(r.N>>>16)+(i.N>>>16)+(s>>>16);return new Y((65535&o)<<16|65535&s,h)}function V(t,n){return new Y(t.N^n.N,t.I^n.I)}function Z(t){const n=I(t,19),e=I(t,61),r=X(t,6);return new Y(n.N^e.N^r.N,n.I^e.I^r.I)}function j(t){const n=I(t,1),e=I(t,8),r=X(t,7);return new Y(n.N^e.N^r.N,n.I^e.I^r.I)}function q(t){const n=I(t,14),e=I(t,18),r=I(t,41);return new Y(n.N^e.N^r.N,n.I^e.I^r.I)}const D=[new Y(h[0],3609767458),new Y(h[1],602891725),new Y(h[2],3964484399),new Y(h[3],2173295548),new Y(h[4],4081628472),new Y(h[5],3053834265),new Y(h[6],2937671579),new Y(h[7],3664609560),new Y(h[8],2734883394),new Y(h[9],1164996542),new Y(h[10],1323610764),new Y(h[11],3590304994),new Y(h[12],4068182383),new Y(h[13],991336113),new Y(h[14],633803317),new Y(h[15],3479774868),new Y(h[16],2666613458),new Y(h[17],944711139),new Y(h[18],2341262773),new Y(h[19],2007800933),new Y(h[20],1495990901),new Y(h[21],1856431235),new Y(h[22],3175218132),new Y(h[23],2198950837),new Y(h[24],3999719339),new Y(h[25],766784016),new Y(h[26],2566594879),new Y(h[27],3203337956),new Y(h[28],1034457026),new Y(h[29],2466948901),new Y(h[30],3758326383),new Y(h[31],168717936),new Y(h[32],1188179964),new Y(h[33],1546045734),new Y(h[34],1522805485),new Y(h[35],2643833823),new Y(h[36],2343527390),new Y(h[37],1014477480),new Y(h[38],1206759142),new Y(h[39],344077627),new Y(h[40],1290863460),new Y(h[41],3158454273),new Y(h[42],3505952657),new Y(h[43],106217008),new Y(h[44],3606008344),new Y(h[45],1432725776),new Y(h[46],1467031594),new Y(h[47],851169720),new Y(h[48],3100823752),new Y(h[49],1363258195),new Y(h[50],3750685593),new Y(h[51],3785050280),new Y(h[52],3318307427),new Y(h[53],3812723403),new Y(h[54],2003034995),new Y(h[55],3602036899),new Y(h[56],1575990012),new Y(h[57],1125592928),new Y(h[58],2716904306),new Y(h[59],442776044),new Y(h[60],593698344),new Y(h[61],3733110249),new Y(h[62],2999351573),new Y(h[63],3815920427),new Y(3391569614,3928383900),new Y(3515267271,566280711),new Y(3940187606,3454069534),new Y(4118630271,4000239992),new Y(116418474,1914138554),new Y(174292421,2731055270),new Y(289380356,3203993006),new Y(460393269,320620315),new Y(685471733,587496836),new Y(852142971,1086792851),new Y(1017036298,365543100),new Y(1126000580,2618297676),new Y(1288033470,3409855158),new Y(1501505948,4234509866),new Y(1607167915,987167468),new Y(1816402316,1246189591)];function G(t){return\"SHA-384\"===t?[new Y(3418070365,u[0]),new Y(1654270250,u[1]),new Y(2438529370,u[2]),new Y(355462360,u[3]),new Y(1731405415,u[4]),new Y(41048885895,u[5]),new Y(3675008525,u[6]),new Y(1203062813,u[7])]:[new Y(w[0],4089235720),new Y(w[1],2227873595),new Y(w[2],4271175723),new Y(w[3],1595750129),new Y(w[4],2917565137),new Y(w[5],725511199),new Y(w[6],4215389547),new Y(w[7],327033209)]}function J(t,n){let e,r,i,s,o,h,u,w,c,f,a,l;const A=[];for(e=n[0],r=n[1],i=n[2],s=n[3],o=n[4],h=n[5],u=n[6],w=n[7],a=0;a<80;a+=1)a<16?(l=2*a,A[a]=new Y(t[l],t[l+1])):A[a]=O(Z(A[a-2]),A[a-7],j(A[a-15]),A[a-16]),c=P(w,q(o),(H=h,S=u,new Y((E=o).N&H.N^~E.N&S.N,E.I&H.I^~E.I&S.I)),D[a],A[a]),f=_(x(e),z(e,r,i)),w=u,u=h,h=o,o=_(s,c),s=i,i=r,r=e,e=_(c,f);var E,H,S;return n[0]=_(e,n[0]),n[1]=_(r,n[1]),n[2]=_(i,n[2]),n[3]=_(s,n[3]),n[4]=_(o,n[4]),n[5]=_(h,n[5]),n[6]=_(u,n[6]),n[7]=_(w,n[7]),n}let Q=class extends E{constructor(t,n,e){if(\"SHA-384\"!==t&&\"SHA-512\"!==t)throw new Error(c);super(t,n,e);const r=e||{};this.g=this.Y,this.M=!0,this.T=-1,this.C=i(this.t,this.i,this.T),this.v=J,this.L=function(t){return t.slice()},this.B=G,this.F=function(n,e,r,i){return function(t,n,e,r,i){let s,h;const u=31+(n+129>>>10<<5),w=n+e;for(;t.length<=u;)t.push(0);for(t[n>>>5]|=128<<24-n%32,t[u]=4294967295&w,t[u-1]=w/o|0,s=0;s<t.length;s+=32)r=J(t.slice(s,s+32),r);return h=\"SHA-384\"===i?[r[0].N,r[0].I,r[1].N,r[1].I,r[2].N,r[2].I,r[3].N,r[3].I,r[4].N,r[4].I,r[5].N,r[5].I]:[r[0].N,r[0].I,r[1].N,r[1].I,r[2].N,r[2].I,r[3].N,r[3].I,r[4].N,r[4].I,r[5].N,r[5].I,r[6].N,r[6].I,r[7].N,r[7].I],h}(n,e,r,i,t)},this.U=G(t),this.m=1024,this.R=\"SHA-384\"===t?384:512,this.K=!1,r.hmacKey&&this.k(A(\"hmacKey\",r.hmacKey,this.T))}};const W=[new Y(0,1),new Y(0,32898),new Y(2147483648,32906),new Y(2147483648,2147516416),new Y(0,32907),new Y(0,2147483649),new Y(2147483648,2147516545),new Y(2147483648,32777),new Y(0,138),new Y(0,136),new Y(0,2147516425),new Y(0,2147483658),new Y(0,2147516555),new Y(2147483648,139),new Y(2147483648,32905),new Y(2147483648,32771),new Y(2147483648,32770),new Y(2147483648,128),new Y(0,32778),new Y(2147483648,2147483658),new Y(2147483648,2147516545),new Y(2147483648,32896),new Y(0,2147483649),new Y(2147483648,2147516424)],$=[[0,36,3,41,18],[1,44,10,45,2],[62,6,43,15,61],[28,55,25,21,56],[27,20,39,8,14]];function tt(t){let n;const e=[];for(n=0;n<5;n+=1)e[n]=[new Y(0,0),new Y(0,0),new Y(0,0),new Y(0,0),new Y(0,0)];return e}function nt(t){let n;const e=[];for(n=0;n<5;n+=1)e[n]=t[n].slice();return e}function et(t,n){let e,r,i,s;const o=[],h=[];if(null!==t)for(r=0;r<t.length;r+=2)n[(r>>>1)%5][(r>>>1)/5|0]=V(n[(r>>>1)%5][(r>>>1)/5|0],new Y(t[r+1],t[r]));for(e=0;e<24;e+=1){for(s=tt(),r=0;r<5;r+=1)o[r]=(u=n[r][0],w=n[r][1],c=n[r][2],f=n[r][3],a=n[r][4],new Y(u.N^w.N^c.N^f.N^a.N,u.I^w.I^c.I^f.I^a.I));for(r=0;r<5;r+=1)h[r]=V(o[(r+4)%5],N(o[(r+1)%5],1));for(r=0;r<5;r+=1)for(i=0;i<5;i+=1)n[r][i]=V(n[r][i],h[r]);for(r=0;r<5;r+=1)for(i=0;i<5;i+=1)s[i][(2*r+3*i)%5]=N(n[r][i],$[r][i]);for(r=0;r<5;r+=1)for(i=0;i<5;i+=1)n[r][i]=V(s[r][i],new Y(~s[(r+1)%5][i].N&s[(r+2)%5][i].N,~s[(r+1)%5][i].I&s[(r+2)%5][i].I));n[0][0]=V(n[0][0],W[e])}var u,w,c,f,a;return n}function rt(t){let n,e,r=0;const i=[0,0],s=[4294967295&t,t/o&2097151];for(n=6;n>=0;n--)e=s[n>>2]>>>8*n&255,0===e&&0===r||(i[r+1>>2]|=e<<8*(r+1),r+=1);return r=0!==r?r:1,i[0]|=r,{value:r+1>4?i:[i[0]],binLen:8+8*r}}function it(t){return a(rt(t.binLen),t)}function st(t,n){let e,r=rt(n);r=a(r,t);const i=n>>>2,s=(i-r.value.length%i)%i;for(e=0;e<s;e++)r.value.push(0);return r.value}let ot=class extends E{constructor(t,n,e){let r=6,s=0;super(t,n,e);const o=e||{};if(1!==this.numRounds){if(o.kmacKey||o.hmacKey)throw new Error(f);if(\"CSHAKE128\"===this.o||\"CSHAKE256\"===this.o)throw new Error(\"Cannot set numRounds for CSHAKE variants\")}switch(this.T=1,this.C=i(this.t,this.i,this.T),this.v=et,this.L=nt,this.B=tt,this.U=tt(),this.K=!1,t){case\"SHA3-224\":this.m=s=1152,this.R=224,this.M=!0,this.g=this.Y;break;case\"SHA3-256\":this.m=s=1088,this.R=256,this.M=!0,this.g=this.Y;break;case\"SHA3-384\":this.m=s=832,this.R=384,this.M=!0,this.g=this.Y;break;case\"SHA3-512\":this.m=s=576,this.R=512,this.M=!0,this.g=this.Y;break;case\"SHAKE128\":r=31,this.m=s=1344,this.R=-1,this.K=!0,this.M=!1,this.g=null;break;case\"SHAKE256\":r=31,this.m=s=1088,this.R=-1,this.K=!0,this.M=!1,this.g=null;break;case\"KMAC128\":r=4,this.m=s=1344,this.X(e),this.R=-1,this.K=!0,this.M=!1,this.g=this._;break;case\"KMAC256\":r=4,this.m=s=1088,this.X(e),this.R=-1,this.K=!0,this.M=!1,this.g=this._;break;case\"CSHAKE128\":this.m=s=1344,r=this.O(e),this.R=-1,this.K=!0,this.M=!1,this.g=null;break;case\"CSHAKE256\":this.m=s=1088,r=this.O(e),this.R=-1,this.K=!0,this.M=!1,this.g=null;break;default:throw new Error(c)}this.F=function(t,n,e,i,o){return function(t,n,e,r,i,s,o){let h,u,w=0;const c=[],f=i>>>5,a=n>>>5;for(h=0;h<a&&n>=i;h+=f)r=et(t.slice(h,h+f),r),n-=i;for(t=t.slice(h),n%=i;t.length<f;)t.push(0);for(h=n>>>3,t[h>>2]^=s<<h%4*8,t[f-1]^=2147483648,r=et(t,r);32*c.length<o&&(u=r[w%5][w/5|0],c.push(u.I),!(32*c.length>=o));)c.push(u.N),w+=1,0==64*w%i&&(et(null,r),w=0);return c}(t,n,0,i,s,r,o)},o.hmacKey&&this.k(A(\"hmacKey\",o.hmacKey,this.T))}O(t,n){const e=function(t){const n=t||{};return{funcName:A(\"funcName\",n.funcName,1,{value:[],binLen:0}),customization:A(\"Customization\",n.customization,1,{value:[],binLen:0})}}(t||{});n&&(e.funcName=n);const r=a(it(e.funcName),it(e.customization));if(0!==e.customization.binLen||0!==e.funcName.binLen){const t=st(r,this.m>>>3);for(let n=0;n<t.length;n+=this.m>>>5)this.U=this.v(t.slice(n,n+(this.m>>>5)),this.U),this.A+=this.m;return 4}return 31}X(t){const n=function(t){const n=t||{};return{kmacKey:A(\"kmacKey\",n.kmacKey,1),funcName:{value:[1128353099],binLen:32},customization:A(\"Customization\",n.customization,1,{value:[],binLen:0})}}(t||{});this.O(t,n.funcName);const e=st(it(n.kmacKey),this.m>>>3);for(let t=0;t<e.length;t+=this.m>>>5)this.U=this.v(e.slice(t,t+(this.m>>>5)),this.U),this.A+=this.m;this.H=!0}_(t){const n=a({value:this.h.slice(),binLen:this.u},function(t){let n,e,r=0;const i=[0,0],s=[4294967295&t,t/o&2097151];for(n=6;n>=0;n--)e=s[n>>2]>>>8*n&255,0===e&&0===r||(i[r>>2]|=e<<8*r,r+=1);return r=0!==r?r:1,i[r>>2]|=r<<8*r,{value:r+1>4?i:[i[0]],binLen:8+8*r}}(t.outputLen));return this.F(n.value,n.binLen,this.A,this.L(this.U),t.outputLen)}};class ht{constructor(t,n,e){if(\"SHA-1\"==t)this.P=new L(t,n,e);else if(\"SHA-224\"==t||\"SHA-256\"==t)this.P=new k(t,n,e);else if(\"SHA-384\"==t||\"SHA-512\"==t)this.P=new Q(t,n,e);else{if(\"SHA3-224\"!=t&&\"SHA3-256\"!=t&&\"SHA3-384\"!=t&&\"SHA3-512\"!=t&&\"SHAKE128\"!=t&&\"SHAKE256\"!=t&&\"CSHAKE128\"!=t&&\"CSHAKE256\"!=t&&\"KMAC128\"!=t&&\"KMAC256\"!=t)throw new Error(c);this.P=new ot(t,n,e)}}update(t){return this.P.update(t),this}getHash(t,n){return this.P.getHash(t,n)}setHMACKey(t,n,e){this.P.setHMACKey(t,n,e)}getHMAC(t,n){return this.P.getHMAC(t,n)}}export{ht as default};\n//# sourceMappingURL=sha.mjs.map\n","import jsSHA from 'jssha';\n\nexport interface AccountInfo {\n user_name: string;\n user_id: string;\n /**\n * A Zone account type (`admin` | `user` | `limited` | `root`, see\n * `ZoneUserType`) for user sessions, `service` for an AppService runtime.\n * Kept as a string: an unknown value must not break the session.\n */\n user_type?: string;\n session_token: string;\n refresh_token?: string;\n}\n\nconst LEGACY_ACCOUNT_STORAGE_KEY = \"buckyos.account_info\";\nconst BROWSER_USER_INFO_STORAGE_KEY = \"user_info\";\nconst BROWSER_IDENTITY_STORAGE_KEY = \"buckyos.identity\";\n\nexport interface BrowserUserInfo {\n user_name: string;\n user_id: string;\n /** Zone account type as verify-hub returned it; see `ZoneUserType`. */\n user_type: string;\n}\n\nfunction getAccountStorageKey(appId:string):string {\n return `buckyos.account_info.${appId}`;\n}\n\nfunction parseAccountInfo(raw:string|null):AccountInfo|null {\n if(raw == null) {\n return null;\n }\n\n try {\n return JSON.parse(raw) as AccountInfo;\n } catch {\n return null;\n }\n}\n\nfunction parseBrowserUserInfo(raw:string|null):BrowserUserInfo|null {\n if(raw == null) {\n return null;\n }\n\n try {\n const parsed = JSON.parse(raw) as {\n show_name?: unknown;\n user_name?: unknown;\n user_id?: unknown;\n user_type?: unknown;\n };\n const userId = typeof parsed.user_id === 'string' ? parsed.user_id.trim() : '';\n const userType = typeof parsed.user_type === 'string' ? parsed.user_type.trim() : '';\n const userNameCandidate = typeof parsed.user_name === 'string'\n ? parsed.user_name.trim()\n : typeof parsed.show_name === 'string'\n ? parsed.show_name.trim()\n : '';\n\n if(!userId || !userType) {\n return null;\n }\n\n return {\n user_name: userNameCandidate || userId,\n user_id: userId,\n user_type: userType,\n };\n } catch {\n return null;\n }\n}\n\nfunction parseTokenAppId(sessionToken:string):string|null {\n const parts = sessionToken.split('.');\n if(parts.length < 2) {\n return null;\n }\n\n try {\n const base64 = parts[1].replace(/-/g, '+').replace(/_/g, '/');\n const padded = base64 + '='.repeat((4 - (base64.length % 4)) % 4);\n const payload = JSON.parse(atob(padded)) as { appid?: unknown };\n if(typeof payload.appid === 'string' && payload.appid.trim().length > 0) {\n return payload.appid;\n }\n } catch {\n return null;\n }\n\n return null;\n}\n \n// 定义自定义事件\nexport const LOGIN_EVENT = 'onLogin';\n\nexport function hashPassword(username:string,password:string,nonce:number|null=null):string {\n const shaObj = new jsSHA(\"SHA-256\", \"TEXT\", { encoding: \"UTF8\" });\n shaObj.update(password+username+\".buckyos\");\n let org_password_hash_str = shaObj.getHash(\"B64\");\n if (nonce == null) {\n return org_password_hash_str;\n }\n const shaObj2 = new jsSHA(\"SHA-256\", \"TEXT\", { encoding: \"UTF8\" });\n let salt = org_password_hash_str + nonce.toString();\n shaObj2.update(salt);\n let result = shaObj2.getHash(\"B64\");\n return result;\n}\n\nexport function cleanLocalAccountInfo(appId:string) {\n localStorage.removeItem(getAccountStorageKey(appId));\n localStorage.removeItem(BROWSER_USER_INFO_STORAGE_KEY);\n localStorage.removeItem(BROWSER_IDENTITY_STORAGE_KEY);\n const legacy = parseAccountInfo(localStorage.getItem(LEGACY_ACCOUNT_STORAGE_KEY));\n if(legacy?.session_token && parseTokenAppId(legacy.session_token) === appId) {\n localStorage.removeItem(LEGACY_ACCOUNT_STORAGE_KEY);\n }\n //删除cookie\n let cookie_options = {\n path: \"/\",\n expires: new Date(0),\n secure: true,\n sameSite: \"Lax\"\n };\n document.cookie = `${appId}_token=; ${Object.entries(cookie_options).map(([key, value]) => `${key}=${value}`).join('; ')}`;\n\n}\n\nexport function saveLocalAccountInfo(appId:string, account_info:AccountInfo) {\n if(account_info.session_token == null) {\n console.error(\"session_token is null,can't save account info\");\n return;\n }\n\n localStorage.setItem(getAccountStorageKey(appId), JSON.stringify(account_info));\n //session token用cookie存储\n let cookie_options = {\n path: \"/\",\n expires: new Date(Date.now() + 1000 * 60 * 60 * 24 * 30), // 30天\n secure: true,\n sameSite: \"Lax\"\n };\n document.cookie = `${appId}_token=${account_info.session_token}; ${Object.entries(cookie_options).map(([key, value]) => `${key}=${value}`).join('; ')}`;\n}\n\nexport function saveBrowserUserInfo(userInfo:BrowserUserInfo) {\n localStorage.setItem(BROWSER_USER_INFO_STORAGE_KEY, JSON.stringify(userInfo));\n}\n\nexport function getBrowserUserInfo():BrowserUserInfo|null {\n return parseBrowserUserInfo(localStorage.getItem(BROWSER_USER_INFO_STORAGE_KEY));\n}\n\nexport function clearBrowserUserInfo() {\n localStorage.removeItem(BROWSER_USER_INFO_STORAGE_KEY);\n}\n\n/** The last current identity `/sso_refresh` returned (raw JSON, parse with `parseCurrentIdentity`). */\nexport function saveBrowserIdentity(identity:unknown) {\n localStorage.setItem(BROWSER_IDENTITY_STORAGE_KEY, JSON.stringify(identity));\n}\n\nexport function getBrowserIdentityRaw():unknown {\n const raw = localStorage.getItem(BROWSER_IDENTITY_STORAGE_KEY);\n if (!raw) {\n return null;\n }\n try {\n return JSON.parse(raw);\n } catch {\n return null;\n }\n}\n\nexport function clearBrowserIdentity() {\n localStorage.removeItem(BROWSER_IDENTITY_STORAGE_KEY);\n}\n\nexport function getLocalAccountInfo(appId:string):AccountInfo|null {\n const scoped = parseAccountInfo(localStorage.getItem(getAccountStorageKey(appId)));\n if(scoped != null) {\n return scoped;\n }\n\n const legacy = parseAccountInfo(localStorage.getItem(LEGACY_ACCOUNT_STORAGE_KEY));\n if(legacy?.session_token && parseTokenAppId(legacy.session_token) === appId) {\n localStorage.setItem(getAccountStorageKey(appId), JSON.stringify(legacy));\n return legacy;\n }\n\n return null;\n}\n","export type DID = string\nexport type JwkLike = Record<string, unknown>\n\n// Mirrors Rust name-lib DIDContext: \"@context\" is either the DID core context\n// string or an array starting with it (serde: string-or-array untagged enum).\nexport type DIDContext = string | string[]\n\n// Ed25519 public key JWK, aligned with Rust jsonwebtoken::jwk::Jwk output.\nexport interface Ed25519Jwk {\n kty: string\n crv: string\n x: string\n [key: string]: unknown\n}\n\nexport interface W3CVerificationMethod {\n type: string\n id: string\n controller: string\n publicKeyJwk: JwkLike\n [key: string]: unknown\n}\n\nexport interface W3CService {\n id: string\n type: string\n serviceEndpoint: string\n [key: string]: unknown\n}\n\n// Mirrors Rust name-lib DidDocType (serialized form). Custom doc types are\n// plain strings; `(string & {})` keeps literal completion without widening.\nexport type DidDocType =\n | 'zone'\n | 'owner'\n | 'info'\n | 'boot'\n | 'user'\n | 'device'\n | 'did-object'\n | 'agent'\n | (string & {})\n\nexport interface W3CDIDDocumentBase {\n '@context': DIDContext\n id: DID\n verificationMethod: W3CVerificationMethod[]\n authentication: string[]\n assertionMethod?: string[]\n assertion_method?: string[]\n capabilityInvocation?: string[]\n service?: W3CService[]\n exp: number\n iat: number\n version_seq?: number\n // Rust serde: rename \"keyScope\", deserialize alias \"buckyos:scopes\".\n keyScope?: Record<string, string[]>\n 'buckyos:scopes'?: Record<string, string[]>\n [key: string]: unknown\n}\n\nexport type W3CDIDDocument = W3CDIDDocumentBase\n\nexport interface OwnerWallet {\n type: string\n address: string\n}\n\n// Mirrors Rust name-lib OwnerDocument (user.rs).\n// Breaking changes vs the old BuckyOSOwnerConfigDocument:\n// - full_name -> display_name (Rust deserialize aliases: full_name, displayName)\n// - default_zone_did -> binded_zone_list (the default zone is the first entry)\n// - new optional avatar\nexport interface BuckyOSOwnerDocument extends W3CDIDDocumentBase {\n mini_version_seq?: number\n valid_iat?: number\n name: string\n display_name: string\n avatar?: string\n meta?: unknown\n zone_binding_model_version?: number\n binded_zone_list?: DID[]\n wallets?: Record<string, OwnerWallet>\n}\n\n// Mirrors Rust name-lib DeviceMiniDocument: {\"n\", \"x\", \"p\"?, \"exp\"}.\nexport interface BuckyOSDeviceMiniDocument {\n n: string\n x: string\n p?: number\n exp: number\n [key: string]: unknown\n}\n\n// Mirrors Rust name-lib DeviceDocument (device.rs).\n// Breaking change: device_mini_config_jwt -> device_mini_document_jwt.\nexport interface BuckyOSDeviceDocument extends W3CDIDDocumentBase {\n zone_did?: DID\n owner: DID\n device_type: string\n device_mini_document_jwt?: string\n name: string\n rtcp_port?: number\n ips?: string[]\n net_id?: string\n ddns_sn_url?: string\n support_container?: boolean\n capbilities?: Record<string, number>\n}\n\nexport interface BuckyOSAgentContactInfo {\n telegram?: string\n [key: string]: unknown\n}\n\nexport interface BuckyOSAgentHttpServicePorts {\n send_msg?: number\n [key: string]: unknown\n}\n\nexport interface BuckyOSAgentDocument extends W3CDIDDocumentBase {\n support_public_access: boolean\n contact: BuckyOSAgentContactInfo\n owner: DID\n eth_address?: string\n public_description?: string\n httpServicePorts: BuckyOSAgentHttpServicePorts\n}\n\nexport interface BuckyOSVerifyHubInfo {\n public_key: Ed25519Jwk\n}\n\n// Mirrors Rust name-lib ZoneDocument (zone.rs).\n// Breaking changes vs the old shape:\n// - docker_repo_base_url / verify_hub_info moved to the buckyos-api\n// BuckyOSZoneConfig wrapper (see below)\n// - new mini_device_jwts map (device name -> device mini doc jwt)\nexport interface BuckyOSZoneDocument extends W3CDIDDocumentBase {\n hostname: string\n owner: DID\n // OOD description strings, e.g. \"ood1\", \"ood1@wan\", \"ood1:192.168.1.2@lan1\"\n oods: string[]\n boot_jwt: string\n mini_device_jwts?: Record<string, string>\n devices?: Record<string, BuckyOSDeviceDocument>\n sn?: string\n}\n\n// Mirrors Rust buckyos-api ZoneConfig (system_config.rs): the value stored in\n// system_config, wrapping the zone document string (jwt or json-ld) plus the\n// zone runtime settings that were removed from ZoneDocument.\nexport interface BuckyOSZoneConfig {\n zone_document: string\n docker_repo_base_url?: string\n verify_hub_info?: BuckyOSVerifyHubInfo\n}\n\n// Mirrors Rust name-lib ZoneBootDocument (the payload stored in the zone DNS\n// TXT record / boot JWT). owner_key is stored separately in TXT records.\nexport interface BuckyOSZoneBootDocument {\n id?: DID\n oods: string[]\n sn?: string\n exp: number\n owner?: DID\n owner_key?: Ed25519Jwk\n [key: string]: unknown\n}\n\n// Mirrors Rust name-lib DIDObjectCard (did_object_card.rs).\nexport const DID_OBJECT_SERVICE_TYPE = 'DIDObjectService'\nexport const DID_OBJECT_SERVICE_ID = '#did-object'\n\nexport interface BuckyOSDIDObjectService {\n id: string\n type: string\n serviceEndpoint: string\n profile: string\n kind?: string\n [key: string]: unknown\n}\n\nexport interface BuckyOSDIDObjectCard {\n '@context': DIDContext\n id: DID\n alsoKnownAs?: string[]\n controller?: DID\n verificationMethod?: W3CVerificationMethod[]\n authentication?: string[]\n assertionMethod?: string[]\n capabilityInvocation?: string[]\n service?: BuckyOSDIDObjectService[]\n exp?: number\n iat?: number\n version_seq?: number\n keyScope?: Record<string, string[]>\n [key: string]: unknown\n}\n\n// Mirrors Rust name-lib NodeIdentityConfig (lib.rs). Legacy v1 shape kept for\n// reading old node_identity.json files; new deployments use\n// BuckyOSLocalNodeIdentityConfig (schema v2).\nexport interface BuckyOSNodeIdentityConfig {\n zone_did: DID\n owner_public_key: Ed25519Jwk\n owner_did: DID\n device_doc_jwt: string\n device_mini_doc_jwt: string\n zone_iat: number\n}\n\n// Mirrors Rust buckyos-api LocalNodeIdentityConfig (device_identity.rs).\n// The device jwts / private key now live in the identity-roots layout and are\n// no longer embedded in node_identity.json.\nexport const NODE_IDENTITY_SCHEMA_V2 = 'buckyos.node_identity.v2'\n\nexport interface BuckyOSLocalNodeIdentityConfig {\n schema: string\n zone_did: DID\n owner_did: DID\n owner_public_key: Ed25519Jwk\n device_name: string\n device_did: DID\n zone_iat: number\n}\n\n// Mirrors Rust buckyos-api ZoneTxtRecord (zone_txt_record.json).\nexport interface BuckyOSZoneTxtRecord {\n boot_config_jwt: string\n device_mini_doc_jwt: string\n pkx: string\n}\n\nexport type BuckyOSDIDDocument =\n | BuckyOSOwnerDocument\n | BuckyOSAgentDocument\n | BuckyOSDeviceDocument\n | BuckyOSZoneDocument\n | BuckyOSDIDObjectCard\n\nfunction isRecord(value: unknown): value is Record<string, unknown> {\n return typeof value === 'object' && value !== null && !Array.isArray(value)\n}\n\nfunction isVerificationMethodArray(value: unknown): value is W3CVerificationMethod[] {\n return Array.isArray(value)\n}\n\nfunction isServiceArray(value: unknown): value is W3CService[] {\n return value === undefined || Array.isArray(value)\n}\n\nfunction isDIDContext(value: unknown): value is DIDContext {\n if (typeof value === 'string') {\n return true\n }\n return Array.isArray(value) && value.every(item => typeof item === 'string')\n}\n\nexport function isW3CDIDDocumentBase(value: unknown): value is W3CDIDDocumentBase {\n if (!isRecord(value)) {\n return false\n }\n\n return isDIDContext(value['@context'])\n && typeof value.id === 'string'\n && isVerificationMethodArray(value.verificationMethod)\n && Array.isArray(value.authentication)\n && typeof value.exp === 'number'\n && typeof value.iat === 'number'\n && isServiceArray(value.service)\n}\n\n// Shape check mirrors Rust parse_did_doc owner routing:\n// verificationMethod + name + (display_name | displayName | full_name).\nexport function isBuckyOSOwnerDocument(value: unknown): value is BuckyOSOwnerDocument {\n return isW3CDIDDocumentBase(value)\n && typeof value.name === 'string'\n && (typeof value.display_name === 'string'\n || typeof value.displayName === 'string'\n || typeof value.full_name === 'string')\n}\n\nexport function isBuckyOSDeviceMiniDocument(value: unknown): value is BuckyOSDeviceMiniDocument {\n return isRecord(value)\n && typeof value.n === 'string'\n && typeof value.x === 'string'\n && typeof value.exp === 'number'\n}\n\nexport function isBuckyOSZoneBootDocument(value: unknown): value is BuckyOSZoneBootDocument {\n return isRecord(value)\n && Array.isArray(value.oods)\n && value.oods.every(item => typeof item === 'string')\n && typeof value.exp === 'number'\n}\n\n// Legacy v1 node_identity.json (embedded jwts).\nexport function isBuckyOSNodeIdentityConfig(value: unknown): value is BuckyOSNodeIdentityConfig {\n return isRecord(value)\n && typeof value.zone_did === 'string'\n && isRecord(value.owner_public_key)\n && typeof value.owner_did === 'string'\n && typeof value.device_doc_jwt === 'string'\n && typeof value.device_mini_doc_jwt === 'string'\n && typeof value.zone_iat === 'number'\n}\n\nexport function isBuckyOSLocalNodeIdentityConfig(value: unknown): value is BuckyOSLocalNodeIdentityConfig {\n return isRecord(value)\n && value.schema === NODE_IDENTITY_SCHEMA_V2\n && typeof value.zone_did === 'string'\n && typeof value.owner_did === 'string'\n && isRecord(value.owner_public_key)\n && typeof value.device_name === 'string'\n && typeof value.device_did === 'string'\n && typeof value.zone_iat === 'number'\n}\n\nexport function isBuckyOSDeviceDocument(value: unknown): value is BuckyOSDeviceDocument {\n return isW3CDIDDocumentBase(value)\n && typeof value.owner === 'string'\n && typeof value.device_type === 'string'\n && typeof value.name === 'string'\n}\n\nexport function isBuckyOSAgentDocument(value: unknown): value is BuckyOSAgentDocument {\n return isW3CDIDDocumentBase(value)\n && typeof value.owner === 'string'\n && isRecord(value.httpServicePorts)\n}\n\nexport function isBuckyOSZoneDocument(value: unknown): value is BuckyOSZoneDocument {\n return isW3CDIDDocumentBase(value)\n && typeof value.hostname === 'string'\n && typeof value.owner === 'string'\n && Array.isArray(value.oods)\n && typeof value.boot_jwt === 'string'\n}\n\n// Shape check mirrors Rust parse_did_doc DID Object Card routing: at least one\n// service entry of type DID_OBJECT_SERVICE_TYPE.\nexport function isBuckyOSDIDObjectCard(value: unknown): value is BuckyOSDIDObjectCard {\n if (!isRecord(value) || !isDIDContext(value['@context']) || typeof value.id !== 'string') {\n return false\n }\n const services = value.service\n return Array.isArray(services)\n && services.some(service => isRecord(service) && service.type === DID_OBJECT_SERVICE_TYPE)\n}\n\nexport function isBuckyOSZoneConfig(value: unknown): value is BuckyOSZoneConfig {\n return isRecord(value) && typeof value.zone_document === 'string'\n}\n\nexport function parseW3CDIDDocumentBase(value: unknown): W3CDIDDocumentBase | null {\n return isW3CDIDDocumentBase(value) ? value : null\n}\n\nexport function parseBuckyOSOwnerDocument(value: unknown): BuckyOSOwnerDocument | null {\n return isBuckyOSOwnerDocument(value) ? value : null\n}\n\nexport function parseBuckyOSDeviceMiniDocument(value: unknown): BuckyOSDeviceMiniDocument | null {\n return isBuckyOSDeviceMiniDocument(value) ? value : null\n}\n\n// Mirrors Rust parse_did_doc routing order (did.rs): owner -> agent -> device\n// -> zone -> did-object card.\nexport function parseBuckyOSDIDDocument(value: unknown): BuckyOSDIDDocument | null {\n if (isBuckyOSOwnerDocument(value)) {\n return value\n }\n if (isBuckyOSAgentDocument(value)) {\n return value\n }\n if (isBuckyOSDeviceDocument(value)) {\n return value\n }\n if (isBuckyOSZoneDocument(value)) {\n return value\n }\n if (isBuckyOSDIDObjectCard(value)) {\n return value\n }\n return null\n}\n\nexport function getDidMethod(did: DID): string | null {\n if (typeof did !== 'string' || !did.startsWith('did:')) {\n return null\n }\n\n const parts = did.split(':')\n return parts.length >= 3 ? parts[1] : null\n}\n\nexport function getDidIdentifier(did: DID): string | null {\n if (typeof did !== 'string' || !did.startsWith('did:')) {\n return null\n }\n\n const parts = did.split(':')\n return parts.length >= 3 ? parts.slice(2).join(':') : null\n}\n","// namelib: TypeScript mirror of buckyos-base/src/name-lib (identity documents,\n// DID, Ed25519 keys and EdDSA JWT encode/decode).\n//\n// Format hard constraints (must stay aligned with the Rust implementation):\n// - Keys: Ed25519. Private key is PKCS8 PEM, public key is JWK\n// {\"kty\":\"OKP\",\"crv\":\"Ed25519\",\"x\":\"<base64url 32B, no padding>\"}\n// - JWT: header is {\"alg\":\"EdDSA\"} (typ omitted, see Rust `header.typ = None`),\n// base64url without padding. Device documents are signed by the OWNER key.\n// - JSON field names/values follow Rust serde output; payload objects are built\n// in Rust struct declaration order so that JWTs are byte-identical for the\n// same key + payload (Ed25519 signatures are deterministic).\n//\n// This module is universal (browser + node): node:crypto is loaded lazily and\n// WebCrypto is used when the node runtime is unavailable.\n\nimport {\n BuckyOSAgentDocument,\n BuckyOSDeviceDocument,\n BuckyOSDeviceMiniDocument,\n BuckyOSDIDDocument,\n BuckyOSDIDObjectCard,\n BuckyOSNodeIdentityConfig,\n BuckyOSOwnerDocument,\n BuckyOSZoneBootDocument,\n BuckyOSZoneDocument,\n DidDocType,\n DIDContext,\n DID_OBJECT_SERVICE_TYPE,\n Ed25519Jwk,\n isBuckyOSDIDObjectCard,\n W3CDIDDocumentBase,\n W3CService,\n DID as DIDString,\n} from './types'\n\nexport const DID_CORE_CONTEXT = 'https://www.w3.org/ns/did/v1'\nexport const BUCKYOS_CONTEXT_BASE = 'https://buckyos.org/ns'\nexport const DID_DOC_AUTHKEY = '#auth-key'\n// Mirrors Rust name-lib DEFAULT_EXPIRE_TIME (5 years).\nexport const DEFAULT_EXPIRE_TIME = 3600 * 24 * 365 * 5\nconst DEFAULT_DOC_EXPIRE_TIME = 3600 * 24 * 365 * 10\n\nexport function buckyosContext(docType: string): DIDContext {\n return [DID_CORE_CONTEXT, `${BUCKYOS_CONTEXT_BASE}/${docType}/v1`]\n}\n\nexport function buckyosGetUnixTimestamp(): number {\n return Math.floor(Date.now() / 1000)\n}\n\n// ============================================================================\n// base64url helpers (browser-safe, no Buffer dependency)\n// ============================================================================\n\nconst BASE64_CHARS = 'ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/'\n\nfunction bytesToBase64(bytes: Uint8Array): string {\n let result = ''\n for (let i = 0; i < bytes.length; i += 3) {\n const b0 = bytes[i]\n const b1 = i + 1 < bytes.length ? bytes[i + 1] : 0\n const b2 = i + 2 < bytes.length ? bytes[i + 2] : 0\n result += BASE64_CHARS[b0 >> 2]\n result += BASE64_CHARS[((b0 & 0x03) << 4) | (b1 >> 4)]\n result += i + 1 < bytes.length ? BASE64_CHARS[((b1 & 0x0f) << 2) | (b2 >> 6)] : '='\n result += i + 2 < bytes.length ? BASE64_CHARS[b2 & 0x3f] : '='\n }\n return result\n}\n\nfunction base64ToBytes(base64: string): Uint8Array {\n const clean = base64.replace(/[^A-Za-z0-9+/]/g, '')\n const length = Math.floor((clean.length * 3) / 4)\n const bytes = new Uint8Array(length)\n let byteIndex = 0\n for (let i = 0; i < clean.length; i += 4) {\n const c0 = BASE64_CHARS.indexOf(clean[i])\n const c1 = BASE64_CHARS.indexOf(clean[i + 1])\n const c2 = i + 2 < clean.length ? BASE64_CHARS.indexOf(clean[i + 2]) : -1\n const c3 = i + 3 < clean.length ? BASE64_CHARS.indexOf(clean[i + 3]) : -1\n bytes[byteIndex++] = (c0 << 2) | (c1 >> 4)\n if (c2 >= 0) {\n bytes[byteIndex++] = ((c1 & 0x0f) << 4) | (c2 >> 2)\n }\n if (c3 >= 0) {\n bytes[byteIndex++] = ((c2 & 0x03) << 6) | c3\n }\n }\n return bytes.subarray(0, byteIndex)\n}\n\nexport function base64UrlEncodeBytes(bytes: Uint8Array): string {\n return bytesToBase64(bytes).replace(/\\+/g, '-').replace(/\\//g, '_').replace(/=+$/g, '')\n}\n\nexport function base64UrlDecodeToBytes(value: string): Uint8Array {\n return base64ToBytes(value.replace(/-/g, '+').replace(/_/g, '/'))\n}\n\nfunction utf8Encode(value: string): Uint8Array {\n if (typeof TextEncoder !== 'undefined') {\n return new TextEncoder().encode(value)\n }\n const bytes: number[] = []\n for (let i = 0; i < value.length; i++) {\n let code = value.codePointAt(i)!\n if (code > 0xffff) {\n i++\n }\n if (code < 0x80) {\n bytes.push(code)\n } else if (code < 0x800) {\n bytes.push(0xc0 | (code >> 6), 0x80 | (code & 0x3f))\n } else if (code < 0x10000) {\n bytes.push(0xe0 | (code >> 12), 0x80 | ((code >> 6) & 0x3f), 0x80 | (code & 0x3f))\n } else {\n bytes.push(\n 0xf0 | (code >> 18),\n 0x80 | ((code >> 12) & 0x3f),\n 0x80 | ((code >> 6) & 0x3f),\n 0x80 | (code & 0x3f),\n )\n }\n }\n return new Uint8Array(bytes)\n}\n\nfunction utf8Decode(bytes: Uint8Array): string {\n if (typeof TextDecoder !== 'undefined') {\n return new TextDecoder().decode(bytes)\n }\n let result = ''\n for (let i = 0; i < bytes.length;) {\n const b0 = bytes[i]\n if (b0 < 0x80) {\n result += String.fromCharCode(b0)\n i += 1\n } else if (b0 < 0xe0) {\n result += String.fromCharCode(((b0 & 0x1f) << 6) | (bytes[i + 1] & 0x3f))\n i += 2\n } else if (b0 < 0xf0) {\n result += String.fromCharCode(((b0 & 0x0f) << 12) | ((bytes[i + 1] & 0x3f) << 6) | (bytes[i + 2] & 0x3f))\n i += 3\n } else {\n const code = ((b0 & 0x07) << 18) | ((bytes[i + 1] & 0x3f) << 12) | ((bytes[i + 2] & 0x3f) << 6) | (bytes[i + 3] & 0x3f)\n result += String.fromCodePoint(code)\n i += 4\n }\n }\n return result\n}\n\nexport function base64UrlEncodeString(value: string): string {\n return base64UrlEncodeBytes(utf8Encode(value))\n}\n\nexport function base64UrlDecodeToString(value: string): string {\n return utf8Decode(base64UrlDecodeToBytes(value))\n}\n\n// ============================================================================\n// crypto runtime (node:crypto preferred, WebCrypto fallback)\n// ============================================================================\n\nfunction hasNodeRuntime(): boolean {\n const runtimeProcess = (globalThis as { process?: { versions?: { node?: string } } }).process\n return Boolean(runtimeProcess?.versions?.node)\n}\n\nasync function importNodeModule(moduleName: string): Promise<any> {\n if (typeof require === 'function') {\n return require(moduleName)\n }\n const dynamicImport = Function('name', 'return import(name)')\n return dynamicImport(moduleName) as Promise<any>\n}\n\nasync function getNodeCrypto(): Promise<any | null> {\n if (!hasNodeRuntime()) {\n return null\n }\n try {\n return await importNodeModule('node:crypto')\n } catch {\n return null\n }\n}\n\nfunction getSubtleCrypto(): SubtleCrypto {\n const subtle = (globalThis as { crypto?: { subtle?: SubtleCrypto } }).crypto?.subtle\n if (!subtle) {\n throw new Error('namelib: no crypto backend available (need node:crypto or WebCrypto with Ed25519 support)')\n }\n return subtle\n}\n\nconst PKCS8_PEM_HEADER = '-----BEGIN PRIVATE KEY-----'\nconst PKCS8_PEM_FOOTER = '-----END PRIVATE KEY-----'\n// SPKI DER prefix for an Ed25519 public key (RFC 8410), followed by the raw 32-byte key.\nconst ED25519_SPKI_PREFIX = new Uint8Array([\n 0x30, 0x2a, 0x30, 0x05, 0x06, 0x03, 0x2b, 0x65, 0x70, 0x03, 0x21, 0x00,\n])\n\nexport function pemToDer(pem: string): Uint8Array {\n const body = pem\n .replace(/-----BEGIN [^-]+-----/g, '')\n .replace(/-----END [^-]+-----/g, '')\n .replace(/\\s+/g, '')\n return base64ToBytes(body)\n}\n\nexport function derToPkcs8Pem(der: Uint8Array): string {\n const base64 = bytesToBase64(der)\n const lines: string[] = []\n for (let i = 0; i < base64.length; i += 64) {\n lines.push(base64.slice(i, i + 64))\n }\n return `${PKCS8_PEM_HEADER}\\n${lines.join('\\n')}\\n${PKCS8_PEM_FOOTER}\\n`\n}\n\nfunction concatBytes(a: Uint8Array, b: Uint8Array): Uint8Array {\n const result = new Uint8Array(a.length + b.length)\n result.set(a, 0)\n result.set(b, a.length)\n return result\n}\n\nfunction ed25519JwkToSpkiDer(jwk: Ed25519Jwk): Uint8Array {\n const x = base64UrlDecodeToBytes(jwk.x)\n if (x.length !== 32) {\n throw new Error(`namelib: invalid Ed25519 jwk, x must be 32 bytes, got ${x.length}`)\n }\n return concatBytes(ED25519_SPKI_PREFIX, x)\n}\n\nasync function ed25519Sign(data: Uint8Array, privateKeyPem: string): Promise<Uint8Array> {\n const nodeCrypto = await getNodeCrypto()\n if (nodeCrypto) {\n const key = nodeCrypto.createPrivateKey({ key: privateKeyPem, format: 'pem' })\n return new Uint8Array(nodeCrypto.sign(null, data, key))\n }\n const subtle = getSubtleCrypto()\n const der = pemToDer(privateKeyPem)\n const key = await subtle.importKey('pkcs8', der as unknown as ArrayBuffer, { name: 'Ed25519' } as Algorithm, false, ['sign'])\n const signature = await subtle.sign({ name: 'Ed25519' } as Algorithm, key, data as unknown as ArrayBuffer)\n return new Uint8Array(signature)\n}\n\nasync function ed25519Verify(data: Uint8Array, signature: Uint8Array, publicKeyJwk: Ed25519Jwk): Promise<boolean> {\n const nodeCrypto = await getNodeCrypto()\n if (nodeCrypto) {\n const key = nodeCrypto.createPublicKey({\n key: { kty: publicKeyJwk.kty, crv: publicKeyJwk.crv, x: publicKeyJwk.x },\n format: 'jwk',\n })\n return nodeCrypto.verify(null, data, key, signature)\n }\n const subtle = getSubtleCrypto()\n const der = ed25519JwkToSpkiDer(publicKeyJwk)\n const key = await subtle.importKey('spki', der as unknown as ArrayBuffer, { name: 'Ed25519' } as Algorithm, false, ['verify'])\n return subtle.verify({ name: 'Ed25519' } as Algorithm, key, signature as unknown as ArrayBuffer, data as unknown as ArrayBuffer)\n}\n\nexport interface Ed25519KeyPair {\n privateKeyPem: string\n publicKeyJwk: Ed25519Jwk\n}\n\n// Mirrors Rust name-lib generate_ed25519_key_pair():\n// returns (PKCS8 PEM private key, {\"kty\",\"crv\",\"x\"} public JWK).\nexport async function generateEd25519KeyPair(): Promise<Ed25519KeyPair> {\n const nodeCrypto = await getNodeCrypto()\n if (nodeCrypto) {\n const { privateKey, publicKey } = nodeCrypto.generateKeyPairSync('ed25519')\n const privateKeyPem = privateKey.export({ type: 'pkcs8', format: 'pem' }).toString()\n const jwk = publicKey.export({ format: 'jwk' }) as { x: string }\n return { privateKeyPem, publicKeyJwk: createJwkByX(jwk.x) }\n }\n const subtle = getSubtleCrypto()\n const keyPair = (await subtle.generateKey({ name: 'Ed25519' } as Algorithm, true, ['sign', 'verify'])) as CryptoKeyPair\n const pkcs8 = new Uint8Array(await subtle.exportKey('pkcs8', keyPair.privateKey))\n const jwk = (await subtle.exportKey('jwk', keyPair.publicKey)) as { x?: string }\n if (!jwk.x) {\n throw new Error('namelib: WebCrypto did not return Ed25519 public jwk')\n }\n return { privateKeyPem: derToPkcs8Pem(pkcs8), publicKeyJwk: createJwkByX(jwk.x) }\n}\n\n// Derive the public key x value from an Ed25519 PKCS8 PEM private key.\nexport async function getPublicKeyXFromPrivatePem(privateKeyPem: string): Promise<string> {\n const nodeCrypto = await getNodeCrypto()\n if (nodeCrypto) {\n const privateKey = nodeCrypto.createPrivateKey({ key: privateKeyPem, format: 'pem' })\n const publicKey = nodeCrypto.createPublicKey(privateKey)\n const jwk = publicKey.export({ format: 'jwk' }) as { x: string }\n return jwk.x\n }\n const subtle = getSubtleCrypto()\n const der = pemToDer(privateKeyPem)\n const key = await subtle.importKey('pkcs8', der as unknown as ArrayBuffer, { name: 'Ed25519' } as Algorithm, true, ['sign'])\n const jwk = (await subtle.exportKey('jwk', key)) as { x?: string }\n if (!jwk.x) {\n throw new Error('namelib: cannot derive public key from private pem')\n }\n return jwk.x\n}\n\n// ============================================================================\n// JWK helpers (mirror utility.rs)\n// ============================================================================\n\nexport function getXFromJwk(jwk: Ed25519Jwk | Record<string, unknown>): string {\n const x = (jwk as Record<string, unknown>).x\n if (typeof x !== 'string' || x.length === 0) {\n throw new Error('namelib: invalid jwk, missing x')\n }\n return x\n}\n\nexport function createJwkByX(x: string): Ed25519Jwk {\n return { kty: 'OKP', crv: 'Ed25519', x }\n}\n\nexport function getDeviceDidFromJwk(jwk: Ed25519Jwk | Record<string, unknown>): string {\n return `did:dev:${getXFromJwk(jwk)}`\n}\n\n// ============================================================================\n// JWT encode/decode (EdDSA / Ed25519)\n// ============================================================================\n\n// Sign a JWT the way Rust name-lib does: header {\"alg\":\"EdDSA\"} with typ\n// omitted, payload serialized with JSON.stringify (callers must build the\n// payload object in Rust struct field order to get byte-identical JWTs).\nexport async function signJwtEdDSA(payload: unknown, privateKeyPem: string, header?: Record<string, unknown>): Promise<string> {\n const headerJson = JSON.stringify(header ?? { alg: 'EdDSA' })\n const signingInput = `${base64UrlEncodeString(headerJson)}.${base64UrlEncodeString(JSON.stringify(payload))}`\n const signature = await ed25519Sign(utf8Encode(signingInput), privateKeyPem)\n return `${signingInput}.${base64UrlEncodeBytes(signature)}`\n}\n\n// Mirrors Rust decode_jwt_claim_without_verify.\nexport function decodeJwtClaimWithoutVerify(jwt: string): any {\n const parts = jwt.split('.')\n if (parts.length !== 3) {\n throw new Error('namelib: invalid jwt, parts.len != 3')\n }\n return JSON.parse(base64UrlDecodeToString(parts[1]))\n}\n\nexport function decodeJwtHeaderWithoutVerify(jwt: string): any {\n const parts = jwt.split('.')\n if (parts.length !== 3) {\n throw new Error('namelib: invalid jwt, parts.len != 3')\n }\n return JSON.parse(base64UrlDecodeToString(parts[0]))\n}\n\n// Verify the EdDSA signature with the given public JWK and return the decoded\n// claims. Mirrors Rust decode_json_from_jwt_with_default_pk (aud not checked).\nexport async function verifyJwtEdDSA(jwt: string, publicKeyJwk: Ed25519Jwk): Promise<any> {\n const parts = jwt.split('.')\n if (parts.length !== 3) {\n throw new Error('namelib: invalid jwt, parts.len != 3')\n }\n const header = JSON.parse(base64UrlDecodeToString(parts[0]))\n if (header.alg !== 'EdDSA') {\n throw new Error(`namelib: unsupported jwt alg: ${header.alg}`)\n }\n const signingInput = `${parts[0]}.${parts[1]}`\n const ok = await ed25519Verify(utf8Encode(signingInput), base64UrlDecodeToBytes(parts[2]), publicKeyJwk)\n if (!ok) {\n throw new Error('namelib: jwt signature verify failed')\n }\n return JSON.parse(base64UrlDecodeToString(parts[1]))\n}\n\n// Mirrors Rust EncodedDocument: a did document is either a JSON-LD value or a JWT string.\nexport type EncodedDocument =\n | { type: 'json'; value: any }\n | { type: 'jwt'; jwt: string }\n\nexport function encodedDocumentFromStr(docStr: string): EncodedDocument {\n if (docStr.startsWith('{') || docStr.startsWith('[')) {\n return { type: 'json', value: JSON.parse(docStr) }\n }\n return { type: 'jwt', jwt: docStr }\n}\n\nexport function encodedDocumentToJsonValue(doc: EncodedDocument): any {\n if (doc.type === 'jwt') {\n return decodeJwtClaimWithoutVerify(doc.jwt)\n }\n return doc.value\n}\n\nexport function encodedDocumentToString(doc: EncodedDocument): string {\n if (doc.type === 'jwt') {\n return doc.jwt\n }\n return JSON.stringify(doc.value)\n}\n\n// ============================================================================\n// DID (mirror did.rs)\n// ============================================================================\n\nlet knownWeb3BridgeConfig: Record<string, string> | null = null\n\n// Mirrors Rust KNOWN_WEB3_BRIDGE_CONFIG (OnceCell semantics: first set wins).\nexport function setKnownWeb3BridgeConfig(config: Record<string, string>): boolean {\n if (knownWeb3BridgeConfig !== null) {\n return false\n }\n knownWeb3BridgeConfig = { ...config }\n return true\n}\n\nexport function getKnownWeb3BridgeConfig(): Record<string, string> | null {\n return knownWeb3BridgeConfig\n}\n\n// Test-only escape hatch; Rust OnceCell cannot be reset, production code must not use this.\nexport function resetKnownWeb3BridgeConfigForTest(): void {\n knownWeb3BridgeConfig = null\n}\n\nexport class DID {\n method: string\n id: string\n\n constructor(method: string, id: string) {\n this.method = method\n this.id = id\n }\n\n static undefined(): DID {\n return new DID('undefined', 'undefined')\n }\n\n isUndefined(): boolean {\n return this.method === 'undefined'\n }\n\n isValid(): boolean {\n return this.method !== 'undefined'\n }\n\n static isDid(did: string): boolean {\n return did.startsWith('did:')\n }\n\n static fromStr(did: string): DID {\n const parts = did.split(':')\n if (parts[0] !== 'did') {\n // this is a host name\n const result = DID.fromHostName(did)\n if (result) {\n return result\n }\n throw new Error(`namelib: invalid did ${did}`)\n }\n return new DID(parts[1], parts.slice(2).join(':'))\n }\n\n static fromHostName(hostName: string): DID | null {\n if (hostName.endsWith('.did')) {\n const withoutSuffix = hostName.slice(0, -'.did'.length)\n const separator = withoutSuffix.lastIndexOf('.')\n if (separator > 0 && separator < withoutSuffix.length - 1) {\n return new DID(withoutSuffix.slice(separator + 1), withoutSuffix.slice(0, separator))\n }\n }\n\n if (knownWeb3BridgeConfig) {\n for (const method of Object.keys(knownWeb3BridgeConfig)) {\n const bridgeBaseHostname = knownWeb3BridgeConfig[method]\n if (hostName.endsWith(bridgeBaseHostname)) {\n if (hostName === bridgeBaseHostname) {\n break\n }\n const id = hostName.slice(0, hostName.length - bridgeBaseHostname.length - 1)\n return new DID(method, id)\n }\n }\n }\n\n return new DID('web', hostName)\n }\n\n static fromHostNameByBridge(hostName: string, method: string, bridgeBaseHostname: string): DID {\n if (hostName.endsWith(bridgeBaseHostname) && hostName !== bridgeBaseHostname) {\n const id = hostName.slice(0, hostName.length - bridgeBaseHostname.length - 1)\n return new DID(method, id)\n }\n\n if (hostName.endsWith('.did')) {\n const withoutSuffix = hostName.slice(0, -'.did'.length)\n const separator = withoutSuffix.lastIndexOf('.')\n if (separator > 0 && separator < withoutSuffix.length - 1) {\n return new DID(withoutSuffix.slice(separator + 1), withoutSuffix.slice(0, separator))\n }\n }\n\n return new DID('web', hostName)\n }\n\n toString(): DIDString {\n return `did:${this.method}:${this.id}`\n }\n\n isNamedObjId(): boolean {\n return this.method === 'dev'\n }\n\n getPathFromId(): string | null {\n const parts = this.id.split(':')\n if (parts.length > 1) {\n return parts.slice(1).join('/')\n }\n return null\n }\n\n // Mirrors Rust DID::upper_did: strip the left-most name label to get the\n // parent DID. Ports (%3A-encoded) and path segments do not take part in the\n // name hierarchy. Returns null when the parent is not independently\n // resolvable (top-level domain, IP address, first-level bns name, key DIDs).\n upperDid(): DID | null {\n const name = (this.id.split(':')[0] ?? '').split('%')[0] ?? ''\n switch (this.method) {\n case 'web': {\n if (isValidIpAddress(name)) {\n return null\n }\n const dotIndex = name.indexOf('.')\n if (dotIndex < 0) {\n return null\n }\n const upper = name.slice(dotIndex + 1)\n // Domains have at least one dot: when only the TLD remains there is\n // no queryable parent.\n if (!upper.includes('.')) {\n return null\n }\n return new DID('web', upper)\n }\n case 'bns': {\n const dotIndex = name.indexOf('.')\n if (dotIndex < 0) {\n return null\n }\n return new DID('bns', name.slice(dotIndex + 1))\n }\n default:\n return null\n }\n }\n\n // Mirrors Rust DID::to_filename: percent-encode the raw host uri so it is a\n // safe single-path-component file name.\n toFilename(): string {\n const HEX = '0123456789ABCDEF'\n const rawHostUri = this.toRawHostUri()\n const bytes = utf8Encode(rawHostUri)\n let filename = ''\n for (const byte of bytes) {\n const ch = String.fromCharCode(byte)\n if (/[A-Za-z0-9._-]/.test(ch)) {\n filename += ch\n } else {\n filename += `%${HEX[byte >> 4]}${HEX[byte & 0x0f]}`\n }\n }\n return filename\n }\n\n // For did:dev the id is the base64url Ed25519 public key.\n getEd25519AuthKey(): Uint8Array | null {\n if (this.method === 'dev') {\n return base64UrlDecodeToBytes(this.id)\n }\n return null\n }\n\n getAuthKeyJwk(): Ed25519Jwk | null {\n if (this.method === 'dev') {\n return createJwkByX(this.id)\n }\n return null\n }\n\n toRawHostName(): string {\n const realId = this.id.split(':')[0]\n if (this.method === 'web') {\n return realId\n }\n return `${realId}.${this.method}.did`\n }\n\n toRawHostUri(): string {\n const hostname = this.toRawHostName()\n const path = this.getPathFromId()\n return path ? `${hostname}/${path}` : hostname\n }\n\n toHostNameByBridge(bridgeBaseHostname: string): string {\n const realId = this.id.split(':')[0]\n if (this.method === 'web') {\n return realId\n }\n return `${realId}.${bridgeBaseHostname}`\n }\n\n toHostName(): string {\n const realId = this.id.split(':')[0]\n if (this.method === 'web') {\n return realId\n }\n\n if (knownWeb3BridgeConfig) {\n const bridgeBaseHostname = knownWeb3BridgeConfig[this.method]\n if (bridgeBaseHostname) {\n return `${realId}.${bridgeBaseHostname}`\n }\n }\n return `${realId}.${this.method}.did`\n }\n\n toHostUri(): string {\n const hostname = this.toHostName()\n const path = this.getPathFromId()\n return path ? `${hostname}/${path}` : hostname\n }\n\n equals(other: DID): boolean {\n return this.method === other.method && this.id === other.id\n }\n}\n\n// ============================================================================\n// OODDescriptionString (mirror zone.rs)\n// ============================================================================\n\nexport type DeviceNodeType = 'OOD' | 'Gateway' | 'OODOnly' | 'Server' | 'Device' | 'Sensor' | 'IoTController'\n\nexport interface OODDescription {\n name: string\n nodeType: DeviceNodeType\n netId?: string\n ip?: string\n}\n\n// Parses \"ood1\" | \"#gw1\" | \"$ood1\" | \"ood1:192.168.1.8@lan\" | \"ood1@wan\" ...\nexport function parseOODDescription(s: string): OODDescription {\n let nodeType: DeviceNodeType = 'OOD'\n let rest = s\n if (s.startsWith('#')) {\n nodeType = 'Gateway'\n rest = s.slice(1)\n } else if (s.startsWith('$')) {\n nodeType = 'OODOnly'\n rest = s.slice(1)\n }\n\n let netId: string | undefined\n const atIndex = rest.lastIndexOf('@')\n let beforeNetId = rest\n if (atIndex >= 0) {\n beforeNetId = rest.slice(0, atIndex)\n netId = rest.slice(atIndex + 1)\n }\n\n let ip: string | undefined\n let name = beforeNetId\n const colonIndex = beforeNetId.indexOf(':')\n if (colonIndex >= 0) {\n name = beforeNetId.slice(0, colonIndex)\n ip = beforeNetId.slice(colonIndex + 1)\n if (!isValidIpAddress(ip)) {\n throw new Error(`namelib: invalid ip addr: ${ip}`)\n }\n }\n\n // If IP is present but net_id is not, automatically set to wan\n if (ip !== undefined && netId === undefined) {\n netId = 'wan'\n }\n\n if (!name) {\n throw new Error('namelib: name in OODDescriptionString is empty')\n }\n\n return pruneUndefined({ name, nodeType, netId, ip })\n}\n\nexport function oodDescriptionToString(desc: OODDescription): string {\n let result: string\n switch (desc.nodeType) {\n case 'OOD':\n result = desc.name\n break\n case 'Gateway':\n result = `#${desc.name}`\n break\n case 'OODOnly':\n result = `$${desc.name}`\n break\n default:\n throw new Error('namelib: node type is not allow in oods')\n }\n\n if (desc.ip !== undefined) {\n result += `:${desc.ip}`\n if (desc.netId !== undefined && desc.netId !== 'wan') {\n result += `@${desc.netId}`\n }\n return result\n }\n\n if (desc.netId !== undefined) {\n result += `@${desc.netId}`\n }\n return result\n}\n\nexport function oodNodeTypeIsOod(nodeType: DeviceNodeType): boolean {\n return nodeType === 'OOD' || nodeType === 'OODOnly'\n}\n\nexport function oodNodeTypeIsGateway(nodeType: DeviceNodeType): boolean {\n return nodeType === 'Gateway' || nodeType === 'OOD'\n}\n\nfunction isValidIpAddress(value: string): boolean {\n const ipv4 = /^(\\d{1,3})\\.(\\d{1,3})\\.(\\d{1,3})\\.(\\d{1,3})$/\n const match = value.match(ipv4)\n if (match) {\n return match.slice(1).every(part => Number(part) <= 255)\n }\n // permissive IPv6 check\n return /^[0-9a-fA-F:]+$/.test(value) && value.includes(':')\n}\n\n// ============================================================================\n// document constructors (mirror user.rs / zone.rs / device.rs)\n// ============================================================================\n\nfunction pruneUndefined<T extends Record<string, any>>(obj: T): T {\n for (const key of Object.keys(obj)) {\n if (obj[key] === undefined) {\n delete obj[key]\n }\n }\n return obj\n}\n\nfunction asDid(value: DID | DIDString): DID {\n return value instanceof DID ? value : DID.fromStr(value)\n}\n\nexport const ZONE_BINDING_MODEL_VERSION = 2 as const\n\nexport type OwnerDocumentZoneBindingState =\n | 'legacy'\n | 'bound_v2'\n | 'unbound_v2'\n | 'unsupported_version'\n\nexport interface NewOwnerDocumentParams {\n did: DID | DIDString\n name: string\n displayName: string\n publicKeyJwk: Ed25519Jwk\n now?: number\n}\n\n// Mirrors Rust OwnerDocument::new. Field insertion order follows the Rust\n// struct so the serialized JSON / JWT payload is byte-compatible.\nexport function newOwnerDocument(params: NewOwnerDocumentParams): BuckyOSOwnerDocument {\n const did = asDid(params.did)\n const now = params.now ?? buckyosGetUnixTimestamp()\n const didStr = did.toString()\n return {\n '@context': buckyosContext('owner'),\n id: didStr,\n verificationMethod: [\n {\n type: 'Ed25519VerificationKey2020',\n id: '#main_key',\n controller: didStr,\n publicKeyJwk: params.publicKeyJwk,\n },\n ],\n authentication: ['#main_key'],\n assertion_method: ['#main_key'],\n capabilityInvocation: ['#main_key'],\n exp: now + DEFAULT_DOC_EXPIRE_TIME,\n iat: now,\n version_seq: 0,\n name: params.name,\n display_name: params.displayName,\n zone_binding_model_version: ZONE_BINDING_MODEL_VERSION,\n }\n}\n\n// Mirrors Rust OwnerDocument::new_by_pkx. pkx is either just the base64url x\n// of an Ed25519 public key, or \"<x>:<did method>:<did id>[...]\".\nexport function newOwnerDocumentByPkx(pkx: string, hostname: string): BuckyOSOwnerDocument {\n const parts = pkx.split(':')\n if (parts.length === 0 || !parts[0]) {\n throw new Error('namelib: invalid pkx: empty x')\n }\n const x = parts[0]\n if (!/^[A-Za-z0-9_-]+$/.test(x)) {\n throw new Error('namelib: invalid pkx: x must be base64url')\n }\n if (base64UrlDecodeToBytes(x).length !== 32) {\n throw new Error(`namelib: invalid pkx: x length must be 32 bytes`)\n }\n const jwk = createJwkByX(x)\n if (parts.length === 1) {\n const ownerDid = DID.fromStr(hostname)\n const ownerName = ownerDid.id\n return newOwnerDocument({\n did: ownerDid,\n name: ownerName,\n displayName: `${ownerName}@${hostname}`,\n publicKeyJwk: jwk,\n })\n }\n if (parts.length >= 3) {\n const ownerName = parts[2]\n return newOwnerDocument({\n did: new DID(parts[1], parts[2]),\n name: ownerName,\n displayName: `${ownerName}@${hostname}`,\n publicKeyJwk: jwk,\n })\n }\n throw new Error(`namelib: invalid pkx: ${pkx}`)\n}\n\n// Mirrors Rust OwnerDocument::set_default_zone_did: the default zone is the\n// FIRST entry of binded_zone_list and the \"#lastDoc\" service is replaced.\nexport function ownerDocumentSetDefaultZoneDid(ownerDoc: BuckyOSOwnerDocument, defaultZoneDid: DID | DIDString): void {\n const zoneDid = asDid(defaultZoneDid)\n const zoneDidStr = zoneDid.toString()\n const bindedZoneList = (ownerDoc.binded_zone_list ?? []).filter(did => did !== zoneDidStr)\n bindedZoneList.unshift(zoneDidStr)\n ownerDoc.binded_zone_list = bindedZoneList\n\n ownerDoc.zone_binding_model_version = ZONE_BINDING_MODEL_VERSION\n ownerDocumentSyncLastDocService(ownerDoc)\n}\n\nexport function ownerDocumentRemoveBoundZone(ownerDoc: BuckyOSOwnerDocument, zoneDid: DID | DIDString): boolean {\n const zoneDidStr = asDid(zoneDid).toString()\n const previousLength = ownerDoc.binded_zone_list?.length ?? 0\n ownerDoc.binded_zone_list = (ownerDoc.binded_zone_list ?? []).filter(did => did !== zoneDidStr)\n const removed = ownerDoc.binded_zone_list.length !== previousLength\n\n ownerDoc.zone_binding_model_version = ZONE_BINDING_MODEL_VERSION\n ownerDocumentSyncLastDocService(ownerDoc)\n return removed\n}\n\nfunction ownerDocumentSyncLastDocService(ownerDoc: BuckyOSOwnerDocument): void {\n const defaultZoneDid = ownerDoc.binded_zone_list?.[0]\n\n const lastDocServiceId = `${ownerDoc.id}#lastDoc`\n const services: W3CService[] = (ownerDoc.service ?? []).filter(service => service.id !== lastDocServiceId)\n if (defaultZoneDid !== undefined) {\n const zoneDid = asDid(defaultZoneDid)\n services.push({\n id: lastDocServiceId,\n type: 'DIDDoc',\n serviceEndpoint: `https://${zoneDid.toHostName()}/resolve/${ownerDoc.id}`,\n })\n }\n ownerDoc.service = services\n}\n\n// Mirrors Rust OwnerDocument::get_default_zone_did.\nexport function ownerDocumentGetDefaultZoneDid(ownerDoc: BuckyOSOwnerDocument): DIDString | null {\n return ownerDoc.binded_zone_list?.[0] ?? null\n}\n\n// Mirrors Rust OwnerDocument::is_bound_to_zone.\nexport function ownerDocumentIsBoundToZone(ownerDoc: BuckyOSOwnerDocument, zoneDid: DID | DIDString): boolean {\n const zoneDidStr = asDid(zoneDid).toString()\n return (ownerDoc.binded_zone_list ?? []).includes(zoneDidStr)\n}\n\nexport function ownerDocumentGetZoneBindingState(\n ownerDoc: BuckyOSOwnerDocument,\n zoneDid: DID | DIDString,\n): OwnerDocumentZoneBindingState {\n const version = ownerDoc.zone_binding_model_version\n if (version === undefined) {\n return 'legacy'\n }\n if (version !== ZONE_BINDING_MODEL_VERSION) {\n return 'unsupported_version'\n }\n return ownerDocumentIsBoundToZone(ownerDoc, zoneDid) ? 'bound_v2' : 'unbound_v2'\n}\n\n// Mirrors Rust OwnerDocument::get_historical_keys: every verification method\n// except #main_key, for fallback verification right after a key rotation.\nexport function ownerDocumentGetHistoricalKeys(ownerDoc: BuckyOSOwnerDocument): Array<[string, Ed25519Jwk]> {\n return ownerDoc.verificationMethod\n .filter(method => method.id !== '#main_key')\n .map(method => [method.id, method.publicKeyJwk as Ed25519Jwk])\n}\n\n// Mirrors Rust OwnerDocument::validate_jwt_revocation: an owner document can\n// declare mini_version_seq / valid_iat to revoke previously issued JWTs.\nexport function ownerDocumentValidateJwtRevocation(\n ownerDoc: BuckyOSOwnerDocument,\n docType: string,\n doc: EncodedDocument,\n): void {\n if (ownerDoc.mini_version_seq === undefined && ownerDoc.valid_iat === undefined) {\n return\n }\n if (doc.type !== 'jwt') {\n return\n }\n const docValue = encodedDocumentToJsonValue(doc)\n if (ownerDoc.mini_version_seq !== undefined) {\n const versionSeq = typeof docValue?.version_seq === 'number' ? docValue.version_seq : undefined\n if (versionSeq === undefined) {\n throw new Error(`namelib: ${docType} JWT missing version_seq required by owner revocation policy`)\n }\n if (versionSeq <= ownerDoc.mini_version_seq) {\n throw new Error(\n `namelib: ${docType} JWT version_seq ${versionSeq} is not greater than owner mini_version_seq ${ownerDoc.mini_version_seq}`,\n )\n }\n }\n if (ownerDoc.valid_iat !== undefined) {\n const iat = typeof docValue?.iat === 'number' ? docValue.iat : undefined\n if (iat === undefined) {\n throw new Error(`namelib: ${docType} JWT missing iat required by owner revocation policy`)\n }\n if (iat <= ownerDoc.valid_iat) {\n throw new Error(\n `namelib: ${docType} JWT iat ${iat} is not greater than owner valid_iat ${ownerDoc.valid_iat}`,\n )\n }\n }\n}\n\nexport interface NewZoneDocumentParams {\n id: DID | DIDString\n ownerDid: DID | DIDString\n publicKeyJwk: Ed25519Jwk\n now?: number\n}\n\n// Mirrors Rust ZoneDocument::new.\nexport function newZoneDocument(params: NewZoneDocumentParams): BuckyOSZoneDocument {\n const id = asDid(params.id)\n const ownerDid = asDid(params.ownerDid)\n const now = params.now ?? buckyosGetUnixTimestamp()\n const idStr = id.toString()\n return {\n '@context': buckyosContext('zone'),\n id: idStr,\n verificationMethod: [\n {\n type: 'Ed25519VerificationKey2020',\n id: '#main_key',\n controller: ownerDid.toString(),\n publicKeyJwk: params.publicKeyJwk,\n },\n ],\n authentication: ['#main_key'],\n assertionMethod: ['#main_key'],\n capabilityInvocation: ['#main_key'],\n service: [\n {\n id: `${idStr}#lastDoc`,\n type: 'DIDDoc',\n serviceEndpoint: `https://${id.toHostName()}/resolve/this_zone`,\n },\n ],\n exp: now + DEFAULT_DOC_EXPIRE_TIME,\n iat: now,\n version_seq: 0,\n hostname: id.toHostName(),\n owner: ownerDid.toString(),\n oods: [],\n boot_jwt: '',\n }\n}\n\n// Mirrors Rust ZoneDocument::get_default_zone_gateway.\nexport function zoneDocumentGetDefaultGateway(zoneDoc: BuckyOSZoneDocument): string | null {\n for (const oodString of zoneDoc.oods) {\n const ood = parseOODDescription(oodString)\n if (oodNodeTypeIsGateway(ood.nodeType)) {\n return ood.name\n }\n }\n return null\n}\n\n// Mirrors Rust ZoneDocument::get_sn_api_url.\nexport function zoneDocumentGetSnApiUrl(zoneDoc: BuckyOSZoneDocument): string | null {\n return zoneDoc.sn !== undefined ? `https://${zoneDoc.sn}/kapi/sn` : null\n}\n\nexport interface NewZoneBootDocumentParams {\n id?: DID | DIDString\n oods: string[]\n sn?: string\n exp: number\n owner?: DID | DIDString\n ownerKey?: Ed25519Jwk\n}\n\nexport function newZoneBootDocument(params: NewZoneBootDocumentParams): BuckyOSZoneBootDocument {\n return pruneUndefined({\n id: params.id !== undefined ? asDid(params.id).toString() : undefined,\n oods: [...params.oods],\n sn: params.sn,\n exp: params.exp,\n owner: params.owner !== undefined ? asDid(params.owner).toString() : undefined,\n owner_key: params.ownerKey,\n })\n}\n\n// Mirrors Rust ZoneBootDocument::encode: sign the boot document as an EdDSA\n// JWT. Payload key order: id?, oods, sn?, exp, owner?, owner_key?.\nexport async function encodeZoneBootDocument(bootDoc: BuckyOSZoneBootDocument, ownerPrivateKeyPem: string): Promise<string> {\n const { id, oods, sn, exp, owner, owner_key, ...extra } = bootDoc\n const payload = pruneUndefined({ id, oods, sn, exp, owner, ...extra, owner_key })\n return signJwtEdDSA(payload, ownerPrivateKeyPem)\n}\n\nexport async function decodeZoneBootDocument(jwt: string, publicKeyJwk?: Ed25519Jwk): Promise<BuckyOSZoneBootDocument> {\n const payload = publicKeyJwk ? await verifyJwtEdDSA(jwt, publicKeyJwk) : decodeJwtClaimWithoutVerify(jwt)\n return payload as BuckyOSZoneBootDocument\n}\n\n// Mirrors Rust ZoneBootDocument::get_gateway_name.\nexport function zoneBootDocumentGetGatewayName(bootDoc: BuckyOSZoneBootDocument): string {\n for (const oodString of bootDoc.oods) {\n const ood = parseOODDescription(oodString)\n if (oodNodeTypeIsGateway(ood.nodeType)) {\n return ood.name\n }\n }\n return ''\n}\n\n// Mirrors Rust ZoneBootDocument::to_zone_document.\nexport function zoneBootDocumentToZoneDocument(bootDoc: BuckyOSZoneBootDocument, bootJwt: string): BuckyOSZoneDocument {\n if (!bootDoc.id || !bootDoc.owner_key) {\n throw new Error('namelib: zone boot document needs id and owner_key to build zone document')\n }\n const ownerDid = bootDoc.owner ? DID.fromStr(bootDoc.owner) : DID.undefined()\n const zoneDoc = newZoneDocument({\n id: bootDoc.id,\n ownerDid,\n publicKeyJwk: bootDoc.owner_key,\n })\n zoneDoc.boot_jwt = bootJwt\n zoneDoc.oods = [...bootDoc.oods]\n if (bootDoc.sn !== undefined) {\n zoneDoc.sn = bootDoc.sn\n } else {\n delete zoneDoc.sn\n }\n zoneDoc.exp = bootDoc.exp\n zoneDoc.iat = bootDoc.exp - DEFAULT_EXPIRE_TIME\n zoneDoc.version_seq = 0\n zoneDoc.owner = bootDoc.owner ?? DID.undefined().toString()\n return zoneDoc\n}\n\nexport interface NewDeviceDocumentParams {\n name: string\n // base64url Ed25519 public key (the \"x\" of the device JWK)\n pkx: string\n now?: number\n}\n\n// Mirrors Rust DeviceDocument::new.\nexport function newDeviceDocument(params: NewDeviceDocumentParams): BuckyOSDeviceDocument {\n const now = params.now ?? buckyosGetUnixTimestamp()\n const did = `did:dev:${params.pkx}`\n return {\n '@context': buckyosContext('device'),\n id: did,\n verificationMethod: [\n {\n type: 'Ed25519VerificationKey2020',\n id: '#main_key',\n controller: did,\n publicKeyJwk: createJwkByX(params.pkx),\n },\n ],\n authentication: ['#main_key'],\n assertion_method: ['#main_key'],\n capabilityInvocation: ['#main_key'],\n exp: now + DEFAULT_EXPIRE_TIME,\n iat: now,\n version_seq: 0,\n owner: DID.undefined().toString(),\n device_type: 'ood',\n name: params.name,\n }\n}\n\n// Mirrors Rust DeviceDocument::new_by_jwk.\nexport function newDeviceDocumentByJwk(name: string, publicKeyJwk: Ed25519Jwk, now?: number): BuckyOSDeviceDocument {\n return newDeviceDocument({ name, pkx: getXFromJwk(publicKeyJwk), now })\n}\n\n// Mirrors Rust DeviceDocument::new_by_mini_document.\nexport function newDeviceDocumentByMiniDocument(\n miniDocJwt: string,\n miniDoc: BuckyOSDeviceMiniDocument,\n zoneDid: DID | DIDString,\n ownerDid: DID | DIDString,\n): BuckyOSDeviceDocument {\n const did = `did:dev:${miniDoc.x}`\n const deviceDoc: BuckyOSDeviceDocument = {\n '@context': buckyosContext('device'),\n id: did,\n verificationMethod: [\n {\n type: 'Ed25519VerificationKey2020',\n id: '#main_key',\n controller: did,\n publicKeyJwk: createJwkByX(miniDoc.x),\n },\n ],\n authentication: ['#main_key'],\n assertion_method: ['#main_key'],\n capabilityInvocation: ['#main_key'],\n exp: miniDoc.exp,\n iat: miniDoc.exp - DEFAULT_EXPIRE_TIME,\n version_seq: 0,\n zone_did: asDid(zoneDid).toString(),\n owner: asDid(ownerDid).toString(),\n device_type: 'ood',\n device_mini_document_jwt: miniDocJwt,\n name: miniDoc.n,\n }\n if (miniDoc.p !== undefined) {\n deviceDoc.rtcp_port = miniDoc.p\n }\n return deviceDoc\n}\n\n// Serialize a DeviceDocument payload in Rust struct order and sign it.\n// NOTE: device documents are signed by the OWNER private key, not the device key.\nexport async function encodeDeviceDocument(deviceDoc: BuckyOSDeviceDocument, ownerPrivateKeyPem: string): Promise<string> {\n if (deviceDoc.version_seq === undefined) {\n throw new Error('namelib: DeviceDocument version_seq is required when encoding as JWT')\n }\n return signJwtEdDSA(deviceDocumentPayload(deviceDoc), ownerPrivateKeyPem)\n}\n\n// Rebuild the payload in Rust DeviceDocument serde order, applying the same\n// skip_serializing_if rules (support_container is skipped when true).\nfunction deviceDocumentPayload(doc: BuckyOSDeviceDocument): Record<string, unknown> {\n const {\n '@context': context, id, verificationMethod, authentication,\n assertion_method, capabilityInvocation, service, exp, iat, version_seq,\n keyScope, 'buckyos:scopes': buckyosScopes,\n zone_did, owner, device_type, device_mini_document_jwt, name, rtcp_port,\n ips, net_id, ddns_sn_url, support_container, capbilities, ...extra\n } = doc as Record<string, any>\n const keyScopeValue = keyScope ?? buckyosScopes\n return pruneUndefined({\n '@context': context,\n id,\n verificationMethod,\n authentication,\n assertion_method: assertion_method && assertion_method.length > 0 ? assertion_method : undefined,\n capabilityInvocation: capabilityInvocation && capabilityInvocation.length > 0 ? capabilityInvocation : undefined,\n service: service && service.length > 0 ? service : undefined,\n exp,\n iat,\n version_seq,\n ...extra,\n keyScope: keyScopeValue && Object.keys(keyScopeValue).length > 0 ? keyScopeValue : undefined,\n zone_did,\n owner,\n device_type,\n device_mini_document_jwt,\n name,\n rtcp_port,\n ips: ips && ips.length > 0 ? ips : undefined,\n net_id,\n ddns_sn_url,\n support_container: support_container === false ? false : undefined,\n capbilities: capbilities && Object.keys(capbilities).length > 0 ? capbilities : undefined,\n })\n}\n\nexport async function decodeDeviceDocument(jwt: string, publicKeyJwk?: Ed25519Jwk): Promise<BuckyOSDeviceDocument> {\n const payload = publicKeyJwk ? await verifyJwtEdDSA(jwt, publicKeyJwk) : decodeJwtClaimWithoutVerify(jwt)\n if (payload.version_seq === undefined) {\n throw new Error('namelib: DeviceDocument version_seq is required when decoding from JWT')\n }\n return payload as BuckyOSDeviceDocument\n}\n\nexport interface NewDeviceMiniDocumentParams {\n name: string\n x: string\n rtcpPort?: number\n exp: number\n}\n\nexport function newDeviceMiniDocument(params: NewDeviceMiniDocumentParams): BuckyOSDeviceMiniDocument {\n return pruneUndefined({\n n: params.name,\n x: params.x,\n p: params.rtcpPort,\n exp: params.exp,\n })\n}\n\n// Mirrors Rust DeviceMiniDocument::new_by_device_document.\nexport function newDeviceMiniDocumentByDeviceDocument(deviceDoc: BuckyOSDeviceDocument): BuckyOSDeviceMiniDocument {\n const defaultKey = deviceDoc.verificationMethod.find(method => method.id === '#main_key')\n if (!defaultKey) {\n throw new Error('namelib: device document has no #main_key verification method')\n }\n return newDeviceMiniDocument({\n name: deviceDoc.name,\n x: getXFromJwk(defaultKey.publicKeyJwk),\n rtcpPort: deviceDoc.rtcp_port,\n exp: deviceDoc.exp,\n })\n}\n\n// Mirrors Rust DeviceMiniDocument::to_jwt (signed by owner key).\n// Payload key order: n, x, p?, exp.\nexport async function deviceMiniDocumentToJwt(miniDoc: BuckyOSDeviceMiniDocument, ownerPrivateKeyPem: string): Promise<string> {\n const { n, x, p, exp, ...extra } = miniDoc\n const payload = pruneUndefined({ n, x, p, exp, ...extra })\n return signJwtEdDSA(payload, ownerPrivateKeyPem)\n}\n\nexport async function deviceMiniDocumentFromJwt(jwt: string, publicKeyJwk?: Ed25519Jwk): Promise<BuckyOSDeviceMiniDocument> {\n const payload = publicKeyJwk ? await verifyJwtEdDSA(jwt, publicKeyJwk) : decodeJwtClaimWithoutVerify(jwt)\n return payload as BuckyOSDeviceMiniDocument\n}\n\nexport interface NewNodeIdentityConfigParams {\n zoneDid: DID | DIDString\n ownerPublicKey: Ed25519Jwk\n ownerDid: DID | DIDString\n deviceDocJwt: string\n deviceMiniDocJwt: string\n zoneIat: number\n}\n\n// Mirrors Rust NodeIdentityConfig (field order follows the Rust struct).\nexport function newNodeIdentityConfig(params: NewNodeIdentityConfigParams): BuckyOSNodeIdentityConfig {\n return {\n zone_did: asDid(params.zoneDid).toString(),\n owner_public_key: params.ownerPublicKey,\n owner_did: asDid(params.ownerDid).toString(),\n device_doc_jwt: params.deviceDocJwt,\n device_mini_doc_jwt: params.deviceMiniDocJwt,\n zone_iat: params.zoneIat,\n }\n}\n\n// Serialize an OwnerDocument payload in Rust struct order and sign it.\nexport async function encodeOwnerDocument(ownerDoc: BuckyOSOwnerDocument, privateKeyPem: string): Promise<string> {\n if (ownerDoc.version_seq === undefined) {\n throw new Error('namelib: OwnerDocument version_seq is required when encoding as JWT')\n }\n return signJwtEdDSA(ownerDocumentPayload(ownerDoc), privateKeyPem)\n}\n\nfunction ownerDocumentPayload(doc: BuckyOSOwnerDocument): Record<string, unknown> {\n const {\n '@context': context, id, verificationMethod, authentication,\n assertion_method, capabilityInvocation, service, exp, iat,\n version_seq, mini_version_seq, valid_iat,\n keyScope, 'buckyos:scopes': buckyosScopes,\n name, display_name, avatar, meta, zone_binding_model_version, binded_zone_list, wallets, ...extra\n } = doc as Record<string, any>\n const keyScopeValue = keyScope ?? buckyosScopes\n return pruneUndefined({\n '@context': context,\n id,\n verificationMethod,\n authentication,\n assertion_method: assertion_method && assertion_method.length > 0 ? assertion_method : undefined,\n capabilityInvocation: capabilityInvocation && capabilityInvocation.length > 0 ? capabilityInvocation : undefined,\n service: service && service.length > 0 ? service : undefined,\n exp,\n iat,\n version_seq,\n mini_version_seq,\n valid_iat,\n ...extra,\n keyScope: keyScopeValue && Object.keys(keyScopeValue).length > 0 ? keyScopeValue : undefined,\n name,\n display_name,\n avatar,\n meta,\n zone_binding_model_version,\n binded_zone_list: binded_zone_list && binded_zone_list.length > 0 ? binded_zone_list : undefined,\n wallets: wallets && Object.keys(wallets).length > 0 ? wallets : undefined,\n })\n}\n\n// Serialize a ZoneDocument payload in Rust struct order and sign it.\nexport async function encodeZoneDocument(zoneDoc: BuckyOSZoneDocument, ownerPrivateKeyPem: string): Promise<string> {\n if (zoneDoc.version_seq === undefined) {\n throw new Error('namelib: ZoneDocument version_seq is required when encoding as JWT')\n }\n return signJwtEdDSA(zoneDocumentPayload(zoneDoc), ownerPrivateKeyPem)\n}\n\nfunction zoneDocumentPayload(doc: BuckyOSZoneDocument): Record<string, unknown> {\n const {\n '@context': context, id, verificationMethod, authentication,\n assertionMethod, capabilityInvocation, service, exp, iat, version_seq,\n keyScope, 'buckyos:scopes': buckyosScopes,\n hostname, owner, oods, boot_jwt, mini_device_jwts, devices, sn,\n ...extra\n } = doc as Record<string, any>\n const keyScopeValue = keyScope ?? buckyosScopes\n return pruneUndefined({\n '@context': context,\n id,\n verificationMethod,\n authentication,\n assertionMethod: assertionMethod && assertionMethod.length > 0 ? assertionMethod : undefined,\n capabilityInvocation: capabilityInvocation && capabilityInvocation.length > 0 ? capabilityInvocation : undefined,\n service: service && service.length > 0 ? service : undefined,\n exp,\n iat,\n version_seq,\n ...extra,\n keyScope: keyScopeValue && Object.keys(keyScopeValue).length > 0 ? keyScopeValue : undefined,\n hostname,\n owner,\n oods,\n boot_jwt,\n mini_device_jwts: mini_device_jwts && Object.keys(mini_device_jwts).length > 0 ? mini_device_jwts : undefined,\n devices: devices && Object.keys(devices).length > 0 ? devices : undefined,\n sn,\n })\n}\n\n// Ordered JSON views (Rust serde struct order). Use these when writing a\n// document to disk that must be byte-identical to Rust serde_json output.\nexport function ownerDocumentToOrderedJson(doc: BuckyOSOwnerDocument): Record<string, unknown> {\n return ownerDocumentPayload(doc)\n}\n\nexport function zoneDocumentToOrderedJson(doc: BuckyOSZoneDocument): Record<string, unknown> {\n return zoneDocumentPayload(doc)\n}\n\nexport function deviceDocumentToOrderedJson(doc: BuckyOSDeviceDocument): Record<string, unknown> {\n return deviceDocumentPayload(doc)\n}\n\n// ============================================================================\n// key scopes (mirror key_scope.rs)\n// ============================================================================\n\nexport const KEY_SCOPE_MANUAL = 'manual'\nexport const KEY_SCOPE_ZONE_PUBLISH = 'zone:publish'\nexport const KEY_SCOPE_MESSAGE_CREATE = 'message:create'\nexport const KEY_SCOPE_CONTENT_CREATE = 'content:create'\nexport const KEY_SCOPE_AGENT_SPEND = 'agent:spend'\nexport const KEY_SCOPE_AGENT_RECEIVE = 'agent:receive'\nexport const KEY_SCOPE_AGENT_CREATE_CONTENT = 'agent:create-content'\n\n// ============================================================================\n// DIDDocumentTrait helpers (mirror did.rs trait default methods)\n//\n// These operate on the serialized JSON form of any BuckyOS did document\n// (owner / zone / device / agent / did-object card).\n// ============================================================================\n\nexport type AnyBuckyOSDIDDocument = W3CDIDDocumentBase | BuckyOSDIDObjectCard\n\n// keyScope map (serde: rename \"keyScope\", deserialize alias \"buckyos:scopes\").\nexport function getDocumentKeyScope(doc: AnyBuckyOSDIDDocument): Record<string, string[]> {\n const keyScope = (doc.keyScope ?? doc['buckyos:scopes']) as Record<string, string[]> | undefined\n return keyScope ?? {}\n}\n\n// Mirrors get_auth_key: kid undefined means the first verification method.\nexport function getDocumentAuthKey(doc: AnyBuckyOSDIDDocument, kid?: string): Ed25519Jwk | null {\n const methods = doc.verificationMethod ?? []\n if (methods.length === 0) {\n return null\n }\n if (kid === undefined) {\n return methods[0].publicKeyJwk as Ed25519Jwk\n }\n const method = methods.find(item => item.id === kid)\n return method ? (method.publicKeyJwk as Ed25519Jwk) : null\n}\n\n// Mirrors get_default_key (owner/zone/device/agent): the #main_key entry.\nexport function getDocumentDefaultKey(doc: AnyBuckyOSDIDDocument): Ed25519Jwk | null {\n const method = (doc.verificationMethod ?? []).find(item => item.id === '#main_key')\n return method ? (method.publicKeyJwk as Ed25519Jwk) : null\n}\n\nexport function getKeyIdsByScope(doc: AnyBuckyOSDIDDocument, scope: string): string[] | null {\n return getDocumentKeyScope(doc)[scope] ?? null\n}\n\nexport function hasKeyScope(doc: AnyBuckyOSDIDDocument): boolean {\n return Object.keys(getDocumentKeyScope(doc)).length > 0\n}\n\n// Mirrors get_standard_scope_key_ids: capabilityInvocation, then\n// authentication (DID Object Cards also fall back to assertionMethod).\nexport function getStandardScopeKeyIds(doc: AnyBuckyOSDIDDocument): string[] | null {\n const capabilityInvocation = doc.capabilityInvocation\n if (Array.isArray(capabilityInvocation) && capabilityInvocation.length > 0) {\n return capabilityInvocation\n }\n const authentication = doc.authentication\n if (Array.isArray(authentication) && authentication.length > 0) {\n return authentication\n }\n if (isBuckyOSDIDObjectCard(doc)) {\n const assertionMethod = doc.assertionMethod\n if (Array.isArray(assertionMethod) && assertionMethod.length > 0) {\n return assertionMethod\n }\n }\n return null\n}\n\n// Mirrors normalize_key_id_for_local_lookup: \"<doc id>#key\" -> \"#key\".\nexport function normalizeKeyIdForLocalLookup(doc: AnyBuckyOSDIDDocument, keyId: string): string {\n const documentId = doc.id\n if (keyId.startsWith(documentId)) {\n const localKeyId = keyId.slice(documentId.length)\n if (localKeyId.startsWith('#')) {\n return localKeyId\n }\n }\n return keyId\n}\n\n// Mirrors expand_local_key_id: \"#key\" -> \"<doc id>#key\".\nexport function expandLocalKeyId(doc: AnyBuckyOSDIDDocument, keyId: string): string {\n if (keyId.startsWith('#')) {\n return `${doc.id}${keyId}`\n }\n return keyId\n}\n\nexport function isSameDocumentKeyId(doc: AnyBuckyOSDIDDocument, left: string, right: string): boolean {\n return left === right\n || normalizeKeyIdForLocalLookup(doc, left) === normalizeKeyIdForLocalLookup(doc, right)\n || expandLocalKeyId(doc, left) === expandLocalKeyId(doc, right)\n}\n\n// Mirrors get_key_from_key_ids: first key id that resolves to a key.\nexport function getKeyFromKeyIds(doc: AnyBuckyOSDIDDocument, keyIds: string[]): [string, Ed25519Jwk] | null {\n for (const keyId of keyIds) {\n const localKeyId = normalizeKeyIdForLocalLookup(doc, keyId)\n const jwk = getDocumentAuthKey(doc, localKeyId)\n if (jwk) {\n return [keyId, jwk]\n }\n }\n return null\n}\n\n// Mirrors get_key_by_scope: an explicit scope entry wins; a document WITH a\n// keyScope map denies unlisted scopes; a document WITHOUT one falls back to\n// the standard scope key ids, then to the default auth key.\nexport function getKeyByScope(doc: AnyBuckyOSDIDDocument, scope: string): [string, Ed25519Jwk] | null {\n const scopedKeyIds = getKeyIdsByScope(doc, scope)\n if (scopedKeyIds) {\n return getKeyFromKeyIds(doc, scopedKeyIds)\n }\n if (hasKeyScope(doc)) {\n return null\n }\n const standardKeyIds = getStandardScopeKeyIds(doc)\n if (standardKeyIds) {\n const key = getKeyFromKeyIds(doc, standardKeyIds)\n if (key) {\n return key\n }\n }\n const authKey = getDocumentAuthKey(doc)\n return authKey ? ['', authKey] : null\n}\n\n// Mirrors is_key_allowed_in_scope.\nexport function isKeyAllowedInScope(doc: AnyBuckyOSDIDDocument, scope: string, keyId: string): boolean {\n const scopedKeyIds = getKeyIdsByScope(doc, scope)\n if (scopedKeyIds) {\n return scopedKeyIds.some(allowedKeyId => isSameDocumentKeyId(doc, allowedKeyId, keyId))\n }\n if (hasKeyScope(doc)) {\n return false\n }\n const standardKeyIds = getStandardScopeKeyIds(doc)\n if (standardKeyIds) {\n return standardKeyIds.some(allowedKeyId => isSameDocumentKeyId(doc, allowedKeyId, keyId))\n }\n return getDocumentAuthKey(doc, normalizeKeyIdForLocalLookup(doc, keyId)) !== null\n}\n\n// ============================================================================\n// parse_did_doc (mirror did.rs parse_did_doc: route by document shape)\n// ============================================================================\n\nexport type ParsedDidDocument =\n | { docType: 'owner'; doc: BuckyOSOwnerDocument }\n | { docType: 'agent'; doc: BuckyOSAgentDocument }\n | { docType: 'device'; doc: BuckyOSDeviceDocument }\n | { docType: 'zone'; doc: BuckyOSZoneDocument }\n | { docType: 'did-object'; doc: BuckyOSDIDObjectCard }\n\n// Mirrors Rust parse_did_doc. Routing order: owner (verificationMethod + name\n// + display name in any casing) -> agent (httpServicePorts) -> device\n// (device_type) -> zone (oods) -> DID Object Card (DIDObjectService service).\n// Documents decoded from a JWT must carry version_seq (revocation policy).\nexport function parseDidDoc(doc: EncodedDocument | string): ParsedDidDocument {\n const encoded = typeof doc === 'string' ? encodedDocumentFromStr(doc) : doc\n const isJwt = encoded.type === 'jwt'\n const value = encodedDocumentToJsonValue(encoded)\n if (typeof value !== 'object' || value === null) {\n throw new Error('namelib: unknown did document')\n }\n const ensureVersionSeqForJwt = (docTypeName: string) => {\n if (isJwt && typeof value.version_seq !== 'number') {\n throw new Error(`namelib: ${docTypeName} version_seq is required when encoding as JWT`)\n }\n }\n\n if (value.verificationMethod !== undefined && value.name !== undefined\n && (value.display_name !== undefined || value.displayName !== undefined || value.full_name !== undefined)) {\n ensureVersionSeqForJwt('OwnerDocument')\n return { docType: 'owner', doc: value as BuckyOSOwnerDocument }\n }\n if (value.httpServicePorts !== undefined) {\n ensureVersionSeqForJwt('AgentDocument')\n return { docType: 'agent', doc: value as BuckyOSAgentDocument }\n }\n if (value.device_type !== undefined) {\n ensureVersionSeqForJwt('DeviceDocument')\n return { docType: 'device', doc: value as BuckyOSDeviceDocument }\n }\n if (value.oods !== undefined) {\n ensureVersionSeqForJwt('ZoneDocument')\n return { docType: 'zone', doc: value as BuckyOSZoneDocument }\n }\n if (Array.isArray(value.service)\n && value.service.some((service: any) => service?.type === DID_OBJECT_SERVICE_TYPE)) {\n ensureVersionSeqForJwt('DIDObjectCard')\n return { docType: 'did-object', doc: value as BuckyOSDIDObjectCard }\n }\n throw new Error('namelib: unknown did document')\n}\n\n// Mirrors DIDDocumentTrait::get_doc_type for the parseDidDoc result.\nexport function getDidDocType(parsed: ParsedDidDocument): DidDocType {\n return parsed.docType\n}\n\nexport function parseDidDocAs<T extends BuckyOSDIDDocument>(\n doc: EncodedDocument | string,\n docType: ParsedDidDocument['docType'],\n): T {\n const parsed = parseDidDoc(doc)\n if (parsed.docType !== docType) {\n throw new Error(`namelib: expected ${docType} document, got ${parsed.docType}`)\n }\n return parsed.doc as T\n}\n","/* jshint esversion: 6 */\n/* jslint node: true */\n'use strict';\n\nmodule.exports = function serialize (object) {\n if (typeof object === 'number' && isNaN(object)) {\n throw new Error('NaN is not allowed');\n }\n\n if (typeof object === 'number' && !isFinite(object)) {\n throw new Error('Infinity is not allowed');\n }\n\n if (object === null || typeof object !== 'object') {\n return JSON.stringify(object);\n }\n\n if (object.toJSON instanceof Function) {\n return serialize(object.toJSON());\n }\n\n if (Array.isArray(object)) {\n const values = object.reduce((t, cv, ci) => {\n const comma = ci === 0 ? '' : ',';\n const value = cv === undefined || typeof cv === 'symbol' ? null : cv;\n return `${t}${comma}${serialize(value)}`;\n }, '');\n return `[${values}]`;\n }\n\n const values = Object.keys(object).sort().reduce((t, cv) => {\n if (object[cv] === undefined ||\n typeof object[cv] === 'symbol') {\n return t;\n }\n const comma = t.length === 0 ? '' : ',';\n return `${t}${comma}${serialize(cv)}:${serialize(object[cv])}`;\n }, '');\n return `{${values}}`;\n};\n","// TypeScript port of cyfs-ndn/src/ndn-lib (Rust) NamedObject definitions.\n//\n// This file mirrors the data layout and on-the-wire JSON encoding of:\n// - ObjId / ChunkId / HashMethod / ChunkType\n// - NamedObject trait + helpers (build_obj_id, build_named_object_by_json,\n// verify_named_object, load_named_obj)\n// - BaseContentObject / FileObject / PathObject / InclusionProof\n// - SimpleObjectMap / SimpleMapItem / DirObject\n// - SimpleChunkList\n// - RelationObject\n//\n// The canonical JSON form (RFC 8785 / JCS) and SHA-256-based ObjId derivation\n// are the same as the Rust implementation, so ObjIds generated here are\n// byte-equivalent to those generated by ndn-lib for the same input.\n\nimport jsSHA from 'jssha'\nimport canonicalize from 'canonicalize'\n\n// ============================================================\n// Errors\n// ============================================================\n\nexport type NdnErrorKind =\n | 'Internal'\n | 'InvalidId'\n | 'InvalidLink'\n | 'NotFound'\n | 'NotReady'\n | 'AlreadyExists'\n | 'VerifyError'\n | 'IoError'\n | 'DbError'\n | 'InComplete'\n | 'RemoteError'\n | 'DecodeError'\n | 'OffsetTooLarge'\n | 'InvalidObjType'\n | 'InvalidData'\n | 'InvalidParam'\n | 'InvalidState'\n | 'PermissionDenied'\n | 'Unsupported'\n\nexport class NdnError extends Error {\n public readonly kind: NdnErrorKind\n constructor(kind: NdnErrorKind, message: string) {\n super(`${kind}: ${message}`)\n this.kind = kind\n this.name = 'NdnError'\n }\n}\n\n// ============================================================\n// Object type constants (from ndn-lib/src/lib.rs)\n// ============================================================\n\nexport const OBJ_TYPE_FILE = 'cyfile'\nexport const OBJ_TYPE_DIR = 'cydir'\nexport const OBJ_TYPE_MSG = 'cymsg'\nexport const OBJ_TYPE_MSG_RECE = 'cymsgr'\nexport const OBJ_TYPE_PATH = 'cypath'\nexport const OBJ_TYPE_INCLUSION_PROOF = 'cyinc'\nexport const OBJ_TYPE_RELATION = 'cyrel'\nexport const OBJ_TYPE_ACTION = 'cyact'\nexport const OBJ_TYPE_PACK = 'cypack'\n\nexport const OBJ_TYPE_TRIE = 'cytrie'\nexport const OBJ_TYPE_TRIE_SIMPLE = 'cytrie-s'\n\nexport const OBJ_TYPE_OBJMAP = 'cymap-mtp'\nexport const OBJ_TYPE_OBJMAP_SIMPLE = 'cymap'\n\nexport const OBJ_TYPE_LIST = 'cylist-mtree'\nexport const OBJ_TYPE_LIST_SIMPLE = 'cylist'\n\nexport const OBJ_TYPE_CHUNK_LIST = 'cl'\nexport const OBJ_TYPE_CHUNK_LIST_SIMPLE = 'clist'\nexport const OBJ_TYPE_CHUNK_LIST_FIX_SIZE = 'clist-fix'\nexport const OBJ_TYPE_CHUNK_LIST_SIMPLE_FIX_SIZE = 'cl-sf'\n\nexport const OBJ_TYPE_PKG = 'pkg'\n\nexport const RELATION_TYPE_SAME = 'same'\nexport const RELATION_TYPE_PART_OF = 'part_of'\n\n// ============================================================\n// Low-level encoding helpers\n// ============================================================\n\nconst HEX_CHARS = '0123456789abcdef'\n\nexport function bytesToHex(bytes: Uint8Array): string {\n let s = ''\n for (let i = 0; i < bytes.length; i++) {\n const b = bytes[i]\n s += HEX_CHARS[(b >>> 4) & 0xf]\n s += HEX_CHARS[b & 0xf]\n }\n return s\n}\n\nexport function hexToBytes(hex: string): Uint8Array {\n if (hex.length % 2 !== 0) {\n throw new NdnError('InvalidId', `invalid hex length: ${hex.length}`)\n }\n const out = new Uint8Array(hex.length / 2)\n for (let i = 0; i < out.length; i++) {\n const hi = HEX_CHARS.indexOf(hex[i * 2].toLowerCase())\n const lo = HEX_CHARS.indexOf(hex[i * 2 + 1].toLowerCase())\n if (hi < 0 || lo < 0) {\n throw new NdnError('InvalidId', `invalid hex char at offset ${i * 2}`)\n }\n out[i] = (hi << 4) | lo\n }\n return out\n}\n\n// Base32 RFC4648 lowercase, no padding (matches base32::Alphabet::Rfc4648Lower\n// {padding: false} used by ndn-lib).\nconst BASE32_ALPHABET = 'abcdefghijklmnopqrstuvwxyz234567'\n\nexport function base32Encode(bytes: Uint8Array): string {\n let bits = 0\n let value = 0\n let out = ''\n for (let i = 0; i < bytes.length; i++) {\n value = (value << 8) | bytes[i]\n bits += 8\n while (bits >= 5) {\n bits -= 5\n out += BASE32_ALPHABET[(value >>> bits) & 0x1f]\n }\n }\n if (bits > 0) {\n out += BASE32_ALPHABET[(value << (5 - bits)) & 0x1f]\n }\n return out\n}\n\nexport function base32Decode(str: string): Uint8Array {\n const lower = str.toLowerCase()\n let bits = 0\n let value = 0\n const out: number[] = []\n for (let i = 0; i < lower.length; i++) {\n const ch = lower[i]\n const idx = BASE32_ALPHABET.indexOf(ch)\n if (idx < 0) {\n throw new NdnError('InvalidId', `invalid base32 char '${ch}' at ${i}`)\n }\n value = (value << 5) | idx\n bits += 5\n if (bits >= 8) {\n bits -= 8\n out.push((value >>> bits) & 0xff)\n }\n }\n return new Uint8Array(out)\n}\n\n// Unsigned varint (LEB128) encoding, matches `unsigned_varint` crate used by\n// ndn-lib for length encoding inside ChunkId/ChunkList.\nexport function varintEncode(value: number): Uint8Array {\n if (!Number.isFinite(value) || value < 0) {\n throw new NdnError('InvalidParam', `varint must be non-negative finite: ${value}`)\n }\n if (!Number.isSafeInteger(value)) {\n throw new NdnError('InvalidParam', `varint exceeds safe integer range: ${value}`)\n }\n const out: number[] = []\n let v = value\n while (v >= 0x80) {\n out.push((v & 0x7f) | 0x80)\n v = Math.floor(v / 128)\n }\n out.push(v & 0x7f)\n return new Uint8Array(out)\n}\n\n// Returns [value, bytes_consumed]\nexport function varintDecode(bytes: Uint8Array, offset: number = 0): [number, number] {\n let result = 0\n let shiftMul = 1\n let i = offset\n let consumed = 0\n while (i < bytes.length) {\n const b = bytes[i++]\n consumed++\n const part = b & 0x7f\n // result += part * 2^(7*consumed-7)\n result += part * shiftMul\n if (!Number.isSafeInteger(result)) {\n throw new NdnError('InvalidData', 'varint exceeds safe integer range')\n }\n if ((b & 0x80) === 0) {\n return [result, consumed]\n }\n shiftMul *= 128\n if (consumed > 10) {\n throw new NdnError('InvalidData', 'varint too long')\n }\n }\n throw new NdnError('InvalidData', 'varint truncated')\n}\n\n// ============================================================\n// SHA-256 / canonical JSON\n// ============================================================\n\nexport function sha256Bytes(data: Uint8Array): Uint8Array {\n const sha = new jsSHA('SHA-256', 'UINT8ARRAY')\n sha.update(data)\n return sha.getHash('UINT8ARRAY')\n}\n\nexport function sha256Utf8(text: string): Uint8Array {\n const sha = new jsSHA('SHA-256', 'TEXT', { encoding: 'UTF8' })\n sha.update(text)\n return sha.getHash('UINT8ARRAY')\n}\n\nfunction ensureValidJcsString(value: string): void {\n for (let i = 0; i < value.length; i++) {\n const code = value.charCodeAt(i)\n if (code < 0xd800 || code > 0xdfff) continue\n if (code <= 0xdbff) {\n const next = value.charCodeAt(i + 1)\n if (i + 1 < value.length && next >= 0xdc00 && next <= 0xdfff) {\n i++\n continue\n }\n }\n throw new NdnError('InvalidData', 'JSON string contains lone surrogate')\n }\n}\n\nfunction assertValidJcsPrimitive(value: unknown): void {\n switch (typeof value) {\n case 'string':\n ensureValidJcsString(value)\n return\n case 'number':\n if (!Number.isFinite(value)) {\n throw new NdnError('InvalidData', 'JSON number MUST be finite for JCS')\n }\n if (Object.is(value, -0)) {\n throw new NdnError('InvalidData', 'JSON number MUST NOT be negative zero for JCS')\n }\n return\n case 'boolean':\n return\n case 'undefined':\n throw new NdnError('InvalidData', 'undefined is not a valid JSON value')\n case 'bigint':\n throw new NdnError('InvalidData', 'bigint is not a valid JSON value')\n case 'function':\n throw new NdnError('InvalidData', 'function is not a valid JSON value')\n case 'symbol':\n throw new NdnError('InvalidData', 'symbol is not a valid JSON value')\n case 'object':\n if (value === null) return\n return\n }\n}\n\n/**\n * Recursively sort object keys (BTreeMap-like) while validating that the\n * value is representable as I-JSON/JCS input. Arrays preserve order.\n */\nexport function canonicalizeJson(value: any): any {\n assertValidJcsPrimitive(value)\n if (value === null || typeof value !== 'object') return value\n if (Array.isArray(value)) {\n const result = new Array(value.length)\n for (let i = 0; i < value.length; i++) {\n if (!Object.prototype.hasOwnProperty.call(value, i)) {\n throw new NdnError('InvalidData', 'sparse arrays are not valid JSON values')\n }\n result[i] = canonicalizeJson(value[i])\n }\n return result\n }\n const keys = Object.keys(value).sort()\n const result: Record<string, any> = {}\n for (const k of keys) {\n ensureValidJcsString(k)\n result[k] = canonicalizeJson(value[k])\n }\n return result\n}\n\nexport function toCanonicalJsonString(value: any): string {\n const normalized = canonicalizeJson(value)\n const result = canonicalize(normalized)\n if (result === undefined) {\n throw new NdnError('InvalidData', 'failed to canonicalize JSON value')\n }\n return result\n}\n\n// ============================================================\n// HashMethod\n// ============================================================\n\nexport const DEFAULT_HASH_METHOD = 'sha256'\n\nexport type HashMethod =\n | 'sha256'\n | 'sha512'\n | 'qcid'\n | 'blake2s256'\n | 'keccak256'\n\nexport const HashMethod = {\n Sha256: 'sha256' as HashMethod,\n Sha512: 'sha512' as HashMethod,\n QCID: 'qcid' as HashMethod,\n Blake2s256: 'blake2s256' as HashMethod,\n Keccak256: 'keccak256' as HashMethod,\n\n hashResultSize(method: HashMethod): number {\n switch (method) {\n case 'sha256': return 32\n case 'sha512': return 64\n case 'qcid': return 32\n case 'blake2s256': return 32\n case 'keccak256': return 32\n }\n },\n\n /** parse(s) -> [HashMethod, isMix]; \"mix256\" -> [Sha256, true]. */\n parse(s: string): [HashMethod, boolean] {\n const isMix = s.startsWith('mix')\n const method = HashMethod.fromString(s)\n return [method, isMix]\n },\n\n fromString(s: string): HashMethod {\n switch (s) {\n case 'sha256':\n case 'mix256':\n return 'sha256'\n case 'sha512':\n case 'mix512':\n return 'sha512'\n case 'qcid':\n case 'mixqcid':\n return 'qcid'\n case 'blake2s256':\n case 'mixblake2s256':\n return 'blake2s256'\n case 'keccak256':\n case 'mixkeccak256':\n return 'keccak256'\n default:\n throw new NdnError('InvalidData', `Invalid hash method: ${s}`)\n }\n },\n}\n\n// ============================================================\n// ChunkType\n// ============================================================\n\nexport type ChunkTypeStr =\n | 'sha256'\n | 'mix256'\n | 'sha512'\n | 'mix512'\n | 'qcid'\n | 'blake2s256'\n | 'mixblake2s256'\n | 'keccak256'\n | 'mixkeccak256'\n | string // Unknown variants are passed through.\n\nexport const ChunkType = {\n Sha256: 'sha256' as ChunkTypeStr,\n Mix256: 'mix256' as ChunkTypeStr,\n Sha512: 'sha512' as ChunkTypeStr,\n Mix512: 'mix512' as ChunkTypeStr,\n QCID: 'qcid' as ChunkTypeStr,\n Blake2s256: 'blake2s256' as ChunkTypeStr,\n MixBlake2s256: 'mixblake2s256' as ChunkTypeStr,\n Keccak256: 'keccak256' as ChunkTypeStr,\n MixKeccak256: 'mixkeccak256' as ChunkTypeStr,\n\n isChunkType(typeStr: string): boolean {\n switch (typeStr) {\n case 'sha256':\n case 'mix256':\n case 'sha512':\n case 'mix512':\n case 'qcid':\n case 'blake2s256':\n case 'mixblake2s256':\n case 'keccak256':\n case 'mixkeccak256':\n return true\n default:\n return false\n }\n },\n\n isMix(typeStr: ChunkTypeStr): boolean {\n switch (typeStr) {\n case 'mix256':\n case 'mix512':\n case 'mixblake2s256':\n case 'mixkeccak256':\n case 'qcid':\n return true\n default:\n return false\n }\n },\n\n fromHashType(hashType: HashMethod, isMix: boolean): ChunkTypeStr {\n switch (hashType) {\n case 'sha256': return isMix ? 'mix256' : 'sha256'\n case 'sha512': return isMix ? 'mix512' : 'sha512'\n case 'qcid':\n if (!isMix) {\n throw new NdnError('InvalidObjType', 'QCID must be mix hash')\n }\n return 'qcid'\n case 'blake2s256': return isMix ? 'mixblake2s256' : 'blake2s256'\n case 'keccak256': return isMix ? 'mixkeccak256' : 'keccak256'\n }\n },\n\n toHashMethod(typeStr: ChunkTypeStr): HashMethod {\n switch (typeStr) {\n case 'sha256':\n case 'mix256':\n return 'sha256'\n case 'sha512':\n case 'mix512':\n return 'sha512'\n case 'qcid':\n return 'qcid'\n case 'blake2s256':\n case 'mixblake2s256':\n return 'blake2s256'\n case 'keccak256':\n case 'mixkeccak256':\n return 'keccak256'\n default:\n throw new NdnError('InvalidObjType', `invalid chunk type: ${typeStr}`)\n }\n },\n}\n\n// ============================================================\n// ObjId\n// ============================================================\n\n/**\n * ObjId (Object Identifier) - mirrors ndn_lib::ObjId.\n *\n * On-wire JSON form is a string `${objType}:${hex(objHash)}`.\n * Display / hostname form is base32-lowercase of `objType + \":\" + objHash`.\n */\nexport class ObjId {\n public objType: string\n public objHash: Uint8Array\n\n constructor(objType: string, objHash: Uint8Array) {\n this.objType = objType\n this.objHash = objHash\n }\n\n /** Parse from base32 (no separator) or `obj_type:hex_hash`. */\n static fromString(s: string): ObjId {\n const parts = s.split(':')\n if (parts.length === 1) {\n const decoded = base32Decode(parts[0])\n // Find first ':' in decoded bytes.\n let pos = -1\n for (let i = 0; i < decoded.length; i++) {\n if (decoded[i] === 0x3a /* ':' */) {\n pos = i\n break\n }\n }\n if (pos < 0) {\n throw new NdnError('InvalidId', \"separator ':' not found\")\n }\n const objType = utf8Decode(decoded.subarray(0, pos))\n const objHash = decoded.slice(pos + 1)\n return new ObjId(objType, objHash)\n } else if (parts.length === 2) {\n return new ObjId(parts[0], hexToBytes(parts[1]))\n } else {\n throw new NdnError('InvalidId', s)\n }\n }\n\n static fromBytes(bytes: Uint8Array): ObjId {\n if (bytes.length < 3) {\n throw new NdnError('InvalidId', 'objid bytes too short')\n }\n let pos = -1\n for (let i = 0; i < bytes.length; i++) {\n if (bytes[i] === 0x3a) {\n pos = i\n break\n }\n }\n if (pos < 0) {\n throw new NdnError('InvalidId', \"separator ':' not found\")\n }\n const objType = utf8Decode(bytes.subarray(0, pos))\n const objHash = bytes.slice(pos + 1)\n return new ObjId(objType, objHash)\n }\n\n static fromValue(v: unknown): ObjId {\n if (typeof v === 'string') {\n return ObjId.fromString(v)\n }\n throw new NdnError('InvalidData', 'ObjId MUST be string')\n }\n\n static fromHostname(hostname: string): ObjId {\n const first = hostname.split('.')[0]\n return ObjId.fromString(first)\n }\n\n /**\n * Try to extract an ObjId from an NDN-style path. Returns the ObjId and\n * the optional remaining sub-path (with leading '/'), or null if no part\n * of the path parses as an ObjId.\n */\n static fromPath(path: string): { objId: ObjId; subPath: string | null } {\n const parts = path.split('/')\n for (let i = 0; i < parts.length; i++) {\n const part = parts[i]\n if (part.length === 0) continue\n try {\n const objId = ObjId.fromString(part)\n if (i < parts.length - 1) {\n return { objId, subPath: '/' + parts.slice(i + 1).join('/') }\n }\n return { objId, subPath: null }\n } catch {\n // keep trying\n }\n }\n throw new NdnError('InvalidId', `no objid found in path: ${path}`)\n }\n\n /** Construct an ObjId from a precomputed hash. */\n static fromRaw(objType: string, hashValue: Uint8Array): ObjId {\n return new ObjId(objType, hashValue)\n }\n\n isChunk(): boolean {\n return ChunkType.isChunkType(this.objType)\n }\n\n isChunkList(): boolean {\n return this.objType === OBJ_TYPE_CHUNK_LIST_SIMPLE\n }\n\n isJson(): boolean {\n if (this.isChunk() || this.isContainer()) return false\n return this.objType !== OBJ_TYPE_PACK\n }\n\n isDirObject(): boolean {\n return this.objType === OBJ_TYPE_DIR\n }\n\n isFileObject(): boolean {\n return this.objType === OBJ_TYPE_FILE\n }\n\n isContainer(): boolean {\n switch (this.objType) {\n case OBJ_TYPE_DIR:\n case OBJ_TYPE_TRIE:\n case OBJ_TYPE_TRIE_SIMPLE:\n case OBJ_TYPE_OBJMAP:\n case OBJ_TYPE_OBJMAP_SIMPLE:\n case OBJ_TYPE_LIST:\n case OBJ_TYPE_LIST_SIMPLE:\n case OBJ_TYPE_CHUNK_LIST:\n case OBJ_TYPE_CHUNK_LIST_SIMPLE:\n case OBJ_TYPE_CHUNK_LIST_FIX_SIZE:\n case OBJ_TYPE_CHUNK_LIST_SIMPLE_FIX_SIZE:\n return true\n default:\n return false\n }\n }\n\n isBigContainer(): boolean {\n switch (this.objType) {\n case OBJ_TYPE_TRIE:\n case OBJ_TYPE_OBJMAP:\n case OBJ_TYPE_LIST:\n case OBJ_TYPE_CHUNK_LIST:\n case OBJ_TYPE_CHUNK_LIST_FIX_SIZE:\n return true\n default:\n return false\n }\n }\n\n /** `${obj_type}:${hex(obj_hash)}` form. */\n toString(): string {\n return `${this.objType}:${bytesToHex(this.objHash)}`\n }\n\n toFilename(): string {\n return `${bytesToHex(this.objHash)}.${this.objType}`\n }\n\n toBase32(): string {\n return base32Encode(this.toBytes())\n }\n\n toBytes(): Uint8Array {\n const typeBytes = utf8Encode(this.objType)\n const out = new Uint8Array(typeBytes.length + 1 + this.objHash.length)\n out.set(typeBytes, 0)\n out[typeBytes.length] = 0x3a\n out.set(this.objHash, typeBytes.length + 1)\n return out\n }\n\n /** Used for JSON.stringify -> serialized as the `${type}:${hex}` string. */\n toJSON(): string {\n return this.toString()\n }\n\n equals(other: ObjId): boolean {\n if (this.objType !== other.objType) return false\n if (this.objHash.length !== other.objHash.length) return false\n for (let i = 0; i < this.objHash.length; i++) {\n if (this.objHash[i] !== other.objHash[i]) return false\n }\n return true\n }\n}\n\n// ============================================================\n// ChunkId\n// ============================================================\n\n/**\n * ChunkId - mirrors ndn_lib::ChunkId. Wire format is identical to ObjId\n * (`${chunk_type}:${hex(hash_result)}`); for \"mix*\" types the hash bytes\n * begin with a varint-encoded data length.\n */\nexport class ChunkId {\n public chunkType: ChunkTypeStr\n public hashResult: Uint8Array\n\n constructor(chunkType: ChunkTypeStr, hashResult: Uint8Array) {\n this.chunkType = chunkType\n this.hashResult = hashResult\n }\n\n static defaultChunkType(): ChunkTypeStr {\n return 'mix256'\n }\n\n static fromString(s: string): ChunkId {\n const objId = ObjId.fromString(s)\n if (!objId.isChunk()) {\n throw new NdnError('InvalidId', `invalid chunk id: ${s}`)\n }\n return new ChunkId(objId.objType, objId.objHash)\n }\n\n static fromObjId(objId: ObjId): ChunkId {\n return new ChunkId(objId.objType, new Uint8Array(objId.objHash))\n }\n\n static fromBytes(bytes: Uint8Array): ChunkId {\n const obj = ObjId.fromBytes(bytes)\n return new ChunkId(obj.objType, obj.objHash)\n }\n\n /** Construct from raw hash result, no length encoding. */\n static fromHashResult(hashResult: Uint8Array, chunkType: ChunkTypeStr): ChunkId {\n return new ChunkId(chunkType, new Uint8Array(hashResult))\n }\n\n /** Construct mix-style ChunkId by prepending varint(length) to hash. */\n static fromMixHashResult(\n dataLength: number,\n hashResult: Uint8Array,\n chunkType: ChunkTypeStr,\n ): ChunkId {\n return new ChunkId(chunkType, ChunkId.mixLengthAndHashResult(dataLength, hashResult))\n }\n\n static fromMixHashResultByHashMethod(\n dataLength: number,\n hashResult: Uint8Array,\n hashMethod: HashMethod,\n ): ChunkId {\n const chunkType = ChunkType.fromHashType(hashMethod, true)\n return new ChunkId(chunkType, ChunkId.mixLengthAndHashResult(dataLength, hashResult))\n }\n\n static fromSha256Result(hashResult: Uint8Array): ChunkId {\n return new ChunkId('sha256', new Uint8Array(hashResult))\n }\n\n static fromMix256Result(dataLength: number, hashResult: Uint8Array): ChunkId {\n return new ChunkId('mix256', ChunkId.mixLengthAndHashResult(dataLength, hashResult))\n }\n\n static mixLengthAndHashResult(dataLength: number, hashResult: Uint8Array): Uint8Array {\n const lenBytes = varintEncode(dataLength)\n const out = new Uint8Array(lenBytes.length + hashResult.length)\n out.set(lenBytes, 0)\n out.set(hashResult, lenBytes.length)\n return out\n }\n\n toObjId(): ObjId {\n return new ObjId(this.chunkType, new Uint8Array(this.hashResult))\n }\n\n toString(): string {\n return `${this.chunkType}:${bytesToHex(this.hashResult)}`\n }\n\n toBase32(): string {\n const typeBytes = utf8Encode(this.chunkType)\n const buf = new Uint8Array(typeBytes.length + 1 + this.hashResult.length)\n buf.set(typeBytes, 0)\n buf[typeBytes.length] = 0x3a\n buf.set(this.hashResult, typeBytes.length + 1)\n return base32Encode(buf)\n }\n\n toDidString(): string {\n return `did:${this.chunkType}:${bytesToHex(this.hashResult)}`\n }\n\n toBytes(): Uint8Array {\n return this.toObjId().toBytes()\n }\n\n toJSON(): string {\n return this.toString()\n }\n\n /** For mix-* types, return the data length encoded in the prefix. */\n getLength(): number | null {\n if (this.hashResult.length === 0) return null\n if (!ChunkType.isMix(this.chunkType)) return null\n try {\n const [len] = varintDecode(this.hashResult, 0)\n return len\n } catch {\n return null\n }\n }\n\n equalsHash(hashBytes: Uint8Array): boolean {\n if (this.hashResult.length !== hashBytes.length) return false\n for (let i = 0; i < this.hashResult.length; i++) {\n if (this.hashResult[i] !== hashBytes[i]) return false\n }\n return true\n }\n}\n\n// ============================================================\n// NamedObject base + helpers\n// ============================================================\n\n/**\n * Anything that can be hashed into an ObjId. Implementations need only\n * provide getObjType() and toJSON() (the JSON-serializable form). The\n * default genObjId() then derives the ObjId from canonical JSON.\n */\nexport interface NamedObject {\n getObjType(): string\n toJSON(): unknown\n genObjId(): [ObjId, string]\n}\n\nexport abstract class NamedObjectBase implements NamedObject {\n abstract getObjType(): string\n abstract toJSON(): unknown\n genObjId(): [ObjId, string] {\n return buildNamedObjectByJson(this.getObjType(), this.toJSON())\n }\n}\n\n/** SHA-256-based ObjId derivation: matches build_obj_id() in ndn-lib. */\nexport function buildObjId(objType: string, objJsonStr: string): ObjId {\n const hash = sha256Utf8(objJsonStr)\n return ObjId.fromRaw(objType, hash)\n}\n\n/**\n * Canonicalize the JSON value (recursive sort), serialize, then derive ObjId.\n * Matches build_named_object_by_json() in ndn-lib.\n */\nexport function buildNamedObjectByJson(\n objType: string,\n jsonValue: unknown,\n): [ObjId, string] {\n const jsonStr = toCanonicalJsonString(jsonValue)\n const objId = buildObjId(objType, jsonStr)\n return [objId, jsonStr]\n}\n\n/** Verify that the JSON canonical hash equals the expected ObjId. */\nexport function verifyNamedObject(objId: ObjId, jsonValue: unknown): boolean {\n const [objId2] = buildNamedObjectByJson(objId.objType, jsonValue)\n return objId.equals(objId2)\n}\n\nexport function verifyNamedObjectFromStr(objId: ObjId, objStr: string): unknown {\n let parsed: unknown\n try {\n parsed = JSON.parse(objStr)\n } catch (e) {\n throw new NdnError('InvalidId', `failed to parse obj_str: ${(e as Error).message}`)\n }\n if (!verifyNamedObject(objId, parsed)) {\n throw new NdnError('InvalidId', `verify named object failed: ${objStr}`)\n }\n return parsed\n}\n\n/**\n * Parse an obj-data-string. The Rust version also accepts JWT, but here we\n * just look at whether the string starts with `{`. JWT decoding is left to\n * the caller (it depends on signature verification anyway).\n */\nexport function loadNamedObjectFromObjStr(objStr: string): unknown {\n if (objStr.indexOf('{') >= 0) {\n try {\n return JSON.parse(objStr)\n } catch (e) {\n throw new NdnError('InvalidId', `failed to parse obj_str: ${(e as Error).message}`)\n }\n }\n throw new NdnError(\n 'Unsupported',\n 'JWT-encoded named objects are not supported in this TypeScript port',\n )\n}\n\nexport function loadNamedObj<T = unknown>(objStr: string): T {\n return loadNamedObjectFromObjStr(objStr) as T\n}\n\nexport function loadNamedObjAndVerify<T = unknown>(objId: ObjId, objStr: string): T {\n const parsed = loadNamedObjectFromObjStr(objStr)\n if (!verifyNamedObject(objId, parsed)) {\n throw new NdnError('InvalidId', `verify named object failed for obj_id: ${objId.toString()}`)\n }\n return parsed as T\n}\n\n/** Walk a JSON value via a `/foo/bar/0/baz` path and parse it as ObjId. */\nexport function extractObjIdByPath(jsonValue: unknown, path: string): ObjId {\n const parts = path.split('/').filter(p => p.length > 0)\n let cursor: any = jsonValue\n for (const p of parts) {\n if (cursor == null) {\n throw new NdnError('InvalidParam', `objid path not found: ${path}`)\n }\n if (Array.isArray(cursor)) {\n const idx = Number(p)\n if (!Number.isInteger(idx) || idx < 0 || idx >= cursor.length) {\n throw new NdnError('InvalidParam', `objid path not found: ${path}`)\n }\n cursor = cursor[idx]\n } else if (typeof cursor === 'object') {\n if (!(p in cursor)) {\n throw new NdnError('InvalidParam', `objid path not found: ${path}`)\n }\n cursor = cursor[p]\n } else {\n throw new NdnError('InvalidParam', `objid path not found: ${path}`)\n }\n }\n try {\n return ObjId.fromValue(cursor)\n } catch (e) {\n throw new NdnError('InvalidData', `invalid objid at path ${path}: ${(e as Error).message}`)\n }\n}\n\n// ============================================================\n// BaseContentObject (from base_content.rs)\n// ============================================================\n\nexport type DID = string\n\nexport interface BaseContentObjectFields {\n did?: DID | null\n name?: string\n author?: string\n owner?: DID\n create_time?: number\n last_update_time?: number\n copyright?: string | null\n tags?: string[]\n categories?: string[]\n base_on?: ObjId | null\n directory?: Record<string, unknown>\n references?: Record<string, unknown>\n exp?: number\n}\n\n/**\n * Mirrors ndn-lib BaseContentObject. Optional/empty fields are skipped on\n * serialization (matching `skip_serializing_if`) so that ObjIds derived from\n * a TS instance match those derived from the equivalent Rust value.\n */\nexport class BaseContentObject {\n public did: DID | null\n public name: string\n public author: string\n public owner: DID\n public create_time: number\n public last_update_time: number\n public copyright: string | null\n public tags: string[]\n public categories: string[]\n public base_on: ObjId | null\n public directory: Record<string, unknown>\n public references: Record<string, unknown>\n public exp: number\n\n constructor(fields: BaseContentObjectFields = {}) {\n this.did = fields.did ?? null\n this.name = fields.name ?? ''\n this.author = fields.author ?? ''\n this.owner = fields.owner ?? ''\n this.create_time = fields.create_time ?? 0\n this.last_update_time = fields.last_update_time ?? 0\n this.copyright = fields.copyright ?? null\n this.tags = fields.tags ?? []\n this.categories = fields.categories ?? []\n this.base_on = fields.base_on ?? null\n this.directory = fields.directory ?? {}\n this.references = fields.references ?? {}\n this.exp = fields.exp ?? 0\n }\n\n /** Build the JSON object using the same skip rules as Rust serde. */\n toJSON(): Record<string, unknown> {\n const out: Record<string, unknown> = {}\n if (this.did != null) out.did = this.did\n if (this.name.length > 0) out.name = this.name\n if (this.author.length > 0) out.author = this.author\n if (this.owner.length > 0) out.owner = this.owner\n out.create_time = this.create_time\n out.last_update_time = this.last_update_time\n if (this.copyright != null) out.copyright = this.copyright\n if (this.tags.length > 0) out.tags = this.tags\n if (this.categories.length > 0) out.categories = this.categories\n if (this.base_on != null) out.base_on = this.base_on.toString()\n if (Object.keys(this.directory).length > 0) out.directory = this.directory\n if (Object.keys(this.references).length > 0) out.references = this.references\n if (this.exp !== 0) out.exp = this.exp\n return out\n }\n}\n\nfunction nowSeconds(): number {\n return Math.floor(Date.now() / 1000)\n}\n\n// ============================================================\n// FileObject / PathObject (from fileobj.rs)\n// ============================================================\n\nexport class FileObject extends NamedObjectBase {\n public content_obj: BaseContentObject\n public size: number\n /** chunkid or chunklist id, or empty string. */\n public content: string\n /** Free-form metadata. Flattened into the object root on serialization. */\n public meta: Record<string, unknown>\n\n constructor(name: string, size: number, content: string) {\n super()\n this.content_obj = new BaseContentObject({ name })\n this.size = size\n this.content = content\n this.meta = {}\n }\n\n static fromJSON(value: Record<string, unknown>): FileObject {\n const file = new FileObject('', 0, '')\n const base: BaseContentObjectFields = {}\n const meta: Record<string, unknown> = {}\n const baseKeys = new Set([\n 'did', 'name', 'author', 'owner', 'create_time', 'last_update_time',\n 'copyright', 'tags', 'categories', 'base_on', 'directory', 'references', 'exp',\n ])\n for (const [k, v] of Object.entries(value)) {\n if (k === 'size') {\n file.size = (v as number) ?? 0\n } else if (k === 'content') {\n file.content = (v as string) ?? ''\n } else if (baseKeys.has(k)) {\n if (k === 'base_on' && typeof v === 'string') {\n base.base_on = ObjId.fromString(v)\n } else {\n (base as any)[k] = v\n }\n } else {\n meta[k] = v\n }\n }\n file.content_obj = new BaseContentObject(base)\n file.meta = meta\n return file\n }\n\n getObjType(): string {\n return OBJ_TYPE_FILE\n }\n\n toJSON(): Record<string, unknown> {\n const out: Record<string, unknown> = { ...this.content_obj.toJSON() }\n if (this.size !== 0) out.size = this.size\n if (this.content.length > 0) out.content = this.content\n for (const [k, v] of Object.entries(this.meta)) {\n out[k] = v\n }\n return out\n }\n}\n\nexport class PathObject extends NamedObjectBase {\n public path: string\n public uptime: number\n public target: ObjId\n public exp: number\n\n constructor(path: string, target: ObjId, uptime?: number, exp?: number) {\n super()\n const now = nowSeconds()\n this.path = path\n this.target = target\n this.uptime = uptime ?? now\n this.exp = exp ?? now + 3600 * 24 * 365 * 3\n }\n\n static fromJSON(value: Record<string, unknown>): PathObject {\n const path = String(value.path ?? '')\n const target = ObjId.fromString(String(value.target ?? ''))\n const uptime = Number(value.uptime ?? 0)\n const exp = Number(value.exp ?? 0)\n return new PathObject(path, target, uptime, exp)\n }\n\n getObjType(): string {\n return OBJ_TYPE_PATH\n }\n\n toJSON(): Record<string, unknown> {\n return {\n path: this.path,\n uptime: this.uptime,\n target: this.target.toString(),\n exp: this.exp,\n }\n }\n}\n\n// ============================================================\n// InclusionProof (from base_content.rs)\n// ============================================================\n\nexport class InclusionProof extends NamedObjectBase {\n public content_id: string\n public content_obj: unknown\n public curator: DID\n public editor: string[]\n public meta: unknown\n public rank: number\n public collection: string[]\n public review_url: string | null\n public iat: number\n public exp: number\n\n constructor(\n contentId: ObjId,\n contentObj: unknown,\n curator: DID,\n rank: number,\n collection: string[],\n ) {\n super()\n const now = nowSeconds()\n this.content_id = contentId.toString()\n this.content_obj = contentObj\n this.curator = curator\n this.editor = []\n this.meta = null\n this.rank = rank\n this.collection = collection\n this.review_url = null\n this.iat = now\n this.exp = now + 3600 * 24 * 30 * 12\n }\n\n /**\n * Reconstruct an InclusionProof from its JSON form. The decode /\n * re-encode round-trip (fromJSON followed by toJSON) must be\n * byte-stable under canonical JSON, otherwise ObjId verification on a\n * payload produced by the Rust reference impl would drift. That is\n * exactly what the tests under `tests/ndn_types_cases.ts` pin down.\n *\n * Notes on the field mapping:\n * - `content_id` is passed through ObjId.fromString for validation,\n * then pinned back to the raw input string so any non-hex-canonical\n * forms survive the round-trip unchanged (the Rust side doesn't\n * renormalize on deserialization either).\n * - `iat` / `exp` must come from the payload, not from the\n * constructor's `nowSeconds()` defaults, or decoding an older\n * proof would silently rewrite its validity window.\n */\n static fromJSON(value: Record<string, unknown>): InclusionProof {\n const proof = new InclusionProof(\n ObjId.fromString(String(value.content_id ?? '')),\n value.content_obj ?? null,\n String(value.curator ?? ''),\n Number(value.rank ?? 0),\n Array.isArray(value.collection)\n ? (value.collection as string[]).slice()\n : [],\n )\n proof.content_id = String(value.content_id ?? '')\n proof.editor = Array.isArray(value.editor)\n ? (value.editor as string[]).slice()\n : []\n proof.meta = value.meta ?? null\n proof.review_url = typeof value.review_url === 'string'\n ? value.review_url\n : null\n proof.iat = Number(value.iat ?? 0)\n proof.exp = Number(value.exp ?? 0)\n return proof\n }\n\n getObjType(): string {\n return OBJ_TYPE_INCLUSION_PROOF\n }\n\n toJSON(): Record<string, unknown> {\n const out: Record<string, unknown> = {\n content_id: this.content_id,\n content_obj: this.content_obj,\n curator: this.curator,\n editor: this.editor,\n meta: this.meta,\n rank: this.rank,\n iat: this.iat,\n exp: this.exp,\n }\n if (this.collection.length > 0) out.collection = this.collection\n if (this.review_url != null) out.review_url = this.review_url\n return out\n }\n}\n\n// ============================================================\n// SimpleObjectMap / SimpleMapItem (from simple_object_map.rs)\n// ============================================================\n\nexport type SimpleMapItem =\n | { kind: 'objId'; objId: ObjId }\n | { kind: 'object'; objType: string; obj: unknown }\n | { kind: 'objectJwt'; objType: string; jwt: string }\n\nexport const SimpleMapItem = {\n fromObjId(objId: ObjId): SimpleMapItem {\n return { kind: 'objId', objId }\n },\n fromObject(objType: string, obj: unknown): SimpleMapItem {\n return { kind: 'object', objType, obj }\n },\n fromObjectJwt(objType: string, jwt: string): SimpleMapItem {\n return { kind: 'objectJwt', objType, jwt }\n },\n\n getObjType(item: SimpleMapItem): string {\n switch (item.kind) {\n case 'objId': return item.objId.objType\n case 'object': return item.objType\n case 'objectJwt': return item.objType\n }\n },\n\n /** Compute (objId, optional inline obj-string) for this item. */\n getObjId(item: SimpleMapItem): [ObjId, string] {\n switch (item.kind) {\n case 'objId':\n return [item.objId, '']\n case 'object':\n return buildNamedObjectByJson(item.objType, item.obj)\n case 'objectJwt':\n throw new NdnError(\n 'Unsupported',\n 'JWT-encoded SimpleMapItem requires JWT decoding (not implemented in TS port)',\n )\n }\n },\n\n toJSON(item: SimpleMapItem): unknown {\n switch (item.kind) {\n case 'objId':\n return item.objId.toString()\n case 'object':\n return { obj_type: item.objType, body: item.obj }\n case 'objectJwt':\n return { obj_type: item.objType, jwt: item.jwt }\n }\n },\n\n fromJSON(value: unknown): SimpleMapItem {\n if (typeof value === 'string') {\n return { kind: 'objId', objId: ObjId.fromString(value) }\n }\n if (value && typeof value === 'object' && !Array.isArray(value)) {\n const v = value as Record<string, unknown>\n const objType = v.obj_type\n if (typeof objType !== 'string') {\n throw new NdnError('InvalidData', 'SimpleMapItem must have obj_type field')\n }\n if (typeof v.jwt === 'string') {\n return { kind: 'objectJwt', objType, jwt: v.jwt }\n }\n if ('body' in v) {\n return { kind: 'object', objType, obj: v.body }\n }\n throw new NdnError('InvalidData', 'SimpleMapItem must have body or jwt field')\n }\n throw new NdnError('InvalidData', 'SimpleMapItem must be string or object')\n },\n}\n\nexport class SimpleObjectMap {\n public body: Map<string, SimpleMapItem>\n\n constructor() {\n this.body = new Map()\n }\n\n static fromJSON(value: unknown): SimpleObjectMap {\n const map = new SimpleObjectMap()\n if (!value || typeof value !== 'object') {\n throw new NdnError('InvalidData', 'SimpleObjectMap must be an object')\n }\n const root = value as Record<string, unknown>\n const body = root.body\n if (body == null) return map\n if (typeof body !== 'object' || Array.isArray(body)) {\n throw new NdnError('InvalidData', 'SimpleObjectMap.body must be an object')\n }\n for (const [k, v] of Object.entries(body as Record<string, unknown>)) {\n map.body.set(k, SimpleMapItem.fromJSON(v))\n }\n return map\n }\n\n /**\n * Resolve every entry to its ObjId string and merge it into `realObj` as\n * the `body` field, then derive a NamedObject ObjId. Matches\n * SimpleObjectMap::gen_obj_id_with_real_obj() in Rust.\n */\n genObjIdWithRealObj(\n resultObjType: string,\n realObj: Record<string, unknown>,\n ): [ObjId, string] {\n const realMap: Record<string, string> = {}\n for (const [k, v] of this.body) {\n const [subId] = SimpleMapItem.getObjId(v)\n realMap[k] = subId.toString()\n }\n realObj.body = realMap\n return buildNamedObjectByJson(resultObjType, realObj)\n }\n\n get size(): number {\n return this.body.size\n }\n\n isEmpty(): boolean {\n return this.body.size === 0\n }\n\n get(key: string): SimpleMapItem | undefined {\n return this.body.get(key)\n }\n\n set(key: string, value: SimpleMapItem): void {\n this.body.set(key, value)\n }\n\n delete(key: string): boolean {\n return this.body.delete(key)\n }\n\n has(key: string): boolean {\n return this.body.has(key)\n }\n\n keys(): IterableIterator<string> {\n return this.body.keys()\n }\n\n values(): IterableIterator<SimpleMapItem> {\n return this.body.values()\n }\n\n entries(): IterableIterator<[string, SimpleMapItem]> {\n return this.body.entries()\n }\n\n /** Serialize to wire JSON (matches Rust SimpleObjectMap serde). */\n toJSON(): Record<string, unknown> {\n const body: Record<string, unknown> = {}\n for (const [k, v] of this.body) {\n body[k] = SimpleMapItem.toJSON(v)\n }\n return { body }\n }\n}\n\n// ============================================================\n// DirObject (from dirobj.rs)\n// ============================================================\n\nexport class DirObject extends NamedObjectBase {\n public content_obj: BaseContentObject\n public meta: Record<string, unknown>\n public total_size: number\n public file_count: number\n public file_size: number\n public object_map: SimpleObjectMap\n\n constructor(name?: string) {\n super()\n this.content_obj = name != null\n ? new BaseContentObject({ name })\n : new BaseContentObject()\n this.meta = {}\n this.total_size = 0\n this.file_count = 0\n this.file_size = 0\n this.object_map = new SimpleObjectMap()\n }\n\n static fromJSON(value: Record<string, unknown>): DirObject {\n const dir = new DirObject()\n const baseKeys = new Set([\n 'did', 'name', 'author', 'owner', 'create_time', 'last_update_time',\n 'copyright', 'tags', 'categories', 'base_on', 'directory', 'references', 'exp',\n ])\n const baseFields: BaseContentObjectFields = {}\n for (const [k, v] of Object.entries(value)) {\n if (k === 'meta') {\n dir.meta = (v as Record<string, unknown>) ?? {}\n } else if (k === 'total_size') {\n dir.total_size = Number(v ?? 0)\n } else if (k === 'file_count') {\n dir.file_count = Number(v ?? 0)\n } else if (k === 'file_size') {\n dir.file_size = Number(v ?? 0)\n } else if (k === 'body') {\n const body = v as Record<string, unknown>\n if (body) {\n for (const [name, item] of Object.entries(body)) {\n dir.object_map.set(name, SimpleMapItem.fromJSON(item))\n }\n }\n } else if (baseKeys.has(k)) {\n if (k === 'base_on' && typeof v === 'string') {\n baseFields.base_on = ObjId.fromString(v)\n } else {\n (baseFields as any)[k] = v\n }\n }\n }\n dir.content_obj = new BaseContentObject(baseFields)\n return dir\n }\n\n getObjType(): string {\n return OBJ_TYPE_DIR\n }\n\n /** JSON form (with raw `body`) - useful for storage / debug. */\n toJSON(): Record<string, unknown> {\n const out: Record<string, unknown> = { ...this.content_obj.toJSON() }\n if (Object.keys(this.meta).length > 0) out.meta = this.meta\n out.total_size = this.total_size\n out.file_count = this.file_count\n out.file_size = this.file_size\n out.body = this.object_map.toJSON().body\n return out\n }\n\n /**\n * DirObject's ObjId is derived from a JSON form whose `body` field is a\n * `name -> objIdString` map (children are reduced to ObjIds first).\n * Matches DirObject::gen_obj_id() in Rust.\n */\n genObjId(): [ObjId, string] {\n const realObj: Record<string, unknown> = { ...this.content_obj.toJSON() }\n realObj.total_size = this.total_size\n realObj.file_count = this.file_count\n realObj.file_size = this.file_size\n // Note: meta is intentionally NOT included here, matching Rust's\n // gen_obj_id() which only writes the BaseContentObject fields plus\n // the three counters before delegating to SimpleObjectMap.\n return this.object_map.genObjIdWithRealObj(OBJ_TYPE_DIR, realObj)\n }\n\n get size(): number {\n return this.object_map.size\n }\n\n isEmpty(): boolean {\n return this.object_map.isEmpty()\n }\n\n get(key: string): SimpleMapItem | undefined {\n return this.object_map.get(key)\n }\n\n delete(key: string): boolean {\n return this.object_map.delete(key)\n }\n\n has(key: string): boolean {\n return this.object_map.has(key)\n }\n\n keys(): IterableIterator<string> {\n return this.object_map.keys()\n }\n\n values(): IterableIterator<SimpleMapItem> {\n return this.object_map.values()\n }\n\n entries(): IterableIterator<[string, SimpleMapItem]> {\n return this.object_map.entries()\n }\n\n addFile(name: string, fileObj: unknown, fileSize: number): void {\n this.file_size += fileSize\n this.file_count += 1\n this.total_size += fileSize\n this.object_map.set(name, SimpleMapItem.fromObject(OBJ_TYPE_FILE, fileObj))\n }\n\n addDirectory(name: string, dirObjId: ObjId, dirSize: number): void {\n if (dirObjId.objType !== OBJ_TYPE_DIR) {\n throw new NdnError('InvalidParam', 'dir_obj_id is not a directory')\n }\n this.total_size += dirSize\n this.object_map.set(name, SimpleMapItem.fromObjId(dirObjId))\n }\n\n listEntries(): string[] {\n return Array.from(this.object_map.keys())\n }\n\n isFile(name: string): boolean {\n const item = this.object_map.get(name)\n if (!item) return false\n return item.kind === 'object' && item.objType === OBJ_TYPE_FILE\n }\n\n isDirectory(name: string): boolean {\n const item = this.object_map.get(name)\n if (!item) return false\n switch (item.kind) {\n case 'objId': return item.objId.objType === OBJ_TYPE_DIR\n case 'objectJwt': return item.objType === OBJ_TYPE_DIR\n default: return false\n }\n }\n}\n\n// ============================================================\n// SimpleChunkList (from chunk/simple_chunk_list.rs)\n// ============================================================\n\nexport class SimpleChunkList {\n public total_size: number\n public body: ChunkId[]\n\n constructor() {\n this.total_size = 0\n this.body = []\n }\n\n static fromChunkList(chunks: ChunkId[]): SimpleChunkList {\n const list = new SimpleChunkList()\n for (const c of chunks) {\n const len = c.getLength()\n if (len == null) {\n throw new NdnError('InvalidParam', 'get chunk length from chunkid failed')\n }\n list.total_size += len\n }\n list.body = chunks.slice()\n return list\n }\n\n static fromJson(objStr: string): SimpleChunkList {\n let parsed: unknown\n try {\n parsed = JSON.parse(objStr)\n } catch (e) {\n throw new NdnError(\n 'InvalidParam',\n `parse chunk list from json failed: ${(e as Error).message}`,\n )\n }\n return SimpleChunkList.fromJsonValue(parsed)\n }\n\n static fromJsonValue(value: unknown): SimpleChunkList {\n if (!Array.isArray(value)) {\n throw new NdnError('InvalidParam', 'chunk list must be a JSON array')\n }\n const chunks = value.map(item => {\n if (typeof item !== 'string') {\n throw new NdnError('InvalidParam', 'chunk list item must be a string')\n }\n return ChunkId.fromString(item)\n })\n return SimpleChunkList.fromChunkList(chunks)\n }\n\n appendChunk(chunkId: ChunkId): void {\n const len = chunkId.getLength()\n if (len == null) {\n throw new NdnError('InvalidParam', 'get chunk length from chunkid failed')\n }\n this.body.push(chunkId)\n this.total_size += len\n }\n\n /**\n * Mirrors SimpleChunkList::gen_obj_id(): hash the JSON list of ChunkId\n * strings, then prefix the resulting hash bytes with varint(total_size)\n * to form the final ObjId.\n */\n genObjId(): [ObjId, string] {\n const bodyJson = this.body.map(c => c.toString())\n const [innerObjId, objStr] = buildNamedObjectByJson(\n OBJ_TYPE_CHUNK_LIST_SIMPLE,\n bodyJson,\n )\n const mixed = ChunkId.mixLengthAndHashResult(this.total_size, innerObjId.objHash)\n const resultId = ObjId.fromRaw(OBJ_TYPE_CHUNK_LIST_SIMPLE, mixed)\n return [resultId, objStr]\n }\n}\n\n// ============================================================\n// RelationObject (from relation_obj.rs)\n// ============================================================\n\nexport type ObjectLinkData =\n | { kind: 'sameAs'; target: ObjId }\n | { kind: 'partOf'; target: ObjId; range: { start: number; end: number } }\n\nexport class RelationObject extends NamedObjectBase {\n public source: ObjId\n public relation: string\n public target: ObjId\n public body: Record<string, unknown>\n public iat: number | null\n public exp: number | null\n\n constructor(\n source: ObjId,\n relation: string,\n target: ObjId,\n body: Record<string, unknown> = {},\n ) {\n super()\n this.source = source\n this.relation = relation\n this.target = target\n this.body = body\n this.iat = null\n this.exp = null\n }\n\n /**\n * Reconstruct a RelationObject from its JSON form. `source`, `relation`,\n * `target`, `iat` and `exp` are reserved top-level fields; every other\n * key lands back in `body` (matching what `toJSON` spreads out), so the\n * decode → re-encode round-trip is byte-stable under canonical JSON\n * for any shape the TS class is capable of emitting.\n */\n static fromJSON(value: Record<string, unknown>): RelationObject {\n const reserved = new Set(['source', 'relation', 'target', 'iat', 'exp'])\n const body: Record<string, unknown> = {}\n for (const [k, v] of Object.entries(value)) {\n if (!reserved.has(k)) body[k] = v\n }\n const rel = new RelationObject(\n ObjId.fromString(String(value.source ?? '')),\n String(value.relation ?? ''),\n ObjId.fromString(String(value.target ?? '')),\n body,\n )\n rel.iat = typeof value.iat === 'number' ? value.iat : null\n rel.exp = typeof value.exp === 'number' ? value.exp : null\n return rel\n }\n\n static createByLinkData(source: ObjId, link: ObjectLinkData): RelationObject {\n switch (link.kind) {\n case 'sameAs':\n return new RelationObject(source, RELATION_TYPE_SAME, link.target)\n case 'partOf':\n return new RelationObject(\n source,\n RELATION_TYPE_PART_OF,\n link.target,\n { range: { start: link.range.start, end: link.range.end } },\n )\n }\n }\n\n getLinkData(): ObjectLinkData {\n switch (this.relation) {\n case RELATION_TYPE_SAME:\n return { kind: 'sameAs', target: this.target }\n case RELATION_TYPE_PART_OF: {\n const range = this.body.range as { start?: unknown; end?: unknown } | undefined\n if (!range || typeof range.start !== 'number' || typeof range.end !== 'number') {\n throw new NdnError(\n 'InvalidLink',\n `invalid range: ${JSON.stringify(this.body.range)}`,\n )\n }\n return {\n kind: 'partOf',\n target: this.target,\n range: { start: range.start, end: range.end },\n }\n }\n default:\n throw new NdnError('InvalidLink', `invalid relation: ${this.relation}`)\n }\n }\n\n getObjType(): string {\n return OBJ_TYPE_RELATION\n }\n\n toJSON(): Record<string, unknown> {\n const out: Record<string, unknown> = {\n source: this.source.toString(),\n relation: this.relation,\n target: this.target.toString(),\n }\n for (const [k, v] of Object.entries(this.body)) {\n out[k] = v\n }\n if (this.iat != null) out.iat = this.iat\n if (this.exp != null) out.exp = this.exp\n return out\n }\n}\n\n// ============================================================\n// KnownStandardObject (from lib.rs)\n// ============================================================\n\nexport type KnownStandardObject =\n | { kind: 'dir'; obj: DirObject; objStr: string }\n | { kind: 'file'; obj: FileObject; objStr: string }\n | { kind: 'chunkList'; obj: SimpleChunkList; objStr: string }\n\nexport const KnownStandardObject = {\n fromObjData(objId: ObjId, objData: string): KnownStandardObject {\n switch (objId.objType) {\n case OBJ_TYPE_DIR: {\n let parsed: unknown\n try {\n parsed = JSON.parse(objData)\n } catch (e) {\n throw new NdnError(\n 'InvalidParam',\n `parse dir object from json failed: ${(e as Error).message}`,\n )\n }\n return {\n kind: 'dir',\n obj: DirObject.fromJSON(parsed as Record<string, unknown>),\n objStr: objData,\n }\n }\n case OBJ_TYPE_FILE: {\n let parsed: unknown\n try {\n parsed = JSON.parse(objData)\n } catch (e) {\n throw new NdnError(\n 'InvalidParam',\n `parse file object from json failed: ${(e as Error).message}`,\n )\n }\n return {\n kind: 'file',\n obj: FileObject.fromJSON(parsed as Record<string, unknown>),\n objStr: objData,\n }\n }\n case OBJ_TYPE_CHUNK_LIST_SIMPLE: {\n return {\n kind: 'chunkList',\n obj: SimpleChunkList.fromJson(objData),\n objStr: objData,\n }\n }\n default:\n throw new NdnError('InvalidParam', `Unknown object type: ${objId.objType}`)\n }\n },\n\n /** Return ObjIds (and optional inline obj-string) for the children. */\n getChildObjs(known: KnownStandardObject): Array<{ objId: ObjId; objStr: string | null }> {\n switch (known.kind) {\n case 'dir': {\n const out: Array<{ objId: ObjId; objStr: string | null }> = []\n for (const [, item] of known.obj.entries()) {\n const [objId, objStr] = SimpleMapItem.getObjId(item)\n out.push({ objId, objStr: objStr.length > 0 ? objStr : null })\n }\n return out\n }\n case 'file': {\n if (known.obj.content.length === 0) return []\n return [{ objId: ObjId.fromString(known.obj.content), objStr: null }]\n }\n case 'chunkList':\n return known.obj.body.map(c => ({ objId: c.toObjId(), objStr: null }))\n }\n },\n}\n\n// ============================================================\n// UTF-8 helpers (browser+node)\n// ============================================================\n\nconst _textEncoder: { encode(s: string): Uint8Array } | null =\n typeof TextEncoder !== 'undefined' ? new TextEncoder() : null\nconst _textDecoder: { decode(b: Uint8Array): string } | null =\n typeof TextDecoder !== 'undefined' ? new TextDecoder('utf-8') : null\n\nfunction utf8Encode(s: string): Uint8Array {\n if (_textEncoder) return _textEncoder.encode(s)\n // Fallback (very small targets / older runtimes).\n const out: number[] = []\n for (let i = 0; i < s.length; i++) {\n let c = s.charCodeAt(i)\n if (c < 0x80) {\n out.push(c)\n } else if (c < 0x800) {\n out.push(0xc0 | (c >> 6), 0x80 | (c & 0x3f))\n } else if (c >= 0xd800 && c <= 0xdbff && i + 1 < s.length) {\n const c2 = s.charCodeAt(++i)\n const cp = 0x10000 + (((c & 0x3ff) << 10) | (c2 & 0x3ff))\n out.push(\n 0xf0 | (cp >> 18),\n 0x80 | ((cp >> 12) & 0x3f),\n 0x80 | ((cp >> 6) & 0x3f),\n 0x80 | (cp & 0x3f),\n )\n } else {\n out.push(0xe0 | (c >> 12), 0x80 | ((c >> 6) & 0x3f), 0x80 | (c & 0x3f))\n }\n }\n return new Uint8Array(out)\n}\n\nfunction utf8Decode(bytes: Uint8Array): string {\n if (_textDecoder) return _textDecoder.decode(bytes)\n let s = ''\n let i = 0\n while (i < bytes.length) {\n const b = bytes[i++]\n if (b < 0x80) {\n s += String.fromCharCode(b)\n } else if (b < 0xe0) {\n s += String.fromCharCode(((b & 0x1f) << 6) | (bytes[i++] & 0x3f))\n } else if (b < 0xf0) {\n s += String.fromCharCode(\n ((b & 0x0f) << 12) | ((bytes[i++] & 0x3f) << 6) | (bytes[i++] & 0x3f),\n )\n } else {\n const cp =\n ((b & 0x07) << 18) |\n ((bytes[i++] & 0x3f) << 12) |\n ((bytes[i++] & 0x3f) << 6) |\n (bytes[i++] & 0x3f)\n const u = cp - 0x10000\n s += String.fromCharCode(0xd800 + (u >> 10), 0xdc00 + (u & 0x3ff))\n }\n }\n return s\n}\n"],"names":["t","n","e","r","i","s","o","h","u","w","c","f","a","l","A","E","H","S","jsSHA","utf8Encode","utf8Decode","b","x","key","jwk","p","values","v","result","k","canonicalize","c2"],"mappings":"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AAE,EAAE,EAAE,GAAE,UAAU,GAAE,IAAI,EAAE,EAAE,EAAE,GAAE,UAAU,GAAE,IAAI,EAAE,EAAE,EAAE,GAAE,UAAU,GAAE,IAAI,EAAE,EAAE,EAAE,GAAE,UAAU,GAAE,IAAI,EAAE,EAAE,EAAE,GAAE,UAAU,GAAE,IAAI,EAAE,EAAE,EAAE,GAAE,UAAU,GAAE,IAAI,EAAE,EAAE,EAAE,GAAE,UAAU,GAAE,IAAI,EAAE,EAAE,EAAE,GAAE,SAAS,GAAE,IAAI,EAAE,EAAE,EAAE,GAAE,UAAU,GAAE,IAAI,EAAE,EAAE,EAAE,GAAE,UAAU,GAAE,IAAI,EAAE,EAAE,EAAE,GAAE,UAAU,GAAE,IAAI,EAAE,EAAE,EAAE,GAAE,SAAS,GAAE,IAAI,EAAE,EAAE,EAAE,GAAE,UAAU,GAAE,IAAI,EAAE,EAAE,EAAE,GAAE,UAAU,GAAE,IAAI,EAAE,EAAE,EAAE,GAAE,UAAU,GAAE,IAAI,EAAE,EAAE,EAAE,GAAE,SAAS,GAAE,IAAI,EAAE,EAAE,EAAE,GAAE,UAAU,GAAE,IAAI,EAAE,EAAE,EAAE,GAAE,UAAU,GAAE,IAAI,EAAE,EAAE,EAAE,GAAE,UAAU,GAAE,IAAI,EAAE,EAAE,EAAE,GAAE,UAAU,GAAE,IAAI,EAAE,EAAE,EAAE,GAAE,UAAU,GAAE,IAAI,EAAE,EAAE,EAAE,GAAE,UAAU,GAAE,IAAI,EAAE,EAAE,EAAE,GAAE,UAAU,GAAE,IAAI,EAAE,EAAE,EAAE,GAAE,UAAU,GAAE,IAAI,EAAE,EAAE,EAAE,GAAE,UAAU,GAAE,IAAI,EAAE,EAAE,EAAE,GAAE,UAAU,GAAE,IAAI,EAAE,EAAE,EAAE,GAAE,UAAU,GAAE,IAAI,EAAE,EAAE,EAAE,GAAE,SAAS,GAAE,IAAI,EAAE,EAAE,EAAE,GAAE,SAAS,GAAE,IAAI,EAAE,EAAE,EAAE,GAAE,UAAU,GAAE,IAAI,EAAE,EAAE,EAAE,GAAE,UAAU,GAAE,IAAI,EAAE,EAAE,EAAE,GAAE,UAAU,GAAE,IAAI,EAAE,YAAW,UAAU,GAAE,IAAI,EAAE,YAAW,SAAS,GAAE,IAAI,EAAE,YAAW,UAAU,GAAE,IAAI,EAAE,Y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","x_google_ignoreList":[0,4]}