@abtnode/core 1.17.8-beta-20260109-075740-5f484e08 → 1.17.8-beta-20260113-015027-32a1cec4
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/lib/api/team/access-key-manager.js +104 -0
- package/lib/api/team/invitation-manager.js +461 -0
- package/lib/api/team/notification-manager.js +189 -0
- package/lib/api/team/oauth-manager.js +60 -0
- package/lib/api/team/org-crud-manager.js +202 -0
- package/lib/api/team/org-manager.js +56 -0
- package/lib/api/team/org-member-manager.js +403 -0
- package/lib/api/team/org-query-manager.js +126 -0
- package/lib/api/team/org-resource-manager.js +186 -0
- package/lib/api/team/passport-manager.js +670 -0
- package/lib/api/team/rbac-manager.js +335 -0
- package/lib/api/team/session-manager.js +540 -0
- package/lib/api/team/store-manager.js +198 -0
- package/lib/api/team/tag-manager.js +230 -0
- package/lib/api/team/user-auth-manager.js +132 -0
- package/lib/api/team/user-manager.js +78 -0
- package/lib/api/team/user-query-manager.js +299 -0
- package/lib/api/team/user-social-manager.js +354 -0
- package/lib/api/team/user-update-manager.js +224 -0
- package/lib/api/team/verify-code-manager.js +161 -0
- package/lib/api/team.js +439 -3287
- package/lib/blocklet/manager/disk/auth-manager.js +68 -0
- package/lib/blocklet/manager/disk/backup-manager.js +288 -0
- package/lib/blocklet/manager/disk/cleanup-manager.js +157 -0
- package/lib/blocklet/manager/disk/component-manager.js +83 -0
- package/lib/blocklet/manager/disk/config-manager.js +191 -0
- package/lib/blocklet/manager/disk/controller-manager.js +64 -0
- package/lib/blocklet/manager/disk/delete-reset-manager.js +328 -0
- package/lib/blocklet/manager/disk/download-manager.js +96 -0
- package/lib/blocklet/manager/disk/env-config-manager.js +311 -0
- package/lib/blocklet/manager/disk/federated-manager.js +651 -0
- package/lib/blocklet/manager/disk/hook-manager.js +124 -0
- package/lib/blocklet/manager/disk/install-component-manager.js +95 -0
- package/lib/blocklet/manager/disk/install-core-manager.js +448 -0
- package/lib/blocklet/manager/disk/install-download-manager.js +313 -0
- package/lib/blocklet/manager/disk/install-manager.js +36 -0
- package/lib/blocklet/manager/disk/install-upgrade-manager.js +340 -0
- package/lib/blocklet/manager/disk/job-manager.js +467 -0
- package/lib/blocklet/manager/disk/lifecycle-manager.js +26 -0
- package/lib/blocklet/manager/disk/notification-manager.js +343 -0
- package/lib/blocklet/manager/disk/query-manager.js +562 -0
- package/lib/blocklet/manager/disk/settings-manager.js +507 -0
- package/lib/blocklet/manager/disk/start-manager.js +611 -0
- package/lib/blocklet/manager/disk/stop-restart-manager.js +292 -0
- package/lib/blocklet/manager/disk/update-manager.js +153 -0
- package/lib/blocklet/manager/disk.js +669 -5796
- package/lib/blocklet/manager/helper/blue-green-start-blocklet.js +5 -0
- package/lib/blocklet/manager/lock.js +18 -0
- package/lib/event/index.js +28 -24
- package/lib/util/blocklet/app-utils.js +192 -0
- package/lib/util/blocklet/blocklet-loader.js +258 -0
- package/lib/util/blocklet/config-manager.js +232 -0
- package/lib/util/blocklet/did-document.js +240 -0
- package/lib/util/blocklet/environment.js +555 -0
- package/lib/util/blocklet/health-check.js +449 -0
- package/lib/util/blocklet/install-utils.js +365 -0
- package/lib/util/blocklet/logo.js +57 -0
- package/lib/util/blocklet/meta-utils.js +269 -0
- package/lib/util/blocklet/port-manager.js +141 -0
- package/lib/util/blocklet/process-manager.js +504 -0
- package/lib/util/blocklet/runtime-info.js +105 -0
- package/lib/util/blocklet/validation.js +418 -0
- package/lib/util/blocklet.js +98 -3066
- package/lib/util/wallet-app-notification.js +40 -0
- package/package.json +22 -22
|
@@ -0,0 +1,186 @@
|
|
|
1
|
+
const dayjs = require('@abtnode/util/lib/dayjs');
|
|
2
|
+
const logger = require('@abtnode/logger')('@abtnode/core:api:team:org-resource');
|
|
3
|
+
const { NOTIFICATION_SEND_CHANNEL } = require('@abtnode/constant');
|
|
4
|
+
const { getBlockletAppIdList } = require('@blocklet/meta/lib/util');
|
|
5
|
+
|
|
6
|
+
const { getBlocklet } = require('../../util/blocklet');
|
|
7
|
+
const { checkPushChannelAvailable, getNotificationPushState } = require('../../util/notification');
|
|
8
|
+
|
|
9
|
+
/**
|
|
10
|
+
* Get org resource
|
|
11
|
+
* @param {Object} api - TeamAPI instance
|
|
12
|
+
* @param {Object} params
|
|
13
|
+
* @param {string} params.teamDid - Team DID
|
|
14
|
+
* @param {string} params.orgId - Org ID
|
|
15
|
+
* @param {string} params.resourceId - Resource ID
|
|
16
|
+
* @param {Object} context
|
|
17
|
+
* @returns {Promise<Object>}
|
|
18
|
+
*/
|
|
19
|
+
async function getOrgResource(api, { teamDid, orgId, resourceId }, context) {
|
|
20
|
+
try {
|
|
21
|
+
const state = await api.getOrgState(teamDid);
|
|
22
|
+
return state.getOrgResource({ orgId, resourceId }, context);
|
|
23
|
+
} catch (err) {
|
|
24
|
+
logger.error('Get org resource failed', { err, teamDid, orgId, resourceId });
|
|
25
|
+
throw err;
|
|
26
|
+
}
|
|
27
|
+
}
|
|
28
|
+
|
|
29
|
+
/**
|
|
30
|
+
* Add org resource
|
|
31
|
+
* @param {Object} api - TeamAPI instance
|
|
32
|
+
* @param {Object} params
|
|
33
|
+
* @param {string} params.teamDid - Team DID
|
|
34
|
+
* @param {string} params.orgId - Org ID
|
|
35
|
+
* @param {Array} params.resourceIds - Resource IDs
|
|
36
|
+
* @param {string} params.type - Type
|
|
37
|
+
* @param {Object} params.metadata - Metadata
|
|
38
|
+
* @param {Object} context
|
|
39
|
+
* @returns {Promise<Object>}
|
|
40
|
+
*/
|
|
41
|
+
async function addOrgResource(api, { teamDid, orgId, resourceIds, type, metadata }, context) {
|
|
42
|
+
try {
|
|
43
|
+
const state = await api.getOrgState(teamDid);
|
|
44
|
+
return state.addOrgResource({ orgId, resourceIds, type, metadata }, context);
|
|
45
|
+
} catch (err) {
|
|
46
|
+
logger.error('Add org resource failed', { err, teamDid, orgId, resourceIds, type, metadata });
|
|
47
|
+
throw err;
|
|
48
|
+
}
|
|
49
|
+
}
|
|
50
|
+
|
|
51
|
+
/**
|
|
52
|
+
* Remove org resource
|
|
53
|
+
* @param {Object} api - TeamAPI instance
|
|
54
|
+
* @param {Object} params
|
|
55
|
+
* @param {string} params.teamDid - Team DID
|
|
56
|
+
* @param {string} params.orgId - Org ID
|
|
57
|
+
* @param {Array} params.resourceIds - Resource IDs
|
|
58
|
+
* @param {Object} context
|
|
59
|
+
* @returns {Promise<Object>}
|
|
60
|
+
*/
|
|
61
|
+
async function removeOrgResource(api, { teamDid, orgId, resourceIds }, context) {
|
|
62
|
+
try {
|
|
63
|
+
const state = await api.getOrgState(teamDid);
|
|
64
|
+
return state.removeOrgResource({ orgId, resourceIds }, context);
|
|
65
|
+
} catch (err) {
|
|
66
|
+
logger.error('Remove org resource failed', { err, teamDid, orgId, resourceIds });
|
|
67
|
+
throw err;
|
|
68
|
+
}
|
|
69
|
+
}
|
|
70
|
+
|
|
71
|
+
/**
|
|
72
|
+
* Migrate org resource
|
|
73
|
+
* @param {Object} api - TeamAPI instance
|
|
74
|
+
* @param {Object} params
|
|
75
|
+
* @param {string} params.teamDid - Team DID
|
|
76
|
+
* @param {string} params.from - From org ID
|
|
77
|
+
* @param {string} params.to - To org ID
|
|
78
|
+
* @param {Array} params.resourceIds - Resource IDs
|
|
79
|
+
* @param {Object} context
|
|
80
|
+
* @returns {Promise<Object>}
|
|
81
|
+
*/
|
|
82
|
+
async function migrateOrgResource(api, { teamDid, from, to, resourceIds }, context) {
|
|
83
|
+
try {
|
|
84
|
+
const state = await api.getOrgState(teamDid);
|
|
85
|
+
return state.migrateOrgResource({ from, to, resourceIds }, context);
|
|
86
|
+
} catch (err) {
|
|
87
|
+
logger.error('Migrate org resource failed', { err, teamDid, from, to, resourceIds });
|
|
88
|
+
throw err;
|
|
89
|
+
}
|
|
90
|
+
}
|
|
91
|
+
|
|
92
|
+
/**
|
|
93
|
+
* Get notification stats
|
|
94
|
+
* @param {Object} api - TeamAPI instance
|
|
95
|
+
* @param {Object} params
|
|
96
|
+
* @param {string} params.teamDid - Team DID
|
|
97
|
+
* @param {string} params.since - Since time (e.g., '1h')
|
|
98
|
+
* @returns {Promise<Object>}
|
|
99
|
+
*/
|
|
100
|
+
async function getNotificationStats(api, { teamDid, since = '1h' }) {
|
|
101
|
+
let startTime = dayjs().subtract(1, 'hours').toDate();
|
|
102
|
+
|
|
103
|
+
if (since && typeof since === 'string') {
|
|
104
|
+
const sinceMatch = since.match(/^(\d+)h$/);
|
|
105
|
+
if (sinceMatch) {
|
|
106
|
+
let hours = parseInt(sinceMatch[1], 10);
|
|
107
|
+
if (hours < 1 || hours > 24) {
|
|
108
|
+
hours = Math.min(Math.max(hours, 1), 24);
|
|
109
|
+
}
|
|
110
|
+
startTime = dayjs().subtract(hours, 'hours').toDate();
|
|
111
|
+
}
|
|
112
|
+
}
|
|
113
|
+
|
|
114
|
+
try {
|
|
115
|
+
const state = await api.getNotificationState(teamDid);
|
|
116
|
+
const isServer = api.teamManager.isNodeTeam(teamDid);
|
|
117
|
+
const blocklet = isServer ? {} : await getBlocklet({ did: teamDid, states: api.states, dataDirs: api.dataDirs });
|
|
118
|
+
const channelsAvailable = checkPushChannelAvailable(blocklet, isServer);
|
|
119
|
+
const results = await state.getNotificationsBySince({ since });
|
|
120
|
+
|
|
121
|
+
if (results.length === 0) {
|
|
122
|
+
return {
|
|
123
|
+
healthy: true,
|
|
124
|
+
message: `There have been no push records since ${startTime}. Please choose another time range`,
|
|
125
|
+
since: startTime,
|
|
126
|
+
channels: channelsAvailable,
|
|
127
|
+
};
|
|
128
|
+
}
|
|
129
|
+
|
|
130
|
+
const pushState = getNotificationPushState(results, channelsAvailable, isServer);
|
|
131
|
+
|
|
132
|
+
let teamDids = [teamDid];
|
|
133
|
+
if (isServer) {
|
|
134
|
+
const nodeInfo = await api.node.read();
|
|
135
|
+
teamDids = [nodeInfo.did];
|
|
136
|
+
} else {
|
|
137
|
+
teamDids = getBlockletAppIdList(blocklet);
|
|
138
|
+
}
|
|
139
|
+
|
|
140
|
+
const pendingResult = await api.states.job.getPendingNotifications({
|
|
141
|
+
teamDids,
|
|
142
|
+
isServer,
|
|
143
|
+
channels: Object.keys(channelsAvailable),
|
|
144
|
+
createdAt: startTime,
|
|
145
|
+
});
|
|
146
|
+
|
|
147
|
+
// pushState 的 key 与 pendingResult 的 key 映射关系
|
|
148
|
+
const channelKeyMap = {
|
|
149
|
+
pushKit: NOTIFICATION_SEND_CHANNEL.PUSH,
|
|
150
|
+
wallet: NOTIFICATION_SEND_CHANNEL.WALLET,
|
|
151
|
+
email: NOTIFICATION_SEND_CHANNEL.EMAIL,
|
|
152
|
+
webhook: NOTIFICATION_SEND_CHANNEL.WEBHOOK,
|
|
153
|
+
};
|
|
154
|
+
|
|
155
|
+
// 合并 pending 数量到对应的 channel
|
|
156
|
+
const channels = Object.entries(pushState).reduce((acc, [key, value]) => {
|
|
157
|
+
const pendingKey = channelKeyMap[key] || key;
|
|
158
|
+
acc[key] = {
|
|
159
|
+
...value,
|
|
160
|
+
pending: pendingResult[pendingKey] || 0,
|
|
161
|
+
};
|
|
162
|
+
return acc;
|
|
163
|
+
}, {});
|
|
164
|
+
|
|
165
|
+
return {
|
|
166
|
+
healthy: true,
|
|
167
|
+
since: startTime,
|
|
168
|
+
channels,
|
|
169
|
+
};
|
|
170
|
+
} catch (err) {
|
|
171
|
+
logger.error('Get notification service health failed', err, { teamDid });
|
|
172
|
+
return {
|
|
173
|
+
healthy: false,
|
|
174
|
+
error: err.message,
|
|
175
|
+
since: startTime,
|
|
176
|
+
};
|
|
177
|
+
}
|
|
178
|
+
}
|
|
179
|
+
|
|
180
|
+
module.exports = {
|
|
181
|
+
getOrgResource,
|
|
182
|
+
addOrgResource,
|
|
183
|
+
removeOrgResource,
|
|
184
|
+
migrateOrgResource,
|
|
185
|
+
getNotificationStats,
|
|
186
|
+
};
|