@gaganref/confect-js 0.0.0-stage → 10.3.1-fork.2

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/LICENSE ADDED
@@ -0,0 +1,7 @@
1
+ ISC License
2
+
3
+ Copyright 2024 RJ Dellecese
4
+
5
+ Permission to use, copy, modify, and/or distribute this software for any purpose with or without fee is hereby granted, provided that the above copyright notice and this permission notice appear in all copies.
6
+
7
+ THE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL WARRANTIES WITH REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY SPECIAL, DIRECT, INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE.
package/README.md CHANGED
@@ -1,3 +1,17 @@
1
- # Temporary Holding Version
1
+ # Confect 🧁
2
2
 
3
- This version is a temporary placeholder for this package. An operational version to replace this has been submitted for review and is awaiting a staged release.
3
+ This is a fork of [Confect](https://github.com/rjdellecese/confect). See [FORK.md](FORK.md) for builds, installation, and maintenance, and [CHANGES.md](CHANGES.md) for the fork additions.
4
+
5
+ ## About Confect
6
+
7
+ Confect is a framework that deeply integrates Effect with Convex. It's more than just Effect bindings! Confect allows you to:
8
+
9
+ - Define your Convex database schema using Effect schemas.
10
+ - Write Convex function args and returns validators using Effect's schema library.
11
+ - Use Confect functions to automatically decode and encode your data according to your Effect schema definitions for end-to-end rich types, from client to function to database (and back).
12
+ - Add reusable, type-safe middleware to function groups or individual functions to provide Effect services and run logic around handlers.
13
+ - Declare typed errors on functions and middleware using Effect schemas, then handle the decoded errors at every call site.
14
+ - Use Effect's native HTTP API modules to define your HTTP API.
15
+ - Access Convex platform capabilities via Effect services.
16
+
17
+ Want to learn more? Read the [docs](https://confect.dev)!
@@ -0,0 +1,35 @@
1
+ import { ConvexHttpClient } from "convex/browser";
2
+ import * as Context from "effect/Context";
3
+ import * as Layer from "effect/Layer";
4
+ import * as InternalHttpClient from "./internal/HttpClient";
5
+ export { HttpClientError } from "./internal/HttpClient";
6
+ /**
7
+ * A Confect client which uses HTTP to communicate with your Convex backend.
8
+ * Works in any JS runtime that supports `fetch`. Wraps
9
+ * [ConvexHttpClient](https://docs.convex.dev/api/classes/browser.ConvexHttpClient).
10
+ */
11
+ export declare const HttpClient: Context.Service<{
12
+ url: string;
13
+ setAuth: (token: string) => import("effect/Effect").Effect<void, never, never>;
14
+ clearAuth: import("effect/Effect").Effect<void, never, never>;
15
+ query: <Query extends import("@confect/core/Ref").AnyPublicQuery>(ref: Query, ...rest: import("@confect/core/Ref").OptionalArgs<Query>) => import("effect/Effect").Effect<import("@confect/core/Ref").Returns<Query>, import("@confect/core/Ref").Error<Query> | InternalHttpClient.HttpClientError | import("effect/Schema").SchemaError>;
16
+ mutation: <Mutation extends import("@confect/core/Ref").AnyPublicMutation>(ref: Mutation, ...rest: import("@confect/core/Ref").OptionalArgs<Mutation>) => import("effect/Effect").Effect<import("@confect/core/Ref").Returns<Mutation>, import("@confect/core/Ref").Error<Mutation> | InternalHttpClient.HttpClientError | import("effect/Schema").SchemaError>;
17
+ action: <Action extends import("@confect/core/Ref").AnyPublicAction>(ref: Action, ...rest: import("@confect/core/Ref").OptionalArgs<Action>) => import("effect/Effect").Effect<import("@confect/core/Ref").Returns<Action>, import("@confect/core/Ref").Error<Action> | InternalHttpClient.HttpClientError | import("effect/Schema").SchemaError>;
18
+ }, {
19
+ url: string;
20
+ setAuth: (token: string) => import("effect/Effect").Effect<void, never, never>;
21
+ clearAuth: import("effect/Effect").Effect<void, never, never>;
22
+ query: <Query extends import("@confect/core/Ref").AnyPublicQuery>(ref: Query, ...rest: import("@confect/core/Ref").OptionalArgs<Query>) => import("effect/Effect").Effect<import("@confect/core/Ref").Returns<Query>, import("@confect/core/Ref").Error<Query> | InternalHttpClient.HttpClientError | import("effect/Schema").SchemaError>;
23
+ mutation: <Mutation extends import("@confect/core/Ref").AnyPublicMutation>(ref: Mutation, ...rest: import("@confect/core/Ref").OptionalArgs<Mutation>) => import("effect/Effect").Effect<import("@confect/core/Ref").Returns<Mutation>, import("@confect/core/Ref").Error<Mutation> | InternalHttpClient.HttpClientError | import("effect/Schema").SchemaError>;
24
+ action: <Action extends import("@confect/core/Ref").AnyPublicAction>(ref: Action, ...rest: import("@confect/core/Ref").OptionalArgs<Action>) => import("effect/Effect").Effect<import("@confect/core/Ref").Returns<Action>, import("@confect/core/Ref").Error<Action> | InternalHttpClient.HttpClientError | import("effect/Schema").SchemaError>;
25
+ }>;
26
+ export type HttpClient = typeof HttpClient.Identifier;
27
+ export declare const layer: (address: string, options?: ConstructorParameters<typeof ConvexHttpClient>[1]) => Layer.Layer<{
28
+ url: string;
29
+ setAuth: (token: string) => import("effect/Effect").Effect<void, never, never>;
30
+ clearAuth: import("effect/Effect").Effect<void, never, never>;
31
+ query: <Query extends import("@confect/core/Ref").AnyPublicQuery>(ref: Query, ...rest: import("@confect/core/Ref").OptionalArgs<Query>) => import("effect/Effect").Effect<import("@confect/core/Ref").Returns<Query>, import("@confect/core/Ref").Error<Query> | InternalHttpClient.HttpClientError | import("effect/Schema").SchemaError>;
32
+ mutation: <Mutation extends import("@confect/core/Ref").AnyPublicMutation>(ref: Mutation, ...rest: import("@confect/core/Ref").OptionalArgs<Mutation>) => import("effect/Effect").Effect<import("@confect/core/Ref").Returns<Mutation>, import("@confect/core/Ref").Error<Mutation> | InternalHttpClient.HttpClientError | import("effect/Schema").SchemaError>;
33
+ action: <Action extends import("@confect/core/Ref").AnyPublicAction>(ref: Action, ...rest: import("@confect/core/Ref").OptionalArgs<Action>) => import("effect/Effect").Effect<import("@confect/core/Ref").Returns<Action>, import("@confect/core/Ref").Error<Action> | InternalHttpClient.HttpClientError | import("effect/Schema").SchemaError>;
34
+ }, never, never>;
35
+ //# sourceMappingURL=HttpClient.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"HttpClient.d.ts","sourceRoot":"","sources":["../src/HttpClient.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,gBAAgB,EAAE,MAAM,gBAAgB,CAAC;AAClD,OAAO,KAAK,OAAO,MAAM,gBAAgB,CAAC;AAC1C,OAAO,KAAK,KAAK,MAAM,cAAc,CAAC;AACtC,OAAO,KAAK,kBAAkB,MAAM,uBAAuB,CAAC;AAE5D,OAAO,EAAE,eAAe,EAAE,MAAM,uBAAuB,CAAC;AAoBxD;;;;GAIG;AACH,eAAO,MAAM,UAAU;;;;;;;;;;;;;;EAEtB,CAAC;AAEF,MAAM,MAAM,UAAU,GAAG,OAAO,UAAU,CAAC,UAAU,CAAC;AAEtD,eAAO,MAAM,KAAK,YACP,MAAM,YACL,qBAAqB,CAAC,OAAO,gBAAgB,CAAC,CAAC,CAAC,CAAC;;;;;;;gBACJ,CAAC"}
@@ -0,0 +1,33 @@
1
+ import { __exportAll } from "./_virtual/_rolldown/runtime.js";
2
+ import { HttpClientError, make as make$1 } from "./internal/HttpClient.js";
3
+ import { ConvexHttpClient } from "convex/browser";
4
+ import * as Context from "effect/Context";
5
+ import * as Layer from "effect/Layer";
6
+ //#region src/HttpClient.ts
7
+ var HttpClient_exports = /* @__PURE__ */ __exportAll({
8
+ HttpClient: () => HttpClient,
9
+ HttpClientError: () => HttpClientError,
10
+ layer: () => layer
11
+ });
12
+ const make = (address, options) => {
13
+ const client = new ConvexHttpClient(address, options);
14
+ return make$1({
15
+ url: client.url,
16
+ setAuth: (token) => client.setAuth(token),
17
+ clearAuth: () => client.clearAuth(),
18
+ query: (functionReference, encodedArgs) => client.query(functionReference, encodedArgs),
19
+ mutation: (functionReference, encodedArgs) => client.mutation(functionReference, encodedArgs),
20
+ action: (functionReference, encodedArgs) => client.action(functionReference, encodedArgs)
21
+ });
22
+ };
23
+ /**
24
+ * A Confect client which uses HTTP to communicate with your Convex backend.
25
+ * Works in any JS runtime that supports `fetch`. Wraps
26
+ * [ConvexHttpClient](https://docs.convex.dev/api/classes/browser.ConvexHttpClient).
27
+ */
28
+ const HttpClient = Context.Service("@confect/js/HttpClient");
29
+ const layer = (address, options) => Layer.sync(HttpClient, () => make(address, options));
30
+ //#endregion
31
+ export { HttpClient, HttpClientError, HttpClient_exports, layer };
32
+
33
+ //# sourceMappingURL=HttpClient.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"HttpClient.js","names":["InternalHttpClient.make"],"sources":["../src/HttpClient.ts"],"sourcesContent":["import { ConvexHttpClient } from \"convex/browser\";\nimport * as Context from \"effect/Context\";\nimport * as Layer from \"effect/Layer\";\nimport * as InternalHttpClient from \"./internal/HttpClient\";\n\nexport { HttpClientError } from \"./internal/HttpClient\";\n\nconst make = (\n address: string,\n options?: ConstructorParameters<typeof ConvexHttpClient>[1],\n) => {\n const client = new ConvexHttpClient(address, options);\n return InternalHttpClient.make({\n url: client.url,\n setAuth: (token) => client.setAuth(token),\n clearAuth: () => client.clearAuth(),\n query: (functionReference, encodedArgs) =>\n client.query(functionReference, encodedArgs),\n mutation: (functionReference, encodedArgs) =>\n client.mutation(functionReference, encodedArgs),\n action: (functionReference, encodedArgs) =>\n client.action(functionReference, encodedArgs),\n });\n};\n\n/**\n * A Confect client which uses HTTP to communicate with your Convex backend.\n * Works in any JS runtime that supports `fetch`. Wraps\n * [ConvexHttpClient](https://docs.convex.dev/api/classes/browser.ConvexHttpClient).\n */\nexport const HttpClient = Context.Service<ReturnType<typeof make>>(\n \"@confect/js/HttpClient\",\n);\n\nexport type HttpClient = typeof HttpClient.Identifier;\n\nexport const layer = (\n address: string,\n options?: ConstructorParameters<typeof ConvexHttpClient>[1],\n) => Layer.sync(HttpClient, () => make(address, options));\n"],"mappings":";;;;;;;;;;;AAOA,MAAM,QACJ,SACA,YACG;CACH,MAAM,SAAS,IAAI,iBAAiB,SAAS,OAAO;CACpD,OAAOA,OAAwB;EAC7B,KAAK,OAAO;EACZ,UAAU,UAAU,OAAO,QAAQ,KAAK;EACxC,iBAAiB,OAAO,UAAU;EAClC,QAAQ,mBAAmB,gBACzB,OAAO,MAAM,mBAAmB,WAAW;EAC7C,WAAW,mBAAmB,gBAC5B,OAAO,SAAS,mBAAmB,WAAW;EAChD,SAAS,mBAAmB,gBAC1B,OAAO,OAAO,mBAAmB,WAAW;CAChD,CAAC;AACH;;;;;;AAOA,MAAa,aAAa,QAAQ,QAChC,wBACF;AAIA,MAAa,SACX,SACA,YACG,MAAM,KAAK,kBAAkB,KAAK,SAAS,OAAO,CAAC"}
@@ -0,0 +1,47 @@
1
+ import { ConvexClient } from "convex/browser";
2
+ import * as Context from "effect/Context";
3
+ import * as Effect from "effect/Effect";
4
+ import * as Layer from "effect/Layer";
5
+ import * as InternalWebSocketClient from "./internal/WebSocketClient";
6
+ export { WebSocketClientError } from "./internal/WebSocketClient";
7
+ /**
8
+ * A Confect client which uses a WebSocket to communicate with your Convex
9
+ * backend and supports reactive query subscriptions. The WebSocket connection
10
+ * is managed by the layer's scope and closed automatically when the scope ends.
11
+ * Wraps
12
+ * [ConvexClient](https://docs.convex.dev/api/classes/browser.ConvexClient).
13
+ */
14
+ export declare const WebSocketClient: Context.Service<{
15
+ url: string;
16
+ setAuth: <R1 = never, R2 = never>(fetchToken: (args: {
17
+ forceRefreshToken: boolean;
18
+ }) => Effect.Effect<string | null | undefined, never, R1>, onChange?: (isAuthenticated: boolean) => Effect.Effect<void, never, R2>) => Effect.Effect<void, never, R1 | R2>;
19
+ 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>;
20
+ 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>;
21
+ 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>;
22
+ 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>>;
23
+ 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>>>;
24
+ }, {
25
+ url: string;
26
+ setAuth: <R1 = never, R2 = never>(fetchToken: (args: {
27
+ forceRefreshToken: boolean;
28
+ }) => Effect.Effect<string | null | undefined, never, R1>, onChange?: (isAuthenticated: boolean) => Effect.Effect<void, never, R2>) => Effect.Effect<void, never, R1 | R2>;
29
+ 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>;
30
+ 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>;
31
+ 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>;
32
+ 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>>;
33
+ 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>>>;
34
+ }>;
35
+ export type WebSocketClient = typeof WebSocketClient.Identifier;
36
+ export declare const layer: (address: string, options?: ConstructorParameters<typeof ConvexClient>[1]) => Layer.Layer<{
37
+ url: string;
38
+ setAuth: <R1 = never, R2 = never>(fetchToken: (args: {
39
+ forceRefreshToken: boolean;
40
+ }) => Effect.Effect<string | null | undefined, never, R1>, onChange?: (isAuthenticated: boolean) => Effect.Effect<void, never, R2>) => Effect.Effect<void, never, R1 | R2>;
41
+ 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>;
42
+ 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>;
43
+ 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>;
44
+ 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>>;
45
+ 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
+ }, never, never>;
47
+ //# sourceMappingURL=WebSocketClient.d.ts.map
@@ -0,0 +1 @@
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;;;;;;GAMG;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"}
@@ -0,0 +1,36 @@
1
+ import { __exportAll } from "./_virtual/_rolldown/runtime.js";
2
+ import { WebSocketClientError, makeScoped } from "./internal/WebSocketClient.js";
3
+ import { ConvexClient } from "convex/browser";
4
+ import * as Context from "effect/Context";
5
+ import * as Effect from "effect/Effect";
6
+ import * as Layer from "effect/Layer";
7
+ //#region src/WebSocketClient.ts
8
+ var WebSocketClient_exports = /* @__PURE__ */ __exportAll({
9
+ WebSocketClient: () => WebSocketClient,
10
+ WebSocketClientError: () => WebSocketClientError,
11
+ layer: () => layer
12
+ });
13
+ const make = (address, options) => makeScoped(address, Effect.sync(() => {
14
+ const convexClient = new ConvexClient(address, options);
15
+ return {
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)
22
+ };
23
+ }));
24
+ /**
25
+ * A Confect client which uses a WebSocket to communicate with your Convex
26
+ * backend and supports reactive query subscriptions. The WebSocket connection
27
+ * is managed by the layer's scope and closed automatically when the scope ends.
28
+ * Wraps
29
+ * [ConvexClient](https://docs.convex.dev/api/classes/browser.ConvexClient).
30
+ */
31
+ const WebSocketClient = Context.Service("@confect/js/WebSocketClient");
32
+ const layer = (address, options) => Layer.effect(WebSocketClient, make(address, options));
33
+ //#endregion
34
+ export { WebSocketClient, WebSocketClientError, WebSocketClient_exports, layer };
35
+
36
+ //# sourceMappingURL=WebSocketClient.js.map
@@ -0,0 +1 @@
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\n * backend and supports reactive query subscriptions. The WebSocket connection\n * is managed by the layer's scope and closed automatically when the scope ends.\n * Wraps\n * [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;;;;;;;;AASF,MAAa,kBAAkB,QAAQ,QAErC,6BAA6B;AAI/B,MAAa,SACX,SACA,YACG,MAAM,OAAO,iBAAiB,KAAK,SAAS,OAAO,CAAC"}
@@ -0,0 +1,13 @@
1
+ //#region \0rolldown/runtime.js
2
+ var __defProp = Object.defineProperty;
3
+ var __exportAll = (all, no_symbols) => {
4
+ let target = {};
5
+ for (var name in all) __defProp(target, name, {
6
+ get: all[name],
7
+ enumerable: true
8
+ });
9
+ if (!no_symbols) __defProp(target, Symbol.toStringTag, { value: "Module" });
10
+ return target;
11
+ };
12
+ //#endregion
13
+ export { __exportAll };
@@ -0,0 +1,3 @@
1
+ export * as WebSocketClient from "./WebSocketClient";
2
+ export * as HttpClient from "./HttpClient";
3
+ //# sourceMappingURL=index.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,eAAe,MAAM,mBAAmB,CAAC;AACrD,OAAO,KAAK,UAAU,MAAM,cAAc,CAAC"}
package/dist/index.js ADDED
@@ -0,0 +1,3 @@
1
+ import { WebSocketClient_exports } from "./WebSocketClient.js";
2
+ import { HttpClient_exports } from "./HttpClient.js";
3
+ export { HttpClient_exports as HttpClient, WebSocketClient_exports as WebSocketClient };
@@ -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;AAcD,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;eAaiB,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;aAae,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;CAqBF,CAAC"}
@@ -0,0 +1,41 @@
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 runQuery = Effect.fn("HttpClient.query")((effect) => effect);
7
+ const runMutation = Effect.fn("HttpClient.mutation")((effect) => effect);
8
+ const runAction = Effect.fn("HttpClient.action")((effect) => effect);
9
+ const make = (client) => {
10
+ const setAuth = (token) => Effect.sync(() => {
11
+ client.setAuth(token);
12
+ });
13
+ const clearAuth = Effect.sync(() => {
14
+ client.clearAuth();
15
+ });
16
+ const mapUnknownError = (cause) => new HttpClientError({ cause });
17
+ const query = (ref, ...rest) => {
18
+ const args = rest[0] ?? {};
19
+ return runQuery(Ref.runWithCodec(ref, args, (functionReference, encodedArgs) => client.query(functionReference, encodedArgs), mapUnknownError));
20
+ };
21
+ const mutation = (ref, ...rest) => {
22
+ const args = rest[0] ?? {};
23
+ return runMutation(Ref.runWithCodec(ref, args, (functionReference, encodedArgs) => client.mutation(functionReference, encodedArgs), mapUnknownError));
24
+ };
25
+ const action = (ref, ...rest) => {
26
+ const args = rest[0] ?? {};
27
+ return runAction(Ref.runWithCodec(ref, args, (functionReference, encodedArgs) => client.action(functionReference, encodedArgs), mapUnknownError));
28
+ };
29
+ return {
30
+ url: client.url,
31
+ setAuth,
32
+ clearAuth,
33
+ query,
34
+ mutation,
35
+ action
36
+ };
37
+ };
38
+ //#endregion
39
+ export { HttpClientError, make };
40
+
41
+ //# 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\nconst runQuery = Effect.fn(\"HttpClient.query\")(\n <A, E>(effect: Effect.Effect<A, E>): Effect.Effect<A, E> => effect,\n);\n\nconst runMutation = Effect.fn(\"HttpClient.mutation\")(\n <A, E>(effect: Effect.Effect<A, E>): Effect.Effect<A, E> => effect,\n);\n\nconst runAction = Effect.fn(\"HttpClient.action\")(\n <A, E>(effect: Effect.Effect<A, E>): Effect.Effect<A, E> => effect,\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 runQuery(\n Ref.runWithCodec(\n ref,\n args,\n (functionReference, encodedArgs) =>\n client.query(functionReference, encodedArgs),\n mapUnknownError,\n ),\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 runMutation(\n Ref.runWithCodec(\n ref,\n args,\n (functionReference, encodedArgs) =>\n client.mutation(functionReference, encodedArgs),\n mapUnknownError,\n ),\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 runAction(\n Ref.runWithCodec(\n ref,\n args,\n (functionReference, encodedArgs) =>\n client.action(functionReference, encodedArgs),\n mapUnknownError,\n ),\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,MAAM,WAAW,OAAO,GAAG,kBAAkB,CAAC,EACrC,WAAqD,MAC9D;AAEA,MAAM,cAAc,OAAO,GAAG,qBAAqB,CAAC,EAC3C,WAAqD,MAC9D;AAEA,MAAM,YAAY,OAAO,GAAG,mBAAmB,CAAC,EACvC,WAAqD,MAC9D;AAEA,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,SACL,IAAI,aACF,KACA,OACC,mBAAmB,gBAClB,OAAO,MAAM,mBAAmB,WAAW,GAC7C,eACF,CACF;CACF;CAEA,MAAM,YACJ,KACA,GAAG,SAIA;EACH,MAAM,OAAQ,KAAK,MAAM,CAAC;EAC1B,OAAO,YACL,IAAI,aACF,KACA,OACC,mBAAmB,gBAClB,OAAO,SAAS,mBAAmB,WAAW,GAChD,eACF,CACF;CACF;CAEA,MAAM,UACJ,KACA,GAAG,SAIA;EACH,MAAM,OAAQ,KAAK,MAAM,CAAC;EAC1B,OAAO,UACL,IAAI,aACF,KACA,OACC,mBAAmB,gBAClB,OAAO,OAAO,mBAAmB,WAAW,GAC9C,eACF,CACF;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: <R1 = never, R2 = never>(fetchToken: (args: {
24
+ forceRefreshToken: boolean;
25
+ }) => Effect.Effect<string | null | undefined, never, R1>, onChange?: (isAuthenticated: boolean) => Effect.Effect<void, never, R2>) => Effect.Effect<void, never, R1 | R2>;
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: <R1 = never, R2 = never>(fetchToken: (args: {
35
+ forceRefreshToken: boolean;
36
+ }) => Effect.Effect<string | null | undefined, never, R1>, onChange?: (isAuthenticated: boolean) => Effect.Effect<void, never, R2>) => Effect.Effect<void, never, R1 | R2>;
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":"AAAA,OAAO,KAAK,GAAG,MAAM,mBAAmB,CAAC;AACzC,OAAO,KAAK,MAAM,MAAM,eAAe,CAAC;AAExC,OAAO,KAAK,MAAM,MAAM,eAAe,CAAC;AACxC,OAAO,KAAK,MAAM,MAAM,eAAe,CAAC;AACxC,OAAO,KAAK,MAAM,MAAM,eAAe,CAAC;;;;AAExC,qBAAa,oBAAqB,SAAQ,yBAKzC;CAAG;AAEJ,MAAM,WAAW,SAAS;IACxB,QAAQ,CAAC,OAAO,EAAE,CAChB,UAAU,EAAE,CAAC,IAAI,EAAE;QACjB,QAAQ,CAAC,iBAAiB,EAAE,OAAO,CAAC;KACrC,KAAK,OAAO,CAAC,MAAM,GAAG,IAAI,GAAG,SAAS,CAAC,EACxC,QAAQ,CAAC,EAAE,CAAC,eAAe,EAAE,OAAO,KAAK,IAAI,KAC1C,IAAI,CAAC;IACV,QAAQ,CAAC,KAAK,EAAE,MAAM,OAAO,CAAC,IAAI,CAAC,CAAC;IACpC,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;IAC1B,QAAQ,CAAC,QAAQ,EAAE,CACjB,iBAAiB,EAAE,GAAG,CAAC,iBAAiB,CAAC,GAAG,CAAC,cAAc,CAAC,EAC5D,WAAW,EAAE,OAAO,EACpB,QAAQ,EAAE,CAAC,MAAM,EAAE,OAAO,KAAK,IAAI,EACnC,OAAO,EAAE,CAAC,KAAK,EAAE,KAAK,KAAK,IAAI,KAC5B,MAAM,IAAI,CAAC;CACjB;AAcD,eAAO,MAAM,IAAI,YAAa,MAAM,gBAAgB,SAAS;;cAC1C,EAAE,UAAU,EAAE,sBACjB,CAAC,IAAI,EAAE;QACjB,iBAAiB,EAAE,OAAO,CAAC;KAC5B,KAAK,MAAM,CAAC,MAAM,CAAC,MAAM,GAAG,IAAI,GAAG,SAAS,EAAE,KAAK,EAAE,EAAE,CAAC,aAC9C,CAAC,eAAe,EAAE,OAAO,KAAK,MAAM,CAAC,MAAM,CAAC,IAAI,EAAE,KAAK,EAAE,EAAE,CAAC,KACtE,MAAM,CAAC,MAAM,CAAC,IAAI,EAAE,KAAK,EAAE,EAAE,GAAG,EAAE,CAAC;YAoBvB,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,oBAAoB,GAAG,MAAM,CAAC,WAAW,CAC7D;eAaiB,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,oBAAoB,GAAG,MAAM,CAAC,WAAW,CAChE;aAae,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,oBAAoB,GAAG,MAAM,CAAC,WAAW,CAC9D;oBAqEsB,KAAK,SAAS,GAAG,CAAC,cAAc,OAChD,KAAK,WACD,GAAG,CAAC,YAAY,CAAC,KAAK,CAAC,KAC/B,MAAM,CAAC,MAAM,CAAC,GAAG,CAAC,OAAO,CAAC,KAAK,CAAC,+DAA4B;0BAtDlC,KAAK,SAAS,GAAG,CAAC,cAAc,OACtD,KAAK,WACD,GAAG,CAAC,YAAY,CAAC,KAAK,CAAC,KAC/B,MAAM,CAAC,MAAM,CACd,MAAM,CAAC,MAAM,CAAC,GAAG,CAAC,OAAO,CAAC,KAAK,CAAC,+DAA4B,CAC7D;CAoEF,CAAC;AAEF,eAAO,MAAM,UAAU,GAAI,CAAC,EAAE,CAAC,WACpB,MAAM,WACN,MAAM,CAAC,MAAM,CAAC,SAAS,EAAE,CAAC,EAAE,CAAC,CAAC;;cApKtB,EAAE,UAAU,EAAE,sBACjB,CAAC,IAAI,EAAE;QACjB,iBAAiB,EAAE,OAAO,CAAC;KAC5B,KAAK,MAAM,CAAC,MAAM,CAAC,MAAM,GAAG,IAAI,GAAG,SAAS,EAAE,KAAK,EAAE,EAAE,CAAC,aAC9C,CAAC,eAAe,EAAE,OAAO,KAAK,MAAM,CAAC,MAAM,CAAC,IAAI,EAAE,KAAK,EAAE,EAAE,CAAC,KACtE,MAAM,CAAC,MAAM,CAAC,IAAI,EAAE,KAAK,EAAE,EAAE,GAAG,EAAE,CAAC;YAoBvB,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,oBAAoB,GAAG,MAAM,CAAC,WAAW,CAC7D;eAaiB,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,oBAAoB,GAAG,MAAM,CAAC,WAAW,CAChE;aAae,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,oBAAoB,GAAG,MAAM,CAAC,WAAW,CAC9D;oBAqEsB,KAAK,SAAS,GAAG,CAAC,cAAc,OAChD,KAAK,WACD,GAAG,CAAC,YAAY,CAAC,KAAK,CAAC,KAC/B,MAAM,CAAC,MAAM,CAAC,GAAG,CAAC,OAAO,CAAC,KAAK,CAAC,+DAA4B;0BAtDlC,KAAK,SAAS,GAAG,CAAC,cAAc,OACtD,KAAK,WACD,GAAG,CAAC,YAAY,CAAC,KAAK,CAAC,KAC/B,MAAM,CAAC,MAAM,CACd,MAAM,CAAC,MAAM,CAAC,GAAG,CAAC,OAAO,CAAC,KAAK,CAAC,+DAA4B,CAC7D;uCA4EgE,CAAC"}
@@ -0,0 +1,74 @@
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 runQuery = Effect.fn("WebSocketClient.query")((effect) => effect);
10
+ const runMutation = Effect.fn("WebSocketClient.mutation")((effect) => effect);
11
+ const runAction = Effect.fn("WebSocketClient.action")((effect) => effect);
12
+ const make = (address, convexClient) => {
13
+ const setAuth = (fetchToken, onChange) => Effect.gen(function* () {
14
+ const context = yield* Effect.context();
15
+ const runPromise = Effect.runPromiseWith(context);
16
+ const runFork = Effect.runForkWith(context);
17
+ convexClient.setAuth((args) => runPromise(Effect.suspend(() => fetchToken(args))), ...onChange ? [(isAuthenticated) => {
18
+ runFork(Effect.suspend(() => onChange(isAuthenticated)));
19
+ }] : []);
20
+ });
21
+ const mapUnknownError = (cause) => new WebSocketClientError({ cause });
22
+ const query = (ref, ...rest) => {
23
+ const args = rest[0] ?? {};
24
+ return runQuery(Ref.runWithCodec(ref, args, (functionReference, encodedArgs) => convexClient.query(functionReference, encodedArgs), mapUnknownError));
25
+ };
26
+ const mutation = (ref, ...rest) => {
27
+ const args = rest[0] ?? {};
28
+ return runMutation(Ref.runWithCodec(ref, args, (functionReference, encodedArgs) => convexClient.mutation(functionReference, encodedArgs), mapUnknownError));
29
+ };
30
+ const action = (ref, ...rest) => {
31
+ const args = rest[0] ?? {};
32
+ return runAction(Ref.runWithCodec(ref, args, (functionReference, encodedArgs) => convexClient.action(functionReference, encodedArgs), mapUnknownError));
33
+ };
34
+ const reactiveQueryResult = (ref, ...rest) => {
35
+ const args = rest[0] ?? {};
36
+ const functionReference = Ref.getFunctionReference(ref);
37
+ const onError = Ref.decodeErrorOrElse(ref, mapUnknownError);
38
+ return Stream.unwrap(Effect.match(Ref.encodeArgs(ref, args), {
39
+ onFailure: (error) => Stream.succeed(Result.fail(error)),
40
+ onSuccess: (encodedArgs) => Stream.callback((queue) => Effect.gen(function* () {
41
+ const unsubscribe = convexClient.onUpdate(functionReference, encodedArgs, (result) => {
42
+ Queue.offerUnsafe(queue, Result.succeed(result));
43
+ }, (error) => {
44
+ Queue.offerUnsafe(queue, Result.fail(onError(error)));
45
+ });
46
+ yield* Effect.addFinalizer(() => Effect.sync(() => unsubscribe()));
47
+ }))
48
+ })).pipe(Stream.mapEffect((result) => Result.match(result, {
49
+ onFailure: (error) => Effect.succeed(Result.fail(error)),
50
+ onSuccess: (encodedReturns) => Effect.match(Ref.decodeReturns(ref, encodedReturns), {
51
+ onFailure: Result.fail,
52
+ onSuccess: Result.succeed
53
+ })
54
+ })));
55
+ };
56
+ const reactiveQuery = (ref, ...rest) => reactiveQueryResult(ref, ...rest).pipe(Stream.mapEffect(Result.match({
57
+ onFailure: Effect.fail,
58
+ onSuccess: Effect.succeed
59
+ })));
60
+ return {
61
+ url: address,
62
+ setAuth,
63
+ query,
64
+ mutation,
65
+ action,
66
+ reactiveQuery,
67
+ reactiveQueryResult
68
+ };
69
+ };
70
+ const makeScoped = (address, acquire) => Effect.acquireRelease(acquire, (convexClient) => Effect.promise(() => convexClient.close())).pipe(Effect.map((convexClient) => make(address, convexClient)));
71
+ //#endregion
72
+ export { WebSocketClientError, make, makeScoped };
73
+
74
+ //# 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\nconst runQuery = Effect.fn(\"WebSocketClient.query\")(\n <A, E>(effect: Effect.Effect<A, E>): Effect.Effect<A, E> => effect,\n);\n\nconst runMutation = Effect.fn(\"WebSocketClient.mutation\")(\n <A, E>(effect: Effect.Effect<A, E>): Effect.Effect<A, E> => effect,\n);\n\nconst runAction = Effect.fn(\"WebSocketClient.action\")(\n <A, E>(effect: Effect.Effect<A, E>): Effect.Effect<A, E> => effect,\n);\n\nexport const make = (address: string, convexClient: Transport) => {\n const setAuth = <R1 = never, R2 = never>(\n fetchToken: (args: {\n forceRefreshToken: boolean;\n }) => Effect.Effect<string | null | undefined, never, R1>,\n onChange?: (isAuthenticated: boolean) => Effect.Effect<void, never, R2>,\n ): Effect.Effect<void, never, R1 | R2> =>\n Effect.gen(function* () {\n const context = yield* Effect.context<R1 | R2>();\n const runPromise = Effect.runPromiseWith(context);\n const runFork = Effect.runForkWith(context);\n convexClient.setAuth(\n (args) => runPromise(Effect.suspend(() => fetchToken(args))),\n ...(onChange\n ? [\n (isAuthenticated: boolean) => {\n runFork(Effect.suspend(() => onChange(isAuthenticated)));\n },\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 runQuery(\n Ref.runWithCodec(\n ref,\n args,\n (functionReference, encodedArgs) =>\n convexClient.query(functionReference, encodedArgs),\n mapUnknownError,\n ),\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 runMutation(\n Ref.runWithCodec(\n ref,\n args,\n (functionReference, encodedArgs) =>\n convexClient.mutation(functionReference, encodedArgs),\n mapUnknownError,\n ),\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 runAction(\n Ref.runWithCodec(\n ref,\n args,\n (functionReference, encodedArgs) =>\n convexClient.action(functionReference, encodedArgs),\n mapUnknownError,\n ),\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,MAAM,WAAW,OAAO,GAAG,uBAAuB,CAAC,EAC1C,WAAqD,MAC9D;AAEA,MAAM,cAAc,OAAO,GAAG,0BAA0B,CAAC,EAChD,WAAqD,MAC9D;AAEA,MAAM,YAAY,OAAO,GAAG,wBAAwB,CAAC,EAC5C,WAAqD,MAC9D;AAEA,MAAa,QAAQ,SAAiB,iBAA4B;CAChE,MAAM,WACJ,YAGA,aAEA,OAAO,IAAI,aAAa;EACtB,MAAM,UAAU,OAAO,OAAO,QAAiB;EAC/C,MAAM,aAAa,OAAO,eAAe,OAAO;EAChD,MAAM,UAAU,OAAO,YAAY,OAAO;EAC1C,aAAa,SACV,SAAS,WAAW,OAAO,cAAc,WAAW,IAAI,CAAC,CAAC,GAC3D,GAAI,WACA,EACG,oBAA6B;GAC5B,QAAQ,OAAO,cAAc,SAAS,eAAe,CAAC,CAAC;EACzD,CACF,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,SACL,IAAI,aACF,KACA,OACC,mBAAmB,gBAClB,aAAa,MAAM,mBAAmB,WAAW,GACnD,eACF,CACF;CACF;CAEA,MAAM,YACJ,KACA,GAAG,SAIA;EACH,MAAM,OAAQ,KAAK,MAAM,CAAC;EAC1B,OAAO,YACL,IAAI,aACF,KACA,OACC,mBAAmB,gBAClB,aAAa,SAAS,mBAAmB,WAAW,GACtD,eACF,CACF;CACF;CAEA,MAAM,UACJ,KACA,GAAG,SAIA;EACH,MAAM,OAAQ,KAAK,MAAM,CAAC;EAC1B,OAAO,UACL,IAAI,aACF,KACA,OACC,mBAAmB,gBAClB,aAAa,OAAO,mBAAmB,WAAW,GACpD,eACF,CACF;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,6 +1,56 @@
1
1
  {
2
2
  "name": "@gaganref/confect-js",
3
- "version": "0.0.0-stage",
4
- "stub": true,
5
- "description": "Temporary package placeholder for staged publishing"
3
+ "version": "10.3.1-fork.2",
4
+ "peerDependencies": {
5
+ "@confect/core": "npm:@gaganref/confect-core@10.3.1-fork.2",
6
+ "convex": "^1.32.0",
7
+ "effect": "^4.0.0"
8
+ },
9
+ "description": "JavaScript client bindings for any JS runtime",
10
+ "author": "RJ Dellecese",
11
+ "bugs": {
12
+ "url": "https://github.com/gaganref/confect"
13
+ },
14
+ "engines": {
15
+ "node": ">=24"
16
+ },
17
+ "exports": {
18
+ ".": {
19
+ "types": "./dist/index.d.ts",
20
+ "default": "./dist/index.js"
21
+ },
22
+ "./*": {
23
+ "types": "./dist/*.d.ts",
24
+ "default": "./dist/*.js"
25
+ },
26
+ "./package.json": "./package.json"
27
+ },
28
+ "files": [
29
+ "CHANGELOG.md",
30
+ "LICENSE",
31
+ "README.md",
32
+ "dist",
33
+ "!dist/*.tsbuildinfo",
34
+ "package.json",
35
+ "src"
36
+ ],
37
+ "homepage": "https://confect.dev",
38
+ "keywords": [
39
+ "convex",
40
+ "effect"
41
+ ],
42
+ "license": "ISC",
43
+ "main": "./dist/index.js",
44
+ "module": "./dist/index.js",
45
+ "repository": {
46
+ "type": "git",
47
+ "url": "git+https://github.com/gaganref/confect.git"
48
+ },
49
+ "sideEffects": false,
50
+ "type": "module",
51
+ "types": "./dist/index.d.ts",
52
+ "publishConfig": {
53
+ "registry": "https://registry.npmjs.org",
54
+ "access": "public"
55
+ }
6
56
  }
@@ -0,0 +1,40 @@
1
+ import { ConvexHttpClient } from "convex/browser";
2
+ import * as Context from "effect/Context";
3
+ import * as Layer from "effect/Layer";
4
+ import * as InternalHttpClient from "./internal/HttpClient";
5
+
6
+ export { HttpClientError } from "./internal/HttpClient";
7
+
8
+ const make = (
9
+ address: string,
10
+ options?: ConstructorParameters<typeof ConvexHttpClient>[1],
11
+ ) => {
12
+ const client = new ConvexHttpClient(address, options);
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),
23
+ });
24
+ };
25
+
26
+ /**
27
+ * A Confect client which uses HTTP to communicate with your Convex backend.
28
+ * Works in any JS runtime that supports `fetch`. Wraps
29
+ * [ConvexHttpClient](https://docs.convex.dev/api/classes/browser.ConvexHttpClient).
30
+ */
31
+ export const HttpClient = Context.Service<ReturnType<typeof make>>(
32
+ "@confect/js/HttpClient",
33
+ );
34
+
35
+ export type HttpClient = typeof HttpClient.Identifier;
36
+
37
+ export const layer = (
38
+ address: string,
39
+ options?: ConstructorParameters<typeof ConvexHttpClient>[1],
40
+ ) => Layer.sync(HttpClient, () => make(address, options));