Fanu2's picture
Deploy full app to HF Space
b456468
/* eslint-disable */
const path = require('path');
const fs = require('fs');
const fetch = require('node-fetch');
const pkg = require('../package.json');
const LOCAL_DIST_PATH = path.join(__dirname, '../dist');
const STORAGE_API_URL = 'https://api-storage.cloud.toast.com/v1';
const IDENTITY_API_URL = 'https://api-identity.infrastructure.cloud.toast.com/v2.0';
const TOAST_CLOUD_TENANTID = process.env.TOAST_CLOUD_TENANTID;
const TOAST_CLOUD_STORAGEID = process.env.TOAST_CLOUD_STORAGEID;
const TOAST_CLOUD_USERNAME = process.env.TOAST_CLOUD_USERNAME;
const TOAST_CLOUD_PASSWORD = process.env.TOAST_CLOUD_PASSWORD;
async function getTOASTCloudContainer(token) {
const response = await fetch(`${STORAGE_API_URL}/${TOAST_CLOUD_STORAGEID}`, {
method: 'GET',
headers: {
'Content-Type': 'application/json',
'X-Auth-Token': token,
},
});
const container = await response.text();
return `${container.trim()}/tui-image-editor`;
}
async function getTOASTCloudToken() {
const data = {
auth: {
tenantId: TOAST_CLOUD_TENANTID,
passwordCredentials: {
username: TOAST_CLOUD_USERNAME,
password: TOAST_CLOUD_PASSWORD,
},
},
};
const response = await fetch(`${IDENTITY_API_URL}/tokens`, {
method: 'POST',
headers: { 'Content-Type': 'application/json' },
body: JSON.stringify(data),
});
const result = await response.json();
return result.access.token.id;
}
function publishToCdn(token, localPath, cdnPath) {
const files = fs.readdirSync(localPath);
files.forEach((fileName) => {
const objectPath = `${cdnPath}/${fileName}`;
if (fileName.match(/.(js|css|svg)$/)) {
const readStream = fs.createReadStream(`${localPath}/${fileName}`);
const contentType = /css$/.test(fileName)
? 'text/css'
: /js$/.test(fileName)
? 'text/javascript'
: 'image/svg+xml';
fetch(`${STORAGE_API_URL}/${objectPath}`, {
method: 'PUT',
headers: {
'Content-Type': contentType,
'X-Auth-Token': token,
},
body: readStream,
});
} else {
publishToCdn(token, `${localPath}/${fileName}`, objectPath);
}
});
}
async function publish() {
const token = await getTOASTCloudToken();
const container = await getTOASTCloudContainer(token);
const cdnPath = `${TOAST_CLOUD_STORAGEID}/${container}`;
[`v${pkg.version}`, 'latest'].forEach((dir) => {
publishToCdn(token, LOCAL_DIST_PATH, `${cdnPath}/${dir}`);
});
}
publish();