@things-factory/board-service 7.0.0-alpha.0 → 7.0.0-alpha.4
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.
- package/dist-server/controllers/headless-model.js +7 -6
- package/dist-server/controllers/headless-model.js.map +1 -1
- package/dist-server/controllers/headless-playlist.js +2 -2
- package/dist-server/controllers/headless-playlist.js.map +1 -1
- package/dist-server/controllers/headless-pool-for-label.js +4 -4
- package/dist-server/controllers/headless-pool-for-label.js.map +1 -1
- package/dist-server/controllers/label-command.js +2 -2
- package/dist-server/controllers/label-command.js.map +1 -1
- package/dist-server/controllers/screenshot.js +2 -2
- package/dist-server/controllers/screenshot.js.map +1 -1
- package/dist-server/routers/board-print-router.js +13 -0
- package/dist-server/routers/board-print-router.js.map +1 -1
- package/dist-server/routers/standalone-board-service-router.js +12 -1
- package/dist-server/routers/standalone-board-service-router.js.map +1 -1
- package/dist-server/service/board/board-subscription.js +4 -4
- package/dist-server/service/board/board-subscription.js.map +1 -1
- package/dist-server/service/play-group/play-group-subscription.js +4 -4
- package/dist-server/service/play-group/play-group-subscription.js.map +1 -1
- package/dist-server/tsconfig.tsbuildinfo +1 -1
- package/package.json +6 -6
- package/server/controllers/headless-model.ts +6 -6
- package/server/controllers/headless-playlist.ts +2 -2
- package/server/controllers/headless-pool-for-label.ts +2 -2
- package/server/controllers/label-command.ts +2 -2
- package/server/controllers/screenshot.ts +3 -2
- package/server/routers/board-print-router.ts +16 -0
- package/server/routers/standalone-board-service-router.ts +16 -1
- package/server/service/board/board-subscription.ts +7 -7
- package/server/service/play-group/play-group-subscription.ts +7 -7
|
@@ -5,7 +5,7 @@ const typeorm_1 = require("typeorm");
|
|
|
5
5
|
const shell_1 = require("@things-factory/shell");
|
|
6
6
|
const board_1 = require("../service/board/board");
|
|
7
7
|
const board_history_1 = require("../service/board/board-history");
|
|
8
|
-
const headlessModel = async (target,
|
|
8
|
+
const headlessModel = async (target, draft = false) => {
|
|
9
9
|
var { domain, id, model, name } = target || {};
|
|
10
10
|
if (model) {
|
|
11
11
|
if (typeof model == 'string') {
|
|
@@ -29,7 +29,7 @@ const headlessModel = async (target, devmode = false) => {
|
|
|
29
29
|
else {
|
|
30
30
|
throw 'parameter model or id mandatory';
|
|
31
31
|
}
|
|
32
|
-
if (!
|
|
32
|
+
if (!draft && board) {
|
|
33
33
|
const latestReleased = board.state == 'released'
|
|
34
34
|
? board
|
|
35
35
|
: await (0, shell_1.getRepository)(board_history_1.BoardHistory)
|
|
@@ -38,11 +38,12 @@ const headlessModel = async (target, devmode = false) => {
|
|
|
38
38
|
.orderBy('history.version', 'DESC')
|
|
39
39
|
.limit(1)
|
|
40
40
|
.getOne();
|
|
41
|
-
|
|
42
|
-
model = latestReleased.model;
|
|
43
|
-
}
|
|
41
|
+
model = (latestReleased || board).model;
|
|
44
42
|
}
|
|
45
|
-
|
|
43
|
+
else {
|
|
44
|
+
model = board.model;
|
|
45
|
+
}
|
|
46
|
+
model = JSON.parse(model);
|
|
46
47
|
}
|
|
47
48
|
return {
|
|
48
49
|
base: (0, shell_1.getContextPath)(domain === null || domain === void 0 ? void 0 : domain.subdomain) + (domain ? '/' : ''),
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"headless-model.js","sourceRoot":"","sources":["../../server/controllers/headless-model.ts"],"names":[],"mappings":";;;AAAA,qCAA4B;AAC5B,iDAAqE;AAErE,kDAA8C;AAC9C,kEAA6D;AAEtD,MAAM,aAAa,GAAG,KAAK,EAAE,MAAM,EAAE,
|
|
1
|
+
{"version":3,"file":"headless-model.js","sourceRoot":"","sources":["../../server/controllers/headless-model.ts"],"names":[],"mappings":";;;AAAA,qCAA4B;AAC5B,iDAAqE;AAErE,kDAA8C;AAC9C,kEAA6D;AAEtD,MAAM,aAAa,GAAG,KAAK,EAAE,MAAM,EAAE,QAAiB,KAAK,EAAE,EAAE;IACpE,IAAI,EAAE,MAAM,EAAE,EAAE,EAAE,KAAK,EAAE,IAAI,EAAE,GAAG,MAAM,IAAI,EAAE,CAAA;IAE9C,IAAI,KAAK,EAAE;QACT,IAAI,OAAO,KAAK,IAAI,QAAQ,EAAE;YAC5B,KAAK,GAAG,IAAI,CAAC,KAAK,CAAC,KAAK,CAAC,CAAA;SAC1B;aAAM,IAAI,OAAO,KAAK,KAAK,QAAQ,EAAE;YACpC,MAAM,oCAAoC,CAAA;SAC3C;KACF;SAAM;QACL,IAAI,EAAE,EAAE;YACN,IAAI,KAAK,GAAG,MAAM,IAAA,qBAAa,EAAC,aAAK,CAAC,CAAC,OAAO,CAAC;gBAC7C,KAAK,EAAE,EAAE,MAAM,EAAE,EAAE,EAAE,EAAE,IAAA,YAAE,EAAC,CAAC,MAAM,CAAC,EAAE,EAAE,MAAM,CAAC,QAAQ,CAAC,CAAC,MAAM,CAAC,OAAO,CAAC,CAAC,EAAE,EAAE,EAAE,EAAE;aAChF,CAAC,CAAA;SACH;aAAM,IAAI,IAAI,EAAE;YACf,IAAI,KAAK,GAAG,MAAM,IAAA,qBAAa,EAAC,aAAK,CAAC,CAAC,OAAO,CAAC;gBAC7C,KAAK,EAAE,EAAE,MAAM,EAAE,EAAE,EAAE,EAAE,IAAA,YAAE,EAAC,CAAC,MAAM,CAAC,EAAE,EAAE,MAAM,CAAC,QAAQ,CAAC,CAAC,MAAM,CAAC,OAAO,CAAC,CAAC,EAAE,EAAE,IAAI,EAAE;aAClF,CAAC,CAAA;SACH;aAAM;YACL,MAAM,iCAAiC,CAAA;SACxC;QAED,IAAI,CAAC,KAAK,IAAI,KAAK,EAAE;YACnB,MAAM,cAAc,GAClB,KAAK,CAAC,KAAK,IAAI,UAAU;gBACvB,CAAC,CAAC,KAAK;gBACP,CAAC,CAAC,MAAM,IAAA,qBAAa,EAAC,4BAAY,CAAC;qBAC9B,kBAAkB,CAAC,SAAS,CAAC;qBAC7B,KAAK,CAAC,kCAAkC,EAAE,EAAE,UAAU,EAAE,KAAK,CAAC,EAAE,EAAE,CAAC;qBACnE,OAAO,CAAC,iBAAiB,EAAE,MAAM,CAAC;qBAClC,KAAK,CAAC,CAAC,CAAC;qBACR,MAAM,EAAE,CAAA;YAEjB,KAAK,GAAG,CAAC,cAAc,IAAI,KAAK,CAAC,CAAC,KAAK,CAAA;SACxC;aAAM;YACL,KAAK,GAAG,KAAK,CAAC,KAAK,CAAA;SACpB;QAED,KAAK,GAAG,IAAI,CAAC,KAAK,CAAC,KAAK,CAAC,CAAA;KAC1B;IAED,OAAO;QACL,IAAI,EAAE,IAAA,sBAAc,EAAC,MAAM,aAAN,MAAM,uBAAN,MAAM,CAAE,SAAS,CAAC,GAAG,CAAC,MAAM,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,CAAC;QAC7D,KAAK;QACL,KAAK;KACN,CAAA;AACH,CAAC,CAAA;AA9CY,QAAA,aAAa,iBA8CzB","sourcesContent":["import { In } from 'typeorm'\nimport { getContextPath, getRepository } from '@things-factory/shell'\n\nimport { Board } from '../service/board/board'\nimport { BoardHistory } from '../service/board/board-history'\n\nexport const headlessModel = async (target, draft: boolean = false) => {\n var { domain, id, model, name } = target || {}\n\n if (model) {\n if (typeof model == 'string') {\n model = JSON.parse(model)\n } else if (typeof model !== 'object') {\n throw 'model should be a string or object'\n }\n } else {\n if (id) {\n var board = await getRepository(Board).findOne({\n where: { domain: { id: In([domain.id, domain.parentId].filter(Boolean)) }, id }\n })\n } else if (name) {\n var board = await getRepository(Board).findOne({\n where: { domain: { id: In([domain.id, domain.parentId].filter(Boolean)) }, name }\n })\n } else {\n throw 'parameter model or id mandatory'\n }\n\n if (!draft && board) {\n const latestReleased =\n board.state == 'released'\n ? board\n : await getRepository(BoardHistory)\n .createQueryBuilder('history')\n .where('history.originalId = :originalId', { originalId: board.id })\n .orderBy('history.version', 'DESC')\n .limit(1)\n .getOne()\n\n model = (latestReleased || board).model\n } else {\n model = board.model\n }\n\n model = JSON.parse(model)\n }\n\n return {\n base: getContextPath(domain?.subdomain) + (domain ? '/' : ''),\n model,\n board\n }\n}\n"]}
|
|
@@ -4,7 +4,7 @@ exports.headlessPlaylist = void 0;
|
|
|
4
4
|
const shell_1 = require("@things-factory/shell");
|
|
5
5
|
const play_group_1 = require("../service/play-group/play-group");
|
|
6
6
|
const board_history_1 = require("../service/board/board-history");
|
|
7
|
-
const headlessPlaylist = async (target,
|
|
7
|
+
const headlessPlaylist = async (target, draft = false) => {
|
|
8
8
|
var { domain, id, name } = target || {};
|
|
9
9
|
if (id || name) {
|
|
10
10
|
const repository = (0, shell_1.getRepository)(play_group_1.PlayGroup);
|
|
@@ -20,7 +20,7 @@ const headlessPlaylist = async (target, devmode = false) => {
|
|
|
20
20
|
relations: ['boards']
|
|
21
21
|
});
|
|
22
22
|
}
|
|
23
|
-
if (!
|
|
23
|
+
if (!draft && playGroup) {
|
|
24
24
|
const { boards } = playGroup;
|
|
25
25
|
for (let board of boards) {
|
|
26
26
|
const latestReleased = board.state == 'released'
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"headless-playlist.js","sourceRoot":"","sources":["../../server/controllers/headless-playlist.ts"],"names":[],"mappings":";;;AAAA,iDAAqE;AAErE,iEAA4D;AAC5D,kEAA6D;AAEtD,MAAM,gBAAgB,GAAG,KAAK,EAAE,MAAM,EAAE,
|
|
1
|
+
{"version":3,"file":"headless-playlist.js","sourceRoot":"","sources":["../../server/controllers/headless-playlist.ts"],"names":[],"mappings":"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","sourcesContent":["import { getContextPath, getRepository } from '@things-factory/shell'\n\nimport { PlayGroup } from '../service/play-group/play-group'\nimport { BoardHistory } from '../service/board/board-history'\n\nexport const headlessPlaylist = async (target, draft: boolean = false) => {\n var { domain, id, name } = target || {}\n\n if (id || name) {\n const repository = getRepository(PlayGroup)\n\n if (id) {\n var playGroup = await repository.findOne({\n where: { domain: { id: domain.id }, id },\n relations: ['boards']\n })\n } else if (name) {\n var playGroup = await repository.findOne({\n where: { domain: { id: domain.id }, name },\n relations: ['boards']\n })\n }\n\n if (!draft && playGroup) {\n const { boards } = playGroup\n for (let board of boards) {\n const latestReleased =\n board.state == 'released'\n ? board\n : await getRepository(BoardHistory)\n .createQueryBuilder('history')\n .where('history.originalId = :originalId', { originalId: board.id })\n .orderBy('history.version', 'DESC')\n .limit(1)\n .getOne()\n\n if (latestReleased) {\n board.model = latestReleased.model\n }\n }\n }\n\n playGroup.boards = playGroup.boards.sort((a, b) => {\n // 배열 A에 포함된 아이디의 순서를 가져옵니다.\n const indexOfOrder = (playGroup.order || []).indexOf(a.id)\n const indexOfBoards = (playGroup.order || []).indexOf(b.id)\n\n // 두 아이디의 순서를 비교하여 정렬합니다.\n if (indexOfOrder === -1 && indexOfBoards === -1) {\n // 두 아이디 모두 배열 A에 없는 경우, 그대로 유지합니다.\n return 0\n } else if (indexOfOrder === -1) {\n // 아이디 A만 배열 A에 없는 경우, 아이디 B를 먼저 정렬합니다.\n return 1\n } else if (indexOfBoards === -1) {\n // 아이디 B만 배열 A에 없는 경우, 아이디 A를 먼저 정렬합니다.\n return -1\n } else {\n // 두 아이디 모두 배열 A에 있는 경우, 배열 A의 아이디 순서대로 정렬합니다.\n return indexOfOrder - indexOfBoards\n }\n })\n } else {\n throw 'parameter id or name mandatory'\n }\n\n return {\n base: getContextPath(domain?.subdomain) + (domain ? '/' : ''),\n playGroup\n }\n}\n"]}
|
|
@@ -42,10 +42,10 @@ function getHeadlessPool() {
|
|
|
42
42
|
});
|
|
43
43
|
setTimeout(async () => {
|
|
44
44
|
var _a, e_1, _b, _c;
|
|
45
|
-
const
|
|
45
|
+
const eventSource = shell_1.pubsub.subscribe('notify-font-changed');
|
|
46
46
|
try {
|
|
47
|
-
for (var _d = true,
|
|
48
|
-
_c =
|
|
47
|
+
for (var _d = true, eventSource_1 = tslib_1.__asyncValues(eventSource), eventSource_1_1; eventSource_1_1 = await eventSource_1.next(), _a = eventSource_1_1.done, !_a;) {
|
|
48
|
+
_c = eventSource_1_1.value;
|
|
49
49
|
_d = false;
|
|
50
50
|
try {
|
|
51
51
|
const data = _c;
|
|
@@ -59,7 +59,7 @@ function getHeadlessPool() {
|
|
|
59
59
|
catch (e_1_1) { e_1 = { error: e_1_1 }; }
|
|
60
60
|
finally {
|
|
61
61
|
try {
|
|
62
|
-
if (!_d && !_a && (_b =
|
|
62
|
+
if (!_d && !_a && (_b = eventSource_1.return)) await _b.call(eventSource_1);
|
|
63
63
|
}
|
|
64
64
|
finally { if (e_1) throw e_1.error; }
|
|
65
65
|
}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"headless-pool-for-label.js","sourceRoot":"","sources":["../../server/controllers/headless-pool-for-label.ts"],"names":[],"mappings":";;;;AAAA,kEAA2C;AAE3C,6CAAoD;AACpD,iDAA8C;AAE9C,mCAA+B;AAE/B,IAAI;IACF,IAAI,SAAS,GAAG,OAAO,CAAC,WAAW,CAAC,CAAA;CACrC;AAAC,OAAO,GAAG,EAAE;IACZ,YAAM,CAAC,KAAK,CAAC,GAAG,CAAC,CAAA;CAClB;AAED,IAAI,YAAY,CAAA;AAEhB,SAAgB,eAAe;IAC7B,IAAI,CAAC,YAAY,EAAE;QACjB,YAAY,GAAG,WAAW,CAAC,UAAU,CACnC;YACE,MAAM;gBACJ,OAAO,CAAC,GAAG,CAAC,yCAAyC,CAAC,CAAA;gBACtD,OAAO,mBAAmB,EAAE,CAAA;YAC9B,CAAC;YACD,QAAQ,CAAC,EAAE,OAAO,EAAE,IAAI,EAAE;gBACxB,OAAO,OAAO,CAAC,IAAI,CAAC;oBAClB,IAAI,OAAO,CAAC,GAAG,CAAC,EAAE,CAAC,UAAU,CAAC,GAAG,EAAE,CAAC,GAAG,CAAC,KAAK,CAAC,EAAE,IAAI,CAAC,CAAC;oBACtD,OAAO;wBACL,YAAY;yBACX,OAAO,EAAE;yBACT,IAAI,CAAC,CAAC,CAAC,EAAE,CAAC,IAAI,CAAC;yBACf,KAAK,CAAC,CAAC,CAAC,EAAE,CAAC,KAAK,CAAC;iBACrB,CAAC,CAAA;YACJ,CAAC;YACD,OAAO,CAAC,EAAE,OAAO,EAAE,IAAI,EAAE;gBACvB,YAAY;gBACZ,OAAO,OAAO,CAAC,KAAK,EAAE,CAAA;YACxB,CAAC;SACF,EACD;YACE,GAAG,EAAE,CAAC;YACN,GAAG,EAAE,EAAE;YACP,YAAY,EAAE,IAAI;YAClB,oBAAoB,EAAE,KAAK;SAC5B,CACF,CAAA;QAED,UAAU,CAAC,KAAK,IAAI,EAAE;;YACpB,MAAM,
|
|
1
|
+
{"version":3,"file":"headless-pool-for-label.js","sourceRoot":"","sources":["../../server/controllers/headless-pool-for-label.ts"],"names":[],"mappings":"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","sourcesContent":["import * as genericPool from 'generic-pool'\n\nimport { config, logger } from '@things-factory/env'\nimport { pubsub } from '@things-factory/shell'\n\nimport { fonts } from './fonts'\n\ntry {\n var puppeteer = require('puppeteer')\n} catch (err) {\n logger.error(err)\n}\n\nvar headlessPool\n\nexport function getHeadlessPool() {\n if (!headlessPool) {\n headlessPool = genericPool.createPool(\n {\n create() {\n console.log('headless-pool-for-label about to create')\n return initializeScenePage()\n },\n validate({ browser, page }) {\n return Promise.race([\n new Promise(res => setTimeout(() => res(false), 1500)),\n browser\n //@ts-ignore\n .version()\n .then(_ => true)\n .catch(_ => false)\n ])\n },\n destroy({ browser, page }) {\n //@ts-ignore\n return browser.close()\n }\n },\n {\n min: 2,\n max: 10,\n testOnBorrow: true,\n acquireTimeoutMillis: 15000\n }\n )\n\n setTimeout(async () => {\n const eventSource = pubsub.subscribe('notify-font-changed')\n for await (const data of eventSource) {\n headlessPool.clear()\n }\n })\n }\n\n return headlessPool\n}\n\nconst CHROMIUM_PATH = config.get('CHROMIUM_PATH')\n\nasync function initializeChromium() {\n try {\n if (!puppeteer) {\n return\n }\n\n var launchSetting = {\n args: ['--hide-scrollbars', '--mute-audio', '--no-sandbox', '--use-gl=egl'],\n headless: 'new'\n }\n\n if (CHROMIUM_PATH) {\n launchSetting['executablePath'] = CHROMIUM_PATH\n }\n\n const browser = await puppeteer.launch(launchSetting)\n\n return browser\n } catch (err) {\n logger.error(err)\n }\n}\n\nasync function initializeScenePage() {\n /* get brand new browser for every request */\n const browser = await initializeChromium()\n\n if (!browser) {\n return\n }\n\n const protocol = 'http'\n const host = 'localhost'\n const path = '/internal-label-command-view'\n\n const port = process.env.PORT\n const url = `${protocol}://${host}:${port}${path}`\n\n const page = await browser.newPage()\n const [fontsToUse, fontStyles] = await fonts()\n\n await page.setRequestInterception(true)\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 page.on('request', request => {\n if (request.url() === url) {\n request.continue({\n method: 'POST',\n headers: {\n 'Content-Type': 'application/json'\n },\n postData: JSON.stringify({\n fonts: fontsToUse,\n fontStyles\n })\n })\n } else {\n request.continue()\n }\n })\n\n await page.goto(url, { timeout: 0, waitUntil: 'load' })\n\n return { browser, page }\n}\n"]}
|
|
@@ -15,14 +15,14 @@ const headless_model_1 = require("./headless-model");
|
|
|
15
15
|
* @param {boolean} mirror 좌우반전
|
|
16
16
|
* @param {boolean} upsideDown 상하반전
|
|
17
17
|
*/
|
|
18
|
-
const labelcommand = async ({ id, model, data, orientation, mirror = false, upsideDown = false, context }) => {
|
|
18
|
+
const labelcommand = async ({ id, model, data, orientation, mirror = false, upsideDown = false, context, draft = false }) => {
|
|
19
19
|
const { domain } = context.state;
|
|
20
20
|
const browser = (await (0, headless_pool_for_label_1.getHeadlessPool)().acquire());
|
|
21
21
|
if (!browser) {
|
|
22
22
|
return;
|
|
23
23
|
}
|
|
24
24
|
const { page } = browser;
|
|
25
|
-
var { model } = await (0, headless_model_1.headlessModel)({ domain, model, id });
|
|
25
|
+
var { model } = await (0, headless_model_1.headlessModel)({ domain, model, id }, draft);
|
|
26
26
|
const grf = await page.evaluate(async (model, data, orientation, mirror, upsideDown) => {
|
|
27
27
|
//@ts-ignore
|
|
28
28
|
let s = createScene(model);
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"label-command.js","sourceRoot":"","sources":["../../server/controllers/label-command.ts"],"names":[],"mappings":";AAAA;;GAEG;;;AAEH,uEAA2D;AAC3D,qDAAgD;AAEhD;;;;;;;;GAQG;AACI,MAAM,YAAY,GAAG,KAAK,EAAE,EAAE,EAAE,EAAE,KAAK,EAAE,IAAI,EAAE,WAAW,EAAE,MAAM,GAAG,KAAK,EAAE,UAAU,GAAG,KAAK,EAAE,OAAO,EAAE,EAAE,EAAE;
|
|
1
|
+
{"version":3,"file":"label-command.js","sourceRoot":"","sources":["../../server/controllers/label-command.ts"],"names":[],"mappings":";AAAA;;GAEG;;;AAEH,uEAA2D;AAC3D,qDAAgD;AAEhD;;;;;;;;GAQG;AACI,MAAM,YAAY,GAAG,KAAK,EAAE,EAAE,EAAE,EAAE,KAAK,EAAE,IAAI,EAAE,WAAW,EAAE,MAAM,GAAG,KAAK,EAAE,UAAU,GAAG,KAAK,EAAE,OAAO,EAAE,KAAK,GAAG,KAAK,EAAE,EAAE,EAAE;IACjI,MAAM,EAAE,MAAM,EAAE,GAAG,OAAO,CAAC,KAAK,CAAA;IAEhC,MAAM,OAAO,GAAG,CAAC,MAAM,IAAA,yCAAe,GAAE,CAAC,OAAO,EAAE,CAAQ,CAAA;IAC1D,IAAI,CAAC,OAAO,EAAE;QACZ,OAAM;KACP;IAED,MAAM,EAAE,IAAI,EAAE,GAAG,OAAO,CAAA;IAExB,IAAI,EAAE,KAAK,EAAE,GAAG,MAAM,IAAA,8BAAa,EAAC,EAAE,MAAM,EAAE,KAAK,EAAE,EAAE,EAAE,EAAE,KAAK,CAAC,CAAA;IAEjE,MAAM,GAAG,GAAG,MAAM,IAAI,CAAC,QAAQ,CAC7B,KAAK,EAAE,KAAK,EAAE,IAAI,EAAE,WAAW,EAAE,MAAM,EAAE,UAAU,EAAE,EAAE;QACrD,YAAY;QACZ,IAAI,CAAC,GAAG,WAAW,CAAC,KAAK,CAAC,CAAA;QAC1B,IAAI,IAAI,EAAE;YACR,CAAC,CAAC,IAAI,GAAG,IAAI,CAAA;SACd;QACD,OAAO,IAAI,OAAO,CAAC,OAAO,CAAC,EAAE;YAC3B,aAAa;YACb,qBAAqB,CAAC,GAAG,EAAE;gBACzB,aAAa;gBACb,IAAI,GAAG,GAAG,cAAc,CAAC,CAAC,EAAE,KAAK,EAAE,WAAW,EAAE,MAAM,EAAE,UAAU,CAAC,CAAA;gBACnE,OAAO,CAAC,GAAG,CAAC,CAAA;gBACZ,aAAa;gBACb,cAAc,CAAC,WAAW,CAAC,CAAC,CAAC,MAAM,CAAC,CAAA;gBACpC,CAAC,CAAC,OAAO,EAAE,CAAA;YACb,CAAC,CAAC,CAAA;QACJ,CAAC,CAAC,CAAA;IACJ,CAAC,EACD,KAAK,EACL,IAAI,EACJ,WAAW,EACX,MAAM,EACN,UAAU,CACX,CAAA;IAED,IAAA,yCAAe,GAAE,CAAC,OAAO,CAAC,OAAO,CAAC,CAAA;IAElC,OAAO;;OAEF,GAAG;;IAEN,CAAA;AACJ,CAAC,CAAA;AA7CY,QAAA,YAAY,gBA6CxB","sourcesContent":["/*\n * Copyright © HatioLab Inc. All rights reserved.\n */\n\nimport { getHeadlessPool } from './headless-pool-for-label'\nimport { headlessModel } from './headless-model'\n\n/**\n * 라벨 출력\n *\n * @param {String} id 모델 ID\n * @param {Object} data 매핑할 데이터\n * @param {String} orientation (시계방향) N: 0, R: 90, I: 180, B: 270\n * @param {boolean} mirror 좌우반전\n * @param {boolean} upsideDown 상하반전\n */\nexport const labelcommand = async ({ id, model, data, orientation, mirror = false, upsideDown = false, context, draft = false }) => {\n const { domain } = context.state\n\n const browser = (await getHeadlessPool().acquire()) as any\n if (!browser) {\n return\n }\n\n const { page } = browser\n\n var { model } = await headlessModel({ domain, model, id }, draft)\n\n const grf = await page.evaluate(\n async (model, data, orientation, mirror, upsideDown) => {\n //@ts-ignore\n let s = createScene(model)\n if (data) {\n s.data = data\n }\n return new Promise(resolve => {\n // @ts-ignore\n requestAnimationFrame(() => {\n // @ts-ignore\n let grf = imageDataToGrf(s, model, orientation, mirror, upsideDown)\n resolve(grf)\n // @ts-ignore\n sceneContainer.removeChild(s.target)\n s.dispose()\n })\n })\n },\n model,\n data,\n orientation,\n mirror,\n upsideDown\n )\n\n getHeadlessPool().release(browser)\n\n return `\n^XA\n^GFA,${grf}\n^FS\n^XZ`\n}\n"]}
|
|
@@ -7,14 +7,14 @@ const headless_model_1 = require("./headless-model");
|
|
|
7
7
|
const protocol = 'http';
|
|
8
8
|
const host = 'localhost';
|
|
9
9
|
const path = '/internal-board-service-view';
|
|
10
|
-
const screenshot = async ({ id = '', model = null, data = null, width: w = 0, height: h = 0, options = { encoding: 'base64' }, isThumbnail = false, context = {} } = {}) => {
|
|
10
|
+
const screenshot = async ({ id = '', model = null, data = null, width: w = 0, height: h = 0, options = { encoding: 'base64' }, isThumbnail = false, context = {}, draft = false } = {}) => {
|
|
11
11
|
const browser = (await (0, headless_pool_for_board_1.getHeadlessPool)().acquire());
|
|
12
12
|
var screenshot = null;
|
|
13
13
|
if (!browser) {
|
|
14
14
|
return;
|
|
15
15
|
}
|
|
16
16
|
const { domain, user } = context.state;
|
|
17
|
-
var { model, base } = await (0, headless_model_1.headlessModel)({ domain, id, model });
|
|
17
|
+
var { model, base } = await (0, headless_model_1.headlessModel)({ domain, id, model }, draft);
|
|
18
18
|
const [fontsToUse, fontStyles] = await (0, fonts_1.fonts)(domain);
|
|
19
19
|
model.fonts = fontsToUse;
|
|
20
20
|
model.fontStyles = fontStyles;
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"screenshot.js","sourceRoot":"","sources":["../../server/controllers/screenshot.ts"],"names":[],"mappings":";;;AAAA,mCAA+B;AAC/B,uEAA2D;AAC3D,qDAAgD;AAEhD,MAAM,QAAQ,GAAG,MAAM,CAAA;AACvB,MAAM,IAAI,GAAG,WAAW,CAAA;AACxB,MAAM,IAAI,GAAG,8BAA8B,CAAA;AAEpC,MAAM,UAAU,GAAG,KAAK,EAAE,EAC/B,EAAE,GAAG,EAAE,EACP,KAAK,GAAG,IAAI,EACZ,IAAI,GAAG,IAAI,EACX,KAAK,EAAE,CAAC,GAAG,CAAC,EACZ,MAAM,EAAE,CAAC,GAAG,CAAC,EACb,OAAO,GAAG,EAAE,QAAQ,EAAE,QAAQ,EAAS,EACvC,WAAW,GAAG,KAAK,EACnB,OAAO,GAAG,EAAS,
|
|
1
|
+
{"version":3,"file":"screenshot.js","sourceRoot":"","sources":["../../server/controllers/screenshot.ts"],"names":[],"mappings":"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","sourcesContent":["import { fonts } from './fonts'\nimport { getHeadlessPool } from './headless-pool-for-board'\nimport { headlessModel } from './headless-model'\n\nconst protocol = 'http'\nconst host = 'localhost'\nconst path = '/internal-board-service-view'\n\nexport const screenshot = async ({\n id = '',\n model = null,\n data = null,\n width: w = 0,\n height: h = 0,\n options = { encoding: 'base64' } as any,\n isThumbnail = false,\n context = {} as any,\n draft = false\n} = {}) => {\n const browser = (await getHeadlessPool().acquire()) as any\n var screenshot = null\n\n if (!browser) {\n return\n }\n const { domain, user } = context.state\n\n var { model, base } = await headlessModel({ domain, id, model }, draft)\n const [fontsToUse, fontStyles] = await fonts(domain)\n\n model.fonts = fontsToUse\n model.fontStyles = fontStyles\n\n var { width, height } = model\n\n if (isThumbnail) {\n var widthRatio = 400 / width,\n heightRatio = 300 / height\n var ratio = widthRatio < heightRatio ? widthRatio : heightRatio\n width = width * ratio\n height = height * ratio\n }\n width = Math.floor(w || Number(width))\n height = Math.floor(h || Number(height))\n\n const port = process.env.PORT ? `:${process.env.PORT}` : ''\n const url = `${protocol}://${host}${port}${path}`\n\n var page = await browser.newPage()\n\n try {\n /* @remember-me width, height should be a integer */\n await page.setViewport({ width, height })\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 token = await user?.sign() // TODO improve performance\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 await page.goto(url)\n\n await page.evaluate(async data => {\n if (data) {\n // @ts-ignore\n s.data = data\n }\n\n // data 주입 후 강제 지연시킴.\n return new Promise(resolve => {\n // @ts-ignore\n requestAnimationFrame(() => resolve())\n })\n }, data)\n\n screenshot = await page.screenshot(options)\n } catch (error) {\n console.log(error)\n } finally {\n page.close()\n getHeadlessPool().release(browser)\n }\n\n return screenshot\n}\n"]}
|
|
@@ -21,6 +21,7 @@ exports.boardPrintRouter.post('/print', async (context, next) => {
|
|
|
21
21
|
context.type = 'text/plain';
|
|
22
22
|
context.body = await (0, print_1.printDirect)(params.printerId, params.data);
|
|
23
23
|
});
|
|
24
|
+
// for webpage scrap => zpl image print(grf format) command for released version board
|
|
24
25
|
exports.boardPrintRouter.get('/print-label/:id', async (context, next) => {
|
|
25
26
|
const { id } = context.params;
|
|
26
27
|
let data = Object.keys(context.query).length ? context.query : null;
|
|
@@ -32,4 +33,16 @@ exports.boardPrintRouter.get('/print-label/:id', async (context, next) => {
|
|
|
32
33
|
// TODO: 동기화
|
|
33
34
|
context.body = (0, print_1.printDirect)(data.printerId, grf);
|
|
34
35
|
});
|
|
36
|
+
// for webpage scrap => zpl image print(grf format) command for draft version board
|
|
37
|
+
exports.boardPrintRouter.get('/print-label-draft/:id', async (context, next) => {
|
|
38
|
+
const { id } = context.params;
|
|
39
|
+
let data = Object.keys(context.query).length ? context.query : null;
|
|
40
|
+
let orientation = data && data.orientation;
|
|
41
|
+
let mirror = data && data.mirror;
|
|
42
|
+
let upsideDown = data && data.upsideDown;
|
|
43
|
+
let grf = await (0, label_command_1.labelcommand)({ id, data, orientation, mirror, upsideDown, context, draft: true });
|
|
44
|
+
context.type = 'text/plain';
|
|
45
|
+
// TODO: 동기화
|
|
46
|
+
context.body = (0, print_1.printDirect)(data.printerId, grf);
|
|
47
|
+
});
|
|
35
48
|
//# sourceMappingURL=board-print-router.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"board-print-router.js","sourceRoot":"","sources":["../../server/routers/board-print-router.ts"],"names":[],"mappings":";;;;AAAA,oEAA+B;AAE/B,gEAA2D;AAC3D,gDAAkD;AAErC,QAAA,gBAAgB,GAAG,IAAI,oBAAM,EAAE,CAAA;AAE5C;;GAEG;AACH,wBAAgB,CAAC,GAAG,CAAC,QAAQ,EAAE,KAAK,EAAE,OAAO,EAAE,IAAI,EAAE,EAAE;IACrD,IAAI,IAAI,GAAG,MAAM,CAAC,IAAI,CAAC,OAAO,CAAC,KAAK,CAAC,CAAC,MAAM,CAAC,CAAC,CAAC,OAAO,CAAC,KAAK,CAAC,CAAC,CAAC,IAAI,CAAA;IAEnE,OAAO,CAAC,IAAI,GAAG,MAAM,IAAA,mBAAW,EAAC,IAAI,CAAC,SAAS,EAAE,IAAI,CAAC,IAAI,CAAC,CAAA;AAC7D,CAAC,CAAC,CAAA;AAEF;;GAEG;AACH,wBAAgB,CAAC,IAAI,CAAC,QAAQ,EAAE,KAAK,EAAE,OAAO,EAAE,IAAI,EAAE,EAAE;IACtD,IAAI,MAAM,GAAG,OAAO,CAAC,OAAO,CAAC,IAAI,CAAA;IAEjC,OAAO,CAAC,IAAI,GAAG,YAAY,CAAA;IAC3B,OAAO,CAAC,IAAI,GAAG,MAAM,IAAA,mBAAW,EAAC,MAAM,CAAC,SAAS,EAAE,MAAM,CAAC,IAAI,CAAC,CAAA;AACjE,CAAC,CAAC,CAAA;AAEF,wBAAgB,CAAC,GAAG,CAAC,kBAAkB,EAAE,KAAK,EAAE,OAAO,EAAE,IAAI,EAAE,EAAE;IAC/D,MAAM,EAAE,EAAE,EAAE,GAAG,OAAO,CAAC,MAAM,CAAA;IAC7B,IAAI,IAAI,GAAG,MAAM,CAAC,IAAI,CAAC,OAAO,CAAC,KAAK,CAAC,CAAC,MAAM,CAAC,CAAC,CAAC,OAAO,CAAC,KAAK,CAAC,CAAC,CAAC,IAAI,CAAA;IAEnE,IAAI,WAAW,GAAG,IAAI,IAAI,IAAI,CAAC,WAAW,CAAA;IAC1C,IAAI,MAAM,GAAG,IAAI,IAAI,IAAI,CAAC,MAAM,CAAA;IAChC,IAAI,UAAU,GAAG,IAAI,IAAI,IAAI,CAAC,UAAU,CAAA;IACxC,IAAI,GAAG,GAAG,MAAM,IAAA,4BAAY,EAAC,EAAE,EAAE,EAAE,IAAI,EAAE,WAAW,EAAE,MAAM,EAAE,UAAU,EAAE,OAAO,EAAS,CAAC,CAAA;IAE3F,OAAO,CAAC,IAAI,GAAG,YAAY,CAAA;IAC3B,YAAY;IACZ,OAAO,CAAC,IAAI,GAAG,IAAA,mBAAW,EAAC,IAAI,CAAC,SAAS,EAAE,GAAG,CAAC,CAAA;AACjD,CAAC,CAAC,CAAA","sourcesContent":["import Router from 'koa-router'\n\nimport { labelcommand } from '../controllers/label-command'\nimport { printDirect } from '../controllers/print'\n\nexport const boardPrintRouter = new Router()\n\n/**\n * ?printerId=printer_id&data=grf_string\n */\nboardPrintRouter.get('/print', async (context, next) => {\n let data = Object.keys(context.query).length ? context.query : null\n\n context.body = await printDirect(data.printerId, data.data)\n})\n\n/**\n * { printerId: 'printer driver ID', data: 'grf string' }\n */\nboardPrintRouter.post('/print', async (context, next) => {\n let params = context.request.body\n\n context.type = 'text/plain'\n context.body = await printDirect(params.printerId, params.data)\n})\n\nboardPrintRouter.get('/print-label/:id', async (context, next) => {\n const { id } = context.params\n let data = Object.keys(context.query).length ? context.query : null\n\n let orientation = data && data.orientation\n let mirror = data && data.mirror\n let upsideDown = data && data.upsideDown\n let grf = await labelcommand({ id, data, orientation, mirror, upsideDown, context } as any)\n\n context.type = 'text/plain'\n // TODO: 동기화\n context.body = printDirect(data.printerId, grf)\n})\n"]}
|
|
1
|
+
{"version":3,"file":"board-print-router.js","sourceRoot":"","sources":["../../server/routers/board-print-router.ts"],"names":[],"mappings":"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","sourcesContent":["import Router from 'koa-router'\n\nimport { labelcommand } from '../controllers/label-command'\nimport { printDirect } from '../controllers/print'\n\nexport const boardPrintRouter = new Router()\n\n/**\n * ?printerId=printer_id&data=grf_string\n */\nboardPrintRouter.get('/print', async (context, next) => {\n let data = Object.keys(context.query).length ? context.query : null\n\n context.body = await printDirect(data.printerId, data.data)\n})\n\n/**\n * { printerId: 'printer driver ID', data: 'grf string' }\n */\nboardPrintRouter.post('/print', async (context, next) => {\n let params = context.request.body\n\n context.type = 'text/plain'\n context.body = await printDirect(params.printerId, params.data)\n})\n\n// for webpage scrap => zpl image print(grf format) command for released version board\nboardPrintRouter.get('/print-label/:id', async (context, next) => {\n const { id } = context.params\n let data = Object.keys(context.query).length ? context.query : null\n\n let orientation = data && data.orientation\n let mirror = data && data.mirror\n let upsideDown = data && data.upsideDown\n let grf = await labelcommand({ id, data, orientation, mirror, upsideDown, context } as any)\n\n context.type = 'text/plain'\n // TODO: 동기화\n context.body = printDirect(data.printerId, grf)\n})\n\n// for webpage scrap => zpl image print(grf format) command for draft version board\nboardPrintRouter.get('/print-label-draft/:id', async (context, next) => {\n const { id } = context.params\n let data = Object.keys(context.query).length ? context.query : null\n\n let orientation = data && data.orientation\n let mirror = data && data.mirror\n let upsideDown = data && data.upsideDown\n let grf = await labelcommand({ id, data, orientation, mirror, upsideDown, context, draft: true } as any)\n\n context.type = 'text/plain'\n // TODO: 동기화\n context.body = printDirect(data.printerId, grf)\n})\n"]}
|
|
@@ -225,7 +225,7 @@ exports.standaloneBoardServiceRouter.get('/board/pdf/:id', async (context, next)
|
|
|
225
225
|
context.set('Content-Disposition', (0, content_disposition_1.default)(`${board.name}.pdf`));
|
|
226
226
|
context.body = result;
|
|
227
227
|
});
|
|
228
|
-
// for webpage scrap => zpl image print(grf format) command
|
|
228
|
+
// for webpage scrap => zpl image print(grf format) command for released version board
|
|
229
229
|
exports.standaloneBoardServiceRouter.get('/label-command/:id', async (context, next) => {
|
|
230
230
|
const { id } = context.params;
|
|
231
231
|
const data = context.query;
|
|
@@ -236,4 +236,15 @@ exports.standaloneBoardServiceRouter.get('/label-command/:id', async (context, n
|
|
|
236
236
|
context.type = 'text/plain';
|
|
237
237
|
context.body = await (0, label_command_1.labelcommand)({ id, data, orientation, mirror, upsideDown, context });
|
|
238
238
|
});
|
|
239
|
+
// for webpage scrap => zpl image print(grf format) command for draft version board
|
|
240
|
+
exports.standaloneBoardServiceRouter.get('/label-command-draft/:id', async (context, next) => {
|
|
241
|
+
const { id } = context.params;
|
|
242
|
+
const data = context.query;
|
|
243
|
+
delete data.access_token;
|
|
244
|
+
const orientation = data && data.orientation;
|
|
245
|
+
const mirror = data && data.mirror;
|
|
246
|
+
const upsideDown = data && data.upsideDown;
|
|
247
|
+
context.type = 'text/plain';
|
|
248
|
+
context.body = await (0, label_command_1.labelcommand)({ id, data, orientation, mirror, upsideDown, context, draft: true });
|
|
249
|
+
});
|
|
239
250
|
//# sourceMappingURL=standalone-board-service-router.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"standalone-board-service-router.js","sourceRoot":"","sources":["../../server/routers/standalone-board-service-router.ts"],"names":[],"mappings":"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","sourcesContent":["import contentDisposition from 'content-disposition'\nimport Router from 'koa-router'\n\nimport { User, setAccessTokenCookie } from '@things-factory/auth-base'\nimport { getRepository } from '@things-factory/shell'\n\nimport { fonts } from '../controllers/fonts'\nimport { headlessModel } from '../controllers/headless-model'\nimport { headlessPlaylist } from '../controllers/headless-playlist'\nimport { labelcommand } from '../controllers/label-command'\nimport { pdf } from '../controllers/pdf'\nimport { screenshot } from '../controllers/screenshot'\nimport { Board } from '../service/board/board'\nimport { BoardTemplate } from '../service/board-template/board-template'\n\nexport const standaloneBoardServiceRouter = new Router()\n\nfunction parseQuery(query) {\n for (const key in query) {\n if (query.hasOwnProperty(key)) {\n try {\n query[key] = JSON.parse(query[key])\n } catch (error) {\n // do nothing\n }\n }\n }\n\n return query\n}\n\n// for board headless-full\nstandaloneBoardServiceRouter.get('/headless-full/:id', async (context, next) => {\n const { domain, user } = context.state\n\n if (!(await User.hasPrivilege('query', 'board', domain, user))) {\n context.status = 403\n return\n }\n\n const { id } = context.params\n\n const { model, base } = await headlessModel({ domain, id })\n const [fontsToUse, fontStyles] = await fonts(domain)\n\n model.fonts = fontsToUse\n model.fontStyles = fontStyles\n\n setAccessTokenCookie(context, await user.sign({ domain }))\n\n const data = parseQuery({ ...context.query })\n delete data.access_token\n\n await context.render('internal-board-full-feature-view', { id, model, data, base })\n})\n\n// for board headless-full-by-name\nstandaloneBoardServiceRouter.get('/headless-full-by-name/:name', async (context, next) => {\n const { domain, user } = context.state\n\n if (!(await User.hasPrivilege('query', 'board', domain, user))) {\n context.status = 403\n return\n }\n\n const { name } = context.params\n\n const { model, base, board } = await headlessModel({ domain, name })\n const [fontsToUse, fontStyles] = await fonts(domain)\n\n model.fonts = fontsToUse\n model.fontStyles = fontStyles\n\n setAccessTokenCookie(context, await user.sign({ domain }))\n\n const data = parseQuery({ ...context.query })\n delete data.access_token\n\n await context.render('internal-board-full-feature-view', { id: board?.id, model, data, base })\n})\n\n// for board headless\nstandaloneBoardServiceRouter.get('/headless/:id', async (context, next) => {\n const { domain, user } = context.state\n\n if (!(await User.hasPrivilege('query', 'board', domain, user))) {\n context.status = 403\n return\n }\n\n const { id } = context.params\n\n const { model, base } = await headlessModel({ domain, id })\n const [fontsToUse, fontStyles] = await fonts(domain)\n\n model.fonts = fontsToUse\n model.fontStyles = fontStyles\n\n setAccessTokenCookie(context, await user.sign({ domain }))\n\n const data = parseQuery({ ...context.query })\n delete data.access_token\n\n await context.render('internal-board-service-view', { id, model, data, base })\n})\n\n// for board headless by name\nstandaloneBoardServiceRouter.get('/headless-by-name/:name', async (context, next) => {\n const { domain, user } = context.state\n\n if (!(await User.hasPrivilege('query', 'board', domain, user))) {\n context.status = 403\n return\n }\n\n const { name } = context.params\n\n const { model, base, board } = await headlessModel({ domain, name })\n const [fontsToUse, fontStyles] = await fonts(domain)\n\n model.fonts = fontsToUse\n model.fontStyles = fontStyles\n\n setAccessTokenCookie(context, await user.sign({ domain }))\n\n const data = parseQuery({ ...context.query })\n delete data.access_token\n\n await context.render('internal-board-service-view', { id: board?.id, model, data, base })\n})\n\n// for board player\nstandaloneBoardServiceRouter.get('/headless-player/:id', async (context, next) => {\n const { domain, user } = context.state\n\n if (!(await User.hasPrivilege('query', 'board', domain, user))) {\n context.status = 403\n return\n }\n\n const { id } = context.params\n\n const { playGroup, base } = await headlessPlaylist({ domain, id })\n const [fontsToUse, fontStyles] = await fonts(domain)\n\n setAccessTokenCookie(context, await user.sign({ domain }))\n\n const data = parseQuery({ ...context.query })\n delete data.access_token\n\n await context.render('internal-board-player-view', {\n id,\n model: {\n boards: playGroup?.boards,\n fonts: fontsToUse,\n fontStyles: fontStyles\n },\n data,\n base\n })\n})\n\n// for board player by name\nstandaloneBoardServiceRouter.get('/headless-player-by-name/:name', async (context, next) => {\n const { domain, user } = context.state\n\n if (!(await User.hasPrivilege('query', 'board', domain, user))) {\n context.status = 403\n return\n }\n\n const { name } = context.params\n\n const { playGroup, base } = await headlessPlaylist({ domain, name })\n const [fontsToUse, fontStyles] = await fonts(domain)\n\n setAccessTokenCookie(context, await user.sign({ domain }))\n\n const data = parseQuery({ ...context.query })\n delete data.access_token\n\n await context.render('internal-board-player-view', {\n id: playGroup?.id,\n model: {\n boards: playGroup?.boards,\n fonts: fontsToUse,\n fontStyles: fontStyles\n },\n data,\n base\n })\n})\n\n// for board thumbnail\nstandaloneBoardServiceRouter.get('/thumbnail/:id', async (context, next) => {\n const { domain, user } = context.state\n\n if (!(await User.hasPrivilege('query', 'board', domain, user))) {\n context.status = 403\n return\n }\n\n const { id } = context.params\n\n const { name, thumbnail } = (await getRepository(Board).findOneBy({ domain: { id: domain.id }, id })) || {}\n\n if (thumbnail) {\n const index = thumbnail.indexOf(';base64,')\n const base64 = thumbnail.substring(index + 8)\n const buffer = Buffer.from(base64, 'base64')\n\n context.type = 'image/png'\n context.set('Content-Disposition', contentDisposition(`thumbnail-${name}.png`))\n context.body = buffer\n } else {\n context.throw(404, 'thumbnail not found')\n }\n})\n\n// for board-template thumbnail\nstandaloneBoardServiceRouter.get('/board-template-thumbnail/:id', async (context, next) => {\n const { domain, user } = context.state\n\n if (!(await User.hasPrivilege('query', 'board-template', domain, user))) {\n context.status = 403\n return\n }\n\n const { id } = context.params\n\n const { name, thumbnail } = (await getRepository(BoardTemplate).findOneBy({ domain: { id: domain.id }, id })) || {}\n\n if (thumbnail) {\n const index = thumbnail.indexOf(';base64,')\n const base64 = thumbnail.substring(index + 8)\n const buffer = Buffer.from(base64, 'base64')\n\n context.type = 'image/png'\n context.set('Content-Disposition', contentDisposition(`thumbnail-${name}.png`))\n context.body = buffer\n } else {\n context.throw(404, 'thumbnail not found')\n }\n})\n\n// for webpage scrap\nstandaloneBoardServiceRouter.get('/screenshot/:id', async (context, next) => {\n const { domain, user } = context.state\n\n if (!(await User.hasPrivilege('query', 'board', domain, user))) {\n context.status = 403\n return\n }\n\n const { id } = context.params\n\n const { model, board } = await headlessModel({ domain, id })\n\n const data = parseQuery({ ...context.query })\n delete data.access_token\n\n context.type = 'image/png'\n context.set('Content-Disposition', contentDisposition(`${board.name}.png`))\n context.body = await screenshot({ id, model, data, options: { encoding: 'binary', type: 'png' }, context })\n})\n\n// for webpage scrap\nstandaloneBoardServiceRouter.get('/board/pdf/:id', async (context, next) => {\n const { domain, user } = context.state\n\n if (!(await User.hasPrivilege('query', 'board', domain, user))) {\n context.status = 403\n return\n }\n\n const { id } = context.params\n\n const { model, board } = await headlessModel({ domain, id })\n\n const data = parseQuery({ ...context.query })\n delete data.access_token\n\n const result = await pdf({\n id,\n model,\n data,\n options: {\n format: 'A4'\n },\n context\n })\n\n context.type = 'application/pdf'\n context.set('Content-Disposition', contentDisposition(`${board.name}.pdf`))\n context.body = result\n})\n\n// for webpage scrap => zpl image print(grf format) command\nstandaloneBoardServiceRouter.get('/label-command/:id', async (context, next) => {\n const { id } = context.params\n\n const data = context.query\n delete data.access_token\n\n const orientation = data && data.orientation\n const mirror = data && data.mirror\n const upsideDown = data && data.upsideDown\n\n context.type = 'text/plain'\n context.body = await labelcommand({ id, data, orientation, mirror, upsideDown, context } as any)\n})\n"]}
|
|
1
|
+
{"version":3,"file":"standalone-board-service-router.js","sourceRoot":"","sources":["../../server/routers/standalone-board-service-router.ts"],"names":[],"mappings":"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","sourcesContent":["import contentDisposition from 'content-disposition'\nimport Router from 'koa-router'\n\nimport { User, setAccessTokenCookie } from '@things-factory/auth-base'\nimport { getRepository } from '@things-factory/shell'\n\nimport { fonts } from '../controllers/fonts'\nimport { headlessModel } from '../controllers/headless-model'\nimport { headlessPlaylist } from '../controllers/headless-playlist'\nimport { labelcommand } from '../controllers/label-command'\nimport { pdf } from '../controllers/pdf'\nimport { screenshot } from '../controllers/screenshot'\nimport { Board } from '../service/board/board'\nimport { BoardTemplate } from '../service/board-template/board-template'\n\nexport const standaloneBoardServiceRouter = new Router()\n\nfunction parseQuery(query) {\n for (const key in query) {\n if (query.hasOwnProperty(key)) {\n try {\n query[key] = JSON.parse(query[key])\n } catch (error) {\n // do nothing\n }\n }\n }\n\n return query\n}\n\n// for board headless-full\nstandaloneBoardServiceRouter.get('/headless-full/:id', async (context, next) => {\n const { domain, user } = context.state\n\n if (!(await User.hasPrivilege('query', 'board', domain, user))) {\n context.status = 403\n return\n }\n\n const { id } = context.params\n\n const { model, base } = await headlessModel({ domain, id })\n const [fontsToUse, fontStyles] = await fonts(domain)\n\n model.fonts = fontsToUse\n model.fontStyles = fontStyles\n\n setAccessTokenCookie(context, await user.sign({ domain }))\n\n const data = parseQuery({ ...context.query })\n delete data.access_token\n\n await context.render('internal-board-full-feature-view', { id, model, data, base })\n})\n\n// for board headless-full-by-name\nstandaloneBoardServiceRouter.get('/headless-full-by-name/:name', async (context, next) => {\n const { domain, user } = context.state\n\n if (!(await User.hasPrivilege('query', 'board', domain, user))) {\n context.status = 403\n return\n }\n\n const { name } = context.params\n\n const { model, base, board } = await headlessModel({ domain, name })\n const [fontsToUse, fontStyles] = await fonts(domain)\n\n model.fonts = fontsToUse\n model.fontStyles = fontStyles\n\n setAccessTokenCookie(context, await user.sign({ domain }))\n\n const data = parseQuery({ ...context.query })\n delete data.access_token\n\n await context.render('internal-board-full-feature-view', { id: board?.id, model, data, base })\n})\n\n// for board headless\nstandaloneBoardServiceRouter.get('/headless/:id', async (context, next) => {\n const { domain, user } = context.state\n\n if (!(await User.hasPrivilege('query', 'board', domain, user))) {\n context.status = 403\n return\n }\n\n const { id } = context.params\n\n const { model, base } = await headlessModel({ domain, id })\n const [fontsToUse, fontStyles] = await fonts(domain)\n\n model.fonts = fontsToUse\n model.fontStyles = fontStyles\n\n setAccessTokenCookie(context, await user.sign({ domain }))\n\n const data = parseQuery({ ...context.query })\n delete data.access_token\n\n await context.render('internal-board-service-view', { id, model, data, base })\n})\n\n// for board headless by name\nstandaloneBoardServiceRouter.get('/headless-by-name/:name', async (context, next) => {\n const { domain, user } = context.state\n\n if (!(await User.hasPrivilege('query', 'board', domain, user))) {\n context.status = 403\n return\n }\n\n const { name } = context.params\n\n const { model, base, board } = await headlessModel({ domain, name })\n const [fontsToUse, fontStyles] = await fonts(domain)\n\n model.fonts = fontsToUse\n model.fontStyles = fontStyles\n\n setAccessTokenCookie(context, await user.sign({ domain }))\n\n const data = parseQuery({ ...context.query })\n delete data.access_token\n\n await context.render('internal-board-service-view', { id: board?.id, model, data, base })\n})\n\n// for board player\nstandaloneBoardServiceRouter.get('/headless-player/:id', async (context, next) => {\n const { domain, user } = context.state\n\n if (!(await User.hasPrivilege('query', 'board', domain, user))) {\n context.status = 403\n return\n }\n\n const { id } = context.params\n\n const { playGroup, base } = await headlessPlaylist({ domain, id })\n const [fontsToUse, fontStyles] = await fonts(domain)\n\n setAccessTokenCookie(context, await user.sign({ domain }))\n\n const data = parseQuery({ ...context.query })\n delete data.access_token\n\n await context.render('internal-board-player-view', {\n id,\n model: {\n boards: playGroup?.boards,\n fonts: fontsToUse,\n fontStyles: fontStyles\n },\n data,\n base\n })\n})\n\n// for board player by name\nstandaloneBoardServiceRouter.get('/headless-player-by-name/:name', async (context, next) => {\n const { domain, user } = context.state\n\n if (!(await User.hasPrivilege('query', 'board', domain, user))) {\n context.status = 403\n return\n }\n\n const { name } = context.params\n\n const { playGroup, base } = await headlessPlaylist({ domain, name })\n const [fontsToUse, fontStyles] = await fonts(domain)\n\n setAccessTokenCookie(context, await user.sign({ domain }))\n\n const data = parseQuery({ ...context.query })\n delete data.access_token\n\n await context.render('internal-board-player-view', {\n id: playGroup?.id,\n model: {\n boards: playGroup?.boards,\n fonts: fontsToUse,\n fontStyles: fontStyles\n },\n data,\n base\n })\n})\n\n// for board thumbnail\nstandaloneBoardServiceRouter.get('/thumbnail/:id', async (context, next) => {\n const { domain, user } = context.state\n\n if (!(await User.hasPrivilege('query', 'board', domain, user))) {\n context.status = 403\n return\n }\n\n const { id } = context.params\n\n const { name, thumbnail } = (await getRepository(Board).findOneBy({ domain: { id: domain.id }, id })) || {}\n\n if (thumbnail) {\n const index = thumbnail.indexOf(';base64,')\n const base64 = thumbnail.substring(index + 8)\n const buffer = Buffer.from(base64, 'base64')\n\n context.type = 'image/png'\n context.set('Content-Disposition', contentDisposition(`thumbnail-${name}.png`))\n context.body = buffer\n } else {\n context.throw(404, 'thumbnail not found')\n }\n})\n\n// for board-template thumbnail\nstandaloneBoardServiceRouter.get('/board-template-thumbnail/:id', async (context, next) => {\n const { domain, user } = context.state\n\n if (!(await User.hasPrivilege('query', 'board-template', domain, user))) {\n context.status = 403\n return\n }\n\n const { id } = context.params\n\n const { name, thumbnail } = (await getRepository(BoardTemplate).findOneBy({ domain: { id: domain.id }, id })) || {}\n\n if (thumbnail) {\n const index = thumbnail.indexOf(';base64,')\n const base64 = thumbnail.substring(index + 8)\n const buffer = Buffer.from(base64, 'base64')\n\n context.type = 'image/png'\n context.set('Content-Disposition', contentDisposition(`thumbnail-${name}.png`))\n context.body = buffer\n } else {\n context.throw(404, 'thumbnail not found')\n }\n})\n\n// for webpage scrap\nstandaloneBoardServiceRouter.get('/screenshot/:id', async (context, next) => {\n const { domain, user } = context.state\n\n if (!(await User.hasPrivilege('query', 'board', domain, user))) {\n context.status = 403\n return\n }\n\n const { id } = context.params\n\n const { model, board } = await headlessModel({ domain, id })\n\n const data = parseQuery({ ...context.query })\n delete data.access_token\n\n context.type = 'image/png'\n context.set('Content-Disposition', contentDisposition(`${board.name}.png`))\n context.body = await screenshot({ id, model, data, options: { encoding: 'binary', type: 'png' }, context })\n})\n\n// for webpage scrap\nstandaloneBoardServiceRouter.get('/board/pdf/:id', async (context, next) => {\n const { domain, user } = context.state\n\n if (!(await User.hasPrivilege('query', 'board', domain, user))) {\n context.status = 403\n return\n }\n\n const { id } = context.params\n\n const { model, board } = await headlessModel({ domain, id })\n\n const data = parseQuery({ ...context.query })\n delete data.access_token\n\n const result = await pdf({\n id,\n model,\n data,\n options: {\n format: 'A4'\n },\n context\n })\n\n context.type = 'application/pdf'\n context.set('Content-Disposition', contentDisposition(`${board.name}.pdf`))\n context.body = result\n})\n\n// for webpage scrap => zpl image print(grf format) command for released version board\nstandaloneBoardServiceRouter.get('/label-command/:id', async (context, next) => {\n const { id } = context.params\n\n const data = context.query\n delete data.access_token\n\n const orientation = data && data.orientation\n const mirror = data && data.mirror\n const upsideDown = data && data.upsideDown\n\n context.type = 'text/plain'\n context.body = await labelcommand({ id, data, orientation, mirror, upsideDown, context } as any)\n})\n\n// for webpage scrap => zpl image print(grf format) command for draft version board\nstandaloneBoardServiceRouter.get('/label-command-draft/:id', async (context, next) => {\n const { id } = context.params\n\n const data = context.query\n delete data.access_token\n\n const orientation = data && data.orientation\n const mirror = data && data.mirror\n const upsideDown = data && data.upsideDown\n\n context.type = 'text/plain'\n context.body = await labelcommand({ id, data, orientation, mirror, upsideDown, context, draft: true } as any)\n})\n"]}
|
|
@@ -3,7 +3,7 @@ Object.defineProperty(exports, "__esModule", { value: true });
|
|
|
3
3
|
exports.BoardSubscription = void 0;
|
|
4
4
|
const tslib_1 = require("tslib");
|
|
5
5
|
const type_graphql_1 = require("type-graphql");
|
|
6
|
-
const
|
|
6
|
+
const graphql_yoga_1 = require("graphql-yoga");
|
|
7
7
|
const shell_1 = require("@things-factory/shell");
|
|
8
8
|
const board_1 = require("./board");
|
|
9
9
|
let BoardSubscription = class BoardSubscription {
|
|
@@ -13,7 +13,7 @@ let BoardSubscription = class BoardSubscription {
|
|
|
13
13
|
};
|
|
14
14
|
tslib_1.__decorate([
|
|
15
15
|
(0, type_graphql_1.Subscription)({
|
|
16
|
-
subscribe: (
|
|
16
|
+
subscribe: ({ args, context, info }) => {
|
|
17
17
|
var _a;
|
|
18
18
|
const { domain, user } = context.state;
|
|
19
19
|
const { id } = args;
|
|
@@ -24,7 +24,7 @@ tslib_1.__decorate([
|
|
|
24
24
|
if (!((_a = user.domains) === null || _a === void 0 ? void 0 : _a.find(d => d.subdomain === subdomain)) && !process.superUserGranted(domain, user)) {
|
|
25
25
|
throw new Error(`domain(${subdomain}) is not working for user(${user.email}).`);
|
|
26
26
|
}
|
|
27
|
-
return (0,
|
|
27
|
+
return (0, graphql_yoga_1.pipe)(shell_1.pubsub.subscribe('board'), (0, graphql_yoga_1.filter)((payload) => {
|
|
28
28
|
const { domainId, id: boardId } = payload.board;
|
|
29
29
|
if (domainId !== domain.id) {
|
|
30
30
|
return false;
|
|
@@ -33,7 +33,7 @@ tslib_1.__decorate([
|
|
|
33
33
|
return false;
|
|
34
34
|
}
|
|
35
35
|
return true;
|
|
36
|
-
})
|
|
36
|
+
}));
|
|
37
37
|
}
|
|
38
38
|
}),
|
|
39
39
|
tslib_1.__param(0, (0, type_graphql_1.Root)()),
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"board-subscription.js","sourceRoot":"","sources":["../../../server/service/board/board-subscription.ts"],"names":[],"mappings":";;;;AAAA,+CAAgE;AAChE
|
|
1
|
+
{"version":3,"file":"board-subscription.js","sourceRoot":"","sources":["../../../server/service/board/board-subscription.ts"],"names":[],"mappings":";;;;AAAA,+CAAgE;AAChE,+CAA2C;AAC3C,iDAA8C;AAC9C,mCAA+B;AAGxB,IAAM,iBAAiB,GAAvB,MAAM,iBAAiB;IAiC5B,KAAK,CAAS,OAAyB,EAAa,EAAU;QAC5D,OAAO,OAAO,CAAC,KAAK,CAAA;IACtB,CAAC;CACF,CAAA;AAnCC;IAAC,IAAA,2BAAY,EAAC;QACZ,SAAS,EAAE,CAAC,EAAE,IAAI,EAAE,OAAO,EAAE,IAAI,EAAE,EAAE,EAAE;;YACrC,MAAM,EAAE,MAAM,EAAE,IAAI,EAAE,GAAG,OAAO,CAAC,KAAK,CAAA;YACtC,MAAM,EAAE,EAAE,EAAE,GAAG,IAAI,CAAA;YACnB,MAAM,SAAS,GAAG,MAAM,aAAN,MAAM,uBAAN,MAAM,CAAE,SAAS,CAAA;YAEnC,IAAI,CAAC,MAAM,EAAE;gBACX,MAAM,IAAI,KAAK,CAAC,iBAAiB,CAAC,CAAA;aACnC;YAED,IAAI,CAAC,CAAA,MAAA,IAAI,CAAC,OAAO,0CAAE,IAAI,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,SAAS,KAAK,SAAS,CAAC,CAAA,IAAI,CAAC,OAAO,CAAC,gBAAgB,CAAC,MAAM,EAAE,IAAI,CAAC,EAAE;gBAClG,MAAM,IAAI,KAAK,CAAC,UAAU,SAAS,6BAA6B,IAAI,CAAC,KAAK,IAAI,CAAC,CAAA;aAChF;YAED,OAAO,IAAA,mBAAI,EACT,cAAM,CAAC,SAAS,CAAC,OAAO,CAAC,EACzB,IAAA,qBAAM,EAAC,CAAC,OAAyB,EAAE,EAAE;gBACnC,MAAM,EAAE,QAAQ,EAAE,EAAE,EAAE,OAAO,EAAE,GAAG,OAAO,CAAC,KAAK,CAAA;gBAE/C,IAAI,QAAQ,KAAK,MAAM,CAAC,EAAE,EAAE;oBAC1B,OAAO,KAAK,CAAA;iBACb;gBAED,IAAI,EAAE,KAAK,OAAO,EAAE;oBAClB,OAAO,KAAK,CAAA;iBACb;gBAED,OAAO,IAAI,CAAA;YACb,CAAC,CAAC,CACH,CAAA;QACH,CAAC;KACF,CAAC;IACK,mBAAA,IAAA,mBAAI,GAAE,CAAA;IAA6B,mBAAA,IAAA,kBAAG,EAAC,IAAI,CAAC,CAAA;;;4CAAc,aAAK;8CAErE;AAnCU,iBAAiB;IAD7B,IAAA,uBAAQ,EAAC,aAAK,CAAC;GACH,iBAAiB,CAoC7B;AApCY,8CAAiB","sourcesContent":["import { Resolver, Subscription, Root, Arg } from 'type-graphql'\nimport { filter, pipe } from 'graphql-yoga'\nimport { pubsub } from '@things-factory/shell'\nimport { Board } from './board'\n\n@Resolver(Board)\nexport class BoardSubscription {\n @Subscription({\n subscribe: ({ args, context, info }) => {\n const { domain, user } = context.state\n const { id } = args\n const subdomain = domain?.subdomain\n\n if (!domain) {\n throw new Error('domain required')\n }\n\n if (!user.domains?.find(d => d.subdomain === subdomain) && !process.superUserGranted(domain, user)) {\n throw new Error(`domain(${subdomain}) is not working for user(${user.email}).`)\n }\n\n return pipe(\n pubsub.subscribe('board'),\n filter((payload: { board: Board }) => {\n const { domainId, id: boardId } = payload.board\n\n if (domainId !== domain.id) {\n return false\n }\n\n if (id !== boardId) {\n return false\n }\n\n return true\n })\n )\n }\n })\n board(@Root() payload: { board: Board }, @Arg('id') id: string): Board {\n return payload.board\n }\n}\n"]}
|
|
@@ -3,7 +3,7 @@ Object.defineProperty(exports, "__esModule", { value: true });
|
|
|
3
3
|
exports.PlayGroupSubscription = void 0;
|
|
4
4
|
const tslib_1 = require("tslib");
|
|
5
5
|
const type_graphql_1 = require("type-graphql");
|
|
6
|
-
const
|
|
6
|
+
const graphql_yoga_1 = require("graphql-yoga");
|
|
7
7
|
const shell_1 = require("@things-factory/shell");
|
|
8
8
|
const play_group_1 = require("./play-group");
|
|
9
9
|
let PlayGroupSubscription = class PlayGroupSubscription {
|
|
@@ -13,7 +13,7 @@ let PlayGroupSubscription = class PlayGroupSubscription {
|
|
|
13
13
|
};
|
|
14
14
|
tslib_1.__decorate([
|
|
15
15
|
(0, type_graphql_1.Subscription)({
|
|
16
|
-
subscribe: (
|
|
16
|
+
subscribe: ({ args, context, info }) => {
|
|
17
17
|
var _a;
|
|
18
18
|
const { domain, user } = context.state;
|
|
19
19
|
const { id } = args;
|
|
@@ -24,7 +24,7 @@ tslib_1.__decorate([
|
|
|
24
24
|
if (!((_a = user.domains) === null || _a === void 0 ? void 0 : _a.find(d => d.subdomain === subdomain)) && !process.superUserGranted(domain, user)) {
|
|
25
25
|
throw new Error(`domain(${subdomain}) is not working for user(${user.email}).`);
|
|
26
26
|
}
|
|
27
|
-
return (0,
|
|
27
|
+
return (0, graphql_yoga_1.pipe)(shell_1.pubsub.subscribe('play-group'), (0, graphql_yoga_1.filter)((payload) => {
|
|
28
28
|
const { id: playGroupId, domainId } = payload.playGroup;
|
|
29
29
|
if (domainId !== domain.id) {
|
|
30
30
|
return false;
|
|
@@ -33,7 +33,7 @@ tslib_1.__decorate([
|
|
|
33
33
|
return false;
|
|
34
34
|
}
|
|
35
35
|
return true;
|
|
36
|
-
})
|
|
36
|
+
}));
|
|
37
37
|
}
|
|
38
38
|
}),
|
|
39
39
|
tslib_1.__param(0, (0, type_graphql_1.Root)()),
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"play-group-subscription.js","sourceRoot":"","sources":["../../../server/service/play-group/play-group-subscription.ts"],"names":[],"mappings":";;;;AAAA,+CAAgE;AAChE
|
|
1
|
+
{"version":3,"file":"play-group-subscription.js","sourceRoot":"","sources":["../../../server/service/play-group/play-group-subscription.ts"],"names":[],"mappings":";;;;AAAA,+CAAgE;AAChE,+CAA2C;AAC3C,iDAA8C;AAC9C,6CAAwC;AAGjC,IAAM,qBAAqB,GAA3B,MAAM,qBAAqB;IAiChC,SAAS,CAAS,OAAiC,EAAa,EAAU;QACxE,OAAO,OAAO,CAAC,SAAS,CAAA;IAC1B,CAAC;CACF,CAAA;AAnCC;IAAC,IAAA,2BAAY,EAAC;QACZ,SAAS,EAAE,CAAC,EAAE,IAAI,EAAE,OAAO,EAAE,IAAI,EAAE,EAAE,EAAE;;YACrC,MAAM,EAAE,MAAM,EAAE,IAAI,EAAE,GAAG,OAAO,CAAC,KAAK,CAAA;YACtC,MAAM,EAAE,EAAE,EAAE,GAAG,IAAI,CAAA;YACnB,MAAM,SAAS,GAAG,MAAM,aAAN,MAAM,uBAAN,MAAM,CAAE,SAAS,CAAA;YAEnC,IAAI,CAAC,MAAM,EAAE;gBACX,MAAM,IAAI,KAAK,CAAC,iBAAiB,CAAC,CAAA;aACnC;YAED,IAAI,CAAC,CAAA,MAAA,IAAI,CAAC,OAAO,0CAAE,IAAI,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,SAAS,KAAK,SAAS,CAAC,CAAA,IAAI,CAAC,OAAO,CAAC,gBAAgB,CAAC,MAAM,EAAE,IAAI,CAAC,EAAE;gBAClG,MAAM,IAAI,KAAK,CAAC,UAAU,SAAS,6BAA6B,IAAI,CAAC,KAAK,IAAI,CAAC,CAAA;aAChF;YAED,OAAO,IAAA,mBAAI,EACT,cAAM,CAAC,SAAS,CAAC,YAAY,CAAC,EAC9B,IAAA,qBAAM,EAAC,CAAC,OAAiC,EAAE,EAAE;gBAC3C,MAAM,EAAE,EAAE,EAAE,WAAW,EAAE,QAAQ,EAAE,GAAG,OAAO,CAAC,SAAS,CAAA;gBAEvD,IAAI,QAAQ,KAAK,MAAM,CAAC,EAAE,EAAE;oBAC1B,OAAO,KAAK,CAAA;iBACb;gBAED,IAAI,EAAE,KAAK,WAAW,EAAE;oBACtB,OAAO,KAAK,CAAA;iBACb;gBAED,OAAO,IAAI,CAAA;YACb,CAAC,CAAC,CACH,CAAA;QACH,CAAC;KACF,CAAC;IACS,mBAAA,IAAA,mBAAI,GAAE,CAAA;IAAqC,mBAAA,IAAA,kBAAG,EAAC,IAAI,CAAC,CAAA;;;4CAAc,sBAAS;sDAErF;AAnCU,qBAAqB;IADjC,IAAA,uBAAQ,EAAC,sBAAS,CAAC;GACP,qBAAqB,CAoCjC;AApCY,sDAAqB","sourcesContent":["import { Resolver, Subscription, Root, Arg } from 'type-graphql'\nimport { filter, pipe } from 'graphql-yoga'\nimport { pubsub } from '@things-factory/shell'\nimport { PlayGroup } from './play-group'\n\n@Resolver(PlayGroup)\nexport class PlayGroupSubscription {\n @Subscription({\n subscribe: ({ args, context, info }) => {\n const { domain, user } = context.state\n const { id } = args\n const subdomain = domain?.subdomain\n\n if (!domain) {\n throw new Error('domain required')\n }\n\n if (!user.domains?.find(d => d.subdomain === subdomain) && !process.superUserGranted(domain, user)) {\n throw new Error(`domain(${subdomain}) is not working for user(${user.email}).`)\n }\n\n return pipe(\n pubsub.subscribe('play-group'),\n filter((payload: { playGroup: PlayGroup }) => {\n const { id: playGroupId, domainId } = payload.playGroup\n\n if (domainId !== domain.id) {\n return false\n }\n\n if (id !== playGroupId) {\n return false\n }\n\n return true\n })\n )\n }\n })\n playGroup(@Root() payload: { playGroup: PlayGroup }, @Arg('id') id: string): PlayGroup {\n return payload.playGroup\n }\n}\n"]}
|