@abtnode/core 1.16.53-beta-20251013-075536-64fcb94b → 1.16.53-beta-20251014-110009-8220e324
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/blocklet/downloader/blocklet-downloader.js +13 -9
- package/lib/blocklet/manager/helper/blue-green-start-blocklet.js +0 -1
- package/lib/blocklet/migration-dist/migration.cjs +1 -1
- package/lib/blocklet/project/create-pack-release.js +5 -0
- package/lib/blocklet/project/index.js +6 -0
- package/lib/blocklet/webhook/index.js +25 -0
- package/lib/locales/en.js +2 -4
- package/lib/locales/i18n.json +122 -0
- package/lib/states/release.js +1 -0
- package/lib/util/blocklet.js +2 -1
- package/lib/util/docker/is-docker-only-single-instances.js +4 -4
- package/lib/validators/project.js +1 -0
- package/lib/webhook/index.js +9 -1
- package/package.json +27 -27
- package/lib/locales/i18n.db +0 -0
|
@@ -4,6 +4,7 @@ const path = require('path');
|
|
|
4
4
|
const get = require('lodash/get');
|
|
5
5
|
const pick = require('lodash/pick');
|
|
6
6
|
const { toBase58 } = require('@ocap/util');
|
|
7
|
+
const pAll = require('p-all');
|
|
7
8
|
|
|
8
9
|
const defaultLogger = require('@abtnode/logger')('@abtnode/core:blocklet-downloader');
|
|
9
10
|
|
|
@@ -153,16 +154,19 @@ class BlockletDownloader extends EventEmitter {
|
|
|
153
154
|
bundles: downloadList.map((x) => get(x, 'dist.tarball')),
|
|
154
155
|
});
|
|
155
156
|
|
|
156
|
-
await
|
|
157
|
+
await pAll(
|
|
157
158
|
downloadList.map((meta) => {
|
|
158
|
-
|
|
159
|
-
|
|
160
|
-
|
|
161
|
-
|
|
162
|
-
onProgress
|
|
163
|
-
|
|
164
|
-
|
|
165
|
-
|
|
159
|
+
return () => {
|
|
160
|
+
const url = meta.dist.tarball;
|
|
161
|
+
return this.bundleDownloader.download(meta, did, url, {
|
|
162
|
+
...options,
|
|
163
|
+
onProgress: (data) => {
|
|
164
|
+
onProgress({ ...data, component: pick(meta, ['title', 'name', 'did', 'version']) });
|
|
165
|
+
},
|
|
166
|
+
});
|
|
167
|
+
};
|
|
168
|
+
}),
|
|
169
|
+
4
|
|
166
170
|
);
|
|
167
171
|
|
|
168
172
|
const isCancelled = await this.bundleDownloader.isCanceled(did);
|
|
@@ -38954,7 +38954,7 @@ module.exports = require("zlib");
|
|
|
38954
38954
|
/***/ ((module) => {
|
|
38955
38955
|
|
|
38956
38956
|
"use strict";
|
|
38957
|
-
module.exports = /*#__PURE__*/JSON.parse('{"name":"@abtnode/core","publishConfig":{"access":"public"},"version":"1.16.52","description":"","main":"lib/index.js","files":["lib"],"scripts":{"lint":"eslint tests lib --ignore-pattern \'tests/assets/*\'","lint:fix":"eslint --fix tests lib","test":"node tools/jest.js","test:disk":"CI=true npm run test tests/blocklet/manager/disk.spec.js","test:blue":"CI=true npm run test tests/blocklet/manager/disk-blue-green.spec.js","coverage":"npm run test -- --coverage"},"keywords":[],"author":"wangshijun <wangshijun2010@gmail.com> (http://github.com/wangshijun)","license":"Apache-2.0","dependencies":{"@abtnode/analytics":"1.16.52","@abtnode/auth":"1.16.52","@abtnode/certificate-manager":"1.16.52","@abtnode/constant":"1.16.52","@abtnode/cron":"1.16.52","@abtnode/db-cache":"1.16.52","@abtnode/docker-utils":"1.16.52","@abtnode/logger":"1.16.52","@abtnode/models":"1.16.52","@abtnode/queue":"1.16.52","@abtnode/rbac":"1.16.52","@abtnode/router-provider":"1.16.52","@abtnode/static-server":"1.16.52","@abtnode/timemachine":"1.16.52","@abtnode/util":"1.16.52","@aigne/aigne-hub":"^0.10.
|
|
38957
|
+
module.exports = /*#__PURE__*/JSON.parse('{"name":"@abtnode/core","publishConfig":{"access":"public"},"version":"1.16.52","description":"","main":"lib/index.js","files":["lib"],"scripts":{"lint":"eslint tests lib --ignore-pattern \'tests/assets/*\'","lint:fix":"eslint --fix tests lib","test":"node tools/jest.js","test:disk":"CI=true npm run test tests/blocklet/manager/disk.spec.js","test:blue":"CI=true npm run test tests/blocklet/manager/disk-blue-green.spec.js","coverage":"npm run test -- --coverage"},"keywords":[],"author":"wangshijun <wangshijun2010@gmail.com> (http://github.com/wangshijun)","license":"Apache-2.0","dependencies":{"@abtnode/analytics":"1.16.52","@abtnode/auth":"1.16.52","@abtnode/certificate-manager":"1.16.52","@abtnode/constant":"1.16.52","@abtnode/cron":"1.16.52","@abtnode/db-cache":"1.16.52","@abtnode/docker-utils":"1.16.52","@abtnode/logger":"1.16.52","@abtnode/models":"1.16.52","@abtnode/queue":"1.16.52","@abtnode/rbac":"1.16.52","@abtnode/router-provider":"1.16.52","@abtnode/static-server":"1.16.52","@abtnode/timemachine":"1.16.52","@abtnode/util":"1.16.52","@aigne/aigne-hub":"^0.10.1","@arcblock/did":"1.25.6","@arcblock/did-connect-js":"1.25.6","@arcblock/did-ext":"1.25.6","@arcblock/did-motif":"^1.1.14","@arcblock/did-util":"1.25.6","@arcblock/event-hub":"1.25.6","@arcblock/jwt":"1.25.6","@arcblock/pm2-events":"^0.0.5","@arcblock/validator":"1.25.6","@arcblock/vc":"1.25.6","@blocklet/constant":"1.16.52","@blocklet/did-space-js":"^1.1.33","@blocklet/env":"1.16.52","@blocklet/error":"^0.2.5","@blocklet/meta":"1.16.52","@blocklet/resolver":"1.16.52","@blocklet/sdk":"1.16.52","@blocklet/server-js":"1.16.52","@blocklet/store":"1.16.52","@blocklet/theme":"^3.1.49","@fidm/x509":"^1.2.1","@ocap/mcrypto":"1.25.6","@ocap/util":"1.25.6","@ocap/wallet":"1.25.6","@slack/webhook":"^5.0.4","archiver":"^7.0.1","axios":"^1.7.9","axon":"^2.0.3","chalk":"^4.1.2","cross-spawn":"^7.0.3","dayjs":"^1.11.13","deep-diff":"^1.0.2","detect-port":"^1.5.1","envfile":"^7.1.0","escape-string-regexp":"^4.0.0","fast-glob":"^3.3.2","filesize":"^10.1.1","flat":"^5.0.2","fs-extra":"^11.2.0","get-port":"^5.1.1","hasha":"^5.2.2","is-base64":"^1.1.0","is-cidr":"4","is-ip":"3","is-url":"^1.2.4","joi":"17.12.2","joi-extension-semver":"^5.0.0","js-yaml":"^4.1.0","kill-port":"^2.0.1","lodash":"^4.17.21","node-stream-zip":"^1.15.0","p-all":"^3.0.0","p-limit":"^3.1.0","p-map":"^4.0.0","p-retry":"^4.6.2","p-wait-for":"^3.2.0","private-ip":"^2.3.4","rate-limiter-flexible":"^5.0.5","read-last-lines":"^1.8.0","semver":"^7.6.3","sequelize":"^6.35.0","shelljs":"^0.8.5","slugify":"^1.6.6","ssri":"^8.0.1","stream-throttle":"^0.1.3","stream-to-promise":"^3.0.0","systeminformation":"^5.23.3","tail":"^2.2.4","tar":"^6.1.11","transliteration":"^2.3.5","ua-parser-js":"^1.0.2","ufo":"^1.5.3","uuid":"^11.1.0","valid-url":"^1.0.9","which":"^2.0.2","xbytes":"^1.8.0"},"devDependencies":{"expand-tilde":"^2.0.2","express":"^4.18.2","jest":"^29.7.0","unzipper":"^0.10.11"},"gitHead":"e5764f753181ed6a7c615cd4fc6682aacf0cb7cd"}');
|
|
38958
38958
|
|
|
38959
38959
|
/***/ }),
|
|
38960
38960
|
|
|
@@ -38,6 +38,7 @@ const createPackRelease = async ({
|
|
|
38
38
|
blockletRepository,
|
|
39
39
|
blockletVideos,
|
|
40
40
|
blockletDocker,
|
|
41
|
+
blockletSingleton,
|
|
41
42
|
contentType,
|
|
42
43
|
manager,
|
|
43
44
|
status,
|
|
@@ -66,6 +67,7 @@ const createPackRelease = async ({
|
|
|
66
67
|
blockletVideos,
|
|
67
68
|
blockletDocker,
|
|
68
69
|
contentType,
|
|
70
|
+
blockletSingleton,
|
|
69
71
|
};
|
|
70
72
|
|
|
71
73
|
const releaseSchema = createReleaseSchema(status);
|
|
@@ -260,6 +262,9 @@ const createPackRelease = async ({
|
|
|
260
262
|
files: project.blockletScreenshots?.length ? ['screenshots'] : [],
|
|
261
263
|
screenshots: project.blockletScreenshots || [],
|
|
262
264
|
videos: blockletVideos || [],
|
|
265
|
+
capabilities: {
|
|
266
|
+
singleton: !!blockletSingleton,
|
|
267
|
+
},
|
|
263
268
|
};
|
|
264
269
|
|
|
265
270
|
if (blockletDocker?.dockerImage && dockerYml) {
|
|
@@ -195,6 +195,7 @@ const createRelease = async ({
|
|
|
195
195
|
blockletComponents,
|
|
196
196
|
blockletResourceType,
|
|
197
197
|
blockletDocker,
|
|
198
|
+
blockletSingleton,
|
|
198
199
|
contentType,
|
|
199
200
|
note,
|
|
200
201
|
manager,
|
|
@@ -227,6 +228,7 @@ const createRelease = async ({
|
|
|
227
228
|
uploadedResource,
|
|
228
229
|
blockletResourceType,
|
|
229
230
|
blockletDocker,
|
|
231
|
+
blockletSingleton,
|
|
230
232
|
contentType,
|
|
231
233
|
note,
|
|
232
234
|
};
|
|
@@ -263,6 +265,7 @@ const createRelease = async ({
|
|
|
263
265
|
blockletComponents,
|
|
264
266
|
blockletResourceType,
|
|
265
267
|
blockletDocker,
|
|
268
|
+
blockletSingleton,
|
|
266
269
|
contentType,
|
|
267
270
|
note,
|
|
268
271
|
manager,
|
|
@@ -412,6 +415,9 @@ const createRelease = async ({
|
|
|
412
415
|
files: project.blockletScreenshots?.length ? ['screenshots'] : [],
|
|
413
416
|
screenshots: project.blockletScreenshots || [],
|
|
414
417
|
videos: blockletVideos || [],
|
|
418
|
+
capabilities: {
|
|
419
|
+
singleton: !!blockletSingleton,
|
|
420
|
+
},
|
|
415
421
|
};
|
|
416
422
|
|
|
417
423
|
// create resource
|
|
@@ -3,6 +3,7 @@ const pickBy = require('lodash/pickBy');
|
|
|
3
3
|
const get = require('lodash/get');
|
|
4
4
|
const { EventEmitter } = require('events');
|
|
5
5
|
const { EVENTS } = require('@abtnode/constant');
|
|
6
|
+
const { isAllowedReferer, isAllowedURL } = require('@abtnode/util/lib/ssrf-protector');
|
|
6
7
|
const { API_VERSION, STATUS } = require('./util');
|
|
7
8
|
const endpointQueueInit = require('./queues');
|
|
8
9
|
|
|
@@ -72,6 +73,17 @@ class WebhooksAPI extends EventEmitter {
|
|
|
72
73
|
throw new Error('Missing required parameters');
|
|
73
74
|
}
|
|
74
75
|
|
|
76
|
+
if (context?.referer) {
|
|
77
|
+
const { host = '' } = context || {};
|
|
78
|
+
if (!isAllowedReferer(context.referer, host)) {
|
|
79
|
+
throw new Error('Invalid request');
|
|
80
|
+
}
|
|
81
|
+
}
|
|
82
|
+
|
|
83
|
+
if (!(await isAllowedURL(input.url))) {
|
|
84
|
+
throw new Error('Invalid parameter: internal');
|
|
85
|
+
}
|
|
86
|
+
|
|
75
87
|
const { webhookEndpointState } = await this.teamManager.getWebhookState(teamDid);
|
|
76
88
|
const raw = pick(input, ALLOWED_UPDATE_FIELDS);
|
|
77
89
|
|
|
@@ -117,6 +129,19 @@ class WebhooksAPI extends EventEmitter {
|
|
|
117
129
|
const updates = pick(data, ALLOWED_UPDATE_FIELDS);
|
|
118
130
|
updates.updatedBy = getUserDid(context);
|
|
119
131
|
|
|
132
|
+
if (updates.url) {
|
|
133
|
+
if (context?.referer) {
|
|
134
|
+
const { host = '' } = context || {};
|
|
135
|
+
if (!isAllowedReferer(context.referer, host)) {
|
|
136
|
+
throw new Error('Invalid request');
|
|
137
|
+
}
|
|
138
|
+
}
|
|
139
|
+
|
|
140
|
+
if (!(await isAllowedURL(data.url))) {
|
|
141
|
+
throw new Error('Invalid parameter: internal');
|
|
142
|
+
}
|
|
143
|
+
}
|
|
144
|
+
|
|
120
145
|
const result = await webhookEndpointState.updateWebhook(id, updates);
|
|
121
146
|
return result;
|
|
122
147
|
}
|
package/lib/locales/en.js
CHANGED
|
@@ -7,12 +7,10 @@ module.exports = {
|
|
|
7
7
|
space: {
|
|
8
8
|
error: {
|
|
9
9
|
title: 'Backup to DID Spaces Failed',
|
|
10
|
-
forbidden:
|
|
11
|
-
'You don\'t have permission to back up. Try restoring the license on DID Spaces or reconnect.',
|
|
10
|
+
forbidden: "You don't have permission to back up. Try restoring the license on DID Spaces or reconnect.",
|
|
12
11
|
},
|
|
13
12
|
isFull: 'Your DID Spaces storage is full. Expand storage and try again.',
|
|
14
|
-
lackOfSpace:
|
|
15
|
-
'Not enough storage space. Expand storage and try again.',
|
|
13
|
+
lackOfSpace: 'Not enough storage space. Expand storage and try again.',
|
|
16
14
|
unableEnableAutoBackup: 'Connect to DID Spaces before enabling auto backup.',
|
|
17
15
|
},
|
|
18
16
|
},
|
|
@@ -0,0 +1,122 @@
|
|
|
1
|
+
{
|
|
2
|
+
"backup.space.error.title": {
|
|
3
|
+
"en": "Backup to DID Spaces Failed",
|
|
4
|
+
"value": {
|
|
5
|
+
"en": "Backup to DID Spaces Failed",
|
|
6
|
+
"es": "Copia de seguridad a DID Spaces falló",
|
|
7
|
+
"zh": "备份到 DID Spaces 失败",
|
|
8
|
+
"zh-TW": "備份到 DID Spaces 失敗",
|
|
9
|
+
"ja": "DID Spaces へのバックアップに失敗しました",
|
|
10
|
+
"ko": "DID Spaces 백업에 실패했습니다",
|
|
11
|
+
"de": "Backup nach DID Spaces fehlgeschlagen",
|
|
12
|
+
"hi": "DID Spaces पर बैकअप असफल",
|
|
13
|
+
"fr": "La sauvegarde vers DID Spaces a échoué",
|
|
14
|
+
"ar": "فشل النسخ الاحتياطي إلى DID Spaces",
|
|
15
|
+
"ru": "Резервное копирование в DID Spaces не выполнено",
|
|
16
|
+
"pt": "Backup para DID Spaces falhou",
|
|
17
|
+
"id": "Backup ke DID Spaces gagal",
|
|
18
|
+
"vi": "Sao lưu đến DID Spaces thất bại",
|
|
19
|
+
"th": "สำรองข้อมูลไปยัง DID Spaces ล้มเหลว"
|
|
20
|
+
}
|
|
21
|
+
},
|
|
22
|
+
"backup.space.error.forbidden": {
|
|
23
|
+
"en": "You don't have permission to back up. Try restoring the license on DID Spaces or reconnect.",
|
|
24
|
+
"value": {
|
|
25
|
+
"en": "You don't have permission to back up. Try restoring the license on DID Spaces or reconnect.",
|
|
26
|
+
"es": "No tienes permiso para hacer una copia de seguridad. Intenta restaurar la licencia en DID Spaces o volver a conectarte.",
|
|
27
|
+
"zh": "你没有权限备份。请在 DID Spaces 上尝试恢复授权或重新连接。",
|
|
28
|
+
"zh-TW": "你沒有權限備份。請在 DID Spaces 上嘗試恢復授權或重新連接。",
|
|
29
|
+
"ja": "バックアップする権限がありません。DID Spaces で ライセンスを復元するか、再接続してください。",
|
|
30
|
+
"ko": "백업 권한이 없습니다. DID Spaces 에서 라이선스를 복원하거나 다시 연결해 보십시오.",
|
|
31
|
+
"de": "Sie haben keine Berechtigung, eine Sicherung durchzuführen. Versuchen Sie, die Lizenz auf DID Spaces wiederherzustellen oder sich erneut zu verbinden.",
|
|
32
|
+
"hi": "आपके पास बैकअप बनाने की अनुमति नहीं है। DID Spaces पर लाइसेंस को पुनर्स्थापित करने की कोशिश करें या फिर से कनेक्ट करें।",
|
|
33
|
+
"fr": "Vous n'avez pas l'autorisation d'effectuer une sauvegarde. Essayez de restaurer la licence sur DID Spaces ou de vous reconnecter.",
|
|
34
|
+
"ar": "ليس لديك إذن لإجراء النسخ الاحتياطي. حاول استعادة الترخيص على DID Spaces أو أعد الاتصال.",
|
|
35
|
+
"ru": "У вас нет разрешения на создание резервной копии. Попробуйте восстановить лицензию на DID Spaces или переподключиться.",
|
|
36
|
+
"pt": "Você não tem permissão para fazer backup. Tente restaurar a licença em DID Spaces ou reconectar.",
|
|
37
|
+
"id": "Anda tidak memiliki izin untuk mencadangkan. Coba pulihkan lisensi di DID Spaces atau sambungkan kembali.",
|
|
38
|
+
"vi": "Bạn không có quyền sao lưu. Hãy thử khôi phục giấy phép trên DID Spaces hoặc kết nối lại.",
|
|
39
|
+
"th": "คุณไม่มีสิทธิ์ในการสำรองข้อมูล ลองกู้ใบอนุญาตบน DID Spaces หรือเชื่อมต่อใหม่อีกครั้ง."
|
|
40
|
+
}
|
|
41
|
+
},
|
|
42
|
+
"registry.getListError": {
|
|
43
|
+
"en": "Failed to get blocklet list from registry \"{registryUrl}\"",
|
|
44
|
+
"value": {
|
|
45
|
+
"en": "Failed to get blocklet list from registry \"{registryUrl}\"",
|
|
46
|
+
"es": "No se pudo obtener la lista de blocklet desde el registro “{registryUrl}”",
|
|
47
|
+
"zh": "无法从注册表获取 blocklet 列表“{registryUrl}”",
|
|
48
|
+
"zh-TW": "無法從註冊表取得 blocklet 列表“{registryUrl}”",
|
|
49
|
+
"ja": "レジストリから blocklet リストの取得に失敗しました「{registryUrl}」",
|
|
50
|
+
"ko": "레지스트리에서 blocklet 목록을 가져오지 못했습니다“{registryUrl}”",
|
|
51
|
+
"de": "Fehler beim Abrufen der blocklet-Liste aus dem Registry \"{registryUrl}\"",
|
|
52
|
+
"hi": "रेजिस्ट्री से blocklet सूची प्राप्त करने में विफल \"{registryUrl}\"",
|
|
53
|
+
"fr": "Échec de l'obtention de la liste de blocklet à partir du registre \"{registryUrl}\"",
|
|
54
|
+
"ar": "فشل في الحصول على قائمة blocklet من السجل \"{registryUrl}\"",
|
|
55
|
+
"ru": "Не удалось получить список blocklet из реестра \"{registryUrl}\"",
|
|
56
|
+
"pt": "Falhou ao obter a lista de blocklet do registro \"{registryUrl}\"",
|
|
57
|
+
"id": "Gagal mendapatkan daftar blocklet dari registry \"{registryUrl}\"",
|
|
58
|
+
"vi": "Không thể lấy danh sách blocklet từ registry \"{registryUrl}\"",
|
|
59
|
+
"th": "ไม่สามารถดึงรายการ blocklet จาก registry \"{registryUrl}\""
|
|
60
|
+
}
|
|
61
|
+
},
|
|
62
|
+
"backup.space.lackOfSpace": {
|
|
63
|
+
"en": "Not enough storage space. Expand storage and try again.",
|
|
64
|
+
"value": {
|
|
65
|
+
"en": "Not enough storage space. Expand storage and try again.",
|
|
66
|
+
"es": "No hay suficiente espacio de almacenamiento. Amplíe el almacenamiento y vuelva a intentarlo.",
|
|
67
|
+
"zh": "存储空间不足。请扩展存储后再试一次。",
|
|
68
|
+
"zh-TW": "儲存空間不足。請擴充儲存後再試一次。",
|
|
69
|
+
"ja": "ストレージの容量が不足しています。容量を拡張して、もう一度お試しください。",
|
|
70
|
+
"ko": "저장 공간이 부족합니다. 저장 공간을 확장하고 다시 시도하세요.",
|
|
71
|
+
"de": "Nicht genug Speicherplatz. Speicherplatz erweitern und erneut versuchen.",
|
|
72
|
+
"hi": "पर्याप्त स्टोरेज स्थान नहीं है. स्टोरेज बढ़ाएं और फिर से प्रयास करें.",
|
|
73
|
+
"fr": "Espace de stockage insuffisant. Élargissez le stockage et réessayez.",
|
|
74
|
+
"ar": "مساحة التخزين غير كافية. وسّع التخزين وحاول مرة أخرى.",
|
|
75
|
+
"ru": "Недостаточно свободного места. Расширьте место хранения и попробуйте снова.",
|
|
76
|
+
"pt": "Não há espaço de armazenamento suficiente. Expanda o armazenamento e tente novamente.",
|
|
77
|
+
"id": "Tidak cukup ruang penyimpanan. Perluas penyimpanan dan coba lagi.",
|
|
78
|
+
"vi": "Không còn đủ dung lượng lưu trữ. Mở rộng dung lượng và thử lại.",
|
|
79
|
+
"th": "ไม่มีพื้นที่เก็บข้อมูลเพียงพอ. ขยายพื้นที่จัดเก็บแล้วลองอีกครั้ง"
|
|
80
|
+
}
|
|
81
|
+
},
|
|
82
|
+
"backup.space.unableEnableAutoBackup": {
|
|
83
|
+
"en": "Connect to DID Spaces before enabling auto backup.",
|
|
84
|
+
"value": {
|
|
85
|
+
"en": "Connect to DID Spaces before enabling auto backup.",
|
|
86
|
+
"es": "Conéctese a DID Spaces antes de habilitar la copia de seguridad automática.",
|
|
87
|
+
"zh": "在启用自动备份之前 连接到 DID Spaces。",
|
|
88
|
+
"zh-TW": "在啟用自動備份之前 連接到 DID Spaces。",
|
|
89
|
+
"ja": "オートバックアップを有効にする前に DID Spaces に接続してください。",
|
|
90
|
+
"ko": "자동 백업을 활성화하기 전에 DID Spaces 에 연결하십시오.",
|
|
91
|
+
"de": "Verbinden Sie sich mit DID Spaces, bevor Sie die automatische Sicherung aktivieren",
|
|
92
|
+
"hi": "DID Spaces से कनेक्ट करें, ऑटो बैकअप सक्षम करने से पहले",
|
|
93
|
+
"fr": "Connectez-vous à DID Spaces avant d'activer la sauvegarde automatique",
|
|
94
|
+
"ar": "اتصل بـ DID Spaces قبل تمكين النسخ الاحتياطي التلقائي",
|
|
95
|
+
"ru": "Подключитесь к DID Spaces перед включением автоматического резервного копирования",
|
|
96
|
+
"pt": "Conecte-se a DID Spaces antes de ativar o backup automático.",
|
|
97
|
+
"id": "Hubungkan ke DID Spaces sebelum mengaktifkan backup otomatis.",
|
|
98
|
+
"vi": "Kết nối với DID Spaces trước khi kích hoạt sao lưu tự động.",
|
|
99
|
+
"th": "เชื่อมต่อกับ DID Spaces ก่อนเปิดใช้งานการสำรองข้อมูลอัตโนมัติ."
|
|
100
|
+
}
|
|
101
|
+
},
|
|
102
|
+
"backup.space.isFull": {
|
|
103
|
+
"en": "Your DID Spaces storage is full. Expand storage and try again.",
|
|
104
|
+
"value": {
|
|
105
|
+
"en": "Your DID Spaces storage is full. Expand storage and try again.",
|
|
106
|
+
"es": "El almacenamiento de DID Spaces está lleno. Expanda el almacenamiento y vuelva a intentarlo.",
|
|
107
|
+
"zh": "DID Spaces 存储已满。请扩展存储并重试。",
|
|
108
|
+
"zh-TW": "DID Spaces 存儲已滿。請擴充存儲空間並再試一次。",
|
|
109
|
+
"ja": "DID Spaces のストレージは満杯です。ストレージを拡張して、もう一度お試しください。",
|
|
110
|
+
"ko": "DID Spaces 저장 공간이 가득 찼습니다. 저장 공간을 확장하고 다시 시도하십시오.",
|
|
111
|
+
"de": "Ihr DID Spaces Speicherplatz ist voll. Speicherplatz erweitern und erneut versuchen.",
|
|
112
|
+
"hi": "आपका DID Spaces स्टोरेज भरा है। स्टोरेज बढ़ाएं और फिर से प्रयास करें।",
|
|
113
|
+
"fr": "Votre DID Spaces stockage est plein. Augmentez le stockage et réessayez.",
|
|
114
|
+
"ar": "سعة التخزين لـ DID Spaces ممتلئة. وسّع التخزين وحاول مرة أخرى.",
|
|
115
|
+
"ru": "Ваше хранилище DID Spaces заполнено. Расширьте хранилище и попробуйте снова.",
|
|
116
|
+
"pt": "O armazenamento do DID Spaces está cheio. Expanda o armazenamento e tente novamente.",
|
|
117
|
+
"id": "Penyimpanan DID Spaces Anda penuh. Perluas penyimpanan dan coba lagi.",
|
|
118
|
+
"vi": "Dung lượng DID Spaces của bạn đã đầy. Mở rộng dung lượng và thử lại.",
|
|
119
|
+
"th": "พื้นที่จัดเก็บ DID Spaces ของคุณเต็มแล้ว โปรดขยายพื้นที่และลองอีกครั้ง."
|
|
120
|
+
}
|
|
121
|
+
}
|
|
122
|
+
}
|
package/lib/states/release.js
CHANGED
package/lib/util/blocklet.js
CHANGED
|
@@ -882,7 +882,7 @@ const startBlockletProcess = async (
|
|
|
882
882
|
startLock.releaseLock(lockName);
|
|
883
883
|
}
|
|
884
884
|
},
|
|
885
|
-
{ parallel: true, concurrencyLimit:
|
|
885
|
+
{ parallel: true, concurrencyLimit: 3 }
|
|
886
886
|
);
|
|
887
887
|
};
|
|
888
888
|
|
|
@@ -2357,6 +2357,7 @@ const ensureAppPortsNotOccupied = async ({ blocklet, componentDids: inputDids, s
|
|
|
2357
2357
|
if (shouldSkipComponent(b.meta.did, inputDids)) return;
|
|
2358
2358
|
|
|
2359
2359
|
if (!b.greenPorts) {
|
|
2360
|
+
occupiedDids.add(b.meta.did);
|
|
2360
2361
|
b.greenPorts = {};
|
|
2361
2362
|
}
|
|
2362
2363
|
const { ports = {}, greenPorts } = b;
|
|
@@ -15,11 +15,11 @@ function isDockerOnlySingleInstance(meta = {}) {
|
|
|
15
15
|
if (SINGLE_INSTANCE_COMPONENT_DIDS.has(meta.did)) {
|
|
16
16
|
return true;
|
|
17
17
|
}
|
|
18
|
-
|
|
19
|
-
|
|
18
|
+
// 用于描述某个组件是否只能以单实例模式运行
|
|
19
|
+
if (meta.capabilities?.singleton) {
|
|
20
|
+
return true;
|
|
20
21
|
}
|
|
21
|
-
|
|
22
|
-
if (meta.docker.allowMultipleInstances) {
|
|
22
|
+
if (!meta.docker) {
|
|
23
23
|
return false;
|
|
24
24
|
}
|
|
25
25
|
if (meta.docker.RunBaseScript && meta.docker.installNodeModules) {
|
package/lib/webhook/index.js
CHANGED
|
@@ -3,7 +3,7 @@ const { evaluateURLs } = require('@abtnode/util/lib/url-evaluation');
|
|
|
3
3
|
const checkURLAccessible = require('@abtnode/util/lib/url-evaluation/check-accessible-node');
|
|
4
4
|
const { EVENTS } = require('@abtnode/constant');
|
|
5
5
|
const isEmpty = require('lodash/isEmpty');
|
|
6
|
-
const { isAllowedReferer } = require('@abtnode/util/lib/ssrf-protector');
|
|
6
|
+
const { isAllowedReferer, isAllowedURL } = require('@abtnode/util/lib/ssrf-protector');
|
|
7
7
|
|
|
8
8
|
const { joinURL } = require('ufo');
|
|
9
9
|
const isUrl = require('is-url');
|
|
@@ -215,6 +215,14 @@ module.exports = ({ events, dataDirs, instance, teamManager }) => {
|
|
|
215
215
|
try {
|
|
216
216
|
const mockCreateRes = await webhookState.create(webhook, { mock: true });
|
|
217
217
|
await sentTextMessage(mockCreateRes, `A ${mockCreateRes.type} integration is now *successfully added*`);
|
|
218
|
+
const urls = webhook.params.map((item) => item.value);
|
|
219
|
+
|
|
220
|
+
for (const url of urls) {
|
|
221
|
+
// eslint-disable-next-line no-await-in-loop
|
|
222
|
+
if (!(await isAllowedURL(url))) {
|
|
223
|
+
throw new Error('Invalid parameter: internal');
|
|
224
|
+
}
|
|
225
|
+
}
|
|
218
226
|
|
|
219
227
|
const createRes = await webhookState.create(webhook);
|
|
220
228
|
return createRes;
|
package/package.json
CHANGED
|
@@ -3,7 +3,7 @@
|
|
|
3
3
|
"publishConfig": {
|
|
4
4
|
"access": "public"
|
|
5
5
|
},
|
|
6
|
-
"version": "1.16.53-beta-
|
|
6
|
+
"version": "1.16.53-beta-20251014-110009-8220e324",
|
|
7
7
|
"description": "",
|
|
8
8
|
"main": "lib/index.js",
|
|
9
9
|
"files": [
|
|
@@ -21,22 +21,22 @@
|
|
|
21
21
|
"author": "wangshijun <wangshijun2010@gmail.com> (http://github.com/wangshijun)",
|
|
22
22
|
"license": "Apache-2.0",
|
|
23
23
|
"dependencies": {
|
|
24
|
-
"@abtnode/analytics": "1.16.53-beta-
|
|
25
|
-
"@abtnode/auth": "1.16.53-beta-
|
|
26
|
-
"@abtnode/certificate-manager": "1.16.53-beta-
|
|
27
|
-
"@abtnode/constant": "1.16.53-beta-
|
|
28
|
-
"@abtnode/cron": "1.16.53-beta-
|
|
29
|
-
"@abtnode/db-cache": "1.16.53-beta-
|
|
30
|
-
"@abtnode/docker-utils": "1.16.53-beta-
|
|
31
|
-
"@abtnode/logger": "1.16.53-beta-
|
|
32
|
-
"@abtnode/models": "1.16.53-beta-
|
|
33
|
-
"@abtnode/queue": "1.16.53-beta-
|
|
34
|
-
"@abtnode/rbac": "1.16.53-beta-
|
|
35
|
-
"@abtnode/router-provider": "1.16.53-beta-
|
|
36
|
-
"@abtnode/static-server": "1.16.53-beta-
|
|
37
|
-
"@abtnode/timemachine": "1.16.53-beta-
|
|
38
|
-
"@abtnode/util": "1.16.53-beta-
|
|
39
|
-
"@aigne/aigne-hub": "^0.10.
|
|
24
|
+
"@abtnode/analytics": "1.16.53-beta-20251014-110009-8220e324",
|
|
25
|
+
"@abtnode/auth": "1.16.53-beta-20251014-110009-8220e324",
|
|
26
|
+
"@abtnode/certificate-manager": "1.16.53-beta-20251014-110009-8220e324",
|
|
27
|
+
"@abtnode/constant": "1.16.53-beta-20251014-110009-8220e324",
|
|
28
|
+
"@abtnode/cron": "1.16.53-beta-20251014-110009-8220e324",
|
|
29
|
+
"@abtnode/db-cache": "1.16.53-beta-20251014-110009-8220e324",
|
|
30
|
+
"@abtnode/docker-utils": "1.16.53-beta-20251014-110009-8220e324",
|
|
31
|
+
"@abtnode/logger": "1.16.53-beta-20251014-110009-8220e324",
|
|
32
|
+
"@abtnode/models": "1.16.53-beta-20251014-110009-8220e324",
|
|
33
|
+
"@abtnode/queue": "1.16.53-beta-20251014-110009-8220e324",
|
|
34
|
+
"@abtnode/rbac": "1.16.53-beta-20251014-110009-8220e324",
|
|
35
|
+
"@abtnode/router-provider": "1.16.53-beta-20251014-110009-8220e324",
|
|
36
|
+
"@abtnode/static-server": "1.16.53-beta-20251014-110009-8220e324",
|
|
37
|
+
"@abtnode/timemachine": "1.16.53-beta-20251014-110009-8220e324",
|
|
38
|
+
"@abtnode/util": "1.16.53-beta-20251014-110009-8220e324",
|
|
39
|
+
"@aigne/aigne-hub": "^0.10.1",
|
|
40
40
|
"@arcblock/did": "1.25.6",
|
|
41
41
|
"@arcblock/did-connect-js": "1.25.6",
|
|
42
42
|
"@arcblock/did-ext": "1.25.6",
|
|
@@ -47,16 +47,16 @@
|
|
|
47
47
|
"@arcblock/pm2-events": "^0.0.5",
|
|
48
48
|
"@arcblock/validator": "1.25.6",
|
|
49
49
|
"@arcblock/vc": "1.25.6",
|
|
50
|
-
"@blocklet/constant": "1.16.53-beta-
|
|
51
|
-
"@blocklet/did-space-js": "^1.1.
|
|
52
|
-
"@blocklet/env": "1.16.53-beta-
|
|
50
|
+
"@blocklet/constant": "1.16.53-beta-20251014-110009-8220e324",
|
|
51
|
+
"@blocklet/did-space-js": "^1.1.33",
|
|
52
|
+
"@blocklet/env": "1.16.53-beta-20251014-110009-8220e324",
|
|
53
53
|
"@blocklet/error": "^0.2.5",
|
|
54
|
-
"@blocklet/meta": "1.16.53-beta-
|
|
55
|
-
"@blocklet/resolver": "1.16.53-beta-
|
|
56
|
-
"@blocklet/sdk": "1.16.53-beta-
|
|
57
|
-
"@blocklet/server-js": "1.16.53-beta-
|
|
58
|
-
"@blocklet/store": "1.16.53-beta-
|
|
59
|
-
"@blocklet/theme": "^3.1.
|
|
54
|
+
"@blocklet/meta": "1.16.53-beta-20251014-110009-8220e324",
|
|
55
|
+
"@blocklet/resolver": "1.16.53-beta-20251014-110009-8220e324",
|
|
56
|
+
"@blocklet/sdk": "1.16.53-beta-20251014-110009-8220e324",
|
|
57
|
+
"@blocklet/server-js": "1.16.53-beta-20251014-110009-8220e324",
|
|
58
|
+
"@blocklet/store": "1.16.53-beta-20251014-110009-8220e324",
|
|
59
|
+
"@blocklet/theme": "^3.1.49",
|
|
60
60
|
"@fidm/x509": "^1.2.1",
|
|
61
61
|
"@ocap/mcrypto": "1.25.6",
|
|
62
62
|
"@ocap/util": "1.25.6",
|
|
@@ -120,5 +120,5 @@
|
|
|
120
120
|
"jest": "^29.7.0",
|
|
121
121
|
"unzipper": "^0.10.11"
|
|
122
122
|
},
|
|
123
|
-
"gitHead": "
|
|
123
|
+
"gitHead": "e3cc422d4f1fb565f74d77e02d847d4461e94436"
|
|
124
124
|
}
|
package/lib/locales/i18n.db
DELETED
|
Binary file
|