@gettersethya/mira-client 0.1.0-alpha.2 → 0.1.0-alpha.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.
- package/README.md +147 -0
- package/dist/src/client/auth.d.ts +38 -13
- package/dist/src/client/auth.d.ts.map +1 -1
- package/dist/src/client/auth.js +25 -1
- package/dist/src/client/auth.js.map +1 -1
- package/dist/src/client/collection.d.ts +30 -13
- package/dist/src/client/collection.d.ts.map +1 -1
- package/dist/src/client/collection.js +17 -9
- package/dist/src/client/collection.js.map +1 -1
- package/dist/src/client/factory.d.ts +27 -3
- package/dist/src/client/factory.d.ts.map +1 -1
- package/dist/src/client/factory.js +19 -8
- package/dist/src/client/factory.js.map +1 -1
- package/dist/src/client/file.d.ts +2 -2
- package/dist/src/client/file.d.ts.map +1 -1
- package/dist/src/client/file.js +1 -1
- package/dist/src/client/file.js.map +1 -1
- package/dist/src/client/handler.d.ts +1 -1
- package/dist/src/client/handler.d.ts.map +1 -1
- package/dist/src/client/handler.js +3 -3
- package/dist/src/client/handler.js.map +1 -1
- package/dist/src/client/index.d.ts +10 -8
- package/dist/src/client/index.d.ts.map +1 -1
- package/dist/src/client/index.js +4 -3
- package/dist/src/client/index.js.map +1 -1
- package/dist/src/client/telemetry.d.ts +81 -0
- package/dist/src/client/telemetry.d.ts.map +1 -0
- package/dist/src/client/telemetry.js +34 -0
- package/dist/src/client/telemetry.js.map +1 -0
- package/dist/src/client/types.d.ts +2 -118
- package/dist/src/client/types.d.ts.map +1 -1
- package/dist/src/index.d.ts +2 -1
- package/dist/src/index.d.ts.map +1 -1
- package/dist/src/index.js +1 -1
- package/dist/src/index.js.map +1 -1
- package/dist/tests/client/auth.test.js +64 -3
- package/dist/tests/client/auth.test.js.map +1 -1
- package/dist/tests/client/collection.test.js +101 -14
- package/dist/tests/client/collection.test.js.map +1 -1
- package/dist/tests/client/factory.test.d.ts +2 -0
- package/dist/tests/client/factory.test.d.ts.map +1 -0
- package/dist/tests/client/factory.test.js +48 -0
- package/dist/tests/client/factory.test.js.map +1 -0
- package/dist/tests/client/handler.test.js +3 -3
- package/dist/tests/client/handler.test.js.map +1 -1
- package/dist/tests/client/telemetry.test.d.ts +2 -0
- package/dist/tests/client/telemetry.test.d.ts.map +1 -0
- package/dist/tests/client/telemetry.test.js +30 -0
- package/dist/tests/client/telemetry.test.js.map +1 -0
- package/dist/tests/client/types.test.js +26 -3
- package/dist/tests/client/types.test.js.map +1 -1
- package/dist/tsconfig.tsbuildinfo +1 -1
- package/package.json +6 -5
|
@@ -1,17 +1,17 @@
|
|
|
1
|
-
import { HttpClient, HttpClientRequest as HCR } from "@effect/platform";
|
|
2
1
|
import { Effect, MutableRef } from "effect";
|
|
2
|
+
import { FetchHttpClient, HttpClient, HttpClientRequest as HCR } from "effect/http";
|
|
3
3
|
import { makeBrowserAuth, makeServerAuth } from "./auth.js";
|
|
4
4
|
import { makeCollectionClient } from "./collection.js";
|
|
5
5
|
import { MiraError } from "./errors.js";
|
|
6
6
|
import { makeClientHandler as makeHandler } from "./handler.js";
|
|
7
|
+
import { makeTelemetryClient } from "./telemetry.js";
|
|
7
8
|
function catchAllErrors(effect) {
|
|
8
9
|
return effect.pipe(Effect.catchTags({
|
|
9
|
-
|
|
10
|
-
ResponseError: (e) => Effect.fail(new MiraError({ status: e.response.status, body: e.message })),
|
|
10
|
+
HttpClientError: (e) => Effect.fail(new MiraError({ status: e.response?.status ?? 0, body: e.message })),
|
|
11
11
|
HttpBodyError: (e) => Effect.fail(new MiraError({ status: 500, body: String(e) }))
|
|
12
12
|
}));
|
|
13
13
|
}
|
|
14
|
-
function createExecute(baseUrl, authTokenRef) {
|
|
14
|
+
function createExecute(baseUrl, authTokenRef, sendCredentials) {
|
|
15
15
|
return (req) => {
|
|
16
16
|
const raw = Effect.gen(function* () {
|
|
17
17
|
const http = yield* HttpClient.HttpClient;
|
|
@@ -27,14 +27,20 @@ function createExecute(baseUrl, authTokenRef) {
|
|
|
27
27
|
}
|
|
28
28
|
return (yield* res.json);
|
|
29
29
|
});
|
|
30
|
-
|
|
30
|
+
const effect = catchAllErrors(raw);
|
|
31
|
+
return sendCredentials
|
|
32
|
+
? Effect.provideService(effect, FetchHttpClient.RequestInit, { credentials: "include" })
|
|
33
|
+
: effect;
|
|
31
34
|
};
|
|
32
35
|
}
|
|
33
36
|
function createMiraClientInternal(baseUrl = "/", type = "browser", defaultRetryOptions) {
|
|
34
37
|
const fileTokenCacheRef = MutableRef.make(new Map());
|
|
35
38
|
const authTokenRef = type === "server" ? MutableRef.make(null) : null;
|
|
36
39
|
const loggedInRef = type === "browser" ? MutableRef.make(false) : null;
|
|
37
|
-
|
|
40
|
+
// Browser mode relies on the HttpOnly `mira_token` cookie, which the browser
|
|
41
|
+
// only stores/sends on cross-origin requests when `credentials: "include"`.
|
|
42
|
+
// Server/SSR mode authenticates via a Bearer token and never needs cookies.
|
|
43
|
+
const execute = createExecute(baseUrl, authTokenRef, type === "browser");
|
|
38
44
|
const makeClientHandler = (effect) => makeHandler(effect);
|
|
39
45
|
function buildCollectionClient(def) {
|
|
40
46
|
const isAuth = def.schema["x-collection-kind"] === "auth";
|
|
@@ -48,6 +54,7 @@ function createMiraClientInternal(baseUrl = "/", type = "browser", defaultRetryO
|
|
|
48
54
|
loggedInRef,
|
|
49
55
|
fileTokenCacheRef,
|
|
50
56
|
isAuth,
|
|
57
|
+
kind: def.schema["x-collection-kind"],
|
|
51
58
|
...(defaultRetryOptions !== undefined ? { defaultRetryOptions } : {})
|
|
52
59
|
});
|
|
53
60
|
}
|
|
@@ -73,7 +80,11 @@ function createMiraClientInternal(baseUrl = "/", type = "browser", defaultRetryO
|
|
|
73
80
|
return {
|
|
74
81
|
collection: (def) => buildCollectionClient(def),
|
|
75
82
|
auth: makeAuth(),
|
|
76
|
-
|
|
83
|
+
telemetry: makeTelemetryClient(execute),
|
|
84
|
+
withCollections,
|
|
85
|
+
me: ((_def) => {
|
|
86
|
+
return makeClientHandler(execute(HCR.get("/api/auth/me")));
|
|
87
|
+
})
|
|
77
88
|
};
|
|
78
89
|
}
|
|
79
90
|
return buildBaseClient();
|
|
@@ -100,7 +111,7 @@ function createMiraClientInternal(baseUrl = "/", type = "browser", defaultRetryO
|
|
|
100
111
|
* @see CollectionClient — the per-collection client interface
|
|
101
112
|
*/
|
|
102
113
|
export function createMiraClient(baseUrl = "/", opts = {}) {
|
|
103
|
-
const { type = "browser"
|
|
114
|
+
const { defaultRetryOptions, type = "browser" } = opts;
|
|
104
115
|
return createMiraClientInternal(baseUrl, type, defaultRetryOptions);
|
|
105
116
|
}
|
|
106
117
|
//# sourceMappingURL=factory.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"factory.js","sourceRoot":"","sources":["../../../src/client/factory.ts"],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"factory.js","sourceRoot":"","sources":["../../../src/client/factory.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,MAAM,EAAE,UAAU,EAAE,MAAM,QAAQ,CAAA;AAC3C,OAAO,EAAE,eAAe,EAAE,UAAU,EAAE,iBAAiB,IAAI,GAAG,EAAE,MAAM,aAAa,CAAA;AAKnF,OAAO,EAAE,eAAe,EAAE,cAAc,EAAE,MAAM,WAAW,CAAA;AAE3D,OAAO,EAAE,oBAAoB,EAAE,MAAM,iBAAiB,CAAA;AACtD,OAAO,EAAE,SAAS,EAAE,MAAM,aAAa,CAAA;AAEvC,OAAO,EAAE,iBAAiB,IAAI,WAAW,EAAE,MAAM,cAAc,CAAA;AAE/D,OAAO,EAAE,mBAAmB,EAAE,MAAM,gBAAgB,CAAA;AA+CpD,SAAS,cAAc,CACrB,MAA4F;IAE5F,OAAO,MAAM,CAAC,IAAI,CAChB,MAAM,CAAC,SAAS,CAAC;QACf,eAAe,EAAE,CAAC,CAAC,EAAE,EAAE,CACrB,MAAM,CAAC,IAAI,CAAC,IAAI,SAAS,CAAC,EAAE,MAAM,EAAE,CAAC,CAAC,QAAQ,EAAE,MAAM,IAAI,CAAC,EAAE,IAAI,EAAE,CAAC,CAAC,OAAO,EAAE,CAAC,CAAC;QAClF,aAAa,EAAE,CAAC,CAAC,EAAE,EAAE,CAAC,MAAM,CAAC,IAAI,CAAC,IAAI,SAAS,CAAC,EAAE,MAAM,EAAE,GAAG,EAAE,IAAI,EAAE,MAAM,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC;KACnF,CAAC,CACH,CAAA;AACH,CAAC;AAED,SAAS,aAAa,CACpB,OAAe,EACf,YAAyD,EACzD,eAAwB;IAExB,OAAO,CAAI,GAA0B,EAAE,EAAE;QACvC,MAAM,GAAG,GAAG,MAAM,CAAC,GAAG,CAAC,QAAQ,CAAC;YAC9B,MAAM,IAAI,GAAG,KAAK,CAAC,CAAC,UAAU,CAAC,UAAU,CAAA;YACzC,MAAM,KAAK,GAAG,YAAY,CAAC,CAAC,CAAC,UAAU,CAAC,GAAG,CAAC,YAAY,CAAC,CAAC,CAAC,CAAC,IAAI,CAAA;YAEhE,MAAM,QAAQ,GAAG,GAAG,CAAC,UAAU,CAAC,OAAO,CAAC,CAAC,KAAK,CAAC,CAAC,CAAC,GAAG,CAAC,SAAS,CAAC,GAAG,EAAE,eAAe,EAAE,UAAU,KAAK,EAAE,CAAC,CAAC,CAAC,CAAC,GAAG,CAAC,CAAA;YAE9G,MAAM,GAAG,GAAG,KAAK,CAAC,CAAC,IAAI,CAAC,OAAO,CAAC,QAAQ,CAAC,CAAA;YAEzC,IAAI,GAAG,CAAC,MAAM,IAAI,GAAG,EAAE,CAAC;gBACtB,MAAM,IAAI,GAAG,KAAK,CAAC,CAAC,GAAG,CAAC,IAAI,CAAA;gBAC5B,OAAO,KAAK,CAAC,CAAC,IAAI,SAAS,CAAC,EAAE,MAAM,EAAE,GAAG,CAAC,MAAM,EAAE,IAAI,EAAE,CAAC,CAAA;YAC3D,CAAC;YAED,IAAI,GAAG,CAAC,MAAM,KAAK,GAAG,EAAE,CAAC;gBACvB,OAAO,SAAc,CAAA;YACvB,CAAC;YAED,OAAO,CAAC,KAAK,CAAC,CAAC,GAAG,CAAC,IAAI,CAAM,CAAA;QAC/B,CAAC,CAAC,CAAA;QACF,MAAM,MAAM,GAAG,cAAc,CAAC,GAAG,CAAC,CAAA;QAClC,OAAO,eAAe;YACpB,CAAC,CAAC,MAAM,CAAC,cAAc,CAAC,MAAM,EAAE,eAAe,CAAC,WAAW,EAAE,EAAE,WAAW,EAAE,SAAS,EAAE,CAAC;YACxF,CAAC,CAAC,MAAM,CAAA;IACZ,CAAC,CAAA;AACH,CAAC;AAED,SAAS,wBAAwB,CAC/B,OAAO,GAAG,GAAG,EACb,OAA6B,SAAS,EACtC,mBAAkC;IAElC,MAAM,iBAAiB,GAAG,UAAU,CAAC,IAAI,CAAC,IAAI,GAAG,EAAgD,CAAC,CAAA;IAElG,MAAM,YAAY,GAAG,IAAI,KAAK,QAAQ,CAAC,CAAC,CAAC,UAAU,CAAC,IAAI,CAAgB,IAAI,CAAC,CAAC,CAAC,CAAC,IAAI,CAAA;IAEpF,MAAM,WAAW,GAAG,IAAI,KAAK,SAAS,CAAC,CAAC,CAAC,UAAU,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC,IAAI,CAAA;IAEtE,6EAA6E;IAC7E,4EAA4E;IAC5E,4EAA4E;IAC5E,MAAM,OAAO,GAAG,aAAa,CAAC,OAAO,EAAE,YAAY,EAAE,IAAI,KAAK,SAAS,CAAC,CAAA;IAExE,MAAM,iBAAiB,GAAG,CAAI,MAA0D,EAAoB,EAAE,CAC5G,WAAW,CAAC,MAAM,CAAC,CAAA;IAErB,SAAS,qBAAqB,CAA6B,GAAM;QAC/D,MAAM,MAAM,GAAG,GAAG,CAAC,MAAM,CAAC,mBAAmB,CAAC,KAAK,MAAM,CAAA;QACzD,OAAO,oBAAoB,CAAC;YAC1B,cAAc,EAAE,GAAG,CAAC,IAAI;YACxB,MAAM,EAAE,GAAG,CAAC,MAAM;YAClB,MAAM,EAAE,GAAG,CAAC,MAAM;YAClB,OAAO;YACP,OAAO;YACP,YAAY;YACZ,WAAW;YACX,iBAAiB;YACjB,MAAM;YACN,IAAI,EAAE,GAAG,CAAC,MAAM,CAAC,mBAAmB,CAAC;YACrC,GAAG,CAAC,mBAAmB,KAAK,SAAS,CAAC,CAAC,CAAC,EAAE,mBAAmB,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC;SACtE,CAAC,CAAA;IACJ,CAAC;IAED,SAAS,QAAQ;QACf,IAAI,IAAI,KAAK,QAAQ,IAAI,YAAY,KAAK,IAAI,EAAE,CAAC;YAC/C,OAAO,cAAc,CAAC,YAAY,EAAE,iBAAiB,CAAC,CAAA;QACxD,CAAC;QACD,IAAI,WAAW,KAAK,IAAI,EAAE,CAAC;YACzB,OAAO,eAAe,CAAC,OAAO,EAAE,iBAAiB,EAAE,WAAW,CAAC,CAAA;QACjE,CAAC;QACD,OAAO,eAAe,CAAC,OAAO,EAAE,iBAAiB,EAAE,UAAU,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC,CAAA;IAC5E,CAAC;IAED,SAAS,eAAe,CAA6C,GAAM,EAAE,IAAsC;QACjH,MAAM,UAAU,GAAG,eAAe,EAAE,CAAA;QACpC,MAAM,WAAW,GAAG,EAA4B,CAAA;QAChD,KAAK,MAAM,GAAG,IAAI,MAAM,CAAC,IAAI,CAAC,GAAG,CAAmB,EAAE,CAAC;YACrD,MAAM,GAAG,GAAG,qBAAqB,CAAC,GAAG,CAAC,GAAG,CAAC,CAAC,CAAA;YAC3C,WAAW,CAAC,GAAG,CAAC,GAAG,CAAC,IAAI,EAAE,OAAO,CAAC,CAAC,CAAC,IAAI,CAAC,OAAO,CAAC,GAAG,EAAE,MAAM,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,CAAC,GAAG,CAAoC,CAAA;QAC9G,CAAC;QACD,OAAO,MAAM,CAAC,MAAM,CAAC,UAAU,EAAE,WAAW,CAAC,CAAA;IAC/C,CAAC;IAED,SAAS,eAAe;QACtB,OAAO;YACL,UAAU,EAAE,CAA6B,GAAM,EAAE,EAAE,CAAC,qBAAqB,CAAC,GAAG,CAAC;YAC9E,IAAI,EAAE,QAAQ,EAAE;YAChB,SAAS,EAAE,mBAAmB,CAAC,OAAO,CAAC;YACvC,eAAe;YACf,EAAE,EAAE,CAAC,CAAiC,IAAQ,EAAE,EAAE;gBAChD,OAAO,iBAAiB,CACtB,OAAO,CAGJ,GAAG,CAAC,GAAG,CAAC,cAAc,CAAC,CAAC,CAC5B,CAAA;YACH,CAAC,CAAqB;SACvB,CAAA;IACH,CAAC;IAED,OAAO,eAAe,EAAE,CAAA;AAC1B,CAAC;AAoDD;;;;;;;;;;;;;;;;;;;;GAoBG;AACH,MAAM,UAAU,gBAAgB,CAC9B,OAAO,GAAG,GAAG,EACb,OAA4E,EAAE;IAE9E,MAAM,EAAE,mBAAmB,EAAE,IAAI,GAAG,SAAS,EAAE,GAAG,IAAI,CAAA;IACtD,OAAO,wBAAwB,CAAC,OAAO,EAAE,IAAI,EAAE,mBAAmB,CAAyC,CAAA;AAC7G,CAAC"}
|
|
@@ -1,6 +1,6 @@
|
|
|
1
|
-
import type { HttpClient } from "@effect/platform";
|
|
2
|
-
import { Effect, MutableRef } from "effect";
|
|
3
1
|
import type { AnyCollectionDef, FieldsMap } from "@gettersethya/mira-collection";
|
|
2
|
+
import { Effect, MutableRef } from "effect";
|
|
3
|
+
import type { HttpClient } from "effect/http";
|
|
4
4
|
import { MiraError } from "./errors.js";
|
|
5
5
|
import type { ClientHandler, ExecuteFn } from "./handler.js";
|
|
6
6
|
import type { CollectionFileFields } from "./types.js";
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"file.d.ts","sourceRoot":"","sources":["../../../src/client/file.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,
|
|
1
|
+
{"version":3,"file":"file.d.ts","sourceRoot":"","sources":["../../../src/client/file.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,gBAAgB,EAAE,SAAS,EAAE,MAAM,+BAA+B,CAAA;AAChF,OAAO,EAAE,MAAM,EAAE,UAAU,EAAE,MAAM,QAAQ,CAAA;AAC3C,OAAO,KAAK,EAAE,UAAU,EAAqB,MAAM,aAAa,CAAA;AAIhE,OAAO,EAAE,SAAS,EAAE,MAAM,aAAa,CAAA;AACvC,OAAO,KAAK,EAAE,aAAa,EAAE,SAAS,EAAE,MAAM,cAAc,CAAA;AAC5D,OAAO,KAAK,EAAE,oBAAoB,EAAE,MAAM,YAAY,CAAA;AAEtD;;;;;;;;;;;;;;;;;;;;;;;;;;GA0BG;AACH,wBAAgB,YAAY,CAC1B,OAAO,EAAE,MAAM,EACf,UAAU,EAAE,MAAM,EAClB,EAAE,EAAE,MAAM,EACV,QAAQ,EAAE,MAAM,EAChB,IAAI,CAAC,EAAE;IAAE,KAAK,CAAC,EAAE,MAAM,CAAC;IAAC,KAAK,CAAC,EAAE,MAAM,CAAA;CAAE,GACxC,MAAM,CAOR;AAcD;;;;;GAKG;AACH,wBAAgB,gBAAgB,CAC9B,OAAO,EAAE,SAAS,EAClB,QAAQ,EAAE,UAAU,CAAC,UAAU,CAAC,GAAG,CAAC,MAAM,EAAE;IAAE,KAAK,EAAE,MAAM,CAAC;IAAC,SAAS,EAAE,MAAM,CAAA;CAAE,CAAC,CAAC,GACjF,CAAC,UAAU,EAAE,MAAM,KAAK,MAAM,CAAC,MAAM,CAAC,MAAM,EAAE,SAAS,EAAE,UAAU,CAAC,UAAU,CAAC,CAkBjF;AAED;;;;;;;;;;;;;;;GAeG;AACH,MAAM,MAAM,qBAAqB,GAAG;IAClC,WAAW,EAAE,KAAK,CAAA;IAClB,GAAG,CAAC,EAAE,EAAE,MAAM,EAAE,QAAQ,EAAE,MAAM,EAAE,IAAI,CAAC,EAAE;QAAE,KAAK,CAAC,EAAE,MAAM,CAAA;KAAE,GAAG,MAAM,CAAA;CACrE,CAAA;AAED;;;;;;;;;;;;;;;;;;;;;;;GAuBG;AACH,MAAM,MAAM,wBAAwB,GAAG;IACrC,WAAW,EAAE,IAAI,CAAA;IACjB,QAAQ,CAAC,EAAE,EAAE,MAAM,EAAE,QAAQ,EAAE,MAAM,EAAE,IAAI,CAAC,EAAE;QAAE,KAAK,CAAC,EAAE,MAAM,CAAA;KAAE,GAAG,aAAa,CAAC,MAAM,CAAC,CAAA;IACxF,GAAG,CAAC,EAAE,EAAE,MAAM,EAAE,QAAQ,EAAE,MAAM,EAAE,IAAI,EAAE;QAAE,KAAK,EAAE,MAAM,CAAC;QAAC,KAAK,CAAC,EAAE,MAAM,CAAA;KAAE,GAAG,MAAM,CAAA;IAClF,QAAQ,IAAI,aAAa,CAAC,MAAM,CAAC,CAAA;CAClC,CAAA;AAED;;;;;;GAMG;AACH,wBAAgB,cAAc,CAAC,CAAC,SAAS,SAAS,EAChD,UAAU,EAAE,gBAAgB,EAC5B,MAAM,EAAE,gBAAgB,CAAC,QAAQ,CAAC,EAClC,OAAO,EAAE,MAAM,EACf,OAAO,EAAE,SAAS,EAClB,QAAQ,EAAE,UAAU,CAAC,UAAU,CAAC,GAAG,CAAC,MAAM,EAAE;IAAE,KAAK,EAAE,MAAM,CAAC;IAAC,SAAS,EAAE,MAAM,CAAA;CAAE,CAAC,CAAC,EAClF,iBAAiB,EAAE,CAAC,CAAC,EAAE,MAAM,EAAE,MAAM,CAAC,MAAM,CAAC,CAAC,EAAE,SAAS,EAAE,UAAU,CAAC,UAAU,CAAC,KAAK,aAAa,CAAC,CAAC,CAAC,GACrG,oBAAoB,CAAC,CAAC,CAAC,CAoCzB"}
|
package/dist/src/client/file.js
CHANGED
|
@@ -1,5 +1,5 @@
|
|
|
1
|
-
import { HttpClientRequest as HCR } from "@effect/platform";
|
|
2
1
|
import { Effect, MutableRef } from "effect";
|
|
2
|
+
import { HttpClientRequest as HCR } from "effect/http";
|
|
3
3
|
import { MiraError } from "./errors.js";
|
|
4
4
|
/**
|
|
5
5
|
* Build a file request URL for the Mira file-serving endpoint.
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"file.js","sourceRoot":"","sources":["../../../src/client/file.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,
|
|
1
|
+
{"version":3,"file":"file.js","sourceRoot":"","sources":["../../../src/client/file.ts"],"names":[],"mappings":"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"}
|
|
@@ -1,5 +1,5 @@
|
|
|
1
|
-
import type { HttpClient, HttpClientRequest } from "@effect/platform";
|
|
2
1
|
import { Effect } from "effect";
|
|
2
|
+
import type { HttpClient, HttpClientRequest } from "effect/http";
|
|
3
3
|
import type { MiraError } from "./errors.js";
|
|
4
4
|
/**
|
|
5
5
|
* A dual-interface handler for dealing with Mira server responses.
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"handler.d.ts","sourceRoot":"","sources":["../../../src/client/handler.ts"],"names":[],"mappings":"AAAA,OAAO,
|
|
1
|
+
{"version":3,"file":"handler.d.ts","sourceRoot":"","sources":["../../../src/client/handler.ts"],"names":[],"mappings":"AAAA,OAAO,EAAS,MAAM,EAAgB,MAAM,QAAQ,CAAA;AACpD,OAAO,KAAK,EAAE,UAAU,EAAE,iBAAiB,EAAE,MAAM,aAAa,CAAA;AAGhE,OAAO,KAAK,EAAE,SAAS,EAAE,MAAM,aAAa,CAAA;AAE5C;;;;;;;;;;;;;;;;;;;;;;;;;;;GA2BG;AACH,MAAM,MAAM,aAAa,CAAC,KAAK,EAAE,MAAM,GAAG,IAAI,IAAI,MAAM,SAAS,IAAI,GACjE;IACE,GAAG,IAAI,OAAO,CAAC,KAAK,CAAC,CAAA;IACrB,QAAQ,IAAI,MAAM,CAAC,MAAM,CAAC,KAAK,EAAE,SAAS,EAAE,UAAU,CAAC,UAAU,CAAC,CAAA;CACnE,GACD;IACE,GAAG,CAAC,KAAK,EAAE,MAAM,GAAG,OAAO,CAAC,KAAK,CAAC,CAAA;IAClC,QAAQ,CAAC,KAAK,EAAE,MAAM,GAAG,MAAM,CAAC,MAAM,CAAC,KAAK,EAAE,SAAS,EAAE,UAAU,CAAC,UAAU,CAAC,CAAA;CAChF,CAAA;AAEL;;;;;;;;;;;;;;;;;;GAkBG;AACH,wBAAgB,iBAAiB,CAAC,CAAC,EACjC,MAAM,EAAE,MAAM,CAAC,MAAM,CAAC,CAAC,EAAE,SAAS,EAAE,UAAU,CAAC,UAAU,CAAC,GACzD,aAAa,CAAC,CAAC,CAAC,CAWlB;AAED;;;;;;;;;;;;;;;;;;GAkBG;AACH,wBAAgB,mBAAmB,CAAC,KAAK,EAAE,MAAM,EAC/C,EAAE,EAAE,CAAC,KAAK,EAAE,MAAM,KAAK,MAAM,CAAC,MAAM,CAAC,KAAK,EAAE,SAAS,EAAE,UAAU,CAAC,UAAU,CAAC,GAC5E,aAAa,CAAC,KAAK,EAAE,MAAM,CAAC,CAY9B;AAED;;;;;;;;;;;GAWG;AACH,MAAM,MAAM,SAAS,GAAG,CAAC,CAAC,EACxB,GAAG,EAAE,iBAAiB,CAAC,iBAAiB,KACrC,MAAM,CAAC,MAAM,CAAC,CAAC,EAAE,SAAS,EAAE,UAAU,CAAC,UAAU,CAAC,CAAA"}
|
|
@@ -1,5 +1,5 @@
|
|
|
1
|
-
import { FetchHttpClient } from "@effect/platform";
|
|
2
1
|
import { Cause, Effect, Exit, Option } from "effect";
|
|
2
|
+
import { FetchHttpClient } from "effect/http";
|
|
3
3
|
/**
|
|
4
4
|
* Construct a `ClientHandler<T>` (query variant, TInput = void) from an Effect.
|
|
5
5
|
*
|
|
@@ -24,7 +24,7 @@ export function makeClientHandler(effect) {
|
|
|
24
24
|
raw: () => Effect.runPromiseExit(effect.pipe(Effect.provide(FetchHttpClient.layer))).then((exit) => {
|
|
25
25
|
if (Exit.isSuccess(exit))
|
|
26
26
|
return exit.value;
|
|
27
|
-
return Promise.reject(Option.getOrElse(Cause.
|
|
27
|
+
return Promise.reject(Option.getOrElse(Cause.findErrorOption(exit.cause), () => Cause.squash(exit.cause)));
|
|
28
28
|
}),
|
|
29
29
|
toEffect: () => effect,
|
|
30
30
|
};
|
|
@@ -53,7 +53,7 @@ export function makeMutationHandler(fn) {
|
|
|
53
53
|
raw: (input) => Effect.runPromiseExit(fn(input).pipe(Effect.provide(FetchHttpClient.layer))).then((exit) => {
|
|
54
54
|
if (Exit.isSuccess(exit))
|
|
55
55
|
return exit.value;
|
|
56
|
-
return Promise.reject(Option.getOrElse(Cause.
|
|
56
|
+
return Promise.reject(Option.getOrElse(Cause.findErrorOption(exit.cause), () => Cause.squash(exit.cause)));
|
|
57
57
|
}),
|
|
58
58
|
toEffect: (input) => fn(input),
|
|
59
59
|
};
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"handler.js","sourceRoot":"","sources":["../../../src/client/handler.ts"],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"handler.js","sourceRoot":"","sources":["../../../src/client/handler.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,KAAK,EAAE,MAAM,EAAE,IAAI,EAAE,MAAM,EAAE,MAAM,QAAQ,CAAA;AAEpD,OAAO,EAAE,eAAe,EAAE,MAAM,aAAa,CAAA;AA0C7C;;;;;;;;;;;;;;;;;;GAkBG;AACH,MAAM,UAAU,iBAAiB,CAC/B,MAA0D;IAE1D,OAAO;QACL,GAAG,EAAE,GAAG,EAAE,CACR,MAAM,CAAC,cAAc,CAAC,MAAM,CAAC,IAAI,CAAC,MAAM,CAAC,OAAO,CAAC,eAAe,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC,IAAI,EAAE,EAAE;YACtF,IAAI,IAAI,CAAC,SAAS,CAAC,IAAI,CAAC;gBAAE,OAAO,IAAI,CAAC,KAAK,CAAA;YAC3C,OAAO,OAAO,CAAC,MAAM,CACnB,MAAM,CAAC,SAAS,CAAC,KAAK,CAAC,eAAe,CAAC,IAAI,CAAC,KAAK,CAAC,EAAE,GAAG,EAAE,CAAC,KAAK,CAAC,MAAM,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC,CACpF,CAAA;QACH,CAAC,CAAC;QACJ,QAAQ,EAAE,GAAG,EAAE,CAAC,MAAM;KACvB,CAAA;AACH,CAAC;AAED;;;;;;;;;;;;;;;;;;GAkBG;AACH,MAAM,UAAU,mBAAmB,CACjC,EAA6E;IAE7E,MAAM,OAAO,GAAG;QACd,GAAG,EAAE,CAAC,KAAa,EAAE,EAAE,CACrB,MAAM,CAAC,cAAc,CAAC,EAAE,CAAC,KAAK,CAAC,CAAC,IAAI,CAAC,MAAM,CAAC,OAAO,CAAC,eAAe,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC,IAAI,EAAE,EAAE;YACzF,IAAI,IAAI,CAAC,SAAS,CAAC,IAAI,CAAC;gBAAE,OAAO,IAAI,CAAC,KAAK,CAAA;YAC3C,OAAO,OAAO,CAAC,MAAM,CACnB,MAAM,CAAC,SAAS,CAAC,KAAK,CAAC,eAAe,CAAC,IAAI,CAAC,KAAK,CAAC,EAAE,GAAG,EAAE,CAAC,KAAK,CAAC,MAAM,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC,CACpF,CAAA;QACH,CAAC,CAAC;QACJ,QAAQ,EAAE,CAAC,KAAa,EAAE,EAAE,CAAC,EAAE,CAAC,KAAK,CAAC;KACvC,CAAA;IACD,OAAO,OAAuC,CAAA;AAChD,CAAC"}
|
|
@@ -1,11 +1,13 @@
|
|
|
1
|
-
export { createMiraClient } from "./factory.js";
|
|
2
|
-
export { makeClientHandler, makeMutationHandler } from "./handler.js";
|
|
3
|
-
export type { ClientHandler, ExecuteFn } from "./handler.js";
|
|
4
|
-
export { MiraError } from "./errors.js";
|
|
5
|
-
export type { InferRecord, InferCreateInput, InferMutationInput, WithExpand, CollectionFileFields, RelationKeys, FileKeys } from "./types.js";
|
|
6
1
|
export type { BrowserAuth, ServerAuth } from "./auth.js";
|
|
7
|
-
export type {
|
|
8
|
-
export { buildFileUrl } from "./file.js";
|
|
2
|
+
export type { CollectionClient, FilterBuilder, RetryOptions } from "./collection.js";
|
|
9
3
|
export { makeCollectionClient } from "./collection.js";
|
|
10
|
-
export
|
|
4
|
+
export { MiraError } from "./errors.js";
|
|
5
|
+
export { createMiraClient } from "./factory.js";
|
|
6
|
+
export type { ProtectedFileFieldClient, PublicFileFieldClient } from "./file.js";
|
|
7
|
+
export { buildFileUrl } from "./file.js";
|
|
8
|
+
export type { ClientHandler, ExecuteFn } from "./handler.js";
|
|
9
|
+
export { makeClientHandler, makeMutationHandler } from "./handler.js";
|
|
10
|
+
export type { ApiCollectionSchema, ApiFieldSchema, LogsResponse, SpanRow, SpansResponse, TelemetryClient } from "./telemetry.js";
|
|
11
|
+
export { makeTelemetryClient } from "./telemetry.js";
|
|
12
|
+
export type { AnyAuthCollectionDef, AuthCreateInput, AuthUpdateInput, CollectionFileFields, CollectionKind, FileKeys, InferCreateInput, InferMutationInput, InferRecord, RegisterInput, RelationKeys, WithExpand } from "./types.js";
|
|
11
13
|
//# sourceMappingURL=index.d.ts.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../src/client/index.ts"],"names":[],"mappings":"AAAA,
|
|
1
|
+
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../src/client/index.ts"],"names":[],"mappings":"AAAA,YAAY,EAAE,WAAW,EAAE,UAAU,EAAE,MAAM,WAAW,CAAA;AACxD,YAAY,EAAE,gBAAgB,EAAE,aAAa,EAAE,YAAY,EAAE,MAAM,iBAAiB,CAAA;AACpF,OAAO,EAAE,oBAAoB,EAAE,MAAM,iBAAiB,CAAA;AACtD,OAAO,EAAE,SAAS,EAAE,MAAM,aAAa,CAAA;AACvC,OAAO,EAAE,gBAAgB,EAAE,MAAM,cAAc,CAAA;AAC/C,YAAY,EAAE,wBAAwB,EAAC,qBAAqB,EAAE,MAAM,WAAW,CAAA;AAC/E,OAAO,EAAE,YAAY,EAAE,MAAM,WAAW,CAAA;AACxC,YAAY,EAAE,aAAa,EAAE,SAAS,EAAE,MAAM,cAAc,CAAA;AAC5D,OAAO,EAAE,iBAAiB,EAAE,mBAAmB,EAAE,MAAM,cAAc,CAAA;AACrE,YAAY,EAAE,mBAAmB,EAAE,cAAc,EAAE,YAAY,EAAE,OAAO,EAAE,aAAa,EAAC,eAAe,EAAE,MAAM,gBAAgB,CAAA;AAC/H,OAAO,EAAE,mBAAmB,EAAE,MAAM,gBAAgB,CAAA;AACpD,YAAY,EAAE,oBAAoB,EAAC,eAAe,EAAC,eAAe,EAAC,oBAAoB,EAAE,cAAc,EAAE,QAAQ,EAAE,gBAAgB,EAAE,kBAAkB,EAAE,WAAW,EAAE,aAAa,EAAE,YAAY,EAAE,UAAU,EAAE,MAAM,YAAY,CAAA"}
|
package/dist/src/client/index.js
CHANGED
|
@@ -1,6 +1,7 @@
|
|
|
1
|
-
export {
|
|
2
|
-
export { makeClientHandler, makeMutationHandler } from "./handler.js";
|
|
1
|
+
export { makeCollectionClient } from "./collection.js";
|
|
3
2
|
export { MiraError } from "./errors.js";
|
|
3
|
+
export { createMiraClient } from "./factory.js";
|
|
4
4
|
export { buildFileUrl } from "./file.js";
|
|
5
|
-
export {
|
|
5
|
+
export { makeClientHandler, makeMutationHandler } from "./handler.js";
|
|
6
|
+
export { makeTelemetryClient } from "./telemetry.js";
|
|
6
7
|
//# sourceMappingURL=index.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.js","sourceRoot":"","sources":["../../../src/client/index.ts"],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"index.js","sourceRoot":"","sources":["../../../src/client/index.ts"],"names":[],"mappings":"AAEA,OAAO,EAAE,oBAAoB,EAAE,MAAM,iBAAiB,CAAA;AACtD,OAAO,EAAE,SAAS,EAAE,MAAM,aAAa,CAAA;AACvC,OAAO,EAAE,gBAAgB,EAAE,MAAM,cAAc,CAAA;AAE/C,OAAO,EAAE,YAAY,EAAE,MAAM,WAAW,CAAA;AAExC,OAAO,EAAE,iBAAiB,EAAE,mBAAmB,EAAE,MAAM,cAAc,CAAA;AAErE,OAAO,EAAE,mBAAmB,EAAE,MAAM,gBAAgB,CAAA"}
|
|
@@ -0,0 +1,81 @@
|
|
|
1
|
+
import type { FilterNode } from "@gettersethya/mira-collection";
|
|
2
|
+
import type { ClientHandler, ExecuteFn } from "./handler.js";
|
|
3
|
+
export type ApiFieldSchema = {
|
|
4
|
+
type?: string;
|
|
5
|
+
format?: string;
|
|
6
|
+
"x-kind"?: string;
|
|
7
|
+
"x-system"?: boolean;
|
|
8
|
+
"x-hidden"?: boolean;
|
|
9
|
+
"x-generated"?: boolean;
|
|
10
|
+
"x-view-only"?: boolean;
|
|
11
|
+
"x-required"?: boolean;
|
|
12
|
+
"x-collection"?: string;
|
|
13
|
+
"x-field"?: string;
|
|
14
|
+
"x-protected"?: boolean;
|
|
15
|
+
};
|
|
16
|
+
export type ApiCollectionSchema = {
|
|
17
|
+
name: string;
|
|
18
|
+
kind: "base" | "auth" | "view";
|
|
19
|
+
fields: Record<string, ApiFieldSchema>;
|
|
20
|
+
required?: Array<string>;
|
|
21
|
+
indexes?: Array<unknown>;
|
|
22
|
+
rules?: unknown;
|
|
23
|
+
viewQuery?: string;
|
|
24
|
+
};
|
|
25
|
+
type LogEntry = {
|
|
26
|
+
id: string;
|
|
27
|
+
seqId: number;
|
|
28
|
+
level: string;
|
|
29
|
+
message: string;
|
|
30
|
+
created: string;
|
|
31
|
+
traceId: string | null;
|
|
32
|
+
spanId: string | null;
|
|
33
|
+
};
|
|
34
|
+
export type SpanRow = {
|
|
35
|
+
id: string;
|
|
36
|
+
seqId?: number;
|
|
37
|
+
name: string;
|
|
38
|
+
traceId: string;
|
|
39
|
+
spanId: string;
|
|
40
|
+
parentSpanId: string | null;
|
|
41
|
+
kind: string;
|
|
42
|
+
durationMs: number;
|
|
43
|
+
status: "ok" | "error";
|
|
44
|
+
error: string | null;
|
|
45
|
+
attributes: Record<string, string | number | boolean>;
|
|
46
|
+
created: string;
|
|
47
|
+
};
|
|
48
|
+
export type LogsResponse = {
|
|
49
|
+
logs: Array<LogEntry>;
|
|
50
|
+
total: number;
|
|
51
|
+
limit: number;
|
|
52
|
+
nextCursor: number | null;
|
|
53
|
+
};
|
|
54
|
+
export type SpansResponse = {
|
|
55
|
+
spans: Array<SpanRow>;
|
|
56
|
+
total: number;
|
|
57
|
+
limit: number;
|
|
58
|
+
nextCursor: number | null;
|
|
59
|
+
};
|
|
60
|
+
export type TelemetryClient = {
|
|
61
|
+
getLogs(opts?: {
|
|
62
|
+
limit?: number;
|
|
63
|
+
cursor?: number | null;
|
|
64
|
+
filter?: FilterNode;
|
|
65
|
+
}): ClientHandler<LogsResponse>;
|
|
66
|
+
getSpans(opts?: {
|
|
67
|
+
limit?: number;
|
|
68
|
+
cursor?: number | null;
|
|
69
|
+
traceId?: string;
|
|
70
|
+
filter?: FilterNode;
|
|
71
|
+
}): ClientHandler<SpansResponse>;
|
|
72
|
+
/**
|
|
73
|
+
* Fetches all registered collection schemas from `GET /api/_schema`.
|
|
74
|
+
* Returns an array of `CollectionSchema` objects describing each collection's
|
|
75
|
+
* fields, kind, indexes, rules, and (for view collections) the SQL view query.
|
|
76
|
+
*/
|
|
77
|
+
getSchema(): ClientHandler<Array<ApiCollectionSchema>>;
|
|
78
|
+
};
|
|
79
|
+
export declare function makeTelemetryClient(execute: ExecuteFn): TelemetryClient;
|
|
80
|
+
export {};
|
|
81
|
+
//# sourceMappingURL=telemetry.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"telemetry.d.ts","sourceRoot":"","sources":["../../../src/client/telemetry.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,34 @@
|
|
|
1
|
+
import { HttpClientRequest as HCR } from "effect/http";
|
|
2
|
+
import { makeClientHandler } from "./handler.js";
|
|
3
|
+
function buildQueryParams(params) {
|
|
4
|
+
const sp = new URLSearchParams();
|
|
5
|
+
for (const [k, v] of Object.entries(params)) {
|
|
6
|
+
if (v !== undefined)
|
|
7
|
+
sp.set(k, v);
|
|
8
|
+
}
|
|
9
|
+
const qs = sp.toString();
|
|
10
|
+
return qs ? `?${qs}` : "";
|
|
11
|
+
}
|
|
12
|
+
export function makeTelemetryClient(execute) {
|
|
13
|
+
return {
|
|
14
|
+
getLogs: (opts) => {
|
|
15
|
+
const qs = buildQueryParams({
|
|
16
|
+
limit: opts?.limit !== undefined ? String(opts.limit) : undefined,
|
|
17
|
+
after: opts?.cursor != null ? String(opts.cursor) : undefined,
|
|
18
|
+
filter: opts?.filter !== undefined ? JSON.stringify(opts.filter) : undefined,
|
|
19
|
+
});
|
|
20
|
+
return makeClientHandler(execute(HCR.get(`/api/_telemetry/logs${qs}`)));
|
|
21
|
+
},
|
|
22
|
+
getSpans: (opts) => {
|
|
23
|
+
const qs = buildQueryParams({
|
|
24
|
+
limit: opts?.limit !== undefined ? String(opts.limit) : undefined,
|
|
25
|
+
after: opts?.cursor != null ? String(opts.cursor) : undefined,
|
|
26
|
+
traceId: opts?.traceId,
|
|
27
|
+
filter: opts?.filter !== undefined ? JSON.stringify(opts.filter) : undefined,
|
|
28
|
+
});
|
|
29
|
+
return makeClientHandler(execute(HCR.get(`/api/_telemetry/spans${qs}`)));
|
|
30
|
+
},
|
|
31
|
+
getSchema: () => makeClientHandler(execute(HCR.get("/api/_schema"))),
|
|
32
|
+
};
|
|
33
|
+
}
|
|
34
|
+
//# sourceMappingURL=telemetry.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"telemetry.js","sourceRoot":"","sources":["../../../src/client/telemetry.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,iBAAiB,IAAI,GAAG,EAAE,MAAM,aAAa,CAAA;AAGtD,OAAO,EAAE,iBAAiB,EAAE,MAAM,cAAc,CAAA;AAuFhD,SAAS,gBAAgB,CAAC,MAA0C;IAClE,MAAM,EAAE,GAAG,IAAI,eAAe,EAAE,CAAA;IAChC,KAAK,MAAM,CAAC,CAAC,EAAE,CAAC,CAAC,IAAI,MAAM,CAAC,OAAO,CAAC,MAAM,CAAC,EAAE,CAAC;QAC5C,IAAI,CAAC,KAAK,SAAS;YAAE,EAAE,CAAC,GAAG,CAAC,CAAC,EAAE,CAAC,CAAC,CAAA;IACnC,CAAC;IACD,MAAM,EAAE,GAAG,EAAE,CAAC,QAAQ,EAAE,CAAA;IACxB,OAAO,EAAE,CAAC,CAAC,CAAC,IAAI,EAAE,EAAE,CAAC,CAAC,CAAC,EAAE,CAAA;AAC3B,CAAC;AAED,MAAM,UAAU,mBAAmB,CAAC,OAAkB;IACpD,OAAO;QACL,OAAO,EAAE,CAAC,IAAI,EAAE,EAAE;YAChB,MAAM,EAAE,GAAG,gBAAgB,CAAC;gBAC1B,KAAK,EAAE,IAAI,EAAE,KAAK,KAAK,SAAS,CAAC,CAAC,CAAC,MAAM,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC,SAAS;gBACjE,KAAK,EAAE,IAAI,EAAE,MAAM,IAAI,IAAI,CAAC,CAAC,CAAC,MAAM,CAAC,IAAI,CAAC,MAAM,CAAC,CAAC,CAAC,CAAC,SAAS;gBAC7D,MAAM,EAAE,IAAI,EAAE,MAAM,KAAK,SAAS,CAAC,CAAC,CAAC,IAAI,CAAC,SAAS,CAAC,IAAI,CAAC,MAAM,CAAC,CAAC,CAAC,CAAC,SAAS;aAC7E,CAAC,CAAA;YACF,OAAO,iBAAiB,CAAC,OAAO,CAAC,GAAG,CAAC,GAAG,CAAC,uBAAuB,EAAE,EAAE,CAAC,CAAC,CAAC,CAAA;QACzE,CAAC;QAED,QAAQ,EAAE,CAAC,IAAI,EAAE,EAAE;YACjB,MAAM,EAAE,GAAG,gBAAgB,CAAC;gBAC1B,KAAK,EAAE,IAAI,EAAE,KAAK,KAAK,SAAS,CAAC,CAAC,CAAC,MAAM,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC,SAAS;gBACjE,KAAK,EAAE,IAAI,EAAE,MAAM,IAAI,IAAI,CAAC,CAAC,CAAC,MAAM,CAAC,IAAI,CAAC,MAAM,CAAC,CAAC,CAAC,CAAC,SAAS;gBAC7D,OAAO,EAAE,IAAI,EAAE,OAAO;gBACtB,MAAM,EAAE,IAAI,EAAE,MAAM,KAAK,SAAS,CAAC,CAAC,CAAC,IAAI,CAAC,SAAS,CAAC,IAAI,CAAC,MAAM,CAAC,CAAC,CAAC,CAAC,SAAS;aAC7E,CAAC,CAAA;YACF,OAAO,iBAAiB,CAAC,OAAO,CAAC,GAAG,CAAC,GAAG,CAAC,wBAAwB,EAAE,EAAE,CAAC,CAAC,CAAC,CAAA;QAC1E,CAAC;QAED,SAAS,EAAE,GAAG,EAAE,CAAC,iBAAiB,CAAC,OAAO,CAAC,GAAG,CAAC,GAAG,CAAC,cAAc,CAAC,CAAC,CAAC;KACrE,CAAA;AACH,CAAC"}
|
|
@@ -1,121 +1,6 @@
|
|
|
1
|
-
import type {
|
|
1
|
+
import type { FieldsMap } from "@gettersethya/mira-collection";
|
|
2
2
|
import type { ProtectedFileFieldClient, PublicFileFieldClient } from "./file.js";
|
|
3
|
-
type
|
|
4
|
-
file: File | Blob;
|
|
5
|
-
};
|
|
6
|
-
/**
|
|
7
|
-
* The input type for creating/updating records when file uploads are involved.
|
|
8
|
-
* Same structure as `InferCreateInput` but file fields accept `File | Blob`
|
|
9
|
-
* instead of the server-returned URL string.
|
|
10
|
-
*
|
|
11
|
-
* When the input contains any `Blob` values, the client SDK automatically
|
|
12
|
-
* dispatches a `multipart/form-data` request instead of JSON.
|
|
13
|
-
*
|
|
14
|
-
* @example
|
|
15
|
-
* // For a collection with { avatar: Field.file() }
|
|
16
|
-
* // InferMutationInput resolves avatar to: File | Blob
|
|
17
|
-
*
|
|
18
|
-
* @see InferCreateInput — create input without file upload support
|
|
19
|
-
* @see InferRecord — the corresponding output type
|
|
20
|
-
*/
|
|
21
|
-
export type InferMutationInput<F extends FieldsMap> = {
|
|
22
|
-
[K in keyof F as F[K]["kind"] extends "seqId" ? never : F[K]["viewOnly"] extends true ? never : F[K]["required"] extends false ? K : never]?: FieldKindToInputType[F[K]["kind"]] | null;
|
|
23
|
-
} & {
|
|
24
|
-
[K in keyof F as F[K]["kind"] extends "seqId" ? never : F[K]["viewOnly"] extends true ? never : F[K]["required"] extends false ? never : K]: FieldKindToInputType[F[K]["kind"]];
|
|
25
|
-
};
|
|
26
|
-
/**
|
|
27
|
-
* The full record type returned from the server for a collection.
|
|
28
|
-
* Includes the system-managed `id`, `created`, and `updated` fields plus all
|
|
29
|
-
* user-defined fields with their correct TypeScript types.
|
|
30
|
-
*
|
|
31
|
-
* Optional fields (`required: false`) are typed as `T | null`.
|
|
32
|
-
*
|
|
33
|
-
* @example
|
|
34
|
-
* interface Post { title: Field.text(); body: Field.text({ required: false }) }
|
|
35
|
-
* // InferRecord<Post> resolves to:
|
|
36
|
-
* // { id: string; created: string; updated: string } & {
|
|
37
|
-
* // title: string;
|
|
38
|
-
* // body: string | null;
|
|
39
|
-
* // }
|
|
40
|
-
*
|
|
41
|
-
* @see InferCreateInput — input type for creating records
|
|
42
|
-
* @see InferMutationInput — mutation input type (file fields use File | Blob)
|
|
43
|
-
*/
|
|
44
|
-
export type InferRecord<F extends FieldsMap> = {
|
|
45
|
-
id: string;
|
|
46
|
-
created: string;
|
|
47
|
-
updated: string;
|
|
48
|
-
} & {
|
|
49
|
-
[K in keyof F as F[K]["kind"] extends "seqId" ? never : K]: F[K]["required"] extends false ? FieldKindToType[F[K]["kind"]] | null : FieldKindToType[F[K]["kind"]];
|
|
50
|
-
};
|
|
51
|
-
/**
|
|
52
|
-
* The input type for creating a new record.
|
|
53
|
-
* Excludes system-managed fields (`seqId`) and view-only fields.
|
|
54
|
-
* Optional fields (`required: false`) are typed as `T | null` and are
|
|
55
|
-
* themselves optional (`K?`)
|
|
56
|
-
*
|
|
57
|
-
* @example
|
|
58
|
-
* // InferCreateInput<Post> resolves to:
|
|
59
|
-
* // { title: string; body?: string | null }
|
|
60
|
-
*
|
|
61
|
-
* @see InferRecord — the corresponding output type
|
|
62
|
-
* @see InferMutationInput — mutation variant that uses File | Blob for file fields
|
|
63
|
-
*/
|
|
64
|
-
export type InferCreateInput<F extends FieldsMap> = {
|
|
65
|
-
[K in keyof F as F[K]["kind"] extends "seqId" ? never : F[K]["viewOnly"] extends true ? never : F[K]["required"] extends false ? K : never]?: FieldKindToType[F[K]["kind"]] | null;
|
|
66
|
-
} & {
|
|
67
|
-
[K in keyof F as F[K]["kind"] extends "seqId" ? never : F[K]["viewOnly"] extends true ? never : F[K]["required"] extends false ? never : K]: FieldKindToType[F[K]["kind"]];
|
|
68
|
-
};
|
|
69
|
-
/**
|
|
70
|
-
* Extracts the field names of type `relation` from a FieldsMap.
|
|
71
|
-
* Used to constrain the `expand` option in collection queries.
|
|
72
|
-
*
|
|
73
|
-
* @example
|
|
74
|
-
* // For { author: Field.relation(Users), title: Field.text() }
|
|
75
|
-
* // RelationKeys resolves to: "author"
|
|
76
|
-
*
|
|
77
|
-
* @see WithExpand — uses RelationKeys to type the expand parameter
|
|
78
|
-
*/
|
|
79
|
-
export type RelationKeys<F extends FieldsMap> = {
|
|
80
|
-
[K in keyof F]: F[K]["kind"] extends "relation" ? K : never;
|
|
81
|
-
}[keyof F] & string;
|
|
82
|
-
/**
|
|
83
|
-
* Extracts the field names of type `file` from a FieldsMap.
|
|
84
|
-
*
|
|
85
|
-
* @example
|
|
86
|
-
* // For { avatar: Field.file(), name: Field.text() }
|
|
87
|
-
* // FileKeys resolves to: "avatar"
|
|
88
|
-
*
|
|
89
|
-
* @see CollectionFileFields — maps file fields to their client interfaces
|
|
90
|
-
*/
|
|
91
|
-
export type FileKeys<F extends FieldsMap> = {
|
|
92
|
-
[K in keyof F]: F[K]["kind"] extends "file" ? K : never;
|
|
93
|
-
}[keyof F] & string;
|
|
94
|
-
/**
|
|
95
|
-
* Augments `InferRecord<F>` with an `expand` property containing the resolved
|
|
96
|
-
* related records for the requested relation field names.
|
|
97
|
-
*
|
|
98
|
-
* When `E` is an empty tuple (no expand requested), the result is just
|
|
99
|
-
* `InferRecord<F>` without the `expand` property.
|
|
100
|
-
*
|
|
101
|
-
* @example
|
|
102
|
-
* // WithExpand<PostFields, ["author"]> resolves to:
|
|
103
|
-
* // InferRecord<Post> & {
|
|
104
|
-
* // expand: { author: InferRecord<UserFields> }
|
|
105
|
-
* // }
|
|
106
|
-
*
|
|
107
|
-
* @see InferRecord — the base record type
|
|
108
|
-
* @see RelationKeys — used to constrain E to relation fields
|
|
109
|
-
*/
|
|
110
|
-
export type WithExpand<F extends FieldsMap, E extends ReadonlyArray<string>> = InferRecord<F> & ([
|
|
111
|
-
E
|
|
112
|
-
] extends [[]] ? {} : {
|
|
113
|
-
expand: {
|
|
114
|
-
[K in E[number] & RelationKeys<F>]: F[K] extends {
|
|
115
|
-
_target: infer Target extends AnyCollectionDef;
|
|
116
|
-
} ? InferRecord<Target["fields"]> : Record<string, unknown>;
|
|
117
|
-
};
|
|
118
|
-
});
|
|
3
|
+
export type { AnyAuthCollectionDef, AuthCreateInput, AuthUpdateInput, CollectionKind, CreateInput, FileKeys, InferCreateInput, InferMutationInput, InferRecord, RegisterInput, RelationKeys, UpdateInput, WithExpand } from "@gettersethya/mira-collection";
|
|
119
4
|
/**
|
|
120
5
|
* Maps file-type fields in a FieldsMap to their corresponding client interfaces.
|
|
121
6
|
* Protected file fields get `ProtectedFileFieldClient`; public file fields get
|
|
@@ -134,5 +19,4 @@ export type CollectionFileFields<F extends FieldsMap> = {
|
|
|
134
19
|
protected: true;
|
|
135
20
|
} ? ProtectedFileFieldClient : PublicFileFieldClient;
|
|
136
21
|
};
|
|
137
|
-
export {};
|
|
138
22
|
//# sourceMappingURL=types.d.ts.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"types.d.ts","sourceRoot":"","sources":["../../../src/client/types.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,
|
|
1
|
+
{"version":3,"file":"types.d.ts","sourceRoot":"","sources":["../../../src/client/types.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,SAAS,EAAE,MAAM,+BAA+B,CAAA;AAE9D,OAAO,KAAK,EAAE,wBAAwB,EAAE,qBAAqB,EAAE,MAAM,WAAW,CAAA;AAEhF,YAAY,EACV,oBAAoB,EACpB,eAAe,EACf,eAAe,EACf,cAAc,EACd,WAAW,EACX,QAAQ,EACR,gBAAgB,EAChB,kBAAkB,EAClB,WAAW,EACX,aAAa,EACb,YAAY,EACZ,WAAW,EACX,UAAU,EACX,MAAM,+BAA+B,CAAA;AAEtC;;;;;;;;;;;;GAYG;AACH,MAAM,MAAM,oBAAoB,CAAC,CAAC,SAAS,SAAS,IAAI;KACrD,CAAC,IAAI,MAAM,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC,CAAC,MAAM,CAAC,SAAS,MAAM,GAAG,CAAC,GAAG,KAAK,GACtD,CAAC,CAAC,CAAC,CAAC,SAAS;QAAE,SAAS,EAAE,IAAI,CAAA;KAAE,GAAG,wBAAwB,GAAG,qBAAqB;CACtF,CAAA"}
|
package/dist/src/index.d.ts
CHANGED
package/dist/src/index.d.ts.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/index.ts"],"names":[],"mappings":"AAAA,cAAc,+BAA+B,CAAA;AAC7C,
|
|
1
|
+
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/index.ts"],"names":[],"mappings":"AAAA,cAAc,mBAAmB,CAAA;AACjC,cAAc,+BAA+B,CAAA;AAC7C,YAAY,EAAE,aAAa,EAAE,MAAM,wBAAwB,CAAA"}
|
package/dist/src/index.js
CHANGED
package/dist/src/index.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/index.ts"],"names":[],"mappings":"AAAA,cAAc
|
|
1
|
+
{"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/index.ts"],"names":[],"mappings":"AAAA,cAAc,mBAAmB,CAAA;AACjC,cAAc,+BAA+B,CAAA"}
|
|
@@ -1,7 +1,8 @@
|
|
|
1
|
-
import { describe, expect, it } from "vitest";
|
|
2
1
|
import { Effect, MutableRef } from "effect";
|
|
3
|
-
import {
|
|
4
|
-
import {
|
|
2
|
+
import { describe, expect, it } from "vitest";
|
|
3
|
+
import { makeBrowserAuth, makeServerAuth } from "@/client/auth.js";
|
|
4
|
+
import { MiraError } from "@/client/errors.js";
|
|
5
|
+
import { makeClientHandler } from "@/client/handler.js";
|
|
5
6
|
describe("BrowserAuth", () => {
|
|
6
7
|
it("isLoggedIn() false initially", () => {
|
|
7
8
|
const loggedInRef = MutableRef.make(false);
|
|
@@ -15,6 +16,66 @@ describe("BrowserAuth", () => {
|
|
|
15
16
|
const auth = makeBrowserAuth(execute, makeClientHandler, loggedInRef);
|
|
16
17
|
expect(auth.isLoggedIn()).toBe(true);
|
|
17
18
|
});
|
|
19
|
+
it("refresh() checks /api/auth/me, sets the flag, and returns true", async () => {
|
|
20
|
+
const loggedInRef = MutableRef.make(false);
|
|
21
|
+
let calls = 0;
|
|
22
|
+
const execute = () => Effect.sync(() => {
|
|
23
|
+
calls++;
|
|
24
|
+
return { collection: "users", record: {} };
|
|
25
|
+
});
|
|
26
|
+
const auth = makeBrowserAuth(execute, makeClientHandler, loggedInRef);
|
|
27
|
+
expect(await auth.refresh()).toBe(true);
|
|
28
|
+
expect(calls).toBe(1);
|
|
29
|
+
expect(auth.isLoggedIn()).toBe(true);
|
|
30
|
+
});
|
|
31
|
+
it("refresh() returns false and clears the flag when the check fails", async () => {
|
|
32
|
+
const loggedInRef = MutableRef.make(true);
|
|
33
|
+
const execute = () => Effect.fail(new MiraError({ status: 401, body: "unauthorized" }));
|
|
34
|
+
const auth = makeBrowserAuth(execute, makeClientHandler, loggedInRef);
|
|
35
|
+
expect(await auth.refresh()).toBe(false);
|
|
36
|
+
expect(auth.isLoggedIn()).toBe(false);
|
|
37
|
+
});
|
|
38
|
+
it("ensureSession() memoizes — concurrent calls share a single check", async () => {
|
|
39
|
+
const loggedInRef = MutableRef.make(false);
|
|
40
|
+
let calls = 0;
|
|
41
|
+
const execute = () => Effect.sync(() => {
|
|
42
|
+
calls++;
|
|
43
|
+
return { collection: "users", record: {} };
|
|
44
|
+
});
|
|
45
|
+
const auth = makeBrowserAuth(execute, makeClientHandler, loggedInRef);
|
|
46
|
+
const [first, second] = await Promise.all([auth.ensureSession(), auth.ensureSession()]);
|
|
47
|
+
expect(first).toBe(true);
|
|
48
|
+
expect(second).toBe(true);
|
|
49
|
+
expect(calls).toBe(1);
|
|
50
|
+
expect(auth.isLoggedIn()).toBe(true);
|
|
51
|
+
});
|
|
52
|
+
it("ensureSession() reuses the resolved check on later calls", async () => {
|
|
53
|
+
const loggedInRef = MutableRef.make(false);
|
|
54
|
+
let calls = 0;
|
|
55
|
+
const execute = () => Effect.sync(() => {
|
|
56
|
+
calls++;
|
|
57
|
+
return { collection: "users", record: {} };
|
|
58
|
+
});
|
|
59
|
+
const auth = makeBrowserAuth(execute, makeClientHandler, loggedInRef);
|
|
60
|
+
await auth.ensureSession();
|
|
61
|
+
await auth.ensureSession();
|
|
62
|
+
expect(calls).toBe(1);
|
|
63
|
+
});
|
|
64
|
+
it("clear() resets the memo so ensureSession() re-checks", async () => {
|
|
65
|
+
const loggedInRef = MutableRef.make(false);
|
|
66
|
+
let meCalls = 0;
|
|
67
|
+
const execute = (req) => Effect.sync(() => {
|
|
68
|
+
if (req.url.includes("/api/auth/me"))
|
|
69
|
+
meCalls++;
|
|
70
|
+
return { collection: "users", record: {} };
|
|
71
|
+
});
|
|
72
|
+
const auth = makeBrowserAuth(execute, makeClientHandler, loggedInRef);
|
|
73
|
+
await auth.ensureSession();
|
|
74
|
+
expect(meCalls).toBe(1);
|
|
75
|
+
auth.clear();
|
|
76
|
+
await auth.ensureSession();
|
|
77
|
+
expect(meCalls).toBe(2);
|
|
78
|
+
});
|
|
18
79
|
});
|
|
19
80
|
describe("ServerAuth", () => {
|
|
20
81
|
it("token is null initially", () => {
|