@hashgraphonline/standards-sdk 0.1.106 → 0.1.108
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-10/base-client.d.ts +2 -2
- package/dist/cjs/hcs-10/base-client.d.ts.map +1 -1
- package/dist/cjs/hcs-10/sdk.d.ts +3 -2
- package/dist/cjs/hcs-10/sdk.d.ts.map +1 -1
- package/dist/cjs/hcs-10/tx.d.ts +1 -0
- package/dist/cjs/hcs-10/tx.d.ts.map +1 -1
- package/dist/cjs/hcs-11/client.d.ts +26 -26
- package/dist/cjs/hcs-12/validation/schemas.d.ts +10 -10
- package/dist/cjs/hcs-14/types.d.ts +2 -2
- package/dist/cjs/hcs-20/points-indexer.d.ts.map +1 -1
- package/dist/cjs/hcs-20/sdk.d.ts.map +1 -1
- package/dist/cjs/hcs-20/types.d.ts +5 -1
- package/dist/cjs/hcs-20/types.d.ts.map +1 -1
- package/dist/cjs/services/types.d.ts +2 -0
- package/dist/cjs/services/types.d.ts.map +1 -1
- package/dist/cjs/standards-sdk.cjs +16 -16
- package/dist/cjs/standards-sdk.cjs.map +1 -1
- package/dist/cjs/utils/logger.d.ts +7 -2
- package/dist/cjs/utils/logger.d.ts.map +1 -1
- package/dist/es/hcs-10/base-client.d.ts +2 -2
- package/dist/es/hcs-10/base-client.d.ts.map +1 -1
- package/dist/es/hcs-10/sdk.d.ts +3 -2
- package/dist/es/hcs-10/sdk.d.ts.map +1 -1
- package/dist/es/hcs-10/tx.d.ts +1 -0
- package/dist/es/hcs-10/tx.d.ts.map +1 -1
- package/dist/es/hcs-11/client.d.ts +26 -26
- package/dist/es/hcs-12/validation/schemas.d.ts +10 -10
- package/dist/es/hcs-14/types.d.ts +2 -2
- package/dist/es/hcs-20/points-indexer.d.ts.map +1 -1
- package/dist/es/hcs-20/sdk.d.ts.map +1 -1
- package/dist/es/hcs-20/types.d.ts +5 -1
- package/dist/es/hcs-20/types.d.ts.map +1 -1
- package/dist/es/services/types.d.ts +2 -0
- package/dist/es/services/types.d.ts.map +1 -1
- package/dist/es/standards-sdk.es108.js +1 -1
- package/dist/es/standards-sdk.es109.js +1 -1
- package/dist/es/standards-sdk.es11.js +24 -25
- package/dist/es/standards-sdk.es11.js.map +1 -1
- package/dist/es/standards-sdk.es110.js +5 -5
- package/dist/es/standards-sdk.es112.js +1 -1
- package/dist/es/standards-sdk.es123.js +53 -201
- package/dist/es/standards-sdk.es123.js.map +1 -1
- package/dist/es/standards-sdk.es124.js +188 -156
- package/dist/es/standards-sdk.es124.js.map +1 -1
- package/dist/es/standards-sdk.es125.js +139 -289
- package/dist/es/standards-sdk.es125.js.map +1 -1
- package/dist/es/standards-sdk.es126.js +274 -298
- package/dist/es/standards-sdk.es126.js.map +1 -1
- package/dist/es/standards-sdk.es127.js +262 -369
- package/dist/es/standards-sdk.es127.js.map +1 -1
- package/dist/es/standards-sdk.es128.js +316 -194
- package/dist/es/standards-sdk.es128.js.map +1 -1
- package/dist/es/standards-sdk.es129.js +319 -64
- package/dist/es/standards-sdk.es129.js.map +1 -1
- package/dist/es/standards-sdk.es13.js +165 -81
- package/dist/es/standards-sdk.es13.js.map +1 -1
- package/dist/es/standards-sdk.es130.js +69 -49
- package/dist/es/standards-sdk.es130.js.map +1 -1
- package/dist/es/standards-sdk.es17.js +1 -0
- package/dist/es/standards-sdk.es17.js.map +1 -1
- package/dist/es/standards-sdk.es51.js +1 -1
- package/dist/es/standards-sdk.es53.js +1 -1
- package/dist/es/standards-sdk.es67.js.map +1 -1
- package/dist/es/standards-sdk.es71.js +57 -36
- package/dist/es/standards-sdk.es71.js.map +1 -1
- package/dist/es/standards-sdk.es72.js +30 -34
- package/dist/es/standards-sdk.es72.js.map +1 -1
- package/dist/es/standards-sdk.es93.js +44 -37
- package/dist/es/standards-sdk.es93.js.map +1 -1
- package/dist/es/standards-sdk.es98.js +5 -5
- package/dist/es/utils/logger.d.ts +7 -2
- package/dist/es/utils/logger.d.ts.map +1 -1
- package/package.json +1 -3
|
@@ -1,59 +1,79 @@
|
|
|
1
|
-
|
|
2
|
-
|
|
3
|
-
|
|
4
|
-
|
|
5
|
-
|
|
6
|
-
|
|
7
|
-
|
|
8
|
-
|
|
9
|
-
|
|
10
|
-
|
|
11
|
-
|
|
12
|
-
|
|
13
|
-
|
|
14
|
-
|
|
15
|
-
|
|
16
|
-
|
|
17
|
-
|
|
18
|
-
|
|
19
|
-
|
|
1
|
+
import { proto } from "@hashgraph/proto";
|
|
2
|
+
import { ContractId } from "@hashgraph/sdk";
|
|
3
|
+
import { Buffer } from "buffer";
|
|
4
|
+
function parseKey(key) {
|
|
5
|
+
if (!key) {
|
|
6
|
+
return void 0;
|
|
7
|
+
}
|
|
8
|
+
if (key.contractID) {
|
|
9
|
+
return `ContractID: ${new ContractId(
|
|
10
|
+
key.contractID.shardNum ?? 0,
|
|
11
|
+
key.contractID.realmNum ?? 0,
|
|
12
|
+
key.contractID.contractNum ?? 0
|
|
13
|
+
).toString()}`;
|
|
14
|
+
}
|
|
15
|
+
if (key.ed25519) {
|
|
16
|
+
return `ED25519: ${Buffer.from(key.ed25519).toString("hex")}`;
|
|
17
|
+
}
|
|
18
|
+
if (key.ECDSASecp256k1) {
|
|
19
|
+
return `ECDSA_secp256k1: ${Buffer.from(key.ECDSASecp256k1).toString(
|
|
20
|
+
"hex"
|
|
21
|
+
)}`;
|
|
22
|
+
}
|
|
23
|
+
if (key?.keyList?.keys?.length > 0) {
|
|
24
|
+
const keys = key.keyList.keys.map((k) => parseKey(k)).filter(Boolean);
|
|
25
|
+
return `KeyList (${keys.length} keys): [${keys.join(", ")}]`;
|
|
20
26
|
}
|
|
21
|
-
|
|
22
|
-
|
|
23
|
-
|
|
24
|
-
|
|
27
|
+
if (key?.thresholdKey?.keys?.keys?.length > 0) {
|
|
28
|
+
const keys = key.thresholdKey.keys.keys.map((k) => parseKey(k)).filter(Boolean);
|
|
29
|
+
return `ThresholdKey (${key.thresholdKey.threshold} of ${keys.length}): [${keys.join(", ")}]`;
|
|
30
|
+
}
|
|
31
|
+
if (key.delegatableContractId) {
|
|
32
|
+
return `DelegatableContractID: ${new ContractId(
|
|
33
|
+
key.delegatableContractId.shardNum ?? 0,
|
|
34
|
+
key.delegatableContractId.realmNum ?? 0,
|
|
35
|
+
key.delegatableContractId.contractNum ?? 0
|
|
36
|
+
).toString()}`;
|
|
37
|
+
}
|
|
38
|
+
if (Object.keys(key).length === 0) {
|
|
39
|
+
return "Empty Key Structure";
|
|
40
|
+
}
|
|
41
|
+
return "Unknown or Unset Key Type";
|
|
25
42
|
}
|
|
26
|
-
function
|
|
27
|
-
|
|
28
|
-
|
|
29
|
-
|
|
30
|
-
|
|
31
|
-
|
|
32
|
-
const
|
|
33
|
-
|
|
34
|
-
|
|
35
|
-
|
|
36
|
-
|
|
37
|
-
|
|
38
|
-
|
|
39
|
-
carry = x >> 8;
|
|
43
|
+
function extractTransactionBody(transaction) {
|
|
44
|
+
try {
|
|
45
|
+
const bytes = transaction.toBytes ? transaction.toBytes() : void 0;
|
|
46
|
+
if (!bytes) {
|
|
47
|
+
return null;
|
|
48
|
+
}
|
|
49
|
+
const decoded = proto.TransactionList.decode(bytes);
|
|
50
|
+
if (!decoded.transactionList || decoded.transactionList.length === 0) {
|
|
51
|
+
return null;
|
|
52
|
+
}
|
|
53
|
+
const tx = decoded.transactionList[0];
|
|
54
|
+
if (tx.bodyBytes && tx.bodyBytes.length > 0) {
|
|
55
|
+
return proto.TransactionBody.decode(tx.bodyBytes);
|
|
40
56
|
}
|
|
41
|
-
|
|
42
|
-
|
|
43
|
-
|
|
57
|
+
if (tx.signedTransactionBytes && tx.signedTransactionBytes.length > 0) {
|
|
58
|
+
const signedTx = proto.SignedTransaction.decode(
|
|
59
|
+
tx.signedTransactionBytes
|
|
60
|
+
);
|
|
61
|
+
if (signedTx.bodyBytes) {
|
|
62
|
+
return proto.TransactionBody.decode(signedTx.bodyBytes);
|
|
63
|
+
}
|
|
44
64
|
}
|
|
65
|
+
return null;
|
|
66
|
+
} catch (error) {
|
|
67
|
+
return null;
|
|
45
68
|
}
|
|
46
|
-
for (let i = 0; i < zeros; i++) b256.push(0);
|
|
47
|
-
b256.reverse();
|
|
48
|
-
return Uint8Array.from(b256);
|
|
49
69
|
}
|
|
50
|
-
function
|
|
51
|
-
|
|
52
|
-
return
|
|
70
|
+
function hasTransactionType(transaction, transactionField) {
|
|
71
|
+
const txBody = extractTransactionBody(transaction);
|
|
72
|
+
return !!(txBody && txBody[transactionField]);
|
|
53
73
|
}
|
|
54
74
|
export {
|
|
55
|
-
|
|
56
|
-
|
|
57
|
-
|
|
75
|
+
extractTransactionBody,
|
|
76
|
+
hasTransactionType,
|
|
77
|
+
parseKey
|
|
58
78
|
};
|
|
59
79
|
//# sourceMappingURL=standards-sdk.es130.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"standards-sdk.es130.js","sources":["../../src/
|
|
1
|
+
{"version":3,"file":"standards-sdk.es130.js","sources":["../../src/utils/parsers/parser-utils.ts"],"sourcesContent":["import { proto } from '@hashgraph/proto';\nimport { ContractId, Transaction } from '@hashgraph/sdk';\nimport { Buffer } from 'buffer';\n\nexport function parseKey(\n key: proto.IKey | null | undefined,\n): string | undefined {\n if (!key) {\n return undefined;\n }\n\n if (key.contractID) {\n return `ContractID: ${new ContractId(\n key.contractID.shardNum ?? 0,\n key.contractID.realmNum ?? 0,\n key.contractID.contractNum ?? 0,\n ).toString()}`;\n }\n if (key.ed25519) {\n return `ED25519: ${Buffer.from(key.ed25519).toString('hex')}`;\n }\n if (key.ECDSASecp256k1) {\n return `ECDSA_secp256k1: ${Buffer.from(key.ECDSASecp256k1).toString(\n 'hex',\n )}`;\n }\n if (key?.keyList?.keys?.length > 0) {\n const keys = key.keyList.keys.map(k => parseKey(k)).filter(Boolean);\n return `KeyList (${keys.length} keys): [${keys.join(', ')}]`;\n }\n if (key?.thresholdKey?.keys?.keys?.length > 0) {\n const keys = key.thresholdKey.keys.keys\n .map(k => parseKey(k))\n .filter(Boolean);\n return `ThresholdKey (${key.thresholdKey.threshold} of ${\n keys.length\n }): [${keys.join(', ')}]`;\n }\n if (key.delegatableContractId) {\n return `DelegatableContractID: ${new ContractId(\n key.delegatableContractId.shardNum ?? 0,\n key.delegatableContractId.realmNum ?? 0,\n key.delegatableContractId.contractNum ?? 0,\n ).toString()}`;\n }\n if (Object.keys(key).length === 0) {\n return 'Empty Key Structure';\n }\n\n return 'Unknown or Unset Key Type';\n}\n\n/**\n * Extract TransactionBody from Transaction object using protobuf parsing\n * This replaces fragile constructor name checking with reliable protobuf data\n */\nexport function extractTransactionBody(\n transaction: Transaction,\n): proto.ITransactionBody | null {\n try {\n const bytes = transaction.toBytes ? transaction.toBytes() : undefined;\n if (!bytes) {\n return null;\n }\n\n const decoded = proto.TransactionList.decode(bytes);\n if (!decoded.transactionList || decoded.transactionList.length === 0) {\n return null;\n }\n\n const tx = decoded.transactionList[0];\n\n if (tx.bodyBytes && tx.bodyBytes.length > 0) {\n return proto.TransactionBody.decode(tx.bodyBytes);\n }\n\n if (tx.signedTransactionBytes && tx.signedTransactionBytes.length > 0) {\n const signedTx = proto.SignedTransaction.decode(\n tx.signedTransactionBytes,\n );\n if (signedTx.bodyBytes) {\n return proto.TransactionBody.decode(signedTx.bodyBytes);\n }\n }\n\n return null;\n } catch (error) {\n return null;\n }\n}\n\n/**\n * Check if transaction has specific transaction type using protobuf data\n * This replaces constructor name checking with reliable protobuf field detection\n */\nexport function hasTransactionType(\n transaction: Transaction,\n transactionField: keyof proto.ITransactionBody,\n): boolean {\n const txBody = extractTransactionBody(transaction);\n return !!(txBody && txBody[transactionField]);\n}\n"],"names":[],"mappings":";;;AAIO,SAAS,SACd,KACoB;AACpB,MAAI,CAAC,KAAK;AACR,WAAO;AAAA,EACT;AAEA,MAAI,IAAI,YAAY;AAClB,WAAO,eAAe,IAAI;AAAA,MACxB,IAAI,WAAW,YAAY;AAAA,MAC3B,IAAI,WAAW,YAAY;AAAA,MAC3B,IAAI,WAAW,eAAe;AAAA,IAAA,EAC9B,UAAU;AAAA,EACd;AACA,MAAI,IAAI,SAAS;AACf,WAAO,YAAY,OAAO,KAAK,IAAI,OAAO,EAAE,SAAS,KAAK,CAAC;AAAA,EAC7D;AACA,MAAI,IAAI,gBAAgB;AACtB,WAAO,oBAAoB,OAAO,KAAK,IAAI,cAAc,EAAE;AAAA,MACzD;AAAA,IAAA,CACD;AAAA,EACH;AACA,MAAI,KAAK,SAAS,MAAM,SAAS,GAAG;AAClC,UAAM,OAAO,IAAI,QAAQ,KAAK,IAAI,CAAA,MAAK,SAAS,CAAC,CAAC,EAAE,OAAO,OAAO;AAClE,WAAO,YAAY,KAAK,MAAM,YAAY,KAAK,KAAK,IAAI,CAAC;AAAA,EAC3D;AACA,MAAI,KAAK,cAAc,MAAM,MAAM,SAAS,GAAG;AAC7C,UAAM,OAAO,IAAI,aAAa,KAAK,KAChC,IAAI,CAAA,MAAK,SAAS,CAAC,CAAC,EACpB,OAAO,OAAO;AACjB,WAAO,iBAAiB,IAAI,aAAa,SAAS,OAChD,KAAK,MACP,OAAO,KAAK,KAAK,IAAI,CAAC;AAAA,EACxB;AACA,MAAI,IAAI,uBAAuB;AAC7B,WAAO,0BAA0B,IAAI;AAAA,MACnC,IAAI,sBAAsB,YAAY;AAAA,MACtC,IAAI,sBAAsB,YAAY;AAAA,MACtC,IAAI,sBAAsB,eAAe;AAAA,IAAA,EACzC,UAAU;AAAA,EACd;AACA,MAAI,OAAO,KAAK,GAAG,EAAE,WAAW,GAAG;AACjC,WAAO;AAAA,EACT;AAEA,SAAO;AACT;AAMO,SAAS,uBACd,aAC+B;AAC/B,MAAI;AACF,UAAM,QAAQ,YAAY,UAAU,YAAY,YAAY;AAC5D,QAAI,CAAC,OAAO;AACV,aAAO;AAAA,IACT;AAEA,UAAM,UAAU,MAAM,gBAAgB,OAAO,KAAK;AAClD,QAAI,CAAC,QAAQ,mBAAmB,QAAQ,gBAAgB,WAAW,GAAG;AACpE,aAAO;AAAA,IACT;AAEA,UAAM,KAAK,QAAQ,gBAAgB,CAAC;AAEpC,QAAI,GAAG,aAAa,GAAG,UAAU,SAAS,GAAG;AAC3C,aAAO,MAAM,gBAAgB,OAAO,GAAG,SAAS;AAAA,IAClD;AAEA,QAAI,GAAG,0BAA0B,GAAG,uBAAuB,SAAS,GAAG;AACrE,YAAM,WAAW,MAAM,kBAAkB;AAAA,QACvC,GAAG;AAAA,MAAA;AAEL,UAAI,SAAS,WAAW;AACtB,eAAO,MAAM,gBAAgB,OAAO,SAAS,SAAS;AAAA,MACxD;AAAA,IACF;AAEA,WAAO;AAAA,EACT,SAAS,OAAO;AACd,WAAO;AAAA,EACT;AACF;AAMO,SAAS,mBACd,aACA,kBACS;AACT,QAAM,SAAS,uBAAuB,WAAW;AACjD,SAAO,CAAC,EAAE,UAAU,OAAO,gBAAgB;AAC7C;"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"standards-sdk.es17.js","sources":["../../src/hcs-10/tx.ts"],"sourcesContent":["import {\n TopicCreateTransaction,\n TopicMessageSubmitTransaction,\n KeyList,\n} from '@hashgraph/sdk';\nimport {\n buildTopicCreateTx,\n buildMessageTx,\n MaybeKey,\n} from '../common/tx/tx-utils';\n\nfunction memoInbound(ttl: number, accountId: string): string {\n return `hcs-10:0:${ttl}:0:${accountId}`;\n}\nfunction memoOutbound(ttl: number): string {\n return `hcs-10:0:${ttl}:1`;\n}\nfunction memoConnection(\n ttl: number,\n inboundTopicId: string,\n connectionId: number | string,\n): string {\n return `hcs-10:1:${ttl}:2:${inboundTopicId}:${connectionId}`;\n}\nfunction memoRegistry(ttl: number, metadataTopicId?: string): string {\n return metadataTopicId\n ? `hcs-10:0:${ttl}:3:${metadataTopicId}`\n : `hcs-10:0:${ttl}:3`;\n}\nfunction analyticsMemo(opEnum: number, topicTypeEnum: number): string {\n return `hcs-10:op:${opEnum}:${topicTypeEnum}`;\n}\n\nexport function buildHcs10CreateInboundTopicTx(params: {\n accountId: string;\n ttl: number;\n adminKey?: MaybeKey;\n submitKey?: MaybeKey;\n memoOverride?: string;\n operatorPublicKey?: Parameters<\n typeof buildTopicCreateTx\n >[0]['operatorPublicKey'];\n}): TopicCreateTransaction {\n const memo = params.memoOverride ?? memoInbound(params.ttl, params.accountId);\n return buildTopicCreateTx({\n memo,\n adminKey: params.adminKey,\n submitKey: params.submitKey,\n operatorPublicKey: params.operatorPublicKey,\n });\n}\n\nexport function buildHcs10CreateOutboundTopicTx(params: {\n ttl: number;\n submitKey?: MaybeKey;\n adminKey?: MaybeKey;\n memoOverride?: string;\n operatorPublicKey?: Parameters<\n typeof buildTopicCreateTx\n >[0]['operatorPublicKey'];\n}): TopicCreateTransaction {\n const memo = params.memoOverride ?? memoOutbound(params.ttl);\n return buildTopicCreateTx({\n memo,\n adminKey: params.adminKey,\n submitKey: params.submitKey,\n operatorPublicKey: params.operatorPublicKey,\n });\n}\n\nexport function buildHcs10CreateConnectionTopicTx(params: {\n ttl: number;\n inboundTopicId: string;\n connectionId: number | string;\n adminKey?: MaybeKey;\n submitKey?: MaybeKey;\n memoOverride?: string;\n operatorPublicKey?: Parameters<\n typeof buildTopicCreateTx\n >[0]['operatorPublicKey'];\n}): TopicCreateTransaction {\n const memo =\n params.memoOverride ??\n memoConnection(params.ttl, params.inboundTopicId, params.connectionId);\n return buildTopicCreateTx({\n memo,\n adminKey: params.adminKey,\n submitKey: params.submitKey,\n operatorPublicKey: params.operatorPublicKey,\n });\n}\n\nexport function buildHcs10CreateRegistryTopicTx(params: {\n ttl: number;\n metadataTopicId?: string;\n adminKey?: MaybeKey;\n submitKey?: MaybeKey;\n memoOverride?: string;\n operatorPublicKey?: Parameters<\n typeof buildTopicCreateTx\n >[0]['operatorPublicKey'];\n}): TopicCreateTransaction {\n const memo =\n params.memoOverride ?? memoRegistry(params.ttl, params.metadataTopicId);\n return buildTopicCreateTx({\n memo,\n adminKey: params.adminKey,\n submitKey: params.submitKey,\n operatorPublicKey: params.operatorPublicKey,\n });\n}\n\nexport function buildHcs10SubmitConnectionRequestTx(params: {\n inboundTopicId: string;\n operatorId: string; // format inboundTopicId@accountId or just accountId per upstream usage\n memo?: string;\n}): TopicMessageSubmitTransaction {\n const payload = {\n p: 'hcs-10',\n op: 'connection_request',\n operator_id: params.operatorId,\n m: params.memo,\n };\n return buildMessageTx({\n topicId: params.inboundTopicId,\n message: JSON.stringify(payload),\n transactionMemo: analyticsMemo(3, 1),\n });\n}\n\nexport function buildHcs10ConfirmConnectionTx(params: {\n inboundTopicId: string;\n connectionTopicId: string;\n connectedAccountId: string;\n operatorId: string; // inboundTopicId@accountId of confirmer\n connectionId: number;\n memo?: string;\n}): TopicMessageSubmitTransaction {\n const payload = {\n p: 'hcs-10',\n op: 'connection_created',\n connection_topic_id: params.connectionTopicId,\n connected_account_id: params.connectedAccountId,\n operator_id: params.operatorId,\n connection_id: params.connectionId,\n m: params.memo,\n };\n return buildMessageTx({\n topicId: params.inboundTopicId,\n message: JSON.stringify(payload),\n transactionMemo: analyticsMemo(4, 1),\n });\n}\n\nexport function buildHcs10OutboundConnectionRequestRecordTx(params: {\n outboundTopicId: string;\n operatorId: string; // target inboundTopicId@accountId as per spec text\n connectionRequestId: number;\n memo?: string;\n}): TopicMessageSubmitTransaction {\n const payload = {\n p: 'hcs-10',\n op: 'connection_request',\n operator_id: params.operatorId,\n outbound_topic_id: params.outboundTopicId,\n connection_request_id: params.connectionRequestId,\n m: params.memo,\n };\n return buildMessageTx({\n topicId: params.outboundTopicId,\n message: JSON.stringify(payload),\n transactionMemo: analyticsMemo(3, 2),\n });\n}\n\nexport function buildHcs10OutboundConnectionCreatedRecordTx(params: {\n outboundTopicId: string;\n requestorOutboundTopicId: string;\n connectionTopicId: string;\n confirmedRequestId: number;\n connectionRequestId: number;\n operatorId: string; // inboundTopicId@accountId of confirmer\n memo?: string;\n}): TopicMessageSubmitTransaction {\n const payload = {\n p: 'hcs-10',\n op: 'connection_created',\n connection_topic_id: params.connectionTopicId,\n outbound_topic_id: params.outboundTopicId,\n requestor_outbound_topic_id: params.requestorOutboundTopicId,\n confirmed_request_id: params.confirmedRequestId,\n connection_request_id: params.connectionRequestId,\n operator_id: params.operatorId,\n m: params.memo,\n };\n return buildMessageTx({\n topicId: params.outboundTopicId,\n message: JSON.stringify(payload),\n transactionMemo: analyticsMemo(4, 2),\n });\n}\n\nexport function buildHcs10SendMessageTx(params: {\n connectionTopicId: string;\n operatorId: string;\n data: string;\n memo?: string;\n}): TopicMessageSubmitTransaction {\n const payload = {\n p: 'hcs-10',\n op: 'message',\n operator_id: params.operatorId,\n data: params.data,\n m: params.memo,\n };\n return buildMessageTx({\n topicId: params.connectionTopicId,\n message: JSON.stringify(payload),\n transactionMemo: analyticsMemo(6, 3),\n });\n}\n\nexport function buildHcs10RegistryRegisterTx(params: {\n registryTopicId: string;\n accountId: string;\n memo?: string;\n}): TopicMessageSubmitTransaction {\n const payload = {\n p: 'hcs-10',\n op: 'register',\n account_id: params.accountId,\n m: params.memo,\n } as const;\n return buildMessageTx({\n topicId: params.registryTopicId,\n message: JSON.stringify(payload),\n transactionMemo: analyticsMemo(0, 0),\n });\n}\n\nexport function buildHcs10RegistryDeleteTx(params: {\n registryTopicId: string;\n uid: string;\n memo?: string;\n}): TopicMessageSubmitTransaction {\n const payload = {\n p: 'hcs-10',\n op: 'delete',\n uid: params.uid,\n m: params.memo,\n } as const;\n return buildMessageTx({\n topicId: params.registryTopicId,\n message: JSON.stringify(payload),\n transactionMemo: analyticsMemo(1, 0),\n });\n}\n\nexport function buildHcs10RegistryMigrateTx(params: {\n registryTopicId: string;\n targetTopicId: string;\n memo?: string;\n}): TopicMessageSubmitTransaction {\n const payload = {\n p: 'hcs-10',\n op: 'migrate',\n t_id: params.targetTopicId,\n m: params.memo,\n } as const;\n return buildMessageTx({\n topicId: params.registryTopicId,\n message: JSON.stringify(payload),\n transactionMemo: analyticsMemo(2, 0),\n });\n}\n"],"names":[],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"standards-sdk.es17.js","sources":["../../src/hcs-10/tx.ts"],"sourcesContent":["import {\n TopicCreateTransaction,\n TopicMessageSubmitTransaction,\n KeyList,\n} from '@hashgraph/sdk';\nimport {\n buildTopicCreateTx,\n buildMessageTx,\n MaybeKey,\n} from '../common/tx/tx-utils';\n\nfunction memoInbound(ttl: number, accountId: string): string {\n return `hcs-10:0:${ttl}:0:${accountId}`;\n}\nfunction memoOutbound(ttl: number): string {\n return `hcs-10:0:${ttl}:1`;\n}\nfunction memoConnection(\n ttl: number,\n inboundTopicId: string,\n connectionId: number | string,\n): string {\n return `hcs-10:1:${ttl}:2:${inboundTopicId}:${connectionId}`;\n}\nfunction memoRegistry(ttl: number, metadataTopicId?: string): string {\n return metadataTopicId\n ? `hcs-10:0:${ttl}:3:${metadataTopicId}`\n : `hcs-10:0:${ttl}:3`;\n}\nfunction analyticsMemo(opEnum: number, topicTypeEnum: number): string {\n return `hcs-10:op:${opEnum}:${topicTypeEnum}`;\n}\n\nexport function buildHcs10CreateInboundTopicTx(params: {\n accountId: string;\n ttl: number;\n adminKey?: MaybeKey;\n submitKey?: MaybeKey;\n memoOverride?: string;\n operatorPublicKey?: Parameters<\n typeof buildTopicCreateTx\n >[0]['operatorPublicKey'];\n}): TopicCreateTransaction {\n const memo = params.memoOverride ?? memoInbound(params.ttl, params.accountId);\n return buildTopicCreateTx({\n memo,\n adminKey: params.adminKey,\n submitKey: params.submitKey,\n operatorPublicKey: params.operatorPublicKey,\n });\n}\n\nexport function buildHcs10CreateOutboundTopicTx(params: {\n ttl: number;\n submitKey?: MaybeKey;\n adminKey?: MaybeKey;\n memoOverride?: string;\n operatorPublicKey?: Parameters<\n typeof buildTopicCreateTx\n >[0]['operatorPublicKey'];\n}): TopicCreateTransaction {\n const memo = params.memoOverride ?? memoOutbound(params.ttl);\n return buildTopicCreateTx({\n memo,\n adminKey: params.adminKey,\n submitKey: params.submitKey,\n operatorPublicKey: params.operatorPublicKey,\n });\n}\n\nexport function buildHcs10CreateConnectionTopicTx(params: {\n ttl: number;\n inboundTopicId: string;\n connectionId: number | string;\n adminKey?: MaybeKey;\n submitKey?: MaybeKey;\n memoOverride?: string;\n operatorPublicKey?: Parameters<\n typeof buildTopicCreateTx\n >[0]['operatorPublicKey'];\n}): TopicCreateTransaction {\n const memo =\n params.memoOverride ??\n memoConnection(params.ttl, params.inboundTopicId, params.connectionId);\n return buildTopicCreateTx({\n memo,\n adminKey: params.adminKey,\n submitKey: params.submitKey,\n operatorPublicKey: params.operatorPublicKey,\n });\n}\n\nexport function buildHcs10CreateRegistryTopicTx(params: {\n ttl: number;\n metadataTopicId?: string;\n adminKey?: MaybeKey;\n submitKey?: MaybeKey;\n memoOverride?: string;\n operatorPublicKey?: Parameters<\n typeof buildTopicCreateTx\n >[0]['operatorPublicKey'];\n}): TopicCreateTransaction {\n const memo =\n params.memoOverride ?? memoRegistry(params.ttl, params.metadataTopicId);\n return buildTopicCreateTx({\n memo,\n adminKey: params.adminKey,\n submitKey: params.submitKey,\n operatorPublicKey: params.operatorPublicKey,\n });\n}\n\nexport function buildHcs10SubmitConnectionRequestTx(params: {\n inboundTopicId: string;\n operatorId: string; // format inboundTopicId@accountId or just accountId per upstream usage\n memo?: string;\n}): TopicMessageSubmitTransaction {\n const payload = {\n p: 'hcs-10',\n op: 'connection_request',\n operator_id: params.operatorId,\n m: params.memo,\n };\n return buildMessageTx({\n topicId: params.inboundTopicId,\n message: JSON.stringify(payload),\n transactionMemo: analyticsMemo(3, 1),\n });\n}\n\nexport function buildHcs10ConfirmConnectionTx(params: {\n inboundTopicId: string;\n connectionTopicId: string;\n connectedAccountId: string;\n operatorId: string; // inboundTopicId@accountId of confirmer\n connectionId: number;\n memo?: string;\n}): TopicMessageSubmitTransaction {\n const payload = {\n p: 'hcs-10',\n op: 'connection_created',\n connection_topic_id: params.connectionTopicId,\n connected_account_id: params.connectedAccountId,\n operator_id: params.operatorId,\n connection_id: params.connectionId,\n m: params.memo,\n };\n return buildMessageTx({\n topicId: params.inboundTopicId,\n message: JSON.stringify(payload),\n transactionMemo: analyticsMemo(4, 1),\n });\n}\n\nexport function buildHcs10OutboundConnectionRequestRecordTx(params: {\n outboundTopicId: string;\n operatorId: string; // target inboundTopicId@accountId as per spec text\n connectionRequestId: number;\n memo?: string;\n}): TopicMessageSubmitTransaction {\n const payload = {\n p: 'hcs-10',\n op: 'connection_request',\n operator_id: params.operatorId,\n outbound_topic_id: params.outboundTopicId,\n connection_request_id: params.connectionRequestId,\n m: params.memo,\n };\n return buildMessageTx({\n topicId: params.outboundTopicId,\n message: JSON.stringify(payload),\n transactionMemo: analyticsMemo(3, 2),\n });\n}\n\nexport function buildHcs10OutboundConnectionCreatedRecordTx(params: {\n outboundTopicId: string;\n requestorOutboundTopicId: string;\n connectionTopicId: string;\n confirmedRequestId: number;\n connectionRequestId: number;\n operatorId: string; // inboundTopicId@accountId of confirmer\n memo?: string;\n}): TopicMessageSubmitTransaction {\n const payload = {\n p: 'hcs-10',\n op: 'connection_created',\n connection_topic_id: params.connectionTopicId,\n outbound_topic_id: params.outboundTopicId,\n requestor_outbound_topic_id: params.requestorOutboundTopicId,\n confirmed_request_id: params.confirmedRequestId,\n connection_request_id: params.connectionRequestId,\n operator_id: params.operatorId,\n m: params.memo,\n };\n return buildMessageTx({\n topicId: params.outboundTopicId,\n message: JSON.stringify(payload),\n transactionMemo: analyticsMemo(4, 2),\n });\n}\n\nexport function buildHcs10SendMessageTx(params: {\n connectionTopicId: string;\n operatorId: string;\n data: string;\n memo?: string;\n}): TopicMessageSubmitTransaction {\n const payload = {\n p: 'hcs-10',\n op: 'message',\n operator_id: params.operatorId,\n data: params.data,\n m: params.memo,\n };\n return buildMessageTx({\n topicId: params.connectionTopicId,\n message: JSON.stringify(payload),\n transactionMemo: analyticsMemo(6, 3),\n });\n}\n\nexport function buildHcs10RegistryRegisterTx(params: {\n registryTopicId: string;\n accountId: string;\n inboundTopicId?: string;\n memo?: string;\n}): TopicMessageSubmitTransaction {\n const payload = {\n p: 'hcs-10',\n op: 'register',\n account_id: params.accountId,\n ...(params.inboundTopicId\n ? { inbound_topic_id: params.inboundTopicId }\n : {}),\n m: params.memo,\n };\n return buildMessageTx({\n topicId: params.registryTopicId,\n message: JSON.stringify(payload),\n transactionMemo: analyticsMemo(0, 0),\n });\n}\n\nexport function buildHcs10RegistryDeleteTx(params: {\n registryTopicId: string;\n uid: string;\n memo?: string;\n}): TopicMessageSubmitTransaction {\n const payload = {\n p: 'hcs-10',\n op: 'delete',\n uid: params.uid,\n m: params.memo,\n } as const;\n return buildMessageTx({\n topicId: params.registryTopicId,\n message: JSON.stringify(payload),\n transactionMemo: analyticsMemo(1, 0),\n });\n}\n\nexport function buildHcs10RegistryMigrateTx(params: {\n registryTopicId: string;\n targetTopicId: string;\n memo?: string;\n}): TopicMessageSubmitTransaction {\n const payload = {\n p: 'hcs-10',\n op: 'migrate',\n t_id: params.targetTopicId,\n m: params.memo,\n } as const;\n return buildMessageTx({\n topicId: params.registryTopicId,\n message: JSON.stringify(payload),\n transactionMemo: analyticsMemo(2, 0),\n });\n}\n"],"names":[],"mappings":"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"}
|
|
@@ -1,5 +1,5 @@
|
|
|
1
1
|
import { getCryptoAdapter } from "./standards-sdk.es107.js";
|
|
2
|
-
import { base58Encode } from "./standards-sdk.
|
|
2
|
+
import { base58Encode } from "./standards-sdk.es123.js";
|
|
3
3
|
import { canonicalizeAgentData } from "./standards-sdk.es50.js";
|
|
4
4
|
function encodeMultibaseB58btc(input) {
|
|
5
5
|
const bytes = Buffer.from(input, "utf8");
|
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
import { HieroDidResolver } from "./standards-sdk.es54.js";
|
|
2
2
|
import { parseHcs14Did } from "./standards-sdk.es51.js";
|
|
3
|
-
import { multibaseB58btcDecode } from "./standards-sdk.
|
|
3
|
+
import { multibaseB58btcDecode } from "./standards-sdk.es123.js";
|
|
4
4
|
class ResolverRegistry {
|
|
5
5
|
constructor() {
|
|
6
6
|
this.resolvers = [];
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"standards-sdk.es67.js","sources":["../../src/hcs-20/types.ts"],"sourcesContent":["/**\n * HCS-20 Auditable Points Standard Types\n */\n\nimport { z } from 'zod';\nimport { AccountId, TopicId, PrivateKey } from '@hashgraph/sdk';\n\n/**\n * HCS-20 Constants\n */\nexport const HCS20_CONSTANTS = {\n PROTOCOL: 'hcs-20',\n PUBLIC_TOPIC_ID: '0.0.4350190',\n REGISTRY_TOPIC_ID: '0.0.4362300',\n MAX_NUMBER_LENGTH: 18,\n MAX_NAME_LENGTH: 100,\n MAX_METADATA_LENGTH: 100,\n HEDERA_ACCOUNT_REGEX:\n /^(0|(?:[1-9]\\d*))\\.(0|(?:[1-9]\\d*))\\.(0|(?:[1-9]\\d*))$/,\n} as const;\n\n/**\n * Hedera Account ID validator\n */\nconst HederaAccountIdSchema = z\n .string()\n .regex(\n HCS20_CONSTANTS.HEDERA_ACCOUNT_REGEX,\n 'Invalid Hedera account ID format',\n );\n\n/**\n * Number string validator\n */\nconst NumberStringSchema = z\n .string()\n .regex(/^\\d+$/, 'Must be a valid number')\n .max(\n HCS20_CONSTANTS.MAX_NUMBER_LENGTH,\n `Max ${HCS20_CONSTANTS.MAX_NUMBER_LENGTH} digits`,\n );\n\n/**\n * Tick validator\n */\nconst TickSchema = z\n .string()\n .min(1, 'Tick cannot be empty')\n .transform(val => val.toLowerCase().trim());\n\n/**\n * Base HCS-20 Message Schema\n */\nconst HCS20BaseMessageSchema = z.object({\n p: z.literal('hcs-20'),\n m: z.string().optional(),\n});\n\n/**\n * Deploy Points Operation Schema\n */\nexport const HCS20DeployMessageSchema = HCS20BaseMessageSchema.extend({\n op: z.literal('deploy'),\n name: z.string().min(1).max(HCS20_CONSTANTS.MAX_NAME_LENGTH),\n tick: TickSchema,\n max: NumberStringSchema,\n lim: NumberStringSchema.optional(),\n metadata: z.string().max(HCS20_CONSTANTS.MAX_METADATA_LENGTH).optional(),\n});\n\n/**\n * Mint Points Operation Schema\n */\nexport const HCS20MintMessageSchema = HCS20BaseMessageSchema.extend({\n op: z.literal('mint'),\n tick: TickSchema,\n amt: NumberStringSchema,\n to: HederaAccountIdSchema,\n});\n\n/**\n * Burn Points Operation Schema\n */\nexport const HCS20BurnMessageSchema = HCS20BaseMessageSchema.extend({\n op: z.literal('burn'),\n tick: TickSchema,\n amt: NumberStringSchema,\n from: HederaAccountIdSchema,\n});\n\n/**\n * Transfer Points Operation Schema\n */\nexport const HCS20TransferMessageSchema = HCS20BaseMessageSchema.extend({\n op: z.literal('transfer'),\n tick: TickSchema,\n amt: NumberStringSchema,\n from: HederaAccountIdSchema,\n to: HederaAccountIdSchema,\n});\n\n/**\n * Register Topic Operation Schema\n */\nexport const HCS20RegisterMessageSchema = HCS20BaseMessageSchema.extend({\n op: z.literal('register'),\n name: z.string().min(1).max(HCS20_CONSTANTS.MAX_NAME_LENGTH),\n metadata: z.string().max(HCS20_CONSTANTS.MAX_METADATA_LENGTH).optional(),\n private: z.boolean(),\n t_id: HederaAccountIdSchema,\n});\n\n/**\n * Union schema for all HCS-20 messages\n */\nexport const HCS20MessageSchema = z.discriminatedUnion('op', [\n HCS20DeployMessageSchema,\n HCS20MintMessageSchema,\n HCS20BurnMessageSchema,\n HCS20TransferMessageSchema,\n HCS20RegisterMessageSchema,\n]);\n\n/**\n * Inferred types from schemas\n */\nexport type HCS20BaseMessage = z.infer<typeof HCS20BaseMessageSchema>;\nexport type HCS20DeployMessage = z.infer<typeof HCS20DeployMessageSchema>;\nexport type HCS20MintMessage = z.infer<typeof HCS20MintMessageSchema>;\nexport type HCS20BurnMessage = z.infer<typeof HCS20BurnMessageSchema>;\nexport type HCS20TransferMessage = z.infer<typeof HCS20TransferMessageSchema>;\nexport type HCS20RegisterMessage = z.infer<typeof HCS20RegisterMessageSchema>;\nexport type HCS20Message = z.infer<typeof HCS20MessageSchema>;\nexport type HCS20Operation = HCS20Message['op'];\n\n/**\n * Points Configuration\n */\nexport interface PointsConfig {\n name: string;\n tick: string;\n maxSupply: string;\n limitPerMint?: string;\n metadata?: string;\n}\n\n/**\n * Points Information\n */\nexport interface PointsInfo extends PointsConfig {\n topicId: string;\n deployerAccountId: string;\n currentSupply: string;\n deploymentTimestamp: string;\n isPrivate: boolean;\n}\n\n/**\n * Points Balance\n */\nexport interface PointsBalance {\n tick: string;\n accountId: string;\n balance: string;\n lastUpdated: string;\n}\n\n/**\n * Points Transaction\n */\nexport interface PointsTransaction {\n id: string;\n operation: HCS20Operation;\n tick: string;\n amount?: string;\n from?: string;\n to?: string;\n timestamp: string;\n sequenceNumber: number;\n topicId: string;\n transactionId: string;\n memo?: string;\n}\n\n/**\n * HCS-20 Client Configuration\n */\nexport interface HCS20ClientConfig {\n mirrorNodeUrl?: string;\n logger?: any;\n network?: 'mainnet' | 'testnet';\n registryTopicId?: string;\n publicTopicId?: string;\n}\n\n/**\n * Browser-specific HCS-20 Client Configuration\n */\nexport interface BrowserHCS20ClientConfig extends HCS20ClientConfig {\n walletConnectProjectId?: string;\n hwcMetadata?: {\n name: string;\n description: string;\n icons: string[];\n url: string;\n };\n}\n\n/**\n * SDK-specific HCS-20 Client Configuration\n */\nexport interface SDKHCS20ClientConfig extends HCS20ClientConfig {\n operatorId: string | AccountId;\n operatorKey: string | PrivateKey;\n keyType?: 'ed25519' | 'ecdsa';\n}\n\n/**\n * Deploy Points Progress\n */\nexport interface DeployPointsProgress {\n stage: 'creating-topic' | 'submitting-deploy' | 'confirming' | 'complete';\n percentage: number;\n topicId?: string;\n deployTxId?: string;\n error?: string;\n}\n\n/**\n * Deploy Points Options\n */\nexport interface DeployPointsOptions extends PointsConfig {\n usePrivateTopic?: boolean;\n topicMemo?: string;\n progressCallback?: (data: DeployPointsProgress) => void;\n}\n\n/**\n * Mint Points Progress\n */\nexport interface MintPointsProgress {\n stage: 'validating' | 'submitting' | 'confirming' | 'complete';\n percentage: number;\n mintTxId?: string;\n error?: string;\n}\n\n/**\n * Mint Points Options\n */\nexport interface MintPointsOptions {\n tick: string;\n amount: string;\n to: string | AccountId;\n memo?: string;\n progressCallback?: (data: MintPointsProgress) => void;\n}\n\n/**\n * Transfer Points Progress\n */\nexport interface TransferPointsProgress {\n stage: 'validating-balance' | 'submitting' | 'confirming' | 'complete';\n percentage: number;\n transferTxId?: string;\n error?: string;\n}\n\n/**\n * Transfer Points Options\n */\nexport interface TransferPointsOptions {\n tick: string;\n amount: string;\n from: string | AccountId;\n to: string | AccountId;\n memo?: string;\n progressCallback?: (data: TransferPointsProgress) => void;\n}\n\n/**\n * Burn Points Progress\n */\nexport interface BurnPointsProgress {\n stage: 'validating-balance' | 'submitting' | 'confirming' | 'complete';\n percentage: number;\n burnTxId?: string;\n error?: string;\n}\n\n/**\n * Burn Points Options\n */\nexport interface BurnPointsOptions {\n tick: string;\n amount: string;\n from: string | AccountId;\n memo?: string;\n progressCallback?: (data: BurnPointsProgress) => void;\n}\n\n/**\n * Register Topic Progress\n */\nexport interface RegisterTopicProgress {\n stage: 'validating' | 'submitting' | 'confirming' | 'complete';\n percentage: number;\n registerTxId?: string;\n error?: string;\n}\n\n/**\n * Register Topic Options\n */\nexport interface RegisterTopicOptions {\n topicId: string | TopicId;\n name: string;\n metadata?: string;\n isPrivate: boolean;\n memo?: string;\n progressCallback?: (data: RegisterTopicProgress) => void;\n}\n\n/**\n * Query Points Options\n */\nexport interface QueryPointsOptions {\n tick?: string;\n accountId?: string | AccountId;\n topicId?: string | TopicId;\n limit?: number;\n order?: 'asc' | 'desc';\n}\n\n/**\n * Points Query Result\n */\nexport interface PointsQueryResult {\n points: PointsInfo[];\n balances?: PointsBalance[];\n transactions?: PointsTransaction[];\n totalCount: number;\n hasMore: boolean;\n nextCursor?: string;\n}\n\n/**\n * Points State\n */\nexport interface PointsState {\n deployedPoints: Map<string, PointsInfo>;\n balances: Map<string, Map<string, PointsBalance>>;\n transactions: PointsTransaction[];\n lastProcessedSequence: number;\n lastProcessedTimestamp: string;\n}\n\n/**\n * HCS-20 Registry Entry\n */\nexport interface HCS20RegistryEntry {\n name: string;\n topicId: string;\n metadata?: string;\n isPrivate: boolean;\n registeredAt: string;\n registeredBy: string;\n}\n"],"names":[],"mappings":";AAUO,MAAM,kBAAkB;AAAA,EAC7B,UAAU;AAAA,EACV,iBAAiB;AAAA,EACjB,mBAAmB;AAAA,EACnB,mBAAmB;AAAA,EACnB,iBAAiB;AAAA,EACjB,qBAAqB;AAAA,EACrB,sBACE;AACJ;AAKA,MAAM,wBAAwB,EAC3B,OAAA,EACA;AAAA,EACC,gBAAgB;AAAA,EAChB;AACF;AAKF,MAAM,qBAAqB,EACxB,OAAA,EACA,MAAM,SAAS,wBAAwB,EACvC;AAAA,EACC,gBAAgB;AAAA,EAChB,OAAO,gBAAgB,iBAAiB;AAC1C;AAKF,MAAM,aAAa,EAChB,OAAA,EACA,IAAI,GAAG,sBAAsB,EAC7B,UAAU,CAAA,QAAO,IAAI,YAAA,EAAc,MAAM;AAK5C,MAAM,yBAAyB,EAAE,OAAO;AAAA,EACtC,GAAG,EAAE,QAAQ,QAAQ;AAAA,EACrB,GAAG,EAAE,OAAA,EAAS,SAAA;AAChB,CAAC;AAKM,MAAM,2BAA2B,uBAAuB,OAAO;AAAA,EACpE,IAAI,EAAE,QAAQ,QAAQ;AAAA,EACtB,MAAM,EAAE,SAAS,IAAI,CAAC,EAAE,IAAI,gBAAgB,eAAe;AAAA,EAC3D,MAAM;AAAA,EACN,KAAK;AAAA,EACL,KAAK,mBAAmB,SAAA;AAAA,EACxB,UAAU,EAAE,OAAA,EAAS,IAAI,gBAAgB,mBAAmB,EAAE,SAAA;AAChE,CAAC;AAKM,MAAM,yBAAyB,uBAAuB,OAAO;AAAA,EAClE,IAAI,EAAE,QAAQ,MAAM;AAAA,EACpB,MAAM;AAAA,EACN,KAAK;AAAA,EACL,IAAI;AACN,CAAC;AAKM,MAAM,yBAAyB,uBAAuB,OAAO;AAAA,EAClE,IAAI,EAAE,QAAQ,MAAM;AAAA,EACpB,MAAM;AAAA,EACN,KAAK;AAAA,EACL,MAAM;AACR,CAAC;AAKM,MAAM,6BAA6B,uBAAuB,OAAO;AAAA,EACtE,IAAI,EAAE,QAAQ,UAAU;AAAA,EACxB,MAAM;AAAA,EACN,KAAK;AAAA,EACL,MAAM;AAAA,EACN,IAAI;AACN,CAAC;AAKM,MAAM,6BAA6B,uBAAuB,OAAO;AAAA,EACtE,IAAI,EAAE,QAAQ,UAAU;AAAA,EACxB,MAAM,EAAE,SAAS,IAAI,CAAC,EAAE,IAAI,gBAAgB,eAAe;AAAA,EAC3D,UAAU,EAAE,OAAA,EAAS,IAAI,gBAAgB,mBAAmB,EAAE,SAAA;AAAA,EAC9D,SAAS,EAAE,QAAA;AAAA,EACX,MAAM;AACR,CAAC;AAKM,MAAM,qBAAqB,EAAE,mBAAmB,MAAM;AAAA,EAC3D;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AACF,CAAC;"}
|
|
1
|
+
{"version":3,"file":"standards-sdk.es67.js","sources":["../../src/hcs-20/types.ts"],"sourcesContent":["/**\n * HCS-20 Auditable Points Standard Types\n */\n\nimport { z } from 'zod';\nimport { AccountId, TopicId, PrivateKey } from '@hashgraph/sdk';\nimport type { ILogger } from '../utils/logger';\n\n/**\n * HCS-20 Constants\n */\nexport const HCS20_CONSTANTS = {\n PROTOCOL: 'hcs-20',\n PUBLIC_TOPIC_ID: '0.0.4350190',\n REGISTRY_TOPIC_ID: '0.0.4362300',\n MAX_NUMBER_LENGTH: 18,\n MAX_NAME_LENGTH: 100,\n MAX_METADATA_LENGTH: 100,\n HEDERA_ACCOUNT_REGEX:\n /^(0|(?:[1-9]\\d*))\\.(0|(?:[1-9]\\d*))\\.(0|(?:[1-9]\\d*))$/,\n} as const;\n\n/**\n * Hedera Account ID validator\n */\nconst HederaAccountIdSchema = z\n .string()\n .regex(\n HCS20_CONSTANTS.HEDERA_ACCOUNT_REGEX,\n 'Invalid Hedera account ID format',\n );\n\n/**\n * Number string validator\n */\nconst NumberStringSchema = z\n .string()\n .regex(/^\\d+$/, 'Must be a valid number')\n .max(\n HCS20_CONSTANTS.MAX_NUMBER_LENGTH,\n `Max ${HCS20_CONSTANTS.MAX_NUMBER_LENGTH} digits`,\n );\n\n/**\n * Tick validator\n */\nconst TickSchema = z\n .string()\n .min(1, 'Tick cannot be empty')\n .transform(val => val.toLowerCase().trim());\n\n/**\n * Base HCS-20 Message Schema\n */\nconst HCS20BaseMessageSchema = z.object({\n p: z.literal('hcs-20'),\n m: z.string().optional(),\n});\n\n/**\n * Deploy Points Operation Schema\n */\nexport const HCS20DeployMessageSchema = HCS20BaseMessageSchema.extend({\n op: z.literal('deploy'),\n name: z.string().min(1).max(HCS20_CONSTANTS.MAX_NAME_LENGTH),\n tick: TickSchema,\n max: NumberStringSchema,\n lim: NumberStringSchema.optional(),\n metadata: z.string().max(HCS20_CONSTANTS.MAX_METADATA_LENGTH).optional(),\n});\n\n/**\n * Mint Points Operation Schema\n */\nexport const HCS20MintMessageSchema = HCS20BaseMessageSchema.extend({\n op: z.literal('mint'),\n tick: TickSchema,\n amt: NumberStringSchema,\n to: HederaAccountIdSchema,\n});\n\n/**\n * Burn Points Operation Schema\n */\nexport const HCS20BurnMessageSchema = HCS20BaseMessageSchema.extend({\n op: z.literal('burn'),\n tick: TickSchema,\n amt: NumberStringSchema,\n from: HederaAccountIdSchema,\n});\n\n/**\n * Transfer Points Operation Schema\n */\nexport const HCS20TransferMessageSchema = HCS20BaseMessageSchema.extend({\n op: z.literal('transfer'),\n tick: TickSchema,\n amt: NumberStringSchema,\n from: HederaAccountIdSchema,\n to: HederaAccountIdSchema,\n});\n\n/**\n * Register Topic Operation Schema\n */\nexport const HCS20RegisterMessageSchema = HCS20BaseMessageSchema.extend({\n op: z.literal('register'),\n name: z.string().min(1).max(HCS20_CONSTANTS.MAX_NAME_LENGTH),\n metadata: z.string().max(HCS20_CONSTANTS.MAX_METADATA_LENGTH).optional(),\n private: z.boolean(),\n t_id: HederaAccountIdSchema,\n});\n\n/**\n * Union schema for all HCS-20 messages\n */\nexport const HCS20MessageSchema = z.discriminatedUnion('op', [\n HCS20DeployMessageSchema,\n HCS20MintMessageSchema,\n HCS20BurnMessageSchema,\n HCS20TransferMessageSchema,\n HCS20RegisterMessageSchema,\n]);\n\n/**\n * Inferred types from schemas\n */\nexport type HCS20BaseMessage = z.infer<typeof HCS20BaseMessageSchema>;\nexport type HCS20DeployMessage = z.infer<typeof HCS20DeployMessageSchema>;\nexport type HCS20MintMessage = z.infer<typeof HCS20MintMessageSchema>;\nexport type HCS20BurnMessage = z.infer<typeof HCS20BurnMessageSchema>;\nexport type HCS20TransferMessage = z.infer<typeof HCS20TransferMessageSchema>;\nexport type HCS20RegisterMessage = z.infer<typeof HCS20RegisterMessageSchema>;\nexport type HCS20Message = z.infer<typeof HCS20MessageSchema>;\nexport type HCS20Operation = HCS20Message['op'];\n\n/**\n * Points Configuration\n */\nexport interface PointsConfig {\n name: string;\n tick: string;\n maxSupply: string;\n limitPerMint?: string;\n metadata?: string;\n}\n\n/**\n * Points Information\n */\nexport interface PointsInfo extends PointsConfig {\n topicId: string;\n deployerAccountId: string;\n currentSupply: string;\n deploymentTimestamp: string;\n isPrivate: boolean;\n}\n\n/**\n * Points Balance\n */\nexport interface PointsBalance {\n tick: string;\n accountId: string;\n balance: string;\n lastUpdated: string;\n}\n\n/**\n * Points Transaction\n */\nexport interface PointsTransaction {\n id: string;\n operation: HCS20Operation;\n tick: string;\n amount?: string;\n from?: string;\n to?: string;\n timestamp: string;\n sequenceNumber: number;\n topicId: string;\n transactionId: string;\n memo?: string;\n}\n\n/**\n * HCS-20 Client Configuration\n */\nexport interface HCS20ClientConfig {\n mirrorNodeUrl?: string;\n logger?: ILogger;\n network?: 'mainnet' | 'testnet';\n registryTopicId?: string;\n publicTopicId?: string;\n}\n\n/**\n * Browser-specific HCS-20 Client Configuration\n */\nexport interface BrowserHCS20ClientConfig extends HCS20ClientConfig {\n walletConnectProjectId?: string;\n hwcMetadata?: {\n name: string;\n description: string;\n icons: string[];\n url: string;\n };\n}\n\n/**\n * SDK-specific HCS-20 Client Configuration\n */\nexport interface SDKHCS20ClientConfig extends HCS20ClientConfig {\n operatorId: string | AccountId;\n operatorKey: string | PrivateKey;\n keyType?: 'ed25519' | 'ecdsa';\n}\n\n/**\n * Deploy Points Progress\n */\nexport interface DeployPointsProgress {\n stage: 'creating-topic' | 'submitting-deploy' | 'confirming' | 'complete';\n percentage: number;\n topicId?: string;\n deployTxId?: string;\n error?: string;\n}\n\n/**\n * Deploy Points Options\n */\nexport interface DeployPointsOptions extends PointsConfig {\n usePrivateTopic?: boolean;\n topicMemo?: string;\n progressCallback?: (data: DeployPointsProgress) => void;\n}\n\n/**\n * Mint Points Progress\n */\nexport interface MintPointsProgress {\n stage: 'validating' | 'submitting' | 'confirming' | 'complete';\n percentage: number;\n mintTxId?: string;\n error?: string;\n}\n\n/**\n * Mint Points Options\n */\nexport interface MintPointsOptions {\n tick: string;\n amount: string;\n to: string | AccountId;\n memo?: string;\n topicId?: string | TopicId;\n progressCallback?: (data: MintPointsProgress) => void;\n}\n\n/**\n * Transfer Points Progress\n */\nexport interface TransferPointsProgress {\n stage: 'validating-balance' | 'submitting' | 'confirming' | 'complete';\n percentage: number;\n transferTxId?: string;\n error?: string;\n}\n\n/**\n * Transfer Points Options\n */\nexport interface TransferPointsOptions {\n tick: string;\n amount: string;\n from: string | AccountId;\n to: string | AccountId;\n memo?: string;\n topicId?: string | TopicId;\n progressCallback?: (data: TransferPointsProgress) => void;\n}\n\n/**\n * Burn Points Progress\n */\nexport interface BurnPointsProgress {\n stage: 'validating-balance' | 'submitting' | 'confirming' | 'complete';\n percentage: number;\n burnTxId?: string;\n error?: string;\n}\n\n/**\n * Burn Points Options\n */\nexport interface BurnPointsOptions {\n tick: string;\n amount: string;\n from: string | AccountId;\n memo?: string;\n topicId?: string | TopicId;\n progressCallback?: (data: BurnPointsProgress) => void;\n}\n\n/**\n * Register Topic Progress\n */\nexport interface RegisterTopicProgress {\n stage: 'validating' | 'submitting' | 'confirming' | 'complete';\n percentage: number;\n registerTxId?: string;\n error?: string;\n}\n\n/**\n * Register Topic Options\n */\nexport interface RegisterTopicOptions {\n topicId: string | TopicId;\n name: string;\n metadata?: string;\n isPrivate: boolean;\n memo?: string;\n progressCallback?: (data: RegisterTopicProgress) => void;\n}\n\n/**\n * Query Points Options\n */\nexport interface QueryPointsOptions {\n tick?: string;\n accountId?: string | AccountId;\n topicId?: string | TopicId;\n limit?: number;\n order?: 'asc' | 'desc';\n}\n\n/**\n * Points Query Result\n */\nexport interface PointsQueryResult {\n points: PointsInfo[];\n balances?: PointsBalance[];\n transactions?: PointsTransaction[];\n totalCount: number;\n hasMore: boolean;\n nextCursor?: string;\n}\n\n/**\n * Points State\n */\nexport interface PointsState {\n deployedPoints: Map<string, PointsInfo>;\n balances: Map<string, Map<string, PointsBalance>>;\n transactions: PointsTransaction[];\n lastProcessedSequence: number;\n lastProcessedTimestamp: string;\n}\n\n/**\n * HCS-20 Registry Entry\n */\nexport interface HCS20RegistryEntry {\n name: string;\n topicId: string;\n metadata?: string;\n isPrivate: boolean;\n registeredAt: string;\n registeredBy: string;\n}\n"],"names":[],"mappings":";AAWO,MAAM,kBAAkB;AAAA,EAC7B,UAAU;AAAA,EACV,iBAAiB;AAAA,EACjB,mBAAmB;AAAA,EACnB,mBAAmB;AAAA,EACnB,iBAAiB;AAAA,EACjB,qBAAqB;AAAA,EACrB,sBACE;AACJ;AAKA,MAAM,wBAAwB,EAC3B,OAAA,EACA;AAAA,EACC,gBAAgB;AAAA,EAChB;AACF;AAKF,MAAM,qBAAqB,EACxB,OAAA,EACA,MAAM,SAAS,wBAAwB,EACvC;AAAA,EACC,gBAAgB;AAAA,EAChB,OAAO,gBAAgB,iBAAiB;AAC1C;AAKF,MAAM,aAAa,EAChB,OAAA,EACA,IAAI,GAAG,sBAAsB,EAC7B,UAAU,CAAA,QAAO,IAAI,YAAA,EAAc,MAAM;AAK5C,MAAM,yBAAyB,EAAE,OAAO;AAAA,EACtC,GAAG,EAAE,QAAQ,QAAQ;AAAA,EACrB,GAAG,EAAE,OAAA,EAAS,SAAA;AAChB,CAAC;AAKM,MAAM,2BAA2B,uBAAuB,OAAO;AAAA,EACpE,IAAI,EAAE,QAAQ,QAAQ;AAAA,EACtB,MAAM,EAAE,SAAS,IAAI,CAAC,EAAE,IAAI,gBAAgB,eAAe;AAAA,EAC3D,MAAM;AAAA,EACN,KAAK;AAAA,EACL,KAAK,mBAAmB,SAAA;AAAA,EACxB,UAAU,EAAE,OAAA,EAAS,IAAI,gBAAgB,mBAAmB,EAAE,SAAA;AAChE,CAAC;AAKM,MAAM,yBAAyB,uBAAuB,OAAO;AAAA,EAClE,IAAI,EAAE,QAAQ,MAAM;AAAA,EACpB,MAAM;AAAA,EACN,KAAK;AAAA,EACL,IAAI;AACN,CAAC;AAKM,MAAM,yBAAyB,uBAAuB,OAAO;AAAA,EAClE,IAAI,EAAE,QAAQ,MAAM;AAAA,EACpB,MAAM;AAAA,EACN,KAAK;AAAA,EACL,MAAM;AACR,CAAC;AAKM,MAAM,6BAA6B,uBAAuB,OAAO;AAAA,EACtE,IAAI,EAAE,QAAQ,UAAU;AAAA,EACxB,MAAM;AAAA,EACN,KAAK;AAAA,EACL,MAAM;AAAA,EACN,IAAI;AACN,CAAC;AAKM,MAAM,6BAA6B,uBAAuB,OAAO;AAAA,EACtE,IAAI,EAAE,QAAQ,UAAU;AAAA,EACxB,MAAM,EAAE,SAAS,IAAI,CAAC,EAAE,IAAI,gBAAgB,eAAe;AAAA,EAC3D,UAAU,EAAE,OAAA,EAAS,IAAI,gBAAgB,mBAAmB,EAAE,SAAA;AAAA,EAC9D,SAAS,EAAE,QAAA;AAAA,EACX,MAAM;AACR,CAAC;AAKM,MAAM,qBAAqB,EAAE,mBAAmB,MAAM;AAAA,EAC3D;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AACF,CAAC;"}
|
|
@@ -1,9 +1,10 @@
|
|
|
1
|
-
import { AccountId, Client,
|
|
1
|
+
import { AccountId, Client, Status, TopicCreateTransaction } from "@hashgraph/sdk";
|
|
2
2
|
import { HCS20BaseClient } from "./standards-sdk.es69.js";
|
|
3
3
|
import { PointsDeploymentError, PointsValidationError, PointsTransferError, PointsBurnError } from "./standards-sdk.es68.js";
|
|
4
4
|
import { sleep } from "./standards-sdk.es103.js";
|
|
5
5
|
import { createNodeOperatorContext } from "./standards-sdk.es119.js";
|
|
6
6
|
import { HCS2Client } from "./standards-sdk.es63.js";
|
|
7
|
+
import { buildHcs20DeployTx, buildHcs20MintTx, buildHcs20TransferTx, buildHcs20BurnTx, buildHcs20RegisterTx } from "./standards-sdk.es73.js";
|
|
7
8
|
class HCS20Client extends HCS20BaseClient {
|
|
8
9
|
constructor(config) {
|
|
9
10
|
super(config);
|
|
@@ -31,9 +32,7 @@ class HCS20Client extends HCS20BaseClient {
|
|
|
31
32
|
/**
|
|
32
33
|
* Submit a payload to a topic
|
|
33
34
|
*/
|
|
34
|
-
async submitPayload(
|
|
35
|
-
const message = typeof payload === "string" ? payload : JSON.stringify(payload);
|
|
36
|
-
const transaction = new TopicMessageSubmitTransaction().setTopicId(TopicId.fromString(topicId)).setMessage(message);
|
|
35
|
+
async submitPayload(transaction, submitKey) {
|
|
37
36
|
let transactionResponse;
|
|
38
37
|
if (submitKey) {
|
|
39
38
|
const frozenTransaction = transaction.freezeWith(this.client);
|
|
@@ -145,9 +144,17 @@ class HCS20Client extends HCS20BaseClient {
|
|
|
145
144
|
validation.errors
|
|
146
145
|
);
|
|
147
146
|
}
|
|
148
|
-
const
|
|
147
|
+
const deployTransaction = buildHcs20DeployTx({
|
|
149
148
|
topicId,
|
|
150
|
-
|
|
149
|
+
name: options.name,
|
|
150
|
+
tick: options.tick,
|
|
151
|
+
max: options.maxSupply,
|
|
152
|
+
lim: options.limitPerMint,
|
|
153
|
+
metadata: options.metadata,
|
|
154
|
+
memo: options.topicMemo
|
|
155
|
+
});
|
|
156
|
+
const { transactionId: deployTxId } = await this.submitPayload(
|
|
157
|
+
deployTransaction
|
|
151
158
|
);
|
|
152
159
|
progressCallback?.({
|
|
153
160
|
stage: "confirming",
|
|
@@ -200,18 +207,16 @@ class HCS20Client extends HCS20BaseClient {
|
|
|
200
207
|
stage: "submitting",
|
|
201
208
|
percentage: 50
|
|
202
209
|
});
|
|
203
|
-
const
|
|
204
|
-
|
|
205
|
-
|
|
206
|
-
tick:
|
|
210
|
+
const topicId = options.topicId ? this.topicToString(options.topicId) : this.publicTopicId;
|
|
211
|
+
const mintTransaction = buildHcs20MintTx({
|
|
212
|
+
topicId,
|
|
213
|
+
tick: options.tick,
|
|
207
214
|
amt: options.amount,
|
|
208
215
|
to: this.accountToString(options.to),
|
|
209
|
-
|
|
210
|
-
};
|
|
211
|
-
const topicId = options.topicId || this.publicTopicId;
|
|
216
|
+
memo: options.memo
|
|
217
|
+
});
|
|
212
218
|
const { transactionId: mintTxId } = await this.submitPayload(
|
|
213
|
-
|
|
214
|
-
mintMessage
|
|
219
|
+
mintTransaction
|
|
215
220
|
);
|
|
216
221
|
progressCallback?.({
|
|
217
222
|
stage: "confirming",
|
|
@@ -273,19 +278,17 @@ class HCS20Client extends HCS20BaseClient {
|
|
|
273
278
|
stage: "submitting",
|
|
274
279
|
percentage: 50
|
|
275
280
|
});
|
|
276
|
-
const
|
|
277
|
-
|
|
278
|
-
|
|
279
|
-
tick:
|
|
281
|
+
const topicId = options.topicId ? this.topicToString(options.topicId) : this.publicTopicId;
|
|
282
|
+
const transferTransaction = buildHcs20TransferTx({
|
|
283
|
+
topicId,
|
|
284
|
+
tick: options.tick,
|
|
280
285
|
amt: options.amount,
|
|
281
286
|
from: fromAccount,
|
|
282
287
|
to: toAccount,
|
|
283
|
-
|
|
284
|
-
};
|
|
285
|
-
const topicId = options.topicId || this.publicTopicId;
|
|
288
|
+
memo: options.memo
|
|
289
|
+
});
|
|
286
290
|
const { transactionId: transferTxId } = await this.submitPayload(
|
|
287
|
-
|
|
288
|
-
transferMessage
|
|
291
|
+
transferTransaction
|
|
289
292
|
);
|
|
290
293
|
progressCallback?.({
|
|
291
294
|
stage: "confirming",
|
|
@@ -346,18 +349,16 @@ class HCS20Client extends HCS20BaseClient {
|
|
|
346
349
|
stage: "submitting",
|
|
347
350
|
percentage: 50
|
|
348
351
|
});
|
|
349
|
-
const
|
|
350
|
-
|
|
351
|
-
|
|
352
|
-
tick:
|
|
352
|
+
const topicId = options.topicId ? this.topicToString(options.topicId) : this.publicTopicId;
|
|
353
|
+
const burnTransaction = buildHcs20BurnTx({
|
|
354
|
+
topicId,
|
|
355
|
+
tick: options.tick,
|
|
353
356
|
amt: options.amount,
|
|
354
357
|
from: fromAccount,
|
|
355
|
-
|
|
356
|
-
};
|
|
357
|
-
const topicId = options.topicId || this.publicTopicId;
|
|
358
|
+
memo: options.memo
|
|
359
|
+
});
|
|
358
360
|
const { transactionId: burnTxId } = await this.submitPayload(
|
|
359
|
-
|
|
360
|
-
burnMessage
|
|
361
|
+
burnTransaction
|
|
361
362
|
);
|
|
362
363
|
progressCallback?.({
|
|
363
364
|
stage: "confirming",
|
|
@@ -419,13 +420,27 @@ class HCS20Client extends HCS20BaseClient {
|
|
|
419
420
|
validation.errors
|
|
420
421
|
);
|
|
421
422
|
}
|
|
423
|
+
if (!this.registryTopicId) {
|
|
424
|
+
throw new PointsDeploymentError(
|
|
425
|
+
"Registry topic not available",
|
|
426
|
+
options.name
|
|
427
|
+
);
|
|
428
|
+
}
|
|
422
429
|
progressCallback?.({
|
|
423
430
|
stage: "submitting",
|
|
424
431
|
percentage: 50
|
|
425
432
|
});
|
|
433
|
+
const registerTransaction = buildHcs20RegisterTx({
|
|
434
|
+
registryTopicId: this.registryTopicId,
|
|
435
|
+
name: options.name,
|
|
436
|
+
topicId: this.topicToString(options.topicId),
|
|
437
|
+
isPrivate: options.isPrivate,
|
|
438
|
+
metadata: options.metadata,
|
|
439
|
+
memo: options.memo
|
|
440
|
+
});
|
|
426
441
|
const { transactionId: registerTxId } = await this.submitPayload(
|
|
427
|
-
|
|
428
|
-
|
|
442
|
+
registerTransaction,
|
|
443
|
+
this.operatorCtx.operatorKey
|
|
429
444
|
);
|
|
430
445
|
progressCallback?.({
|
|
431
446
|
stage: "confirming",
|
|
@@ -461,7 +476,13 @@ class HCS20Client extends HCS20BaseClient {
|
|
|
461
476
|
limit: 10,
|
|
462
477
|
order: "desc"
|
|
463
478
|
});
|
|
464
|
-
const found = messages.some((
|
|
479
|
+
const found = messages.some((message) => {
|
|
480
|
+
if (typeof message !== "object" || message === null) {
|
|
481
|
+
return false;
|
|
482
|
+
}
|
|
483
|
+
const candidate = message;
|
|
484
|
+
return typeof candidate.consensus_timestamp === "string";
|
|
485
|
+
});
|
|
465
486
|
if (found) {
|
|
466
487
|
this.logger.debug(
|
|
467
488
|
`Transaction ${transactionId} confirmed on mirror node`
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"standards-sdk.es71.js","sources":["../../src/hcs-20/sdk.ts"],"sourcesContent":["/**\n * SDK implementation of HCS-20 client for server-side usage\n */\n\nimport {\n AccountId,\n TopicId,\n TopicCreateTransaction,\n TopicMessageSubmitTransaction,\n PrivateKey,\n Client,\n TransactionReceipt,\n TransactionResponse,\n Status,\n} from '@hashgraph/sdk';\nimport { HCS20BaseClient } from './base-client';\nimport {\n SDKHCS20ClientConfig,\n DeployPointsOptions,\n MintPointsOptions,\n TransferPointsOptions,\n BurnPointsOptions,\n RegisterTopicOptions,\n PointsInfo,\n PointsTransaction,\n HCS20DeployMessage,\n HCS20MintMessage,\n HCS20TransferMessage,\n HCS20BurnMessage,\n HCS20RegisterMessage,\n} from './types';\nimport {\n PointsDeploymentError,\n PointsTransferError,\n PointsBurnError,\n PointsValidationError,\n} from './errors';\nimport { sleep } from '../utils/sleep';\nimport {\n createNodeOperatorContext,\n type NodeOperatorContext,\n} from '../common/node-operator-resolver';\nimport { HCS2Client } from '../hcs-2/client';\n\n/**\n * SDK-specific HCS-20 client for server-side operations\n */\nexport class HCS20Client extends HCS20BaseClient {\n private client: Client;\n private operatorAccountId: AccountId;\n private operatorId: string;\n private operatorCtx: NodeOperatorContext;\n\n constructor(config: SDKHCS20ClientConfig) {\n super(config);\n\n this.operatorAccountId =\n typeof config.operatorId === 'string'\n ? AccountId.fromString(config.operatorId)\n : config.operatorId;\n this.operatorId = this.operatorAccountId.toString();\n\n const baseClient =\n this.network === 'mainnet' ? Client.forMainnet() : Client.forTestnet();\n\n this.operatorCtx = createNodeOperatorContext({\n network: this.network,\n operatorId: this.operatorId,\n operatorKey: config.operatorKey,\n keyType: config.keyType,\n mirrorNode: this.mirrorNode,\n logger: this.logger,\n client: baseClient,\n });\n\n this.client = this.operatorCtx.client;\n void this.operatorCtx.ensureInitialized();\n }\n\n /**\n * Ensure operator is initialized before operations\n */\n private async ensureInitialized(): Promise<void> {\n await this.operatorCtx.ensureInitialized();\n }\n\n /**\n * Submit a payload to a topic\n */\n private async submitPayload(\n topicId: string,\n payload: object | string,\n submitKey?: PrivateKey,\n ): Promise<{ receipt: TransactionReceipt; transactionId: string }> {\n const message =\n typeof payload === 'string' ? payload : JSON.stringify(payload);\n\n const transaction = new TopicMessageSubmitTransaction()\n .setTopicId(TopicId.fromString(topicId))\n .setMessage(message);\n\n let transactionResponse: TransactionResponse;\n if (submitKey) {\n const frozenTransaction = transaction.freezeWith(this.client);\n const signedTransaction = await frozenTransaction.sign(submitKey);\n transactionResponse = await signedTransaction.execute(this.client);\n } else {\n transactionResponse = await transaction.execute(this.client);\n }\n\n const receipt = await transactionResponse.getReceipt(this.client);\n if (!receipt || receipt.status !== Status.Success) {\n throw new Error('Failed to submit message to topic');\n }\n\n return {\n receipt,\n transactionId: transactionResponse.transactionId!.toString(),\n };\n }\n\n /**\n * Create a public topic for HCS-20 (for testnet)\n */\n async createPublicTopic(memo?: string): Promise<string> {\n await this.ensureInitialized();\n\n this.logger.info('Creating public HCS-20 topic...');\n\n const topicCreateTx = await new TopicCreateTransaction()\n .setTopicMemo(memo || 'HCS-20 Public Topic')\n .execute(this.client);\n\n const receipt = await topicCreateTx.getReceipt(this.client);\n if (receipt.status !== Status.Success || !receipt.topicId) {\n throw new Error('Failed to create public topic');\n }\n\n const topicId = receipt.topicId.toString();\n this.logger.info(`Created public topic: ${topicId}`);\n\n this.publicTopicId = topicId;\n\n return topicId;\n }\n\n /**\n * Create a registry topic for HCS-20\n */\n async createRegistryTopic(): Promise<string> {\n await this.ensureInitialized();\n\n this.logger.info('Creating HCS-20 registry topic...');\n\n const hcs2Client = new HCS2Client({\n operatorId: this.operatorId,\n operatorKey: this.operatorCtx.operatorKey,\n network: this.network,\n });\n\n const topicCreateResponse = await hcs2Client.createRegistry({\n submitKey: this.operatorCtx.operatorKey,\n adminKey: this.operatorCtx.operatorKey,\n });\n\n if (!topicCreateResponse.success) {\n throw new Error('Failed to create registry topic');\n }\n\n const topicId = topicCreateResponse.topicId;\n this.logger.info(`Created registry topic: ${topicId}`);\n\n this.registryTopicId = topicId;\n\n return topicId;\n }\n\n /**\n * Deploy new points\n */\n async deployPoints(options: DeployPointsOptions): Promise<PointsInfo> {\n await this.ensureInitialized();\n const { progressCallback } = options;\n\n try {\n progressCallback?.({\n stage: 'creating-topic',\n percentage: 20,\n });\n\n let topicId: string;\n\n const hcs2Client = new HCS2Client({\n operatorId: this.operatorId,\n operatorKey: this.operatorCtx.operatorKey,\n network: this.network,\n });\n\n if (options.usePrivateTopic) {\n const topicCreateResponse = await hcs2Client.createRegistry({\n submitKey: this.operatorCtx.operatorKey,\n adminKey: this.operatorCtx.operatorKey,\n });\n\n if (!topicCreateResponse.success) {\n throw new PointsDeploymentError(\n 'Failed to create topic',\n options.tick,\n );\n }\n\n topicId = topicCreateResponse.topicId;\n this.logger.info(`Created private topic: ${topicId}`);\n } else {\n topicId = this.publicTopicId;\n }\n\n progressCallback?.({\n stage: 'submitting-deploy',\n percentage: 50,\n topicId,\n });\n\n const deployMessage: HCS20DeployMessage = {\n p: 'hcs-20',\n op: 'deploy',\n name: options.name,\n tick: this.normalizeTick(options.tick),\n max: options.maxSupply,\n lim: options.limitPerMint,\n metadata: options.metadata,\n m: options.topicMemo,\n };\n\n const validation = this.validateMessage(deployMessage);\n if (!validation.valid) {\n throw new PointsValidationError(\n 'Invalid deploy message',\n validation.errors!,\n );\n }\n\n const { transactionId: deployTxId } = await this.submitPayload(\n topicId,\n deployMessage,\n );\n\n progressCallback?.({\n stage: 'confirming',\n percentage: 80,\n topicId,\n deployTxId,\n });\n\n await this.waitForMirrorNodeConfirmation(topicId, deployTxId);\n\n progressCallback?.({\n stage: 'complete',\n percentage: 100,\n topicId,\n deployTxId,\n });\n\n const pointsInfo: PointsInfo = {\n name: options.name,\n tick: this.normalizeTick(options.tick),\n maxSupply: options.maxSupply,\n limitPerMint: options.limitPerMint,\n metadata: options.metadata,\n topicId,\n deployerAccountId: this.operatorId,\n currentSupply: '0',\n deploymentTimestamp: new Date().toISOString(),\n isPrivate: options.usePrivateTopic || false,\n };\n\n return pointsInfo;\n } catch (error) {\n progressCallback?.({\n stage: 'complete',\n percentage: 100,\n error: error instanceof Error ? error.message : 'Unknown error',\n });\n throw error;\n }\n }\n\n /**\n * Mint points\n */\n async mintPoints(options: MintPointsOptions): Promise<PointsTransaction> {\n await this.ensureInitialized();\n const { progressCallback } = options;\n\n try {\n progressCallback?.({\n stage: 'validating',\n percentage: 20,\n });\n\n const normalizedTick = this.normalizeTick(options.tick);\n\n progressCallback?.({\n stage: 'submitting',\n percentage: 50,\n });\n\n const mintMessage: HCS20MintMessage = {\n p: 'hcs-20',\n op: 'mint',\n tick: normalizedTick,\n amt: options.amount,\n to: this.accountToString(options.to),\n m: options.memo,\n };\n\n const topicId = (options as any).topicId || this.publicTopicId;\n const { transactionId: mintTxId } = await this.submitPayload(\n topicId,\n mintMessage,\n );\n\n progressCallback?.({\n stage: 'confirming',\n percentage: 80,\n mintTxId,\n });\n\n await this.waitForMirrorNodeConfirmation(topicId, mintTxId);\n\n progressCallback?.({\n stage: 'complete',\n percentage: 100,\n mintTxId,\n });\n\n const transaction: PointsTransaction = {\n id: mintTxId,\n operation: 'mint',\n tick: normalizedTick,\n amount: options.amount,\n to: this.accountToString(options.to),\n timestamp: new Date().toISOString(),\n sequenceNumber: 0,\n topicId,\n transactionId: mintTxId,\n memo: options.memo,\n };\n\n return transaction;\n } catch (error) {\n progressCallback?.({\n stage: 'complete',\n percentage: 100,\n error: error instanceof Error ? error.message : 'Unknown error',\n });\n throw error;\n }\n }\n\n /**\n * Transfer points\n */\n async transferPoints(\n options: TransferPointsOptions,\n ): Promise<PointsTransaction> {\n await this.ensureInitialized();\n const { progressCallback } = options;\n\n try {\n progressCallback?.({\n stage: 'validating-balance',\n percentage: 20,\n });\n\n const normalizedTick = this.normalizeTick(options.tick);\n const fromAccount = this.accountToString(options.from);\n const toAccount = this.accountToString(options.to);\n\n if (fromAccount !== this.operatorId) {\n throw new PointsTransferError(\n 'For public topics, transaction payer must match sender',\n options.tick,\n fromAccount,\n toAccount,\n options.amount,\n );\n }\n\n progressCallback?.({\n stage: 'submitting',\n percentage: 50,\n });\n\n const transferMessage: HCS20TransferMessage = {\n p: 'hcs-20',\n op: 'transfer',\n tick: normalizedTick,\n amt: options.amount,\n from: fromAccount,\n to: toAccount,\n m: options.memo,\n };\n\n const topicId = (options as any).topicId || this.publicTopicId;\n const { transactionId: transferTxId } = await this.submitPayload(\n topicId,\n transferMessage,\n );\n\n progressCallback?.({\n stage: 'confirming',\n percentage: 80,\n transferTxId,\n });\n\n await this.waitForMirrorNodeConfirmation(topicId, transferTxId);\n\n progressCallback?.({\n stage: 'complete',\n percentage: 100,\n transferTxId,\n });\n\n const transaction: PointsTransaction = {\n id: transferTxId,\n operation: 'transfer',\n tick: normalizedTick,\n amount: options.amount,\n from: fromAccount,\n to: toAccount,\n timestamp: new Date().toISOString(),\n sequenceNumber: 0,\n topicId,\n transactionId: transferTxId,\n memo: options.memo,\n };\n\n return transaction;\n } catch (error) {\n progressCallback?.({\n stage: 'complete',\n percentage: 100,\n error: error instanceof Error ? error.message : 'Unknown error',\n });\n throw error;\n }\n }\n\n /**\n * Burn points\n */\n async burnPoints(options: BurnPointsOptions): Promise<PointsTransaction> {\n await this.ensureInitialized();\n const { progressCallback } = options;\n\n try {\n progressCallback?.({\n stage: 'validating-balance',\n percentage: 20,\n });\n\n const normalizedTick = this.normalizeTick(options.tick);\n const fromAccount = this.accountToString(options.from);\n\n if (fromAccount !== this.operatorId) {\n throw new PointsBurnError(\n 'For public topics, transaction payer must match burner',\n options.tick,\n fromAccount,\n options.amount,\n );\n }\n\n progressCallback?.({\n stage: 'submitting',\n percentage: 50,\n });\n\n const burnMessage: HCS20BurnMessage = {\n p: 'hcs-20',\n op: 'burn',\n tick: normalizedTick,\n amt: options.amount,\n from: fromAccount,\n m: options.memo,\n };\n\n const topicId = (options as any).topicId || this.publicTopicId;\n const { transactionId: burnTxId } = await this.submitPayload(\n topicId,\n burnMessage,\n );\n\n progressCallback?.({\n stage: 'confirming',\n percentage: 80,\n burnTxId,\n });\n\n await this.waitForMirrorNodeConfirmation(topicId, burnTxId);\n\n progressCallback?.({\n stage: 'complete',\n percentage: 100,\n burnTxId,\n });\n\n const transaction: PointsTransaction = {\n id: burnTxId,\n operation: 'burn',\n tick: normalizedTick,\n amount: options.amount,\n from: fromAccount,\n timestamp: new Date().toISOString(),\n sequenceNumber: 0,\n topicId,\n transactionId: burnTxId,\n memo: options.memo,\n };\n\n return transaction;\n } catch (error) {\n progressCallback?.({\n stage: 'complete',\n percentage: 100,\n error: error instanceof Error ? error.message : 'Unknown error',\n });\n throw error;\n }\n }\n\n /**\n * Register a topic in the registry\n */\n async registerTopic(options: RegisterTopicOptions): Promise<void> {\n await this.ensureInitialized();\n const { progressCallback } = options;\n\n try {\n progressCallback?.({\n stage: 'validating',\n percentage: 20,\n });\n\n const registerMessage: HCS20RegisterMessage = {\n p: 'hcs-20',\n op: 'register',\n name: options.name,\n metadata: options.metadata,\n private: options.isPrivate,\n t_id: this.topicToString(options.topicId),\n m: options.memo,\n };\n\n const validation = this.validateMessage(registerMessage);\n if (!validation.valid) {\n throw new PointsValidationError(\n 'Invalid register message',\n validation.errors!,\n );\n }\n\n progressCallback?.({\n stage: 'submitting',\n percentage: 50,\n });\n\n const { transactionId: registerTxId } = await this.submitPayload(\n this.registryTopicId,\n registerMessage,\n );\n\n progressCallback?.({\n stage: 'confirming',\n percentage: 80,\n registerTxId,\n });\n\n await this.waitForMirrorNodeConfirmation(\n this.registryTopicId,\n registerTxId,\n );\n\n progressCallback?.({\n stage: 'complete',\n percentage: 100,\n registerTxId,\n });\n\n this.logger.info(`Registered topic ${options.topicId} in registry`);\n } catch (error) {\n progressCallback?.({\n stage: 'complete',\n percentage: 100,\n error: error instanceof Error ? error.message : 'Unknown error',\n });\n throw error;\n }\n }\n\n /**\n * Wait for mirror node to index a message\n */\n private async waitForMirrorNodeConfirmation(\n topicId: string,\n transactionId: string,\n maxRetries = 10,\n ): Promise<void> {\n for (let i = 0; i < maxRetries; i++) {\n try {\n const messages = await this.mirrorNode.getTopicMessages(topicId, {\n limit: 10,\n order: 'desc',\n });\n\n const found = messages.some((msg: any) => msg.consensus_timestamp);\n\n if (found) {\n this.logger.debug(\n `Transaction ${transactionId} confirmed on mirror node`,\n );\n return;\n }\n } catch (error) {\n this.logger.debug(`Mirror node check attempt ${i + 1} failed:`, error);\n }\n\n await sleep(2000);\n }\n\n this.logger.warn(\n `Transaction ${transactionId} not found on mirror node after ${maxRetries} attempts`,\n );\n }\n}\n"],"names":[],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"standards-sdk.es71.js","sources":["../../src/hcs-20/sdk.ts"],"sourcesContent":["/**\n * SDK implementation of HCS-20 client for server-side usage\n */\n\nimport {\n AccountId,\n TopicCreateTransaction,\n TopicMessageSubmitTransaction,\n PrivateKey,\n Client,\n TransactionReceipt,\n TransactionResponse,\n Status,\n} from '@hashgraph/sdk';\nimport { HCS20BaseClient } from './base-client';\nimport {\n SDKHCS20ClientConfig,\n DeployPointsOptions,\n MintPointsOptions,\n TransferPointsOptions,\n BurnPointsOptions,\n RegisterTopicOptions,\n PointsInfo,\n PointsTransaction,\n HCS20DeployMessage,\n HCS20RegisterMessage,\n} from './types';\nimport {\n PointsDeploymentError,\n PointsTransferError,\n PointsBurnError,\n PointsValidationError,\n} from './errors';\nimport { sleep } from '../utils/sleep';\nimport {\n createNodeOperatorContext,\n type NodeOperatorContext,\n} from '../common/node-operator-resolver';\nimport { HCS2Client } from '../hcs-2/client';\nimport {\n buildHcs20DeployTx,\n buildHcs20MintTx,\n buildHcs20TransferTx,\n buildHcs20BurnTx,\n buildHcs20RegisterTx,\n} from './tx';\n\n/**\n * SDK-specific HCS-20 client for server-side operations\n */\nexport class HCS20Client extends HCS20BaseClient {\n private client: Client;\n private operatorAccountId: AccountId;\n private operatorId: string;\n private operatorCtx: NodeOperatorContext;\n\n constructor(config: SDKHCS20ClientConfig) {\n super(config);\n\n this.operatorAccountId =\n typeof config.operatorId === 'string'\n ? AccountId.fromString(config.operatorId)\n : config.operatorId;\n this.operatorId = this.operatorAccountId.toString();\n\n const baseClient =\n this.network === 'mainnet' ? Client.forMainnet() : Client.forTestnet();\n\n this.operatorCtx = createNodeOperatorContext({\n network: this.network,\n operatorId: this.operatorId,\n operatorKey: config.operatorKey,\n keyType: config.keyType,\n mirrorNode: this.mirrorNode,\n logger: this.logger,\n client: baseClient,\n });\n\n this.client = this.operatorCtx.client;\n void this.operatorCtx.ensureInitialized();\n }\n\n /**\n * Ensure operator is initialized before operations\n */\n private async ensureInitialized(): Promise<void> {\n await this.operatorCtx.ensureInitialized();\n }\n\n /**\n * Submit a payload to a topic\n */\n private async submitPayload(\n transaction: TopicMessageSubmitTransaction,\n submitKey?: PrivateKey,\n ): Promise<{ receipt: TransactionReceipt; transactionId: string }> {\n let transactionResponse: TransactionResponse;\n if (submitKey) {\n const frozenTransaction = transaction.freezeWith(this.client);\n const signedTransaction = await frozenTransaction.sign(submitKey);\n transactionResponse = await signedTransaction.execute(this.client);\n } else {\n transactionResponse = await transaction.execute(this.client);\n }\n\n const receipt = await transactionResponse.getReceipt(this.client);\n if (!receipt || receipt.status !== Status.Success) {\n throw new Error('Failed to submit message to topic');\n }\n\n return {\n receipt,\n transactionId: transactionResponse.transactionId!.toString(),\n };\n }\n\n /**\n * Create a public topic for HCS-20 (for testnet)\n */\n async createPublicTopic(memo?: string): Promise<string> {\n await this.ensureInitialized();\n\n this.logger.info('Creating public HCS-20 topic...');\n\n const topicCreateTx = await new TopicCreateTransaction()\n .setTopicMemo(memo || 'HCS-20 Public Topic')\n .execute(this.client);\n\n const receipt = await topicCreateTx.getReceipt(this.client);\n if (receipt.status !== Status.Success || !receipt.topicId) {\n throw new Error('Failed to create public topic');\n }\n\n const topicId = receipt.topicId.toString();\n this.logger.info(`Created public topic: ${topicId}`);\n\n this.publicTopicId = topicId;\n\n return topicId;\n }\n\n /**\n * Create a registry topic for HCS-20\n */\n async createRegistryTopic(): Promise<string> {\n await this.ensureInitialized();\n\n this.logger.info('Creating HCS-20 registry topic...');\n\n const hcs2Client = new HCS2Client({\n operatorId: this.operatorId,\n operatorKey: this.operatorCtx.operatorKey,\n network: this.network,\n });\n\n const topicCreateResponse = await hcs2Client.createRegistry({\n submitKey: this.operatorCtx.operatorKey,\n adminKey: this.operatorCtx.operatorKey,\n });\n\n if (!topicCreateResponse.success) {\n throw new Error('Failed to create registry topic');\n }\n\n const topicId = topicCreateResponse.topicId;\n this.logger.info(`Created registry topic: ${topicId}`);\n\n this.registryTopicId = topicId;\n\n return topicId;\n }\n\n /**\n * Deploy new points\n */\n async deployPoints(options: DeployPointsOptions): Promise<PointsInfo> {\n await this.ensureInitialized();\n const { progressCallback } = options;\n\n try {\n progressCallback?.({\n stage: 'creating-topic',\n percentage: 20,\n });\n\n let topicId: string;\n\n const hcs2Client = new HCS2Client({\n operatorId: this.operatorId,\n operatorKey: this.operatorCtx.operatorKey,\n network: this.network,\n });\n\n if (options.usePrivateTopic) {\n const topicCreateResponse = await hcs2Client.createRegistry({\n submitKey: this.operatorCtx.operatorKey,\n adminKey: this.operatorCtx.operatorKey,\n });\n\n if (!topicCreateResponse.success) {\n throw new PointsDeploymentError(\n 'Failed to create topic',\n options.tick,\n );\n }\n\n topicId = topicCreateResponse.topicId;\n this.logger.info(`Created private topic: ${topicId}`);\n } else {\n topicId = this.publicTopicId;\n }\n\n progressCallback?.({\n stage: 'submitting-deploy',\n percentage: 50,\n topicId,\n });\n\n const deployMessage: HCS20DeployMessage = {\n p: 'hcs-20',\n op: 'deploy',\n name: options.name,\n tick: this.normalizeTick(options.tick),\n max: options.maxSupply,\n lim: options.limitPerMint,\n metadata: options.metadata,\n m: options.topicMemo,\n };\n\n const validation = this.validateMessage(deployMessage);\n if (!validation.valid) {\n throw new PointsValidationError(\n 'Invalid deploy message',\n validation.errors!,\n );\n }\n\n const deployTransaction = buildHcs20DeployTx({\n topicId,\n name: options.name,\n tick: options.tick,\n max: options.maxSupply,\n lim: options.limitPerMint,\n metadata: options.metadata,\n memo: options.topicMemo,\n });\n\n const { transactionId: deployTxId } = await this.submitPayload(\n deployTransaction,\n );\n\n progressCallback?.({\n stage: 'confirming',\n percentage: 80,\n topicId,\n deployTxId,\n });\n\n await this.waitForMirrorNodeConfirmation(topicId, deployTxId);\n\n progressCallback?.({\n stage: 'complete',\n percentage: 100,\n topicId,\n deployTxId,\n });\n\n const pointsInfo: PointsInfo = {\n name: options.name,\n tick: this.normalizeTick(options.tick),\n maxSupply: options.maxSupply,\n limitPerMint: options.limitPerMint,\n metadata: options.metadata,\n topicId,\n deployerAccountId: this.operatorId,\n currentSupply: '0',\n deploymentTimestamp: new Date().toISOString(),\n isPrivate: options.usePrivateTopic || false,\n };\n\n return pointsInfo;\n } catch (error) {\n progressCallback?.({\n stage: 'complete',\n percentage: 100,\n error: error instanceof Error ? error.message : 'Unknown error',\n });\n throw error;\n }\n }\n\n /**\n * Mint points\n */\n async mintPoints(options: MintPointsOptions): Promise<PointsTransaction> {\n await this.ensureInitialized();\n const { progressCallback } = options;\n\n try {\n progressCallback?.({\n stage: 'validating',\n percentage: 20,\n });\n\n const normalizedTick = this.normalizeTick(options.tick);\n\n progressCallback?.({\n stage: 'submitting',\n percentage: 50,\n });\n\n const topicId = options.topicId\n ? this.topicToString(options.topicId)\n : this.publicTopicId;\n const mintTransaction = buildHcs20MintTx({\n topicId,\n tick: options.tick,\n amt: options.amount,\n to: this.accountToString(options.to),\n memo: options.memo,\n });\n\n const { transactionId: mintTxId } = await this.submitPayload(\n mintTransaction,\n );\n\n progressCallback?.({\n stage: 'confirming',\n percentage: 80,\n mintTxId,\n });\n\n await this.waitForMirrorNodeConfirmation(topicId, mintTxId);\n\n progressCallback?.({\n stage: 'complete',\n percentage: 100,\n mintTxId,\n });\n\n const transaction: PointsTransaction = {\n id: mintTxId,\n operation: 'mint',\n tick: normalizedTick,\n amount: options.amount,\n to: this.accountToString(options.to),\n timestamp: new Date().toISOString(),\n sequenceNumber: 0,\n topicId,\n transactionId: mintTxId,\n memo: options.memo,\n };\n\n return transaction;\n } catch (error) {\n progressCallback?.({\n stage: 'complete',\n percentage: 100,\n error: error instanceof Error ? error.message : 'Unknown error',\n });\n throw error;\n }\n }\n\n /**\n * Transfer points\n */\n async transferPoints(\n options: TransferPointsOptions,\n ): Promise<PointsTransaction> {\n await this.ensureInitialized();\n const { progressCallback } = options;\n\n try {\n progressCallback?.({\n stage: 'validating-balance',\n percentage: 20,\n });\n\n const normalizedTick = this.normalizeTick(options.tick);\n const fromAccount = this.accountToString(options.from);\n const toAccount = this.accountToString(options.to);\n\n if (fromAccount !== this.operatorId) {\n throw new PointsTransferError(\n 'For public topics, transaction payer must match sender',\n options.tick,\n fromAccount,\n toAccount,\n options.amount,\n );\n }\n\n progressCallback?.({\n stage: 'submitting',\n percentage: 50,\n });\n\n const topicId = options.topicId\n ? this.topicToString(options.topicId)\n : this.publicTopicId;\n const transferTransaction = buildHcs20TransferTx({\n topicId,\n tick: options.tick,\n amt: options.amount,\n from: fromAccount,\n to: toAccount,\n memo: options.memo,\n });\n\n const { transactionId: transferTxId } = await this.submitPayload(\n transferTransaction,\n );\n\n progressCallback?.({\n stage: 'confirming',\n percentage: 80,\n transferTxId,\n });\n\n await this.waitForMirrorNodeConfirmation(topicId, transferTxId);\n\n progressCallback?.({\n stage: 'complete',\n percentage: 100,\n transferTxId,\n });\n\n const transaction: PointsTransaction = {\n id: transferTxId,\n operation: 'transfer',\n tick: normalizedTick,\n amount: options.amount,\n from: fromAccount,\n to: toAccount,\n timestamp: new Date().toISOString(),\n sequenceNumber: 0,\n topicId,\n transactionId: transferTxId,\n memo: options.memo,\n };\n\n return transaction;\n } catch (error) {\n progressCallback?.({\n stage: 'complete',\n percentage: 100,\n error: error instanceof Error ? error.message : 'Unknown error',\n });\n throw error;\n }\n }\n\n /**\n * Burn points\n */\n async burnPoints(options: BurnPointsOptions): Promise<PointsTransaction> {\n await this.ensureInitialized();\n const { progressCallback } = options;\n\n try {\n progressCallback?.({\n stage: 'validating-balance',\n percentage: 20,\n });\n\n const normalizedTick = this.normalizeTick(options.tick);\n const fromAccount = this.accountToString(options.from);\n\n if (fromAccount !== this.operatorId) {\n throw new PointsBurnError(\n 'For public topics, transaction payer must match burner',\n options.tick,\n fromAccount,\n options.amount,\n );\n }\n\n progressCallback?.({\n stage: 'submitting',\n percentage: 50,\n });\n\n const topicId = options.topicId\n ? this.topicToString(options.topicId)\n : this.publicTopicId;\n const burnTransaction = buildHcs20BurnTx({\n topicId,\n tick: options.tick,\n amt: options.amount,\n from: fromAccount,\n memo: options.memo,\n });\n\n const { transactionId: burnTxId } = await this.submitPayload(\n burnTransaction,\n );\n\n progressCallback?.({\n stage: 'confirming',\n percentage: 80,\n burnTxId,\n });\n\n await this.waitForMirrorNodeConfirmation(topicId, burnTxId);\n\n progressCallback?.({\n stage: 'complete',\n percentage: 100,\n burnTxId,\n });\n\n const transaction: PointsTransaction = {\n id: burnTxId,\n operation: 'burn',\n tick: normalizedTick,\n amount: options.amount,\n from: fromAccount,\n timestamp: new Date().toISOString(),\n sequenceNumber: 0,\n topicId,\n transactionId: burnTxId,\n memo: options.memo,\n };\n\n return transaction;\n } catch (error) {\n progressCallback?.({\n stage: 'complete',\n percentage: 100,\n error: error instanceof Error ? error.message : 'Unknown error',\n });\n throw error;\n }\n }\n\n /**\n * Register a topic in the registry\n */\n async registerTopic(options: RegisterTopicOptions): Promise<void> {\n await this.ensureInitialized();\n const { progressCallback } = options;\n\n try {\n progressCallback?.({\n stage: 'validating',\n percentage: 20,\n });\n\n const registerMessage: HCS20RegisterMessage = {\n p: 'hcs-20',\n op: 'register',\n name: options.name,\n metadata: options.metadata,\n private: options.isPrivate,\n t_id: this.topicToString(options.topicId),\n m: options.memo,\n };\n\n const validation = this.validateMessage(registerMessage);\n if (!validation.valid) {\n throw new PointsValidationError(\n 'Invalid register message',\n validation.errors!,\n );\n }\n\n if (!this.registryTopicId) {\n throw new PointsDeploymentError(\n 'Registry topic not available',\n options.name,\n );\n }\n\n progressCallback?.({\n stage: 'submitting',\n percentage: 50,\n });\n\n const registerTransaction = buildHcs20RegisterTx({\n registryTopicId: this.registryTopicId,\n name: options.name,\n topicId: this.topicToString(options.topicId),\n isPrivate: options.isPrivate,\n metadata: options.metadata,\n memo: options.memo,\n });\n\n const { transactionId: registerTxId } = await this.submitPayload(\n registerTransaction,\n this.operatorCtx.operatorKey,\n );\n\n progressCallback?.({\n stage: 'confirming',\n percentage: 80,\n registerTxId,\n });\n\n await this.waitForMirrorNodeConfirmation(\n this.registryTopicId,\n registerTxId,\n );\n\n progressCallback?.({\n stage: 'complete',\n percentage: 100,\n registerTxId,\n });\n\n this.logger.info(`Registered topic ${options.topicId} in registry`);\n } catch (error) {\n progressCallback?.({\n stage: 'complete',\n percentage: 100,\n error: error instanceof Error ? error.message : 'Unknown error',\n });\n throw error;\n }\n }\n\n /**\n * Wait for mirror node to index a message\n */\n private async waitForMirrorNodeConfirmation(\n topicId: string,\n transactionId: string,\n maxRetries = 10,\n ): Promise<void> {\n for (let i = 0; i < maxRetries; i++) {\n try {\n const messages = await this.mirrorNode.getTopicMessages(topicId, {\n limit: 10,\n order: 'desc',\n });\n\n const found = messages.some(message => {\n if (typeof message !== 'object' || message === null) {\n return false;\n }\n const candidate = message as { consensus_timestamp?: unknown };\n return typeof candidate.consensus_timestamp === 'string';\n });\n\n if (found) {\n this.logger.debug(\n `Transaction ${transactionId} confirmed on mirror node`,\n );\n return;\n }\n } catch (error) {\n this.logger.debug(`Mirror node check attempt ${i + 1} failed:`, error);\n }\n\n await sleep(2000);\n }\n\n this.logger.warn(\n `Transaction ${transactionId} not found on mirror node after ${maxRetries} attempts`,\n );\n }\n}\n"],"names":[],"mappings":"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"}
|