@livequery/rest 2.0.92 → 2.0.96

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
package/README.md CHANGED
@@ -432,6 +432,12 @@ Methods:
432
432
  import { Socket } from '@livequery/rest'
433
433
  ```
434
434
 
435
+ Subpath import is also available:
436
+
437
+ ```ts
438
+ import { Socket } from '@livequery/rest/Socket'
439
+ ```
440
+
435
441
  The socket class is exported for low-level integrations and debugging.
436
442
 
437
443
  Example:
@@ -472,8 +478,15 @@ bun run build
472
478
  Build steps:
473
479
 
474
480
  - clean `dist/`
475
- - bundle ESM output with Bun
476
- - generate `.d.ts` files with TypeScript
481
+ - emit Node.js ESM files with TypeScript (`module: NodeNext`)
482
+ - generate `.js`, `.d.ts`, `.js.map`, and `.d.ts.map`
483
+
484
+ The published package is strict ESM (`"type": "module"`) and exposes these entrypoints:
485
+
486
+ - `@livequery/rest`
487
+ - `@livequery/rest/RestTransporter`
488
+ - `@livequery/rest/Socket`
489
+ - `@livequery/rest/helpers/parseJson`
477
490
 
478
491
  ## License
479
492
 
@@ -0,0 +1,158 @@
1
+ import { of, firstValueFrom, EMPTY, from } from 'rxjs';
2
+ import { catchError, filter, first, map, mergeMap, take } from 'rxjs/operators';
3
+ import { merge } from 'rxjs';
4
+ import { Socket } from './Socket.js';
5
+ import { parseJson } from './helpers/parseJson.js';
6
+ export class RestTransporter {
7
+ config;
8
+ socket;
9
+ constructor(config) {
10
+ this.config = config;
11
+ if (config.ws) {
12
+ this.socket = new Socket(config.ws);
13
+ }
14
+ }
15
+ async #call(req) {
16
+ const url = `${await this.config.api}/${req.ref}${req.action ? `/~${req.action}` : ''}${Object.keys(req.query || {}).length > 0 ? `?${new URLSearchParams(req.query).toString()}` : ''}`;
17
+ const base_headers = {
18
+ ...req.body ? {
19
+ 'Content-Type': 'application/json'
20
+ } : {},
21
+ ...this.socket ? {
22
+ socket_id: this.socket.client_id,
23
+ 'x-lcid': this.socket.client_id,
24
+ 'x-lgid': await firstValueFrom(this.socket.$gateway)
25
+ } : {}
26
+ };
27
+ const original_request = {
28
+ url,
29
+ method: req.method,
30
+ body: req.body,
31
+ headers: base_headers,
32
+ query: req.query,
33
+ ref: req.ref
34
+ };
35
+ const { response: fake_response, headers, ...modified } = await this.config.onRequest?.(original_request) || {};
36
+ if (fake_response) {
37
+ this.config.onResponse && await this.config.onResponse(original_request, fake_response);
38
+ if (fake_response.error)
39
+ throw fake_response.error;
40
+ return fake_response.data;
41
+ }
42
+ const request = {
43
+ ref: req.ref,
44
+ url,
45
+ method: req.method,
46
+ ...req.body ? { body: typeof req.body === 'string' ? req.body : JSON.stringify(req.body) } : {},
47
+ ...modified,
48
+ headers: {
49
+ ...req.body && typeof req.body != 'string' ? { 'Content-Type': 'application/json' } : {},
50
+ ...base_headers,
51
+ ...headers
52
+ },
53
+ };
54
+ const response = fake_response ? fake_response : await (async () => {
55
+ try {
56
+ const result = await fetch(request.url, request);
57
+ return parseJson(await result.text()) || {};
58
+ }
59
+ catch (e) {
60
+ return {
61
+ error: {
62
+ code: e instanceof Error ? e.name : 'UnknownError',
63
+ message: e instanceof Error ? e.message : 'An unknown error occurred'
64
+ }
65
+ };
66
+ }
67
+ })();
68
+ this.config.onResponse && await this.config.onResponse(request, response);
69
+ if (response.error)
70
+ throw response.error;
71
+ return response.data;
72
+ }
73
+ query({ ref, filters }) {
74
+ const ready$ = from(this.socket ? (this.socket.pipe(filter(s => !!s.connected), map(() => Date.now()))) : of(1)).pipe(first());
75
+ const watch$ = (!this.socket || !filters || filters[':after'] || filters[':before'] || filters[':around']) ? EMPTY : this.socket.listen(ref);
76
+ const refs = ref.split('/');
77
+ const collection_ref = refs.length % 2 == 0 ? refs.slice(0, -1).join('/') : ref;
78
+ return merge(ready$.pipe(take(1), mergeMap(() => (from(this.#call({
79
+ ref,
80
+ method: 'GET',
81
+ query: filters
82
+ })).pipe(map(collection => {
83
+ collection.subscription_token && this.socket?.subscribeWith(collection.subscription_token);
84
+ // If collection
85
+ if (collection.items) {
86
+ const items = Array.isArray(collection.items) ? collection.items : [];
87
+ const length = items.length;
88
+ return {
89
+ summary: collection.summary,
90
+ paging: {
91
+ current: collection?.count?.current ?? length,
92
+ total: collection?.count?.total ?? length,
93
+ next: collection?.has?.next ? {
94
+ count: collection?.count?.next || 0,
95
+ cursor: collection?.cursor?.last
96
+ } : undefined,
97
+ prev: collection?.has?.prev ? {
98
+ count: collection?.count?.prev || 0,
99
+ cursor: collection?.cursor?.first
100
+ } : undefined
101
+ },
102
+ changes: items.map(data => ({
103
+ data,
104
+ type: 'added',
105
+ id: data.id,
106
+ collection_ref
107
+ })),
108
+ source: "query"
109
+ };
110
+ }
111
+ // If document
112
+ return {
113
+ summary: collection.summary,
114
+ changes: [{
115
+ data: collection.item,
116
+ type: 'added',
117
+ id: collection.item.id,
118
+ collection_ref
119
+ }],
120
+ source: "query"
121
+ };
122
+ }), catchError(e => {
123
+ const error = e instanceof Error ? { code: e.name, message: e.message } : { code: e.code || 'UnknownError', message: e.message || 'An unknown error occurred' };
124
+ return of({ error, source: "query" });
125
+ }))))), watch$.pipe(map((change) => {
126
+ const id = change.data?.id;
127
+ if (id) {
128
+ const e = {
129
+ changes: [
130
+ {
131
+ ...change,
132
+ collection_ref,
133
+ id
134
+ }
135
+ ],
136
+ source: "realtime"
137
+ };
138
+ return e;
139
+ }
140
+ }), filter(Boolean)));
141
+ }
142
+ async add(ref, data) {
143
+ const r = await this.#call({ method: 'POST', ref, body: data, query: {} });
144
+ if (r.id)
145
+ return r;
146
+ return r.item;
147
+ }
148
+ update(collection_ref, id, data) {
149
+ return this.#call({ method: 'PATCH', ref: collection_ref + '/' + id, body: data, query: {} });
150
+ }
151
+ delete(collection_ref, id) {
152
+ return this.#call({ method: 'DELETE', ref: collection_ref + '/' + id, body: undefined, query: {} });
153
+ }
154
+ trigger({ ref, action, payload }) {
155
+ return this.#call({ method: 'POST', ref, action, body: payload, query: {} });
156
+ }
157
+ }
158
+ //# sourceMappingURL=RestTransporter.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"RestTransporter.js","sourceRoot":"","sources":["../src/RestTransporter.ts"],"names":[],"mappings":"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"}
package/dist/Socket.js ADDED
@@ -0,0 +1,77 @@
1
+ import { fromEvent, Observable, Subject, BehaviorSubject, merge, ReplaySubject, Subscription, of, interval, EMPTY } from "rxjs";
2
+ import { catchError, finalize, ignoreElements, map, mergeMap, retry, switchMap, takeUntil, tap } from "rxjs/operators";
3
+ import { v7 as uuidv7 } from 'uuid';
4
+ export class Socket extends BehaviorSubject {
5
+ endpoint;
6
+ client_id = uuidv7();
7
+ $gateway = new ReplaySubject(1);
8
+ $connected = new BehaviorSubject(false);
9
+ #topics = new Map();
10
+ #$input = new ReplaySubject(1000);
11
+ #running;
12
+ constructor(endpoint) {
13
+ super({
14
+ client_id: uuidv7(),
15
+ connected: false,
16
+ session: 0
17
+ });
18
+ this.endpoint = endpoint;
19
+ this.#init();
20
+ }
21
+ #init() {
22
+ if (typeof WebSocket == 'undefined')
23
+ return;
24
+ if (this.#running)
25
+ return;
26
+ this.#running = of(1).pipe(takeUntil(this.pipe(ignoreElements())), mergeMap(async () => new WebSocket(this.endpoint)), switchMap(ws => merge(fromEvent(ws, 'closed').pipe(map(e => { throw e; })), fromEvent(ws, 'close').pipe(map(e => { throw e; })), fromEvent(ws, 'error').pipe(map(e => { throw e; })), fromEvent(ws, 'open').pipe(switchMap(() => interval(60000)), tap(() => ws.send(JSON.stringify({ event: 'ping' })))), fromEvent(ws, 'open').pipe(tap(() => {
27
+ this.next({
28
+ ...this.value,
29
+ connected: true,
30
+ session: this.value.session + 1
31
+ });
32
+ console.log(this.value.session == 1 ? 'Websocket connected' : `Websocket re-connected (${this.value.session})`);
33
+ ws.send(JSON.stringify({ event: 'start', data: { id: this.client_id } }));
34
+ }), mergeMap(() => this.#$input), tap(data => ws.send(JSON.stringify(data)))), fromEvent(ws, 'message').pipe(tap((evt) => {
35
+ const e = JSON.parse(evt.data);
36
+ const fn = this[`$${e.event}`];
37
+ typeof fn == 'function' && fn.call(this, e);
38
+ }))).pipe(finalize(() => ws.close()))), catchError(e => {
39
+ this.$connected.next(false);
40
+ throw e;
41
+ }), retry({ delay: 1000 })).subscribe();
42
+ }
43
+ stop() {
44
+ this.complete();
45
+ }
46
+ $sync(e) {
47
+ for (const change of e.data.changes) {
48
+ change.collection_ref = change.ref;
49
+ this.#topics.get(change.ref)?.stream.next(change);
50
+ }
51
+ }
52
+ $hello(e) {
53
+ this.$gateway.next(e.gid);
54
+ }
55
+ subscribeWith(realtime_token) {
56
+ this.#$input.next({ event: 'subscribe', data: { realtime_token } });
57
+ }
58
+ listen(ref) {
59
+ if (!this.#topics.has(ref)) {
60
+ const stream = new Subject();
61
+ this.#topics.set(ref, { stream, listen_count: 0 });
62
+ }
63
+ const topic = this.#topics.get(ref);
64
+ if (!topic)
65
+ return EMPTY;
66
+ topic.listen_count++;
67
+ return topic.stream.pipe(finalize(() => {
68
+ topic.listen_count--;
69
+ setTimeout(() => {
70
+ if (topic.listen_count == 0) {
71
+ this.#$input.next({ event: 'unsubscribe', data: { ref } });
72
+ }
73
+ }, 2000);
74
+ }));
75
+ }
76
+ }
77
+ //# sourceMappingURL=Socket.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"Socket.js","sourceRoot":"","sources":["../src/Socket.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,9 @@
1
+ export const parseJson = (str) => {
2
+ try {
3
+ return JSON.parse(str);
4
+ }
5
+ catch (e) {
6
+ return null;
7
+ }
8
+ };
9
+ //# sourceMappingURL=parseJson.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"parseJson.js","sourceRoot":"","sources":["../../src/helpers/parseJson.ts"],"names":[],"mappings":"AAIA,MAAM,CAAC,MAAM,SAAS,GAAG,CAAC,GAAW,EAAE,EAAE;IACrC,IAAI,CAAC;QACD,OAAO,IAAI,CAAC,KAAK,CAAC,GAAG,CAAC,CAAA;IAC1B,CAAC;IAAC,OAAO,CAAC,EAAE,CAAC;QACT,OAAO,IAAI,CAAA;IACf,CAAC;AACL,CAAC,CAAA"}