lowlander 0.4.0 → 0.6.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.
Files changed (71) hide show
  1. package/README.md +108 -78
  2. package/build/client/client.d.ts +8 -1
  3. package/build/client/client.js +44 -22
  4. package/build/client/client.js.map +1 -1
  5. package/build/dashboard/client/crud.d.ts +16 -0
  6. package/build/dashboard/client/crud.js +525 -0
  7. package/build/dashboard/client/crud.js.map +1 -0
  8. package/build/dashboard/client/main.d.ts +1 -0
  9. package/build/dashboard/client/main.js +615 -0
  10. package/build/dashboard/client/main.js.map +1 -0
  11. package/build/dashboard/client/shim-server.d.ts +3 -0
  12. package/build/dashboard/client/shim-server.js +2 -0
  13. package/build/dashboard/client/shim-server.js.map +1 -0
  14. package/build/dashboard/dashboard.html +20 -0
  15. package/build/dashboard/index.d.ts +18 -0
  16. package/build/dashboard/index.d.ts.map +1 -0
  17. package/build/dashboard/index.js +50 -0
  18. package/build/dashboard/index.js.map +1 -0
  19. package/build/dashboard/serve.d.ts +18 -0
  20. package/build/dashboard/serve.d.ts.map +1 -0
  21. package/build/dashboard/serve.js +53 -0
  22. package/build/dashboard/serve.js.map +1 -0
  23. package/build/dashboard/server.d.ts +93 -0
  24. package/build/dashboard/server.d.ts.map +1 -0
  25. package/build/dashboard/server.js +384 -0
  26. package/build/dashboard/server.js.map +1 -0
  27. package/build/examples/helloworld/.edinburgh/commit_worker.log +4927 -0
  28. package/build/examples/helloworld/.edinburgh/data.mdb +0 -0
  29. package/build/examples/helloworld/.edinburgh/lock.mdb +0 -0
  30. package/build/examples/helloworld/client/assets/style.css +0 -45
  31. package/build/examples/helloworld/client/index.html +3 -14
  32. package/build/examples/helloworld/client/js/base.css +1 -0
  33. package/build/examples/helloworld/client/js/base.d.ts +1 -4
  34. package/build/examples/helloworld/client/js/base.js +8 -71
  35. package/build/examples/helloworld/client/js/base.js.map +1 -1
  36. package/build/examples/helloworld/server/api.d.ts +8 -2
  37. package/build/examples/helloworld/server/api.d.ts.map +1 -1
  38. package/build/examples/helloworld/server/api.js +29 -8
  39. package/build/examples/helloworld/server/api.js.map +1 -1
  40. package/build/examples/helloworld/server/main.d.ts +1 -1
  41. package/build/examples/helloworld/server/main.d.ts.map +1 -1
  42. package/build/examples/helloworld/server/main.js +6 -17
  43. package/build/examples/helloworld/server/main.js.map +1 -1
  44. package/build/server/password.d.ts +10 -0
  45. package/build/server/password.d.ts.map +1 -0
  46. package/build/server/password.js +38 -0
  47. package/build/server/password.js.map +1 -0
  48. package/build/server/server.d.ts +5 -3
  49. package/build/server/server.d.ts.map +1 -1
  50. package/build/server/server.js +65 -7
  51. package/build/server/server.js.map +1 -1
  52. package/build/server/wshandler.d.ts +7 -1
  53. package/build/server/wshandler.d.ts.map +1 -1
  54. package/build/server/wshandler.js +54 -14
  55. package/build/server/wshandler.js.map +1 -1
  56. package/build/tsconfig.client.tsbuildinfo +1 -1
  57. package/build/tsconfig.server.tsbuildinfo +1 -1
  58. package/client/client.ts +47 -24
  59. package/dashboard/build-bundle.ts +44 -0
  60. package/dashboard/client/crud.ts +634 -0
  61. package/dashboard/client/index.html +12 -0
  62. package/dashboard/client/main.ts +554 -0
  63. package/dashboard/client/shim-server.ts +5 -0
  64. package/dashboard/index.ts +49 -0
  65. package/dashboard/server.ts +399 -0
  66. package/package.json +26 -11
  67. package/server/server.ts +61 -10
  68. package/server/wshandler.ts +57 -13
  69. package/skill/SKILL.md +82 -51
  70. package/skill/getStreamTypesForModel.md +7 -0
  71. package/skill/Connection_pruneCommitIds.md +0 -8
package/README.md CHANGED
@@ -20,17 +20,29 @@ This library is built on top of a number of libraries by the same author:
20
20
 
21
21
  Lowlander glues these together and adds real-time partial data synchronization and type-safe RPCs to provide a framework for rapidly building performant full-stack (database included!) web applications.
22
22
 
23
+ ## Example project
24
+
25
+ An example project is included in `examples/helloworld`. To run it:
26
+
27
+ ```bash
28
+ npm run example
29
+ ```
30
+
31
+ Opens at http://localhost:8080 with the Aberdeen dashboard at http://localhost:8080/_dashboard (password printed to console on start).
32
+
33
+ This is what the example dashboard looks like:
34
+
35
+ ![dashboard screenshot](dashboard_screenshot.png)
36
+
23
37
  ## Tutorial
24
38
 
25
39
  ### Project Setup
26
40
 
27
41
  ```bash
28
- bun init
29
- bun add lowlander aberdeen edinburgh
42
+ npm init
43
+ npm add lowlander aberdeen edinburgh
30
44
  ```
31
45
 
32
- (npm should also work for all of this.)
33
-
34
46
  Create the project structure:
35
47
 
36
48
  ```
@@ -145,6 +157,24 @@ const PersonStream = createStreamType(Person, fields, { cache: 30 }); // cache f
145
157
 
146
158
  After a stream with caching goes out of scope, the server keeps it alive for that many seconds, so that if the same stream is requested again with the same parameters, it can be reused instantly without re-sending initial data or re-subscribing to updates. Cached stream rpcs also deduplicate within that time window, so if the same stream is requested multiple times while it's still active or cached, only one stream is created on the server and shared among all requests.
147
159
 
160
+ #### Virtual (computed) fields
161
+
162
+ Plain getter properties on the model can be selected like any other field. Lowlander detects them and re-evaluates on each commit; an update is pushed only when the getter's return value actually changes:
163
+
164
+ ```ts
165
+ const Person = E.defineModel('Person', class {
166
+ name = E.field(E.string);
167
+ age = E.field(E.number);
168
+ get greeting() { return `Hi, I'm ${this.name} and I'm ${this.age}!`; }
169
+ }, { pk: 'name' });
170
+
171
+ const PersonStream = createStreamType(Person, {
172
+ greeting: true,
173
+ });
174
+ ```
175
+
176
+ On every model update, `greeting` will be invoked for both the old and new data, to check for changes. So avoid doing expensive operations in these getters.
177
+
148
178
  ### ServerProxy for Stateful APIs
149
179
 
150
180
  Wrap a class instance to expose per-connection stateful methods:
@@ -334,11 +364,57 @@ Set the `LOWLANDER_LOG_LEVEL` environment variable to a number from 0 to 3:
334
364
 
335
365
  Set `EDINBURGH_LOG_LEVEL` similarly for Edinburgh internals.
336
366
 
367
+ ### Dashboard
368
+
369
+ Lowlander ships with an optional admin/developer dashboard for inspecting
370
+ Edinburgh models, browsing index rows, listing RPC methods, viewing source
371
+ code, and peeking at warpsocket debug state (channels, sockets, workers,
372
+ KV). It's a single self-contained HTML bundle.
373
+
374
+ To enable it:
375
+
376
+ 1. Re-export `_dashboard` from your top-level API module:
377
+
378
+ ```ts
379
+ // server/api.ts
380
+ export { _dashboard } from "lowlander/dashboard";
381
+ ```
382
+
383
+ 2. Serve the bundled HTML by calling `serveDashboard(res)` from a
384
+ `warpsocket` `handleHttpRequest` export:
385
+
386
+ ```ts
387
+ import type { HttpRequest, HttpResponse } from "warpsocket";
388
+ import { serveDashboard } from "lowlander/dashboard";
389
+
390
+ export function handleHttpRequest(req: HttpRequest, res: HttpResponse) {
391
+ if (req.url === '/_dashboard' || req.url.startsWith('/_dashboard?')) {
392
+ return serveDashboard(res);
393
+ }
394
+ // … serve your own static files …
395
+ }
396
+ ```
397
+
398
+ 3. On first server start (per warpsocket KV namespace), a random password
399
+ is generated and printed to the console. Override with the
400
+ `LOWLANDER_DASHBOARD_PASSWORD` env var.
401
+
402
+ The dashboard prompts for the websocket URL (defaults to the current host)
403
+ and password on first load, then stores them in localStorage.
404
+
337
405
  ## Server API Reference
338
406
 
339
407
  The following is auto-generated from `server/server.ts`:
340
408
 
341
- ### createStreamType · [function](https://github.com/vanviegen/lowlander/blob/main/server/server.ts#L181)
409
+ ### getStreamTypesForModel · [function](https://github.com/vanviegen/lowlander/blob/main/server/server.ts#L30)
410
+
411
+ **Signature:** `(Model: AnyModelClass) => readonly (typeof StreamTypeBase<unknown>)[]`
412
+
413
+ **Parameters:**
414
+
415
+ - `Model: E.AnyModelClass`
416
+
417
+ ### createStreamType · [function](https://github.com/vanviegen/lowlander/blob/main/server/server.ts#L193)
342
418
 
343
419
  Creates a stream type for reactive model streaming to clients with automatic updates.
344
420
 
@@ -383,7 +459,7 @@ export function streamPerson() {
383
459
  }
384
460
  ```
385
461
 
386
- ### sendModel · [function](https://github.com/vanviegen/lowlander/blob/main/server/server.ts#L282)
462
+ ### sendModel · [function](https://github.com/vanviegen/lowlander/blob/main/server/server.ts#L312)
387
463
 
388
464
  Sends (updated) data for `model` to `target`.
389
465
  `target` is a virtual socket with a requestId+'d' user prefix, or a channel that subscribes such virtual sockets.
@@ -398,7 +474,7 @@ Sends (updated) data for `model` to `target`.
398
474
  - `StreamType: typeof StreamTypeBase<any>`
399
475
  - `changed?: E.Change`
400
476
 
401
- ### pushModel · [function](https://github.com/vanviegen/lowlander/blob/main/server/server.ts#L338)
477
+ ### pushModel · [function](https://github.com/vanviegen/lowlander/blob/main/server/server.ts#L382)
402
478
 
403
479
  Subscribes `target` to this model, and sends initial data.
404
480
  `target` is a virtual socket with a requestId+'d' user prefix, or a channel that subscribes such virtual sockets.
@@ -413,7 +489,7 @@ Subscribes `target` to this model, and sends initial data.
413
489
  - `SubStreamType: typeof StreamTypeBase<any>`
414
490
  - `delta: number`
415
491
 
416
- ### start · [function](https://github.com/vanviegen/lowlander/blob/main/server/server.ts#L453)
492
+ ### start · [function](https://github.com/vanviegen/lowlander/blob/main/server/server.ts#L498)
417
493
 
418
494
  Starts the Lowlander WebSocket server.
419
495
 
@@ -435,39 +511,39 @@ const API_FILE = resolve(dirname(fileURLToPath(import.meta.url)), 'api.js');
435
511
  start(API_FILE, { bind: '0.0.0.0:8080' });
436
512
  ```
437
513
 
438
- ### logLevel · [constant](https://github.com/vanviegen/lowlander/blob/main/server/server.ts#L10)
514
+ ### logLevel · [constant](https://github.com/vanviegen/lowlander/blob/main/server/server.ts#L13)
439
515
 
440
516
  **Value:** `number`
441
517
 
442
- ### warpsocket · [class](https://github.com/vanviegen/lowlander/blob/main/server/server.ts#L13)
518
+ ### warpsocket · [class](https://github.com/vanviegen/lowlander/blob/main/server/server.ts#L16)
443
519
 
444
520
  **Type:** `typeof import("/var/home/frank/projects/warpsocket/dist/src/index", { with: { "resolution-mode": "import" } })`
445
521
 
446
- ### StreamTypeBase · [abstract class](https://github.com/vanviegen/lowlander/blob/main/server/server.ts#L31)
522
+ ### StreamTypeBase · [abstract class](https://github.com/vanviegen/lowlander/blob/main/server/server.ts#L39)
447
523
 
448
- [object Object],[object Object],[object Object]
524
+ Base class for stream types created by .
449
525
 
450
526
  **Type Parameters:**
451
527
 
452
528
  - `T`
453
529
 
454
- #### StreamTypeBase.fields · [static property](https://github.com/vanviegen/lowlander/blob/main/server/server.ts#L33)
530
+ #### StreamTypeBase.fields · [static property](https://github.com/vanviegen/lowlander/blob/main/server/server.ts#L41)
455
531
 
456
- **Type:** `{ [key: string]: number | true; }`
532
+ **Type:** `{ [key: string]: number | boolean; }`
457
533
 
458
- #### StreamTypeBase.id · [static property](https://github.com/vanviegen/lowlander/blob/main/server/server.ts#L35)
534
+ #### StreamTypeBase.id · [static property](https://github.com/vanviegen/lowlander/blob/main/server/server.ts#L43)
459
535
 
460
536
  **Type:** `number`
461
537
 
462
- #### StreamTypeBase.cache · [static property](https://github.com/vanviegen/lowlander/blob/main/server/server.ts#L37)
538
+ #### StreamTypeBase.cache · [static property](https://github.com/vanviegen/lowlander/blob/main/server/server.ts#L45)
463
539
 
464
540
  **Type:** `number`
465
541
 
466
- #### streamTypeBase.toString · [method](https://github.com/vanviegen/lowlander/blob/main/server/server.ts#L40)
542
+ #### streamTypeBase.toString · [method](https://github.com/vanviegen/lowlander/blob/main/server/server.ts#L48)
467
543
 
468
544
  **Signature:** `() => string`
469
545
 
470
- ### ServerProxy · [class](https://github.com/vanviegen/lowlander/blob/main/server/server.ts#L374)
546
+ ### ServerProxy · [class](https://github.com/vanviegen/lowlander/blob/main/server/server.ts#L418)
471
547
 
472
548
  Wraps a server-side API object to create a stateful, type-safe proxy accessible from clients.
473
549
  Use for authentication, sessions, or any stateful context that persists across RPC calls.
@@ -503,11 +579,11 @@ export async function authenticate(token: string) {
503
579
  - `api`: - Server-side API object exposed to the client
504
580
  - `value`: - Value returned immediately to the client
505
581
 
506
- #### serverProxy.toString · [method](https://github.com/vanviegen/lowlander/blob/main/server/server.ts#L380)
582
+ #### serverProxy.toString · [method](https://github.com/vanviegen/lowlander/blob/main/server/server.ts#L424)
507
583
 
508
584
  **Signature:** `() => string`
509
585
 
510
- ### Socket · [class](https://github.com/vanviegen/lowlander/blob/main/server/server.ts#L404)
586
+ ### Socket · [class](https://github.com/vanviegen/lowlander/blob/main/server/server.ts#L448)
511
587
 
512
588
  Server-side socket for pushing data to a client. Server functions with `Socket<T>` parameters
513
589
  receive client callbacks on the client side.
@@ -530,7 +606,7 @@ export function streamNumbers(socket: Socket<number>) {
530
606
  api.streamNumbers(num => console.log(num));
531
607
  ```
532
608
 
533
- #### socket.send · [method](https://github.com/vanviegen/lowlander/blob/main/server/server.ts#L413)
609
+ #### socket.send · [method](https://github.com/vanviegen/lowlander/blob/main/server/server.ts#L457)
534
610
 
535
611
  Sends data to the client.
536
612
 
@@ -542,7 +618,7 @@ Sends data to the client.
542
618
 
543
619
  **Returns:** `true` if sent, `false` if socket is closed
544
620
 
545
- #### socket.subscribe · [method](https://github.com/vanviegen/lowlander/blob/main/server/server.ts#L419)
621
+ #### socket.subscribe · [method](https://github.com/vanviegen/lowlander/blob/main/server/server.ts#L463)
546
622
 
547
623
  **Signature:** `(channel: Uint8Array<ArrayBufferLike>, delta?: number) => void`
548
624
 
@@ -551,11 +627,11 @@ Sends data to the client.
551
627
  - `channel: Uint8Array`
552
628
  - `delta: any` (optional)
553
629
 
554
- #### socket.toString · [method](https://github.com/vanviegen/lowlander/blob/main/server/server.ts#L426)
630
+ #### socket.toString · [method](https://github.com/vanviegen/lowlander/blob/main/server/server.ts#L470)
555
631
 
556
632
  **Signature:** `() => string`
557
633
 
558
- #### socket.[Symbol.for('nodejs.util.inspect.custom')] · [method](https://github.com/vanviegen/lowlander/blob/main/server/server.ts#L430)
634
+ #### socket.[Symbol.for('nodejs.util.inspect.custom')] · [method](https://github.com/vanviegen/lowlander/blob/main/server/server.ts#L475)
559
635
 
560
636
  **Signature:** `() => string`
561
637
 
@@ -617,31 +693,11 @@ $(() => {
617
693
 
618
694
  - `url`: - WebSocket URL (e.g., 'ws://localhost:8080/'), or a fake WebSocket object for testing
619
695
 
620
- #### connection.ws · [property](https://github.com/vanviegen/lowlander/blob/main/client/client.ts#L197)
621
-
622
- **Type:** `WebSocket`
623
-
624
- #### connection.activeRequests · [property](https://github.com/vanviegen/lowlander/blob/main/client/client.ts#L198)
625
-
626
- **Type:** `Map<number, ActiveRequest>`
627
-
628
- #### connection.requestCounter · [property](https://github.com/vanviegen/lowlander/blob/main/client/client.ts#L199)
629
-
630
- **Type:** `number`
631
-
632
- #### connection.reconnectAttempts · [property](https://github.com/vanviegen/lowlander/blob/main/client/client.ts#L200)
633
-
634
- **Type:** `number`
696
+ #### connection.[A.OPAQUE] · [getter](https://github.com/vanviegen/lowlander/blob/main/client/client.ts#L207)
635
697
 
636
- #### connection.onlineProxy · [property](https://github.com/vanviegen/lowlander/blob/main/client/client.ts#L203)
698
+ **Type:** `true`
637
699
 
638
- **Type:** `ValueRef<boolean>`
639
-
640
- #### connection.streamCache · [property](https://github.com/vanviegen/lowlander/blob/main/client/client.ts#L204)
641
-
642
- **Type:** `Map<string, StreamCacheEntry>`
643
-
644
- #### connection.api · [property](https://github.com/vanviegen/lowlander/blob/main/client/client.ts#L211)
700
+ #### connection.api · [property](https://github.com/vanviegen/lowlander/blob/main/client/client.ts#L214)
645
701
 
646
702
  Type-safe proxy to the server-side API. Methods return `PromiseProxy` objects
647
703
  that work reactively in Aberdeen scopes. `ServerProxy` returns include a
@@ -649,42 +705,16 @@ that work reactively in Aberdeen scopes. `ServerProxy` returns include a
649
705
 
650
706
  **Type:** `ClientProxyObject<T>`
651
707
 
652
- #### connection.isOnline · [method](https://github.com/vanviegen/lowlander/blob/main/client/client.ts#L224)
708
+ #### connection.isOnline · [method](https://github.com/vanviegen/lowlander/blob/main/client/client.ts#L227)
653
709
 
654
710
  Returns the current connection status. Reactive in Aberdeen scopes.
655
711
 
656
712
  **Signature:** `() => boolean`
657
713
 
658
- #### connection.connect · [method](https://github.com/vanviegen/lowlander/blob/main/client/client.ts#L226)
659
-
660
- **Signature:** `() => void`
714
+ #### connection.getError · [method](https://github.com/vanviegen/lowlander/blob/main/client/client.ts#L233)
661
715
 
662
- #### connection.reconnect · [method](https://github.com/vanviegen/lowlander/blob/main/client/client.ts#L392)
716
+ Returns the last WebSocket error message, or `undefined` if there is none.
717
+ Clears automatically when the connection comes online. Reactive in Aberdeen scopes.
663
718
 
664
- **Signature:** `() => void`
665
-
666
- #### connection.pruneCommitIds · [method](https://github.com/vanviegen/lowlander/blob/main/client/client.ts#L406)
667
-
668
- **Signature:** `(request: ActiveRequest, maxCommitId: number) => void`
669
-
670
- **Parameters:**
671
-
672
- - `request: ActiveRequest`
673
- - `maxCommitId: number`
674
-
675
- #### connection.cancelRequest · [method](https://github.com/vanviegen/lowlander/blob/main/client/client.ts#L496)
676
-
677
- **Signature:** `(request: ActiveRequest) => void`
678
-
679
- **Parameters:**
680
-
681
- - `request: ActiveRequest`
682
-
683
- #### connection.startLinger · [method](https://github.com/vanviegen/lowlander/blob/main/client/client.ts#L510)
684
-
685
- **Signature:** `(cached: StreamCacheEntry) => void`
686
-
687
- **Parameters:**
688
-
689
- - `cached: StreamCacheEntry`
719
+ **Signature:** `() => string`
690
720
 
@@ -1,4 +1,5 @@
1
1
  import type { Socket, ServerProxy, StreamTypeBase } from '../server/server.js';
2
+ import A from 'aberdeen';
2
3
  import type { PromiseProxy } from 'aberdeen';
3
4
  /** Set to 0-3 for increasing verbosity. */
4
5
  export declare function setLogLevel(level: number): void;
@@ -124,6 +125,7 @@ export type ClientProxyObject<T> = {
124
125
  * ```
125
126
  */
126
127
  export declare class Connection<T> {
128
+ [A.OPAQUE]: true;
127
129
  url: string | (() => WebSocket);
128
130
  private ws?;
129
131
  private activeRequests;
@@ -131,7 +133,7 @@ export declare class Connection<T> {
131
133
  private reconnectAttempts;
132
134
  /** @internal */
133
135
  _proxyCounter: number;
134
- private onlineProxy;
136
+ private $state;
135
137
  private streamCache;
136
138
  /**
137
139
  * Type-safe proxy to the server-side API. Methods return `PromiseProxy` objects
@@ -147,6 +149,11 @@ export declare class Connection<T> {
147
149
  * Returns the current connection status. Reactive in Aberdeen scopes.
148
150
  */
149
151
  isOnline(): boolean;
152
+ /**
153
+ * Returns the last WebSocket error message, or `undefined` if there is none.
154
+ * Clears automatically when the connection comes online. Reactive in Aberdeen scopes.
155
+ */
156
+ getError(): string | undefined;
150
157
  private connect;
151
158
  private reconnect;
152
159
  private pruneCommitIds;
@@ -46,8 +46,10 @@ export class Connection {
46
46
  reconnectAttempts = 0;
47
47
  /** @internal */
48
48
  _proxyCounter = 0;
49
- onlineProxy = A.proxy(false);
49
+ $state = A.proxy({ online: false, error: undefined });
50
50
  streamCache = new Map();
51
+ /** @internal - allows storing Connection instances in Aberdeen proxies without re-proxying */
52
+ get [A.OPAQUE]() { return true; }
51
53
  /**
52
54
  * Type-safe proxy to the server-side API. Methods return `PromiseProxy` objects
53
55
  * that work reactively in Aberdeen scopes. `ServerProxy` returns include a
@@ -65,11 +67,24 @@ export class Connection {
65
67
  /**
66
68
  * Returns the current connection status. Reactive in Aberdeen scopes.
67
69
  */
68
- isOnline() { return this.onlineProxy.value; }
70
+ isOnline() { return this.$state.online; }
71
+ /**
72
+ * Returns the last WebSocket error message, or `undefined` if there is none.
73
+ * Clears automatically when the connection comes online. Reactive in Aberdeen scopes.
74
+ */
75
+ getError() { return this.$state.error; }
69
76
  connect() {
70
- const ws = this.ws = typeof this.url === 'string'
71
- ? new WebSocket(this.url)
72
- : this.url();
77
+ let ws;
78
+ try {
79
+ ws = this.ws = typeof this.url === 'string'
80
+ ? new WebSocket(this.url)
81
+ : this.url();
82
+ }
83
+ catch (error) {
84
+ console.error('WebSocket connection error:', error);
85
+ this.$state.error = error?.message || 'WebSocket connection error';
86
+ return;
87
+ }
73
88
  ws.binaryType = "arraybuffer";
74
89
  if (logLevel >= 1)
75
90
  console.log(`[lowlander] Connecting to WebSocket at ${typeof this.url === 'string' ? this.url : '[custom WebSocket]'}`);
@@ -78,10 +93,11 @@ export class Connection {
78
93
  return; // No longer the current connection
79
94
  if (logLevel >= 1)
80
95
  console.log('[lowlander] WebSocket connected');
81
- this.onlineProxy.value = true;
96
+ this.$state.online = true;
97
+ this.$state.error = undefined;
82
98
  this.reconnectAttempts = 0;
83
99
  for (const request of this.activeRequests.values()) {
84
- request.resultProxy.busy = true;
100
+ request.$result.busy = true;
85
101
  this.ws.send(request.requestBuffer);
86
102
  }
87
103
  };
@@ -96,6 +112,7 @@ export class Connection {
96
112
  if (ws !== this.ws)
97
113
  return; // No longer the current connection
98
114
  console.error('WebSocket error:', error);
115
+ this.$state.error = error?.message || 'WebSocket connection error';
99
116
  this.reconnect();
100
117
  };
101
118
  ws.onmessage = (event) => {
@@ -107,7 +124,7 @@ export class Connection {
107
124
  const request = this.activeRequests.get(requestId);
108
125
  if (!request)
109
126
  return; // Raced
110
- const result = A.unproxy(request.resultProxy);
127
+ const result = A.unproxy(request.$result);
111
128
  const type = pack.read();
112
129
  if (typeof type === 'number') {
113
130
  // It's a callback invocation
@@ -169,12 +186,12 @@ export class Connection {
169
186
  // Create new object
170
187
  if (prevCommitIds && commitId < (prevCommitIds.get(DEFAULT_COMMIT) ?? -1))
171
188
  return; // Stale create
172
- const entry = A.proxy(delta);
189
+ const $entry = A.proxy(delta);
173
190
  // OPAQUE=false: excluded from A.copy recursion (so this proxy is never
174
191
  // corrupted by being overwritten with data from a different linked model
175
192
  // at the same array index), but still wrapped in a proxy on read.
176
- A.unproxy(entry)[A.OPAQUE] = false;
177
- request.database.set(dbKeyHash, entry);
193
+ A.unproxy($entry)[A.OPAQUE] = false;
194
+ request.database.set(dbKeyHash, $entry);
178
195
  request.commitIds.set(dbKeyHash, new Map([[DEFAULT_COMMIT, commitId]]));
179
196
  }
180
197
  return;
@@ -182,12 +199,12 @@ export class Connection {
182
199
  // Each request should get one of these packet types as a response
183
200
  if (type === SERVER_MESSAGES.error) {
184
201
  const errorMessage = pack.readString();
185
- request.resultProxy.error = new Error(errorMessage);
202
+ request.$result.error = new Error(errorMessage);
186
203
  if (logLevel >= 2)
187
204
  console.log(`[lowlander] incoming error requestId=${requestId} message=${errorMessage}`);
188
205
  }
189
206
  else if (type === SERVER_MESSAGES.response || type === SERVER_MESSAGES.response_proxy) {
190
- request.resultProxy.value = pack.read();
207
+ request.$result.value = pack.read();
191
208
  request.virtualSocketIds = pack.read();
192
209
  request.hasServerProxy = type === SERVER_MESSAGES.response_proxy;
193
210
  if (logLevel >= 2)
@@ -202,10 +219,10 @@ export class Connection {
202
219
  if (logLevel >= 2)
203
220
  console.log(`[lowlander] incoming ${request.hasServerProxy ? 'response_proxy_model' : 'response_model'} requestId=${requestId} dbKey=${dbKey} cacheMs=${cacheMs} obj=${obj}`);
204
221
  if (obj) {
205
- request.resultProxy.value = A.proxy(obj);
222
+ request.$result.value = A.proxy(obj);
206
223
  }
207
224
  else {
208
- request.resultProxy.error = new Error('Unknown database key ' + dbKey);
225
+ request.$result.error = new Error('Unknown database key ' + dbKey);
209
226
  }
210
227
  if (cacheMs !== undefined && request.cacheKey && !this.streamCache.has(request.cacheKey)) {
211
228
  this.streamCache.set(request.cacheKey, {
@@ -221,9 +238,9 @@ export class Connection {
221
238
  this.activeRequests.delete(requestId);
222
239
  }
223
240
  if (!request.hasServerProxy) {
224
- delete request.resultProxy.serverProxy;
241
+ delete request.$result.serverProxy;
225
242
  }
226
- request.resultProxy.busy = false;
243
+ request.$result.busy = false;
227
244
  if (request.resolve) {
228
245
  // This does not happen on reconnect
229
246
  if (result.error != null) {
@@ -240,7 +257,7 @@ export class Connection {
240
257
  }
241
258
  reconnect() {
242
259
  this.ws = undefined;
243
- this.onlineProxy.value = false;
260
+ this.$state.online = false;
244
261
  if (typeof this.url !== 'string')
245
262
  return; // No reconnect in test mode
246
263
  // Reconnect with exponential backoff
@@ -286,11 +303,11 @@ export class Connection {
286
303
  if (cached.refCount <= 0)
287
304
  this.startLinger(cached);
288
305
  });
289
- return cached.request.resultProxy;
306
+ return cached.request.$result;
290
307
  }
291
308
  }
292
309
  const result = { busy: true };
293
- const resultProxy = A.proxy(result);
310
+ const $result = A.proxy(result);
294
311
  const requestId = ++this.requestCounter;
295
312
  const pack = new DataPack();
296
313
  pack.write(requestId).write(CLIENT_MESSAGES.call).write(proxyId).write(methodName);
@@ -307,7 +324,7 @@ export class Connection {
307
324
  }
308
325
  }
309
326
  });
310
- const request = { resultProxy, requestBuffer: pack.toUint8Array(true), requestId, connection: this, callbacks, cacheKey };
327
+ const request = { $result, requestBuffer: pack.toUint8Array(true), requestId, connection: this, callbacks, cacheKey };
311
328
  result.serverProxy = new Proxy(request, proxyHandlers);
312
329
  result.promise = new Promise((resolve, reject) => {
313
330
  request.resolve = resolve;
@@ -331,7 +348,7 @@ export class Connection {
331
348
  }
332
349
  this.cancelRequest(request);
333
350
  });
334
- return resultProxy;
351
+ return $result;
335
352
  };
336
353
  }
337
354
  cancelRequest(request) {
@@ -360,6 +377,11 @@ export class Connection {
360
377
  }
361
378
  const proxyHandlers = {
362
379
  get(target, prop) {
380
+ if (typeof prop === 'symbol') {
381
+ // Expose OPAQUE=true so Aberdeen stores us as-is without re-proxying.
382
+ // Also, don't dive into object args
383
+ return prop === A.OPAQUE ? true : prop === A.CUSTOM_DUMP ? `<ServerProxy for #${target.requestId}>` : undefined;
384
+ }
363
385
  if (target.serverProxyCache?.has(prop)) {
364
386
  return target.serverProxyCache.get(prop);
365
387
  }
@@ -1 +1 @@
1
- {"version":3,"file":"client.js","sourceRoot":"","sources":["../../client/client.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"client.js","sourceRoot":"","sources":["../../client/client.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,16 @@
1
+ import type { ClientProxyObject } from 'lowlander/client';
2
+ import type { TypeInfo, DashboardAPI } from '../server.js';
3
+ type ServerProxy = {
4
+ serverProxy: ClientProxyObject<DashboardAPI>;
5
+ };
6
+ export interface FieldInfo {
7
+ name: string;
8
+ type: TypeInfo;
9
+ description?: string;
10
+ hasDefault: boolean;
11
+ isPk: boolean;
12
+ }
13
+ export declare function openCreateModal(proxy: ServerProxy, modelName: string, fields: FieldInfo[], onCreated?: (pk: any) => void): void;
14
+ export declare function openEditModal(proxy: ServerProxy, modelName: string, fields: FieldInfo[], pk: any, currentValues: Record<string, any>, onSaved?: () => void): void;
15
+ export declare function openDeleteConfirm(proxy: ServerProxy, modelName: string, pk: any, displayLabel: string, onDeleted?: () => void): void;
16
+ export {};