@hashgraphonline/standards-sdk 0.1.161 → 0.1.162
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-14/index.d.ts +1 -0
- package/dist/cjs/hcs-14/index.d.ts.map +1 -1
- package/dist/cjs/hcs-14/resolvers/aid-dns-web-profile.d.ts +1 -0
- package/dist/cjs/hcs-14/resolvers/aid-dns-web-profile.d.ts.map +1 -1
- package/dist/cjs/hcs-14/resolvers/ans-dns-web-profile-utils.d.ts +23 -0
- package/dist/cjs/hcs-14/resolvers/ans-dns-web-profile-utils.d.ts.map +1 -0
- package/dist/cjs/hcs-14/resolvers/ans-dns-web-profile.d.ts +32 -0
- package/dist/cjs/hcs-14/resolvers/ans-dns-web-profile.d.ts.map +1 -0
- package/dist/cjs/hcs-14/resolvers/hcs-11-profile.d.ts +1 -0
- package/dist/cjs/hcs-14/resolvers/hcs-11-profile.d.ts.map +1 -1
- package/dist/cjs/hcs-14/resolvers/hiero.d.ts +1 -0
- package/dist/cjs/hcs-14/resolvers/hiero.d.ts.map +1 -1
- package/dist/cjs/hcs-14/resolvers/registry.d.ts +21 -0
- package/dist/cjs/hcs-14/resolvers/registry.d.ts.map +1 -1
- package/dist/cjs/hcs-14/resolvers/types.d.ts +40 -5
- package/dist/cjs/hcs-14/resolvers/types.d.ts.map +1 -1
- package/dist/cjs/hcs-14/resolvers/uaid-did-resolution-profile.d.ts +1 -0
- package/dist/cjs/hcs-14/resolvers/uaid-did-resolution-profile.d.ts.map +1 -1
- package/dist/cjs/hcs-14/resolvers/uaid-dns-web-profile.d.ts +1 -0
- package/dist/cjs/hcs-14/resolvers/uaid-dns-web-profile.d.ts.map +1 -1
- package/dist/cjs/hcs-14/sdk.d.ts +23 -1
- package/dist/cjs/hcs-14/sdk.d.ts.map +1 -1
- package/dist/cjs/standards-sdk.cjs +2 -2
- package/dist/cjs/standards-sdk.cjs.map +1 -1
- package/dist/es/hcs-14/index.d.ts +1 -0
- package/dist/es/hcs-14/index.d.ts.map +1 -1
- package/dist/es/hcs-14/resolvers/aid-dns-web-profile.d.ts +1 -0
- package/dist/es/hcs-14/resolvers/aid-dns-web-profile.d.ts.map +1 -1
- package/dist/es/hcs-14/resolvers/ans-dns-web-profile-utils.d.ts +23 -0
- package/dist/es/hcs-14/resolvers/ans-dns-web-profile-utils.d.ts.map +1 -0
- package/dist/es/hcs-14/resolvers/ans-dns-web-profile.d.ts +32 -0
- package/dist/es/hcs-14/resolvers/ans-dns-web-profile.d.ts.map +1 -0
- package/dist/es/hcs-14/resolvers/hcs-11-profile.d.ts +1 -0
- package/dist/es/hcs-14/resolvers/hcs-11-profile.d.ts.map +1 -1
- package/dist/es/hcs-14/resolvers/hiero.d.ts +1 -0
- package/dist/es/hcs-14/resolvers/hiero.d.ts.map +1 -1
- package/dist/es/hcs-14/resolvers/registry.d.ts +21 -0
- package/dist/es/hcs-14/resolvers/registry.d.ts.map +1 -1
- package/dist/es/hcs-14/resolvers/types.d.ts +40 -5
- package/dist/es/hcs-14/resolvers/types.d.ts.map +1 -1
- package/dist/es/hcs-14/resolvers/uaid-did-resolution-profile.d.ts +1 -0
- package/dist/es/hcs-14/resolvers/uaid-did-resolution-profile.d.ts.map +1 -1
- package/dist/es/hcs-14/resolvers/uaid-dns-web-profile.d.ts +1 -0
- package/dist/es/hcs-14/resolvers/uaid-dns-web-profile.d.ts.map +1 -1
- package/dist/es/hcs-14/sdk.d.ts +23 -1
- package/dist/es/hcs-14/sdk.d.ts.map +1 -1
- package/dist/es/standards-sdk.es.js +89 -86
- package/dist/es/standards-sdk.es.js.map +1 -1
- package/dist/es/standards-sdk.es100.js +136 -124
- package/dist/es/standards-sdk.es100.js.map +1 -1
- package/dist/es/standards-sdk.es101.js +138 -42
- package/dist/es/standards-sdk.es101.js.map +1 -1
- package/dist/es/standards-sdk.es102.js +43 -259
- package/dist/es/standards-sdk.es102.js.map +1 -1
- package/dist/es/standards-sdk.es103.js +245 -82
- package/dist/es/standards-sdk.es103.js.map +1 -1
- package/dist/es/standards-sdk.es104.js +50 -49
- package/dist/es/standards-sdk.es104.js.map +1 -1
- package/dist/es/standards-sdk.es105.js +100 -29
- package/dist/es/standards-sdk.es105.js.map +1 -1
- package/dist/es/standards-sdk.es106.js +27 -229
- package/dist/es/standards-sdk.es106.js.map +1 -1
- package/dist/es/standards-sdk.es107.js +228 -109
- package/dist/es/standards-sdk.es107.js.map +1 -1
- package/dist/es/standards-sdk.es108.js +94 -15
- package/dist/es/standards-sdk.es108.js.map +1 -1
- package/dist/es/standards-sdk.es109.js +30 -80
- package/dist/es/standards-sdk.es109.js.map +1 -1
- package/dist/es/standards-sdk.es11.js +1 -1
- package/dist/es/standards-sdk.es110.js +80 -27
- package/dist/es/standards-sdk.es110.js.map +1 -1
- package/dist/es/standards-sdk.es111.js +27 -248
- package/dist/es/standards-sdk.es111.js.map +1 -1
- package/dist/es/standards-sdk.es112.js +246 -472
- package/dist/es/standards-sdk.es112.js.map +1 -1
- package/dist/es/standards-sdk.es113.js +458 -85
- package/dist/es/standards-sdk.es113.js.map +1 -1
- package/dist/es/standards-sdk.es114.js +96 -151
- package/dist/es/standards-sdk.es114.js.map +1 -1
- package/dist/es/standards-sdk.es115.js +155 -29
- package/dist/es/standards-sdk.es115.js.map +1 -1
- package/dist/es/standards-sdk.es116.js +26 -4
- package/dist/es/standards-sdk.es116.js.map +1 -1
- package/dist/es/standards-sdk.es117.js +10 -140
- package/dist/es/standards-sdk.es117.js.map +1 -1
- package/dist/es/standards-sdk.es118.js +140 -27
- package/dist/es/standards-sdk.es118.js.map +1 -1
- package/dist/es/standards-sdk.es119.js +27 -20
- 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 +18 -156
- package/dist/es/standards-sdk.es120.js.map +1 -1
- package/dist/es/standards-sdk.es121.js +148 -191
- package/dist/es/standards-sdk.es121.js.map +1 -1
- package/dist/es/standards-sdk.es122.js +160 -747
- package/dist/es/standards-sdk.es122.js.map +1 -1
- package/dist/es/standards-sdk.es123.js +786 -9
- package/dist/es/standards-sdk.es123.js.map +1 -1
- package/dist/es/standards-sdk.es124.js +13 -567
- package/dist/es/standards-sdk.es124.js.map +1 -1
- package/dist/es/standards-sdk.es125.js +541 -576
- package/dist/es/standards-sdk.es125.js.map +1 -1
- package/dist/es/standards-sdk.es126.js +601 -12
- package/dist/es/standards-sdk.es126.js.map +1 -1
- package/dist/es/standards-sdk.es127.js +13 -2
- package/dist/es/standards-sdk.es127.js.map +1 -1
- package/dist/es/standards-sdk.es128.js +2 -87
- package/dist/es/standards-sdk.es128.js.map +1 -1
- package/dist/es/standards-sdk.es129.js +84 -37
- 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 +40 -2
- package/dist/es/standards-sdk.es130.js.map +1 -1
- package/dist/es/standards-sdk.es131.js +2 -235
- package/dist/es/standards-sdk.es131.js.map +1 -1
- package/dist/es/standards-sdk.es132.js +204 -1109
- package/dist/es/standards-sdk.es132.js.map +1 -1
- package/dist/es/standards-sdk.es133.js +1059 -225
- package/dist/es/standards-sdk.es133.js.map +1 -1
- package/dist/es/standards-sdk.es134.js +303 -419
- package/dist/es/standards-sdk.es134.js.map +1 -1
- package/dist/es/standards-sdk.es135.js +418 -351
- package/dist/es/standards-sdk.es135.js.map +1 -1
- package/dist/es/standards-sdk.es136.js +347 -1108
- package/dist/es/standards-sdk.es136.js.map +1 -1
- package/dist/es/standards-sdk.es137.js +1088 -180
- package/dist/es/standards-sdk.es137.js.map +1 -1
- package/dist/es/standards-sdk.es138.js +153 -1512
- package/dist/es/standards-sdk.es138.js.map +1 -1
- package/dist/es/standards-sdk.es139.js +1567 -1255
- package/dist/es/standards-sdk.es139.js.map +1 -1
- package/dist/es/standards-sdk.es14.js +1 -1
- package/dist/es/standards-sdk.es140.js +1255 -17
- package/dist/es/standards-sdk.es140.js.map +1 -1
- package/dist/es/standards-sdk.es141.js +15 -85
- package/dist/es/standards-sdk.es141.js.map +1 -1
- package/dist/es/standards-sdk.es142.js +77 -71
- package/dist/es/standards-sdk.es142.js.map +1 -1
- package/dist/es/standards-sdk.es143.js +79 -891
- package/dist/es/standards-sdk.es143.js.map +1 -1
- package/dist/es/standards-sdk.es144.js +886 -53
- package/dist/es/standards-sdk.es144.js.map +1 -1
- package/dist/es/standards-sdk.es145.js +53 -152
- package/dist/es/standards-sdk.es145.js.map +1 -1
- package/dist/es/standards-sdk.es146.js +159 -7
- package/dist/es/standards-sdk.es146.js.map +1 -1
- package/dist/es/standards-sdk.es147.js +7 -86
- package/dist/es/standards-sdk.es147.js.map +1 -1
- package/dist/es/standards-sdk.es148.js +65 -44
- package/dist/es/standards-sdk.es148.js.map +1 -1
- package/dist/es/standards-sdk.es149.js +65 -30
- package/dist/es/standards-sdk.es149.js.map +1 -1
- package/dist/es/standards-sdk.es15.js +1 -1
- package/dist/es/standards-sdk.es150.js +30 -34
- package/dist/es/standards-sdk.es150.js.map +1 -1
- package/dist/es/standards-sdk.es151.js +34 -45
- package/dist/es/standards-sdk.es151.js.map +1 -1
- package/dist/es/standards-sdk.es152.js +48 -138
- package/dist/es/standards-sdk.es152.js.map +1 -1
- package/dist/es/standards-sdk.es153.js +133 -37
- package/dist/es/standards-sdk.es153.js.map +1 -1
- package/dist/es/standards-sdk.es154.js +34 -12474
- package/dist/es/standards-sdk.es154.js.map +1 -1
- package/dist/es/standards-sdk.es155.js +12477 -12
- package/dist/es/standards-sdk.es155.js.map +1 -1
- package/dist/es/standards-sdk.es156.js +15 -54
- package/dist/es/standards-sdk.es156.js.map +1 -1
- package/dist/es/standards-sdk.es157.js +48 -76
- package/dist/es/standards-sdk.es157.js.map +1 -1
- package/dist/es/standards-sdk.es158.js +69 -66
- package/dist/es/standards-sdk.es158.js.map +1 -1
- package/dist/es/standards-sdk.es159.js +71 -63
- package/dist/es/standards-sdk.es159.js.map +1 -1
- package/dist/es/standards-sdk.es16.js +5 -5
- package/dist/es/standards-sdk.es160.js +188 -160
- package/dist/es/standards-sdk.es160.js.map +1 -1
- package/dist/es/standards-sdk.es161.js +65 -314
- package/dist/es/standards-sdk.es161.js.map +1 -1
- package/dist/es/standards-sdk.es162.js +232 -336
- package/dist/es/standards-sdk.es162.js.map +1 -1
- package/dist/es/standards-sdk.es163.js +129 -410
- package/dist/es/standards-sdk.es163.js.map +1 -1
- package/dist/es/standards-sdk.es164.js +200 -209
- package/dist/es/standards-sdk.es164.js.map +1 -1
- package/dist/es/standards-sdk.es165.js +334 -64
- package/dist/es/standards-sdk.es165.js.map +1 -1
- package/dist/es/standards-sdk.es166.js +442 -231
- package/dist/es/standards-sdk.es166.js.map +1 -1
- package/dist/es/standards-sdk.es167.js +317 -158
- package/dist/es/standards-sdk.es167.js.map +1 -1
- package/dist/es/standards-sdk.es168.js +61 -207
- package/dist/es/standards-sdk.es168.js.map +1 -1
- package/dist/es/standards-sdk.es169.js +155 -222
- package/dist/es/standards-sdk.es169.js.map +1 -1
- package/dist/es/standards-sdk.es170.js +178 -75
- package/dist/es/standards-sdk.es170.js.map +1 -1
- package/dist/es/standards-sdk.es171.js +226 -113
- package/dist/es/standards-sdk.es171.js.map +1 -1
- package/dist/es/standards-sdk.es172.js +77 -119
- package/dist/es/standards-sdk.es172.js.map +1 -1
- package/dist/es/standards-sdk.es173.js +103 -162
- package/dist/es/standards-sdk.es173.js.map +1 -1
- package/dist/es/standards-sdk.es174.js +141 -119
- package/dist/es/standards-sdk.es174.js.map +1 -1
- package/dist/es/standards-sdk.es175.js +152 -298
- package/dist/es/standards-sdk.es175.js.map +1 -1
- package/dist/es/standards-sdk.es176.js +120 -240
- package/dist/es/standards-sdk.es176.js.map +1 -1
- package/dist/es/standards-sdk.es177.js +298 -83
- package/dist/es/standards-sdk.es177.js.map +1 -1
- package/dist/es/standards-sdk.es178.js +262 -0
- package/dist/es/standards-sdk.es178.js.map +1 -0
- package/dist/es/standards-sdk.es179.js +119 -0
- package/dist/es/standards-sdk.es179.js.map +1 -0
- package/dist/es/standards-sdk.es18.js +12 -12
- package/dist/es/standards-sdk.es19.js +9 -9
- package/dist/es/standards-sdk.es2.js +2 -2
- package/dist/es/standards-sdk.es20.js +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 +12 -12
- package/dist/es/standards-sdk.es30.js +2 -2
- package/dist/es/standards-sdk.es31.js +4 -4
- package/dist/es/standards-sdk.es32.js +1 -1
- package/dist/es/standards-sdk.es35.js +6 -6
- package/dist/es/standards-sdk.es36.js +4 -4
- package/dist/es/standards-sdk.es37.js +2 -2
- package/dist/es/standards-sdk.es38.js +2 -2
- package/dist/es/standards-sdk.es39.js +1 -1
- package/dist/es/standards-sdk.es4.js +2 -2
- package/dist/es/standards-sdk.es40.js +1 -1
- package/dist/es/standards-sdk.es41.js +2 -2
- package/dist/es/standards-sdk.es46.js +1 -1
- package/dist/es/standards-sdk.es5.js +2 -2
- package/dist/es/standards-sdk.es51.js +1 -1
- package/dist/es/standards-sdk.es53.js +1 -1
- package/dist/es/standards-sdk.es56.js +2 -2
- package/dist/es/standards-sdk.es58.js +37 -4
- package/dist/es/standards-sdk.es58.js.map +1 -1
- package/dist/es/standards-sdk.es59.js +17 -10
- package/dist/es/standards-sdk.es59.js.map +1 -1
- package/dist/es/standards-sdk.es6.js +2 -2
- package/dist/es/standards-sdk.es60.js +2 -1
- package/dist/es/standards-sdk.es60.js.map +1 -1
- package/dist/es/standards-sdk.es61.js +1 -0
- package/dist/es/standards-sdk.es61.js.map +1 -1
- package/dist/es/standards-sdk.es62.js +19 -5
- package/dist/es/standards-sdk.es62.js.map +1 -1
- package/dist/es/standards-sdk.es63.js +214 -153
- package/dist/es/standards-sdk.es63.js.map +1 -1
- package/dist/es/standards-sdk.es64.js +205 -84
- package/dist/es/standards-sdk.es64.js.map +1 -1
- package/dist/es/standards-sdk.es65.js +125 -40
- package/dist/es/standards-sdk.es65.js.map +1 -1
- package/dist/es/standards-sdk.es66.js +41 -261
- package/dist/es/standards-sdk.es66.js.map +1 -1
- package/dist/es/standards-sdk.es67.js +262 -24
- package/dist/es/standards-sdk.es67.js.map +1 -1
- package/dist/es/standards-sdk.es68.js +25 -87
- package/dist/es/standards-sdk.es68.js.map +1 -1
- package/dist/es/standards-sdk.es69.js +95 -3
- package/dist/es/standards-sdk.es69.js.map +1 -1
- package/dist/es/standards-sdk.es7.js +1 -1
- package/dist/es/standards-sdk.es70.js +3 -100
- package/dist/es/standards-sdk.es70.js.map +1 -1
- package/dist/es/standards-sdk.es71.js +62 -61
- package/dist/es/standards-sdk.es71.js.map +1 -1
- package/dist/es/standards-sdk.es72.js +98 -17
- package/dist/es/standards-sdk.es72.js.map +1 -1
- package/dist/es/standards-sdk.es73.js +19 -77
- package/dist/es/standards-sdk.es73.js.map +1 -1
- package/dist/es/standards-sdk.es74.js +77 -458
- package/dist/es/standards-sdk.es74.js.map +1 -1
- package/dist/es/standards-sdk.es75.js +240 -106
- package/dist/es/standards-sdk.es75.js.map +1 -1
- package/dist/es/standards-sdk.es76.js +286 -170
- package/dist/es/standards-sdk.es76.js.map +1 -1
- package/dist/es/standards-sdk.es77.js +207 -71
- package/dist/es/standards-sdk.es77.js.map +1 -1
- package/dist/es/standards-sdk.es78.js +72 -71
- package/dist/es/standards-sdk.es78.js.map +1 -1
- package/dist/es/standards-sdk.es79.js +71 -143
- package/dist/es/standards-sdk.es79.js.map +1 -1
- package/dist/es/standards-sdk.es80.js +136 -62
- package/dist/es/standards-sdk.es80.js.map +1 -1
- package/dist/es/standards-sdk.es81.js +45 -380
- package/dist/es/standards-sdk.es81.js.map +1 -1
- package/dist/es/standards-sdk.es82.js +130 -222
- package/dist/es/standards-sdk.es82.js.map +1 -1
- package/dist/es/standards-sdk.es83.js +444 -313
- package/dist/es/standards-sdk.es83.js.map +1 -1
- package/dist/es/standards-sdk.es84.js +364 -88
- package/dist/es/standards-sdk.es84.js.map +1 -1
- package/dist/es/standards-sdk.es85.js +89 -125
- package/dist/es/standards-sdk.es85.js.map +1 -1
- package/dist/es/standards-sdk.es86.js +125 -8
- package/dist/es/standards-sdk.es86.js.map +1 -1
- package/dist/es/standards-sdk.es87.js +6 -45
- package/dist/es/standards-sdk.es87.js.map +1 -1
- package/dist/es/standards-sdk.es88.js +44 -98
- package/dist/es/standards-sdk.es88.js.map +1 -1
- package/dist/es/standards-sdk.es89.js +84 -331
- package/dist/es/standards-sdk.es89.js.map +1 -1
- package/dist/es/standards-sdk.es9.js +2 -2
- package/dist/es/standards-sdk.es90.js +160 -93
- package/dist/es/standards-sdk.es90.js.map +1 -1
- package/dist/es/standards-sdk.es91.js +275 -55
- package/dist/es/standards-sdk.es91.js.map +1 -1
- package/dist/es/standards-sdk.es92.js +55 -43
- package/dist/es/standards-sdk.es92.js.map +1 -1
- package/dist/es/standards-sdk.es93.js +44 -145
- package/dist/es/standards-sdk.es93.js.map +1 -1
- package/dist/es/standards-sdk.es94.js +113 -30
- package/dist/es/standards-sdk.es94.js.map +1 -1
- package/dist/es/standards-sdk.es95.js +59 -22
- package/dist/es/standards-sdk.es95.js.map +1 -1
- package/dist/es/standards-sdk.es96.js +28 -23
- package/dist/es/standards-sdk.es96.js.map +1 -1
- package/dist/es/standards-sdk.es97.js +23 -238
- package/dist/es/standards-sdk.es97.js.map +1 -1
- package/dist/es/standards-sdk.es98.js +225 -267
- package/dist/es/standards-sdk.es98.js.map +1 -1
- package/dist/es/standards-sdk.es99.js +220 -95
- package/dist/es/standards-sdk.es99.js.map +1 -1
- package/package.json +5 -1
|
@@ -1,153 +1,52 @@
|
|
|
1
|
-
import {
|
|
2
|
-
|
|
3
|
-
|
|
4
|
-
|
|
5
|
-
|
|
6
|
-
|
|
7
|
-
|
|
8
|
-
|
|
9
|
-
|
|
10
|
-
|
|
11
|
-
|
|
12
|
-
|
|
13
|
-
|
|
14
|
-
|
|
15
|
-
|
|
16
|
-
client: this.network === "mainnet" ? Client.forMainnet() : Client.forTestnet()
|
|
17
|
-
});
|
|
18
|
-
this.client = this.operatorCtx.client;
|
|
19
|
-
}
|
|
20
|
-
getKeyType() {
|
|
21
|
-
return this.operatorCtx.keyType;
|
|
22
|
-
}
|
|
23
|
-
async close() {
|
|
24
|
-
try {
|
|
25
|
-
this.client.close();
|
|
26
|
-
} catch {
|
|
27
|
-
}
|
|
28
|
-
}
|
|
29
|
-
async ensureOperatorReady() {
|
|
30
|
-
await this.operatorCtx.ensureInitialized();
|
|
1
|
+
import { AccountCreateTransaction, Hbar } from "@hashgraph/sdk";
|
|
2
|
+
const HCS15_BASE_ACCOUNT_CREATE_TRANSACTION_MEMO = "hcs-15:op:base_create";
|
|
3
|
+
const HCS15_PETAL_ACCOUNT_CREATE_TRANSACTION_MEMO = "hcs-15:op:petal_create";
|
|
4
|
+
function normalizeTransactionMemo(value, fallback) {
|
|
5
|
+
if (typeof value !== "string") return fallback;
|
|
6
|
+
const trimmed = value.trim();
|
|
7
|
+
if (!trimmed) return fallback;
|
|
8
|
+
return trimmed;
|
|
9
|
+
}
|
|
10
|
+
function buildHcs15BaseAccountCreateTx(params) {
|
|
11
|
+
const tx = new AccountCreateTransaction().setECDSAKeyWithAlias(params.publicKey).setInitialBalance(
|
|
12
|
+
params.initialBalance instanceof Hbar ? params.initialBalance : new Hbar(params.initialBalance ?? 1)
|
|
13
|
+
);
|
|
14
|
+
if (typeof params.maxAutomaticTokenAssociations === "number") {
|
|
15
|
+
tx.setMaxAutomaticTokenAssociations(params.maxAutomaticTokenAssociations);
|
|
31
16
|
}
|
|
32
|
-
|
|
33
|
-
|
|
34
|
-
*/
|
|
35
|
-
async createBaseAccount(options) {
|
|
36
|
-
await this.ensureOperatorReady();
|
|
37
|
-
const priv = PrivateKey.generateECDSA();
|
|
38
|
-
const pub = priv.publicKey;
|
|
39
|
-
const tx = buildHcs15BaseAccountCreateTx({
|
|
40
|
-
publicKey: pub,
|
|
41
|
-
initialBalance: new Hbar(options?.initialBalance ?? 10),
|
|
42
|
-
maxAutomaticTokenAssociations: options?.maxAutomaticTokenAssociations,
|
|
43
|
-
accountMemo: options?.accountMemo,
|
|
44
|
-
transactionMemo: options?.transactionMemo
|
|
45
|
-
});
|
|
46
|
-
const resp = await tx.execute(this.client);
|
|
47
|
-
const receipt = await resp.getReceipt(this.client);
|
|
48
|
-
if (!receipt.accountId) {
|
|
49
|
-
throw new Error("HCS-15 BASE_ACCOUNT_CREATE_FAILED");
|
|
50
|
-
}
|
|
51
|
-
const accountId = receipt.accountId.toString();
|
|
52
|
-
const evmAddress = `0x${pub.toEvmAddress()}`;
|
|
53
|
-
this.logger.info("Created HCS-15 base account", { accountId, evmAddress });
|
|
54
|
-
return {
|
|
55
|
-
accountId,
|
|
56
|
-
privateKey: priv,
|
|
57
|
-
privateKeyHex: priv.toStringRaw(),
|
|
58
|
-
publicKey: pub,
|
|
59
|
-
evmAddress,
|
|
60
|
-
receipt
|
|
61
|
-
};
|
|
17
|
+
if (params.accountMemo) {
|
|
18
|
+
tx.setAccountMemo(params.accountMemo);
|
|
62
19
|
}
|
|
63
|
-
|
|
64
|
-
|
|
65
|
-
|
|
66
|
-
|
|
67
|
-
|
|
68
|
-
|
|
69
|
-
|
|
70
|
-
|
|
71
|
-
|
|
72
|
-
|
|
73
|
-
|
|
74
|
-
|
|
75
|
-
|
|
76
|
-
|
|
77
|
-
const resp = await tx.execute(this.client);
|
|
78
|
-
const receipt = await resp.getReceipt(this.client);
|
|
79
|
-
if (!receipt.accountId) {
|
|
80
|
-
throw new Error("HCS-15 PETAL_ACCOUNT_CREATE_FAILED");
|
|
81
|
-
}
|
|
82
|
-
const accountId = receipt.accountId.toString();
|
|
83
|
-
this.logger.info("Created HCS-15 petal account", { accountId });
|
|
84
|
-
let profile;
|
|
85
|
-
if (params.profile) {
|
|
86
|
-
profile = await this.createPetalProfile({
|
|
87
|
-
accountId,
|
|
88
|
-
basePrivateKey: baseKey,
|
|
89
|
-
profile: params.profile
|
|
90
|
-
});
|
|
91
|
-
}
|
|
92
|
-
return { accountId, receipt, profile };
|
|
20
|
+
tx.setTransactionMemo(
|
|
21
|
+
normalizeTransactionMemo(
|
|
22
|
+
params.transactionMemo,
|
|
23
|
+
HCS15_BASE_ACCOUNT_CREATE_TRANSACTION_MEMO
|
|
24
|
+
)
|
|
25
|
+
);
|
|
26
|
+
return tx;
|
|
27
|
+
}
|
|
28
|
+
function buildHcs15PetalAccountCreateTx(params) {
|
|
29
|
+
const tx = new AccountCreateTransaction().setKeyWithoutAlias(params.publicKey).setInitialBalance(
|
|
30
|
+
params.initialBalance instanceof Hbar ? params.initialBalance : new Hbar(params.initialBalance ?? 1)
|
|
31
|
+
);
|
|
32
|
+
if (typeof params.maxAutomaticTokenAssociations === "number") {
|
|
33
|
+
tx.setMaxAutomaticTokenAssociations(params.maxAutomaticTokenAssociations);
|
|
93
34
|
}
|
|
94
|
-
|
|
95
|
-
|
|
96
|
-
const { PersonBuilder } = await import("./standards-sdk.es150.js");
|
|
97
|
-
const hcs10 = new HCS10Client({
|
|
98
|
-
network: this.network,
|
|
99
|
-
operatorId: params.accountId,
|
|
100
|
-
operatorPrivateKey: params.basePrivateKey.toString(),
|
|
101
|
-
logLevel: this.logger.getLevel()
|
|
102
|
-
});
|
|
103
|
-
try {
|
|
104
|
-
const builder = new PersonBuilder().setName(params.profile.displayName).setBaseAccount(params.profile.baseAccountId);
|
|
105
|
-
if (params.profile.alias) {
|
|
106
|
-
builder.setAlias(params.profile.alias);
|
|
107
|
-
}
|
|
108
|
-
if (params.profile.bio) {
|
|
109
|
-
builder.setBio(params.profile.bio);
|
|
110
|
-
}
|
|
111
|
-
if (params.profile.profileImage) {
|
|
112
|
-
builder.setProfileImage(params.profile.profileImage);
|
|
113
|
-
}
|
|
114
|
-
if (params.profile.socials) {
|
|
115
|
-
for (const social of params.profile.socials) {
|
|
116
|
-
builder.addSocial(social.platform, social.handle);
|
|
117
|
-
}
|
|
118
|
-
}
|
|
119
|
-
if (params.profile.properties) {
|
|
120
|
-
for (const [key, value] of Object.entries(params.profile.properties)) {
|
|
121
|
-
builder.addProperty(key, value);
|
|
122
|
-
}
|
|
123
|
-
}
|
|
124
|
-
const result = await hcs10.create(builder, {
|
|
125
|
-
ttl: params.profile.ttl ?? 300,
|
|
126
|
-
updateAccountMemo: true
|
|
127
|
-
});
|
|
128
|
-
if ("success" in result && result.success === false) {
|
|
129
|
-
throw new Error(result.error ?? "Failed to create petal profile");
|
|
130
|
-
}
|
|
131
|
-
const inboundTopicId = "inboundTopicId" in result ? result.inboundTopicId : "";
|
|
132
|
-
const outboundTopicId = "outboundTopicId" in result ? result.outboundTopicId : "";
|
|
133
|
-
const profileTopicId = "profileTopicId" in result ? result.profileTopicId : "";
|
|
134
|
-
if (!profileTopicId) {
|
|
135
|
-
throw new Error("Failed to resolve petal profile topic ID");
|
|
136
|
-
}
|
|
137
|
-
return {
|
|
138
|
-
profileTopicId,
|
|
139
|
-
inboundTopicId,
|
|
140
|
-
outboundTopicId
|
|
141
|
-
};
|
|
142
|
-
} finally {
|
|
143
|
-
try {
|
|
144
|
-
hcs10.getClient().close();
|
|
145
|
-
} catch {
|
|
146
|
-
}
|
|
147
|
-
}
|
|
35
|
+
if (params.accountMemo) {
|
|
36
|
+
tx.setAccountMemo(params.accountMemo);
|
|
148
37
|
}
|
|
38
|
+
tx.setTransactionMemo(
|
|
39
|
+
normalizeTransactionMemo(
|
|
40
|
+
params.transactionMemo,
|
|
41
|
+
HCS15_PETAL_ACCOUNT_CREATE_TRANSACTION_MEMO
|
|
42
|
+
)
|
|
43
|
+
);
|
|
44
|
+
return tx;
|
|
149
45
|
}
|
|
150
46
|
export {
|
|
151
|
-
|
|
47
|
+
HCS15_BASE_ACCOUNT_CREATE_TRANSACTION_MEMO,
|
|
48
|
+
HCS15_PETAL_ACCOUNT_CREATE_TRANSACTION_MEMO,
|
|
49
|
+
buildHcs15BaseAccountCreateTx,
|
|
50
|
+
buildHcs15PetalAccountCreateTx
|
|
152
51
|
};
|
|
153
52
|
//# sourceMappingURL=standards-sdk.es93.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"standards-sdk.es93.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 {\n PetalProfileOptions,\n PetalProfileResult,\n SDKHCS15ClientConfig,\n} 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 private async ensureOperatorReady(): Promise<void> {\n await this.operatorCtx.ensureInitialized();\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 transactionMemo?: string;\n }): Promise<{\n accountId: string;\n privateKey: PrivateKey;\n privateKeyHex: string;\n publicKey: PublicKey;\n evmAddress: string;\n receipt: TransactionReceipt;\n }> {\n await this.ensureOperatorReady();\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 transactionMemo: options?.transactionMemo,\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 transactionMemo?: string;\n profile?: PetalProfileOptions;\n }): Promise<{\n accountId: string;\n receipt: TransactionReceipt;\n profile?: PetalProfileResult;\n }> {\n await this.ensureOperatorReady();\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 transactionMemo: params.transactionMemo,\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 let profile: PetalProfileResult | undefined;\n if (params.profile) {\n profile = await this.createPetalProfile({\n accountId,\n basePrivateKey: baseKey,\n profile: params.profile,\n });\n }\n return { accountId, receipt, profile };\n }\n\n private async createPetalProfile(params: {\n accountId: string;\n basePrivateKey: PrivateKey;\n profile: PetalProfileOptions;\n }): Promise<PetalProfileResult> {\n const { HCS10Client } = await import('../hcs-10');\n const { PersonBuilder } = await import('../hcs-11');\n const hcs10 = new HCS10Client({\n network: this.network,\n operatorId: params.accountId,\n operatorPrivateKey: params.basePrivateKey.toString(),\n logLevel: this.logger.getLevel(),\n });\n\n try {\n const builder = new PersonBuilder()\n .setName(params.profile.displayName)\n .setBaseAccount(params.profile.baseAccountId);\n\n if (params.profile.alias) {\n builder.setAlias(params.profile.alias);\n }\n\n if (params.profile.bio) {\n builder.setBio(params.profile.bio);\n }\n\n if (params.profile.profileImage) {\n builder.setProfileImage(params.profile.profileImage);\n }\n\n if (params.profile.socials) {\n for (const social of params.profile.socials) {\n builder.addSocial(social.platform, social.handle);\n }\n }\n\n if (params.profile.properties) {\n for (const [key, value] of Object.entries(params.profile.properties)) {\n builder.addProperty(key, value);\n }\n }\n\n const result = await hcs10.create(builder, {\n ttl: params.profile.ttl ?? 300,\n updateAccountMemo: true,\n });\n\n if ('success' in result && result.success === false) {\n throw new Error(result.error ?? 'Failed to create petal profile');\n }\n\n const inboundTopicId =\n 'inboundTopicId' in result ? result.inboundTopicId : '';\n const outboundTopicId =\n 'outboundTopicId' in result ? result.outboundTopicId : '';\n const profileTopicId =\n 'profileTopicId' in result ? result.profileTopicId : '';\n\n if (!profileTopicId) {\n throw new Error('Failed to resolve petal profile topic ID');\n }\n\n return {\n profileTopicId,\n inboundTopicId,\n outboundTopicId,\n };\n } finally {\n try {\n hcs10.getClient().close();\n } catch {}\n }\n }\n}\n"],"names":[],"mappings":";;;;AAwBO,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,EAEA,MAAc,sBAAqC;AACjD,UAAM,KAAK,YAAY,kBAAA;AAAA,EACzB;AAAA;AAAA;AAAA;AAAA,EAKA,MAAM,kBAAkB,SAYrB;AACD,UAAM,KAAK,oBAAA;AACX,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,MACtB,iBAAiB,SAAS;AAAA,IAAA,CAC3B;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,QAWtB;AACD,UAAM,KAAK,oBAAA;AACX,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,MACpB,iBAAiB,OAAO;AAAA,IAAA,CACzB;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,QAAI;AACJ,QAAI,OAAO,SAAS;AAClB,gBAAU,MAAM,KAAK,mBAAmB;AAAA,QACtC;AAAA,QACA,gBAAgB;AAAA,QAChB,SAAS,OAAO;AAAA,MAAA,CACjB;AAAA,IACH;AACA,WAAO,EAAE,WAAW,SAAS,QAAA;AAAA,EAC/B;AAAA,EAEA,MAAc,mBAAmB,QAID;AAC9B,UAAM,EAAE,YAAA,IAAgB,MAAM,OAAO,0BAAW;AAChD,UAAM,EAAE,cAAA,IAAkB,MAAM,OAAO,0BAAW;AAClD,UAAM,QAAQ,IAAI,YAAY;AAAA,MAC5B,SAAS,KAAK;AAAA,MACd,YAAY,OAAO;AAAA,MACnB,oBAAoB,OAAO,eAAe,SAAA;AAAA,MAC1C,UAAU,KAAK,OAAO,SAAA;AAAA,IAAS,CAChC;AAED,QAAI;AACF,YAAM,UAAU,IAAI,cAAA,EACjB,QAAQ,OAAO,QAAQ,WAAW,EAClC,eAAe,OAAO,QAAQ,aAAa;AAE9C,UAAI,OAAO,QAAQ,OAAO;AACxB,gBAAQ,SAAS,OAAO,QAAQ,KAAK;AAAA,MACvC;AAEA,UAAI,OAAO,QAAQ,KAAK;AACtB,gBAAQ,OAAO,OAAO,QAAQ,GAAG;AAAA,MACnC;AAEA,UAAI,OAAO,QAAQ,cAAc;AAC/B,gBAAQ,gBAAgB,OAAO,QAAQ,YAAY;AAAA,MACrD;AAEA,UAAI,OAAO,QAAQ,SAAS;AAC1B,mBAAW,UAAU,OAAO,QAAQ,SAAS;AAC3C,kBAAQ,UAAU,OAAO,UAAU,OAAO,MAAM;AAAA,QAClD;AAAA,MACF;AAEA,UAAI,OAAO,QAAQ,YAAY;AAC7B,mBAAW,CAAC,KAAK,KAAK,KAAK,OAAO,QAAQ,OAAO,QAAQ,UAAU,GAAG;AACpE,kBAAQ,YAAY,KAAK,KAAK;AAAA,QAChC;AAAA,MACF;AAEA,YAAM,SAAS,MAAM,MAAM,OAAO,SAAS;AAAA,QACzC,KAAK,OAAO,QAAQ,OAAO;AAAA,QAC3B,mBAAmB;AAAA,MAAA,CACpB;AAED,UAAI,aAAa,UAAU,OAAO,YAAY,OAAO;AACnD,cAAM,IAAI,MAAM,OAAO,SAAS,gCAAgC;AAAA,MAClE;AAEA,YAAM,iBACJ,oBAAoB,SAAS,OAAO,iBAAiB;AACvD,YAAM,kBACJ,qBAAqB,SAAS,OAAO,kBAAkB;AACzD,YAAM,iBACJ,oBAAoB,SAAS,OAAO,iBAAiB;AAEvD,UAAI,CAAC,gBAAgB;AACnB,cAAM,IAAI,MAAM,0CAA0C;AAAA,MAC5D;AAEA,aAAO;AAAA,QACL;AAAA,QACA;AAAA,QACA;AAAA,MAAA;AAAA,IAEJ,UAAA;AACE,UAAI;AACF,cAAM,UAAA,EAAY,MAAA;AAAA,MACpB,QAAQ;AAAA,MAAC;AAAA,IACX;AAAA,EACF;AACF;"}
|
|
1
|
+
{"version":3,"file":"standards-sdk.es93.js","sources":["../../src/hcs-15/tx.ts"],"sourcesContent":["import { AccountCreateTransaction, Hbar, PublicKey } from '@hashgraph/sdk';\n\nexport const HCS15_BASE_ACCOUNT_CREATE_TRANSACTION_MEMO =\n 'hcs-15:op:base_create';\nexport const HCS15_PETAL_ACCOUNT_CREATE_TRANSACTION_MEMO =\n 'hcs-15:op:petal_create';\n\nfunction normalizeTransactionMemo(\n value: string | undefined,\n fallback: string,\n): string {\n if (typeof value !== 'string') return fallback;\n const trimmed = value.trim();\n if (!trimmed) return fallback;\n return trimmed;\n}\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 transactionMemo?: 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 tx.setTransactionMemo(\n normalizeTransactionMemo(\n params.transactionMemo,\n HCS15_BASE_ACCOUNT_CREATE_TRANSACTION_MEMO,\n ),\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 transactionMemo?: 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 tx.setTransactionMemo(\n normalizeTransactionMemo(\n params.transactionMemo,\n HCS15_PETAL_ACCOUNT_CREATE_TRANSACTION_MEMO,\n ),\n );\n return tx;\n}\n"],"names":[],"mappings":";AAEO,MAAM,6CACX;AACK,MAAM,8CACX;AAEF,SAAS,yBACP,OACA,UACQ;AACR,MAAI,OAAO,UAAU,SAAU,QAAO;AACtC,QAAM,UAAU,MAAM,KAAA;AACtB,MAAI,CAAC,QAAS,QAAO;AACrB,SAAO;AACT;AAMO,SAAS,8BAA8B,QAMjB;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,KAAG;AAAA,IACD;AAAA,MACE,OAAO;AAAA,MACP;AAAA,IAAA;AAAA,EACF;AAEF,SAAO;AACT;AAMO,SAAS,+BAA+B,QAMlB;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,KAAG;AAAA,IACD;AAAA,MACE,OAAO;AAAA,MACP;AAAA,IAAA;AAAA,EACF;AAEF,SAAO;AACT;"}
|
|
@@ -1,22 +1,39 @@
|
|
|
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.es153.js";
|
|
3
|
+
import { buildHcs15BaseAccountCreateTx, buildHcs15PetalAccountCreateTx } from "./standards-sdk.es93.js";
|
|
4
|
+
import { HCS15BaseClient } from "./standards-sdk.es96.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
|
-
|
|
28
|
+
}
|
|
29
|
+
async ensureOperatorReady() {
|
|
30
|
+
await this.operatorCtx.ensureInitialized();
|
|
14
31
|
}
|
|
15
32
|
/**
|
|
16
|
-
* Create a new base account with a
|
|
33
|
+
* Create a new base account with a newly generated ECDSA key and EVM alias.
|
|
17
34
|
*/
|
|
18
35
|
async createBaseAccount(options) {
|
|
19
|
-
|
|
36
|
+
await this.ensureOperatorReady();
|
|
20
37
|
const priv = PrivateKey.generateECDSA();
|
|
21
38
|
const pub = priv.publicKey;
|
|
22
39
|
const tx = buildHcs15BaseAccountCreateTx({
|
|
@@ -26,45 +43,111 @@ class HCS15BrowserClient extends HCS15BaseClient {
|
|
|
26
43
|
accountMemo: options?.accountMemo,
|
|
27
44
|
transactionMemo: options?.transactionMemo
|
|
28
45
|
});
|
|
29
|
-
const
|
|
30
|
-
const
|
|
31
|
-
|
|
32
|
-
|
|
46
|
+
const resp = await tx.execute(this.client);
|
|
47
|
+
const receipt = await resp.getReceipt(this.client);
|
|
48
|
+
if (!receipt.accountId) {
|
|
49
|
+
throw new Error("HCS-15 BASE_ACCOUNT_CREATE_FAILED");
|
|
50
|
+
}
|
|
51
|
+
const accountId = receipt.accountId.toString();
|
|
33
52
|
const evmAddress = `0x${pub.toEvmAddress()}`;
|
|
34
|
-
this.logger.info("Created HCS-15 base account
|
|
35
|
-
accountId,
|
|
36
|
-
evmAddress
|
|
37
|
-
});
|
|
53
|
+
this.logger.info("Created HCS-15 base account", { accountId, evmAddress });
|
|
38
54
|
return {
|
|
39
55
|
accountId,
|
|
40
56
|
privateKey: priv,
|
|
41
57
|
privateKeyHex: priv.toStringRaw(),
|
|
42
58
|
publicKey: pub,
|
|
43
|
-
evmAddress
|
|
59
|
+
evmAddress,
|
|
60
|
+
receipt
|
|
44
61
|
};
|
|
45
62
|
}
|
|
46
63
|
/**
|
|
47
|
-
* Create a
|
|
64
|
+
* Create a Petal account that reuses the base account ECDSA key (no alias).
|
|
48
65
|
*/
|
|
49
66
|
async createPetalAccount(params) {
|
|
50
|
-
|
|
67
|
+
await this.ensureOperatorReady();
|
|
51
68
|
const baseKey = typeof params.basePrivateKey === "string" ? PrivateKey.fromStringECDSA(params.basePrivateKey) : params.basePrivateKey;
|
|
69
|
+
const pub = baseKey.publicKey;
|
|
52
70
|
const tx = buildHcs15PetalAccountCreateTx({
|
|
53
|
-
publicKey:
|
|
71
|
+
publicKey: pub,
|
|
54
72
|
initialBalance: new Hbar(params.initialBalance ?? 1),
|
|
55
73
|
maxAutomaticTokenAssociations: params.maxAutomaticTokenAssociations,
|
|
56
74
|
accountMemo: params.accountMemo,
|
|
57
75
|
transactionMemo: params.transactionMemo
|
|
58
76
|
});
|
|
59
|
-
const
|
|
60
|
-
const
|
|
61
|
-
|
|
62
|
-
|
|
63
|
-
|
|
64
|
-
|
|
77
|
+
const resp = await tx.execute(this.client);
|
|
78
|
+
const receipt = await resp.getReceipt(this.client);
|
|
79
|
+
if (!receipt.accountId) {
|
|
80
|
+
throw new Error("HCS-15 PETAL_ACCOUNT_CREATE_FAILED");
|
|
81
|
+
}
|
|
82
|
+
const accountId = receipt.accountId.toString();
|
|
83
|
+
this.logger.info("Created HCS-15 petal account", { accountId });
|
|
84
|
+
let profile;
|
|
85
|
+
if (params.profile) {
|
|
86
|
+
profile = await this.createPetalProfile({
|
|
87
|
+
accountId,
|
|
88
|
+
basePrivateKey: baseKey,
|
|
89
|
+
profile: params.profile
|
|
90
|
+
});
|
|
91
|
+
}
|
|
92
|
+
return { accountId, receipt, profile };
|
|
93
|
+
}
|
|
94
|
+
async createPetalProfile(params) {
|
|
95
|
+
const { HCS10Client } = await import("./standards-sdk.es150.js");
|
|
96
|
+
const { PersonBuilder } = await import("./standards-sdk.es151.js");
|
|
97
|
+
const hcs10 = new HCS10Client({
|
|
98
|
+
network: this.network,
|
|
99
|
+
operatorId: params.accountId,
|
|
100
|
+
operatorPrivateKey: params.basePrivateKey.toString(),
|
|
101
|
+
logLevel: this.logger.getLevel()
|
|
102
|
+
});
|
|
103
|
+
try {
|
|
104
|
+
const builder = new PersonBuilder().setName(params.profile.displayName).setBaseAccount(params.profile.baseAccountId);
|
|
105
|
+
if (params.profile.alias) {
|
|
106
|
+
builder.setAlias(params.profile.alias);
|
|
107
|
+
}
|
|
108
|
+
if (params.profile.bio) {
|
|
109
|
+
builder.setBio(params.profile.bio);
|
|
110
|
+
}
|
|
111
|
+
if (params.profile.profileImage) {
|
|
112
|
+
builder.setProfileImage(params.profile.profileImage);
|
|
113
|
+
}
|
|
114
|
+
if (params.profile.socials) {
|
|
115
|
+
for (const social of params.profile.socials) {
|
|
116
|
+
builder.addSocial(social.platform, social.handle);
|
|
117
|
+
}
|
|
118
|
+
}
|
|
119
|
+
if (params.profile.properties) {
|
|
120
|
+
for (const [key, value] of Object.entries(params.profile.properties)) {
|
|
121
|
+
builder.addProperty(key, value);
|
|
122
|
+
}
|
|
123
|
+
}
|
|
124
|
+
const result = await hcs10.create(builder, {
|
|
125
|
+
ttl: params.profile.ttl ?? 300,
|
|
126
|
+
updateAccountMemo: true
|
|
127
|
+
});
|
|
128
|
+
if ("success" in result && result.success === false) {
|
|
129
|
+
throw new Error(result.error ?? "Failed to create petal profile");
|
|
130
|
+
}
|
|
131
|
+
const inboundTopicId = "inboundTopicId" in result ? result.inboundTopicId : "";
|
|
132
|
+
const outboundTopicId = "outboundTopicId" in result ? result.outboundTopicId : "";
|
|
133
|
+
const profileTopicId = "profileTopicId" in result ? result.profileTopicId : "";
|
|
134
|
+
if (!profileTopicId) {
|
|
135
|
+
throw new Error("Failed to resolve petal profile topic ID");
|
|
136
|
+
}
|
|
137
|
+
return {
|
|
138
|
+
profileTopicId,
|
|
139
|
+
inboundTopicId,
|
|
140
|
+
outboundTopicId
|
|
141
|
+
};
|
|
142
|
+
} finally {
|
|
143
|
+
try {
|
|
144
|
+
hcs10.getClient().close();
|
|
145
|
+
} catch {
|
|
146
|
+
}
|
|
147
|
+
}
|
|
65
148
|
}
|
|
66
149
|
}
|
|
67
150
|
export {
|
|
68
|
-
|
|
151
|
+
HCS15Client
|
|
69
152
|
};
|
|
70
153
|
//# sourceMappingURL=standards-sdk.es94.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"standards-sdk.es94.js","sources":["../../src/hcs-15/browser.ts"],"sourcesContent":["import type {\n PublicKey,\n PrivateKey,\n TransactionResponse,\n} from '@hashgraph/sdk';\nimport { PrivateKey as SDKPrivateKey, Hbar } from '@hashgraph/sdk';\nimport type { DAppSigner } from '@hashgraph/hedera-wallet-connect';\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 signer');\n }\n return this.signer;\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 transactionMemo?: 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 transactionMemo: options?.transactionMemo,\n });\n const frozen = await tx.freezeWithSigner(signer);\n const res: TransactionResponse = await frozen.executeWithSigner(signer);\n const receipt = await res.getReceiptWithSigner(signer);\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 transactionMemo?: 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 transactionMemo: params.transactionMemo,\n });\n const frozen = await tx.freezeWithSigner(signer);\n const res: TransactionResponse = await frozen.executeWithSigner(signer);\n const receipt = await res.getReceiptWithSigner(signer);\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,iDAAiD;AAAA,IACnE;AACA,WAAO,KAAK;AAAA,EACd;AAAA;AAAA;AAAA;AAAA,EAKA,MAAM,kBAAkB,SAWrB;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,MACtB,iBAAiB,SAAS;AAAA,IAAA,CAC3B;AACD,UAAM,SAAS,MAAM,GAAG,iBAAiB,MAAM;AAC/C,UAAM,MAA2B,MAAM,OAAO,kBAAkB,MAAM;AACtE,UAAM,UAAU,MAAM,IAAI,qBAAqB,MAAM;AACrD,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,QAMW;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,MACpB,iBAAiB,OAAO;AAAA,IAAA,CACzB;AACD,UAAM,SAAS,MAAM,GAAG,iBAAiB,MAAM;AAC/C,UAAM,MAA2B,MAAM,OAAO,kBAAkB,MAAM;AACtE,UAAM,UAAU,MAAM,IAAI,qBAAqB,MAAM;AACrD,UAAM,YAAY,SAAS,WAAW,WAAA;AACtC,SAAK,OAAO,KAAK,0CAA0C,EAAE,WAAW;AACxE,WAAO,EAAE,UAAA;AAAA,EACX;AACF;"}
|
|
1
|
+
{"version":3,"file":"standards-sdk.es94.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 {\n PetalProfileOptions,\n PetalProfileResult,\n SDKHCS15ClientConfig,\n} 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 private async ensureOperatorReady(): Promise<void> {\n await this.operatorCtx.ensureInitialized();\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 transactionMemo?: string;\n }): Promise<{\n accountId: string;\n privateKey: PrivateKey;\n privateKeyHex: string;\n publicKey: PublicKey;\n evmAddress: string;\n receipt: TransactionReceipt;\n }> {\n await this.ensureOperatorReady();\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 transactionMemo: options?.transactionMemo,\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 transactionMemo?: string;\n profile?: PetalProfileOptions;\n }): Promise<{\n accountId: string;\n receipt: TransactionReceipt;\n profile?: PetalProfileResult;\n }> {\n await this.ensureOperatorReady();\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 transactionMemo: params.transactionMemo,\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 let profile: PetalProfileResult | undefined;\n if (params.profile) {\n profile = await this.createPetalProfile({\n accountId,\n basePrivateKey: baseKey,\n profile: params.profile,\n });\n }\n return { accountId, receipt, profile };\n }\n\n private async createPetalProfile(params: {\n accountId: string;\n basePrivateKey: PrivateKey;\n profile: PetalProfileOptions;\n }): Promise<PetalProfileResult> {\n const { HCS10Client } = await import('../hcs-10');\n const { PersonBuilder } = await import('../hcs-11');\n const hcs10 = new HCS10Client({\n network: this.network,\n operatorId: params.accountId,\n operatorPrivateKey: params.basePrivateKey.toString(),\n logLevel: this.logger.getLevel(),\n });\n\n try {\n const builder = new PersonBuilder()\n .setName(params.profile.displayName)\n .setBaseAccount(params.profile.baseAccountId);\n\n if (params.profile.alias) {\n builder.setAlias(params.profile.alias);\n }\n\n if (params.profile.bio) {\n builder.setBio(params.profile.bio);\n }\n\n if (params.profile.profileImage) {\n builder.setProfileImage(params.profile.profileImage);\n }\n\n if (params.profile.socials) {\n for (const social of params.profile.socials) {\n builder.addSocial(social.platform, social.handle);\n }\n }\n\n if (params.profile.properties) {\n for (const [key, value] of Object.entries(params.profile.properties)) {\n builder.addProperty(key, value);\n }\n }\n\n const result = await hcs10.create(builder, {\n ttl: params.profile.ttl ?? 300,\n updateAccountMemo: true,\n });\n\n if ('success' in result && result.success === false) {\n throw new Error(result.error ?? 'Failed to create petal profile');\n }\n\n const inboundTopicId =\n 'inboundTopicId' in result ? result.inboundTopicId : '';\n const outboundTopicId =\n 'outboundTopicId' in result ? result.outboundTopicId : '';\n const profileTopicId =\n 'profileTopicId' in result ? result.profileTopicId : '';\n\n if (!profileTopicId) {\n throw new Error('Failed to resolve petal profile topic ID');\n }\n\n return {\n profileTopicId,\n inboundTopicId,\n outboundTopicId,\n };\n } finally {\n try {\n hcs10.getClient().close();\n } catch {}\n }\n }\n}\n"],"names":[],"mappings":";;;;AAwBO,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,EAEA,MAAc,sBAAqC;AACjD,UAAM,KAAK,YAAY,kBAAA;AAAA,EACzB;AAAA;AAAA;AAAA;AAAA,EAKA,MAAM,kBAAkB,SAYrB;AACD,UAAM,KAAK,oBAAA;AACX,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,MACtB,iBAAiB,SAAS;AAAA,IAAA,CAC3B;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,QAWtB;AACD,UAAM,KAAK,oBAAA;AACX,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,MACpB,iBAAiB,OAAO;AAAA,IAAA,CACzB;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,QAAI;AACJ,QAAI,OAAO,SAAS;AAClB,gBAAU,MAAM,KAAK,mBAAmB;AAAA,QACtC;AAAA,QACA,gBAAgB;AAAA,QAChB,SAAS,OAAO;AAAA,MAAA,CACjB;AAAA,IACH;AACA,WAAO,EAAE,WAAW,SAAS,QAAA;AAAA,EAC/B;AAAA,EAEA,MAAc,mBAAmB,QAID;AAC9B,UAAM,EAAE,YAAA,IAAgB,MAAM,OAAO,0BAAW;AAChD,UAAM,EAAE,cAAA,IAAkB,MAAM,OAAO,0BAAW;AAClD,UAAM,QAAQ,IAAI,YAAY;AAAA,MAC5B,SAAS,KAAK;AAAA,MACd,YAAY,OAAO;AAAA,MACnB,oBAAoB,OAAO,eAAe,SAAA;AAAA,MAC1C,UAAU,KAAK,OAAO,SAAA;AAAA,IAAS,CAChC;AAED,QAAI;AACF,YAAM,UAAU,IAAI,cAAA,EACjB,QAAQ,OAAO,QAAQ,WAAW,EAClC,eAAe,OAAO,QAAQ,aAAa;AAE9C,UAAI,OAAO,QAAQ,OAAO;AACxB,gBAAQ,SAAS,OAAO,QAAQ,KAAK;AAAA,MACvC;AAEA,UAAI,OAAO,QAAQ,KAAK;AACtB,gBAAQ,OAAO,OAAO,QAAQ,GAAG;AAAA,MACnC;AAEA,UAAI,OAAO,QAAQ,cAAc;AAC/B,gBAAQ,gBAAgB,OAAO,QAAQ,YAAY;AAAA,MACrD;AAEA,UAAI,OAAO,QAAQ,SAAS;AAC1B,mBAAW,UAAU,OAAO,QAAQ,SAAS;AAC3C,kBAAQ,UAAU,OAAO,UAAU,OAAO,MAAM;AAAA,QAClD;AAAA,MACF;AAEA,UAAI,OAAO,QAAQ,YAAY;AAC7B,mBAAW,CAAC,KAAK,KAAK,KAAK,OAAO,QAAQ,OAAO,QAAQ,UAAU,GAAG;AACpE,kBAAQ,YAAY,KAAK,KAAK;AAAA,QAChC;AAAA,MACF;AAEA,YAAM,SAAS,MAAM,MAAM,OAAO,SAAS;AAAA,QACzC,KAAK,OAAO,QAAQ,OAAO;AAAA,QAC3B,mBAAmB;AAAA,MAAA,CACpB;AAED,UAAI,aAAa,UAAU,OAAO,YAAY,OAAO;AACnD,cAAM,IAAI,MAAM,OAAO,SAAS,gCAAgC;AAAA,MAClE;AAEA,YAAM,iBACJ,oBAAoB,SAAS,OAAO,iBAAiB;AACvD,YAAM,kBACJ,qBAAqB,SAAS,OAAO,kBAAkB;AACzD,YAAM,iBACJ,oBAAoB,SAAS,OAAO,iBAAiB;AAEvD,UAAI,CAAC,gBAAgB;AACnB,cAAM,IAAI,MAAM,0CAA0C;AAAA,MAC5D;AAEA,aAAO;AAAA,QACL;AAAA,QACA;AAAA,QACA;AAAA,MAAA;AAAA,IAEJ,UAAA;AACE,UAAI;AACF,cAAM,UAAA,EAAY,MAAA;AAAA,MACpB,QAAQ;AAAA,MAAC;AAAA,IACX;AAAA,EACF;AACF;"}
|
|
@@ -1,33 +1,70 @@
|
|
|
1
|
-
import {
|
|
2
|
-
import {
|
|
3
|
-
|
|
1
|
+
import { PrivateKey, Hbar } from "@hashgraph/sdk";
|
|
2
|
+
import { HCS15BaseClient } from "./standards-sdk.es96.js";
|
|
3
|
+
import { buildHcs15BaseAccountCreateTx, buildHcs15PetalAccountCreateTx } from "./standards-sdk.es93.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 signer");
|
|
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,
|
|
27
|
+
transactionMemo: options?.transactionMemo
|
|
9
28
|
});
|
|
10
|
-
|
|
11
|
-
|
|
29
|
+
const frozen = await tx.freezeWithSigner(signer);
|
|
30
|
+
const res = await frozen.executeWithSigner(signer);
|
|
31
|
+
const receipt = await res.getReceiptWithSigner(signer);
|
|
32
|
+
const accountId = receipt?.accountId?.toString?.();
|
|
33
|
+
const evmAddress = `0x${pub.toEvmAddress()}`;
|
|
34
|
+
this.logger.info("Created HCS-15 base account (browser)", {
|
|
35
|
+
accountId,
|
|
36
|
+
evmAddress
|
|
12
37
|
});
|
|
38
|
+
return {
|
|
39
|
+
accountId,
|
|
40
|
+
privateKey: priv,
|
|
41
|
+
privateKeyHex: priv.toStringRaw(),
|
|
42
|
+
publicKey: pub,
|
|
43
|
+
evmAddress
|
|
44
|
+
};
|
|
13
45
|
}
|
|
14
46
|
/**
|
|
15
|
-
*
|
|
47
|
+
* Create a petal account reusing a base ECDSA key, via wallet signer.
|
|
16
48
|
*/
|
|
17
|
-
async
|
|
18
|
-
|
|
19
|
-
|
|
20
|
-
|
|
21
|
-
|
|
22
|
-
|
|
23
|
-
|
|
24
|
-
|
|
25
|
-
|
|
26
|
-
|
|
27
|
-
|
|
49
|
+
async createPetalAccount(params) {
|
|
50
|
+
const signer = this.requireSigner();
|
|
51
|
+
const baseKey = typeof params.basePrivateKey === "string" ? PrivateKey.fromStringECDSA(params.basePrivateKey) : params.basePrivateKey;
|
|
52
|
+
const tx = buildHcs15PetalAccountCreateTx({
|
|
53
|
+
publicKey: baseKey.publicKey,
|
|
54
|
+
initialBalance: new Hbar(params.initialBalance ?? 1),
|
|
55
|
+
maxAutomaticTokenAssociations: params.maxAutomaticTokenAssociations,
|
|
56
|
+
accountMemo: params.accountMemo,
|
|
57
|
+
transactionMemo: params.transactionMemo
|
|
58
|
+
});
|
|
59
|
+
const frozen = await tx.freezeWithSigner(signer);
|
|
60
|
+
const res = await frozen.executeWithSigner(signer);
|
|
61
|
+
const receipt = await res.getReceiptWithSigner(signer);
|
|
62
|
+
const accountId = receipt?.accountId?.toString?.();
|
|
63
|
+
this.logger.info("Created HCS-15 petal account (browser)", { accountId });
|
|
64
|
+
return { accountId };
|
|
28
65
|
}
|
|
29
66
|
}
|
|
30
67
|
export {
|
|
31
|
-
|
|
68
|
+
HCS15BrowserClient
|
|
32
69
|
};
|
|
33
70
|
//# sourceMappingURL=standards-sdk.es95.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"standards-sdk.es95.js","sources":["../../src/hcs-15/
|
|
1
|
+
{"version":3,"file":"standards-sdk.es95.js","sources":["../../src/hcs-15/browser.ts"],"sourcesContent":["import type {\n PublicKey,\n PrivateKey,\n TransactionResponse,\n} from '@hashgraph/sdk';\nimport { PrivateKey as SDKPrivateKey, Hbar } from '@hashgraph/sdk';\nimport type { DAppSigner } from '@hashgraph/hedera-wallet-connect';\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 signer');\n }\n return this.signer;\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 transactionMemo?: 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 transactionMemo: options?.transactionMemo,\n });\n const frozen = await tx.freezeWithSigner(signer);\n const res: TransactionResponse = await frozen.executeWithSigner(signer);\n const receipt = await res.getReceiptWithSigner(signer);\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 transactionMemo?: 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 transactionMemo: params.transactionMemo,\n });\n const frozen = await tx.freezeWithSigner(signer);\n const res: TransactionResponse = await frozen.executeWithSigner(signer);\n const receipt = await res.getReceiptWithSigner(signer);\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,iDAAiD;AAAA,IACnE;AACA,WAAO,KAAK;AAAA,EACd;AAAA;AAAA;AAAA;AAAA,EAKA,MAAM,kBAAkB,SAWrB;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,MACtB,iBAAiB,SAAS;AAAA,IAAA,CAC3B;AACD,UAAM,SAAS,MAAM,GAAG,iBAAiB,MAAM;AAC/C,UAAM,MAA2B,MAAM,OAAO,kBAAkB,MAAM;AACtE,UAAM,UAAU,MAAM,IAAI,qBAAqB,MAAM;AACrD,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,QAMW;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,MACpB,iBAAiB,OAAO;AAAA,IAAA,CACzB;AACD,UAAM,SAAS,MAAM,GAAG,iBAAiB,MAAM;AAC/C,UAAM,MAA2B,MAAM,OAAO,kBAAkB,MAAM;AACtE,UAAM,UAAU,MAAM,IAAI,qBAAqB,MAAM;AACrD,UAAM,YAAY,SAAS,WAAW,WAAA;AACtC,SAAK,OAAO,KAAK,0CAA0C,EAAE,WAAW;AACxE,WAAO,EAAE,UAAA;AAAA,EACX;AACF;"}
|
|
@@ -1,28 +1,33 @@
|
|
|
1
|
-
|
|
2
|
-
|
|
3
|
-
|
|
4
|
-
|
|
5
|
-
|
|
6
|
-
|
|
7
|
-
|
|
8
|
-
|
|
9
|
-
|
|
10
|
-
|
|
11
|
-
|
|
12
|
-
|
|
13
|
-
|
|
14
|
-
|
|
15
|
-
|
|
16
|
-
|
|
17
|
-
|
|
18
|
-
|
|
19
|
-
|
|
20
|
-
|
|
1
|
+
import { HederaMirrorNode } from "./standards-sdk.es139.js";
|
|
2
|
+
import { Logger } from "./standards-sdk.es118.js";
|
|
3
|
+
class HCS15BaseClient {
|
|
4
|
+
constructor(config) {
|
|
5
|
+
this.network = config.network;
|
|
6
|
+
this.logger = config.logger || new Logger({
|
|
7
|
+
module: "HCS-15",
|
|
8
|
+
level: config.logLevel || "info"
|
|
9
|
+
});
|
|
10
|
+
this.mirrorNode = new HederaMirrorNode(this.network, this.logger, {
|
|
11
|
+
customUrl: config.mirrorNodeUrl
|
|
12
|
+
});
|
|
13
|
+
}
|
|
14
|
+
/**
|
|
15
|
+
* Verify that a petal account shares the same public key as the base account.
|
|
16
|
+
*/
|
|
17
|
+
async verifyPetalAccount(petalAccountId, baseAccountId) {
|
|
18
|
+
try {
|
|
19
|
+
const petalInfo = await this.mirrorNode.requestAccount(petalAccountId);
|
|
20
|
+
const baseInfo = await this.mirrorNode.requestAccount(baseAccountId);
|
|
21
|
+
const petalKey = petalInfo?.key?.key || "";
|
|
22
|
+
const baseKey = baseInfo?.key?.key || "";
|
|
23
|
+
return petalKey !== "" && petalKey === baseKey;
|
|
24
|
+
} catch (e) {
|
|
25
|
+
this.logger.warn("verifyPetalAccount failed", { error: String(e) });
|
|
26
|
+
return false;
|
|
27
|
+
}
|
|
21
28
|
}
|
|
22
29
|
}
|
|
23
30
|
export {
|
|
24
|
-
|
|
25
|
-
FloraOperation,
|
|
26
|
-
FloraTopicType
|
|
31
|
+
HCS15BaseClient
|
|
27
32
|
};
|
|
28
33
|
//# sourceMappingURL=standards-sdk.es96.js.map
|