axvault 1.12.0 → 1.13.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/README.md +64 -123
- package/dist/cli.d.ts +2 -1
- package/dist/cli.d.ts.map +1 -1
- package/dist/cli.js +5 -104
- package/dist/cli.js.map +1 -1
- package/dist/commands/serve.d.ts +4 -0
- package/dist/commands/serve.d.ts.map +1 -1
- package/dist/commands/serve.js +82 -62
- package/dist/commands/serve.js.map +1 -1
- package/dist/config.d.ts +58 -7
- package/dist/config.d.ts.map +1 -1
- package/dist/config.js +52 -37
- package/dist/config.js.map +1 -1
- package/dist/db/bootstrap-api-key.d.ts +14 -0
- package/dist/db/bootstrap-api-key.d.ts.map +1 -0
- package/dist/db/bootstrap-api-key.js +26 -0
- package/dist/db/bootstrap-api-key.js.map +1 -0
- package/dist/db/migrations/001-initial.sql +6 -5
- package/dist/db/repositories/audit-log.d.ts +2 -0
- package/dist/db/repositories/audit-log.d.ts.map +1 -1
- package/dist/db/repositories/audit-log.js +4 -2
- package/dist/db/repositories/audit-log.js.map +1 -1
- package/dist/db/run-migrations.d.ts +12 -0
- package/dist/db/run-migrations.d.ts.map +1 -1
- package/dist/db/run-migrations.js +19 -44
- package/dist/db/run-migrations.js.map +1 -1
- package/dist/db/types.d.ts +1 -0
- package/dist/db/types.d.ts.map +1 -1
- package/dist/index.d.ts +12 -6
- package/dist/index.d.ts.map +1 -1
- package/dist/index.js +14 -6
- package/dist/index.js.map +1 -1
- package/dist/lib/access-list.d.ts +13 -0
- package/dist/lib/access-list.d.ts.map +1 -0
- package/dist/lib/access-list.js +22 -0
- package/dist/lib/access-list.js.map +1 -0
- package/dist/lib/credential-name.d.ts +1 -6
- package/dist/lib/credential-name.d.ts.map +1 -1
- package/dist/lib/credential-name.js +1 -4
- package/dist/lib/credential-name.js.map +1 -1
- package/dist/schemas/request.d.ts +35 -0
- package/dist/schemas/request.d.ts.map +1 -0
- package/dist/schemas/request.js +76 -0
- package/dist/schemas/request.js.map +1 -0
- package/dist/schemas/{api.d.ts → response.d.ts} +6 -32
- package/dist/schemas/response.d.ts.map +1 -0
- package/dist/schemas/response.js +59 -0
- package/dist/schemas/response.js.map +1 -0
- package/dist/server/plugins/auth.d.ts +19 -0
- package/dist/server/plugins/auth.d.ts.map +1 -0
- package/dist/server/plugins/auth.js +51 -0
- package/dist/server/plugins/auth.js.map +1 -0
- package/dist/server/plugins/config.d.ts +14 -0
- package/dist/server/plugins/config.d.ts.map +1 -0
- package/dist/server/plugins/config.js +19 -0
- package/dist/server/plugins/config.js.map +1 -0
- package/dist/server/plugins/database.d.ts +12 -0
- package/dist/server/plugins/database.d.ts.map +1 -0
- package/dist/server/plugins/database.js +20 -0
- package/dist/server/plugins/database.js.map +1 -0
- package/dist/server/routes/credentials.d.ts +8 -0
- package/dist/server/routes/credentials.d.ts.map +1 -0
- package/dist/server/routes/credentials.js +82 -0
- package/dist/server/routes/credentials.js.map +1 -0
- package/dist/server/routes/handle-create-key.d.ts +10 -0
- package/dist/server/routes/handle-create-key.d.ts.map +1 -0
- package/dist/server/routes/handle-create-key.js +44 -0
- package/dist/server/routes/handle-create-key.js.map +1 -0
- package/dist/server/routes/handle-delete-credential.d.ts +10 -0
- package/dist/server/routes/handle-delete-credential.d.ts.map +1 -0
- package/dist/{handlers/delete-credential.js → server/routes/handle-delete-credential.js} +19 -17
- package/dist/server/routes/handle-delete-credential.js.map +1 -0
- package/dist/server/routes/handle-delete-key.d.ts +11 -0
- package/dist/server/routes/handle-delete-key.d.ts.map +1 -0
- package/dist/server/routes/handle-delete-key.js +40 -0
- package/dist/server/routes/handle-delete-key.js.map +1 -0
- package/dist/server/routes/handle-get-credential.d.ts +18 -0
- package/dist/server/routes/handle-get-credential.d.ts.map +1 -0
- package/dist/{handlers/get-credential.js → server/routes/handle-get-credential.js} +17 -34
- package/dist/server/routes/handle-get-credential.js.map +1 -0
- package/dist/server/routes/handle-list-credentials.d.ts +13 -0
- package/dist/server/routes/handle-list-credentials.d.ts.map +1 -0
- package/dist/{handlers/list-credentials.js → server/routes/handle-list-credentials.js} +6 -24
- package/dist/server/routes/handle-list-credentials.js.map +1 -0
- package/dist/server/routes/handle-put-credential.d.ts +14 -0
- package/dist/server/routes/handle-put-credential.d.ts.map +1 -0
- package/dist/{handlers/put-credential.js → server/routes/handle-put-credential.js} +26 -33
- package/dist/server/routes/handle-put-credential.js.map +1 -0
- package/dist/server/routes/handle-update-key.d.ts +13 -0
- package/dist/server/routes/handle-update-key.d.ts.map +1 -0
- package/dist/server/routes/handle-update-key.js +74 -0
- package/dist/server/routes/handle-update-key.js.map +1 -0
- package/dist/server/routes/health.d.ts +7 -0
- package/dist/server/routes/health.d.ts.map +1 -0
- package/dist/server/routes/health.js +25 -0
- package/dist/server/routes/health.js.map +1 -0
- package/dist/server/routes/keys.d.ts +12 -0
- package/dist/server/routes/keys.d.ts.map +1 -0
- package/dist/server/routes/keys.js +119 -0
- package/dist/server/routes/keys.js.map +1 -0
- package/dist/server/routes/log-grant-event.d.ts +7 -0
- package/dist/server/routes/log-grant-event.d.ts.map +1 -0
- package/dist/server/routes/log-grant-event.js +15 -0
- package/dist/server/routes/log-grant-event.js.map +1 -0
- package/dist/server/send-sensible-error.d.ts +7 -0
- package/dist/server/send-sensible-error.d.ts.map +1 -0
- package/dist/server/send-sensible-error.js +40 -0
- package/dist/server/send-sensible-error.js.map +1 -0
- package/dist/server/server.d.ts +6 -17
- package/dist/server/server.d.ts.map +1 -1
- package/dist/server/server.js +44 -53
- package/dist/server/server.js.map +1 -1
- package/package.json +7 -1
- package/dist/commands/credential.d.ts +0 -17
- package/dist/commands/credential.d.ts.map +0 -1
- package/dist/commands/credential.js +0 -144
- package/dist/commands/credential.js.map +0 -1
- package/dist/commands/init.d.ts +0 -10
- package/dist/commands/init.d.ts.map +0 -1
- package/dist/commands/init.js +0 -42
- package/dist/commands/init.js.map +0 -1
- package/dist/commands/key-create.d.ts +0 -14
- package/dist/commands/key-create.d.ts.map +0 -1
- package/dist/commands/key-create.js +0 -111
- package/dist/commands/key-create.js.map +0 -1
- package/dist/commands/key-list.d.ts +0 -10
- package/dist/commands/key-list.d.ts.map +0 -1
- package/dist/commands/key-list.js +0 -57
- package/dist/commands/key-list.js.map +0 -1
- package/dist/commands/key-revoke.d.ts +0 -12
- package/dist/commands/key-revoke.d.ts.map +0 -1
- package/dist/commands/key-revoke.js +0 -64
- package/dist/commands/key-revoke.js.map +0 -1
- package/dist/commands/key-update.d.ts +0 -17
- package/dist/commands/key-update.d.ts.map +0 -1
- package/dist/commands/key-update.js +0 -106
- package/dist/commands/key-update.js.map +0 -1
- package/dist/commands/key.d.ts +0 -10
- package/dist/commands/key.d.ts.map +0 -1
- package/dist/commands/key.js +0 -10
- package/dist/commands/key.js.map +0 -1
- package/dist/handlers/create-key.d.ts +0 -14
- package/dist/handlers/create-key.d.ts.map +0 -1
- package/dist/handlers/create-key.js +0 -25
- package/dist/handlers/create-key.js.map +0 -1
- package/dist/handlers/delete-credential.d.ts +0 -15
- package/dist/handlers/delete-credential.d.ts.map +0 -1
- package/dist/handlers/delete-credential.js.map +0 -1
- package/dist/handlers/delete-key.d.ts +0 -15
- package/dist/handlers/delete-key.d.ts.map +0 -1
- package/dist/handlers/delete-key.js +0 -24
- package/dist/handlers/delete-key.js.map +0 -1
- package/dist/handlers/get-credential.d.ts +0 -27
- package/dist/handlers/get-credential.d.ts.map +0 -1
- package/dist/handlers/get-credential.js.map +0 -1
- package/dist/handlers/get-key.d.ts +0 -15
- package/dist/handlers/get-key.d.ts.map +0 -1
- package/dist/handlers/get-key.js +0 -20
- package/dist/handlers/get-key.js.map +0 -1
- package/dist/handlers/list-credentials.d.ts +0 -27
- package/dist/handlers/list-credentials.d.ts.map +0 -1
- package/dist/handlers/list-credentials.js.map +0 -1
- package/dist/handlers/list-keys.d.ts +0 -11
- package/dist/handlers/list-keys.d.ts.map +0 -1
- package/dist/handlers/list-keys.js +0 -18
- package/dist/handlers/list-keys.js.map +0 -1
- package/dist/handlers/put-credential.d.ts +0 -24
- package/dist/handlers/put-credential.d.ts.map +0 -1
- package/dist/handlers/put-credential.js.map +0 -1
- package/dist/handlers/update-key.d.ts +0 -17
- package/dist/handlers/update-key.d.ts.map +0 -1
- package/dist/handlers/update-key.js +0 -47
- package/dist/handlers/update-key.js.map +0 -1
- package/dist/lib/format-key-details.d.ts +0 -17
- package/dist/lib/format-key-details.d.ts.map +0 -1
- package/dist/lib/format-key-details.js +0 -25
- package/dist/lib/format-key-details.js.map +0 -1
- package/dist/lib/format.d.ts +0 -89
- package/dist/lib/format.d.ts.map +0 -1
- package/dist/lib/format.js +0 -180
- package/dist/lib/format.js.map +0 -1
- package/dist/lib/parse-access-options.d.ts +0 -38
- package/dist/lib/parse-access-options.d.ts.map +0 -1
- package/dist/lib/parse-access-options.js +0 -85
- package/dist/lib/parse-access-options.js.map +0 -1
- package/dist/middleware/auth.d.ts +0 -22
- package/dist/middleware/auth.d.ts.map +0 -1
- package/dist/middleware/auth.js +0 -49
- package/dist/middleware/auth.js.map +0 -1
- package/dist/middleware/require-grant-access.d.ts +0 -10
- package/dist/middleware/require-grant-access.d.ts.map +0 -1
- package/dist/middleware/require-grant-access.js +0 -14
- package/dist/middleware/require-grant-access.js.map +0 -1
- package/dist/schemas/api.d.ts.map +0 -1
- package/dist/schemas/api.js +0 -119
- package/dist/schemas/api.js.map +0 -1
- package/dist/server/routes.d.ts +0 -14
- package/dist/server/routes.d.ts.map +0 -1
- package/dist/server/routes.js +0 -200
- package/dist/server/routes.js.map +0 -1
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"serve.js","sourceRoot":"","sources":["../../src/commands/serve.ts"],"names":[],"mappings":"AAAA
|
|
1
|
+
{"version":3,"file":"serve.js","sourceRoot":"","sources":["../../src/commands/serve.ts"],"names":[],"mappings":"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"}
|
package/dist/config.d.ts
CHANGED
|
@@ -1,15 +1,24 @@
|
|
|
1
1
|
/**
|
|
2
|
-
*
|
|
2
|
+
* Server configuration schema and helpers.
|
|
3
3
|
*
|
|
4
|
-
*
|
|
4
|
+
* Runtime configuration is validated by @fastify/env and exposed as
|
|
5
|
+
* `fastify.config`. Logger level is resolved separately because the logger is
|
|
6
|
+
* configured before plugins are registered.
|
|
5
7
|
*/
|
|
6
|
-
|
|
8
|
+
declare module "fastify" {
|
|
9
|
+
interface FastifyInstance {
|
|
10
|
+
config: ServerConfig;
|
|
11
|
+
}
|
|
12
|
+
}
|
|
13
|
+
type LogLevel = "trace" | "debug" | "info" | "warn" | "error" | "fatal" | "silent";
|
|
14
|
+
interface ServerConfig {
|
|
7
15
|
port: number;
|
|
8
16
|
host: string;
|
|
9
17
|
databaseUrl: string;
|
|
10
18
|
refreshThresholdSeconds: number;
|
|
11
19
|
refreshTimeoutMs: number;
|
|
12
|
-
logLevel:
|
|
20
|
+
logLevel: LogLevel;
|
|
21
|
+
encryptionKey: string;
|
|
13
22
|
}
|
|
14
23
|
interface ConfigOverrides {
|
|
15
24
|
port?: string;
|
|
@@ -18,8 +27,50 @@ interface ConfigOverrides {
|
|
|
18
27
|
refreshThresholdSeconds?: string;
|
|
19
28
|
refreshTimeoutMs?: string;
|
|
20
29
|
logLevel?: string;
|
|
30
|
+
encryptionKey?: string;
|
|
31
|
+
}
|
|
32
|
+
interface BuildAppConfig {
|
|
33
|
+
logLevel: LogLevel;
|
|
21
34
|
}
|
|
22
|
-
|
|
23
|
-
|
|
24
|
-
|
|
35
|
+
declare const serverConfigSchema: {
|
|
36
|
+
readonly type: "object";
|
|
37
|
+
readonly required: readonly ["encryptionKey"];
|
|
38
|
+
readonly properties: {
|
|
39
|
+
readonly port: {
|
|
40
|
+
readonly type: "number";
|
|
41
|
+
readonly default: 3847;
|
|
42
|
+
};
|
|
43
|
+
readonly host: {
|
|
44
|
+
readonly type: "string";
|
|
45
|
+
readonly default: "127.0.0.1";
|
|
46
|
+
};
|
|
47
|
+
readonly databaseUrl: {
|
|
48
|
+
readonly type: "string";
|
|
49
|
+
readonly default: "postgresql://localhost:5432/axvault";
|
|
50
|
+
};
|
|
51
|
+
readonly refreshThresholdSeconds: {
|
|
52
|
+
readonly type: "number";
|
|
53
|
+
readonly minimum: 0;
|
|
54
|
+
readonly default: 3600;
|
|
55
|
+
};
|
|
56
|
+
readonly refreshTimeoutMs: {
|
|
57
|
+
readonly type: "number";
|
|
58
|
+
readonly minimum: 0;
|
|
59
|
+
readonly default: 30000;
|
|
60
|
+
};
|
|
61
|
+
readonly logLevel: {
|
|
62
|
+
readonly type: "string";
|
|
63
|
+
readonly enum: readonly ["trace", "debug", "info", "warn", "error", "fatal", "silent"];
|
|
64
|
+
readonly default: "info";
|
|
65
|
+
};
|
|
66
|
+
readonly encryptionKey: {
|
|
67
|
+
readonly type: "string";
|
|
68
|
+
readonly minLength: 32;
|
|
69
|
+
};
|
|
70
|
+
};
|
|
71
|
+
};
|
|
72
|
+
declare function createConfigData(overrides?: ConfigOverrides): Record<string, unknown>;
|
|
73
|
+
declare function resolveBuildAppConfig(overrides?: Pick<ConfigOverrides, "logLevel">): BuildAppConfig;
|
|
74
|
+
export { createConfigData, resolveBuildAppConfig, serverConfigSchema };
|
|
75
|
+
export type { BuildAppConfig, ConfigOverrides, ServerConfig };
|
|
25
76
|
//# sourceMappingURL=config.d.ts.map
|
package/dist/config.d.ts.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"config.d.ts","sourceRoot":"","sources":["../src/config.ts"],"names":[],"mappings":"AAAA
|
|
1
|
+
{"version":3,"file":"config.d.ts","sourceRoot":"","sources":["../src/config.ts"],"names":[],"mappings":"AAAA;;;;;;GAMG;AAEH,OAAO,QAAQ,SAAS,CAAC;IACvB,UAAU,eAAe;QACvB,MAAM,EAAE,YAAY,CAAC;KACtB;CACF;AAED,KAAK,QAAQ,GACT,OAAO,GACP,OAAO,GACP,MAAM,GACN,MAAM,GACN,OAAO,GACP,OAAO,GACP,QAAQ,CAAC;AAEb,UAAU,YAAY;IACpB,IAAI,EAAE,MAAM,CAAC;IACb,IAAI,EAAE,MAAM,CAAC;IACb,WAAW,EAAE,MAAM,CAAC;IACpB,uBAAuB,EAAE,MAAM,CAAC;IAChC,gBAAgB,EAAE,MAAM,CAAC;IACzB,QAAQ,EAAE,QAAQ,CAAC;IACnB,aAAa,EAAE,MAAM,CAAC;CACvB;AAED,UAAU,eAAe;IACvB,IAAI,CAAC,EAAE,MAAM,CAAC;IACd,IAAI,CAAC,EAAE,MAAM,CAAC;IACd,WAAW,CAAC,EAAE,MAAM,CAAC;IACrB,uBAAuB,CAAC,EAAE,MAAM,CAAC;IACjC,gBAAgB,CAAC,EAAE,MAAM,CAAC;IAC1B,QAAQ,CAAC,EAAE,MAAM,CAAC;IAClB,aAAa,CAAC,EAAE,MAAM,CAAC;CACxB;AAED,UAAU,cAAc;IACtB,QAAQ,EAAE,QAAQ,CAAC;CACpB;AAuBD,QAAA,MAAM,kBAAkB;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;CA2Bd,CAAC;AAEX,iBAAS,gBAAgB,CACvB,SAAS,GAAE,eAAoB,GAC9B,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAczB;AAED,iBAAS,qBAAqB,CAC5B,SAAS,GAAE,IAAI,CAAC,eAAe,EAAE,UAAU,CAAM,GAChD,cAAc,CAahB;AAED,OAAO,EAAE,gBAAgB,EAAE,qBAAqB,EAAE,kBAAkB,EAAE,CAAC;AACvE,YAAY,EAAE,cAAc,EAAE,eAAe,EAAE,YAAY,EAAE,CAAC"}
|
package/dist/config.js
CHANGED
|
@@ -1,7 +1,9 @@
|
|
|
1
1
|
/**
|
|
2
|
-
*
|
|
2
|
+
* Server configuration schema and helpers.
|
|
3
3
|
*
|
|
4
|
-
*
|
|
4
|
+
* Runtime configuration is validated by @fastify/env and exposed as
|
|
5
|
+
* `fastify.config`. Logger level is resolved separately because the logger is
|
|
6
|
+
* configured before plugins are registered.
|
|
5
7
|
*/
|
|
6
8
|
const DEFAULT_PORT = 3847;
|
|
7
9
|
const DEFAULT_HOST = "127.0.0.1";
|
|
@@ -18,45 +20,58 @@ const VALID_LOG_LEVELS = [
|
|
|
18
20
|
"fatal",
|
|
19
21
|
"silent",
|
|
20
22
|
];
|
|
21
|
-
|
|
22
|
-
|
|
23
|
-
|
|
24
|
-
|
|
25
|
-
|
|
26
|
-
|
|
27
|
-
|
|
28
|
-
|
|
29
|
-
|
|
30
|
-
|
|
31
|
-
|
|
23
|
+
function isLogLevel(value) {
|
|
24
|
+
return VALID_LOG_LEVELS.includes(value);
|
|
25
|
+
}
|
|
26
|
+
const serverConfigSchema = {
|
|
27
|
+
type: "object",
|
|
28
|
+
required: ["encryptionKey"],
|
|
29
|
+
properties: {
|
|
30
|
+
port: { type: "number", default: DEFAULT_PORT },
|
|
31
|
+
host: { type: "string", default: DEFAULT_HOST },
|
|
32
|
+
databaseUrl: { type: "string", default: DEFAULT_DATABASE_URL },
|
|
33
|
+
refreshThresholdSeconds: {
|
|
34
|
+
type: "number",
|
|
35
|
+
minimum: 0,
|
|
36
|
+
default: DEFAULT_REFRESH_THRESHOLD_SECONDS,
|
|
37
|
+
},
|
|
38
|
+
refreshTimeoutMs: {
|
|
39
|
+
type: "number",
|
|
40
|
+
minimum: 0,
|
|
41
|
+
default: DEFAULT_REFRESH_TIMEOUT_MS,
|
|
42
|
+
},
|
|
43
|
+
logLevel: {
|
|
44
|
+
type: "string",
|
|
45
|
+
enum: [...VALID_LOG_LEVELS],
|
|
46
|
+
default: DEFAULT_LOG_LEVEL,
|
|
47
|
+
},
|
|
48
|
+
encryptionKey: {
|
|
49
|
+
type: "string",
|
|
50
|
+
minLength: 32,
|
|
51
|
+
},
|
|
52
|
+
},
|
|
53
|
+
};
|
|
54
|
+
function createConfigData(overrides = {}) {
|
|
55
|
+
return {
|
|
56
|
+
port: overrides.port ?? process.env.AXVAULT_PORT,
|
|
57
|
+
host: overrides.host ?? process.env.AXVAULT_HOST,
|
|
58
|
+
databaseUrl: overrides.databaseUrl ?? process.env.AXVAULT_DATABASE_URL,
|
|
59
|
+
refreshThresholdSeconds: overrides.refreshThresholdSeconds ??
|
|
60
|
+
process.env.AXVAULT_REFRESH_THRESHOLD,
|
|
61
|
+
refreshTimeoutMs: overrides.refreshTimeoutMs ?? process.env.AXVAULT_REFRESH_TIMEOUT_MS,
|
|
62
|
+
logLevel: overrides.logLevel ?? process.env.AXVAULT_LOG_LEVEL,
|
|
63
|
+
encryptionKey: overrides.encryptionKey ?? process.env.AXVAULT_ENCRYPTION_KEY,
|
|
64
|
+
};
|
|
65
|
+
}
|
|
66
|
+
function resolveBuildAppConfig(overrides = {}) {
|
|
67
|
+
const rawLogLevel = overrides.logLevel ?? process.env.AXVAULT_LOG_LEVEL;
|
|
68
|
+
const logLevel = rawLogLevel ?? DEFAULT_LOG_LEVEL;
|
|
69
|
+
if (!isLogLevel(logLevel)) {
|
|
32
70
|
throw new Error(`Invalid log level: "${logLevel}". Must be one of: ${VALID_LOG_LEVELS.join(", ")}`);
|
|
33
71
|
}
|
|
34
72
|
return {
|
|
35
|
-
port,
|
|
36
|
-
host,
|
|
37
|
-
databaseUrl,
|
|
38
|
-
refreshThresholdSeconds,
|
|
39
|
-
refreshTimeoutMs,
|
|
40
73
|
logLevel,
|
|
41
74
|
};
|
|
42
75
|
}
|
|
43
|
-
|
|
44
|
-
if (!value)
|
|
45
|
-
return DEFAULT_PORT;
|
|
46
|
-
const port = Number.parseInt(value, 10);
|
|
47
|
-
if (Number.isNaN(port) || port < 1 || port > 65_535) {
|
|
48
|
-
throw new Error(`Invalid port: ${value}`);
|
|
49
|
-
}
|
|
50
|
-
return port;
|
|
51
|
-
}
|
|
52
|
-
function parseNonNegativeInt(value, defaultValue, name) {
|
|
53
|
-
if (!value)
|
|
54
|
-
return defaultValue;
|
|
55
|
-
const parsed = Number.parseInt(value, 10);
|
|
56
|
-
if (Number.isNaN(parsed) || parsed < 0) {
|
|
57
|
-
console.warn(`Invalid ${name} value "${value}", using default ${defaultValue}`);
|
|
58
|
-
return defaultValue;
|
|
59
|
-
}
|
|
60
|
-
return parsed;
|
|
61
|
-
}
|
|
76
|
+
export { createConfigData, resolveBuildAppConfig, serverConfigSchema };
|
|
62
77
|
//# sourceMappingURL=config.js.map
|
package/dist/config.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"config.js","sourceRoot":"","sources":["../src/config.ts"],"names":[],"mappings":"AAAA
|
|
1
|
+
{"version":3,"file":"config.js","sourceRoot":"","sources":["../src/config.ts"],"names":[],"mappings":"AAAA;;;;;;GAMG;AAyCH,MAAM,YAAY,GAAG,IAAI,CAAC;AAC1B,MAAM,YAAY,GAAG,WAAW,CAAC;AACjC,MAAM,oBAAoB,GAAG,qCAAqC,CAAC;AACnE,MAAM,iCAAiC,GAAG,IAAI,CAAC,CAAC,SAAS;AACzD,MAAM,0BAA0B,GAAG,MAAM,CAAC,CAAC,aAAa;AACxD,MAAM,iBAAiB,GAAa,MAAM,CAAC;AAE3C,MAAM,gBAAgB,GAAG;IACvB,OAAO;IACP,OAAO;IACP,MAAM;IACN,MAAM;IACN,OAAO;IACP,OAAO;IACP,QAAQ;CACA,CAAC;AAEX,SAAS,UAAU,CAAC,KAAa;IAC/B,OAAQ,gBAAsC,CAAC,QAAQ,CAAC,KAAK,CAAC,CAAC;AACjE,CAAC;AAED,MAAM,kBAAkB,GAAG;IACzB,IAAI,EAAE,QAAQ;IACd,QAAQ,EAAE,CAAC,eAAe,CAAC;IAC3B,UAAU,EAAE;QACV,IAAI,EAAE,EAAE,IAAI,EAAE,QAAQ,EAAE,OAAO,EAAE,YAAY,EAAE;QAC/C,IAAI,EAAE,EAAE,IAAI,EAAE,QAAQ,EAAE,OAAO,EAAE,YAAY,EAAE;QAC/C,WAAW,EAAE,EAAE,IAAI,EAAE,QAAQ,EAAE,OAAO,EAAE,oBAAoB,EAAE;QAC9D,uBAAuB,EAAE;YACvB,IAAI,EAAE,QAAQ;YACd,OAAO,EAAE,CAAC;YACV,OAAO,EAAE,iCAAiC;SAC3C;QACD,gBAAgB,EAAE;YAChB,IAAI,EAAE,QAAQ;YACd,OAAO,EAAE,CAAC;YACV,OAAO,EAAE,0BAA0B;SACpC;QACD,QAAQ,EAAE;YACR,IAAI,EAAE,QAAQ;YACd,IAAI,EAAE,CAAC,GAAG,gBAAgB,CAAC;YAC3B,OAAO,EAAE,iBAAiB;SAC3B;QACD,aAAa,EAAE;YACb,IAAI,EAAE,QAAQ;YACd,SAAS,EAAE,EAAE;SACd;KACF;CACO,CAAC;AAEX,SAAS,gBAAgB,CACvB,YAA6B,EAAE;IAE/B,OAAO;QACL,IAAI,EAAE,SAAS,CAAC,IAAI,IAAI,OAAO,CAAC,GAAG,CAAC,YAAY;QAChD,IAAI,EAAE,SAAS,CAAC,IAAI,IAAI,OAAO,CAAC,GAAG,CAAC,YAAY;QAChD,WAAW,EAAE,SAAS,CAAC,WAAW,IAAI,OAAO,CAAC,GAAG,CAAC,oBAAoB;QACtE,uBAAuB,EACrB,SAAS,CAAC,uBAAuB;YACjC,OAAO,CAAC,GAAG,CAAC,yBAAyB;QACvC,gBAAgB,EACd,SAAS,CAAC,gBAAgB,IAAI,OAAO,CAAC,GAAG,CAAC,0BAA0B;QACtE,QAAQ,EAAE,SAAS,CAAC,QAAQ,IAAI,OAAO,CAAC,GAAG,CAAC,iBAAiB;QAC7D,aAAa,EACX,SAAS,CAAC,aAAa,IAAI,OAAO,CAAC,GAAG,CAAC,sBAAsB;KAChE,CAAC;AACJ,CAAC;AAED,SAAS,qBAAqB,CAC5B,YAA+C,EAAE;IAEjD,MAAM,WAAW,GAAG,SAAS,CAAC,QAAQ,IAAI,OAAO,CAAC,GAAG,CAAC,iBAAiB,CAAC;IACxE,MAAM,QAAQ,GAAG,WAAW,IAAI,iBAAiB,CAAC;IAElD,IAAI,CAAC,UAAU,CAAC,QAAQ,CAAC,EAAE,CAAC;QAC1B,MAAM,IAAI,KAAK,CACb,uBAAuB,QAAQ,sBAAsB,gBAAgB,CAAC,IAAI,CAAC,IAAI,CAAC,EAAE,CACnF,CAAC;IACJ,CAAC;IAED,OAAO;QACL,QAAQ;KACT,CAAC;AACJ,CAAC;AAED,OAAO,EAAE,gBAAgB,EAAE,qBAAqB,EAAE,kBAAkB,EAAE,CAAC"}
|
|
@@ -0,0 +1,14 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Bootstrap API key creation for first server startup.
|
|
3
|
+
*
|
|
4
|
+
* Serializes the bootstrap check inside a transaction-scoped advisory lock so
|
|
5
|
+
* concurrent first-time startups cannot mint multiple root keys.
|
|
6
|
+
*/
|
|
7
|
+
import type { PoolClient } from "pg";
|
|
8
|
+
import { type ApiKeyWithSecret } from "./repositories/api-keys.js";
|
|
9
|
+
interface TransactionalDatabase {
|
|
10
|
+
transact<TResult>(runInTransaction: (client: PoolClient) => Promise<TResult>): Promise<TResult>;
|
|
11
|
+
}
|
|
12
|
+
declare function bootstrapApiKey(database: TransactionalDatabase): Promise<ApiKeyWithSecret | undefined>;
|
|
13
|
+
export { bootstrapApiKey };
|
|
14
|
+
//# sourceMappingURL=bootstrap-api-key.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"bootstrap-api-key.d.ts","sourceRoot":"","sources":["../../src/db/bootstrap-api-key.ts"],"names":[],"mappings":"AAAA;;;;;GAKG;AAEH,OAAO,KAAK,EAAE,UAAU,EAAE,MAAM,IAAI,CAAC;AACrC,OAAO,EAEL,KAAK,gBAAgB,EACtB,MAAM,4BAA4B,CAAC;AAIpC,UAAU,qBAAqB;IAC7B,QAAQ,CAAC,OAAO,EACd,gBAAgB,EAAE,CAAC,MAAM,EAAE,UAAU,KAAK,OAAO,CAAC,OAAO,CAAC,GACzD,OAAO,CAAC,OAAO,CAAC,CAAC;CACrB;AAED,iBAAe,eAAe,CAC5B,QAAQ,EAAE,qBAAqB,GAC9B,OAAO,CAAC,gBAAgB,GAAG,SAAS,CAAC,CAmBvC;AAED,OAAO,EAAE,eAAe,EAAE,CAAC"}
|
|
@@ -0,0 +1,26 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Bootstrap API key creation for first server startup.
|
|
3
|
+
*
|
|
4
|
+
* Serializes the bootstrap check inside a transaction-scoped advisory lock so
|
|
5
|
+
* concurrent first-time startups cannot mint multiple root keys.
|
|
6
|
+
*/
|
|
7
|
+
import { createApiKey, } from "./repositories/api-keys.js";
|
|
8
|
+
const BOOTSTRAP_API_KEY_LOCK_ID = 980_641_073;
|
|
9
|
+
async function bootstrapApiKey(database) {
|
|
10
|
+
return database.transact(async (client) => {
|
|
11
|
+
await client.query("SELECT pg_advisory_xact_lock($1)", [
|
|
12
|
+
BOOTSTRAP_API_KEY_LOCK_ID,
|
|
13
|
+
]);
|
|
14
|
+
const result = await client.query("SELECT EXISTS (SELECT 1 FROM api_keys) AS has_api_keys");
|
|
15
|
+
if (result.rows[0]?.has_api_keys)
|
|
16
|
+
return;
|
|
17
|
+
return createApiKey(client, {
|
|
18
|
+
name: "Bootstrap Admin",
|
|
19
|
+
readAccess: ["*"],
|
|
20
|
+
writeAccess: ["*"],
|
|
21
|
+
grantAccess: ["*"],
|
|
22
|
+
});
|
|
23
|
+
});
|
|
24
|
+
}
|
|
25
|
+
export { bootstrapApiKey };
|
|
26
|
+
//# sourceMappingURL=bootstrap-api-key.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"bootstrap-api-key.js","sourceRoot":"","sources":["../../src/db/bootstrap-api-key.ts"],"names":[],"mappings":"AAAA;;;;;GAKG;AAGH,OAAO,EACL,YAAY,GAEb,MAAM,4BAA4B,CAAC;AAEpC,MAAM,yBAAyB,GAAG,WAAW,CAAC;AAQ9C,KAAK,UAAU,eAAe,CAC5B,QAA+B;IAE/B,OAAO,QAAQ,CAAC,QAAQ,CAAC,KAAK,EAAE,MAAM,EAAE,EAAE;QACxC,MAAM,MAAM,CAAC,KAAK,CAAC,kCAAkC,EAAE;YACrD,yBAAyB;SAC1B,CAAC,CAAC;QAEH,MAAM,MAAM,GAAG,MAAM,MAAM,CAAC,KAAK,CAC/B,wDAAwD,CACzD,CAAC;QAEF,IAAI,MAAM,CAAC,IAAI,CAAC,CAAC,CAAC,EAAE,YAAY;YAAE,OAAO;QAEzC,OAAO,YAAY,CAAC,MAAM,EAAE;YAC1B,IAAI,EAAE,iBAAiB;YACvB,UAAU,EAAE,CAAC,GAAG,CAAC;YACjB,WAAW,EAAE,CAAC,GAAG,CAAC;YAClB,WAAW,EAAE,CAAC,GAAG,CAAC;SACnB,CAAC,CAAC;IACL,CAAC,CAAC,CAAC;AACL,CAAC;AAED,OAAO,EAAE,eAAe,EAAE,CAAC"}
|
|
@@ -1,7 +1,6 @@
|
|
|
1
1
|
-- Initial schema for axvault.
|
|
2
|
-
-- Combines SQLite v1-v3 into a single PostgreSQL migration.
|
|
3
2
|
|
|
4
|
-
CREATE TABLE api_keys (
|
|
3
|
+
CREATE TABLE IF NOT EXISTS api_keys (
|
|
5
4
|
id TEXT PRIMARY KEY,
|
|
6
5
|
name TEXT NOT NULL,
|
|
7
6
|
key_hash TEXT NOT NULL UNIQUE,
|
|
@@ -13,7 +12,7 @@ CREATE TABLE api_keys (
|
|
|
13
12
|
last_used_at BIGINT
|
|
14
13
|
);
|
|
15
14
|
|
|
16
|
-
CREATE TABLE credentials (
|
|
15
|
+
CREATE TABLE IF NOT EXISTS credentials (
|
|
17
16
|
name TEXT PRIMARY KEY,
|
|
18
17
|
agent TEXT NOT NULL DEFAULT '',
|
|
19
18
|
provider TEXT DEFAULT NULL,
|
|
@@ -27,7 +26,7 @@ CREATE TABLE credentials (
|
|
|
27
26
|
updated_at BIGINT NOT NULL
|
|
28
27
|
);
|
|
29
28
|
|
|
30
|
-
CREATE TABLE audit_log (
|
|
29
|
+
CREATE TABLE IF NOT EXISTS audit_log (
|
|
31
30
|
id INTEGER GENERATED ALWAYS AS IDENTITY PRIMARY KEY,
|
|
32
31
|
timestamp BIGINT NOT NULL,
|
|
33
32
|
api_key_id TEXT,
|
|
@@ -37,4 +36,6 @@ CREATE TABLE audit_log (
|
|
|
37
36
|
error_message TEXT
|
|
38
37
|
);
|
|
39
38
|
|
|
40
|
-
|
|
39
|
+
ALTER TABLE audit_log ADD COLUMN IF NOT EXISTS detail TEXT;
|
|
40
|
+
|
|
41
|
+
CREATE INDEX IF NOT EXISTS idx_audit_log_timestamp ON audit_log(timestamp DESC);
|
|
@@ -13,6 +13,7 @@ interface AuditLogEntry {
|
|
|
13
13
|
credentialName: string | undefined;
|
|
14
14
|
success: boolean;
|
|
15
15
|
errorMessage: string | undefined;
|
|
16
|
+
detail: string | undefined;
|
|
16
17
|
}
|
|
17
18
|
/** Log a credential access event */
|
|
18
19
|
declare function logAccess(database: Queryable, entry: {
|
|
@@ -21,6 +22,7 @@ declare function logAccess(database: Queryable, entry: {
|
|
|
21
22
|
credentialName?: string;
|
|
22
23
|
success: boolean;
|
|
23
24
|
errorMessage?: string;
|
|
25
|
+
detail?: string;
|
|
24
26
|
}): Promise<void>;
|
|
25
27
|
/** Get recent audit log entries */
|
|
26
28
|
declare function getRecentLogs(database: Queryable, options?: {
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"audit-log.d.ts","sourceRoot":"","sources":["../../../src/db/repositories/audit-log.ts"],"names":[],"mappings":"AAAA;;;;GAIG;AAEH,OAAO,KAAK,EAAe,SAAS,EAAE,MAAM,aAAa,CAAC;AAE1D,sBAAsB;AACtB,UAAU,aAAa;IACrB,EAAE,EAAE,MAAM,CAAC;IACX,SAAS,EAAE,IAAI,CAAC;IAChB,QAAQ,EAAE,MAAM,GAAG,SAAS,CAAC;IAC7B,MAAM,EAAE,MAAM,GAAG,MAAM,GAAG,OAAO,GAAG,QAAQ,GAAG,SAAS,GAAG,MAAM,GAAG,OAAO,CAAC;IAC5E,cAAc,EAAE,MAAM,GAAG,SAAS,CAAC;IACnC,OAAO,EAAE,OAAO,CAAC;IACjB,YAAY,EAAE,MAAM,GAAG,SAAS,CAAC;
|
|
1
|
+
{"version":3,"file":"audit-log.d.ts","sourceRoot":"","sources":["../../../src/db/repositories/audit-log.ts"],"names":[],"mappings":"AAAA;;;;GAIG;AAEH,OAAO,KAAK,EAAe,SAAS,EAAE,MAAM,aAAa,CAAC;AAE1D,sBAAsB;AACtB,UAAU,aAAa;IACrB,EAAE,EAAE,MAAM,CAAC;IACX,SAAS,EAAE,IAAI,CAAC;IAChB,QAAQ,EAAE,MAAM,GAAG,SAAS,CAAC;IAC7B,MAAM,EAAE,MAAM,GAAG,MAAM,GAAG,OAAO,GAAG,QAAQ,GAAG,SAAS,GAAG,MAAM,GAAG,OAAO,CAAC;IAC5E,cAAc,EAAE,MAAM,GAAG,SAAS,CAAC;IACnC,OAAO,EAAE,OAAO,CAAC;IACjB,YAAY,EAAE,MAAM,GAAG,SAAS,CAAC;IACjC,MAAM,EAAE,MAAM,GAAG,SAAS,CAAC;CAC5B;AAkBD,oCAAoC;AACpC,iBAAe,SAAS,CACtB,QAAQ,EAAE,SAAS,EACnB,KAAK,EAAE;IACL,QAAQ,CAAC,EAAE,MAAM,CAAC;IAClB,MAAM,EAAE,aAAa,CAAC,QAAQ,CAAC,CAAC;IAChC,cAAc,CAAC,EAAE,MAAM,CAAC;IACxB,OAAO,EAAE,OAAO,CAAC;IACjB,YAAY,CAAC,EAAE,MAAM,CAAC;IACtB,MAAM,CAAC,EAAE,MAAM,CAAC;CACjB,GACA,OAAO,CAAC,IAAI,CAAC,CAef;AAED,mCAAmC;AACnC,iBAAe,aAAa,CAC1B,QAAQ,EAAE,SAAS,EACnB,OAAO,CAAC,EAAE;IAAE,KAAK,CAAC,EAAE,MAAM,CAAC;IAAC,QAAQ,CAAC,EAAE,MAAM,CAAA;CAAE,GAC9C,OAAO,CAAC,aAAa,EAAE,CAAC,CAgB1B;AAED,yCAAyC;AACzC,iBAAe,oBAAoB,CACjC,QAAQ,EAAE,SAAS,EACnB,cAAc,EAAE,MAAM,EACtB,MAAM,SAAK,GACV,OAAO,CAAC,aAAa,EAAE,CAAC,CAO1B;AAED,kCAAkC;AAClC,iBAAe,YAAY,CACzB,QAAQ,EAAE,SAAS,EACnB,aAAa,EAAE,MAAM,GACpB,OAAO,CAAC,MAAM,CAAC,CAQjB;AAED,OAAO,EAAE,oBAAoB,EAAE,aAAa,EAAE,SAAS,EAAE,YAAY,EAAE,CAAC;AACxE,YAAY,EAAE,aAAa,EAAE,CAAC"}
|
|
@@ -13,19 +13,21 @@ function rowToEntry(row) {
|
|
|
13
13
|
credentialName: row.credential_name ?? undefined,
|
|
14
14
|
success: row.success,
|
|
15
15
|
errorMessage: row.error_message ?? undefined,
|
|
16
|
+
detail: row.detail ?? undefined,
|
|
16
17
|
};
|
|
17
18
|
}
|
|
18
|
-
const SELECT_COLUMNS = `id, timestamp, api_key_id, action, credential_name, success, error_message`;
|
|
19
|
+
const SELECT_COLUMNS = `id, timestamp, api_key_id, action, credential_name, success, error_message, detail`;
|
|
19
20
|
/** Log a credential access event */
|
|
20
21
|
async function logAccess(database, entry) {
|
|
21
22
|
/* eslint-disable unicorn/no-null -- PostgreSQL requires null for NULL values */
|
|
22
|
-
await database.query(`INSERT INTO audit_log (timestamp, api_key_id, action, credential_name, success, error_message) VALUES ($1, $2, $3, $4, $5, $6)`, [
|
|
23
|
+
await database.query(`INSERT INTO audit_log (timestamp, api_key_id, action, credential_name, success, error_message, detail) VALUES ($1, $2, $3, $4, $5, $6, $7)`, [
|
|
23
24
|
Date.now(),
|
|
24
25
|
entry.apiKeyId ?? null,
|
|
25
26
|
entry.action,
|
|
26
27
|
entry.credentialName ?? null,
|
|
27
28
|
entry.success,
|
|
28
29
|
entry.errorMessage ?? null,
|
|
30
|
+
entry.detail ?? null,
|
|
29
31
|
]);
|
|
30
32
|
/* eslint-enable unicorn/no-null */
|
|
31
33
|
}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"audit-log.js","sourceRoot":"","sources":["../../../src/db/repositories/audit-log.ts"],"names":[],"mappings":"AAAA;;;;GAIG;
|
|
1
|
+
{"version":3,"file":"audit-log.js","sourceRoot":"","sources":["../../../src/db/repositories/audit-log.ts"],"names":[],"mappings":"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"}
|
|
@@ -1,4 +1,16 @@
|
|
|
1
1
|
import type pg from "pg";
|
|
2
|
+
/**
|
|
3
|
+
* Run all SQL migration files in order.
|
|
4
|
+
*
|
|
5
|
+
* Migration files must be replay-safe because this runner executes every SQL
|
|
6
|
+
* file on every startup without tracking state.
|
|
7
|
+
*
|
|
8
|
+
* That means each migration must be written so running it repeatedly is safe:
|
|
9
|
+
* `CREATE ... IF NOT EXISTS`, `ALTER ... ADD COLUMN IF NOT EXISTS`, or other
|
|
10
|
+
* guarded statements. If a future schema change cannot be expressed safely that
|
|
11
|
+
* way, replace this strategy with tracked migrations instead of adding a
|
|
12
|
+
* one-shot migration here.
|
|
13
|
+
*/
|
|
2
14
|
declare function runMigrations(pool: pg.Pool, migrationsDirectory: string): Promise<void>;
|
|
3
15
|
export { runMigrations };
|
|
4
16
|
//# sourceMappingURL=run-migrations.d.ts.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"run-migrations.d.ts","sourceRoot":"","sources":["../../src/db/run-migrations.ts"],"names":[],"mappings":"AAGA,OAAO,KAAK,EAAE,MAAM,IAAI,CAAC;AAEzB,iBAAe,aAAa,CAC1B,IAAI,EAAE,EAAE,CAAC,IAAI,EACb,mBAAmB,EAAE,MAAM,GAC1B,OAAO,CAAC,IAAI,CAAC,
|
|
1
|
+
{"version":3,"file":"run-migrations.d.ts","sourceRoot":"","sources":["../../src/db/run-migrations.ts"],"names":[],"mappings":"AAGA,OAAO,KAAK,EAAE,MAAM,IAAI,CAAC;AAEzB;;;;;;;;;;;GAWG;AACH,iBAAe,aAAa,CAC1B,IAAI,EAAE,EAAE,CAAC,IAAI,EACb,mBAAmB,EAAE,MAAM,GAC1B,OAAO,CAAC,IAAI,CAAC,CAUf;AAED,OAAO,EAAE,aAAa,EAAE,CAAC"}
|
|
@@ -1,50 +1,25 @@
|
|
|
1
1
|
import { readdir, readFile } from "node:fs/promises";
|
|
2
2
|
import path from "node:path";
|
|
3
|
+
/**
|
|
4
|
+
* Run all SQL migration files in order.
|
|
5
|
+
*
|
|
6
|
+
* Migration files must be replay-safe because this runner executes every SQL
|
|
7
|
+
* file on every startup without tracking state.
|
|
8
|
+
*
|
|
9
|
+
* That means each migration must be written so running it repeatedly is safe:
|
|
10
|
+
* `CREATE ... IF NOT EXISTS`, `ALTER ... ADD COLUMN IF NOT EXISTS`, or other
|
|
11
|
+
* guarded statements. If a future schema change cannot be expressed safely that
|
|
12
|
+
* way, replace this strategy with tracked migrations instead of adding a
|
|
13
|
+
* one-shot migration here.
|
|
14
|
+
*/
|
|
3
15
|
async function runMigrations(pool, migrationsDirectory) {
|
|
4
|
-
const
|
|
5
|
-
|
|
6
|
-
|
|
7
|
-
|
|
8
|
-
|
|
9
|
-
|
|
10
|
-
|
|
11
|
-
applied_at TIMESTAMPTZ NOT NULL DEFAULT NOW()
|
|
12
|
-
)
|
|
13
|
-
`);
|
|
14
|
-
const { rows: applied } = await client.query("SELECT version FROM schema_migrations ORDER BY version");
|
|
15
|
-
const appliedVersions = new Set(applied.map((r) => r.version));
|
|
16
|
-
const files = await readdir(migrationsDirectory);
|
|
17
|
-
const sqlFiles = files
|
|
18
|
-
.filter((f) => f.endsWith(".sql"))
|
|
19
|
-
// eslint-disable-next-line unicorn/no-array-sort -- toSorted requires es2023 lib
|
|
20
|
-
.sort((a, b) => a.localeCompare(b, undefined, { numeric: true }));
|
|
21
|
-
for (const file of sqlFiles) {
|
|
22
|
-
const match = file.match(/^(\d+)-(.+)\.sql$/u);
|
|
23
|
-
if (!match?.[1])
|
|
24
|
-
continue;
|
|
25
|
-
const version = Number.parseInt(match[1], 10);
|
|
26
|
-
if (appliedVersions.has(version))
|
|
27
|
-
continue;
|
|
28
|
-
const sql = await readFile(path.join(migrationsDirectory, file), "utf8");
|
|
29
|
-
await client.query("BEGIN");
|
|
30
|
-
try {
|
|
31
|
-
await client.query(sql);
|
|
32
|
-
await client.query("INSERT INTO schema_migrations (version, name) VALUES ($1, $2)", [version, file]);
|
|
33
|
-
await client.query("COMMIT");
|
|
34
|
-
}
|
|
35
|
-
catch (error) {
|
|
36
|
-
await client.query("ROLLBACK");
|
|
37
|
-
throw error;
|
|
38
|
-
}
|
|
39
|
-
}
|
|
40
|
-
}
|
|
41
|
-
finally {
|
|
42
|
-
try {
|
|
43
|
-
await client.query("SELECT pg_advisory_unlock(1)");
|
|
44
|
-
}
|
|
45
|
-
finally {
|
|
46
|
-
client.release();
|
|
47
|
-
}
|
|
16
|
+
const files = await readdir(migrationsDirectory);
|
|
17
|
+
const sqlFiles = files
|
|
18
|
+
.filter((f) => f.endsWith(".sql"))
|
|
19
|
+
.toSorted((a, b) => a.localeCompare(b, undefined, { numeric: true }));
|
|
20
|
+
for (const file of sqlFiles) {
|
|
21
|
+
const sql = await readFile(path.join(migrationsDirectory, file), "utf8");
|
|
22
|
+
await pool.query(sql);
|
|
48
23
|
}
|
|
49
24
|
}
|
|
50
25
|
export { runMigrations };
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"run-migrations.js","sourceRoot":"","sources":["../../src/db/run-migrations.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,OAAO,EAAE,QAAQ,EAAE,MAAM,kBAAkB,CAAC;AACrD,OAAO,IAAI,MAAM,WAAW,CAAC;AAI7B,KAAK,UAAU,aAAa,CAC1B,IAAa,EACb,mBAA2B;IAE3B,MAAM,
|
|
1
|
+
{"version":3,"file":"run-migrations.js","sourceRoot":"","sources":["../../src/db/run-migrations.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,OAAO,EAAE,QAAQ,EAAE,MAAM,kBAAkB,CAAC;AACrD,OAAO,IAAI,MAAM,WAAW,CAAC;AAI7B;;;;;;;;;;;GAWG;AACH,KAAK,UAAU,aAAa,CAC1B,IAAa,EACb,mBAA2B;IAE3B,MAAM,KAAK,GAAG,MAAM,OAAO,CAAC,mBAAmB,CAAC,CAAC;IACjD,MAAM,QAAQ,GAAG,KAAK;SACnB,MAAM,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,QAAQ,CAAC,MAAM,CAAC,CAAC;SACjC,QAAQ,CAAC,CAAC,CAAC,EAAE,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,aAAa,CAAC,CAAC,EAAE,SAAS,EAAE,EAAE,OAAO,EAAE,IAAI,EAAE,CAAC,CAAC,CAAC;IAExE,KAAK,MAAM,IAAI,IAAI,QAAQ,EAAE,CAAC;QAC5B,MAAM,GAAG,GAAG,MAAM,QAAQ,CAAC,IAAI,CAAC,IAAI,CAAC,mBAAmB,EAAE,IAAI,CAAC,EAAE,MAAM,CAAC,CAAC;QACzE,MAAM,IAAI,CAAC,KAAK,CAAC,GAAG,CAAC,CAAC;IACxB,CAAC;AACH,CAAC;AAED,OAAO,EAAE,aAAa,EAAE,CAAC"}
|
package/dist/db/types.d.ts
CHANGED
package/dist/db/types.d.ts.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"types.d.ts","sourceRoot":"","sources":["../../src/db/types.ts"],"names":[],"mappings":"AAAA;;GAEG;AAEH,OAAO,KAAK,EAAE,IAAI,EAAE,UAAU,EAAE,MAAM,IAAI,CAAC;AAE3C,8EAA8E;AAC9E,MAAM,MAAM,SAAS,GAAG,IAAI,CAAC,IAAI,GAAG,UAAU,EAAE,OAAO,CAAC,CAAC;AAEzD,oCAAoC;AACpC,MAAM,WAAW,SAAS;IACxB,EAAE,EAAE,MAAM,CAAC;IACX,IAAI,EAAE,MAAM,CAAC;IACb,QAAQ,EAAE,MAAM,CAAC;IACjB,UAAU,EAAE,MAAM,GAAG,IAAI,CAAC;IAC1B,WAAW,EAAE,MAAM,CAAC;IACpB,YAAY,EAAE,MAAM,CAAC;IACrB,YAAY,EAAE,MAAM,CAAC;IACrB,UAAU,EAAE,MAAM,CAAC;IACnB,YAAY,EAAE,MAAM,GAAG,IAAI,CAAC;CAC7B;AAED,sCAAsC;AACtC,MAAM,WAAW,WAAW;IAC1B,EAAE,EAAE,MAAM,CAAC;IACX,SAAS,EAAE,MAAM,CAAC;IAClB,UAAU,EAAE,MAAM,GAAG,IAAI,CAAC;IAC1B,MAAM,EAAE,MAAM,CAAC;IACf,eAAe,EAAE,MAAM,GAAG,IAAI,CAAC;IAC/B,OAAO,EAAE,OAAO,CAAC;IACjB,aAAa,EAAE,MAAM,GAAG,IAAI,CAAC;
|
|
1
|
+
{"version":3,"file":"types.d.ts","sourceRoot":"","sources":["../../src/db/types.ts"],"names":[],"mappings":"AAAA;;GAEG;AAEH,OAAO,KAAK,EAAE,IAAI,EAAE,UAAU,EAAE,MAAM,IAAI,CAAC;AAE3C,8EAA8E;AAC9E,MAAM,MAAM,SAAS,GAAG,IAAI,CAAC,IAAI,GAAG,UAAU,EAAE,OAAO,CAAC,CAAC;AAEzD,oCAAoC;AACpC,MAAM,WAAW,SAAS;IACxB,EAAE,EAAE,MAAM,CAAC;IACX,IAAI,EAAE,MAAM,CAAC;IACb,QAAQ,EAAE,MAAM,CAAC;IACjB,UAAU,EAAE,MAAM,GAAG,IAAI,CAAC;IAC1B,WAAW,EAAE,MAAM,CAAC;IACpB,YAAY,EAAE,MAAM,CAAC;IACrB,YAAY,EAAE,MAAM,CAAC;IACrB,UAAU,EAAE,MAAM,CAAC;IACnB,YAAY,EAAE,MAAM,GAAG,IAAI,CAAC;CAC7B;AAED,sCAAsC;AACtC,MAAM,WAAW,WAAW;IAC1B,EAAE,EAAE,MAAM,CAAC;IACX,SAAS,EAAE,MAAM,CAAC;IAClB,UAAU,EAAE,MAAM,GAAG,IAAI,CAAC;IAC1B,MAAM,EAAE,MAAM,CAAC;IACf,eAAe,EAAE,MAAM,GAAG,IAAI,CAAC;IAC/B,OAAO,EAAE,OAAO,CAAC;IACjB,aAAa,EAAE,MAAM,GAAG,IAAI,CAAC;IAC7B,MAAM,EAAE,MAAM,GAAG,IAAI,CAAC;CACvB;AAED,uCAAuC;AACvC,MAAM,WAAW,aAAa;IAC5B,IAAI,EAAE,MAAM,CAAC;IACb,KAAK,EAAE,MAAM,CAAC;IACd,QAAQ,EAAE,MAAM,GAAG,IAAI,CAAC;IACxB,YAAY,EAAE,MAAM,GAAG,IAAI,CAAC;IAC5B,KAAK,EAAE,MAAM,GAAG,IAAI,CAAC;IACrB,cAAc,EAAE,MAAM,CAAC;IACvB,IAAI,EAAE,MAAM,CAAC;IACb,EAAE,EAAE,MAAM,CAAC;IACX,QAAQ,EAAE,MAAM,CAAC;IACjB,UAAU,EAAE,MAAM,CAAC;IACnB,UAAU,EAAE,MAAM,CAAC;CACpB;AAED,gDAAgD;AAChD,MAAM,WAAW,WAAW;IAC1B,IAAI,EAAE,MAAM,CAAC;IACb,KAAK,EAAE,MAAM,CAAC;IACd,QAAQ,EAAE,MAAM,GAAG,IAAI,CAAC;IACxB,YAAY,EAAE,MAAM,GAAG,IAAI,CAAC;IAC5B,KAAK,EAAE,MAAM,GAAG,IAAI,CAAC;IACrB,UAAU,EAAE,MAAM,CAAC;IACnB,UAAU,EAAE,MAAM,CAAC;CACpB"}
|
package/dist/index.d.ts
CHANGED
|
@@ -1,15 +1,21 @@
|
|
|
1
1
|
/**
|
|
2
2
|
* axvault - Remote credential storage server for axkit.
|
|
3
3
|
*
|
|
4
|
-
* This module exports
|
|
4
|
+
* This module exports server-composition primitives and repository helpers.
|
|
5
|
+
* The legacy createServer/createPool surface was intentionally removed; build
|
|
6
|
+
* the app with `buildApp()` plus the exported Fastify plugins instead.
|
|
5
7
|
*/
|
|
6
8
|
export type { ServerConfig } from "./config.js";
|
|
7
|
-
export {
|
|
8
|
-
export
|
|
9
|
-
export {
|
|
10
|
-
export {
|
|
11
|
-
export {
|
|
9
|
+
export type { BuildAppConfig } from "./config.js";
|
|
10
|
+
export { buildApp } from "./server/server.js";
|
|
11
|
+
export { default as configPlugin } from "./server/plugins/config.js";
|
|
12
|
+
export { default as databasePlugin } from "./server/plugins/database.js";
|
|
13
|
+
export { default as authPlugin } from "./server/plugins/auth.js";
|
|
14
|
+
export { default as healthRoutes } from "./server/routes/health.js";
|
|
15
|
+
export { default as credentialRoutes } from "./server/routes/credentials.js";
|
|
16
|
+
export { default as keyRoutes } from "./server/routes/keys.js";
|
|
12
17
|
export { runMigrations } from "./db/run-migrations.js";
|
|
18
|
+
export { bootstrapApiKey } from "./db/bootstrap-api-key.js";
|
|
13
19
|
export type { Queryable } from "./db/types.js";
|
|
14
20
|
export type { ApiKeyRecord, ApiKeyWithSecret, } from "./db/repositories/api-keys.js";
|
|
15
21
|
export { createApiKey, deleteApiKey, findApiKeyById, findApiKeyByKey, hasGrantAccess, hasReadAccess, hasWriteAccess, listApiKeys, updateApiKeyAccess, updateLastUsed, } from "./db/repositories/api-keys.js";
|
package/dist/index.d.ts.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAAA
|
|
1
|
+
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAAA;;;;;;GAMG;AAEH,YAAY,EAAE,YAAY,EAAE,MAAM,aAAa,CAAC;AAChD,YAAY,EAAE,cAAc,EAAE,MAAM,aAAa,CAAC;AAClD,OAAO,EAAE,QAAQ,EAAE,MAAM,oBAAoB,CAAC;AAG9C,OAAO,EAAE,OAAO,IAAI,YAAY,EAAE,MAAM,4BAA4B,CAAC;AACrE,OAAO,EAAE,OAAO,IAAI,cAAc,EAAE,MAAM,8BAA8B,CAAC;AACzE,OAAO,EAAE,OAAO,IAAI,UAAU,EAAE,MAAM,0BAA0B,CAAC;AAGjE,OAAO,EAAE,OAAO,IAAI,YAAY,EAAE,MAAM,2BAA2B,CAAC;AACpE,OAAO,EAAE,OAAO,IAAI,gBAAgB,EAAE,MAAM,gCAAgC,CAAC;AAC7E,OAAO,EAAE,OAAO,IAAI,SAAS,EAAE,MAAM,yBAAyB,CAAC;AAG/D,OAAO,EAAE,aAAa,EAAE,MAAM,wBAAwB,CAAC;AACvD,OAAO,EAAE,eAAe,EAAE,MAAM,2BAA2B,CAAC;AAC5D,YAAY,EAAE,SAAS,EAAE,MAAM,eAAe,CAAC;AAG/C,YAAY,EACV,YAAY,EACZ,gBAAgB,GACjB,MAAM,+BAA+B,CAAC;AACvC,OAAO,EACL,YAAY,EACZ,YAAY,EACZ,cAAc,EACd,eAAe,EACf,cAAc,EACd,aAAa,EACb,cAAc,EACd,WAAW,EACX,kBAAkB,EAClB,cAAc,GACf,MAAM,+BAA+B,CAAC;AACvC,YAAY,EAAE,aAAa,EAAE,MAAM,gCAAgC,CAAC;AACpE,OAAO,EACL,oBAAoB,EACpB,aAAa,EACb,SAAS,EACT,YAAY,GACb,MAAM,gCAAgC,CAAC;AACxC,YAAY,EACV,kBAAkB,EAClB,gBAAgB,GACjB,MAAM,kCAAkC,CAAC;AAC1C,OAAO,EACL,gBAAgB,EAChB,aAAa,EACb,eAAe,EACf,wBAAwB,EACxB,wBAAwB,EACxB,gBAAgB,GACjB,MAAM,kCAAkC,CAAC"}
|
package/dist/index.js
CHANGED
|
@@ -1,14 +1,22 @@
|
|
|
1
1
|
/**
|
|
2
2
|
* axvault - Remote credential storage server for axkit.
|
|
3
3
|
*
|
|
4
|
-
* This module exports
|
|
4
|
+
* This module exports server-composition primitives and repository helpers.
|
|
5
|
+
* The legacy createServer/createPool surface was intentionally removed; build
|
|
6
|
+
* the app with `buildApp()` plus the exported Fastify plugins instead.
|
|
5
7
|
*/
|
|
6
|
-
export {
|
|
7
|
-
|
|
8
|
-
export {
|
|
9
|
-
|
|
10
|
-
export {
|
|
8
|
+
export { buildApp } from "./server/server.js";
|
|
9
|
+
// Plugins
|
|
10
|
+
export { default as configPlugin } from "./server/plugins/config.js";
|
|
11
|
+
export { default as databasePlugin } from "./server/plugins/database.js";
|
|
12
|
+
export { default as authPlugin } from "./server/plugins/auth.js";
|
|
13
|
+
// Route plugins
|
|
14
|
+
export { default as healthRoutes } from "./server/routes/health.js";
|
|
15
|
+
export { default as credentialRoutes } from "./server/routes/credentials.js";
|
|
16
|
+
export { default as keyRoutes } from "./server/routes/keys.js";
|
|
17
|
+
// Database
|
|
11
18
|
export { runMigrations } from "./db/run-migrations.js";
|
|
19
|
+
export { bootstrapApiKey } from "./db/bootstrap-api-key.js";
|
|
12
20
|
export { createApiKey, deleteApiKey, findApiKeyById, findApiKeyByKey, hasGrantAccess, hasReadAccess, hasWriteAccess, listApiKeys, updateApiKeyAccess, updateLastUsed, } from "./db/repositories/api-keys.js";
|
|
13
21
|
export { getLogsForCredential, getRecentLogs, logAccess, pruneOldLogs, } from "./db/repositories/audit-log.js";
|
|
14
22
|
export { deleteCredential, getCredential, listCredentials, listCredentialsForApiKey, listCredentialsPaginated, upsertCredential, } from "./db/repositories/credentials.js";
|
package/dist/index.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAAA
|
|
1
|
+
{"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAAA;;;;;;GAMG;AAIH,OAAO,EAAE,QAAQ,EAAE,MAAM,oBAAoB,CAAC;AAE9C,UAAU;AACV,OAAO,EAAE,OAAO,IAAI,YAAY,EAAE,MAAM,4BAA4B,CAAC;AACrE,OAAO,EAAE,OAAO,IAAI,cAAc,EAAE,MAAM,8BAA8B,CAAC;AACzE,OAAO,EAAE,OAAO,IAAI,UAAU,EAAE,MAAM,0BAA0B,CAAC;AAEjE,gBAAgB;AAChB,OAAO,EAAE,OAAO,IAAI,YAAY,EAAE,MAAM,2BAA2B,CAAC;AACpE,OAAO,EAAE,OAAO,IAAI,gBAAgB,EAAE,MAAM,gCAAgC,CAAC;AAC7E,OAAO,EAAE,OAAO,IAAI,SAAS,EAAE,MAAM,yBAAyB,CAAC;AAE/D,WAAW;AACX,OAAO,EAAE,aAAa,EAAE,MAAM,wBAAwB,CAAC;AACvD,OAAO,EAAE,eAAe,EAAE,MAAM,2BAA2B,CAAC;AAQ5D,OAAO,EACL,YAAY,EACZ,YAAY,EACZ,cAAc,EACd,eAAe,EACf,cAAc,EACd,aAAa,EACb,cAAc,EACd,WAAW,EACX,kBAAkB,EAClB,cAAc,GACf,MAAM,+BAA+B,CAAC;AAEvC,OAAO,EACL,oBAAoB,EACpB,aAAa,EACb,SAAS,EACT,YAAY,GACb,MAAM,gCAAgC,CAAC;AAKxC,OAAO,EACL,gBAAgB,EAChB,aAAa,EACb,eAAe,EACf,wBAAwB,EACxB,wBAAwB,EACxB,gBAAgB,GACjB,MAAM,kCAAkC,CAAC"}
|
|
@@ -0,0 +1,13 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Shared access-list helpers for API key permissions.
|
|
3
|
+
*/
|
|
4
|
+
interface AccessLists {
|
|
5
|
+
readAccess: string[];
|
|
6
|
+
writeAccess: string[];
|
|
7
|
+
grantAccess: string[];
|
|
8
|
+
}
|
|
9
|
+
declare function normalizeAccessList(accessList: string[]): string[];
|
|
10
|
+
declare function canDelegateKeyAccess(callerGrantAccess: string[], requestedAccess: AccessLists): boolean;
|
|
11
|
+
declare function canMutateKeyAccess(callerGrantAccess: string[], currentAccess: AccessLists, nextAccess: AccessLists): boolean;
|
|
12
|
+
export { canDelegateKeyAccess, canMutateKeyAccess, normalizeAccessList };
|
|
13
|
+
//# sourceMappingURL=access-list.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"access-list.d.ts","sourceRoot":"","sources":["../../src/lib/access-list.ts"],"names":[],"mappings":"AAAA;;GAEG;AAEH,UAAU,WAAW;IACnB,UAAU,EAAE,MAAM,EAAE,CAAC;IACrB,WAAW,EAAE,MAAM,EAAE,CAAC;IACtB,WAAW,EAAE,MAAM,EAAE,CAAC;CACvB;AAED,iBAAS,mBAAmB,CAAC,UAAU,EAAE,MAAM,EAAE,GAAG,MAAM,EAAE,CAE3D;AAUD,iBAAS,oBAAoB,CAC3B,iBAAiB,EAAE,MAAM,EAAE,EAC3B,eAAe,EAAE,WAAW,GAC3B,OAAO,CAMT;AAED,iBAAS,kBAAkB,CACzB,iBAAiB,EAAE,MAAM,EAAE,EAC3B,aAAa,EAAE,WAAW,EAC1B,UAAU,EAAE,WAAW,GACtB,OAAO,CAKT;AAED,OAAO,EAAE,oBAAoB,EAAE,kBAAkB,EAAE,mBAAmB,EAAE,CAAC"}
|