@requestnetwork/data-access 0.28.1-next.1937 → 0.28.1-next.1938
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/combined-data-access.d.ts +0 -1
- package/dist/combined-data-access.d.ts.map +1 -1
- package/dist/combined-data-access.js.map +1 -1
- package/dist/data-read.d.ts +17 -0
- package/dist/data-read.d.ts.map +1 -0
- package/dist/data-read.js +158 -0
- package/dist/data-read.js.map +1 -0
- package/dist/data-write.d.ts +10 -0
- package/dist/data-write.d.ts.map +1 -0
- package/dist/data-write.js +48 -0
- package/dist/data-write.js.map +1 -0
- package/dist/in-memory-indexer.d.ts +18 -0
- package/dist/in-memory-indexer.d.ts.map +1 -0
- package/dist/in-memory-indexer.js +107 -0
- package/dist/in-memory-indexer.js.map +1 -0
- package/dist/index.d.ts +5 -2
- package/dist/index.d.ts.map +1 -1
- package/dist/index.js +9 -5
- package/dist/index.js.map +1 -1
- package/dist/mock-data-access.d.ts +13 -0
- package/dist/mock-data-access.d.ts.map +1 -0
- package/dist/mock-data-access.js +29 -0
- package/dist/mock-data-access.js.map +1 -0
- package/dist/pending-store.d.ts +16 -0
- package/dist/pending-store.d.ts.map +1 -0
- package/dist/pending-store.js +33 -0
- package/dist/pending-store.js.map +1 -0
- package/dist/types.d.ts +7 -0
- package/dist/types.d.ts.map +1 -0
- package/dist/types.js +3 -0
- package/dist/types.js.map +1 -0
- package/package.json +5 -9
- package/dist/data-access.d.ts +0 -148
- package/dist/data-access.d.ts.map +0 -1
- package/dist/data-access.js +0 -428
- package/dist/data-access.js.map +0 -1
- package/dist/ignored-location.d.ts +0 -58
- package/dist/ignored-location.d.ts.map +0 -1
- package/dist/ignored-location.js +0 -96
- package/dist/ignored-location.js.map +0 -1
- package/dist/interval-timer.d.ts +0 -41
- package/dist/interval-timer.d.ts.map +0 -1
- package/dist/interval-timer.js +0 -94
- package/dist/interval-timer.js.map +0 -1
- package/dist/transaction-index/index.d.ts +0 -5
- package/dist/transaction-index/index.d.ts.map +0 -1
- package/dist/transaction-index/index.js +0 -8
- package/dist/transaction-index/index.js.map +0 -1
- package/dist/transaction-index/location-by-topic.d.ts +0 -53
- package/dist/transaction-index/location-by-topic.d.ts.map +0 -1
- package/dist/transaction-index/location-by-topic.js +0 -103
- package/dist/transaction-index/location-by-topic.js.map +0 -1
- package/dist/transaction-index/timestamp-by-location.d.ts +0 -60
- package/dist/transaction-index/timestamp-by-location.d.ts.map +0 -1
- package/dist/transaction-index/timestamp-by-location.js +0 -108
- package/dist/transaction-index/timestamp-by-location.js.map +0 -1
- package/dist/transaction-index/transaction-index.d.ts +0 -74
- package/dist/transaction-index/transaction-index.d.ts.map +0 -1
- package/dist/transaction-index/transaction-index.js +0 -204
- package/dist/transaction-index/transaction-index.js.map +0 -1
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@requestnetwork/data-access",
|
|
3
|
-
"version": "0.28.1-next.
|
|
3
|
+
"version": "0.28.1-next.1938+9021cf2d",
|
|
4
4
|
"publishConfig": {
|
|
5
5
|
"access": "public"
|
|
6
6
|
},
|
|
@@ -39,17 +39,13 @@
|
|
|
39
39
|
"test:watch": "yarn test --watch"
|
|
40
40
|
},
|
|
41
41
|
"dependencies": {
|
|
42
|
-
"@requestnetwork/multi-format": "0.15.12-next.
|
|
43
|
-
"@requestnetwork/types": "0.37.1-next.
|
|
44
|
-
"@requestnetwork/utils": "0.37.1-next.
|
|
45
|
-
"bluebird": "3.7.2",
|
|
46
|
-
"keyv": "4.0.3",
|
|
42
|
+
"@requestnetwork/multi-format": "0.15.12-next.1938+9021cf2d",
|
|
43
|
+
"@requestnetwork/types": "0.37.1-next.1938+9021cf2d",
|
|
44
|
+
"@requestnetwork/utils": "0.37.1-next.1938+9021cf2d",
|
|
47
45
|
"tslib": "2.5.0"
|
|
48
46
|
},
|
|
49
47
|
"devDependencies": {
|
|
50
|
-
"@types/bluebird": "3.5.33",
|
|
51
48
|
"@types/jest": "26.0.13",
|
|
52
|
-
"@types/keyv": "3.1.1",
|
|
53
49
|
"@types/node": "16.11.7",
|
|
54
50
|
"jest": "26.4.2",
|
|
55
51
|
"nyc": "15.1.0",
|
|
@@ -59,5 +55,5 @@
|
|
|
59
55
|
"ts-node": "10.9.1",
|
|
60
56
|
"typescript": "4.9.5"
|
|
61
57
|
},
|
|
62
|
-
"gitHead": "
|
|
58
|
+
"gitHead": "9021cf2d70f1908645d1a35113ed7936a98a31f7"
|
|
63
59
|
}
|
package/dist/data-access.d.ts
DELETED
|
@@ -1,148 +0,0 @@
|
|
|
1
|
-
import { DataAccessTypes, LogTypes, StorageTypes } from '@requestnetwork/types';
|
|
2
|
-
import IgnoredLocationIndex from './ignored-location';
|
|
3
|
-
/**
|
|
4
|
-
* Options for the DataAccess initialization
|
|
5
|
-
*/
|
|
6
|
-
export interface IDataAccessOptions {
|
|
7
|
-
/**
|
|
8
|
-
* Logger instance
|
|
9
|
-
*/
|
|
10
|
-
logger: LogTypes.ILogger;
|
|
11
|
-
/**
|
|
12
|
-
* the transaction index, defaults to TransactionIndex if not set.
|
|
13
|
-
*/
|
|
14
|
-
transactionIndex: DataAccessTypes.ITransactionIndex;
|
|
15
|
-
/**
|
|
16
|
-
* synchronizationIntervalTime Interval time between each synchronization
|
|
17
|
-
* Defaults to DEFAULT_INTERVAL_TIME.
|
|
18
|
-
*/
|
|
19
|
-
synchronizationIntervalTime: number;
|
|
20
|
-
/**
|
|
21
|
-
* Index of the ignored location with the reason
|
|
22
|
-
*/
|
|
23
|
-
ignoredLocationIndex: IgnoredLocationIndex;
|
|
24
|
-
/**
|
|
25
|
-
* Specifies whether to start the synchronization on initialization
|
|
26
|
-
*/
|
|
27
|
-
autoStartSynchronization: boolean;
|
|
28
|
-
}
|
|
29
|
-
/**
|
|
30
|
-
* Implementation of Data-Access layer without encryption
|
|
31
|
-
*/
|
|
32
|
-
export default class DataAccess implements DataAccessTypes.IDataAccess {
|
|
33
|
-
private transactionIndex;
|
|
34
|
-
protected isInitialized: boolean;
|
|
35
|
-
private storage;
|
|
36
|
-
private ignoredLocationIndex;
|
|
37
|
-
private synchronizationTimer;
|
|
38
|
-
/**
|
|
39
|
-
* Specifies whether to start the synchronization on initialization
|
|
40
|
-
*/
|
|
41
|
-
private autoStartSynchronization;
|
|
42
|
-
private lastSyncStorageTimestamp;
|
|
43
|
-
/**
|
|
44
|
-
* Logger instance
|
|
45
|
-
*/
|
|
46
|
-
private logger;
|
|
47
|
-
/**
|
|
48
|
-
* Constructor DataAccess interface
|
|
49
|
-
*
|
|
50
|
-
* @param IStorage storage storage object
|
|
51
|
-
*/
|
|
52
|
-
constructor(storage: StorageTypes.IStorage, options?: Partial<IDataAccessOptions>);
|
|
53
|
-
/**
|
|
54
|
-
* Function to initialize the dataId topic with the previous block
|
|
55
|
-
*/
|
|
56
|
-
initialize(): Promise<void>;
|
|
57
|
-
close(): Promise<void>;
|
|
58
|
-
/**
|
|
59
|
-
* Function to persist transaction and topic in storage
|
|
60
|
-
* For now, we create a block for each transaction
|
|
61
|
-
*
|
|
62
|
-
* @param transaction transaction to persist
|
|
63
|
-
* @param channelId string to identify a bunch of transaction
|
|
64
|
-
* @param topics list of string to topic the transaction
|
|
65
|
-
*
|
|
66
|
-
* @returns string dataId where the transaction is stored
|
|
67
|
-
*/
|
|
68
|
-
persistTransaction(transaction: DataAccessTypes.ITransaction, channelId: string, topics?: string[]): Promise<DataAccessTypes.IReturnPersistTransaction>;
|
|
69
|
-
/**
|
|
70
|
-
* Function to get a list of transactions indexed by channel id
|
|
71
|
-
* if timestampBoundaries is given, the search will be restrict from timestamp 'from' to the timestamp 'to'.
|
|
72
|
-
* if timestampBoundaries.from is not given, the search will be start from the very start
|
|
73
|
-
* if timestampBoundaries.to is not given, the search will be stop at the current timestamp
|
|
74
|
-
*
|
|
75
|
-
* @param channelId channel id to retrieve the transaction from
|
|
76
|
-
* @param timestampBoundaries timestamp boundaries of the transactions search
|
|
77
|
-
*
|
|
78
|
-
* @returns list of transactions in the channel
|
|
79
|
-
*/
|
|
80
|
-
getTransactionsByChannelId(channelId: string, timestampBoundaries?: DataAccessTypes.ITimestampBoundaries): Promise<DataAccessTypes.IReturnGetTransactions>;
|
|
81
|
-
/**
|
|
82
|
-
* Function to get a list of channels indexed by topic
|
|
83
|
-
*
|
|
84
|
-
* @param topic topic to retrieve the channels from
|
|
85
|
-
* @param updatedBetween filter the channels that have received new data within the time boundaries
|
|
86
|
-
*
|
|
87
|
-
* @returns list of channels indexed by topic
|
|
88
|
-
*/
|
|
89
|
-
getChannelsByTopic(topic: string, updatedBetween?: DataAccessTypes.ITimestampBoundaries): Promise<DataAccessTypes.IReturnGetChannelsByTopic>;
|
|
90
|
-
/**
|
|
91
|
-
* Function to get a list of channels indexed by multiple topics
|
|
92
|
-
*
|
|
93
|
-
* @param topics topics to retrieve the channels from
|
|
94
|
-
* @param updatedBetween filter the channels that have received new data within the time boundaries
|
|
95
|
-
*
|
|
96
|
-
* @returns list of channels indexed by topics
|
|
97
|
-
*/
|
|
98
|
-
getChannelsByMultipleTopics(topics: string[], updatedBetween?: DataAccessTypes.ITimestampBoundaries): Promise<DataAccessTypes.IReturnGetChannelsByTopic>;
|
|
99
|
-
/**
|
|
100
|
-
* Function to synchronize with the new dataIds on the storage
|
|
101
|
-
*/
|
|
102
|
-
synchronizeNewDataIds(): Promise<void>;
|
|
103
|
-
/**
|
|
104
|
-
* Start to synchronize with the storage automatically
|
|
105
|
-
* Once called, synchronizeNewDataId function is called periodically
|
|
106
|
-
*/
|
|
107
|
-
startAutoSynchronization(): void;
|
|
108
|
-
/**
|
|
109
|
-
* Stop to synchronize with the storage automatically
|
|
110
|
-
*/
|
|
111
|
-
stopAutoSynchronization(): Promise<void>;
|
|
112
|
-
/**
|
|
113
|
-
* Gets information of the data indexed
|
|
114
|
-
*
|
|
115
|
-
* @param detailed if true get the list of the files hashes
|
|
116
|
-
*/
|
|
117
|
-
_getStatus(detailed?: boolean): Promise<DataAccessTypes.IDataAccessStatus>;
|
|
118
|
-
/**
|
|
119
|
-
* Check the format of the data, extract the topics from it and push location indexed with the topics
|
|
120
|
-
*
|
|
121
|
-
* @private
|
|
122
|
-
* @param entries data with meta from storage functions
|
|
123
|
-
* @param locationByTopic LocationByTopic object to push location
|
|
124
|
-
*/
|
|
125
|
-
private pushLocationsWithTopics;
|
|
126
|
-
/**
|
|
127
|
-
* Gets the blocks and their metadata from an array of storage location
|
|
128
|
-
*
|
|
129
|
-
* @param storageLocationList array of storage location
|
|
130
|
-
* @returns the blocks and their metadata
|
|
131
|
-
*/
|
|
132
|
-
private getBlockAndMetaFromStorageLocation;
|
|
133
|
-
/**
|
|
134
|
-
* Gets the transactions and their metadata from a block and an array of transaction positions
|
|
135
|
-
*
|
|
136
|
-
* @param transactionPositions transaction positions to retrieve
|
|
137
|
-
* @param block the block
|
|
138
|
-
* @param location location of the block
|
|
139
|
-
* @param meta metadata of the block
|
|
140
|
-
* @returns the transactions and their metadata
|
|
141
|
-
*/
|
|
142
|
-
private getTransactionAndMetaFromPosition;
|
|
143
|
-
/**
|
|
144
|
-
* Throws an error if the data access isn't initialized
|
|
145
|
-
*/
|
|
146
|
-
private checkInitialized;
|
|
147
|
-
}
|
|
148
|
-
//# sourceMappingURL=data-access.d.ts.map
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"data-access.d.ts","sourceRoot":"","sources":["../src/data-access.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,eAAe,EAAE,QAAQ,EAAE,YAAY,EAAE,MAAM,uBAAuB,CAAC;AAOhF,OAAO,oBAAoB,MAAM,oBAAoB,CAAC;AAOtD;;GAEG;AACH,MAAM,WAAW,kBAAkB;IACjC;;OAEG;IACH,MAAM,EAAE,QAAQ,CAAC,OAAO,CAAC;IAEzB;;OAEG;IACH,gBAAgB,EAAE,eAAe,CAAC,iBAAiB,CAAC;IAEpD;;;OAGG;IACH,2BAA2B,EAAE,MAAM,CAAC;IAEpC;;OAEG;IACH,oBAAoB,EAAE,oBAAoB,CAAC;IAE3C;;OAEG;IACH,wBAAwB,EAAE,OAAO,CAAC;CACnC;AAUD;;GAEG;AACH,MAAM,CAAC,OAAO,OAAO,UAAW,YAAW,eAAe,CAAC,WAAW;IAEpE,OAAO,CAAC,gBAAgB,CAAoC;IAG5D,SAAS,CAAC,aAAa,UAAS;IAEhC,OAAO,CAAC,OAAO,CAAwB;IAEvC,OAAO,CAAC,oBAAoB,CAAuB;IAInD,OAAO,CAAC,oBAAoB,CAAgB;IAE5C;;OAEG;IACH,OAAO,CAAC,wBAAwB,CAAU;IAQ1C,OAAO,CAAC,wBAAwB,CAAS;IAEzC;;OAEG;IACH,OAAO,CAAC,MAAM,CAAmB;IAEjC;;;;OAIG;gBACgB,OAAO,EAAE,YAAY,CAAC,QAAQ,EAAE,OAAO,CAAC,EAAE,OAAO,CAAC,kBAAkB,CAAC;IAiCxF;;OAEG;IACU,UAAU,IAAI,OAAO,CAAC,IAAI,CAAC;IAqC3B,KAAK,IAAI,OAAO,CAAC,IAAI,CAAC;IAInC;;;;;;;;;OASG;IACU,kBAAkB,CAC7B,WAAW,EAAE,eAAe,CAAC,YAAY,EACzC,SAAS,EAAE,MAAM,EACjB,MAAM,GAAE,MAAM,EAAO,GACpB,OAAO,CAAC,eAAe,CAAC,yBAAyB,CAAC;IAoErD;;;;;;;;;;OAUG;IACU,0BAA0B,CACrC,SAAS,EAAE,MAAM,EACjB,mBAAmB,CAAC,EAAE,eAAe,CAAC,oBAAoB,GACzD,OAAO,CAAC,eAAe,CAAC,sBAAsB,CAAC;IAuDlD;;;;;;;OAOG;IACU,kBAAkB,CAC7B,KAAK,EAAE,MAAM,EACb,cAAc,CAAC,EAAE,eAAe,CAAC,oBAAoB,GACpD,OAAO,CAAC,eAAe,CAAC,yBAAyB,CAAC;IAuCrD;;;;;;;OAOG;IACU,2BAA2B,CACtC,MAAM,EAAE,MAAM,EAAE,EAChB,cAAc,CAAC,EAAE,eAAe,CAAC,oBAAoB,GACpD,OAAO,CAAC,eAAe,CAAC,yBAAyB,CAAC;IAyCrD;;OAEG;IACU,qBAAqB,IAAI,OAAO,CAAC,IAAI,CAAC;IA4BnD;;;OAGG;IACI,wBAAwB,IAAI,IAAI;IAKvC;;OAEG;IACU,uBAAuB,IAAI,OAAO,CAAC,IAAI,CAAC;IAMrD;;;;OAIG;IACU,UAAU,CAAC,QAAQ,UAAQ,GAAG,OAAO,CAAC,eAAe,CAAC,iBAAiB,CAAC;IA0BrF;;;;;;OAMG;YACW,uBAAuB;IAmCrC;;;;;OAKG;YACW,kCAAkC;IAmBhD;;;;;;;;OAQG;IACH,OAAO,CAAC,iCAAiC;IAkCzC;;OAEG;IACH,OAAO,CAAC,gBAAgB;CAKzB"}
|
package/dist/data-access.js
DELETED
|
@@ -1,428 +0,0 @@
|
|
|
1
|
-
"use strict";
|
|
2
|
-
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
-
const tslib_1 = require("tslib");
|
|
4
|
-
const multi_format_1 = require("@requestnetwork/multi-format");
|
|
5
|
-
const types_1 = require("@requestnetwork/types");
|
|
6
|
-
const utils_1 = require("@requestnetwork/utils");
|
|
7
|
-
const Bluebird = require("bluebird");
|
|
8
|
-
const events_1 = require("events");
|
|
9
|
-
const block_1 = require("./block");
|
|
10
|
-
const ignored_location_1 = require("./ignored-location");
|
|
11
|
-
const interval_timer_1 = require("./interval-timer");
|
|
12
|
-
const transaction_index_1 = require("./transaction-index");
|
|
13
|
-
// Default interval time for auto synchronization
|
|
14
|
-
const DEFAULT_INTERVAL_TIME = 10000;
|
|
15
|
-
const emptyChannelsWithTopics = {
|
|
16
|
-
meta: {
|
|
17
|
-
storageMeta: {},
|
|
18
|
-
transactionsStorageLocation: {},
|
|
19
|
-
},
|
|
20
|
-
result: { transactions: {} },
|
|
21
|
-
};
|
|
22
|
-
/**
|
|
23
|
-
* Implementation of Data-Access layer without encryption
|
|
24
|
-
*/
|
|
25
|
-
class DataAccess {
|
|
26
|
-
/**
|
|
27
|
-
* Constructor DataAccess interface
|
|
28
|
-
*
|
|
29
|
-
* @param IStorage storage storage object
|
|
30
|
-
*/
|
|
31
|
-
constructor(storage, options) {
|
|
32
|
-
// boolean to store the initialization state
|
|
33
|
-
this.isInitialized = false;
|
|
34
|
-
const defaultOptions = {
|
|
35
|
-
ignoredLocationIndex: new ignored_location_1.default(),
|
|
36
|
-
logger: new utils_1.SimpleLogger(),
|
|
37
|
-
synchronizationIntervalTime: DEFAULT_INTERVAL_TIME,
|
|
38
|
-
transactionIndex: new transaction_index_1.default(),
|
|
39
|
-
autoStartSynchronization: false,
|
|
40
|
-
};
|
|
41
|
-
const { ignoredLocationIndex, logger, synchronizationIntervalTime, transactionIndex, autoStartSynchronization, } = Object.assign(Object.assign({}, defaultOptions), options);
|
|
42
|
-
this.storage = storage;
|
|
43
|
-
this.lastSyncStorageTimestamp = 0;
|
|
44
|
-
this.autoStartSynchronization = autoStartSynchronization;
|
|
45
|
-
this.synchronizationTimer = new interval_timer_1.default(() => this.synchronizeNewDataIds(), synchronizationIntervalTime, logger, 5);
|
|
46
|
-
this.transactionIndex = transactionIndex;
|
|
47
|
-
this.ignoredLocationIndex = ignoredLocationIndex;
|
|
48
|
-
this.logger = logger;
|
|
49
|
-
}
|
|
50
|
-
/**
|
|
51
|
-
* Function to initialize the dataId topic with the previous block
|
|
52
|
-
*/
|
|
53
|
-
initialize() {
|
|
54
|
-
return tslib_1.__awaiter(this, void 0, void 0, function* () {
|
|
55
|
-
if (this.isInitialized) {
|
|
56
|
-
throw new Error('already initialized');
|
|
57
|
-
}
|
|
58
|
-
yield this.transactionIndex.initialize();
|
|
59
|
-
// initialize storage
|
|
60
|
-
yield this.storage.initialize();
|
|
61
|
-
// if transaction index already has data, then sync from the last available timestamp
|
|
62
|
-
const lastSynced = yield this.transactionIndex.getLastTransactionTimestamp();
|
|
63
|
-
const now = (0, utils_1.getCurrentTimestampInSecond)();
|
|
64
|
-
// initialize the dataId topic with the previous block
|
|
65
|
-
const allDataWithMeta = yield this.storage.getData(lastSynced
|
|
66
|
-
? {
|
|
67
|
-
from: lastSynced,
|
|
68
|
-
to: now,
|
|
69
|
-
}
|
|
70
|
-
: undefined);
|
|
71
|
-
// The last synced timestamp is the latest one returned by storage
|
|
72
|
-
this.lastSyncStorageTimestamp = allDataWithMeta.lastTimestamp;
|
|
73
|
-
// check if the data returned by getData are correct
|
|
74
|
-
// if yes, the dataIds are indexed with LocationByTopic
|
|
75
|
-
yield this.pushLocationsWithTopics(allDataWithMeta.entries);
|
|
76
|
-
this.isInitialized = true;
|
|
77
|
-
if (this.autoStartSynchronization) {
|
|
78
|
-
this.startAutoSynchronization();
|
|
79
|
-
}
|
|
80
|
-
});
|
|
81
|
-
}
|
|
82
|
-
close() {
|
|
83
|
-
return tslib_1.__awaiter(this, void 0, void 0, function* () {
|
|
84
|
-
yield this.stopAutoSynchronization();
|
|
85
|
-
});
|
|
86
|
-
}
|
|
87
|
-
/**
|
|
88
|
-
* Function to persist transaction and topic in storage
|
|
89
|
-
* For now, we create a block for each transaction
|
|
90
|
-
*
|
|
91
|
-
* @param transaction transaction to persist
|
|
92
|
-
* @param channelId string to identify a bunch of transaction
|
|
93
|
-
* @param topics list of string to topic the transaction
|
|
94
|
-
*
|
|
95
|
-
* @returns string dataId where the transaction is stored
|
|
96
|
-
*/
|
|
97
|
-
persistTransaction(transaction, channelId, topics = []) {
|
|
98
|
-
return tslib_1.__awaiter(this, void 0, void 0, function* () {
|
|
99
|
-
this.checkInitialized();
|
|
100
|
-
// get all the topics not well formatted
|
|
101
|
-
const notFormattedTopics = topics.filter((topic) => !multi_format_1.default.hashFormat.isDeserializableString(topic));
|
|
102
|
-
if (notFormattedTopics.length !== 0) {
|
|
103
|
-
throw new Error(`The following topics are not well formatted: ${JSON.stringify(notFormattedTopics)}`);
|
|
104
|
-
}
|
|
105
|
-
// create a block and add the transaction in it
|
|
106
|
-
const updatedBlock = block_1.default.pushTransaction(block_1.default.createEmptyBlock(), transaction, channelId, topics);
|
|
107
|
-
// get the topic of the data in storage
|
|
108
|
-
const resultAppend = yield this.storage.append(JSON.stringify(updatedBlock));
|
|
109
|
-
const result = Object.assign(new events_1.EventEmitter(), {
|
|
110
|
-
meta: {
|
|
111
|
-
storageMeta: resultAppend.meta,
|
|
112
|
-
topics,
|
|
113
|
-
transactionStorageLocation: resultAppend.id,
|
|
114
|
-
},
|
|
115
|
-
result: {},
|
|
116
|
-
});
|
|
117
|
-
// Store the data to the real storage
|
|
118
|
-
resultAppend
|
|
119
|
-
.on('confirmed', (resultAppendConfirmed) => tslib_1.__awaiter(this, void 0, void 0, function* () {
|
|
120
|
-
// update the timestamp with the confirmed one
|
|
121
|
-
yield this.transactionIndex.updateTimestamp(resultAppendConfirmed.id, resultAppendConfirmed.meta.timestamp);
|
|
122
|
-
const resultAfterConfirmation = {
|
|
123
|
-
meta: {
|
|
124
|
-
storageMeta: resultAppendConfirmed.meta,
|
|
125
|
-
topics,
|
|
126
|
-
transactionStorageLocation: resultAppendConfirmed.id,
|
|
127
|
-
},
|
|
128
|
-
result: {},
|
|
129
|
-
};
|
|
130
|
-
result.emit('confirmed', resultAfterConfirmation);
|
|
131
|
-
}))
|
|
132
|
-
.on('error', (error) => tslib_1.__awaiter(this, void 0, void 0, function* () {
|
|
133
|
-
result.emit('error', error);
|
|
134
|
-
}));
|
|
135
|
-
// adds this transaction to the index, to enable retrieving it later.
|
|
136
|
-
yield this.transactionIndex.addTransaction(resultAppend.id, updatedBlock.header, resultAppend.meta.timestamp);
|
|
137
|
-
return result;
|
|
138
|
-
});
|
|
139
|
-
}
|
|
140
|
-
/**
|
|
141
|
-
* Function to get a list of transactions indexed by channel id
|
|
142
|
-
* if timestampBoundaries is given, the search will be restrict from timestamp 'from' to the timestamp 'to'.
|
|
143
|
-
* if timestampBoundaries.from is not given, the search will be start from the very start
|
|
144
|
-
* if timestampBoundaries.to is not given, the search will be stop at the current timestamp
|
|
145
|
-
*
|
|
146
|
-
* @param channelId channel id to retrieve the transaction from
|
|
147
|
-
* @param timestampBoundaries timestamp boundaries of the transactions search
|
|
148
|
-
*
|
|
149
|
-
* @returns list of transactions in the channel
|
|
150
|
-
*/
|
|
151
|
-
getTransactionsByChannelId(channelId, timestampBoundaries) {
|
|
152
|
-
return tslib_1.__awaiter(this, void 0, void 0, function* () {
|
|
153
|
-
this.checkInitialized();
|
|
154
|
-
// Gets the list of locationStorage indexed by the channel id that are within the boundaries
|
|
155
|
-
const storageLocationList = yield this.transactionIndex.getStorageLocationList(channelId, timestampBoundaries);
|
|
156
|
-
// Gets the block and meta from the storage location
|
|
157
|
-
const blockWithMetaList = yield this.getBlockAndMetaFromStorageLocation(storageLocationList);
|
|
158
|
-
// Get the transactions (and the meta) indexed by channelIds in the blocks found
|
|
159
|
-
const transactionsAndMetaPerBlocks =
|
|
160
|
-
// for all the blocks found
|
|
161
|
-
blockWithMetaList.map((blockAndMeta) => {
|
|
162
|
-
// Gets the list of positions of the transaction needed from the block
|
|
163
|
-
const transactionPositions = block_1.default.getTransactionPositionFromChannelId(blockAndMeta.block, channelId);
|
|
164
|
-
return this.getTransactionAndMetaFromPosition(transactionPositions, blockAndMeta.block, blockAndMeta.location, blockAndMeta.meta);
|
|
165
|
-
});
|
|
166
|
-
// Creates the result by concatenating the transactions and meta of every blocks
|
|
167
|
-
return transactionsAndMetaPerBlocks.reduce((accumulator, elem) => ({
|
|
168
|
-
meta: {
|
|
169
|
-
// eslint-disable-next-line @typescript-eslint/no-non-null-assertion
|
|
170
|
-
storageMeta: accumulator.meta.storageMeta.concat(elem.storageMeta),
|
|
171
|
-
transactionsStorageLocation: accumulator.meta.transactionsStorageLocation.concat(elem.transactionsStorageLocation),
|
|
172
|
-
},
|
|
173
|
-
result: {
|
|
174
|
-
transactions: accumulator.result.transactions.concat(elem.transactions),
|
|
175
|
-
},
|
|
176
|
-
}),
|
|
177
|
-
// initial value is full of empty arrays
|
|
178
|
-
{
|
|
179
|
-
meta: { storageMeta: [], transactionsStorageLocation: [] },
|
|
180
|
-
result: { transactions: [] },
|
|
181
|
-
});
|
|
182
|
-
});
|
|
183
|
-
}
|
|
184
|
-
/**
|
|
185
|
-
* Function to get a list of channels indexed by topic
|
|
186
|
-
*
|
|
187
|
-
* @param topic topic to retrieve the channels from
|
|
188
|
-
* @param updatedBetween filter the channels that have received new data within the time boundaries
|
|
189
|
-
*
|
|
190
|
-
* @returns list of channels indexed by topic
|
|
191
|
-
*/
|
|
192
|
-
getChannelsByTopic(topic, updatedBetween) {
|
|
193
|
-
return tslib_1.__awaiter(this, void 0, void 0, function* () {
|
|
194
|
-
this.checkInitialized();
|
|
195
|
-
// check if the topic is well formatted
|
|
196
|
-
if (!multi_format_1.default.hashFormat.isDeserializableString(topic)) {
|
|
197
|
-
throw new Error(`The topic is not well formatted: ${topic}`);
|
|
198
|
-
}
|
|
199
|
-
const channelIds = yield this.transactionIndex.getChannelIdsForTopic(topic, updatedBetween);
|
|
200
|
-
// Gets the transactions per channel id
|
|
201
|
-
const transactionsAndMeta = Bluebird.map(channelIds, (channelId) => this.getTransactionsByChannelId(channelId).then((transactionsWithMeta) => ({
|
|
202
|
-
channelId,
|
|
203
|
-
transactionsWithMeta,
|
|
204
|
-
})));
|
|
205
|
-
// Gather all the transactions in one object
|
|
206
|
-
return transactionsAndMeta.reduce((finalResult, channelIdAndTransactions) => {
|
|
207
|
-
const id = channelIdAndTransactions.channelId;
|
|
208
|
-
// Adds the storage location of the channel's data
|
|
209
|
-
finalResult.meta.transactionsStorageLocation[id] =
|
|
210
|
-
channelIdAndTransactions.transactionsWithMeta.meta.transactionsStorageLocation;
|
|
211
|
-
// Adds the meta of the channel
|
|
212
|
-
// eslint-disable-next-line @typescript-eslint/no-non-null-assertion
|
|
213
|
-
finalResult.meta.storageMeta[id] =
|
|
214
|
-
channelIdAndTransactions.transactionsWithMeta.meta.storageMeta;
|
|
215
|
-
// Adds the transaction of the channel
|
|
216
|
-
finalResult.result.transactions[id] =
|
|
217
|
-
channelIdAndTransactions.transactionsWithMeta.result.transactions;
|
|
218
|
-
return finalResult;
|
|
219
|
-
}, (0, utils_1.deepCopy)(emptyChannelsWithTopics));
|
|
220
|
-
});
|
|
221
|
-
}
|
|
222
|
-
/**
|
|
223
|
-
* Function to get a list of channels indexed by multiple topics
|
|
224
|
-
*
|
|
225
|
-
* @param topics topics to retrieve the channels from
|
|
226
|
-
* @param updatedBetween filter the channels that have received new data within the time boundaries
|
|
227
|
-
*
|
|
228
|
-
* @returns list of channels indexed by topics
|
|
229
|
-
*/
|
|
230
|
-
getChannelsByMultipleTopics(topics, updatedBetween) {
|
|
231
|
-
return tslib_1.__awaiter(this, void 0, void 0, function* () {
|
|
232
|
-
this.checkInitialized();
|
|
233
|
-
if (topics.some((topic) => !multi_format_1.default.hashFormat.isDeserializableString(topic))) {
|
|
234
|
-
throw new Error(`The topics are not well formatted`);
|
|
235
|
-
}
|
|
236
|
-
const channelIds = yield this.transactionIndex.getChannelIdsForMultipleTopics(topics, updatedBetween);
|
|
237
|
-
// Gets the transactions per channel id
|
|
238
|
-
const transactionsAndMeta = Bluebird.map(channelIds, (channelId) => this.getTransactionsByChannelId(channelId).then((transactionsWithMeta) => ({
|
|
239
|
-
channelId,
|
|
240
|
-
transactionsWithMeta,
|
|
241
|
-
})));
|
|
242
|
-
// Gather all the transactions in one object
|
|
243
|
-
return transactionsAndMeta.reduce((finalResult, channelIdAndTransactions) => {
|
|
244
|
-
const id = channelIdAndTransactions.channelId;
|
|
245
|
-
// Adds the storage location of the channel's data
|
|
246
|
-
finalResult.meta.transactionsStorageLocation[id] =
|
|
247
|
-
channelIdAndTransactions.transactionsWithMeta.meta.transactionsStorageLocation;
|
|
248
|
-
// Adds the meta of the channel
|
|
249
|
-
// eslint-disable-next-line @typescript-eslint/no-non-null-assertion
|
|
250
|
-
finalResult.meta.storageMeta[id] =
|
|
251
|
-
channelIdAndTransactions.transactionsWithMeta.meta.storageMeta;
|
|
252
|
-
// Adds the transaction of the channel
|
|
253
|
-
finalResult.result.transactions[id] =
|
|
254
|
-
channelIdAndTransactions.transactionsWithMeta.result.transactions;
|
|
255
|
-
return finalResult;
|
|
256
|
-
}, (0, utils_1.deepCopy)(emptyChannelsWithTopics));
|
|
257
|
-
});
|
|
258
|
-
}
|
|
259
|
-
/**
|
|
260
|
-
* Function to synchronize with the new dataIds on the storage
|
|
261
|
-
*/
|
|
262
|
-
synchronizeNewDataIds() {
|
|
263
|
-
return tslib_1.__awaiter(this, void 0, void 0, function* () {
|
|
264
|
-
this.checkInitialized();
|
|
265
|
-
const synchronizationTo = (0, utils_1.getCurrentTimestampInSecond)();
|
|
266
|
-
// We increment lastSyncStorageTimestamp because the data located at lastSyncStorageTimestamp
|
|
267
|
-
// 0 means it's the first synchronization
|
|
268
|
-
let synchronizationFrom = 0;
|
|
269
|
-
if (this.lastSyncStorageTimestamp > 0) {
|
|
270
|
-
synchronizationFrom = this.lastSyncStorageTimestamp + 1;
|
|
271
|
-
}
|
|
272
|
-
// Read new data from storage
|
|
273
|
-
const newDataWithMeta = yield this.storage.getData({
|
|
274
|
-
from: synchronizationFrom,
|
|
275
|
-
to: synchronizationTo,
|
|
276
|
-
});
|
|
277
|
-
// Try to get some data previously ignored
|
|
278
|
-
const oldEntriesWithMeta = yield this.storage.getIgnoredData();
|
|
279
|
-
// check if the data returned by getNewDataId are correct
|
|
280
|
-
// if yes, the dataIds are indexed with LocationByTopic
|
|
281
|
-
yield this.pushLocationsWithTopics(newDataWithMeta.entries.concat(oldEntriesWithMeta));
|
|
282
|
-
// The last synced timestamp is the latest one returned by storage
|
|
283
|
-
this.lastSyncStorageTimestamp = newDataWithMeta.lastTimestamp;
|
|
284
|
-
});
|
|
285
|
-
}
|
|
286
|
-
/**
|
|
287
|
-
* Start to synchronize with the storage automatically
|
|
288
|
-
* Once called, synchronizeNewDataId function is called periodically
|
|
289
|
-
*/
|
|
290
|
-
startAutoSynchronization() {
|
|
291
|
-
this.checkInitialized();
|
|
292
|
-
this.synchronizationTimer.start();
|
|
293
|
-
}
|
|
294
|
-
/**
|
|
295
|
-
* Stop to synchronize with the storage automatically
|
|
296
|
-
*/
|
|
297
|
-
stopAutoSynchronization() {
|
|
298
|
-
return tslib_1.__awaiter(this, void 0, void 0, function* () {
|
|
299
|
-
if (this.synchronizationTimer.isStarted) {
|
|
300
|
-
yield this.synchronizationTimer.stop();
|
|
301
|
-
}
|
|
302
|
-
});
|
|
303
|
-
}
|
|
304
|
-
/**
|
|
305
|
-
* Gets information of the data indexed
|
|
306
|
-
*
|
|
307
|
-
* @param detailed if true get the list of the files hashes
|
|
308
|
-
*/
|
|
309
|
-
_getStatus(detailed = false) {
|
|
310
|
-
return tslib_1.__awaiter(this, void 0, void 0, function* () {
|
|
311
|
-
this.checkInitialized();
|
|
312
|
-
// last transaction timestamp retrieved
|
|
313
|
-
const lastLocationTimestamp = yield this.transactionIndex.getLastTransactionTimestamp();
|
|
314
|
-
const listIndexedLocation = yield this.transactionIndex.getIndexedLocations();
|
|
315
|
-
const listIgnoredLocationIndex = yield this.ignoredLocationIndex.getIgnoredLocations();
|
|
316
|
-
const synchronizationConfig = this.synchronizationTimer.getConfig();
|
|
317
|
-
return {
|
|
318
|
-
filesIgnored: {
|
|
319
|
-
count: Object.keys(listIgnoredLocationIndex).length,
|
|
320
|
-
list: detailed ? listIgnoredLocationIndex : undefined,
|
|
321
|
-
},
|
|
322
|
-
filesRetrieved: {
|
|
323
|
-
count: listIndexedLocation.length,
|
|
324
|
-
lastTimestamp: lastLocationTimestamp,
|
|
325
|
-
list: detailed ? listIndexedLocation : undefined,
|
|
326
|
-
},
|
|
327
|
-
lastSynchronizationTimestamp: this.lastSyncStorageTimestamp,
|
|
328
|
-
storage: yield this.storage._getStatus(detailed),
|
|
329
|
-
synchronizationConfig,
|
|
330
|
-
};
|
|
331
|
-
});
|
|
332
|
-
}
|
|
333
|
-
/**
|
|
334
|
-
* Check the format of the data, extract the topics from it and push location indexed with the topics
|
|
335
|
-
*
|
|
336
|
-
* @private
|
|
337
|
-
* @param entries data with meta from storage functions
|
|
338
|
-
* @param locationByTopic LocationByTopic object to push location
|
|
339
|
-
*/
|
|
340
|
-
pushLocationsWithTopics(entries) {
|
|
341
|
-
return tslib_1.__awaiter(this, void 0, void 0, function* () {
|
|
342
|
-
if (!entries) {
|
|
343
|
-
throw Error(`data from storage do not follow the standard`);
|
|
344
|
-
}
|
|
345
|
-
let parsingErrorCount = 0;
|
|
346
|
-
let proceedCount = 0;
|
|
347
|
-
yield Bluebird.each(entries, (entry) => tslib_1.__awaiter(this, void 0, void 0, function* () {
|
|
348
|
-
if (!entry.content || !entry.id) {
|
|
349
|
-
throw Error(`data from storage do not follow the standard`);
|
|
350
|
-
}
|
|
351
|
-
let block;
|
|
352
|
-
const blockString = entry.content;
|
|
353
|
-
try {
|
|
354
|
-
block = block_1.default.parseBlock(blockString);
|
|
355
|
-
proceedCount++;
|
|
356
|
-
// adds this transaction to the index, to enable retrieving it later.
|
|
357
|
-
yield this.transactionIndex.addTransaction(entry.id, block.header, entry.meta.timestamp);
|
|
358
|
-
}
|
|
359
|
-
catch (e) {
|
|
360
|
-
parsingErrorCount++;
|
|
361
|
-
// Index ignored Location
|
|
362
|
-
yield this.ignoredLocationIndex.pushReasonByLocation(entry.id, e.message);
|
|
363
|
-
this.logger.debug(`Error: can't parse content of the dataId (${entry.id}): ${e}`, [
|
|
364
|
-
'synchronization',
|
|
365
|
-
]);
|
|
366
|
-
}
|
|
367
|
-
}));
|
|
368
|
-
this.logger.info(`Synchronization: ${proceedCount} blocks synchronized, ${parsingErrorCount} ignored from parsing error`, ['synchronization']);
|
|
369
|
-
});
|
|
370
|
-
}
|
|
371
|
-
/**
|
|
372
|
-
* Gets the blocks and their metadata from an array of storage location
|
|
373
|
-
*
|
|
374
|
-
* @param storageLocationList array of storage location
|
|
375
|
-
* @returns the blocks and their metadata
|
|
376
|
-
*/
|
|
377
|
-
getBlockAndMetaFromStorageLocation(storageLocationList) {
|
|
378
|
-
return tslib_1.__awaiter(this, void 0, void 0, function* () {
|
|
379
|
-
// Gets blocks indexed by topic
|
|
380
|
-
return Promise.all(storageLocationList.map((location) => tslib_1.__awaiter(this, void 0, void 0, function* () {
|
|
381
|
-
const resultRead = yield this.storage.read(location);
|
|
382
|
-
return {
|
|
383
|
-
block: block_1.default.parseBlock(resultRead.content),
|
|
384
|
-
location,
|
|
385
|
-
meta: resultRead.meta,
|
|
386
|
-
};
|
|
387
|
-
})));
|
|
388
|
-
});
|
|
389
|
-
}
|
|
390
|
-
/**
|
|
391
|
-
* Gets the transactions and their metadata from a block and an array of transaction positions
|
|
392
|
-
*
|
|
393
|
-
* @param transactionPositions transaction positions to retrieve
|
|
394
|
-
* @param block the block
|
|
395
|
-
* @param location location of the block
|
|
396
|
-
* @param meta metadata of the block
|
|
397
|
-
* @returns the transactions and their metadata
|
|
398
|
-
*/
|
|
399
|
-
getTransactionAndMetaFromPosition(transactionPositions, block, location, meta) {
|
|
400
|
-
// Gets the transaction from the positions
|
|
401
|
-
const transactions =
|
|
402
|
-
// first remove de duplicates
|
|
403
|
-
(0, utils_1.unique)(transactionPositions).uniqueItems.map(
|
|
404
|
-
// Get the transaction from their position and add the timestamp
|
|
405
|
-
(position) => ({
|
|
406
|
-
state: meta.state === types_1.StorageTypes.ContentState.CONFIRMED
|
|
407
|
-
? types_1.DataAccessTypes.TransactionState.CONFIRMED
|
|
408
|
-
: types_1.DataAccessTypes.TransactionState.PENDING,
|
|
409
|
-
timestamp: meta.timestamp,
|
|
410
|
-
transaction: block.transactions[position],
|
|
411
|
-
}));
|
|
412
|
-
// Gets the list of storage location of the transactions found
|
|
413
|
-
const transactionsStorageLocation = Array(transactions.length).fill(location);
|
|
414
|
-
// Gets the list of storage meta of the transactions found
|
|
415
|
-
const storageMeta = transactions.map(() => meta);
|
|
416
|
-
return { transactions, transactionsStorageLocation, storageMeta };
|
|
417
|
-
}
|
|
418
|
-
/**
|
|
419
|
-
* Throws an error if the data access isn't initialized
|
|
420
|
-
*/
|
|
421
|
-
checkInitialized() {
|
|
422
|
-
if (!this.isInitialized) {
|
|
423
|
-
throw new Error('DataAccess must be initialized');
|
|
424
|
-
}
|
|
425
|
-
}
|
|
426
|
-
}
|
|
427
|
-
exports.default = DataAccess;
|
|
428
|
-
//# sourceMappingURL=data-access.js.map
|
package/dist/data-access.js.map
DELETED
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"data-access.js","sourceRoot":"","sources":["../src/data-access.ts"],"names":[],"mappings":"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"}
|