@hiero-ledger/sdk 2.80.0 → 2.81.0-beta.1

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.
Files changed (182) hide show
  1. package/README.md +34 -7
  2. package/dist/umd.js +2213 -318
  3. package/dist/umd.js.map +1 -0
  4. package/dist/umd.min.js +6 -5
  5. package/dist/umd.min.js.map +1 -0
  6. package/lib/Executable.cjs +7 -4
  7. package/lib/Executable.js +1 -1
  8. package/lib/Executable.js.map +1 -1
  9. package/lib/PublicKey.cjs +45 -26
  10. package/lib/PublicKey.d.ts +12 -0
  11. package/lib/PublicKey.js +1 -1
  12. package/lib/PublicKey.js.map +1 -1
  13. package/lib/RequestType.cjs +19 -1
  14. package/lib/RequestType.d.ts +2 -0
  15. package/lib/RequestType.js +1 -1
  16. package/lib/RequestType.js.map +1 -1
  17. package/lib/Status.cjs +203 -252
  18. package/lib/Status.d.ts +8 -6
  19. package/lib/Status.js +1 -1
  20. package/lib/Status.js.map +1 -1
  21. package/lib/Transfer.cjs +25 -2
  22. package/lib/Transfer.d.ts +4 -0
  23. package/lib/Transfer.js +1 -1
  24. package/lib/Transfer.js.map +1 -1
  25. package/lib/account/AccountCreateTransaction.cjs +38 -0
  26. package/lib/account/AccountCreateTransaction.d.ts +21 -0
  27. package/lib/account/AccountCreateTransaction.js +1 -1
  28. package/lib/account/AccountCreateTransaction.js.map +1 -1
  29. package/lib/account/AccountUpdateTransaction.cjs +74 -1
  30. package/lib/account/AccountUpdateTransaction.d.ts +43 -0
  31. package/lib/account/AccountUpdateTransaction.js +1 -1
  32. package/lib/account/AccountUpdateTransaction.js.map +1 -1
  33. package/lib/account/TransferTransaction.cjs +57 -9
  34. package/lib/account/TransferTransaction.d.ts +31 -1
  35. package/lib/account/TransferTransaction.js +1 -1
  36. package/lib/account/TransferTransaction.js.map +1 -1
  37. package/lib/browser.js +1 -1
  38. package/lib/client/Client.cjs +38 -0
  39. package/lib/client/Client.d.ts +30 -0
  40. package/lib/client/Client.js +1 -1
  41. package/lib/client/Client.js.map +1 -1
  42. package/lib/client/addressbooks/mainnet.cjs +1 -1
  43. package/lib/client/addressbooks/mainnet.d.ts +1 -1
  44. package/lib/client/addressbooks/mainnet.js +1 -1
  45. package/lib/client/addressbooks/mainnet.js.map +1 -1
  46. package/lib/client/addressbooks/previewnet.cjs +1 -1
  47. package/lib/client/addressbooks/previewnet.d.ts +1 -1
  48. package/lib/client/addressbooks/previewnet.js +1 -1
  49. package/lib/client/addressbooks/previewnet.js.map +1 -1
  50. package/lib/client/addressbooks/testnet.cjs +1 -1
  51. package/lib/client/addressbooks/testnet.d.ts +1 -1
  52. package/lib/client/addressbooks/testnet.js +1 -1
  53. package/lib/client/addressbooks/testnet.js.map +1 -1
  54. package/lib/contract/ContractCreateTransaction.cjs +37 -1
  55. package/lib/contract/ContractCreateTransaction.d.ts +21 -0
  56. package/lib/contract/ContractCreateTransaction.js +1 -1
  57. package/lib/contract/ContractCreateTransaction.js.map +1 -1
  58. package/lib/contract/ContractUpdateTransaction.cjs +74 -1
  59. package/lib/contract/ContractUpdateTransaction.d.ts +43 -0
  60. package/lib/contract/ContractUpdateTransaction.js +1 -1
  61. package/lib/contract/ContractUpdateTransaction.js.map +1 -1
  62. package/lib/exports.cjs +103 -0
  63. package/lib/exports.d.ts +13 -0
  64. package/lib/exports.js +1 -1
  65. package/lib/exports.js.map +1 -1
  66. package/lib/hooks/EvmHook.cjs +84 -0
  67. package/lib/hooks/EvmHook.d.ts +51 -0
  68. package/lib/hooks/EvmHook.js +2 -0
  69. package/lib/hooks/EvmHook.js.map +1 -0
  70. package/lib/hooks/EvmHookCall.cjs +103 -0
  71. package/lib/hooks/EvmHookCall.d.ts +69 -0
  72. package/lib/hooks/EvmHookCall.js +2 -0
  73. package/lib/hooks/EvmHookCall.js.map +1 -0
  74. package/lib/hooks/EvmHookMappingEntry.cjs +135 -0
  75. package/lib/hooks/EvmHookMappingEntry.d.ts +84 -0
  76. package/lib/hooks/EvmHookMappingEntry.js +2 -0
  77. package/lib/hooks/EvmHookMappingEntry.js.map +1 -0
  78. package/lib/hooks/EvmHookStorageUpdate.cjs +238 -0
  79. package/lib/hooks/EvmHookStorageUpdate.d.ts +144 -0
  80. package/lib/hooks/EvmHookStorageUpdate.js +2 -0
  81. package/lib/hooks/EvmHookStorageUpdate.js.map +1 -0
  82. package/lib/hooks/FungibleHookCall.cjs +67 -0
  83. package/lib/hooks/FungibleHookCall.d.ts +50 -0
  84. package/lib/hooks/FungibleHookCall.js +2 -0
  85. package/lib/hooks/FungibleHookCall.js.map +1 -0
  86. package/lib/hooks/FungibleHookType.cjs +11 -0
  87. package/lib/hooks/FungibleHookType.d.ts +5 -0
  88. package/lib/hooks/FungibleHookType.js +2 -0
  89. package/lib/hooks/FungibleHookType.js.map +1 -0
  90. package/lib/hooks/HookCall.cjs +99 -0
  91. package/lib/hooks/HookCall.d.ts +64 -0
  92. package/lib/hooks/HookCall.js +2 -0
  93. package/lib/hooks/HookCall.js.map +1 -0
  94. package/lib/hooks/HookCreationDetails.cjs +149 -0
  95. package/lib/hooks/HookCreationDetails.d.ts +91 -0
  96. package/lib/hooks/HookCreationDetails.js +2 -0
  97. package/lib/hooks/HookCreationDetails.js.map +1 -0
  98. package/lib/hooks/HookEntityId.cjs +67 -0
  99. package/lib/hooks/HookEntityId.d.ts +41 -0
  100. package/lib/hooks/HookEntityId.js +2 -0
  101. package/lib/hooks/HookEntityId.js.map +1 -0
  102. package/lib/hooks/HookExtensionPoint.cjs +31 -0
  103. package/lib/hooks/HookExtensionPoint.d.ts +16 -0
  104. package/lib/hooks/HookExtensionPoint.js +2 -0
  105. package/lib/hooks/HookExtensionPoint.js.map +1 -0
  106. package/lib/hooks/HookId.cjs +101 -0
  107. package/lib/hooks/HookId.d.ts +63 -0
  108. package/lib/hooks/HookId.js +2 -0
  109. package/lib/hooks/HookId.js.map +1 -0
  110. package/lib/hooks/HookStoreTransaction.cjs +157 -0
  111. package/lib/hooks/HookStoreTransaction.d.ts +77 -0
  112. package/lib/hooks/HookStoreTransaction.js +2 -0
  113. package/lib/hooks/HookStoreTransaction.js.map +1 -0
  114. package/lib/hooks/NftHookCall.cjs +67 -0
  115. package/lib/hooks/NftHookCall.d.ts +50 -0
  116. package/lib/hooks/NftHookCall.js +2 -0
  117. package/lib/hooks/NftHookCall.js.map +1 -0
  118. package/lib/hooks/NftHookType.cjs +13 -0
  119. package/lib/hooks/NftHookType.d.ts +7 -0
  120. package/lib/hooks/NftHookType.js +2 -0
  121. package/lib/hooks/NftHookType.js.map +1 -0
  122. package/lib/index.js +1 -1
  123. package/lib/native.js +1 -1
  124. package/lib/token/AbstractTokenTransferTransaction.cjs +17 -5
  125. package/lib/token/AbstractTokenTransferTransaction.d.ts +13 -2
  126. package/lib/token/AbstractTokenTransferTransaction.js +1 -1
  127. package/lib/token/AbstractTokenTransferTransaction.js.map +1 -1
  128. package/lib/token/TokenAirdropTransaction.cjs +1 -1
  129. package/lib/token/TokenAirdropTransaction.js +1 -1
  130. package/lib/token/TokenAirdropTransaction.js.map +1 -1
  131. package/lib/token/TokenNftTransfer.cjs +51 -2
  132. package/lib/token/TokenNftTransfer.d.ts +7 -0
  133. package/lib/token/TokenNftTransfer.js +1 -1
  134. package/lib/token/TokenNftTransfer.js.map +1 -1
  135. package/lib/token/TokenTransfer.cjs +26 -2
  136. package/lib/token/TokenTransfer.d.ts +4 -0
  137. package/lib/token/TokenTransfer.js +1 -1
  138. package/lib/token/TokenTransfer.js.map +1 -1
  139. package/lib/transaction/Transaction.cjs +2 -1
  140. package/lib/transaction/Transaction.js +1 -1
  141. package/lib/transaction/Transaction.js.map +1 -1
  142. package/lib/transaction/TransactionResponse.cjs +82 -9
  143. package/lib/transaction/TransactionResponse.d.ts +33 -2
  144. package/lib/transaction/TransactionResponse.js +1 -1
  145. package/lib/transaction/TransactionResponse.js.map +1 -1
  146. package/lib/version.js +1 -1
  147. package/package.json +15 -13
  148. package/src/Executable.js +10 -7
  149. package/src/PublicKey.js +53 -36
  150. package/src/RequestType.js +18 -0
  151. package/src/Status.js +201 -252
  152. package/src/Transfer.js +33 -1
  153. package/src/account/AccountCreateTransaction.js +39 -0
  154. package/src/account/AccountUpdateTransaction.js +78 -0
  155. package/src/account/TransferTransaction.js +84 -8
  156. package/src/client/Client.js +38 -0
  157. package/src/client/addressbooks/mainnet.js +1 -1
  158. package/src/client/addressbooks/previewnet.js +1 -1
  159. package/src/client/addressbooks/testnet.js +1 -1
  160. package/src/contract/ContractCreateTransaction.js +37 -0
  161. package/src/contract/ContractUpdateTransaction.js +80 -0
  162. package/src/exports.js +17 -0
  163. package/src/hooks/EvmHook.js +83 -0
  164. package/src/hooks/EvmHookCall.js +100 -0
  165. package/src/hooks/EvmHookMappingEntry.js +140 -0
  166. package/src/hooks/EvmHookStorageUpdate.js +257 -0
  167. package/src/hooks/FungibleHookCall.js +65 -0
  168. package/src/hooks/FungibleHookType.js +6 -0
  169. package/src/hooks/HookCall.js +97 -0
  170. package/src/hooks/HookCreationDetails.js +155 -0
  171. package/src/hooks/HookEntityId.js +67 -0
  172. package/src/hooks/HookExtensionPoint.js +25 -0
  173. package/src/hooks/HookId.js +102 -0
  174. package/src/hooks/HookStoreTransaction.js +185 -0
  175. package/src/hooks/NftHookCall.js +64 -0
  176. package/src/hooks/NftHookType.js +8 -0
  177. package/src/token/AbstractTokenTransferTransaction.js +16 -1
  178. package/src/token/TokenAirdropTransaction.js +1 -0
  179. package/src/token/TokenNftTransfer.js +68 -1
  180. package/src/token/TokenTransfer.js +34 -1
  181. package/src/transaction/Transaction.js +3 -0
  182. package/src/transaction/TransactionResponse.js +98 -13
@@ -0,0 +1,65 @@
1
+ // SPDX-License-Identifier: Apache-2.0
2
+
3
+ import HookCall from "./HookCall.js";
4
+ import EvmHookCall from "./EvmHookCall.js";
5
+ import FungibleHookType from "./FungibleHookType.js";
6
+
7
+ /**
8
+ * @namespace proto
9
+ * @typedef {import("@hiero-ledger/proto").proto.IHookCall} HieroProto.proto.IHookCall
10
+ */
11
+
12
+ /**
13
+ * @typedef {typeof FungibleHookType[keyof typeof FungibleHookType]} FungibleHookTypeValue
14
+ */
15
+
16
+ /**
17
+ * A typed hook call for fungible (HBAR and FT) transfers.
18
+ */
19
+ class FungibleHookCall extends HookCall {
20
+ /**
21
+ * @param {object} props
22
+ * @param {Long} [props.hookId]
23
+ * @param {import("../hooks/EvmHookCall.js").default} [props.evmHookCall]
24
+ * @param {FungibleHookTypeValue} props.type - One of FungibleHookType.PRE_TX_ALLOWANCE_HOOK or FungibleHookType.PRE_POST_TX_ALLOWANCE_HOOK
25
+ */
26
+ constructor(props) {
27
+ super(props);
28
+
29
+ if (props.type == null) {
30
+ throw new Error("type cannot be null");
31
+ }
32
+
33
+ /**
34
+ * The type of fungible hook
35
+ * @private
36
+ * @type {FungibleHookTypeValue}
37
+ */
38
+ this._type = props.type;
39
+ }
40
+
41
+ /**
42
+ * @returns {FungibleHookTypeValue}
43
+ */
44
+ get type() {
45
+ return this._type;
46
+ }
47
+
48
+ /**
49
+ * @internal
50
+ * @param {HieroProto.proto.IHookCall} hookCall
51
+ * @param {FungibleHookTypeValue} type
52
+ * @returns {FungibleHookCall}
53
+ */
54
+ static _fromProtobufWithType(hookCall, type) {
55
+ return new FungibleHookCall({
56
+ hookId: hookCall.hookId != null ? hookCall.hookId : undefined,
57
+ evmHookCall: hookCall.evmHookCall
58
+ ? EvmHookCall._fromProtobuf(hookCall.evmHookCall)
59
+ : undefined,
60
+ type,
61
+ });
62
+ }
63
+ }
64
+
65
+ export default FungibleHookCall;
@@ -0,0 +1,6 @@
1
+ const FungibleHookType = Object.freeze({
2
+ PRE_TX_ALLOWANCE_HOOK: 0,
3
+ PRE_POST_TX_ALLOWANCE_HOOK: 1,
4
+ });
5
+
6
+ export default FungibleHookType;
@@ -0,0 +1,97 @@
1
+ /**
2
+ * @namespace proto
3
+ * @typedef {import("@hiero-ledger/proto").proto.IHookCall} HieroProto.proto.IHookCall
4
+ */
5
+
6
+ import EvmHookCall from "../hooks/EvmHookCall.js";
7
+
8
+ /**
9
+ *
10
+ * Specifies a call to a hook from within a transaction.
11
+ * <p>
12
+ * Often the hook's entity is implied by the nature of the call site. For example, when using an account allowance hook
13
+ * inside a crypto transfer, the hook's entity is necessarily the account whose authorization is required.
14
+ * <p>
15
+ * For future extension points where the hook owner is not forced by the context, we include the option to fully
16
+ * specify the hook id for the call.
17
+ */
18
+ class HookCall {
19
+ /**
20
+ *
21
+ * @param {object} props
22
+ * @param {Long} [props.hookId]
23
+ * @param {import("../hooks/EvmHookCall.js").default} [props.evmHookCall]
24
+ */
25
+ constructor(props = {}) {
26
+ if (props.hookId !== undefined) {
27
+ this.setHookId(props.hookId);
28
+ }
29
+
30
+ if (props.evmHookCall !== undefined) {
31
+ this.setCall(props.evmHookCall);
32
+ }
33
+ }
34
+
35
+ /**
36
+ *
37
+ * @param {Long} hookId
38
+ * @returns {this}
39
+ */
40
+ setHookId(hookId) {
41
+ this._hookId = hookId;
42
+ return this;
43
+ }
44
+
45
+ /**
46
+ *
47
+ * @param {import("../hooks/EvmHookCall.js").default} evmHookCall
48
+ * @returns {this}
49
+ */
50
+ setCall(evmHookCall) {
51
+ this._evmHookCall = evmHookCall;
52
+ return this;
53
+ }
54
+
55
+ /**
56
+ *
57
+ * @returns {Long | undefined}
58
+ */
59
+ get hookId() {
60
+ return this._hookId;
61
+ }
62
+
63
+ /**
64
+ *
65
+ * @returns {import("../hooks/EvmHookCall.js").default | undefined}
66
+ */
67
+ get evmHookCall() {
68
+ return this._evmHookCall;
69
+ }
70
+
71
+ /**
72
+ * @internal
73
+ * @param {HieroProto.proto.IHookCall} hookCall
74
+ * @returns {HookCall}
75
+ */
76
+ static _fromProtobuf(hookCall) {
77
+ return new HookCall({
78
+ hookId: hookCall.hookId ?? undefined,
79
+ evmHookCall: hookCall.evmHookCall
80
+ ? EvmHookCall._fromProtobuf(hookCall.evmHookCall)
81
+ : undefined,
82
+ });
83
+ }
84
+
85
+ /**
86
+ *
87
+ * @returns {import("@hiero-ledger/proto").proto.HookCall}}
88
+ */
89
+ _toProtobuf() {
90
+ return {
91
+ hookId: this._hookId,
92
+ evmHookCall: this._evmHookCall?._toProtobuf(),
93
+ };
94
+ }
95
+ }
96
+
97
+ export default HookCall;
@@ -0,0 +1,155 @@
1
+ import Long from "long";
2
+ import HookExtensionPoint from "./HookExtensionPoint.js";
3
+
4
+ /**
5
+ * The details of a hook's creation.
6
+ */
7
+ class HookCreationDetails {
8
+ /**
9
+ *
10
+ * @param {object} props
11
+ * @param {HookExtensionPoint} [props.extensionPoint]
12
+ * @param {Long | number} [props.hookId]
13
+ * @param {import("./EvmHook.js").default} [props.evmHook]
14
+ * @param {import("../Key.js").default} [props.adminKey]
15
+ */
16
+ constructor(props = {}) {
17
+ /**
18
+ * @private
19
+ * @type {HookExtensionPoint | null}
20
+ */
21
+ this._extensionPoint = null;
22
+
23
+ /**
24
+ * @private
25
+ * @type {Long | null}
26
+ */
27
+ this._hookId = null;
28
+
29
+ /**
30
+ * @private
31
+ * @type {import("./EvmHook.js").default | null}
32
+ */
33
+ this._evmHook = null;
34
+
35
+ /**
36
+ * @private
37
+ * @type {import("../Key.js").default | null}
38
+ */
39
+ this._adminKey = null;
40
+
41
+ if (props.extensionPoint != null) {
42
+ this.setExtensionPoint(props.extensionPoint);
43
+ }
44
+
45
+ if (props.hookId != null) {
46
+ this.setHookId(props.hookId);
47
+ }
48
+
49
+ if (props.evmHook != null) {
50
+ this.setEvmHook(props.evmHook);
51
+ }
52
+
53
+ if (props.adminKey != null) {
54
+ this.setAdminKey(props.adminKey);
55
+ }
56
+ }
57
+
58
+ /**
59
+ *
60
+ * @param {HookExtensionPoint} extensionPoint
61
+ * @returns {this}
62
+ */
63
+ setExtensionPoint(extensionPoint) {
64
+ this._extensionPoint = extensionPoint;
65
+ return this;
66
+ }
67
+
68
+ /**
69
+ *
70
+ * @param {Long | number} hookId
71
+ * @returns {this}
72
+ */
73
+ setHookId(hookId) {
74
+ this._hookId =
75
+ hookId instanceof Long ? hookId : Long.fromNumber(hookId);
76
+ return this;
77
+ }
78
+
79
+ /**
80
+ *
81
+ * @param {import("./EvmHook.js").default} evmHook
82
+ * @returns {this}
83
+ */
84
+ setEvmHook(evmHook) {
85
+ this._evmHook = evmHook;
86
+ return this;
87
+ }
88
+
89
+ /**
90
+ *
91
+ * @param {import("../Key.js").default} adminKey
92
+ * @returns {this}
93
+ */
94
+ setAdminKey(adminKey) {
95
+ this._adminKey = adminKey;
96
+ return this;
97
+ }
98
+
99
+ /**
100
+ *
101
+ * @returns {HookExtensionPoint | null}
102
+ */
103
+ get extensionPoint() {
104
+ return this._extensionPoint;
105
+ }
106
+
107
+ /**
108
+ *
109
+ * @returns {Long | null}
110
+ */
111
+ get hookId() {
112
+ return this._hookId;
113
+ }
114
+
115
+ /**
116
+ *
117
+ * @returns {import("./EvmHook.js").default | null}
118
+ */
119
+ get evmHook() {
120
+ return this._evmHook;
121
+ }
122
+
123
+ /**
124
+ *
125
+ * @returns {import("../Key.js").default | null}
126
+ */
127
+ get adminKey() {
128
+ return this._adminKey;
129
+ }
130
+
131
+ /**
132
+ *
133
+ * @returns {import("@hiero-ledger/proto").com.hedera.hapi.node.hooks.IHookCreationDetails}
134
+ */
135
+ _toProtobuf() {
136
+ if (this._extensionPoint == null) {
137
+ throw new Error(
138
+ "extensionPoint is required for HookCreationDetails",
139
+ );
140
+ }
141
+
142
+ return {
143
+ extensionPoint:
144
+ /** @type {import("@hiero-ledger/proto").com.hedera.hapi.node.hooks.HookExtensionPoint} */ (
145
+ this._extensionPoint
146
+ ),
147
+ hookId: this._hookId,
148
+ evmHook: this._evmHook != null ? this._evmHook._toProtobuf() : null,
149
+ adminKey:
150
+ this._adminKey != null ? this._adminKey._toProtobufKey() : null,
151
+ };
152
+ }
153
+ }
154
+
155
+ export default HookCreationDetails;
@@ -0,0 +1,67 @@
1
+ import AccountId from "../account/AccountId.js";
2
+
3
+ /**
4
+ * The id of an entity using a hook.
5
+ */
6
+ class HookEntityId {
7
+ /**
8
+ *
9
+ * @param {object} props
10
+ * @param {AccountId} [props.accountId]
11
+ */
12
+ constructor(props = {}) {
13
+ /**
14
+ * @private
15
+ * @type {?AccountId}
16
+ */
17
+ this._accountId = null;
18
+
19
+ if (props.accountId != null) {
20
+ this.setAccountId(props.accountId);
21
+ }
22
+ }
23
+
24
+ /**
25
+ * @param {AccountId} accountId
26
+ * @returns {this}
27
+ */
28
+ setAccountId(accountId) {
29
+ this._accountId = accountId;
30
+ return this;
31
+ }
32
+
33
+ /**
34
+ *
35
+ * @returns {AccountId | null}
36
+ */
37
+ get accountId() {
38
+ return this._accountId;
39
+ }
40
+
41
+ /**
42
+ *
43
+ * @returns {import("@hiero-ledger/proto").proto.IHookEntityId}
44
+ */
45
+ _toProtobuf() {
46
+ return {
47
+ accountId:
48
+ this._accountId != null ? this._accountId._toProtobuf() : null,
49
+ };
50
+ }
51
+
52
+ /**
53
+ *
54
+ * @param {import("@hiero-ledger/proto").proto.IHookEntityId} hookEntityId
55
+ * @returns {HookEntityId}
56
+ */
57
+ static _fromProtobuf(hookEntityId) {
58
+ return new HookEntityId({
59
+ accountId:
60
+ hookEntityId.accountId != null
61
+ ? AccountId._fromProtobuf(hookEntityId.accountId)
62
+ : undefined,
63
+ });
64
+ }
65
+ }
66
+
67
+ export default HookEntityId;
@@ -0,0 +1,25 @@
1
+ /**
2
+ * @namespace proto
3
+ * @typedef {import("@hiero-ledger/proto").com.hedera.hapi.node.hooks.HookExtensionPoint} HieroHookExtensionPoint
4
+ */
5
+
6
+ /**
7
+ * The Hiero extension points that accept a hook.
8
+ */
9
+ export class HookExtensionPoint {
10
+ /**
11
+ * @hideconstructor
12
+ * @internal
13
+ */
14
+ constructor() {}
15
+
16
+ /**
17
+ * Used to customize an account's allowances during a CryptoTransfer transaction.
18
+ * @returns {HookExtensionPoint}
19
+ */
20
+ static get ACCOUNT_ALLOWANCE_HOOK() {
21
+ return 0;
22
+ }
23
+ }
24
+
25
+ export default HookExtensionPoint;
@@ -0,0 +1,102 @@
1
+ import HookEntityId from "./HookEntityId.js";
2
+
3
+ /**
4
+ * Once a hook is created, its full id.
5
+ * <p>
6
+ * A composite of its creating entity's id and an arbitrary 64-bit hook id
7
+ * (which need not be sequential).
8
+ */
9
+ class HookId {
10
+ /**
11
+ *
12
+ * @param {object} props
13
+ * @param {HookEntityId} [props.entityId]
14
+ * @param {Long} [props.hookId]
15
+ */
16
+ constructor(props = {}) {
17
+ /**
18
+ * @private
19
+ * @type {?HookEntityId}
20
+ */
21
+ this._entityId = null;
22
+
23
+ /**
24
+ * @private
25
+ * @type {?Long}
26
+ */
27
+ this._hookId = null;
28
+
29
+ if (props.entityId != null) {
30
+ this.setEntityId(props.entityId);
31
+ }
32
+
33
+ if (props.hookId != null) {
34
+ this.setHookId(props.hookId);
35
+ }
36
+ }
37
+
38
+ /**
39
+ *
40
+ * @param {HookEntityId} entityId
41
+ * @returns {this}
42
+ */
43
+ setEntityId(entityId) {
44
+ this._entityId = entityId;
45
+ return this;
46
+ }
47
+
48
+ /**
49
+ *
50
+ * @param {Long} hookId
51
+ * @returns {this}
52
+ */
53
+ setHookId(hookId) {
54
+ this._hookId = hookId;
55
+ return this;
56
+ }
57
+
58
+ /**
59
+ *
60
+ * @returns {HookEntityId | null}
61
+ */
62
+ get entityId() {
63
+ return this._entityId;
64
+ }
65
+
66
+ /**
67
+ *
68
+ * @returns {Long | null}
69
+ */
70
+ get hookId() {
71
+ return this._hookId;
72
+ }
73
+
74
+ /**
75
+ *
76
+ * @param {import("@hiero-ledger/proto").proto.IHookId} hookId
77
+ * @returns {HookId}
78
+ */
79
+ static _fromProtobuf(hookId) {
80
+ return new HookId({
81
+ entityId:
82
+ hookId.entityId != null
83
+ ? HookEntityId._fromProtobuf(hookId.entityId)
84
+ : undefined,
85
+ hookId: hookId.hookId != null ? hookId.hookId : undefined,
86
+ });
87
+ }
88
+
89
+ /**
90
+ *
91
+ * @returns {import("@hiero-ledger/proto").proto.IHookId}
92
+ */
93
+ _toProtobuf() {
94
+ return {
95
+ entityId:
96
+ this._entityId != null ? this._entityId._toProtobuf() : null,
97
+ hookId: this._hookId,
98
+ };
99
+ }
100
+ }
101
+
102
+ export default HookId;
@@ -0,0 +1,185 @@
1
+ import HookId from "../hooks/HookId.js";
2
+ import { EvmHookStorageUpdate } from "../hooks/EvmHookStorageUpdate.js";
3
+ import Transaction, {
4
+ TRANSACTION_REGISTRY,
5
+ } from "../transaction/Transaction.js";
6
+
7
+ /**
8
+ * @typedef {import("../channel/Channel.js").default} Channel
9
+ * @typedef {import("../client/Client.js").default<*, *>} Client
10
+ * @typedef {import("../Timestamp.js").default} Timestamp
11
+ * @typedef {import("../transaction/TransactionId.js").default} TransactionId
12
+ */
13
+
14
+ class HookStoreTransaction extends Transaction {
15
+ /**
16
+ *
17
+ * @param {object} props
18
+ * @param {import("../hooks/HookId.js").default} [props.hookId]
19
+ * @param {import("../hooks/EvmHookStorageUpdate.js").EvmHookStorageUpdate[]} [props.storageUpdates]
20
+ */
21
+ constructor(props = {}) {
22
+ super();
23
+
24
+ /**
25
+ * @private
26
+ * @type {HookId | null}
27
+ */
28
+ this._hookId = null;
29
+
30
+ /**
31
+ * @private
32
+ * @type {EvmHookStorageUpdate[]}
33
+ */
34
+ this._storageUpdates = [];
35
+
36
+ if (props.hookId != null) {
37
+ this.setHookId(props.hookId);
38
+ }
39
+
40
+ if (props.storageUpdates != null) {
41
+ this.setStorageUpdates(props.storageUpdates);
42
+ }
43
+ }
44
+
45
+ /**
46
+ * @returns {HookId | null}
47
+ */
48
+ get hookId() {
49
+ return this._hookId;
50
+ }
51
+
52
+ /**
53
+ *
54
+ * @param {HookId} hookId
55
+ * @returns {this}
56
+ */
57
+ setHookId(hookId) {
58
+ this._requireNotFrozen();
59
+ this._hookId = hookId;
60
+ return this;
61
+ }
62
+
63
+ /**
64
+ * @returns {EvmHookStorageUpdate[] | []}
65
+ */
66
+ get storageUpdates() {
67
+ return this._storageUpdates;
68
+ }
69
+
70
+ /**
71
+ *
72
+ * @param {EvmHookStorageUpdate[]} storageUpdates
73
+ * @returns {this}
74
+ */
75
+ setStorageUpdates(storageUpdates) {
76
+ this._requireNotFrozen();
77
+ this._storageUpdates = storageUpdates;
78
+ return this;
79
+ }
80
+
81
+ /**
82
+ * @param {EvmHookStorageUpdate} storageUpdate
83
+ * @returns {this}
84
+ */
85
+ addStorageUpdate(storageUpdate) {
86
+ this._requireNotFrozen();
87
+ this._storageUpdates.push(storageUpdate);
88
+ return this;
89
+ }
90
+
91
+ /**
92
+ * @override
93
+ * @protected
94
+ * @returns {import("@hiero-ledger/proto").com.hedera.hapi.node.hooks.IHookStoreTransactionBody} HieroProto.proto.IHookStoreTransactionBody
95
+ */
96
+ _makeTransactionData() {
97
+ return {
98
+ hookId: this.hookId?._toProtobuf(),
99
+ storageUpdates: this.storageUpdates?.map((update) =>
100
+ update._toProtobuf(),
101
+ ),
102
+ };
103
+ }
104
+
105
+ /**
106
+ * @override
107
+ * @internal
108
+ * @param {Channel} channel
109
+ * @param {import("@hiero-ledger/proto").proto.ITransaction} request
110
+ * @returns {Promise<import("@hiero-ledger/proto").proto.ITransactionResponse>}
111
+ */
112
+ _execute(channel, request) {
113
+ return channel.smartContract.hookStore(request);
114
+ }
115
+
116
+ /**
117
+ * @override
118
+ * @protected
119
+ * @returns {NonNullable<import("@hiero-ledger/proto").proto.TransactionBody["data"]>}
120
+ */
121
+ _getTransactionDataCase() {
122
+ return "hookStore";
123
+ }
124
+
125
+ /**
126
+ * @returns {string}
127
+ */
128
+ _getLogId() {
129
+ const timestamp = /** @type {import("../Timestamp.js").default} */ (
130
+ this._transactionIds.current.validStart
131
+ );
132
+ return `HookStoreTransaction:${timestamp.toString()}`;
133
+ }
134
+
135
+ /**
136
+ * @internal
137
+ * @param {import("@hiero-ledger/proto").proto.ITransaction[]} transactions
138
+ * @param {import("@hiero-ledger/proto").proto.ISignedTransaction[]} signedTransactions
139
+ * @param {TransactionId[]} transactionIds
140
+ * @param {import("../account/AccountId.js").default[]} nodeIds
141
+ * @param {import("@hiero-ledger/proto").proto.ITransactionBody[]} bodies
142
+ * @returns {HookStoreTransaction}
143
+ */
144
+ static _fromProtobuf(
145
+ transactions,
146
+ signedTransactions,
147
+ transactionIds,
148
+ nodeIds,
149
+ bodies,
150
+ ) {
151
+ const body = bodies[0];
152
+ const create =
153
+ /** @type {import("@hiero-ledger/proto").com.hedera.hapi.node.hooks.IHookStoreTransactionBody} */ (
154
+ body.hookStore
155
+ );
156
+
157
+ return Transaction._fromProtobufTransactions(
158
+ new HookStoreTransaction({
159
+ hookId:
160
+ create.hookId != null
161
+ ? HookId._fromProtobuf(create.hookId)
162
+ : undefined,
163
+ storageUpdates:
164
+ create.storageUpdates != null
165
+ ? create.storageUpdates.map((update) =>
166
+ EvmHookStorageUpdate._fromProtobuf(update),
167
+ )
168
+ : undefined,
169
+ }),
170
+ transactions,
171
+ signedTransactions,
172
+ transactionIds,
173
+ nodeIds,
174
+ bodies,
175
+ );
176
+ }
177
+ }
178
+
179
+ TRANSACTION_REGISTRY.set(
180
+ "hookStore",
181
+ // eslint-disable-next-line @typescript-eslint/unbound-method
182
+ HookStoreTransaction._fromProtobuf,
183
+ );
184
+
185
+ export default HookStoreTransaction;