@hashgraphonline/standards-sdk 0.0.83 → 0.0.85
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/es/hcs-10/base-client.d.ts.map +1 -1
- package/dist/es/hcs-10/connections-manager.d.ts +203 -0
- package/dist/es/hcs-10/connections-manager.d.ts.map +1 -0
- package/dist/es/hcs-10/index.d.ts +1 -0
- package/dist/es/hcs-10/index.d.ts.map +1 -1
- package/dist/es/standards-sdk.es.js +13 -11
- package/dist/es/standards-sdk.es.js.map +1 -1
- package/dist/es/standards-sdk.es10.js +778 -115
- package/dist/es/standards-sdk.es10.js.map +1 -1
- package/dist/es/standards-sdk.es100.js +127 -138
- package/dist/es/standards-sdk.es100.js.map +1 -1
- package/dist/es/standards-sdk.es101.js +90 -22
- package/dist/es/standards-sdk.es101.js.map +1 -1
- package/dist/es/standards-sdk.es102.js +78 -787
- package/dist/es/standards-sdk.es102.js.map +1 -1
- package/dist/es/standards-sdk.es103.js +31 -3
- package/dist/es/standards-sdk.es103.js.map +1 -1
- package/dist/es/standards-sdk.es104.js +5 -142
- package/dist/es/standards-sdk.es104.js.map +1 -1
- package/dist/es/standards-sdk.es105.js +145 -160
- package/dist/es/standards-sdk.es105.js.map +1 -1
- package/dist/es/standards-sdk.es106.js +22 -33
- package/dist/es/standards-sdk.es106.js.map +1 -1
- package/dist/es/standards-sdk.es107.js +790 -30
- package/dist/es/standards-sdk.es107.js.map +1 -1
- package/dist/es/standards-sdk.es108.js +174 -9
- package/dist/es/standards-sdk.es108.js.map +1 -1
- package/dist/es/standards-sdk.es109.js +139 -30
- package/dist/es/standards-sdk.es109.js.map +1 -1
- package/dist/es/standards-sdk.es11.js +103 -58
- package/dist/es/standards-sdk.es11.js.map +1 -1
- package/dist/es/standards-sdk.es110.js +16 -414
- package/dist/es/standards-sdk.es110.js.map +1 -1
- package/dist/es/standards-sdk.es111.js +27 -2
- package/dist/es/standards-sdk.es111.js.map +1 -1
- package/dist/es/standards-sdk.es112.js +24 -118
- package/dist/es/standards-sdk.es112.js.map +1 -1
- package/dist/es/standards-sdk.es113.js +36 -19
- package/dist/es/standards-sdk.es113.js.map +1 -1
- package/dist/es/standards-sdk.es114.js +3 -26
- package/dist/es/standards-sdk.es114.js.map +1 -1
- package/dist/es/standards-sdk.es115.js +418 -25
- package/dist/es/standards-sdk.es115.js.map +1 -1
- package/dist/es/standards-sdk.es116.js +2 -38
- package/dist/es/standards-sdk.es116.js.map +1 -1
- package/dist/es/standards-sdk.es117.js +123 -0
- package/dist/es/standards-sdk.es117.js.map +1 -0
- package/dist/es/standards-sdk.es12.js +82 -628
- package/dist/es/standards-sdk.es12.js.map +1 -1
- package/dist/es/standards-sdk.es13.js +650 -85
- package/dist/es/standards-sdk.es13.js.map +1 -1
- package/dist/es/standards-sdk.es14.js +84 -58
- package/dist/es/standards-sdk.es14.js.map +1 -1
- package/dist/es/standards-sdk.es15.js +57 -20
- package/dist/es/standards-sdk.es15.js.map +1 -1
- package/dist/es/standards-sdk.es16.js +18 -156
- package/dist/es/standards-sdk.es16.js.map +1 -1
- package/dist/es/standards-sdk.es17.js +138 -385
- package/dist/es/standards-sdk.es17.js.map +1 -1
- package/dist/es/standards-sdk.es18.js +385 -315
- package/dist/es/standards-sdk.es18.js.map +1 -1
- package/dist/es/standards-sdk.es19.js +310 -128
- package/dist/es/standards-sdk.es19.js.map +1 -1
- package/dist/es/standards-sdk.es2.js +1 -12
- package/dist/es/standards-sdk.es2.js.map +1 -1
- package/dist/es/standards-sdk.es20.js +155 -7
- package/dist/es/standards-sdk.es20.js.map +1 -1
- package/dist/es/standards-sdk.es21.js +7 -1767
- package/dist/es/standards-sdk.es21.js.map +1 -1
- package/dist/es/standards-sdk.es22.js +1767 -36
- package/dist/es/standards-sdk.es22.js.map +1 -1
- package/dist/es/standards-sdk.es23.js +36 -48
- package/dist/es/standards-sdk.es23.js.map +1 -1
- package/dist/es/standards-sdk.es24.js +21 -7163
- package/dist/es/standards-sdk.es24.js.map +1 -1
- package/dist/es/standards-sdk.es25.js +7190 -3
- package/dist/es/standards-sdk.es25.js.map +1 -1
- package/dist/es/standards-sdk.es26.js +3 -2
- package/dist/es/standards-sdk.es26.js.map +1 -1
- package/dist/es/standards-sdk.es27.js +2 -4167
- package/dist/es/standards-sdk.es27.js.map +1 -1
- package/dist/es/standards-sdk.es28.js +10 -10
- package/dist/es/standards-sdk.es29.js +4167 -5
- 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 +5 -101
- package/dist/es/standards-sdk.es30.js.map +1 -1
- package/dist/es/standards-sdk.es31.js +364 -2
- package/dist/es/standards-sdk.es31.js.map +1 -1
- package/dist/es/standards-sdk.es32.js +5 -15
- package/dist/es/standards-sdk.es32.js.map +1 -1
- package/dist/es/standards-sdk.es33.js +167 -397
- package/dist/es/standards-sdk.es33.js.map +1 -1
- package/dist/es/standards-sdk.es34.js +68 -351
- package/dist/es/standards-sdk.es34.js.map +1 -1
- package/dist/es/standards-sdk.es35.js +113 -5
- package/dist/es/standards-sdk.es35.js.map +1 -1
- package/dist/es/standards-sdk.es36.js +43 -170
- package/dist/es/standards-sdk.es36.js.map +1 -1
- package/dist/es/standards-sdk.es37.js +9 -80
- package/dist/es/standards-sdk.es37.js.map +1 -1
- package/dist/es/standards-sdk.es38.js +87 -104
- package/dist/es/standards-sdk.es38.js.map +1 -1
- package/dist/es/standards-sdk.es39.js +3 -51
- package/dist/es/standards-sdk.es39.js.map +1 -1
- package/dist/es/standards-sdk.es4.js +1 -1
- package/dist/es/standards-sdk.es40.js +2 -10
- package/dist/es/standards-sdk.es40.js.map +1 -1
- package/dist/es/standards-sdk.es41.js +102 -86
- package/dist/es/standards-sdk.es41.js.map +1 -1
- package/dist/es/standards-sdk.es42.js +73 -3
- package/dist/es/standards-sdk.es42.js.map +1 -1
- package/dist/es/standards-sdk.es43.js +6 -2
- package/dist/es/standards-sdk.es43.js.map +1 -1
- package/dist/es/standards-sdk.es44.js +4 -112
- package/dist/es/standards-sdk.es44.js.map +1 -1
- package/dist/es/standards-sdk.es45.js +216 -69
- package/dist/es/standards-sdk.es45.js.map +1 -1
- package/dist/es/standards-sdk.es46.js +58 -6
- package/dist/es/standards-sdk.es46.js.map +1 -1
- package/dist/es/standards-sdk.es47.js +69 -5
- package/dist/es/standards-sdk.es47.js.map +1 -1
- package/dist/es/standards-sdk.es48.js +3 -221
- package/dist/es/standards-sdk.es48.js.map +1 -1
- package/dist/es/standards-sdk.es49.js +158 -52
- package/dist/es/standards-sdk.es49.js.map +1 -1
- package/dist/es/standards-sdk.es5.js +6 -8
- package/dist/es/standards-sdk.es5.js.map +1 -1
- package/dist/es/standards-sdk.es50.js +32 -69
- package/dist/es/standards-sdk.es50.js.map +1 -1
- package/dist/es/standards-sdk.es51.js +63 -2282
- package/dist/es/standards-sdk.es51.js.map +1 -1
- package/dist/es/standards-sdk.es52.js +47 -161
- package/dist/es/standards-sdk.es52.js.map +1 -1
- package/dist/es/standards-sdk.es53.js +8 -7134
- package/dist/es/standards-sdk.es53.js.map +1 -1
- package/dist/es/standards-sdk.es54.js +65 -3
- package/dist/es/standards-sdk.es54.js.map +1 -1
- package/dist/es/standards-sdk.es55.js +6 -32
- package/dist/es/standards-sdk.es55.js.map +1 -1
- package/dist/es/standards-sdk.es56.js +13 -61
- package/dist/es/standards-sdk.es56.js.map +1 -1
- package/dist/es/standards-sdk.es57.js +7 -50
- package/dist/es/standards-sdk.es57.js.map +1 -1
- package/dist/es/standards-sdk.es58.js +45 -10
- package/dist/es/standards-sdk.es58.js.map +1 -1
- package/dist/es/standards-sdk.es59.js +2 -65
- package/dist/es/standards-sdk.es59.js.map +1 -1
- package/dist/es/standards-sdk.es60.js +135 -5
- package/dist/es/standards-sdk.es60.js.map +1 -1
- package/dist/es/standards-sdk.es61.js +170 -13
- package/dist/es/standards-sdk.es61.js.map +1 -1
- package/dist/es/standards-sdk.es62.js +101 -7
- package/dist/es/standards-sdk.es62.js.map +1 -1
- package/dist/es/standards-sdk.es63.js +2 -45
- package/dist/es/standards-sdk.es63.js.map +1 -1
- package/dist/es/standards-sdk.es64.js +16 -2
- package/dist/es/standards-sdk.es64.js.map +1 -1
- package/dist/es/standards-sdk.es65.js +404 -131
- package/dist/es/standards-sdk.es65.js.map +1 -1
- package/dist/es/standards-sdk.es66.js +12 -171
- package/dist/es/standards-sdk.es66.js.map +1 -1
- package/dist/es/standards-sdk.es67.js +13 -13
- package/dist/es/standards-sdk.es67.js.map +1 -1
- package/dist/es/standards-sdk.es68.js +32 -13
- package/dist/es/standards-sdk.es68.js.map +1 -1
- package/dist/es/standards-sdk.es69.js +15 -2
- package/dist/es/standards-sdk.es69.js.map +1 -1
- package/dist/es/standards-sdk.es7.js +8 -8
- package/dist/es/standards-sdk.es70.js +3 -31
- package/dist/es/standards-sdk.es70.js.map +1 -1
- package/dist/es/standards-sdk.es71.js +3 -14
- package/dist/es/standards-sdk.es71.js.map +1 -1
- package/dist/es/standards-sdk.es72.js +15 -3
- package/dist/es/standards-sdk.es72.js.map +1 -1
- package/dist/es/standards-sdk.es73.js +4 -3
- package/dist/es/standards-sdk.es73.js.map +1 -1
- package/dist/es/standards-sdk.es74.js +39 -16
- package/dist/es/standards-sdk.es74.js.map +1 -1
- package/dist/es/standards-sdk.es75.js +40 -5
- package/dist/es/standards-sdk.es75.js.map +1 -1
- package/dist/es/standards-sdk.es76.js +35 -37
- package/dist/es/standards-sdk.es76.js.map +1 -1
- package/dist/es/standards-sdk.es77.js +72 -34
- package/dist/es/standards-sdk.es77.js.map +1 -1
- package/dist/es/standards-sdk.es78.js +2281 -36
- package/dist/es/standards-sdk.es78.js.map +1 -1
- package/dist/es/standards-sdk.es79.js +2 -78
- package/dist/es/standards-sdk.es79.js.map +1 -1
- package/dist/es/standards-sdk.es8.js +8 -8
- package/dist/es/standards-sdk.es80.js +7136 -3
- package/dist/es/standards-sdk.es80.js.map +1 -1
- package/dist/es/standards-sdk.es81.js +3 -2
- package/dist/es/standards-sdk.es81.js.map +1 -1
- package/dist/es/standards-sdk.es82.js +2 -2
- package/dist/es/standards-sdk.es82.js.map +1 -1
- package/dist/es/standards-sdk.es83.js +2 -195
- package/dist/es/standards-sdk.es83.js.map +1 -1
- package/dist/es/standards-sdk.es84.js +31 -435
- package/dist/es/standards-sdk.es84.js.map +1 -1
- package/dist/es/standards-sdk.es85.js +31 -23
- package/dist/es/standards-sdk.es85.js.map +1 -1
- package/dist/es/standards-sdk.es86.js +9 -139
- package/dist/es/standards-sdk.es86.js.map +1 -1
- package/dist/es/standards-sdk.es87.js +32 -16
- package/dist/es/standards-sdk.es87.js.map +1 -1
- package/dist/es/standards-sdk.es88.js +189 -23
- package/dist/es/standards-sdk.es88.js.map +1 -1
- package/dist/es/standards-sdk.es89.js +433 -24
- 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 +16 -12
- package/dist/es/standards-sdk.es90.js.map +1 -1
- package/dist/es/standards-sdk.es91.js +126 -31
- package/dist/es/standards-sdk.es91.js.map +1 -1
- package/dist/es/standards-sdk.es92.js +9 -9
- package/dist/es/standards-sdk.es92.js.map +1 -1
- package/dist/es/standards-sdk.es93.js +22 -54
- package/dist/es/standards-sdk.es93.js.map +1 -1
- package/dist/es/standards-sdk.es94.js +20 -1280
- package/dist/es/standards-sdk.es94.js.map +1 -1
- package/dist/es/standards-sdk.es95.js +17 -144
- package/dist/es/standards-sdk.es95.js.map +1 -1
- package/dist/es/standards-sdk.es96.js +39 -86
- package/dist/es/standards-sdk.es96.js.map +1 -1
- package/dist/es/standards-sdk.es97.js +13 -79
- package/dist/es/standards-sdk.es97.js.map +1 -1
- package/dist/es/standards-sdk.es98.js +57 -28
- package/dist/es/standards-sdk.es98.js.map +1 -1
- package/dist/es/standards-sdk.es99.js +1288 -5
- package/dist/es/standards-sdk.es99.js.map +1 -1
- package/dist/umd/hcs-10/base-client.d.ts.map +1 -1
- package/dist/umd/hcs-10/connections-manager.d.ts +203 -0
- package/dist/umd/hcs-10/connections-manager.d.ts.map +1 -0
- package/dist/umd/hcs-10/index.d.ts +1 -0
- package/dist/umd/hcs-10/index.d.ts.map +1 -1
- package/dist/umd/standards-sdk.umd.js +9 -9
- package/dist/umd/standards-sdk.umd.js.map +1 -1
- package/package.json +10 -4
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"standards-sdk.es16.js","sources":["../../src/utils/
|
|
1
|
+
{"version":3,"file":"standards-sdk.es16.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,410 +1,163 @@
|
|
|
1
|
-
import
|
|
2
|
-
|
|
3
|
-
|
|
4
|
-
|
|
5
|
-
|
|
6
|
-
|
|
7
|
-
|
|
8
|
-
|
|
9
|
-
|
|
10
|
-
|
|
11
|
-
|
|
12
|
-
|
|
13
|
-
|
|
14
|
-
|
|
15
|
-
|
|
16
|
-
}
|
|
17
|
-
|
|
18
|
-
if (
|
|
19
|
-
|
|
20
|
-
}
|
|
21
|
-
let sdk;
|
|
22
|
-
if (existingSDK) {
|
|
23
|
-
logger.debug("Using existing InscriptionSDK instance");
|
|
24
|
-
sdk = existingSDK;
|
|
25
|
-
} else if (options.apiKey) {
|
|
26
|
-
logger.debug("Initializing InscriptionSDK with API key");
|
|
27
|
-
sdk = new InscriptionSDK({
|
|
28
|
-
apiKey: options.apiKey,
|
|
29
|
-
network: clientConfig.network || "mainnet"
|
|
30
|
-
});
|
|
1
|
+
import { Logger } from "./standards-sdk.es15.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
|
+
});
|
|
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;
|
|
16
|
+
}
|
|
17
|
+
static getInstance(options = {}) {
|
|
18
|
+
if (!ProgressReporter.instance) {
|
|
19
|
+
ProgressReporter.instance = new ProgressReporter(options);
|
|
31
20
|
} else {
|
|
32
|
-
|
|
33
|
-
|
|
34
|
-
|
|
35
|
-
|
|
36
|
-
|
|
37
|
-
|
|
38
|
-
|
|
39
|
-
|
|
40
|
-
|
|
41
|
-
|
|
42
|
-
|
|
43
|
-
|
|
44
|
-
|
|
45
|
-
|
|
46
|
-
};
|
|
47
|
-
let request;
|
|
48
|
-
switch (input.type) {
|
|
49
|
-
case "url":
|
|
50
|
-
request = {
|
|
51
|
-
...baseRequest,
|
|
52
|
-
file: {
|
|
53
|
-
type: "url",
|
|
54
|
-
url: input.url
|
|
55
|
-
}
|
|
56
|
-
};
|
|
57
|
-
break;
|
|
58
|
-
case "file":
|
|
59
|
-
request = {
|
|
60
|
-
...baseRequest,
|
|
61
|
-
file: {
|
|
62
|
-
type: "path",
|
|
63
|
-
path: input.path
|
|
64
|
-
}
|
|
65
|
-
};
|
|
66
|
-
break;
|
|
67
|
-
case "buffer":
|
|
68
|
-
request = {
|
|
69
|
-
...baseRequest,
|
|
70
|
-
file: {
|
|
71
|
-
type: "base64",
|
|
72
|
-
base64: Buffer.from(input.buffer).toString("base64"),
|
|
73
|
-
fileName: input.fileName,
|
|
74
|
-
mimeType: input.mimeType
|
|
75
|
-
}
|
|
76
|
-
};
|
|
77
|
-
break;
|
|
78
|
-
}
|
|
79
|
-
if (options.mode === "hashinal") {
|
|
80
|
-
request.metadataObject = options.metadata;
|
|
81
|
-
request.creator = options.metadata?.creator || clientConfig.accountId;
|
|
82
|
-
request.description = options.metadata?.description;
|
|
83
|
-
if (options.jsonFileURL) {
|
|
84
|
-
request.jsonFileURL = options.jsonFileURL;
|
|
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);
|
|
85
35
|
}
|
|
86
36
|
}
|
|
87
|
-
|
|
88
|
-
|
|
89
|
-
|
|
90
|
-
|
|
91
|
-
|
|
92
|
-
|
|
93
|
-
|
|
94
|
-
|
|
95
|
-
|
|
96
|
-
|
|
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
|
|
97
61
|
});
|
|
98
|
-
|
|
99
|
-
|
|
100
|
-
|
|
101
|
-
|
|
102
|
-
|
|
103
|
-
|
|
104
|
-
const inscription = await waitForInscriptionConfirmation(
|
|
105
|
-
sdk,
|
|
106
|
-
result.jobId,
|
|
107
|
-
options.waitMaxAttempts,
|
|
108
|
-
options.waitIntervalMs,
|
|
109
|
-
options.progressCallback
|
|
62
|
+
const logPrefix = options.logPrefix || "";
|
|
63
|
+
subReporter.setCallback((data) => {
|
|
64
|
+
const scaledPercent = this.scalePercent(
|
|
65
|
+
data.progressPercent,
|
|
66
|
+
options.minPercent,
|
|
67
|
+
options.maxPercent
|
|
110
68
|
);
|
|
111
|
-
|
|
112
|
-
|
|
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
|
|
113
78
|
});
|
|
114
|
-
|
|
115
|
-
|
|
116
|
-
result,
|
|
117
|
-
inscription,
|
|
118
|
-
sdk
|
|
119
|
-
};
|
|
120
|
-
}
|
|
121
|
-
return {
|
|
122
|
-
confirmed: false,
|
|
123
|
-
result,
|
|
124
|
-
sdk
|
|
125
|
-
};
|
|
126
|
-
} catch (error) {
|
|
127
|
-
logger.error("Error during inscription process", error);
|
|
128
|
-
throw error;
|
|
79
|
+
});
|
|
80
|
+
return subReporter;
|
|
129
81
|
}
|
|
130
|
-
|
|
131
|
-
|
|
132
|
-
|
|
133
|
-
|
|
134
|
-
|
|
135
|
-
|
|
136
|
-
|
|
137
|
-
type: input.type,
|
|
138
|
-
mode: options.mode || "file",
|
|
139
|
-
...input.type === "url" ? { url: input.url } : {},
|
|
140
|
-
...input.type === "file" ? { path: input.path } : {},
|
|
141
|
-
...input.type === "buffer" ? { fileName: input.fileName, bufferSize: input.buffer.byteLength } : {}
|
|
142
|
-
});
|
|
143
|
-
try {
|
|
144
|
-
if (options.mode === "hashinal" && options.metadata) {
|
|
145
|
-
validateHashinalMetadata(options.metadata, logger);
|
|
146
|
-
}
|
|
147
|
-
const accountId = signer.getAccountId().toString();
|
|
148
|
-
logger.debug("Using account ID from signer", { accountId });
|
|
149
|
-
let sdk;
|
|
150
|
-
if (existingSDK) {
|
|
151
|
-
logger.debug("Using existing InscriptionSDK instance");
|
|
152
|
-
sdk = existingSDK;
|
|
153
|
-
} else if (options.apiKey) {
|
|
154
|
-
logger.debug("Initializing InscriptionSDK with API key");
|
|
155
|
-
sdk = new InscriptionSDK({
|
|
156
|
-
apiKey: options.apiKey,
|
|
157
|
-
network: options.network || "mainnet"
|
|
158
|
-
});
|
|
159
|
-
} else {
|
|
160
|
-
logger.debug("Initializing InscriptionSDK with client auth");
|
|
161
|
-
sdk = await InscriptionSDK.createWithAuth({
|
|
162
|
-
type: "client",
|
|
163
|
-
accountId,
|
|
164
|
-
signer,
|
|
165
|
-
network: options.network || "mainnet"
|
|
166
|
-
});
|
|
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;
|
|
167
89
|
}
|
|
168
|
-
|
|
169
|
-
|
|
170
|
-
|
|
171
|
-
|
|
172
|
-
|
|
173
|
-
chunkSize: options.chunkSize
|
|
90
|
+
this.lastReportedPercent = scaledPercent;
|
|
91
|
+
this.lastReportedTime = now;
|
|
92
|
+
const progressData = {
|
|
93
|
+
...data,
|
|
94
|
+
progressPercent: scaledPercent
|
|
174
95
|
};
|
|
175
|
-
|
|
176
|
-
|
|
177
|
-
|
|
178
|
-
|
|
179
|
-
|
|
180
|
-
file: {
|
|
181
|
-
type: "url",
|
|
182
|
-
url: input.url
|
|
183
|
-
}
|
|
184
|
-
};
|
|
185
|
-
break;
|
|
186
|
-
case "file":
|
|
187
|
-
request = {
|
|
188
|
-
...baseRequest,
|
|
189
|
-
file: {
|
|
190
|
-
type: "path",
|
|
191
|
-
path: input.path
|
|
192
|
-
}
|
|
193
|
-
};
|
|
194
|
-
break;
|
|
195
|
-
case "buffer":
|
|
196
|
-
request = {
|
|
197
|
-
...baseRequest,
|
|
198
|
-
file: {
|
|
199
|
-
type: "base64",
|
|
200
|
-
base64: Buffer.from(input.buffer).toString("base64"),
|
|
201
|
-
fileName: input.fileName,
|
|
202
|
-
mimeType: input.mimeType
|
|
203
|
-
}
|
|
204
|
-
};
|
|
205
|
-
break;
|
|
96
|
+
if (this.logProgress) {
|
|
97
|
+
this.logger.debug(
|
|
98
|
+
`[${this.module}] [${data.stage.toUpperCase()}] ${data.message} (${scaledPercent.toFixed(1)}%)`,
|
|
99
|
+
data.details
|
|
100
|
+
);
|
|
206
101
|
}
|
|
207
|
-
if (
|
|
208
|
-
|
|
209
|
-
|
|
210
|
-
|
|
211
|
-
|
|
212
|
-
request.jsonFileURL = options.jsonFileURL;
|
|
102
|
+
if (this.callback) {
|
|
103
|
+
try {
|
|
104
|
+
this.callback(progressData);
|
|
105
|
+
} catch (err) {
|
|
106
|
+
this.logger.warn(`Error in progress callback: ${err}`);
|
|
213
107
|
}
|
|
214
108
|
}
|
|
215
|
-
|
|
216
|
-
|
|
217
|
-
|
|
218
|
-
|
|
219
|
-
|
|
220
|
-
|
|
221
|
-
|
|
222
|
-
|
|
223
|
-
|
|
224
|
-
|
|
225
|
-
|
|
226
|
-
|
|
227
|
-
|
|
228
|
-
type: input.type,
|
|
229
|
-
mode: options.mode || "file",
|
|
230
|
-
transactionId: result.jobId
|
|
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
|
|
231
122
|
});
|
|
232
|
-
if (options.waitForConfirmation) {
|
|
233
|
-
logger.debug("Waiting for inscription confirmation", {
|
|
234
|
-
transactionId: result.jobId,
|
|
235
|
-
maxAttempts: options.waitMaxAttempts,
|
|
236
|
-
intervalMs: options.waitIntervalMs
|
|
237
|
-
});
|
|
238
|
-
const inscription = await waitForInscriptionConfirmation(
|
|
239
|
-
sdk,
|
|
240
|
-
result.jobId,
|
|
241
|
-
options.waitMaxAttempts,
|
|
242
|
-
options.waitIntervalMs,
|
|
243
|
-
options.progressCallback
|
|
244
|
-
);
|
|
245
|
-
logger.info("Inscription confirmation received", {
|
|
246
|
-
transactionId: result.jobId
|
|
247
|
-
});
|
|
248
|
-
return {
|
|
249
|
-
confirmed: true,
|
|
250
|
-
result,
|
|
251
|
-
inscription,
|
|
252
|
-
sdk
|
|
253
|
-
};
|
|
254
|
-
}
|
|
255
|
-
return {
|
|
256
|
-
confirmed: false,
|
|
257
|
-
result,
|
|
258
|
-
sdk
|
|
259
|
-
};
|
|
260
|
-
} catch (error) {
|
|
261
|
-
logger.error("Error during inscription process", error);
|
|
262
|
-
throw error;
|
|
263
123
|
}
|
|
264
|
-
|
|
265
|
-
|
|
266
|
-
|
|
267
|
-
|
|
268
|
-
|
|
269
|
-
|
|
270
|
-
const formattedTransactionId = transactionId.includes("@") ? `${transactionId.split("@")[0]}-${transactionId.split("@")[1].replace(/\./g, "-")}` : transactionId;
|
|
271
|
-
logger.info("Retrieving inscription", {
|
|
272
|
-
originalTransactionId: transactionId,
|
|
273
|
-
formattedTransactionId
|
|
274
|
-
});
|
|
275
|
-
try {
|
|
276
|
-
let sdk;
|
|
277
|
-
if (options?.apiKey) {
|
|
278
|
-
logger.debug("Initializing InscriptionSDK with API key");
|
|
279
|
-
sdk = new InscriptionSDK({
|
|
280
|
-
apiKey: options.apiKey,
|
|
281
|
-
network: options.network || "mainnet"
|
|
282
|
-
});
|
|
283
|
-
} else if (options?.accountId && options?.privateKey) {
|
|
284
|
-
logger.debug("Initializing InscriptionSDK with server auth");
|
|
285
|
-
sdk = await InscriptionSDK.createWithAuth({
|
|
286
|
-
type: "server",
|
|
287
|
-
accountId: options.accountId,
|
|
288
|
-
privateKey: options.privateKey,
|
|
289
|
-
network: options.network || "mainnet"
|
|
290
|
-
});
|
|
291
|
-
} else {
|
|
292
|
-
const error = new Error(
|
|
293
|
-
"Either API key or account ID and private key are required for retrieving inscriptions"
|
|
294
|
-
);
|
|
295
|
-
logger.error("Missing authentication credentials", {
|
|
296
|
-
hasApiKey: Boolean(options?.apiKey),
|
|
297
|
-
hasAccountId: Boolean(options?.accountId),
|
|
298
|
-
hasPrivateKey: Boolean(options?.privateKey)
|
|
299
|
-
});
|
|
300
|
-
throw error;
|
|
301
|
-
}
|
|
302
|
-
logger.debug("Initialized SDK for inscription retrieval", {
|
|
303
|
-
formattedTransactionId,
|
|
304
|
-
network: options.network || "mainnet"
|
|
124
|
+
submitting(message, percent, details) {
|
|
125
|
+
this.report({
|
|
126
|
+
stage: "submitting",
|
|
127
|
+
message,
|
|
128
|
+
progressPercent: percent,
|
|
129
|
+
details
|
|
305
130
|
});
|
|
306
|
-
|
|
307
|
-
|
|
308
|
-
|
|
131
|
+
}
|
|
132
|
+
confirming(message, percent, details) {
|
|
133
|
+
this.report({
|
|
134
|
+
stage: "confirming",
|
|
135
|
+
message,
|
|
136
|
+
progressPercent: percent,
|
|
137
|
+
details
|
|
309
138
|
});
|
|
310
|
-
|
|
311
|
-
|
|
312
|
-
|
|
313
|
-
|
|
314
|
-
|
|
139
|
+
}
|
|
140
|
+
verifying(message, percent, details) {
|
|
141
|
+
this.report({
|
|
142
|
+
stage: "verifying",
|
|
143
|
+
message,
|
|
144
|
+
progressPercent: percent,
|
|
145
|
+
details
|
|
315
146
|
});
|
|
316
|
-
throw error;
|
|
317
147
|
}
|
|
318
|
-
|
|
319
|
-
|
|
320
|
-
const requiredFields = ["name", "creator", "description", "type"];
|
|
321
|
-
const missingFields = requiredFields.filter((field) => !metadata[field]);
|
|
322
|
-
if (missingFields.length > 0) {
|
|
323
|
-
const error = new Error(
|
|
324
|
-
`Missing required Hashinal metadata fields: ${missingFields.join(", ")}`
|
|
325
|
-
);
|
|
326
|
-
logger.error("Hashinal metadata validation failed", { missingFields });
|
|
327
|
-
throw error;
|
|
148
|
+
completed(message, details) {
|
|
149
|
+
this.report({ stage: "completed", message, progressPercent: 100, details });
|
|
328
150
|
}
|
|
329
|
-
|
|
330
|
-
|
|
331
|
-
|
|
332
|
-
|
|
333
|
-
|
|
334
|
-
|
|
335
|
-
hasProperties: !!metadata.properties
|
|
336
|
-
});
|
|
337
|
-
}
|
|
338
|
-
async function waitForInscriptionConfirmation(sdk, transactionId, maxAttempts = 30, intervalMs = 4e3, progressCallback) {
|
|
339
|
-
const logger = Logger.getInstance({ module: "Inscriber" });
|
|
340
|
-
const progressReporter = new ProgressReporter({
|
|
341
|
-
module: "Inscriber",
|
|
342
|
-
logger,
|
|
343
|
-
callback: progressCallback
|
|
344
|
-
});
|
|
345
|
-
try {
|
|
346
|
-
logger.debug("Waiting for inscription confirmation", {
|
|
347
|
-
transactionId,
|
|
348
|
-
maxAttempts,
|
|
349
|
-
intervalMs
|
|
350
|
-
});
|
|
351
|
-
progressReporter.preparing("Preparing for inscription confirmation", 5, {
|
|
352
|
-
transactionId,
|
|
353
|
-
maxAttempts,
|
|
354
|
-
intervalMs
|
|
355
|
-
});
|
|
356
|
-
try {
|
|
357
|
-
const waitMethod = sdk.waitForInscription.bind(sdk);
|
|
358
|
-
const wrappedCallback = (data) => {
|
|
359
|
-
const stage = data.stage || "confirming";
|
|
360
|
-
const message = data.message || "Processing inscription";
|
|
361
|
-
const percent = data.progressPercent || 50;
|
|
362
|
-
progressReporter.report({
|
|
363
|
-
stage,
|
|
364
|
-
message,
|
|
365
|
-
progressPercent: percent,
|
|
366
|
-
details: {}
|
|
367
|
-
});
|
|
368
|
-
};
|
|
369
|
-
return await waitMethod(
|
|
370
|
-
transactionId,
|
|
371
|
-
maxAttempts,
|
|
372
|
-
intervalMs,
|
|
373
|
-
true,
|
|
374
|
-
wrappedCallback
|
|
375
|
-
);
|
|
376
|
-
} catch (e) {
|
|
377
|
-
console.log(e);
|
|
378
|
-
logger.debug("Falling back to standard waitForInscription method", {
|
|
379
|
-
error: e
|
|
380
|
-
});
|
|
381
|
-
progressReporter.verifying("Verifying inscription status", 50, {
|
|
382
|
-
error: e
|
|
383
|
-
});
|
|
384
|
-
return await sdk.waitForInscription(
|
|
385
|
-
transactionId,
|
|
386
|
-
maxAttempts,
|
|
387
|
-
intervalMs,
|
|
388
|
-
true
|
|
389
|
-
);
|
|
390
|
-
}
|
|
391
|
-
} catch (error) {
|
|
392
|
-
logger.error("Error waiting for inscription confirmation", {
|
|
393
|
-
transactionId,
|
|
394
|
-
maxAttempts,
|
|
395
|
-
intervalMs,
|
|
396
|
-
error
|
|
397
|
-
});
|
|
398
|
-
progressReporter.failed("Inscription confirmation failed", {
|
|
399
|
-
transactionId,
|
|
400
|
-
error
|
|
151
|
+
failed(message, details) {
|
|
152
|
+
this.report({
|
|
153
|
+
stage: "failed",
|
|
154
|
+
message,
|
|
155
|
+
progressPercent: this.lastReportedPercent,
|
|
156
|
+
details
|
|
401
157
|
});
|
|
402
|
-
throw error;
|
|
403
158
|
}
|
|
404
159
|
}
|
|
405
160
|
export {
|
|
406
|
-
|
|
407
|
-
inscribeWithSigner,
|
|
408
|
-
retrieveInscription
|
|
161
|
+
ProgressReporter
|
|
409
162
|
};
|
|
410
163
|
//# sourceMappingURL=standards-sdk.es17.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"standards-sdk.es17.js","sources":["../../src/inscribe/inscriber.ts"],"sourcesContent":["import { InscriptionSDK } from '@kiloscribe/inscription-sdk';\nimport {\n InscriptionOptions,\n InscriptionResult,\n RetrievedInscriptionResult,\n HederaClientConfig,\n} from './types';\nimport type { DAppSigner } from '@hashgraph/hedera-wallet-connect';\nimport { Logger } from '../utils/logger';\nimport { ProgressCallback, ProgressReporter } from '../utils/progress-reporter';\n\nexport type InscriptionInput =\n | { type: 'url'; url: string }\n | { type: 'file'; path: string }\n | {\n type: 'buffer';\n buffer: ArrayBuffer | Buffer;\n fileName: string;\n mimeType?: string;\n };\n\nexport type InscriptionResponse =\n | { confirmed: false; result: InscriptionResult; sdk: InscriptionSDK }\n | {\n confirmed: true;\n result: InscriptionResult;\n inscription: RetrievedInscriptionResult;\n sdk: InscriptionSDK;\n };\n\nexport async function inscribe(\n input: InscriptionInput,\n clientConfig: HederaClientConfig,\n options: InscriptionOptions,\n existingSDK?: InscriptionSDK\n): Promise<InscriptionResponse> {\n const logger = Logger.getInstance({\n module: 'Inscriber',\n ...options.logging,\n });\n\n logger.info('Starting inscription process', {\n type: input.type,\n mode: options.mode || 'file',\n ...(input.type === 'url' ? { url: input.url } : {}),\n ...(input.type === 'file' ? { path: input.path } : {}),\n ...(input.type === 'buffer'\n ? { fileName: input.fileName, bufferSize: input.buffer.byteLength }\n : {}),\n });\n\n try {\n if (options.mode === 'hashinal' && options.metadata) {\n validateHashinalMetadata(options.metadata, logger);\n }\n\n let sdk: InscriptionSDK;\n\n if (existingSDK) {\n logger.debug('Using existing InscriptionSDK instance');\n sdk = existingSDK;\n } else if (options.apiKey) {\n logger.debug('Initializing InscriptionSDK with API key');\n sdk = new InscriptionSDK({\n apiKey: options.apiKey,\n network: clientConfig.network || 'mainnet',\n });\n } else {\n logger.debug('Initializing InscriptionSDK with server auth');\n sdk = await InscriptionSDK.createWithAuth({\n type: 'server',\n accountId: clientConfig.accountId,\n privateKey: clientConfig.privateKey,\n network: clientConfig.network || 'mainnet',\n });\n }\n\n const baseRequest = {\n holderId: clientConfig.accountId,\n metadata: options.metadata || {},\n tags: options.tags || [],\n mode: options.mode || 'file',\n chunkSize: options.chunkSize,\n };\n\n let request: any;\n switch (input.type) {\n case 'url':\n request = {\n ...baseRequest,\n file: {\n type: 'url',\n url: input.url,\n },\n };\n break;\n\n case 'file':\n request = {\n ...baseRequest,\n file: {\n type: 'path',\n path: input.path,\n },\n };\n break;\n\n case 'buffer':\n request = {\n ...baseRequest,\n file: {\n type: 'base64',\n base64: Buffer.from(input.buffer).toString('base64'),\n fileName: input.fileName,\n mimeType: input.mimeType,\n },\n };\n break;\n }\n\n if (options.mode === 'hashinal') {\n request.metadataObject = options.metadata;\n request.creator = options.metadata?.creator || clientConfig.accountId;\n request.description = options.metadata?.description;\n\n if (options.jsonFileURL) {\n request.jsonFileURL = options.jsonFileURL;\n }\n }\n\n logger.debug('Preparing to inscribe content', {\n type: input.type,\n mode: options.mode || 'file',\n holderId: clientConfig.accountId,\n });\n\n const result = await sdk.inscribeAndExecute(request, clientConfig);\n logger.info('Starting to inscribe.', {\n type: input.type,\n mode: options.mode || 'file',\n transactionId: result.jobId,\n });\n\n if (options.waitForConfirmation) {\n logger.debug('Waiting for inscription confirmation', {\n transactionId: result.jobId,\n maxAttempts: options.waitMaxAttempts,\n intervalMs: options.waitIntervalMs,\n });\n\n const inscription = await waitForInscriptionConfirmation(\n sdk,\n result.jobId,\n options.waitMaxAttempts,\n options.waitIntervalMs,\n options.progressCallback\n );\n\n logger.info('Inscription confirmation received', {\n transactionId: result.jobId,\n });\n\n return {\n confirmed: true,\n result,\n inscription,\n sdk,\n };\n }\n\n return {\n confirmed: false,\n result,\n sdk,\n };\n } catch (error) {\n logger.error('Error during inscription process', error);\n throw error;\n }\n}\n\nexport async function inscribeWithSigner(\n input: InscriptionInput,\n signer: DAppSigner,\n options: InscriptionOptions,\n existingSDK?: InscriptionSDK\n): Promise<InscriptionResponse> {\n const logger = Logger.getInstance({\n module: 'Inscriber',\n ...options.logging,\n });\n\n logger.info('Starting inscription process with signer', {\n type: input.type,\n mode: options.mode || 'file',\n ...(input.type === 'url' ? { url: input.url } : {}),\n ...(input.type === 'file' ? { path: input.path } : {}),\n ...(input.type === 'buffer'\n ? { fileName: input.fileName, bufferSize: input.buffer.byteLength }\n : {}),\n });\n\n try {\n if (options.mode === 'hashinal' && options.metadata) {\n validateHashinalMetadata(options.metadata, logger);\n }\n\n const accountId = signer.getAccountId().toString();\n logger.debug('Using account ID from signer', { accountId });\n\n let sdk: InscriptionSDK;\n\n if (existingSDK) {\n logger.debug('Using existing InscriptionSDK instance');\n sdk = existingSDK;\n } else if (options.apiKey) {\n logger.debug('Initializing InscriptionSDK with API key');\n sdk = new InscriptionSDK({\n apiKey: options.apiKey,\n network: options.network || 'mainnet',\n });\n } else {\n logger.debug('Initializing InscriptionSDK with client auth');\n sdk = await InscriptionSDK.createWithAuth({\n type: 'client',\n accountId,\n signer: signer,\n network: options.network || 'mainnet',\n });\n }\n\n const baseRequest = {\n holderId: accountId,\n metadata: options.metadata || {},\n tags: options.tags || [],\n mode: options.mode || 'file',\n chunkSize: options.chunkSize,\n };\n\n let request: any;\n switch (input.type) {\n case 'url':\n request = {\n ...baseRequest,\n file: {\n type: 'url',\n url: input.url,\n },\n };\n break;\n\n case 'file':\n request = {\n ...baseRequest,\n file: {\n type: 'path',\n path: input.path,\n },\n };\n break;\n\n case 'buffer':\n request = {\n ...baseRequest,\n file: {\n type: 'base64',\n base64: Buffer.from(input.buffer).toString('base64'),\n fileName: input.fileName,\n mimeType: input.mimeType,\n },\n };\n break;\n }\n\n if (options.mode === 'hashinal') {\n request.metadataObject = options.metadata;\n request.creator = options.metadata?.creator || accountId;\n request.description = options.metadata?.description;\n\n if (options.jsonFileURL) {\n request.jsonFileURL = options.jsonFileURL;\n }\n }\n\n logger.debug('Preparing to inscribe content with signer', {\n type: input.type,\n mode: options.mode || 'file',\n holderId: accountId,\n });\n\n const result = await sdk.inscribe(\n {\n ...request,\n holderId: accountId,\n },\n signer\n );\n logger.info('Inscription started', {\n type: input.type,\n mode: options.mode || 'file',\n transactionId: result.jobId,\n });\n\n if (options.waitForConfirmation) {\n logger.debug('Waiting for inscription confirmation', {\n transactionId: result.jobId,\n maxAttempts: options.waitMaxAttempts,\n intervalMs: options.waitIntervalMs,\n });\n\n const inscription = await waitForInscriptionConfirmation(\n sdk,\n result.jobId,\n options.waitMaxAttempts,\n options.waitIntervalMs,\n options.progressCallback\n );\n\n logger.info('Inscription confirmation received', {\n transactionId: result.jobId,\n });\n\n return {\n confirmed: true,\n result,\n inscription,\n sdk,\n };\n }\n\n return {\n confirmed: false,\n result,\n sdk,\n };\n } catch (error) {\n logger.error('Error during inscription process', error);\n throw error;\n }\n}\n\nexport async function retrieveInscription(\n transactionId: string,\n options: InscriptionOptions & { accountId?: string; privateKey?: string }\n): Promise<RetrievedInscriptionResult> {\n const logger = Logger.getInstance({\n module: 'Inscriber',\n ...options?.logging || {},\n });\n\n const formattedTransactionId = transactionId.includes('@')\n ? `${transactionId.split('@')[0]}-${transactionId\n .split('@')[1]\n .replace(/\\./g, '-')}`\n : transactionId;\n\n logger.info('Retrieving inscription', {\n originalTransactionId: transactionId,\n formattedTransactionId,\n });\n\n try {\n let sdk: InscriptionSDK;\n\n if (options?.apiKey) {\n logger.debug('Initializing InscriptionSDK with API key');\n sdk = new InscriptionSDK({\n apiKey: options.apiKey,\n network: options.network || 'mainnet',\n });\n } else if (options?.accountId && options?.privateKey) {\n logger.debug('Initializing InscriptionSDK with server auth');\n sdk = await InscriptionSDK.createWithAuth({\n type: 'server',\n accountId: options.accountId,\n privateKey: options.privateKey,\n network: options.network || 'mainnet',\n });\n } else {\n const error = new Error(\n 'Either API key or account ID and private key are required for retrieving inscriptions'\n );\n logger.error('Missing authentication credentials', {\n hasApiKey: Boolean(options?.apiKey),\n hasAccountId: Boolean(options?.accountId),\n hasPrivateKey: Boolean(options?.privateKey),\n });\n throw error;\n }\n\n logger.debug('Initialized SDK for inscription retrieval', {\n formattedTransactionId,\n network: options.network || 'mainnet',\n });\n\n const result = await sdk.retrieveInscription(formattedTransactionId);\n logger.info('Successfully retrieved inscription', {\n formattedTransactionId,\n });\n\n return result;\n } catch (error) {\n logger.error('Error retrieving inscription', {\n formattedTransactionId,\n error,\n });\n throw error;\n }\n}\n\nfunction validateHashinalMetadata(metadata: any, logger: any): void {\n const requiredFields = ['name', 'creator', 'description', 'type'];\n const missingFields = requiredFields.filter((field) => !metadata[field]);\n\n if (missingFields.length > 0) {\n const error = new Error(\n `Missing required Hashinal metadata fields: ${missingFields.join(', ')}`\n );\n logger.error('Hashinal metadata validation failed', { missingFields });\n throw error;\n }\n\n logger.debug('Hashinal metadata validation passed', {\n name: metadata.name,\n creator: metadata.creator,\n description: metadata.description,\n type: metadata.type,\n hasAttributes: !!metadata.attributes,\n hasProperties: !!metadata.properties,\n });\n}\n\nasync function waitForInscriptionConfirmation(\n sdk: InscriptionSDK,\n transactionId: string,\n maxAttempts: number = 30,\n intervalMs: number = 4000,\n progressCallback?: ProgressCallback\n): Promise<RetrievedInscriptionResult> {\n const logger = Logger.getInstance({ module: 'Inscriber' });\n const progressReporter = new ProgressReporter({\n module: 'Inscriber',\n logger,\n callback: progressCallback,\n });\n\n try {\n logger.debug('Waiting for inscription confirmation', {\n transactionId,\n maxAttempts,\n intervalMs,\n });\n\n progressReporter.preparing('Preparing for inscription confirmation', 5, {\n transactionId,\n maxAttempts,\n intervalMs,\n });\n\n try {\n const waitMethod = sdk.waitForInscription.bind(sdk) as (\n txId: string,\n maxAttempts: number,\n intervalMs: number,\n checkCompletion: boolean,\n progressCallback?: Function\n ) => Promise<RetrievedInscriptionResult>;\n\n const wrappedCallback = (data: any) => {\n const stage = data.stage || 'confirming';\n const message = data.message || 'Processing inscription';\n const percent = data.progressPercent || 50;\n\n progressReporter.report({\n stage: stage,\n message: message,\n progressPercent: percent,\n details: {},\n });\n };\n\n return await waitMethod(\n transactionId,\n maxAttempts,\n intervalMs,\n true,\n wrappedCallback\n );\n } catch (e) {\n console.log(e);\n // Fall back to standard method if progress callback fails\n logger.debug('Falling back to standard waitForInscription method', {\n error: e,\n });\n progressReporter.verifying('Verifying inscription status', 50, {\n error: e,\n });\n\n return await sdk.waitForInscription(\n transactionId,\n maxAttempts,\n intervalMs,\n true\n );\n }\n } catch (error) {\n logger.error('Error waiting for inscription confirmation', {\n transactionId,\n maxAttempts,\n intervalMs,\n error,\n });\n\n progressReporter.failed('Inscription confirmation failed', {\n transactionId,\n error,\n });\n\n throw error;\n }\n}\n"],"names":[],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"standards-sdk.es17.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 = options.logger || 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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"}
|