ironflock 1.5.1 → 1.5.2
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 +100 -0
- package/dist/index.cjs +2 -2
- package/dist/index.cjs.map +1 -1
- package/dist/index.d.ts +50 -0
- package/dist/index.mjs +489 -419
- package/dist/index.mjs.map +1 -1
- package/package.json +1 -1
package/dist/index.mjs
CHANGED
|
@@ -1,21 +1,21 @@
|
|
|
1
|
-
import
|
|
1
|
+
import K from "autobahn";
|
|
2
2
|
function B(h) {
|
|
3
3
|
return h && h.__esModule && Object.prototype.hasOwnProperty.call(h, "default") ? h.default : h;
|
|
4
4
|
}
|
|
5
|
-
var
|
|
5
|
+
var O = { exports: {} }, C;
|
|
6
6
|
function Y() {
|
|
7
7
|
return C || (C = 1, (function(h) {
|
|
8
|
-
var
|
|
8
|
+
var t = Object.prototype.hasOwnProperty, s = "~";
|
|
9
9
|
function a() {
|
|
10
10
|
}
|
|
11
|
-
Object.create && (a.prototype = /* @__PURE__ */ Object.create(null), new a().__proto__ || (
|
|
12
|
-
function
|
|
11
|
+
Object.create && (a.prototype = /* @__PURE__ */ Object.create(null), new a().__proto__ || (s = !1));
|
|
12
|
+
function l(o, e, n) {
|
|
13
13
|
this.fn = o, this.context = e, this.once = n || !1;
|
|
14
14
|
}
|
|
15
|
-
function i(o, e, n,
|
|
15
|
+
function i(o, e, n, c, d) {
|
|
16
16
|
if (typeof n != "function")
|
|
17
17
|
throw new TypeError("The listener must be a function");
|
|
18
|
-
var v = new
|
|
18
|
+
var v = new l(n, c || o, d), f = s ? s + e : e;
|
|
19
19
|
return o._events[f] ? o._events[f].fn ? o._events[f] = [o._events[f], v] : o._events[f].push(v) : (o._events[f] = v, o._eventsCount++), o;
|
|
20
20
|
}
|
|
21
21
|
function u(o, e) {
|
|
@@ -25,23 +25,23 @@ function Y() {
|
|
|
25
25
|
this._events = new a(), this._eventsCount = 0;
|
|
26
26
|
}
|
|
27
27
|
r.prototype.eventNames = function() {
|
|
28
|
-
var e = [], n,
|
|
28
|
+
var e = [], n, c;
|
|
29
29
|
if (this._eventsCount === 0) return e;
|
|
30
|
-
for (
|
|
31
|
-
|
|
30
|
+
for (c in n = this._events)
|
|
31
|
+
t.call(n, c) && e.push(s ? c.slice(1) : c);
|
|
32
32
|
return Object.getOwnPropertySymbols ? e.concat(Object.getOwnPropertySymbols(n)) : e;
|
|
33
33
|
}, r.prototype.listeners = function(e) {
|
|
34
|
-
var n =
|
|
35
|
-
if (!
|
|
36
|
-
if (
|
|
37
|
-
for (var d = 0, v =
|
|
38
|
-
f[d] =
|
|
34
|
+
var n = s ? s + e : e, c = this._events[n];
|
|
35
|
+
if (!c) return [];
|
|
36
|
+
if (c.fn) return [c.fn];
|
|
37
|
+
for (var d = 0, v = c.length, f = new Array(v); d < v; d++)
|
|
38
|
+
f[d] = c[d].fn;
|
|
39
39
|
return f;
|
|
40
40
|
}, r.prototype.listenerCount = function(e) {
|
|
41
|
-
var n =
|
|
42
|
-
return
|
|
43
|
-
}, r.prototype.emit = function(e, n,
|
|
44
|
-
var g =
|
|
41
|
+
var n = s ? s + e : e, c = this._events[n];
|
|
42
|
+
return c ? c.fn ? 1 : c.length : 0;
|
|
43
|
+
}, r.prototype.emit = function(e, n, c, d, v, f) {
|
|
44
|
+
var g = s ? s + e : e;
|
|
45
45
|
if (!this._events[g]) return !1;
|
|
46
46
|
var y = this._events[g], A = arguments.length, E, m;
|
|
47
47
|
if (y.fn) {
|
|
@@ -51,13 +51,13 @@ function Y() {
|
|
|
51
51
|
case 2:
|
|
52
52
|
return y.fn.call(y.context, n), !0;
|
|
53
53
|
case 3:
|
|
54
|
-
return y.fn.call(y.context, n,
|
|
54
|
+
return y.fn.call(y.context, n, c), !0;
|
|
55
55
|
case 4:
|
|
56
|
-
return y.fn.call(y.context, n,
|
|
56
|
+
return y.fn.call(y.context, n, c, d), !0;
|
|
57
57
|
case 5:
|
|
58
|
-
return y.fn.call(y.context, n,
|
|
58
|
+
return y.fn.call(y.context, n, c, d, v), !0;
|
|
59
59
|
case 6:
|
|
60
|
-
return y.fn.call(y.context, n,
|
|
60
|
+
return y.fn.call(y.context, n, c, d, v, f), !0;
|
|
61
61
|
}
|
|
62
62
|
for (m = 1, E = new Array(A - 1); m < A; m++)
|
|
63
63
|
E[m - 1] = arguments[m];
|
|
@@ -73,10 +73,10 @@ function Y() {
|
|
|
73
73
|
y[m].fn.call(y[m].context, n);
|
|
74
74
|
break;
|
|
75
75
|
case 3:
|
|
76
|
-
y[m].fn.call(y[m].context, n,
|
|
76
|
+
y[m].fn.call(y[m].context, n, c);
|
|
77
77
|
break;
|
|
78
78
|
case 4:
|
|
79
|
-
y[m].fn.call(y[m].context, n,
|
|
79
|
+
y[m].fn.call(y[m].context, n, c, d);
|
|
80
80
|
break;
|
|
81
81
|
default:
|
|
82
82
|
if (!E) for ($ = 1, E = new Array(A - 1); $ < A; $++)
|
|
@@ -85,77 +85,77 @@ function Y() {
|
|
|
85
85
|
}
|
|
86
86
|
}
|
|
87
87
|
return !0;
|
|
88
|
-
}, r.prototype.on = function(e, n,
|
|
89
|
-
return i(this, e, n,
|
|
90
|
-
}, r.prototype.once = function(e, n,
|
|
91
|
-
return i(this, e, n,
|
|
92
|
-
}, r.prototype.removeListener = function(e, n,
|
|
93
|
-
var v =
|
|
88
|
+
}, r.prototype.on = function(e, n, c) {
|
|
89
|
+
return i(this, e, n, c, !1);
|
|
90
|
+
}, r.prototype.once = function(e, n, c) {
|
|
91
|
+
return i(this, e, n, c, !0);
|
|
92
|
+
}, r.prototype.removeListener = function(e, n, c, d) {
|
|
93
|
+
var v = s ? s + e : e;
|
|
94
94
|
if (!this._events[v]) return this;
|
|
95
95
|
if (!n)
|
|
96
96
|
return u(this, v), this;
|
|
97
97
|
var f = this._events[v];
|
|
98
98
|
if (f.fn)
|
|
99
|
-
f.fn === n && (!d || f.once) && (!
|
|
99
|
+
f.fn === n && (!d || f.once) && (!c || f.context === c) && u(this, v);
|
|
100
100
|
else {
|
|
101
101
|
for (var g = 0, y = [], A = f.length; g < A; g++)
|
|
102
|
-
(f[g].fn !== n || d && !f[g].once ||
|
|
102
|
+
(f[g].fn !== n || d && !f[g].once || c && f[g].context !== c) && y.push(f[g]);
|
|
103
103
|
y.length ? this._events[v] = y.length === 1 ? y[0] : y : u(this, v);
|
|
104
104
|
}
|
|
105
105
|
return this;
|
|
106
106
|
}, r.prototype.removeAllListeners = function(e) {
|
|
107
107
|
var n;
|
|
108
|
-
return e ? (n =
|
|
109
|
-
}, r.prototype.off = r.prototype.removeListener, r.prototype.addListener = r.prototype.on, r.prefixed =
|
|
110
|
-
})(
|
|
108
|
+
return e ? (n = s ? s + e : e, this._events[n] && u(this, n)) : (this._events = new a(), this._eventsCount = 0), this;
|
|
109
|
+
}, r.prototype.off = r.prototype.removeListener, r.prototype.addListener = r.prototype.on, r.prefixed = s, r.EventEmitter = r, h.exports = r;
|
|
110
|
+
})(O)), O.exports;
|
|
111
111
|
}
|
|
112
112
|
var H = Y();
|
|
113
|
-
const Q = /* @__PURE__ */ B(H), G = "wss://cbw.datapods.io/ws-ua-usr",
|
|
113
|
+
const Q = /* @__PURE__ */ B(H), G = "wss://cbw.datapods.io/ws-ua-usr", j = "wss://cbw.ironflock.com/ws-ua-usr", J = "wss://cbw.ironflock.dev/ws-ua-usr", Z = "wss://cbw.record-evolution.com/ws-ua-usr", N = "ws://localhost:8080/ws-ua-usr", L = {
|
|
114
114
|
"https://studio.datapods.io": G,
|
|
115
115
|
"https://studio.ironflock.dev": J,
|
|
116
|
-
"https://studio.ironflock.com":
|
|
116
|
+
"https://studio.ironflock.com": j,
|
|
117
117
|
"https://studio.record-evolution.com": Z,
|
|
118
|
-
"http://localhost:8085":
|
|
119
|
-
"http://localhost:8086":
|
|
120
|
-
"http://host.docker.internal:8086":
|
|
118
|
+
"http://localhost:8085": N,
|
|
119
|
+
"http://localhost:8086": N,
|
|
120
|
+
"http://host.docker.internal:8086": N
|
|
121
121
|
}, z = 6e3, X = [
|
|
122
122
|
"wamp.error.not_authorized",
|
|
123
123
|
"wamp.error.authorization_failed",
|
|
124
124
|
"wamp.error.authentication_failed",
|
|
125
125
|
"wamp.error.no_auth_method"
|
|
126
126
|
];
|
|
127
|
-
class
|
|
127
|
+
class T extends Q {
|
|
128
128
|
constructor() {
|
|
129
129
|
super(), this.failOnAuthError = !1, this.subscriptions = [], this.registrations = [], this.firstResolver = () => {
|
|
130
130
|
}, this.firstRejecter = () => {
|
|
131
131
|
}, this.shouldReconnect = !1, this.isReconnecting = !1, this.hasOpenedOnce = !1;
|
|
132
132
|
}
|
|
133
|
-
static getWebSocketURI(
|
|
134
|
-
var
|
|
135
|
-
const
|
|
136
|
-
if (
|
|
133
|
+
static getWebSocketURI(t) {
|
|
134
|
+
var l;
|
|
135
|
+
const s = typeof process < "u" ? (l = process.env) == null ? void 0 : l.DEVICE_ENDPOINT_URL : void 0;
|
|
136
|
+
if (s)
|
|
137
137
|
try {
|
|
138
|
-
const i = new URL(
|
|
138
|
+
const i = new URL(s);
|
|
139
139
|
return i.pathname = "/ws-ua-usr", i.toString().replace(/\/$/, "");
|
|
140
140
|
} catch {
|
|
141
141
|
}
|
|
142
|
-
if (!
|
|
143
|
-
const a = L[
|
|
142
|
+
if (!t) return j;
|
|
143
|
+
const a = L[t];
|
|
144
144
|
if (a === void 0)
|
|
145
145
|
throw new Error(
|
|
146
|
-
`Cannot resolve WebSocket URI for reswarmUrl=${JSON.stringify(
|
|
146
|
+
`Cannot resolve WebSocket URI for reswarmUrl=${JSON.stringify(t)}. Set DEVICE_ENDPOINT_URL to the deployment's WAMP router URL (e.g. ws://<host>:18080/ws-re-dev) or pass ironFlockUrl=… to IronFlock(). Known cloud URLs: ${JSON.stringify(Object.keys(L))}`
|
|
147
147
|
);
|
|
148
148
|
return a;
|
|
149
149
|
}
|
|
150
|
-
configure(
|
|
151
|
-
this.realm = `realm-${
|
|
150
|
+
configure(t, s, a, l, i) {
|
|
151
|
+
this.realm = `realm-${t}-${s}-${a}`, this.serial_number = l, this.socketURI = i ?? T.getWebSocketURI();
|
|
152
152
|
}
|
|
153
153
|
async start() {
|
|
154
154
|
if (!this.realm || !this.serial_number || !this.socketURI)
|
|
155
155
|
throw new Error("CrossbarConnection must be configured before starting. Call configure() first.");
|
|
156
|
-
return this.shouldReconnect = !0, this.firstConnection = new Promise((
|
|
157
|
-
this.firstResolver =
|
|
158
|
-
}), this.connection = new
|
|
156
|
+
return this.shouldReconnect = !0, this.firstConnection = new Promise((t, s) => {
|
|
157
|
+
this.firstResolver = t, this.firstRejecter = s;
|
|
158
|
+
}), this.connection = new K.Connection({
|
|
159
159
|
realm: this.realm,
|
|
160
160
|
url: this.socketURI,
|
|
161
161
|
authmethods: ["wampcra"],
|
|
@@ -166,49 +166,49 @@ class _ extends Q {
|
|
|
166
166
|
// @ts-ignore
|
|
167
167
|
autoping_interval: 2,
|
|
168
168
|
autoping_timeout: 4,
|
|
169
|
-
onchallenge: (
|
|
169
|
+
onchallenge: (t, s, a) => K.auth_cra.sign(this.serial_number, a.challenge)
|
|
170
170
|
}), this.connection.onopen = this.onOpen.bind(this), this.connection.onclose = this.onClose.bind(this), this.connection.open(), this.firstConnection;
|
|
171
171
|
}
|
|
172
|
-
onOpen(
|
|
173
|
-
this.session =
|
|
172
|
+
onOpen(t) {
|
|
173
|
+
this.session = t, this.session.caller_disclose_me = !0, this.hasOpenedOnce = !0, this.resubscribeAll(), this.reregisterAll(), this.emit("connected", this.serial_number), this.firstResolver(), this.firstResolver = () => {
|
|
174
174
|
};
|
|
175
175
|
}
|
|
176
|
-
onClose(
|
|
176
|
+
onClose(t, s) {
|
|
177
177
|
this.session = void 0, this.emit("disconnected"), this.firstRejecter(
|
|
178
178
|
new Error(
|
|
179
|
-
`Connection failed: ${
|
|
179
|
+
`Connection failed: ${t} - ${JSON.stringify(s, null, 2)}`
|
|
180
180
|
)
|
|
181
181
|
), this.firstRejecter = () => {
|
|
182
182
|
}, console.warn("Connection closed:", {
|
|
183
|
-
reason:
|
|
184
|
-
details:
|
|
183
|
+
reason: t,
|
|
184
|
+
details: s,
|
|
185
185
|
realm: this.realm,
|
|
186
186
|
url: this.socketURI,
|
|
187
187
|
authid: this.serial_number
|
|
188
188
|
});
|
|
189
|
-
const a = (
|
|
190
|
-
return this.failOnAuthError && typeof a == "string" && X.includes(a) ? (this.shouldReconnect = !1, this.emit("auth_failure", a,
|
|
189
|
+
const a = (s == null ? void 0 : s.reason) ?? t;
|
|
190
|
+
return this.failOnAuthError && typeof a == "string" && X.includes(a) ? (this.shouldReconnect = !1, this.emit("auth_failure", a, s), !0) : (this.shouldReconnect && this.hasOpenedOnce && (s == null ? void 0 : s.will_retry) === !1 && this.handleManualReconnect((s == null ? void 0 : s.reason) ?? t), !1);
|
|
191
191
|
}
|
|
192
|
-
async handleManualReconnect(
|
|
192
|
+
async handleManualReconnect(t) {
|
|
193
193
|
if (!(this.isReconnecting || !this.shouldReconnect)) {
|
|
194
194
|
for (this.isReconnecting = !0; this.shouldReconnect && !this.session; )
|
|
195
|
-
if (await new Promise((
|
|
196
|
-
console.log(`Manually retrying connection after ${
|
|
195
|
+
if (await new Promise((s) => setTimeout(s, 1e3)), this.shouldReconnect && this.connection && !this.session) {
|
|
196
|
+
console.log(`Manually retrying connection after ${t}...`);
|
|
197
197
|
try {
|
|
198
|
-
this.connection.open(), await new Promise((
|
|
199
|
-
} catch (
|
|
200
|
-
console.error("Error during manual reconnection attempt:",
|
|
198
|
+
this.connection.open(), await new Promise((s) => setTimeout(s, 500));
|
|
199
|
+
} catch (s) {
|
|
200
|
+
console.error("Error during manual reconnection attempt:", s);
|
|
201
201
|
}
|
|
202
202
|
}
|
|
203
203
|
this.isReconnecting = !1;
|
|
204
204
|
}
|
|
205
205
|
}
|
|
206
206
|
async sessionWait() {
|
|
207
|
-
const
|
|
207
|
+
const t = Date.now();
|
|
208
208
|
for (; !this.session; ) {
|
|
209
|
-
if (Date.now() -
|
|
209
|
+
if (Date.now() - t > z)
|
|
210
210
|
throw new Error("Timeout waiting for session");
|
|
211
|
-
await new Promise((
|
|
211
|
+
await new Promise((s) => setTimeout(s, 200));
|
|
212
212
|
}
|
|
213
213
|
}
|
|
214
214
|
async waitForConnection() {
|
|
@@ -218,89 +218,89 @@ class _ extends Q {
|
|
|
218
218
|
return this.session;
|
|
219
219
|
}
|
|
220
220
|
get is_open() {
|
|
221
|
-
var
|
|
222
|
-
return !!((
|
|
221
|
+
var t;
|
|
222
|
+
return !!((t = this.session) != null && t.isOpen);
|
|
223
223
|
}
|
|
224
224
|
isConnected() {
|
|
225
225
|
return this.is_open;
|
|
226
226
|
}
|
|
227
227
|
stop() {
|
|
228
|
-
var
|
|
229
|
-
this.shouldReconnect = !1, (
|
|
228
|
+
var t;
|
|
229
|
+
this.shouldReconnect = !1, (t = this.connection) == null || t.close("wamp.close.normal", "Connection closed by client");
|
|
230
230
|
}
|
|
231
|
-
async subscribe(
|
|
232
|
-
var
|
|
231
|
+
async subscribe(t, s) {
|
|
232
|
+
var l;
|
|
233
233
|
await this.sessionWait();
|
|
234
|
-
const a = await ((
|
|
234
|
+
const a = await ((l = this.session) == null ? void 0 : l.subscribe(t, s));
|
|
235
235
|
return a && this.subscriptions.push(a), a;
|
|
236
236
|
}
|
|
237
|
-
async unsubscribe(
|
|
237
|
+
async unsubscribe(t) {
|
|
238
238
|
var a;
|
|
239
239
|
await this.sessionWait();
|
|
240
|
-
const
|
|
241
|
-
|
|
240
|
+
const s = this.subscriptions.indexOf(t);
|
|
241
|
+
s !== -1 && (this.subscriptions.splice(s, 1), await ((a = this.session) == null ? void 0 : a.unsubscribe(t)));
|
|
242
242
|
}
|
|
243
|
-
async unsubscribeTopic(
|
|
244
|
-
const
|
|
245
|
-
for (const a of
|
|
243
|
+
async unsubscribeTopic(t) {
|
|
244
|
+
const s = this.subscriptions.filter((a) => a.topic === t);
|
|
245
|
+
for (const a of s)
|
|
246
246
|
await this.unsubscribe(a);
|
|
247
247
|
}
|
|
248
248
|
async resubscribeAll() {
|
|
249
|
-
const
|
|
249
|
+
const t = [...this.subscriptions];
|
|
250
250
|
this.subscriptions = [], await Promise.all(
|
|
251
|
-
|
|
251
|
+
t.map((s) => this.subscribe(s.topic, s.handler))
|
|
252
252
|
);
|
|
253
253
|
}
|
|
254
254
|
async reregisterAll() {
|
|
255
|
-
const
|
|
255
|
+
const t = [...this.registrations];
|
|
256
256
|
this.registrations = [], await Promise.all(
|
|
257
|
-
|
|
257
|
+
t.map((s) => this.register(s.procedure, s.endpoint, s.options))
|
|
258
258
|
);
|
|
259
259
|
}
|
|
260
|
-
async register(
|
|
260
|
+
async register(t, s, a) {
|
|
261
261
|
var u;
|
|
262
262
|
await this.sessionWait();
|
|
263
|
-
const
|
|
263
|
+
const l = { force_reregister: !0, ...a ?? {} }, i = await ((u = this.session) == null ? void 0 : u.register(t, s, l));
|
|
264
264
|
return i && this.registrations.push(i), i;
|
|
265
265
|
}
|
|
266
|
-
async unregister(
|
|
266
|
+
async unregister(t) {
|
|
267
267
|
var a;
|
|
268
|
-
await this.sessionWait(), await ((a = this.session) == null ? void 0 : a.unregister(
|
|
269
|
-
const
|
|
270
|
-
|
|
268
|
+
await this.sessionWait(), await ((a = this.session) == null ? void 0 : a.unregister(t));
|
|
269
|
+
const s = this.registrations.indexOf(t);
|
|
270
|
+
s !== -1 && this.registrations.splice(s, 1);
|
|
271
271
|
}
|
|
272
|
-
async call(
|
|
272
|
+
async call(t, s, a, l) {
|
|
273
273
|
var i;
|
|
274
|
-
return await this.sessionWait(), (i = this.session) == null ? void 0 : i.call(
|
|
274
|
+
return await this.sessionWait(), (i = this.session) == null ? void 0 : i.call(t, s, a, l);
|
|
275
275
|
}
|
|
276
|
-
async publish(
|
|
276
|
+
async publish(t, s, a, l) {
|
|
277
277
|
var i;
|
|
278
|
-
return await this.sessionWait(), (i = this.session) == null ? void 0 : i.publish(
|
|
278
|
+
return await this.sessionWait(), (i = this.session) == null ? void 0 : i.publish(t, s, a, l);
|
|
279
279
|
}
|
|
280
280
|
}
|
|
281
|
-
const
|
|
282
|
-
const
|
|
281
|
+
const I = (h) => Math.floor(h) === h && q <= h && h <= ee, q = 0, ee = 2 ** 32 - 1, M = (h) => re.test(h), re = /^[0-9]{4}-(0[1-9]|1[0-2])-(0[1-9]|[12][0-9]|3[01])(T|\s)([01][0-9]|2[0-3]):[0-5][0-9]:[0-5][0-9](?:\.[0-9]{1,9})?(Z|[+-]([01][0-9]|2[0-3]):[0-5][0-9])$/i, R = (h) => {
|
|
282
|
+
const t = (s) => {
|
|
283
283
|
if (h.length === 0)
|
|
284
284
|
return !0;
|
|
285
285
|
const a = h[h.length - 1].path;
|
|
286
|
-
return
|
|
286
|
+
return s.length > a.length || a.substring(0, s.length) !== s;
|
|
287
287
|
};
|
|
288
|
-
return (
|
|
288
|
+
return (s, a) => (s && t(a.path) && (a.value === void 0 && (a.description ?? (a.description = [
|
|
289
289
|
"The value at this path is `undefined`.",
|
|
290
290
|
"",
|
|
291
291
|
`Please fill the \`${a.expected}\` typed value next time.`
|
|
292
292
|
].join(`
|
|
293
293
|
`))), h.push(a)), !1);
|
|
294
|
-
},
|
|
294
|
+
}, k = (h) => Object.assign(h, {
|
|
295
295
|
"~standard": {
|
|
296
296
|
version: 1,
|
|
297
297
|
vendor: "typia",
|
|
298
|
-
validate: (
|
|
299
|
-
const
|
|
300
|
-
return
|
|
301
|
-
value:
|
|
298
|
+
validate: (t) => {
|
|
299
|
+
const s = h(t);
|
|
300
|
+
return s.success ? {
|
|
301
|
+
value: s.data
|
|
302
302
|
} : {
|
|
303
|
-
issues:
|
|
303
|
+
issues: s.errors.map((a) => ({
|
|
304
304
|
message: `expected ${a.expected}, got ${a.value}`,
|
|
305
305
|
path: te(a.path)
|
|
306
306
|
}))
|
|
@@ -315,23 +315,23 @@ var w;
|
|
|
315
315
|
const te = (h) => {
|
|
316
316
|
if (!h.startsWith("$input"))
|
|
317
317
|
throw new Error(`Invalid path: ${JSON.stringify(h)}`);
|
|
318
|
-
const
|
|
319
|
-
let
|
|
320
|
-
for (;
|
|
321
|
-
|
|
322
|
-
const i = h[
|
|
323
|
-
if (a === w.Property ? i === "." || i === "[" ? (
|
|
324
|
-
key:
|
|
325
|
-
}), a = w.Start) :
|
|
326
|
-
key:
|
|
327
|
-
}),
|
|
328
|
-
key: JSON.parse(
|
|
329
|
-
}),
|
|
330
|
-
key: Number.parseInt(
|
|
331
|
-
}),
|
|
332
|
-
const u = h[
|
|
333
|
-
if (
|
|
334
|
-
h[
|
|
318
|
+
const t = [];
|
|
319
|
+
let s = "", a = w.Start, l = 5;
|
|
320
|
+
for (; l < h.length - 1; ) {
|
|
321
|
+
l++;
|
|
322
|
+
const i = h[l];
|
|
323
|
+
if (a === w.Property ? i === "." || i === "[" ? (t.push({
|
|
324
|
+
key: s
|
|
325
|
+
}), a = w.Start) : l === h.length - 1 ? (s += i, t.push({
|
|
326
|
+
key: s
|
|
327
|
+
}), l++, a = w.Start) : s += i : a === w.StringKey ? i === '"' ? (t.push({
|
|
328
|
+
key: JSON.parse(s + i)
|
|
329
|
+
}), l += 2, a = w.Start) : i === "\\" ? (s += h[l], l++, s += h[l]) : s += i : a === w.NumberKey && (i === "]" ? (t.push({
|
|
330
|
+
key: Number.parseInt(s)
|
|
331
|
+
}), l++, a = w.Start) : s += i), a === w.Start && l < h.length - 1) {
|
|
332
|
+
const u = h[l];
|
|
333
|
+
if (s = "", u === "[")
|
|
334
|
+
h[l + 1] === '"' ? (a = w.StringKey, l++, s = '"') : a = w.NumberKey;
|
|
335
335
|
else if (u === ".")
|
|
336
336
|
a = w.Property;
|
|
337
337
|
else
|
|
@@ -340,126 +340,126 @@ const te = (h) => {
|
|
|
340
340
|
}
|
|
341
341
|
if (a !== w.Start)
|
|
342
342
|
throw new Error(`Failed to parse path: ${JSON.stringify(h)}`);
|
|
343
|
-
return
|
|
343
|
+
return t;
|
|
344
344
|
};
|
|
345
|
-
var
|
|
345
|
+
var _ = /* @__PURE__ */ ((h) => (h.DEVELOPMENT = "dev", h.PRODUCTION = "prod", h))(_ || {});
|
|
346
346
|
const U = (() => {
|
|
347
|
-
const h = (e) => typeof e.limit == "number" &&
|
|
347
|
+
const h = (e) => typeof e.limit == "number" && I(e.limit) && 1 <= e.limit && e.limit <= 1e4 && (e.offset === void 0 || typeof e.offset == "number" && I(e.offset) && 0 <= e.offset) && (e.timeRange === void 0 || typeof e.timeRange == "object" && e.timeRange !== null && t(e.timeRange)) && (e.filterAnd === void 0 || Array.isArray(e.filterAnd) && e.filterAnd.every((n) => typeof n == "object" && n !== null && s(n))), t = (e) => typeof e.start == "string" && M(e.start) && typeof e.end == "string" && M(e.end), s = (e) => typeof e.column == "string" && 1 <= e.column.length && typeof e.operator == "string" && 1 <= e.operator.length && e.value !== null && e.value !== void 0 && (typeof e.value == "string" || typeof e.value == "number" || typeof e.value == "boolean" || Array.isArray(e.value) && e.value.every((n) => typeof n == "string" || typeof n == "number")), a = (e, n, c = !0) => [typeof e.limit == "number" && (I(e.limit) || o(c, {
|
|
348
348
|
path: n + ".limit",
|
|
349
349
|
expected: 'number & Type<"uint32">',
|
|
350
350
|
value: e.limit
|
|
351
|
-
})) && (1 <= e.limit || o(
|
|
351
|
+
})) && (1 <= e.limit || o(c, {
|
|
352
352
|
path: n + ".limit",
|
|
353
353
|
expected: "number & Minimum<1>",
|
|
354
354
|
value: e.limit
|
|
355
|
-
})) && (e.limit <= 1e4 || o(
|
|
355
|
+
})) && (e.limit <= 1e4 || o(c, {
|
|
356
356
|
path: n + ".limit",
|
|
357
357
|
expected: "number & Maximum<10000>",
|
|
358
358
|
value: e.limit
|
|
359
|
-
})) || o(
|
|
359
|
+
})) || o(c, {
|
|
360
360
|
path: n + ".limit",
|
|
361
361
|
expected: '(number & Type<"uint32"> & Minimum<1> & Maximum<10000>)',
|
|
362
362
|
value: e.limit
|
|
363
|
-
}), e.offset === void 0 || typeof e.offset == "number" && (
|
|
363
|
+
}), e.offset === void 0 || typeof e.offset == "number" && (I(e.offset) || o(c, {
|
|
364
364
|
path: n + ".offset",
|
|
365
365
|
expected: 'number & Type<"uint32">',
|
|
366
366
|
value: e.offset
|
|
367
|
-
})) && (0 <= e.offset || o(
|
|
367
|
+
})) && (0 <= e.offset || o(c, {
|
|
368
368
|
path: n + ".offset",
|
|
369
369
|
expected: "number & Minimum<0>",
|
|
370
370
|
value: e.offset
|
|
371
|
-
})) || o(
|
|
371
|
+
})) || o(c, {
|
|
372
372
|
path: n + ".offset",
|
|
373
373
|
expected: '((number & Type<"uint32"> & Minimum<0>) | undefined)',
|
|
374
374
|
value: e.offset
|
|
375
|
-
}), e.timeRange === void 0 || (typeof e.timeRange == "object" && e.timeRange !== null || o(
|
|
375
|
+
}), e.timeRange === void 0 || (typeof e.timeRange == "object" && e.timeRange !== null || o(c, {
|
|
376
376
|
path: n + ".timeRange",
|
|
377
377
|
expected: "(ISOTimeRange | undefined)",
|
|
378
378
|
value: e.timeRange
|
|
379
|
-
})) &&
|
|
379
|
+
})) && l(e.timeRange, n + ".timeRange", c) || o(c, {
|
|
380
380
|
path: n + ".timeRange",
|
|
381
381
|
expected: "(ISOTimeRange | undefined)",
|
|
382
382
|
value: e.timeRange
|
|
383
|
-
}), e.filterAnd === void 0 || (Array.isArray(e.filterAnd) || o(
|
|
383
|
+
}), e.filterAnd === void 0 || (Array.isArray(e.filterAnd) || o(c, {
|
|
384
384
|
path: n + ".filterAnd",
|
|
385
385
|
expected: "(Array<SQLFilterAnd> | undefined)",
|
|
386
386
|
value: e.filterAnd
|
|
387
|
-
})) && e.filterAnd.map((d, v) => (typeof d == "object" && d !== null || o(
|
|
387
|
+
})) && e.filterAnd.map((d, v) => (typeof d == "object" && d !== null || o(c, {
|
|
388
388
|
path: n + ".filterAnd[" + v + "]",
|
|
389
389
|
expected: "SQLFilterAnd",
|
|
390
390
|
value: d
|
|
391
|
-
})) && i(d, n + ".filterAnd[" + v + "]",
|
|
391
|
+
})) && i(d, n + ".filterAnd[" + v + "]", c) || o(c, {
|
|
392
392
|
path: n + ".filterAnd[" + v + "]",
|
|
393
393
|
expected: "SQLFilterAnd",
|
|
394
394
|
value: d
|
|
395
|
-
})).every((d) => d) || o(
|
|
395
|
+
})).every((d) => d) || o(c, {
|
|
396
396
|
path: n + ".filterAnd",
|
|
397
397
|
expected: "(Array<SQLFilterAnd> | undefined)",
|
|
398
398
|
value: e.filterAnd
|
|
399
|
-
})].every((d) => d),
|
|
399
|
+
})].every((d) => d), l = (e, n, c = !0) => [typeof e.start == "string" && (M(e.start) || o(c, {
|
|
400
400
|
path: n + ".start",
|
|
401
401
|
expected: 'string & Format<"date-time">',
|
|
402
402
|
value: e.start
|
|
403
|
-
})) || o(
|
|
403
|
+
})) || o(c, {
|
|
404
404
|
path: n + ".start",
|
|
405
405
|
expected: '(string & Format<"date-time">)',
|
|
406
406
|
value: e.start
|
|
407
|
-
}), typeof e.end == "string" && (
|
|
407
|
+
}), typeof e.end == "string" && (M(e.end) || o(c, {
|
|
408
408
|
path: n + ".end",
|
|
409
409
|
expected: 'string & Format<"date-time">',
|
|
410
410
|
value: e.end
|
|
411
|
-
})) || o(
|
|
411
|
+
})) || o(c, {
|
|
412
412
|
path: n + ".end",
|
|
413
413
|
expected: '(string & Format<"date-time">)',
|
|
414
414
|
value: e.end
|
|
415
|
-
})].every((d) => d), i = (e, n,
|
|
415
|
+
})].every((d) => d), i = (e, n, c = !0) => [typeof e.column == "string" && (1 <= e.column.length || o(c, {
|
|
416
416
|
path: n + ".column",
|
|
417
417
|
expected: "string & MinLength<1>",
|
|
418
418
|
value: e.column
|
|
419
|
-
})) || o(
|
|
419
|
+
})) || o(c, {
|
|
420
420
|
path: n + ".column",
|
|
421
421
|
expected: "(string & MinLength<1>)",
|
|
422
422
|
value: e.column
|
|
423
|
-
}), typeof e.operator == "string" && (1 <= e.operator.length || o(
|
|
423
|
+
}), typeof e.operator == "string" && (1 <= e.operator.length || o(c, {
|
|
424
424
|
path: n + ".operator",
|
|
425
425
|
expected: "string & MinLength<1>",
|
|
426
426
|
value: e.operator
|
|
427
|
-
})) || o(
|
|
427
|
+
})) || o(c, {
|
|
428
428
|
path: n + ".operator",
|
|
429
429
|
expected: "(string & MinLength<1>)",
|
|
430
430
|
value: e.operator
|
|
431
|
-
}), (e.value !== null || o(
|
|
431
|
+
}), (e.value !== null || o(c, {
|
|
432
432
|
path: n + ".value",
|
|
433
433
|
expected: "(Array<string | number> | boolean | number | string)",
|
|
434
434
|
value: e.value
|
|
435
|
-
})) && (e.value !== void 0 || o(
|
|
435
|
+
})) && (e.value !== void 0 || o(c, {
|
|
436
436
|
path: n + ".value",
|
|
437
437
|
expected: "(Array<string | number> | boolean | number | string)",
|
|
438
438
|
value: e.value
|
|
439
|
-
})) && (typeof e.value == "string" || typeof e.value == "number" || typeof e.value == "boolean" || (Array.isArray(e.value) || o(
|
|
439
|
+
})) && (typeof e.value == "string" || typeof e.value == "number" || typeof e.value == "boolean" || (Array.isArray(e.value) || o(c, {
|
|
440
440
|
path: n + ".value",
|
|
441
441
|
expected: "(Array<string | number> | boolean | number | string)",
|
|
442
442
|
value: e.value
|
|
443
|
-
})) && e.value.map((d, v) => typeof d == "string" || typeof d == "number" || o(
|
|
443
|
+
})) && e.value.map((d, v) => typeof d == "string" || typeof d == "number" || o(c, {
|
|
444
444
|
path: n + ".value[" + v + "]",
|
|
445
445
|
expected: "(number | string)",
|
|
446
446
|
value: d
|
|
447
|
-
})).every((d) => d) || o(
|
|
447
|
+
})).every((d) => d) || o(c, {
|
|
448
448
|
path: n + ".value",
|
|
449
449
|
expected: "(Array<string | number> | boolean | number | string)",
|
|
450
450
|
value: e.value
|
|
451
451
|
}))].every((d) => d), u = (e) => typeof e == "object" && e !== null && h(e);
|
|
452
452
|
let r, o;
|
|
453
|
-
return
|
|
453
|
+
return k((e) => {
|
|
454
454
|
if (u(e) === !1) {
|
|
455
|
-
r = [], o =
|
|
455
|
+
r = [], o = R(r), ((c, d, v = !0) => (typeof c == "object" && c !== null || o(!0, {
|
|
456
456
|
path: d + "",
|
|
457
457
|
expected: "TableQueryParams",
|
|
458
|
-
value:
|
|
459
|
-
})) && a(
|
|
458
|
+
value: c
|
|
459
|
+
})) && a(c, d + "", !0) || o(!0, {
|
|
460
460
|
path: d + "",
|
|
461
461
|
expected: "TableQueryParams",
|
|
462
|
-
value:
|
|
462
|
+
value: c
|
|
463
463
|
}))(e, "$input", !0);
|
|
464
464
|
const n = r.length === 0;
|
|
465
465
|
return n ? {
|
|
@@ -478,7 +478,7 @@ const U = (() => {
|
|
|
478
478
|
});
|
|
479
479
|
})(), F = (() => {
|
|
480
480
|
const h = (e) => {
|
|
481
|
-
const n = e,
|
|
481
|
+
const n = e, c = [
|
|
482
482
|
[
|
|
483
483
|
(d) => d.length === 2 && (d[0] === null || typeof d[0] == "number") && (d[1] === null || typeof d[1] == "number"),
|
|
484
484
|
(d) => d.length === 2 && (d[0] === null || typeof d[0] == "number") && (d[1] === null || typeof d[1] == "number")
|
|
@@ -488,28 +488,28 @@ const U = (() => {
|
|
|
488
488
|
(d) => d.length === 2 && (d[0] === null || typeof d[0] == "string") && (d[1] === null || typeof d[1] == "string")
|
|
489
489
|
]
|
|
490
490
|
];
|
|
491
|
-
for (const d of
|
|
491
|
+
for (const d of c)
|
|
492
492
|
if (d[0](n))
|
|
493
493
|
return d[1](n);
|
|
494
494
|
return !1;
|
|
495
|
-
},
|
|
495
|
+
}, t = (e, n, c = !0) => {
|
|
496
496
|
const d = e, v = [
|
|
497
497
|
[
|
|
498
498
|
(f) => f.length === 2 && [
|
|
499
499
|
f[0] === null || typeof f[0] == "number",
|
|
500
500
|
f[1] === null || typeof f[1] == "number"
|
|
501
501
|
].every((g) => g),
|
|
502
|
-
(f) => (f.length === 2 || o(
|
|
502
|
+
(f) => (f.length === 2 || o(c, {
|
|
503
503
|
path: n,
|
|
504
504
|
expected: "[(null | number), (null | number)]",
|
|
505
505
|
value: f
|
|
506
506
|
})) && [
|
|
507
|
-
f[0] === null || typeof f[0] == "number" || o(
|
|
507
|
+
f[0] === null || typeof f[0] == "number" || o(c, {
|
|
508
508
|
path: n + "[0]",
|
|
509
509
|
expected: "(null | number)",
|
|
510
510
|
value: f[0]
|
|
511
511
|
}),
|
|
512
|
-
f[1] === null || typeof f[1] == "number" || o(
|
|
512
|
+
f[1] === null || typeof f[1] == "number" || o(c, {
|
|
513
513
|
path: n + "[1]",
|
|
514
514
|
expected: "(null | number)",
|
|
515
515
|
value: f[1]
|
|
@@ -521,17 +521,17 @@ const U = (() => {
|
|
|
521
521
|
f[0] === null || typeof f[0] == "string",
|
|
522
522
|
f[1] === null || typeof f[1] == "string"
|
|
523
523
|
].every((g) => g),
|
|
524
|
-
(f) => (f.length === 2 || o(
|
|
524
|
+
(f) => (f.length === 2 || o(c, {
|
|
525
525
|
path: n,
|
|
526
526
|
expected: "[(null | string), (null | string)]",
|
|
527
527
|
value: f
|
|
528
528
|
})) && [
|
|
529
|
-
f[0] === null || typeof f[0] == "string" || o(
|
|
529
|
+
f[0] === null || typeof f[0] == "string" || o(c, {
|
|
530
530
|
path: n + "[0]",
|
|
531
531
|
expected: "(null | string)",
|
|
532
532
|
value: f[0]
|
|
533
533
|
}),
|
|
534
|
-
f[1] === null || typeof f[1] == "string" || o(
|
|
534
|
+
f[1] === null || typeof f[1] == "string" || o(c, {
|
|
535
535
|
path: n + "[1]",
|
|
536
536
|
expected: "(null | string)",
|
|
537
537
|
value: f[1]
|
|
@@ -542,131 +542,131 @@ const U = (() => {
|
|
|
542
542
|
for (const f of v)
|
|
543
543
|
if (f[0](d))
|
|
544
544
|
return f[1](d);
|
|
545
|
-
return o(
|
|
545
|
+
return o(c, {
|
|
546
546
|
path: n,
|
|
547
547
|
expected: "([number | null, number | null] | [string | null, string | null])",
|
|
548
548
|
value: e
|
|
549
549
|
});
|
|
550
|
-
},
|
|
550
|
+
}, s = (e) => Array.isArray(e.metrics) && e.metrics.every((n) => typeof n == "string") && (e.method === "AVG" || e.method === "SUM" || e.method === "COUNT" || e.method === "MIN" || e.method === "MAX" || e.method === "FIRST" || e.method === "LAST") && typeof e.limit == "number" && I(e.limit) && 1 <= e.limit && e.limit <= 1e4 && Array.isArray(e.timeRange) && (h(e.timeRange) || !1) && (e.groupBy === null || e.groupBy === void 0 || Array.isArray(e.groupBy) && e.groupBy.every((n) => typeof n == "string")) && (e.filterAnd === null || e.filterAnd === void 0 || Array.isArray(e.filterAnd) && e.filterAnd.every((n) => typeof n == "object" && n !== null && a(n))), a = (e) => typeof e.column == "string" && 1 <= e.column.length && typeof e.operator == "string" && 1 <= e.operator.length && e.value !== null && e.value !== void 0 && (typeof e.value == "string" || typeof e.value == "number" || typeof e.value == "boolean" || Array.isArray(e.value) && e.value.every((n) => typeof n == "string" || typeof n == "number")), l = (e, n, c = !0) => [(Array.isArray(e.metrics) || o(c, {
|
|
551
551
|
path: n + ".metrics",
|
|
552
552
|
expected: "Array<string>",
|
|
553
553
|
value: e.metrics
|
|
554
|
-
})) && e.metrics.map((d, v) => typeof d == "string" || o(
|
|
554
|
+
})) && e.metrics.map((d, v) => typeof d == "string" || o(c, {
|
|
555
555
|
path: n + ".metrics[" + v + "]",
|
|
556
556
|
expected: "string",
|
|
557
557
|
value: d
|
|
558
|
-
})).every((d) => d) || o(
|
|
558
|
+
})).every((d) => d) || o(c, {
|
|
559
559
|
path: n + ".metrics",
|
|
560
560
|
expected: "Array<string>",
|
|
561
561
|
value: e.metrics
|
|
562
|
-
}), e.method === "AVG" || e.method === "SUM" || e.method === "COUNT" || e.method === "MIN" || e.method === "MAX" || e.method === "FIRST" || e.method === "LAST" || o(
|
|
562
|
+
}), e.method === "AVG" || e.method === "SUM" || e.method === "COUNT" || e.method === "MIN" || e.method === "MAX" || e.method === "FIRST" || e.method === "LAST" || o(c, {
|
|
563
563
|
path: n + ".method",
|
|
564
564
|
expected: '("AVG" | "COUNT" | "FIRST" | "LAST" | "MAX" | "MIN" | "SUM")',
|
|
565
565
|
value: e.method
|
|
566
|
-
}), typeof e.limit == "number" && (
|
|
566
|
+
}), typeof e.limit == "number" && (I(e.limit) || o(c, {
|
|
567
567
|
path: n + ".limit",
|
|
568
568
|
expected: 'number & Type<"uint32">',
|
|
569
569
|
value: e.limit
|
|
570
|
-
})) && (1 <= e.limit || o(
|
|
570
|
+
})) && (1 <= e.limit || o(c, {
|
|
571
571
|
path: n + ".limit",
|
|
572
572
|
expected: "number & Minimum<1>",
|
|
573
573
|
value: e.limit
|
|
574
|
-
})) && (e.limit <= 1e4 || o(
|
|
574
|
+
})) && (e.limit <= 1e4 || o(c, {
|
|
575
575
|
path: n + ".limit",
|
|
576
576
|
expected: "number & Maximum<10000>",
|
|
577
577
|
value: e.limit
|
|
578
|
-
})) || o(
|
|
578
|
+
})) || o(c, {
|
|
579
579
|
path: n + ".limit",
|
|
580
580
|
expected: '(number & Type<"uint32"> & Minimum<1> & Maximum<10000>)',
|
|
581
581
|
value: e.limit
|
|
582
|
-
}), (Array.isArray(e.timeRange) || o(
|
|
582
|
+
}), (Array.isArray(e.timeRange) || o(c, {
|
|
583
583
|
path: n + ".timeRange",
|
|
584
584
|
expected: "([number | null, number | null] | [string | null, string | null])",
|
|
585
585
|
value: e.timeRange
|
|
586
|
-
})) && (
|
|
586
|
+
})) && (t(e.timeRange, n + ".timeRange", c) || o(c, {
|
|
587
587
|
path: n + ".timeRange",
|
|
588
588
|
expected: "[number | null, number | null] | [string | null, string | null]",
|
|
589
589
|
value: e.timeRange
|
|
590
|
-
})) || o(
|
|
590
|
+
})) || o(c, {
|
|
591
591
|
path: n + ".timeRange",
|
|
592
592
|
expected: "([number | null, number | null] | [string | null, string | null])",
|
|
593
593
|
value: e.timeRange
|
|
594
|
-
}), e.groupBy === null || e.groupBy === void 0 || (Array.isArray(e.groupBy) || o(
|
|
594
|
+
}), e.groupBy === null || e.groupBy === void 0 || (Array.isArray(e.groupBy) || o(c, {
|
|
595
595
|
path: n + ".groupBy",
|
|
596
596
|
expected: "(Array<string> | null | undefined)",
|
|
597
597
|
value: e.groupBy
|
|
598
|
-
})) && e.groupBy.map((d, v) => typeof d == "string" || o(
|
|
598
|
+
})) && e.groupBy.map((d, v) => typeof d == "string" || o(c, {
|
|
599
599
|
path: n + ".groupBy[" + v + "]",
|
|
600
600
|
expected: "string",
|
|
601
601
|
value: d
|
|
602
|
-
})).every((d) => d) || o(
|
|
602
|
+
})).every((d) => d) || o(c, {
|
|
603
603
|
path: n + ".groupBy",
|
|
604
604
|
expected: "(Array<string> | null | undefined)",
|
|
605
605
|
value: e.groupBy
|
|
606
|
-
}), e.filterAnd === null || e.filterAnd === void 0 || (Array.isArray(e.filterAnd) || o(
|
|
606
|
+
}), e.filterAnd === null || e.filterAnd === void 0 || (Array.isArray(e.filterAnd) || o(c, {
|
|
607
607
|
path: n + ".filterAnd",
|
|
608
608
|
expected: "(Array<SQLFilterAnd> | null | undefined)",
|
|
609
609
|
value: e.filterAnd
|
|
610
|
-
})) && e.filterAnd.map((d, v) => (typeof d == "object" && d !== null || o(
|
|
610
|
+
})) && e.filterAnd.map((d, v) => (typeof d == "object" && d !== null || o(c, {
|
|
611
611
|
path: n + ".filterAnd[" + v + "]",
|
|
612
612
|
expected: "SQLFilterAnd",
|
|
613
613
|
value: d
|
|
614
|
-
})) && i(d, n + ".filterAnd[" + v + "]",
|
|
614
|
+
})) && i(d, n + ".filterAnd[" + v + "]", c) || o(c, {
|
|
615
615
|
path: n + ".filterAnd[" + v + "]",
|
|
616
616
|
expected: "SQLFilterAnd",
|
|
617
617
|
value: d
|
|
618
|
-
})).every((d) => d) || o(
|
|
618
|
+
})).every((d) => d) || o(c, {
|
|
619
619
|
path: n + ".filterAnd",
|
|
620
620
|
expected: "(Array<SQLFilterAnd> | null | undefined)",
|
|
621
621
|
value: e.filterAnd
|
|
622
|
-
})].every((d) => d), i = (e, n,
|
|
622
|
+
})].every((d) => d), i = (e, n, c = !0) => [typeof e.column == "string" && (1 <= e.column.length || o(c, {
|
|
623
623
|
path: n + ".column",
|
|
624
624
|
expected: "string & MinLength<1>",
|
|
625
625
|
value: e.column
|
|
626
|
-
})) || o(
|
|
626
|
+
})) || o(c, {
|
|
627
627
|
path: n + ".column",
|
|
628
628
|
expected: "(string & MinLength<1>)",
|
|
629
629
|
value: e.column
|
|
630
|
-
}), typeof e.operator == "string" && (1 <= e.operator.length || o(
|
|
630
|
+
}), typeof e.operator == "string" && (1 <= e.operator.length || o(c, {
|
|
631
631
|
path: n + ".operator",
|
|
632
632
|
expected: "string & MinLength<1>",
|
|
633
633
|
value: e.operator
|
|
634
|
-
})) || o(
|
|
634
|
+
})) || o(c, {
|
|
635
635
|
path: n + ".operator",
|
|
636
636
|
expected: "(string & MinLength<1>)",
|
|
637
637
|
value: e.operator
|
|
638
|
-
}), (e.value !== null || o(
|
|
638
|
+
}), (e.value !== null || o(c, {
|
|
639
639
|
path: n + ".value",
|
|
640
640
|
expected: "(Array<string | number> | boolean | number | string)",
|
|
641
641
|
value: e.value
|
|
642
|
-
})) && (e.value !== void 0 || o(
|
|
642
|
+
})) && (e.value !== void 0 || o(c, {
|
|
643
643
|
path: n + ".value",
|
|
644
644
|
expected: "(Array<string | number> | boolean | number | string)",
|
|
645
645
|
value: e.value
|
|
646
|
-
})) && (typeof e.value == "string" || typeof e.value == "number" || typeof e.value == "boolean" || (Array.isArray(e.value) || o(
|
|
646
|
+
})) && (typeof e.value == "string" || typeof e.value == "number" || typeof e.value == "boolean" || (Array.isArray(e.value) || o(c, {
|
|
647
647
|
path: n + ".value",
|
|
648
648
|
expected: "(Array<string | number> | boolean | number | string)",
|
|
649
649
|
value: e.value
|
|
650
|
-
})) && e.value.map((d, v) => typeof d == "string" || typeof d == "number" || o(
|
|
650
|
+
})) && e.value.map((d, v) => typeof d == "string" || typeof d == "number" || o(c, {
|
|
651
651
|
path: n + ".value[" + v + "]",
|
|
652
652
|
expected: "(number | string)",
|
|
653
653
|
value: d
|
|
654
|
-
})).every((d) => d) || o(
|
|
654
|
+
})).every((d) => d) || o(c, {
|
|
655
655
|
path: n + ".value",
|
|
656
656
|
expected: "(Array<string | number> | boolean | number | string)",
|
|
657
657
|
value: e.value
|
|
658
|
-
}))].every((d) => d), u = (e) => typeof e == "object" && e !== null &&
|
|
658
|
+
}))].every((d) => d), u = (e) => typeof e == "object" && e !== null && s(e);
|
|
659
659
|
let r, o;
|
|
660
|
-
return
|
|
660
|
+
return k((e) => {
|
|
661
661
|
if (u(e) === !1) {
|
|
662
|
-
r = [], o =
|
|
662
|
+
r = [], o = R(r), ((c, d, v = !0) => (typeof c == "object" && c !== null || o(!0, {
|
|
663
663
|
path: d + "",
|
|
664
664
|
expected: "SeriesQueryParams",
|
|
665
|
-
value:
|
|
666
|
-
})) && c
|
|
665
|
+
value: c
|
|
666
|
+
})) && l(c, d + "", !0) || o(!0, {
|
|
667
667
|
path: d + "",
|
|
668
668
|
expected: "SeriesQueryParams",
|
|
669
|
-
value:
|
|
669
|
+
value: c
|
|
670
670
|
}))(e, "$input", !0);
|
|
671
671
|
const n = r.length === 0;
|
|
672
672
|
return n ? {
|
|
@@ -684,39 +684,39 @@ const U = (() => {
|
|
|
684
684
|
};
|
|
685
685
|
});
|
|
686
686
|
})(), se = (() => {
|
|
687
|
-
const h = (i) => typeof i.longitude == "number" && -180 <= i.longitude && i.longitude <= 180 && typeof i.latitude == "number" && -90 <= i.latitude && i.latitude <= 90,
|
|
687
|
+
const h = (i) => typeof i.longitude == "number" && -180 <= i.longitude && i.longitude <= 180 && typeof i.latitude == "number" && -90 <= i.latitude && i.latitude <= 90, t = (i, u, r = !0) => [typeof i.longitude == "number" && (-180 <= i.longitude || l(r, {
|
|
688
688
|
path: u + ".longitude",
|
|
689
689
|
expected: "number & Minimum<-180>",
|
|
690
690
|
value: i.longitude
|
|
691
|
-
})) && (i.longitude <= 180 ||
|
|
691
|
+
})) && (i.longitude <= 180 || l(r, {
|
|
692
692
|
path: u + ".longitude",
|
|
693
693
|
expected: "number & Maximum<180>",
|
|
694
694
|
value: i.longitude
|
|
695
|
-
})) ||
|
|
695
|
+
})) || l(r, {
|
|
696
696
|
path: u + ".longitude",
|
|
697
697
|
expected: "(number & Minimum<-180> & Maximum<180>)",
|
|
698
698
|
value: i.longitude
|
|
699
|
-
}), typeof i.latitude == "number" && (-90 <= i.latitude ||
|
|
699
|
+
}), typeof i.latitude == "number" && (-90 <= i.latitude || l(r, {
|
|
700
700
|
path: u + ".latitude",
|
|
701
701
|
expected: "number & Minimum<-90>",
|
|
702
702
|
value: i.latitude
|
|
703
|
-
})) && (i.latitude <= 90 ||
|
|
703
|
+
})) && (i.latitude <= 90 || l(r, {
|
|
704
704
|
path: u + ".latitude",
|
|
705
705
|
expected: "number & Maximum<90>",
|
|
706
706
|
value: i.latitude
|
|
707
|
-
})) ||
|
|
707
|
+
})) || l(r, {
|
|
708
708
|
path: u + ".latitude",
|
|
709
709
|
expected: "(number & Minimum<-90> & Maximum<90>)",
|
|
710
710
|
value: i.latitude
|
|
711
|
-
})].every((o) => o),
|
|
712
|
-
let a,
|
|
713
|
-
return
|
|
714
|
-
if (
|
|
715
|
-
a = [],
|
|
711
|
+
})].every((o) => o), s = (i) => typeof i == "object" && i !== null && h(i);
|
|
712
|
+
let a, l;
|
|
713
|
+
return k((i) => {
|
|
714
|
+
if (s(i) === !1) {
|
|
715
|
+
a = [], l = R(a), ((r, o, e = !0) => (typeof r == "object" && r !== null || l(!0, {
|
|
716
716
|
path: o + "",
|
|
717
717
|
expected: "LocationParams",
|
|
718
718
|
value: r
|
|
719
|
-
})) &&
|
|
719
|
+
})) && t(r, o + "", !0) || l(!0, {
|
|
720
720
|
path: o + "",
|
|
721
721
|
expected: "LocationParams",
|
|
722
722
|
value: r
|
|
@@ -737,7 +737,7 @@ const U = (() => {
|
|
|
737
737
|
};
|
|
738
738
|
});
|
|
739
739
|
})(), ne = (() => {
|
|
740
|
-
const h = (r) => typeof r.topic == "string" && 1 <= r.topic.length && (r.args === void 0 || Array.isArray(r.args)) && (r.kwargs === void 0 || typeof r.kwargs == "object" && r.kwargs !== null && Array.isArray(r.kwargs) === !1 &&
|
|
740
|
+
const h = (r) => typeof r.topic == "string" && 1 <= r.topic.length && (r.args === void 0 || Array.isArray(r.args)) && (r.kwargs === void 0 || typeof r.kwargs == "object" && r.kwargs !== null && Array.isArray(r.kwargs) === !1 && t(r.kwargs)), t = (r) => Object.keys(r).every((o) => (r[o] === void 0, !0)), s = (r, o, e = !0) => [typeof r.topic == "string" && (1 <= r.topic.length || u(e, {
|
|
741
741
|
path: o + ".topic",
|
|
742
742
|
expected: "string & MinLength<1>",
|
|
743
743
|
value: r.topic
|
|
@@ -757,15 +757,15 @@ const U = (() => {
|
|
|
757
757
|
path: o + ".kwargs",
|
|
758
758
|
expected: "(Record<string, unknown> | undefined)",
|
|
759
759
|
value: r.kwargs
|
|
760
|
-
})].every((n) => n), a = (r, o, e = !0) => [e === !1 || Object.keys(r).map((n) => (r[n] === void 0, !0)).every((n) => n)].every((n) => n),
|
|
760
|
+
})].every((n) => n), a = (r, o, e = !0) => [e === !1 || Object.keys(r).map((n) => (r[n] === void 0, !0)).every((n) => n)].every((n) => n), l = (r) => typeof r == "object" && r !== null && h(r);
|
|
761
761
|
let i, u;
|
|
762
|
-
return
|
|
763
|
-
if (
|
|
764
|
-
i = [], u =
|
|
762
|
+
return k((r) => {
|
|
763
|
+
if (l(r) === !1) {
|
|
764
|
+
i = [], u = R(i), ((e, n, c = !0) => (typeof e == "object" && e !== null || u(!0, {
|
|
765
765
|
path: n + "",
|
|
766
766
|
expected: "PublishParams",
|
|
767
767
|
value: e
|
|
768
|
-
})) &&
|
|
768
|
+
})) && s(e, n + "", !0) || u(!0, {
|
|
769
769
|
path: n + "",
|
|
770
770
|
expected: "PublishParams",
|
|
771
771
|
value: e
|
|
@@ -785,8 +785,8 @@ const U = (() => {
|
|
|
785
785
|
data: r
|
|
786
786
|
};
|
|
787
787
|
});
|
|
788
|
-
})(),
|
|
789
|
-
const h = (r) => typeof r.deviceKey == "string" && 1 <= r.deviceKey.length && typeof r.topic == "string" && 1 <= r.topic.length && (r.args === void 0 || Array.isArray(r.args)) && (r.kwargs === void 0 || typeof r.kwargs == "object" && r.kwargs !== null && Array.isArray(r.kwargs) === !1 &&
|
|
788
|
+
})(), le = (() => {
|
|
789
|
+
const h = (r) => typeof r.deviceKey == "string" && 1 <= r.deviceKey.length && typeof r.topic == "string" && 1 <= r.topic.length && (r.args === void 0 || Array.isArray(r.args)) && (r.kwargs === void 0 || typeof r.kwargs == "object" && r.kwargs !== null && Array.isArray(r.kwargs) === !1 && t(r.kwargs)), t = (r) => Object.keys(r).every((o) => (r[o] === void 0, !0)), s = (r, o, e = !0) => [typeof r.deviceKey == "string" && (1 <= r.deviceKey.length || u(e, {
|
|
790
790
|
path: o + ".deviceKey",
|
|
791
791
|
expected: "string & MinLength<1>",
|
|
792
792
|
value: r.deviceKey
|
|
@@ -814,15 +814,15 @@ const U = (() => {
|
|
|
814
814
|
path: o + ".kwargs",
|
|
815
815
|
expected: "(Record<string, unknown> | undefined)",
|
|
816
816
|
value: r.kwargs
|
|
817
|
-
})].every((n) => n), a = (r, o, e = !0) => [e === !1 || Object.keys(r).map((n) => (r[n] === void 0, !0)).every((n) => n)].every((n) => n),
|
|
817
|
+
})].every((n) => n), a = (r, o, e = !0) => [e === !1 || Object.keys(r).map((n) => (r[n] === void 0, !0)).every((n) => n)].every((n) => n), l = (r) => typeof r == "object" && r !== null && h(r);
|
|
818
818
|
let i, u;
|
|
819
|
-
return
|
|
820
|
-
if (
|
|
821
|
-
i = [], u =
|
|
819
|
+
return k((r) => {
|
|
820
|
+
if (l(r) === !1) {
|
|
821
|
+
i = [], u = R(i), ((e, n, c = !0) => (typeof e == "object" && e !== null || u(!0, {
|
|
822
822
|
path: n + "",
|
|
823
823
|
expected: "CallParams",
|
|
824
824
|
value: e
|
|
825
|
-
})) &&
|
|
825
|
+
})) && s(e, n + "", !0) || u(!0, {
|
|
826
826
|
path: n + "",
|
|
827
827
|
expected: "CallParams",
|
|
828
828
|
value: e
|
|
@@ -843,7 +843,7 @@ const U = (() => {
|
|
|
843
843
|
};
|
|
844
844
|
});
|
|
845
845
|
})(), P = (() => {
|
|
846
|
-
const h = (r) => typeof r.tablename == "string" && 1 <= r.tablename.length && (r.args === void 0 || Array.isArray(r.args)) && (r.kwargs === void 0 || typeof r.kwargs == "object" && r.kwargs !== null && Array.isArray(r.kwargs) === !1 &&
|
|
846
|
+
const h = (r) => typeof r.tablename == "string" && 1 <= r.tablename.length && (r.args === void 0 || Array.isArray(r.args)) && (r.kwargs === void 0 || typeof r.kwargs == "object" && r.kwargs !== null && Array.isArray(r.kwargs) === !1 && t(r.kwargs)), t = (r) => Object.keys(r).every((o) => (r[o] === void 0, !0)), s = (r, o, e = !0) => [typeof r.tablename == "string" && (1 <= r.tablename.length || u(e, {
|
|
847
847
|
path: o + ".tablename",
|
|
848
848
|
expected: "string & MinLength<1>",
|
|
849
849
|
value: r.tablename
|
|
@@ -863,15 +863,15 @@ const U = (() => {
|
|
|
863
863
|
path: o + ".kwargs",
|
|
864
864
|
expected: "(Record<string, unknown> | undefined)",
|
|
865
865
|
value: r.kwargs
|
|
866
|
-
})].every((n) => n), a = (r, o, e = !0) => [e === !1 || Object.keys(r).map((n) => (r[n] === void 0, !0)).every((n) => n)].every((n) => n),
|
|
866
|
+
})].every((n) => n), a = (r, o, e = !0) => [e === !1 || Object.keys(r).map((n) => (r[n] === void 0, !0)).every((n) => n)].every((n) => n), l = (r) => typeof r == "object" && r !== null && h(r);
|
|
867
867
|
let i, u;
|
|
868
|
-
return
|
|
869
|
-
if (
|
|
870
|
-
i = [], u =
|
|
868
|
+
return k((r) => {
|
|
869
|
+
if (l(r) === !1) {
|
|
870
|
+
i = [], u = R(i), ((e, n, c = !0) => (typeof e == "object" && e !== null || u(!0, {
|
|
871
871
|
path: n + "",
|
|
872
872
|
expected: "TableParams",
|
|
873
873
|
value: e
|
|
874
|
-
})) &&
|
|
874
|
+
})) && s(e, n + "", !0) || u(!0, {
|
|
875
875
|
path: n + "",
|
|
876
876
|
expected: "TableParams",
|
|
877
877
|
value: e
|
|
@@ -892,7 +892,7 @@ const U = (() => {
|
|
|
892
892
|
};
|
|
893
893
|
});
|
|
894
894
|
})(), x = (() => {
|
|
895
|
-
const h = (r) => typeof r.tablename == "string" && 1 <= r.tablename.length && Array.isArray(r.rows) && 1 <= r.rows.length && r.rows.every((o) => typeof o == "object" && o !== null && Array.isArray(o) === !1 &&
|
|
895
|
+
const h = (r) => typeof r.tablename == "string" && 1 <= r.tablename.length && Array.isArray(r.rows) && 1 <= r.rows.length && r.rows.every((o) => typeof o == "object" && o !== null && Array.isArray(o) === !1 && t(o)) && (r.kwargs === void 0 || typeof r.kwargs == "object" && r.kwargs !== null && Array.isArray(r.kwargs) === !1 && t(r.kwargs)), t = (r) => Object.keys(r).every((o) => (r[o] === void 0, !0)), s = (r, o, e = !0) => [typeof r.tablename == "string" && (1 <= r.tablename.length || u(e, {
|
|
896
896
|
path: o + ".tablename",
|
|
897
897
|
expected: "string & MinLength<1>",
|
|
898
898
|
value: r.tablename
|
|
@@ -908,12 +908,12 @@ const U = (() => {
|
|
|
908
908
|
path: o + ".rows",
|
|
909
909
|
expected: "Array<> & MinItems<1>",
|
|
910
910
|
value: r.rows
|
|
911
|
-
})) && r.rows.map((n,
|
|
912
|
-
path: o + ".rows[" +
|
|
911
|
+
})) && r.rows.map((n, c) => (typeof n == "object" && n !== null && Array.isArray(n) === !1 || u(e, {
|
|
912
|
+
path: o + ".rows[" + c + "]",
|
|
913
913
|
expected: "Record<string, unknown>",
|
|
914
914
|
value: n
|
|
915
|
-
})) && a(n, o + ".rows[" +
|
|
916
|
-
path: o + ".rows[" +
|
|
915
|
+
})) && a(n, o + ".rows[" + c + "]", e) || u(e, {
|
|
916
|
+
path: o + ".rows[" + c + "]",
|
|
917
917
|
expected: "Record<string, unknown>",
|
|
918
918
|
value: n
|
|
919
919
|
})).every((n) => n) || u(e, {
|
|
@@ -928,15 +928,15 @@ const U = (() => {
|
|
|
928
928
|
path: o + ".kwargs",
|
|
929
929
|
expected: "(Record<string, unknown> | undefined)",
|
|
930
930
|
value: r.kwargs
|
|
931
|
-
})].every((n) => n), a = (r, o, e = !0) => [e === !1 || Object.keys(r).map((n) => (r[n] === void 0, !0)).every((n) => n)].every((n) => n),
|
|
931
|
+
})].every((n) => n), a = (r, o, e = !0) => [e === !1 || Object.keys(r).map((n) => (r[n] === void 0, !0)).every((n) => n)].every((n) => n), l = (r) => typeof r == "object" && r !== null && h(r);
|
|
932
932
|
let i, u;
|
|
933
|
-
return
|
|
934
|
-
if (
|
|
935
|
-
i = [], u =
|
|
933
|
+
return k((r) => {
|
|
934
|
+
if (l(r) === !1) {
|
|
935
|
+
i = [], u = R(i), ((e, n, c = !0) => (typeof e == "object" && e !== null || u(!0, {
|
|
936
936
|
path: n + "",
|
|
937
937
|
expected: "BulkTableParams",
|
|
938
938
|
value: e
|
|
939
|
-
})) &&
|
|
939
|
+
})) && s(e, n + "", !0) || u(!0, {
|
|
940
940
|
path: n + "",
|
|
941
941
|
expected: "BulkTableParams",
|
|
942
942
|
value: e
|
|
@@ -964,22 +964,22 @@ const U = (() => {
|
|
|
964
964
|
"wamp.error.authorization_failed": "NOT_AUTHORIZED",
|
|
965
965
|
"wamp.error.authentication_failed": "NOT_AUTHORIZED"
|
|
966
966
|
};
|
|
967
|
-
class
|
|
968
|
-
constructor(
|
|
969
|
-
super(
|
|
967
|
+
class p extends Error {
|
|
968
|
+
constructor(t, s) {
|
|
969
|
+
super(s ?? t), this.name = "CrossAppAccessError", this.code = t;
|
|
970
970
|
}
|
|
971
971
|
}
|
|
972
|
-
function
|
|
973
|
-
const
|
|
974
|
-
if (typeof
|
|
975
|
-
const
|
|
976
|
-
if (!
|
|
977
|
-
const a = h.args,
|
|
978
|
-
return new
|
|
972
|
+
function S(h) {
|
|
973
|
+
const t = h == null ? void 0 : h.error;
|
|
974
|
+
if (typeof t != "string") return null;
|
|
975
|
+
const s = oe[t];
|
|
976
|
+
if (!s) return null;
|
|
977
|
+
const a = h.args, l = Array.isArray(a) && a.length > 0 ? `: ${JSON.stringify(a[0])}` : "";
|
|
978
|
+
return new p(s, `${t}${l}`);
|
|
979
979
|
}
|
|
980
980
|
class ae {
|
|
981
|
-
constructor(
|
|
982
|
-
this.app =
|
|
981
|
+
constructor(t, s, a, l, i) {
|
|
982
|
+
this.app = t, this.stage = s, this.tables = a.tables ?? [], this.transforms = a.transforms ?? [], this._connection = l, this._onClosed = i;
|
|
983
983
|
}
|
|
984
984
|
get connection() {
|
|
985
985
|
return this._connection;
|
|
@@ -990,13 +990,13 @@ class ae {
|
|
|
990
990
|
// DX guard: names outside the shared catalog are either private or don't
|
|
991
991
|
// exist — fail fast client-side instead of silently receiving nothing
|
|
992
992
|
// (private publishes are filtered via exclude_authrole, not errors).
|
|
993
|
-
assertInCatalog(
|
|
994
|
-
if (!
|
|
995
|
-
const
|
|
996
|
-
if (!
|
|
997
|
-
throw new
|
|
993
|
+
assertInCatalog(t) {
|
|
994
|
+
if (!t) throw new Error("Tablename must not be empty!");
|
|
995
|
+
const s = [...this.tables, ...this.transforms].map((a) => a.tablename);
|
|
996
|
+
if (!s.includes(t))
|
|
997
|
+
throw new p(
|
|
998
998
|
"PRIVATE_TABLE",
|
|
999
|
-
`'${
|
|
999
|
+
`'${t}' is not shared by app '${this.app}' (${this.stage}). Available tables/transforms: ${s.length > 0 ? s.join(", ") : "none"}`
|
|
1000
1000
|
);
|
|
1001
1001
|
}
|
|
1002
1002
|
/**
|
|
@@ -1004,71 +1004,71 @@ class ae {
|
|
|
1004
1004
|
* (`transformed.bulk.{t}`) are unrolled row-by-row through the same handler,
|
|
1005
1005
|
* so caller code always sees the single-row shape.
|
|
1006
1006
|
*/
|
|
1007
|
-
async subscribeToTable(
|
|
1008
|
-
this.assertInCatalog(
|
|
1009
|
-
const
|
|
1007
|
+
async subscribeToTable(t, s, a) {
|
|
1008
|
+
this.assertInCatalog(t);
|
|
1009
|
+
const l = await this._connection.subscribe(`transformed.${t}`, s), i = (u, r, o) => {
|
|
1010
1010
|
const e = Array.isArray(u) ? u[0] : u, n = Array.isArray(e) ? e : e == null ? [] : [e];
|
|
1011
|
-
for (const
|
|
1012
|
-
|
|
1011
|
+
for (const c of n)
|
|
1012
|
+
s([c], r, o);
|
|
1013
1013
|
};
|
|
1014
|
-
return await this._connection.subscribe(`transformed.bulk.${
|
|
1014
|
+
return await this._connection.subscribe(`transformed.bulk.${t}`, i), l;
|
|
1015
1015
|
}
|
|
1016
1016
|
/** Queries history rows of a shared table or transform. */
|
|
1017
|
-
async getHistory(
|
|
1018
|
-
this.assertInCatalog(
|
|
1019
|
-
const a = U(
|
|
1017
|
+
async getHistory(t, s = { limit: 10 }) {
|
|
1018
|
+
this.assertInCatalog(t), s.offset == null && (s.offset = 0);
|
|
1019
|
+
const a = U(s);
|
|
1020
1020
|
if (!a.success)
|
|
1021
|
-
throw new Error(`Invalid query parameters: ${a.errors.map((
|
|
1021
|
+
throw new Error(`Invalid query parameters: ${a.errors.map((l) => l.path + ": " + l.expected).join(", ")}`);
|
|
1022
1022
|
try {
|
|
1023
|
-
return await this._connection.call(`history.transformed.${
|
|
1024
|
-
} catch (
|
|
1025
|
-
throw
|
|
1023
|
+
return await this._connection.call(`history.transformed.${t}`, [s]);
|
|
1024
|
+
} catch (l) {
|
|
1025
|
+
throw S(l) ?? l;
|
|
1026
1026
|
}
|
|
1027
1027
|
}
|
|
1028
1028
|
/** Queries down-sampled series history of a shared table (tables only — no series RPC exists for transforms). */
|
|
1029
|
-
async getSeriesHistory(
|
|
1030
|
-
if (!
|
|
1029
|
+
async getSeriesHistory(t, s) {
|
|
1030
|
+
if (!t) throw new Error("Tablename must not be empty!");
|
|
1031
1031
|
const a = this.tables.map((i) => i.tablename);
|
|
1032
|
-
if (!a.includes(
|
|
1033
|
-
throw this.transforms.some((i) => i.tablename ===
|
|
1032
|
+
if (!a.includes(t))
|
|
1033
|
+
throw this.transforms.some((i) => i.tablename === t) ? new p(
|
|
1034
1034
|
"PRIVATE_TABLE",
|
|
1035
|
-
`'${
|
|
1036
|
-
) : new
|
|
1035
|
+
`'${t}' is a transform of app '${this.app}' (${this.stage}); series history is available for tables only — use getHistory() instead.`
|
|
1036
|
+
) : new p(
|
|
1037
1037
|
"PRIVATE_TABLE",
|
|
1038
|
-
`'${
|
|
1038
|
+
`'${t}' is not a shared table of app '${this.app}' (${this.stage}). Available tables: ${a.length > 0 ? a.join(", ") : "none"}`
|
|
1039
1039
|
);
|
|
1040
|
-
const
|
|
1041
|
-
if (!
|
|
1042
|
-
throw new Error(`Invalid series query parameters: ${
|
|
1040
|
+
const l = F(s);
|
|
1041
|
+
if (!l.success)
|
|
1042
|
+
throw new Error(`Invalid series query parameters: ${l.errors.map((i) => i.path + ": " + i.expected).join(", ")}`);
|
|
1043
1043
|
try {
|
|
1044
|
-
return await this._connection.call(`history.transformed.series.${
|
|
1044
|
+
return await this._connection.call(`history.transformed.series.${t}`, [s]);
|
|
1045
1045
|
} catch (i) {
|
|
1046
|
-
throw
|
|
1046
|
+
throw S(i) ?? i;
|
|
1047
1047
|
}
|
|
1048
1048
|
}
|
|
1049
1049
|
/** Closes the underlying connection to the provider's realm. */
|
|
1050
1050
|
async close() {
|
|
1051
|
-
var
|
|
1052
|
-
this._connection.stop(), (
|
|
1051
|
+
var t;
|
|
1052
|
+
this._connection.stop(), (t = this._onClosed) == null || t.call(this), this._onClosed = void 0;
|
|
1053
1053
|
}
|
|
1054
1054
|
}
|
|
1055
|
-
const
|
|
1055
|
+
const D = "error-logs";
|
|
1056
1056
|
function b(h) {
|
|
1057
|
-
var
|
|
1058
|
-
return typeof process < "u" ? (
|
|
1057
|
+
var t;
|
|
1058
|
+
return typeof process < "u" ? (t = process.env) == null ? void 0 : t[h] : void 0;
|
|
1059
1059
|
}
|
|
1060
1060
|
function ie(h) {
|
|
1061
|
-
const
|
|
1062
|
-
if (!
|
|
1061
|
+
const t = h ?? b("DEVICE_SERIAL_NUMBER");
|
|
1062
|
+
if (!t)
|
|
1063
1063
|
throw new Error("serialNumber option is required (or set DEVICE_SERIAL_NUMBER env var in Node.js)");
|
|
1064
|
-
return
|
|
1064
|
+
return t;
|
|
1065
1065
|
}
|
|
1066
1066
|
class V {
|
|
1067
|
-
constructor(
|
|
1068
|
-
this._isConfigured = !1, this._consumedApps = /* @__PURE__ */ new Map(), this._serialNumber = ie(
|
|
1069
|
-
const
|
|
1070
|
-
this._deviceKey ||
|
|
1071
|
-
`Warning: The following environment variables must be present: ${
|
|
1067
|
+
constructor(t) {
|
|
1068
|
+
this._isConfigured = !1, this._consumedApps = /* @__PURE__ */ new Map(), this._serialNumber = ie(t == null ? void 0 : t.serialNumber), this._deviceName = (t == null ? void 0 : t.deviceName) ?? b("DEVICE_NAME"), this._deviceKey = (t == null ? void 0 : t.deviceKey) ?? b("DEVICE_KEY"), this._appName = (t == null ? void 0 : t.appName) ?? b("APP_NAME"), this._swarmKey = (t == null ? void 0 : t.swarmKey) ?? parseInt(b("SWARM_KEY") ?? "0", 10), this._appKey = (t == null ? void 0 : t.appKey) ?? parseInt(b("APP_KEY") ?? "0", 10), this._env = (t == null ? void 0 : t.env) ?? b("ENV"), this._reswarmUrl = (t == null ? void 0 : t.reswarmUrl) ?? b("RESWARM_URL"), this._cburl = (t == null ? void 0 : t.ironFlockUrl) ?? (t == null ? void 0 : t.cburl), this._connection = new T();
|
|
1069
|
+
const s = [];
|
|
1070
|
+
this._deviceKey || s.push("DEVICE_KEY"), this._appName || s.push("APP_NAME"), this._swarmKey || s.push("SWARM_KEY"), this._appKey || s.push("APP_KEY"), s.length > 0 && console.warn(
|
|
1071
|
+
`Warning: The following environment variables must be present: ${s.join(", ")}`
|
|
1072
1072
|
);
|
|
1073
1073
|
}
|
|
1074
1074
|
get connection() {
|
|
@@ -1077,27 +1077,27 @@ class V {
|
|
|
1077
1077
|
get isConnected() {
|
|
1078
1078
|
return this._connection.is_open;
|
|
1079
1079
|
}
|
|
1080
|
-
configureConnection(
|
|
1080
|
+
configureConnection(t) {
|
|
1081
1081
|
if (this._isConfigured) return;
|
|
1082
|
-
const
|
|
1083
|
-
DEV:
|
|
1084
|
-
PROD:
|
|
1085
|
-
}[
|
|
1082
|
+
const s = (this._env ?? "DEV").toUpperCase(), l = {
|
|
1083
|
+
DEV: _.DEVELOPMENT,
|
|
1084
|
+
PROD: _.PRODUCTION
|
|
1085
|
+
}[s] ?? _.DEVELOPMENT, i = t ?? this._cburl ?? T.getWebSocketURI(this._reswarmUrl);
|
|
1086
1086
|
this._connection.configure(
|
|
1087
1087
|
this._swarmKey,
|
|
1088
1088
|
this._appKey,
|
|
1089
|
-
|
|
1089
|
+
l,
|
|
1090
1090
|
this._serialNumber,
|
|
1091
1091
|
i
|
|
1092
1092
|
), this._isConfigured = !0;
|
|
1093
1093
|
}
|
|
1094
|
-
async start(
|
|
1095
|
-
this.configureConnection(
|
|
1094
|
+
async start(t) {
|
|
1095
|
+
this.configureConnection(t), await this._connection.start();
|
|
1096
1096
|
}
|
|
1097
1097
|
async stop() {
|
|
1098
|
-
const
|
|
1098
|
+
const t = [...this._consumedApps.values()];
|
|
1099
1099
|
this._consumedApps.clear(), await Promise.all(
|
|
1100
|
-
|
|
1100
|
+
t.map((s) => s.then((a) => a.close()).catch(() => {
|
|
1101
1101
|
}))
|
|
1102
1102
|
), this._connection.stop();
|
|
1103
1103
|
}
|
|
@@ -1114,76 +1114,146 @@ class V {
|
|
|
1114
1114
|
* @throws {CrossAppAccessError} NO_GRANT | PROVIDER_NOT_INSTALLED |
|
|
1115
1115
|
* UNKNOWN_APP | NOT_AUTHORIZED
|
|
1116
1116
|
*/
|
|
1117
|
-
async connectToApp(
|
|
1118
|
-
if (!
|
|
1119
|
-
const a = (this._env ?? "DEV").toUpperCase() === "PROD" ? "prod" : "dev",
|
|
1117
|
+
async connectToApp(t, s) {
|
|
1118
|
+
if (!t) throw new Error("appName must not be empty!");
|
|
1119
|
+
const a = (this._env ?? "DEV").toUpperCase() === "PROD" ? "prod" : "dev", l = (s == null ? void 0 : s.stage) ?? a, i = `${t.toLowerCase()}:${l}`, u = this._consumedApps.get(i);
|
|
1120
1120
|
if (u) return u;
|
|
1121
1121
|
let r;
|
|
1122
1122
|
const o = () => {
|
|
1123
1123
|
this._consumedApps.get(i) === r && this._consumedApps.delete(i);
|
|
1124
1124
|
};
|
|
1125
|
-
return r = this.openConsumedApp(
|
|
1125
|
+
return r = this.openConsumedApp(t, l, o, s == null ? void 0 : s.onError), this._consumedApps.set(i, r), r.catch(o), r;
|
|
1126
1126
|
}
|
|
1127
|
-
|
|
1128
|
-
|
|
1127
|
+
/**
|
|
1128
|
+
* Lists every non-private provider catalog in this project for an app holding
|
|
1129
|
+
* the wildcard consume grant (`consumes: [{app: "*"}]`). One
|
|
1130
|
+
* `sys.appaccess.list` call; opens no consumed-app connections. A picker (e.g.
|
|
1131
|
+
* a Node-RED node) renders the returned catalogs, then calls
|
|
1132
|
+
* {@link connectToApp} per chosen provider; {@link connectToAllApps} opens
|
|
1133
|
+
* them all eagerly.
|
|
1134
|
+
*
|
|
1135
|
+
* @throws {CrossAppAccessError} NO_GRANT when this app holds no wildcard grant.
|
|
1136
|
+
*/
|
|
1137
|
+
async listConsumableApps() {
|
|
1138
|
+
try {
|
|
1139
|
+
return await this._connection.call(
|
|
1140
|
+
"sys.appaccess.list",
|
|
1141
|
+
[]
|
|
1142
|
+
) ?? [];
|
|
1143
|
+
} catch (t) {
|
|
1144
|
+
throw S(t) ?? t;
|
|
1145
|
+
}
|
|
1146
|
+
}
|
|
1147
|
+
/**
|
|
1148
|
+
* Opens read-only connections to every non-private provider in this project
|
|
1149
|
+
* (wildcard consumers only). Enumerates providers via {@link listConsumableApps}
|
|
1150
|
+
* and opens each directly from its resolved info — no per-app resolve
|
|
1151
|
+
* round-trip. Each handle is cached under the same `${app}:${stage}` key
|
|
1152
|
+
* {@link connectToApp} uses, so a later `connectToApp(name)` returns the warmed
|
|
1153
|
+
* handle. Providers lacking a data backend for the requested stage are skipped.
|
|
1154
|
+
*
|
|
1155
|
+
* @throws {CrossAppAccessError} NO_GRANT when this app holds no wildcard grant.
|
|
1156
|
+
*/
|
|
1157
|
+
async connectToAllApps(t) {
|
|
1158
|
+
var e, n;
|
|
1159
|
+
const s = (this._env ?? "DEV").toUpperCase() === "PROD" ? "prod" : "dev", a = (t == null ? void 0 : t.stage) ?? s, l = (t == null ? void 0 : t.continueOnError) ?? !0, i = await this.listConsumableApps(), u = [];
|
|
1160
|
+
for (const c of i)
|
|
1161
|
+
(e = c.stages) != null && e[a] && u.push(this.openCachedFromInfo(c, a, t == null ? void 0 : t.onError));
|
|
1162
|
+
const r = await Promise.allSettled(u), o = [];
|
|
1163
|
+
for (const c of r)
|
|
1164
|
+
if (c.status === "fulfilled")
|
|
1165
|
+
o.push(c.value);
|
|
1166
|
+
else if (l)
|
|
1167
|
+
(n = t == null ? void 0 : t.onError) == null || n.call(t, c.reason);
|
|
1168
|
+
else
|
|
1169
|
+
throw c.reason;
|
|
1170
|
+
return o;
|
|
1171
|
+
}
|
|
1172
|
+
async openConsumedApp(t, s, a, l) {
|
|
1129
1173
|
let i;
|
|
1130
1174
|
try {
|
|
1131
1175
|
i = await this._connection.call("sys.appaccess.resolve", [
|
|
1132
|
-
{ app:
|
|
1176
|
+
{ app: t }
|
|
1133
1177
|
]);
|
|
1134
|
-
} catch (
|
|
1135
|
-
throw
|
|
1178
|
+
} catch (u) {
|
|
1179
|
+
throw S(u) ?? u;
|
|
1136
1180
|
}
|
|
1137
|
-
|
|
1138
|
-
|
|
1139
|
-
throw new M(
|
|
1181
|
+
if (!i)
|
|
1182
|
+
throw new p(
|
|
1140
1183
|
"PROVIDER_NOT_INSTALLED",
|
|
1141
|
-
`App '${
|
|
1184
|
+
`App '${t}' has no ${s} data backend in this project`
|
|
1142
1185
|
);
|
|
1143
|
-
|
|
1186
|
+
return this.openFromInfo(i, s, a, l);
|
|
1187
|
+
}
|
|
1188
|
+
/** Caches (or reuses) a connection opened directly from a resolved provider
|
|
1189
|
+
* info, using the same `${app}:${stage}` key as {@link connectToApp}. */
|
|
1190
|
+
openCachedFromInfo(t, s, a) {
|
|
1191
|
+
const l = `${t.app}:${s}`, i = this._consumedApps.get(l);
|
|
1192
|
+
if (i) return i;
|
|
1193
|
+
let u;
|
|
1194
|
+
const r = () => {
|
|
1195
|
+
this._consumedApps.get(l) === u && this._consumedApps.delete(l);
|
|
1196
|
+
};
|
|
1197
|
+
return u = this.openFromInfo(t, s, r, a), this._consumedApps.set(l, u), u.catch(r), u;
|
|
1198
|
+
}
|
|
1199
|
+
/**
|
|
1200
|
+
* Opens the second CrossbarConnection to a provider realm from an already
|
|
1201
|
+
* resolved {@link ConsumedAppInfo} — everything after the sys.appaccess.resolve
|
|
1202
|
+
* round-trip. Shared by {@link connectToApp} (which resolves one provider) and
|
|
1203
|
+
* {@link connectToAllApps} (which lists every provider in one call).
|
|
1204
|
+
*/
|
|
1205
|
+
async openFromInfo(t, s, a, l) {
|
|
1206
|
+
var n;
|
|
1207
|
+
const i = t.app, u = (n = t.stages) == null ? void 0 : n[s];
|
|
1208
|
+
if (!u)
|
|
1209
|
+
throw new p(
|
|
1210
|
+
"PROVIDER_NOT_INSTALLED",
|
|
1211
|
+
`App '${i}' has no ${s} data backend in this project`
|
|
1212
|
+
);
|
|
1213
|
+
const r = new T();
|
|
1144
1214
|
r.failOnAuthError = !0, r.configure(
|
|
1145
1215
|
this._swarmKey,
|
|
1146
|
-
|
|
1147
|
-
|
|
1216
|
+
t.provider_app_key,
|
|
1217
|
+
s === "prod" ? _.PRODUCTION : _.DEVELOPMENT,
|
|
1148
1218
|
this._serialNumber,
|
|
1149
1219
|
// Reuse the own connection's resolved socket URI (set once start() ran).
|
|
1150
|
-
this._connection.socketURI ?? this._cburl ??
|
|
1220
|
+
this._connection.socketURI ?? this._cburl ?? T.getWebSocketURI(this._reswarmUrl)
|
|
1151
1221
|
);
|
|
1152
1222
|
let o = !1, e;
|
|
1153
|
-
r.on("auth_failure", (
|
|
1154
|
-
e = new
|
|
1223
|
+
r.on("auth_failure", (c) => {
|
|
1224
|
+
e = new p(
|
|
1155
1225
|
"NOT_AUTHORIZED",
|
|
1156
|
-
`Access to app '${
|
|
1157
|
-
), a(), o && (
|
|
1226
|
+
`Access to app '${i}' (${s}) denied: ${c}. The grant may have been revoked.`
|
|
1227
|
+
), a(), o && (l == null || l(e));
|
|
1158
1228
|
});
|
|
1159
1229
|
try {
|
|
1160
1230
|
await r.start();
|
|
1161
|
-
} catch (
|
|
1162
|
-
throw e ??
|
|
1231
|
+
} catch (c) {
|
|
1232
|
+
throw e ?? c;
|
|
1163
1233
|
}
|
|
1164
|
-
return o = !0, new ae(
|
|
1234
|
+
return o = !0, new ae(i, s, u, r, a);
|
|
1165
1235
|
}
|
|
1166
|
-
async publish(
|
|
1167
|
-
const
|
|
1168
|
-
if (!
|
|
1169
|
-
throw new Error(`Invalid publish parameters: ${
|
|
1236
|
+
async publish(t, s, a) {
|
|
1237
|
+
const l = ne({ topic: t, args: s, kwargs: a });
|
|
1238
|
+
if (!l.success)
|
|
1239
|
+
throw new Error(`Invalid publish parameters: ${l.errors.map((r) => r.path + ": " + r.expected).join(", ")}`);
|
|
1170
1240
|
const u = { ...{
|
|
1171
1241
|
DEVICE_SERIAL_NUMBER: this._serialNumber,
|
|
1172
1242
|
DEVICE_KEY: this._deviceKey,
|
|
1173
1243
|
DEVICE_NAME: this._deviceName
|
|
1174
1244
|
}, ...a ?? {} };
|
|
1175
|
-
return this._connection.publish(
|
|
1245
|
+
return this._connection.publish(t, s, u, {
|
|
1176
1246
|
acknowledge: !0
|
|
1177
1247
|
});
|
|
1178
1248
|
}
|
|
1179
|
-
async publishToTable(
|
|
1180
|
-
const
|
|
1181
|
-
if (!
|
|
1182
|
-
throw new Error(`Invalid table parameters: ${
|
|
1249
|
+
async publishToTable(t, s, a) {
|
|
1250
|
+
const l = P({ tablename: t, args: s, kwargs: a });
|
|
1251
|
+
if (!l.success)
|
|
1252
|
+
throw new Error(`Invalid table parameters: ${l.errors.map((u) => u.path + ": " + u.expected).join(", ")}`);
|
|
1183
1253
|
if (!this._swarmKey) throw new Error("SWARM_KEY not set in environment variables!");
|
|
1184
1254
|
if (!this._appKey) throw new Error("APP_KEY not set in environment variables!");
|
|
1185
|
-
const i = `${this._swarmKey}.${this._appKey}.${
|
|
1186
|
-
return this.publish(i,
|
|
1255
|
+
const i = `${this._swarmKey}.${this._appKey}.${t}`;
|
|
1256
|
+
return this.publish(i, s, a);
|
|
1187
1257
|
}
|
|
1188
1258
|
/**
|
|
1189
1259
|
* Reports an application error into the databackend's `error-logs` table.
|
|
@@ -1199,27 +1269,27 @@ class V {
|
|
|
1199
1269
|
* @param error An error message, or an Error whose stack/message is recorded.
|
|
1200
1270
|
* @param opts Optional level (default "error"), append flag, and tsp override.
|
|
1201
1271
|
*/
|
|
1202
|
-
async reportError(
|
|
1203
|
-
const a =
|
|
1204
|
-
tsp: (
|
|
1272
|
+
async reportError(t, s) {
|
|
1273
|
+
const a = t instanceof Error ? t.stack ?? t.message : t, l = {
|
|
1274
|
+
tsp: (s == null ? void 0 : s.tsp) ?? (/* @__PURE__ */ new Date()).toISOString(),
|
|
1205
1275
|
msg: a,
|
|
1206
1276
|
source: "app",
|
|
1207
|
-
level: (
|
|
1277
|
+
level: (s == null ? void 0 : s.level) ?? "error"
|
|
1208
1278
|
};
|
|
1209
|
-
return
|
|
1279
|
+
return s != null && s.append ? this.appendToTable(D, [l]) : this.publishToTable(D, [l]);
|
|
1210
1280
|
}
|
|
1211
|
-
async appendToTable(
|
|
1212
|
-
const
|
|
1213
|
-
if (!
|
|
1214
|
-
throw new Error(`Invalid table parameters: ${
|
|
1281
|
+
async appendToTable(t, s, a) {
|
|
1282
|
+
const l = P({ tablename: t, args: s, kwargs: a });
|
|
1283
|
+
if (!l.success)
|
|
1284
|
+
throw new Error(`Invalid table parameters: ${l.errors.map((o) => o.path + ": " + o.expected).join(", ")}`);
|
|
1215
1285
|
if (!this._swarmKey) throw new Error("SWARM_KEY not set in environment variables!");
|
|
1216
1286
|
if (!this._appKey) throw new Error("APP_KEY not set in environment variables!");
|
|
1217
|
-
const i = `append.${this._swarmKey}.${this._appKey}.${
|
|
1287
|
+
const i = `append.${this._swarmKey}.${this._appKey}.${t}`, r = { ...{
|
|
1218
1288
|
DEVICE_SERIAL_NUMBER: this._serialNumber,
|
|
1219
1289
|
DEVICE_KEY: this._deviceKey,
|
|
1220
1290
|
DEVICE_NAME: this._deviceName
|
|
1221
1291
|
}, ...a ?? {} };
|
|
1222
|
-
return this._connection.call(i,
|
|
1292
|
+
return this._connection.call(i, s, r);
|
|
1223
1293
|
}
|
|
1224
1294
|
/**
|
|
1225
1295
|
* Publishes many rows in a single message (bulk insert) to the dedicated topic
|
|
@@ -1229,14 +1299,14 @@ class V {
|
|
|
1229
1299
|
* confirms delivery to the router, not the DB insert. Use appendRowsToTable when
|
|
1230
1300
|
* you need the insert outcome.
|
|
1231
1301
|
*/
|
|
1232
|
-
async publishRowsToTable(
|
|
1233
|
-
const
|
|
1234
|
-
if (!
|
|
1235
|
-
throw new Error(`Invalid bulk table parameters: ${
|
|
1302
|
+
async publishRowsToTable(t, s, a) {
|
|
1303
|
+
const l = x({ tablename: t, rows: s, kwargs: a });
|
|
1304
|
+
if (!l.success)
|
|
1305
|
+
throw new Error(`Invalid bulk table parameters: ${l.errors.map((u) => u.path + ": " + u.expected).join(", ")}`);
|
|
1236
1306
|
if (!this._swarmKey) throw new Error("SWARM_KEY not set in environment variables!");
|
|
1237
1307
|
if (!this._appKey) throw new Error("APP_KEY not set in environment variables!");
|
|
1238
|
-
const i = `bulk.${this._swarmKey}.${this._appKey}.${
|
|
1239
|
-
return this.publish(i, [
|
|
1308
|
+
const i = `bulk.${this._swarmKey}.${this._appKey}.${t}`;
|
|
1309
|
+
return this.publish(i, [s], a);
|
|
1240
1310
|
}
|
|
1241
1311
|
/**
|
|
1242
1312
|
* Appends many rows in a single RPC (bulk insert) by calling the dedicated
|
|
@@ -1246,66 +1316,66 @@ class V {
|
|
|
1246
1316
|
* (e.g. { success: true, count: N }). Prefer over publishRowsToTable when you
|
|
1247
1317
|
* need the insert outcome.
|
|
1248
1318
|
*/
|
|
1249
|
-
async appendRowsToTable(
|
|
1250
|
-
const
|
|
1251
|
-
if (!
|
|
1252
|
-
throw new Error(`Invalid bulk table parameters: ${
|
|
1319
|
+
async appendRowsToTable(t, s, a) {
|
|
1320
|
+
const l = x({ tablename: t, rows: s, kwargs: a });
|
|
1321
|
+
if (!l.success)
|
|
1322
|
+
throw new Error(`Invalid bulk table parameters: ${l.errors.map((o) => o.path + ": " + o.expected).join(", ")}`);
|
|
1253
1323
|
if (!this._swarmKey) throw new Error("SWARM_KEY not set in environment variables!");
|
|
1254
1324
|
if (!this._appKey) throw new Error("APP_KEY not set in environment variables!");
|
|
1255
|
-
const i = `appendBulk.${this._swarmKey}.${this._appKey}.${
|
|
1325
|
+
const i = `appendBulk.${this._swarmKey}.${this._appKey}.${t}`, r = { ...{
|
|
1256
1326
|
DEVICE_SERIAL_NUMBER: this._serialNumber,
|
|
1257
1327
|
DEVICE_KEY: this._deviceKey,
|
|
1258
1328
|
DEVICE_NAME: this._deviceName
|
|
1259
1329
|
}, ...a ?? {} };
|
|
1260
|
-
return this._connection.call(i, [
|
|
1330
|
+
return this._connection.call(i, [s], r);
|
|
1261
1331
|
}
|
|
1262
|
-
async subscribe(
|
|
1263
|
-
return this._connection.subscribe(
|
|
1332
|
+
async subscribe(t, s, a) {
|
|
1333
|
+
return this._connection.subscribe(t, s);
|
|
1264
1334
|
}
|
|
1265
|
-
async subscribeToTable(
|
|
1335
|
+
async subscribeToTable(t, s, a) {
|
|
1266
1336
|
if (!this._swarmKey) throw new Error("SWARM_KEY not set in environment variables!");
|
|
1267
1337
|
if (!this._appKey) throw new Error("APP_KEY not set in environment variables!");
|
|
1268
|
-
const
|
|
1269
|
-
const n = Array.isArray(r) ? r[0] : r,
|
|
1270
|
-
for (const d of
|
|
1271
|
-
|
|
1338
|
+
const l = `transformed.${t}`, i = await this.subscribe(l, s, a), u = (r, o, e) => {
|
|
1339
|
+
const n = Array.isArray(r) ? r[0] : r, c = Array.isArray(n) ? n : n == null ? [] : [n];
|
|
1340
|
+
for (const d of c)
|
|
1341
|
+
s([d], o, e);
|
|
1272
1342
|
};
|
|
1273
|
-
return await this.subscribe(`transformed.bulk.${
|
|
1343
|
+
return await this.subscribe(`transformed.bulk.${t}`, u, a), i;
|
|
1274
1344
|
}
|
|
1275
|
-
async call(
|
|
1276
|
-
return this._connection.call(
|
|
1345
|
+
async call(t, s, a, l) {
|
|
1346
|
+
return this._connection.call(t, s, a, l);
|
|
1277
1347
|
}
|
|
1278
|
-
async callDeviceFunction(
|
|
1279
|
-
const u = `${this._swarmKey}.${
|
|
1280
|
-
return this._connection.call(u, a,
|
|
1348
|
+
async callDeviceFunction(t, s, a, l, i) {
|
|
1349
|
+
const u = `${this._swarmKey}.${t}.${this._appKey}.${this._env}.${s}`;
|
|
1350
|
+
return this._connection.call(u, a, l, i);
|
|
1281
1351
|
}
|
|
1282
1352
|
/** @deprecated Use callDeviceFunction() instead. */
|
|
1283
|
-
async callFunction(
|
|
1284
|
-
return console.warn("callFunction() is deprecated and will be removed in a future version. Use callDeviceFunction() instead."), this.callDeviceFunction(
|
|
1353
|
+
async callFunction(t, s, a, l, i) {
|
|
1354
|
+
return console.warn("callFunction() is deprecated and will be removed in a future version. Use callDeviceFunction() instead."), this.callDeviceFunction(t, s, a, l, i);
|
|
1285
1355
|
}
|
|
1286
|
-
async registerDeviceFunction(
|
|
1287
|
-
const
|
|
1288
|
-
return console.log(`Function registered for IronFlock topic '${
|
|
1356
|
+
async registerDeviceFunction(t, s, a) {
|
|
1357
|
+
const l = `${this._swarmKey}.${this._deviceKey}.${this._appKey}.${this._env}.${t}`, i = await this._connection.register(l, s, a);
|
|
1358
|
+
return console.log(`Function registered for IronFlock topic '${t}'. (Full WAMP topic: '${l}')`), i;
|
|
1289
1359
|
}
|
|
1290
1360
|
/** @deprecated Use registerDeviceFunction() instead. */
|
|
1291
|
-
async registerFunction(
|
|
1292
|
-
return console.warn("registerFunction() is deprecated and will be removed in a future version. Use registerDeviceFunction() instead."), this.registerDeviceFunction(
|
|
1361
|
+
async registerFunction(t, s, a) {
|
|
1362
|
+
return console.warn("registerFunction() is deprecated and will be removed in a future version. Use registerDeviceFunction() instead."), this.registerDeviceFunction(t, s, a);
|
|
1293
1363
|
}
|
|
1294
|
-
async register(
|
|
1295
|
-
return this.registerDeviceFunction(
|
|
1364
|
+
async register(t, s, a) {
|
|
1365
|
+
return this.registerDeviceFunction(t, s, a);
|
|
1296
1366
|
}
|
|
1297
|
-
async getHistory(
|
|
1298
|
-
if (!
|
|
1299
|
-
|
|
1300
|
-
const a = U(
|
|
1367
|
+
async getHistory(t, s = { limit: 10 }) {
|
|
1368
|
+
if (!t) throw new Error("Tablename must not be empty!");
|
|
1369
|
+
s.offset == null && (s.offset = 0);
|
|
1370
|
+
const a = U(s);
|
|
1301
1371
|
if (!a.success)
|
|
1302
1372
|
throw new Error(`Invalid query parameters: ${a.errors.map((i) => i.path + ": " + i.expected).join(", ")}`);
|
|
1303
|
-
const
|
|
1373
|
+
const l = `history.transformed.${t}`;
|
|
1304
1374
|
try {
|
|
1305
|
-
return await this._connection.call(
|
|
1375
|
+
return await this._connection.call(l, [s]);
|
|
1306
1376
|
} catch (i) {
|
|
1307
1377
|
const u = String(i);
|
|
1308
|
-
return u.includes("no_such_procedure") || u.includes("no callee registered") ? (console.error(`Get history failed: History service procedure '${
|
|
1378
|
+
return u.includes("no_such_procedure") || u.includes("no callee registered") ? (console.error(`Get history failed: History service procedure '${l}' not registered`), null) : (console.error(`Get history failed: ${i}`), null);
|
|
1309
1379
|
}
|
|
1310
1380
|
}
|
|
1311
1381
|
/**
|
|
@@ -1313,24 +1383,24 @@ class V {
|
|
|
1313
1383
|
* `history.transformed.series.{tablename}` (tables only — no series RPC
|
|
1314
1384
|
* exists for transforms).
|
|
1315
1385
|
*/
|
|
1316
|
-
async getSeriesHistory(
|
|
1317
|
-
if (!
|
|
1318
|
-
const a = F(
|
|
1386
|
+
async getSeriesHistory(t, s) {
|
|
1387
|
+
if (!t) throw new Error("Tablename must not be empty!");
|
|
1388
|
+
const a = F(s);
|
|
1319
1389
|
if (!a.success)
|
|
1320
1390
|
throw new Error(`Invalid series query parameters: ${a.errors.map((i) => i.path + ": " + i.expected).join(", ")}`);
|
|
1321
|
-
const
|
|
1391
|
+
const l = `history.transformed.series.${t}`;
|
|
1322
1392
|
try {
|
|
1323
|
-
return await this._connection.call(
|
|
1393
|
+
return await this._connection.call(l, [s]);
|
|
1324
1394
|
} catch (i) {
|
|
1325
1395
|
const u = String(i);
|
|
1326
|
-
return u.includes("no_such_procedure") || u.includes("no callee registered") ? (console.error(`Get series history failed: History service procedure '${
|
|
1396
|
+
return u.includes("no_such_procedure") || u.includes("no callee registered") ? (console.error(`Get series history failed: History service procedure '${l}' not registered`), null) : (console.error(`Get series history failed: ${i}`), null);
|
|
1327
1397
|
}
|
|
1328
1398
|
}
|
|
1329
|
-
async setDeviceLocation(
|
|
1330
|
-
const a = se({ longitude:
|
|
1399
|
+
async setDeviceLocation(t, s) {
|
|
1400
|
+
const a = se({ longitude: t, latitude: s });
|
|
1331
1401
|
if (!a.success)
|
|
1332
1402
|
throw new Error(`Invalid location parameters: ${a.errors.map((u) => u.path + ": " + u.expected).join(", ")}`);
|
|
1333
|
-
const
|
|
1403
|
+
const l = { long: t, lat: s }, i = {
|
|
1334
1404
|
DEVICE_SERIAL_NUMBER: this._serialNumber,
|
|
1335
1405
|
DEVICE_KEY: this._deviceKey,
|
|
1336
1406
|
DEVICE_NAME: this._deviceName
|
|
@@ -1338,15 +1408,15 @@ class V {
|
|
|
1338
1408
|
try {
|
|
1339
1409
|
return await this._connection.call(
|
|
1340
1410
|
"ironflock.location_service.update",
|
|
1341
|
-
[
|
|
1411
|
+
[l],
|
|
1342
1412
|
i
|
|
1343
1413
|
);
|
|
1344
1414
|
} catch (u) {
|
|
1345
1415
|
return console.error(`Set location failed: ${u}`), null;
|
|
1346
1416
|
}
|
|
1347
1417
|
}
|
|
1348
|
-
getRemoteAccessUrlForPort(
|
|
1349
|
-
return this._deviceKey && this._appName ? `https://${this._deviceKey}-${this._appName.toLowerCase()}-${
|
|
1418
|
+
getRemoteAccessUrlForPort(t) {
|
|
1419
|
+
return this._deviceKey && this._appName ? `https://${this._deviceKey}-${this._appName.toLowerCase()}-${t}.app.ironflock.com` : null;
|
|
1350
1420
|
}
|
|
1351
1421
|
/**
|
|
1352
1422
|
* Create an IronFlock instance by fetching configuration from a server endpoint.
|
|
@@ -1358,23 +1428,23 @@ class V {
|
|
|
1358
1428
|
* await flock.start();
|
|
1359
1429
|
* ```
|
|
1360
1430
|
*/
|
|
1361
|
-
static async fromServer(
|
|
1362
|
-
const
|
|
1363
|
-
if (!
|
|
1364
|
-
throw new Error(`Failed to fetch IronFlock config from ${
|
|
1365
|
-
const a = await
|
|
1431
|
+
static async fromServer(t) {
|
|
1432
|
+
const s = await fetch(t);
|
|
1433
|
+
if (!s.ok)
|
|
1434
|
+
throw new Error(`Failed to fetch IronFlock config from ${t}: ${s.status} ${s.statusText}`);
|
|
1435
|
+
const a = await s.json();
|
|
1366
1436
|
return new V(a);
|
|
1367
1437
|
}
|
|
1368
1438
|
}
|
|
1369
1439
|
export {
|
|
1370
1440
|
ae as ConsumedApp,
|
|
1371
|
-
|
|
1372
|
-
|
|
1373
|
-
|
|
1441
|
+
p as CrossAppAccessError,
|
|
1442
|
+
T as CrossbarConnection,
|
|
1443
|
+
D as ERROR_LOGS_TABLE,
|
|
1374
1444
|
V as IronFlock,
|
|
1375
|
-
|
|
1445
|
+
_ as Stage,
|
|
1376
1446
|
x as validateBulkTableParams,
|
|
1377
|
-
|
|
1447
|
+
le as validateCallParams,
|
|
1378
1448
|
se as validateLocationParams,
|
|
1379
1449
|
ne as validatePublishParams,
|
|
1380
1450
|
F as validateSeriesQueryParams,
|