@hashgraphonline/standards-sdk 0.1.143-feat-solana-register.canary.1c6f446.78 → 0.1.144-feat-solana-register.canary.d5edcec.80
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/sdk.d.ts.map +1 -1
- package/dist/cjs/hcs-14/issuers/hiero.d.ts.map +1 -1
- package/dist/cjs/index.d.ts.map +1 -1
- package/dist/cjs/services/registry-broker/schemas.d.ts +153 -153
- package/dist/cjs/standards-sdk.cjs +2 -2
- package/dist/cjs/standards-sdk.cjs.map +1 -1
- package/dist/cjs/utils/dynamic-import.d.ts +5 -1
- package/dist/cjs/utils/dynamic-import.d.ts.map +1 -1
- package/dist/es/hcs-10/sdk.d.ts.map +1 -1
- package/dist/es/hcs-14/issuers/hiero.d.ts.map +1 -1
- package/dist/es/index.d.ts.map +1 -1
- package/dist/es/services/registry-broker/schemas.d.ts +153 -153
- package/dist/es/standards-sdk.es.js +134 -135
- 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 -27
- 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 -167
- 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 -84
- package/dist/es/standards-sdk.es117.js.map +1 -1
- package/dist/es/standards-sdk.es118.js +2 -40
- 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 -201
- 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 +192 -162
- package/dist/es/standards-sdk.es128.js.map +1 -1
- package/dist/es/standards-sdk.es129.js +61 -164
- 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 +102 -85
- package/dist/es/standards-sdk.es130.js.map +1 -1
- package/dist/es/standards-sdk.es131.js +222 -96
- package/dist/es/standards-sdk.es131.js.map +1 -1
- package/dist/es/standards-sdk.es132.js +153 -220
- package/dist/es/standards-sdk.es132.js.map +1 -1
- package/dist/es/standards-sdk.es133.js +104 -162
- package/dist/es/standards-sdk.es133.js.map +1 -1
- package/dist/es/standards-sdk.es134.js +296 -92
- package/dist/es/standards-sdk.es134.js.map +1 -1
- package/dist/es/standards-sdk.es135.js +432 -294
- package/dist/es/standards-sdk.es135.js.map +1 -1
- package/dist/es/standards-sdk.es136.js +14 -461
- package/dist/es/standards-sdk.es136.js.map +1 -1
- package/dist/es/standards-sdk.es137.js +79 -15
- package/dist/es/standards-sdk.es137.js.map +1 -1
- package/dist/es/standards-sdk.es138.js +77 -71
- package/dist/es/standards-sdk.es138.js.map +1 -1
- package/dist/es/standards-sdk.es139.js +152 -80
- 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 -159
- package/dist/es/standards-sdk.es140.js.map +1 -1
- package/dist/es/standards-sdk.es141.js +86 -7
- package/dist/es/standards-sdk.es141.js.map +1 -1
- package/dist/es/standards-sdk.es142.js +44 -65
- package/dist/es/standards-sdk.es142.js.map +1 -1
- package/dist/es/standards-sdk.es143.js +30 -65
- package/dist/es/standards-sdk.es143.js.map +1 -1
- package/dist/es/standards-sdk.es144.js +34 -30
- package/dist/es/standards-sdk.es144.js.map +1 -1
- package/dist/es/standards-sdk.es145.js +28 -34
- package/dist/es/standards-sdk.es145.js.map +1 -1
- package/dist/es/standards-sdk.es146.js +138 -28
- package/dist/es/standards-sdk.es146.js.map +1 -1
- package/dist/es/standards-sdk.es147.js +37 -133
- package/dist/es/standards-sdk.es147.js.map +1 -1
- package/dist/es/standards-sdk.es148.js +12280 -33
- package/dist/es/standards-sdk.es148.js.map +1 -1
- package/dist/es/standards-sdk.es149.js +1 -1
- 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 +12 -12284
- package/dist/es/standards-sdk.es150.js.map +1 -1
- package/dist/es/standards-sdk.es151.js +54 -15
- package/dist/es/standards-sdk.es151.js.map +1 -1
- package/dist/es/standards-sdk.es152.js +72 -160
- package/dist/es/standards-sdk.es152.js.map +1 -1
- package/dist/es/standards-sdk.es153.js +139 -289
- package/dist/es/standards-sdk.es153.js.map +1 -1
- package/dist/es/standards-sdk.es154.js +274 -298
- package/dist/es/standards-sdk.es154.js.map +1 -1
- package/dist/es/standards-sdk.es155.js +262 -369
- package/dist/es/standards-sdk.es155.js.map +1 -1
- package/dist/es/standards-sdk.es156.js +316 -194
- package/dist/es/standards-sdk.es156.js.map +1 -1
- package/dist/es/standards-sdk.es157.js +319 -64
- package/dist/es/standards-sdk.es157.js.map +1 -1
- package/dist/es/standards-sdk.es158.js +69 -49
- package/dist/es/standards-sdk.es158.js.map +1 -1
- package/dist/es/standards-sdk.es159.js +222 -65
- package/dist/es/standards-sdk.es159.js.map +1 -1
- 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 +223 -218
- package/dist/es/standards-sdk.es160.js.map +1 -1
- package/dist/es/standards-sdk.es17.js +23 -948
- 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 +818 -2092
- 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 -1092
- 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 -57
- 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 -922
- 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 +273 -196
- 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 -372
- 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 -201
- 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 -371
- 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 -44
- package/dist/es/standards-sdk.es87.js.map +1 -1
- package/dist/es/standards-sdk.es88.js +30 -113
- package/dist/es/standards-sdk.es88.js.map +1 -1
- package/dist/es/standards-sdk.es89.js +22 -59
- 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 +267 -225
- package/dist/es/standards-sdk.es92.js.map +1 -1
- package/dist/es/standards-sdk.es93.js +95 -220
- 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 -43
- package/dist/es/standards-sdk.es96.js.map +1 -1
- package/dist/es/standards-sdk.es97.js +82 -245
- package/dist/es/standards-sdk.es97.js.map +1 -1
- package/dist/es/standards-sdk.es98.js +49 -50
- 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/dynamic-import.d.ts +5 -1
- package/dist/es/utils/dynamic-import.d.ts.map +1 -1
- package/package.json +4 -4
- 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
- package/dist/es/standards-sdk.es161.js +0 -247
- package/dist/es/standards-sdk.es161.js.map +0 -1
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"standards-sdk.es14.js","sources":["../../src/hcs-7/wasm-bridge.ts"],"sourcesContent":["import { Logger, ILogger } from '../utils/logger';\n\nexport interface BaseMessage {\n p: string;\n op: string;\n m: string;\n t?: string;\n t_id?: string;\n d?: Record<string, unknown>;\n}\n\nexport interface EVMConfig extends BaseMessage {\n c: {\n contractAddress: string;\n abi: {\n inputs: Array<{\n name: string;\n type: string;\n }>;\n name: string;\n outputs: Array<{\n name: string;\n type: string;\n }>;\n stateMutability: string;\n type: string;\n };\n };\n}\n\nexport interface WASMConfig extends BaseMessage {\n c: {\n wasmTopicId: string;\n inputType: {\n stateData: Record<string, string>;\n };\n outputType: {\n type: string;\n format: string;\n };\n };\n}\n\nexport interface WasmExports extends WebAssembly.Exports {\n __wbindgen_add_to_stack_pointer: (a: number) => number;\n __wbindgen_malloc: (a: number, b: number) => number;\n __wbindgen_realloc: (a: number, b: number, c: number, d: number) => number;\n __wbindgen_free: (a: number, b: number, c: number) => void;\n memory: WebAssembly.Memory;\n process_state: (state_json: string, messages_json: string) => string;\n get_params: () => string;\n [key: string]: any;\n}\n\nexport class WasmBridge {\n wasm: WasmExports | null = null;\n private WASM_VECTOR_LEN: number = 0;\n private cachedUint8Memory: Uint8Array | null = null;\n private cachedDataViewMemory: DataView | null = null;\n private readonly textEncoder: TextEncoder;\n private readonly textDecoder: TextDecoder;\n private logger: ILogger;\n\n constructor() {\n this.textEncoder = new TextEncoder();\n this.textDecoder = new TextDecoder('utf-8', {\n ignoreBOM: true,\n fatal: true,\n });\n this.textDecoder.decode();\n this.logger = Logger.getInstance({ module: 'WasmBridge' });\n }\n\n setLogLevel(level: 'debug' | 'info' | 'warn' | 'error'): void {\n this.logger.setLogLevel(level);\n }\n\n get wasmInstance(): WasmExports {\n if (!this.wasm) {\n throw new Error('WASM not initialized');\n }\n return this.wasm;\n }\n\n private getUint8Memory(): Uint8Array {\n if (!this.wasm) {\n throw new Error('WASM not initialized');\n }\n if (\n this.cachedUint8Memory === null ||\n this.cachedUint8Memory.byteLength === 0\n ) {\n this.cachedUint8Memory = new Uint8Array(this.wasm.memory.buffer);\n }\n return this.cachedUint8Memory;\n }\n\n private getDataViewMemory(): DataView {\n if (!this.wasm) {\n throw new Error('WASM not initialized');\n }\n if (\n this.cachedDataViewMemory === null ||\n this.cachedDataViewMemory.buffer !== this.wasm.memory.buffer\n ) {\n this.cachedDataViewMemory = new DataView(this.wasm.memory.buffer);\n }\n return this.cachedDataViewMemory;\n }\n\n private encodeString(\n arg: string,\n view: Uint8Array,\n ): { read: number; written: number } {\n if (arg.length === 0) {\n return { read: 0, written: 0 };\n }\n\n const buf = this.textEncoder.encode(arg);\n view.set(buf);\n return { read: arg.length, written: buf.length };\n }\n\n private passStringToWasm(\n arg: string,\n malloc: (a: number, b: number) => number,\n realloc?: (a: number, b: number, c: number, d: number) => number,\n ): number {\n if (realloc === undefined) {\n const buf = this.textEncoder.encode(arg);\n const ptr = malloc(buf.length, 1);\n const view = this.getUint8Memory();\n view.set(buf, ptr);\n this.WASM_VECTOR_LEN = buf.length;\n return ptr;\n }\n\n let len = this.textEncoder.encode(arg).length;\n let ptr = malloc(len, 1);\n\n const mem = this.getUint8Memory();\n\n let offset = 0;\n\n for (; offset < len; offset++) {\n const code = arg.charCodeAt(offset);\n if (code > 0x7f) break;\n mem[ptr + offset] = code;\n }\n\n if (offset !== len) {\n if (offset !== 0) {\n arg = arg.slice(offset);\n }\n ptr = realloc(\n ptr,\n len,\n (len = offset + this.textEncoder.encode(arg).length * 3),\n 1,\n );\n const view = this.getUint8Memory().subarray(ptr + offset, ptr + len);\n const ret = this.encodeString(arg, view);\n\n offset += ret.written;\n }\n\n this.WASM_VECTOR_LEN = offset;\n return ptr;\n }\n\n private getStringFromWasm(ptr: number, len: number): string {\n ptr = ptr >>> 0;\n return this.textDecoder.decode(\n this.getUint8Memory().subarray(ptr, ptr + len),\n );\n }\n\n createWasmFunction(\n wasmFn: (...args: any[]) => any,\n ): (...args: string[]) => string {\n if (!this.wasm) {\n throw new Error('WASM not initialized');\n }\n\n return (...args: string[]): string => {\n const retptr = this.wasm!.__wbindgen_add_to_stack_pointer(-16);\n let deferred: [number, number] = [0, 0];\n\n try {\n const ptrLenPairs = args.map(arg => {\n const ptr = this.passStringToWasm(\n arg,\n this.wasm!.__wbindgen_malloc,\n this.wasm!.__wbindgen_realloc,\n );\n return [ptr, this.WASM_VECTOR_LEN];\n });\n\n const wasmArgs = [retptr, ...ptrLenPairs.flat()];\n\n wasmFn.apply(this.wasm, wasmArgs);\n\n const r0 = this.getDataViewMemory().getInt32(retptr + 4 * 0, true);\n const r1 = this.getDataViewMemory().getInt32(retptr + 4 * 1, true);\n deferred = [r0, r1];\n\n return this.getStringFromWasm(r0, r1);\n } finally {\n this.wasm!.__wbindgen_add_to_stack_pointer(16);\n this.wasm!.__wbindgen_free(deferred[0], deferred[1], 1);\n }\n };\n }\n\n async initWasm(wasmBytes: BufferSource): Promise<WasmExports> {\n const bridge = this;\n const imports = {\n __wbindgen_placeholder__: {\n __wbindgen_throw: function (ptr: number, len: number) {\n const message = bridge.getStringFromWasm(ptr, len);\n bridge.logger.error(`WASM error: ${message}`);\n throw new Error(message);\n },\n },\n };\n\n try {\n this.logger.debug('Compiling WASM module');\n const wasmModule = await WebAssembly.compile(wasmBytes);\n this.logger.debug('Instantiating WASM module');\n const wasmInstance = await WebAssembly.instantiate(wasmModule, imports);\n this.wasm = wasmInstance.exports as WasmExports;\n this.logger.info('WASM module initialized successfully');\n return this.wasm;\n } catch (error) {\n this.logger.error('Failed to initialize WASM module', error);\n throw error;\n }\n }\n\n createStateData(wasmConfig: WASMConfig, stateData: Record<string, any> = {}) {\n let dynamicStateData: Record<string, any> = {};\n\n if (wasmConfig?.c?.inputType?.stateData) {\n if (\n stateData.latestRoundData &&\n Object.keys(wasmConfig.c.inputType.stateData).every(\n key => key in stateData.latestRoundData,\n )\n ) {\n dynamicStateData.latestRoundData = {};\n Object.entries(wasmConfig.c.inputType.stateData).forEach(([key, _]) => {\n dynamicStateData.latestRoundData[key] = String(\n stateData.latestRoundData[key],\n );\n });\n } else {\n Object.entries(wasmConfig.c.inputType.stateData).forEach(\n ([key, type]) => {\n const result = stateData[key];\n if (\n result &&\n typeof result === 'object' &&\n 'values' in result &&\n result.values.length > 0\n ) {\n dynamicStateData[key] = String(result.values[0]);\n } else {\n dynamicStateData[key] = this.getDefaultValueForType(\n type as string,\n );\n }\n },\n );\n }\n }\n return dynamicStateData;\n }\n\n private getDefaultValueForType(type: string): string {\n if (\n type.startsWith('uint') ||\n type.startsWith('int') ||\n type === 'number'\n ) {\n return '0';\n } else if (type === 'bool') {\n return 'false';\n } else {\n return '';\n }\n }\n\n executeWasm(stateData: Record<string, any>, messages: BaseMessage[]) {\n if (!this.wasm) {\n this.logger.error('WASM not initialized');\n throw new Error('WASM not initialized');\n }\n\n try {\n this.logger.debug('Executing WASM with stateData', stateData);\n const fn = this.createWasmFunction(this.wasmInstance.process_state);\n return fn(JSON.stringify(stateData), JSON.stringify(messages));\n } catch (error) {\n this.logger.error('Error executing WASM', error);\n throw error;\n }\n }\n\n getParams(): string {\n const fn = this.createWasmFunction(this.wasmInstance.get_params);\n return fn();\n }\n}\n"],"names":["ptr"],"mappings":";AAsDO,MAAM,WAAW;AAAA,EAStB,cAAc;AARd,SAAA,OAA2B;AAC3B,SAAQ,kBAA0B;AAClC,SAAQ,oBAAuC;AAC/C,SAAQ,uBAAwC;AAM9C,SAAK,cAAc,IAAI,YAAA;AACvB,SAAK,cAAc,IAAI,YAAY,SAAS;AAAA,MAC1C,WAAW;AAAA,MACX,OAAO;AAAA,IAAA,CACR;AACD,SAAK,YAAY,OAAA;AACjB,SAAK,SAAS,OAAO,YAAY,EAAE,QAAQ,cAAc;AAAA,EAC3D;AAAA,EAEA,YAAY,OAAkD;AAC5D,SAAK,OAAO,YAAY,KAAK;AAAA,EAC/B;AAAA,EAEA,IAAI,eAA4B;AAC9B,QAAI,CAAC,KAAK,MAAM;AACd,YAAM,IAAI,MAAM,sBAAsB;AAAA,IACxC;AACA,WAAO,KAAK;AAAA,EACd;AAAA,EAEQ,iBAA6B;AACnC,QAAI,CAAC,KAAK,MAAM;AACd,YAAM,IAAI,MAAM,sBAAsB;AAAA,IACxC;AACA,QACE,KAAK,sBAAsB,QAC3B,KAAK,kBAAkB,eAAe,GACtC;AACA,WAAK,oBAAoB,IAAI,WAAW,KAAK,KAAK,OAAO,MAAM;AAAA,IACjE;AACA,WAAO,KAAK;AAAA,EACd;AAAA,EAEQ,oBAA8B;AACpC,QAAI,CAAC,KAAK,MAAM;AACd,YAAM,IAAI,MAAM,sBAAsB;AAAA,IACxC;AACA,QACE,KAAK,yBAAyB,QAC9B,KAAK,qBAAqB,WAAW,KAAK,KAAK,OAAO,QACtD;AACA,WAAK,uBAAuB,IAAI,SAAS,KAAK,KAAK,OAAO,MAAM;AAAA,IAClE;AACA,WAAO,KAAK;AAAA,EACd;AAAA,EAEQ,aACN,KACA,MACmC;AACnC,QAAI,IAAI,WAAW,GAAG;AACpB,aAAO,EAAE,MAAM,GAAG,SAAS,EAAA;AAAA,IAC7B;AAEA,UAAM,MAAM,KAAK,YAAY,OAAO,GAAG;AACvC,SAAK,IAAI,GAAG;AACZ,WAAO,EAAE,MAAM,IAAI,QAAQ,SAAS,IAAI,OAAA;AAAA,EAC1C;AAAA,EAEQ,iBACN,KACA,QACA,SACQ;AACR,QAAI,YAAY,QAAW;AACzB,YAAM,MAAM,KAAK,YAAY,OAAO,GAAG;AACvC,YAAMA,OAAM,OAAO,IAAI,QAAQ,CAAC;AAChC,YAAM,OAAO,KAAK,eAAA;AAClB,WAAK,IAAI,KAAKA,IAAG;AACjB,WAAK,kBAAkB,IAAI;AAC3B,aAAOA;AAAAA,IACT;AAEA,QAAI,MAAM,KAAK,YAAY,OAAO,GAAG,EAAE;AACvC,QAAI,MAAM,OAAO,KAAK,CAAC;AAEvB,UAAM,MAAM,KAAK,eAAA;AAEjB,QAAI,SAAS;AAEb,WAAO,SAAS,KAAK,UAAU;AAC7B,YAAM,OAAO,IAAI,WAAW,MAAM;AAClC,UAAI,OAAO,IAAM;AACjB,UAAI,MAAM,MAAM,IAAI;AAAA,IACtB;AAEA,QAAI,WAAW,KAAK;AAClB,UAAI,WAAW,GAAG;AAChB,cAAM,IAAI,MAAM,MAAM;AAAA,MACxB;AACA,YAAM;AAAA,QACJ;AAAA,QACA;AAAA,QACC,MAAM,SAAS,KAAK,YAAY,OAAO,GAAG,EAAE,SAAS;AAAA,QACtD;AAAA,MAAA;AAEF,YAAM,OAAO,KAAK,eAAA,EAAiB,SAAS,MAAM,QAAQ,MAAM,GAAG;AACnE,YAAM,MAAM,KAAK,aAAa,KAAK,IAAI;AAEvC,gBAAU,IAAI;AAAA,IAChB;AAEA,SAAK,kBAAkB;AACvB,WAAO;AAAA,EACT;AAAA,EAEQ,kBAAkB,KAAa,KAAqB;AAC1D,UAAM,QAAQ;AACd,WAAO,KAAK,YAAY;AAAA,MACtB,KAAK,eAAA,EAAiB,SAAS,KAAK,MAAM,GAAG;AAAA,IAAA;AAAA,EAEjD;AAAA,EAEA,mBACE,QAC+B;AAC/B,QAAI,CAAC,KAAK,MAAM;AACd,YAAM,IAAI,MAAM,sBAAsB;AAAA,IACxC;AAEA,WAAO,IAAI,SAA2B;AACpC,YAAM,SAAS,KAAK,KAAM,gCAAgC,GAAG;AAC7D,UAAI,WAA6B,CAAC,GAAG,CAAC;AAEtC,UAAI;AACF,cAAM,cAAc,KAAK,IAAI,CAAA,QAAO;AAClC,gBAAM,MAAM,KAAK;AAAA,YACf;AAAA,YACA,KAAK,KAAM;AAAA,YACX,KAAK,KAAM;AAAA,UAAA;AAEb,iBAAO,CAAC,KAAK,KAAK,eAAe;AAAA,QACnC,CAAC;AAED,cAAM,WAAW,CAAC,QAAQ,GAAG,YAAY,MAAM;AAE/C,eAAO,MAAM,KAAK,MAAM,QAAQ;AAEhC,cAAM,KAAK,KAAK,kBAAA,EAAoB,SAAS,SAAS,IAAI,GAAG,IAAI;AACjE,cAAM,KAAK,KAAK,kBAAA,EAAoB,SAAS,SAAS,IAAI,GAAG,IAAI;AACjE,mBAAW,CAAC,IAAI,EAAE;AAElB,eAAO,KAAK,kBAAkB,IAAI,EAAE;AAAA,MACtC,UAAA;AACE,aAAK,KAAM,gCAAgC,EAAE;AAC7C,aAAK,KAAM,gBAAgB,SAAS,CAAC,GAAG,SAAS,CAAC,GAAG,CAAC;AAAA,MACxD;AAAA,IACF;AAAA,EACF;AAAA,EAEA,MAAM,SAAS,WAA+C;AAC5D,UAAM,SAAS;AACf,UAAM,UAAU;AAAA,MACd,0BAA0B;AAAA,QACxB,kBAAkB,SAAU,KAAa,KAAa;AACpD,gBAAM,UAAU,OAAO,kBAAkB,KAAK,GAAG;AACjD,iBAAO,OAAO,MAAM,eAAe,OAAO,EAAE;AAC5C,gBAAM,IAAI,MAAM,OAAO;AAAA,QACzB;AAAA,MAAA;AAAA,IACF;AAGF,QAAI;AACF,WAAK,OAAO,MAAM,uBAAuB;AACzC,YAAM,aAAa,MAAM,YAAY,QAAQ,SAAS;AACtD,WAAK,OAAO,MAAM,2BAA2B;AAC7C,YAAM,eAAe,MAAM,YAAY,YAAY,YAAY,OAAO;AACtE,WAAK,OAAO,aAAa;AACzB,WAAK,OAAO,KAAK,sCAAsC;AACvD,aAAO,KAAK;AAAA,IACd,SAAS,OAAO;AACd,WAAK,OAAO,MAAM,oCAAoC,KAAK;AAC3D,YAAM;AAAA,IACR;AAAA,EACF;AAAA,EAEA,gBAAgB,YAAwB,YAAiC,IAAI;AAC3E,QAAI,mBAAwC,CAAA;AAE5C,QAAI,YAAY,GAAG,WAAW,WAAW;AACvC,UACE,UAAU,mBACV,OAAO,KAAK,WAAW,EAAE,UAAU,SAAS,EAAE;AAAA,QAC5C,CAAA,QAAO,OAAO,UAAU;AAAA,MAAA,GAE1B;AACA,yBAAiB,kBAAkB,CAAA;AACnC,eAAO,QAAQ,WAAW,EAAE,UAAU,SAAS,EAAE,QAAQ,CAAC,CAAC,KAAK,CAAC,MAAM;AACrE,2BAAiB,gBAAgB,GAAG,IAAI;AAAA,YACtC,UAAU,gBAAgB,GAAG;AAAA,UAAA;AAAA,QAEjC,CAAC;AAAA,MACH,OAAO;AACL,eAAO,QAAQ,WAAW,EAAE,UAAU,SAAS,EAAE;AAAA,UAC/C,CAAC,CAAC,KAAK,IAAI,MAAM;AACf,kBAAM,SAAS,UAAU,GAAG;AAC5B,gBACE,UACA,OAAO,WAAW,YAClB,YAAY,UACZ,OAAO,OAAO,SAAS,GACvB;AACA,+BAAiB,GAAG,IAAI,OAAO,OAAO,OAAO,CAAC,CAAC;AAAA,YACjD,OAAO;AACL,+BAAiB,GAAG,IAAI,KAAK;AAAA,gBAC3B;AAAA,cAAA;AAAA,YAEJ;AAAA,UACF;AAAA,QAAA;AAAA,MAEJ;AAAA,IACF;AACA,WAAO;AAAA,EACT;AAAA,EAEQ,uBAAuB,MAAsB;AACnD,QACE,KAAK,WAAW,MAAM,KACtB,KAAK,WAAW,KAAK,KACrB,SAAS,UACT;AACA,aAAO;AAAA,IACT,WAAW,SAAS,QAAQ;AAC1B,aAAO;AAAA,IACT,OAAO;AACL,aAAO;AAAA,IACT;AAAA,EACF;AAAA,EAEA,YAAY,WAAgC,UAAyB;AACnE,QAAI,CAAC,KAAK,MAAM;AACd,WAAK,OAAO,MAAM,sBAAsB;AACxC,YAAM,IAAI,MAAM,sBAAsB;AAAA,IACxC;AAEA,QAAI;AACF,WAAK,OAAO,MAAM,iCAAiC,SAAS;AAC5D,YAAM,KAAK,KAAK,mBAAmB,KAAK,aAAa,aAAa;AAClE,aAAO,GAAG,KAAK,UAAU,SAAS,GAAG,KAAK,UAAU,QAAQ,CAAC;AAAA,IAC/D,SAAS,OAAO;AACd,WAAK,OAAO,MAAM,wBAAwB,KAAK;AAC/C,YAAM;AAAA,IACR;AAAA,EACF;AAAA,EAEA,YAAoB;AAClB,UAAM,KAAK,KAAK,mBAAmB,KAAK,aAAa,UAAU;AAC/D,WAAO,GAAA;AAAA,EACT;AACF;"}
|
|
1
|
+
{"version":3,"file":"standards-sdk.es14.js","sources":["../../src/hcs-7/evm-bridge.ts"],"sourcesContent":["import { AccountId, ContractId } from '@hashgraph/sdk';\nimport { EVMConfig } from './wasm-bridge';\nimport { ethers } from 'ethers';\nimport { Logger, ILogger } from '../utils/logger';\n\nexport interface EVMCache {\n get(key: string): Promise<string | undefined> | string | undefined;\n set(key: string, value: string): Promise<void> | void;\n delete(key: string): Promise<void> | void;\n clear(): Promise<void> | void;\n}\n\nexport class MapCache implements EVMCache {\n private cache: Map<string, string>;\n\n constructor() {\n this.cache = new Map();\n }\n\n get(key: string): string | undefined {\n return this.cache.get(key);\n }\n\n set(key: string, value: string): void {\n this.cache.set(key, value);\n }\n\n delete(key: string): void {\n this.cache.delete(key);\n }\n\n clear(): void {\n this.cache.clear();\n }\n}\n\nexport class EVMBridge {\n public network: string;\n public mirrorNodeUrl: string;\n private cache: EVMCache;\n private logger: ILogger;\n\n constructor(\n network: string = 'mainnet-public',\n mirrorNodeUrl: string = `mirrornode.hedera.com/api/v1/contracts/call`,\n cache?: EVMCache,\n ) {\n this.network = network;\n this.mirrorNodeUrl = mirrorNodeUrl;\n this.cache = cache || new MapCache();\n this.logger = Logger.getInstance({ module: 'EVMBridge' });\n }\n\n async executeCommands(\n evmConfigs: EVMConfig[],\n initialState: Record<string, string> = {},\n ): Promise<{\n results: Record<string, any>;\n stateData: Record<string, any>;\n }> {\n let stateData: Record<string, any> = { ...initialState };\n const results: Record<string, any> = {};\n\n for (const config of evmConfigs) {\n const cacheKey = `${config.c.contractAddress}-${config.c.abi.name}`;\n\n const cachedResult = await this.cache.get(cacheKey);\n if (cachedResult) {\n results[config.c.abi.name] = JSON.parse(cachedResult);\n Object.assign(stateData, results[config.c.abi.name]); // Flatten the values into stateData\n continue;\n }\n\n try {\n const iface = new ethers.Interface([\n {\n ...config.c.abi,\n },\n ]);\n const command = iface.encodeFunctionData(config.c.abi.name);\n const contractId = ContractId.fromSolidityAddress(\n config.c.contractAddress,\n );\n\n const result = await this.readFromMirrorNode(\n command,\n AccountId.fromString('0.0.800'),\n contractId,\n );\n\n this.logger.info(\n `Result for ${config.c.contractAddress}:`,\n result?.result,\n );\n\n if (!result?.result) {\n this.logger.warn(\n `Failed to get result from mirror node for ${config.c.contractAddress}`,\n );\n results[config.c.abi.name] = '0';\n Object.assign(stateData, results[config.c.abi.name]); // Flatten the values into stateData\n continue;\n }\n\n const decodedResult = iface?.decodeFunctionResult(\n config.c.abi.name,\n result.result,\n );\n let processedResult: Record<string, any> = {\n values: [], // Initialize array for values\n };\n\n if (decodedResult) {\n config.c.abi.outputs?.forEach((output, idx) => {\n const value = decodedResult[idx];\n const formattedValue = formatValue(value, output.type);\n\n processedResult.values.push(formattedValue);\n\n if (output.name) {\n processedResult[output.name] = formattedValue;\n }\n });\n }\n\n await this.cache.set(cacheKey, JSON.stringify(processedResult));\n\n results[config.c.abi.name] = processedResult;\n stateData[config.c.abi.name] = processedResult;\n } catch (error) {\n this.logger.error(\n `Error executing command for ${config.c.contractAddress}:`,\n error,\n );\n results[config.c.abi.name] = '0';\n Object.assign(stateData, results[config.c.abi.name]); // Flatten the values into stateData\n }\n }\n\n return { results, stateData };\n }\n\n async executeCommand(\n evmConfig: EVMConfig,\n stateData: Record<string, string> = {},\n ): Promise<any> {\n const { results, stateData: newStateData } = await this.executeCommands(\n [evmConfig],\n stateData,\n );\n return {\n result: results[evmConfig.c.abi.name],\n stateData: newStateData,\n };\n }\n\n async readFromMirrorNode(\n command: string,\n from: AccountId,\n to: ContractId,\n ): Promise<any> {\n try {\n const toAddress = to.toSolidityAddress();\n const fromAddress = from.toSolidityAddress();\n const response = await fetch(\n `https://${this.network}.${this.mirrorNodeUrl}`,\n {\n method: 'POST',\n headers: {\n 'Content-Type': 'application/json',\n },\n body: JSON.stringify({\n block: 'latest',\n data: command,\n estimate: false,\n gas: 300_000,\n gasPrice: 100000000,\n from: fromAddress.startsWith('0x')\n ? fromAddress\n : `0x${fromAddress}`,\n to: toAddress?.startsWith('0x') ? toAddress : `0x${toAddress}`,\n value: 0,\n }),\n },\n );\n\n if (!response.ok) {\n throw new Error(`HTTP error! status: ${response.status}`);\n }\n\n return await response.json();\n } catch (error) {\n this.logger.error('Error reading from mirror node:', error);\n return null;\n }\n }\n\n public async clearCache(): Promise<void> {\n await this.cache.clear();\n }\n\n public async clearCacheForContract(\n contractAddress: string,\n functionName: string,\n ): Promise<void> {\n await this.cache.delete(`${contractAddress}-${functionName}`);\n }\n\n public setLogLevel(level: 'debug' | 'info' | 'warn' | 'error'): void {\n this.logger.setLogLevel(level);\n }\n}\n\nfunction formatValue(value: any, type: string): string {\n if (value === null || value === undefined) {\n return '0';\n }\n\n if (value._isBigNumber) {\n return value.toString();\n }\n\n if (type.startsWith('uint') || type.startsWith('int')) {\n return String(value);\n } else if (type === 'bool') {\n return value ? 'true' : 'false';\n } else if (type === 'string') {\n return value;\n } else if (type === 'address') {\n return String(value).toLowerCase();\n } else if (type.endsWith('[]')) {\n return Array.isArray(value) ? value.map(v => String(v)).join(',') : '';\n } else {\n return String(value);\n }\n}\n"],"names":[],"mappings":"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"}
|
|
@@ -1,162 +1,10 @@
|
|
|
1
|
-
|
|
2
|
-
|
|
3
|
-
|
|
4
|
-
|
|
5
|
-
|
|
6
|
-
|
|
7
|
-
this.mirrorNode = new HederaMirrorNode(options.network, options.logger);
|
|
8
|
-
this.defaultCollectorAccountId = options.defaultCollectorAccountId || "";
|
|
9
|
-
}
|
|
10
|
-
/**
|
|
11
|
-
* Static factory method to create a FeeConfigBuilder with a single HBAR fee.
|
|
12
|
-
* @param hbarAmount Amount in HBAR.
|
|
13
|
-
* @param collectorAccountId Optional account ID to collect the fee. If omitted or undefined, defaults to the agent's own account ID during topic creation.
|
|
14
|
-
* @param network Network type ('mainnet' or 'testnet').
|
|
15
|
-
* @param logger Logger instance.
|
|
16
|
-
* @param exemptAccounts Optional array of account IDs exempt from this fee.
|
|
17
|
-
* @returns A configured FeeConfigBuilder instance.
|
|
18
|
-
*/
|
|
19
|
-
static forHbar(hbarAmount, collectorAccountId, network, logger, exemptAccounts = []) {
|
|
20
|
-
const builder = new FeeConfigBuilder({
|
|
21
|
-
network,
|
|
22
|
-
logger,
|
|
23
|
-
defaultCollectorAccountId: collectorAccountId
|
|
24
|
-
});
|
|
25
|
-
return builder.addHbarFee(hbarAmount, collectorAccountId, exemptAccounts);
|
|
26
|
-
}
|
|
27
|
-
/**
|
|
28
|
-
* Static factory method to create a FeeConfigBuilder with a single token fee.
|
|
29
|
-
* Automatically fetches token decimals if not provided.
|
|
30
|
-
* @param tokenAmount Amount of tokens.
|
|
31
|
-
* @param feeTokenId Token ID for the fee.
|
|
32
|
-
* @param collectorAccountId Optional account ID to collect the fee. If omitted or undefined, defaults to the agent's own account ID during topic creation.
|
|
33
|
-
* @param network Network type ('mainnet' or 'testnet').
|
|
34
|
-
* @param logger Logger instance.
|
|
35
|
-
* @param exemptAccounts Optional array of account IDs exempt from this fee.
|
|
36
|
-
* @param decimals Optional decimals for the token (fetched if omitted).
|
|
37
|
-
* @returns A Promise resolving to a configured FeeConfigBuilder instance.
|
|
38
|
-
*/
|
|
39
|
-
static async forToken(tokenAmount, feeTokenId, collectorAccountId, network, logger, exemptAccounts = [], decimals) {
|
|
40
|
-
const builder = new FeeConfigBuilder({
|
|
41
|
-
network,
|
|
42
|
-
logger,
|
|
43
|
-
defaultCollectorAccountId: collectorAccountId
|
|
44
|
-
});
|
|
45
|
-
await builder.addTokenFee(
|
|
46
|
-
tokenAmount,
|
|
47
|
-
feeTokenId,
|
|
48
|
-
collectorAccountId,
|
|
49
|
-
decimals,
|
|
50
|
-
exemptAccounts
|
|
51
|
-
);
|
|
52
|
-
return builder;
|
|
53
|
-
}
|
|
54
|
-
/**
|
|
55
|
-
* Adds an HBAR fee configuration to the builder.
|
|
56
|
-
* Allows chaining multiple fee additions.
|
|
57
|
-
* @param hbarAmount The amount in HBAR (e.g., 0.5).
|
|
58
|
-
* @param collectorAccountId Optional. The account ID to collect this fee. If omitted, defaults to the agent's own account ID during topic creation.
|
|
59
|
-
* @param exemptAccountIds Optional. Accounts specifically exempt from *this* HBAR fee.
|
|
60
|
-
* @returns This FeeConfigBuilder instance for chaining.
|
|
61
|
-
*/
|
|
62
|
-
addHbarFee(hbarAmount, collectorAccountId, exemptAccountIds = []) {
|
|
63
|
-
if (hbarAmount <= 0) {
|
|
64
|
-
throw new Error("HBAR amount must be greater than zero");
|
|
65
|
-
}
|
|
66
|
-
this.customFees.push({
|
|
67
|
-
feeAmount: {
|
|
68
|
-
amount: hbarAmount * 1e8,
|
|
69
|
-
decimals: 0
|
|
70
|
-
},
|
|
71
|
-
feeCollectorAccountId: collectorAccountId || this.defaultCollectorAccountId,
|
|
72
|
-
feeTokenId: void 0,
|
|
73
|
-
exemptAccounts: [...exemptAccountIds],
|
|
74
|
-
type: CustomFeeType.FIXED_FEE
|
|
75
|
-
});
|
|
76
|
-
return this;
|
|
77
|
-
}
|
|
78
|
-
/**
|
|
79
|
-
* Adds a token fee configuration to the builder.
|
|
80
|
-
* Allows chaining multiple fee additions.
|
|
81
|
-
* Fetches token decimals automatically if not provided.
|
|
82
|
-
* @param tokenAmount The amount of the specified token.
|
|
83
|
-
* @param feeTokenId The ID of the token to charge the fee in.
|
|
84
|
-
* @param collectorAccountId Optional. The account ID to collect this fee. If omitted, defaults to the agent's own account ID during topic creation.
|
|
85
|
-
* @param decimals Optional. The number of decimals for the token. If omitted, it will be fetched from the mirror node.
|
|
86
|
-
* @param exemptAccountIds Optional. Accounts specifically exempt from *this* token fee.
|
|
87
|
-
* @returns A Promise resolving to this FeeConfigBuilder instance for chaining.
|
|
88
|
-
*/
|
|
89
|
-
async addTokenFee(tokenAmount, feeTokenId, collectorAccountId, decimals, exemptAccountIds = []) {
|
|
90
|
-
if (tokenAmount <= 0) {
|
|
91
|
-
throw new Error("Token amount must be greater than zero");
|
|
92
|
-
}
|
|
93
|
-
if (!feeTokenId) {
|
|
94
|
-
throw new Error("Fee token ID is required when adding a token fee");
|
|
95
|
-
}
|
|
96
|
-
let finalDecimals = decimals;
|
|
97
|
-
if (finalDecimals === void 0) {
|
|
98
|
-
try {
|
|
99
|
-
const tokenInfo = await this.mirrorNode.getTokenInfo(feeTokenId);
|
|
100
|
-
if (tokenInfo?.decimals) {
|
|
101
|
-
finalDecimals = parseInt(tokenInfo.decimals, 10);
|
|
102
|
-
this.logger.info(
|
|
103
|
-
`Fetched decimals for ${feeTokenId}: ${finalDecimals}`
|
|
104
|
-
);
|
|
105
|
-
} else {
|
|
106
|
-
this.logger.warn(
|
|
107
|
-
`Could not fetch decimals for ${feeTokenId}, defaulting to 0.`
|
|
108
|
-
);
|
|
109
|
-
finalDecimals = 0;
|
|
110
|
-
}
|
|
111
|
-
} catch (error) {
|
|
112
|
-
this.logger.error(
|
|
113
|
-
`Error fetching decimals for ${feeTokenId}, defaulting to 0: ${error}`
|
|
114
|
-
);
|
|
115
|
-
finalDecimals = 0;
|
|
116
|
-
}
|
|
117
|
-
}
|
|
118
|
-
this.customFees.push({
|
|
119
|
-
feeAmount: {
|
|
120
|
-
amount: tokenAmount * 10 ** finalDecimals,
|
|
121
|
-
decimals: finalDecimals
|
|
122
|
-
},
|
|
123
|
-
feeCollectorAccountId: collectorAccountId || this.defaultCollectorAccountId,
|
|
124
|
-
feeTokenId,
|
|
125
|
-
exemptAccounts: [...exemptAccountIds],
|
|
126
|
-
type: CustomFeeType.FIXED_FEE
|
|
127
|
-
});
|
|
128
|
-
return this;
|
|
129
|
-
}
|
|
130
|
-
/**
|
|
131
|
-
* Builds the final TopicFeeConfig object.
|
|
132
|
-
* @returns The TopicFeeConfig containing all added custom fees and a consolidated list of unique exempt accounts.
|
|
133
|
-
* @throws Error if no fees have been added.
|
|
134
|
-
* @throws Error if more than 10 fees have been added.
|
|
135
|
-
*/
|
|
136
|
-
build() {
|
|
137
|
-
if (this.customFees.length === 0) {
|
|
138
|
-
throw new Error(
|
|
139
|
-
"At least one fee must be added using addHbarFee/addTokenFee or created using forHbar/forToken"
|
|
140
|
-
);
|
|
141
|
-
}
|
|
142
|
-
if (this.customFees.length > 10) {
|
|
143
|
-
throw new Error("Maximum of 10 custom fees per topic allowed");
|
|
144
|
-
}
|
|
145
|
-
const allExemptAccounts = /* @__PURE__ */ new Set();
|
|
146
|
-
this.customFees.forEach((fee) => {
|
|
147
|
-
fee.exemptAccounts.forEach((account) => allExemptAccounts.add(account));
|
|
148
|
-
});
|
|
149
|
-
const resolvedCustomFees = this.customFees.map((fee) => ({
|
|
150
|
-
...fee,
|
|
151
|
-
feeCollectorAccountId: fee.feeCollectorAccountId || this.defaultCollectorAccountId
|
|
152
|
-
}));
|
|
153
|
-
return {
|
|
154
|
-
customFees: resolvedCustomFees,
|
|
155
|
-
exemptAccounts: Array.from(allExemptAccounts)
|
|
156
|
-
};
|
|
157
|
-
}
|
|
158
|
-
}
|
|
1
|
+
var CustomFeeType = /* @__PURE__ */ ((CustomFeeType2) => {
|
|
2
|
+
CustomFeeType2["FIXED_FEE"] = "FIXED_FEE";
|
|
3
|
+
CustomFeeType2["FRACTIONAL_FEE"] = "FRACTIONAL_FEE";
|
|
4
|
+
CustomFeeType2["ROYALTY_FEE"] = "ROYALTY_FEE";
|
|
5
|
+
return CustomFeeType2;
|
|
6
|
+
})(CustomFeeType || {});
|
|
159
7
|
export {
|
|
160
|
-
|
|
8
|
+
CustomFeeType
|
|
161
9
|
};
|
|
162
10
|
//# sourceMappingURL=standards-sdk.es140.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"standards-sdk.es140.js","sources":["../../src/fees/fee-config-builder.ts"],"sourcesContent":["import {\n FeeConfigBuilderInterface,\n TokenFeeConfig,\n TopicFeeConfig,\n CustomFeeType,\n} from './types';\nimport { HederaMirrorNode } from '../services/mirror-node';\nimport { Logger } from '../utils/logger';\nimport { NetworkType } from '../utils/types';\n\n/**\n * FeeConfigBuilder provides a fluent interface for creating fee configurations\n * for HCS-10 topics. This makes it easy to configure fees without dealing with\n * the complexity of the underlying fee structure.\n *\n * Example usage:\n *\n * // Super simple one-liner with the factory method\n * const simpleFeeConfig = FeeConfigBuilder.forHbar(5, '0.0.12345', NetworkType.TESTNET, new Logger(), ['0.0.67890']);\n *\n * // With multiple fees:\n * const multipleFeeConfig = new FeeConfigBuilder({\n * network: NetworkType.TESTNET,\n * logger: new Logger(),\n * defaultCollectorAccountId: '0.0.12345',\n * defaultExemptAccountIds: ['0.0.67890']\n * })\n * .withHbarFee(1) // 1 HBAR fee\n * .withTokenFee(10, '0.0.54321') // 10 units of token 0.0.54321\n * .build();\n *\n * With Agent Builder\n * const agent = new AgentBuilder()\n * .setName('Fee Collector Agent')\n * .setDescription('An agent that collects fees')\n * .setInboundTopicType(InboundTopicType.FEE_BASED)\n * .setFeeConfig(FeeConfigBuilder.forHbar(1, '0.0.12345', NetworkType.TESTNET, new Logger(), ['0.0.67890']))\n * .setNetwork('testnet')\n .build();\n\n * Directly with client\n * const client = new HCS10Client(config);\n * const connectionFeeConfig = new FeeConfigBuilder({\n * network: NetworkType.TESTNET,\n * logger: new Logger(),\n * defaultCollectorAccountId: client.getAccountAndSigner().accountId,\n * defaultExemptAccountIds: ['0.0.67890']\n * })\n * .withHbarFee(0.5) // 0.5 HBAR (simple!)\n * .build();\n\n * const result = await client.handleConnectionRequest(\n * inboundTopicId,\n * requestingAccountId,\n * connectionRequestId,\n * connectionFeeConfig\n * );\n*/\nexport interface FeeConfigBuilderOptions {\n network: NetworkType;\n logger: Logger;\n defaultCollectorAccountId?: string;\n}\n\nexport class FeeConfigBuilder implements FeeConfigBuilderInterface {\n private customFees: TokenFeeConfig[] = [];\n private mirrorNode: HederaMirrorNode;\n private logger: Logger;\n private defaultCollectorAccountId: string;\n\n constructor(options: FeeConfigBuilderOptions) {\n this.logger = options.logger;\n this.mirrorNode = new HederaMirrorNode(options.network, options.logger);\n this.defaultCollectorAccountId = options.defaultCollectorAccountId || '';\n }\n\n /**\n * Static factory method to create a FeeConfigBuilder with a single HBAR fee.\n * @param hbarAmount Amount in HBAR.\n * @param collectorAccountId Optional account ID to collect the fee. If omitted or undefined, defaults to the agent's own account ID during topic creation.\n * @param network Network type ('mainnet' or 'testnet').\n * @param logger Logger instance.\n * @param exemptAccounts Optional array of account IDs exempt from this fee.\n * @returns A configured FeeConfigBuilder instance.\n */\n static forHbar(\n hbarAmount: number,\n collectorAccountId: string | undefined,\n network: NetworkType,\n logger: Logger,\n exemptAccounts: string[] = [],\n ): FeeConfigBuilder {\n const builder = new FeeConfigBuilder({\n network,\n logger,\n defaultCollectorAccountId: collectorAccountId,\n });\n return builder.addHbarFee(hbarAmount, collectorAccountId, exemptAccounts);\n }\n\n /**\n * Static factory method to create a FeeConfigBuilder with a single token fee.\n * Automatically fetches token decimals if not provided.\n * @param tokenAmount Amount of tokens.\n * @param feeTokenId Token ID for the fee.\n * @param collectorAccountId Optional account ID to collect the fee. If omitted or undefined, defaults to the agent's own account ID during topic creation.\n * @param network Network type ('mainnet' or 'testnet').\n * @param logger Logger instance.\n * @param exemptAccounts Optional array of account IDs exempt from this fee.\n * @param decimals Optional decimals for the token (fetched if omitted).\n * @returns A Promise resolving to a configured FeeConfigBuilder instance.\n */\n static async forToken(\n tokenAmount: number,\n feeTokenId: string,\n collectorAccountId: string | undefined,\n network: NetworkType,\n logger: Logger,\n exemptAccounts: string[] = [],\n decimals?: number,\n ): Promise<FeeConfigBuilder> {\n const builder = new FeeConfigBuilder({\n network,\n logger,\n defaultCollectorAccountId: collectorAccountId,\n });\n await builder.addTokenFee(\n tokenAmount,\n feeTokenId,\n collectorAccountId,\n decimals,\n exemptAccounts,\n );\n return builder;\n }\n\n /**\n * Adds an HBAR fee configuration to the builder.\n * Allows chaining multiple fee additions.\n * @param hbarAmount The amount in HBAR (e.g., 0.5).\n * @param collectorAccountId Optional. The account ID to collect this fee. If omitted, defaults to the agent's own account ID during topic creation.\n * @param exemptAccountIds Optional. Accounts specifically exempt from *this* HBAR fee.\n * @returns This FeeConfigBuilder instance for chaining.\n */\n addHbarFee(\n hbarAmount: number,\n collectorAccountId?: string,\n exemptAccountIds: string[] = [],\n ): FeeConfigBuilder {\n if (hbarAmount <= 0) {\n throw new Error('HBAR amount must be greater than zero');\n }\n\n this.customFees.push({\n feeAmount: {\n amount: hbarAmount * 100_000_000,\n decimals: 0,\n },\n feeCollectorAccountId:\n collectorAccountId || this.defaultCollectorAccountId,\n feeTokenId: undefined,\n exemptAccounts: [...exemptAccountIds],\n type: CustomFeeType.FIXED_FEE,\n });\n\n return this;\n }\n\n /**\n * Adds a token fee configuration to the builder.\n * Allows chaining multiple fee additions.\n * Fetches token decimals automatically if not provided.\n * @param tokenAmount The amount of the specified token.\n * @param feeTokenId The ID of the token to charge the fee in.\n * @param collectorAccountId Optional. The account ID to collect this fee. If omitted, defaults to the agent's own account ID during topic creation.\n * @param decimals Optional. The number of decimals for the token. If omitted, it will be fetched from the mirror node.\n * @param exemptAccountIds Optional. Accounts specifically exempt from *this* token fee.\n * @returns A Promise resolving to this FeeConfigBuilder instance for chaining.\n */\n async addTokenFee(\n tokenAmount: number,\n feeTokenId: string,\n collectorAccountId?: string,\n decimals?: number,\n exemptAccountIds: string[] = [],\n ): Promise<FeeConfigBuilder> {\n if (tokenAmount <= 0) {\n throw new Error('Token amount must be greater than zero');\n }\n if (!feeTokenId) {\n throw new Error('Fee token ID is required when adding a token fee');\n }\n\n let finalDecimals = decimals;\n if (finalDecimals === undefined) {\n try {\n const tokenInfo = await this.mirrorNode.getTokenInfo(feeTokenId);\n if (tokenInfo?.decimals) {\n finalDecimals = parseInt(tokenInfo.decimals, 10);\n this.logger.info(\n `Fetched decimals for ${feeTokenId}: ${finalDecimals}`,\n );\n } else {\n this.logger.warn(\n `Could not fetch decimals for ${feeTokenId}, defaulting to 0.`,\n );\n finalDecimals = 0;\n }\n } catch (error) {\n this.logger.error(\n `Error fetching decimals for ${feeTokenId}, defaulting to 0: ${error}`,\n );\n finalDecimals = 0;\n }\n }\n\n this.customFees.push({\n feeAmount: {\n amount: tokenAmount * 10 ** finalDecimals,\n decimals: finalDecimals,\n },\n feeCollectorAccountId:\n collectorAccountId || this.defaultCollectorAccountId,\n feeTokenId: feeTokenId,\n exemptAccounts: [...exemptAccountIds],\n type: CustomFeeType.FIXED_FEE,\n });\n\n return this;\n }\n\n /**\n * Builds the final TopicFeeConfig object.\n * @returns The TopicFeeConfig containing all added custom fees and a consolidated list of unique exempt accounts.\n * @throws Error if no fees have been added.\n * @throws Error if more than 10 fees have been added.\n */\n build(): TopicFeeConfig {\n if (this.customFees.length === 0) {\n throw new Error(\n 'At least one fee must be added using addHbarFee/addTokenFee or created using forHbar/forToken',\n );\n }\n\n if (this.customFees.length > 10) {\n throw new Error('Maximum of 10 custom fees per topic allowed');\n }\n\n const allExemptAccounts = new Set<string>();\n this.customFees.forEach(fee => {\n fee.exemptAccounts.forEach(account => allExemptAccounts.add(account));\n });\n\n const resolvedCustomFees = this.customFees.map(fee => ({\n ...fee,\n feeCollectorAccountId:\n fee.feeCollectorAccountId || this.defaultCollectorAccountId,\n }));\n\n return {\n customFees: resolvedCustomFees,\n exemptAccounts: Array.from(allExemptAccounts),\n };\n }\n}\n"],"names":[],"mappings":";;AAgEO,MAAM,iBAAsD;AAAA,EAMjE,YAAY,SAAkC;AAL9C,SAAQ,aAA+B,CAAA;AAMrC,SAAK,SAAS,QAAQ;AACtB,SAAK,aAAa,IAAI,iBAAiB,QAAQ,SAAS,QAAQ,MAAM;AACtE,SAAK,4BAA4B,QAAQ,6BAA6B;AAAA,EACxE;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,EAWA,OAAO,QACL,YACA,oBACA,SACA,QACA,iBAA2B,IACT;AAClB,UAAM,UAAU,IAAI,iBAAiB;AAAA,MACnC;AAAA,MACA;AAAA,MACA,2BAA2B;AAAA,IAAA,CAC5B;AACD,WAAO,QAAQ,WAAW,YAAY,oBAAoB,cAAc;AAAA,EAC1E;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,EAcA,aAAa,SACX,aACA,YACA,oBACA,SACA,QACA,iBAA2B,CAAA,GAC3B,UAC2B;AAC3B,UAAM,UAAU,IAAI,iBAAiB;AAAA,MACnC;AAAA,MACA;AAAA,MACA,2BAA2B;AAAA,IAAA,CAC5B;AACD,UAAM,QAAQ;AAAA,MACZ;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,IAAA;AAEF,WAAO;AAAA,EACT;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,EAUA,WACE,YACA,oBACA,mBAA6B,CAAA,GACX;AAClB,QAAI,cAAc,GAAG;AACnB,YAAM,IAAI,MAAM,uCAAuC;AAAA,IACzD;AAEA,SAAK,WAAW,KAAK;AAAA,MACnB,WAAW;AAAA,QACT,QAAQ,aAAa;AAAA,QACrB,UAAU;AAAA,MAAA;AAAA,MAEZ,uBACE,sBAAsB,KAAK;AAAA,MAC7B,YAAY;AAAA,MACZ,gBAAgB,CAAC,GAAG,gBAAgB;AAAA,MACpC,MAAM,cAAc;AAAA,IAAA,CACrB;AAED,WAAO;AAAA,EACT;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,EAaA,MAAM,YACJ,aACA,YACA,oBACA,UACA,mBAA6B,IACF;AAC3B,QAAI,eAAe,GAAG;AACpB,YAAM,IAAI,MAAM,wCAAwC;AAAA,IAC1D;AACA,QAAI,CAAC,YAAY;AACf,YAAM,IAAI,MAAM,kDAAkD;AAAA,IACpE;AAEA,QAAI,gBAAgB;AACpB,QAAI,kBAAkB,QAAW;AAC/B,UAAI;AACF,cAAM,YAAY,MAAM,KAAK,WAAW,aAAa,UAAU;AAC/D,YAAI,WAAW,UAAU;AACvB,0BAAgB,SAAS,UAAU,UAAU,EAAE;AAC/C,eAAK,OAAO;AAAA,YACV,wBAAwB,UAAU,KAAK,aAAa;AAAA,UAAA;AAAA,QAExD,OAAO;AACL,eAAK,OAAO;AAAA,YACV,gCAAgC,UAAU;AAAA,UAAA;AAE5C,0BAAgB;AAAA,QAClB;AAAA,MACF,SAAS,OAAO;AACd,aAAK,OAAO;AAAA,UACV,+BAA+B,UAAU,sBAAsB,KAAK;AAAA,QAAA;AAEtE,wBAAgB;AAAA,MAClB;AAAA,IACF;AAEA,SAAK,WAAW,KAAK;AAAA,MACnB,WAAW;AAAA,QACT,QAAQ,cAAc,MAAM;AAAA,QAC5B,UAAU;AAAA,MAAA;AAAA,MAEZ,uBACE,sBAAsB,KAAK;AAAA,MAC7B;AAAA,MACA,gBAAgB,CAAC,GAAG,gBAAgB;AAAA,MACpC,MAAM,cAAc;AAAA,IAAA,CACrB;AAED,WAAO;AAAA,EACT;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,EAQA,QAAwB;AACtB,QAAI,KAAK,WAAW,WAAW,GAAG;AAChC,YAAM,IAAI;AAAA,QACR;AAAA,MAAA;AAAA,IAEJ;AAEA,QAAI,KAAK,WAAW,SAAS,IAAI;AAC/B,YAAM,IAAI,MAAM,6CAA6C;AAAA,IAC/D;AAEA,UAAM,wCAAwB,IAAA;AAC9B,SAAK,WAAW,QAAQ,CAAA,QAAO;AAC7B,UAAI,eAAe,QAAQ,CAAA,YAAW,kBAAkB,IAAI,OAAO,CAAC;AAAA,IACtE,CAAC;AAED,UAAM,qBAAqB,KAAK,WAAW,IAAI,CAAA,SAAQ;AAAA,MACrD,GAAG;AAAA,MACH,uBACE,IAAI,yBAAyB,KAAK;AAAA,IAAA,EACpC;AAEF,WAAO;AAAA,MACL,YAAY;AAAA,MACZ,gBAAgB,MAAM,KAAK,iBAAiB;AAAA,IAAA;AAAA,EAEhD;AACF;"}
|
|
1
|
+
{"version":3,"file":"standards-sdk.es140.js","sources":["../../src/fees/types.ts"],"sourcesContent":["export interface FeeConfigBuilderInterface {\n addHbarFee(\n hbarAmount: number,\n collectorAccountId?: string,\n exemptAccountIds?: string[],\n ): FeeConfigBuilderInterface;\n addTokenFee(\n tokenAmount: number,\n feeTokenId: string,\n collectorAccountId?: string,\n decimals?: number,\n exemptAccountIds?: string[],\n ): Promise<FeeConfigBuilderInterface>;\n build(): TopicFeeConfig;\n}\n\nexport enum CustomFeeType {\n FIXED_FEE = 'FIXED_FEE',\n FRACTIONAL_FEE = 'FRACTIONAL_FEE',\n ROYALTY_FEE = 'ROYALTY_FEE',\n}\n\nexport type FeeAmount = {\n amount: number;\n decimals?: number;\n};\n\nexport interface TokenFeeConfig {\n feeAmount: FeeAmount;\n feeCollectorAccountId: string;\n feeTokenId?: string;\n exemptAccounts: string[];\n type: CustomFeeType;\n}\n\nexport interface TopicFeeConfig {\n customFees: TokenFeeConfig[];\n exemptAccounts: string[];\n}\n"],"names":["CustomFeeType"],"mappings":"AAgBO,IAAK,kCAAAA,mBAAL;AACLA,iBAAA,WAAA,IAAY;AACZA,iBAAA,gBAAA,IAAiB;AACjBA,iBAAA,aAAA,IAAc;AAHJ,SAAAA;AAAA,GAAA,iBAAA,CAAA,CAAA;"}
|
|
@@ -1,10 +1,89 @@
|
|
|
1
|
-
|
|
2
|
-
|
|
3
|
-
|
|
4
|
-
|
|
5
|
-
|
|
6
|
-
|
|
1
|
+
import { Logger } from "./standards-sdk.es105.js";
|
|
2
|
+
class ContentResolverRegistryImpl {
|
|
3
|
+
constructor() {
|
|
4
|
+
this.resolver = null;
|
|
5
|
+
this.onUnavailableCallbacks = [];
|
|
6
|
+
this.logger = Logger.getInstance({ module: "ContentResolverRegistry" });
|
|
7
|
+
}
|
|
8
|
+
static getInstance() {
|
|
9
|
+
if (!ContentResolverRegistryImpl._instance) {
|
|
10
|
+
ContentResolverRegistryImpl._instance = new ContentResolverRegistryImpl();
|
|
11
|
+
}
|
|
12
|
+
return ContentResolverRegistryImpl._instance;
|
|
13
|
+
}
|
|
14
|
+
/**
|
|
15
|
+
* Register a content resolver (typically called by ContentStoreManager)
|
|
16
|
+
*/
|
|
17
|
+
register(resolver) {
|
|
18
|
+
if (this.resolver) {
|
|
19
|
+
this.logger.warn("Resolver already registered, replacing existing");
|
|
20
|
+
}
|
|
21
|
+
this.resolver = resolver;
|
|
22
|
+
this.logger.info("Content resolver registered");
|
|
23
|
+
}
|
|
24
|
+
/**
|
|
25
|
+
* Get the registered content resolver
|
|
26
|
+
*/
|
|
27
|
+
getResolver() {
|
|
28
|
+
return this.resolver;
|
|
29
|
+
}
|
|
30
|
+
/**
|
|
31
|
+
* Check if a resolver is available
|
|
32
|
+
*/
|
|
33
|
+
isAvailable() {
|
|
34
|
+
return this.resolver !== null;
|
|
35
|
+
}
|
|
36
|
+
/**
|
|
37
|
+
* Unregister the current resolver
|
|
38
|
+
*/
|
|
39
|
+
unregister() {
|
|
40
|
+
if (this.resolver) {
|
|
41
|
+
this.resolver = null;
|
|
42
|
+
this.logger.info("Content resolver unregistered");
|
|
43
|
+
this.onUnavailableCallbacks.forEach((callback) => {
|
|
44
|
+
try {
|
|
45
|
+
callback();
|
|
46
|
+
} catch (error) {
|
|
47
|
+
this.logger.error("Error in unavailable callback:", error);
|
|
48
|
+
}
|
|
49
|
+
});
|
|
50
|
+
}
|
|
51
|
+
}
|
|
52
|
+
/**
|
|
53
|
+
* Register callback for when resolver becomes unavailable
|
|
54
|
+
*/
|
|
55
|
+
onUnavailable(callback) {
|
|
56
|
+
this.onUnavailableCallbacks.push(callback);
|
|
57
|
+
}
|
|
58
|
+
/**
|
|
59
|
+
* Remove unavailable callback
|
|
60
|
+
*/
|
|
61
|
+
offUnavailable(callback) {
|
|
62
|
+
const index = this.onUnavailableCallbacks.indexOf(callback);
|
|
63
|
+
if (index !== -1) {
|
|
64
|
+
this.onUnavailableCallbacks.splice(index, 1);
|
|
65
|
+
}
|
|
66
|
+
}
|
|
67
|
+
/**
|
|
68
|
+
* Execute operation with resolver or fallback
|
|
69
|
+
*/
|
|
70
|
+
async withResolver(operation, fallback) {
|
|
71
|
+
if (this.resolver) {
|
|
72
|
+
try {
|
|
73
|
+
return await operation(this.resolver);
|
|
74
|
+
} catch (error) {
|
|
75
|
+
this.logger.warn("Resolver operation failed, using fallback:", error);
|
|
76
|
+
return await fallback();
|
|
77
|
+
}
|
|
78
|
+
} else {
|
|
79
|
+
this.logger.warn("No resolver available, using fallback");
|
|
80
|
+
return await fallback();
|
|
81
|
+
}
|
|
82
|
+
}
|
|
83
|
+
}
|
|
84
|
+
const ContentResolverRegistry = ContentResolverRegistryImpl.getInstance();
|
|
7
85
|
export {
|
|
8
|
-
|
|
86
|
+
ContentResolverRegistry,
|
|
87
|
+
ContentResolverRegistryImpl
|
|
9
88
|
};
|
|
10
89
|
//# sourceMappingURL=standards-sdk.es141.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"standards-sdk.es141.js","sources":["../../src/
|
|
1
|
+
{"version":3,"file":"standards-sdk.es141.js","sources":["../../src/content-store/ContentResolverRegistry.ts"],"sourcesContent":["/**\n * Content Resolver Registry\n *\n * Dependency injection registry for content resolvers.\n * Allows tools to access content resolution without circular dependencies.\n */\n\nimport type { ContentResolverInterface } from './types';\nimport { Logger } from '../utils/logger';\n\nexport class ContentResolverRegistryImpl {\n private static _instance: ContentResolverRegistryImpl;\n private resolver: ContentResolverInterface | null = null;\n private onUnavailableCallbacks: (() => void)[] = [];\n private logger = Logger.getInstance({ module: 'ContentResolverRegistry' });\n\n static getInstance(): ContentResolverRegistryImpl {\n if (!ContentResolverRegistryImpl._instance) {\n ContentResolverRegistryImpl._instance = new ContentResolverRegistryImpl();\n }\n return ContentResolverRegistryImpl._instance;\n }\n\n /**\n * Register a content resolver (typically called by ContentStoreManager)\n */\n register(resolver: ContentResolverInterface): void {\n if (this.resolver) {\n this.logger.warn('Resolver already registered, replacing existing');\n }\n this.resolver = resolver;\n this.logger.info('Content resolver registered');\n }\n\n /**\n * Get the registered content resolver\n */\n getResolver(): ContentResolverInterface | null {\n return this.resolver;\n }\n\n /**\n * Check if a resolver is available\n */\n isAvailable(): boolean {\n return this.resolver !== null;\n }\n\n /**\n * Unregister the current resolver\n */\n unregister(): void {\n if (this.resolver) {\n this.resolver = null;\n this.logger.info('Content resolver unregistered');\n this.onUnavailableCallbacks.forEach(callback => {\n try {\n callback();\n } catch (error) {\n this.logger.error('Error in unavailable callback:', error);\n }\n });\n }\n }\n\n /**\n * Register callback for when resolver becomes unavailable\n */\n onUnavailable(callback: () => void): void {\n this.onUnavailableCallbacks.push(callback);\n }\n\n /**\n * Remove unavailable callback\n */\n offUnavailable(callback: () => void): void {\n const index = this.onUnavailableCallbacks.indexOf(callback);\n if (index !== -1) {\n this.onUnavailableCallbacks.splice(index, 1);\n }\n }\n\n /**\n * Execute operation with resolver or fallback\n */\n async withResolver<T>(\n operation: (resolver: ContentResolverInterface) => Promise<T>,\n fallback: () => Promise<T>,\n ): Promise<T> {\n if (this.resolver) {\n try {\n return await operation(this.resolver);\n } catch (error) {\n this.logger.warn('Resolver operation failed, using fallback:', error);\n return await fallback();\n }\n } else {\n this.logger.warn('No resolver available, using fallback');\n return await fallback();\n }\n }\n}\n\nexport const ContentResolverRegistry =\n ContentResolverRegistryImpl.getInstance();\n"],"names":[],"mappings":";AAUO,MAAM,4BAA4B;AAAA,EAAlC,cAAA;AAEL,SAAQ,WAA4C;AACpD,SAAQ,yBAAyC,CAAA;AACjD,SAAQ,SAAS,OAAO,YAAY,EAAE,QAAQ,2BAA2B;AAAA,EAAA;AAAA,EAEzE,OAAO,cAA2C;AAChD,QAAI,CAAC,4BAA4B,WAAW;AAC1C,kCAA4B,YAAY,IAAI,4BAAA;AAAA,IAC9C;AACA,WAAO,4BAA4B;AAAA,EACrC;AAAA;AAAA;AAAA;AAAA,EAKA,SAAS,UAA0C;AACjD,QAAI,KAAK,UAAU;AACjB,WAAK,OAAO,KAAK,iDAAiD;AAAA,IACpE;AACA,SAAK,WAAW;AAChB,SAAK,OAAO,KAAK,6BAA6B;AAAA,EAChD;AAAA;AAAA;AAAA;AAAA,EAKA,cAA+C;AAC7C,WAAO,KAAK;AAAA,EACd;AAAA;AAAA;AAAA;AAAA,EAKA,cAAuB;AACrB,WAAO,KAAK,aAAa;AAAA,EAC3B;AAAA;AAAA;AAAA;AAAA,EAKA,aAAmB;AACjB,QAAI,KAAK,UAAU;AACjB,WAAK,WAAW;AAChB,WAAK,OAAO,KAAK,+BAA+B;AAChD,WAAK,uBAAuB,QAAQ,CAAA,aAAY;AAC9C,YAAI;AACF,mBAAA;AAAA,QACF,SAAS,OAAO;AACd,eAAK,OAAO,MAAM,kCAAkC,KAAK;AAAA,QAC3D;AAAA,MACF,CAAC;AAAA,IACH;AAAA,EACF;AAAA;AAAA;AAAA;AAAA,EAKA,cAAc,UAA4B;AACxC,SAAK,uBAAuB,KAAK,QAAQ;AAAA,EAC3C;AAAA;AAAA;AAAA;AAAA,EAKA,eAAe,UAA4B;AACzC,UAAM,QAAQ,KAAK,uBAAuB,QAAQ,QAAQ;AAC1D,QAAI,UAAU,IAAI;AAChB,WAAK,uBAAuB,OAAO,OAAO,CAAC;AAAA,IAC7C;AAAA,EACF;AAAA;AAAA;AAAA;AAAA,EAKA,MAAM,aACJ,WACA,UACY;AACZ,QAAI,KAAK,UAAU;AACjB,UAAI;AACF,eAAO,MAAM,UAAU,KAAK,QAAQ;AAAA,MACtC,SAAS,OAAO;AACd,aAAK,OAAO,KAAK,8CAA8C,KAAK;AACpE,eAAO,MAAM,SAAA;AAAA,MACf;AAAA,IACF,OAAO;AACL,WAAK,OAAO,KAAK,uCAAuC;AACxD,aAAO,MAAM,SAAA;AAAA,IACf;AAAA,EACF;AACF;AAEO,MAAM,0BACX,4BAA4B,YAAA;"}
|
|
@@ -1,89 +1,68 @@
|
|
|
1
|
-
import { Logger } from "./standards-sdk.
|
|
2
|
-
|
|
1
|
+
import { Logger } from "./standards-sdk.es105.js";
|
|
2
|
+
const REFERENCE_THRESHOLD = 50 * 1024;
|
|
3
|
+
class ContentStoreServiceImpl {
|
|
3
4
|
constructor() {
|
|
4
|
-
this.
|
|
5
|
-
this.
|
|
6
|
-
this.logger = Logger.getInstance({ module: "ContentResolverRegistry" });
|
|
5
|
+
this.contentStore = null;
|
|
6
|
+
this.logger = Logger.getInstance({ module: "ContentStoreService" });
|
|
7
7
|
}
|
|
8
8
|
static getInstance() {
|
|
9
|
-
if (!
|
|
10
|
-
|
|
9
|
+
if (!ContentStoreServiceImpl._instance) {
|
|
10
|
+
ContentStoreServiceImpl._instance = new ContentStoreServiceImpl();
|
|
11
11
|
}
|
|
12
|
-
return
|
|
12
|
+
return ContentStoreServiceImpl._instance;
|
|
13
13
|
}
|
|
14
14
|
/**
|
|
15
|
-
*
|
|
15
|
+
* Set the content store instance
|
|
16
16
|
*/
|
|
17
|
-
|
|
18
|
-
if (this.
|
|
19
|
-
this.logger.warn("
|
|
17
|
+
async setInstance(store) {
|
|
18
|
+
if (this.contentStore) {
|
|
19
|
+
this.logger.warn("Content store already set, replacing");
|
|
20
20
|
}
|
|
21
|
-
this.
|
|
22
|
-
this.logger.info("Content
|
|
21
|
+
this.contentStore = store;
|
|
22
|
+
this.logger.info("Content store instance set");
|
|
23
23
|
}
|
|
24
24
|
/**
|
|
25
|
-
* Get the
|
|
25
|
+
* Get the content store instance
|
|
26
26
|
*/
|
|
27
|
-
|
|
28
|
-
return this.
|
|
27
|
+
getInstance() {
|
|
28
|
+
return this.contentStore;
|
|
29
29
|
}
|
|
30
30
|
/**
|
|
31
|
-
*
|
|
31
|
+
* Clear the content store instance
|
|
32
32
|
*/
|
|
33
|
-
|
|
34
|
-
|
|
33
|
+
dispose() {
|
|
34
|
+
this.contentStore = null;
|
|
35
|
+
this.logger.info("Content store disposed");
|
|
35
36
|
}
|
|
36
37
|
/**
|
|
37
|
-
*
|
|
38
|
+
* Check if content store is available
|
|
38
39
|
*/
|
|
39
|
-
|
|
40
|
-
|
|
41
|
-
this.resolver = null;
|
|
42
|
-
this.logger.info("Content resolver unregistered");
|
|
43
|
-
this.onUnavailableCallbacks.forEach((callback) => {
|
|
44
|
-
try {
|
|
45
|
-
callback();
|
|
46
|
-
} catch (error) {
|
|
47
|
-
this.logger.error("Error in unavailable callback:", error);
|
|
48
|
-
}
|
|
49
|
-
});
|
|
50
|
-
}
|
|
51
|
-
}
|
|
52
|
-
/**
|
|
53
|
-
* Register callback for when resolver becomes unavailable
|
|
54
|
-
*/
|
|
55
|
-
onUnavailable(callback) {
|
|
56
|
-
this.onUnavailableCallbacks.push(callback);
|
|
40
|
+
isAvailable() {
|
|
41
|
+
return this.contentStore !== null;
|
|
57
42
|
}
|
|
58
|
-
|
|
59
|
-
|
|
60
|
-
|
|
61
|
-
|
|
62
|
-
|
|
63
|
-
|
|
64
|
-
this.onUnavailableCallbacks.splice(index, 1);
|
|
65
|
-
}
|
|
43
|
+
}
|
|
44
|
+
function extractReferenceId(input) {
|
|
45
|
+
const trimmed = input.trim();
|
|
46
|
+
const exactMatch = trimmed.match(/^content-ref:([a-f0-9]+)$/);
|
|
47
|
+
if (exactMatch) {
|
|
48
|
+
return exactMatch[1];
|
|
66
49
|
}
|
|
67
|
-
|
|
68
|
-
|
|
69
|
-
|
|
70
|
-
async withResolver(operation, fallback) {
|
|
71
|
-
if (this.resolver) {
|
|
72
|
-
try {
|
|
73
|
-
return await operation(this.resolver);
|
|
74
|
-
} catch (error) {
|
|
75
|
-
this.logger.warn("Resolver operation failed, using fallback:", error);
|
|
76
|
-
return await fallback();
|
|
77
|
-
}
|
|
78
|
-
} else {
|
|
79
|
-
this.logger.warn("No resolver available, using fallback");
|
|
80
|
-
return await fallback();
|
|
81
|
-
}
|
|
50
|
+
const embeddedMatch = trimmed.match(/content-ref:([a-f0-9]+)/);
|
|
51
|
+
if (embeddedMatch) {
|
|
52
|
+
return embeddedMatch[1];
|
|
82
53
|
}
|
|
54
|
+
return null;
|
|
55
|
+
}
|
|
56
|
+
function shouldUseReference(content) {
|
|
57
|
+
const size = typeof content === "string" ? Buffer.byteLength(content, "utf8") : content.length;
|
|
58
|
+
return size > REFERENCE_THRESHOLD;
|
|
83
59
|
}
|
|
84
|
-
const
|
|
60
|
+
const ContentStoreService = ContentStoreServiceImpl.getInstance();
|
|
85
61
|
export {
|
|
86
|
-
|
|
87
|
-
|
|
62
|
+
ContentStoreService,
|
|
63
|
+
ContentStoreServiceImpl,
|
|
64
|
+
REFERENCE_THRESHOLD,
|
|
65
|
+
extractReferenceId,
|
|
66
|
+
shouldUseReference
|
|
88
67
|
};
|
|
89
68
|
//# sourceMappingURL=standards-sdk.es142.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"standards-sdk.es142.js","sources":["../../src/content-store/
|
|
1
|
+
{"version":3,"file":"standards-sdk.es142.js","sources":["../../src/content-store/ContentStoreService.ts"],"sourcesContent":["/**\n * Content Store Service\n *\n * Provides utility functions for content storage and reference handling.\n */\n\nimport type { ContentStoreInterface } from './types';\nimport { Logger } from '../utils/logger';\n\n/**\n * Maximum content size before using references (50KB)\n */\nexport const REFERENCE_THRESHOLD = 50 * 1024;\n\n/**\n * Content store service for managing large content\n */\nexport class ContentStoreServiceImpl {\n private static _instance: ContentStoreServiceImpl;\n private contentStore: ContentStoreInterface | null = null;\n private logger = Logger.getInstance({ module: 'ContentStoreService' });\n\n static getInstance(): ContentStoreServiceImpl {\n if (!ContentStoreServiceImpl._instance) {\n ContentStoreServiceImpl._instance = new ContentStoreServiceImpl();\n }\n return ContentStoreServiceImpl._instance;\n }\n\n /**\n * Set the content store instance\n */\n async setInstance(store: ContentStoreInterface): Promise<void> {\n if (this.contentStore) {\n this.logger.warn('Content store already set, replacing');\n }\n this.contentStore = store;\n this.logger.info('Content store instance set');\n }\n\n /**\n * Get the content store instance\n */\n getInstance(): ContentStoreInterface | null {\n return this.contentStore;\n }\n\n /**\n * Clear the content store instance\n */\n dispose(): void {\n this.contentStore = null;\n this.logger.info('Content store disposed');\n }\n\n /**\n * Check if content store is available\n */\n isAvailable(): boolean {\n return this.contentStore !== null;\n }\n}\n\n/**\n * Extract reference ID from input string\n */\nexport function extractReferenceId(input: string): string | null {\n const trimmed = input.trim();\n\n const exactMatch = trimmed.match(/^content-ref:([a-f0-9]+)$/);\n if (exactMatch) {\n return exactMatch[1];\n }\n\n const embeddedMatch = trimmed.match(/content-ref:([a-f0-9]+)/);\n if (embeddedMatch) {\n return embeddedMatch[1];\n }\n\n return null;\n}\n\n/**\n * Check if content should use reference based on size\n */\nexport function shouldUseReference(content: string | Buffer): boolean {\n const size =\n typeof content === 'string'\n ? Buffer.byteLength(content, 'utf8')\n : content.length;\n\n return size > REFERENCE_THRESHOLD;\n}\n\nexport const ContentStoreService = ContentStoreServiceImpl.getInstance();\n"],"names":[],"mappings":";AAYO,MAAM,sBAAsB,KAAK;AAKjC,MAAM,wBAAwB;AAAA,EAA9B,cAAA;AAEL,SAAQ,eAA6C;AACrD,SAAQ,SAAS,OAAO,YAAY,EAAE,QAAQ,uBAAuB;AAAA,EAAA;AAAA,EAErE,OAAO,cAAuC;AAC5C,QAAI,CAAC,wBAAwB,WAAW;AACtC,8BAAwB,YAAY,IAAI,wBAAA;AAAA,IAC1C;AACA,WAAO,wBAAwB;AAAA,EACjC;AAAA;AAAA;AAAA;AAAA,EAKA,MAAM,YAAY,OAA6C;AAC7D,QAAI,KAAK,cAAc;AACrB,WAAK,OAAO,KAAK,sCAAsC;AAAA,IACzD;AACA,SAAK,eAAe;AACpB,SAAK,OAAO,KAAK,4BAA4B;AAAA,EAC/C;AAAA;AAAA;AAAA;AAAA,EAKA,cAA4C;AAC1C,WAAO,KAAK;AAAA,EACd;AAAA;AAAA;AAAA;AAAA,EAKA,UAAgB;AACd,SAAK,eAAe;AACpB,SAAK,OAAO,KAAK,wBAAwB;AAAA,EAC3C;AAAA;AAAA;AAAA;AAAA,EAKA,cAAuB;AACrB,WAAO,KAAK,iBAAiB;AAAA,EAC/B;AACF;AAKO,SAAS,mBAAmB,OAA8B;AAC/D,QAAM,UAAU,MAAM,KAAA;AAEtB,QAAM,aAAa,QAAQ,MAAM,2BAA2B;AAC5D,MAAI,YAAY;AACd,WAAO,WAAW,CAAC;AAAA,EACrB;AAEA,QAAM,gBAAgB,QAAQ,MAAM,yBAAyB;AAC7D,MAAI,eAAe;AACjB,WAAO,cAAc,CAAC;AAAA,EACxB;AAEA,SAAO;AACT;AAKO,SAAS,mBAAmB,SAAmC;AACpE,QAAM,OACJ,OAAO,YAAY,WACf,OAAO,WAAW,SAAS,MAAM,IACjC,QAAQ;AAEd,SAAO,OAAO;AAChB;AAEO,MAAM,sBAAsB,wBAAwB,YAAA;"}
|
|
@@ -1,68 +1,33 @@
|
|
|
1
|
-
import {
|
|
2
|
-
|
|
3
|
-
|
|
4
|
-
|
|
5
|
-
|
|
6
|
-
|
|
7
|
-
|
|
8
|
-
static getInstance() {
|
|
9
|
-
if (!ContentStoreServiceImpl._instance) {
|
|
10
|
-
ContentStoreServiceImpl._instance = new ContentStoreServiceImpl();
|
|
11
|
-
}
|
|
12
|
-
return ContentStoreServiceImpl._instance;
|
|
13
|
-
}
|
|
14
|
-
/**
|
|
15
|
-
* Set the content store instance
|
|
16
|
-
*/
|
|
17
|
-
async setInstance(store) {
|
|
18
|
-
if (this.contentStore) {
|
|
19
|
-
this.logger.warn("Content store already set, replacing");
|
|
20
|
-
}
|
|
21
|
-
this.contentStore = store;
|
|
22
|
-
this.logger.info("Content store instance set");
|
|
23
|
-
}
|
|
24
|
-
/**
|
|
25
|
-
* Get the content store instance
|
|
26
|
-
*/
|
|
27
|
-
getInstance() {
|
|
28
|
-
return this.contentStore;
|
|
29
|
-
}
|
|
30
|
-
/**
|
|
31
|
-
* Clear the content store instance
|
|
32
|
-
*/
|
|
33
|
-
dispose() {
|
|
34
|
-
this.contentStore = null;
|
|
35
|
-
this.logger.info("Content store disposed");
|
|
36
|
-
}
|
|
37
|
-
/**
|
|
38
|
-
* Check if content store is available
|
|
39
|
-
*/
|
|
40
|
-
isAvailable() {
|
|
41
|
-
return this.contentStore !== null;
|
|
42
|
-
}
|
|
43
|
-
}
|
|
44
|
-
function extractReferenceId(input) {
|
|
45
|
-
const trimmed = input.trim();
|
|
46
|
-
const exactMatch = trimmed.match(/^content-ref:([a-f0-9]+)$/);
|
|
47
|
-
if (exactMatch) {
|
|
48
|
-
return exactMatch[1];
|
|
49
|
-
}
|
|
50
|
-
const embeddedMatch = trimmed.match(/content-ref:([a-f0-9]+)/);
|
|
51
|
-
if (embeddedMatch) {
|
|
52
|
-
return embeddedMatch[1];
|
|
53
|
-
}
|
|
54
|
-
return null;
|
|
55
|
-
}
|
|
56
|
-
function shouldUseReference(content) {
|
|
57
|
-
const size = typeof content === "string" ? Buffer.byteLength(content, "utf8") : content.length;
|
|
58
|
-
return size > REFERENCE_THRESHOLD;
|
|
59
|
-
}
|
|
60
|
-
const ContentStoreService = ContentStoreServiceImpl.getInstance();
|
|
1
|
+
import { HCS10BaseClient, HCS10Cache, Hcs10MemoType } from "./standards-sdk.es16.js";
|
|
2
|
+
import { AccountCreationError, ConnectionConfirmationError, PayloadSizeError, TopicCreationError } from "./standards-sdk.es17.js";
|
|
3
|
+
import { HCS10Client } from "./standards-sdk.es18.js";
|
|
4
|
+
import { BrowserHCSClient } from "./standards-sdk.es19.js";
|
|
5
|
+
import { Registration } from "./standards-sdk.es20.js";
|
|
6
|
+
import { ConnectionsManager } from "./standards-sdk.es21.js";
|
|
7
|
+
import { buildHcs10ConfirmConnectionTx, buildHcs10CreateConnectionTopicTx, buildHcs10CreateInboundTopicTx, buildHcs10CreateOutboundTopicTx, buildHcs10CreateRegistryTopicTx, buildHcs10OutboundConnectionCreatedRecordTx, buildHcs10OutboundConnectionRequestRecordTx, buildHcs10RegistryDeleteTx, buildHcs10RegistryMigrateTx, buildHcs10RegistryRegisterTx, buildHcs10SendMessageTx, buildHcs10SubmitConnectionRequestTx } from "./standards-sdk.es22.js";
|
|
61
8
|
export {
|
|
62
|
-
|
|
63
|
-
|
|
64
|
-
|
|
65
|
-
|
|
66
|
-
|
|
9
|
+
AccountCreationError,
|
|
10
|
+
BrowserHCSClient,
|
|
11
|
+
ConnectionConfirmationError,
|
|
12
|
+
ConnectionsManager,
|
|
13
|
+
HCS10BaseClient,
|
|
14
|
+
HCS10Cache,
|
|
15
|
+
HCS10Client,
|
|
16
|
+
Hcs10MemoType,
|
|
17
|
+
PayloadSizeError,
|
|
18
|
+
Registration,
|
|
19
|
+
TopicCreationError,
|
|
20
|
+
buildHcs10ConfirmConnectionTx,
|
|
21
|
+
buildHcs10CreateConnectionTopicTx,
|
|
22
|
+
buildHcs10CreateInboundTopicTx,
|
|
23
|
+
buildHcs10CreateOutboundTopicTx,
|
|
24
|
+
buildHcs10CreateRegistryTopicTx,
|
|
25
|
+
buildHcs10OutboundConnectionCreatedRecordTx,
|
|
26
|
+
buildHcs10OutboundConnectionRequestRecordTx,
|
|
27
|
+
buildHcs10RegistryDeleteTx,
|
|
28
|
+
buildHcs10RegistryMigrateTx,
|
|
29
|
+
buildHcs10RegistryRegisterTx,
|
|
30
|
+
buildHcs10SendMessageTx,
|
|
31
|
+
buildHcs10SubmitConnectionRequestTx
|
|
67
32
|
};
|
|
68
33
|
//# sourceMappingURL=standards-sdk.es143.js.map
|