@based/client 1.2.2 → 1.2.5
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/dist/Client.d.ts +0 -0
- package/dist/Client.js +0 -0
- package/dist/Client.js.map +0 -0
- package/dist/Emitter.d.ts +0 -0
- package/dist/Emitter.js +0 -0
- package/dist/Emitter.js.map +0 -0
- package/dist/createError.d.ts +0 -0
- package/dist/createError.js +0 -0
- package/dist/createError.js.map +0 -0
- package/dist/file/fetch.d.ts +0 -0
- package/dist/file/fetch.js +0 -0
- package/dist/file/fetch.js.map +0 -0
- package/dist/file/getUrl.d.ts +0 -0
- package/dist/file/getUrl.js +0 -0
- package/dist/file/getUrl.js.map +0 -0
- package/dist/file/index.d.ts +0 -0
- package/dist/file/index.js +0 -0
- package/dist/file/index.js.map +0 -0
- package/dist/file/stream/browser.d.ts +0 -0
- package/dist/file/stream/browser.js +0 -0
- package/dist/file/stream/browser.js.map +0 -0
- package/dist/file/stream/index.d.ts +0 -0
- package/dist/file/stream/index.js +0 -0
- package/dist/file/stream/index.js.map +0 -0
- package/dist/file/uploadFileBrowser.d.ts +0 -0
- package/dist/file/uploadFileBrowser.js +0 -0
- package/dist/file/uploadFileBrowser.js.map +0 -0
- package/dist/findPrefix.d.ts +0 -0
- package/dist/findPrefix.js +0 -0
- package/dist/findPrefix.js.map +0 -0
- package/dist/idleTimeout.d.ts +0 -0
- package/dist/idleTimeout.js +0 -0
- package/dist/idleTimeout.js.map +0 -0
- package/dist/index.d.ts +2 -2
- package/dist/index.js +15 -542
- package/dist/index.js.map +1 -1
- package/dist/observable/index.d.ts +16 -9
- package/dist/observable/index.js +41 -1
- package/dist/observable/index.js.map +1 -1
- package/dist/printBasedObject.d.ts +0 -0
- package/dist/printBasedObject.js +0 -0
- package/dist/printBasedObject.js.map +0 -0
- package/dist/queue.d.ts +0 -0
- package/dist/queue.js +0 -0
- package/dist/queue.js.map +0 -0
- package/dist/request.d.ts +0 -0
- package/dist/request.js +0 -0
- package/dist/request.js.map +0 -0
- package/dist/selvaTypes/get.d.ts +0 -0
- package/dist/selvaTypes/get.js +0 -0
- package/dist/selvaTypes/get.js.map +0 -0
- package/dist/selvaTypes/schema.d.ts +0 -0
- package/dist/selvaTypes/schema.js +0 -0
- package/dist/selvaTypes/schema.js.map +0 -0
- package/dist/selvaTypes/set.d.ts +0 -0
- package/dist/selvaTypes/set.js +0 -0
- package/dist/selvaTypes/set.js.map +0 -0
- package/dist/subscriptions/addGetSubscriber.d.ts +0 -0
- package/dist/subscriptions/addGetSubscriber.js +0 -0
- package/dist/subscriptions/addGetSubscriber.js.map +0 -0
- package/dist/subscriptions/addSubscriber.d.ts +0 -0
- package/dist/subscriptions/addSubscriber.js +0 -0
- package/dist/subscriptions/addSubscriber.js.map +0 -0
- package/dist/subscriptions/generateId.d.ts +0 -0
- package/dist/subscriptions/generateId.js +0 -0
- package/dist/subscriptions/generateId.js.map +0 -0
- package/dist/subscriptions/incomingSubscription.d.ts +0 -0
- package/dist/subscriptions/incomingSubscription.js +0 -0
- package/dist/subscriptions/incomingSubscription.js.map +0 -0
- package/dist/subscriptions/incomingSubscriptionDiff.d.ts +0 -0
- package/dist/subscriptions/incomingSubscriptionDiff.js +0 -0
- package/dist/subscriptions/incomingSubscriptionDiff.js.map +0 -0
- package/dist/subscriptions/index.d.ts +0 -0
- package/dist/subscriptions/index.js +0 -0
- package/dist/subscriptions/index.js.map +0 -0
- package/dist/subscriptions/logoutSubscriptions.d.ts +0 -0
- package/dist/subscriptions/logoutSubscriptions.js +0 -0
- package/dist/subscriptions/logoutSubscriptions.js.map +0 -0
- package/dist/subscriptions/removeSendSubscriptionDataFromQueue.d.ts +0 -0
- package/dist/subscriptions/removeSendSubscriptionDataFromQueue.js +0 -0
- package/dist/subscriptions/removeSendSubscriptionDataFromQueue.js.map +0 -0
- package/dist/subscriptions/removeSubscriber.d.ts +0 -0
- package/dist/subscriptions/removeSubscriber.js +0 -0
- package/dist/subscriptions/removeSubscriber.js.map +0 -0
- package/dist/subscriptions/removeUnsubscribesFromQueue.d.ts +0 -0
- package/dist/subscriptions/removeUnsubscribesFromQueue.js +0 -0
- package/dist/subscriptions/removeUnsubscribesFromQueue.js.map +0 -0
- package/dist/subscriptions/sendAllSubscriptions.d.ts +0 -0
- package/dist/subscriptions/sendAllSubscriptions.js +0 -0
- package/dist/subscriptions/sendAllSubscriptions.js.map +0 -0
- package/dist/token.d.ts +0 -0
- package/dist/token.js +0 -0
- package/dist/token.js.map +0 -0
- package/dist/track.d.ts +0 -0
- package/dist/track.js +0 -0
- package/dist/track.js.map +0 -0
- package/dist/types.d.ts +0 -0
- package/dist/types.js +0 -0
- package/dist/types.js.map +0 -0
- package/dist/websocket/index.d.ts +0 -0
- package/dist/websocket/index.js +0 -0
- package/dist/websocket/index.js.map +0 -0
- package/dist/websocket/types.d.ts +0 -0
- package/dist/websocket/types.js +0 -0
- package/dist/websocket/types.js.map +0 -0
- package/dist/websocket/urlLoader.d.ts +0 -0
- package/dist/websocket/urlLoader.js +0 -0
- package/dist/websocket/urlLoader.js.map +0 -0
- package/package.json +9 -7
package/dist/index.js
CHANGED
|
@@ -1,542 +1,15 @@
|
|
|
1
|
-
"
|
|
2
|
-
|
|
3
|
-
|
|
4
|
-
|
|
5
|
-
|
|
6
|
-
|
|
7
|
-
|
|
8
|
-
|
|
9
|
-
|
|
10
|
-
|
|
11
|
-
|
|
12
|
-
|
|
13
|
-
|
|
14
|
-
|
|
15
|
-
if (mod && mod.__esModule) return mod;
|
|
16
|
-
var result = {};
|
|
17
|
-
if (mod != null) for (var k in mod) if (k !== "default" && Object.prototype.hasOwnProperty.call(mod, k)) __createBinding(result, mod, k);
|
|
18
|
-
__setModuleDefault(result, mod);
|
|
19
|
-
return result;
|
|
20
|
-
};
|
|
21
|
-
var __exportStar = (this && this.__exportStar) || function(m, exports) {
|
|
22
|
-
for (var p in m) if (p !== "default" && !Object.prototype.hasOwnProperty.call(exports, p)) __createBinding(exports, m, p);
|
|
23
|
-
};
|
|
24
|
-
var __importDefault = (this && this.__importDefault) || function (mod) {
|
|
25
|
-
return (mod && mod.__esModule) ? mod : { "default": mod };
|
|
26
|
-
};
|
|
27
|
-
Object.defineProperty(exports, "__esModule", { value: true });
|
|
28
|
-
exports.Based = exports.Observable = exports.BasedClient = exports.generateSubscriptionId = exports.addRequest = exports.removeSubscriber = exports.addGetSubscriber = exports.addSubscriber = exports.generateTrackingKey = exports.handleGraphqlVariables = exports.parseGraphql = exports.createGraphqlOperations = void 0;
|
|
29
|
-
const Emitter_1 = __importDefault(require("./Emitter"));
|
|
30
|
-
const websocket_1 = __importDefault(require("./websocket"));
|
|
31
|
-
const types_1 = require("@based/types");
|
|
32
|
-
const subscriptions_1 = require("./subscriptions");
|
|
33
|
-
Object.defineProperty(exports, "addSubscriber", { enumerable: true, get: function () { return subscriptions_1.addSubscriber; } });
|
|
34
|
-
Object.defineProperty(exports, "generateSubscriptionId", { enumerable: true, get: function () { return subscriptions_1.generateSubscriptionId; } });
|
|
35
|
-
Object.defineProperty(exports, "addGetSubscriber", { enumerable: true, get: function () { return subscriptions_1.addGetSubscriber; } });
|
|
36
|
-
Object.defineProperty(exports, "removeSubscriber", { enumerable: true, get: function () { return subscriptions_1.removeSubscriber; } });
|
|
37
|
-
const request_1 = require("./request");
|
|
38
|
-
Object.defineProperty(exports, "addRequest", { enumerable: true, get: function () { return request_1.addRequest; } });
|
|
39
|
-
const Client_1 = require("./Client");
|
|
40
|
-
Object.defineProperty(exports, "BasedClient", { enumerable: true, get: function () { return Client_1.BasedClient; } });
|
|
41
|
-
const findPrefix_1 = __importDefault(require("./findPrefix"));
|
|
42
|
-
const createError_1 = __importDefault(require("./createError"));
|
|
43
|
-
const hash_1 = require("@saulx/hash");
|
|
44
|
-
const token_1 = __importDefault(require("./token"));
|
|
45
|
-
const track_1 = __importStar(require("./track"));
|
|
46
|
-
Object.defineProperty(exports, "generateTrackingKey", { enumerable: true, get: function () { return track_1.genKey; } });
|
|
47
|
-
const observable_1 = require("./observable");
|
|
48
|
-
Object.defineProperty(exports, "Observable", { enumerable: true, get: function () { return observable_1.Observable; } });
|
|
49
|
-
const file_1 = __importDefault(require("./file"));
|
|
50
|
-
const get_service_1 = __importStar(require("@based/get-service"));
|
|
51
|
-
const utils_1 = require("@saulx/utils");
|
|
52
|
-
const graphql_1 = require("@based/graphql");
|
|
53
|
-
Object.defineProperty(exports, "createGraphqlOperations", { enumerable: true, get: function () { return graphql_1.createOperations; } });
|
|
54
|
-
Object.defineProperty(exports, "parseGraphql", { enumerable: true, get: function () { return graphql_1.parseGraphql; } });
|
|
55
|
-
Object.defineProperty(exports, "handleGraphqlVariables", { enumerable: true, get: function () { return graphql_1.handleGraphqlVariables; } });
|
|
56
|
-
__exportStar(require("@based/types"), exports);
|
|
57
|
-
class Based extends Emitter_1.default {
|
|
58
|
-
constructor(opts) {
|
|
59
|
-
super();
|
|
60
|
-
this.client = new Client_1.BasedClient(this);
|
|
61
|
-
Object.defineProperty(this, 'client', {
|
|
62
|
-
enumerable: false,
|
|
63
|
-
writable: true,
|
|
64
|
-
});
|
|
65
|
-
if (opts && opts.url) {
|
|
66
|
-
this.connect(opts.url);
|
|
67
|
-
}
|
|
68
|
-
this.graphql = {
|
|
69
|
-
query: this.gqlQuery.bind(this),
|
|
70
|
-
live: this.gqlLive.bind(this),
|
|
71
|
-
};
|
|
72
|
-
}
|
|
73
|
-
connect(url) {
|
|
74
|
-
if (!url && this._url) {
|
|
75
|
-
if (!this.client.connection) {
|
|
76
|
-
this.client.connection = (0, websocket_1.default)(this.client, this._url);
|
|
77
|
-
}
|
|
78
|
-
}
|
|
79
|
-
else {
|
|
80
|
-
this._url = url;
|
|
81
|
-
this.client.connection = (0, websocket_1.default)(this.client, url);
|
|
82
|
-
}
|
|
83
|
-
}
|
|
84
|
-
disconnect() {
|
|
85
|
-
if (this.client.connection) {
|
|
86
|
-
this.client.connection.disconnected = true;
|
|
87
|
-
this.client.connection.destroy();
|
|
88
|
-
if (this.client.connection.ws) {
|
|
89
|
-
this.client.connection.ws.close();
|
|
90
|
-
}
|
|
91
|
-
if (this.client.connected) {
|
|
92
|
-
this.client.onClose();
|
|
93
|
-
}
|
|
94
|
-
delete this.client.connection;
|
|
95
|
-
}
|
|
96
|
-
this.client.connected = false;
|
|
97
|
-
}
|
|
98
|
-
observeUntil(query, condition, onData) {
|
|
99
|
-
return new Promise((resolve, reject) => {
|
|
100
|
-
let close;
|
|
101
|
-
let isResolved = false;
|
|
102
|
-
this.observe(query, (d, checksum) => {
|
|
103
|
-
if (onData) {
|
|
104
|
-
onData(d, checksum);
|
|
105
|
-
}
|
|
106
|
-
if (condition(d, checksum)) {
|
|
107
|
-
isResolved = true;
|
|
108
|
-
if (close) {
|
|
109
|
-
close();
|
|
110
|
-
}
|
|
111
|
-
resolve(d);
|
|
112
|
-
}
|
|
113
|
-
})
|
|
114
|
-
.then((c) => {
|
|
115
|
-
if (isResolved) {
|
|
116
|
-
close();
|
|
117
|
-
}
|
|
118
|
-
else {
|
|
119
|
-
close = c;
|
|
120
|
-
}
|
|
121
|
-
})
|
|
122
|
-
.catch((err) => {
|
|
123
|
-
reject(err);
|
|
124
|
-
});
|
|
125
|
-
});
|
|
126
|
-
}
|
|
127
|
-
gql(literals, ...args) {
|
|
128
|
-
if (typeof literals === 'string') {
|
|
129
|
-
literals = [literals];
|
|
130
|
-
}
|
|
131
|
-
let result = literals[0];
|
|
132
|
-
args.forEach((arg, i) => {
|
|
133
|
-
if (arg && arg.kind === 'Document') {
|
|
134
|
-
result += arg.loc.source.body;
|
|
135
|
-
}
|
|
136
|
-
else {
|
|
137
|
-
result += arg;
|
|
138
|
-
}
|
|
139
|
-
result += literals[i + 1];
|
|
140
|
-
});
|
|
141
|
-
return (0, graphql_1.createOperations)({ schemas: this.client.configuration.schema }, (0, graphql_1.parseGraphql)(result));
|
|
142
|
-
}
|
|
143
|
-
gqlDb(db = 'default') {
|
|
144
|
-
return (literals, ...args) => {
|
|
145
|
-
if (typeof literals === 'string') {
|
|
146
|
-
literals = [literals];
|
|
147
|
-
}
|
|
148
|
-
let result = literals[0];
|
|
149
|
-
args.forEach((arg, i) => {
|
|
150
|
-
if (arg && arg.kind === 'Document') {
|
|
151
|
-
result += arg.loc.source.body;
|
|
152
|
-
}
|
|
153
|
-
else {
|
|
154
|
-
result += arg;
|
|
155
|
-
}
|
|
156
|
-
result += literals[i + 1];
|
|
157
|
-
});
|
|
158
|
-
return (0, graphql_1.createOperations)({ schemas: this.client.configuration.schema, db }, (0, graphql_1.parseGraphql)(result));
|
|
159
|
-
};
|
|
160
|
-
}
|
|
161
|
-
observe(a, b, c, d) {
|
|
162
|
-
if (typeof a === 'string') {
|
|
163
|
-
return new Promise((resolve, reject) => {
|
|
164
|
-
const noPayload = typeof b === 'function';
|
|
165
|
-
const onData = noPayload ? b : c;
|
|
166
|
-
const onErr = noPayload ? c : d;
|
|
167
|
-
(0, subscriptions_1.addSubscriber)(this.client, noPayload ? undefined : b, // not only query should be any
|
|
168
|
-
onData, (err, subscriptionId, subscriberId, _data, isAuthError) => {
|
|
169
|
-
if (err && !isAuthError) {
|
|
170
|
-
// maybe log also
|
|
171
|
-
reject(err);
|
|
172
|
-
}
|
|
173
|
-
else {
|
|
174
|
-
const unsubscribe = () => {
|
|
175
|
-
(0, subscriptions_1.removeSubscriber)(this.client, subscriptionId, subscriberId);
|
|
176
|
-
};
|
|
177
|
-
resolve(unsubscribe);
|
|
178
|
-
}
|
|
179
|
-
}, onErr, undefined, a);
|
|
180
|
-
});
|
|
181
|
-
}
|
|
182
|
-
else {
|
|
183
|
-
return new Promise((resolve, reject) => {
|
|
184
|
-
(0, subscriptions_1.addSubscriber)(this.client, a, b, (err, subscriptionId, subscriberId, _data, isAuthError) => {
|
|
185
|
-
if (err && !isAuthError) {
|
|
186
|
-
// maybe log also
|
|
187
|
-
reject(err);
|
|
188
|
-
}
|
|
189
|
-
else {
|
|
190
|
-
const unsubscribe = () => {
|
|
191
|
-
(0, subscriptions_1.removeSubscriber)(this.client, subscriptionId, subscriberId);
|
|
192
|
-
};
|
|
193
|
-
resolve(unsubscribe);
|
|
194
|
-
}
|
|
195
|
-
}, c);
|
|
196
|
-
});
|
|
197
|
-
}
|
|
198
|
-
}
|
|
199
|
-
createObservable(a, payload) {
|
|
200
|
-
if (typeof a === 'string') {
|
|
201
|
-
return new observable_1.Observable(this.client, a, payload);
|
|
202
|
-
}
|
|
203
|
-
else {
|
|
204
|
-
return new observable_1.Observable(this.client, a);
|
|
205
|
-
}
|
|
206
|
-
}
|
|
207
|
-
observeSchema(a, b, c) {
|
|
208
|
-
return new Promise((resolve, reject) => {
|
|
209
|
-
const db = typeof a === 'string' ? a : 'default';
|
|
210
|
-
const onData = typeof a === 'string' ? b : a;
|
|
211
|
-
const onErr = typeof a === 'string' ? c : b;
|
|
212
|
-
(0, subscriptions_1.addSubscriber)(this.client, { $subscribe_schema: db }, (data, checksum) => {
|
|
213
|
-
if (!this.client.configuration) {
|
|
214
|
-
this.client.configuration = { dbs: [], schema: {} };
|
|
215
|
-
}
|
|
216
|
-
// console.info('hello', this.client.configuration)
|
|
217
|
-
this.client.configuration.schema[db] = data;
|
|
218
|
-
onData(data, checksum);
|
|
219
|
-
// this.client.configuration.schema
|
|
220
|
-
}, (err, subscriptionId, subscriberId, _data, isAuthError) => {
|
|
221
|
-
if (err && !isAuthError) {
|
|
222
|
-
// maybe log also
|
|
223
|
-
reject(err);
|
|
224
|
-
}
|
|
225
|
-
else {
|
|
226
|
-
const unsubscribe = () => {
|
|
227
|
-
(0, subscriptions_1.removeSubscriber)(this.client, subscriptionId, subscriberId);
|
|
228
|
-
};
|
|
229
|
-
resolve(unsubscribe);
|
|
230
|
-
}
|
|
231
|
-
}, onErr);
|
|
232
|
-
});
|
|
233
|
-
}
|
|
234
|
-
get(a, payload) {
|
|
235
|
-
if (typeof a === 'string') {
|
|
236
|
-
return new Promise((resolve, reject) => {
|
|
237
|
-
(0, subscriptions_1.addGetSubscriber)(this.client, payload, (err, _subscriber, _subId, data) => {
|
|
238
|
-
if (err) {
|
|
239
|
-
reject(err);
|
|
240
|
-
}
|
|
241
|
-
else {
|
|
242
|
-
resolve(data);
|
|
243
|
-
}
|
|
244
|
-
}, 0, a);
|
|
245
|
-
});
|
|
246
|
-
}
|
|
247
|
-
else {
|
|
248
|
-
return new Promise((resolve, reject) => {
|
|
249
|
-
(0, request_1.addRequest)(this.client, types_1.RequestTypes.Get, a, resolve, reject);
|
|
250
|
-
});
|
|
251
|
-
}
|
|
252
|
-
}
|
|
253
|
-
file(opts) {
|
|
254
|
-
if (global.File && opts instanceof File) {
|
|
255
|
-
opts = { contents: opts };
|
|
256
|
-
}
|
|
257
|
-
// @ts-ignore
|
|
258
|
-
return (0, file_1.default)(this, opts);
|
|
259
|
-
}
|
|
260
|
-
call(name, payload) {
|
|
261
|
-
return new Promise((resolve, reject) => {
|
|
262
|
-
(0, request_1.addRequest)(this.client, types_1.RequestTypes.Call, payload, resolve, reject, name);
|
|
263
|
-
});
|
|
264
|
-
}
|
|
265
|
-
async id(type, opts) {
|
|
266
|
-
let prefix = (0, findPrefix_1.default)(this.client, type);
|
|
267
|
-
if (!prefix) {
|
|
268
|
-
await this.schema();
|
|
269
|
-
prefix = (0, findPrefix_1.default)(this.client, type);
|
|
270
|
-
}
|
|
271
|
-
if (!prefix) {
|
|
272
|
-
throw (0, createError_1.default)({
|
|
273
|
-
message: `Type does not exist ${type}`,
|
|
274
|
-
type: 'Invalid type',
|
|
275
|
-
payload: opts
|
|
276
|
-
? { type, opts }
|
|
277
|
-
: {
|
|
278
|
-
type,
|
|
279
|
-
},
|
|
280
|
-
});
|
|
281
|
-
}
|
|
282
|
-
if (opts) {
|
|
283
|
-
const optsHash = (0, hash_1.hashCompact)(opts, 8, true);
|
|
284
|
-
return prefix + optsHash;
|
|
285
|
-
}
|
|
286
|
-
else {
|
|
287
|
-
return (prefix +
|
|
288
|
-
(0, hash_1.hashCompact)(Math.floor(Math.random() * 99999999999) + '' + Date.now()));
|
|
289
|
-
}
|
|
290
|
-
}
|
|
291
|
-
digest(payload) {
|
|
292
|
-
return new Promise((resolve, reject) => {
|
|
293
|
-
(0, request_1.addRequest)(this.client, types_1.RequestTypes.Digest, payload, resolve, reject);
|
|
294
|
-
});
|
|
295
|
-
}
|
|
296
|
-
set(payload) {
|
|
297
|
-
return new Promise((resolve, reject) => {
|
|
298
|
-
(0, request_1.addRequest)(this.client, types_1.RequestTypes.Set, payload, resolve, reject);
|
|
299
|
-
});
|
|
300
|
-
}
|
|
301
|
-
copy(payload) {
|
|
302
|
-
return new Promise((resolve, reject) => {
|
|
303
|
-
(0, request_1.addRequest)(this.client, types_1.RequestTypes.Copy, payload, resolve, reject);
|
|
304
|
-
});
|
|
305
|
-
}
|
|
306
|
-
async gqlQuery(q, variables = {}) {
|
|
307
|
-
let op;
|
|
308
|
-
if (typeof q === 'string') {
|
|
309
|
-
op = this.gql(q);
|
|
310
|
-
}
|
|
311
|
-
else {
|
|
312
|
-
op = q;
|
|
313
|
-
}
|
|
314
|
-
try {
|
|
315
|
-
op = (0, graphql_1.handleGraphqlVariables)(op, op, variables);
|
|
316
|
-
if (op.opType === 'GET') {
|
|
317
|
-
const queryObj = { $db: op.db };
|
|
318
|
-
for (const key in op.ops) {
|
|
319
|
-
if (op.ops[key].fnObserve) {
|
|
320
|
-
console.log('HELLO OBSERVABLE FUNCTION', op.ops[key].fnObserve);
|
|
321
|
-
const resp = await this.get(op.ops[key].fnObserve.name, op.ops[key].fnObserve.payload);
|
|
322
|
-
if (resp) {
|
|
323
|
-
queryObj[key] = { $value: resp };
|
|
324
|
-
}
|
|
325
|
-
continue;
|
|
326
|
-
}
|
|
327
|
-
if (op.ops[key].get) {
|
|
328
|
-
queryObj[key] = op.ops[key].get;
|
|
329
|
-
}
|
|
330
|
-
}
|
|
331
|
-
return { data: await this.get(queryObj) };
|
|
332
|
-
}
|
|
333
|
-
const reply = {};
|
|
334
|
-
await Promise.all(Object.entries(op.ops).map(async ([k, o]) => {
|
|
335
|
-
if (o.delete) {
|
|
336
|
-
reply[k] = await this.delete(o.delete);
|
|
337
|
-
return;
|
|
338
|
-
}
|
|
339
|
-
else if (o.fnCall) {
|
|
340
|
-
reply[k] = this.call(o.fnCall.name, o.fnCall.payload);
|
|
341
|
-
return;
|
|
342
|
-
}
|
|
343
|
-
const { id } = await this.set(o.set);
|
|
344
|
-
if (!o.get) {
|
|
345
|
-
const res = {};
|
|
346
|
-
res.id = id;
|
|
347
|
-
const type = this.client?.configuration?.schema?.[op.db]
|
|
348
|
-
?.prefixToTypeMapping?.[id.slice(0, 2)];
|
|
349
|
-
if (type) {
|
|
350
|
-
res.type = type;
|
|
351
|
-
}
|
|
352
|
-
reply[k] = res;
|
|
353
|
-
return;
|
|
354
|
-
}
|
|
355
|
-
const getOpts = (0, utils_1.deepCopy)(o.get);
|
|
356
|
-
getOpts.$id = id;
|
|
357
|
-
const getData = await this.get(getOpts);
|
|
358
|
-
reply[k] = getData;
|
|
359
|
-
}));
|
|
360
|
-
return { data: reply };
|
|
361
|
-
}
|
|
362
|
-
catch (e) {
|
|
363
|
-
return { errors: [{ message: e.message, locations: e.locations }] };
|
|
364
|
-
}
|
|
365
|
-
}
|
|
366
|
-
async gqlLive(q, variables = {}) {
|
|
367
|
-
let op;
|
|
368
|
-
if (typeof q === 'string') {
|
|
369
|
-
op = this.gql(q);
|
|
370
|
-
}
|
|
371
|
-
else {
|
|
372
|
-
op = q;
|
|
373
|
-
}
|
|
374
|
-
op = (0, graphql_1.handleGraphqlVariables)(op, op, variables);
|
|
375
|
-
if (op.opType === 'GET') {
|
|
376
|
-
const fns = [];
|
|
377
|
-
const queryObj = {};
|
|
378
|
-
for (const key in op.ops) {
|
|
379
|
-
if (op.ops[key].fnObserve) {
|
|
380
|
-
const { name, payload } = op.ops[key].fnObserve;
|
|
381
|
-
fns.push({ name: name, payload });
|
|
382
|
-
continue;
|
|
383
|
-
}
|
|
384
|
-
queryObj[key] = op.ops[key].get;
|
|
385
|
-
}
|
|
386
|
-
if (fns?.length) {
|
|
387
|
-
console.log('HELLO OBSERVABLE FUNCTIONS', JSON.stringify(fns, null, 2));
|
|
388
|
-
// const observables = fns.map((fn) => {
|
|
389
|
-
// return new Observable(this.client, <string>fn.name, fn.payload)
|
|
390
|
-
// })
|
|
391
|
-
// TODO: create observables for these fns and combine with below
|
|
392
|
-
return new observable_1.Observable(this.client, { $db: op.db, data: queryObj });
|
|
393
|
-
}
|
|
394
|
-
return new observable_1.Observable(this.client, { $db: op.db, data: queryObj });
|
|
395
|
-
}
|
|
396
|
-
const queryObj = {};
|
|
397
|
-
await Promise.all(Object.entries(op.ops).map(async ([k, op]) => {
|
|
398
|
-
if (op.delete) {
|
|
399
|
-
queryObj[k] = await this.delete(op.delete);
|
|
400
|
-
return;
|
|
401
|
-
}
|
|
402
|
-
else if (op.fnCall) {
|
|
403
|
-
queryObj[k] = this.call(op.fnCall.name, op.fnCall.payload);
|
|
404
|
-
return;
|
|
405
|
-
}
|
|
406
|
-
const { id } = await this.set(op.set);
|
|
407
|
-
const getOpts = (0, utils_1.deepCopy)(op.get);
|
|
408
|
-
getOpts.$id = id;
|
|
409
|
-
queryObj[k] = getOpts;
|
|
410
|
-
}));
|
|
411
|
-
return new observable_1.Observable(this.client, { $db: op.db, data: queryObj });
|
|
412
|
-
}
|
|
413
|
-
analytics(opts, onData) {
|
|
414
|
-
return new Promise((resolve, reject) => {
|
|
415
|
-
if (onData) {
|
|
416
|
-
(0, subscriptions_1.addSubscriber)(this.client, opts, onData, (err, subscriptionId, subscriberId, _data, isAuthError) => {
|
|
417
|
-
if (err && !isAuthError) {
|
|
418
|
-
reject(err);
|
|
419
|
-
}
|
|
420
|
-
else {
|
|
421
|
-
const unsubscribe = () => {
|
|
422
|
-
(0, subscriptions_1.removeSubscriber)(this.client, subscriptionId, subscriberId);
|
|
423
|
-
};
|
|
424
|
-
resolve(unsubscribe);
|
|
425
|
-
}
|
|
426
|
-
}, (err) => console.error(err), undefined, 'analytics');
|
|
427
|
-
}
|
|
428
|
-
else {
|
|
429
|
-
(0, subscriptions_1.addGetSubscriber)(this.client, opts, (err, _subscriber, _subId, data) => {
|
|
430
|
-
if (err) {
|
|
431
|
-
reject(err);
|
|
432
|
-
}
|
|
433
|
-
else {
|
|
434
|
-
if ((0, types_1.isAnalyticsHistoryOpts)(opts)) {
|
|
435
|
-
resolve(data);
|
|
436
|
-
}
|
|
437
|
-
else if ((0, types_1.isAnalyticsTypesOpts)(opts)) {
|
|
438
|
-
resolve(data);
|
|
439
|
-
}
|
|
440
|
-
else {
|
|
441
|
-
resolve(data);
|
|
442
|
-
}
|
|
443
|
-
}
|
|
444
|
-
}, 0, 'analytics');
|
|
445
|
-
}
|
|
446
|
-
});
|
|
447
|
-
}
|
|
448
|
-
track(type, params) {
|
|
449
|
-
(0, track_1.default)(this.client, type, params);
|
|
450
|
-
}
|
|
451
|
-
clearAnalytics(type, params) {
|
|
452
|
-
(0, track_1.default)(this.client, type, params, false, false, undefined, true);
|
|
453
|
-
}
|
|
454
|
-
untrack(type, params) {
|
|
455
|
-
(0, track_1.default)(this.client, type, params, true);
|
|
456
|
-
}
|
|
457
|
-
event(type, params, opts) {
|
|
458
|
-
(0, track_1.default)(this.client, type, params, false, true, opts);
|
|
459
|
-
}
|
|
460
|
-
delete(payload) {
|
|
461
|
-
return new Promise((resolve, reject) => {
|
|
462
|
-
(0, request_1.addRequest)(this.client, types_1.RequestTypes.Delete, payload, resolve, reject);
|
|
463
|
-
});
|
|
464
|
-
}
|
|
465
|
-
schema() {
|
|
466
|
-
return new Promise((resolve, reject) => {
|
|
467
|
-
const resolver = (config) => {
|
|
468
|
-
this.client.configuration = config;
|
|
469
|
-
resolve(config);
|
|
470
|
-
};
|
|
471
|
-
(0, request_1.addRequest)(this.client, types_1.RequestTypes.GetConfiguration, 0, resolver, reject);
|
|
472
|
-
});
|
|
473
|
-
}
|
|
474
|
-
updateSchema(configuration) {
|
|
475
|
-
return new Promise((resolve, reject) => {
|
|
476
|
-
(0, request_1.addRequest)(this.client, types_1.RequestTypes.Configuration, configuration, resolve, reject);
|
|
477
|
-
});
|
|
478
|
-
}
|
|
479
|
-
getToken() {
|
|
480
|
-
return this.client.token;
|
|
481
|
-
}
|
|
482
|
-
// allow localstorage
|
|
483
|
-
auth(token, options) {
|
|
484
|
-
return new Promise((resolve) => {
|
|
485
|
-
this.client.auth.push(resolve);
|
|
486
|
-
if ((token && token !== this.client.token) ||
|
|
487
|
-
(token === false && this.client.token)) {
|
|
488
|
-
if (typeof token === 'string') {
|
|
489
|
-
(0, token_1.default)(this.client, token, options);
|
|
490
|
-
}
|
|
491
|
-
else {
|
|
492
|
-
// this is very important
|
|
493
|
-
// may need to add a req Id (and a timer how long it takes)
|
|
494
|
-
(0, token_1.default)(this.client);
|
|
495
|
-
}
|
|
496
|
-
this.emit('auth', token);
|
|
497
|
-
}
|
|
498
|
-
});
|
|
499
|
-
}
|
|
500
|
-
}
|
|
501
|
-
exports.Based = Based;
|
|
502
|
-
// auth as admin // auth as based
|
|
503
|
-
const addParamsToUrl = (url, params) => {
|
|
504
|
-
if (params) {
|
|
505
|
-
let firstChecked;
|
|
506
|
-
url += /\?/.test(url) ? '&' : '?';
|
|
507
|
-
for (const key in params) {
|
|
508
|
-
const value = params[key];
|
|
509
|
-
url += firstChecked ? `&${key}=${value}` : `${key}=${value}`;
|
|
510
|
-
firstChecked = true;
|
|
511
|
-
}
|
|
512
|
-
}
|
|
513
|
-
return url;
|
|
514
|
-
};
|
|
515
|
-
const based = (opts, BasedClass = Based) => {
|
|
516
|
-
let { env, project, org, url, key, name = '@based/hub', cluster, params, } = opts;
|
|
517
|
-
/*
|
|
518
|
-
observeSchema
|
|
519
|
-
|
|
520
|
-
*/
|
|
521
|
-
if (!url) {
|
|
522
|
-
cluster = opts.cluster = (0, get_service_1.getClusterUrl)(cluster);
|
|
523
|
-
url = async () => {
|
|
524
|
-
const { url } = await (0, get_service_1.default)({
|
|
525
|
-
env,
|
|
526
|
-
project,
|
|
527
|
-
org,
|
|
528
|
-
key,
|
|
529
|
-
name,
|
|
530
|
-
}, 0, cluster);
|
|
531
|
-
return addParamsToUrl(url, params);
|
|
532
|
-
};
|
|
533
|
-
}
|
|
534
|
-
if (url) {
|
|
535
|
-
const client = new BasedClass();
|
|
536
|
-
client.opts = opts;
|
|
537
|
-
client.connect(url);
|
|
538
|
-
return client;
|
|
539
|
-
}
|
|
540
|
-
};
|
|
541
|
-
exports.default = based;
|
|
542
|
-
//# sourceMappingURL=index.js.map
|
|
1
|
+
var Me=Object.create;var Q=Object.defineProperty;var Le=Object.getOwnPropertyDescriptor;var He=Object.getOwnPropertyNames,de=Object.getOwnPropertySymbols,_e=Object.getPrototypeOf,fe=Object.prototype.hasOwnProperty,ze=Object.prototype.propertyIsEnumerable;var be=(t,e,s)=>e in t?Q(t,e,{enumerable:!0,configurable:!0,writable:!0,value:s}):t[e]=s,me=(t,e)=>{for(var s in e||(e={}))fe.call(e,s)&&be(t,s,e[s]);if(de)for(var s of de(e))ze.call(e,s)&&be(t,s,e[s]);return t};var Je=(t,e)=>{for(var s in e)Q(t,s,{get:e[s],enumerable:!0})},$=(t,e,s,r)=>{if(e&&typeof e=="object"||typeof e=="function")for(let n of He(e))!fe.call(t,n)&&n!==s&&Q(t,n,{get:()=>e[n],enumerable:!(r=Le(e,n))||r.enumerable});return t},f=(t,e,s)=>($(t,e,"default"),s&&$(s,e,"default")),j=(t,e,s)=>(s=t!=null?Me(_e(t)):{},$(e||!t||!t.__esModule?Q(s,"default",{value:t,enumerable:!0}):s,t)),Ke=t=>$(Q({},"__esModule",{value:!0}),t);var b={};Je(b,{Based:()=>pe,BasedClient:()=>J,BasedGraphQL:()=>y.BasedGraphQL,Observable:()=>w,addGetSubscriber:()=>M,addRequest:()=>O,addSubscriber:()=>P,createGraphqlOperations:()=>y.createOperations,default:()=>at,generateSubscriptionId:()=>T,generateTrackingKey:()=>oe,handleGraphqlVariables:()=>y.handleGraphqlVariables,parseGraphql:()=>y.parseGraphql,removeSubscriber:()=>g});module.exports=Ke(b);var he=class{constructor(){this.listeners={};Object.defineProperty(this,"listeners",{enumerable:!1,writable:!0})}emit(e,s){this.listeners[e]&&this.listeners[e].forEach(r=>r(s))}on(e,s){this.listeners[e]||(this.listeners[e]=[]),this.listeners[e].push(s)}removeAllListeners(){this.listeners={}}once(e,s){this.on(e,r=>{s(r),this.removeListener(e,s)})}removeListener(e,s){let r=this.listeners[e];if(r){if(!s)delete this.listeners[e];else for(let n=0,i=r.length;n<i;n++)if(r[n]===s){r.splice(n,1);break}}}},ge=he;var ye=(t,e)=>{typeof t=="function"?t().then(s=>{e(s)}):e(t)};var Se=j(require("isomorphic-ws")),R=new Map,ve;typeof window!="undefined"&&document.addEventListener("visibilitychange",function(t){clearTimeout(ve),document.hidden?ve=setTimeout(()=>{R.forEach(e=>{e(!1)})},3e4):R.forEach(e=>{e(!0)})});var Z=(t,e,s={destroy:()=>{R.delete(s)}},r=0,n=!1)=>(ye(e,i=>{setTimeout(()=>{if(s.disconnected)return;let o=!0;R.set(s,a=>{s.disconnected||(!a&&o?(console.warn("Send to background - close connection"),o=!1,t.onClose(),c.close()):!o&&a&&(R.delete(s),Z(t,e,s,0,!0)))});let c=s.ws=new Se.default(i);c.onerror=()=>{},c.onmessage=a=>t.onData(a),c.onopen=()=>{if(o){if(s.disconnected)return;r=100,n&&t.onReconnect(),t.onOpen()}},c.onclose=()=>{if(o){if(s.disconnected)return;t.onClose(),Z(t,e,s,Math.min(1250,Math.min(r+500)),!0)}}},r)}),s),ee=Z;var k=require("@based/types");var E=require("@based/types");var U=require("@based/types");var We=t=>{clearTimeout(t.idlePing),t.idlePing=setTimeout(()=>{t.connection&&t.connected&&!t.connection.disconnected&&t.connection.ws.send("1")},6e4)},N=We;var m=(t,e)=>{e[0]===U.RequestTypes.Unsubscribe||e[0]===U.RequestTypes.Subscription||e[0]===U.RequestTypes.SendSubscriptionData||e[0]===U.RequestTypes.GetSubscription?t.subscriptionQueue.push(e):t.queue.push(e),t.connected&&!t.drainInProgress&&te(t)},te=t=>{t.connected&&!t.drainInProgress&&(t.queue.length||t.subscriptionQueue.length)&&(t.drainInProgress=!0,t.drainTimeout=setTimeout(()=>{if(t.drainInProgress=!1,t.queue.length||t.subscriptionQueue.length){let e=[...t.queue,...t.subscriptionQueue];t.queue=[],t.subscriptionQueue=[],t.connection.ws.send(JSON.stringify(e)),N(t)}},0))},ke=t=>{t.drainInProgress&&(clearTimeout(t.drainTimeout),t.drainInProgress=!1)};var se=require("@saulx/hash"),T=(t,e)=>e?(0,se.hashObjectIgnoreKeyOrder)([e,t]):(0,se.hashObjectIgnoreKeyOrder)(t);var M=(t,e,s,r,n)=>{r||(r=T(e,n));let i=t.subscriptions[r],o=t.cache[r];if(i)if(i.authError)if(!t.beingAuth)s(i.authError.error,r,0);else{let c=++i.cnt;i.subscribers[c]={onInitial:s}}else if(o)s(null,r,0,o.value);else{let c=++i.cnt;i.subscribers[c]={onInitial:s}}else{i=t.subscriptions[r]={query:e,cnt:1,name:n,subscribers:{1:{onInitial:s}}};let c;for(let a=0;a<t.subscriptionQueue.length;a++){let[u,l,,p]=t.subscriptionQueue[a];(u===E.RequestTypes.Unsubscribe||u===E.RequestTypes.SendSubscriptionData)&&l===r?(t.subscriptionQueue.splice(a,1),a--):(u===E.RequestTypes.Subscription||u===E.RequestTypes.GetSubscription)&&l===r&&(c=!0,u===E.RequestTypes.Subscription&&(p!==o.checksum&&(t.subscriptionQueue[a][3]=o.checksum),t.subscriptionQueue[a][4]=2))}if(!c){let a=[E.RequestTypes.GetSubscription,r,e];o&&a.push(o.checksum),n&&(o||a.push(0),a.push(n)),m(t,a)}}};var C=require("@based/types");var P=(t,e,s,r,n,i,o)=>{i||(i=T(e,o));let c=t.subscriptions[i],a=t.cache[i],u;if(c){u=++c.cnt;let l=!0;for(let p in c.subscribers)if(c.subscribers[p].onData){l=!1;break}if(c.subscribers[u]={onError:n,onData:s,onInitial:r},l){for(let d=0;d<t.subscriptionQueue.length;d++){let[h,v]=t.subscriptionQueue[d];h===C.RequestTypes.GetSubscription&&v===i&&(t.subscriptionQueue.splice(d,1),d--)}let p=[C.RequestTypes.Subscription,i,e];a&&(p.push(a.checksum),p.push(2)),o&&(a||p.push(0,2),p.push(o)),m(t,p)}}else{u=1,c=t.subscriptions[i]={query:e,cnt:1,name:o,subscribers:{1:{onError:n,onData:s,onInitial:r}}};let l=!1,p=!1,d;for(let h=0;h<t.subscriptionQueue.length;h++){let[v,q,,G]=t.subscriptionQueue[h];(v===C.RequestTypes.Unsubscribe||v===C.RequestTypes.SendSubscriptionData||v===C.RequestTypes.GetSubscription)&&q===i?(v===C.RequestTypes.GetSubscription&&(p=!0),d&&(d[4]=2),t.subscriptionQueue.splice(h,1),h--):v===C.RequestTypes.Subscription&&q===i&&(l=!0,d=t.subscriptionQueue[h],G!==a.checksum&&(d[3]=a.checksum),!d[4]&&p&&(d[4]=2))}if(!l){let h=[C.RequestTypes.Subscription,i,e];a&&(h.push(a.checksum),p&&h.push(2)),o&&(a?!p&&a&&h.push(2):h.push(0,0),h.push(o)),m(t,h)}}return a&&(r&&(r(null,i,u),delete c.subscribers[u].onInitial),s&&s(a.value,a.checksum)),[i,u]};var x=require("@based/types");var g=(t,e,s)=>{let r=t.subscriptions[e];if(r){let n=!1;if(s?r.subscribers[s]&&(delete r.subscribers[s],r.cnt--,r.cnt===0&&(n=!0)):n=!0,n){delete t.subscriptions[e];let i=!1;for(let o=0;o<t.subscriptionQueue.length;o++){let[c,a]=t.subscriptionQueue[o];c===x.RequestTypes.Unsubscribe&&a===e?i=!0:(c===x.RequestTypes.Subscription||c===x.RequestTypes.SendSubscriptionData)&&a===e&&(t.subscriptionQueue.splice(o,1),o--)}i||m(t,[x.RequestTypes.Unsubscribe,e])}}};var Oe=require("@based/types"),Te=t=>{for(let e=0;e<t.subscriptionQueue.length;e++)t.subscriptionQueue[e][0]===Oe.RequestTypes.Unsubscribe&&(t.subscriptionQueue.splice(e,1),e--)};var Ce=require("@based/types"),we=t=>{for(let e=0;e<t.subscriptionQueue.length;e++)t.subscriptionQueue[e][0]===Ce.RequestTypes.SendSubscriptionData&&(t.subscriptionQueue.splice(e,1),e--)};var L=(t,e=!1)=>{for(let s in t.subscriptions){let r=Number(s),n=t.subscriptions[s];if(e&&!n.authError)continue;let i,o,c;for(let l=0;l<t.subscriptionQueue.length;l++){let[p,d]=t.subscriptionQueue[l];d===r&&(p===10?(c=l,i=t.subscriptionQueue[l]):p===1&&(o=t.subscriptionQueue[l]))}i&&o&&console.error("GET IN Q AND SUB IN Q SHOULD BE IMPOSSIBLE");let a=t.cache[r],u=!1;if(i){let l=!0;for(let p in n.subscribers)if(n.subscribers[p].onData){l=!1;break}l?u=!0:(console.info("not only gets remove get"),t.subscriptionQueue.splice(c,1)),a&&i[3]!==a.checksum&&(i[3]=a.checksum)}if(!u)if(o)a&&o[3]!==a.checksum&&(o[3]=a.checksum,i&&(o[4]=2));else{let{name:l,query:p}=t.subscriptions[r];l?a?m(t,[1,r,p,a.checksum,i?2:0,l]):m(t,[1,r,p,0,i?2:0,l]):a?m(t,[1,r,p,a.checksum,i?2:0]):m(t,[1,r,p,0,i?2:0])}}};var H=(t,e)=>{if(typeof window!="undefined")return t;let s={white:"\x1B[37;1m",reset:"\x1B[0m",blue:"\x1B[34m",red:"\x1B[31m",green:"\x1B[32m",brightBlue:"\x1B[34;1m",brightRed:"\x1B[31;1m"};return`${s[e]}${t}${s.reset}`},re=(t,e=0,s=!1,r="",n=!1)=>{let i="";for(let a=0;a<e;a++)i+=" ";let o=s?[]:r?[i+`${H(r,n?"brightRed":"white")} {`]:[i+"{"],c=!1;s||(i+=" ",e+=1);for(let a in t){let u=t[a],l=a[0]==="$"?H(a,"white"):a;if(c&&(o[o.length-1]+=","),Array.isArray(u)){o.push(`${i} ${l}: [`);for(let p=0;p<u.length;p++){let d=u[p];o.push(...d&&typeof d=="object"?re(d,e+4):[`${i} ${d}`]),p!==u.length-1&&(o[o.length-1]+=",")}o.push(`${i} ]`)}else u&&typeof u=="object"?(o.push(`${i} ${l}: {`),o.push(...re(u,e+2,!0)),o.push(`${i} }`)):o.push(`${i} ${l}: ${u}`);c=!0}return s||o.push(i.slice(0,-1)+"}"),o},_=re;var B=t=>{let e=new Error(t.message);if(e.name=t.name?`${t.type} from ${t.name}`:t.type,e.stack=null,t.query||t.payload){let s=e.message.split(`
|
|
2
|
+
`),r=0;s[0]===""&&s.shift();let n=s[0];for(let i=0;i<n.length;i++)if(n[i]!==" "){r=i-2;break}r>0?s=s.map(i=>i.slice(r)):s=s.map(i=>" "+i),t.code&&(e.code=t.code),e.message=`
|
|
3
|
+
|
|
4
|
+
`+(t.payload&&typeof t.payload!="object"?` ${H("Payload","brightRed")} ${t.payload}`:_(t.payload||t.query,0,!1,t.payload?"Payload":"Query",!0).map(i=>" "+i).join(`
|
|
5
|
+
`))+`
|
|
6
|
+
|
|
7
|
+
`+s.join(`
|
|
8
|
+
`)+`
|
|
9
|
+
|
|
10
|
+
`}return e};var Pe=(t,e)=>{let[,s,r,n,i]=e,o=t.subscriptions[s];if(o){let c=t.cache[s]&&t.cache[s].checksum;if(i){let a=B(i);i.auth&&(o.authError={token:t.token,error:a});for(let u in o.subscribers){let l=o.subscribers[u];l.onInitial?i.auth?(l.onError&&l.onError(a),l.onInitial(a,Number(s),Number(u),void 0,!0),delete l.onInitial):(l.onInitial(a,Number(s),Number(u)),delete l.onInitial,g(t,s,Number(u))):l.onError&&l.onError(a)}}else if(c===n){o.authError&&delete o.authError;for(let a in o.subscribers){let u=o.subscribers[a];u.onInitial&&(u.onInitial(null,Number(s),Number(a),t.cache[s].value),delete u.onInitial,u.onData||g(t,s,Number(a)))}}else{o.authError&&delete o.authError,t.cache[s]={value:r,checksum:n};for(let a in o.subscribers){let u=o.subscribers[a];u.onInitial&&(u.onInitial(null,Number(s),Number(a),r),delete u.onInitial,u.onData||g(t,s,Number(a))),u.onData&&u.onData(r,n)}}}};var Be=require("@saulx/diff"),z=require("@based/types");var qe=(t,e)=>{let[,s,r,[n,i]]=e,o=t.subscriptions[s];if(o){let c=t.cache[s];if(!c||c.checksum!==n)if(c)if(c.checksum===i)for(let a in o.subscribers){let u=o.subscribers[a];u.onInitial&&(u.onInitial(null,Number(s),Number(a),c.value),delete u.onInitial,u.onData||g(t,s,Number(a)))}else m(t,[z.RequestTypes.SendSubscriptionData,s]);else m(t,[z.RequestTypes.SendSubscriptionData,s]);else{let a=!1;try{c.value=(0,Be.applyPatch)(c.value,r),c.value===null&&(a=!0)}catch(u){a=!0}if(a)console.warn(`
|
|
11
|
+
Found corrupt data while applying diff to subscription need to re-fetch
|
|
12
|
+
`),console.warn(_(o.query,2,!1,"Query").join(`
|
|
13
|
+
`)+`
|
|
14
|
+
|
|
15
|
+
`),delete t.cache[s],m(t,[z.RequestTypes.SendSubscriptionData,s]);else{c.checksum=i;for(let u in o.subscribers){let l=o.subscribers[u];l.onInitial&&(l.onInitial(null,Number(s),Number(u),c.value),delete l.onInitial,l.onData||g(t,s,Number(u))),l.onData&&l.onData(c.value,c.checksum)}}}}};var Ee=(t,e)=>{for(let s of e[1]){delete t.cache[s];let r=t.subscriptions[s];if(r){let n={type:"AuthorizationError",name:r.name?`observe "${r.name}"`:"observe",message:"Unauthorized request",payload:r.query,auth:!0},i=B(n);r.authError={token:t.token,error:i};for(let o in r.subscribers){let c=r.subscribers[o];c.onError&&c.onError(i)}}}};var Fe=require("@based/types");var Ve=0,O=(t,e,s,r,n,i)=>{let o=++Ve;t.requestCallbacks[o]={resolve:r,reject:n},e===Fe.RequestTypes.Call?m(t,[e,i,o,s]):m(t,[e,o,s])};var Qe=(t,e)=>{let[,s,r,n]=e,i=t.requestCallbacks[s];i&&(delete t.requestCallbacks[s],n?i.reject(B(n)):i.resolve(r))};var S=require("@based/types");var ie=require("@based/types");var Xe=t=>typeof t!="undefined"&&t!==null,Ye=(t,e,s)=>{if(t.beingAuth=!0,e)t.token=e,t.sendTokenOptions=s;else{for(let r in t.cache)t.subscriptions[r]||delete t.cache[r];delete t.token,delete t.sendTokenOptions}if(t.connected){let r=e?[ie.RequestTypes.Token,e,s].filter(Xe):[ie.RequestTypes.Token];t.connection.ws.send(JSON.stringify(r)),N(t),L(t,!0)}},D=Ye;var J=class{constructor(e){this.auth=[];this.subscriptions={};this.cache={};this.requestCallbacks={};this.connected=!1;this.subscriptionQueue=[];this.queue=[];this.drainInProgress=!1;this.based=e}onClose(){this.connected=!1,ke(this),Te(this),we(this),this.based.listeners.disconnect&&this.based.listeners.disconnect.forEach(e=>e())}onReconnect(){if(this.based.listeners.reconnect&&this.based.listeners.reconnect.forEach(e=>e()),this.tracking)for(let e of this.tracking)m(this,[S.RequestTypes.Track,{t:e}])}onOpen(){this.connected=!0,this.based.listeners.connect&&this.based.listeners.connect.forEach(e=>e()),this.token&&D(this,this.token,this.sendTokenOptions),L(this),te(this)}onData(e){try{let s=JSON.parse(e.data);if(s[0]===S.RequestTypes.Token){s[1].length&&Ee(this,s);for(let r of this.auth)r(!s[2]);this.beingAuth=!1,this.auth=[]}else s[0]===S.RequestTypes.Set||s[0]===S.RequestTypes.Get||s[0]===S.RequestTypes.Configuration||s[0]===S.RequestTypes.GetConfiguration||s[0]===S.RequestTypes.Call||s[0]===S.RequestTypes.Delete||s[0]===S.RequestTypes.Copy||s[0]===S.RequestTypes.Digest?Qe(this,s):s[0]===S.RequestTypes.Subscription?Pe(this,s):s[0]===S.RequestTypes.SubscriptionDiff&&qe(this,s)}catch(s){console.error("Received incorrect data ",e)}}};var ne=(t,e)=>{let s;if(t.configuration&&t.configuration.schema)for(let r in t.configuration.schema){let n=t.configuration.schema[r];if(n.prefixToTypeMapping){for(let i in n.prefixToTypeMapping)if(n.prefixToTypeMapping[i]===e){s=i;break}}}return s};var ue=require("@saulx/hash");var Ue=require("@based/types"),xe=require("@saulx/hash"),Re=new Set,Ze=t=>{if(typeof window!="undefined"){if(Re.has(t))return!1;Re.add(t);try{let e="_ba:"+(0,xe.hashCompact)(t);return localStorage.getItem(e)?!1:(localStorage.setItem(e,"1"),!0)}catch(e){return!1}}return!1},oe=(t,e)=>{if(e){let s=`${t}`,r=Object.keys(e).sort();for(let n of r)s+="_"+n+"_"+e[n];return s}else return t},I=(t,e,s,r,n,i,o)=>{let c=oe(e,s),a={t:c};o&&(a.r=1),n&&(a.e=1,i&&(a.o=i)),r?(a.s=1,t.tracking.delete(c)):o||(n||(t.tracking||(t.tracking=new Set),t.tracking.add(c)),Ze(c)&&(a.u=1)),m(t,[Ue.RequestTypes.Track,a])};var De=class{constructor(e,s,r){this.closed=!1;this.client=e,this.subId=r,this.subscriberId=s}unsubscribe(){this.closed=!0,g(this.client,this.subId,this.subscriberId)}},Ie=class{constructor(e,s){this.closed=!1;this.client=e,this.subs=s}unsubscribe(){if(!this.closed){this.closed=!0;for(let e of this.subs)e.unsubscribe()}}},ae=class{constructor(e,s){this.client=e,this.components=s}subscribe(e,s,r){let n={data:{}},i=[];for(let{key:o,obs:c}of this.components){let a=c.subscribe(u=>{if(o===""){Object.assign(n.data,u),e(n);return}n.data[o]=u,e(n)},s);i.push(a)}return new Ie(this.client,i)}},w=class{constructor(e,s,r){this.client=e,this.subId=typeof s=="string"?T(r,s):T(s),this.name=typeof s=="string"?s:null,this.payload=typeof s=="string"?r:s}subscribe(e,s,r){let[,n]=P(this.client,this.payload,e,i=>{i&&(console.error(i),s&&s(i))},s,this.subId,this.name);return new De(this.client,n,this.subId)}};var ce={},A={},et=(t,e)=>{ce[t]||(ce[t]=!0,setTimeout(()=>{console.info("Drain file q"),ce[t]=!1;let s=A[t];A[t]=[];let r=new global.FormData;for(let n of s){let{raw:i,name:o,id:c,file:a,functionName:u}=n,l=`${u||""}|${i?1:0}|${c}|${a.size}${o?`|${o}`:""}`;r.append(l,a)}try{let n=new global.XMLHttpRequest;n.upload.onprogress=i=>{let o=100*(i.loaded||i.position)/(i.totalSize||i.total);console.info(o,"upload...")},n.onerror=i=>{console.error("error!",i,"flap",n.responseText)},n.timeout=1e3*60*60*24,n.onabort=i=>{console.error("abort",i)},n.ontimeout=i=>{console.error("on timeout",i)},n.onload=()=>{let i={};try{i=JSON.parse(n.response),console.info("SUCCESS",i)}catch(o){console.error("something wrong with file upload",o)}},n.open("POST",t+"/file"),n.setRequestHeader("Content-Type","multipart/form-data"),n.setRequestHeader("Authorization",e),n.send(r)}catch(n){console.error("Something wrong with xhr upload",n)}},500))},Ae=async(t,e,s,r,n,i,o)=>{A[s]||(A[s]=[]),A[s].push({file:e,id:r,url:s,raw:n,name:i,functionName:o}),et(s,t.getToken())};var Ge=j(require("@based/get-service")),K={},W={},tt=async(t,e)=>{if(e.url)return typeof e.url=="string"?e.url:await e.url();if(!t.opts.env&&t.opts.url)return typeof t.opts.url=="string"?t.opts.url:await t.opts.url();let{env:s,project:r,org:n}=t.opts,i=s+"/"+r+"/"+n+"/"+t.opts.cluster;if(K[i])return K[i];if(W[i])return(await W[i]).url;let o=await(W[i]=(0,Ge.default)({env:s,project:r,org:n,name:"@based/hub",key:"file-upload",optionalKey:!0},0,t.opts.cluster));return delete W[i],setTimeout(()=>{delete K[i]},2e3),K[i]=o.url},$e=tt;var je=j(require("cross-fetch")),V=(t,e,s)=>((0,je.default)(e,{method:"POST",cache:"no-cache",headers:{"Content-Type":s.mimeType||"text/plain","File-Id":s.id,"File-Is-Raw":s.raw?"1":"0","File-Name":s.name||"","Function-Name":s.functionName||"",Authorization:t.getToken()},body:s.contents}).then(r=>{}).catch(r=>{console.error("Error while uploading file",r)}),{id:s.id});var F=require("./file/stream"),X=typeof window!="undefined",st=t=>"src"in t&&typeof t.src=="string",rt=t=>"path"in t&&typeof t.path=="string",it=t=>"contents"in t&&(0,F.isStream)(t.contents),Ne=async(t,e)=>{if(st(e)){let n=e.id?{$id:e.id}:{type:"file"};return e.src?(n.src=e.src,n.origin=e.src,e.size&&(n.size=e.size),e.name&&(n.name=e.name),e.parents&&(n.parents=e.parents),await t.set(n)):void 0}let s=e.id;if(!s){let n={type:"file",progress:0};e.name?n.name=e.name:global.File&&"contents"in e&&e.contents instanceof global.File&&(n.name=e.contents.name),e.parents&&(n.parents=e.parents),s=(await t.set(n)).id}e.id=s;let r=(await $e(t,e)).replace(/^ws/,"http");if(rt(e))return(0,F.uploadFilePath)(t,r,e),{id:s};if(it(e))return(0,F.uploadFileStream)(t,r,e),{id:s};if(e.contents instanceof ArrayBuffer)return e.contents=X?new global.Blob([e.contents],{type:e.mimeType||"text/plain"}):global.Buffer.from(e.contents),V(t,r+"/file",e);if(X&&e.contents instanceof global.Blob)return e.mimeType||(e.mimeType=e.contents.type),V(t,r+"/file",e);if(typeof e.contents=="string"||!X&&e.contents instanceof global.Buffer)return V(t,r+"/file",e);if(X&&e.contents instanceof File)return Ae(t,e.contents,r,e.id,e.raw||!1,e.name,e.functionName),{id:s};throw e.id||await t.delete({$id:s}),new Error(`Invalid contents for file api ${JSON.stringify(e,null,2)}`)};var Y=j(require("@based/get-service")),le=require("@saulx/utils"),y=require("@based/graphql");f(b,require("@based/types"),module.exports);var pe=class extends ge{constructor(e){super();this.client=new J(this),Object.defineProperty(this,"client",{enumerable:!1,writable:!0}),e&&e.url&&this.connect(e.url),this.graphql={query:this.gqlQuery.bind(this),live:this.gqlLive.bind(this)}}connect(e){!e&&this._url?this.client.connection||(this.client.connection=ee(this.client,this._url)):(this._url=e,this.client.connection=ee(this.client,e))}disconnect(){this.client.connection&&(this.client.connection.disconnected=!0,this.client.connection.destroy(),this.client.connection.ws&&this.client.connection.ws.close(),this.client.connected&&this.client.onClose(),delete this.client.connection),this.client.connected=!1}observeUntil(e,s,r){return new Promise((n,i)=>{let o,c=!1;this.observe(e,(a,u)=>{r&&r(a,u),s(a,u)&&(c=!0,o&&o(),n(a))}).then(a=>{c?o():o=a}).catch(a=>{i(a)})})}gql(e,...s){typeof e=="string"&&(e=[e]);let r=e[0];return s.forEach((n,i)=>{n&&n.kind==="Document"?r+=n.loc.source.body:r+=n,r+=e[i+1]}),(0,y.createOperations)({schemas:this.client.configuration.schema},(0,y.parseGraphql)(r))}gqlDb(e="default"){return(s,...r)=>{typeof s=="string"&&(s=[s]);let n=s[0];return r.forEach((i,o)=>{i&&i.kind==="Document"?n+=i.loc.source.body:n+=i,n+=s[o+1]}),(0,y.createOperations)({schemas:this.client.configuration.schema,db:e},(0,y.parseGraphql)(n))}}observe(e,s,r,n){return typeof e=="string"?new Promise((i,o)=>{let c=typeof s=="function",a=c?s:r,u=c?r:n;P(this.client,c?void 0:s,a,(l,p,d,h,v)=>{l&&!v?o(l):i(()=>{g(this.client,p,d)})},u,void 0,e)}):new Promise((i,o)=>{P(this.client,e,s,(c,a,u,l,p)=>{c&&!p?o(c):i(()=>{g(this.client,a,u)})},r)})}createObservable(e,s){return typeof e=="string"?new w(this.client,e,s):new w(this.client,e)}observeSchema(e,s,r){return new Promise((n,i)=>{let o=typeof e=="string"?e:"default",c=typeof e=="string"?s:e,a=typeof e=="string"?r:s;P(this.client,{$subscribe_schema:o},(u,l)=>{this.client.configuration||(this.client.configuration={dbs:[],schema:{},functions:{}}),this.client.configuration.schema[o]=u,c(u,l)},(u,l,p,d,h)=>{u&&!h?i(u):n(()=>{g(this.client,l,p)})},a)})}get(e,s){return typeof e=="string"?new Promise((r,n)=>{M(this.client,s,(i,o,c,a)=>{i?n(i):r(a)},0,e)}):new Promise((r,n)=>{O(this.client,k.RequestTypes.Get,e,r,n)})}file(e){return global.File&&e instanceof File&&(e={contents:e}),Ne(this,e)}call(e,s){return new Promise((r,n)=>{O(this.client,k.RequestTypes.Call,s,r,n,e)})}async id(e,s){let r=ne(this.client,e);if(r||(await this.schema(),r=ne(this.client,e)),!r)throw B({message:`Type does not exist ${e}`,type:"Invalid type",payload:s?{type:e,opts:s}:{type:e}});if(s){let n=(0,ue.hashCompact)(s,8,!0);return r+n}else return r+(0,ue.hashCompact)(Math.floor(Math.random()*99999999999)+""+Date.now())}digest(e){return new Promise((s,r)=>{O(this.client,k.RequestTypes.Digest,e,s,r)})}set(e){return new Promise((s,r)=>{O(this.client,k.RequestTypes.Set,e,s,r)})}copy(e){return new Promise((s,r)=>{O(this.client,k.RequestTypes.Copy,e,s,r)})}async gqlQuery(e,s={}){let r;typeof e=="string"?r=this.gql(e):r=e;try{if(r=(0,y.handleGraphqlVariables)(r,r,s),r.opType==="GET"){let i={$db:r.db},o=[];for(let a in r.ops){if(r.ops[a].fnObserve){let u=await this.get(r.ops[a].fnObserve.name,r.ops[a].fnObserve.payload);o.push({key:a,reply:u});continue}r.ops[a].get&&(i[a]=r.ops[a].get)}let c=await this.get(i);for(let{key:a,reply:u}of o)c[a]=u;return{data:c}}let n={};return await Promise.all(Object.entries(r.ops).map(async([i,o])=>{var l,p,d,h,v;if(o.delete){n[i]=await this.delete(o.delete);return}else if(o.fnCall){n[i]=await this.call(o.fnCall.name,o.fnCall.payload);return}let{id:c}=await this.set(o.set);if(!o.get){let q={};q.id=c;let G=(v=(h=(d=(p=(l=this.client)==null?void 0:l.configuration)==null?void 0:p.schema)==null?void 0:d[r.db])==null?void 0:h.prefixToTypeMapping)==null?void 0:v[c.slice(0,2)];G&&(q.type=G),n[i]=q;return}let a=(0,le.deepCopy)(o.get);a.$id=c;let u=await this.get(a);n[i]=u})),{data:n}}catch(n){return{errors:[{message:n.message,locations:n.locations}]}}}async gqlLive(e,s={}){let r;if(typeof e=="string"?r=this.gql(e):r=e,r=(0,y.handleGraphqlVariables)(r,r,s),r.opType==="GET"){let i=[],o={};for(let c in r.ops){if(r.ops[c].fnObserve){let{name:a,payload:u}=r.ops[c].fnObserve;i.push({key:c,fn:{name:a,payload:u}});continue}o[c]=r.ops[c].get}if(i!=null&&i.length){let c=i.map(u=>({obs:new w(this.client,u.fn.name,u.fn.payload),key:u.key})),a=new w(this.client,me({$db:r.db},o));return c.push({key:"",obs:a}),new ae(this.client,c)}return new w(this.client,{$db:r.db,data:o})}let n={};return await Promise.all(Object.entries(r.ops).map(async([i,o])=>{if(o.delete){n[i]=await this.delete(o.delete);return}else if(o.fnCall){n[i]=await this.call(o.fnCall.name,o.fnCall.payload);return}let{id:c}=await this.set(o.set),a=(0,le.deepCopy)(o.get);a.$id=c,n[i]=a})),new w(this.client,{$db:r.db,data:n})}analytics(e,s){return new Promise((r,n)=>{s?P(this.client,e,s,(i,o,c,a,u)=>{i&&!u?n(i):r(()=>{g(this.client,o,c)})},i=>console.error(i),void 0,"analytics"):M(this.client,e,(i,o,c,a)=>{i?n(i):((0,k.isAnalyticsHistoryOpts)(e)||(0,k.isAnalyticsTypesOpts)(e),r(a))},0,"analytics")})}track(e,s){I(this.client,e,s)}clearAnalytics(e,s){I(this.client,e,s,!1,!1,void 0,!0)}untrack(e,s){I(this.client,e,s,!0)}event(e,s,r){I(this.client,e,s,!1,!0,r)}delete(e){return new Promise((s,r)=>{O(this.client,k.RequestTypes.Delete,e,s,r)})}schema(){return new Promise((e,s)=>{let r=n=>{this.client.configuration=n,e(n)};O(this.client,k.RequestTypes.GetConfiguration,0,r,s)})}updateSchema(e){return new Promise((s,r)=>{O(this.client,k.RequestTypes.Configuration,e,s,r)})}getToken(){return this.client.token}auth(e,s){return new Promise(r=>{this.client.auth.push(r),(e&&e!==this.client.token||e===!1&&this.client.token)&&(typeof e=="string"?D(this.client,e,s):D(this.client),this.emit("auth",e))})}},nt=(t,e)=>{if(e){let s;t+=/\?/.test(t)?"&":"?";for(let r in e){let n=e[r];t+=s?`&${r}=${n}`:`${r}=${n}`,s=!0}}return t},ot=(t,e=pe)=>{let{env:s,project:r,org:n,url:i,key:o,name:c="@based/hub",cluster:a,params:u}=t;if(i||(a=t.cluster=(0,Y.getClusterUrl)(a),i=async()=>{let{url:l}=await(0,Y.default)({env:s,project:r,org:n,key:o,name:c},0,a);return nt(l,u)}),i){let l=new e;return l.opts=t,l.connect(i),l}},at=ot;0&&(module.exports={Based,BasedClient,BasedGraphQL,Observable,addGetSubscriber,addRequest,addSubscriber,createGraphqlOperations,generateSubscriptionId,generateTrackingKey,handleGraphqlVariables,parseGraphql,removeSubscriber});
|