adminforth 2.4.0-next.27 → 2.4.0-next.270

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.
Files changed (169) hide show
  1. package/commands/callTsProxy.js +14 -4
  2. package/commands/cli.js +2 -1
  3. package/commands/createApp/templates/api.ts.hbs +10 -0
  4. package/commands/createApp/templates/custom/tsconfig.json.hbs +2 -3
  5. package/commands/createApp/templates/index.ts.hbs +12 -1
  6. package/commands/createApp/utils.js +6 -1
  7. package/commands/createCustomComponent/configLoader.js +17 -4
  8. package/commands/createCustomComponent/main.js +1 -0
  9. package/commands/createCustomComponent/templates/customCrud/beforeActionButtons.vue.hbs +38 -0
  10. package/commands/createPlugin/templates/custom/tsconfig.json.hbs +2 -5
  11. package/commands/createPlugin/templates/package.json.hbs +1 -1
  12. package/commands/generateModels.js +30 -22
  13. package/dist/auth.d.ts +9 -1
  14. package/dist/auth.d.ts.map +1 -1
  15. package/dist/auth.js +21 -2
  16. package/dist/auth.js.map +1 -1
  17. package/dist/dataConnectors/baseConnector.d.ts.map +1 -1
  18. package/dist/dataConnectors/baseConnector.js +46 -15
  19. package/dist/dataConnectors/baseConnector.js.map +1 -1
  20. package/dist/dataConnectors/clickhouse.d.ts.map +1 -1
  21. package/dist/dataConnectors/clickhouse.js +15 -0
  22. package/dist/dataConnectors/clickhouse.js.map +1 -1
  23. package/dist/dataConnectors/mongo.d.ts.map +1 -1
  24. package/dist/dataConnectors/mongo.js +50 -15
  25. package/dist/dataConnectors/mongo.js.map +1 -1
  26. package/dist/dataConnectors/mysql.d.ts.map +1 -1
  27. package/dist/dataConnectors/mysql.js +11 -0
  28. package/dist/dataConnectors/mysql.js.map +1 -1
  29. package/dist/dataConnectors/postgres.d.ts.map +1 -1
  30. package/dist/dataConnectors/postgres.js +43 -14
  31. package/dist/dataConnectors/postgres.js.map +1 -1
  32. package/dist/dataConnectors/sqlite.d.ts.map +1 -1
  33. package/dist/dataConnectors/sqlite.js +11 -0
  34. package/dist/dataConnectors/sqlite.js.map +1 -1
  35. package/dist/index.d.ts +2 -1
  36. package/dist/index.d.ts.map +1 -1
  37. package/dist/index.js +23 -9
  38. package/dist/index.js.map +1 -1
  39. package/dist/modules/codeInjector.d.ts +2 -0
  40. package/dist/modules/codeInjector.d.ts.map +1 -1
  41. package/dist/modules/codeInjector.js +50 -6
  42. package/dist/modules/codeInjector.js.map +1 -1
  43. package/dist/modules/configValidator.d.ts +6 -0
  44. package/dist/modules/configValidator.d.ts.map +1 -1
  45. package/dist/modules/configValidator.js +184 -19
  46. package/dist/modules/configValidator.js.map +1 -1
  47. package/dist/modules/restApi.d.ts +1 -1
  48. package/dist/modules/restApi.d.ts.map +1 -1
  49. package/dist/modules/restApi.js +170 -29
  50. package/dist/modules/restApi.js.map +1 -1
  51. package/dist/modules/styles.d.ts +499 -13
  52. package/dist/modules/styles.d.ts.map +1 -1
  53. package/dist/modules/styles.js +555 -31
  54. package/dist/modules/styles.js.map +1 -1
  55. package/dist/modules/utils.d.ts +7 -15
  56. package/dist/modules/utils.d.ts.map +1 -1
  57. package/dist/modules/utils.js +45 -68
  58. package/dist/modules/utils.js.map +1 -1
  59. package/dist/servers/express.d.ts +5 -0
  60. package/dist/servers/express.d.ts.map +1 -1
  61. package/dist/servers/express.js +40 -1
  62. package/dist/servers/express.js.map +1 -1
  63. package/dist/spa/index.html +1 -1
  64. package/dist/spa/package-lock.json +5 -4
  65. package/dist/spa/package.json +1 -1
  66. package/dist/spa/src/App.vue +58 -173
  67. package/dist/spa/src/adminforth.ts +42 -18
  68. package/dist/spa/src/afcl/BarChart.vue +2 -2
  69. package/dist/spa/src/afcl/Button.vue +6 -6
  70. package/dist/spa/src/afcl/ButtonGroup.vue +91 -0
  71. package/dist/spa/src/afcl/Card.vue +25 -0
  72. package/dist/spa/src/afcl/Checkbox.vue +21 -13
  73. package/dist/spa/src/afcl/CountryFlag.vue +4 -1
  74. package/dist/spa/src/{components/CustomDatePicker.vue → afcl/DatePicker.vue} +95 -9
  75. package/dist/spa/src/afcl/Dialog.vue +47 -27
  76. package/dist/spa/src/afcl/Dropzone.vue +12 -12
  77. package/dist/spa/src/afcl/Input.vue +5 -5
  78. package/dist/spa/src/afcl/JsonViewer.vue +25 -0
  79. package/dist/spa/src/afcl/LinkButton.vue +3 -3
  80. package/dist/spa/src/afcl/PieChart.vue +5 -5
  81. package/dist/spa/src/afcl/ProgressBar.vue +7 -7
  82. package/dist/spa/src/afcl/Select.vue +68 -34
  83. package/dist/spa/src/afcl/Skeleton.vue +6 -6
  84. package/dist/spa/src/afcl/Table.vue +213 -74
  85. package/dist/spa/src/afcl/Textarea.vue +31 -0
  86. package/dist/spa/src/afcl/Toggle.vue +32 -0
  87. package/dist/spa/src/afcl/Tooltip.vue +28 -18
  88. package/dist/spa/src/afcl/VerticalTabs.vue +16 -7
  89. package/dist/spa/src/afcl/index.ts +6 -3
  90. package/dist/spa/src/components/AcceptModal.vue +48 -14
  91. package/dist/spa/src/components/Breadcrumbs.vue +5 -5
  92. package/dist/spa/src/components/ColumnValueInput.vue +38 -18
  93. package/dist/spa/src/components/ColumnValueInputWrapper.vue +4 -3
  94. package/dist/spa/src/components/CustomDateRangePicker.vue +9 -8
  95. package/dist/spa/src/components/CustomRangePicker.vue +37 -8
  96. package/dist/spa/src/components/ErrorMessage.vue +21 -0
  97. package/dist/spa/src/components/Filters.vue +85 -39
  98. package/dist/spa/src/components/GroupsTable.vue +9 -8
  99. package/dist/spa/src/components/MenuLink.vue +90 -23
  100. package/dist/spa/src/components/ResourceForm.vue +94 -51
  101. package/dist/spa/src/components/ResourceListTable.vue +90 -80
  102. package/dist/spa/src/components/ResourceListTableVirtual.vue +86 -76
  103. package/dist/spa/src/components/ShowTable.vue +21 -15
  104. package/dist/spa/src/components/Sidebar.vue +470 -0
  105. package/dist/spa/src/components/SingleSkeletLoader.vue +6 -6
  106. package/dist/spa/src/components/SkeleteLoader.vue +3 -3
  107. package/dist/spa/src/components/ThreeDotsMenu.vue +73 -14
  108. package/dist/spa/src/components/Toast.vue +37 -26
  109. package/dist/spa/src/components/UserMenuSettingsButton.vue +69 -0
  110. package/dist/spa/src/components/ValueRenderer.vue +43 -16
  111. package/dist/spa/src/controls/BoolToggle.vue +34 -0
  112. package/dist/spa/src/i18n.ts +1 -1
  113. package/dist/spa/src/renderers/CompactField.vue +1 -1
  114. package/dist/spa/src/renderers/CompactUUID.vue +1 -1
  115. package/dist/spa/src/router/index.ts +8 -0
  116. package/dist/spa/src/shims-vue.d.ts +5 -0
  117. package/dist/spa/src/spa_types/core.ts +13 -1
  118. package/dist/spa/src/stores/core.ts +13 -1
  119. package/dist/spa/src/stores/filters.ts +29 -2
  120. package/dist/spa/src/stores/modal.ts +6 -1
  121. package/dist/spa/src/stores/toast.ts +22 -3
  122. package/dist/spa/src/types/Back.ts +159 -22
  123. package/dist/spa/src/types/Common.ts +81 -32
  124. package/dist/spa/src/types/FrontendAPI.ts +31 -5
  125. package/dist/spa/src/types/adapters/CaptchaAdapter.ts +34 -0
  126. package/dist/spa/src/types/adapters/EmailAdapter.ts +2 -2
  127. package/dist/spa/src/types/adapters/ImageVisionAdapter.ts +30 -0
  128. package/dist/spa/src/types/adapters/KeyValueAdapter.ts +16 -0
  129. package/dist/spa/src/types/adapters/index.ts +8 -0
  130. package/dist/spa/src/utils.ts +279 -9
  131. package/dist/spa/src/views/CreateView.vue +18 -19
  132. package/dist/spa/src/views/EditView.vue +25 -19
  133. package/dist/spa/src/views/ListView.vue +144 -87
  134. package/dist/spa/src/views/LoginView.vue +26 -35
  135. package/dist/spa/src/views/ResourceParent.vue +2 -2
  136. package/dist/spa/src/views/SettingsView.vue +121 -0
  137. package/dist/spa/src/views/ShowView.vue +59 -39
  138. package/dist/spa/src/websocket.ts +6 -1
  139. package/dist/spa/tsconfig.app.json +1 -1
  140. package/dist/spa/vite.config.ts +45 -2
  141. package/dist/types/Back.d.ts +135 -14
  142. package/dist/types/Back.d.ts.map +1 -1
  143. package/dist/types/Back.js +15 -0
  144. package/dist/types/Back.js.map +1 -1
  145. package/dist/types/Common.d.ts +96 -29
  146. package/dist/types/Common.d.ts.map +1 -1
  147. package/dist/types/Common.js.map +1 -1
  148. package/dist/types/FrontendAPI.d.ts +31 -3
  149. package/dist/types/FrontendAPI.d.ts.map +1 -1
  150. package/dist/types/FrontendAPI.js.map +1 -1
  151. package/dist/types/adapters/CaptchaAdapter.d.ts +30 -0
  152. package/dist/types/adapters/CaptchaAdapter.d.ts.map +1 -0
  153. package/dist/types/adapters/CaptchaAdapter.js +5 -0
  154. package/dist/types/adapters/CaptchaAdapter.js.map +1 -0
  155. package/dist/types/adapters/EmailAdapter.d.ts +1 -1
  156. package/dist/types/adapters/ImageVisionAdapter.d.ts +25 -0
  157. package/dist/types/adapters/ImageVisionAdapter.d.ts.map +1 -0
  158. package/dist/types/adapters/ImageVisionAdapter.js +2 -0
  159. package/dist/types/adapters/ImageVisionAdapter.js.map +1 -0
  160. package/dist/types/adapters/KeyValueAdapter.d.ts +10 -0
  161. package/dist/types/adapters/KeyValueAdapter.d.ts.map +1 -0
  162. package/dist/types/adapters/KeyValueAdapter.js +2 -0
  163. package/dist/types/adapters/KeyValueAdapter.js.map +1 -0
  164. package/dist/types/adapters/index.d.ts +9 -0
  165. package/dist/types/adapters/index.d.ts.map +1 -0
  166. package/dist/types/adapters/index.js +2 -0
  167. package/dist/types/adapters/index.js.map +1 -0
  168. package/package.json +4 -2
  169. package/dist/spa/src/types/adapters/index.js +0 -5
@@ -3,18 +3,28 @@ import { spawn } from "child_process";
3
3
  import path from "path";
4
4
  import fs from "fs";
5
5
  import chalk from "chalk";
6
+ import dotenv from "dotenv";
6
7
 
7
8
  const currentFilePath = import.meta.url;
8
9
  const currentFileFolder = path.dirname(currentFilePath).replace("file:", "");
9
10
 
10
11
  export function callTsProxy(tsCode, silent=false) {
11
12
 
13
+ const currentDirectory = process.cwd();
14
+ const envPath = path.resolve(currentDirectory, ".env");
15
+ const envLocalPath = path.resolve(currentDirectory, ".env.local");
16
+ if (fs.existsSync(envLocalPath)) {
17
+ dotenv.config({ path: envLocalPath, override: true });
18
+ }
19
+ if (fs.existsSync(envPath)) {
20
+ dotenv.config({ path: envPath, override: true });
21
+ }
22
+
12
23
  process.env.HEAVY_DEBUG && console.log("🌐 Calling tsproxy with code:", path.join(currentFileFolder, "proxy.ts"));
13
24
  return new Promise((resolve, reject) => {
14
- const child = spawn("tsx", [
15
- path.join(currentFileFolder, "proxy.ts")
16
- ]);
17
-
25
+ const child = spawn("tsx", [path.join(currentFileFolder, "proxy.ts")], {
26
+ env: process.env,
27
+ });
18
28
  let stdout = "";
19
29
  let stderr = "";
20
30
 
package/commands/cli.js CHANGED
@@ -12,6 +12,7 @@ import createResource from "./createResource/main.js";
12
12
  import chalk from "chalk";
13
13
  import path from "path";
14
14
  import fs from "fs";
15
+ import { fileURLToPath } from 'url';
15
16
 
16
17
  function showHelp() {
17
18
  console.log(
@@ -26,7 +27,7 @@ function showHelp() {
26
27
  }
27
28
 
28
29
  export function currentFileDir(importMetaUrl) {
29
- const filePath = importMetaUrl.replace("file://", "");
30
+ const filePath = fileURLToPath(importMetaUrl);
30
31
  const fileDir = path.dirname(filePath);
31
32
  return fileDir;
32
33
  }
@@ -0,0 +1,10 @@
1
+ import { Express } from "express";
2
+ import { IAdminForth } from "adminforth";
3
+
4
+ export function initApi(app: Express, admin: IAdminForth) {
5
+ app.get(`${admin.config.baseUrl}/api/hello/`,
6
+ (req, res) => {
7
+ res.json({ message: "Hello from AdminForth API!" });
8
+ }
9
+ );
10
+ }
@@ -2,9 +2,8 @@
2
2
  "compilerOptions": {
3
3
  "baseUrl": ".",
4
4
  "paths": {
5
- "@/": "../node_modules/adminforth/dist/spa/src/",
6
- "": "../node_modules/adminforth/dist/spa/node_modules/",
7
- "@@/*": "."
5
+ "@/*": ["../node_modules/adminforth/dist/spa/src/*"],
6
+ "@@/*": ["./*"]
8
7
  }
9
8
  }
10
9
  }
@@ -3,6 +3,8 @@ import AdminForth from 'adminforth';
3
3
  import usersResource from "./resources/adminuser.js";
4
4
  import { fileURLToPath } from 'url';
5
5
  import path from 'path';
6
+ import { Filters } from 'adminforth';
7
+ import { initApi } from './api.js';
6
8
 
7
9
  const ADMIN_BASE_URL = '';
8
10
 
@@ -15,6 +17,12 @@ export const admin = new AdminForth({
15
17
  rememberMeDays: 30,
16
18
  loginBackgroundImage: 'https://images.unsplash.com/photo-1534239697798-120952b76f2b?q=80&w=3389&auto=format&fit=crop&ixlib=rb-4.0.3&ixid=M3wxMjA3fDB8MHxwaG90by1wYWdlfHx8fGVufDB8fHx8fA%3D%3D',
17
19
  loginBackgroundPosition: '1/2',
20
+ loginPromptHTML: async () => {
21
+ const adminforthUserExists = await admin.resource("adminuser").count(Filters.EQ('email', 'adminforth')) > 0;
22
+ if (adminforthUserExists) {
23
+ return "Please use <b>adminforth</b> as username and <b>adminforth</b> as password"
24
+ }
25
+ },
18
26
  },
19
27
  customization: {
20
28
  brandName: "{{appName}}",
@@ -23,7 +31,8 @@ export const admin = new AdminForth({
23
31
  brandLogo: '@@/assets/logo.svg',
24
32
  datesFormat: 'DD MMM',
25
33
  timeFormat: 'HH:mm a',
26
- showBrandNameInSidebar: true,
34
+ showBrandNameInSidebar: true,
35
+ showBrandLogoInSidebar: true,
27
36
  emptyFieldPlaceholder: '-',
28
37
  styles: {
29
38
  colors: {
@@ -61,6 +70,8 @@ if (fileURLToPath(import.meta.url) === path.resolve(process.argv[1])) {
61
70
  const app = express();
62
71
  app.use(express.json());
63
72
 
73
+ initApi(app, admin);
74
+
64
75
  const port = 3500;
65
76
 
66
77
  admin.bundleNow({ hotReload: process.env.NODE_ENV === 'development' }).then(() => {
@@ -235,6 +235,11 @@ async function writeTemplateFiles(dirname, cwd, options) {
235
235
  dest: 'index.ts',
236
236
  data: { appName },
237
237
  },
238
+ {
239
+ src: 'api.ts.hbs',
240
+ dest: 'api.ts',
241
+ data: {},
242
+ },
238
243
  {
239
244
  src: '.gitignore.hbs',
240
245
  dest: '.gitignore',
@@ -312,7 +317,7 @@ async function installDependencies(ctx, cwd) {
312
317
  const isWindows = process.platform === 'win32';
313
318
 
314
319
  const nodeBinary = process.execPath;
315
- const npmPath = path.join(path.dirname(nodeBinary), 'npm');
320
+ const npmPath = path.join(path.dirname(nodeBinary), isWindows ? 'npm.cmd' : 'npm');
316
321
  const customDir = ctx.customDir;
317
322
  if (isWindows) {
318
323
  const res = await Promise.all([
@@ -2,18 +2,20 @@ import fs from 'fs/promises';
2
2
  import path from 'path';
3
3
  import chalk from 'chalk';
4
4
  import jiti from 'jiti';
5
+ import dotenv, { config } from "dotenv";
5
6
 
7
+ dotenv.config({ path: '.env.local', override: true });
8
+ dotenv.config({ path: '.env', override: true });
6
9
 
7
- export async function loadAdminForthConfig() {
10
+ export async function getAdminInstance() {
8
11
  const configFileName = 'index.ts';
9
12
  const configPath = path.resolve(process.cwd(), configFileName);
10
-
11
13
  try {
12
14
  await fs.access(configPath);
13
15
  } catch (error) {
14
16
  console.error(chalk.red(`\nError: Configuration file not found at ${configPath}`));
15
17
  console.error(chalk.yellow(`Please ensure you are running this command from your project's root directory and the '${configFileName}' file exists.`));
16
- process.exit(1);
18
+ return null;
17
19
  }
18
20
 
19
21
  try {
@@ -26,8 +28,19 @@ export async function loadAdminForthConfig() {
26
28
  const configModule = _require(configPath);
27
29
 
28
30
  const adminInstance = configModule.admin || configModule.default?.admin;
31
+ return { adminInstance, configPath, configFileName };
32
+ } catch (error) {
33
+ console.error(chalk.red(`\nError loading or parsing configuration file: ${configPath}`));
34
+ console.error(error);
35
+ return null;
36
+ }
37
+ }
29
38
 
39
+ export async function loadAdminForthConfig() {
40
+
41
+ const { adminInstance, configPath, configFileName } = await getAdminInstance();
30
42
 
43
+ try {
31
44
  if (!adminInstance) {
32
45
  throw new Error(`Could not find 'admin' export in ${configFileName}. Please ensure your config file exports the AdminForth instance like: 'export const admin = new AdminForth({...});'`);
33
46
  }
@@ -50,7 +63,7 @@ export async function loadAdminForthConfig() {
50
63
  return config;
51
64
 
52
65
  } catch (error) {
53
- console.error(chalk.red(`\nError loading or parsing configuration file: ${configPath}`));
66
+ console.error(chalk.red(`\nError loading or parsing configuration file: ${configPath}, error: ${error}`));
54
67
  console.error(error);
55
68
  process.exit(1);
56
69
  }
@@ -189,6 +189,7 @@ async function handleCrudPageInjectionCreation(config, resources) {
189
189
  message: 'Where exactly do you want to inject the component?',
190
190
  choices: [
191
191
  { name: '⬆️ Before Breadcrumbs', value: 'beforeBreadcrumbs' },
192
+ { name: '➡️ Before Action Buttons', value: 'beforeActionButtons' },
192
193
  { name: '⬇️ After Breadcrumbs', value: 'afterBreadcrumbs' },
193
194
  { name: '📄 After Page', value: 'bottom' },
194
195
  { name: '⋯ threeDotsDropdownItems', value: 'threeDotsDropdownItems' },
@@ -0,0 +1,38 @@
1
+ <template>
2
+ <div class="flex items-center p-4 md:p-5 gap-2">
3
+ <button
4
+ type="button"
5
+ @click="handleClick"
6
+ class="text-white bg-blue-600 hover:bg-blue-700 focus:ring-4 focus:outline-none focus:ring-blue-300 font-medium rounded-lg text-sm px-4 py-2.5 text-center dark:bg-blue-500 dark:hover:bg-blue-600 dark:focus:ring-blue-800"
7
+ >
8
+ {{ '{{' }} $t('Example') {{ '}}' }}
9
+ </button>
10
+ </div>
11
+ </template>
12
+
13
+ <script setup lang="ts">
14
+ import { onMounted } from 'vue';
15
+ import { useI18n } from 'vue-i18n';
16
+ import adminforth from '@/adminforth';
17
+ import { AdminForthResourceCommon, AdminUser } from "@/types/Common";
18
+
19
+ const { t } = useI18n();
20
+
21
+ const props = defineProps<{
22
+ record: any
23
+ resource: AdminForthResourceCommon
24
+ adminUser: AdminUser
25
+ meta?: any
26
+ }>();
27
+
28
+ onMounted(() => {
29
+ // Logic on mount if needed
30
+ });
31
+
32
+ function handleClick() {
33
+ adminforth.alert({
34
+ message: t('Confirmed'),
35
+ variant: 'success',
36
+ });
37
+ }
38
+ </script>
@@ -3,15 +3,12 @@
3
3
  "baseUrl": ".", // This should point to your project root
4
4
  "paths": {
5
5
  "@/*": [
6
- // "node_modules/adminforth/dist/spa/src/*"
7
- "../../../spa/src/*"
6
+ "../node_modules/adminforth/dist/spa/src/*"
8
7
  ],
9
8
  "*": [
10
- // "node_modules/adminforth/dist/spa/node_modules/*"
11
- "../../../spa/node_modules/*"
9
+ "../node_modules/adminforth/dist/spa/node_modules/*"
12
10
  ],
13
11
  "@@/*": [
14
- // "node_modules/adminforth/dist/spa/src/*"
15
12
  "."
16
13
  ]
17
14
  }
@@ -5,7 +5,7 @@
5
5
  "types": "dist/index.d.ts",
6
6
  "type": "module",
7
7
  "scripts": {
8
- "build": "tsc && rsync -av --exclude 'node_modules' custom dist/ && npm version patch"
8
+ "build": "tsc && rsync -av --exclude 'node_modules' custom dist/"
9
9
  },
10
10
  "keywords": [],
11
11
  "author": "",
@@ -2,6 +2,8 @@ import fs from "fs";
2
2
  import path from "path";
3
3
  import { toPascalCase, mapToTypeScriptType, getInstance } from "./utils.js";
4
4
  import dotenv from "dotenv";
5
+ import { callTsProxy } from "./callTsProxy.js";
6
+ import { getAdminInstance } from "../commands/createCustomComponent/configLoader.js";
5
7
 
6
8
  const envFileArg = process.argv.find((arg) => arg.startsWith("--env-file="));
7
9
  const envFilePath = envFileArg ? envFileArg.split("=")[1] : ".env";
@@ -23,39 +25,45 @@ async function generateModels() {
23
25
  }
24
26
 
25
27
  let modelContent = "// Generated model file\n\n";
26
- const files = fs.readdirSync(currentDirectory);
27
28
  let instanceFound = false;
28
29
 
29
- for (const file of files) {
30
- if (file.endsWith(".js") || file.endsWith(".ts")) {
31
- const instance = await getInstance(file, currentDirectory);
32
- if (instance) {
33
- await instance.discoverDatabases();
34
- instanceFound = true;
35
- instance.config.resources.forEach((resource) => {
36
- if (resource.columns) {
37
- modelContent += `export type ${toPascalCase(
38
- resource.resourceId
39
- )} = {\n`;
40
- resource.columns.forEach((column) => {
41
- if (column.name && column.type) {
42
- modelContent += ` ${column.name}: ${mapToTypeScriptType(
43
- column.type
44
- )};\n`;
30
+ const { adminInstance, configPath, configFileName } = await getAdminInstance();
31
+ if (adminInstance) {
32
+ await adminInstance.discoverDatabases();
33
+ instanceFound = true;
34
+ for (const resource of adminInstance.config.resources) {
35
+ if (resource.columns) {
36
+ const typeName = toPascalCase(resource.resourceId);
37
+ const tsCode = `
38
+ export async function exec() {
39
+ const columns = ${JSON.stringify(resource.columns)};
40
+ const typeName = "${typeName}";
41
+ function mapToTypeScriptType(type) {
42
+ const map = { "integer": "number", "varchar": "string", "boolean": "boolean", "date": "string", "datetime": "string", "decimal": "number", "float": "number", "json": "Record<string, any>", "text": "string", "string": "string", "time": "string" };
43
+ return map[type] || "any";
44
+ }
45
+
46
+ let typeStr = \`export type \${typeName} = {\\n\`;
47
+ for (const col of columns) {
48
+ if (col.name && col.type) {
49
+ typeStr += \` \${col.name}: \${mapToTypeScriptType(col.type)};\\n\`;
45
50
  }
46
- });
47
- modelContent += `}\n\n`;
51
+ }
52
+ typeStr += "}\\n\\n";
53
+ return typeStr;
48
54
  }
49
- });
55
+ `;
56
+
57
+ const result = await callTsProxy(tsCode);
58
+ modelContent += result;
50
59
  }
51
- }
60
+ };
52
61
  }
53
62
 
54
63
  if (!instanceFound) {
55
64
  console.error("Error: No valid instance found to generate models.");
56
65
  return;
57
66
  }
58
-
59
67
  fs.writeFileSync(modelFilePath, modelContent, "utf-8");
60
68
  console.log(`Generated TypeScript model file: ${modelFilePath}`);
61
69
  return true;
package/dist/auth.d.ts CHANGED
@@ -20,10 +20,18 @@ declare class AdminForthAuth implements IAdminForthAuth {
20
20
  payload: {
21
21
  name: string;
22
22
  value: string;
23
- expiry: number;
23
+ expiry: number | undefined;
24
+ expirySeconds: number | undefined;
24
25
  httpOnly: boolean;
25
26
  };
26
27
  }): void;
28
+ getCustomCookie({ cookies, name }: {
29
+ cookies: {
30
+ key: string;
31
+ value: string;
32
+ }[];
33
+ name: string;
34
+ }): string | null;
27
35
  issueJWT(payload: Object, type: string, expiresIn?: string): string;
28
36
  verify(jwtToken: string, mustHaveType: string, decodeUser?: boolean | undefined): Promise<Object>;
29
37
  static generatePasswordHash(password: any): Promise<string>;
@@ -1 +1 @@
1
- {"version":3,"file":"auth.d.ts","sourceRoot":"","sources":["../auth.ts"],"names":[],"mappings":"AAGA,OAAO,UAAU,MAAM,YAAY,CAAC;AACpC,OAAO,EAAE,eAAe,EAAE,MAAM,iBAAiB,CAAC;AAkClD,cAAM,cAAe,YAAW,eAAe;IAC7C,UAAU,EAAE,UAAU,CAAC;gBAEX,UAAU,KAAA;IAItB,WAAW,CAAC,OAAO,EAAE,MAAM;IA4B3B,gBAAgB,CAAC,QAAQ,KAAA;IAKzB,aAAa,CAAC,EAAE,YAAY,EAAE,QAAQ,EAAE,QAAQ,EAAE,EAAE,EAAC,EAAE;QACrD,YAAY,CAAC,EAAE,MAAM,CAAC;QACtB,QAAQ,EAAE,GAAG,CAAC;QACd,QAAQ,EAAE,MAAM,CAAC;QACjB,EAAE,EAAE,MAAM,GAAG,IAAI,CAAA;KAClB;IAYD,kBAAkB,CAAC,EAAC,QAAQ,EAAE,IAAI,EAAC;;;KAAA;IAKnC,eAAe,CAAC,EAAE,QAAQ,EAAE,OAAO,EAAE,EAAE;QACrC,QAAQ,EAAE,GAAG,CAAC;QAAC,OAAO,EAAE;YAAC,IAAI,EAAE,MAAM,CAAC;YAAC,KAAK,EAAE,MAAM,CAAC;YAAC,MAAM,EAAE,MAAM,CAAC;YAAC,QAAQ,EAAE,OAAO,CAAA;SAAC,CAAA;KACzF;IAQD,QAAQ,CAAC,OAAO,EAAE,MAAM,EAAE,IAAI,EAAE,MAAM,EAAE,SAAS,GAAE,MAAc,GAAG,MAAM;IAWpE,MAAM,CAAC,QAAQ,EAAE,MAAM,EAAE,YAAY,EAAE,MAAM,EAAE,UAAU,GAAE,OAAO,GAAG,SAAgB,GAAG,OAAO,CAAC,MAAM,CAAC;WAsChG,oBAAoB,CAAC,QAAQ,KAAA;WAM7B,cAAc,CAAC,QAAQ,KAAA,EAAE,cAAc,KAAA;CAOrD;AAED,eAAe,cAAc,CAAC"}
1
+ {"version":3,"file":"auth.d.ts","sourceRoot":"","sources":["../auth.ts"],"names":[],"mappings":"AAGA,OAAO,UAAU,MAAM,YAAY,CAAC;AACpC,OAAO,EAAE,eAAe,EAAE,MAAM,iBAAiB,CAAC;AAkClD,cAAM,cAAe,YAAW,eAAe;IAC7C,UAAU,EAAE,UAAU,CAAC;gBAEX,UAAU,KAAA;IAItB,WAAW,CAAC,OAAO,EAAE,MAAM;IA4B3B,gBAAgB,CAAC,QAAQ,KAAA;IAKzB,aAAa,CAAC,EAAE,YAAY,EAAE,QAAQ,EAAE,QAAQ,EAAE,EAAE,EAAC,EAAE;QACrD,YAAY,CAAC,EAAE,MAAM,CAAC;QACtB,QAAQ,EAAE,GAAG,CAAC;QACd,QAAQ,EAAE,MAAM,CAAC;QACjB,EAAE,EAAE,MAAM,GAAG,IAAI,CAAA;KAClB;IAmBD,kBAAkB,CAAC,EAAC,QAAQ,EAAE,IAAI,EAAC;;;KAAA;IAKnC,eAAe,CAAC,EAAE,QAAQ,EAAE,OAAO,EAAE,EAAE;QACrC,QAAQ,EAAE,GAAG,CAAC;QAAC,OAAO,EAAE;YAAE,IAAI,EAAE,MAAM,CAAC;YAAC,KAAK,EAAE,MAAM,CAAC;YAAC,MAAM,EAAE,MAAM,GAAG,SAAS,CAAC;YAAC,aAAa,EAAE,MAAM,GAAG,SAAS,CAAC;YAAC,QAAQ,EAAE,OAAO,CAAA;SAAE,CAAA;KAC1I;IAiBD,eAAe,CAAC,EAAE,OAAO,EAAE,IAAI,EAAE,EAAE;QACjC,OAAO,EAAE;YAAC,GAAG,EAAE,MAAM,CAAC;YAAC,KAAK,EAAE,MAAM,CAAA;SAAC,EAAE,CAAC;QAAC,IAAI,EAAE,MAAM,CAAA;KACtD,GAAG,MAAM,GAAG,IAAI;IAKjB,QAAQ,CAAC,OAAO,EAAE,MAAM,EAAE,IAAI,EAAE,MAAM,EAAE,SAAS,GAAE,MAAc,GAAG,MAAM;IAWpE,MAAM,CAAC,QAAQ,EAAE,MAAM,EAAE,YAAY,EAAE,MAAM,EAAE,UAAU,GAAE,OAAO,GAAG,SAAgB,GAAG,OAAO,CAAC,MAAM,CAAC;WAsChG,oBAAoB,CAAC,QAAQ,KAAA;WAM7B,cAAc,CAAC,QAAQ,KAAA,EAAE,cAAc,KAAA;CAOrD;AAED,eAAe,cAAc,CAAC"}
package/dist/auth.js CHANGED
@@ -67,12 +67,18 @@ class AdminForthAuth {
67
67
  response.setHeader('Set-Cookie', `adminforth_${brandSlug}_jwt=; Path=${this.adminforth.config.baseUrl || '/'}; HttpOnly; SameSite=Strict; Expires=Thu, 01 Jan 1970 00:00:00 GMT`);
68
68
  }
69
69
  setAuthCookie({ expireInDays, response, username, pk }) {
70
+ console.log("in days", expireInDays);
70
71
  const expiresIn = expireInDays ? `${expireInDays}d` : (process.env.ADMINFORTH_AUTH_EXPIRESIN || '24h');
72
+ console.log("in string", expiresIn);
71
73
  // might be h,m,d in string
72
74
  const expiresInSec = parseTimeToSeconds(expiresIn);
75
+ console.log("expiresInSec", expiresInSec);
73
76
  const token = this.issueJWT({ username, pk }, 'auth', expiresIn);
77
+ console.log("token", token);
74
78
  const expiresCookieFormat = new Date(Date.now() + expiresInSec * 1000).toUTCString();
79
+ console.log("expiresCookieFormat", expiresCookieFormat);
75
80
  const brandSlug = this.adminforth.config.customization.brandNameSlug;
81
+ console.log("brandSlug", brandSlug);
76
82
  response.setHeader('Set-Cookie', `adminforth_${brandSlug}_jwt=${token}; Path=${this.adminforth.config.baseUrl || '/'}; HttpOnly; SameSite=Strict; Expires=${expiresCookieFormat}`);
77
83
  }
78
84
  removeCustomCookie({ response, name }) {
@@ -80,9 +86,22 @@ class AdminForthAuth {
80
86
  response.setHeader('Set-Cookie', `adminforth_${brandSlug}_${name}=; Path=${this.adminforth.config.baseUrl || '/'}; HttpOnly; SameSite=Strict; Expires=Thu, 01 Jan 1970 00:00:00 GMT`);
81
87
  }
82
88
  setCustomCookie({ response, payload }) {
83
- const { name, value, expiry, httpOnly } = payload;
89
+ const { name, value, expiry, httpOnly, expirySeconds } = payload;
90
+ let expiryMs = 24 * 60 * 60 * 1000; // default 1 day
91
+ if (expirySeconds !== undefined) {
92
+ expiryMs = expirySeconds * 1000;
93
+ }
94
+ else if (expiry !== undefined) {
95
+ console.warn('setCustomCookie: expiry(in ms) is deprecated, use expirySeconds instead (seconds), traceback:', new Error().stack);
96
+ expiryMs = expiry;
97
+ }
98
+ const brandSlug = this.adminforth.config.customization.brandNameSlug;
99
+ response.setHeader('Set-Cookie', `adminforth_${brandSlug}_${name}=${value}; Path=${this.adminforth.config.baseUrl || '/'};${httpOnly ? ' HttpOnly;' : ''} SameSite=Strict; Expires=${new Date(Date.now() + expiryMs).toUTCString()} `);
100
+ }
101
+ getCustomCookie({ cookies, name }) {
102
+ var _a;
84
103
  const brandSlug = this.adminforth.config.customization.brandNameSlug;
85
- response.setHeader('Set-Cookie', `adminforth_${brandSlug}_${name}=${value}; Path=${this.adminforth.config.baseUrl || '/'};${httpOnly ? ' HttpOnly;' : ''} SameSite=Strict; Expires=${new Date(Date.now() + expiry).toUTCString()} `);
104
+ return ((_a = cookies.find((cookie) => cookie.key === `adminforth_${brandSlug}_${name}`)) === null || _a === void 0 ? void 0 : _a.value) || null;
86
105
  }
87
106
  issueJWT(payload, type, expiresIn = '24h') {
88
107
  // read ADMINFORH_SECRET from environment if not drop error
package/dist/auth.js.map CHANGED
@@ -1 +1 @@
1
- {"version":3,"file":"auth.js","sourceRoot":"","sources":["../auth.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"auth.js","sourceRoot":"","sources":["../auth.ts"],"names":[],"mappings":"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"}
@@ -1 +1 @@
1
- {"version":3,"file":"baseConnector.d.ts","sourceRoot":"","sources":["../../dataConnectors/baseConnector.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"baseConnector.d.ts","sourceRoot":"","sources":["../../dataConnectors/baseConnector.ts"],"names":[],"mappings":"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"}
@@ -46,7 +46,7 @@ export default class AdminForthBaseConnector {
46
46
  return { operator: AdminForthFilterOperators.AND, subFilters: [filter] };
47
47
  }
48
48
  validateAndNormalizeFilters(filters, resource) {
49
- var _a;
49
+ var _a, _b, _c;
50
50
  if (Array.isArray(filters)) {
51
51
  // go through all filters in array and call validation+normalization for each
52
52
  // as soon as error is encountered, there is no point in calling validation for other filters
@@ -73,36 +73,67 @@ export default class AdminForthBaseConnector {
73
73
  return filterValidation;
74
74
  }, { ok: true, error: '' });
75
75
  }
76
- if (filters.field) {
76
+ const filtersAsSingle = filters;
77
+ if (filtersAsSingle.field) {
77
78
  // if "field" is present, filter must be Single
78
79
  if (!filters.operator) {
79
80
  return { ok: false, error: `Field "operator" not specified in filter object: ${JSON.stringify(filters)}` };
80
81
  }
81
- if (filters.value === undefined) {
82
+ // Either compare with value or with rightField (field-to-field). If rightField is set, value must be undefined.
83
+ const comparingWithRightField = filtersAsSingle.rightField !== undefined && filtersAsSingle.rightField !== null;
84
+ if (!comparingWithRightField && filtersAsSingle.value === undefined) {
82
85
  return { ok: false, error: `Field "value" not specified in filter object: ${JSON.stringify(filters)}` };
83
86
  }
84
- if (filters.insecureRawSQL) {
87
+ if (comparingWithRightField && filtersAsSingle.value !== undefined) {
88
+ return { ok: false, error: `Specify either "value" or "rightField", not both: ${JSON.stringify(filters)}` };
89
+ }
90
+ if (filtersAsSingle.insecureRawSQL) {
85
91
  return { ok: false, error: `Field "insecureRawSQL" should not be specified in filter object alongside "field": ${JSON.stringify(filters)}` };
86
92
  }
93
+ if (filtersAsSingle.insecureRawNoSQL) {
94
+ return { ok: false, error: `Field "insecureRawNoSQL" should not be specified in filter object alongside "field": ${JSON.stringify(filters)}` };
95
+ }
87
96
  if (![AdminForthFilterOperators.EQ, AdminForthFilterOperators.NE, AdminForthFilterOperators.GT,
88
97
  AdminForthFilterOperators.LT, AdminForthFilterOperators.GTE, AdminForthFilterOperators.LTE,
89
98
  AdminForthFilterOperators.LIKE, AdminForthFilterOperators.ILIKE, AdminForthFilterOperators.IN,
90
99
  AdminForthFilterOperators.NIN].includes(filters.operator)) {
91
100
  return { ok: false, error: `Field "operator" has wrong value in filter object: ${JSON.stringify(filters)}` };
92
101
  }
93
- const fieldObj = resource.dataSourceColumns.find((col) => col.name == filters.field);
102
+ const fieldObj = resource.dataSourceColumns.find((col) => col.name == filtersAsSingle.field);
94
103
  if (!fieldObj) {
95
- const similar = suggestIfTypo(resource.dataSourceColumns.map((col) => col.name), filters.field);
96
- throw new Error(`Field '${filters.field}' not found in resource '${resource.resourceId}'. ${similar ? `Did you mean '${similar}'?` : ''}`);
104
+ const similar = suggestIfTypo(resource.dataSourceColumns.map((col) => col.name), filtersAsSingle.field);
105
+ let isPolymorphicTarget = false;
106
+ if ((_b = (_a = global.adminforth) === null || _a === void 0 ? void 0 : _a.config) === null || _b === void 0 ? void 0 : _b.resources) {
107
+ isPolymorphicTarget = global.adminforth.config.resources.some(res => res.dataSourceColumns.some(col => {
108
+ var _a, _b;
109
+ return (_b = (_a = col.foreignResource) === null || _a === void 0 ? void 0 : _a.polymorphicResources) === null || _b === void 0 ? void 0 : _b.some(pr => pr.resourceId === resource.resourceId);
110
+ }));
111
+ }
112
+ if (isPolymorphicTarget) {
113
+ process.env.HEAVY_DEBUG && console.log(`⚠️ Field '${filtersAsSingle.field}' not found in polymorphic target resource '${resource.resourceId}', allowing query to proceed.`);
114
+ return { ok: true, error: '' };
115
+ }
116
+ else {
117
+ throw new Error(`Field '${filtersAsSingle.field}' not found in resource '${resource.resourceId}'. ${similar ? `Did you mean '${similar}'?` : ''}`);
118
+ }
97
119
  }
98
120
  // value normalization
99
- if (filters.operator == AdminForthFilterOperators.IN || filters.operator == AdminForthFilterOperators.NIN) {
121
+ if (comparingWithRightField) {
122
+ // ensure rightField exists in resource
123
+ const rightFieldObj = resource.dataSourceColumns.find((col) => col.name == filtersAsSingle.rightField);
124
+ if (!rightFieldObj) {
125
+ const similar = suggestIfTypo(resource.dataSourceColumns.map((col) => col.name), filtersAsSingle.rightField);
126
+ throw new Error(`Field '${filtersAsSingle.rightField}' not found in resource '${resource.resourceId}'. ${similar ? `Did you mean '${similar}'?` : ''}`);
127
+ }
128
+ // No value conversion needed for field-to-field comparison here
129
+ }
130
+ else if (filters.operator == AdminForthFilterOperators.IN || filters.operator == AdminForthFilterOperators.NIN) {
100
131
  if (!Array.isArray(filters.value)) {
101
132
  return { ok: false, error: `Value for operator '${filters.operator}' should be an array, in filter object: ${JSON.stringify(filters)}` };
102
133
  }
103
134
  if (filters.value.length === 0) {
104
135
  // nonsense, and some databases might not accept IN []
105
- const colType = (_a = resource.dataSourceColumns.find((col) => col.name == filters.field)) === null || _a === void 0 ? void 0 : _a.type;
136
+ const colType = (_c = resource.dataSourceColumns.find((col) => col.name == filtersAsSingle.field)) === null || _c === void 0 ? void 0 : _c.type;
106
137
  if (colType === AdminForthDataTypes.STRING || colType === AdminForthDataTypes.TEXT) {
107
138
  filters.value = [randomUUID()];
108
139
  return { ok: true, error: `` };
@@ -114,16 +145,16 @@ export default class AdminForthBaseConnector {
114
145
  filters.value = filters.value.map((val) => this.setFieldValue(fieldObj, val));
115
146
  }
116
147
  else {
117
- filters.value = this.setFieldValue(fieldObj, filters.value);
148
+ filtersAsSingle.value = this.setFieldValue(fieldObj, filtersAsSingle.value);
118
149
  }
119
150
  }
120
- else if (filters.insecureRawSQL) {
151
+ else if (filtersAsSingle.insecureRawSQL || filtersAsSingle.insecureRawNoSQL) {
121
152
  // if "insecureRawSQL" filter is insecure sql string
122
- if (filters.operator) {
123
- return { ok: false, error: `Field "operator" should not be specified in filter object alongside "insecureRawSQL": ${JSON.stringify(filters)}` };
153
+ if (filtersAsSingle.operator) {
154
+ return { ok: false, error: `Field "operator" should not be specified in filter object alongside "insecureRawSQL" or "insecureRawNoSQL": ${JSON.stringify(filters)}` };
124
155
  }
125
- if (filters.value !== undefined) {
126
- return { ok: false, error: `Field "value" should not be specified in filter object alongside "insecureRawSQL": ${JSON.stringify(filters)}` };
156
+ if (filtersAsSingle.value !== undefined) {
157
+ return { ok: false, error: `Field "value" should not be specified in filter object alongside "insecureRawSQL" or "insecureRawNoSQL": ${JSON.stringify(filters)}` };
127
158
  }
128
159
  }
129
160
  else if (filters.subFilters) {