@super-protocol/sdk-js 3.16.4 → 3.17.0

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 (215) hide show
  1. package/dist/cjs/RIGenerator.d.ts +3 -2
  2. package/dist/cjs/RIGenerator.js +7 -6
  3. package/dist/cjs/TIIGenerator.d.ts +2 -2
  4. package/dist/cjs/TIIGenerator.js +32 -4
  5. package/dist/cjs/TeeInputGeneratorBase.d.ts +3 -3
  6. package/dist/cjs/TeeInputGeneratorBase.js +5 -5
  7. package/dist/cjs/certificates/serializer.d.ts +5 -3
  8. package/dist/cjs/certificates/serializer.js +26 -11
  9. package/dist/cjs/certificates/types.d.ts +1 -1
  10. package/dist/cjs/connectors/BaseConnector.d.ts +3 -3
  11. package/dist/cjs/connectors/BaseConnector.js +1 -1
  12. package/dist/cjs/connectors/BlockchainConnector.js +3 -3
  13. package/dist/cjs/connectors/BlockchainEventsListener.d.ts +2 -2
  14. package/dist/cjs/connectors/BlockchainEventsListener.js +3 -2
  15. package/dist/cjs/constants.d.ts +1 -3
  16. package/dist/cjs/constants.js +3 -7
  17. package/dist/cjs/contracts/abi.d.ts +1067 -1137
  18. package/dist/cjs/contracts/abi.js +1408 -1500
  19. package/dist/cjs/crypto/Crypto.d.ts +10 -13
  20. package/dist/cjs/crypto/Crypto.js +14 -17
  21. package/dist/cjs/crypto/nodejs/AES.d.ts +1 -1
  22. package/dist/cjs/crypto/nodejs/AES.js +2 -2
  23. package/dist/cjs/crypto/nodejs/ARIA.d.ts +1 -1
  24. package/dist/cjs/crypto/nodejs/ARIA.js +2 -2
  25. package/dist/cjs/errors/index.d.ts +1 -0
  26. package/dist/cjs/errors/index.js +4 -2
  27. package/dist/cjs/errors/insufficient-funds.error.d.ts +19 -0
  28. package/dist/cjs/errors/insufficient-funds.error.js +57 -0
  29. package/dist/cjs/index.d.ts +3 -6
  30. package/dist/cjs/index.js +6 -9
  31. package/dist/cjs/models/Offer.d.ts +16 -1
  32. package/dist/cjs/models/Offer.js +59 -9
  33. package/dist/cjs/models/Order.d.ts +1 -1
  34. package/dist/cjs/models/Order.js +11 -15
  35. package/dist/cjs/models/Provider.d.ts +0 -1
  36. package/dist/cjs/models/Provider.js +1 -7
  37. package/dist/cjs/models/TCB.d.ts +1 -28
  38. package/dist/cjs/models/TCB.js +1 -61
  39. package/dist/cjs/models/TeeOffer.d.ts +3 -18
  40. package/dist/cjs/models/TeeOffer.js +20 -106
  41. package/dist/cjs/providers/storage/S3StorageProvider.js +5 -5
  42. package/dist/cjs/providers/storage/StorageKeyValueAdapter.d.ts +1 -1
  43. package/dist/cjs/providers/storage/StorageKeyValueAdapter.js +7 -7
  44. package/dist/cjs/providers/storage/fs-storage-provider.js +35 -15
  45. package/dist/cjs/providers/storage/parseStorageCredentials.d.ts +1 -2
  46. package/dist/cjs/staticModels/Consensus.d.ts +5 -16
  47. package/dist/cjs/staticModels/Consensus.js +17 -86
  48. package/dist/cjs/staticModels/Offers.d.ts +4 -1
  49. package/dist/cjs/staticModels/Offers.js +9 -8
  50. package/dist/cjs/staticModels/OffersCommon.d.ts +3 -1
  51. package/dist/cjs/staticModels/OffersCommon.js +6 -2
  52. package/dist/cjs/staticModels/Orders.js +12 -11
  53. package/dist/cjs/staticModels/ProviderRewards.js +2 -2
  54. package/dist/cjs/staticModels/StaticModel.js +5 -5
  55. package/dist/cjs/staticModels/SuperproToken.d.ts +7 -7
  56. package/dist/cjs/staticModels/SuperproToken.js +3 -3
  57. package/dist/cjs/staticModels/TeeOffers.d.ts +1 -7
  58. package/dist/cjs/staticModels/TeeOffers.js +11 -20
  59. package/dist/cjs/store.d.ts +0 -1
  60. package/dist/cjs/store.js +1 -2
  61. package/dist/cjs/tee/TeeBlockVerifier.d.ts +1 -2
  62. package/dist/cjs/tee/TeeBlockVerifier.js +17 -24
  63. package/dist/cjs/tee/TeeCertificateService.d.ts +1 -1
  64. package/dist/cjs/tee/TeeCertificateService.js +6 -10
  65. package/dist/cjs/tee/statuses.d.ts +0 -7
  66. package/dist/cjs/tee/statuses.js +2 -10
  67. package/dist/cjs/types/Consensus.d.ts +10 -31
  68. package/dist/cjs/types/Consensus.js +2 -10
  69. package/dist/cjs/types/Offer.d.ts +5 -0
  70. package/dist/cjs/types/Order.d.ts +26 -21
  71. package/dist/cjs/types/Order.js +24 -17
  72. package/dist/cjs/types/index.d.ts +0 -1
  73. package/dist/cjs/types/index.js +1 -2
  74. package/dist/cjs/utils/CryptoKeysTransformer.js +5 -5
  75. package/dist/cjs/utils/TxManager.js +21 -5
  76. package/dist/cjs/utils/helper.d.ts +2 -8
  77. package/dist/cjs/utils/helper.js +6 -75
  78. package/dist/cjs/utils/helpers/OrderArgsHelper.d.ts +2 -2
  79. package/dist/cjs/utils/helpers/OrderArgsHelper.js +5 -5
  80. package/dist/cjs/utils/helpers/index.d.ts +1 -0
  81. package/dist/cjs/utils/helpers/index.js +2 -1
  82. package/dist/cjs/utils/helpers/streamToBuffer.d.ts +4 -0
  83. package/dist/cjs/utils/helpers/streamToBuffer.js +13 -0
  84. package/dist/cjs/utils/order/versify.js +1 -7
  85. package/dist/cjs/utils/rent-calculator/rent-calculator.js +2 -3
  86. package/dist/cjs/utils/rent-calculator/types.d.ts +0 -1
  87. package/dist/cjs/utils/tcb.d.ts +2 -0
  88. package/dist/cjs/utils/tcb.js +13 -0
  89. package/dist/cjs/utils/types.d.ts +0 -5
  90. package/dist/mjs/RIGenerator.d.ts +3 -2
  91. package/dist/mjs/RIGenerator.js +8 -7
  92. package/dist/mjs/TIIGenerator.d.ts +2 -2
  93. package/dist/mjs/TIIGenerator.js +32 -4
  94. package/dist/mjs/TeeInputGeneratorBase.d.ts +3 -3
  95. package/dist/mjs/TeeInputGeneratorBase.js +5 -5
  96. package/dist/mjs/certificates/serializer.d.ts +5 -3
  97. package/dist/mjs/certificates/serializer.js +26 -11
  98. package/dist/mjs/certificates/types.d.ts +1 -1
  99. package/dist/mjs/connectors/BaseConnector.d.ts +3 -3
  100. package/dist/mjs/connectors/BaseConnector.js +1 -1
  101. package/dist/mjs/connectors/BlockchainConnector.js +3 -3
  102. package/dist/mjs/connectors/BlockchainEventsListener.d.ts +2 -2
  103. package/dist/mjs/connectors/BlockchainEventsListener.js +3 -2
  104. package/dist/mjs/constants.d.ts +1 -3
  105. package/dist/mjs/constants.js +2 -6
  106. package/dist/mjs/contracts/abi.d.ts +1067 -1137
  107. package/dist/mjs/contracts/abi.js +1406 -1498
  108. package/dist/mjs/crypto/Crypto.d.ts +10 -13
  109. package/dist/mjs/crypto/Crypto.js +14 -17
  110. package/dist/mjs/crypto/nodejs/AES.d.ts +1 -1
  111. package/dist/mjs/crypto/nodejs/AES.js +2 -2
  112. package/dist/mjs/crypto/nodejs/ARIA.d.ts +1 -1
  113. package/dist/mjs/crypto/nodejs/ARIA.js +2 -2
  114. package/dist/mjs/errors/index.d.ts +1 -0
  115. package/dist/mjs/errors/index.js +2 -1
  116. package/dist/mjs/errors/insufficient-funds.error.d.ts +19 -0
  117. package/dist/mjs/errors/insufficient-funds.error.js +53 -0
  118. package/dist/mjs/index.d.ts +3 -6
  119. package/dist/mjs/index.js +4 -7
  120. package/dist/mjs/models/Offer.d.ts +16 -1
  121. package/dist/mjs/models/Offer.js +53 -3
  122. package/dist/mjs/models/Order.d.ts +1 -1
  123. package/dist/mjs/models/Order.js +11 -15
  124. package/dist/mjs/models/Provider.d.ts +0 -1
  125. package/dist/mjs/models/Provider.js +1 -7
  126. package/dist/mjs/models/TCB.d.ts +1 -28
  127. package/dist/mjs/models/TCB.js +2 -62
  128. package/dist/mjs/models/TeeOffer.d.ts +3 -18
  129. package/dist/mjs/models/TeeOffer.js +13 -99
  130. package/dist/mjs/providers/storage/S3StorageProvider.js +5 -5
  131. package/dist/mjs/providers/storage/StorageKeyValueAdapter.d.ts +1 -1
  132. package/dist/mjs/providers/storage/StorageKeyValueAdapter.js +7 -7
  133. package/dist/mjs/providers/storage/fs-storage-provider.js +35 -15
  134. package/dist/mjs/providers/storage/parseStorageCredentials.d.ts +1 -2
  135. package/dist/mjs/staticModels/Consensus.d.ts +5 -16
  136. package/dist/mjs/staticModels/Consensus.js +18 -87
  137. package/dist/mjs/staticModels/Offers.d.ts +4 -1
  138. package/dist/mjs/staticModels/Offers.js +9 -8
  139. package/dist/mjs/staticModels/OffersCommon.d.ts +3 -1
  140. package/dist/mjs/staticModels/OffersCommon.js +6 -2
  141. package/dist/mjs/staticModels/Orders.js +12 -11
  142. package/dist/mjs/staticModels/ProviderRewards.js +3 -3
  143. package/dist/mjs/staticModels/StaticModel.js +5 -5
  144. package/dist/mjs/staticModels/SuperproToken.d.ts +7 -7
  145. package/dist/mjs/staticModels/SuperproToken.js +3 -3
  146. package/dist/mjs/staticModels/TeeOffers.d.ts +1 -7
  147. package/dist/mjs/staticModels/TeeOffers.js +12 -21
  148. package/dist/mjs/store.d.ts +0 -1
  149. package/dist/mjs/store.js +2 -3
  150. package/dist/mjs/tee/TeeBlockVerifier.d.ts +1 -2
  151. package/dist/mjs/tee/TeeBlockVerifier.js +17 -24
  152. package/dist/mjs/tee/TeeCertificateService.d.ts +1 -1
  153. package/dist/mjs/tee/TeeCertificateService.js +7 -11
  154. package/dist/mjs/tee/statuses.d.ts +0 -7
  155. package/dist/mjs/tee/statuses.js +1 -9
  156. package/dist/mjs/types/Consensus.d.ts +10 -31
  157. package/dist/mjs/types/Consensus.js +1 -9
  158. package/dist/mjs/types/Offer.d.ts +5 -0
  159. package/dist/mjs/types/Order.d.ts +26 -21
  160. package/dist/mjs/types/Order.js +21 -17
  161. package/dist/mjs/types/index.d.ts +0 -1
  162. package/dist/mjs/types/index.js +1 -2
  163. package/dist/mjs/utils/CryptoKeysTransformer.js +5 -5
  164. package/dist/mjs/utils/TxManager.js +21 -5
  165. package/dist/mjs/utils/helper.d.ts +2 -8
  166. package/dist/mjs/utils/helper.js +5 -68
  167. package/dist/mjs/utils/helpers/OrderArgsHelper.d.ts +2 -2
  168. package/dist/mjs/utils/helpers/OrderArgsHelper.js +5 -5
  169. package/dist/mjs/utils/helpers/index.d.ts +1 -0
  170. package/dist/mjs/utils/helpers/index.js +2 -1
  171. package/dist/mjs/utils/helpers/streamToBuffer.d.ts +4 -0
  172. package/dist/mjs/utils/helpers/streamToBuffer.js +9 -0
  173. package/dist/mjs/utils/order/versify.js +1 -7
  174. package/dist/mjs/utils/rent-calculator/rent-calculator.js +2 -3
  175. package/dist/mjs/utils/rent-calculator/types.d.ts +0 -1
  176. package/dist/mjs/utils/tcb.d.ts +2 -0
  177. package/dist/mjs/utils/tcb.js +9 -0
  178. package/dist/mjs/utils/types.d.ts +0 -5
  179. package/package.json +8 -9
  180. package/dist/cjs/contracts/Campaign.d.ts +0 -1198
  181. package/dist/cjs/contracts/Campaign.js +0 -1554
  182. package/dist/cjs/contracts/adminCertificateHelperAbi.d.ts +0 -316
  183. package/dist/cjs/contracts/adminCertificateHelperAbi.js +0 -410
  184. package/dist/cjs/proto/TeeDeviceInfo.d.ts +0 -292
  185. package/dist/cjs/proto/TeeDeviceInfo.js +0 -491
  186. package/dist/cjs/staticModels/AdminCertificateHelper.d.ts +0 -24
  187. package/dist/cjs/staticModels/AdminCertificateHelper.js +0 -99
  188. package/dist/cjs/staticModels/Campaign.d.ts +0 -62
  189. package/dist/cjs/staticModels/Campaign.js +0 -318
  190. package/dist/cjs/tee/QuoteValidator.d.ts +0 -46
  191. package/dist/cjs/tee/QuoteValidator.js +0 -456
  192. package/dist/cjs/tee/TcbSerializer.d.ts +0 -20
  193. package/dist/cjs/tee/TcbSerializer.js +0 -27
  194. package/dist/cjs/types/Campaign.d.ts +0 -55
  195. package/dist/cjs/types/Campaign.js +0 -17
  196. package/dist/cjs/utils/admin-service.d.ts +0 -13
  197. package/dist/cjs/utils/admin-service.js +0 -73
  198. package/dist/mjs/contracts/Campaign.d.ts +0 -1198
  199. package/dist/mjs/contracts/Campaign.js +0 -1551
  200. package/dist/mjs/contracts/adminCertificateHelperAbi.d.ts +0 -316
  201. package/dist/mjs/contracts/adminCertificateHelperAbi.js +0 -407
  202. package/dist/mjs/proto/TeeDeviceInfo.d.ts +0 -292
  203. package/dist/mjs/proto/TeeDeviceInfo.js +0 -485
  204. package/dist/mjs/staticModels/AdminCertificateHelper.d.ts +0 -24
  205. package/dist/mjs/staticModels/AdminCertificateHelper.js +0 -92
  206. package/dist/mjs/staticModels/Campaign.d.ts +0 -62
  207. package/dist/mjs/staticModels/Campaign.js +0 -313
  208. package/dist/mjs/tee/QuoteValidator.d.ts +0 -46
  209. package/dist/mjs/tee/QuoteValidator.js +0 -449
  210. package/dist/mjs/tee/TcbSerializer.d.ts +0 -20
  211. package/dist/mjs/tee/TcbSerializer.js +0 -23
  212. package/dist/mjs/types/Campaign.d.ts +0 -55
  213. package/dist/mjs/types/Campaign.js +0 -14
  214. package/dist/mjs/utils/admin-service.d.ts +0 -13
  215. package/dist/mjs/utils/admin-service.js +0 -66
@@ -1,66 +0,0 @@
1
- import { createHash, createPrivateKey } from 'crypto';
2
- import { ethers } from 'ethers';
3
- import rootLogger from '../logger.js';
4
- import { CertificateSerializer, CertificatesHelper, } from '../certificates/index.js';
5
- import store from '../store.js';
6
- import { CryptoKeysTransformer } from '../utils/CryptoKeysTransformer.js';
7
- import { AdminCertificateHelper } from '../staticModels/AdminCertificateHelper.js';
8
- export class AdminService {
9
- logger = rootLogger.child({ module: AdminService.name });
10
- constructor(adminCertificateContractAddress) {
11
- AdminCertificateHelper.address = adminCertificateContractAddress;
12
- }
13
- async registerAdmin(params) {
14
- const { adminAccountAddress, certPrivateKeyPem, certsPem } = params;
15
- const { certs } = CertificatesHelper.extractCAFromChain(certsPem);
16
- const chain = CertificatesHelper.splitPemCerts(certs);
17
- if (!chain.length) {
18
- throw new Error('No certificates found to register admin');
19
- }
20
- const blockchainSerializedChain = chain.map((certPem) => CertificateSerializer.serializeForBlockchain(certPem));
21
- const signatureNonce = await AdminCertificateHelper.getSignatureNonce();
22
- const chainId = store.chainId;
23
- const signatureBase = store.web3Https.eth.abi.encodeParameters(['address', 'uint256', 'address', 'uint256'], [
24
- adminAccountAddress,
25
- BigInt(chainId),
26
- AdminCertificateHelper.address,
27
- BigInt(signatureNonce),
28
- ]);
29
- const messageBytes = Buffer.from(signatureBase.replace(/^0x/, ''), 'hex');
30
- const digest = createHash('sha256').update(messageBytes).digest();
31
- const keyObj = createPrivateKey(certPrivateKeyPem);
32
- const privHex = CryptoKeysTransformer.getStructuredPrivateKeyFromKeyObj(keyObj); // hex without 0x
33
- const signingKey = new ethers.utils.SigningKey('0x' + privHex);
34
- const sig = signingKey.signDigest('0x' + digest.toString('hex'));
35
- const signatureHex = ethers.utils.joinSignature(sig);
36
- this.logger.info({
37
- admin: adminAccountAddress,
38
- chainId,
39
- certsCount: chain.length,
40
- signatureNonce,
41
- signaturePreview: `${signatureHex.slice(0, 5)}…${signatureHex.slice(-5)}`,
42
- }, 'Registering admin with certificate');
43
- try {
44
- const tx = await AdminCertificateHelper.addAdmin(blockchainSerializedChain, signatureHex, {
45
- from: adminAccountAddress,
46
- });
47
- this.logger.trace({ admin: adminAccountAddress, txHash: tx.transactionHash }, 'Admin registration successful');
48
- }
49
- catch (err) {
50
- this.logger.error({ err }, 'Admin registration failed');
51
- throw err;
52
- }
53
- }
54
- async isAdmin(caller) {
55
- return await AdminCertificateHelper.isAdmin(caller);
56
- }
57
- async getAdminData() {
58
- const data = await AdminCertificateHelper.getAdminData();
59
- return {
60
- admin: data.admin,
61
- rootCertId: data.rootCertId,
62
- certsChain: data.certsChain,
63
- };
64
- }
65
- }
66
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiYWRtaW4tc2VydmljZS5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uL3NyYy91dGlscy9hZG1pbi1zZXJ2aWNlLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLE9BQU8sRUFBRSxVQUFVLEVBQUUsZ0JBQWdCLEVBQUUsTUFBTSxRQUFRLENBQUM7QUFDdEQsT0FBTyxFQUFFLE1BQU0sRUFBRSxNQUFNLFFBQVEsQ0FBQztBQUVoQyxPQUFPLFVBQVUsTUFBTSxjQUFjLENBQUM7QUFDdEMsT0FBTyxFQUVMLHFCQUFxQixFQUNyQixrQkFBa0IsR0FDbkIsTUFBTSwwQkFBMEIsQ0FBQztBQUNsQyxPQUFPLEtBQUssTUFBTSxhQUFhLENBQUM7QUFDaEMsT0FBTyxFQUFFLHFCQUFxQixFQUFFLE1BQU0sbUNBQW1DLENBQUM7QUFDMUUsT0FBTyxFQUFFLHNCQUFzQixFQUFFLE1BQU0sMkNBQTJDLENBQUM7QUFFbkYsTUFBTSxPQUFPLFlBQVk7SUFDTixNQUFNLEdBQUcsVUFBVSxDQUFDLEtBQUssQ0FBQyxFQUFFLE1BQU0sRUFBRSxZQUFZLENBQUMsSUFBSSxFQUFFLENBQUMsQ0FBQztJQUUxRSxZQUFZLCtCQUF1QztRQUNqRCxzQkFBc0IsQ0FBQyxPQUFPLEdBQUcsK0JBQStCLENBQUM7SUFDbkUsQ0FBQztJQUVELEtBQUssQ0FBQyxhQUFhLENBQUMsTUFBMkI7UUFDN0MsTUFBTSxFQUFFLG1CQUFtQixFQUFFLGlCQUFpQixFQUFFLFFBQVEsRUFBRSxHQUFHLE1BQU0sQ0FBQztRQUVwRSxNQUFNLEVBQUUsS0FBSyxFQUFFLEdBQUcsa0JBQWtCLENBQUMsa0JBQWtCLENBQUMsUUFBUSxDQUFDLENBQUM7UUFDbEUsTUFBTSxLQUFLLEdBQUcsa0JBQWtCLENBQUMsYUFBYSxDQUFDLEtBQUssQ0FBQyxDQUFDO1FBQ3RELElBQUksQ0FBQyxLQUFLLENBQUMsTUFBTSxFQUFFLENBQUM7WUFDbEIsTUFBTSxJQUFJLEtBQUssQ0FBQyx5Q0FBeUMs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