@hashgraphonline/standards-sdk 0.1.140 → 0.1.141
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-20/points-indexer.d.ts +4 -0
- package/dist/cjs/hcs-20/points-indexer.d.ts.map +1 -1
- package/dist/cjs/standards-sdk.cjs +1 -1
- package/dist/cjs/standards-sdk.cjs.map +1 -1
- package/dist/es/hcs-20/points-indexer.d.ts +4 -0
- package/dist/es/hcs-20/points-indexer.d.ts.map +1 -1
- package/dist/es/standards-sdk.es110.js +5 -5
- package/dist/es/standards-sdk.es120.js +1 -1
- package/dist/es/standards-sdk.es121.js +1 -1
- package/dist/es/standards-sdk.es122.js +5 -5
- package/dist/es/standards-sdk.es140.js +51 -167
- package/dist/es/standards-sdk.es140.js.map +1 -1
- package/dist/es/standards-sdk.es141.js +53 -311
- package/dist/es/standards-sdk.es141.js.map +1 -1
- package/dist/es/standards-sdk.es142.js +120 -294
- package/dist/es/standards-sdk.es142.js.map +1 -1
- package/dist/es/standards-sdk.es143.js +191 -322
- package/dist/es/standards-sdk.es143.js.map +1 -1
- package/dist/es/standards-sdk.es144.js +294 -279
- package/dist/es/standards-sdk.es144.js.map +1 -1
- package/dist/es/standards-sdk.es145.js +440 -63
- package/dist/es/standards-sdk.es145.js.map +1 -1
- package/dist/es/standards-sdk.es146.js +330 -55
- package/dist/es/standards-sdk.es146.js.map +1 -1
- package/dist/es/standards-sdk.es147.js +62 -50
- package/dist/es/standards-sdk.es147.js.map +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.es63.js +1 -1
- package/dist/es/standards-sdk.es78.js +12 -6
- package/dist/es/standards-sdk.es78.js.map +1 -1
- package/package.json +1 -1
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"standards-sdk.es147.js","sources":["../../src/utils/
|
|
1
|
+
{"version":3,"file":"standards-sdk.es147.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,5 +1,5 @@
|
|
|
1
1
|
import { getCryptoAdapter } from "./standards-sdk.es119.js";
|
|
2
|
-
import { base58Encode } from "./standards-sdk.
|
|
2
|
+
import { base58Encode } from "./standards-sdk.es140.js";
|
|
3
3
|
import { canonicalizeAgentData } from "./standards-sdk.es56.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.es60.js";
|
|
2
2
|
import { parseHcs14Did } from "./standards-sdk.es57.js";
|
|
3
|
-
import { multibaseB58btcDecode } from "./standards-sdk.
|
|
3
|
+
import { multibaseB58btcDecode } from "./standards-sdk.es140.js";
|
|
4
4
|
class ResolverRegistry {
|
|
5
5
|
constructor() {
|
|
6
6
|
this.resolvers = [];
|
|
@@ -75,8 +75,10 @@ class HCS20PointsIndexer {
|
|
|
75
75
|
return;
|
|
76
76
|
}
|
|
77
77
|
this.isProcessing = true;
|
|
78
|
-
const
|
|
79
|
-
const
|
|
78
|
+
const includePublicTopic = options?.includePublicTopic !== false;
|
|
79
|
+
const includeRegistryTopic = options?.includeRegistryTopic !== false;
|
|
80
|
+
const publicTopicId = includePublicTopic ? options?.publicTopicId || HCS20_CONSTANTS.PUBLIC_TOPIC_ID : null;
|
|
81
|
+
const registryTopicId = includeRegistryTopic ? options?.registryTopicId || HCS20_CONSTANTS.REGISTRY_TOPIC_ID : null;
|
|
80
82
|
const pollInterval = options?.pollInterval || 3e4;
|
|
81
83
|
await this.indexTopics(
|
|
82
84
|
publicTopicId,
|
|
@@ -104,8 +106,10 @@ class HCS20PointsIndexer {
|
|
|
104
106
|
* Index topics once and wait for completion
|
|
105
107
|
*/
|
|
106
108
|
async indexOnce(options) {
|
|
107
|
-
const
|
|
108
|
-
const
|
|
109
|
+
const includePublicTopic = options?.includePublicTopic !== false;
|
|
110
|
+
const includeRegistryTopic = options?.includeRegistryTopic !== false;
|
|
111
|
+
const publicTopicId = includePublicTopic ? options?.publicTopicId || HCS20_CONSTANTS.PUBLIC_TOPIC_ID : null;
|
|
112
|
+
const registryTopicId = includeRegistryTopic ? options?.registryTopicId || HCS20_CONSTANTS.REGISTRY_TOPIC_ID : null;
|
|
109
113
|
await this.indexTopics(
|
|
110
114
|
publicTopicId,
|
|
111
115
|
registryTopicId,
|
|
@@ -124,8 +128,10 @@ class HCS20PointsIndexer {
|
|
|
124
128
|
*/
|
|
125
129
|
async indexTopics(publicTopicId, registryTopicId, privateTopics) {
|
|
126
130
|
this.logger.debug("Starting indexing cycle");
|
|
127
|
-
|
|
128
|
-
|
|
131
|
+
if (publicTopicId) {
|
|
132
|
+
await this.indexTopic(publicTopicId, false);
|
|
133
|
+
}
|
|
134
|
+
const registeredTopics = registryTopicId ? await this.getRegisteredTopics(registryTopicId) : [];
|
|
129
135
|
const topicsToIndex = [...registeredTopics, ...privateTopics || []];
|
|
130
136
|
for (const topicId of topicsToIndex) {
|
|
131
137
|
await this.indexTopic(topicId, true);
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"standards-sdk.es78.js","sources":["../../src/hcs-20/points-indexer.ts"],"sourcesContent":["/**\n * HCS-20 Points Indexer for state calculation\n * Handles async processing of HCS messages to build points state.\n * With larger topics, we do not recommend using this indexer, and\n * instead utilizing more scalable, database or redis based solutions.\n */\n\nimport { Logger } from '../utils/logger';\nimport { HederaMirrorNode } from '../services';\nimport { NetworkType } from '../utils/types';\nimport {\n PointsState,\n PointsInfo,\n HCS20Message,\n HCS20DeployMessage,\n HCS20MintMessage,\n HCS20TransferMessage,\n HCS20BurnMessage,\n HCS20_CONSTANTS,\n HCS20MessageSchema,\n} from './types';\n\ninterface TopicMessageMeta {\n consensus_timestamp: string;\n sequence_number: number;\n payer_account_id: string;\n transaction_id: string;\n}\n\n/**\n * HCS-20 Points Indexer for processing and maintaining points state\n */\nexport class HCS20PointsIndexer {\n private logger: Logger;\n private mirrorNode: HederaMirrorNode;\n private state: PointsState;\n private isProcessing: boolean = false;\n private lastIndexedSequence: Map<string, number> = new Map();\n\n constructor(network: NetworkType, logger?: Logger, mirrorNodeUrl?: string) {\n this.logger =\n logger ||\n new Logger({\n level: 'info',\n module: 'HCS20PointsIndexer',\n });\n this.mirrorNode = new HederaMirrorNode(network, this.logger, {\n customUrl: mirrorNodeUrl,\n });\n this.state = this.initializeState();\n }\n\n /**\n * Initialize empty state\n */\n private initializeState(): PointsState {\n return {\n deployedPoints: new Map(),\n balances: new Map(),\n transactions: [],\n lastProcessedSequence: 0,\n lastProcessedTimestamp: new Date().toISOString(),\n };\n }\n\n /**\n * Get current state snapshot\n */\n getState(): PointsState {\n return {\n ...this.state,\n deployedPoints: new Map(this.state.deployedPoints),\n balances: new Map(this.state.balances),\n transactions: [...this.state.transactions],\n };\n }\n\n /**\n * Get points info for a specific tick\n */\n getPointsInfo(tick: string): PointsInfo | undefined {\n return this.state.deployedPoints.get(this.normalizeTick(tick));\n }\n\n /**\n * Get balance for an account and tick\n */\n getBalance(tick: string, accountId: string): string {\n const normalizedTick = this.normalizeTick(tick);\n const tickBalances = this.state.balances.get(normalizedTick);\n if (!tickBalances) return '0';\n const balance = tickBalances.get(accountId);\n return balance?.balance || '0';\n }\n\n /**\n * Start indexing process\n */\n async startIndexing(options?: {\n publicTopicId?: string;\n registryTopicId?: string;\n privateTopics?: string[];\n pollInterval?: number;\n }): Promise<void> {\n if (this.isProcessing) {\n this.logger.warn('Indexing already in progress');\n return;\n }\n\n this.isProcessing = true;\n const publicTopicId =\n options?.publicTopicId || HCS20_CONSTANTS.PUBLIC_TOPIC_ID;\n const registryTopicId =\n options?.registryTopicId || HCS20_CONSTANTS.REGISTRY_TOPIC_ID;\n const pollInterval = options?.pollInterval || 30000;\n\n await this.indexTopics(\n publicTopicId,\n registryTopicId,\n options?.privateTopics,\n );\n\n const pollTopics = async () => {\n if (!this.isProcessing) return;\n try {\n await this.indexTopics(\n publicTopicId,\n registryTopicId,\n options?.privateTopics,\n );\n } catch (error) {\n this.logger.error('Polling error:', error);\n }\n if (this.isProcessing) {\n setTimeout(pollTopics, pollInterval);\n }\n };\n\n setTimeout(pollTopics, pollInterval);\n }\n\n /**\n * Index topics once and wait for completion\n */\n async indexOnce(options?: {\n publicTopicId?: string;\n registryTopicId?: string;\n privateTopics?: string[];\n }): Promise<void> {\n const publicTopicId =\n options?.publicTopicId || HCS20_CONSTANTS.PUBLIC_TOPIC_ID;\n const registryTopicId =\n options?.registryTopicId || HCS20_CONSTANTS.REGISTRY_TOPIC_ID;\n\n await this.indexTopics(\n publicTopicId,\n registryTopicId,\n options?.privateTopics,\n );\n }\n\n /**\n * Stop indexing process\n */\n stopIndexing(): void {\n this.isProcessing = false;\n this.logger.info('Indexing stopped');\n }\n\n /**\n * Index topics and update state\n */\n private async indexTopics(\n publicTopicId: string,\n registryTopicId: string,\n privateTopics?: string[],\n ): Promise<void> {\n this.logger.debug('Starting indexing cycle');\n await this.indexTopic(publicTopicId, false);\n const registeredTopics = await this.getRegisteredTopics(registryTopicId);\n const topicsToIndex = [...registeredTopics, ...(privateTopics || [])];\n for (const topicId of topicsToIndex) {\n await this.indexTopic(topicId, true);\n }\n\n this.logger.debug('Indexing cycle complete');\n }\n\n /**\n * Get registered topics from registry\n */\n private async getRegisteredTopics(\n registryTopicId: string,\n ): Promise<string[]> {\n const topics: string[] = [];\n try {\n const messages = await this.mirrorNode.getTopicMessages(registryTopicId, {\n limit: 100,\n order: 'asc',\n });\n\n messages\n .filter(\n message =>\n message.p === 'hcs-20' &&\n message.op === 'register' &&\n typeof message.t_id === 'string',\n )\n .forEach(message => {\n topics.push(message.t_id as string);\n });\n } catch (error) {\n this.logger.error('Failed to fetch registry messages:', error);\n }\n return topics;\n }\n\n /**\n * Index a single topic\n */\n private async indexTopic(topicId: string, isPrivate: boolean): Promise<void> {\n try {\n const lastSequence = this.lastIndexedSequence.get(topicId);\n this.logger.debug(\n `Indexing topic ${topicId}, starting from sequence ${lastSequence || 0}`,\n );\n\n const messages = await this.mirrorNode.getTopicMessages(topicId, {\n sequenceNumber: lastSequence ? lastSequence + 1 : undefined,\n limit: 1000,\n order: 'asc',\n });\n\n this.logger.debug(\n `Fetched ${messages.length} messages from topic ${topicId}`,\n );\n\n let maxSequence = lastSequence || 0;\n\n for (const message of messages) {\n if (message.p !== 'hcs-20') {\n continue;\n }\n\n const parseResult = HCS20MessageSchema.safeParse(message);\n if (!parseResult.success) {\n this.logger.debug('Skipping message due to schema mismatch');\n continue;\n }\n\n const parsedMsg = parseResult.data;\n const sequenceNumber = message.sequence_number ?? 0;\n\n this.logger.debug(\n `Found HCS-20 message: op=${parsedMsg.op}, sequence=${sequenceNumber}`,\n );\n\n if (sequenceNumber > maxSequence) {\n maxSequence = sequenceNumber;\n }\n\n const topicMessage: TopicMessageMeta = {\n consensus_timestamp: message.consensus_timestamp ?? '',\n sequence_number: sequenceNumber,\n payer_account_id: message.payer_account_id ?? message.payer ?? '',\n transaction_id: message.transaction_id ?? '',\n };\n\n this.processMessage(parsedMsg, topicMessage, topicId, isPrivate);\n\n this.state.lastProcessedSequence++;\n this.state.lastProcessedTimestamp = message.consensus_timestamp || '';\n }\n if (maxSequence > (lastSequence || 0)) {\n this.lastIndexedSequence.set(topicId, maxSequence);\n }\n } catch (error) {\n this.logger.error(`Failed to index topic ${topicId}:`, error);\n }\n }\n\n /**\n * Process a single message\n */\n private processMessage(\n msg: HCS20Message,\n hcsMsg: TopicMessageMeta,\n topicId: string,\n isPrivate: boolean,\n ): void {\n switch (msg.op) {\n case 'deploy':\n this.processDeployMessage(msg, hcsMsg, topicId, isPrivate);\n break;\n case 'mint':\n this.processMintMessage(msg, hcsMsg, topicId, isPrivate);\n break;\n case 'transfer':\n this.processTransferMessage(msg, hcsMsg, topicId, isPrivate);\n break;\n case 'burn':\n this.processBurnMessage(msg, hcsMsg, topicId, isPrivate);\n break;\n }\n }\n\n /**\n * Process deploy message\n */\n private processDeployMessage(\n msg: HCS20DeployMessage,\n hcsMsg: TopicMessageMeta,\n topicId: string,\n isPrivate: boolean,\n ): void {\n const normalizedTick = this.normalizeTick(msg.tick);\n if (this.state.deployedPoints.has(normalizedTick)) {\n return;\n }\n const pointsInfo: PointsInfo = {\n name: msg.name,\n tick: normalizedTick,\n maxSupply: msg.max,\n limitPerMint: msg.lim,\n metadata: msg.metadata,\n topicId,\n deployerAccountId: hcsMsg.payer_account_id,\n currentSupply: '0',\n deploymentTimestamp: hcsMsg.consensus_timestamp,\n isPrivate,\n };\n\n this.state.deployedPoints.set(normalizedTick, pointsInfo);\n this.logger.info(`Deployed points: ${normalizedTick}`);\n }\n\n /**\n * Process mint message\n */\n private processMintMessage(\n msg: HCS20MintMessage,\n hcsMsg: TopicMessageMeta,\n topicId: string,\n isPrivate: boolean,\n ): void {\n const normalizedTick = this.normalizeTick(msg.tick);\n const pointsInfo = this.state.deployedPoints.get(normalizedTick);\n\n if (!pointsInfo) return;\n const mintAmount = BigInt(msg.amt);\n const currentSupply = BigInt(pointsInfo.currentSupply);\n const maxSupply = BigInt(pointsInfo.maxSupply);\n\n if (currentSupply + mintAmount > maxSupply) return;\n\n if (pointsInfo.limitPerMint && mintAmount > BigInt(pointsInfo.limitPerMint))\n return;\n pointsInfo.currentSupply = (currentSupply + mintAmount).toString();\n let tickBalances = this.state.balances.get(normalizedTick);\n if (!tickBalances) {\n tickBalances = new Map();\n this.state.balances.set(normalizedTick, tickBalances);\n }\n\n const currentBalance = tickBalances.get(msg.to);\n const newBalance = currentBalance\n ? (BigInt(currentBalance.balance) + mintAmount).toString()\n : msg.amt;\n\n tickBalances.set(msg.to, {\n tick: normalizedTick,\n accountId: msg.to,\n balance: newBalance,\n lastUpdated: hcsMsg.consensus_timestamp,\n });\n this.state.transactions.push({\n id: hcsMsg.transaction_id || `${topicId}-${hcsMsg.sequence_number}`,\n operation: 'mint',\n tick: normalizedTick,\n amount: msg.amt,\n to: msg.to,\n timestamp: hcsMsg.consensus_timestamp,\n sequenceNumber: hcsMsg.sequence_number,\n topicId,\n transactionId: hcsMsg.transaction_id || '',\n memo: msg.m,\n });\n }\n\n /**\n * Process transfer message\n */\n private processTransferMessage(\n msg: HCS20TransferMessage,\n hcsMsg: TopicMessageMeta,\n topicId: string,\n isPrivate: boolean,\n ): void {\n const normalizedTick = this.normalizeTick(msg.tick);\n const tickBalances = this.state.balances.get(normalizedTick);\n\n if (!tickBalances) return;\n if (!isPrivate && hcsMsg.payer_account_id !== msg.from) return;\n\n const senderBalance = tickBalances.get(msg.from);\n if (!senderBalance || BigInt(senderBalance.balance) < BigInt(msg.amt))\n return;\n const transferAmount = BigInt(msg.amt);\n\n senderBalance.balance = (\n BigInt(senderBalance.balance) - transferAmount\n ).toString();\n senderBalance.lastUpdated = hcsMsg.consensus_timestamp;\n\n const receiverBalance = tickBalances.get(msg.to);\n if (receiverBalance) {\n receiverBalance.balance = (\n BigInt(receiverBalance.balance) + transferAmount\n ).toString();\n receiverBalance.lastUpdated = hcsMsg.consensus_timestamp;\n } else {\n tickBalances.set(msg.to, {\n tick: normalizedTick,\n accountId: msg.to,\n balance: msg.amt,\n lastUpdated: hcsMsg.consensus_timestamp,\n });\n }\n this.state.transactions.push({\n id: hcsMsg.transaction_id || `${topicId}-${hcsMsg.sequence_number}`,\n operation: 'transfer',\n tick: normalizedTick,\n amount: msg.amt,\n from: msg.from,\n to: msg.to,\n timestamp: hcsMsg.consensus_timestamp,\n sequenceNumber: hcsMsg.sequence_number,\n topicId,\n transactionId: hcsMsg.transaction_id || '',\n memo: msg.m,\n });\n }\n\n /**\n * Process burn message\n */\n private processBurnMessage(\n msg: HCS20BurnMessage,\n hcsMsg: TopicMessageMeta,\n topicId: string,\n isPrivate: boolean,\n ): void {\n const normalizedTick = this.normalizeTick(msg.tick);\n const pointsInfo = this.state.deployedPoints.get(normalizedTick);\n const tickBalances = this.state.balances.get(normalizedTick);\n\n if (!pointsInfo || !tickBalances) return;\n if (!isPrivate && hcsMsg.payer_account_id !== msg.from) return;\n\n const accountBalance = tickBalances.get(msg.from);\n if (!accountBalance || BigInt(accountBalance.balance) < BigInt(msg.amt))\n return;\n const burnAmount = BigInt(msg.amt);\n\n accountBalance.balance = (\n BigInt(accountBalance.balance) - burnAmount\n ).toString();\n accountBalance.lastUpdated = hcsMsg.consensus_timestamp;\n\n pointsInfo.currentSupply = (\n BigInt(pointsInfo.currentSupply) - burnAmount\n ).toString();\n this.state.transactions.push({\n id: hcsMsg.transaction_id || `${topicId}-${hcsMsg.sequence_number}`,\n operation: 'burn',\n tick: normalizedTick,\n amount: msg.amt,\n from: msg.from,\n timestamp: hcsMsg.consensus_timestamp,\n sequenceNumber: hcsMsg.sequence_number,\n topicId,\n transactionId: hcsMsg.transaction_id || '',\n memo: msg.m,\n });\n }\n\n /**\n * Normalize tick to lowercase and trim\n */\n private normalizeTick(tick: string): string {\n return tick.toLowerCase().trim();\n }\n}\n"],"names":[],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"standards-sdk.es78.js","sources":["../../src/hcs-20/points-indexer.ts"],"sourcesContent":["/**\n * HCS-20 Points Indexer for state calculation\n * Handles async processing of HCS messages to build points state.\n * With larger topics, we do not recommend using this indexer, and\n * instead utilizing more scalable, database or redis based solutions.\n */\n\nimport { Logger } from '../utils/logger';\nimport { HederaMirrorNode } from '../services';\nimport { NetworkType } from '../utils/types';\nimport {\n PointsState,\n PointsInfo,\n HCS20Message,\n HCS20DeployMessage,\n HCS20MintMessage,\n HCS20TransferMessage,\n HCS20BurnMessage,\n HCS20_CONSTANTS,\n HCS20MessageSchema,\n} from './types';\n\ninterface TopicMessageMeta {\n consensus_timestamp: string;\n sequence_number: number;\n payer_account_id: string;\n transaction_id: string;\n}\n\n/**\n * HCS-20 Points Indexer for processing and maintaining points state\n */\nexport class HCS20PointsIndexer {\n private logger: Logger;\n private mirrorNode: HederaMirrorNode;\n private state: PointsState;\n private isProcessing: boolean = false;\n private lastIndexedSequence: Map<string, number> = new Map();\n\n constructor(network: NetworkType, logger?: Logger, mirrorNodeUrl?: string) {\n this.logger =\n logger ||\n new Logger({\n level: 'info',\n module: 'HCS20PointsIndexer',\n });\n this.mirrorNode = new HederaMirrorNode(network, this.logger, {\n customUrl: mirrorNodeUrl,\n });\n this.state = this.initializeState();\n }\n\n /**\n * Initialize empty state\n */\n private initializeState(): PointsState {\n return {\n deployedPoints: new Map(),\n balances: new Map(),\n transactions: [],\n lastProcessedSequence: 0,\n lastProcessedTimestamp: new Date().toISOString(),\n };\n }\n\n /**\n * Get current state snapshot\n */\n getState(): PointsState {\n return {\n ...this.state,\n deployedPoints: new Map(this.state.deployedPoints),\n balances: new Map(this.state.balances),\n transactions: [...this.state.transactions],\n };\n }\n\n /**\n * Get points info for a specific tick\n */\n getPointsInfo(tick: string): PointsInfo | undefined {\n return this.state.deployedPoints.get(this.normalizeTick(tick));\n }\n\n /**\n * Get balance for an account and tick\n */\n getBalance(tick: string, accountId: string): string {\n const normalizedTick = this.normalizeTick(tick);\n const tickBalances = this.state.balances.get(normalizedTick);\n if (!tickBalances) return '0';\n const balance = tickBalances.get(accountId);\n return balance?.balance || '0';\n }\n\n /**\n * Start indexing process\n */\n async startIndexing(options?: {\n publicTopicId?: string;\n registryTopicId?: string;\n includePublicTopic?: boolean;\n includeRegistryTopic?: boolean;\n privateTopics?: string[];\n pollInterval?: number;\n }): Promise<void> {\n if (this.isProcessing) {\n this.logger.warn('Indexing already in progress');\n return;\n }\n\n this.isProcessing = true;\n const includePublicTopic = options?.includePublicTopic !== false;\n const includeRegistryTopic = options?.includeRegistryTopic !== false;\n const publicTopicId = includePublicTopic\n ? options?.publicTopicId || HCS20_CONSTANTS.PUBLIC_TOPIC_ID\n : null;\n const registryTopicId = includeRegistryTopic\n ? options?.registryTopicId || HCS20_CONSTANTS.REGISTRY_TOPIC_ID\n : null;\n const pollInterval = options?.pollInterval || 30000;\n\n await this.indexTopics(\n publicTopicId,\n registryTopicId,\n options?.privateTopics,\n );\n\n const pollTopics = async () => {\n if (!this.isProcessing) return;\n try {\n await this.indexTopics(\n publicTopicId,\n registryTopicId,\n options?.privateTopics,\n );\n } catch (error) {\n this.logger.error('Polling error:', error);\n }\n if (this.isProcessing) {\n setTimeout(pollTopics, pollInterval);\n }\n };\n\n setTimeout(pollTopics, pollInterval);\n }\n\n /**\n * Index topics once and wait for completion\n */\n async indexOnce(options?: {\n publicTopicId?: string;\n registryTopicId?: string;\n includePublicTopic?: boolean;\n includeRegistryTopic?: boolean;\n privateTopics?: string[];\n }): Promise<void> {\n const includePublicTopic = options?.includePublicTopic !== false;\n const includeRegistryTopic = options?.includeRegistryTopic !== false;\n const publicTopicId = includePublicTopic\n ? options?.publicTopicId || HCS20_CONSTANTS.PUBLIC_TOPIC_ID\n : null;\n const registryTopicId = includeRegistryTopic\n ? options?.registryTopicId || HCS20_CONSTANTS.REGISTRY_TOPIC_ID\n : null;\n\n await this.indexTopics(\n publicTopicId,\n registryTopicId,\n options?.privateTopics,\n );\n }\n\n /**\n * Stop indexing process\n */\n stopIndexing(): void {\n this.isProcessing = false;\n this.logger.info('Indexing stopped');\n }\n\n /**\n * Index topics and update state\n */\n private async indexTopics(\n publicTopicId: string | null,\n registryTopicId: string | null,\n privateTopics?: string[],\n ): Promise<void> {\n this.logger.debug('Starting indexing cycle');\n if (publicTopicId) {\n await this.indexTopic(publicTopicId, false);\n }\n const registeredTopics = registryTopicId\n ? await this.getRegisteredTopics(registryTopicId)\n : [];\n const topicsToIndex = [...registeredTopics, ...(privateTopics || [])];\n for (const topicId of topicsToIndex) {\n await this.indexTopic(topicId, true);\n }\n\n this.logger.debug('Indexing cycle complete');\n }\n\n /**\n * Get registered topics from registry\n */\n private async getRegisteredTopics(\n registryTopicId: string,\n ): Promise<string[]> {\n const topics: string[] = [];\n try {\n const messages = await this.mirrorNode.getTopicMessages(registryTopicId, {\n limit: 100,\n order: 'asc',\n });\n\n messages\n .filter(\n message =>\n message.p === 'hcs-20' &&\n message.op === 'register' &&\n typeof message.t_id === 'string',\n )\n .forEach(message => {\n topics.push(message.t_id as string);\n });\n } catch (error) {\n this.logger.error('Failed to fetch registry messages:', error);\n }\n return topics;\n }\n\n /**\n * Index a single topic\n */\n private async indexTopic(topicId: string, isPrivate: boolean): Promise<void> {\n try {\n const lastSequence = this.lastIndexedSequence.get(topicId);\n this.logger.debug(\n `Indexing topic ${topicId}, starting from sequence ${lastSequence || 0}`,\n );\n\n const messages = await this.mirrorNode.getTopicMessages(topicId, {\n sequenceNumber: lastSequence ? lastSequence + 1 : undefined,\n limit: 1000,\n order: 'asc',\n });\n\n this.logger.debug(\n `Fetched ${messages.length} messages from topic ${topicId}`,\n );\n\n let maxSequence = lastSequence || 0;\n\n for (const message of messages) {\n if (message.p !== 'hcs-20') {\n continue;\n }\n\n const parseResult = HCS20MessageSchema.safeParse(message);\n if (!parseResult.success) {\n this.logger.debug('Skipping message due to schema mismatch');\n continue;\n }\n\n const parsedMsg = parseResult.data;\n const sequenceNumber = message.sequence_number ?? 0;\n\n this.logger.debug(\n `Found HCS-20 message: op=${parsedMsg.op}, sequence=${sequenceNumber}`,\n );\n\n if (sequenceNumber > maxSequence) {\n maxSequence = sequenceNumber;\n }\n\n const topicMessage: TopicMessageMeta = {\n consensus_timestamp: message.consensus_timestamp ?? '',\n sequence_number: sequenceNumber,\n payer_account_id: message.payer_account_id ?? message.payer ?? '',\n transaction_id: message.transaction_id ?? '',\n };\n\n this.processMessage(parsedMsg, topicMessage, topicId, isPrivate);\n\n this.state.lastProcessedSequence++;\n this.state.lastProcessedTimestamp = message.consensus_timestamp || '';\n }\n if (maxSequence > (lastSequence || 0)) {\n this.lastIndexedSequence.set(topicId, maxSequence);\n }\n } catch (error) {\n this.logger.error(`Failed to index topic ${topicId}:`, error);\n }\n }\n\n /**\n * Process a single message\n */\n private processMessage(\n msg: HCS20Message,\n hcsMsg: TopicMessageMeta,\n topicId: string,\n isPrivate: boolean,\n ): void {\n switch (msg.op) {\n case 'deploy':\n this.processDeployMessage(msg, hcsMsg, topicId, isPrivate);\n break;\n case 'mint':\n this.processMintMessage(msg, hcsMsg, topicId, isPrivate);\n break;\n case 'transfer':\n this.processTransferMessage(msg, hcsMsg, topicId, isPrivate);\n break;\n case 'burn':\n this.processBurnMessage(msg, hcsMsg, topicId, isPrivate);\n break;\n }\n }\n\n /**\n * Process deploy message\n */\n private processDeployMessage(\n msg: HCS20DeployMessage,\n hcsMsg: TopicMessageMeta,\n topicId: string,\n isPrivate: boolean,\n ): void {\n const normalizedTick = this.normalizeTick(msg.tick);\n if (this.state.deployedPoints.has(normalizedTick)) {\n return;\n }\n const pointsInfo: PointsInfo = {\n name: msg.name,\n tick: normalizedTick,\n maxSupply: msg.max,\n limitPerMint: msg.lim,\n metadata: msg.metadata,\n topicId,\n deployerAccountId: hcsMsg.payer_account_id,\n currentSupply: '0',\n deploymentTimestamp: hcsMsg.consensus_timestamp,\n isPrivate,\n };\n\n this.state.deployedPoints.set(normalizedTick, pointsInfo);\n this.logger.info(`Deployed points: ${normalizedTick}`);\n }\n\n /**\n * Process mint message\n */\n private processMintMessage(\n msg: HCS20MintMessage,\n hcsMsg: TopicMessageMeta,\n topicId: string,\n isPrivate: boolean,\n ): void {\n const normalizedTick = this.normalizeTick(msg.tick);\n const pointsInfo = this.state.deployedPoints.get(normalizedTick);\n\n if (!pointsInfo) return;\n const mintAmount = BigInt(msg.amt);\n const currentSupply = BigInt(pointsInfo.currentSupply);\n const maxSupply = BigInt(pointsInfo.maxSupply);\n\n if (currentSupply + mintAmount > maxSupply) return;\n\n if (pointsInfo.limitPerMint && mintAmount > BigInt(pointsInfo.limitPerMint))\n return;\n pointsInfo.currentSupply = (currentSupply + mintAmount).toString();\n let tickBalances = this.state.balances.get(normalizedTick);\n if (!tickBalances) {\n tickBalances = new Map();\n this.state.balances.set(normalizedTick, tickBalances);\n }\n\n const currentBalance = tickBalances.get(msg.to);\n const newBalance = currentBalance\n ? (BigInt(currentBalance.balance) + mintAmount).toString()\n : msg.amt;\n\n tickBalances.set(msg.to, {\n tick: normalizedTick,\n accountId: msg.to,\n balance: newBalance,\n lastUpdated: hcsMsg.consensus_timestamp,\n });\n this.state.transactions.push({\n id: hcsMsg.transaction_id || `${topicId}-${hcsMsg.sequence_number}`,\n operation: 'mint',\n tick: normalizedTick,\n amount: msg.amt,\n to: msg.to,\n timestamp: hcsMsg.consensus_timestamp,\n sequenceNumber: hcsMsg.sequence_number,\n topicId,\n transactionId: hcsMsg.transaction_id || '',\n memo: msg.m,\n });\n }\n\n /**\n * Process transfer message\n */\n private processTransferMessage(\n msg: HCS20TransferMessage,\n hcsMsg: TopicMessageMeta,\n topicId: string,\n isPrivate: boolean,\n ): void {\n const normalizedTick = this.normalizeTick(msg.tick);\n const tickBalances = this.state.balances.get(normalizedTick);\n\n if (!tickBalances) return;\n if (!isPrivate && hcsMsg.payer_account_id !== msg.from) return;\n\n const senderBalance = tickBalances.get(msg.from);\n if (!senderBalance || BigInt(senderBalance.balance) < BigInt(msg.amt))\n return;\n const transferAmount = BigInt(msg.amt);\n\n senderBalance.balance = (\n BigInt(senderBalance.balance) - transferAmount\n ).toString();\n senderBalance.lastUpdated = hcsMsg.consensus_timestamp;\n\n const receiverBalance = tickBalances.get(msg.to);\n if (receiverBalance) {\n receiverBalance.balance = (\n BigInt(receiverBalance.balance) + transferAmount\n ).toString();\n receiverBalance.lastUpdated = hcsMsg.consensus_timestamp;\n } else {\n tickBalances.set(msg.to, {\n tick: normalizedTick,\n accountId: msg.to,\n balance: msg.amt,\n lastUpdated: hcsMsg.consensus_timestamp,\n });\n }\n this.state.transactions.push({\n id: hcsMsg.transaction_id || `${topicId}-${hcsMsg.sequence_number}`,\n operation: 'transfer',\n tick: normalizedTick,\n amount: msg.amt,\n from: msg.from,\n to: msg.to,\n timestamp: hcsMsg.consensus_timestamp,\n sequenceNumber: hcsMsg.sequence_number,\n topicId,\n transactionId: hcsMsg.transaction_id || '',\n memo: msg.m,\n });\n }\n\n /**\n * Process burn message\n */\n private processBurnMessage(\n msg: HCS20BurnMessage,\n hcsMsg: TopicMessageMeta,\n topicId: string,\n isPrivate: boolean,\n ): void {\n const normalizedTick = this.normalizeTick(msg.tick);\n const pointsInfo = this.state.deployedPoints.get(normalizedTick);\n const tickBalances = this.state.balances.get(normalizedTick);\n\n if (!pointsInfo || !tickBalances) return;\n if (!isPrivate && hcsMsg.payer_account_id !== msg.from) return;\n\n const accountBalance = tickBalances.get(msg.from);\n if (!accountBalance || BigInt(accountBalance.balance) < BigInt(msg.amt))\n return;\n const burnAmount = BigInt(msg.amt);\n\n accountBalance.balance = (\n BigInt(accountBalance.balance) - burnAmount\n ).toString();\n accountBalance.lastUpdated = hcsMsg.consensus_timestamp;\n\n pointsInfo.currentSupply = (\n BigInt(pointsInfo.currentSupply) - burnAmount\n ).toString();\n this.state.transactions.push({\n id: hcsMsg.transaction_id || `${topicId}-${hcsMsg.sequence_number}`,\n operation: 'burn',\n tick: normalizedTick,\n amount: msg.amt,\n from: msg.from,\n timestamp: hcsMsg.consensus_timestamp,\n sequenceNumber: hcsMsg.sequence_number,\n topicId,\n transactionId: hcsMsg.transaction_id || '',\n memo: msg.m,\n });\n }\n\n /**\n * Normalize tick to lowercase and trim\n */\n private normalizeTick(tick: string): string {\n return tick.toLowerCase().trim();\n }\n}\n"],"names":[],"mappings":"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"}
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@hashgraphonline/standards-sdk",
|
|
3
|
-
"version": "0.1.
|
|
3
|
+
"version": "0.1.141",
|
|
4
4
|
"description": "The Hashgraph Online Standards SDK provides a complete implementation of the Hashgraph Consensus Standards (HCS), giving developers all the tools needed to build applications on Hedera.",
|
|
5
5
|
"type": "module",
|
|
6
6
|
"files": [
|