nodestack-client 1.0.0 → 1.2.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
package/README.md CHANGED
@@ -1,248 +1,286 @@
1
- # 🚀 nodestack-client
2
-
3
- > **The Official Lightweight, Type-Safe JavaScript & TypeScript Client SDK for [NodeStack](https://github.com/satya-jugran/nodebase)**
4
-
5
- [![TypeScript](https://img.shields.io/badge/TypeScript-5.x-blue.svg)](https://www.typescriptlang.org/)
6
- [![License: MIT](https://img.shields.io/badge/License-MIT-yellow.svg)](https://opensource.org/licenses/MIT)
7
-
8
- A zero-dependency, isomorphic JavaScript and TypeScript client for NodeStack with out-of-the-box support for:
9
- - ⚡ **Zero runtime dependencies**: Built purely on standard Web APIs (`fetch`, `FormData`, `AbortController`, `EventSource`).
10
- - ðŸŠķ **Ultra-lightweight footprint**: `< 10 KB` minified + gzipped.
11
- - 🔒 **Pluggable & Reactive Auth**: `LocalAuthStore` (localStorage), `MemoryAuthStore` (Node/SSR/testing), and reactive `onChange` state subscriptions.
12
- - ðŸ“Ķ **Fluent Record CRUD & Batch Pagination**: `getList`, `getFullList`, `getFirstListItem`, `create`, `update`, `delete`, `export`, and `import`.
13
- - 📁 **File Uploads & Protected File URLs**: Seamless `FormData` file uploads and URL generation with automatic token appending.
14
- - ðŸ“Ą **Multiplexed Realtime SSE**: Single persistent connection with auto-handshake (`NS_CONNECT`), dynamic subscription sync, and automatic reconnection.
15
- - ðŸŽŊ **100% Type Safety**: Works seamlessly with `nodestack typegen` and `GET /api/types.d.ts` for autocompleted collection names and typed record returns.
16
- - 🌐 **Isomorphic**: Modern Browsers, React / Next.js (SSR + Client), Vue, Svelte, Node.js (18+ / 22+), Bun, Deno, and React Native.
17
-
18
- ---
19
-
20
- ## ðŸ“Ķ Installation
21
-
22
- ```bash
23
- npm install nodestack-client
24
- ```
25
-
26
- Or using Yarn / PNPM / Bun:
27
- ```bash
28
- pnpm add nodestack-client
29
- # or
30
- bun add nodestack-client
31
- ```
32
-
33
- ---
34
-
35
- ## ⚡ Quick Start
36
-
37
- ```typescript
38
- import { NodeStackClient } from 'nodestack-client';
39
-
40
- // Initialize client
41
- const client = new NodeStackClient('http://127.0.0.1:8090');
42
-
43
- // Fetch paginated records
44
- const result = await client.collection('posts').getList(1, 20, {
45
- filter: "status = 'published' && views >= 10",
46
- sort: '-created',
47
- });
48
-
49
- console.log(`Found ${result.totalItems} posts:`, result.items);
50
- ```
51
-
52
- ---
53
-
54
- ## 🔐 Authentication
55
-
56
- ### Authenticate as an Auth Collection User (e.g. `users`)
57
- ```typescript
58
- const authData = await client.collection('users').authWithPassword('alice@example.com', 'password123');
59
-
60
- console.log('Logged in user:', client.authStore.model);
61
- console.log('JWT Token:', client.authStore.token);
62
- console.log('Is valid:', client.authStore.isValid);
63
- ```
64
-
65
- ### Authenticate as a Superuser / Admin
66
- ```typescript
67
- const adminAuth = await client.admins.authWithPassword('admin@nodestack.io', 'MySecretAdminPassword');
68
- console.log('Logged in superuser:', adminAuth.admin.email);
69
- ```
70
-
71
- ### Reactive Auth State Changes
72
- ```typescript
73
- // Subscribe to login / logout events (ideal for React, Vue, Svelte stores)
74
- const unbind = client.authStore.onChange((token, model) => {
75
- console.log('Auth state changed:', { token, model });
76
- });
77
-
78
- // Logout
79
- client.authStore.clear();
80
-
81
- // Unsubscribe listener
82
- unbind();
83
- ```
84
-
85
- ### SSR & Node.js Environments (`MemoryAuthStore`)
86
- In Node.js scripts or server-side rendering where `window.localStorage` is unavailable:
87
- ```typescript
88
- import { NodeStackClient, MemoryAuthStore } from 'nodestack-client';
89
-
90
- const serverClient = new NodeStackClient('http://127.0.0.1:8090', {
91
- authStore: new MemoryAuthStore(),
92
- });
93
- ```
94
-
95
- ---
96
-
97
- ## 📋 Record Operations (CRUD)
98
-
99
- ### 1. Fetch Paginated Records (`getList`)
100
- ```typescript
101
- const result = await client.collection('posts').getList(1, 10, {
102
- filter: "category = 'Tech' && price <= 50",
103
- sort: '-created,title',
104
- expand: 'author,comments',
105
- });
106
-
107
- console.log(result.page, result.totalPages, result.items);
108
- ```
109
-
110
- ### 2. Fetch All Records Across Pages (`getFullList`)
111
- Auto-paginates in batches and returns all matching records as a single array:
112
- ```typescript
113
- const allPosts = await client.collection('posts').getFullList({
114
- batch: 200,
115
- filter: "published = true",
116
- });
117
- ```
118
-
119
- ### 3. Find First Matching Record (`getFirstListItem`)
120
- ```typescript
121
- // Throws ClientResponseError(404) if no match is found
122
- const post = await client.collection('posts').getFirstListItem("slug = 'hello-world'");
123
- ```
124
-
125
- ### 4. Create Record (JSON or File Uploads)
126
- ```typescript
127
- // Plain JSON
128
- const newPost = await client.collection('posts').create({
129
- title: 'My First Post',
130
- published: true,
131
- });
132
-
133
- // Multipart Form Data (File Upload)
134
- const formData = new FormData();
135
- formData.append('title', 'Post with Cover Photo');
136
- formData.append('coverImage', fileInput.files[0]);
137
-
138
- const postWithImage = await client.collection('posts').create(formData);
139
- ```
140
-
141
- ### 5. Update & Delete Records
142
- ```typescript
143
- // Update
144
- const updated = await client.collection('posts').update('rec_123', {
145
- title: 'Updated Title',
146
- });
147
-
148
- // Delete
149
- await client.collection('posts').delete('rec_123');
150
- ```
151
-
152
- ---
153
-
154
- ## 📁 File URLs Helper
155
-
156
- NodeStack provides protected and public file serving at `/api/files/:collection/:recordId/:filename`. Construct fully-qualified URLs easily:
157
-
158
- ```typescript
159
- const record = await client.collection('posts').getOne('rec_123');
160
-
161
- // 1. Standard URL for <img> tags
162
- const imageUrl = client.files.getUrl(record, record.coverImage);
163
-
164
- // 2. Trigger browser download dialog
165
- const downloadUrl = client.files.getUrl(record, record.attachment, {
166
- download: true,
167
- });
168
-
169
- // 3. Attach authentication token for protected files
170
- const protectedUrl = client.files.getUrl(record, record.secretDoc, {
171
- token: true, // Uses active authStore token
172
- });
173
- ```
174
-
175
- ---
176
-
177
- ## ðŸ“Ą Realtime Subscriptions (SSE)
178
-
179
- NodeStack uses Server-Sent Events (SSE) with an initial `NS_CONNECT` handshake and multiplexed collection channels. `nodestack-client` manages this with automatic reconnection and topic synchronization:
180
-
181
- ```typescript
182
- // 1. Subscribe to all changes in a collection
183
- const unsubscribe = await client.collection('posts').subscribe('*', (event) => {
184
- console.log(`Action: ${event.action}`); // 'create' | 'update' | 'delete'
185
- console.log('Record:', event.record);
186
- });
187
-
188
- // 2. Subscribe to a specific record by ID
189
- const unbindRecord = await client.collection('posts').subscribe('rec_123', (event) => {
190
- console.log('Record updated:', event.record);
191
- });
192
-
193
- // 3. Clean up subscriptions when unmounting
194
- await unsubscribe();
195
- await unbindRecord();
196
- ```
197
-
198
- ---
199
-
200
- ## ðŸŽŊ End-to-End Type Safety
201
-
202
- Pair `nodestack-client` with `nodestack typegen`:
203
-
204
- ```bash
205
- # Generate TypeScript definitions from your running server
206
- npx nodestack typegen > src/types/nodestack.ts
207
- ```
208
-
209
- Then supply your `SchemaCollections` dictionary to `NodeStackClient`:
210
-
211
- ```typescript
212
- import { NodeStackClient } from 'nodestack-client';
213
- import { SchemaCollections } from './types/nodestack';
214
-
215
- const client = new NodeStackClient<SchemaCollections>('http://127.0.0.1:8090');
216
-
217
- // Autocomplete for collection names: 'posts' | 'users' | 'orders'
218
- // Return types are automatically inferred as PostRecord, UserRecord, etc.
219
- const posts = await client.collection('posts').getList();
220
- posts.items[0].title; // Fully typed!
221
- ```
222
-
223
- ---
224
-
225
- ## ðŸ›Ąïļ Error Handling
226
-
227
- When NodeStack returns an error (4xx or 5xx), a `ClientResponseError` is thrown:
228
-
229
- ```typescript
230
- import { ClientResponseError } from 'nodestack-client';
231
-
232
- try {
233
- await client.collection('posts').getOne('missing_id');
234
- } catch (err) {
235
- if (err instanceof ClientResponseError) {
236
- console.error('Status:', err.status); // e.g. 404
237
- console.error('Message:', err.message); // e.g. "Record not found"
238
- console.error('Data:', err.data); // Raw response JSON
239
- console.error('Is Aborted:', err.isAbort);
240
- }
241
- }
242
- ```
243
-
244
- ---
245
-
246
- ## 📄 License
247
-
248
- MIT ÂĐ NodeStack Contributors
1
+ # 🚀 nodestack-client
2
+
3
+ > **The Official Lightweight, Type-Safe JavaScript & TypeScript Client SDK for [NodeStack](https://github.com/satya-jugran/nodebase)**
4
+ >
5
+ > Published on npm: [`nodestack-client`](https://www.npmjs.com/package/nodestack-client)
6
+
7
+ [![npm version](https://img.shields.io/npm/v/nodestack-client.svg?color=blue)](https://www.npmjs.com/package/nodestack-client)
8
+ [![TypeScript](https://img.shields.io/badge/TypeScript-5.x-blue.svg)](https://www.typescriptlang.org/)
9
+ [![License: MIT](https://img.shields.io/badge/License-MIT-yellow.svg)](https://opensource.org/licenses/MIT)
10
+
11
+ A zero-dependency, isomorphic JavaScript and TypeScript client for NodeStack with out-of-the-box support for:
12
+ - ⚡ **Zero runtime dependencies**: Built purely on standard Web APIs (`fetch`, `FormData`, `AbortController`, `EventSource`).
13
+ - ðŸŠķ **Ultra-lightweight footprint**: `< 10 KB` minified + gzipped.
14
+ - 🔒 **Pluggable & Reactive Auth**: `LocalAuthStore` (localStorage), `MemoryAuthStore` (Node/SSR/testing), and reactive `onChange` state subscriptions.
15
+ - ðŸ“Ķ **Fluent Record CRUD & Batch Pagination**: `getList`, `getFullList`, `getFirstListItem`, `create`, `update`, `delete`, `export`, and `import`.
16
+ - 📁 **File Uploads & Protected File URLs**: Seamless `FormData` file uploads and URL generation with automatic token appending.
17
+ - ðŸ“Ą **Multiplexed Realtime SSE**: Single persistent connection with auto-handshake (`NS_CONNECT`), dynamic subscription sync, and automatic reconnection.
18
+ - ðŸŽŊ **100% Type Safety**: Works seamlessly with `nodestack typegen` and `GET /api/types.d.ts` for autocompleted collection names and typed record returns.
19
+ - 🌐 **Isomorphic**: Modern Browsers, React / Next.js (SSR + Client), Vue, Svelte, Node.js (18+ / 22+), Bun, Deno, and React Native.
20
+
21
+ ---
22
+
23
+ ## ðŸ“Ķ Installation
24
+
25
+ ```bash
26
+ npm install nodestack-client
27
+ ```
28
+
29
+ Or using Yarn / PNPM / Bun:
30
+ ```bash
31
+ pnpm add nodestack-client
32
+ # or
33
+ bun add nodestack-client
34
+ ```
35
+
36
+ ---
37
+
38
+ ## ⚡ Quick Start
39
+
40
+ ```typescript
41
+ import { NodeStackClient } from 'nodestack-client';
42
+
43
+ // Initialize client
44
+ const client = new NodeStackClient('http://127.0.0.1:8090');
45
+
46
+ // Fetch paginated records
47
+ const result = await client.collection('posts').getList(1, 20, {
48
+ filter: "status = 'published' && views >= 10",
49
+ sort: '-created',
50
+ });
51
+
52
+ console.log(`Found ${result.totalItems} posts:`, result.items);
53
+ ```
54
+
55
+ ---
56
+
57
+ ## 🔐 Authentication
58
+
59
+ ### Authenticate as an Auth Collection User (e.g. `users`)
60
+ ```typescript
61
+ const authData = await client.collection('users').authWithPassword('alice@example.com', 'password123');
62
+
63
+ console.log('Logged in user:', client.authStore.model);
64
+ console.log('JWT Token:', client.authStore.token);
65
+ console.log('Is valid:', client.authStore.isValid);
66
+ ```
67
+
68
+ ### Authenticate as a Superuser / Admin
69
+ ```typescript
70
+ const adminAuth = await client.admins.authWithPassword('admin@nodestack.io', 'MySecretAdminPassword');
71
+ console.log('Logged in superuser:', adminAuth.admin.email);
72
+ ```
73
+
74
+ ### Reactive Auth State Changes
75
+ ```typescript
76
+ // Subscribe to login / logout events (ideal for React, Vue, Svelte stores)
77
+ const unbind = client.authStore.onChange((token, model) => {
78
+ console.log('Auth state changed:', { token, model });
79
+ });
80
+
81
+ // Logout
82
+ client.authStore.clear();
83
+
84
+ // Unsubscribe listener
85
+ unbind();
86
+ ```
87
+
88
+ ### SSR & Node.js Environments (`MemoryAuthStore`)
89
+ In Node.js scripts or server-side rendering where `window.localStorage` is unavailable:
90
+ ```typescript
91
+ import { NodeStackClient, MemoryAuthStore } from 'nodestack-client';
92
+
93
+ const serverClient = new NodeStackClient('http://127.0.0.1:8090', {
94
+ authStore: new MemoryAuthStore(),
95
+ });
96
+ ```
97
+
98
+ ---
99
+
100
+ ## 📋 Record Operations (CRUD)
101
+
102
+ ### 1. Fetch Paginated Records (`getList`)
103
+ ```typescript
104
+ const result = await client.collection('posts').getList(1, 10, {
105
+ filter: "category = 'Tech' && price <= 50",
106
+ sort: '-created,title',
107
+ expand: 'author,comments',
108
+ });
109
+
110
+ console.log(result.page, result.totalPages, result.items);
111
+ ```
112
+
113
+ ### 2. Fetch All Records Across Pages (`getFullList`)
114
+ Auto-paginates in batches and returns all matching records as a single array:
115
+ ```typescript
116
+ const allPosts = await client.collection('posts').getFullList({
117
+ batch: 200,
118
+ filter: "published = true",
119
+ });
120
+ ```
121
+
122
+ ### 3. Find First Matching Record (`getFirstListItem`)
123
+ ```typescript
124
+ // Throws ClientResponseError(404) if no match is found
125
+ const post = await client.collection('posts').getFirstListItem("slug = 'hello-world'");
126
+ ```
127
+
128
+ ### 4. Create Record (JSON or File Uploads)
129
+ ```typescript
130
+ // Plain JSON
131
+ const newPost = await client.collection('posts').create({
132
+ title: 'My First Post',
133
+ published: true,
134
+ });
135
+
136
+ // Multipart Form Data (File Upload)
137
+ const formData = new FormData();
138
+ formData.append('title', 'Post with Cover Photo');
139
+ formData.append('coverImage', fileInput.files[0]);
140
+
141
+ const postWithImage = await client.collection('posts').create(formData);
142
+ ```
143
+
144
+ ### 5. Update & Delete Records
145
+ ```typescript
146
+ // Update
147
+ const updated = await client.collection('posts').update('rec_123', {
148
+ title: 'Updated Title',
149
+ });
150
+
151
+ // Delete
152
+ await client.collection('posts').delete('rec_123');
153
+ ```
154
+
155
+ ---
156
+
157
+ ## 📁 File URLs Helper
158
+
159
+ NodeStack provides protected and public file serving at `/api/files/:collection/:recordId/:filename`. Construct fully-qualified URLs easily:
160
+
161
+ ```typescript
162
+ const record = await client.collection('posts').getOne('rec_123');
163
+
164
+ // 1. Standard URL for <img> tags
165
+ const imageUrl = client.files.getUrl(record, record.coverImage);
166
+
167
+ // 2. Trigger browser download dialog
168
+ const downloadUrl = client.files.getUrl(record, record.attachment, {
169
+ download: true,
170
+ });
171
+
172
+ // 3. Attach authentication token for protected files
173
+ const protectedUrl = client.files.getUrl(record, record.secretDoc, {
174
+ token: true, // Uses active authStore token
175
+ });
176
+ ```
177
+
178
+ ---
179
+
180
+ ## ðŸ“Ą Realtime Subscriptions (SSE)
181
+
182
+ NodeStack uses Server-Sent Events (SSE) with an initial `NS_CONNECT` handshake and multiplexed collection channels. `nodestack-client` manages this with automatic reconnection and topic synchronization:
183
+
184
+ ```typescript
185
+ // 1. Subscribe to all changes in a collection
186
+ const unsubscribe = await client.collection('posts').subscribe('*', (event) => {
187
+ console.log(`Action: ${event.action}`); // 'create' | 'update' | 'delete'
188
+ console.log('Record:', event.record);
189
+ });
190
+
191
+ // 2. Subscribe to a specific record by ID
192
+ const unbindRecord = await client.collection('posts').subscribe('rec_123', (event) => {
193
+ console.log('Record updated:', event.record);
194
+ });
195
+
196
+ // 3. Clean up subscriptions when unmounting
197
+ await unsubscribe();
198
+ await unbindRecord();
199
+ ```
200
+
201
+ ---
202
+
203
+ ## ðŸŽŊ End-to-End Type Safety
204
+
205
+ Pair `nodestack-client` with `nodestack typegen`:
206
+
207
+ ```bash
208
+ # Generate TypeScript definitions from your running server
209
+ npx nodestack typegen > src/types/nodestack.ts
210
+ ```
211
+
212
+ Then supply your `SchemaCollections` dictionary to `NodeStackClient`:
213
+
214
+ ```typescript
215
+ import { NodeStackClient } from 'nodestack-client';
216
+ import { SchemaCollections } from './types/nodestack';
217
+
218
+ const client = new NodeStackClient<SchemaCollections>('http://127.0.0.1:8090');
219
+
220
+ // Autocomplete for collection names: 'posts' | 'users' | 'orders'
221
+ // Return types are automatically inferred as PostRecord, UserRecord, etc.
222
+ const posts = await client.collection('posts').getList();
223
+ posts.items[0].title; // Fully typed!
224
+ ```
225
+
226
+ ---
227
+
228
+ ## ðŸ›Ąïļ Error Handling
229
+
230
+ When NodeStack returns an error (4xx or 5xx), a `ClientResponseError` is thrown:
231
+
232
+ ```typescript
233
+ import { ClientResponseError } from 'nodestack-client';
234
+
235
+ try {
236
+ await client.collection('posts').getOne('missing_id');
237
+ } catch (err) {
238
+ if (err instanceof ClientResponseError) {
239
+ console.error('Status:', err.status); // e.g. 404
240
+ console.error('Message:', err.message); // e.g. "Record not found"
241
+ console.error('Data:', err.data); // Raw response JSON
242
+ console.error('Is Aborted:', err.isAbort);
243
+ }
244
+ }
245
+ ```
246
+
247
+ ---
248
+
249
+ ## ⚡ Latency & Chaos Simulation (For Testing Frontend States)
250
+
251
+ Test your frontend loading spinners, skeleton states, error toasts, and retry mechanisms against simulated network conditions:
252
+
253
+ ```typescript
254
+ // 1. Query-level simulation
255
+ const posts = await client.collection('posts').getList({
256
+ mock_delay: 1500, // 1.5s mobile 3G delay to test loading skeletons
257
+ });
258
+
259
+ // 2. Simulate network drops & HTTP errors
260
+ try {
261
+ await client.collection('posts').getList({
262
+ mock_error: 500, // Or ?mock_fail_rate=0.2 for random 20% drops
263
+ });
264
+ } catch (err) {
265
+ if (err instanceof ClientResponseError) {
266
+ showToast(`Server error (${err.status}): ${err.message}`);
267
+ }
268
+ }
269
+
270
+ // 3. App-wide chaos simulation toggle (useful during frontend development)
271
+ client.setChaos({
272
+ delay: 1000, // 1000ms delay on all requests
273
+ failRate: 0.15, // 15% random network drop rate
274
+ errorStatus: 503 // Return 503 on failure
275
+ });
276
+
277
+ // Disable chaos
278
+ client.setChaos(null);
279
+ ```
280
+
281
+ ---
282
+
283
+ ## 📄 License
284
+
285
+ MIT ÂĐ NodeStack Contributors
286
+
package/dist/Client.d.ts CHANGED
@@ -4,7 +4,8 @@ import { FileService } from './services/FileService';
4
4
  import { RealtimeService } from './services/RealtimeService';
5
5
  import { AdminService } from './services/AdminService';
6
6
  import { CollectionService } from './services/CollectionService';
7
- import type { ClientOptions, SendOptions, RecordModel } from './types';
7
+ import { DemoService } from './services/DemoService';
8
+ import type { ClientOptions, SendOptions, RecordModel, ChaosOptions } from './types';
8
9
  /**
9
10
  * Main NodeStack Client SDK entry point.
10
11
  */
@@ -15,11 +16,22 @@ export declare class NodeStackClient<TCollections extends Record<string, any> =
15
16
  readonly realtime: RealtimeService;
16
17
  readonly admins: AdminService;
17
18
  readonly collections: CollectionService;
19
+ readonly demo: DemoService;
18
20
  private customFetch?;
19
21
  private defaultHeaders;
20
22
  private defaultTimeout;
23
+ private chaosOptions;
21
24
  private recordServices;
22
25
  constructor(baseUrl?: string, options?: ClientOptions);
26
+ /**
27
+ * Dynamically configure latency & chaos simulation options for all future requests.
28
+ * Pass null to disable client-side chaos injection.
29
+ */
30
+ setChaos(options: ChaosOptions | null): void;
31
+ /**
32
+ * Get active chaos simulation options.
33
+ */
34
+ getChaos(): ChaosOptions | null;
23
35
  /**
24
36
  * Returns a RecordService for interacting with a specific collection.
25
37
  * If a schema map type is provided to NodeStackClient, collection names
@@ -1 +1 @@
1
- {"version":3,"file":"Client.d.ts","sourceRoot":"","sources":["../src/Client.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,aAAa,EAAE,MAAM,sBAAsB,CAAC;AAGrD,OAAO,EAAE,aAAa,EAAE,MAAM,0BAA0B,CAAC;AACzD,OAAO,EAAE,WAAW,EAAE,MAAM,wBAAwB,CAAC;AACrD,OAAO,EAAE,eAAe,EAAE,MAAM,4BAA4B,CAAC;AAC7D,OAAO,EAAE,YAAY,EAAE,MAAM,yBAAyB,CAAC;AACvD,OAAO,EAAE,iBAAiB,EAAE,MAAM,8BAA8B,CAAC;AACjE,OAAO,KAAK,EACV,aAAa,EACb,WAAW,EACX,WAAW,EACZ,MAAM,SAAS,CAAC;AAEjB;;GAEG;AACH,qBAAa,eAAe,CAAC,YAAY,SAAS,MAAM,CAAC,MAAM,EAAE,GAAG,CAAC,GAAG,MAAM,CAAC,MAAM,EAAE,WAAW,CAAC;IACjG,SAAgB,OAAO,EAAE,MAAM,CAAC;IAChC,SAAgB,SAAS,EAAE,aAAa,CAAC;IACzC,SAAgB,KAAK,EAAE,WAAW,CAAC;IACnC,SAAgB,QAAQ,EAAE,eAAe,CAAC;IAC1C,SAAgB,MAAM,EAAE,YAAY,CAAC;IACrC,SAAgB,WAAW,EAAE,iBAAiB,CAAC;IAE/C,OAAO,CAAC,WAAW,CAAC,CAAe;IACnC,OAAO,CAAC,cAAc,CAAyB;IAC/C,OAAO,CAAC,cAAc,CAAS;IAC/B,OAAO,CAAC,cAAc,CAA8C;gBAExD,OAAO,GAAE,MAAY,EAAE,OAAO,GAAE,aAAkB;IAa9D;;;;OAIG;IACI,UAAU,CAAC,CAAC,SAAS,MAAM,YAAY,EAAE,IAAI,EAAE,CAAC,GAAG,aAAa,CAAC,YAAY,CAAC,CAAC,CAAC,CAAC;IACjF,UAAU,CAAC,CAAC,GAAG,WAAW,EAAE,IAAI,EAAE,MAAM,GAAG,aAAa,CAAC,CAAC,CAAC;IAWlE;;;OAGG;IACU,IAAI,CAAC,CAAC,GAAG,GAAG,EAAE,IAAI,EAAE,MAAM,EAAE,OAAO,GAAE,WAAgB,GAAG,OAAO,CAAC,CAAC,CAAC;IA4H/E;;OAEG;IACU,MAAM,IAAI,OAAO,CAAC;QAAE,MAAM,EAAE,MAAM,CAAC;QAAC,CAAC,GAAG,EAAE,MAAM,GAAG,GAAG,CAAA;KAAE,CAAC;IAItE;;OAEG;IACU,QAAQ,IAAI,OAAO,CAAC,GAAG,CAAC;IAIrC;;OAEG;IACU,IAAI,CAAC,IAAI,SAAI,EAAE,OAAO,SAAK,GAAG,OAAO,CAAC,GAAG,CAAC;IAOvD;;OAEG;IACU,OAAO,IAAI,OAAO,CAAC,GAAG,CAAC;CAGrC"}
1
+ {"version":3,"file":"Client.d.ts","sourceRoot":"","sources":["../src/Client.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,aAAa,EAAE,MAAM,sBAAsB,CAAC;AAGrD,OAAO,EAAE,aAAa,EAAE,MAAM,0BAA0B,CAAC;AACzD,OAAO,EAAE,WAAW,EAAE,MAAM,wBAAwB,CAAC;AACrD,OAAO,EAAE,eAAe,EAAE,MAAM,4BAA4B,CAAC;AAC7D,OAAO,EAAE,YAAY,EAAE,MAAM,yBAAyB,CAAC;AACvD,OAAO,EAAE,iBAAiB,EAAE,MAAM,8BAA8B,CAAC;AACjE,OAAO,EAAE,WAAW,EAAE,MAAM,wBAAwB,CAAC;AACrD,OAAO,KAAK,EACV,aAAa,EACb,WAAW,EACX,WAAW,EACX,YAAY,EACb,MAAM,SAAS,CAAC;AAEjB;;GAEG;AACH,qBAAa,eAAe,CAAC,YAAY,SAAS,MAAM,CAAC,MAAM,EAAE,GAAG,CAAC,GAAG,MAAM,CAAC,MAAM,EAAE,WAAW,CAAC;IACjG,SAAgB,OAAO,EAAE,MAAM,CAAC;IAChC,SAAgB,SAAS,EAAE,aAAa,CAAC;IACzC,SAAgB,KAAK,EAAE,WAAW,CAAC;IACnC,SAAgB,QAAQ,EAAE,eAAe,CAAC;IAC1C,SAAgB,MAAM,EAAE,YAAY,CAAC;IACrC,SAAgB,WAAW,EAAE,iBAAiB,CAAC;IAC/C,SAAgB,IAAI,EAAE,WAAW,CAAC;IAElC,OAAO,CAAC,WAAW,CAAC,CAAe;IACnC,OAAO,CAAC,cAAc,CAAyB;IAC/C,OAAO,CAAC,cAAc,CAAS;IAC/B,OAAO,CAAC,YAAY,CAA6B;IACjD,OAAO,CAAC,cAAc,CAA8C;gBAExD,OAAO,GAAE,MAAY,EAAE,OAAO,GAAE,aAAkB;IAe9D;;;OAGG;IACI,QAAQ,CAAC,OAAO,EAAE,YAAY,GAAG,IAAI,GAAG,IAAI;IAInD;;OAEG;IACI,QAAQ,IAAI,YAAY,GAAG,IAAI;IAItC;;;;OAIG;IACI,UAAU,CAAC,CAAC,SAAS,MAAM,YAAY,EAAE,IAAI,EAAE,CAAC,GAAG,aAAa,CAAC,YAAY,CAAC,CAAC,CAAC,CAAC;IACjF,UAAU,CAAC,CAAC,GAAG,WAAW,EAAE,IAAI,EAAE,MAAM,GAAG,aAAa,CAAC,CAAC,CAAC;IAWlE;;;OAGG;IACU,IAAI,CAAC,CAAC,GAAG,GAAG,EAAE,IAAI,EAAE,MAAM,EAAE,OAAO,GAAE,WAAgB,GAAG,OAAO,CAAC,CAAC,CAAC;IAsJ/E;;OAEG;IACU,MAAM,IAAI,OAAO,CAAC;QAAE,MAAM,EAAE,MAAM,CAAC;QAAC,CAAC,GAAG,EAAE,MAAM,GAAG,GAAG,CAAA;KAAE,CAAC;IAItE;;OAEG;IACU,QAAQ,IAAI,OAAO,CAAC,GAAG,CAAC;IAIrC;;OAEG;IACU,IAAI,CAAC,IAAI,SAAI,EAAE,OAAO,SAAK,GAAG,OAAO,CAAC,GAAG,CAAC;IAOvD;;OAEG;IACU,OAAO,IAAI,OAAO,CAAC,GAAG,CAAC;CAGrC"}