@hashgraphonline/standards-sdk 0.1.158 → 0.1.160

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 (336) hide show
  1. package/dist/cjs/hcs-12/validation/schemas.d.ts +4 -4
  2. package/dist/cjs/hcs-14/index.d.ts +5 -0
  3. package/dist/cjs/hcs-14/index.d.ts.map +1 -1
  4. package/dist/cjs/hcs-14/resolvers/aid-dns-web-profile.d.ts +37 -0
  5. package/dist/cjs/hcs-14/resolvers/aid-dns-web-profile.d.ts.map +1 -0
  6. package/dist/cjs/hcs-14/resolvers/dns.d.ts +3 -0
  7. package/dist/cjs/hcs-14/resolvers/dns.d.ts.map +1 -0
  8. package/dist/cjs/hcs-14/resolvers/hcs-11-profile.d.ts +8 -0
  9. package/dist/cjs/hcs-14/resolvers/hcs-11-profile.d.ts.map +1 -0
  10. package/dist/cjs/hcs-14/resolvers/profile-utils.d.ts +9 -0
  11. package/dist/cjs/hcs-14/resolvers/profile-utils.d.ts.map +1 -0
  12. package/dist/cjs/hcs-14/resolvers/registry.d.ts +21 -1
  13. package/dist/cjs/hcs-14/resolvers/registry.d.ts.map +1 -1
  14. package/dist/cjs/hcs-14/resolvers/types.d.ts +106 -5
  15. package/dist/cjs/hcs-14/resolvers/types.d.ts.map +1 -1
  16. package/dist/cjs/hcs-14/resolvers/uaid-did-resolution-profile.d.ts +10 -0
  17. package/dist/cjs/hcs-14/resolvers/uaid-did-resolution-profile.d.ts.map +1 -0
  18. package/dist/cjs/hcs-14/resolvers/uaid-dns-web-profile.d.ts +22 -0
  19. package/dist/cjs/hcs-14/resolvers/uaid-dns-web-profile.d.ts.map +1 -0
  20. package/dist/cjs/hcs-14/sdk.d.ts +16 -1
  21. package/dist/cjs/hcs-14/sdk.d.ts.map +1 -1
  22. package/dist/cjs/inscribe/inscriber.d.ts +1 -1
  23. package/dist/cjs/inscribe/inscriber.d.ts.map +1 -1
  24. package/dist/cjs/inscribe/inscription-cost.d.ts +12 -0
  25. package/dist/cjs/inscribe/inscription-cost.d.ts.map +1 -0
  26. package/dist/cjs/inscribe/types.d.ts +5 -1
  27. package/dist/cjs/inscribe/types.d.ts.map +1 -1
  28. package/dist/cjs/services/registry-broker/schemas.d.ts +1548 -0
  29. package/dist/cjs/services/registry-broker/schemas.d.ts.map +1 -1
  30. package/dist/cjs/standards-sdk.cjs +2 -2
  31. package/dist/cjs/standards-sdk.cjs.map +1 -1
  32. package/dist/es/hcs-12/validation/schemas.d.ts +4 -4
  33. package/dist/es/hcs-14/index.d.ts +5 -0
  34. package/dist/es/hcs-14/index.d.ts.map +1 -1
  35. package/dist/es/hcs-14/resolvers/aid-dns-web-profile.d.ts +37 -0
  36. package/dist/es/hcs-14/resolvers/aid-dns-web-profile.d.ts.map +1 -0
  37. package/dist/es/hcs-14/resolvers/dns.d.ts +3 -0
  38. package/dist/es/hcs-14/resolvers/dns.d.ts.map +1 -0
  39. package/dist/es/hcs-14/resolvers/hcs-11-profile.d.ts +8 -0
  40. package/dist/es/hcs-14/resolvers/hcs-11-profile.d.ts.map +1 -0
  41. package/dist/es/hcs-14/resolvers/profile-utils.d.ts +9 -0
  42. package/dist/es/hcs-14/resolvers/profile-utils.d.ts.map +1 -0
  43. package/dist/es/hcs-14/resolvers/registry.d.ts +21 -1
  44. package/dist/es/hcs-14/resolvers/registry.d.ts.map +1 -1
  45. package/dist/es/hcs-14/resolvers/types.d.ts +106 -5
  46. package/dist/es/hcs-14/resolvers/types.d.ts.map +1 -1
  47. package/dist/es/hcs-14/resolvers/uaid-did-resolution-profile.d.ts +10 -0
  48. package/dist/es/hcs-14/resolvers/uaid-did-resolution-profile.d.ts.map +1 -0
  49. package/dist/es/hcs-14/resolvers/uaid-dns-web-profile.d.ts +22 -0
  50. package/dist/es/hcs-14/resolvers/uaid-dns-web-profile.d.ts.map +1 -0
  51. package/dist/es/hcs-14/sdk.d.ts +16 -1
  52. package/dist/es/hcs-14/sdk.d.ts.map +1 -1
  53. package/dist/es/inscribe/inscriber.d.ts +1 -1
  54. package/dist/es/inscribe/inscriber.d.ts.map +1 -1
  55. package/dist/es/inscribe/inscription-cost.d.ts +12 -0
  56. package/dist/es/inscribe/inscription-cost.d.ts.map +1 -0
  57. package/dist/es/inscribe/types.d.ts +5 -1
  58. package/dist/es/inscribe/types.d.ts.map +1 -1
  59. package/dist/es/services/registry-broker/schemas.d.ts +1548 -0
  60. package/dist/es/services/registry-broker/schemas.d.ts.map +1 -1
  61. package/dist/es/standards-sdk.es.js +96 -83
  62. package/dist/es/standards-sdk.es.js.map +1 -1
  63. package/dist/es/standards-sdk.es100.js +41 -224
  64. package/dist/es/standards-sdk.es100.js.map +1 -1
  65. package/dist/es/standards-sdk.es101.js +249 -97
  66. package/dist/es/standards-sdk.es101.js.map +1 -1
  67. package/dist/es/standards-sdk.es102.js +95 -27
  68. package/dist/es/standards-sdk.es102.js.map +1 -1
  69. package/dist/es/standards-sdk.es103.js +97 -80
  70. package/dist/es/standards-sdk.es103.js.map +1 -1
  71. package/dist/es/standards-sdk.es104.js +29 -30
  72. package/dist/es/standards-sdk.es104.js.map +1 -1
  73. package/dist/es/standards-sdk.es105.js +229 -249
  74. package/dist/es/standards-sdk.es105.js.map +1 -1
  75. package/dist/es/standards-sdk.es106.js +103 -468
  76. package/dist/es/standards-sdk.es106.js.map +1 -1
  77. package/dist/es/standards-sdk.es107.js +32 -103
  78. package/dist/es/standards-sdk.es107.js.map +1 -1
  79. package/dist/es/standards-sdk.es108.js +79 -155
  80. package/dist/es/standards-sdk.es108.js.map +1 -1
  81. package/dist/es/standards-sdk.es109.js +28 -31
  82. package/dist/es/standards-sdk.es109.js.map +1 -1
  83. package/dist/es/standards-sdk.es11.js +1 -1
  84. package/dist/es/standards-sdk.es110.js +250 -10
  85. package/dist/es/standards-sdk.es110.js.map +1 -1
  86. package/dist/es/standards-sdk.es111.js +451 -115
  87. package/dist/es/standards-sdk.es111.js.map +1 -1
  88. package/dist/es/standards-sdk.es112.js +101 -25
  89. package/dist/es/standards-sdk.es112.js.map +1 -1
  90. package/dist/es/standards-sdk.es113.js +155 -17
  91. package/dist/es/standards-sdk.es113.js.map +1 -1
  92. package/dist/es/standards-sdk.es114.js +29 -155
  93. package/dist/es/standards-sdk.es114.js.map +1 -1
  94. package/dist/es/standards-sdk.es115.js +9 -200
  95. package/dist/es/standards-sdk.es115.js.map +1 -1
  96. package/dist/es/standards-sdk.es116.js +109 -757
  97. package/dist/es/standards-sdk.es116.js.map +1 -1
  98. package/dist/es/standards-sdk.es117.js +27 -11
  99. package/dist/es/standards-sdk.es117.js.map +1 -1
  100. package/dist/es/standards-sdk.es118.js +19 -564
  101. package/dist/es/standards-sdk.es118.js.map +1 -1
  102. package/dist/es/standards-sdk.es119.js +140 -582
  103. package/dist/es/standards-sdk.es119.js.map +1 -1
  104. package/dist/es/standards-sdk.es12.js +1 -1
  105. package/dist/es/standards-sdk.es120.js +202 -12
  106. package/dist/es/standards-sdk.es120.js.map +1 -1
  107. package/dist/es/standards-sdk.es121.js +790 -2
  108. package/dist/es/standards-sdk.es121.js.map +1 -1
  109. package/dist/es/standards-sdk.es122.js +10 -84
  110. package/dist/es/standards-sdk.es122.js.map +1 -1
  111. package/dist/es/standards-sdk.es123.js +567 -40
  112. package/dist/es/standards-sdk.es123.js.map +1 -1
  113. package/dist/es/standards-sdk.es124.js +602 -2
  114. package/dist/es/standards-sdk.es124.js.map +1 -1
  115. package/dist/es/standards-sdk.es125.js +12 -234
  116. package/dist/es/standards-sdk.es125.js.map +1 -1
  117. package/dist/es/standards-sdk.es126.js +2 -1140
  118. package/dist/es/standards-sdk.es126.js.map +1 -1
  119. package/dist/es/standards-sdk.es127.js +73 -292
  120. package/dist/es/standards-sdk.es127.js.map +1 -1
  121. package/dist/es/standards-sdk.es128.js +36 -418
  122. package/dist/es/standards-sdk.es128.js.map +1 -1
  123. package/dist/es/standards-sdk.es129.js +2 -355
  124. package/dist/es/standards-sdk.es129.js.map +1 -1
  125. package/dist/es/standards-sdk.es13.js +1 -1
  126. package/dist/es/standards-sdk.es130.js +197 -1090
  127. package/dist/es/standards-sdk.es130.js.map +1 -1
  128. package/dist/es/standards-sdk.es131.js +1107 -175
  129. package/dist/es/standards-sdk.es131.js.map +1 -1
  130. package/dist/es/standards-sdk.es132.js +218 -1479
  131. package/dist/es/standards-sdk.es132.js.map +1 -1
  132. package/dist/es/standards-sdk.es133.js +422 -1236
  133. package/dist/es/standards-sdk.es133.js.map +1 -1
  134. package/dist/es/standards-sdk.es134.js +351 -13
  135. package/dist/es/standards-sdk.es134.js.map +1 -1
  136. package/dist/es/standards-sdk.es135.js +1102 -73
  137. package/dist/es/standards-sdk.es135.js.map +1 -1
  138. package/dist/es/standards-sdk.es136.js +203 -76
  139. package/dist/es/standards-sdk.es136.js.map +1 -1
  140. package/dist/es/standards-sdk.es137.js +1459 -785
  141. package/dist/es/standards-sdk.es137.js.map +1 -1
  142. package/dist/es/standards-sdk.es138.js +1254 -59
  143. package/dist/es/standards-sdk.es138.js.map +1 -1
  144. package/dist/es/standards-sdk.es139.js +14 -156
  145. package/dist/es/standards-sdk.es139.js.map +1 -1
  146. package/dist/es/standards-sdk.es14.js +1 -1
  147. package/dist/es/standards-sdk.es140.js +87 -7
  148. package/dist/es/standards-sdk.es140.js.map +1 -1
  149. package/dist/es/standards-sdk.es141.js +74 -79
  150. package/dist/es/standards-sdk.es141.js.map +1 -1
  151. package/dist/es/standards-sdk.es142.js +889 -61
  152. package/dist/es/standards-sdk.es142.js.map +1 -1
  153. package/dist/es/standards-sdk.es143.js +60 -30
  154. package/dist/es/standards-sdk.es143.js.map +1 -1
  155. package/dist/es/standards-sdk.es144.js +159 -34
  156. package/dist/es/standards-sdk.es144.js.map +1 -1
  157. package/dist/es/standards-sdk.es145.js +7 -28
  158. package/dist/es/standards-sdk.es145.js.map +1 -1
  159. package/dist/es/standards-sdk.es146.js +70 -122
  160. package/dist/es/standards-sdk.es146.js.map +1 -1
  161. package/dist/es/standards-sdk.es147.js +58 -35
  162. package/dist/es/standards-sdk.es147.js.map +1 -1
  163. package/dist/es/standards-sdk.es148.js +30 -12320
  164. package/dist/es/standards-sdk.es148.js.map +1 -1
  165. package/dist/es/standards-sdk.es149.js +34 -56
  166. package/dist/es/standards-sdk.es149.js.map +1 -1
  167. package/dist/es/standards-sdk.es15.js +1 -1
  168. package/dist/es/standards-sdk.es150.js +41 -84
  169. package/dist/es/standards-sdk.es150.js.map +1 -1
  170. package/dist/es/standards-sdk.es151.js +134 -13
  171. package/dist/es/standards-sdk.es151.js.map +1 -1
  172. package/dist/es/standards-sdk.es152.js +36 -236
  173. package/dist/es/standards-sdk.es152.js.map +1 -1
  174. package/dist/es/standards-sdk.es153.js +12444 -134
  175. package/dist/es/standards-sdk.es153.js.map +1 -1
  176. package/dist/es/standards-sdk.es154.js +139 -289
  177. package/dist/es/standards-sdk.es154.js.map +1 -1
  178. package/dist/es/standards-sdk.es155.js +274 -298
  179. package/dist/es/standards-sdk.es155.js.map +1 -1
  180. package/dist/es/standards-sdk.es156.js +262 -369
  181. package/dist/es/standards-sdk.es156.js.map +1 -1
  182. package/dist/es/standards-sdk.es157.js +316 -194
  183. package/dist/es/standards-sdk.es157.js.map +1 -1
  184. package/dist/es/standards-sdk.es158.js +319 -64
  185. package/dist/es/standards-sdk.es158.js.map +1 -1
  186. package/dist/es/standards-sdk.es159.js +61 -157
  187. package/dist/es/standards-sdk.es159.js.map +1 -1
  188. package/dist/es/standards-sdk.es16.js +5 -5
  189. package/dist/es/standards-sdk.es160.js +14 -219
  190. package/dist/es/standards-sdk.es160.js.map +1 -1
  191. package/dist/es/standards-sdk.es161.js +226 -223
  192. package/dist/es/standards-sdk.es161.js.map +1 -1
  193. package/dist/es/standards-sdk.es162.js +49 -112
  194. package/dist/es/standards-sdk.es162.js.map +1 -1
  195. package/dist/es/standards-sdk.es163.js +72 -114
  196. package/dist/es/standards-sdk.es163.js.map +1 -1
  197. package/dist/es/standards-sdk.es164.js +67 -147
  198. package/dist/es/standards-sdk.es164.js.map +1 -1
  199. package/dist/es/standards-sdk.es165.js +61 -173
  200. package/dist/es/standards-sdk.es165.js.map +1 -1
  201. package/dist/es/standards-sdk.es166.js +153 -120
  202. package/dist/es/standards-sdk.es166.js.map +1 -1
  203. package/dist/es/standards-sdk.es167.js +178 -287
  204. package/dist/es/standards-sdk.es167.js.map +1 -1
  205. package/dist/es/standards-sdk.es168.js +218 -238
  206. package/dist/es/standards-sdk.es168.js.map +1 -1
  207. package/dist/es/standards-sdk.es169.js +75 -72
  208. package/dist/es/standards-sdk.es169.js.map +1 -1
  209. package/dist/es/standards-sdk.es170.js +129 -0
  210. package/dist/es/standards-sdk.es170.js.map +1 -0
  211. package/dist/es/standards-sdk.es171.js +164 -0
  212. package/dist/es/standards-sdk.es171.js.map +1 -0
  213. package/dist/es/standards-sdk.es172.js +188 -0
  214. package/dist/es/standards-sdk.es172.js.map +1 -0
  215. package/dist/es/standards-sdk.es173.js +142 -0
  216. package/dist/es/standards-sdk.es173.js.map +1 -0
  217. package/dist/es/standards-sdk.es174.js +334 -0
  218. package/dist/es/standards-sdk.es174.js.map +1 -0
  219. package/dist/es/standards-sdk.es175.js +262 -0
  220. package/dist/es/standards-sdk.es175.js.map +1 -0
  221. package/dist/es/standards-sdk.es176.js +119 -0
  222. package/dist/es/standards-sdk.es176.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 +194 -13
  251. package/dist/es/standards-sdk.es58.js.map +1 -1
  252. package/dist/es/standards-sdk.es59.js +1 -1
  253. package/dist/es/standards-sdk.es6.js +2 -2
  254. package/dist/es/standards-sdk.es60.js +100 -192
  255. package/dist/es/standards-sdk.es60.js.map +1 -1
  256. package/dist/es/standards-sdk.es61.js +172 -24
  257. package/dist/es/standards-sdk.es61.js.map +1 -1
  258. package/dist/es/standards-sdk.es62.js +204 -77
  259. package/dist/es/standards-sdk.es62.js.map +1 -1
  260. package/dist/es/standards-sdk.es63.js +130 -3
  261. package/dist/es/standards-sdk.es63.js.map +1 -1
  262. package/dist/es/standards-sdk.es64.js +41 -95
  263. package/dist/es/standards-sdk.es64.js.map +1 -1
  264. package/dist/es/standards-sdk.es65.js +245 -88
  265. package/dist/es/standards-sdk.es65.js.map +1 -1
  266. package/dist/es/standards-sdk.es66.js +32 -17
  267. package/dist/es/standards-sdk.es66.js.map +1 -1
  268. package/dist/es/standards-sdk.es67.js +96 -77
  269. package/dist/es/standards-sdk.es67.js.map +1 -1
  270. package/dist/es/standards-sdk.es68.js +4 -458
  271. package/dist/es/standards-sdk.es68.js.map +1 -1
  272. package/dist/es/standards-sdk.es69.js +72 -295
  273. package/dist/es/standards-sdk.es69.js.map +1 -1
  274. package/dist/es/standards-sdk.es7.js +1 -1
  275. package/dist/es/standards-sdk.es70.js +86 -194
  276. package/dist/es/standards-sdk.es70.js.map +1 -1
  277. package/dist/es/standards-sdk.es71.js +16 -69
  278. package/dist/es/standards-sdk.es71.js.map +1 -1
  279. package/dist/es/standards-sdk.es72.js +69 -63
  280. package/dist/es/standards-sdk.es72.js.map +1 -1
  281. package/dist/es/standards-sdk.es73.js +458 -143
  282. package/dist/es/standards-sdk.es73.js.map +1 -1
  283. package/dist/es/standards-sdk.es74.js +298 -43
  284. package/dist/es/standards-sdk.es74.js.map +1 -1
  285. package/dist/es/standards-sdk.es75.js +174 -370
  286. package/dist/es/standards-sdk.es75.js.map +1 -1
  287. package/dist/es/standards-sdk.es76.js +71 -495
  288. package/dist/es/standards-sdk.es76.js.map +1 -1
  289. package/dist/es/standards-sdk.es77.js +71 -365
  290. package/dist/es/standards-sdk.es77.js.map +1 -1
  291. package/dist/es/standards-sdk.es78.js +137 -83
  292. package/dist/es/standards-sdk.es78.js.map +1 -1
  293. package/dist/es/standards-sdk.es79.js +69 -125
  294. package/dist/es/standards-sdk.es79.js.map +1 -1
  295. package/dist/es/standards-sdk.es80.js +402 -6
  296. package/dist/es/standards-sdk.es80.js.map +1 -1
  297. package/dist/es/standards-sdk.es81.js +492 -43
  298. package/dist/es/standards-sdk.es81.js.map +1 -1
  299. package/dist/es/standards-sdk.es82.js +350 -86
  300. package/dist/es/standards-sdk.es82.js.map +1 -1
  301. package/dist/es/standards-sdk.es83.js +88 -347
  302. package/dist/es/standards-sdk.es83.js.map +1 -1
  303. package/dist/es/standards-sdk.es84.js +125 -281
  304. package/dist/es/standards-sdk.es84.js.map +1 -1
  305. package/dist/es/standards-sdk.es85.js +6 -59
  306. package/dist/es/standards-sdk.es85.js.map +1 -1
  307. package/dist/es/standards-sdk.es86.js +43 -45
  308. package/dist/es/standards-sdk.es86.js.map +1 -1
  309. package/dist/es/standards-sdk.es87.js +86 -135
  310. package/dist/es/standards-sdk.es87.js.map +1 -1
  311. package/dist/es/standards-sdk.es88.js +333 -52
  312. package/dist/es/standards-sdk.es88.js.map +1 -1
  313. package/dist/es/standards-sdk.es89.js +277 -26
  314. package/dist/es/standards-sdk.es89.js.map +1 -1
  315. package/dist/es/standards-sdk.es9.js +2 -2
  316. package/dist/es/standards-sdk.es90.js +59 -23
  317. package/dist/es/standards-sdk.es90.js.map +1 -1
  318. package/dist/es/standards-sdk.es91.js +26 -217
  319. package/dist/es/standards-sdk.es91.js.map +1 -1
  320. package/dist/es/standards-sdk.es92.js +104 -236
  321. package/dist/es/standards-sdk.es92.js.map +1 -1
  322. package/dist/es/standards-sdk.es93.js +51 -141
  323. package/dist/es/standards-sdk.es93.js.map +1 -1
  324. package/dist/es/standards-sdk.es94.js +22 -137
  325. package/dist/es/standards-sdk.es94.js.map +1 -1
  326. package/dist/es/standards-sdk.es95.js +20 -44
  327. package/dist/es/standards-sdk.es95.js.map +1 -1
  328. package/dist/es/standards-sdk.es96.js +227 -252
  329. package/dist/es/standards-sdk.es96.js.map +1 -1
  330. package/dist/es/standards-sdk.es97.js +248 -68
  331. package/dist/es/standards-sdk.es97.js.map +1 -1
  332. package/dist/es/standards-sdk.es98.js +108 -52
  333. package/dist/es/standards-sdk.es98.js.map +1 -1
  334. package/dist/es/standards-sdk.es99.js +144 -29
  335. package/dist/es/standards-sdk.es99.js.map +1 -1
  336. package/package.json +14 -4
@@ -1,37 +1,185 @@
1
- class IssuerRegistry {
2
- constructor() {
3
- this.issuers = [];
1
+ import { nodeDnsTxtLookup } from "./standards-sdk.es64.js";
2
+ import { isFqdn, normalizeDomain, parseSemicolonFields } from "./standards-sdk.es164.js";
3
+ const AID_DNS_WEB_PROFILE_ID = "hcs-14.profile.aid-dns-web";
4
+ function buildErrorProfile(uaid, code, message, details) {
5
+ const error = {
6
+ code,
7
+ message,
8
+ details
9
+ };
10
+ return {
11
+ id: uaid,
12
+ error,
13
+ metadata: {
14
+ profile: AID_DNS_WEB_PROFILE_ID,
15
+ resolved: false
16
+ }
17
+ };
18
+ }
19
+ function parseRecord(rawRecord, supportedSchemes) {
20
+ const fields = parseSemicolonFields(rawRecord);
21
+ const version = fields["v"];
22
+ const protocol = fields["p"] ?? fields["proto"];
23
+ const endpoint = fields["u"];
24
+ if (!version || !protocol || !endpoint) {
25
+ return { code: "ERR_INVALID_AID_RECORD" };
26
+ }
27
+ if (!version.toLowerCase().startsWith("aid")) {
28
+ return { code: "ERR_INVALID_AID_RECORD" };
29
+ }
30
+ let parsedUrl;
31
+ try {
32
+ parsedUrl = new URL(endpoint);
33
+ } catch {
34
+ return { code: "ERR_ENDPOINT_INVALID" };
4
35
  }
5
- register(issuer) {
6
- this.issuers.push(issuer);
36
+ const scheme = parsedUrl.protocol.replace(/:$/, "").toLowerCase();
37
+ if (!supportedSchemes.has(scheme)) {
38
+ return { code: "ERR_ENDPOINT_INVALID" };
7
39
  }
8
- list() {
9
- return [...this.issuers];
40
+ return {
41
+ record: {
42
+ version,
43
+ protocol,
44
+ endpoint: parsedUrl.toString(),
45
+ publicKey: fields["k"],
46
+ keyId: fields["i"]
47
+ }
48
+ };
49
+ }
50
+ function deterministicRecordKey(record) {
51
+ return `${record.protocol}|${record.endpoint}|${record.publicKey ?? ""}|${record.keyId ?? ""}`;
52
+ }
53
+ function verificationMethodForLevel(verificationLevel) {
54
+ if (verificationLevel === "cryptographic") {
55
+ return "aid-pka";
10
56
  }
11
- /** Return issuers that support a given DID method. */
12
- filterByDidMethod(method) {
13
- return this.issuers.filter((i) => i.meta.didMethods.includes(method));
57
+ if (verificationLevel === "metadata") {
58
+ return "metadata-match";
14
59
  }
15
- /** Return issuers that advertise a specific CAIP-2 network. */
16
- filterByCaip2(network) {
17
- return this.issuers.filter((i) => i.meta.caip2Networks?.includes(network));
60
+ return void 0;
61
+ }
62
+ class AidDnsWebProfileResolver {
63
+ constructor(options = {}) {
64
+ this.profile = AID_DNS_WEB_PROFILE_ID;
65
+ this.meta = {
66
+ id: "hcs-14/aid-dns-web",
67
+ didMethods: ["*"],
68
+ displayName: "HCS-14 AID DNS/Web Profile",
69
+ description: "Resolves uaid:aid identifiers via _agent.<nativeId> DNS TXT records and protocol endpoint hints."
70
+ };
71
+ this.dnsLookup = options.dnsLookup ?? nodeDnsTxtLookup;
72
+ this.supportedSchemes = new Set(
73
+ (options.supportedUriSchemes ?? ["https", "http", "wss", "ws"]).map(
74
+ (scheme) => scheme.toLowerCase()
75
+ )
76
+ );
77
+ this.metadataVerifier = options.metadataVerifier;
78
+ this.cryptographicVerifier = options.cryptographicVerifier;
18
79
  }
19
- /** Generic predicate-based filter. */
20
- filter(predicate) {
21
- return this.issuers.filter(predicate);
80
+ supports(_uaid, parsed) {
81
+ if (parsed.method !== "aid") {
82
+ return false;
83
+ }
84
+ const nativeId = parsed.params["nativeId"];
85
+ return !!nativeId && isFqdn(nativeId);
22
86
  }
23
- async issue(request) {
24
- for (const issuer of this.issuers) {
25
- if (issuer.supports(request.method)) {
26
- return issuer.issue(request);
87
+ async resolveProfile(uaid, context) {
88
+ const parsed = context.parsedUaid;
89
+ if (parsed.method !== "aid") {
90
+ return null;
91
+ }
92
+ const nativeId = parsed.params["nativeId"];
93
+ if (!nativeId || !isFqdn(nativeId)) {
94
+ return null;
95
+ }
96
+ const normalizedNativeId = normalizeDomain(nativeId);
97
+ const dnsName = `_agent.${normalizedNativeId}`;
98
+ const txtRecords = await this.dnsLookup(dnsName);
99
+ if (txtRecords.length === 0) {
100
+ return null;
101
+ }
102
+ const parsedRecords = txtRecords.map(
103
+ (record) => parseRecord(record, this.supportedSchemes)
104
+ );
105
+ const validRecords = parsedRecords.filter(
106
+ (result) => "record" in result
107
+ ).map((result) => result.record);
108
+ if (validRecords.length === 0) {
109
+ const endpointInvalid = parsedRecords.some(
110
+ (result) => !("record" in result) && result.code === "ERR_ENDPOINT_INVALID"
111
+ );
112
+ return buildErrorProfile(
113
+ uaid,
114
+ endpointInvalid ? "ERR_ENDPOINT_INVALID" : "ERR_INVALID_AID_RECORD",
115
+ endpointInvalid ? "AID DNS record endpoint URI is invalid or unsupported." : "AID DNS TXT payload is malformed or unsupported.",
116
+ { dnsName }
117
+ );
118
+ }
119
+ const selectedRecord = [...validRecords].sort(
120
+ (a, b) => deterministicRecordKey(a).localeCompare(deterministicRecordKey(b))
121
+ )[0];
122
+ const verificationInput = {
123
+ uaid,
124
+ protocol: selectedRecord.protocol,
125
+ endpoint: selectedRecord.endpoint,
126
+ record: selectedRecord
127
+ };
128
+ let verificationLevel = "none";
129
+ if (this.metadataVerifier) {
130
+ const metadataVerified = await this.metadataVerifier(verificationInput);
131
+ if (!metadataVerified) {
132
+ return buildErrorProfile(
133
+ uaid,
134
+ "ERR_VERIFICATION_FAILED",
135
+ "AID metadata verification failed.",
136
+ { dnsName }
137
+ );
138
+ }
139
+ verificationLevel = "metadata";
140
+ }
141
+ if (selectedRecord.publicKey && this.cryptographicVerifier) {
142
+ const cryptographicVerified = await this.cryptographicVerifier(verificationInput);
143
+ if (!cryptographicVerified) {
144
+ return buildErrorProfile(
145
+ uaid,
146
+ "ERR_VERIFICATION_FAILED",
147
+ "AID cryptographic verification failed.",
148
+ { dnsName }
149
+ );
27
150
  }
151
+ verificationLevel = "cryptographic";
28
152
  }
29
- throw new Error(`No issuer registered for method: ${request.method}`);
153
+ const did = context.did ?? void 0;
154
+ const alsoKnownAs = did ? [did] : void 0;
155
+ return {
156
+ id: uaid,
157
+ did,
158
+ alsoKnownAs,
159
+ service: [
160
+ {
161
+ id: `${uaid}#aid-endpoint`,
162
+ type: "AIDService",
163
+ serviceEndpoint: selectedRecord.endpoint
164
+ }
165
+ ],
166
+ metadata: {
167
+ profile: AID_DNS_WEB_PROFILE_ID,
168
+ resolved: true,
169
+ endpoint: selectedRecord.endpoint,
170
+ protocol: selectedRecord.protocol,
171
+ verification: {
172
+ level: verificationLevel,
173
+ method: verificationMethodForLevel(verificationLevel)
174
+ },
175
+ verificationLevel,
176
+ precedenceSource: "dns"
177
+ }
178
+ };
30
179
  }
31
180
  }
32
- const defaultIssuerRegistry = new IssuerRegistry();
33
181
  export {
34
- IssuerRegistry,
35
- defaultIssuerRegistry
182
+ AID_DNS_WEB_PROFILE_ID,
183
+ AidDnsWebProfileResolver
36
184
  };
37
185
  //# sourceMappingURL=standards-sdk.es61.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"standards-sdk.es61.js","sources":["../../src/hcs-14/issuers/registry.ts"],"sourcesContent":["/**\n * Issuer registry for HCS-14 DID adapters.\n */\n\nimport { DidIssueRequest, DidIssuer, IssuerRegistryApi } from './types';\n\nexport class IssuerRegistry implements IssuerRegistryApi {\n private issuers: DidIssuer[] = [];\n\n register(issuer: DidIssuer): void {\n this.issuers.push(issuer);\n }\n\n list(): DidIssuer[] {\n return [...this.issuers];\n }\n\n /** Return issuers that support a given DID method. */\n filterByDidMethod(method: string): DidIssuer[] {\n return this.issuers.filter(i => i.meta.didMethods.includes(method));\n }\n\n /** Return issuers that advertise a specific CAIP-2 network. */\n filterByCaip2(network: string): DidIssuer[] {\n return this.issuers.filter(i => i.meta.caip2Networks?.includes(network));\n }\n\n /** Generic predicate-based filter. */\n filter(predicate: (issuer: DidIssuer) => boolean): DidIssuer[] {\n return this.issuers.filter(predicate);\n }\n\n async issue(request: DidIssueRequest): Promise<string> {\n for (const issuer of this.issuers) {\n if (issuer.supports(request.method)) {\n return issuer.issue(request);\n }\n }\n throw new Error(`No issuer registered for method: ${request.method}`);\n }\n}\n\nexport const defaultIssuerRegistry = new IssuerRegistry();\n"],"names":[],"mappings":"AAMO,MAAM,eAA4C;AAAA,EAAlD,cAAA;AACL,SAAQ,UAAuB,CAAA;AAAA,EAAC;AAAA,EAEhC,SAAS,QAAyB;AAChC,SAAK,QAAQ,KAAK,MAAM;AAAA,EAC1B;AAAA,EAEA,OAAoB;AAClB,WAAO,CAAC,GAAG,KAAK,OAAO;AAAA,EACzB;AAAA;AAAA,EAGA,kBAAkB,QAA6B;AAC7C,WAAO,KAAK,QAAQ,OAAO,CAAA,MAAK,EAAE,KAAK,WAAW,SAAS,MAAM,CAAC;AAAA,EACpE;AAAA;AAAA,EAGA,cAAc,SAA8B;AAC1C,WAAO,KAAK,QAAQ,OAAO,CAAA,MAAK,EAAE,KAAK,eAAe,SAAS,OAAO,CAAC;AAAA,EACzE;AAAA;AAAA,EAGA,OAAO,WAAwD;AAC7D,WAAO,KAAK,QAAQ,OAAO,SAAS;AAAA,EACtC;AAAA,EAEA,MAAM,MAAM,SAA2C;AACrD,eAAW,UAAU,KAAK,SAAS;AACjC,UAAI,OAAO,SAAS,QAAQ,MAAM,GAAG;AACnC,eAAO,OAAO,MAAM,OAAO;AAAA,MAC7B;AAAA,IACF;AACA,UAAM,IAAI,MAAM,oCAAoC,QAAQ,MAAM,EAAE;AAAA,EACtE;AACF;AAEO,MAAM,wBAAwB,IAAI,eAAA;"}
1
+ {"version":3,"file":"standards-sdk.es61.js","sources":["../../src/hcs-14/resolvers/aid-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 { isFqdn, normalizeDomain, parseSemicolonFields } from './profile-utils';\n\nexport const AID_DNS_WEB_PROFILE_ID = 'hcs-14.profile.aid-dns-web';\n\ninterface AidDnsRecord {\n version: string;\n protocol: string;\n endpoint: string;\n publicKey?: string;\n keyId?: string;\n}\n\ninterface AidDnsRecordParseError {\n code: 'ERR_INVALID_AID_RECORD' | 'ERR_ENDPOINT_INVALID';\n}\n\ninterface AidDnsRecordParseSuccess {\n record: AidDnsRecord;\n}\n\ntype AidDnsRecordParseResult =\n | AidDnsRecordParseError\n | AidDnsRecordParseSuccess;\n\ninterface AidDnsVerificationInput {\n uaid: string;\n protocol: string;\n endpoint: string;\n record: AidDnsRecord;\n}\n\ntype AidDnsVerification = (input: AidDnsVerificationInput) => Promise<boolean>;\n\nexport interface AidDnsWebResolverOptions {\n dnsLookup?: DnsTxtLookup;\n supportedUriSchemes?: string[];\n metadataVerifier?: AidDnsVerification;\n cryptographicVerifier?: AidDnsVerification;\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: AID_DNS_WEB_PROFILE_ID,\n resolved: false,\n },\n };\n}\n\nfunction parseRecord(\n rawRecord: string,\n supportedSchemes: Set<string>,\n): AidDnsRecordParseResult {\n const fields = parseSemicolonFields(rawRecord);\n const version = fields['v'];\n const protocol = fields['p'] ?? fields['proto'];\n const endpoint = fields['u'];\n\n if (!version || !protocol || !endpoint) {\n return { code: 'ERR_INVALID_AID_RECORD' };\n }\n if (!version.toLowerCase().startsWith('aid')) {\n return { code: 'ERR_INVALID_AID_RECORD' };\n }\n\n let parsedUrl: URL;\n try {\n parsedUrl = new URL(endpoint);\n } catch {\n return { code: 'ERR_ENDPOINT_INVALID' };\n }\n\n const scheme = parsedUrl.protocol.replace(/:$/, '').toLowerCase();\n if (!supportedSchemes.has(scheme)) {\n return { code: 'ERR_ENDPOINT_INVALID' };\n }\n\n return {\n record: {\n version,\n protocol,\n endpoint: parsedUrl.toString(),\n publicKey: fields['k'],\n keyId: fields['i'],\n },\n };\n}\n\nfunction deterministicRecordKey(record: AidDnsRecord): string {\n return `${record.protocol}|${record.endpoint}|${record.publicKey ?? ''}|${record.keyId ?? ''}`;\n}\n\nfunction verificationMethodForLevel(\n verificationLevel: 'none' | 'metadata' | 'cryptographic',\n): 'aid-pka' | 'metadata-match' | undefined {\n if (verificationLevel === 'cryptographic') {\n return 'aid-pka';\n }\n if (verificationLevel === 'metadata') {\n return 'metadata-match';\n }\n return undefined;\n}\n\nexport class AidDnsWebProfileResolver implements UaidProfileResolver {\n readonly profile = AID_DNS_WEB_PROFILE_ID;\n\n readonly meta: AdapterMeta = {\n id: 'hcs-14/aid-dns-web',\n didMethods: ['*'],\n displayName: 'HCS-14 AID DNS/Web Profile',\n description:\n 'Resolves uaid:aid identifiers via _agent.<nativeId> DNS TXT records and protocol endpoint hints.',\n };\n\n private readonly dnsLookup: DnsTxtLookup;\n private readonly supportedSchemes: Set<string>;\n private readonly metadataVerifier?: AidDnsVerification;\n private readonly cryptographicVerifier?: AidDnsVerification;\n\n constructor(options: AidDnsWebResolverOptions = {}) {\n this.dnsLookup = options.dnsLookup ?? nodeDnsTxtLookup;\n this.supportedSchemes = new Set(\n (options.supportedUriSchemes ?? ['https', 'http', 'wss', 'ws']).map(\n scheme => scheme.toLowerCase(),\n ),\n );\n this.metadataVerifier = options.metadataVerifier;\n this.cryptographicVerifier = options.cryptographicVerifier;\n }\n\n supports(\n _uaid: string,\n parsed: UaidProfileResolverContext['parsedUaid'],\n ): boolean {\n if (parsed.method !== 'aid') {\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 if (parsed.method !== 'aid') {\n return null;\n }\n\n const nativeId = parsed.params['nativeId'];\n if (!nativeId || !isFqdn(nativeId)) {\n return null;\n }\n\n const normalizedNativeId = normalizeDomain(nativeId);\n const dnsName = `_agent.${normalizedNativeId}`;\n const txtRecords = await this.dnsLookup(dnsName);\n if (txtRecords.length === 0) {\n return null;\n }\n\n const parsedRecords = txtRecords.map(record =>\n parseRecord(record, this.supportedSchemes),\n );\n const validRecords = parsedRecords\n .filter(\n (result): result is AidDnsRecordParseSuccess => 'record' in result,\n )\n .map(result => result.record);\n\n if (validRecords.length === 0) {\n const endpointInvalid = parsedRecords.some(\n result =>\n !('record' in result) && result.code === 'ERR_ENDPOINT_INVALID',\n );\n return buildErrorProfile(\n uaid,\n endpointInvalid ? 'ERR_ENDPOINT_INVALID' : 'ERR_INVALID_AID_RECORD',\n endpointInvalid\n ? 'AID DNS record endpoint URI is invalid or unsupported.'\n : 'AID DNS TXT payload is malformed or unsupported.',\n { dnsName },\n );\n }\n\n const selectedRecord = [...validRecords].sort((a, b) =>\n deterministicRecordKey(a).localeCompare(deterministicRecordKey(b)),\n )[0];\n\n const verificationInput: AidDnsVerificationInput = {\n uaid,\n protocol: selectedRecord.protocol,\n endpoint: selectedRecord.endpoint,\n record: selectedRecord,\n };\n\n let verificationLevel: 'none' | 'metadata' | 'cryptographic' = 'none';\n\n if (this.metadataVerifier) {\n const metadataVerified = await this.metadataVerifier(verificationInput);\n if (!metadataVerified) {\n return buildErrorProfile(\n uaid,\n 'ERR_VERIFICATION_FAILED',\n 'AID metadata verification failed.',\n { dnsName },\n );\n }\n verificationLevel = 'metadata';\n }\n\n if (selectedRecord.publicKey && this.cryptographicVerifier) {\n const cryptographicVerified =\n await this.cryptographicVerifier(verificationInput);\n if (!cryptographicVerified) {\n return buildErrorProfile(\n uaid,\n 'ERR_VERIFICATION_FAILED',\n 'AID cryptographic verification failed.',\n { dnsName },\n );\n }\n verificationLevel = 'cryptographic';\n }\n\n const did = context.did ?? undefined;\n const alsoKnownAs = did ? [did] : undefined;\n\n return {\n id: uaid,\n did,\n alsoKnownAs,\n service: [\n {\n id: `${uaid}#aid-endpoint`,\n type: 'AIDService',\n serviceEndpoint: selectedRecord.endpoint,\n },\n ],\n metadata: {\n profile: AID_DNS_WEB_PROFILE_ID,\n resolved: true,\n endpoint: selectedRecord.endpoint,\n protocol: selectedRecord.protocol,\n verification: {\n level: verificationLevel,\n method: verificationMethodForLevel(verificationLevel),\n },\n verificationLevel,\n precedenceSource: 'dns',\n },\n };\n }\n}\n"],"names":[],"mappings":"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"}
@@ -1,99 +1,226 @@
1
- import { optionalImport } from "./standards-sdk.es150.js";
2
- const hieroRegistrarModuleId = ["@hiero-did-sdk", "registrar"].join("/");
3
- let registrarPromise = null;
4
- function toAccountIdString(value) {
5
- if (typeof value === "string" && value.trim()) {
6
- return value;
1
+ import { nodeDnsTxtLookup } from "./standards-sdk.es64.js";
2
+ import { uaidTargetFromParsed, isFqdn, normalizeDomain, buildCanonicalUaid, parseSemicolonFields } from "./standards-sdk.es164.js";
3
+ import { AID_DNS_WEB_PROFILE_ID } from "./standards-sdk.es61.js";
4
+ import { UAID_DID_RESOLUTION_PROFILE_ID } from "./standards-sdk.es63.js";
5
+ const UAID_DNS_WEB_PROFILE_ID = "hcs-14.profile.uaid-dns-web";
6
+ function buildErrorProfile(uaid, code, message, details) {
7
+ const error = {
8
+ code,
9
+ message,
10
+ details
11
+ };
12
+ return {
13
+ id: uaid,
14
+ error,
15
+ metadata: {
16
+ profile: UAID_DNS_WEB_PROFILE_ID,
17
+ resolved: false
18
+ }
19
+ };
20
+ }
21
+ function canonicalizeNativeDomainParams(params) {
22
+ const next = { ...params };
23
+ const nativeId = next["nativeId"];
24
+ if (nativeId && isFqdn(nativeId)) {
25
+ next["nativeId"] = normalizeDomain(nativeId);
7
26
  }
8
- if (value && typeof value.toString === "function") {
9
- const result = value.toString();
10
- return typeof result === "string" && result.trim() ? result : null;
27
+ const domain = next["domain"];
28
+ if (domain && isFqdn(domain)) {
29
+ next["domain"] = normalizeDomain(domain);
11
30
  }
12
- return null;
31
+ return next;
13
32
  }
14
- function createHieroPublisher(client) {
33
+ function validateRecordFields(fields, queriedNativeId) {
34
+ const target = fields["target"];
35
+ const id = fields["id"];
36
+ const uid = fields["uid"];
37
+ const proto = fields["proto"];
38
+ const nativeId = fields["nativeId"];
39
+ if (target !== "aid" && target !== "did") {
40
+ return null;
41
+ }
42
+ if (!id || !uid || !proto || !nativeId) {
43
+ return null;
44
+ }
45
+ if (normalizeDomain(nativeId) !== queriedNativeId) {
46
+ return null;
47
+ }
48
+ if ("registry" in fields && !fields["registry"]) {
49
+ return null;
50
+ }
51
+ const did = fields["did"];
52
+ if (did && (target !== "did" || !did.startsWith("did:"))) {
53
+ return null;
54
+ }
55
+ const params = {
56
+ uid,
57
+ proto,
58
+ nativeId
59
+ };
60
+ if (fields["registry"]) {
61
+ params["registry"] = fields["registry"];
62
+ }
63
+ if (fields["domain"]) {
64
+ params["domain"] = fields["domain"];
65
+ }
66
+ if (fields["src"]) {
67
+ params["src"] = fields["src"];
68
+ }
15
69
  return {
16
- network: () => {
17
- const ledgerId = client.ledgerId;
18
- if (!ledgerId) {
19
- throw new Error("Hedera SDK Client must be configured with a network");
20
- }
21
- if (ledgerId.isMainnet()) return "mainnet";
22
- if (ledgerId.isTestnet()) return "testnet";
23
- if (ledgerId.isPreviewnet()) return "previewnet";
24
- if (ledgerId.isLocalNode()) return "local-node";
25
- throw new Error(`Unknown network, ledger ID: ${ledgerId.toString()}`);
26
- },
27
- publicKey: () => {
28
- if (!client.operatorPublicKey) {
29
- throw new Error(
30
- "Hedera SDK Client must be configured with an operator account"
31
- );
32
- }
33
- return client.operatorPublicKey;
34
- },
35
- publish: async (transaction) => {
36
- const current = typeof transaction.getAutoRenewAccountId === "function" ? transaction.getAutoRenewAccountId() : null;
37
- const autoRenewAccountId = toAccountIdString(client.operatorAccountId);
38
- if (!current && autoRenewAccountId && typeof transaction.setAutoRenewAccountId === "function") {
39
- transaction.setAutoRenewAccountId(autoRenewAccountId);
40
- }
41
- const response = await transaction.freezeWith(client).execute(client);
42
- return response.getReceipt(client);
43
- }
70
+ target,
71
+ id,
72
+ uid,
73
+ proto,
74
+ nativeId,
75
+ registry: fields["registry"],
76
+ domain: fields["domain"],
77
+ src: fields["src"],
78
+ did,
79
+ memo: fields["m"],
80
+ reconstructedUaid: buildCanonicalUaid(
81
+ target,
82
+ id,
83
+ canonicalizeNativeDomainParams(params)
84
+ )
44
85
  };
45
86
  }
46
- async function loadCreateDID() {
47
- if (!registrarPromise) {
48
- registrarPromise = optionalImport(
49
- hieroRegistrarModuleId,
50
- { preferImport: true }
51
- ).then((mod) => mod?.createDID ?? null);
87
+ function selectFollowupProfiles(target) {
88
+ if (target === "aid") {
89
+ return [AID_DNS_WEB_PROFILE_ID];
52
90
  }
53
- return registrarPromise;
91
+ return [UAID_DID_RESOLUTION_PROFILE_ID];
54
92
  }
55
- class HederaHieroIssuer {
56
- constructor() {
93
+ class UaidDnsWebProfileResolver {
94
+ constructor(options = {}) {
95
+ this.profile = UAID_DNS_WEB_PROFILE_ID;
57
96
  this.meta = {
58
- id: "hedera/hiero",
59
- didMethods: ["hedera"],
60
- caip2Networks: [
61
- "hedera:mainnet",
62
- "hedera:testnet",
63
- "hedera:previewnet",
64
- "hedera:devnet"
65
- ],
66
- caip10Namespaces: ["hedera"],
67
- displayName: "Hedera (Hiero Registrar)",
68
- description: "Issues did:hedera identifiers using the Hiero DID registrar.",
69
- homepage: "https://github.com/hiero-ledger/hiero-did-sdk-js"
97
+ id: "hcs-14/uaid-dns-web",
98
+ didMethods: ["*"],
99
+ displayName: "HCS-14 UAID DNS TXT Profile",
100
+ description: "Binds UAIDs to DNS TXT records at _uaid.<nativeId> and can continue to follow-up profile resolution."
70
101
  };
102
+ this.dnsLookup = options.dnsLookup ?? nodeDnsTxtLookup;
103
+ this.dnssecValidation = options.dnssecValidation;
104
+ this.requireFullResolution = options.requireFullResolution ?? false;
105
+ this.enableFollowupResolution = options.enableFollowupResolution ?? true;
71
106
  }
72
- supports(method) {
73
- return method === "hedera";
107
+ supports(_uaid, parsed) {
108
+ const target = uaidTargetFromParsed(parsed);
109
+ if (target !== "aid" && target !== "did") {
110
+ return false;
111
+ }
112
+ const nativeId = parsed.params["nativeId"];
113
+ return !!nativeId && isFqdn(nativeId);
74
114
  }
75
- async issue(request) {
76
- if (request.method !== "hedera") {
77
- throw new Error('HederaHieroIssuer only handles method "hedera"');
115
+ async resolveProfile(uaid, context) {
116
+ const parsed = context.parsedUaid;
117
+ const nativeId = parsed.params["nativeId"];
118
+ if (!nativeId || !isFqdn(nativeId)) {
119
+ return null;
78
120
  }
79
- if (!("client" in request)) {
80
- throw new Error("Hedera client is required to issue did:hedera");
121
+ const normalizedNativeId = normalizeDomain(nativeId);
122
+ const dnsName = `_uaid.${normalizedNativeId}`;
123
+ const inputCanonical = buildCanonicalUaid(
124
+ uaidTargetFromParsed(parsed),
125
+ parsed.id,
126
+ canonicalizeNativeDomainParams(parsed.params)
127
+ );
128
+ const txtRecords = await this.dnsLookup(dnsName);
129
+ if (txtRecords.length === 0) {
130
+ return null;
81
131
  }
82
- const createDID = await loadCreateDID();
83
- if (!createDID) {
84
- throw new Error(
85
- "Hiero registrar unavailable. Ensure @hiero-did-sdk/registrar is installed."
132
+ const parsedRecords = txtRecords.map((record) => parseSemicolonFields(record)).map((fields) => validateRecordFields(fields, normalizedNativeId));
133
+ const validRecords = parsedRecords.filter(
134
+ (record) => record !== null
135
+ );
136
+ if (validRecords.length === 0) {
137
+ return buildErrorProfile(
138
+ uaid,
139
+ "ERR_INVALID_UAID_DNS_RECORD",
140
+ "DNS TXT payload at _uaid record is invalid.",
141
+ { dnsName }
86
142
  );
87
143
  }
88
- const client = request.client;
89
- const did = await createDID(
90
- {},
91
- { publisher: createHieroPublisher(client) }
144
+ const matchingRecords = validRecords.filter(
145
+ (record) => record.target === uaidTargetFromParsed(parsed) && record.id === parsed.id && record.reconstructedUaid === inputCanonical
92
146
  );
93
- return did.did;
147
+ if (matchingRecords.length === 0) {
148
+ return buildErrorProfile(
149
+ uaid,
150
+ "ERR_UAID_MISMATCH",
151
+ "DNS TXT payload does not match the input UAID after canonical reconstruction.",
152
+ {
153
+ dnsName,
154
+ inputCanonical
155
+ }
156
+ );
157
+ }
158
+ const selected = [...matchingRecords].sort(
159
+ (a, b) => a.reconstructedUaid.localeCompare(b.reconstructedUaid)
160
+ )[0];
161
+ const dnssecValidated = this.dnssecValidation ? await this.dnssecValidation(dnsName) : false;
162
+ const verificationLevel = dnssecValidated ? "dns-binding-dnssec" : "dns-binding";
163
+ if (this.enableFollowupResolution) {
164
+ const followupProfiles = selectFollowupProfiles(selected.target);
165
+ for (const followupProfileId of followupProfiles) {
166
+ const followup = await context.resolveUaidProfileById(
167
+ followupProfileId,
168
+ uaid
169
+ );
170
+ if (!followup) {
171
+ continue;
172
+ }
173
+ if (followup.error || followup.metadata?.resolved === false) {
174
+ return buildErrorProfile(
175
+ uaid,
176
+ "ERR_FOLLOWUP_RESOLUTION_FAILED",
177
+ "Follow-up profile resolution failed after successful DNS binding.",
178
+ {
179
+ followupProfileId,
180
+ dnsName
181
+ }
182
+ );
183
+ }
184
+ return {
185
+ ...followup,
186
+ metadata: {
187
+ ...followup.metadata,
188
+ profile: UAID_DNS_WEB_PROFILE_ID,
189
+ resolved: true,
190
+ verificationLevel,
191
+ reconstructedUaid: selected.reconstructedUaid,
192
+ selectedFollowupProfile: followupProfileId,
193
+ resolutionMode: "full-resolution"
194
+ }
195
+ };
196
+ }
197
+ }
198
+ if (this.requireFullResolution) {
199
+ return buildErrorProfile(
200
+ uaid,
201
+ "ERR_NO_FOLLOWUP_PROFILE",
202
+ "Resolver policy requires full resolution, but no supported follow-up profile was available.",
203
+ { dnsName }
204
+ );
205
+ }
206
+ const did = selected.did ?? context.did ?? void 0;
207
+ const alsoKnownAs = did ? [did] : void 0;
208
+ return {
209
+ id: uaid,
210
+ did,
211
+ alsoKnownAs,
212
+ metadata: {
213
+ profile: UAID_DNS_WEB_PROFILE_ID,
214
+ resolved: true,
215
+ reconstructedUaid: selected.reconstructedUaid,
216
+ verificationLevel,
217
+ resolutionMode: "dns-binding-only"
218
+ }
219
+ };
94
220
  }
95
221
  }
96
222
  export {
97
- HederaHieroIssuer
223
+ UAID_DNS_WEB_PROFILE_ID,
224
+ UaidDnsWebProfileResolver
98
225
  };
99
226
  //# sourceMappingURL=standards-sdk.es62.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"standards-sdk.es62.js","sources":["../../src/hcs-14/issuers/hiero.ts"],"sourcesContent":["import { DidIssueRequest, DidIssueRequestHedera, DidIssuer } from './types';\nimport type { AdapterMeta } from '../adapters/types';\nimport { optionalImport } from '../../utils/dynamic-import';\nimport type { PublicKey, TransactionReceipt } from '@hashgraph/sdk';\n\ntype CreateDID = typeof import('@hiero-did-sdk/registrar').createDID;\ntype HieroRegistrarModule = typeof import('@hiero-did-sdk/registrar');\n\nconst hieroRegistrarModuleId = ['@hiero-did-sdk', 'registrar'].join('/');\n\nlet registrarPromise: Promise<CreateDID | null> | null = null;\n\ntype PublisherClientLike = {\n ledgerId?: {\n isMainnet: () => boolean;\n isTestnet: () => boolean;\n isPreviewnet: () => boolean;\n isLocalNode: () => boolean;\n toString: () => string;\n };\n operatorPublicKey?: PublicKey;\n operatorAccountId?: { toString: () => string };\n};\n\ntype AutoRenewTransactionLike = {\n getAutoRenewAccountId?: () => unknown;\n setAutoRenewAccountId?: (value: string) => void;\n freezeWith: (client: PublisherClientLike) => {\n execute: (client: PublisherClientLike) => Promise<{\n getReceipt: (client: PublisherClientLike) => Promise<TransactionReceipt>;\n }>;\n };\n};\n\nfunction toAccountIdString(value: unknown): string | null {\n if (typeof value === 'string' && value.trim()) {\n return value;\n }\n\n if (\n value &&\n typeof (value as { toString?: () => string }).toString === 'function'\n ) {\n const result = (value as { toString: () => string }).toString();\n return typeof result === 'string' && result.trim() ? result : null;\n }\n\n return null;\n}\n\nfunction createHieroPublisher(client: PublisherClientLike) {\n return {\n network: () => {\n const ledgerId = client.ledgerId;\n if (!ledgerId) {\n throw new Error('Hedera SDK Client must be configured with a network');\n }\n if (ledgerId.isMainnet()) return 'mainnet';\n if (ledgerId.isTestnet()) return 'testnet';\n if (ledgerId.isPreviewnet()) return 'previewnet';\n if (ledgerId.isLocalNode()) return 'local-node';\n throw new Error(`Unknown network, ledger ID: ${ledgerId.toString()}`);\n },\n publicKey: () => {\n if (!client.operatorPublicKey) {\n throw new Error(\n 'Hedera SDK Client must be configured with an operator account',\n );\n }\n return client.operatorPublicKey;\n },\n publish: async (transaction: AutoRenewTransactionLike) => {\n const current =\n typeof transaction.getAutoRenewAccountId === 'function'\n ? transaction.getAutoRenewAccountId()\n : null;\n const autoRenewAccountId = toAccountIdString(client.operatorAccountId);\n\n if (\n !current &&\n autoRenewAccountId &&\n typeof transaction.setAutoRenewAccountId === 'function'\n ) {\n transaction.setAutoRenewAccountId(autoRenewAccountId);\n }\n\n const response = await transaction.freezeWith(client).execute(client);\n return response.getReceipt(client);\n },\n };\n}\n\nasync function loadCreateDID(): Promise<CreateDID | null> {\n if (!registrarPromise) {\n // Prefer ESM to keep @hashgraph/sdk classes consistent across caller + registrar.\n registrarPromise = optionalImport<HieroRegistrarModule>(\n hieroRegistrarModuleId,\n { preferImport: true },\n ).then(mod => mod?.createDID ?? null);\n }\n return registrarPromise;\n}\n\nexport class HederaHieroIssuer implements DidIssuer {\n readonly meta: AdapterMeta = {\n id: 'hedera/hiero',\n didMethods: ['hedera'],\n caip2Networks: [\n 'hedera:mainnet',\n 'hedera:testnet',\n 'hedera:previewnet',\n 'hedera:devnet',\n ],\n caip10Namespaces: ['hedera'],\n displayName: 'Hedera (Hiero Registrar)',\n description: 'Issues did:hedera identifiers using the Hiero DID registrar.',\n homepage: 'https://github.com/hiero-ledger/hiero-did-sdk-js',\n };\n\n supports(method: string): boolean {\n return method === 'hedera';\n }\n\n async issue(request: DidIssueRequest): Promise<string> {\n if (request.method !== 'hedera') {\n throw new Error('HederaHieroIssuer only handles method \"hedera\"');\n }\n if (!('client' in request)) {\n throw new Error('Hedera client is required to issue did:hedera');\n }\n const createDID = await loadCreateDID();\n if (!createDID) {\n throw new Error(\n 'Hiero registrar unavailable. Ensure @hiero-did-sdk/registrar is installed.',\n );\n }\n const client = (request as DidIssueRequestHedera).client;\n const did = await createDID(\n {},\n { publisher: createHieroPublisher(client) },\n );\n return did.did;\n }\n}\n"],"names":[],"mappings":";AAQA,MAAM,yBAAyB,CAAC,kBAAkB,WAAW,EAAE,KAAK,GAAG;AAEvE,IAAI,mBAAqD;AAwBzD,SAAS,kBAAkB,OAA+B;AACxD,MAAI,OAAO,UAAU,YAAY,MAAM,QAAQ;AAC7C,WAAO;AAAA,EACT;AAEA,MACE,SACA,OAAQ,MAAsC,aAAa,YAC3D;AACA,UAAM,SAAU,MAAqC,SAAA;AACrD,WAAO,OAAO,WAAW,YAAY,OAAO,KAAA,IAAS,SAAS;AAAA,EAChE;AAEA,SAAO;AACT;AAEA,SAAS,qBAAqB,QAA6B;AACzD,SAAO;AAAA,IACL,SAAS,MAAM;AACb,YAAM,WAAW,OAAO;AACxB,UAAI,CAAC,UAAU;AACb,cAAM,IAAI,MAAM,qDAAqD;AAAA,MACvE;AACA,UAAI,SAAS,UAAA,EAAa,QAAO;AACjC,UAAI,SAAS,UAAA,EAAa,QAAO;AACjC,UAAI,SAAS,aAAA,EAAgB,QAAO;AACpC,UAAI,SAAS,YAAA,EAAe,QAAO;AACnC,YAAM,IAAI,MAAM,+BAA+B,SAAS,SAAA,CAAU,EAAE;AAAA,IACtE;AAAA,IACA,WAAW,MAAM;AACf,UAAI,CAAC,OAAO,mBAAmB;AAC7B,cAAM,IAAI;AAAA,UACR;AAAA,QAAA;AAAA,MAEJ;AACA,aAAO,OAAO;AAAA,IAChB;AAAA,IACA,SAAS,OAAO,gBAA0C;AACxD,YAAM,UACJ,OAAO,YAAY,0BAA0B,aACzC,YAAY,0BACZ;AACN,YAAM,qBAAqB,kBAAkB,OAAO,iBAAiB;AAErE,UACE,CAAC,WACD,sBACA,OAAO,YAAY,0BAA0B,YAC7C;AACA,oBAAY,sBAAsB,kBAAkB;AAAA,MACtD;AAEA,YAAM,WAAW,MAAM,YAAY,WAAW,MAAM,EAAE,QAAQ,MAAM;AACpE,aAAO,SAAS,WAAW,MAAM;AAAA,IACnC;AAAA,EAAA;AAEJ;AAEA,eAAe,gBAA2C;AACxD,MAAI,CAAC,kBAAkB;AAErB,uBAAmB;AAAA,MACjB;AAAA,MACA,EAAE,cAAc,KAAA;AAAA,IAAK,EACrB,KAAK,CAAA,QAAO,KAAK,aAAa,IAAI;AAAA,EACtC;AACA,SAAO;AACT;AAEO,MAAM,kBAAuC;AAAA,EAA7C,cAAA;AACL,SAAS,OAAoB;AAAA,MAC3B,IAAI;AAAA,MACJ,YAAY,CAAC,QAAQ;AAAA,MACrB,eAAe;AAAA,QACb;AAAA,QACA;AAAA,QACA;AAAA,QACA;AAAA,MAAA;AAAA,MAEF,kBAAkB,CAAC,QAAQ;AAAA,MAC3B,aAAa;AAAA,MACb,aAAa;AAAA,MACb,UAAU;AAAA,IAAA;AAAA,EACZ;AAAA,EAEA,SAAS,QAAyB;AAChC,WAAO,WAAW;AAAA,EACpB;AAAA,EAEA,MAAM,MAAM,SAA2C;AACrD,QAAI,QAAQ,WAAW,UAAU;AAC/B,YAAM,IAAI,MAAM,gDAAgD;AAAA,IAClE;AACA,QAAI,EAAE,YAAY,UAAU;AAC1B,YAAM,IAAI,MAAM,+CAA+C;AAAA,IACjE;AACA,UAAM,YAAY,MAAM,cAAA;AACxB,QAAI,CAAC,WAAW;AACd,YAAM,IAAI;AAAA,QACR;AAAA,MAAA;AAAA,IAEJ;AACA,UAAM,SAAU,QAAkC;AAClD,UAAM,MAAM,MAAM;AAAA,MAChB,CAAA;AAAA,MACA,EAAE,WAAW,qBAAqB,MAAM,EAAA;AAAA,IAAE;AAE5C,WAAO,IAAI;AAAA,EACb;AACF;"}
1
+ {"version":3,"file":"standards-sdk.es62.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 { 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(target: 'aid' | 'did'): string[] {\n if (target === 'aid') {\n return [AID_DNS_WEB_PROFILE_ID];\n }\n return [UAID_DID_RESOLUTION_PROFILE_ID];\n}\n\nexport class UaidDnsWebProfileResolver implements UaidProfileResolver {\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 nativeId = parsed.params['nativeId'];\n if (!nativeId || !isFqdn(nativeId)) {\n return null;\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 null;\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 === uaidTargetFromParsed(parsed) &&\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(selected.target);\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 return buildErrorProfile(\n uaid,\n 'ERR_FOLLOWUP_RESOLUTION_FAILED',\n 'Follow-up profile resolution failed after successful DNS binding.',\n {\n followupProfileId,\n dnsName,\n },\n );\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 }\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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"}