@rool-dev/extension 0.3.7-dev.8d688f9 → 0.3.7-dev.d9f341e

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
@@ -183,6 +183,7 @@ These are Svelte 5 `$state` properties — use them directly in templates or `$e
183
183
  | `role` | `RoolUserRole` | User's role (`owner`, `admin`, `editor`, `viewer`) |
184
184
  | `linkAccess` | `LinkAccess` | URL sharing level |
185
185
  | `userId` | `string` | Current user's ID |
186
+ | `user` | `BridgeUser` | Current user info (`{ id, name, email }`) |
186
187
  | `isReadOnly` | `boolean` | True if viewer role |
187
188
 
188
189
  ### Object Operations
@@ -409,10 +410,20 @@ Extensions run in a sandboxed iframe (`allow-scripts allow-same-origin`). The ho
409
410
 
410
411
  The bridge protocol:
411
412
  1. Extension sends `rool:ready`
412
- 2. Host responds with `rool:init` (channel metadata, schema, space info)
413
+ 2. Host responds with `rool:init` (channel metadata, schema, space info, user identity)
413
414
  3. Extension calls channel methods → `rool:request` → host executes → `rool:response`
414
415
  4. Host pushes real-time events → `rool:event` → extension updates reactive state
415
416
 
417
+ When creating a bridge host, pass `user` so the extension can display the current user's name:
418
+
419
+ ```typescript
420
+ const host = createBridgeHost({
421
+ channel,
422
+ iframe,
423
+ user: { id: currentUser.id, name: currentUser.name, email: currentUser.email },
424
+ });
425
+ ```
426
+
416
427
  ## CLI Commands
417
428
 
418
429
  | Command | Description |
@@ -431,6 +442,7 @@ import type {
431
442
  ReactiveObject,
432
443
  ReactiveWatch,
433
444
  WatchOptions,
445
+ BridgeUser,
434
446
  RoolObject,
435
447
  RoolObjectStat,
436
448
  SpaceSchema,
@@ -71,6 +71,7 @@ export declare class DevHostController {
71
71
  registerIframe(tabId: string, el: HTMLIFrameElement): void;
72
72
  unregisterIframe(tabId: string): void;
73
73
  logout(): void;
74
+ private get _bridgeUser();
74
75
  private _bindBridge;
75
76
  private _bindAllBridges;
76
77
  private _destroyTab;
@@ -1 +1 @@
1
- {"version":3,"file":"DevHostController.d.ts","sourceRoot":"","sources":["../../src/dev/DevHostController.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;GAUG;AAEH,OAAO,EAAE,UAAU,EAAE,MAAM,eAAe,CAAC;AAC3C,OAAO,KAAK,EAAE,aAAa,EAAe,sBAAsB,EAAE,MAAM,eAAe,CAAC;AAExF,OAAO,KAAK,EAAE,QAAQ,EAAE,WAAW,EAAE,MAAM,gBAAgB,CAAC;AAO5D,MAAM,WAAW,YAAY;IAC3B,EAAE,EAAE,MAAM,CAAC;IACX,IAAI,EAAE,MAAM,CAAC;IACb,GAAG,EAAE,MAAM,CAAC;IACZ,OAAO,EAAE,OAAO,CAAC;CAClB;AAED,MAAM,MAAM,WAAW,GAAG,IAAI,GAAG,SAAS,GAAG,KAAK,CAAC;AAqBnD,qBAAa,iBAAiB;IAE5B,QAAQ,CAAC,SAAS,EAAE,MAAM,CAAC;IAC3B,QAAQ,CAAC,YAAY,EAAE,MAAM,CAAC;IAC9B,QAAQ,CAAC,QAAQ,EAAE,QAAQ,GAAG,IAAI,CAAC;IACnC,QAAQ,CAAC,aAAa,EAAE,MAAM,GAAG,IAAI,CAAC;IAGtC,MAAM,EAAG,UAAU,CAAC;IAGpB,MAAM,EAAE,aAAa,EAAE,CAAM;IAC7B,cAAc,EAAE,MAAM,GAAG,IAAI,CAAQ;IACrC,UAAU,EAAE,MAAM,CAAqB;IACvC,WAAW,EAAE,WAAW,CAAS;IACjC,eAAe,EAAE,MAAM,GAAG,IAAI,CAAuB;IACrD,GAAG,EAAE,WAAW,CAAC;IACjB,mBAAmB,EAAE,sBAAsB,EAAE,CAAM;IACnD,qBAAqB,EAAE,MAAM,EAAE,CAAM;IACrC,gBAAgB,EAAE,OAAO,CAAS;IAClC,YAAY,EAAE,MAAM,GAAG,UAAU,GAAG,WAAW,GAAG,MAAM,GAAG,OAAO,CAAU;IAC5E,cAAc,EAAE,MAAM,GAAG,IAAI,CAAQ;IACrC,UAAU,EAAE,MAAM,GAAG,IAAI,CAAQ;IAGjC,OAAO,CAAC,QAAQ,CAAmC;IACnD,OAAO,CAAC,SAAS,CAAyC;IAC1D,OAAO,CAAC,WAAW,CAAkC;IAGrD,OAAO,CAAC,SAAS,CAAa;IAC9B,OAAO,CAAC,KAAK,CAAsB;IAGnC,OAAO,CAAC,SAAS,CAAS;gBAGxB,OAAO,EAAE;QACP,SAAS,EAAE,MAAM,CAAC;QAClB,YAAY,EAAE,MAAM,CAAC;QACrB,QAAQ,EAAE,QAAQ,GAAG,IAAI,CAAC;QAC1B,aAAa,EAAE,MAAM,GAAG,IAAI,CAAC;KAC9B,EACD,QAAQ,EAAE,MAAM,IAAI,EACpB,IAAI,EAAE,MAAM,OAAO,CAAC,IAAI,CAAC;IAoB3B,IAAI,IAAI,IAAI,YAAY,EAAE,CAoBzB;IAMK,IAAI,IAAI,OAAO,CAAC,IAAI,CAAC;IA+DrB,WAAW,CAAC,OAAO,EAAE,MAAM,GAAG,OAAO,CAAC,IAAI,CAAC;IA0DjD;;;;;;OAMG;IACG,gBAAgB,CAAC,WAAW,EAAE,MAAM,GAAG,OAAO,CAAC,IAAI,CAAC;IAwB1D;;;OAGG;IACH,eAAe,CAAC,WAAW,EAAE,MAAM,GAAG,IAAI;IAiBpC,OAAO,IAAI,OAAO,CAAC,IAAI,CAAC;IAkExB,SAAS,CAAC,MAAM,EAAE,WAAW,GAAG,OAAO,CAAC,IAAI,CAAC;IAiBnD,aAAa,IAAI,IAAI;IAUrB,cAAc,CAAC,KAAK,EAAE,MAAM,EAAE,EAAE,EAAE,iBAAiB,GAAG,IAAI;IAK1D,gBAAgB,CAAC,KAAK,EAAE,MAAM,GAAG,IAAI;IAQrC,MAAM,IAAI,IAAI;IASd,OAAO,CAAC,WAAW;IAQnB,OAAO,CAAC,eAAe;IAMvB,OAAO,CAAC,WAAW;IAQnB,OAAO,CAAC,6BAA6B;IAYrC;;;OAGG;YACW,aAAa;IA4B3B,OAAO,CAAC,YAAY;CAKrB"}
1
+ {"version":3,"file":"DevHostController.d.ts","sourceRoot":"","sources":["../../src/dev/DevHostController.ts"],"names":[],"mappings":"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"}
@@ -358,11 +358,15 @@ export class DevHostController {
358
358
  // ---------------------------------------------------------------------------
359
359
  // Private helpers
360
360
  // ---------------------------------------------------------------------------
361
+ get _bridgeUser() {
362
+ const cu = this.client.currentUser; // Always available after boot() authenticates
363
+ return { id: cu.id, name: cu.name, email: cu.email };
364
+ }
361
365
  _bindBridge(tabId) {
362
366
  const el = this.iframeEls[tabId];
363
367
  const ch = this.channels[tabId];
364
368
  if (el && ch && !this.bridgeHosts[tabId]) {
365
- this.bridgeHosts[tabId] = createBridgeHost({ channel: ch, iframe: el });
369
+ this.bridgeHosts[tabId] = createBridgeHost({ channel: ch, iframe: el, user: this._bridgeUser });
366
370
  }
367
371
  }
368
372
  _bindAllBridges() {
@@ -9010,11 +9010,13 @@ var GETTER_MAP = { "getActiveLeafId": "activeLeafId" };
9010
9010
  var BridgeHost = class {
9011
9011
  channel;
9012
9012
  iframe;
9013
+ user;
9013
9014
  eventCleanups = [];
9014
9015
  _destroyed = false;
9015
9016
  constructor(options) {
9016
9017
  this.channel = options.channel;
9017
9018
  this.iframe = options.iframe;
9019
+ this.user = options.user;
9018
9020
  window.addEventListener("message", this._onMessage);
9019
9021
  for (const eventName of FORWARDED_EVENTS) {
9020
9022
  const handler = (data) => {
@@ -9039,6 +9041,7 @@ var BridgeHost = class {
9039
9041
  role: this.channel.role,
9040
9042
  linkAccess: this.channel.linkAccess,
9041
9043
  userId: this.channel.userId,
9044
+ user: this.user,
9042
9045
  schema: this.channel.getSchema(),
9043
9046
  metadata: this.channel.getAllMetadata()
9044
9047
  };
@@ -9412,12 +9415,21 @@ var DevHostController = class {
9412
9415
  this.client.logout();
9413
9416
  window.location.reload();
9414
9417
  }
9418
+ get _bridgeUser() {
9419
+ const cu = this.client.currentUser;
9420
+ return {
9421
+ id: cu.id,
9422
+ name: cu.name,
9423
+ email: cu.email
9424
+ };
9425
+ }
9415
9426
  _bindBridge(tabId) {
9416
9427
  const el = this.iframeEls[tabId];
9417
9428
  const ch = this.channels[tabId];
9418
9429
  if (el && ch && !this.bridgeHosts[tabId]) this.bridgeHosts[tabId] = createBridgeHost({
9419
9430
  channel: ch,
9420
- iframe: el
9431
+ iframe: el,
9432
+ user: this._bridgeUser
9421
9433
  });
9422
9434
  }
9423
9435
  _bindAllBridges() {