@super-protocol/sdk-js 0.15.0 → 0.15.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 (81) hide show
  1. package/build/TIIGenerator.js +129 -239
  2. package/build/connectors/BaseConnector.js +17 -47
  3. package/build/connectors/BlockchainConnector.js +222 -348
  4. package/build/connectors/BlockchainEventsListener.js +38 -92
  5. package/build/contracts/app.json +466 -35
  6. package/build/crypto/Crypto.js +63 -135
  7. package/build/crypto/index.js +1 -1
  8. package/build/crypto/nodejs/AES.js +62 -119
  9. package/build/crypto/nodejs/ARIA.js +61 -118
  10. package/build/crypto/nodejs/ECIES.js +51 -87
  11. package/build/crypto/nodejs/NativeCrypto.js +64 -118
  12. package/build/crypto/nodejs/RSA-Hybrid.js +54 -113
  13. package/build/index.d.ts +5 -0
  14. package/build/index.js +14 -2
  15. package/build/logger.d.ts +3 -1
  16. package/build/logger.js +2 -2
  17. package/build/models/EtlModel.js +65 -114
  18. package/build/models/Offer.js +227 -462
  19. package/build/models/Order.d.ts +4 -0
  20. package/build/models/Order.js +326 -559
  21. package/build/models/Provider.d.ts +2 -0
  22. package/build/models/Provider.js +74 -153
  23. package/build/models/TCB.js +67 -171
  24. package/build/models/TeeOffer.d.ts +1 -0
  25. package/build/models/TeeOffer.js +389 -731
  26. package/build/proto/Compression.js +20 -21
  27. package/build/proto/TRI.js +46 -50
  28. package/build/proto/TeeProperties.js +60 -66
  29. package/build/providers/storage/ChunksDownloadDecorator.js +125 -235
  30. package/build/providers/storage/S3StorageProvider.js +173 -298
  31. package/build/providers/storage/StorageAdapter.d.ts +60 -0
  32. package/build/providers/storage/StorageAdapter.js +317 -0
  33. package/build/providers/storage/StorageContentWriter.d.ts +39 -0
  34. package/build/providers/storage/StorageContentWriter.js +181 -0
  35. package/build/providers/storage/StorageKeyValueAdapter.d.ts +20 -0
  36. package/build/providers/storage/StorageKeyValueAdapter.js +152 -0
  37. package/build/providers/storage/StorageMetadataReader.d.ts +19 -0
  38. package/build/providers/storage/StorageMetadataReader.js +65 -0
  39. package/build/providers/storage/StorjAdapter.d.ts +19 -0
  40. package/build/providers/storage/StorjAdapter.js +62 -0
  41. package/build/providers/storage/StorjStorageProvider.js +138 -315
  42. package/build/providers/storage/getStorageProvider.js +7 -7
  43. package/build/providers/storage/types.d.ts +7 -0
  44. package/build/providers/storage/types.js +2 -0
  45. package/build/staticModels/ActiveOffers.js +32 -100
  46. package/build/staticModels/ActiveOrders.js +42 -120
  47. package/build/staticModels/BaseStaticModel.js +7 -10
  48. package/build/staticModels/Consensus.d.ts +4 -1
  49. package/build/staticModels/Consensus.js +164 -220
  50. package/build/staticModels/Deposits.js +109 -201
  51. package/build/staticModels/Marks.js +21 -82
  52. package/build/staticModels/ModelPackager.js +34 -84
  53. package/build/staticModels/Offers.js +140 -266
  54. package/build/staticModels/Orders.d.ts +1 -0
  55. package/build/staticModels/Orders.js +286 -429
  56. package/build/staticModels/ProviderRegistry.js +114 -225
  57. package/build/staticModels/Superpro.js +17 -63
  58. package/build/staticModels/SuperproToken.js +90 -169
  59. package/build/staticModels/TeeOffers.js +220 -416
  60. package/build/store.js +2 -2
  61. package/build/types/HardwareInfo.js +2 -2
  62. package/build/types/Order.js +4 -4
  63. package/build/types/Provider.js +1 -1
  64. package/build/types/TeeOfferInfo.js +1 -1
  65. package/build/types/TeeOfferOption.js +2 -2
  66. package/build/types/TeeOfferSlot.js +2 -2
  67. package/build/types/ValueOfferSlot.js +3 -3
  68. package/build/utils/Monitoring.js +24 -28
  69. package/build/utils/NonceTracker.js +56 -121
  70. package/build/utils/PubSub.d.ts +9 -0
  71. package/build/utils/PubSub.js +36 -0
  72. package/build/utils/TxManager.js +121 -215
  73. package/build/utils/compressors/GzipCompressor.js +13 -50
  74. package/build/utils/compressors/UncompressedCompressor.js +10 -13
  75. package/build/utils/helpers/tryWithInterval.js +34 -78
  76. package/build/utils/resourceLoaders/BaseResourceLoader.js +26 -78
  77. package/build/utils/resourceLoaders/StorageProviderLoader.js +33 -97
  78. package/build/utils/resourceLoaders/UrlResourceLoader.js +29 -93
  79. package/build/utils/resourceLoaders/getResourceLoader.js +6 -6
  80. package/build/utils.js +60 -105
  81. package/package.json +4 -1
@@ -0,0 +1,152 @@
1
+ "use strict";
2
+ var __awaiter = (this && this.__awaiter) || function (thisArg, _arguments, P, generator) {
3
+ function adopt(value) { return value instanceof P ? value : new P(function (resolve) { resolve(value); }); }
4
+ return new (P || (P = Promise))(function (resolve, reject) {
5
+ function fulfilled(value) { try { step(generator.next(value)); } catch (e) { reject(e); } }
6
+ function rejected(value) { try { step(generator["throw"](value)); } catch (e) { reject(e); } }
7
+ function step(result) { result.done ? resolve(result.value) : adopt(result.value).then(fulfilled, rejected); }
8
+ step((generator = generator.apply(thisArg, _arguments || [])).next());
9
+ });
10
+ };
11
+ var __importDefault = (this && this.__importDefault) || function (mod) {
12
+ return (mod && mod.__esModule) ? mod : { "default": mod };
13
+ };
14
+ Object.defineProperty(exports, "__esModule", { value: true });
15
+ const stream_1 = require("stream");
16
+ const dto_js_1 = require("@super-protocol/dto-js");
17
+ const getStorageProvider_1 = __importDefault(require("./getStorageProvider"));
18
+ const logger_1 = __importDefault(require("../../logger"));
19
+ const Crypto_1 = __importDefault(require("../../crypto/Crypto"));
20
+ class StorageKeyValueAdapter {
21
+ constructor(storageAccess) {
22
+ if (!(storageAccess === null || storageAccess === void 0 ? void 0 : storageAccess.credentials))
23
+ throw new Error("Credentials is empty");
24
+ this.logger = logger_1.default.child({ class: StorageKeyValueAdapter.name });
25
+ this.storageProvider = (0, getStorageProvider_1.default)(storageAccess);
26
+ }
27
+ decrypt(encryption, key) {
28
+ return __awaiter(this, void 0, void 0, function* () {
29
+ if (!encryption)
30
+ return null;
31
+ if (!key)
32
+ throw new Error("Key cannot be empty!");
33
+ encryption.key = key;
34
+ return JSON.parse(yield Crypto_1.default.decrypt(encryption));
35
+ });
36
+ }
37
+ encrypt(data, key) {
38
+ return __awaiter(this, void 0, void 0, function* () {
39
+ if (data === undefined)
40
+ throw new Error("Data cannot be empty!");
41
+ if (!key)
42
+ throw new Error("Private cannot be empty!");
43
+ return Crypto_1.default.encrypt(JSON.stringify(data), {
44
+ algo: dto_js_1.CryptoAlgorithm.AES,
45
+ encoding: dto_js_1.Encoding.base64,
46
+ key,
47
+ cipher: dto_js_1.Cipher.AES_256_GCM,
48
+ });
49
+ });
50
+ }
51
+ downloadFromStorage(filepath) {
52
+ return __awaiter(this, void 0, void 0, function* () {
53
+ const downloadStream = yield this.storageProvider.downloadFile(filepath, {});
54
+ return this.streamToString(downloadStream);
55
+ });
56
+ }
57
+ streamToString(stream) {
58
+ const chunks = [];
59
+ return new Promise((resolve, reject) => {
60
+ stream.on("data", (chunk) => {
61
+ chunks.push(Buffer.from(chunk));
62
+ });
63
+ stream.on("error", (err) => reject(err));
64
+ stream.on("end", () => resolve(Buffer.concat(chunks).toString("utf8")));
65
+ });
66
+ }
67
+ storageUpload(key, value, privateKey) {
68
+ return __awaiter(this, void 0, void 0, function* () {
69
+ try {
70
+ const encryptedValue = yield this.encrypt(value, privateKey);
71
+ const buffer = Buffer.from(JSON.stringify(encryptedValue));
72
+ yield this.storageProvider.uploadFile(stream_1.Readable.from(buffer), key, buffer.byteLength);
73
+ this.logger.info({ data: key }, "Success uploading to storage");
74
+ }
75
+ catch (err) {
76
+ this.logger.error({ err }, "Error uploading to storage");
77
+ throw err;
78
+ }
79
+ });
80
+ }
81
+ storageDelete(key) {
82
+ return __awaiter(this, void 0, void 0, function* () {
83
+ try {
84
+ yield this.storageProvider.deleteObject(key);
85
+ this.logger.info({ data: key }, "Success deleting from storage");
86
+ }
87
+ catch (err) {
88
+ this.logger.info({ err }, "Error deleting from storage");
89
+ throw err;
90
+ }
91
+ });
92
+ }
93
+ storageDownload(key, privateKey) {
94
+ return __awaiter(this, void 0, void 0, function* () {
95
+ try {
96
+ const downloaded = yield this.downloadFromStorage(key);
97
+ this.logger.info({ key }, "Success download data from storage");
98
+ if (!downloaded)
99
+ return null;
100
+ const decryptedValue = yield this.decrypt(JSON.parse(downloaded), privateKey);
101
+ return decryptedValue;
102
+ }
103
+ catch (err) {
104
+ this.logger.info({
105
+ err,
106
+ key,
107
+ }, "Error download data from storage");
108
+ throw err;
109
+ }
110
+ });
111
+ }
112
+ storageListFiles(key) {
113
+ return __awaiter(this, void 0, void 0, function* () {
114
+ try {
115
+ const listObjects = yield this.storageProvider.listObjects(key);
116
+ this.logger.trace({
117
+ data: listObjects,
118
+ key,
119
+ }, "Success list objects from storage");
120
+ return listObjects.filter((obj) => !obj.isFolder);
121
+ }
122
+ catch (err) {
123
+ this.logger.info({
124
+ err,
125
+ key,
126
+ }, "Error list objects from storage");
127
+ throw err;
128
+ }
129
+ });
130
+ }
131
+ set(key, value, privateKey) {
132
+ return __awaiter(this, void 0, void 0, function* () {
133
+ return this.storageUpload(key, value, privateKey);
134
+ });
135
+ }
136
+ delete(key) {
137
+ return __awaiter(this, void 0, void 0, function* () {
138
+ return this.storageDelete(key);
139
+ });
140
+ }
141
+ get(key, privateKey) {
142
+ return __awaiter(this, void 0, void 0, function* () {
143
+ return this.storageDownload(key, privateKey);
144
+ });
145
+ }
146
+ listFiles(key) {
147
+ return __awaiter(this, void 0, void 0, function* () {
148
+ return this.storageListFiles(key);
149
+ });
150
+ }
151
+ }
152
+ exports.default = StorageKeyValueAdapter;
@@ -0,0 +1,19 @@
1
+ import StorageObject from "../../types/storage/StorageObject";
2
+ import { CacheRecord } from "./types";
3
+ import StorageKeyValueAdapter from "./StorageKeyValueAdapter";
4
+ export interface InstancesUpdates {
5
+ updated: Map<string, StorageObject>;
6
+ deleted: Set<string>;
7
+ }
8
+ export interface StorageMetadataReaderConfig<V extends object> {
9
+ storageKeyValueAdapter: StorageKeyValueAdapter<V>;
10
+ objectDeletedFlag: string;
11
+ }
12
+ export default class StorageMetadataReader<K extends string, V extends object> {
13
+ private readonly logger;
14
+ private readonly storageKeyValueAdapter;
15
+ private readonly objectDeletedFlag;
16
+ constructor(config: StorageMetadataReaderConfig<V>);
17
+ private listInstances;
18
+ fetchInstancesUpdates(key: K, currentInstances: Map<string, CacheRecord<V>>): Promise<InstancesUpdates>;
19
+ }
@@ -0,0 +1,65 @@
1
+ "use strict";
2
+ var __awaiter = (this && this.__awaiter) || function (thisArg, _arguments, P, generator) {
3
+ function adopt(value) { return value instanceof P ? value : new P(function (resolve) { resolve(value); }); }
4
+ return new (P || (P = Promise))(function (resolve, reject) {
5
+ function fulfilled(value) { try { step(generator.next(value)); } catch (e) { reject(e); } }
6
+ function rejected(value) { try { step(generator["throw"](value)); } catch (e) { reject(e); } }
7
+ function step(result) { result.done ? resolve(result.value) : adopt(result.value).then(fulfilled, rejected); }
8
+ step((generator = generator.apply(thisArg, _arguments || [])).next());
9
+ });
10
+ };
11
+ var __importDefault = (this && this.__importDefault) || function (mod) {
12
+ return (mod && mod.__esModule) ? mod : { "default": mod };
13
+ };
14
+ Object.defineProperty(exports, "__esModule", { value: true });
15
+ const logger_1 = __importDefault(require("../../logger"));
16
+ class StorageMetadataReader {
17
+ constructor(config) {
18
+ this.logger = logger_1.default.child({ class: StorageMetadataReader.name });
19
+ this.storageKeyValueAdapter = config.storageKeyValueAdapter;
20
+ this.objectDeletedFlag = config.objectDeletedFlag;
21
+ }
22
+ listInstances(key) {
23
+ return __awaiter(this, void 0, void 0, function* () {
24
+ return this.storageKeyValueAdapter
25
+ .listFiles(`${key}/`)
26
+ .then((objects) => new Map(objects.map((obj) => { var _a; return [((_a = obj.name.split("/")) === null || _a === void 0 ? void 0 : _a.pop()) || obj.name, obj]; })));
27
+ });
28
+ }
29
+ fetchInstancesUpdates(key, currentInstances) {
30
+ return __awaiter(this, void 0, void 0, function* () {
31
+ const result = {
32
+ updated: new Map(),
33
+ deleted: new Set(),
34
+ };
35
+ try {
36
+ const directoryInstances = yield this.listInstances(key);
37
+ if (directoryInstances.has(this.objectDeletedFlag)) {
38
+ result.deleted.add(key);
39
+ return result;
40
+ }
41
+ directoryInstances.forEach((instance, instanceId) => {
42
+ const currentInstance = currentInstances.get(instanceId);
43
+ if (!currentInstance || currentInstance.modifiedTs < instance.createdAt.getTime()) {
44
+ result.updated.set(instanceId, instance);
45
+ }
46
+ });
47
+ currentInstances.forEach((_, instanceId) => {
48
+ if (!directoryInstances.has(instanceId)) {
49
+ result.deleted.add(instanceId);
50
+ }
51
+ });
52
+ this.logger.trace({
53
+ updated: result.updated.size,
54
+ deleted: result.deleted.size,
55
+ }, "Check result");
56
+ return result;
57
+ }
58
+ catch (error) {
59
+ this.logger.error({ error }, "Error fetching remote copy");
60
+ return result;
61
+ }
62
+ });
63
+ }
64
+ }
65
+ exports.default = StorageMetadataReader;
@@ -0,0 +1,19 @@
1
+ /// <reference types="node" />
2
+ import StorageAccess from "../../types/storage/StorageAccess";
3
+ import { StorageAdapterConfig, CacheEvents } from "./StorageAdapter";
4
+ export type StorjConfig = StorageAdapterConfig;
5
+ export default class StorjAdapter<V extends object> {
6
+ private storageAdapter;
7
+ private readonly logger;
8
+ constructor(storageAccess: StorageAccess, config: StorjConfig);
9
+ subscribe(cb: (props: {
10
+ type: CacheEvents;
11
+ message: unknown;
12
+ }) => void): Promise<() => Promise<void>>;
13
+ get(key: string, encryptionKey: Buffer): Promise<(V | null)[] | null>;
14
+ has(key: string): Promise<boolean>;
15
+ set(key: string, value: V, encryptionKey: Buffer): Promise<void>;
16
+ del(key: string): Promise<void>;
17
+ stop(): void;
18
+ shutdown(): Promise<void>;
19
+ }
@@ -0,0 +1,62 @@
1
+ "use strict";
2
+ var __awaiter = (this && this.__awaiter) || function (thisArg, _arguments, P, generator) {
3
+ function adopt(value) { return value instanceof P ? value : new P(function (resolve) { resolve(value); }); }
4
+ return new (P || (P = Promise))(function (resolve, reject) {
5
+ function fulfilled(value) { try { step(generator.next(value)); } catch (e) { reject(e); } }
6
+ function rejected(value) { try { step(generator["throw"](value)); } catch (e) { reject(e); } }
7
+ function step(result) { result.done ? resolve(result.value) : adopt(result.value).then(fulfilled, rejected); }
8
+ step((generator = generator.apply(thisArg, _arguments || [])).next());
9
+ });
10
+ };
11
+ var __importDefault = (this && this.__importDefault) || function (mod) {
12
+ return (mod && mod.__esModule) ? mod : { "default": mod };
13
+ };
14
+ Object.defineProperty(exports, "__esModule", { value: true });
15
+ const logger_1 = __importDefault(require("../../logger"));
16
+ const StorageAdapter_1 = __importDefault(require("./StorageAdapter"));
17
+ class StorjAdapter {
18
+ constructor(storageAccess, config) {
19
+ this.logger = logger_1.default.child({ class: StorjAdapter.name });
20
+ this.storageAdapter = new StorageAdapter_1.default(storageAccess, config);
21
+ this.storageAdapter.run();
22
+ }
23
+ subscribe(cb) {
24
+ var _a;
25
+ return (_a = this.storageAdapter) === null || _a === void 0 ? void 0 : _a.subscribe(cb);
26
+ }
27
+ get(key, encryptionKey) {
28
+ return __awaiter(this, void 0, void 0, function* () {
29
+ return this.storageAdapter.get(key, encryptionKey).catch((err) => {
30
+ if (err.message.includes("object not found")) {
31
+ this.logger.info({ key }, "Object not found");
32
+ return null;
33
+ }
34
+ throw err;
35
+ });
36
+ });
37
+ }
38
+ has(key) {
39
+ return __awaiter(this, void 0, void 0, function* () {
40
+ return this.storageAdapter.has(key);
41
+ });
42
+ }
43
+ set(key, value, encryptionKey) {
44
+ return __awaiter(this, void 0, void 0, function* () {
45
+ return this.storageAdapter.set(key, value, encryptionKey);
46
+ });
47
+ }
48
+ del(key) {
49
+ return __awaiter(this, void 0, void 0, function* () {
50
+ return this.storageAdapter.delete(key);
51
+ });
52
+ }
53
+ stop() {
54
+ this.storageAdapter.stop();
55
+ }
56
+ shutdown() {
57
+ return __awaiter(this, void 0, void 0, function* () {
58
+ yield this.storageAdapter.shutdown();
59
+ });
60
+ }
61
+ }
62
+ exports.default = StorjAdapter;