sonamu 0.9.3 → 0.9.4

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 (82) hide show
  1. package/dist/api/config.d.ts +0 -8
  2. package/dist/api/config.d.ts.map +1 -1
  3. package/dist/api/config.js +1 -1
  4. package/dist/api/sonamu.d.ts +0 -1
  5. package/dist/api/sonamu.d.ts.map +1 -1
  6. package/dist/api/sonamu.js +2 -41
  7. package/dist/auth/audit-log/builders.d.ts +216 -0
  8. package/dist/auth/audit-log/builders.d.ts.map +1 -0
  9. package/dist/auth/audit-log/builders.js +307 -0
  10. package/dist/auth/audit-log/events.d.ts +143 -0
  11. package/dist/auth/audit-log/events.d.ts.map +1 -0
  12. package/dist/auth/audit-log/events.js +74 -0
  13. package/dist/auth/audit-log/plugin.d.ts +11 -0
  14. package/dist/auth/audit-log/plugin.d.ts.map +1 -0
  15. package/dist/auth/audit-log/plugin.js +427 -0
  16. package/dist/auth/audit-log-ingestor.d.ts +3 -3
  17. package/dist/auth/audit-log-ingestor.d.ts.map +1 -1
  18. package/dist/auth/audit-log-ingestor.js +44 -50
  19. package/dist/auth/index.d.ts +2 -0
  20. package/dist/auth/index.d.ts.map +1 -1
  21. package/dist/auth/index.js +4 -4
  22. package/dist/auth/plugins/entity-definitions/admin.d.ts +1 -1
  23. package/dist/auth/plugins/entity-definitions/admin.js +4 -4
  24. package/dist/auth/plugins/entity-definitions/audit-log.d.ts +2 -2
  25. package/dist/auth/plugins/entity-definitions/audit-log.js +3 -3
  26. package/dist/auth/plugins/wrappers/admin.d.ts +2 -2
  27. package/dist/auth/plugins/wrappers/sso.d.ts +1 -1
  28. package/dist/bin/fixture.d.ts.map +1 -1
  29. package/dist/bin/fixture.js +111 -1
  30. package/dist/database/_batch_update.d.ts +1 -1
  31. package/dist/database/_batch_update.js +2 -2
  32. package/dist/entity/entity-manager.d.ts +2 -2
  33. package/dist/entity/entity-manager.d.ts.map +1 -1
  34. package/dist/entity/entity-manager.js +14 -4
  35. package/dist/index.js +4 -3
  36. package/dist/syncer/syncer.d.ts.map +1 -1
  37. package/dist/syncer/syncer.js +2 -9
  38. package/dist/template/implementations/entry-server.template.js +3 -2
  39. package/dist/template/implementations/generated.template.d.ts.map +1 -1
  40. package/dist/template/implementations/generated.template.js +2 -1
  41. package/dist/template/implementations/generated_sso.template.d.ts.map +1 -1
  42. package/dist/template/implementations/generated_sso.template.js +2 -1
  43. package/dist/template/implementations/queries.template.d.ts.map +1 -1
  44. package/dist/template/implementations/queries.template.js +3 -1
  45. package/dist/template/implementations/sd.template.js +3 -2
  46. package/dist/template/implementations/services.template.d.ts.map +1 -1
  47. package/dist/template/implementations/services.template.js +44 -7
  48. package/dist/template/zod-converter.d.ts.map +1 -1
  49. package/dist/template/zod-converter.js +2 -2
  50. package/dist/types/types.d.ts +14 -14
  51. package/dist/ui-web/assets/{index-DrTfl0Ts.js → index-C5KUjXm0.js} +46 -46
  52. package/dist/ui-web/index.html +1 -1
  53. package/dist/utils/fs-utils.d.ts.map +1 -1
  54. package/dist/utils/fs-utils.js +4 -4
  55. package/package.json +1 -2
  56. package/src/api/config.ts +0 -8
  57. package/src/api/sonamu.ts +1 -51
  58. package/src/auth/audit-log/builders.ts +791 -0
  59. package/src/auth/audit-log/events.ts +149 -0
  60. package/src/auth/audit-log/plugin.ts +913 -0
  61. package/src/auth/audit-log-ingestor.ts +3 -4
  62. package/src/auth/index.ts +2 -0
  63. package/src/auth/plugins/entity-definitions/admin.ts +3 -3
  64. package/src/auth/plugins/entity-definitions/audit-log.ts +2 -2
  65. package/src/bin/fixture.ts +143 -0
  66. package/src/database/_batch_update.ts +1 -1
  67. package/src/entity/entity-manager.ts +10 -3
  68. package/src/shared/app.shared.ts.txt +2 -3
  69. package/src/shared/web.shared.ts.txt +2 -2
  70. package/src/syncer/syncer.ts +1 -11
  71. package/src/template/implementations/entry-server.template.ts +1 -1
  72. package/src/template/implementations/generated.template.ts +1 -0
  73. package/src/template/implementations/generated_sso.template.ts +1 -0
  74. package/src/template/implementations/queries.template.ts +10 -1
  75. package/src/template/implementations/sd.template.ts +1 -1
  76. package/src/template/implementations/services.template.ts +62 -6
  77. package/src/template/zod-converter.ts +2 -1
  78. package/src/utils/fs-utils.ts +6 -4
  79. package/dist/auth/audit-log-proxy-types.d.ts +0 -23
  80. package/dist/auth/audit-log-proxy-types.d.ts.map +0 -1
  81. package/dist/auth/audit-log-proxy-types.js +0 -1
  82. package/src/auth/audit-log-proxy-types.ts +0 -23
@@ -5,7 +5,7 @@
5
5
  <link rel="icon" type="image/svg+xml" href="/sonamu-ui/setting.svg" />
6
6
  <meta name="viewport" content="width=device-width, initial-scale=1.0" />
7
7
  <title>{{projectName}}: Sonamu UI</title>
8
- <script type="module" crossorigin src="/sonamu-ui/assets/index-DrTfl0Ts.js"></script>
8
+ <script type="module" crossorigin src="/sonamu-ui/assets/index-C5KUjXm0.js"></script>
9
9
  <link rel="stylesheet" crossorigin href="/sonamu-ui/assets/index-Dr8pRJC_.css">
10
10
  </head>
11
11
  <body>
@@ -1 +1 @@
1
- {"version":3,"file":"fs-utils.d.ts","sourceRoot":"","sources":["../../src/utils/fs-utils.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,KAAK,QAAQ,EAAE,MAAM,IAAI,CAAC;AAInC;;;;;GAKG;AACH,wBAAsB,MAAM,CAAC,IAAI,EAAE,QAAQ,GAAG,OAAO,CAAC,OAAO,CAAC,CAO7D;AAGD,wBAAsB,UAAU,CAAC,IAAI,EAAE,QAAQ,GAAG,OAAO,CAAC,OAAO,CAAC,CAOjE;AAED;;;;;;;;;;;;;GAaG;AACH,wBAAsB,+BAA+B,CACnD,QAAQ,EAAE,MAAM,EAChB,MAAM,EAAE,MAAM,EACd,UAAU,CAAC,EAAE,MAAM,GAClB,OAAO,CAAC,OAAO,CAAC,CAqClB"}
1
+ {"version":3,"file":"fs-utils.d.ts","sourceRoot":"","sources":["../../src/utils/fs-utils.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,KAAK,QAAQ,EAAE,MAAM,IAAI,CAAC;AAInC;;;;;GAKG;AACH,wBAAsB,MAAM,CAAC,IAAI,EAAE,QAAQ,GAAG,OAAO,CAAC,OAAO,CAAC,CAO7D;AAGD,wBAAsB,UAAU,CAAC,IAAI,EAAE,QAAQ,GAAG,OAAO,CAAC,OAAO,CAAC,CAOjE;AAED;;;;;;;;;;;;;GAaG;AACH,wBAAsB,+BAA+B,CACnD,QAAQ,EAAE,MAAM,EAChB,MAAM,EAAE,MAAM,EACd,UAAU,CAAC,EAAE,MAAM,GAClB,OAAO,CAAC,OAAO,CAAC,CAuClB"}
@@ -57,11 +57,11 @@ async function copyFileWithReplaceCoreToShared(fromPath, toPath, syncHeader) {
57
57
  return oldFileContent.replace(/from "sonamu(\/dict)?"/g, `from "${sharedPath}"`);
58
58
  })();
59
59
  if (syncHeader) {
60
- const generatedBlockRegex = /\/\*\*\r?\n \* @generated\r?\n[\s\S]*?\*\/\r?\n/;
60
+ const generatedBlockRegex = /\/\*\*\r?\n \* @generated\r?\n[\s\S]*?\*\/\r?\n(\r?\n)*/;
61
61
  if (generatedBlockRegex.test(newFileContent)) {
62
- newFileContent = newFileContent.replace(generatedBlockRegex, `${syncHeader}\n`);
62
+ newFileContent = newFileContent.replace(generatedBlockRegex, `${syncHeader}\n\n`);
63
63
  } else {
64
- newFileContent = `${syncHeader}\n${newFileContent}`;
64
+ newFileContent = `${syncHeader}\n\n${newFileContent}`;
65
65
  }
66
66
  }
67
67
  await writeFile(toPath, newFileContent);
@@ -72,4 +72,4 @@ var init_fs_utils = __esmMin((() => {}));
72
72
  //#endregion
73
73
  init_fs_utils();
74
74
  export { copyFileWithReplaceCoreToShared, exists, fileExists, init_fs_utils };
75
- //# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZnMtdXRpbHMuanMiLCJuYW1lcyI6WyJwYXRoIl0sInNvdXJjZXMiOlsiLi4vLi4vc3JjL3V0aWxzL2ZzLXV0aWxzLnRzIl0sInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IGNvbnN0YW50cyB9IGZyb20gXCJmc1wiO1xuaW1wb3J0IHsgdHlwZSBQYXRoTGlrZSB9IGZyb20gXCJmc1wiO1xuaW1wb3J0IHsgYWNjZXNzLCByZWFkRmlsZSwgc3RhdCwgd3JpdGVGaWxlIH0gZnJvbSBcImZzL3Byb21pc2VzXCI7XG5pbXBvcnQgcGF0aCwgeyBkaXJuYW1lIH0gZnJvbSBcInBhdGhcIjtcblxuLyoqXG4gKiBmcy9wcm9taXNlc+yXkOuKlCBleGlzdHPqsIAg7JeG7Ja07JqULiDrjIDsi6AgYWNjZXNz6rCAIOyeiOyKteuLiOuLpC5cbiAqIOq3vOuNsCDslpjripQg7J247YSw7Y6Y7J207Iqk6rCAIOyTsOq4sCDrtojtjrjtlbTsmpQuIOq3uOuemOyEnCDqsJDsi7jso7zsl4jsirXri4jri6QuXG4gKiBAcGFyYW0gcGF0aFxuICogQHJldHVybnNcbiAqL1xuZXhwb3J0IGFzeW5jIGZ1bmN0aW9uIGV4aXN0cyhwYXRoOiBQYXRoTGlrZSk6IFByb21pc2U8Ym9vbGVhbj4ge1xuICB0cnkge1xuICAgIGF3YWl0IGFjY2VzcyhwYXRoLCBjb25zdGFudHMuRl9PSyk7XG4gICAgcmV0dXJuIHRydWU7XG4gIH0gY2F0Y2gge1xuICAgIHJldHVybiBmYWxzZTtcbiAgfVxufVxuXG4vLyDrlJTroInthqDrpqzqsIAg7JWE64uI6528IO2MjOydvOunjCDsobTsnqztlZjripTsp4Ag7ZmV7J247ZWp64uI64ukLlxuZXhwb3J0IGFzeW5jIGZ1bmN0aW9uIGZpbGVFeGlzdHMocGF0aDogUGF0aExpa2UpOiBQcm9taXNlPGJvb2xlYW4+IHtcbiAgdHJ5IHtcbiAgICBjb25zdCBzdGF0cyA9IGF3YWl0IHN0YXQocGF0aCk7XG4gICAgcmV0dXJuIHN0YXRzLmlzRmlsZSgpO1xuICB9IGNhdGNoIHtcbiAgICByZXR1cm4gZmFsc2U7XG4gIH1cbn1cblxuLyoqXG4gKiDtjIzsnbzsnYQg67O17IKs7ZWY66m07IScIGBmcm9tIFwic29uYW11XCJgIGltcG9ydOulvCBzb25hbXUuc2hhcmVkLnRzIOqyveuhnOuhnCDsuZjtmZjtlanri4jri6QuXG4gKlxuICogd2Vi7J2064KYIGFwcCDrk7Hsl5DripQgc29uYW11IO2MqO2CpOyngOqwgCDsl4bsnLzrr4DroZwsIO2VqOq7mCDrs7XsgqzrkJjripQgc29uYW11LnNoYXJlZC50c+yXkOyEnCDqsIDsoLjsmKTrj4TroZ0g67OA7ZmY7ZWp64uI64ukLlxuICog64yA7IOBIO2MjOydvOydmCDsnITsuZjsl5Ag65Sw6528IOyDgeuMgCDqsr3roZzqsIAg64us65287KeR64uI64ukOlxuICogLSBzZXJ2aWNlcy9zb25hbXUuZ2VuZXJhdGVkLnRzIOKGkiAuL3NvbmFtdS5zaGFyZWRcbiAqIC0gc2VydmljZXMvdXNlci91c2VyLnR5cGVzLnRzIOKGkiAuLi9zb25hbXUuc2hhcmVkXG4gKiAtIGkxOG4va28udHMg4oaSIC4uL3NlcnZpY2VzL3NvbmFtdS5zaGFyZWRcbiAqXG4gKiBAcGFyYW0gZnJvbVBhdGgg7JuQ67O4IO2MjOydvCDqsr3roZxcbiAqIEBwYXJhbSB0b1BhdGgg64yA7IOBIO2MjOydvCDqsr3roZxcbiAqIEBwYXJhbSBzeW5jSGVhZGVyIOuPmeq4sO2ZlCDsi5wg7YyM7J28IOy1nOyDgeuLqOyXkCDsgr3snoXtlaAg7KO87ISdIOu4lOuhnS4g6riw7KG0IEBnZW5lcmF0ZWQg67iU66Gd7J20IOyeiOycvOuptCDqtZDssrTtlZjqs6AsIOyXhuycvOuptCDstZzsg4Hri6jsl5Ag7LaU6rCA7ZWp64uI64ukLlxuICogQHJldHVybnMg7YyM7J287J2EIOyNvOycvOuptCB0cnVlLCDqsbTrhIjrm7Dsl4jsnLzrqbQgZmFsc2VcbiAqL1xuZXhwb3J0IGFzeW5jIGZ1bmN0aW9uIGNvcHlGaWxlV2l0aFJlcGxhY2VDb3JlVG9TaGFyZWQoXG4gIGZyb21QYXRoOiBzdHJpbmcsXG4gIHRvUGF0aDogc3RyaW5nLFxuICBzeW5jSGVhZGVyPzogc3RyaW5nLFxuKTogUHJvbWlzZTxib29sZWFuPiB7XG4gIGlmICghKGF3YWl0IGV4aXN0cyhmcm9tUGF0aCkpKSB7XG4gICAgcmV0dXJuIGZhbHNlO1xuICB9XG5cbiAgY29uc3Qgb2xkRmlsZUNvbnRlbnQgPSAoYXdhaXQgcmVhZEZpbGUoZnJvbVBhdGgpKS50b1N0cmluZygpO1xuXG4gIGxldCBuZXdGaWxlQ29udGVudCA9ICgoKSA9PiB7XG4gICAgLy8gc29uYW11LnNoYXJlZC50c+uKlCDtla3sg4Ege2Jhc2V9L3NyYy9zZXJ2aWNlcy9zb25hbXUuc2hhcmVkLnRz7JeQIOychOy5mO2VqeuLiOuLpC5cbiAgICAvLyB0b1BhdGjsl5DshJwgL3NyYy/rpbwg7LC+7JWEIHNlcnZpY2VzIOuUlOugie2GoOumrCDqsr3roZzrpbwg6rOE7IKw7ZWp64uI64ukLlxuICAgIGNvbnN0IHNyY01hdGNoID0gdG9QYXRoLm1hdGNoKC9eKC4rXFwvc3JjKVxcLy8pO1xuICAgIGlmICghc3JjTWF0Y2gpIHtcbiAgICAgIC8vIC9zcmMv6rCAIOyXhuycvOuptCDrs4DtmZgg7JeG7J20IOq3uOuMgOuhnCDrsJjtmZhcbiAgICAgIHJldHVybiBvbGRGaWxlQ29udGVudDtcbiAgICB9XG5cbiAgICBjb25zdCBzZXJ2aWNlc0RpciA9IHBhdGguam9pbihzcmNNYXRjaFsxXSwgXCJzZXJ2aWNlc1wiKTtcbiAgICBjb25zdCBmaWxlRGlyID0gZGlybmFtZSh0b1BhdGgpO1xuICAgIGNvbnN0IHJlbGF0aXZlUGF0aCA9IHBhdGgucmVsYXRpdmUoZmlsZURpciwgc2VydmljZXNEaXIpO1xuICAgIGNvbnN0IHNoYXJlZFBhdGggPSByZWxhdGl2ZVBhdGggPT09IFwiXCIgPyBcIi4vc29uYW11LnNoYXJlZFwiIDogYCR7cmVsYXRpdmVQYXRofS9zb25hbXUuc2hhcmVkYDtcblxuICAgIHJldHVybiBvbGRGaWxlQ29udGVudC5yZXBsYWNlKC9mcm9tIFwic29uYW11KFxcL2RpY3QpP1wiL2csIGBmcm9tIFwiJHtzaGFyZWRQYXRofVwiYCk7XG4gIH0pKCk7XG5cbiAgLy8gc3luY0hlYWRlcuqwgCDsoJzqs7XrkJwg6rK97JqwIEBnZW5lcmF0ZWQg67iU66Gd7J2EIOq1kOyytO2VmOqxsOuCmCDstZzsg4Hri6jsl5Ag7LaU6rCA7ZWp64uI64ukLlxuICBpZiAoc3luY0hlYWRlcikge1xuICAgIC8vIOyXrOufrCDspIQg7ZiV7Iud66eMIOunpOy5re2VqeuLiOuLpC4g7ZWcIOykhOynnOumrCgvKiogQGdlbmVyYXRlZCAqLynripQg66ek7Lmt7ZWY7KeAIOyViuycvOuvgOuhnCDsiJjrj5nsnLzroZwg7LaV7JW97ZWY7KeAIOuniOyEuOyalC5cbiAgICBjb25zdCBnZW5lcmF0ZWRCbG9ja1JlZ2V4ID0gL1xcL1xcKlxcKlxccj9cXG4gXFwqIEBnZW5lcmF0ZWRcXHI/XFxuW1xcc1xcU10qP1xcKlxcL1xccj9cXG4vO1xuICAgIGlmIChnZW5lcmF0ZWRCbG9ja1JlZ2V4LnRlc3QobmV3RmlsZUNvbnRlbnQpKSB7XG4gICAgICBuZXdGaWxlQ29udGVudCA9IG5ld0ZpbGVDb250ZW50LnJlcGxhY2UoZ2VuZXJhdGVkQmxvY2tSZWdleCwgYCR7c3luY0hlYWRlcn1cXG5gKTtcbiAgICB9IGVsc2Uge1xuICAgICAgbmV3RmlsZUNvbnRlbnQgPSBgJHtzeW5jSGVhZGVyfVxcbiR7bmV3RmlsZUNvbnRlbnR9YDtcbiAgICB9XG4gIH1cblxuICBhd2FpdCB3cml0ZUZpbGUodG9QYXRoLCBuZXdGaWxlQ29udGVudCk7XG4gIHJldHVybiB0cnVlO1xufVxuIl0sIm1hcHBpbmdzIjoiOzs7Ozs7Ozs7Ozs7QUFXQSxlQUFzQixPQUFPLFFBQWtDO0FBQzdELEtBQUk7QUFDRixRQUFNLE9BQU9BLFFBQU0sVUFBVSxLQUFLO0FBQ2xDLFNBQU87U0FDRDtBQUNOLFNBQU87OztBQUtYLGVBQXNCLFdBQVcsUUFBa0M7QUFDakUsS0FBSTtFQUNGLE1BQU0sUUFBUSxNQUFNLEtBQUtBLE9BQUs7QUFDOUIsU0FBTyxNQUFNLFFBQVE7U0FDZjtBQUNOLFNBQU87Ozs7Ozs7Ozs7Ozs7Ozs7O0FBa0JYLGVBQXNCLGdDQUNwQixVQUNBLFFBQ0EsWUFDa0I7QUFDbEIsS0FBSSxDQUFFLE1BQU0sT0FBTyxTQUFTLEVBQUc7QUFDN0IsU0FBTzs7Q0FHVCxNQUFNLGtCQUFrQixNQUFNLFNBQVMsU0FBUyxFQUFFLFVBQVU7Q0FFNUQsSUFBSSx3QkFBd0I7RUFHMUIsTUFBTSxXQUFXLE9BQU8sTUFBTSxlQUFlO0FBQzdDLE1BQUksQ0FBQyxVQUFVO0FBRWIsVUFBTzs7RUFHVCxNQUFNLGNBQWMsS0FBSyxLQUFLLFNBQVMsSUFBSSxXQUFXO0VBQ3RELE1BQU0sVUFBVSxRQUFRLE9BQU87RUFDL0IsTUFBTSxlQUFlLEtBQUssU0FBUyxTQUFTLFlBQVk7RUFDeEQsTUFBTSxhQUFhLGlCQUFpQixLQUFLLG9CQUFvQixHQUFHLGFBQWE7QUFFN0UsU0FBTyxlQUFlLFFBQVEsMkJBQTJCLFNBQVMsV0FBVyxHQUFHO0tBQzlFO0FBR0osS0FBSSxZQUFZO0VBRWQsTUFBTSxzQkFBc0I7QUFDNUIsTUFBSSxvQkFBb0IsS0FBSyxlQUFlLEVBQUU7QUFDNUMsb0JBQWlCLGVBQWUsUUFBUSxxQkFBcUIsR0FBRyxXQUFXLElBQUk7U0FDMUU7QUFDTCxvQkFBaUIsR0FBRyxXQUFXLElBQUk7OztBQUl2QyxPQUFNLFVBQVUsUUFBUSxlQUFlO0FBQ3ZDLFFBQU8ifQ==
75
+ //# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZnMtdXRpbHMuanMiLCJuYW1lcyI6WyJwYXRoIl0sInNvdXJjZXMiOlsiLi4vLi4vc3JjL3V0aWxzL2ZzLXV0aWxzLnRzIl0sInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IGNvbnN0YW50cyB9IGZyb20gXCJmc1wiO1xuaW1wb3J0IHsgdHlwZSBQYXRoTGlrZSB9IGZyb20gXCJmc1wiO1xuaW1wb3J0IHsgYWNjZXNzLCByZWFkRmlsZSwgc3RhdCwgd3JpdGVGaWxlIH0gZnJvbSBcImZzL3Byb21pc2VzXCI7XG5pbXBvcnQgcGF0aCwgeyBkaXJuYW1lIH0gZnJvbSBcInBhdGhcIjtcblxuLyoqXG4gKiBmcy9wcm9taXNlc+yXkOuKlCBleGlzdHPqsIAg7JeG7Ja07JqULiDrjIDsi6AgYWNjZXNz6rCAIOyeiOyKteuLiOuLpC5cbiAqIOq3vOuNsCDslpjripQg7J247YSw7Y6Y7J207Iqk6rCAIOyTsOq4sCDrtojtjrjtlbTsmpQuIOq3uOuemOyEnCDqsJDsi7jso7zsl4jsirXri4jri6QuXG4gKiBAcGFyYW0gcGF0aFxuICogQHJldHVybnNcbiAqL1xuZXhwb3J0IGFzeW5jIGZ1bmN0aW9uIGV4aXN0cyhwYXRoOiBQYXRoTGlrZSk6IFByb21pc2U8Ym9vbGVhbj4ge1xuICB0cnkge1xuICAgIGF3YWl0IGFjY2VzcyhwYXRoLCBjb25zdGFudHMuRl9PSyk7XG4gICAgcmV0dXJuIHRydWU7XG4gIH0gY2F0Y2gge1xuICAgIHJldHVybiBmYWxzZTtcbiAgfVxufVxuXG4vLyDrlJTroInthqDrpqzqsIAg7JWE64uI6528IO2MjOydvOunjCDsobTsnqztlZjripTsp4Ag7ZmV7J247ZWp64uI64ukLlxuZXhwb3J0IGFzeW5jIGZ1bmN0aW9uIGZpbGVFeGlzdHMocGF0aDogUGF0aExpa2UpOiBQcm9taXNlPGJvb2xlYW4+IHtcbiAgdHJ5IHtcbiAgICBjb25zdCBzdGF0cyA9IGF3YWl0IHN0YXQocGF0aCk7XG4gICAgcmV0dXJuIHN0YXRzLmlzRmlsZSgpO1xuICB9IGNhdGNoIHtcbiAgICByZXR1cm4gZmFsc2U7XG4gIH1cbn1cblxuLyoqXG4gKiDtjIzsnbzsnYQg67O17IKs7ZWY66m07IScIGBmcm9tIFwic29uYW11XCJgIGltcG9ydOulvCBzb25hbXUuc2hhcmVkLnRzIOqyveuhnOuhnCDsuZjtmZjtlanri4jri6QuXG4gKlxuICogd2Vi7J2064KYIGFwcCDrk7Hsl5DripQgc29uYW11IO2MqO2CpOyngOqwgCDsl4bsnLzrr4DroZwsIO2VqOq7mCDrs7XsgqzrkJjripQgc29uYW11LnNoYXJlZC50c+yXkOyEnCDqsIDsoLjsmKTrj4TroZ0g67OA7ZmY7ZWp64uI64ukLlxuICog64yA7IOBIO2MjOydvOydmCDsnITsuZjsl5Ag65Sw6528IOyDgeuMgCDqsr3roZzqsIAg64us65287KeR64uI64ukOlxuICogLSBzZXJ2aWNlcy9zb25hbXUuZ2VuZXJhdGVkLnRzIOKGkiAuL3NvbmFtdS5zaGFyZWRcbiAqIC0gc2VydmljZXMvdXNlci91c2VyLnR5cGVzLnRzIOKGkiAuLi9zb25hbXUuc2hhcmVkXG4gKiAtIGkxOG4va28udHMg4oaSIC4uL3NlcnZpY2VzL3NvbmFtdS5zaGFyZWRcbiAqXG4gKiBAcGFyYW0gZnJvbVBhdGgg7JuQ67O4IO2MjOydvCDqsr3roZxcbiAqIEBwYXJhbSB0b1BhdGgg64yA7IOBIO2MjOydvCDqsr3roZxcbiAqIEBwYXJhbSBzeW5jSGVhZGVyIOuPmeq4sO2ZlCDsi5wg7YyM7J28IOy1nOyDgeuLqOyXkCDsgr3snoXtlaAg7KO87ISdIOu4lOuhnS4g6riw7KG0IEBnZW5lcmF0ZWQg67iU66Gd7J20IOyeiOycvOuptCDqtZDssrTtlZjqs6AsIOyXhuycvOuptCDstZzsg4Hri6jsl5Ag7LaU6rCA7ZWp64uI64ukLlxuICogQHJldHVybnMg7YyM7J287J2EIOyNvOycvOuptCB0cnVlLCDqsbTrhIjrm7Dsl4jsnLzrqbQgZmFsc2VcbiAqL1xuZXhwb3J0IGFzeW5jIGZ1bmN0aW9uIGNvcHlGaWxlV2l0aFJlcGxhY2VDb3JlVG9TaGFyZWQoXG4gIGZyb21QYXRoOiBzdHJpbmcsXG4gIHRvUGF0aDogc3RyaW5nLFxuICBzeW5jSGVhZGVyPzogc3RyaW5nLFxuKTogUHJvbWlzZTxib29sZWFuPiB7XG4gIGlmICghKGF3YWl0IGV4aXN0cyhmcm9tUGF0aCkpKSB7XG4gICAgcmV0dXJuIGZhbHNlO1xuICB9XG5cbiAgY29uc3Qgb2xkRmlsZUNvbnRlbnQgPSAoYXdhaXQgcmVhZEZpbGUoZnJvbVBhdGgpKS50b1N0cmluZygpO1xuXG4gIGxldCBuZXdGaWxlQ29udGVudCA9ICgoKSA9PiB7XG4gICAgLy8gc29uYW11LnNoYXJlZC50c+uKlCDtla3sg4Ege2Jhc2V9L3NyYy9zZXJ2aWNlcy9zb25hbXUuc2hhcmVkLnRz7JeQIOychOy5mO2VqeuLiOuLpC5cbiAgICAvLyB0b1BhdGjsl5DshJwgL3NyYy/rpbwg7LC+7JWEIHNlcnZpY2VzIOuUlOugie2GoOumrCDqsr3roZzrpbwg6rOE7IKw7ZWp64uI64ukLlxuICAgIGNvbnN0IHNyY01hdGNoID0gdG9QYXRoLm1hdGNoKC9eKC4rXFwvc3JjKVxcLy8pO1xuICAgIGlmICghc3JjTWF0Y2gpIHtcbiAgICAgIC8vIC9zcmMv6rCAIOyXhuycvOuptCDrs4DtmZgg7JeG7J20IOq3uOuMgOuhnCDrsJjtmZhcbiAgICAgIHJldHVybiBvbGRGaWxlQ29udGVudDtcbiAgICB9XG5cbiAgICBjb25zdCBzZXJ2aWNlc0RpciA9IHBhdGguam9pbihzcmNNYXRjaFsxXSwgXCJzZXJ2aWNlc1wiKTtcbiAgICBjb25zdCBmaWxlRGlyID0gZGlybmFtZSh0b1BhdGgpO1xuICAgIGNvbnN0IHJlbGF0aXZlUGF0aCA9IHBhdGgucmVsYXRpdmUoZmlsZURpciwgc2VydmljZXNEaXIpO1xuICAgIGNvbnN0IHNoYXJlZFBhdGggPSByZWxhdGl2ZVBhdGggPT09IFwiXCIgPyBcIi4vc29uYW11LnNoYXJlZFwiIDogYCR7cmVsYXRpdmVQYXRofS9zb25hbXUuc2hhcmVkYDtcblxuICAgIHJldHVybiBvbGRGaWxlQ29udGVudC5yZXBsYWNlKC9mcm9tIFwic29uYW11KFxcL2RpY3QpP1wiL2csIGBmcm9tIFwiJHtzaGFyZWRQYXRofVwiYCk7XG4gIH0pKCk7XG5cbiAgLy8gc3luY0hlYWRlcuqwgCDsoJzqs7XrkJwg6rK97JqwIEBnZW5lcmF0ZWQg67iU66Gd7J2EIOq1kOyytO2VmOqxsOuCmCDstZzsg4Hri6jsl5Ag7LaU6rCA7ZWp64uI64ukLlxuICAvLyBgKi9gIOynge2bhOyXkOuKlCDtla3sg4Eg67mIIOykhCDtlZwg6rCc66W8IOuztOyepe2VmOyXrCBveGZtdOqwgCDso7zshJ3snYQgaW1wb3J07J2YIGxlYWRpbmcgY29tbWVudOuhnCDsmKTsnbjtlbQg7KCV66CsIOyLnCDrgYzroKTqsIDripQg66y47KCc66W8IOuwqeyngO2VqeuLiOuLpC5cbiAgaWYgKHN5bmNIZWFkZXIpIHtcbiAgICAvLyDquLDsobQgQGdlbmVyYXRlZCDruJTroZ0gKyDrkqTsnbTslrQg7Jik64qUIOu5iCDspITrk6Qo7J6I7Jy866m0IO2PrO2VqCnsnYQg7ZWc6rq867KI7JeQIOunpOy5re2VmOyXrCDqtZDssrQg7IucIOu5iCDspITsnbQg64iE7KCB65CY7KeAIOyViuqyjCDtlanri4jri6QuXG4gICAgLy8g7ZWcIOykhOynnOumrCgvKiogQGdlbmVyYXRlZCAqLynripQg66ek7Lmt7ZWY7KeAIOyViuycvOuvgOuhnCDsiJjrj5nsnLzroZwg7LaV7JW97ZWY7KeAIOuniOyEuOyalC5cbiAgICBjb25zdCBnZW5lcmF0ZWRCbG9ja1JlZ2V4ID0gL1xcL1xcKlxcKlxccj9cXG4gXFwqIEBnZW5lcmF0ZWRcXHI/XFxuW1xcc1xcU10qP1xcKlxcL1xccj9cXG4oXFxyP1xcbikqLztcbiAgICBpZiAoZ2VuZXJhdGVkQmxvY2tSZWdleC50ZXN0KG5ld0ZpbGVDb250ZW50KSkge1xuICAgICAgbmV3RmlsZUNvbnRlbnQgPSBuZXdGaWxlQ29udGVudC5yZXBsYWNlKGdlbmVyYXRlZEJsb2NrUmVnZXgsIGAke3N5bmNIZWFkZXJ9XFxuXFxuYCk7XG4gICAgfSBlbHNlIHtcbiAgICAgIG5ld0ZpbGVDb250ZW50ID0gYCR7c3luY0hlYWRlcn1cXG5cXG4ke25ld0ZpbGVDb250ZW50fWA7XG4gICAgfVxuICB9XG5cbiAgYXdhaXQgd3JpdGVGaWxlKHRvUGF0aCwgbmV3RmlsZUNvbnRlbnQpO1xuICByZXR1cm4gdHJ1ZTtcbn1cbiJdLCJtYXBwaW5ncyI6Ijs7Ozs7Ozs7Ozs7O0FBV0EsZUFBc0IsT0FBTyxRQUFrQztBQUM3RCxLQUFJO0FBQ0YsUUFBTSxPQUFPQSxRQUFNLFVBQVUsS0FBSztBQUNsQyxTQUFPO1NBQ0Q7QUFDTixTQUFPOzs7QUFLWCxlQUFzQixXQUFXLFFBQWtDO0FBQ2pFLEtBQUk7RUFDRixNQUFNLFFBQVEsTUFBTSxLQUFLQSxPQUFLO0FBQzlCLFNBQU8sTUFBTSxRQUFRO1NBQ2Y7QUFDTixTQUFPOzs7Ozs7Ozs7Ozs7Ozs7OztBQWtCWCxlQUFzQixnQ0FDcEIsVUFDQSxRQUNBLFlBQ2tCO0FBQ2xCLEtBQUksQ0FBRSxNQUFNLE9BQU8sU0FBUyxFQUFHO0FBQzdCLFNBQU87O0NBR1QsTUFBTSxrQkFBa0IsTUFBTSxTQUFTLFNBQVMsRUFBRSxVQUFVO0NBRTVELElBQUksd0JBQXdCO0VBRzFCLE1BQU0sV0FBVyxPQUFPLE1BQU0sZUFBZTtBQUM3QyxNQUFJLENBQUMsVUFBVTtBQUViLFVBQU87O0VBR1QsTUFBTSxjQUFjLEtBQUssS0FBSyxTQUFTLElBQUksV0FBVztFQUN0RCxNQUFNLFVBQVUsUUFBUSxPQUFPO0VBQy9CLE1BQU0sZUFBZSxLQUFLLFNBQVMsU0FBUyxZQUFZO0VBQ3hELE1BQU0sYUFBYSxpQkFBaUIsS0FBSyxvQkFBb0IsR0FBRyxhQUFhO0FBRTdFLFNBQU8sZUFBZSxRQUFRLDJCQUEyQixTQUFTLFdBQVcsR0FBRztLQUM5RTtBQUlKLEtBQUksWUFBWTtFQUdkLE1BQU0sc0JBQXNCO0FBQzVCLE1BQUksb0JBQW9CLEtBQUssZUFBZSxFQUFFO0FBQzVDLG9CQUFpQixlQUFlLFFBQVEscUJBQXFCLEdBQUcsV0FBVyxNQUFNO1NBQzVFO0FBQ0wsb0JBQWlCLEdBQUcsV0FBVyxNQUFNOzs7QUFJekMsT0FBTSxVQUFVLFFBQVEsZUFBZTtBQUN2QyxRQUFPIn0=
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "sonamu",
3
- "version": "0.9.3",
3
+ "version": "0.9.4",
4
4
  "description": "Sonamu — TypeScript Fullstack API Framework",
5
5
  "keywords": [
6
6
  "framework",
@@ -85,7 +85,6 @@
85
85
  "@aws-sdk/lib-storage": "^3.971.0",
86
86
  "@aws-sdk/s3-request-presigner": "^3.958.0",
87
87
  "@better-auth/api-key": "~1.6.0",
88
- "@better-auth/infra": "~0.1.14",
89
88
  "@better-auth/passkey": "~1.6.0",
90
89
  "@better-auth/sso": "~1.6.0",
91
90
  "@faker-js/faker": "^9.2.0",
package/src/api/config.ts CHANGED
@@ -198,14 +198,6 @@ export type SonamuServerOptions = {
198
198
  }
199
199
  >;
200
200
  };
201
- /**
202
- * AuditLog 활성화 여부
203
- * true로 설정하면 Better Auth dash() 플러그인을 자동 주입하고
204
- * /api/audit-log/events/track 엔드포인트에서 이벤트를 수신하여
205
- * audit_events 테이블에 적재합니다.
206
- * 사전에 `sonamu auth generate --plugins audit-log`로 엔티티를 생성해야 합니다.
207
- */
208
- auditLog?: boolean;
209
201
  };
210
202
 
211
203
  apiConfig: SonamuFastifyConfig;
package/src/api/sonamu.ts CHANGED
@@ -5,15 +5,13 @@ import { type IncomingMessage, type Server, type ServerResponse } from "http";
5
5
  import os from "os";
6
6
  import path from "path";
7
7
 
8
- import { dispose as logtapeDispose, getLogger } from "@logtape/logtape";
8
+ import { dispose as logtapeDispose } from "@logtape/logtape";
9
9
  import { type Auth, type BetterAuthOptions } from "better-auth";
10
10
  import { type FSWatcher } from "chokidar";
11
11
  import { type FastifyInstance, type FastifyReply, type FastifyRequest } from "fastify";
12
12
  import mime, { lookup as mimeLookup } from "mime-types";
13
13
  import { type ZodObject } from "zod";
14
14
 
15
- import { ingestAuditEvent } from "../auth/audit-log-ingestor";
16
- import { type AuditLogEvent } from "../auth/audit-log-proxy-types";
17
15
  import { BASE_FIELD_MAPPINGS } from "../auth/better-auth-entities";
18
16
  import { applyCacheHeaders, CachePresets } from "../cache-control/cache-control";
19
17
  import { type CacheControlConfig, type CacheControlRequest } from "../cache-control/types";
@@ -235,15 +233,6 @@ class SonamuClass {
235
233
  // 사용자 설정과 기본값을 merge
236
234
  const mergedFieldMappings = merge(BASE_FIELD_MAPPINGS, authConfig);
237
235
 
238
- // auth.auditLog: true인 경우 dash() 플러그인 자동 주입
239
- if (authConfig.auditLog) {
240
- const { dash } = await import("@better-auth/infra");
241
- const auditLogBasePath = "/api/audit-log";
242
- const apiUrl = `${authConfig.baseURL}${auditLogBasePath}`;
243
- const existingPlugins = mergedFieldMappings.plugins ?? [];
244
- mergedFieldMappings.plugins = [...existingPlugins, dash({ apiUrl })];
245
- }
246
-
247
236
  // better-auth 인스턴스 생성
248
237
  const { betterAuth } = await import("better-auth");
249
238
  const { sonamuKnexAdapter } = await import("../auth/knex-adapter");
@@ -325,10 +314,6 @@ class SonamuClass {
325
314
  await this.registerBetterAuth(server, options.auth);
326
315
  }
327
316
 
328
- if (options.auth?.auditLog) {
329
- this.registerAuditLogProxy(server);
330
- }
331
-
332
317
  // API 라우팅 설정
333
318
  await this.withFastify(server, options.apiConfig, {
334
319
  enableSync: initOptions?.enableSync,
@@ -1305,38 +1290,6 @@ class SonamuClass {
1305
1290
  });
1306
1291
  }
1307
1292
 
1308
- private registerAuditLogProxy(server: FastifyInstance) {
1309
- const logger = getLogger(["sonamu", "audit-log"]);
1310
- const basePath = "/api/audit-log";
1311
-
1312
- server.route<{ Body: AuditLogEvent }>({
1313
- method: "POST",
1314
- url: `${basePath}/events/track`,
1315
- handler: async (request, reply) => {
1316
- const event = request.body;
1317
-
1318
- logger.info(
1319
- "Audit event received: {eventType} {eventKey} {eventDisplayName} from {ipAddress} ({country})",
1320
- {
1321
- eventType: event.eventType,
1322
- eventKey: event.eventKey,
1323
- eventDisplayName: event.eventDisplayName,
1324
- ipAddress: event.ipAddress,
1325
- country: event.country,
1326
- },
1327
- );
1328
-
1329
- try {
1330
- await ingestAuditEvent(DB.getDB("w"), event);
1331
- } catch (err) {
1332
- logger.error("audit event ingest failed: {error}", { error: err });
1333
- }
1334
-
1335
- return reply.status(200).send({ ok: true });
1336
- },
1337
- });
1338
- }
1339
-
1340
1293
  private async printStartupSummary() {
1341
1294
  const chalk = (await import("chalk")).default;
1342
1295
  const env = process.env.NODE_ENV ?? "development";
@@ -1372,9 +1325,6 @@ class SonamuClass {
1372
1325
  const basePath = this.config.server.auth.basePath ?? "/api/auth";
1373
1326
  dim(`Auth: better-auth at ${basePath}/*`);
1374
1327
  }
1375
- if (this.config.server.auth?.auditLog) {
1376
- dim(`AuditLog: proxy at /api/audit-log/events/track`);
1377
- }
1378
1328
  if (this.config.api.timezone) {
1379
1329
  dim(`Timezone: ${this.config.api.timezone}`);
1380
1330
  }