@hashgraphonline/standards-sdk 0.0.120 → 0.0.122
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-11/client.d.ts +18 -1
- package/dist/cjs/hcs-11/client.d.ts.map +1 -1
- package/dist/cjs/hcs-11/index.d.ts +1 -0
- package/dist/cjs/hcs-11/index.d.ts.map +1 -1
- package/dist/cjs/hcs-11/mcp-server-builder.d.ts +118 -0
- package/dist/cjs/hcs-11/mcp-server-builder.d.ts.map +1 -0
- package/dist/cjs/hcs-11/types.d.ts +77 -18
- package/dist/cjs/hcs-11/types.d.ts.map +1 -1
- package/dist/cjs/{index-CHar8dVv-B2IK-7-2.cjs → index-CHar8dVv-BkACF223.cjs} +2 -2
- package/dist/cjs/{index-CHar8dVv-B2IK-7-2.cjs.map → index-CHar8dVv-BkACF223.cjs.map} +1 -1
- package/dist/cjs/index-DjDDRcKz.cjs +11 -0
- package/dist/cjs/index-DjDDRcKz.cjs.map +1 -0
- package/dist/cjs/standards-sdk.cjs +1 -1
- package/dist/es/hcs-11/client.d.ts +18 -1
- package/dist/es/hcs-11/client.d.ts.map +1 -1
- package/dist/es/hcs-11/index.d.ts +1 -0
- package/dist/es/hcs-11/index.d.ts.map +1 -1
- package/dist/es/hcs-11/mcp-server-builder.d.ts +118 -0
- package/dist/es/hcs-11/mcp-server-builder.d.ts.map +1 -0
- package/dist/es/hcs-11/types.d.ts +77 -18
- package/dist/es/hcs-11/types.d.ts.map +1 -1
- package/dist/es/standards-sdk.es.js +17 -12
- package/dist/es/standards-sdk.es.js.map +1 -1
- package/dist/es/standards-sdk.es10.js +1 -1
- package/dist/es/standards-sdk.es11.js +2 -2
- package/dist/es/standards-sdk.es12.js +1 -1
- package/dist/es/standards-sdk.es13.js +226 -639
- package/dist/es/standards-sdk.es13.js.map +1 -1
- package/dist/es/standards-sdk.es14.js +770 -85
- package/dist/es/standards-sdk.es14.js.map +1 -1
- package/dist/es/standards-sdk.es15.js +132 -68
- package/dist/es/standards-sdk.es15.js.map +1 -1
- package/dist/es/standards-sdk.es16.js +66 -19
- package/dist/es/standards-sdk.es16.js.map +1 -1
- package/dist/es/standards-sdk.es17.js +18 -156
- package/dist/es/standards-sdk.es17.js.map +1 -1
- package/dist/es/standards-sdk.es18.js +150 -146
- package/dist/es/standards-sdk.es18.js.map +1 -1
- package/dist/es/standards-sdk.es19.js +134 -561
- package/dist/es/standards-sdk.es19.js.map +1 -1
- package/dist/es/standards-sdk.es2.js +1 -1
- package/dist/es/standards-sdk.es20.js +577 -24
- package/dist/es/standards-sdk.es20.js.map +1 -1
- package/dist/es/standards-sdk.es21.js +23 -400
- package/dist/es/standards-sdk.es21.js.map +1 -1
- package/dist/es/standards-sdk.es22.js +381 -1507
- package/dist/es/standards-sdk.es22.js.map +1 -1
- package/dist/es/standards-sdk.es23.js +1511 -133
- package/dist/es/standards-sdk.es23.js.map +1 -1
- package/dist/es/standards-sdk.es24.js +155 -7
- package/dist/es/standards-sdk.es24.js.map +1 -1
- package/dist/es/standards-sdk.es25.js +7 -7190
- package/dist/es/standards-sdk.es25.js.map +1 -1
- package/dist/es/standards-sdk.es26.js +7190 -2
- package/dist/es/standards-sdk.es26.js.map +1 -1
- package/dist/es/standards-sdk.es27.js +2 -501
- package/dist/es/standards-sdk.es27.js.map +1 -1
- package/dist/es/standards-sdk.es28.js +456 -64
- package/dist/es/standards-sdk.es28.js.map +1 -1
- package/dist/es/standards-sdk.es29.js +79 -36
- package/dist/es/standards-sdk.es29.js.map +1 -1
- package/dist/es/standards-sdk.es3.js +1 -1
- package/dist/es/standards-sdk.es30.js +32 -222
- package/dist/es/standards-sdk.es30.js.map +1 -1
- package/dist/es/standards-sdk.es31.js +183 -100
- package/dist/es/standards-sdk.es31.js.map +1 -1
- package/dist/es/standards-sdk.es32.js +167 -5
- package/dist/es/standards-sdk.es32.js.map +1 -1
- package/dist/es/standards-sdk.es33.js +8 -7132
- package/dist/es/standards-sdk.es33.js.map +1 -1
- package/dist/es/standards-sdk.es35.js +7138 -0
- package/dist/es/standards-sdk.es35.js.map +1 -0
- package/dist/es/standards-sdk.es4.js +1 -1
- package/dist/es/standards-sdk.es5.js +4 -4
- package/dist/es/standards-sdk.es7.js +7 -7
- package/dist/es/standards-sdk.es8.js +5 -5
- package/dist/es/standards-sdk.es9.js +2 -2
- package/dist/umd/hcs-11/client.d.ts +18 -1
- package/dist/umd/hcs-11/client.d.ts.map +1 -1
- package/dist/umd/hcs-11/index.d.ts +1 -0
- package/dist/umd/hcs-11/index.d.ts.map +1 -1
- package/dist/umd/hcs-11/mcp-server-builder.d.ts +118 -0
- package/dist/umd/hcs-11/mcp-server-builder.d.ts.map +1 -0
- package/dist/umd/hcs-11/types.d.ts +77 -18
- package/dist/umd/hcs-11/types.d.ts.map +1 -1
- package/dist/umd/standards-sdk.umd.js +12 -12
- package/dist/umd/standards-sdk.umd.js.map +1 -1
- package/package.json +2 -2
- package/dist/cjs/index-CHS2J8pS.cjs +0 -11
- package/dist/cjs/index-CHS2J8pS.cjs.map +0 -1
|
@@ -1,163 +1,25 @@
|
|
|
1
|
-
import {
|
|
2
|
-
|
|
3
|
-
|
|
4
|
-
|
|
5
|
-
|
|
6
|
-
|
|
7
|
-
|
|
8
|
-
|
|
9
|
-
|
|
10
|
-
|
|
11
|
-
|
|
12
|
-
|
|
13
|
-
|
|
14
|
-
|
|
15
|
-
|
|
16
|
-
|
|
17
|
-
static getInstance(options = {}) {
|
|
18
|
-
if (!ProgressReporter.instance) {
|
|
19
|
-
ProgressReporter.instance = new ProgressReporter(options);
|
|
20
|
-
} else {
|
|
21
|
-
if (options.callback) {
|
|
22
|
-
ProgressReporter.instance.setCallback(options.callback);
|
|
23
|
-
}
|
|
24
|
-
if (options.module) {
|
|
25
|
-
ProgressReporter.instance.setModule(options.module);
|
|
26
|
-
}
|
|
27
|
-
if (options.logger) {
|
|
28
|
-
ProgressReporter.instance.setLogger(options.logger);
|
|
29
|
-
}
|
|
30
|
-
if (options.minPercent !== void 0) {
|
|
31
|
-
ProgressReporter.instance.setMinPercent(options.minPercent);
|
|
32
|
-
}
|
|
33
|
-
if (options.maxPercent !== void 0) {
|
|
34
|
-
ProgressReporter.instance.setMaxPercent(options.maxPercent);
|
|
35
|
-
}
|
|
36
|
-
}
|
|
37
|
-
return ProgressReporter.instance;
|
|
38
|
-
}
|
|
39
|
-
setCallback(callback) {
|
|
40
|
-
this.callback = callback;
|
|
41
|
-
}
|
|
42
|
-
setModule(module) {
|
|
43
|
-
this.module = module;
|
|
44
|
-
}
|
|
45
|
-
setLogger(logger) {
|
|
46
|
-
this.logger = logger;
|
|
47
|
-
}
|
|
48
|
-
setMinPercent(minPercent) {
|
|
49
|
-
this.minPercent = minPercent;
|
|
50
|
-
}
|
|
51
|
-
setMaxPercent(maxPercent) {
|
|
52
|
-
this.maxPercent = maxPercent;
|
|
53
|
-
}
|
|
54
|
-
createSubProgress(options) {
|
|
55
|
-
const subReporter = new ProgressReporter({
|
|
56
|
-
module: this.module,
|
|
57
|
-
logger: this.logger,
|
|
58
|
-
logProgress: this.logProgress,
|
|
59
|
-
minPercent: options.minPercent,
|
|
60
|
-
maxPercent: options.maxPercent
|
|
61
|
-
});
|
|
62
|
-
const logPrefix = options.logPrefix || "";
|
|
63
|
-
subReporter.setCallback((data) => {
|
|
64
|
-
const scaledPercent = this.scalePercent(
|
|
65
|
-
data.progressPercent,
|
|
66
|
-
options.minPercent,
|
|
67
|
-
options.maxPercent
|
|
68
|
-
);
|
|
69
|
-
let formattedMessage = data.message;
|
|
70
|
-
if (logPrefix && !formattedMessage.startsWith(logPrefix)) {
|
|
71
|
-
formattedMessage = `${logPrefix}: ${formattedMessage}`;
|
|
72
|
-
}
|
|
73
|
-
this.report({
|
|
74
|
-
stage: data.stage,
|
|
75
|
-
message: formattedMessage,
|
|
76
|
-
progressPercent: scaledPercent,
|
|
77
|
-
details: data.details
|
|
78
|
-
});
|
|
79
|
-
});
|
|
80
|
-
return subReporter;
|
|
81
|
-
}
|
|
82
|
-
report(data) {
|
|
83
|
-
const rawPercent = data.progressPercent;
|
|
84
|
-
const percent = Math.max(0, Math.min(100, rawPercent));
|
|
85
|
-
const scaledPercent = this.scalePercent(percent, 0, 100);
|
|
86
|
-
const now = Date.now();
|
|
87
|
-
if (scaledPercent === this.lastReportedPercent && now - this.lastReportedTime < this.throttleMs && data.stage !== "completed" && data.stage !== "failed") {
|
|
88
|
-
return;
|
|
89
|
-
}
|
|
90
|
-
this.lastReportedPercent = scaledPercent;
|
|
91
|
-
this.lastReportedTime = now;
|
|
92
|
-
const progressData = {
|
|
93
|
-
...data,
|
|
94
|
-
progressPercent: scaledPercent
|
|
95
|
-
};
|
|
96
|
-
if (this.logProgress) {
|
|
97
|
-
this.logger.debug(
|
|
98
|
-
`[${this.module}] [${data.stage.toUpperCase()}] ${data.message} (${scaledPercent.toFixed(1)}%)`,
|
|
99
|
-
data.details
|
|
100
|
-
);
|
|
101
|
-
}
|
|
102
|
-
if (this.callback) {
|
|
103
|
-
try {
|
|
104
|
-
this.callback(progressData);
|
|
105
|
-
} catch (err) {
|
|
106
|
-
this.logger.warn(`Error in progress callback: ${err}`);
|
|
1
|
+
import { HederaMirrorNode } from "./standards-sdk.es23.js";
|
|
2
|
+
async function accountIdsToExemptKeys(accountIds, network, logger) {
|
|
3
|
+
const mirrorNode = new HederaMirrorNode(
|
|
4
|
+
network,
|
|
5
|
+
logger
|
|
6
|
+
);
|
|
7
|
+
const exemptKeys = [];
|
|
8
|
+
for (const accountId of accountIds) {
|
|
9
|
+
try {
|
|
10
|
+
const publicKey = await mirrorNode.getPublicKey(accountId);
|
|
11
|
+
exemptKeys.push(publicKey);
|
|
12
|
+
} catch (error) {
|
|
13
|
+
if (logger) {
|
|
14
|
+
logger.warn(
|
|
15
|
+
`Could not get public key for account ${accountId}: ${error}`
|
|
16
|
+
);
|
|
107
17
|
}
|
|
108
18
|
}
|
|
109
19
|
}
|
|
110
|
-
|
|
111
|
-
const range = this.maxPercent - this.minPercent;
|
|
112
|
-
const sourceRange = sourceMax - sourceMin;
|
|
113
|
-
const scaleFactor = range / sourceRange;
|
|
114
|
-
return this.minPercent + (percent - sourceMin) * scaleFactor;
|
|
115
|
-
}
|
|
116
|
-
preparing(message, percent, details) {
|
|
117
|
-
this.report({
|
|
118
|
-
stage: "preparing",
|
|
119
|
-
message,
|
|
120
|
-
progressPercent: percent,
|
|
121
|
-
details
|
|
122
|
-
});
|
|
123
|
-
}
|
|
124
|
-
submitting(message, percent, details) {
|
|
125
|
-
this.report({
|
|
126
|
-
stage: "submitting",
|
|
127
|
-
message,
|
|
128
|
-
progressPercent: percent,
|
|
129
|
-
details
|
|
130
|
-
});
|
|
131
|
-
}
|
|
132
|
-
confirming(message, percent, details) {
|
|
133
|
-
this.report({
|
|
134
|
-
stage: "confirming",
|
|
135
|
-
message,
|
|
136
|
-
progressPercent: percent,
|
|
137
|
-
details
|
|
138
|
-
});
|
|
139
|
-
}
|
|
140
|
-
verifying(message, percent, details) {
|
|
141
|
-
this.report({
|
|
142
|
-
stage: "verifying",
|
|
143
|
-
message,
|
|
144
|
-
progressPercent: percent,
|
|
145
|
-
details
|
|
146
|
-
});
|
|
147
|
-
}
|
|
148
|
-
completed(message, details) {
|
|
149
|
-
this.report({ stage: "completed", message, progressPercent: 100, details });
|
|
150
|
-
}
|
|
151
|
-
failed(message, details) {
|
|
152
|
-
this.report({
|
|
153
|
-
stage: "failed",
|
|
154
|
-
message,
|
|
155
|
-
progressPercent: this.lastReportedPercent,
|
|
156
|
-
details
|
|
157
|
-
});
|
|
158
|
-
}
|
|
20
|
+
return exemptKeys;
|
|
159
21
|
}
|
|
160
22
|
export {
|
|
161
|
-
|
|
23
|
+
accountIdsToExemptKeys
|
|
162
24
|
};
|
|
163
25
|
//# sourceMappingURL=standards-sdk.es17.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"standards-sdk.es17.js","sources":["../../src/utils/
|
|
1
|
+
{"version":3,"file":"standards-sdk.es17.js","sources":["../../src/utils/topic-fee-utils.ts"],"sourcesContent":["import { PublicKey } from '@hashgraph/sdk';\nimport { Logger } from './logger';\nimport { HederaMirrorNode } from '../services/mirror-node';\n\n/**\n * Converts account IDs to public keys for fee exemption\n * @param client Hedera client instance\n * @param accountIds Array of account IDs to convert to public keys\n * @param network The network to use for retrieving public keys\n * @param logger Optional logger instance\n * @returns Array of public keys\n */\nexport async function accountIdsToExemptKeys(\n accountIds: string[],\n network: string,\n logger?: Logger,\n): Promise<PublicKey[]> {\n const mirrorNode = new HederaMirrorNode(\n network as 'mainnet' | 'testnet',\n logger,\n );\n const exemptKeys: PublicKey[] = [];\n\n for (const accountId of accountIds) {\n try {\n const publicKey = await mirrorNode.getPublicKey(accountId);\n exemptKeys.push(publicKey);\n } catch (error) {\n if (logger) {\n logger.warn(\n `Could not get public key for account ${accountId}: ${error}`,\n );\n }\n }\n }\n\n return exemptKeys;\n}\n"],"names":[],"mappings":";AAYsB,eAAA,uBACpB,YACA,SACA,QACsB;AACtB,QAAM,aAAa,IAAI;AAAA,IACrB;AAAA,IACA;AAAA,EACF;AACA,QAAM,aAA0B,CAAC;AAEjC,aAAW,aAAa,YAAY;AAC9B,QAAA;AACF,YAAM,YAAY,MAAM,WAAW,aAAa,SAAS;AACzD,iBAAW,KAAK,SAAS;AAAA,aAClB,OAAO;AACd,UAAI,QAAQ;AACH,eAAA;AAAA,UACL,wCAAwC,SAAS,KAAK,KAAK;AAAA,QAC7D;AAAA,MAAA;AAAA,IACF;AAAA,EACF;AAGK,SAAA;AACT;"}
|
|
@@ -1,159 +1,163 @@
|
|
|
1
|
-
import
|
|
2
|
-
|
|
3
|
-
|
|
4
|
-
|
|
5
|
-
this.
|
|
6
|
-
this.logger = Logger
|
|
7
|
-
level:
|
|
8
|
-
module: "
|
|
1
|
+
import { Logger } from "./standards-sdk.es16.js";
|
|
2
|
+
class ProgressReporter {
|
|
3
|
+
constructor(options = {}) {
|
|
4
|
+
this.module = options.module || "Progress";
|
|
5
|
+
this.callback = options.callback;
|
|
6
|
+
this.logger = options.logger || new Logger({
|
|
7
|
+
level: "info",
|
|
8
|
+
module: "ProgressReporter"
|
|
9
9
|
});
|
|
10
|
+
this.logProgress = options.logProgress ?? true;
|
|
11
|
+
this.minPercent = options.minPercent ?? 0;
|
|
12
|
+
this.maxPercent = options.maxPercent ?? 100;
|
|
13
|
+
this.lastReportedPercent = -1;
|
|
14
|
+
this.lastReportedTime = 0;
|
|
15
|
+
this.throttleMs = 100;
|
|
10
16
|
}
|
|
11
|
-
|
|
12
|
-
|
|
13
|
-
|
|
14
|
-
|
|
15
|
-
|
|
16
|
-
|
|
17
|
-
|
|
18
|
-
|
|
19
|
-
|
|
20
|
-
|
|
21
|
-
|
|
22
|
-
|
|
23
|
-
|
|
24
|
-
|
|
25
|
-
|
|
26
|
-
|
|
27
|
-
|
|
28
|
-
|
|
29
|
-
|
|
30
|
-
return binaryTypes.some((prefix) => mimeType.startsWith(prefix));
|
|
31
|
-
}
|
|
32
|
-
/**
|
|
33
|
-
* Parses an HRL string into its components
|
|
34
|
-
*/
|
|
35
|
-
parseHRL(hrl) {
|
|
36
|
-
if (!hrl) {
|
|
37
|
-
return null;
|
|
38
|
-
}
|
|
39
|
-
const hrlPattern = /^hcs:\/\/(\d+)\/([0-9]+\.[0-9]+\.[0-9]+)$/;
|
|
40
|
-
const match = hrl.match(hrlPattern);
|
|
41
|
-
if (!match) {
|
|
42
|
-
return null;
|
|
17
|
+
static getInstance(options = {}) {
|
|
18
|
+
if (!ProgressReporter.instance) {
|
|
19
|
+
ProgressReporter.instance = new ProgressReporter(options);
|
|
20
|
+
} else {
|
|
21
|
+
if (options.callback) {
|
|
22
|
+
ProgressReporter.instance.setCallback(options.callback);
|
|
23
|
+
}
|
|
24
|
+
if (options.module) {
|
|
25
|
+
ProgressReporter.instance.setModule(options.module);
|
|
26
|
+
}
|
|
27
|
+
if (options.logger) {
|
|
28
|
+
ProgressReporter.instance.setLogger(options.logger);
|
|
29
|
+
}
|
|
30
|
+
if (options.minPercent !== void 0) {
|
|
31
|
+
ProgressReporter.instance.setMinPercent(options.minPercent);
|
|
32
|
+
}
|
|
33
|
+
if (options.maxPercent !== void 0) {
|
|
34
|
+
ProgressReporter.instance.setMaxPercent(options.maxPercent);
|
|
35
|
+
}
|
|
43
36
|
}
|
|
44
|
-
return
|
|
45
|
-
standard: match[1],
|
|
46
|
-
topicId: match[2]
|
|
47
|
-
};
|
|
37
|
+
return ProgressReporter.instance;
|
|
48
38
|
}
|
|
49
|
-
|
|
50
|
-
|
|
51
|
-
*/
|
|
52
|
-
isValidHRL(hrl) {
|
|
53
|
-
if (!hrl || typeof hrl !== "string") {
|
|
54
|
-
return false;
|
|
55
|
-
}
|
|
56
|
-
const parsed = this.parseHRL(hrl);
|
|
57
|
-
if (!parsed) {
|
|
58
|
-
return false;
|
|
59
|
-
}
|
|
60
|
-
const topicIdPattern = /^[0-9]+\.[0-9]+\.[0-9]+$/;
|
|
61
|
-
if (!topicIdPattern.test(parsed.topicId)) {
|
|
62
|
-
return false;
|
|
63
|
-
}
|
|
64
|
-
return true;
|
|
65
|
-
}
|
|
66
|
-
async getContentWithType(hrl, options) {
|
|
67
|
-
if (!this.isValidHRL(hrl)) {
|
|
68
|
-
return {
|
|
69
|
-
content: hrl,
|
|
70
|
-
contentType: "text/plain",
|
|
71
|
-
isBinary: false
|
|
72
|
-
};
|
|
73
|
-
}
|
|
74
|
-
try {
|
|
75
|
-
const result = await this.resolveHRL(hrl, options);
|
|
76
|
-
return {
|
|
77
|
-
content: result.content,
|
|
78
|
-
contentType: result.contentType,
|
|
79
|
-
isBinary: result.isBinary
|
|
80
|
-
};
|
|
81
|
-
} catch (e) {
|
|
82
|
-
const error = e;
|
|
83
|
-
const logMessage = `Error resolving HRL for content and type: ${error.message}`;
|
|
84
|
-
this.logger.error(logMessage);
|
|
85
|
-
throw new Error(logMessage);
|
|
86
|
-
}
|
|
39
|
+
setCallback(callback) {
|
|
40
|
+
this.callback = callback;
|
|
87
41
|
}
|
|
88
|
-
|
|
89
|
-
|
|
90
|
-
|
|
91
|
-
|
|
92
|
-
|
|
93
|
-
|
|
94
|
-
|
|
95
|
-
|
|
96
|
-
|
|
97
|
-
|
|
98
|
-
|
|
99
|
-
|
|
100
|
-
|
|
101
|
-
|
|
102
|
-
|
|
103
|
-
this.logger
|
|
104
|
-
|
|
105
|
-
|
|
106
|
-
|
|
107
|
-
|
|
108
|
-
|
|
109
|
-
|
|
110
|
-
|
|
111
|
-
|
|
112
|
-
|
|
113
|
-
|
|
114
|
-
|
|
115
|
-
|
|
116
|
-
|
|
117
|
-
|
|
118
|
-
if (contentType === "application/json") {
|
|
119
|
-
const response2 = await axios.get(cdnUrl, {
|
|
120
|
-
responseType: "json"
|
|
121
|
-
});
|
|
122
|
-
if (!response2.data) {
|
|
123
|
-
throw new Error(`Failed to fetch content from topic: ${topicId}`);
|
|
124
|
-
}
|
|
125
|
-
return {
|
|
126
|
-
content: response2.data,
|
|
127
|
-
contentType,
|
|
128
|
-
topicId,
|
|
129
|
-
isBinary: false
|
|
130
|
-
};
|
|
131
|
-
}
|
|
132
|
-
const response = await axios.get(cdnUrl);
|
|
133
|
-
if (!response.data) {
|
|
134
|
-
throw new Error(`Failed to fetch content from topic: ${topicId}`);
|
|
42
|
+
setModule(module) {
|
|
43
|
+
this.module = module;
|
|
44
|
+
}
|
|
45
|
+
setLogger(logger) {
|
|
46
|
+
this.logger = logger;
|
|
47
|
+
}
|
|
48
|
+
setMinPercent(minPercent) {
|
|
49
|
+
this.minPercent = minPercent;
|
|
50
|
+
}
|
|
51
|
+
setMaxPercent(maxPercent) {
|
|
52
|
+
this.maxPercent = maxPercent;
|
|
53
|
+
}
|
|
54
|
+
createSubProgress(options) {
|
|
55
|
+
const subReporter = new ProgressReporter({
|
|
56
|
+
module: this.module,
|
|
57
|
+
logger: this.logger,
|
|
58
|
+
logProgress: this.logProgress,
|
|
59
|
+
minPercent: options.minPercent,
|
|
60
|
+
maxPercent: options.maxPercent
|
|
61
|
+
});
|
|
62
|
+
const logPrefix = options.logPrefix || "";
|
|
63
|
+
subReporter.setCallback((data) => {
|
|
64
|
+
const scaledPercent = this.scalePercent(
|
|
65
|
+
data.progressPercent,
|
|
66
|
+
options.minPercent,
|
|
67
|
+
options.maxPercent
|
|
68
|
+
);
|
|
69
|
+
let formattedMessage = data.message;
|
|
70
|
+
if (logPrefix && !formattedMessage.startsWith(logPrefix)) {
|
|
71
|
+
formattedMessage = `${logPrefix}: ${formattedMessage}`;
|
|
135
72
|
}
|
|
136
|
-
|
|
137
|
-
|
|
138
|
-
|
|
139
|
-
|
|
140
|
-
|
|
73
|
+
this.report({
|
|
74
|
+
stage: data.stage,
|
|
75
|
+
message: formattedMessage,
|
|
76
|
+
progressPercent: scaledPercent,
|
|
77
|
+
details: data.details
|
|
78
|
+
});
|
|
79
|
+
});
|
|
80
|
+
return subReporter;
|
|
81
|
+
}
|
|
82
|
+
report(data) {
|
|
83
|
+
const rawPercent = data.progressPercent;
|
|
84
|
+
const percent = Math.max(0, Math.min(100, rawPercent));
|
|
85
|
+
const scaledPercent = this.scalePercent(percent, 0, 100);
|
|
86
|
+
const now = Date.now();
|
|
87
|
+
if (scaledPercent === this.lastReportedPercent && now - this.lastReportedTime < this.throttleMs && data.stage !== "completed" && data.stage !== "failed") {
|
|
88
|
+
return;
|
|
89
|
+
}
|
|
90
|
+
this.lastReportedPercent = scaledPercent;
|
|
91
|
+
this.lastReportedTime = now;
|
|
92
|
+
const progressData = {
|
|
93
|
+
...data,
|
|
94
|
+
progressPercent: scaledPercent
|
|
95
|
+
};
|
|
96
|
+
if (this.logProgress) {
|
|
97
|
+
this.logger.debug(
|
|
98
|
+
`[${this.module}] [${data.stage.toUpperCase()}] ${data.message} (${scaledPercent.toFixed(1)}%)`,
|
|
99
|
+
data.details
|
|
100
|
+
);
|
|
101
|
+
}
|
|
102
|
+
if (this.callback) {
|
|
103
|
+
try {
|
|
104
|
+
this.callback(progressData);
|
|
105
|
+
} catch (err) {
|
|
106
|
+
this.logger.warn(`Error in progress callback: ${err}`);
|
|
141
107
|
}
|
|
142
|
-
return {
|
|
143
|
-
content,
|
|
144
|
-
contentType,
|
|
145
|
-
topicId,
|
|
146
|
-
isBinary: false
|
|
147
|
-
};
|
|
148
|
-
} catch (e) {
|
|
149
|
-
const error = e;
|
|
150
|
-
const logMessage = `Error resolving HRL reference: ${error.message}`;
|
|
151
|
-
this.logger.error(logMessage);
|
|
152
|
-
throw new Error(logMessage);
|
|
153
108
|
}
|
|
154
109
|
}
|
|
110
|
+
scalePercent(percent, sourceMin, sourceMax) {
|
|
111
|
+
const range = this.maxPercent - this.minPercent;
|
|
112
|
+
const sourceRange = sourceMax - sourceMin;
|
|
113
|
+
const scaleFactor = range / sourceRange;
|
|
114
|
+
return this.minPercent + (percent - sourceMin) * scaleFactor;
|
|
115
|
+
}
|
|
116
|
+
preparing(message, percent, details) {
|
|
117
|
+
this.report({
|
|
118
|
+
stage: "preparing",
|
|
119
|
+
message,
|
|
120
|
+
progressPercent: percent,
|
|
121
|
+
details
|
|
122
|
+
});
|
|
123
|
+
}
|
|
124
|
+
submitting(message, percent, details) {
|
|
125
|
+
this.report({
|
|
126
|
+
stage: "submitting",
|
|
127
|
+
message,
|
|
128
|
+
progressPercent: percent,
|
|
129
|
+
details
|
|
130
|
+
});
|
|
131
|
+
}
|
|
132
|
+
confirming(message, percent, details) {
|
|
133
|
+
this.report({
|
|
134
|
+
stage: "confirming",
|
|
135
|
+
message,
|
|
136
|
+
progressPercent: percent,
|
|
137
|
+
details
|
|
138
|
+
});
|
|
139
|
+
}
|
|
140
|
+
verifying(message, percent, details) {
|
|
141
|
+
this.report({
|
|
142
|
+
stage: "verifying",
|
|
143
|
+
message,
|
|
144
|
+
progressPercent: percent,
|
|
145
|
+
details
|
|
146
|
+
});
|
|
147
|
+
}
|
|
148
|
+
completed(message, details) {
|
|
149
|
+
this.report({ stage: "completed", message, progressPercent: 100, details });
|
|
150
|
+
}
|
|
151
|
+
failed(message, details) {
|
|
152
|
+
this.report({
|
|
153
|
+
stage: "failed",
|
|
154
|
+
message,
|
|
155
|
+
progressPercent: this.lastReportedPercent,
|
|
156
|
+
details
|
|
157
|
+
});
|
|
158
|
+
}
|
|
155
159
|
}
|
|
156
160
|
export {
|
|
157
|
-
|
|
161
|
+
ProgressReporter
|
|
158
162
|
};
|
|
159
163
|
//# sourceMappingURL=standards-sdk.es18.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"standards-sdk.es18.js","sources":["../../src/utils/
|
|
1
|
+
{"version":3,"file":"standards-sdk.es18.js","sources":["../../src/utils/progress-reporter.ts"],"sourcesContent":["import { Logger } from './logger';\n\nexport type ProgressStage =\n | 'preparing'\n | 'submitting'\n | 'confirming'\n | 'verifying'\n | 'completed'\n | 'failed';\n\nexport interface ProgressData {\n stage: ProgressStage;\n message: string;\n progressPercent: number;\n details?: Record<string, any>;\n}\n\nexport type ProgressCallback = (data: ProgressData) => void;\n\nexport interface ProgressReporterOptions {\n module?: string;\n callback?: ProgressCallback;\n logger?: Logger;\n logProgress?: boolean;\n minPercent?: number;\n maxPercent?: number;\n}\n\n/**\n * ProgressReporter is a singleton class that reports progress of a task.\n * Can be used in a generalized fashion.\n */\nexport class ProgressReporter {\n private static instance: ProgressReporter;\n private module: string;\n private callback?: ProgressCallback;\n private logger: Logger;\n private logProgress: boolean;\n private minPercent: number;\n private maxPercent: number;\n private lastReportedPercent: number;\n private lastReportedTime: number;\n private throttleMs: number;\n\n constructor(options: ProgressReporterOptions = {}) {\n this.module = options.module || 'Progress';\n this.callback = options.callback;\n this.logger =\n options.logger ||\n new Logger({\n level: 'info',\n module: 'ProgressReporter',\n });\n this.logProgress = options.logProgress ?? true;\n this.minPercent = options.minPercent ?? 0;\n this.maxPercent = options.maxPercent ?? 100;\n this.lastReportedPercent = -1;\n this.lastReportedTime = 0;\n this.throttleMs = 100;\n }\n\n static getInstance(options: ProgressReporterOptions = {}): ProgressReporter {\n if (!ProgressReporter.instance) {\n ProgressReporter.instance = new ProgressReporter(options);\n } else {\n if (options.callback) {\n ProgressReporter.instance.setCallback(options.callback);\n }\n if (options.module) {\n ProgressReporter.instance.setModule(options.module);\n }\n if (options.logger) {\n ProgressReporter.instance.setLogger(options.logger);\n }\n if (options.minPercent !== undefined) {\n ProgressReporter.instance.setMinPercent(options.minPercent);\n }\n if (options.maxPercent !== undefined) {\n ProgressReporter.instance.setMaxPercent(options.maxPercent);\n }\n }\n return ProgressReporter.instance;\n }\n\n setCallback(callback: ProgressCallback): void {\n this.callback = callback;\n }\n\n setModule(module: string): void {\n this.module = module;\n }\n\n setLogger(logger: Logger): void {\n this.logger = logger;\n }\n\n setMinPercent(minPercent: number): void {\n this.minPercent = minPercent;\n }\n\n setMaxPercent(maxPercent: number): void {\n this.maxPercent = maxPercent;\n }\n\n createSubProgress(options: {\n minPercent: number;\n maxPercent: number;\n logPrefix?: string;\n }): ProgressReporter {\n const subReporter = new ProgressReporter({\n module: this.module,\n logger: this.logger,\n logProgress: this.logProgress,\n minPercent: options.minPercent,\n maxPercent: options.maxPercent,\n });\n\n const logPrefix = options.logPrefix || '';\n\n subReporter.setCallback(data => {\n const scaledPercent = this.scalePercent(\n data.progressPercent,\n options.minPercent,\n options.maxPercent,\n );\n\n let formattedMessage = data.message;\n if (logPrefix && !formattedMessage.startsWith(logPrefix)) {\n formattedMessage = `${logPrefix}: ${formattedMessage}`;\n }\n\n this.report({\n stage: data.stage,\n message: formattedMessage,\n progressPercent: scaledPercent,\n details: data.details,\n });\n });\n\n return subReporter;\n }\n\n report(data: ProgressData): void {\n const rawPercent = data.progressPercent;\n const percent = Math.max(0, Math.min(100, rawPercent));\n\n const scaledPercent = this.scalePercent(percent, 0, 100);\n\n const now = Date.now();\n if (\n scaledPercent === this.lastReportedPercent &&\n now - this.lastReportedTime < this.throttleMs &&\n data.stage !== 'completed' &&\n data.stage !== 'failed'\n ) {\n return;\n }\n\n this.lastReportedPercent = scaledPercent;\n this.lastReportedTime = now;\n\n const progressData = {\n ...data,\n progressPercent: scaledPercent,\n };\n\n if (this.logProgress) {\n this.logger.debug(\n `[${this.module}] [${data.stage.toUpperCase()}] ${\n data.message\n } (${scaledPercent.toFixed(1)}%)`,\n data.details,\n );\n }\n\n if (this.callback) {\n try {\n this.callback(progressData);\n } catch (err) {\n this.logger.warn(`Error in progress callback: ${err}`);\n }\n }\n }\n\n private scalePercent(\n percent: number,\n sourceMin: number,\n sourceMax: number,\n ): number {\n const range = this.maxPercent - this.minPercent;\n const sourceRange = sourceMax - sourceMin;\n const scaleFactor = range / sourceRange;\n\n return this.minPercent + (percent - sourceMin) * scaleFactor;\n }\n\n preparing(\n message: string,\n percent: number,\n details?: Record<string, any>,\n ): void {\n this.report({\n stage: 'preparing',\n message,\n progressPercent: percent,\n details,\n });\n }\n\n submitting(\n message: string,\n percent: number,\n details?: Record<string, any>,\n ): void {\n this.report({\n stage: 'submitting',\n message,\n progressPercent: percent,\n details,\n });\n }\n\n confirming(\n message: string,\n percent: number,\n details?: Record<string, any>,\n ): void {\n this.report({\n stage: 'confirming',\n message,\n progressPercent: percent,\n details,\n });\n }\n\n verifying(\n message: string,\n percent: number,\n details?: Record<string, any>,\n ): void {\n this.report({\n stage: 'verifying',\n message,\n progressPercent: percent,\n details,\n });\n }\n\n completed(message: string, details?: Record<string, any>): void {\n this.report({ stage: 'completed', message, progressPercent: 100, details });\n }\n\n failed(message: string, details?: Record<string, any>): void {\n this.report({\n stage: 'failed',\n message,\n progressPercent: this.lastReportedPercent,\n details,\n });\n }\n}\n"],"names":[],"mappings":"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"}
|