@windingtree/wt-read-api
Version:
API to interact with the Winding Tree platform
61 lines (53 loc) • 2.28 kB
JavaScript
const Web3 = require('web3');
const lib = require('zos-lib');
const { getSchemaVersion } = require('../../test/utils/schemas');
const provider = new Web3.providers.HttpProvider('http://localhost:8545');
const web3 = new Web3(provider);
const Contracts = lib.Contracts;
const Organization = Contracts.getFromNodeModules('@windingtree/wt-contracts', 'Organization');
const deployFullAirline = async (deploymentOptions, airlineDescription, flights, flightInstances) => {
const dataFormatVersion = deploymentOptions.schemaVersion;
const offChainDataAdapter = deploymentOptions.offChainDataClient;
const accounts = await web3.eth.getAccounts();
const indexFile = {};
if (flightInstances) {
for (const flight of flights.items) {
flight.flightInstancesUri = await offChainDataAdapter.upload(JSON.stringify(flightInstances));
}
}
if (airlineDescription) {
indexFile.descriptionUri = await offChainDataAdapter.upload(JSON.stringify(airlineDescription));
}
if (flights) {
indexFile.flightsUri = await offChainDataAdapter.upload(JSON.stringify(flights));
}
indexFile.notificationsUri = 'https://notifications.example';
indexFile.bookingUri = 'https://booking.example';
indexFile.dataFormatVersion = dataFormatVersion;
const dataUri = await offChainDataAdapter.upload(JSON.stringify(indexFile));
const orgJsonContent = {
dataFormatVersion: getSchemaVersion('@windingtree/wt-airline-schemas'),
name: airlineDescription.name,
airline: {
name: airlineDescription.name,
apis: [
{
entrypoint: dataUri,
format: 'windingtree',
},
{
entrypoint: 'http://dummy.restapiexample.com/api/v1/employees',
format: 'coolapi',
},
],
},
};
const orgJsonString = JSON.stringify(orgJsonContent);
const orgJsonUri = await offChainDataAdapter.upload(orgJsonString);
const orgJsonHash = web3.utils.soliditySha3(orgJsonString);
const airlineEvent = await deploymentOptions.factory.methods.createAndAddToDirectory(orgJsonUri, orgJsonHash, deploymentOptions.directoryAddress).send({ from: accounts[3] });
return Organization.at(airlineEvent.events.OrganizationCreated.returnValues.organization);
};
module.exports = {
deployFullAirline,
};