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.
- package/dist/api/config.d.ts +0 -8
- package/dist/api/config.d.ts.map +1 -1
- package/dist/api/config.js +1 -1
- package/dist/api/sonamu.d.ts +0 -1
- package/dist/api/sonamu.d.ts.map +1 -1
- package/dist/api/sonamu.js +2 -41
- package/dist/auth/audit-log/builders.d.ts +216 -0
- package/dist/auth/audit-log/builders.d.ts.map +1 -0
- package/dist/auth/audit-log/builders.js +307 -0
- package/dist/auth/audit-log/events.d.ts +143 -0
- package/dist/auth/audit-log/events.d.ts.map +1 -0
- package/dist/auth/audit-log/events.js +74 -0
- package/dist/auth/audit-log/plugin.d.ts +11 -0
- package/dist/auth/audit-log/plugin.d.ts.map +1 -0
- package/dist/auth/audit-log/plugin.js +427 -0
- package/dist/auth/audit-log-ingestor.d.ts +3 -3
- package/dist/auth/audit-log-ingestor.d.ts.map +1 -1
- package/dist/auth/audit-log-ingestor.js +44 -50
- package/dist/auth/index.d.ts +2 -0
- package/dist/auth/index.d.ts.map +1 -1
- package/dist/auth/index.js +4 -4
- package/dist/auth/plugins/entity-definitions/admin.d.ts +1 -1
- package/dist/auth/plugins/entity-definitions/admin.js +4 -4
- package/dist/auth/plugins/entity-definitions/audit-log.d.ts +2 -2
- package/dist/auth/plugins/entity-definitions/audit-log.js +3 -3
- package/dist/auth/plugins/wrappers/admin.d.ts +2 -2
- package/dist/auth/plugins/wrappers/sso.d.ts +1 -1
- package/dist/bin/fixture.d.ts.map +1 -1
- package/dist/bin/fixture.js +111 -1
- package/dist/database/_batch_update.d.ts +1 -1
- package/dist/database/_batch_update.js +2 -2
- package/dist/entity/entity-manager.d.ts +2 -2
- package/dist/entity/entity-manager.d.ts.map +1 -1
- package/dist/entity/entity-manager.js +14 -4
- package/dist/index.js +4 -3
- package/dist/syncer/syncer.d.ts.map +1 -1
- package/dist/syncer/syncer.js +2 -9
- package/dist/template/implementations/entry-server.template.js +3 -2
- package/dist/template/implementations/generated.template.d.ts.map +1 -1
- package/dist/template/implementations/generated.template.js +2 -1
- package/dist/template/implementations/generated_sso.template.d.ts.map +1 -1
- package/dist/template/implementations/generated_sso.template.js +2 -1
- package/dist/template/implementations/queries.template.d.ts.map +1 -1
- package/dist/template/implementations/queries.template.js +3 -1
- package/dist/template/implementations/sd.template.js +3 -2
- package/dist/template/implementations/services.template.d.ts.map +1 -1
- package/dist/template/implementations/services.template.js +44 -7
- package/dist/template/zod-converter.d.ts.map +1 -1
- package/dist/template/zod-converter.js +2 -2
- package/dist/types/types.d.ts +14 -14
- package/dist/ui-web/assets/{index-DrTfl0Ts.js → index-C5KUjXm0.js} +46 -46
- package/dist/ui-web/index.html +1 -1
- package/dist/utils/fs-utils.d.ts.map +1 -1
- package/dist/utils/fs-utils.js +4 -4
- package/package.json +1 -2
- package/src/api/config.ts +0 -8
- package/src/api/sonamu.ts +1 -51
- package/src/auth/audit-log/builders.ts +791 -0
- package/src/auth/audit-log/events.ts +149 -0
- package/src/auth/audit-log/plugin.ts +913 -0
- package/src/auth/audit-log-ingestor.ts +3 -4
- package/src/auth/index.ts +2 -0
- package/src/auth/plugins/entity-definitions/admin.ts +3 -3
- package/src/auth/plugins/entity-definitions/audit-log.ts +2 -2
- package/src/bin/fixture.ts +143 -0
- package/src/database/_batch_update.ts +1 -1
- package/src/entity/entity-manager.ts +10 -3
- package/src/shared/app.shared.ts.txt +2 -3
- package/src/shared/web.shared.ts.txt +2 -2
- package/src/syncer/syncer.ts +1 -11
- package/src/template/implementations/entry-server.template.ts +1 -1
- package/src/template/implementations/generated.template.ts +1 -0
- package/src/template/implementations/generated_sso.template.ts +1 -0
- package/src/template/implementations/queries.template.ts +10 -1
- package/src/template/implementations/sd.template.ts +1 -1
- package/src/template/implementations/services.template.ts +62 -6
- package/src/template/zod-converter.ts +2 -1
- package/src/utils/fs-utils.ts +6 -4
- package/dist/auth/audit-log-proxy-types.d.ts +0 -23
- package/dist/auth/audit-log-proxy-types.d.ts.map +0 -1
- package/dist/auth/audit-log-proxy-types.js +0 -1
- package/src/auth/audit-log-proxy-types.ts +0 -23
package/dist/ui-web/index.html
CHANGED
|
@@ -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-
|
|
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,
|
|
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"}
|
package/dist/utils/fs-utils.js
CHANGED
|
@@ -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+
|
|
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
|
+
"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
|
|
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
|
}
|