@eddye68/studio-client
Version:
The AWS service Studio client
1 lines • 46.1 kB
Source Map (JSON)
{"version":3,"sources":["../../src/client/client.ts","../../src/client/client-error.ts","../../src/http-client/http-error.ts","../../src/http-client/http-response-error.ts","../../src/http-client/http-client.ts","../../src/model/wfl/wflobject.ts","../../src/model/wfl/relation.ts"],"sourcesContent":["import { v4 as uuidv4 } from 'uuid';\nimport { IClient } from './client-interface';\nimport { ClientOptions } from './client-options';\n\nimport { LoggerInterface, } from '@aws-lambda-powertools/logger/types';\nimport { HttpClient } from '../http-client/http-client';\nimport { IHttpClient } from '../http-client/http-client-interface';\nimport { ClientError } from './client-error';\nimport { WflObject } from '../model/wfl/wflobject';\nimport { Relation, RelationType } from '../model/wfl/relation';\nimport { MetaDataValue } from '../model/wfl/metadata-value';\nimport { PropertyValue } from '../model/wfl/property-value';\nimport { Target } from '../model/wfl/target';\n\nimport { BodyInit } from \"undici-types/fetch\";\n\ninterface RegisterRequest {\n Appname: string,\n Url: string,\n Username: string,\n Password: string,\n RequestId: string,\n /**\n * Optional\n */\n ConfigurationId?: string\n}\n\ninterface Responsebase {\n ConfigurationId: string,\n RequestId: string,\n EventSource: string,\n EventDetail: string,\n Status: string,\n StatusMessage?: string,\n Result: any\n}\n\n\n\nexport class Client implements IClient{\n\n private _options: ClientOptions;\n private _logger : LoggerInterface;\n private _httpClient : IHttpClient;\n\n private _studioBaseUrl : string = \"\";\n\n private _publicationsCache : Record<string,any> = {};\n\n get options() {\n return this._options;\n }\n\n /**\n * The configurationId\n */\n private _configurationId: string | null = null;\n\n /**\n * @returns The configurationid\n * @throws QqAwsServiceStudioClientClientError when not logged on\n */\n get configurationId(): string {\n if (this._configurationId === null) {\n throw new ClientError(\"Not logged on\")\n };\n\n return this._configurationId;\n }\n\n /**\n * \n * @param logger The logger instance\n * @param options The Client options\n * @param httpClient The Http client. When not defined an instance will be created automatically.\n */\n constructor(logger : LoggerInterface, options: ClientOptions, httpClient? : IHttpClient) {\n\n console.log(\"Client::constructor\", options);\n \n if (httpClient === undefined) {\n httpClient = new HttpClient(logger);\n }\n\n this._logger = logger;\n this._options = options;\n this._httpClient = httpClient;\n\n this._httpClient.setCommonHeaders( {\n 'User-Agent': 'StudioClient Client',\n 'x-api-key' : this.options.apiKey\n });\n\n this._httpClient.setBaseUrl(options.baseUrl);\n }\n\n private validateOptions(options: ClientOptions) {\n if (options.baseUrl == \"\") {\n throw new ClientError(\"baseUrl is required\");\n }\n }\n\n /**\n * \n * @returns true when logged in\n */\n isLoggedOn(): boolean {\n return this._configurationId !== null;\n }\n\n setStudioBaseUrl(url : string) {\n this._studioBaseUrl = this._sanitizeUrl(url);\n }\n\n /**\n * \n * @param configurationId \n * @returns true when logged in\n */\n async logon(configurationId: string) : Promise<boolean> {\n console.log(`QqAwsServiceStudioClientClient::logon: configurationId=[${configurationId}]`);\n //TODO: Maybe some additional validation here \n\n this._configurationId = configurationId;\n\n return this.isLoggedOn();\n }\n\n\n /**\n * \n * @returns The Woodwing Studio base URL\n */\n getBaseUrl(): string {\n return <string>this._options.baseUrl;\n }\n\n /**\n * @param studioUrl The \n * @param appname The application name\n * @param username The WoodWing Studio username\n * @param password The WoodWing Studio password\n * @param requestId Optional: The requestID \n * @param configurationId Optional: The configurationID\n * @returns The new or given ConfigurationId\n * @throws QqAwsServiceStudioClientClientError when the registration fails.\n */\n async register(studioUrl: string, appname: string, username: string, password: string, requestId: string|undefined, configurationId: string|undefined): Promise<string> {\n if (requestId === undefined) {\n requestId = this._generateRequestId();\n }\n console.log(`QqAwsServiceStudioClientClient::register: studioUrl=[${studioUrl}], appname=[${appname}], username=[${username}], requestId=[${requestId}]`);\n\n const request: RegisterRequest = {\n \"Appname\": appname,\n \"Url\": this._sanitizeUrl(studioUrl),\n \"Username\": username,\n \"Password\": password,\n \"RequestId\": requestId,\n };\n\n if (configurationId !== undefined) {\n if (this._configurationId !== null) {\n request.ConfigurationId = this._configurationId\n }\n request.ConfigurationId = configurationId\n }\n\n const result = await this._httpClient.request('POST', 'studioapplication', undefined, request);\n if ('ConfigurationId' in result) {\n this._configurationId = result.ConfigurationId;\n return result.ConfigurationId;\n }\n\n throw new ClientError(\"No 'ConfigurationId' in response\");\n }\n\n async unRegister(configurationId?: string) : Promise<void> {\n if (configurationId === undefined) {\n configurationId = this.configurationId;\n }\n }\n\n /**\n * \n * @param ids The publication ids to resolve\n * @param requestInfo What elements to retrieve. \"PubChannels\",\"States\", \"Categories\"\n * @param forceNew When true, ignore local cache.\n * @returns All resolved publications \n */\n public async getPublications(ids : string[], requestInfo? : string[], forceNew? : boolean, requestId?: string, configurationId?: string) : Promise<Record<string, any>[]> {\n if(forceNew === undefined) {\n forceNew = false;\n }\n \n console.log(`SqCreatePdf2Client::getPublications: ids=[${ids.join(', ')}], forceNew=[${forceNew}]`);\n let idsToRequest : string[] = [];\n for (const id of ids) {\n if (forceNew === true || !(id in this._publicationsCache)) {\n idsToRequest.push(id);\n } else {\n // Brand already cached\n this._logger.debug(`Brand ${id} already loaded. Check the request info`);\n if (requestInfo !== undefined) {\n for (const requestInfoElement of requestInfo) {\n if (!(requestInfoElement in this._publicationsCache[id])) {\n // The request info element is not cached for this brand\n this._logger.debug(`Brand ${id} already loaded. But ${requestInfoElement} was not requested before.`);\n idsToRequest.push(id);\n break;\n }\n }\n }\n\n }\n }\n\n if(idsToRequest.length > 0) {\n const publications = await this.getPublicationsInt(\n idsToRequest, requestInfo);\n\n for (const publication of publications) {\n const brandId = <string> publication.Id;\n this._publicationsCache[brandId] = publication;\n }\n }\n\n let result : Record<string, any>[] = [];\n for (const id of ids) {\n if (id in this._publicationsCache) {\n result.push(this._publicationsCache[id]);\n }\n }\n\n return result;\n }\n\n /**\n *\n * @param {string} publicationId\n * @returns {Promise<null|object>}\n */\n async getPublication(publicationId : string, requestInfo? : string[] ) {\n\n const publications = await this.getPublications([publicationId], requestInfo);\n \n\n for (let pubIdx in publications) {\n\n const publication = publications[pubIdx];\n\n console.log(\"processing publication: \", publication);\n\n if (publication.Id === publicationId.toString()) {\n return publication;\n }\n }\n\n return null;\n }\n\n /**\n * \n * @param forceNew When true create a new ticket instead of the cached ticket\n * @param requestId \n * @param configurationId \n * @returns \n */\n async getTicket(forceNew? : boolean, requestId?: string, configurationId?: string): Promise<string> {\n if (forceNew === undefined) {\n forceNew = false;\n }\n \n if (requestId === undefined) {\n requestId = this._generateRequestId();\n }\n\n if (configurationId === undefined) {\n configurationId = this.configurationId;\n }\n console.log(`QqAwsServiceStudioClientClient::getTicket: forceNew=[${forceNew}], requestId=[${requestId}], configurationId=[${configurationId}]`);\n\n const path = 'ticket';\n\n const query = new URLSearchParams({\n ConfigurationId: configurationId,\n RequestId: requestId,\n Forcenew: forceNew ? 'true' : 'false'\n })\n\n const result = await this._httpClient.request('GET', path, query);\n\n return result;\n }\n\n /**\n * @inheritdoc\n */\n async getStateByName(publicationId : string, type : string, name : string ) : Promise<null|any> {\n\n const publication = await this.getPublication(publicationId, ['States']);\n\n if (publication === null) {\n return null;\n }\n\n for (const state of publication.States) {\n //const state = publication.States[stateIdx];\n\n if (state.Type.toLowerCase() === type.toLowerCase() && state.Name.toLowerCase() === name.toLowerCase()) {\n return state;\n }\n }\n \n return null;\n }\n\n\n\n\n /**\n *\n * @param wflObject\n * @param childId\n * @param type\n * @param parentType\n * @returns \n */\n async getWflRelations(wflObject : any, childId : string, type : string = 'Contained', parentType : string = 'Dossier') : Promise<object[]> {\n\n let result = [];\n\n for (let relIdx in wflObject.Relations) {\n const relation = wflObject.Relations[relIdx];\n\n if (\n relation.Child === childId &&\n relation.Type.toLowerCase() === type.toLowerCase() &&\n relation.ParentInfo.Type.toLowerCase() === parentType.toLowerCase()\n ) {\n result.push(relation)\n }\n\n }\n\n return result;\n }\n\n // /**\n // *\n // * @param {string} bucket\n // * @param {string} key\n // *\n // * @returns {Promise<object>}\n // */\n // async getDigitalArticle = async(bucket : string, key : string) : Promise<object> => {\n // const s3client = new S3Client({});\n // const response = await s3client.send(new GetObjectCommand(\n // {\n // Bucket: bucket,\n // Key: key\n // }\n // ));\n\n // if (!response.ETag) {\n // throw new Error('Error getting digital article from bucket.');\n // }\n\n // return response;\n // }\n \n /**\n *\n * @param url\n * @returns \n */\n async downloadFile(url : string, query? : URLSearchParams ) : Promise<ArrayBuffer>{\n if (query === undefined) {\n query = new URLSearchParams();\n }\n\n query.append('ticket', await this.getTicket());\n\n const buffer = await this._httpClient.downloadFile(url, query);\n \n return buffer;\n }\n \n \n /**\n * @inheritdoc\n */\n async uploadFile(body : BodyInit, contentType : string, size : number){\n\n if(this._studioBaseUrl === '') {\n throw new ClientError(\"No studio base url set\");\n }\n\n const url = await this._httpClient.uploadFile(body, size, contentType, await this.getTicket(), this._studioBaseUrl )\n\n return url;\n }\n\n /**\n *\n * @param objectIds\n * @param rendition\n * @param requestInfo\n * @param lock\n * @param areas\n * @returns \n */\n async getObjects(\n objectIds : string[], \n rendition : string = 'native', \n requestInfo : string[] = ['MetaData'],\n lock : boolean = false, \n areas : string[] = ['Workflow']\n ) : Promise<WflObject[]> {\n\n const query = this._getCommonQueryParameters();\n query.append('ObjectIds', objectIds.join(','));\n query.append('RequestInfo', requestInfo.join(','));\n query.append('Rendition', rendition);\n\n const response = await this._httpClient.request('get', 'objects', query);\n //TODO: How to convert te result in a WflObject instance.\n return response;\n\n }\n\n async createObjects(wflObjects : WflObject[], lock : boolean = false) : Promise<WflObject[]> {\n\n const body = {\n WflObjects: wflObjects,\n RequestId: this._generateRequestId(),\n ConfigurationId: this.configurationId,\n Lock: lock\n }\n\n const response = await this._httpClient.request('post', 'objects', undefined, body);\n\n return response;\n }\n\n /**\n *\n * @param parentIdOrInstance\n * @param childIdsOrInstances\n * @param type\n * @returns \n */\n async createObjectRelations(\n parentIdOrInstance : string | WflObject, \n childIdsOrInstances : string[]|WflObject[], \n type : RelationType = RelationType.Contained \n ) : Promise<Relation[]> {\n const parentId = this._getObjectId(parentIdOrInstance);\n const childIds : string[] = [];\n\n for(const childIdOrInstance of childIdsOrInstances) {\n const childId = this._getObjectId(childIdOrInstance);\n childIds.push(childId);\n }\n\n let relations = [];\n\n for (const childId of childIds) {\n relations.push(new Relation({\n Parent: parentId,\n Child: childId,\n Type: type\n }));\n }\n\n const body = {\n RequestId : this._generateRequestId(),\n Relations : relations,\n ConfigurationId: this.configurationId\n }\n\n const response = await this._httpClient.request('post','objectrelations', undefined, body);\n return response;\n }\n\n /**\n * \n * @param childIdsOrInstances \n * @param permanent \n * @param areas \n * @returns \n */\n async deleteObjects(childIdsOrInstances : string[] | WflObject[], permanent : boolean = false, areas : string = 'Workflow') : Promise<object> {\n const ids : string[] = [];\n for(const childIdOrInstance of childIdsOrInstances) {\n const childId = this._getObjectId(childIdOrInstance);\n ids.push(childId);\n }\n\n const query = this._getCommonQueryParameters();\n query.append('ObjectIds', ids.join(','));\n query.append('Permanent', '');\n query.append('Areas', areas);\n query.append('RequestId', this._generateRequestId());\n query.append('ConfigurationId', this.configurationId);\n\n const response = await this._httpClient.request('delete', 'objects', query);\n\n return response;\n }\n\n /**\n * \n * @param action Workflow Action type.\n * @param context v10.40 Can be used to provide relevant information based on the dialog circumstances.\n * @param metaData v8.0: MetaData value allows client app to round trip the data.\n * @param targets v8.0: Object's targets. Data contained in Targets allow client app to round trip the data.\n * @param defaultDossier v7.0: Dossier ID: Request to populate the Dossier property. \n * The given Publication and Issue are used to get dossiers (to choose from). If no Issue specified, \n * first one is taken. The dossier ID will be used to set the default value at Dossier property. \n * If DefaultDossier is nil (or left out) no dossier property nor dossiers will be returned.\n * @param parent v7.0: Parent ID: When creating objects that are placed (such as creating articles form layout) the client \n * knows that the object will be placed, but the server does not know yet. For placed objects, \n * the dialog has some fields disabled (greyed) like Publication/Brand, Issue and Category. Nil (or left out) \n * means object is not placed.\n * @param template v7.0: Template ID : When creating objects, some properties should be taken from a template. \n * Those should be pre-filled in for the new object at the Create workflow dialog. Provide the object ID of \n * the template (that was picked by user) to let server pre-fill properties. Nil (or left out) means object \n * is not created from template.\n * @param areas v8.0: Area to search for the object. Nil means 'workflow' area only (for backwards compatibility reasons).\n * @param multipleObjects v9.2: Indicate if the dialog is for multiple objects or single object. \n * Nil means 'false' (for backwards compatibility reasons).\n * @returns \n */\n async getDialog2(\n action : string, \n context? : string, \n metaData? : MetaDataValue[], \n targets? : Target[], \n defaultDossier? : string,\n parent? : string,\n template? : string,\n areas? : string[],\n multipleObjects? : boolean\n ) {\n const body : Record<string, any> = {\n RequestId : this._generateRequestId(),\n ConfigurationId: this.configurationId,\n Action : action\n }\n\n if(context) {\n body['Context'] = context;\n }\n\n if(metaData) {\n //TODO: Must be 'MetaData' (bug in Service)\n body['Metadata'] = metaData;\n }\n\n if(targets) {\n body['Targets'] = targets;\n }\n\n if(defaultDossier) {\n body['DefaultDossier'] = defaultDossier;\n }\n\n if(parent) {\n body['Parent'] = parent;\n }\n\n if(template) {\n body['Template'] = template;\n }\n\n if(areas) {\n body['Areas'] = areas;\n }\n\n if(multipleObjects) {\n body['MultipleObjects'] = multipleObjects;\n }\n\n const response = await this._httpClient.request('post', 'dialog', undefined, body);\n return response;\n }\n\n /**\n * \n * @param ids The brand id(s)\n * @param requestInfo What elements to retrieve. \"PubChannels\",\"States\", \"Categories\"\n * @param requestId \n * @param configurationId \n * @returns \n */\n private async getPublicationsInt(ids: string[], requestInfo? : string[], requestId?: string, configurationId?: string): Promise<Record<string, any>[]> {\n if(requestInfo === undefined) {\n requestInfo = [];\n }\n \n if (requestId === undefined) {\n requestId = this._generateRequestId();\n }\n console.log(`QqAwsServiceStudioClientClient::getPublications: ids=[${ids.join(',')}], requestInfo=[${requestInfo.join(', ')}], requestId=[${requestId}]`);\n\n if (configurationId === undefined) {\n configurationId = this.configurationId;\n }\n \n const query = this._getCommonQueryParameters(configurationId);\n query.append('Ids', ids.join(','));\n query.append('RequestInfo', requestInfo.join(', '));\n\n const result = await this._httpClient.request('GET', 'publications', query);\n return result;\n }\n\n /**\n * Add the ConfigurationId and RequestId to the query\n * \n * \n * @param configurationId Overrule the configurationId when required.\n * @returns \n */\n private _getCommonQueryParameters(configurationId? : string) : URLSearchParams {\n if (configurationId === undefined) {\n configurationId = this.configurationId;\n }\n const query = new URLSearchParams({\n ConfigurationId: configurationId,\n RequestId: this._generateRequestId()\n });\n\n return query;\n }\n\n /**\n * Get the parentId from the iddOrInstance\n *\n * @param iddOrInstance\n * @returns The object id\n * @throws ClientError when the id cannot be determined\n */\n private _getObjectId(idOrInstance : string | WflObject, ) : string {\n if(idOrInstance instanceof WflObject || (\n typeof idOrInstance === 'object' &&\n '__classname__' in idOrInstance &&\n idOrInstance['__classname__'] === 'Object')) {\n const id = idOrInstance.MetaData?.BasicMetaData?.ID;\n if(id === undefined || id === null) {\n throw new ClientError(`childId is undefined`);\n }\n return id;\n } else {\n return idOrInstance;\n }\n }\n\n _sanitizeUrl(url: string): string {\n return url.replace(/\\/$/, \"\");\n }\n\n _generateRequestId() {\n return uuidv4();\n }\n\n\n}","export class ClientError extends Error {\n constructor(msg: string) {\n super(msg);\n this.name = 'ClientError';\n }\n}\n","export class HttpError extends Error {\n\n\n\n /**\n *\n * @param {string} message\n */\n constructor(message: string) {\n super(message);\n this.name = \"HttpError\";\n }\n}","import { HttpError } from \"./http-error\";\n\nexport class HttpResponseError extends HttpError {\n\n readonly code: number;\n readonly name: string;\n\n /**\n *\n * @param {Response} response\n */\n constructor(message: string, response: Response) {\n super(HttpResponseError.buildMessage(message, response));\n this.code = response.status;\n this.name = \"HttpResponseError\";\n }\n\n static buildMessage(message : string, response: Response) : string {\n if(message) {\n return `HTTP Error: ${message}: ${response.status} ${response.statusText}`;\n } else {\n return `HTTP Error: ${response.status} ${response.statusText}`;\n }\n }\n}","import { ClientError } from \"../client/client-error\";\nimport { IHttpClient } from \"./http-client-interface\";\nimport { HttpError } from \"./http-error\";\nimport { HttpResponseError } from \"./http-response-error\";\nimport {ResponseBase} from \"./response-base\";\nimport {v4 as uuidv4} from 'uuid';\nimport { LoggerInterface, } from '@aws-lambda-powertools/logger/types';\nimport { BodyInit, HeadersInit } from \"undici-types/fetch\";\n\nexport class HttpClient implements IHttpClient {\n\n \n private headers : Record<string,string> = {}\n\n private baseUrl: string = \".\";\n \n private logger : LoggerInterface;\n\n constructor(logger : LoggerInterface) {\n this.logger = logger;\n }\n\n /**\n * \n * @returns The configuration service base URL\n */\n getBaseUrl(): string {\n return <string>this.baseUrl;\n }\n\n setBaseUrl(baseUrl : string) : void {\n this.baseUrl = baseUrl;\n }\n\n setCommonHeaders(headers : Record<string,string>) : void{\n this.headers = headers;\n }\n\n\n async request(httpMethod: string, path: string, query?: URLSearchParams, body?: any): Promise<any> {\n httpMethod = httpMethod.toUpperCase();\n\n if (query === undefined) {\n query = new URLSearchParams();\n }\n\n const url = this.getBaseUrl() + '/' + path + (query.size > 0 ? '?' + query.toString() : '');\n\n const request: RequestInit = {\n method: httpMethod.toUpperCase(),\n headers: { ...this.headers} // Clone headers\n }\n\n console.log(`HttpClient::_request: httpMethod=[${httpMethod}], url=[${url}]`);\n if (httpMethod === 'POST') {\n this.logger.debug(`HttpClient::_request: body=[${JSON.stringify(body)}]`);\n console.log(\"HttpClient::_request: body:\", body);\n request.body = JSON.stringify(body);\n // @ts-ignore request.Headers is always set.\n request.headers['Content-Type'] = 'application/json';\n }\n\n const response = await fetch(url, request);\n\n let data: ResponseBase | null = null;\n\n const contentType: string = <string>response.headers.get(\"Content-Type\");\n switch (contentType) {\n case \"application/json\":\n data = (await response.json()) as ResponseBase;\n break;\n default:\n throw new HttpResponseError(`Unsupported content type: ${contentType}`, response);\n }\n\n data = this._checkResponse(data);\n\n return data.Result;\n }\n\n\n /**\n *\n * @param url\n * @returns \n */\n async downloadFile(url : string, query?: URLSearchParams) : Promise<ArrayBuffer>{\n if (query === undefined) {\n query = new URLSearchParams();\n } \n\n const parsedUrl = new URL(url)\n\n query.forEach((value, key) => {\n parsedUrl.searchParams.set(key, value);\n });\n\n\n //url = url + (query.size > 0 ? '?' + query.toString() : '');\n url = parsedUrl.toString();\n\n \n const response = await fetch(url);\n\n if (!response.ok) {\n throw new HttpResponseError(\"Object cannot be downloaded from Studio.\", response);\n }\n\n const buffer = await response.arrayBuffer();\n\n console.log(`Downloaded ${buffer.byteLength} bytes`);\n\n return buffer;\n }\n\n /**\n * Upload a file to the Studio transfer server.\n * \n * \n * @param body \n * @param size\n * @param contentType \n * @param ticket \n * @param studiobaseUrl The Studio base url\n *\n * @returns The url to the uploaded file\n */\n async uploadFile(body : BodyInit, size : number | null, contentType : string, ticket : string, studiobaseUrl : string) : Promise<string> {\n this.logger.debug(`HttpClient::uploadFile: ticket=[${ticket}], studiobaseUrl=[${studiobaseUrl}]`)\n\n const url = `${studiobaseUrl}/transferindex.php?ticket=${ticket}&fileguid=${uuidv4()}`;\n\n const headers : HeadersInit = {\n 'Content-Type' : contentType,\n }\n\n if(size !== null) {\n headers['Content-Length'] = String(size);\n }\n\n const response = await fetch(url, {\n method: 'PUT',\n // To prevent the error: RequestInit: duplex option is required when sending a body\n // Note: The order is important!!!! The 'duplex' setting must be set before the body otherwise it will be ignored.\n duplex: 'half',\n body: body,\n headers: headers\n });\n\n if (!response.ok) {\n throw new HttpResponseError('Unable to upload file.',response);\n }\n\n return url;\n }\n\n /**\n * @param {object} data\n * @private\n */\n _checkResponse(data: ResponseBase | null) : ResponseBase {\n console.log(\"HttpClient::_checkResponse: \", data);\n\n if (data === null) {\n throw new HttpError(\"No JSON data received\");\n }\n\n if (data.hasOwnProperty('Status')) {\n if (data.Status !== 'ok') {\n if (data.StatusMessage !== undefined) {\n throw new ClientError(`The status is not 'ok': ${data.Status}: ${data.StatusMessage}`);\n } else {\n throw new ClientError(`The status is not 'ok': ${data.Status}`);\n }\n }\n } else {\n throw new HttpError(\"No 'Status' property found in response\");\n }\n\n if (!data.hasOwnProperty('Result')) {\n throw new HttpError(\"No 'Result' property found in response\");\n }\n\n return data;\n }\n\n _sanitizeUrl(url: string): string {\n return url.replace(/\\/$/, \"\");\n }\n}","import { Attachment } from \"./attachment\";\nimport { EditionRenditionsInfo } from \"./edition-renditions-info\";\nimport { Element } from \"./element\";\nimport { InDesignArticle } from \"./indesign-article\";\nimport { Message } from \"./message\";\nimport { MessageList } from \"./message-list\";\nimport { MetaData } from \"./metadata\";\nimport { ObjectLabel } from \"./object-label\";\nimport { ObjectOperation } from \"./object-operations\";\nimport { Page } from \"./page\";\nimport { Placement } from \"./placement\";\nimport { Relation } from \"./relation\";\nimport { Target } from \"./target\";\n\nexport class WflObject {\n public __classname__: string = 'Object';\n\n public MetaData: MetaData | null = null;\n\n public Relations: Relation[] | null = null;\n\n public Pages: Page[] | null = null;\n\n public Files: Attachment[] | null = null;\n\n public Messages: Message[] | null = null;\n\n public Elements: Element[] | null = null;\n\n public Targets: Target[] | null = null;\n\n public Renditions: EditionRenditionsInfo[] | null = null;\n\n public MessageList: MessageList | null = null;\n\n public ObjectLabels: ObjectLabel[] | null = null;\n\n public InDesignArticles: InDesignArticle[] | null = null;\n\n public Placements: Placement[] | null = null;\n\n public Operations: ObjectOperation[] | null = null;\n\n constructor(\n params : WflObjectNamedParameters\n ) {\n this.MetaData = params.Metadata ?? null;\n this.Relations = params.Relations ?? null;;\n this.Pages = params.Pages ?? null;;\n this.Files = params.Files ?? null;;\n this.Messages = params.Messages ?? null;;\n this.Elements = params.Elements ?? null;;\n this.Targets = params.Targets ?? null;;\n this.Renditions = params.Renditions ?? null;;\n this.MessageList = params.MessageList ?? null;;\n this.ObjectLabels = params.ObjectLabels ?? null;;\n this.InDesignArticles = params.InDesignArticles ?? null;;\n this.Placements = params.Placements ?? null;;\n this.Operations = params.Operations ?? null;;\n }\n\n}\n\nexport interface WflObjectNamedParameters {\n Metadata?: MetaData\n Relations?: Relation[]\n Pages?: Page[]\n Files?: Attachment[]\n Messages?: Message[]\n Elements?: Element[]\n Targets?: Target[]\n Renditions?: EditionRenditionsInfo[]\n MessageList?: MessageList\n ObjectLabels?: ObjectLabel[]\n InDesignArticles?: InDesignArticle[]\n Placements?: Placement[]\n Operations?: ObjectOperation[]\n}","import { ObjectInfo } from \"./object-info\";\nimport { ObjectLabel } from \"./object-label\";\nimport { Placement } from \"./placement\";\nimport { Target } from \"./target\";\n\nexport enum RelationType {\n Contained = \"Contained\",\n Placed = \"Placed\",\n DeletedContained = \"DeletedContained\"\n}\n\nexport class Relation {\n public __classname__: string = 'Relation';\n\n public Parent: string | null = null;\n public Child: string | null = null;\n public Type: RelationType | null = null;\n public Placements: Placement[] | null = null;\n public ParentVersion: string | null = null;\n public ChildVersion: string | null = null;\n public Rating: number | null = null;\n public Targets: Target[] | null = null;\n public ParentInfo: ObjectInfo | null = null;\n public ChildInfo: ObjectInfo | null = null;\n public ObjectLabels: ObjectLabel[] | null = null;\n\n constructor(params: RelationNamedParameters) {\n this.Parent = params.Parent ?? null;\n this.Child = params.Child ?? null;\n this.Type = params.Type ?? null;\n this.Placements = params.Placements ?? null;\n this.ParentVersion = params.ParentVersion ?? null;\n this.ChildVersion = params.ChildVersion ?? null;\n this.Rating = params.Rating ?? null;\n this.Targets = params.Targets ?? null;\n this.ParentInfo = params.ParentInfo ?? null;\n this.ChildInfo = params.ChildInfo ?? null;\n this.ObjectLabels = params.ObjectLabels ?? null;\n }\n}\n\nexport interface RelationNamedParameters {\n Parent: string\n Child: string\n Type: RelationType\n Placements?: Placement[]\n ParentVersion?: string\n ChildVersion?: string\n Rating?: number\n Targets?: Target[]\n ParentInfo?: ObjectInfo\n ChildInfo?: ObjectInfo\n ObjectLabels?: ObjectLabel[]\n}"],"mappings":"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","names":["uuidv4","uuidv4"]}