@abtnode/constant 1.17.8-beta-20260119-034126-467341b7 → 1.17.8-beta-20260121-102603-f9d0176f

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/dist/index.mjs ADDED
@@ -0,0 +1,847 @@
1
+ //#region src/roles.js
2
+ const ROLES = /* @__PURE__ */ Object.freeze({
3
+ OWNER: "owner",
4
+ ADMIN: "admin",
5
+ MEMBER: "member",
6
+ GUEST: "guest"
7
+ });
8
+ const SERVER_ROLES = /* @__PURE__ */ Object.freeze({
9
+ ...ROLES,
10
+ CI: "ci",
11
+ CERTIFICATE: "certificate",
12
+ BLOCKLET_OWNER: "blocklet-owner",
13
+ BLOCKLET_ADMIN: "blocklet-admin",
14
+ BLOCKLET_MEMBER: "blocklet-member",
15
+ BLOCKLET_SDK: "blocklet-sdk",
16
+ EXTERNAL_BLOCKLET_CONTROLLER: "external-blocklet-controller",
17
+ EXTERNAL_BLOCKLETS_MANAGER: "external-blocklets-manager"
18
+ });
19
+ const SERVICES_ROLES = /* @__PURE__ */ Object.freeze({ BLOCKLET_GUEST: "blocklet-guest" });
20
+ const BLOCKLET_ROLES = [
21
+ SERVER_ROLES.BLOCKLET_OWNER,
22
+ SERVER_ROLES.BLOCKLET_ADMIN,
23
+ SERVER_ROLES.BLOCKLET_MEMBER,
24
+ SERVER_ROLES.BLOCKLET_SDK
25
+ ];
26
+ const isBlockletRole = (role) => role && BLOCKLET_ROLES.includes(role);
27
+ const isSystemRole = (role) => role && ROLES[(role || "").toUpperCase()];
28
+ const BLOCKLET_MULTIPLE_TENANT_ROLES = [
29
+ SERVER_ROLES.BLOCKLET_OWNER,
30
+ SERVER_ROLES.BLOCKLET_ADMIN,
31
+ SERVER_ROLES.BLOCKLET_MEMBER,
32
+ SERVER_ROLES.BLOCKLET_SDK,
33
+ SERVICES_ROLES.BLOCKLET_GUEST
34
+ ];
35
+ const isBlockletMultipleTenantRole = (role) => role && BLOCKLET_MULTIPLE_TENANT_ROLES.includes(role);
36
+ const AUTH_CERT_TYPE = {
37
+ USER: "user",
38
+ OWNERSHIP_NFT: "ownership_nft",
39
+ BLOCKLET_USER: "blocklet_user",
40
+ BLOCKLET_CONTROLLER: "blocklet_controller"
41
+ };
42
+ const RBAC_CONFIG = {
43
+ roles: /* @__PURE__ */ Object.freeze([
44
+ {
45
+ name: SERVER_ROLES.OWNER,
46
+ title: "Owner",
47
+ description: "Has full administrative access to the Blocklet Server",
48
+ passport: true
49
+ },
50
+ {
51
+ name: SERVER_ROLES.ADMIN,
52
+ title: "Admin",
53
+ description: "Has full permissions to manage blocklet and Blocklet Server such as install/remove/start/stop blocklet, manage blocklet URL mapping and certificates, manage blocklet team, manage node integrations and access keys, upgrade node to a new version",
54
+ passport: true
55
+ },
56
+ {
57
+ name: SERVER_ROLES.MEMBER,
58
+ title: "Member",
59
+ description: "Has permissions to manage blocklets, such as install/remove/start/stop blocklet, manage blocklet URL mapping and certificates",
60
+ passport: true
61
+ },
62
+ {
63
+ name: SERVER_ROLES.GUEST,
64
+ title: "Guest",
65
+ description: "Has all read permissions on Blocklet Server",
66
+ passport: true
67
+ },
68
+ {
69
+ name: SERVER_ROLES.CI,
70
+ title: "CI",
71
+ description: "Deploy blocklet to Blocklet Server",
72
+ passport: true,
73
+ noHuman: true
74
+ },
75
+ {
76
+ name: SERVER_ROLES.CERTIFICATE,
77
+ title: "Certificate",
78
+ description: "Manage https certificates for blocklets on the Blocklet Server",
79
+ noHuman: true
80
+ },
81
+ {
82
+ name: SERVER_ROLES.BLOCKLET_OWNER,
83
+ title: "Blocklet Owner"
84
+ },
85
+ {
86
+ name: SERVER_ROLES.BLOCKLET_ADMIN,
87
+ title: "Blocklet Admin"
88
+ },
89
+ {
90
+ name: SERVER_ROLES.BLOCKLET_MEMBER,
91
+ title: "Blocklet Member"
92
+ },
93
+ {
94
+ name: SERVER_ROLES.BLOCKLET_SDK,
95
+ title: "Blocklet SDK"
96
+ },
97
+ {
98
+ name: SERVER_ROLES.EXTERNAL_BLOCKLET_CONTROLLER,
99
+ title: "External Blocklet Controller"
100
+ },
101
+ {
102
+ name: SERVER_ROLES.EXTERNAL_BLOCKLETS_MANAGER,
103
+ title: "External Blocklets Manager",
104
+ description: "Manage external blocklets in the Blocklet Server",
105
+ noHuman: true
106
+ }
107
+ ]),
108
+ permissions: /* @__PURE__ */ Object.freeze([
109
+ {
110
+ name: "query_node",
111
+ description: "View node data, include dashboard and node settings, log stream for both Blocklet Server and blocklets"
112
+ },
113
+ {
114
+ name: "mutate_node",
115
+ description: "Change node settings, upgrade node to a new version"
116
+ },
117
+ {
118
+ name: "query_session",
119
+ description: "Get data from a long running session"
120
+ },
121
+ {
122
+ name: "mutate_session",
123
+ description: "Start/update/end a long running session"
124
+ },
125
+ {
126
+ name: "query_accessKey",
127
+ description: "View access keys for Blocklet Server"
128
+ },
129
+ {
130
+ name: "mutate_accessKey",
131
+ description: "Manage access keys for server and blocklets, such as create/update/delete"
132
+ },
133
+ {
134
+ name: "query_team",
135
+ description: "View team data(members/roles/permissions) for Blocklet Server and blocklets"
136
+ },
137
+ {
138
+ name: "mutate_team",
139
+ description: "Manage team data(members/roles/permissions) for Blocklet Server and blocklets"
140
+ },
141
+ {
142
+ name: "query_blocklets",
143
+ description: "View store and installed blocklets, including blocklet runtime configuration, domains and urls"
144
+ },
145
+ {
146
+ name: "mutate_blocklets",
147
+ description: "Perform state changing actions on blocklets, such as install/upgrade/config/start/stop/remove"
148
+ },
149
+ {
150
+ name: "query_router",
151
+ description: "View sites, URL mapping and certificates in service gateway"
152
+ },
153
+ {
154
+ name: "mutate_router",
155
+ description: "Manage sites, URL mapping and certificates in service gateway"
156
+ },
157
+ {
158
+ name: "query_certificate",
159
+ description: "View certificates in service gateway"
160
+ },
161
+ {
162
+ name: "mutate_certificate",
163
+ description: "Manage certificates in service gateway"
164
+ },
165
+ {
166
+ name: "query_notification",
167
+ description: "View notifications"
168
+ },
169
+ {
170
+ name: "mutate_notification",
171
+ description: "Manage notifications, such as mark notifications as read"
172
+ },
173
+ {
174
+ name: "query_webhook",
175
+ description: "View integrations"
176
+ },
177
+ {
178
+ name: "mutate_webhook",
179
+ description: "Manage integrations"
180
+ },
181
+ {
182
+ name: "query_blocklet",
183
+ description: "View a blocklet, including blocklet runtime configuration, domains and urls"
184
+ },
185
+ {
186
+ name: "mutate_blocklet",
187
+ description: "Perform state changing actions on a blocklet, such as upgrade/config/start/stop"
188
+ }
189
+ ]),
190
+ grants: /* @__PURE__ */ Object.freeze({
191
+ [SERVER_ROLES.GUEST]: [
192
+ "query_blocklets",
193
+ "query_router",
194
+ "query_webhook",
195
+ "query_notification",
196
+ "query_team",
197
+ "query_accessKey",
198
+ "query_node",
199
+ "query_session"
200
+ ],
201
+ [SERVER_ROLES.MEMBER]: [
202
+ SERVER_ROLES.GUEST,
203
+ "mutate_blocklets",
204
+ "mutate_router",
205
+ "mutate_notification",
206
+ "mutate_session"
207
+ ],
208
+ [SERVER_ROLES.ADMIN]: [
209
+ SERVER_ROLES.MEMBER,
210
+ "mutate_team",
211
+ "mutate_webhook",
212
+ "mutate_accessKey",
213
+ "mutate_node",
214
+ "mutate_certificate"
215
+ ],
216
+ [SERVER_ROLES.OWNER]: [ROLES.ADMIN],
217
+ [SERVER_ROLES.CI]: ["query_blocklets", "mutate_blocklets"],
218
+ [SERVER_ROLES.CERTIFICATE]: ["query_certificate", "mutate_certificate"],
219
+ [SERVER_ROLES.BLOCKLET_SDK]: [
220
+ "query_team",
221
+ "mutate_team",
222
+ "query_blocklet",
223
+ "query_accessKey",
224
+ "mutate_accessKey"
225
+ ],
226
+ [SERVER_ROLES.BLOCKLET_OWNER]: [SERVER_ROLES.BLOCKLET_ADMIN],
227
+ [SERVER_ROLES.BLOCKLET_ADMIN]: [
228
+ SERVER_ROLES.BLOCKLET_MEMBER,
229
+ "mutate_team",
230
+ "mutate_accessKey",
231
+ "mutate_blocklet",
232
+ "mutate_notification"
233
+ ],
234
+ [SERVER_ROLES.BLOCKLET_MEMBER]: [
235
+ "query_team",
236
+ "query_blocklet",
237
+ "query_notification",
238
+ "query_accessKey"
239
+ ],
240
+ [SERVER_ROLES.EXTERNAL_BLOCKLET_CONTROLLER]: ["query_blocklets", "mutate_blocklets"],
241
+ [SERVER_ROLES.EXTERNAL_BLOCKLETS_MANAGER]: [
242
+ "query_blocklets",
243
+ "mutate_blocklets",
244
+ "query_node"
245
+ ]
246
+ })
247
+ };
248
+ const genPermissionName = (resource, action = "access") => `${action}_${resource.replace("_", "-")}`;
249
+ const PASSPORT_STATUS = {
250
+ VALID: "valid",
251
+ REVOKED: "revoked",
252
+ EXPIRED: "expired"
253
+ };
254
+ const WHO_CAN_ACCESS = /* @__PURE__ */ Object.freeze({
255
+ OWNER: "owner",
256
+ ADMIN: "admin",
257
+ INVITED: "invited",
258
+ ALL: "all"
259
+ });
260
+ const WHO_CAN_ACCESS_PREFIX_ROLES = "roles:";
261
+
262
+ //#endregion
263
+ //#region src/events.js
264
+ const EVENTS = {
265
+ NOTIFICATION_CREATE: "notification.create",
266
+ NOTIFICATION_READ: "notification.read",
267
+ NOTIFICATION_BLOCKLET_READ: "blocklet.notification.read",
268
+ NOTIFICATION_BLOCKLET_CREATE: "notification.blockletCreate",
269
+ NOTIFICATION_BLOCKLET_UPDATE: "notification.blockletUpdate",
270
+ ROUTING_UPDATED: "routing.updated",
271
+ NODE_UPDATED: "node.updated",
272
+ NODE_MAINTAIN_PROGRESS: "node.upgrade.progress",
273
+ NODE_STARTED: "node.started",
274
+ NODE_STOPPED: "node.stopped",
275
+ NODE_ADDED_OWNER: "node.addedOwner",
276
+ NODE_RUNTIME_INFO: "node.runtimeInfo",
277
+ BLOCKLETS_RUNTIME_INFO: "node.blockletsRuntimeInfo",
278
+ DOMAIN_STATUS: "domain.status",
279
+ CERT_ADDED: "cert.added",
280
+ CERT_ISSUED: "cert.issued",
281
+ CERT_UPDATED: "cert.updated",
282
+ CERT_REMOVED: "cert.removed",
283
+ CERT_ERROR: "cert.error",
284
+ RELOAD_GATEWAY: "gateway.reload",
285
+ NOTIFICATION_CREATE_QUEUED: "notification.create.queued",
286
+ UPDATE_DOMAIN_ALIAS: "router.domain.alias.updated",
287
+ WEBHOOK_ATTEMPT: "webhook.attempt"
288
+ };
289
+ const EVENT_BUS_EVENT = "event-bus";
290
+
291
+ //#endregion
292
+ //#region src/node.js
293
+ const NODE_SERVICES = /* @__PURE__ */ Object.freeze({ AUTH: "auth" });
294
+ const NODE_MODES = /* @__PURE__ */ Object.freeze({
295
+ PRODUCTION: "production",
296
+ DEBUG: "debug",
297
+ MAINTENANCE: "maintenance",
298
+ SERVERLESS: "serverless"
299
+ });
300
+ const DEFAULT_DESCRIPTION = "Web Interface to manage your Blocklet Server";
301
+ const NODE_MAINTAIN_PROGRESS = /* @__PURE__ */ Object.freeze({
302
+ SETUP: "setup",
303
+ INSTALLING: "installing",
304
+ VERIFYING: "verifying",
305
+ RESTARTING: "restarting",
306
+ CLEANUP: "cleanup",
307
+ COMPLETE: "complete",
308
+ ROLLBACK: "rollback"
309
+ });
310
+ const NODE_PACKAGE_NAME = "@abtnode/cli";
311
+ const NODE_COMMAND_NAME = "abtnode";
312
+ const NODE_DATA_DIR_NAME = "_abtnode";
313
+ const PROCESS_NAME_DAEMON = "abt-node-daemon";
314
+ const PROCESS_NAME_PROXY = "abt-node-db-hub";
315
+ const PROCESS_NAME_UPDATER = "abt-node-updater";
316
+ const PROCESS_NAME_SERVICE = "abt-node-service";
317
+ const PROCESS_NAME_ROUTER = "abt-node-router";
318
+ const PROCESS_NAME_LOG_ROTATE = "abt-node-log-rotate";
319
+ const PROCESS_NAME_EVENT_HUB = "abt-node-event-hub";
320
+ const PROCESS_NAME_PM2_EVENT_HUB = "abt-node-pm2-event-hub";
321
+ const PROCESS_NAME_ORPHAN_CLEANUP = "abt-node-orphan-cleanup";
322
+ const DAEMON_SCRIPT_PATH = "cli/lib/process/daemon.js";
323
+ const SERVICE_SCRIPT_PATH = "cli/lib/process/service.js";
324
+ const ORPHAN_CHECK_DELAY = 60 * 1e3;
325
+ const ORPHAN_MIN_UPTIME = 60;
326
+ const DISK_ALERT_THRESHOLD_PERCENT = 80;
327
+ const SERVER_STATUS = {
328
+ RUNNING: 1,
329
+ STOPPED: 2,
330
+ START_FROM_CRASH: 3
331
+ };
332
+ const LOG_RETAIN_IN_DAYS = 60;
333
+ const DAEMON_MAX_MEM_LIMIT_IN_MB = 800;
334
+ const BLOCKLET_MAX_MEM_LIMIT_IN_MB = 800;
335
+
336
+ //#endregion
337
+ //#region src/blocklet.js
338
+ const APP_STRUCT_VERSION = "2";
339
+ const BLOCKLET_LAUNCHER_URL = "https://launcher.arcblock.io/";
340
+ const BLOCKLET_PROXY_PATH_PREFIX = "/.blocklet/proxy";
341
+ const BLOCKLET_SITE_GROUP_SUFFIX = ".blocklet-domain-group";
342
+ const BLOCKLET_INSTALL_TYPE = {
343
+ STORE: "store",
344
+ URL: "url",
345
+ DEV: "dev",
346
+ CREATE: "create",
347
+ RESTORE: "restore"
348
+ };
349
+ const INSTALL_ACTIONS = {
350
+ INSTALL: "install",
351
+ INSTALL_COMPONENT: "installComponent",
352
+ UPGRADE_COMPONENT: "upgradeComponent"
353
+ };
354
+ const SERVERLESS_BLOCKLET_DATA_RETENTION_DAYS = 30;
355
+ const LAUNCH_SESSION_STATUS = /* @__PURE__ */ Object.freeze({
356
+ created: 0,
357
+ selected: 10,
358
+ connected: 20,
359
+ timeout: 25,
360
+ paid: 30,
361
+ nftMinted: 35,
362
+ allocated: 40,
363
+ consuming: 46,
364
+ installed: 50,
365
+ overdue: 60,
366
+ canceled: 65,
367
+ terminated: 70,
368
+ transferred: 90
369
+ });
370
+ const NAVIGATION_I18N_FIELDS = /* @__PURE__ */ Object.freeze([
371
+ "title",
372
+ "description",
373
+ "link"
374
+ ]);
375
+ const USER_SESSION_STATUS = {
376
+ ONLINE: "online",
377
+ OFFLINE: "offline",
378
+ EXPIRED: "expired"
379
+ };
380
+ const STUDIO_CONNECTED_STORE = "studio_connected_store";
381
+ const STUDIO_CONNECTED_AND_DEVELOPED = "studio_connected_and_developed";
382
+ const STUDIO_ALLOWED_METHODS = {
383
+ getBlocklet: true,
384
+ createProject: true,
385
+ getProjects: true,
386
+ getProject: true,
387
+ updateProject: true,
388
+ deleteProject: true,
389
+ getReleases: true,
390
+ getRelease: true,
391
+ createRelease: true,
392
+ deleteRelease: true,
393
+ addBlockletStore: true,
394
+ deleteBlockletStore: true,
395
+ publishToStore: true,
396
+ connectToStore: true,
397
+ connectByStudio: true,
398
+ disconnectFromStore: true,
399
+ getSelectedResources: true,
400
+ updateSelectedResources: true,
401
+ getBlockletRuntimeHistory: true,
402
+ checkDomains: true,
403
+ isDidDomain: true
404
+ };
405
+ const SDK_ALLOWED_METHODS = {
406
+ configBlocklet: true,
407
+ configNavigations: true,
408
+ addRoutingRule: true,
409
+ updateRoutingRule: true,
410
+ deleteRoutingRule: true
411
+ };
412
+
413
+ //#endregion
414
+ //#region src/store.js
415
+ const TEST_STORE_URL = "https://test.store.blocklet.dev";
416
+ const BLOCKLET_STORE_URL = "https://store.blocklet.dev";
417
+ const BLOCKLET_STORE_URL_DEV = "https://dev.store.blocklet.dev";
418
+ const BLOCKLET_STORE_DID = "z8ia29UsENBg6tLZUKi2HABj38Cw1LmHZocbQ";
419
+ const BLOCKLET_STORE_API_PREFIX = "/api";
420
+ const BLOCKLET_STORE_API_BLOCKLET_PREFIX = "/api/blocklets";
421
+ const BLOCKLET_STORE_META_PATH = "/api/store.json";
422
+ const BLOCKLET_STORE = {
423
+ id: "zNKqX7D8ZAYa77HgzpoFfnV3BFbcmSRrE9aT",
424
+ name: "Official Store",
425
+ description: "ArcBlock official store for production ready blocklets",
426
+ url: BLOCKLET_STORE_URL,
427
+ logoUrl: "/logo.png",
428
+ maintainer: "arcblock"
429
+ };
430
+ const BLOCKLET_STORE_DEV = {
431
+ id: "zNKmfUatDhzfMVACfr3u97eqndj8f1yXXw3m",
432
+ name: "Dev Store",
433
+ description: "ArcBlock official store for demo and example blocklets",
434
+ url: BLOCKLET_STORE_URL_DEV,
435
+ maintainer: "arcblock",
436
+ logoUrl: "/logo.png"
437
+ };
438
+ const BLOCKLET_TEST_STORE = {
439
+ id: "zNKirQVRx4xbyTPMkvH3kguRfofTJana8WBK",
440
+ name: "Test Store",
441
+ description: "ArcBlock official store for non-production ready blocklets",
442
+ url: TEST_STORE_URL,
443
+ maintainer: "arcblock",
444
+ logoUrl: "/logo.png"
445
+ };
446
+ const STORE_DETAIL_PAGE_PATH_PREFIX = "/blocklets";
447
+
448
+ //#endregion
449
+ //#region src/routing.js
450
+ const ROUTING_RESPONSE_TYPES = [
451
+ {
452
+ text: "Plain Text",
453
+ value: "text/plain"
454
+ },
455
+ {
456
+ text: "JSON",
457
+ value: "application/json"
458
+ },
459
+ {
460
+ text: "XML",
461
+ value: "application/xml"
462
+ },
463
+ {
464
+ text: "HTML Document",
465
+ value: "text/html"
466
+ },
467
+ {
468
+ text: "YAML",
469
+ value: "application/x-yaml"
470
+ },
471
+ {
472
+ text: "TOML",
473
+ value: "application/toml"
474
+ },
475
+ {
476
+ text: "CSS",
477
+ value: "text/css"
478
+ },
479
+ {
480
+ text: "JavaScript",
481
+ value: "application/javascript"
482
+ },
483
+ {
484
+ text: "CSV",
485
+ value: "text/csv"
486
+ },
487
+ {
488
+ text: "Markdown",
489
+ value: "text/markdown"
490
+ },
491
+ {
492
+ text: "SVG",
493
+ value: "image/svg+xml"
494
+ }
495
+ ];
496
+ const ROUTING_RULE_TYPES = /* @__PURE__ */ Object.freeze({
497
+ NONE: "none",
498
+ DAEMON: "daemon",
499
+ SERVICE: "service",
500
+ BLOCKLET: "blocklet",
501
+ REDIRECT: "redirect",
502
+ GENERAL_REWRITE: "rewrite",
503
+ GENERAL_PROXY: "general_proxy",
504
+ DIRECT_RESPONSE: "direct_response",
505
+ COMPONENT: "component",
506
+ SUB_SERVICE: "sub_service"
507
+ });
508
+ const GATEWAY_RATE_LIMIT = {
509
+ min: 5,
510
+ max: 500
511
+ };
512
+ const GATEWAY_RATE_LIMIT_BURST_FACTOR = {
513
+ min: 1,
514
+ max: 10
515
+ };
516
+ const GATEWAY_RATE_LIMIT_GLOBAL = {
517
+ min: 100,
518
+ max: 5e3
519
+ };
520
+ const GATEWAY_RATE_LIMIT_METHODS = [
521
+ "GET",
522
+ "POST",
523
+ "PUT",
524
+ "DELETE",
525
+ "OPTIONS",
526
+ "HEAD"
527
+ ];
528
+ const DEFAULT_HTTP_PORT = 80;
529
+ const DEFAULT_HTTPS_PORT = 443;
530
+ const MAX_UPLOAD_FILE_SIZE = 100;
531
+ const DEFAULT_DAEMON_PORT = 8089;
532
+ const MAX_NGINX_WORKER_CONNECTIONS = 10240;
533
+ const ROUTER_CACHE_GROUPS = { blockletProxy: {
534
+ minSize: "10m",
535
+ maxSize: "10g",
536
+ period: "30d"
537
+ } };
538
+ const BLACKLIST_SCOPE = { ROUTER: "router" };
539
+
540
+ //#endregion
541
+ //#region src/misc.js
542
+ const DAY_IN_MS = 1440 * 60 * 1e3;
543
+ const StatusCode = /* @__PURE__ */ Object.freeze({
544
+ ok: 0,
545
+ blocklet_not_found: 1,
546
+ blocklet_not_purchased: 2,
547
+ forbidden: 403,
548
+ internal: 500,
549
+ timeout: 504
550
+ });
551
+ const MAIN_CHAIN_ENDPOINT = "https://main.abtnetwork.io/api/";
552
+ const SERVER_CACHE_TTL = 300 * 1e3;
553
+ const RBAC_CACHE_TTL = 300 * 1e3;
554
+ const BLOCKLET_CACHE_TTL = 300 * 1e3;
555
+ const SESSION_CACHE_TTL = 3600;
556
+ const SESSION_TTL = 7 * 86400;
557
+ const COPYRIGHT_OWNER = "ArcBlock";
558
+ const MAX_PAGE_SIZE = 100;
559
+
560
+ //#endregion
561
+ //#region src/certificates.js
562
+ const DEFAULT_DID_REGISTRY = "https://registry.abtnet.io";
563
+ const DEFAULT_SLP_DOMAIN = "slp.abtnet.io";
564
+ const DEFAULT_DID_DOMAIN = "did.abtnet.io";
565
+ const DEFAULT_IP_DOMAIN = "*.ip.abtnet.io";
566
+ const DEFAULT_IP_DOMAIN_SUFFIX = "ip.abtnet.io";
567
+ const DEFAULT_WILDCARD_CERT_HOST = "https://releases.arcblock.io/";
568
+ const DEFAULT_NFT_DOMAIN_URL = "https://domain.didlabs.org/";
569
+ const DEFAULT_CERTIFICATE_EMAIL = "certs@arcblock.io";
570
+ const CERTIFICATE_EXPIRES_OFFSET = 10 * DAY_IN_MS;
571
+ const CONFIG_FILENAME = "config.yml";
572
+ const CONFIG_FILENAME_OLD = "abtnode.yml";
573
+ const CONFIG_FOLDER_NAME = ".blocklet-server";
574
+ const CONFIG_FOLDER_NAME_OLD = ".abtnode";
575
+ const EXPORTED_FOLDER_NAME = "exported_blocklet_server";
576
+ const DEFAULT_WELLKNOWN_PORT = 8088;
577
+ const IP = /* @__PURE__ */ new RegExp("-(?:25[0-5]|2[0-4]\\d|1\\d\\d|[1-9]\\d|\\d)(?:\\-(?:25[0-5]|2[0-4]\\d|1\\d\\d|[1-9]\\d|\\d)){3}");
578
+ const DOMAIN_FOR_IP_SITE = "";
579
+ const DOMAIN_FOR_IP_SITE_REGEXP = `~^\\d+.\\d+.\\d+.\\d+$`;
580
+ const DOMAIN_FOR_DEFAULT_SITE = "*";
581
+ const DOMAIN_FOR_INTERNAL_SITE = "127.0.0.1";
582
+ const NAME_FOR_WELLKNOWN_SITE = "wellknown";
583
+ const WELLKNOWN_PATH_PREFIX = "/.well-known";
584
+ const WELLKNOWN_ACME_CHALLENGE_PREFIX = "/.well-known/acme-challenge";
585
+ const WELLKNOWN_DID_RESOLVER_PREFIX = "/.well-known/did.json";
586
+ const WELLKNOWN_OAUTH_SERVER = "/.well-known/oauth-authorization-server";
587
+ const WELLKNOWN_OPENID_SERVER = "/.well-known/openid-configuration";
588
+ const WELLKNOWN_BLACKLIST_PREFIX = "/.well-known/blacklist";
589
+ const WELLKNOWN_PING_PREFIX = "/.well-known/ping";
590
+ const WELLKNOWN_ANALYTICS_PREFIX = "/.well-known/analytics";
591
+ const WELLKNOWN_SERVICE_PATH_PREFIX = "/.well-known/service";
592
+ const WELLKNOWN_BLOCKLET_ADMIN_PATH = "/.well-known/service/admin";
593
+ const WELLKNOWN_BLOCKLET_USER_PATH = "/.well-known/service/user";
594
+ const WELLKNOWN_BLOCKLET_HEALTH_PATH = "/.well-known/service/health";
595
+ const WELLKNOWN_BLOCKLET_LOGO_PATH = "/.well-known/service/blocklet/logo";
596
+ const SLOT_FOR_IP_DNS_SITE = "888-888-888-888";
597
+ const DEFAULT_ADMIN_PATH = "/admin";
598
+ const WELLKNOWN_SERVER_ADMIN_PATH = "/.well-known/server/admin";
599
+
600
+ //#endregion
601
+ //#region src/backup.js
602
+ const BACKUPS = {
603
+ STATUS: {
604
+ PROGRESS: null,
605
+ SUCCEEDED: 0,
606
+ FAILED: 1
607
+ },
608
+ TIMEOUT_HOURS: 6,
609
+ STRATEGY: {
610
+ AUTO: 0,
611
+ MANUAL: 1
612
+ },
613
+ JOB: { INTERVAL: 7200 }
614
+ };
615
+ const CHECK_UPDATE = {
616
+ STATUS: {
617
+ PROGRESS: null,
618
+ SUCCEEDED: 0,
619
+ FAILED: 1
620
+ },
621
+ TIMEOUT_HOURS: 6,
622
+ STRATEGY: {
623
+ AUTO: 0,
624
+ MANUAL: 1
625
+ },
626
+ JOB: {
627
+ INTERVAL: 7200,
628
+ DAY_INTERVAL: 1440 * 60
629
+ }
630
+ };
631
+
632
+ //#endregion
633
+ //#region src/monitoring.js
634
+ const MONITOR_RECORD_INTERVAL_SEC = 20;
635
+ const MONITOR_HISTORY_LENGTH = 86400 / MONITOR_RECORD_INTERVAL_SEC;
636
+ const FEDERATED = { SYNC_LIMIT: 30 };
637
+
638
+ //#endregion
639
+ //#region src/auth.js
640
+ const VC_TYPE_BLOCKLET_PURCHASE = "BlockletPurchaseCredential";
641
+ const VC_TYPE_NODE_PASSPORT = "ABTNodePassport";
642
+ const VC_TYPE_GENERAL_PASSPORT = "NFTPassport";
643
+ const NFT_TYPE_SERVER_OWNERSHIP = "BlockletServerOwnershipNFT";
644
+ const NFT_TYPE_SERVERLESS = "BlockletServerServerlessNFT";
645
+ const OAUTH_ENDPOINTS = {
646
+ AUTHORIZATION: "/authorize",
647
+ TOKEN: "/token",
648
+ REGISTRATION: "/register",
649
+ REVOCATION: "/revoke",
650
+ USERINFO: "/userinfo",
651
+ JWKS: "/jwks",
652
+ LOGOUT: "/logout"
653
+ };
654
+ const OAUTH_CODE_TTL = 600;
655
+ const OAUTH_ACCESS_TOKEN_TTL = 1440 * 60;
656
+ const OAUTH_REFRESH_TOKEN_TTL = 720 * 60 * 60;
657
+ const OAUTH_CLIENT_SECRET_TTL = 720 * 60 * 60;
658
+ const OAUTH_SCOPES = {
659
+ "profile:read": "Read your profile (name, email, avatar)",
660
+ "blocklet:read": "Read blocklet information and database",
661
+ "blocklet:write": "Manage blocklet components and configuration"
662
+ };
663
+ const SESSION_TOKEN_STORAGE_KEY = "login_token";
664
+ const REFRESH_TOKEN_STORAGE_KEY = "refresh_token";
665
+ const VERIFY_CODE_LENGTH = 6;
666
+ const VERIFY_CODE_TTL = 1800 * 1e3;
667
+ const VERIFY_SEND_TTL = 60 * 1e3;
668
+ const MFA_PROTECTED_METHODS = [
669
+ "deleteBlocklet",
670
+ "deleteComponent",
671
+ "rotateSessionKey",
672
+ "upgradeNodeVersion",
673
+ "removeUser",
674
+ "updateUserApproval",
675
+ "deleteRoutingRule",
676
+ "deleteDomainAlias",
677
+ "deleteCertificate",
678
+ "deleteAccessKey",
679
+ "deleteWebHook",
680
+ "deleteBlockletSecurityRule",
681
+ "deleteBlockletResponseHeaderPolicy",
682
+ "deleteBlockletAccessPolicy",
683
+ "configVault",
684
+ "removeOrgMember",
685
+ "deleteOrg"
686
+ ];
687
+ const SKIP_ACCESS_VERIFY_METHODS = {
688
+ makeAllNotificationsAsRead: true,
689
+ readNotifications: true,
690
+ unreadNotifications: true,
691
+ launchBlockletByLauncher: true,
692
+ launchBlockletWithoutWallet: true,
693
+ backupBlocklet: true,
694
+ destroySelf: true,
695
+ connectToAigne: true,
696
+ disconnectToAigne: true,
697
+ verifyAigneConnection: true,
698
+ connectToEndpoint: true,
699
+ disconnectFromEndpoint: true
700
+ };
701
+ const PASSPORT_SOURCE = {
702
+ INVITE: "invite",
703
+ ISSUE: "issue",
704
+ RECOVER: "recover",
705
+ TRUSTED: "trusted"
706
+ };
707
+ const PASSPORT_LOG_ACTION = {
708
+ ISSUE: "issue",
709
+ REVOKE: "revoke",
710
+ APPROVE: "approve",
711
+ RECOVER: "recover",
712
+ LOGIN: "login",
713
+ EXPIRED: "expired",
714
+ USED: "used"
715
+ };
716
+ const PASSPORT_ISSUE_ACTION = {
717
+ ISSUE_ON_INVITE: "issueOnInvite",
718
+ ISSUE_ON_LAUNCH: "issueOnLaunch",
719
+ ISSUE_ON_KYC: "issueOnKyc",
720
+ ISSUE_ON_RECOVER: "issueOnRecover",
721
+ ISSUE_ON_ROTATE_KEY_PAIR: "issueOnRotateKeyPair",
722
+ ISSUE_ON_TRANSFER: "issueOnTransferPassportForBindWallet",
723
+ ISSUE_ON_BLOCKLET_START: "issueOnBlockletStart",
724
+ ISSUE_ON_RECEIVE_TRANSFER_APP_OWNER: "receiveTransferAppOwner",
725
+ ISSUE_ON_AUTH0: "issueOnAuth0",
726
+ ISSUE_ON_SETUP_APP_OWNER: "issueOnLaunchSetupAppOwner",
727
+ ISSUE_ON_EXCHANGE_PASSPORT: "issueOnExchangePassport",
728
+ ISSUE_ON_TRUST_PASSPORT: "issueOnTrustPassport"
729
+ };
730
+ const AIGNE_CONFIG_ENCRYPT_SALT = "AIGNE_CONFIG_ENCRYPT_SALT";
731
+
732
+ //#endregion
733
+ //#region src/user.js
734
+ const WEB_WALLET_URL = "https://web.abtwallet.io";
735
+ const USER_AVATAR_DIR = "/.assets/avatar";
736
+ const USER_AVATAR_URL_PREFIX = "bn://avatar";
737
+ const USER_AVATAR_PATH_PREFIX = "/user/avatar";
738
+ const USER_MAX_INVITE_DEPTH = 8;
739
+ const USER_TYPE = /* @__PURE__ */ Object.freeze({
740
+ DERIVED: "derived",
741
+ WALLET: "wallet"
742
+ });
743
+ const MAX_USER_PAGE_SIZE = 100;
744
+ const USER_PROFILE_SYNC_FIELDS = [
745
+ "action",
746
+ "did",
747
+ "pk",
748
+ "avatar",
749
+ "fullName",
750
+ "locale",
751
+ "email",
752
+ "connectedAccount",
753
+ "disconnectedAccount",
754
+ "sourceAppPid",
755
+ "inviter",
756
+ "generation",
757
+ "emailVerified",
758
+ "phoneVerified",
759
+ "metadata",
760
+ "address",
761
+ "extra"
762
+ ];
763
+ const SITE_SYNC_FIELDS = [
764
+ "action",
765
+ "appId",
766
+ "appPid",
767
+ "aliasDid",
768
+ "appName",
769
+ "appDescription",
770
+ "appUrl",
771
+ "aliasDomain",
772
+ "appLogo",
773
+ "appLogoRect",
774
+ "appliedAt",
775
+ "did",
776
+ "pk",
777
+ "serverId",
778
+ "serverVersion",
779
+ "version",
780
+ "isMaster",
781
+ "status"
782
+ ];
783
+ const UNOWNED_DID = "z".repeat(35);
784
+
785
+ //#endregion
786
+ //#region src/notification.js
787
+ const NOTIFICATION_SEND_STATUS = {
788
+ PENDING: 0,
789
+ SENT: 1,
790
+ FAILED: 2
791
+ };
792
+ const NOTIFICATION_SEND_FAILED_REASON = {
793
+ USER_DISABLED: "user_disabled",
794
+ CHANNEL_UNAVAILABLE: "channel_unavailable",
795
+ CHANNEL_DISABLED: "channel_disabled",
796
+ NOT_ONLINE: "not_online"
797
+ };
798
+ const NOTIFICATION_SEND_CHANNEL = {
799
+ WALLET: "app",
800
+ EMAIL: "email",
801
+ PUSH: "push",
802
+ WEBHOOK: "webhook"
803
+ };
804
+ const WEBHOOK_CONSECUTIVE_FAILURES_THRESHOLD = 50;
805
+
806
+ //#endregion
807
+ //#region src/security.js
808
+ const SECURITY_RULE_DEFAULT_ID = "default";
809
+ const ACCESS_POLICY_PUBLIC = "public";
810
+ const ACCESS_POLICY_INVITED_ONLY = "invited-only";
811
+ const ACCESS_POLICY_OWNER_ONLY = "owner-only";
812
+ const ACCESS_POLICY_ADMIN_ONLY = "admin-only";
813
+ const RESPONSE_HEADER_POLICY_SIMPLE_CORS = "simple-cors";
814
+ const RESPONSE_HEADER_POLICY_SECURITY_HEADER = "security-header";
815
+ const RESPONSE_HEADER_POLICY_SIMPLE_CORS_AND_SECURITY_HEADER = "simple-cors-and-security-header";
816
+ const ASSET_CDN_HOST = "https://cdn.blocklet.io";
817
+ const CSP_OFFICIAL_SOURCES = [
818
+ "https://*.arcblock.io",
819
+ "https://*.didnames.io",
820
+ "https://*.didwallet.io",
821
+ "https://*.abtnetwork.io",
822
+ "https://*.didspaces.com",
823
+ "https://*.blocklet.dev",
824
+ "https://domain.didlabs.org",
825
+ "https://cdn.blocklet.io"
826
+ ];
827
+ const CSP_SYSTEM_SOURCES = [
828
+ "https://*.did.abtnet.io",
829
+ "https://*.ip.abtnet.io",
830
+ "https://*.slp.abtnet.io",
831
+ "https://*.did.life",
832
+ "https://*.did.rocks"
833
+ ];
834
+ const CSP_THIRD_PARTY_SOURCES = [
835
+ "https://cdnjs.cloudflare.com",
836
+ "https://js.stripe.com",
837
+ "https://ipapi.co",
838
+ "https://unpkg.com"
839
+ ];
840
+ const CSP_ICONIFY_SOURCES = [
841
+ "https://*.simplesvg.com",
842
+ "https://*.iconify.design",
843
+ "https://*.unisvg.com"
844
+ ];
845
+
846
+ //#endregion
847
+ export { ACCESS_POLICY_ADMIN_ONLY, ACCESS_POLICY_INVITED_ONLY, ACCESS_POLICY_OWNER_ONLY, ACCESS_POLICY_PUBLIC, AIGNE_CONFIG_ENCRYPT_SALT, APP_STRUCT_VERSION, ASSET_CDN_HOST, AUTH_CERT_TYPE, BACKUPS, BLACKLIST_SCOPE, BLOCKLET_CACHE_TTL, BLOCKLET_INSTALL_TYPE, BLOCKLET_LAUNCHER_URL, BLOCKLET_MAX_MEM_LIMIT_IN_MB, BLOCKLET_MULTIPLE_TENANT_ROLES, BLOCKLET_PROXY_PATH_PREFIX, BLOCKLET_ROLES, BLOCKLET_SITE_GROUP_SUFFIX, BLOCKLET_STORE, BLOCKLET_STORE_API_BLOCKLET_PREFIX, BLOCKLET_STORE_API_PREFIX, BLOCKLET_STORE_DEV, BLOCKLET_STORE_DID, BLOCKLET_STORE_META_PATH, BLOCKLET_STORE_URL, BLOCKLET_STORE_URL_DEV, BLOCKLET_TEST_STORE, CERTIFICATE_EXPIRES_OFFSET, CHECK_UPDATE, CONFIG_FILENAME, CONFIG_FILENAME_OLD, CONFIG_FOLDER_NAME, CONFIG_FOLDER_NAME_OLD, COPYRIGHT_OWNER, CSP_ICONIFY_SOURCES, CSP_OFFICIAL_SOURCES, CSP_SYSTEM_SOURCES, CSP_THIRD_PARTY_SOURCES, DAEMON_MAX_MEM_LIMIT_IN_MB, DAEMON_SCRIPT_PATH, DAY_IN_MS, DEFAULT_ADMIN_PATH, DEFAULT_CERTIFICATE_EMAIL, DEFAULT_DAEMON_PORT, DEFAULT_DESCRIPTION, DEFAULT_DID_DOMAIN, DEFAULT_DID_REGISTRY, DEFAULT_HTTPS_PORT, DEFAULT_HTTP_PORT, DEFAULT_IP_DOMAIN, DEFAULT_IP_DOMAIN_SUFFIX, DEFAULT_NFT_DOMAIN_URL, DEFAULT_SLP_DOMAIN, DEFAULT_WELLKNOWN_PORT, DEFAULT_WILDCARD_CERT_HOST, DISK_ALERT_THRESHOLD_PERCENT, DOMAIN_FOR_DEFAULT_SITE, DOMAIN_FOR_INTERNAL_SITE, DOMAIN_FOR_IP_SITE, DOMAIN_FOR_IP_SITE_REGEXP, EVENTS, EVENT_BUS_EVENT, EXPORTED_FOLDER_NAME, FEDERATED, GATEWAY_RATE_LIMIT, GATEWAY_RATE_LIMIT_BURST_FACTOR, GATEWAY_RATE_LIMIT_GLOBAL, GATEWAY_RATE_LIMIT_METHODS, INSTALL_ACTIONS, IP, LAUNCH_SESSION_STATUS, LOG_RETAIN_IN_DAYS, MAIN_CHAIN_ENDPOINT, MAX_NGINX_WORKER_CONNECTIONS, MAX_PAGE_SIZE, MAX_UPLOAD_FILE_SIZE, MAX_USER_PAGE_SIZE, MFA_PROTECTED_METHODS, MONITOR_HISTORY_LENGTH, MONITOR_RECORD_INTERVAL_SEC, NAME_FOR_WELLKNOWN_SITE, NAVIGATION_I18N_FIELDS, NFT_TYPE_SERVERLESS, NFT_TYPE_SERVER_OWNERSHIP, NODE_COMMAND_NAME, NODE_DATA_DIR_NAME, NODE_MAINTAIN_PROGRESS, NODE_MODES, NODE_PACKAGE_NAME, NODE_SERVICES, NOTIFICATION_SEND_CHANNEL, NOTIFICATION_SEND_FAILED_REASON, NOTIFICATION_SEND_STATUS, OAUTH_ACCESS_TOKEN_TTL, OAUTH_CLIENT_SECRET_TTL, OAUTH_CODE_TTL, OAUTH_ENDPOINTS, OAUTH_REFRESH_TOKEN_TTL, OAUTH_SCOPES, ORPHAN_CHECK_DELAY, ORPHAN_MIN_UPTIME, PASSPORT_ISSUE_ACTION, PASSPORT_LOG_ACTION, PASSPORT_SOURCE, PASSPORT_STATUS, PROCESS_NAME_DAEMON, PROCESS_NAME_EVENT_HUB, PROCESS_NAME_LOG_ROTATE, PROCESS_NAME_ORPHAN_CLEANUP, PROCESS_NAME_PM2_EVENT_HUB, PROCESS_NAME_PROXY, PROCESS_NAME_ROUTER, PROCESS_NAME_SERVICE, PROCESS_NAME_UPDATER, RBAC_CACHE_TTL, RBAC_CONFIG, REFRESH_TOKEN_STORAGE_KEY, RESPONSE_HEADER_POLICY_SECURITY_HEADER, RESPONSE_HEADER_POLICY_SIMPLE_CORS, RESPONSE_HEADER_POLICY_SIMPLE_CORS_AND_SECURITY_HEADER, ROLES, ROUTER_CACHE_GROUPS, ROUTING_RESPONSE_TYPES, ROUTING_RULE_TYPES, SDK_ALLOWED_METHODS, SECURITY_RULE_DEFAULT_ID, SERVERLESS_BLOCKLET_DATA_RETENTION_DAYS, SERVER_CACHE_TTL, SERVER_ROLES, SERVER_STATUS, SERVICES_ROLES, SERVICE_SCRIPT_PATH, SESSION_CACHE_TTL, SESSION_TOKEN_STORAGE_KEY, SESSION_TTL, SITE_SYNC_FIELDS, SKIP_ACCESS_VERIFY_METHODS, SLOT_FOR_IP_DNS_SITE, STORE_DETAIL_PAGE_PATH_PREFIX, STUDIO_ALLOWED_METHODS, STUDIO_CONNECTED_AND_DEVELOPED, STUDIO_CONNECTED_STORE, StatusCode, TEST_STORE_URL, UNOWNED_DID, USER_AVATAR_DIR, USER_AVATAR_PATH_PREFIX, USER_AVATAR_URL_PREFIX, USER_MAX_INVITE_DEPTH, USER_PROFILE_SYNC_FIELDS, USER_SESSION_STATUS, USER_TYPE, VC_TYPE_BLOCKLET_PURCHASE, VC_TYPE_GENERAL_PASSPORT, VC_TYPE_NODE_PASSPORT, VERIFY_CODE_LENGTH, VERIFY_CODE_TTL, VERIFY_SEND_TTL, WEBHOOK_CONSECUTIVE_FAILURES_THRESHOLD, WEB_WALLET_URL, WELLKNOWN_ACME_CHALLENGE_PREFIX, WELLKNOWN_ANALYTICS_PREFIX, WELLKNOWN_BLACKLIST_PREFIX, WELLKNOWN_BLOCKLET_ADMIN_PATH, WELLKNOWN_BLOCKLET_HEALTH_PATH, WELLKNOWN_BLOCKLET_LOGO_PATH, WELLKNOWN_BLOCKLET_USER_PATH, WELLKNOWN_DID_RESOLVER_PREFIX, WELLKNOWN_OAUTH_SERVER, WELLKNOWN_OPENID_SERVER, WELLKNOWN_PATH_PREFIX, WELLKNOWN_PING_PREFIX, WELLKNOWN_SERVER_ADMIN_PATH, WELLKNOWN_SERVICE_PATH_PREFIX, WHO_CAN_ACCESS, WHO_CAN_ACCESS_PREFIX_ROLES, genPermissionName, isBlockletMultipleTenantRole, isBlockletRole, isSystemRole };