@abtnode/webapp 1.8.63-beta-a36b5e1a → 1.8.63
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/blocklet.yml +6 -3
- package/build/asset-manifest.json +93 -0
- package/build/favicon.ico +0 -0
- package/build/icons/css/all.css +5919 -0
- package/build/icons/css/brands.css +14 -0
- package/build/icons/css/brands.min.css +12 -0
- package/build/icons/css/fontawesome.css +7816 -0
- package/build/icons/css/fontawesome.min.css +5864 -0
- package/build/icons/css/light.css +15 -0
- package/build/icons/css/light.min.css +13 -0
- package/build/icons/webfonts/fa-brands-400.eot +0 -0
- package/build/icons/webfonts/fa-brands-400.svg +1256 -0
- package/build/icons/webfonts/fa-brands-400.ttf +0 -0
- package/build/icons/webfonts/fa-brands-400.woff +0 -0
- package/build/icons/webfonts/fa-brands-400.woff2 +0 -0
- package/build/icons/webfonts/fa-light-300.eot +0 -0
- package/build/icons/webfonts/fa-light-300.svg +4445 -0
- package/build/icons/webfonts/fa-light-300.ttf +0 -0
- package/build/icons/webfonts/fa-light-300.woff +0 -0
- package/build/icons/webfonts/fa-light-300.woff2 +0 -0
- package/build/images/blocklet.png +0 -0
- package/build/images/blocklets-00c2c4.png +0 -0
- package/build/images/blocklets-222222.png +0 -0
- package/build/images/celebrate.png +0 -0
- package/build/images/community.svg +6 -0
- package/build/images/console-00c2c4.png +0 -0
- package/build/images/console-222222.png +0 -0
- package/build/images/dashboard-00c2c4.png +0 -0
- package/build/images/dashboard-222222.png +0 -0
- package/build/images/doc-222222.png +0 -0
- package/build/images/hourglass-222222.png +0 -0
- package/build/images/https-certificate-icon.png +0 -0
- package/build/images/labs-00c2c4.png +0 -0
- package/build/images/labs-222222.png +0 -0
- package/build/images/log-00c2c4.png +0 -0
- package/build/images/log-222222.png +0 -0
- package/build/images/member-222222.png +0 -0
- package/build/images/node.png +0 -0
- package/build/images/official.svg +1 -0
- package/build/images/private-222222.png +0 -0
- package/build/images/public-222222.png +0 -0
- package/build/images/public_avatar.png +0 -0
- package/build/images/router-00c2c4.png +0 -0
- package/build/images/router-222222.png +0 -0
- package/build/images/settings-00c2c4.png +0 -0
- package/build/images/settings-222222.png +0 -0
- package/build/images/slack.png +0 -0
- package/build/images/storage-222222.png +0 -0
- package/build/images/store-00c2c4.png +0 -0
- package/build/images/store-222222.png +0 -0
- package/build/images/team-00c2c4.png +0 -0
- package/build/images/team-222222.png +0 -0
- package/build/images/time-222222.png +0 -0
- package/build/images/upgrade.png +0 -0
- package/build/index.html +1 -0
- package/build/manifest.json +15 -0
- package/build/static/css/4381.5ade355d.chunk.css +1 -0
- package/build/static/css/4691.56c2f951.chunk.css +1 -0
- package/build/static/css/5245.5d6e9197.chunk.css +1 -0
- package/build/static/css/8213.f696fdbf.chunk.css +1 -0
- package/build/static/css/9779.f696fdbf.chunk.css +1 -0
- package/build/static/css/main.c9e90622.css +1 -0
- package/build/static/images/logo.png +0 -0
- package/build/static/js/1057.8280393f.chunk.js +1 -0
- package/build/static/js/1361.85e46159.chunk.js +1 -0
- package/build/static/js/1366.2f174c9b.chunk.js +2 -0
- package/build/static/js/1366.2f174c9b.chunk.js.LICENSE.txt +37 -0
- package/build/static/js/154.94956824.chunk.js +1 -0
- package/build/static/js/1826.07c285de.chunk.js +1 -0
- package/build/static/js/2129.120e36ae.chunk.js +1 -0
- package/build/static/js/2308.b65bc299.chunk.js +1 -0
- package/build/static/js/2564.eef717f3.chunk.js +1 -0
- package/build/static/js/2657.d3c62d57.chunk.js +1 -0
- package/build/static/js/2720.26eb1788.chunk.js +1 -0
- package/build/static/js/2828.4f318970.chunk.js +1 -0
- package/build/static/js/2878.5626558d.chunk.js +1 -0
- package/build/static/js/3111.84e02823.chunk.js +1 -0
- package/build/static/js/3476.c0b3411b.chunk.js +1 -0
- package/build/static/js/3633.8c7cf02d.chunk.js +1 -0
- package/build/static/js/3732.f5d8b39b.chunk.js +1 -0
- package/build/static/js/3776.1490b0f7.chunk.js +1 -0
- package/build/static/js/3829.b6d6cf45.chunk.js +1 -0
- package/build/static/js/4074.19db40ec.chunk.js +1 -0
- package/build/static/js/4104.b47ae0e1.chunk.js +1 -0
- package/build/static/js/4241.83e4f741.chunk.js +1 -0
- package/build/static/js/4274.e18ffddd.chunk.js +1 -0
- package/build/static/js/4349.7c2f6507.chunk.js +1 -0
- package/build/static/js/4381.631ef61d.chunk.js +2 -0
- package/build/static/js/4381.631ef61d.chunk.js.LICENSE.txt +22 -0
- package/build/static/js/4557.3907550e.chunk.js +1 -0
- package/build/static/js/4590.5a14012c.chunk.js +1 -0
- package/build/static/js/4633.9f946ed5.chunk.js +1 -0
- package/build/static/js/4691.550fcb40.chunk.js +2 -0
- package/build/static/js/4691.550fcb40.chunk.js.LICENSE.txt +8 -0
- package/build/static/js/5074.9ea094a9.chunk.js +1 -0
- package/build/static/js/5082.18d16cb9.chunk.js +1 -0
- package/build/static/js/519.adae6e43.chunk.js +1 -0
- package/build/static/js/556.381dcbd8.chunk.js +1 -0
- package/build/static/js/5984.25af6288.chunk.js +1 -0
- package/build/static/js/6158.8a43296d.chunk.js +1 -0
- package/build/static/js/6189.d6d74d14.chunk.js +1 -0
- package/build/static/js/6239.5a873a03.chunk.js +2 -0
- package/build/static/js/6239.5a873a03.chunk.js.LICENSE.txt +14 -0
- package/build/static/js/629.1a7f2553.chunk.js +1 -0
- package/build/static/js/6413.ab4a8e01.chunk.js +1 -0
- package/build/static/js/6602.c417a217.chunk.js +1 -0
- package/build/static/js/6780.64314507.chunk.js +1 -0
- package/build/static/js/6830.88b993a0.chunk.js +1 -0
- package/build/static/js/6866.2131ea60.chunk.js +2 -0
- package/build/static/js/6866.2131ea60.chunk.js.LICENSE.txt +8 -0
- package/build/static/js/6898.6fe0c32d.chunk.js +2 -0
- package/build/static/js/6898.6fe0c32d.chunk.js.LICENSE.txt +5 -0
- package/build/static/js/7016.835958ef.chunk.js +1 -0
- package/build/static/js/7298.a7286c09.chunk.js +1 -0
- package/build/static/js/7327.56a5e016.chunk.js +1 -0
- package/build/static/js/744.8b656dd2.chunk.js +1 -0
- package/build/static/js/7652.722b9180.chunk.js +1 -0
- package/build/static/js/8034.c4dcdeff.chunk.js +1 -0
- package/build/static/js/8058.0b2d4727.chunk.js +1 -0
- package/build/static/js/8213.09f25083.chunk.js +1 -0
- package/build/static/js/8235.add24931.chunk.js +1 -0
- package/build/static/js/8249.63c55b3a.chunk.js +1 -0
- package/build/static/js/8262.869cc799.chunk.js +1 -0
- package/build/static/js/8352.b57b0e44.chunk.js +1 -0
- package/build/static/js/8464.b4b82828.chunk.js +1 -0
- package/build/static/js/8606.66db67e2.chunk.js +1 -0
- package/build/static/js/9038.2908c176.chunk.js +1 -0
- package/build/static/js/9076.c77366bc.chunk.js +1 -0
- package/build/static/js/9301.a65db324.chunk.js +2 -0
- package/build/static/js/9301.a65db324.chunk.js.LICENSE.txt +8 -0
- package/build/static/js/9575.36f3de5b.chunk.js +2 -0
- package/build/static/js/9575.36f3de5b.chunk.js.LICENSE.txt +194 -0
- package/build/static/js/9779.bbf0dd81.chunk.js +1 -0
- package/build/static/js/main.cb5d8d67.js +2 -0
- package/build/static/js/main.cb5d8d67.js.LICENSE.txt +159 -0
- package/build/static/media/iconify.32b54549e843e448ee9b.cjs +2 -0
- package/build/static/media/iconify.32b54549e843e448ee9b.cjs.LICENSE.txt +13 -0
- package/build/static/media/lato-all-400-normal.3dc1eff492ab1f598560.woff +0 -0
- package/build/static/media/lato-all-700-normal.1e7707c9ec98d9b97e7f.woff +0 -0
- package/build/static/media/lato-latin-400-normal.be36596da218e1eec01c.woff2 +0 -0
- package/build/static/media/lato-latin-700-normal.8f28e0e1fdb195149f1c.woff2 +0 -0
- package/build/static/media/lato-latin-ext-400-normal.361f3dbb9db6a5980326.woff2 +0 -0
- package/build/static/media/lato-latin-ext-700-normal.9c8812eaec45956201e1.woff2 +0 -0
- package/build/static/media/logo.60f66bbe1ce9674a4df4e374c9d97fc4.svg +16 -0
- package/build/static/media/ubuntu-mono-all-400-normal.c879328bc62e9c68268f.woff +0 -0
- package/build/static/media/ubuntu-mono-cyrillic-400-normal.c367f416832eb8f1b846.woff2 +0 -0
- package/build/static/media/ubuntu-mono-cyrillic-ext-400-normal.eda1c4946b1f7bf58386.woff2 +0 -0
- package/build/static/media/ubuntu-mono-greek-400-normal.22f3bfc91f79c342bdf4.woff2 +0 -0
- package/build/static/media/ubuntu-mono-greek-ext-400-normal.b3459900ea8a25d1f7c2.woff2 +0 -0
- package/build/static/media/ubuntu-mono-latin-400-normal.18e32d9d743af28f913e.woff2 +0 -0
- package/build/static/media/ubuntu-mono-latin-ext-400-normal.b56e2315611d10838ad5.woff2 +0 -0
- package/package.json +1 -1
- package/api/gql/config.js +0 -392
- package/api/gql/index.js +0 -102
- package/api/gql/middlewares/create-audit-log.js +0 -3
- package/api/gql/middlewares/get-blocklet-list.js +0 -14
- package/api/gql/middlewares/install-blocklet.js +0 -13
- package/api/gql/middlewares/verify-blocklet.js +0 -21
- package/api/gql/middlewares/verify-team.js +0 -9
- package/api/index.js +0 -249
- package/api/libs/auth.js +0 -78
- package/api/libs/env.js +0 -3
- package/api/libs/login.js +0 -212
- package/api/libs/security.js +0 -90
- package/api/libs/storage.js +0 -69
- package/api/middlewares/mutate-blocklet-permission.js +0 -18
- package/api/routes/auth/accept-server.js +0 -28
- package/api/routes/auth/connect-owner.js +0 -143
- package/api/routes/auth/delegate-transfer-owner-nft.js +0 -86
- package/api/routes/auth/invite.js +0 -93
- package/api/routes/auth/issue-passport.js +0 -61
- package/api/routes/auth/launch-free-blocklet-by-nft.js +0 -9
- package/api/routes/auth/launch-free-blocklet.js +0 -9
- package/api/routes/auth/launch-paid-blocklet-by-nft.js +0 -9
- package/api/routes/auth/launch-paid-blocklet.js +0 -9
- package/api/routes/auth/login.js +0 -63
- package/api/routes/auth/lost-passport-issue.js +0 -5
- package/api/routes/auth/lost-passport-list.js +0 -5
- package/api/routes/auth/switch-passport.js +0 -47
- package/api/routes/auth/switch-profile.js +0 -69
- package/api/routes/auth/util.js +0 -135
- package/api/routes/auth/verify-owner.js +0 -39
- package/api/routes/auth/verify-purchase.js +0 -185
- package/api/routes/blocklet-info.js +0 -246
- package/api/routes/blocklet-preference.js +0 -161
- package/api/routes/blocklet-proxy.js +0 -220
- package/api/routes/did-resolver.js +0 -38
- package/api/routes/dns-resolver.js +0 -73
- package/api/routes/log.js +0 -31
- package/api/routes/passport.js +0 -19
- package/api/routes/session.js +0 -61
- package/api/routes/user.js +0 -38
- package/api/util/find-routing-rule.js +0 -95
- package/api/util/get-configs.js +0 -31
- package/api/util/index.js +0 -5
- package/api/util/navigation.js +0 -84
- package/api/webpack.blocklet.js +0 -43
- package/api/ws/index.js +0 -146
package/api/gql/config.js
DELETED
|
@@ -1,392 +0,0 @@
|
|
|
1
|
-
/* eslint-disable no-await-in-loop */
|
|
2
|
-
const verifyTeam = require('./middlewares/verify-team');
|
|
3
|
-
const verifyBlocklet = require('./middlewares/verify-blocklet');
|
|
4
|
-
const createAuditLog = require('./middlewares/create-audit-log');
|
|
5
|
-
const installBlocklet = require('./middlewares/install-blocklet');
|
|
6
|
-
const getBlockletList = require('./middlewares/get-blocklet-list');
|
|
7
|
-
|
|
8
|
-
const wrap = ([permissions, dataKeys, handler, preHooks = [], postHooks = [], action, node]) => {
|
|
9
|
-
return {
|
|
10
|
-
permissions,
|
|
11
|
-
dataKeys,
|
|
12
|
-
handler: new Proxy(handler, {
|
|
13
|
-
async apply(target, ctx, args) {
|
|
14
|
-
const [input, context] = args;
|
|
15
|
-
// run pre hooks: should abort the request when any hook throws
|
|
16
|
-
for (let i = 0; i < preHooks.length; i++) {
|
|
17
|
-
await Reflect.apply(preHooks[i], ctx, [input, context, node, action]);
|
|
18
|
-
}
|
|
19
|
-
|
|
20
|
-
// run handler
|
|
21
|
-
const result = await Reflect.apply(target, ctx, args);
|
|
22
|
-
|
|
23
|
-
// run post hooks: should not effect the request when any hook throws
|
|
24
|
-
for (let i = 0; i < postHooks.length; i++) {
|
|
25
|
-
Reflect.apply(postHooks[i], ctx, [input, context, node, action, result]);
|
|
26
|
-
}
|
|
27
|
-
|
|
28
|
-
return result;
|
|
29
|
-
},
|
|
30
|
-
}),
|
|
31
|
-
};
|
|
32
|
-
};
|
|
33
|
-
|
|
34
|
-
/**
|
|
35
|
-
* { <gql_api>: [permissions, gql_api_return_key, gql_api_handler] }
|
|
36
|
-
*/
|
|
37
|
-
const genConfig = node => {
|
|
38
|
-
const configs = {
|
|
39
|
-
// Blocklet registry
|
|
40
|
-
getBlockletMeta: [['query_blocklets'], 'meta', node.getBlockletMeta],
|
|
41
|
-
|
|
42
|
-
// Blocklet manager
|
|
43
|
-
getBlocklet: [['query_blocklets', 'query_blocklet'], 'blocklet', node.getBlocklet, [verifyBlocklet]],
|
|
44
|
-
getBlocklets: [['query_blocklets'], 'blocklets', node.getBlocklets, [getBlockletList]],
|
|
45
|
-
getBlockletDiff: [['query_blocklets', 'query_blocklet'], 'blockletDiff', node.getBlockletDiff, [verifyBlocklet]],
|
|
46
|
-
getBlockletRuntimeHistory: [
|
|
47
|
-
['query_blocklets', 'query_blocklet'],
|
|
48
|
-
'history',
|
|
49
|
-
node.getBlockletRuntimeHistory,
|
|
50
|
-
[verifyBlocklet],
|
|
51
|
-
],
|
|
52
|
-
|
|
53
|
-
getLatestBlockletVersion: [
|
|
54
|
-
['query_blocklets', 'query_blocklet'],
|
|
55
|
-
'data',
|
|
56
|
-
node.getLatestBlockletVersion,
|
|
57
|
-
[verifyBlocklet],
|
|
58
|
-
],
|
|
59
|
-
getBlockletMetaFromUrl: [[], ['meta', 'isFree', 'inStore', 'registryUrl'], node.getBlockletMetaFromUrl],
|
|
60
|
-
getBlockletByBundle: [
|
|
61
|
-
['query_blocklets'],
|
|
62
|
-
['blockletDid', 'isExternal', 'isInstalled', 'isRunning'],
|
|
63
|
-
node.getBlockletByBundle,
|
|
64
|
-
[verifyBlocklet],
|
|
65
|
-
],
|
|
66
|
-
installBlocklet: [['mutate_blocklets'], 'blocklet', node.installBlocklet, [installBlocklet]],
|
|
67
|
-
installBlockletFromVc: [['mutate_blocklets'], 'blocklet', node.installBlockletFromVc, []],
|
|
68
|
-
installComponent: [
|
|
69
|
-
['mutate_blocklets', 'mutate_blocklet'],
|
|
70
|
-
'blocklet',
|
|
71
|
-
node.installComponent,
|
|
72
|
-
[verifyBlocklet],
|
|
73
|
-
[createAuditLog],
|
|
74
|
-
],
|
|
75
|
-
startBlocklet: [
|
|
76
|
-
['mutate_blocklets', 'mutate_blocklet'],
|
|
77
|
-
'blocklet',
|
|
78
|
-
node.startBlocklet,
|
|
79
|
-
[verifyBlocklet],
|
|
80
|
-
[createAuditLog],
|
|
81
|
-
],
|
|
82
|
-
stopBlocklet: [
|
|
83
|
-
['mutate_blocklets', 'mutate_blocklet'],
|
|
84
|
-
'blocklet',
|
|
85
|
-
node.stopBlocklet,
|
|
86
|
-
[verifyBlocklet],
|
|
87
|
-
[createAuditLog],
|
|
88
|
-
],
|
|
89
|
-
reloadBlocklet: [
|
|
90
|
-
['mutate_blocklets', 'mutate_blocklet'],
|
|
91
|
-
'blocklet',
|
|
92
|
-
node.reloadBlocklet,
|
|
93
|
-
[verifyBlocklet],
|
|
94
|
-
[createAuditLog],
|
|
95
|
-
],
|
|
96
|
-
restartBlocklet: [
|
|
97
|
-
['mutate_blocklets', 'mutate_blocklet'],
|
|
98
|
-
'blocklet',
|
|
99
|
-
node.restartBlocklet,
|
|
100
|
-
[verifyBlocklet],
|
|
101
|
-
[createAuditLog],
|
|
102
|
-
],
|
|
103
|
-
deleteBlocklet: [
|
|
104
|
-
['mutate_blocklets', 'mutate_blocklet'],
|
|
105
|
-
'blocklet',
|
|
106
|
-
node.deleteBlocklet,
|
|
107
|
-
[verifyBlocklet],
|
|
108
|
-
[createAuditLog],
|
|
109
|
-
],
|
|
110
|
-
deleteComponent: [
|
|
111
|
-
['mutate_blocklets', 'mutate_blocklet'],
|
|
112
|
-
'blocklet',
|
|
113
|
-
node.deleteComponent,
|
|
114
|
-
[verifyBlocklet],
|
|
115
|
-
[createAuditLog],
|
|
116
|
-
],
|
|
117
|
-
cancelDownloadBlocklet: [
|
|
118
|
-
['mutate_blocklets', 'mutate_blocklet'],
|
|
119
|
-
'blocklet',
|
|
120
|
-
node.cancelDownloadBlocklet,
|
|
121
|
-
[verifyBlocklet],
|
|
122
|
-
[createAuditLog],
|
|
123
|
-
],
|
|
124
|
-
upgradeBlocklet: [['mutate_blocklets', 'mutate_blocklet'], 'blocklet', node.upgradeBlocklet, [verifyBlocklet]],
|
|
125
|
-
configBlocklet: [
|
|
126
|
-
['mutate_blocklets', 'mutate_blocklet'],
|
|
127
|
-
'blocklet',
|
|
128
|
-
node.configBlocklet,
|
|
129
|
-
[verifyBlocklet],
|
|
130
|
-
[createAuditLog],
|
|
131
|
-
],
|
|
132
|
-
checkComponentsForUpdates: [
|
|
133
|
-
['mutate_blocklets', 'mutate_blocklet'],
|
|
134
|
-
'preUpdateInfo',
|
|
135
|
-
node.checkComponentsForUpdates,
|
|
136
|
-
[verifyBlocklet],
|
|
137
|
-
],
|
|
138
|
-
upgradeComponents: [
|
|
139
|
-
['mutate_blocklets', 'mutate_blocklet'],
|
|
140
|
-
'blocklet',
|
|
141
|
-
node.upgradeComponents,
|
|
142
|
-
[verifyBlocklet],
|
|
143
|
-
[createAuditLog],
|
|
144
|
-
],
|
|
145
|
-
configPublicToStore: [
|
|
146
|
-
['mutate_blocklets', 'mutate_blocklet'],
|
|
147
|
-
'blocklet',
|
|
148
|
-
node.configPublicToStore,
|
|
149
|
-
[verifyBlocklet],
|
|
150
|
-
[createAuditLog],
|
|
151
|
-
],
|
|
152
|
-
configNavigations: [
|
|
153
|
-
['mutate_blocklets', 'mutate_blocklet'],
|
|
154
|
-
'blocklet',
|
|
155
|
-
node.configNavigations,
|
|
156
|
-
[verifyBlocklet],
|
|
157
|
-
[createAuditLog],
|
|
158
|
-
],
|
|
159
|
-
updateWhoCanAccess: [
|
|
160
|
-
['mutate_blocklets', 'mutate_blocklet'],
|
|
161
|
-
'blocklet',
|
|
162
|
-
node.updateWhoCanAccess,
|
|
163
|
-
[verifyBlocklet],
|
|
164
|
-
[createAuditLog],
|
|
165
|
-
],
|
|
166
|
-
updateComponentTitle: [
|
|
167
|
-
['mutate_blocklets', 'mutate_blocklet'],
|
|
168
|
-
'blocklet',
|
|
169
|
-
node.updateComponentTitle,
|
|
170
|
-
[verifyBlocklet],
|
|
171
|
-
[createAuditLog],
|
|
172
|
-
],
|
|
173
|
-
updateComponentMountPoint: [
|
|
174
|
-
['mutate_blocklets', 'mutate_blocklet'],
|
|
175
|
-
'blocklet',
|
|
176
|
-
node.updateComponentMountPoint,
|
|
177
|
-
[verifyBlocklet],
|
|
178
|
-
[createAuditLog],
|
|
179
|
-
],
|
|
180
|
-
|
|
181
|
-
// Team Access Control
|
|
182
|
-
getRoles: [['query_team'], 'roles', node.getRoles, [verifyTeam]],
|
|
183
|
-
createRole: [['mutate_team'], 'role', node.createRole, [verifyTeam], [createAuditLog]],
|
|
184
|
-
updateRole: [['mutate_team'], 'role', node.updateRole, [verifyTeam], [createAuditLog]],
|
|
185
|
-
deleteRole: [['mutate_team'], 'success', node.deleteRole, [verifyTeam], [createAuditLog]],
|
|
186
|
-
|
|
187
|
-
getPermissions: [['query_team'], 'permissions', node.getPermissions, [verifyTeam]],
|
|
188
|
-
createPermission: [['mutate_team'], 'permission', node.createPermission, [verifyTeam], [createAuditLog]],
|
|
189
|
-
updatePermission: [['mutate_team'], 'role', node.updatePermission, [verifyTeam], [createAuditLog]],
|
|
190
|
-
deletePermission: [['mutate_team'], 'success', node.deletePermission, [verifyTeam], [createAuditLog]],
|
|
191
|
-
|
|
192
|
-
grantPermissionForRole: [['mutate_team'], 'success', node.grantPermissionForRole, [verifyTeam], [createAuditLog]],
|
|
193
|
-
revokePermissionFromRole: [
|
|
194
|
-
['mutate_team'],
|
|
195
|
-
'success',
|
|
196
|
-
node.revokePermissionFromRole,
|
|
197
|
-
[verifyTeam],
|
|
198
|
-
[createAuditLog],
|
|
199
|
-
],
|
|
200
|
-
updatePermissionsForRole: [['mutate_team'], 'role', node.updatePermissionsForRole, [verifyTeam], [createAuditLog]],
|
|
201
|
-
getPermissionsByRole: [['query_team'], 'permissions', node.getPermissionsByRole, [verifyTeam]],
|
|
202
|
-
hasPermission: [['query_team'], 'result', node.hasPermission, [verifyTeam]],
|
|
203
|
-
|
|
204
|
-
// Team User
|
|
205
|
-
getUsers: [['query_team'], ['users', 'paging'], node.getUsers, [verifyTeam]],
|
|
206
|
-
getUser: [['query_team'], 'user', node.getUser, [verifyTeam]],
|
|
207
|
-
getUsersCountPerRole: [['query_team'], 'counts', node.getUsersCountPerRole, [verifyTeam]],
|
|
208
|
-
getOwner: [['query_team'], 'user', node.getOwner, [verifyTeam]],
|
|
209
|
-
removeUser: [['mutate_team'], 'user', node.removeUser, [verifyTeam], [createAuditLog]],
|
|
210
|
-
updateUserApproval: [['mutate_team'], 'user', node.updateUserApproval, [verifyTeam], [createAuditLog]],
|
|
211
|
-
updateUserRole: [['mutate_team'], 'user', node.updateUserRole, [verifyTeam], [createAuditLog]],
|
|
212
|
-
getInvitations: [['query_team'], 'invitations', node.getInvitations, [verifyTeam]],
|
|
213
|
-
createMemberInvitation: [
|
|
214
|
-
['mutate_team'],
|
|
215
|
-
'inviteInfo',
|
|
216
|
-
node.createMemberInvitation,
|
|
217
|
-
[verifyTeam],
|
|
218
|
-
[createAuditLog],
|
|
219
|
-
],
|
|
220
|
-
createTransferInvitation: [
|
|
221
|
-
['mutate_team'],
|
|
222
|
-
'inviteInfo',
|
|
223
|
-
node.createTransferInvitation,
|
|
224
|
-
[verifyTeam],
|
|
225
|
-
[createAuditLog],
|
|
226
|
-
],
|
|
227
|
-
deleteInvitation: [['mutate_team'], 'invitation', node.deleteInvitation, [verifyTeam], [createAuditLog]],
|
|
228
|
-
|
|
229
|
-
// Team Passport
|
|
230
|
-
getPassportIssuances: [['query_team'], 'list', node.getPassportIssuances, [verifyTeam]],
|
|
231
|
-
createPassportIssuance: [['mutate_team'], 'info', node.createPassportIssuance, [verifyTeam], [createAuditLog]],
|
|
232
|
-
deletePassportIssuance: [
|
|
233
|
-
['mutate_team'],
|
|
234
|
-
'invitation',
|
|
235
|
-
node.deletePassportIssuance,
|
|
236
|
-
[verifyTeam],
|
|
237
|
-
[createAuditLog],
|
|
238
|
-
],
|
|
239
|
-
issuePassportToUser: [['mutate_team'], 'user', node.issuePassportToUser, [verifyTeam], [createAuditLog]],
|
|
240
|
-
revokeUserPassport: [['mutate_team'], 'user', node.revokeUserPassport, [verifyTeam], [createAuditLog]],
|
|
241
|
-
enableUserPassport: [['mutate_team'], 'user', node.enableUserPassport, [verifyTeam], [createAuditLog]],
|
|
242
|
-
configTrustedPassports: [['mutate_team'], 'info', node.configTrustedPassports, [verifyTeam], [createAuditLog]],
|
|
243
|
-
configPassportIssuance: [['mutate_team'], 'info', node.configPassportIssuance, [verifyTeam], [createAuditLog]],
|
|
244
|
-
|
|
245
|
-
// Team Settings
|
|
246
|
-
addBlockletStore: [['mutate_team'], 'info', node.addBlockletStore, [verifyTeam], [createAuditLog]],
|
|
247
|
-
deleteBlockletStore: [['mutate_team'], 'info', node.deleteBlockletStore, [verifyTeam], [createAuditLog]],
|
|
248
|
-
|
|
249
|
-
// Access Keys
|
|
250
|
-
getAccessKeys: [['query_accessKey'], 'list', node.getAccessKeys],
|
|
251
|
-
createAccessKey: [['mutate_accessKey'], 'data', node.createAccessKey, [], [createAuditLog]],
|
|
252
|
-
deleteAccessKey: [['mutate_accessKey'], 'data', node.deleteAccessKey, [], [createAuditLog]],
|
|
253
|
-
updateAccessKey: [['mutate_accessKey'], 'data', node.updateAccessKey, [], [createAuditLog]],
|
|
254
|
-
|
|
255
|
-
// Router
|
|
256
|
-
getRoutingSites: [['query_router'], 'sites', node.getRoutingSites],
|
|
257
|
-
getRoutingProviders: [['query_router'], 'providers', node.getRoutingProviders],
|
|
258
|
-
|
|
259
|
-
addRoutingSite: [['mutate_router'], 'site', node.addRoutingSite, [], [createAuditLog]],
|
|
260
|
-
deleteRoutingSite: [['mutate_router'], 'site', node.deleteRoutingSite, [], [createAuditLog]],
|
|
261
|
-
updateRoutingSite: [
|
|
262
|
-
['mutate_router', 'mutate_blocklet'],
|
|
263
|
-
'site',
|
|
264
|
-
node.updateRoutingSite,
|
|
265
|
-
[verifyBlocklet],
|
|
266
|
-
[createAuditLog],
|
|
267
|
-
],
|
|
268
|
-
|
|
269
|
-
addRoutingRule: [
|
|
270
|
-
['mutate_router', 'mutate_blocklet'],
|
|
271
|
-
'site',
|
|
272
|
-
node.addRoutingRule,
|
|
273
|
-
[verifyBlocklet],
|
|
274
|
-
[createAuditLog],
|
|
275
|
-
],
|
|
276
|
-
updateRoutingRule: [
|
|
277
|
-
['mutate_router', 'mutate_blocklet'],
|
|
278
|
-
'site',
|
|
279
|
-
node.updateRoutingRule,
|
|
280
|
-
[verifyBlocklet],
|
|
281
|
-
[createAuditLog],
|
|
282
|
-
],
|
|
283
|
-
deleteRoutingRule: [
|
|
284
|
-
['mutate_router', 'mutate_blocklet'],
|
|
285
|
-
'site',
|
|
286
|
-
node.deleteRoutingRule,
|
|
287
|
-
[verifyBlocklet],
|
|
288
|
-
[createAuditLog],
|
|
289
|
-
],
|
|
290
|
-
|
|
291
|
-
addDomainAlias: [
|
|
292
|
-
['mutate_router', 'mutate_blocklet'],
|
|
293
|
-
'site',
|
|
294
|
-
node.addDomainAlias,
|
|
295
|
-
[verifyBlocklet],
|
|
296
|
-
[createAuditLog],
|
|
297
|
-
],
|
|
298
|
-
deleteDomainAlias: [
|
|
299
|
-
['mutate_router', 'mutate_blocklet'],
|
|
300
|
-
'site',
|
|
301
|
-
node.deleteDomainAlias,
|
|
302
|
-
[verifyBlocklet],
|
|
303
|
-
[createAuditLog],
|
|
304
|
-
],
|
|
305
|
-
|
|
306
|
-
// Router Snapshots
|
|
307
|
-
getRoutingSnapshots: [['query_router'], 'snapshots', node.getRoutingSnapshots],
|
|
308
|
-
getSnapshotSites: [['query_router'], 'sites', node.getSnapshotSites],
|
|
309
|
-
takeRoutingSnapshot: [['query_router'], 'hash', node.takeRoutingSnapshot],
|
|
310
|
-
|
|
311
|
-
checkDomains: [['query_router', 'query_blocklet'], 'result', node.checkDomains, [verifyBlocklet]],
|
|
312
|
-
findCertificateByDomain: [
|
|
313
|
-
['query_router', 'query_blocklet'],
|
|
314
|
-
'cert',
|
|
315
|
-
node.findCertificateByDomain,
|
|
316
|
-
[verifyBlocklet],
|
|
317
|
-
],
|
|
318
|
-
|
|
319
|
-
// Router Certificates
|
|
320
|
-
getCertificates: [['query_router', 'query_certificate'], 'certificates', node.getCertificates],
|
|
321
|
-
addCertificate: [['mutate_router', 'mutate_certificate'], 'certificate', node.addCertificate, [], [createAuditLog]],
|
|
322
|
-
updateCertificate: [
|
|
323
|
-
['mutate_router', 'mutate_certificate'],
|
|
324
|
-
'certificate',
|
|
325
|
-
node.updateCertificate,
|
|
326
|
-
[],
|
|
327
|
-
[createAuditLog],
|
|
328
|
-
],
|
|
329
|
-
deleteCertificate: [
|
|
330
|
-
['mutate_router', 'mutate_certificate'],
|
|
331
|
-
'certificate',
|
|
332
|
-
node.deleteCertificate,
|
|
333
|
-
[],
|
|
334
|
-
[createAuditLog],
|
|
335
|
-
],
|
|
336
|
-
issueLetsEncryptCert: [
|
|
337
|
-
['mutate_certificate', 'mutate_blocklet'],
|
|
338
|
-
'certificate',
|
|
339
|
-
node.issueLetsEncryptCert,
|
|
340
|
-
[verifyBlocklet],
|
|
341
|
-
[createAuditLog],
|
|
342
|
-
],
|
|
343
|
-
|
|
344
|
-
// Gateway
|
|
345
|
-
updateGateway: [['mutate_node'], 'gateway', node.updateGateway, [], [createAuditLog]],
|
|
346
|
-
|
|
347
|
-
// Node
|
|
348
|
-
getNodeInfo: [[], 'info', node.getNodeInfo],
|
|
349
|
-
getNodeEnv: [['query_node'], 'info', node.getNodeEnv],
|
|
350
|
-
updateNodeInfo: [['mutate_node'], 'info', node.updateNodeInfo, [], [createAuditLog]],
|
|
351
|
-
updateNodeRouting: [['mutate_node'], 'info', node.updateNodeRouting, [], [createAuditLog]],
|
|
352
|
-
upgradeNodeVersion: [['mutate_node'], 'sessionId', node.upgradeNodeVersion, [], [createAuditLog]],
|
|
353
|
-
restartServer: [['mutate_node'], 'sessionId', node.restartServer, [], [createAuditLog]],
|
|
354
|
-
checkNodeVersion: [['query_node'], 'version', node.checkNodeVersion],
|
|
355
|
-
resetNode: [['mutate_node'], 'info', node.resetNode],
|
|
356
|
-
getDelegationState: [[], 'state', node.getDelegationState],
|
|
357
|
-
// why use query_node: any member in server can reset node status to running
|
|
358
|
-
resetNodeStatus: [['query_node'], 'info', node.resetNodeStatus],
|
|
359
|
-
getNodeRuntimeHistory: [['query_node'], 'history', node.getNodeRuntimeHistory],
|
|
360
|
-
|
|
361
|
-
// Node Session
|
|
362
|
-
getSession: [['query_session'], 'session', node.getSession],
|
|
363
|
-
startSession: [['mutate_session'], 'session', node.startSession],
|
|
364
|
-
updateSession: [['mutate_session'], 'session', node.updateSession],
|
|
365
|
-
endSession: [['mutate_session'], 'session', node.endSession],
|
|
366
|
-
|
|
367
|
-
// Notifications
|
|
368
|
-
getNotifications: [['query_notification'], ['list', 'paging'], node.getNotifications],
|
|
369
|
-
readNotifications: [['mutate_notification'], 'numAffected', node.readNotifications],
|
|
370
|
-
unreadNotifications: [['mutate_notification'], 'numAffected', node.unreadNotifications],
|
|
371
|
-
|
|
372
|
-
// Webhook
|
|
373
|
-
getWebHooks: [['query_webhook'], 'webhooks', node.getWebHooks],
|
|
374
|
-
createWebHook: [['mutate_webhook'], 'webhook', node.createWebHook, [], [createAuditLog]],
|
|
375
|
-
deleteWebHook: [['mutate_webhook'], 'data', node.deleteWebHook, [], [createAuditLog]],
|
|
376
|
-
getWebhookSenders: [['query_webhook'], 'senders', node.getWebhookSenders],
|
|
377
|
-
sendTestMessage: [['mutate_webhook'], 'data', node.sendTestMessage],
|
|
378
|
-
|
|
379
|
-
// Audit logs
|
|
380
|
-
getAuditLogs: [['query_node', 'query_blocklet'], ['list', 'paging'], node.getAuditLogs, [verifyBlocklet]],
|
|
381
|
-
};
|
|
382
|
-
|
|
383
|
-
return Object.freeze(
|
|
384
|
-
Object.keys(configs).reduce((acc, k) => {
|
|
385
|
-
const [permissions, dataKeys, handler, preHooks = [], postHooks = []] = configs[k];
|
|
386
|
-
acc[k] = wrap([permissions, dataKeys, handler, preHooks, postHooks, k, node]);
|
|
387
|
-
return acc;
|
|
388
|
-
}, {})
|
|
389
|
-
);
|
|
390
|
-
};
|
|
391
|
-
|
|
392
|
-
module.exports = genConfig;
|
package/api/gql/index.js
DELETED
|
@@ -1,102 +0,0 @@
|
|
|
1
|
-
/* eslint-disable default-param-last */
|
|
2
|
-
const cloneDeep = require('lodash/cloneDeep');
|
|
3
|
-
const { graphqlHTTP } = require('express-graphql');
|
|
4
|
-
const GraphQLUpload = require('graphql-upload/GraphQLUpload.js');
|
|
5
|
-
const { makeExecutableSchema } = require('@graphql-tools/schema');
|
|
6
|
-
const { wipeSensitiveData, fixBlockletStatus } = require('@blocklet/meta/lib/util');
|
|
7
|
-
const formatContext = require('@abtnode/util/lib/format-context');
|
|
8
|
-
const schemaSource = require('@abtnode/schema');
|
|
9
|
-
const logger = require('@abtnode/logger')('@abtnode/gql');
|
|
10
|
-
const genConfig = require('./config');
|
|
11
|
-
|
|
12
|
-
const wrapResolver = async ({ name, dataKeys, callback }) => {
|
|
13
|
-
const t = Date.now();
|
|
14
|
-
try {
|
|
15
|
-
const result = await callback();
|
|
16
|
-
|
|
17
|
-
const resultsMap = {};
|
|
18
|
-
if (Array.isArray(dataKeys)) {
|
|
19
|
-
dataKeys.forEach(dataKey => {
|
|
20
|
-
resultsMap[dataKey] = result[dataKey];
|
|
21
|
-
});
|
|
22
|
-
} else {
|
|
23
|
-
resultsMap[dataKeys] = result;
|
|
24
|
-
}
|
|
25
|
-
|
|
26
|
-
if (dataKeys === 'blocklet') {
|
|
27
|
-
const d = cloneDeep(result);
|
|
28
|
-
fixBlockletStatus(d);
|
|
29
|
-
resultsMap[dataKeys] = wipeSensitiveData(d);
|
|
30
|
-
}
|
|
31
|
-
|
|
32
|
-
if (dataKeys === 'blocklets') {
|
|
33
|
-
resultsMap[dataKeys] = cloneDeep(result || []).map(blocklet => {
|
|
34
|
-
fixBlockletStatus(blocklet);
|
|
35
|
-
return wipeSensitiveData(blocklet);
|
|
36
|
-
});
|
|
37
|
-
}
|
|
38
|
-
|
|
39
|
-
// performance metrics
|
|
40
|
-
const ms = Date.now() - t;
|
|
41
|
-
if (ms > 2000) {
|
|
42
|
-
logger.warn('graphql resolver latency', { api: name, time: `${ms}ms` });
|
|
43
|
-
}
|
|
44
|
-
|
|
45
|
-
return {
|
|
46
|
-
code: 'ok',
|
|
47
|
-
...resultsMap,
|
|
48
|
-
};
|
|
49
|
-
/* istanbul ignore next */
|
|
50
|
-
} catch (error) {
|
|
51
|
-
logger.error('graphql resolver error', { error });
|
|
52
|
-
throw error;
|
|
53
|
-
}
|
|
54
|
-
};
|
|
55
|
-
|
|
56
|
-
/**
|
|
57
|
-
* @param {object} configs { <api>: { dataKeys, handler } }
|
|
58
|
-
* @param {boolean} graphiql
|
|
59
|
-
*/
|
|
60
|
-
const createMiddleware = (configs = {}, graphiql = true) => {
|
|
61
|
-
/* istanbul ignore next */
|
|
62
|
-
const specials = {
|
|
63
|
-
addRoutingSite: input => ({ site: input }),
|
|
64
|
-
};
|
|
65
|
-
|
|
66
|
-
const resolvers = Object.entries(configs).reduce((acc, [api, { dataKeys, handler }]) => {
|
|
67
|
-
if (specials[api]) {
|
|
68
|
-
acc[api] = ({ input } = {}, ctx) =>
|
|
69
|
-
wrapResolver({ name: api, dataKeys, callback: () => handler(specials[api](input), formatContext(ctx)) });
|
|
70
|
-
} else {
|
|
71
|
-
acc[api] = ({ input } = {}, ctx) =>
|
|
72
|
-
wrapResolver({ name: api, dataKeys, callback: () => handler(input, formatContext(ctx)) });
|
|
73
|
-
}
|
|
74
|
-
|
|
75
|
-
return acc;
|
|
76
|
-
}, {});
|
|
77
|
-
|
|
78
|
-
return graphqlHTTP({
|
|
79
|
-
schema: makeExecutableSchema({
|
|
80
|
-
typeDefs: schemaSource,
|
|
81
|
-
resolvers: {
|
|
82
|
-
Upload: GraphQLUpload,
|
|
83
|
-
},
|
|
84
|
-
}),
|
|
85
|
-
customFormatErrorFn: error => {
|
|
86
|
-
logger.error('graphql error', { error });
|
|
87
|
-
return {
|
|
88
|
-
message: error.message,
|
|
89
|
-
locations: error.locations,
|
|
90
|
-
stack: error.stack ? error.stack.split('\n') : [],
|
|
91
|
-
path: error.path,
|
|
92
|
-
};
|
|
93
|
-
},
|
|
94
|
-
rootValue: resolvers,
|
|
95
|
-
graphiql,
|
|
96
|
-
});
|
|
97
|
-
};
|
|
98
|
-
|
|
99
|
-
module.exports = createMiddleware;
|
|
100
|
-
module.exports.wrapResolver = wrapResolver;
|
|
101
|
-
module.exports.formatContext = formatContext;
|
|
102
|
-
module.exports.genConfig = genConfig;
|
|
@@ -1,14 +0,0 @@
|
|
|
1
|
-
const { SERVER_ROLES } = require('@abtnode/constant');
|
|
2
|
-
|
|
3
|
-
module.exports = (input, context) => {
|
|
4
|
-
const { role } = context.user;
|
|
5
|
-
|
|
6
|
-
if (role === SERVER_ROLES.EXTERNAL_BLOCKLETS_MANAGER) {
|
|
7
|
-
input.filter = 'external-only';
|
|
8
|
-
return;
|
|
9
|
-
}
|
|
10
|
-
|
|
11
|
-
if (role !== SERVER_ROLES.OWNER) {
|
|
12
|
-
input.filter = 'external-excluded';
|
|
13
|
-
}
|
|
14
|
-
};
|
|
@@ -1,13 +0,0 @@
|
|
|
1
|
-
/* eslint-disable no-unused-vars */
|
|
2
|
-
// const { SERVER_ROLES } = require('@abtnode/constant');
|
|
3
|
-
|
|
4
|
-
// Currently this middleware is not used
|
|
5
|
-
module.exports = (input, context) => {
|
|
6
|
-
// const { did, role, controller } = context.user;
|
|
7
|
-
// if (role === SERVER_ROLES.EXTERNAL_BLOCKLET_CONTROLLER) {
|
|
8
|
-
// input.controller = {
|
|
9
|
-
// ...controller,
|
|
10
|
-
// id: did,
|
|
11
|
-
// };
|
|
12
|
-
// }
|
|
13
|
-
};
|
|
@@ -1,21 +0,0 @@
|
|
|
1
|
-
const { isBlockletRole } = require('@abtnode/constant');
|
|
2
|
-
|
|
3
|
-
module.exports = ({ did, rootDid, scope, teamDid }, context) => {
|
|
4
|
-
const { role, blockletDid } = context.user;
|
|
5
|
-
|
|
6
|
-
let id;
|
|
7
|
-
if (rootDid) {
|
|
8
|
-
id = rootDid;
|
|
9
|
-
} else if (teamDid) {
|
|
10
|
-
id = teamDid;
|
|
11
|
-
} else if (scope) {
|
|
12
|
-
// e.g. scope is blocklet did in getAuditLog
|
|
13
|
-
id = scope;
|
|
14
|
-
} else if (did) {
|
|
15
|
-
id = Array.isArray(did) ? did[0] : did;
|
|
16
|
-
}
|
|
17
|
-
|
|
18
|
-
if (isBlockletRole(role) && blockletDid !== id) {
|
|
19
|
-
throw new Error("You cannot request other blocklet's data");
|
|
20
|
-
}
|
|
21
|
-
};
|
|
@@ -1,9 +0,0 @@
|
|
|
1
|
-
const { isBlockletRole } = require('@abtnode/constant');
|
|
2
|
-
|
|
3
|
-
module.exports = ({ teamDid }, context) => {
|
|
4
|
-
const { role, blockletDid } = context.user;
|
|
5
|
-
|
|
6
|
-
if (isBlockletRole(role) && blockletDid !== teamDid) {
|
|
7
|
-
throw new Error("You cannot request other blocklet's data");
|
|
8
|
-
}
|
|
9
|
-
};
|