@hashgraphonline/standards-sdk 0.1.143 → 0.1.144-feat-solana-register.canary.5001619.81
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/dist/cjs/hcs-10/base-client.d.ts.map +1 -1
- package/dist/cjs/hcs-10/sdk.d.ts +8 -0
- package/dist/cjs/hcs-10/sdk.d.ts.map +1 -1
- package/dist/cjs/hcs-11/client.d.ts +2 -2
- package/dist/cjs/hcs-11/client.d.ts.map +1 -1
- package/dist/cjs/hcs-11/person-builder.d.ts +1 -0
- package/dist/cjs/hcs-11/person-builder.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-12/rendering/resource-manager.d.ts.map +1 -1
- package/dist/cjs/hcs-12/validation/schemas.d.ts +8 -8
- package/dist/cjs/hcs-14/issuers/hiero.d.ts.map +1 -1
- package/dist/cjs/hcs-15/browser.d.ts +2 -0
- package/dist/cjs/hcs-15/browser.d.ts.map +1 -1
- package/dist/cjs/hcs-15/sdk.d.ts +7 -1
- package/dist/cjs/hcs-15/sdk.d.ts.map +1 -1
- package/dist/cjs/hcs-15/tx.d.ts +4 -0
- package/dist/cjs/hcs-15/tx.d.ts.map +1 -1
- package/dist/cjs/hcs-15/types.d.ts +16 -1
- package/dist/cjs/hcs-15/types.d.ts.map +1 -1
- package/dist/cjs/hcs-16/browser.d.ts +11 -2
- package/dist/cjs/hcs-16/browser.d.ts.map +1 -1
- package/dist/cjs/hcs-16/sdk.d.ts +62 -1
- package/dist/cjs/hcs-16/sdk.d.ts.map +1 -1
- package/dist/cjs/hcs-16/tx.d.ts +21 -3
- package/dist/cjs/hcs-16/tx.d.ts.map +1 -1
- package/dist/cjs/hcs-17/base-client.d.ts +1 -0
- package/dist/cjs/hcs-17/base-client.d.ts.map +1 -1
- package/dist/cjs/hcs-17/sdk.d.ts.map +1 -1
- package/dist/cjs/hcs-17/tx.d.ts +2 -0
- package/dist/cjs/hcs-17/tx.d.ts.map +1 -1
- package/dist/cjs/hcs-17/types.d.ts +4 -0
- package/dist/cjs/hcs-17/types.d.ts.map +1 -1
- package/dist/cjs/hcs-21/types.d.ts +75 -75
- package/dist/cjs/index.d.ts.map +1 -1
- package/dist/cjs/services/registry-broker/client/adapters.d.ts +20 -0
- package/dist/cjs/services/registry-broker/client/adapters.d.ts.map +1 -0
- package/dist/cjs/services/registry-broker/client/agents.d.ts +16 -0
- package/dist/cjs/services/registry-broker/client/agents.d.ts.map +1 -0
- package/dist/cjs/services/registry-broker/client/base-client.d.ts +70 -0
- package/dist/cjs/services/registry-broker/client/base-client.d.ts.map +1 -0
- package/dist/cjs/services/registry-broker/client/chat-history.d.ts +23 -0
- package/dist/cjs/services/registry-broker/client/chat-history.d.ts.map +1 -0
- package/dist/cjs/services/registry-broker/client/chat.d.ts +33 -0
- package/dist/cjs/services/registry-broker/client/chat.d.ts.map +1 -0
- package/dist/cjs/services/registry-broker/client/credits.d.ts +40 -0
- package/dist/cjs/services/registry-broker/client/credits.d.ts.map +1 -0
- package/dist/cjs/services/registry-broker/client/encrypted-chat-manager.d.ts +35 -0
- package/dist/cjs/services/registry-broker/client/encrypted-chat-manager.d.ts.map +1 -0
- package/dist/cjs/services/registry-broker/client/encryption.d.ts +33 -0
- package/dist/cjs/services/registry-broker/client/encryption.d.ts.map +1 -0
- package/dist/cjs/services/registry-broker/client/errors.d.ts +19 -0
- package/dist/cjs/services/registry-broker/client/errors.d.ts.map +1 -0
- package/dist/cjs/services/registry-broker/client/feedback.d.ts +2 -0
- package/dist/cjs/services/registry-broker/client/feedback.d.ts.map +1 -0
- package/dist/cjs/services/registry-broker/client/ledger-auth.d.ts +10 -0
- package/dist/cjs/services/registry-broker/client/ledger-auth.d.ts.map +1 -0
- package/dist/cjs/services/registry-broker/client/search.d.ts +19 -0
- package/dist/cjs/services/registry-broker/client/search.d.ts.map +1 -0
- package/dist/cjs/services/registry-broker/client/utils.d.ts +21 -0
- package/dist/cjs/services/registry-broker/client/utils.d.ts.map +1 -0
- package/dist/cjs/services/registry-broker/client.d.ts +2 -205
- package/dist/cjs/services/registry-broker/client.d.ts.map +1 -1
- package/dist/cjs/services/registry-broker/private-key-signer.d.ts +1 -0
- package/dist/cjs/services/registry-broker/private-key-signer.d.ts.map +1 -1
- package/dist/cjs/services/registry-broker/schemas.d.ts +2509 -816
- package/dist/cjs/services/registry-broker/schemas.d.ts.map +1 -1
- package/dist/cjs/services/registry-broker/types.d.ts +64 -2
- package/dist/cjs/services/registry-broker/types.d.ts.map +1 -1
- package/dist/cjs/standards-sdk.cjs +3 -3
- package/dist/cjs/standards-sdk.cjs.map +1 -1
- package/dist/cjs/utils/crypto-abstraction.d.ts.map +1 -1
- package/dist/cjs/utils/crypto-env.d.ts.map +1 -1
- package/dist/cjs/utils/dynamic-import.d.ts +5 -1
- package/dist/cjs/utils/dynamic-import.d.ts.map +1 -1
- package/dist/cjs/utils/hash-adapter.d.ts.map +1 -1
- package/dist/es/hcs-10/base-client.d.ts.map +1 -1
- package/dist/es/hcs-10/sdk.d.ts +8 -0
- package/dist/es/hcs-10/sdk.d.ts.map +1 -1
- package/dist/es/hcs-11/client.d.ts +2 -2
- package/dist/es/hcs-11/client.d.ts.map +1 -1
- package/dist/es/hcs-11/person-builder.d.ts +1 -0
- package/dist/es/hcs-11/person-builder.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-12/rendering/resource-manager.d.ts.map +1 -1
- package/dist/es/hcs-12/validation/schemas.d.ts +8 -8
- package/dist/es/hcs-14/issuers/hiero.d.ts.map +1 -1
- package/dist/es/hcs-15/browser.d.ts +2 -0
- package/dist/es/hcs-15/browser.d.ts.map +1 -1
- package/dist/es/hcs-15/sdk.d.ts +7 -1
- package/dist/es/hcs-15/sdk.d.ts.map +1 -1
- package/dist/es/hcs-15/tx.d.ts +4 -0
- package/dist/es/hcs-15/tx.d.ts.map +1 -1
- package/dist/es/hcs-15/types.d.ts +16 -1
- package/dist/es/hcs-15/types.d.ts.map +1 -1
- package/dist/es/hcs-16/browser.d.ts +11 -2
- package/dist/es/hcs-16/browser.d.ts.map +1 -1
- package/dist/es/hcs-16/sdk.d.ts +62 -1
- package/dist/es/hcs-16/sdk.d.ts.map +1 -1
- package/dist/es/hcs-16/tx.d.ts +21 -3
- package/dist/es/hcs-16/tx.d.ts.map +1 -1
- package/dist/es/hcs-17/base-client.d.ts +1 -0
- package/dist/es/hcs-17/base-client.d.ts.map +1 -1
- package/dist/es/hcs-17/sdk.d.ts.map +1 -1
- package/dist/es/hcs-17/tx.d.ts +2 -0
- package/dist/es/hcs-17/tx.d.ts.map +1 -1
- package/dist/es/hcs-17/types.d.ts +4 -0
- package/dist/es/hcs-17/types.d.ts.map +1 -1
- package/dist/es/hcs-21/types.d.ts +75 -75
- package/dist/es/index.d.ts.map +1 -1
- package/dist/es/services/registry-broker/client/adapters.d.ts +20 -0
- package/dist/es/services/registry-broker/client/adapters.d.ts.map +1 -0
- package/dist/es/services/registry-broker/client/agents.d.ts +16 -0
- package/dist/es/services/registry-broker/client/agents.d.ts.map +1 -0
- package/dist/es/services/registry-broker/client/base-client.d.ts +70 -0
- package/dist/es/services/registry-broker/client/base-client.d.ts.map +1 -0
- package/dist/es/services/registry-broker/client/chat-history.d.ts +23 -0
- package/dist/es/services/registry-broker/client/chat-history.d.ts.map +1 -0
- package/dist/es/services/registry-broker/client/chat.d.ts +33 -0
- package/dist/es/services/registry-broker/client/chat.d.ts.map +1 -0
- package/dist/es/services/registry-broker/client/credits.d.ts +40 -0
- package/dist/es/services/registry-broker/client/credits.d.ts.map +1 -0
- package/dist/es/services/registry-broker/client/encrypted-chat-manager.d.ts +35 -0
- package/dist/es/services/registry-broker/client/encrypted-chat-manager.d.ts.map +1 -0
- package/dist/es/services/registry-broker/client/encryption.d.ts +33 -0
- package/dist/es/services/registry-broker/client/encryption.d.ts.map +1 -0
- package/dist/es/services/registry-broker/client/errors.d.ts +19 -0
- package/dist/es/services/registry-broker/client/errors.d.ts.map +1 -0
- package/dist/es/services/registry-broker/client/feedback.d.ts +2 -0
- package/dist/es/services/registry-broker/client/feedback.d.ts.map +1 -0
- package/dist/es/services/registry-broker/client/ledger-auth.d.ts +10 -0
- package/dist/es/services/registry-broker/client/ledger-auth.d.ts.map +1 -0
- package/dist/es/services/registry-broker/client/search.d.ts +19 -0
- package/dist/es/services/registry-broker/client/search.d.ts.map +1 -0
- package/dist/es/services/registry-broker/client/utils.d.ts +21 -0
- package/dist/es/services/registry-broker/client/utils.d.ts.map +1 -0
- package/dist/es/services/registry-broker/client.d.ts +2 -205
- package/dist/es/services/registry-broker/client.d.ts.map +1 -1
- package/dist/es/services/registry-broker/private-key-signer.d.ts +1 -0
- package/dist/es/services/registry-broker/private-key-signer.d.ts.map +1 -1
- package/dist/es/services/registry-broker/schemas.d.ts +2509 -816
- package/dist/es/services/registry-broker/schemas.d.ts.map +1 -1
- package/dist/es/services/registry-broker/types.d.ts +64 -2
- package/dist/es/services/registry-broker/types.d.ts.map +1 -1
- package/dist/es/standards-sdk.es.js +148 -133
- package/dist/es/standards-sdk.es.js.map +1 -1
- package/dist/es/standards-sdk.es10.js +70 -90
- package/dist/es/standards-sdk.es10.js.map +1 -1
- package/dist/es/standards-sdk.es100.js +229 -26
- package/dist/es/standards-sdk.es100.js.map +1 -1
- package/dist/es/standards-sdk.es101.js +109 -228
- package/dist/es/standards-sdk.es101.js.map +1 -1
- package/dist/es/standards-sdk.es102.js +15 -94
- package/dist/es/standards-sdk.es102.js.map +1 -1
- package/dist/es/standards-sdk.es103.js +80 -30
- package/dist/es/standards-sdk.es103.js.map +1 -1
- package/dist/es/standards-sdk.es104.js +27 -80
- package/dist/es/standards-sdk.es104.js.map +1 -1
- package/dist/es/standards-sdk.es105.js +136 -25
- package/dist/es/standards-sdk.es105.js.map +1 -1
- package/dist/es/standards-sdk.es106.js +27 -140
- package/dist/es/standards-sdk.es106.js.map +1 -1
- package/dist/es/standards-sdk.es107.js +20 -27
- package/dist/es/standards-sdk.es107.js.map +1 -1
- package/dist/es/standards-sdk.es108.js +156 -18
- package/dist/es/standards-sdk.es108.js.map +1 -1
- package/dist/es/standards-sdk.es109.js +198 -148
- package/dist/es/standards-sdk.es109.js.map +1 -1
- package/dist/es/standards-sdk.es11.js +121 -45
- package/dist/es/standards-sdk.es11.js.map +1 -1
- package/dist/es/standards-sdk.es110.js +747 -160
- package/dist/es/standards-sdk.es110.js.map +1 -1
- package/dist/es/standards-sdk.es111.js +9 -786
- package/dist/es/standards-sdk.es111.js.map +1 -1
- package/dist/es/standards-sdk.es112.js +567 -13
- package/dist/es/standards-sdk.es112.js.map +1 -1
- package/dist/es/standards-sdk.es113.js +576 -541
- package/dist/es/standards-sdk.es113.js.map +1 -1
- package/dist/es/standards-sdk.es114.js +12 -601
- package/dist/es/standards-sdk.es114.js.map +1 -1
- package/dist/es/standards-sdk.es115.js +2 -13
- package/dist/es/standards-sdk.es115.js.map +1 -1
- package/dist/es/standards-sdk.es116.js +87 -2
- package/dist/es/standards-sdk.es116.js.map +1 -1
- package/dist/es/standards-sdk.es117.js +37 -80
- package/dist/es/standards-sdk.es117.js.map +1 -1
- package/dist/es/standards-sdk.es118.js +2 -39
- package/dist/es/standards-sdk.es118.js.map +1 -1
- package/dist/es/standards-sdk.es119.js +231 -2
- package/dist/es/standards-sdk.es119.js.map +1 -1
- package/dist/es/standards-sdk.es12.js +60 -159
- package/dist/es/standards-sdk.es12.js.map +1 -1
- package/dist/es/standards-sdk.es120.js +1110 -193
- package/dist/es/standards-sdk.es120.js.map +1 -1
- package/dist/es/standards-sdk.es121.js +225 -1059
- package/dist/es/standards-sdk.es121.js.map +1 -1
- package/dist/es/standards-sdk.es122.js +419 -303
- package/dist/es/standards-sdk.es122.js.map +1 -1
- package/dist/es/standards-sdk.es123.js +351 -418
- package/dist/es/standards-sdk.es123.js.map +1 -1
- package/dist/es/standards-sdk.es124.js +872 -347
- package/dist/es/standards-sdk.es124.js.map +1 -1
- package/dist/es/standards-sdk.es125.js +182 -854
- package/dist/es/standards-sdk.es125.js.map +1 -1
- package/dist/es/standards-sdk.es126.js +1512 -153
- package/dist/es/standards-sdk.es126.js.map +1 -1
- package/dist/es/standards-sdk.es127.js +157 -1547
- package/dist/es/standards-sdk.es127.js.map +1 -1
- package/dist/es/standards-sdk.es128.js +184 -2190
- package/dist/es/standards-sdk.es128.js.map +1 -1
- package/dist/es/standards-sdk.es129.js +100 -63
- package/dist/es/standards-sdk.es129.js.map +1 -1
- package/dist/es/standards-sdk.es13.js +200 -60
- package/dist/es/standards-sdk.es13.js.map +1 -1
- package/dist/es/standards-sdk.es130.js +112 -78
- package/dist/es/standards-sdk.es130.js.map +1 -1
- package/dist/es/standards-sdk.es131.js +232 -144
- package/dist/es/standards-sdk.es131.js.map +1 -1
- package/dist/es/standards-sdk.es132.js +181 -8
- package/dist/es/standards-sdk.es132.js.map +1 -1
- package/dist/es/standards-sdk.es133.js +118 -82
- package/dist/es/standards-sdk.es133.js.map +1 -1
- package/dist/es/standards-sdk.es134.js +322 -61
- package/dist/es/standards-sdk.es134.js.map +1 -1
- package/dist/es/standards-sdk.es135.js +464 -28
- package/dist/es/standards-sdk.es135.js.map +1 -1
- package/dist/es/standards-sdk.es136.js +14 -135
- package/dist/es/standards-sdk.es136.js.map +1 -1
- package/dist/es/standards-sdk.es137.js +78 -39
- package/dist/es/standards-sdk.es137.js.map +1 -1
- package/dist/es/standards-sdk.es138.js +85 -764
- package/dist/es/standards-sdk.es138.js.map +1 -1
- package/dist/es/standards-sdk.es139.js +135 -12250
- package/dist/es/standards-sdk.es139.js.map +1 -1
- package/dist/es/standards-sdk.es14.js +149 -178
- package/dist/es/standards-sdk.es14.js.map +1 -1
- package/dist/es/standards-sdk.es140.js +7 -56
- package/dist/es/standards-sdk.es140.js.map +1 -1
- package/dist/es/standards-sdk.es141.js +72 -68
- package/dist/es/standards-sdk.es141.js.map +1 -1
- package/dist/es/standards-sdk.es142.js +61 -13
- package/dist/es/standards-sdk.es142.js.map +1 -1
- package/dist/es/standards-sdk.es143.js +30 -172
- package/dist/es/standards-sdk.es143.js.map +1 -1
- package/dist/es/standards-sdk.es144.js +34 -322
- package/dist/es/standards-sdk.es144.js.map +1 -1
- package/dist/es/standards-sdk.es145.js +28 -346
- package/dist/es/standards-sdk.es145.js.map +1 -1
- package/dist/es/standards-sdk.es146.js +112 -427
- package/dist/es/standards-sdk.es146.js.map +1 -1
- package/dist/es/standards-sdk.es147.js +40 -329
- package/dist/es/standards-sdk.es147.js.map +1 -1
- package/dist/es/standards-sdk.es148.js +958 -76
- package/dist/es/standards-sdk.es148.js.map +1 -1
- package/dist/es/standards-sdk.es149.js +12292 -0
- package/dist/es/standards-sdk.es149.js.map +1 -0
- package/dist/es/standards-sdk.es15.js +152 -151
- package/dist/es/standards-sdk.es15.js.map +1 -1
- package/dist/es/standards-sdk.es150.js +59 -0
- package/dist/es/standards-sdk.es150.js.map +1 -0
- package/dist/es/standards-sdk.es151.js +87 -0
- package/dist/es/standards-sdk.es151.js.map +1 -0
- package/dist/es/standards-sdk.es152.js +20 -0
- package/dist/es/standards-sdk.es152.js.map +1 -0
- package/dist/es/standards-sdk.es153.js +175 -0
- package/dist/es/standards-sdk.es153.js.map +1 -0
- package/dist/es/standards-sdk.es154.js +325 -0
- package/dist/es/standards-sdk.es154.js.map +1 -0
- package/dist/es/standards-sdk.es155.js +349 -0
- package/dist/es/standards-sdk.es155.js.map +1 -0
- package/dist/es/standards-sdk.es156.js +456 -0
- package/dist/es/standards-sdk.es156.js.map +1 -0
- package/dist/es/standards-sdk.es157.js +334 -0
- package/dist/es/standards-sdk.es157.js.map +1 -0
- package/dist/es/standards-sdk.es158.js +79 -0
- package/dist/es/standards-sdk.es158.js.map +1 -0
- package/dist/es/standards-sdk.es159.js +242 -0
- package/dist/es/standards-sdk.es159.js.map +1 -0
- package/dist/es/standards-sdk.es16.js +917 -136
- package/dist/es/standards-sdk.es16.js.map +1 -1
- package/dist/es/standards-sdk.es160.js +247 -0
- package/dist/es/standards-sdk.es160.js.map +1 -0
- package/dist/es/standards-sdk.es17.js +23 -938
- package/dist/es/standards-sdk.es17.js.map +1 -1
- package/dist/es/standards-sdk.es18.js +2422 -24
- package/dist/es/standards-sdk.es18.js.map +1 -1
- package/dist/es/standards-sdk.es19.js +826 -2075
- package/dist/es/standards-sdk.es19.js.map +1 -1
- package/dist/es/standards-sdk.es2.js +654 -189
- package/dist/es/standards-sdk.es2.js.map +1 -1
- package/dist/es/standards-sdk.es20.js +205 -1086
- package/dist/es/standards-sdk.es20.js.map +1 -1
- package/dist/es/standards-sdk.es21.js +858 -221
- package/dist/es/standards-sdk.es21.js.map +1 -1
- package/dist/es/standards-sdk.es22.js +179 -903
- package/dist/es/standards-sdk.es22.js.map +1 -1
- package/dist/es/standards-sdk.es23.js +164 -179
- package/dist/es/standards-sdk.es23.js.map +1 -1
- package/dist/es/standards-sdk.es24.js +62 -118
- package/dist/es/standards-sdk.es24.js.map +1 -1
- package/dist/es/standards-sdk.es25.js +377 -52
- package/dist/es/standards-sdk.es25.js.map +1 -1
- package/dist/es/standards-sdk.es26.js +36 -394
- package/dist/es/standards-sdk.es26.js.map +1 -1
- package/dist/es/standards-sdk.es27.js +901 -50
- package/dist/es/standards-sdk.es27.js.map +1 -1
- package/dist/es/standards-sdk.es28.js +134 -897
- package/dist/es/standards-sdk.es28.js.map +1 -1
- package/dist/es/standards-sdk.es29.js +7 -134
- package/dist/es/standards-sdk.es29.js.map +1 -1
- package/dist/es/standards-sdk.es3.js +63 -680
- package/dist/es/standards-sdk.es3.js.map +1 -1
- package/dist/es/standards-sdk.es30.js +344 -7
- package/dist/es/standards-sdk.es30.js.map +1 -1
- package/dist/es/standards-sdk.es31.js +302 -287
- package/dist/es/standards-sdk.es31.js.map +1 -1
- package/dist/es/standards-sdk.es32.js +94 -322
- package/dist/es/standards-sdk.es32.js.map +1 -1
- package/dist/es/standards-sdk.es33.js +458 -101
- package/dist/es/standards-sdk.es33.js.map +1 -1
- package/dist/es/standards-sdk.es34.js +132 -451
- package/dist/es/standards-sdk.es34.js.map +1 -1
- package/dist/es/standards-sdk.es35.js +216 -130
- package/dist/es/standards-sdk.es35.js.map +1 -1
- package/dist/es/standards-sdk.es36.js +274 -191
- package/dist/es/standards-sdk.es36.js.map +1 -1
- package/dist/es/standards-sdk.es37.js +148 -87
- package/dist/es/standards-sdk.es37.js.map +1 -1
- package/dist/es/standards-sdk.es38.js +183 -320
- package/dist/es/standards-sdk.es38.js.map +1 -1
- package/dist/es/standards-sdk.es39.js +238 -161
- package/dist/es/standards-sdk.es39.js.map +1 -1
- package/dist/es/standards-sdk.es4.js +425 -63
- package/dist/es/standards-sdk.es4.js.map +1 -1
- package/dist/es/standards-sdk.es40.js +136 -254
- package/dist/es/standards-sdk.es40.js.map +1 -1
- package/dist/es/standards-sdk.es41.js +225 -176
- package/dist/es/standards-sdk.es41.js.map +1 -1
- package/dist/es/standards-sdk.es42.js +199 -261
- package/dist/es/standards-sdk.es42.js.map +1 -1
- package/dist/es/standards-sdk.es43.js +237 -199
- package/dist/es/standards-sdk.es43.js.map +1 -1
- package/dist/es/standards-sdk.es44.js +209 -201
- package/dist/es/standards-sdk.es44.js.map +1 -1
- package/dist/es/standards-sdk.es45.js +305 -201
- package/dist/es/standards-sdk.es45.js.map +1 -1
- package/dist/es/standards-sdk.es46.js +371 -261
- package/dist/es/standards-sdk.es46.js.map +1 -1
- package/dist/es/standards-sdk.es47.js +316 -371
- package/dist/es/standards-sdk.es47.js.map +1 -1
- package/dist/es/standards-sdk.es48.js +404 -336
- package/dist/es/standards-sdk.es48.js.map +1 -1
- package/dist/es/standards-sdk.es49.js +83 -449
- package/dist/es/standards-sdk.es49.js.map +1 -1
- package/dist/es/standards-sdk.es5.js +232 -354
- package/dist/es/standards-sdk.es5.js.map +1 -1
- package/dist/es/standards-sdk.es50.js +179 -89
- package/dist/es/standards-sdk.es50.js.map +1 -1
- package/dist/es/standards-sdk.es51.js +231 -165
- package/dist/es/standards-sdk.es51.js.map +1 -1
- package/dist/es/standards-sdk.es52.js +25 -262
- package/dist/es/standards-sdk.es52.js.map +1 -1
- package/dist/es/standards-sdk.es53.js +56 -26
- package/dist/es/standards-sdk.es53.js.map +1 -1
- package/dist/es/standards-sdk.es54.js +12 -57
- package/dist/es/standards-sdk.es54.js.map +1 -1
- package/dist/es/standards-sdk.es55.js +49 -12
- package/dist/es/standards-sdk.es55.js.map +1 -1
- package/dist/es/standards-sdk.es56.js +115 -43
- package/dist/es/standards-sdk.es56.js.map +1 -1
- package/dist/es/standards-sdk.es57.js +42 -115
- package/dist/es/standards-sdk.es57.js.map +1 -1
- package/dist/es/standards-sdk.es58.js +52 -43
- package/dist/es/standards-sdk.es58.js.map +1 -1
- package/dist/es/standards-sdk.es59.js +36 -50
- package/dist/es/standards-sdk.es59.js.map +1 -1
- package/dist/es/standards-sdk.es6.js +125 -246
- package/dist/es/standards-sdk.es6.js.map +1 -1
- package/dist/es/standards-sdk.es60.js +207 -39
- package/dist/es/standards-sdk.es60.js.map +1 -1
- package/dist/es/standards-sdk.es61.js +24 -195
- package/dist/es/standards-sdk.es61.js.map +1 -1
- package/dist/es/standards-sdk.es62.js +87 -25
- package/dist/es/standards-sdk.es62.js.map +1 -1
- package/dist/es/standards-sdk.es63.js +3 -51
- package/dist/es/standards-sdk.es63.js.map +1 -1
- package/dist/es/standards-sdk.es64.js +100 -3
- package/dist/es/standards-sdk.es64.js.map +1 -1
- package/dist/es/standards-sdk.es65.js +61 -62
- package/dist/es/standards-sdk.es65.js.map +1 -1
- package/dist/es/standards-sdk.es66.js +17 -98
- package/dist/es/standards-sdk.es66.js.map +1 -1
- package/dist/es/standards-sdk.es67.js +77 -19
- package/dist/es/standards-sdk.es67.js.map +1 -1
- package/dist/es/standards-sdk.es68.js +458 -77
- package/dist/es/standards-sdk.es68.js.map +1 -1
- package/dist/es/standards-sdk.es69.js +106 -240
- package/dist/es/standards-sdk.es69.js.map +1 -1
- package/dist/es/standards-sdk.es7.js +28 -183
- package/dist/es/standards-sdk.es7.js.map +1 -1
- package/dist/es/standards-sdk.es70.js +170 -286
- package/dist/es/standards-sdk.es70.js.map +1 -1
- package/dist/es/standards-sdk.es71.js +71 -207
- package/dist/es/standards-sdk.es71.js.map +1 -1
- package/dist/es/standards-sdk.es72.js +71 -72
- package/dist/es/standards-sdk.es72.js.map +1 -1
- package/dist/es/standards-sdk.es73.js +143 -71
- package/dist/es/standards-sdk.es73.js.map +1 -1
- package/dist/es/standards-sdk.es74.js +62 -136
- package/dist/es/standards-sdk.es74.js.map +1 -1
- package/dist/es/standards-sdk.es75.js +380 -45
- package/dist/es/standards-sdk.es75.js.map +1 -1
- package/dist/es/standards-sdk.es76.js +222 -130
- package/dist/es/standards-sdk.es76.js.map +1 -1
- package/dist/es/standards-sdk.es77.js +320 -444
- package/dist/es/standards-sdk.es77.js.map +1 -1
- package/dist/es/standards-sdk.es78.js +88 -364
- package/dist/es/standards-sdk.es78.js.map +1 -1
- package/dist/es/standards-sdk.es79.js +125 -89
- package/dist/es/standards-sdk.es79.js.map +1 -1
- package/dist/es/standards-sdk.es8.js +80 -29
- package/dist/es/standards-sdk.es8.js.map +1 -1
- package/dist/es/standards-sdk.es80.js +8 -125
- package/dist/es/standards-sdk.es80.js.map +1 -1
- package/dist/es/standards-sdk.es81.js +45 -6
- package/dist/es/standards-sdk.es81.js.map +1 -1
- package/dist/es/standards-sdk.es82.js +98 -44
- package/dist/es/standards-sdk.es82.js.map +1 -1
- package/dist/es/standards-sdk.es83.js +331 -84
- package/dist/es/standards-sdk.es83.js.map +1 -1
- package/dist/es/standards-sdk.es84.js +93 -160
- package/dist/es/standards-sdk.es84.js.map +1 -1
- package/dist/es/standards-sdk.es85.js +55 -275
- package/dist/es/standards-sdk.es85.js.map +1 -1
- package/dist/es/standards-sdk.es86.js +43 -55
- package/dist/es/standards-sdk.es86.js.map +1 -1
- package/dist/es/standards-sdk.es87.js +145 -22
- package/dist/es/standards-sdk.es87.js.map +1 -1
- package/dist/es/standards-sdk.es88.js +34 -47
- package/dist/es/standards-sdk.es88.js.map +1 -1
- package/dist/es/standards-sdk.es89.js +22 -57
- package/dist/es/standards-sdk.es89.js.map +1 -1
- package/dist/es/standards-sdk.es9.js +104 -80
- package/dist/es/standards-sdk.es9.js.map +1 -1
- package/dist/es/standards-sdk.es90.js +23 -28
- package/dist/es/standards-sdk.es90.js.map +1 -1
- package/dist/es/standards-sdk.es91.js +238 -23
- package/dist/es/standards-sdk.es91.js.map +1 -1
- package/dist/es/standards-sdk.es92.js +265 -152
- package/dist/es/standards-sdk.es92.js.map +1 -1
- package/dist/es/standards-sdk.es93.js +95 -68
- package/dist/es/standards-sdk.es93.js.map +1 -1
- package/dist/es/standards-sdk.es94.js +124 -136
- package/dist/es/standards-sdk.es94.js.map +1 -1
- package/dist/es/standards-sdk.es95.js +42 -138
- package/dist/es/standards-sdk.es95.js.map +1 -1
- package/dist/es/standards-sdk.es96.js +259 -42
- package/dist/es/standards-sdk.es96.js.map +1 -1
- package/dist/es/standards-sdk.es97.js +82 -243
- package/dist/es/standards-sdk.es97.js.map +1 -1
- package/dist/es/standards-sdk.es98.js +48 -47
- package/dist/es/standards-sdk.es98.js.map +1 -1
- package/dist/es/standards-sdk.es99.js +29 -100
- package/dist/es/standards-sdk.es99.js.map +1 -1
- package/dist/es/utils/crypto-abstraction.d.ts.map +1 -1
- package/dist/es/utils/crypto-env.d.ts.map +1 -1
- package/dist/es/utils/dynamic-import.d.ts +5 -1
- package/dist/es/utils/dynamic-import.d.ts.map +1 -1
- package/dist/es/utils/hash-adapter.d.ts.map +1 -1
- package/package.json +16 -16
- package/dist/cjs/patches/topic-autorenew-patch.d.ts +0 -2
- package/dist/cjs/patches/topic-autorenew-patch.d.ts.map +0 -1
- package/dist/es/patches/topic-autorenew-patch.d.ts +0 -2
- package/dist/es/patches/topic-autorenew-patch.d.ts.map +0 -1
|
@@ -1,12 +1,12 @@
|
|
|
1
|
-
import {
|
|
2
|
-
import { HCS2BaseClient } from "./standards-sdk.
|
|
3
|
-
import {
|
|
4
|
-
import {
|
|
5
|
-
import {
|
|
6
|
-
import {
|
|
7
|
-
|
|
1
|
+
import { TopicCreateTransaction, PublicKey } from "@hashgraph/sdk";
|
|
2
|
+
import { HCS2BaseClient } from "./standards-sdk.es70.js";
|
|
3
|
+
import { HCS2RegistryType, HCS2Operation } from "./standards-sdk.es67.js";
|
|
4
|
+
import { isBrowser } from "./standards-sdk.es118.js";
|
|
5
|
+
import { KeyTypeDetector } from "./standards-sdk.es113.js";
|
|
6
|
+
import { buildMessageTx } from "./standards-sdk.es147.js";
|
|
7
|
+
class BrowserHCS2Client extends HCS2BaseClient {
|
|
8
8
|
/**
|
|
9
|
-
* Create a new HCS-2 client
|
|
9
|
+
* Create a new browser HCS-2 client
|
|
10
10
|
* @param config Client configuration
|
|
11
11
|
*/
|
|
12
12
|
constructor(config) {
|
|
@@ -17,36 +17,25 @@ const _HCS2Client = class _HCS2Client extends HCS2BaseClient {
|
|
|
17
17
|
mirrorNodeUrl: config.mirrorNodeUrl,
|
|
18
18
|
logger: config.logger
|
|
19
19
|
});
|
|
20
|
-
this.
|
|
21
|
-
|
|
22
|
-
|
|
23
|
-
|
|
24
|
-
|
|
25
|
-
|
|
26
|
-
|
|
27
|
-
|
|
28
|
-
logger: this.logger,
|
|
29
|
-
client: this.createClient(config.network)
|
|
30
|
-
});
|
|
31
|
-
this.client = this.operatorCtx.client;
|
|
32
|
-
}
|
|
33
|
-
/**
|
|
34
|
-
* Initialize the Hedera client with operator information
|
|
35
|
-
*/
|
|
36
|
-
async ensureInitialized() {
|
|
37
|
-
await this.operatorCtx.ensureInitialized();
|
|
20
|
+
this.hwc = config.hwc;
|
|
21
|
+
if (!isBrowser) {
|
|
22
|
+
this.logger.error(
|
|
23
|
+
"BrowserHCS2Client initialized in server environment - browser-specific features will not be available. Use HCS2Client instead."
|
|
24
|
+
);
|
|
25
|
+
} else {
|
|
26
|
+
this.logger.info("HCS-2 browser client initialized successfully");
|
|
27
|
+
}
|
|
38
28
|
}
|
|
39
29
|
/**
|
|
40
|
-
*
|
|
41
|
-
* @
|
|
42
|
-
* @returns The Hedera client
|
|
30
|
+
* Get the operator account ID
|
|
31
|
+
* @returns The operator account ID
|
|
43
32
|
*/
|
|
44
|
-
|
|
45
|
-
|
|
46
|
-
|
|
47
|
-
|
|
48
|
-
return Client.forTestnet();
|
|
33
|
+
getOperatorId() {
|
|
34
|
+
const accountInfo = this.hwc.getAccountInfo();
|
|
35
|
+
if (!accountInfo || !accountInfo.accountId) {
|
|
36
|
+
throw new Error("No connected account found");
|
|
49
37
|
}
|
|
38
|
+
return accountInfo.accountId;
|
|
50
39
|
}
|
|
51
40
|
/**
|
|
52
41
|
* Create a new registry topic
|
|
@@ -55,79 +44,70 @@ const _HCS2Client = class _HCS2Client extends HCS2BaseClient {
|
|
|
55
44
|
*/
|
|
56
45
|
async createRegistry(options = {}) {
|
|
57
46
|
try {
|
|
58
|
-
await this.ensureInitialized();
|
|
59
47
|
const registryType = options.registryType ?? HCS2RegistryType.INDEXED;
|
|
60
48
|
const ttl = options.ttl ?? 86400;
|
|
61
49
|
const memo = this.generateRegistryMemo(registryType, ttl);
|
|
62
|
-
let
|
|
63
|
-
let adminPublicKey;
|
|
50
|
+
let transaction = new TopicCreateTransaction().setTopicMemo(memo);
|
|
64
51
|
if (options.adminKey) {
|
|
52
|
+
let adminPublicKey;
|
|
65
53
|
if (typeof options.adminKey === "string") {
|
|
66
54
|
try {
|
|
67
55
|
adminPublicKey = PublicKey.fromString(options.adminKey);
|
|
68
56
|
} catch {
|
|
69
|
-
const
|
|
70
|
-
|
|
71
|
-
"
|
|
72
|
-
|
|
73
|
-
|
|
57
|
+
const keyInfo = KeyTypeDetector.detect(options.adminKey);
|
|
58
|
+
if (keyInfo.rawBytes) {
|
|
59
|
+
adminPublicKey = keyInfo.type === "ed25519" ? PublicKey.fromBytesED25519(keyInfo.rawBytes) : PublicKey.fromBytesECDSA(keyInfo.rawBytes);
|
|
60
|
+
} else {
|
|
61
|
+
throw new Error("Failed to parse admin public key");
|
|
62
|
+
}
|
|
74
63
|
}
|
|
75
64
|
} else if (typeof options.adminKey === "boolean") {
|
|
76
|
-
adminPublicKey = this.
|
|
65
|
+
adminPublicKey = await this.mirrorNode.getPublicKey(
|
|
66
|
+
this.getOperatorId()
|
|
67
|
+
);
|
|
77
68
|
} else {
|
|
78
69
|
adminPublicKey = options.adminKey.publicKey;
|
|
79
|
-
adminKeyPrivate = options.adminKey;
|
|
80
70
|
}
|
|
71
|
+
transaction = transaction.setAdminKey(adminPublicKey);
|
|
81
72
|
}
|
|
82
|
-
let submitKeyPrivate;
|
|
83
|
-
let submitPublicKey;
|
|
84
73
|
if (options.submitKey) {
|
|
74
|
+
let submitPublicKey;
|
|
85
75
|
if (typeof options.submitKey === "string") {
|
|
86
76
|
try {
|
|
87
77
|
submitPublicKey = PublicKey.fromString(options.submitKey);
|
|
88
78
|
} catch {
|
|
89
|
-
const
|
|
90
|
-
|
|
91
|
-
"
|
|
92
|
-
|
|
93
|
-
|
|
79
|
+
const keyInfo = KeyTypeDetector.detect(options.submitKey);
|
|
80
|
+
if (keyInfo.rawBytes) {
|
|
81
|
+
submitPublicKey = keyInfo.type === "ed25519" ? PublicKey.fromBytesED25519(keyInfo.rawBytes) : PublicKey.fromBytesECDSA(keyInfo.rawBytes);
|
|
82
|
+
} else {
|
|
83
|
+
throw new Error("Failed to parse submit public key");
|
|
84
|
+
}
|
|
94
85
|
}
|
|
95
86
|
} else if (typeof options.submitKey === "boolean") {
|
|
96
|
-
submitPublicKey = this.
|
|
87
|
+
submitPublicKey = await this.mirrorNode.getPublicKey(
|
|
88
|
+
this.getOperatorId()
|
|
89
|
+
);
|
|
97
90
|
} else {
|
|
98
91
|
submitPublicKey = options.submitKey.publicKey;
|
|
99
|
-
submitKeyPrivate = options.submitKey;
|
|
100
92
|
}
|
|
93
|
+
transaction = transaction.setSubmitKey(submitPublicKey);
|
|
101
94
|
}
|
|
102
|
-
const
|
|
103
|
-
|
|
104
|
-
|
|
105
|
-
adminKey: adminPublicKey,
|
|
106
|
-
submitKey: submitPublicKey,
|
|
107
|
-
operatorPublicKey: this.operatorCtx.operatorKey.publicKey
|
|
108
|
-
});
|
|
109
|
-
const frozenTx = await transaction.freezeWith(this.client);
|
|
110
|
-
if (adminKeyPrivate) {
|
|
111
|
-
await frozenTx.sign(adminKeyPrivate);
|
|
95
|
+
const txResponse = await this.executeWithWallet(transaction);
|
|
96
|
+
if (txResponse?.error) {
|
|
97
|
+
throw new Error(txResponse.error);
|
|
112
98
|
}
|
|
113
|
-
|
|
114
|
-
|
|
115
|
-
}
|
|
116
|
-
const txResponse = await frozenTx.execute(this.client);
|
|
117
|
-
const receipt = await txResponse.getReceipt(this.client);
|
|
118
|
-
const topicId = receipt.topicId;
|
|
119
|
-
if (!topicId) {
|
|
99
|
+
const resultReceipt = txResponse?.result;
|
|
100
|
+
if (!resultReceipt?.topicId) {
|
|
120
101
|
throw new Error("Failed to create registry: No topic ID in receipt");
|
|
121
102
|
}
|
|
122
|
-
const
|
|
123
|
-
this.registryTypeCache.set(topicIdStr, registryType);
|
|
103
|
+
const topicId = resultReceipt.topicId.toString();
|
|
124
104
|
this.logger.info(
|
|
125
|
-
`Created registry topic: ${
|
|
105
|
+
`Created registry topic: ${topicId} (${registryType === HCS2RegistryType.INDEXED ? "Indexed" : "Non-indexed"}, TTL: ${ttl}s)`
|
|
126
106
|
);
|
|
127
107
|
return {
|
|
128
108
|
success: true,
|
|
129
|
-
topicId
|
|
130
|
-
transactionId: txResponse.transactionId
|
|
109
|
+
topicId,
|
|
110
|
+
transactionId: txResponse.transactionId || "unknown"
|
|
131
111
|
};
|
|
132
112
|
} catch (error) {
|
|
133
113
|
this.logger.error(`Failed to create registry: ${error}`);
|
|
@@ -141,28 +121,23 @@ const _HCS2Client = class _HCS2Client extends HCS2BaseClient {
|
|
|
141
121
|
* Register a new entry in the registry
|
|
142
122
|
* @param registryTopicId The topic ID of the registry
|
|
143
123
|
* @param options Registration options
|
|
144
|
-
* @param protocol Optional protocol version (defaults to 'hcs-2')
|
|
145
124
|
* @returns Promise resolving to the operation result
|
|
146
125
|
*/
|
|
147
|
-
async registerEntry(registryTopicId, options
|
|
126
|
+
async registerEntry(registryTopicId, options) {
|
|
148
127
|
try {
|
|
149
|
-
await this.ensureInitialized();
|
|
150
128
|
const message = this.createRegisterMessage(
|
|
151
129
|
options.targetTopicId,
|
|
152
130
|
options.metadata,
|
|
153
|
-
options.memo
|
|
154
|
-
protocol
|
|
155
|
-
);
|
|
156
|
-
const registryType = options.registryType ?? await this.resolveRegistryType(registryTopicId);
|
|
157
|
-
this.registryTypeCache.set(registryTopicId, registryType);
|
|
158
|
-
const analyticsMemo = options.analyticsMemo ?? this.buildAnalyticsMemo(HCS2Operation.REGISTER, registryType);
|
|
159
|
-
const receipt = await this.submitMessage(
|
|
160
|
-
registryTopicId,
|
|
161
|
-
message,
|
|
162
|
-
analyticsMemo
|
|
131
|
+
options.memo
|
|
163
132
|
);
|
|
133
|
+
if (message.op !== HCS2Operation.REGISTER) {
|
|
134
|
+
throw new Error(
|
|
135
|
+
`Invalid operation type: ${message.op}, expected ${HCS2Operation.REGISTER}`
|
|
136
|
+
);
|
|
137
|
+
}
|
|
138
|
+
const receipt = await this.submitMessage(registryTopicId, message);
|
|
164
139
|
this.logger.info(
|
|
165
|
-
`Registered entry in registry ${registryTopicId} pointing to topic ${options.targetTopicId}
|
|
140
|
+
`Registered entry in registry ${registryTopicId} pointing to topic ${options.targetTopicId}`
|
|
166
141
|
);
|
|
167
142
|
return {
|
|
168
143
|
success: true,
|
|
@@ -185,7 +160,6 @@ const _HCS2Client = class _HCS2Client extends HCS2BaseClient {
|
|
|
185
160
|
*/
|
|
186
161
|
async updateEntry(registryTopicId, options) {
|
|
187
162
|
try {
|
|
188
|
-
await this.ensureInitialized();
|
|
189
163
|
const registryInfo = await this.mirrorNode.getTopicInfo(registryTopicId);
|
|
190
164
|
const memoInfo = this.parseRegistryTypeFromMemo(registryInfo.memo);
|
|
191
165
|
if (!memoInfo || memoInfo.registryType !== HCS2RegistryType.INDEXED) {
|
|
@@ -199,14 +173,7 @@ const _HCS2Client = class _HCS2Client extends HCS2BaseClient {
|
|
|
199
173
|
options.metadata,
|
|
200
174
|
options.memo
|
|
201
175
|
);
|
|
202
|
-
const
|
|
203
|
-
this.registryTypeCache.set(registryTopicId, registryType);
|
|
204
|
-
const analyticsMemo = options.analyticsMemo ?? this.buildAnalyticsMemo(HCS2Operation.UPDATE, registryType);
|
|
205
|
-
const receipt = await this.submitMessage(
|
|
206
|
-
registryTopicId,
|
|
207
|
-
message,
|
|
208
|
-
analyticsMemo
|
|
209
|
-
);
|
|
176
|
+
const receipt = await this.submitMessage(registryTopicId, message);
|
|
210
177
|
this.logger.info(
|
|
211
178
|
`Updated entry with UID ${options.uid} in registry ${registryTopicId}`
|
|
212
179
|
);
|
|
@@ -217,7 +184,10 @@ const _HCS2Client = class _HCS2Client extends HCS2BaseClient {
|
|
|
217
184
|
};
|
|
218
185
|
} catch (error) {
|
|
219
186
|
this.logger.error(`Failed to update entry: ${error}`);
|
|
220
|
-
|
|
187
|
+
return {
|
|
188
|
+
success: false,
|
|
189
|
+
error: `Failed to update entry: ${error}`
|
|
190
|
+
};
|
|
221
191
|
}
|
|
222
192
|
}
|
|
223
193
|
/**
|
|
@@ -228,7 +198,6 @@ const _HCS2Client = class _HCS2Client extends HCS2BaseClient {
|
|
|
228
198
|
*/
|
|
229
199
|
async deleteEntry(registryTopicId, options) {
|
|
230
200
|
try {
|
|
231
|
-
await this.ensureInitialized();
|
|
232
201
|
const registryInfo = await this.mirrorNode.getTopicInfo(registryTopicId);
|
|
233
202
|
const memoInfo = this.parseRegistryTypeFromMemo(registryInfo.memo);
|
|
234
203
|
if (!memoInfo || memoInfo.registryType !== HCS2RegistryType.INDEXED) {
|
|
@@ -237,14 +206,7 @@ const _HCS2Client = class _HCS2Client extends HCS2BaseClient {
|
|
|
237
206
|
);
|
|
238
207
|
}
|
|
239
208
|
const message = this.createDeleteMessage(options.uid, options.memo);
|
|
240
|
-
const
|
|
241
|
-
this.registryTypeCache.set(registryTopicId, registryType);
|
|
242
|
-
const analyticsMemo = options.analyticsMemo ?? this.buildAnalyticsMemo(HCS2Operation.DELETE, registryType);
|
|
243
|
-
const receipt = await this.submitMessage(
|
|
244
|
-
registryTopicId,
|
|
245
|
-
message,
|
|
246
|
-
analyticsMemo
|
|
247
|
-
);
|
|
209
|
+
const receipt = await this.submitMessage(registryTopicId, message);
|
|
248
210
|
this.logger.info(
|
|
249
211
|
`Deleted entry with UID ${options.uid} from registry ${registryTopicId}`
|
|
250
212
|
);
|
|
@@ -255,7 +217,10 @@ const _HCS2Client = class _HCS2Client extends HCS2BaseClient {
|
|
|
255
217
|
};
|
|
256
218
|
} catch (error) {
|
|
257
219
|
this.logger.error(`Failed to delete entry: ${error}`);
|
|
258
|
-
|
|
220
|
+
return {
|
|
221
|
+
success: false,
|
|
222
|
+
error: `Failed to delete entry: ${error}`
|
|
223
|
+
};
|
|
259
224
|
}
|
|
260
225
|
}
|
|
261
226
|
/**
|
|
@@ -266,20 +231,12 @@ const _HCS2Client = class _HCS2Client extends HCS2BaseClient {
|
|
|
266
231
|
*/
|
|
267
232
|
async migrateRegistry(registryTopicId, options) {
|
|
268
233
|
try {
|
|
269
|
-
await this.ensureInitialized();
|
|
270
234
|
const message = this.createMigrateMessage(
|
|
271
235
|
options.targetTopicId,
|
|
272
236
|
options.metadata,
|
|
273
237
|
options.memo
|
|
274
238
|
);
|
|
275
|
-
const
|
|
276
|
-
this.registryTypeCache.set(registryTopicId, registryType);
|
|
277
|
-
const analyticsMemo = options.analyticsMemo ?? this.buildAnalyticsMemo(HCS2Operation.MIGRATE, registryType);
|
|
278
|
-
const receipt = await this.submitMessage(
|
|
279
|
-
registryTopicId,
|
|
280
|
-
message,
|
|
281
|
-
analyticsMemo
|
|
282
|
-
);
|
|
239
|
+
const receipt = await this.submitMessage(registryTopicId, message);
|
|
283
240
|
this.logger.info(
|
|
284
241
|
`Migrated registry ${registryTopicId} to ${options.targetTopicId}`
|
|
285
242
|
);
|
|
@@ -290,7 +247,10 @@ const _HCS2Client = class _HCS2Client extends HCS2BaseClient {
|
|
|
290
247
|
};
|
|
291
248
|
} catch (error) {
|
|
292
249
|
this.logger.error(`Failed to migrate registry: ${error}`);
|
|
293
|
-
|
|
250
|
+
return {
|
|
251
|
+
success: false,
|
|
252
|
+
error: `Failed to migrate registry: ${error}`
|
|
253
|
+
};
|
|
294
254
|
}
|
|
295
255
|
}
|
|
296
256
|
/**
|
|
@@ -301,161 +261,67 @@ const _HCS2Client = class _HCS2Client extends HCS2BaseClient {
|
|
|
301
261
|
*/
|
|
302
262
|
async getRegistry(topicId, options = {}) {
|
|
303
263
|
try {
|
|
304
|
-
await this.ensureInitialized();
|
|
305
264
|
const topicInfo = await this.mirrorNode.getTopicInfo(topicId);
|
|
306
|
-
this.logger.debug(
|
|
307
|
-
`Retrieved topic info for ${topicId}: ${JSON.stringify(topicInfo)}`
|
|
308
|
-
);
|
|
309
265
|
const memoInfo = this.parseRegistryTypeFromMemo(topicInfo.memo);
|
|
310
266
|
if (!memoInfo) {
|
|
311
267
|
throw new Error(
|
|
312
268
|
`Topic ${topicId} is not an HCS-2 registry (invalid memo format)`
|
|
313
269
|
);
|
|
314
270
|
}
|
|
315
|
-
this.
|
|
316
|
-
|
|
317
|
-
|
|
318
|
-
|
|
271
|
+
const messagesResult = await this.mirrorNode.getTopicMessages(topicId, {
|
|
272
|
+
sequenceNumber: options.skip && options.skip > 0 ? `gt:${options.skip}` : void 0,
|
|
273
|
+
limit: options.limit ?? 100,
|
|
274
|
+
order: options.order ?? "asc"
|
|
275
|
+
});
|
|
276
|
+
const messages = options.limit ? messagesResult.slice(0, options.limit) : messagesResult;
|
|
277
|
+
return this.parseRegistryEntries(
|
|
319
278
|
topicId,
|
|
320
|
-
|
|
321
|
-
|
|
322
|
-
|
|
323
|
-
order: options.order ?? "asc"
|
|
324
|
-
}
|
|
325
|
-
);
|
|
326
|
-
const rawMessages = options.limit ? rawMessagesResult.slice(0, options.limit) : rawMessagesResult;
|
|
327
|
-
this.logger.debug(
|
|
328
|
-
`Retrieved ${rawMessagesResult.length} messages, using ${rawMessages.length} after applying limit.`
|
|
279
|
+
messages,
|
|
280
|
+
memoInfo.registryType,
|
|
281
|
+
memoInfo.ttl
|
|
329
282
|
);
|
|
330
|
-
const entries = [];
|
|
331
|
-
let latestEntry;
|
|
332
|
-
for (const msg of rawMessages) {
|
|
333
|
-
try {
|
|
334
|
-
const message = {
|
|
335
|
-
p: "hcs-2",
|
|
336
|
-
op: msg.op,
|
|
337
|
-
t_id: msg.t_id,
|
|
338
|
-
uid: msg.uid,
|
|
339
|
-
metadata: msg.metadata,
|
|
340
|
-
m: msg.m
|
|
341
|
-
};
|
|
342
|
-
const { valid, errors } = this.validateMessage(message);
|
|
343
|
-
if (!valid) {
|
|
344
|
-
this.logger.warn(`Invalid HCS-2 message: ${errors.join(", ")}`);
|
|
345
|
-
continue;
|
|
346
|
-
}
|
|
347
|
-
const entry = {
|
|
348
|
-
topicId,
|
|
349
|
-
sequence: msg.sequence_number,
|
|
350
|
-
timestamp: msg.consensus_timestamp,
|
|
351
|
-
payer: msg.payer_account_id || msg.payer || "",
|
|
352
|
-
message,
|
|
353
|
-
consensus_timestamp: msg.consensus_timestamp,
|
|
354
|
-
registry_type: memoInfo.registryType
|
|
355
|
-
};
|
|
356
|
-
entries.push(entry);
|
|
357
|
-
if (memoInfo.registryType === HCS2RegistryType.NON_INDEXED || !latestEntry || entry.timestamp > latestEntry.timestamp) {
|
|
358
|
-
latestEntry = entry;
|
|
359
|
-
}
|
|
360
|
-
} catch (error) {
|
|
361
|
-
this.logger.warn(`Error processing message: ${error}`);
|
|
362
|
-
}
|
|
363
|
-
}
|
|
364
|
-
this.logger.debug(
|
|
365
|
-
`Processed ${entries.length} valid entries for registry ${topicId}`
|
|
366
|
-
);
|
|
367
|
-
const registry = {
|
|
368
|
-
topicId,
|
|
369
|
-
registryType: memoInfo.registryType,
|
|
370
|
-
ttl: memoInfo.ttl,
|
|
371
|
-
entries: memoInfo.registryType === HCS2RegistryType.INDEXED ? entries : latestEntry ? [latestEntry] : [],
|
|
372
|
-
latestEntry
|
|
373
|
-
};
|
|
374
|
-
return registry;
|
|
375
283
|
} catch (error) {
|
|
376
284
|
this.logger.error(`Failed to get registry: ${error}`);
|
|
377
285
|
throw error;
|
|
378
286
|
}
|
|
379
287
|
}
|
|
380
|
-
buildAnalyticsMemo(operation, registryType) {
|
|
381
|
-
const opCode = _HCS2Client.operationAnalyticsCode[operation];
|
|
382
|
-
return `hcs-2:op:${opCode}:${registryType}`;
|
|
383
|
-
}
|
|
384
|
-
async resolveRegistryType(topicId) {
|
|
385
|
-
const cached = this.registryTypeCache.get(topicId);
|
|
386
|
-
if (cached !== void 0) {
|
|
387
|
-
return cached;
|
|
388
|
-
}
|
|
389
|
-
const topicInfo = await this.mirrorNode.getTopicInfo(topicId);
|
|
390
|
-
const memoInfo = this.parseRegistryTypeFromMemo(topicInfo.memo);
|
|
391
|
-
if (!memoInfo) {
|
|
392
|
-
throw new Error(
|
|
393
|
-
`Topic ${topicId} is not an HCS-2 registry (invalid memo format)`
|
|
394
|
-
);
|
|
395
|
-
}
|
|
396
|
-
this.registryTypeCache.set(topicId, memoInfo.registryType);
|
|
397
|
-
return memoInfo.registryType;
|
|
398
|
-
}
|
|
399
288
|
/**
|
|
400
289
|
* Submit a message to a topic
|
|
401
290
|
* @param topicId The topic ID to submit to
|
|
402
291
|
* @param payload The message payload
|
|
403
292
|
* @returns Promise resolving to the transaction receipt
|
|
404
293
|
*/
|
|
405
|
-
async submitMessage(topicId, payload
|
|
294
|
+
async submitMessage(topicId, payload) {
|
|
406
295
|
try {
|
|
407
|
-
await this.ensureInitialized();
|
|
408
296
|
const { valid, errors } = this.validateMessage(payload);
|
|
409
297
|
if (!valid) {
|
|
410
298
|
throw new Error(`Invalid HCS-2 message: ${errors.join(", ")}`);
|
|
411
299
|
}
|
|
412
300
|
const transaction = buildMessageTx({
|
|
413
301
|
topicId,
|
|
414
|
-
message: JSON.stringify(payload)
|
|
415
|
-
transactionMemo: analyticsMemo
|
|
302
|
+
message: JSON.stringify(payload)
|
|
416
303
|
});
|
|
417
|
-
const txResponse = await
|
|
418
|
-
|
|
419
|
-
|
|
304
|
+
const txResponse = await this.executeWithWallet(transaction);
|
|
305
|
+
if (txResponse?.error) {
|
|
306
|
+
throw new Error(txResponse.error);
|
|
307
|
+
}
|
|
308
|
+
return txResponse.result;
|
|
420
309
|
} catch (error) {
|
|
421
310
|
this.logger.error(`Failed to submit message: ${error}`);
|
|
422
311
|
throw error;
|
|
423
312
|
}
|
|
424
313
|
}
|
|
425
|
-
|
|
426
|
-
|
|
427
|
-
|
|
428
|
-
|
|
429
|
-
|
|
430
|
-
|
|
431
|
-
|
|
432
|
-
|
|
433
|
-
* Close the client and release resources
|
|
434
|
-
*/
|
|
435
|
-
close() {
|
|
436
|
-
this.logger.info("HCS-2 client closed.");
|
|
437
|
-
}
|
|
438
|
-
/**
|
|
439
|
-
* Get the configured key type (ed25519 or ecdsa)
|
|
440
|
-
*/
|
|
441
|
-
getKeyType() {
|
|
442
|
-
return this.operatorCtx.keyType;
|
|
443
|
-
}
|
|
444
|
-
/**
|
|
445
|
-
* Get the configured operator private key
|
|
446
|
-
*/
|
|
447
|
-
getOperatorKey() {
|
|
448
|
-
return this.operatorCtx.operatorKey;
|
|
314
|
+
async executeWithWallet(transaction) {
|
|
315
|
+
const maybeExec = this.hwc.executeTransactionWithErrorHandling;
|
|
316
|
+
if (!maybeExec) {
|
|
317
|
+
throw new Error(
|
|
318
|
+
"Wallet SDK does not support executeTransactionWithErrorHandling"
|
|
319
|
+
);
|
|
320
|
+
}
|
|
321
|
+
return await maybeExec.call(this.hwc, transaction, false);
|
|
449
322
|
}
|
|
450
|
-
}
|
|
451
|
-
_HCS2Client.operationAnalyticsCode = {
|
|
452
|
-
[HCS2Operation.REGISTER]: 0,
|
|
453
|
-
[HCS2Operation.UPDATE]: 1,
|
|
454
|
-
[HCS2Operation.DELETE]: 2,
|
|
455
|
-
[HCS2Operation.MIGRATE]: 3
|
|
456
|
-
};
|
|
457
|
-
let HCS2Client = _HCS2Client;
|
|
323
|
+
}
|
|
458
324
|
export {
|
|
459
|
-
|
|
325
|
+
BrowserHCS2Client
|
|
460
326
|
};
|
|
461
327
|
//# sourceMappingURL=standards-sdk.es69.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"standards-sdk.es69.js","sources":["../../src/hcs-2/client.ts"],"sourcesContent":["import {\n Client,\n TopicCreateTransaction,\n TopicMessageSubmitTransaction,\n PrivateKey,\n TopicId,\n TransactionReceipt,\n AccountId,\n PublicKey,\n} from '@hashgraph/sdk';\nimport { HCS2BaseClient } from './base-client';\nimport {\n HCS2ClientConfig,\n HCS2Message,\n HCS2Operation,\n HCS2RegistryType,\n TopicRegistrationResponse,\n RegistryOperationResponse,\n TopicRegistry,\n CreateRegistryOptions,\n RegisterEntryOptions,\n UpdateEntryOptions,\n DeleteEntryOptions,\n MigrateTopicOptions,\n QueryRegistryOptions,\n RegistryEntry,\n} from './types';\nimport { NetworkType } from '../utils/types';\nimport {\n NodeOperatorResolver,\n createNodeOperatorContext,\n type NodeOperatorContext,\n} from '../common/node-operator-resolver';\nimport { buildMessageTx } from '../common/tx/tx-utils';\nimport { buildHcs2CreateRegistryTx } from './tx';\n\n/**\n * SDK client configuration for HCS-2\n */\nexport interface SDKHCS2ClientConfig extends HCS2ClientConfig {\n operatorId: string | AccountId;\n operatorKey: string | PrivateKey;\n keyType?: 'ed25519' | 'ecdsa';\n}\n\n/**\n * SDK client for HCS-2 operations\n */\nexport class HCS2Client extends HCS2BaseClient {\n private static readonly operationAnalyticsCode: Record<\n HCS2Operation,\n number\n > = {\n [HCS2Operation.REGISTER]: 0,\n [HCS2Operation.UPDATE]: 1,\n [HCS2Operation.DELETE]: 2,\n [HCS2Operation.MIGRATE]: 3,\n };\n\n private client: Client;\n private operatorId: AccountId;\n private operatorCtx: NodeOperatorContext;\n private readonly registryTypeCache = new Map<string, HCS2RegistryType>();\n\n /**\n * Create a new HCS-2 client\n * @param config Client configuration\n */\n constructor(config: SDKHCS2ClientConfig) {\n super({\n network: config.network,\n logLevel: config.logLevel,\n silent: config.silent,\n mirrorNodeUrl: config.mirrorNodeUrl,\n logger: config.logger,\n });\n\n this.operatorId =\n typeof config.operatorId === 'string'\n ? AccountId.fromString(config.operatorId)\n : config.operatorId;\n\n this.operatorCtx = createNodeOperatorContext({\n network: this.network,\n operatorId: this.operatorId,\n operatorKey: config.operatorKey,\n keyType: config.keyType,\n mirrorNode: this.mirrorNode,\n logger: this.logger,\n client: this.createClient(config.network),\n });\n this.client = this.operatorCtx.client;\n }\n\n /**\n * Initialize the Hedera client with operator information\n */\n private async ensureInitialized(): Promise<void> {\n await this.operatorCtx.ensureInitialized();\n }\n\n /**\n * Create a Hedera client for the specified network\n * @param network The network to connect to\n * @returns The Hedera client\n */\n private createClient(network: NetworkType): Client {\n if (network === 'mainnet') {\n return Client.forMainnet();\n } else {\n return Client.forTestnet();\n }\n }\n\n /**\n * Create a new registry topic\n * @param options Registry creation options\n * @returns Promise resolving to the transaction result\n */\n async createRegistry(\n options: CreateRegistryOptions = {},\n ): Promise<TopicRegistrationResponse> {\n try {\n await this.ensureInitialized();\n const registryType = options.registryType ?? HCS2RegistryType.INDEXED;\n const ttl = options.ttl ?? 86400; // Default TTL: 24 hours\n\n const memo = this.generateRegistryMemo(registryType, ttl);\n\n let adminKeyPrivate: PrivateKey | undefined;\n let adminPublicKey: PublicKey | undefined;\n if (options.adminKey) {\n if (typeof options.adminKey === 'string') {\n try {\n adminPublicKey = PublicKey.fromString(options.adminKey);\n } catch {\n const keyBytes = Buffer.from(\n options.adminKey.replace(/^0x/i, ''),\n 'hex',\n );\n adminPublicKey =\n this.operatorCtx.keyType === 'ed25519'\n ? PublicKey.fromBytesED25519(keyBytes)\n : PublicKey.fromBytesECDSA(keyBytes);\n }\n } else if (typeof options.adminKey === 'boolean') {\n adminPublicKey = this.operatorCtx.operatorKey.publicKey;\n } else {\n adminPublicKey = options.adminKey.publicKey;\n adminKeyPrivate = options.adminKey;\n }\n }\n\n let submitKeyPrivate: PrivateKey | undefined;\n let submitPublicKey: PublicKey | undefined;\n if (options.submitKey) {\n if (typeof options.submitKey === 'string') {\n try {\n submitPublicKey = PublicKey.fromString(options.submitKey);\n } catch {\n const keyBytes = Buffer.from(\n options.submitKey.replace(/^0x/i, ''),\n 'hex',\n );\n submitPublicKey =\n this.operatorCtx.keyType === 'ed25519'\n ? PublicKey.fromBytesED25519(keyBytes)\n : PublicKey.fromBytesECDSA(keyBytes);\n }\n } else if (typeof options.submitKey === 'boolean') {\n submitPublicKey = this.operatorCtx.operatorKey.publicKey;\n } else {\n submitPublicKey = options.submitKey.publicKey;\n submitKeyPrivate = options.submitKey;\n }\n }\n\n const transaction = buildHcs2CreateRegistryTx({\n registryType,\n ttl,\n adminKey: adminPublicKey,\n submitKey: submitPublicKey,\n operatorPublicKey: this.operatorCtx.operatorKey.publicKey,\n });\n\n const frozenTx = await transaction.freezeWith(this.client);\n\n if (adminKeyPrivate) {\n await frozenTx.sign(adminKeyPrivate);\n }\n\n if (submitKeyPrivate) {\n await frozenTx.sign(submitKeyPrivate);\n }\n\n const txResponse = await frozenTx.execute(this.client);\n\n const receipt = await txResponse.getReceipt(this.client);\n const topicId = receipt.topicId;\n\n if (!topicId) {\n throw new Error('Failed to create registry: No topic ID in receipt');\n }\n\n const topicIdStr = topicId.toString();\n this.registryTypeCache.set(topicIdStr, registryType);\n\n this.logger.info(\n `Created registry topic: ${topicIdStr} (${registryType === HCS2RegistryType.INDEXED ? 'Indexed' : 'Non-indexed'}, TTL: ${ttl}s)`,\n );\n\n return {\n success: true,\n topicId: topicIdStr,\n transactionId: txResponse.transactionId.toString(),\n };\n } catch (error) {\n this.logger.error(`Failed to create registry: ${error}`);\n return {\n success: false,\n error: `Failed to create registry: ${error}`,\n };\n }\n }\n\n /**\n * Register a new entry in the registry\n * @param registryTopicId The topic ID of the registry\n * @param options Registration options\n * @param protocol Optional protocol version (defaults to 'hcs-2')\n * @returns Promise resolving to the operation result\n */\n async registerEntry(\n registryTopicId: string,\n options: RegisterEntryOptions,\n protocol: string = 'hcs-2',\n ): Promise<RegistryOperationResponse> {\n try {\n await this.ensureInitialized();\n const message = this.createRegisterMessage(\n options.targetTopicId,\n options.metadata,\n options.memo,\n protocol,\n );\n\n const registryType =\n options.registryType ??\n (await this.resolveRegistryType(registryTopicId));\n this.registryTypeCache.set(registryTopicId, registryType);\n const analyticsMemo =\n options.analyticsMemo ??\n this.buildAnalyticsMemo(HCS2Operation.REGISTER, registryType);\n\n const receipt = await this.submitMessage(\n registryTopicId,\n message,\n analyticsMemo,\n );\n\n this.logger.info(\n `Registered entry in registry ${registryTopicId} pointing to topic ${options.targetTopicId} using protocol ${protocol}`,\n );\n\n return {\n success: true,\n receipt,\n sequenceNumber: receipt.topicSequenceNumber?.low ?? undefined,\n };\n } catch (error) {\n this.logger.error(`Failed to register entry: ${error}`);\n return {\n success: false,\n error: `Failed to register entry: ${error}`,\n };\n }\n }\n\n /**\n * Update an existing entry in the registry (indexed registries only)\n * @param registryTopicId The topic ID of the registry\n * @param options Update options\n * @returns Promise resolving to the operation result\n */\n async updateEntry(\n registryTopicId: string,\n options: UpdateEntryOptions,\n ): Promise<RegistryOperationResponse> {\n try {\n await this.ensureInitialized();\n const registryInfo = await this.mirrorNode.getTopicInfo(registryTopicId);\n const memoInfo = this.parseRegistryTypeFromMemo(registryInfo.memo);\n\n if (!memoInfo || memoInfo.registryType !== HCS2RegistryType.INDEXED) {\n throw new Error(\n 'Update operation is only valid for indexed registries',\n );\n }\n\n const message = this.createUpdateMessage(\n options.targetTopicId,\n options.uid,\n options.metadata,\n options.memo,\n );\n\n const registryType =\n options.registryType ??\n (await this.resolveRegistryType(registryTopicId));\n this.registryTypeCache.set(registryTopicId, registryType);\n const analyticsMemo =\n options.analyticsMemo ??\n this.buildAnalyticsMemo(HCS2Operation.UPDATE, registryType);\n\n const receipt = await this.submitMessage(\n registryTopicId,\n message,\n analyticsMemo,\n );\n\n this.logger.info(\n `Updated entry with UID ${options.uid} in registry ${registryTopicId}`,\n );\n\n return {\n success: true,\n receipt,\n sequenceNumber: receipt.topicSequenceNumber?.low ?? undefined,\n };\n } catch (error) {\n this.logger.error(`Failed to update entry: ${error}`);\n throw error;\n }\n }\n\n /**\n * Delete an entry from the registry (indexed registries only)\n * @param registryTopicId The topic ID of the registry\n * @param options Delete options\n * @returns Promise resolving to the operation result\n */\n async deleteEntry(\n registryTopicId: string,\n options: DeleteEntryOptions,\n ): Promise<RegistryOperationResponse> {\n try {\n await this.ensureInitialized();\n const registryInfo = await this.mirrorNode.getTopicInfo(registryTopicId);\n const memoInfo = this.parseRegistryTypeFromMemo(registryInfo.memo);\n\n if (!memoInfo || memoInfo.registryType !== HCS2RegistryType.INDEXED) {\n throw new Error(\n 'Delete operation is only valid for indexed registries',\n );\n }\n\n const message = this.createDeleteMessage(options.uid, options.memo);\n\n const registryType =\n options.registryType ??\n (await this.resolveRegistryType(registryTopicId));\n this.registryTypeCache.set(registryTopicId, registryType);\n const analyticsMemo =\n options.analyticsMemo ??\n this.buildAnalyticsMemo(HCS2Operation.DELETE, registryType);\n\n const receipt = await this.submitMessage(\n registryTopicId,\n message,\n analyticsMemo,\n );\n\n this.logger.info(\n `Deleted entry with UID ${options.uid} from registry ${registryTopicId}`,\n );\n\n return {\n success: true,\n receipt,\n sequenceNumber: receipt.topicSequenceNumber?.low ?? undefined,\n };\n } catch (error) {\n this.logger.error(`Failed to delete entry: ${error}`);\n throw error;\n }\n }\n\n /**\n * Migrate a registry to a new topic\n * @param registryTopicId The topic ID of the registry\n * @param options Migration options\n * @returns Promise resolving to the operation result\n */\n async migrateRegistry(\n registryTopicId: string,\n options: MigrateTopicOptions,\n ): Promise<RegistryOperationResponse> {\n try {\n await this.ensureInitialized();\n const message = this.createMigrateMessage(\n options.targetTopicId,\n options.metadata,\n options.memo,\n );\n\n const registryType =\n options.registryType ??\n (await this.resolveRegistryType(registryTopicId));\n this.registryTypeCache.set(registryTopicId, registryType);\n const analyticsMemo =\n options.analyticsMemo ??\n this.buildAnalyticsMemo(HCS2Operation.MIGRATE, registryType);\n\n const receipt = await this.submitMessage(\n registryTopicId,\n message,\n analyticsMemo,\n );\n\n this.logger.info(\n `Migrated registry ${registryTopicId} to ${options.targetTopicId}`,\n );\n\n return {\n success: true,\n receipt,\n sequenceNumber: receipt.topicSequenceNumber?.low ?? undefined,\n };\n } catch (error) {\n this.logger.error(`Failed to migrate registry: ${error}`);\n throw error;\n }\n }\n\n /**\n * Get all entries from a registry\n * @param topicId The topic ID of the registry\n * @param options Query options\n * @returns Promise resolving to the registry information\n */\n async getRegistry(\n topicId: string,\n options: QueryRegistryOptions = {},\n ): Promise<TopicRegistry> {\n try {\n await this.ensureInitialized();\n const topicInfo = await this.mirrorNode.getTopicInfo(topicId);\n this.logger.debug(\n `Retrieved topic info for ${topicId}: ${JSON.stringify(topicInfo)}`,\n );\n\n const memoInfo = this.parseRegistryTypeFromMemo(topicInfo.memo);\n\n if (!memoInfo) {\n throw new Error(\n `Topic ${topicId} is not an HCS-2 registry (invalid memo format)`,\n );\n }\n\n this.logger.debug(\n `Retrieving messages for topic ${topicId} with limit ${options.limit ?? 100}`,\n );\n const rawMessagesResult = (await this.mirrorNode.getTopicMessages(\n topicId,\n {\n sequenceNumber:\n options.skip && options.skip > 0 ? `gt:${options.skip}` : undefined,\n limit: options.limit ?? 100,\n order: options.order ?? 'asc',\n },\n )) as any[];\n\n const rawMessages = options.limit\n ? rawMessagesResult.slice(0, options.limit)\n : rawMessagesResult;\n\n this.logger.debug(\n `Retrieved ${rawMessagesResult.length} messages, using ${rawMessages.length} after applying limit.`,\n );\n\n const entries: RegistryEntry[] = [];\n let latestEntry: RegistryEntry | undefined;\n\n for (const msg of rawMessages) {\n try {\n const message: HCS2Message = {\n p: 'hcs-2',\n op: msg.op,\n t_id: msg.t_id,\n uid: msg.uid,\n metadata: msg.metadata,\n m: msg.m,\n } as HCS2Message;\n\n const { valid, errors } = this.validateMessage(message);\n if (!valid) {\n this.logger.warn(`Invalid HCS-2 message: ${errors.join(', ')}`);\n continue;\n }\n\n const entry: RegistryEntry = {\n topicId,\n sequence: msg.sequence_number,\n timestamp: msg.consensus_timestamp,\n payer: msg.payer_account_id || msg.payer || '',\n message,\n consensus_timestamp: msg.consensus_timestamp,\n registry_type: memoInfo.registryType,\n };\n\n entries.push(entry);\n\n if (\n memoInfo.registryType === HCS2RegistryType.NON_INDEXED ||\n !latestEntry ||\n entry.timestamp > latestEntry.timestamp\n ) {\n latestEntry = entry;\n }\n } catch (error) {\n this.logger.warn(`Error processing message: ${error}`);\n }\n }\n\n this.logger.debug(\n `Processed ${entries.length} valid entries for registry ${topicId}`,\n );\n\n const registry: TopicRegistry = {\n topicId,\n registryType: memoInfo.registryType,\n ttl: memoInfo.ttl,\n entries:\n memoInfo.registryType === HCS2RegistryType.INDEXED\n ? entries\n : latestEntry\n ? [latestEntry]\n : [],\n latestEntry,\n };\n\n return registry;\n } catch (error) {\n this.logger.error(`Failed to get registry: ${error}`);\n throw error;\n }\n }\n\n private buildAnalyticsMemo(\n operation: HCS2Operation,\n registryType: HCS2RegistryType,\n ): string {\n const opCode = HCS2Client.operationAnalyticsCode[operation];\n return `hcs-2:op:${opCode}:${registryType}`;\n }\n\n private async resolveRegistryType(\n topicId: string,\n ): Promise<HCS2RegistryType> {\n const cached = this.registryTypeCache.get(topicId);\n if (cached !== undefined) {\n return cached;\n }\n\n const topicInfo = await this.mirrorNode.getTopicInfo(topicId);\n const memoInfo = this.parseRegistryTypeFromMemo(topicInfo.memo);\n if (!memoInfo) {\n throw new Error(\n `Topic ${topicId} is not an HCS-2 registry (invalid memo format)`,\n );\n }\n\n this.registryTypeCache.set(topicId, memoInfo.registryType);\n return memoInfo.registryType;\n }\n\n /**\n * Submit a message to a topic\n * @param topicId The topic ID to submit to\n * @param payload The message payload\n * @returns Promise resolving to the transaction receipt\n */\n async submitMessage(\n topicId: string,\n payload: HCS2Message,\n analyticsMemo?: string,\n ): Promise<TransactionReceipt> {\n try {\n await this.ensureInitialized();\n const { valid, errors } = this.validateMessage(payload);\n if (!valid) {\n throw new Error(`Invalid HCS-2 message: ${errors.join(', ')}`);\n }\n\n const transaction = buildMessageTx({\n topicId,\n message: JSON.stringify(payload),\n transactionMemo: analyticsMemo,\n });\n\n const txResponse = await transaction.execute(this.client);\n\n const receipt = await txResponse.getReceipt(this.client);\n\n return receipt;\n } catch (error) {\n this.logger.error(`Failed to submit message: ${error}`);\n throw error;\n }\n }\n\n /**\n * @param topicId The topic ID to query\n * @returns Promise resolving to the topic information\n */\n public async getTopicInfo(topicId: string): Promise<any> {\n return this.mirrorNode.getTopicInfo(topicId);\n }\n\n /**\n * Close the client and release resources\n */\n public close(): void {\n this.logger.info('HCS-2 client closed.');\n }\n\n /**\n * Get the configured key type (ed25519 or ecdsa)\n */\n public getKeyType(): 'ed25519' | 'ecdsa' {\n return this.operatorCtx.keyType;\n }\n\n /**\n * Get the configured operator private key\n */\n public getOperatorKey(): PrivateKey {\n return this.operatorCtx.operatorKey;\n }\n}\n"],"names":[],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"standards-sdk.es69.js","sources":["../../src/hcs-2/browser.ts"],"sourcesContent":["import {\n TransactionReceipt,\n TopicCreateTransaction,\n TopicMessageSubmitTransaction,\n TopicId,\n PublicKey,\n} from '@hashgraph/sdk';\nimport { HashinalsWalletConnectSDK } from '@hashgraphonline/hashinal-wc';\nimport { HCS2BaseClient } from './base-client';\nimport {\n HCS2ClientConfig,\n HCS2Message,\n HCS2Operation,\n HCS2RegistryType,\n TopicRegistrationResponse,\n RegistryOperationResponse,\n TopicRegistry,\n CreateRegistryOptions,\n RegisterEntryOptions,\n UpdateEntryOptions,\n DeleteEntryOptions,\n MigrateTopicOptions,\n QueryRegistryOptions,\n} from './types';\nimport { isBrowser } from '../utils/is-browser';\nimport { KeyTypeDetector } from '../utils/key-type-detector';\nimport { buildMessageTx } from '../common/tx/tx-utils';\n\ninterface WalletExecuteResult {\n result?: TransactionReceipt;\n transactionId?: string;\n error?: string;\n}\n\ninterface WalletExecuteSupport<Tx> {\n executeTransactionWithErrorHandling?: (\n tx: Tx,\n returnBytes?: boolean,\n ) => Promise<WalletExecuteResult>;\n}\n\n/**\n * Browser client configuration for HCS-2\n */\nexport interface BrowserHCS2Config extends HCS2ClientConfig {\n hwc: HashinalsWalletConnectSDK;\n}\n\n/**\n * Browser client for HCS-2 operations\n */\nexport class BrowserHCS2Client extends HCS2BaseClient {\n private hwc: HashinalsWalletConnectSDK;\n\n /**\n * Create a new browser HCS-2 client\n * @param config Client configuration\n */\n constructor(config: BrowserHCS2Config) {\n super({\n network: config.network,\n logLevel: config.logLevel,\n silent: config.silent,\n mirrorNodeUrl: config.mirrorNodeUrl,\n logger: config.logger,\n });\n\n this.hwc = config.hwc;\n\n if (!isBrowser) {\n this.logger.error(\n 'BrowserHCS2Client initialized in server environment - browser-specific features will not be available. Use HCS2Client instead.',\n );\n } else {\n this.logger.info('HCS-2 browser client initialized successfully');\n }\n }\n\n /**\n * Get the operator account ID\n * @returns The operator account ID\n */\n private getOperatorId(): string {\n const accountInfo = this.hwc.getAccountInfo();\n if (!accountInfo || !accountInfo.accountId) {\n throw new Error('No connected account found');\n }\n return accountInfo.accountId;\n }\n\n /**\n * Create a new registry topic\n * @param options Registry creation options\n * @returns Promise resolving to the transaction result\n */\n async createRegistry(\n options: CreateRegistryOptions = {},\n ): Promise<TopicRegistrationResponse> {\n try {\n const registryType = options.registryType ?? HCS2RegistryType.INDEXED;\n const ttl = options.ttl ?? 86400; // Default TTL: 24 hours\n\n const memo = this.generateRegistryMemo(registryType, ttl);\n\n let transaction = new TopicCreateTransaction().setTopicMemo(memo);\n\n if (options.adminKey) {\n let adminPublicKey: PublicKey;\n if (typeof options.adminKey === 'string') {\n try {\n adminPublicKey = PublicKey.fromString(options.adminKey);\n } catch {\n const keyInfo = KeyTypeDetector.detect(options.adminKey);\n if (keyInfo.rawBytes) {\n adminPublicKey =\n keyInfo.type === 'ed25519'\n ? PublicKey.fromBytesED25519(keyInfo.rawBytes)\n : PublicKey.fromBytesECDSA(keyInfo.rawBytes);\n } else {\n throw new Error('Failed to parse admin public key');\n }\n }\n } else if (typeof options.adminKey === 'boolean') {\n adminPublicKey = await this.mirrorNode.getPublicKey(\n this.getOperatorId(),\n );\n } else {\n adminPublicKey = options.adminKey.publicKey;\n }\n transaction = transaction.setAdminKey(adminPublicKey);\n }\n\n if (options.submitKey) {\n let submitPublicKey: PublicKey;\n if (typeof options.submitKey === 'string') {\n try {\n submitPublicKey = PublicKey.fromString(options.submitKey);\n } catch {\n const keyInfo = KeyTypeDetector.detect(options.submitKey);\n if (keyInfo.rawBytes) {\n submitPublicKey =\n keyInfo.type === 'ed25519'\n ? PublicKey.fromBytesED25519(keyInfo.rawBytes)\n : PublicKey.fromBytesECDSA(keyInfo.rawBytes);\n } else {\n throw new Error('Failed to parse submit public key');\n }\n }\n } else if (typeof options.submitKey === 'boolean') {\n submitPublicKey = await this.mirrorNode.getPublicKey(\n this.getOperatorId(),\n );\n } else {\n submitPublicKey = options.submitKey.publicKey;\n }\n transaction = transaction.setSubmitKey(submitPublicKey);\n }\n\n const txResponse = await this.executeWithWallet(transaction);\n\n if (txResponse?.error) {\n throw new Error(txResponse.error);\n }\n\n const resultReceipt = txResponse?.result;\n if (!resultReceipt?.topicId) {\n throw new Error('Failed to create registry: No topic ID in receipt');\n }\n\n const topicId = resultReceipt.topicId.toString();\n\n this.logger.info(\n `Created registry topic: ${topicId} (${registryType === HCS2RegistryType.INDEXED ? 'Indexed' : 'Non-indexed'}, TTL: ${ttl}s)`,\n );\n\n return {\n success: true,\n topicId,\n transactionId: txResponse.transactionId || 'unknown',\n };\n } catch (error) {\n this.logger.error(`Failed to create registry: ${error}`);\n return {\n success: false,\n error: `Failed to create registry: ${error}`,\n };\n }\n }\n\n /**\n * Register a new entry in the registry\n * @param registryTopicId The topic ID of the registry\n * @param options Registration options\n * @returns Promise resolving to the operation result\n */\n async registerEntry(\n registryTopicId: string,\n options: RegisterEntryOptions,\n ): Promise<RegistryOperationResponse> {\n try {\n const message = this.createRegisterMessage(\n options.targetTopicId,\n options.metadata,\n options.memo,\n );\n\n if (message.op !== HCS2Operation.REGISTER) {\n throw new Error(\n `Invalid operation type: ${message.op}, expected ${HCS2Operation.REGISTER}`,\n );\n }\n\n const receipt = await this.submitMessage(registryTopicId, message);\n\n this.logger.info(\n `Registered entry in registry ${registryTopicId} pointing to topic ${options.targetTopicId}`,\n );\n\n return {\n success: true,\n receipt,\n sequenceNumber: receipt.topicSequenceNumber?.low ?? undefined,\n };\n } catch (error) {\n this.logger.error(`Failed to register entry: ${error}`);\n return {\n success: false,\n error: `Failed to register entry: ${error}`,\n };\n }\n }\n\n /**\n * Update an existing entry in the registry (indexed registries only)\n * @param registryTopicId The topic ID of the registry\n * @param options Update options\n * @returns Promise resolving to the operation result\n */\n async updateEntry(\n registryTopicId: string,\n options: UpdateEntryOptions,\n ): Promise<RegistryOperationResponse> {\n try {\n const registryInfo = await this.mirrorNode.getTopicInfo(registryTopicId);\n const memoInfo = this.parseRegistryTypeFromMemo(registryInfo.memo);\n\n if (!memoInfo || memoInfo.registryType !== HCS2RegistryType.INDEXED) {\n throw new Error(\n 'Update operation is only valid for indexed registries',\n );\n }\n\n const message = this.createUpdateMessage(\n options.targetTopicId,\n options.uid,\n options.metadata,\n options.memo,\n );\n\n const receipt = await this.submitMessage(registryTopicId, message);\n\n this.logger.info(\n `Updated entry with UID ${options.uid} in registry ${registryTopicId}`,\n );\n\n return {\n success: true,\n receipt,\n sequenceNumber: receipt.topicSequenceNumber?.low ?? undefined,\n };\n } catch (error) {\n this.logger.error(`Failed to update entry: ${error}`);\n return {\n success: false,\n error: `Failed to update entry: ${error}`,\n };\n }\n }\n\n /**\n * Delete an entry from the registry (indexed registries only)\n * @param registryTopicId The topic ID of the registry\n * @param options Delete options\n * @returns Promise resolving to the operation result\n */\n async deleteEntry(\n registryTopicId: string,\n options: DeleteEntryOptions,\n ): Promise<RegistryOperationResponse> {\n try {\n const registryInfo = await this.mirrorNode.getTopicInfo(registryTopicId);\n const memoInfo = this.parseRegistryTypeFromMemo(registryInfo.memo);\n\n if (!memoInfo || memoInfo.registryType !== HCS2RegistryType.INDEXED) {\n throw new Error(\n 'Delete operation is only valid for indexed registries',\n );\n }\n\n const message = this.createDeleteMessage(options.uid, options.memo);\n\n const receipt = await this.submitMessage(registryTopicId, message);\n\n this.logger.info(\n `Deleted entry with UID ${options.uid} from registry ${registryTopicId}`,\n );\n\n return {\n success: true,\n receipt,\n sequenceNumber: receipt.topicSequenceNumber?.low ?? undefined,\n };\n } catch (error) {\n this.logger.error(`Failed to delete entry: ${error}`);\n return {\n success: false,\n error: `Failed to delete entry: ${error}`,\n };\n }\n }\n\n /**\n * Migrate a registry to a new topic\n * @param registryTopicId The topic ID of the registry\n * @param options Migration options\n * @returns Promise resolving to the operation result\n */\n async migrateRegistry(\n registryTopicId: string,\n options: MigrateTopicOptions,\n ): Promise<RegistryOperationResponse> {\n try {\n const message = this.createMigrateMessage(\n options.targetTopicId,\n options.metadata,\n options.memo,\n );\n\n const receipt = await this.submitMessage(registryTopicId, message);\n\n this.logger.info(\n `Migrated registry ${registryTopicId} to ${options.targetTopicId}`,\n );\n\n return {\n success: true,\n receipt,\n sequenceNumber: receipt.topicSequenceNumber?.low ?? undefined,\n };\n } catch (error) {\n this.logger.error(`Failed to migrate registry: ${error}`);\n return {\n success: false,\n error: `Failed to migrate registry: ${error}`,\n };\n }\n }\n\n /**\n * Get all entries from a registry\n * @param topicId The topic ID of the registry\n * @param options Query options\n * @returns Promise resolving to the registry information\n */\n async getRegistry(\n topicId: string,\n options: QueryRegistryOptions = {},\n ): Promise<TopicRegistry> {\n try {\n const topicInfo = await this.mirrorNode.getTopicInfo(topicId);\n const memoInfo = this.parseRegistryTypeFromMemo(topicInfo.memo);\n\n if (!memoInfo) {\n throw new Error(\n `Topic ${topicId} is not an HCS-2 registry (invalid memo format)`,\n );\n }\n\n const messagesResult = await this.mirrorNode.getTopicMessages(topicId, {\n sequenceNumber:\n options.skip && options.skip > 0 ? `gt:${options.skip}` : undefined,\n limit: options.limit ?? 100,\n order: options.order ?? 'asc',\n });\n\n const messages = options.limit\n ? messagesResult.slice(0, options.limit)\n : messagesResult;\n\n return this.parseRegistryEntries(\n topicId,\n messages,\n memoInfo.registryType,\n memoInfo.ttl,\n );\n } catch (error) {\n this.logger.error(`Failed to get registry: ${error}`);\n throw error;\n }\n }\n\n /**\n * Submit a message to a topic\n * @param topicId The topic ID to submit to\n * @param payload The message payload\n * @returns Promise resolving to the transaction receipt\n */\n async submitMessage(\n topicId: string,\n payload: HCS2Message,\n ): Promise<TransactionReceipt> {\n try {\n const { valid, errors } = this.validateMessage(payload);\n if (!valid) {\n throw new Error(`Invalid HCS-2 message: ${errors.join(', ')}`);\n }\n\n const transaction = buildMessageTx({\n topicId,\n message: JSON.stringify(payload),\n });\n\n const txResponse = await this.executeWithWallet(transaction);\n\n if (txResponse?.error) {\n throw new Error(txResponse.error);\n }\n\n return txResponse.result;\n } catch (error) {\n this.logger.error(`Failed to submit message: ${error}`);\n throw error;\n }\n }\n private async executeWithWallet<\n T extends TopicCreateTransaction | TopicMessageSubmitTransaction,\n >(transaction: T): Promise<WalletExecuteResult> {\n const maybeExec = (\n this.hwc as unknown as WalletExecuteSupport<\n TopicCreateTransaction | TopicMessageSubmitTransaction\n >\n ).executeTransactionWithErrorHandling;\n\n if (!maybeExec) {\n throw new Error(\n 'Wallet SDK does not support executeTransactionWithErrorHandling',\n );\n }\n\n return await maybeExec.call(this.hwc, transaction, false);\n }\n}\n"],"names":[],"mappings":"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"}
|