@hashgraphonline/standards-sdk 0.1.160 → 0.1.162
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- 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 +39 -1
- package/dist/cjs/hcs-14/resolvers/registry.d.ts.map +1 -1
- package/dist/cjs/hcs-14/resolvers/types.d.ts +52 -0
- 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 +46 -13
- package/dist/cjs/hcs-14/sdk.d.ts.map +1 -1
- package/dist/cjs/standards-sdk.cjs +3 -3
- 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 +39 -1
- package/dist/es/hcs-14/resolvers/registry.d.ts.map +1 -1
- package/dist/es/hcs-14/resolvers/types.d.ts +52 -0
- 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 +46 -13
- package/dist/es/hcs-14/sdk.d.ts.map +1 -1
- package/dist/es/standards-sdk.es.js +97 -90
- package/dist/es/standards-sdk.es.js.map +1 -1
- package/dist/es/standards-sdk.es100.js +151 -43
- package/dist/es/standards-sdk.es100.js.map +1 -1
- package/dist/es/standards-sdk.es101.js +114 -234
- package/dist/es/standards-sdk.es101.js.map +1 -1
- package/dist/es/standards-sdk.es102.js +43 -96
- package/dist/es/standards-sdk.es102.js.map +1 -1
- package/dist/es/standards-sdk.es103.js +244 -80
- package/dist/es/standards-sdk.es103.js.map +1 -1
- package/dist/es/standards-sdk.es104.js +101 -29
- package/dist/es/standards-sdk.es104.js.map +1 -1
- package/dist/es/standards-sdk.es105.js +94 -225
- package/dist/es/standards-sdk.es105.js.map +1 -1
- package/dist/es/standards-sdk.es106.js +29 -112
- package/dist/es/standards-sdk.es106.js.map +1 -1
- package/dist/es/standards-sdk.es107.js +224 -26
- package/dist/es/standards-sdk.es107.js.map +1 -1
- package/dist/es/standards-sdk.es108.js +109 -80
- package/dist/es/standards-sdk.es108.js.map +1 -1
- package/dist/es/standards-sdk.es109.js +29 -26
- 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 -248
- package/dist/es/standards-sdk.es110.js.map +1 -1
- package/dist/es/standards-sdk.es111.js +28 -475
- package/dist/es/standards-sdk.es111.js.map +1 -1
- package/dist/es/standards-sdk.es112.js +244 -97
- package/dist/es/standards-sdk.es112.js.map +1 -1
- package/dist/es/standards-sdk.es113.js +451 -133
- package/dist/es/standards-sdk.es113.js.map +1 -1
- package/dist/es/standards-sdk.es114.js +98 -27
- package/dist/es/standards-sdk.es114.js.map +1 -1
- package/dist/es/standards-sdk.es115.js +156 -8
- package/dist/es/standards-sdk.es115.js.map +1 -1
- package/dist/es/standards-sdk.es116.js +31 -139
- package/dist/es/standards-sdk.es116.js.map +1 -1
- package/dist/es/standards-sdk.es117.js +10 -27
- package/dist/es/standards-sdk.es117.js.map +1 -1
- package/dist/es/standards-sdk.es118.js +139 -19
- package/dist/es/standards-sdk.es118.js.map +1 -1
- package/dist/es/standards-sdk.es119.js +27 -158
- 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 +16 -197
- package/dist/es/standards-sdk.es120.js.map +1 -1
- package/dist/es/standards-sdk.es121.js +133 -763
- package/dist/es/standards-sdk.es121.js.map +1 -1
- package/dist/es/standards-sdk.es122.js +200 -10
- package/dist/es/standards-sdk.es122.js.map +1 -1
- package/dist/es/standards-sdk.es123.js +762 -539
- package/dist/es/standards-sdk.es123.js.map +1 -1
- package/dist/es/standards-sdk.es124.js +10 -599
- package/dist/es/standards-sdk.es124.js.map +1 -1
- package/dist/es/standards-sdk.es125.js +567 -13
- package/dist/es/standards-sdk.es125.js.map +1 -1
- package/dist/es/standards-sdk.es126.js +602 -2
- package/dist/es/standards-sdk.es126.js.map +1 -1
- package/dist/es/standards-sdk.es127.js +12 -86
- package/dist/es/standards-sdk.es127.js.map +1 -1
- package/dist/es/standards-sdk.es128.js +2 -40
- package/dist/es/standards-sdk.es128.js.map +1 -1
- package/dist/es/standards-sdk.es129.js +87 -2
- 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 +37 -232
- package/dist/es/standards-sdk.es130.js.map +1 -1
- package/dist/es/standards-sdk.es131.js +2 -1140
- package/dist/es/standards-sdk.es131.js.map +1 -1
- package/dist/es/standards-sdk.es132.js +213 -284
- package/dist/es/standards-sdk.es132.js.map +1 -1
- package/dist/es/standards-sdk.es133.js +1138 -420
- package/dist/es/standards-sdk.es133.js.map +1 -1
- package/dist/es/standards-sdk.es134.js +301 -350
- package/dist/es/standards-sdk.es134.js.map +1 -1
- package/dist/es/standards-sdk.es135.js +417 -1111
- package/dist/es/standards-sdk.es135.js.map +1 -1
- package/dist/es/standards-sdk.es136.js +348 -201
- package/dist/es/standards-sdk.es136.js.map +1 -1
- package/dist/es/standards-sdk.es137.js +1029 -1480
- package/dist/es/standards-sdk.es137.js.map +1 -1
- package/dist/es/standards-sdk.es138.js +207 -1254
- package/dist/es/standards-sdk.es138.js.map +1 -1
- package/dist/es/standards-sdk.es139.js +1564 -14
- 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 +1253 -85
- package/dist/es/standards-sdk.es140.js.map +1 -1
- package/dist/es/standards-sdk.es141.js +15 -79
- package/dist/es/standards-sdk.es141.js.map +1 -1
- package/dist/es/standards-sdk.es142.js +83 -889
- package/dist/es/standards-sdk.es142.js.map +1 -1
- package/dist/es/standards-sdk.es143.js +73 -52
- package/dist/es/standards-sdk.es143.js.map +1 -1
- package/dist/es/standards-sdk.es144.js +877 -143
- package/dist/es/standards-sdk.es144.js.map +1 -1
- package/dist/es/standards-sdk.es145.js +60 -7
- package/dist/es/standards-sdk.es145.js.map +1 -1
- package/dist/es/standards-sdk.es146.js +138 -65
- package/dist/es/standards-sdk.es146.js.map +1 -1
- package/dist/es/standards-sdk.es147.js +7 -65
- package/dist/es/standards-sdk.es147.js.map +1 -1
- package/dist/es/standards-sdk.es148.js +86 -30
- package/dist/es/standards-sdk.es148.js.map +1 -1
- package/dist/es/standards-sdk.es149.js +65 -34
- 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 -41
- package/dist/es/standards-sdk.es150.js.map +1 -1
- package/dist/es/standards-sdk.es151.js +34 -138
- package/dist/es/standards-sdk.es151.js.map +1 -1
- package/dist/es/standards-sdk.es152.js +48 -42
- package/dist/es/standards-sdk.es152.js.map +1 -1
- package/dist/es/standards-sdk.es153.js +106 -12450
- package/dist/es/standards-sdk.es153.js.map +1 -1
- package/dist/es/standards-sdk.es154.js +38 -168
- package/dist/es/standards-sdk.es154.js.map +1 -1
- package/dist/es/standards-sdk.es155.js +12423 -263
- package/dist/es/standards-sdk.es155.js.map +1 -1
- package/dist/es/standards-sdk.es156.js +13 -342
- package/dist/es/standards-sdk.es156.js.map +1 -1
- package/dist/es/standards-sdk.es157.js +55 -452
- package/dist/es/standards-sdk.es157.js.map +1 -1
- package/dist/es/standards-sdk.es158.js +70 -317
- package/dist/es/standards-sdk.es158.js.map +1 -1
- package/dist/es/standards-sdk.es159.js +70 -65
- package/dist/es/standards-sdk.es159.js.map +1 -1
- package/dist/es/standards-sdk.es16.js +4 -4
- package/dist/es/standards-sdk.es160.js +197 -14
- package/dist/es/standards-sdk.es160.js.map +1 -1
- package/dist/es/standards-sdk.es161.js +60 -229
- package/dist/es/standards-sdk.es161.js.map +1 -1
- package/dist/es/standards-sdk.es162.js +237 -51
- package/dist/es/standards-sdk.es162.js.map +1 -1
- package/dist/es/standards-sdk.es163.js +160 -72
- package/dist/es/standards-sdk.es163.js.map +1 -1
- package/dist/es/standards-sdk.es164.js +312 -71
- package/dist/es/standards-sdk.es164.js.map +1 -1
- package/dist/es/standards-sdk.es165.js +337 -64
- package/dist/es/standards-sdk.es165.js.map +1 -1
- package/dist/es/standards-sdk.es166.js +436 -155
- package/dist/es/standards-sdk.es166.js.map +1 -1
- package/dist/es/standards-sdk.es167.js +319 -210
- package/dist/es/standards-sdk.es167.js.map +1 -1
- package/dist/es/standards-sdk.es168.js +68 -231
- package/dist/es/standards-sdk.es168.js.map +1 -1
- package/dist/es/standards-sdk.es169.js +154 -101
- package/dist/es/standards-sdk.es169.js.map +1 -1
- package/dist/es/standards-sdk.es170.js +200 -104
- package/dist/es/standards-sdk.es170.js.map +1 -1
- package/dist/es/standards-sdk.es171.js +225 -147
- package/dist/es/standards-sdk.es171.js.map +1 -1
- package/dist/es/standards-sdk.es172.js +100 -166
- package/dist/es/standards-sdk.es172.js.map +1 -1
- package/dist/es/standards-sdk.es173.js +110 -123
- package/dist/es/standards-sdk.es173.js.map +1 -1
- package/dist/es/standards-sdk.es174.js +122 -292
- package/dist/es/standards-sdk.es174.js.map +1 -1
- package/dist/es/standards-sdk.es175.js +166 -240
- package/dist/es/standards-sdk.es175.js.map +1 -1
- package/dist/es/standards-sdk.es176.js +125 -102
- package/dist/es/standards-sdk.es176.js.map +1 -1
- package/dist/es/standards-sdk.es177.js +334 -0
- package/dist/es/standards-sdk.es177.js.map +1 -0
- 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 +11 -11
- package/dist/es/standards-sdk.es19.js +8 -8
- 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 +11 -11
- 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 +5 -5
- 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 +39 -231
- package/dist/es/standards-sdk.es58.js.map +1 -1
- package/dist/es/standards-sdk.es59.js +328 -35
- 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 +33 -101
- package/dist/es/standards-sdk.es60.js.map +1 -1
- package/dist/es/standards-sdk.es61.js +87 -156
- package/dist/es/standards-sdk.es61.js.map +1 -1
- package/dist/es/standards-sdk.es62.js +126 -153
- package/dist/es/standards-sdk.es62.js.map +1 -1
- package/dist/es/standards-sdk.es63.js +234 -81
- package/dist/es/standards-sdk.es63.js.map +1 -1
- package/dist/es/standards-sdk.es64.js +244 -39
- package/dist/es/standards-sdk.es64.js.map +1 -1
- package/dist/es/standards-sdk.es65.js +122 -247
- package/dist/es/standards-sdk.es65.js.map +1 -1
- package/dist/es/standards-sdk.es66.js +41 -28
- package/dist/es/standards-sdk.es66.js.map +1 -1
- package/dist/es/standards-sdk.es67.js +266 -90
- package/dist/es/standards-sdk.es67.js.map +1 -1
- package/dist/es/standards-sdk.es68.js +33 -3
- package/dist/es/standards-sdk.es68.js.map +1 -1
- package/dist/es/standards-sdk.es69.js +84 -89
- 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 -99
- package/dist/es/standards-sdk.es70.js.map +1 -1
- package/dist/es/standards-sdk.es71.js +99 -17
- package/dist/es/standards-sdk.es71.js.map +1 -1
- package/dist/es/standards-sdk.es72.js +100 -77
- package/dist/es/standards-sdk.es72.js.map +1 -1
- package/dist/es/standards-sdk.es73.js +19 -458
- package/dist/es/standards-sdk.es73.js.map +1 -1
- package/dist/es/standards-sdk.es74.js +77 -324
- package/dist/es/standards-sdk.es74.js.map +1 -1
- package/dist/es/standards-sdk.es75.js +420 -170
- package/dist/es/standards-sdk.es75.js.map +1 -1
- package/dist/es/standards-sdk.es76.js +323 -71
- package/dist/es/standards-sdk.es76.js.map +1 -1
- package/dist/es/standards-sdk.es77.js +208 -71
- package/dist/es/standards-sdk.es77.js.map +1 -1
- package/dist/es/standards-sdk.es78.js +67 -138
- package/dist/es/standards-sdk.es78.js.map +1 -1
- package/dist/es/standards-sdk.es79.js +71 -69
- package/dist/es/standards-sdk.es79.js.map +1 -1
- package/dist/es/standards-sdk.es80.js +132 -393
- package/dist/es/standards-sdk.es80.js.map +1 -1
- package/dist/es/standards-sdk.es81.js +44 -471
- package/dist/es/standards-sdk.es81.js.map +1 -1
- package/dist/es/standards-sdk.es82.js +361 -322
- package/dist/es/standards-sdk.es82.js.map +1 -1
- package/dist/es/standards-sdk.es83.js +495 -88
- package/dist/es/standards-sdk.es83.js.map +1 -1
- package/dist/es/standards-sdk.es84.js +365 -125
- package/dist/es/standards-sdk.es84.js.map +1 -1
- package/dist/es/standards-sdk.es85.js +88 -7
- package/dist/es/standards-sdk.es85.js.map +1 -1
- package/dist/es/standards-sdk.es86.js +125 -47
- package/dist/es/standards-sdk.es86.js.map +1 -1
- package/dist/es/standards-sdk.es87.js +6 -99
- package/dist/es/standards-sdk.es87.js.map +1 -1
- package/dist/es/standards-sdk.es88.js +43 -344
- package/dist/es/standards-sdk.es88.js.map +1 -1
- package/dist/es/standards-sdk.es89.js +73 -253
- 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 +340 -53
- package/dist/es/standards-sdk.es90.js.map +1 -1
- package/dist/es/standards-sdk.es91.js +280 -48
- package/dist/es/standards-sdk.es91.js.map +1 -1
- package/dist/es/standards-sdk.es92.js +54 -143
- package/dist/es/standards-sdk.es92.js.map +1 -1
- package/dist/es/standards-sdk.es93.js +44 -62
- package/dist/es/standards-sdk.es93.js.map +1 -1
- package/dist/es/standards-sdk.es94.js +140 -20
- package/dist/es/standards-sdk.es94.js.map +1 -1
- package/dist/es/standards-sdk.es95.js +65 -23
- package/dist/es/standards-sdk.es95.js.map +1 -1
- package/dist/es/standards-sdk.es96.js +26 -236
- package/dist/es/standards-sdk.es96.js.map +1 -1
- package/dist/es/standards-sdk.es97.js +23 -280
- package/dist/es/standards-sdk.es97.js.map +1 -1
- package/dist/es/standards-sdk.es98.js +229 -146
- package/dist/es/standards-sdk.es98.js.map +1 -1
- package/dist/es/standards-sdk.es99.js +254 -117
- package/dist/es/standards-sdk.es99.js.map +1 -1
- package/package.json +8 -1
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"standards-sdk.es62.js","sources":["../../src/hcs-14/resolvers/uaid-dns-web-profile.ts"],"sourcesContent":["import type {\n DidResolutionProfile,\n ProfileResolutionError,\n UaidProfileResolver,\n UaidProfileResolverContext,\n} from './types';\nimport type { AdapterMeta } from '../adapters/types';\nimport { nodeDnsTxtLookup, type DnsTxtLookup } from './dns';\nimport {\n buildCanonicalUaid,\n isFqdn,\n normalizeDomain,\n parseSemicolonFields,\n uaidTargetFromParsed,\n} from './profile-utils';\nimport { AID_DNS_WEB_PROFILE_ID } from './aid-dns-web-profile';\nimport { UAID_DID_RESOLUTION_PROFILE_ID } from './uaid-did-resolution-profile';\n\nexport const UAID_DNS_WEB_PROFILE_ID = 'hcs-14.profile.uaid-dns-web';\n\ninterface UaidDnsWebRecord {\n target: 'aid' | 'did';\n id: string;\n uid: string;\n proto: string;\n nativeId: string;\n registry?: string;\n domain?: string;\n src?: string;\n did?: string;\n memo?: string;\n reconstructedUaid: string;\n}\n\nexport interface UaidDnsWebResolverOptions {\n dnsLookup?: DnsTxtLookup;\n dnssecValidation?: (hostname: string) => Promise<boolean>;\n requireFullResolution?: boolean;\n enableFollowupResolution?: boolean;\n}\n\nfunction buildErrorProfile(\n uaid: string,\n code: string,\n message: string,\n details?: Record<string, unknown>,\n): DidResolutionProfile {\n const error: ProfileResolutionError = {\n code,\n message,\n details,\n };\n\n return {\n id: uaid,\n error,\n metadata: {\n profile: UAID_DNS_WEB_PROFILE_ID,\n resolved: false,\n },\n };\n}\n\nfunction canonicalizeNativeDomainParams(\n params: Record<string, string>,\n): Record<string, string> {\n const next = { ...params };\n const nativeId = next['nativeId'];\n if (nativeId && isFqdn(nativeId)) {\n next['nativeId'] = normalizeDomain(nativeId);\n }\n const domain = next['domain'];\n if (domain && isFqdn(domain)) {\n next['domain'] = normalizeDomain(domain);\n }\n return next;\n}\n\nfunction validateRecordFields(\n fields: Record<string, string>,\n queriedNativeId: string,\n): UaidDnsWebRecord | null {\n const target = fields['target'];\n const id = fields['id'];\n const uid = fields['uid'];\n const proto = fields['proto'];\n const nativeId = fields['nativeId'];\n\n if (target !== 'aid' && target !== 'did') {\n return null;\n }\n if (!id || !uid || !proto || !nativeId) {\n return null;\n }\n if (normalizeDomain(nativeId) !== queriedNativeId) {\n return null;\n }\n if ('registry' in fields && !fields['registry']) {\n return null;\n }\n const did = fields['did'];\n if (did && (target !== 'did' || !did.startsWith('did:'))) {\n return null;\n }\n\n const params: Record<string, string> = {\n uid,\n proto,\n nativeId,\n };\n if (fields['registry']) {\n params['registry'] = fields['registry'];\n }\n if (fields['domain']) {\n params['domain'] = fields['domain'];\n }\n if (fields['src']) {\n params['src'] = fields['src'];\n }\n\n return {\n target,\n id,\n uid,\n proto,\n nativeId,\n registry: fields['registry'],\n domain: fields['domain'],\n src: fields['src'],\n did,\n memo: fields['m'],\n reconstructedUaid: buildCanonicalUaid(\n target,\n id,\n canonicalizeNativeDomainParams(params),\n ),\n };\n}\n\nfunction selectFollowupProfiles(target: 'aid' | 'did'): string[] {\n if (target === 'aid') {\n return [AID_DNS_WEB_PROFILE_ID];\n }\n return [UAID_DID_RESOLUTION_PROFILE_ID];\n}\n\nexport class UaidDnsWebProfileResolver implements UaidProfileResolver {\n readonly profile = UAID_DNS_WEB_PROFILE_ID;\n\n readonly meta: AdapterMeta = {\n id: 'hcs-14/uaid-dns-web',\n didMethods: ['*'],\n displayName: 'HCS-14 UAID DNS TXT Profile',\n description:\n 'Binds UAIDs to DNS TXT records at _uaid.<nativeId> and can continue to follow-up profile resolution.',\n };\n\n private readonly dnsLookup: DnsTxtLookup;\n private readonly dnssecValidation?: (hostname: string) => Promise<boolean>;\n private readonly requireFullResolution: boolean;\n private readonly enableFollowupResolution: boolean;\n\n constructor(options: UaidDnsWebResolverOptions = {}) {\n this.dnsLookup = options.dnsLookup ?? nodeDnsTxtLookup;\n this.dnssecValidation = options.dnssecValidation;\n this.requireFullResolution = options.requireFullResolution ?? false;\n this.enableFollowupResolution = options.enableFollowupResolution ?? true;\n }\n\n supports(\n _uaid: string,\n parsed: UaidProfileResolverContext['parsedUaid'],\n ): boolean {\n const target = uaidTargetFromParsed(parsed);\n if (target !== 'aid' && target !== 'did') {\n return false;\n }\n const nativeId = parsed.params['nativeId'];\n return !!nativeId && isFqdn(nativeId);\n }\n\n async resolveProfile(\n uaid: string,\n context: UaidProfileResolverContext,\n ): Promise<DidResolutionProfile | null> {\n const parsed = context.parsedUaid;\n const nativeId = parsed.params['nativeId'];\n if (!nativeId || !isFqdn(nativeId)) {\n return null;\n }\n\n const normalizedNativeId = normalizeDomain(nativeId);\n const dnsName = `_uaid.${normalizedNativeId}`;\n const inputCanonical = buildCanonicalUaid(\n uaidTargetFromParsed(parsed),\n parsed.id,\n canonicalizeNativeDomainParams(parsed.params),\n );\n\n const txtRecords = await this.dnsLookup(dnsName);\n if (txtRecords.length === 0) {\n return null;\n }\n\n const parsedRecords = txtRecords\n .map(record => parseSemicolonFields(record))\n .map(fields => validateRecordFields(fields, normalizedNativeId));\n const validRecords = parsedRecords.filter(\n (record): record is UaidDnsWebRecord => record !== null,\n );\n\n if (validRecords.length === 0) {\n return buildErrorProfile(\n uaid,\n 'ERR_INVALID_UAID_DNS_RECORD',\n 'DNS TXT payload at _uaid record is invalid.',\n { dnsName },\n );\n }\n\n const matchingRecords = validRecords.filter(\n record =>\n record.target === uaidTargetFromParsed(parsed) &&\n record.id === parsed.id &&\n record.reconstructedUaid === inputCanonical,\n );\n\n if (matchingRecords.length === 0) {\n return buildErrorProfile(\n uaid,\n 'ERR_UAID_MISMATCH',\n 'DNS TXT payload does not match the input UAID after canonical reconstruction.',\n {\n dnsName,\n inputCanonical,\n },\n );\n }\n\n const selected = [...matchingRecords].sort((a, b) =>\n a.reconstructedUaid.localeCompare(b.reconstructedUaid),\n )[0];\n\n const dnssecValidated = this.dnssecValidation\n ? await this.dnssecValidation(dnsName)\n : false;\n const verificationLevel = dnssecValidated\n ? 'dns-binding-dnssec'\n : 'dns-binding';\n\n if (this.enableFollowupResolution) {\n const followupProfiles = selectFollowupProfiles(selected.target);\n for (const followupProfileId of followupProfiles) {\n const followup = await context.resolveUaidProfileById(\n followupProfileId,\n uaid,\n );\n if (!followup) {\n continue;\n }\n if (followup.error || followup.metadata?.resolved === false) {\n return buildErrorProfile(\n uaid,\n 'ERR_FOLLOWUP_RESOLUTION_FAILED',\n 'Follow-up profile resolution failed after successful DNS binding.',\n {\n followupProfileId,\n dnsName,\n },\n );\n }\n return {\n ...followup,\n metadata: {\n ...followup.metadata,\n profile: UAID_DNS_WEB_PROFILE_ID,\n resolved: true,\n verificationLevel,\n reconstructedUaid: selected.reconstructedUaid,\n selectedFollowupProfile: followupProfileId,\n resolutionMode: 'full-resolution',\n },\n };\n }\n }\n\n if (this.requireFullResolution) {\n return buildErrorProfile(\n uaid,\n 'ERR_NO_FOLLOWUP_PROFILE',\n 'Resolver policy requires full resolution, but no supported follow-up profile was available.',\n { dnsName },\n );\n }\n\n const did = selected.did ?? context.did ?? undefined;\n const alsoKnownAs = did ? [did] : undefined;\n\n return {\n id: uaid,\n did,\n alsoKnownAs,\n metadata: {\n profile: UAID_DNS_WEB_PROFILE_ID,\n resolved: true,\n reconstructedUaid: selected.reconstructedUaid,\n verificationLevel,\n resolutionMode: 'dns-binding-only',\n },\n };\n }\n}\n"],"names":[],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"standards-sdk.es62.js","sources":["../../src/hcs-14/resolvers/aid-dns-web-profile.ts"],"sourcesContent":["import type {\n DidResolutionProfile,\n ProfileResolutionError,\n UaidProfileResolver,\n UaidProfileResolverContext,\n} from './types';\nimport type { AdapterMeta } from '../adapters/types';\nimport { nodeDnsTxtLookup, type DnsTxtLookup } from './dns';\nimport { isFqdn, normalizeDomain, parseSemicolonFields } from './profile-utils';\n\nexport const AID_DNS_WEB_PROFILE_ID = 'hcs-14.profile.aid-dns-web';\n\ninterface AidDnsRecord {\n version: string;\n protocol: string;\n endpoint: string;\n publicKey?: string;\n keyId?: string;\n}\n\ninterface AidDnsRecordParseError {\n code: 'ERR_INVALID_AID_RECORD' | 'ERR_ENDPOINT_INVALID';\n}\n\ninterface AidDnsRecordParseSuccess {\n record: AidDnsRecord;\n}\n\ntype AidDnsRecordParseResult =\n | AidDnsRecordParseError\n | AidDnsRecordParseSuccess;\n\ninterface AidDnsVerificationInput {\n uaid: string;\n protocol: string;\n endpoint: string;\n record: AidDnsRecord;\n}\n\ntype AidDnsVerification = (input: AidDnsVerificationInput) => Promise<boolean>;\n\nexport interface AidDnsWebResolverOptions {\n dnsLookup?: DnsTxtLookup;\n supportedUriSchemes?: string[];\n metadataVerifier?: AidDnsVerification;\n cryptographicVerifier?: AidDnsVerification;\n}\n\nfunction buildErrorProfile(\n uaid: string,\n code: string,\n message: string,\n details?: Record<string, unknown>,\n): DidResolutionProfile {\n const error: ProfileResolutionError = {\n code,\n message,\n details,\n };\n\n return {\n id: uaid,\n error,\n metadata: {\n profile: AID_DNS_WEB_PROFILE_ID,\n resolved: false,\n },\n };\n}\n\nfunction parseRecord(\n rawRecord: string,\n supportedSchemes: Set<string>,\n): AidDnsRecordParseResult {\n const fields = parseSemicolonFields(rawRecord);\n const version = fields['v'];\n const protocol = fields['p'] ?? fields['proto'];\n const endpoint = fields['u'];\n\n if (!version || !protocol || !endpoint) {\n return { code: 'ERR_INVALID_AID_RECORD' };\n }\n if (!version.toLowerCase().startsWith('aid')) {\n return { code: 'ERR_INVALID_AID_RECORD' };\n }\n\n let parsedUrl: URL;\n try {\n parsedUrl = new URL(endpoint);\n } catch {\n return { code: 'ERR_ENDPOINT_INVALID' };\n }\n\n const scheme = parsedUrl.protocol.replace(/:$/, '').toLowerCase();\n if (!supportedSchemes.has(scheme)) {\n return { code: 'ERR_ENDPOINT_INVALID' };\n }\n\n return {\n record: {\n version,\n protocol,\n endpoint: parsedUrl.toString(),\n publicKey: fields['k'],\n keyId: fields['i'],\n },\n };\n}\n\nfunction deterministicRecordKey(record: AidDnsRecord): string {\n return `${record.protocol}|${record.endpoint}|${record.publicKey ?? ''}|${record.keyId ?? ''}`;\n}\n\nfunction verificationMethodForLevel(\n verificationLevel: 'none' | 'metadata' | 'cryptographic',\n): 'aid-pka' | 'metadata-match' | undefined {\n if (verificationLevel === 'cryptographic') {\n return 'aid-pka';\n }\n if (verificationLevel === 'metadata') {\n return 'metadata-match';\n }\n return undefined;\n}\n\nexport class AidDnsWebProfileResolver implements UaidProfileResolver {\n readonly adapterKind: 'uaid-profile-resolver' = 'uaid-profile-resolver';\n readonly profile = AID_DNS_WEB_PROFILE_ID;\n\n readonly meta: AdapterMeta = {\n id: 'hcs-14/aid-dns-web',\n didMethods: ['*'],\n displayName: 'HCS-14 AID DNS/Web Profile',\n description:\n 'Resolves uaid:aid identifiers via _agent.<nativeId> DNS TXT records and protocol endpoint hints.',\n };\n\n private readonly dnsLookup: DnsTxtLookup;\n private readonly supportedSchemes: Set<string>;\n private readonly metadataVerifier?: AidDnsVerification;\n private readonly cryptographicVerifier?: AidDnsVerification;\n\n constructor(options: AidDnsWebResolverOptions = {}) {\n this.dnsLookup = options.dnsLookup ?? nodeDnsTxtLookup;\n this.supportedSchemes = new Set(\n (options.supportedUriSchemes ?? ['https', 'http', 'wss', 'ws']).map(\n scheme => scheme.toLowerCase(),\n ),\n );\n this.metadataVerifier = options.metadataVerifier;\n this.cryptographicVerifier = options.cryptographicVerifier;\n }\n\n supports(\n _uaid: string,\n parsed: UaidProfileResolverContext['parsedUaid'],\n ): boolean {\n if (parsed.method !== 'aid') {\n return false;\n }\n const nativeId = parsed.params['nativeId'];\n return !!nativeId && isFqdn(nativeId);\n }\n\n async resolveProfile(\n uaid: string,\n context: UaidProfileResolverContext,\n ): Promise<DidResolutionProfile | null> {\n const parsed = context.parsedUaid;\n if (parsed.method !== 'aid') {\n return buildErrorProfile(\n uaid,\n 'ERR_NOT_APPLICABLE',\n 'AID DNS/Web profile only applies to uaid:aid identifiers.',\n );\n }\n\n const nativeId = parsed.params['nativeId'];\n if (!nativeId || !isFqdn(nativeId)) {\n return buildErrorProfile(\n uaid,\n 'ERR_NOT_APPLICABLE',\n 'AID DNS/Web profile requires an FQDN nativeId.',\n );\n }\n\n const normalizedNativeId = normalizeDomain(nativeId);\n const dnsName = `_agent.${normalizedNativeId}`;\n const txtRecords = await this.dnsLookup(dnsName);\n if (txtRecords.length === 0) {\n return buildErrorProfile(\n uaid,\n 'ERR_NO_DNS_RECORD',\n 'No AID DNS TXT record was found for the requested nativeId.',\n { dnsName },\n );\n }\n\n const parsedRecords = txtRecords.map(record =>\n parseRecord(record, this.supportedSchemes),\n );\n const validRecords = parsedRecords\n .filter(\n (result): result is AidDnsRecordParseSuccess => 'record' in result,\n )\n .map(result => result.record);\n\n if (validRecords.length === 0) {\n const endpointInvalid = parsedRecords.some(\n result =>\n !('record' in result) && result.code === 'ERR_ENDPOINT_INVALID',\n );\n return buildErrorProfile(\n uaid,\n endpointInvalid ? 'ERR_ENDPOINT_INVALID' : 'ERR_INVALID_AID_RECORD',\n endpointInvalid\n ? 'AID DNS record endpoint URI is invalid or unsupported.'\n : 'AID DNS TXT payload is malformed or unsupported.',\n { dnsName },\n );\n }\n\n const selectedRecord = [...validRecords].sort((a, b) =>\n deterministicRecordKey(a).localeCompare(deterministicRecordKey(b)),\n )[0];\n\n const verificationInput: AidDnsVerificationInput = {\n uaid,\n protocol: selectedRecord.protocol,\n endpoint: selectedRecord.endpoint,\n record: selectedRecord,\n };\n\n let verificationLevel: 'none' | 'metadata' | 'cryptographic' = 'none';\n\n if (this.metadataVerifier) {\n const metadataVerified = await this.metadataVerifier(verificationInput);\n if (!metadataVerified) {\n return buildErrorProfile(\n uaid,\n 'ERR_VERIFICATION_FAILED',\n 'AID metadata verification failed.',\n { dnsName },\n );\n }\n verificationLevel = 'metadata';\n }\n\n if (selectedRecord.publicKey && this.cryptographicVerifier) {\n const cryptographicVerified =\n await this.cryptographicVerifier(verificationInput);\n if (!cryptographicVerified) {\n return buildErrorProfile(\n uaid,\n 'ERR_VERIFICATION_FAILED',\n 'AID cryptographic verification failed.',\n { dnsName },\n );\n }\n verificationLevel = 'cryptographic';\n }\n\n const did = context.did ?? undefined;\n const alsoKnownAs = did ? [did] : undefined;\n\n return {\n id: uaid,\n did,\n alsoKnownAs,\n service: [\n {\n id: `${uaid}#aid-endpoint`,\n type: 'AIDService',\n serviceEndpoint: selectedRecord.endpoint,\n },\n ],\n metadata: {\n profile: AID_DNS_WEB_PROFILE_ID,\n resolved: true,\n endpoint: selectedRecord.endpoint,\n protocol: selectedRecord.protocol,\n verification: {\n level: verificationLevel,\n method: verificationMethodForLevel(verificationLevel),\n },\n verificationLevel,\n precedenceSource: 'dns',\n },\n };\n }\n}\n"],"names":[],"mappings":"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"}
|
|
@@ -1,32 +1,8 @@
|
|
|
1
|
-
import {
|
|
2
|
-
|
|
3
|
-
|
|
4
|
-
|
|
5
|
-
|
|
6
|
-
const decoded = Buffer.from(bytes).toString("utf8").trim();
|
|
7
|
-
return decoded || null;
|
|
8
|
-
} catch {
|
|
9
|
-
return null;
|
|
10
|
-
}
|
|
11
|
-
}
|
|
12
|
-
function buildHintedService(uaid, params) {
|
|
13
|
-
const proto = params["proto"];
|
|
14
|
-
const nativeId = params["nativeId"];
|
|
15
|
-
const domain = params["domain"];
|
|
16
|
-
if (!proto && !nativeId && !domain) {
|
|
17
|
-
return null;
|
|
18
|
-
}
|
|
19
|
-
return {
|
|
20
|
-
id: `${uaid}#hcs14-hinted-service-1`,
|
|
21
|
-
type: "HintedService",
|
|
22
|
-
serviceEndpoint: {
|
|
23
|
-
source: "uaid-parameters",
|
|
24
|
-
proto,
|
|
25
|
-
nativeId,
|
|
26
|
-
domain
|
|
27
|
-
}
|
|
28
|
-
};
|
|
29
|
-
}
|
|
1
|
+
import { nodeDnsTxtLookup } from "./standards-sdk.es66.js";
|
|
2
|
+
import { isFqdn, normalizeDomain } from "./standards-sdk.es159.js";
|
|
3
|
+
import { normalizeAnsVersion, isValidAnsProfileVersion, parseAnsDnsTxtRecord, toErrorMessage, parseAnsAgentCard, extractEndpointCandidates, selectPreferredEndpoint } from "./standards-sdk.es160.js";
|
|
4
|
+
const ANS_DNS_WEB_PROFILE_ID = "hcs-14.profile.ans-dns-web";
|
|
5
|
+
const UAID_UNSPECIFIED_PARAM_VALUE = "0";
|
|
30
6
|
function buildErrorProfile(uaid, code, message, details) {
|
|
31
7
|
const error = {
|
|
32
8
|
code,
|
|
@@ -37,98 +13,275 @@ function buildErrorProfile(uaid, code, message, details) {
|
|
|
37
13
|
id: uaid,
|
|
38
14
|
error,
|
|
39
15
|
metadata: {
|
|
40
|
-
profile:
|
|
16
|
+
profile: ANS_DNS_WEB_PROFILE_ID,
|
|
41
17
|
resolved: false
|
|
42
18
|
}
|
|
43
19
|
};
|
|
44
20
|
}
|
|
45
|
-
function
|
|
46
|
-
|
|
47
|
-
|
|
21
|
+
async function defaultFetchJson(url) {
|
|
22
|
+
if (typeof globalThis.fetch !== "function") {
|
|
23
|
+
throw new Error("Fetch API is unavailable in this runtime.");
|
|
24
|
+
}
|
|
25
|
+
const response = await globalThis.fetch(url, {
|
|
26
|
+
method: "GET",
|
|
27
|
+
headers: {
|
|
28
|
+
accept: "application/json"
|
|
29
|
+
}
|
|
30
|
+
});
|
|
31
|
+
if (!response.ok) {
|
|
32
|
+
throw new Error(
|
|
33
|
+
`Agent Card request failed with status ${response.status}.`
|
|
34
|
+
);
|
|
35
|
+
}
|
|
36
|
+
return response.json();
|
|
37
|
+
}
|
|
38
|
+
function isUnspecifiedUaidParamValue(value) {
|
|
39
|
+
return !value || value === UAID_UNSPECIFIED_PARAM_VALUE;
|
|
48
40
|
}
|
|
49
|
-
|
|
50
|
-
|
|
51
|
-
|
|
41
|
+
function selectDeterministicAnsDnsRecord(records) {
|
|
42
|
+
return [...records].sort((a, b) => a.url.localeCompare(b.url))[0];
|
|
43
|
+
}
|
|
44
|
+
class AnsDnsWebProfileResolver {
|
|
45
|
+
constructor(options = {}) {
|
|
46
|
+
this.adapterKind = "uaid-profile-resolver";
|
|
47
|
+
this.profile = ANS_DNS_WEB_PROFILE_ID;
|
|
52
48
|
this.meta = {
|
|
53
|
-
id: "hcs-14/
|
|
49
|
+
id: "hcs-14/ans-dns-web",
|
|
54
50
|
didMethods: ["*"],
|
|
55
|
-
displayName: "HCS-14
|
|
56
|
-
description: "Resolves uaid:
|
|
51
|
+
displayName: "HCS-14 ANS DNS/Web Profile",
|
|
52
|
+
description: "Resolves ANS uaid:aid identifiers via _ans.<nativeId> TXT records and Agent Card endpoint selection."
|
|
57
53
|
};
|
|
54
|
+
this.dnsLookup = options.dnsLookup ?? nodeDnsTxtLookup;
|
|
55
|
+
this.fetchJson = options.fetchJson ?? defaultFetchJson;
|
|
56
|
+
this.supportedSchemes = new Set(
|
|
57
|
+
(options.supportedUriSchemes ?? ["https", "wss"]).map(
|
|
58
|
+
(scheme) => scheme.toLowerCase()
|
|
59
|
+
)
|
|
60
|
+
);
|
|
61
|
+
this.transparencyVerifier = options.transparencyVerifier;
|
|
58
62
|
}
|
|
59
63
|
supports(_uaid, parsed) {
|
|
60
|
-
|
|
64
|
+
if (parsed.method !== "aid") {
|
|
65
|
+
return false;
|
|
66
|
+
}
|
|
67
|
+
if (parsed.params["registry"] !== "ans") {
|
|
68
|
+
return false;
|
|
69
|
+
}
|
|
70
|
+
const nativeId = parsed.params["nativeId"];
|
|
71
|
+
return !!nativeId && isFqdn(nativeId);
|
|
61
72
|
}
|
|
62
73
|
async resolveProfile(uaid, context) {
|
|
63
74
|
const parsed = context.parsedUaid;
|
|
64
|
-
if (parsed.method !== "
|
|
75
|
+
if (parsed.method !== "aid") {
|
|
76
|
+
return buildErrorProfile(
|
|
77
|
+
uaid,
|
|
78
|
+
"ERR_NOT_APPLICABLE",
|
|
79
|
+
"ANS profile only applies to uaid:aid identifiers."
|
|
80
|
+
);
|
|
81
|
+
}
|
|
82
|
+
if (parsed.params["registry"] !== "ans") {
|
|
83
|
+
return buildErrorProfile(
|
|
84
|
+
uaid,
|
|
85
|
+
"ERR_NOT_APPLICABLE",
|
|
86
|
+
"ANS profile requires registry=ans."
|
|
87
|
+
);
|
|
88
|
+
}
|
|
89
|
+
const nativeId = parsed.params["nativeId"];
|
|
90
|
+
if (!nativeId || !isFqdn(nativeId)) {
|
|
91
|
+
return buildErrorProfile(
|
|
92
|
+
uaid,
|
|
93
|
+
"ERR_NOT_APPLICABLE",
|
|
94
|
+
"ANS profile requires an FQDN nativeId."
|
|
95
|
+
);
|
|
96
|
+
}
|
|
97
|
+
const uid = parsed.params["uid"];
|
|
98
|
+
if (isUnspecifiedUaidParamValue(uid)) {
|
|
99
|
+
return buildErrorProfile(
|
|
100
|
+
uaid,
|
|
101
|
+
"ERR_NOT_APPLICABLE",
|
|
102
|
+
"ANS profile requires a non-zero uid parameter."
|
|
103
|
+
);
|
|
104
|
+
}
|
|
105
|
+
const protocol = parsed.params["proto"];
|
|
106
|
+
if (isUnspecifiedUaidParamValue(protocol)) {
|
|
107
|
+
return buildErrorProfile(
|
|
108
|
+
uaid,
|
|
109
|
+
"ERR_PROTOCOL_UNSPECIFIED",
|
|
110
|
+
"ANS profile requires a usable proto parameter."
|
|
111
|
+
);
|
|
112
|
+
}
|
|
113
|
+
const uaidVersion = parsed.params["version"];
|
|
114
|
+
const normalizedUaidVersion = uaidVersion === void 0 ? void 0 : normalizeAnsVersion(uaidVersion);
|
|
115
|
+
if (uaidVersion !== void 0 && !isValidAnsProfileVersion(uaidVersion)) {
|
|
116
|
+
return buildErrorProfile(
|
|
117
|
+
uaid,
|
|
118
|
+
"ERR_NOT_APPLICABLE",
|
|
119
|
+
"ANS profile requires a valid semver version parameter when provided."
|
|
120
|
+
);
|
|
121
|
+
}
|
|
122
|
+
const normalizedNativeId = normalizeDomain(nativeId);
|
|
123
|
+
const dnsName = `_ans.${normalizedNativeId}`;
|
|
124
|
+
const txtRecords = await this.dnsLookup(dnsName);
|
|
125
|
+
if (txtRecords.length === 0) {
|
|
126
|
+
return buildErrorProfile(
|
|
127
|
+
uaid,
|
|
128
|
+
"ERR_NO_DNS_RECORD",
|
|
129
|
+
"No ANS DNS TXT record was found for the requested nativeId.",
|
|
130
|
+
{ dnsName }
|
|
131
|
+
);
|
|
132
|
+
}
|
|
133
|
+
const validTxtRecords = txtRecords.map((record) => parseAnsDnsTxtRecord(record)).filter((record) => record !== null);
|
|
134
|
+
if (validTxtRecords.length === 0) {
|
|
65
135
|
return buildErrorProfile(
|
|
66
136
|
uaid,
|
|
67
|
-
"
|
|
68
|
-
"
|
|
69
|
-
{
|
|
137
|
+
"ERR_INVALID_ANS_RECORD",
|
|
138
|
+
"ANS DNS TXT payload is malformed or unsupported.",
|
|
139
|
+
{ dnsName }
|
|
70
140
|
);
|
|
71
141
|
}
|
|
72
|
-
|
|
73
|
-
|
|
74
|
-
|
|
75
|
-
|
|
142
|
+
let matchingVersionRecords = validTxtRecords;
|
|
143
|
+
if (normalizedUaidVersion) {
|
|
144
|
+
const recordsWithVersion = validTxtRecords.filter((record) => {
|
|
145
|
+
return record.version !== void 0;
|
|
146
|
+
});
|
|
147
|
+
if (recordsWithVersion.length === 0) {
|
|
148
|
+
return buildErrorProfile(
|
|
149
|
+
uaid,
|
|
150
|
+
"ERR_VERSION_MISMATCH",
|
|
151
|
+
"UAID specifies a version but no ANS DNS TXT record carries a version field.",
|
|
152
|
+
{ dnsName, uaidVersion: normalizedUaidVersion }
|
|
153
|
+
);
|
|
154
|
+
}
|
|
155
|
+
matchingVersionRecords = recordsWithVersion.filter((record) => {
|
|
156
|
+
return record.version === normalizedUaidVersion;
|
|
157
|
+
});
|
|
158
|
+
if (matchingVersionRecords.length === 0) {
|
|
159
|
+
return buildErrorProfile(
|
|
160
|
+
uaid,
|
|
161
|
+
"ERR_VERSION_MISMATCH",
|
|
162
|
+
"UAID version does not match ANS DNS TXT record version.",
|
|
163
|
+
{ dnsName, uaidVersion: normalizedUaidVersion }
|
|
164
|
+
);
|
|
165
|
+
}
|
|
166
|
+
}
|
|
167
|
+
const selectedRecord = selectDeterministicAnsDnsRecord(
|
|
168
|
+
matchingVersionRecords
|
|
169
|
+
);
|
|
170
|
+
let agentCardPayload;
|
|
171
|
+
try {
|
|
172
|
+
agentCardPayload = await this.fetchJson(selectedRecord.url);
|
|
173
|
+
} catch (error) {
|
|
174
|
+
return buildErrorProfile(
|
|
175
|
+
uaid,
|
|
176
|
+
"ERR_AGENT_CARD_INVALID",
|
|
177
|
+
"Agent Card retrieval failed.",
|
|
178
|
+
{
|
|
179
|
+
stage: "fetch",
|
|
180
|
+
agentCardUrl: selectedRecord.url,
|
|
181
|
+
reason: toErrorMessage(error)
|
|
182
|
+
}
|
|
183
|
+
);
|
|
184
|
+
}
|
|
185
|
+
const agentCard = parseAnsAgentCard(agentCardPayload);
|
|
186
|
+
if (!agentCard) {
|
|
76
187
|
return buildErrorProfile(
|
|
77
188
|
uaid,
|
|
78
|
-
"
|
|
79
|
-
"
|
|
80
|
-
{
|
|
189
|
+
"ERR_AGENT_CARD_INVALID",
|
|
190
|
+
"Agent Card is missing required fields.",
|
|
191
|
+
{ stage: "validate", agentCardUrl: selectedRecord.url }
|
|
81
192
|
);
|
|
82
193
|
}
|
|
83
|
-
|
|
84
|
-
if (!didDocument) {
|
|
194
|
+
if (agentCard.ansName !== uid) {
|
|
85
195
|
return buildErrorProfile(
|
|
86
196
|
uaid,
|
|
87
|
-
"
|
|
88
|
-
"
|
|
89
|
-
{
|
|
197
|
+
"ERR_AGENT_CARD_INVALID",
|
|
198
|
+
"Agent Card ansName does not match UAID uid.",
|
|
199
|
+
{
|
|
200
|
+
stage: "validate",
|
|
201
|
+
expectedUid: uid,
|
|
202
|
+
actualAnsName: agentCard.ansName
|
|
203
|
+
}
|
|
90
204
|
);
|
|
91
205
|
}
|
|
92
|
-
|
|
206
|
+
const endpointCandidates = extractEndpointCandidates(
|
|
207
|
+
agentCard.endpoints,
|
|
208
|
+
this.supportedSchemes
|
|
209
|
+
);
|
|
210
|
+
const anchoredCandidates = endpointCandidates.filter((candidate) => {
|
|
211
|
+
return normalizeDomain(candidate.parsedUrl.hostname) === normalizedNativeId;
|
|
212
|
+
});
|
|
213
|
+
if (anchoredCandidates.length === 0) {
|
|
93
214
|
return buildErrorProfile(
|
|
94
215
|
uaid,
|
|
95
|
-
"
|
|
96
|
-
"
|
|
97
|
-
{
|
|
216
|
+
"ERR_ENDPOINT_NOT_ANCHORED",
|
|
217
|
+
"No endpoint URL is anchored to the UAID nativeId host.",
|
|
218
|
+
{
|
|
219
|
+
nativeId: normalizedNativeId
|
|
220
|
+
}
|
|
98
221
|
);
|
|
99
222
|
}
|
|
100
|
-
const
|
|
101
|
-
|
|
102
|
-
|
|
103
|
-
|
|
223
|
+
const selectedEndpoint = selectPreferredEndpoint(anchoredCandidates, protocol) ?? anchoredCandidates[0];
|
|
224
|
+
let transparencyAttempted = false;
|
|
225
|
+
let transparencySucceeded = false;
|
|
226
|
+
if (this.transparencyVerifier) {
|
|
227
|
+
transparencyAttempted = true;
|
|
228
|
+
transparencySucceeded = await this.transparencyVerifier({
|
|
229
|
+
uaid,
|
|
230
|
+
protocol,
|
|
231
|
+
endpoint: selectedEndpoint.endpointUrl,
|
|
232
|
+
agentCardUrl: selectedRecord.url,
|
|
233
|
+
transparencyHints: agentCard.transparencyHints
|
|
234
|
+
});
|
|
235
|
+
if (!transparencySucceeded) {
|
|
236
|
+
return buildErrorProfile(
|
|
237
|
+
uaid,
|
|
238
|
+
"ERR_TRANSPARENCY_VERIFICATION_FAILED",
|
|
239
|
+
"Transparency verification failed.",
|
|
240
|
+
{
|
|
241
|
+
agentCardUrl: selectedRecord.url
|
|
242
|
+
}
|
|
243
|
+
);
|
|
244
|
+
}
|
|
245
|
+
}
|
|
246
|
+
const did = context.did ?? void 0;
|
|
247
|
+
const alsoKnownAs = did ? [did] : void 0;
|
|
248
|
+
const verificationLevel = transparencySucceeded ? "cryptographic" : "metadata";
|
|
249
|
+
const verificationMethod = transparencySucceeded ? "ans-transparency" : "metadata-match";
|
|
104
250
|
return {
|
|
105
251
|
id: uaid,
|
|
106
|
-
did
|
|
107
|
-
alsoKnownAs
|
|
108
|
-
|
|
109
|
-
|
|
110
|
-
|
|
111
|
-
|
|
252
|
+
did,
|
|
253
|
+
alsoKnownAs,
|
|
254
|
+
service: [
|
|
255
|
+
{
|
|
256
|
+
id: `${uaid}#ans-endpoint`,
|
|
257
|
+
type: "ANSService",
|
|
258
|
+
serviceEndpoint: selectedEndpoint.endpointUrl
|
|
259
|
+
}
|
|
260
|
+
],
|
|
112
261
|
metadata: {
|
|
113
|
-
profile:
|
|
262
|
+
profile: ANS_DNS_WEB_PROFILE_ID,
|
|
114
263
|
resolved: true,
|
|
115
|
-
|
|
116
|
-
|
|
264
|
+
endpoint: selectedEndpoint.endpointUrl,
|
|
265
|
+
protocol,
|
|
266
|
+
precedenceSource: "dns",
|
|
117
267
|
verification: {
|
|
118
|
-
|
|
119
|
-
|
|
120
|
-
details: "Validated according to base DID method rules"
|
|
268
|
+
level: verificationLevel,
|
|
269
|
+
method: verificationMethod
|
|
121
270
|
},
|
|
122
|
-
|
|
123
|
-
|
|
124
|
-
|
|
271
|
+
verificationLevel,
|
|
272
|
+
agentCardUrl: selectedRecord.url,
|
|
273
|
+
dnsRecordSelection: "lexicographically-smallest-url",
|
|
274
|
+
transparencyHints: agentCard.transparencyHints,
|
|
275
|
+
transparencyVerification: {
|
|
276
|
+
attempted: transparencyAttempted,
|
|
277
|
+
succeeded: transparencySucceeded
|
|
125
278
|
}
|
|
126
279
|
}
|
|
127
280
|
};
|
|
128
281
|
}
|
|
129
282
|
}
|
|
130
283
|
export {
|
|
131
|
-
|
|
132
|
-
|
|
284
|
+
ANS_DNS_WEB_PROFILE_ID,
|
|
285
|
+
AnsDnsWebProfileResolver
|
|
133
286
|
};
|
|
134
287
|
//# sourceMappingURL=standards-sdk.es63.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"standards-sdk.es63.js","sources":["../../src/hcs-14/resolvers/uaid-did-resolution-profile.ts"],"sourcesContent":["import { multibaseB58btcDecode } from '../base58';\nimport type {\n DidResolutionProfile,\n HintedServiceEndpoint,\n ProfileResolutionError,\n UaidProfileResolver,\n UaidProfileResolverContext,\n} from './types';\nimport type { AdapterMeta } from '../adapters/types';\n\nexport const UAID_DID_RESOLUTION_PROFILE_ID =\n 'hcs-14.profile.uaid-did-resolution';\n\nfunction decodeSrcDid(src: string): string | null {\n try {\n const bytes = multibaseB58btcDecode(src);\n const decoded = Buffer.from(bytes).toString('utf8').trim();\n return decoded || null;\n } catch {\n return null;\n }\n}\n\nfunction buildHintedService(\n uaid: string,\n params: Record<string, string>,\n): {\n id: string;\n type: string;\n serviceEndpoint: HintedServiceEndpoint;\n} | null {\n const proto = params['proto'];\n const nativeId = params['nativeId'];\n const domain = params['domain'];\n if (!proto && !nativeId && !domain) {\n return null;\n }\n return {\n id: `${uaid}#hcs14-hinted-service-1`,\n type: 'HintedService',\n serviceEndpoint: {\n source: 'uaid-parameters',\n proto,\n nativeId,\n domain,\n },\n };\n}\n\nfunction buildErrorProfile(\n uaid: string,\n code: string,\n message: string,\n details?: Record<string, unknown>,\n): DidResolutionProfile {\n const error: ProfileResolutionError = {\n code,\n message,\n details,\n };\n\n return {\n id: uaid,\n error,\n metadata: {\n profile: UAID_DID_RESOLUTION_PROFILE_ID,\n resolved: false,\n },\n };\n}\n\nfunction dedupeAlsoKnownAs(baseDid: string, existing: string[] = []): string[] {\n const values = new Set<string>([baseDid, ...existing]);\n return [...values];\n}\n\nexport class UaidDidResolutionProfileResolver implements UaidProfileResolver {\n readonly profile = UAID_DID_RESOLUTION_PROFILE_ID;\n\n readonly meta: AdapterMeta = {\n id: 'hcs-14/uaid-did-resolution',\n didMethods: ['*'],\n displayName: 'HCS-14 UAID DID Resolution Profile',\n description:\n 'Resolves uaid:did identifiers to DID Document-compatible output with profile metadata.',\n };\n\n supports(\n _uaid: string,\n parsed: UaidProfileResolverContext['parsedUaid'],\n ): boolean {\n return parsed.method === 'uaid';\n }\n\n async resolveProfile(\n uaid: string,\n context: UaidProfileResolverContext,\n ): Promise<DidResolutionProfile | null> {\n const parsed = context.parsedUaid;\n if (parsed.method !== 'uaid') {\n return buildErrorProfile(\n uaid,\n 'ERR_INVALID_UAID',\n 'Identifier is not uaid:did and cannot be resolved by this profile.',\n { uaid },\n );\n }\n\n const src = parsed.params['src'];\n const srcDid = src ? decodeSrcDid(src) : null;\n const baseDid = srcDid ?? context.did ?? null;\n\n if (!baseDid) {\n return buildErrorProfile(\n uaid,\n 'ERR_BASE_DID_UNDETERMINED',\n 'Unable to determine base DID; provide src parameter or configure method inference.',\n { uaid },\n );\n }\n\n const didDocument =\n context.didDocument && context.didDocument.id === baseDid\n ? context.didDocument\n : await context.resolveDid(baseDid);\n\n if (!didDocument) {\n return buildErrorProfile(\n uaid,\n 'ERR_DID_RESOLUTION_FAILED',\n 'Base DID resolution failed.',\n { uaid, baseDid },\n );\n }\n\n if (!didDocument.id || typeof didDocument.id !== 'string') {\n return buildErrorProfile(\n uaid,\n 'ERR_DID_DOCUMENT_INVALID',\n 'Resolved DID document is malformed.',\n { uaid, baseDid },\n );\n }\n\n const baseServices = didDocument.service ?? [];\n const hintedService = buildHintedService(uaid, parsed.params);\n const includeHintedService =\n baseServices.length === 0 && hintedService !== null;\n const service = includeHintedService\n ? [...baseServices, hintedService]\n : baseServices;\n\n return {\n id: uaid,\n did: baseDid,\n alsoKnownAs: dedupeAlsoKnownAs(baseDid, didDocument.alsoKnownAs),\n verificationMethod: didDocument.verificationMethod,\n authentication: didDocument.authentication,\n assertionMethod: didDocument.assertionMethod,\n service: service.length > 0 ? service : undefined,\n metadata: {\n profile: UAID_DID_RESOLUTION_PROFILE_ID,\n resolved: true,\n baseDid,\n baseDidResolved: true,\n verification: {\n method: 'did-resolution',\n assurance: 'base-method',\n details: 'Validated according to base DID method rules',\n },\n services: {\n copiedFromBaseDidDocument: baseServices.length > 0,\n derivedFromUaidParameters: includeHintedService,\n },\n },\n };\n }\n}\n"],"names":[],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"standards-sdk.es63.js","sources":["../../src/hcs-14/resolvers/ans-dns-web-profile.ts"],"sourcesContent":["import type {\n DidResolutionProfile,\n ProfileResolutionError,\n ProfileResolutionTransparencyHints,\n UaidProfileResolver,\n UaidProfileResolverContext,\n} from './types';\nimport type { AdapterMeta } from '../adapters/types';\nimport { nodeDnsTxtLookup, type DnsTxtLookup } from './dns';\nimport { isFqdn, normalizeDomain } from './profile-utils';\nimport {\n parseAnsDnsTxtRecord,\n type AnsDnsTxtRecord,\n parseAnsAgentCard,\n extractEndpointCandidates,\n selectPreferredEndpoint,\n isValidAnsProfileVersion,\n normalizeAnsVersion,\n toErrorMessage,\n} from './ans-dns-web-profile-utils';\n\nexport const ANS_DNS_WEB_PROFILE_ID = 'hcs-14.profile.ans-dns-web';\n\nexport interface AnsTransparencyVerificationInput {\n uaid: string;\n protocol: string;\n endpoint: string;\n agentCardUrl: string;\n transparencyHints?: ProfileResolutionTransparencyHints;\n}\n\ntype AnsTransparencyVerifier = (\n input: AnsTransparencyVerificationInput,\n) => Promise<boolean>;\n\nexport interface AnsDnsWebResolverOptions {\n dnsLookup?: DnsTxtLookup;\n fetchJson?: (url: string) => Promise<unknown>;\n supportedUriSchemes?: string[];\n transparencyVerifier?: AnsTransparencyVerifier;\n}\n\nconst UAID_UNSPECIFIED_PARAM_VALUE = '0';\n\nfunction buildErrorProfile(\n uaid: string,\n code: string,\n message: string,\n details?: Record<string, unknown>,\n): DidResolutionProfile {\n const error: ProfileResolutionError = {\n code,\n message,\n details,\n };\n\n return {\n id: uaid,\n error,\n metadata: {\n profile: ANS_DNS_WEB_PROFILE_ID,\n resolved: false,\n },\n };\n}\n\nasync function defaultFetchJson(url: string): Promise<unknown> {\n if (typeof globalThis.fetch !== 'function') {\n throw new Error('Fetch API is unavailable in this runtime.');\n }\n\n const response = await globalThis.fetch(url, {\n method: 'GET',\n headers: {\n accept: 'application/json',\n },\n });\n if (!response.ok) {\n throw new Error(\n `Agent Card request failed with status ${response.status}.`,\n );\n }\n return response.json();\n}\n\nfunction isUnspecifiedUaidParamValue(value: string | undefined): boolean {\n return !value || value === UAID_UNSPECIFIED_PARAM_VALUE;\n}\n\nfunction selectDeterministicAnsDnsRecord(\n records: AnsDnsTxtRecord[],\n): AnsDnsTxtRecord {\n return [...records].sort((a, b) => a.url.localeCompare(b.url))[0];\n}\n\nexport class AnsDnsWebProfileResolver implements UaidProfileResolver {\n readonly adapterKind: 'uaid-profile-resolver' = 'uaid-profile-resolver';\n readonly profile = ANS_DNS_WEB_PROFILE_ID;\n\n readonly meta: AdapterMeta = {\n id: 'hcs-14/ans-dns-web',\n didMethods: ['*'],\n displayName: 'HCS-14 ANS DNS/Web Profile',\n description:\n 'Resolves ANS uaid:aid identifiers via _ans.<nativeId> TXT records and Agent Card endpoint selection.',\n };\n\n private readonly dnsLookup: DnsTxtLookup;\n private readonly fetchJson: (url: string) => Promise<unknown>;\n private readonly supportedSchemes: Set<string>;\n private readonly transparencyVerifier?: AnsTransparencyVerifier;\n\n constructor(options: AnsDnsWebResolverOptions = {}) {\n this.dnsLookup = options.dnsLookup ?? nodeDnsTxtLookup;\n this.fetchJson = options.fetchJson ?? defaultFetchJson;\n this.supportedSchemes = new Set(\n (options.supportedUriSchemes ?? ['https', 'wss']).map(scheme =>\n scheme.toLowerCase(),\n ),\n );\n this.transparencyVerifier = options.transparencyVerifier;\n }\n\n supports(\n _uaid: string,\n parsed: UaidProfileResolverContext['parsedUaid'],\n ): boolean {\n if (parsed.method !== 'aid') {\n return false;\n }\n if (parsed.params['registry'] !== 'ans') {\n return false;\n }\n const nativeId = parsed.params['nativeId'];\n return !!nativeId && isFqdn(nativeId);\n }\n\n async resolveProfile(\n uaid: string,\n context: UaidProfileResolverContext,\n ): Promise<DidResolutionProfile | null> {\n const parsed = context.parsedUaid;\n if (parsed.method !== 'aid') {\n return buildErrorProfile(\n uaid,\n 'ERR_NOT_APPLICABLE',\n 'ANS profile only applies to uaid:aid identifiers.',\n );\n }\n if (parsed.params['registry'] !== 'ans') {\n return buildErrorProfile(\n uaid,\n 'ERR_NOT_APPLICABLE',\n 'ANS profile requires registry=ans.',\n );\n }\n\n const nativeId = parsed.params['nativeId'];\n if (!nativeId || !isFqdn(nativeId)) {\n return buildErrorProfile(\n uaid,\n 'ERR_NOT_APPLICABLE',\n 'ANS profile requires an FQDN nativeId.',\n );\n }\n\n const uid = parsed.params['uid'];\n if (isUnspecifiedUaidParamValue(uid)) {\n return buildErrorProfile(\n uaid,\n 'ERR_NOT_APPLICABLE',\n 'ANS profile requires a non-zero uid parameter.',\n );\n }\n\n const protocol = parsed.params['proto'];\n if (isUnspecifiedUaidParamValue(protocol)) {\n return buildErrorProfile(\n uaid,\n 'ERR_PROTOCOL_UNSPECIFIED',\n 'ANS profile requires a usable proto parameter.',\n );\n }\n const uaidVersion = parsed.params['version'];\n const normalizedUaidVersion =\n uaidVersion === undefined ? undefined : normalizeAnsVersion(uaidVersion);\n if (uaidVersion !== undefined && !isValidAnsProfileVersion(uaidVersion)) {\n return buildErrorProfile(\n uaid,\n 'ERR_NOT_APPLICABLE',\n 'ANS profile requires a valid semver version parameter when provided.',\n );\n }\n\n const normalizedNativeId = normalizeDomain(nativeId);\n const dnsName = `_ans.${normalizedNativeId}`;\n const txtRecords = await this.dnsLookup(dnsName);\n if (txtRecords.length === 0) {\n return buildErrorProfile(\n uaid,\n 'ERR_NO_DNS_RECORD',\n 'No ANS DNS TXT record was found for the requested nativeId.',\n { dnsName },\n );\n }\n\n const validTxtRecords = txtRecords\n .map(record => parseAnsDnsTxtRecord(record))\n .filter((record): record is AnsDnsTxtRecord => record !== null);\n if (validTxtRecords.length === 0) {\n return buildErrorProfile(\n uaid,\n 'ERR_INVALID_ANS_RECORD',\n 'ANS DNS TXT payload is malformed or unsupported.',\n { dnsName },\n );\n }\n\n let matchingVersionRecords = validTxtRecords;\n if (normalizedUaidVersion) {\n const recordsWithVersion = validTxtRecords.filter(record => {\n return record.version !== undefined;\n });\n if (recordsWithVersion.length === 0) {\n return buildErrorProfile(\n uaid,\n 'ERR_VERSION_MISMATCH',\n 'UAID specifies a version but no ANS DNS TXT record carries a version field.',\n { dnsName, uaidVersion: normalizedUaidVersion },\n );\n }\n matchingVersionRecords = recordsWithVersion.filter(record => {\n return record.version === normalizedUaidVersion;\n });\n if (matchingVersionRecords.length === 0) {\n return buildErrorProfile(\n uaid,\n 'ERR_VERSION_MISMATCH',\n 'UAID version does not match ANS DNS TXT record version.',\n { dnsName, uaidVersion: normalizedUaidVersion },\n );\n }\n }\n\n const selectedRecord = selectDeterministicAnsDnsRecord(\n matchingVersionRecords,\n );\n\n let agentCardPayload: unknown;\n try {\n agentCardPayload = await this.fetchJson(selectedRecord.url);\n } catch (error) {\n return buildErrorProfile(\n uaid,\n 'ERR_AGENT_CARD_INVALID',\n 'Agent Card retrieval failed.',\n {\n stage: 'fetch',\n agentCardUrl: selectedRecord.url,\n reason: toErrorMessage(error),\n },\n );\n }\n\n const agentCard = parseAnsAgentCard(agentCardPayload);\n if (!agentCard) {\n return buildErrorProfile(\n uaid,\n 'ERR_AGENT_CARD_INVALID',\n 'Agent Card is missing required fields.',\n { stage: 'validate', agentCardUrl: selectedRecord.url },\n );\n }\n if (agentCard.ansName !== uid) {\n return buildErrorProfile(\n uaid,\n 'ERR_AGENT_CARD_INVALID',\n 'Agent Card ansName does not match UAID uid.',\n {\n stage: 'validate',\n expectedUid: uid,\n actualAnsName: agentCard.ansName,\n },\n );\n }\n\n const endpointCandidates = extractEndpointCandidates(\n agentCard.endpoints,\n this.supportedSchemes,\n );\n const anchoredCandidates = endpointCandidates.filter(candidate => {\n return (\n normalizeDomain(candidate.parsedUrl.hostname) === normalizedNativeId\n );\n });\n if (anchoredCandidates.length === 0) {\n return buildErrorProfile(\n uaid,\n 'ERR_ENDPOINT_NOT_ANCHORED',\n 'No endpoint URL is anchored to the UAID nativeId host.',\n {\n nativeId: normalizedNativeId,\n },\n );\n }\n\n const selectedEndpoint =\n selectPreferredEndpoint(anchoredCandidates, protocol) ??\n anchoredCandidates[0]!;\n\n let transparencyAttempted = false;\n let transparencySucceeded = false;\n if (this.transparencyVerifier) {\n transparencyAttempted = true;\n transparencySucceeded = await this.transparencyVerifier({\n uaid,\n protocol,\n endpoint: selectedEndpoint.endpointUrl,\n agentCardUrl: selectedRecord.url,\n transparencyHints: agentCard.transparencyHints,\n });\n if (!transparencySucceeded) {\n return buildErrorProfile(\n uaid,\n 'ERR_TRANSPARENCY_VERIFICATION_FAILED',\n 'Transparency verification failed.',\n {\n agentCardUrl: selectedRecord.url,\n },\n );\n }\n }\n\n const did = context.did ?? undefined;\n const alsoKnownAs = did ? [did] : undefined;\n const verificationLevel: 'metadata' | 'cryptographic' =\n transparencySucceeded ? 'cryptographic' : 'metadata';\n const verificationMethod = transparencySucceeded\n ? 'ans-transparency'\n : 'metadata-match';\n\n return {\n id: uaid,\n did,\n alsoKnownAs,\n service: [\n {\n id: `${uaid}#ans-endpoint`,\n type: 'ANSService',\n serviceEndpoint: selectedEndpoint.endpointUrl,\n },\n ],\n metadata: {\n profile: ANS_DNS_WEB_PROFILE_ID,\n resolved: true,\n endpoint: selectedEndpoint.endpointUrl,\n protocol,\n precedenceSource: 'dns',\n verification: {\n level: verificationLevel,\n method: verificationMethod,\n },\n verificationLevel,\n agentCardUrl: selectedRecord.url,\n dnsRecordSelection: 'lexicographically-smallest-url',\n transparencyHints: agentCard.transparencyHints,\n transparencyVerification: {\n attempted: transparencyAttempted,\n succeeded: transparencySucceeded,\n },\n },\n };\n }\n}\n"],"names":[],"mappings":"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"}
|