@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.
Files changed (109) hide show
  1. package/dist/Client.d.ts +0 -0
  2. package/dist/Client.js +0 -0
  3. package/dist/Client.js.map +0 -0
  4. package/dist/Emitter.d.ts +0 -0
  5. package/dist/Emitter.js +0 -0
  6. package/dist/Emitter.js.map +0 -0
  7. package/dist/createError.d.ts +0 -0
  8. package/dist/createError.js +0 -0
  9. package/dist/createError.js.map +0 -0
  10. package/dist/file/fetch.d.ts +0 -0
  11. package/dist/file/fetch.js +0 -0
  12. package/dist/file/fetch.js.map +0 -0
  13. package/dist/file/getUrl.d.ts +0 -0
  14. package/dist/file/getUrl.js +0 -0
  15. package/dist/file/getUrl.js.map +0 -0
  16. package/dist/file/index.d.ts +0 -0
  17. package/dist/file/index.js +0 -0
  18. package/dist/file/index.js.map +0 -0
  19. package/dist/file/stream/browser.d.ts +0 -0
  20. package/dist/file/stream/browser.js +0 -0
  21. package/dist/file/stream/browser.js.map +0 -0
  22. package/dist/file/stream/index.d.ts +0 -0
  23. package/dist/file/stream/index.js +0 -0
  24. package/dist/file/stream/index.js.map +0 -0
  25. package/dist/file/uploadFileBrowser.d.ts +0 -0
  26. package/dist/file/uploadFileBrowser.js +0 -0
  27. package/dist/file/uploadFileBrowser.js.map +0 -0
  28. package/dist/findPrefix.d.ts +0 -0
  29. package/dist/findPrefix.js +0 -0
  30. package/dist/findPrefix.js.map +0 -0
  31. package/dist/idleTimeout.d.ts +0 -0
  32. package/dist/idleTimeout.js +0 -0
  33. package/dist/idleTimeout.js.map +0 -0
  34. package/dist/index.d.ts +2 -2
  35. package/dist/index.js +15 -542
  36. package/dist/index.js.map +1 -1
  37. package/dist/observable/index.d.ts +16 -9
  38. package/dist/observable/index.js +41 -1
  39. package/dist/observable/index.js.map +1 -1
  40. package/dist/printBasedObject.d.ts +0 -0
  41. package/dist/printBasedObject.js +0 -0
  42. package/dist/printBasedObject.js.map +0 -0
  43. package/dist/queue.d.ts +0 -0
  44. package/dist/queue.js +0 -0
  45. package/dist/queue.js.map +0 -0
  46. package/dist/request.d.ts +0 -0
  47. package/dist/request.js +0 -0
  48. package/dist/request.js.map +0 -0
  49. package/dist/selvaTypes/get.d.ts +0 -0
  50. package/dist/selvaTypes/get.js +0 -0
  51. package/dist/selvaTypes/get.js.map +0 -0
  52. package/dist/selvaTypes/schema.d.ts +0 -0
  53. package/dist/selvaTypes/schema.js +0 -0
  54. package/dist/selvaTypes/schema.js.map +0 -0
  55. package/dist/selvaTypes/set.d.ts +0 -0
  56. package/dist/selvaTypes/set.js +0 -0
  57. package/dist/selvaTypes/set.js.map +0 -0
  58. package/dist/subscriptions/addGetSubscriber.d.ts +0 -0
  59. package/dist/subscriptions/addGetSubscriber.js +0 -0
  60. package/dist/subscriptions/addGetSubscriber.js.map +0 -0
  61. package/dist/subscriptions/addSubscriber.d.ts +0 -0
  62. package/dist/subscriptions/addSubscriber.js +0 -0
  63. package/dist/subscriptions/addSubscriber.js.map +0 -0
  64. package/dist/subscriptions/generateId.d.ts +0 -0
  65. package/dist/subscriptions/generateId.js +0 -0
  66. package/dist/subscriptions/generateId.js.map +0 -0
  67. package/dist/subscriptions/incomingSubscription.d.ts +0 -0
  68. package/dist/subscriptions/incomingSubscription.js +0 -0
  69. package/dist/subscriptions/incomingSubscription.js.map +0 -0
  70. package/dist/subscriptions/incomingSubscriptionDiff.d.ts +0 -0
  71. package/dist/subscriptions/incomingSubscriptionDiff.js +0 -0
  72. package/dist/subscriptions/incomingSubscriptionDiff.js.map +0 -0
  73. package/dist/subscriptions/index.d.ts +0 -0
  74. package/dist/subscriptions/index.js +0 -0
  75. package/dist/subscriptions/index.js.map +0 -0
  76. package/dist/subscriptions/logoutSubscriptions.d.ts +0 -0
  77. package/dist/subscriptions/logoutSubscriptions.js +0 -0
  78. package/dist/subscriptions/logoutSubscriptions.js.map +0 -0
  79. package/dist/subscriptions/removeSendSubscriptionDataFromQueue.d.ts +0 -0
  80. package/dist/subscriptions/removeSendSubscriptionDataFromQueue.js +0 -0
  81. package/dist/subscriptions/removeSendSubscriptionDataFromQueue.js.map +0 -0
  82. package/dist/subscriptions/removeSubscriber.d.ts +0 -0
  83. package/dist/subscriptions/removeSubscriber.js +0 -0
  84. package/dist/subscriptions/removeSubscriber.js.map +0 -0
  85. package/dist/subscriptions/removeUnsubscribesFromQueue.d.ts +0 -0
  86. package/dist/subscriptions/removeUnsubscribesFromQueue.js +0 -0
  87. package/dist/subscriptions/removeUnsubscribesFromQueue.js.map +0 -0
  88. package/dist/subscriptions/sendAllSubscriptions.d.ts +0 -0
  89. package/dist/subscriptions/sendAllSubscriptions.js +0 -0
  90. package/dist/subscriptions/sendAllSubscriptions.js.map +0 -0
  91. package/dist/token.d.ts +0 -0
  92. package/dist/token.js +0 -0
  93. package/dist/token.js.map +0 -0
  94. package/dist/track.d.ts +0 -0
  95. package/dist/track.js +0 -0
  96. package/dist/track.js.map +0 -0
  97. package/dist/types.d.ts +0 -0
  98. package/dist/types.js +0 -0
  99. package/dist/types.js.map +0 -0
  100. package/dist/websocket/index.d.ts +0 -0
  101. package/dist/websocket/index.js +0 -0
  102. package/dist/websocket/index.js.map +0 -0
  103. package/dist/websocket/types.d.ts +0 -0
  104. package/dist/websocket/types.js +0 -0
  105. package/dist/websocket/types.js.map +0 -0
  106. package/dist/websocket/urlLoader.d.ts +0 -0
  107. package/dist/websocket/urlLoader.js +0 -0
  108. package/dist/websocket/urlLoader.js.map +0 -0
  109. package/package.json +9 -7
package/dist/index.js CHANGED
@@ -1,542 +1,15 @@
1
- "use strict";
2
- var __createBinding = (this && this.__createBinding) || (Object.create ? (function(o, m, k, k2) {
3
- if (k2 === undefined) k2 = k;
4
- Object.defineProperty(o, k2, { enumerable: true, get: function() { return m[k]; } });
5
- }) : (function(o, m, k, k2) {
6
- if (k2 === undefined) k2 = k;
7
- o[k2] = m[k];
8
- }));
9
- var __setModuleDefault = (this && this.__setModuleDefault) || (Object.create ? (function(o, v) {
10
- Object.defineProperty(o, "default", { enumerable: true, value: v });
11
- }) : function(o, v) {
12
- o["default"] = v;
13
- });
14
- var __importStar = (this && this.__importStar) || function (mod) {
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});