@hashgraphonline/standards-sdk 0.1.141 → 0.1.143
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/README.md +24 -1
- package/dist/cjs/hcs-11/client.d.ts.map +1 -1
- package/dist/cjs/hcs-11/types.d.ts +1 -0
- package/dist/cjs/hcs-11/types.d.ts.map +1 -1
- package/dist/cjs/hcs-16/base-client.d.ts.map +1 -1
- package/dist/cjs/hcs-17/types.d.ts.map +1 -1
- package/dist/cjs/hcs-20/sdk.d.ts.map +1 -1
- package/dist/cjs/hcs-20/types.d.ts +9 -8
- package/dist/cjs/hcs-20/types.d.ts.map +1 -1
- package/dist/cjs/hcs-21/base-client.d.ts +14 -12
- package/dist/cjs/hcs-21/base-client.d.ts.map +1 -1
- package/dist/cjs/hcs-21/browser.d.ts +17 -7
- package/dist/cjs/hcs-21/browser.d.ts.map +1 -1
- package/dist/cjs/hcs-21/index.d.ts +1 -0
- package/dist/cjs/hcs-21/index.d.ts.map +1 -1
- package/dist/cjs/hcs-21/sdk.d.ts +70 -6
- package/dist/cjs/hcs-21/sdk.d.ts.map +1 -1
- package/dist/cjs/hcs-21/tx.d.ts +6 -2
- package/dist/cjs/hcs-21/tx.d.ts.map +1 -1
- package/dist/cjs/hcs-21/types.d.ts +751 -66
- package/dist/cjs/hcs-21/types.d.ts.map +1 -1
- package/dist/cjs/hcs-21/verify.d.ts +6 -0
- package/dist/cjs/hcs-21/verify.d.ts.map +1 -0
- package/dist/cjs/inscribe/inscriber.d.ts +3 -1
- package/dist/cjs/inscribe/inscriber.d.ts.map +1 -1
- package/dist/cjs/inscribe/quote-cache.d.ts.map +1 -1
- package/dist/cjs/inscribe/types.d.ts +7 -0
- package/dist/cjs/inscribe/types.d.ts.map +1 -1
- package/dist/cjs/services/registry-broker/client.d.ts +4 -3
- package/dist/cjs/services/registry-broker/client.d.ts.map +1 -1
- package/dist/cjs/services/registry-broker/private-key-signer.d.ts.map +1 -1
- package/dist/cjs/services/registry-broker/schemas.d.ts +49 -25
- package/dist/cjs/services/registry-broker/schemas.d.ts.map +1 -1
- package/dist/cjs/services/registry-broker/types.d.ts +1 -2
- package/dist/cjs/services/registry-broker/types.d.ts.map +1 -1
- package/dist/cjs/services/types.d.ts +1 -0
- package/dist/cjs/services/types.d.ts.map +1 -1
- package/dist/cjs/standards-sdk.cjs +2 -2
- package/dist/cjs/standards-sdk.cjs.map +1 -1
- package/dist/cjs/utils/dynamic-import.d.ts +1 -0
- package/dist/cjs/utils/dynamic-import.d.ts.map +1 -1
- package/dist/es/hcs-11/client.d.ts.map +1 -1
- package/dist/es/hcs-11/types.d.ts +1 -0
- package/dist/es/hcs-11/types.d.ts.map +1 -1
- package/dist/es/hcs-16/base-client.d.ts.map +1 -1
- package/dist/es/hcs-17/types.d.ts.map +1 -1
- package/dist/es/hcs-20/sdk.d.ts.map +1 -1
- package/dist/es/hcs-20/types.d.ts +9 -8
- package/dist/es/hcs-20/types.d.ts.map +1 -1
- package/dist/es/hcs-21/base-client.d.ts +14 -12
- package/dist/es/hcs-21/base-client.d.ts.map +1 -1
- package/dist/es/hcs-21/browser.d.ts +17 -7
- package/dist/es/hcs-21/browser.d.ts.map +1 -1
- package/dist/es/hcs-21/index.d.ts +1 -0
- package/dist/es/hcs-21/index.d.ts.map +1 -1
- package/dist/es/hcs-21/sdk.d.ts +70 -6
- package/dist/es/hcs-21/sdk.d.ts.map +1 -1
- package/dist/es/hcs-21/tx.d.ts +6 -2
- package/dist/es/hcs-21/tx.d.ts.map +1 -1
- package/dist/es/hcs-21/types.d.ts +751 -66
- package/dist/es/hcs-21/types.d.ts.map +1 -1
- package/dist/es/hcs-21/verify.d.ts +6 -0
- package/dist/es/hcs-21/verify.d.ts.map +1 -0
- package/dist/es/inscribe/inscriber.d.ts +3 -1
- package/dist/es/inscribe/inscriber.d.ts.map +1 -1
- package/dist/es/inscribe/quote-cache.d.ts.map +1 -1
- package/dist/es/inscribe/types.d.ts +7 -0
- package/dist/es/inscribe/types.d.ts.map +1 -1
- package/dist/es/services/registry-broker/client.d.ts +4 -3
- package/dist/es/services/registry-broker/client.d.ts.map +1 -1
- package/dist/es/services/registry-broker/private-key-signer.d.ts.map +1 -1
- package/dist/es/services/registry-broker/schemas.d.ts +49 -25
- package/dist/es/services/registry-broker/schemas.d.ts.map +1 -1
- package/dist/es/services/registry-broker/types.d.ts +1 -2
- package/dist/es/services/registry-broker/types.d.ts.map +1 -1
- package/dist/es/services/types.d.ts +1 -0
- package/dist/es/services/types.d.ts.map +1 -1
- package/dist/es/standards-sdk.es.js +64 -51
- package/dist/es/standards-sdk.es.js.map +1 -1
- package/dist/es/standards-sdk.es10.js +2 -2
- package/dist/es/standards-sdk.es100.js +26 -229
- package/dist/es/standards-sdk.es100.js.map +1 -1
- package/dist/es/standards-sdk.es101.js +228 -109
- package/dist/es/standards-sdk.es101.js.map +1 -1
- package/dist/es/standards-sdk.es102.js +94 -15
- package/dist/es/standards-sdk.es102.js.map +1 -1
- package/dist/es/standards-sdk.es103.js +30 -80
- package/dist/es/standards-sdk.es103.js.map +1 -1
- package/dist/es/standards-sdk.es104.js +80 -27
- package/dist/es/standards-sdk.es104.js.map +1 -1
- package/dist/es/standards-sdk.es105.js +25 -136
- package/dist/es/standards-sdk.es105.js.map +1 -1
- package/dist/es/standards-sdk.es106.js +140 -27
- package/dist/es/standards-sdk.es106.js.map +1 -1
- package/dist/es/standards-sdk.es107.js +27 -20
- package/dist/es/standards-sdk.es107.js.map +1 -1
- package/dist/es/standards-sdk.es108.js +18 -156
- package/dist/es/standards-sdk.es108.js.map +1 -1
- package/dist/es/standards-sdk.es109.js +148 -196
- package/dist/es/standards-sdk.es109.js.map +1 -1
- package/dist/es/standards-sdk.es110.js +160 -747
- package/dist/es/standards-sdk.es110.js.map +1 -1
- package/dist/es/standards-sdk.es111.js +786 -9
- package/dist/es/standards-sdk.es111.js.map +1 -1
- package/dist/es/standards-sdk.es112.js +13 -567
- package/dist/es/standards-sdk.es112.js.map +1 -1
- package/dist/es/standards-sdk.es113.js +541 -576
- package/dist/es/standards-sdk.es113.js.map +1 -1
- package/dist/es/standards-sdk.es114.js +601 -12
- package/dist/es/standards-sdk.es114.js.map +1 -1
- package/dist/es/standards-sdk.es115.js +13 -2
- package/dist/es/standards-sdk.es115.js.map +1 -1
- package/dist/es/standards-sdk.es116.js +2 -83
- package/dist/es/standards-sdk.es116.js.map +1 -1
- package/dist/es/standards-sdk.es117.js +80 -36
- package/dist/es/standards-sdk.es117.js.map +1 -1
- package/dist/es/standards-sdk.es118.js +39 -2
- package/dist/es/standards-sdk.es118.js.map +1 -1
- package/dist/es/standards-sdk.es119.js +2 -223
- package/dist/es/standards-sdk.es119.js.map +1 -1
- package/dist/es/standards-sdk.es12.js +1 -1
- package/dist/es/standards-sdk.es120.js +193 -1110
- package/dist/es/standards-sdk.es120.js.map +1 -1
- package/dist/es/standards-sdk.es121.js +1059 -225
- package/dist/es/standards-sdk.es121.js.map +1 -1
- package/dist/es/standards-sdk.es122.js +303 -419
- package/dist/es/standards-sdk.es122.js.map +1 -1
- package/dist/es/standards-sdk.es123.js +418 -351
- package/dist/es/standards-sdk.es123.js.map +1 -1
- package/dist/es/standards-sdk.es124.js +348 -754
- package/dist/es/standards-sdk.es124.js.map +1 -1
- package/dist/es/standards-sdk.es125.js +854 -178
- package/dist/es/standards-sdk.es125.js.map +1 -1
- package/dist/es/standards-sdk.es126.js +153 -1512
- package/dist/es/standards-sdk.es126.js.map +1 -1
- package/dist/es/standards-sdk.es127.js +1373 -1977
- package/dist/es/standards-sdk.es127.js.map +1 -1
- package/dist/es/standards-sdk.es128.js +2211 -50
- package/dist/es/standards-sdk.es128.js.map +1 -1
- package/dist/es/standards-sdk.es129.js +59 -79
- package/dist/es/standards-sdk.es129.js.map +1 -1
- package/dist/es/standards-sdk.es13.js +1 -1
- package/dist/es/standards-sdk.es130.js +80 -152
- package/dist/es/standards-sdk.es130.js.map +1 -1
- package/dist/es/standards-sdk.es131.js +159 -7
- package/dist/es/standards-sdk.es131.js.map +1 -1
- package/dist/es/standards-sdk.es132.js +7 -86
- package/dist/es/standards-sdk.es132.js.map +1 -1
- package/dist/es/standards-sdk.es133.js +65 -44
- package/dist/es/standards-sdk.es133.js.map +1 -1
- package/dist/es/standards-sdk.es134.js +65 -28
- package/dist/es/standards-sdk.es134.js.map +1 -1
- package/dist/es/standards-sdk.es135.js +28 -138
- package/dist/es/standards-sdk.es135.js.map +1 -1
- package/dist/es/standards-sdk.es136.js +133 -37
- package/dist/es/standards-sdk.es136.js.map +1 -1
- package/dist/es/standards-sdk.es137.js +42 -732
- package/dist/es/standards-sdk.es137.js.map +1 -1
- package/dist/es/standards-sdk.es138.js +746 -12254
- package/dist/es/standards-sdk.es138.js.map +1 -1
- package/dist/es/standards-sdk.es139.js +12269 -12
- package/dist/es/standards-sdk.es139.js.map +1 -1
- package/dist/es/standards-sdk.es14.js +1 -1
- package/dist/es/standards-sdk.es141.js +20 -2
- package/dist/es/standards-sdk.es141.js.map +1 -1
- package/dist/es/standards-sdk.es142.js +13 -168
- package/dist/es/standards-sdk.es142.js.map +1 -1
- package/dist/es/standards-sdk.es143.js +139 -289
- package/dist/es/standards-sdk.es143.js.map +1 -1
- package/dist/es/standards-sdk.es144.js +274 -298
- package/dist/es/standards-sdk.es144.js.map +1 -1
- package/dist/es/standards-sdk.es145.js +262 -369
- package/dist/es/standards-sdk.es145.js.map +1 -1
- package/dist/es/standards-sdk.es146.js +316 -194
- package/dist/es/standards-sdk.es146.js.map +1 -1
- package/dist/es/standards-sdk.es147.js +319 -64
- package/dist/es/standards-sdk.es147.js.map +1 -1
- package/dist/es/standards-sdk.es148.js +79 -0
- package/dist/es/standards-sdk.es148.js.map +1 -0
- package/dist/es/standards-sdk.es15.js +1 -1
- package/dist/es/standards-sdk.es16.js +1 -1
- package/dist/es/standards-sdk.es17.js +5 -10
- package/dist/es/standards-sdk.es17.js.map +1 -1
- package/dist/es/standards-sdk.es19.js +12 -16
- package/dist/es/standards-sdk.es19.js.map +1 -1
- package/dist/es/standards-sdk.es20.js +9 -13
- package/dist/es/standards-sdk.es20.js.map +1 -1
- package/dist/es/standards-sdk.es21.js +1 -1
- package/dist/es/standards-sdk.es22.js +1 -1
- package/dist/es/standards-sdk.es23.js +1 -1
- package/dist/es/standards-sdk.es24.js +1 -1
- package/dist/es/standards-sdk.es25.js +1 -1
- package/dist/es/standards-sdk.es26.js +1 -1
- package/dist/es/standards-sdk.es27.js +1 -1
- package/dist/es/standards-sdk.es28.js +16 -18
- package/dist/es/standards-sdk.es28.js.map +1 -1
- package/dist/es/standards-sdk.es29.js.map +1 -1
- package/dist/es/standards-sdk.es3.js +2 -2
- package/dist/es/standards-sdk.es31.js +2 -2
- package/dist/es/standards-sdk.es32.js +4 -4
- package/dist/es/standards-sdk.es33.js +1 -1
- package/dist/es/standards-sdk.es36.js +8 -12
- package/dist/es/standards-sdk.es36.js.map +1 -1
- package/dist/es/standards-sdk.es37.js +4 -4
- package/dist/es/standards-sdk.es38.js +2 -2
- package/dist/es/standards-sdk.es39.js +2 -2
- package/dist/es/standards-sdk.es40.js +1 -1
- package/dist/es/standards-sdk.es41.js +1 -1
- package/dist/es/standards-sdk.es42.js +2 -2
- package/dist/es/standards-sdk.es47.js +1 -1
- package/dist/es/standards-sdk.es5.js +2 -2
- package/dist/es/standards-sdk.es52.js +1 -1
- package/dist/es/standards-sdk.es54.js +1 -1
- package/dist/es/standards-sdk.es57.js +1 -1
- package/dist/es/standards-sdk.es6.js +2 -2
- package/dist/es/standards-sdk.es61.js +7 -11
- package/dist/es/standards-sdk.es61.js.map +1 -1
- package/dist/es/standards-sdk.es65.js +2 -2
- package/dist/es/standards-sdk.es66.js +3 -3
- package/dist/es/standards-sdk.es69.js +2 -2
- package/dist/es/standards-sdk.es7.js +2 -2
- package/dist/es/standards-sdk.es70.js +3 -3
- package/dist/es/standards-sdk.es71.js +2 -2
- package/dist/es/standards-sdk.es72.js +1 -1
- package/dist/es/standards-sdk.es73.js.map +1 -1
- package/dist/es/standards-sdk.es75.js +2 -2
- package/dist/es/standards-sdk.es77.js +5 -3
- package/dist/es/standards-sdk.es77.js.map +1 -1
- package/dist/es/standards-sdk.es78.js +4 -10
- package/dist/es/standards-sdk.es78.js.map +1 -1
- package/dist/es/standards-sdk.es79.js +1 -1
- package/dist/es/standards-sdk.es8.js +1 -1
- package/dist/es/standards-sdk.es80.js +113 -29
- package/dist/es/standards-sdk.es80.js.map +1 -1
- package/dist/es/standards-sdk.es82.js +23 -4
- package/dist/es/standards-sdk.es82.js.map +1 -1
- package/dist/es/standards-sdk.es83.js +39 -14
- package/dist/es/standards-sdk.es83.js.map +1 -1
- package/dist/es/standards-sdk.es84.js +198 -17
- package/dist/es/standards-sdk.es84.js.map +1 -1
- package/dist/es/standards-sdk.es85.js +256 -9
- package/dist/es/standards-sdk.es85.js.map +1 -1
- package/dist/es/standards-sdk.es86.js +55 -21
- package/dist/es/standards-sdk.es86.js.map +1 -1
- package/dist/es/standards-sdk.es87.js +22 -75
- package/dist/es/standards-sdk.es87.js.map +1 -1
- package/dist/es/standards-sdk.es88.js +45 -30
- package/dist/es/standards-sdk.es88.js.map +1 -1
- package/dist/es/standards-sdk.es89.js +57 -22
- package/dist/es/standards-sdk.es89.js.map +1 -1
- package/dist/es/standards-sdk.es90.js +28 -23
- package/dist/es/standards-sdk.es90.js.map +1 -1
- package/dist/es/standards-sdk.es91.js +23 -167
- package/dist/es/standards-sdk.es91.js.map +1 -1
- package/dist/es/standards-sdk.es92.js +158 -119
- package/dist/es/standards-sdk.es92.js.map +1 -1
- package/dist/es/standards-sdk.es93.js +68 -95
- package/dist/es/standards-sdk.es93.js.map +1 -1
- package/dist/es/standards-sdk.es94.js +136 -119
- package/dist/es/standards-sdk.es94.js.map +1 -1
- package/dist/es/standards-sdk.es95.js +139 -39
- package/dist/es/standards-sdk.es95.js.map +1 -1
- package/dist/es/standards-sdk.es96.js +42 -257
- package/dist/es/standards-sdk.es96.js.map +1 -1
- package/dist/es/standards-sdk.es97.js +243 -80
- package/dist/es/standards-sdk.es97.js.map +1 -1
- package/dist/es/standards-sdk.es98.js +47 -48
- package/dist/es/standards-sdk.es98.js.map +1 -1
- package/dist/es/standards-sdk.es99.js +100 -28
- package/dist/es/standards-sdk.es99.js.map +1 -1
- package/dist/es/utils/dynamic-import.d.ts +1 -0
- package/dist/es/utils/dynamic-import.d.ts.map +1 -1
- package/package.json +3 -3
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"standards-sdk.es85.js","sources":["../../src/hcs-21/browser.ts"],"sourcesContent":["import type { HashinalsWalletConnectSDK } from '@hashgraphonline/hashinal-wc';\nimport type { ILogger } from '../utils/logger';\nimport { NetworkType } from '../utils/types';\nimport { HCS21BaseClient, BuildDeclarationParams } from './base-client';\nimport { PackageDeclaration, PackageDeclarationEnvelope } from './types';\n\nexport interface BrowserHCS21ClientConfig {\n network: NetworkType;\n hwc: HashinalsWalletConnectSDK;\n logger?: ILogger;\n}\n\nexport class HCS21BrowserClient extends HCS21BaseClient {\n private readonly hwc: HashinalsWalletConnectSDK;\n\n constructor(config: BrowserHCS21ClientConfig) {\n super({ network: config.network, logger: config.logger });\n this.hwc = config.hwc;\n }\n\n async publishDeclaration(params: {\n topicId: string;\n declaration: PackageDeclaration | BuildDeclarationParams;\n }): Promise<void> {\n const declaration =\n 'p' in params.declaration\n ? this.validateDeclaration(params.declaration)\n : this.buildDeclaration(params.declaration);\n\n await this.hwc.submitMessageToTopic(\n params.topicId,\n JSON.stringify(declaration),\n );\n }\n\n async fetchDeclarations(\n topicId: string,\n ): Promise<PackageDeclarationEnvelope[]> {\n const { messages = [] } = await this.hwc.getMessages(topicId);\n const envelopes: PackageDeclarationEnvelope[] = [];\n\n for (const message of messages) {\n try {\n const declaration = this.validateDeclaration(message.message);\n envelopes.push({\n declaration,\n consensusTimestamp: message.consensus_timestamp,\n sequenceNumber: Number(message.sequence_number || 0),\n payer: message.payer_account_id,\n });\n } catch (error) {\n const detail = error instanceof Error ? error.message : 'unknown error';\n this.logger.warn(`Skipping invalid HCS-21 browser message: ${detail}`);\n }\n }\n\n return envelopes;\n }\n}\n"],"names":[],"mappings":";AAYO,MAAM,2BAA2B,gBAAgB;AAAA,EAGtD,YAAY,QAAkC;AAC5C,UAAM,EAAE,SAAS,OAAO,SAAS,QAAQ,OAAO,QAAQ;AACxD,SAAK,MAAM,OAAO;AAAA,EACpB;AAAA,EAEA,MAAM,mBAAmB,QAGP;AAChB,UAAM,cACJ,OAAO,OAAO,cACV,KAAK,oBAAoB,OAAO,WAAW,IAC3C,KAAK,iBAAiB,OAAO,WAAW;AAE9C,UAAM,KAAK,IAAI;AAAA,MACb,OAAO;AAAA,MACP,KAAK,UAAU,WAAW;AAAA,IAAA;AAAA,EAE9B;AAAA,EAEA,MAAM,kBACJ,SACuC;AACvC,UAAM,EAAE,WAAW,GAAC,IAAM,MAAM,KAAK,IAAI,YAAY,OAAO;AAC5D,UAAM,YAA0C,CAAA;AAEhD,eAAW,WAAW,UAAU;AAC9B,UAAI;AACF,cAAM,cAAc,KAAK,oBAAoB,QAAQ,OAAO;AAC5D,kBAAU,KAAK;AAAA,UACb;AAAA,UACA,oBAAoB,QAAQ;AAAA,UAC5B,gBAAgB,OAAO,QAAQ,mBAAmB,CAAC;AAAA,UACnD,OAAO,QAAQ;AAAA,QAAA,CAChB;AAAA,MACH,SAAS,OAAO;AACd,cAAM,SAAS,iBAAiB,QAAQ,MAAM,UAAU;AACxD,aAAK,OAAO,KAAK,4CAA4C,MAAM,EAAE;AAAA,MACvE;AAAA,IACF;AAEA,WAAO;AAAA,EACT;AACF;"}
|
|
1
|
+
{"version":3,"file":"standards-sdk.es85.js","sources":["../../src/hcs-21/browser.ts"],"sourcesContent":["import type { HashinalsWalletConnectSDK } from '@hashgraphonline/hashinal-wc';\nimport {\n AccountId,\n PublicKey,\n Status,\n Transaction,\n TransactionId,\n TransactionReceipt,\n} from '@hashgraph/sdk';\nimport Long from 'long';\nimport type { ILogger } from '../utils/logger';\nimport { NetworkType } from '../utils/types';\nimport {\n HCS21BaseClient,\n BuildDeclarationParams,\n FetchDeclarationsOptions,\n} from './base-client';\nimport type {\n CreateRegistryTopicParams,\n CreateAdapterVersionPointerTopicParams,\n CreateRegistryDiscoveryTopicParams,\n CreateAdapterCategoryTopicParams,\n PublishVersionPointerParams,\n RegisterCategoryTopicParams,\n PublishCategoryEntryParams,\n PublishDeclarationParams,\n PublishDeclarationResult,\n VersionPointerResolution,\n} from './sdk';\nimport {\n AdapterDeclaration,\n AdapterDeclarationEnvelope,\n HCS21TopicType,\n} from './types';\nimport { HCS21ValidationError } from './errors';\nimport { buildHcs21CreateRegistryTx, buildHcs21MessageTx } from './tx';\nimport { buildHcs2CreateRegistryTx, buildHcs2RegisterTx } from '../hcs-2/tx';\nimport { HCS2RegistryType } from '../hcs-2/types';\n\nexport interface BrowserHCS21ClientConfig {\n network: NetworkType;\n hwc: HashinalsWalletConnectSDK;\n logger?: ILogger;\n}\n\nexport class HCS21BrowserClient extends HCS21BaseClient {\n private readonly hwc: HashinalsWalletConnectSDK;\n private signerCache?: { accountId: string; publicKey: PublicKey };\n\n constructor(config: BrowserHCS21ClientConfig) {\n super({ network: config.network, logger: config.logger });\n this.hwc = config.hwc;\n }\n\n async createRegistryTopic(\n params: CreateRegistryTopicParams,\n ): Promise<string> {\n const { publicKey } = await this.getSignerContext();\n const tx = buildHcs21CreateRegistryTx({\n ttl: params.ttl,\n indexed: params.indexed,\n type: params.type,\n metaTopicId: params.metaTopicId,\n adminKey: params.adminKey,\n submitKey: params.submitKey,\n operatorPublicKey: publicKey,\n });\n\n if (params.transactionMemo) {\n tx.setTransactionMemo(params.transactionMemo);\n }\n\n const { receipt } = await this.executeWithWallet(tx);\n\n if (receipt.status !== Status.Success || !receipt.topicId) {\n throw new HCS21ValidationError(\n 'Failed to create HCS-21 registry topic',\n 'invalid_payload',\n );\n }\n\n return receipt.topicId.toString();\n }\n\n async createAdapterVersionPointerTopic(\n params: CreateAdapterVersionPointerTopicParams,\n ): Promise<string> {\n const { publicKey } = await this.getSignerContext();\n const tx = buildHcs2CreateRegistryTx({\n registryType: HCS2RegistryType.NON_INDEXED,\n ttl: params.ttl,\n adminKey: params.adminKey,\n submitKey: params.submitKey,\n memoOverride: params.memoOverride,\n operatorPublicKey: publicKey,\n });\n\n if (params.transactionMemo) {\n tx.setTransactionMemo(params.transactionMemo);\n }\n\n const { receipt } = await this.executeWithWallet(tx);\n\n if (receipt.status !== Status.Success || !receipt.topicId) {\n throw new HCS21ValidationError(\n 'Failed to create HCS-2 registry version topic',\n 'invalid_payload',\n );\n }\n\n return receipt.topicId.toString();\n }\n\n async createRegistryDiscoveryTopic(\n params: CreateRegistryDiscoveryTopicParams,\n ): Promise<string> {\n const { publicKey } = await this.getSignerContext();\n const tx = buildHcs2CreateRegistryTx({\n registryType: HCS2RegistryType.INDEXED,\n ttl: params.ttl,\n adminKey: params.adminKey,\n submitKey: params.submitKey,\n memoOverride: params.memoOverride,\n operatorPublicKey: publicKey,\n });\n\n if (params.transactionMemo) {\n tx.setTransactionMemo(params.transactionMemo);\n }\n\n const { receipt } = await this.executeWithWallet(tx);\n\n if (receipt.status !== Status.Success || !receipt.topicId) {\n throw new HCS21ValidationError(\n 'Failed to create registry-of-registries topic',\n 'invalid_payload',\n );\n }\n\n return receipt.topicId.toString();\n }\n\n async createAdapterCategoryTopic(\n params: CreateAdapterCategoryTopicParams,\n ): Promise<string> {\n const { publicKey } = await this.getSignerContext();\n const tx = buildHcs21CreateRegistryTx({\n ttl: params.ttl,\n indexed: params.indexed ?? 0,\n type: HCS21TopicType.ADAPTER_CATEGORY,\n metaTopicId: params.metaTopicId,\n adminKey: params.adminKey,\n submitKey: params.submitKey,\n operatorPublicKey: publicKey,\n });\n\n if (params.transactionMemo) {\n tx.setTransactionMemo(params.transactionMemo);\n }\n\n const { receipt } = await this.executeWithWallet(tx);\n\n if (receipt.status !== Status.Success || !receipt.topicId) {\n throw new HCS21ValidationError(\n 'Failed to create adapter category topic',\n 'invalid_payload',\n );\n }\n\n return receipt.topicId.toString();\n }\n\n async publishVersionPointer(\n params: PublishVersionPointerParams,\n ): Promise<PublishDeclarationResult> {\n const tx = buildHcs2RegisterTx({\n registryTopicId: params.versionTopicId,\n targetTopicId: params.declarationTopicId,\n memo: params.memo,\n analyticsMemo: params.transactionMemo,\n });\n\n const { receipt, transactionId } = await this.executeWithWallet(tx);\n\n if (receipt.status !== Status.Success) {\n throw new HCS21ValidationError(\n 'Failed to publish registry version pointer',\n 'invalid_payload',\n );\n }\n\n return {\n sequenceNumber: this.toNumber(receipt.topicSequenceNumber),\n transactionId,\n };\n }\n\n async resolveVersionPointer(\n versionTopicId: string,\n ): Promise<VersionPointerResolution> {\n const [latest] = await this.mirrorNode.getTopicMessages(versionTopicId, {\n limit: 1,\n order: 'desc',\n });\n\n if (!latest) {\n throw new HCS21ValidationError(\n 'Version pointer topic has no messages',\n 'invalid_payload',\n );\n }\n\n const declarationTopicId = (latest as { t_id?: unknown }).t_id;\n\n if (\n typeof declarationTopicId !== 'string' ||\n declarationTopicId.length === 0\n ) {\n throw new HCS21ValidationError(\n 'Version pointer topic does not include a declaration topic ID (`t_id`)',\n 'invalid_payload',\n );\n }\n\n const rawSequence =\n typeof latest.sequence_number === 'number'\n ? latest.sequence_number\n : Number(latest.sequence_number);\n const sequenceNumber = Number.isFinite(rawSequence) ? rawSequence : 0;\n\n return {\n versionTopicId,\n declarationTopicId,\n sequenceNumber,\n payer: (latest as { payer?: string }).payer,\n memo: (latest as { m?: string }).m,\n op: (latest as { op?: string }).op,\n };\n }\n\n async registerCategoryTopic(\n params: RegisterCategoryTopicParams,\n ): Promise<PublishDeclarationResult> {\n const tx = buildHcs2RegisterTx({\n registryTopicId: params.discoveryTopicId,\n targetTopicId: params.categoryTopicId,\n metadata: params.metadata,\n memo: params.memo,\n analyticsMemo: params.transactionMemo,\n });\n\n const { receipt, transactionId } = await this.executeWithWallet(tx);\n\n if (receipt.status !== Status.Success) {\n throw new HCS21ValidationError(\n 'Failed to register adapter category topic',\n 'invalid_payload',\n );\n }\n\n return {\n sequenceNumber: this.toNumber(receipt.topicSequenceNumber),\n transactionId,\n };\n }\n\n async publishCategoryEntry(\n params: PublishCategoryEntryParams,\n ): Promise<PublishDeclarationResult> {\n const memo = params.memo ?? `adapter:${params.adapterId}`;\n const tx = buildHcs2RegisterTx({\n registryTopicId: params.categoryTopicId,\n targetTopicId: params.versionTopicId,\n metadata: params.metadata,\n memo,\n analyticsMemo: params.transactionMemo,\n });\n\n const { receipt, transactionId } = await this.executeWithWallet(tx);\n\n if (receipt.status !== Status.Success) {\n throw new HCS21ValidationError(\n 'Failed to publish adapter category entry',\n 'invalid_payload',\n );\n }\n\n return {\n sequenceNumber: this.toNumber(receipt.topicSequenceNumber),\n transactionId,\n };\n }\n\n async publishDeclaration(\n params: PublishDeclarationParams,\n ): Promise<PublishDeclarationResult> {\n const declaration =\n 'p' in params.declaration\n ? this.validateDeclaration(params.declaration)\n : this.buildDeclaration(params.declaration);\n\n const tx = buildHcs21MessageTx({\n topicId: params.topicId,\n declaration,\n transactionMemo: params.transactionMemo,\n });\n\n const { receipt, transactionId } = await this.executeWithWallet(tx);\n\n if (receipt.status !== Status.Success) {\n throw new HCS21ValidationError(\n 'Failed to submit HCS-21 declaration',\n 'invalid_payload',\n );\n }\n\n return {\n sequenceNumber: this.toNumber(receipt.topicSequenceNumber),\n transactionId,\n };\n }\n\n async fetchDeclarations(\n topicId: string,\n options?: FetchDeclarationsOptions,\n ): Promise<AdapterDeclarationEnvelope[]> {\n const { messages = [] } = await this.hwc.getMessages(topicId);\n const envelopes: AdapterDeclarationEnvelope[] = [];\n\n for (const message of messages) {\n if (!message || message.p !== 'hcs-21') {\n continue;\n }\n\n try {\n const declaration = this.validateDeclaration(message);\n envelopes.push({\n declaration,\n consensusTimestamp: message.consensus_timestamp,\n sequenceNumber: Number(message.sequence_number ?? 0),\n payer: message.payer,\n });\n } catch (error) {\n const detail = error instanceof Error ? error.message : 'unknown error';\n this.logger.warn(`Skipping invalid HCS-21 browser message: ${detail}`);\n }\n }\n\n const ordered =\n options?.order === 'desc'\n ? [...envelopes].sort((a, b) => b.sequenceNumber - a.sequenceNumber)\n : envelopes;\n\n if (options?.limit && options.limit > 0) {\n return ordered.slice(0, options.limit);\n }\n\n return ordered;\n }\n\n private async getSignerContext(): Promise<{\n accountId: string;\n publicKey: PublicKey;\n }> {\n if (this.signerCache) {\n return this.signerCache;\n }\n\n const accountInfo = this.hwc.getAccountInfo?.();\n const accountId =\n typeof accountInfo === 'string' ? accountInfo : accountInfo?.accountId;\n\n if (!accountId) {\n throw new HCS21ValidationError(\n 'Wallet is not connected',\n 'invalid_payload',\n );\n }\n\n const accountResponse = await this.hwc.requestAccount(accountId);\n const key = accountResponse?.key?.key;\n\n if (!key) {\n throw new HCS21ValidationError(\n 'Unable to resolve wallet public key',\n 'invalid_payload',\n );\n }\n\n const publicKey = PublicKey.fromString(key);\n this.signerCache = { accountId, publicKey };\n return this.signerCache;\n }\n\n private async executeWithWallet<T extends Transaction>(\n tx: T,\n ): Promise<{ receipt: TransactionReceipt; transactionId: string }> {\n const { accountId } = await this.getSignerContext();\n const txId = TransactionId.generate(AccountId.fromString(accountId));\n tx.setTransactionId(txId);\n const receipt = await this.hwc.executeTransaction(tx, false);\n return {\n receipt,\n transactionId: txId.toString(),\n };\n }\n\n private toNumber(value?: number | Long | null): number | undefined {\n if (typeof value === 'number') {\n return value;\n }\n if (value && typeof (value as Long).toNumber === 'function') {\n return (value as Long).toNumber();\n }\n return undefined;\n }\n}\n"],"names":[],"mappings":"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"}
|
|
@@ -1,30 +1,64 @@
|
|
|
1
|
-
import {
|
|
2
|
-
|
|
3
|
-
|
|
4
|
-
|
|
5
|
-
|
|
6
|
-
if (typeof params.maxAutomaticTokenAssociations === "number") {
|
|
7
|
-
tx.setMaxAutomaticTokenAssociations(params.maxAutomaticTokenAssociations);
|
|
1
|
+
import { PublicKey } from "@hashgraph/sdk";
|
|
2
|
+
import { createHash } from "crypto";
|
|
3
|
+
function sortObject(value) {
|
|
4
|
+
if (Array.isArray(value)) {
|
|
5
|
+
return value.map(sortObject);
|
|
8
6
|
}
|
|
9
|
-
if (
|
|
10
|
-
|
|
7
|
+
if (value && typeof value === "object") {
|
|
8
|
+
const entries = Object.entries(value).sort(
|
|
9
|
+
([a], [b]) => a < b ? -1 : a > b ? 1 : 0
|
|
10
|
+
);
|
|
11
|
+
const sorted = {};
|
|
12
|
+
for (const [key, val] of entries) {
|
|
13
|
+
sorted[key] = sortObject(val);
|
|
14
|
+
}
|
|
15
|
+
return sorted;
|
|
11
16
|
}
|
|
12
|
-
return
|
|
17
|
+
return value;
|
|
13
18
|
}
|
|
14
|
-
function
|
|
15
|
-
const
|
|
16
|
-
|
|
17
|
-
|
|
18
|
-
|
|
19
|
-
|
|
19
|
+
function canonicalize(value) {
|
|
20
|
+
const sorted = sortObject(value);
|
|
21
|
+
return JSON.stringify(sorted);
|
|
22
|
+
}
|
|
23
|
+
function verifyDeclarationSignature(declaration, publisherPublicKey) {
|
|
24
|
+
if (!declaration.signature) {
|
|
25
|
+
return false;
|
|
26
|
+
}
|
|
27
|
+
try {
|
|
28
|
+
const { signature, ...unsigned } = declaration;
|
|
29
|
+
const payload = canonicalize(unsigned);
|
|
30
|
+
const signatureBytes = Buffer.from(signature, "base64");
|
|
31
|
+
const publicKey = PublicKey.fromString(publisherPublicKey);
|
|
32
|
+
return publicKey.verify(Buffer.from(payload, "utf8"), signatureBytes);
|
|
33
|
+
} catch {
|
|
34
|
+
return false;
|
|
20
35
|
}
|
|
21
|
-
|
|
22
|
-
|
|
36
|
+
}
|
|
37
|
+
function verifyManifestSignature(manifest, signatureBase64, publisherPublicKey) {
|
|
38
|
+
try {
|
|
39
|
+
const payload = canonicalize(manifest);
|
|
40
|
+
const signatureBytes = Buffer.from(signatureBase64, "base64");
|
|
41
|
+
const publicKey = PublicKey.fromString(publisherPublicKey);
|
|
42
|
+
return publicKey.verify(Buffer.from(payload, "utf8"), signatureBytes);
|
|
43
|
+
} catch {
|
|
44
|
+
return false;
|
|
23
45
|
}
|
|
24
|
-
|
|
46
|
+
}
|
|
47
|
+
function normalizeDigest(value) {
|
|
48
|
+
return value.replace(/^sha384[-:]?/i, "").trim().toLowerCase();
|
|
49
|
+
}
|
|
50
|
+
function verifyArtifactDigest(artifact, expectedDigest) {
|
|
51
|
+
const hash = createHash("sha384");
|
|
52
|
+
hash.update(artifact);
|
|
53
|
+
const hex = hash.digest("hex").toLowerCase();
|
|
54
|
+
const base64 = Buffer.from(hex, "hex").toString("base64").toLowerCase();
|
|
55
|
+
const expected = normalizeDigest(expectedDigest);
|
|
56
|
+
return expected === hex || expected === base64;
|
|
25
57
|
}
|
|
26
58
|
export {
|
|
27
|
-
|
|
28
|
-
|
|
59
|
+
canonicalize,
|
|
60
|
+
verifyArtifactDigest,
|
|
61
|
+
verifyDeclarationSignature,
|
|
62
|
+
verifyManifestSignature
|
|
29
63
|
};
|
|
30
64
|
//# sourceMappingURL=standards-sdk.es86.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"standards-sdk.es86.js","sources":["../../src/hcs-
|
|
1
|
+
{"version":3,"file":"standards-sdk.es86.js","sources":["../../src/hcs-21/verify.ts"],"sourcesContent":["import { PublicKey } from '@hashgraph/sdk';\nimport { createHash } from 'crypto';\nimport { AdapterDeclaration } from './types';\n\ntype JsonValue =\n | string\n | number\n | boolean\n | null\n | JsonValue[]\n | { [key: string]: JsonValue };\n\nfunction sortObject(value: JsonValue): JsonValue {\n if (Array.isArray(value)) {\n return value.map(sortObject) as JsonValue;\n }\n if (value && typeof value === 'object') {\n const entries = Object.entries(value as Record<string, JsonValue>).sort(\n ([a], [b]) => (a < b ? -1 : a > b ? 1 : 0),\n );\n const sorted: Record<string, JsonValue> = {};\n for (const [key, val] of entries) {\n sorted[key] = sortObject(val);\n }\n return sorted;\n }\n return value;\n}\n\nexport function canonicalize(value: unknown): string {\n const sorted = sortObject(value as JsonValue);\n return JSON.stringify(sorted);\n}\n\nexport function verifyDeclarationSignature(\n declaration: AdapterDeclaration,\n publisherPublicKey: string,\n): boolean {\n if (!declaration.signature) {\n return false;\n }\n try {\n const { signature, ...unsigned } = declaration;\n const payload = canonicalize(unsigned);\n const signatureBytes = Buffer.from(signature, 'base64');\n const publicKey = PublicKey.fromString(publisherPublicKey);\n return publicKey.verify(Buffer.from(payload, 'utf8'), signatureBytes);\n } catch {\n return false;\n }\n}\n\nexport function verifyManifestSignature(\n manifest: unknown,\n signatureBase64: string,\n publisherPublicKey: string,\n): boolean {\n try {\n const payload = canonicalize(manifest as JsonValue);\n const signatureBytes = Buffer.from(signatureBase64, 'base64');\n const publicKey = PublicKey.fromString(publisherPublicKey);\n return publicKey.verify(Buffer.from(payload, 'utf8'), signatureBytes);\n } catch {\n return false;\n }\n}\n\nfunction normalizeDigest(value: string): string {\n return value\n .replace(/^sha384[-:]?/i, '')\n .trim()\n .toLowerCase();\n}\n\nexport function verifyArtifactDigest(\n artifact: Buffer | Uint8Array,\n expectedDigest: string,\n): boolean {\n const hash = createHash('sha384');\n hash.update(artifact);\n const hex = hash.digest('hex').toLowerCase();\n const base64 = Buffer.from(hex, 'hex').toString('base64').toLowerCase();\n const expected = normalizeDigest(expectedDigest);\n return expected === hex || expected === base64;\n}\n"],"names":[],"mappings":";;AAYA,SAAS,WAAW,OAA6B;AAC/C,MAAI,MAAM,QAAQ,KAAK,GAAG;AACxB,WAAO,MAAM,IAAI,UAAU;AAAA,EAC7B;AACA,MAAI,SAAS,OAAO,UAAU,UAAU;AACtC,UAAM,UAAU,OAAO,QAAQ,KAAkC,EAAE;AAAA,MACjE,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC,MAAO,IAAI,IAAI,KAAK,IAAI,IAAI,IAAI;AAAA,IAAA;AAE1C,UAAM,SAAoC,CAAA;AAC1C,eAAW,CAAC,KAAK,GAAG,KAAK,SAAS;AAChC,aAAO,GAAG,IAAI,WAAW,GAAG;AAAA,IAC9B;AACA,WAAO;AAAA,EACT;AACA,SAAO;AACT;AAEO,SAAS,aAAa,OAAwB;AACnD,QAAM,SAAS,WAAW,KAAkB;AAC5C,SAAO,KAAK,UAAU,MAAM;AAC9B;AAEO,SAAS,2BACd,aACA,oBACS;AACT,MAAI,CAAC,YAAY,WAAW;AAC1B,WAAO;AAAA,EACT;AACA,MAAI;AACF,UAAM,EAAE,WAAW,GAAG,SAAA,IAAa;AACnC,UAAM,UAAU,aAAa,QAAQ;AACrC,UAAM,iBAAiB,OAAO,KAAK,WAAW,QAAQ;AACtD,UAAM,YAAY,UAAU,WAAW,kBAAkB;AACzD,WAAO,UAAU,OAAO,OAAO,KAAK,SAAS,MAAM,GAAG,cAAc;AAAA,EACtE,QAAQ;AACN,WAAO;AAAA,EACT;AACF;AAEO,SAAS,wBACd,UACA,iBACA,oBACS;AACT,MAAI;AACF,UAAM,UAAU,aAAa,QAAqB;AAClD,UAAM,iBAAiB,OAAO,KAAK,iBAAiB,QAAQ;AAC5D,UAAM,YAAY,UAAU,WAAW,kBAAkB;AACzD,WAAO,UAAU,OAAO,OAAO,KAAK,SAAS,MAAM,GAAG,cAAc;AAAA,EACtE,QAAQ;AACN,WAAO;AAAA,EACT;AACF;AAEA,SAAS,gBAAgB,OAAuB;AAC9C,SAAO,MACJ,QAAQ,iBAAiB,EAAE,EAC3B,KAAA,EACA,YAAA;AACL;AAEO,SAAS,qBACd,UACA,gBACS;AACT,QAAM,OAAO,WAAW,QAAQ;AAChC,OAAK,OAAO,QAAQ;AACpB,QAAM,MAAM,KAAK,OAAO,KAAK,EAAE,YAAA;AAC/B,QAAM,SAAS,OAAO,KAAK,KAAK,KAAK,EAAE,SAAS,QAAQ,EAAE,YAAA;AAC1D,QAAM,WAAW,gBAAgB,cAAc;AAC/C,SAAO,aAAa,OAAO,aAAa;AAC1C;"}
|
|
@@ -1,83 +1,30 @@
|
|
|
1
|
-
import {
|
|
2
|
-
|
|
3
|
-
|
|
4
|
-
|
|
5
|
-
|
|
6
|
-
|
|
7
|
-
|
|
8
|
-
this.operatorId = AccountId.fromString(config.operatorId);
|
|
9
|
-
this.operatorCtx = createNodeOperatorContext({
|
|
10
|
-
network: this.network,
|
|
11
|
-
operatorId: this.operatorId,
|
|
12
|
-
operatorKey: config.operatorKey,
|
|
13
|
-
keyType: config.keyType,
|
|
14
|
-
mirrorNode: this.mirrorNode,
|
|
15
|
-
logger: this.logger,
|
|
16
|
-
client: this.network === "mainnet" ? Client.forMainnet() : Client.forTestnet()
|
|
17
|
-
});
|
|
18
|
-
this.client = this.operatorCtx.client;
|
|
1
|
+
import { AccountCreateTransaction, Hbar } from "@hashgraph/sdk";
|
|
2
|
+
function buildHcs15BaseAccountCreateTx(params) {
|
|
3
|
+
const tx = new AccountCreateTransaction().setECDSAKeyWithAlias(params.publicKey).setInitialBalance(
|
|
4
|
+
params.initialBalance instanceof Hbar ? params.initialBalance : new Hbar(params.initialBalance ?? 1)
|
|
5
|
+
);
|
|
6
|
+
if (typeof params.maxAutomaticTokenAssociations === "number") {
|
|
7
|
+
tx.setMaxAutomaticTokenAssociations(params.maxAutomaticTokenAssociations);
|
|
19
8
|
}
|
|
20
|
-
|
|
21
|
-
|
|
9
|
+
if (params.accountMemo) {
|
|
10
|
+
tx.setAccountMemo(params.accountMemo);
|
|
22
11
|
}
|
|
23
|
-
|
|
24
|
-
|
|
25
|
-
|
|
26
|
-
|
|
27
|
-
|
|
28
|
-
|
|
29
|
-
|
|
30
|
-
|
|
31
|
-
*/
|
|
32
|
-
async createBaseAccount(options) {
|
|
33
|
-
const priv = PrivateKey.generateECDSA();
|
|
34
|
-
const pub = priv.publicKey;
|
|
35
|
-
const tx = buildHcs15BaseAccountCreateTx({
|
|
36
|
-
publicKey: pub,
|
|
37
|
-
initialBalance: new Hbar(options?.initialBalance ?? 10),
|
|
38
|
-
maxAutomaticTokenAssociations: options?.maxAutomaticTokenAssociations,
|
|
39
|
-
accountMemo: options?.accountMemo
|
|
40
|
-
});
|
|
41
|
-
const resp = await tx.execute(this.client);
|
|
42
|
-
const receipt = await resp.getReceipt(this.client);
|
|
43
|
-
if (!receipt.accountId) {
|
|
44
|
-
throw new Error("HCS-15 BASE_ACCOUNT_CREATE_FAILED");
|
|
45
|
-
}
|
|
46
|
-
const accountId = receipt.accountId.toString();
|
|
47
|
-
const evmAddress = `0x${pub.toEvmAddress()}`;
|
|
48
|
-
this.logger.info("Created HCS-15 base account", { accountId, evmAddress });
|
|
49
|
-
return {
|
|
50
|
-
accountId,
|
|
51
|
-
privateKey: priv,
|
|
52
|
-
privateKeyHex: priv.toStringRaw(),
|
|
53
|
-
publicKey: pub,
|
|
54
|
-
evmAddress,
|
|
55
|
-
receipt
|
|
56
|
-
};
|
|
12
|
+
return tx;
|
|
13
|
+
}
|
|
14
|
+
function buildHcs15PetalAccountCreateTx(params) {
|
|
15
|
+
const tx = new AccountCreateTransaction().setKeyWithoutAlias(params.publicKey).setInitialBalance(
|
|
16
|
+
params.initialBalance instanceof Hbar ? params.initialBalance : new Hbar(params.initialBalance ?? 1)
|
|
17
|
+
);
|
|
18
|
+
if (typeof params.maxAutomaticTokenAssociations === "number") {
|
|
19
|
+
tx.setMaxAutomaticTokenAssociations(params.maxAutomaticTokenAssociations);
|
|
57
20
|
}
|
|
58
|
-
|
|
59
|
-
|
|
60
|
-
*/
|
|
61
|
-
async createPetalAccount(params) {
|
|
62
|
-
const baseKey = typeof params.basePrivateKey === "string" ? PrivateKey.fromStringECDSA(params.basePrivateKey) : params.basePrivateKey;
|
|
63
|
-
const pub = baseKey.publicKey;
|
|
64
|
-
const tx = buildHcs15PetalAccountCreateTx({
|
|
65
|
-
publicKey: pub,
|
|
66
|
-
initialBalance: new Hbar(params.initialBalance ?? 1),
|
|
67
|
-
maxAutomaticTokenAssociations: params.maxAutomaticTokenAssociations,
|
|
68
|
-
accountMemo: params.accountMemo
|
|
69
|
-
});
|
|
70
|
-
const resp = await tx.execute(this.client);
|
|
71
|
-
const receipt = await resp.getReceipt(this.client);
|
|
72
|
-
if (!receipt.accountId) {
|
|
73
|
-
throw new Error("HCS-15 PETAL_ACCOUNT_CREATE_FAILED");
|
|
74
|
-
}
|
|
75
|
-
const accountId = receipt.accountId.toString();
|
|
76
|
-
this.logger.info("Created HCS-15 petal account", { accountId });
|
|
77
|
-
return { accountId, receipt };
|
|
21
|
+
if (params.accountMemo) {
|
|
22
|
+
tx.setAccountMemo(params.accountMemo);
|
|
78
23
|
}
|
|
24
|
+
return tx;
|
|
79
25
|
}
|
|
80
26
|
export {
|
|
81
|
-
|
|
27
|
+
buildHcs15BaseAccountCreateTx,
|
|
28
|
+
buildHcs15PetalAccountCreateTx
|
|
82
29
|
};
|
|
83
30
|
//# sourceMappingURL=standards-sdk.es87.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"standards-sdk.es87.js","sources":["../../src/hcs-15/
|
|
1
|
+
{"version":3,"file":"standards-sdk.es87.js","sources":["../../src/hcs-15/tx.ts"],"sourcesContent":["import { AccountCreateTransaction, Hbar, PublicKey } from '@hashgraph/sdk';\n\n/**\n * Build AccountCreateTransaction for an HCS-15 base account.\n * Uses an ECDSA public key and sets the EVM alias from it.\n */\nexport function buildHcs15BaseAccountCreateTx(params: {\n publicKey: PublicKey;\n initialBalance?: Hbar | number;\n maxAutomaticTokenAssociations?: number;\n accountMemo?: string;\n}): AccountCreateTransaction {\n const tx = new AccountCreateTransaction()\n .setECDSAKeyWithAlias(params.publicKey)\n .setInitialBalance(\n params.initialBalance instanceof Hbar\n ? params.initialBalance\n : new Hbar(params.initialBalance ?? 1),\n );\n\n if (typeof params.maxAutomaticTokenAssociations === 'number') {\n tx.setMaxAutomaticTokenAssociations(params.maxAutomaticTokenAssociations);\n }\n if (params.accountMemo) {\n tx.setAccountMemo(params.accountMemo);\n }\n return tx;\n}\n\n/**\n * Build AccountCreateTransaction for an HCS-15 Petal account.\n * Reuses the same public key as the base account, without alias.\n */\nexport function buildHcs15PetalAccountCreateTx(params: {\n publicKey: PublicKey;\n initialBalance?: Hbar | number;\n maxAutomaticTokenAssociations?: number;\n accountMemo?: string;\n}): AccountCreateTransaction {\n const tx = new AccountCreateTransaction()\n .setKeyWithoutAlias(params.publicKey)\n .setInitialBalance(\n params.initialBalance instanceof Hbar\n ? params.initialBalance\n : new Hbar(params.initialBalance ?? 1),\n );\n\n if (typeof params.maxAutomaticTokenAssociations === 'number') {\n tx.setMaxAutomaticTokenAssociations(params.maxAutomaticTokenAssociations);\n }\n if (params.accountMemo) {\n tx.setAccountMemo(params.accountMemo);\n }\n return tx;\n}\n"],"names":[],"mappings":";AAMO,SAAS,8BAA8B,QAKjB;AAC3B,QAAM,KAAK,IAAI,yBAAA,EACZ,qBAAqB,OAAO,SAAS,EACrC;AAAA,IACC,OAAO,0BAA0B,OAC7B,OAAO,iBACP,IAAI,KAAK,OAAO,kBAAkB,CAAC;AAAA,EAAA;AAG3C,MAAI,OAAO,OAAO,kCAAkC,UAAU;AAC5D,OAAG,iCAAiC,OAAO,6BAA6B;AAAA,EAC1E;AACA,MAAI,OAAO,aAAa;AACtB,OAAG,eAAe,OAAO,WAAW;AAAA,EACtC;AACA,SAAO;AACT;AAMO,SAAS,+BAA+B,QAKlB;AAC3B,QAAM,KAAK,IAAI,yBAAA,EACZ,mBAAmB,OAAO,SAAS,EACnC;AAAA,IACC,OAAO,0BAA0B,OAC7B,OAAO,iBACP,IAAI,KAAK,OAAO,kBAAkB,CAAC;AAAA,EAAA;AAG3C,MAAI,OAAO,OAAO,kCAAkC,UAAU;AAC5D,OAAG,iCAAiC,OAAO,6BAA6B;AAAA,EAC1E;AACA,MAAI,OAAO,aAAa;AACtB,OAAG,eAAe,OAAO,WAAW;AAAA,EACtC;AACA,SAAO;AACT;"}
|
|
@@ -1,22 +1,35 @@
|
|
|
1
|
-
import { PrivateKey, Hbar } from "@hashgraph/sdk";
|
|
2
|
-
import {
|
|
3
|
-
import { buildHcs15BaseAccountCreateTx, buildHcs15PetalAccountCreateTx } from "./standards-sdk.
|
|
4
|
-
|
|
1
|
+
import { AccountId, Client, PrivateKey, Hbar } from "@hashgraph/sdk";
|
|
2
|
+
import { createNodeOperatorContext } from "./standards-sdk.es136.js";
|
|
3
|
+
import { buildHcs15BaseAccountCreateTx, buildHcs15PetalAccountCreateTx } from "./standards-sdk.es87.js";
|
|
4
|
+
import { HCS15BaseClient } from "./standards-sdk.es90.js";
|
|
5
|
+
class HCS15Client extends HCS15BaseClient {
|
|
5
6
|
constructor(config) {
|
|
6
7
|
super(config);
|
|
7
|
-
this.
|
|
8
|
+
this.operatorId = AccountId.fromString(config.operatorId);
|
|
9
|
+
this.operatorCtx = createNodeOperatorContext({
|
|
10
|
+
network: this.network,
|
|
11
|
+
operatorId: this.operatorId,
|
|
12
|
+
operatorKey: config.operatorKey,
|
|
13
|
+
keyType: config.keyType,
|
|
14
|
+
mirrorNode: this.mirrorNode,
|
|
15
|
+
logger: this.logger,
|
|
16
|
+
client: this.network === "mainnet" ? Client.forMainnet() : Client.forTestnet()
|
|
17
|
+
});
|
|
18
|
+
this.client = this.operatorCtx.client;
|
|
19
|
+
}
|
|
20
|
+
getKeyType() {
|
|
21
|
+
return this.operatorCtx.keyType;
|
|
8
22
|
}
|
|
9
|
-
|
|
10
|
-
|
|
11
|
-
|
|
23
|
+
async close() {
|
|
24
|
+
try {
|
|
25
|
+
this.client.close();
|
|
26
|
+
} catch {
|
|
12
27
|
}
|
|
13
|
-
return this.signer;
|
|
14
28
|
}
|
|
15
29
|
/**
|
|
16
|
-
* Create a new base account with a
|
|
30
|
+
* Create a new base account with a newly generated ECDSA key and EVM alias.
|
|
17
31
|
*/
|
|
18
32
|
async createBaseAccount(options) {
|
|
19
|
-
const signer = this.requireSigner();
|
|
20
33
|
const priv = PrivateKey.generateECDSA();
|
|
21
34
|
const pub = priv.publicKey;
|
|
22
35
|
const tx = buildHcs15BaseAccountCreateTx({
|
|
@@ -25,44 +38,46 @@ class HCS15BrowserClient extends HCS15BaseClient {
|
|
|
25
38
|
maxAutomaticTokenAssociations: options?.maxAutomaticTokenAssociations,
|
|
26
39
|
accountMemo: options?.accountMemo
|
|
27
40
|
});
|
|
28
|
-
const
|
|
29
|
-
const
|
|
30
|
-
|
|
31
|
-
|
|
41
|
+
const resp = await tx.execute(this.client);
|
|
42
|
+
const receipt = await resp.getReceipt(this.client);
|
|
43
|
+
if (!receipt.accountId) {
|
|
44
|
+
throw new Error("HCS-15 BASE_ACCOUNT_CREATE_FAILED");
|
|
45
|
+
}
|
|
46
|
+
const accountId = receipt.accountId.toString();
|
|
32
47
|
const evmAddress = `0x${pub.toEvmAddress()}`;
|
|
33
|
-
this.logger.info("Created HCS-15 base account
|
|
34
|
-
accountId,
|
|
35
|
-
evmAddress
|
|
36
|
-
});
|
|
48
|
+
this.logger.info("Created HCS-15 base account", { accountId, evmAddress });
|
|
37
49
|
return {
|
|
38
50
|
accountId,
|
|
39
51
|
privateKey: priv,
|
|
40
52
|
privateKeyHex: priv.toStringRaw(),
|
|
41
53
|
publicKey: pub,
|
|
42
|
-
evmAddress
|
|
54
|
+
evmAddress,
|
|
55
|
+
receipt
|
|
43
56
|
};
|
|
44
57
|
}
|
|
45
58
|
/**
|
|
46
|
-
* Create a
|
|
59
|
+
* Create a Petal account that reuses the base account ECDSA key (no alias).
|
|
47
60
|
*/
|
|
48
61
|
async createPetalAccount(params) {
|
|
49
|
-
const signer = this.requireSigner();
|
|
50
62
|
const baseKey = typeof params.basePrivateKey === "string" ? PrivateKey.fromStringECDSA(params.basePrivateKey) : params.basePrivateKey;
|
|
63
|
+
const pub = baseKey.publicKey;
|
|
51
64
|
const tx = buildHcs15PetalAccountCreateTx({
|
|
52
|
-
publicKey:
|
|
65
|
+
publicKey: pub,
|
|
53
66
|
initialBalance: new Hbar(params.initialBalance ?? 1),
|
|
54
67
|
maxAutomaticTokenAssociations: params.maxAutomaticTokenAssociations,
|
|
55
68
|
accountMemo: params.accountMemo
|
|
56
69
|
});
|
|
57
|
-
const
|
|
58
|
-
const
|
|
59
|
-
|
|
60
|
-
|
|
61
|
-
|
|
62
|
-
|
|
70
|
+
const resp = await tx.execute(this.client);
|
|
71
|
+
const receipt = await resp.getReceipt(this.client);
|
|
72
|
+
if (!receipt.accountId) {
|
|
73
|
+
throw new Error("HCS-15 PETAL_ACCOUNT_CREATE_FAILED");
|
|
74
|
+
}
|
|
75
|
+
const accountId = receipt.accountId.toString();
|
|
76
|
+
this.logger.info("Created HCS-15 petal account", { accountId });
|
|
77
|
+
return { accountId, receipt };
|
|
63
78
|
}
|
|
64
79
|
}
|
|
65
80
|
export {
|
|
66
|
-
|
|
81
|
+
HCS15Client
|
|
67
82
|
};
|
|
68
83
|
//# sourceMappingURL=standards-sdk.es88.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"standards-sdk.es88.js","sources":["../../src/hcs-15/
|
|
1
|
+
{"version":3,"file":"standards-sdk.es88.js","sources":["../../src/hcs-15/sdk.ts"],"sourcesContent":["import {\n AccountId,\n Client,\n Hbar,\n PrivateKey,\n PublicKey,\n TransactionReceipt,\n} from '@hashgraph/sdk';\nimport { NetworkType } from '../utils/types';\nimport {\n createNodeOperatorContext,\n type NodeOperatorContext,\n} from '../common/node-operator-resolver';\nimport {\n buildHcs15BaseAccountCreateTx,\n buildHcs15PetalAccountCreateTx,\n} from './tx';\nimport type { SDKHCS15ClientConfig } from './types';\nimport { HCS15BaseClient } from './base-client';\n\nexport class HCS15Client extends HCS15BaseClient {\n private readonly operatorCtx: NodeOperatorContext;\n private readonly client: Client;\n private readonly operatorId: AccountId;\n\n constructor(config: SDKHCS15ClientConfig) {\n super(config);\n this.operatorId = AccountId.fromString(config.operatorId);\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:\n this.network === 'mainnet' ? Client.forMainnet() : Client.forTestnet(),\n });\n this.client = this.operatorCtx.client;\n }\n\n public getKeyType(): 'ed25519' | 'ecdsa' {\n return this.operatorCtx.keyType;\n }\n\n public async close(): Promise<void> {\n try {\n this.client.close();\n } catch {}\n }\n\n /**\n * Create a new base account with a newly generated ECDSA key and EVM alias.\n */\n async createBaseAccount(options?: {\n initialBalance?: number;\n maxAutomaticTokenAssociations?: number;\n accountMemo?: string;\n }): Promise<{\n accountId: string;\n privateKey: PrivateKey;\n privateKeyHex: string;\n publicKey: PublicKey;\n evmAddress: string;\n receipt: TransactionReceipt;\n }> {\n const priv = PrivateKey.generateECDSA();\n const pub = priv.publicKey;\n const tx = buildHcs15BaseAccountCreateTx({\n publicKey: pub,\n initialBalance: new Hbar(options?.initialBalance ?? 10),\n maxAutomaticTokenAssociations: options?.maxAutomaticTokenAssociations,\n accountMemo: options?.accountMemo,\n });\n const resp = await tx.execute(this.client);\n const receipt = await resp.getReceipt(this.client);\n if (!receipt.accountId) {\n throw new Error('HCS-15 BASE_ACCOUNT_CREATE_FAILED');\n }\n const accountId = receipt.accountId.toString();\n const evmAddress = `0x${pub.toEvmAddress()}`;\n this.logger.info('Created HCS-15 base account', { accountId, evmAddress });\n return {\n accountId,\n privateKey: priv,\n privateKeyHex: priv.toStringRaw(),\n publicKey: pub,\n evmAddress,\n receipt,\n };\n }\n\n /**\n * Create a Petal account that reuses the base account ECDSA key (no alias).\n */\n async createPetalAccount(params: {\n basePrivateKey: string | PrivateKey;\n initialBalance?: number;\n maxAutomaticTokenAssociations?: number;\n accountMemo?: string;\n }): Promise<{ accountId: string; receipt: TransactionReceipt }> {\n const baseKey =\n typeof params.basePrivateKey === 'string'\n ? PrivateKey.fromStringECDSA(params.basePrivateKey)\n : params.basePrivateKey;\n const pub = baseKey.publicKey;\n const tx = buildHcs15PetalAccountCreateTx({\n publicKey: pub,\n initialBalance: new Hbar(params.initialBalance ?? 1),\n maxAutomaticTokenAssociations: params.maxAutomaticTokenAssociations,\n accountMemo: params.accountMemo,\n });\n const resp = await tx.execute(this.client);\n const receipt = await resp.getReceipt(this.client);\n if (!receipt.accountId) {\n throw new Error('HCS-15 PETAL_ACCOUNT_CREATE_FAILED');\n }\n const accountId = receipt.accountId.toString();\n this.logger.info('Created HCS-15 petal account', { accountId });\n return { accountId, receipt };\n }\n}\n"],"names":[],"mappings":";;;;AAoBO,MAAM,oBAAoB,gBAAgB;AAAA,EAK/C,YAAY,QAA8B;AACxC,UAAM,MAAM;AACZ,SAAK,aAAa,UAAU,WAAW,OAAO,UAAU;AACxD,SAAK,cAAc,0BAA0B;AAAA,MAC3C,SAAS,KAAK;AAAA,MACd,YAAY,KAAK;AAAA,MACjB,aAAa,OAAO;AAAA,MACpB,SAAS,OAAO;AAAA,MAChB,YAAY,KAAK;AAAA,MACjB,QAAQ,KAAK;AAAA,MACb,QACE,KAAK,YAAY,YAAY,OAAO,WAAA,IAAe,OAAO,WAAA;AAAA,IAAW,CACxE;AACD,SAAK,SAAS,KAAK,YAAY;AAAA,EACjC;AAAA,EAEO,aAAkC;AACvC,WAAO,KAAK,YAAY;AAAA,EAC1B;AAAA,EAEA,MAAa,QAAuB;AAClC,QAAI;AACF,WAAK,OAAO,MAAA;AAAA,IACd,QAAQ;AAAA,IAAC;AAAA,EACX;AAAA;AAAA;AAAA;AAAA,EAKA,MAAM,kBAAkB,SAWrB;AACD,UAAM,OAAO,WAAW,cAAA;AACxB,UAAM,MAAM,KAAK;AACjB,UAAM,KAAK,8BAA8B;AAAA,MACvC,WAAW;AAAA,MACX,gBAAgB,IAAI,KAAK,SAAS,kBAAkB,EAAE;AAAA,MACtD,+BAA+B,SAAS;AAAA,MACxC,aAAa,SAAS;AAAA,IAAA,CACvB;AACD,UAAM,OAAO,MAAM,GAAG,QAAQ,KAAK,MAAM;AACzC,UAAM,UAAU,MAAM,KAAK,WAAW,KAAK,MAAM;AACjD,QAAI,CAAC,QAAQ,WAAW;AACtB,YAAM,IAAI,MAAM,mCAAmC;AAAA,IACrD;AACA,UAAM,YAAY,QAAQ,UAAU,SAAA;AACpC,UAAM,aAAa,KAAK,IAAI,aAAA,CAAc;AAC1C,SAAK,OAAO,KAAK,+BAA+B,EAAE,WAAW,YAAY;AACzE,WAAO;AAAA,MACL;AAAA,MACA,YAAY;AAAA,MACZ,eAAe,KAAK,YAAA;AAAA,MACpB,WAAW;AAAA,MACX;AAAA,MACA;AAAA,IAAA;AAAA,EAEJ;AAAA;AAAA;AAAA;AAAA,EAKA,MAAM,mBAAmB,QAKuC;AAC9D,UAAM,UACJ,OAAO,OAAO,mBAAmB,WAC7B,WAAW,gBAAgB,OAAO,cAAc,IAChD,OAAO;AACb,UAAM,MAAM,QAAQ;AACpB,UAAM,KAAK,+BAA+B;AAAA,MACxC,WAAW;AAAA,MACX,gBAAgB,IAAI,KAAK,OAAO,kBAAkB,CAAC;AAAA,MACnD,+BAA+B,OAAO;AAAA,MACtC,aAAa,OAAO;AAAA,IAAA,CACrB;AACD,UAAM,OAAO,MAAM,GAAG,QAAQ,KAAK,MAAM;AACzC,UAAM,UAAU,MAAM,KAAK,WAAW,KAAK,MAAM;AACjD,QAAI,CAAC,QAAQ,WAAW;AACtB,YAAM,IAAI,MAAM,oCAAoC;AAAA,IACtD;AACA,UAAM,YAAY,QAAQ,UAAU,SAAA;AACpC,SAAK,OAAO,KAAK,gCAAgC,EAAE,WAAW;AAC9D,WAAO,EAAE,WAAW,QAAA;AAAA,EACtB;AACF;"}
|
|
@@ -1,33 +1,68 @@
|
|
|
1
|
-
import {
|
|
2
|
-
import {
|
|
3
|
-
|
|
1
|
+
import { PrivateKey, Hbar } from "@hashgraph/sdk";
|
|
2
|
+
import { HCS15BaseClient } from "./standards-sdk.es90.js";
|
|
3
|
+
import { buildHcs15BaseAccountCreateTx, buildHcs15PetalAccountCreateTx } from "./standards-sdk.es87.js";
|
|
4
|
+
class HCS15BrowserClient extends HCS15BaseClient {
|
|
4
5
|
constructor(config) {
|
|
5
|
-
|
|
6
|
-
this.
|
|
7
|
-
|
|
8
|
-
|
|
6
|
+
super(config);
|
|
7
|
+
this.signer = config.signer || config.hwc?.dAppConnector?.signers?.[0];
|
|
8
|
+
}
|
|
9
|
+
requireSigner() {
|
|
10
|
+
if (!this.signer) {
|
|
11
|
+
throw new Error("HCS-15 Browser client requires an active DAppSigner");
|
|
12
|
+
}
|
|
13
|
+
return this.signer;
|
|
14
|
+
}
|
|
15
|
+
/**
|
|
16
|
+
* Create a new base account with a new ECDSA key and EVM alias using a connected wallet signer.
|
|
17
|
+
*/
|
|
18
|
+
async createBaseAccount(options) {
|
|
19
|
+
const signer = this.requireSigner();
|
|
20
|
+
const priv = PrivateKey.generateECDSA();
|
|
21
|
+
const pub = priv.publicKey;
|
|
22
|
+
const tx = buildHcs15BaseAccountCreateTx({
|
|
23
|
+
publicKey: pub,
|
|
24
|
+
initialBalance: new Hbar(options?.initialBalance ?? 10),
|
|
25
|
+
maxAutomaticTokenAssociations: options?.maxAutomaticTokenAssociations,
|
|
26
|
+
accountMemo: options?.accountMemo
|
|
9
27
|
});
|
|
10
|
-
|
|
11
|
-
|
|
28
|
+
const frozen = await tx.freezeWithSigner(signer);
|
|
29
|
+
const res = await frozen.executeWithSigner(signer);
|
|
30
|
+
const receipt = await res.getReceiptWithSigner(signer);
|
|
31
|
+
const accountId = receipt?.accountId?.toString?.();
|
|
32
|
+
const evmAddress = `0x${pub.toEvmAddress()}`;
|
|
33
|
+
this.logger.info("Created HCS-15 base account (browser)", {
|
|
34
|
+
accountId,
|
|
35
|
+
evmAddress
|
|
12
36
|
});
|
|
37
|
+
return {
|
|
38
|
+
accountId,
|
|
39
|
+
privateKey: priv,
|
|
40
|
+
privateKeyHex: priv.toStringRaw(),
|
|
41
|
+
publicKey: pub,
|
|
42
|
+
evmAddress
|
|
43
|
+
};
|
|
13
44
|
}
|
|
14
45
|
/**
|
|
15
|
-
*
|
|
46
|
+
* Create a petal account reusing a base ECDSA key, via wallet signer.
|
|
16
47
|
*/
|
|
17
|
-
async
|
|
18
|
-
|
|
19
|
-
|
|
20
|
-
|
|
21
|
-
|
|
22
|
-
|
|
23
|
-
|
|
24
|
-
|
|
25
|
-
|
|
26
|
-
|
|
27
|
-
|
|
48
|
+
async createPetalAccount(params) {
|
|
49
|
+
const signer = this.requireSigner();
|
|
50
|
+
const baseKey = typeof params.basePrivateKey === "string" ? PrivateKey.fromStringECDSA(params.basePrivateKey) : params.basePrivateKey;
|
|
51
|
+
const tx = buildHcs15PetalAccountCreateTx({
|
|
52
|
+
publicKey: baseKey.publicKey,
|
|
53
|
+
initialBalance: new Hbar(params.initialBalance ?? 1),
|
|
54
|
+
maxAutomaticTokenAssociations: params.maxAutomaticTokenAssociations,
|
|
55
|
+
accountMemo: params.accountMemo
|
|
56
|
+
});
|
|
57
|
+
const frozen = await tx.freezeWithSigner(signer);
|
|
58
|
+
const res = await frozen.executeWithSigner(signer);
|
|
59
|
+
const receipt = await res.getReceiptWithSigner(signer);
|
|
60
|
+
const accountId = receipt?.accountId?.toString?.();
|
|
61
|
+
this.logger.info("Created HCS-15 petal account (browser)", { accountId });
|
|
62
|
+
return { accountId };
|
|
28
63
|
}
|
|
29
64
|
}
|
|
30
65
|
export {
|
|
31
|
-
|
|
66
|
+
HCS15BrowserClient
|
|
32
67
|
};
|
|
33
68
|
//# sourceMappingURL=standards-sdk.es89.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"standards-sdk.es89.js","sources":["../../src/hcs-15/
|
|
1
|
+
{"version":3,"file":"standards-sdk.es89.js","sources":["../../src/hcs-15/browser.ts"],"sourcesContent":["import type { DAppSigner } from '@hashgraph/hedera-wallet-connect';\nimport type {\n PublicKey,\n PrivateKey,\n TransactionResponse,\n} from '@hashgraph/sdk';\nimport { PrivateKey as SDKPrivateKey, Hbar } from '@hashgraph/sdk';\nimport type { BrowserHCS15ClientConfig } from './types';\n\nimport { HCS15BaseClient } from './base-client';\nimport {\n buildHcs15BaseAccountCreateTx,\n buildHcs15PetalAccountCreateTx,\n} from './tx';\n\nexport class HCS15BrowserClient extends HCS15BaseClient {\n private readonly signer?: DAppSigner;\n\n constructor(config: BrowserHCS15ClientConfig) {\n super(config);\n this.signer = config.signer || config.hwc?.dAppConnector?.signers?.[0];\n }\n\n private requireSigner(): DAppSigner {\n if (!this.signer) {\n throw new Error('HCS-15 Browser client requires an active DAppSigner');\n }\n return this.signer as DAppSigner;\n }\n\n /**\n * Create a new base account with a new ECDSA key and EVM alias using a connected wallet signer.\n */\n async createBaseAccount(options?: {\n initialBalance?: number;\n maxAutomaticTokenAssociations?: number;\n accountMemo?: string;\n }): Promise<{\n accountId?: string;\n privateKey: PrivateKey;\n privateKeyHex: string;\n publicKey: PublicKey;\n evmAddress: string;\n }> {\n const signer = this.requireSigner();\n const priv = SDKPrivateKey.generateECDSA();\n const pub = priv.publicKey;\n const tx = buildHcs15BaseAccountCreateTx({\n publicKey: pub,\n initialBalance: new Hbar(options?.initialBalance ?? 10),\n maxAutomaticTokenAssociations: options?.maxAutomaticTokenAssociations,\n accountMemo: options?.accountMemo,\n });\n const frozen = await tx.freezeWithSigner(signer);\n const res: TransactionResponse = await frozen.executeWithSigner(signer);\n const receipt = await res.getReceiptWithSigner(signer as any);\n const accountId = receipt?.accountId?.toString?.();\n const evmAddress = `0x${pub.toEvmAddress()}`;\n this.logger.info('Created HCS-15 base account (browser)', {\n accountId,\n evmAddress,\n });\n return {\n accountId,\n privateKey: priv,\n privateKeyHex: priv.toStringRaw(),\n publicKey: pub,\n evmAddress,\n };\n }\n\n /**\n * Create a petal account reusing a base ECDSA key, via wallet signer.\n */\n async createPetalAccount(params: {\n basePrivateKey: string | PrivateKey;\n initialBalance?: number;\n maxAutomaticTokenAssociations?: number;\n accountMemo?: string;\n }): Promise<{ accountId?: string }> {\n const signer = this.requireSigner();\n const baseKey =\n typeof params.basePrivateKey === 'string'\n ? SDKPrivateKey.fromStringECDSA(params.basePrivateKey)\n : params.basePrivateKey;\n const tx = buildHcs15PetalAccountCreateTx({\n publicKey: baseKey.publicKey,\n initialBalance: new Hbar(params.initialBalance ?? 1),\n maxAutomaticTokenAssociations: params.maxAutomaticTokenAssociations,\n accountMemo: params.accountMemo,\n });\n const frozen = await tx.freezeWithSigner(signer);\n const res: TransactionResponse = await frozen.executeWithSigner(signer);\n const receipt = await res.getReceiptWithSigner(signer as any);\n const accountId = receipt?.accountId?.toString?.();\n this.logger.info('Created HCS-15 petal account (browser)', { accountId });\n return { accountId };\n }\n}\n"],"names":["SDKPrivateKey"],"mappings":";;;AAeO,MAAM,2BAA2B,gBAAgB;AAAA,EAGtD,YAAY,QAAkC;AAC5C,UAAM,MAAM;AACZ,SAAK,SAAS,OAAO,UAAU,OAAO,KAAK,eAAe,UAAU,CAAC;AAAA,EACvE;AAAA,EAEQ,gBAA4B;AAClC,QAAI,CAAC,KAAK,QAAQ;AAChB,YAAM,IAAI,MAAM,qDAAqD;AAAA,IACvE;AACA,WAAO,KAAK;AAAA,EACd;AAAA;AAAA;AAAA;AAAA,EAKA,MAAM,kBAAkB,SAUrB;AACD,UAAM,SAAS,KAAK,cAAA;AACpB,UAAM,OAAOA,WAAc,cAAA;AAC3B,UAAM,MAAM,KAAK;AACjB,UAAM,KAAK,8BAA8B;AAAA,MACvC,WAAW;AAAA,MACX,gBAAgB,IAAI,KAAK,SAAS,kBAAkB,EAAE;AAAA,MACtD,+BAA+B,SAAS;AAAA,MACxC,aAAa,SAAS;AAAA,IAAA,CACvB;AACD,UAAM,SAAS,MAAM,GAAG,iBAAiB,MAAM;AAC/C,UAAM,MAA2B,MAAM,OAAO,kBAAkB,MAAM;AACtE,UAAM,UAAU,MAAM,IAAI,qBAAqB,MAAa;AAC5D,UAAM,YAAY,SAAS,WAAW,WAAA;AACtC,UAAM,aAAa,KAAK,IAAI,aAAA,CAAc;AAC1C,SAAK,OAAO,KAAK,yCAAyC;AAAA,MACxD;AAAA,MACA;AAAA,IAAA,CACD;AACD,WAAO;AAAA,MACL;AAAA,MACA,YAAY;AAAA,MACZ,eAAe,KAAK,YAAA;AAAA,MACpB,WAAW;AAAA,MACX;AAAA,IAAA;AAAA,EAEJ;AAAA;AAAA;AAAA;AAAA,EAKA,MAAM,mBAAmB,QAKW;AAClC,UAAM,SAAS,KAAK,cAAA;AACpB,UAAM,UACJ,OAAO,OAAO,mBAAmB,WAC7BA,WAAc,gBAAgB,OAAO,cAAc,IACnD,OAAO;AACb,UAAM,KAAK,+BAA+B;AAAA,MACxC,WAAW,QAAQ;AAAA,MACnB,gBAAgB,IAAI,KAAK,OAAO,kBAAkB,CAAC;AAAA,MACnD,+BAA+B,OAAO;AAAA,MACtC,aAAa,OAAO;AAAA,IAAA,CACrB;AACD,UAAM,SAAS,MAAM,GAAG,iBAAiB,MAAM;AAC/C,UAAM,MAA2B,MAAM,OAAO,kBAAkB,MAAM;AACtE,UAAM,UAAU,MAAM,IAAI,qBAAqB,MAAa;AAC5D,UAAM,YAAY,SAAS,WAAW,WAAA;AACtC,SAAK,OAAO,KAAK,0CAA0C,EAAE,WAAW;AACxE,WAAO,EAAE,UAAA;AAAA,EACX;AACF;"}
|