@hashgraphonline/standards-sdk 0.1.160 → 0.1.161

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 (293) hide show
  1. package/dist/cjs/hcs-14/resolvers/registry.d.ts +18 -1
  2. package/dist/cjs/hcs-14/resolvers/registry.d.ts.map +1 -1
  3. package/dist/cjs/hcs-14/resolvers/types.d.ts +17 -0
  4. package/dist/cjs/hcs-14/resolvers/types.d.ts.map +1 -1
  5. package/dist/cjs/hcs-14/sdk.d.ts +24 -13
  6. package/dist/cjs/hcs-14/sdk.d.ts.map +1 -1
  7. package/dist/cjs/standards-sdk.cjs +3 -3
  8. package/dist/cjs/standards-sdk.cjs.map +1 -1
  9. package/dist/es/hcs-14/resolvers/registry.d.ts +18 -1
  10. package/dist/es/hcs-14/resolvers/registry.d.ts.map +1 -1
  11. package/dist/es/hcs-14/resolvers/types.d.ts +17 -0
  12. package/dist/es/hcs-14/resolvers/types.d.ts.map +1 -1
  13. package/dist/es/hcs-14/sdk.d.ts +24 -13
  14. package/dist/es/hcs-14/sdk.d.ts.map +1 -1
  15. package/dist/es/standards-sdk.es.js +94 -90
  16. package/dist/es/standards-sdk.es.js.map +1 -1
  17. package/dist/es/standards-sdk.es100.js +138 -42
  18. package/dist/es/standards-sdk.es100.js.map +1 -1
  19. package/dist/es/standards-sdk.es101.js +43 -259
  20. package/dist/es/standards-sdk.es101.js.map +1 -1
  21. package/dist/es/standards-sdk.es102.js +245 -82
  22. package/dist/es/standards-sdk.es102.js.map +1 -1
  23. package/dist/es/standards-sdk.es103.js +50 -49
  24. package/dist/es/standards-sdk.es103.js.map +1 -1
  25. package/dist/es/standards-sdk.es104.js +100 -29
  26. package/dist/es/standards-sdk.es104.js.map +1 -1
  27. package/dist/es/standards-sdk.es105.js +27 -229
  28. package/dist/es/standards-sdk.es105.js.map +1 -1
  29. package/dist/es/standards-sdk.es106.js +228 -109
  30. package/dist/es/standards-sdk.es106.js.map +1 -1
  31. package/dist/es/standards-sdk.es107.js +94 -15
  32. package/dist/es/standards-sdk.es107.js.map +1 -1
  33. package/dist/es/standards-sdk.es108.js +30 -80
  34. package/dist/es/standards-sdk.es108.js.map +1 -1
  35. package/dist/es/standards-sdk.es109.js +80 -27
  36. package/dist/es/standards-sdk.es109.js.map +1 -1
  37. package/dist/es/standards-sdk.es11.js +1 -1
  38. package/dist/es/standards-sdk.es110.js +27 -248
  39. package/dist/es/standards-sdk.es110.js.map +1 -1
  40. package/dist/es/standards-sdk.es111.js +246 -472
  41. package/dist/es/standards-sdk.es111.js.map +1 -1
  42. package/dist/es/standards-sdk.es112.js +458 -85
  43. package/dist/es/standards-sdk.es112.js.map +1 -1
  44. package/dist/es/standards-sdk.es113.js +96 -151
  45. package/dist/es/standards-sdk.es113.js.map +1 -1
  46. package/dist/es/standards-sdk.es114.js +155 -29
  47. package/dist/es/standards-sdk.es114.js.map +1 -1
  48. package/dist/es/standards-sdk.es115.js +26 -4
  49. package/dist/es/standards-sdk.es115.js.map +1 -1
  50. package/dist/es/standards-sdk.es116.js +10 -140
  51. package/dist/es/standards-sdk.es116.js.map +1 -1
  52. package/dist/es/standards-sdk.es117.js +140 -27
  53. package/dist/es/standards-sdk.es117.js.map +1 -1
  54. package/dist/es/standards-sdk.es118.js +27 -20
  55. package/dist/es/standards-sdk.es118.js.map +1 -1
  56. package/dist/es/standards-sdk.es119.js +18 -156
  57. package/dist/es/standards-sdk.es119.js.map +1 -1
  58. package/dist/es/standards-sdk.es12.js +1 -1
  59. package/dist/es/standards-sdk.es120.js +148 -191
  60. package/dist/es/standards-sdk.es120.js.map +1 -1
  61. package/dist/es/standards-sdk.es121.js +160 -747
  62. package/dist/es/standards-sdk.es121.js.map +1 -1
  63. package/dist/es/standards-sdk.es122.js +786 -9
  64. package/dist/es/standards-sdk.es122.js.map +1 -1
  65. package/dist/es/standards-sdk.es123.js +13 -567
  66. package/dist/es/standards-sdk.es123.js.map +1 -1
  67. package/dist/es/standards-sdk.es124.js +541 -576
  68. package/dist/es/standards-sdk.es124.js.map +1 -1
  69. package/dist/es/standards-sdk.es125.js +601 -12
  70. package/dist/es/standards-sdk.es125.js.map +1 -1
  71. package/dist/es/standards-sdk.es126.js +13 -2
  72. package/dist/es/standards-sdk.es126.js.map +1 -1
  73. package/dist/es/standards-sdk.es127.js +2 -87
  74. package/dist/es/standards-sdk.es127.js.map +1 -1
  75. package/dist/es/standards-sdk.es128.js +84 -37
  76. package/dist/es/standards-sdk.es128.js.map +1 -1
  77. package/dist/es/standards-sdk.es129.js +40 -2
  78. package/dist/es/standards-sdk.es129.js.map +1 -1
  79. package/dist/es/standards-sdk.es13.js +1 -1
  80. package/dist/es/standards-sdk.es130.js +2 -235
  81. package/dist/es/standards-sdk.es130.js.map +1 -1
  82. package/dist/es/standards-sdk.es131.js +204 -1109
  83. package/dist/es/standards-sdk.es131.js.map +1 -1
  84. package/dist/es/standards-sdk.es132.js +1059 -225
  85. package/dist/es/standards-sdk.es132.js.map +1 -1
  86. package/dist/es/standards-sdk.es133.js +303 -419
  87. package/dist/es/standards-sdk.es133.js.map +1 -1
  88. package/dist/es/standards-sdk.es134.js +418 -351
  89. package/dist/es/standards-sdk.es134.js.map +1 -1
  90. package/dist/es/standards-sdk.es135.js +347 -1108
  91. package/dist/es/standards-sdk.es135.js.map +1 -1
  92. package/dist/es/standards-sdk.es136.js +1088 -180
  93. package/dist/es/standards-sdk.es136.js.map +1 -1
  94. package/dist/es/standards-sdk.es137.js +153 -1512
  95. package/dist/es/standards-sdk.es137.js.map +1 -1
  96. package/dist/es/standards-sdk.es138.js +1567 -1255
  97. package/dist/es/standards-sdk.es138.js.map +1 -1
  98. package/dist/es/standards-sdk.es139.js +1255 -17
  99. package/dist/es/standards-sdk.es139.js.map +1 -1
  100. package/dist/es/standards-sdk.es14.js +1 -1
  101. package/dist/es/standards-sdk.es140.js +15 -85
  102. package/dist/es/standards-sdk.es140.js.map +1 -1
  103. package/dist/es/standards-sdk.es141.js +77 -71
  104. package/dist/es/standards-sdk.es141.js.map +1 -1
  105. package/dist/es/standards-sdk.es142.js +79 -891
  106. package/dist/es/standards-sdk.es142.js.map +1 -1
  107. package/dist/es/standards-sdk.es143.js +886 -53
  108. package/dist/es/standards-sdk.es143.js.map +1 -1
  109. package/dist/es/standards-sdk.es144.js +53 -152
  110. package/dist/es/standards-sdk.es144.js.map +1 -1
  111. package/dist/es/standards-sdk.es145.js +159 -7
  112. package/dist/es/standards-sdk.es145.js.map +1 -1
  113. package/dist/es/standards-sdk.es146.js +7 -86
  114. package/dist/es/standards-sdk.es146.js.map +1 -1
  115. package/dist/es/standards-sdk.es147.js +65 -44
  116. package/dist/es/standards-sdk.es147.js.map +1 -1
  117. package/dist/es/standards-sdk.es148.js +65 -30
  118. package/dist/es/standards-sdk.es148.js.map +1 -1
  119. package/dist/es/standards-sdk.es149.js +30 -34
  120. package/dist/es/standards-sdk.es149.js.map +1 -1
  121. package/dist/es/standards-sdk.es15.js +1 -1
  122. package/dist/es/standards-sdk.es150.js +34 -41
  123. package/dist/es/standards-sdk.es150.js.map +1 -1
  124. package/dist/es/standards-sdk.es151.js +45 -138
  125. package/dist/es/standards-sdk.es151.js.map +1 -1
  126. package/dist/es/standards-sdk.es152.js +133 -37
  127. package/dist/es/standards-sdk.es152.js.map +1 -1
  128. package/dist/es/standards-sdk.es153.js +34 -12474
  129. package/dist/es/standards-sdk.es153.js.map +1 -1
  130. package/dist/es/standards-sdk.es154.js +12444 -134
  131. package/dist/es/standards-sdk.es154.js.map +1 -1
  132. package/dist/es/standards-sdk.es155.js +13 -318
  133. package/dist/es/standards-sdk.es155.js.map +1 -1
  134. package/dist/es/standards-sdk.es156.js +55 -345
  135. package/dist/es/standards-sdk.es156.js.map +1 -1
  136. package/dist/es/standards-sdk.es157.js +68 -437
  137. package/dist/es/standards-sdk.es157.js.map +1 -1
  138. package/dist/es/standards-sdk.es158.js +71 -321
  139. package/dist/es/standards-sdk.es158.js.map +1 -1
  140. package/dist/es/standards-sdk.es159.js +63 -66
  141. package/dist/es/standards-sdk.es159.js.map +1 -1
  142. package/dist/es/standards-sdk.es16.js +5 -5
  143. package/dist/es/standards-sdk.es160.js +168 -13
  144. package/dist/es/standards-sdk.es160.js.map +1 -1
  145. package/dist/es/standards-sdk.es161.js +312 -232
  146. package/dist/es/standards-sdk.es161.js.map +1 -1
  147. package/dist/es/standards-sdk.es162.js +345 -55
  148. package/dist/es/standards-sdk.es162.js.map +1 -1
  149. package/dist/es/standards-sdk.es163.js +437 -68
  150. package/dist/es/standards-sdk.es163.js.map +1 -1
  151. package/dist/es/standards-sdk.es164.js +321 -71
  152. package/dist/es/standards-sdk.es164.js.map +1 -1
  153. package/dist/es/standards-sdk.es165.js +66 -63
  154. package/dist/es/standards-sdk.es165.js.map +1 -1
  155. package/dist/es/standards-sdk.es166.js +220 -150
  156. package/dist/es/standards-sdk.es166.js.map +1 -1
  157. package/dist/es/standards-sdk.es167.js +152 -202
  158. package/dist/es/standards-sdk.es167.js.map +1 -1
  159. package/dist/es/standards-sdk.es168.js +206 -223
  160. package/dist/es/standards-sdk.es168.js.map +1 -1
  161. package/dist/es/standards-sdk.es169.js +227 -107
  162. package/dist/es/standards-sdk.es169.js.map +1 -1
  163. package/dist/es/standards-sdk.es170.js +98 -105
  164. package/dist/es/standards-sdk.es170.js.map +1 -1
  165. package/dist/es/standards-sdk.es171.js +105 -140
  166. package/dist/es/standards-sdk.es171.js.map +1 -1
  167. package/dist/es/standards-sdk.es172.js +140 -164
  168. package/dist/es/standards-sdk.es172.js.map +1 -1
  169. package/dist/es/standards-sdk.es173.js +165 -119
  170. package/dist/es/standards-sdk.es173.js.map +1 -1
  171. package/dist/es/standards-sdk.es174.js +111 -303
  172. package/dist/es/standards-sdk.es174.js.map +1 -1
  173. package/dist/es/standards-sdk.es175.js +297 -225
  174. package/dist/es/standards-sdk.es175.js.map +1 -1
  175. package/dist/es/standards-sdk.es176.js +253 -110
  176. package/dist/es/standards-sdk.es176.js.map +1 -1
  177. package/dist/es/standards-sdk.es177.js +119 -0
  178. package/dist/es/standards-sdk.es177.js.map +1 -0
  179. package/dist/es/standards-sdk.es18.js +12 -12
  180. package/dist/es/standards-sdk.es19.js +9 -9
  181. package/dist/es/standards-sdk.es2.js +2 -2
  182. package/dist/es/standards-sdk.es20.js +1 -1
  183. package/dist/es/standards-sdk.es21.js +1 -1
  184. package/dist/es/standards-sdk.es22.js +1 -1
  185. package/dist/es/standards-sdk.es23.js +1 -1
  186. package/dist/es/standards-sdk.es24.js +1 -1
  187. package/dist/es/standards-sdk.es25.js +1 -1
  188. package/dist/es/standards-sdk.es26.js +1 -1
  189. package/dist/es/standards-sdk.es27.js +12 -12
  190. package/dist/es/standards-sdk.es30.js +2 -2
  191. package/dist/es/standards-sdk.es31.js +4 -4
  192. package/dist/es/standards-sdk.es32.js +1 -1
  193. package/dist/es/standards-sdk.es35.js +6 -6
  194. package/dist/es/standards-sdk.es36.js +4 -4
  195. package/dist/es/standards-sdk.es37.js +2 -2
  196. package/dist/es/standards-sdk.es38.js +2 -2
  197. package/dist/es/standards-sdk.es39.js +1 -1
  198. package/dist/es/standards-sdk.es4.js +2 -2
  199. package/dist/es/standards-sdk.es40.js +1 -1
  200. package/dist/es/standards-sdk.es41.js +2 -2
  201. package/dist/es/standards-sdk.es46.js +1 -1
  202. package/dist/es/standards-sdk.es5.js +2 -2
  203. package/dist/es/standards-sdk.es51.js +1 -1
  204. package/dist/es/standards-sdk.es53.js +1 -1
  205. package/dist/es/standards-sdk.es56.js +2 -2
  206. package/dist/es/standards-sdk.es58.js +11 -236
  207. package/dist/es/standards-sdk.es58.js.map +1 -1
  208. package/dist/es/standards-sdk.es59.js +321 -35
  209. package/dist/es/standards-sdk.es59.js.map +1 -1
  210. package/dist/es/standards-sdk.es6.js +2 -2
  211. package/dist/es/standards-sdk.es60.js +32 -101
  212. package/dist/es/standards-sdk.es60.js.map +1 -1
  213. package/dist/es/standards-sdk.es61.js +86 -156
  214. package/dist/es/standards-sdk.es61.js.map +1 -1
  215. package/dist/es/standards-sdk.es62.js +112 -153
  216. package/dist/es/standards-sdk.es62.js.map +1 -1
  217. package/dist/es/standards-sdk.es63.js +179 -87
  218. package/dist/es/standards-sdk.es63.js.map +1 -1
  219. package/dist/es/standards-sdk.es64.js +124 -40
  220. package/dist/es/standards-sdk.es64.js.map +1 -1
  221. package/dist/es/standards-sdk.es65.js +41 -251
  222. package/dist/es/standards-sdk.es65.js.map +1 -1
  223. package/dist/es/standards-sdk.es66.js +257 -24
  224. package/dist/es/standards-sdk.es66.js.map +1 -1
  225. package/dist/es/standards-sdk.es67.js +25 -87
  226. package/dist/es/standards-sdk.es67.js.map +1 -1
  227. package/dist/es/standards-sdk.es68.js +95 -3
  228. package/dist/es/standards-sdk.es68.js.map +1 -1
  229. package/dist/es/standards-sdk.es69.js +3 -100
  230. package/dist/es/standards-sdk.es69.js.map +1 -1
  231. package/dist/es/standards-sdk.es7.js +1 -1
  232. package/dist/es/standards-sdk.es70.js +62 -61
  233. package/dist/es/standards-sdk.es70.js.map +1 -1
  234. package/dist/es/standards-sdk.es71.js +98 -17
  235. package/dist/es/standards-sdk.es71.js.map +1 -1
  236. package/dist/es/standards-sdk.es72.js +19 -77
  237. package/dist/es/standards-sdk.es72.js.map +1 -1
  238. package/dist/es/standards-sdk.es73.js +77 -458
  239. package/dist/es/standards-sdk.es73.js.map +1 -1
  240. package/dist/es/standards-sdk.es74.js +240 -106
  241. package/dist/es/standards-sdk.es74.js.map +1 -1
  242. package/dist/es/standards-sdk.es75.js +286 -170
  243. package/dist/es/standards-sdk.es75.js.map +1 -1
  244. package/dist/es/standards-sdk.es76.js +207 -71
  245. package/dist/es/standards-sdk.es76.js.map +1 -1
  246. package/dist/es/standards-sdk.es77.js +72 -71
  247. package/dist/es/standards-sdk.es77.js.map +1 -1
  248. package/dist/es/standards-sdk.es78.js +71 -143
  249. package/dist/es/standards-sdk.es78.js.map +1 -1
  250. package/dist/es/standards-sdk.es79.js +136 -62
  251. package/dist/es/standards-sdk.es79.js.map +1 -1
  252. package/dist/es/standards-sdk.es80.js +45 -380
  253. package/dist/es/standards-sdk.es80.js.map +1 -1
  254. package/dist/es/standards-sdk.es81.js +130 -222
  255. package/dist/es/standards-sdk.es81.js.map +1 -1
  256. package/dist/es/standards-sdk.es82.js +444 -313
  257. package/dist/es/standards-sdk.es82.js.map +1 -1
  258. package/dist/es/standards-sdk.es83.js +364 -88
  259. package/dist/es/standards-sdk.es83.js.map +1 -1
  260. package/dist/es/standards-sdk.es84.js +89 -125
  261. package/dist/es/standards-sdk.es84.js.map +1 -1
  262. package/dist/es/standards-sdk.es85.js +125 -8
  263. package/dist/es/standards-sdk.es85.js.map +1 -1
  264. package/dist/es/standards-sdk.es86.js +6 -45
  265. package/dist/es/standards-sdk.es86.js.map +1 -1
  266. package/dist/es/standards-sdk.es87.js +44 -98
  267. package/dist/es/standards-sdk.es87.js.map +1 -1
  268. package/dist/es/standards-sdk.es88.js +84 -331
  269. package/dist/es/standards-sdk.es88.js.map +1 -1
  270. package/dist/es/standards-sdk.es89.js +160 -93
  271. package/dist/es/standards-sdk.es89.js.map +1 -1
  272. package/dist/es/standards-sdk.es9.js +2 -2
  273. package/dist/es/standards-sdk.es90.js +275 -55
  274. package/dist/es/standards-sdk.es90.js.map +1 -1
  275. package/dist/es/standards-sdk.es91.js +55 -43
  276. package/dist/es/standards-sdk.es91.js.map +1 -1
  277. package/dist/es/standards-sdk.es92.js +44 -145
  278. package/dist/es/standards-sdk.es92.js.map +1 -1
  279. package/dist/es/standards-sdk.es93.js +113 -30
  280. package/dist/es/standards-sdk.es93.js.map +1 -1
  281. package/dist/es/standards-sdk.es94.js +59 -22
  282. package/dist/es/standards-sdk.es94.js.map +1 -1
  283. package/dist/es/standards-sdk.es95.js +28 -23
  284. package/dist/es/standards-sdk.es95.js.map +1 -1
  285. package/dist/es/standards-sdk.es96.js +23 -238
  286. package/dist/es/standards-sdk.es96.js.map +1 -1
  287. package/dist/es/standards-sdk.es97.js +225 -267
  288. package/dist/es/standards-sdk.es97.js.map +1 -1
  289. package/dist/es/standards-sdk.es98.js +220 -95
  290. package/dist/es/standards-sdk.es98.js.map +1 -1
  291. package/dist/es/standards-sdk.es99.js +136 -124
  292. package/dist/es/standards-sdk.es99.js.map +1 -1
  293. package/package.json +4 -1
@@ -1,185 +1,115 @@
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
- };
1
+ import { HCS11Client } from "./standards-sdk.es27.js";
2
+ import { parseHederaCaip10 } from "./standards-sdk.es57.js";
3
+ function toHcs11Network(network) {
4
+ if (network === "mainnet" || network === "testnet") {
5
+ return network;
6
+ }
7
+ return null;
18
8
  }
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" };
9
+ function parseNativeIdNetworkAndAccount(nativeId) {
10
+ try {
11
+ const parsed = parseHederaCaip10(nativeId);
12
+ const network = toHcs11Network(parsed.network);
13
+ if (!network) {
14
+ return null;
15
+ }
16
+ return { network, accountId: parsed.accountId };
17
+ } catch (_error) {
18
+ return null;
26
19
  }
27
- if (!version.toLowerCase().startsWith("aid")) {
28
- return { code: "ERR_INVALID_AID_RECORD" };
20
+ }
21
+ function getDidNetworkAndAccount(did, context) {
22
+ const nativeId = context?.parsedUaid?.params["nativeId"];
23
+ if (nativeId) {
24
+ const resolvedNativeId = parseNativeIdNetworkAndAccount(nativeId);
25
+ if (resolvedNativeId) {
26
+ return resolvedNativeId;
27
+ }
29
28
  }
30
- let parsedUrl;
31
- try {
32
- parsedUrl = new URL(endpoint);
33
- } catch {
34
- return { code: "ERR_ENDPOINT_INVALID" };
29
+ const didMatch = did.match(/^did:hedera:(mainnet|testnet):(.+)$/);
30
+ if (!didMatch) {
31
+ return null;
35
32
  }
36
- const scheme = parsedUrl.protocol.replace(/:$/, "").toLowerCase();
37
- if (!supportedSchemes.has(scheme)) {
38
- return { code: "ERR_ENDPOINT_INVALID" };
33
+ const network = toHcs11Network(didMatch[1]);
34
+ if (!network) {
35
+ return null;
39
36
  }
40
37
  return {
41
- record: {
42
- version,
43
- protocol,
44
- endpoint: parsedUrl.toString(),
45
- publicKey: fields["k"],
46
- keyId: fields["i"]
47
- }
38
+ network,
39
+ accountId: didMatch[2]
48
40
  };
49
41
  }
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";
56
- }
57
- if (verificationLevel === "metadata") {
58
- return "metadata-match";
42
+ function buildHcs10Service(id, network, accountId, topicInfo) {
43
+ if (!topicInfo) {
44
+ return null;
59
45
  }
60
- return void 0;
46
+ return {
47
+ id: `${id}#hcs10`,
48
+ type: "HCS10Service",
49
+ serviceEndpoint: {
50
+ network,
51
+ accountId,
52
+ inboundTopicId: topicInfo.inboundTopic || void 0,
53
+ outboundTopicId: topicInfo.outboundTopic || void 0,
54
+ profileTopicId: topicInfo.profileTopicId || void 0
55
+ }
56
+ };
61
57
  }
62
- class AidDnsWebProfileResolver {
63
- constructor(options = {}) {
64
- this.profile = AID_DNS_WEB_PROFILE_ID;
58
+ class HCS11ProfileResolver {
59
+ constructor() {
65
60
  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."
61
+ id: "hedera/hcs11-profile-resolver",
62
+ didMethods: ["hedera"],
63
+ caip2Networks: ["hedera:mainnet", "hedera:testnet"],
64
+ caip10Namespaces: ["hedera"],
65
+ displayName: "Hedera (HCS-11 Profile Resolver)",
66
+ description: "Resolves HCS-11 protocol profiles and HCS-10 service metadata for did:hedera identifiers."
70
67
  };
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;
79
68
  }
80
- supports(_uaid, parsed) {
81
- if (parsed.method !== "aid") {
82
- return false;
83
- }
84
- const nativeId = parsed.params["nativeId"];
85
- return !!nativeId && isFqdn(nativeId);
69
+ supports(did) {
70
+ return /^did:hedera:(mainnet|testnet):/.test(did);
86
71
  }
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)) {
72
+ async resolveProfile(did, context) {
73
+ const networkAndAccount = getDidNetworkAndAccount(did, context);
74
+ if (!networkAndAccount) {
94
75
  return null;
95
76
  }
96
- const normalizedNativeId = normalizeDomain(nativeId);
97
- const dnsName = `_agent.${normalizedNativeId}`;
98
- const txtRecords = await this.dnsLookup(dnsName);
99
- if (txtRecords.length === 0) {
77
+ const { network, accountId } = networkAndAccount;
78
+ const client = new HCS11Client({
79
+ network,
80
+ auth: { operatorId: accountId },
81
+ silent: true
82
+ });
83
+ const fetched = await client.fetchProfileByAccountId(accountId, network);
84
+ if (!fetched.success || !fetched.profile) {
100
85
  return null;
101
86
  }
102
- const parsedRecords = txtRecords.map(
103
- (record) => parseRecord(record, this.supportedSchemes)
87
+ const subjectId = context?.uaid ?? did;
88
+ const existingServices = context?.didDocument?.service ?? [];
89
+ const hcs10Service = buildHcs10Service(
90
+ subjectId,
91
+ network,
92
+ accountId,
93
+ fetched.topicInfo
104
94
  );
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
- );
150
- }
151
- verificationLevel = "cryptographic";
152
- }
153
- const did = context.did ?? void 0;
154
- const alsoKnownAs = did ? [did] : void 0;
95
+ const service = hcs10Service ? [...existingServices, hcs10Service] : existingServices;
155
96
  return {
156
- id: uaid,
97
+ id: subjectId,
157
98
  did,
158
- alsoKnownAs,
159
- service: [
160
- {
161
- id: `${uaid}#aid-endpoint`,
162
- type: "AIDService",
163
- serviceEndpoint: selectedRecord.endpoint
99
+ service: service.length > 0 ? service : void 0,
100
+ profiles: {
101
+ hcs11: {
102
+ protocol: "hcs-11",
103
+ network,
104
+ accountId,
105
+ profile: fetched.profile,
106
+ topicInfo: fetched.topicInfo
164
107
  }
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
108
  }
178
109
  };
179
110
  }
180
111
  }
181
112
  export {
182
- AID_DNS_WEB_PROFILE_ID,
183
- AidDnsWebProfileResolver
113
+ HCS11ProfileResolver
184
114
  };
185
115
  //# sourceMappingURL=standards-sdk.es61.js.map
@@ -1 +1 @@
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
+ {"version":3,"file":"standards-sdk.es61.js","sources":["../../src/hcs-14/resolvers/hcs-11-profile.ts"],"sourcesContent":["import { HCS11Client } from '../../hcs-11/client';\nimport { parseHederaCaip10 } from '../caip';\nimport type {\n DidProfileResolver,\n DidProfileResolverContext,\n DidResolutionProfile,\n DidService,\n} from './types';\nimport type { AdapterMeta } from '../adapters/types';\n\ntype Hcs11Network = 'mainnet' | 'testnet';\n\nfunction toHcs11Network(network: string): Hcs11Network | null {\n if (network === 'mainnet' || network === 'testnet') {\n return network;\n }\n return null;\n}\n\nfunction parseNativeIdNetworkAndAccount(\n nativeId: string,\n): { network: Hcs11Network; accountId: string } | null {\n try {\n const parsed = parseHederaCaip10(nativeId);\n const network = toHcs11Network(parsed.network);\n if (!network) {\n return null;\n }\n return { network, accountId: parsed.accountId };\n } catch (_error) {\n return null;\n }\n}\n\nfunction getDidNetworkAndAccount(\n did: string,\n context?: DidProfileResolverContext,\n): { network: Hcs11Network; accountId: string } | null {\n const nativeId = context?.parsedUaid?.params['nativeId'];\n if (nativeId) {\n const resolvedNativeId = parseNativeIdNetworkAndAccount(nativeId);\n if (resolvedNativeId) {\n return resolvedNativeId;\n }\n }\n\n const didMatch = did.match(/^did:hedera:(mainnet|testnet):(.+)$/);\n if (!didMatch) {\n return null;\n }\n\n const network = toHcs11Network(didMatch[1]);\n if (!network) {\n return null;\n }\n\n return {\n network,\n accountId: didMatch[2],\n };\n}\n\nfunction buildHcs10Service(\n id: string,\n network: Hcs11Network,\n accountId: string,\n topicInfo?: {\n inboundTopic: string;\n outboundTopic: string;\n profileTopicId: string;\n },\n): DidService | null {\n if (!topicInfo) {\n return null;\n }\n\n return {\n id: `${id}#hcs10`,\n type: 'HCS10Service',\n serviceEndpoint: {\n network,\n accountId,\n inboundTopicId: topicInfo.inboundTopic || undefined,\n outboundTopicId: topicInfo.outboundTopic || undefined,\n profileTopicId: topicInfo.profileTopicId || undefined,\n },\n };\n}\n\nexport class HCS11ProfileResolver implements DidProfileResolver {\n readonly meta: AdapterMeta = {\n id: 'hedera/hcs11-profile-resolver',\n didMethods: ['hedera'],\n caip2Networks: ['hedera:mainnet', 'hedera:testnet'],\n caip10Namespaces: ['hedera'],\n displayName: 'Hedera (HCS-11 Profile Resolver)',\n description:\n 'Resolves HCS-11 protocol profiles and HCS-10 service metadata for did:hedera identifiers.',\n };\n\n supports(did: string): boolean {\n return /^did:hedera:(mainnet|testnet):/.test(did);\n }\n\n async resolveProfile(\n did: string,\n context?: DidProfileResolverContext,\n ): Promise<DidResolutionProfile | null> {\n const networkAndAccount = getDidNetworkAndAccount(did, context);\n if (!networkAndAccount) {\n return null;\n }\n\n const { network, accountId } = networkAndAccount;\n const client = new HCS11Client({\n network,\n auth: { operatorId: accountId },\n silent: true,\n });\n const fetched = await client.fetchProfileByAccountId(accountId, network);\n if (!fetched.success || !fetched.profile) {\n return null;\n }\n\n const subjectId = context?.uaid ?? did;\n const existingServices = context?.didDocument?.service ?? [];\n const hcs10Service = buildHcs10Service(\n subjectId,\n network,\n accountId,\n fetched.topicInfo,\n );\n const service = hcs10Service\n ? [...existingServices, hcs10Service]\n : existingServices;\n\n return {\n id: subjectId,\n did,\n service: service.length > 0 ? service : undefined,\n profiles: {\n hcs11: {\n protocol: 'hcs-11',\n network,\n accountId,\n profile: fetched.profile,\n topicInfo: fetched.topicInfo,\n },\n },\n };\n }\n}\n"],"names":[],"mappings":";;AAYA,SAAS,eAAe,SAAsC;AAC5D,MAAI,YAAY,aAAa,YAAY,WAAW;AAClD,WAAO;AAAA,EACT;AACA,SAAO;AACT;AAEA,SAAS,+BACP,UACqD;AACrD,MAAI;AACF,UAAM,SAAS,kBAAkB,QAAQ;AACzC,UAAM,UAAU,eAAe,OAAO,OAAO;AAC7C,QAAI,CAAC,SAAS;AACZ,aAAO;AAAA,IACT;AACA,WAAO,EAAE,SAAS,WAAW,OAAO,UAAA;AAAA,EACtC,SAAS,QAAQ;AACf,WAAO;AAAA,EACT;AACF;AAEA,SAAS,wBACP,KACA,SACqD;AACrD,QAAM,WAAW,SAAS,YAAY,OAAO,UAAU;AACvD,MAAI,UAAU;AACZ,UAAM,mBAAmB,+BAA+B,QAAQ;AAChE,QAAI,kBAAkB;AACpB,aAAO;AAAA,IACT;AAAA,EACF;AAEA,QAAM,WAAW,IAAI,MAAM,qCAAqC;AAChE,MAAI,CAAC,UAAU;AACb,WAAO;AAAA,EACT;AAEA,QAAM,UAAU,eAAe,SAAS,CAAC,CAAC;AAC1C,MAAI,CAAC,SAAS;AACZ,WAAO;AAAA,EACT;AAEA,SAAO;AAAA,IACL;AAAA,IACA,WAAW,SAAS,CAAC;AAAA,EAAA;AAEzB;AAEA,SAAS,kBACP,IACA,SACA,WACA,WAKmB;AACnB,MAAI,CAAC,WAAW;AACd,WAAO;AAAA,EACT;AAEA,SAAO;AAAA,IACL,IAAI,GAAG,EAAE;AAAA,IACT,MAAM;AAAA,IACN,iBAAiB;AAAA,MACf;AAAA,MACA;AAAA,MACA,gBAAgB,UAAU,gBAAgB;AAAA,MAC1C,iBAAiB,UAAU,iBAAiB;AAAA,MAC5C,gBAAgB,UAAU,kBAAkB;AAAA,IAAA;AAAA,EAC9C;AAEJ;AAEO,MAAM,qBAAmD;AAAA,EAAzD,cAAA;AACL,SAAS,OAAoB;AAAA,MAC3B,IAAI;AAAA,MACJ,YAAY,CAAC,QAAQ;AAAA,MACrB,eAAe,CAAC,kBAAkB,gBAAgB;AAAA,MAClD,kBAAkB,CAAC,QAAQ;AAAA,MAC3B,aAAa;AAAA,MACb,aACE;AAAA,IAAA;AAAA,EACJ;AAAA,EAEA,SAAS,KAAsB;AAC7B,WAAO,iCAAiC,KAAK,GAAG;AAAA,EAClD;AAAA,EAEA,MAAM,eACJ,KACA,SACsC;AACtC,UAAM,oBAAoB,wBAAwB,KAAK,OAAO;AAC9D,QAAI,CAAC,mBAAmB;AACtB,aAAO;AAAA,IACT;AAEA,UAAM,EAAE,SAAS,UAAA,IAAc;AAC/B,UAAM,SAAS,IAAI,YAAY;AAAA,MAC7B;AAAA,MACA,MAAM,EAAE,YAAY,UAAA;AAAA,MACpB,QAAQ;AAAA,IAAA,CACT;AACD,UAAM,UAAU,MAAM,OAAO,wBAAwB,WAAW,OAAO;AACvE,QAAI,CAAC,QAAQ,WAAW,CAAC,QAAQ,SAAS;AACxC,aAAO;AAAA,IACT;AAEA,UAAM,YAAY,SAAS,QAAQ;AACnC,UAAM,mBAAmB,SAAS,aAAa,WAAW,CAAA;AAC1D,UAAM,eAAe;AAAA,MACnB;AAAA,MACA;AAAA,MACA;AAAA,MACA,QAAQ;AAAA,IAAA;AAEV,UAAM,UAAU,eACZ,CAAC,GAAG,kBAAkB,YAAY,IAClC;AAEJ,WAAO;AAAA,MACL,IAAI;AAAA,MACJ;AAAA,MACA,SAAS,QAAQ,SAAS,IAAI,UAAU;AAAA,MACxC,UAAU;AAAA,QACR,OAAO;AAAA,UACL,UAAU;AAAA,UACV;AAAA,UACA;AAAA,UACA,SAAS,QAAQ;AAAA,UACjB,WAAW,QAAQ;AAAA,QAAA;AAAA,MACrB;AAAA,IACF;AAAA,EAEJ;AACF;"}
@@ -1,8 +1,6 @@
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";
1
+ import { nodeDnsTxtLookup } from "./standards-sdk.es65.js";
2
+ import { isFqdn, normalizeDomain, parseSemicolonFields } from "./standards-sdk.es158.js";
3
+ const AID_DNS_WEB_PROFILE_ID = "hcs-14.profile.aid-dns-web";
6
4
  function buildErrorProfile(uaid, code, message, details) {
7
5
  const error = {
8
6
  code,
@@ -13,100 +11,74 @@ function buildErrorProfile(uaid, code, message, details) {
13
11
  id: uaid,
14
12
  error,
15
13
  metadata: {
16
- profile: UAID_DNS_WEB_PROFILE_ID,
14
+ profile: AID_DNS_WEB_PROFILE_ID,
17
15
  resolved: false
18
16
  }
19
17
  };
20
18
  }
21
- function canonicalizeNativeDomainParams(params) {
22
- const next = { ...params };
23
- const nativeId = next["nativeId"];
24
- if (nativeId && isFqdn(nativeId)) {
25
- next["nativeId"] = normalizeDomain(nativeId);
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
26
  }
27
- const domain = next["domain"];
28
- if (domain && isFqdn(domain)) {
29
- next["domain"] = normalizeDomain(domain);
27
+ if (!version.toLowerCase().startsWith("aid")) {
28
+ return { code: "ERR_INVALID_AID_RECORD" };
30
29
  }
31
- return next;
32
- }
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;
30
+ let parsedUrl;
31
+ try {
32
+ parsedUrl = new URL(endpoint);
33
+ } catch {
34
+ return { code: "ERR_ENDPOINT_INVALID" };
47
35
  }
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"];
36
+ const scheme = parsedUrl.protocol.replace(/:$/, "").toLowerCase();
37
+ if (!supportedSchemes.has(scheme)) {
38
+ return { code: "ERR_ENDPOINT_INVALID" };
68
39
  }
69
40
  return {
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
- )
41
+ record: {
42
+ version,
43
+ protocol,
44
+ endpoint: parsedUrl.toString(),
45
+ publicKey: fields["k"],
46
+ keyId: fields["i"]
47
+ }
85
48
  };
86
49
  }
87
- function selectFollowupProfiles(target) {
88
- if (target === "aid") {
89
- return [AID_DNS_WEB_PROFILE_ID];
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";
56
+ }
57
+ if (verificationLevel === "metadata") {
58
+ return "metadata-match";
90
59
  }
91
- return [UAID_DID_RESOLUTION_PROFILE_ID];
60
+ return void 0;
92
61
  }
93
- class UaidDnsWebProfileResolver {
62
+ class AidDnsWebProfileResolver {
94
63
  constructor(options = {}) {
95
- this.profile = UAID_DNS_WEB_PROFILE_ID;
64
+ this.profile = AID_DNS_WEB_PROFILE_ID;
96
65
  this.meta = {
97
- id: "hcs-14/uaid-dns-web",
66
+ id: "hcs-14/aid-dns-web",
98
67
  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."
68
+ displayName: "HCS-14 AID DNS/Web Profile",
69
+ description: "Resolves uaid:aid identifiers via _agent.<nativeId> DNS TXT records and protocol endpoint hints."
101
70
  };
102
71
  this.dnsLookup = options.dnsLookup ?? nodeDnsTxtLookup;
103
- this.dnssecValidation = options.dnssecValidation;
104
- this.requireFullResolution = options.requireFullResolution ?? false;
105
- this.enableFollowupResolution = options.enableFollowupResolution ?? true;
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;
106
79
  }
107
80
  supports(_uaid, parsed) {
108
- const target = uaidTargetFromParsed(parsed);
109
- if (target !== "aid" && target !== "did") {
81
+ if (parsed.method !== "aid") {
110
82
  return false;
111
83
  }
112
84
  const nativeId = parsed.params["nativeId"];
@@ -114,113 +86,100 @@ class UaidDnsWebProfileResolver {
114
86
  }
115
87
  async resolveProfile(uaid, context) {
116
88
  const parsed = context.parsedUaid;
89
+ if (parsed.method !== "aid") {
90
+ return null;
91
+ }
117
92
  const nativeId = parsed.params["nativeId"];
118
93
  if (!nativeId || !isFqdn(nativeId)) {
119
94
  return null;
120
95
  }
121
96
  const normalizedNativeId = normalizeDomain(nativeId);
122
- const dnsName = `_uaid.${normalizedNativeId}`;
123
- const inputCanonical = buildCanonicalUaid(
124
- uaidTargetFromParsed(parsed),
125
- parsed.id,
126
- canonicalizeNativeDomainParams(parsed.params)
127
- );
97
+ const dnsName = `_agent.${normalizedNativeId}`;
128
98
  const txtRecords = await this.dnsLookup(dnsName);
129
99
  if (txtRecords.length === 0) {
130
100
  return null;
131
101
  }
132
- const parsedRecords = txtRecords.map((record) => parseSemicolonFields(record)).map((fields) => validateRecordFields(fields, normalizedNativeId));
133
- const validRecords = parsedRecords.filter(
134
- (record) => record !== null
102
+ const parsedRecords = txtRecords.map(
103
+ (record) => parseRecord(record, this.supportedSchemes)
135
104
  );
105
+ const validRecords = parsedRecords.filter(
106
+ (result) => "record" in result
107
+ ).map((result) => result.record);
136
108
  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 }
109
+ const endpointInvalid = parsedRecords.some(
110
+ (result) => !("record" in result) && result.code === "ERR_ENDPOINT_INVALID"
142
111
  );
143
- }
144
- const matchingRecords = validRecords.filter(
145
- (record) => record.target === uaidTargetFromParsed(parsed) && record.id === parsed.id && record.reconstructedUaid === inputCanonical
146
- );
147
- if (matchingRecords.length === 0) {
148
112
  return buildErrorProfile(
149
113
  uaid,
150
- "ERR_UAID_MISMATCH",
151
- "DNS TXT payload does not match the input UAID after canonical reconstruction.",
152
- {
153
- dnsName,
154
- inputCanonical
155
- }
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 }
156
117
  );
157
118
  }
158
- const selected = [...matchingRecords].sort(
159
- (a, b) => a.reconstructedUaid.localeCompare(b.reconstructedUaid)
119
+ const selectedRecord = [...validRecords].sort(
120
+ (a, b) => deterministicRecordKey(a).localeCompare(deterministicRecordKey(b))
160
121
  )[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
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 }
169
137
  );
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
138
  }
139
+ verificationLevel = "metadata";
197
140
  }
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
- );
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
+ );
150
+ }
151
+ verificationLevel = "cryptographic";
205
152
  }
206
- const did = selected.did ?? context.did ?? void 0;
153
+ const did = context.did ?? void 0;
207
154
  const alsoKnownAs = did ? [did] : void 0;
208
155
  return {
209
156
  id: uaid,
210
157
  did,
211
158
  alsoKnownAs,
159
+ service: [
160
+ {
161
+ id: `${uaid}#aid-endpoint`,
162
+ type: "AIDService",
163
+ serviceEndpoint: selectedRecord.endpoint
164
+ }
165
+ ],
212
166
  metadata: {
213
- profile: UAID_DNS_WEB_PROFILE_ID,
167
+ profile: AID_DNS_WEB_PROFILE_ID,
214
168
  resolved: true,
215
- reconstructedUaid: selected.reconstructedUaid,
169
+ endpoint: selectedRecord.endpoint,
170
+ protocol: selectedRecord.protocol,
171
+ verification: {
172
+ level: verificationLevel,
173
+ method: verificationMethodForLevel(verificationLevel)
174
+ },
216
175
  verificationLevel,
217
- resolutionMode: "dns-binding-only"
176
+ precedenceSource: "dns"
218
177
  }
219
178
  };
220
179
  }
221
180
  }
222
181
  export {
223
- UAID_DNS_WEB_PROFILE_ID,
224
- UaidDnsWebProfileResolver
182
+ AID_DNS_WEB_PROFILE_ID,
183
+ AidDnsWebProfileResolver
225
184
  };
226
185
  //# sourceMappingURL=standards-sdk.es62.js.map