@blocklet/sdk 1.16.7 → 1.16.8-beta-ca58a421
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/component/index.js +5 -9
- package/lib/middlewares/component.js +2 -7
- package/lib/service/auth.d.ts +1 -0
- package/lib/service/auth.js +12 -0
- package/lib/util/service-api.d.ts +6 -0
- package/lib/util/service-api.js +36 -0
- package/lib/util/verify-sign.d.ts +10 -0
- package/lib/util/verify-sign.js +27 -0
- package/lib/version.d.ts +1 -1
- package/lib/version.js +1 -1
- package/package.json +7 -7
package/lib/component/index.js
CHANGED
|
@@ -6,11 +6,10 @@ Object.defineProperty(exports, "__esModule", { value: true });
|
|
|
6
6
|
exports.getParentWebEndpoint = exports.getChildWebEndpoint = exports.getComponentWebEndpoint = exports.getComponentMountPoint = exports.call = void 0;
|
|
7
7
|
const util_1 = require("@blocklet/meta/lib/util");
|
|
8
8
|
const axios_1 = __importDefault(require("axios"));
|
|
9
|
-
const json_stable_stringify_1 = __importDefault(require("json-stable-stringify"));
|
|
10
9
|
const get_1 = __importDefault(require("lodash/get"));
|
|
11
10
|
const url_join_1 = __importDefault(require("url-join"));
|
|
12
11
|
const config_1 = require("../config");
|
|
13
|
-
const
|
|
12
|
+
const verify_sign_1 = require("../util/verify-sign");
|
|
14
13
|
const parseMountPoints = () => {
|
|
15
14
|
const mountPoints = JSON.parse(process.env.BLOCKLET_MOUNT_POINTS) || [];
|
|
16
15
|
mountPoints.forEach((x) => {
|
|
@@ -20,18 +19,15 @@ const parseMountPoints = () => {
|
|
|
20
19
|
});
|
|
21
20
|
return mountPoints;
|
|
22
21
|
};
|
|
23
|
-
const sign = (data) => {
|
|
24
|
-
const wallet = (0, wallet_1.default)();
|
|
25
|
-
const signData = typeof data === 'undefined' ? {} : data;
|
|
26
|
-
return { 'x-component-sig': wallet.sign((0, json_stable_stringify_1.default)(signData)) };
|
|
27
|
-
};
|
|
28
22
|
const doCall = async ({ url, ...options }) => {
|
|
29
23
|
try {
|
|
30
24
|
const resp = await (0, axios_1.default)({
|
|
31
25
|
url,
|
|
32
26
|
...options,
|
|
33
|
-
headers: {
|
|
34
|
-
|
|
27
|
+
headers: {
|
|
28
|
+
'x-component-sig': (0, verify_sign_1.sign)(options.data),
|
|
29
|
+
},
|
|
30
|
+
timeout: 60 * 1000,
|
|
35
31
|
});
|
|
36
32
|
config_1.logger.info(`call ${url} api success`);
|
|
37
33
|
return resp;
|
|
@@ -1,21 +1,16 @@
|
|
|
1
1
|
"use strict";
|
|
2
|
-
var __importDefault = (this && this.__importDefault) || function (mod) {
|
|
3
|
-
return (mod && mod.__esModule) ? mod : { "default": mod };
|
|
4
|
-
};
|
|
5
2
|
Object.defineProperty(exports, "__esModule", { value: true });
|
|
6
3
|
exports.verifySig = void 0;
|
|
7
|
-
const json_stable_stringify_1 = __importDefault(require("json-stable-stringify"));
|
|
8
|
-
const wallet_1 = __importDefault(require("../wallet"));
|
|
9
4
|
const config_1 = require("../config");
|
|
5
|
+
const verify_sign_1 = require("../util/verify-sign");
|
|
10
6
|
const verifySig = (req, res, next) => {
|
|
11
7
|
try {
|
|
12
|
-
const wallet = (0, wallet_1.default)();
|
|
13
8
|
const sig = req.get('x-component-sig');
|
|
14
9
|
if (!sig) {
|
|
15
10
|
return res.status(400).json({ error: 'Bad Request' });
|
|
16
11
|
}
|
|
17
12
|
const data = typeof req.body === 'undefined' ? {} : req.body;
|
|
18
|
-
const verified =
|
|
13
|
+
const verified = (0, verify_sign_1.verify)(data, sig);
|
|
19
14
|
if (!verified) {
|
|
20
15
|
return res.status(401).json({ error: 'verify sig failed' });
|
|
21
16
|
}
|
package/lib/service/auth.d.ts
CHANGED
package/lib/service/auth.js
CHANGED
|
@@ -13,6 +13,7 @@ const constant_1 = __importDefault(require("@abtnode/constant"));
|
|
|
13
13
|
const check_blocklet_env_1 = __importDefault(require("../util/check-blocklet-env"));
|
|
14
14
|
const version_1 = require("../version");
|
|
15
15
|
const wallet_2 = __importDefault(require("../wallet"));
|
|
16
|
+
const service_api_1 = __importDefault(require("../util/service-api"));
|
|
16
17
|
const { NODE_SERVICES, WELLKNOWN_SERVICE_PATH_PREFIX, USER_AVATAR_URL_PREFIX, USER_AVATAR_PATH_PREFIX } = constant_1.default;
|
|
17
18
|
const VERSION = version_1.version; // version of notification sdk
|
|
18
19
|
const isNotNullOrUndefined = (x) => ![null, undefined].includes(x);
|
|
@@ -57,6 +58,7 @@ class AuthService {
|
|
|
57
58
|
const client = new AuthClient(httpEndpoint);
|
|
58
59
|
const apiList = [
|
|
59
60
|
// user
|
|
61
|
+
'login',
|
|
60
62
|
'getUsers',
|
|
61
63
|
'getUser',
|
|
62
64
|
'getOwner',
|
|
@@ -126,6 +128,16 @@ class AuthService {
|
|
|
126
128
|
const fn = client[api];
|
|
127
129
|
this[api] = apiFnMap[api] ? apiFnMap[api](fn) : apiFallback(fn);
|
|
128
130
|
});
|
|
131
|
+
this.login = async (data) => {
|
|
132
|
+
try {
|
|
133
|
+
const { data: resData } = await service_api_1.default.post('/user/login', data);
|
|
134
|
+
return resData;
|
|
135
|
+
}
|
|
136
|
+
catch (err) {
|
|
137
|
+
console.error(err.response ? err.response.data : err);
|
|
138
|
+
throw new Error(err.response ? err.response.data : err.message);
|
|
139
|
+
}
|
|
140
|
+
};
|
|
129
141
|
// eslint-disable-next-line no-constructor-return
|
|
130
142
|
return new Proxy(this, {
|
|
131
143
|
get(target, propKey) {
|
|
@@ -0,0 +1,36 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
/**
|
|
3
|
+
* 用于在 SDK 中像 blocklet-service 发起 http 请求
|
|
4
|
+
* 该封装中,会在请求的 header 中增加签名信息,确保安全性(签名信息的验证由 blocklet-service 的接口去做验证)
|
|
5
|
+
*/
|
|
6
|
+
var __importDefault = (this && this.__importDefault) || function (mod) {
|
|
7
|
+
return (mod && mod.__esModule) ? mod : { "default": mod };
|
|
8
|
+
};
|
|
9
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
10
|
+
const axios_1 = __importDefault(require("axios"));
|
|
11
|
+
const version_1 = require("../version");
|
|
12
|
+
const constants_1 = require("./constants");
|
|
13
|
+
const verify_sign_1 = require("./verify-sign");
|
|
14
|
+
const axios = axios_1.default.create({
|
|
15
|
+
// 为当前机器的内部调用,必须禁止 proxy 配置
|
|
16
|
+
proxy: false,
|
|
17
|
+
baseURL: `http://127.0.0.1:${process.env.ABT_NODE_SERVICE_PORT}${constants_1.SERVICE_PREFIX}`,
|
|
18
|
+
// 内部调用,超时时间不用过长
|
|
19
|
+
timeout: 6 * 1000,
|
|
20
|
+
headers: {
|
|
21
|
+
'User-Agent': `BlockletSDK/${version_1.version}`,
|
|
22
|
+
// TODO: @zhanghan 有上述 user-agent 应该就够了,应该不需要 x-blocklet-api-version 来指定版本号
|
|
23
|
+
'x-blocklet-api-version': version_1.version,
|
|
24
|
+
// NOTICE: 需要注入以下两个 header,才能使 blocklet-service 中的代码识别到当前的 blocklet 环境
|
|
25
|
+
'x-blocklet-did': process.env.BLOCKLET_DID,
|
|
26
|
+
'x-blocklet-component-id': process.env.BLOCKLET_REAL_DID,
|
|
27
|
+
},
|
|
28
|
+
});
|
|
29
|
+
axios.interceptors.request.use((config) => {
|
|
30
|
+
// 同时对 post 和 get 参数做签名,确保同时支持 post get 请求的校验
|
|
31
|
+
const { data = {}, params = {} } = config;
|
|
32
|
+
// 签名使用的是当前 blocklet 的 appSk,固命名为 x-blocklet-sig,以后可做统一使用
|
|
33
|
+
config.headers['x-blocklet-sig'] = (0, verify_sign_1.sign)({ data, params });
|
|
34
|
+
return config;
|
|
35
|
+
});
|
|
36
|
+
exports.default = axios;
|
|
@@ -0,0 +1,10 @@
|
|
|
1
|
+
import { DIDTypeShortcut } from '@arcblock/did';
|
|
2
|
+
declare const verify: (data: object, sig: string, { type, appSk }?: {
|
|
3
|
+
type?: DIDTypeShortcut;
|
|
4
|
+
appSk?: string;
|
|
5
|
+
}) => boolean;
|
|
6
|
+
declare const sign: (data: object, { type, appSk }?: {
|
|
7
|
+
type?: DIDTypeShortcut;
|
|
8
|
+
appSk?: string;
|
|
9
|
+
}) => string;
|
|
10
|
+
export { verify, sign };
|
|
@@ -0,0 +1,27 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
var __importDefault = (this && this.__importDefault) || function (mod) {
|
|
3
|
+
return (mod && mod.__esModule) ? mod : { "default": mod };
|
|
4
|
+
};
|
|
5
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
6
|
+
exports.sign = exports.verify = void 0;
|
|
7
|
+
const json_stable_stringify_1 = __importDefault(require("json-stable-stringify"));
|
|
8
|
+
const wallet_1 = __importDefault(require("../wallet"));
|
|
9
|
+
const verify = (data, sig, { type, appSk } = {}) => {
|
|
10
|
+
try {
|
|
11
|
+
if (!sig) {
|
|
12
|
+
throw new Error('empty sig');
|
|
13
|
+
}
|
|
14
|
+
const wallet = (0, wallet_1.default)(type, appSk);
|
|
15
|
+
const verified = wallet.verify((0, json_stable_stringify_1.default)(data || {}), sig);
|
|
16
|
+
return verified;
|
|
17
|
+
}
|
|
18
|
+
catch {
|
|
19
|
+
throw new Error('verify sig failed');
|
|
20
|
+
}
|
|
21
|
+
};
|
|
22
|
+
exports.verify = verify;
|
|
23
|
+
const sign = (data, { type, appSk } = {}) => {
|
|
24
|
+
const wallet = (0, wallet_1.default)(type, appSk);
|
|
25
|
+
return wallet.sign((0, json_stable_stringify_1.default)(data || {}));
|
|
26
|
+
};
|
|
27
|
+
exports.sign = sign;
|
package/lib/version.d.ts
CHANGED
package/lib/version.js
CHANGED
package/package.json
CHANGED
|
@@ -3,7 +3,7 @@
|
|
|
3
3
|
"publishConfig": {
|
|
4
4
|
"access": "public"
|
|
5
5
|
},
|
|
6
|
-
"version": "1.16.
|
|
6
|
+
"version": "1.16.8-beta-ca58a421",
|
|
7
7
|
"description": "graphql client to read/write data on abt node",
|
|
8
8
|
"main": "lib/index.js",
|
|
9
9
|
"typings": "lib/index.d.ts",
|
|
@@ -26,15 +26,15 @@
|
|
|
26
26
|
"author": "linchen1987 <linchen.1987@foxmail.com> (http://github.com/linchen1987)",
|
|
27
27
|
"license": "MIT",
|
|
28
28
|
"dependencies": {
|
|
29
|
-
"@abtnode/client": "1.16.
|
|
30
|
-
"@abtnode/constant": "1.16.
|
|
29
|
+
"@abtnode/client": "1.16.8-beta-ca58a421",
|
|
30
|
+
"@abtnode/constant": "1.16.8-beta-ca58a421",
|
|
31
31
|
"@arcblock/did": "1.18.78",
|
|
32
32
|
"@arcblock/did-auth": "1.18.78",
|
|
33
33
|
"@arcblock/jwt": "1.18.78",
|
|
34
34
|
"@arcblock/ws": "1.18.78",
|
|
35
|
-
"@blocklet/constant": "1.16.
|
|
36
|
-
"@blocklet/env": "1.16.
|
|
37
|
-
"@blocklet/meta": "1.16.
|
|
35
|
+
"@blocklet/constant": "1.16.8-beta-ca58a421",
|
|
36
|
+
"@blocklet/env": "1.16.8-beta-ca58a421",
|
|
37
|
+
"@blocklet/meta": "1.16.8-beta-ca58a421",
|
|
38
38
|
"@did-connect/authenticator": "^2.1.54",
|
|
39
39
|
"@did-connect/handler": "^2.1.54",
|
|
40
40
|
"@nedb/core": "^2.1.5",
|
|
@@ -72,5 +72,5 @@
|
|
|
72
72
|
"ts-node": "^10.9.1",
|
|
73
73
|
"typescript": "^4.8.4"
|
|
74
74
|
},
|
|
75
|
-
"gitHead": "
|
|
75
|
+
"gitHead": "d0f724c8082572a01b6e9287df6c3d0663ec9c57"
|
|
76
76
|
}
|