@gettersethya/mira-dashboard 0.1.0-alpha.1
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/dist/api/bootstrap-status.d.ts +5 -0
- package/dist/api/bootstrap-status.d.ts.map +1 -0
- package/dist/api/bootstrap-status.js +16 -0
- package/dist/api/bootstrap-status.js.map +1 -0
- package/dist/api/config.d.ts +5 -0
- package/dist/api/config.d.ts.map +1 -0
- package/dist/api/config.js +18 -0
- package/dist/api/config.js.map +1 -0
- package/dist/api/logs.d.ts +6 -0
- package/dist/api/logs.d.ts.map +1 -0
- package/dist/api/logs.js +56 -0
- package/dist/api/logs.js.map +1 -0
- package/dist/api/records.d.ts +6 -0
- package/dist/api/records.d.ts.map +1 -0
- package/dist/api/records.js +78 -0
- package/dist/api/records.js.map +1 -0
- package/dist/api/register.d.ts +5 -0
- package/dist/api/register.d.ts.map +1 -0
- package/dist/api/register.js +30 -0
- package/dist/api/register.js.map +1 -0
- package/dist/api/schema.d.ts +5 -0
- package/dist/api/schema.d.ts.map +1 -0
- package/dist/api/schema.js +23 -0
- package/dist/api/schema.js.map +1 -0
- package/dist/api/superadmin.d.ts +5 -0
- package/dist/api/superadmin.d.ts.map +1 -0
- package/dist/api/superadmin.js +25 -0
- package/dist/api/superadmin.js.map +1 -0
- package/dist/index.d.ts +8 -0
- package/dist/index.d.ts.map +1 -0
- package/dist/index.js +26 -0
- package/dist/index.js.map +1 -0
- package/dist/router.d.ts +9 -0
- package/dist/router.d.ts.map +1 -0
- package/dist/router.js +67 -0
- package/dist/router.js.map +1 -0
- package/dist/schema-token.d.ts +5 -0
- package/dist/schema-token.d.ts.map +1 -0
- package/dist/schema-token.js +11 -0
- package/dist/schema-token.js.map +1 -0
- package/dist/src/api/auth.d.ts +22 -0
- package/dist/src/api/auth.d.ts.map +1 -0
- package/dist/src/api/auth.js +56 -0
- package/dist/src/api/auth.js.map +1 -0
- package/dist/src/api/bootstrap-status.d.ts +5 -0
- package/dist/src/api/bootstrap-status.d.ts.map +1 -0
- package/dist/src/api/bootstrap-status.js +14 -0
- package/dist/src/api/bootstrap-status.js.map +1 -0
- package/dist/src/api/config.d.ts +5 -0
- package/dist/src/api/config.d.ts.map +1 -0
- package/dist/src/api/config.js +20 -0
- package/dist/src/api/config.js.map +1 -0
- package/dist/src/api/login.d.ts +5 -0
- package/dist/src/api/login.d.ts.map +1 -0
- package/dist/src/api/login.js +33 -0
- package/dist/src/api/login.js.map +1 -0
- package/dist/src/api/logs.d.ts +6 -0
- package/dist/src/api/logs.d.ts.map +1 -0
- package/dist/src/api/logs.js +59 -0
- package/dist/src/api/logs.js.map +1 -0
- package/dist/src/api/records.d.ts +6 -0
- package/dist/src/api/records.d.ts.map +1 -0
- package/dist/src/api/records.js +78 -0
- package/dist/src/api/records.js.map +1 -0
- package/dist/src/api/register.d.ts +5 -0
- package/dist/src/api/register.d.ts.map +1 -0
- package/dist/src/api/register.js +32 -0
- package/dist/src/api/register.js.map +1 -0
- package/dist/src/api/schema.d.ts +5 -0
- package/dist/src/api/schema.d.ts.map +1 -0
- package/dist/src/api/schema.js +19 -0
- package/dist/src/api/schema.js.map +1 -0
- package/dist/src/api/spans.d.ts +5 -0
- package/dist/src/api/spans.d.ts.map +1 -0
- package/dist/src/api/spans.js +56 -0
- package/dist/src/api/spans.js.map +1 -0
- package/dist/src/api/superadmin.d.ts +7 -0
- package/dist/src/api/superadmin.d.ts.map +1 -0
- package/dist/src/api/superadmin.js +55 -0
- package/dist/src/api/superadmin.js.map +1 -0
- package/dist/src/index.d.ts +7 -0
- package/dist/src/index.d.ts.map +1 -0
- package/dist/src/index.js +38 -0
- package/dist/src/index.js.map +1 -0
- package/dist/src/router.d.ts +6 -0
- package/dist/src/router.d.ts.map +1 -0
- package/dist/src/router.js +66 -0
- package/dist/src/router.js.map +1 -0
- package/dist/src/schema-token.d.ts +5 -0
- package/dist/src/schema-token.d.ts.map +1 -0
- package/dist/src/schema-token.js +11 -0
- package/dist/src/schema-token.js.map +1 -0
- package/dist/src/superadmin.d.ts +6 -0
- package/dist/src/superadmin.d.ts.map +1 -0
- package/dist/src/superadmin.js +21 -0
- package/dist/src/superadmin.js.map +1 -0
- package/dist/superadmin.d.ts +7 -0
- package/dist/superadmin.d.ts.map +1 -0
- package/dist/superadmin.js +20 -0
- package/dist/superadmin.js.map +1 -0
- package/package.json +45 -0
|
@@ -0,0 +1,7 @@
|
|
|
1
|
+
import { MiraPlugin } from "@gettersethya/mira";
|
|
2
|
+
export declare const MiraDashboard: MiraPlugin;
|
|
3
|
+
export { SuperAdminCollection } from "./superadmin.js";
|
|
4
|
+
export { getRegisterToken, setRegisterToken, generateRegisterToken } from "./superadmin.js";
|
|
5
|
+
export { makeDashboardRouter } from "./router.js";
|
|
6
|
+
export type { MiraPlugin } from "@gettersethya/mira";
|
|
7
|
+
//# sourceMappingURL=index.d.ts.map
|
|
@@ -0,0 +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"}
|
|
@@ -0,0 +1,38 @@
|
|
|
1
|
+
import { Effect } from "effect";
|
|
2
|
+
import { MiraPlugin, AppConfig, CollectionService } from "@gettersethya/mira";
|
|
3
|
+
import { SuperAdminCollection, setRegisterToken, generateRegisterToken } from "./superadmin.js";
|
|
4
|
+
import { makeDashboardRouter } from "./router.js";
|
|
5
|
+
export const MiraDashboard = MiraPlugin.define({
|
|
6
|
+
collections: [SuperAdminCollection],
|
|
7
|
+
routes: makeDashboardRouter([SuperAdminCollection]),
|
|
8
|
+
onBootstrap: () => Effect.gen(function* () {
|
|
9
|
+
const token = generateRegisterToken();
|
|
10
|
+
const cfg = yield* AppConfig;
|
|
11
|
+
const svc = yield* CollectionService;
|
|
12
|
+
const results = yield* svc
|
|
13
|
+
.list(SuperAdminCollection, null, 1, { headers: {}, query: {}, admin: true })
|
|
14
|
+
.pipe(Effect.orDie);
|
|
15
|
+
yield* Effect.log("[dashboard] Dashboard plugin loaded");
|
|
16
|
+
if (results.items.length === 0) {
|
|
17
|
+
setRegisterToken(token);
|
|
18
|
+
yield* Effect.log(`[dashboard] Register at: ${cfg.applicationUrl}/_dashboard/register?token=${token}`);
|
|
19
|
+
}
|
|
20
|
+
else {
|
|
21
|
+
yield* Effect.log(`[dashboard] run at: ${cfg.applicationUrl}/_dashboard/`);
|
|
22
|
+
}
|
|
23
|
+
}),
|
|
24
|
+
onServe: () => Effect.log("[dashboard] Available at /_dashboard/"),
|
|
25
|
+
onRecordCreateSuccess: {
|
|
26
|
+
handler: (ctx) => Effect.log(`[dashboard] audit: created ${String(ctx.result["id"])} in ${ctx.collection.name}`)
|
|
27
|
+
},
|
|
28
|
+
onRecordUpdateSuccess: {
|
|
29
|
+
handler: (ctx) => Effect.log(`[dashboard] audit: updated ${String(ctx.result["id"])} in ${ctx.collection.name}`)
|
|
30
|
+
},
|
|
31
|
+
onRecordDeleteSuccess: {
|
|
32
|
+
handler: (ctx) => Effect.log(`[dashboard] audit: deleted ${String(ctx.result["id"])} in ${ctx.collection.name}`)
|
|
33
|
+
}
|
|
34
|
+
});
|
|
35
|
+
export { SuperAdminCollection } from "./superadmin.js";
|
|
36
|
+
export { getRegisterToken, setRegisterToken, generateRegisterToken } from "./superadmin.js";
|
|
37
|
+
export { makeDashboardRouter } from "./router.js";
|
|
38
|
+
//# sourceMappingURL=index.js.map
|
|
@@ -0,0 +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"}
|
|
@@ -0,0 +1,6 @@
|
|
|
1
|
+
import { HttpRouter } from "@effect/platform";
|
|
2
|
+
import { FileSystem, Path } from "@effect/platform";
|
|
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>;
|
|
6
|
+
//# sourceMappingURL=router.d.ts.map
|
|
@@ -0,0 +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"}
|
|
@@ -0,0 +1,66 @@
|
|
|
1
|
+
import { HttpRouter, HttpServerRequest, HttpServerResponse } from "@effect/platform";
|
|
2
|
+
import { FileSystem, Path } from "@effect/platform";
|
|
3
|
+
import { Cause, Effect, Option } from "effect";
|
|
4
|
+
import { bootstrapStatusRoute } from "./api/bootstrap-status.js";
|
|
5
|
+
import { registerRoute } from "./api/register.js";
|
|
6
|
+
import { createSuperadminRoute, listSuperadminsRoute, deleteSuperadminRoute } from "./api/superadmin.js";
|
|
7
|
+
import { configRoute } from "./api/config.js";
|
|
8
|
+
import { loginRoute } from "./api/login.js";
|
|
9
|
+
import { DashboardUnauthorizedError } from "./api/auth.js";
|
|
10
|
+
function makeContentType(ext) {
|
|
11
|
+
const types = {
|
|
12
|
+
".html": "text/html",
|
|
13
|
+
".js": "application/javascript",
|
|
14
|
+
".css": "text/css",
|
|
15
|
+
".json": "application/json",
|
|
16
|
+
".png": "image/png",
|
|
17
|
+
".jpg": "image/jpeg",
|
|
18
|
+
".svg": "image/svg+xml",
|
|
19
|
+
".ico": "image/x-icon",
|
|
20
|
+
".woff": "font/woff",
|
|
21
|
+
".woff2": "font/woff2"
|
|
22
|
+
};
|
|
23
|
+
return types[ext] ?? "application/octet-stream";
|
|
24
|
+
}
|
|
25
|
+
function wrapRoute(effect) {
|
|
26
|
+
return Effect.catchAllCause(effect, (cause) => {
|
|
27
|
+
const failure = Cause.failureOption(cause);
|
|
28
|
+
if (Option.isSome(failure)) {
|
|
29
|
+
if (failure.value instanceof DashboardUnauthorizedError) {
|
|
30
|
+
return Effect.succeed(HttpServerResponse.unsafeJson({ error: "unauthorized" }, { status: 401 }));
|
|
31
|
+
}
|
|
32
|
+
return Effect.succeed(HttpServerResponse.unsafeJson({ error: "bad_request" }, { status: 400 }));
|
|
33
|
+
}
|
|
34
|
+
return Effect.succeed(HttpServerResponse.unsafeJson({ error: "internal" }, { status: 500 }));
|
|
35
|
+
});
|
|
36
|
+
}
|
|
37
|
+
function makeDashboardSpaRoute() {
|
|
38
|
+
const spaHandler = wrapRoute(Effect.gen(function* () {
|
|
39
|
+
const fs = yield* FileSystem.FileSystem;
|
|
40
|
+
const path = yield* Path.Path;
|
|
41
|
+
const req = yield* HttpServerRequest.HttpServerRequest;
|
|
42
|
+
const modulePath = yield* path.fromFileUrl(new URL(import.meta.url));
|
|
43
|
+
const distDir = path.join(path.dirname(modulePath), "../../ui/dist");
|
|
44
|
+
const urlPath = req.url.split("?")[0];
|
|
45
|
+
const stripped = urlPath.replace("/_dashboard", "").replace(/^\/+/, "");
|
|
46
|
+
const filePath = stripped || "index.html";
|
|
47
|
+
const fullPath = path.join(distDir, filePath);
|
|
48
|
+
const exists = yield* fs.exists(fullPath);
|
|
49
|
+
if (!exists) {
|
|
50
|
+
const indexPath = path.join(distDir, "index.html");
|
|
51
|
+
const content = yield* fs.readFile(indexPath);
|
|
52
|
+
return HttpServerResponse.html(content.toString());
|
|
53
|
+
}
|
|
54
|
+
const content = yield* fs.readFile(fullPath);
|
|
55
|
+
const ext = path.extname(fullPath);
|
|
56
|
+
const contentType = makeContentType(ext);
|
|
57
|
+
return HttpServerResponse.raw(content, {
|
|
58
|
+
headers: { "content-type": contentType }
|
|
59
|
+
});
|
|
60
|
+
}));
|
|
61
|
+
return HttpRouter.empty.pipe(HttpRouter.get("/_dashboard", spaHandler), HttpRouter.get("/_dashboard/*", spaHandler));
|
|
62
|
+
}
|
|
63
|
+
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()));
|
|
65
|
+
}
|
|
66
|
+
//# sourceMappingURL=router.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"router.js","sourceRoot":"","sources":["../../src/router.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"schema-token.d.ts","sourceRoot":"","sources":["../../src/schema-token.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,aAAa,EAAE,MAAM,oBAAoB,CAAA;AAClD,OAAO,EAAU,KAAK,EAAE,MAAM,QAAQ,CAAA;AAItC,eAAO,MAAM,eAAe,0CAO3B,CAAA;AAED,eAAO,MAAM,cAAc,cAAqB,CAAA"}
|
|
@@ -0,0 +1,11 @@
|
|
|
1
|
+
import { CryptoService } from "@gettersethya/mira";
|
|
2
|
+
import { Effect, Layer } from "effect";
|
|
3
|
+
let _schemaToken = "";
|
|
4
|
+
export const SchemaTokenLive = Layer.effectDiscard(Effect.gen(function* () {
|
|
5
|
+
const crypto = yield* CryptoService;
|
|
6
|
+
const bytes = yield* crypto.randomBytes(32);
|
|
7
|
+
const token = Buffer.from(bytes).toString("hex");
|
|
8
|
+
_schemaToken = token;
|
|
9
|
+
}));
|
|
10
|
+
export const getSchemaToken = () => _schemaToken;
|
|
11
|
+
//# sourceMappingURL=schema-token.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"schema-token.js","sourceRoot":"","sources":["../../src/schema-token.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,aAAa,EAAE,MAAM,oBAAoB,CAAA;AAClD,OAAO,EAAE,MAAM,EAAE,KAAK,EAAE,MAAM,QAAQ,CAAA;AAEtC,IAAI,YAAY,GAAG,EAAE,CAAA;AAErB,MAAM,CAAC,MAAM,eAAe,GAAG,KAAK,CAAC,aAAa,CAChD,MAAM,CAAC,GAAG,CAAC,QAAQ,CAAC;IAClB,MAAM,MAAM,GAAG,KAAK,CAAC,CAAC,aAAa,CAAA;IACnC,MAAM,KAAK,GAAG,KAAK,CAAC,CAAC,MAAM,CAAC,WAAW,CAAC,EAAE,CAAC,CAAA;IAC3C,MAAM,KAAK,GAAG,MAAM,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC,QAAQ,CAAC,KAAK,CAAC,CAAA;IAChD,YAAY,GAAG,KAAK,CAAA;AACtB,CAAC,CAAC,CACH,CAAA;AAED,MAAM,CAAC,MAAM,cAAc,GAAG,GAAG,EAAE,CAAC,YAAY,CAAA"}
|
|
@@ -0,0 +1,6 @@
|
|
|
1
|
+
import type { AnyCollectionDef } from "@gettersethya/mira-client";
|
|
2
|
+
export declare const SuperAdminCollection: AnyCollectionDef;
|
|
3
|
+
export declare function getRegisterToken(): string;
|
|
4
|
+
export declare function setRegisterToken(token: string): void;
|
|
5
|
+
export declare function generateRegisterToken(): string;
|
|
6
|
+
//# sourceMappingURL=superadmin.d.ts.map
|
|
@@ -0,0 +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"}
|
|
@@ -0,0 +1,21 @@
|
|
|
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("")),
|
|
5
|
+
create: R.public(),
|
|
6
|
+
update: R.field("email").eq(R.literal("")),
|
|
7
|
+
delete: R.field("email").eq(R.literal(""))
|
|
8
|
+
}));
|
|
9
|
+
let _registerToken = "";
|
|
10
|
+
export function getRegisterToken() {
|
|
11
|
+
return _registerToken;
|
|
12
|
+
}
|
|
13
|
+
export function setRegisterToken(token) {
|
|
14
|
+
_registerToken = token;
|
|
15
|
+
}
|
|
16
|
+
export function generateRegisterToken() {
|
|
17
|
+
const arr = new Uint8Array(32);
|
|
18
|
+
globalThis.crypto.getRandomValues(arr);
|
|
19
|
+
return Buffer.from(arr).toString("hex");
|
|
20
|
+
}
|
|
21
|
+
//# sourceMappingURL=superadmin.js.map
|
|
@@ -0,0 +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"}
|
|
@@ -0,0 +1,7 @@
|
|
|
1
|
+
import type { AnyCollectionDef } from "@gettersethya/mira-client";
|
|
2
|
+
import { CryptoService } from "@gettersethya/mira";
|
|
3
|
+
import { Layer } from "effect";
|
|
4
|
+
export declare const SuperAdminCollection: AnyCollectionDef;
|
|
5
|
+
export declare const RegisterTokenLive: Layer.Layer<never, never, CryptoService>;
|
|
6
|
+
export declare const getRegisterToken: () => string;
|
|
7
|
+
//# sourceMappingURL=superadmin.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"superadmin.d.ts","sourceRoot":"","sources":["../src/superadmin.ts"],"names":[],"mappings":"AACA,OAAO,KAAK,EAAE,gBAAgB,EAAE,MAAM,2BAA2B,CAAA;AACjE,OAAO,EAAE,aAAa,EAAE,MAAM,oBAAoB,CAAA;AAClD,OAAO,EAAU,KAAK,EAAE,MAAM,QAAQ,CAAA;AAEtC,eAAO,MAAM,oBAAoB,EAAE,gBAMhC,CAAA;AAIH,eAAO,MAAM,iBAAiB,0CAQ7B,CAAA;AAED,eAAO,MAAM,gBAAgB,cAAuB,CAAA"}
|
|
@@ -0,0 +1,20 @@
|
|
|
1
|
+
import { AuthCollection } from "@gettersethya/mira-client";
|
|
2
|
+
import { CryptoService } from "@gettersethya/mira";
|
|
3
|
+
import { Effect, Layer } from "effect";
|
|
4
|
+
export const SuperAdminCollection = AuthCollection.define("_superadmin", {}).rules((R) => ({
|
|
5
|
+
list: R.field("email").eq(R.literal("")),
|
|
6
|
+
view: R.field("email").eq(R.literal("")),
|
|
7
|
+
create: R.public(),
|
|
8
|
+
update: R.field("email").eq(R.literal("")),
|
|
9
|
+
delete: R.field("email").eq(R.literal("")),
|
|
10
|
+
}));
|
|
11
|
+
let _registerToken = "";
|
|
12
|
+
export const RegisterTokenLive = Layer.effectDiscard(Effect.gen(function* () {
|
|
13
|
+
const crypto = yield* CryptoService;
|
|
14
|
+
const bytes = yield* crypto.randomBytes(32);
|
|
15
|
+
const token = Buffer.from(bytes).toString("hex");
|
|
16
|
+
_registerToken = token;
|
|
17
|
+
yield* Effect.log(`[dashboard] No superadmin? Register at /_dashboard/register?token=${token}`);
|
|
18
|
+
}));
|
|
19
|
+
export const getRegisterToken = () => _registerToken;
|
|
20
|
+
//# sourceMappingURL=superadmin.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"superadmin.js","sourceRoot":"","sources":["../src/superadmin.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,cAAc,EAAE,MAAM,2BAA2B,CAAA;AAE1D,OAAO,EAAE,aAAa,EAAE,MAAM,oBAAoB,CAAA;AAClD,OAAO,EAAE,MAAM,EAAE,KAAK,EAAE,MAAM,QAAQ,CAAA;AAEtC,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,CAAC,MAAM,iBAAiB,GAAG,KAAK,CAAC,aAAa,CAClD,MAAM,CAAC,GAAG,CAAC,QAAQ,CAAC;IAClB,MAAM,MAAM,GAAG,KAAK,CAAC,CAAC,aAAa,CAAA;IACnC,MAAM,KAAK,GAAG,KAAK,CAAC,CAAC,MAAM,CAAC,WAAW,CAAC,EAAE,CAAC,CAAA;IAC3C,MAAM,KAAK,GAAG,MAAM,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC,QAAQ,CAAC,KAAK,CAAC,CAAA;IAChD,cAAc,GAAG,KAAK,CAAA;IACtB,KAAK,CAAC,CAAC,MAAM,CAAC,GAAG,CAAC,qEAAqE,KAAK,EAAE,CAAC,CAAA;AACjG,CAAC,CAAC,CACH,CAAA;AAED,MAAM,CAAC,MAAM,gBAAgB,GAAG,GAAG,EAAE,CAAC,cAAc,CAAA"}
|
package/package.json
ADDED
|
@@ -0,0 +1,45 @@
|
|
|
1
|
+
{
|
|
2
|
+
"name": "@gettersethya/mira-dashboard",
|
|
3
|
+
"version": "0.1.0-alpha.1",
|
|
4
|
+
"type": "module",
|
|
5
|
+
"description": "Admin dashboard plugin for Mira",
|
|
6
|
+
"author": "Getter Sethya",
|
|
7
|
+
"license": "MIT",
|
|
8
|
+
"files": [
|
|
9
|
+
"dist"
|
|
10
|
+
],
|
|
11
|
+
"exports": {
|
|
12
|
+
".": {
|
|
13
|
+
"types": "./dist/src/index.d.ts",
|
|
14
|
+
"default": "./dist/src/index.js"
|
|
15
|
+
}
|
|
16
|
+
},
|
|
17
|
+
"dependencies": {
|
|
18
|
+
"@effect/language-service": "^0.86.2",
|
|
19
|
+
"@effect/platform": "^0.96.1",
|
|
20
|
+
"@tanstack/svelte-table": "^8.21.3",
|
|
21
|
+
"@tanstack/table-core": "^8.21.3",
|
|
22
|
+
"jose": "^6.2.3",
|
|
23
|
+
"@gettersethya/mira": "0.1.0-alpha.9",
|
|
24
|
+
"@gettersethya/mira-client": "0.1.0-alpha.9"
|
|
25
|
+
},
|
|
26
|
+
"peerDependencies": {
|
|
27
|
+
"effect": ">=3.21"
|
|
28
|
+
},
|
|
29
|
+
"devDependencies": {
|
|
30
|
+
"@effect/vitest": "^0.29.0",
|
|
31
|
+
"@types/node": "^25.7.0",
|
|
32
|
+
"typescript": "^6.0.3",
|
|
33
|
+
"vitest": "^4.1.6"
|
|
34
|
+
},
|
|
35
|
+
"publishConfig": {
|
|
36
|
+
"access": "public"
|
|
37
|
+
},
|
|
38
|
+
"scripts": {
|
|
39
|
+
"build": "tsc",
|
|
40
|
+
"typecheck": "tsc --noEmit",
|
|
41
|
+
"test": "vitest run --passWithNoTests",
|
|
42
|
+
"build:ui": "cd ui && pnpm build",
|
|
43
|
+
"dev:ui": "cd ui && pnpm dev"
|
|
44
|
+
}
|
|
45
|
+
}
|