axvault 1.12.0 → 1.13.1

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (196) hide show
  1. package/README.md +64 -123
  2. package/dist/cli.d.ts +2 -1
  3. package/dist/cli.d.ts.map +1 -1
  4. package/dist/cli.js +5 -104
  5. package/dist/cli.js.map +1 -1
  6. package/dist/commands/serve.d.ts +4 -0
  7. package/dist/commands/serve.d.ts.map +1 -1
  8. package/dist/commands/serve.js +82 -62
  9. package/dist/commands/serve.js.map +1 -1
  10. package/dist/config.d.ts +58 -7
  11. package/dist/config.d.ts.map +1 -1
  12. package/dist/config.js +52 -37
  13. package/dist/config.js.map +1 -1
  14. package/dist/db/bootstrap-api-key.d.ts +14 -0
  15. package/dist/db/bootstrap-api-key.d.ts.map +1 -0
  16. package/dist/db/bootstrap-api-key.js +26 -0
  17. package/dist/db/bootstrap-api-key.js.map +1 -0
  18. package/dist/db/migrations/001-initial.sql +6 -5
  19. package/dist/db/repositories/audit-log.d.ts +2 -0
  20. package/dist/db/repositories/audit-log.d.ts.map +1 -1
  21. package/dist/db/repositories/audit-log.js +4 -2
  22. package/dist/db/repositories/audit-log.js.map +1 -1
  23. package/dist/db/run-migrations.d.ts +12 -0
  24. package/dist/db/run-migrations.d.ts.map +1 -1
  25. package/dist/db/run-migrations.js +19 -44
  26. package/dist/db/run-migrations.js.map +1 -1
  27. package/dist/db/types.d.ts +1 -0
  28. package/dist/db/types.d.ts.map +1 -1
  29. package/dist/index.d.ts +12 -6
  30. package/dist/index.d.ts.map +1 -1
  31. package/dist/index.js +14 -6
  32. package/dist/index.js.map +1 -1
  33. package/dist/lib/access-list.d.ts +13 -0
  34. package/dist/lib/access-list.d.ts.map +1 -0
  35. package/dist/lib/access-list.js +22 -0
  36. package/dist/lib/access-list.js.map +1 -0
  37. package/dist/lib/credential-name.d.ts +1 -6
  38. package/dist/lib/credential-name.d.ts.map +1 -1
  39. package/dist/lib/credential-name.js +1 -4
  40. package/dist/lib/credential-name.js.map +1 -1
  41. package/dist/schemas/request.d.ts +35 -0
  42. package/dist/schemas/request.d.ts.map +1 -0
  43. package/dist/schemas/request.js +76 -0
  44. package/dist/schemas/request.js.map +1 -0
  45. package/dist/schemas/{api.d.ts → response.d.ts} +6 -32
  46. package/dist/schemas/response.d.ts.map +1 -0
  47. package/dist/schemas/response.js +59 -0
  48. package/dist/schemas/response.js.map +1 -0
  49. package/dist/server/plugins/auth.d.ts +19 -0
  50. package/dist/server/plugins/auth.d.ts.map +1 -0
  51. package/dist/server/plugins/auth.js +51 -0
  52. package/dist/server/plugins/auth.js.map +1 -0
  53. package/dist/server/plugins/config.d.ts +14 -0
  54. package/dist/server/plugins/config.d.ts.map +1 -0
  55. package/dist/server/plugins/config.js +19 -0
  56. package/dist/server/plugins/config.js.map +1 -0
  57. package/dist/server/plugins/database.d.ts +12 -0
  58. package/dist/server/plugins/database.d.ts.map +1 -0
  59. package/dist/server/plugins/database.js +20 -0
  60. package/dist/server/plugins/database.js.map +1 -0
  61. package/dist/server/routes/credentials.d.ts +8 -0
  62. package/dist/server/routes/credentials.d.ts.map +1 -0
  63. package/dist/server/routes/credentials.js +82 -0
  64. package/dist/server/routes/credentials.js.map +1 -0
  65. package/dist/server/routes/handle-create-key.d.ts +10 -0
  66. package/dist/server/routes/handle-create-key.d.ts.map +1 -0
  67. package/dist/server/routes/handle-create-key.js +44 -0
  68. package/dist/server/routes/handle-create-key.js.map +1 -0
  69. package/dist/server/routes/handle-delete-credential.d.ts +10 -0
  70. package/dist/server/routes/handle-delete-credential.d.ts.map +1 -0
  71. package/dist/{handlers/delete-credential.js → server/routes/handle-delete-credential.js} +19 -17
  72. package/dist/server/routes/handle-delete-credential.js.map +1 -0
  73. package/dist/server/routes/handle-delete-key.d.ts +11 -0
  74. package/dist/server/routes/handle-delete-key.d.ts.map +1 -0
  75. package/dist/server/routes/handle-delete-key.js +40 -0
  76. package/dist/server/routes/handle-delete-key.js.map +1 -0
  77. package/dist/server/routes/handle-get-credential.d.ts +18 -0
  78. package/dist/server/routes/handle-get-credential.d.ts.map +1 -0
  79. package/dist/{handlers/get-credential.js → server/routes/handle-get-credential.js} +17 -34
  80. package/dist/server/routes/handle-get-credential.js.map +1 -0
  81. package/dist/server/routes/handle-list-credentials.d.ts +13 -0
  82. package/dist/server/routes/handle-list-credentials.d.ts.map +1 -0
  83. package/dist/{handlers/list-credentials.js → server/routes/handle-list-credentials.js} +6 -24
  84. package/dist/server/routes/handle-list-credentials.js.map +1 -0
  85. package/dist/server/routes/handle-put-credential.d.ts +14 -0
  86. package/dist/server/routes/handle-put-credential.d.ts.map +1 -0
  87. package/dist/{handlers/put-credential.js → server/routes/handle-put-credential.js} +26 -33
  88. package/dist/server/routes/handle-put-credential.js.map +1 -0
  89. package/dist/server/routes/handle-update-key.d.ts +13 -0
  90. package/dist/server/routes/handle-update-key.d.ts.map +1 -0
  91. package/dist/server/routes/handle-update-key.js +74 -0
  92. package/dist/server/routes/handle-update-key.js.map +1 -0
  93. package/dist/server/routes/health.d.ts +7 -0
  94. package/dist/server/routes/health.d.ts.map +1 -0
  95. package/dist/server/routes/health.js +31 -0
  96. package/dist/server/routes/health.js.map +1 -0
  97. package/dist/server/routes/keys.d.ts +12 -0
  98. package/dist/server/routes/keys.d.ts.map +1 -0
  99. package/dist/server/routes/keys.js +119 -0
  100. package/dist/server/routes/keys.js.map +1 -0
  101. package/dist/server/routes/log-grant-event.d.ts +7 -0
  102. package/dist/server/routes/log-grant-event.d.ts.map +1 -0
  103. package/dist/server/routes/log-grant-event.js +15 -0
  104. package/dist/server/routes/log-grant-event.js.map +1 -0
  105. package/dist/server/server.d.ts +6 -17
  106. package/dist/server/server.d.ts.map +1 -1
  107. package/dist/server/server.js +46 -54
  108. package/dist/server/server.js.map +1 -1
  109. package/package.json +24 -18
  110. package/dist/commands/credential.d.ts +0 -17
  111. package/dist/commands/credential.d.ts.map +0 -1
  112. package/dist/commands/credential.js +0 -144
  113. package/dist/commands/credential.js.map +0 -1
  114. package/dist/commands/init.d.ts +0 -10
  115. package/dist/commands/init.d.ts.map +0 -1
  116. package/dist/commands/init.js +0 -42
  117. package/dist/commands/init.js.map +0 -1
  118. package/dist/commands/key-create.d.ts +0 -14
  119. package/dist/commands/key-create.d.ts.map +0 -1
  120. package/dist/commands/key-create.js +0 -111
  121. package/dist/commands/key-create.js.map +0 -1
  122. package/dist/commands/key-list.d.ts +0 -10
  123. package/dist/commands/key-list.d.ts.map +0 -1
  124. package/dist/commands/key-list.js +0 -57
  125. package/dist/commands/key-list.js.map +0 -1
  126. package/dist/commands/key-revoke.d.ts +0 -12
  127. package/dist/commands/key-revoke.d.ts.map +0 -1
  128. package/dist/commands/key-revoke.js +0 -64
  129. package/dist/commands/key-revoke.js.map +0 -1
  130. package/dist/commands/key-update.d.ts +0 -17
  131. package/dist/commands/key-update.d.ts.map +0 -1
  132. package/dist/commands/key-update.js +0 -106
  133. package/dist/commands/key-update.js.map +0 -1
  134. package/dist/commands/key.d.ts +0 -10
  135. package/dist/commands/key.d.ts.map +0 -1
  136. package/dist/commands/key.js +0 -10
  137. package/dist/commands/key.js.map +0 -1
  138. package/dist/handlers/create-key.d.ts +0 -14
  139. package/dist/handlers/create-key.d.ts.map +0 -1
  140. package/dist/handlers/create-key.js +0 -25
  141. package/dist/handlers/create-key.js.map +0 -1
  142. package/dist/handlers/delete-credential.d.ts +0 -15
  143. package/dist/handlers/delete-credential.d.ts.map +0 -1
  144. package/dist/handlers/delete-credential.js.map +0 -1
  145. package/dist/handlers/delete-key.d.ts +0 -15
  146. package/dist/handlers/delete-key.d.ts.map +0 -1
  147. package/dist/handlers/delete-key.js +0 -24
  148. package/dist/handlers/delete-key.js.map +0 -1
  149. package/dist/handlers/get-credential.d.ts +0 -27
  150. package/dist/handlers/get-credential.d.ts.map +0 -1
  151. package/dist/handlers/get-credential.js.map +0 -1
  152. package/dist/handlers/get-key.d.ts +0 -15
  153. package/dist/handlers/get-key.d.ts.map +0 -1
  154. package/dist/handlers/get-key.js +0 -20
  155. package/dist/handlers/get-key.js.map +0 -1
  156. package/dist/handlers/list-credentials.d.ts +0 -27
  157. package/dist/handlers/list-credentials.d.ts.map +0 -1
  158. package/dist/handlers/list-credentials.js.map +0 -1
  159. package/dist/handlers/list-keys.d.ts +0 -11
  160. package/dist/handlers/list-keys.d.ts.map +0 -1
  161. package/dist/handlers/list-keys.js +0 -18
  162. package/dist/handlers/list-keys.js.map +0 -1
  163. package/dist/handlers/put-credential.d.ts +0 -24
  164. package/dist/handlers/put-credential.d.ts.map +0 -1
  165. package/dist/handlers/put-credential.js.map +0 -1
  166. package/dist/handlers/update-key.d.ts +0 -17
  167. package/dist/handlers/update-key.d.ts.map +0 -1
  168. package/dist/handlers/update-key.js +0 -47
  169. package/dist/handlers/update-key.js.map +0 -1
  170. package/dist/lib/format-key-details.d.ts +0 -17
  171. package/dist/lib/format-key-details.d.ts.map +0 -1
  172. package/dist/lib/format-key-details.js +0 -25
  173. package/dist/lib/format-key-details.js.map +0 -1
  174. package/dist/lib/format.d.ts +0 -89
  175. package/dist/lib/format.d.ts.map +0 -1
  176. package/dist/lib/format.js +0 -180
  177. package/dist/lib/format.js.map +0 -1
  178. package/dist/lib/parse-access-options.d.ts +0 -38
  179. package/dist/lib/parse-access-options.d.ts.map +0 -1
  180. package/dist/lib/parse-access-options.js +0 -85
  181. package/dist/lib/parse-access-options.js.map +0 -1
  182. package/dist/middleware/auth.d.ts +0 -22
  183. package/dist/middleware/auth.d.ts.map +0 -1
  184. package/dist/middleware/auth.js +0 -49
  185. package/dist/middleware/auth.js.map +0 -1
  186. package/dist/middleware/require-grant-access.d.ts +0 -10
  187. package/dist/middleware/require-grant-access.d.ts.map +0 -1
  188. package/dist/middleware/require-grant-access.js +0 -14
  189. package/dist/middleware/require-grant-access.js.map +0 -1
  190. package/dist/schemas/api.d.ts.map +0 -1
  191. package/dist/schemas/api.js +0 -119
  192. package/dist/schemas/api.js.map +0 -1
  193. package/dist/server/routes.d.ts +0 -14
  194. package/dist/server/routes.d.ts.map +0 -1
  195. package/dist/server/routes.js +0 -200
  196. package/dist/server/routes.js.map +0 -1
@@ -1 +1 @@
1
- {"version":3,"file":"serve.js","sourceRoot":"","sources":["../../src/commands/serve.ts"],"names":[],"mappings":"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"}
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
- * Configuration for axvault server.
2
+ * Server configuration schema and helpers.
3
3
  *
4
- * Priority: CLI flags > environment variables > defaults.
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
- export interface ServerConfig {
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: string;
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
- /** Parse config from environment and CLI overrides */
23
- export declare function getServerConfig(overrides?: ConfigOverrides): ServerConfig;
24
- export {};
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
@@ -1 +1 @@
1
- {"version":3,"file":"config.d.ts","sourceRoot":"","sources":["../src/config.ts"],"names":[],"mappings":"AAAA;;;;GAIG;AAEH,MAAM,WAAW,YAAY;IAC3B,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,MAAM,CAAC;CAClB;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;CACnB;AAmBD,sDAAsD;AACtD,wBAAgB,eAAe,CAAC,SAAS,GAAE,eAAoB,GAAG,YAAY,CAoC7E"}
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
- * Configuration for axvault server.
2
+ * Server configuration schema and helpers.
3
3
  *
4
- * Priority: CLI flags > environment variables > defaults.
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
- /** Parse config from environment and CLI overrides */
22
- export function getServerConfig(overrides = {}) {
23
- const port = parsePort(overrides.port ?? process.env.AXVAULT_PORT);
24
- const host = overrides.host ?? process.env.AXVAULT_HOST ?? DEFAULT_HOST;
25
- const databaseUrl = overrides.databaseUrl ??
26
- process.env.AXVAULT_DATABASE_URL ??
27
- DEFAULT_DATABASE_URL;
28
- const refreshThresholdSeconds = parseNonNegativeInt(overrides.refreshThresholdSeconds ?? process.env.AXVAULT_REFRESH_THRESHOLD, DEFAULT_REFRESH_THRESHOLD_SECONDS, "AXVAULT_REFRESH_THRESHOLD");
29
- const refreshTimeoutMs = parseNonNegativeInt(overrides.refreshTimeoutMs ?? process.env.AXVAULT_REFRESH_TIMEOUT_MS, DEFAULT_REFRESH_TIMEOUT_MS, "AXVAULT_REFRESH_TIMEOUT_MS");
30
- const logLevel = overrides.logLevel ?? process.env.AXVAULT_LOG_LEVEL ?? DEFAULT_LOG_LEVEL;
31
- if (!VALID_LOG_LEVELS.includes(logLevel)) {
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
- function parsePort(value) {
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
@@ -1 +1 @@
1
- {"version":3,"file":"config.js","sourceRoot":"","sources":["../src/config.ts"],"names":[],"mappings":"AAAA;;;;GAIG;AAoBH,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,GAAG,MAAM,CAAC;AAEjC,MAAM,gBAAgB,GAAG;IACvB,OAAO;IACP,OAAO;IACP,MAAM;IACN,MAAM;IACN,OAAO;IACP,OAAO;IACP,QAAQ;CACA,CAAC;AAEX,sDAAsD;AACtD,MAAM,UAAU,eAAe,CAAC,YAA6B,EAAE;IAC7D,MAAM,IAAI,GAAG,SAAS,CAAC,SAAS,CAAC,IAAI,IAAI,OAAO,CAAC,GAAG,CAAC,YAAY,CAAC,CAAC;IACnE,MAAM,IAAI,GAAG,SAAS,CAAC,IAAI,IAAI,OAAO,CAAC,GAAG,CAAC,YAAY,IAAI,YAAY,CAAC;IACxE,MAAM,WAAW,GACf,SAAS,CAAC,WAAW;QACrB,OAAO,CAAC,GAAG,CAAC,oBAAoB;QAChC,oBAAoB,CAAC;IAEvB,MAAM,uBAAuB,GAAG,mBAAmB,CACjD,SAAS,CAAC,uBAAuB,IAAI,OAAO,CAAC,GAAG,CAAC,yBAAyB,EAC1E,iCAAiC,EACjC,2BAA2B,CAC5B,CAAC;IACF,MAAM,gBAAgB,GAAG,mBAAmB,CAC1C,SAAS,CAAC,gBAAgB,IAAI,OAAO,CAAC,GAAG,CAAC,0BAA0B,EACpE,0BAA0B,EAC1B,4BAA4B,CAC7B,CAAC;IAEF,MAAM,QAAQ,GACZ,SAAS,CAAC,QAAQ,IAAI,OAAO,CAAC,GAAG,CAAC,iBAAiB,IAAI,iBAAiB,CAAC;IAE3E,IAAI,CAAE,gBAAsC,CAAC,QAAQ,CAAC,QAAQ,CAAC,EAAE,CAAC;QAChE,MAAM,IAAI,KAAK,CACb,uBAAuB,QAAQ,sBAAsB,gBAAgB,CAAC,IAAI,CAAC,IAAI,CAAC,EAAE,CACnF,CAAC;IACJ,CAAC;IAED,OAAO;QACL,IAAI;QACJ,IAAI;QACJ,WAAW;QACX,uBAAuB;QACvB,gBAAgB;QAChB,QAAQ;KACT,CAAC;AACJ,CAAC;AAED,SAAS,SAAS,CAAC,KAAyB;IAC1C,IAAI,CAAC,KAAK;QAAE,OAAO,YAAY,CAAC;IAChC,MAAM,IAAI,GAAG,MAAM,CAAC,QAAQ,CAAC,KAAK,EAAE,EAAE,CAAC,CAAC;IACxC,IAAI,MAAM,CAAC,KAAK,CAAC,IAAI,CAAC,IAAI,IAAI,GAAG,CAAC,IAAI,IAAI,GAAG,MAAM,EAAE,CAAC;QACpD,MAAM,IAAI,KAAK,CAAC,iBAAiB,KAAK,EAAE,CAAC,CAAC;IAC5C,CAAC;IACD,OAAO,IAAI,CAAC;AACd,CAAC;AAED,SAAS,mBAAmB,CAC1B,KAAyB,EACzB,YAAoB,EACpB,IAAY;IAEZ,IAAI,CAAC,KAAK;QAAE,OAAO,YAAY,CAAC;IAChC,MAAM,MAAM,GAAG,MAAM,CAAC,QAAQ,CAAC,KAAK,EAAE,EAAE,CAAC,CAAC;IAC1C,IAAI,MAAM,CAAC,KAAK,CAAC,MAAM,CAAC,IAAI,MAAM,GAAG,CAAC,EAAE,CAAC;QACvC,OAAO,CAAC,IAAI,CACV,WAAW,IAAI,WAAW,KAAK,oBAAoB,YAAY,EAAE,CAClE,CAAC;QACF,OAAO,YAAY,CAAC;IACtB,CAAC;IACD,OAAO,MAAM,CAAC;AAChB,CAAC"}
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
- CREATE INDEX idx_audit_log_timestamp ON audit_log(timestamp DESC);
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;CAClC;AAiBD,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;CACvB,GACA,OAAO,CAAC,IAAI,CAAC,CAcf;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"}
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":"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"}
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,CAqDf;AAED,OAAO,EAAE,aAAa,EAAE,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 client = await pool.connect();
5
- try {
6
- await client.query("SELECT pg_advisory_lock(1)");
7
- await client.query(`
8
- CREATE TABLE IF NOT EXISTS schema_migrations (
9
- version INTEGER PRIMARY KEY,
10
- name TEXT NOT NULL,
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,MAAM,GAAG,MAAM,IAAI,CAAC,OAAO,EAAE,CAAC;IACpC,IAAI,CAAC;QACH,MAAM,MAAM,CAAC,KAAK,CAAC,4BAA4B,CAAC,CAAC;QAEjD,MAAM,MAAM,CAAC,KAAK,CAAC;;;;;;KAMlB,CAAC,CAAC;QAEH,MAAM,EAAE,IAAI,EAAE,OAAO,EAAE,GAAG,MAAM,MAAM,CAAC,KAAK,CAC1C,wDAAwD,CACzD,CAAC;QACF,MAAM,eAAe,GAAG,IAAI,GAAG,CAAC,OAAO,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,OAAO,CAAC,CAAC,CAAC;QAE/D,MAAM,KAAK,GAAG,MAAM,OAAO,CAAC,mBAAmB,CAAC,CAAC;QACjD,MAAM,QAAQ,GAAG,KAAK;aACnB,MAAM,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,QAAQ,CAAC,MAAM,CAAC,CAAC;YAClC,iFAAiF;aAChF,IAAI,CAAC,CAAC,CAAC,EAAE,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,aAAa,CAAC,CAAC,EAAE,SAAS,EAAE,EAAE,OAAO,EAAE,IAAI,EAAE,CAAC,CAAC,CAAC;QAEpE,KAAK,MAAM,IAAI,IAAI,QAAQ,EAAE,CAAC;YAC5B,MAAM,KAAK,GAAG,IAAI,CAAC,KAAK,CAAC,oBAAoB,CAAC,CAAC;YAC/C,IAAI,CAAC,KAAK,EAAE,CAAC,CAAC,CAAC;gBAAE,SAAS;YAE1B,MAAM,OAAO,GAAG,MAAM,CAAC,QAAQ,CAAC,KAAK,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC;YAC9C,IAAI,eAAe,CAAC,GAAG,CAAC,OAAO,CAAC;gBAAE,SAAS;YAE3C,MAAM,GAAG,GAAG,MAAM,QAAQ,CAAC,IAAI,CAAC,IAAI,CAAC,mBAAmB,EAAE,IAAI,CAAC,EAAE,MAAM,CAAC,CAAC;YAEzE,MAAM,MAAM,CAAC,KAAK,CAAC,OAAO,CAAC,CAAC;YAC5B,IAAI,CAAC;gBACH,MAAM,MAAM,CAAC,KAAK,CAAC,GAAG,CAAC,CAAC;gBACxB,MAAM,MAAM,CAAC,KAAK,CAChB,+DAA+D,EAC/D,CAAC,OAAO,EAAE,IAAI,CAAC,CAChB,CAAC;gBACF,MAAM,MAAM,CAAC,KAAK,CAAC,QAAQ,CAAC,CAAC;YAC/B,CAAC;YAAC,OAAO,KAAK,EAAE,CAAC;gBACf,MAAM,MAAM,CAAC,KAAK,CAAC,UAAU,CAAC,CAAC;gBAC/B,MAAM,KAAK,CAAC;YACd,CAAC;QACH,CAAC;IACH,CAAC;YAAS,CAAC;QACT,IAAI,CAAC;YACH,MAAM,MAAM,CAAC,KAAK,CAAC,8BAA8B,CAAC,CAAC;QACrD,CAAC;gBAAS,CAAC;YACT,MAAM,CAAC,OAAO,EAAE,CAAC;QACnB,CAAC;IACH,CAAC;AACH,CAAC;AAED,OAAO,EAAE,aAAa,EAAE,CAAC"}
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"}
@@ -25,6 +25,7 @@ export interface AuditLogRow {
25
25
  credential_name: string | null;
26
26
  success: boolean;
27
27
  error_message: string | null;
28
+ detail: string | null;
28
29
  }
29
30
  /** Raw credential row from database */
30
31
  export interface CredentialRow {
@@ -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;CAC9B;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"}
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 types and functions for programmatic use.
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 { getServerConfig } from "./config.js";
8
- export type { AxvaultServer } from "./server/server.js";
9
- export { createServer } from "./server/server.js";
10
- export { createHealthPlugin, createCredentialPlugin, createKeyPlugin, } from "./server/routes.js";
11
- export { closePool, createPool } from "./db/create-pool.js";
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";
@@ -1 +1 @@
1
- {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAAA;;;;GAIG;AAEH,YAAY,EAAE,YAAY,EAAE,MAAM,aAAa,CAAC;AAChD,OAAO,EAAE,eAAe,EAAE,MAAM,aAAa,CAAC;AAC9C,YAAY,EAAE,aAAa,EAAE,MAAM,oBAAoB,CAAC;AACxD,OAAO,EAAE,YAAY,EAAE,MAAM,oBAAoB,CAAC;AAClD,OAAO,EACL,kBAAkB,EAClB,sBAAsB,EACtB,eAAe,GAChB,MAAM,oBAAoB,CAAC;AAG5B,OAAO,EAAE,SAAS,EAAE,UAAU,EAAE,MAAM,qBAAqB,CAAC;AAC5D,OAAO,EAAE,aAAa,EAAE,MAAM,wBAAwB,CAAC;AACvD,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"}
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 types and functions for programmatic use.
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 { getServerConfig } from "./config.js";
7
- export { createServer } from "./server/server.js";
8
- export { createHealthPlugin, createCredentialPlugin, createKeyPlugin, } from "./server/routes.js";
9
- // Database client
10
- export { closePool, createPool } from "./db/create-pool.js";
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;;;;GAIG;AAGH,OAAO,EAAE,eAAe,EAAE,MAAM,aAAa,CAAC;AAE9C,OAAO,EAAE,YAAY,EAAE,MAAM,oBAAoB,CAAC;AAClD,OAAO,EACL,kBAAkB,EAClB,sBAAsB,EACtB,eAAe,GAChB,MAAM,oBAAoB,CAAC;AAE5B,kBAAkB;AAClB,OAAO,EAAE,SAAS,EAAE,UAAU,EAAE,MAAM,qBAAqB,CAAC;AAC5D,OAAO,EAAE,aAAa,EAAE,MAAM,wBAAwB,CAAC;AAQvD,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"}
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"}