@things-factory/integration-headless 7.0.40 → 7.0.43

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (39) hide show
  1. package/dist-server/engine/connector/headless-connector.d.ts +1 -0
  2. package/dist-server/engine/connector/headless-connector.js +3 -0
  3. package/dist-server/engine/connector/headless-connector.js.map +1 -1
  4. package/dist-server/engine/task/headless-pdf-capture-board.js +1 -1
  5. package/dist-server/engine/task/headless-pdf-capture-board.js.map +1 -1
  6. package/dist-server/engine/task/headless-pdf-save.js +34 -19
  7. package/dist-server/engine/task/headless-pdf-save.js.map +1 -1
  8. package/dist-server/tsconfig.tsbuildinfo +1 -1
  9. package/helps/integration/connector/headless-connector.ja.md +71 -0
  10. package/helps/integration/connector/headless-connector.ko.md +72 -0
  11. package/helps/integration/connector/headless-connector.md +71 -0
  12. package/helps/integration/connector/headless-connector.ms.md +73 -0
  13. package/helps/integration/connector/headless-connector.zh.md +71 -0
  14. package/helps/integration/task/headless-pdf-capture-board.ja.md +51 -0
  15. package/helps/integration/task/headless-pdf-capture-board.ko.md +51 -0
  16. package/helps/integration/task/headless-pdf-capture-board.md +51 -0
  17. package/helps/integration/task/headless-pdf-capture-board.ms.md +53 -0
  18. package/helps/integration/task/headless-pdf-capture-board.zh.md +51 -0
  19. package/helps/integration/task/headless-pdf-capture.ja.md +45 -0
  20. package/helps/integration/task/headless-pdf-capture.ko.md +45 -0
  21. package/helps/integration/task/headless-pdf-capture.md +45 -0
  22. package/helps/integration/task/headless-pdf-capture.ms.md +47 -0
  23. package/helps/integration/task/headless-pdf-capture.zh.md +45 -0
  24. package/helps/integration/task/headless-pdf-open.ja.md +55 -0
  25. package/helps/integration/task/headless-pdf-open.ko.md +55 -0
  26. package/helps/integration/task/headless-pdf-open.md +55 -0
  27. package/helps/integration/task/headless-pdf-open.ms.md +57 -0
  28. package/helps/integration/task/headless-pdf-open.zh.md +55 -0
  29. package/helps/integration/task/headless-pdf-save.ja.md +23 -0
  30. package/helps/integration/task/headless-pdf-save.ko.md +25 -0
  31. package/helps/integration/task/headless-pdf-save.md +23 -0
  32. package/helps/integration/task/headless-pdf-save.ms.md +23 -0
  33. package/helps/integration/task/headless-pdf-save.zh.md +23 -0
  34. package/package.json +6 -5
  35. package/server/engine/connector/headless-connector.ts +4 -0
  36. package/server/engine/task/headless-pdf-capture-board.ts +1 -1
  37. package/server/engine/task/headless-pdf-save.ts +41 -18
  38. package/translations/en.json +1 -0
  39. package/translations/ko.json +1 -0
@@ -10,4 +10,5 @@ export declare class HeadlessConnector implements Connector {
10
10
  }[];
11
11
  get taskPrefixes(): string[];
12
12
  get description(): string;
13
+ get help(): string;
13
14
  }
@@ -45,6 +45,9 @@ class HeadlessConnector {
45
45
  get description() {
46
46
  return 'Headless Pool Connector';
47
47
  }
48
+ get help() {
49
+ return 'integration/connector/headless-connector';
50
+ }
48
51
  }
49
52
  exports.HeadlessConnector = HeadlessConnector;
50
53
  integration_base_1.ConnectionManager.registerConnector('headless-connector', new HeadlessConnector());
@@ -1 +1 @@
1
- {"version":3,"file":"headless-connector.js","sourceRoot":"","sources":["../../../server/engine/connector/headless-connector.ts"],"names":[],"mappings":";;;AAAA,uEAA+E;AAC/E,mDAAyE;AAEzE,MAAa,iBAAiB;IAC5B,KAAK,CAAC,KAAK,CAAC,iBAAiB;QAC3B,MAAM,OAAO,CAAC,GAAG,CAAC,iBAAiB,CAAC,GAAG,CAAC,IAAI,CAAC,OAAO,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC,CAAC,CAAA;QAEjE,oCAAiB,CAAC,MAAM,CAAC,IAAI,CAAC,0CAA0C,CAAC,CAAA;IAC3E,CAAC;IAED,KAAK,CAAC,OAAO,CAAC,UAAU;QACtB,IAAI,EACF,QAAQ,EAAE,GAAG,GAAG,GAAG,EACnB,MAAM,EAAE,EAAE,GAAG,GAAG,CAAC,EAAE,GAAG,GAAG,EAAE,EAAE,EAC9B,GAAG,UAAU,CAAA;QAEd,MAAM,YAAY,GAAG,IAAA,kCAAkB,EAAC;YACtC,GAAG;YACH,GAAG;YACH,YAAY,EAAE,IAAI;YAClB,oBAAoB,EAAE,KAAK;SAC5B,CAAC,CAAA;QAEF,oCAAiB,CAAC,qBAAqB,CAAC,UAAU,EAAE,YAAY,CAAC,CAAA;QAEjE,oCAAiB,CAAC,MAAM,CAAC,IAAI,CAC3B,iCAAiC,UAAU,CAAC,IAAI,IAAI,UAAU,CAAC,QAAQ,gBAAgB,CACxF,CAAA;IACH,CAAC;IAED,KAAK,CAAC,UAAU,CAAC,UAAU;QACzB,MAAM,YAAY,GAAG,oCAAiB,CAAC,qBAAqB,CAAC,UAAU,CAAC,CAAA;QACxE,IAAA,mCAAmB,EAAC,YAAY,CAAC,CAAA;QAEjC,oCAAiB,CAAC,wBAAwB,CAAC,UAAU,CAAC,CAAA;QAEtD,oCAAiB,CAAC,MAAM,CAAC,IAAI,CAAC,iCAAiC,UAAU,CAAC,IAAI,mBAAmB,CAAC,CAAA;IACpG,CAAC;IAED,IAAI,aAAa;QACf,OAAO;YACL;gBACE,IAAI,EAAE,QAAQ;gBACd,IAAI,EAAE,KAAK;gBACX,KAAK,EAAE,eAAe;aACvB;YACD;gBACE,IAAI,EAAE,QAAQ;gBACd,IAAI,EAAE,KAAK;gBACX,KAAK,EAAE,eAAe;aACvB;SACF,CAAA;IACH,CAAC;IAED,IAAI,YAAY;QACd,OAAO,CAAC,cAAc,CAAC,CAAA;IACzB,CAAC;IAED,IAAI,WAAW;QACb,OAAO,yBAAyB,CAAA;IAClC,CAAC;CACF;AA1DD,8CA0DC;AAED,oCAAiB,CAAC,iBAAiB,CAAC,oBAAoB,EAAE,IAAI,iBAAiB,EAAE,CAAC,CAAA","sourcesContent":["import { ConnectionManager, Connector } from '@things-factory/integration-base'\nimport { createHeadlessPool, destroyHeadlessPool } from './headless-pool'\n\nexport class HeadlessConnector implements Connector {\n async ready(connectionConfigs) {\n await Promise.all(connectionConfigs.map(this.connect.bind(this)))\n\n ConnectionManager.logger.info('headless-connector connections are ready')\n }\n\n async connect(connection) {\n var {\n endpoint: uri = '1',\n params: { min = 2, max = 10 }\n } = connection\n\n const headlessPool = createHeadlessPool({\n min,\n max,\n testOnBorrow: true,\n acquireTimeoutMillis: 15000\n })\n\n ConnectionManager.addConnectionInstance(connection, headlessPool)\n\n ConnectionManager.logger.info(\n `headless-connector connection(${connection.name}:${connection.endpoint}) is connected`\n )\n }\n\n async disconnect(connection) {\n const headlessPool = ConnectionManager.getConnectionInstance(connection)\n destroyHeadlessPool(headlessPool)\n\n ConnectionManager.removeConnectionInstance(connection)\n\n ConnectionManager.logger.info(`headless-connector connection(${connection.name}) is disconnected`)\n }\n\n get parameterSpec() {\n return [\n {\n type: 'number',\n name: 'min',\n label: 'pool-size-min'\n },\n {\n type: 'number',\n name: 'max',\n label: 'pool-size-max'\n }\n ]\n }\n\n get taskPrefixes() {\n return ['headless-pdf']\n }\n\n get description() {\n return 'Headless Pool Connector'\n }\n}\n\nConnectionManager.registerConnector('headless-connector', new HeadlessConnector())\n"]}
1
+ {"version":3,"file":"headless-connector.js","sourceRoot":"","sources":["../../../server/engine/connector/headless-connector.ts"],"names":[],"mappings":";;;AAAA,uEAA+E;AAC/E,mDAAyE;AAEzE,MAAa,iBAAiB;IAC5B,KAAK,CAAC,KAAK,CAAC,iBAAiB;QAC3B,MAAM,OAAO,CAAC,GAAG,CAAC,iBAAiB,CAAC,GAAG,CAAC,IAAI,CAAC,OAAO,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC,CAAC,CAAA;QAEjE,oCAAiB,CAAC,MAAM,CAAC,IAAI,CAAC,0CAA0C,CAAC,CAAA;IAC3E,CAAC;IAED,KAAK,CAAC,OAAO,CAAC,UAAU;QACtB,IAAI,EACF,QAAQ,EAAE,GAAG,GAAG,GAAG,EACnB,MAAM,EAAE,EAAE,GAAG,GAAG,CAAC,EAAE,GAAG,GAAG,EAAE,EAAE,EAC9B,GAAG,UAAU,CAAA;QAEd,MAAM,YAAY,GAAG,IAAA,kCAAkB,EAAC;YACtC,GAAG;YACH,GAAG;YACH,YAAY,EAAE,IAAI;YAClB,oBAAoB,EAAE,KAAK;SAC5B,CAAC,CAAA;QAEF,oCAAiB,CAAC,qBAAqB,CAAC,UAAU,EAAE,YAAY,CAAC,CAAA;QAEjE,oCAAiB,CAAC,MAAM,CAAC,IAAI,CAC3B,iCAAiC,UAAU,CAAC,IAAI,IAAI,UAAU,CAAC,QAAQ,gBAAgB,CACxF,CAAA;IACH,CAAC;IAED,KAAK,CAAC,UAAU,CAAC,UAAU;QACzB,MAAM,YAAY,GAAG,oCAAiB,CAAC,qBAAqB,CAAC,UAAU,CAAC,CAAA;QACxE,IAAA,mCAAmB,EAAC,YAAY,CAAC,CAAA;QAEjC,oCAAiB,CAAC,wBAAwB,CAAC,UAAU,CAAC,CAAA;QAEtD,oCAAiB,CAAC,MAAM,CAAC,IAAI,CAAC,iCAAiC,UAAU,CAAC,IAAI,mBAAmB,CAAC,CAAA;IACpG,CAAC;IAED,IAAI,aAAa;QACf,OAAO;YACL;gBACE,IAAI,EAAE,QAAQ;gBACd,IAAI,EAAE,KAAK;gBACX,KAAK,EAAE,eAAe;aACvB;YACD;gBACE,IAAI,EAAE,QAAQ;gBACd,IAAI,EAAE,KAAK;gBACX,KAAK,EAAE,eAAe;aACvB;SACF,CAAA;IACH,CAAC;IAED,IAAI,YAAY;QACd,OAAO,CAAC,cAAc,CAAC,CAAA;IACzB,CAAC;IAED,IAAI,WAAW;QACb,OAAO,yBAAyB,CAAA;IAClC,CAAC;IAED,IAAI,IAAI;QACN,OAAO,0CAA0C,CAAA;IACnD,CAAC;CACF;AA9DD,8CA8DC;AAED,oCAAiB,CAAC,iBAAiB,CAAC,oBAAoB,EAAE,IAAI,iBAAiB,EAAE,CAAC,CAAA","sourcesContent":["import { ConnectionManager, Connector } from '@things-factory/integration-base'\nimport { createHeadlessPool, destroyHeadlessPool } from './headless-pool'\n\nexport class HeadlessConnector implements Connector {\n async ready(connectionConfigs) {\n await Promise.all(connectionConfigs.map(this.connect.bind(this)))\n\n ConnectionManager.logger.info('headless-connector connections are ready')\n }\n\n async connect(connection) {\n var {\n endpoint: uri = '1',\n params: { min = 2, max = 10 }\n } = connection\n\n const headlessPool = createHeadlessPool({\n min,\n max,\n testOnBorrow: true,\n acquireTimeoutMillis: 15000\n })\n\n ConnectionManager.addConnectionInstance(connection, headlessPool)\n\n ConnectionManager.logger.info(\n `headless-connector connection(${connection.name}:${connection.endpoint}) is connected`\n )\n }\n\n async disconnect(connection) {\n const headlessPool = ConnectionManager.getConnectionInstance(connection)\n destroyHeadlessPool(headlessPool)\n\n ConnectionManager.removeConnectionInstance(connection)\n\n ConnectionManager.logger.info(`headless-connector connection(${connection.name}) is disconnected`)\n }\n\n get parameterSpec() {\n return [\n {\n type: 'number',\n name: 'min',\n label: 'pool-size-min'\n },\n {\n type: 'number',\n name: 'max',\n label: 'pool-size-max'\n }\n ]\n }\n\n get taskPrefixes() {\n return ['headless-pdf']\n }\n\n get description() {\n return 'Headless Pool Connector'\n }\n\n get help() {\n return 'integration/connector/headless-connector'\n }\n}\n\nConnectionManager.registerConnector('headless-connector', new HeadlessConnector())\n"]}
@@ -216,7 +216,7 @@ HeadlessPDFCaptureBoard.parameterSpec = [
216
216
  {
217
217
  type: 'boolean',
218
218
  name: 'draft',
219
- label: 'draft',
219
+ label: 'board-draft',
220
220
  defaultValue: false,
221
221
  description: 'Set whether to get the current working version or the last released version'
222
222
  },
@@ -1 +1 @@
1
- {"version":3,"file":"headless-pdf-capture-board.js","sourceRoot":"","sources":["../../../server/engine/task/headless-pdf-capture-board.ts"],"names":[],"mappings":"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","sourcesContent":["import * as ejs from 'ejs'\nimport { TaskRegistry } from '@things-factory/integration-base'\nimport { ConnectionManager } from '@things-factory/integration-base'\nimport { access } from '@things-factory/utils'\nimport { BoardFunc } from '@things-factory/board-service'\nimport { PDFDocument } from 'pdf-lib'\n\nconst PAGE_FORMATS = {\n A4: { width: 595.28, height: 841.89 },\n A3: { width: 841.89, height: 1190.55 },\n Letter: { width: 612, height: 792 },\n Legal: { width: 612, height: 1008 }\n}\n\nasync function HeadlessPDFCaptureBoard(step, context) {\n var { connection: connectionName, params: stepOptions } = step\n var {\n accessor,\n board,\n draft,\n format = 'A4', // Set default value to A4\n width,\n height,\n marginTop = 0,\n marginBottom = 0,\n marginLeft = 0,\n marginRight = 0,\n scale,\n printBackground,\n landscape,\n preferCSSPageSize\n } = stepOptions || {}\n var { domain, data, user, logger, __headless_pdf } = context\n\n if (!__headless_pdf) {\n throw new Error('It requires headless-pdf-open to be performed first')\n }\n\n if (!board || !board.id) {\n throw new Error('The board property must be set')\n }\n\n var { pdfDoc, header, footer, watermark } = __headless_pdf\n\n var headlessPool = ConnectionManager.getConnectionInstanceByName(domain, connectionName)\n let browser\n\n try {\n browser = await headlessPool.acquire()\n const page = await browser.newPage()\n\n const boardInput = access(accessor, data)\n\n var { model, base } = await BoardFunc.headlessModel({ domain, id: board.id, model }, draft)\n const [fontsToUse, fontStyles] = await BoardFunc.fonts(domain)\n\n model.fonts = fontsToUse\n model.fontStyles = fontStyles\n\n var { width: boardWidthPx, height: boardHeightPx } = model\n\n if (preferCSSPageSize) {\n width = undefined\n height = undefined\n } else if (PAGE_FORMATS[format]) {\n const pageDimensions = PAGE_FORMATS[format]\n width = pageDimensions.width\n height = pageDimensions.height\n }\n\n if (landscape) {\n ;[width, height] = [height, width]\n }\n\n const contentWidth = width - marginLeft - marginRight\n const contentHeight = height - marginTop - marginBottom\n\n const boardWidthPt = (boardWidthPx * 72) / 96\n const boardHeightPt = (boardHeightPx * 72) / 96\n\n const widthRatio = contentWidth / boardWidthPt\n const heightRatio = contentHeight / boardHeightPt\n const ratio = Math.min(widthRatio, heightRatio)\n\n const scaledBoardWidthPt = boardWidthPt * ratio\n const scaledBoardHeightPt = boardHeightPt * ratio\n\n const offsetX = (contentWidth - scaledBoardWidthPt) / 2 + marginLeft\n const offsetY = (contentHeight - scaledBoardHeightPt) / 2 + marginBottom\n\n await page.setViewport({ width: Math.round(boardWidthPx * ratio), height: Math.round(boardHeightPx * ratio) })\n await page.setRequestInterception(true)\n await page.setDefaultTimeout(10000)\n\n page.on('console', async msg => {\n console.log(`[browser ${msg.type()}] ${msg.text()}`)\n })\n\n page.on('requestfailed', request => {\n console.log('Request failed:', request.url())\n })\n\n const protocol = 'http'\n const host = 'localhost'\n const port = process.env.PORT ? `:${process.env.PORT}` : ''\n const path = '/internal-board-service-view'\n const url = `${protocol}://${host}${port}${path}`\n\n const token = await user?.sign()\n\n page.on('request', request => {\n if (request.url() === url) {\n request.continue({\n method: 'POST',\n headers: {\n 'Content-Type': 'application/json',\n 'x-things-factory-domain': domain?.subdomain,\n Authorization: 'Bearer ' + token\n },\n postData: JSON.stringify({\n model,\n base\n })\n })\n } else if (request.url().startsWith(`${protocol}://${host}${port}`)) {\n request.continue({\n headers: {\n ...request.headers(),\n 'x-things-factory-domain': domain?.subdomain,\n Authorization: 'Bearer ' + token\n }\n })\n } else {\n request.continue()\n }\n })\n\n await page.goto(url)\n\n await page.evaluate(data => {\n //@ts-ignore\n s.data = data\n return new Promise(resolve => {\n requestAnimationFrame(() => resolve(0))\n })\n }, boardInput)\n\n const renderTemplateSafely = (template, data) => {\n try {\n return ejs.render(template, data)\n } catch (error) {\n logger.warn(`Template rendering error: ${error.message}`)\n return template\n }\n }\n\n header = renderTemplateSafely(header, __headless_pdf)\n footer = renderTemplateSafely(footer, __headless_pdf)\n\n // Apply header, footer, and watermark using Puppeteer\n // Apply header, footer, and watermark using Puppeteer\n if (header || footer || watermark) {\n await page.evaluate(\n ({ header, footer, watermark, isLandscape }) => {\n const setPositioning = (element, position) => {\n element.style.position = 'fixed'\n element.style.left = '0'\n element.style.width = '100%'\n element.style.textAlign = 'center'\n element.style.fontSize = '12px'\n element.style.margin = '0'\n element.style.padding = '0'\n if (position === 'header') {\n element.style.top = '0'\n } else if (position === 'footer') {\n element.style.bottom = '0'\n }\n }\n\n if (header) {\n const headerElement = document.createElement('div')\n headerElement.innerHTML = header\n setPositioning(headerElement, 'header')\n document.body.appendChild(headerElement)\n }\n\n if (footer) {\n const footerElement = document.createElement('div')\n footerElement.innerHTML = footer\n setPositioning(footerElement, 'footer')\n document.body.appendChild(footerElement)\n }\n\n if (watermark) {\n const watermarkElement = document.createElement('div')\n watermarkElement.innerHTML = watermark\n watermarkElement.style.position = 'fixed'\n watermarkElement.style.top = isLandscape ? '40%' : '50%'\n watermarkElement.style.left = '50%'\n watermarkElement.style.transform = 'translate(-50%, -50%) rotate(-45deg)'\n watermarkElement.style.opacity = '0.2'\n watermarkElement.style.fontSize = '50px'\n watermarkElement.style.color = 'red'\n watermarkElement.style.pointerEvents = 'none'\n watermarkElement.style.zIndex = '9999'\n document.body.appendChild(watermarkElement)\n }\n },\n { header, footer, watermark, isLandscape: landscape }\n )\n }\n\n const pageOptions = {\n format,\n width: `${scaledBoardWidthPt}px`,\n height: `${scaledBoardHeightPt}px`,\n margin: {\n top: `${offsetY}px`,\n right: `${offsetX}px`,\n bottom: `${offsetY}px`,\n left: `${offsetX}px`\n },\n scale,\n printBackground,\n landscape,\n displayHeaderFooter: false, // Handled via Puppeteer directly\n preferCSSPageSize\n }\n\n const contentBuffer = await page.pdf(pageOptions)\n const contentPdfDoc = await PDFDocument.load(contentBuffer)\n const copiedPages = await pdfDoc.copyPages(contentPdfDoc, contentPdfDoc.getPageIndices())\n\n copiedPages.forEach(page => pdfDoc.addPage(page))\n\n __headless_pdf.pageCount += copiedPages.length\n\n await page.close()\n headlessPool.release(browser)\n\n return {\n data: __headless_pdf\n }\n } catch (error) {\n if (browser) {\n await browser.close()\n }\n\n throw error\n }\n}\n\nHeadlessPDFCaptureBoard.parameterSpec = [\n {\n type: 'scenario-step-input',\n name: 'accessor',\n label: 'accessor'\n },\n {\n type: 'resource-object',\n name: 'board',\n label: 'board',\n property: {\n queryName: 'boards'\n }\n },\n {\n type: 'boolean',\n name: 'draft',\n label: 'draft',\n defaultValue: false,\n description: 'Set whether to get the current working version or the last released version'\n },\n {\n type: 'select',\n name: 'format',\n label: 'page-format',\n property: {\n options: [\n { display: '', value: '' },\n { display: 'A4', value: 'A4' },\n { display: 'A3', value: 'A3' },\n { display: 'Letter', value: 'Letter' },\n { display: 'Legal', value: 'Legal' }\n ]\n },\n description: 'Select the paper format for the PDF'\n },\n {\n type: 'string',\n name: 'width',\n label: 'page-width',\n placeholder: '(e.g., \"8.5in\", \"21cm\", \"600px\")',\n description: 'Specify the width of the page (e.g., \"8.5in\", \"21cm\", \"600px\")'\n },\n {\n type: 'string',\n name: 'height',\n label: 'page-height',\n placeholder: '(e.g., \"11in\", \"29.7cm\", \"800px\")',\n description: 'Specify the height of the page (e.g., \"11in\", \"29.7cm\", \"800px\")'\n },\n {\n type: 'string',\n name: 'marginTop',\n label: 'page-margin-top',\n placeholder: '(e.g., \"0.5in\", \"1cm\", \"100px\")',\n description: 'Set the top margin for the page'\n },\n {\n type: 'string',\n name: 'marginBottom',\n label: 'page-margin-bottom',\n placeholder: '(e.g., \"0.5in\", \"1cm\", \"100px\")',\n description: 'Set the bottom margin for the page'\n },\n {\n type: 'string',\n name: 'marginLeft',\n label: 'page-margin-left',\n placeholder: '(e.g., \"0.5in\", \"1cm\", \"100px\")',\n description: 'Set the left margin for the page'\n },\n {\n type: 'string',\n name: 'marginRight',\n label: 'page-margin-right',\n placeholder: '(e.g., \"0.5in\", \"1cm\", \"100px\")',\n description: 'Set the right margin for the page'\n },\n {\n type: 'number',\n name: 'scale',\n label: 'page-scale',\n defaultValue: 1,\n description: 'Set the scale of the page content (default is 1)'\n },\n {\n type: 'boolean',\n name: 'printBackground',\n label: 'print-background',\n defaultValue: true,\n description: 'Include background graphics when printing the page'\n },\n {\n type: 'boolean',\n name: 'landscape',\n label: 'landscape',\n defaultValue: false,\n description: 'Print the PDF in landscape orientation'\n },\n {\n type: 'boolean',\n name: 'preferCSSPageSize',\n label: 'prefer-css-page-size',\n defaultValue: false,\n description: 'Whether to prefer the CSS-defined page size over the given width and height'\n }\n]\n\nHeadlessPDFCaptureBoard.help = 'integration/task/headless-pdf-capture-board'\n\nTaskRegistry.registerTaskHandler('headless-pdf-capture-board', HeadlessPDFCaptureBoard)\n"]}
1
+ {"version":3,"file":"headless-pdf-capture-board.js","sourceRoot":"","sources":["../../../server/engine/task/headless-pdf-capture-board.ts"],"names":[],"mappings":"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","sourcesContent":["import * as ejs from 'ejs'\nimport { TaskRegistry } from '@things-factory/integration-base'\nimport { ConnectionManager } from '@things-factory/integration-base'\nimport { access } from '@things-factory/utils'\nimport { BoardFunc } from '@things-factory/board-service'\nimport { PDFDocument } from 'pdf-lib'\n\nconst PAGE_FORMATS = {\n A4: { width: 595.28, height: 841.89 },\n A3: { width: 841.89, height: 1190.55 },\n Letter: { width: 612, height: 792 },\n Legal: { width: 612, height: 1008 }\n}\n\nasync function HeadlessPDFCaptureBoard(step, context) {\n var { connection: connectionName, params: stepOptions } = step\n var {\n accessor,\n board,\n draft,\n format = 'A4', // Set default value to A4\n width,\n height,\n marginTop = 0,\n marginBottom = 0,\n marginLeft = 0,\n marginRight = 0,\n scale,\n printBackground,\n landscape,\n preferCSSPageSize\n } = stepOptions || {}\n var { domain, data, user, logger, __headless_pdf } = context\n\n if (!__headless_pdf) {\n throw new Error('It requires headless-pdf-open to be performed first')\n }\n\n if (!board || !board.id) {\n throw new Error('The board property must be set')\n }\n\n var { pdfDoc, header, footer, watermark } = __headless_pdf\n\n var headlessPool = ConnectionManager.getConnectionInstanceByName(domain, connectionName)\n let browser\n\n try {\n browser = await headlessPool.acquire()\n const page = await browser.newPage()\n\n const boardInput = access(accessor, data)\n\n var { model, base } = await BoardFunc.headlessModel({ domain, id: board.id, model }, draft)\n const [fontsToUse, fontStyles] = await BoardFunc.fonts(domain)\n\n model.fonts = fontsToUse\n model.fontStyles = fontStyles\n\n var { width: boardWidthPx, height: boardHeightPx } = model\n\n if (preferCSSPageSize) {\n width = undefined\n height = undefined\n } else if (PAGE_FORMATS[format]) {\n const pageDimensions = PAGE_FORMATS[format]\n width = pageDimensions.width\n height = pageDimensions.height\n }\n\n if (landscape) {\n ;[width, height] = [height, width]\n }\n\n const contentWidth = width - marginLeft - marginRight\n const contentHeight = height - marginTop - marginBottom\n\n const boardWidthPt = (boardWidthPx * 72) / 96\n const boardHeightPt = (boardHeightPx * 72) / 96\n\n const widthRatio = contentWidth / boardWidthPt\n const heightRatio = contentHeight / boardHeightPt\n const ratio = Math.min(widthRatio, heightRatio)\n\n const scaledBoardWidthPt = boardWidthPt * ratio\n const scaledBoardHeightPt = boardHeightPt * ratio\n\n const offsetX = (contentWidth - scaledBoardWidthPt) / 2 + marginLeft\n const offsetY = (contentHeight - scaledBoardHeightPt) / 2 + marginBottom\n\n await page.setViewport({ width: Math.round(boardWidthPx * ratio), height: Math.round(boardHeightPx * ratio) })\n await page.setRequestInterception(true)\n await page.setDefaultTimeout(10000)\n\n page.on('console', async msg => {\n console.log(`[browser ${msg.type()}] ${msg.text()}`)\n })\n\n page.on('requestfailed', request => {\n console.log('Request failed:', request.url())\n })\n\n const protocol = 'http'\n const host = 'localhost'\n const port = process.env.PORT ? `:${process.env.PORT}` : ''\n const path = '/internal-board-service-view'\n const url = `${protocol}://${host}${port}${path}`\n\n const token = await user?.sign()\n\n page.on('request', request => {\n if (request.url() === url) {\n request.continue({\n method: 'POST',\n headers: {\n 'Content-Type': 'application/json',\n 'x-things-factory-domain': domain?.subdomain,\n Authorization: 'Bearer ' + token\n },\n postData: JSON.stringify({\n model,\n base\n })\n })\n } else if (request.url().startsWith(`${protocol}://${host}${port}`)) {\n request.continue({\n headers: {\n ...request.headers(),\n 'x-things-factory-domain': domain?.subdomain,\n Authorization: 'Bearer ' + token\n }\n })\n } else {\n request.continue()\n }\n })\n\n await page.goto(url)\n\n await page.evaluate(data => {\n //@ts-ignore\n s.data = data\n return new Promise(resolve => {\n requestAnimationFrame(() => resolve(0))\n })\n }, boardInput)\n\n const renderTemplateSafely = (template, data) => {\n try {\n return ejs.render(template, data)\n } catch (error) {\n logger.warn(`Template rendering error: ${error.message}`)\n return template\n }\n }\n\n header = renderTemplateSafely(header, __headless_pdf)\n footer = renderTemplateSafely(footer, __headless_pdf)\n\n // Apply header, footer, and watermark using Puppeteer\n // Apply header, footer, and watermark using Puppeteer\n if (header || footer || watermark) {\n await page.evaluate(\n ({ header, footer, watermark, isLandscape }) => {\n const setPositioning = (element, position) => {\n element.style.position = 'fixed'\n element.style.left = '0'\n element.style.width = '100%'\n element.style.textAlign = 'center'\n element.style.fontSize = '12px'\n element.style.margin = '0'\n element.style.padding = '0'\n if (position === 'header') {\n element.style.top = '0'\n } else if (position === 'footer') {\n element.style.bottom = '0'\n }\n }\n\n if (header) {\n const headerElement = document.createElement('div')\n headerElement.innerHTML = header\n setPositioning(headerElement, 'header')\n document.body.appendChild(headerElement)\n }\n\n if (footer) {\n const footerElement = document.createElement('div')\n footerElement.innerHTML = footer\n setPositioning(footerElement, 'footer')\n document.body.appendChild(footerElement)\n }\n\n if (watermark) {\n const watermarkElement = document.createElement('div')\n watermarkElement.innerHTML = watermark\n watermarkElement.style.position = 'fixed'\n watermarkElement.style.top = isLandscape ? '40%' : '50%'\n watermarkElement.style.left = '50%'\n watermarkElement.style.transform = 'translate(-50%, -50%) rotate(-45deg)'\n watermarkElement.style.opacity = '0.2'\n watermarkElement.style.fontSize = '50px'\n watermarkElement.style.color = 'red'\n watermarkElement.style.pointerEvents = 'none'\n watermarkElement.style.zIndex = '9999'\n document.body.appendChild(watermarkElement)\n }\n },\n { header, footer, watermark, isLandscape: landscape }\n )\n }\n\n const pageOptions = {\n format,\n width: `${scaledBoardWidthPt}px`,\n height: `${scaledBoardHeightPt}px`,\n margin: {\n top: `${offsetY}px`,\n right: `${offsetX}px`,\n bottom: `${offsetY}px`,\n left: `${offsetX}px`\n },\n scale,\n printBackground,\n landscape,\n displayHeaderFooter: false, // Handled via Puppeteer directly\n preferCSSPageSize\n }\n\n const contentBuffer = await page.pdf(pageOptions)\n const contentPdfDoc = await PDFDocument.load(contentBuffer)\n const copiedPages = await pdfDoc.copyPages(contentPdfDoc, contentPdfDoc.getPageIndices())\n\n copiedPages.forEach(page => pdfDoc.addPage(page))\n\n __headless_pdf.pageCount += copiedPages.length\n\n await page.close()\n headlessPool.release(browser)\n\n return {\n data: __headless_pdf\n }\n } catch (error) {\n if (browser) {\n await browser.close()\n }\n\n throw error\n }\n}\n\nHeadlessPDFCaptureBoard.parameterSpec = [\n {\n type: 'scenario-step-input',\n name: 'accessor',\n label: 'accessor'\n },\n {\n type: 'resource-object',\n name: 'board',\n label: 'board',\n property: {\n queryName: 'boards'\n }\n },\n {\n type: 'boolean',\n name: 'draft',\n label: 'board-draft',\n defaultValue: false,\n description: 'Set whether to get the current working version or the last released version'\n },\n {\n type: 'select',\n name: 'format',\n label: 'page-format',\n property: {\n options: [\n { display: '', value: '' },\n { display: 'A4', value: 'A4' },\n { display: 'A3', value: 'A3' },\n { display: 'Letter', value: 'Letter' },\n { display: 'Legal', value: 'Legal' }\n ]\n },\n description: 'Select the paper format for the PDF'\n },\n {\n type: 'string',\n name: 'width',\n label: 'page-width',\n placeholder: '(e.g., \"8.5in\", \"21cm\", \"600px\")',\n description: 'Specify the width of the page (e.g., \"8.5in\", \"21cm\", \"600px\")'\n },\n {\n type: 'string',\n name: 'height',\n label: 'page-height',\n placeholder: '(e.g., \"11in\", \"29.7cm\", \"800px\")',\n description: 'Specify the height of the page (e.g., \"11in\", \"29.7cm\", \"800px\")'\n },\n {\n type: 'string',\n name: 'marginTop',\n label: 'page-margin-top',\n placeholder: '(e.g., \"0.5in\", \"1cm\", \"100px\")',\n description: 'Set the top margin for the page'\n },\n {\n type: 'string',\n name: 'marginBottom',\n label: 'page-margin-bottom',\n placeholder: '(e.g., \"0.5in\", \"1cm\", \"100px\")',\n description: 'Set the bottom margin for the page'\n },\n {\n type: 'string',\n name: 'marginLeft',\n label: 'page-margin-left',\n placeholder: '(e.g., \"0.5in\", \"1cm\", \"100px\")',\n description: 'Set the left margin for the page'\n },\n {\n type: 'string',\n name: 'marginRight',\n label: 'page-margin-right',\n placeholder: '(e.g., \"0.5in\", \"1cm\", \"100px\")',\n description: 'Set the right margin for the page'\n },\n {\n type: 'number',\n name: 'scale',\n label: 'page-scale',\n defaultValue: 1,\n description: 'Set the scale of the page content (default is 1)'\n },\n {\n type: 'boolean',\n name: 'printBackground',\n label: 'print-background',\n defaultValue: true,\n description: 'Include background graphics when printing the page'\n },\n {\n type: 'boolean',\n name: 'landscape',\n label: 'landscape',\n defaultValue: false,\n description: 'Print the PDF in landscape orientation'\n },\n {\n type: 'boolean',\n name: 'preferCSSPageSize',\n label: 'prefer-css-page-size',\n defaultValue: false,\n description: 'Whether to prefer the CSS-defined page size over the given width and height'\n }\n]\n\nHeadlessPDFCaptureBoard.help = 'integration/task/headless-pdf-capture-board'\n\nTaskRegistry.registerTaskHandler('headless-pdf-capture-board', HeadlessPDFCaptureBoard)\n"]}
@@ -1,14 +1,12 @@
1
1
  "use strict";
2
2
  Object.defineProperty(exports, "__esModule", { value: true });
3
- const tslib_1 = require("tslib");
4
- const fs = tslib_1.__importStar(require("fs"));
5
- const path = tslib_1.__importStar(require("path"));
6
- const integration_base_1 = require("@things-factory/integration-base");
7
3
  const pdf_lib_1 = require("pdf-lib");
4
+ const { Readable } = require('stream');
5
+ const integration_base_1 = require("@things-factory/integration-base");
6
+ const attachment_base_1 = require("@things-factory/attachment-base");
7
+ const shell_1 = require("@things-factory/shell");
8
8
  async function HeadlessPDFSave(step, context) {
9
- var { params: stepOptions } = step;
10
- var { outputPath } = stepOptions || {};
11
- var { __headless_pdf } = context;
9
+ var { domain, user, __headless_pdf } = context;
12
10
  if (!__headless_pdf || !__headless_pdf.pdfDoc) {
13
11
  throw new Error('No PDF document found. Ensure that headless-pdf-open and headless-pdf-capture tasks are executed before saving.');
14
12
  }
@@ -21,23 +19,40 @@ async function HeadlessPDFSave(step, context) {
21
19
  }
22
20
  const pdfBytes = await pdfDoc.save();
23
21
  const finalFileName = __headless_pdf.fileName || `document-${Date.now()}.pdf`;
24
- const savePath = path.join(outputPath || './attachments', finalFileName);
25
- // Save the final PDF to the specified path
26
- fs.writeFileSync(savePath, pdfBytes);
22
+ const saved = await (0, attachment_base_1.createAttachment)(null, {
23
+ attachment: {
24
+ file: {
25
+ createReadStream: () => new Readable({
26
+ read() {
27
+ this.push(pdfBytes);
28
+ this.push(null);
29
+ }
30
+ }),
31
+ filename: finalFileName,
32
+ mimetype: 'application/pdf',
33
+ encoding: 'binary'
34
+ },
35
+ refType: 'headless-pdf-save',
36
+ refBy: 'pdf-published'
37
+ }
38
+ }, {
39
+ state: { domain, user }
40
+ });
41
+ const attachment = await (0, shell_1.getRepository)(attachment_base_1.Attachment).findOne({
42
+ where: { id: saved.id }
43
+ });
27
44
  return {
28
45
  data: {
29
- link: savePath
46
+ id: attachment.id,
47
+ name: attachment.name,
48
+ path: attachment.path,
49
+ mimetype: attachment.mimetype,
50
+ refBy: attachment.refBy,
51
+ fullpath: attachment.fullpath
30
52
  }
31
53
  };
32
54
  }
33
- HeadlessPDFSave.parameterSpec = [
34
- {
35
- type: 'string',
36
- name: 'outputPath',
37
- label: 'output-path',
38
- description: 'The directory path where the PDF should be saved. Defaults to "./attachments".'
39
- }
40
- ];
55
+ HeadlessPDFSave.parameterSpec = [];
41
56
  HeadlessPDFSave.help = 'integration/task/headless-pdf-save';
42
57
  integration_base_1.TaskRegistry.registerTaskHandler('headless-pdf-save', HeadlessPDFSave);
43
58
  //# sourceMappingURL=headless-pdf-save.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"headless-pdf-save.js","sourceRoot":"","sources":["../../../server/engine/task/headless-pdf-save.ts"],"names":[],"mappings":";;;AAAA,+CAAwB;AACxB,mDAA4B;AAC5B,uEAA+D;AAC/D,qCAAqC;AAErC,KAAK,UAAU,eAAe,CAAC,IAAI,EAAE,OAAO;IAC1C,IAAI,EAAE,MAAM,EAAE,WAAW,EAAE,GAAG,IAAI,CAAA;IAClC,IAAI,EAAE,UAAU,EAAE,GAAG,WAAW,IAAI,EAAE,CAAA;IACtC,IAAI,EAAE,cAAc,EAAE,GAAG,OAAO,CAAA;IAEhC,IAAI,CAAC,cAAc,IAAI,CAAC,cAAc,CAAC,MAAM,EAAE,CAAC;QAC9C,MAAM,IAAI,KAAK,CACb,iHAAiH,CAClH,CAAA;IACH,CAAC;IAED,MAAM,MAAM,GAAG,cAAc,CAAC,MAAM,CAAA;IAEpC,6BAA6B;IAC7B,IAAI,cAAc,CAAC,cAAc,EAAE,CAAC;QAClC,MAAM,WAAW,GAAG,MAAM,qBAAW,CAAC,IAAI,CAAC,cAAc,CAAC,cAAc,CAAC,CAAA;QACzE,MAAM,eAAe,GAAG,MAAM,MAAM,CAAC,SAAS,CAAC,WAAW,EAAE,WAAW,CAAC,cAAc,EAAE,CAAC,CAAA;QACzF,eAAe,CAAC,OAAO,CAAC,IAAI,CAAC,EAAE,CAAC,MAAM,CAAC,OAAO,CAAC,IAAI,CAAC,CAAC,CAAA;IACvD,CAAC;IAED,MAAM,QAAQ,GAAG,MAAM,MAAM,CAAC,IAAI,EAAE,CAAA;IAEpC,MAAM,aAAa,GAAG,cAAc,CAAC,QAAQ,IAAI,YAAY,IAAI,CAAC,GAAG,EAAE,MAAM,CAAA;IAC7E,MAAM,QAAQ,GAAG,IAAI,CAAC,IAAI,CAAC,UAAU,IAAI,eAAe,EAAE,aAAa,CAAC,CAAA;IAExE,2CAA2C;IAC3C,EAAE,CAAC,aAAa,CAAC,QAAQ,EAAE,QAAQ,CAAC,CAAA;IAEpC,OAAO;QACL,IAAI,EAAE;YACJ,IAAI,EAAE,QAAQ;SACf;KACF,CAAA;AACH,CAAC;AAED,eAAe,CAAC,aAAa,GAAG;IAC9B;QACE,IAAI,EAAE,QAAQ;QACd,IAAI,EAAE,YAAY;QAClB,KAAK,EAAE,aAAa;QACpB,WAAW,EAAE,gFAAgF;KAC9F;CACF,CAAA;AAED,eAAe,CAAC,IAAI,GAAG,oCAAoC,CAAA;AAE3D,+BAAY,CAAC,mBAAmB,CAAC,mBAAmB,EAAE,eAAe,CAAC,CAAA","sourcesContent":["import * as fs from 'fs'\nimport * as path from 'path'\nimport { TaskRegistry } from '@things-factory/integration-base'\nimport { PDFDocument } from 'pdf-lib'\n\nasync function HeadlessPDFSave(step, context) {\n var { params: stepOptions } = step\n var { outputPath } = stepOptions || {}\n var { __headless_pdf } = context\n\n if (!__headless_pdf || !__headless_pdf.pdfDoc) {\n throw new Error(\n 'No PDF document found. Ensure that headless-pdf-open and headless-pdf-capture tasks are executed before saving.'\n )\n }\n\n const pdfDoc = __headless_pdf.pdfDoc\n\n // Add last page if it exists\n if (__headless_pdf.lastPageBuffer) {\n const lastPageDoc = await PDFDocument.load(__headless_pdf.lastPageBuffer)\n const copiedLastPages = await pdfDoc.copyPages(lastPageDoc, lastPageDoc.getPageIndices())\n copiedLastPages.forEach(page => pdfDoc.addPage(page))\n }\n\n const pdfBytes = await pdfDoc.save()\n\n const finalFileName = __headless_pdf.fileName || `document-${Date.now()}.pdf`\n const savePath = path.join(outputPath || './attachments', finalFileName)\n\n // Save the final PDF to the specified path\n fs.writeFileSync(savePath, pdfBytes)\n\n return {\n data: {\n link: savePath\n }\n }\n}\n\nHeadlessPDFSave.parameterSpec = [\n {\n type: 'string',\n name: 'outputPath',\n label: 'output-path',\n description: 'The directory path where the PDF should be saved. Defaults to \"./attachments\".'\n }\n]\n\nHeadlessPDFSave.help = 'integration/task/headless-pdf-save'\n\nTaskRegistry.registerTaskHandler('headless-pdf-save', HeadlessPDFSave)\n"]}
1
+ {"version":3,"file":"headless-pdf-save.js","sourceRoot":"","sources":["../../../server/engine/task/headless-pdf-save.ts"],"names":[],"mappings":";;AAAA,qCAAqC;AACrC,MAAM,EAAE,QAAQ,EAAE,GAAG,OAAO,CAAC,QAAQ,CAAC,CAAA;AAEtC,uEAA+D;AAC/D,qEAA8E;AAC9E,iDAAqD;AAErD,KAAK,UAAU,eAAe,CAAC,IAAI,EAAE,OAAO;IAC1C,IAAI,EAAE,MAAM,EAAE,IAAI,EAAE,cAAc,EAAE,GAAG,OAAO,CAAA;IAE9C,IAAI,CAAC,cAAc,IAAI,CAAC,cAAc,CAAC,MAAM,EAAE,CAAC;QAC9C,MAAM,IAAI,KAAK,CACb,iHAAiH,CAClH,CAAA;IACH,CAAC;IAED,MAAM,MAAM,GAAG,cAAc,CAAC,MAAM,CAAA;IAEpC,6BAA6B;IAC7B,IAAI,cAAc,CAAC,cAAc,EAAE,CAAC;QAClC,MAAM,WAAW,GAAG,MAAM,qBAAW,CAAC,IAAI,CAAC,cAAc,CAAC,cAAc,CAAC,CAAA;QACzE,MAAM,eAAe,GAAG,MAAM,MAAM,CAAC,SAAS,CAAC,WAAW,EAAE,WAAW,CAAC,cAAc,EAAE,CAAC,CAAA;QACzF,eAAe,CAAC,OAAO,CAAC,IAAI,CAAC,EAAE,CAAC,MAAM,CAAC,OAAO,CAAC,IAAI,CAAC,CAAC,CAAA;IACvD,CAAC;IAED,MAAM,QAAQ,GAAG,MAAM,MAAM,CAAC,IAAI,EAAE,CAAA;IAEpC,MAAM,aAAa,GAAG,cAAc,CAAC,QAAQ,IAAI,YAAY,IAAI,CAAC,GAAG,EAAE,MAAM,CAAA;IAE7E,MAAM,KAAK,GAAG,MAAM,IAAA,kCAAgB,EAClC,IAAI,EACJ;QACE,UAAU,EAAE;YACV,IAAI,EAAE;gBACJ,gBAAgB,EAAE,GAAG,EAAE,CACrB,IAAI,QAAQ,CAAC;oBACX,IAAI;wBACF,IAAI,CAAC,IAAI,CAAC,QAAQ,CAAC,CAAA;wBACnB,IAAI,CAAC,IAAI,CAAC,IAAI,CAAC,CAAA;oBACjB,CAAC;iBACF,CAAC;gBACJ,QAAQ,EAAE,aAAa;gBACvB,QAAQ,EAAE,iBAAiB;gBAC3B,QAAQ,EAAE,QAAQ;aACnB;YACD,OAAO,EAAE,mBAAmB;YAC5B,KAAK,EAAE,eAAe;SACvB;KACF,EACD;QACE,KAAK,EAAE,EAAE,MAAM,EAAE,IAAI,EAAE;KACxB,CACF,CAAA;IAED,MAAM,UAAU,GAAG,MAAM,IAAA,qBAAa,EAAC,4BAAU,CAAC,CAAC,OAAO,CAAC;QACzD,KAAK,EAAE,EAAE,EAAE,EAAE,KAAK,CAAC,EAAE,EAAE;KACxB,CAAC,CAAA;IAEF,OAAO;QACL,IAAI,EAAE;YACJ,EAAE,EAAE,UAAU,CAAC,EAAE;YACjB,IAAI,EAAE,UAAU,CAAC,IAAI;YACrB,IAAI,EAAE,UAAU,CAAC,IAAI;YACrB,QAAQ,EAAE,UAAU,CAAC,QAAQ;YAC7B,KAAK,EAAE,UAAU,CAAC,KAAK;YACvB,QAAQ,EAAE,UAAU,CAAC,QAAQ;SAC9B;KACF,CAAA;AACH,CAAC;AAED,eAAe,CAAC,aAAa,GAAG,EAAE,CAAA;AAElC,eAAe,CAAC,IAAI,GAAG,oCAAoC,CAAA;AAE3D,+BAAY,CAAC,mBAAmB,CAAC,mBAAmB,EAAE,eAAe,CAAC,CAAA","sourcesContent":["import { PDFDocument } from 'pdf-lib'\nconst { Readable } = require('stream')\n\nimport { TaskRegistry } from '@things-factory/integration-base'\nimport { Attachment, createAttachment } from '@things-factory/attachment-base'\nimport { getRepository } from '@things-factory/shell'\n\nasync function HeadlessPDFSave(step, context) {\n var { domain, user, __headless_pdf } = context\n\n if (!__headless_pdf || !__headless_pdf.pdfDoc) {\n throw new Error(\n 'No PDF document found. Ensure that headless-pdf-open and headless-pdf-capture tasks are executed before saving.'\n )\n }\n\n const pdfDoc = __headless_pdf.pdfDoc\n\n // Add last page if it exists\n if (__headless_pdf.lastPageBuffer) {\n const lastPageDoc = await PDFDocument.load(__headless_pdf.lastPageBuffer)\n const copiedLastPages = await pdfDoc.copyPages(lastPageDoc, lastPageDoc.getPageIndices())\n copiedLastPages.forEach(page => pdfDoc.addPage(page))\n }\n\n const pdfBytes = await pdfDoc.save()\n\n const finalFileName = __headless_pdf.fileName || `document-${Date.now()}.pdf`\n\n const saved = await createAttachment(\n null,\n {\n attachment: {\n file: {\n createReadStream: () =>\n new Readable({\n read() {\n this.push(pdfBytes)\n this.push(null)\n }\n }),\n filename: finalFileName,\n mimetype: 'application/pdf',\n encoding: 'binary'\n },\n refType: 'headless-pdf-save',\n refBy: 'pdf-published'\n }\n },\n {\n state: { domain, user }\n }\n )\n\n const attachment = await getRepository(Attachment).findOne({\n where: { id: saved.id }\n })\n\n return {\n data: {\n id: attachment.id,\n name: attachment.name,\n path: attachment.path,\n mimetype: attachment.mimetype,\n refBy: attachment.refBy,\n fullpath: attachment.fullpath\n }\n }\n}\n\nHeadlessPDFSave.parameterSpec = []\n\nHeadlessPDFSave.help = 'integration/task/headless-pdf-save'\n\nTaskRegistry.registerTaskHandler('headless-pdf-save', HeadlessPDFSave)\n"]}