@arch-cadre/backup-module 0.0.1 → 1.0.2

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
package/dist/index.cjs CHANGED
@@ -5,10 +5,24 @@ Object.defineProperty(exports, "__esModule", {
5
5
  });
6
6
 
7
7
  var _server = require("@arch-cadre/core/server");
8
+ var _drizzleOrm = require("drizzle-orm");
8
9
  var _manifest = _interopRequireDefault(require("../manifest.json"));
9
10
  var _navigation = require("./navigation.cjs");
10
11
  var _routes = require("./routes.cjs");
11
12
  function _interopRequireDefault(e) { return e && e.__esModule ? e : { default: e }; }
13
+ const BACKUP_PERMISSIONS = [{
14
+ name: "backup:create",
15
+ description: "Allow creating system backups"
16
+ }, {
17
+ name: "backup:restore",
18
+ description: "Allow restoring system backups"
19
+ }, {
20
+ name: "backup:delete",
21
+ description: "Allow deleting system backups"
22
+ }, {
23
+ name: "backup:list",
24
+ description: "Allow listing system backups"
25
+ }];
12
26
  const backupModule = {
13
27
  manifest: _manifest.default,
14
28
  navigation: _navigation.navigation,
@@ -16,15 +30,36 @@ const backupModule = {
16
30
  private: _routes.privateRoutes
17
31
  },
18
32
  onEnable: async () => {
33
+ console.log("[Backup] enabling and registering permissions...");
34
+ try {
35
+ for (const perm of BACKUP_PERMISSIONS) {
36
+ await (0, _server.createPermission)(perm.name, perm.description);
37
+ }
38
+ const roles = await (0, _server.getRoles)();
39
+ const adminRole = roles.find(r => r.name === "admin");
40
+ if (adminRole) {
41
+ const backupPermNames = BACKUP_PERMISSIONS.map(p => p.name);
42
+ const backupPerms = await _server.db.select().from(_server.permissionsTable).where((0, _drizzleOrm.inArray)(_server.permissionsTable.name, backupPermNames));
43
+ for (const p of backupPerms) {
44
+ await (0, _server.assignPermissionToRole)(adminRole.id, p.id);
45
+ }
46
+ console.log("[Backup] Permissions assigned to admin role.");
47
+ }
48
+ } catch (error) {
49
+ console.error("[Backup] Error during permission registration:", error);
50
+ }
19
51
  console.log("[Backup] Module enabled.");
20
52
  },
21
53
  onDisable: async () => {
54
+ console.log("[Backup] onDisable: Cleaning up tables and permissions...");
22
55
  try {
23
- console.log("[Backup] Cleaning up database tables...");
24
- await _server.db.execute(`DROP TABLE IF EXISTS backups;`);
56
+ const backupPermNames = BACKUP_PERMISSIONS.map(p => p.name);
57
+ await _server.db.delete(_server.permissionsTable).where((0, _drizzleOrm.inArray)(_server.permissionsTable.name, backupPermNames));
58
+ console.log("[Backup] Permissions and mappings removed.");
59
+ await _server.db.execute(_drizzleOrm.sql.raw(`DROP TABLE IF EXISTS backups CASCADE`));
25
60
  console.log("[Backup] Database tables removed.");
26
61
  } catch (error) {
27
- console.error("[Backup] Failed to remove tables:", error);
62
+ console.error("[Backup] Failed to remove tables or permissions:", error);
28
63
  }
29
64
  console.log("[Backup] Module disabled.");
30
65
  },
package/dist/index.mjs CHANGED
@@ -1,7 +1,20 @@
1
- import { db } from "@arch-cadre/core/server";
1
+ import {
2
+ assignPermissionToRole,
3
+ createPermission,
4
+ db,
5
+ getRoles,
6
+ permissionsTable
7
+ } from "@arch-cadre/core/server";
8
+ import { inArray, sql } from "drizzle-orm";
2
9
  import manifest from "../manifest.json";
3
10
  import { navigation } from "./navigation.mjs";
4
11
  import { privateRoutes } from "./routes.mjs";
12
+ const BACKUP_PERMISSIONS = [
13
+ { name: "backup:create", description: "Allow creating system backups" },
14
+ { name: "backup:restore", description: "Allow restoring system backups" },
15
+ { name: "backup:delete", description: "Allow deleting system backups" },
16
+ { name: "backup:list", description: "Allow listing system backups" }
17
+ ];
5
18
  const backupModule = {
6
19
  manifest,
7
20
  navigation,
@@ -9,15 +22,36 @@ const backupModule = {
9
22
  private: privateRoutes
10
23
  },
11
24
  onEnable: async () => {
25
+ console.log("[Backup] enabling and registering permissions...");
26
+ try {
27
+ for (const perm of BACKUP_PERMISSIONS) {
28
+ await createPermission(perm.name, perm.description);
29
+ }
30
+ const roles = await getRoles();
31
+ const adminRole = roles.find((r) => r.name === "admin");
32
+ if (adminRole) {
33
+ const backupPermNames = BACKUP_PERMISSIONS.map((p) => p.name);
34
+ const backupPerms = await db.select().from(permissionsTable).where(inArray(permissionsTable.name, backupPermNames));
35
+ for (const p of backupPerms) {
36
+ await assignPermissionToRole(adminRole.id, p.id);
37
+ }
38
+ console.log("[Backup] Permissions assigned to admin role.");
39
+ }
40
+ } catch (error) {
41
+ console.error("[Backup] Error during permission registration:", error);
42
+ }
12
43
  console.log("[Backup] Module enabled.");
13
44
  },
14
45
  onDisable: async () => {
46
+ console.log("[Backup] onDisable: Cleaning up tables and permissions...");
15
47
  try {
16
- console.log("[Backup] Cleaning up database tables...");
17
- await db.execute(`DROP TABLE IF EXISTS backups;`);
48
+ const backupPermNames = BACKUP_PERMISSIONS.map((p) => p.name);
49
+ await db.delete(permissionsTable).where(inArray(permissionsTable.name, backupPermNames));
50
+ console.log("[Backup] Permissions and mappings removed.");
51
+ await db.execute(sql.raw(`DROP TABLE IF EXISTS backups CASCADE`));
18
52
  console.log("[Backup] Database tables removed.");
19
53
  } catch (error) {
20
- console.error("[Backup] Failed to remove tables:", error);
54
+ console.error("[Backup] Failed to remove tables or permissions:", error);
21
55
  }
22
56
  console.log("[Backup] Module disabled.");
23
57
  },
@@ -9,7 +9,9 @@ const navigation = exports.navigation = {
9
9
  System: [{
10
10
  title: "Backups",
11
11
  url: "/backups",
12
- icon: "solar:database-bold-duotone"
12
+ icon: "solar:database-bold-duotone",
13
+ roles: ["admin"],
14
+ permissions: ["backup:list"]
13
15
  }]
14
16
  }
15
17
  };
@@ -4,7 +4,9 @@ export const navigation = {
4
4
  {
5
5
  title: "Backups",
6
6
  url: "/backups",
7
- icon: "solar:database-bold-duotone"
7
+ icon: "solar:database-bold-duotone",
8
+ roles: ["admin"],
9
+ permissions: ["backup:list"]
8
10
  }
9
11
  ]
10
12
  }
package/dist/routes.cjs CHANGED
@@ -9,5 +9,8 @@ function _interopRequireDefault(e) { return e && e.__esModule ? e : { default: e
9
9
  const publicRoutes = exports.publicRoutes = [];
10
10
  const privateRoutes = exports.privateRoutes = [{
11
11
  path: "/backups",
12
- component: _backupList.default
12
+ component: _backupList.default,
13
+ auth: true,
14
+ roles: ["admin"],
15
+ permissions: ["backup:list"]
13
16
  }];
package/dist/routes.mjs CHANGED
@@ -3,6 +3,9 @@ export const publicRoutes = [];
3
3
  export const privateRoutes = [
4
4
  {
5
5
  path: "/backups",
6
- component: BackupListPage
6
+ component: BackupListPage,
7
+ auth: true,
8
+ roles: ["admin"],
9
+ permissions: ["backup:list"]
7
10
  }
8
11
  ];
package/dist/schema.d.ts CHANGED
@@ -2,7 +2,7 @@ export declare const backupTable: import("drizzle-orm/pg-core").PgTableWithColum
2
2
  name: "backups";
3
3
  schema: undefined;
4
4
  columns: {
5
- id: import("drizzle-orm/pg-core").PgBuildColumn<"backups", import("drizzle-orm/pg-core").SetIsPrimaryKey<import("drizzle-orm/pg-core").SetNotNull<import("drizzle-orm/pg-core").SetHasRuntimeDefault<import("drizzle-orm/pg-core").PgTextBuilder<[string, ...string[]]>>>>, {
5
+ id: import("drizzle-orm/pg-core").PgColumn<{
6
6
  name: string;
7
7
  tableName: "backups";
8
8
  dataType: "string";
@@ -10,14 +10,15 @@ export declare const backupTable: import("drizzle-orm/pg-core").PgTableWithColum
10
10
  driverParam: string;
11
11
  notNull: true;
12
12
  hasDefault: true;
13
- isPrimaryKey: false;
13
+ isPrimaryKey: true;
14
14
  isAutoincrement: false;
15
- hasRuntimeDefault: false;
16
- enumValues: undefined;
15
+ hasRuntimeDefault: true;
16
+ enumValues: [string, ...string[]];
17
+ baseColumn: never;
17
18
  identity: undefined;
18
19
  generated: undefined;
19
- }>;
20
- filename: import("drizzle-orm/pg-core").PgBuildColumn<"backups", import("drizzle-orm/pg-core").SetNotNull<import("drizzle-orm/pg-core").PgTextBuilder<[string, ...string[]]>>, {
20
+ }, {}>;
21
+ filename: import("drizzle-orm/pg-core").PgColumn<{
21
22
  name: string;
22
23
  tableName: "backups";
23
24
  dataType: "string";
@@ -28,11 +29,12 @@ export declare const backupTable: import("drizzle-orm/pg-core").PgTableWithColum
28
29
  isPrimaryKey: false;
29
30
  isAutoincrement: false;
30
31
  hasRuntimeDefault: false;
31
- enumValues: undefined;
32
+ enumValues: [string, ...string[]];
33
+ baseColumn: never;
32
34
  identity: undefined;
33
35
  generated: undefined;
34
- }>;
35
- size: import("drizzle-orm/pg-core").PgBuildColumn<"backups", import("drizzle-orm/pg-core").SetNotNull<import("drizzle-orm/pg-core").PgIntegerBuilder>, {
36
+ }, {}>;
37
+ size: import("drizzle-orm/pg-core").PgColumn<{
36
38
  name: string;
37
39
  tableName: "backups";
38
40
  dataType: "number int32";
@@ -44,10 +46,11 @@ export declare const backupTable: import("drizzle-orm/pg-core").PgTableWithColum
44
46
  isAutoincrement: false;
45
47
  hasRuntimeDefault: false;
46
48
  enumValues: undefined;
49
+ baseColumn: never;
47
50
  identity: undefined;
48
51
  generated: undefined;
49
- }>;
50
- createdAt: import("drizzle-orm/pg-core").PgBuildColumn<"backups", import("drizzle-orm/pg-core").SetHasDefault<import("drizzle-orm/pg-core").SetNotNull<import("drizzle-orm/pg-core").PgTimestampBuilder>>, {
52
+ }, {}>;
53
+ createdAt: import("drizzle-orm/pg-core").PgColumn<{
51
54
  name: string;
52
55
  tableName: "backups";
53
56
  dataType: "object date";
@@ -59,10 +62,11 @@ export declare const backupTable: import("drizzle-orm/pg-core").PgTableWithColum
59
62
  isAutoincrement: false;
60
63
  hasRuntimeDefault: false;
61
64
  enumValues: undefined;
65
+ baseColumn: never;
62
66
  identity: undefined;
63
67
  generated: undefined;
64
- }>;
65
- status: import("drizzle-orm/pg-core").PgBuildColumn<"backups", import("drizzle-orm/pg-core").SetNotNull<import("drizzle-orm/pg-core").PgTextBuilder<[string, ...string[]]>>, {
68
+ }, {}>;
69
+ status: import("drizzle-orm/pg-core").PgColumn<{
66
70
  name: string;
67
71
  tableName: "backups";
68
72
  dataType: "string";
@@ -73,10 +77,11 @@ export declare const backupTable: import("drizzle-orm/pg-core").PgTableWithColum
73
77
  isPrimaryKey: false;
74
78
  isAutoincrement: false;
75
79
  hasRuntimeDefault: false;
76
- enumValues: undefined;
80
+ enumValues: [string, ...string[]];
81
+ baseColumn: never;
77
82
  identity: undefined;
78
83
  generated: undefined;
79
- }>;
84
+ }, {}>;
80
85
  };
81
86
  dialect: "pg";
82
87
  }>;
@@ -7,9 +7,12 @@ Object.defineProperty(exports, "__esModule", {
7
7
  exports.CreateBackupButton = CreateBackupButton;
8
8
  exports.DeleteBackupButton = DeleteBackupButton;
9
9
  exports.RestoreBackupButton = RestoreBackupButton;
10
+ var _react = _interopRequireWildcard(require("react"));
11
+ var React = _react;
10
12
  var _ui = require("@arch-cadre/ui");
11
- var _react = require("react");
12
13
  var _backupActions = require("./backup-actions.cjs");
14
+ function _getRequireWildcardCache(e) { if ("function" != typeof WeakMap) return null; var r = new WeakMap(), t = new WeakMap(); return (_getRequireWildcardCache = function (e) { return e ? t : r; })(e); }
15
+ function _interopRequireWildcard(e, r) { if (!r && e && e.__esModule) return e; if (null === e || "object" != typeof e && "function" != typeof e) return { default: e }; var t = _getRequireWildcardCache(r); if (t && t.has(e)) return t.get(e); var n = { __proto__: null }, a = Object.defineProperty && Object.getOwnPropertyDescriptor; for (var u in e) if ("default" !== u && {}.hasOwnProperty.call(e, u)) { var i = a ? Object.getOwnPropertyDescriptor(e, u) : null; i && (i.get || i.set) ? Object.defineProperty(n, u, i) : n[u] = e[u]; } return n.default = e, t && t.set(e, n), n; }
13
16
  function CreateBackupButton() {
14
17
  const [pending, setPending] = (0, _react.useState)(false);
15
18
  const handleCreate = async () => {
@@ -1,7 +1,8 @@
1
- export declare function CreateBackupButton(): import("react").JSX.Element;
1
+ import * as React from "react";
2
+ export declare function CreateBackupButton(): React.JSX.Element;
2
3
  export declare function RestoreBackupButton({ id }: {
3
4
  id: string;
4
- }): import("react").JSX.Element;
5
+ }): React.JSX.Element;
5
6
  export declare function DeleteBackupButton({ id }: {
6
7
  id: string;
7
- }): import("react").JSX.Element;
8
+ }): React.JSX.Element;
@@ -1,4 +1,5 @@
1
1
  "use client";
2
+ import * as React from "react";
2
3
  import { Button, Icon, toast } from "@arch-cadre/ui";
3
4
  import { useState } from "react";
4
5
  import {
@@ -4,12 +4,15 @@ Object.defineProperty(exports, "__esModule", {
4
4
  value: true
5
5
  });
6
6
  module.exports = BackupListPage;
7
+ var React = _interopRequireWildcard(require("react"));
7
8
  var _card = require("@arch-cadre/ui/components/card");
8
9
  var _table = require("@arch-cadre/ui/components/table");
9
10
  var _dateFns = require("date-fns");
10
11
  var _locale = require("date-fns/locale");
11
12
  var _actions = require("../../actions.cjs");
12
13
  var _backupClient = require("../components/backup-client.cjs");
14
+ function _getRequireWildcardCache(e) { if ("function" != typeof WeakMap) return null; var r = new WeakMap(), t = new WeakMap(); return (_getRequireWildcardCache = function (e) { return e ? t : r; })(e); }
15
+ function _interopRequireWildcard(e, r) { if (!r && e && e.__esModule) return e; if (null === e || "object" != typeof e && "function" != typeof e) return { default: e }; var t = _getRequireWildcardCache(r); if (t && t.has(e)) return t.get(e); var n = { __proto__: null }, a = Object.defineProperty && Object.getOwnPropertyDescriptor; for (var u in e) if ("default" !== u && {}.hasOwnProperty.call(e, u)) { var i = a ? Object.getOwnPropertyDescriptor(e, u) : null; i && (i.get || i.set) ? Object.defineProperty(n, u, i) : n[u] = e[u]; } return n.default = e, t && t.set(e, n), n; }
13
16
  function formatBytes(bytes, decimals = 2) {
14
17
  if (bytes === 0) return "0 Bytes";
15
18
  const k = 1024;
@@ -1 +1,2 @@
1
- export default function BackupListPage(): Promise<import("react").JSX.Element>;
1
+ import * as React from "react";
2
+ export default function BackupListPage(): Promise<React.JSX.Element>;
@@ -1,3 +1,4 @@
1
+ import * as React from "react";
1
2
  import {
2
3
  Card,
3
4
  CardContent,
@@ -0,0 +1,11 @@
1
+ {
2
+ "Settings saved successfully": "Ustawienia zostały zapisane pomyślnie",
3
+ "Failed to save settings": "Nie udało się zapisać ustawień",
4
+ "Loading Sample Settings...": "Ładowanie przykładowych ustawień...",
5
+ "Sample Settings": "Przykładowe ustawienia",
6
+ "Configure your Sample Configuration.": "Skonfiguruj swoją przykładową konfigurację.",
7
+ "Default Var": "Domyślna zmienna",
8
+ "Save Configuration": "Zapisz konfigurację",
9
+ "General": "Ogólny",
10
+ "Sample Configuration": "Przykładowa konfiguracja"
11
+ }
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@arch-cadre/backup-module",
3
- "version": "0.0.1",
3
+ "version": "1.0.2",
4
4
  "description": "Backup module for Kryo framework",
5
5
  "type": "module",
6
6
  "exports": {
@@ -25,11 +25,11 @@
25
25
  "build": "unbuild"
26
26
  },
27
27
  "dependencies": {
28
- "@arch-cadre/modules": "^0.0.15",
29
- "@arch-cadre/ui": "^0.0.15",
28
+ "@arch-cadre/modules": "^0.0.17",
29
+ "@arch-cadre/ui": "^0.0.17",
30
30
  "@hookform/resolvers": "^3.10.0",
31
31
  "date-fns": "^4.1.0",
32
- "drizzle-orm": "1.0.0-beta.15-859cf75",
32
+ "drizzle-orm": "1.0.0-beta.6-4414a19",
33
33
  "lucide-react": "^0.475.0",
34
34
  "pg": "^8.18.0",
35
35
  "react-hook-form": "^7.54.2",
@@ -37,7 +37,7 @@
37
37
  "zod": "^3.24.1"
38
38
  },
39
39
  "devDependencies": {
40
- "@arch-cadre/core": "^0.0.15",
40
+ "@arch-cadre/core": "^0.0.17",
41
41
  "@types/pg": "^8.16.0",
42
42
  "@types/react": "^19",
43
43
  "next": "16.1.1",
@@ -46,9 +46,9 @@
46
46
  "unbuild": "^3.6.1"
47
47
  },
48
48
  "peerDependencies": {
49
- "@arch-cadre/core": "^0.0.15",
50
- "@arch-cadre/intl": "^0.0.15",
51
- "@arch-cadre/ui": "^0.0.15",
49
+ "@arch-cadre/core": "^0.0.17",
50
+ "@arch-cadre/intl": "^0.0.17",
51
+ "@arch-cadre/ui": "^0.0.17",
52
52
  "next": ">=13.0.0",
53
53
  "react": "^19.0.0"
54
54
  },