@flowerforce/flowerbase 1.6.2 → 1.6.3-beta.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.
Files changed (42) hide show
  1. package/README.md +49 -87
  2. package/dist/auth/controller.d.ts.map +1 -1
  3. package/dist/auth/controller.js +15 -3
  4. package/dist/auth/providers/anon-user/controller.d.ts.map +1 -1
  5. package/dist/auth/providers/anon-user/controller.js +5 -1
  6. package/dist/auth/providers/custom-function/schema.d.ts +1 -0
  7. package/dist/auth/providers/custom-function/schema.d.ts.map +1 -1
  8. package/dist/auth/providers/custom-function/schema.js +1 -0
  9. package/dist/auth/utils.d.ts +7 -0
  10. package/dist/auth/utils.d.ts.map +1 -1
  11. package/dist/auth/utils.js +6 -0
  12. package/dist/constants.d.ts +12 -0
  13. package/dist/constants.d.ts.map +1 -1
  14. package/dist/constants.js +26 -5
  15. package/dist/features/endpoints/utils.d.ts.map +1 -1
  16. package/dist/features/endpoints/utils.js +18 -0
  17. package/dist/features/functions/controller.d.ts.map +1 -1
  18. package/dist/features/functions/controller.js +10 -2
  19. package/dist/index.d.ts.map +1 -1
  20. package/dist/index.js +11 -1
  21. package/dist/monitoring/plugin.d.ts +7 -0
  22. package/dist/monitoring/plugin.d.ts.map +1 -0
  23. package/dist/monitoring/plugin.js +1347 -0
  24. package/dist/utils/initializer/exposeRoutes.d.ts.map +1 -1
  25. package/dist/utils/initializer/exposeRoutes.js +10 -2
  26. package/dist/utils/initializer/registerPlugins.d.ts.map +1 -1
  27. package/dist/utils/initializer/registerPlugins.js +10 -1
  28. package/package.json +5 -3
  29. package/src/auth/controller.ts +15 -1
  30. package/src/auth/providers/anon-user/controller.ts +5 -0
  31. package/src/auth/providers/custom-function/schema.ts +23 -24
  32. package/src/auth/utils.ts +6 -0
  33. package/src/constants.ts +22 -0
  34. package/src/features/endpoints/utils.ts +18 -0
  35. package/src/features/functions/controller.ts +10 -2
  36. package/src/index.ts +10 -1
  37. package/src/monitoring/plugin.ts +1528 -0
  38. package/src/monitoring/ui.css +983 -0
  39. package/src/monitoring/ui.html +289 -0
  40. package/src/monitoring/ui.js +1826 -0
  41. package/src/utils/initializer/exposeRoutes.ts +10 -2
  42. package/src/utils/initializer/registerPlugins.ts +13 -2
@@ -0,0 +1,289 @@
1
+ <!doctype html>
2
+ <html lang="en">
3
+
4
+ <head>
5
+ <meta charset="utf-8" />
6
+ <meta name="viewport" content="width=device-width, initial-scale=1" />
7
+ <title>Flowerbase monit</title>
8
+ <link rel="stylesheet" href="__MONIT_BASE__/ui.css" />
9
+ </head>
10
+
11
+ <body>
12
+ <header>
13
+ <div class="brand">
14
+ <div class="logo">Flowerbase</div>
15
+ <div class="title">monit</div>
16
+ </div>
17
+ <div class="status">
18
+ <span id="clock" class="pill"></span>
19
+ <span id="ramStat" class="pill">RAM --</span>
20
+ <span id="cpuStat" class="pill">CPU --</span>
21
+ <span id="wsStatus" class="pill">WS: offline</span>
22
+ </div>
23
+ </header>
24
+ <main>
25
+ <div class="tabs">
26
+ <button class="tab-button active" data-tab="events">events</button>
27
+ <button class="tab-button" data-tab="users">users</button>
28
+ <button class="tab-button" data-tab="functions">functions</button>
29
+ <button class="tab-button" data-tab="collections">collections</button>
30
+ </div>
31
+ <div class="tab-panels">
32
+ <section class="panel tab-panel active" data-panel="events">
33
+ <div class="panel-header">
34
+ <span>Events</span>
35
+ <span class="hint">last 24h cache</span>
36
+ </div>
37
+ <div class="split-grid">
38
+ <div class="column-stack">
39
+ <div class="controls">
40
+ <input id="searchInput" type="text" placeholder="search events or payload" />
41
+ <select id="typeFilter">
42
+ <option value="">all types</option>
43
+ <option value="auth">auth</option>
44
+ <option value="function">function</option>
45
+ <option value="trigger">trigger</option>
46
+ <option value="http_endpoint">http_endpoint</option>
47
+ <option value="api">api</option>
48
+ <option value="aws">aws</option>
49
+ <option value="rules">rules</option>
50
+ <option value="log">log</option>
51
+ <option value="error">error</option>
52
+ </select>
53
+ <button id="clearEvents" class="secondary">clear view</button>
54
+ </div>
55
+ <div id="eventsList" class="events-list"></div>
56
+ </div>
57
+ <div class="subpanel detail-panel">
58
+ <div class="detail-header">
59
+ <div class="subpanel-title">event detail</div>
60
+ <button id="eventFunctionButton" type="button" class="secondary small is-hidden">
61
+ use in invoke
62
+ </button>
63
+ </div>
64
+ <div id="eventDetail" class="event-detail">select an event to inspect payload</div>
65
+ </div>
66
+ </div>
67
+ </section>
68
+ <section class="panel tab-panel" data-panel="users">
69
+ <div class="panel-header">
70
+ <span>Users</span>
71
+ <button id="refreshUsers" class="secondary">refresh</button>
72
+ </div>
73
+ <div class="controls">
74
+ <input id="userSearch" class="wide-input" type="text" placeholder="search users (email, id, status)" />
75
+ </div>
76
+ <div class="split-grid users-grid">
77
+ <div class="column-stack">
78
+ <div class="subpanel list-panel">
79
+ <div class="subpanel-title">users</div>
80
+ <div id="mergedUsers" class="user-list"></div>
81
+ <div class="pager">
82
+ <div class="pager-controls">
83
+ <button id="customPrev" class="secondary">prev</button>
84
+ <button id="customNext" class="secondary">next</button>
85
+ </div>
86
+ <div>
87
+ page <span id="customPage">1</span>/<span id="customPages">1</span>
88
+ </div>
89
+ <div class="pager-controls">
90
+ <label for="customLimit">size</label>
91
+ <select id="customLimit">
92
+ <option value="10">10</option>
93
+ <option value="25" selected>25</option>
94
+ <option value="50">50</option>
95
+ <option value="100">100</option>
96
+ </select>
97
+ </div>
98
+ </div>
99
+ </div>
100
+ </div>
101
+ <div class="right-column">
102
+ <div class="subpanel detail-panel">
103
+ <div class="subpanel-title">user detail</div>
104
+ <pre id="userDetail" class="event-detail">select a user to inspect</pre>
105
+ </div>
106
+ <div class="subpanel">
107
+ <div class="subpanel-title">create user</div>
108
+ <form id="createUserForm">
109
+ <input id="newUserEmail" type="email" placeholder="email" required />
110
+ <input id="newUserPassword" type="password" placeholder="password" required />
111
+ <button type="submit">create</button>
112
+ </form>
113
+ <div id="createUserError" class="hint error is-hidden"></div>
114
+ </div>
115
+ </div>
116
+ </div>
117
+ </section>
118
+ <section class="panel tab-panel" data-panel="functions">
119
+ <div class="panel-header">
120
+ <span>Functions</span>
121
+ <button id="refreshFunctions" class="secondary">refresh</button>
122
+ </div>
123
+ <div class="split-grid functions-grid">
124
+ <div class="column-stack">
125
+ <div class="controls">
126
+ <input id="functionSearch" class="wide-input" type="text" placeholder="search functions" />
127
+ </div>
128
+ <div class="subpanel list-panel">
129
+ <div class="subpanel-title">functions</div>
130
+ <div id="functionList" class="user-list"></div>
131
+ </div>
132
+ <div class="subpanel list-panel">
133
+ <div class="subpanel-title">history</div>
134
+ <div id="functionHistory" class="history-list"></div>
135
+ </div>
136
+ </div>
137
+ <div class="right-column">
138
+ <div class="subpanel function-panel">
139
+ <div class="detail-header">
140
+ <div class="subpanel-title">invoke</div>
141
+ <div class="hint" id="functionSelected">select a function</div>
142
+ </div>
143
+ <div class="function-controls">
144
+ <div class="control-group">
145
+ <label for="functionUserInput">user</label>
146
+ <input id="functionUserInput" list="functionUserList" type="text" placeholder="paste user _id" />
147
+ <datalist id="functionUserList"></datalist>
148
+ </div>
149
+ <div class="control-group">
150
+ <label for="functionRunMode">run as</label>
151
+ <select id="functionRunMode">
152
+ <option value="system" selected>system</option>
153
+ <option value="user">user</option>
154
+ </select>
155
+ </div>
156
+ </div>
157
+ <div id="functionEditor" class="function-editor">
158
+ <div class="code-editor">
159
+ <div id="functionGutter" class="code-gutter">1</div>
160
+ <div class="code-surface">
161
+ <pre id="functionHighlight" class="code-highlight"></pre>
162
+ <textarea id="functionCode" placeholder="// function code" spellcheck="false" wrap="off"></textarea>
163
+ </div>
164
+ </div>
165
+ <div class="editor-actions">
166
+ <button id="restoreFunction" class="secondary">restore original</button>
167
+ <button id="invokeFunction">invoke</button>
168
+ </div>
169
+ <div class="hint" id="functionEditorStatus"></div>
170
+ </div>
171
+ <div class="function-io">
172
+ <div class="io-column">
173
+ <label for="functionArgs">args</label>
174
+ <textarea id="functionArgs" placeholder='[ "arg1", { "foo": "bar" } ]'></textarea>
175
+ </div>
176
+ <div class="io-column">
177
+ <label for="functionResult">result</label>
178
+ <pre id="functionResult" class="event-detail function-result"></pre>
179
+ </div>
180
+ </div>
181
+ </div>
182
+ </div>
183
+ </div>
184
+ </section>
185
+ <section class="panel tab-panel" data-panel="collections">
186
+ <div class="panel-header">
187
+ <span>Collections</span>
188
+ <button id="refreshCollections" class="secondary">refresh</button>
189
+ </div>
190
+ <div class="split-grid collections-grid">
191
+ <div class="column-stack">
192
+ <div class="controls">
193
+ <input id="collectionSearch" class="wide-input" type="text" placeholder="search collections" />
194
+ </div>
195
+ <div class="subpanel list-panel">
196
+ <div class="subpanel-title">collections</div>
197
+ <div id="collectionList" class="user-list"></div>
198
+ </div>
199
+ <div class="subpanel list-panel">
200
+ <div class="subpanel-title">history</div>
201
+ <div id="collectionHistory" class="history-list"></div>
202
+ </div>
203
+ </div>
204
+ <div class="right-column">
205
+ <div class="subpanel collection-detail">
206
+ <div class="detail-header">
207
+ <div class="subpanel-title">collection detail</div>
208
+ <div class="hint" id="collectionSelected">select a collection</div>
209
+ </div>
210
+ <div class="mini-tabs">
211
+ <button class="mini-tab active" data-collection-tab="query">query</button>
212
+ <button class="mini-tab" data-collection-tab="rules">rules</button>
213
+ </div>
214
+ <div class="mini-panels">
215
+ <div class="mini-panel active" data-collection-panel="query">
216
+ <div class="collection-controls">
217
+ <div class="control-group">
218
+ <label for="collectionUserInput">user</label>
219
+ <input id="collectionUserInput" list="collectionUserList" placeholder="select user" />
220
+ <datalist id="collectionUserList"></datalist>
221
+ </div>
222
+ <div class="control-group">
223
+ <label for="collectionRunMode">run as</label>
224
+ <select id="collectionRunMode">
225
+ <option value="system" selected>system</option>
226
+ <option value="user">user</option>
227
+ </select>
228
+ </div>
229
+ <div class="control-group">
230
+ <label for="collectionMode">mode</label>
231
+ <select id="collectionMode">
232
+ <option value="query" selected>query</option>
233
+ <option value="aggregate">aggregate</option>
234
+ </select>
235
+ </div>
236
+ <div class="control-group">
237
+ <label for="collectionSort">sort</label>
238
+ <input id="collectionSort" type="text" placeholder='{"createdAt": -1}' />
239
+ </div>
240
+ </div>
241
+ <div class="collection-io">
242
+ <div class="io-column">
243
+ <label for="collectionQuery">query</label>
244
+ <div class="json-editor">
245
+ <pre id="collectionQueryHighlight" class="json-highlight"></pre>
246
+ <textarea id="collectionQuery" placeholder='{"field": "value"}'></textarea>
247
+ </div>
248
+ </div>
249
+ <div class="io-column">
250
+ <label for="collectionAggregate">aggregate</label>
251
+ <div class="json-editor">
252
+ <pre id="collectionAggregateHighlight" class="json-highlight"></pre>
253
+ <textarea id="collectionAggregate" placeholder='[{ "$match": { "field": "value" } }]'></textarea>
254
+ </div>
255
+ </div>
256
+ </div>
257
+ <div class="editor-actions">
258
+ <button id="runCollectionQuery">run</button>
259
+ <div class="pager">
260
+ <div class="pager-controls">
261
+ <button id="collectionPrev" class="secondary">prev</button>
262
+ <button id="collectionNext" class="secondary">next</button>
263
+ </div>
264
+ <div>page <span id="collectionPage">1</span> · total <span id="collectionTotal">0</span></div>
265
+ </div>
266
+ </div>
267
+ <div class="result-toolbar">
268
+ <div class="toggle-buttons">
269
+ <button id="collectionViewJson" class="secondary active">json</button>
270
+ <button id="collectionViewTable" class="secondary">table</button>
271
+ </div>
272
+ </div>
273
+ <div id="collectionResult" class="event-detail function-result"></div>
274
+ </div>
275
+ <div class="mini-panel" data-collection-panel="rules">
276
+ <pre id="collectionRules" class="event-detail">select a collection</pre>
277
+ </div>
278
+ </div>
279
+ </div>
280
+ </div>
281
+ </div>
282
+ </section>
283
+ </div>
284
+ </main>
285
+ <script src="__MONIT_BASE__/ui.js"></script>
286
+
287
+ </body>
288
+
289
+ </html>