sonamu 0.9.1 → 0.9.3

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 (50) hide show
  1. package/dist/api/config.d.ts +9 -2
  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 +1 -0
  5. package/dist/api/sonamu.d.ts.map +1 -1
  6. package/dist/api/sonamu.js +50 -2
  7. package/dist/auth/audit-log-ingestor.d.ts +9 -0
  8. package/dist/auth/audit-log-ingestor.d.ts.map +1 -0
  9. package/dist/auth/audit-log-ingestor.js +200 -0
  10. package/dist/auth/audit-log-proxy-types.d.ts +23 -0
  11. package/dist/auth/audit-log-proxy-types.d.ts.map +1 -0
  12. package/dist/auth/audit-log-proxy-types.js +1 -0
  13. package/dist/auth/index.d.ts +1 -0
  14. package/dist/auth/index.d.ts.map +1 -1
  15. package/dist/auth/index.js +4 -2
  16. package/dist/auth/plugins/entity-definitions/audit-log.d.ts +12 -0
  17. package/dist/auth/plugins/entity-definitions/audit-log.d.ts.map +1 -0
  18. package/dist/auth/plugins/entity-definitions/audit-log.js +291 -0
  19. package/dist/auth/plugins/entity-definitions/index.d.ts +1 -0
  20. package/dist/auth/plugins/entity-definitions/index.d.ts.map +1 -1
  21. package/dist/auth/plugins/entity-definitions/index.js +5 -3
  22. package/dist/auth/plugins/entity-definitions/types.d.ts +1 -1
  23. package/dist/auth/plugins/entity-definitions/types.d.ts.map +1 -1
  24. package/dist/auth/plugins/wrappers/admin.d.ts +2 -2
  25. package/dist/auth/plugins/wrappers/sso.d.ts +1 -1
  26. package/dist/database/knex.d.ts.map +1 -1
  27. package/dist/database/knex.js +10 -18
  28. package/dist/entity/entity-manager.d.ts +2 -2
  29. package/dist/index.js +3 -2
  30. package/dist/storage/buffered-file.d.ts +1 -1
  31. package/dist/storage/buffered-file.js +2 -2
  32. package/dist/types/types.d.ts +14 -14
  33. package/dist/ui-web/assets/index-Dr8pRJC_.css +1 -0
  34. package/dist/ui-web/assets/{index-C8qhvZbs.js → index-DrTfl0Ts.js} +49 -46
  35. package/dist/ui-web/index.html +2 -2
  36. package/package.json +4 -3
  37. package/src/api/config.ts +9 -2
  38. package/src/api/sonamu.ts +65 -1
  39. package/src/auth/audit-log-ingestor.ts +234 -0
  40. package/src/auth/audit-log-proxy-types.ts +23 -0
  41. package/src/auth/index.ts +1 -0
  42. package/src/auth/plugins/entity-definitions/audit-log.ts +171 -0
  43. package/src/auth/plugins/entity-definitions/index.ts +3 -0
  44. package/src/auth/plugins/entity-definitions/types.ts +2 -1
  45. package/src/database/knex.ts +9 -19
  46. package/src/skills/sonamu/auth.md +17 -0
  47. package/src/skills/sonamu/create-sonamu.md +8 -0
  48. package/src/skills/sonamu/scaffolding.md +13 -0
  49. package/src/storage/buffered-file.ts +1 -1
  50. package/dist/ui-web/assets/index-DqgrO7Za.css +0 -1
@@ -0,0 +1,200 @@
1
+ import { __esmMin } from "../_virtual/rolldown_runtime.js";
2
+ import { createHash } from "node:crypto";
3
+
4
+ //#region src/auth/audit-log-ingestor.ts
5
+ function pickString(source, key) {
6
+ const value = source[key];
7
+ return typeof value === "string" ? value : null;
8
+ }
9
+ function pickFirstString(source, keys) {
10
+ for (const key of keys) {
11
+ const value = pickString(source, key);
12
+ if (value !== null) {
13
+ return value;
14
+ }
15
+ }
16
+ return null;
17
+ }
18
+ function parseOccurredAt(raw) {
19
+ if (raw instanceof Date && !Number.isNaN(raw.getTime())) {
20
+ return raw;
21
+ }
22
+ if (typeof raw === "string") {
23
+ const parsed = new Date(raw);
24
+ if (!Number.isNaN(parsed.getTime())) {
25
+ return parsed;
26
+ }
27
+ }
28
+ return new Date();
29
+ }
30
+ function classifyCategory(eventType) {
31
+ if (eventType.startsWith("organization_")) {
32
+ return "organization";
33
+ }
34
+ if (SESSION_EVENT_TYPES.has(eventType)) {
35
+ return "session";
36
+ }
37
+ if (ACCOUNT_EVENT_TYPES.has(eventType)) {
38
+ return "account";
39
+ }
40
+ if (VERIFICATION_EVENT_TYPES.has(eventType)) {
41
+ return "verification";
42
+ }
43
+ if (SECURITY_EVENT_TYPES.has(eventType)) {
44
+ return "security";
45
+ }
46
+ if (USER_EVENT_TYPES.has(eventType)) {
47
+ return "user";
48
+ }
49
+ return "user";
50
+ }
51
+ function computeDedupeKey(parts) {
52
+ const norm = (v) => v ?? "";
53
+ const raw = [
54
+ parts.source,
55
+ parts.event_type,
56
+ parts.event_key,
57
+ norm(parts.actor_user_id),
58
+ norm(parts.subject_user_id),
59
+ norm(parts.organization_id),
60
+ norm(parts.team_id),
61
+ norm(parts.session_id),
62
+ norm(parts.identifier),
63
+ norm(parts.reason),
64
+ norm(parts.action),
65
+ parts.occurred_at.toISOString()
66
+ ].join("|");
67
+ return createHash("sha256").update(raw).digest("hex");
68
+ }
69
+ /**
70
+ * Better Auth dash() 이벤트를 audit_events 테이블에 적재합니다.
71
+ * ON CONFLICT (dedupe_key) DO NOTHING으로 중복을 silent 무시합니다.
72
+ * auth.auditLog: true 설정 시 sonamu 내부에서 자동으로 호출됩니다.
73
+ */
74
+ async function ingestAuditEvent(db, event) {
75
+ const eventData = event.eventData;
76
+ const occurred_at = parseOccurredAt(eventData["occurredAt"]);
77
+ const actor_user_id = pickString(eventData, "triggeredBy");
78
+ const subject_user_id = pickFirstString(eventData, [
79
+ "userId",
80
+ "userid",
81
+ "acceptedById",
82
+ "rejectedById"
83
+ ]);
84
+ const organization_id = pickString(eventData, "organizationId");
85
+ const team_id = pickFirstString(eventData, ["teamId", "inviteeTeamId"]);
86
+ const session_id = pickString(eventData, "sessionId");
87
+ const provider_id = pickString(eventData, "providerId");
88
+ const login_method = pickString(eventData, "loginMethod");
89
+ const identifier = pickFirstString(eventData, [
90
+ "identifier",
91
+ "userEmail",
92
+ "memberEmail",
93
+ "inviteeEmail",
94
+ "acceptedByEmail",
95
+ "rejectedByEmail"
96
+ ]);
97
+ const visitor_id = pickString(eventData, "visitorId");
98
+ const reason = pickFirstString(eventData, ["reason", "banReason"]);
99
+ const action = pickString(eventData, "action");
100
+ const trigger_context = pickString(eventData, "triggerContext");
101
+ const user_agent = pickString(eventData, "userAgent");
102
+ const ip_address = event.ipAddress ?? null;
103
+ const city = event.city ?? null;
104
+ const country = event.country ?? null;
105
+ const country_code = event.countryCode ?? null;
106
+ const category = classifyCategory(event.eventType);
107
+ const dedupe_key = computeDedupeKey({
108
+ source: AUDIT_EVENT_SOURCE,
109
+ event_type: event.eventType,
110
+ event_key: event.eventKey,
111
+ actor_user_id,
112
+ subject_user_id,
113
+ organization_id,
114
+ team_id,
115
+ session_id,
116
+ identifier,
117
+ reason,
118
+ action,
119
+ occurred_at
120
+ });
121
+ const inserted = await db("audit_events").insert({
122
+ source: AUDIT_EVENT_SOURCE,
123
+ source_version: AUDIT_EVENT_SOURCE_VERSION,
124
+ category,
125
+ event_type: event.eventType,
126
+ event_key: event.eventKey,
127
+ dedupe_key,
128
+ actor_user_id,
129
+ subject_user_id,
130
+ organization_id,
131
+ team_id,
132
+ session_id,
133
+ provider_id,
134
+ login_method,
135
+ identifier,
136
+ visitor_id,
137
+ reason,
138
+ action,
139
+ trigger_context,
140
+ ip_address,
141
+ country_code,
142
+ country,
143
+ city,
144
+ user_agent,
145
+ payload_json: eventData,
146
+ occurred_at
147
+ }).onConflict("dedupe_key").ignore().returning("dedupe_key");
148
+ if (inserted.length === 0) {
149
+ return;
150
+ }
151
+ }
152
+ var AUDIT_EVENT_SOURCE, AUDIT_EVENT_SOURCE_VERSION, SESSION_EVENT_TYPES, ACCOUNT_EVENT_TYPES, VERIFICATION_EVENT_TYPES, SECURITY_EVENT_TYPES, USER_EVENT_TYPES;
153
+ var init_audit_log_ingestor = __esmMin((() => {
154
+ AUDIT_EVENT_SOURCE = "better_auth";
155
+ AUDIT_EVENT_SOURCE_VERSION = "better-auth|@better-auth/infra";
156
+ SESSION_EVENT_TYPES = new Set([
157
+ "user_signed_in",
158
+ "user_signed_out",
159
+ "user_sign_in_failed",
160
+ "session_created",
161
+ "session_revoked",
162
+ "all_sessions_revoked",
163
+ "user_impersonated",
164
+ "user_impersonated_stopped"
165
+ ]);
166
+ ACCOUNT_EVENT_TYPES = new Set([
167
+ "account_linked",
168
+ "account_unlinked",
169
+ "password_changed",
170
+ "two_factor_enabled",
171
+ "two_factor_disabled",
172
+ "two_factor_verified"
173
+ ]);
174
+ VERIFICATION_EVENT_TYPES = new Set([
175
+ "email_verification_sent",
176
+ "password_reset_requested",
177
+ "password_reset_completed"
178
+ ]);
179
+ SECURITY_EVENT_TYPES = new Set([
180
+ "security_blocked",
181
+ "security_allowed",
182
+ "security_challenged",
183
+ "security_stale_account"
184
+ ]);
185
+ USER_EVENT_TYPES = new Set([
186
+ "user_created",
187
+ "profile_updated",
188
+ "profile_image_updated",
189
+ "email_verified",
190
+ "email_changed",
191
+ "user_banned",
192
+ "user_unbanned",
193
+ "user_deleted"
194
+ ]);
195
+ }));
196
+
197
+ //#endregion
198
+ init_audit_log_ingestor();
199
+ export { ingestAuditEvent, init_audit_log_ingestor };
200
+ //# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiYXVkaXQtbG9nLWluZ2VzdG9yLmpzIiwibmFtZXMiOltdLCJzb3VyY2VzIjpbIi4uLy4uL3NyYy9hdXRoL2F1ZGl0LWxvZy1pbmdlc3Rvci50cyJdLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBjcmVhdGVIYXNoIH0gZnJvbSBcIm5vZGU6Y3J5cHRvXCI7XG5cbmltcG9ydCB7IHR5cGUgS25leCB9IGZyb20gXCJrbmV4XCI7XG5cbmltcG9ydCB7IHR5cGUgQXVkaXRMb2dFdmVudCB9IGZyb20gXCIuL2F1ZGl0LWxvZy1wcm94eS10eXBlc1wiO1xuXG5jb25zdCBBVURJVF9FVkVOVF9TT1VSQ0UgPSBcImJldHRlcl9hdXRoXCI7XG5jb25zdCBBVURJVF9FVkVOVF9TT1VSQ0VfVkVSU0lPTiA9IFwiYmV0dGVyLWF1dGh8QGJldHRlci1hdXRoL2luZnJhXCI7XG5cbmNvbnN0IFNFU1NJT05fRVZFTlRfVFlQRVMgPSBuZXcgU2V0PHN0cmluZz4oW1xuICBcInVzZXJfc2lnbmVkX2luXCIsXG4gIFwidXNlcl9zaWduZWRfb3V0XCIsXG4gIFwidXNlcl9zaWduX2luX2ZhaWxlZFwiLFxuICBcInNlc3Npb25fY3JlYXRlZFwiLFxuICBcInNlc3Npb25fcmV2b2tlZFwiLFxuICBcImFsbF9zZXNzaW9uc19yZXZva2VkXCIsXG4gIFwidXNlcl9pbXBlcnNvbmF0ZWRcIixcbiAgXCJ1c2VyX2ltcGVyc29uYXRlZF9zdG9wcGVkXCIsXG5dKTtcblxuY29uc3QgQUNDT1VOVF9FVkVOVF9UWVBFUyA9IG5ldyBTZXQ8c3RyaW5nPihbXG4gIFwiYWNjb3VudF9saW5rZWRcIixcbiAgXCJhY2NvdW50X3VubGlua2VkXCIsXG4gIFwicGFzc3dvcmRfY2hhbmdlZFwiLFxuXG4gIC8vIEBiZXR0ZXItYXV0aC9pbmZyYUAwLjEuMTQg6riw7KSAIEVWRU5UX1RZUEVTIOyDgeyImOyXkOuKlCDsoJXsnZjrkJjslrQg7J6I7Jy864KYIOyLpOygnCB0cmFja0V2ZW50KCkg7Zi47Lac7J20IOyXhuuKlCDrr7jqtaztmIQg7J2067Kk7Yq47J6EXG4gIC8vIO2Wpe2bhCDrsoTsoITsl5DshJwgZW1pdOuQoCDqsr3smrDrpbwg64yA67mE7ZW0IGFjY291bnTroZwg7J6E7IucIOuTseuhnVxuICBcInR3b19mYWN0b3JfZW5hYmxlZFwiLFxuICBcInR3b19mYWN0b3JfZGlzYWJsZWRcIixcbiAgXCJ0d29fZmFjdG9yX3ZlcmlmaWVkXCIsXG5dKTtcblxuY29uc3QgVkVSSUZJQ0FUSU9OX0VWRU5UX1RZUEVTID0gbmV3IFNldDxzdHJpbmc+KFtcbiAgXCJlbWFpbF92ZXJpZmljYXRpb25fc2VudFwiLFxuICBcInBhc3N3b3JkX3Jlc2V0X3JlcXVlc3RlZFwiLFxuICBcInBhc3N3b3JkX3Jlc2V0X2NvbXBsZXRlZFwiLFxuXSk7XG5cbmNvbnN0IFNFQ1VSSVRZX0VWRU5UX1RZUEVTID0gbmV3IFNldDxzdHJpbmc+KFtcbiAgXCJzZWN1cml0eV9ibG9ja2VkXCIsXG4gIFwic2VjdXJpdHlfYWxsb3dlZFwiLFxuICBcInNlY3VyaXR5X2NoYWxsZW5nZWRcIixcbiAgXCJzZWN1cml0eV9zdGFsZV9hY2NvdW50XCIsXG5dKTtcblxuY29uc3QgVVNFUl9FVkVOVF9UWVBFUyA9IG5ldyBTZXQ8c3RyaW5nPihbXG4gIFwidXNlcl9jcmVhdGVkXCIsXG4gIFwicHJvZmlsZV91cGRhdGVkXCIsXG4gIFwicHJvZmlsZV9pbWFnZV91cGRhdGVkXCIsXG4gIFwiZW1haWxfdmVyaWZpZWRcIixcbiAgXCJlbWFpbF9jaGFuZ2VkXCIsXG4gIFwidXNlcl9iYW5uZWRcIixcbiAgXCJ1c2VyX3VuYmFubmVkXCIsXG4gIFwidXNlcl9kZWxldGVkXCIsXG5dKTtcblxuZnVuY3Rpb24gcGlja1N0cmluZyhzb3VyY2U6IFJlY29yZDxzdHJpbmcsIHVua25vd24+LCBrZXk6IHN0cmluZyk6IHN0cmluZyB8IG51bGwge1xuICBjb25zdCB2YWx1ZSA9IHNvdXJjZVtrZXldO1xuICByZXR1cm4gdHlwZW9mIHZhbHVlID09PSBcInN0cmluZ1wiID8gdmFsdWUgOiBudWxsO1xufVxuXG5mdW5jdGlvbiBwaWNrRmlyc3RTdHJpbmcoc291cmNlOiBSZWNvcmQ8c3RyaW5nLCB1bmtub3duPiwga2V5czogcmVhZG9ubHkgc3RyaW5nW10pOiBzdHJpbmcgfCBudWxsIHtcbiAgZm9yIChjb25zdCBrZXkgb2Yga2V5cykge1xuICAgIGNvbnN0IHZhbHVlID0gcGlja1N0cmluZyhzb3VyY2UsIGtleSk7XG4gICAgaWYgKHZhbHVlICE9PSBudWxsKSB7XG4gICAgICByZXR1cm4gdmFsdWU7XG4gICAgfVxuICB9XG4gIHJldHVybiBudWxsO1xufVxuXG5mdW5jdGlvbiBwYXJzZU9jY3VycmVkQXQocmF3OiB1bmtub3duKTogRGF0ZSB7XG4gIGlmIChyYXcgaW5zdGFuY2VvZiBEYXRlICYmICFOdW1iZXIuaXNOYU4ocmF3LmdldFRpbWUoKSkpIHtcbiAgICByZXR1cm4gcmF3O1xuICB9XG4gIGlmICh0eXBlb2YgcmF3ID09PSBcInN0cmluZ1wiKSB7XG4gICAgY29uc3QgcGFyc2VkID0gbmV3IERhdGUocmF3KTtcbiAgICBpZiAoIU51bWJlci5pc05hTihwYXJzZWQuZ2V0VGltZSgpKSkge1xuICAgICAgcmV0dXJuIHBhcnNlZDtcbiAgICB9XG4gIH1cbiAgcmV0dXJuIG5ldyBEYXRlKCk7XG59XG5cbmZ1bmN0aW9uIGNsYXNzaWZ5Q2F0ZWdvcnkoXG4gIGV2ZW50VHlwZTogc3RyaW5nLFxuKTogXCJ1c2VyXCIgfCBcInNlc3Npb25cIiB8IFwiYWNjb3VudFwiIHwgXCJ2ZXJpZmljYXRpb25cIiB8IFwib3JnYW5pemF0aW9uXCIgfCBcInNlY3VyaXR5XCIge1xuICBpZiAoZXZlbnRUeXBlLnN0YXJ0c1dpdGgoXCJvcmdhbml6YXRpb25fXCIpKSB7XG4gICAgcmV0dXJuIFwib3JnYW5pemF0aW9uXCI7XG4gIH1cbiAgaWYgKFNFU1NJT05fRVZFTlRfVFlQRVMuaGFzKGV2ZW50VHlwZSkpIHtcbiAgICByZXR1cm4gXCJzZXNzaW9uXCI7XG4gIH1cbiAgaWYgKEFDQ09VTlRfRVZFTlRfVFlQRVMuaGFzKGV2ZW50VHlwZSkpIHtcbiAgICByZXR1cm4gXCJhY2NvdW50XCI7XG4gIH1cbiAgaWYgKFZFUklGSUNBVElPTl9FVkVOVF9UWVBFUy5oYXMoZXZlbnRUeXBlKSkge1xuICAgIHJldHVybiBcInZlcmlmaWNhdGlvblwiO1xuICB9XG4gIGlmIChTRUNVUklUWV9FVkVOVF9UWVBFUy5oYXMoZXZlbnRUeXBlKSkge1xuICAgIHJldHVybiBcInNlY3VyaXR5XCI7XG4gIH1cbiAgaWYgKFVTRVJfRVZFTlRfVFlQRVMuaGFzKGV2ZW50VHlwZSkpIHtcbiAgICByZXR1cm4gXCJ1c2VyXCI7XG4gIH1cbiAgcmV0dXJuIFwidXNlclwiO1xufVxuXG5mdW5jdGlvbiBjb21wdXRlRGVkdXBlS2V5KHBhcnRzOiB7XG4gIHNvdXJjZTogc3RyaW5nO1xuICBldmVudF90eXBlOiBzdHJpbmc7XG4gIGV2ZW50X2tleTogc3RyaW5nO1xuICBhY3Rvcl91c2VyX2lkOiBzdHJpbmcgfCBudWxsO1xuICBzdWJqZWN0X3VzZXJfaWQ6IHN0cmluZyB8IG51bGw7XG4gIG9yZ2FuaXphdGlvbl9pZDogc3RyaW5nIHwgbnVsbDtcbiAgdGVhbV9pZDogc3RyaW5nIHwgbnVsbDtcbiAgc2Vzc2lvbl9pZDogc3RyaW5nIHwgbnVsbDtcbiAgaWRlbnRpZmllcjogc3RyaW5nIHwgbnVsbDtcbiAgcmVhc29uOiBzdHJpbmcgfCBudWxsO1xuICBhY3Rpb246IHN0cmluZyB8IG51bGw7XG4gIG9jY3VycmVkX2F0OiBEYXRlO1xufSk6IHN0cmluZyB7XG4gIGNvbnN0IG5vcm0gPSAodjogc3RyaW5nIHwgbnVsbCk6IHN0cmluZyA9PiB2ID8/IFwiXCI7XG4gIGNvbnN0IHJhdyA9IFtcbiAgICBwYXJ0cy5zb3VyY2UsXG4gICAgcGFydHMuZXZlbnRfdHlwZSxcbiAgICBwYXJ0cy5ldmVudF9rZXksXG4gICAgbm9ybShwYXJ0cy5hY3Rvcl91c2VyX2lkKSxcbiAgICBub3JtKHBhcnRzLnN1YmplY3RfdXNlcl9pZCksXG4gICAgbm9ybShwYXJ0cy5vcmdhbml6YXRpb25faWQpLFxuICAgIG5vcm0ocGFydHMudGVhbV9pZCksXG4gICAgbm9ybShwYXJ0cy5zZXNzaW9uX2lkKSxcbiAgICBub3JtKHBhcnRzLmlkZW50aWZpZXIpLFxuICAgIG5vcm0ocGFydHMucmVhc29uKSxcbiAgICBub3JtKHBhcnRzLmFjdGlvbiksXG4gICAgcGFydHMub2NjdXJyZWRfYXQudG9JU09TdHJpbmcoKSxcbiAgXS5qb2luKFwifFwiKTtcbiAgcmV0dXJuIGNyZWF0ZUhhc2goXCJzaGEyNTZcIikudXBkYXRlKHJhdykuZGlnZXN0KFwiaGV4XCIpO1xufVxuXG4vKipcbiAqIEJldHRlciBBdXRoIGRhc2goKSDsnbTrsqTtirjrpbwgYXVkaXRfZXZlbnRzIO2FjOydtOu4lOyXkCDsoIHsnqztlanri4jri6QuXG4gKiBPTiBDT05GTElDVCAoZGVkdXBlX2tleSkgRE8gTk9USElOR+ycvOuhnCDspJHrs7XsnYQgc2lsZW50IOustOyLnO2VqeuLiOuLpC5cbiAqIGF1dGguYXVkaXRMb2c6IHRydWUg7ISk7KCVIOyLnCBzb25hbXUg64K067aA7JeQ7IScIOyekOuPmeycvOuhnCDtmLjstpzrkKnri4jri6QuXG4gKi9cbmV4cG9ydCBhc3luYyBmdW5jdGlvbiBpbmdlc3RBdWRpdEV2ZW50KGRiOiBLbmV4LCBldmVudDogQXVkaXRMb2dFdmVudCk6IFByb21pc2U8dm9pZD4ge1xuICBjb25zdCBldmVudERhdGEgPSBldmVudC5ldmVudERhdGE7XG4gIGNvbnN0IG9jY3VycmVkX2F0ID0gcGFyc2VPY2N1cnJlZEF0KGV2ZW50RGF0YVtcIm9jY3VycmVkQXRcIl0pO1xuXG4gIGNvbnN0IGFjdG9yX3VzZXJfaWQgPSBwaWNrU3RyaW5nKGV2ZW50RGF0YSwgXCJ0cmlnZ2VyZWRCeVwiKTtcbiAgY29uc3Qgc3ViamVjdF91c2VyX2lkID0gcGlja0ZpcnN0U3RyaW5nKGV2ZW50RGF0YSwgW1xuICAgIFwidXNlcklkXCIsXG4gICAgXCJ1c2VyaWRcIixcbiAgICBcImFjY2VwdGVkQnlJZFwiLFxuICAgIFwicmVqZWN0ZWRCeUlkXCIsXG4gIF0pO1xuICBjb25zdCBvcmdhbml6YXRpb25faWQgPSBwaWNrU3RyaW5nKGV2ZW50RGF0YSwgXCJvcmdhbml6YXRpb25JZFwiKTtcbiAgY29uc3QgdGVhbV9pZCA9IHBpY2tGaXJzdFN0cmluZyhldmVudERhdGEsIFtcInRlYW1JZFwiLCBcImludml0ZWVUZWFtSWRcIl0pO1xuICBjb25zdCBzZXNzaW9uX2lkID0gcGlja1N0cmluZyhldmVudERhdGEsIFwic2Vzc2lvbklkXCIpO1xuICBjb25zdCBwcm92aWRlcl9pZCA9IHBpY2tTdHJpbmcoZXZlbnREYXRhLCBcInByb3ZpZGVySWRcIik7XG4gIGNvbnN0IGxvZ2luX21ldGhvZCA9IHBpY2tTdHJpbmcoZXZlbnREYXRhLCBcImxvZ2luTWV0aG9kXCIpO1xuICBjb25zdCBpZGVudGlmaWVyID0gcGlja0ZpcnN0U3RyaW5nKGV2ZW50RGF0YSwgW1xuICAgIFwiaWRlbnRpZmllclwiLFxuICAgIFwidXNlckVtYWlsXCIsXG4gICAgXCJtZW1iZXJFbWFpbFwiLFxuICAgIFwiaW52aXRlZUVtYWlsXCIsXG4gICAgXCJhY2NlcHRlZEJ5RW1haWxcIixcbiAgICBcInJlamVjdGVkQnlFbWFpbFwiLFxuICBdKTtcbiAgY29uc3QgdmlzaXRvcl9pZCA9IHBpY2tTdHJpbmcoZXZlbnREYXRhLCBcInZpc2l0b3JJZFwiKTtcbiAgY29uc3QgcmVhc29uID0gcGlja0ZpcnN0U3RyaW5nKGV2ZW50RGF0YSwgW1wicmVhc29uXCIsIFwiYmFuUmVhc29uXCJdKTtcbiAgY29uc3QgYWN0aW9uID0gcGlja1N0cmluZyhldmVudERhdGEsIFwiYWN0aW9uXCIpO1xuICBjb25zdCB0cmlnZ2VyX2NvbnRleHQgPSBwaWNrU3RyaW5nKGV2ZW50RGF0YSwgXCJ0cmlnZ2VyQ29udGV4dFwiKTtcbiAgY29uc3QgdXNlcl9hZ2VudCA9IHBpY2tTdHJpbmcoZXZlbnREYXRhLCBcInVzZXJBZ2VudFwiKTtcblxuICBjb25zdCBpcF9hZGRyZXNzID0gZXZlbnQuaXBBZGRyZXNzID8/IG51bGw7XG4gIGNvbnN0IGNpdHkgPSBldmVudC5jaXR5ID8/IG51bGw7XG4gIGNvbnN0IGNvdW50cnkgPSBldmVudC5jb3VudHJ5ID8/IG51bGw7XG4gIGNvbnN0IGNvdW50cnlfY29kZSA9IGV2ZW50LmNvdW50cnlDb2RlID8/IG51bGw7XG5cbiAgY29uc3QgY2F0ZWdvcnkgPSBjbGFzc2lmeUNhdGVnb3J5KGV2ZW50LmV2ZW50VHlwZSk7XG4gIGNvbnN0IGRlZHVwZV9rZXkgPSBjb21wdXRlRGVkdXBlS2V5KHtcbiAgICBzb3VyY2U6IEFVRElUX0VWRU5UX1NPVVJDRSxcbiAgICBldmVudF90eXBlOiBldmVudC5ldmVudFR5cGUsXG4gICAgZXZlbnRfa2V5OiBldmVudC5ldmVudEtleSxcbiAgICBhY3Rvcl91c2VyX2lkLFxuICAgIHN1YmplY3RfdXNlcl9pZCxcbiAgICBvcmdhbml6YXRpb25faWQsXG4gICAgdGVhbV9pZCxcbiAgICBzZXNzaW9uX2lkLFxuICAgIGlkZW50aWZpZXIsXG4gICAgcmVhc29uLFxuICAgIGFjdGlvbixcbiAgICBvY2N1cnJlZF9hdCxcbiAgfSk7XG5cbiAgLy8gT04gQ09ORkxJQ1QgRE8gTk9USElORzogZGVkdXBlX2tleSBVTklRVUUg7JyE67CY7J2EIHNpbGVudCDrrLTsi5wuXG4gIC8vIHRyeS9jYXRjaCDrsKnsi53snYAgUEcg7Luk64Sl7IWY7J2EIGFib3J0ZWQg7IOB7YOc66GcIOunjOuTnOuvgOuhnCDsgqzsmqntlZjsp4Ag7JWK64qU64ukLlxuICBjb25zdCBpbnNlcnRlZCA9IGF3YWl0IGRiKFwiYXVkaXRfZXZlbnRzXCIpXG4gICAgLmluc2VydCh7XG4gICAgICBzb3VyY2U6IEFVRElUX0VWRU5UX1NPVVJDRSxcbiAgICAgIHNvdXJjZV92ZXJzaW9uOiBBVURJVF9FVkVOVF9TT1VSQ0VfVkVSU0lPTixcbiAgICAgIGNhdGVnb3J5LFxuICAgICAgZXZlbnRfdHlwZTogZXZlbnQuZXZlbnRUeXBlLFxuICAgICAgZXZlbnRfa2V5OiBldmVudC5ldmVudEtleSxcbiAgICAgIGRlZHVwZV9rZXksXG4gICAgICBhY3Rvcl91c2VyX2lkLFxuICAgICAgc3ViamVjdF91c2VyX2lkLFxuICAgICAgb3JnYW5pemF0aW9uX2lkLFxuICAgICAgdGVhbV9pZCxcbiAgICAgIHNlc3Npb25faWQsXG4gICAgICBwcm92aWRlcl9pZCxcbiAgICAgIGxvZ2luX21ldGhvZCxcbiAgICAgIGlkZW50aWZpZXIsXG4gICAgICB2aXNpdG9yX2lkLFxuICAgICAgcmVhc29uLFxuICAgICAgYWN0aW9uLFxuICAgICAgdHJpZ2dlcl9jb250ZXh0LFxuICAgICAgaXBfYWRkcmVzcyxcbiAgICAgIGNvdW50cnlfY29kZSxcbiAgICAgIGNvdW50cnksXG4gICAgICBjaXR5LFxuICAgICAgdXNlcl9hZ2VudCxcbiAgICAgIHBheWxvYWRfanNvbjogZXZlbnREYXRhLFxuICAgICAgb2NjdXJyZWRfYXQsXG4gICAgfSlcbiAgICAub25Db25mbGljdChcImRlZHVwZV9rZXlcIilcbiAgICAuaWdub3JlKClcbiAgICAucmV0dXJuaW5nKFwiZGVkdXBlX2tleVwiKTtcblxuICBpZiAoaW5zZXJ0ZWQubGVuZ3RoID09PSAwKSB7XG4gICAgcmV0dXJuOyAvLyBzaWxlbnQgZGVkdXBlXG4gIH1cbn1cbiJdLCJtYXBwaW5ncyI6Ijs7OztBQXdEQSxTQUFTLFdBQVcsUUFBaUMsS0FBNEI7Q0FDL0UsTUFBTSxRQUFRLE9BQU87QUFDckIsUUFBTyxPQUFPLFVBQVUsV0FBVyxRQUFROztBQUc3QyxTQUFTLGdCQUFnQixRQUFpQyxNQUF3QztBQUNoRyxNQUFLLE1BQU0sT0FBTyxNQUFNO0VBQ3RCLE1BQU0sUUFBUSxXQUFXLFFBQVEsSUFBSTtBQUNyQyxNQUFJLFVBQVUsTUFBTTtBQUNsQixVQUFPOzs7QUFHWCxRQUFPOztBQUdULFNBQVMsZ0JBQWdCLEtBQW9CO0FBQzNDLEtBQUksZUFBZSxRQUFRLENBQUMsT0FBTyxN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
@@ -0,0 +1,23 @@
1
+ /**
2
+ * Better Auth dash() 플러그인이 POST ${apiUrl}/events/track으로 전송하는 이벤트 body 타입
3
+ */
4
+ export type AuditLogEvent = {
5
+ eventType: string;
6
+ eventData: Record<string, unknown>;
7
+ eventKey: string;
8
+ eventDisplayName?: string;
9
+ ipAddress?: string;
10
+ city?: string;
11
+ country?: string;
12
+ countryCode?: string;
13
+ };
14
+ /**
15
+ * AuditLog 프록시 옵션
16
+ */
17
+ export type AuditLogProxyOptions = {
18
+ /** 프록시 base path (기본값: "/api/audit-log") */
19
+ basePath?: string;
20
+ /** 이벤트 수신 시 콜백 (향후 DB 적재 확장 포인트) */
21
+ onEvent?: (event: AuditLogEvent) => void | Promise<void>;
22
+ };
23
+ //# sourceMappingURL=audit-log-proxy-types.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"audit-log-proxy-types.d.ts","sourceRoot":"","sources":["../../src/auth/audit-log-proxy-types.ts"],"names":[],"mappings":"AAAA;;GAEG;AACH,MAAM,MAAM,aAAa,GAAG;IAC1B,SAAS,EAAE,MAAM,CAAC;IAClB,SAAS,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAAC;IACnC,QAAQ,EAAE,MAAM,CAAC;IACjB,gBAAgB,CAAC,EAAE,MAAM,CAAC;IAC1B,SAAS,CAAC,EAAE,MAAM,CAAC;IACnB,IAAI,CAAC,EAAE,MAAM,CAAC;IACd,OAAO,CAAC,EAAE,MAAM,CAAC;IACjB,WAAW,CAAC,EAAE,MAAM,CAAC;CACtB,CAAC;AAEF;;GAEG;AACH,MAAM,MAAM,oBAAoB,GAAG;IACjC,4CAA4C;IAC5C,QAAQ,CAAC,EAAE,MAAM,CAAC;IAClB,oCAAoC;IACpC,OAAO,CAAC,EAAE,CAAC,KAAK,EAAE,aAAa,KAAK,IAAI,GAAG,OAAO,CAAC,IAAI,CAAC,CAAC;CAC1D,CAAC"}
@@ -0,0 +1 @@
1
+ export { };
@@ -1,5 +1,6 @@
1
1
  export type { GenerateBetterAuthEntitiesOptions } from "./auth-generator";
2
2
  export { generateBetterAuthEntities } from "./auth-generator";
3
+ export { ingestAuditEvent } from "./audit-log-ingestor";
3
4
  export { BASE_FIELD_MAPPINGS, betterAuthV1 } from "./better-auth-entities";
4
5
  export { sonamuKnexAdapter } from "./knex-adapter";
5
6
  export * from "./plugins";
@@ -1 +1 @@
1
- {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/auth/index.ts"],"names":[],"mappings":"AAAA,YAAY,EAAE,iCAAiC,EAAE,MAAM,kBAAkB,CAAC;AAC1E,OAAO,EAAE,0BAA0B,EAAE,MAAM,kBAAkB,CAAC;AAC9D,OAAO,EAAE,mBAAmB,EAAE,YAAY,EAAE,MAAM,wBAAwB,CAAC;AAC3E,OAAO,EAAE,iBAAiB,EAAE,MAAM,gBAAgB,CAAC;AAGnD,cAAc,WAAW,CAAC"}
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/auth/index.ts"],"names":[],"mappings":"AAAA,YAAY,EAAE,iCAAiC,EAAE,MAAM,kBAAkB,CAAC;AAC1E,OAAO,EAAE,0BAA0B,EAAE,MAAM,kBAAkB,CAAC;AAC9D,OAAO,EAAE,gBAAgB,EAAE,MAAM,sBAAsB,CAAC;AACxD,OAAO,EAAE,mBAAmB,EAAE,YAAY,EAAE,MAAM,wBAAwB,CAAC;AAC3E,OAAO,EAAE,iBAAiB,EAAE,MAAM,gBAAgB,CAAC;AAGnD,cAAc,WAAW,CAAC"}
@@ -1,3 +1,4 @@
1
+ import { ingestAuditEvent, init_audit_log_ingestor } from "./audit-log-ingestor.js";
1
2
  import { BASE_FIELD_MAPPINGS, betterAuthV1, init_better_auth_entities } from "./better-auth-entities.js";
2
3
  import { generateBetterAuthEntities } from "./auth-generator.js";
3
4
  import { init_knex_adapter, sonamuKnexAdapter } from "./knex-adapter.js";
@@ -14,9 +15,10 @@ import { USERNAME_SCHEMA, username } from "./plugins/wrappers/username.js";
14
15
  import "./plugins/index.js";
15
16
 
16
17
  //#region src/auth/index.ts
18
+ init_audit_log_ingestor();
17
19
  init_better_auth_entities();
18
20
  init_knex_adapter();
19
21
 
20
22
  //#endregion
21
- export { ADMIN_SCHEMA, ANONYMOUS_SCHEMA, API_KEY_SCHEMA, BASE_FIELD_MAPPINGS, JWT_SCHEMA, ORGANIZATION_SCHEMA, PASSKEY_SCHEMA, PHONE_NUMBER_SCHEMA, SSO_SCHEMA, TWO_FACTOR_SCHEMA, USERNAME_SCHEMA, admin, anonymous, apiKey, betterAuthV1, generateBetterAuthEntities, jwt, organization, passkey, phoneNumber, sonamuKnexAdapter, sso, twoFactor, username };
22
- //# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiaW5kZXguanMiLCJuYW1lcyI6W10sInNvdXJjZXMiOlsiLi4vLi4vc3JjL2F1dGgvaW5kZXgudHMiXSwic291cmNlc0NvbnRlbnQiOlsiZXhwb3J0IHR5cGUgeyBHZW5lcmF0ZUJldHRlckF1dGhFbnRpdGllc09wdGlvbnMgfSBmcm9tIFwiLi9hdXRoLWdlbmVyYXRvclwiO1xuZXhwb3J0IHsgZ2VuZXJhdGVCZXR0ZXJBdXRoRW50aXRpZXMgfSBmcm9tIFwiLi9hdXRoLWdlbmVyYXRvclwiO1xuZXhwb3J0IHsgQkFTRV9GSUVMRF9NQVBQSU5HUywgYmV0dGVyQXV0aFYxIH0gZnJvbSBcIi4vYmV0dGVyLWF1dGgtZW50aXRpZXNcIjtcbmV4cG9ydCB7IHNvbmFtdUtuZXhBZGFwdGVyIH0gZnJvbSBcIi4va25leC1hZGFwdGVyXCI7XG5cbi8vIOyZuOu2gOuhnOuKlCB3cmFwcGVyc+unjCBleHBvcnQgKGFkbWluLCB0d29GYWN0b3Ig65OxIOuemO2NvCDtlajsiJjsmYAgU0NIRU1BKVxuZXhwb3J0ICogZnJvbSBcIi4vcGx1Z2luc1wiO1xuIl0sIm1hcHBpbmdzIjoiOzs7Ozs7Ozs7Ozs7Ozs7OzJCQUUyRTttQkFDeEIifQ==
23
+ export { ADMIN_SCHEMA, ANONYMOUS_SCHEMA, API_KEY_SCHEMA, BASE_FIELD_MAPPINGS, JWT_SCHEMA, ORGANIZATION_SCHEMA, PASSKEY_SCHEMA, PHONE_NUMBER_SCHEMA, SSO_SCHEMA, TWO_FACTOR_SCHEMA, USERNAME_SCHEMA, admin, anonymous, apiKey, betterAuthV1, generateBetterAuthEntities, ingestAuditEvent, jwt, organization, passkey, phoneNumber, sonamuKnexAdapter, sso, twoFactor, username };
24
+ //# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiaW5kZXguanMiLCJuYW1lcyI6W10sInNvdXJjZXMiOlsiLi4vLi4vc3JjL2F1dGgvaW5kZXgudHMiXSwic291cmNlc0NvbnRlbnQiOlsiZXhwb3J0IHR5cGUgeyBHZW5lcmF0ZUJldHRlckF1dGhFbnRpdGllc09wdGlvbnMgfSBmcm9tIFwiLi9hdXRoLWdlbmVyYXRvclwiO1xuZXhwb3J0IHsgZ2VuZXJhdGVCZXR0ZXJBdXRoRW50aXRpZXMgfSBmcm9tIFwiLi9hdXRoLWdlbmVyYXRvclwiO1xuZXhwb3J0IHsgaW5nZXN0QXVkaXRFdmVudCB9IGZyb20gXCIuL2F1ZGl0LWxvZy1pbmdlc3RvclwiO1xuZXhwb3J0IHsgQkFTRV9GSUVMRF9NQVBQSU5HUywgYmV0dGVyQXV0aFYxIH0gZnJvbSBcIi4vYmV0dGVyLWF1dGgtZW50aXRpZXNcIjtcbmV4cG9ydCB7IHNvbmFtdUtuZXhBZGFwdGVyIH0gZnJvbSBcIi4va25leC1hZGFwdGVyXCI7XG5cbi8vIOyZuOu2gOuhnOuKlCB3cmFwcGVyc+unjCBleHBvcnQgKGFkbWluLCB0d29GYWN0b3Ig65OxIOuemO2NvCDtlajsiJjsmYAgU0NIRU1BKVxuZXhwb3J0ICogZnJvbSBcIi4vcGx1Z2luc1wiO1xuIl0sIm1hcHBpbmdzIjoiOzs7Ozs7Ozs7Ozs7Ozs7Ozt5QkFFd0Q7MkJBQ21CO21CQUN4QiJ9
@@ -0,0 +1,12 @@
1
+ import { type BetterAuthEntityDef } from "./types";
2
+ /**
3
+ * better-auth AuditLog 플러그인 엔티티 정의
4
+ *
5
+ * auth.auditLog: true 로 활성화되며 audit_events 테이블을 생성합니다.
6
+ * - Better Auth dash() 플러그인이 전송하는 이벤트를 1건씩 적재합니다.
7
+ * - dedupe_key(sha256 hex)로 중복 적재를 방지합니다.
8
+ *
9
+ * 생성 방법: pnpm sonamu auth generate --plugins audit-log
10
+ */
11
+ export declare const auditLogEntityDef: BetterAuthEntityDef;
12
+ //# sourceMappingURL=audit-log.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"audit-log.d.ts","sourceRoot":"","sources":["../../../../src/auth/plugins/entity-definitions/audit-log.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,KAAK,mBAAmB,EAAE,MAAM,SAAS,CAAC;AAEnD;;;;;;;;GAQG;AACH,eAAO,MAAM,iBAAiB,EAAE,mBA+J/B,CAAC"}
@@ -0,0 +1,291 @@
1
+ //#region src/auth/plugins/entity-definitions/audit-log.ts
2
+ /**
3
+ * better-auth AuditLog 플러그인 엔티티 정의
4
+ *
5
+ * auth.auditLog: true 로 활성화되며 audit_events 테이블을 생성합니다.
6
+ * - Better Auth dash() 플러그인이 전송하는 이벤트를 1건씩 적재합니다.
7
+ * - dedupe_key(sha256 hex)로 중복 적재를 방지합니다.
8
+ *
9
+ * 생성 방법: pnpm sonamu auth generate --plugins audit-log
10
+ */
11
+ const auditLogEntityDef = {
12
+ id: "audit-log",
13
+ name: "AuditLog",
14
+ entities: [{
15
+ id: "AuditEvent",
16
+ table: "audit_events",
17
+ title: "감사이벤트",
18
+ props: [
19
+ {
20
+ name: "id",
21
+ type: "integer",
22
+ desc: "ID"
23
+ },
24
+ {
25
+ name: "source",
26
+ type: "string",
27
+ length: 32,
28
+ desc: "이벤트 소스"
29
+ },
30
+ {
31
+ name: "source_version",
32
+ type: "string",
33
+ length: 96,
34
+ nullable: true,
35
+ desc: "소스 버전"
36
+ },
37
+ {
38
+ name: "category",
39
+ type: "enum",
40
+ id: "AuditEventCategory",
41
+ desc: "카테고리"
42
+ },
43
+ {
44
+ name: "event_type",
45
+ type: "string",
46
+ length: 64,
47
+ desc: "이벤트 타입"
48
+ },
49
+ {
50
+ name: "event_key",
51
+ type: "string",
52
+ length: 191,
53
+ desc: "이벤트 키"
54
+ },
55
+ {
56
+ name: "dedupe_key",
57
+ type: "string",
58
+ length: 64,
59
+ desc: "중복 제거 키"
60
+ },
61
+ {
62
+ name: "actor_user_id",
63
+ type: "string",
64
+ length: 191,
65
+ nullable: true,
66
+ desc: "액터 사용자 ID"
67
+ },
68
+ {
69
+ name: "subject_user_id",
70
+ type: "string",
71
+ length: 191,
72
+ nullable: true,
73
+ desc: "대상 사용자 ID"
74
+ },
75
+ {
76
+ name: "organization_id",
77
+ type: "string",
78
+ length: 191,
79
+ nullable: true,
80
+ desc: "조직 ID"
81
+ },
82
+ {
83
+ name: "team_id",
84
+ type: "string",
85
+ length: 191,
86
+ nullable: true,
87
+ desc: "팀 ID"
88
+ },
89
+ {
90
+ name: "session_id",
91
+ type: "string",
92
+ length: 191,
93
+ nullable: true,
94
+ desc: "세션 ID"
95
+ },
96
+ {
97
+ name: "provider_id",
98
+ type: "string",
99
+ length: 64,
100
+ nullable: true,
101
+ desc: "프로바이더 ID"
102
+ },
103
+ {
104
+ name: "login_method",
105
+ type: "string",
106
+ length: 64,
107
+ nullable: true,
108
+ desc: "로그인 방식"
109
+ },
110
+ {
111
+ name: "identifier",
112
+ type: "string",
113
+ length: 255,
114
+ nullable: true,
115
+ desc: "식별자"
116
+ },
117
+ {
118
+ name: "visitor_id",
119
+ type: "string",
120
+ length: 191,
121
+ nullable: true,
122
+ desc: "방문자 ID"
123
+ },
124
+ {
125
+ name: "reason",
126
+ type: "string",
127
+ length: 128,
128
+ nullable: true,
129
+ desc: "사유"
130
+ },
131
+ {
132
+ name: "action",
133
+ type: "string",
134
+ length: 64,
135
+ nullable: true,
136
+ desc: "액션"
137
+ },
138
+ {
139
+ name: "trigger_context",
140
+ type: "string",
141
+ length: 64,
142
+ nullable: true,
143
+ desc: "트리거 컨텍스트"
144
+ },
145
+ {
146
+ name: "ip_address",
147
+ type: "string",
148
+ length: 45,
149
+ nullable: true,
150
+ desc: "IP 주소"
151
+ },
152
+ {
153
+ name: "country_code",
154
+ type: "string",
155
+ length: 8,
156
+ nullable: true,
157
+ desc: "국가 코드"
158
+ },
159
+ {
160
+ name: "country",
161
+ type: "string",
162
+ length: 100,
163
+ nullable: true,
164
+ desc: "국가"
165
+ },
166
+ {
167
+ name: "city",
168
+ type: "string",
169
+ length: 100,
170
+ nullable: true,
171
+ desc: "도시"
172
+ },
173
+ {
174
+ name: "user_agent",
175
+ type: "string",
176
+ nullable: true,
177
+ desc: "User-Agent"
178
+ },
179
+ {
180
+ name: "payload_json",
181
+ type: "json",
182
+ id: "AuditEventPayload",
183
+ desc: "원본 payload"
184
+ },
185
+ {
186
+ name: "occurred_at",
187
+ type: "date",
188
+ desc: "발생 시각"
189
+ },
190
+ {
191
+ name: "ingested_at",
192
+ type: "date",
193
+ dbDefault: "CURRENT_TIMESTAMP",
194
+ desc: "적재 시각"
195
+ }
196
+ ],
197
+ indexes: [
198
+ {
199
+ type: "unique",
200
+ name: "audit_events_dedupe_key_unique",
201
+ columns: [{ name: "dedupe_key" }]
202
+ },
203
+ {
204
+ type: "index",
205
+ name: "audit_events_occurred_at_index",
206
+ columns: [{ name: "occurred_at" }]
207
+ },
208
+ {
209
+ type: "index",
210
+ name: "audit_events_event_type_occurred_at_index",
211
+ columns: [{ name: "event_type" }, { name: "occurred_at" }]
212
+ },
213
+ {
214
+ type: "index",
215
+ name: "audit_events_subject_user_id_occurred_at_index",
216
+ columns: [{ name: "subject_user_id" }, { name: "occurred_at" }]
217
+ },
218
+ {
219
+ type: "index",
220
+ name: "audit_events_actor_user_id_occurred_at_index",
221
+ columns: [{ name: "actor_user_id" }, { name: "occurred_at" }]
222
+ },
223
+ {
224
+ type: "index",
225
+ name: "audit_events_organization_id_occurred_at_index",
226
+ columns: [{ name: "organization_id" }, { name: "occurred_at" }]
227
+ },
228
+ {
229
+ type: "index",
230
+ name: "audit_events_team_id_occurred_at_index",
231
+ columns: [{ name: "team_id" }, { name: "occurred_at" }]
232
+ },
233
+ {
234
+ type: "index",
235
+ name: "audit_events_session_id_index",
236
+ columns: [{ name: "session_id" }]
237
+ },
238
+ {
239
+ type: "index",
240
+ name: "audit_events_reason_occurred_at_index",
241
+ columns: [{ name: "reason" }, { name: "occurred_at" }]
242
+ }
243
+ ],
244
+ subsets: { A: [
245
+ "id",
246
+ "source",
247
+ "source_version",
248
+ "category",
249
+ "event_type",
250
+ "event_key",
251
+ "dedupe_key",
252
+ "actor_user_id",
253
+ "subject_user_id",
254
+ "organization_id",
255
+ "team_id",
256
+ "session_id",
257
+ "provider_id",
258
+ "login_method",
259
+ "identifier",
260
+ "visitor_id",
261
+ "reason",
262
+ "action",
263
+ "trigger_context",
264
+ "ip_address",
265
+ "country_code",
266
+ "country",
267
+ "city",
268
+ "user_agent",
269
+ "payload_json",
270
+ "occurred_at",
271
+ "ingested_at"
272
+ ] },
273
+ enums: {
274
+ AuditEventOrderBy: { "id-desc": "ID최신순" },
275
+ AuditEventSearchField: { id: "ID" },
276
+ AuditEventCategory: {
277
+ user: "사용자",
278
+ session: "세션",
279
+ account: "계정",
280
+ verification: "인증",
281
+ organization: "조직",
282
+ security: "보안"
283
+ }
284
+ }
285
+ }],
286
+ additionalProps: {}
287
+ };
288
+
289
+ //#endregion
290
+ export { auditLogEntityDef };
291
+ //# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiYXVkaXQtbG9nLmpzIiwibmFtZXMiOlsiYXVkaXRMb2dFbnRpdHlEZWY6IEJldHRlckF1dGhFbnRpdHlEZWYiXSwic291cmNlcyI6WyIuLi8uLi8uLi8uLi9zcmMvYXV0aC9wbHVnaW5zL2VudGl0eS1kZWZpbml0aW9ucy9hdWRpdC1sb2cudHMiXSwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgdHlwZSBCZXR0ZXJBdXRoRW50aXR5RGVmIH0gZnJvbSBcIi4vdHlwZXNcIjtcblxuLyoqXG4gKiBiZXR0ZXItYXV0aCBBdWRpdExvZyDtlIzrn6zqt7jsnbgg7JeU7Yuw7YuwIOygleydmFxuICpcbiAqIGF1dGguYXVkaXRMb2c6IHRydWUg66GcIO2ZnOyEse2ZlOuQmOupsCBhdWRpdF9ldmVudHMg7YWM7J2067iU7J2EIOyDneyEse2VqeuLiOuLpC5cbiAqIC0gQmV0dGVyIEF1dGggZGFzaCgpIO2UjOufrOq3uOyduOydtCDsoITshqHtlZjripQg7J2067Kk7Yq466W8IDHqsbTslKkg7KCB7J6s7ZWp64uI64ukLlxuICogLSBkZWR1cGVfa2V5KHNoYTI1NiBoZXgp66GcIOykkeuztSDsoIHsnqzrpbwg67Cp7KeA7ZWp64uI64ukLlxuICpcbiAqIOyDneyEsSDrsKnrspU6IHBucG0gc29uYW11IGF1dGggZ2VuZXJhdGUgLS1wbHVnaW5zIGF1ZGl0LWxvZ1xuICovXG5leHBvcnQgY29uc3QgYXVkaXRMb2dFbnRpdHlEZWY6IEJldHRlckF1dGhFbnRpdHlEZWYgPSB7XG4gIGlkOiBcImF1ZGl0LWxvZ1wiLFxuICBuYW1lOiBcIkF1ZGl0TG9nXCIsXG4gIGVudGl0aWVzOiBbXG4gICAge1xuICAgICAgaWQ6IFwiQXVkaXRFdmVudFwiLFxuICAgICAgdGFibGU6IFwiYXVkaXRfZXZlbnRzXCIsXG4gICAgICB0aXRsZTogXCLqsJDsgqzsnbTrsqTtirhcIixcbiAgICAgIHByb3BzOiBbXG4gICAgICAgIHsgbmFtZTogXCJpZFwiLCB0eXBlOiBcImludGVnZXJcIiwgZGVzYzogXCJJRFwiIH0sXG4gICAgICAgIHsgbmFtZTogXCJzb3VyY2VcIiwgdHlwZTogXCJzdHJpbmdcIiwgbGVuZ3RoOiAzMiwgZGVzYzogXCLsnbTrsqTtirgg7IaM7IqkXCIgfSxcbiAgICAgICAgeyBuYW1lOiBcInNvdXJjZV92ZXJzaW9uXCIsIHR5cGU6IFwic3RyaW5nXCIsIGxlbmd0aDogOTYsIG51bGxhYmxlOiB0cnVlLCBkZXNjOiBcIuyGjOyKpCDrsoTsoIRcIiB9LFxuICAgICAgICB7IG5hbWU6IFwiY2F0ZWdvcnlcIiwgdHlwZTogXCJlbnVtXCIsIGlkOiBcIkF1ZGl0RXZlbnRDYXRlZ29yeVwiLCBkZXNjOiBcIuy5tO2FjOqzoOumrFwiIH0sXG4gICAgICAgIHsgbmFtZTogXCJldmVudF90eXBlXCIsIHR5cGU6IFwic3RyaW5nXCIsIGxlbmd0aDogNjQsIGRlc2M6IFwi7J2067Kk7Yq4IO2DgOyehVwiIH0sXG4gICAgICAgIHsgbmFtZTogXCJldmVudF9rZXlcIiwgdHlwZTogXCJzdHJpbmdcIiwgbGVuZ3RoOiAxOTEsIGRlc2M6IFwi7J2067Kk7Yq4IO2CpFwiIH0sXG4gICAgICAgIHsgbmFtZTogXCJkZWR1cGVfa2V5XCIsIHR5cGU6IFwic3RyaW5nXCIsIGxlbmd0aDogNjQsIGRlc2M6IFwi7KSR67O1IOygnOqxsCDtgqRcIiB9LFxuICAgICAgICB7XG4gICAgICAgICAgbmFtZTogXCJhY3Rvcl91c2VyX2lkXCIsXG4gICAgICAgICAgdHlwZTogXCJzdHJpbmdcIixcbiAgICAgICAgICBsZW5ndGg6IDE5MSxcbiAgICAgICAgICBudWxsYWJsZTogdHJ1ZSxcbiAgICAgICAgICBkZXNjOiBcIuyVoe2EsCDsgqzsmqnsnpAgSURcIixcbiAgICAgICAgfSxcbiAgICAgICAge1xuICAgICAgICAgIG5hbWU6IFwic3ViamVjdF91c2VyX2lkXCIsXG4gICAgICAgICAgdHlwZTogXCJzdHJpbmdcIixcbiAgICAgICAgICBsZW5ndGg6IDE5MSxcbiAgICAgICAgICBudWxsYWJsZTogdHJ1ZSxcbiAgICAgICAgICBkZXNjOiBcIuuMgOyDgSDsgqzsmqnsnpAgSURcIixcbiAgICAgICAgfSxcbiAgICAgICAge1xuICAgICAgICAgIG5hbWU6IFwib3JnYW5pemF0aW9uX2lkXCIsXG4gICAgICAgICAgdHlwZTogXCJzdHJpbmdcIixcbiAgICAgICAgICBsZW5ndGg6IDE5MSxcbiAgICAgICAgICBudWxsYWJsZTogdHJ1ZSxcbiAgICAgICAgICBkZXNjOiBcIuyhsOyngSBJRFwiLFxuICAgICAgICB9LFxuICAgICAgICB7IG5hbWU6IFwidGVhbV9pZFwiLCB0eXBlOiBcInN0cmluZ1wiLCBsZW5ndGg6IDE5MSwgbnVsbGFibGU6IHRydWUsIGRlc2M6IFwi7YyAIElEXCIgfSxcbiAgICAgICAgeyBuYW1lOiBcInNlc3Npb25faWRcIiwgdHlwZTogXCJzdHJpbmdcIiwgbGVuZ3RoOiAxOTEsIG51bGxhYmxlOiB0cnVlLCBkZXNjOiBcIuyEuOyFmCBJRFwiIH0sXG4gICAgICAgIHsgbmFtZTogXCJwcm92aWRlcl9pZFwiLCB0eXBlOiBcInN0cmluZ1wiLCBsZW5ndGg6IDY0LCBudWxsYWJsZTogdHJ1ZSwgZGVzYzogXCLtlITroZzrsJTsnbTrjZQgSURcIiB9LFxuICAgICAgICB7IG5hbWU6IFwibG9naW5fbWV0aG9kXCIsIHR5cGU6IFwic3RyaW5nXCIsIGxlbmd0aDogNjQsIG51bGxhYmxlOiB0cnVlLCBkZXNjOiBcIuuhnOq3uOyduCDrsKnsi51cIiB9LFxuICAgICAgICB7IG5hbWU6IFwiaWRlbnRpZmllclwiLCB0eXBlOiBcInN0cmluZ1wiLCBsZW5ndGg6IDI1NSwgbnVsbGFibGU6IHRydWUsIGRlc2M6IFwi7Iud67OE7J6QXCIgfSxcbiAgICAgICAgeyBuYW1lOiBcInZpc2l0b3JfaWRcIiwgdHlwZTogXCJzdHJpbmdcIiwgbGVuZ3RoOiAxOTEsIG51bGxhYmxlOiB0cnVlLCBkZXNjOiBcIuuwqeusuOyekCBJRFwiIH0sXG4gICAgICAgIHsgbmFtZTogXCJyZWFzb25cIiwgdHlwZTogXCJzdHJpbmdcIiwgbGVuZ3RoOiAxMjgsIG51bGxhYmxlOiB0cnVlLCBkZXNjOiBcIuyCrOycoFwiIH0sXG4gICAgICAgIHsgbmFtZTogXCJhY3Rpb25cIiwgdHlwZTogXCJzdHJpbmdcIiwgbGVuZ3RoOiA2NCwgbnVsbGFibGU6IHRydWUsIGRlc2M6IFwi7JWh7IWYXCIgfSxcbiAgICAgICAge1xuICAgICAgICAgIG5hbWU6IFwidHJpZ2dlcl9jb250ZXh0XCIsXG4gICAgICAgICAgdHlwZTogXCJzdHJpbmdcIixcbiAgICAgICAgICBsZW5ndGg6IDY0LFxuICAgICAgICAgIG51bGxhYmxlOiB0cnVlLFxuICAgICAgICAgIGRlc2M6IFwi7Yq466as6rGwIOy7qO2FjeyKpO2KuFwiLFxuICAgICAgICB9LFxuICAgICAgICB7IG5hbWU6IFwiaXBfYWRkcmVzc1wiLCB0eXBlOiBcInN0cmluZ1wiLCBsZW5ndGg6IDQ1LCBudWxsYWJsZTogdHJ1ZSwgZGVzYzogXCJJUCDso7zshoxcIiB9LFxuICAgICAgICB7IG5hbWU6IFwiY291bnRyeV9jb2RlXCIsIHR5cGU6IFwic3RyaW5nXCIsIGxlbmd0aDogOCwgbnVsbGFibGU6IHRydWUsIGRlc2M6IFwi6rWt6rCAIOy9lOuTnFwiIH0sXG4gICAgICAgIHsgbmFtZTogXCJjb3VudHJ5XCIsIHR5cGU6IFwic3RyaW5nXCIsIGxlbmd0aDogMTAwLCBudWxsYWJsZTogdHJ1ZSwgZGVzYzogXCLqta3qsIBcIiB9LFxuICAgICAgICB7IG5hbWU6IFwiY2l0eVwiLCB0eXBlOiBcInN0cmluZ1wiLCBsZW5ndGg6IDEwMCwgbnVsbGFibGU6IHRydWUsIGRlc2M6IFwi64+E7IucXCIgfSxcbiAgICAgICAgeyBuYW1lOiBcInVzZXJfYWdlbnRcIiwgdHlwZTogXCJzdHJpbmdcIiwgbnVsbGFibGU6IHRydWUsIGRlc2M6IFwiVXNlci1BZ2VudFwiIH0sXG4gICAgICAgIHsgbmFtZTogXCJwYXlsb2FkX2pzb25cIiwgdHlwZTogXCJqc29uXCIsIGlkOiBcIkF1ZGl0RXZlbnRQYXlsb2FkXCIsIGRlc2M6IFwi7JuQ67O4IHBheWxvYWRcIiB9LFxuICAgICAgICB7IG5hbWU6IFwib2NjdXJyZWRfYXRcIiwgdHlwZTogXCJkYXRlXCIsIGRlc2M6IFwi67Cc7IOdIOyLnOqwgVwiIH0sXG4gICAgICAgIHtcbiAgICAgICAgICBuYW1lOiBcImluZ2VzdGVkX2F0XCIsXG4gICAgICAgICAgdHlwZTogXCJkYXRlXCIsXG4gICAgICAgICAgZGJEZWZhdWx0OiBcIkNVUlJFTlRfVElNRVNUQU1QXCIsXG4gICAgICAgICAgZGVzYzogXCLsoIHsnqwg7Iuc6rCBXCIsXG4gICAgICAgIH0sXG4gICAgICBdLFxuICAgICAgaW5kZXhlczogW1xuICAgICAgICB7XG4gICAgICAgICAgdHlwZTogXCJ1bmlxdWVcIixcbiAgICAgICAgICBuYW1lOiBcImF1ZGl0X2V2ZW50c19kZWR1cGVfa2V5X3VuaXF1ZVwiLFxuICAgICAgICAgIGNvbHVtbnM6IFt7IG5hbWU6IFwiZGVkdXBlX2tleVwiIH1dLFxuICAgICAgICB9LFxuICAgICAgICB7XG4gICAgICAgICAgdHlwZTogXCJpbmRleFwiLFxuICAgICAgICAgIG5hbWU6IFwiYXVkaXRfZXZlbnRzX29jY3VycmVkX2F0X2luZGV4XCIsXG4gICAgICAgICAgY29sdW1uczogW3sgbmFtZTogXCJvY2N1cnJlZF9hdFwiIH1dLFxuICAgICAgICB9LFxuICAgICAgICB7XG4gICAgICAgICAgdHlwZTogXCJpbmRleFwiLFxuICAgICAgICAgIG5hbWU6IFwiYXVkaXRfZXZlbnRzX2V2ZW50X3R5cGVfb2NjdXJyZWRfYXRfaW5kZXhcIixcbiAgICAgICAgICBjb2x1bW5zOiBbeyBuYW1lOiBcImV2ZW50X3R5cGVcIiB9LCB7IG5hbWU6IFwib2NjdXJyZWRfYXRcIiB9XSxcbiAgICAgICAgfSxcbiAgICAgICAge1xuICAgICAgICAgIHR5cGU6IFwiaW5kZXhcIixcbiAgICAgICAgICBuYW1lOiBcImF1ZGl0X2V2ZW50c19zdWJqZWN0X3VzZXJfaWRfb2NjdXJyZWRfYXRfaW5kZXhcIixcbiAgICAgICAgICBjb2x1bW5zOiBbeyBuYW1lOiBcInN1YmplY3RfdXNlcl9pZFwiIH0sIHsgbmFtZTogXCJvY2N1cnJlZF9hdFwiIH1dLFxuICAgICAgICB9LFxuICAgICAgICB7XG4gICAgICAgICAgdHlwZTogXCJpbmRleFwiLFxuICAgICAgICAgIG5hbWU6IFwiYXVkaXRfZXZlbnRzX2FjdG9yX3VzZXJfaWRfb2NjdXJyZWRfYXRfaW5kZXhcIixcbiAgICAgICAgICBjb2x1bW5zOiBbeyBuYW1lOiBcImFjdG9yX3VzZXJfaWRcIiB9LCB7IG5hbWU6IFwib2NjdXJyZWRfYXRcIiB9XSxcbiAgICAgICAgfSxcbiAgICAgICAge1xuICAgICAgICAgIHR5cGU6IFwiaW5kZXhcIixcbiAgICAgICAgICBuYW1lOiBcImF1ZGl0X2V2ZW50c19vcmdhbml6YXRpb25faWRfb2NjdXJyZWRfYXRfaW5kZXhcIixcbiAgICAgICAgICBjb2x1bW5zOiBbeyBuYW1lOiBcIm9yZ2FuaXphdGlvbl9pZFwiIH0sIHsgbmFtZTogXCJvY2N1cnJlZF9hdFwiIH1dLFxuICAgICAgICB9LFxuICAgICAgICB7XG4gICAgICAgICAgdHlwZTogXCJpbmRleFwiLFxuICAgICAgICAgIG5hbWU6IFwiYXVkaXRfZXZlbnRzX3RlYW1faWRfb2NjdXJyZWRfYXRfaW5kZXhcIixcbiAgICAgICAgICBjb2x1bW5zOiBbeyBuYW1lOiBcInRlYW1faWRcIiB9LCB7IG5hbWU6IFwib2NjdXJyZWRfYXRcIiB9XSxcbiAgICAgICAgfSxcbiAgICAgICAge1xuICAgICAgICAgIHR5cGU6IFwiaW5kZXhcIixcbiAgICAgICAgICBuYW1lOiBcImF1ZGl0X2V2ZW50c19zZXNzaW9uX2lkX2luZGV4XCIsXG4gICAgICAgICAgY29sdW1uczogW3sgbmFtZTogXCJzZXNzaW9uX2lkXCIgfV0sXG4gICAgICAgIH0sXG4gICAgICAgIHtcbiAgICAgICAgICB0eXBlOiBcImluZGV4XCIsXG4gICAgICAgICAgbmFtZTogXCJhdWRpdF9ldmVudHNfcmVhc29uX29jY3VycmVkX2F0X2luZGV4XCIsXG4gICAgICAgICAgY29sdW1uczogW3sgbmFtZTogXCJyZWFzb25cIiB9LCB7IG5hbWU6IFwib2NjdXJyZWRfYXRcIiB9XSxcbiAgICAgICAgfSxcbiAgICAgIF0sXG4gICAgICBzdWJzZXRzOiB7XG4gICAgICAgIEE6IFtcbiAgICAgICAgICBcImlkXCIsXG4gICAgICAgICAgXCJzb3VyY2VcIixcbiAgICAgICAgICBcInNvdXJjZV92ZXJzaW9uXCIsXG4gICAgICAgICAgXCJjYXRlZ29yeVwiLFxuICAgICAgICAgIFwiZXZlbnRfdHlwZVwiLFxuICAgICAgICAgIFwiZXZlbnRfa2V5XCIsXG4gICAgICAgICAgXCJkZWR1cGVfa2V5XCIsXG4gICAgICAgICAgXCJhY3Rvcl91c2VyX2lkXCIsXG4gICAgICAgICAgXCJzdWJqZWN0X3VzZXJfaWRcIixcbiAgICAgICAgICBcIm9yZ2FuaXphdGlvbl9pZFwiLFxuICAgICAgICAgIFwidGVhbV9pZFwiLFxuICAgICAgICAgIFwic2Vzc2lvbl9pZFwiLFxuICAgICAgICAgIFwicHJvdmlkZXJfaWRcIixcbiAgICAgICAgICBcImxvZ2luX21ldGhvZFwiLFxuICAgICAgICAgIFwiaWRlbnRpZmllclwiLFxuICAgICAgICAgIFwidmlzaXRvcl9pZFwiLFxuICAgICAgICAgIFwicmVhc29uXCIsXG4gICAgICAgICAgXCJhY3Rpb25cIixcbiAgICAgICAgICBcInRyaWdnZXJfY29udGV4dFwiLFxuICAgICAgICAgIFwiaXBfYWRkcmVzc1wiLFxuICAgICAgICAgIFwiY291bnRyeV9jb2RlXCIsXG4gICAgICAgICAgXCJjb3VudHJ5XCIsXG4gICAgICAgICAgXCJjaXR5XCIsXG4gICAgICAgICAgXCJ1c2VyX2FnZW50XCIsXG4gICAgICAgICAgXCJwYXlsb2FkX2pzb25cIixcbiAgICAgICAgICBcIm9jY3VycmVkX2F0XCIsXG4gICAgICAgICAgXCJpbmdlc3RlZF9hdFwiLFxuICAgICAgICBdLFxuICAgICAgfSxcbiAgICAgIGVudW1zOiB7XG4gICAgICAgIEF1ZGl0RXZlbnRPcmRlckJ5OiB7IFwiaWQtZGVzY1wiOiBcIklE7LWc7Iug7IicXCIgfSxcbiAgICAgICAgQXVkaXRFdmVudFNlYXJjaEZpZWxkOiB7IGlkOiBcIklEXCIgfSxcbiAgICAgICAgQXVkaXRFdmVudENhdGVnb3J5OiB7XG4gICAgICAgICAgdXNlcjogXCLsgqzsmqnsnpBcIixcbiAgICAgICAgICBzZXNzaW9uOiBcIuyEuOyFmFwiLFxuICAgICAgICAgIGFjY291bnQ6IFwi6rOE7KCVXCIsXG4gICAgICAgICAgdmVyaWZpY2F0aW9uOiBcIuyduOymnVwiLFxuICAgICAgICAgIG9yZ2FuaXphdGlvbjogXCLsobDsp4FcIixcbiAgICAgICAgICBzZWN1cml0eTogXCLrs7TslYhcIixcbiAgICAgICAgfSxcbiAgICAgIH0sXG4gICAgfSxcbiAgXSxcbiAgYWRkaXRpb25hbFByb3BzOiB7fSxcbn07XG4iXSwibWFwcGluZ3MiOiI7Ozs7Ozs7Ozs7QUFXQSxNQUFhQSxvQkFBeUM7Q0FDcEQsSUFBSTtDQUNKLE1BQU07Q0FDTixVQUFVLENBQ1I7RUFDRSxJQUFJO0VBQ0osT0FBTztFQUNQLE9BQU87RUFDUCxPQUFPO0dBQ0w7SUFBRSxNQUFNO0lBQU0sTUFBTTtJQUFXLE1BQU07SUFBTTtHQUMzQztJQUFFLE1BQU07SUFBVSxNQUFNO0lBQVUsUUFBUTtJQUFJLE1BQU07SUFBVTtHQUM5RDtJQUFFLE1BQU07SUFBa0IsTUFBTTtJQUFVLFFBQVE7SUFBSSxVQUFVO0lBQU0sTUFBTTtJQUFTO0dBQ3JGO0lBQUUsTUFBTTtJQUFZLE1BQU07SUFBUSxJQUFJO0lBQXNCLE1BQU07SUFBUTtHQUMxRTtJQUFFLE1BQU07SUFBYyxNQUFNO0lBQVUsUUFBUTtJQUFJLE1BQU07SUFBVTtHQUNsRTtJQUFFLE1BQU07SUFBYSxNQUFNO0lBQVUsUUFBUTtJQUFLLE1BQU07SUFBUztHQUNqRTtJQUFFLE1BQU07SUFBYyxNQUFNO0lBQVUsUUFBUTtJQUFJLE1BQU07SUFB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
@@ -1,6 +1,7 @@
1
1
  export { adminEntityDef } from "./admin";
2
2
  export { anonymousEntityDef } from "./anonymous";
3
3
  export { apiKeyEntityDef } from "./api-key";
4
+ export { auditLogEntityDef } from "./audit-log";
4
5
  export { jwtEntityDef } from "./jwt";
5
6
  export { organizationEntityDef } from "./organization";
6
7
  export { passkeyEntityDef } from "./passkey";
@@ -1 +1 @@
1
- {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../../src/auth/plugins/entity-definitions/index.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,cAAc,EAAE,MAAM,SAAS,CAAC;AACzC,OAAO,EAAE,kBAAkB,EAAE,MAAM,aAAa,CAAC;AACjD,OAAO,EAAE,eAAe,EAAE,MAAM,WAAW,CAAC;AAC5C,OAAO,EAAE,YAAY,EAAE,MAAM,OAAO,CAAC;AACrC,OAAO,EAAE,qBAAqB,EAAE,MAAM,gBAAgB,CAAC;AACvD,OAAO,EAAE,gBAAgB,EAAE,MAAM,WAAW,CAAC;AAC7C,OAAO,EAAE,oBAAoB,EAAE,MAAM,gBAAgB,CAAC;AACtD,OAAO,EAAE,YAAY,EAAE,MAAM,OAAO,CAAC;AACrC,OAAO,EAAE,kBAAkB,EAAE,MAAM,cAAc,CAAC;AAClD,YAAY,EAAE,mBAAmB,EAAE,kBAAkB,EAAE,MAAM,SAAS,CAAC;AACvE,OAAO,EAAE,iBAAiB,EAAE,MAAM,YAAY,CAAC;AAW/C,OAAO,EAAE,KAAK,mBAAmB,EAAE,KAAK,kBAAkB,EAAE,MAAM,SAAS,CAAC;AAG5E;;;GAGG;AACH,eAAO,MAAM,kBAAkB,EAAE,MAAM,CAAC,kBAAkB,EAAE,mBAAmB,CAW9E,CAAC;AAEF;;GAEG;AACH,eAAO,MAAM,oBAAoB,EAAE,kBAAkB,EAE5B,CAAC;AAE1B;;GAEG;AACH,wBAAgB,eAAe,CAAC,EAAE,EAAE,MAAM,GAAG,EAAE,IAAI,kBAAkB,CAEpE"}
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../../src/auth/plugins/entity-definitions/index.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,cAAc,EAAE,MAAM,SAAS,CAAC;AACzC,OAAO,EAAE,kBAAkB,EAAE,MAAM,aAAa,CAAC;AACjD,OAAO,EAAE,eAAe,EAAE,MAAM,WAAW,CAAC;AAC5C,OAAO,EAAE,iBAAiB,EAAE,MAAM,aAAa,CAAC;AAChD,OAAO,EAAE,YAAY,EAAE,MAAM,OAAO,CAAC;AACrC,OAAO,EAAE,qBAAqB,EAAE,MAAM,gBAAgB,CAAC;AACvD,OAAO,EAAE,gBAAgB,EAAE,MAAM,WAAW,CAAC;AAC7C,OAAO,EAAE,oBAAoB,EAAE,MAAM,gBAAgB,CAAC;AACtD,OAAO,EAAE,YAAY,EAAE,MAAM,OAAO,CAAC;AACrC,OAAO,EAAE,kBAAkB,EAAE,MAAM,cAAc,CAAC;AAClD,YAAY,EAAE,mBAAmB,EAAE,kBAAkB,EAAE,MAAM,SAAS,CAAC;AACvE,OAAO,EAAE,iBAAiB,EAAE,MAAM,YAAY,CAAC;AAY/C,OAAO,EAAE,KAAK,mBAAmB,EAAE,KAAK,kBAAkB,EAAE,MAAM,SAAS,CAAC;AAG5E;;;GAGG;AACH,eAAO,MAAM,kBAAkB,EAAE,MAAM,CAAC,kBAAkB,EAAE,mBAAmB,CAY9E,CAAC;AAEF;;GAEG;AACH,eAAO,MAAM,oBAAoB,EAAE,kBAAkB,EAE5B,CAAC;AAE1B;;GAEG;AACH,wBAAgB,eAAe,CAAC,EAAE,EAAE,MAAM,GAAG,EAAE,IAAI,kBAAkB,CAEpE"}