@nocobase/app-plugin-foundation 0.0.0-stage → 0.1.0-beta.1
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/CHANGELOG.md +46 -0
- package/README.md +96 -2
- package/dist/cli/index.d.ts +4 -0
- package/dist/cli/index.d.ts.map +1 -0
- package/dist/cli/index.js +16 -0
- package/dist/cli/index.js.map +1 -0
- package/dist/cli/module-manifest.d.ts +9 -0
- package/dist/cli/module-manifest.d.ts.map +1 -0
- package/dist/cli/module-manifest.js +12 -0
- package/dist/cli/module-manifest.js.map +1 -0
- package/dist/client/api.d.ts +19 -0
- package/dist/client/api.d.ts.map +1 -0
- package/dist/client/api.js +57 -0
- package/dist/client/api.js.map +1 -0
- package/dist/client/business-modules.d.ts +5 -0
- package/dist/client/business-modules.d.ts.map +1 -0
- package/dist/client/business-modules.js +87 -0
- package/dist/client/business-modules.js.map +1 -0
- package/dist/client/components/capability-icons.d.ts +4 -0
- package/dist/client/components/capability-icons.d.ts.map +1 -0
- package/dist/client/components/capability-icons.js +17 -0
- package/dist/client/components/capability-icons.js.map +1 -0
- package/dist/client/components/collections-browser.d.ts +7 -0
- package/dist/client/components/collections-browser.d.ts.map +1 -0
- package/dist/client/components/collections-browser.js +63 -0
- package/dist/client/components/collections-browser.js.map +1 -0
- package/dist/client/components/format.d.ts +7 -0
- package/dist/client/components/format.d.ts.map +1 -0
- package/dist/client/components/format.js +42 -0
- package/dist/client/components/format.js.map +1 -0
- package/dist/client/components/foundation-page.d.ts +16 -0
- package/dist/client/components/foundation-page.d.ts.map +1 -0
- package/dist/client/components/foundation-page.js +217 -0
- package/dist/client/components/foundation-page.js.map +1 -0
- package/dist/client/components/foundation-translation.d.ts +12 -0
- package/dist/client/components/foundation-translation.d.ts.map +1 -0
- package/dist/client/components/foundation-translation.js +19 -0
- package/dist/client/components/foundation-translation.js.map +1 -0
- package/dist/client/components/module-matrix.d.ts +9 -0
- package/dist/client/components/module-matrix.d.ts.map +1 -0
- package/dist/client/components/module-matrix.js +59 -0
- package/dist/client/components/module-matrix.js.map +1 -0
- package/dist/client/components/ui/button.d.ts +8 -0
- package/dist/client/components/ui/button.d.ts.map +1 -0
- package/dist/client/components/ui/button.js +35 -0
- package/dist/client/components/ui/button.js.map +1 -0
- package/dist/client/components/ui/collapsible.d.ts +7 -0
- package/dist/client/components/ui/collapsible.d.ts.map +1 -0
- package/dist/client/components/ui/collapsible.js +13 -0
- package/dist/client/components/ui/collapsible.js.map +1 -0
- package/dist/client/components/ui/dialog.d.ts +18 -0
- package/dist/client/components/ui/dialog.d.ts.map +1 -0
- package/dist/client/components/ui/dialog.js +37 -0
- package/dist/client/components/ui/dialog.js.map +1 -0
- package/dist/client/components/ui/input.d.ts +4 -0
- package/dist/client/components/ui/input.d.ts.map +1 -0
- package/dist/client/components/ui/input.js +8 -0
- package/dist/client/components/ui/input.js.map +1 -0
- package/dist/client/components/ui/table.d.ts +11 -0
- package/dist/client/components/ui/table.d.ts.map +1 -0
- package/dist/client/components/ui/table.js +28 -0
- package/dist/client/components/ui/table.js.map +1 -0
- package/dist/client/components/ui/tooltip.d.ts +8 -0
- package/dist/client/components/ui/tooltip.d.ts.map +1 -0
- package/dist/client/components/ui/tooltip.js +17 -0
- package/dist/client/components/ui/tooltip.js.map +1 -0
- package/dist/client/index.d.ts +6 -0
- package/dist/client/index.d.ts.map +1 -0
- package/dist/client/index.js +7 -0
- package/dist/client/index.js.map +1 -0
- package/dist/client/locales/de-DE.d.ts +4 -0
- package/dist/client/locales/de-DE.d.ts.map +1 -0
- package/dist/client/locales/de-DE.js +334 -0
- package/dist/client/locales/de-DE.js.map +1 -0
- package/dist/client/locales/en-US.d.ts +336 -0
- package/dist/client/locales/en-US.d.ts.map +1 -0
- package/dist/client/locales/en-US.js +334 -0
- package/dist/client/locales/en-US.js.map +1 -0
- package/dist/client/locales/es-ES.d.ts +4 -0
- package/dist/client/locales/es-ES.d.ts.map +1 -0
- package/dist/client/locales/es-ES.js +335 -0
- package/dist/client/locales/es-ES.js.map +1 -0
- package/dist/client/locales/fr-FR.d.ts +4 -0
- package/dist/client/locales/fr-FR.d.ts.map +1 -0
- package/dist/client/locales/fr-FR.js +335 -0
- package/dist/client/locales/fr-FR.js.map +1 -0
- package/dist/client/locales/id-ID.d.ts +4 -0
- package/dist/client/locales/id-ID.d.ts.map +1 -0
- package/dist/client/locales/id-ID.js +334 -0
- package/dist/client/locales/id-ID.js.map +1 -0
- package/dist/client/locales/index.d.ts +4 -0
- package/dist/client/locales/index.d.ts.map +1 -0
- package/dist/client/locales/index.js +14 -0
- package/dist/client/locales/index.js.map +1 -0
- package/dist/client/locales/ja-JP.d.ts +4 -0
- package/dist/client/locales/ja-JP.d.ts.map +1 -0
- package/dist/client/locales/ja-JP.js +334 -0
- package/dist/client/locales/ja-JP.js.map +1 -0
- package/dist/client/locales/pt-BR.d.ts +4 -0
- package/dist/client/locales/pt-BR.d.ts.map +1 -0
- package/dist/client/locales/pt-BR.js +335 -0
- package/dist/client/locales/pt-BR.js.map +1 -0
- package/dist/client/locales/vi-VN.d.ts +4 -0
- package/dist/client/locales/vi-VN.d.ts.map +1 -0
- package/dist/client/locales/vi-VN.js +334 -0
- package/dist/client/locales/vi-VN.js.map +1 -0
- package/dist/client/locales/zh-CN.d.ts +4 -0
- package/dist/client/locales/zh-CN.d.ts.map +1 -0
- package/dist/client/locales/zh-CN.js +334 -0
- package/dist/client/locales/zh-CN.js.map +1 -0
- package/dist/client/locales/zh-TW.d.ts +4 -0
- package/dist/client/locales/zh-TW.d.ts.map +1 -0
- package/dist/client/locales/zh-TW.js +334 -0
- package/dist/client/locales/zh-TW.js.map +1 -0
- package/dist/client/navigation.d.ts +8 -0
- package/dist/client/navigation.d.ts.map +1 -0
- package/dist/client/navigation.js +21 -0
- package/dist/client/navigation.js.map +1 -0
- package/dist/client/plugin.d.ts +11 -0
- package/dist/client/plugin.d.ts.map +1 -0
- package/dist/client/plugin.js +10 -0
- package/dist/client/plugin.js.map +1 -0
- package/dist/client/provider-inventory.d.ts +6 -0
- package/dist/client/provider-inventory.d.ts.map +1 -0
- package/dist/client/provider-inventory.js +49 -0
- package/dist/client/provider-inventory.js.map +1 -0
- package/dist/client/routes.d.ts +18 -0
- package/dist/client/routes.d.ts.map +1 -0
- package/dist/client/routes.js +41 -0
- package/dist/client/routes.js.map +1 -0
- package/dist/package.d.ts +2 -0
- package/dist/package.d.ts.map +1 -0
- package/dist/package.js +2 -0
- package/dist/package.js.map +1 -0
- package/dist/server/api-evidence.d.ts +13 -0
- package/dist/server/api-evidence.d.ts.map +1 -0
- package/dist/server/api-evidence.js +178 -0
- package/dist/server/api-evidence.js.map +1 -0
- package/dist/server/capabilities/data.d.ts +9 -0
- package/dist/server/capabilities/data.d.ts.map +1 -0
- package/dist/server/capabilities/data.js +143 -0
- package/dist/server/capabilities/data.js.map +1 -0
- package/dist/server/capabilities/index.d.ts +5 -0
- package/dist/server/capabilities/index.d.ts.map +1 -0
- package/dist/server/capabilities/index.js +24 -0
- package/dist/server/capabilities/index.js.map +1 -0
- package/dist/server/capabilities/intelligence.d.ts +4 -0
- package/dist/server/capabilities/intelligence.d.ts.map +1 -0
- package/dist/server/capabilities/intelligence.js +105 -0
- package/dist/server/capabilities/intelligence.js.map +1 -0
- package/dist/server/capabilities/messaging.d.ts +4 -0
- package/dist/server/capabilities/messaging.d.ts.map +1 -0
- package/dist/server/capabilities/messaging.js +108 -0
- package/dist/server/capabilities/messaging.js.map +1 -0
- package/dist/server/capabilities/people.d.ts +4 -0
- package/dist/server/capabilities/people.d.ts.map +1 -0
- package/dist/server/capabilities/people.js +151 -0
- package/dist/server/capabilities/people.js.map +1 -0
- package/dist/server/capabilities/platform.d.ts +10 -0
- package/dist/server/capabilities/platform.d.ts.map +1 -0
- package/dist/server/capabilities/platform.js +143 -0
- package/dist/server/capabilities/platform.js.map +1 -0
- package/dist/server/capabilities/processes.d.ts +3 -0
- package/dist/server/capabilities/processes.d.ts.map +1 -0
- package/dist/server/capabilities/processes.js +86 -0
- package/dist/server/capabilities/processes.js.map +1 -0
- package/dist/server/capabilities/types.d.ts +41 -0
- package/dist/server/capabilities/types.d.ts.map +1 -0
- package/dist/server/capabilities/types.js +23 -0
- package/dist/server/capabilities/types.js.map +1 -0
- package/dist/server/catalog.d.ts +3 -0
- package/dist/server/catalog.d.ts.map +1 -0
- package/dist/server/catalog.js +44 -0
- package/dist/server/catalog.js.map +1 -0
- package/dist/server/index.d.ts +6 -0
- package/dist/server/index.d.ts.map +1 -0
- package/dist/server/index.js +5 -0
- package/dist/server/index.js.map +1 -0
- package/dist/server/inventory.d.ts +54 -0
- package/dist/server/inventory.d.ts.map +1 -0
- package/dist/server/inventory.js +184 -0
- package/dist/server/inventory.js.map +1 -0
- package/dist/server/module-manifest.d.ts +10 -0
- package/dist/server/module-manifest.d.ts.map +1 -0
- package/dist/server/module-manifest.js +66 -0
- package/dist/server/module-manifest.js.map +1 -0
- package/dist/server/module-sources.d.ts +5 -0
- package/dist/server/module-sources.d.ts.map +1 -0
- package/dist/server/module-sources.js +482 -0
- package/dist/server/module-sources.js.map +1 -0
- package/dist/server/packages.d.ts +18 -0
- package/dist/server/packages.d.ts.map +1 -0
- package/dist/server/packages.js +62 -0
- package/dist/server/packages.js.map +1 -0
- package/dist/server/plugin.d.ts +4 -0
- package/dist/server/plugin.d.ts.map +1 -0
- package/dist/server/plugin.js +12 -0
- package/dist/server/plugin.js.map +1 -0
- package/dist/server/provider-inventory.d.ts +13 -0
- package/dist/server/provider-inventory.d.ts.map +1 -0
- package/dist/server/provider-inventory.js +180 -0
- package/dist/server/provider-inventory.js.map +1 -0
- package/dist/server/providers/foundation.d.ts +7 -0
- package/dist/server/providers/foundation.d.ts.map +1 -0
- package/dist/server/providers/foundation.js +24 -0
- package/dist/server/providers/foundation.js.map +1 -0
- package/dist/server/providers/index.d.ts +4 -0
- package/dist/server/providers/index.d.ts.map +1 -0
- package/dist/server/providers/index.js +6 -0
- package/dist/server/providers/index.js.map +1 -0
- package/dist/server/read-queue.d.ts +10 -0
- package/dist/server/read-queue.d.ts.map +1 -0
- package/dist/server/read-queue.js +50 -0
- package/dist/server/read-queue.js.map +1 -0
- package/dist/server/request-evidence.d.ts +14 -0
- package/dist/server/request-evidence.d.ts.map +1 -0
- package/dist/server/request-evidence.js +141 -0
- package/dist/server/request-evidence.js.map +1 -0
- package/dist/server/routes/index.d.ts +6 -0
- package/dist/server/routes/index.d.ts.map +1 -0
- package/dist/server/routes/index.js +77 -0
- package/dist/server/routes/index.js.map +1 -0
- package/dist/server/routes/schemas.d.ts +13 -0
- package/dist/server/routes/schemas.d.ts.map +1 -0
- package/dist/server/routes/schemas.js +160 -0
- package/dist/server/routes/schemas.js.map +1 -0
- package/dist/server/services/foundation.d.ts +44 -0
- package/dist/server/services/foundation.d.ts.map +1 -0
- package/dist/server/services/foundation.js +265 -0
- package/dist/server/services/foundation.js.map +1 -0
- package/dist/server/source-evidence.d.ts +26 -0
- package/dist/server/source-evidence.d.ts.map +1 -0
- package/dist/server/source-evidence.js +271 -0
- package/dist/server/source-evidence.js.map +1 -0
- package/dist/server/static-values.d.ts +16 -0
- package/dist/server/static-values.d.ts.map +1 -0
- package/dist/server/static-values.js +181 -0
- package/dist/server/static-values.js.map +1 -0
- package/dist/server/tokens.d.ts +18 -0
- package/dist/server/tokens.d.ts.map +1 -0
- package/dist/server/tokens.js +3 -0
- package/dist/server/tokens.js.map +1 -0
- package/dist/shared/available-capabilities.d.ts +6 -0
- package/dist/shared/available-capabilities.d.ts.map +1 -0
- package/dist/shared/available-capabilities.js +66 -0
- package/dist/shared/available-capabilities.js.map +1 -0
- package/dist/shared/foundation.d.ts +155 -0
- package/dist/shared/foundation.d.ts.map +1 -0
- package/dist/shared/foundation.js +39 -0
- package/dist/shared/foundation.js.map +1 -0
- package/package.json +106 -3
- package/skills/nocobase-app-plugin-foundation/SKILL.md +78 -0
|
@@ -0,0 +1,178 @@
|
|
|
1
|
+
import ts from 'typescript';
|
|
2
|
+
import { StaticValues } from './static-values.js';
|
|
3
|
+
import { objectProperty, returned, REPOSITORY_ACTIONS, } from './request-evidence.js';
|
|
4
|
+
/** Compose only routers reachable from the selected API exports, retaining method and handler boundaries. */
|
|
5
|
+
export function apiDependencies(entry, sources, analysis, providers) {
|
|
6
|
+
const endpoints = [];
|
|
7
|
+
const roots = new Set();
|
|
8
|
+
const visited = new Set();
|
|
9
|
+
const imported = (node, module, name) => (analysis.symbol(node)?.declarations ?? []).some((declaration) => {
|
|
10
|
+
if (!ts.isImportSpecifier(declaration) ||
|
|
11
|
+
(declaration.propertyName?.text ?? declaration.name.text) !== name)
|
|
12
|
+
return false;
|
|
13
|
+
const statement = declaration.parent.parent.parent;
|
|
14
|
+
return (ts.isImportDeclaration(statement) &&
|
|
15
|
+
ts.isStringLiteralLike(statement.moduleSpecifier) &&
|
|
16
|
+
statement.moduleSpecifier.text === module);
|
|
17
|
+
});
|
|
18
|
+
const identity = (node, seen = new Set()) => {
|
|
19
|
+
if (seen.has(node))
|
|
20
|
+
return undefined;
|
|
21
|
+
seen.add(node);
|
|
22
|
+
for (const value of analysis.values(node)) {
|
|
23
|
+
if (ts.isNewExpression(value) &&
|
|
24
|
+
imported(value.expression, 'hono', 'Hono'))
|
|
25
|
+
return value;
|
|
26
|
+
if (ts.isCallExpression(value) &&
|
|
27
|
+
ts.isPropertyAccessExpression(value.expression))
|
|
28
|
+
return identity(value.expression.expression, seen);
|
|
29
|
+
if (value !== node) {
|
|
30
|
+
const result = identity(value, seen);
|
|
31
|
+
if (result)
|
|
32
|
+
return result;
|
|
33
|
+
}
|
|
34
|
+
}
|
|
35
|
+
return undefined;
|
|
36
|
+
};
|
|
37
|
+
const repository = (call) => {
|
|
38
|
+
const option = call.arguments[0];
|
|
39
|
+
for (const config of option ? analysis.values(option) : []) {
|
|
40
|
+
if (!ts.isObjectLiteralExpression(config))
|
|
41
|
+
continue;
|
|
42
|
+
const declared = objectProperty(config, 'repositories');
|
|
43
|
+
for (const array of declared ? analysis.values(declared) : []) {
|
|
44
|
+
if (!ts.isArrayLiteralExpression(array))
|
|
45
|
+
continue;
|
|
46
|
+
for (const element of array.elements)
|
|
47
|
+
for (const exposure of analysis.values(element)) {
|
|
48
|
+
if (!ts.isObjectLiteralExpression(exposure))
|
|
49
|
+
continue;
|
|
50
|
+
const name = objectProperty(exposure, 'name');
|
|
51
|
+
const actions = objectProperty(exposure, 'actions');
|
|
52
|
+
const collection = objectProperty(exposure, 'collection');
|
|
53
|
+
const names = name
|
|
54
|
+
? analysis.values(name).filter(ts.isStringLiteralLike)
|
|
55
|
+
: [];
|
|
56
|
+
const collectionName = collection
|
|
57
|
+
? analysis.values(collection).find(ts.isStringLiteralLike)?.text
|
|
58
|
+
: names[0]?.text;
|
|
59
|
+
for (const actionObject of actions
|
|
60
|
+
? analysis.values(actions)
|
|
61
|
+
: []) {
|
|
62
|
+
if (!ts.isObjectLiteralExpression(actionObject))
|
|
63
|
+
continue;
|
|
64
|
+
for (const action of actionObject.properties) {
|
|
65
|
+
const key = action.name &&
|
|
66
|
+
(ts.isIdentifier(action.name) ||
|
|
67
|
+
ts.isStringLiteralLike(action.name))
|
|
68
|
+
? action.name.text
|
|
69
|
+
: '';
|
|
70
|
+
if (!REPOSITORY_ACTIONS.has(key))
|
|
71
|
+
continue;
|
|
72
|
+
for (const exposureName of names)
|
|
73
|
+
endpoints.push({
|
|
74
|
+
path: `${exposureName.text}/${key}`,
|
|
75
|
+
method: 'POST',
|
|
76
|
+
providers: ['@nocobase/db'],
|
|
77
|
+
...(collectionName
|
|
78
|
+
? { collections: [collectionName] }
|
|
79
|
+
: {}),
|
|
80
|
+
});
|
|
81
|
+
}
|
|
82
|
+
}
|
|
83
|
+
}
|
|
84
|
+
}
|
|
85
|
+
}
|
|
86
|
+
};
|
|
87
|
+
const root = (node) => {
|
|
88
|
+
if (visited.has(node))
|
|
89
|
+
return;
|
|
90
|
+
visited.add(node);
|
|
91
|
+
for (const value of analysis.values(node)) {
|
|
92
|
+
if (ts.isArrayLiteralExpression(value))
|
|
93
|
+
value.elements.forEach(root);
|
|
94
|
+
else if (ts.isFunctionLike(value))
|
|
95
|
+
returned(value).forEach(root);
|
|
96
|
+
else if (ts.isCallExpression(value)) {
|
|
97
|
+
if (imported(value.expression, '@nocobase/app-server/router', 'defineRepositoryApiRoutes'))
|
|
98
|
+
repository(value);
|
|
99
|
+
else if (imported(value.expression, '@nocobase/app-server/router', 'defineApiRoutes'))
|
|
100
|
+
value.arguments.forEach(root);
|
|
101
|
+
else {
|
|
102
|
+
const router = identity(value);
|
|
103
|
+
if (router)
|
|
104
|
+
roots.add(router);
|
|
105
|
+
}
|
|
106
|
+
}
|
|
107
|
+
else {
|
|
108
|
+
const router = identity(value);
|
|
109
|
+
if (router)
|
|
110
|
+
roots.add(router);
|
|
111
|
+
}
|
|
112
|
+
}
|
|
113
|
+
};
|
|
114
|
+
for (const statement of entry.statements) {
|
|
115
|
+
if (ts.isExportAssignment(statement))
|
|
116
|
+
root(statement.expression);
|
|
117
|
+
if (ts.isFunctionDeclaration(statement) &&
|
|
118
|
+
statement.modifiers?.some((item) => item.kind === ts.SyntaxKind.DefaultKeyword))
|
|
119
|
+
root(statement);
|
|
120
|
+
}
|
|
121
|
+
const mounts = new Map();
|
|
122
|
+
const paths = new Map();
|
|
123
|
+
const bases = new Map();
|
|
124
|
+
const literals = new StaticValues(analysis);
|
|
125
|
+
for (const source of sources) {
|
|
126
|
+
const visit = (node) => {
|
|
127
|
+
if (ts.isFunctionLike(node) && !source.nodes.has(node))
|
|
128
|
+
return;
|
|
129
|
+
if (ts.isCallExpression(node) &&
|
|
130
|
+
ts.isPropertyAccessExpression(node.expression)) {
|
|
131
|
+
const router = identity(node.expression.expression);
|
|
132
|
+
const first = node.arguments[0];
|
|
133
|
+
const resolved = first ? literals.strings(first) : [];
|
|
134
|
+
for (const path of router ? resolved : []) {
|
|
135
|
+
if (!router)
|
|
136
|
+
continue;
|
|
137
|
+
const method = node.expression.name.text;
|
|
138
|
+
if (method === 'basePath' && resolved.length === 1)
|
|
139
|
+
bases.set(router, path);
|
|
140
|
+
else if (method === 'route' && node.arguments[1]) {
|
|
141
|
+
const child = identity(node.arguments[1]);
|
|
142
|
+
if (child)
|
|
143
|
+
mounts.set(router, [
|
|
144
|
+
...(mounts.get(router) ?? []),
|
|
145
|
+
{ prefix: path, child },
|
|
146
|
+
]);
|
|
147
|
+
}
|
|
148
|
+
else if (['get', 'post', 'put', 'patch', 'delete'].includes(method)) {
|
|
149
|
+
paths.set(router, [
|
|
150
|
+
...(paths.get(router) ?? []),
|
|
151
|
+
{
|
|
152
|
+
path,
|
|
153
|
+
method: method.toUpperCase(),
|
|
154
|
+
providers: providers(source.ast.fileName, node.arguments.slice(1)),
|
|
155
|
+
},
|
|
156
|
+
]);
|
|
157
|
+
}
|
|
158
|
+
}
|
|
159
|
+
}
|
|
160
|
+
ts.forEachChild(node, visit);
|
|
161
|
+
};
|
|
162
|
+
visit(source.ast);
|
|
163
|
+
}
|
|
164
|
+
const join = (a, b) => '/' + [a, b].join('/').split('/').filter(Boolean).join('/');
|
|
165
|
+
const walk = (router, prefix, seen) => {
|
|
166
|
+
if (seen.has(router))
|
|
167
|
+
return;
|
|
168
|
+
const visited = new Set(seen).add(router);
|
|
169
|
+
const base = join(prefix, bases.get(router) ?? '');
|
|
170
|
+
for (const endpoint of paths.get(router) ?? [])
|
|
171
|
+
endpoints.push({ ...endpoint, path: join(base, endpoint.path) });
|
|
172
|
+
for (const mount of mounts.get(router) ?? [])
|
|
173
|
+
walk(mount.child, join(base, mount.prefix), visited);
|
|
174
|
+
};
|
|
175
|
+
roots.forEach((router) => walk(router, '', new Set()));
|
|
176
|
+
return endpoints;
|
|
177
|
+
}
|
|
178
|
+
//# sourceMappingURL=api-evidence.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"api-evidence.js","sourceRoot":"","sources":["../../server/api-evidence.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,9 @@
|
|
|
1
|
+
import { type CollectionSummary, type Probe } from '../inventory.js';
|
|
2
|
+
import { type CapabilityCollector, type CapabilityFindings } from './types.js';
|
|
3
|
+
/** The Collections that hold the application's own data rather than a NocoBase package's. */
|
|
4
|
+
export declare function applicationCollections(probe: Probe): readonly CollectionSummary[];
|
|
5
|
+
/** Catalog facts remain usable when a costly schema or record scan exceeds its deadline. */
|
|
6
|
+
export declare function dataModelingSummary(probe: Probe): CapabilityFindings;
|
|
7
|
+
export declare const dataModeling: CapabilityCollector;
|
|
8
|
+
export declare const files: CapabilityCollector;
|
|
9
|
+
//# sourceMappingURL=data.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"data.d.ts","sourceRoot":"","sources":["../../../server/capabilities/data.ts"],"names":[],"mappings":"AAGA,OAAO,EAAS,KAAK,iBAAiB,EAAE,KAAK,KAAK,EAAE,MAAM,iBAAiB,CAAC;AAC5E,OAAO,EAIL,KAAK,mBAAmB,EACxB,KAAK,kBAAkB,EACxB,MAAM,YAAY,CAAC;AASpB,6FAA6F;AAC7F,wBAAgB,sBAAsB,CACpC,KAAK,EAAE,KAAK,GACX,SAAS,iBAAiB,EAAE,CAI9B;AAED,4FAA4F;AAC5F,wBAAgB,mBAAmB,CAAC,KAAK,EAAE,KAAK,GAAG,kBAAkB,CA8BpE;AAED,eAAO,MAAM,YAAY,EAAE,mBA+D1B,CAAC;AAYF,eAAO,MAAM,KAAK,EAAE,mBAsDnB,CAAC"}
|
|
@@ -0,0 +1,143 @@
|
|
|
1
|
+
import { driveManagerToken } from '@nocobase/app-server/drive';
|
|
2
|
+
import { systemCollectionOwner } from '../catalog.js';
|
|
3
|
+
import { total } from '../inventory.js';
|
|
4
|
+
import { fact, metric, NO_DATABASE, } from './types.js';
|
|
5
|
+
const RELATION_TYPES = new Set([
|
|
6
|
+
'belongsTo',
|
|
7
|
+
'hasOne',
|
|
8
|
+
'hasMany',
|
|
9
|
+
'belongsToMany',
|
|
10
|
+
]);
|
|
11
|
+
/** The Collections that hold the application's own data rather than a NocoBase package's. */
|
|
12
|
+
export function applicationCollections(probe) {
|
|
13
|
+
return probe.inventory.collections.filter((collection) => systemCollectionOwner(collection.name) === undefined);
|
|
14
|
+
}
|
|
15
|
+
/** Catalog facts remain usable when a costly schema or record scan exceeds its deadline. */
|
|
16
|
+
export function dataModelingSummary(probe) {
|
|
17
|
+
const own = applicationCollections(probe);
|
|
18
|
+
const tables = own.filter((item) => item.kind === 'table');
|
|
19
|
+
return {
|
|
20
|
+
status: 'active',
|
|
21
|
+
facts: own.length
|
|
22
|
+
? [
|
|
23
|
+
fact(own.length > 5
|
|
24
|
+
? 'applicationCollectionsPreview'
|
|
25
|
+
: 'applicationCollections', {
|
|
26
|
+
count: own.length,
|
|
27
|
+
names: own.slice(0, 5).map((item) => item.title ?? item.name),
|
|
28
|
+
}),
|
|
29
|
+
]
|
|
30
|
+
: [fact('noApplicationCollections')],
|
|
31
|
+
metrics: [
|
|
32
|
+
metric('businessRecords', null),
|
|
33
|
+
metric('businessCollections', tables.length),
|
|
34
|
+
metric('views', own.length - tables.length),
|
|
35
|
+
metric('fields', null),
|
|
36
|
+
metric('relations', null),
|
|
37
|
+
metric('systemCollections', probe.inventory.collections.length - own.length),
|
|
38
|
+
],
|
|
39
|
+
};
|
|
40
|
+
}
|
|
41
|
+
export const dataModeling = {
|
|
42
|
+
key: 'dataModeling',
|
|
43
|
+
packages: [
|
|
44
|
+
'@nocobase/db',
|
|
45
|
+
'@nocobase/repository-input',
|
|
46
|
+
'@nocobase/snowflake',
|
|
47
|
+
],
|
|
48
|
+
async collect({ probe, countRecords }) {
|
|
49
|
+
if (!probe)
|
|
50
|
+
return NO_DATABASE;
|
|
51
|
+
const own = applicationCollections(probe);
|
|
52
|
+
// A view reads rows another Collection already holds, so only tables count towards the records.
|
|
53
|
+
const tables = own.filter((collection) => collection.kind === 'table');
|
|
54
|
+
const records = countRecords
|
|
55
|
+
? total(await probe.map(tables, (collection) => probe.count(collection.name)))
|
|
56
|
+
: {
|
|
57
|
+
value: tables.length === 0 ? 0 : null,
|
|
58
|
+
complete: tables.length === 0,
|
|
59
|
+
};
|
|
60
|
+
const definitions = await probe.map(own, (collection) => probe.inventory.definition(collection.name, probe.signal));
|
|
61
|
+
const fields = definitions.flatMap((definition) => definition?.fields ?? []);
|
|
62
|
+
const relations = fields.filter((field) => RELATION_TYPES.has(field.type));
|
|
63
|
+
return {
|
|
64
|
+
status: 'active',
|
|
65
|
+
facts: own.length === 0
|
|
66
|
+
? [fact('noApplicationCollections')]
|
|
67
|
+
: [
|
|
68
|
+
fact(own.length > 5
|
|
69
|
+
? 'applicationCollectionsPreview'
|
|
70
|
+
: 'applicationCollections', {
|
|
71
|
+
count: own.length,
|
|
72
|
+
names: own
|
|
73
|
+
.slice(0, 5)
|
|
74
|
+
.map((collection) => collection.title ?? collection.name),
|
|
75
|
+
}),
|
|
76
|
+
...(relations.length > 0
|
|
77
|
+
? [fact('relations', { count: relations.length })]
|
|
78
|
+
: []),
|
|
79
|
+
],
|
|
80
|
+
metrics: [
|
|
81
|
+
metric('businessRecords', records.value, {
|
|
82
|
+
complete: records.complete,
|
|
83
|
+
}),
|
|
84
|
+
metric('businessCollections', tables.length),
|
|
85
|
+
metric('views', own.length - tables.length),
|
|
86
|
+
metric('fields', fields.length - relations.length),
|
|
87
|
+
metric('relations', relations.length),
|
|
88
|
+
metric('systemCollections', probe.inventory.collections.length - own.length),
|
|
89
|
+
],
|
|
90
|
+
};
|
|
91
|
+
},
|
|
92
|
+
};
|
|
93
|
+
/** The columns the file plugin requires of a file Collection (`FILE_COLUMNS` in `@nocobase/app-plugin-file`). */
|
|
94
|
+
const FILE_COLUMNS = [
|
|
95
|
+
'disk',
|
|
96
|
+
'key',
|
|
97
|
+
'filename',
|
|
98
|
+
'ext',
|
|
99
|
+
'mimeType',
|
|
100
|
+
'size',
|
|
101
|
+
];
|
|
102
|
+
export const files = {
|
|
103
|
+
key: 'files',
|
|
104
|
+
packages: ['@nocobase/app-plugin-file', '@nocobase/drive'],
|
|
105
|
+
async collect({ probe, container }) {
|
|
106
|
+
if (!probe)
|
|
107
|
+
return NO_DATABASE;
|
|
108
|
+
const candidates = await probe.map(applicationCollections(probe).filter((collection) => collection.kind === 'table'), async (collection) => {
|
|
109
|
+
const names = await probe.fieldNames(collection.name);
|
|
110
|
+
return names !== null &&
|
|
111
|
+
FILE_COLUMNS.every((column) => names.includes(column))
|
|
112
|
+
? collection
|
|
113
|
+
: undefined;
|
|
114
|
+
});
|
|
115
|
+
const fileCollections = candidates.filter((collection) => collection !== undefined);
|
|
116
|
+
if (fileCollections.length === 0)
|
|
117
|
+
return { status: 'unused', reason: 'noFileCollection' };
|
|
118
|
+
const counts = total(await probe.map(fileCollections, (collection) => probe.count(collection.name)));
|
|
119
|
+
const bytes = total(await probe.map(fileCollections, (collection) => probe.sum(collection.name, 'size')));
|
|
120
|
+
const hasDrive = container.has(driveManagerToken);
|
|
121
|
+
return {
|
|
122
|
+
status: hasDrive ? 'active' : 'needsSetup',
|
|
123
|
+
...(hasDrive ? {} : { reason: 'noDrive' }),
|
|
124
|
+
facts: [
|
|
125
|
+
fact('fileCollections', {
|
|
126
|
+
count: fileCollections.length,
|
|
127
|
+
names: fileCollections
|
|
128
|
+
.slice(0, 5)
|
|
129
|
+
.map((collection) => collection.title ?? collection.name),
|
|
130
|
+
}),
|
|
131
|
+
],
|
|
132
|
+
metrics: [
|
|
133
|
+
metric('files', counts.value, { complete: counts.complete }),
|
|
134
|
+
metric('storedBytes', bytes.value, {
|
|
135
|
+
unit: 'bytes',
|
|
136
|
+
complete: bytes.complete,
|
|
137
|
+
}),
|
|
138
|
+
metric('fileCollections', fileCollections.length),
|
|
139
|
+
],
|
|
140
|
+
};
|
|
141
|
+
},
|
|
142
|
+
};
|
|
143
|
+
//# sourceMappingURL=data.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"data.js","sourceRoot":"","sources":["../../../server/capabilities/data.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,5 @@
|
|
|
1
|
+
import type { CapabilityCollector } from './types.js';
|
|
2
|
+
/** Ordered adapters, independently extensible without a fixed capability enum. */
|
|
3
|
+
export declare const CAPABILITY_COLLECTORS: readonly CapabilityCollector[];
|
|
4
|
+
export type { CapabilityCollector, CollectorContext } from './types.js';
|
|
5
|
+
//# sourceMappingURL=index.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../server/capabilities/index.ts"],"names":[],"mappings":"AAMA,OAAO,KAAK,EAAE,mBAAmB,EAAE,MAAM,YAAY,CAAC;AAkBtD,kFAAkF;AAClF,eAAO,MAAM,qBAAqB,EAAE,SAAS,mBAAmB,EAAe,CAAC;AAEhF,YAAY,EAAE,mBAAmB,EAAE,gBAAgB,EAAE,MAAM,YAAY,CAAC"}
|
|
@@ -0,0 +1,24 @@
|
|
|
1
|
+
import { dataModeling, files } from './data.js';
|
|
2
|
+
import { aiAgents, knowledge } from './intelligence.js';
|
|
3
|
+
import { mail, notifications } from './messaging.js';
|
|
4
|
+
import { permissions, usersAndOrganizations } from './people.js';
|
|
5
|
+
import { audit, integrations, operations, userInterface } from './platform.js';
|
|
6
|
+
import { workflows } from './processes.js';
|
|
7
|
+
const collectors = [
|
|
8
|
+
dataModeling,
|
|
9
|
+
files,
|
|
10
|
+
usersAndOrganizations,
|
|
11
|
+
permissions,
|
|
12
|
+
workflows,
|
|
13
|
+
aiAgents,
|
|
14
|
+
knowledge,
|
|
15
|
+
mail,
|
|
16
|
+
notifications,
|
|
17
|
+
integrations,
|
|
18
|
+
userInterface,
|
|
19
|
+
audit,
|
|
20
|
+
operations,
|
|
21
|
+
];
|
|
22
|
+
/** Ordered adapters, independently extensible without a fixed capability enum. */
|
|
23
|
+
export const CAPABILITY_COLLECTORS = collectors;
|
|
24
|
+
//# sourceMappingURL=index.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index.js","sourceRoot":"","sources":["../../../server/capabilities/index.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,YAAY,EAAE,KAAK,EAAE,MAAM,WAAW,CAAC;AAChD,OAAO,EAAE,QAAQ,EAAE,SAAS,EAAE,MAAM,mBAAmB,CAAC;AACxD,OAAO,EAAE,IAAI,EAAE,aAAa,EAAE,MAAM,gBAAgB,CAAC;AACrD,OAAO,EAAE,WAAW,EAAE,qBAAqB,EAAE,MAAM,aAAa,CAAC;AACjE,OAAO,EAAE,KAAK,EAAE,YAAY,EAAE,UAAU,EAAE,aAAa,EAAE,MAAM,eAAe,CAAC;AAC/E,OAAO,EAAE,SAAS,EAAE,MAAM,gBAAgB,CAAC;AAG3C,MAAM,UAAU,GAAmC;IACjD,YAAY;IACZ,KAAK;IACL,qBAAqB;IACrB,WAAW;IACX,SAAS;IACT,QAAQ;IACR,SAAS;IACT,IAAI;IACJ,aAAa;IACb,YAAY;IACZ,aAAa;IACb,KAAK;IACL,UAAU;CACX,CAAC;AAEF,kFAAkF;AAClF,MAAM,CAAC,MAAM,qBAAqB,GAAmC,UAAU,CAAC"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"intelligence.d.ts","sourceRoot":"","sources":["../../../server/capabilities/intelligence.ts"],"names":[],"mappings":"AAEA,OAAO,EAIL,KAAK,mBAAmB,EACzB,MAAM,YAAY,CAAC;AAEpB,eAAO,MAAM,QAAQ,EAAE,mBA6EtB,CAAC;AAEF,eAAO,MAAM,SAAS,EAAE,mBAwBvB,CAAC"}
|
|
@@ -0,0 +1,105 @@
|
|
|
1
|
+
import { total } from '../inventory.js';
|
|
2
|
+
import { fact, metric, NO_DATABASE, } from './types.js';
|
|
3
|
+
export const aiAgents = {
|
|
4
|
+
key: 'aiAgents',
|
|
5
|
+
packages: [
|
|
6
|
+
'@nocobase/app-plugin-agents',
|
|
7
|
+
'@nocobase/app-plugin-agent-sessions',
|
|
8
|
+
'@nocobase/app-plugin-ai-employee',
|
|
9
|
+
],
|
|
10
|
+
async collect({ probe }) {
|
|
11
|
+
if (!probe)
|
|
12
|
+
return NO_DATABASE;
|
|
13
|
+
const hasModelServices = probe.has('agModelServices');
|
|
14
|
+
if (!hasModelServices && !probe.has('agRunners'))
|
|
15
|
+
return { status: 'unused', reason: 'notRegistered' };
|
|
16
|
+
const [services, agents, runners, runs, modelCalls, input, output] = await Promise.all([
|
|
17
|
+
hasModelServices
|
|
18
|
+
? probe.count('agModelServices', { enabled: true })
|
|
19
|
+
: Promise.resolve(0),
|
|
20
|
+
probe.has('agAgents') ? probe.count('agAgents') : Promise.resolve(0),
|
|
21
|
+
probe.has('agRunners') ? probe.count('agRunners') : Promise.resolve(0),
|
|
22
|
+
probe.has('agRuns') ? probe.count('agRuns') : Promise.resolve(0),
|
|
23
|
+
probe.has('agModelUsage')
|
|
24
|
+
? probe.count('agModelUsage')
|
|
25
|
+
: Promise.resolve(0),
|
|
26
|
+
probe.has('agModelUsage')
|
|
27
|
+
? probe.sum('agModelUsage', 'inputTokens')
|
|
28
|
+
: Promise.resolve(0),
|
|
29
|
+
probe.has('agModelUsage')
|
|
30
|
+
? probe.sum('agModelUsage', 'outputTokens')
|
|
31
|
+
: Promise.resolve(0),
|
|
32
|
+
]);
|
|
33
|
+
const tokens = total([input, output]);
|
|
34
|
+
// Native OnlineAgent and gateway calls use model services directly, without an agAgents record.
|
|
35
|
+
const online = services !== null && services > 0;
|
|
36
|
+
const runner = runners !== null && runners > 0;
|
|
37
|
+
const parts = [];
|
|
38
|
+
if (hasModelServices && services !== null)
|
|
39
|
+
parts.push(online
|
|
40
|
+
? { key: 'modelServices', status: 'active' }
|
|
41
|
+
: {
|
|
42
|
+
key: 'modelServices',
|
|
43
|
+
status: 'needsSetup',
|
|
44
|
+
reason: 'noModelService',
|
|
45
|
+
});
|
|
46
|
+
if (agents !== null)
|
|
47
|
+
parts.push({ key: 'agents', status: agents > 0 ? 'active' : 'unused' });
|
|
48
|
+
if (runners !== null)
|
|
49
|
+
parts.push({ key: 'runners', status: runner ? 'active' : 'unused' });
|
|
50
|
+
const active = online || runner;
|
|
51
|
+
const unknown = services === null || runners === null;
|
|
52
|
+
return {
|
|
53
|
+
status: active ? 'active' : unknown ? null : 'needsSetup',
|
|
54
|
+
...(active || unknown ? {} : { reason: 'noModelOrRunner' }),
|
|
55
|
+
facts: active
|
|
56
|
+
? [
|
|
57
|
+
...(online ? [fact('modelServices', { count: services })] : []),
|
|
58
|
+
...(runner ? [fact('runners', { count: runners })] : []),
|
|
59
|
+
...(agents !== null && runs !== null && (agents > 0 || runs > 0)
|
|
60
|
+
? [fact('agents', { count: agents, runs })]
|
|
61
|
+
: []),
|
|
62
|
+
]
|
|
63
|
+
: [],
|
|
64
|
+
metrics: [
|
|
65
|
+
metric('agents', agents),
|
|
66
|
+
metric('modelServices', services),
|
|
67
|
+
metric('runners', runners),
|
|
68
|
+
metric('runs', runs),
|
|
69
|
+
metric('modelCalls', modelCalls),
|
|
70
|
+
metric('tokens', tokens.value, {
|
|
71
|
+
unit: 'tokens',
|
|
72
|
+
complete: tokens.complete,
|
|
73
|
+
}),
|
|
74
|
+
],
|
|
75
|
+
parts,
|
|
76
|
+
};
|
|
77
|
+
},
|
|
78
|
+
};
|
|
79
|
+
export const knowledge = {
|
|
80
|
+
key: 'knowledge',
|
|
81
|
+
packages: ['@nocobase/app-plugin-knowledge'],
|
|
82
|
+
async collect({ probe }) {
|
|
83
|
+
if (!probe)
|
|
84
|
+
return NO_DATABASE;
|
|
85
|
+
if (!probe.has('kbSpaces'))
|
|
86
|
+
return { status: 'unused', reason: 'notRegistered' };
|
|
87
|
+
const [spaces, docs, chunks] = await Promise.all([
|
|
88
|
+
probe.count('kbSpaces'),
|
|
89
|
+
probe.has('kbDocs') ? probe.count('kbDocs') : Promise.resolve(0),
|
|
90
|
+
probe.has('kbChunks') ? probe.count('kbChunks') : Promise.resolve(0),
|
|
91
|
+
]);
|
|
92
|
+
const active = (docs ?? 0) > 0;
|
|
93
|
+
return {
|
|
94
|
+
status: active ? 'active' : 'needsSetup',
|
|
95
|
+
...(active ? {} : { reason: 'noDocuments' }),
|
|
96
|
+
facts: active ? [fact('documents', { count: docs ?? 0 })] : [],
|
|
97
|
+
metrics: [
|
|
98
|
+
metric('documents', docs),
|
|
99
|
+
metric('spaces', spaces),
|
|
100
|
+
metric('chunks', chunks),
|
|
101
|
+
],
|
|
102
|
+
};
|
|
103
|
+
},
|
|
104
|
+
};
|
|
105
|
+
//# sourceMappingURL=intelligence.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"intelligence.js","sourceRoot":"","sources":["../../../server/capabilities/intelligence.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"messaging.d.ts","sourceRoot":"","sources":["../../../server/capabilities/messaging.ts"],"names":[],"mappings":"AAAA,OAAO,EAKL,KAAK,mBAAmB,EACzB,MAAM,YAAY,CAAC;AAKpB,eAAO,MAAM,IAAI,EAAE,mBA0ClB,CAAC;AAIF,eAAO,MAAM,aAAa,EAAE,mBAyE3B,CAAC"}
|
|
@@ -0,0 +1,108 @@
|
|
|
1
|
+
import { countOf, fact, metric, NO_DATABASE, } from './types.js';
|
|
2
|
+
/** Account states that need someone to act before the mailbox syncs again. */
|
|
3
|
+
const ATTENTION_STATES = ['reauthorizationRequired', 'suspended', 'revoked'];
|
|
4
|
+
export const mail = {
|
|
5
|
+
key: 'mail',
|
|
6
|
+
packages: ['@nocobase/app-plugin-mail', '@nocobase/mailer'],
|
|
7
|
+
async collect({ probe }) {
|
|
8
|
+
if (!probe)
|
|
9
|
+
return NO_DATABASE;
|
|
10
|
+
if (!probe.has('mailAccounts'))
|
|
11
|
+
return { status: 'unused', reason: 'notRegistered' };
|
|
12
|
+
const [accounts, messages, submissions] = await Promise.all([
|
|
13
|
+
probe.groupCount('mailAccounts', 'status'),
|
|
14
|
+
probe.has('mailMessages')
|
|
15
|
+
? probe.count('mailMessages')
|
|
16
|
+
: Promise.resolve(0),
|
|
17
|
+
probe.has('mailSubmissions')
|
|
18
|
+
? probe.groupCount('mailSubmissions', 'status')
|
|
19
|
+
: Promise.resolve(new Map()),
|
|
20
|
+
]);
|
|
21
|
+
const connected = countOf(accounts, ['active']);
|
|
22
|
+
const attention = countOf(accounts, ATTENTION_STATES);
|
|
23
|
+
const active = (connected ?? 0) > 0;
|
|
24
|
+
return {
|
|
25
|
+
status: active ? 'active' : 'needsSetup',
|
|
26
|
+
...(active ? {} : { reason: 'noConnectedMailbox' }),
|
|
27
|
+
facts: [
|
|
28
|
+
...(active ? [fact('mailboxes', { count: connected ?? 0 })] : []),
|
|
29
|
+
...((attention ?? 0) > 0
|
|
30
|
+
? [fact('mailboxesNeedAttention', { count: attention ?? 0 })]
|
|
31
|
+
: []),
|
|
32
|
+
],
|
|
33
|
+
metrics: [
|
|
34
|
+
metric('connectedMailboxes', connected),
|
|
35
|
+
metric('mailboxesNeedAttention', attention),
|
|
36
|
+
metric('messages', messages),
|
|
37
|
+
metric('submissions', submissions === null
|
|
38
|
+
? null
|
|
39
|
+
: [...submissions.values()].reduce((sum, count) => sum + count, 0)),
|
|
40
|
+
metric('failedSubmissions', countOf(submissions, ['failed'])),
|
|
41
|
+
],
|
|
42
|
+
};
|
|
43
|
+
},
|
|
44
|
+
};
|
|
45
|
+
const IN_FLIGHT = ['pending', 'preparing', 'submitting', 'retrying'];
|
|
46
|
+
export const notifications = {
|
|
47
|
+
key: 'notifications',
|
|
48
|
+
packages: [
|
|
49
|
+
'@nocobase/app-plugin-notification',
|
|
50
|
+
'@nocobase/app-plugin-notification-in-app',
|
|
51
|
+
'@nocobase/app-plugin-notification-providers',
|
|
52
|
+
'@nocobase/app-plugin-notification-web-push',
|
|
53
|
+
],
|
|
54
|
+
async collect({ probe, config }) {
|
|
55
|
+
if (!probe)
|
|
56
|
+
return NO_DATABASE;
|
|
57
|
+
if (!probe.has('notificationDeliveries'))
|
|
58
|
+
return { status: 'unused', reason: 'notRegistered' };
|
|
59
|
+
const channels = Object.entries(config.get('notification')?.channels ?? {});
|
|
60
|
+
const [dispatches, deliveries, attempts, inApp, inAppRead] = await Promise.all([
|
|
61
|
+
probe.has('notificationDispatches')
|
|
62
|
+
? probe.count('notificationDispatches')
|
|
63
|
+
: Promise.resolve(0),
|
|
64
|
+
probe.groupCount('notificationDeliveries', 'status'),
|
|
65
|
+
probe.has('notificationDeliveryAttempts')
|
|
66
|
+
? probe.count('notificationDeliveryAttempts')
|
|
67
|
+
: Promise.resolve(0),
|
|
68
|
+
probe.has('notificationInAppItems')
|
|
69
|
+
? probe.count('notificationInAppItems')
|
|
70
|
+
: Promise.resolve(undefined),
|
|
71
|
+
probe.has('notificationInAppItems')
|
|
72
|
+
? probe.count('notificationInAppItems', (filter) => filter.date('readAt').notEmpty())
|
|
73
|
+
: Promise.resolve(undefined),
|
|
74
|
+
]);
|
|
75
|
+
const active = channels.length > 0;
|
|
76
|
+
return {
|
|
77
|
+
status: active ? 'active' : 'needsSetup',
|
|
78
|
+
...(active ? {} : { reason: 'noChannel' }),
|
|
79
|
+
facts: active
|
|
80
|
+
? [
|
|
81
|
+
fact('channels', {
|
|
82
|
+
count: channels.length,
|
|
83
|
+
names: channels.map(([name, channel]) => `${name} (${typeof channel.provider === 'string' ? channel.provider : '?'})`),
|
|
84
|
+
}),
|
|
85
|
+
]
|
|
86
|
+
: [],
|
|
87
|
+
metrics: [
|
|
88
|
+
// Accepted by the provider, which is not the same as read or even received.
|
|
89
|
+
metric('acceptedDeliveries', countOf(deliveries, ['accepted'])),
|
|
90
|
+
metric('notifications', dispatches),
|
|
91
|
+
metric('deliveries', deliveries === null
|
|
92
|
+
? null
|
|
93
|
+
: [...deliveries.values()].reduce((sum, count) => sum + count, 0)),
|
|
94
|
+
metric('failedDeliveries', countOf(deliveries, ['failed'])),
|
|
95
|
+
metric('pendingDeliveries', countOf(deliveries, IN_FLIGHT)),
|
|
96
|
+
metric('deliveryAttempts', attempts),
|
|
97
|
+
...(inApp === undefined
|
|
98
|
+
? []
|
|
99
|
+
: [
|
|
100
|
+
metric('inAppMessages', inApp),
|
|
101
|
+
metric('inAppMessagesRead', inAppRead ?? null),
|
|
102
|
+
]),
|
|
103
|
+
metric('channels', channels.length),
|
|
104
|
+
],
|
|
105
|
+
};
|
|
106
|
+
},
|
|
107
|
+
};
|
|
108
|
+
//# sourceMappingURL=messaging.js.map
|