@abtnode/blocklet-services 1.17.3-beta-20251121-135300-8e451e6e → 1.17.3-beta-20251123-232619-53258789
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/api/libs/email.js +3 -2
- package/api/libs/push-kit/index.js +3 -4
- package/api/services/notification/queue.js +47 -40
- package/api/socket/channel/did.js +14 -9
- package/package.json +23 -23
package/api/libs/email.js
CHANGED
|
@@ -43,14 +43,15 @@ async function sendEmail(
|
|
|
43
43
|
|
|
44
44
|
const blocklet = await node.getBlocklet({ did: teamDid, useCache: true });
|
|
45
45
|
if (!blocklet) {
|
|
46
|
-
logger.warn(`Failed to get blocklet: ${teamDid}`);
|
|
47
46
|
throw new Error(`Failed to get blocklet: ${teamDid}`);
|
|
48
47
|
}
|
|
49
48
|
|
|
50
49
|
const provider = getEmailServiceProvider(blocklet);
|
|
51
50
|
logger.debug('service.sendEmail', { teamDid, provider, raw, launcher });
|
|
52
51
|
if (!provider || (provider === 'launcher' && !launcher)) {
|
|
53
|
-
|
|
52
|
+
const error = new Error('Email Service is not available.');
|
|
53
|
+
error.logLevel = 'debug';
|
|
54
|
+
throw error;
|
|
54
55
|
}
|
|
55
56
|
|
|
56
57
|
// eslint-disable-next-line no-param-reassign
|
|
@@ -10,16 +10,15 @@ const logger = require('../logger')('blocklet-services:notification');
|
|
|
10
10
|
async function sendPush(receiver, notification, { node, teamDid }) {
|
|
11
11
|
const blocklet = await node.getBlocklet({ did: teamDid, useCache: true });
|
|
12
12
|
if (!blocklet) {
|
|
13
|
-
logger.warn(`Failed to get blocklet: ${teamDid}`);
|
|
14
13
|
throw new Error(`Failed to get blocklet: ${teamDid}`);
|
|
15
14
|
}
|
|
16
15
|
|
|
17
16
|
const config = blocklet.settings?.notification?.pushKit || {};
|
|
18
17
|
|
|
19
18
|
if (!config.enabled || !config.endpoint) {
|
|
20
|
-
|
|
21
|
-
|
|
22
|
-
throw
|
|
19
|
+
const error = new Error(`Push Kit Service is not Enabled, teamDid: ${teamDid}`);
|
|
20
|
+
error.logLevel = 'debug';
|
|
21
|
+
throw error;
|
|
23
22
|
}
|
|
24
23
|
|
|
25
24
|
const pushKitConfig = {
|
|
@@ -22,7 +22,7 @@ const { updateNotificationSendStatus } = require('../../socket/channel/did');
|
|
|
22
22
|
const eventHub =
|
|
23
23
|
process.env.NODE_ENV === 'test' ? require('@arcblock/event-hub/single') : require('@arcblock/event-hub');
|
|
24
24
|
|
|
25
|
-
const logger = require('../../libs/logger')('notification');
|
|
25
|
+
const logger = require('../../libs/logger')('blocklet-services:notification-queue');
|
|
26
26
|
|
|
27
27
|
/**
|
|
28
28
|
*
|
|
@@ -83,10 +83,9 @@ const init = ({ node, notificationService }) => {
|
|
|
83
83
|
},
|
|
84
84
|
async (job) => {
|
|
85
85
|
try {
|
|
86
|
-
const { receiver, notification, sender, options } = job;
|
|
86
|
+
const { receiver, notification, sender, options, source } = job;
|
|
87
87
|
|
|
88
88
|
if (!receiver) {
|
|
89
|
-
logger.error('Invalid receiver', { did: receiver });
|
|
90
89
|
throw new Error('Invalid receiver');
|
|
91
90
|
}
|
|
92
91
|
|
|
@@ -96,9 +95,10 @@ const init = ({ node, notificationService }) => {
|
|
|
96
95
|
notification,
|
|
97
96
|
options,
|
|
98
97
|
pushOnly: job.pushOnly,
|
|
98
|
+
source,
|
|
99
99
|
});
|
|
100
100
|
} catch (error) {
|
|
101
|
-
logger.
|
|
101
|
+
logger.error('Failed to send to app', { notificationId: job.notification.id, receiver: job.receiver, error });
|
|
102
102
|
}
|
|
103
103
|
}
|
|
104
104
|
);
|
|
@@ -111,7 +111,6 @@ const init = ({ node, notificationService }) => {
|
|
|
111
111
|
const { notification, receiver, sender } = job;
|
|
112
112
|
|
|
113
113
|
if (!receiver) {
|
|
114
|
-
logger.error('Invalid receiver', { did: receiver });
|
|
115
114
|
throw new Error('Invalid receiver');
|
|
116
115
|
}
|
|
117
116
|
|
|
@@ -122,7 +121,11 @@ const init = ({ node, notificationService }) => {
|
|
|
122
121
|
pushOnly: job.pushOnly,
|
|
123
122
|
});
|
|
124
123
|
} catch (error) {
|
|
125
|
-
|
|
124
|
+
if (error.logLevel === 'debug') {
|
|
125
|
+
logger.debug('Failed to send to push', { notificationId: job.notification.id, receiver: job.receiver, error });
|
|
126
|
+
} else {
|
|
127
|
+
logger.error('Failed to send to push', { notificationId: job.notification.id, receiver: job.receiver, error });
|
|
128
|
+
}
|
|
126
129
|
}
|
|
127
130
|
});
|
|
128
131
|
|
|
@@ -142,14 +145,10 @@ const init = ({ node, notificationService }) => {
|
|
|
142
145
|
try {
|
|
143
146
|
const { input, email } = job;
|
|
144
147
|
if (!input) {
|
|
145
|
-
logger.error('Job input is missing or invalid', { notificationId: job.notificationId });
|
|
146
148
|
throw new Error('Job input is missing or invalid');
|
|
147
149
|
}
|
|
148
150
|
|
|
149
151
|
if (!email) {
|
|
150
|
-
logger.error('Email address is missing. Unable to send email notification', {
|
|
151
|
-
notificationId: job.notificationId,
|
|
152
|
-
});
|
|
153
152
|
throw new Error('Email address is missing. Unable to send email notification');
|
|
154
153
|
}
|
|
155
154
|
|
|
@@ -206,7 +205,21 @@ const init = ({ node, notificationService }) => {
|
|
|
206
205
|
notificationId: job.notificationId,
|
|
207
206
|
});
|
|
208
207
|
} catch (error) {
|
|
209
|
-
|
|
208
|
+
if (error.logLevel === 'debug') {
|
|
209
|
+
logger.debug('Failed to send to email', {
|
|
210
|
+
notificationId: job.notificationId,
|
|
211
|
+
receivers: job.input.receivers.join(','),
|
|
212
|
+
email: job.email,
|
|
213
|
+
error,
|
|
214
|
+
});
|
|
215
|
+
} else {
|
|
216
|
+
logger.error('Failed to send to email', {
|
|
217
|
+
notificationId: job.notificationId,
|
|
218
|
+
receivers: job.input.receivers.join(','),
|
|
219
|
+
email: job.email,
|
|
220
|
+
error,
|
|
221
|
+
});
|
|
222
|
+
}
|
|
210
223
|
}
|
|
211
224
|
}
|
|
212
225
|
);
|
|
@@ -227,19 +240,16 @@ const init = ({ node, notificationService }) => {
|
|
|
227
240
|
try {
|
|
228
241
|
const { input } = job;
|
|
229
242
|
if (!input) {
|
|
230
|
-
logger.error('Invalid job', { url: job.url });
|
|
231
243
|
throw new Error('Invalid job');
|
|
232
244
|
}
|
|
233
245
|
|
|
234
246
|
const { notification, webhook, sender, receivers = [] } = input;
|
|
235
247
|
|
|
236
248
|
if (!receivers.length) {
|
|
237
|
-
logger.error('Invalid receiver', { dids: receivers });
|
|
238
249
|
throw new Error('Invalid receiver');
|
|
239
250
|
}
|
|
240
251
|
|
|
241
252
|
if (!webhook || !webhook.url) {
|
|
242
|
-
logger.error('Invalid webhook', { webhook });
|
|
243
253
|
throw new Error('Invalid webhook');
|
|
244
254
|
}
|
|
245
255
|
|
|
@@ -264,7 +274,12 @@ const init = ({ node, notificationService }) => {
|
|
|
264
274
|
notificationId: job.notificationId,
|
|
265
275
|
});
|
|
266
276
|
} catch (error) {
|
|
267
|
-
logger.
|
|
277
|
+
logger.error('Failed to send to webhook', {
|
|
278
|
+
url: job?.webhook?.url,
|
|
279
|
+
notificationId: job.notificationId,
|
|
280
|
+
receivers: job.input.receivers.join(','),
|
|
281
|
+
error,
|
|
282
|
+
});
|
|
268
283
|
}
|
|
269
284
|
}
|
|
270
285
|
);
|
|
@@ -498,7 +513,7 @@ const init = ({ node, notificationService }) => {
|
|
|
498
513
|
};
|
|
499
514
|
|
|
500
515
|
const insertToWalletPushQueue = (props, nodeInfo, isResend) => {
|
|
501
|
-
const { channels, notification, sender, userInfo, teamDid, options = {} } = props;
|
|
516
|
+
const { channels, notification, sender, userInfo, teamDid, options = {}, source } = props;
|
|
502
517
|
|
|
503
518
|
const receiverDid = userInfo.did;
|
|
504
519
|
|
|
@@ -521,6 +536,7 @@ const init = ({ node, notificationService }) => {
|
|
|
521
536
|
receiver: receiverDid,
|
|
522
537
|
isResend,
|
|
523
538
|
pushOnly: props.pushOnly && !isResend,
|
|
539
|
+
source,
|
|
524
540
|
});
|
|
525
541
|
} else {
|
|
526
542
|
// 如果是重发的消息,只需要更新推送状态,不需要更新 channel状态
|
|
@@ -587,10 +603,14 @@ const init = ({ node, notificationService }) => {
|
|
|
587
603
|
const queue = createNotificationQueue('notification-receivers', {}, async (job) => {
|
|
588
604
|
const { teamDid, channels, receiver, sender, notification, nodeInfo, userInfo, ...rest } = job;
|
|
589
605
|
|
|
606
|
+
logger.info('notification start insert to queue', {
|
|
607
|
+
teamDid,
|
|
608
|
+
notificationId: notification.id,
|
|
609
|
+
receiver,
|
|
610
|
+
});
|
|
590
611
|
try {
|
|
591
612
|
if (!userInfo) {
|
|
592
|
-
|
|
593
|
-
throw new Error('Invalid receiver user');
|
|
613
|
+
throw new Error(`Invalid receiver user: ${receiver}`);
|
|
594
614
|
}
|
|
595
615
|
|
|
596
616
|
// FIXME: @liushuang: notification.id.startsWith('NOTIF-') HACK 的处理方式,是一个兜底行为。
|
|
@@ -669,7 +689,7 @@ const init = ({ node, notificationService }) => {
|
|
|
669
689
|
logger.error('Failed to insert to webhook push queue', { error });
|
|
670
690
|
}
|
|
671
691
|
} catch (error) {
|
|
672
|
-
logger.error('Failed to create notification receiver', { error });
|
|
692
|
+
logger.error('Failed to create notification receiver', { error, notificationId: notification.id });
|
|
673
693
|
}
|
|
674
694
|
});
|
|
675
695
|
|
|
@@ -677,33 +697,21 @@ const init = ({ node, notificationService }) => {
|
|
|
677
697
|
eventHub.on(EVENTS.NOTIFICATION_CREATE_QUEUED, async (data) => {
|
|
678
698
|
// Only first worker process handle blocklet event
|
|
679
699
|
try {
|
|
680
|
-
logger.info('notification start insert to queue
|
|
700
|
+
logger.info('notification start insert to queue:', {
|
|
681
701
|
teamDid: data?.teamDid,
|
|
682
702
|
notificationId: data?.notification?.id,
|
|
683
703
|
receivers: data?.receivers?.join(','),
|
|
684
704
|
});
|
|
685
705
|
if (isInstanceWorker()) {
|
|
686
|
-
logger.warn('notification is instance worker, skip insert to queue', {
|
|
687
|
-
teamDid: data?.teamDid,
|
|
688
|
-
notificationId: data?.notification?.id,
|
|
689
|
-
receivers: data?.receivers?.join(','),
|
|
690
|
-
});
|
|
691
706
|
return;
|
|
692
707
|
}
|
|
693
708
|
if (!data.notification) {
|
|
694
|
-
|
|
695
|
-
return;
|
|
709
|
+
throw new Error('Invalid notification: notification is required');
|
|
696
710
|
}
|
|
697
711
|
const nodeInfo = await node.getNodeInfo({ useCache: true });
|
|
698
712
|
|
|
699
713
|
if (nodeInfo.mode !== NODE_MODES.DEBUG) {
|
|
700
|
-
|
|
701
|
-
await validateNotification(data.notification);
|
|
702
|
-
} catch (error) {
|
|
703
|
-
logger.error('Failed to validate notification', { error });
|
|
704
|
-
// 抛出错误,阻止后续执行
|
|
705
|
-
throw error;
|
|
706
|
-
}
|
|
714
|
+
await validateNotification(data.notification);
|
|
707
715
|
}
|
|
708
716
|
|
|
709
717
|
// 按照 receiver 添加到推送队列
|
|
@@ -725,11 +733,6 @@ const init = ({ node, notificationService }) => {
|
|
|
725
733
|
});
|
|
726
734
|
|
|
727
735
|
if (users.length === 0) {
|
|
728
|
-
logger.warn('no users found, skip insert to queue', {
|
|
729
|
-
notificationId: notification?.id,
|
|
730
|
-
receivers: receivers?.join(','),
|
|
731
|
-
teamDid,
|
|
732
|
-
});
|
|
733
736
|
throw new Error('No users found');
|
|
734
737
|
}
|
|
735
738
|
// 如果 notification 没有 id,则生成一个, wallet 要基于这唯一个ID进行处理
|
|
@@ -755,7 +758,11 @@ const init = ({ node, notificationService }) => {
|
|
|
755
758
|
});
|
|
756
759
|
});
|
|
757
760
|
} catch (error) {
|
|
758
|
-
logger.error('Failed to create notification receiver', {
|
|
761
|
+
logger.error('Failed to create notification receiver', {
|
|
762
|
+
error,
|
|
763
|
+
notificationId: data?.notification?.id,
|
|
764
|
+
teamDid: data?.teamDid,
|
|
765
|
+
});
|
|
759
766
|
}
|
|
760
767
|
});
|
|
761
768
|
};
|
|
@@ -13,7 +13,7 @@ const {
|
|
|
13
13
|
const JWT = require('@arcblock/jwt');
|
|
14
14
|
const uniq = require('lodash/uniq');
|
|
15
15
|
|
|
16
|
-
const logger = require('../../libs/logger')('
|
|
16
|
+
const logger = require('../../libs/logger')('blocklet-services:socket-channel:did');
|
|
17
17
|
const { ensureSenderApp, getSenderServer, parseNotification, EVENTS } = require('../util');
|
|
18
18
|
const states = require('../../state');
|
|
19
19
|
const { sendEmail } = require('../../libs/email');
|
|
@@ -162,6 +162,8 @@ const sendToUserDid = async ({ sender, receiver: rawDid, notification, options,
|
|
|
162
162
|
|
|
163
163
|
const notifications = Array.isArray(notification) ? notification : [notification];
|
|
164
164
|
|
|
165
|
+
const isServer = !teamDid || teamDid === nodeInfo.did;
|
|
166
|
+
|
|
165
167
|
try {
|
|
166
168
|
const result = await Promise.all(
|
|
167
169
|
notifications.map((_notification) => {
|
|
@@ -183,7 +185,7 @@ const sendToUserDid = async ({ sender, receiver: rawDid, notification, options,
|
|
|
183
185
|
// 这两个字段用于 socket 通知
|
|
184
186
|
entityType: _notification.entityType || 'blocklet',
|
|
185
187
|
entityId: _notification.entityId || sender.appDid,
|
|
186
|
-
source: _notification.source || 'component',
|
|
188
|
+
source: isServer ? 'system' : _notification.source || 'component',
|
|
187
189
|
channels: CHANNEL_MAP[_notification.type] || channels,
|
|
188
190
|
sender,
|
|
189
191
|
options: { ...rest },
|
|
@@ -210,11 +212,12 @@ const sendToAppDid = async ({
|
|
|
210
212
|
options,
|
|
211
213
|
pushOnly,
|
|
212
214
|
wsServer,
|
|
215
|
+
source,
|
|
213
216
|
}) => {
|
|
214
217
|
if (notification && sender) {
|
|
215
218
|
const { keepForOfflineUser = true, ttl } = options || {};
|
|
216
219
|
const teamDid = sender.appDid;
|
|
217
|
-
const { id
|
|
220
|
+
const { id } = notification;
|
|
218
221
|
if (Array.isArray(receiver)) {
|
|
219
222
|
throw new Error('Invalid receiver: 1 receiver each time');
|
|
220
223
|
}
|
|
@@ -242,7 +245,7 @@ const sendToAppDid = async ({
|
|
|
242
245
|
|
|
243
246
|
if (count <= 0 && keepForOfflineUser && source !== 'system') {
|
|
244
247
|
// 系统发出的消息不进行缓存
|
|
245
|
-
logger.
|
|
248
|
+
logger.debug('Online client was not found', { userDid: receiver });
|
|
246
249
|
await states.message.insert({
|
|
247
250
|
did: receiver,
|
|
248
251
|
event: EVENTS.MESSAGE,
|
|
@@ -393,7 +396,7 @@ const sendToWebhook = async ({ sender, receiver, notification, node, pushOnly })
|
|
|
393
396
|
status: res ? NOTIFICATION_SEND_STATUS.SENT : NOTIFICATION_SEND_STATUS.FAILED,
|
|
394
397
|
failedReason: res ? '' : NOTIFICATION_SEND_FAILED_REASON.CHANNEL_UNAVAILABLE,
|
|
395
398
|
};
|
|
396
|
-
|
|
399
|
+
updateNotificationSendStatus({
|
|
397
400
|
node,
|
|
398
401
|
teamDid,
|
|
399
402
|
notificationId: id,
|
|
@@ -404,14 +407,15 @@ const sendToWebhook = async ({ sender, receiver, notification, node, pushOnly })
|
|
|
404
407
|
}
|
|
405
408
|
return res;
|
|
406
409
|
} catch (error) {
|
|
407
|
-
|
|
410
|
+
// 使用 debug 级别记录详细执行信息,避免与上层业务日志重复
|
|
411
|
+
logger.debug('Webhook send failed', { error, webhook: webhook.url, notificationId: id });
|
|
408
412
|
if (!pushOnly) {
|
|
409
413
|
webhookParams[webhook.url] = {
|
|
410
414
|
...webhookParams[webhook.url],
|
|
411
415
|
status: NOTIFICATION_SEND_STATUS.FAILED,
|
|
412
416
|
failedReason: error.message,
|
|
413
417
|
};
|
|
414
|
-
|
|
418
|
+
updateNotificationSendStatus({
|
|
415
419
|
node,
|
|
416
420
|
teamDid,
|
|
417
421
|
notificationId: id,
|
|
@@ -445,7 +449,7 @@ const sendToMail = async ({ sender, receiver, notification, options, node, pushO
|
|
|
445
449
|
throw new Error('Invalid receiver: empty');
|
|
446
450
|
}
|
|
447
451
|
if (receivers.some((x) => emailSchema.validate(x).error)) {
|
|
448
|
-
throw new Error(
|
|
452
|
+
throw new Error(`Invalid receiver: invalid email: ${receivers.join(', ')}`);
|
|
449
453
|
}
|
|
450
454
|
if (receivers.length > 10) {
|
|
451
455
|
throw new Error('Invalid receiver: too many, should be less than 10');
|
|
@@ -566,7 +570,8 @@ const sendToPush = async ({ sender, receiver, notification, options, node, pushO
|
|
|
566
570
|
return res;
|
|
567
571
|
})
|
|
568
572
|
.catch((err) => {
|
|
569
|
-
|
|
573
|
+
// 使用 debug 级别记录详细执行信息,避免与上层业务日志重复
|
|
574
|
+
logger.debug('PushKit send failed', { error: err, receivers, notificationId: id });
|
|
570
575
|
if (!pushOnly) {
|
|
571
576
|
updateNotificationSendStatus({
|
|
572
577
|
node,
|
package/package.json
CHANGED
|
@@ -3,7 +3,7 @@
|
|
|
3
3
|
"publishConfig": {
|
|
4
4
|
"access": "public"
|
|
5
5
|
},
|
|
6
|
-
"version": "1.17.3-beta-
|
|
6
|
+
"version": "1.17.3-beta-20251123-232619-53258789",
|
|
7
7
|
"description": "Provide unified services for every blocklet",
|
|
8
8
|
"main": "api/index.js",
|
|
9
9
|
"files": [
|
|
@@ -32,17 +32,17 @@
|
|
|
32
32
|
"author": "wangshijun <wangshijun2010@gmail.com> (http://github.com/wangshijun)",
|
|
33
33
|
"license": "Apache-2.0",
|
|
34
34
|
"dependencies": {
|
|
35
|
-
"@abtnode/analytics": "1.17.3-beta-
|
|
36
|
-
"@abtnode/auth": "1.17.3-beta-
|
|
37
|
-
"@abtnode/connect-storage": "1.17.3-beta-
|
|
38
|
-
"@abtnode/constant": "1.17.3-beta-
|
|
39
|
-
"@abtnode/core": "1.17.3-beta-
|
|
40
|
-
"@abtnode/cron": "1.17.3-beta-
|
|
41
|
-
"@abtnode/db-cache": "1.17.3-beta-
|
|
42
|
-
"@abtnode/logger": "1.17.3-beta-
|
|
43
|
-
"@abtnode/models": "1.17.3-beta-
|
|
44
|
-
"@abtnode/router-templates": "1.17.3-beta-
|
|
45
|
-
"@abtnode/util": "1.17.3-beta-
|
|
35
|
+
"@abtnode/analytics": "1.17.3-beta-20251123-232619-53258789",
|
|
36
|
+
"@abtnode/auth": "1.17.3-beta-20251123-232619-53258789",
|
|
37
|
+
"@abtnode/connect-storage": "1.17.3-beta-20251123-232619-53258789",
|
|
38
|
+
"@abtnode/constant": "1.17.3-beta-20251123-232619-53258789",
|
|
39
|
+
"@abtnode/core": "1.17.3-beta-20251123-232619-53258789",
|
|
40
|
+
"@abtnode/cron": "1.17.3-beta-20251123-232619-53258789",
|
|
41
|
+
"@abtnode/db-cache": "1.17.3-beta-20251123-232619-53258789",
|
|
42
|
+
"@abtnode/logger": "1.17.3-beta-20251123-232619-53258789",
|
|
43
|
+
"@abtnode/models": "1.17.3-beta-20251123-232619-53258789",
|
|
44
|
+
"@abtnode/router-templates": "1.17.3-beta-20251123-232619-53258789",
|
|
45
|
+
"@abtnode/util": "1.17.3-beta-20251123-232619-53258789",
|
|
46
46
|
"@arcblock/did": "^1.27.7",
|
|
47
47
|
"@arcblock/did-connect-js": "^1.27.7",
|
|
48
48
|
"@arcblock/did-ext": "^1.27.7",
|
|
@@ -52,18 +52,18 @@
|
|
|
52
52
|
"@arcblock/jwt": "^1.27.7",
|
|
53
53
|
"@arcblock/validator": "^1.27.7",
|
|
54
54
|
"@arcblock/ws": "^1.27.7",
|
|
55
|
-
"@blocklet/constant": "1.17.3-beta-
|
|
55
|
+
"@blocklet/constant": "1.17.3-beta-20251123-232619-53258789",
|
|
56
56
|
"@blocklet/dbhub": "^0.2.9",
|
|
57
|
-
"@blocklet/env": "1.17.3-beta-
|
|
57
|
+
"@blocklet/env": "1.17.3-beta-20251123-232619-53258789",
|
|
58
58
|
"@blocklet/error": "^0.3.3",
|
|
59
59
|
"@blocklet/form-builder": "^0.1.12",
|
|
60
60
|
"@blocklet/form-collector": "^0.1.8",
|
|
61
|
-
"@blocklet/images": "1.17.3-beta-
|
|
62
|
-
"@blocklet/js-sdk": "1.17.3-beta-
|
|
63
|
-
"@blocklet/meta": "1.17.3-beta-
|
|
64
|
-
"@blocklet/rate-limit": "1.17.3-beta-
|
|
65
|
-
"@blocklet/sdk": "1.17.3-beta-
|
|
66
|
-
"@blocklet/server-js": "1.17.3-beta-
|
|
61
|
+
"@blocklet/images": "1.17.3-beta-20251123-232619-53258789",
|
|
62
|
+
"@blocklet/js-sdk": "1.17.3-beta-20251123-232619-53258789",
|
|
63
|
+
"@blocklet/meta": "1.17.3-beta-20251123-232619-53258789",
|
|
64
|
+
"@blocklet/rate-limit": "1.17.3-beta-20251123-232619-53258789",
|
|
65
|
+
"@blocklet/sdk": "1.17.3-beta-20251123-232619-53258789",
|
|
66
|
+
"@blocklet/server-js": "1.17.3-beta-20251123-232619-53258789",
|
|
67
67
|
"@blocklet/theme": "^3.2.6",
|
|
68
68
|
"@blocklet/theme-builder": "0.4.8",
|
|
69
69
|
"@blocklet/uploader-server": "^0.3.11",
|
|
@@ -123,7 +123,7 @@
|
|
|
123
123
|
"whatwg-url": "14.0.0"
|
|
124
124
|
},
|
|
125
125
|
"devDependencies": {
|
|
126
|
-
"@abtnode/ux": "1.17.3-beta-
|
|
126
|
+
"@abtnode/ux": "1.17.3-beta-20251123-232619-53258789",
|
|
127
127
|
"@arcblock/bridge": "^3.2.6",
|
|
128
128
|
"@arcblock/did-connect-react": "^3.2.6",
|
|
129
129
|
"@arcblock/icons": "^3.2.6",
|
|
@@ -133,7 +133,7 @@
|
|
|
133
133
|
"@blocklet/did-space-react": "^1.2.4",
|
|
134
134
|
"@blocklet/launcher-layout": "^3.2.6",
|
|
135
135
|
"@blocklet/payment-react": "^1.22.14",
|
|
136
|
-
"@blocklet/tracker": "1.17.3-beta-
|
|
136
|
+
"@blocklet/tracker": "1.17.3-beta-20251123-232619-53258789",
|
|
137
137
|
"@blocklet/ui-react": "^3.2.6",
|
|
138
138
|
"@blocklet/uploader": "^0.3.11",
|
|
139
139
|
"@emotion/react": "^11.14.0",
|
|
@@ -213,5 +213,5 @@
|
|
|
213
213
|
"url": "https://github.com/ArcBlock/blocklet-server/issues",
|
|
214
214
|
"email": "shijun@arcblock.io"
|
|
215
215
|
},
|
|
216
|
-
"gitHead": "
|
|
216
|
+
"gitHead": "d37497a49c982e82ba60249ed06c1b73f340b893"
|
|
217
217
|
}
|