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.
- package/dist/api/config.d.ts +9 -2
- package/dist/api/config.d.ts.map +1 -1
- package/dist/api/config.js +1 -1
- package/dist/api/sonamu.d.ts +1 -0
- package/dist/api/sonamu.d.ts.map +1 -1
- package/dist/api/sonamu.js +50 -2
- package/dist/auth/audit-log-ingestor.d.ts +9 -0
- package/dist/auth/audit-log-ingestor.d.ts.map +1 -0
- package/dist/auth/audit-log-ingestor.js +200 -0
- package/dist/auth/audit-log-proxy-types.d.ts +23 -0
- package/dist/auth/audit-log-proxy-types.d.ts.map +1 -0
- package/dist/auth/audit-log-proxy-types.js +1 -0
- package/dist/auth/index.d.ts +1 -0
- package/dist/auth/index.d.ts.map +1 -1
- package/dist/auth/index.js +4 -2
- package/dist/auth/plugins/entity-definitions/audit-log.d.ts +12 -0
- package/dist/auth/plugins/entity-definitions/audit-log.d.ts.map +1 -0
- package/dist/auth/plugins/entity-definitions/audit-log.js +291 -0
- package/dist/auth/plugins/entity-definitions/index.d.ts +1 -0
- package/dist/auth/plugins/entity-definitions/index.d.ts.map +1 -1
- package/dist/auth/plugins/entity-definitions/index.js +5 -3
- package/dist/auth/plugins/entity-definitions/types.d.ts +1 -1
- package/dist/auth/plugins/entity-definitions/types.d.ts.map +1 -1
- package/dist/auth/plugins/wrappers/admin.d.ts +2 -2
- package/dist/auth/plugins/wrappers/sso.d.ts +1 -1
- package/dist/database/knex.d.ts.map +1 -1
- package/dist/database/knex.js +10 -18
- package/dist/entity/entity-manager.d.ts +2 -2
- package/dist/index.js +3 -2
- package/dist/storage/buffered-file.d.ts +1 -1
- package/dist/storage/buffered-file.js +2 -2
- package/dist/types/types.d.ts +14 -14
- package/dist/ui-web/assets/index-Dr8pRJC_.css +1 -0
- package/dist/ui-web/assets/{index-C8qhvZbs.js → index-DrTfl0Ts.js} +49 -46
- package/dist/ui-web/index.html +2 -2
- package/package.json +4 -3
- package/src/api/config.ts +9 -2
- package/src/api/sonamu.ts +65 -1
- package/src/auth/audit-log-ingestor.ts +234 -0
- package/src/auth/audit-log-proxy-types.ts +23 -0
- package/src/auth/index.ts +1 -0
- package/src/auth/plugins/entity-definitions/audit-log.ts +171 -0
- package/src/auth/plugins/entity-definitions/index.ts +3 -0
- package/src/auth/plugins/entity-definitions/types.ts +2 -1
- package/src/database/knex.ts +9 -19
- package/src/skills/sonamu/auth.md +17 -0
- package/src/skills/sonamu/create-sonamu.md +8 -0
- package/src/skills/sonamu/scaffolding.md +13 -0
- package/src/storage/buffered-file.ts +1 -1
- 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 { };
|
package/dist/auth/index.d.ts
CHANGED
|
@@ -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";
|
package/dist/auth/index.d.ts.map
CHANGED
|
@@ -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"}
|
package/dist/auth/index.js
CHANGED
|
@@ -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,
|
|
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;
|
|
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"}
|