@gettersethya/mira-dashboard 0.1.0-alpha.1 → 0.1.0-alpha.13

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 ADDED
@@ -0,0 +1,65 @@
1
+ # @gettersethya/mira-dashboard
2
+
3
+ > **Early pre-alpha.** Breaking changes may occur without notice.
4
+
5
+ Admin dashboard plugin for [Mira](https://github.com/gettersethya/mira). A SvelteKit SPA at `/_dashboard/` providing collection CRUD, log/span viewer, config display, superadmin management, and cron job monitoring.
6
+
7
+ ## Installation
8
+
9
+ ```bash
10
+ npm install @gettersethya/mira-dashboard
11
+ # or
12
+ pnpm add @gettersethya/mira-dashboard
13
+ ```
14
+
15
+ `@gettersethya/mira` is a required peer dependency.
16
+
17
+ ## Usage
18
+
19
+ ```typescript
20
+ import { LocalFileStorage, Mira, NodePlatform, SqliteDatabase } from "@gettersethya/mira"
21
+ import { MiraDashboard } from "@gettersethya/mira-dashboard"
22
+ import { Posts, Users } from "./collections.js"
23
+
24
+ const app = Mira.builder()
25
+ .platform(NodePlatform)
26
+ .database(SqliteDatabase({ filename: "mira.db" }))
27
+ .storage(LocalFileStorage({ directory: "./uploads" }))
28
+ .collections([Users, Posts])
29
+ .build()
30
+
31
+ app.extend(MiraDashboard).serve()
32
+ ```
33
+
34
+ On first boot the dashboard prints a one-time registration URL to stdout:
35
+
36
+ ```
37
+ [dashboard] Register at: http://localhost:8080/_dashboard/register?token=<token>
38
+ ```
39
+
40
+ Open that URL to create the first superadmin account. Once registered, subsequent boots print the login URL.
41
+
42
+ ## Features
43
+
44
+ - **Collection browser** — list, create, edit, and delete records with a record editor
45
+ - **Logs and span viewer** — works best with `makeSqliteTelemetryLayer` from `@gettersethya/mira`
46
+ - **App config display** — view the current `AppConfig` from the `_config` table
47
+ - **Superadmin management** — create, list, and delete superadmin accounts
48
+ - **Cron job monitoring** — list all registered cron jobs with their current status and trigger manual runs
49
+
50
+ ### Cron API
51
+
52
+ The dashboard exposes two cron endpoints:
53
+
54
+ | Method | Path | Description |
55
+ |---|---|---|
56
+ | `GET` | `/_dashboard/api/crons` | List all cron jobs with name, status, last run info |
57
+ | `POST` | `/_dashboard/api/crons/:name/run` | Trigger immediate execution of a cron job by name |
58
+
59
+ ## Superadmin collection
60
+
61
+ The dashboard registers a `SuperAdminCollection` under the name `_superadmins` — an `AuthCollection` with deny-all rules. This collection is separate from your app's own user collection and is only accessible via the dashboard UI.
62
+
63
+ ## Audit hooks
64
+
65
+ The dashboard plugin registers audit hooks that log record create/update/delete operations and cron success/error events via `Effect.log`.
@@ -6,17 +6,9 @@ declare const DashboardUnauthorizedError_base: new <A extends Record<string, any
6
6
  } & Readonly<A>;
7
7
  export declare class DashboardUnauthorizedError extends DashboardUnauthorizedError_base<{}> {
8
8
  }
9
- export type DashboardJwtPayload = {
10
- readonly sub: string;
11
- readonly email: string;
12
- readonly role: string;
13
- readonly col: string;
14
- };
15
- export declare function signDashboardJwt(payload: DashboardJwtPayload, secret: string): Effect.Effect<string, DashboardUnauthorizedError, never>;
16
9
  export declare const requireDashboardAuth: Effect.Effect<{
17
- readonly email: string;
18
- readonly sub: string;
19
- readonly role: string;
10
+ sub: string;
11
+ col: string;
20
12
  }, DashboardUnauthorizedError, HttpServerRequest.HttpServerRequest | AppConfig>;
21
13
  export {};
22
14
  //# sourceMappingURL=auth.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"auth.d.ts","sourceRoot":"","sources":["../../../src/api/auth.ts"],"names":[],"mappings":"AACA,OAAO,EAAQ,MAAM,EAAoB,MAAM,QAAQ,CAAA;AACvD,OAAO,EAAE,iBAAiB,EAAE,MAAM,kBAAkB,CAAA;AACpD,OAAO,EAAE,SAAS,EAAE,MAAM,oBAAoB,CAAA;;;;AAE9C,qBAAa,0BAA2B,SAAQ,gCAA+C,EAAE,CAAC;CAAG;AAErG,MAAM,MAAM,mBAAmB,GAAG;IAChC,QAAQ,CAAC,GAAG,EAAE,MAAM,CAAA;IACpB,QAAQ,CAAC,KAAK,EAAE,MAAM,CAAA;IACtB,QAAQ,CAAC,IAAI,EAAE,MAAM,CAAA;IACrB,QAAQ,CAAC,GAAG,EAAE,MAAM,CAAA;CACrB,CAAA;AAED,wBAAgB,gBAAgB,CAAC,OAAO,EAAE,mBAAmB,EAAE,MAAM,EAAE,MAAM,4DAY5E;AA4BD,eAAO,MAAM,oBAAoB;;;;+EAa/B,CAAA"}
1
+ {"version":3,"file":"auth.d.ts","sourceRoot":"","sources":["../../../src/api/auth.ts"],"names":[],"mappings":"AAAA,OAAO,EAAQ,MAAM,EAAoB,MAAM,QAAQ,CAAA;AACvD,OAAO,EAAE,iBAAiB,EAAE,MAAM,kBAAkB,CAAA;AACpD,OAAO,EAAE,SAAS,EAAa,MAAM,oBAAoB,CAAA;;;;AAEzD,qBAAa,0BAA2B,SAAQ,gCAA+C,EAAE,CAAC;CAAG;AAiBrG,eAAO,MAAM,oBAAoB;;;+EAuB0B,CAAA"}
@@ -1,56 +1,33 @@
1
- import * as jose from "jose";
2
- import { Data, Effect, Redacted, Schema } from "effect";
1
+ import { Data, Effect, Redacted } from "effect";
3
2
  import { HttpServerRequest } from "@effect/platform";
4
- import { AppConfig } from "@gettersethya/mira";
3
+ import { AppConfig, verifyJwt } from "@gettersethya/mira";
5
4
  export class DashboardUnauthorizedError extends Data.TaggedError("DashboardUnauthorizedError") {
6
5
  }
7
- export function signDashboardJwt(payload, secret) {
8
- return Effect.tryPromise({
9
- try: async () => {
10
- const encoder = new TextEncoder();
11
- return await new jose.SignJWT({ sub: payload.sub, email: payload.email, role: payload.role, col: payload.col })
12
- .setProtectedHeader({ alg: "HS256" })
13
- .setIssuedAt()
14
- .setExpirationTime("7d")
15
- .sign(encoder.encode(secret));
16
- },
17
- catch: () => new DashboardUnauthorizedError()
18
- });
19
- }
20
- const VerifyDashboardJwtSchema = Schema.Struct({
21
- sub: Schema.String,
22
- email: Schema.String,
23
- role: Schema.String
24
- });
25
- function verifyDashboardJwt(token, secret) {
26
- return Effect.gen(function* () {
27
- const { payload } = yield* Effect.tryPromise({
28
- try: async () => {
29
- const encoder = new TextEncoder();
30
- return await jose.jwtVerify(token, encoder.encode(secret));
31
- },
32
- catch: () => new DashboardUnauthorizedError()
33
- });
34
- const result = yield* Schema.decodeUnknown(VerifyDashboardJwtSchema)({
35
- sub: payload.sub,
36
- email: payload["email"],
37
- role: payload["role"]
38
- }).pipe(Effect.catchTag("ParseError", () => new DashboardUnauthorizedError()));
39
- return result;
40
- });
6
+ function extractToken(req) {
7
+ const auth = req.headers["authorization"];
8
+ if (typeof auth === "string") {
9
+ const m = auth.match(/^Bearer\s+(.+)$/i);
10
+ if (m !== null)
11
+ return m[1];
12
+ }
13
+ return req.cookies["mira_token"] ?? null;
41
14
  }
15
+ const annotateCurrentSpan = (key, value) => Effect.currentSpan.pipe(Effect.tap((span) => Effect.sync(() => span.attribute(key, value))), Effect.ignore);
42
16
  export const requireDashboardAuth = Effect.gen(function* () {
43
17
  const req = yield* HttpServerRequest.HttpServerRequest;
44
- const authHeader = req.headers["authorization"];
45
- if (!authHeader || !authHeader.startsWith("Bearer ")) {
18
+ const token = extractToken(req);
19
+ if (token === null) {
20
+ yield* annotateCurrentSpan("auth.result", "anonymous");
46
21
  return yield* new DashboardUnauthorizedError();
47
22
  }
48
- const token = authHeader.slice(7);
49
23
  const config = yield* AppConfig;
50
- const payload = yield* verifyDashboardJwt(token, Redacted.value(config.jwtSecret));
51
- if (payload.role !== "superadmin") {
24
+ const payload = yield* verifyJwt(token, Redacted.value(config.jwtSecret)).pipe(Effect.catchAll(() => new DashboardUnauthorizedError()));
25
+ if (payload.col !== "_superadmin") {
26
+ yield* annotateCurrentSpan("auth.result", "invalid_token");
52
27
  return yield* new DashboardUnauthorizedError();
53
28
  }
29
+ yield* annotateCurrentSpan("auth.result", "authenticated");
30
+ yield* annotateCurrentSpan("auth.collection", "_superadmin");
54
31
  return payload;
55
- });
32
+ }).pipe(Effect.withSpan("http.auth", { kind: "internal" }));
56
33
  //# sourceMappingURL=auth.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"auth.js","sourceRoot":"","sources":["../../../src/api/auth.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"auth.js","sourceRoot":"","sources":["../../../src/api/auth.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,IAAI,EAAE,MAAM,EAAE,QAAQ,EAAU,MAAM,QAAQ,CAAA;AACvD,OAAO,EAAE,iBAAiB,EAAE,MAAM,kBAAkB,CAAA;AACpD,OAAO,EAAE,SAAS,EAAE,SAAS,EAAE,MAAM,oBAAoB,CAAA;AAEzD,MAAM,OAAO,0BAA2B,SAAQ,IAAI,CAAC,WAAW,CAAC,4BAA4B,CAAK;CAAG;AAErG,SAAS,YAAY,CAAC,GAAwC;IAC5D,MAAM,IAAI,GAAG,GAAG,CAAC,OAAO,CAAC,eAAe,CAAC,CAAA;IACzC,IAAI,OAAO,IAAI,KAAK,QAAQ,EAAE,CAAC;QAC7B,MAAM,CAAC,GAAG,IAAI,CAAC,KAAK,CAAC,kBAAkB,CAAC,CAAA;QACxC,IAAI,CAAC,KAAK,IAAI;YAAE,OAAO,CAAC,CAAC,CAAC,CAAC,CAAA;IAC7B,CAAC;IACD,OAAO,GAAG,CAAC,OAAO,CAAC,YAAY,CAAC,IAAI,IAAI,CAAA;AAC1C,CAAC;AAED,MAAM,mBAAmB,GAAG,CAAC,GAAW,EAAE,KAAa,EAAE,EAAE,CACzD,MAAM,CAAC,WAAW,CAAC,IAAI,CACrB,MAAM,CAAC,GAAG,CAAC,CAAC,IAAiB,EAAE,EAAE,CAAC,MAAM,CAAC,IAAI,CAAC,GAAG,EAAE,CAAC,IAAI,CAAC,SAAS,CAAC,GAAG,EAAE,KAAK,CAAC,CAAC,CAAC,EAChF,MAAM,CAAC,MAAM,CACd,CAAA;AAEH,MAAM,CAAC,MAAM,oBAAoB,GAAG,MAAM,CAAC,GAAG,CAAC,QAAQ,CAAC;IACtD,MAAM,GAAG,GAAG,KAAK,CAAC,CAAC,iBAAiB,CAAC,iBAAiB,CAAA;IACtD,MAAM,KAAK,GAAG,YAAY,CAAC,GAAG,CAAC,CAAA;IAE/B,IAAI,KAAK,KAAK,IAAI,EAAE,CAAC;QACnB,KAAK,CAAC,CAAC,mBAAmB,CAAC,aAAa,EAAE,WAAW,CAAC,CAAA;QACtD,OAAO,KAAK,CAAC,CAAC,IAAI,0BAA0B,EAAE,CAAA;IAChD,CAAC;IAED,MAAM,MAAM,GAAG,KAAK,CAAC,CAAC,SAAS,CAAA;IAC/B,MAAM,OAAO,GAAG,KAAK,CAAC,CAAC,SAAS,CAAC,KAAK,EAAE,QAAQ,CAAC,KAAK,CAAC,MAAM,CAAC,SAAS,CAAC,CAAC,CAAC,IAAI,CAC5E,MAAM,CAAC,QAAQ,CAAC,GAAG,EAAE,CAAC,IAAI,0BAA0B,EAAE,CAAC,CACxD,CAAA;IAED,IAAI,OAAO,CAAC,GAAG,KAAK,aAAa,EAAE,CAAC;QAClC,KAAK,CAAC,CAAC,mBAAmB,CAAC,aAAa,EAAE,eAAe,CAAC,CAAA;QAC1D,OAAO,KAAK,CAAC,CAAC,IAAI,0BAA0B,EAAE,CAAA;IAChD,CAAC;IAED,KAAK,CAAC,CAAC,mBAAmB,CAAC,aAAa,EAAE,eAAe,CAAC,CAAA;IAC1D,KAAK,CAAC,CAAC,mBAAmB,CAAC,iBAAiB,EAAE,aAAa,CAAC,CAAA;IAE5D,OAAO,OAAO,CAAA;AAChB,CAAC,CAAC,CAAC,IAAI,CAAC,MAAM,CAAC,QAAQ,CAAC,WAAW,EAAE,EAAE,IAAI,EAAE,UAAU,EAAE,CAAC,CAAC,CAAA"}
@@ -1,5 +1,5 @@
1
1
  import { Effect } from "effect";
2
2
  import { HttpServerResponse } from "@effect/platform";
3
3
  import { AppConfig } from "@gettersethya/mira";
4
- export declare const configRoute: Effect.Effect<HttpServerResponse.HttpServerResponse, import("./auth.js").DashboardUnauthorizedError, import("@effect/platform/HttpServerRequest").HttpServerRequest | AppConfig>;
4
+ export declare const configRoute: Effect.Effect<HttpServerResponse.HttpServerResponse, never, AppConfig>;
5
5
  //# sourceMappingURL=config.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"config.d.ts","sourceRoot":"","sources":["../../../src/api/config.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,MAAM,EAAY,MAAM,QAAQ,CAAA;AACzC,OAAO,EAAE,kBAAkB,EAAE,MAAM,kBAAkB,CAAA;AACrD,OAAO,EAAE,SAAS,EAAE,MAAM,oBAAoB,CAAA;AAG9C,eAAO,MAAM,WAAW,kLAiBtB,CAAA"}
1
+ {"version":3,"file":"config.d.ts","sourceRoot":"","sources":["../../../src/api/config.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,MAAM,EAAY,MAAM,QAAQ,CAAA;AACzC,OAAO,EAAE,kBAAkB,EAAE,MAAM,kBAAkB,CAAA;AACrD,OAAO,EAAE,SAAS,EAAE,MAAM,oBAAoB,CAAA;AAE9C,eAAO,MAAM,WAAW,wEAetB,CAAA"}
@@ -1,9 +1,7 @@
1
1
  import { Effect, Redacted } from "effect";
2
2
  import { HttpServerResponse } from "@effect/platform";
3
3
  import { AppConfig } from "@gettersethya/mira";
4
- import { requireDashboardAuth } from "./auth.js";
5
4
  export const configRoute = Effect.gen(function* () {
6
- yield* requireDashboardAuth;
7
5
  const config = yield* AppConfig;
8
6
  const allConfig = {
9
7
  appName: config.appName,
@@ -1 +1 @@
1
- {"version":3,"file":"config.js","sourceRoot":"","sources":["../../../src/api/config.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,MAAM,EAAE,QAAQ,EAAE,MAAM,QAAQ,CAAA;AACzC,OAAO,EAAE,kBAAkB,EAAE,MAAM,kBAAkB,CAAA;AACrD,OAAO,EAAE,SAAS,EAAE,MAAM,oBAAoB,CAAA;AAC9C,OAAO,EAAE,oBAAoB,EAAE,MAAM,WAAW,CAAA;AAEhD,MAAM,CAAC,MAAM,WAAW,GAAG,MAAM,CAAC,GAAG,CAAC,QAAQ,CAAC;IAC7C,KAAK,CAAC,CAAC,oBAAoB,CAAA;IAE3B,MAAM,MAAM,GAAG,KAAK,CAAC,CAAC,SAAS,CAAA;IAE/B,MAAM,SAAS,GAA4B;QACzC,OAAO,EAAE,MAAM,CAAC,OAAO;QACvB,IAAI,EAAE,MAAM,CAAC,IAAI;QACjB,cAAc,EAAE,MAAM,CAAC,cAAc;QACrC,SAAS,EAAE,GAAG,QAAQ,CAAC,KAAK,CAAC,MAAM,CAAC,SAAS,CAAC,CAAC,KAAK,CAAC,CAAC,EAAE,CAAC,CAAC,KAAK;QAC/D,KAAK,EAAE,MAAM,CAAC,KAAK;KACpB,CAAA;IAED,OAAO,kBAAkB,CAAC,UAAU,CAAC;QACnC,MAAM,EAAE,SAAS;QACjB,IAAI,EAAE,MAAM,CAAC,IAAI,CAAC,SAAS,CAAC;KAC7B,CAAC,CAAA;AACJ,CAAC,CAAC,CAAA"}
1
+ {"version":3,"file":"config.js","sourceRoot":"","sources":["../../../src/api/config.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,MAAM,EAAE,QAAQ,EAAE,MAAM,QAAQ,CAAA;AACzC,OAAO,EAAE,kBAAkB,EAAE,MAAM,kBAAkB,CAAA;AACrD,OAAO,EAAE,SAAS,EAAE,MAAM,oBAAoB,CAAA;AAE9C,MAAM,CAAC,MAAM,WAAW,GAAG,MAAM,CAAC,GAAG,CAAC,QAAQ,CAAC;IAC7C,MAAM,MAAM,GAAG,KAAK,CAAC,CAAC,SAAS,CAAA;IAE/B,MAAM,SAAS,GAA4B;QACzC,OAAO,EAAE,MAAM,CAAC,OAAO;QACvB,IAAI,EAAE,MAAM,CAAC,IAAI;QACjB,cAAc,EAAE,MAAM,CAAC,cAAc;QACrC,SAAS,EAAE,GAAG,QAAQ,CAAC,KAAK,CAAC,MAAM,CAAC,SAAS,CAAC,CAAC,KAAK,CAAC,CAAC,EAAE,CAAC,CAAC,KAAK;QAC/D,KAAK,EAAE,MAAM,CAAC,KAAK;KACpB,CAAA;IAED,OAAO,kBAAkB,CAAC,UAAU,CAAC;QACnC,MAAM,EAAE,SAAS;QACjB,IAAI,EAAE,MAAM,CAAC,IAAI,CAAC,SAAS,CAAC;KAC7B,CAAC,CAAA;AACJ,CAAC,CAAC,CAAA"}
@@ -0,0 +1,6 @@
1
+ import { Effect } from "effect";
2
+ import { HttpRouter, HttpServerResponse } from "@effect/platform";
3
+ import { CronService } from "@gettersethya/mira";
4
+ export declare const cronsRoute: Effect.Effect<HttpServerResponse.HttpServerResponse, never, CronService>;
5
+ export declare const cronRunNowRoute: Effect.Effect<HttpServerResponse.HttpServerResponse, never, HttpRouter.RouteContext | CronService>;
6
+ //# sourceMappingURL=crons.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"crons.d.ts","sourceRoot":"","sources":["../../../src/api/crons.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,MAAM,EAAE,MAAM,QAAQ,CAAA;AAC/B,OAAO,EAAE,UAAU,EAAE,kBAAkB,EAAE,MAAM,kBAAkB,CAAA;AACjE,OAAO,EAAE,WAAW,EAAqB,MAAM,oBAAoB,CAAA;AAEnE,eAAO,MAAM,UAAU,0EAerB,CAAA;AAEF,eAAO,MAAM,eAAe,oGAa3B,CAAA"}
@@ -0,0 +1,22 @@
1
+ import { Effect } from "effect";
2
+ import { HttpRouter, HttpServerResponse } from "@effect/platform";
3
+ import { CronService } from "@gettersethya/mira";
4
+ export const cronsRoute = Effect.gen(function* () {
5
+ const cronService = yield* CronService;
6
+ const states = yield* cronService.getAll();
7
+ return HttpServerResponse.unsafeJson(states.map((s) => ({
8
+ name: s.name,
9
+ description: s.description ?? null,
10
+ status: s.status,
11
+ lastRunAt: s.lastRunAt ? s.lastRunAt.toISOString() : null,
12
+ lastStatus: s.lastStatus ?? null,
13
+ lastDurationMs: s.lastDurationMs ?? null,
14
+ lastError: s.lastError !== undefined ? String(s.lastError) : null
15
+ })));
16
+ });
17
+ export const cronRunNowRoute = Effect.flatMap(HttpRouter.RouteContext, (routeCtx) => Effect.gen(function* () {
18
+ const name = routeCtx.params["name"] ?? "";
19
+ const cronService = yield* CronService;
20
+ return yield* cronService.runNow(name).pipe(Effect.as(HttpServerResponse.empty({ status: 204 })), Effect.catchTag("CronNotFoundError", (_) => Effect.succeed(HttpServerResponse.unsafeJson({ error: "not_found" }, { status: 404 }))));
21
+ }));
22
+ //# sourceMappingURL=crons.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"crons.js","sourceRoot":"","sources":["../../../src/api/crons.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,MAAM,EAAE,MAAM,QAAQ,CAAA;AAC/B,OAAO,EAAE,UAAU,EAAE,kBAAkB,EAAE,MAAM,kBAAkB,CAAA;AACjE,OAAO,EAAE,WAAW,EAAqB,MAAM,oBAAoB,CAAA;AAEnE,MAAM,CAAC,MAAM,UAAU,GAAG,MAAM,CAAC,GAAG,CAAC,QAAQ,CAAC;IAC5C,MAAM,WAAW,GAAG,KAAK,CAAC,CAAC,WAAW,CAAA;IACtC,MAAM,MAAM,GAAG,KAAK,CAAC,CAAC,WAAW,CAAC,MAAM,EAAE,CAAA;IAE1C,OAAO,kBAAkB,CAAC,UAAU,CAClC,MAAM,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC;QACjB,IAAI,EAAE,CAAC,CAAC,IAAI;QACZ,WAAW,EAAE,CAAC,CAAC,WAAW,IAAI,IAAI;QAClC,MAAM,EAAE,CAAC,CAAC,MAAM;QAChB,SAAS,EAAE,CAAC,CAAC,SAAS,CAAC,CAAC,CAAC,CAAC,CAAC,SAAS,CAAC,WAAW,EAAE,CAAC,CAAC,CAAC,IAAI;QACzD,UAAU,EAAE,CAAC,CAAC,UAAU,IAAI,IAAI;QAChC,cAAc,EAAE,CAAC,CAAC,cAAc,IAAI,IAAI;QACxC,SAAS,EAAE,CAAC,CAAC,SAAS,KAAK,SAAS,CAAC,CAAC,CAAC,MAAM,CAAC,CAAC,CAAC,SAAS,CAAC,CAAC,CAAC,CAAC,IAAI;KAClE,CAAC,CAAC,CACJ,CAAA;AACH,CAAC,CAAC,CAAA;AAEF,MAAM,CAAC,MAAM,eAAe,GAAG,MAAM,CAAC,OAAO,CAAC,UAAU,CAAC,YAAY,EAAE,CAAC,QAAQ,EAAE,EAAE,CAClF,MAAM,CAAC,GAAG,CAAC,QAAQ,CAAC;IAClB,MAAM,IAAI,GAAG,QAAQ,CAAC,MAAM,CAAC,MAAM,CAAC,IAAI,EAAE,CAAA;IAE1C,MAAM,WAAW,GAAG,KAAK,CAAC,CAAC,WAAW,CAAA;IAEtC,OAAO,KAAK,CAAC,CAAC,WAAW,CAAC,MAAM,CAAC,IAAI,CAAC,CAAC,IAAI,CACzC,MAAM,CAAC,EAAE,CAAC,kBAAkB,CAAC,KAAK,CAAC,EAAE,MAAM,EAAE,GAAG,EAAE,CAAC,CAAC,EACpD,MAAM,CAAC,QAAQ,CAAC,mBAAmB,EAAE,CAAC,CAAoB,EAAE,EAAE,CAC5D,MAAM,CAAC,OAAO,CAAC,kBAAkB,CAAC,UAAU,CAAC,EAAE,KAAK,EAAE,WAAW,EAAE,EAAE,EAAE,MAAM,EAAE,GAAG,EAAE,CAAC,CAAC,CACvF,CACF,CAAA;AACH,CAAC,CAAC,CACH,CAAA"}
@@ -1 +1 @@
1
- {"version":3,"file":"register.d.ts","sourceRoot":"","sources":["../../../src/api/register.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,MAAM,EAAU,MAAM,QAAQ,CAAA;AACvC,OAAO,EAAE,iBAAiB,EAAE,kBAAkB,EAAE,MAAM,kBAAkB,CAAA;AACxE,OAAO,EAAE,iBAAiB,EAAgB,MAAM,oBAAoB,CAAA;AAYpE,eAAO,MAAM,aAAa,4SA4BxB,CAAA"}
1
+ {"version":3,"file":"register.d.ts","sourceRoot":"","sources":["../../../src/api/register.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,MAAM,EAAU,MAAM,QAAQ,CAAA;AACvC,OAAO,EAAE,iBAAiB,EAAE,kBAAkB,EAAE,MAAM,kBAAkB,CAAA;AACxE,OAAO,EAAE,iBAAiB,EAAgB,MAAM,oBAAoB,CAAA;AAapE,eAAO,MAAM,aAAa,4SA6BxB,CAAA"}
@@ -6,6 +6,7 @@ import { SuperAdminCollection } from "../superadmin.js";
6
6
  const RegisterBodySchema = Schema.Struct({
7
7
  email: Schema.String,
8
8
  password: Schema.String,
9
+ name: Schema.String,
9
10
  token: Schema.String
10
11
  });
11
12
  const adminCtx = { headers: {}, query: {}, admin: true };
@@ -25,7 +26,8 @@ export const registerRoute = Effect.gen(function* () {
25
26
  const hashedPassword = yield* hashPassword(body.password);
26
27
  const record = yield* svc.create(SuperAdminCollection, {
27
28
  email: body.email,
28
- password: hashedPassword
29
+ password: hashedPassword,
30
+ name: body.name
29
31
  }, adminCtx);
30
32
  return HttpServerResponse.unsafeJson({ id: record["id"], email: record["email"] }, { status: 201 });
31
33
  });
@@ -1 +1 @@
1
- {"version":3,"file":"register.js","sourceRoot":"","sources":["../../../src/api/register.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM,QAAQ,CAAA;AACvC,OAAO,EAAE,iBAAiB,EAAE,kBAAkB,EAAE,MAAM,kBAAkB,CAAA;AACxE,OAAO,EAAE,iBAAiB,EAAE,YAAY,EAAE,MAAM,oBAAoB,CAAA;AACpE,OAAO,EAAE,gBAAgB,EAAE,MAAM,kBAAkB,CAAA;AACnD,OAAO,EAAE,oBAAoB,EAAE,MAAM,kBAAkB,CAAA;AAEvD,MAAM,kBAAkB,GAAG,MAAM,CAAC,MAAM,CAAC;IACvC,KAAK,EAAE,MAAM,CAAC,MAAM;IACpB,QAAQ,EAAE,MAAM,CAAC,MAAM;IACvB,KAAK,EAAE,MAAM,CAAC,MAAM;CACrB,CAAC,CAAA;AAEF,MAAM,QAAQ,GAAG,EAAE,OAAO,EAAE,EAAE,EAAE,KAAK,EAAE,EAAE,EAAE,KAAK,EAAE,IAAa,EAAE,CAAA;AAEjE,MAAM,CAAC,MAAM,aAAa,GAAG,MAAM,CAAC,GAAG,CAAC,QAAQ,CAAC;IAC/C,MAAM,GAAG,GAAG,KAAK,CAAC,CAAC,iBAAiB,CAAC,iBAAiB,CAAA;IACtD,MAAM,IAAI,GAAG,KAAK,CAAC,CAAC,GAAG,CAAC,IAAI,CAAC,IAAI,CAAC,MAAM,CAAC,OAAO,CAAC,MAAM,CAAC,aAAa,CAAC,kBAAkB,CAAC,CAAC,CAAC,CAAA;IAC3F,MAAM,GAAG,GAAG,KAAK,CAAC,CAAC,iBAAiB,CAAA;IAEpC,IAAI,IAAI,CAAC,KAAK,KAAK,gBAAgB,EAAE,EAAE,CAAC;QACtC,OAAO,kBAAkB,CAAC,UAAU,CAAC,EAAE,KAAK,EAAE,eAAe,EAAE,EAAE,EAAE,MAAM,EAAE,GAAG,EAAE,CAAC,CAAA;IACnF,CAAC;IAED,MAAM,YAAY,GAAG,KAAK,CAAC,CAAC,GAAG;SAC5B,IAAI,CAAC,oBAAoB,EAAE,IAAI,EAAE,CAAC,EAAE,QAAQ,CAAC;SAC7C,IAAI,CAAC,MAAM,CAAC,aAAa,CAAC,GAAG,EAAE,CAAC,CAAC,EAAE,KAAK,EAAE,EAA4C,EAAE,CAAC,CAAC,CAAC,CAAA;IAE9F,IAAI,YAAY,CAAC,KAAK,CAAC,MAAM,GAAG,CAAC,EAAE,CAAC;QAClC,OAAO,kBAAkB,CAAC,UAAU,CAAC,EAAE,KAAK,EAAE,sBAAsB,EAAE,EAAE,EAAE,MAAM,EAAE,GAAG,EAAE,CAAC,CAAA;IAC1F,CAAC;IAED,MAAM,cAAc,GAAG,KAAK,CAAC,CAAC,YAAY,CAAC,IAAI,CAAC,QAAQ,CAAC,CAAA;IACzD,MAAM,MAAM,GAAG,KAAK,CAAC,CAAC,GAAG,CAAC,MAAM,CAC9B,oBAAoB,EACpB;QACE,KAAK,EAAE,IAAI,CAAC,KAAK;QACjB,QAAQ,EAAE,cAAc;KACzB,EACD,QAAQ,CACT,CAAA;IAED,OAAO,kBAAkB,CAAC,UAAU,CAAC,EAAE,EAAE,EAAE,MAAM,CAAC,IAAI,CAAC,EAAE,KAAK,EAAE,MAAM,CAAC,OAAO,CAAC,EAAE,EAAE,EAAE,MAAM,EAAE,GAAG,EAAE,CAAC,CAAA;AACrG,CAAC,CAAC,CAAA"}
1
+ {"version":3,"file":"register.js","sourceRoot":"","sources":["../../../src/api/register.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM,QAAQ,CAAA;AACvC,OAAO,EAAE,iBAAiB,EAAE,kBAAkB,EAAE,MAAM,kBAAkB,CAAA;AACxE,OAAO,EAAE,iBAAiB,EAAE,YAAY,EAAE,MAAM,oBAAoB,CAAA;AACpE,OAAO,EAAE,gBAAgB,EAAE,MAAM,kBAAkB,CAAA;AACnD,OAAO,EAAE,oBAAoB,EAAE,MAAM,kBAAkB,CAAA;AAEvD,MAAM,kBAAkB,GAAG,MAAM,CAAC,MAAM,CAAC;IACvC,KAAK,EAAE,MAAM,CAAC,MAAM;IACpB,QAAQ,EAAE,MAAM,CAAC,MAAM;IACvB,IAAI,EAAE,MAAM,CAAC,MAAM;IACnB,KAAK,EAAE,MAAM,CAAC,MAAM;CACrB,CAAC,CAAA;AAEF,MAAM,QAAQ,GAAG,EAAE,OAAO,EAAE,EAAE,EAAE,KAAK,EAAE,EAAE,EAAE,KAAK,EAAE,IAAa,EAAE,CAAA;AAEjE,MAAM,CAAC,MAAM,aAAa,GAAG,MAAM,CAAC,GAAG,CAAC,QAAQ,CAAC;IAC/C,MAAM,GAAG,GAAG,KAAK,CAAC,CAAC,iBAAiB,CAAC,iBAAiB,CAAA;IACtD,MAAM,IAAI,GAAG,KAAK,CAAC,CAAC,GAAG,CAAC,IAAI,CAAC,IAAI,CAAC,MAAM,CAAC,OAAO,CAAC,MAAM,CAAC,aAAa,CAAC,kBAAkB,CAAC,CAAC,CAAC,CAAA;IAC3F,MAAM,GAAG,GAAG,KAAK,CAAC,CAAC,iBAAiB,CAAA;IAEpC,IAAI,IAAI,CAAC,KAAK,KAAK,gBAAgB,EAAE,EAAE,CAAC;QACtC,OAAO,kBAAkB,CAAC,UAAU,CAAC,EAAE,KAAK,EAAE,eAAe,EAAE,EAAE,EAAE,MAAM,EAAE,GAAG,EAAE,CAAC,CAAA;IACnF,CAAC;IAED,MAAM,YAAY,GAAG,KAAK,CAAC,CAAC,GAAG;SAC5B,IAAI,CAAC,oBAAoB,EAAE,IAAI,EAAE,CAAC,EAAE,QAAQ,CAAC;SAC7C,IAAI,CAAC,MAAM,CAAC,aAAa,CAAC,GAAG,EAAE,CAAC,CAAC,EAAE,KAAK,EAAE,EAA4C,EAAE,CAAC,CAAC,CAAC,CAAA;IAE9F,IAAI,YAAY,CAAC,KAAK,CAAC,MAAM,GAAG,CAAC,EAAE,CAAC;QAClC,OAAO,kBAAkB,CAAC,UAAU,CAAC,EAAE,KAAK,EAAE,sBAAsB,EAAE,EAAE,EAAE,MAAM,EAAE,GAAG,EAAE,CAAC,CAAA;IAC1F,CAAC;IAED,MAAM,cAAc,GAAG,KAAK,CAAC,CAAC,YAAY,CAAC,IAAI,CAAC,QAAQ,CAAC,CAAA;IACzD,MAAM,MAAM,GAAG,KAAK,CAAC,CAAC,GAAG,CAAC,MAAM,CAC9B,oBAAoB,EACpB;QACE,KAAK,EAAE,IAAI,CAAC,KAAK;QACjB,QAAQ,EAAE,cAAc;QACxB,IAAI,EAAE,IAAI,CAAC,IAAI;KAChB,EACD,QAAQ,CACT,CAAA;IAED,OAAO,kBAAkB,CAAC,UAAU,CAAC,EAAE,EAAE,EAAE,MAAM,CAAC,IAAI,CAAC,EAAE,KAAK,EAAE,MAAM,CAAC,OAAO,CAAC,EAAE,EAAE,EAAE,MAAM,EAAE,GAAG,EAAE,CAAC,CAAA;AACrG,CAAC,CAAC,CAAA"}
@@ -1,7 +1,7 @@
1
1
  import { Effect } from "effect";
2
2
  import { HttpRouter, HttpServerRequest, HttpServerResponse } from "@effect/platform";
3
3
  import { CollectionService } from "@gettersethya/mira";
4
- export declare const createSuperadminRoute: Effect.Effect<HttpServerResponse.HttpServerResponse, import("@gettersethya/mira").CollectionError | import("@effect/platform/HttpServerError").RequestError | import("effect/ParseResult").ParseError | import("./auth.js").DashboardUnauthorizedError, CollectionService | HttpServerRequest.HttpServerRequest | import("@gettersethya/mira").AuthService | import("@gettersethya/mira").AppConfig>;
5
- export declare const listSuperadminsRoute: Effect.Effect<HttpServerResponse.HttpServerResponse, import("@gettersethya/mira").CollectionError | import("./auth.js").DashboardUnauthorizedError, CollectionService | HttpServerRequest.HttpServerRequest | import("@gettersethya/mira").AppConfig>;
6
- export declare const deleteSuperadminRoute: Effect.Effect<HttpServerResponse.HttpServerResponse, import("./auth.js").DashboardUnauthorizedError, CollectionService | HttpServerRequest.HttpServerRequest | import("@gettersethya/mira").AppConfig | HttpRouter.RouteContext>;
4
+ export declare const createSuperadminRoute: Effect.Effect<HttpServerResponse.HttpServerResponse, import("@gettersethya/mira").CollectionError | import("@effect/platform/HttpServerError").RequestError | import("effect/ParseResult").ParseError, CollectionService | HttpServerRequest.HttpServerRequest | import("@gettersethya/mira").AuthService>;
5
+ export declare const listSuperadminsRoute: Effect.Effect<HttpServerResponse.HttpServerResponse, import("@gettersethya/mira").CollectionError, CollectionService>;
6
+ export declare const deleteSuperadminRoute: Effect.Effect<HttpServerResponse.HttpServerResponse, never, CollectionService | HttpRouter.RouteContext>;
7
7
  //# sourceMappingURL=superadmin.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"superadmin.d.ts","sourceRoot":"","sources":["../../../src/api/superadmin.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,MAAM,EAAU,MAAM,QAAQ,CAAA;AACvC,OAAO,EAAE,UAAU,EAAE,iBAAiB,EAAE,kBAAkB,EAAE,MAAM,kBAAkB,CAAA;AACpF,OAAO,EAAE,iBAAiB,EAAgB,MAAM,oBAAoB,CAAA;AAYpE,eAAO,MAAM,qBAAqB,sYA0BhC,CAAA;AAEF,eAAO,MAAM,oBAAoB,uPAa/B,CAAA;AAEF,eAAO,MAAM,qBAAqB,kOAwBjC,CAAA"}
1
+ {"version":3,"file":"superadmin.d.ts","sourceRoot":"","sources":["../../../src/api/superadmin.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,MAAM,EAAU,MAAM,QAAQ,CAAA;AACvC,OAAO,EAAE,UAAU,EAAE,iBAAiB,EAAE,kBAAkB,EAAE,MAAM,kBAAkB,CAAA;AACpF,OAAO,EAAE,iBAAiB,EAAgB,MAAM,oBAAoB,CAAA;AAWpE,eAAO,MAAM,qBAAqB,4SAwBhC,CAAA;AAEF,eAAO,MAAM,oBAAoB,uHAW/B,CAAA;AAEF,eAAO,MAAM,qBAAqB,0GAsBjC,CAAA"}
@@ -2,7 +2,6 @@ import { Effect, Schema } from "effect";
2
2
  import { HttpRouter, HttpServerRequest, HttpServerResponse } from "@effect/platform";
3
3
  import { CollectionService, hashPassword } from "@gettersethya/mira";
4
4
  import { Filter } from "@gettersethya/mira-client";
5
- import { requireDashboardAuth } from "./auth.js";
6
5
  import { SuperAdminCollection } from "../superadmin.js";
7
6
  const CreateSuperadminSchema = Schema.Struct({
8
7
  email: Schema.String,
@@ -10,7 +9,6 @@ const CreateSuperadminSchema = Schema.Struct({
10
9
  });
11
10
  const adminCtx = { headers: {}, query: {}, admin: true };
12
11
  export const createSuperadminRoute = Effect.gen(function* () {
13
- yield* requireDashboardAuth;
14
12
  const req = yield* HttpServerRequest.HttpServerRequest;
15
13
  const body = yield* req.json.pipe(Effect.flatMap(Schema.decodeUnknown(CreateSuperadminSchema)));
16
14
  const svc = yield* CollectionService;
@@ -28,7 +26,6 @@ export const createSuperadminRoute = Effect.gen(function* () {
28
26
  return HttpServerResponse.unsafeJson({ id: record["id"], email: record["email"] }, { status: 201 });
29
27
  });
30
28
  export const listSuperadminsRoute = Effect.gen(function* () {
31
- yield* requireDashboardAuth;
32
29
  const svc = yield* CollectionService;
33
30
  const result = yield* svc.list(SuperAdminCollection, null, 500, adminCtx);
34
31
  const items = result.items.map((r) => ({
@@ -39,7 +36,6 @@ export const listSuperadminsRoute = Effect.gen(function* () {
39
36
  return HttpServerResponse.unsafeJson({ items }, { status: 200 });
40
37
  });
41
38
  export const deleteSuperadminRoute = Effect.flatMap(HttpRouter.RouteContext, (routeCtx) => Effect.gen(function* () {
42
- yield* requireDashboardAuth;
43
39
  const id = routeCtx.params["id"];
44
40
  if (id === undefined) {
45
41
  return HttpServerResponse.unsafeJson({ error: "not_found" }, { status: 404 });
@@ -1 +1 @@
1
- {"version":3,"file":"superadmin.js","sourceRoot":"","sources":["../../../src/api/superadmin.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"superadmin.js","sourceRoot":"","sources":["../../../src/api/superadmin.ts"],"names":[],"mappings":"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"}
@@ -1,5 +1,5 @@
1
1
  import { MiraPlugin } from "@gettersethya/mira";
2
- export declare const MiraDashboard: MiraPlugin;
2
+ export declare const MiraDashboard: MiraPlugin<never>;
3
3
  export { SuperAdminCollection } from "./superadmin.js";
4
4
  export { getRegisterToken, setRegisterToken, generateRegisterToken } from "./superadmin.js";
5
5
  export { makeDashboardRouter } from "./router.js";
@@ -1 +1 @@
1
- {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/index.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,UAAU,EAAgC,MAAM,oBAAoB,CAAA;AAI7E,eAAO,MAAM,aAAa,YAqCxB,CAAA;AAEF,OAAO,EAAE,oBAAoB,EAAE,MAAM,iBAAiB,CAAA;AACtD,OAAO,EAAE,gBAAgB,EAAE,gBAAgB,EAAE,qBAAqB,EAAE,MAAM,iBAAiB,CAAA;AAC3F,OAAO,EAAE,mBAAmB,EAAE,MAAM,aAAa,CAAA;AACjD,YAAY,EAAE,UAAU,EAAE,MAAM,oBAAoB,CAAA"}
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/index.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,UAAU,EAAgC,MAAM,oBAAoB,CAAA;AAI7E,eAAO,MAAM,aAAa,mBA6CxB,CAAA;AAEF,OAAO,EAAE,oBAAoB,EAAE,MAAM,iBAAiB,CAAA;AACtD,OAAO,EAAE,gBAAgB,EAAE,gBAAgB,EAAE,qBAAqB,EAAE,MAAM,iBAAiB,CAAA;AAC3F,OAAO,EAAE,mBAAmB,EAAE,MAAM,aAAa,CAAA;AACjD,YAAY,EAAE,UAAU,EAAE,MAAM,oBAAoB,CAAA"}
package/dist/src/index.js CHANGED
@@ -30,6 +30,12 @@ export const MiraDashboard = MiraPlugin.define({
30
30
  },
31
31
  onRecordDeleteSuccess: {
32
32
  handler: (ctx) => Effect.log(`[dashboard] audit: deleted ${String(ctx.result["id"])} in ${ctx.collection.name}`)
33
+ },
34
+ onCronSuccess: {
35
+ handler: (ctx) => Effect.log(`[dashboard] audit: cron "${ctx.name}" succeeded in ${ctx.durationMs}ms`)
36
+ },
37
+ onCronError: {
38
+ handler: (ctx) => Effect.log(`[dashboard] audit: cron "${ctx.name}" failed after ${ctx.durationMs}ms`)
33
39
  }
34
40
  });
35
41
  export { SuperAdminCollection } from "./superadmin.js";
@@ -1 +1 @@
1
- {"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/index.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,MAAM,EAAE,MAAM,QAAQ,CAAA;AAC/B,OAAO,EAAE,UAAU,EAAE,SAAS,EAAE,iBAAiB,EAAE,MAAM,oBAAoB,CAAA;AAC7E,OAAO,EAAE,oBAAoB,EAAE,gBAAgB,EAAE,qBAAqB,EAAE,MAAM,iBAAiB,CAAA;AAC/F,OAAO,EAAE,mBAAmB,EAAE,MAAM,aAAa,CAAA;AAEjD,MAAM,CAAC,MAAM,aAAa,GAAG,UAAU,CAAC,MAAM,CAAC;IAC7C,WAAW,EAAE,CAAC,oBAAoB,CAAC;IAEnC,MAAM,EAAE,mBAAmB,CAAC,CAAC,oBAAoB,CAAC,CAAC;IAEnD,WAAW,EAAE,GAAG,EAAE,CAChB,MAAM,CAAC,GAAG,CAAC,QAAQ,CAAC;QAClB,MAAM,KAAK,GAAG,qBAAqB,EAAE,CAAA;QACrC,MAAM,GAAG,GAAG,KAAK,CAAC,CAAC,SAAS,CAAA;QAC5B,MAAM,GAAG,GAAG,KAAK,CAAC,CAAC,iBAAiB,CAAA;QACpC,MAAM,OAAO,GAAG,KAAK,CAAC,CAAC,GAAG;aACvB,IAAI,CAAC,oBAAoB,EAAE,IAAI,EAAE,CAAC,EAAE,EAAE,OAAO,EAAE,EAAE,EAAE,KAAK,EAAE,EAAE,EAAE,KAAK,EAAE,IAAI,EAAE,CAAC;aAC5E,IAAI,CAAC,MAAM,CAAC,KAAK,CAAC,CAAA;QAErB,KAAK,CAAC,CAAC,MAAM,CAAC,GAAG,CAAC,qCAAqC,CAAC,CAAA;QAExD,IAAI,OAAO,CAAC,KAAK,CAAC,MAAM,KAAK,CAAC,EAAE,CAAC;YAC/B,gBAAgB,CAAC,KAAK,CAAC,CAAA;YACvB,KAAK,CAAC,CAAC,MAAM,CAAC,GAAG,CAAC,4BAA4B,GAAG,CAAC,cAAc,8BAA8B,KAAK,EAAE,CAAC,CAAA;QACxG,CAAC;aAAM,CAAC;YACN,KAAK,CAAC,CAAC,MAAM,CAAC,GAAG,CAAC,uBAAuB,GAAG,CAAC,cAAc,cAAc,CAAC,CAAA;QAC5E,CAAC;IACH,CAAC,CAAC;IAEJ,OAAO,EAAE,GAAG,EAAE,CAAC,MAAM,CAAC,GAAG,CAAC,uCAAuC,CAAC;IAElE,qBAAqB,EAAE;QACrB,OAAO,EAAE,CAAC,GAAG,EAAE,EAAE,CAAC,MAAM,CAAC,GAAG,CAAC,8BAA8B,MAAM,CAAC,GAAG,CAAC,MAAM,CAAC,IAAI,CAAC,CAAC,OAAO,GAAG,CAAC,UAAU,CAAC,IAAI,EAAE,CAAC;KACjH;IAED,qBAAqB,EAAE;QACrB,OAAO,EAAE,CAAC,GAAG,EAAE,EAAE,CAAC,MAAM,CAAC,GAAG,CAAC,8BAA8B,MAAM,CAAC,GAAG,CAAC,MAAM,CAAC,IAAI,CAAC,CAAC,OAAO,GAAG,CAAC,UAAU,CAAC,IAAI,EAAE,CAAC;KACjH;IAED,qBAAqB,EAAE;QACrB,OAAO,EAAE,CAAC,GAAG,EAAE,EAAE,CAAC,MAAM,CAAC,GAAG,CAAC,8BAA8B,MAAM,CAAC,GAAG,CAAC,MAAM,CAAC,IAAI,CAAC,CAAC,OAAO,GAAG,CAAC,UAAU,CAAC,IAAI,EAAE,CAAC;KACjH;CACF,CAAC,CAAA;AAEF,OAAO,EAAE,oBAAoB,EAAE,MAAM,iBAAiB,CAAA;AACtD,OAAO,EAAE,gBAAgB,EAAE,gBAAgB,EAAE,qBAAqB,EAAE,MAAM,iBAAiB,CAAA;AAC3F,OAAO,EAAE,mBAAmB,EAAE,MAAM,aAAa,CAAA"}
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/index.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,MAAM,EAAE,MAAM,QAAQ,CAAA;AAC/B,OAAO,EAAE,UAAU,EAAE,SAAS,EAAE,iBAAiB,EAAE,MAAM,oBAAoB,CAAA;AAC7E,OAAO,EAAE,oBAAoB,EAAE,gBAAgB,EAAE,qBAAqB,EAAE,MAAM,iBAAiB,CAAA;AAC/F,OAAO,EAAE,mBAAmB,EAAE,MAAM,aAAa,CAAA;AAEjD,MAAM,CAAC,MAAM,aAAa,GAAG,UAAU,CAAC,MAAM,CAAC;IAC7C,WAAW,EAAE,CAAC,oBAAoB,CAAC;IAEnC,MAAM,EAAE,mBAAmB,CAAC,CAAC,oBAAoB,CAAC,CAAC;IAEnD,WAAW,EAAE,GAAG,EAAE,CAChB,MAAM,CAAC,GAAG,CAAC,QAAQ,CAAC;QAClB,MAAM,KAAK,GAAG,qBAAqB,EAAE,CAAA;QACrC,MAAM,GAAG,GAAG,KAAK,CAAC,CAAC,SAAS,CAAA;QAC5B,MAAM,GAAG,GAAG,KAAK,CAAC,CAAC,iBAAiB,CAAA;QACpC,MAAM,OAAO,GAAG,KAAK,CAAC,CAAC,GAAG;aACvB,IAAI,CAAC,oBAAoB,EAAE,IAAI,EAAE,CAAC,EAAE,EAAE,OAAO,EAAE,EAAE,EAAE,KAAK,EAAE,EAAE,EAAE,KAAK,EAAE,IAAI,EAAE,CAAC;aAC5E,IAAI,CAAC,MAAM,CAAC,KAAK,CAAC,CAAA;QAErB,KAAK,CAAC,CAAC,MAAM,CAAC,GAAG,CAAC,qCAAqC,CAAC,CAAA;QAExD,IAAI,OAAO,CAAC,KAAK,CAAC,MAAM,KAAK,CAAC,EAAE,CAAC;YAC/B,gBAAgB,CAAC,KAAK,CAAC,CAAA;YACvB,KAAK,CAAC,CAAC,MAAM,CAAC,GAAG,CAAC,4BAA4B,GAAG,CAAC,cAAc,8BAA8B,KAAK,EAAE,CAAC,CAAA;QACxG,CAAC;aAAM,CAAC;YACN,KAAK,CAAC,CAAC,MAAM,CAAC,GAAG,CAAC,uBAAuB,GAAG,CAAC,cAAc,cAAc,CAAC,CAAA;QAC5E,CAAC;IACH,CAAC,CAAC;IAEJ,OAAO,EAAE,GAAG,EAAE,CAAC,MAAM,CAAC,GAAG,CAAC,uCAAuC,CAAC;IAElE,qBAAqB,EAAE;QACrB,OAAO,EAAE,CAAC,GAAG,EAAE,EAAE,CAAC,MAAM,CAAC,GAAG,CAAC,8BAA8B,MAAM,CAAC,GAAG,CAAC,MAAM,CAAC,IAAI,CAAC,CAAC,OAAO,GAAG,CAAC,UAAU,CAAC,IAAI,EAAE,CAAC;KACjH;IAED,qBAAqB,EAAE;QACrB,OAAO,EAAE,CAAC,GAAG,EAAE,EAAE,CAAC,MAAM,CAAC,GAAG,CAAC,8BAA8B,MAAM,CAAC,GAAG,CAAC,MAAM,CAAC,IAAI,CAAC,CAAC,OAAO,GAAG,CAAC,UAAU,CAAC,IAAI,EAAE,CAAC;KACjH;IAED,qBAAqB,EAAE;QACrB,OAAO,EAAE,CAAC,GAAG,EAAE,EAAE,CAAC,MAAM,CAAC,GAAG,CAAC,8BAA8B,MAAM,CAAC,GAAG,CAAC,MAAM,CAAC,IAAI,CAAC,CAAC,OAAO,GAAG,CAAC,UAAU,CAAC,IAAI,EAAE,CAAC;KACjH;IAED,aAAa,EAAE;QACb,OAAO,EAAE,CAAC,GAAG,EAAE,EAAE,CAAC,MAAM,CAAC,GAAG,CAAC,4BAA4B,GAAG,CAAC,IAAI,kBAAkB,GAAG,CAAC,UAAU,IAAI,CAAC;KACvG;IAED,WAAW,EAAE;QACX,OAAO,EAAE,CAAC,GAAG,EAAE,EAAE,CAAC,MAAM,CAAC,GAAG,CAAC,4BAA4B,GAAG,CAAC,IAAI,kBAAkB,GAAG,CAAC,UAAU,IAAI,CAAC;KACvG;CACF,CAAC,CAAA;AAEF,OAAO,EAAE,oBAAoB,EAAE,MAAM,iBAAiB,CAAA;AACtD,OAAO,EAAE,gBAAgB,EAAE,gBAAgB,EAAE,qBAAqB,EAAE,MAAM,iBAAiB,CAAA;AAC3F,OAAO,EAAE,mBAAmB,EAAE,MAAM,aAAa,CAAA"}
@@ -1,6 +1,5 @@
1
1
  import { HttpRouter } from "@effect/platform";
2
2
  import { FileSystem, Path } from "@effect/platform";
3
3
  import type { AnyCollectionDef } from "@gettersethya/mira-client";
4
- import type { AuthService, AppConfig, CollectionService } from "@gettersethya/mira";
5
- export declare function makeDashboardRouter(_collections: ReadonlyArray<AnyCollectionDef>): HttpRouter.HttpRouter<never, CollectionService | AuthService | FileSystem.FileSystem | Path.Path | AppConfig>;
4
+ export declare function makeDashboardRouter(_collections: ReadonlyArray<AnyCollectionDef>): HttpRouter.HttpRouter<never, import("@gettersethya/mira").CollectionService | import("@gettersethya/mira").AuthService | FileSystem.FileSystem | Path.Path | import("@gettersethya/mira").AppConfig | import("@gettersethya/mira").CronService>;
6
5
  //# sourceMappingURL=router.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"router.d.ts","sourceRoot":"","sources":["../../src/router.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,UAAU,EAAyC,MAAM,kBAAkB,CAAA;AACpF,OAAO,EAAE,UAAU,EAAE,IAAI,EAAE,MAAM,kBAAkB,CAAA;AAEnD,OAAO,KAAK,EAAE,gBAAgB,EAAE,MAAM,2BAA2B,CAAA;AACjE,OAAO,KAAK,EAAc,WAAW,EAAE,SAAS,EAAE,iBAAiB,EAAE,MAAM,oBAAoB,CAAA;AAyE/F,wBAAgB,mBAAmB,CAAC,YAAY,EAAE,aAAa,CAAC,gBAAgB,CAAC,iHAWhF"}
1
+ {"version":3,"file":"router.d.ts","sourceRoot":"","sources":["../../src/router.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,UAAU,EAAyC,MAAM,kBAAkB,CAAA;AACpF,OAAO,EAAE,UAAU,EAAE,IAAI,EAAE,MAAM,kBAAkB,CAAA;AAEnD,OAAO,KAAK,EAAE,gBAAgB,EAAE,MAAM,2BAA2B,CAAA;AA0GjE,wBAAgB,mBAAmB,CAAC,YAAY,EAAE,aAAa,CAAC,gBAAgB,CAAC,mPAYhF"}
@@ -5,8 +5,8 @@ import { bootstrapStatusRoute } from "./api/bootstrap-status.js";
5
5
  import { registerRoute } from "./api/register.js";
6
6
  import { createSuperadminRoute, listSuperadminsRoute, deleteSuperadminRoute } from "./api/superadmin.js";
7
7
  import { configRoute } from "./api/config.js";
8
- import { loginRoute } from "./api/login.js";
9
- import { DashboardUnauthorizedError } from "./api/auth.js";
8
+ import { cronsRoute, cronRunNowRoute } from "./api/crons.js";
9
+ import { DashboardUnauthorizedError, requireDashboardAuth } from "./api/auth.js";
10
10
  function makeContentType(ext) {
11
11
  const types = {
12
12
  ".html": "text/html",
@@ -22,7 +22,7 @@ function makeContentType(ext) {
22
22
  };
23
23
  return types[ext] ?? "application/octet-stream";
24
24
  }
25
- function wrapRoute(effect) {
25
+ function wrapRoute(operation, effect) {
26
26
  return Effect.catchAllCause(effect, (cause) => {
27
27
  const failure = Cause.failureOption(cause);
28
28
  if (Option.isSome(failure)) {
@@ -32,10 +32,32 @@ function wrapRoute(effect) {
32
32
  return Effect.succeed(HttpServerResponse.unsafeJson({ error: "bad_request" }, { status: 400 }));
33
33
  }
34
34
  return Effect.succeed(HttpServerResponse.unsafeJson({ error: "internal" }, { status: 500 }));
35
- });
35
+ }).pipe(Effect.withSpan("http.handler", { kind: "server", attributes: { operation } }));
36
+ }
37
+ function wrapAuthRoute(operation, effect) {
38
+ return Effect.gen(function* () {
39
+ const authResult = yield* requireDashboardAuth.pipe(Effect.catchTag("DashboardUnauthorizedError", () => Effect.succeed(null)));
40
+ if (authResult === null) {
41
+ return HttpServerResponse.unsafeJson({ error: "unauthorized" }, { status: 401 });
42
+ }
43
+ yield* Effect.currentSpan.pipe(Effect.tap((span) => Effect.sync(() => {
44
+ span.attribute("auth.collection", authResult.col);
45
+ const parent = span.parent;
46
+ if (Option.isSome(parent) && parent.value._tag === "Span") {
47
+ parent.value.attribute("auth.collection", authResult.col);
48
+ }
49
+ })), Effect.ignore);
50
+ return yield* Effect.catchAllCause(effect, (cause) => {
51
+ const failure = Cause.failureOption(cause);
52
+ if (Option.isSome(failure)) {
53
+ return Effect.succeed(HttpServerResponse.unsafeJson({ error: "bad_request" }, { status: 400 }));
54
+ }
55
+ return Effect.succeed(HttpServerResponse.unsafeJson({ error: "internal" }, { status: 500 }));
56
+ });
57
+ }).pipe(Effect.withSpan("http.handler", { kind: "server", attributes: { operation } }));
36
58
  }
37
59
  function makeDashboardSpaRoute() {
38
- const spaHandler = wrapRoute(Effect.gen(function* () {
60
+ const spaHandler = wrapRoute("dashboard_spa", Effect.gen(function* () {
39
61
  const fs = yield* FileSystem.FileSystem;
40
62
  const path = yield* Path.Path;
41
63
  const req = yield* HttpServerRequest.HttpServerRequest;
@@ -61,6 +83,6 @@ function makeDashboardSpaRoute() {
61
83
  return HttpRouter.empty.pipe(HttpRouter.get("/_dashboard", spaHandler), HttpRouter.get("/_dashboard/*", spaHandler));
62
84
  }
63
85
  export function makeDashboardRouter(_collections) {
64
- return HttpRouter.empty.pipe(HttpRouter.get("/_dashboard/api/bootstrap-status", wrapRoute(bootstrapStatusRoute)), HttpRouter.post("/_dashboard/api/register", wrapRoute(registerRoute)), HttpRouter.post("/_dashboard/api/login", wrapRoute(loginRoute)), HttpRouter.post("/_dashboard/api/superadmin/create", wrapRoute(createSuperadminRoute)), HttpRouter.get("/_dashboard/api/superadmin", wrapRoute(listSuperadminsRoute)), HttpRouter.del("/_dashboard/api/superadmin/:id", wrapRoute(deleteSuperadminRoute)), HttpRouter.get("/_dashboard/api/config", wrapRoute(configRoute)), HttpRouter.concat(makeDashboardSpaRoute()));
86
+ return HttpRouter.empty.pipe(HttpRouter.get("/_dashboard/api/bootstrap-status", wrapRoute("bootstrap_status", bootstrapStatusRoute)), HttpRouter.post("/_dashboard/api/register", wrapRoute("register", registerRoute)), HttpRouter.post("/_dashboard/api/superadmin/create", wrapAuthRoute("superadmin_create", createSuperadminRoute)), HttpRouter.get("/_dashboard/api/superadmin", wrapAuthRoute("superadmin_list", listSuperadminsRoute)), HttpRouter.del("/_dashboard/api/superadmin/:id", wrapAuthRoute("superadmin_delete", deleteSuperadminRoute)), HttpRouter.get("/_dashboard/api/config", wrapAuthRoute("config", configRoute)), HttpRouter.get("/_dashboard/api/crons", wrapAuthRoute("crons_list", cronsRoute)), HttpRouter.post("/_dashboard/api/crons/:name/run", wrapAuthRoute("crons_run", cronRunNowRoute)), HttpRouter.concat(makeDashboardSpaRoute()));
65
87
  }
66
88
  //# sourceMappingURL=router.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"router.js","sourceRoot":"","sources":["../../src/router.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,UAAU,EAAE,iBAAiB,EAAE,kBAAkB,EAAE,MAAM,kBAAkB,CAAA;AACpF,OAAO,EAAE,UAAU,EAAE,IAAI,EAAE,MAAM,kBAAkB,CAAA;AACnD,OAAO,EAAE,KAAK,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM,QAAQ,CAAA;AAG9C,OAAO,EAAE,oBAAoB,EAAE,MAAM,2BAA2B,CAAA;AAChE,OAAO,EAAE,aAAa,EAAE,MAAM,mBAAmB,CAAA;AACjD,OAAO,EAAE,qBAAqB,EAAE,oBAAoB,EAAE,qBAAqB,EAAE,MAAM,qBAAqB,CAAA;AACxG,OAAO,EAAE,WAAW,EAAE,MAAM,iBAAiB,CAAA;AAC7C,OAAO,EAAE,UAAU,EAAE,MAAM,gBAAgB,CAAA;AAC3C,OAAO,EAAE,0BAA0B,EAAE,MAAM,eAAe,CAAA;AAE1D,SAAS,eAAe,CAAC,GAAW;IAClC,MAAM,KAAK,GAA2B;QACpC,OAAO,EAAE,WAAW;QACpB,KAAK,EAAE,wBAAwB;QAC/B,MAAM,EAAE,UAAU;QAClB,OAAO,EAAE,kBAAkB;QAC3B,MAAM,EAAE,WAAW;QACnB,MAAM,EAAE,YAAY;QACpB,MAAM,EAAE,eAAe;QACvB,MAAM,EAAE,cAAc;QACtB,OAAO,EAAE,WAAW;QACpB,QAAQ,EAAE,YAAY;KACvB,CAAA;IACD,OAAO,KAAK,CAAC,GAAG,CAAC,IAAI,0BAA0B,CAAA;AACjD,CAAC;AAED,SAAS,SAAS,CAAO,MAAkE;IACzF,OAAO,MAAM,CAAC,aAAa,CAAC,MAAM,EAAE,CAAC,KAAK,EAAE,EAAE;QAC5C,MAAM,OAAO,GAAG,KAAK,CAAC,aAAa,CAAC,KAAK,CAAC,CAAA;QAC1C,IAAI,MAAM,CAAC,MAAM,CAAC,OAAO,CAAC,EAAE,CAAC;YAC3B,IAAI,OAAO,CAAC,KAAK,YAAY,0BAA0B,EAAE,CAAC;gBACxD,OAAO,MAAM,CAAC,OAAO,CAAC,kBAAkB,CAAC,UAAU,CAAC,EAAE,KAAK,EAAE,cAAc,EAAE,EAAE,EAAE,MAAM,EAAE,GAAG,EAAE,CAAC,CAAC,CAAA;YAClG,CAAC;YACD,OAAO,MAAM,CAAC,OAAO,CAAC,kBAAkB,CAAC,UAAU,CAAC,EAAE,KAAK,EAAE,aAAa,EAAE,EAAE,EAAE,MAAM,EAAE,GAAG,EAAE,CAAC,CAAC,CAAA;QACjG,CAAC;QACD,OAAO,MAAM,CAAC,OAAO,CAAC,kBAAkB,CAAC,UAAU,CAAC,EAAE,KAAK,EAAE,UAAU,EAAE,EAAE,EAAE,MAAM,EAAE,GAAG,EAAE,CAAC,CAAC,CAAA;IAC9F,CAAC,CAAC,CAAA;AACJ,CAAC;AAED,SAAS,qBAAqB;IAC5B,MAAM,UAAU,GAAG,SAAS,CAC1B,MAAM,CAAC,GAAG,CAAC,QAAQ,CAAC;QAClB,MAAM,EAAE,GAAG,KAAK,CAAC,CAAC,UAAU,CAAC,UAAU,CAAA;QACvC,MAAM,IAAI,GAAG,KAAK,CAAC,CAAC,IAAI,CAAC,IAAI,CAAA;QAC7B,MAAM,GAAG,GAAG,KAAK,CAAC,CAAC,iBAAiB,CAAC,iBAAiB,CAAA;QAEtD,MAAM,UAAU,GAAG,KAAK,CAAC,CAAC,IAAI,CAAC,WAAW,CAAC,IAAI,GAAG,CAAC,MAAM,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC,CAAA;QACpE,MAAM,OAAO,GAAG,IAAI,CAAC,IAAI,CAAC,IAAI,CAAC,OAAO,CAAC,UAAU,CAAC,EAAE,eAAe,CAAC,CAAA;QAEpE,MAAM,OAAO,GAAG,GAAG,CAAC,GAAG,CAAC,KAAK,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,CAAA;QACrC,MAAM,QAAQ,GAAG,OAAO,CAAC,OAAO,CAAC,aAAa,EAAE,EAAE,CAAC,CAAC,OAAO,CAAC,MAAM,EAAE,EAAE,CAAC,CAAA;QACvE,MAAM,QAAQ,GAAG,QAAQ,IAAI,YAAY,CAAA;QAEzC,MAAM,QAAQ,GAAG,IAAI,CAAC,IAAI,CAAC,OAAO,EAAE,QAAQ,CAAC,CAAA;QAC7C,MAAM,MAAM,GAAG,KAAK,CAAC,CAAC,EAAE,CAAC,MAAM,CAAC,QAAQ,CAAC,CAAA;QAEzC,IAAI,CAAC,MAAM,EAAE,CAAC;YACZ,MAAM,SAAS,GAAG,IAAI,CAAC,IAAI,CAAC,OAAO,EAAE,YAAY,CAAC,CAAA;YAClD,MAAM,OAAO,GAAG,KAAK,CAAC,CAAC,EAAE,CAAC,QAAQ,CAAC,SAAS,CAAC,CAAA;YAC7C,OAAO,kBAAkB,CAAC,IAAI,CAAC,OAAO,CAAC,QAAQ,EAAE,CAAC,CAAA;QACpD,CAAC;QAED,MAAM,OAAO,GAAG,KAAK,CAAC,CAAC,EAAE,CAAC,QAAQ,CAAC,QAAQ,CAAC,CAAA;QAC5C,MAAM,GAAG,GAAG,IAAI,CAAC,OAAO,CAAC,QAAQ,CAAC,CAAA;QAClC,MAAM,WAAW,GAAG,eAAe,CAAC,GAAG,CAAC,CAAA;QAExC,OAAO,kBAAkB,CAAC,GAAG,CAAC,OAAO,EAAE;YACrC,OAAO,EAAE,EAAE,cAAc,EAAE,WAAW,EAAE;SACzC,CAAC,CAAA;IACJ,CAAC,CAAC,CACH,CAAA;IAED,OAAO,UAAU,CAAC,KAAK,CAAC,IAAI,CAAC,UAAU,CAAC,GAAG,CAAC,aAAa,EAAE,UAAU,CAAC,EAAE,UAAU,CAAC,GAAG,CAAC,eAAe,EAAE,UAAU,CAAC,CAAC,CAAA;AACtH,CAAC;AAED,MAAM,UAAU,mBAAmB,CAAC,YAA6C;IAC/E,OAAO,UAAU,CAAC,KAAK,CAAC,IAAI,CAC1B,UAAU,CAAC,GAAG,CAAC,kCAAkC,EAAE,SAAS,CAAC,oBAAoB,CAAC,CAAC,EACnF,UAAU,CAAC,IAAI,CAAC,0BAA0B,EAAE,SAAS,CAAC,aAAa,CAAC,CAAC,EACrE,UAAU,CAAC,IAAI,CAAC,uBAAuB,EAAE,SAAS,CAAC,UAAU,CAAC,CAAC,EAC/D,UAAU,CAAC,IAAI,CAAC,mCAAmC,EAAE,SAAS,CAAC,qBAAqB,CAAC,CAAC,EACtF,UAAU,CAAC,GAAG,CAAC,4BAA4B,EAAE,SAAS,CAAC,oBAAoB,CAAC,CAAC,EAC7E,UAAU,CAAC,GAAG,CAAC,gCAAgC,EAAE,SAAS,CAAC,qBAAqB,CAAC,CAAC,EAClF,UAAU,CAAC,GAAG,CAAC,wBAAwB,EAAE,SAAS,CAAC,WAAW,CAAC,CAAC,EAChE,UAAU,CAAC,MAAM,CAAC,qBAAqB,EAAE,CAAC,CAC3C,CAAA;AACH,CAAC"}
1
+ {"version":3,"file":"router.js","sourceRoot":"","sources":["../../src/router.ts"],"names":[],"mappings":"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"}
@@ -1,5 +1,22 @@
1
- import type { AnyCollectionDef } from "@gettersethya/mira-client";
2
- export declare const SuperAdminCollection: AnyCollectionDef;
1
+ export declare const SuperAdminCollection: import("@gettersethya/mira-client").AuthCollectionBuilder<{
2
+ name: import("@gettersethya/mira-client").FieldDef & {
3
+ kind: "text";
4
+ } & {
5
+ default: string;
6
+ } & {
7
+ error?: (kind: import("@gettersethya/mira-client").TextConstraintKind) => string | undefined;
8
+ } & {
9
+ view(): import("@gettersethya/mira-client").FieldDef & {
10
+ kind: "text";
11
+ } & {
12
+ default: string;
13
+ } & {
14
+ error?: (kind: import("@gettersethya/mira-client").TextConstraintKind) => string | undefined;
15
+ } & {
16
+ viewOnly: true;
17
+ };
18
+ };
19
+ }>;
3
20
  export declare function getRegisterToken(): string;
4
21
  export declare function setRegisterToken(token: string): void;
5
22
  export declare function generateRegisterToken(): string;
@@ -1 +1 @@
1
- {"version":3,"file":"superadmin.d.ts","sourceRoot":"","sources":["../../src/superadmin.ts"],"names":[],"mappings":"AACA,OAAO,KAAK,EAAE,gBAAgB,EAAE,MAAM,2BAA2B,CAAA;AAEjE,eAAO,MAAM,oBAAoB,EAAE,gBAMhC,CAAA;AAIH,wBAAgB,gBAAgB,IAAI,MAAM,CAEzC;AAED,wBAAgB,gBAAgB,CAAC,KAAK,EAAE,MAAM,GAAG,IAAI,CAEpD;AAED,wBAAgB,qBAAqB,IAAI,MAAM,CAI9C"}
1
+ {"version":3,"file":"superadmin.d.ts","sourceRoot":"","sources":["../../src/superadmin.ts"],"names":[],"mappings":"AAEA,eAAO,MAAM,oBAAoB;;;;;;;;;;;;;;;;;;EAQ9B,CAAA;AAIH,wBAAgB,gBAAgB,IAAI,MAAM,CAEzC;AAED,wBAAgB,gBAAgB,CAAC,KAAK,EAAE,MAAM,GAAG,IAAI,CAEpD;AAED,wBAAgB,qBAAqB,IAAI,MAAM,CAI9C"}
@@ -1,10 +1,12 @@
1
- import { AuthCollection } from "@gettersethya/mira-client";
2
- export const SuperAdminCollection = AuthCollection.define("_superadmin", {}).rules((R) => ({
3
- list: R.field("email").eq(R.literal("")),
4
- view: R.field("email").eq(R.literal("")),
1
+ import { AuthCollection, Field } from "@gettersethya/mira-client";
2
+ export const SuperAdminCollection = AuthCollection.define("_superadmin", {
3
+ name: Field.text({ default: "" })
4
+ }).rules((R) => ({
5
+ list: R.authCollection().eq(R.literal("_superadmin")),
6
+ view: R.authCollection().eq(R.literal("_superadmin")),
5
7
  create: R.public(),
6
- update: R.field("email").eq(R.literal("")),
7
- delete: R.field("email").eq(R.literal(""))
8
+ update: R.authCollection().eq(R.literal("_superadmin")),
9
+ delete: R.authCollection().eq(R.literal("_superadmin"))
8
10
  }));
9
11
  let _registerToken = "";
10
12
  export function getRegisterToken() {
@@ -1 +1 @@
1
- {"version":3,"file":"superadmin.js","sourceRoot":"","sources":["../../src/superadmin.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,cAAc,EAAE,MAAM,2BAA2B,CAAA;AAG1D,MAAM,CAAC,MAAM,oBAAoB,GAAqB,cAAc,CAAC,MAAM,CAAC,aAAa,EAAE,EAAE,CAAC,CAAC,KAAK,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC;IAC3G,IAAI,EAAE,CAAC,CAAC,KAAK,CAAC,OAAO,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,OAAO,CAAC,EAAE,CAAC,CAAC;IACxC,IAAI,EAAE,CAAC,CAAC,KAAK,CAAC,OAAO,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,OAAO,CAAC,EAAE,CAAC,CAAC;IACxC,MAAM,EAAE,CAAC,CAAC,MAAM,EAAE;IAClB,MAAM,EAAE,CAAC,CAAC,KAAK,CAAC,OAAO,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,OAAO,CAAC,EAAE,CAAC,CAAC;IAC1C,MAAM,EAAE,CAAC,CAAC,KAAK,CAAC,OAAO,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,OAAO,CAAC,EAAE,CAAC,CAAC;CAC3C,CAAC,CAAC,CAAA;AAEH,IAAI,cAAc,GAAG,EAAE,CAAA;AAEvB,MAAM,UAAU,gBAAgB;IAC9B,OAAO,cAAc,CAAA;AACvB,CAAC;AAED,MAAM,UAAU,gBAAgB,CAAC,KAAa;IAC5C,cAAc,GAAG,KAAK,CAAA;AACxB,CAAC;AAED,MAAM,UAAU,qBAAqB;IACnC,MAAM,GAAG,GAAG,IAAI,UAAU,CAAC,EAAE,CAAC,CAAA;IAC9B,UAAU,CAAC,MAAM,CAAC,eAAe,CAAC,GAAG,CAAC,CAAA;IACtC,OAAO,MAAM,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC,QAAQ,CAAC,KAAK,CAAC,CAAA;AACzC,CAAC"}
1
+ {"version":3,"file":"superadmin.js","sourceRoot":"","sources":["../../src/superadmin.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,cAAc,EAAE,KAAK,EAAE,MAAM,2BAA2B,CAAA;AAEjE,MAAM,CAAC,MAAM,oBAAoB,GAAG,cAAc,CAAC,MAAM,CAAC,aAAa,EAAE;IACvE,IAAI,EAAE,KAAK,CAAC,IAAI,CAAC,EAAE,OAAO,EAAE,EAAE,EAAE,CAAC;CAClC,CAAC,CAAC,KAAK,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC;IACf,IAAI,EAAE,CAAC,CAAC,cAAc,EAAE,CAAC,EAAE,CAAC,CAAC,CAAC,OAAO,CAAC,aAAa,CAAC,CAAC;IACrD,IAAI,EAAE,CAAC,CAAC,cAAc,EAAE,CAAC,EAAE,CAAC,CAAC,CAAC,OAAO,CAAC,aAAa,CAAC,CAAC;IACrD,MAAM,EAAE,CAAC,CAAC,MAAM,EAAE;IAClB,MAAM,EAAE,CAAC,CAAC,cAAc,EAAE,CAAC,EAAE,CAAC,CAAC,CAAC,OAAO,CAAC,aAAa,CAAC,CAAC;IACvD,MAAM,EAAE,CAAC,CAAC,cAAc,EAAE,CAAC,EAAE,CAAC,CAAC,CAAC,OAAO,CAAC,aAAa,CAAC,CAAC;CACxD,CAAC,CAAC,CAAA;AAEH,IAAI,cAAc,GAAG,EAAE,CAAA;AAEvB,MAAM,UAAU,gBAAgB;IAC9B,OAAO,cAAc,CAAA;AACvB,CAAC;AAED,MAAM,UAAU,gBAAgB,CAAC,KAAa;IAC5C,cAAc,GAAG,KAAK,CAAA;AACxB,CAAC;AAED,MAAM,UAAU,qBAAqB;IACnC,MAAM,GAAG,GAAG,IAAI,UAAU,CAAC,EAAE,CAAC,CAAA;IAC9B,UAAU,CAAC,MAAM,CAAC,eAAe,CAAC,GAAG,CAAC,CAAA;IACtC,OAAO,MAAM,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC,QAAQ,CAAC,KAAK,CAAC,CAAA;AACzC,CAAC"}
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@gettersethya/mira-dashboard",
3
- "version": "0.1.0-alpha.1",
3
+ "version": "0.1.0-alpha.13",
4
4
  "type": "module",
5
5
  "description": "Admin dashboard plugin for Mira",
6
6
  "author": "Getter Sethya",
@@ -20,8 +20,8 @@
20
20
  "@tanstack/svelte-table": "^8.21.3",
21
21
  "@tanstack/table-core": "^8.21.3",
22
22
  "jose": "^6.2.3",
23
- "@gettersethya/mira": "0.1.0-alpha.9",
24
- "@gettersethya/mira-client": "0.1.0-alpha.9"
23
+ "@gettersethya/mira-client": "0.1.0-alpha.13",
24
+ "@gettersethya/mira": "0.1.0-alpha.13"
25
25
  },
26
26
  "peerDependencies": {
27
27
  "effect": ">=3.21"