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