@hashgraphonline/standards-sdk 0.0.57 → 0.0.58

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.
Files changed (127) hide show
  1. package/dist/es/hcs-10/agent-builder.d.ts +1 -2
  2. package/dist/es/hcs-10/agent-builder.d.ts.map +1 -1
  3. package/dist/es/hcs-10/index.d.ts +1 -0
  4. package/dist/es/hcs-10/index.d.ts.map +1 -1
  5. package/dist/es/hcs-10/registrations.d.ts +1 -60
  6. package/dist/es/hcs-10/registrations.d.ts.map +1 -1
  7. package/dist/es/hcs-10/sdk.d.ts +1 -30
  8. package/dist/es/hcs-10/sdk.d.ts.map +1 -1
  9. package/dist/es/hcs-10/types.d.ts +106 -6
  10. package/dist/es/hcs-10/types.d.ts.map +1 -1
  11. package/dist/es/hcs-11/index.d.ts +1 -1
  12. package/dist/es/hcs-11/index.d.ts.map +1 -1
  13. package/dist/es/inscribe/types.d.ts +1 -1
  14. package/dist/es/inscribe/types.d.ts.map +1 -1
  15. package/dist/es/standards-sdk.es.js +7 -7
  16. package/dist/es/standards-sdk.es10.js +3 -3
  17. package/dist/es/standards-sdk.es100.js +13 -36
  18. package/dist/es/standards-sdk.es100.js.map +1 -1
  19. package/dist/es/standards-sdk.es101.js +36 -10
  20. package/dist/es/standards-sdk.es101.js.map +1 -1
  21. package/dist/es/standards-sdk.es102.js +10 -53
  22. package/dist/es/standards-sdk.es102.js.map +1 -1
  23. package/dist/es/standards-sdk.es103.js +47 -1275
  24. package/dist/es/standards-sdk.es103.js.map +1 -1
  25. package/dist/es/standards-sdk.es104.js +1282 -25
  26. package/dist/es/standards-sdk.es104.js.map +1 -1
  27. package/dist/es/standards-sdk.es105.js +31 -5
  28. package/dist/es/standards-sdk.es105.js.map +1 -1
  29. package/dist/es/standards-sdk.es106.js +5 -158
  30. package/dist/es/standards-sdk.es106.js.map +1 -1
  31. package/dist/es/standards-sdk.es107.js +147 -781
  32. package/dist/es/standards-sdk.es107.js.map +1 -1
  33. package/dist/es/standards-sdk.es108.js +785 -166
  34. package/dist/es/standards-sdk.es108.js.map +1 -1
  35. package/dist/es/standards-sdk.es110.js +25 -19
  36. package/dist/es/standards-sdk.es110.js.map +1 -1
  37. package/dist/es/standards-sdk.es111.js +23 -24
  38. package/dist/es/standards-sdk.es111.js.map +1 -1
  39. package/dist/es/standards-sdk.es112.js +35 -23
  40. package/dist/es/standards-sdk.es112.js.map +1 -1
  41. package/dist/es/standards-sdk.es113.js +19 -36
  42. package/dist/es/standards-sdk.es113.js.map +1 -1
  43. package/dist/es/standards-sdk.es12.js +7 -739
  44. package/dist/es/standards-sdk.es12.js.map +1 -1
  45. package/dist/es/standards-sdk.es13.js +722 -52
  46. package/dist/es/standards-sdk.es13.js.map +1 -1
  47. package/dist/es/standards-sdk.es14.js +67 -20
  48. package/dist/es/standards-sdk.es14.js.map +1 -1
  49. package/dist/es/standards-sdk.es15.js +18 -156
  50. package/dist/es/standards-sdk.es15.js.map +1 -1
  51. package/dist/es/standards-sdk.es16.js +138 -385
  52. package/dist/es/standards-sdk.es16.js.map +1 -1
  53. package/dist/es/standards-sdk.es17.js +385 -211
  54. package/dist/es/standards-sdk.es17.js.map +1 -1
  55. package/dist/es/standards-sdk.es18.js +233 -7
  56. package/dist/es/standards-sdk.es18.js.map +1 -1
  57. package/dist/es/standards-sdk.es2.js +1 -1
  58. package/dist/es/standards-sdk.es26.js +7 -7
  59. package/dist/es/standards-sdk.es27.js +1 -1
  60. package/dist/es/standards-sdk.es3.js +1 -1
  61. package/dist/es/standards-sdk.es4.js +1 -1
  62. package/dist/es/standards-sdk.es5.js +4 -4
  63. package/dist/es/standards-sdk.es5.js.map +1 -1
  64. package/dist/es/standards-sdk.es65.js +3 -3
  65. package/dist/es/standards-sdk.es7.js +1 -1
  66. package/dist/es/standards-sdk.es7.js.map +1 -1
  67. package/dist/es/standards-sdk.es73.js +2 -2
  68. package/dist/es/standards-sdk.es74.js +2 -2
  69. package/dist/es/standards-sdk.es77.js +34 -3
  70. package/dist/es/standards-sdk.es77.js.map +1 -1
  71. package/dist/es/standards-sdk.es78.js +33 -2
  72. package/dist/es/standards-sdk.es78.js.map +1 -1
  73. package/dist/es/standards-sdk.es79.js +9 -2
  74. package/dist/es/standards-sdk.es79.js.map +1 -1
  75. package/dist/es/standards-sdk.es8.js +3 -3
  76. package/dist/es/standards-sdk.es80.js +32 -32
  77. package/dist/es/standards-sdk.es80.js.map +1 -1
  78. package/dist/es/standards-sdk.es81.js +3 -33
  79. package/dist/es/standards-sdk.es81.js.map +1 -1
  80. package/dist/es/standards-sdk.es82.js +2 -9
  81. package/dist/es/standards-sdk.es82.js.map +1 -1
  82. package/dist/es/standards-sdk.es83.js +2 -34
  83. package/dist/es/standards-sdk.es83.js.map +1 -1
  84. package/dist/es/standards-sdk.es84.js +2 -419
  85. package/dist/es/standards-sdk.es84.js.map +1 -1
  86. package/dist/es/standards-sdk.es85.js +419 -2
  87. package/dist/es/standards-sdk.es85.js.map +1 -1
  88. package/dist/es/standards-sdk.es86.js +2 -120
  89. package/dist/es/standards-sdk.es86.js.map +1 -1
  90. package/dist/es/standards-sdk.es87.js +120 -2
  91. package/dist/es/standards-sdk.es87.js.map +1 -1
  92. package/dist/es/standards-sdk.es89.js +1 -1
  93. package/dist/es/standards-sdk.es9.js +1 -1
  94. package/dist/es/standards-sdk.es9.js.map +1 -1
  95. package/dist/es/standards-sdk.es90.js +2 -2
  96. package/dist/es/standards-sdk.es92.js +158 -179
  97. package/dist/es/standards-sdk.es92.js.map +1 -1
  98. package/dist/es/standards-sdk.es93.js +163 -406
  99. package/dist/es/standards-sdk.es93.js.map +1 -1
  100. package/dist/es/standards-sdk.es94.js +432 -19
  101. package/dist/es/standards-sdk.es94.js.map +1 -1
  102. package/dist/es/standards-sdk.es95.js +16 -130
  103. package/dist/es/standards-sdk.es95.js.map +1 -1
  104. package/dist/es/standards-sdk.es96.js +131 -10
  105. package/dist/es/standards-sdk.es96.js.map +1 -1
  106. package/dist/es/standards-sdk.es97.js +11 -22
  107. package/dist/es/standards-sdk.es97.js.map +1 -1
  108. package/dist/es/standards-sdk.es98.js +22 -22
  109. package/dist/es/standards-sdk.es98.js.map +1 -1
  110. package/dist/es/standards-sdk.es99.js +21 -13
  111. package/dist/es/standards-sdk.es99.js.map +1 -1
  112. package/dist/umd/hcs-10/agent-builder.d.ts +1 -2
  113. package/dist/umd/hcs-10/agent-builder.d.ts.map +1 -1
  114. package/dist/umd/hcs-10/index.d.ts +1 -0
  115. package/dist/umd/hcs-10/index.d.ts.map +1 -1
  116. package/dist/umd/hcs-10/registrations.d.ts +1 -60
  117. package/dist/umd/hcs-10/registrations.d.ts.map +1 -1
  118. package/dist/umd/hcs-10/sdk.d.ts +1 -30
  119. package/dist/umd/hcs-10/sdk.d.ts.map +1 -1
  120. package/dist/umd/hcs-10/types.d.ts +106 -6
  121. package/dist/umd/hcs-10/types.d.ts.map +1 -1
  122. package/dist/umd/hcs-11/index.d.ts +1 -1
  123. package/dist/umd/hcs-11/index.d.ts.map +1 -1
  124. package/dist/umd/inscribe/types.d.ts +1 -1
  125. package/dist/umd/inscribe/types.d.ts.map +1 -1
  126. package/dist/umd/standards-sdk.umd.js.map +1 -1
  127. package/package.json +1 -1
@@ -1,410 +1,163 @@
1
- import Buffer from "./standards-sdk.es19.js";
2
- import { InscriptionSDK } from "./standards-sdk.es22.js";
3
- import { Logger } from "./standards-sdk.es13.js";
4
- import { ProgressReporter } from "./standards-sdk.es15.js";
5
- async function inscribe(input, clientConfig, options, existingSDK) {
6
- const logger = Logger.getInstance({
7
- module: "Inscriber",
8
- ...options.logging
9
- });
10
- logger.info("Starting inscription process", {
11
- type: input.type,
12
- mode: options.mode || "file",
13
- ...input.type === "url" ? { url: input.url } : {},
14
- ...input.type === "file" ? { path: input.path } : {},
15
- ...input.type === "buffer" ? { fileName: input.fileName, bufferSize: input.buffer.byteLength } : {}
16
- });
17
- try {
18
- if (options.mode === "hashinal" && options.metadata) {
19
- validateHashinalMetadata(options.metadata, logger);
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.es14.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
- logger.debug("Initializing InscriptionSDK with server auth");
33
- sdk = await InscriptionSDK.createWithAuth({
34
- type: "server",
35
- accountId: clientConfig.accountId,
36
- privateKey: clientConfig.privateKey,
37
- network: clientConfig.network || "mainnet"
38
- });
39
- }
40
- const baseRequest = {
41
- holderId: clientConfig.accountId,
42
- metadata: options.metadata || {},
43
- tags: options.tags || [],
44
- mode: options.mode || "file",
45
- chunkSize: options.chunkSize
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
- logger.debug("Preparing to inscribe content", {
88
- type: input.type,
89
- mode: options.mode || "file",
90
- holderId: clientConfig.accountId
91
- });
92
- const result = await sdk.inscribeAndExecute(request, clientConfig);
93
- logger.info("Starting to inscribe.", {
94
- type: input.type,
95
- mode: options.mode || "file",
96
- transactionId: result.jobId
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
- if (options.waitForConfirmation) {
99
- logger.debug("Waiting for inscription confirmation", {
100
- transactionId: result.jobId,
101
- maxAttempts: options.waitMaxAttempts,
102
- intervalMs: options.waitIntervalMs
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
- logger.info("Inscription confirmation received", {
112
- transactionId: result.jobId
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
- return {
115
- confirmed: true,
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
- async function inscribeWithSigner(input, signer, options, existingSDK) {
132
- const logger = Logger.getInstance({
133
- module: "Inscriber",
134
- ...options.logging
135
- });
136
- logger.info("Starting inscription process with signer", {
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
- const baseRequest = {
169
- holderId: accountId,
170
- metadata: options.metadata || {},
171
- tags: options.tags || [],
172
- mode: options.mode || "file",
173
- chunkSize: options.chunkSize
90
+ this.lastReportedPercent = scaledPercent;
91
+ this.lastReportedTime = now;
92
+ const progressData = {
93
+ ...data,
94
+ progressPercent: scaledPercent
174
95
  };
175
- let request;
176
- switch (input.type) {
177
- case "url":
178
- request = {
179
- ...baseRequest,
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 (options.mode === "hashinal") {
208
- request.metadataObject = options.metadata;
209
- request.creator = options.metadata?.creator || accountId;
210
- request.description = options.metadata?.description;
211
- if (options.jsonFileURL) {
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
- logger.debug("Preparing to inscribe content with signer", {
216
- type: input.type,
217
- mode: options.mode || "file",
218
- holderId: accountId
219
- });
220
- const result = await sdk.inscribe(
221
- {
222
- ...request,
223
- holderId: accountId
224
- },
225
- signer
226
- );
227
- logger.info("Inscription started", {
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
- async function retrieveInscription(transactionId, options) {
266
- const logger = Logger.getInstance({
267
- module: "Inscriber",
268
- ...options?.logging || {}
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
- const result = await sdk.retrieveInscription(formattedTransactionId);
307
- logger.info("Successfully retrieved inscription", {
308
- formattedTransactionId
131
+ }
132
+ confirming(message, percent, details) {
133
+ this.report({
134
+ stage: "confirming",
135
+ message,
136
+ progressPercent: percent,
137
+ details
309
138
  });
310
- return result;
311
- } catch (error) {
312
- logger.error("Error retrieving inscription", {
313
- formattedTransactionId,
314
- error
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
- function validateHashinalMetadata(metadata, logger) {
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
- logger.debug("Hashinal metadata validation passed", {
330
- name: metadata.name,
331
- creator: metadata.creator,
332
- description: metadata.description,
333
- type: metadata.type,
334
- hasAttributes: !!metadata.attributes,
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
- inscribe,
407
- inscribeWithSigner,
408
- retrieveInscription
161
+ ProgressReporter
409
162
  };
410
163
  //# sourceMappingURL=standards-sdk.es16.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"standards-sdk.es16.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.es16.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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"}