@hashgraphonline/standards-sdk 0.1.161 → 0.1.163

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 (337) hide show
  1. package/dist/cjs/hcs-14/index.d.ts +1 -0
  2. package/dist/cjs/hcs-14/index.d.ts.map +1 -1
  3. package/dist/cjs/hcs-14/resolvers/aid-dns-web-profile.d.ts +1 -0
  4. package/dist/cjs/hcs-14/resolvers/aid-dns-web-profile.d.ts.map +1 -1
  5. package/dist/cjs/hcs-14/resolvers/ans-dns-web-profile-utils.d.ts +23 -0
  6. package/dist/cjs/hcs-14/resolvers/ans-dns-web-profile-utils.d.ts.map +1 -0
  7. package/dist/cjs/hcs-14/resolvers/ans-dns-web-profile.d.ts +32 -0
  8. package/dist/cjs/hcs-14/resolvers/ans-dns-web-profile.d.ts.map +1 -0
  9. package/dist/cjs/hcs-14/resolvers/hcs-11-profile.d.ts +1 -0
  10. package/dist/cjs/hcs-14/resolvers/hcs-11-profile.d.ts.map +1 -1
  11. package/dist/cjs/hcs-14/resolvers/hiero.d.ts +1 -0
  12. package/dist/cjs/hcs-14/resolvers/hiero.d.ts.map +1 -1
  13. package/dist/cjs/hcs-14/resolvers/registry.d.ts +21 -0
  14. package/dist/cjs/hcs-14/resolvers/registry.d.ts.map +1 -1
  15. package/dist/cjs/hcs-14/resolvers/types.d.ts +40 -5
  16. package/dist/cjs/hcs-14/resolvers/types.d.ts.map +1 -1
  17. package/dist/cjs/hcs-14/resolvers/uaid-did-resolution-profile.d.ts +1 -0
  18. package/dist/cjs/hcs-14/resolvers/uaid-did-resolution-profile.d.ts.map +1 -1
  19. package/dist/cjs/hcs-14/resolvers/uaid-dns-web-profile.d.ts +1 -0
  20. package/dist/cjs/hcs-14/resolvers/uaid-dns-web-profile.d.ts.map +1 -1
  21. package/dist/cjs/hcs-14/sdk.d.ts +23 -1
  22. package/dist/cjs/hcs-14/sdk.d.ts.map +1 -1
  23. package/dist/cjs/hcs-2/client.d.ts +7 -1
  24. package/dist/cjs/hcs-2/client.d.ts.map +1 -1
  25. package/dist/cjs/hcs-2/types.d.ts +2 -0
  26. package/dist/cjs/hcs-2/types.d.ts.map +1 -1
  27. package/dist/cjs/standards-sdk.cjs +2 -2
  28. package/dist/cjs/standards-sdk.cjs.map +1 -1
  29. package/dist/es/hcs-14/index.d.ts +1 -0
  30. package/dist/es/hcs-14/index.d.ts.map +1 -1
  31. package/dist/es/hcs-14/resolvers/aid-dns-web-profile.d.ts +1 -0
  32. package/dist/es/hcs-14/resolvers/aid-dns-web-profile.d.ts.map +1 -1
  33. package/dist/es/hcs-14/resolvers/ans-dns-web-profile-utils.d.ts +23 -0
  34. package/dist/es/hcs-14/resolvers/ans-dns-web-profile-utils.d.ts.map +1 -0
  35. package/dist/es/hcs-14/resolvers/ans-dns-web-profile.d.ts +32 -0
  36. package/dist/es/hcs-14/resolvers/ans-dns-web-profile.d.ts.map +1 -0
  37. package/dist/es/hcs-14/resolvers/hcs-11-profile.d.ts +1 -0
  38. package/dist/es/hcs-14/resolvers/hcs-11-profile.d.ts.map +1 -1
  39. package/dist/es/hcs-14/resolvers/hiero.d.ts +1 -0
  40. package/dist/es/hcs-14/resolvers/hiero.d.ts.map +1 -1
  41. package/dist/es/hcs-14/resolvers/registry.d.ts +21 -0
  42. package/dist/es/hcs-14/resolvers/registry.d.ts.map +1 -1
  43. package/dist/es/hcs-14/resolvers/types.d.ts +40 -5
  44. package/dist/es/hcs-14/resolvers/types.d.ts.map +1 -1
  45. package/dist/es/hcs-14/resolvers/uaid-did-resolution-profile.d.ts +1 -0
  46. package/dist/es/hcs-14/resolvers/uaid-did-resolution-profile.d.ts.map +1 -1
  47. package/dist/es/hcs-14/resolvers/uaid-dns-web-profile.d.ts +1 -0
  48. package/dist/es/hcs-14/resolvers/uaid-dns-web-profile.d.ts.map +1 -1
  49. package/dist/es/hcs-14/sdk.d.ts +23 -1
  50. package/dist/es/hcs-14/sdk.d.ts.map +1 -1
  51. package/dist/es/hcs-2/client.d.ts +7 -1
  52. package/dist/es/hcs-2/client.d.ts.map +1 -1
  53. package/dist/es/hcs-2/types.d.ts +2 -0
  54. package/dist/es/hcs-2/types.d.ts.map +1 -1
  55. package/dist/es/standards-sdk.es.js +89 -86
  56. package/dist/es/standards-sdk.es.js.map +1 -1
  57. package/dist/es/standards-sdk.es100.js +136 -124
  58. package/dist/es/standards-sdk.es100.js.map +1 -1
  59. package/dist/es/standards-sdk.es101.js +138 -42
  60. package/dist/es/standards-sdk.es101.js.map +1 -1
  61. package/dist/es/standards-sdk.es102.js +43 -259
  62. package/dist/es/standards-sdk.es102.js.map +1 -1
  63. package/dist/es/standards-sdk.es103.js +245 -82
  64. package/dist/es/standards-sdk.es103.js.map +1 -1
  65. package/dist/es/standards-sdk.es104.js +50 -49
  66. package/dist/es/standards-sdk.es104.js.map +1 -1
  67. package/dist/es/standards-sdk.es105.js +100 -29
  68. package/dist/es/standards-sdk.es105.js.map +1 -1
  69. package/dist/es/standards-sdk.es106.js +27 -229
  70. package/dist/es/standards-sdk.es106.js.map +1 -1
  71. package/dist/es/standards-sdk.es107.js +228 -109
  72. package/dist/es/standards-sdk.es107.js.map +1 -1
  73. package/dist/es/standards-sdk.es108.js +94 -15
  74. package/dist/es/standards-sdk.es108.js.map +1 -1
  75. package/dist/es/standards-sdk.es109.js +30 -80
  76. package/dist/es/standards-sdk.es109.js.map +1 -1
  77. package/dist/es/standards-sdk.es11.js +1 -1
  78. package/dist/es/standards-sdk.es110.js +80 -27
  79. package/dist/es/standards-sdk.es110.js.map +1 -1
  80. package/dist/es/standards-sdk.es111.js +27 -248
  81. package/dist/es/standards-sdk.es111.js.map +1 -1
  82. package/dist/es/standards-sdk.es112.js +246 -472
  83. package/dist/es/standards-sdk.es112.js.map +1 -1
  84. package/dist/es/standards-sdk.es113.js +458 -85
  85. package/dist/es/standards-sdk.es113.js.map +1 -1
  86. package/dist/es/standards-sdk.es114.js +96 -151
  87. package/dist/es/standards-sdk.es114.js.map +1 -1
  88. package/dist/es/standards-sdk.es115.js +155 -29
  89. package/dist/es/standards-sdk.es115.js.map +1 -1
  90. package/dist/es/standards-sdk.es116.js +26 -4
  91. package/dist/es/standards-sdk.es116.js.map +1 -1
  92. package/dist/es/standards-sdk.es117.js +10 -140
  93. package/dist/es/standards-sdk.es117.js.map +1 -1
  94. package/dist/es/standards-sdk.es118.js +140 -27
  95. package/dist/es/standards-sdk.es118.js.map +1 -1
  96. package/dist/es/standards-sdk.es119.js +27 -20
  97. package/dist/es/standards-sdk.es119.js.map +1 -1
  98. package/dist/es/standards-sdk.es12.js +1 -1
  99. package/dist/es/standards-sdk.es120.js +18 -156
  100. package/dist/es/standards-sdk.es120.js.map +1 -1
  101. package/dist/es/standards-sdk.es121.js +148 -191
  102. package/dist/es/standards-sdk.es121.js.map +1 -1
  103. package/dist/es/standards-sdk.es122.js +160 -747
  104. package/dist/es/standards-sdk.es122.js.map +1 -1
  105. package/dist/es/standards-sdk.es123.js +786 -9
  106. package/dist/es/standards-sdk.es123.js.map +1 -1
  107. package/dist/es/standards-sdk.es124.js +13 -567
  108. package/dist/es/standards-sdk.es124.js.map +1 -1
  109. package/dist/es/standards-sdk.es125.js +541 -576
  110. package/dist/es/standards-sdk.es125.js.map +1 -1
  111. package/dist/es/standards-sdk.es126.js +601 -12
  112. package/dist/es/standards-sdk.es126.js.map +1 -1
  113. package/dist/es/standards-sdk.es127.js +13 -2
  114. package/dist/es/standards-sdk.es127.js.map +1 -1
  115. package/dist/es/standards-sdk.es128.js +2 -87
  116. package/dist/es/standards-sdk.es128.js.map +1 -1
  117. package/dist/es/standards-sdk.es129.js +84 -37
  118. package/dist/es/standards-sdk.es129.js.map +1 -1
  119. package/dist/es/standards-sdk.es13.js +1 -1
  120. package/dist/es/standards-sdk.es130.js +40 -2
  121. package/dist/es/standards-sdk.es130.js.map +1 -1
  122. package/dist/es/standards-sdk.es131.js +2 -235
  123. package/dist/es/standards-sdk.es131.js.map +1 -1
  124. package/dist/es/standards-sdk.es132.js +204 -1109
  125. package/dist/es/standards-sdk.es132.js.map +1 -1
  126. package/dist/es/standards-sdk.es133.js +1059 -225
  127. package/dist/es/standards-sdk.es133.js.map +1 -1
  128. package/dist/es/standards-sdk.es134.js +303 -419
  129. package/dist/es/standards-sdk.es134.js.map +1 -1
  130. package/dist/es/standards-sdk.es135.js +418 -351
  131. package/dist/es/standards-sdk.es135.js.map +1 -1
  132. package/dist/es/standards-sdk.es136.js +347 -1108
  133. package/dist/es/standards-sdk.es136.js.map +1 -1
  134. package/dist/es/standards-sdk.es137.js +1088 -180
  135. package/dist/es/standards-sdk.es137.js.map +1 -1
  136. package/dist/es/standards-sdk.es138.js +153 -1512
  137. package/dist/es/standards-sdk.es138.js.map +1 -1
  138. package/dist/es/standards-sdk.es139.js +1567 -1255
  139. package/dist/es/standards-sdk.es139.js.map +1 -1
  140. package/dist/es/standards-sdk.es14.js +1 -1
  141. package/dist/es/standards-sdk.es140.js +1255 -17
  142. package/dist/es/standards-sdk.es140.js.map +1 -1
  143. package/dist/es/standards-sdk.es141.js +15 -85
  144. package/dist/es/standards-sdk.es141.js.map +1 -1
  145. package/dist/es/standards-sdk.es142.js +77 -71
  146. package/dist/es/standards-sdk.es142.js.map +1 -1
  147. package/dist/es/standards-sdk.es143.js +79 -891
  148. package/dist/es/standards-sdk.es143.js.map +1 -1
  149. package/dist/es/standards-sdk.es144.js +886 -53
  150. package/dist/es/standards-sdk.es144.js.map +1 -1
  151. package/dist/es/standards-sdk.es145.js +53 -152
  152. package/dist/es/standards-sdk.es145.js.map +1 -1
  153. package/dist/es/standards-sdk.es146.js +159 -7
  154. package/dist/es/standards-sdk.es146.js.map +1 -1
  155. package/dist/es/standards-sdk.es147.js +7 -86
  156. package/dist/es/standards-sdk.es147.js.map +1 -1
  157. package/dist/es/standards-sdk.es148.js +65 -44
  158. package/dist/es/standards-sdk.es148.js.map +1 -1
  159. package/dist/es/standards-sdk.es149.js +65 -30
  160. package/dist/es/standards-sdk.es149.js.map +1 -1
  161. package/dist/es/standards-sdk.es15.js +1 -1
  162. package/dist/es/standards-sdk.es150.js +30 -34
  163. package/dist/es/standards-sdk.es150.js.map +1 -1
  164. package/dist/es/standards-sdk.es151.js +34 -45
  165. package/dist/es/standards-sdk.es151.js.map +1 -1
  166. package/dist/es/standards-sdk.es152.js +48 -138
  167. package/dist/es/standards-sdk.es152.js.map +1 -1
  168. package/dist/es/standards-sdk.es153.js +133 -37
  169. package/dist/es/standards-sdk.es153.js.map +1 -1
  170. package/dist/es/standards-sdk.es154.js +34 -12474
  171. package/dist/es/standards-sdk.es154.js.map +1 -1
  172. package/dist/es/standards-sdk.es155.js +12477 -12
  173. package/dist/es/standards-sdk.es155.js.map +1 -1
  174. package/dist/es/standards-sdk.es156.js +15 -54
  175. package/dist/es/standards-sdk.es156.js.map +1 -1
  176. package/dist/es/standards-sdk.es157.js +48 -76
  177. package/dist/es/standards-sdk.es157.js.map +1 -1
  178. package/dist/es/standards-sdk.es158.js +69 -66
  179. package/dist/es/standards-sdk.es158.js.map +1 -1
  180. package/dist/es/standards-sdk.es159.js +71 -63
  181. package/dist/es/standards-sdk.es159.js.map +1 -1
  182. package/dist/es/standards-sdk.es16.js +5 -5
  183. package/dist/es/standards-sdk.es160.js +188 -160
  184. package/dist/es/standards-sdk.es160.js.map +1 -1
  185. package/dist/es/standards-sdk.es161.js +232 -312
  186. package/dist/es/standards-sdk.es161.js.map +1 -1
  187. package/dist/es/standards-sdk.es162.js +64 -337
  188. package/dist/es/standards-sdk.es162.js.map +1 -1
  189. package/dist/es/standards-sdk.es163.js +129 -410
  190. package/dist/es/standards-sdk.es163.js.map +1 -1
  191. package/dist/es/standards-sdk.es164.js +200 -209
  192. package/dist/es/standards-sdk.es164.js.map +1 -1
  193. package/dist/es/standards-sdk.es165.js +334 -64
  194. package/dist/es/standards-sdk.es165.js.map +1 -1
  195. package/dist/es/standards-sdk.es166.js +442 -231
  196. package/dist/es/standards-sdk.es166.js.map +1 -1
  197. package/dist/es/standards-sdk.es167.js +317 -158
  198. package/dist/es/standards-sdk.es167.js.map +1 -1
  199. package/dist/es/standards-sdk.es168.js +61 -207
  200. package/dist/es/standards-sdk.es168.js.map +1 -1
  201. package/dist/es/standards-sdk.es169.js +155 -222
  202. package/dist/es/standards-sdk.es169.js.map +1 -1
  203. package/dist/es/standards-sdk.es170.js +178 -75
  204. package/dist/es/standards-sdk.es170.js.map +1 -1
  205. package/dist/es/standards-sdk.es171.js +226 -113
  206. package/dist/es/standards-sdk.es171.js.map +1 -1
  207. package/dist/es/standards-sdk.es172.js +77 -119
  208. package/dist/es/standards-sdk.es172.js.map +1 -1
  209. package/dist/es/standards-sdk.es173.js +103 -162
  210. package/dist/es/standards-sdk.es173.js.map +1 -1
  211. package/dist/es/standards-sdk.es174.js +141 -119
  212. package/dist/es/standards-sdk.es174.js.map +1 -1
  213. package/dist/es/standards-sdk.es175.js +152 -298
  214. package/dist/es/standards-sdk.es175.js.map +1 -1
  215. package/dist/es/standards-sdk.es176.js +120 -240
  216. package/dist/es/standards-sdk.es176.js.map +1 -1
  217. package/dist/es/standards-sdk.es177.js +298 -83
  218. package/dist/es/standards-sdk.es177.js.map +1 -1
  219. package/dist/es/standards-sdk.es178.js +262 -0
  220. package/dist/es/standards-sdk.es178.js.map +1 -0
  221. package/dist/es/standards-sdk.es179.js +119 -0
  222. package/dist/es/standards-sdk.es179.js.map +1 -0
  223. package/dist/es/standards-sdk.es18.js +12 -12
  224. package/dist/es/standards-sdk.es19.js +9 -9
  225. package/dist/es/standards-sdk.es2.js +2 -2
  226. package/dist/es/standards-sdk.es20.js +1 -1
  227. package/dist/es/standards-sdk.es21.js +1 -1
  228. package/dist/es/standards-sdk.es22.js +1 -1
  229. package/dist/es/standards-sdk.es23.js +1 -1
  230. package/dist/es/standards-sdk.es24.js +1 -1
  231. package/dist/es/standards-sdk.es25.js +1 -1
  232. package/dist/es/standards-sdk.es26.js +1 -1
  233. package/dist/es/standards-sdk.es27.js +12 -12
  234. package/dist/es/standards-sdk.es30.js +2 -2
  235. package/dist/es/standards-sdk.es31.js +4 -4
  236. package/dist/es/standards-sdk.es32.js +1 -1
  237. package/dist/es/standards-sdk.es35.js +6 -6
  238. package/dist/es/standards-sdk.es36.js +4 -4
  239. package/dist/es/standards-sdk.es37.js +2 -2
  240. package/dist/es/standards-sdk.es38.js +2 -2
  241. package/dist/es/standards-sdk.es39.js +1 -1
  242. package/dist/es/standards-sdk.es4.js +2 -2
  243. package/dist/es/standards-sdk.es40.js +1 -1
  244. package/dist/es/standards-sdk.es41.js +2 -2
  245. package/dist/es/standards-sdk.es46.js +1 -1
  246. package/dist/es/standards-sdk.es5.js +2 -2
  247. package/dist/es/standards-sdk.es51.js +1 -1
  248. package/dist/es/standards-sdk.es53.js +1 -1
  249. package/dist/es/standards-sdk.es56.js +2 -2
  250. package/dist/es/standards-sdk.es58.js +37 -4
  251. package/dist/es/standards-sdk.es58.js.map +1 -1
  252. package/dist/es/standards-sdk.es59.js +17 -10
  253. package/dist/es/standards-sdk.es59.js.map +1 -1
  254. package/dist/es/standards-sdk.es6.js +2 -2
  255. package/dist/es/standards-sdk.es60.js +2 -1
  256. package/dist/es/standards-sdk.es60.js.map +1 -1
  257. package/dist/es/standards-sdk.es61.js +1 -0
  258. package/dist/es/standards-sdk.es61.js.map +1 -1
  259. package/dist/es/standards-sdk.es62.js +19 -5
  260. package/dist/es/standards-sdk.es62.js.map +1 -1
  261. package/dist/es/standards-sdk.es63.js +214 -153
  262. package/dist/es/standards-sdk.es63.js.map +1 -1
  263. package/dist/es/standards-sdk.es64.js +205 -84
  264. package/dist/es/standards-sdk.es64.js.map +1 -1
  265. package/dist/es/standards-sdk.es65.js +125 -40
  266. package/dist/es/standards-sdk.es65.js.map +1 -1
  267. package/dist/es/standards-sdk.es66.js +41 -261
  268. package/dist/es/standards-sdk.es66.js.map +1 -1
  269. package/dist/es/standards-sdk.es67.js +262 -24
  270. package/dist/es/standards-sdk.es67.js.map +1 -1
  271. package/dist/es/standards-sdk.es68.js +25 -87
  272. package/dist/es/standards-sdk.es68.js.map +1 -1
  273. package/dist/es/standards-sdk.es69.js +95 -3
  274. package/dist/es/standards-sdk.es69.js.map +1 -1
  275. package/dist/es/standards-sdk.es7.js +1 -1
  276. package/dist/es/standards-sdk.es70.js +3 -100
  277. package/dist/es/standards-sdk.es70.js.map +1 -1
  278. package/dist/es/standards-sdk.es71.js +62 -61
  279. package/dist/es/standards-sdk.es71.js.map +1 -1
  280. package/dist/es/standards-sdk.es72.js +98 -17
  281. package/dist/es/standards-sdk.es72.js.map +1 -1
  282. package/dist/es/standards-sdk.es73.js +19 -77
  283. package/dist/es/standards-sdk.es73.js.map +1 -1
  284. package/dist/es/standards-sdk.es74.js +77 -458
  285. package/dist/es/standards-sdk.es74.js.map +1 -1
  286. package/dist/es/standards-sdk.es75.js +332 -107
  287. package/dist/es/standards-sdk.es75.js.map +1 -1
  288. package/dist/es/standards-sdk.es76.js +286 -170
  289. package/dist/es/standards-sdk.es76.js.map +1 -1
  290. package/dist/es/standards-sdk.es77.js +207 -71
  291. package/dist/es/standards-sdk.es77.js.map +1 -1
  292. package/dist/es/standards-sdk.es78.js +72 -71
  293. package/dist/es/standards-sdk.es78.js.map +1 -1
  294. package/dist/es/standards-sdk.es79.js +71 -143
  295. package/dist/es/standards-sdk.es79.js.map +1 -1
  296. package/dist/es/standards-sdk.es80.js +136 -62
  297. package/dist/es/standards-sdk.es80.js.map +1 -1
  298. package/dist/es/standards-sdk.es81.js +45 -380
  299. package/dist/es/standards-sdk.es81.js.map +1 -1
  300. package/dist/es/standards-sdk.es82.js +130 -222
  301. package/dist/es/standards-sdk.es82.js.map +1 -1
  302. package/dist/es/standards-sdk.es83.js +444 -313
  303. package/dist/es/standards-sdk.es83.js.map +1 -1
  304. package/dist/es/standards-sdk.es84.js +364 -88
  305. package/dist/es/standards-sdk.es84.js.map +1 -1
  306. package/dist/es/standards-sdk.es85.js +89 -125
  307. package/dist/es/standards-sdk.es85.js.map +1 -1
  308. package/dist/es/standards-sdk.es86.js +125 -8
  309. package/dist/es/standards-sdk.es86.js.map +1 -1
  310. package/dist/es/standards-sdk.es87.js +6 -45
  311. package/dist/es/standards-sdk.es87.js.map +1 -1
  312. package/dist/es/standards-sdk.es88.js +44 -98
  313. package/dist/es/standards-sdk.es88.js.map +1 -1
  314. package/dist/es/standards-sdk.es89.js +84 -331
  315. package/dist/es/standards-sdk.es89.js.map +1 -1
  316. package/dist/es/standards-sdk.es9.js +2 -2
  317. package/dist/es/standards-sdk.es90.js +160 -93
  318. package/dist/es/standards-sdk.es90.js.map +1 -1
  319. package/dist/es/standards-sdk.es91.js +275 -55
  320. package/dist/es/standards-sdk.es91.js.map +1 -1
  321. package/dist/es/standards-sdk.es92.js +55 -43
  322. package/dist/es/standards-sdk.es92.js.map +1 -1
  323. package/dist/es/standards-sdk.es93.js +44 -145
  324. package/dist/es/standards-sdk.es93.js.map +1 -1
  325. package/dist/es/standards-sdk.es94.js +113 -30
  326. package/dist/es/standards-sdk.es94.js.map +1 -1
  327. package/dist/es/standards-sdk.es95.js +59 -22
  328. package/dist/es/standards-sdk.es95.js.map +1 -1
  329. package/dist/es/standards-sdk.es96.js +28 -23
  330. package/dist/es/standards-sdk.es96.js.map +1 -1
  331. package/dist/es/standards-sdk.es97.js +23 -238
  332. package/dist/es/standards-sdk.es97.js.map +1 -1
  333. package/dist/es/standards-sdk.es98.js +225 -267
  334. package/dist/es/standards-sdk.es98.js.map +1 -1
  335. package/dist/es/standards-sdk.es99.js +220 -95
  336. package/dist/es/standards-sdk.es99.js.map +1 -1
  337. package/package.json +5 -1
@@ -1,32 +1,9 @@
1
- import { multibaseB58btcDecode } from "./standards-sdk.es156.js";
2
- const UAID_DID_RESOLUTION_PROFILE_ID = "hcs-14.profile.uaid-did-resolution";
3
- function decodeSrcDid(src) {
4
- try {
5
- const bytes = multibaseB58btcDecode(src);
6
- const decoded = Buffer.from(bytes).toString("utf8").trim();
7
- return decoded || null;
8
- } catch {
9
- return null;
10
- }
11
- }
12
- function buildHintedService(uaid, params) {
13
- const proto = params["proto"];
14
- const nativeId = params["nativeId"];
15
- const domain = params["domain"];
16
- if (!proto && !nativeId && !domain) {
17
- return null;
18
- }
19
- return {
20
- id: `${uaid}#hcs14-hinted-service-1`,
21
- type: "HintedService",
22
- serviceEndpoint: {
23
- source: "uaid-parameters",
24
- proto,
25
- nativeId,
26
- domain
27
- }
28
- };
29
- }
1
+ import { nodeDnsTxtLookup } from "./standards-sdk.es66.js";
2
+ import { uaidTargetFromParsed, isFqdn, normalizeDomain, buildCanonicalUaid, parseSemicolonFields } from "./standards-sdk.es159.js";
3
+ import { AID_DNS_WEB_PROFILE_ID } from "./standards-sdk.es62.js";
4
+ import { ANS_DNS_WEB_PROFILE_ID } from "./standards-sdk.es63.js";
5
+ import { UAID_DID_RESOLUTION_PROFILE_ID } from "./standards-sdk.es65.js";
6
+ const UAID_DNS_WEB_PROFILE_ID = "hcs-14.profile.uaid-dns-web";
30
7
  function buildErrorProfile(uaid, code, message, details) {
31
8
  const error = {
32
9
  code,
@@ -37,98 +14,242 @@ function buildErrorProfile(uaid, code, message, details) {
37
14
  id: uaid,
38
15
  error,
39
16
  metadata: {
40
- profile: UAID_DID_RESOLUTION_PROFILE_ID,
17
+ profile: UAID_DNS_WEB_PROFILE_ID,
41
18
  resolved: false
42
19
  }
43
20
  };
44
21
  }
45
- function dedupeAlsoKnownAs(baseDid, existing = []) {
46
- const values = /* @__PURE__ */ new Set([baseDid, ...existing]);
47
- return [...values];
22
+ function canonicalizeNativeDomainParams(params) {
23
+ const next = { ...params };
24
+ const nativeId = next["nativeId"];
25
+ if (nativeId && isFqdn(nativeId)) {
26
+ next["nativeId"] = normalizeDomain(nativeId);
27
+ }
28
+ const domain = next["domain"];
29
+ if (domain && isFqdn(domain)) {
30
+ next["domain"] = normalizeDomain(domain);
31
+ }
32
+ return next;
48
33
  }
49
- class UaidDidResolutionProfileResolver {
50
- constructor() {
51
- this.profile = UAID_DID_RESOLUTION_PROFILE_ID;
34
+ function validateRecordFields(fields, queriedNativeId) {
35
+ const target = fields["target"];
36
+ const id = fields["id"];
37
+ const uid = fields["uid"];
38
+ const proto = fields["proto"];
39
+ const nativeId = fields["nativeId"];
40
+ if (target !== "aid" && target !== "did") {
41
+ return null;
42
+ }
43
+ if (!id || !uid || !proto || !nativeId) {
44
+ return null;
45
+ }
46
+ if (normalizeDomain(nativeId) !== queriedNativeId) {
47
+ return null;
48
+ }
49
+ if ("registry" in fields && !fields["registry"]) {
50
+ return null;
51
+ }
52
+ const did = fields["did"];
53
+ if (did && (target !== "did" || !did.startsWith("did:"))) {
54
+ return null;
55
+ }
56
+ const params = {
57
+ uid,
58
+ proto,
59
+ nativeId
60
+ };
61
+ if (fields["registry"]) {
62
+ params["registry"] = fields["registry"];
63
+ }
64
+ if (fields["domain"]) {
65
+ params["domain"] = fields["domain"];
66
+ }
67
+ if (fields["src"]) {
68
+ params["src"] = fields["src"];
69
+ }
70
+ return {
71
+ target,
72
+ id,
73
+ uid,
74
+ proto,
75
+ nativeId,
76
+ registry: fields["registry"],
77
+ domain: fields["domain"],
78
+ src: fields["src"],
79
+ did,
80
+ memo: fields["m"],
81
+ reconstructedUaid: buildCanonicalUaid(
82
+ target,
83
+ id,
84
+ canonicalizeNativeDomainParams(params)
85
+ )
86
+ };
87
+ }
88
+ function selectFollowupProfiles(parsed) {
89
+ const target = uaidTargetFromParsed(parsed);
90
+ if (target === "aid") {
91
+ if (parsed.params["registry"] === "ans") {
92
+ return [ANS_DNS_WEB_PROFILE_ID, AID_DNS_WEB_PROFILE_ID];
93
+ }
94
+ return [AID_DNS_WEB_PROFILE_ID];
95
+ }
96
+ return [UAID_DID_RESOLUTION_PROFILE_ID];
97
+ }
98
+ class UaidDnsWebProfileResolver {
99
+ constructor(options = {}) {
100
+ this.adapterKind = "uaid-profile-resolver";
101
+ this.profile = UAID_DNS_WEB_PROFILE_ID;
52
102
  this.meta = {
53
- id: "hcs-14/uaid-did-resolution",
103
+ id: "hcs-14/uaid-dns-web",
54
104
  didMethods: ["*"],
55
- displayName: "HCS-14 UAID DID Resolution Profile",
56
- description: "Resolves uaid:did identifiers to DID Document-compatible output with profile metadata."
105
+ displayName: "HCS-14 UAID DNS TXT Profile",
106
+ description: "Binds UAIDs to DNS TXT records at _uaid.<nativeId> and can continue to follow-up profile resolution."
57
107
  };
108
+ this.dnsLookup = options.dnsLookup ?? nodeDnsTxtLookup;
109
+ this.dnssecValidation = options.dnssecValidation;
110
+ this.requireFullResolution = options.requireFullResolution ?? false;
111
+ this.enableFollowupResolution = options.enableFollowupResolution ?? true;
58
112
  }
59
113
  supports(_uaid, parsed) {
60
- return parsed.method === "uaid";
114
+ const target = uaidTargetFromParsed(parsed);
115
+ if (target !== "aid" && target !== "did") {
116
+ return false;
117
+ }
118
+ const nativeId = parsed.params["nativeId"];
119
+ return !!nativeId && isFqdn(nativeId);
61
120
  }
62
121
  async resolveProfile(uaid, context) {
63
122
  const parsed = context.parsedUaid;
64
- if (parsed.method !== "uaid") {
123
+ const target = uaidTargetFromParsed(parsed);
124
+ if (target !== "aid" && target !== "did") {
65
125
  return buildErrorProfile(
66
126
  uaid,
67
- "ERR_INVALID_UAID",
68
- "Identifier is not uaid:did and cannot be resolved by this profile.",
69
- { uaid }
127
+ "ERR_NOT_APPLICABLE",
128
+ "UAID DNS/Web profile only applies to uaid:aid or uaid:did identifiers."
70
129
  );
71
130
  }
72
- const src = parsed.params["src"];
73
- const srcDid = src ? decodeSrcDid(src) : null;
74
- const baseDid = srcDid ?? context.did ?? null;
75
- if (!baseDid) {
131
+ const nativeId = parsed.params["nativeId"];
132
+ if (!nativeId || !isFqdn(nativeId)) {
76
133
  return buildErrorProfile(
77
134
  uaid,
78
- "ERR_BASE_DID_UNDETERMINED",
79
- "Unable to determine base DID; provide src parameter or configure method inference.",
80
- { uaid }
135
+ "ERR_NOT_APPLICABLE",
136
+ "UAID DNS/Web profile requires an FQDN nativeId."
81
137
  );
82
138
  }
83
- const didDocument = context.didDocument && context.didDocument.id === baseDid ? context.didDocument : await context.resolveDid(baseDid);
84
- if (!didDocument) {
139
+ const normalizedNativeId = normalizeDomain(nativeId);
140
+ const dnsName = `_uaid.${normalizedNativeId}`;
141
+ const inputCanonical = buildCanonicalUaid(
142
+ uaidTargetFromParsed(parsed),
143
+ parsed.id,
144
+ canonicalizeNativeDomainParams(parsed.params)
145
+ );
146
+ const txtRecords = await this.dnsLookup(dnsName);
147
+ if (txtRecords.length === 0) {
85
148
  return buildErrorProfile(
86
149
  uaid,
87
- "ERR_DID_RESOLUTION_FAILED",
88
- "Base DID resolution failed.",
89
- { uaid, baseDid }
150
+ "ERR_NO_DNS_RECORD",
151
+ "No UAID DNS TXT record was found for the requested nativeId.",
152
+ { dnsName }
90
153
  );
91
154
  }
92
- if (!didDocument.id || typeof didDocument.id !== "string") {
155
+ const parsedRecords = txtRecords.map((record) => parseSemicolonFields(record)).map((fields) => validateRecordFields(fields, normalizedNativeId));
156
+ const validRecords = parsedRecords.filter(
157
+ (record) => record !== null
158
+ );
159
+ if (validRecords.length === 0) {
93
160
  return buildErrorProfile(
94
161
  uaid,
95
- "ERR_DID_DOCUMENT_INVALID",
96
- "Resolved DID document is malformed.",
97
- { uaid, baseDid }
162
+ "ERR_INVALID_UAID_DNS_RECORD",
163
+ "DNS TXT payload at _uaid record is invalid.",
164
+ { dnsName }
98
165
  );
99
166
  }
100
- const baseServices = didDocument.service ?? [];
101
- const hintedService = buildHintedService(uaid, parsed.params);
102
- const includeHintedService = baseServices.length === 0 && hintedService !== null;
103
- const service = includeHintedService ? [...baseServices, hintedService] : baseServices;
167
+ const matchingRecords = validRecords.filter(
168
+ (record) => record.target === target && record.id === parsed.id && record.reconstructedUaid === inputCanonical
169
+ );
170
+ if (matchingRecords.length === 0) {
171
+ return buildErrorProfile(
172
+ uaid,
173
+ "ERR_UAID_MISMATCH",
174
+ "DNS TXT payload does not match the input UAID after canonical reconstruction.",
175
+ {
176
+ dnsName,
177
+ inputCanonical
178
+ }
179
+ );
180
+ }
181
+ const selected = [...matchingRecords].sort(
182
+ (a, b) => a.reconstructedUaid.localeCompare(b.reconstructedUaid)
183
+ )[0];
184
+ const dnssecValidated = this.dnssecValidation ? await this.dnssecValidation(dnsName) : false;
185
+ const verificationLevel = dnssecValidated ? "dns-binding-dnssec" : "dns-binding";
186
+ if (this.enableFollowupResolution) {
187
+ const followupProfiles = selectFollowupProfiles(parsed);
188
+ const failedFollowupProfileIds = [];
189
+ for (const followupProfileId of followupProfiles) {
190
+ const followup = await context.resolveUaidProfileById(
191
+ followupProfileId,
192
+ uaid
193
+ );
194
+ if (!followup) {
195
+ continue;
196
+ }
197
+ if (followup.error || followup.metadata?.resolved === false) {
198
+ failedFollowupProfileIds.push(followupProfileId);
199
+ continue;
200
+ }
201
+ return {
202
+ ...followup,
203
+ metadata: {
204
+ ...followup.metadata,
205
+ profile: UAID_DNS_WEB_PROFILE_ID,
206
+ resolved: true,
207
+ verificationLevel,
208
+ reconstructedUaid: selected.reconstructedUaid,
209
+ selectedFollowupProfile: followupProfileId,
210
+ resolutionMode: "full-resolution"
211
+ }
212
+ };
213
+ }
214
+ if (failedFollowupProfileIds.length > 0) {
215
+ return buildErrorProfile(
216
+ uaid,
217
+ "ERR_FOLLOWUP_RESOLUTION_FAILED",
218
+ "Follow-up profile resolution failed after successful DNS binding.",
219
+ {
220
+ followupProfileId: failedFollowupProfileIds[failedFollowupProfileIds.length - 1],
221
+ attemptedFailedProfiles: failedFollowupProfileIds,
222
+ dnsName
223
+ }
224
+ );
225
+ }
226
+ }
227
+ if (this.requireFullResolution) {
228
+ return buildErrorProfile(
229
+ uaid,
230
+ "ERR_NO_FOLLOWUP_PROFILE",
231
+ "Resolver policy requires full resolution, but no supported follow-up profile was available.",
232
+ { dnsName }
233
+ );
234
+ }
235
+ const did = selected.did ?? context.did ?? void 0;
236
+ const alsoKnownAs = did ? [did] : void 0;
104
237
  return {
105
238
  id: uaid,
106
- did: baseDid,
107
- alsoKnownAs: dedupeAlsoKnownAs(baseDid, didDocument.alsoKnownAs),
108
- verificationMethod: didDocument.verificationMethod,
109
- authentication: didDocument.authentication,
110
- assertionMethod: didDocument.assertionMethod,
111
- service: service.length > 0 ? service : void 0,
239
+ did,
240
+ alsoKnownAs,
112
241
  metadata: {
113
- profile: UAID_DID_RESOLUTION_PROFILE_ID,
242
+ profile: UAID_DNS_WEB_PROFILE_ID,
114
243
  resolved: true,
115
- baseDid,
116
- baseDidResolved: true,
117
- verification: {
118
- method: "did-resolution",
119
- assurance: "base-method",
120
- details: "Validated according to base DID method rules"
121
- },
122
- services: {
123
- copiedFromBaseDidDocument: baseServices.length > 0,
124
- derivedFromUaidParameters: includeHintedService
125
- }
244
+ reconstructedUaid: selected.reconstructedUaid,
245
+ verificationLevel,
246
+ resolutionMode: "dns-binding-only"
126
247
  }
127
248
  };
128
249
  }
129
250
  }
130
251
  export {
131
- UAID_DID_RESOLUTION_PROFILE_ID,
132
- UaidDidResolutionProfileResolver
252
+ UAID_DNS_WEB_PROFILE_ID,
253
+ UaidDnsWebProfileResolver
133
254
  };
134
255
  //# sourceMappingURL=standards-sdk.es64.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"standards-sdk.es64.js","sources":["../../src/hcs-14/resolvers/uaid-did-resolution-profile.ts"],"sourcesContent":["import { multibaseB58btcDecode } from '../base58';\nimport type {\n DidResolutionProfile,\n HintedServiceEndpoint,\n ProfileResolutionError,\n UaidProfileResolver,\n UaidProfileResolverContext,\n} from './types';\nimport type { AdapterMeta } from '../adapters/types';\n\nexport const UAID_DID_RESOLUTION_PROFILE_ID =\n 'hcs-14.profile.uaid-did-resolution';\n\nfunction decodeSrcDid(src: string): string | null {\n try {\n const bytes = multibaseB58btcDecode(src);\n const decoded = Buffer.from(bytes).toString('utf8').trim();\n return decoded || null;\n } catch {\n return null;\n }\n}\n\nfunction buildHintedService(\n uaid: string,\n params: Record<string, string>,\n): {\n id: string;\n type: string;\n serviceEndpoint: HintedServiceEndpoint;\n} | null {\n const proto = params['proto'];\n const nativeId = params['nativeId'];\n const domain = params['domain'];\n if (!proto && !nativeId && !domain) {\n return null;\n }\n return {\n id: `${uaid}#hcs14-hinted-service-1`,\n type: 'HintedService',\n serviceEndpoint: {\n source: 'uaid-parameters',\n proto,\n nativeId,\n domain,\n },\n };\n}\n\nfunction buildErrorProfile(\n uaid: string,\n code: string,\n message: string,\n details?: Record<string, unknown>,\n): DidResolutionProfile {\n const error: ProfileResolutionError = {\n code,\n message,\n details,\n };\n\n return {\n id: uaid,\n error,\n metadata: {\n profile: UAID_DID_RESOLUTION_PROFILE_ID,\n resolved: false,\n },\n };\n}\n\nfunction dedupeAlsoKnownAs(baseDid: string, existing: string[] = []): string[] {\n const values = new Set<string>([baseDid, ...existing]);\n return [...values];\n}\n\nexport class UaidDidResolutionProfileResolver implements UaidProfileResolver {\n readonly profile = UAID_DID_RESOLUTION_PROFILE_ID;\n\n readonly meta: AdapterMeta = {\n id: 'hcs-14/uaid-did-resolution',\n didMethods: ['*'],\n displayName: 'HCS-14 UAID DID Resolution Profile',\n description:\n 'Resolves uaid:did identifiers to DID Document-compatible output with profile metadata.',\n };\n\n supports(\n _uaid: string,\n parsed: UaidProfileResolverContext['parsedUaid'],\n ): boolean {\n return parsed.method === 'uaid';\n }\n\n async resolveProfile(\n uaid: string,\n context: UaidProfileResolverContext,\n ): Promise<DidResolutionProfile | null> {\n const parsed = context.parsedUaid;\n if (parsed.method !== 'uaid') {\n return buildErrorProfile(\n uaid,\n 'ERR_INVALID_UAID',\n 'Identifier is not uaid:did and cannot be resolved by this profile.',\n { uaid },\n );\n }\n\n const src = parsed.params['src'];\n const srcDid = src ? decodeSrcDid(src) : null;\n const baseDid = srcDid ?? context.did ?? null;\n\n if (!baseDid) {\n return buildErrorProfile(\n uaid,\n 'ERR_BASE_DID_UNDETERMINED',\n 'Unable to determine base DID; provide src parameter or configure method inference.',\n { uaid },\n );\n }\n\n const didDocument =\n context.didDocument && context.didDocument.id === baseDid\n ? context.didDocument\n : await context.resolveDid(baseDid);\n\n if (!didDocument) {\n return buildErrorProfile(\n uaid,\n 'ERR_DID_RESOLUTION_FAILED',\n 'Base DID resolution failed.',\n { uaid, baseDid },\n );\n }\n\n if (!didDocument.id || typeof didDocument.id !== 'string') {\n return buildErrorProfile(\n uaid,\n 'ERR_DID_DOCUMENT_INVALID',\n 'Resolved DID document is malformed.',\n { uaid, baseDid },\n );\n }\n\n const baseServices = didDocument.service ?? [];\n const hintedService = buildHintedService(uaid, parsed.params);\n const includeHintedService =\n baseServices.length === 0 && hintedService !== null;\n const service = includeHintedService\n ? [...baseServices, hintedService]\n : baseServices;\n\n return {\n id: uaid,\n did: baseDid,\n alsoKnownAs: dedupeAlsoKnownAs(baseDid, didDocument.alsoKnownAs),\n verificationMethod: didDocument.verificationMethod,\n authentication: didDocument.authentication,\n assertionMethod: didDocument.assertionMethod,\n service: service.length > 0 ? service : undefined,\n metadata: {\n profile: UAID_DID_RESOLUTION_PROFILE_ID,\n resolved: true,\n baseDid,\n baseDidResolved: true,\n verification: {\n method: 'did-resolution',\n assurance: 'base-method',\n details: 'Validated according to base DID method rules',\n },\n services: {\n copiedFromBaseDidDocument: baseServices.length > 0,\n derivedFromUaidParameters: includeHintedService,\n },\n },\n };\n }\n}\n"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"standards-sdk.es64.js","sources":["../../src/hcs-14/resolvers/uaid-dns-web-profile.ts"],"sourcesContent":["import type {\n DidResolutionProfile,\n ProfileResolutionError,\n UaidProfileResolver,\n UaidProfileResolverContext,\n} from './types';\nimport type { AdapterMeta } from '../adapters/types';\nimport { nodeDnsTxtLookup, type DnsTxtLookup } from './dns';\nimport {\n buildCanonicalUaid,\n isFqdn,\n normalizeDomain,\n parseSemicolonFields,\n uaidTargetFromParsed,\n} from './profile-utils';\nimport { AID_DNS_WEB_PROFILE_ID } from './aid-dns-web-profile';\nimport { ANS_DNS_WEB_PROFILE_ID } from './ans-dns-web-profile';\nimport { UAID_DID_RESOLUTION_PROFILE_ID } from './uaid-did-resolution-profile';\n\nexport const UAID_DNS_WEB_PROFILE_ID = 'hcs-14.profile.uaid-dns-web';\n\ninterface UaidDnsWebRecord {\n target: 'aid' | 'did';\n id: string;\n uid: string;\n proto: string;\n nativeId: string;\n registry?: string;\n domain?: string;\n src?: string;\n did?: string;\n memo?: string;\n reconstructedUaid: string;\n}\n\nexport interface UaidDnsWebResolverOptions {\n dnsLookup?: DnsTxtLookup;\n dnssecValidation?: (hostname: string) => Promise<boolean>;\n requireFullResolution?: boolean;\n enableFollowupResolution?: boolean;\n}\n\nfunction buildErrorProfile(\n uaid: string,\n code: string,\n message: string,\n details?: Record<string, unknown>,\n): DidResolutionProfile {\n const error: ProfileResolutionError = {\n code,\n message,\n details,\n };\n\n return {\n id: uaid,\n error,\n metadata: {\n profile: UAID_DNS_WEB_PROFILE_ID,\n resolved: false,\n },\n };\n}\n\nfunction canonicalizeNativeDomainParams(\n params: Record<string, string>,\n): Record<string, string> {\n const next = { ...params };\n const nativeId = next['nativeId'];\n if (nativeId && isFqdn(nativeId)) {\n next['nativeId'] = normalizeDomain(nativeId);\n }\n const domain = next['domain'];\n if (domain && isFqdn(domain)) {\n next['domain'] = normalizeDomain(domain);\n }\n return next;\n}\n\nfunction validateRecordFields(\n fields: Record<string, string>,\n queriedNativeId: string,\n): UaidDnsWebRecord | null {\n const target = fields['target'];\n const id = fields['id'];\n const uid = fields['uid'];\n const proto = fields['proto'];\n const nativeId = fields['nativeId'];\n\n if (target !== 'aid' && target !== 'did') {\n return null;\n }\n if (!id || !uid || !proto || !nativeId) {\n return null;\n }\n if (normalizeDomain(nativeId) !== queriedNativeId) {\n return null;\n }\n if ('registry' in fields && !fields['registry']) {\n return null;\n }\n const did = fields['did'];\n if (did && (target !== 'did' || !did.startsWith('did:'))) {\n return null;\n }\n\n const params: Record<string, string> = {\n uid,\n proto,\n nativeId,\n };\n if (fields['registry']) {\n params['registry'] = fields['registry'];\n }\n if (fields['domain']) {\n params['domain'] = fields['domain'];\n }\n if (fields['src']) {\n params['src'] = fields['src'];\n }\n\n return {\n target,\n id,\n uid,\n proto,\n nativeId,\n registry: fields['registry'],\n domain: fields['domain'],\n src: fields['src'],\n did,\n memo: fields['m'],\n reconstructedUaid: buildCanonicalUaid(\n target,\n id,\n canonicalizeNativeDomainParams(params),\n ),\n };\n}\n\nfunction selectFollowupProfiles(\n parsed: UaidProfileResolverContext['parsedUaid'],\n): string[] {\n const target = uaidTargetFromParsed(parsed);\n if (target === 'aid') {\n if (parsed.params['registry'] === 'ans') {\n return [ANS_DNS_WEB_PROFILE_ID, AID_DNS_WEB_PROFILE_ID];\n }\n return [AID_DNS_WEB_PROFILE_ID];\n }\n return [UAID_DID_RESOLUTION_PROFILE_ID];\n}\n\nexport class UaidDnsWebProfileResolver implements UaidProfileResolver {\n readonly adapterKind: 'uaid-profile-resolver' = 'uaid-profile-resolver';\n readonly profile = UAID_DNS_WEB_PROFILE_ID;\n\n readonly meta: AdapterMeta = {\n id: 'hcs-14/uaid-dns-web',\n didMethods: ['*'],\n displayName: 'HCS-14 UAID DNS TXT Profile',\n description:\n 'Binds UAIDs to DNS TXT records at _uaid.<nativeId> and can continue to follow-up profile resolution.',\n };\n\n private readonly dnsLookup: DnsTxtLookup;\n private readonly dnssecValidation?: (hostname: string) => Promise<boolean>;\n private readonly requireFullResolution: boolean;\n private readonly enableFollowupResolution: boolean;\n\n constructor(options: UaidDnsWebResolverOptions = {}) {\n this.dnsLookup = options.dnsLookup ?? nodeDnsTxtLookup;\n this.dnssecValidation = options.dnssecValidation;\n this.requireFullResolution = options.requireFullResolution ?? false;\n this.enableFollowupResolution = options.enableFollowupResolution ?? true;\n }\n\n supports(\n _uaid: string,\n parsed: UaidProfileResolverContext['parsedUaid'],\n ): boolean {\n const target = uaidTargetFromParsed(parsed);\n if (target !== 'aid' && target !== 'did') {\n return false;\n }\n const nativeId = parsed.params['nativeId'];\n return !!nativeId && isFqdn(nativeId);\n }\n\n async resolveProfile(\n uaid: string,\n context: UaidProfileResolverContext,\n ): Promise<DidResolutionProfile | null> {\n const parsed = context.parsedUaid;\n const target = uaidTargetFromParsed(parsed);\n if (target !== 'aid' && target !== 'did') {\n return buildErrorProfile(\n uaid,\n 'ERR_NOT_APPLICABLE',\n 'UAID DNS/Web profile only applies to uaid:aid or uaid:did identifiers.',\n );\n }\n\n const nativeId = parsed.params['nativeId'];\n if (!nativeId || !isFqdn(nativeId)) {\n return buildErrorProfile(\n uaid,\n 'ERR_NOT_APPLICABLE',\n 'UAID DNS/Web profile requires an FQDN nativeId.',\n );\n }\n\n const normalizedNativeId = normalizeDomain(nativeId);\n const dnsName = `_uaid.${normalizedNativeId}`;\n const inputCanonical = buildCanonicalUaid(\n uaidTargetFromParsed(parsed),\n parsed.id,\n canonicalizeNativeDomainParams(parsed.params),\n );\n\n const txtRecords = await this.dnsLookup(dnsName);\n if (txtRecords.length === 0) {\n return buildErrorProfile(\n uaid,\n 'ERR_NO_DNS_RECORD',\n 'No UAID DNS TXT record was found for the requested nativeId.',\n { dnsName },\n );\n }\n\n const parsedRecords = txtRecords\n .map(record => parseSemicolonFields(record))\n .map(fields => validateRecordFields(fields, normalizedNativeId));\n const validRecords = parsedRecords.filter(\n (record): record is UaidDnsWebRecord => record !== null,\n );\n\n if (validRecords.length === 0) {\n return buildErrorProfile(\n uaid,\n 'ERR_INVALID_UAID_DNS_RECORD',\n 'DNS TXT payload at _uaid record is invalid.',\n { dnsName },\n );\n }\n\n const matchingRecords = validRecords.filter(\n record =>\n record.target === target &&\n record.id === parsed.id &&\n record.reconstructedUaid === inputCanonical,\n );\n\n if (matchingRecords.length === 0) {\n return buildErrorProfile(\n uaid,\n 'ERR_UAID_MISMATCH',\n 'DNS TXT payload does not match the input UAID after canonical reconstruction.',\n {\n dnsName,\n inputCanonical,\n },\n );\n }\n\n const selected = [...matchingRecords].sort((a, b) =>\n a.reconstructedUaid.localeCompare(b.reconstructedUaid),\n )[0];\n\n const dnssecValidated = this.dnssecValidation\n ? await this.dnssecValidation(dnsName)\n : false;\n const verificationLevel = dnssecValidated\n ? 'dns-binding-dnssec'\n : 'dns-binding';\n\n if (this.enableFollowupResolution) {\n const followupProfiles = selectFollowupProfiles(parsed);\n const failedFollowupProfileIds: string[] = [];\n for (const followupProfileId of followupProfiles) {\n const followup = await context.resolveUaidProfileById(\n followupProfileId,\n uaid,\n );\n if (!followup) {\n continue;\n }\n if (followup.error || followup.metadata?.resolved === false) {\n failedFollowupProfileIds.push(followupProfileId);\n continue;\n }\n return {\n ...followup,\n metadata: {\n ...followup.metadata,\n profile: UAID_DNS_WEB_PROFILE_ID,\n resolved: true,\n verificationLevel,\n reconstructedUaid: selected.reconstructedUaid,\n selectedFollowupProfile: followupProfileId,\n resolutionMode: 'full-resolution',\n },\n };\n }\n if (failedFollowupProfileIds.length > 0) {\n return buildErrorProfile(\n uaid,\n 'ERR_FOLLOWUP_RESOLUTION_FAILED',\n 'Follow-up profile resolution failed after successful DNS binding.',\n {\n followupProfileId:\n failedFollowupProfileIds[failedFollowupProfileIds.length - 1],\n attemptedFailedProfiles: failedFollowupProfileIds,\n dnsName,\n },\n );\n }\n }\n\n if (this.requireFullResolution) {\n return buildErrorProfile(\n uaid,\n 'ERR_NO_FOLLOWUP_PROFILE',\n 'Resolver policy requires full resolution, but no supported follow-up profile was available.',\n { dnsName },\n );\n }\n\n const did = selected.did ?? context.did ?? undefined;\n const alsoKnownAs = did ? [did] : undefined;\n\n return {\n id: uaid,\n did,\n alsoKnownAs,\n metadata: {\n profile: UAID_DNS_WEB_PROFILE_ID,\n resolved: true,\n reconstructedUaid: selected.reconstructedUaid,\n verificationLevel,\n resolutionMode: 'dns-binding-only',\n },\n };\n }\n}\n"],"names":[],"mappings":"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"}
@@ -1,50 +1,135 @@
1
- import { optionalImport } from "./standards-sdk.es157.js";
2
- let resolveTxtLoader = null;
3
- function isNoRecordError(error) {
4
- if (!error || typeof error !== "object") {
5
- return false;
6
- }
7
- const code = Reflect.get(error, "code");
8
- if (typeof code !== "string") {
9
- return false;
1
+ import { multibaseB58btcDecode } from "./standards-sdk.es157.js";
2
+ const UAID_DID_RESOLUTION_PROFILE_ID = "hcs-14.profile.uaid-did-resolution";
3
+ function decodeSrcDid(src) {
4
+ try {
5
+ const bytes = multibaseB58btcDecode(src);
6
+ const decoded = Buffer.from(bytes).toString("utf8").trim();
7
+ return decoded || null;
8
+ } catch {
9
+ return null;
10
10
  }
11
- return code === "ENOTFOUND" || code === "ENODATA" || code === "ENOENT" || code === "ENONAME" || code === "NXDOMAIN";
12
11
  }
13
- async function loadResolveTxt() {
14
- if (!resolveTxtLoader) {
15
- resolveTxtLoader = (async () => {
16
- const nodeDnsModule = await optionalImport(
17
- "node:dns/promises",
18
- { preferImport: true }
19
- );
20
- if (nodeDnsModule?.resolveTxt) {
21
- return nodeDnsModule.resolveTxt;
22
- }
23
- const dnsModule = await optionalImport(
24
- "dns/promises",
25
- { preferImport: true }
26
- );
27
- return dnsModule?.resolveTxt ?? null;
28
- })();
12
+ function buildHintedService(uaid, params) {
13
+ const proto = params["proto"];
14
+ const nativeId = params["nativeId"];
15
+ const domain = params["domain"];
16
+ if (!proto && !nativeId && !domain) {
17
+ return null;
29
18
  }
30
- return resolveTxtLoader;
19
+ return {
20
+ id: `${uaid}#hcs14-hinted-service-1`,
21
+ type: "HintedService",
22
+ serviceEndpoint: {
23
+ source: "uaid-parameters",
24
+ proto,
25
+ nativeId,
26
+ domain
27
+ }
28
+ };
31
29
  }
32
- const nodeDnsTxtLookup = async (hostname) => {
33
- const resolveTxt = await loadResolveTxt();
34
- if (!resolveTxt) {
35
- return [];
30
+ function buildErrorProfile(uaid, code, message, details) {
31
+ const error = {
32
+ code,
33
+ message,
34
+ details
35
+ };
36
+ return {
37
+ id: uaid,
38
+ error,
39
+ metadata: {
40
+ profile: UAID_DID_RESOLUTION_PROFILE_ID,
41
+ resolved: false
42
+ }
43
+ };
44
+ }
45
+ function dedupeAlsoKnownAs(baseDid, existing = []) {
46
+ const values = /* @__PURE__ */ new Set([baseDid, ...existing]);
47
+ return [...values];
48
+ }
49
+ class UaidDidResolutionProfileResolver {
50
+ constructor() {
51
+ this.adapterKind = "uaid-profile-resolver";
52
+ this.profile = UAID_DID_RESOLUTION_PROFILE_ID;
53
+ this.meta = {
54
+ id: "hcs-14/uaid-did-resolution",
55
+ didMethods: ["*"],
56
+ displayName: "HCS-14 UAID DID Resolution Profile",
57
+ description: "Resolves uaid:did identifiers to DID Document-compatible output with profile metadata."
58
+ };
36
59
  }
37
- try {
38
- const response = await resolveTxt(hostname);
39
- return response.map((chunks) => chunks.join(""));
40
- } catch (error) {
41
- if (isNoRecordError(error)) {
42
- return [];
60
+ supports(_uaid, parsed) {
61
+ return parsed.method === "uaid";
62
+ }
63
+ async resolveProfile(uaid, context) {
64
+ const parsed = context.parsedUaid;
65
+ if (parsed.method !== "uaid") {
66
+ return buildErrorProfile(
67
+ uaid,
68
+ "ERR_INVALID_UAID",
69
+ "Identifier is not uaid:did and cannot be resolved by this profile.",
70
+ { uaid }
71
+ );
72
+ }
73
+ const src = parsed.params["src"];
74
+ const srcDid = src ? decodeSrcDid(src) : null;
75
+ const baseDid = srcDid ?? context.did ?? null;
76
+ if (!baseDid) {
77
+ return buildErrorProfile(
78
+ uaid,
79
+ "ERR_BASE_DID_UNDETERMINED",
80
+ "Unable to determine base DID; provide src parameter or configure method inference.",
81
+ { uaid }
82
+ );
83
+ }
84
+ const didDocument = context.didDocument && context.didDocument.id === baseDid ? context.didDocument : await context.resolveDid(baseDid);
85
+ if (!didDocument) {
86
+ return buildErrorProfile(
87
+ uaid,
88
+ "ERR_DID_RESOLUTION_FAILED",
89
+ "Base DID resolution failed.",
90
+ { uaid, baseDid }
91
+ );
43
92
  }
44
- throw error;
93
+ if (!didDocument.id || typeof didDocument.id !== "string") {
94
+ return buildErrorProfile(
95
+ uaid,
96
+ "ERR_DID_DOCUMENT_INVALID",
97
+ "Resolved DID document is malformed.",
98
+ { uaid, baseDid }
99
+ );
100
+ }
101
+ const baseServices = didDocument.service ?? [];
102
+ const hintedService = buildHintedService(uaid, parsed.params);
103
+ const includeHintedService = baseServices.length === 0 && hintedService !== null;
104
+ const service = includeHintedService ? [...baseServices, hintedService] : baseServices;
105
+ return {
106
+ id: uaid,
107
+ did: baseDid,
108
+ alsoKnownAs: dedupeAlsoKnownAs(baseDid, didDocument.alsoKnownAs),
109
+ verificationMethod: didDocument.verificationMethod,
110
+ authentication: didDocument.authentication,
111
+ assertionMethod: didDocument.assertionMethod,
112
+ service: service.length > 0 ? service : void 0,
113
+ metadata: {
114
+ profile: UAID_DID_RESOLUTION_PROFILE_ID,
115
+ resolved: true,
116
+ baseDid,
117
+ baseDidResolved: true,
118
+ verification: {
119
+ method: "did-resolution",
120
+ assurance: "base-method",
121
+ details: "Validated according to base DID method rules"
122
+ },
123
+ services: {
124
+ copiedFromBaseDidDocument: baseServices.length > 0,
125
+ derivedFromUaidParameters: includeHintedService
126
+ }
127
+ }
128
+ };
45
129
  }
46
- };
130
+ }
47
131
  export {
48
- nodeDnsTxtLookup
132
+ UAID_DID_RESOLUTION_PROFILE_ID,
133
+ UaidDidResolutionProfileResolver
49
134
  };
50
135
  //# sourceMappingURL=standards-sdk.es65.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"standards-sdk.es65.js","sources":["../../src/hcs-14/resolvers/dns.ts"],"sourcesContent":["import { optionalImport } from '../../utils/dynamic-import';\n\ntype DnsResolveTxt = (hostname: string) => Promise<string[][]>;\n\ntype DnsPromisesModule = {\n resolveTxt?: DnsResolveTxt;\n};\n\nexport type DnsTxtLookup = (hostname: string) => Promise<string[]>;\n\nlet resolveTxtLoader: Promise<DnsResolveTxt | null> | null = null;\n\nfunction isNoRecordError(error: unknown): boolean {\n if (!error || typeof error !== 'object') {\n return false;\n }\n const code = Reflect.get(error, 'code');\n if (typeof code !== 'string') {\n return false;\n }\n return (\n code === 'ENOTFOUND' ||\n code === 'ENODATA' ||\n code === 'ENOENT' ||\n code === 'ENONAME' ||\n code === 'NXDOMAIN'\n );\n}\n\nasync function loadResolveTxt(): Promise<DnsResolveTxt | null> {\n if (!resolveTxtLoader) {\n resolveTxtLoader = (async () => {\n const nodeDnsModule = await optionalImport<DnsPromisesModule>(\n 'node:dns/promises',\n { preferImport: true },\n );\n if (nodeDnsModule?.resolveTxt) {\n return nodeDnsModule.resolveTxt;\n }\n\n const dnsModule = await optionalImport<DnsPromisesModule>(\n 'dns/promises',\n { preferImport: true },\n );\n return dnsModule?.resolveTxt ?? null;\n })();\n }\n\n return resolveTxtLoader;\n}\n\nexport const nodeDnsTxtLookup: DnsTxtLookup = async hostname => {\n const resolveTxt = await loadResolveTxt();\n if (!resolveTxt) {\n return [];\n }\n\n try {\n const response = await resolveTxt(hostname);\n return response.map(chunks => chunks.join(''));\n } catch (error) {\n if (isNoRecordError(error)) {\n return [];\n }\n throw error as Error;\n }\n};\n"],"names":[],"mappings":";AAUA,IAAI,mBAAyD;AAE7D,SAAS,gBAAgB,OAAyB;AAChD,MAAI,CAAC,SAAS,OAAO,UAAU,UAAU;AACvC,WAAO;AAAA,EACT;AACA,QAAM,OAAO,QAAQ,IAAI,OAAO,MAAM;AACtC,MAAI,OAAO,SAAS,UAAU;AAC5B,WAAO;AAAA,EACT;AACA,SACE,SAAS,eACT,SAAS,aACT,SAAS,YACT,SAAS,aACT,SAAS;AAEb;AAEA,eAAe,iBAAgD;AAC7D,MAAI,CAAC,kBAAkB;AACrB,wBAAoB,YAAY;AAC9B,YAAM,gBAAgB,MAAM;AAAA,QAC1B;AAAA,QACA,EAAE,cAAc,KAAA;AAAA,MAAK;AAEvB,UAAI,eAAe,YAAY;AAC7B,eAAO,cAAc;AAAA,MACvB;AAEA,YAAM,YAAY,MAAM;AAAA,QACtB;AAAA,QACA,EAAE,cAAc,KAAA;AAAA,MAAK;AAEvB,aAAO,WAAW,cAAc;AAAA,IAClC,GAAA;AAAA,EACF;AAEA,SAAO;AACT;AAEO,MAAM,mBAAiC,OAAM,aAAY;AAC9D,QAAM,aAAa,MAAM,eAAA;AACzB,MAAI,CAAC,YAAY;AACf,WAAO,CAAA;AAAA,EACT;AAEA,MAAI;AACF,UAAM,WAAW,MAAM,WAAW,QAAQ;AAC1C,WAAO,SAAS,IAAI,CAAA,WAAU,OAAO,KAAK,EAAE,CAAC;AAAA,EAC/C,SAAS,OAAO;AACd,QAAI,gBAAgB,KAAK,GAAG;AAC1B,aAAO,CAAA;AAAA,IACT;AACA,UAAM;AAAA,EACR;AACF;"}
1
+ {"version":3,"file":"standards-sdk.es65.js","sources":["../../src/hcs-14/resolvers/uaid-did-resolution-profile.ts"],"sourcesContent":["import { multibaseB58btcDecode } from '../base58';\nimport type {\n DidResolutionProfile,\n HintedServiceEndpoint,\n ProfileResolutionError,\n UaidProfileResolver,\n UaidProfileResolverContext,\n} from './types';\nimport type { AdapterMeta } from '../adapters/types';\n\nexport const UAID_DID_RESOLUTION_PROFILE_ID =\n 'hcs-14.profile.uaid-did-resolution';\n\nfunction decodeSrcDid(src: string): string | null {\n try {\n const bytes = multibaseB58btcDecode(src);\n const decoded = Buffer.from(bytes).toString('utf8').trim();\n return decoded || null;\n } catch {\n return null;\n }\n}\n\nfunction buildHintedService(\n uaid: string,\n params: Record<string, string>,\n): {\n id: string;\n type: string;\n serviceEndpoint: HintedServiceEndpoint;\n} | null {\n const proto = params['proto'];\n const nativeId = params['nativeId'];\n const domain = params['domain'];\n if (!proto && !nativeId && !domain) {\n return null;\n }\n return {\n id: `${uaid}#hcs14-hinted-service-1`,\n type: 'HintedService',\n serviceEndpoint: {\n source: 'uaid-parameters',\n proto,\n nativeId,\n domain,\n },\n };\n}\n\nfunction buildErrorProfile(\n uaid: string,\n code: string,\n message: string,\n details?: Record<string, unknown>,\n): DidResolutionProfile {\n const error: ProfileResolutionError = {\n code,\n message,\n details,\n };\n\n return {\n id: uaid,\n error,\n metadata: {\n profile: UAID_DID_RESOLUTION_PROFILE_ID,\n resolved: false,\n },\n };\n}\n\nfunction dedupeAlsoKnownAs(baseDid: string, existing: string[] = []): string[] {\n const values = new Set<string>([baseDid, ...existing]);\n return [...values];\n}\n\nexport class UaidDidResolutionProfileResolver implements UaidProfileResolver {\n readonly adapterKind: 'uaid-profile-resolver' = 'uaid-profile-resolver';\n readonly profile = UAID_DID_RESOLUTION_PROFILE_ID;\n\n readonly meta: AdapterMeta = {\n id: 'hcs-14/uaid-did-resolution',\n didMethods: ['*'],\n displayName: 'HCS-14 UAID DID Resolution Profile',\n description:\n 'Resolves uaid:did identifiers to DID Document-compatible output with profile metadata.',\n };\n\n supports(\n _uaid: string,\n parsed: UaidProfileResolverContext['parsedUaid'],\n ): boolean {\n return parsed.method === 'uaid';\n }\n\n async resolveProfile(\n uaid: string,\n context: UaidProfileResolverContext,\n ): Promise<DidResolutionProfile | null> {\n const parsed = context.parsedUaid;\n if (parsed.method !== 'uaid') {\n return buildErrorProfile(\n uaid,\n 'ERR_INVALID_UAID',\n 'Identifier is not uaid:did and cannot be resolved by this profile.',\n { uaid },\n );\n }\n\n const src = parsed.params['src'];\n const srcDid = src ? decodeSrcDid(src) : null;\n const baseDid = srcDid ?? context.did ?? null;\n\n if (!baseDid) {\n return buildErrorProfile(\n uaid,\n 'ERR_BASE_DID_UNDETERMINED',\n 'Unable to determine base DID; provide src parameter or configure method inference.',\n { uaid },\n );\n }\n\n const didDocument =\n context.didDocument && context.didDocument.id === baseDid\n ? context.didDocument\n : await context.resolveDid(baseDid);\n\n if (!didDocument) {\n return buildErrorProfile(\n uaid,\n 'ERR_DID_RESOLUTION_FAILED',\n 'Base DID resolution failed.',\n { uaid, baseDid },\n );\n }\n\n if (!didDocument.id || typeof didDocument.id !== 'string') {\n return buildErrorProfile(\n uaid,\n 'ERR_DID_DOCUMENT_INVALID',\n 'Resolved DID document is malformed.',\n { uaid, baseDid },\n );\n }\n\n const baseServices = didDocument.service ?? [];\n const hintedService = buildHintedService(uaid, parsed.params);\n const includeHintedService =\n baseServices.length === 0 && hintedService !== null;\n const service = includeHintedService\n ? [...baseServices, hintedService]\n : baseServices;\n\n return {\n id: uaid,\n did: baseDid,\n alsoKnownAs: dedupeAlsoKnownAs(baseDid, didDocument.alsoKnownAs),\n verificationMethod: didDocument.verificationMethod,\n authentication: didDocument.authentication,\n assertionMethod: didDocument.assertionMethod,\n service: service.length > 0 ? service : undefined,\n metadata: {\n profile: UAID_DID_RESOLUTION_PROFILE_ID,\n resolved: true,\n baseDid,\n baseDidResolved: true,\n verification: {\n method: 'did-resolution',\n assurance: 'base-method',\n details: 'Validated according to base DID method rules',\n },\n services: {\n copiedFromBaseDidDocument: baseServices.length > 0,\n derivedFromUaidParameters: includeHintedService,\n },\n },\n };\n }\n}\n"],"names":[],"mappings":"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"}