@tachybase/plugin-api-logs 0.23.43

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (56) hide show
  1. package/LICENSE +201 -0
  2. package/README.md +1 -0
  3. package/client.d.ts +2 -0
  4. package/client.js +1 -0
  5. package/dist/client/ApiLogsBlockInitializer.d.ts +1 -0
  6. package/dist/client/ApiLogsBlockProvider.d.ts +4 -0
  7. package/dist/client/ApiLogsProvider.d.ts +1 -0
  8. package/dist/client/collections.d.ts +184 -0
  9. package/dist/client/components/ApiLogsField.d.ts +2 -0
  10. package/dist/client/components/ApiLogsValue.d.ts +2 -0
  11. package/dist/client/components/ApiLogsViewActionInitializer.d.ts +1 -0
  12. package/dist/client/components/useApiLogsConfigUpdateProps.d.ts +9 -0
  13. package/dist/client/configuration/apiLogsConfigProvider.d.ts +1 -0
  14. package/dist/client/configuration/apiLogsConfigschema.d.ts +12 -0
  15. package/dist/client/deplicated/ApiLogs.d.ts +1 -0
  16. package/dist/client/deplicated/ApiLogsDesigner.d.ts +1 -0
  17. package/dist/client/index.d.ts +1 -0
  18. package/dist/client/index.js +1 -0
  19. package/dist/client/initializers/ApiLogsTableActionColumnInitializer.d.ts +1 -0
  20. package/dist/client/initializers/ApiLogsTableActionColumnInitializers.d.ts +2 -0
  21. package/dist/client/initializers/ApiLogsTableActionInitializers.d.ts +3 -0
  22. package/dist/client/initializers/ApiLogsTableColumnInitializers.d.ts +2 -0
  23. package/dist/client/locale.d.ts +4 -0
  24. package/dist/client/plugin.d.ts +5 -0
  25. package/dist/externalVersion.js +15 -0
  26. package/dist/index.d.ts +2 -0
  27. package/dist/index.js +39 -0
  28. package/dist/locale/en-US.json +44 -0
  29. package/dist/locale/zh-CN.json +49 -0
  30. package/dist/server/ApiFilter.d.ts +16 -0
  31. package/dist/server/ApiFilter.js +64 -0
  32. package/dist/server/actions/apiLogsController.d.ts +4 -0
  33. package/dist/server/actions/apiLogsController.js +115 -0
  34. package/dist/server/collections/apiLogs.d.ts +3 -0
  35. package/dist/server/collections/apiLogs.js +72 -0
  36. package/dist/server/collections/apiLogsChanges.d.ts +2 -0
  37. package/dist/server/collections/apiLogsChanges.js +55 -0
  38. package/dist/server/collections/apiLogsConfig.d.ts +3 -0
  39. package/dist/server/collections/apiLogsConfig.js +59 -0
  40. package/dist/server/hooks/afterCreate.d.ts +1 -0
  41. package/dist/server/hooks/afterCreate.js +74 -0
  42. package/dist/server/hooks/afterDestroy.d.ts +1 -0
  43. package/dist/server/hooks/afterDestroy.js +66 -0
  44. package/dist/server/hooks/afterUpdate.d.ts +1 -0
  45. package/dist/server/hooks/afterUpdate.js +82 -0
  46. package/dist/server/hooks/getFieldChange.d.ts +6 -0
  47. package/dist/server/hooks/getFieldChange.js +151 -0
  48. package/dist/server/hooks/index.d.ts +3 -0
  49. package/dist/server/hooks/index.js +25 -0
  50. package/dist/server/index.d.ts +1 -0
  51. package/dist/server/index.js +33 -0
  52. package/dist/server/plugin.d.ts +8 -0
  53. package/dist/server/plugin.js +128 -0
  54. package/package.json +31 -0
  55. package/server.d.ts +2 -0
  56. package/server.js +1 -0
@@ -0,0 +1,82 @@
1
+ var __defProp = Object.defineProperty;
2
+ var __getOwnPropDesc = Object.getOwnPropertyDescriptor;
3
+ var __getOwnPropNames = Object.getOwnPropertyNames;
4
+ var __hasOwnProp = Object.prototype.hasOwnProperty;
5
+ var __export = (target, all) => {
6
+ for (var name in all)
7
+ __defProp(target, name, { get: all[name], enumerable: true });
8
+ };
9
+ var __copyProps = (to, from, except, desc) => {
10
+ if (from && typeof from === "object" || typeof from === "function") {
11
+ for (let key of __getOwnPropNames(from))
12
+ if (!__hasOwnProp.call(to, key) && key !== except)
13
+ __defProp(to, key, { get: () => from[key], enumerable: !(desc = __getOwnPropDesc(from, key)) || desc.enumerable });
14
+ }
15
+ return to;
16
+ };
17
+ var __toCommonJS = (mod) => __copyProps(__defProp({}, "__esModule", { value: true }), mod);
18
+ var afterUpdate_exports = {};
19
+ __export(afterUpdate_exports, {
20
+ handleUpdate: () => handleUpdate
21
+ });
22
+ module.exports = __toCommonJS(afterUpdate_exports);
23
+ var import_getFieldChange = require("./getFieldChange");
24
+ async function handleUpdate(ctx) {
25
+ var _a;
26
+ const { actionName, resourceName, params } = ctx.action;
27
+ const currentTime = (/* @__PURE__ */ new Date()).toISOString();
28
+ const apilogsRepo = ctx.db.getRepository("apiLogs");
29
+ const currentUserId = (_a = ctx.auth) == null ? void 0 : _a.user.id;
30
+ const app = ctx.app;
31
+ const collection = app.mainDataSource.collectionManager.getCollection(ctx.action.resourceName);
32
+ const changes = [];
33
+ const { changed, data: dataBefore } = await (0, import_getFieldChange.getChanged)(ctx);
34
+ if (!changed) {
35
+ return;
36
+ }
37
+ changed.forEach((key) => {
38
+ var _a2;
39
+ const field = collection.findField((field2) => {
40
+ return field2.name === key || field2.options.field === key;
41
+ });
42
+ if (field && !field.options.hidden) {
43
+ let before = dataBefore[key];
44
+ let after = params.values[key];
45
+ if (before === after) {
46
+ return;
47
+ }
48
+ if ((before === null || before === void 0) && (after === null || after === void 0)) {
49
+ return;
50
+ }
51
+ if (field.type === "bigInt" && ((_a2 = field.options) == null ? void 0 : _a2.isForeignKey) && +before === +after) {
52
+ return;
53
+ }
54
+ changes.push({
55
+ field: field.options,
56
+ after: params.values[key],
57
+ before: dataBefore[key]
58
+ });
59
+ }
60
+ });
61
+ if (!changes.length) {
62
+ return;
63
+ }
64
+ try {
65
+ await apilogsRepo.create({
66
+ values: {
67
+ action: actionName,
68
+ createdAt: currentTime,
69
+ collectionName: resourceName,
70
+ recordId: params.filterByTk,
71
+ userId: currentUserId,
72
+ changes
73
+ }
74
+ });
75
+ } catch (error) {
76
+ throw new Error("Failed to create API log");
77
+ }
78
+ }
79
+ // Annotate the CommonJS export names for ESM import in node:
80
+ 0 && (module.exports = {
81
+ handleUpdate
82
+ });
@@ -0,0 +1,6 @@
1
+ /** 获得真正变动的数据库字段 */
2
+ export declare function getChanged(ctx: any): Promise<{
3
+ changed?: string[];
4
+ data?: any;
5
+ error: Error;
6
+ }>;
@@ -0,0 +1,151 @@
1
+ var __defProp = Object.defineProperty;
2
+ var __getOwnPropDesc = Object.getOwnPropertyDescriptor;
3
+ var __getOwnPropNames = Object.getOwnPropertyNames;
4
+ var __hasOwnProp = Object.prototype.hasOwnProperty;
5
+ var __export = (target, all) => {
6
+ for (var name in all)
7
+ __defProp(target, name, { get: all[name], enumerable: true });
8
+ };
9
+ var __copyProps = (to, from, except, desc) => {
10
+ if (from && typeof from === "object" || typeof from === "function") {
11
+ for (let key of __getOwnPropNames(from))
12
+ if (!__hasOwnProp.call(to, key) && key !== except)
13
+ __defProp(to, key, { get: () => from[key], enumerable: !(desc = __getOwnPropDesc(from, key)) || desc.enumerable });
14
+ }
15
+ return to;
16
+ };
17
+ var __toCommonJS = (mod) => __copyProps(__defProp({}, "__esModule", { value: true }), mod);
18
+ var getFieldChange_exports = {};
19
+ __export(getFieldChange_exports, {
20
+ getChanged: () => getChanged
21
+ });
22
+ module.exports = __toCommonJS(getFieldChange_exports);
23
+ var import_utils = require("@tachybase/utils");
24
+ function isSameBasic(val1, val2) {
25
+ if (val1 instanceof Date || val2 instanceof Date) {
26
+ return new Date(val1).getTime() === new Date(val2).getTime();
27
+ }
28
+ return val1 === val2;
29
+ }
30
+ function getLostKey(smallOne, bigOne, path = "") {
31
+ const lostKeys = /* @__PURE__ */ new Set();
32
+ if (typeof bigOne !== "object" || bigOne === null) {
33
+ if (smallOne === void 0) {
34
+ return [path];
35
+ }
36
+ return [];
37
+ }
38
+ const bigKeys = Object.keys(bigOne);
39
+ for (const key of bigKeys) {
40
+ let keyLabel = path ? `${path}.${key}` : key;
41
+ if (Array.isArray(bigOne)) {
42
+ keyLabel = path;
43
+ }
44
+ if ((smallOne == null ? void 0 : smallOne[key]) === void 0) {
45
+ lostKeys.add(keyLabel);
46
+ continue;
47
+ } else {
48
+ const result = getLostKey(smallOne == null ? void 0 : smallOne[key], bigOne == null ? void 0 : bigOne[key], keyLabel);
49
+ for (const item of result) {
50
+ lostKeys.add(item);
51
+ }
52
+ }
53
+ }
54
+ return [...lostKeys];
55
+ }
56
+ function getDiffKeyExceptAfter(before, after, path = "") {
57
+ if (after === null || after === void 0) {
58
+ return [];
59
+ }
60
+ if (typeof before !== "object" || typeof after !== "object" || before === null || after === null) {
61
+ if (!isSameBasic(before, after)) {
62
+ return [path];
63
+ } else {
64
+ return [];
65
+ }
66
+ }
67
+ if (Array.isArray(before) && Array.isArray(after) && before.length !== after.length) {
68
+ return [path];
69
+ }
70
+ const beforeDiffKeys = /* @__PURE__ */ new Set();
71
+ const beforeKeys = Object.keys(before);
72
+ for (const key of beforeKeys) {
73
+ if ((after == null ? void 0 : after[key]) === void 0) {
74
+ continue;
75
+ }
76
+ let keyLabel = path ? `${path}.${key}` : key;
77
+ if (Array.isArray(after)) {
78
+ keyLabel = path;
79
+ }
80
+ if ((before == null ? void 0 : before[key]) === void 0) {
81
+ beforeDiffKeys.add(keyLabel);
82
+ continue;
83
+ } else {
84
+ const result = getDiffKeyExceptAfter(before == null ? void 0 : before[key], after == null ? void 0 : after[key], keyLabel);
85
+ for (const item of result) {
86
+ beforeDiffKeys.add(item);
87
+ }
88
+ }
89
+ }
90
+ return [...beforeDiffKeys];
91
+ }
92
+ async function getChanged(ctx) {
93
+ try {
94
+ const params = import_utils.lodash.cloneDeep(ctx.action.params);
95
+ const repo = ctx.db.getRepository(ctx.action.resourceName);
96
+ const fieldsObj = {};
97
+ const app = ctx.app;
98
+ const collection = app.mainDataSource.collectionManager.getCollection(ctx.action.resourceName);
99
+ const fields = collection.getFields();
100
+ for (const field of fields) {
101
+ fieldsObj[field.options.name] = field;
102
+ }
103
+ let appendSet = /* @__PURE__ */ new Set();
104
+ if (params.updateAssociationValues) {
105
+ appendSet = new Set(params.updateAssociationValues);
106
+ }
107
+ for (const key of appendSet) {
108
+ if (!fieldsObj[key]) {
109
+ continue;
110
+ }
111
+ const type = fieldsObj[key].options.type;
112
+ if (type === "virtual") {
113
+ appendSet.delete(key);
114
+ continue;
115
+ }
116
+ }
117
+ let dataBefore = (await repo.findOne({
118
+ filter: {
119
+ id: params.filterByTk
120
+ },
121
+ appends: [...appendSet]
122
+ })).toJSON();
123
+ const lostKeys = getLostKey(dataBefore, params.values);
124
+ for (const lostKey of lostKeys) {
125
+ if (lostKey.includes(".") || fieldsObj[lostKey] !== void 0 && ["belongsTo", "belongsToMany", "hasOne", "hasMany"].includes(fieldsObj[lostKey].options.type)) {
126
+ appendSet.add(lostKey);
127
+ }
128
+ }
129
+ dataBefore = (await repo.findOne({
130
+ filter: {
131
+ id: params.filterByTk
132
+ },
133
+ appends: [...appendSet]
134
+ })).toJSON();
135
+ const changed = getDiffKeyExceptAfter(dataBefore, params.values);
136
+ return {
137
+ error: null,
138
+ data: dataBefore,
139
+ changed
140
+ };
141
+ } catch (err) {
142
+ ctx.log.error(err);
143
+ return {
144
+ error: err.stack
145
+ };
146
+ }
147
+ }
148
+ // Annotate the CommonJS export names for ESM import in node:
149
+ 0 && (module.exports = {
150
+ getChanged
151
+ });
@@ -0,0 +1,3 @@
1
+ export * from './afterCreate';
2
+ export * from './afterUpdate';
3
+ export * from './afterDestroy';
@@ -0,0 +1,25 @@
1
+ var __defProp = Object.defineProperty;
2
+ var __getOwnPropDesc = Object.getOwnPropertyDescriptor;
3
+ var __getOwnPropNames = Object.getOwnPropertyNames;
4
+ var __hasOwnProp = Object.prototype.hasOwnProperty;
5
+ var __copyProps = (to, from, except, desc) => {
6
+ if (from && typeof from === "object" || typeof from === "function") {
7
+ for (let key of __getOwnPropNames(from))
8
+ if (!__hasOwnProp.call(to, key) && key !== except)
9
+ __defProp(to, key, { get: () => from[key], enumerable: !(desc = __getOwnPropDesc(from, key)) || desc.enumerable });
10
+ }
11
+ return to;
12
+ };
13
+ var __reExport = (target, mod, secondTarget) => (__copyProps(target, mod, "default"), secondTarget && __copyProps(secondTarget, mod, "default"));
14
+ var __toCommonJS = (mod) => __copyProps(__defProp({}, "__esModule", { value: true }), mod);
15
+ var hooks_exports = {};
16
+ module.exports = __toCommonJS(hooks_exports);
17
+ __reExport(hooks_exports, require("./afterCreate"), module.exports);
18
+ __reExport(hooks_exports, require("./afterUpdate"), module.exports);
19
+ __reExport(hooks_exports, require("./afterDestroy"), module.exports);
20
+ // Annotate the CommonJS export names for ESM import in node:
21
+ 0 && (module.exports = {
22
+ ...require("./afterCreate"),
23
+ ...require("./afterUpdate"),
24
+ ...require("./afterDestroy")
25
+ });
@@ -0,0 +1 @@
1
+ export { default } from './plugin';
@@ -0,0 +1,33 @@
1
+ var __create = Object.create;
2
+ var __defProp = Object.defineProperty;
3
+ var __getOwnPropDesc = Object.getOwnPropertyDescriptor;
4
+ var __getOwnPropNames = Object.getOwnPropertyNames;
5
+ var __getProtoOf = Object.getPrototypeOf;
6
+ var __hasOwnProp = Object.prototype.hasOwnProperty;
7
+ var __export = (target, all) => {
8
+ for (var name in all)
9
+ __defProp(target, name, { get: all[name], enumerable: true });
10
+ };
11
+ var __copyProps = (to, from, except, desc) => {
12
+ if (from && typeof from === "object" || typeof from === "function") {
13
+ for (let key of __getOwnPropNames(from))
14
+ if (!__hasOwnProp.call(to, key) && key !== except)
15
+ __defProp(to, key, { get: () => from[key], enumerable: !(desc = __getOwnPropDesc(from, key)) || desc.enumerable });
16
+ }
17
+ return to;
18
+ };
19
+ var __toESM = (mod, isNodeMode, target) => (target = mod != null ? __create(__getProtoOf(mod)) : {}, __copyProps(
20
+ // If the importer is in node compatibility mode or this is not an ESM
21
+ // file that has been converted to a CommonJS file using a Babel-
22
+ // compatible transform (i.e. "__esModule" has not been set), then set
23
+ // "default" to the CommonJS "module.exports" for node compatibility.
24
+ isNodeMode || !mod || !mod.__esModule ? __defProp(target, "default", { value: mod, enumerable: true }) : target,
25
+ mod
26
+ ));
27
+ var __toCommonJS = (mod) => __copyProps(__defProp({}, "__esModule", { value: true }), mod);
28
+ var server_exports = {};
29
+ __export(server_exports, {
30
+ default: () => import_plugin.default
31
+ });
32
+ module.exports = __toCommonJS(server_exports);
33
+ var import_plugin = __toESM(require("./plugin"));
@@ -0,0 +1,8 @@
1
+ import { Plugin } from '@tachybase/server';
2
+ export declare class PluginApiLogsServer extends Plugin {
3
+ afterAdd(): Promise<void>;
4
+ beforeLoad(): Promise<void>;
5
+ addApiListener(): Promise<void>;
6
+ load(): Promise<void>;
7
+ }
8
+ export default PluginApiLogsServer;
@@ -0,0 +1,128 @@
1
+ var __create = Object.create;
2
+ var __defProp = Object.defineProperty;
3
+ var __getOwnPropDesc = Object.getOwnPropertyDescriptor;
4
+ var __getOwnPropNames = Object.getOwnPropertyNames;
5
+ var __hasOwnProp = Object.prototype.hasOwnProperty;
6
+ var __knownSymbol = (name, symbol) => (symbol = Symbol[name]) ? symbol : Symbol.for("Symbol." + name);
7
+ var __typeError = (msg) => {
8
+ throw TypeError(msg);
9
+ };
10
+ var __defNormalProp = (obj, key, value) => key in obj ? __defProp(obj, key, { enumerable: true, configurable: true, writable: true, value }) : obj[key] = value;
11
+ var __name = (target, value) => __defProp(target, "name", { value, configurable: true });
12
+ var __export = (target, all) => {
13
+ for (var name in all)
14
+ __defProp(target, name, { get: all[name], enumerable: true });
15
+ };
16
+ var __copyProps = (to, from, except, desc) => {
17
+ if (from && typeof from === "object" || typeof from === "function") {
18
+ for (let key of __getOwnPropNames(from))
19
+ if (!__hasOwnProp.call(to, key) && key !== except)
20
+ __defProp(to, key, { get: () => from[key], enumerable: !(desc = __getOwnPropDesc(from, key)) || desc.enumerable });
21
+ }
22
+ return to;
23
+ };
24
+ var __toCommonJS = (mod) => __copyProps(__defProp({}, "__esModule", { value: true }), mod);
25
+ var __decoratorStart = (base) => [, , , __create((base == null ? void 0 : base[__knownSymbol("metadata")]) ?? null)];
26
+ var __decoratorStrings = ["class", "method", "getter", "setter", "accessor", "field", "value", "get", "set"];
27
+ var __expectFn = (fn) => fn !== void 0 && typeof fn !== "function" ? __typeError("Function expected") : fn;
28
+ var __decoratorContext = (kind, name, done, metadata, fns) => ({ kind: __decoratorStrings[kind], name, metadata, addInitializer: (fn) => done._ ? __typeError("Already initialized") : fns.push(__expectFn(fn || null)) });
29
+ var __decoratorMetadata = (array, target) => __defNormalProp(target, __knownSymbol("metadata"), array[3]);
30
+ var __runInitializers = (array, flags, self, value) => {
31
+ for (var i = 0, fns = array[flags >> 1], n = fns && fns.length; i < n; i++) flags & 1 ? fns[i].call(self) : value = fns[i].call(self, value);
32
+ return value;
33
+ };
34
+ var __decorateElement = (array, flags, name, decorators, target, extra) => {
35
+ var fn, it, done, ctx, access, k = flags & 7, s = !!(flags & 8), p = !!(flags & 16);
36
+ var j = k > 3 ? array.length + 1 : k ? s ? 1 : 2 : 0, key = __decoratorStrings[k + 5];
37
+ var initializers = k > 3 && (array[j - 1] = []), extraInitializers = array[j] || (array[j] = []);
38
+ var desc = k && (!p && !s && (target = target.prototype), k < 5 && (k > 3 || !p) && __getOwnPropDesc(k < 4 ? target : { get [name]() {
39
+ return __privateGet(this, extra);
40
+ }, set [name](x) {
41
+ return __privateSet(this, extra, x);
42
+ } }, name));
43
+ k ? p && k < 4 && __name(extra, (k > 2 ? "set " : k > 1 ? "get " : "") + name) : __name(target, name);
44
+ for (var i = decorators.length - 1; i >= 0; i--) {
45
+ ctx = __decoratorContext(k, name, done = {}, array[3], extraInitializers);
46
+ if (k) {
47
+ ctx.static = s, ctx.private = p, access = ctx.access = { has: p ? (x) => __privateIn(target, x) : (x) => name in x };
48
+ if (k ^ 3) access.get = p ? (x) => (k ^ 1 ? __privateGet : __privateMethod)(x, target, k ^ 4 ? extra : desc.get) : (x) => x[name];
49
+ if (k > 2) access.set = p ? (x, y) => __privateSet(x, target, y, k ^ 4 ? extra : desc.set) : (x, y) => x[name] = y;
50
+ }
51
+ it = (0, decorators[i])(k ? k < 4 ? p ? extra : desc[key] : k > 4 ? void 0 : { get: desc.get, set: desc.set } : target, ctx), done._ = 1;
52
+ if (k ^ 4 || it === void 0) __expectFn(it) && (k > 4 ? initializers.unshift(it) : k ? p ? extra = it : desc[key] = it : target = it);
53
+ else if (typeof it !== "object" || it === null) __typeError("Object expected");
54
+ else __expectFn(fn = it.get) && (desc.get = fn), __expectFn(fn = it.set) && (desc.set = fn), __expectFn(fn = it.init) && initializers.unshift(fn);
55
+ }
56
+ return k || __decoratorMetadata(array, target), desc && __defProp(target, name, desc), p ? k ^ 4 ? extra : desc : target;
57
+ };
58
+ var __accessCheck = (obj, member, msg) => member.has(obj) || __typeError("Cannot " + msg);
59
+ var __privateIn = (member, obj) => Object(obj) !== obj ? __typeError('Cannot use the "in" operator on this value') : member.has(obj);
60
+ var __privateGet = (obj, member, getter) => (__accessCheck(obj, member, "read from private field"), getter ? getter.call(obj) : member.get(obj));
61
+ var __privateSet = (obj, member, value, setter) => (__accessCheck(obj, member, "write to private field"), setter ? setter.call(obj, value) : member.set(obj, value), value);
62
+ var __privateMethod = (obj, member, method) => (__accessCheck(obj, member, "access private method"), method);
63
+ var plugin_exports = {};
64
+ __export(plugin_exports, {
65
+ PluginApiLogsServer: () => PluginApiLogsServer,
66
+ default: () => plugin_default
67
+ });
68
+ module.exports = __toCommonJS(plugin_exports);
69
+ var import_node_worker_threads = require("node:worker_threads");
70
+ var import_server = require("@tachybase/server");
71
+ var import_apiLogsController = require("./actions/apiLogsController");
72
+ var import_ApiFilter = require("./ApiFilter");
73
+ var import_hooks = require("./hooks");
74
+ var _PluginApiLogsServer_decorators, _init, _a;
75
+ _PluginApiLogsServer_decorators = [(0, import_server.InjectedPlugin)({
76
+ Controllers: [import_apiLogsController.ApiLogsController]
77
+ })];
78
+ class PluginApiLogsServer extends (_a = import_server.Plugin) {
79
+ async afterAdd() {
80
+ if (!import_node_worker_threads.isMainThread) {
81
+ this.addApiListener();
82
+ }
83
+ }
84
+ async beforeLoad() {
85
+ if (import_node_worker_threads.isMainThread) {
86
+ this.addApiListener();
87
+ }
88
+ }
89
+ async addApiListener() {
90
+ const apiFilter = new import_ApiFilter.ApiFilter(this.db);
91
+ this.app.on("afterStart", async () => {
92
+ await apiFilter.load();
93
+ });
94
+ this.app.resourcer.use(
95
+ async (ctx, next) => {
96
+ const { actionName, resourceName, params } = ctx.action;
97
+ if (!apiFilter.check(resourceName, actionName)) {
98
+ return next();
99
+ }
100
+ if (actionName === "update") {
101
+ (0, import_hooks.handleUpdate)(ctx);
102
+ }
103
+ if (actionName === "create") {
104
+ (0, import_hooks.handleCreate)(ctx);
105
+ }
106
+ if (actionName === "destroy") {
107
+ (0, import_hooks.handleDestroy)(ctx);
108
+ }
109
+ await next();
110
+ },
111
+ { tag: "apiLogs", after: "acl", before: "dataSource" }
112
+ );
113
+ }
114
+ async load() {
115
+ this.app.acl.registerSnippet({
116
+ name: `pm.system-services.apiLogsConfig`,
117
+ actions: ["apiLogsConfig:*"]
118
+ });
119
+ }
120
+ }
121
+ _init = __decoratorStart(_a);
122
+ PluginApiLogsServer = __decorateElement(_init, 0, "PluginApiLogsServer", _PluginApiLogsServer_decorators, PluginApiLogsServer);
123
+ __runInitializers(_init, 1, PluginApiLogsServer);
124
+ var plugin_default = PluginApiLogsServer;
125
+ // Annotate the CommonJS export names for ESM import in node:
126
+ 0 && (module.exports = {
127
+ PluginApiLogsServer
128
+ });
package/package.json ADDED
@@ -0,0 +1,31 @@
1
+ {
2
+ "name": "@tachybase/plugin-api-logs",
3
+ "displayName": "Api Logs",
4
+ "version": "0.23.43",
5
+ "description": "Provides seamless tracking of API actions through enhanced user interface components, configuration panels, and dashboards",
6
+ "keywords": [
7
+ "Logging and monitoring"
8
+ ],
9
+ "main": "dist/server/index.js",
10
+ "devDependencies": {
11
+ "@ant-design/icons": "^5.6.1",
12
+ "antd": "5.22.5",
13
+ "lodash": "^4.17.21",
14
+ "react-i18next": "^15.4.0",
15
+ "react-router-dom": "6.28.1"
16
+ },
17
+ "peerDependencies": {
18
+ "@tachybase/actions": "0.23.47",
19
+ "@tachybase/client": "0.23.47",
20
+ "@tachybase/components": "0.23.47",
21
+ "@tachybase/data-source": "0.23.47",
22
+ "@tachybase/database": "0.23.47",
23
+ "@tachybase/schema": "0.23.47",
24
+ "@tachybase/resourcer": "0.23.47",
25
+ "@tachybase/server": "0.23.47",
26
+ "@tachybase/utils": "0.23.47",
27
+ "@tachybase/test": "0.23.47"
28
+ },
29
+ "description.zh-CN": "Api Logs通过增强的用户界面组件、配置面板和仪表板提供对 API 操作的无缝跟踪",
30
+ "displayName.zh-CN": "Api 日志"
31
+ }
package/server.d.ts ADDED
@@ -0,0 +1,2 @@
1
+ export * from './dist/server';
2
+ export { default } from './dist/server';
package/server.js ADDED
@@ -0,0 +1 @@
1
+ module.exports = require('./dist/server/index.js');