UNPKG

woodwing-assets

Version:

TypeScript client for interacting with the WoodWing Assets Server API

468 lines (467 loc) 17 kB
"use strict"; 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;