@windingtree/wt-write-api
Version:
API to write data to the Winding Tree platform
69 lines (62 loc) • 1.73 kB
JavaScript
const { SwarmUploader } = require('./swarm');
const { InMemoryUploader } = require('./in-memory');
const { S3Uploader } = require('./s3');
const { swarm } = require('../../config');
const _UPLOADERS_BY_CODE = { // Used in account configurations.
s3: S3Uploader,
swarm: SwarmUploader,
inMemory: InMemoryUploader,
};
const _COMMON_OPTIONS = {
swarm: {
providerUrl: swarm.provider,
timeout: swarm.timeout,
timeoutRead: swarm.timeoutRead,
timeoutWrite: swarm.timeoutWrite,
},
};
/**
* Specific combination of off-chain uploaders to be used.
*/
class UploaderConfig {
/**
* @param {Object} uploaders Mapping of dot-separated
* field paths to OffChainUploader instances.
*/
constructor (uploaders) {
this.uploaders = uploaders;
}
/**
* Create an UploaderConfig instance from account data.
*
* @param {Object} account
*/
static fromAccount (account) {
const config = account.uploaders,
opts = {};
for (const documentKey in config) {
const uploaderKey = Object.keys(config[documentKey])[0];
if (uploaderKey in _UPLOADERS_BY_CODE) {
const uploaderOpts = Object.assign({},
_COMMON_OPTIONS[uploaderKey],
config[documentKey][uploaderKey]
);
opts[documentKey] = new _UPLOADERS_BY_CODE[uploaderKey](uploaderOpts);
} else {
throw new Error(`Unknown uploader type: ${uploaderKey}`);
}
}
return new UploaderConfig(opts);
}
/**
* Get off-chain uploader for the specified data subtree.
*/
getUploader (subtree) {
return this.uploaders[subtree] || this.uploaders.root;
}
};
module.exports = {
S3Uploader,
SwarmUploader,
UploaderConfig,
};