@ethersphere/bee-js 8.3.1 → 9.0.2

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 (224) hide show
  1. package/README.md +192 -50
  2. package/dist/cjs/bee-dev.js +78 -0
  3. package/dist/cjs/bee.js +341 -417
  4. package/dist/cjs/chunk/bmt.js +15 -32
  5. package/dist/cjs/chunk/cac.js +26 -36
  6. package/dist/cjs/chunk/soc.js +56 -51
  7. package/dist/cjs/feed/identifier.js +3 -28
  8. package/dist/cjs/feed/index.js +95 -44
  9. package/dist/cjs/feed/retrievable.js +11 -22
  10. package/dist/cjs/index.js +17 -1
  11. package/dist/cjs/manifest/manifest.js +369 -0
  12. package/dist/cjs/modules/bytes.js +24 -12
  13. package/dist/cjs/modules/bzz.js +24 -34
  14. package/dist/cjs/modules/chunk.js +13 -7
  15. package/dist/cjs/modules/debug/balance.js +29 -4
  16. package/dist/cjs/modules/debug/chequebook.js +60 -16
  17. package/dist/cjs/modules/debug/connectivity.js +82 -4
  18. package/dist/cjs/modules/debug/settlements.js +22 -2
  19. package/dist/cjs/modules/debug/stake.js +29 -11
  20. package/dist/cjs/modules/debug/stamps.js +88 -7
  21. package/dist/cjs/modules/debug/states.js +25 -3
  22. package/dist/cjs/modules/debug/status.js +45 -47
  23. package/dist/cjs/modules/debug/transactions.js +27 -5
  24. package/dist/cjs/modules/envelope.js +8 -6
  25. package/dist/cjs/modules/feed.js +25 -10
  26. package/dist/cjs/modules/grantee.js +18 -12
  27. package/dist/cjs/modules/gsoc.js +24 -0
  28. package/dist/cjs/modules/pinning.js +13 -2
  29. package/dist/cjs/modules/pss.js +9 -3
  30. package/dist/cjs/modules/soc.js +9 -4
  31. package/dist/cjs/modules/stewardship.js +7 -3
  32. package/dist/cjs/modules/tag.js +35 -3
  33. package/dist/cjs/package.json +1 -0
  34. package/dist/cjs/stamper/stamper.js +43 -0
  35. package/dist/cjs/types/debug.js +16 -1
  36. package/dist/cjs/types/index.js +2 -24
  37. package/dist/cjs/utils/bytes.js +67 -115
  38. package/dist/cjs/utils/chunk-size.js +17 -0
  39. package/dist/cjs/utils/chunk-stream.browser.js +85 -0
  40. package/dist/cjs/utils/chunk-stream.js +84 -0
  41. package/dist/cjs/utils/cid.js +5 -6
  42. package/dist/cjs/utils/collection.browser.js +2 -2
  43. package/dist/cjs/utils/collection.js +3 -2
  44. package/dist/cjs/utils/collection.node.js +0 -2
  45. package/dist/cjs/utils/constants.js +7 -3
  46. package/dist/cjs/utils/data.browser.js +6 -3
  47. package/dist/cjs/utils/data.js +8 -4
  48. package/dist/cjs/utils/duration.js +51 -0
  49. package/dist/cjs/utils/expose.js +11 -40
  50. package/dist/cjs/utils/headers.js +79 -52
  51. package/dist/cjs/utils/http.js +34 -10
  52. package/dist/cjs/utils/mime.js +78 -0
  53. package/dist/cjs/utils/pss.js +3 -4
  54. package/dist/cjs/utils/redundancy.js +18 -14
  55. package/dist/cjs/utils/resource-locator.js +17 -0
  56. package/dist/cjs/utils/size.js +35 -0
  57. package/dist/cjs/utils/stamps.js +67 -51
  58. package/dist/cjs/utils/tar-uploader.browser.js +2 -2
  59. package/dist/cjs/utils/tar-uploader.js +2 -2
  60. package/dist/cjs/utils/tokens.js +144 -0
  61. package/dist/cjs/utils/type.js +142 -350
  62. package/dist/cjs/utils/typed-bytes.js +179 -0
  63. package/dist/cjs/utils/upload-progress.js +2 -0
  64. package/dist/cjs/utils/url.js +0 -4
  65. package/dist/cjs/utils/workaround.js +27 -0
  66. package/dist/index.browser.min.js +1 -2
  67. package/dist/index.browser.min.js.map +1 -1
  68. package/dist/mjs/bee-dev.js +98 -0
  69. package/dist/mjs/bee.js +367 -411
  70. package/dist/mjs/chunk/bmt.js +13 -29
  71. package/dist/mjs/chunk/cac.js +26 -34
  72. package/dist/mjs/chunk/soc.js +57 -53
  73. package/dist/mjs/feed/identifier.js +3 -26
  74. package/dist/mjs/feed/index.js +98 -51
  75. package/dist/mjs/feed/retrievable.js +12 -23
  76. package/dist/mjs/index.js +10 -1
  77. package/dist/mjs/manifest/manifest.js +371 -0
  78. package/dist/mjs/modules/bytes.js +27 -15
  79. package/dist/mjs/modules/bzz.js +25 -32
  80. package/dist/mjs/modules/chunk.js +16 -8
  81. package/dist/mjs/modules/debug/balance.js +61 -4
  82. package/dist/mjs/modules/debug/chequebook.js +116 -16
  83. package/dist/mjs/modules/debug/connectivity.js +144 -3
  84. package/dist/mjs/modules/debug/settlements.js +46 -2
  85. package/dist/mjs/modules/debug/stake.js +69 -11
  86. package/dist/mjs/modules/debug/stamps.js +184 -7
  87. package/dist/mjs/modules/debug/states.js +55 -3
  88. package/dist/mjs/modules/debug/status.js +97 -45
  89. package/dist/mjs/modules/debug/transactions.js +61 -5
  90. package/dist/mjs/modules/envelope.js +11 -9
  91. package/dist/mjs/modules/feed.js +26 -10
  92. package/dist/mjs/modules/grantee.js +35 -13
  93. package/dist/mjs/modules/gsoc.js +16 -0
  94. package/dist/mjs/modules/pinning.js +23 -2
  95. package/dist/mjs/modules/pss.js +10 -4
  96. package/dist/mjs/modules/soc.js +10 -5
  97. package/dist/mjs/modules/stewardship.js +14 -4
  98. package/dist/mjs/modules/tag.js +93 -3
  99. package/dist/mjs/package.json +2 -1
  100. package/dist/mjs/stamper/stamper.js +39 -0
  101. package/dist/mjs/types/debug.js +15 -1
  102. package/dist/mjs/types/index.js +2 -24
  103. package/dist/mjs/utils/bytes.js +63 -104
  104. package/dist/mjs/utils/chunk-size.js +13 -0
  105. package/dist/mjs/utils/chunk-stream.browser.js +85 -0
  106. package/dist/mjs/utils/chunk-stream.js +87 -0
  107. package/dist/mjs/utils/cid.js +5 -6
  108. package/dist/mjs/utils/collection.browser.js +2 -2
  109. package/dist/mjs/utils/collection.js +2 -2
  110. package/dist/mjs/utils/collection.node.js +0 -2
  111. package/dist/mjs/utils/constants.js +6 -2
  112. package/dist/mjs/utils/data.browser.js +9 -3
  113. package/dist/mjs/utils/data.js +12 -4
  114. package/dist/mjs/utils/duration.js +47 -0
  115. package/dist/mjs/utils/expose.js +2 -7
  116. package/dist/mjs/utils/headers.js +73 -48
  117. package/dist/mjs/utils/http.js +33 -11
  118. package/dist/mjs/utils/mime.js +75 -0
  119. package/dist/mjs/utils/pss.js +3 -4
  120. package/dist/mjs/utils/redundancy.js +18 -8
  121. package/dist/mjs/utils/resource-locator.js +13 -0
  122. package/dist/mjs/utils/size.js +31 -0
  123. package/dist/mjs/utils/stamps.js +47 -44
  124. package/dist/mjs/utils/tar-uploader.browser.js +2 -2
  125. package/dist/mjs/utils/tar-uploader.js +2 -2
  126. package/dist/mjs/utils/tokens.js +139 -0
  127. package/dist/mjs/utils/type.js +216 -310
  128. package/dist/mjs/utils/typed-bytes.js +160 -0
  129. package/dist/mjs/utils/upload-progress.js +1 -0
  130. package/dist/mjs/utils/url.js +0 -4
  131. package/dist/mjs/utils/workaround.js +22 -0
  132. package/dist/types/bee-dev.d.ts +5 -0
  133. package/dist/types/bee.d.ts +88 -165
  134. package/dist/types/chunk/bmt.d.ts +2 -2
  135. package/dist/types/chunk/cac.d.ts +7 -24
  136. package/dist/types/chunk/soc.d.ts +15 -15
  137. package/dist/types/feed/identifier.d.ts +2 -4
  138. package/dist/types/feed/index.d.ts +14 -18
  139. package/dist/types/feed/retrievable.d.ts +3 -4
  140. package/dist/types/index.d.ts +28 -1
  141. package/dist/types/manifest/manifest.d.ts +106 -0
  142. package/dist/types/modules/bytes.d.ts +8 -5
  143. package/dist/types/modules/bzz.d.ts +8 -10
  144. package/dist/types/modules/chunk.d.ts +4 -3
  145. package/dist/types/modules/debug/balance.d.ts +3 -2
  146. package/dist/types/modules/debug/chequebook.d.ts +7 -6
  147. package/dist/types/modules/debug/connectivity.d.ts +5 -3
  148. package/dist/types/modules/debug/settlements.d.ts +2 -1
  149. package/dist/types/modules/debug/stake.d.ts +4 -2
  150. package/dist/types/modules/debug/stamps.d.ts +5 -4
  151. package/dist/types/modules/debug/status.d.ts +6 -25
  152. package/dist/types/modules/debug/transactions.d.ts +5 -4
  153. package/dist/types/modules/envelope.d.ts +3 -2
  154. package/dist/types/modules/feed.d.ts +20 -16
  155. package/dist/types/modules/grantee.d.ts +7 -6
  156. package/dist/types/modules/gsoc.d.ts +7 -0
  157. package/dist/types/modules/pinning.d.ts +2 -4
  158. package/dist/types/modules/pss.d.ts +4 -3
  159. package/dist/types/modules/soc.d.ts +3 -2
  160. package/dist/types/modules/stewardship.d.ts +4 -4
  161. package/dist/types/modules/tag.d.ts +2 -1
  162. package/dist/types/stamper/stamper.d.ts +15 -0
  163. package/dist/types/types/debug.d.ts +63 -115
  164. package/dist/types/types/index.d.ts +103 -204
  165. package/dist/types/utils/bytes.d.ts +16 -90
  166. package/dist/types/utils/chunk-size.d.ts +1 -0
  167. package/dist/types/utils/chunk-stream.browser.d.ts +6 -0
  168. package/dist/types/utils/chunk-stream.d.ts +6 -0
  169. package/dist/types/utils/cid.d.ts +3 -2
  170. package/dist/types/utils/collection.browser.d.ts +2 -2
  171. package/dist/types/utils/collection.d.ts +2 -1
  172. package/dist/types/utils/collection.node.d.ts +0 -1
  173. package/dist/types/utils/constants.d.ts +4 -1
  174. package/dist/types/utils/duration.d.ts +17 -0
  175. package/dist/types/utils/error.d.ts +2 -2
  176. package/dist/types/utils/expose.d.ts +2 -7
  177. package/dist/types/utils/headers.d.ts +3 -4
  178. package/dist/types/utils/mime.d.ts +1 -0
  179. package/dist/types/utils/pss.d.ts +2 -2
  180. package/dist/types/utils/resource-locator.d.ts +6 -0
  181. package/dist/types/utils/size.d.ts +16 -0
  182. package/dist/types/utils/stamps.d.ts +27 -33
  183. package/dist/types/utils/tar-uploader.browser.d.ts +3 -4
  184. package/dist/types/utils/tar-uploader.d.ts +3 -4
  185. package/dist/types/utils/tokens.d.ts +77 -0
  186. package/dist/types/utils/type.d.ts +20 -52
  187. package/dist/types/utils/typed-bytes.d.ts +68 -0
  188. package/dist/types/utils/upload-progress.d.ts +4 -0
  189. package/dist/types/utils/workaround.d.ts +2 -0
  190. package/package.json +11 -17
  191. package/dist/cjs/chunk/signer.js +0 -126
  192. package/dist/cjs/chunk/span.js +0 -25
  193. package/dist/cjs/feed/json.js +0 -28
  194. package/dist/cjs/feed/topic.js +0 -25
  195. package/dist/cjs/feed/type.js +0 -15
  196. package/dist/cjs/modules/debug/chunk.js +0 -21
  197. package/dist/cjs/modules/debug/tag.js +0 -19
  198. package/dist/cjs/utils/eth.js +0 -216
  199. package/dist/cjs/utils/hash.js +0 -21
  200. package/dist/cjs/utils/hex.js +0 -150
  201. package/dist/cjs/utils/reference.js +0 -36
  202. package/dist/index.browser.min.js.LICENSE.txt +0 -8
  203. package/dist/mjs/chunk/signer.js +0 -114
  204. package/dist/mjs/chunk/span.js +0 -21
  205. package/dist/mjs/feed/json.js +0 -26
  206. package/dist/mjs/feed/topic.js +0 -19
  207. package/dist/mjs/feed/type.js +0 -10
  208. package/dist/mjs/modules/debug/chunk.js +0 -17
  209. package/dist/mjs/modules/debug/tag.js +0 -15
  210. package/dist/mjs/utils/eth.js +0 -192
  211. package/dist/mjs/utils/hash.js +0 -16
  212. package/dist/mjs/utils/hex.js +0 -135
  213. package/dist/mjs/utils/reference.js +0 -29
  214. package/dist/types/chunk/signer.d.ts +0 -31
  215. package/dist/types/chunk/span.d.ts +0 -10
  216. package/dist/types/feed/json.d.ts +0 -4
  217. package/dist/types/feed/topic.d.ts +0 -3
  218. package/dist/types/feed/type.d.ts +0 -6
  219. package/dist/types/modules/debug/chunk.d.ts +0 -10
  220. package/dist/types/modules/debug/tag.d.ts +0 -8
  221. package/dist/types/utils/eth.d.ts +0 -67
  222. package/dist/types/utils/hash.d.ts +0 -9
  223. package/dist/types/utils/hex.d.ts +0 -86
  224. package/dist/types/utils/reference.d.ts +0 -2
@@ -1,4 +1,7 @@
1
+ import { Types } from 'cafe-utility';
1
2
  import { http } from "../../utils/http.js";
3
+ import { BZZ } from "../../utils/tokens.js";
4
+ import { asNumberString } from "../../utils/type.js";
2
5
  const balancesEndpoint = 'balances';
3
6
  const consumedEndpoint = 'consumed';
4
7
  /**
@@ -11,7 +14,24 @@ export async function getAllBalances(requestOptions) {
11
14
  url: balancesEndpoint,
12
15
  responseType: 'json'
13
16
  });
14
- return response.data;
17
+ const body = Types.asObject(response.data, {
18
+ name: 'response.data'
19
+ });
20
+ const balances = Types.asArray(body.balances, {
21
+ name: 'balances'
22
+ }).map(x => Types.asObject(x, {
23
+ name: 'balance'
24
+ }));
25
+ return {
26
+ balances: balances.map(x => ({
27
+ peer: Types.asString(x.peer, {
28
+ name: 'peer'
29
+ }),
30
+ balance: BZZ.fromPLUR(asNumberString(x.balance, {
31
+ name: 'balance'
32
+ }))
33
+ }))
34
+ };
15
35
  }
16
36
  /**
17
37
  * Get the balances with a specific peer including prepaid services
@@ -24,7 +44,17 @@ export async function getPeerBalance(requestOptions, address) {
24
44
  url: `${balancesEndpoint}/${address}`,
25
45
  responseType: 'json'
26
46
  });
27
- return response.data;
47
+ const body = Types.asObject(response.data, {
48
+ name: 'response.data'
49
+ });
50
+ return {
51
+ peer: Types.asString(body.peer, {
52
+ name: 'peer'
53
+ }),
54
+ balance: BZZ.fromPLUR(asNumberString(body.balance, {
55
+ name: 'balance'
56
+ }))
57
+ };
28
58
  }
29
59
  /**
30
60
  * Get the past due consumption balances with all known peers
@@ -36,7 +66,24 @@ export async function getPastDueConsumptionBalances(requestOptions) {
36
66
  url: consumedEndpoint,
37
67
  responseType: 'json'
38
68
  });
39
- return response.data;
69
+ const body = Types.asObject(response.data, {
70
+ name: 'response.data'
71
+ });
72
+ const balances = Types.asArray(body.balances, {
73
+ name: 'balances'
74
+ }).map(x => Types.asObject(x, {
75
+ name: 'balance'
76
+ }));
77
+ return {
78
+ balances: balances.map(x => ({
79
+ peer: Types.asString(x.peer, {
80
+ name: 'peer'
81
+ }),
82
+ balance: BZZ.fromPLUR(asNumberString(x.balance, {
83
+ name: 'balance'
84
+ }))
85
+ }))
86
+ };
40
87
  }
41
88
  /**
42
89
  * Get the past due consumption balance with a specific peer
@@ -49,5 +96,15 @@ export async function getPastDueConsumptionPeerBalance(requestOptions, address)
49
96
  url: `${consumedEndpoint}/${address}`,
50
97
  responseType: 'json'
51
98
  });
52
- return response.data;
99
+ const body = Types.asObject(response.data, {
100
+ name: 'response.data'
101
+ });
102
+ return {
103
+ peer: Types.asString(body.peer, {
104
+ name: 'peer'
105
+ }),
106
+ balance: BZZ.fromPLUR(asNumberString(body.balance, {
107
+ name: 'balance'
108
+ }))
109
+ };
53
110
  }
@@ -1,4 +1,9 @@
1
+ import { Types } from 'cafe-utility';
2
+ import { prepareRequestHeaders } from "../../utils/headers.js";
1
3
  import { http } from "../../utils/http.js";
4
+ import { BZZ } from "../../utils/tokens.js";
5
+ import { asNumberString } from "../../utils/type.js";
6
+ import { EthAddress, TransactionId } from "../../utils/typed-bytes.js";
2
7
  const chequebookEndpoint = 'chequebook';
3
8
  /**
4
9
  * Get the address of the chequebook contract used
@@ -10,7 +15,14 @@ export async function getChequebookAddress(requestOptions) {
10
15
  url: chequebookEndpoint + '/address',
11
16
  responseType: 'json'
12
17
  });
13
- return response.data;
18
+ const body = Types.asObject(response.data, {
19
+ name: 'response.data'
20
+ });
21
+ return {
22
+ chequebookAddress: Types.asString(body.chequebookAddress, {
23
+ name: 'chequebookAddress'
24
+ })
25
+ };
14
26
  }
15
27
  /**
16
28
  * Get the balance of the chequebook
@@ -22,7 +34,17 @@ export async function getChequebookBalance(requestOptions) {
22
34
  url: chequebookEndpoint + '/balance',
23
35
  responseType: 'json'
24
36
  });
25
- return response.data;
37
+ const body = Types.asObject(response.data, {
38
+ name: 'response.data'
39
+ });
40
+ return {
41
+ availableBalance: BZZ.fromPLUR(asNumberString(body.availableBalance, {
42
+ name: 'availableBalance'
43
+ })),
44
+ totalBalance: BZZ.fromPLUR(asNumberString(body.totalBalance, {
45
+ name: 'totalBalance'
46
+ }))
47
+ };
26
48
  }
27
49
  /**
28
50
  * Get last cashout action for the peer
@@ -35,7 +57,20 @@ export async function getLastCashoutAction(requestOptions, peer) {
35
57
  url: chequebookEndpoint + `/cashout/${peer}`,
36
58
  responseType: 'json'
37
59
  });
38
- return response.data;
60
+ const body = Types.asObject(response.data, {
61
+ name: 'response.data'
62
+ });
63
+ return {
64
+ peer: Types.asString(body.peer, {
65
+ name: 'peer'
66
+ }),
67
+ uncashedAmount: BZZ.fromPLUR(asNumberString(body.uncashedAmount, {
68
+ name: 'uncashedAmount'
69
+ })),
70
+ transactionHash: Types.asNullableString(body.transactionHash),
71
+ lastCashedCheque: Types.asNullable(x => asCheque(x), body.lastCashedCheque),
72
+ result: Types.asNullable(x => asCashoutResult(x), body.result)
73
+ };
39
74
  }
40
75
  /**
41
76
  * Cashout the last cheque for the peer
@@ -45,20 +80,18 @@ export async function getLastCashoutAction(requestOptions, peer) {
45
80
  * @param options
46
81
  */
47
82
  export async function cashoutLastCheque(requestOptions, peer, options) {
48
- const headers = {};
49
- if (options?.gasPrice) {
50
- headers['gas-price'] = options.gasPrice.toString();
51
- }
52
- if (options?.gasLimit) {
53
- headers['gas-limit'] = options.gasLimit.toString();
54
- }
55
83
  const response = await http(requestOptions, {
56
84
  method: 'post',
57
85
  url: chequebookEndpoint + `/cashout/${peer}`,
58
86
  responseType: 'json',
59
- headers
87
+ headers: prepareRequestHeaders(null, options)
88
+ });
89
+ const body = Types.asObject(response.data, {
90
+ name: 'response.data'
60
91
  });
61
- return response.data.transactionHash;
92
+ return new TransactionId(Types.asString(body.transactionHash, {
93
+ name: 'transactionHash'
94
+ }));
62
95
  }
63
96
  /**
64
97
  * Get last cheques for the peer
@@ -71,7 +104,16 @@ export async function getLastChequesForPeer(requestOptions, peer) {
71
104
  url: chequebookEndpoint + `/cheque/${peer}`,
72
105
  responseType: 'json'
73
106
  });
74
- return response.data;
107
+ const body = Types.asObject(response.data, {
108
+ name: 'response.data'
109
+ });
110
+ return {
111
+ peer: Types.asString(body.peer, {
112
+ name: 'peer'
113
+ }),
114
+ lastreceived: Types.asNullable(x => asCheque(x), body.lastreceived),
115
+ lastsent: Types.asNullable(x => asCheque(x), body.lastsent)
116
+ };
75
117
  }
76
118
  /**
77
119
  * Get last cheques for all peers
@@ -83,7 +125,55 @@ export async function getLastCheques(requestOptions) {
83
125
  url: chequebookEndpoint + '/cheque',
84
126
  responseType: 'json'
85
127
  });
86
- return response.data;
128
+ const body = Types.asObject(response.data, {
129
+ name: 'response.data'
130
+ });
131
+ const lastcheques = Types.asArray(body.lastcheques, {
132
+ name: 'lastcheques'
133
+ }).map(x => Types.asObject(x, {
134
+ name: 'lastcheque'
135
+ }));
136
+ return {
137
+ lastcheques: lastcheques.map(x => ({
138
+ peer: Types.asString(x.peer, {
139
+ name: 'peer'
140
+ }),
141
+ lastreceived: Types.asNullable(y => asCheque(y), x.lastreceived),
142
+ lastsent: Types.asNullable(y => asCheque(y), x.lastsent)
143
+ }))
144
+ };
145
+ }
146
+ function asCheque(x) {
147
+ const object = Types.asObject(x, {
148
+ name: 'cheque'
149
+ });
150
+ return {
151
+ beneficiary: new EthAddress(Types.asString(object.beneficiary, {
152
+ name: 'beneficiary'
153
+ })),
154
+ chequebook: new EthAddress(Types.asString(object.chequebook, {
155
+ name: 'chequebook'
156
+ })),
157
+ payout: BZZ.fromPLUR(asNumberString(object.payout, {
158
+ name: 'payout'
159
+ }))
160
+ };
161
+ }
162
+ function asCashoutResult(x) {
163
+ const object = Types.asObject(x, {
164
+ name: 'cashout result'
165
+ });
166
+ return {
167
+ recipient: Types.asString(object.recipient, {
168
+ name: 'recipient'
169
+ }),
170
+ lastPayout: BZZ.fromPLUR(asNumberString(object.lastPayout, {
171
+ name: 'lastPayout'
172
+ })),
173
+ bounced: Types.asBoolean(object.bounced, {
174
+ name: 'bounced'
175
+ })
176
+ };
87
177
  }
88
178
  /**
89
179
  * Deposit tokens from overlay address into chequebook
@@ -107,7 +197,12 @@ export async function depositTokens(requestOptions, amount, gasPrice) {
107
197
  },
108
198
  headers
109
199
  });
110
- return response.data.transactionHash;
200
+ const body = Types.asObject(response.data, {
201
+ name: 'response.data'
202
+ });
203
+ return new TransactionId(Types.asString(body.transactionHash, {
204
+ name: 'transactionHash'
205
+ }));
111
206
  }
112
207
  /**
113
208
  * Withdraw tokens from the chequebook to the overlay address
@@ -131,5 +226,10 @@ export async function withdrawTokens(requestOptions, amount, gasPrice) {
131
226
  },
132
227
  headers
133
228
  });
134
- return response.data.transactionHash;
229
+ const body = Types.asObject(response.data, {
230
+ name: 'response.data'
231
+ });
232
+ return new TransactionId(Types.asString(body.transactionHash, {
233
+ name: 'transactionHash'
234
+ }));
135
235
  }
@@ -1,17 +1,56 @@
1
+ import { Types } from 'cafe-utility';
1
2
  import { http } from "../../utils/http.js";
3
+ import { EthAddress, PeerAddress, PublicKey } from "../../utils/typed-bytes.js";
2
4
  export async function getNodeAddresses(requestOptions) {
3
5
  const response = await http(requestOptions, {
4
6
  url: 'addresses',
5
7
  responseType: 'json'
6
8
  });
7
- return response.data;
9
+ const body = Types.asObject(response.data, {
10
+ name: 'response.data'
11
+ });
12
+ return {
13
+ overlay: new PeerAddress(Types.asString(body.overlay, {
14
+ name: 'overlay'
15
+ })),
16
+ underlay: Types.asArray(body.underlay, {
17
+ name: 'underlay'
18
+ }).map(x => Types.asString(x, {
19
+ name: 'underlay'
20
+ })),
21
+ ethereum: new EthAddress(Types.asString(body.ethereum, {
22
+ name: 'ethereum'
23
+ })),
24
+ publicKey: new PublicKey(Types.asString(body.publicKey, {
25
+ name: 'publicKey'
26
+ })),
27
+ pssPublicKey: new PublicKey(Types.asString(body.pssPublicKey, {
28
+ name: 'pssPublicKey'
29
+ }))
30
+ };
8
31
  }
9
32
  export async function getPeers(requestOptions) {
10
33
  const response = await http(requestOptions, {
11
34
  url: 'peers',
12
35
  responseType: 'json'
13
36
  });
14
- return response.data.peers;
37
+ const body = Types.asObject(response.data, {
38
+ name: 'response.data'
39
+ });
40
+ return Types.asArray(body.peers, {
41
+ name: 'peers'
42
+ }).map(x => ({
43
+ address: Types.asString(Types.asObject(x, {
44
+ name: 'peer'
45
+ }).address, {
46
+ name: 'address'
47
+ }),
48
+ fullNode: Types.asBoolean(Types.asObject(x, {
49
+ name: 'peer'
50
+ }).fullNode, {
51
+ name: 'fullNode'
52
+ })
53
+ }));
15
54
  }
16
55
  export async function getBlocklist(requestOptions) {
17
56
  const response = await http(requestOptions, {
@@ -33,7 +72,72 @@ export async function getTopology(requestOptions) {
33
72
  url: `topology`,
34
73
  responseType: 'json'
35
74
  });
36
- return response.data;
75
+ const body = Types.asObject(response.data, {
76
+ name: 'response.data'
77
+ });
78
+ const bins = Types.asObject(body.bins, {
79
+ name: 'bins'
80
+ });
81
+ return {
82
+ baseAddr: Types.asString(body.baseAddr, {
83
+ name: 'baseAddr'
84
+ }),
85
+ population: Types.asNumber(body.population, {
86
+ name: 'population'
87
+ }),
88
+ connected: Types.asNumber(body.connected, {
89
+ name: 'connected'
90
+ }),
91
+ timestamp: Types.asString(body.timestamp, {
92
+ name: 'timestamp'
93
+ }),
94
+ nnLowWatermark: Types.asNumber(body.nnLowWatermark, {
95
+ name: 'nnLowWatermark'
96
+ }),
97
+ depth: Types.asNumber(body.depth, {
98
+ name: 'depth'
99
+ }),
100
+ reachability: Types.asString(body.reachability, {
101
+ name: 'reachability'
102
+ }),
103
+ networkAvailability: Types.asString(body.networkAvailability, {
104
+ name: 'networkAvailability'
105
+ }),
106
+ bins: {
107
+ bin_0: asBin(bins.bin_0, 'bin_0'),
108
+ bin_1: asBin(bins.bin_1, 'bin_1'),
109
+ bin_2: asBin(bins.bin_2, 'bin_2'),
110
+ bin_3: asBin(bins.bin_3, 'bin_3'),
111
+ bin_4: asBin(bins.bin_4, 'bin_4'),
112
+ bin_5: asBin(bins.bin_5, 'bin_5'),
113
+ bin_6: asBin(bins.bin_6, 'bin_6'),
114
+ bin_7: asBin(bins.bin_7, 'bin_7'),
115
+ bin_8: asBin(bins.bin_8, 'bin_8'),
116
+ bin_9: asBin(bins.bin_9, 'bin_9'),
117
+ bin_10: asBin(bins.bin_10, 'bin_10'),
118
+ bin_11: asBin(bins.bin_11, 'bin_11'),
119
+ bin_12: asBin(bins.bin_12, 'bin_12'),
120
+ bin_13: asBin(bins.bin_13, 'bin_13'),
121
+ bin_14: asBin(bins.bin_14, 'bin_14'),
122
+ bin_15: asBin(bins.bin_15, 'bin_15'),
123
+ bin_16: asBin(bins.bin_16, 'bin_16'),
124
+ bin_17: asBin(bins.bin_17, 'bin_17'),
125
+ bin_18: asBin(bins.bin_18, 'bin_18'),
126
+ bin_19: asBin(bins.bin_19, 'bin_19'),
127
+ bin_20: asBin(bins.bin_20, 'bin_20'),
128
+ bin_21: asBin(bins.bin_21, 'bin_21'),
129
+ bin_22: asBin(bins.bin_22, 'bin_22'),
130
+ bin_23: asBin(bins.bin_23, 'bin_23'),
131
+ bin_24: asBin(bins.bin_24, 'bin_24'),
132
+ bin_25: asBin(bins.bin_25, 'bin_25'),
133
+ bin_26: asBin(bins.bin_26, 'bin_26'),
134
+ bin_27: asBin(bins.bin_27, 'bin_27'),
135
+ bin_28: asBin(bins.bin_28, 'bin_28'),
136
+ bin_29: asBin(bins.bin_29, 'bin_29'),
137
+ bin_30: asBin(bins.bin_30, 'bin_30'),
138
+ bin_31: asBin(bins.bin_31, 'bin_31')
139
+ }
140
+ };
37
141
  }
38
142
  export async function pingPeer(requestOptions, peer) {
39
143
  const response = await http(requestOptions, {
@@ -42,4 +146,41 @@ export async function pingPeer(requestOptions, peer) {
42
146
  method: 'POST'
43
147
  });
44
148
  return response.data;
149
+ }
150
+ export function asBin(value, name) {
151
+ const bin = Types.asObject(value, {
152
+ name
153
+ });
154
+ if (!bin.disconnectedPeers) {
155
+ bin.disconnectedPeers = [];
156
+ }
157
+ if (!bin.connectedPeers) {
158
+ bin.connectedPeers = [];
159
+ }
160
+ return {
161
+ population: Types.asNumber(bin.population, {
162
+ name: 'population'
163
+ }),
164
+ connected: Types.asNumber(bin.connected, {
165
+ name: 'connected'
166
+ }),
167
+ connectedPeers: Types.asArray(bin.connectedPeers, {
168
+ name: 'connectedPeers'
169
+ }).map(x => ({
170
+ address: Types.asString(Types.asObject(x, {
171
+ name: 'connectedPeer'
172
+ }).address, {
173
+ name: 'address'
174
+ })
175
+ })),
176
+ disconnectedPeers: Types.asArray(bin.disconnectedPeers, {
177
+ name: 'disconnectedPeers'
178
+ }).map(x => ({
179
+ address: Types.asString(Types.asObject(x, {
180
+ name: 'disconnectedPeer'
181
+ }).address, {
182
+ name: 'address'
183
+ })
184
+ }))
185
+ };
45
186
  }
@@ -1,4 +1,7 @@
1
+ import { Types } from 'cafe-utility';
1
2
  import { http } from "../../utils/http.js";
3
+ import { BZZ } from "../../utils/tokens.js";
4
+ import { asNumberString } from "../../utils/type.js";
2
5
  const settlementsEndpoint = 'settlements';
3
6
  /**
4
7
  * Get amount of sent and received from settlements with a peer
@@ -11,7 +14,20 @@ export async function getSettlements(requestOptions, peer) {
11
14
  url: `${settlementsEndpoint}/${peer}`,
12
15
  responseType: 'json'
13
16
  });
14
- return response.data;
17
+ const body = Types.asObject(response.data, {
18
+ name: 'response.data'
19
+ });
20
+ return {
21
+ peer: Types.asString(body.peer, {
22
+ name: 'peer'
23
+ }),
24
+ sent: BZZ.fromPLUR(asNumberString(body.sent, {
25
+ name: 'sent'
26
+ })),
27
+ received: BZZ.fromPLUR(asNumberString(body.received, {
28
+ name: 'received'
29
+ }))
30
+ };
15
31
  }
16
32
  /**
17
33
  * Get settlements with all known peers and total amount sent or received
@@ -23,5 +39,33 @@ export async function getAllSettlements(requestOptions) {
23
39
  url: settlementsEndpoint,
24
40
  responseType: 'json'
25
41
  });
26
- return response.data;
42
+ const body = Types.asObject(response.data, {
43
+ name: 'response.data'
44
+ });
45
+ const totalSent = BZZ.fromPLUR(asNumberString(body.totalSent, {
46
+ name: 'totalSent'
47
+ }));
48
+ const totalReceived = BZZ.fromPLUR(asNumberString(body.totalReceived, {
49
+ name: 'totalReceived'
50
+ }));
51
+ const settlements = Types.asArray(body.settlements, {
52
+ name: 'settlements'
53
+ }).map(x => Types.asObject(x, {
54
+ name: 'settlement'
55
+ }));
56
+ return {
57
+ totalSent,
58
+ totalReceived,
59
+ settlements: settlements.map(x => ({
60
+ peer: Types.asString(x.peer, {
61
+ name: 'peer'
62
+ }),
63
+ sent: BZZ.fromPLUR(asNumberString(x.sent, {
64
+ name: 'sent'
65
+ })),
66
+ received: BZZ.fromPLUR(asNumberString(x.received, {
67
+ name: 'received'
68
+ }))
69
+ }))
70
+ };
27
71
  }
@@ -1,4 +1,9 @@
1
+ import { Types } from 'cafe-utility';
2
+ import { prepareRequestHeaders } from "../../utils/headers.js";
1
3
  import { http } from "../../utils/http.js";
4
+ import { BZZ, DAI } from "../../utils/tokens.js";
5
+ import { asNumberString } from "../../utils/type.js";
6
+ import { TransactionId } from "../../utils/typed-bytes.js";
2
7
  const STAKE_ENDPOINT = 'stake';
3
8
  const REDISTRIBUTION_ENDPOINT = 'redistributionstate';
4
9
  /**
@@ -12,7 +17,12 @@ export async function getStake(requestOptions) {
12
17
  responseType: 'json',
13
18
  url: `${STAKE_ENDPOINT}`
14
19
  });
15
- return response.data.stakedAmount.toString();
20
+ const body = Types.asObject(response.data, {
21
+ name: 'response.data'
22
+ });
23
+ return BZZ.fromPLUR(asNumberString(body.stakedAmount, {
24
+ name: 'stakedAmount'
25
+ }));
16
26
  }
17
27
  /**
18
28
  * Stake given amount of tokens.
@@ -22,19 +32,18 @@ export async function getStake(requestOptions) {
22
32
  * @param options
23
33
  */
24
34
  export async function stake(requestOptions, amount, options) {
25
- const headers = {};
26
- if (options?.gasPrice) {
27
- headers['gas-price'] = options.gasPrice.toString();
28
- }
29
- if (options?.gasLimit) {
30
- headers['gas-limit'] = options.gasLimit.toString();
31
- }
32
- await http(requestOptions, {
35
+ const repsonse = await http(requestOptions, {
33
36
  method: 'post',
34
37
  responseType: 'json',
35
38
  url: `${STAKE_ENDPOINT}/${amount}`,
36
- headers
39
+ headers: prepareRequestHeaders(null, options)
40
+ });
41
+ const body = Types.asObject(repsonse.data, {
42
+ name: 'response.data'
37
43
  });
44
+ return new TransactionId(Types.asHexString(body.txHash, {
45
+ name: 'txHash'
46
+ }));
38
47
  }
39
48
  /**
40
49
  * Get current status of node in redistribution game
@@ -47,5 +56,54 @@ export async function getRedistributionState(requestOptions) {
47
56
  responseType: 'json',
48
57
  url: REDISTRIBUTION_ENDPOINT
49
58
  });
50
- return response.data;
59
+ const body = Types.asObject(response.data, {
60
+ name: 'response.data'
61
+ });
62
+ return {
63
+ minimumGasFunds: DAI.fromWei(asNumberString(body.minimumGasFunds, {
64
+ name: 'minimumGasFunds'
65
+ })),
66
+ hasSufficientFunds: Types.asBoolean(body.hasSufficientFunds, {
67
+ name: 'hasSufficientFunds'
68
+ }),
69
+ isFrozen: Types.asBoolean(body.isFrozen, {
70
+ name: 'isFrozen'
71
+ }),
72
+ isFullySynced: Types.asBoolean(body.isFullySynced, {
73
+ name: 'isFullySynced'
74
+ }),
75
+ phase: Types.asString(body.phase, {
76
+ name: 'phase'
77
+ }),
78
+ round: Types.asNumber(body.round, {
79
+ name: 'round'
80
+ }),
81
+ lastWonRound: Types.asNumber(body.lastWonRound, {
82
+ name: 'lastWonRound'
83
+ }),
84
+ lastPlayedRound: Types.asNumber(body.lastPlayedRound, {
85
+ name: 'lastPlayedRound'
86
+ }),
87
+ lastFrozenRound: Types.asNumber(body.lastFrozenRound, {
88
+ name: 'lastFrozenRound'
89
+ }),
90
+ lastSelectedRound: Types.asNumber(body.lastSelectedRound, {
91
+ name: 'lastSelectedRound'
92
+ }),
93
+ lastSampleDurationSeconds: Types.asNumber(body.lastSampleDurationSeconds, {
94
+ name: 'lastSampleDurationSeconds'
95
+ }),
96
+ block: Types.asNumber(body.block, {
97
+ name: 'block'
98
+ }),
99
+ reward: BZZ.fromPLUR(asNumberString(body.reward, {
100
+ name: 'reward'
101
+ })),
102
+ fees: DAI.fromWei(asNumberString(body.fees, {
103
+ name: 'fees'
104
+ })),
105
+ isHealthy: Types.asBoolean(body.isHealthy, {
106
+ name: 'isHealthy'
107
+ })
108
+ };
51
109
  }