@things-factory/reference-app 4.0.4 → 4.0.8
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/Dockerfile +1 -1
- package/attachments/03176f83-6c50-4850-ab43-e6765b259afd.png +0 -0
- package/attachments/2b963bee-3ca5-4a86-95b7-e557b7eba8eb.html +5695 -0
- package/attachments/4880d6fb-7045-4c50-bfb9-daf83ecf6cc1.png +0 -0
- package/attachments/5bcde766-32e5-4cdc-ad9b-9e0139c122f4.txt +673 -0
- package/attachments/6f9d5fd4-6546-40c6-90c0-0207233ad12f.json +145 -0
- package/attachments/a1aaa123-4c8d-485e-9975-5b5b4add6a30.png +0 -0
- package/attachments/b2331d78-f55d-4b9e-8aae-34f80c1252b3.jpeg +0 -0
- package/attachments/b9a3e2fd-fe83-4394-8fc8-66478443f65e.png +0 -0
- package/attachments/be3d2cd7-d236-45af-b512-4f141c8e2cfc.pptx +0 -0
- package/attachments/d211b356-1619-4f2b-9b10-ed46b4fd82de.png +0 -0
- package/attachments/d445e1a1-a048-49d7-96f2-284ac00fe96a.png +0 -0
- package/attachments/d462b12b-d519-4d6c-861a-f56d2494b135.png +0 -0
- package/attachments/f63986fb-bef5-4b55-a342-6fd4abf26739.png +0 -0
- package/client/bootstrap.js +30 -0
- package/client/components/camera-capturer.js +29 -2
- package/client/components/ocr-viewpart.js +94 -0
- package/client/menu.js +1 -1
- package/client/pages/context-menu-page.js +91 -69
- package/client/pages/grist-mode-page.js +15 -15
- package/client/pages/label-scan-page.js +189 -0
- package/client/pages/ocr-page.js +4 -3
- package/client/route.js +4 -0
- package/config/config.development.js +5 -1
- package/db.sqlite +0 -0
- package/dist-server/service/reference/lambda-call.js +68 -0
- package/dist-server/service/reference/lambda-call.js.map +1 -0
- package/dist-server/service/reference/reference-query.js +26 -4
- package/dist-server/service/reference/reference-query.js.map +1 -1
- package/logs/.08636eb59927f12972f6774f5947c8507b3564c2-audit.json +11 -6
- package/logs/.5e5d741d8b7784a2fbad65eedc0fd46946aaf6f2-audit.json +9 -14
- package/logs/application-2021-11-29-20.log +21 -0
- package/logs/application-2021-11-29-21.log +4 -0
- package/logs/application-2021-11-29-23.log +4 -0
- package/logs/{connections-2021-11-02-11.log → connections-2021-11-29-20.log} +0 -0
- package/logs/{connections-2021-11-03-11.log → connections-2021-11-29-21.log} +0 -0
- package/logs/{connections-2021-11-04-14.log → connections-2021-11-29-23.log} +0 -0
- package/package.json +43 -42
- package/server/service/reference/lambda-call.ts +69 -0
- package/server/service/reference/reference-query.ts +35 -7
- package/things-factory.config.js +4 -0
- package/translations/en.json +3 -2
- package/translations/ko.json +3 -2
- package/translations/ms.json +3 -2
- package/translations/zh.json +3 -2
- package/views/auth-page.html +0 -1
- package/attachments/69808491-8e6b-45e2-9bf8-dccea1c5b52e.png +0 -0
- package/attachments/7927fe8e-2246-453d-9869-7072b983437c.png +0 -0
- package/attachments/7d150574-01b8-4439-96a0-d57299f3ffcf.png +0 -0
- package/attachments/a1cf142c-f3c2-442c-b8d5-a7f9cc6a59b3.png +0 -0
- package/attachments/cb3ac834-ece0-4802-bef0-dfdc0fcd93bd.png +0 -0
- package/logs/application-2021-11-04-14.log +0 -4
- package/logs/application-2021-11-05-18.log +0 -6
- package/logs/connections-2021-11-05-18.log +0 -0
|
@@ -0,0 +1,189 @@
|
|
|
1
|
+
import '@things-factory/barcode-ui'
|
|
2
|
+
|
|
3
|
+
import { css, html } from 'lit-element'
|
|
4
|
+
import { connect } from 'pwa-helpers/connect-mixin.js'
|
|
5
|
+
|
|
6
|
+
import { PageView, store } from '@things-factory/shell'
|
|
7
|
+
|
|
8
|
+
import { referencePageStyles } from './reference-page-styles'
|
|
9
|
+
|
|
10
|
+
class LabelScanPage extends connect(store)(PageView) {
|
|
11
|
+
static get styles() {
|
|
12
|
+
return [
|
|
13
|
+
referencePageStyles,
|
|
14
|
+
css`
|
|
15
|
+
:host {
|
|
16
|
+
display: block;
|
|
17
|
+
}
|
|
18
|
+
|
|
19
|
+
div {
|
|
20
|
+
overflow-wrap: anywhere;
|
|
21
|
+
}
|
|
22
|
+
`
|
|
23
|
+
]
|
|
24
|
+
}
|
|
25
|
+
|
|
26
|
+
static get properties() {
|
|
27
|
+
return {
|
|
28
|
+
bcid: String,
|
|
29
|
+
value: String,
|
|
30
|
+
bcWidth: Number,
|
|
31
|
+
bcHeight: Number,
|
|
32
|
+
bcScale: Number,
|
|
33
|
+
padding: Number
|
|
34
|
+
}
|
|
35
|
+
}
|
|
36
|
+
|
|
37
|
+
get context() {
|
|
38
|
+
return {
|
|
39
|
+
title: 'Barcode Scan Input and Tag Component'
|
|
40
|
+
}
|
|
41
|
+
}
|
|
42
|
+
|
|
43
|
+
render() {
|
|
44
|
+
const bcid = this.bcid || 'code128'
|
|
45
|
+
const value = this.value || '213439240572'
|
|
46
|
+
const bcWidth = this.bcWidth || 30
|
|
47
|
+
const bcHeight = this.bcHeight || 30
|
|
48
|
+
const bcScale = this.bcScale || 3
|
|
49
|
+
const padding = this.padding || 5
|
|
50
|
+
|
|
51
|
+
return html`
|
|
52
|
+
<section>
|
|
53
|
+
<h2>Barcode Scanable Input</h2>
|
|
54
|
+
<p>
|
|
55
|
+
barcode-scanable-input 컴포넌트는 카메라 입력을 통해서 바코드를 스캔하고, 스캔한 결과를 입력 필드에 적용한다.
|
|
56
|
+
</p>
|
|
57
|
+
<barcode-scanable-input
|
|
58
|
+
name="barcode-input"
|
|
59
|
+
custom-input
|
|
60
|
+
@keypress=${e => {
|
|
61
|
+
if (e.keyCode === 13) {
|
|
62
|
+
e.preventDefault()
|
|
63
|
+
this.value = e.target.shadowRoot.querySelector('input').value
|
|
64
|
+
console.log('input completed.', e.target.value)
|
|
65
|
+
}
|
|
66
|
+
}}
|
|
67
|
+
></barcode-scanable-input>
|
|
68
|
+
</section>
|
|
69
|
+
|
|
70
|
+
<section>
|
|
71
|
+
<h2>Input Field with Barcode Image</h2>
|
|
72
|
+
<p>barcode-input 컴포넌트는 입력필드에 입력된 결과를 바코드 이미지로도 보여준다.</p>
|
|
73
|
+
|
|
74
|
+
<label>bacode type</label>
|
|
75
|
+
<select
|
|
76
|
+
@change=${e => {
|
|
77
|
+
this.bcid = e.target.value
|
|
78
|
+
}}
|
|
79
|
+
.value=${bcid}
|
|
80
|
+
>
|
|
81
|
+
<option value="code39">code39</option>
|
|
82
|
+
<option value="code128" selected>code128</option>
|
|
83
|
+
<option value="qrcode">QR</option>
|
|
84
|
+
</select>
|
|
85
|
+
|
|
86
|
+
<label>bacode width</label>
|
|
87
|
+
<select
|
|
88
|
+
@change=${e => {
|
|
89
|
+
this.bcWidth = Number(e.target.value)
|
|
90
|
+
}}
|
|
91
|
+
.value=${bcWidth}
|
|
92
|
+
>
|
|
93
|
+
<option value="10">10</option>
|
|
94
|
+
<option value="30" selected>30</option>
|
|
95
|
+
<option value="50">50</option>
|
|
96
|
+
</select>
|
|
97
|
+
|
|
98
|
+
<label>bacode height</label>
|
|
99
|
+
<select
|
|
100
|
+
@change=${e => {
|
|
101
|
+
this.bcHeight = Number(e.target.value)
|
|
102
|
+
}}
|
|
103
|
+
.value=${bcHeight}
|
|
104
|
+
>
|
|
105
|
+
<option value="10">10</option>
|
|
106
|
+
<option value="30" selected>30</option>
|
|
107
|
+
<option value="50">50</option>
|
|
108
|
+
</select>
|
|
109
|
+
|
|
110
|
+
<label>bacode scale</label>
|
|
111
|
+
<select
|
|
112
|
+
@change=${e => {
|
|
113
|
+
this.bcScale = Number(e.target.value)
|
|
114
|
+
}}
|
|
115
|
+
.value=${bcScale}
|
|
116
|
+
>
|
|
117
|
+
<option value="2">2</option>
|
|
118
|
+
<option value="3" selected>3</option>
|
|
119
|
+
<option value="4">4</option>
|
|
120
|
+
</select>
|
|
121
|
+
|
|
122
|
+
<label>padding</label>
|
|
123
|
+
<select
|
|
124
|
+
@change=${e => {
|
|
125
|
+
this.padding = Number(e.target.value)
|
|
126
|
+
}}
|
|
127
|
+
.value=${padding}
|
|
128
|
+
>
|
|
129
|
+
<option value="3">3</option>
|
|
130
|
+
<option value="5" selected>5</option>
|
|
131
|
+
<option value="10">10</option>
|
|
132
|
+
</select>
|
|
133
|
+
|
|
134
|
+
<barcode-input
|
|
135
|
+
.bcid=${bcid}
|
|
136
|
+
.value=${value}
|
|
137
|
+
.bcWidth=${bcWidth}
|
|
138
|
+
.bcHeight=${bcHeight}
|
|
139
|
+
.bcScale=${bcScale}
|
|
140
|
+
@change=${e => {
|
|
141
|
+
this.value = e.target.value
|
|
142
|
+
}}
|
|
143
|
+
></barcode-input>
|
|
144
|
+
</section>
|
|
145
|
+
|
|
146
|
+
<section>
|
|
147
|
+
<h2>Barcode Image Component</h2>
|
|
148
|
+
<p>
|
|
149
|
+
barcode-tag 컴포넌트는 바코드 이미지를 보여준다. 바코드 이미지를 클릭하면 이미지 파일을 다운로드 받을 수 있다.
|
|
150
|
+
</p>
|
|
151
|
+
|
|
152
|
+
<barcode-tag
|
|
153
|
+
.bcid=${bcid}
|
|
154
|
+
.value=${value}
|
|
155
|
+
.bcWidth=${bcWidth}
|
|
156
|
+
.bcHeight=${bcHeight}
|
|
157
|
+
.bcScale=${bcScale}
|
|
158
|
+
.padding=${padding}
|
|
159
|
+
></barcode-tag>
|
|
160
|
+
</section>
|
|
161
|
+
`
|
|
162
|
+
}
|
|
163
|
+
|
|
164
|
+
updated(changes) {
|
|
165
|
+
/*
|
|
166
|
+
* If this page properties are changed, this callback will be invoked.
|
|
167
|
+
* This callback will be called back only when this page is activated.
|
|
168
|
+
*/
|
|
169
|
+
if (changes.has('itemId') || changes.has('params')) {
|
|
170
|
+
/* do something */
|
|
171
|
+
}
|
|
172
|
+
}
|
|
173
|
+
|
|
174
|
+
stateChanged(state) {
|
|
175
|
+
/*
|
|
176
|
+
* application wide state changed
|
|
177
|
+
*
|
|
178
|
+
*/
|
|
179
|
+
}
|
|
180
|
+
|
|
181
|
+
pageUpdated(changes, lifecycle, before) {
|
|
182
|
+
if (this.active) {
|
|
183
|
+
} else {
|
|
184
|
+
/* this page is deactivated */
|
|
185
|
+
}
|
|
186
|
+
}
|
|
187
|
+
}
|
|
188
|
+
|
|
189
|
+
customElements.define('label-scan-page', LabelScanPage)
|
package/client/pages/ocr-page.js
CHANGED
|
@@ -1,12 +1,13 @@
|
|
|
1
1
|
import '@things-factory/form-ui'
|
|
2
2
|
import '../components/camera-capturer'
|
|
3
3
|
|
|
4
|
-
import {
|
|
4
|
+
import { gql } from 'graphql-tag'
|
|
5
5
|
import { css, html } from 'lit-element'
|
|
6
|
+
import { connect } from 'pwa-helpers/connect-mixin.js'
|
|
6
7
|
|
|
8
|
+
import { client, PageView, store } from '@things-factory/shell'
|
|
7
9
|
import { CommonButtonStyles } from '@things-factory/styles'
|
|
8
|
-
|
|
9
|
-
import { gql } from 'graphql-tag'
|
|
10
|
+
|
|
10
11
|
import { referencePageStyles } from './reference-page-styles'
|
|
11
12
|
|
|
12
13
|
class OCRPage extends connect(store)(PageView) {
|
package/client/route.js
CHANGED
package/db.sqlite
CHANGED
|
Binary file
|
|
@@ -0,0 +1,68 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
var __importDefault = (this && this.__importDefault) || function (mod) {
|
|
3
|
+
return (mod && mod.__esModule) ? mod : { "default": mod };
|
|
4
|
+
};
|
|
5
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
6
|
+
exports.interpretImages = void 0;
|
|
7
|
+
const node_fetch_1 = __importDefault(require("node-fetch"));
|
|
8
|
+
const env_1 = require("@things-factory/env");
|
|
9
|
+
const utils_1 = require("@things-factory/utils");
|
|
10
|
+
const appSyncConfig = env_1.config.get('awsAppSync');
|
|
11
|
+
async function interpretImages(images) {
|
|
12
|
+
const query = utils_1.gqlBuilder.jsonToGraphQLQuery({
|
|
13
|
+
mutation: {
|
|
14
|
+
upload: {
|
|
15
|
+
__args: {
|
|
16
|
+
images
|
|
17
|
+
},
|
|
18
|
+
success_count: true,
|
|
19
|
+
failure_count: true,
|
|
20
|
+
result: {
|
|
21
|
+
key_values: true,
|
|
22
|
+
boundaries: true,
|
|
23
|
+
texts: true
|
|
24
|
+
}
|
|
25
|
+
}
|
|
26
|
+
}
|
|
27
|
+
});
|
|
28
|
+
const body = JSON.stringify({ query });
|
|
29
|
+
const response = await (0, node_fetch_1.default)(appSyncConfig['apiUrl'], {
|
|
30
|
+
method: 'POST',
|
|
31
|
+
headers: {
|
|
32
|
+
'Content-Type': 'application/graphql',
|
|
33
|
+
'x-api-key': appSyncConfig['apiKey']
|
|
34
|
+
},
|
|
35
|
+
body
|
|
36
|
+
});
|
|
37
|
+
const jsonRes = await response.json();
|
|
38
|
+
return jsonRes;
|
|
39
|
+
}
|
|
40
|
+
exports.interpretImages = interpretImages;
|
|
41
|
+
// @deprecated
|
|
42
|
+
function getRequestBody(images) {
|
|
43
|
+
// @things-factory/utils gqlBuilder.buildArgs 와 유사
|
|
44
|
+
const imageArgs = images.map(obj => {
|
|
45
|
+
const args = [];
|
|
46
|
+
for (let key in obj) {
|
|
47
|
+
args.push(`${key}: \"${obj[key]}\"`);
|
|
48
|
+
}
|
|
49
|
+
return '{' + args.join(',') + '}';
|
|
50
|
+
});
|
|
51
|
+
// console.log(gqlBuilder.buildArgs(images))
|
|
52
|
+
// console.log(imageArgs)
|
|
53
|
+
const body = JSON.stringify({
|
|
54
|
+
query: `mutation {
|
|
55
|
+
upload(images: ${imageArgs}) {
|
|
56
|
+
success_count
|
|
57
|
+
failure_count
|
|
58
|
+
results {
|
|
59
|
+
key_values
|
|
60
|
+
boundaries
|
|
61
|
+
texts
|
|
62
|
+
}
|
|
63
|
+
}
|
|
64
|
+
}`
|
|
65
|
+
});
|
|
66
|
+
return body;
|
|
67
|
+
}
|
|
68
|
+
//# sourceMappingURL=lambda-call.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"lambda-call.js","sourceRoot":"","sources":["../../../server/service/reference/lambda-call.ts"],"names":[],"mappings":";;;;;;AAAA,4DAA8B;AAE9B,6CAA4C;AAC5C,iDAAkD;AAElD,MAAM,aAAa,GAAG,YAAM,CAAC,GAAG,CAAC,YAAY,CAAC,CAAA;AAEvC,KAAK,UAAU,eAAe,CAAC,MAAM;IAC1C,MAAM,KAAK,GAAG,kBAAU,CAAC,kBAAkB,CAAC;QAC1C,QAAQ,EAAE;YACR,MAAM,EAAE;gBACN,MAAM,EAAE;oBACN,MAAM;iBACP;gBACD,aAAa,EAAE,IAAI;gBACnB,aAAa,EAAE,IAAI;gBACnB,MAAM,EAAE;oBACN,UAAU,EAAE,IAAI;oBAChB,UAAU,EAAE,IAAI;oBAChB,KAAK,EAAE,IAAI;iBACZ;aACF;SACF;KACF,CAAC,CAAA;IAEF,MAAM,IAAI,GAAG,IAAI,CAAC,SAAS,CAAC,EAAE,KAAK,EAAE,CAAC,CAAA;IACtC,MAAM,QAAQ,GAAG,MAAM,IAAA,oBAAK,EAAC,aAAa,CAAC,QAAQ,CAAC,EAAE;QACpD,MAAM,EAAE,MAAM;QACd,OAAO,EAAE;YACP,cAAc,EAAE,qBAAqB;YACrC,WAAW,EAAE,aAAa,CAAC,QAAQ,CAAC;SACrC;QACD,IAAI;KACL,CAAC,CAAA;IAEF,MAAM,OAAO,GAAG,MAAM,QAAQ,CAAC,IAAI,EAAE,CAAA;IACrC,OAAO,OAAO,CAAA;AAChB,CAAC;AA9BD,0CA8BC;AAED,cAAc;AACd,SAAS,cAAc,CAAC,MAAM;IAC5B,kDAAkD;IAClD,MAAM,SAAS,GAAG,MAAM,CAAC,GAAG,CAAC,GAAG,CAAC,EAAE;QACjC,MAAM,IAAI,GAAG,EAAE,CAAA;QACf,KAAK,IAAI,GAAG,IAAI,GAAG,EAAE;YACnB,IAAI,CAAC,IAAI,CAAC,GAAG,GAAG,OAAO,GAAG,CAAC,GAAG,CAAC,IAAI,CAAC,CAAA;SACrC;QACD,OAAO,GAAG,GAAG,IAAI,CAAC,IAAI,CAAC,GAAG,CAAC,GAAG,GAAG,CAAA;IACnC,CAAC,CAAC,CAAA;IAEF,4CAA4C;IAC5C,yBAAyB;IAEzB,MAAM,IAAI,GAAG,IAAI,CAAC,SAAS,CAAC;QAC1B,KAAK,EAAE;uBACY,SAAS;;;;;;;;;MAS1B;KACH,CAAC,CAAA;IAEF,OAAO,IAAI,CAAA;AACb,CAAC"}
|
|
@@ -13,13 +13,16 @@ var __param = (this && this.__param) || function (paramIndex, decorator) {
|
|
|
13
13
|
};
|
|
14
14
|
Object.defineProperty(exports, "__esModule", { value: true });
|
|
15
15
|
exports.ReferenceQuery = void 0;
|
|
16
|
-
const type_graphql_1 = require("type-graphql");
|
|
17
16
|
const graphql_upload_1 = require("graphql-upload");
|
|
17
|
+
const type_graphql_1 = require("type-graphql");
|
|
18
|
+
const attachment_base_1 = require("@things-factory/attachment-base");
|
|
18
19
|
const shell_1 = require("@things-factory/shell");
|
|
19
20
|
const utils_1 = require("@things-factory/utils");
|
|
20
|
-
const
|
|
21
|
+
const lambda_call_1 = require("./lambda-call");
|
|
22
|
+
const debug = require('debug')('things-factory:reference-app');
|
|
21
23
|
let ReferenceQuery = class ReferenceQuery {
|
|
22
24
|
async ocrRequest(_, images, context) {
|
|
25
|
+
var _a, _b;
|
|
23
26
|
const { domain, user, tx } = context.state;
|
|
24
27
|
const all = Promise.all(images);
|
|
25
28
|
if ((images === null || images === void 0 ? void 0 : images.length) > 0) {
|
|
@@ -31,8 +34,27 @@ let ReferenceQuery = class ReferenceQuery {
|
|
|
31
34
|
};
|
|
32
35
|
});
|
|
33
36
|
await (0, attachment_base_1.createAttachments)(_, { attachments }, context);
|
|
37
|
+
const files = await Promise.all(images.map(async (file) => {
|
|
38
|
+
const { createReadStream, filename, mimetype } = await file;
|
|
39
|
+
const readStream = createReadStream();
|
|
40
|
+
const image = await this.streamToString(readStream);
|
|
41
|
+
// format is 'image/jpeg'
|
|
42
|
+
const formatArr = mimetype.split('/');
|
|
43
|
+
return { data: image, name: filename, format: formatArr[formatArr.length - 1] };
|
|
44
|
+
}));
|
|
45
|
+
const res = await (0, lambda_call_1.interpretImages)(files);
|
|
46
|
+
console.log('interpretImages response', JSON.stringify(res, null, ' '));
|
|
47
|
+
return (_b = (_a = res.data) === null || _a === void 0 ? void 0 : _a.upload) === null || _b === void 0 ? void 0 : _b.result;
|
|
34
48
|
}
|
|
35
|
-
return
|
|
49
|
+
return [];
|
|
50
|
+
}
|
|
51
|
+
streamToString(stream) {
|
|
52
|
+
const chunks = [];
|
|
53
|
+
return new Promise((resolve, reject) => {
|
|
54
|
+
stream.on('data', (chunk) => chunks.push(Buffer.from(chunk)));
|
|
55
|
+
stream.on('error', (err) => reject(err));
|
|
56
|
+
stream.on('end', () => resolve(Buffer.concat(chunks).toString('base64')));
|
|
57
|
+
});
|
|
36
58
|
}
|
|
37
59
|
async ocrPendingJob(_, tag, context) {
|
|
38
60
|
const { domain } = context.state;
|
|
@@ -49,7 +71,7 @@ let ReferenceQuery = class ReferenceQuery {
|
|
|
49
71
|
}
|
|
50
72
|
};
|
|
51
73
|
__decorate([
|
|
52
|
-
(0, type_graphql_1.Query)(returns =>
|
|
74
|
+
(0, type_graphql_1.Query)(returns => shell_1.ScalarAny, { description: 'To reference of ocr request' }),
|
|
53
75
|
__param(0, (0, type_graphql_1.Root)()),
|
|
54
76
|
__param(1, (0, type_graphql_1.Arg)('images', () => [graphql_upload_1.GraphQLUpload])),
|
|
55
77
|
__param(2, (0, type_graphql_1.Ctx)()),
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"reference-query.js","sourceRoot":"","sources":["../../../server/service/reference/reference-query.ts"],"names":[],"mappings":";;;;;;;;;;;;;;;AAAA
|
|
1
|
+
{"version":3,"file":"reference-query.js","sourceRoot":"","sources":["../../../server/service/reference/reference-query.ts"],"names":[],"mappings":"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"}
|
|
@@ -6,14 +6,19 @@
|
|
|
6
6
|
"auditLog": "logs/.08636eb59927f12972f6774f5947c8507b3564c2-audit.json",
|
|
7
7
|
"files": [
|
|
8
8
|
{
|
|
9
|
-
"date":
|
|
10
|
-
"name": "logs/application-2021-11-
|
|
11
|
-
"hash": "
|
|
9
|
+
"date": 1638185235675,
|
|
10
|
+
"name": "logs/application-2021-11-29-20.log",
|
|
11
|
+
"hash": "00ffc0988bd00c20e9781e1e1199ba2c"
|
|
12
12
|
},
|
|
13
13
|
{
|
|
14
|
-
"date":
|
|
15
|
-
"name": "logs/application-2021-11-
|
|
16
|
-
"hash": "
|
|
14
|
+
"date": 1638189718559,
|
|
15
|
+
"name": "logs/application-2021-11-29-21.log",
|
|
16
|
+
"hash": "bf01266958549d973091d711910f7fb2"
|
|
17
|
+
},
|
|
18
|
+
{
|
|
19
|
+
"date": 1638194619311,
|
|
20
|
+
"name": "logs/application-2021-11-29-23.log",
|
|
21
|
+
"hash": "703efe9c95fa66ee00e24c249fd863f5"
|
|
17
22
|
}
|
|
18
23
|
]
|
|
19
24
|
}
|
|
@@ -6,24 +6,19 @@
|
|
|
6
6
|
"auditLog": "logs/.5e5d741d8b7784a2fbad65eedc0fd46946aaf6f2-audit.json",
|
|
7
7
|
"files": [
|
|
8
8
|
{
|
|
9
|
-
"date":
|
|
10
|
-
"name": "logs/connections-2021-11-
|
|
11
|
-
"hash": "
|
|
9
|
+
"date": 1638185239795,
|
|
10
|
+
"name": "logs/connections-2021-11-29-20.log",
|
|
11
|
+
"hash": "e28d199b30bde6b88967362fb318a103"
|
|
12
12
|
},
|
|
13
13
|
{
|
|
14
|
-
"date":
|
|
15
|
-
"name": "logs/connections-2021-11-
|
|
16
|
-
"hash": "
|
|
14
|
+
"date": 1638189721660,
|
|
15
|
+
"name": "logs/connections-2021-11-29-21.log",
|
|
16
|
+
"hash": "679163fc1c530a8fd14dcbfc617300a4"
|
|
17
17
|
},
|
|
18
18
|
{
|
|
19
|
-
"date":
|
|
20
|
-
"name": "logs/connections-2021-11-
|
|
21
|
-
"hash": "
|
|
22
|
-
},
|
|
23
|
-
{
|
|
24
|
-
"date": 1636103949582,
|
|
25
|
-
"name": "logs/connections-2021-11-05-18.log",
|
|
26
|
-
"hash": "f7593c79bc2d00a3832d894f74b529f8"
|
|
19
|
+
"date": 1638194624575,
|
|
20
|
+
"name": "logs/connections-2021-11-29-23.log",
|
|
21
|
+
"hash": "92bf1c2c4738bc05921cefe0e860c4fa"
|
|
27
22
|
}
|
|
28
23
|
]
|
|
29
24
|
}
|
|
@@ -0,0 +1,21 @@
|
|
|
1
|
+
2021-11-29T11:27:18.526Z info: File Storage is Ready.
|
|
2
|
+
2021-11-29T11:27:22.767Z info: Database connection established
|
|
3
|
+
2021-11-29T11:27:24.702Z info: 🚀 Server ready at http://0.0.0.0:3000/graphql
|
|
4
|
+
2021-11-29T11:27:24.704Z info: 🚀 Subscriptions ready at ws://0.0.0.0:3000/subscriptions
|
|
5
|
+
2021-11-29T11:27:30.880Z error: context.i18next.services.languageUtils.isWhitelisted is not a function
|
|
6
|
+
2021-11-29T11:27:31.443Z error: context.i18next.services.languageUtils.isWhitelisted is not a function
|
|
7
|
+
2021-11-29T11:27:32.944Z error: context.i18next.services.languageUtils.isWhitelisted is not a function
|
|
8
|
+
2021-11-29T11:27:33.529Z error: context.i18next.services.languageUtils.isWhitelisted is not a function
|
|
9
|
+
2021-11-29T11:27:33.950Z error: context.i18next.services.languageUtils.isWhitelisted is not a function
|
|
10
|
+
2021-11-29T11:27:33.960Z error: context.i18next.services.languageUtils.isWhitelisted is not a function
|
|
11
|
+
2021-11-29T11:28:05.526Z error: context.i18next.services.languageUtils.isWhitelisted is not a function
|
|
12
|
+
2021-11-29T11:42:10.000Z info: File Storage is Ready.
|
|
13
|
+
2021-11-29T11:42:14.452Z info: Database connection established
|
|
14
|
+
2021-11-29T11:44:02.393Z info: File Storage is Ready.
|
|
15
|
+
2021-11-29T11:44:05.930Z info: Database connection established
|
|
16
|
+
2021-11-29T11:44:06.993Z info: 🚀 Server ready at http://0.0.0.0:3000/graphql
|
|
17
|
+
2021-11-29T11:44:06.993Z info: 🚀 Subscriptions ready at ws://0.0.0.0:3000/subscriptions
|
|
18
|
+
2021-11-29T11:49:33.257Z info: File Storage is Ready.
|
|
19
|
+
2021-11-29T11:49:38.638Z info: Database connection established
|
|
20
|
+
2021-11-29T11:49:40.846Z info: 🚀 Server ready at http://0.0.0.0:3000/graphql
|
|
21
|
+
2021-11-29T11:49:40.848Z info: 🚀 Subscriptions ready at ws://0.0.0.0:3000/subscriptions
|
|
@@ -0,0 +1,4 @@
|
|
|
1
|
+
2021-11-29T12:42:00.449Z info: File Storage is Ready.
|
|
2
|
+
2021-11-29T12:42:05.333Z info: Database connection established
|
|
3
|
+
2021-11-29T12:42:06.385Z info: 🚀 Server ready at http://0.0.0.0:3000/graphql
|
|
4
|
+
2021-11-29T12:42:06.386Z info: 🚀 Subscriptions ready at ws://0.0.0.0:3000/subscriptions
|
|
@@ -0,0 +1,4 @@
|
|
|
1
|
+
2021-11-29T14:03:43.050Z info: File Storage is Ready.
|
|
2
|
+
2021-11-29T14:03:47.958Z info: Database connection established
|
|
3
|
+
2021-11-29T14:03:49.016Z info: 🚀 Server ready at http://0.0.0.0:3000/graphql
|
|
4
|
+
2021-11-29T14:03:49.017Z info: 🚀 Subscriptions ready at ws://0.0.0.0:3000/subscriptions
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@things-factory/reference-app",
|
|
3
|
-
"version": "4.0.
|
|
3
|
+
"version": "4.0.8",
|
|
4
4
|
"main": "dist-server/index.js",
|
|
5
5
|
"browser": "client/index.js",
|
|
6
6
|
"things-factory": true,
|
|
@@ -38,48 +38,49 @@
|
|
|
38
38
|
},
|
|
39
39
|
"dependencies": {
|
|
40
40
|
"@hatiolab/things-scene": "^2.7.12",
|
|
41
|
-
"@material/mwc-checkbox": "^0.
|
|
42
|
-
"@operato/data-grist": "^0.2.
|
|
43
|
-
"@operato/ghost-print": "0.
|
|
44
|
-
"@operato/
|
|
45
|
-
"@operato/
|
|
46
|
-
"@
|
|
47
|
-
"@
|
|
48
|
-
"@things-factory/
|
|
49
|
-
"@things-factory/
|
|
50
|
-
"@things-factory/
|
|
51
|
-
"@things-factory/
|
|
52
|
-
"@things-factory/
|
|
53
|
-
"@things-factory/
|
|
54
|
-
"@things-factory/
|
|
55
|
-
"@things-factory/
|
|
56
|
-
"@things-factory/
|
|
57
|
-
"@things-factory/
|
|
58
|
-
"@things-factory/
|
|
59
|
-
"@things-factory/
|
|
60
|
-
"@things-factory/
|
|
61
|
-
"@things-factory/
|
|
62
|
-
"@things-factory/
|
|
63
|
-
"@things-factory/
|
|
64
|
-
"@things-factory/
|
|
65
|
-
"@things-factory/
|
|
66
|
-
"@things-factory/
|
|
67
|
-
"@things-factory/scene-
|
|
68
|
-
"@things-factory/scene-
|
|
69
|
-
"@things-factory/scene-
|
|
70
|
-
"@things-factory/scene-
|
|
71
|
-
"@things-factory/scene-
|
|
72
|
-
"@things-factory/scene-
|
|
73
|
-
"@things-factory/scene-
|
|
74
|
-
"@things-factory/scene-
|
|
75
|
-
"@things-factory/scene-
|
|
76
|
-
"@things-factory/
|
|
77
|
-
"@things-factory/setting-
|
|
78
|
-
"@things-factory/
|
|
79
|
-
"@things-factory/
|
|
41
|
+
"@material/mwc-checkbox": "^0.25.3",
|
|
42
|
+
"@operato/data-grist": "^0.2.28",
|
|
43
|
+
"@operato/ghost-print": "0.2.26",
|
|
44
|
+
"@operato/ocr": "^0.2.26",
|
|
45
|
+
"@operato/popup": "^0.2.26",
|
|
46
|
+
"@operato/pull-to-refresh": "^0.2.26",
|
|
47
|
+
"@operato/scene-switch": "^0.0.3",
|
|
48
|
+
"@things-factory/api": "^4.0.7",
|
|
49
|
+
"@things-factory/apptool-ui": "^4.0.7",
|
|
50
|
+
"@things-factory/auth-ui": "^4.0.7",
|
|
51
|
+
"@things-factory/board-service": "^4.0.7",
|
|
52
|
+
"@things-factory/board-ui": "^4.0.7",
|
|
53
|
+
"@things-factory/context-ui": "^4.0.7",
|
|
54
|
+
"@things-factory/dashboard": "^4.0.7",
|
|
55
|
+
"@things-factory/export-ui": "^4.0.7",
|
|
56
|
+
"@things-factory/export-ui-excel": "^4.0.7",
|
|
57
|
+
"@things-factory/grist-ui": "^4.0.7",
|
|
58
|
+
"@things-factory/help": "^4.0.7",
|
|
59
|
+
"@things-factory/i18n-ui": "^4.0.7",
|
|
60
|
+
"@things-factory/integration-ui": "^4.0.7",
|
|
61
|
+
"@things-factory/lite-menu": "^4.0.7",
|
|
62
|
+
"@things-factory/more-ui": "^4.0.7",
|
|
63
|
+
"@things-factory/notification": "^4.0.7",
|
|
64
|
+
"@things-factory/oauth2-client": "^4.0.7",
|
|
65
|
+
"@things-factory/print-ui": "^4.0.7",
|
|
66
|
+
"@things-factory/resource-ui": "^4.0.7",
|
|
67
|
+
"@things-factory/scene-chartjs": "^4.0.8",
|
|
68
|
+
"@things-factory/scene-clock": "^4.0.7",
|
|
69
|
+
"@things-factory/scene-form": "^4.0.7",
|
|
70
|
+
"@things-factory/scene-gauge": "^4.0.7",
|
|
71
|
+
"@things-factory/scene-half-roundrect": "^4.0.7",
|
|
72
|
+
"@things-factory/scene-indoor-map": "^4.0.7",
|
|
73
|
+
"@things-factory/scene-news-ticker": "^4.0.7",
|
|
74
|
+
"@things-factory/scene-progressbar": "^4.0.7",
|
|
75
|
+
"@things-factory/scene-random": "^4.0.7",
|
|
76
|
+
"@things-factory/scene-tab": "^4.0.7",
|
|
77
|
+
"@things-factory/setting-base": "^4.0.7",
|
|
78
|
+
"@things-factory/setting-ui": "^4.0.7",
|
|
79
|
+
"@things-factory/shell": "^4.0.7",
|
|
80
|
+
"@things-factory/system-ui": "^4.0.7"
|
|
80
81
|
},
|
|
81
82
|
"devDependencies": {
|
|
82
|
-
"@things-factory/builder": "^4.0.
|
|
83
|
+
"@things-factory/builder": "^4.0.7"
|
|
83
84
|
},
|
|
84
|
-
"gitHead": "
|
|
85
|
+
"gitHead": "e867686a46f323e8c2373230336556bfd096e932"
|
|
85
86
|
}
|
|
@@ -0,0 +1,69 @@
|
|
|
1
|
+
import fetch from 'node-fetch'
|
|
2
|
+
|
|
3
|
+
import { config } from '@things-factory/env'
|
|
4
|
+
import { gqlBuilder } from '@things-factory/utils'
|
|
5
|
+
|
|
6
|
+
const appSyncConfig = config.get('awsAppSync')
|
|
7
|
+
|
|
8
|
+
export async function interpretImages(images) {
|
|
9
|
+
const query = gqlBuilder.jsonToGraphQLQuery({
|
|
10
|
+
mutation: {
|
|
11
|
+
upload: {
|
|
12
|
+
__args: {
|
|
13
|
+
images
|
|
14
|
+
},
|
|
15
|
+
success_count: true,
|
|
16
|
+
failure_count: true,
|
|
17
|
+
result: {
|
|
18
|
+
key_values: true,
|
|
19
|
+
boundaries: true,
|
|
20
|
+
texts: true
|
|
21
|
+
}
|
|
22
|
+
}
|
|
23
|
+
}
|
|
24
|
+
})
|
|
25
|
+
|
|
26
|
+
const body = JSON.stringify({ query })
|
|
27
|
+
const response = await fetch(appSyncConfig['apiUrl'], {
|
|
28
|
+
method: 'POST',
|
|
29
|
+
headers: {
|
|
30
|
+
'Content-Type': 'application/graphql',
|
|
31
|
+
'x-api-key': appSyncConfig['apiKey']
|
|
32
|
+
},
|
|
33
|
+
body
|
|
34
|
+
})
|
|
35
|
+
|
|
36
|
+
const jsonRes = await response.json()
|
|
37
|
+
return jsonRes
|
|
38
|
+
}
|
|
39
|
+
|
|
40
|
+
// @deprecated
|
|
41
|
+
function getRequestBody(images) {
|
|
42
|
+
// @things-factory/utils gqlBuilder.buildArgs 와 유사
|
|
43
|
+
const imageArgs = images.map(obj => {
|
|
44
|
+
const args = []
|
|
45
|
+
for (let key in obj) {
|
|
46
|
+
args.push(`${key}: \"${obj[key]}\"`)
|
|
47
|
+
}
|
|
48
|
+
return '{' + args.join(',') + '}'
|
|
49
|
+
})
|
|
50
|
+
|
|
51
|
+
// console.log(gqlBuilder.buildArgs(images))
|
|
52
|
+
// console.log(imageArgs)
|
|
53
|
+
|
|
54
|
+
const body = JSON.stringify({
|
|
55
|
+
query: `mutation {
|
|
56
|
+
upload(images: ${imageArgs}) {
|
|
57
|
+
success_count
|
|
58
|
+
failure_count
|
|
59
|
+
results {
|
|
60
|
+
key_values
|
|
61
|
+
boundaries
|
|
62
|
+
texts
|
|
63
|
+
}
|
|
64
|
+
}
|
|
65
|
+
}`
|
|
66
|
+
})
|
|
67
|
+
|
|
68
|
+
return body
|
|
69
|
+
}
|