@things-factory/api 7.0.0-alpha.9 → 7.0.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/client/components/api-list.js +3 -3
- package/client/components/api-navigator.js +18 -16
- package/client/components/api-tester.js +43 -41
- package/client/pages/api-page-template.js +20 -20
- package/client/pages/api-swagger.js +3 -3
- package/dist-server/index.d.ts +2 -0
- package/dist-server/routers/api-docs-router.d.ts +3 -0
- package/dist-server/routers/api-docs-router.js +2 -2
- package/dist-server/routers/api-docs-router.js.map +1 -1
- package/dist-server/routers/index.d.ts +2 -0
- package/dist-server/routers/restful-api-router.d.ts +1 -0
- package/dist-server/routers/restful-api-router.js.map +1 -1
- package/dist-server/routes.d.ts +1 -0
- package/dist-server/tsconfig.tsbuildinfo +1 -1
- package/package.json +5 -5
|
@@ -1,5 +1,5 @@
|
|
|
1
1
|
import { LitElement, html, css } from 'lit'
|
|
2
|
-
import { ScrollbarStyles } from '@
|
|
2
|
+
import { ScrollbarStyles } from '@operato/styles'
|
|
3
3
|
import '@things-factory/component-ui'
|
|
4
4
|
|
|
5
5
|
class ApiList extends LitElement {
|
|
@@ -25,9 +25,9 @@ class ApiList extends LitElement {
|
|
|
25
25
|
div[tester] {
|
|
26
26
|
flex: 1;
|
|
27
27
|
display: flex;
|
|
28
|
-
background-color: var(--
|
|
28
|
+
background-color: var(--md-sys-color-surface);
|
|
29
29
|
border-radius: var(--border-radius);
|
|
30
|
-
border: var(--border-
|
|
30
|
+
border: var(--border-dim-color);
|
|
31
31
|
box-shadow: var(--box-shadow);
|
|
32
32
|
overflow: hidden;
|
|
33
33
|
}
|
|
@@ -1,3 +1,5 @@
|
|
|
1
|
+
import '@material/web/icon/icon.js'
|
|
2
|
+
|
|
1
3
|
import { LitElement, html, css } from 'lit'
|
|
2
4
|
|
|
3
5
|
class ApiNavigator extends LitElement {
|
|
@@ -5,14 +7,14 @@ class ApiNavigator extends LitElement {
|
|
|
5
7
|
return [
|
|
6
8
|
css`
|
|
7
9
|
.nav-bar {
|
|
8
|
-
background-color: var(--
|
|
9
|
-
border: 1px solid var(--
|
|
10
|
+
background-color: var(--md-sys-color-surface);
|
|
11
|
+
border: 1px solid var(--md-sys-color-primary);
|
|
10
12
|
border-radius: var(--border-radius);
|
|
11
|
-
margin: 0 0 var(--
|
|
12
|
-
padding: var(--
|
|
13
|
+
margin: 0 0 var(--spacing-medium) 0;
|
|
14
|
+
padding: var(--spacing-small);
|
|
13
15
|
transition: opacity ease-in-out 0.3s;
|
|
14
16
|
opacity: 100%;
|
|
15
|
-
color: var(--
|
|
17
|
+
color: var(--md-sys-color-secondary);
|
|
16
18
|
font-size: var(--fontsize-default);
|
|
17
19
|
}
|
|
18
20
|
.nav-bar[scrolling] {
|
|
@@ -22,18 +24,18 @@ class ApiNavigator extends LitElement {
|
|
|
22
24
|
.nav-bar * {
|
|
23
25
|
vertical-align: middle;
|
|
24
26
|
}
|
|
25
|
-
|
|
26
|
-
--
|
|
27
|
-
padding-left: var(--
|
|
27
|
+
md-icon {
|
|
28
|
+
--md-icon-size: 14px;
|
|
29
|
+
padding-left: var(--spacing-small);
|
|
28
30
|
position: relative;
|
|
29
31
|
margin-top: -2px;
|
|
30
32
|
}
|
|
31
33
|
span {
|
|
32
|
-
border-right: var(--border-
|
|
34
|
+
border-right: var(--border-dim-color);
|
|
33
35
|
border-width: 0 1px;
|
|
34
|
-
padding: 0 var(--
|
|
36
|
+
padding: 0 var(--spacing-medium) 0 var(--spacing-small);
|
|
35
37
|
opacity: 0.8;
|
|
36
|
-
color: var(--
|
|
38
|
+
color: var(--md-sys-color-secondary);
|
|
37
39
|
font-size: var(--fontsize-small);
|
|
38
40
|
}
|
|
39
41
|
span[activate] {
|
|
@@ -47,14 +49,14 @@ class ApiNavigator extends LitElement {
|
|
|
47
49
|
width: 25px;
|
|
48
50
|
}
|
|
49
51
|
label,
|
|
50
|
-
|
|
52
|
+
md-icon {
|
|
51
53
|
display: none;
|
|
52
54
|
}
|
|
53
55
|
.nav-bar {
|
|
54
|
-
background-color:
|
|
56
|
+
background-color: var(--md-sys-color-primary-container);
|
|
55
57
|
border: none;
|
|
56
58
|
border-radius: 15px;
|
|
57
|
-
padding: var(--
|
|
59
|
+
padding: var(--spacing-small) 0;
|
|
58
60
|
opacity: 0%;
|
|
59
61
|
text-align: center;
|
|
60
62
|
}
|
|
@@ -62,7 +64,7 @@ class ApiNavigator extends LitElement {
|
|
|
62
64
|
display: block;
|
|
63
65
|
border: none;
|
|
64
66
|
margin: auto;
|
|
65
|
-
padding: 2px var(--
|
|
67
|
+
padding: 2px var(--spacing-small) 0 var(--spacing-small);
|
|
66
68
|
font-size: 12px;
|
|
67
69
|
}
|
|
68
70
|
}
|
|
@@ -93,7 +95,7 @@ class ApiNavigator extends LitElement {
|
|
|
93
95
|
|
|
94
96
|
return html`
|
|
95
97
|
<div class="nav-bar" ?scrolling=${scrolling}>
|
|
96
|
-
<
|
|
98
|
+
<md-icon>anchor</md-icon> <label>Quick Find : </label>
|
|
97
99
|
${this.indexes.map(idx => {
|
|
98
100
|
const isActiveIndex = activeIndexes.indexOf(idx) >= 0
|
|
99
101
|
return html`
|
|
@@ -1,3 +1,5 @@
|
|
|
1
|
+
import '@material/web/icon/icon.js'
|
|
2
|
+
|
|
1
3
|
import { html, css, LitElement } from 'lit'
|
|
2
4
|
|
|
3
5
|
const NOAPI = {
|
|
@@ -15,16 +17,16 @@ class APITester extends LitElement {
|
|
|
15
17
|
display: flex;
|
|
16
18
|
flex-direction: column;
|
|
17
19
|
overflow: auto;
|
|
18
|
-
background-color: var(--
|
|
19
|
-
padding: var(--
|
|
20
|
+
background-color: var(--md-sys-color-surface);
|
|
21
|
+
padding: var(--spacing-large);
|
|
20
22
|
font: normal 15px var(--theme-font);
|
|
21
|
-
color: var(--
|
|
23
|
+
color: var(--md-sys-color-secondary);
|
|
22
24
|
}
|
|
23
25
|
|
|
24
26
|
:host > * {
|
|
25
27
|
box-sizing: border-box;
|
|
26
28
|
width: 100%;
|
|
27
|
-
margin: var(--
|
|
29
|
+
margin: var(--spacing-small) 0;
|
|
28
30
|
}
|
|
29
31
|
|
|
30
32
|
label {
|
|
@@ -42,20 +44,20 @@ class APITester extends LitElement {
|
|
|
42
44
|
|
|
43
45
|
pre {
|
|
44
46
|
background-color: #f1f1f1;
|
|
45
|
-
padding: var(--
|
|
47
|
+
padding: var(--spacing-medium);
|
|
46
48
|
white-space: pre-wrap;
|
|
47
49
|
word-wrap: break-word;
|
|
48
50
|
}
|
|
49
51
|
|
|
50
52
|
hr {
|
|
51
53
|
border-style: dashed;
|
|
52
|
-
margin: var(--
|
|
54
|
+
margin: var(--spacing-large) 0 !important;
|
|
53
55
|
opacity: 0.2;
|
|
54
56
|
}
|
|
55
57
|
|
|
56
58
|
input,
|
|
57
59
|
textarea {
|
|
58
|
-
border: var(--border-
|
|
60
|
+
border: var(--border-dim-color);
|
|
59
61
|
border-radius: var(--border-radius);
|
|
60
62
|
margin: var(--input-margin);
|
|
61
63
|
padding: var(--input-padding);
|
|
@@ -73,35 +75,35 @@ class APITester extends LitElement {
|
|
|
73
75
|
}
|
|
74
76
|
th,
|
|
75
77
|
td {
|
|
76
|
-
border: var(--border-
|
|
77
|
-
padding: var(--
|
|
78
|
+
border: var(--border-dim-color);
|
|
79
|
+
padding: var(--spacing-medium);
|
|
78
80
|
}
|
|
79
81
|
th {
|
|
80
82
|
width: 20%;
|
|
81
|
-
background-color: var(--
|
|
83
|
+
background-color: var(--md-sys-color-background);
|
|
82
84
|
}
|
|
83
85
|
td > * {
|
|
84
86
|
box-sizing: border-box;
|
|
85
87
|
width: 100%;
|
|
86
88
|
margin: 0;
|
|
87
|
-
padding: var(--
|
|
89
|
+
padding: var(--spacing-small);
|
|
88
90
|
}
|
|
89
91
|
|
|
90
92
|
form > * {
|
|
91
93
|
box-sizing: border-box;
|
|
92
94
|
width: 100%;
|
|
93
95
|
margin: 0;
|
|
94
|
-
padding: var(--
|
|
96
|
+
padding: var(--spacing-small);
|
|
95
97
|
}
|
|
96
98
|
|
|
97
99
|
[note] {
|
|
98
100
|
background-color: #f1f1f1;
|
|
99
|
-
padding: var(--
|
|
101
|
+
padding: var(--spacing-medium);
|
|
100
102
|
border-left: 5px solid rgba(0, 0, 0, 0.2);
|
|
101
|
-
--
|
|
103
|
+
--md-icon-size: 18px;
|
|
102
104
|
color: var(--secondary-background-color);
|
|
103
105
|
}
|
|
104
|
-
[note]
|
|
106
|
+
[note] md-icon {
|
|
105
107
|
margin-right: 5px;
|
|
106
108
|
vertical-align: middle;
|
|
107
109
|
}
|
|
@@ -110,7 +112,7 @@ class APITester extends LitElement {
|
|
|
110
112
|
background-color: var(--button-primary-background-color);
|
|
111
113
|
border: var(--button-border);
|
|
112
114
|
border-radius: var(--button-border-radius);
|
|
113
|
-
margin: var(--
|
|
115
|
+
margin: var(--spacing-medium) 0 0 0;
|
|
114
116
|
padding: var(--button-padding);
|
|
115
117
|
color: var(--button-primary-color);
|
|
116
118
|
font: var(--button-primary-font);
|
|
@@ -170,7 +172,7 @@ class APITester extends LitElement {
|
|
|
170
172
|
</tr>
|
|
171
173
|
`
|
|
172
174
|
)
|
|
173
|
-
: html`<div note><
|
|
175
|
+
: html`<div note><md-icon>content_paste</md-icon>no parameter</div>`}
|
|
174
176
|
</table>
|
|
175
177
|
</div>
|
|
176
178
|
|
|
@@ -192,25 +194,25 @@ class APITester extends LitElement {
|
|
|
192
194
|
</p>
|
|
193
195
|
`
|
|
194
196
|
: api.body == 'form-data' || api.body == 'x-www-form-urlencoded'
|
|
195
|
-
|
|
196
|
-
|
|
197
|
-
|
|
198
|
-
|
|
199
|
-
|
|
200
|
-
|
|
201
|
-
|
|
202
|
-
|
|
203
|
-
|
|
204
|
-
|
|
205
|
-
|
|
206
|
-
|
|
207
|
-
|
|
208
|
-
|
|
209
|
-
|
|
210
|
-
|
|
211
|
-
|
|
212
|
-
|
|
213
|
-
|
|
197
|
+
? html`
|
|
198
|
+
<label>form parameters</label>
|
|
199
|
+
<p>
|
|
200
|
+
${api.parameters && api.parameters.length > 0
|
|
201
|
+
? 'You should set following query parameters'
|
|
202
|
+
: 'No form parameters required'}
|
|
203
|
+
</p>
|
|
204
|
+
`
|
|
205
|
+
: api.body == 'raw'
|
|
206
|
+
? html`
|
|
207
|
+
<label>body</label>
|
|
208
|
+
<p>You can set body in JSON format</p>
|
|
209
|
+
`
|
|
210
|
+
: api.body == 'binary'
|
|
211
|
+
? html`
|
|
212
|
+
<label>attachment</label>
|
|
213
|
+
<p>attachment description..</p>
|
|
214
|
+
`
|
|
215
|
+
: html``}
|
|
214
216
|
|
|
215
217
|
<form parameters @submit=${e => this.onSubmit(e)}>
|
|
216
218
|
${api.method == 'get' || api.body == 'form-data' || api.body == 'x-www-form-urlencoded'
|
|
@@ -225,14 +227,14 @@ class APITester extends LitElement {
|
|
|
225
227
|
</tr>
|
|
226
228
|
`
|
|
227
229
|
)
|
|
228
|
-
: html`<div note><
|
|
230
|
+
: html`<div note><md-icon>content_paste</md-icon>no parameter</div>`}
|
|
229
231
|
</table>
|
|
230
232
|
`
|
|
231
233
|
: api.body == 'raw'
|
|
232
|
-
|
|
233
|
-
|
|
234
|
-
|
|
235
|
-
|
|
234
|
+
? html` <textarea name="body" token rows="4"></textarea> `
|
|
235
|
+
: api.body == 'binary'
|
|
236
|
+
? html` <input type="file" id="body" name="body" accept="*/*" /> `
|
|
237
|
+
: html``}
|
|
236
238
|
<input type="submit" value="Submit" button-primary />
|
|
237
239
|
</form>
|
|
238
240
|
|
|
@@ -1,5 +1,5 @@
|
|
|
1
1
|
import { html, css, LitElement } from 'lit'
|
|
2
|
-
import { PageView } from '@
|
|
2
|
+
import { PageView } from '@operato/shell'
|
|
3
3
|
|
|
4
4
|
import '../components/api-tester'
|
|
5
5
|
import '../components/api-list'
|
|
@@ -11,8 +11,8 @@ export class APIPageTemplate extends PageView {
|
|
|
11
11
|
:host {
|
|
12
12
|
display: flex;
|
|
13
13
|
flex-direction: column;
|
|
14
|
-
background-color: var(--
|
|
15
|
-
padding: var(--
|
|
14
|
+
background-color: var(--md-sys-color-background);
|
|
15
|
+
padding: var(--spacing-large);
|
|
16
16
|
overflow: auto;
|
|
17
17
|
}
|
|
18
18
|
h2 {
|
|
@@ -21,18 +21,18 @@ export class APIPageTemplate extends PageView {
|
|
|
21
21
|
color: var(--title-text-color);
|
|
22
22
|
}
|
|
23
23
|
h2 strong {
|
|
24
|
-
color: var(--
|
|
24
|
+
color: var(--md-sys-color-primary);
|
|
25
25
|
font-size: 1.1em;
|
|
26
26
|
}
|
|
27
27
|
[page-description] {
|
|
28
|
-
margin: var(--
|
|
28
|
+
margin: var(--spacing-small) 0;
|
|
29
29
|
font: var(--page-description-font);
|
|
30
30
|
}
|
|
31
31
|
|
|
32
32
|
div[header] {
|
|
33
33
|
display: flex;
|
|
34
34
|
flex-direction: row;
|
|
35
|
-
margin-bottom: var(--
|
|
35
|
+
margin-bottom: var(--spacing-small);
|
|
36
36
|
max-width: var(--content-container-max-width);
|
|
37
37
|
}
|
|
38
38
|
[headline] {
|
|
@@ -42,12 +42,12 @@ export class APIPageTemplate extends PageView {
|
|
|
42
42
|
width: 200px;
|
|
43
43
|
text-align: right;
|
|
44
44
|
font: normal 14px var(--theme-font);
|
|
45
|
-
color: var(--
|
|
45
|
+
color: var(--md-sys-color-secondary);
|
|
46
46
|
}
|
|
47
47
|
[version] select {
|
|
48
48
|
margin: var(--input-margin);
|
|
49
|
-
padding: var(--
|
|
50
|
-
border: var(--border-
|
|
49
|
+
padding: var(--spacing-small);
|
|
50
|
+
border: var(--border-dim-color);
|
|
51
51
|
border-radius: var(--border-radius);
|
|
52
52
|
font: normal 16px var(--theme-font);
|
|
53
53
|
}
|
|
@@ -56,7 +56,7 @@ export class APIPageTemplate extends PageView {
|
|
|
56
56
|
flex: 1;
|
|
57
57
|
display: flex;
|
|
58
58
|
flex-direction: row;
|
|
59
|
-
background-color: var(--
|
|
59
|
+
background-color: var(--md-sys-color-surface);
|
|
60
60
|
border-radius: var(--border-radius);
|
|
61
61
|
box-shadow: var(--box-shadow);
|
|
62
62
|
overflow: auto;
|
|
@@ -76,33 +76,33 @@ export class APIPageTemplate extends PageView {
|
|
|
76
76
|
}
|
|
77
77
|
|
|
78
78
|
li {
|
|
79
|
-
padding: var(--
|
|
80
|
-
border: var(--border-
|
|
79
|
+
padding: var(--spacing-medium) var(--spacing-large);
|
|
80
|
+
border: var(--border-dim-color);
|
|
81
81
|
margin-bottom: -1px;
|
|
82
82
|
font: bold 16px var(--theme-font);
|
|
83
|
-
color: var(--
|
|
83
|
+
color: var(--md-sys-color-secondary);
|
|
84
84
|
}
|
|
85
85
|
|
|
86
86
|
li[active] {
|
|
87
|
-
background-color: var(--
|
|
87
|
+
background-color: var(--md-sys-color-primary);
|
|
88
88
|
box-shadow: var(--box-shadow);
|
|
89
|
-
padding: var(--
|
|
90
|
-
color: var(--
|
|
89
|
+
padding: var(--spacing-medium) var(--spacing-large);
|
|
90
|
+
color: var(--md-sys-color-on-primary);
|
|
91
91
|
}
|
|
92
92
|
li span {
|
|
93
93
|
display: block;
|
|
94
|
-
padding-top: var(--
|
|
94
|
+
padding-top: var(--spacing-small);
|
|
95
95
|
opacity: 0.7;
|
|
96
96
|
font: normal 14px var(--theme-font);
|
|
97
97
|
}
|
|
98
98
|
|
|
99
99
|
select {
|
|
100
|
-
background-color: var(--
|
|
100
|
+
background-color: var(--md-sys-color-surface-variant);
|
|
101
101
|
}
|
|
102
102
|
|
|
103
103
|
@media screen and (max-width: 480px) {
|
|
104
104
|
:host {
|
|
105
|
-
padding: var(--
|
|
105
|
+
padding: var(--spacing-medium);
|
|
106
106
|
}
|
|
107
107
|
div[header] {
|
|
108
108
|
flex-direction: column;
|
|
@@ -121,7 +121,7 @@ export class APIPageTemplate extends PageView {
|
|
|
121
121
|
}
|
|
122
122
|
[version] select {
|
|
123
123
|
flex: 1;
|
|
124
|
-
margin-left: var(--
|
|
124
|
+
margin-left: var(--spacing-small);
|
|
125
125
|
}
|
|
126
126
|
}
|
|
127
127
|
`
|
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
import { html, css, LitElement } from 'lit'
|
|
2
|
-
import { PageView } from '@
|
|
3
|
-
import { localize, i18next } from '@
|
|
4
|
-
import { ScrollbarStyles } from '@
|
|
2
|
+
import { PageView } from '@operato/shell'
|
|
3
|
+
import { localize, i18next } from '@operato/i18n'
|
|
4
|
+
import { ScrollbarStyles } from '@operato/styles'
|
|
5
5
|
|
|
6
6
|
export class APISwagger extends localize(i18next)(PageView) {
|
|
7
7
|
static get styles() {
|
|
@@ -1,6 +1,7 @@
|
|
|
1
1
|
"use strict";
|
|
2
2
|
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
-
exports.
|
|
3
|
+
exports.apiDocsRouter = exports.PREFIX = void 0;
|
|
4
|
+
exports.initMiddlewares = initMiddlewares;
|
|
4
5
|
const tslib_1 = require("tslib");
|
|
5
6
|
const koa_router_1 = tslib_1.__importDefault(require("koa-router"));
|
|
6
7
|
const koa2_swagger_ui_1 = require("koa2-swagger-ui");
|
|
@@ -58,5 +59,4 @@ function initMiddlewares(app) {
|
|
|
58
59
|
context.redirect(`${exports.PREFIX}/${defaultVersion}`);
|
|
59
60
|
});
|
|
60
61
|
}
|
|
61
|
-
exports.initMiddlewares = initMiddlewares;
|
|
62
62
|
//# sourceMappingURL=api-docs-router.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"api-docs-router.js","sourceRoot":"","sources":["../../server/routers/api-docs-router.ts"],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"api-docs-router.js","sourceRoot":"","sources":["../../server/routers/api-docs-router.ts"],"names":[],"mappings":"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","sourcesContent":["import Router from 'koa-router'\nimport { koaSwagger } from 'koa2-swagger-ui'\nimport { merge } from 'lodash'\nimport path from 'path'\nimport yaml from 'yamljs'\n\nimport { appRootPath } from '@things-factory/env'\n\nconst openapiDir = path.join(appRootPath, 'dist-app', 'openapi')\n\nexport const PREFIX = '/api-docs'\nexport const apiDocsRouter = new Router()\n\nexport function initMiddlewares(app) {\n var fs = require('fs')\n\n var spec = {}\n\n function build() {\n try {\n if (!fs.existsSync(openapiDir)) {\n return\n }\n\n var files = fs.readdirSync(openapiDir)\n\n files\n .filter(filename => /\\.yaml$/.test(filename))\n .forEach(file => {\n const version = path.basename(file, path.extname(file))\n\n if (fs.existsSync(path.join(openapiDir, version))) {\n spec[version] = fs\n .readdirSync(path.join(openapiDir, version))\n .filter(filename => /\\.yaml$/.test(filename))\n .reduce(\n (merged, file) => {\n const parsed = yaml.parse(fs.readFileSync(path.join(openapiDir, version, file)).toString())\n return merge(merged, parsed)\n },\n {\n ...yaml.parse(fs.readFileSync(path.join(openapiDir, file)).toString())\n }\n )\n } else {\n spec[version] = yaml.parse(fs.readFileSync(path.join(openapiDir, file)).toString())\n }\n })\n } catch (err) {\n console.error('build error', err)\n }\n }\n\n build()\n\n process.on('client-rebuilt' as any, (app, compilerFileSystem) => {\n /* change filesystem whenever webpacking assets done. only for development mode. */\n fs = compilerFileSystem\n build()\n })\n\n apiDocsRouter.get(`/:version`, async (context, next) => {\n let { version } = context.params\n\n return await koaSwagger({ routePrefix: false, swaggerOptions: { spec: spec[version] || {} } })(context, next)\n })\n\n // fallback\n apiDocsRouter.get('(.*)', async (context, next) => {\n var defaultVersion = Object.keys(spec)[0]\n\n context.redirect(`${PREFIX}/${defaultVersion}`)\n })\n}\n"]}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
export declare const restfulApiRouter: any;
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"restful-api-router.js","sourceRoot":"","sources":["../../server/routers/restful-api-router.ts"],"names":[],"mappings":";;;;AAAA,oEAA+B;AAE/B,yDAAmG;AACnG,iDAA0D;AAE7C,QAAA,gBAAgB,GAAG,IAAI,oBAAM,EAAE,CAAA;AAE5C,wBAAgB,CAAC,GAAG,CAAC,qCAAyB,CAAC,CAAA;AAC/C,wBAAgB,CAAC,GAAG,CAAC,wCAA4B,CAAC,CAAA;AAElD,wBAAgB,CAAC,GAAG,CAAC,KAAK,EAAE,OAAO,EAAE,IAAI,EAAE,EAAE;IAC3C,OAAO,CAAC,KAAK,CAAC,OAAO,GAAG,OAAO,CAAC,IAAI,CAAC,KAAK,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,CAAA;IAClD,OAAO,CAAC,KAAK,CAAC,MAAM,GAAG,0BAAkB,CAAC,MAAM,CAAA;IAEhD,MAAM,EAAE,IAAI,EAAE,MAAM,EAAE,OAAO,EAAE,GAAG,OAAO,CAAC,KAAK,CAAA;IAE/C,IAAI,CAAC,IAAI,EAAE;
|
|
1
|
+
{"version":3,"file":"restful-api-router.js","sourceRoot":"","sources":["../../server/routers/restful-api-router.ts"],"names":[],"mappings":";;;;AAAA,oEAA+B;AAE/B,yDAAmG;AACnG,iDAA0D;AAE7C,QAAA,gBAAgB,GAAG,IAAI,oBAAM,EAAE,CAAA;AAE5C,wBAAgB,CAAC,GAAG,CAAC,qCAAyB,CAAC,CAAA;AAC/C,wBAAgB,CAAC,GAAG,CAAC,wCAA4B,CAAC,CAAA;AAElD,wBAAgB,CAAC,GAAG,CAAC,KAAK,EAAE,OAAO,EAAE,IAAI,EAAE,EAAE;IAC3C,OAAO,CAAC,KAAK,CAAC,OAAO,GAAG,OAAO,CAAC,IAAI,CAAC,KAAK,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,CAAA;IAClD,OAAO,CAAC,KAAK,CAAC,MAAM,GAAG,0BAAkB,CAAC,MAAM,CAAA;IAEhD,MAAM,EAAE,IAAI,EAAE,MAAM,EAAE,OAAO,EAAE,GAAG,OAAO,CAAC,KAAK,CAAA;IAE/C,IAAI,CAAC,IAAI,EAAE,CAAC;QACV,OAAO,CAAC,MAAM,GAAG,GAAG,CAAA;QACpB,OAAO,CAAC,IAAI,GAAG,OAAO,CAAC,CAAC,CAAC,sBAAsB,CAAC,CAAA;QAChD,OAAM;IACR,CAAC;IAED,MAAM,IAAI,EAAE,CAAA;AACd,CAAC,CAAC,CAAA","sourcesContent":["import Router from 'koa-router'\n\nimport { domainAuthenticateMiddleware, jwtAuthenticateMiddleware } from '@things-factory/auth-base'\nimport { GraphqlLocalClient } from '@things-factory/shell'\n\nexport const restfulApiRouter = new Router()\n\nrestfulApiRouter.use(jwtAuthenticateMiddleware)\nrestfulApiRouter.use(domainAuthenticateMiddleware)\n\nrestfulApiRouter.use(async (context, next) => {\n context.state.version = context.path.split('/')[2]\n context.state.client = GraphqlLocalClient.client\n\n const { user, domain, version } = context.state\n\n if (!user) {\n context.status = 401\n context.body = context.t('error.user not found')\n return\n }\n\n await next()\n})\n"]}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
export {};
|