@things-factory/board-service 8.0.5 → 9.0.0-beta.12

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 (66) hide show
  1. package/dist-server/controllers/headless-pdf-to-image.js +7 -2
  2. package/dist-server/controllers/headless-pdf-to-image.js.map +1 -1
  3. package/dist-server/tsconfig.tsbuildinfo +1 -1
  4. package/package.json +7 -7
  5. package/views/internal-board-full-feature-view.html +1 -2
  6. package/views/internal-board-player-view.html +0 -1
  7. package/views/internal-board-service-view.html +0 -1
  8. package/server/constants/error-code.ts +0 -2
  9. package/server/controllers/analyzer/analyze-integration.ts +0 -142
  10. package/server/controllers/fonts.ts +0 -83
  11. package/server/controllers/headless-model.ts +0 -53
  12. package/server/controllers/headless-pdf-to-image.ts +0 -103
  13. package/server/controllers/headless-playlist.ts +0 -71
  14. package/server/controllers/headless-pool-for-board.ts +0 -71
  15. package/server/controllers/headless-pool-for-label.ts +0 -141
  16. package/server/controllers/index.ts +0 -11
  17. package/server/controllers/label-command.ts +0 -62
  18. package/server/controllers/pdf.ts +0 -132
  19. package/server/controllers/screenshot.ts +0 -127
  20. package/server/controllers/thumbnail.ts +0 -18
  21. package/server/errors/index.ts +0 -1
  22. package/server/errors/license-error.ts +0 -21
  23. package/server/index.ts +0 -36
  24. package/server/migrations/1556862253000-SeedGroup.ts +0 -51
  25. package/server/migrations/index.ts +0 -9
  26. package/server/routers/internal-board-view-router.ts +0 -33
  27. package/server/routers/standalone-board-service-router.ts +0 -326
  28. package/server/routes.ts +0 -25
  29. package/server/service/analysis/analysis-query.ts +0 -13
  30. package/server/service/analysis/index.ts +0 -3
  31. package/server/service/board/board-history.ts +0 -137
  32. package/server/service/board/board-mutation.ts +0 -446
  33. package/server/service/board/board-query.ts +0 -180
  34. package/server/service/board/board-subscription.ts +0 -43
  35. package/server/service/board/board-type.ts +0 -58
  36. package/server/service/board/board.ts +0 -125
  37. package/server/service/board/event-subscriber.ts +0 -68
  38. package/server/service/board/index.ts +0 -10
  39. package/server/service/board-favorite/board-favorite-query.ts +0 -53
  40. package/server/service/board-favorite/board-favorite-type.ts +0 -18
  41. package/server/service/board-favorite/index.ts +0 -4
  42. package/server/service/board-template/board-template-mutation.ts +0 -161
  43. package/server/service/board-template/board-template-query.ts +0 -121
  44. package/server/service/board-template/board-template-type.ts +0 -53
  45. package/server/service/board-template/board-template.ts +0 -114
  46. package/server/service/board-template/index.ts +0 -7
  47. package/server/service/group/group-mutation.ts +0 -82
  48. package/server/service/group/group-query.ts +0 -58
  49. package/server/service/group/group-type.ts +0 -30
  50. package/server/service/group/group.ts +0 -69
  51. package/server/service/group/index.ts +0 -6
  52. package/server/service/index.ts +0 -56
  53. package/server/service/permission/domain-permission-subscriber.ts +0 -27
  54. package/server/service/permission/index.ts +0 -3
  55. package/server/service/play-group/event-subscriber.ts +0 -58
  56. package/server/service/play-group/index.ts +0 -9
  57. package/server/service/play-group/play-group-mutation.ts +0 -148
  58. package/server/service/play-group/play-group-query.ts +0 -92
  59. package/server/service/play-group/play-group-subscription.ts +0 -43
  60. package/server/service/play-group/play-group-type.ts +0 -30
  61. package/server/service/play-group/play-group.ts +0 -74
  62. package/server/service/theme/index.ts +0 -7
  63. package/server/service/theme/theme-mutation.ts +0 -128
  64. package/server/service/theme/theme-query.ts +0 -48
  65. package/server/service/theme/theme-type.ts +0 -55
  66. package/server/service/theme/theme.ts +0 -97
@@ -1,6 +1,8 @@
1
1
  "use strict";
2
2
  Object.defineProperty(exports, "__esModule", { value: true });
3
3
  exports.pdfToImage = void 0;
4
+ const tslib_1 = require("tslib");
5
+ const crypto_1 = tslib_1.__importDefault(require("crypto"));
4
6
  const puppeteer = require('puppeteer');
5
7
  const { Readable } = require('stream');
6
8
  const ejs = require('ejs');
@@ -21,7 +23,10 @@ const pdfToImage = async ({ pdfPath, fileName, extension = 'png', quality = 2, d
21
23
  const port = process.env.PORT;
22
24
  const pdfUrl = `${protocol}://${host}:${port}${pdfPath}`;
23
25
  const page = await browser.newPage();
24
- const html = await ejs.render(getPdfHtmlTemplate(), { data: { pdfUrl, quality } });
26
+ const html = await ejs.render(getPdfHtmlTemplate(), {
27
+ data: { pdfUrl, quality },
28
+ nonce: crypto_1.default.randomBytes(16).toString('hex')
29
+ });
25
30
  // 페이지 로딩시 까지 기다리고 스크린샷
26
31
  await page.setContent(html, { waitUntil: 'networkidle0' });
27
32
  await page.waitForNetworkIdle();
@@ -56,7 +61,7 @@ function getPdfHtmlTemplate() {
56
61
  <head>
57
62
  <meta charset="UTF-8" />
58
63
  <meta http-equiv="X-UA-Compatible" content="IE=edge" />
59
- <meta name="viewport" content="width=device-width, initial-scale=1.0" />
64
+ <meta name="viewport" content="width=device-width, initial-scale=1, maximum-scale=1, user-scalable=no" />
60
65
 
61
66
  <style nonce="<%= nonce %>">
62
67
  body {
@@ -1 +1 @@
1
- {"version":3,"file":"headless-pdf-to-image.js","sourceRoot":"","sources":["../../server/controllers/headless-pdf-to-image.ts"],"names":[],"mappings":";;;AAAA,MAAM,SAAS,GAAG,OAAO,CAAC,WAAW,CAAC,CAAA;AACtC,MAAM,EAAE,QAAQ,EAAE,GAAG,OAAO,CAAC,QAAQ,CAAC,CAAA;AACtC,MAAM,GAAG,GAAG,OAAO,CAAC,KAAK,CAAC,CAAA;AAEnB,MAAM,UAAU,GAAG,KAAK,EAAE,EAAE,OAAO,EAAE,QAAQ,EAAE,SAAS,GAAG,KAAK,EAAE,OAAO,GAAG,CAAC,EAAE,eAAe,GAAG,IAAI,EAAE,EAAE,EAAE;IAChH,MAAM,OAAO,GAAG,MAAM,SAAS,CAAC,MAAM,CAAC;QACrC,QAAQ,EAAE,IAAI;QACd,IAAI,EAAE;YACJ,wBAAwB;YACxB,mCAAmC;YACnC,iCAAiC;YACjC,cAAc;SACf;QACD,eAAe;KAChB,CAAC,CAAA;IAEF,IAAI,CAAC;QACH,MAAM,QAAQ,GAAG,MAAM,CAAA;QACvB,MAAM,IAAI,GAAG,WAAW,CAAA;QACxB,MAAM,IAAI,GAAG,OAAO,CAAC,GAAG,CAAC,IAAI,CAAA;QAC7B,MAAM,MAAM,GAAG,GAAG,QAAQ,MAAM,IAAI,IAAI,IAAI,GAAG,OAAO,EAAE,CAAA;QAExD,MAAM,IAAI,GAAG,MAAM,OAAO,CAAC,OAAO,EAAE,CAAA;QACpC,MAAM,IAAI,GAAG,MAAM,GAAG,CAAC,MAAM,CAAC,kBAAkB,EAAE,EAAE,EAAE,IAAI,EAAE,EAAE,MAAM,EAAE,OAAO,EAAE,EAAE,CAAC,CAAA;QAElF,uBAAuB;QACvB,MAAM,IAAI,CAAC,UAAU,CAAC,IAAI,EAAE,EAAE,SAAS,EAAE,cAAc,EAAE,CAAC,CAAA;QAC1D,MAAM,IAAI,CAAC,kBAAkB,EAAE,CAAA;QAC/B,MAAM,IAAI,CAAC,CAAC,CAAC,OAAO,CAAC,CAAA;QACrB,MAAM,UAAU,GAAG,MAAM,IAAI,CAAC,UAAU,CAAC;YACvC,IAAI,EAAE,SAAS;YACf,cAAc,EAAE,IAAI;SACrB,CAAC,CAAA;QAEF,6CAA6C;QAC7C,MAAM,MAAM,GAAG,IAAI,QAAQ,EAAE,CAAA;QAC7B,MAAM,CAAC,IAAI,CAAC,UAAU,CAAC,CAAA;QACvB,MAAM,CAAC,IAAI,CAAC,IAAI,CAAC,CAAA;QAEjB,MAAM,OAAO,CAAC,KAAK,EAAE,CAAA;QAErB,yBAAyB;QACzB,OAAO;YACL,QAAQ,EAAE,GAAG,QAAQ,IAAI,SAAS,EAAE;YACpC,QAAQ,EAAE,SAAS,SAAS,EAAE;YAC9B,QAAQ,EAAE,MAAM;YAChB,gBAAgB,EAAE,GAAG,EAAE,CAAC,MAAM;SAC/B,CAAA;IACH,CAAC;IAAC,OAAO,CAAC,EAAE,CAAC;QACX,MAAM,OAAO,CAAC,KAAK,EAAE,CAAA;QACrB,OAAO,CAAC,GAAG,CAAC,0BAA0B,EAAE,CAAC,CAAC,CAAA;QAC1C,MAAM,IAAI,KAAK,CAAC,0BAA0B,CAAC,CAAA;IAC7C,CAAC;AACH,CAAC,CAAA;AAjDY,QAAA,UAAU,cAiDtB;AAED,SAAS,kBAAkB;IACzB,OAAO;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;GA6CN,CAAA;AACH,CAAC","sourcesContent":["const puppeteer = require('puppeteer')\nconst { Readable } = require('stream')\nconst ejs = require('ejs')\n\nexport const pdfToImage = async ({ pdfPath, fileName, extension = 'png', quality = 2, defaultViewport = null }) => {\n const browser = await puppeteer.launch({\n headless: true,\n args: [\n '--disable-web-security',\n '--disable-features=IsolateOrigins',\n '--disable-site-isolation-trials',\n '--no-sandbox'\n ],\n defaultViewport\n })\n\n try {\n const protocol = 'http'\n const host = 'localhost'\n const port = process.env.PORT\n const pdfUrl = `${protocol}://${host}:${port}${pdfPath}`\n\n const page = await browser.newPage()\n const html = await ejs.render(getPdfHtmlTemplate(), { data: { pdfUrl, quality } })\n\n // 페이지 로딩시 까지 기다리고 스크린샷\n await page.setContent(html, { waitUntil: 'networkidle0' })\n await page.waitForNetworkIdle()\n await page.$('#page')\n const screenshot = await page.screenshot({\n type: extension,\n omitBackground: true\n })\n\n // graphql fileupload형태로 return을 위해 stream 생성\n const stream = new Readable()\n stream.push(screenshot)\n stream.push(null)\n\n await browser.close()\n\n // file upload 형태로 return\n return {\n filename: `${fileName}.${extension}`,\n mimetype: `image/${extension}`,\n encoding: '7bit',\n createReadStream: () => stream\n }\n } catch (e) {\n await browser.close()\n console.log('Error creating thumbnail', e)\n throw new Error('Error creating thumbnail')\n }\n}\n\nfunction getPdfHtmlTemplate() {\n return `\n <html lang=\"en\">\n <head>\n <meta charset=\"UTF-8\" />\n <meta http-equiv=\"X-UA-Compatible\" content=\"IE=edge\" />\n <meta name=\"viewport\" content=\"width=device-width, initial-scale=1.0\" />\n\n <style nonce=\"<%= nonce %>\">\n body {\n width: 100vw;\n height: 100vh;\n margin: 0;\n }\n #page {\n display: flex;\n width: 100%;\n height: 100%;\n }\n </style>\n\n </head>\n <body>\n <canvas id=\"page\"></canvas>\n <script src=\"https://unpkg.com/pdfjs-dist@2.0.489/build/pdf.min.js\"></script>\n <script nonce=\"<%= nonce %>\">\n ;(async () => {\n const pdf = await pdfjsLib.getDocument('<%= data.pdfUrl %>')\n const page = await pdf.getPage(1)\n const viewport = page.getViewport('<%= data.quality %>')\n const canvas = document.getElementById('page')\n const context = canvas.getContext('2d')\n\n canvas.height = viewport.height\n canvas.width = viewport.width\n\n const renderContext = {\n canvasContext: context,\n viewport: viewport\n }\n\n page.render(renderContext)\n })()\n </script>\n </body>\n </html>\n `\n}\n"]}
1
+ {"version":3,"file":"headless-pdf-to-image.js","sourceRoot":"","sources":["../../server/controllers/headless-pdf-to-image.ts"],"names":[],"mappings":";;;;AAAA,4DAA2B;AAE3B,MAAM,SAAS,GAAG,OAAO,CAAC,WAAW,CAAC,CAAA;AACtC,MAAM,EAAE,QAAQ,EAAE,GAAG,OAAO,CAAC,QAAQ,CAAC,CAAA;AACtC,MAAM,GAAG,GAAG,OAAO,CAAC,KAAK,CAAC,CAAA;AAEnB,MAAM,UAAU,GAAG,KAAK,EAAE,EAAE,OAAO,EAAE,QAAQ,EAAE,SAAS,GAAG,KAAK,EAAE,OAAO,GAAG,CAAC,EAAE,eAAe,GAAG,IAAI,EAAE,EAAE,EAAE;IAChH,MAAM,OAAO,GAAG,MAAM,SAAS,CAAC,MAAM,CAAC;QACrC,QAAQ,EAAE,IAAI;QACd,IAAI,EAAE;YACJ,wBAAwB;YACxB,mCAAmC;YACnC,iCAAiC;YACjC,cAAc;SACf;QACD,eAAe;KAChB,CAAC,CAAA;IAEF,IAAI,CAAC;QACH,MAAM,QAAQ,GAAG,MAAM,CAAA;QACvB,MAAM,IAAI,GAAG,WAAW,CAAA;QACxB,MAAM,IAAI,GAAG,OAAO,CAAC,GAAG,CAAC,IAAI,CAAA;QAC7B,MAAM,MAAM,GAAG,GAAG,QAAQ,MAAM,IAAI,IAAI,IAAI,GAAG,OAAO,EAAE,CAAA;QAExD,MAAM,IAAI,GAAG,MAAM,OAAO,CAAC,OAAO,EAAE,CAAA;QACpC,MAAM,IAAI,GAAG,MAAM,GAAG,CAAC,MAAM,CAAC,kBAAkB,EAAE,EAAE;YAClD,IAAI,EAAE,EAAE,MAAM,EAAE,OAAO,EAAE;YACzB,KAAK,EAAE,gBAAM,CAAC,WAAW,CAAC,EAAE,CAAC,CAAC,QAAQ,CAAC,KAAK,CAAC;SAC9C,CAAC,CAAA;QAEF,uBAAuB;QACvB,MAAM,IAAI,CAAC,UAAU,CAAC,IAAI,EAAE,EAAE,SAAS,EAAE,cAAc,EAAE,CAAC,CAAA;QAC1D,MAAM,IAAI,CAAC,kBAAkB,EAAE,CAAA;QAC/B,MAAM,IAAI,CAAC,CAAC,CAAC,OAAO,CAAC,CAAA;QACrB,MAAM,UAAU,GAAG,MAAM,IAAI,CAAC,UAAU,CAAC;YACvC,IAAI,EAAE,SAAS;YACf,cAAc,EAAE,IAAI;SACrB,CAAC,CAAA;QAEF,6CAA6C;QAC7C,MAAM,MAAM,GAAG,IAAI,QAAQ,EAAE,CAAA;QAC7B,MAAM,CAAC,IAAI,CAAC,UAAU,CAAC,CAAA;QACvB,MAAM,CAAC,IAAI,CAAC,IAAI,CAAC,CAAA;QAEjB,MAAM,OAAO,CAAC,KAAK,EAAE,CAAA;QAErB,yBAAyB;QACzB,OAAO;YACL,QAAQ,EAAE,GAAG,QAAQ,IAAI,SAAS,EAAE;YACpC,QAAQ,EAAE,SAAS,SAAS,EAAE;YAC9B,QAAQ,EAAE,MAAM;YAChB,gBAAgB,EAAE,GAAG,EAAE,CAAC,MAAM;SAC/B,CAAA;IACH,CAAC;IAAC,OAAO,CAAC,EAAE,CAAC;QACX,MAAM,OAAO,CAAC,KAAK,EAAE,CAAA;QACrB,OAAO,CAAC,GAAG,CAAC,0BAA0B,EAAE,CAAC,CAAC,CAAA;QAC1C,MAAM,IAAI,KAAK,CAAC,0BAA0B,CAAC,CAAA;IAC7C,CAAC;AACH,CAAC,CAAA;AApDY,QAAA,UAAU,cAoDtB;AAED,SAAS,kBAAkB;IACzB,OAAO;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;GA6CN,CAAA;AACH,CAAC","sourcesContent":["import crypto from 'crypto'\n\nconst puppeteer = require('puppeteer')\nconst { Readable } = require('stream')\nconst ejs = require('ejs')\n\nexport const pdfToImage = async ({ pdfPath, fileName, extension = 'png', quality = 2, defaultViewport = null }) => {\n const browser = await puppeteer.launch({\n headless: true,\n args: [\n '--disable-web-security',\n '--disable-features=IsolateOrigins',\n '--disable-site-isolation-trials',\n '--no-sandbox'\n ],\n defaultViewport\n })\n\n try {\n const protocol = 'http'\n const host = 'localhost'\n const port = process.env.PORT\n const pdfUrl = `${protocol}://${host}:${port}${pdfPath}`\n\n const page = await browser.newPage()\n const html = await ejs.render(getPdfHtmlTemplate(), {\n data: { pdfUrl, quality },\n nonce: crypto.randomBytes(16).toString('hex')\n })\n\n // 페이지 로딩시 까지 기다리고 스크린샷\n await page.setContent(html, { waitUntil: 'networkidle0' })\n await page.waitForNetworkIdle()\n await page.$('#page')\n const screenshot = await page.screenshot({\n type: extension,\n omitBackground: true\n })\n\n // graphql fileupload형태로 return을 위해 stream 생성\n const stream = new Readable()\n stream.push(screenshot)\n stream.push(null)\n\n await browser.close()\n\n // file upload 형태로 return\n return {\n filename: `${fileName}.${extension}`,\n mimetype: `image/${extension}`,\n encoding: '7bit',\n createReadStream: () => stream\n }\n } catch (e) {\n await browser.close()\n console.log('Error creating thumbnail', e)\n throw new Error('Error creating thumbnail')\n }\n}\n\nfunction getPdfHtmlTemplate() {\n return `\n <html lang=\"en\">\n <head>\n <meta charset=\"UTF-8\" />\n <meta http-equiv=\"X-UA-Compatible\" content=\"IE=edge\" />\n <meta name=\"viewport\" content=\"width=device-width, initial-scale=1, maximum-scale=1, user-scalable=no\" />\n\n <style nonce=\"<%= nonce %>\">\n body {\n width: 100vw;\n height: 100vh;\n margin: 0;\n }\n #page {\n display: flex;\n width: 100%;\n height: 100%;\n }\n </style>\n\n </head>\n <body>\n <canvas id=\"page\"></canvas>\n <script src=\"https://unpkg.com/pdfjs-dist@2.0.489/build/pdf.min.js\"></script>\n <script nonce=\"<%= nonce %>\">\n ;(async () => {\n const pdf = await pdfjsLib.getDocument('<%= data.pdfUrl %>')\n const page = await pdf.getPage(1)\n const viewport = page.getViewport('<%= data.quality %>')\n const canvas = document.getElementById('page')\n const context = canvas.getContext('2d')\n\n canvas.height = viewport.height\n canvas.width = viewport.width\n\n const renderContext = {\n canvasContext: context,\n viewport: viewport\n }\n\n page.render(renderContext)\n })()\n </script>\n </body>\n </html>\n `\n}\n"]}