@brandlift/payload-loggs 1.0.0
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/LICENSE +21 -0
- package/README.md +85 -0
- package/dist/collections/SiteActivityCollection.js +154 -0
- package/dist/collections/SiteActivityCollection.js.map +1 -0
- package/dist/collections/siteActivity.js +6 -0
- package/dist/collections/siteActivity.js.map +1 -0
- package/dist/core/automation/tasks/cleanup/cleanup.js +41 -0
- package/dist/core/automation/tasks/cleanup/cleanup.js.map +1 -0
- package/dist/core/buffer/bufferManager.js +41 -0
- package/dist/core/buffer/bufferManager.js.map +1 -0
- package/dist/core/buffer/types.js +3 -0
- package/dist/core/buffer/types.js.map +1 -0
- package/dist/core/events/emitter.js +16 -0
- package/dist/core/events/emitter.js.map +1 -0
- package/dist/core/log-builders/helpers/extractOperation/extractOperation.js +11 -0
- package/dist/core/log-builders/helpers/extractOperation/extractOperation.js.map +1 -0
- package/dist/core/log-builders/helpers/handleDebugMode.js +15 -0
- package/dist/core/log-builders/helpers/handleDebugMode.js.map +1 -0
- package/dist/core/log-builders/helpers/isOperationEnabled/isOperationEnabled.js +8 -0
- package/dist/core/log-builders/helpers/isOperationEnabled/isOperationEnabled.js.map +1 -0
- package/dist/core/log-builders/logBuilderManager/logBuilderManager.js +49 -0
- package/dist/core/log-builders/logBuilderManager/logBuilderManager.js.map +1 -0
- package/dist/hooks/collectionHooks.js +197 -0
- package/dist/hooks/collectionHooks.js.map +1 -0
- package/dist/hooks/globalHooks.js +56 -0
- package/dist/hooks/globalHooks.js.map +1 -0
- package/dist/index.js +10 -0
- package/dist/index.js.map +1 -0
- package/dist/plugin.js +46 -0
- package/dist/plugin.js.map +1 -0
- package/dist/pluginUtils/attachCollectionConfig/attachCollectionConfig.js +77 -0
- package/dist/pluginUtils/attachCollectionConfig/attachCollectionConfig.js.map +1 -0
- package/dist/pluginUtils/attachGlobalConfig/attachGlobalConfig.js +54 -0
- package/dist/pluginUtils/attachGlobalConfig/attachGlobalConfig.js.map +1 -0
- package/dist/pluginUtils/configHelpers.js +40 -0
- package/dist/pluginUtils/configHelpers.js.map +1 -0
- package/dist/pluginUtils/formatUserDisplay.js +19 -0
- package/dist/pluginUtils/formatUserDisplay.js.map +1 -0
- package/dist/pluginUtils/getCollectionLabel.js +41 -0
- package/dist/pluginUtils/getCollectionLabel.js.map +1 -0
- package/dist/pluginUtils/getResourceTitle.js +31 -0
- package/dist/pluginUtils/getResourceTitle.js.map +1 -0
- package/dist/types/collection.js +3 -0
- package/dist/types/collection.js.map +1 -0
- package/dist/types/config.js +3 -0
- package/dist/types/config.js.map +1 -0
- package/dist/types/global.js +3 -0
- package/dist/types/global.js.map +1 -0
- package/dist/types/types.d.js +3 -0
- package/dist/types/types.d.js.map +1 -0
- package/dist/utils/prettyDebugLog.js +15 -0
- package/dist/utils/prettyDebugLog.js.map +1 -0
- package/package.json +160 -0
|
@@ -0,0 +1,197 @@
|
|
|
1
|
+
import { getResourceTitle } from '../pluginUtils/getResourceTitle.js';
|
|
2
|
+
import { formatUserDisplay } from '../pluginUtils/formatUserDisplay.js';
|
|
3
|
+
import { getCollectionLabel } from '../pluginUtils/getCollectionLabel.js';
|
|
4
|
+
import { SITE_ACTIVITY_SLUG } from '../collections/SiteActivityCollection.js';
|
|
5
|
+
export const createCollectionAfterChangeHook = (collection, payloadConfig, _pluginConfig)=>{
|
|
6
|
+
return async ({ doc, previousDoc, operation, req })=>{
|
|
7
|
+
if (!req || req.context?.skipLogs || req.context?.skipAuditorLogs) {
|
|
8
|
+
return doc;
|
|
9
|
+
}
|
|
10
|
+
try {
|
|
11
|
+
const isCreate = operation === 'create' || !previousDoc;
|
|
12
|
+
const opType = isCreate ? 'create' : 'update';
|
|
13
|
+
const label = getCollectionLabel(collection);
|
|
14
|
+
const title = isCreate ? `${label} created` : `${label} modified`;
|
|
15
|
+
const resourceName = getResourceTitle(doc, doc?.id);
|
|
16
|
+
const isLocalizationEnabled = Boolean(payloadConfig.localization);
|
|
17
|
+
const locale = isLocalizationEnabled ? req.locale : undefined;
|
|
18
|
+
const userEmail = req.user?.email || (doc && typeof doc === 'object' && 'email' in doc && typeof doc.email === 'string' ? doc.email : undefined);
|
|
19
|
+
const userDisplay = formatUserDisplay(userEmail);
|
|
20
|
+
const userId = req.user?.id || (doc && typeof doc === 'object' && 'id' in doc ? doc.id : undefined);
|
|
21
|
+
await req.payload.create({
|
|
22
|
+
collection: SITE_ACTIVITY_SLUG,
|
|
23
|
+
data: {
|
|
24
|
+
title,
|
|
25
|
+
operation: opType,
|
|
26
|
+
resourceName,
|
|
27
|
+
resourceType: 'collection',
|
|
28
|
+
collectionLabel: label,
|
|
29
|
+
slug: collection.slug,
|
|
30
|
+
documentId: doc?.id ? String(doc.id) : undefined,
|
|
31
|
+
...locale ? {
|
|
32
|
+
locale
|
|
33
|
+
} : {},
|
|
34
|
+
...userId !== undefined && userId !== null ? {
|
|
35
|
+
user: userId
|
|
36
|
+
} : {},
|
|
37
|
+
...userEmail ? {
|
|
38
|
+
userEmail
|
|
39
|
+
} : {},
|
|
40
|
+
...userDisplay ? {
|
|
41
|
+
userDisplay
|
|
42
|
+
} : {}
|
|
43
|
+
},
|
|
44
|
+
req,
|
|
45
|
+
overrideAccess: true,
|
|
46
|
+
context: {
|
|
47
|
+
...req.context,
|
|
48
|
+
skipLogs: true,
|
|
49
|
+
skipAuditorLogs: true
|
|
50
|
+
}
|
|
51
|
+
});
|
|
52
|
+
} catch (error) {
|
|
53
|
+
req.payload?.logger?.error?.(`[payload-loggs] Error logging collection afterChange for ${collection.slug}: ${error}`);
|
|
54
|
+
}
|
|
55
|
+
return doc;
|
|
56
|
+
};
|
|
57
|
+
};
|
|
58
|
+
export const createCollectionAfterDeleteHook = (collection, payloadConfig, _pluginConfig)=>{
|
|
59
|
+
return async ({ doc, id, req })=>{
|
|
60
|
+
if (!req || req.context?.skipLogs || req.context?.skipAuditorLogs) {
|
|
61
|
+
return doc;
|
|
62
|
+
}
|
|
63
|
+
try {
|
|
64
|
+
const label = getCollectionLabel(collection);
|
|
65
|
+
const title = `${label} deleted`;
|
|
66
|
+
const resourceName = getResourceTitle(doc, id);
|
|
67
|
+
const isLocalizationEnabled = Boolean(payloadConfig.localization);
|
|
68
|
+
const locale = isLocalizationEnabled ? req.locale : undefined;
|
|
69
|
+
const userEmail = req.user?.email || (doc && typeof doc === 'object' && 'email' in doc && typeof doc.email === 'string' ? doc.email : undefined);
|
|
70
|
+
const userDisplay = formatUserDisplay(userEmail);
|
|
71
|
+
const userId = req.user?.id || (doc && typeof doc === 'object' && 'id' in doc ? doc.id : undefined);
|
|
72
|
+
await req.payload.create({
|
|
73
|
+
collection: SITE_ACTIVITY_SLUG,
|
|
74
|
+
data: {
|
|
75
|
+
title,
|
|
76
|
+
operation: 'delete',
|
|
77
|
+
resourceName,
|
|
78
|
+
resourceType: 'collection',
|
|
79
|
+
collectionLabel: label,
|
|
80
|
+
slug: collection.slug,
|
|
81
|
+
documentId: id ? String(id) : undefined,
|
|
82
|
+
...locale ? {
|
|
83
|
+
locale
|
|
84
|
+
} : {},
|
|
85
|
+
...userId !== undefined && userId !== null ? {
|
|
86
|
+
user: userId
|
|
87
|
+
} : {},
|
|
88
|
+
...userEmail ? {
|
|
89
|
+
userEmail
|
|
90
|
+
} : {},
|
|
91
|
+
...userDisplay ? {
|
|
92
|
+
userDisplay
|
|
93
|
+
} : {}
|
|
94
|
+
},
|
|
95
|
+
req,
|
|
96
|
+
overrideAccess: true,
|
|
97
|
+
context: {
|
|
98
|
+
...req.context,
|
|
99
|
+
skipLogs: true,
|
|
100
|
+
skipAuditorLogs: true
|
|
101
|
+
}
|
|
102
|
+
});
|
|
103
|
+
} catch (error) {
|
|
104
|
+
req.payload?.logger?.error?.(`[payload-loggs] Error logging collection afterDelete for ${collection.slug}: ${error}`);
|
|
105
|
+
}
|
|
106
|
+
return doc;
|
|
107
|
+
};
|
|
108
|
+
};
|
|
109
|
+
export const createCollectionAfterLoginHook = (collection, _payloadConfig, _pluginConfig)=>{
|
|
110
|
+
return async ({ user, req })=>{
|
|
111
|
+
if (!req || req.context?.skipLogs || req.context?.skipAuditorLogs) {
|
|
112
|
+
return user;
|
|
113
|
+
}
|
|
114
|
+
try {
|
|
115
|
+
const label = getCollectionLabel(collection);
|
|
116
|
+
const userEmail = user?.email || req.user?.email;
|
|
117
|
+
const userDisplay = formatUserDisplay(userEmail);
|
|
118
|
+
const title = userDisplay ? `User ${userDisplay} logged in` : `${label} logged in`;
|
|
119
|
+
await req.payload.create({
|
|
120
|
+
collection: SITE_ACTIVITY_SLUG,
|
|
121
|
+
data: {
|
|
122
|
+
title,
|
|
123
|
+
operation: 'login',
|
|
124
|
+
resourceName: userEmail || String(user?.id || 'User'),
|
|
125
|
+
resourceType: 'collection',
|
|
126
|
+
collectionLabel: label,
|
|
127
|
+
slug: collection.slug,
|
|
128
|
+
documentId: user?.id ? String(user.id) : undefined,
|
|
129
|
+
...user?.id !== undefined && user?.id !== null ? {
|
|
130
|
+
user: user.id
|
|
131
|
+
} : {},
|
|
132
|
+
...userEmail ? {
|
|
133
|
+
userEmail
|
|
134
|
+
} : {},
|
|
135
|
+
...userDisplay ? {
|
|
136
|
+
userDisplay
|
|
137
|
+
} : {}
|
|
138
|
+
},
|
|
139
|
+
req,
|
|
140
|
+
overrideAccess: true,
|
|
141
|
+
context: {
|
|
142
|
+
...req.context,
|
|
143
|
+
skipLogs: true,
|
|
144
|
+
skipAuditorLogs: true
|
|
145
|
+
}
|
|
146
|
+
});
|
|
147
|
+
} catch (error) {
|
|
148
|
+
req.payload?.logger?.error?.(`[payload-loggs] Error logging afterLogin for ${collection.slug}: ${error}`);
|
|
149
|
+
}
|
|
150
|
+
return user;
|
|
151
|
+
};
|
|
152
|
+
};
|
|
153
|
+
export const createCollectionAfterLogoutHook = (collection, _payloadConfig, _pluginConfig)=>{
|
|
154
|
+
return async ({ req })=>{
|
|
155
|
+
if (!req || req.context?.skipLogs || req.context?.skipAuditorLogs) {
|
|
156
|
+
return;
|
|
157
|
+
}
|
|
158
|
+
try {
|
|
159
|
+
const label = getCollectionLabel(collection);
|
|
160
|
+
const userEmail = req.user?.email;
|
|
161
|
+
const userDisplay = formatUserDisplay(userEmail);
|
|
162
|
+
const title = userDisplay ? `User ${userDisplay} logged out` : `${label} logged out`;
|
|
163
|
+
await req.payload.create({
|
|
164
|
+
collection: SITE_ACTIVITY_SLUG,
|
|
165
|
+
data: {
|
|
166
|
+
title,
|
|
167
|
+
operation: 'logout',
|
|
168
|
+
resourceName: userEmail || String(req.user?.id || 'User'),
|
|
169
|
+
resourceType: 'collection',
|
|
170
|
+
collectionLabel: label,
|
|
171
|
+
slug: collection.slug,
|
|
172
|
+
documentId: req.user?.id ? String(req.user.id) : undefined,
|
|
173
|
+
...req.user?.id !== undefined && req.user?.id !== null ? {
|
|
174
|
+
user: req.user.id
|
|
175
|
+
} : {},
|
|
176
|
+
...userEmail ? {
|
|
177
|
+
userEmail
|
|
178
|
+
} : {},
|
|
179
|
+
...userDisplay ? {
|
|
180
|
+
userDisplay
|
|
181
|
+
} : {}
|
|
182
|
+
},
|
|
183
|
+
req,
|
|
184
|
+
overrideAccess: true,
|
|
185
|
+
context: {
|
|
186
|
+
...req.context,
|
|
187
|
+
skipLogs: true,
|
|
188
|
+
skipAuditorLogs: true
|
|
189
|
+
}
|
|
190
|
+
});
|
|
191
|
+
} catch (error) {
|
|
192
|
+
req.payload?.logger?.error?.(`[payload-loggs] Error logging afterLogout for ${collection.slug}: ${error}`);
|
|
193
|
+
}
|
|
194
|
+
};
|
|
195
|
+
};
|
|
196
|
+
|
|
197
|
+
//# sourceMappingURL=collectionHooks.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"sources":["../../src/hooks/collectionHooks.ts"],"sourcesContent":["import type { CollectionAfterChangeHook, CollectionAfterDeleteHook, CollectionAfterLoginHook, CollectionAfterLogoutHook, CollectionConfig, Config } from 'payload';\n\nimport type { PluginConfig } from '../types/config.js';\nimport { getResourceTitle } from '../pluginUtils/getResourceTitle.js';\nimport { formatUserDisplay } from '../pluginUtils/formatUserDisplay.js';\nimport { getCollectionLabel } from '../pluginUtils/getCollectionLabel.js';\nimport { SITE_ACTIVITY_SLUG } from '../collections/SiteActivityCollection.js';\n\nexport const createCollectionAfterChangeHook = (\n collection: CollectionConfig,\n payloadConfig: Config,\n _pluginConfig?: PluginConfig,\n): CollectionAfterChangeHook => {\n return async ({ doc, previousDoc, operation, req }) => {\n if (!req || req.context?.skipLogs || req.context?.skipAuditorLogs) {\n return doc;\n }\n\n try {\n const isCreate = operation === 'create' || !previousDoc;\n const opType = isCreate ? 'create' : 'update';\n const label = getCollectionLabel(collection);\n const title = isCreate ? `${label} created` : `${label} modified`;\n\n const resourceName = getResourceTitle(doc, doc?.id);\n const isLocalizationEnabled = Boolean(payloadConfig.localization);\n const locale = isLocalizationEnabled ? req.locale : undefined;\n\n const userEmail = req.user?.email || (doc && typeof doc === 'object' && 'email' in doc && typeof doc.email === 'string' ? doc.email : undefined);\n const userDisplay = formatUserDisplay(userEmail);\n const userId = req.user?.id || (doc && typeof doc === 'object' && 'id' in doc ? doc.id : undefined);\n\n await req.payload.create({\n collection: SITE_ACTIVITY_SLUG,\n data: {\n title,\n operation: opType,\n resourceName,\n resourceType: 'collection',\n collectionLabel: label,\n slug: collection.slug,\n documentId: doc?.id ? String(doc.id) : undefined,\n ...(locale ? { locale } : {}),\n ...(userId !== undefined && userId !== null ? { user: userId } : {}),\n ...(userEmail ? { userEmail } : {}),\n ...(userDisplay ? { userDisplay } : {}),\n },\n req,\n overrideAccess: true,\n context: {\n ...req.context,\n skipLogs: true,\n skipAuditorLogs: true,\n },\n });\n }\n catch (error) {\n req.payload?.logger?.error?.(`[payload-loggs] Error logging collection afterChange for ${collection.slug}: ${error}`);\n }\n\n return doc;\n };\n};\n\nexport const createCollectionAfterDeleteHook = (\n collection: CollectionConfig,\n payloadConfig: Config,\n _pluginConfig?: PluginConfig,\n): CollectionAfterDeleteHook => {\n return async ({ doc, id, req }) => {\n if (!req || req.context?.skipLogs || req.context?.skipAuditorLogs) {\n return doc;\n }\n\n try {\n const label = getCollectionLabel(collection);\n const title = `${label} deleted`;\n\n const resourceName = getResourceTitle(doc, id);\n const isLocalizationEnabled = Boolean(payloadConfig.localization);\n const locale = isLocalizationEnabled ? req.locale : undefined;\n\n const userEmail = req.user?.email || (doc && typeof doc === 'object' && 'email' in doc && typeof doc.email === 'string' ? doc.email : undefined);\n const userDisplay = formatUserDisplay(userEmail);\n const userId = req.user?.id || (doc && typeof doc === 'object' && 'id' in doc ? doc.id : undefined);\n\n await req.payload.create({\n collection: SITE_ACTIVITY_SLUG,\n data: {\n title,\n operation: 'delete',\n resourceName,\n resourceType: 'collection',\n collectionLabel: label,\n slug: collection.slug,\n documentId: id ? String(id) : undefined,\n ...(locale ? { locale } : {}),\n ...(userId !== undefined && userId !== null ? { user: userId } : {}),\n ...(userEmail ? { userEmail } : {}),\n ...(userDisplay ? { userDisplay } : {}),\n },\n req,\n overrideAccess: true,\n context: {\n ...req.context,\n skipLogs: true,\n skipAuditorLogs: true,\n },\n });\n }\n catch (error) {\n req.payload?.logger?.error?.(`[payload-loggs] Error logging collection afterDelete for ${collection.slug}: ${error}`);\n }\n\n return doc;\n };\n};\n\nexport const createCollectionAfterLoginHook = (\n collection: CollectionConfig,\n _payloadConfig: Config,\n _pluginConfig?: PluginConfig,\n): CollectionAfterLoginHook => {\n return async ({ user, req }) => {\n if (!req || req.context?.skipLogs || req.context?.skipAuditorLogs) {\n return user;\n }\n\n try {\n const label = getCollectionLabel(collection);\n const userEmail = user?.email || req.user?.email;\n const userDisplay = formatUserDisplay(userEmail);\n const title = userDisplay ? `User ${userDisplay} logged in` : `${label} logged in`;\n\n await req.payload.create({\n collection: SITE_ACTIVITY_SLUG,\n data: {\n title,\n operation: 'login',\n resourceName: userEmail || String(user?.id || 'User'),\n resourceType: 'collection',\n collectionLabel: label,\n slug: collection.slug,\n documentId: user?.id ? String(user.id) : undefined,\n ...(user?.id !== undefined && user?.id !== null ? { user: user.id } : {}),\n ...(userEmail ? { userEmail } : {}),\n ...(userDisplay ? { userDisplay } : {}),\n },\n req,\n overrideAccess: true,\n context: {\n ...req.context,\n skipLogs: true,\n skipAuditorLogs: true,\n },\n });\n }\n catch (error) {\n req.payload?.logger?.error?.(`[payload-loggs] Error logging afterLogin for ${collection.slug}: ${error}`);\n }\n\n return user;\n };\n};\n\nexport const createCollectionAfterLogoutHook = (\n collection: CollectionConfig,\n _payloadConfig: Config,\n _pluginConfig?: PluginConfig,\n): CollectionAfterLogoutHook => {\n return async ({ req }) => {\n if (!req || req.context?.skipLogs || req.context?.skipAuditorLogs) {\n return;\n }\n\n try {\n const label = getCollectionLabel(collection);\n const userEmail = req.user?.email;\n const userDisplay = formatUserDisplay(userEmail);\n const title = userDisplay ? `User ${userDisplay} logged out` : `${label} logged out`;\n\n await req.payload.create({\n collection: SITE_ACTIVITY_SLUG,\n data: {\n title,\n operation: 'logout',\n resourceName: userEmail || String(req.user?.id || 'User'),\n resourceType: 'collection',\n collectionLabel: label,\n slug: collection.slug,\n documentId: req.user?.id ? String(req.user.id) : undefined,\n ...(req.user?.id !== undefined && req.user?.id !== null ? { user: req.user.id } : {}),\n ...(userEmail ? { userEmail } : {}),\n ...(userDisplay ? { userDisplay } : {}),\n },\n req,\n overrideAccess: true,\n context: {\n ...req.context,\n skipLogs: true,\n skipAuditorLogs: true,\n },\n });\n }\n catch (error) {\n req.payload?.logger?.error?.(`[payload-loggs] Error logging afterLogout for ${collection.slug}: ${error}`);\n }\n };\n};\n"],"names":["getResourceTitle","formatUserDisplay","getCollectionLabel","SITE_ACTIVITY_SLUG","createCollectionAfterChangeHook","collection","payloadConfig","_pluginConfig","doc","previousDoc","operation","req","context","skipLogs","skipAuditorLogs","isCreate","opType","label","title","resourceName","id","isLocalizationEnabled","Boolean","localization","locale","undefined","userEmail","user","email","userDisplay","userId","payload","create","data","resourceType","collectionLabel","slug","documentId","String","overrideAccess","error","logger","createCollectionAfterDeleteHook","createCollectionAfterLoginHook","_payloadConfig","createCollectionAfterLogoutHook"],"mappings":"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"}
|
|
@@ -0,0 +1,56 @@
|
|
|
1
|
+
import { getResourceTitle } from '../pluginUtils/getResourceTitle.js';
|
|
2
|
+
import { formatUserDisplay } from '../pluginUtils/formatUserDisplay.js';
|
|
3
|
+
import { getCollectionLabel } from '../pluginUtils/getCollectionLabel.js';
|
|
4
|
+
import { SITE_ACTIVITY_SLUG } from '../collections/SiteActivityCollection.js';
|
|
5
|
+
export const createGlobalAfterChangeHook = (globalConfig, payloadConfig, _pluginConfig)=>{
|
|
6
|
+
return async ({ doc, req })=>{
|
|
7
|
+
if (!req || req.context?.skipLogs || req.context?.skipAuditorLogs) {
|
|
8
|
+
return doc;
|
|
9
|
+
}
|
|
10
|
+
try {
|
|
11
|
+
const label = getCollectionLabel(globalConfig);
|
|
12
|
+
const title = `Global ${label} updated`;
|
|
13
|
+
const resourceName = getResourceTitle(doc) || label;
|
|
14
|
+
const isLocalizationEnabled = Boolean(payloadConfig.localization);
|
|
15
|
+
const locale = isLocalizationEnabled ? req.locale : undefined;
|
|
16
|
+
const userEmail = req.user?.email;
|
|
17
|
+
const userDisplay = formatUserDisplay(userEmail);
|
|
18
|
+
const userId = req.user?.id;
|
|
19
|
+
await req.payload.create({
|
|
20
|
+
collection: SITE_ACTIVITY_SLUG,
|
|
21
|
+
data: {
|
|
22
|
+
title,
|
|
23
|
+
operation: 'update',
|
|
24
|
+
resourceName,
|
|
25
|
+
resourceType: 'global',
|
|
26
|
+
collectionLabel: label,
|
|
27
|
+
slug: globalConfig.slug,
|
|
28
|
+
...locale ? {
|
|
29
|
+
locale
|
|
30
|
+
} : {},
|
|
31
|
+
...userId !== undefined && userId !== null ? {
|
|
32
|
+
user: userId
|
|
33
|
+
} : {},
|
|
34
|
+
...userEmail ? {
|
|
35
|
+
userEmail
|
|
36
|
+
} : {},
|
|
37
|
+
...userDisplay ? {
|
|
38
|
+
userDisplay
|
|
39
|
+
} : {}
|
|
40
|
+
},
|
|
41
|
+
req,
|
|
42
|
+
overrideAccess: true,
|
|
43
|
+
context: {
|
|
44
|
+
...req.context,
|
|
45
|
+
skipLogs: true,
|
|
46
|
+
skipAuditorLogs: true
|
|
47
|
+
}
|
|
48
|
+
});
|
|
49
|
+
} catch (error) {
|
|
50
|
+
req.payload?.logger?.error?.(`[payload-loggs] Error logging global afterChange for ${globalConfig.slug}: ${error}`);
|
|
51
|
+
}
|
|
52
|
+
return doc;
|
|
53
|
+
};
|
|
54
|
+
};
|
|
55
|
+
|
|
56
|
+
//# sourceMappingURL=globalHooks.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"sources":["../../src/hooks/globalHooks.ts"],"sourcesContent":["import type { Config, GlobalAfterChangeHook, GlobalConfig } from 'payload';\n\nimport type { PluginConfig } from '../types/config.js';\nimport { getResourceTitle } from '../pluginUtils/getResourceTitle.js';\nimport { formatUserDisplay } from '../pluginUtils/formatUserDisplay.js';\nimport { getCollectionLabel } from '../pluginUtils/getCollectionLabel.js';\nimport { SITE_ACTIVITY_SLUG } from '../collections/SiteActivityCollection.js';\n\nexport const createGlobalAfterChangeHook = (\n globalConfig: GlobalConfig,\n payloadConfig: Config,\n _pluginConfig?: PluginConfig,\n): GlobalAfterChangeHook => {\n return async ({ doc, req }) => {\n if (!req || req.context?.skipLogs || req.context?.skipAuditorLogs) {\n return doc;\n }\n\n try {\n const label = getCollectionLabel(globalConfig);\n const title = `Global ${label} updated`;\n\n const resourceName = getResourceTitle(doc) || label;\n const isLocalizationEnabled = Boolean(payloadConfig.localization);\n const locale = isLocalizationEnabled ? req.locale : undefined;\n\n const userEmail = req.user?.email;\n const userDisplay = formatUserDisplay(userEmail);\n const userId = req.user?.id;\n\n await req.payload.create({\n collection: SITE_ACTIVITY_SLUG,\n data: {\n title,\n operation: 'update',\n resourceName,\n resourceType: 'global',\n collectionLabel: label,\n slug: globalConfig.slug,\n ...(locale ? { locale } : {}),\n ...(userId !== undefined && userId !== null ? { user: userId } : {}),\n ...(userEmail ? { userEmail } : {}),\n ...(userDisplay ? { userDisplay } : {}),\n },\n req,\n overrideAccess: true,\n context: {\n ...req.context,\n skipLogs: true,\n skipAuditorLogs: true,\n },\n });\n }\n catch (error) {\n req.payload?.logger?.error?.(`[payload-loggs] Error logging global afterChange for ${globalConfig.slug}: ${error}`);\n }\n\n return doc;\n };\n};\n"],"names":["getResourceTitle","formatUserDisplay","getCollectionLabel","SITE_ACTIVITY_SLUG","createGlobalAfterChangeHook","globalConfig","payloadConfig","_pluginConfig","doc","req","context","skipLogs","skipAuditorLogs","label","title","resourceName","isLocalizationEnabled","Boolean","localization","locale","undefined","userEmail","user","email","userDisplay","userId","id","payload","create","collection","data","operation","resourceType","collectionLabel","slug","overrideAccess","error","logger"],"mappings":"AAGA,SAASA,gBAAgB,QAAQ,qCAAqC;AACtE,SAASC,iBAAiB,QAAQ,sCAAsC;AACxE,SAASC,kBAAkB,QAAQ,uCAAuC;AAC1E,SAASC,kBAAkB,QAAQ,2CAA2C;AAE9E,OAAO,MAAMC,8BAA8B,CACzCC,cACAC,eACAC;IAEA,OAAO,OAAO,EAAEC,GAAG,EAAEC,GAAG,EAAE;QACxB,IAAI,CAACA,OAAOA,IAAIC,OAAO,EAAEC,YAAYF,IAAIC,OAAO,EAAEE,iBAAiB;YACjE,OAAOJ;QACT;QAEA,IAAI;YACF,MAAMK,QAAQX,mBAAmBG;YACjC,MAAMS,QAAQ,CAAC,OAAO,EAAED,MAAM,QAAQ,CAAC;YAEvC,MAAME,eAAef,iBAAiBQ,QAAQK;YAC9C,MAAMG,wBAAwBC,QAAQX,cAAcY,YAAY;YAChE,MAAMC,SAASH,wBAAwBP,IAAIU,MAAM,GAAGC;YAEpD,MAAMC,YAAYZ,IAAIa,IAAI,EAAEC;YAC5B,MAAMC,cAAcvB,kBAAkBoB;YACtC,MAAMI,SAAShB,IAAIa,IAAI,EAAEI;YAEzB,MAAMjB,IAAIkB,OAAO,CAACC,MAAM,CAAC;gBACvBC,YAAY1B;gBACZ2B,MAAM;oBACJhB;oBACAiB,WAAW;oBACXhB;oBACAiB,cAAc;oBACdC,iBAAiBpB;oBACjBqB,MAAM7B,aAAa6B,IAAI;oBACvB,GAAIf,SAAS;wBAAEA;oBAAO,IAAI,CAAC,CAAC;oBAC5B,GAAIM,WAAWL,aAAaK,WAAW,OAAO;wBAAEH,MAAMG;oBAAO,IAAI,CAAC,CAAC;oBACnE,GAAIJ,YAAY;wBAAEA;oBAAU,IAAI,CAAC,CAAC;oBAClC,GAAIG,cAAc;wBAAEA;oBAAY,IAAI,CAAC,CAAC;gBACxC;gBACAf;gBACA0B,gBAAgB;gBAChBzB,SAAS;oBACP,GAAGD,IAAIC,OAAO;oBACdC,UAAU;oBACVC,iBAAiB;gBACnB;YACF;QACF,EACA,OAAOwB,OAAO;YACZ3B,IAAIkB,OAAO,EAAEU,QAAQD,QAAQ,CAAC,qDAAqD,EAAE/B,aAAa6B,IAAI,CAAC,EAAE,EAAEE,OAAO;QACpH;QAEA,OAAO5B;IACT;AACF,EAAE"}
|
package/dist/index.js
ADDED
|
@@ -0,0 +1,10 @@
|
|
|
1
|
+
import { getResourceTitle } from './pluginUtils/getResourceTitle.js';
|
|
2
|
+
import { formatUserDisplay } from './pluginUtils/formatUserDisplay.js';
|
|
3
|
+
import { getCollectionLabel } from './pluginUtils/getCollectionLabel.js';
|
|
4
|
+
import { payloadLoggsPlugin, siteActivity, siteActivityPlugin } from './plugin.js';
|
|
5
|
+
import { siteActivity as siteActivityCollection } from './collections/siteActivity.js';
|
|
6
|
+
import { SITE_ACTIVITY_SLUG, SiteActivityCollection } from './collections/SiteActivityCollection.js';
|
|
7
|
+
export { formatUserDisplay, getCollectionLabel, getResourceTitle, payloadLoggsPlugin, SITE_ACTIVITY_SLUG, siteActivity, SiteActivityCollection, siteActivityCollection, siteActivityPlugin };
|
|
8
|
+
export default siteActivity;
|
|
9
|
+
|
|
10
|
+
//# sourceMappingURL=index.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"sources":["../src/index.ts"],"sourcesContent":["import { getResourceTitle } from './pluginUtils/getResourceTitle.js';\nimport type { SiteActivityLog } from './collections/siteActivity.js';\nimport { formatUserDisplay } from './pluginUtils/formatUserDisplay.js';\nimport { getCollectionLabel } from './pluginUtils/getCollectionLabel.js';\nimport { payloadLoggsPlugin, siteActivity, siteActivityPlugin } from './plugin.js';\nimport { siteActivity as siteActivityCollection } from './collections/siteActivity.js';\nimport { SITE_ACTIVITY_SLUG, SiteActivityCollection } from './collections/SiteActivityCollection.js';\n\nexport type { SiteActivityLogData } from './collections/SiteActivityCollection.js';\nexport type { AutomationConfig, PluginConfig } from './types/config.js';\nexport type { SiteActivityLog };\n\nexport {\n formatUserDisplay,\n getCollectionLabel,\n getResourceTitle,\n payloadLoggsPlugin,\n SITE_ACTIVITY_SLUG,\n siteActivity,\n SiteActivityCollection,\n siteActivityCollection,\n siteActivityPlugin,\n};\n\nexport default siteActivity;\n"],"names":["getResourceTitle","formatUserDisplay","getCollectionLabel","payloadLoggsPlugin","siteActivity","siteActivityPlugin","siteActivityCollection","SITE_ACTIVITY_SLUG","SiteActivityCollection"],"mappings":"AAAA,SAASA,gBAAgB,QAAQ,oCAAoC;AAErE,SAASC,iBAAiB,QAAQ,qCAAqC;AACvE,SAASC,kBAAkB,QAAQ,sCAAsC;AACzE,SAASC,kBAAkB,EAAEC,YAAY,EAAEC,kBAAkB,QAAQ,cAAc;AACnF,SAASD,gBAAgBE,sBAAsB,QAAQ,gCAAgC;AACvF,SAASC,kBAAkB,EAAEC,sBAAsB,QAAQ,0CAA0C;AAMrG,SACEP,iBAAiB,EACjBC,kBAAkB,EAClBF,gBAAgB,EAChBG,kBAAkB,EAClBI,kBAAkB,EAClBH,YAAY,EACZI,sBAAsB,EACtBF,sBAAsB,EACtBD,kBAAkB,GAClB;AAEF,eAAeD,aAAa"}
|
package/dist/plugin.js
ADDED
|
@@ -0,0 +1,46 @@
|
|
|
1
|
+
import { onInitManager } from './pluginUtils/configHelpers.js';
|
|
2
|
+
import { cleanupLogsTask } from './core/automation/tasks/cleanup/cleanup.js';
|
|
3
|
+
import { SiteActivityCollection } from './collections/SiteActivityCollection.js';
|
|
4
|
+
import { attachGlobalConfig } from './pluginUtils/attachGlobalConfig/attachGlobalConfig.js';
|
|
5
|
+
import { attachCollectionConfig } from './pluginUtils/attachCollectionConfig/attachCollectionConfig.js';
|
|
6
|
+
export const siteActivity = (pluginConfig = {})=>{
|
|
7
|
+
return async (payloadConfig)=>{
|
|
8
|
+
const config = {
|
|
9
|
+
...payloadConfig
|
|
10
|
+
};
|
|
11
|
+
const configuredCollection = pluginConfig.configureRootCollection?.(SiteActivityCollection) ?? SiteActivityCollection;
|
|
12
|
+
const hasSiteActivityCollection = config.collections?.some((c)=>c.slug === configuredCollection.slug || c.slug === 'auditor-logs' || c.slug === 'Audit-log');
|
|
13
|
+
if (!hasSiteActivityCollection) {
|
|
14
|
+
config.collections = [
|
|
15
|
+
...config.collections ?? [],
|
|
16
|
+
configuredCollection
|
|
17
|
+
];
|
|
18
|
+
}
|
|
19
|
+
if (pluginConfig.disabled === true) {
|
|
20
|
+
return config;
|
|
21
|
+
}
|
|
22
|
+
config.collections = attachCollectionConfig(config.collections, pluginConfig, config);
|
|
23
|
+
config.globals = attachGlobalConfig(config.globals, pluginConfig, config);
|
|
24
|
+
config.jobs = {
|
|
25
|
+
...config.jobs,
|
|
26
|
+
tasks: [
|
|
27
|
+
...config.jobs?.tasks ?? [],
|
|
28
|
+
cleanupLogsTask({
|
|
29
|
+
pluginConfig,
|
|
30
|
+
internalCollectionConfig: configuredCollection
|
|
31
|
+
})
|
|
32
|
+
]
|
|
33
|
+
};
|
|
34
|
+
config.onInit = onInitManager({
|
|
35
|
+
payloadConfig: config,
|
|
36
|
+
internalCollectionConfig: configuredCollection,
|
|
37
|
+
pluginConfig
|
|
38
|
+
});
|
|
39
|
+
return config;
|
|
40
|
+
};
|
|
41
|
+
};
|
|
42
|
+
export const siteActivityPlugin = siteActivity;
|
|
43
|
+
export const payloadLoggsPlugin = siteActivity;
|
|
44
|
+
export default siteActivity;
|
|
45
|
+
|
|
46
|
+
//# sourceMappingURL=plugin.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"sources":["../src/plugin.ts"],"sourcesContent":["import type { Config, Plugin } from 'payload';\n\nimport type { PluginConfig } from './types/config.js';\nimport { onInitManager } from './pluginUtils/configHelpers.js';\nimport { cleanupLogsTask } from './core/automation/tasks/cleanup/cleanup.js';\nimport { SiteActivityCollection } from './collections/SiteActivityCollection.js';\nimport { attachGlobalConfig } from './pluginUtils/attachGlobalConfig/attachGlobalConfig.js';\nimport { attachCollectionConfig } from './pluginUtils/attachCollectionConfig/attachCollectionConfig.js';\n\nexport const siteActivity = (\n pluginConfig: PluginConfig = {},\n): Plugin => {\n return async (payloadConfig: Config): Promise<Config> => {\n const config = { ...payloadConfig };\n\n const configuredCollection = pluginConfig.configureRootCollection?.(SiteActivityCollection as any) ?? SiteActivityCollection;\n\n const hasSiteActivityCollection = config.collections?.some(\n c => c.slug === configuredCollection.slug || c.slug === 'auditor-logs' || c.slug === 'Audit-log',\n );\n\n if (!hasSiteActivityCollection) {\n config.collections = [\n ...(config.collections ?? []),\n configuredCollection,\n ];\n }\n\n if (pluginConfig.disabled === true) {\n return config;\n }\n\n config.collections = attachCollectionConfig(config.collections, pluginConfig, config);\n config.globals = attachGlobalConfig(config.globals, pluginConfig, config);\n\n config.jobs = {\n ...config.jobs,\n tasks: [\n ...(config.jobs?.tasks ?? []),\n cleanupLogsTask({\n pluginConfig,\n internalCollectionConfig: configuredCollection,\n }),\n ],\n };\n\n config.onInit = onInitManager({\n payloadConfig: config,\n internalCollectionConfig: configuredCollection,\n pluginConfig,\n });\n\n return config;\n };\n};\n\nexport const siteActivityPlugin = siteActivity;\nexport const payloadLoggsPlugin = siteActivity;\n\nexport default siteActivity;\n"],"names":["onInitManager","cleanupLogsTask","SiteActivityCollection","attachGlobalConfig","attachCollectionConfig","siteActivity","pluginConfig","payloadConfig","config","configuredCollection","configureRootCollection","hasSiteActivityCollection","collections","some","c","slug","disabled","globals","jobs","tasks","internalCollectionConfig","onInit","siteActivityPlugin","payloadLoggsPlugin"],"mappings":"AAGA,SAASA,aAAa,QAAQ,iCAAiC;AAC/D,SAASC,eAAe,QAAQ,6CAA6C;AAC7E,SAASC,sBAAsB,QAAQ,0CAA0C;AACjF,SAASC,kBAAkB,QAAQ,yDAAyD;AAC5F,SAASC,sBAAsB,QAAQ,iEAAiE;AAExG,OAAO,MAAMC,eAAe,CAC1BC,eAA6B,CAAC,CAAC;IAE/B,OAAO,OAAOC;QACZ,MAAMC,SAAS;YAAE,GAAGD,aAAa;QAAC;QAElC,MAAME,uBAAuBH,aAAaI,uBAAuB,GAAGR,2BAAkCA;QAEtG,MAAMS,4BAA4BH,OAAOI,WAAW,EAAEC,KACpDC,CAAAA,IAAKA,EAAEC,IAAI,KAAKN,qBAAqBM,IAAI,IAAID,EAAEC,IAAI,KAAK,kBAAkBD,EAAEC,IAAI,KAAK;QAGvF,IAAI,CAACJ,2BAA2B;YAC9BH,OAAOI,WAAW,GAAG;mBACfJ,OAAOI,WAAW,IAAI,EAAE;gBAC5BH;aACD;QACH;QAEA,IAAIH,aAAaU,QAAQ,KAAK,MAAM;YAClC,OAAOR;QACT;QAEAA,OAAOI,WAAW,GAAGR,uBAAuBI,OAAOI,WAAW,EAAEN,cAAcE;QAC9EA,OAAOS,OAAO,GAAGd,mBAAmBK,OAAOS,OAAO,EAAEX,cAAcE;QAElEA,OAAOU,IAAI,GAAG;YACZ,GAAGV,OAAOU,IAAI;YACdC,OAAO;mBACDX,OAAOU,IAAI,EAAEC,SAAS,EAAE;gBAC5BlB,gBAAgB;oBACdK;oBACAc,0BAA0BX;gBAC5B;aACD;QACH;QAEAD,OAAOa,MAAM,GAAGrB,cAAc;YAC5BO,eAAeC;YACfY,0BAA0BX;YAC1BH;QACF;QAEA,OAAOE;IACT;AACF,EAAE;AAEF,OAAO,MAAMc,qBAAqBjB,aAAa;AAC/C,OAAO,MAAMkB,qBAAqBlB,aAAa;AAE/C,eAAeA,aAAa"}
|
|
@@ -0,0 +1,77 @@
|
|
|
1
|
+
import { SITE_ACTIVITY_SLUG } from '../../collections/SiteActivityCollection.js';
|
|
2
|
+
import { logBuilderManager } from '../../core/log-builders/logBuilderManager/logBuilderManager.js';
|
|
3
|
+
import { createCollectionAfterChangeHook, createCollectionAfterDeleteHook, createCollectionAfterLoginHook, createCollectionAfterLogoutHook } from '../../hooks/collectionHooks.js';
|
|
4
|
+
export const attachCollectionConfig = (userCollections, pluginOpts, payloadConfig)=>{
|
|
5
|
+
if (!userCollections || !Array.isArray(userCollections)) {
|
|
6
|
+
return userCollections;
|
|
7
|
+
}
|
|
8
|
+
const collectionsTrackConfig = pluginOpts.collections;
|
|
9
|
+
const isZeroConfig = !collectionsTrackConfig || !collectionsTrackConfig.track;
|
|
10
|
+
const trackedList = collectionsTrackConfig?.track ?? [];
|
|
11
|
+
return userCollections.map((collection)=>{
|
|
12
|
+
// Never attach auditor hooks to the site-activity collection itself to prevent infinite loops
|
|
13
|
+
if (collection.slug === SITE_ACTIVITY_SLUG || collection.slug === 'auditor-logs' || collection.slug === 'Audit-log') {
|
|
14
|
+
return collection;
|
|
15
|
+
}
|
|
16
|
+
const trackedConfig = trackedList.find((tc)=>tc.slug === collection.slug);
|
|
17
|
+
const shouldTrack = isZeroConfig || Boolean(trackedConfig);
|
|
18
|
+
if (!shouldTrack) {
|
|
19
|
+
return collection;
|
|
20
|
+
}
|
|
21
|
+
const updatedCollection = {
|
|
22
|
+
...collection
|
|
23
|
+
};
|
|
24
|
+
updatedCollection.hooks = {
|
|
25
|
+
...updatedCollection.hooks
|
|
26
|
+
};
|
|
27
|
+
// Attach high-level activity feed hooks
|
|
28
|
+
const afterChangeHook = createCollectionAfterChangeHook(updatedCollection, payloadConfig, pluginOpts);
|
|
29
|
+
const afterDeleteHook = createCollectionAfterDeleteHook(updatedCollection, payloadConfig, pluginOpts);
|
|
30
|
+
updatedCollection.hooks.afterChange = [
|
|
31
|
+
...updatedCollection.hooks.afterChange || [],
|
|
32
|
+
afterChangeHook
|
|
33
|
+
];
|
|
34
|
+
updatedCollection.hooks.afterDelete = [
|
|
35
|
+
...updatedCollection.hooks.afterDelete || [],
|
|
36
|
+
afterDeleteHook
|
|
37
|
+
];
|
|
38
|
+
// Attach auth hooks for auth-enabled collections (e.g. users)
|
|
39
|
+
if (collection.auth) {
|
|
40
|
+
const afterLoginHook = createCollectionAfterLoginHook(updatedCollection, payloadConfig, pluginOpts);
|
|
41
|
+
const afterLogoutHook = createCollectionAfterLogoutHook(updatedCollection, payloadConfig, pluginOpts);
|
|
42
|
+
updatedCollection.hooks.afterLogin = [
|
|
43
|
+
...updatedCollection.hooks.afterLogin || [],
|
|
44
|
+
afterLoginHook
|
|
45
|
+
];
|
|
46
|
+
updatedCollection.hooks.afterLogout = [
|
|
47
|
+
...updatedCollection.hooks.afterLogout || [],
|
|
48
|
+
afterLogoutHook
|
|
49
|
+
];
|
|
50
|
+
}
|
|
51
|
+
// Preserve legacy / granular custom hook configs if provided (filtering out read-only hooks)
|
|
52
|
+
if (trackedConfig?.hooks) {
|
|
53
|
+
for(const hookName in trackedConfig.hooks){
|
|
54
|
+
const typedHookName = hookName;
|
|
55
|
+
// Skip read operations and hooks already attached
|
|
56
|
+
if (typedHookName === 'afterChange' || typedHookName === 'afterDelete' || typedHookName === 'afterLogin' || typedHookName === 'afterLogout' || typedHookName === 'beforeRead' || typedHookName === 'afterRead' || typedHookName === 'beforeValidate') {
|
|
57
|
+
continue;
|
|
58
|
+
}
|
|
59
|
+
const existingHooks = updatedCollection.hooks[typedHookName] || [];
|
|
60
|
+
updatedCollection.hooks[typedHookName] = [
|
|
61
|
+
...existingHooks,
|
|
62
|
+
async (args)=>logBuilderManager({
|
|
63
|
+
scopeSlug: 'collection',
|
|
64
|
+
hookArgs: args,
|
|
65
|
+
pluginConfig: pluginOpts,
|
|
66
|
+
targetHookLevelConfig: trackedConfig.hooks?.[typedHookName],
|
|
67
|
+
targetHookName: typedHookName,
|
|
68
|
+
identifier: collection.slug
|
|
69
|
+
})
|
|
70
|
+
];
|
|
71
|
+
}
|
|
72
|
+
}
|
|
73
|
+
return updatedCollection;
|
|
74
|
+
});
|
|
75
|
+
};
|
|
76
|
+
|
|
77
|
+
//# sourceMappingURL=attachCollectionConfig.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"sources":["../../../src/pluginUtils/attachCollectionConfig/attachCollectionConfig.ts"],"sourcesContent":["import type { Config } from 'payload';\n\nimport type { PluginConfig } from '../../types/config.js';\nimport type { CollectionHooksKeys } from '../../types/collection.js';\nimport { SITE_ACTIVITY_SLUG } from '../../collections/SiteActivityCollection.js';\nimport { logBuilderManager } from '../../core/log-builders/logBuilderManager/logBuilderManager.js';\nimport {\n createCollectionAfterChangeHook,\n createCollectionAfterDeleteHook,\n createCollectionAfterLoginHook,\n createCollectionAfterLogoutHook,\n} from '../../hooks/collectionHooks.js';\n\nexport const attachCollectionConfig = (\n userCollections: Config['collections'],\n pluginOpts: PluginConfig,\n payloadConfig: Config,\n): Config['collections'] => {\n if (!userCollections || !Array.isArray(userCollections)) {\n return userCollections;\n }\n\n const collectionsTrackConfig = pluginOpts.collections;\n const isZeroConfig = !collectionsTrackConfig || !collectionsTrackConfig.track;\n const trackedList = collectionsTrackConfig?.track ?? [];\n\n return userCollections.map((collection) => {\n // Never attach auditor hooks to the site-activity collection itself to prevent infinite loops\n if (collection.slug === SITE_ACTIVITY_SLUG || collection.slug === 'auditor-logs' || collection.slug === 'Audit-log') {\n return collection;\n }\n\n const trackedConfig = trackedList.find(tc => tc.slug === collection.slug);\n const shouldTrack = isZeroConfig || Boolean(trackedConfig);\n\n if (!shouldTrack) {\n return collection;\n }\n\n const updatedCollection = { ...collection };\n updatedCollection.hooks = { ...updatedCollection.hooks };\n\n // Attach high-level activity feed hooks\n const afterChangeHook = createCollectionAfterChangeHook(updatedCollection, payloadConfig, pluginOpts);\n const afterDeleteHook = createCollectionAfterDeleteHook(updatedCollection, payloadConfig, pluginOpts);\n\n updatedCollection.hooks.afterChange = [\n ...(updatedCollection.hooks.afterChange || []),\n afterChangeHook,\n ];\n\n updatedCollection.hooks.afterDelete = [\n ...(updatedCollection.hooks.afterDelete || []),\n afterDeleteHook,\n ];\n\n // Attach auth hooks for auth-enabled collections (e.g. users)\n if (collection.auth) {\n const afterLoginHook = createCollectionAfterLoginHook(updatedCollection, payloadConfig, pluginOpts);\n const afterLogoutHook = createCollectionAfterLogoutHook(updatedCollection, payloadConfig, pluginOpts);\n\n updatedCollection.hooks.afterLogin = [\n ...(updatedCollection.hooks.afterLogin || []),\n afterLoginHook,\n ];\n\n updatedCollection.hooks.afterLogout = [\n ...(updatedCollection.hooks.afterLogout || []),\n afterLogoutHook,\n ];\n }\n\n // Preserve legacy / granular custom hook configs if provided (filtering out read-only hooks)\n if (trackedConfig?.hooks) {\n for (const hookName in trackedConfig.hooks) {\n const typedHookName = hookName as CollectionHooksKeys;\n\n // Skip read operations and hooks already attached\n if (\n typedHookName === 'afterChange'\n || typedHookName === 'afterDelete'\n || typedHookName === 'afterLogin'\n || typedHookName === 'afterLogout'\n || typedHookName === 'beforeRead'\n || typedHookName === 'afterRead'\n || typedHookName === 'beforeValidate'\n ) {\n continue;\n }\n\n const existingHooks = (updatedCollection.hooks as any)[typedHookName] || [];\n (updatedCollection.hooks as any)[typedHookName] = [\n ...existingHooks,\n async (args: any) => logBuilderManager({\n scopeSlug: 'collection',\n hookArgs: args,\n pluginConfig: pluginOpts,\n targetHookLevelConfig: trackedConfig.hooks?.[typedHookName],\n targetHookName: typedHookName,\n identifier: collection.slug,\n }),\n ];\n }\n }\n\n return updatedCollection;\n });\n};\n"],"names":["SITE_ACTIVITY_SLUG","logBuilderManager","createCollectionAfterChangeHook","createCollectionAfterDeleteHook","createCollectionAfterLoginHook","createCollectionAfterLogoutHook","attachCollectionConfig","userCollections","pluginOpts","payloadConfig","Array","isArray","collectionsTrackConfig","collections","isZeroConfig","track","trackedList","map","collection","slug","trackedConfig","find","tc","shouldTrack","Boolean","updatedCollection","hooks","afterChangeHook","afterDeleteHook","afterChange","afterDelete","auth","afterLoginHook","afterLogoutHook","afterLogin","afterLogout","hookName","typedHookName","existingHooks","args","scopeSlug","hookArgs","pluginConfig","targetHookLevelConfig","targetHookName","identifier"],"mappings":"AAIA,SAASA,kBAAkB,QAAQ,8CAA8C;AACjF,SAASC,iBAAiB,QAAQ,iEAAiE;AACnG,SACEC,+BAA+B,EAC/BC,+BAA+B,EAC/BC,8BAA8B,EAC9BC,+BAA+B,QAC1B,iCAAiC;AAExC,OAAO,MAAMC,yBAAyB,CACpCC,iBACAC,YACAC;IAEA,IAAI,CAACF,mBAAmB,CAACG,MAAMC,OAAO,CAACJ,kBAAkB;QACvD,OAAOA;IACT;IAEA,MAAMK,yBAAyBJ,WAAWK,WAAW;IACrD,MAAMC,eAAe,CAACF,0BAA0B,CAACA,uBAAuBG,KAAK;IAC7E,MAAMC,cAAcJ,wBAAwBG,SAAS,EAAE;IAEvD,OAAOR,gBAAgBU,GAAG,CAAC,CAACC;QAC1B,8FAA8F;QAC9F,IAAIA,WAAWC,IAAI,KAAKnB,sBAAsBkB,WAAWC,IAAI,KAAK,kBAAkBD,WAAWC,IAAI,KAAK,aAAa;YACnH,OAAOD;QACT;QAEA,MAAME,gBAAgBJ,YAAYK,IAAI,CAACC,CAAAA,KAAMA,GAAGH,IAAI,KAAKD,WAAWC,IAAI;QACxE,MAAMI,cAAcT,gBAAgBU,QAAQJ;QAE5C,IAAI,CAACG,aAAa;YAChB,OAAOL;QACT;QAEA,MAAMO,oBAAoB;YAAE,GAAGP,UAAU;QAAC;QAC1CO,kBAAkBC,KAAK,GAAG;YAAE,GAAGD,kBAAkBC,KAAK;QAAC;QAEvD,wCAAwC;QACxC,MAAMC,kBAAkBzB,gCAAgCuB,mBAAmBhB,eAAeD;QAC1F,MAAMoB,kBAAkBzB,gCAAgCsB,mBAAmBhB,eAAeD;QAE1FiB,kBAAkBC,KAAK,CAACG,WAAW,GAAG;eAChCJ,kBAAkBC,KAAK,CAACG,WAAW,IAAI,EAAE;YAC7CF;SACD;QAEDF,kBAAkBC,KAAK,CAACI,WAAW,GAAG;eAChCL,kBAAkBC,KAAK,CAACI,WAAW,IAAI,EAAE;YAC7CF;SACD;QAED,8DAA8D;QAC9D,IAAIV,WAAWa,IAAI,EAAE;YACnB,MAAMC,iBAAiB5B,+BAA+BqB,mBAAmBhB,eAAeD;YACxF,MAAMyB,kBAAkB5B,gCAAgCoB,mBAAmBhB,eAAeD;YAE1FiB,kBAAkBC,KAAK,CAACQ,UAAU,GAAG;mBAC/BT,kBAAkBC,KAAK,CAACQ,UAAU,IAAI,EAAE;gBAC5CF;aACD;YAEDP,kBAAkBC,KAAK,CAACS,WAAW,GAAG;mBAChCV,kBAAkBC,KAAK,CAACS,WAAW,IAAI,EAAE;gBAC7CF;aACD;QACH;QAEA,6FAA6F;QAC7F,IAAIb,eAAeM,OAAO;YACxB,IAAK,MAAMU,YAAYhB,cAAcM,KAAK,CAAE;gBAC1C,MAAMW,gBAAgBD;gBAEtB,kDAAkD;gBAClD,IACEC,kBAAkB,iBACfA,kBAAkB,iBAClBA,kBAAkB,gBAClBA,kBAAkB,iBAClBA,kBAAkB,gBAClBA,kBAAkB,eAClBA,kBAAkB,kBACrB;oBACA;gBACF;gBAEA,MAAMC,gBAAgB,AAACb,kBAAkBC,KAAK,AAAQ,CAACW,cAAc,IAAI,EAAE;gBAC1EZ,kBAAkBC,KAAK,AAAQ,CAACW,cAAc,GAAG;uBAC7CC;oBACH,OAAOC,OAActC,kBAAkB;4BACrCuC,WAAW;4BACXC,UAAUF;4BACVG,cAAclC;4BACdmC,uBAAuBvB,cAAcM,KAAK,EAAE,CAACW,cAAc;4BAC3DO,gBAAgBP;4BAChBQ,YAAY3B,WAAWC,IAAI;wBAC7B;iBACD;YACH;QACF;QAEA,OAAOM;IACT;AACF,EAAE"}
|
|
@@ -0,0 +1,54 @@
|
|
|
1
|
+
import { createGlobalAfterChangeHook } from '../../hooks/globalHooks.js';
|
|
2
|
+
import { logBuilderManager } from '../../core/log-builders/logBuilderManager/logBuilderManager.js';
|
|
3
|
+
export const attachGlobalConfig = (userGlobals, pluginOpts, payloadConfig)=>{
|
|
4
|
+
if (!userGlobals || !Array.isArray(userGlobals)) {
|
|
5
|
+
return userGlobals;
|
|
6
|
+
}
|
|
7
|
+
const globalsTrackConfig = pluginOpts.globals;
|
|
8
|
+
const isZeroConfig = !globalsTrackConfig || !globalsTrackConfig.track;
|
|
9
|
+
const trackedList = globalsTrackConfig?.track ?? [];
|
|
10
|
+
return userGlobals.map((globalConfig)=>{
|
|
11
|
+
const tracked = trackedList.find((tg)=>tg.slug === globalConfig.slug);
|
|
12
|
+
const shouldTrack = isZeroConfig || Boolean(tracked);
|
|
13
|
+
if (!shouldTrack) {
|
|
14
|
+
return globalConfig;
|
|
15
|
+
}
|
|
16
|
+
const updatedGlobal = {
|
|
17
|
+
...globalConfig
|
|
18
|
+
};
|
|
19
|
+
updatedGlobal.hooks = {
|
|
20
|
+
...updatedGlobal.hooks
|
|
21
|
+
};
|
|
22
|
+
// Attach high-level activity feed hook for global change
|
|
23
|
+
const globalAfterChangeHook = createGlobalAfterChangeHook(updatedGlobal, payloadConfig, pluginOpts);
|
|
24
|
+
updatedGlobal.hooks.afterChange = [
|
|
25
|
+
...updatedGlobal.hooks.afterChange || [],
|
|
26
|
+
globalAfterChangeHook
|
|
27
|
+
];
|
|
28
|
+
// Preserve legacy / granular custom hook configs if provided (filtering out read-only hooks)
|
|
29
|
+
if (tracked?.hooks) {
|
|
30
|
+
for(const hookName in tracked.hooks){
|
|
31
|
+
const typedHookName = hookName;
|
|
32
|
+
// Skip read operations and afterChange (already attached)
|
|
33
|
+
if (typedHookName === 'afterChange' || typedHookName === 'beforeRead' || typedHookName === 'afterRead' || typedHookName === 'beforeValidate') {
|
|
34
|
+
continue;
|
|
35
|
+
}
|
|
36
|
+
const existingHooks = updatedGlobal.hooks[typedHookName] || [];
|
|
37
|
+
updatedGlobal.hooks[typedHookName] = [
|
|
38
|
+
...existingHooks,
|
|
39
|
+
async (args)=>logBuilderManager({
|
|
40
|
+
scopeSlug: 'global',
|
|
41
|
+
hookArgs: args,
|
|
42
|
+
pluginConfig: pluginOpts,
|
|
43
|
+
targetHookLevelConfig: tracked.hooks?.[typedHookName],
|
|
44
|
+
targetHookName: typedHookName,
|
|
45
|
+
identifier: globalConfig.slug
|
|
46
|
+
})
|
|
47
|
+
];
|
|
48
|
+
}
|
|
49
|
+
}
|
|
50
|
+
return updatedGlobal;
|
|
51
|
+
});
|
|
52
|
+
};
|
|
53
|
+
|
|
54
|
+
//# sourceMappingURL=attachGlobalConfig.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"sources":["../../../src/pluginUtils/attachGlobalConfig/attachGlobalConfig.ts"],"sourcesContent":["import type { Config } from 'payload';\n\nimport type { PluginConfig } from '../../types/config.js';\nimport type { GlobalHooksKeys } from '../../types/global.js';\nimport { createGlobalAfterChangeHook } from '../../hooks/globalHooks.js';\nimport { logBuilderManager } from '../../core/log-builders/logBuilderManager/logBuilderManager.js';\n\nexport const attachGlobalConfig = (\n userGlobals: Config['globals'],\n pluginOpts: PluginConfig,\n payloadConfig: Config,\n): Config['globals'] => {\n if (!userGlobals || !Array.isArray(userGlobals)) {\n return userGlobals;\n }\n\n const globalsTrackConfig = pluginOpts.globals;\n const isZeroConfig = !globalsTrackConfig || !globalsTrackConfig.track;\n const trackedList = globalsTrackConfig?.track ?? [];\n\n return userGlobals.map((globalConfig) => {\n const tracked = trackedList.find(tg => tg.slug === globalConfig.slug);\n const shouldTrack = isZeroConfig || Boolean(tracked);\n\n if (!shouldTrack) {\n return globalConfig;\n }\n\n const updatedGlobal = { ...globalConfig };\n updatedGlobal.hooks = { ...updatedGlobal.hooks };\n\n // Attach high-level activity feed hook for global change\n const globalAfterChangeHook = createGlobalAfterChangeHook(updatedGlobal, payloadConfig, pluginOpts);\n\n updatedGlobal.hooks.afterChange = [\n ...(updatedGlobal.hooks.afterChange || []),\n globalAfterChangeHook,\n ];\n\n // Preserve legacy / granular custom hook configs if provided (filtering out read-only hooks)\n if (tracked?.hooks) {\n for (const hookName in tracked.hooks) {\n const typedHookName = hookName as GlobalHooksKeys;\n\n // Skip read operations and afterChange (already attached)\n if (typedHookName === 'afterChange' || typedHookName === 'beforeRead' || typedHookName === 'afterRead' || typedHookName === 'beforeValidate') {\n continue;\n }\n\n const existingHooks = (updatedGlobal.hooks as any)[typedHookName] || [];\n (updatedGlobal.hooks as any)[typedHookName] = [\n ...existingHooks,\n async (args: any) => logBuilderManager({\n scopeSlug: 'global',\n hookArgs: args,\n pluginConfig: pluginOpts,\n targetHookLevelConfig: tracked.hooks?.[typedHookName],\n targetHookName: typedHookName,\n identifier: globalConfig.slug,\n }),\n ];\n }\n }\n\n return updatedGlobal;\n });\n};\n"],"names":["createGlobalAfterChangeHook","logBuilderManager","attachGlobalConfig","userGlobals","pluginOpts","payloadConfig","Array","isArray","globalsTrackConfig","globals","isZeroConfig","track","trackedList","map","globalConfig","tracked","find","tg","slug","shouldTrack","Boolean","updatedGlobal","hooks","globalAfterChangeHook","afterChange","hookName","typedHookName","existingHooks","args","scopeSlug","hookArgs","pluginConfig","targetHookLevelConfig","targetHookName","identifier"],"mappings":"AAIA,SAASA,2BAA2B,QAAQ,6BAA6B;AACzE,SAASC,iBAAiB,QAAQ,iEAAiE;AAEnG,OAAO,MAAMC,qBAAqB,CAChCC,aACAC,YACAC;IAEA,IAAI,CAACF,eAAe,CAACG,MAAMC,OAAO,CAACJ,cAAc;QAC/C,OAAOA;IACT;IAEA,MAAMK,qBAAqBJ,WAAWK,OAAO;IAC7C,MAAMC,eAAe,CAACF,sBAAsB,CAACA,mBAAmBG,KAAK;IACrE,MAAMC,cAAcJ,oBAAoBG,SAAS,EAAE;IAEnD,OAAOR,YAAYU,GAAG,CAAC,CAACC;QACtB,MAAMC,UAAUH,YAAYI,IAAI,CAACC,CAAAA,KAAMA,GAAGC,IAAI,KAAKJ,aAAaI,IAAI;QACpE,MAAMC,cAAcT,gBAAgBU,QAAQL;QAE5C,IAAI,CAACI,aAAa;YAChB,OAAOL;QACT;QAEA,MAAMO,gBAAgB;YAAE,GAAGP,YAAY;QAAC;QACxCO,cAAcC,KAAK,GAAG;YAAE,GAAGD,cAAcC,KAAK;QAAC;QAE/C,yDAAyD;QACzD,MAAMC,wBAAwBvB,4BAA4BqB,eAAehB,eAAeD;QAExFiB,cAAcC,KAAK,CAACE,WAAW,GAAG;eAC5BH,cAAcC,KAAK,CAACE,WAAW,IAAI,EAAE;YACzCD;SACD;QAED,6FAA6F;QAC7F,IAAIR,SAASO,OAAO;YAClB,IAAK,MAAMG,YAAYV,QAAQO,KAAK,CAAE;gBACpC,MAAMI,gBAAgBD;gBAEtB,0DAA0D;gBAC1D,IAAIC,kBAAkB,iBAAiBA,kBAAkB,gBAAgBA,kBAAkB,eAAeA,kBAAkB,kBAAkB;oBAC5I;gBACF;gBAEA,MAAMC,gBAAgB,AAACN,cAAcC,KAAK,AAAQ,CAACI,cAAc,IAAI,EAAE;gBACtEL,cAAcC,KAAK,AAAQ,CAACI,cAAc,GAAG;uBACzCC;oBACH,OAAOC,OAAc3B,kBAAkB;4BACrC4B,WAAW;4BACXC,UAAUF;4BACVG,cAAc3B;4BACd4B,uBAAuBjB,QAAQO,KAAK,EAAE,CAACI,cAAc;4BACrDO,gBAAgBP;4BAChBQ,YAAYpB,aAAaI,IAAI;wBAC/B;iBACD;YACH;QACF;QAEA,OAAOG;IACT;AACF,EAAE"}
|
|
@@ -0,0 +1,40 @@
|
|
|
1
|
+
import { bufferManager } from './../core/buffer/bufferManager.js';
|
|
2
|
+
import { DEFAULT_QUEUE_NAME } from '../core/automation/tasks/cleanup/cleanup.js';
|
|
3
|
+
export const onInitManager = (params)=>{
|
|
4
|
+
const originalOnInit = params.payloadConfig.onInit;
|
|
5
|
+
const bufferConfig = params.pluginConfig.buffer;
|
|
6
|
+
const internalCollectionConfig = params.internalCollectionConfig;
|
|
7
|
+
return async (payload)=>{
|
|
8
|
+
if (originalOnInit) {
|
|
9
|
+
await originalOnInit(payload);
|
|
10
|
+
}
|
|
11
|
+
bufferManager({
|
|
12
|
+
payload,
|
|
13
|
+
bufferConfig,
|
|
14
|
+
internalCollectionConfig
|
|
15
|
+
});
|
|
16
|
+
let autoRun = payload.config.jobs?.autoRun ?? [];
|
|
17
|
+
const queueName = params.pluginConfig.automation?.logCleanup?.queueName ?? DEFAULT_QUEUE_NAME;
|
|
18
|
+
if (Array.isArray(autoRun)) {
|
|
19
|
+
autoRun = [
|
|
20
|
+
...autoRun ?? [],
|
|
21
|
+
{
|
|
22
|
+
queue: queueName
|
|
23
|
+
}
|
|
24
|
+
];
|
|
25
|
+
} else {
|
|
26
|
+
autoRun = [
|
|
27
|
+
...await autoRun?.(payload) ?? [],
|
|
28
|
+
{
|
|
29
|
+
queue: queueName
|
|
30
|
+
}
|
|
31
|
+
];
|
|
32
|
+
}
|
|
33
|
+
payload.config.jobs = {
|
|
34
|
+
...payload.config.jobs ?? {},
|
|
35
|
+
autoRun
|
|
36
|
+
};
|
|
37
|
+
};
|
|
38
|
+
};
|
|
39
|
+
|
|
40
|
+
//# sourceMappingURL=configHelpers.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"sources":["../../src/pluginUtils/configHelpers.ts"],"sourcesContent":["import type { BasePayload, CollectionConfig, Config } from 'payload';\n\nimport type { PluginConfig } from '../types/config.js';\nimport { bufferManager } from './../core/buffer/bufferManager.js';\nimport { DEFAULT_QUEUE_NAME } from '../core/automation/tasks/cleanup/cleanup.js';\n\ntype OnInitManagerParams = {\n payloadConfig: Config;\n pluginConfig: PluginConfig;\n internalCollectionConfig: CollectionConfig;\n};\n\nexport const onInitManager = (params: OnInitManagerParams) => {\n const originalOnInit = params.payloadConfig.onInit;\n const bufferConfig = params.pluginConfig.buffer;\n const internalCollectionConfig = params.internalCollectionConfig;\n\n return async (payload: BasePayload) => {\n if (originalOnInit) {\n await originalOnInit(payload);\n }\n\n bufferManager({ payload, bufferConfig, internalCollectionConfig });\n\n let autoRun = payload.config.jobs?.autoRun ?? [];\n const queueName = params.pluginConfig.automation?.logCleanup?.queueName ?? DEFAULT_QUEUE_NAME;\n if (Array.isArray(autoRun)) {\n autoRun = [...(autoRun ?? []), { queue: queueName }];\n }\n else {\n autoRun = [...(await autoRun?.(payload) ?? []), { queue: queueName }];\n }\n\n payload.config.jobs = {\n ...(payload.config.jobs ?? {}),\n autoRun,\n };\n };\n};\n"],"names":["bufferManager","DEFAULT_QUEUE_NAME","onInitManager","params","originalOnInit","payloadConfig","onInit","bufferConfig","pluginConfig","buffer","internalCollectionConfig","payload","autoRun","config","jobs","queueName","automation","logCleanup","Array","isArray","queue"],"mappings":"AAGA,SAASA,aAAa,QAAQ,oCAAoC;AAClE,SAASC,kBAAkB,QAAQ,8CAA8C;AAQjF,OAAO,MAAMC,gBAAgB,CAACC;IAC5B,MAAMC,iBAAiBD,OAAOE,aAAa,CAACC,MAAM;IAClD,MAAMC,eAAeJ,OAAOK,YAAY,CAACC,MAAM;IAC/C,MAAMC,2BAA2BP,OAAOO,wBAAwB;IAEhE,OAAO,OAAOC;QACZ,IAAIP,gBAAgB;YAClB,MAAMA,eAAeO;QACvB;QAEAX,cAAc;YAAEW;YAASJ;YAAcG;QAAyB;QAEhE,IAAIE,UAAUD,QAAQE,MAAM,CAACC,IAAI,EAAEF,WAAW,EAAE;QAChD,MAAMG,YAAYZ,OAAOK,YAAY,CAACQ,UAAU,EAAEC,YAAYF,aAAad;QAC3E,IAAIiB,MAAMC,OAAO,CAACP,UAAU;YAC1BA,UAAU;mBAAKA,WAAW,EAAE;gBAAG;oBAAEQ,OAAOL;gBAAU;aAAE;QACtD,OACK;YACHH,UAAU;mBAAK,MAAMA,UAAUD,YAAY,EAAE;gBAAG;oBAAES,OAAOL;gBAAU;aAAE;QACvE;QAEAJ,QAAQE,MAAM,CAACC,IAAI,GAAG;YACpB,GAAIH,QAAQE,MAAM,CAACC,IAAI,IAAI,CAAC,CAAC;YAC7BF;QACF;IACF;AACF,EAAE"}
|
|
@@ -0,0 +1,19 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Extracts a shortened display name from an email address (everything before '@').
|
|
3
|
+
* Example: "rushikesh.s@brandlift.com" -> "rushikesh.s"
|
|
4
|
+
*/ export const formatUserDisplay = (email)=>{
|
|
5
|
+
if (!email || typeof email !== 'string') {
|
|
6
|
+
return undefined;
|
|
7
|
+
}
|
|
8
|
+
const trimmed = email.trim();
|
|
9
|
+
if (!trimmed) {
|
|
10
|
+
return undefined;
|
|
11
|
+
}
|
|
12
|
+
const atIndex = trimmed.indexOf('@');
|
|
13
|
+
if (atIndex <= 0) {
|
|
14
|
+
return trimmed;
|
|
15
|
+
}
|
|
16
|
+
return trimmed.substring(0, atIndex);
|
|
17
|
+
};
|
|
18
|
+
|
|
19
|
+
//# sourceMappingURL=formatUserDisplay.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"sources":["../../src/pluginUtils/formatUserDisplay.ts"],"sourcesContent":["/**\n * Extracts a shortened display name from an email address (everything before '@').\n * Example: \"rushikesh.s@brandlift.com\" -> \"rushikesh.s\"\n */\nexport const formatUserDisplay = (email?: string | null): string | undefined => {\n if (!email || typeof email !== 'string') {\n return undefined;\n }\n const trimmed = email.trim();\n if (!trimmed) {\n return undefined;\n }\n const atIndex = trimmed.indexOf('@');\n if (atIndex <= 0) {\n return trimmed;\n }\n return trimmed.substring(0, atIndex);\n};\n"],"names":["formatUserDisplay","email","undefined","trimmed","trim","atIndex","indexOf","substring"],"mappings":"AAAA;;;CAGC,GACD,OAAO,MAAMA,oBAAoB,CAACC;IAChC,IAAI,CAACA,SAAS,OAAOA,UAAU,UAAU;QACvC,OAAOC;IACT;IACA,MAAMC,UAAUF,MAAMG,IAAI;IAC1B,IAAI,CAACD,SAAS;QACZ,OAAOD;IACT;IACA,MAAMG,UAAUF,QAAQG,OAAO,CAAC;IAChC,IAAID,WAAW,GAAG;QAChB,OAAOF;IACT;IACA,OAAOA,QAAQI,SAAS,CAAC,GAAGF;AAC9B,EAAE"}
|