woodwing-assets
Version:
TypeScript client for interacting with the WoodWing Assets Server API
468 lines (467 loc) • 17 kB
JavaScript
;
var __createBinding = (this && this.__createBinding) || (Object.create ? (function(o, m, k, k2) {
if (k2 === undefined) k2 = k;
var desc = Object.getOwnPropertyDescriptor(m, k);
if (!desc || ("get" in desc ? !m.__esModule : desc.writable || desc.configurable)) {
desc = { enumerable: true, get: function() { return m[k]; } };
}
Object.defineProperty(o, k2, desc);
}) : (function(o, m, k, k2) {
if (k2 === undefined) k2 = k;
o[k2] = m[k];
}));
var __setModuleDefault = (this && this.__setModuleDefault) || (Object.create ? (function(o, v) {
Object.defineProperty(o, "default", { enumerable: true, value: v });
}) : function(o, v) {
o["default"] = v;
});
var __importStar = (this && this.__importStar) || (function () {
var ownKeys = function(o) {
ownKeys = Object.getOwnPropertyNames || function (o) {
var ar = [];
for (var k in o) if (Object.prototype.hasOwnProperty.call(o, k)) ar[ar.length] = k;
return ar;
};
return ownKeys(o);
};
return function (mod) {
if (mod && mod.__esModule) return mod;
var result = {};
if (mod != null) for (var k = ownKeys(mod), i = 0; i < k.length; i++) if (k[i] !== "default") __createBinding(result, mod, k[i]);
__setModuleDefault(result, mod);
return result;
};
})();
Object.defineProperty(exports, "__esModule", { value: true });
exports.AssetsServer = void 0;
const fs_1 = require("fs");
const tmp = __importStar(require("tmp"));
const AssetsServerBase_1 = require("./AssetsServerBase");
const AssetsServerAdmin_1 = require("./AssetsServerAdmin");
const AssetsServerAPI_1 = require("./AssetsServerAPI");
class AssetsServer extends AssetsServerBase_1.AssetsServerBase {
constructor(config) {
super(config);
this.tmpDir = null;
this.admin = new AssetsServerAdmin_1.AssetsServerAdmin(this);
this.api = new AssetsServerAPI_1.AssetsServerAPI(this);
}
async browse(req) {
const params = {
path: req.path,
};
if (typeof req.includeFolders !== 'undefined') {
params.includeFolders = String(req.includeFolders);
}
if (typeof req.includeAssets !== 'undefined') {
params.includeAssets = String(req.includeAssets);
}
if (typeof req.fromRoot !== 'undefined') {
params.fromRoot = req.fromRoot;
}
if (typeof req.includeExtensions !== 'undefined') {
params.includeExtensions = req.includeExtensions;
}
return this.post('/services/browse', params);
}
async checkout(req) {
return await this.post(`/services/checkout/${req.assetId}`, {
download: 'false',
});
}
async undoCheckout(req) {
return await this.post(`/services/undocheckout/${req.assetId}`);
}
async copy(req) {
const form = {
source: req.source,
target: req.target,
};
if (typeof req.folderReplacePolicy !== 'undefined') {
form.folderReplacePolicy = req.folderReplacePolicy;
}
if (typeof req.fileReplacePolicy !== 'undefined') {
form.fileReplacePolicy = req.fileReplacePolicy;
}
if (typeof req.filterQuery !== 'undefined') {
form.filterQuery = req.filterQuery;
}
if (typeof req.flattenFolders !== 'undefined') {
form.flattenFolders = String(req.flattenFolders);
}
if (typeof req.asyncFlag !== 'undefined') {
form.async = String(req.asyncFlag);
}
return this.post('/services/copy', form);
}
async createAuthKey(req) {
const form = {
subject: req.subject,
validUntil: req.validUntil.toISOString(),
};
if (typeof req.downloadOriginal !== 'undefined') {
form.downloadOriginal = String(req.downloadOriginal);
}
if (typeof req.downloadPreview !== 'undefined') {
form.downloadPreview = String(req.downloadPreview);
}
if (typeof req.requestApproval !== 'undefined') {
form.requestApproval = String(req.requestApproval);
}
if (typeof req.requestUpload !== 'undefined') {
form.requestUpload = String(req.requestUpload);
}
if (typeof req.watermarked !== 'undefined') {
form.watermarked = String(req.watermarked);
}
if (typeof req.assetIds !== 'undefined' && req.assetIds.length > 0) {
form.assetIds = req.assetIds.join(',');
}
if (typeof req.containerIds !== 'undefined' && req.containerIds.length > 0) {
form.containerIds = req.containerIds.join(',');
}
if (typeof req.downloadPresetIds !== 'undefined' && req.downloadPresetIds.length > 0) {
form.downloadPresetIds = req.downloadPresetIds.join(',');
}
if (typeof req.sort !== 'undefined' && req.sort.length > 0) {
form.sort = req.sort.join(',');
}
if (typeof req.description !== 'undefined') {
form.description = req.description;
}
if (typeof req.containerId !== 'undefined') {
form.containerId = req.containerId;
}
if (typeof req.importFolderPath !== 'undefined') {
form.importFolderPath = req.importFolderPath;
}
if (typeof req.notifyEmail !== 'undefined') {
form.notifyEmail = req.notifyEmail;
}
return this.post('/services/createAuthKey', form);
}
async updateAuthKey(req) {
const form = {
key: req.key,
subject: req.subject,
validUntil: req.validUntil.toISOString(),
};
if (typeof req.downloadOriginal !== 'undefined') {
form.downloadOriginal = String(req.downloadOriginal);
}
if (typeof req.downloadPreview !== 'undefined') {
form.downloadPreview = String(req.downloadPreview);
}
if (typeof req.requestApproval !== 'undefined') {
form.requestApproval = String(req.requestApproval);
}
if (typeof req.requestUpload !== 'undefined') {
form.requestUpload = String(req.requestUpload);
}
if (typeof req.containerIds !== 'undefined' && req.containerIds.length > 0) {
form.containerIds = req.containerIds.join(',');
}
if (typeof req.downloadPresetIds !== 'undefined' && req.downloadPresetIds.length > 0) {
form.downloadPresetIds = req.downloadPresetIds.join(',');
}
if (typeof req.sort !== 'undefined' && req.sort.length > 0) {
form.sort = req.sort.join(',');
}
if (typeof req.description !== 'undefined') {
form.description = req.description;
}
if (typeof req.containerId !== 'undefined') {
form.containerId = req.containerId;
}
if (typeof req.importFolderPath !== 'undefined') {
form.importFolderPath = req.importFolderPath;
}
if (typeof req.notifyEmail !== 'undefined') {
form.notifyEmail = req.notifyEmail;
}
return this.post('/services/updateAuthKey', form);
}
async revokeAuthKeys(req) {
const form = {
keys: req.keys.join(','),
};
return this.post('/services/revokeAuthKeys', form);
}
async search(req) {
const form = {
q: req.q,
};
if (typeof req.start !== 'undefined') {
form.start = req.start;
}
if (typeof req.num !== 'undefined') {
form.num = req.num;
}
if (typeof req.sort !== 'undefined') {
form.sort = req.sort;
}
if (typeof req.metadataToReturn !== 'undefined') {
form.metadataToReturn = req.metadataToReturn;
}
if (typeof req.facets !== 'undefined') {
form.facets = req.facets;
}
if (typeof req.format !== 'undefined') {
form.format = req.format;
}
if (typeof req.appendRequestSecret !== 'undefined') {
form.appendRequestSecret = String(req.appendRequestSecret);
}
if (typeof req.returnHighlightedText !== 'undefined') {
form.returnHighlightedText = String(req.returnHighlightedText);
}
if (typeof req.returnThumbnailHits !== 'undefined') {
form.returnThumbnailHits = String(req.returnThumbnailHits);
}
if (typeof req.logSearch !== 'undefined') {
form.logSearch = String(req.logSearch);
}
return this.post('/services/search', form);
}
async move(req) {
const form = {
source: req.source,
target: req.target,
};
if (typeof req.folderReplacePolicy !== 'undefined') {
form.folderReplacePolicy = req.folderReplacePolicy;
}
if (typeof req.fileReplacePolicy !== 'undefined') {
form.fileReplacePolicy = req.fileReplacePolicy;
}
if (typeof req.filterQuery !== 'undefined') {
form.filterQuery = req.filterQuery;
}
if (typeof req.flattenFolders !== 'undefined') {
form.flattenFolders = String(req.flattenFolders);
}
if (typeof req.asyncFlag !== 'undefined') {
form.async = String(req.asyncFlag);
}
return this.post('/services/move', form);
}
async update(req) {
const form = {
id: req.id,
};
if (typeof req.metadataToReturn !== 'undefined') {
form.metadataToReturn = req.metadataToReturn;
}
if (typeof req.clearCheckoutState !== 'undefined') {
form.clearCheckoutState = String(req.clearCheckoutState);
}
if (typeof req.parseMetadataModifications !== 'undefined') {
form.parseMetadataModifications = String(req.parseMetadataModifications);
}
if (typeof req.keepMetadata !== 'undefined') {
form.keepMetadata = String(req.keepMetadata);
}
if (req.Filedata) {
form.Filedata = this.prepareFiledataStream(req.Filedata);
}
if (req.metadata) {
form.metadata = JSON.stringify(req.metadata);
}
return this.post('/services/update', form);
}
async updateBulk(req) {
const form = {
q: req.q,
metadata: JSON.stringify(req.metadata),
};
if (typeof req.asyncFlag !== 'undefined') {
form.async = String(req.asyncFlag);
}
if (typeof req.parseMetadataModifications !== 'undefined') {
form.parseMetadataModifications = String(req.parseMetadataModifications);
}
return this.post('/services/updatebulk', form);
}
async remove(req) {
const form = {
async: String(req.asyncFlag ?? false),
};
if (typeof req.q !== 'undefined') {
form.q = req.q;
}
if (typeof req.ids !== 'undefined' && req.ids.length > 0) {
form.ids = req.ids.join(',');
}
if (typeof req.folderPath !== 'undefined') {
form.folderPath = req.folderPath;
}
return this.post('/services/remove', form);
}
async create(req) {
const form = {};
if (typeof req.metadataToReturn !== 'undefined') {
form.metadataToReturn = req.metadataToReturn;
}
if (req.Filedata) {
form.Filedata = this.prepareFiledataStream(req.Filedata);
}
if (req.metadata) {
form.metadata = JSON.stringify(req.metadata);
}
return await this.post('/services/create', form);
}
async createFolder(req) {
return await this.post('/services/createFolder', { path: req.path });
}
async createRelation(req) {
return this.post('/services/createRelation', {
relationType: req.relationType,
target1Id: req.target1Id,
target2Id: req.target2Id,
});
}
async removeRelation(req) {
return this.post('/services/removeRelation', {
relationIds: req.relationIds.join(','),
});
}
async sendEmail(req) {
const form = {
to: req.to,
subject: req.subject,
};
if (typeof req.body !== 'undefined') {
form.body = req.body;
}
if (typeof req.htmlBody !== 'undefined') {
form.htmlBody = req.htmlBody;
}
return this.post('/services/notify/email', form, true);
}
async localization(req) {
const form = {};
if (typeof req.localeChain !== 'undefined') {
form.localeChain = req.localeChain.join(',');
}
if (typeof req.ifModifiedSince !== 'undefined') {
form.ifModifiedSince = req.ifModifiedSince.toISOString();
}
if (typeof req.bundle !== 'undefined') {
form.bundle = req.bundle;
}
return this.post('/services/messages', form);
}
async logUsage(req) {
const action = req.action.startsWith('CUSTOM_ACTION_')
? req.action
: `CUSTOM_ACTION_${req.action}`;
const form = {
assetId: req.assetId,
action,
};
return this.post('/services/logUsage', form);
}
async removeFromCollection(req) {
return this.post('/services/collection/remove', {
childIds: req.childIds.join(','),
collectionId: req.collectionId,
});
}
async addToCollection(req) {
return this.post('/services/collection/add', {
childIds: req.childIds.join(','),
collectionId: req.collectionId,
});
}
async history(req) {
const form = {
id: req.id,
};
if (typeof req.start !== 'undefined') {
form.start = req.start;
}
if (typeof req.num !== 'undefined') {
form.num = req.num;
}
if (typeof req.detailLevel !== 'undefined') {
form.detailLevel = req.detailLevel;
}
if (typeof req.actions !== 'undefined' && req.actions.length > 0) {
form.actions = req.actions.join(',');
}
return await this.post('/services/asset/history', form);
}
async promote(req) {
return this.post('/services/version/promote', {
assetId: req.assetId,
version: req.version,
});
}
async getMetadataReport(req) {
this.ensureTmpDir();
const filePath = tmp.tmpNameSync({ dir: this.tmpDir.name });
const params = {};
if (typeof req.assetIds !== 'undefined' && req.assetIds.length > 0) {
params.assetIds = req.assetIds.join(',');
}
if (typeof req.assetPath !== 'undefined') {
params.assetPath = req.assetPath;
}
if (typeof req.fields !== 'undefined' && req.fields.length > 0) {
params.fields = req.fields.join(',');
}
if (typeof req.q !== 'undefined') {
params.q = req.q;
}
const query = new URLSearchParams(params).toString();
const format = req.format ?? 'csv';
const endpoint = `/metadata/report.${format}?${query}`;
await this.download(endpoint, filePath);
return filePath;
}
async profile() {
return this.post('/services/profile');
}
async downloadFromId(req) {
this.ensureTmpDir();
const filePath = tmp.tmpNameSync({ dir: this.tmpDir.name });
const assetName = req.assetName ?? req.assetId;
const endpoint = `/file/${req.assetId}/*/${assetName}?forceDownload=true`;
try {
await this.download(endpoint, filePath);
return filePath;
}
catch (err) {
throw err;
}
}
async downloadPreviewFromId(req) {
this.ensureTmpDir();
const filePath = tmp.tmpNameSync({ dir: this.tmpDir.name });
const assetName = req.assetName ?? req.assetId;
const endpoint = `/preview/${req.assetId}/*/${assetName}.jpg?forceDownload=true`;
try {
await this.download(endpoint, filePath);
return filePath;
}
catch (err) {
throw err;
}
}
ensureTmpDir() {
if (!this.tmpDir) {
this.tmpDir = tmp.dirSync();
}
}
prepareFiledataStream(filedata) {
if (Buffer.isBuffer(filedata)) {
this.ensureTmpDir(); // make sure tmpDir exists
const tmpPath = tmp.tmpNameSync({ dir: this.tmpDir.name });
(0, fs_1.writeFileSync)(tmpPath, filedata);
return (0, fs_1.createReadStream)(tmpPath);
}
// already a ReadStream
return filedata;
}
}
exports.AssetsServer = AssetsServer;