@hashgraphonline/standards-sdk 0.1.160 → 0.1.162

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 (329) 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 +39 -1
  14. package/dist/cjs/hcs-14/resolvers/registry.d.ts.map +1 -1
  15. package/dist/cjs/hcs-14/resolvers/types.d.ts +52 -0
  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 +46 -13
  22. package/dist/cjs/hcs-14/sdk.d.ts.map +1 -1
  23. package/dist/cjs/standards-sdk.cjs +3 -3
  24. package/dist/cjs/standards-sdk.cjs.map +1 -1
  25. package/dist/es/hcs-14/index.d.ts +1 -0
  26. package/dist/es/hcs-14/index.d.ts.map +1 -1
  27. package/dist/es/hcs-14/resolvers/aid-dns-web-profile.d.ts +1 -0
  28. package/dist/es/hcs-14/resolvers/aid-dns-web-profile.d.ts.map +1 -1
  29. package/dist/es/hcs-14/resolvers/ans-dns-web-profile-utils.d.ts +23 -0
  30. package/dist/es/hcs-14/resolvers/ans-dns-web-profile-utils.d.ts.map +1 -0
  31. package/dist/es/hcs-14/resolvers/ans-dns-web-profile.d.ts +32 -0
  32. package/dist/es/hcs-14/resolvers/ans-dns-web-profile.d.ts.map +1 -0
  33. package/dist/es/hcs-14/resolvers/hcs-11-profile.d.ts +1 -0
  34. package/dist/es/hcs-14/resolvers/hcs-11-profile.d.ts.map +1 -1
  35. package/dist/es/hcs-14/resolvers/hiero.d.ts +1 -0
  36. package/dist/es/hcs-14/resolvers/hiero.d.ts.map +1 -1
  37. package/dist/es/hcs-14/resolvers/registry.d.ts +39 -1
  38. package/dist/es/hcs-14/resolvers/registry.d.ts.map +1 -1
  39. package/dist/es/hcs-14/resolvers/types.d.ts +52 -0
  40. package/dist/es/hcs-14/resolvers/types.d.ts.map +1 -1
  41. package/dist/es/hcs-14/resolvers/uaid-did-resolution-profile.d.ts +1 -0
  42. package/dist/es/hcs-14/resolvers/uaid-did-resolution-profile.d.ts.map +1 -1
  43. package/dist/es/hcs-14/resolvers/uaid-dns-web-profile.d.ts +1 -0
  44. package/dist/es/hcs-14/resolvers/uaid-dns-web-profile.d.ts.map +1 -1
  45. package/dist/es/hcs-14/sdk.d.ts +46 -13
  46. package/dist/es/hcs-14/sdk.d.ts.map +1 -1
  47. package/dist/es/standards-sdk.es.js +97 -90
  48. package/dist/es/standards-sdk.es.js.map +1 -1
  49. package/dist/es/standards-sdk.es100.js +151 -43
  50. package/dist/es/standards-sdk.es100.js.map +1 -1
  51. package/dist/es/standards-sdk.es101.js +114 -234
  52. package/dist/es/standards-sdk.es101.js.map +1 -1
  53. package/dist/es/standards-sdk.es102.js +43 -96
  54. package/dist/es/standards-sdk.es102.js.map +1 -1
  55. package/dist/es/standards-sdk.es103.js +244 -80
  56. package/dist/es/standards-sdk.es103.js.map +1 -1
  57. package/dist/es/standards-sdk.es104.js +101 -29
  58. package/dist/es/standards-sdk.es104.js.map +1 -1
  59. package/dist/es/standards-sdk.es105.js +94 -225
  60. package/dist/es/standards-sdk.es105.js.map +1 -1
  61. package/dist/es/standards-sdk.es106.js +29 -112
  62. package/dist/es/standards-sdk.es106.js.map +1 -1
  63. package/dist/es/standards-sdk.es107.js +224 -26
  64. package/dist/es/standards-sdk.es107.js.map +1 -1
  65. package/dist/es/standards-sdk.es108.js +109 -80
  66. package/dist/es/standards-sdk.es108.js.map +1 -1
  67. package/dist/es/standards-sdk.es109.js +29 -26
  68. package/dist/es/standards-sdk.es109.js.map +1 -1
  69. package/dist/es/standards-sdk.es11.js +1 -1
  70. package/dist/es/standards-sdk.es110.js +80 -248
  71. package/dist/es/standards-sdk.es110.js.map +1 -1
  72. package/dist/es/standards-sdk.es111.js +28 -475
  73. package/dist/es/standards-sdk.es111.js.map +1 -1
  74. package/dist/es/standards-sdk.es112.js +244 -97
  75. package/dist/es/standards-sdk.es112.js.map +1 -1
  76. package/dist/es/standards-sdk.es113.js +451 -133
  77. package/dist/es/standards-sdk.es113.js.map +1 -1
  78. package/dist/es/standards-sdk.es114.js +98 -27
  79. package/dist/es/standards-sdk.es114.js.map +1 -1
  80. package/dist/es/standards-sdk.es115.js +156 -8
  81. package/dist/es/standards-sdk.es115.js.map +1 -1
  82. package/dist/es/standards-sdk.es116.js +31 -139
  83. package/dist/es/standards-sdk.es116.js.map +1 -1
  84. package/dist/es/standards-sdk.es117.js +10 -27
  85. package/dist/es/standards-sdk.es117.js.map +1 -1
  86. package/dist/es/standards-sdk.es118.js +139 -19
  87. package/dist/es/standards-sdk.es118.js.map +1 -1
  88. package/dist/es/standards-sdk.es119.js +27 -158
  89. package/dist/es/standards-sdk.es119.js.map +1 -1
  90. package/dist/es/standards-sdk.es12.js +1 -1
  91. package/dist/es/standards-sdk.es120.js +16 -197
  92. package/dist/es/standards-sdk.es120.js.map +1 -1
  93. package/dist/es/standards-sdk.es121.js +133 -763
  94. package/dist/es/standards-sdk.es121.js.map +1 -1
  95. package/dist/es/standards-sdk.es122.js +200 -10
  96. package/dist/es/standards-sdk.es122.js.map +1 -1
  97. package/dist/es/standards-sdk.es123.js +762 -539
  98. package/dist/es/standards-sdk.es123.js.map +1 -1
  99. package/dist/es/standards-sdk.es124.js +10 -599
  100. package/dist/es/standards-sdk.es124.js.map +1 -1
  101. package/dist/es/standards-sdk.es125.js +567 -13
  102. package/dist/es/standards-sdk.es125.js.map +1 -1
  103. package/dist/es/standards-sdk.es126.js +602 -2
  104. package/dist/es/standards-sdk.es126.js.map +1 -1
  105. package/dist/es/standards-sdk.es127.js +12 -86
  106. package/dist/es/standards-sdk.es127.js.map +1 -1
  107. package/dist/es/standards-sdk.es128.js +2 -40
  108. package/dist/es/standards-sdk.es128.js.map +1 -1
  109. package/dist/es/standards-sdk.es129.js +87 -2
  110. package/dist/es/standards-sdk.es129.js.map +1 -1
  111. package/dist/es/standards-sdk.es13.js +1 -1
  112. package/dist/es/standards-sdk.es130.js +37 -232
  113. package/dist/es/standards-sdk.es130.js.map +1 -1
  114. package/dist/es/standards-sdk.es131.js +2 -1140
  115. package/dist/es/standards-sdk.es131.js.map +1 -1
  116. package/dist/es/standards-sdk.es132.js +213 -284
  117. package/dist/es/standards-sdk.es132.js.map +1 -1
  118. package/dist/es/standards-sdk.es133.js +1138 -420
  119. package/dist/es/standards-sdk.es133.js.map +1 -1
  120. package/dist/es/standards-sdk.es134.js +301 -350
  121. package/dist/es/standards-sdk.es134.js.map +1 -1
  122. package/dist/es/standards-sdk.es135.js +417 -1111
  123. package/dist/es/standards-sdk.es135.js.map +1 -1
  124. package/dist/es/standards-sdk.es136.js +348 -201
  125. package/dist/es/standards-sdk.es136.js.map +1 -1
  126. package/dist/es/standards-sdk.es137.js +1029 -1480
  127. package/dist/es/standards-sdk.es137.js.map +1 -1
  128. package/dist/es/standards-sdk.es138.js +207 -1254
  129. package/dist/es/standards-sdk.es138.js.map +1 -1
  130. package/dist/es/standards-sdk.es139.js +1564 -14
  131. package/dist/es/standards-sdk.es139.js.map +1 -1
  132. package/dist/es/standards-sdk.es14.js +1 -1
  133. package/dist/es/standards-sdk.es140.js +1253 -85
  134. package/dist/es/standards-sdk.es140.js.map +1 -1
  135. package/dist/es/standards-sdk.es141.js +15 -79
  136. package/dist/es/standards-sdk.es141.js.map +1 -1
  137. package/dist/es/standards-sdk.es142.js +83 -889
  138. package/dist/es/standards-sdk.es142.js.map +1 -1
  139. package/dist/es/standards-sdk.es143.js +73 -52
  140. package/dist/es/standards-sdk.es143.js.map +1 -1
  141. package/dist/es/standards-sdk.es144.js +877 -143
  142. package/dist/es/standards-sdk.es144.js.map +1 -1
  143. package/dist/es/standards-sdk.es145.js +60 -7
  144. package/dist/es/standards-sdk.es145.js.map +1 -1
  145. package/dist/es/standards-sdk.es146.js +138 -65
  146. package/dist/es/standards-sdk.es146.js.map +1 -1
  147. package/dist/es/standards-sdk.es147.js +7 -65
  148. package/dist/es/standards-sdk.es147.js.map +1 -1
  149. package/dist/es/standards-sdk.es148.js +86 -30
  150. package/dist/es/standards-sdk.es148.js.map +1 -1
  151. package/dist/es/standards-sdk.es149.js +65 -34
  152. package/dist/es/standards-sdk.es149.js.map +1 -1
  153. package/dist/es/standards-sdk.es15.js +1 -1
  154. package/dist/es/standards-sdk.es150.js +30 -41
  155. package/dist/es/standards-sdk.es150.js.map +1 -1
  156. package/dist/es/standards-sdk.es151.js +34 -138
  157. package/dist/es/standards-sdk.es151.js.map +1 -1
  158. package/dist/es/standards-sdk.es152.js +48 -42
  159. package/dist/es/standards-sdk.es152.js.map +1 -1
  160. package/dist/es/standards-sdk.es153.js +106 -12450
  161. package/dist/es/standards-sdk.es153.js.map +1 -1
  162. package/dist/es/standards-sdk.es154.js +38 -168
  163. package/dist/es/standards-sdk.es154.js.map +1 -1
  164. package/dist/es/standards-sdk.es155.js +12423 -263
  165. package/dist/es/standards-sdk.es155.js.map +1 -1
  166. package/dist/es/standards-sdk.es156.js +13 -342
  167. package/dist/es/standards-sdk.es156.js.map +1 -1
  168. package/dist/es/standards-sdk.es157.js +55 -452
  169. package/dist/es/standards-sdk.es157.js.map +1 -1
  170. package/dist/es/standards-sdk.es158.js +70 -317
  171. package/dist/es/standards-sdk.es158.js.map +1 -1
  172. package/dist/es/standards-sdk.es159.js +70 -65
  173. package/dist/es/standards-sdk.es159.js.map +1 -1
  174. package/dist/es/standards-sdk.es16.js +4 -4
  175. package/dist/es/standards-sdk.es160.js +197 -14
  176. package/dist/es/standards-sdk.es160.js.map +1 -1
  177. package/dist/es/standards-sdk.es161.js +60 -229
  178. package/dist/es/standards-sdk.es161.js.map +1 -1
  179. package/dist/es/standards-sdk.es162.js +237 -51
  180. package/dist/es/standards-sdk.es162.js.map +1 -1
  181. package/dist/es/standards-sdk.es163.js +160 -72
  182. package/dist/es/standards-sdk.es163.js.map +1 -1
  183. package/dist/es/standards-sdk.es164.js +312 -71
  184. package/dist/es/standards-sdk.es164.js.map +1 -1
  185. package/dist/es/standards-sdk.es165.js +337 -64
  186. package/dist/es/standards-sdk.es165.js.map +1 -1
  187. package/dist/es/standards-sdk.es166.js +436 -155
  188. package/dist/es/standards-sdk.es166.js.map +1 -1
  189. package/dist/es/standards-sdk.es167.js +319 -210
  190. package/dist/es/standards-sdk.es167.js.map +1 -1
  191. package/dist/es/standards-sdk.es168.js +68 -231
  192. package/dist/es/standards-sdk.es168.js.map +1 -1
  193. package/dist/es/standards-sdk.es169.js +154 -101
  194. package/dist/es/standards-sdk.es169.js.map +1 -1
  195. package/dist/es/standards-sdk.es170.js +200 -104
  196. package/dist/es/standards-sdk.es170.js.map +1 -1
  197. package/dist/es/standards-sdk.es171.js +225 -147
  198. package/dist/es/standards-sdk.es171.js.map +1 -1
  199. package/dist/es/standards-sdk.es172.js +100 -166
  200. package/dist/es/standards-sdk.es172.js.map +1 -1
  201. package/dist/es/standards-sdk.es173.js +110 -123
  202. package/dist/es/standards-sdk.es173.js.map +1 -1
  203. package/dist/es/standards-sdk.es174.js +122 -292
  204. package/dist/es/standards-sdk.es174.js.map +1 -1
  205. package/dist/es/standards-sdk.es175.js +166 -240
  206. package/dist/es/standards-sdk.es175.js.map +1 -1
  207. package/dist/es/standards-sdk.es176.js +125 -102
  208. package/dist/es/standards-sdk.es176.js.map +1 -1
  209. package/dist/es/standards-sdk.es177.js +334 -0
  210. package/dist/es/standards-sdk.es177.js.map +1 -0
  211. package/dist/es/standards-sdk.es178.js +262 -0
  212. package/dist/es/standards-sdk.es178.js.map +1 -0
  213. package/dist/es/standards-sdk.es179.js +119 -0
  214. package/dist/es/standards-sdk.es179.js.map +1 -0
  215. package/dist/es/standards-sdk.es18.js +11 -11
  216. package/dist/es/standards-sdk.es19.js +8 -8
  217. package/dist/es/standards-sdk.es2.js +2 -2
  218. package/dist/es/standards-sdk.es20.js +1 -1
  219. package/dist/es/standards-sdk.es21.js +1 -1
  220. package/dist/es/standards-sdk.es22.js +1 -1
  221. package/dist/es/standards-sdk.es23.js +1 -1
  222. package/dist/es/standards-sdk.es24.js +1 -1
  223. package/dist/es/standards-sdk.es25.js +1 -1
  224. package/dist/es/standards-sdk.es26.js +1 -1
  225. package/dist/es/standards-sdk.es27.js +11 -11
  226. package/dist/es/standards-sdk.es30.js +2 -2
  227. package/dist/es/standards-sdk.es31.js +4 -4
  228. package/dist/es/standards-sdk.es32.js +1 -1
  229. package/dist/es/standards-sdk.es35.js +5 -5
  230. package/dist/es/standards-sdk.es36.js +4 -4
  231. package/dist/es/standards-sdk.es37.js +2 -2
  232. package/dist/es/standards-sdk.es38.js +2 -2
  233. package/dist/es/standards-sdk.es39.js +1 -1
  234. package/dist/es/standards-sdk.es4.js +2 -2
  235. package/dist/es/standards-sdk.es40.js +1 -1
  236. package/dist/es/standards-sdk.es41.js +2 -2
  237. package/dist/es/standards-sdk.es46.js +1 -1
  238. package/dist/es/standards-sdk.es5.js +2 -2
  239. package/dist/es/standards-sdk.es51.js +1 -1
  240. package/dist/es/standards-sdk.es53.js +1 -1
  241. package/dist/es/standards-sdk.es56.js +2 -2
  242. package/dist/es/standards-sdk.es58.js +39 -231
  243. package/dist/es/standards-sdk.es58.js.map +1 -1
  244. package/dist/es/standards-sdk.es59.js +328 -35
  245. package/dist/es/standards-sdk.es59.js.map +1 -1
  246. package/dist/es/standards-sdk.es6.js +2 -2
  247. package/dist/es/standards-sdk.es60.js +33 -101
  248. package/dist/es/standards-sdk.es60.js.map +1 -1
  249. package/dist/es/standards-sdk.es61.js +87 -156
  250. package/dist/es/standards-sdk.es61.js.map +1 -1
  251. package/dist/es/standards-sdk.es62.js +126 -153
  252. package/dist/es/standards-sdk.es62.js.map +1 -1
  253. package/dist/es/standards-sdk.es63.js +234 -81
  254. package/dist/es/standards-sdk.es63.js.map +1 -1
  255. package/dist/es/standards-sdk.es64.js +244 -39
  256. package/dist/es/standards-sdk.es64.js.map +1 -1
  257. package/dist/es/standards-sdk.es65.js +122 -247
  258. package/dist/es/standards-sdk.es65.js.map +1 -1
  259. package/dist/es/standards-sdk.es66.js +41 -28
  260. package/dist/es/standards-sdk.es66.js.map +1 -1
  261. package/dist/es/standards-sdk.es67.js +266 -90
  262. package/dist/es/standards-sdk.es67.js.map +1 -1
  263. package/dist/es/standards-sdk.es68.js +33 -3
  264. package/dist/es/standards-sdk.es68.js.map +1 -1
  265. package/dist/es/standards-sdk.es69.js +84 -89
  266. package/dist/es/standards-sdk.es69.js.map +1 -1
  267. package/dist/es/standards-sdk.es7.js +1 -1
  268. package/dist/es/standards-sdk.es70.js +3 -99
  269. package/dist/es/standards-sdk.es70.js.map +1 -1
  270. package/dist/es/standards-sdk.es71.js +99 -17
  271. package/dist/es/standards-sdk.es71.js.map +1 -1
  272. package/dist/es/standards-sdk.es72.js +100 -77
  273. package/dist/es/standards-sdk.es72.js.map +1 -1
  274. package/dist/es/standards-sdk.es73.js +19 -458
  275. package/dist/es/standards-sdk.es73.js.map +1 -1
  276. package/dist/es/standards-sdk.es74.js +77 -324
  277. package/dist/es/standards-sdk.es74.js.map +1 -1
  278. package/dist/es/standards-sdk.es75.js +420 -170
  279. package/dist/es/standards-sdk.es75.js.map +1 -1
  280. package/dist/es/standards-sdk.es76.js +323 -71
  281. package/dist/es/standards-sdk.es76.js.map +1 -1
  282. package/dist/es/standards-sdk.es77.js +208 -71
  283. package/dist/es/standards-sdk.es77.js.map +1 -1
  284. package/dist/es/standards-sdk.es78.js +67 -138
  285. package/dist/es/standards-sdk.es78.js.map +1 -1
  286. package/dist/es/standards-sdk.es79.js +71 -69
  287. package/dist/es/standards-sdk.es79.js.map +1 -1
  288. package/dist/es/standards-sdk.es80.js +132 -393
  289. package/dist/es/standards-sdk.es80.js.map +1 -1
  290. package/dist/es/standards-sdk.es81.js +44 -471
  291. package/dist/es/standards-sdk.es81.js.map +1 -1
  292. package/dist/es/standards-sdk.es82.js +361 -322
  293. package/dist/es/standards-sdk.es82.js.map +1 -1
  294. package/dist/es/standards-sdk.es83.js +495 -88
  295. package/dist/es/standards-sdk.es83.js.map +1 -1
  296. package/dist/es/standards-sdk.es84.js +365 -125
  297. package/dist/es/standards-sdk.es84.js.map +1 -1
  298. package/dist/es/standards-sdk.es85.js +88 -7
  299. package/dist/es/standards-sdk.es85.js.map +1 -1
  300. package/dist/es/standards-sdk.es86.js +125 -47
  301. package/dist/es/standards-sdk.es86.js.map +1 -1
  302. package/dist/es/standards-sdk.es87.js +6 -99
  303. package/dist/es/standards-sdk.es87.js.map +1 -1
  304. package/dist/es/standards-sdk.es88.js +43 -344
  305. package/dist/es/standards-sdk.es88.js.map +1 -1
  306. package/dist/es/standards-sdk.es89.js +73 -253
  307. package/dist/es/standards-sdk.es89.js.map +1 -1
  308. package/dist/es/standards-sdk.es9.js +2 -2
  309. package/dist/es/standards-sdk.es90.js +340 -53
  310. package/dist/es/standards-sdk.es90.js.map +1 -1
  311. package/dist/es/standards-sdk.es91.js +280 -48
  312. package/dist/es/standards-sdk.es91.js.map +1 -1
  313. package/dist/es/standards-sdk.es92.js +54 -143
  314. package/dist/es/standards-sdk.es92.js.map +1 -1
  315. package/dist/es/standards-sdk.es93.js +44 -62
  316. package/dist/es/standards-sdk.es93.js.map +1 -1
  317. package/dist/es/standards-sdk.es94.js +140 -20
  318. package/dist/es/standards-sdk.es94.js.map +1 -1
  319. package/dist/es/standards-sdk.es95.js +65 -23
  320. package/dist/es/standards-sdk.es95.js.map +1 -1
  321. package/dist/es/standards-sdk.es96.js +26 -236
  322. package/dist/es/standards-sdk.es96.js.map +1 -1
  323. package/dist/es/standards-sdk.es97.js +23 -280
  324. package/dist/es/standards-sdk.es97.js.map +1 -1
  325. package/dist/es/standards-sdk.es98.js +229 -146
  326. package/dist/es/standards-sdk.es98.js.map +1 -1
  327. package/dist/es/standards-sdk.es99.js +254 -117
  328. package/dist/es/standards-sdk.es99.js.map +1 -1
  329. package/package.json +8 -1
@@ -1 +1 @@
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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"}
1
+ {"version":3,"file":"standards-sdk.es62.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 adapterKind: 'uaid-profile-resolver' = 'uaid-profile-resolver';\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 buildErrorProfile(\n uaid,\n 'ERR_NOT_APPLICABLE',\n 'AID DNS/Web profile only applies to uaid:aid 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 'AID DNS/Web profile requires an FQDN nativeId.',\n );\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 buildErrorProfile(\n uaid,\n 'ERR_NO_DNS_RECORD',\n 'No AID DNS TXT record was found for the requested nativeId.',\n { dnsName },\n );\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,32 +1,8 @@
1
- import { multibaseB58btcDecode } from "./standards-sdk.es162.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 { isFqdn, normalizeDomain } from "./standards-sdk.es159.js";
3
+ import { normalizeAnsVersion, isValidAnsProfileVersion, parseAnsDnsTxtRecord, toErrorMessage, parseAnsAgentCard, extractEndpointCandidates, selectPreferredEndpoint } from "./standards-sdk.es160.js";
4
+ const ANS_DNS_WEB_PROFILE_ID = "hcs-14.profile.ans-dns-web";
5
+ const UAID_UNSPECIFIED_PARAM_VALUE = "0";
30
6
  function buildErrorProfile(uaid, code, message, details) {
31
7
  const error = {
32
8
  code,
@@ -37,98 +13,275 @@ function buildErrorProfile(uaid, code, message, details) {
37
13
  id: uaid,
38
14
  error,
39
15
  metadata: {
40
- profile: UAID_DID_RESOLUTION_PROFILE_ID,
16
+ profile: ANS_DNS_WEB_PROFILE_ID,
41
17
  resolved: false
42
18
  }
43
19
  };
44
20
  }
45
- function dedupeAlsoKnownAs(baseDid, existing = []) {
46
- const values = /* @__PURE__ */ new Set([baseDid, ...existing]);
47
- return [...values];
21
+ async function defaultFetchJson(url) {
22
+ if (typeof globalThis.fetch !== "function") {
23
+ throw new Error("Fetch API is unavailable in this runtime.");
24
+ }
25
+ const response = await globalThis.fetch(url, {
26
+ method: "GET",
27
+ headers: {
28
+ accept: "application/json"
29
+ }
30
+ });
31
+ if (!response.ok) {
32
+ throw new Error(
33
+ `Agent Card request failed with status ${response.status}.`
34
+ );
35
+ }
36
+ return response.json();
37
+ }
38
+ function isUnspecifiedUaidParamValue(value) {
39
+ return !value || value === UAID_UNSPECIFIED_PARAM_VALUE;
48
40
  }
49
- class UaidDidResolutionProfileResolver {
50
- constructor() {
51
- this.profile = UAID_DID_RESOLUTION_PROFILE_ID;
41
+ function selectDeterministicAnsDnsRecord(records) {
42
+ return [...records].sort((a, b) => a.url.localeCompare(b.url))[0];
43
+ }
44
+ class AnsDnsWebProfileResolver {
45
+ constructor(options = {}) {
46
+ this.adapterKind = "uaid-profile-resolver";
47
+ this.profile = ANS_DNS_WEB_PROFILE_ID;
52
48
  this.meta = {
53
- id: "hcs-14/uaid-did-resolution",
49
+ id: "hcs-14/ans-dns-web",
54
50
  didMethods: ["*"],
55
- displayName: "HCS-14 UAID DID Resolution Profile",
56
- description: "Resolves uaid:did identifiers to DID Document-compatible output with profile metadata."
51
+ displayName: "HCS-14 ANS DNS/Web Profile",
52
+ description: "Resolves ANS uaid:aid identifiers via _ans.<nativeId> TXT records and Agent Card endpoint selection."
57
53
  };
54
+ this.dnsLookup = options.dnsLookup ?? nodeDnsTxtLookup;
55
+ this.fetchJson = options.fetchJson ?? defaultFetchJson;
56
+ this.supportedSchemes = new Set(
57
+ (options.supportedUriSchemes ?? ["https", "wss"]).map(
58
+ (scheme) => scheme.toLowerCase()
59
+ )
60
+ );
61
+ this.transparencyVerifier = options.transparencyVerifier;
58
62
  }
59
63
  supports(_uaid, parsed) {
60
- return parsed.method === "uaid";
64
+ if (parsed.method !== "aid") {
65
+ return false;
66
+ }
67
+ if (parsed.params["registry"] !== "ans") {
68
+ return false;
69
+ }
70
+ const nativeId = parsed.params["nativeId"];
71
+ return !!nativeId && isFqdn(nativeId);
61
72
  }
62
73
  async resolveProfile(uaid, context) {
63
74
  const parsed = context.parsedUaid;
64
- if (parsed.method !== "uaid") {
75
+ if (parsed.method !== "aid") {
76
+ return buildErrorProfile(
77
+ uaid,
78
+ "ERR_NOT_APPLICABLE",
79
+ "ANS profile only applies to uaid:aid identifiers."
80
+ );
81
+ }
82
+ if (parsed.params["registry"] !== "ans") {
83
+ return buildErrorProfile(
84
+ uaid,
85
+ "ERR_NOT_APPLICABLE",
86
+ "ANS profile requires registry=ans."
87
+ );
88
+ }
89
+ const nativeId = parsed.params["nativeId"];
90
+ if (!nativeId || !isFqdn(nativeId)) {
91
+ return buildErrorProfile(
92
+ uaid,
93
+ "ERR_NOT_APPLICABLE",
94
+ "ANS profile requires an FQDN nativeId."
95
+ );
96
+ }
97
+ const uid = parsed.params["uid"];
98
+ if (isUnspecifiedUaidParamValue(uid)) {
99
+ return buildErrorProfile(
100
+ uaid,
101
+ "ERR_NOT_APPLICABLE",
102
+ "ANS profile requires a non-zero uid parameter."
103
+ );
104
+ }
105
+ const protocol = parsed.params["proto"];
106
+ if (isUnspecifiedUaidParamValue(protocol)) {
107
+ return buildErrorProfile(
108
+ uaid,
109
+ "ERR_PROTOCOL_UNSPECIFIED",
110
+ "ANS profile requires a usable proto parameter."
111
+ );
112
+ }
113
+ const uaidVersion = parsed.params["version"];
114
+ const normalizedUaidVersion = uaidVersion === void 0 ? void 0 : normalizeAnsVersion(uaidVersion);
115
+ if (uaidVersion !== void 0 && !isValidAnsProfileVersion(uaidVersion)) {
116
+ return buildErrorProfile(
117
+ uaid,
118
+ "ERR_NOT_APPLICABLE",
119
+ "ANS profile requires a valid semver version parameter when provided."
120
+ );
121
+ }
122
+ const normalizedNativeId = normalizeDomain(nativeId);
123
+ const dnsName = `_ans.${normalizedNativeId}`;
124
+ const txtRecords = await this.dnsLookup(dnsName);
125
+ if (txtRecords.length === 0) {
126
+ return buildErrorProfile(
127
+ uaid,
128
+ "ERR_NO_DNS_RECORD",
129
+ "No ANS DNS TXT record was found for the requested nativeId.",
130
+ { dnsName }
131
+ );
132
+ }
133
+ const validTxtRecords = txtRecords.map((record) => parseAnsDnsTxtRecord(record)).filter((record) => record !== null);
134
+ if (validTxtRecords.length === 0) {
65
135
  return buildErrorProfile(
66
136
  uaid,
67
- "ERR_INVALID_UAID",
68
- "Identifier is not uaid:did and cannot be resolved by this profile.",
69
- { uaid }
137
+ "ERR_INVALID_ANS_RECORD",
138
+ "ANS DNS TXT payload is malformed or unsupported.",
139
+ { dnsName }
70
140
  );
71
141
  }
72
- const src = parsed.params["src"];
73
- const srcDid = src ? decodeSrcDid(src) : null;
74
- const baseDid = srcDid ?? context.did ?? null;
75
- if (!baseDid) {
142
+ let matchingVersionRecords = validTxtRecords;
143
+ if (normalizedUaidVersion) {
144
+ const recordsWithVersion = validTxtRecords.filter((record) => {
145
+ return record.version !== void 0;
146
+ });
147
+ if (recordsWithVersion.length === 0) {
148
+ return buildErrorProfile(
149
+ uaid,
150
+ "ERR_VERSION_MISMATCH",
151
+ "UAID specifies a version but no ANS DNS TXT record carries a version field.",
152
+ { dnsName, uaidVersion: normalizedUaidVersion }
153
+ );
154
+ }
155
+ matchingVersionRecords = recordsWithVersion.filter((record) => {
156
+ return record.version === normalizedUaidVersion;
157
+ });
158
+ if (matchingVersionRecords.length === 0) {
159
+ return buildErrorProfile(
160
+ uaid,
161
+ "ERR_VERSION_MISMATCH",
162
+ "UAID version does not match ANS DNS TXT record version.",
163
+ { dnsName, uaidVersion: normalizedUaidVersion }
164
+ );
165
+ }
166
+ }
167
+ const selectedRecord = selectDeterministicAnsDnsRecord(
168
+ matchingVersionRecords
169
+ );
170
+ let agentCardPayload;
171
+ try {
172
+ agentCardPayload = await this.fetchJson(selectedRecord.url);
173
+ } catch (error) {
174
+ return buildErrorProfile(
175
+ uaid,
176
+ "ERR_AGENT_CARD_INVALID",
177
+ "Agent Card retrieval failed.",
178
+ {
179
+ stage: "fetch",
180
+ agentCardUrl: selectedRecord.url,
181
+ reason: toErrorMessage(error)
182
+ }
183
+ );
184
+ }
185
+ const agentCard = parseAnsAgentCard(agentCardPayload);
186
+ if (!agentCard) {
76
187
  return buildErrorProfile(
77
188
  uaid,
78
- "ERR_BASE_DID_UNDETERMINED",
79
- "Unable to determine base DID; provide src parameter or configure method inference.",
80
- { uaid }
189
+ "ERR_AGENT_CARD_INVALID",
190
+ "Agent Card is missing required fields.",
191
+ { stage: "validate", agentCardUrl: selectedRecord.url }
81
192
  );
82
193
  }
83
- const didDocument = context.didDocument && context.didDocument.id === baseDid ? context.didDocument : await context.resolveDid(baseDid);
84
- if (!didDocument) {
194
+ if (agentCard.ansName !== uid) {
85
195
  return buildErrorProfile(
86
196
  uaid,
87
- "ERR_DID_RESOLUTION_FAILED",
88
- "Base DID resolution failed.",
89
- { uaid, baseDid }
197
+ "ERR_AGENT_CARD_INVALID",
198
+ "Agent Card ansName does not match UAID uid.",
199
+ {
200
+ stage: "validate",
201
+ expectedUid: uid,
202
+ actualAnsName: agentCard.ansName
203
+ }
90
204
  );
91
205
  }
92
- if (!didDocument.id || typeof didDocument.id !== "string") {
206
+ const endpointCandidates = extractEndpointCandidates(
207
+ agentCard.endpoints,
208
+ this.supportedSchemes
209
+ );
210
+ const anchoredCandidates = endpointCandidates.filter((candidate) => {
211
+ return normalizeDomain(candidate.parsedUrl.hostname) === normalizedNativeId;
212
+ });
213
+ if (anchoredCandidates.length === 0) {
93
214
  return buildErrorProfile(
94
215
  uaid,
95
- "ERR_DID_DOCUMENT_INVALID",
96
- "Resolved DID document is malformed.",
97
- { uaid, baseDid }
216
+ "ERR_ENDPOINT_NOT_ANCHORED",
217
+ "No endpoint URL is anchored to the UAID nativeId host.",
218
+ {
219
+ nativeId: normalizedNativeId
220
+ }
98
221
  );
99
222
  }
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;
223
+ const selectedEndpoint = selectPreferredEndpoint(anchoredCandidates, protocol) ?? anchoredCandidates[0];
224
+ let transparencyAttempted = false;
225
+ let transparencySucceeded = false;
226
+ if (this.transparencyVerifier) {
227
+ transparencyAttempted = true;
228
+ transparencySucceeded = await this.transparencyVerifier({
229
+ uaid,
230
+ protocol,
231
+ endpoint: selectedEndpoint.endpointUrl,
232
+ agentCardUrl: selectedRecord.url,
233
+ transparencyHints: agentCard.transparencyHints
234
+ });
235
+ if (!transparencySucceeded) {
236
+ return buildErrorProfile(
237
+ uaid,
238
+ "ERR_TRANSPARENCY_VERIFICATION_FAILED",
239
+ "Transparency verification failed.",
240
+ {
241
+ agentCardUrl: selectedRecord.url
242
+ }
243
+ );
244
+ }
245
+ }
246
+ const did = context.did ?? void 0;
247
+ const alsoKnownAs = did ? [did] : void 0;
248
+ const verificationLevel = transparencySucceeded ? "cryptographic" : "metadata";
249
+ const verificationMethod = transparencySucceeded ? "ans-transparency" : "metadata-match";
104
250
  return {
105
251
  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,
252
+ did,
253
+ alsoKnownAs,
254
+ service: [
255
+ {
256
+ id: `${uaid}#ans-endpoint`,
257
+ type: "ANSService",
258
+ serviceEndpoint: selectedEndpoint.endpointUrl
259
+ }
260
+ ],
112
261
  metadata: {
113
- profile: UAID_DID_RESOLUTION_PROFILE_ID,
262
+ profile: ANS_DNS_WEB_PROFILE_ID,
114
263
  resolved: true,
115
- baseDid,
116
- baseDidResolved: true,
264
+ endpoint: selectedEndpoint.endpointUrl,
265
+ protocol,
266
+ precedenceSource: "dns",
117
267
  verification: {
118
- method: "did-resolution",
119
- assurance: "base-method",
120
- details: "Validated according to base DID method rules"
268
+ level: verificationLevel,
269
+ method: verificationMethod
121
270
  },
122
- services: {
123
- copiedFromBaseDidDocument: baseServices.length > 0,
124
- derivedFromUaidParameters: includeHintedService
271
+ verificationLevel,
272
+ agentCardUrl: selectedRecord.url,
273
+ dnsRecordSelection: "lexicographically-smallest-url",
274
+ transparencyHints: agentCard.transparencyHints,
275
+ transparencyVerification: {
276
+ attempted: transparencyAttempted,
277
+ succeeded: transparencySucceeded
125
278
  }
126
279
  }
127
280
  };
128
281
  }
129
282
  }
130
283
  export {
131
- UAID_DID_RESOLUTION_PROFILE_ID,
132
- UaidDidResolutionProfileResolver
284
+ ANS_DNS_WEB_PROFILE_ID,
285
+ AnsDnsWebProfileResolver
133
286
  };
134
287
  //# sourceMappingURL=standards-sdk.es63.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"standards-sdk.es63.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.es63.js","sources":["../../src/hcs-14/resolvers/ans-dns-web-profile.ts"],"sourcesContent":["import type {\n DidResolutionProfile,\n ProfileResolutionError,\n ProfileResolutionTransparencyHints,\n UaidProfileResolver,\n UaidProfileResolverContext,\n} from './types';\nimport type { AdapterMeta } from '../adapters/types';\nimport { nodeDnsTxtLookup, type DnsTxtLookup } from './dns';\nimport { isFqdn, normalizeDomain } from './profile-utils';\nimport {\n parseAnsDnsTxtRecord,\n type AnsDnsTxtRecord,\n parseAnsAgentCard,\n extractEndpointCandidates,\n selectPreferredEndpoint,\n isValidAnsProfileVersion,\n normalizeAnsVersion,\n toErrorMessage,\n} from './ans-dns-web-profile-utils';\n\nexport const ANS_DNS_WEB_PROFILE_ID = 'hcs-14.profile.ans-dns-web';\n\nexport interface AnsTransparencyVerificationInput {\n uaid: string;\n protocol: string;\n endpoint: string;\n agentCardUrl: string;\n transparencyHints?: ProfileResolutionTransparencyHints;\n}\n\ntype AnsTransparencyVerifier = (\n input: AnsTransparencyVerificationInput,\n) => Promise<boolean>;\n\nexport interface AnsDnsWebResolverOptions {\n dnsLookup?: DnsTxtLookup;\n fetchJson?: (url: string) => Promise<unknown>;\n supportedUriSchemes?: string[];\n transparencyVerifier?: AnsTransparencyVerifier;\n}\n\nconst UAID_UNSPECIFIED_PARAM_VALUE = '0';\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: ANS_DNS_WEB_PROFILE_ID,\n resolved: false,\n },\n };\n}\n\nasync function defaultFetchJson(url: string): Promise<unknown> {\n if (typeof globalThis.fetch !== 'function') {\n throw new Error('Fetch API is unavailable in this runtime.');\n }\n\n const response = await globalThis.fetch(url, {\n method: 'GET',\n headers: {\n accept: 'application/json',\n },\n });\n if (!response.ok) {\n throw new Error(\n `Agent Card request failed with status ${response.status}.`,\n );\n }\n return response.json();\n}\n\nfunction isUnspecifiedUaidParamValue(value: string | undefined): boolean {\n return !value || value === UAID_UNSPECIFIED_PARAM_VALUE;\n}\n\nfunction selectDeterministicAnsDnsRecord(\n records: AnsDnsTxtRecord[],\n): AnsDnsTxtRecord {\n return [...records].sort((a, b) => a.url.localeCompare(b.url))[0];\n}\n\nexport class AnsDnsWebProfileResolver implements UaidProfileResolver {\n readonly adapterKind: 'uaid-profile-resolver' = 'uaid-profile-resolver';\n readonly profile = ANS_DNS_WEB_PROFILE_ID;\n\n readonly meta: AdapterMeta = {\n id: 'hcs-14/ans-dns-web',\n didMethods: ['*'],\n displayName: 'HCS-14 ANS DNS/Web Profile',\n description:\n 'Resolves ANS uaid:aid identifiers via _ans.<nativeId> TXT records and Agent Card endpoint selection.',\n };\n\n private readonly dnsLookup: DnsTxtLookup;\n private readonly fetchJson: (url: string) => Promise<unknown>;\n private readonly supportedSchemes: Set<string>;\n private readonly transparencyVerifier?: AnsTransparencyVerifier;\n\n constructor(options: AnsDnsWebResolverOptions = {}) {\n this.dnsLookup = options.dnsLookup ?? nodeDnsTxtLookup;\n this.fetchJson = options.fetchJson ?? defaultFetchJson;\n this.supportedSchemes = new Set(\n (options.supportedUriSchemes ?? ['https', 'wss']).map(scheme =>\n scheme.toLowerCase(),\n ),\n );\n this.transparencyVerifier = options.transparencyVerifier;\n }\n\n supports(\n _uaid: string,\n parsed: UaidProfileResolverContext['parsedUaid'],\n ): boolean {\n if (parsed.method !== 'aid') {\n return false;\n }\n if (parsed.params['registry'] !== 'ans') {\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 buildErrorProfile(\n uaid,\n 'ERR_NOT_APPLICABLE',\n 'ANS profile only applies to uaid:aid identifiers.',\n );\n }\n if (parsed.params['registry'] !== 'ans') {\n return buildErrorProfile(\n uaid,\n 'ERR_NOT_APPLICABLE',\n 'ANS profile requires registry=ans.',\n );\n }\n\n const nativeId = parsed.params['nativeId'];\n if (!nativeId || !isFqdn(nativeId)) {\n return buildErrorProfile(\n uaid,\n 'ERR_NOT_APPLICABLE',\n 'ANS profile requires an FQDN nativeId.',\n );\n }\n\n const uid = parsed.params['uid'];\n if (isUnspecifiedUaidParamValue(uid)) {\n return buildErrorProfile(\n uaid,\n 'ERR_NOT_APPLICABLE',\n 'ANS profile requires a non-zero uid parameter.',\n );\n }\n\n const protocol = parsed.params['proto'];\n if (isUnspecifiedUaidParamValue(protocol)) {\n return buildErrorProfile(\n uaid,\n 'ERR_PROTOCOL_UNSPECIFIED',\n 'ANS profile requires a usable proto parameter.',\n );\n }\n const uaidVersion = parsed.params['version'];\n const normalizedUaidVersion =\n uaidVersion === undefined ? undefined : normalizeAnsVersion(uaidVersion);\n if (uaidVersion !== undefined && !isValidAnsProfileVersion(uaidVersion)) {\n return buildErrorProfile(\n uaid,\n 'ERR_NOT_APPLICABLE',\n 'ANS profile requires a valid semver version parameter when provided.',\n );\n }\n\n const normalizedNativeId = normalizeDomain(nativeId);\n const dnsName = `_ans.${normalizedNativeId}`;\n const txtRecords = await this.dnsLookup(dnsName);\n if (txtRecords.length === 0) {\n return buildErrorProfile(\n uaid,\n 'ERR_NO_DNS_RECORD',\n 'No ANS DNS TXT record was found for the requested nativeId.',\n { dnsName },\n );\n }\n\n const validTxtRecords = txtRecords\n .map(record => parseAnsDnsTxtRecord(record))\n .filter((record): record is AnsDnsTxtRecord => record !== null);\n if (validTxtRecords.length === 0) {\n return buildErrorProfile(\n uaid,\n 'ERR_INVALID_ANS_RECORD',\n 'ANS DNS TXT payload is malformed or unsupported.',\n { dnsName },\n );\n }\n\n let matchingVersionRecords = validTxtRecords;\n if (normalizedUaidVersion) {\n const recordsWithVersion = validTxtRecords.filter(record => {\n return record.version !== undefined;\n });\n if (recordsWithVersion.length === 0) {\n return buildErrorProfile(\n uaid,\n 'ERR_VERSION_MISMATCH',\n 'UAID specifies a version but no ANS DNS TXT record carries a version field.',\n { dnsName, uaidVersion: normalizedUaidVersion },\n );\n }\n matchingVersionRecords = recordsWithVersion.filter(record => {\n return record.version === normalizedUaidVersion;\n });\n if (matchingVersionRecords.length === 0) {\n return buildErrorProfile(\n uaid,\n 'ERR_VERSION_MISMATCH',\n 'UAID version does not match ANS DNS TXT record version.',\n { dnsName, uaidVersion: normalizedUaidVersion },\n );\n }\n }\n\n const selectedRecord = selectDeterministicAnsDnsRecord(\n matchingVersionRecords,\n );\n\n let agentCardPayload: unknown;\n try {\n agentCardPayload = await this.fetchJson(selectedRecord.url);\n } catch (error) {\n return buildErrorProfile(\n uaid,\n 'ERR_AGENT_CARD_INVALID',\n 'Agent Card retrieval failed.',\n {\n stage: 'fetch',\n agentCardUrl: selectedRecord.url,\n reason: toErrorMessage(error),\n },\n );\n }\n\n const agentCard = parseAnsAgentCard(agentCardPayload);\n if (!agentCard) {\n return buildErrorProfile(\n uaid,\n 'ERR_AGENT_CARD_INVALID',\n 'Agent Card is missing required fields.',\n { stage: 'validate', agentCardUrl: selectedRecord.url },\n );\n }\n if (agentCard.ansName !== uid) {\n return buildErrorProfile(\n uaid,\n 'ERR_AGENT_CARD_INVALID',\n 'Agent Card ansName does not match UAID uid.',\n {\n stage: 'validate',\n expectedUid: uid,\n actualAnsName: agentCard.ansName,\n },\n );\n }\n\n const endpointCandidates = extractEndpointCandidates(\n agentCard.endpoints,\n this.supportedSchemes,\n );\n const anchoredCandidates = endpointCandidates.filter(candidate => {\n return (\n normalizeDomain(candidate.parsedUrl.hostname) === normalizedNativeId\n );\n });\n if (anchoredCandidates.length === 0) {\n return buildErrorProfile(\n uaid,\n 'ERR_ENDPOINT_NOT_ANCHORED',\n 'No endpoint URL is anchored to the UAID nativeId host.',\n {\n nativeId: normalizedNativeId,\n },\n );\n }\n\n const selectedEndpoint =\n selectPreferredEndpoint(anchoredCandidates, protocol) ??\n anchoredCandidates[0]!;\n\n let transparencyAttempted = false;\n let transparencySucceeded = false;\n if (this.transparencyVerifier) {\n transparencyAttempted = true;\n transparencySucceeded = await this.transparencyVerifier({\n uaid,\n protocol,\n endpoint: selectedEndpoint.endpointUrl,\n agentCardUrl: selectedRecord.url,\n transparencyHints: agentCard.transparencyHints,\n });\n if (!transparencySucceeded) {\n return buildErrorProfile(\n uaid,\n 'ERR_TRANSPARENCY_VERIFICATION_FAILED',\n 'Transparency verification failed.',\n {\n agentCardUrl: selectedRecord.url,\n },\n );\n }\n }\n\n const did = context.did ?? undefined;\n const alsoKnownAs = did ? [did] : undefined;\n const verificationLevel: 'metadata' | 'cryptographic' =\n transparencySucceeded ? 'cryptographic' : 'metadata';\n const verificationMethod = transparencySucceeded\n ? 'ans-transparency'\n : 'metadata-match';\n\n return {\n id: uaid,\n did,\n alsoKnownAs,\n service: [\n {\n id: `${uaid}#ans-endpoint`,\n type: 'ANSService',\n serviceEndpoint: selectedEndpoint.endpointUrl,\n },\n ],\n metadata: {\n profile: ANS_DNS_WEB_PROFILE_ID,\n resolved: true,\n endpoint: selectedEndpoint.endpointUrl,\n protocol,\n precedenceSource: 'dns',\n verification: {\n level: verificationLevel,\n method: verificationMethod,\n },\n verificationLevel,\n agentCardUrl: selectedRecord.url,\n dnsRecordSelection: 'lexicographically-smallest-url',\n transparencyHints: agentCard.transparencyHints,\n transparencyVerification: {\n attempted: transparencyAttempted,\n succeeded: transparencySucceeded,\n },\n },\n };\n }\n}\n"],"names":[],"mappings":"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"}