@hashgraphonline/standards-sdk 0.1.168 → 0.1.170
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/README.md +1 -0
- package/dist/browser/hcs-11/client.d.ts.map +1 -1
- package/dist/browser/hcs-21/sdk.d.ts.map +1 -1
- package/dist/browser/hcs-27/base-client.d.ts +41 -0
- package/dist/browser/hcs-27/base-client.d.ts.map +1 -0
- package/dist/browser/hcs-27/index.d.ts +6 -0
- package/dist/browser/hcs-27/index.d.ts.map +1 -0
- package/dist/browser/hcs-27/memos.d.ts +5 -0
- package/dist/browser/hcs-27/memos.d.ts.map +1 -0
- package/dist/browser/hcs-27/merkle.d.ts +23 -0
- package/dist/browser/hcs-27/merkle.d.ts.map +1 -0
- package/dist/browser/hcs-27/sdk.d.ts +23 -0
- package/dist/browser/hcs-27/sdk.d.ts.map +1 -0
- package/dist/browser/hcs-27/types.d.ts +1611 -0
- package/dist/browser/hcs-27/types.d.ts.map +1 -0
- package/dist/browser/index.d.ts +1 -0
- package/dist/browser/index.d.ts.map +1 -1
- package/dist/browser/standards-sdk.browser.js +29 -5
- package/dist/browser/standards-sdk.browser.js.map +1 -1
- package/dist/browser/utils/key-type-detector.d.ts.map +1 -1
- package/dist/cjs/hcs-11/client.d.ts.map +1 -1
- package/dist/cjs/hcs-21/sdk.d.ts.map +1 -1
- package/dist/cjs/hcs-27/base-client.d.ts +41 -0
- package/dist/cjs/hcs-27/base-client.d.ts.map +1 -0
- package/dist/cjs/hcs-27/index.d.ts +6 -0
- package/dist/cjs/hcs-27/index.d.ts.map +1 -0
- package/dist/cjs/hcs-27/memos.d.ts +5 -0
- package/dist/cjs/hcs-27/memos.d.ts.map +1 -0
- package/dist/cjs/hcs-27/merkle.d.ts +23 -0
- package/dist/cjs/hcs-27/merkle.d.ts.map +1 -0
- package/dist/cjs/hcs-27/sdk.d.ts +23 -0
- package/dist/cjs/hcs-27/sdk.d.ts.map +1 -0
- package/dist/cjs/hcs-27/types.d.ts +1611 -0
- package/dist/cjs/hcs-27/types.d.ts.map +1 -0
- package/dist/cjs/index.d.ts +1 -0
- package/dist/cjs/index.d.ts.map +1 -1
- package/dist/cjs/standards-sdk.cjs +2 -2
- package/dist/cjs/standards-sdk.cjs.map +1 -1
- package/dist/cjs/utils/key-type-detector.d.ts.map +1 -1
- package/dist/es/hcs-11/client.d.ts.map +1 -1
- package/dist/es/hcs-21/sdk.d.ts.map +1 -1
- package/dist/es/hcs-27/base-client.d.ts +41 -0
- package/dist/es/hcs-27/base-client.d.ts.map +1 -0
- package/dist/es/hcs-27/index.d.ts +6 -0
- package/dist/es/hcs-27/index.d.ts.map +1 -0
- package/dist/es/hcs-27/memos.d.ts +5 -0
- package/dist/es/hcs-27/memos.d.ts.map +1 -0
- package/dist/es/hcs-27/merkle.d.ts +23 -0
- package/dist/es/hcs-27/merkle.d.ts.map +1 -0
- package/dist/es/hcs-27/sdk.d.ts +23 -0
- package/dist/es/hcs-27/sdk.d.ts.map +1 -0
- package/dist/es/hcs-27/types.d.ts +1611 -0
- package/dist/es/hcs-27/types.d.ts.map +1 -0
- package/dist/es/index.d.ts +1 -0
- package/dist/es/index.d.ts.map +1 -1
- package/dist/es/standards-sdk.es.js +67 -38
- package/dist/es/standards-sdk.es.js.map +1 -1
- package/dist/es/standards-sdk.es101.js +2 -2
- package/dist/es/standards-sdk.es103.js +2 -2
- package/dist/es/standards-sdk.es104.js +1 -1
- package/dist/es/standards-sdk.es106.js +1 -1
- package/dist/es/standards-sdk.es108.js +2 -2
- package/dist/es/standards-sdk.es11.js +1 -1
- package/dist/es/standards-sdk.es110.js +1 -1
- package/dist/es/standards-sdk.es111.js +2 -2
- package/dist/es/standards-sdk.es112.js +151 -234
- package/dist/es/standards-sdk.es112.js.map +1 -1
- package/dist/es/standards-sdk.es113.js +20 -471
- package/dist/es/standards-sdk.es113.js.map +1 -1
- package/dist/es/standards-sdk.es114.js +263 -104
- package/dist/es/standards-sdk.es114.js.map +1 -1
- package/dist/es/standards-sdk.es115.js +167 -138
- package/dist/es/standards-sdk.es115.js.map +1 -1
- package/dist/es/standards-sdk.es116.js +315 -29
- package/dist/es/standards-sdk.es116.js.map +1 -1
- package/dist/es/standards-sdk.es117.js +250 -10
- package/dist/es/standards-sdk.es117.js.map +1 -1
- package/dist/es/standards-sdk.es118.js +448 -152
- package/dist/es/standards-sdk.es118.js.map +1 -1
- package/dist/es/standards-sdk.es119.js +101 -25
- 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 +155 -17
- package/dist/es/standards-sdk.es120.js.map +1 -1
- package/dist/es/standards-sdk.es121.js +29 -155
- package/dist/es/standards-sdk.es121.js.map +1 -1
- package/dist/es/standards-sdk.es122.js +9 -200
- package/dist/es/standards-sdk.es122.js.map +1 -1
- package/dist/es/standards-sdk.es123.js +146 -754
- package/dist/es/standards-sdk.es123.js.map +1 -1
- package/dist/es/standards-sdk.es124.js +27 -11
- package/dist/es/standards-sdk.es124.js.map +1 -1
- package/dist/es/standards-sdk.es125.js +19 -564
- package/dist/es/standards-sdk.es125.js.map +1 -1
- package/dist/es/standards-sdk.es126.js +140 -582
- package/dist/es/standards-sdk.es126.js.map +1 -1
- package/dist/es/standards-sdk.es127.js +202 -12
- package/dist/es/standards-sdk.es127.js.map +1 -1
- package/dist/es/standards-sdk.es128.js +790 -2
- package/dist/es/standards-sdk.es128.js.map +1 -1
- package/dist/es/standards-sdk.es129.js +10 -84
- 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 +567 -40
- package/dist/es/standards-sdk.es130.js.map +1 -1
- package/dist/es/standards-sdk.es131.js +626 -2
- package/dist/es/standards-sdk.es131.js.map +1 -1
- package/dist/es/standards-sdk.es132.js +12 -234
- package/dist/es/standards-sdk.es132.js.map +1 -1
- package/dist/es/standards-sdk.es133.js +2 -1140
- package/dist/es/standards-sdk.es133.js.map +1 -1
- package/dist/es/standards-sdk.es134.js +73 -292
- package/dist/es/standards-sdk.es134.js.map +1 -1
- package/dist/es/standards-sdk.es135.js +36 -418
- package/dist/es/standards-sdk.es135.js.map +1 -1
- package/dist/es/standards-sdk.es136.js +2 -355
- package/dist/es/standards-sdk.es136.js.map +1 -1
- package/dist/es/standards-sdk.es137.js +198 -1079
- package/dist/es/standards-sdk.es137.js.map +1 -1
- package/dist/es/standards-sdk.es138.js +1107 -175
- package/dist/es/standards-sdk.es138.js.map +1 -1
- package/dist/es/standards-sdk.es139.js +218 -1479
- 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 +422 -1500
- package/dist/es/standards-sdk.es140.js.map +1 -1
- package/dist/es/standards-sdk.es141.js +351 -13
- package/dist/es/standards-sdk.es141.js.map +1 -1
- package/dist/es/standards-sdk.es142.js +1102 -73
- package/dist/es/standards-sdk.es142.js.map +1 -1
- package/dist/es/standards-sdk.es143.js +203 -76
- package/dist/es/standards-sdk.es143.js.map +1 -1
- package/dist/es/standards-sdk.es144.js +1459 -830
- package/dist/es/standards-sdk.es144.js.map +1 -1
- package/dist/es/standards-sdk.es145.js +1499 -59
- package/dist/es/standards-sdk.es145.js.map +1 -1
- package/dist/es/standards-sdk.es146.js +14 -156
- package/dist/es/standards-sdk.es146.js.map +1 -1
- package/dist/es/standards-sdk.es147.js +87 -7
- package/dist/es/standards-sdk.es147.js.map +1 -1
- package/dist/es/standards-sdk.es148.js +74 -79
- package/dist/es/standards-sdk.es148.js.map +1 -1
- package/dist/es/standards-sdk.es149.js +934 -61
- 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 +60 -30
- package/dist/es/standards-sdk.es150.js.map +1 -1
- package/dist/es/standards-sdk.es151.js +159 -34
- package/dist/es/standards-sdk.es151.js.map +1 -1
- package/dist/es/standards-sdk.es152.js +7 -48
- package/dist/es/standards-sdk.es152.js.map +1 -1
- package/dist/es/standards-sdk.es153.js +70 -122
- package/dist/es/standards-sdk.es153.js.map +1 -1
- package/dist/es/standards-sdk.es154.js +58 -35
- package/dist/es/standards-sdk.es154.js.map +1 -1
- package/dist/es/standards-sdk.es155.js +30 -56
- package/dist/es/standards-sdk.es155.js.map +1 -1
- package/dist/es/standards-sdk.es156.js +34 -84
- package/dist/es/standards-sdk.es156.js.map +1 -1
- package/dist/es/standards-sdk.es157.js +48 -81
- package/dist/es/standards-sdk.es157.js.map +1 -1
- package/dist/es/standards-sdk.es158.js +124 -186
- package/dist/es/standards-sdk.es158.js.map +1 -1
- package/dist/es/standards-sdk.es159.js +34 -12474
- 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 +12477 -12
- package/dist/es/standards-sdk.es160.js.map +1 -1
- package/dist/es/standards-sdk.es161.js +51 -68
- package/dist/es/standards-sdk.es161.js.map +1 -1
- package/dist/es/standards-sdk.es162.js +67 -533
- package/dist/es/standards-sdk.es162.js.map +1 -1
- package/dist/es/standards-sdk.es163.js +70 -161
- package/dist/es/standards-sdk.es163.js.map +1 -1
- package/dist/es/standards-sdk.es164.js +187 -309
- package/dist/es/standards-sdk.es164.js.map +1 -1
- package/dist/es/standards-sdk.es165.js +13 -342
- package/dist/es/standards-sdk.es165.js.map +1 -1
- package/dist/es/standards-sdk.es166.js +538 -441
- package/dist/es/standards-sdk.es166.js.map +1 -1
- package/dist/es/standards-sdk.es167.js +142 -301
- package/dist/es/standards-sdk.es167.js.map +1 -1
- package/dist/es/standards-sdk.es168.js +310 -64
- package/dist/es/standards-sdk.es168.js.map +1 -1
- package/dist/es/standards-sdk.es169.js +332 -158
- package/dist/es/standards-sdk.es169.js.map +1 -1
- package/dist/es/standards-sdk.es170.js +441 -210
- package/dist/es/standards-sdk.es170.js.map +1 -1
- package/dist/es/standards-sdk.es171.js +314 -222
- package/dist/es/standards-sdk.es171.js.map +1 -1
- package/dist/es/standards-sdk.es172.js +65 -108
- package/dist/es/standards-sdk.es172.js.map +1 -1
- package/dist/es/standards-sdk.es173.js +61 -114
- package/dist/es/standards-sdk.es173.js.map +1 -1
- package/dist/es/standards-sdk.es174.js +151 -140
- package/dist/es/standards-sdk.es174.js.map +1 -1
- package/dist/es/standards-sdk.es175.js +193 -156
- package/dist/es/standards-sdk.es175.js.map +1 -1
- package/dist/es/standards-sdk.es176.js +221 -121
- package/dist/es/standards-sdk.es176.js.map +1 -1
- package/dist/es/standards-sdk.es177.js +81 -293
- package/dist/es/standards-sdk.es177.js.map +1 -1
- package/dist/es/standards-sdk.es178.js +114 -247
- package/dist/es/standards-sdk.es178.js.map +1 -1
- package/dist/es/standards-sdk.es179.js +119 -110
- package/dist/es/standards-sdk.es179.js.map +1 -1
- package/dist/es/standards-sdk.es18.js +12 -12
- package/dist/es/standards-sdk.es180.js +188 -0
- package/dist/es/standards-sdk.es180.js.map +1 -0
- package/dist/es/standards-sdk.es181.js +142 -0
- package/dist/es/standards-sdk.es181.js.map +1 -0
- package/dist/es/standards-sdk.es182.js +334 -0
- package/dist/es/standards-sdk.es182.js.map +1 -0
- package/dist/es/standards-sdk.es183.js +262 -0
- package/dist/es/standards-sdk.es183.js.map +1 -0
- package/dist/es/standards-sdk.es184.js +155 -0
- package/dist/es/standards-sdk.es184.js.map +1 -0
- 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.es27.js.map +1 -1
- 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.es59.js +1 -1
- package/dist/es/standards-sdk.es6.js +2 -2
- package/dist/es/standards-sdk.es60.js +1 -1
- package/dist/es/standards-sdk.es62.js +1 -1
- package/dist/es/standards-sdk.es63.js +2 -2
- package/dist/es/standards-sdk.es64.js +1 -1
- package/dist/es/standards-sdk.es65.js +1 -1
- package/dist/es/standards-sdk.es66.js +1 -1
- package/dist/es/standards-sdk.es67.js +7 -7
- package/dist/es/standards-sdk.es69.js +1 -1
- package/dist/es/standards-sdk.es7.js +1 -1
- package/dist/es/standards-sdk.es71.js +2 -2
- package/dist/es/standards-sdk.es72.js +3 -3
- package/dist/es/standards-sdk.es75.js +5 -5
- package/dist/es/standards-sdk.es76.js +3 -3
- package/dist/es/standards-sdk.es77.js +2 -2
- package/dist/es/standards-sdk.es78.js +1 -1
- package/dist/es/standards-sdk.es81.js +2 -2
- package/dist/es/standards-sdk.es83.js +2 -2
- package/dist/es/standards-sdk.es84.js +4 -4
- package/dist/es/standards-sdk.es85.js +1 -1
- package/dist/es/standards-sdk.es88.js +1 -1
- package/dist/es/standards-sdk.es89.js +2 -2
- package/dist/es/standards-sdk.es9.js +2 -2
- package/dist/es/standards-sdk.es90.js +4 -4
- package/dist/es/standards-sdk.es90.js.map +1 -1
- package/dist/es/standards-sdk.es94.js +3 -3
- package/dist/es/standards-sdk.es96.js +2 -2
- package/dist/es/standards-sdk.es98.js +1 -1
- package/dist/es/standards-sdk.es99.js +3 -3
- package/dist/es/utils/key-type-detector.d.ts.map +1 -1
- package/package.json +1 -1
|
@@ -1,84 +1,51 @@
|
|
|
1
|
-
|
|
2
|
-
|
|
3
|
-
|
|
4
|
-
|
|
5
|
-
|
|
6
|
-
|
|
7
|
-
|
|
8
|
-
|
|
9
|
-
|
|
10
|
-
|
|
11
|
-
|
|
12
|
-
}
|
|
13
|
-
|
|
14
|
-
|
|
15
|
-
}
|
|
16
|
-
|
|
17
|
-
const normalized = normalizeDomain(value);
|
|
18
|
-
if (!normalized || normalized.length > 253 || !normalized.includes(".")) {
|
|
19
|
-
return false;
|
|
20
|
-
}
|
|
21
|
-
const labels = normalized.split(".");
|
|
22
|
-
for (const label of labels) {
|
|
23
|
-
if (!label || label.length > 63 || !fqdnLabelRegex.test(label)) {
|
|
24
|
-
return false;
|
|
25
|
-
}
|
|
26
|
-
}
|
|
27
|
-
return true;
|
|
28
|
-
}
|
|
29
|
-
function normalizeTxtValue(value) {
|
|
30
|
-
const trimmed = value.trim();
|
|
31
|
-
if (trimmed.length >= 2 && trimmed.startsWith('"') && trimmed.endsWith('"')) {
|
|
32
|
-
return trimmed.slice(1, -1);
|
|
33
|
-
}
|
|
34
|
-
const markdownLinkMatch = trimmed.match(/^\[(.+)\]\((.+)\)$/);
|
|
35
|
-
if (markdownLinkMatch) {
|
|
36
|
-
return markdownLinkMatch[2].trim();
|
|
37
|
-
}
|
|
38
|
-
return trimmed;
|
|
39
|
-
}
|
|
40
|
-
function parseSemicolonFields(input) {
|
|
41
|
-
const fields = {};
|
|
42
|
-
for (const part of input.split(";")) {
|
|
43
|
-
const trimmed = part.trim();
|
|
44
|
-
if (!trimmed) {
|
|
45
|
-
continue;
|
|
46
|
-
}
|
|
47
|
-
const equalsIndex = trimmed.indexOf("=");
|
|
48
|
-
if (equalsIndex <= 0) {
|
|
49
|
-
continue;
|
|
50
|
-
}
|
|
51
|
-
const key = trimmed.slice(0, equalsIndex).trim();
|
|
52
|
-
const value = normalizeTxtValue(trimmed.slice(equalsIndex + 1));
|
|
53
|
-
if (!key || !value) {
|
|
54
|
-
continue;
|
|
55
|
-
}
|
|
56
|
-
fields[key] = value;
|
|
57
|
-
}
|
|
58
|
-
return fields;
|
|
59
|
-
}
|
|
60
|
-
function buildCanonicalUaid(target, id, params) {
|
|
61
|
-
const entries = [];
|
|
62
|
-
const usedKeys = /* @__PURE__ */ new Set();
|
|
63
|
-
for (const key of orderedParamKeys) {
|
|
64
|
-
const value = params[key];
|
|
65
|
-
if (value) {
|
|
66
|
-
entries.push(`${key}=${value}`);
|
|
67
|
-
usedKeys.add(key);
|
|
68
|
-
}
|
|
69
|
-
}
|
|
70
|
-
const extraKeys = Object.keys(params).filter((key) => !usedKeys.has(key) && params[key]).sort((a, b) => a.localeCompare(b));
|
|
71
|
-
for (const key of extraKeys) {
|
|
72
|
-
entries.push(`${key}=${params[key]}`);
|
|
73
|
-
}
|
|
74
|
-
return entries.length > 0 ? `uaid:${target}:${id};${entries.join(";")}` : `uaid:${target}:${id}`;
|
|
75
|
-
}
|
|
1
|
+
import { CanonicalAgentDataSchema, HCS14_PROTOCOL_REGEX } from "./standards-sdk.es54.js";
|
|
2
|
+
import { canonicalizeAgentData } from "./standards-sdk.es55.js";
|
|
3
|
+
import { createUaid, parseHcs14Did } from "./standards-sdk.es56.js";
|
|
4
|
+
import { isEip155Caip10, isHederaCaip10, isHederaNetwork, parseHederaCaip10, toEip155Caip10, toHederaCaip10 } from "./standards-sdk.es57.js";
|
|
5
|
+
import { isDidProfileResolverAdapter, isDidResolverAdapter, isUaidProfileResolverAdapter } from "./standards-sdk.es58.js";
|
|
6
|
+
import { ResolverRegistry, defaultResolverRegistry, registerDefaultResolvers } from "./standards-sdk.es59.js";
|
|
7
|
+
import { HieroDidResolver } from "./standards-sdk.es60.js";
|
|
8
|
+
import { HCS11ProfileResolver } from "./standards-sdk.es61.js";
|
|
9
|
+
import { AID_DNS_WEB_PROFILE_ID, AidDnsWebProfileResolver } from "./standards-sdk.es62.js";
|
|
10
|
+
import { ANS_DNS_WEB_PROFILE_ID, AnsDnsWebProfileResolver } from "./standards-sdk.es63.js";
|
|
11
|
+
import { UAID_DNS_WEB_PROFILE_ID, UaidDnsWebProfileResolver } from "./standards-sdk.es64.js";
|
|
12
|
+
import { UAID_DID_RESOLUTION_PROFILE_ID, UaidDidResolutionProfileResolver } from "./standards-sdk.es65.js";
|
|
13
|
+
import { nodeDnsTxtLookup } from "./standards-sdk.es66.js";
|
|
14
|
+
import { HCS14Client } from "./standards-sdk.es67.js";
|
|
15
|
+
import { IssuerRegistry, defaultIssuerRegistry } from "./standards-sdk.es68.js";
|
|
16
|
+
import { HederaHieroIssuer } from "./standards-sdk.es69.js";
|
|
76
17
|
export {
|
|
77
|
-
|
|
78
|
-
|
|
79
|
-
|
|
80
|
-
|
|
81
|
-
|
|
82
|
-
|
|
18
|
+
AID_DNS_WEB_PROFILE_ID,
|
|
19
|
+
ANS_DNS_WEB_PROFILE_ID,
|
|
20
|
+
AidDnsWebProfileResolver,
|
|
21
|
+
AnsDnsWebProfileResolver,
|
|
22
|
+
CanonicalAgentDataSchema,
|
|
23
|
+
HCS11ProfileResolver,
|
|
24
|
+
HCS14Client,
|
|
25
|
+
HCS14_PROTOCOL_REGEX,
|
|
26
|
+
HederaHieroIssuer,
|
|
27
|
+
HieroDidResolver,
|
|
28
|
+
IssuerRegistry,
|
|
29
|
+
ResolverRegistry,
|
|
30
|
+
UAID_DID_RESOLUTION_PROFILE_ID,
|
|
31
|
+
UAID_DNS_WEB_PROFILE_ID,
|
|
32
|
+
UaidDidResolutionProfileResolver,
|
|
33
|
+
UaidDnsWebProfileResolver,
|
|
34
|
+
canonicalizeAgentData,
|
|
35
|
+
createUaid,
|
|
36
|
+
defaultIssuerRegistry,
|
|
37
|
+
defaultResolverRegistry,
|
|
38
|
+
isDidProfileResolverAdapter,
|
|
39
|
+
isDidResolverAdapter,
|
|
40
|
+
isEip155Caip10,
|
|
41
|
+
isHederaCaip10,
|
|
42
|
+
isHederaNetwork,
|
|
43
|
+
isUaidProfileResolverAdapter,
|
|
44
|
+
nodeDnsTxtLookup,
|
|
45
|
+
parseHcs14Did,
|
|
46
|
+
parseHederaCaip10,
|
|
47
|
+
registerDefaultResolvers,
|
|
48
|
+
toEip155Caip10,
|
|
49
|
+
toHederaCaip10
|
|
83
50
|
};
|
|
84
51
|
//# sourceMappingURL=standards-sdk.es157.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"standards-sdk.es157.js","sources":[
|
|
1
|
+
{"version":3,"file":"standards-sdk.es157.js","sources":[],"sourcesContent":[],"names":[],"mappings":";;;;;;;;;;;;;;;;"}
|
|
@@ -1,203 +1,141 @@
|
|
|
1
|
-
import {
|
|
2
|
-
|
|
3
|
-
|
|
4
|
-
|
|
5
|
-
|
|
6
|
-
|
|
7
|
-
|
|
8
|
-
|
|
9
|
-
|
|
10
|
-
|
|
11
|
-
|
|
12
|
-
|
|
13
|
-
|
|
14
|
-
|
|
15
|
-
|
|
16
|
-
|
|
17
|
-
return /^(?:0|[1-9]\d*)\.(?:0|[1-9]\d*)\.(?:0|[1-9]\d*)(?:-[0-9A-Za-z-]+(?:\.[0-9A-Za-z-]+)*)?(?:\+[0-9A-Za-z-]+(?:\.[0-9A-Za-z-]+)*)?$/.test(
|
|
18
|
-
value
|
|
19
|
-
);
|
|
20
|
-
}
|
|
21
|
-
function normalizeAnsVersion(value) {
|
|
22
|
-
const trimmed = value.trim();
|
|
23
|
-
if (!trimmed) {
|
|
24
|
-
return null;
|
|
25
|
-
}
|
|
26
|
-
const withoutPrefix = trimmed.startsWith("v") || trimmed.startsWith("V") ? trimmed.slice(1) : trimmed;
|
|
27
|
-
if (!isSemver(withoutPrefix)) {
|
|
28
|
-
return null;
|
|
29
|
-
}
|
|
30
|
-
return withoutPrefix;
|
|
31
|
-
}
|
|
32
|
-
function parseAnsDnsTxtRecord(rawRecord) {
|
|
33
|
-
const fields = parseSemicolonFields(rawRecord);
|
|
34
|
-
const version = fields["v"];
|
|
35
|
-
const urlValue = fields["url"];
|
|
36
|
-
if (!version || !urlValue || version.toLowerCase() !== "ans1") {
|
|
37
|
-
return null;
|
|
38
|
-
}
|
|
39
|
-
let parsedUrl;
|
|
40
|
-
try {
|
|
41
|
-
parsedUrl = new URL(urlValue);
|
|
42
|
-
} catch {
|
|
43
|
-
return null;
|
|
44
|
-
}
|
|
45
|
-
if (parsedUrl.protocol.toLowerCase() !== "https:") {
|
|
46
|
-
return null;
|
|
47
|
-
}
|
|
48
|
-
const rawAnsVersion = fields["version"];
|
|
49
|
-
let normalizedAnsVersion;
|
|
50
|
-
if (rawAnsVersion !== void 0) {
|
|
51
|
-
const parsedVersion = normalizeAnsVersion(rawAnsVersion);
|
|
52
|
-
if (!parsedVersion) {
|
|
53
|
-
return null;
|
|
1
|
+
import { AccountId, Client, PrivateKey } from "@hashgraph/sdk";
|
|
2
|
+
import { detectKeyTypeFromString } from "./standards-sdk.es131.js";
|
|
3
|
+
class NodeOperatorResolver {
|
|
4
|
+
constructor(params) {
|
|
5
|
+
this.mirror = params.mirrorNode;
|
|
6
|
+
this.logger = params.logger;
|
|
7
|
+
}
|
|
8
|
+
/**
|
|
9
|
+
* Best-guess parsing for an operator key without network calls.
|
|
10
|
+
* - If PrivateKey: returns immediately with provided or fallback type.
|
|
11
|
+
* - If string with explicitType: parse directly.
|
|
12
|
+
* - If string without type: detect format; fallback to ECDSA.
|
|
13
|
+
*/
|
|
14
|
+
bestGuessOperatorKey(operatorKeyInput, explicitType) {
|
|
15
|
+
if (typeof operatorKeyInput !== "string") {
|
|
16
|
+
return { keyType: explicitType || "ecdsa", privateKey: operatorKeyInput };
|
|
54
17
|
}
|
|
55
|
-
|
|
56
|
-
|
|
57
|
-
|
|
58
|
-
|
|
59
|
-
|
|
60
|
-
|
|
61
|
-
|
|
62
|
-
|
|
63
|
-
|
|
64
|
-
}
|
|
65
|
-
|
|
66
|
-
|
|
67
|
-
|
|
68
|
-
|
|
69
|
-
|
|
70
|
-
const pathSegments = pathname.split("/").map((segment) => segment.trim()).filter((segment) => segment.length > 0);
|
|
71
|
-
for (const segment of pathSegments) {
|
|
72
|
-
if (segment.toLowerCase() === normalizedProtocol) {
|
|
73
|
-
return true;
|
|
18
|
+
if (explicitType) {
|
|
19
|
+
const pk = explicitType === "ed25519" ? PrivateKey.fromStringED25519(operatorKeyInput) : PrivateKey.fromStringECDSA(operatorKeyInput);
|
|
20
|
+
return { keyType: explicitType, privateKey: pk };
|
|
21
|
+
}
|
|
22
|
+
try {
|
|
23
|
+
const detected = detectKeyTypeFromString(operatorKeyInput);
|
|
24
|
+
return {
|
|
25
|
+
keyType: detected.detectedType,
|
|
26
|
+
privateKey: detected.privateKey
|
|
27
|
+
};
|
|
28
|
+
} catch {
|
|
29
|
+
return {
|
|
30
|
+
keyType: "ecdsa",
|
|
31
|
+
privateKey: PrivateKey.fromStringECDSA(operatorKeyInput)
|
|
32
|
+
};
|
|
74
33
|
}
|
|
75
34
|
}
|
|
76
|
-
|
|
77
|
-
|
|
78
|
-
|
|
79
|
-
|
|
80
|
-
|
|
81
|
-
|
|
82
|
-
|
|
35
|
+
/**
|
|
36
|
+
* Resolve an operator key using Mirror Node for key type when possible.
|
|
37
|
+
* - If PrivateKey: return immediately.
|
|
38
|
+
* - If explicitType: parse directly.
|
|
39
|
+
* - Else: query Mirror Node; fallback to local detection.
|
|
40
|
+
*/
|
|
41
|
+
async resolveOperatorKey(operatorId, operatorKeyInput, explicitType) {
|
|
42
|
+
if (typeof operatorKeyInput !== "string") {
|
|
43
|
+
return { keyType: explicitType || "ecdsa", privateKey: operatorKeyInput };
|
|
83
44
|
}
|
|
84
|
-
|
|
85
|
-
|
|
86
|
-
|
|
45
|
+
if (explicitType) {
|
|
46
|
+
const pk = explicitType === "ed25519" ? PrivateKey.fromStringED25519(operatorKeyInput) : PrivateKey.fromStringECDSA(operatorKeyInput);
|
|
47
|
+
return { keyType: explicitType, privateKey: pk };
|
|
87
48
|
}
|
|
88
|
-
|
|
49
|
+
const account = typeof operatorId === "string" ? operatorId : operatorId.toString();
|
|
89
50
|
try {
|
|
90
|
-
|
|
51
|
+
const info = await this.mirror.requestAccount(account);
|
|
52
|
+
const t = info?.key?._type || "";
|
|
53
|
+
const keyType = t.includes("ED25519") ? "ed25519" : "ecdsa";
|
|
54
|
+
const privateKey = keyType === "ed25519" ? PrivateKey.fromStringED25519(operatorKeyInput) : PrivateKey.fromStringECDSA(operatorKeyInput);
|
|
55
|
+
return { keyType, privateKey };
|
|
91
56
|
} catch {
|
|
92
|
-
|
|
93
|
-
|
|
94
|
-
|
|
95
|
-
|
|
96
|
-
continue;
|
|
57
|
+
this.logger.warn(
|
|
58
|
+
"Mirror node key detection failed; using local detection or default ECDSA"
|
|
59
|
+
);
|
|
60
|
+
return this.bestGuessOperatorKey(operatorKeyInput);
|
|
97
61
|
}
|
|
98
|
-
candidates.push({
|
|
99
|
-
key,
|
|
100
|
-
endpointUrl: parsedUrl.toString(),
|
|
101
|
-
parsedUrl
|
|
102
|
-
});
|
|
103
|
-
}
|
|
104
|
-
return candidates;
|
|
105
|
-
}
|
|
106
|
-
function validateAnsHcs27Hints(input) {
|
|
107
|
-
if (!isObjectRecord(input)) {
|
|
108
|
-
return void 0;
|
|
109
|
-
}
|
|
110
|
-
const checkpointTopicId = asString(input["checkpoint_topic_id"]);
|
|
111
|
-
const registry = asString(input["registry"]);
|
|
112
|
-
const logId = asString(input["log_id"]);
|
|
113
|
-
if (!checkpointTopicId || !registry || !logId || registry !== ANS_HCS27_REGISTRY) {
|
|
114
|
-
return void 0;
|
|
115
|
-
}
|
|
116
|
-
const checkpointUri = asString(input["checkpoint_uri"]) ?? void 0;
|
|
117
|
-
const viewerUri = asString(input["viewer_uri"]) ?? void 0;
|
|
118
|
-
return {
|
|
119
|
-
checkpointTopicId,
|
|
120
|
-
registry,
|
|
121
|
-
logId,
|
|
122
|
-
checkpointUri,
|
|
123
|
-
viewerUri
|
|
124
|
-
};
|
|
125
|
-
}
|
|
126
|
-
function validateHcs28Hints(input) {
|
|
127
|
-
if (!isObjectRecord(input)) {
|
|
128
|
-
return void 0;
|
|
129
|
-
}
|
|
130
|
-
const directoryTopicId = asString(input["directory_topic_id"]);
|
|
131
|
-
const tId = asString(input["t_id"]);
|
|
132
|
-
const agentId = asString(input["agent_id"]);
|
|
133
|
-
if (!directoryTopicId || !tId || !agentId) {
|
|
134
|
-
return void 0;
|
|
135
|
-
}
|
|
136
|
-
const proofProfile = asString(input["proof_profile"]) ?? void 0;
|
|
137
|
-
return {
|
|
138
|
-
directoryTopicId,
|
|
139
|
-
tId,
|
|
140
|
-
agentId,
|
|
141
|
-
proofProfile
|
|
142
|
-
};
|
|
143
|
-
}
|
|
144
|
-
function parseTransparencyHints(input) {
|
|
145
|
-
if (!isObjectRecord(input)) {
|
|
146
|
-
return void 0;
|
|
147
62
|
}
|
|
148
|
-
|
|
149
|
-
|
|
150
|
-
|
|
151
|
-
|
|
63
|
+
/**
|
|
64
|
+
* Resolve a supply key for the given token using Mirror Node token supply_key._type when possible.
|
|
65
|
+
*/
|
|
66
|
+
async resolveSupplyKey(tokenId, keyInput, fallbackType, explicitType) {
|
|
67
|
+
try {
|
|
68
|
+
const info = await this.mirror.getTokenInfo(tokenId);
|
|
69
|
+
const t = info?.supply_key?._type || "";
|
|
70
|
+
if (typeof keyInput !== "string") {
|
|
71
|
+
return keyInput;
|
|
72
|
+
}
|
|
73
|
+
if (explicitType) {
|
|
74
|
+
return explicitType === "ed25519" ? PrivateKey.fromStringED25519(keyInput) : PrivateKey.fromStringECDSA(keyInput);
|
|
75
|
+
}
|
|
76
|
+
if (t.includes("ED25519")) {
|
|
77
|
+
return PrivateKey.fromStringED25519(keyInput);
|
|
78
|
+
}
|
|
79
|
+
if (t.includes("ECDSA")) {
|
|
80
|
+
return PrivateKey.fromStringECDSA(keyInput);
|
|
81
|
+
}
|
|
82
|
+
return fallbackType === "ed25519" ? PrivateKey.fromStringED25519(keyInput) : PrivateKey.fromStringECDSA(keyInput);
|
|
83
|
+
} catch {
|
|
84
|
+
if (typeof keyInput !== "string") {
|
|
85
|
+
return keyInput;
|
|
86
|
+
}
|
|
87
|
+
if (explicitType) {
|
|
88
|
+
return explicitType === "ed25519" ? PrivateKey.fromStringED25519(keyInput) : PrivateKey.fromStringECDSA(keyInput);
|
|
89
|
+
}
|
|
90
|
+
return fallbackType === "ed25519" ? PrivateKey.fromStringED25519(keyInput) : PrivateKey.fromStringECDSA(keyInput);
|
|
91
|
+
}
|
|
152
92
|
}
|
|
153
|
-
return {
|
|
154
|
-
hcs27,
|
|
155
|
-
hcs28
|
|
156
|
-
};
|
|
157
93
|
}
|
|
158
|
-
function
|
|
159
|
-
|
|
160
|
-
|
|
161
|
-
|
|
162
|
-
|
|
163
|
-
|
|
164
|
-
|
|
165
|
-
|
|
166
|
-
|
|
94
|
+
function createNodeOperatorContext(params) {
|
|
95
|
+
const operatorId = typeof params.operatorId === "string" ? AccountId.fromString(params.operatorId) : params.operatorId;
|
|
96
|
+
const client = params.client ? params.client : params.network === "mainnet" ? Client.forMainnet() : Client.forTestnet();
|
|
97
|
+
const resolver = new NodeOperatorResolver({
|
|
98
|
+
mirrorNode: params.mirrorNode,
|
|
99
|
+
logger: params.logger
|
|
100
|
+
});
|
|
101
|
+
let currentKeyType;
|
|
102
|
+
let currentPrivateKey;
|
|
103
|
+
const guess = resolver.bestGuessOperatorKey(
|
|
104
|
+
params.operatorKey,
|
|
105
|
+
params.keyType
|
|
106
|
+
);
|
|
107
|
+
currentKeyType = guess.keyType;
|
|
108
|
+
currentPrivateKey = guess.privateKey;
|
|
109
|
+
client.setOperator(operatorId.toString(), currentPrivateKey);
|
|
110
|
+
const initPromise = (async () => {
|
|
111
|
+
try {
|
|
112
|
+
const resolved = await resolver.resolveOperatorKey(
|
|
113
|
+
operatorId,
|
|
114
|
+
params.operatorKey,
|
|
115
|
+
params.keyType
|
|
116
|
+
);
|
|
117
|
+
currentKeyType = resolved.keyType;
|
|
118
|
+
currentPrivateKey = resolved.privateKey;
|
|
119
|
+
client.setOperator(operatorId.toString(), currentPrivateKey);
|
|
120
|
+
} catch {
|
|
121
|
+
}
|
|
122
|
+
})();
|
|
167
123
|
return {
|
|
168
|
-
|
|
169
|
-
|
|
170
|
-
|
|
124
|
+
client,
|
|
125
|
+
operatorId,
|
|
126
|
+
get operatorKey() {
|
|
127
|
+
return currentPrivateKey;
|
|
128
|
+
},
|
|
129
|
+
get keyType() {
|
|
130
|
+
return currentKeyType;
|
|
131
|
+
},
|
|
132
|
+
ensureInitialized: async () => {
|
|
133
|
+
await initPromise;
|
|
134
|
+
}
|
|
171
135
|
};
|
|
172
136
|
}
|
|
173
|
-
function selectPreferredEndpoint(candidates, protocol) {
|
|
174
|
-
if (candidates.length === 0) {
|
|
175
|
-
return null;
|
|
176
|
-
}
|
|
177
|
-
const sortedCandidates = [...candidates].sort(
|
|
178
|
-
(a, b) => a.key.localeCompare(b.key)
|
|
179
|
-
);
|
|
180
|
-
const protocolMatches = sortedCandidates.filter(
|
|
181
|
-
(candidate) => hasProtocolPathSegment(candidate.parsedUrl.pathname, protocol)
|
|
182
|
-
);
|
|
183
|
-
if (protocolMatches.length > 0) {
|
|
184
|
-
return protocolMatches[0];
|
|
185
|
-
}
|
|
186
|
-
return sortedCandidates[0];
|
|
187
|
-
}
|
|
188
|
-
function toErrorMessage(error) {
|
|
189
|
-
if (error instanceof Error && error.message) {
|
|
190
|
-
return error.message;
|
|
191
|
-
}
|
|
192
|
-
return null;
|
|
193
|
-
}
|
|
194
137
|
export {
|
|
195
|
-
|
|
196
|
-
|
|
197
|
-
normalizeAnsVersion,
|
|
198
|
-
parseAnsAgentCard,
|
|
199
|
-
parseAnsDnsTxtRecord,
|
|
200
|
-
selectPreferredEndpoint,
|
|
201
|
-
toErrorMessage
|
|
138
|
+
NodeOperatorResolver,
|
|
139
|
+
createNodeOperatorContext
|
|
202
140
|
};
|
|
203
141
|
//# sourceMappingURL=standards-sdk.es158.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"standards-sdk.es158.js","sources":["../../src/hcs-14/resolvers/ans-dns-web-profile-utils.ts"],"sourcesContent":["import type {\n ProfileResolutionHcs27TransparencyHints,\n ProfileResolutionHcs28TransparencyHints,\n ProfileResolutionTransparencyHints,\n} from './types';\nimport { parseSemicolonFields } from './profile-utils';\n\nexport interface AnsDnsTxtRecord {\n version?: string;\n url: string;\n}\n\nexport interface AnsEndpointCandidate {\n key: string;\n endpointUrl: string;\n parsedUrl: URL;\n}\n\nexport interface ParsedAnsAgentCard {\n ansName: string;\n endpoints: Record<string, unknown>;\n transparencyHints?: ProfileResolutionTransparencyHints;\n}\n\nconst ANS_HCS27_REGISTRY = 'ans';\n\nfunction isObjectRecord(value: unknown): value is Record<string, unknown> {\n return typeof value === 'object' && value !== null;\n}\n\nfunction asString(value: unknown): string | null {\n if (typeof value !== 'string') {\n return null;\n }\n const trimmed = value.trim();\n if (!trimmed) {\n return null;\n }\n return trimmed;\n}\n\nfunction isSemver(value: string): boolean {\n return /^(?:0|[1-9]\\d*)\\.(?:0|[1-9]\\d*)\\.(?:0|[1-9]\\d*)(?:-[0-9A-Za-z-]+(?:\\.[0-9A-Za-z-]+)*)?(?:\\+[0-9A-Za-z-]+(?:\\.[0-9A-Za-z-]+)*)?$/.test(\n value,\n );\n}\n\nexport function normalizeAnsVersion(value: string): string | null {\n const trimmed = value.trim();\n if (!trimmed) {\n return null;\n }\n const withoutPrefix =\n trimmed.startsWith('v') || trimmed.startsWith('V')\n ? trimmed.slice(1)\n : trimmed;\n if (!isSemver(withoutPrefix)) {\n return null;\n }\n return withoutPrefix;\n}\n\nexport function parseAnsDnsTxtRecord(\n rawRecord: string,\n): AnsDnsTxtRecord | null {\n const fields = parseSemicolonFields(rawRecord);\n const version = fields['v'];\n const urlValue = fields['url'];\n if (!version || !urlValue || version.toLowerCase() !== 'ans1') {\n return null;\n }\n\n let parsedUrl: URL;\n try {\n parsedUrl = new URL(urlValue);\n } catch {\n return null;\n }\n\n if (parsedUrl.protocol.toLowerCase() !== 'https:') {\n return null;\n }\n\n const rawAnsVersion = fields['version'];\n let normalizedAnsVersion: string | undefined;\n if (rawAnsVersion !== undefined) {\n const parsedVersion = normalizeAnsVersion(rawAnsVersion);\n if (!parsedVersion) {\n return null;\n }\n normalizedAnsVersion = parsedVersion;\n }\n\n return {\n version: normalizedAnsVersion,\n url: parsedUrl.toString(),\n };\n}\n\nexport function isValidAnsProfileVersion(value: string | undefined): boolean {\n return !!value && normalizeAnsVersion(value) !== null;\n}\n\nfunction hasProtocolPathSegment(pathname: string, protocol: string): boolean {\n const normalizedProtocol = protocol.trim().toLowerCase();\n if (!normalizedProtocol) {\n return false;\n }\n\n const pathSegments = pathname\n .split('/')\n .map(segment => segment.trim())\n .filter(segment => segment.length > 0);\n for (const segment of pathSegments) {\n if (segment.toLowerCase() === normalizedProtocol) {\n return true;\n }\n }\n return false;\n}\n\nexport function extractEndpointCandidates(\n endpoints: Record<string, unknown>,\n supportedSchemes: Set<string>,\n): AnsEndpointCandidate[] {\n const candidates: AnsEndpointCandidate[] = [];\n for (const [key, value] of Object.entries(endpoints)) {\n if (!isObjectRecord(value)) {\n continue;\n }\n const endpoint = asString(value['url']);\n if (!endpoint) {\n continue;\n }\n\n let parsedUrl: URL;\n try {\n parsedUrl = new URL(endpoint);\n } catch {\n continue;\n }\n\n const scheme = parsedUrl.protocol.replace(/:$/, '').toLowerCase();\n if (!supportedSchemes.has(scheme)) {\n continue;\n }\n\n candidates.push({\n key,\n endpointUrl: parsedUrl.toString(),\n parsedUrl,\n });\n }\n\n return candidates;\n}\n\nfunction validateAnsHcs27Hints(\n input: unknown,\n): ProfileResolutionHcs27TransparencyHints | undefined {\n if (!isObjectRecord(input)) {\n return undefined;\n }\n const checkpointTopicId = asString(input['checkpoint_topic_id']);\n const registry = asString(input['registry']);\n const logId = asString(input['log_id']);\n if (\n !checkpointTopicId ||\n !registry ||\n !logId ||\n registry !== ANS_HCS27_REGISTRY\n ) {\n return undefined;\n }\n const checkpointUri = asString(input['checkpoint_uri']) ?? undefined;\n const viewerUri = asString(input['viewer_uri']) ?? undefined;\n return {\n checkpointTopicId,\n registry,\n logId,\n checkpointUri,\n viewerUri,\n };\n}\n\nfunction validateHcs28Hints(\n input: unknown,\n): ProfileResolutionHcs28TransparencyHints | undefined {\n if (!isObjectRecord(input)) {\n return undefined;\n }\n const directoryTopicId = asString(input['directory_topic_id']);\n const tId = asString(input['t_id']);\n const agentId = asString(input['agent_id']);\n if (!directoryTopicId || !tId || !agentId) {\n return undefined;\n }\n const proofProfile = asString(input['proof_profile']) ?? undefined;\n return {\n directoryTopicId,\n tId,\n agentId,\n proofProfile,\n };\n}\n\nfunction parseTransparencyHints(\n input: unknown,\n): ProfileResolutionTransparencyHints | undefined {\n if (!isObjectRecord(input)) {\n return undefined;\n }\n const hcs27 = validateAnsHcs27Hints(input['hcs27']);\n const hcs28 = validateHcs28Hints(input['hcs28']);\n if (!hcs27 && !hcs28) {\n return undefined;\n }\n return {\n hcs27,\n hcs28,\n };\n}\n\nexport function parseAnsAgentCard(input: unknown): ParsedAnsAgentCard | null {\n if (!isObjectRecord(input)) {\n return null;\n }\n const ansName = asString(input['ansName']);\n const endpoints = input['endpoints'];\n if (!ansName || !isObjectRecord(endpoints)) {\n return null;\n }\n return {\n ansName,\n endpoints,\n transparencyHints: parseTransparencyHints(input['transparency']),\n };\n}\n\nexport function selectPreferredEndpoint(\n candidates: AnsEndpointCandidate[],\n protocol: string,\n): AnsEndpointCandidate | null {\n if (candidates.length === 0) {\n return null;\n }\n\n const sortedCandidates = [...candidates].sort((a, b) =>\n a.key.localeCompare(b.key),\n );\n const protocolMatches = sortedCandidates.filter(candidate =>\n hasProtocolPathSegment(candidate.parsedUrl.pathname, protocol),\n );\n if (protocolMatches.length > 0) {\n return protocolMatches[0];\n }\n return sortedCandidates[0];\n}\n\nexport function toErrorMessage(error: unknown): string | null {\n if (error instanceof Error && error.message) {\n return error.message;\n }\n return null;\n}\n"],"names":[],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"standards-sdk.es158.js","sources":["../../src/common/node-operator-resolver.ts"],"sourcesContent":["import { AccountId, Client, PrivateKey } from '@hashgraph/sdk';\nimport { HederaMirrorNode } from '../services/mirror-node';\nimport { ILogger } from '../utils/logger';\nimport { detectKeyTypeFromString } from '../utils/key-type-detector';\nimport { NetworkType } from '../utils/types';\n\n/**\n * Resolves operator and supply private keys using Mirror Node as source of truth\n * with format-detection fallbacks for string keys.\n */\nexport class NodeOperatorResolver {\n private readonly mirror: HederaMirrorNode;\n private readonly logger: ILogger;\n\n constructor(params: { mirrorNode: HederaMirrorNode; logger: ILogger }) {\n this.mirror = params.mirrorNode;\n this.logger = params.logger;\n }\n\n /**\n * Best-guess parsing for an operator key without network calls.\n * - If PrivateKey: returns immediately with provided or fallback type.\n * - If string with explicitType: parse directly.\n * - If string without type: detect format; fallback to ECDSA.\n */\n bestGuessOperatorKey(\n operatorKeyInput: string | PrivateKey,\n explicitType?: 'ed25519' | 'ecdsa',\n ): { keyType: 'ed25519' | 'ecdsa'; privateKey: PrivateKey } {\n if (typeof operatorKeyInput !== 'string') {\n return { keyType: explicitType || 'ecdsa', privateKey: operatorKeyInput };\n }\n if (explicitType) {\n const pk =\n explicitType === 'ed25519'\n ? PrivateKey.fromStringED25519(operatorKeyInput)\n : PrivateKey.fromStringECDSA(operatorKeyInput);\n return { keyType: explicitType, privateKey: pk };\n }\n try {\n const detected = detectKeyTypeFromString(operatorKeyInput);\n return {\n keyType: detected.detectedType,\n privateKey: detected.privateKey,\n };\n } catch {\n return {\n keyType: 'ecdsa',\n privateKey: PrivateKey.fromStringECDSA(operatorKeyInput),\n };\n }\n }\n\n /**\n * Resolve an operator key using Mirror Node for key type when possible.\n * - If PrivateKey: return immediately.\n * - If explicitType: parse directly.\n * - Else: query Mirror Node; fallback to local detection.\n */\n async resolveOperatorKey(\n operatorId: string | AccountId,\n operatorKeyInput: string | PrivateKey,\n explicitType?: 'ed25519' | 'ecdsa',\n ): Promise<{ keyType: 'ed25519' | 'ecdsa'; privateKey: PrivateKey }> {\n if (typeof operatorKeyInput !== 'string') {\n return { keyType: explicitType || 'ecdsa', privateKey: operatorKeyInput };\n }\n if (explicitType) {\n const pk =\n explicitType === 'ed25519'\n ? PrivateKey.fromStringED25519(operatorKeyInput)\n : PrivateKey.fromStringECDSA(operatorKeyInput);\n return { keyType: explicitType, privateKey: pk };\n }\n const account =\n typeof operatorId === 'string' ? operatorId : operatorId.toString();\n try {\n const info = await this.mirror.requestAccount(account);\n const t = info?.key?._type || '';\n const keyType: 'ed25519' | 'ecdsa' = t.includes('ED25519')\n ? 'ed25519'\n : 'ecdsa';\n const privateKey =\n keyType === 'ed25519'\n ? PrivateKey.fromStringED25519(operatorKeyInput)\n : PrivateKey.fromStringECDSA(operatorKeyInput);\n return { keyType, privateKey };\n } catch {\n this.logger.warn(\n 'Mirror node key detection failed; using local detection or default ECDSA',\n );\n return this.bestGuessOperatorKey(operatorKeyInput);\n }\n }\n\n /**\n * Resolve a supply key for the given token using Mirror Node token supply_key._type when possible.\n */\n async resolveSupplyKey(\n tokenId: string,\n keyInput: string | PrivateKey,\n fallbackType: 'ed25519' | 'ecdsa',\n explicitType?: 'ed25519' | 'ecdsa',\n ): Promise<PrivateKey> {\n try {\n const info = await this.mirror.getTokenInfo(tokenId);\n const t = info?.supply_key?._type || '';\n if (typeof keyInput !== 'string') {\n return keyInput;\n }\n if (explicitType) {\n return explicitType === 'ed25519'\n ? PrivateKey.fromStringED25519(keyInput)\n : PrivateKey.fromStringECDSA(keyInput);\n }\n if (t.includes('ED25519')) {\n return PrivateKey.fromStringED25519(keyInput);\n }\n if (t.includes('ECDSA')) {\n return PrivateKey.fromStringECDSA(keyInput);\n }\n return fallbackType === 'ed25519'\n ? PrivateKey.fromStringED25519(keyInput)\n : PrivateKey.fromStringECDSA(keyInput);\n } catch {\n if (typeof keyInput !== 'string') {\n return keyInput;\n }\n if (explicitType) {\n return explicitType === 'ed25519'\n ? PrivateKey.fromStringED25519(keyInput)\n : PrivateKey.fromStringECDSA(keyInput);\n }\n return fallbackType === 'ed25519'\n ? PrivateKey.fromStringED25519(keyInput)\n : PrivateKey.fromStringECDSA(keyInput);\n }\n }\n}\n\nexport interface NodeOperatorInitParams {\n network: NetworkType;\n operatorId: string | AccountId;\n operatorKey: string | PrivateKey;\n keyType?: 'ed25519' | 'ecdsa';\n mirrorNode: HederaMirrorNode;\n logger: ILogger;\n client?: Client;\n}\n\nexport interface NodeOperatorContext {\n client: Client;\n operatorId: AccountId;\n readonly operatorKey: PrivateKey;\n readonly keyType: 'ed25519' | 'ecdsa';\n ensureInitialized(): Promise<void>;\n}\n\nexport function createNodeOperatorContext(\n params: NodeOperatorInitParams,\n): NodeOperatorContext {\n const operatorId: AccountId =\n typeof params.operatorId === 'string'\n ? AccountId.fromString(params.operatorId)\n : params.operatorId;\n\n const client: Client = params.client\n ? params.client\n : params.network === 'mainnet'\n ? Client.forMainnet()\n : Client.forTestnet();\n\n const resolver = new NodeOperatorResolver({\n mirrorNode: params.mirrorNode,\n logger: params.logger,\n });\n\n let currentKeyType: 'ed25519' | 'ecdsa';\n let currentPrivateKey: PrivateKey;\n\n const guess = resolver.bestGuessOperatorKey(\n params.operatorKey,\n params.keyType,\n );\n currentKeyType = guess.keyType;\n currentPrivateKey = guess.privateKey;\n client.setOperator(operatorId.toString(), currentPrivateKey);\n\n const initPromise = (async () => {\n try {\n const resolved = await resolver.resolveOperatorKey(\n operatorId,\n params.operatorKey,\n params.keyType,\n );\n currentKeyType = resolved.keyType;\n currentPrivateKey = resolved.privateKey;\n client.setOperator(operatorId.toString(), currentPrivateKey);\n } catch {}\n })();\n\n return {\n client,\n operatorId,\n get operatorKey() {\n return currentPrivateKey;\n },\n get keyType() {\n return currentKeyType;\n },\n ensureInitialized: async () => {\n await initPromise;\n },\n };\n}\n"],"names":[],"mappings":"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"}
|