@confect/js 10.0.0-next.2 → 10.0.0-next.21

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,16 +1,9 @@
1
- import * as Ref from "@confect/core/Ref";
2
1
  import { ConvexClient } from "convex/browser";
3
- import * as Cause from "effect/Cause";
4
2
  import * as Context from "effect/Context";
5
3
  import * as Effect from "effect/Effect";
6
4
  import * as Layer from "effect/Layer";
7
- import * as Schema from "effect/Schema";
8
- import * as Stream from "effect/Stream";
9
- declare const WebSocketClientError_base: Schema.Class<WebSocketClientError, Schema.TaggedStruct<"WebSocketClientError", {
10
- readonly cause: Schema.Unknown;
11
- }>, Cause.YieldableError>;
12
- export declare class WebSocketClientError extends WebSocketClientError_base {
13
- }
5
+ import * as InternalWebSocketClient from "./internal/WebSocketClient";
6
+ export { WebSocketClientError } from "./internal/WebSocketClient";
14
7
  /**
15
8
  * A Confect client which uses a WebSocket to communicate with your Convex backend and supports reactive query subscriptions. The WebSocket connection is managed by the layer's scope and closed automatically when the scope ends. Wraps [ConvexClient](https://docs.convex.dev/api/classes/browser.ConvexClient).
16
9
  */
@@ -19,19 +12,21 @@ export declare const WebSocketClient: Context.Service<{
19
12
  setAuth: (fetchToken: (args: {
20
13
  forceRefreshToken: boolean;
21
14
  }) => Effect.Effect<string | null | undefined>, onChange?: (isAuthenticated: boolean) => Effect.Effect<void>) => Effect.Effect<void, never, never>;
22
- query: <Query extends Ref.AnyPublicQuery>(ref: Query, ...rest: Ref.OptionalArgs<Query>) => Effect.Effect<Ref.Returns<Query>, Ref.Error<Query> | WebSocketClientError | Schema.SchemaError>;
23
- mutation: <Mutation extends Ref.AnyPublicMutation>(ref: Mutation, ...rest: Ref.OptionalArgs<Mutation>) => Effect.Effect<Ref.Returns<Mutation>, Ref.Error<Mutation> | WebSocketClientError | Schema.SchemaError>;
24
- action: <Action extends Ref.AnyPublicAction>(ref: Action, ...rest: Ref.OptionalArgs<Action>) => Effect.Effect<Ref.Returns<Action>, Ref.Error<Action> | WebSocketClientError | Schema.SchemaError>;
25
- reactiveQuery: <Query extends Ref.AnyPublicQuery>(ref: Query, ...rest: Ref.OptionalArgs<Query>) => Stream.Stream<Ref.Returns<Query>, Ref.Error<Query> | WebSocketClientError | Schema.SchemaError>;
15
+ query: <Query extends import("@confect/core/Ref").AnyPublicQuery>(ref: Query, ...rest: import("@confect/core/Ref").OptionalArgs<Query>) => Effect.Effect<import("@confect/core/Ref").Returns<Query>, import("@confect/core/Ref").Error<Query> | InternalWebSocketClient.WebSocketClientError | import("effect/Schema").SchemaError>;
16
+ mutation: <Mutation extends import("@confect/core/Ref").AnyPublicMutation>(ref: Mutation, ...rest: import("@confect/core/Ref").OptionalArgs<Mutation>) => Effect.Effect<import("@confect/core/Ref").Returns<Mutation>, import("@confect/core/Ref").Error<Mutation> | InternalWebSocketClient.WebSocketClientError | import("effect/Schema").SchemaError>;
17
+ action: <Action extends import("@confect/core/Ref").AnyPublicAction>(ref: Action, ...rest: import("@confect/core/Ref").OptionalArgs<Action>) => Effect.Effect<import("@confect/core/Ref").Returns<Action>, import("@confect/core/Ref").Error<Action> | InternalWebSocketClient.WebSocketClientError | import("effect/Schema").SchemaError>;
18
+ reactiveQuery: <Query extends import("@confect/core/Ref").AnyPublicQuery>(ref: Query, ...rest: import("@confect/core/Ref").OptionalArgs<Query>) => import("effect/Stream").Stream<import("@confect/core/Ref").Returns<Query>, import("effect/Schema").SchemaError | InternalWebSocketClient.WebSocketClientError | import("@confect/core/Ref").Error<Query>>;
19
+ reactiveQueryResult: <Query extends import("@confect/core/Ref").AnyPublicQuery>(ref: Query, ...rest: import("@confect/core/Ref").OptionalArgs<Query>) => import("effect/Stream").Stream<import("effect/Result").Result<import("@confect/core/Ref").Returns<Query>, import("effect/Schema").SchemaError | InternalWebSocketClient.WebSocketClientError | import("@confect/core/Ref").Error<Query>>>;
26
20
  }, {
27
21
  url: string;
28
22
  setAuth: (fetchToken: (args: {
29
23
  forceRefreshToken: boolean;
30
24
  }) => Effect.Effect<string | null | undefined>, onChange?: (isAuthenticated: boolean) => Effect.Effect<void>) => Effect.Effect<void, never, never>;
31
- query: <Query extends Ref.AnyPublicQuery>(ref: Query, ...rest: Ref.OptionalArgs<Query>) => Effect.Effect<Ref.Returns<Query>, Ref.Error<Query> | WebSocketClientError | Schema.SchemaError>;
32
- mutation: <Mutation extends Ref.AnyPublicMutation>(ref: Mutation, ...rest: Ref.OptionalArgs<Mutation>) => Effect.Effect<Ref.Returns<Mutation>, Ref.Error<Mutation> | WebSocketClientError | Schema.SchemaError>;
33
- action: <Action extends Ref.AnyPublicAction>(ref: Action, ...rest: Ref.OptionalArgs<Action>) => Effect.Effect<Ref.Returns<Action>, Ref.Error<Action> | WebSocketClientError | Schema.SchemaError>;
34
- reactiveQuery: <Query extends Ref.AnyPublicQuery>(ref: Query, ...rest: Ref.OptionalArgs<Query>) => Stream.Stream<Ref.Returns<Query>, Ref.Error<Query> | WebSocketClientError | Schema.SchemaError>;
25
+ query: <Query extends import("@confect/core/Ref").AnyPublicQuery>(ref: Query, ...rest: import("@confect/core/Ref").OptionalArgs<Query>) => Effect.Effect<import("@confect/core/Ref").Returns<Query>, import("@confect/core/Ref").Error<Query> | InternalWebSocketClient.WebSocketClientError | import("effect/Schema").SchemaError>;
26
+ mutation: <Mutation extends import("@confect/core/Ref").AnyPublicMutation>(ref: Mutation, ...rest: import("@confect/core/Ref").OptionalArgs<Mutation>) => Effect.Effect<import("@confect/core/Ref").Returns<Mutation>, import("@confect/core/Ref").Error<Mutation> | InternalWebSocketClient.WebSocketClientError | import("effect/Schema").SchemaError>;
27
+ action: <Action extends import("@confect/core/Ref").AnyPublicAction>(ref: Action, ...rest: import("@confect/core/Ref").OptionalArgs<Action>) => Effect.Effect<import("@confect/core/Ref").Returns<Action>, import("@confect/core/Ref").Error<Action> | InternalWebSocketClient.WebSocketClientError | import("effect/Schema").SchemaError>;
28
+ reactiveQuery: <Query extends import("@confect/core/Ref").AnyPublicQuery>(ref: Query, ...rest: import("@confect/core/Ref").OptionalArgs<Query>) => import("effect/Stream").Stream<import("@confect/core/Ref").Returns<Query>, import("effect/Schema").SchemaError | InternalWebSocketClient.WebSocketClientError | import("@confect/core/Ref").Error<Query>>;
29
+ reactiveQueryResult: <Query extends import("@confect/core/Ref").AnyPublicQuery>(ref: Query, ...rest: import("@confect/core/Ref").OptionalArgs<Query>) => import("effect/Stream").Stream<import("effect/Result").Result<import("@confect/core/Ref").Returns<Query>, import("effect/Schema").SchemaError | InternalWebSocketClient.WebSocketClientError | import("@confect/core/Ref").Error<Query>>>;
35
30
  }>;
36
31
  export type WebSocketClient = typeof WebSocketClient.Identifier;
37
32
  export declare const layer: (address: string, options?: ConstructorParameters<typeof ConvexClient>[1]) => Layer.Layer<{
@@ -39,10 +34,10 @@ export declare const layer: (address: string, options?: ConstructorParameters<ty
39
34
  setAuth: (fetchToken: (args: {
40
35
  forceRefreshToken: boolean;
41
36
  }) => Effect.Effect<string | null | undefined>, onChange?: (isAuthenticated: boolean) => Effect.Effect<void>) => Effect.Effect<void, never, never>;
42
- query: <Query extends Ref.AnyPublicQuery>(ref: Query, ...rest: Ref.OptionalArgs<Query>) => Effect.Effect<Ref.Returns<Query>, Ref.Error<Query> | WebSocketClientError | Schema.SchemaError>;
43
- mutation: <Mutation extends Ref.AnyPublicMutation>(ref: Mutation, ...rest: Ref.OptionalArgs<Mutation>) => Effect.Effect<Ref.Returns<Mutation>, Ref.Error<Mutation> | WebSocketClientError | Schema.SchemaError>;
44
- action: <Action extends Ref.AnyPublicAction>(ref: Action, ...rest: Ref.OptionalArgs<Action>) => Effect.Effect<Ref.Returns<Action>, Ref.Error<Action> | WebSocketClientError | Schema.SchemaError>;
45
- reactiveQuery: <Query extends Ref.AnyPublicQuery>(ref: Query, ...rest: Ref.OptionalArgs<Query>) => Stream.Stream<Ref.Returns<Query>, Ref.Error<Query> | WebSocketClientError | Schema.SchemaError>;
37
+ query: <Query extends import("@confect/core/Ref").AnyPublicQuery>(ref: Query, ...rest: import("@confect/core/Ref").OptionalArgs<Query>) => Effect.Effect<import("@confect/core/Ref").Returns<Query>, import("@confect/core/Ref").Error<Query> | InternalWebSocketClient.WebSocketClientError | import("effect/Schema").SchemaError>;
38
+ mutation: <Mutation extends import("@confect/core/Ref").AnyPublicMutation>(ref: Mutation, ...rest: import("@confect/core/Ref").OptionalArgs<Mutation>) => Effect.Effect<import("@confect/core/Ref").Returns<Mutation>, import("@confect/core/Ref").Error<Mutation> | InternalWebSocketClient.WebSocketClientError | import("effect/Schema").SchemaError>;
39
+ action: <Action extends import("@confect/core/Ref").AnyPublicAction>(ref: Action, ...rest: import("@confect/core/Ref").OptionalArgs<Action>) => Effect.Effect<import("@confect/core/Ref").Returns<Action>, import("@confect/core/Ref").Error<Action> | InternalWebSocketClient.WebSocketClientError | import("effect/Schema").SchemaError>;
40
+ reactiveQuery: <Query extends import("@confect/core/Ref").AnyPublicQuery>(ref: Query, ...rest: import("@confect/core/Ref").OptionalArgs<Query>) => import("effect/Stream").Stream<import("@confect/core/Ref").Returns<Query>, import("effect/Schema").SchemaError | InternalWebSocketClient.WebSocketClientError | import("@confect/core/Ref").Error<Query>>;
41
+ reactiveQueryResult: <Query extends import("@confect/core/Ref").AnyPublicQuery>(ref: Query, ...rest: import("@confect/core/Ref").OptionalArgs<Query>) => import("effect/Stream").Stream<import("effect/Result").Result<import("@confect/core/Ref").Returns<Query>, import("effect/Schema").SchemaError | InternalWebSocketClient.WebSocketClientError | import("@confect/core/Ref").Error<Query>>>;
46
42
  }, never, never>;
47
- export {};
48
43
  //# sourceMappingURL=WebSocketClient.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"WebSocketClient.d.ts","sourceRoot":"","sources":["../src/WebSocketClient.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"WebSocketClient.d.ts","sourceRoot":"","sources":["../src/WebSocketClient.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,YAAY,EAAE,MAAM,gBAAgB,CAAC;AAC9C,OAAO,KAAK,OAAO,MAAM,gBAAgB,CAAC;AAC1C,OAAO,KAAK,MAAM,MAAM,eAAe,CAAC;AACxC,OAAO,KAAK,KAAK,MAAM,cAAc,CAAC;AACtC,OAAO,KAAK,uBAAuB,MAAM,4BAA4B,CAAC;AAEtE,OAAO,EAAE,oBAAoB,EAAE,MAAM,4BAA4B,CAAC;AAiClE;;GAEG;AACH,eAAO,MAAM,eAAe;;;;;;;;;;;;;;;;;;;;EAEI,CAAC;AAEjC,MAAM,MAAM,eAAe,GAAG,OAAO,eAAe,CAAC,UAAU,CAAC;AAEhE,eAAO,MAAM,KAAK,YACP,MAAM,YACL,qBAAqB,CAAC,OAAO,YAAY,CAAC,CAAC,CAAC,CAAC;;;;;;;;;;gBACC,CAAC"}
@@ -1,61 +1,24 @@
1
1
  import { __exportAll } from "./_virtual/_rolldown/runtime.js";
2
- import * as Ref from "@confect/core/Ref";
2
+ import { WebSocketClientError, makeScoped } from "./internal/WebSocketClient.js";
3
3
  import { ConvexClient } from "convex/browser";
4
- import * as Cause from "effect/Cause";
5
4
  import * as Context from "effect/Context";
6
5
  import * as Effect from "effect/Effect";
7
6
  import * as Layer from "effect/Layer";
8
- import * as Queue from "effect/Queue";
9
- import * as Schema from "effect/Schema";
10
- import * as Stream from "effect/Stream";
11
7
  //#region src/WebSocketClient.ts
12
8
  var WebSocketClient_exports = /* @__PURE__ */ __exportAll({
13
9
  WebSocketClient: () => WebSocketClient,
14
10
  WebSocketClientError: () => WebSocketClientError,
15
11
  layer: () => layer
16
12
  });
17
- var WebSocketClientError = class extends Schema.TaggedErrorClass()("WebSocketClientError", { cause: Schema.Unknown }) {};
18
- const make = (address, options) => Effect.acquireRelease(Effect.sync(() => new ConvexClient(address, options)), (convexClient) => Effect.promise(() => convexClient.close())).pipe(Effect.map((convexClient) => {
19
- const url = address;
20
- const setAuth = (fetchToken, onChange) => Effect.sync(() => {
21
- convexClient.setAuth((args) => Effect.runPromise(fetchToken(args)), ...onChange ? [(isAuthenticated) => Effect.runFork(onChange(isAuthenticated))] : []);
22
- });
23
- const mapUnknownError = (cause) => new WebSocketClientError({ cause });
24
- const query = (ref, ...rest) => {
25
- const args = rest[0] ?? {};
26
- return Ref.runWithCodec(ref, args, (functionReference, encodedArgs) => convexClient.query(functionReference, encodedArgs), mapUnknownError);
27
- };
28
- const mutation = (ref, ...rest) => {
29
- const args = rest[0] ?? {};
30
- return Ref.runWithCodec(ref, args, (functionReference, encodedArgs) => convexClient.mutation(functionReference, encodedArgs), mapUnknownError);
31
- };
32
- const action = (ref, ...rest) => {
33
- const args = rest[0] ?? {};
34
- return Ref.runWithCodec(ref, args, (functionReference, encodedArgs) => convexClient.action(functionReference, encodedArgs), mapUnknownError);
35
- };
36
- const reactiveQuery = (ref, ...rest) => {
37
- const args = rest[0] ?? {};
38
- const functionReference = Ref.getFunctionReference(ref);
39
- const onError = Ref.decodeErrorOrElse(ref, mapUnknownError);
40
- return Stream.unwrap(Effect.gen(function* () {
41
- const encodedArgs = yield* Ref.encodeArgs(ref, args);
42
- return Stream.callback((queue) => Effect.gen(function* () {
43
- const unsubscribe = convexClient.onUpdate(functionReference, encodedArgs, (result) => {
44
- Queue.offerUnsafe(queue, result);
45
- }, (error) => {
46
- Queue.failCauseUnsafe(queue, Cause.fail(onError(error)));
47
- });
48
- yield* Effect.addFinalizer(() => Effect.sync(() => unsubscribe()));
49
- }));
50
- })).pipe(Stream.mapEffect((encodedReturns) => Ref.decodeReturns(ref, encodedReturns)));
51
- };
13
+ const make = (address, options) => makeScoped(address, Effect.sync(() => {
14
+ const convexClient = new ConvexClient(address, options);
52
15
  return {
53
- url,
54
- setAuth,
55
- query,
56
- mutation,
57
- action,
58
- reactiveQuery
16
+ setAuth: (fetchToken, onChange) => onChange === void 0 ? convexClient.setAuth(fetchToken) : convexClient.setAuth(fetchToken, onChange),
17
+ close: () => convexClient.close(),
18
+ query: (functionReference, encodedArgs) => convexClient.query(functionReference, encodedArgs),
19
+ mutation: (functionReference, encodedArgs) => convexClient.mutation(functionReference, encodedArgs),
20
+ action: (functionReference, encodedArgs) => convexClient.action(functionReference, encodedArgs),
21
+ onUpdate: (functionReference, encodedArgs, onUpdate, onError) => convexClient.onUpdate(functionReference, encodedArgs, onUpdate, onError)
59
22
  };
60
23
  }));
61
24
  /**
@@ -1 +1 @@
1
- {"version":3,"file":"WebSocketClient.js","names":[],"sources":["../src/WebSocketClient.ts"],"sourcesContent":["import * as Ref from \"@confect/core/Ref\";\nimport { ConvexClient } from \"convex/browser\";\nimport * as Cause from \"effect/Cause\";\nimport * as Context from \"effect/Context\";\nimport * as Effect from \"effect/Effect\";\nimport * as Layer from \"effect/Layer\";\nimport * as Queue from \"effect/Queue\";\nimport * as Schema from \"effect/Schema\";\nimport * as Stream from \"effect/Stream\";\n\nexport class WebSocketClientError extends Schema.TaggedErrorClass<WebSocketClientError>()(\n \"WebSocketClientError\",\n {\n cause: Schema.Unknown,\n },\n) {}\n\nconst make = (\n address: string,\n options?: ConstructorParameters<typeof ConvexClient>[1],\n) =>\n Effect.acquireRelease(\n Effect.sync(() => new ConvexClient(address, options)),\n (convexClient) => Effect.promise(() => convexClient.close()),\n ).pipe(\n Effect.map((convexClient) => {\n const url = address;\n\n const setAuth = (\n fetchToken: (args: {\n forceRefreshToken: boolean;\n }) => Effect.Effect<string | null | undefined>,\n onChange?: (isAuthenticated: boolean) => Effect.Effect<void>,\n ) =>\n Effect.sync(() => {\n convexClient.setAuth(\n (args) => Effect.runPromise(fetchToken(args)),\n ...(onChange\n ? [\n (isAuthenticated: boolean) =>\n Effect.runFork(onChange(isAuthenticated)),\n ]\n : []),\n );\n });\n\n const mapUnknownError = (cause: unknown) =>\n new WebSocketClientError({ cause });\n\n const query = <Query extends Ref.AnyPublicQuery>(\n ref: Query,\n ...rest: Ref.OptionalArgs<Query>\n ): Effect.Effect<\n Ref.Returns<Query>,\n Ref.Error<Query> | WebSocketClientError | Schema.SchemaError\n > => {\n const args = (rest[0] ?? {}) as Ref.Args<Query>;\n return Ref.runWithCodec(\n ref,\n args,\n (functionReference, encodedArgs) =>\n convexClient.query(functionReference, encodedArgs),\n mapUnknownError,\n );\n };\n\n const mutation = <Mutation extends Ref.AnyPublicMutation>(\n ref: Mutation,\n ...rest: Ref.OptionalArgs<Mutation>\n ): Effect.Effect<\n Ref.Returns<Mutation>,\n Ref.Error<Mutation> | WebSocketClientError | Schema.SchemaError\n > => {\n const args = (rest[0] ?? {}) as Ref.Args<Mutation>;\n return Ref.runWithCodec(\n ref,\n args,\n (functionReference, encodedArgs) =>\n convexClient.mutation(functionReference, encodedArgs),\n mapUnknownError,\n );\n };\n\n const action = <Action extends Ref.AnyPublicAction>(\n ref: Action,\n ...rest: Ref.OptionalArgs<Action>\n ): Effect.Effect<\n Ref.Returns<Action>,\n Ref.Error<Action> | WebSocketClientError | Schema.SchemaError\n > => {\n const args = (rest[0] ?? {}) as Ref.Args<Action>;\n return Ref.runWithCodec(\n ref,\n args,\n (functionReference, encodedArgs) =>\n convexClient.action(functionReference, encodedArgs),\n mapUnknownError,\n );\n };\n\n const reactiveQuery = <Query extends Ref.AnyPublicQuery>(\n ref: Query,\n ...rest: Ref.OptionalArgs<Query>\n ): Stream.Stream<\n Ref.Returns<Query>,\n Ref.Error<Query> | WebSocketClientError | Schema.SchemaError\n > => {\n const args = (rest[0] ?? {}) as Ref.Args<Query>;\n const functionReference = Ref.getFunctionReference(ref);\n const onError = Ref.decodeErrorOrElse(ref, mapUnknownError);\n\n return Stream.unwrap(\n Effect.gen(function* () {\n const encodedArgs = yield* Ref.encodeArgs(ref, args);\n\n return Stream.callback<\n unknown,\n Ref.Error<Query> | WebSocketClientError\n >((queue) =>\n Effect.gen(function* () {\n const unsubscribe = convexClient.onUpdate(\n functionReference,\n encodedArgs,\n (result) => {\n Queue.offerUnsafe(queue, result);\n },\n (error) => {\n Queue.failCauseUnsafe(queue, Cause.fail(onError(error)));\n },\n );\n yield* Effect.addFinalizer(() =>\n Effect.sync(() => unsubscribe()),\n );\n }),\n );\n }),\n ).pipe(\n Stream.mapEffect((encodedReturns) =>\n Ref.decodeReturns(ref, encodedReturns),\n ),\n );\n };\n\n return {\n url,\n setAuth,\n query,\n mutation,\n action,\n reactiveQuery,\n };\n }),\n );\n\n/**\n * A Confect client which uses a WebSocket to communicate with your Convex backend and supports reactive query subscriptions. The WebSocket connection is managed by the layer's scope and closed automatically when the scope ends. Wraps [ConvexClient](https://docs.convex.dev/api/classes/browser.ConvexClient).\n */\nexport const WebSocketClient = Context.Service<\n Effect.Success<ReturnType<typeof make>>\n>(\"@confect/js/WebSocketClient\");\n\nexport type WebSocketClient = typeof WebSocketClient.Identifier;\n\nexport const layer = (\n address: string,\n options?: ConstructorParameters<typeof ConvexClient>[1],\n) => Layer.effect(WebSocketClient, make(address, options));\n"],"mappings":";;;;;;;;;;;;;;;;AAUA,IAAa,uBAAb,cAA0C,OAAO,iBAAuC,CAAC,CACvF,wBACA,EACE,OAAO,OAAO,QAChB,CACF,CAAC,CAAC,CAAC;AAEH,MAAM,QACJ,SACA,YAEA,OAAO,eACL,OAAO,WAAW,IAAI,aAAa,SAAS,OAAO,CAAC,IACnD,iBAAiB,OAAO,cAAc,aAAa,MAAM,CAAC,CAC7D,CAAC,CAAC,KACA,OAAO,KAAK,iBAAiB;CAC3B,MAAM,MAAM;CAEZ,MAAM,WACJ,YAGA,aAEA,OAAO,WAAW;EAChB,aAAa,SACV,SAAS,OAAO,WAAW,WAAW,IAAI,CAAC,GAC5C,GAAI,WACA,EACG,oBACC,OAAO,QAAQ,SAAS,eAAe,CAAC,CAC5C,IACA,CAAC,CACP;CACF,CAAC;CAEH,MAAM,mBAAmB,UACvB,IAAI,qBAAqB,EAAE,MAAM,CAAC;CAEpC,MAAM,SACJ,KACA,GAAG,SAIA;EACH,MAAM,OAAQ,KAAK,MAAM,CAAC;EAC1B,OAAO,IAAI,aACT,KACA,OACC,mBAAmB,gBAClB,aAAa,MAAM,mBAAmB,WAAW,GACnD,eACF;CACF;CAEA,MAAM,YACJ,KACA,GAAG,SAIA;EACH,MAAM,OAAQ,KAAK,MAAM,CAAC;EAC1B,OAAO,IAAI,aACT,KACA,OACC,mBAAmB,gBAClB,aAAa,SAAS,mBAAmB,WAAW,GACtD,eACF;CACF;CAEA,MAAM,UACJ,KACA,GAAG,SAIA;EACH,MAAM,OAAQ,KAAK,MAAM,CAAC;EAC1B,OAAO,IAAI,aACT,KACA,OACC,mBAAmB,gBAClB,aAAa,OAAO,mBAAmB,WAAW,GACpD,eACF;CACF;CAEA,MAAM,iBACJ,KACA,GAAG,SAIA;EACH,MAAM,OAAQ,KAAK,MAAM,CAAC;EAC1B,MAAM,oBAAoB,IAAI,qBAAqB,GAAG;EACtD,MAAM,UAAU,IAAI,kBAAkB,KAAK,eAAe;EAE1D,OAAO,OAAO,OACZ,OAAO,IAAI,aAAa;GACtB,MAAM,cAAc,OAAO,IAAI,WAAW,KAAK,IAAI;GAEnD,OAAO,OAAO,UAGX,UACD,OAAO,IAAI,aAAa;IACtB,MAAM,cAAc,aAAa,SAC/B,mBACA,cACC,WAAW;KACV,MAAM,YAAY,OAAO,MAAM;IACjC,IACC,UAAU;KACT,MAAM,gBAAgB,OAAO,MAAM,KAAK,QAAQ,KAAK,CAAC,CAAC;IACzD,CACF;IACA,OAAO,OAAO,mBACZ,OAAO,WAAW,YAAY,CAAC,CACjC;GACF,CAAC,CACH;EACF,CAAC,CACH,CAAC,CAAC,KACA,OAAO,WAAW,mBAChB,IAAI,cAAc,KAAK,cAAc,CACvC,CACF;CACF;CAEA,OAAO;EACL;EACA;EACA;EACA;EACA;EACA;CACF;AACF,CAAC,CACH;;;;AAKF,MAAa,kBAAkB,QAAQ,QAErC,6BAA6B;AAI/B,MAAa,SACX,SACA,YACG,MAAM,OAAO,iBAAiB,KAAK,SAAS,OAAO,CAAC"}
1
+ {"version":3,"file":"WebSocketClient.js","names":["InternalWebSocketClient.makeScoped"],"sources":["../src/WebSocketClient.ts"],"sourcesContent":["import { ConvexClient } from \"convex/browser\";\nimport * as Context from \"effect/Context\";\nimport * as Effect from \"effect/Effect\";\nimport * as Layer from \"effect/Layer\";\nimport * as InternalWebSocketClient from \"./internal/WebSocketClient\";\n\nexport { WebSocketClientError } from \"./internal/WebSocketClient\";\n\nconst make = (\n address: string,\n options?: ConstructorParameters<typeof ConvexClient>[1],\n) =>\n InternalWebSocketClient.makeScoped(\n address,\n Effect.sync(() => {\n const convexClient = new ConvexClient(address, options);\n return {\n setAuth: (fetchToken, onChange) =>\n onChange === undefined\n ? convexClient.setAuth(fetchToken)\n : convexClient.setAuth(fetchToken, onChange),\n close: () => convexClient.close(),\n query: (functionReference, encodedArgs) =>\n convexClient.query(functionReference, encodedArgs),\n mutation: (functionReference, encodedArgs) =>\n convexClient.mutation(functionReference, encodedArgs),\n action: (functionReference, encodedArgs) =>\n convexClient.action(functionReference, encodedArgs),\n onUpdate: (functionReference, encodedArgs, onUpdate, onError) =>\n convexClient.onUpdate(\n functionReference,\n encodedArgs,\n onUpdate,\n onError,\n ),\n };\n }),\n );\n\n/**\n * A Confect client which uses a WebSocket to communicate with your Convex backend and supports reactive query subscriptions. The WebSocket connection is managed by the layer's scope and closed automatically when the scope ends. Wraps [ConvexClient](https://docs.convex.dev/api/classes/browser.ConvexClient).\n */\nexport const WebSocketClient = Context.Service<\n Effect.Success<ReturnType<typeof make>>\n>(\"@confect/js/WebSocketClient\");\n\nexport type WebSocketClient = typeof WebSocketClient.Identifier;\n\nexport const layer = (\n address: string,\n options?: ConstructorParameters<typeof ConvexClient>[1],\n) => Layer.effect(WebSocketClient, make(address, options));\n"],"mappings":";;;;;;;;;;;;AAQA,MAAM,QACJ,SACA,YAEAA,WACE,SACA,OAAO,WAAW;CAChB,MAAM,eAAe,IAAI,aAAa,SAAS,OAAO;CACtD,OAAO;EACL,UAAU,YAAY,aACpB,aAAa,KAAA,IACT,aAAa,QAAQ,UAAU,IAC/B,aAAa,QAAQ,YAAY,QAAQ;EAC/C,aAAa,aAAa,MAAM;EAChC,QAAQ,mBAAmB,gBACzB,aAAa,MAAM,mBAAmB,WAAW;EACnD,WAAW,mBAAmB,gBAC5B,aAAa,SAAS,mBAAmB,WAAW;EACtD,SAAS,mBAAmB,gBAC1B,aAAa,OAAO,mBAAmB,WAAW;EACpD,WAAW,mBAAmB,aAAa,UAAU,YACnD,aAAa,SACX,mBACA,aACA,UACA,OACF;CACJ;AACF,CAAC,CACH;;;;AAKF,MAAa,kBAAkB,QAAQ,QAErC,6BAA6B;AAI/B,MAAa,SACX,SACA,YACG,MAAM,OAAO,iBAAiB,KAAK,SAAS,OAAO,CAAC"}
@@ -0,0 +1,26 @@
1
+ import * as Ref from "@confect/core/Ref";
2
+ import * as Effect from "effect/Effect";
3
+ import * as Schema from "effect/Schema";
4
+ declare const HttpClientError_base: Schema.Class<HttpClientError, Schema.TaggedStruct<"HttpClientError", {
5
+ readonly cause: Schema.Unknown;
6
+ }>, import("effect/Cause").YieldableError>;
7
+ export declare class HttpClientError extends HttpClientError_base {
8
+ }
9
+ export interface Transport {
10
+ readonly url: string;
11
+ readonly setAuth: (token: string) => void;
12
+ readonly clearAuth: () => void;
13
+ readonly query: (functionReference: Ref.FunctionReference<Ref.AnyPublicQuery>, encodedArgs: unknown) => PromiseLike<unknown>;
14
+ readonly mutation: (functionReference: Ref.FunctionReference<Ref.AnyPublicMutation>, encodedArgs: unknown) => PromiseLike<unknown>;
15
+ readonly action: (functionReference: Ref.FunctionReference<Ref.AnyPublicAction>, encodedArgs: unknown) => PromiseLike<unknown>;
16
+ }
17
+ export declare const make: (client: Transport) => {
18
+ url: string;
19
+ setAuth: (token: string) => Effect.Effect<void, never, never>;
20
+ clearAuth: Effect.Effect<void, never, never>;
21
+ query: <Query extends Ref.AnyPublicQuery>(ref: Query, ...rest: Ref.OptionalArgs<Query>) => Effect.Effect<Ref.Returns<Query>, Ref.Error<Query> | HttpClientError | Schema.SchemaError>;
22
+ mutation: <Mutation extends Ref.AnyPublicMutation>(ref: Mutation, ...rest: Ref.OptionalArgs<Mutation>) => Effect.Effect<Ref.Returns<Mutation>, Ref.Error<Mutation> | HttpClientError | Schema.SchemaError>;
23
+ action: <Action extends Ref.AnyPublicAction>(ref: Action, ...rest: Ref.OptionalArgs<Action>) => Effect.Effect<Ref.Returns<Action>, Ref.Error<Action> | HttpClientError | Schema.SchemaError>;
24
+ };
25
+ export {};
26
+ //# sourceMappingURL=HttpClient.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"HttpClient.d.ts","sourceRoot":"","sources":["../../src/internal/HttpClient.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,GAAG,MAAM,mBAAmB,CAAC;AACzC,OAAO,KAAK,MAAM,MAAM,eAAe,CAAC;AACxC,OAAO,KAAK,MAAM,MAAM,eAAe,CAAC;;;;AAExC,qBAAa,eAAgB,SAAQ,oBAKpC;CAAG;AAEJ,MAAM,WAAW,SAAS;IACxB,QAAQ,CAAC,GAAG,EAAE,MAAM,CAAC;IACrB,QAAQ,CAAC,OAAO,EAAE,CAAC,KAAK,EAAE,MAAM,KAAK,IAAI,CAAC;IAC1C,QAAQ,CAAC,SAAS,EAAE,MAAM,IAAI,CAAC;IAC/B,QAAQ,CAAC,KAAK,EAAE,CACd,iBAAiB,EAAE,GAAG,CAAC,iBAAiB,CAAC,GAAG,CAAC,cAAc,CAAC,EAC5D,WAAW,EAAE,OAAO,KACjB,WAAW,CAAC,OAAO,CAAC,CAAC;IAC1B,QAAQ,CAAC,QAAQ,EAAE,CACjB,iBAAiB,EAAE,GAAG,CAAC,iBAAiB,CAAC,GAAG,CAAC,iBAAiB,CAAC,EAC/D,WAAW,EAAE,OAAO,KACjB,WAAW,CAAC,OAAO,CAAC,CAAC;IAC1B,QAAQ,CAAC,MAAM,EAAE,CACf,iBAAiB,EAAE,GAAG,CAAC,iBAAiB,CAAC,GAAG,CAAC,eAAe,CAAC,EAC7D,WAAW,EAAE,OAAO,KACjB,WAAW,CAAC,OAAO,CAAC,CAAC;CAC3B;AAED,eAAO,MAAM,IAAI,WAAY,SAAS;;qBACZ,MAAM;;YAWf,KAAK,SAAS,GAAG,CAAC,cAAc,OACxC,KAAK,WACD,GAAG,CAAC,YAAY,CAAC,KAAK,CAAC,KAC/B,MAAM,CAAC,MAAM,CACd,GAAG,CAAC,OAAO,CAAC,KAAK,CAAC,EAClB,GAAG,CAAC,KAAK,CAAC,KAAK,CAAC,GAAG,eAAe,GAAG,MAAM,CAAC,WAAW,CACxD;eAWiB,QAAQ,SAAS,GAAG,CAAC,iBAAiB,OACjD,QAAQ,WACJ,GAAG,CAAC,YAAY,CAAC,QAAQ,CAAC,KAClC,MAAM,CAAC,MAAM,CACd,GAAG,CAAC,OAAO,CAAC,QAAQ,CAAC,EACrB,GAAG,CAAC,KAAK,CAAC,QAAQ,CAAC,GAAG,eAAe,GAAG,MAAM,CAAC,WAAW,CAC3D;aAWe,MAAM,SAAS,GAAG,CAAC,eAAe,OAC3C,MAAM,WACF,GAAG,CAAC,YAAY,CAAC,MAAM,CAAC,KAChC,MAAM,CAAC,MAAM,CACd,GAAG,CAAC,OAAO,CAAC,MAAM,CAAC,EACnB,GAAG,CAAC,KAAK,CAAC,MAAM,CAAC,GAAG,eAAe,GAAG,MAAM,CAAC,WAAW,CACzD;CAmBF,CAAC"}
@@ -0,0 +1,38 @@
1
+ import * as Effect from "effect/Effect";
2
+ import * as Ref from "@confect/core/Ref";
3
+ import * as Schema from "effect/Schema";
4
+ //#region src/internal/HttpClient.ts
5
+ var HttpClientError = class extends Schema.TaggedError()("HttpClientError", { cause: Schema.Unknown }) {};
6
+ const make = (client) => {
7
+ const setAuth = (token) => Effect.sync(() => {
8
+ client.setAuth(token);
9
+ });
10
+ const clearAuth = Effect.sync(() => {
11
+ client.clearAuth();
12
+ });
13
+ const mapUnknownError = (cause) => new HttpClientError({ cause });
14
+ const query = (ref, ...rest) => {
15
+ const args = rest[0] ?? {};
16
+ return Ref.runWithCodec(ref, args, (functionReference, encodedArgs) => client.query(functionReference, encodedArgs), mapUnknownError);
17
+ };
18
+ const mutation = (ref, ...rest) => {
19
+ const args = rest[0] ?? {};
20
+ return Ref.runWithCodec(ref, args, (functionReference, encodedArgs) => client.mutation(functionReference, encodedArgs), mapUnknownError);
21
+ };
22
+ const action = (ref, ...rest) => {
23
+ const args = rest[0] ?? {};
24
+ return Ref.runWithCodec(ref, args, (functionReference, encodedArgs) => client.action(functionReference, encodedArgs), mapUnknownError);
25
+ };
26
+ return {
27
+ url: client.url,
28
+ setAuth,
29
+ clearAuth,
30
+ query,
31
+ mutation,
32
+ action
33
+ };
34
+ };
35
+ //#endregion
36
+ export { HttpClientError, make };
37
+
38
+ //# sourceMappingURL=HttpClient.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"HttpClient.js","names":[],"sources":["../../src/internal/HttpClient.ts"],"sourcesContent":["import * as Ref from \"@confect/core/Ref\";\nimport * as Effect from \"effect/Effect\";\nimport * as Schema from \"effect/Schema\";\n\nexport class HttpClientError extends Schema.TaggedError<HttpClientError>()(\n \"HttpClientError\",\n {\n cause: Schema.Unknown,\n },\n) {}\n\nexport interface Transport {\n readonly url: string;\n readonly setAuth: (token: string) => void;\n readonly clearAuth: () => void;\n readonly query: (\n functionReference: Ref.FunctionReference<Ref.AnyPublicQuery>,\n encodedArgs: unknown,\n ) => PromiseLike<unknown>;\n readonly mutation: (\n functionReference: Ref.FunctionReference<Ref.AnyPublicMutation>,\n encodedArgs: unknown,\n ) => PromiseLike<unknown>;\n readonly action: (\n functionReference: Ref.FunctionReference<Ref.AnyPublicAction>,\n encodedArgs: unknown,\n ) => PromiseLike<unknown>;\n}\n\nexport const make = (client: Transport) => {\n const setAuth = (token: string) =>\n Effect.sync(() => {\n client.setAuth(token);\n });\n\n const clearAuth = Effect.sync(() => {\n client.clearAuth();\n });\n\n const mapUnknownError = (cause: unknown) => new HttpClientError({ cause });\n\n const query = <Query extends Ref.AnyPublicQuery>(\n ref: Query,\n ...rest: Ref.OptionalArgs<Query>\n ): Effect.Effect<\n Ref.Returns<Query>,\n Ref.Error<Query> | HttpClientError | Schema.SchemaError\n > => {\n const args = (rest[0] ?? {}) as Ref.Args<Query>;\n return Ref.runWithCodec(\n ref,\n args,\n (functionReference, encodedArgs) =>\n client.query(functionReference, encodedArgs),\n mapUnknownError,\n );\n };\n\n const mutation = <Mutation extends Ref.AnyPublicMutation>(\n ref: Mutation,\n ...rest: Ref.OptionalArgs<Mutation>\n ): Effect.Effect<\n Ref.Returns<Mutation>,\n Ref.Error<Mutation> | HttpClientError | Schema.SchemaError\n > => {\n const args = (rest[0] ?? {}) as Ref.Args<Mutation>;\n return Ref.runWithCodec(\n ref,\n args,\n (functionReference, encodedArgs) =>\n client.mutation(functionReference, encodedArgs),\n mapUnknownError,\n );\n };\n\n const action = <Action extends Ref.AnyPublicAction>(\n ref: Action,\n ...rest: Ref.OptionalArgs<Action>\n ): Effect.Effect<\n Ref.Returns<Action>,\n Ref.Error<Action> | HttpClientError | Schema.SchemaError\n > => {\n const args = (rest[0] ?? {}) as Ref.Args<Action>;\n return Ref.runWithCodec(\n ref,\n args,\n (functionReference, encodedArgs) =>\n client.action(functionReference, encodedArgs),\n mapUnknownError,\n );\n };\n\n return {\n url: client.url,\n setAuth,\n clearAuth,\n query,\n mutation,\n action,\n };\n};\n"],"mappings":";;;;AAIA,IAAa,kBAAb,cAAqC,OAAO,YAA6B,CAAC,CACxE,mBACA,EACE,OAAO,OAAO,QAChB,CACF,CAAC,CAAC,CAAC;AAoBH,MAAa,QAAQ,WAAsB;CACzC,MAAM,WAAW,UACf,OAAO,WAAW;EAChB,OAAO,QAAQ,KAAK;CACtB,CAAC;CAEH,MAAM,YAAY,OAAO,WAAW;EAClC,OAAO,UAAU;CACnB,CAAC;CAED,MAAM,mBAAmB,UAAmB,IAAI,gBAAgB,EAAE,MAAM,CAAC;CAEzE,MAAM,SACJ,KACA,GAAG,SAIA;EACH,MAAM,OAAQ,KAAK,MAAM,CAAC;EAC1B,OAAO,IAAI,aACT,KACA,OACC,mBAAmB,gBAClB,OAAO,MAAM,mBAAmB,WAAW,GAC7C,eACF;CACF;CAEA,MAAM,YACJ,KACA,GAAG,SAIA;EACH,MAAM,OAAQ,KAAK,MAAM,CAAC;EAC1B,OAAO,IAAI,aACT,KACA,OACC,mBAAmB,gBAClB,OAAO,SAAS,mBAAmB,WAAW,GAChD,eACF;CACF;CAEA,MAAM,UACJ,KACA,GAAG,SAIA;EACH,MAAM,OAAQ,KAAK,MAAM,CAAC;EAC1B,OAAO,IAAI,aACT,KACA,OACC,mBAAmB,gBAClB,OAAO,OAAO,mBAAmB,WAAW,GAC9C,eACF;CACF;CAEA,OAAO;EACL,KAAK,OAAO;EACZ;EACA;EACA;EACA;EACA;CACF;AACF"}
@@ -0,0 +1,44 @@
1
+ import * as Ref from "@confect/core/Ref";
2
+ import * as Effect from "effect/Effect";
3
+ import * as Result from "effect/Result";
4
+ import * as Schema from "effect/Schema";
5
+ import * as Stream from "effect/Stream";
6
+ declare const WebSocketClientError_base: Schema.Class<WebSocketClientError, Schema.TaggedStruct<"WebSocketClientError", {
7
+ readonly cause: Schema.Defect;
8
+ }>, import("effect/Cause").YieldableError>;
9
+ export declare class WebSocketClientError extends WebSocketClientError_base {
10
+ }
11
+ export interface Transport {
12
+ readonly setAuth: (fetchToken: (args: {
13
+ readonly forceRefreshToken: boolean;
14
+ }) => Promise<string | null | undefined>, onChange?: (isAuthenticated: boolean) => void) => void;
15
+ readonly close: () => Promise<void>;
16
+ readonly query: (functionReference: Ref.FunctionReference<Ref.AnyPublicQuery>, encodedArgs: unknown) => PromiseLike<unknown>;
17
+ readonly mutation: (functionReference: Ref.FunctionReference<Ref.AnyPublicMutation>, encodedArgs: unknown) => PromiseLike<unknown>;
18
+ readonly action: (functionReference: Ref.FunctionReference<Ref.AnyPublicAction>, encodedArgs: unknown) => PromiseLike<unknown>;
19
+ readonly onUpdate: (functionReference: Ref.FunctionReference<Ref.AnyPublicQuery>, encodedArgs: unknown, onUpdate: (result: unknown) => void, onError: (error: Error) => void) => () => void;
20
+ }
21
+ export declare const make: (address: string, convexClient: Transport) => {
22
+ url: string;
23
+ setAuth: (fetchToken: (args: {
24
+ forceRefreshToken: boolean;
25
+ }) => Effect.Effect<string | null | undefined>, onChange?: (isAuthenticated: boolean) => Effect.Effect<void>) => Effect.Effect<void, never, never>;
26
+ query: <Query extends Ref.AnyPublicQuery>(ref: Query, ...rest: Ref.OptionalArgs<Query>) => Effect.Effect<Ref.Returns<Query>, Ref.Error<Query> | WebSocketClientError | Schema.SchemaError>;
27
+ mutation: <Mutation extends Ref.AnyPublicMutation>(ref: Mutation, ...rest: Ref.OptionalArgs<Mutation>) => Effect.Effect<Ref.Returns<Mutation>, Ref.Error<Mutation> | WebSocketClientError | Schema.SchemaError>;
28
+ action: <Action extends Ref.AnyPublicAction>(ref: Action, ...rest: Ref.OptionalArgs<Action>) => Effect.Effect<Ref.Returns<Action>, Ref.Error<Action> | WebSocketClientError | Schema.SchemaError>;
29
+ reactiveQuery: <Query extends Ref.AnyPublicQuery>(ref: Query, ...rest: Ref.OptionalArgs<Query>) => Stream.Stream<Ref.Returns<Query>, Schema.SchemaError | WebSocketClientError | Ref.Error<Query>>;
30
+ reactiveQueryResult: <Query extends Ref.AnyPublicQuery>(ref: Query, ...rest: Ref.OptionalArgs<Query>) => Stream.Stream<Result.Result<Ref.Returns<Query>, Schema.SchemaError | WebSocketClientError | Ref.Error<Query>>>;
31
+ };
32
+ export declare const makeScoped: <E, R>(address: string, acquire: Effect.Effect<Transport, E, R>) => Effect.Effect<{
33
+ url: string;
34
+ setAuth: (fetchToken: (args: {
35
+ forceRefreshToken: boolean;
36
+ }) => Effect.Effect<string | null | undefined>, onChange?: (isAuthenticated: boolean) => Effect.Effect<void>) => Effect.Effect<void, never, never>;
37
+ query: <Query extends Ref.AnyPublicQuery>(ref: Query, ...rest: Ref.OptionalArgs<Query>) => Effect.Effect<Ref.Returns<Query>, Ref.Error<Query> | WebSocketClientError | Schema.SchemaError>;
38
+ mutation: <Mutation extends Ref.AnyPublicMutation>(ref: Mutation, ...rest: Ref.OptionalArgs<Mutation>) => Effect.Effect<Ref.Returns<Mutation>, Ref.Error<Mutation> | WebSocketClientError | Schema.SchemaError>;
39
+ action: <Action extends Ref.AnyPublicAction>(ref: Action, ...rest: Ref.OptionalArgs<Action>) => Effect.Effect<Ref.Returns<Action>, Ref.Error<Action> | WebSocketClientError | Schema.SchemaError>;
40
+ reactiveQuery: <Query extends Ref.AnyPublicQuery>(ref: Query, ...rest: Ref.OptionalArgs<Query>) => Stream.Stream<Ref.Returns<Query>, Schema.SchemaError | WebSocketClientError | Ref.Error<Query>>;
41
+ reactiveQueryResult: <Query extends Ref.AnyPublicQuery>(ref: Query, ...rest: Ref.OptionalArgs<Query>) => Stream.Stream<Result.Result<Ref.Returns<Query>, Schema.SchemaError | WebSocketClientError | Ref.Error<Query>>>;
42
+ }, E, R | import("effect/Scope").Scope>;
43
+ export {};
44
+ //# sourceMappingURL=WebSocketClient.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"WebSocketClient.d.ts","sourceRoot":"","sources":["../../src/internal/WebSocketClient.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,66 @@
1
+ import * as Effect from "effect/Effect";
2
+ import * as Ref from "@confect/core/Ref";
3
+ import * as Queue from "effect/Queue";
4
+ import * as Result from "effect/Result";
5
+ import * as Schema from "effect/Schema";
6
+ import * as Stream from "effect/Stream";
7
+ //#region src/internal/WebSocketClient.ts
8
+ var WebSocketClientError = class extends Schema.TaggedError()("WebSocketClientError", { cause: Schema.Defect() }) {};
9
+ const make = (address, convexClient) => {
10
+ const setAuth = (fetchToken, onChange) => Effect.sync(() => {
11
+ convexClient.setAuth((args) => Effect.runPromise(fetchToken(args)), ...onChange ? [(isAuthenticated) => Effect.runFork(onChange(isAuthenticated))] : []);
12
+ });
13
+ const mapUnknownError = (cause) => new WebSocketClientError({ cause });
14
+ const query = (ref, ...rest) => {
15
+ const args = rest[0] ?? {};
16
+ return Ref.runWithCodec(ref, args, (functionReference, encodedArgs) => convexClient.query(functionReference, encodedArgs), mapUnknownError);
17
+ };
18
+ const mutation = (ref, ...rest) => {
19
+ const args = rest[0] ?? {};
20
+ return Ref.runWithCodec(ref, args, (functionReference, encodedArgs) => convexClient.mutation(functionReference, encodedArgs), mapUnknownError);
21
+ };
22
+ const action = (ref, ...rest) => {
23
+ const args = rest[0] ?? {};
24
+ return Ref.runWithCodec(ref, args, (functionReference, encodedArgs) => convexClient.action(functionReference, encodedArgs), mapUnknownError);
25
+ };
26
+ const reactiveQueryResult = (ref, ...rest) => {
27
+ const args = rest[0] ?? {};
28
+ const functionReference = Ref.getFunctionReference(ref);
29
+ const onError = Ref.decodeErrorOrElse(ref, mapUnknownError);
30
+ return Stream.unwrap(Effect.match(Ref.encodeArgs(ref, args), {
31
+ onFailure: (error) => Stream.succeed(Result.fail(error)),
32
+ onSuccess: (encodedArgs) => Stream.callback((queue) => Effect.gen(function* () {
33
+ const unsubscribe = convexClient.onUpdate(functionReference, encodedArgs, (result) => {
34
+ Queue.offerUnsafe(queue, Result.succeed(result));
35
+ }, (error) => {
36
+ Queue.offerUnsafe(queue, Result.fail(onError(error)));
37
+ });
38
+ yield* Effect.addFinalizer(() => Effect.sync(() => unsubscribe()));
39
+ }))
40
+ })).pipe(Stream.mapEffect((result) => Result.match(result, {
41
+ onFailure: (error) => Effect.succeed(Result.fail(error)),
42
+ onSuccess: (encodedReturns) => Effect.match(Ref.decodeReturns(ref, encodedReturns), {
43
+ onFailure: Result.fail,
44
+ onSuccess: Result.succeed
45
+ })
46
+ })));
47
+ };
48
+ const reactiveQuery = (ref, ...rest) => reactiveQueryResult(ref, ...rest).pipe(Stream.mapEffect(Result.match({
49
+ onFailure: Effect.fail,
50
+ onSuccess: Effect.succeed
51
+ })));
52
+ return {
53
+ url: address,
54
+ setAuth,
55
+ query,
56
+ mutation,
57
+ action,
58
+ reactiveQuery,
59
+ reactiveQueryResult
60
+ };
61
+ };
62
+ const makeScoped = (address, acquire) => Effect.acquireRelease(acquire, (convexClient) => Effect.promise(() => convexClient.close())).pipe(Effect.map((convexClient) => make(address, convexClient)));
63
+ //#endregion
64
+ export { WebSocketClientError, make, makeScoped };
65
+
66
+ //# sourceMappingURL=WebSocketClient.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"WebSocketClient.js","names":[],"sources":["../../src/internal/WebSocketClient.ts"],"sourcesContent":["import * as Ref from \"@confect/core/Ref\";\nimport * as Effect from \"effect/Effect\";\nimport * as Queue from \"effect/Queue\";\nimport * as Result from \"effect/Result\";\nimport * as Schema from \"effect/Schema\";\nimport * as Stream from \"effect/Stream\";\n\nexport class WebSocketClientError extends Schema.TaggedError<WebSocketClientError>()(\n \"WebSocketClientError\",\n {\n cause: Schema.Defect(),\n },\n) {}\n\nexport interface Transport {\n readonly setAuth: (\n fetchToken: (args: {\n readonly forceRefreshToken: boolean;\n }) => Promise<string | null | undefined>,\n onChange?: (isAuthenticated: boolean) => void,\n ) => void;\n readonly close: () => Promise<void>;\n readonly query: (\n functionReference: Ref.FunctionReference<Ref.AnyPublicQuery>,\n encodedArgs: unknown,\n ) => PromiseLike<unknown>;\n readonly mutation: (\n functionReference: Ref.FunctionReference<Ref.AnyPublicMutation>,\n encodedArgs: unknown,\n ) => PromiseLike<unknown>;\n readonly action: (\n functionReference: Ref.FunctionReference<Ref.AnyPublicAction>,\n encodedArgs: unknown,\n ) => PromiseLike<unknown>;\n readonly onUpdate: (\n functionReference: Ref.FunctionReference<Ref.AnyPublicQuery>,\n encodedArgs: unknown,\n onUpdate: (result: unknown) => void,\n onError: (error: Error) => void,\n ) => () => void;\n}\n\nexport const make = (address: string, convexClient: Transport) => {\n const setAuth = (\n fetchToken: (args: {\n forceRefreshToken: boolean;\n }) => Effect.Effect<string | null | undefined>,\n onChange?: (isAuthenticated: boolean) => Effect.Effect<void>,\n ) =>\n Effect.sync(() => {\n convexClient.setAuth(\n (args) => Effect.runPromise(fetchToken(args)),\n ...(onChange\n ? [\n (isAuthenticated: boolean) =>\n Effect.runFork(onChange(isAuthenticated)),\n ]\n : []),\n );\n });\n\n const mapUnknownError = (cause: unknown) =>\n new WebSocketClientError({ cause });\n\n const query = <Query extends Ref.AnyPublicQuery>(\n ref: Query,\n ...rest: Ref.OptionalArgs<Query>\n ): Effect.Effect<\n Ref.Returns<Query>,\n Ref.Error<Query> | WebSocketClientError | Schema.SchemaError\n > => {\n const args = (rest[0] ?? {}) as Ref.Args<Query>;\n return Ref.runWithCodec(\n ref,\n args,\n (functionReference, encodedArgs) =>\n convexClient.query(functionReference, encodedArgs),\n mapUnknownError,\n );\n };\n\n const mutation = <Mutation extends Ref.AnyPublicMutation>(\n ref: Mutation,\n ...rest: Ref.OptionalArgs<Mutation>\n ): Effect.Effect<\n Ref.Returns<Mutation>,\n Ref.Error<Mutation> | WebSocketClientError | Schema.SchemaError\n > => {\n const args = (rest[0] ?? {}) as Ref.Args<Mutation>;\n return Ref.runWithCodec(\n ref,\n args,\n (functionReference, encodedArgs) =>\n convexClient.mutation(functionReference, encodedArgs),\n mapUnknownError,\n );\n };\n\n const action = <Action extends Ref.AnyPublicAction>(\n ref: Action,\n ...rest: Ref.OptionalArgs<Action>\n ): Effect.Effect<\n Ref.Returns<Action>,\n Ref.Error<Action> | WebSocketClientError | Schema.SchemaError\n > => {\n const args = (rest[0] ?? {}) as Ref.Args<Action>;\n return Ref.runWithCodec(\n ref,\n args,\n (functionReference, encodedArgs) =>\n convexClient.action(functionReference, encodedArgs),\n mapUnknownError,\n );\n };\n\n type ReactiveQueryError<Query extends Ref.AnyPublicQuery> =\n | Ref.Error<Query>\n | WebSocketClientError\n | Schema.SchemaError;\n\n const reactiveQueryResult = <Query extends Ref.AnyPublicQuery>(\n ref: Query,\n ...rest: Ref.OptionalArgs<Query>\n ): Stream.Stream<\n Result.Result<Ref.Returns<Query>, ReactiveQueryError<Query>>\n > => {\n type QueryResult = Result.Result<\n Ref.Returns<Query>,\n ReactiveQueryError<Query>\n >;\n const args = (rest[0] ?? {}) as Ref.Args<Query>;\n const functionReference = Ref.getFunctionReference(ref);\n const onError = Ref.decodeErrorOrElse(ref, mapUnknownError);\n\n return Stream.unwrap(\n Effect.match(Ref.encodeArgs(ref, args), {\n onFailure: (error) => Stream.succeed<QueryResult>(Result.fail(error)),\n onSuccess: (encodedArgs) =>\n Stream.callback<Result.Result<unknown, ReactiveQueryError<Query>>>(\n (queue) =>\n Effect.gen(function* () {\n const unsubscribe = convexClient.onUpdate(\n functionReference,\n encodedArgs,\n (result) => {\n Queue.offerUnsafe(queue, Result.succeed(result));\n },\n (error) => {\n Queue.offerUnsafe(queue, Result.fail(onError(error)));\n },\n );\n yield* Effect.addFinalizer(() =>\n Effect.sync(() => unsubscribe()),\n );\n }),\n ),\n }),\n ).pipe(\n Stream.mapEffect((result): Effect.Effect<QueryResult> =>\n Result.match(result, {\n onFailure: (error) => Effect.succeed(Result.fail(error)),\n onSuccess: (encodedReturns) =>\n Effect.match(Ref.decodeReturns(ref, encodedReturns), {\n onFailure: Result.fail,\n onSuccess: Result.succeed,\n }),\n }),\n ),\n );\n };\n\n const reactiveQuery = <Query extends Ref.AnyPublicQuery>(\n ref: Query,\n ...rest: Ref.OptionalArgs<Query>\n ): Stream.Stream<Ref.Returns<Query>, ReactiveQueryError<Query>> =>\n reactiveQueryResult(ref, ...rest).pipe(\n Stream.mapEffect(\n Result.match({\n onFailure: Effect.fail,\n onSuccess: Effect.succeed,\n }),\n ),\n );\n\n return {\n url: address,\n setAuth,\n query,\n mutation,\n action,\n reactiveQuery,\n reactiveQueryResult,\n };\n};\n\nexport const makeScoped = <E, R>(\n address: string,\n acquire: Effect.Effect<Transport, E, R>,\n) =>\n Effect.acquireRelease(acquire, (convexClient) =>\n Effect.promise(() => convexClient.close()),\n ).pipe(Effect.map((convexClient) => make(address, convexClient)));\n"],"mappings":";;;;;;;AAOA,IAAa,uBAAb,cAA0C,OAAO,YAAkC,CAAC,CAClF,wBACA,EACE,OAAO,OAAO,OAAO,EACvB,CACF,CAAC,CAAC,CAAC;AA8BH,MAAa,QAAQ,SAAiB,iBAA4B;CAChE,MAAM,WACJ,YAGA,aAEA,OAAO,WAAW;EAChB,aAAa,SACV,SAAS,OAAO,WAAW,WAAW,IAAI,CAAC,GAC5C,GAAI,WACA,EACG,oBACC,OAAO,QAAQ,SAAS,eAAe,CAAC,CAC5C,IACA,CAAC,CACP;CACF,CAAC;CAEH,MAAM,mBAAmB,UACvB,IAAI,qBAAqB,EAAE,MAAM,CAAC;CAEpC,MAAM,SACJ,KACA,GAAG,SAIA;EACH,MAAM,OAAQ,KAAK,MAAM,CAAC;EAC1B,OAAO,IAAI,aACT,KACA,OACC,mBAAmB,gBAClB,aAAa,MAAM,mBAAmB,WAAW,GACnD,eACF;CACF;CAEA,MAAM,YACJ,KACA,GAAG,SAIA;EACH,MAAM,OAAQ,KAAK,MAAM,CAAC;EAC1B,OAAO,IAAI,aACT,KACA,OACC,mBAAmB,gBAClB,aAAa,SAAS,mBAAmB,WAAW,GACtD,eACF;CACF;CAEA,MAAM,UACJ,KACA,GAAG,SAIA;EACH,MAAM,OAAQ,KAAK,MAAM,CAAC;EAC1B,OAAO,IAAI,aACT,KACA,OACC,mBAAmB,gBAClB,aAAa,OAAO,mBAAmB,WAAW,GACpD,eACF;CACF;CAOA,MAAM,uBACJ,KACA,GAAG,SAGA;EAKH,MAAM,OAAQ,KAAK,MAAM,CAAC;EAC1B,MAAM,oBAAoB,IAAI,qBAAqB,GAAG;EACtD,MAAM,UAAU,IAAI,kBAAkB,KAAK,eAAe;EAE1D,OAAO,OAAO,OACZ,OAAO,MAAM,IAAI,WAAW,KAAK,IAAI,GAAG;GACtC,YAAY,UAAU,OAAO,QAAqB,OAAO,KAAK,KAAK,CAAC;GACpE,YAAY,gBACV,OAAO,UACJ,UACC,OAAO,IAAI,aAAa;IACtB,MAAM,cAAc,aAAa,SAC/B,mBACA,cACC,WAAW;KACV,MAAM,YAAY,OAAO,OAAO,QAAQ,MAAM,CAAC;IACjD,IACC,UAAU;KACT,MAAM,YAAY,OAAO,OAAO,KAAK,QAAQ,KAAK,CAAC,CAAC;IACtD,CACF;IACA,OAAO,OAAO,mBACZ,OAAO,WAAW,YAAY,CAAC,CACjC;GACF,CAAC,CACL;EACJ,CAAC,CACH,CAAC,CAAC,KACA,OAAO,WAAW,WAChB,OAAO,MAAM,QAAQ;GACnB,YAAY,UAAU,OAAO,QAAQ,OAAO,KAAK,KAAK,CAAC;GACvD,YAAY,mBACV,OAAO,MAAM,IAAI,cAAc,KAAK,cAAc,GAAG;IACnD,WAAW,OAAO;IAClB,WAAW,OAAO;GACpB,CAAC;EACL,CAAC,CACH,CACF;CACF;CAEA,MAAM,iBACJ,KACA,GAAG,SAEH,oBAAoB,KAAK,GAAG,IAAI,CAAC,CAAC,KAChC,OAAO,UACL,OAAO,MAAM;EACX,WAAW,OAAO;EAClB,WAAW,OAAO;CACpB,CAAC,CACH,CACF;CAEF,OAAO;EACL,KAAK;EACL;EACA;EACA;EACA;EACA;EACA;CACF;AACF;AAEA,MAAa,cACX,SACA,YAEA,OAAO,eAAe,UAAU,iBAC9B,OAAO,cAAc,aAAa,MAAM,CAAC,CAC3C,CAAC,CAAC,KAAK,OAAO,KAAK,iBAAiB,KAAK,SAAS,YAAY,CAAC,CAAC"}
package/package.json CHANGED
@@ -1,28 +1,32 @@
1
1
  {
2
2
  "name": "@confect/js",
3
3
  "description": "JavaScript client bindings for any JS runtime",
4
- "version": "10.0.0-next.2",
4
+ "version": "10.0.0-next.21",
5
5
  "author": "RJ Dellecese",
6
6
  "bugs": {
7
7
  "url": "https://github.com/rjdellecese/confect/issues"
8
8
  },
9
9
  "devDependencies": {
10
- "@effect/vitest": "4.0.0-beta.99",
11
- "@types/node": "26.1.1",
12
- "effect": "4.0.0-beta.99",
13
- "tsdown": "0.22.7",
14
- "typescript": "6.0.3",
10
+ "@effect/vitest": "4.0.0-rc.112",
11
+ "@types/node": "24.13.3",
12
+ "effect": "4.0.0-rc.112",
13
+ "tsdown": "0.22.14",
14
+ "typescript": "7.0.2",
15
15
  "unrun": "0.3.1",
16
- "vitest": "4.1.10"
16
+ "vitest": "4.1.11"
17
17
  },
18
18
  "engines": {
19
- "node": ">=22"
19
+ "node": ">=24"
20
20
  },
21
21
  "exports": {
22
22
  ".": {
23
23
  "types": "./dist/index.d.ts",
24
24
  "default": "./dist/index.js"
25
25
  },
26
+ "./*": {
27
+ "types": "./dist/*.d.ts",
28
+ "default": "./dist/*.js"
29
+ },
26
30
  "./package.json": "./package.json"
27
31
  },
28
32
  "files": [
@@ -30,6 +34,7 @@
30
34
  "LICENSE",
31
35
  "README.md",
32
36
  "dist",
37
+ "!dist/*.tsbuildinfo",
33
38
  "package.json",
34
39
  "src"
35
40
  ],
@@ -42,20 +47,20 @@
42
47
  "main": "./dist/index.js",
43
48
  "module": "./dist/index.js",
44
49
  "peerDependencies": {
50
+ "@confect/core": "^10.0.0-next.21",
45
51
  "convex": "^1.32.0",
46
- "effect": "^4.0.0-beta.99",
47
- "@confect/core": "^10.0.0-next.2"
52
+ "effect": "^4.0.0-rc.112"
48
53
  },
49
54
  "repository": {
50
55
  "type": "git",
51
- "url": "https://github.com/rjdellecese/confect.git"
56
+ "url": "git+https://github.com/rjdellecese/confect.git"
52
57
  },
53
58
  "sideEffects": false,
54
59
  "type": "module",
55
60
  "types": "./dist/index.d.ts",
56
61
  "scripts": {
57
- "clean": "rm -rf dist coverage node_modules",
58
- "dev": "tsdown --watch --config-loader unrun",
62
+ "clean": "shx rm -rf dist coverage node_modules",
63
+ "dev": "tsdown --watch --no-clean --config-loader unrun",
59
64
  "test": "vitest run",
60
65
  "typecheck": "tsc -b tsconfig.src.json"
61
66
  }
package/src/HttpClient.ts CHANGED
@@ -1,95 +1,26 @@
1
- import * as Ref from "@confect/core/Ref";
2
1
  import { ConvexHttpClient } from "convex/browser";
3
2
  import * as Context from "effect/Context";
4
- import * as Effect from "effect/Effect";
5
3
  import * as Layer from "effect/Layer";
6
- import * as Schema from "effect/Schema";
4
+ import * as InternalHttpClient from "./internal/HttpClient";
7
5
 
8
- export class HttpClientError extends Schema.TaggedErrorClass<HttpClientError>()(
9
- "HttpClientError",
10
- {
11
- cause: Schema.Unknown,
12
- },
13
- ) {}
6
+ export { HttpClientError } from "./internal/HttpClient";
14
7
 
15
8
  const make = (
16
9
  address: string,
17
10
  options?: ConstructorParameters<typeof ConvexHttpClient>[1],
18
11
  ) => {
19
12
  const client = new ConvexHttpClient(address, options);
20
-
21
- const url = client.url;
22
-
23
- const setAuth = (token: string) =>
24
- Effect.sync(() => {
25
- client.setAuth(token);
26
- });
27
-
28
- const clearAuth = Effect.sync(() => {
29
- client.clearAuth();
13
+ return InternalHttpClient.make({
14
+ url: client.url,
15
+ setAuth: (token) => client.setAuth(token),
16
+ clearAuth: () => client.clearAuth(),
17
+ query: (functionReference, encodedArgs) =>
18
+ client.query(functionReference, encodedArgs),
19
+ mutation: (functionReference, encodedArgs) =>
20
+ client.mutation(functionReference, encodedArgs),
21
+ action: (functionReference, encodedArgs) =>
22
+ client.action(functionReference, encodedArgs),
30
23
  });
31
-
32
- const mapUnknownError = (cause: unknown) => new HttpClientError({ cause });
33
-
34
- const query = <Query extends Ref.AnyPublicQuery>(
35
- ref: Query,
36
- ...rest: Ref.OptionalArgs<Query>
37
- ): Effect.Effect<
38
- Ref.Returns<Query>,
39
- Ref.Error<Query> | HttpClientError | Schema.SchemaError
40
- > => {
41
- const args = (rest[0] ?? {}) as Ref.Args<Query>;
42
- return Ref.runWithCodec(
43
- ref,
44
- args,
45
- (functionReference, encodedArgs) =>
46
- client.query(functionReference, encodedArgs),
47
- mapUnknownError,
48
- );
49
- };
50
-
51
- const mutation = <Mutation extends Ref.AnyPublicMutation>(
52
- ref: Mutation,
53
- ...rest: Ref.OptionalArgs<Mutation>
54
- ): Effect.Effect<
55
- Ref.Returns<Mutation>,
56
- Ref.Error<Mutation> | HttpClientError | Schema.SchemaError
57
- > => {
58
- const args = (rest[0] ?? {}) as Ref.Args<Mutation>;
59
- return Ref.runWithCodec(
60
- ref,
61
- args,
62
- (functionReference, encodedArgs) =>
63
- client.mutation(functionReference, encodedArgs),
64
- mapUnknownError,
65
- );
66
- };
67
-
68
- const action = <Action extends Ref.AnyPublicAction>(
69
- ref: Action,
70
- ...rest: Ref.OptionalArgs<Action>
71
- ): Effect.Effect<
72
- Ref.Returns<Action>,
73
- Ref.Error<Action> | HttpClientError | Schema.SchemaError
74
- > => {
75
- const args = (rest[0] ?? {}) as Ref.Args<Action>;
76
- return Ref.runWithCodec(
77
- ref,
78
- args,
79
- (functionReference, encodedArgs) =>
80
- client.action(functionReference, encodedArgs),
81
- mapUnknownError,
82
- );
83
- };
84
-
85
- return {
86
- url,
87
- setAuth,
88
- clearAuth,
89
- query,
90
- mutation,
91
- action,
92
- };
93
24
  };
94
25
 
95
26
  /**