@livestore/devtools-web-common 0.3.0-dev.36 → 0.3.0-dev.38

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.
@@ -1,4 +1,4 @@
1
- import { UnexpectedError } from '@livestore/common';
1
+ import { Devtools, UnexpectedError } from '@livestore/common';
2
2
  import type { Scope, Worker } from '@livestore/utils/effect';
3
3
  import { Effect, Schema, WebChannel } from '@livestore/utils/effect';
4
4
  import type { MeshNode } from '@livestore/webmesh';
@@ -7,46 +7,44 @@ export * as WorkerSchema from '../worker/schema.js';
7
7
  declare global {
8
8
  var __debugWebmeshNode: any;
9
9
  }
10
- export declare const makeSessionsChannel: Effect.Effect<WebChannel.WebChannel<{
11
- readonly _tag: "RequestSessions";
12
- } | {
13
- readonly _tag: "SessionInfo";
14
- readonly storeId: string;
15
- readonly clientId: string;
16
- readonly sessionId: string;
17
- readonly schemaAlias: string;
18
- }, {
19
- readonly _tag: "RequestSessions";
20
- } | {
21
- readonly _tag: "SessionInfo";
22
- readonly storeId: string;
23
- readonly clientId: string;
24
- readonly sessionId: string;
25
- readonly schemaAlias: string;
26
- }, never>, never, Scope.Scope>;
27
- export declare const ClientSessionRequestContentscriptMain: Schema.TaggedStruct<"ClientSessionRequestContentscriptMain", {
10
+ export declare const makeSessionInfoBroadcastChannel: Effect.Effect<WebChannel.WebChannel<Devtools.SessionInfo.Message, Devtools.SessionInfo.Message>, UnexpectedError, Scope.Scope>;
11
+ export declare const makeNodeName: {
12
+ sharedWorker: ({ storeId }: {
13
+ storeId: string;
14
+ }) => string;
15
+ browserExtension: {
16
+ contentscriptMain: (tabId: number) => string;
17
+ contentscriptIframe: (tabId: number) => string;
18
+ };
19
+ };
20
+ export declare const ClientSessionContentscriptMainReq: Schema.TaggedStruct<"ClientSessionContentscriptMainReq", {
28
21
  storeId: typeof Schema.String;
29
22
  clientId: typeof Schema.String;
30
23
  sessionId: typeof Schema.String;
31
24
  }>;
32
- export type ClientSessionRequestContentscriptMain = typeof ClientSessionRequestContentscriptMain.Type;
33
- export declare const makeWebDevtoolsConnectedMeshNode: ({ nodeName, target, worker, }: {
34
- nodeName: string;
35
- target: string;
36
- worker: Worker.SerializedWorkerPool<typeof WorkerSchema.Request.Type>;
37
- }) => Effect.Effect<MeshNode<string>, UnexpectedError, Scope.Scope>;
38
- export declare const makeChannelForConnectedMeshNode: <MsgListen, MsgSend, MsgListenEncoded, MsgSendEncoded>({ target, node, schema, }: {
39
- node: MeshNode;
40
- target: string;
41
- schema: WebChannel.InputSchema<MsgListen, MsgSend, MsgListenEncoded, MsgSendEncoded>;
42
- }) => Effect.Effect<WebChannel.WebChannel<MsgListen, MsgSend, never>, never, Scope.Scope>;
43
- export declare const makeWebDevtoolsChannel: <MsgListen, MsgSend, MsgListenEncoded, MsgSendEncoded>({ nodeName, target, schema, worker, workerTargetName, }: {
44
- nodeName: string;
45
- target: string;
46
- schema: WebChannel.InputSchema<MsgListen, MsgSend, MsgListenEncoded, MsgSendEncoded>;
47
- worker: Worker.SerializedWorkerPool<typeof WorkerSchema.Request.Type>;
48
- workerTargetName: string;
49
- }) => Effect.Effect<WebChannel.WebChannel<MsgListen, MsgSend>, UnexpectedError, Scope.Scope>;
25
+ export declare const ClientSessionContentscriptMainRes: Schema.TaggedStruct<"ClientSessionContentscriptMainRes", {
26
+ tabId: typeof Schema.Number;
27
+ }>;
28
+ export declare const makeStaticClientSessionChannel: {
29
+ contentscriptMain: Effect.Effect<WebChannel.WebChannel<{
30
+ readonly _tag: "ClientSessionContentscriptMainReq";
31
+ readonly storeId: string;
32
+ readonly clientId: string;
33
+ readonly sessionId: string;
34
+ }, {
35
+ readonly _tag: "ClientSessionContentscriptMainRes";
36
+ readonly tabId: number;
37
+ }, never>, never, Scope.Scope>;
38
+ clientSession: Effect.Effect<WebChannel.WebChannel<{
39
+ readonly _tag: "ClientSessionContentscriptMainRes";
40
+ readonly tabId: number;
41
+ }, {
42
+ readonly _tag: "ClientSessionContentscriptMainReq";
43
+ readonly storeId: string;
44
+ readonly clientId: string;
45
+ readonly sessionId: string;
46
+ }, never>, never, Scope.Scope>;
47
+ };
50
48
  export declare const connectViaWorker: ({ node, target, worker, }: {
51
49
  node: MeshNode;
52
50
  target: string;
@@ -1 +1 @@
1
- {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/web-channel/index.ts"],"names":[],"mappings":"AAAA,OAAO,EAAY,eAAe,EAAE,MAAM,mBAAmB,CAAA;AAE7D,OAAO,KAAK,EAAE,KAAK,EAAE,MAAM,EAAE,MAAM,yBAAyB,CAAA;AAC5D,OAAO,EAAY,MAAM,EAAE,MAAM,EAAU,UAAU,EAAE,MAAM,yBAAyB,CAAA;AACtF,OAAO,KAAK,EAAE,QAAQ,EAAE,MAAM,oBAAoB,CAAA;AAGlD,OAAO,KAAK,YAAY,MAAM,qBAAqB,CAAA;AAEnD,OAAO,KAAK,YAAY,MAAM,qBAAqB,CAAA;AAEnD,OAAO,CAAC,MAAM,CAAC;IAEb,IAAI,kBAAkB,EAAE,GAAG,CAAA;CAC5B;AAED,eAAO,MAAM,mBAAmB;;;;;;;;;;;;;;;;8BAG9B,CAAA;AAEF,eAAO,MAAM,qCAAqC;;;;EAIhD,CAAA;AACF,MAAM,MAAM,qCAAqC,GAAG,OAAO,qCAAqC,CAAC,IAAI,CAAA;AAErG,eAAO,MAAM,gCAAgC,GAAI,+BAI9C;IACD,QAAQ,EAAE,MAAM,CAAA;IAChB,MAAM,EAAE,MAAM,CAAA;IACd,MAAM,EAAE,MAAM,CAAC,oBAAoB,CAAC,OAAO,YAAY,CAAC,OAAO,CAAC,IAAI,CAAC,CAAA;CACtE,kEAOG,CAAA;AAEJ,eAAO,MAAM,+BAA+B,GAAI,SAAS,EAAE,OAAO,EAAE,gBAAgB,EAAE,cAAc,EAAE,2BAInG;IACD,IAAI,EAAE,QAAQ,CAAA;IACd,MAAM,EAAE,MAAM,CAAA;IACd,MAAM,EAAE,UAAU,CAAC,WAAW,CAAC,SAAS,EAAE,OAAO,EAAE,gBAAgB,EAAE,cAAc,CAAC,CAAA;CACrF,wFAMG,CAAA;AAEJ,eAAO,MAAM,sBAAsB,GAAI,SAAS,EAAE,OAAO,EAAE,gBAAgB,EAAE,cAAc,EAAE,yDAM1F;IACD,QAAQ,EAAE,MAAM,CAAA;IAChB,MAAM,EAAE,MAAM,CAAA;IACd,MAAM,EAAE,UAAU,CAAC,WAAW,CAAC,SAAS,EAAE,OAAO,EAAE,gBAAgB,EAAE,cAAc,CAAC,CAAA;IACpF,MAAM,EAAE,MAAM,CAAC,oBAAoB,CAAC,OAAO,YAAY,CAAC,OAAO,CAAC,IAAI,CAAC,CAAA;IACrE,gBAAgB,EAAE,MAAM,CAAA;CACzB,KAAG,MAAM,CAAC,MAAM,CAAC,UAAU,CAAC,UAAU,CAAC,SAAS,EAAE,OAAO,CAAC,EAAE,eAAe,EAAE,KAAK,CAAC,KAAK,CASjB,CAAA;AAExE,eAAO,MAAM,gBAAgB,GAAI,2BAI9B;IACD,IAAI,EAAE,QAAQ,CAAA;IACd,MAAM,EAAE,MAAM,CAAA;IACd,MAAM,EAAE,MAAM,CAAC,oBAAoB,CAAC,OAAO,YAAY,CAAC,OAAO,CAAC,IAAI,CAAC,CAAA;CACtE,sDA+B8C,CAAA"}
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/web-channel/index.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,QAAQ,EAAE,eAAe,EAAE,MAAM,mBAAmB,CAAA;AAE7D,OAAO,KAAK,EAAE,KAAK,EAAE,MAAM,EAAE,MAAM,yBAAyB,CAAA;AAC5D,OAAO,EAAY,MAAM,EAAE,MAAM,EAAU,UAAU,EAAE,MAAM,yBAAyB,CAAA;AACtF,OAAO,KAAK,EAAE,QAAQ,EAAE,MAAM,oBAAoB,CAAA;AAGlD,OAAO,KAAK,YAAY,MAAM,qBAAqB,CAAA;AAEnD,OAAO,KAAK,YAAY,MAAM,qBAAqB,CAAA;AAEnD,OAAO,CAAC,MAAM,CAAC;IAEb,IAAI,kBAAkB,EAAE,GAAG,CAAA;CAC5B;AAED,eAAO,MAAM,+BAA+B,EAAE,MAAM,CAAC,MAAM,CACzD,UAAU,CAAC,UAAU,CAAC,QAAQ,CAAC,WAAW,CAAC,OAAO,EAAE,QAAQ,CAAC,WAAW,CAAC,OAAO,CAAC,EACjF,eAAe,EACf,KAAK,CAAC,KAAK,CAIX,CAAA;AAEF,eAAO,MAAM,YAAY;gCACK;QAAE,OAAO,EAAE,MAAM,CAAA;KAAE;;mCAIlB,MAAM;qCACJ,MAAM;;CAEtC,CAAA;AAED,eAAO,MAAM,iCAAiC;;;;EAI5C,CAAA;AAEF,eAAO,MAAM,iCAAiC;;EAE5C,CAAA;AAGF,eAAO,MAAM,8BAA8B;;;;;;;;;;;;;;;;;;;CAqB1C,CAAA;AAED,eAAO,MAAM,gBAAgB,GAAI,2BAI9B;IACD,IAAI,EAAE,QAAQ,CAAA;IACd,MAAM,EAAE,MAAM,CAAA;IACd,MAAM,EAAE,MAAM,CAAC,oBAAoB,CAAC,OAAO,YAAY,CAAC,OAAO,CAAC,IAAI,CAAC,CAAA;CACtE,sDA+B8C,CAAA"}
@@ -1,35 +1,49 @@
1
1
  import { Devtools, UnexpectedError } from '@livestore/common';
2
2
  import { LS_DEV } from '@livestore/utils';
3
3
  import { Deferred, Effect, Schema, Stream, WebChannel } from '@livestore/utils/effect';
4
- import { makeMeshNode, WebmeshSchema } from '@livestore/webmesh';
4
+ import { WebmeshSchema } from '@livestore/webmesh';
5
5
  import * as WorkerSchema from '../worker/schema.js';
6
6
  export * as WorkerSchema from '../worker/schema.js';
7
- export const makeSessionsChannel = WebChannel.broadcastChannel({
7
+ export const makeSessionInfoBroadcastChannel = WebChannel.broadcastChannel({
8
8
  channelName: 'session-info',
9
9
  schema: Devtools.SessionInfo.Message,
10
10
  });
11
- export const ClientSessionRequestContentscriptMain = Schema.TaggedStruct('ClientSessionRequestContentscriptMain', {
11
+ export const makeNodeName = {
12
+ sharedWorker: ({ storeId }) => `shared-worker-${storeId}`,
13
+ // TODO refactor shared-worker setup so there's only a single shared-worker per origin
14
+ // sharedWorker: () => `shared-worker`,
15
+ browserExtension: {
16
+ contentscriptMain: (tabId) => `contentscript-main-${tabId}`,
17
+ contentscriptIframe: (tabId) => `contentscript-iframe-${tabId}`,
18
+ },
19
+ };
20
+ export const ClientSessionContentscriptMainReq = Schema.TaggedStruct('ClientSessionContentscriptMainReq', {
12
21
  storeId: Schema.String,
13
22
  clientId: Schema.String,
14
23
  sessionId: Schema.String,
15
24
  });
16
- export const makeWebDevtoolsConnectedMeshNode = ({ nodeName, target, worker, }) => Effect.gen(function* () {
17
- const node = yield* makeMeshNode(nodeName);
18
- yield* connectViaWorker({ node, target, worker });
19
- return node;
25
+ export const ClientSessionContentscriptMainRes = Schema.TaggedStruct('ClientSessionContentscriptMainRes', {
26
+ tabId: Schema.Number,
20
27
  });
21
- export const makeChannelForConnectedMeshNode = ({ target, node, schema, }) => node.makeChannel({
22
- target,
23
- channelName: 'devtools(' + [node.nodeName, target].sort().join('↔') + ')',
24
- schema,
25
- mode: 'messagechannel',
26
- });
27
- export const makeWebDevtoolsChannel = ({ nodeName, target, schema, worker, workerTargetName, }) => Effect.gen(function* () {
28
- const node = yield* makeWebDevtoolsConnectedMeshNode({ nodeName, target: workerTargetName, worker });
29
- globalThis.__debugWebmeshNode = node;
30
- const channel = yield* makeChannelForConnectedMeshNode({ node, target, schema });
31
- return channel;
32
- }).pipe(Effect.withSpan(`devtools-web-common:makeWebDevtoolsChannel`));
28
+ // Effect.suspend is needed since `window` is not available in the shared worker
29
+ export const makeStaticClientSessionChannel = {
30
+ contentscriptMain: Effect.suspend(() => WebChannel.windowChannel({
31
+ // eslint-disable-next-line unicorn/prefer-global-this
32
+ listenWindow: window,
33
+ // eslint-disable-next-line unicorn/prefer-global-this
34
+ sendWindow: window,
35
+ schema: { listen: ClientSessionContentscriptMainReq, send: ClientSessionContentscriptMainRes },
36
+ ids: { own: 'contentscript-main-static', other: 'client-session-static' },
37
+ })),
38
+ clientSession: Effect.suspend(() => WebChannel.windowChannel({
39
+ // eslint-disable-next-line unicorn/prefer-global-this
40
+ listenWindow: window,
41
+ // eslint-disable-next-line unicorn/prefer-global-this
42
+ sendWindow: window,
43
+ schema: { listen: ClientSessionContentscriptMainRes, send: ClientSessionContentscriptMainReq },
44
+ ids: { own: 'client-session-static', other: 'contentscript-main-static' },
45
+ })),
46
+ };
33
47
  export const connectViaWorker = ({ node, target, worker, }) => Effect.gen(function* () {
34
48
  const mc = new MessageChannel();
35
49
  const isConnected = yield* Deferred.make();
@@ -1 +1 @@
1
- {"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/web-channel/index.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/web-channel/index.ts"],"names":[],"mappings":"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"}
@@ -14,7 +14,7 @@ export const CreateConnection = ({ from, port }) => Stream.asyncScoped((emit) =>
14
14
  const messagePortChannel = yield* WebChannel.messagePortChannel({ port, schema: WebmeshSchema.Packet });
15
15
  yield* node.addEdge({ target: from, edgeChannel: messagePortChannel, replaceIfExists: true });
16
16
  if (LS_DEV) {
17
- yield* Effect.logDebug(`@livestore/devtools-web-common: accepted connection: ${node.nodeName} ← ${from}`);
17
+ yield* Effect.logDebug(`@livestore/devtools-web-common: accepted edge: ${node.nodeName} ← ${from}`);
18
18
  }
19
19
  emit.single({});
20
20
  yield* Effect.spanEvent({ connectedTo: [...node.edgeKeys] });
@@ -1 +1 @@
1
- {"version":3,"file":"mod.js","sourceRoot":"","sources":["../../src/worker/mod.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,MAAM,EAAE,MAAM,kBAAkB,CAAA;AACzC,OAAO,EAAE,OAAO,EAAE,MAAM,EAAE,KAAK,EAAE,MAAM,EAAE,UAAU,EAAE,MAAM,yBAAyB,CAAA;AAEpF,OAAO,EAAE,YAAY,EAAE,aAAa,EAAE,MAAM,oBAAoB,CAAA;AAIhE,OAAO,KAAK,MAAM,MAAM,aAAa,CAAA;AAErC,MAAM,OAAO,YAAa,SAAQ,OAAO,CAAC,GAAG,CAAC,6CAA6C,CAAC,EAGzF;IACD,MAAM,CAAC,KAAK,GAAG,CAAC,EAAE,QAAQ,EAAwB,EAAE,EAAE,CACpD,MAAM,CAAC,GAAG,CAAC,QAAQ,CAAC;QAClB,MAAM,IAAI,GAAG,KAAK,CAAC,CAAC,YAAY,CAAC,QAAQ,CAAC,CAAA;QAE1C,UAAU,CAAC,kBAAkB,GAAG,IAAI,CAAA;QAEpC,OAAO,EAAE,IAAI,EAAE,CAAA;IACjB,CAAC,CAAC,CAAC,IAAI,CAAC,KAAK,CAAC,MAAM,CAAC,YAAY,CAAC,CAAC,CAAA;;AAGvC,MAAM,CAAC,MAAM,gBAAgB,GAAG,CAAC,EAAE,IAAI,EAAE,IAAI,EAAmD,EAAE,EAAE,CAClG,MAAM,CAAC,WAAW,CAA0B,CAAC,IAAI,EAAE,EAAE,CACnD,MAAM,CAAC,GAAG,CAAC,QAAQ,CAAC;IAClB,MAAM,EAAE,IAAI,EAAE,GAAG,KAAK,CAAC,CAAC,YAAY,CAAA;IAEpC,MAAM,kBAAkB,GAAG,KAAK,CAAC,CAAC,UAAU,CAAC,kBAAkB,CAAC,EAAE,IAAI,EAAE,MAAM,EAAE,aAAa,CAAC,MAAM,EAAE,CAAC,CAAA;IAEvG,KAAK,CAAC,CAAC,IAAI,CAAC,OAAO,CAAC,EAAE,MAAM,EAAE,IAAI,EAAE,WAAW,EAAE,kBAAkB,EAAE,eAAe,EAAE,IAAI,EAAE,CAAC,CAAA;IAE7F,IAAI,MAAM,EAAE,CAAC;QACX,KAAK,CAAC,CAAC,MAAM,CAAC,QAAQ,CAAC,wDAAwD,IAAI,CAAC,QAAQ,MAAM,IAAI,EAAE,CAAC,CAAA;IAC3G,CAAC;IAED,IAAI,CAAC,MAAM,CAAC,EAAE,CAAC,CAAA;IAEf,KAAK,CAAC,CAAC,MAAM,CAAC,SAAS,CAAC,EAAE,WAAW,EAAE,CAAC,GAAG,IAAI,CAAC,QAAQ,CAAC,EAAE,CAAC,CAAA;IAE5D,wBAAwB;IACxB,sBAAsB;IAEtB,YAAY;AACd,CAAC,CAAC,CAAC,IAAI,CAAC,MAAM,CAAC,KAAK,CAAC,CACtB,CAAC,IAAI,CAAC,MAAM,CAAC,QAAQ,CAAC,2DAA2D,IAAI,EAAE,CAAC,CAAC,CAAA"}
1
+ {"version":3,"file":"mod.js","sourceRoot":"","sources":["../../src/worker/mod.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,MAAM,EAAE,MAAM,kBAAkB,CAAA;AACzC,OAAO,EAAE,OAAO,EAAE,MAAM,EAAE,KAAK,EAAE,MAAM,EAAE,UAAU,EAAE,MAAM,yBAAyB,CAAA;AAEpF,OAAO,EAAE,YAAY,EAAE,aAAa,EAAE,MAAM,oBAAoB,CAAA;AAIhE,OAAO,KAAK,MAAM,MAAM,aAAa,CAAA;AAErC,MAAM,OAAO,YAAa,SAAQ,OAAO,CAAC,GAAG,CAAC,6CAA6C,CAAC,EAGzF;IACD,MAAM,CAAC,KAAK,GAAG,CAAC,EAAE,QAAQ,EAAwB,EAAE,EAAE,CACpD,MAAM,CAAC,GAAG,CAAC,QAAQ,CAAC;QAClB,MAAM,IAAI,GAAG,KAAK,CAAC,CAAC,YAAY,CAAC,QAAQ,CAAC,CAAA;QAE1C,UAAU,CAAC,kBAAkB,GAAG,IAAI,CAAA;QAEpC,OAAO,EAAE,IAAI,EAAE,CAAA;IACjB,CAAC,CAAC,CAAC,IAAI,CAAC,KAAK,CAAC,MAAM,CAAC,YAAY,CAAC,CAAC,CAAA;;AAGvC,MAAM,CAAC,MAAM,gBAAgB,GAAG,CAAC,EAAE,IAAI,EAAE,IAAI,EAAmD,EAAE,EAAE,CAClG,MAAM,CAAC,WAAW,CAA0B,CAAC,IAAI,EAAE,EAAE,CACnD,MAAM,CAAC,GAAG,CAAC,QAAQ,CAAC;IAClB,MAAM,EAAE,IAAI,EAAE,GAAG,KAAK,CAAC,CAAC,YAAY,CAAA;IAEpC,MAAM,kBAAkB,GAAG,KAAK,CAAC,CAAC,UAAU,CAAC,kBAAkB,CAAC,EAAE,IAAI,EAAE,MAAM,EAAE,aAAa,CAAC,MAAM,EAAE,CAAC,CAAA;IAEvG,KAAK,CAAC,CAAC,IAAI,CAAC,OAAO,CAAC,EAAE,MAAM,EAAE,IAAI,EAAE,WAAW,EAAE,kBAAkB,EAAE,eAAe,EAAE,IAAI,EAAE,CAAC,CAAA;IAE7F,IAAI,MAAM,EAAE,CAAC;QACX,KAAK,CAAC,CAAC,MAAM,CAAC,QAAQ,CAAC,kDAAkD,IAAI,CAAC,QAAQ,MAAM,IAAI,EAAE,CAAC,CAAA;IACrG,CAAC;IAED,IAAI,CAAC,MAAM,CAAC,EAAE,CAAC,CAAA;IAEf,KAAK,CAAC,CAAC,MAAM,CAAC,SAAS,CAAC,EAAE,WAAW,EAAE,CAAC,GAAG,IAAI,CAAC,QAAQ,CAAC,EAAE,CAAC,CAAA;IAE5D,wBAAwB;IACxB,sBAAsB;IAEtB,YAAY;AACd,CAAC,CAAC,CAAC,IAAI,CAAC,MAAM,CAAC,KAAK,CAAC,CACtB,CAAC,IAAI,CAAC,MAAM,CAAC,QAAQ,CAAC,2DAA2D,IAAI,EAAE,CAAC,CAAC,CAAA"}
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@livestore/devtools-web-common",
3
- "version": "0.3.0-dev.36",
3
+ "version": "0.3.0-dev.38",
4
4
  "type": "module",
5
5
  "sideEffects": false,
6
6
  "exports": {
@@ -14,9 +14,9 @@
14
14
  }
15
15
  },
16
16
  "dependencies": {
17
- "@livestore/common": "0.3.0-dev.36",
18
- "@livestore/utils": "0.3.0-dev.36",
19
- "@livestore/webmesh": "0.3.0-dev.36"
17
+ "@livestore/utils": "0.3.0-dev.38",
18
+ "@livestore/common": "0.3.0-dev.38",
19
+ "@livestore/webmesh": "0.3.0-dev.38"
20
20
  },
21
21
  "devDependencies": {},
22
22
  "files": [
@@ -3,7 +3,7 @@ import { LS_DEV } from '@livestore/utils'
3
3
  import type { Scope, Worker } from '@livestore/utils/effect'
4
4
  import { Deferred, Effect, Schema, Stream, WebChannel } from '@livestore/utils/effect'
5
5
  import type { MeshNode } from '@livestore/webmesh'
6
- import { makeMeshNode, WebmeshSchema } from '@livestore/webmesh'
6
+ import { WebmeshSchema } from '@livestore/webmesh'
7
7
 
8
8
  import * as WorkerSchema from '../worker/schema.js'
9
9
 
@@ -14,73 +14,58 @@ declare global {
14
14
  var __debugWebmeshNode: any
15
15
  }
16
16
 
17
- export const makeSessionsChannel = WebChannel.broadcastChannel({
17
+ export const makeSessionInfoBroadcastChannel: Effect.Effect<
18
+ WebChannel.WebChannel<Devtools.SessionInfo.Message, Devtools.SessionInfo.Message>,
19
+ UnexpectedError,
20
+ Scope.Scope
21
+ > = WebChannel.broadcastChannel({
18
22
  channelName: 'session-info',
19
23
  schema: Devtools.SessionInfo.Message,
20
24
  })
21
25
 
22
- export const ClientSessionRequestContentscriptMain = Schema.TaggedStruct('ClientSessionRequestContentscriptMain', {
26
+ export const makeNodeName = {
27
+ sharedWorker: ({ storeId }: { storeId: string }) => `shared-worker-${storeId}`,
28
+ // TODO refactor shared-worker setup so there's only a single shared-worker per origin
29
+ // sharedWorker: () => `shared-worker`,
30
+ browserExtension: {
31
+ contentscriptMain: (tabId: number) => `contentscript-main-${tabId}`,
32
+ contentscriptIframe: (tabId: number) => `contentscript-iframe-${tabId}`,
33
+ },
34
+ }
35
+
36
+ export const ClientSessionContentscriptMainReq = Schema.TaggedStruct('ClientSessionContentscriptMainReq', {
23
37
  storeId: Schema.String,
24
38
  clientId: Schema.String,
25
39
  sessionId: Schema.String,
26
40
  })
27
- export type ClientSessionRequestContentscriptMain = typeof ClientSessionRequestContentscriptMain.Type
28
-
29
- export const makeWebDevtoolsConnectedMeshNode = ({
30
- nodeName,
31
- target,
32
- worker,
33
- }: {
34
- nodeName: string
35
- target: string
36
- worker: Worker.SerializedWorkerPool<typeof WorkerSchema.Request.Type>
37
- }) =>
38
- Effect.gen(function* () {
39
- const node = yield* makeMeshNode(nodeName)
40
-
41
- yield* connectViaWorker({ node, target, worker })
42
-
43
- return node
44
- })
45
-
46
- export const makeChannelForConnectedMeshNode = <MsgListen, MsgSend, MsgListenEncoded, MsgSendEncoded>({
47
- target,
48
- node,
49
- schema,
50
- }: {
51
- node: MeshNode
52
- target: string
53
- schema: WebChannel.InputSchema<MsgListen, MsgSend, MsgListenEncoded, MsgSendEncoded>
54
- }) =>
55
- node.makeChannel({
56
- target,
57
- channelName: 'devtools(' + [node.nodeName, target].sort().join('↔') + ')',
58
- schema,
59
- mode: 'messagechannel',
60
- })
61
-
62
- export const makeWebDevtoolsChannel = <MsgListen, MsgSend, MsgListenEncoded, MsgSendEncoded>({
63
- nodeName,
64
- target,
65
- schema,
66
- worker,
67
- workerTargetName,
68
- }: {
69
- nodeName: string
70
- target: string
71
- schema: WebChannel.InputSchema<MsgListen, MsgSend, MsgListenEncoded, MsgSendEncoded>
72
- worker: Worker.SerializedWorkerPool<typeof WorkerSchema.Request.Type>
73
- workerTargetName: string
74
- }): Effect.Effect<WebChannel.WebChannel<MsgListen, MsgSend>, UnexpectedError, Scope.Scope> =>
75
- Effect.gen(function* () {
76
- const node = yield* makeWebDevtoolsConnectedMeshNode({ nodeName, target: workerTargetName, worker })
77
41
 
78
- globalThis.__debugWebmeshNode = node
79
-
80
- const channel = yield* makeChannelForConnectedMeshNode({ node, target, schema })
42
+ export const ClientSessionContentscriptMainRes = Schema.TaggedStruct('ClientSessionContentscriptMainRes', {
43
+ tabId: Schema.Number,
44
+ })
81
45
 
82
- return channel
83
- }).pipe(Effect.withSpan(`devtools-web-common:makeWebDevtoolsChannel`))
46
+ // Effect.suspend is needed since `window` is not available in the shared worker
47
+ export const makeStaticClientSessionChannel = {
48
+ contentscriptMain: Effect.suspend(() =>
49
+ WebChannel.windowChannel({
50
+ // eslint-disable-next-line unicorn/prefer-global-this
51
+ listenWindow: window,
52
+ // eslint-disable-next-line unicorn/prefer-global-this
53
+ sendWindow: window,
54
+ schema: { listen: ClientSessionContentscriptMainReq, send: ClientSessionContentscriptMainRes },
55
+ ids: { own: 'contentscript-main-static', other: 'client-session-static' },
56
+ }),
57
+ ),
58
+ clientSession: Effect.suspend(() =>
59
+ WebChannel.windowChannel({
60
+ // eslint-disable-next-line unicorn/prefer-global-this
61
+ listenWindow: window,
62
+ // eslint-disable-next-line unicorn/prefer-global-this
63
+ sendWindow: window,
64
+ schema: { listen: ClientSessionContentscriptMainRes, send: ClientSessionContentscriptMainReq },
65
+ ids: { own: 'client-session-static', other: 'contentscript-main-static' },
66
+ }),
67
+ ),
68
+ }
84
69
 
85
70
  export const connectViaWorker = ({
86
71
  node,
package/src/worker/mod.ts CHANGED
@@ -31,7 +31,7 @@ export const CreateConnection = ({ from, port }: typeof SharedWorkerSchema.Creat
31
31
  yield* node.addEdge({ target: from, edgeChannel: messagePortChannel, replaceIfExists: true })
32
32
 
33
33
  if (LS_DEV) {
34
- yield* Effect.logDebug(`@livestore/devtools-web-common: accepted connection: ${node.nodeName} ← ${from}`)
34
+ yield* Effect.logDebug(`@livestore/devtools-web-common: accepted edge: ${node.nodeName} ← ${from}`)
35
35
  }
36
36
 
37
37
  emit.single({})