@hashgraphonline/standards-sdk 0.1.141-canary.40 → 0.1.141-canary.41
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-21/types.d.ts +10 -10
- package/dist/cjs/standards-sdk.cjs +1 -1
- package/dist/cjs/standards-sdk.cjs.map +1 -1
- package/dist/es/hcs-21/types.d.ts +10 -10
- package/dist/es/standards-sdk.es100.js +1 -1
- package/dist/es/standards-sdk.es102.js +1 -1
- package/dist/es/standards-sdk.es104.js +1 -1
- package/dist/es/standards-sdk.es110.js +1 -1
- package/dist/es/standards-sdk.es111.js +5 -5
- package/dist/es/standards-sdk.es12.js +1 -1
- package/dist/es/standards-sdk.es121.js +1 -1
- package/dist/es/standards-sdk.es122.js +1 -1
- package/dist/es/standards-sdk.es123.js +5 -5
- package/dist/es/standards-sdk.es125.js +1 -1
- package/dist/es/standards-sdk.es126.js +1 -1
- package/dist/es/standards-sdk.es128.js +2 -2
- package/dist/es/standards-sdk.es129.js +1 -1
- package/dist/es/standards-sdk.es13.js +1 -1
- package/dist/es/standards-sdk.es136.js +13 -134
- package/dist/es/standards-sdk.es136.js.map +1 -1
- package/dist/es/standards-sdk.es137.js +133 -37
- package/dist/es/standards-sdk.es137.js.map +1 -1
- package/dist/es/standards-sdk.es138.js +746 -12254
- package/dist/es/standards-sdk.es138.js.map +1 -1
- package/dist/es/standards-sdk.es139.js +42 -766
- package/dist/es/standards-sdk.es139.js.map +1 -1
- package/dist/es/standards-sdk.es140.js +12235 -133
- package/dist/es/standards-sdk.es140.js.map +1 -1
- package/dist/es/standards-sdk.es141.js +55 -321
- package/dist/es/standards-sdk.es141.js.map +1 -1
- package/dist/es/standards-sdk.es142.js +67 -331
- package/dist/es/standards-sdk.es142.js.map +1 -1
- package/dist/es/standards-sdk.es143.js +129 -410
- package/dist/es/standards-sdk.es143.js.map +1 -1
- package/dist/es/standards-sdk.es144.js +200 -209
- package/dist/es/standards-sdk.es144.js.map +1 -1
- package/dist/es/standards-sdk.es145.js +334 -64
- package/dist/es/standards-sdk.es145.js.map +1 -1
- package/dist/es/standards-sdk.es146.js +449 -13
- package/dist/es/standards-sdk.es146.js.map +1 -1
- package/dist/es/standards-sdk.es147.js +330 -55
- package/dist/es/standards-sdk.es147.js.map +1 -1
- package/dist/es/standards-sdk.es148.js +60 -66
- package/dist/es/standards-sdk.es148.js.map +1 -1
- package/dist/es/standards-sdk.es17.js +1 -1
- package/dist/es/standards-sdk.es19.js +4 -4
- package/dist/es/standards-sdk.es20.js +2 -2
- package/dist/es/standards-sdk.es23.js +1 -1
- package/dist/es/standards-sdk.es28.js +3 -3
- package/dist/es/standards-sdk.es31.js +1 -1
- package/dist/es/standards-sdk.es32.js +1 -1
- package/dist/es/standards-sdk.es36.js +2 -2
- package/dist/es/standards-sdk.es37.js +3 -3
- package/dist/es/standards-sdk.es38.js +1 -1
- package/dist/es/standards-sdk.es5.js +1 -1
- package/dist/es/standards-sdk.es54.js +1 -1
- package/dist/es/standards-sdk.es57.js +1 -1
- package/dist/es/standards-sdk.es59.js +1 -1
- package/dist/es/standards-sdk.es60.js +1 -1
- package/dist/es/standards-sdk.es61.js +2 -2
- package/dist/es/standards-sdk.es63.js +1 -1
- package/dist/es/standards-sdk.es65.js +1 -1
- package/dist/es/standards-sdk.es66.js +2 -2
- package/dist/es/standards-sdk.es69.js +2 -2
- package/dist/es/standards-sdk.es70.js +1 -1
- package/dist/es/standards-sdk.es72.js +1 -1
- package/dist/es/standards-sdk.es77.js +1 -1
- package/dist/es/standards-sdk.es78.js +1 -1
- package/dist/es/standards-sdk.es79.js +1 -1
- package/dist/es/standards-sdk.es8.js +1 -1
- package/dist/es/standards-sdk.es80.js +1 -1
- package/dist/es/standards-sdk.es80.js.map +1 -1
- package/dist/es/standards-sdk.es82.js +1 -1
- package/dist/es/standards-sdk.es84.js +1 -1
- package/dist/es/standards-sdk.es88.js +1 -1
- package/dist/es/standards-sdk.es92.js +1 -1
- package/dist/es/standards-sdk.es93.js +1 -1
- package/dist/es/standards-sdk.es98.js +1 -1
- package/package.json +61 -63
|
@@ -204,17 +204,17 @@ export declare const adapterManifestSchema: z.ZodObject<{
|
|
|
204
204
|
meta: z.ZodObject<{
|
|
205
205
|
spec_version: z.ZodString;
|
|
206
206
|
adapter_version: z.ZodString;
|
|
207
|
-
|
|
207
|
+
minimum_version: z.ZodOptional<z.ZodString>;
|
|
208
208
|
generated: z.ZodString;
|
|
209
209
|
}, "strip", z.ZodTypeAny, {
|
|
210
210
|
spec_version?: string;
|
|
211
211
|
adapter_version?: string;
|
|
212
|
-
|
|
212
|
+
minimum_version?: string;
|
|
213
213
|
generated?: string;
|
|
214
214
|
}, {
|
|
215
215
|
spec_version?: string;
|
|
216
216
|
adapter_version?: string;
|
|
217
|
-
|
|
217
|
+
minimum_version?: string;
|
|
218
218
|
generated?: string;
|
|
219
219
|
}>;
|
|
220
220
|
adapter: z.ZodObject<{
|
|
@@ -345,7 +345,7 @@ export declare const adapterManifestSchema: z.ZodObject<{
|
|
|
345
345
|
meta?: {
|
|
346
346
|
spec_version?: string;
|
|
347
347
|
adapter_version?: string;
|
|
348
|
-
|
|
348
|
+
minimum_version?: string;
|
|
349
349
|
generated?: string;
|
|
350
350
|
};
|
|
351
351
|
capabilities?: {
|
|
@@ -392,7 +392,7 @@ export declare const adapterManifestSchema: z.ZodObject<{
|
|
|
392
392
|
meta?: {
|
|
393
393
|
spec_version?: string;
|
|
394
394
|
adapter_version?: string;
|
|
395
|
-
|
|
395
|
+
minimum_version?: string;
|
|
396
396
|
generated?: string;
|
|
397
397
|
};
|
|
398
398
|
capabilities?: {
|
|
@@ -488,17 +488,17 @@ export declare const metadataDocumentSchema: z.ZodUnion<[z.ZodObject<{
|
|
|
488
488
|
meta: z.ZodObject<{
|
|
489
489
|
spec_version: z.ZodString;
|
|
490
490
|
adapter_version: z.ZodString;
|
|
491
|
-
|
|
491
|
+
minimum_version: z.ZodOptional<z.ZodString>;
|
|
492
492
|
generated: z.ZodString;
|
|
493
493
|
}, "strip", z.ZodTypeAny, {
|
|
494
494
|
spec_version?: string;
|
|
495
495
|
adapter_version?: string;
|
|
496
|
-
|
|
496
|
+
minimum_version?: string;
|
|
497
497
|
generated?: string;
|
|
498
498
|
}, {
|
|
499
499
|
spec_version?: string;
|
|
500
500
|
adapter_version?: string;
|
|
501
|
-
|
|
501
|
+
minimum_version?: string;
|
|
502
502
|
generated?: string;
|
|
503
503
|
}>;
|
|
504
504
|
adapter: z.ZodObject<{
|
|
@@ -629,7 +629,7 @@ export declare const metadataDocumentSchema: z.ZodUnion<[z.ZodObject<{
|
|
|
629
629
|
meta?: {
|
|
630
630
|
spec_version?: string;
|
|
631
631
|
adapter_version?: string;
|
|
632
|
-
|
|
632
|
+
minimum_version?: string;
|
|
633
633
|
generated?: string;
|
|
634
634
|
};
|
|
635
635
|
capabilities?: {
|
|
@@ -676,7 +676,7 @@ export declare const metadataDocumentSchema: z.ZodUnion<[z.ZodObject<{
|
|
|
676
676
|
meta?: {
|
|
677
677
|
spec_version?: string;
|
|
678
678
|
adapter_version?: string;
|
|
679
|
-
|
|
679
|
+
minimum_version?: string;
|
|
680
680
|
generated?: string;
|
|
681
681
|
};
|
|
682
682
|
capabilities?: {
|
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
import { buildTopicCreateTx, buildMessageTx } from "./standards-sdk.
|
|
1
|
+
import { buildTopicCreateTx, buildMessageTx } from "./standards-sdk.es139.js";
|
|
2
2
|
import { generateHCS17Memo } from "./standards-sdk.es96.js";
|
|
3
3
|
function buildHcs17CreateTopicTx(params) {
|
|
4
4
|
const memo = generateHCS17Memo(params.ttl);
|
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
import { Client } from "@hashgraph/sdk";
|
|
2
2
|
import { Logger } from "./standards-sdk.es106.js";
|
|
3
|
-
import { createNodeOperatorContext } from "./standards-sdk.
|
|
3
|
+
import { createNodeOperatorContext } from "./standards-sdk.es137.js";
|
|
4
4
|
import { buildHcs18CreateDiscoveryTopicTx, buildHcs18AnnounceMessage, buildHcs18SubmitDiscoveryMessageTx, buildHcs18ProposeMessage, buildHcs18RespondMessage, buildHcs18CompleteMessage, buildHcs18WithdrawMessage } from "./standards-sdk.es104.js";
|
|
5
5
|
import { HCS18BaseClient } from "./standards-sdk.es105.js";
|
|
6
6
|
class HCS18Client extends HCS18BaseClient {
|
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
import { TopicMessageSubmitTransaction } from "@hashgraph/sdk";
|
|
2
2
|
import { DiscoveryOperation } from "./standards-sdk.es101.js";
|
|
3
|
-
import { buildTopicCreateTx } from "./standards-sdk.
|
|
3
|
+
import { buildTopicCreateTx } from "./standards-sdk.es139.js";
|
|
4
4
|
function buildHcs18DiscoveryMemo(ttlSeconds, memoOverride) {
|
|
5
5
|
if (memoOverride && memoOverride.trim().length > 0) {
|
|
6
6
|
return memoOverride;
|
|
@@ -6,7 +6,7 @@ import "node:buffer";
|
|
|
6
6
|
import "node:crypto";
|
|
7
7
|
import "@noble/curves/secp256k1.js";
|
|
8
8
|
import "./standards-sdk.es130.js";
|
|
9
|
-
import "./standards-sdk.
|
|
9
|
+
import "./standards-sdk.es138.js";
|
|
10
10
|
import "zod";
|
|
11
11
|
class HRLResolver {
|
|
12
12
|
constructor(logLevel = "info") {
|
|
@@ -5,11 +5,11 @@ import { ethers } from "ethers";
|
|
|
5
5
|
import { TransactionParsingError } from "./standards-sdk.es112.js";
|
|
6
6
|
import { resolveTransactionSummary } from "./standards-sdk.es113.js";
|
|
7
7
|
import { HTSParser } from "./standards-sdk.es121.js";
|
|
8
|
-
import { HCSParser } from "./standards-sdk.
|
|
9
|
-
import { FileParser } from "./standards-sdk.
|
|
10
|
-
import { CryptoParser } from "./standards-sdk.
|
|
11
|
-
import { SCSParser } from "./standards-sdk.
|
|
12
|
-
import { UtilParser } from "./standards-sdk.
|
|
8
|
+
import { HCSParser } from "./standards-sdk.es143.js";
|
|
9
|
+
import { FileParser } from "./standards-sdk.es144.js";
|
|
10
|
+
import { CryptoParser } from "./standards-sdk.es145.js";
|
|
11
|
+
import { SCSParser } from "./standards-sdk.es146.js";
|
|
12
|
+
import { UtilParser } from "./standards-sdk.es147.js";
|
|
13
13
|
import { ScheduleParser } from "./standards-sdk.es122.js";
|
|
14
14
|
import { transactionParserRegistry } from "./standards-sdk.es123.js";
|
|
15
15
|
import { getTransactionTypeFromBody, getHumanReadableTransactionType } from "./standards-sdk.es124.js";
|
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
import { PublicKey, PrivateKey } from "@hashgraph/sdk";
|
|
2
2
|
import { HCS7BaseClient } from "./standards-sdk.es10.js";
|
|
3
|
-
import { createNodeOperatorContext } from "./standards-sdk.
|
|
3
|
+
import { createNodeOperatorContext } from "./standards-sdk.es137.js";
|
|
4
4
|
import { buildHcs7CreateRegistryTx, buildHcs7SubmitMessageTx } from "./standards-sdk.es13.js";
|
|
5
5
|
class HCS7Client extends HCS7BaseClient {
|
|
6
6
|
constructor(config) {
|
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
import { proto } from "@hashgraph/proto";
|
|
2
2
|
import { AccountId, Long, TokenId } from "@hashgraph/sdk";
|
|
3
|
-
import { parseKey, hasTransactionType, extractTransactionBody } from "./standards-sdk.
|
|
3
|
+
import { parseKey, hasTransactionType, extractTransactionBody } from "./standards-sdk.es148.js";
|
|
4
4
|
import { Buffer } from "buffer";
|
|
5
5
|
class HTSParser {
|
|
6
6
|
/**
|
|
@@ -1,5 +1,5 @@
|
|
|
1
1
|
import { proto } from "@hashgraph/proto";
|
|
2
|
-
import { hasTransactionType, parseKey } from "./standards-sdk.
|
|
2
|
+
import { hasTransactionType, parseKey } from "./standards-sdk.es148.js";
|
|
3
3
|
import { AccountId, Long, ScheduleId } from "@hashgraph/sdk";
|
|
4
4
|
class ScheduleParser {
|
|
5
5
|
/**
|
|
@@ -1,10 +1,10 @@
|
|
|
1
1
|
import { HTSParser } from "./standards-sdk.es121.js";
|
|
2
|
-
import { HCSParser } from "./standards-sdk.
|
|
3
|
-
import { CryptoParser } from "./standards-sdk.
|
|
4
|
-
import { FileParser } from "./standards-sdk.
|
|
5
|
-
import { SCSParser } from "./standards-sdk.
|
|
2
|
+
import { HCSParser } from "./standards-sdk.es143.js";
|
|
3
|
+
import { CryptoParser } from "./standards-sdk.es145.js";
|
|
4
|
+
import { FileParser } from "./standards-sdk.es144.js";
|
|
5
|
+
import { SCSParser } from "./standards-sdk.es146.js";
|
|
6
6
|
import { ScheduleParser } from "./standards-sdk.es122.js";
|
|
7
|
-
import { UtilParser } from "./standards-sdk.
|
|
7
|
+
import { UtilParser } from "./standards-sdk.es147.js";
|
|
8
8
|
const transactionParserRegistry = {
|
|
9
9
|
TOKENCREATE: {
|
|
10
10
|
bodyField: "tokenCreation",
|
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
import { InscriptionSDK } from "./standards-sdk.
|
|
1
|
+
import { InscriptionSDK } from "./standards-sdk.es140.js";
|
|
2
2
|
import { Logger } from "./standards-sdk.es106.js";
|
|
3
3
|
import { ProgressReporter } from "./standards-sdk.es109.js";
|
|
4
4
|
import { TransactionParser } from "./standards-sdk.es111.js";
|
|
@@ -3,10 +3,10 @@ import { Buffer } from "node:buffer";
|
|
|
3
3
|
import { randomBytes, createHash, createCipheriv, createDecipheriv } from "node:crypto";
|
|
4
4
|
import { secp256k1 } from "@noble/curves/secp256k1.js";
|
|
5
5
|
import { canonicalizeLedgerNetwork } from "./standards-sdk.es130.js";
|
|
6
|
-
import { searchResponseSchema, statsResponseSchema, registriesResponseSchema, additionalRegistryCatalogResponseSchema, popularResponseSchema, resolveResponseSchema, registerAgentResponseSchema, registrationQuoteResponseSchema, registrationProgressResponseSchema, creditPurchaseResponseSchema, x402MinimumsResponseSchema, x402CreditPurchaseResponseSchema, ledgerChallengeResponseSchema, ledgerVerifyResponseSchema, protocolsResponseSchema, detectProtocolResponseSchema, registrySearchByNamespaceSchema, vectorSearchResponseSchema, searchStatusResponseSchema, adapterDetailsResponseSchema, websocketStatsResponseSchema, metricsSummaryResponseSchema, uaidValidationResponseSchema, uaidConnectionStatusSchema, dashboardStatsResponseSchema, adaptersResponseSchema, searchFacetsResponseSchema, createSessionResponseSchema, chatHistorySnapshotResponseSchema, chatHistoryCompactionResponseSchema, sessionEncryptionStatusResponseSchema, encryptionHandshakeResponseSchema, registerEncryptionKeyResponseSchema, sendMessageResponseSchema } from "./standards-sdk.
|
|
6
|
+
import { searchResponseSchema, statsResponseSchema, registriesResponseSchema, additionalRegistryCatalogResponseSchema, popularResponseSchema, resolveResponseSchema, registerAgentResponseSchema, registrationQuoteResponseSchema, registrationProgressResponseSchema, creditPurchaseResponseSchema, x402MinimumsResponseSchema, x402CreditPurchaseResponseSchema, ledgerChallengeResponseSchema, ledgerVerifyResponseSchema, protocolsResponseSchema, detectProtocolResponseSchema, registrySearchByNamespaceSchema, vectorSearchResponseSchema, searchStatusResponseSchema, adapterDetailsResponseSchema, websocketStatsResponseSchema, metricsSummaryResponseSchema, uaidValidationResponseSchema, uaidConnectionStatusSchema, dashboardStatsResponseSchema, adaptersResponseSchema, searchFacetsResponseSchema, createSessionResponseSchema, chatHistorySnapshotResponseSchema, chatHistoryCompactionResponseSchema, sessionEncryptionStatusResponseSchema, encryptionHandshakeResponseSchema, registerEncryptionKeyResponseSchema, sendMessageResponseSchema } from "./standards-sdk.es138.js";
|
|
7
7
|
import { ZodError } from "zod";
|
|
8
8
|
import { createPrivateKeySigner } from "./standards-sdk.es129.js";
|
|
9
|
-
import { optionalImport } from "./standards-sdk.
|
|
9
|
+
import { optionalImport } from "./standards-sdk.es142.js";
|
|
10
10
|
const getFs = async () => {
|
|
11
11
|
const fsModule = await optionalImport("node:fs");
|
|
12
12
|
if (fsModule && typeof fsModule.existsSync === "function" && typeof fsModule.readFileSync === "function" && typeof fsModule.writeFileSync === "function" && typeof fsModule.appendFileSync === "function") {
|
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
import { optionalImportSync } from "./standards-sdk.
|
|
1
|
+
import { optionalImportSync } from "./standards-sdk.es142.js";
|
|
2
2
|
const unsupported = (method) => new Error(`${method} is not supported by the in-memory signer`);
|
|
3
3
|
const createPrivateKeySigner = (options) => {
|
|
4
4
|
const sdk = loadHashgraphSdk();
|
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
import { buildTopicCreateTx, buildMessageTx } from "./standards-sdk.
|
|
1
|
+
import { buildTopicCreateTx, buildMessageTx } from "./standards-sdk.es139.js";
|
|
2
2
|
import { HCS7ConfigType, HCS7Operation } from "./standards-sdk.es9.js";
|
|
3
3
|
function buildHcs7CreateRegistryTx(params) {
|
|
4
4
|
const memo = `hcs-7:indexed:${params.ttl}`;
|
|
@@ -1,141 +1,20 @@
|
|
|
1
|
-
import {
|
|
2
|
-
import {
|
|
3
|
-
class
|
|
4
|
-
constructor(params) {
|
|
5
|
-
this.mirror = params.mirrorNode;
|
|
6
|
-
this.logger = params.logger;
|
|
7
|
-
}
|
|
8
|
-
/**
|
|
9
|
-
* Best-guess parsing for an operator key without network calls.
|
|
10
|
-
* - If PrivateKey: returns immediately with provided or fallback type.
|
|
11
|
-
* - If string with explicitType: parse directly.
|
|
12
|
-
* - If string without type: detect format; fallback to ECDSA.
|
|
13
|
-
*/
|
|
14
|
-
bestGuessOperatorKey(operatorKeyInput, explicitType) {
|
|
15
|
-
if (typeof operatorKeyInput !== "string") {
|
|
16
|
-
return { keyType: explicitType || "ecdsa", privateKey: operatorKeyInput };
|
|
17
|
-
}
|
|
18
|
-
if (explicitType) {
|
|
19
|
-
const pk = explicitType === "ed25519" ? PrivateKey.fromStringED25519(operatorKeyInput) : PrivateKey.fromStringECDSA(operatorKeyInput);
|
|
20
|
-
return { keyType: explicitType, privateKey: pk };
|
|
21
|
-
}
|
|
22
|
-
try {
|
|
23
|
-
const detected = detectKeyTypeFromString(operatorKeyInput);
|
|
24
|
-
return {
|
|
25
|
-
keyType: detected.detectedType,
|
|
26
|
-
privateKey: detected.privateKey
|
|
27
|
-
};
|
|
28
|
-
} catch {
|
|
29
|
-
return {
|
|
30
|
-
keyType: "ecdsa",
|
|
31
|
-
privateKey: PrivateKey.fromStringECDSA(operatorKeyInput)
|
|
32
|
-
};
|
|
33
|
-
}
|
|
34
|
-
}
|
|
1
|
+
import { Logger } from "./standards-sdk.es106.js";
|
|
2
|
+
import { HederaMirrorNode } from "./standards-sdk.es127.js";
|
|
3
|
+
class HCS5BaseClient {
|
|
35
4
|
/**
|
|
36
|
-
*
|
|
37
|
-
* - If PrivateKey: return immediately.
|
|
38
|
-
* - If explicitType: parse directly.
|
|
39
|
-
* - Else: query Mirror Node; fallback to local detection.
|
|
5
|
+
* Create a new HCS-5 base client
|
|
40
6
|
*/
|
|
41
|
-
|
|
42
|
-
|
|
43
|
-
|
|
44
|
-
|
|
45
|
-
|
|
46
|
-
|
|
47
|
-
|
|
48
|
-
|
|
49
|
-
const account = typeof operatorId === "string" ? operatorId : operatorId.toString();
|
|
50
|
-
try {
|
|
51
|
-
const info = await this.mirror.requestAccount(account);
|
|
52
|
-
const t = info?.key?._type || "";
|
|
53
|
-
const keyType = t.includes("ED25519") ? "ed25519" : "ecdsa";
|
|
54
|
-
const privateKey = keyType === "ed25519" ? PrivateKey.fromStringED25519(operatorKeyInput) : PrivateKey.fromStringECDSA(operatorKeyInput);
|
|
55
|
-
return { keyType, privateKey };
|
|
56
|
-
} catch {
|
|
57
|
-
this.logger.warn(
|
|
58
|
-
"Mirror node key detection failed; using local detection or default ECDSA"
|
|
59
|
-
);
|
|
60
|
-
return this.bestGuessOperatorKey(operatorKeyInput);
|
|
61
|
-
}
|
|
7
|
+
constructor(config) {
|
|
8
|
+
this.network = config.network;
|
|
9
|
+
this.logger = config.logger || Logger.getInstance({
|
|
10
|
+
level: config.logLevel || "info",
|
|
11
|
+
module: "HCS5Client",
|
|
12
|
+
silent: config.silent
|
|
13
|
+
});
|
|
14
|
+
this.mirrorNode = new HederaMirrorNode(this.network, this.logger);
|
|
62
15
|
}
|
|
63
|
-
/**
|
|
64
|
-
* Resolve a supply key for the given token using Mirror Node token supply_key._type when possible.
|
|
65
|
-
*/
|
|
66
|
-
async resolveSupplyKey(tokenId, keyInput, fallbackType, explicitType) {
|
|
67
|
-
try {
|
|
68
|
-
const info = await this.mirror.getTokenInfo(tokenId);
|
|
69
|
-
const t = info?.supply_key?._type || "";
|
|
70
|
-
if (typeof keyInput !== "string") {
|
|
71
|
-
return keyInput;
|
|
72
|
-
}
|
|
73
|
-
if (explicitType) {
|
|
74
|
-
return explicitType === "ed25519" ? PrivateKey.fromStringED25519(keyInput) : PrivateKey.fromStringECDSA(keyInput);
|
|
75
|
-
}
|
|
76
|
-
if (t.includes("ED25519")) {
|
|
77
|
-
return PrivateKey.fromStringED25519(keyInput);
|
|
78
|
-
}
|
|
79
|
-
if (t.includes("ECDSA")) {
|
|
80
|
-
return PrivateKey.fromStringECDSA(keyInput);
|
|
81
|
-
}
|
|
82
|
-
return fallbackType === "ed25519" ? PrivateKey.fromStringED25519(keyInput) : PrivateKey.fromStringECDSA(keyInput);
|
|
83
|
-
} catch {
|
|
84
|
-
if (typeof keyInput !== "string") {
|
|
85
|
-
return keyInput;
|
|
86
|
-
}
|
|
87
|
-
if (explicitType) {
|
|
88
|
-
return explicitType === "ed25519" ? PrivateKey.fromStringED25519(keyInput) : PrivateKey.fromStringECDSA(keyInput);
|
|
89
|
-
}
|
|
90
|
-
return fallbackType === "ed25519" ? PrivateKey.fromStringED25519(keyInput) : PrivateKey.fromStringECDSA(keyInput);
|
|
91
|
-
}
|
|
92
|
-
}
|
|
93
|
-
}
|
|
94
|
-
function createNodeOperatorContext(params) {
|
|
95
|
-
const operatorId = typeof params.operatorId === "string" ? AccountId.fromString(params.operatorId) : params.operatorId;
|
|
96
|
-
const client = params.client ? params.client : params.network === "mainnet" ? Client.forMainnet() : Client.forTestnet();
|
|
97
|
-
const resolver = new NodeOperatorResolver({
|
|
98
|
-
mirrorNode: params.mirrorNode,
|
|
99
|
-
logger: params.logger
|
|
100
|
-
});
|
|
101
|
-
let currentKeyType;
|
|
102
|
-
let currentPrivateKey;
|
|
103
|
-
const guess = resolver.bestGuessOperatorKey(
|
|
104
|
-
params.operatorKey,
|
|
105
|
-
params.keyType
|
|
106
|
-
);
|
|
107
|
-
currentKeyType = guess.keyType;
|
|
108
|
-
currentPrivateKey = guess.privateKey;
|
|
109
|
-
client.setOperator(operatorId.toString(), currentPrivateKey);
|
|
110
|
-
const initPromise = (async () => {
|
|
111
|
-
try {
|
|
112
|
-
const resolved = await resolver.resolveOperatorKey(
|
|
113
|
-
operatorId,
|
|
114
|
-
params.operatorKey,
|
|
115
|
-
params.keyType
|
|
116
|
-
);
|
|
117
|
-
currentKeyType = resolved.keyType;
|
|
118
|
-
currentPrivateKey = resolved.privateKey;
|
|
119
|
-
client.setOperator(operatorId.toString(), currentPrivateKey);
|
|
120
|
-
} catch {
|
|
121
|
-
}
|
|
122
|
-
})();
|
|
123
|
-
return {
|
|
124
|
-
client,
|
|
125
|
-
operatorId,
|
|
126
|
-
get operatorKey() {
|
|
127
|
-
return currentPrivateKey;
|
|
128
|
-
},
|
|
129
|
-
get keyType() {
|
|
130
|
-
return currentKeyType;
|
|
131
|
-
},
|
|
132
|
-
ensureInitialized: async () => {
|
|
133
|
-
await initPromise;
|
|
134
|
-
}
|
|
135
|
-
};
|
|
136
16
|
}
|
|
137
17
|
export {
|
|
138
|
-
|
|
139
|
-
createNodeOperatorContext
|
|
18
|
+
HCS5BaseClient
|
|
140
19
|
};
|
|
141
20
|
//# sourceMappingURL=standards-sdk.es136.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"standards-sdk.es136.js","sources":["../../src/
|
|
1
|
+
{"version":3,"file":"standards-sdk.es136.js","sources":["../../src/hcs-5/base-client.ts"],"sourcesContent":["import { Logger, ILogger } from '../utils/logger';\nimport { HederaMirrorNode } from '../services/mirror-node';\nimport { HCS5ClientConfig } from './types';\nimport { NetworkType } from '../utils/types';\n\n/**\n * Base client for HCS-5 operations\n */\nexport abstract class HCS5BaseClient {\n protected logger: ILogger;\n protected mirrorNode: HederaMirrorNode;\n protected network: NetworkType;\n\n /**\n * Create a new HCS-5 base client\n */\n constructor(config: HCS5ClientConfig) {\n this.network = config.network;\n this.logger =\n config.logger ||\n Logger.getInstance({\n level: config.logLevel || 'info',\n module: 'HCS5Client',\n silent: config.silent,\n });\n\n this.mirrorNode = new HederaMirrorNode(this.network, this.logger);\n }\n}\n"],"names":[],"mappings":";;AAQO,MAAe,eAAe;AAAA;AAAA;AAAA;AAAA,EAQnC,YAAY,QAA0B;AACpC,SAAK,UAAU,OAAO;AACtB,SAAK,SACH,OAAO,UACP,OAAO,YAAY;AAAA,MACjB,OAAO,OAAO,YAAY;AAAA,MAC1B,QAAQ;AAAA,MACR,QAAQ,OAAO;AAAA,IAAA,CAChB;AAEH,SAAK,aAAa,IAAI,iBAAiB,KAAK,SAAS,KAAK,MAAM;AAAA,EAClE;AACF;"}
|
|
@@ -1,45 +1,141 @@
|
|
|
1
|
-
import {
|
|
2
|
-
|
|
3
|
-
|
|
4
|
-
|
|
5
|
-
|
|
6
|
-
|
|
7
|
-
|
|
8
|
-
|
|
9
|
-
|
|
10
|
-
|
|
11
|
-
|
|
12
|
-
|
|
13
|
-
|
|
14
|
-
|
|
15
|
-
|
|
16
|
-
|
|
17
|
-
|
|
18
|
-
|
|
19
|
-
|
|
1
|
+
import { AccountId, Client, PrivateKey } from "@hashgraph/sdk";
|
|
2
|
+
import { detectKeyTypeFromString } from "./standards-sdk.es114.js";
|
|
3
|
+
class NodeOperatorResolver {
|
|
4
|
+
constructor(params) {
|
|
5
|
+
this.mirror = params.mirrorNode;
|
|
6
|
+
this.logger = params.logger;
|
|
7
|
+
}
|
|
8
|
+
/**
|
|
9
|
+
* Best-guess parsing for an operator key without network calls.
|
|
10
|
+
* - If PrivateKey: returns immediately with provided or fallback type.
|
|
11
|
+
* - If string with explicitType: parse directly.
|
|
12
|
+
* - If string without type: detect format; fallback to ECDSA.
|
|
13
|
+
*/
|
|
14
|
+
bestGuessOperatorKey(operatorKeyInput, explicitType) {
|
|
15
|
+
if (typeof operatorKeyInput !== "string") {
|
|
16
|
+
return { keyType: explicitType || "ecdsa", privateKey: operatorKeyInput };
|
|
17
|
+
}
|
|
18
|
+
if (explicitType) {
|
|
19
|
+
const pk = explicitType === "ed25519" ? PrivateKey.fromStringED25519(operatorKeyInput) : PrivateKey.fromStringECDSA(operatorKeyInput);
|
|
20
|
+
return { keyType: explicitType, privateKey: pk };
|
|
21
|
+
}
|
|
22
|
+
try {
|
|
23
|
+
const detected = detectKeyTypeFromString(operatorKeyInput);
|
|
24
|
+
return {
|
|
25
|
+
keyType: detected.detectedType,
|
|
26
|
+
privateKey: detected.privateKey
|
|
27
|
+
};
|
|
28
|
+
} catch {
|
|
29
|
+
return {
|
|
30
|
+
keyType: "ecdsa",
|
|
31
|
+
privateKey: PrivateKey.fromStringECDSA(operatorKeyInput)
|
|
32
|
+
};
|
|
20
33
|
}
|
|
21
|
-
return void 0;
|
|
22
|
-
};
|
|
23
|
-
const admin = coerceKey(adminKey);
|
|
24
|
-
if (admin) {
|
|
25
|
-
tx.setAdminKey(admin);
|
|
26
34
|
}
|
|
27
|
-
|
|
28
|
-
|
|
29
|
-
|
|
35
|
+
/**
|
|
36
|
+
* Resolve an operator key using Mirror Node for key type when possible.
|
|
37
|
+
* - If PrivateKey: return immediately.
|
|
38
|
+
* - If explicitType: parse directly.
|
|
39
|
+
* - Else: query Mirror Node; fallback to local detection.
|
|
40
|
+
*/
|
|
41
|
+
async resolveOperatorKey(operatorId, operatorKeyInput, explicitType) {
|
|
42
|
+
if (typeof operatorKeyInput !== "string") {
|
|
43
|
+
return { keyType: explicitType || "ecdsa", privateKey: operatorKeyInput };
|
|
44
|
+
}
|
|
45
|
+
if (explicitType) {
|
|
46
|
+
const pk = explicitType === "ed25519" ? PrivateKey.fromStringED25519(operatorKeyInput) : PrivateKey.fromStringECDSA(operatorKeyInput);
|
|
47
|
+
return { keyType: explicitType, privateKey: pk };
|
|
48
|
+
}
|
|
49
|
+
const account = typeof operatorId === "string" ? operatorId : operatorId.toString();
|
|
50
|
+
try {
|
|
51
|
+
const info = await this.mirror.requestAccount(account);
|
|
52
|
+
const t = info?.key?._type || "";
|
|
53
|
+
const keyType = t.includes("ED25519") ? "ed25519" : "ecdsa";
|
|
54
|
+
const privateKey = keyType === "ed25519" ? PrivateKey.fromStringED25519(operatorKeyInput) : PrivateKey.fromStringECDSA(operatorKeyInput);
|
|
55
|
+
return { keyType, privateKey };
|
|
56
|
+
} catch {
|
|
57
|
+
this.logger.warn(
|
|
58
|
+
"Mirror node key detection failed; using local detection or default ECDSA"
|
|
59
|
+
);
|
|
60
|
+
return this.bestGuessOperatorKey(operatorKeyInput);
|
|
61
|
+
}
|
|
30
62
|
}
|
|
31
|
-
|
|
32
|
-
|
|
33
|
-
|
|
34
|
-
|
|
35
|
-
|
|
36
|
-
|
|
63
|
+
/**
|
|
64
|
+
* Resolve a supply key for the given token using Mirror Node token supply_key._type when possible.
|
|
65
|
+
*/
|
|
66
|
+
async resolveSupplyKey(tokenId, keyInput, fallbackType, explicitType) {
|
|
67
|
+
try {
|
|
68
|
+
const info = await this.mirror.getTokenInfo(tokenId);
|
|
69
|
+
const t = info?.supply_key?._type || "";
|
|
70
|
+
if (typeof keyInput !== "string") {
|
|
71
|
+
return keyInput;
|
|
72
|
+
}
|
|
73
|
+
if (explicitType) {
|
|
74
|
+
return explicitType === "ed25519" ? PrivateKey.fromStringED25519(keyInput) : PrivateKey.fromStringECDSA(keyInput);
|
|
75
|
+
}
|
|
76
|
+
if (t.includes("ED25519")) {
|
|
77
|
+
return PrivateKey.fromStringED25519(keyInput);
|
|
78
|
+
}
|
|
79
|
+
if (t.includes("ECDSA")) {
|
|
80
|
+
return PrivateKey.fromStringECDSA(keyInput);
|
|
81
|
+
}
|
|
82
|
+
return fallbackType === "ed25519" ? PrivateKey.fromStringED25519(keyInput) : PrivateKey.fromStringECDSA(keyInput);
|
|
83
|
+
} catch {
|
|
84
|
+
if (typeof keyInput !== "string") {
|
|
85
|
+
return keyInput;
|
|
86
|
+
}
|
|
87
|
+
if (explicitType) {
|
|
88
|
+
return explicitType === "ed25519" ? PrivateKey.fromStringED25519(keyInput) : PrivateKey.fromStringECDSA(keyInput);
|
|
89
|
+
}
|
|
90
|
+
return fallbackType === "ed25519" ? PrivateKey.fromStringED25519(keyInput) : PrivateKey.fromStringECDSA(keyInput);
|
|
91
|
+
}
|
|
37
92
|
}
|
|
38
|
-
|
|
93
|
+
}
|
|
94
|
+
function createNodeOperatorContext(params) {
|
|
95
|
+
const operatorId = typeof params.operatorId === "string" ? AccountId.fromString(params.operatorId) : params.operatorId;
|
|
96
|
+
const client = params.client ? params.client : params.network === "mainnet" ? Client.forMainnet() : Client.forTestnet();
|
|
97
|
+
const resolver = new NodeOperatorResolver({
|
|
98
|
+
mirrorNode: params.mirrorNode,
|
|
99
|
+
logger: params.logger
|
|
100
|
+
});
|
|
101
|
+
let currentKeyType;
|
|
102
|
+
let currentPrivateKey;
|
|
103
|
+
const guess = resolver.bestGuessOperatorKey(
|
|
104
|
+
params.operatorKey,
|
|
105
|
+
params.keyType
|
|
106
|
+
);
|
|
107
|
+
currentKeyType = guess.keyType;
|
|
108
|
+
currentPrivateKey = guess.privateKey;
|
|
109
|
+
client.setOperator(operatorId.toString(), currentPrivateKey);
|
|
110
|
+
const initPromise = (async () => {
|
|
111
|
+
try {
|
|
112
|
+
const resolved = await resolver.resolveOperatorKey(
|
|
113
|
+
operatorId,
|
|
114
|
+
params.operatorKey,
|
|
115
|
+
params.keyType
|
|
116
|
+
);
|
|
117
|
+
currentKeyType = resolved.keyType;
|
|
118
|
+
currentPrivateKey = resolved.privateKey;
|
|
119
|
+
client.setOperator(operatorId.toString(), currentPrivateKey);
|
|
120
|
+
} catch {
|
|
121
|
+
}
|
|
122
|
+
})();
|
|
123
|
+
return {
|
|
124
|
+
client,
|
|
125
|
+
operatorId,
|
|
126
|
+
get operatorKey() {
|
|
127
|
+
return currentPrivateKey;
|
|
128
|
+
},
|
|
129
|
+
get keyType() {
|
|
130
|
+
return currentKeyType;
|
|
131
|
+
},
|
|
132
|
+
ensureInitialized: async () => {
|
|
133
|
+
await initPromise;
|
|
134
|
+
}
|
|
135
|
+
};
|
|
39
136
|
}
|
|
40
137
|
export {
|
|
41
|
-
|
|
42
|
-
|
|
43
|
-
encodeHcs2RegistryMemo
|
|
138
|
+
NodeOperatorResolver,
|
|
139
|
+
createNodeOperatorContext
|
|
44
140
|
};
|
|
45
141
|
//# sourceMappingURL=standards-sdk.es137.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"standards-sdk.es137.js","sources":["../../src/common/
|
|
1
|
+
{"version":3,"file":"standards-sdk.es137.js","sources":["../../src/common/node-operator-resolver.ts"],"sourcesContent":["import { AccountId, Client, PrivateKey } from '@hashgraph/sdk';\nimport { HederaMirrorNode } from '../services/mirror-node';\nimport { ILogger } from '../utils/logger';\nimport { detectKeyTypeFromString } from '../utils/key-type-detector';\nimport { NetworkType } from '../utils/types';\n\n/**\n * Resolves operator and supply private keys using Mirror Node as source of truth\n * with format-detection fallbacks for string keys.\n */\nexport class NodeOperatorResolver {\n private readonly mirror: HederaMirrorNode;\n private readonly logger: ILogger;\n\n constructor(params: { mirrorNode: HederaMirrorNode; logger: ILogger }) {\n this.mirror = params.mirrorNode;\n this.logger = params.logger;\n }\n\n /**\n * Best-guess parsing for an operator key without network calls.\n * - If PrivateKey: returns immediately with provided or fallback type.\n * - If string with explicitType: parse directly.\n * - If string without type: detect format; fallback to ECDSA.\n */\n bestGuessOperatorKey(\n operatorKeyInput: string | PrivateKey,\n explicitType?: 'ed25519' | 'ecdsa',\n ): { keyType: 'ed25519' | 'ecdsa'; privateKey: PrivateKey } {\n if (typeof operatorKeyInput !== 'string') {\n return { keyType: explicitType || 'ecdsa', privateKey: operatorKeyInput };\n }\n if (explicitType) {\n const pk =\n explicitType === 'ed25519'\n ? PrivateKey.fromStringED25519(operatorKeyInput)\n : PrivateKey.fromStringECDSA(operatorKeyInput);\n return { keyType: explicitType, privateKey: pk };\n }\n try {\n const detected = detectKeyTypeFromString(operatorKeyInput);\n return {\n keyType: detected.detectedType,\n privateKey: detected.privateKey,\n };\n } catch {\n return {\n keyType: 'ecdsa',\n privateKey: PrivateKey.fromStringECDSA(operatorKeyInput),\n };\n }\n }\n\n /**\n * Resolve an operator key using Mirror Node for key type when possible.\n * - If PrivateKey: return immediately.\n * - If explicitType: parse directly.\n * - Else: query Mirror Node; fallback to local detection.\n */\n async resolveOperatorKey(\n operatorId: string | AccountId,\n operatorKeyInput: string | PrivateKey,\n explicitType?: 'ed25519' | 'ecdsa',\n ): Promise<{ keyType: 'ed25519' | 'ecdsa'; privateKey: PrivateKey }> {\n if (typeof operatorKeyInput !== 'string') {\n return { keyType: explicitType || 'ecdsa', privateKey: operatorKeyInput };\n }\n if (explicitType) {\n const pk =\n explicitType === 'ed25519'\n ? PrivateKey.fromStringED25519(operatorKeyInput)\n : PrivateKey.fromStringECDSA(operatorKeyInput);\n return { keyType: explicitType, privateKey: pk };\n }\n const account =\n typeof operatorId === 'string' ? operatorId : operatorId.toString();\n try {\n const info = await this.mirror.requestAccount(account);\n const t = info?.key?._type || '';\n const keyType: 'ed25519' | 'ecdsa' = t.includes('ED25519')\n ? 'ed25519'\n : 'ecdsa';\n const privateKey =\n keyType === 'ed25519'\n ? PrivateKey.fromStringED25519(operatorKeyInput)\n : PrivateKey.fromStringECDSA(operatorKeyInput);\n return { keyType, privateKey };\n } catch {\n this.logger.warn(\n 'Mirror node key detection failed; using local detection or default ECDSA',\n );\n return this.bestGuessOperatorKey(operatorKeyInput);\n }\n }\n\n /**\n * Resolve a supply key for the given token using Mirror Node token supply_key._type when possible.\n */\n async resolveSupplyKey(\n tokenId: string,\n keyInput: string | PrivateKey,\n fallbackType: 'ed25519' | 'ecdsa',\n explicitType?: 'ed25519' | 'ecdsa',\n ): Promise<PrivateKey> {\n try {\n const info = await this.mirror.getTokenInfo(tokenId);\n const t = info?.supply_key?._type || '';\n if (typeof keyInput !== 'string') {\n return keyInput;\n }\n if (explicitType) {\n return explicitType === 'ed25519'\n ? PrivateKey.fromStringED25519(keyInput)\n : PrivateKey.fromStringECDSA(keyInput);\n }\n if (t.includes('ED25519')) {\n return PrivateKey.fromStringED25519(keyInput);\n }\n if (t.includes('ECDSA')) {\n return PrivateKey.fromStringECDSA(keyInput);\n }\n return fallbackType === 'ed25519'\n ? PrivateKey.fromStringED25519(keyInput)\n : PrivateKey.fromStringECDSA(keyInput);\n } catch {\n if (typeof keyInput !== 'string') {\n return keyInput;\n }\n if (explicitType) {\n return explicitType === 'ed25519'\n ? PrivateKey.fromStringED25519(keyInput)\n : PrivateKey.fromStringECDSA(keyInput);\n }\n return fallbackType === 'ed25519'\n ? PrivateKey.fromStringED25519(keyInput)\n : PrivateKey.fromStringECDSA(keyInput);\n }\n }\n}\n\nexport interface NodeOperatorInitParams {\n network: NetworkType;\n operatorId: string | AccountId;\n operatorKey: string | PrivateKey;\n keyType?: 'ed25519' | 'ecdsa';\n mirrorNode: HederaMirrorNode;\n logger: ILogger;\n client?: Client;\n}\n\nexport interface NodeOperatorContext {\n client: Client;\n operatorId: AccountId;\n readonly operatorKey: PrivateKey;\n readonly keyType: 'ed25519' | 'ecdsa';\n ensureInitialized(): Promise<void>;\n}\n\nexport function createNodeOperatorContext(\n params: NodeOperatorInitParams,\n): NodeOperatorContext {\n const operatorId: AccountId =\n typeof params.operatorId === 'string'\n ? AccountId.fromString(params.operatorId)\n : params.operatorId;\n\n const client: Client = params.client\n ? params.client\n : params.network === 'mainnet'\n ? Client.forMainnet()\n : Client.forTestnet();\n\n const resolver = new NodeOperatorResolver({\n mirrorNode: params.mirrorNode,\n logger: params.logger,\n });\n\n let currentKeyType: 'ed25519' | 'ecdsa';\n let currentPrivateKey: PrivateKey;\n\n const guess = resolver.bestGuessOperatorKey(\n params.operatorKey,\n params.keyType,\n );\n currentKeyType = guess.keyType;\n currentPrivateKey = guess.privateKey;\n client.setOperator(operatorId.toString(), currentPrivateKey);\n\n const initPromise = (async () => {\n try {\n const resolved = await resolver.resolveOperatorKey(\n operatorId,\n params.operatorKey,\n params.keyType,\n );\n currentKeyType = resolved.keyType;\n currentPrivateKey = resolved.privateKey;\n client.setOperator(operatorId.toString(), currentPrivateKey);\n } catch {}\n })();\n\n return {\n client,\n operatorId,\n get operatorKey() {\n return currentPrivateKey;\n },\n get keyType() {\n return currentKeyType;\n },\n ensureInitialized: async () => {\n await initPromise;\n },\n };\n}\n"],"names":[],"mappings":";;AAUO,MAAM,qBAAqB;AAAA,EAIhC,YAAY,QAA2D;AACrE,SAAK,SAAS,OAAO;AACrB,SAAK,SAAS,OAAO;AAAA,EACvB;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,EAQA,qBACE,kBACA,cAC0D;AAC1D,QAAI,OAAO,qBAAqB,UAAU;AACxC,aAAO,EAAE,SAAS,gBAAgB,SAAS,YAAY,iBAAA;AAAA,IACzD;AACA,QAAI,cAAc;AAChB,YAAM,KACJ,iBAAiB,YACb,WAAW,kBAAkB,gBAAgB,IAC7C,WAAW,gBAAgB,gBAAgB;AACjD,aAAO,EAAE,SAAS,cAAc,YAAY,GAAA;AAAA,IAC9C;AACA,QAAI;AACF,YAAM,WAAW,wBAAwB,gBAAgB;AACzD,aAAO;AAAA,QACL,SAAS,SAAS;AAAA,QAClB,YAAY,SAAS;AAAA,MAAA;AAAA,IAEzB,QAAQ;AACN,aAAO;AAAA,QACL,SAAS;AAAA,QACT,YAAY,WAAW,gBAAgB,gBAAgB;AAAA,MAAA;AAAA,IAE3D;AAAA,EACF;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,EAQA,MAAM,mBACJ,YACA,kBACA,cACmE;AACnE,QAAI,OAAO,qBAAqB,UAAU;AACxC,aAAO,EAAE,SAAS,gBAAgB,SAAS,YAAY,iBAAA;AAAA,IACzD;AACA,QAAI,cAAc;AAChB,YAAM,KACJ,iBAAiB,YACb,WAAW,kBAAkB,gBAAgB,IAC7C,WAAW,gBAAgB,gBAAgB;AACjD,aAAO,EAAE,SAAS,cAAc,YAAY,GAAA;AAAA,IAC9C;AACA,UAAM,UACJ,OAAO,eAAe,WAAW,aAAa,WAAW,SAAA;AAC3D,QAAI;AACF,YAAM,OAAO,MAAM,KAAK,OAAO,eAAe,OAAO;AACrD,YAAM,IAAI,MAAM,KAAK,SAAS;AAC9B,YAAM,UAA+B,EAAE,SAAS,SAAS,IACrD,YACA;AACJ,YAAM,aACJ,YAAY,YACR,WAAW,kBAAkB,gBAAgB,IAC7C,WAAW,gBAAgB,gBAAgB;AACjD,aAAO,EAAE,SAAS,WAAA;AAAA,IACpB,QAAQ;AACN,WAAK,OAAO;AAAA,QACV;AAAA,MAAA;AAEF,aAAO,KAAK,qBAAqB,gBAAgB;AAAA,IACnD;AAAA,EACF;AAAA;AAAA;AAAA;AAAA,EAKA,MAAM,iBACJ,SACA,UACA,cACA,cACqB;AACrB,QAAI;AACF,YAAM,OAAO,MAAM,KAAK,OAAO,aAAa,OAAO;AACnD,YAAM,IAAI,MAAM,YAAY,SAAS;AACrC,UAAI,OAAO,aAAa,UAAU;AAChC,eAAO;AAAA,MACT;AACA,UAAI,cAAc;AAChB,eAAO,iBAAiB,YACpB,WAAW,kBAAkB,QAAQ,IACrC,WAAW,gBAAgB,QAAQ;AAAA,MACzC;AACA,UAAI,EAAE,SAAS,SAAS,GAAG;AACzB,eAAO,WAAW,kBAAkB,QAAQ;AAAA,MAC9C;AACA,UAAI,EAAE,SAAS,OAAO,GAAG;AACvB,eAAO,WAAW,gBAAgB,QAAQ;AAAA,MAC5C;AACA,aAAO,iBAAiB,YACpB,WAAW,kBAAkB,QAAQ,IACrC,WAAW,gBAAgB,QAAQ;AAAA,IACzC,QAAQ;AACN,UAAI,OAAO,aAAa,UAAU;AAChC,eAAO;AAAA,MACT;AACA,UAAI,cAAc;AAChB,eAAO,iBAAiB,YACpB,WAAW,kBAAkB,QAAQ,IACrC,WAAW,gBAAgB,QAAQ;AAAA,MACzC;AACA,aAAO,iBAAiB,YACpB,WAAW,kBAAkB,QAAQ,IACrC,WAAW,gBAAgB,QAAQ;AAAA,IACzC;AAAA,EACF;AACF;AAoBO,SAAS,0BACd,QACqB;AACrB,QAAM,aACJ,OAAO,OAAO,eAAe,WACzB,UAAU,WAAW,OAAO,UAAU,IACtC,OAAO;AAEb,QAAM,SAAiB,OAAO,SAC1B,OAAO,SACP,OAAO,YAAY,YACjB,OAAO,WAAA,IACP,OAAO,WAAA;AAEb,QAAM,WAAW,IAAI,qBAAqB;AAAA,IACxC,YAAY,OAAO;AAAA,IACnB,QAAQ,OAAO;AAAA,EAAA,CAChB;AAED,MAAI;AACJ,MAAI;AAEJ,QAAM,QAAQ,SAAS;AAAA,IACrB,OAAO;AAAA,IACP,OAAO;AAAA,EAAA;AAET,mBAAiB,MAAM;AACvB,sBAAoB,MAAM;AAC1B,SAAO,YAAY,WAAW,SAAA,GAAY,iBAAiB;AAE3D,QAAM,eAAe,YAAY;AAC/B,QAAI;AACF,YAAM,WAAW,MAAM,SAAS;AAAA,QAC9B;AAAA,QACA,OAAO;AAAA,QACP,OAAO;AAAA,MAAA;AAET,uBAAiB,SAAS;AAC1B,0BAAoB,SAAS;AAC7B,aAAO,YAAY,WAAW,SAAA,GAAY,iBAAiB;AAAA,IAC7D,QAAQ;AAAA,IAAC;AAAA,EACX,GAAA;AAEA,SAAO;AAAA,IACL;AAAA,IACA;AAAA,IACA,IAAI,cAAc;AAChB,aAAO;AAAA,IACT;AAAA,IACA,IAAI,UAAU;AACZ,aAAO;AAAA,IACT;AAAA,IACA,mBAAmB,YAAY;AAC7B,YAAM;AAAA,IACR;AAAA,EAAA;AAEJ;"}
|