@prostgles/prostgles 2.3.6-dev.1787052142 → 2.3.6-dev.1787074115
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/client/build/js/298.bundle.js +1 -1
- package/dist/server/package.json +17 -10
- package/dist/server/src/authConfig/authUtils.d.ts +1 -0
- package/dist/server/src/authConfig/authUtils.d.ts.map +1 -1
- package/dist/server/src/authConfig/authUtils.js +11 -1
- package/dist/server/src/authConfig/authUtils.js.map +1 -1
- package/dist/server/src/authConfig/getLogin.d.ts.map +1 -1
- package/dist/server/src/authConfig/getLogin.js +1 -5
- package/dist/server/src/authConfig/getLogin.js.map +1 -1
- package/dist/server/src/cli/cli.js +26 -7
- package/dist/server/src/cli/cli.js.map +1 -1
- package/dist/server/src/cli/cliUtils.d.ts +7 -2
- package/dist/server/src/cli/cliUtils.d.ts.map +1 -1
- package/dist/server/src/cli/cliUtils.js +38 -5
- package/dist/server/src/cli/cliUtils.js.map +1 -1
- package/dist/server/src/cli/getCliAgentsFile.d.ts.map +1 -1
- package/dist/server/src/cli/getCliAgentsFile.js +7 -0
- package/dist/server/src/cli/getCliAgentsFile.js.map +1 -1
- package/dist/server/src/serverFunctions/userServerFunctions/userServerFunctions.d.ts.map +1 -1
- package/dist/server/src/serverFunctions/userServerFunctions/userServerFunctions.js +8 -5
- package/dist/server/src/serverFunctions/userServerFunctions/userServerFunctions.js.map +1 -1
- package/dist/server/src/testing/createTestDeployment.d.ts +37 -0
- package/dist/server/src/testing/createTestDeployment.d.ts.map +1 -0
- package/dist/server/src/testing/createTestDeployment.js +410 -0
- package/dist/server/src/testing/createTestDeployment.js.map +1 -0
- package/dist/server/src/testing/index.d.ts +2 -0
- package/dist/server/src/testing/index.d.ts.map +1 -0
- package/dist/server/src/testing/index.js +6 -0
- package/dist/server/src/testing/index.js.map +1 -0
- package/package.json +17 -10
package/dist/server/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@prostgles/prostgles",
|
|
3
|
-
"version": "2.3.6-dev.
|
|
3
|
+
"version": "2.3.6-dev.1787074115",
|
|
4
4
|
"description": "Prostgles UI runtime and configurable PostgreSQL dashboard",
|
|
5
5
|
"main": "dist/server/src/schemaConfig.js",
|
|
6
6
|
"bin": {
|
|
@@ -35,9 +35,9 @@
|
|
|
35
35
|
"sample_schemas"
|
|
36
36
|
],
|
|
37
37
|
"dependencies": {
|
|
38
|
-
"@aws-sdk/client-s3": "^3.
|
|
39
|
-
"@aws-sdk/lib-storage": "^3.
|
|
40
|
-
"@aws-sdk/s3-request-presigner": "^3.
|
|
38
|
+
"@aws-sdk/client-s3": "^3.1112.0",
|
|
39
|
+
"@aws-sdk/lib-storage": "^3.1112.0",
|
|
40
|
+
"@aws-sdk/s3-request-presigner": "^3.1112.0",
|
|
41
41
|
"@libpg-query/parser": "^17.6.10",
|
|
42
42
|
"@modelcontextprotocol/sdk": "^1.30.0",
|
|
43
43
|
"@types/cookie-parser": "^1.4.10",
|
|
@@ -50,36 +50,43 @@
|
|
|
50
50
|
"express": "^5.2.1",
|
|
51
51
|
"glob": "^13.0.6",
|
|
52
52
|
"helmet": "^7.2.0",
|
|
53
|
-
"ipaddr.js": "^2.
|
|
54
|
-
"otplib": "^
|
|
53
|
+
"ipaddr.js": "^2.5.0",
|
|
54
|
+
"otplib": "^13.4.1",
|
|
55
55
|
"path-to-regexp": "^8.4.2",
|
|
56
56
|
"pidusage": "^4.0.1",
|
|
57
|
+
"pg": "^8.23.0",
|
|
58
|
+
"prostgles-client": "^4.0.386",
|
|
57
59
|
"prostgles-server": "^4.2.596",
|
|
58
60
|
"qrcode": "^1.5.4",
|
|
59
61
|
"simple-git": "^3.36.0",
|
|
60
|
-
"smtp-server": "^3.19.
|
|
62
|
+
"smtp-server": "^3.19.3",
|
|
61
63
|
"socket.io": "^4.8.3",
|
|
62
64
|
"tslib": "^2.8.1",
|
|
63
65
|
"typescript": "^5.9.3",
|
|
64
|
-
"ws": "^8.21.
|
|
66
|
+
"ws": "^8.21.3"
|
|
65
67
|
},
|
|
66
68
|
"devDependencies": {
|
|
67
69
|
"@eslint/js": "^9.39.1",
|
|
68
70
|
"@types/express": "^5.0.6",
|
|
69
71
|
"@types/node": "^22.20.1",
|
|
72
|
+
"@types/pg": "^8.21.0",
|
|
70
73
|
"@types/smtp-server": "^3.5.13",
|
|
71
74
|
"@types/ws": "^8.18.1",
|
|
72
75
|
"concurrently": "^9.2.4",
|
|
73
76
|
"eslint": "^9.39.5",
|
|
74
77
|
"eslint-plugin-import": "^2.32.0",
|
|
75
78
|
"eslint-plugin-security": "^3.0.1",
|
|
76
|
-
"tsc-alias": "^1.9.
|
|
77
|
-
"typescript-eslint": "^8.
|
|
79
|
+
"tsc-alias": "^1.9.2",
|
|
80
|
+
"typescript-eslint": "^8.67.0"
|
|
78
81
|
},
|
|
79
82
|
"exports": {
|
|
80
83
|
".": {
|
|
81
84
|
"types": "./dist/server/src/schemaConfig.d.ts",
|
|
82
85
|
"default": "./dist/server/src/schemaConfig.js"
|
|
86
|
+
},
|
|
87
|
+
"./testing": {
|
|
88
|
+
"types": "./dist/server/src/testing/index.d.ts",
|
|
89
|
+
"default": "./dist/server/src/testing/index.js"
|
|
83
90
|
}
|
|
84
91
|
}
|
|
85
92
|
}
|
|
@@ -1,3 +1,4 @@
|
|
|
1
1
|
import type { User } from "../ConnectionManager/ConnectionManager";
|
|
2
2
|
export declare const getPasswordHash: ({ id }: Pick<User, "id">, rawPassword: string) => string;
|
|
3
|
+
export declare const isTotpTokenValid: (secret: string, token: string) => Promise<boolean>;
|
|
3
4
|
//# sourceMappingURL=authUtils.d.ts.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"authUtils.d.ts","sourceRoot":"","sources":["../../../../src/authConfig/authUtils.ts"],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"authUtils.d.ts","sourceRoot":"","sources":["../../../../src/authConfig/authUtils.ts"],"names":[],"mappings":"AAEA,OAAO,KAAK,EAAE,IAAI,EAAE,MAAM,wCAAwC,CAAC;AAInE,eAAO,MAAM,eAAe,GAC1B,QAAQ,IAAI,CAAC,IAAI,EAAE,IAAI,CAAC,EACxB,aAAa,MAAM,KAClB,MAUF,CAAC;AAEF,eAAO,MAAM,gBAAgB,GAAU,QAAQ,MAAM,EAAE,OAAO,MAAM,qBAMnE,CAAC"}
|
|
@@ -1,7 +1,8 @@
|
|
|
1
1
|
"use strict";
|
|
2
2
|
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
-
exports.getPasswordHash = void 0;
|
|
3
|
+
exports.isTotpTokenValid = exports.getPasswordHash = void 0;
|
|
4
4
|
const node_crypto_1 = require("node:crypto");
|
|
5
|
+
const otplib_1 = require("otplib");
|
|
5
6
|
const ITERATIONS = 1e5;
|
|
6
7
|
const KEY_LENGTH = 512;
|
|
7
8
|
const getPasswordHash = ({ id }, rawPassword) => {
|
|
@@ -10,4 +11,13 @@ const getPasswordHash = ({ id }, rawPassword) => {
|
|
|
10
11
|
return pwdHash;
|
|
11
12
|
};
|
|
12
13
|
exports.getPasswordHash = getPasswordHash;
|
|
14
|
+
const isTotpTokenValid = async (secret, token) => {
|
|
15
|
+
try {
|
|
16
|
+
return (await (0, otplib_1.verify)({ secret, token })).valid;
|
|
17
|
+
}
|
|
18
|
+
catch {
|
|
19
|
+
return false;
|
|
20
|
+
}
|
|
21
|
+
};
|
|
22
|
+
exports.isTotpTokenValid = isTotpTokenValid;
|
|
13
23
|
//# sourceMappingURL=authUtils.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"authUtils.js","sourceRoot":"","sources":["../../../../src/authConfig/authUtils.ts"],"names":[],"mappings":";;;AAAA,6CAAyC;
|
|
1
|
+
{"version":3,"file":"authUtils.js","sourceRoot":"","sources":["../../../../src/authConfig/authUtils.ts"],"names":[],"mappings":";;;AAAA,6CAAyC;AACzC,mCAAgC;AAGhC,MAAM,UAAU,GAAG,GAAG,CAAC;AACvB,MAAM,UAAU,GAAG,GAAG,CAAC;AAChB,MAAM,eAAe,GAAG,CAC7B,EAAE,EAAE,EAAoB,EACxB,WAAmB,EACX,EAAE;IACV,MAAM,IAAI,GAAG,MAAM,CAAC,IAAI,CAAC,EAAE,CAAC,CAAC,QAAQ,CAAC,QAAQ,CAAC,CAAC;IAChD,MAAM,OAAO,GAAG,IAAA,wBAAU,EACxB,WAAW,EACX,IAAI,EACJ,UAAU,EACV,UAAU,EACV,QAAQ,CACT,CAAC,QAAQ,CAAC,KAAK,CAAC,CAAC;IAClB,OAAO,OAAO,CAAC;AACjB,CAAC,CAAC;AAbW,QAAA,eAAe,mBAa1B;AAEK,MAAM,gBAAgB,GAAG,KAAK,EAAE,MAAc,EAAE,KAAa,EAAE,EAAE;IACtE,IAAI,CAAC;QACH,OAAO,CAAC,MAAM,IAAA,eAAM,EAAC,EAAE,MAAM,EAAE,KAAK,EAAE,CAAC,CAAC,CAAC,KAAK,CAAC;IACjD,CAAC;IAAC,MAAM,CAAC;QACP,OAAO,KAAK,CAAC;IACf,CAAC;AACH,CAAC,CAAC;AANW,QAAA,gBAAgB,oBAM3B"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"getLogin.d.ts","sourceRoot":"","sources":["../../../../src/authConfig/getLogin.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,iBAAiB,EAAE,MAAM,2BAA2B,CAAC;
|
|
1
|
+
{"version":3,"file":"getLogin.d.ts","sourceRoot":"","sources":["../../../../src/authConfig/getLogin.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,iBAAiB,EAAE,MAAM,2BAA2B,CAAC;AAEnE,OAAO,KAAK,EAAE,EAAE,EAAE,MAAM,qCAAqC,CAAC;AAC9D,OAAO,KAAK,EAAE,GAAG,EAAS,MAAM,IAAI,CAAC;AAQrC,OAAO,KAAK,EAAE,4BAA4B,EAAE,MAAM,+BAA+B,CAAC;AAGlF,eAAO,MAAM,QAAQ,GACnB,KAAK,GAAG,EACR,MAAM,EAAE,EACR,iBAAiB,WAAW,CAC1B,4BAA4B,CAAC,qBAAqB,CAAC,CACpD,ghBAoLF,CAAC"}
|
|
@@ -1,7 +1,6 @@
|
|
|
1
1
|
"use strict";
|
|
2
2
|
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
3
|
exports.getLogin = void 0;
|
|
4
|
-
const otplib_1 = require("otplib");
|
|
5
4
|
const index_1 = require("../index");
|
|
6
5
|
const authUtils_1 = require("./authUtils");
|
|
7
6
|
const getEmailSenderWithMockTest_1 = require("./emailProvider/getEmailSenderWithMockTest");
|
|
@@ -124,10 +123,7 @@ const getLogin = async (dbs, _dbs, database_config) => {
|
|
|
124
123
|
}
|
|
125
124
|
}
|
|
126
125
|
else if (totp_token && typeof totp_token === "string") {
|
|
127
|
-
if (!
|
|
128
|
-
secret: matchingUser["2fa"].secret,
|
|
129
|
-
token: totp_token,
|
|
130
|
-
})) {
|
|
126
|
+
if (!(await (0, authUtils_1.isTotpTokenValid)(matchingUser["2fa"].secret, totp_token))) {
|
|
131
127
|
return "invalid-totp-code";
|
|
132
128
|
}
|
|
133
129
|
}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"getLogin.js","sourceRoot":"","sources":["../../../../src/authConfig/getLogin.ts"],"names":[],"mappings":";;;
|
|
1
|
+
{"version":3,"file":"getLogin.js","sourceRoot":"","sources":["../../../../src/authConfig/getLogin.ts"],"names":[],"mappings":"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"}
|
|
@@ -11,7 +11,7 @@ const compileSchemaConfigProject_1 = require("../ConnectionManager/compileSchema
|
|
|
11
11
|
const cliUtils_1 = require("./cliUtils");
|
|
12
12
|
const ensureCliDatabases_1 = require("./ensureCliDatabases");
|
|
13
13
|
const usage = `Usage:
|
|
14
|
-
prostgles create <directory>
|
|
14
|
+
prostgles create <directory> [--skip-install]
|
|
15
15
|
prostgles dev [--config <directory>]
|
|
16
16
|
prostgles start [--config <directory>]`;
|
|
17
17
|
const getConfigPath = (args) => {
|
|
@@ -23,12 +23,25 @@ const getConfigPath = (args) => {
|
|
|
23
23
|
throw new Error("--config requires a directory");
|
|
24
24
|
return path_1.default.resolve(configPath);
|
|
25
25
|
};
|
|
26
|
-
const
|
|
26
|
+
const npmCommand = process.platform === "win32" ? "npm.cmd" : "npm";
|
|
27
|
+
const installConfigDependencies = (targetPath) => {
|
|
28
|
+
const result = (0, child_process_1.spawnSync)(npmCommand, ["install"], {
|
|
29
|
+
cwd: targetPath,
|
|
30
|
+
stdio: "inherit",
|
|
31
|
+
});
|
|
32
|
+
if (result.error)
|
|
33
|
+
throw result.error;
|
|
34
|
+
if (result.status !== 0) {
|
|
35
|
+
throw new Error(`npm install failed with status ${result.status ?? 1}`);
|
|
36
|
+
}
|
|
37
|
+
};
|
|
38
|
+
const createConfig = (targetPath, skipInstall) => {
|
|
27
39
|
if ((0, fs_1.existsSync)(targetPath) && (0, fs_1.readdirSync)(targetPath).length) {
|
|
28
40
|
throw new Error(`${targetPath} already exists and is not empty`);
|
|
29
41
|
}
|
|
30
42
|
(0, fs_1.mkdirSync)(path_1.default.join(targetPath, "src"), { recursive: true });
|
|
31
43
|
(0, fs_1.mkdirSync)(path_1.default.join(targetPath, "generated"), { recursive: true });
|
|
44
|
+
(0, fs_1.mkdirSync)(path_1.default.join(targetPath, cliUtils_1.testsFolderName), { recursive: true });
|
|
32
45
|
cliUtils_1.srcSubfolderNames.forEach((folderName) => {
|
|
33
46
|
(0, fs_1.mkdirSync)(path_1.default.join(targetPath, cliUtils_1.srcFolderName, folderName));
|
|
34
47
|
});
|
|
@@ -36,7 +49,7 @@ const createConfig = (targetPath) => {
|
|
|
36
49
|
.basename(targetPath)
|
|
37
50
|
.replace(/[^a-z0-9-]/gi, "-")
|
|
38
51
|
.toLowerCase();
|
|
39
|
-
const configId = packageName || "my-prostgles-
|
|
52
|
+
const configId = packageName || "my-prostgles-app";
|
|
40
53
|
(0, fs_1.writeFileSync)(path_1.default.join(targetPath, "package.json"), JSON.stringify({
|
|
41
54
|
name: configId,
|
|
42
55
|
...cliUtils_1.cliTemplateFiles.package,
|
|
@@ -45,6 +58,7 @@ const createConfig = (targetPath) => {
|
|
|
45
58
|
(0, fs_1.writeFileSync)(path_1.default.join(targetPath, "eslint.config.mjs"), cliUtils_1.cliTemplateFiles.eslintConfig);
|
|
46
59
|
(0, fs_1.writeFileSync)(path_1.default.join(targetPath, cliUtils_1.generatedFolderName, "DBGeneratedSchema.ts"), cliUtils_1.cliTemplateFiles.DBGeneratedSchema);
|
|
47
60
|
(0, fs_1.writeFileSync)(path_1.default.join(targetPath, "AGENTS.md"), cliUtils_1.cliTemplateFiles.agents);
|
|
61
|
+
(0, fs_1.writeFileSync)(path_1.default.join(targetPath, cliUtils_1.testsFolderName, "deployment.test.ts"), cliUtils_1.cliTemplateFiles.deploymentTest);
|
|
48
62
|
(0, fs_1.writeFileSync)(path_1.default.join(targetPath, cliUtils_1.srcFolderName, "index.ts"), (0, utils_1.fixIndent)(`
|
|
49
63
|
import { defineConfig } from "@prostgles/prostgles";
|
|
50
64
|
import type { DBGeneratedSchema } from "../${cliUtils_1.generatedFolderName}/DBGeneratedSchema";
|
|
@@ -58,9 +72,14 @@ const createConfig = (targetPath) => {
|
|
|
58
72
|
},
|
|
59
73
|
tableConfig: {},
|
|
60
74
|
});`));
|
|
61
|
-
(0, fs_1.writeFileSync)(path_1.default.join(targetPath, ".env.example"), cliUtils_1.cliTemplateFiles.envExample());
|
|
75
|
+
(0, fs_1.writeFileSync)(path_1.default.join(targetPath, ".env.example"), cliUtils_1.cliTemplateFiles.envExample({ configId }));
|
|
62
76
|
(0, fs_1.writeFileSync)(path_1.default.join(targetPath, ".gitignore"), cliUtils_1.cliTemplateFiles.gitignore);
|
|
63
|
-
|
|
77
|
+
if (skipInstall) {
|
|
78
|
+
console.log(`Created config project in ${targetPath}. Run npm install, copy .env.example to .env, configure both database URLs, then run npm run dev.`);
|
|
79
|
+
return;
|
|
80
|
+
}
|
|
81
|
+
installConfigDependencies(targetPath);
|
|
82
|
+
console.log(`Created config project and installed dependencies in ${targetPath}. Copy .env.example to .env, configure both database URLs, then run npm run dev.`);
|
|
64
83
|
};
|
|
65
84
|
const getConfigEnvironment = (configPath) => {
|
|
66
85
|
const environmentFile = path_1.default.join(configPath, ".env");
|
|
@@ -89,8 +108,8 @@ const runServer = (configPath, mode) => (0, child_process_1.spawn)(process.execP
|
|
|
89
108
|
cwd: serverDirectory,
|
|
90
109
|
stdio: "inherit",
|
|
91
110
|
env: {
|
|
92
|
-
...process.env,
|
|
93
111
|
...getConfigEnvironment(configPath),
|
|
112
|
+
...process.env,
|
|
94
113
|
NODE_ENV: mode,
|
|
95
114
|
PROSTGLES_UI_CONFIG: configPath,
|
|
96
115
|
},
|
|
@@ -165,7 +184,7 @@ const main = async () => {
|
|
|
165
184
|
const target = args[0];
|
|
166
185
|
if (!target || target.startsWith("-"))
|
|
167
186
|
throw new Error(usage);
|
|
168
|
-
createConfig(path_1.default.resolve(target));
|
|
187
|
+
createConfig(path_1.default.resolve(target), args.includes("--skip-install"));
|
|
169
188
|
return;
|
|
170
189
|
}
|
|
171
190
|
if (command === "dev" || command === "start") {
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"cli.js","sourceRoot":"","sources":["../../../../src/cli/cli.ts"],"names":[],"mappings":";;;;AAEA,yCAA0C;AAC1C,
|
|
1
|
+
{"version":3,"file":"cli.js","sourceRoot":"","sources":["../../../../src/cli/cli.ts"],"names":[],"mappings":"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"}
|
|
@@ -1,5 +1,6 @@
|
|
|
1
1
|
export declare const srcFolderName = "src";
|
|
2
2
|
export declare const generatedFolderName = "generated";
|
|
3
|
+
export declare const testsFolderName = "tests";
|
|
3
4
|
export declare const srcSubfolderNames: readonly ["functions", "tableConfigs", "tableOptions", "tableHooks"];
|
|
4
5
|
export declare const cliTemplateFiles: {
|
|
5
6
|
readonly package: {
|
|
@@ -12,6 +13,7 @@ export declare const cliTemplateFiles: {
|
|
|
12
13
|
readonly lint: "eslint .";
|
|
13
14
|
readonly "lint:fix": "eslint . --fix";
|
|
14
15
|
readonly start: "prostgles start --config .";
|
|
16
|
+
readonly test: "npm run build && node --env-file-if-exists=.env --test \"build/tests/**/*.test.js\"";
|
|
15
17
|
};
|
|
16
18
|
readonly dependencies: {
|
|
17
19
|
readonly "@prostgles/prostgles": `^${string}`;
|
|
@@ -46,12 +48,15 @@ export declare const cliTemplateFiles: {
|
|
|
46
48
|
readonly strict: true;
|
|
47
49
|
readonly strictFunctionTypes: true;
|
|
48
50
|
};
|
|
49
|
-
readonly include: readonly ["src", "generated"];
|
|
51
|
+
readonly include: readonly ["src", "generated", "tests"];
|
|
50
52
|
};
|
|
51
53
|
readonly DBGeneratedSchema: "export type DBGeneratedSchema = Record<string, { columns: Record<string, unknown> }>\n";
|
|
52
54
|
readonly agents: string;
|
|
55
|
+
readonly deploymentTest: string;
|
|
53
56
|
readonly eslintConfig: string;
|
|
54
57
|
readonly gitignore: string;
|
|
55
|
-
readonly envExample: (
|
|
58
|
+
readonly envExample: ({ configId }: {
|
|
59
|
+
configId: string;
|
|
60
|
+
}) => string;
|
|
56
61
|
};
|
|
57
62
|
//# sourceMappingURL=cliUtils.d.ts.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"cliUtils.d.ts","sourceRoot":"","sources":["../../../../src/cli/cliUtils.ts"],"names":[],"mappings":"AAKA,eAAO,MAAM,aAAa,QAAQ,CAAC;AACnC,eAAO,MAAM,mBAAmB,cAAc,CAAC;AAC/C,eAAO,MAAM,iBAAiB,sEAKpB,CAAC;AAoFX,eAAO,MAAM,gBAAgB
|
|
1
|
+
{"version":3,"file":"cliUtils.d.ts","sourceRoot":"","sources":["../../../../src/cli/cliUtils.ts"],"names":[],"mappings":"AAKA,eAAO,MAAM,aAAa,QAAQ,CAAC;AACnC,eAAO,MAAM,mBAAmB,cAAc,CAAC;AAC/C,eAAO,MAAM,eAAe,UAAU,CAAC;AACvC,eAAO,MAAM,iBAAiB,sEAKpB,CAAC;AAoFX,eAAO,MAAM,gBAAgB;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;wCAiFA;QAAE,QAAQ,EAAE,MAAM,CAAA;KAAE;CAkBvC,CAAC"}
|
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
"use strict";
|
|
2
2
|
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
-
exports.cliTemplateFiles = exports.srcSubfolderNames = exports.generatedFolderName = exports.srcFolderName = void 0;
|
|
3
|
+
exports.cliTemplateFiles = exports.srcSubfolderNames = exports.testsFolderName = exports.generatedFolderName = exports.srcFolderName = void 0;
|
|
4
4
|
const tslib_1 = require("tslib");
|
|
5
5
|
const utils_1 = require("../../../common/utils");
|
|
6
6
|
const crypto_1 = require("crypto");
|
|
@@ -8,6 +8,7 @@ const package_json_1 = tslib_1.__importDefault(require("../../package.json"));
|
|
|
8
8
|
const getCliAgentsFile_1 = require("./getCliAgentsFile");
|
|
9
9
|
exports.srcFolderName = "src";
|
|
10
10
|
exports.generatedFolderName = "generated";
|
|
11
|
+
exports.testsFolderName = "tests";
|
|
11
12
|
exports.srcSubfolderNames = [
|
|
12
13
|
"functions",
|
|
13
14
|
"tableConfigs",
|
|
@@ -61,7 +62,7 @@ const eslintConfig = (0, utils_1.fixIndent)(`
|
|
|
61
62
|
eslint.configs.recommended,
|
|
62
63
|
tseslint.configs.recommendedTypeChecked,
|
|
63
64
|
{
|
|
64
|
-
files: ["src/**/*.ts"],
|
|
65
|
+
files: ["src/**/*.ts", "tests/**/*.ts"],
|
|
65
66
|
languageOptions: {
|
|
66
67
|
parserOptions: {
|
|
67
68
|
projectService: true,
|
|
@@ -106,6 +107,7 @@ exports.cliTemplateFiles = {
|
|
|
106
107
|
lint: "eslint .",
|
|
107
108
|
"lint:fix": "eslint . --fix",
|
|
108
109
|
start: "prostgles start --config .",
|
|
110
|
+
test: 'npm run build && node --env-file-if-exists=.env --test "build/tests/**/*.test.js"',
|
|
109
111
|
},
|
|
110
112
|
dependencies: { "@prostgles/prostgles": `^${package_json_1.default.version}` },
|
|
111
113
|
devDependencies: {
|
|
@@ -138,17 +140,41 @@ exports.cliTemplateFiles = {
|
|
|
138
140
|
strict: true,
|
|
139
141
|
strictFunctionTypes: true,
|
|
140
142
|
},
|
|
141
|
-
include: [exports.srcFolderName, exports.generatedFolderName],
|
|
143
|
+
include: [exports.srcFolderName, exports.generatedFolderName, exports.testsFolderName],
|
|
142
144
|
},
|
|
143
145
|
DBGeneratedSchema: "export type DBGeneratedSchema = Record<string, { columns: Record<string, unknown> }>\n",
|
|
144
146
|
agents: (0, getCliAgentsFile_1.getCliAgentsFile)(),
|
|
147
|
+
deploymentTest: (0, utils_1.fixIndent)(`
|
|
148
|
+
import assert from "node:assert/strict";
|
|
149
|
+
import { resolve } from "node:path";
|
|
150
|
+
import test from "node:test";
|
|
151
|
+
import { createTestDeployment } from "@prostgles/prostgles/testing";
|
|
152
|
+
import type { DBGeneratedSchema } from "../generated/DBGeneratedSchema";
|
|
153
|
+
|
|
154
|
+
void test("starts the configured app with an isolated database", async (context) => {
|
|
155
|
+
const deployment = await createTestDeployment<DBGeneratedSchema>({
|
|
156
|
+
configPath: resolve(__dirname, "../.."),
|
|
157
|
+
users: [{ key: "admin", type: "admin" }],
|
|
158
|
+
// Add deterministic rows with:
|
|
159
|
+
// seed: async ({ projectDatabase }) => {
|
|
160
|
+
// await projectDatabase.query("INSERT INTO ...");
|
|
161
|
+
// },
|
|
162
|
+
});
|
|
163
|
+
context.after(async () => await deployment.dispose());
|
|
164
|
+
|
|
165
|
+
const client = await deployment.connectProjectAs("admin");
|
|
166
|
+
|
|
167
|
+
assert.equal(client.socket.connected, true);
|
|
168
|
+
assert.equal(client.auth.user?.type, "admin");
|
|
169
|
+
assert.ok(client.db);
|
|
170
|
+
});`),
|
|
145
171
|
eslintConfig,
|
|
146
172
|
gitignore: (0, utils_1.fixIndent)(`
|
|
147
173
|
node_modules/
|
|
148
174
|
build/
|
|
149
175
|
.env
|
|
150
176
|
*.log`),
|
|
151
|
-
envExample: () => (0, utils_1.fixIndent)(`
|
|
177
|
+
envExample: ({ configId }) => (0, utils_1.fixIndent)(`
|
|
152
178
|
# Fixed admin credentials for CLI development.
|
|
153
179
|
PRGL_USERNAME=admin
|
|
154
180
|
PRGL_PASSWORD=${(0, crypto_1.randomBytes)(24).toString("base64url")}
|
|
@@ -157,6 +183,13 @@ exports.cliTemplateFiles = {
|
|
|
157
183
|
PROSTGLES_STATE_DATABASE_URL=postgres://user:password@localhost:5432/prostgles_state_database
|
|
158
184
|
|
|
159
185
|
# Database exposed by this config. Must use the same server as the state database.
|
|
160
|
-
PROSTGLES_DATABASE_URL=postgres://user:password@localhost:5432
|
|
186
|
+
PROSTGLES_DATABASE_URL=postgres://user:password@localhost:5432/${configId}
|
|
187
|
+
|
|
188
|
+
# npm test starts an ephemeral PostgreSQL Docker container bound to 127.0.0.1 only.
|
|
189
|
+
# This optional prefix makes its disposable database and container names recognizable.
|
|
190
|
+
PROSTGLES_TEST_DATABASES_PREFIX=${configId.replaceAll("-", "_")}
|
|
191
|
+
|
|
192
|
+
# Override only when the app needs a different PostgreSQL/PostGIS version.
|
|
193
|
+
# PROSTGLES_TEST_POSTGRES_IMAGE=postgis/postgis:17-3.4`),
|
|
161
194
|
};
|
|
162
195
|
//# sourceMappingURL=cliUtils.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"cliUtils.js","sourceRoot":"","sources":["../../../../src/cli/cliUtils.ts"],"names":[],"mappings":";;;;AAAA,yCAA0C;AAC1C,mCAAqC;AACrC,8EAA6C;AAC7C,yDAAsD;AAEzC,QAAA,aAAa,GAAG,KAAK,CAAC;AACtB,QAAA,mBAAmB,GAAG,WAAW,CAAC;AAClC,QAAA,iBAAiB,GAAG;IAC/B,WAAW;IACX,cAAc;IACd,cAAc;IACd,YAAY;CACJ,CAAC;AAEX,MAAM,YAAY,GAAG,IAAA,iBAAS,EAAC;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;KAgF1B,CAAC,CAAC;AAEM,QAAA,gBAAgB,GAAG;IAC9B,OAAO,EAAE;QACP,OAAO,EAAE,IAAI;QACb,OAAO,EAAE,OAAO;QAChB,IAAI,EAAE,oBAAoB;QAC1B,OAAO,EAAE;YACP,KAAK,EAAE,6CAA6C;YACpD,GAAG,EAAE,0BAA0B;YAC/B,IAAI,EAAE,UAAU;YAChB,UAAU,EAAE,gBAAgB;YAC5B,KAAK,EAAE,4BAA4B;
|
|
1
|
+
{"version":3,"file":"cliUtils.js","sourceRoot":"","sources":["../../../../src/cli/cliUtils.ts"],"names":[],"mappings":";;;;AAAA,yCAA0C;AAC1C,mCAAqC;AACrC,8EAA6C;AAC7C,yDAAsD;AAEzC,QAAA,aAAa,GAAG,KAAK,CAAC;AACtB,QAAA,mBAAmB,GAAG,WAAW,CAAC;AAClC,QAAA,eAAe,GAAG,OAAO,CAAC;AAC1B,QAAA,iBAAiB,GAAG;IAC/B,WAAW;IACX,cAAc;IACd,cAAc;IACd,YAAY;CACJ,CAAC;AAEX,MAAM,YAAY,GAAG,IAAA,iBAAS,EAAC;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;KAgF1B,CAAC,CAAC;AAEM,QAAA,gBAAgB,GAAG;IAC9B,OAAO,EAAE;QACP,OAAO,EAAE,IAAI;QACb,OAAO,EAAE,OAAO;QAChB,IAAI,EAAE,oBAAoB;QAC1B,OAAO,EAAE;YACP,KAAK,EAAE,6CAA6C;YACpD,GAAG,EAAE,0BAA0B;YAC/B,IAAI,EAAE,UAAU;YAChB,UAAU,EAAE,gBAAgB;YAC5B,KAAK,EAAE,4BAA4B;YACnC,IAAI,EACF,mFAAmF;SACtF;QACD,YAAY,EAAE,EAAE,sBAAsB,EAAE,IAAI,sBAAW,CAAC,OAAO,EAAE,EAAE;QACnE,eAAe,EAAE;YACf,YAAY,EAAE,sBAAW,CAAC,eAAe,CAAC,YAAY,CAAC;YACvD,aAAa,EAAE,UAAU;YACzB,MAAM,EAAE,sBAAW,CAAC,eAAe,CAAC,MAAM;YAC1C,wBAAwB,EACtB,sBAAW,CAAC,eAAe,CAAC,wBAAwB,CAAC;YACvD,UAAU,EAAE,sBAAW,CAAC,YAAY,CAAC,YAAY,CAAC;YAClD,mBAAmB,EAAE,sBAAW,CAAC,eAAe,CAAC,mBAAmB,CAAC;SACtE;QACD,OAAO,EAAE;YACP,aAAa,EAAE;gBACb,KAAK,EAAE,8BAA8B;gBACrC,OAAO,EAAE,4BAA4B;aACtC;SACF;KACF;IACD,QAAQ,EAAE;QACR,eAAe,EAAE;YACf,MAAM,EAAE,QAAQ;YAChB,MAAM,EAAE,QAAQ;YAChB,gBAAgB,EAAE,QAAQ;YAC1B,OAAO,EAAE,GAAG;YACZ,MAAM,EAAE,OAAO;YACf,eAAe,EAAE,IAAI;YACrB,gCAAgC,EAAE,IAAI;YACtC,aAAa,EAAE,IAAI;YACnB,wBAAwB,EAAE,IAAI;YAC9B,YAAY,EAAE,IAAI;YAClB,MAAM,EAAE,IAAI;YACZ,mBAAmB,EAAE,IAAI;SAC1B;QACD,OAAO,EAAE,CAAC,qBAAa,EAAE,2BAAmB,EAAE,uBAAe,CAAC;KAC/D;IACD,iBAAiB,EACf,wFAAwF;IAC1F,MAAM,EAAE,IAAA,mCAAgB,GAAE;IAC1B,cAAc,EAAE,IAAA,iBAAS,EAAC;;;;;;;;;;;;;;;;;;;;;;;UAuBlB,CAAC;IACT,YAAY;IACZ,SAAS,EAAE,IAAA,iBAAS,EAAC;;;;YAIX,CAAC;IACX,UAAU,EAAE,CAAC,EAAE,QAAQ,EAAwB,EAAE,EAAE,CACjD,IAAA,iBAAS,EAAC;;;sBAGQ,IAAA,oBAAW,EAAC,EAAE,CAAC,CAAC,QAAQ,CAAC,WAAW,CAAC;;;;;;uEAMY,QAAQ;;;;wCAIvC,QAAQ,CAAC,UAAU,CAAC,GAAG,EAAE,GAAG,CAAC;;;6DAGR,CAAC;CACpD,CAAC"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"getCliAgentsFile.d.ts","sourceRoot":"","sources":["../../../../src/cli/getCliAgentsFile.ts"],"names":[],"mappings":"AAmDA,eAAO,MAAM,gBAAgB,
|
|
1
|
+
{"version":3,"file":"getCliAgentsFile.d.ts","sourceRoot":"","sources":["../../../../src/cli/getCliAgentsFile.ts"],"names":[],"mappings":"AAmDA,eAAO,MAAM,gBAAgB,cAmE0D,CAAC"}
|
|
@@ -56,6 +56,13 @@ const getCliAgentsFile = () => (0, utils_1.fixIndent)(`
|
|
|
56
56
|
- Use semantic names ending in \`*.function.ts\`, \`*.tableConfig.ts\`, \`*.tableOptions.ts\`, and \`*.tableHooks.ts\`. Examples: \`deployProject.function.ts\`, \`orders.tableConfig.ts\`, \`customers.tableOptions.ts\`, and \`users.tableHooks.ts\`.
|
|
57
57
|
- The generated ESLint config enforces these suffixes inside their corresponding folders. Run \`npm run lint\` before committing.
|
|
58
58
|
|
|
59
|
+
## Tests
|
|
60
|
+
|
|
61
|
+
- Run \`npm test\` before committing. Tests use \`@prostgles/prostgles/testing\` to start the real app against fresh state and project databases without opening the UI.
|
|
62
|
+
- Keep deployment tests in \`tests/\`. Each call to \`createTestDeployment\` starts a disposable PostgreSQL Docker container bound only to \`127.0.0.1\`, creates fresh state and project databases, and removes the container during cleanup.
|
|
63
|
+
- Add test users through the fixture's \`users\` option and connect with \`connectProjectAs(userKey)\`. Sessions are seeded directly, so deployment tests do not need to exercise the login UI.
|
|
64
|
+
- Add deterministic database state with the fixture's \`seed\` callback. Never use development or production database URLs for test setup.
|
|
65
|
+
|
|
59
66
|
## Tables, display options, and hooks
|
|
60
67
|
|
|
61
68
|
- ${schemaConfigGuidance.tableConfig} ${schemaConfigGuidance.tableConfigMigrations}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"getCliAgentsFile.js","sourceRoot":"","sources":["../../../../src/cli/getCliAgentsFile.ts"],"names":[],"mappings":";;;AAAA,yCAA0C;AAW1C;;;GAGG;AACH,MAAM,oBAAoB,GAAG;IAC3B,cAAc,EACZ,iGAAiG;IACnG,UAAU,EACR,mGAAmG;IACrG,cAAc,EACZ,+FAA+F;IACjG,SAAS,EACP,4GAA4G;IAC9G,EAAE,EAAE,oEAAoE;IACxE,KAAK,EACH,+EAA+E;IACjF,SAAS,EACP,wFAAwF;IAC1F,OAAO,EACL,gGAAgG;IAClG,WAAW,EACT,gFAAgF;IAClF,qBAAqB,EACnB,iHAAiH;IACnH,UAAU,EAAE,8DAA8D;IAC1E,eAAe,EACb,+EAA+E;IACjF,UAAU,EACR,0FAA0F;CAC9D,CAAC;AAEjC,MAAM,kBAAkB,GAAG;IACzB,gBAAgB,EACd,gFAAgF;IAClF,eAAe,EACb,wEAAwE;IAC1E,aAAa,EACX,yPAAyP;CAC/N,CAAC;AAExB,MAAM,gBAAgB,GAAG,GAAG,EAAE,CACnC,IAAA,iBAAS,EAAC;;;;;;;;;QASJ,oBAAoB,CAAC,EAAE;QACvB,oBAAoB,CAAC,UAAU,IAAI,kBAAkB,CAAC,gBAAgB,IAAI,kBAAkB,CAAC,eAAe;QAC5G,oBAAoB,CAAC,cAAc;QACnC,oBAAoB,CAAC,cAAc;QACnC,oBAAoB,CAAC,eAAe;QACpC,oBAAoB,CAAC,SAAS,IAAI,oBAAoB,CAAC,OAAO
|
|
1
|
+
{"version":3,"file":"getCliAgentsFile.js","sourceRoot":"","sources":["../../../../src/cli/getCliAgentsFile.ts"],"names":[],"mappings":";;;AAAA,yCAA0C;AAW1C;;;GAGG;AACH,MAAM,oBAAoB,GAAG;IAC3B,cAAc,EACZ,iGAAiG;IACnG,UAAU,EACR,mGAAmG;IACrG,cAAc,EACZ,+FAA+F;IACjG,SAAS,EACP,4GAA4G;IAC9G,EAAE,EAAE,oEAAoE;IACxE,KAAK,EACH,+EAA+E;IACjF,SAAS,EACP,wFAAwF;IAC1F,OAAO,EACL,gGAAgG;IAClG,WAAW,EACT,gFAAgF;IAClF,qBAAqB,EACnB,iHAAiH;IACnH,UAAU,EAAE,8DAA8D;IAC1E,eAAe,EACb,+EAA+E;IACjF,UAAU,EACR,0FAA0F;CAC9D,CAAC;AAEjC,MAAM,kBAAkB,GAAG;IACzB,gBAAgB,EACd,gFAAgF;IAClF,eAAe,EACb,wEAAwE;IAC1E,aAAa,EACX,yPAAyP;CAC/N,CAAC;AAExB,MAAM,gBAAgB,GAAG,GAAG,EAAE,CACnC,IAAA,iBAAS,EAAC;;;;;;;;;QASJ,oBAAoB,CAAC,EAAE;QACvB,oBAAoB,CAAC,UAAU,IAAI,kBAAkB,CAAC,gBAAgB,IAAI,kBAAkB,CAAC,eAAe;QAC5G,oBAAoB,CAAC,cAAc;QACnC,oBAAoB,CAAC,cAAc;QACnC,oBAAoB,CAAC,eAAe;QACpC,oBAAoB,CAAC,SAAS,IAAI,oBAAoB,CAAC,OAAO;;;;;;;;;;;;;;;;;;;;;;;;;QAyB9D,oBAAoB,CAAC,WAAW,IAAI,oBAAoB,CAAC,qBAAqB;QAC9E,oBAAoB,CAAC,UAAU;QAC/B,kBAAkB,CAAC,aAAa;;;QAGhC,oBAAoB,CAAC,KAAK;;;;QAI1B,oBAAoB,CAAC,UAAU;;;;;;;;;;;;;QAa/B,oBAAoB,CAAC,SAAS;;;;;sFAKgD,CAAC,CAAC;AAnE3E,QAAA,gBAAgB,oBAmE2D"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"userServerFunctions.d.ts","sourceRoot":"","sources":["../../../../../src/serverFunctions/userServerFunctions/userServerFunctions.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,iBAAiB,EAAE,MAAM,2BAA2B,CAAC;AACnE,OAAO,KAAK,EAAE,eAAe,EAAE,MAAM,kBAAkB,CAAC;AAGxD,OAAO,EAAuB,KAAK,KAAK,EAAE,MAAM,8BAA8B,CAAC;AAc/E,eAAO,MAAM,mBAAmB;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
|
|
1
|
+
{"version":3,"file":"userServerFunctions.d.ts","sourceRoot":"","sources":["../../../../../src/serverFunctions/userServerFunctions/userServerFunctions.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,iBAAiB,EAAE,MAAM,2BAA2B,CAAC;AACnE,OAAO,KAAK,EAAE,eAAe,EAAE,MAAM,kBAAkB,CAAC;AAGxD,OAAO,EAAuB,KAAK,KAAK,EAAE,MAAM,8BAA8B,CAAC;AAc/E,eAAO,MAAM,mBAAmB;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;CAkPwC,CAAC"}
|
|
@@ -2,7 +2,7 @@
|
|
|
2
2
|
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
3
|
exports.userServerFunctions = void 0;
|
|
4
4
|
const tslib_1 = require("tslib");
|
|
5
|
-
const
|
|
5
|
+
const otplib_1 = require("otplib");
|
|
6
6
|
const authUtils_1 = require("../../authConfig/authUtils");
|
|
7
7
|
const sessionUtils_1 = require("../../authConfig/sessionUtils");
|
|
8
8
|
const startRateLimitedLoginAttempt_1 = require("../../authConfig/startRateLimitedLoginAttempt");
|
|
@@ -147,8 +147,12 @@ exports.userServerFunctions = {
|
|
|
147
147
|
run: async (_, { dbo: dbs, user }) => {
|
|
148
148
|
const userName = user.username;
|
|
149
149
|
const service = "Prostgles UI";
|
|
150
|
-
const secret =
|
|
151
|
-
const otpauth =
|
|
150
|
+
const secret = (0, otplib_1.generateSecret)();
|
|
151
|
+
const otpauth = (0, otplib_1.generateURI)({
|
|
152
|
+
label: userName,
|
|
153
|
+
issuer: service,
|
|
154
|
+
secret,
|
|
155
|
+
});
|
|
152
156
|
const recoveryCode = crypto.randomBytes(26).toString("hex");
|
|
153
157
|
const hashedRecoveryCode = (0, authUtils_1.getPasswordHash)(user, recoveryCode);
|
|
154
158
|
await dbs.users.update({ id: user.id }, {
|
|
@@ -173,8 +177,7 @@ exports.userServerFunctions = {
|
|
|
173
177
|
const secret = latestUser?.["2fa"]?.secret;
|
|
174
178
|
if (!secret)
|
|
175
179
|
throw "Secret not found";
|
|
176
|
-
|
|
177
|
-
const isValid = preset_default_1.authenticator.check(token, secret);
|
|
180
|
+
const isValid = await (0, authUtils_1.isTotpTokenValid)(secret, token);
|
|
178
181
|
if (!isValid)
|
|
179
182
|
throw "Invalid code";
|
|
180
183
|
await dbs.users.update({ id: user.id }, { "2fa": { ...latestUser["2fa"], enabled: true } });
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"userServerFunctions.js","sourceRoot":"","sources":["../../../../../src/serverFunctions/userServerFunctions/userServerFunctions.ts"],"names":[],"mappings":";;;;AAEA,
|
|
1
|
+
{"version":3,"file":"userServerFunctions.js","sourceRoot":"","sources":["../../../../../src/serverFunctions/userServerFunctions/userServerFunctions.ts"],"names":[],"mappings":";;;;AAEA,mCAAqD;AACrD,yDAA8E;AAC9E,+DAA+E;AAC/E,+FAAoF;AACpF,mFAAqG;AACrG,uDAAiC;AACjC,uDAG0B;AAC1B,6CAAuE;AACvE,2DAAwD;AACxD,yFAAsF;AACtF,wDAAqD;AACrD,qDAAkD;AAErC,QAAA,mBAAmB,GAAG;IACjC,UAAU,EAAE;QACV,UAAU,EAAE,EAAE;QACd,SAAS,EAAE;YACT,cAAc,EAAE,IAAA,iCAAc,EAAC;gBAC7B,oBAAoB,EAAE,IAAI;gBAC1B,KAAK,EAAE;oBACL,EAAE,EAAE,SAAS;oBACb,QAAQ,EAAE,EAAE,IAAI,EAAE,CAAC,SAAS,EAAE,MAAM,EAAE,cAAc,CAAU,EAAE;oBAChE,MAAM,EAAE,QAAQ;iBACjB;gBACD,GAAG,EAAE,+BAAc;aACpB,CAAC;YACF,MAAM,EAAE,IAAA,iCAAc,EAAC;gBACrB,oBAAoB,EAAE,IAAI;gBAC1B,KAAK,EAAE;oBACL,YAAY,EAAE,QAAQ;oBACtB,MAAM,EAAE,QAAQ;oBAChB,MAAM,EAAE,SAAS;oBACjB,IAAI,EAAE;wBACJ,IAAI,EAAE;4BACJ,aAAa;4BACb,iBAAiB;4BACjB,8BAA8B;yBACtB;qBACX;oBACD,WAAW,EAAE;wBACX,OAAO,EAAE,EAAE,SAAS,EAAE,oDAAmC,EAAE;qBAC5D;iBACF;gBACD,GAAG,EAAE,KAAK,EACR,EAAE,YAAY,EAAE,WAAW,EAAE,MAAM,EAAE,MAAM,EAAE,IAAI,EAAE,EACnD,MAAM,EACN,EAAE;oBACF,MAAM,EAAE,GAAG,EAAE,GAAG,EAAE,IAAI,EAAE,SAAS,EAAE,GAAG,MAAM,CAAC;oBAC7C,MAAM,IAAA,eAAM,EAAC;wBACX,YAAY;wBACZ,4EAA4E;wBAC5E,WAAW,EAAE,WAAyB;wBACtC,MAAM;wBACN,MAAM;wBACN,GAAG;wBACH,IAAI;wBACJ,SAAS;wBACT,IAAI;wBACJ,OAAO,EAAE,SAAS;qBACnB,CAAC,CAAC;gBACL,CAAC;aACF,CAAC;YACF,aAAa,EAAE,IAAA,iCAAc,EAAC;gBAC5B,KAAK,EAAE;oBACL,MAAM,EAAE,QAAQ;oBAChB,MAAM,EAAE,QAAQ;oBAChB,YAAY,EAAE,QAAQ;iBACvB;gBACD,GAAG,CAAC,EAAE,MAAM,EAAE,MAAM,EAAE,YAAY,EAAE;oBAClC,OAAO,IAAA,6BAAa,EAAC;wBACnB,MAAM;wBACN,MAAM;wBACN,YAAY;qBACb,CAAC,CAAC;gBACL,CAAC;aACF,CAAC;YACF,UAAU,EAAE,IAAA,iCAAc,EAAC;gBACzB,oBAAoB,EAAE,IAAI;gBAC1B,KAAK,EAAE,EAAE,MAAM,EAAE,SAAS,EAAE;gBAC5B,GAAG,EAAE,KAAK,EAAE,EAAE,MAAM,EAAE,EAAE,EAAE,GAAG,EAAE,GAAG,EAAE,IAAI,EAAE,EAAE,EAAE;oBAC5C,IAAI,CAAC,MAAM;wBAAE,MAAM,qBAAqB,CAAC;oBACzC,MAAM,IAAI,GAAG,MAAM,GAAG,CAAC,SAAS,CAAC,OAAO,CAAC,EAAE,EAAE,EAAE,MAAM,EAAE,CAAC,CAAC;oBACzD,IAAI,CAAC,IAAI;wBAAE,MAAM,gBAAgB,CAAC;oBAClC,IAAI,IAAI,CAAC,OAAO,KAAK,IAAI,CAAC,EAAE,IAAI,IAAI,CAAC,IAAI,KAAK,OAAO,EAAE,CAAC;wBACtD,MAAM,uCAAuC,CAAC;oBAChD,CAAC;oBACD,IAAA,mBAAU,EAAC,MAAM,CAAC,CAAC;oBACnB,MAAM,GAAG,CAAC,SAAS,CAAC,MAAM,CACxB,EAAE,EAAE,EAAE,MAAM,EAAE,EACd;wBACE,MAAM,EAAE;4BACN,KAAK,EAAE,SAAS;4BAChB,MAAM,EAAE,QAAQ;4BAChB,SAAS,EAAE,IAAI,IAAI,EAAE,CAAC,WAAW,EAAE;yBACpC;qBACF,CACF,CAAC;gBACJ,CAAC;aACF,CAAC;YACF,YAAY,EAAE,IAAA,iCAAc,EAAC;gBAC3B,KAAK,EAAE;oBACL,OAAO,EAAE,QAAQ;oBACjB,KAAK,EAAE,EAAE,IAAI,EAAE,QAAQ,EAAE,QAAQ,EAAE,IAAI,EAAE;iBAC1C;gBACD,GAAG,EAAE,KAAK,EAAE,EAAE,OAAO,EAAE,KAAK,EAAE,EAAE,EAAE;oBAChC,MAAM,KAAK,CAAC,gCAAgC,EAAE;wBAC5C,MAAM,EAAE,MAAM;wBACd,OAAO,EAAE;4BACP,MAAM,EAAE,kBAAkB;4BAC1B,cAAc,EAAE,kBAAkB;yBACnC;wBACD,IAAI,EAAE,IAAI,CAAC,SAAS,CAAC,EAAE,OAAO,EAAE,KAAK,EAAE,CAAC;qBACzC,CAAC,CAAC;gBACL,CAAC;aACF,CAAC;YACF,eAAe,EAAE,IAAA,iCAAc,EAAC;gBAC9B,KAAK,EAAE,EAAE,KAAK,EAAE,QAAQ,EAAE,IAAI,EAAE,QAAQ,EAAE;gBAC1C,GAAG,EAAE,CAAC,EAAE,KAAK,EAAE,IAAI,EAAE,EAAE,EAAE,CAAC,IAAA,iCAAe,EAAC,KAAK,EAAE,IAAI,CAAC;aACvD,CAAC;YACF,aAAa,EAAE,IAAA,iCAAc,EAAC;gBAC5B,oBAAoB,EAAE,IAAI;gBAC1B,KAAK,EAAE,EAAE,IAAI,EAAE,SAAS,EAAE;gBAC1B,GAAG,EAAE,KAAK,EAAE,EAAE,IAAI,EAAE,EAAE,EAAE,GAAG,EAAE,GAAG,EAAE,SAAS,EAAE,UAAU,EAAE,IAAI,EAAE,EAAE,EAAE;oBACjE,MAAM,EAAE,MAAM,EAAE,GAAG,SAAS,CAAC;oBAC7B,IAAI,CAAC,MAAM,EAAE,CAAC;wBACZ,MAAM,gBAAgB,CAAC;oBACzB,CAAC;oBACD,MAAM,cAAc,GAAG,MAAM,GAAG,CAAC,gBAAgB,CAAC,OAAO,CAAC;wBACxD,aAAa,EAAE,EAAE,WAAW,EAAE,EAAE,WAAW,EAAE,IAAI,EAAE,EAAE;qBACtD,CAAC,CAAC;oBACH,IAAI,CAAC,cAAc,EAAE,CAAC;wBACpB,MAAM,wCAAwC,CAAC;oBACjD,CAAC;oBACD,MAAM,EAAE,EAAE,EAAE,UAAU,EAAE,GAAG,IAAA,mDAAoB,EAC7C,UAAU,EACV,cAAc,CACf,CAAC;oBACF,MAAM,OAAO,GAAG,MAAM,GAAG,CAAC,QAAQ,CAAC,MAAM,CACvC;wBACE,OAAO,EAAE,IAAI,CAAC,GAAG,EAAE,GAAG,IAAI,GAAG,EAAE,GAAG,IAAI,GAAG,IAAI;wBAC7C,OAAO,EAAE,IAAI,CAAC,EAAE;wBAChB,SAAS,EAAE,IAAI,CAAC,IAAI;wBACpB,IAAI,EAAE,WAAW;wBACjB,UAAU;wBACV,EAAE,EAAE,IAAA,kCAAmB,GAAE;qBAC1B,EACD,EAAE,SAAS,EAAE,GAAG,EAAE,CACnB,CAAC;oBAEF,OAAO,OAAO,CAAC,EAAE,CAAC;gBACpB,CAAC;aACF,CAAC;YACF,SAAS,EAAE,IAAA,iCAAc,EAAC;gBACxB,oBAAoB,EAAE,IAAI;gBAC1B,GAAG,EAAE,KAAK,EAAE,CAAC,EAAE,EAAE,GAAG,EAAE,GAAG,EAAE,IAAI,EAAE,EAAE,EAAE;oBACnC,MAAM,QAAQ,GAAG,IAAI,CAAC,QAAQ,CAAC;oBAC/B,MAAM,OAAO,GAAG,cAAc,CAAC;oBAC/B,MAAM,MAAM,GAAG,IAAA,uBAAc,GAAE,CAAC;oBAChC,MAAM,OAAO,GAAG,IAAA,oBAAW,EAAC;wBAC1B,KAAK,EAAE,QAAQ;wBACf,MAAM,EAAE,OAAO;wBACf,MAAM;qBACP,CAAC,CAAC;oBAEH,MAAM,YAAY,GAAG,MAAM,CAAC,WAAW,CAAC,EAAE,CAAC,CAAC,QAAQ,CAAC,KAAK,CAAC,CAAC;oBAC5D,MAAM,kBAAkB,GAAG,IAAA,2BAAe,EAAC,IAAI,EAAE,YAAY,CAAC,CAAC;oBAC/D,MAAM,GAAG,CAAC,KAAK,CAAC,MAAM,CACpB,EAAE,EAAE,EAAE,IAAI,CAAC,EAAE,EAAE,EACf;wBACE,KAAK,EAAE;4BACL,MAAM;4BACN,YAAY,EAAE,kBAAkB;4BAChC,OAAO,EAAE,KAAK;yBACf;qBACF,CACF,CAAC;oBACF,OAAO;wBACL,GAAG,EAAE,OAAO;wBACZ,MAAM;wBACN,YAAY;qBACb,CAAC;gBACJ,CAAC;aACF,CAAC;YACF,SAAS,EAAE,IAAA,iCAAc,EAAC;gBACxB,oBAAoB,EAAE,IAAI;gBAC1B,KAAK,EAAE,EAAE,KAAK,EAAE,QAAQ,EAAE;gBAC1B,GAAG,EAAE,KAAK,EAAE,EAAE,KAAK,EAAE,EAAE,EAAE,GAAG,EAAE,GAAG,EAAE,IAAI,EAAE,EAAE,EAAE;oBAC3C,MAAM,UAAU,GAAG,MAAM,GAAG,CAAC,KAAK,CAAC,OAAO,CAAC,EAAE,EAAE,EAAE,IAAI,CAAC,EAAE,EAAE,CAAC,CAAC;oBAC5D,MAAM,MAAM,GAAG,UAAU,EAAE,CAAC,KAAK,CAAC,EAAE,MAAM,CAAC;oBAC3C,IAAI,CAAC,MAAM;wBAAE,MAAM,kBAAkB,CAAC;oBAEtC,MAAM,OAAO,GAAG,MAAM,IAAA,4BAAgB,EAAC,MAAM,EAAE,KAAK,CAAC,CAAC;oBAEtD,IAAI,CAAC,OAAO;wBAAE,MAAM,cAAc,CAAC;oBACnC,MAAM,GAAG,CAAC,KAAK,CAAC,MAAM,CACpB,EAAE,EAAE,EAAE,IAAI,CAAC,EAAE,EAAE,EACf,EAAE,KAAK,EAAE,EAAE,GAAG,UAAU,CAAC,KAAK,CAAE,EAAE,OAAO,EAAE,IAAI,EAAE,EAAE,CACpD,CAAC;oBAEF,kDAAkD;oBAClD,MAAM,GAAG,CAAC,QAAQ,CAAC,MAAM,CACvB;wBACE,OAAO,EAAE,IAAI,CAAC,EAAE;wBAChB,IAAI,EAAE,KAAK;qBACZ,EACD,EAAE,IAAI,EAAE,KAAK,EAAE,MAAM,EAAE,KAAK,EAAE,CAC/B,CAAC;oBACF,OAAO,IAAI,CAAC;gBACd,CAAC;aACF,CAAC;YACF,UAAU,EAAE,IAAA,iCAAc,EAAC;gBACzB,oBAAoB,EAAE,IAAI;gBAC1B,GAAG,EAAE,CAAC,CAAC,EAAE,EAAE,GAAG,EAAE,GAAG,EAAE,IAAI,EAAE,EAAE,EAAE;oBAC7B,OAAO,GAAG,CAAC,KAAK,CAAC,MAAM,CAAC,EAAE,EAAE,EAAE,IAAI,CAAC,EAAE,EAAE,EAAE,EAAE,KAAK,EAAE,IAAI,EAAE,CAAC,CAAC;gBAC5D,CAAC;aACF,CAAC;YACF,cAAc,EAAE,IAAA,iCAAc,EAAC;gBAC7B,oBAAoB,EAAE,IAAI;gBAC1B,KAAK,EAAE,EAAE,WAAW,EAAE,QAAQ,EAAE,WAAW,EAAE,QAAQ,EAAE;gBACvD,GAAG,EAAE,KAAK,EAAE,EAAE,WAAW,EAAE,WAAW,EAAE,EAAE,EAAE,GAAG,EAAE,GAAG,EAAE,IAAI,EAAE,EAAE,EAAE;oBAC9D,MAAM,qBAAqB,GAAG,IAAA,2BAAe,EAAC,IAAI,EAAE,WAAW,CAAC,CAAC;oBACjE,IAAI,IAAI,CAAC,QAAQ,KAAK,qBAAqB,EAAE,CAAC;wBAC5C,MAAM,2BAA2B,CAAC;oBACpC,CAAC;oBACD,MAAM,GAAG,CAAC,KAAK,CAAC,MAAM,CACpB,EAAE,EAAE,EAAE,IAAI,CAAC,EAAE,EAAE,EACf,EAAE,QAAQ,EAAE,IAAA,2BAAe,EAAC,IAAI,EAAE,WAAW,CAAC,EAAE,CACjD,CAAC;gBACJ,CAAC;aACF,CAAC;YACF,sBAAsB,EAAE,IAAA,iCAAc,EAAC;gBACrC,oBAAoB,EAAE,IAAI;gBAC1B,KAAK,EAAE,EAAE,MAAM,EAAE,SAAS,EAAE;gBAC5B,GAAG,EAAE,KAAK,EACR,EAAE,MAAM,EAAE,EACV,EAAE,GAAG,EAAE,GAAG,EAAE,IAAI,EAAE,SAAS,EAAE,EACW,EAAE;oBAC1C,MAAM,IAAI,GAAG,MAAM,GAAG,CAAC,SAAS,CAAC,OAAO,CAAC;wBACvC,EAAE,EAAE,MAAM;wBACV,OAAO,EAAE,IAAI,CAAC,EAAE;qBACjB,CAAC,CAAC;oBACH,IAAI,CAAC,IAAI;wBAAE,MAAM,cAAc,CAAC;oBAChC,MAAM,YAAY,GAAG,IAAI,CAAC,aAAa,CAAC;oBACxC,IAAI,CAAC,YAAY;wBAAE,MAAM,8BAA8B,CAAC;oBACxD,MAAM,YAAY,GAAG,MAAM,IAAA,2DAA4B,EAAC;wBACtD,IAAI;wBACJ,QAAQ,EAAE,IAAI,CAAC,IAAI;wBACnB,GAAG;wBACH,SAAS;qBACV,CAAC,CAAC;oBACH,OAAO,YAAY,CAAC;gBACtB,CAAC;aACF,CAAC;SACH;KACF;CACqE,CAAC"}
|
|
@@ -0,0 +1,37 @@
|
|
|
1
|
+
import { type ClientFunctionHandler, type OnReadyParams } from "prostgles-client";
|
|
2
|
+
import type { UserLike } from "prostgles-types";
|
|
3
|
+
import { Client } from "pg";
|
|
4
|
+
export type TestDeploymentUser = {
|
|
5
|
+
/** Stable name used by connectStateAs/connectProjectAs. */
|
|
6
|
+
key: string;
|
|
7
|
+
username?: string;
|
|
8
|
+
type?: "admin" | "default" | "public";
|
|
9
|
+
};
|
|
10
|
+
export type TestDeploymentSeedContext = {
|
|
11
|
+
stateDatabase: Client;
|
|
12
|
+
projectDatabase: Client;
|
|
13
|
+
};
|
|
14
|
+
export type CreateTestDeploymentOptions = {
|
|
15
|
+
/** Root of the app created by `prostgles create`. */
|
|
16
|
+
configPath: string;
|
|
17
|
+
/** Optional readable segment used in Docker and database names. */
|
|
18
|
+
databasePrefix?: string;
|
|
19
|
+
/** PostgreSQL Docker image. Defaults to the PostGIS image used by Prostgles. */
|
|
20
|
+
postgresImage?: string;
|
|
21
|
+
users?: TestDeploymentUser[];
|
|
22
|
+
seed?: (context: TestDeploymentSeedContext) => void | Promise<void>;
|
|
23
|
+
startupTimeoutMs?: number;
|
|
24
|
+
};
|
|
25
|
+
export type TestDeploymentClient<Schema = void, Functions extends ClientFunctionHandler = ClientFunctionHandler, User extends UserLike = UserLike> = OnReadyParams<Schema, Functions, User> & {
|
|
26
|
+
disconnect: () => void;
|
|
27
|
+
};
|
|
28
|
+
export type TestDeployment<Schema = void, Functions extends ClientFunctionHandler = ClientFunctionHandler, User extends UserLike = UserLike> = {
|
|
29
|
+
endpoint: string;
|
|
30
|
+
stateDatabaseName: string;
|
|
31
|
+
projectDatabaseName: string;
|
|
32
|
+
connectStateAs: (userKey: string) => Promise<TestDeploymentClient<void, ClientFunctionHandler, UserLike>>;
|
|
33
|
+
connectProjectAs: (userKey: string) => Promise<TestDeploymentClient<Schema, Functions, User>>;
|
|
34
|
+
dispose: () => Promise<void>;
|
|
35
|
+
};
|
|
36
|
+
export declare const createTestDeployment: <Schema = void, Functions extends ClientFunctionHandler = ClientFunctionHandler, User extends UserLike = UserLike>({ configPath, databasePrefix, postgresImage, seed, startupTimeoutMs, users, }: CreateTestDeploymentOptions) => Promise<TestDeployment<Schema, Functions, User>>;
|
|
37
|
+
//# sourceMappingURL=createTestDeployment.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"createTestDeployment.d.ts","sourceRoot":"","sources":["../../../../src/testing/createTestDeployment.ts"],"names":[],"mappings":"AAIA,OAAkB,EAChB,KAAK,qBAAqB,EAC1B,KAAK,aAAa,EACnB,MAAM,kBAAkB,CAAC;AAC1B,OAAO,KAAK,EAAE,QAAQ,EAAE,MAAM,iBAAiB,CAAC;AAChD,OAAO,EAAE,MAAM,EAAE,MAAM,IAAI,CAAC;AAO5B,MAAM,MAAM,kBAAkB,GAAG;IAC/B,2DAA2D;IAC3D,GAAG,EAAE,MAAM,CAAC;IACZ,QAAQ,CAAC,EAAE,MAAM,CAAC;IAClB,IAAI,CAAC,EAAE,OAAO,GAAG,SAAS,GAAG,QAAQ,CAAC;CACvC,CAAC;AAEF,MAAM,MAAM,yBAAyB,GAAG;IACtC,aAAa,EAAE,MAAM,CAAC;IACtB,eAAe,EAAE,MAAM,CAAC;CACzB,CAAC;AAEF,MAAM,MAAM,2BAA2B,GAAG;IACxC,qDAAqD;IACrD,UAAU,EAAE,MAAM,CAAC;IACnB,mEAAmE;IACnE,cAAc,CAAC,EAAE,MAAM,CAAC;IACxB,gFAAgF;IAChF,aAAa,CAAC,EAAE,MAAM,CAAC;IACvB,KAAK,CAAC,EAAE,kBAAkB,EAAE,CAAC;IAC7B,IAAI,CAAC,EAAE,CAAC,OAAO,EAAE,yBAAyB,KAAK,IAAI,GAAG,OAAO,CAAC,IAAI,CAAC,CAAC;IACpE,gBAAgB,CAAC,EAAE,MAAM,CAAC;CAC3B,CAAC;AAEF,MAAM,MAAM,oBAAoB,CAC9B,MAAM,GAAG,IAAI,EACb,SAAS,SAAS,qBAAqB,GAAG,qBAAqB,EAC/D,IAAI,SAAS,QAAQ,GAAG,QAAQ,IAC9B,aAAa,CAAC,MAAM,EAAE,SAAS,EAAE,IAAI,CAAC,GAAG;IAC3C,UAAU,EAAE,MAAM,IAAI,CAAC;CACxB,CAAC;AAEF,MAAM,MAAM,cAAc,CACxB,MAAM,GAAG,IAAI,EACb,SAAS,SAAS,qBAAqB,GAAG,qBAAqB,EAC/D,IAAI,SAAS,QAAQ,GAAG,QAAQ,IAC9B;IACF,QAAQ,EAAE,MAAM,CAAC;IACjB,iBAAiB,EAAE,MAAM,CAAC;IAC1B,mBAAmB,EAAE,MAAM,CAAC;IAC5B,cAAc,EAAE,CACd,OAAO,EAAE,MAAM,KACZ,OAAO,CAAC,oBAAoB,CAAC,IAAI,EAAE,qBAAqB,EAAE,QAAQ,CAAC,CAAC,CAAC;IAC1E,gBAAgB,EAAE,CAChB,OAAO,EAAE,MAAM,KACZ,OAAO,CAAC,oBAAoB,CAAC,MAAM,EAAE,SAAS,EAAE,IAAI,CAAC,CAAC,CAAC;IAC5D,OAAO,EAAE,MAAM,OAAO,CAAC,IAAI,CAAC,CAAC;CAC9B,CAAC;AAoTF,eAAO,MAAM,oBAAoB,GAC/B,MAAM,GAAG,IAAI,EACb,SAAS,SAAS,qBAAqB,GAAG,qBAAqB,EAC/D,IAAI,SAAS,QAAQ,GAAG,QAAQ,EAChC,+EAOC,2BAA2B,KAAG,OAAO,CACtC,cAAc,CAAC,MAAM,EAAE,SAAS,EAAE,IAAI,CAAC,CA4LxC,CAAC"}
|