@things-factory/operato-board 10.0.0-beta.98 → 10.0.0-y.0
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/README.md +112 -60
- package/_index.html +6 -12
- package/dist-client/tsconfig.tsbuildinfo +1 -1
- package/dist-server/tsconfig.tsbuildinfo +1 -1
- package/package.json +40 -40
- package/schema.graphql +15 -0
package/README.md
CHANGED
|
@@ -1,99 +1,151 @@
|
|
|
1
|
-

|
|
2
2
|
|
|
3
|
-
|
|
3
|
+
# Operato Board
|
|
4
4
|
|
|
5
|
-
-
|
|
6
|
-
- Board : Monitoring Solution
|
|
5
|
+
> **A Zero-to-Twin canvas** — assemble a live, simulating digital twin from visual building blocks with near-zero external code, then drive it with real-time monitoring.
|
|
7
6
|
|
|
8
|
-
|
|
7
|
+
`@things-factory/operato-board` is the production application of the `things-factory` platform that hosts the board modeler & viewer, the scene component runtime, and the real-time data backbone needed to author and operate digital twins.
|
|
9
8
|
|
|
10
|
-
|
|
9
|
+
## What you can build
|
|
11
10
|
|
|
12
|
-
|
|
11
|
+
- **Live dashboards & SCADA-style panels** — chart, gauge, table, gantt, sensor, news ticker, …
|
|
12
|
+
- **Factory / logistics digital twins** — conveyor lines, transports, racks, AGV, port, crane, …
|
|
13
|
+
- **3D / mixed-reality scenes** — IFC building models, URDF robots, 3D visualizer
|
|
14
|
+
- **Geospatial views** — Google Map, indoor map, polypath
|
|
15
|
+
- **Custom integrations** — GraphQL, RESTful, InfluxDB, OpenAI, MS Graph, weather, KR Juso/Data.go.kr, …
|
|
13
16
|
|
|
14
|
-
|
|
15
|
-
|
|
17
|
+
All of the above are plug-in *scene components*: drop them onto a board, wire them with bindings, and they animate, render, and respond to live data without writing application code.
|
|
18
|
+
|
|
19
|
+
## Key features
|
|
20
|
+
|
|
21
|
+
- **Visual modeler** — drag-and-drop board authoring with property panels, layers, and bindings
|
|
22
|
+
- **Multi-mode runtime** — same board renders as a flat dashboard or a 3D world depending on viewer mode
|
|
23
|
+
- **Embedded simulation** — carriers, transports, and flow logic can be simulated in-place for design-time validation
|
|
24
|
+
- **Real-time data** — push subscriptions over GraphQL, polling integrations, and offline-capable client cache
|
|
25
|
+
- **Auth & licensing** — domain-scoped accounts, Azure AD / Google SSO, host-bound license enforcement
|
|
26
|
+
- **Internationalization** — built-in i18n for both authoring UI and runtime scenes
|
|
27
|
+
- **Extensible** — `@operato/scene-*` packages register components through a `sceneComponent` decorator; add your own without forking
|
|
28
|
+
|
|
29
|
+
## Tech stack
|
|
30
|
+
|
|
31
|
+
| Layer | Stack |
|
|
32
|
+
|---|---|
|
|
33
|
+
| Language | TypeScript |
|
|
34
|
+
| UI | Web Components + LitElement |
|
|
35
|
+
| Graphics | `@hatiolab/things-scene` (canvas + WebGL/Three) |
|
|
36
|
+
| Backend | Node.js · `@things-factory/shell` (Express) · TypeORM |
|
|
37
|
+
| API | GraphQL (primary) · RESTful (fallback) |
|
|
38
|
+
| Auth | Passport + JWT · Google · Azure AD |
|
|
39
|
+
| Build | Webpack 5 · Lerna · Yarn workspaces |
|
|
40
|
+
|
|
41
|
+
## Prerequisites
|
|
42
|
+
|
|
43
|
+
- Node.js **20 LTS** or later
|
|
44
|
+
- Yarn (Classic, v1.x)
|
|
45
|
+
- A supported database (PostgreSQL recommended; SQLite works for development)
|
|
46
|
+
|
|
47
|
+
## Develop
|
|
48
|
+
|
|
49
|
+
```bash
|
|
50
|
+
yarn install
|
|
51
|
+
yarn serve:dev
|
|
16
52
|
```
|
|
17
53
|
|
|
18
|
-
|
|
54
|
+
Then open <http://localhost:3000> and sign in with the seeded admin account:
|
|
19
55
|
|
|
56
|
+
- id: `admin@hatiolab.com`
|
|
57
|
+
- password: `admin`
|
|
58
|
+
|
|
59
|
+
## Build
|
|
60
|
+
|
|
61
|
+
```bash
|
|
62
|
+
yarn build # build server + client
|
|
63
|
+
yarn build:app # build a deployable webpack bundle
|
|
20
64
|
```
|
|
21
|
-
|
|
65
|
+
|
|
66
|
+
## Production install
|
|
67
|
+
|
|
68
|
+
Use the provided installer to download and lay out a release into a target folder:
|
|
69
|
+
|
|
70
|
+
```bash
|
|
71
|
+
curl -fsSL https://raw.githubusercontent.com/things-factory/things-factory/master/packages/operato-board/installer/install.sh | bash -s
|
|
22
72
|
```
|
|
23
73
|
|
|
24
|
-
|
|
74
|
+
This produces:
|
|
25
75
|
|
|
26
|
-
|
|
27
|
-
|
|
76
|
+
| Script | Purpose |
|
|
77
|
+
|---|---|
|
|
78
|
+
| `start.sh [port]` | Start the application (defaults to port 4000) |
|
|
79
|
+
| `stop.sh` | Stop a running instance |
|
|
80
|
+
| `migrate.sh` | Run database migrations (required on first start) |
|
|
28
81
|
|
|
29
|
-
|
|
82
|
+
First-time setup:
|
|
30
83
|
|
|
31
|
-
|
|
84
|
+
```bash
|
|
85
|
+
./start.sh
|
|
86
|
+
./migrate.sh
|
|
87
|
+
./stop.sh
|
|
88
|
+
./start.sh 80
|
|
89
|
+
```
|
|
32
90
|
|
|
33
|
-
|
|
34
|
-
- the script will download a& install operato-board
|
|
91
|
+
## Docker
|
|
35
92
|
|
|
36
|
-
|
|
37
|
-
# install script for operato-board
|
|
38
|
-
curl -fsSL https://raw.githubusercontent.com/things-factory/things-factory/master/packages/operato-board/installer/install.sh | bash -s
|
|
39
|
-
```
|
|
93
|
+
Pre-built images are published to Docker Hub:
|
|
40
94
|
|
|
41
|
-
|
|
42
|
-
|
|
95
|
+
```bash
|
|
96
|
+
# pull & run the latest amd64 image on host port 4000
|
|
97
|
+
docker run --platform linux/amd64 -p 4000:3000 hatiolab/operato-board:latest
|
|
98
|
+
```
|
|
43
99
|
|
|
44
|
-
|
|
45
|
-
# data migration
|
|
46
|
-
$ ./start.sh
|
|
47
|
-
$ ./migrate.sh
|
|
48
|
-
$ ./stop.sh
|
|
100
|
+
Build locally:
|
|
49
101
|
|
|
50
|
-
|
|
51
|
-
|
|
52
|
-
|
|
102
|
+
```bash
|
|
103
|
+
yarn docker # amd64
|
|
104
|
+
yarn docker:arm # arm64
|
|
105
|
+
yarn docker:cn # mainland-China mirror variant
|
|
106
|
+
```
|
|
53
107
|
|
|
54
108
|
## License
|
|
55
109
|
|
|
56
|
-
|
|
57
|
-
|
|
58
|
-
|
|
59
|
-
|
|
60
|
-
|
|
61
|
-
|
|
62
|
-
- **
|
|
63
|
-
- **
|
|
64
|
-
- **
|
|
65
|
-
|
|
66
|
-
|
|
67
|
-
|
|
68
|
-
|
|
69
|
-
|
|
70
|
-
- **Max Target(Board) Count**
|
|
71
|
-
- Board count by domain
|
|
72
|
-
- 0 means unlimited
|
|
73
|
-
- **Max Domain Count**
|
|
74
|
-
- Max domain count in this host
|
|
75
|
-
- 0 means unlimited
|
|
76
|
-
|
|
77
|
-
### license format
|
|
110
|
+
Operato Board is shipped under the **MIT License**, but production deployments are gated by a host-bound license key.
|
|
111
|
+
|
|
112
|
+
### Requesting a license
|
|
113
|
+
|
|
114
|
+
Email the following to the license manager at <syj0130@hatiolab.com>:
|
|
115
|
+
|
|
116
|
+
- **Product Type** — `Things` or `Operato`
|
|
117
|
+
- **License Type** — `Production` or `Evaluation`
|
|
118
|
+
- **Purchase Date / Expiration Date**
|
|
119
|
+
- **Host Address** — hostname, IP, wildcard (e.g. `*.hatiolab.com`, `192.168.*.*`), or `UNLIMITED`
|
|
120
|
+
- **Max Target (Board) Count** — `0` = unlimited
|
|
121
|
+
- **Max Domain Count** — `0` = unlimited
|
|
122
|
+
|
|
123
|
+
### License file format
|
|
78
124
|
|
|
79
125
|
```json
|
|
80
126
|
{
|
|
81
127
|
"License Type": "Evaluation",
|
|
82
|
-
"Purchase Date": "
|
|
83
|
-
"Expiration Date": "
|
|
128
|
+
"Purchase Date": "2026.01.01",
|
|
129
|
+
"Expiration Date": "2026.12.31",
|
|
84
130
|
"Host Address": "UNLIMITED",
|
|
85
131
|
"Max Target Count": 0,
|
|
86
132
|
"Max Domain Count": 0,
|
|
87
|
-
"Key": ""
|
|
133
|
+
"Key": "<issued-key>"
|
|
88
134
|
}
|
|
89
135
|
```
|
|
90
136
|
|
|
91
|
-
###
|
|
137
|
+
### Wiring the license
|
|
92
138
|
|
|
93
139
|
```js
|
|
94
|
-
|
|
140
|
+
const licenseKey = require('./license').Key
|
|
141
|
+
|
|
95
142
|
module.exports = {
|
|
96
143
|
accessTokenCookieKey: 'access_token.board',
|
|
97
|
-
licenseKey
|
|
144
|
+
licenseKey
|
|
98
145
|
}
|
|
99
146
|
```
|
|
147
|
+
|
|
148
|
+
## Links
|
|
149
|
+
|
|
150
|
+
- Hatiolab — <https://www.hatiolab.com>
|
|
151
|
+
- things-factory platform — <https://github.com/hatiolab/things-factory>
|
package/_index.html
CHANGED
|
@@ -3,10 +3,10 @@
|
|
|
3
3
|
<head>
|
|
4
4
|
<meta charset="utf-8" />
|
|
5
5
|
<meta name="google" content="notranslate" />
|
|
6
|
-
<title>Operato Board</title>
|
|
6
|
+
<title>Operato Board · Zero-to-Twin</title>
|
|
7
7
|
<meta name="generator" content="Things Factory Starter Kit" />
|
|
8
8
|
<meta name="viewport" content="width=device-width, initial-scale=1, maximum-scale=1, user-scalable=no, viewport-fit=cover" />
|
|
9
|
-
<meta name="description" content="
|
|
9
|
+
<meta name="description" content="Zero-to-Twin." />
|
|
10
10
|
|
|
11
11
|
<base href="/" />
|
|
12
12
|
|
|
@@ -21,13 +21,13 @@
|
|
|
21
21
|
<!-- Add to homescreen for Chrome on Android. Fallback for manifest.json -->
|
|
22
22
|
<meta name="mobile-web-app-capable" content="yes" />
|
|
23
23
|
<meta name="application-name" content="Operato Board" />
|
|
24
|
-
<meta name="application-description" content="
|
|
24
|
+
<meta name="application-description" content="Zero-to-Twin." />
|
|
25
25
|
<meta name="application-copyright" content="Copyright © hatiolab.com. All Rights Reserved." />
|
|
26
26
|
<link rel="application-icon" href="/assets/manifest/icon-96x96.png" />
|
|
27
27
|
|
|
28
28
|
<!-- Add to homescreen for Safari on iOS -->
|
|
29
29
|
<meta name="apple-mobile-web-app-capable" content="yes" />
|
|
30
|
-
<meta name="apple-mobile-web-app-status-bar-style" content="
|
|
30
|
+
<meta name="apple-mobile-web-app-status-bar-style" content="black-translucent" />
|
|
31
31
|
<meta name="apple-mobile-web-app-title" content="Operato Board" />
|
|
32
32
|
|
|
33
33
|
<!-- Homescreen icons -->
|
|
@@ -42,20 +42,16 @@
|
|
|
42
42
|
<meta name="msapplication-TileColor" content="#897067" />
|
|
43
43
|
<meta name="msapplication-tap-highlight" content="no" />
|
|
44
44
|
|
|
45
|
-
<!--
|
|
45
|
+
<!-- Open Graph / Twitter cards -->
|
|
46
46
|
<meta name="twitter:card" content="summary" />
|
|
47
|
-
<meta name="twitter:site" content="@username" />
|
|
48
47
|
<meta property="og:type" content="website" />
|
|
49
|
-
<meta property="og:site_name" content="
|
|
48
|
+
<meta property="og:site_name" content="Operato Board" />
|
|
50
49
|
<meta property="og:image" content="assets/manifest/icon-144x144.png" />
|
|
51
50
|
|
|
52
|
-
<!-- Performance tip: hint to the browser to start the handshake for the fonts site -->
|
|
53
|
-
<link rel="preconnect" href="https://fonts.gstatic.com/" crossorigin />
|
|
54
51
|
<link href="/node_modules/material-symbols/index.css" rel="stylesheet" />
|
|
55
52
|
<link href="/node_modules/@fontsource/roboto/index.css" rel="stylesheet" />
|
|
56
53
|
<link rel="stylesheet" href="/theme.css" />
|
|
57
54
|
|
|
58
|
-
<!-- Global site tag (gtag.js) - Google Analytics -->
|
|
59
55
|
<script src="/static/index.js" defer></script>
|
|
60
56
|
</head>
|
|
61
57
|
<body class="light">
|
|
@@ -63,7 +59,5 @@
|
|
|
63
59
|
<noscript> Please enable JavaScript to view this website. </noscript>
|
|
64
60
|
<!-- Load webcomponents-loader.js to check and load any polyfills your browser needs -->
|
|
65
61
|
<script src="/node_modules/@webcomponents/webcomponentsjs/webcomponents-loader.js"></script>
|
|
66
|
-
|
|
67
|
-
<!-- Built with love using PWA Starter Kit -->
|
|
68
62
|
</body>
|
|
69
63
|
</html>
|