UNPKG

@windingtree/wt-write-api

Version:

API to write data to the Winding Tree platform

69 lines (62 loc) 1.73 kB
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, };