@grafana/sign-plugin 2.0.0 → 2.0.2-canary.481.f400697.0
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/CHANGELOG.md +12 -0
- package/README.md +1 -1
- package/dist/bin/run.js +3 -3
- package/dist/commands/index.js +1 -1
- package/dist/commands/sign.command.js +2 -2
- package/dist/commands/version.command.js +1 -1
- package/dist/utils/getVersion.js +1 -1
- package/dist/utils/manifest.js +59 -67
- package/dist/utils/pluginValidation.js +1 -1
- package/dist/utils/pluginValidation.test.js +1 -1
- package/dist/utils/request.js +7 -4
- package/package.json +4 -3
- package/src/utils/manifest.ts +2 -2
- package/src/utils/request.ts +5 -0
package/CHANGELOG.md
CHANGED
|
@@ -1,3 +1,15 @@
|
|
|
1
|
+
# v2.0.1 (Tue Oct 03 2023)
|
|
2
|
+
|
|
3
|
+
#### 🐛 Bug Fix
|
|
4
|
+
|
|
5
|
+
- Allows to sign behind an https proxy [#436](https://github.com/grafana/plugin-tools/pull/436) ([@academo](https://github.com/academo))
|
|
6
|
+
|
|
7
|
+
#### Authors: 1
|
|
8
|
+
|
|
9
|
+
- Esteban Beltran ([@academo](https://github.com/academo))
|
|
10
|
+
|
|
11
|
+
---
|
|
12
|
+
|
|
1
13
|
# v2.0.0 (Mon Oct 02 2023)
|
|
2
14
|
|
|
3
15
|
#### 🐛 Bug Fix
|
package/README.md
CHANGED
|
@@ -22,7 +22,7 @@ Signing a plugin allows Grafana to verify the authenticity of the plugin with si
|
|
|
22
22
|
|
|
23
23
|
All plugins require a signature since Grafana 7.0.
|
|
24
24
|
|
|
25
|
-
Please refer to [Signing plugins documentation](https://grafana.com/
|
|
25
|
+
Please refer to [Signing plugins documentation](https://grafana.com/developers/plugin-tools/publish-a-plugin/sign-a-plugin) to understand how to sign a Grafana plugin. The following commands are mentioned here for development purposes.
|
|
26
26
|
|
|
27
27
|
### Sign a public plugin
|
|
28
28
|
|
package/dist/bin/run.js
CHANGED
|
@@ -3,14 +3,14 @@
|
|
|
3
3
|
var __importDefault = (this && this.__importDefault) || function (mod) {
|
|
4
4
|
return (mod && mod.__esModule) ? mod : { "default": mod };
|
|
5
5
|
};
|
|
6
|
-
exports
|
|
6
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
7
7
|
var minimist_1 = __importDefault(require("minimist"));
|
|
8
8
|
var commands_1 = require("../commands");
|
|
9
9
|
var args = process.argv.slice(2);
|
|
10
|
-
var argv = (0, minimist_1
|
|
10
|
+
var argv = (0, minimist_1.default)(args);
|
|
11
11
|
var commands = {
|
|
12
12
|
sign: commands_1.sign,
|
|
13
|
-
version: commands_1.version
|
|
13
|
+
version: commands_1.version,
|
|
14
14
|
};
|
|
15
15
|
var command = commands[argv._[0]] || commands.sign;
|
|
16
16
|
command(argv);
|
package/dist/commands/index.js
CHANGED
|
@@ -13,6 +13,6 @@ var __createBinding = (this && this.__createBinding) || (Object.create ? (functi
|
|
|
13
13
|
var __exportStar = (this && this.__exportStar) || function(m, exports) {
|
|
14
14
|
for (var p in m) if (p !== "default" && !Object.prototype.hasOwnProperty.call(exports, p)) __createBinding(exports, m, p);
|
|
15
15
|
};
|
|
16
|
-
exports
|
|
16
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
17
17
|
__exportStar(require("./sign.command"), exports);
|
|
18
18
|
__exportStar(require("./version.command"), exports);
|
|
@@ -38,7 +38,7 @@ var __generator = (this && this.__generator) || function (thisArg, body) {
|
|
|
38
38
|
var __importDefault = (this && this.__importDefault) || function (mod) {
|
|
39
39
|
return (mod && mod.__esModule) ? mod : { "default": mod };
|
|
40
40
|
};
|
|
41
|
-
exports
|
|
41
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
42
42
|
exports.sign = void 0;
|
|
43
43
|
var path_1 = __importDefault(require("path"));
|
|
44
44
|
var fs_1 = require("fs");
|
|
@@ -52,7 +52,7 @@ var sign = function (argv) { return __awaiter(void 0, void 0, void 0, function (
|
|
|
52
52
|
switch (_d.label) {
|
|
53
53
|
case 0:
|
|
54
54
|
distDir = (_a = argv.distDir) !== null && _a !== void 0 ? _a : 'dist';
|
|
55
|
-
pluginDistDir = path_1
|
|
55
|
+
pluginDistDir = path_1.default.resolve(distDir);
|
|
56
56
|
signatureType = argv.signatureType;
|
|
57
57
|
rootUrls = (_c = (_b = argv.rootUrls) === null || _b === void 0 ? void 0 : _b.split(',')) !== null && _c !== void 0 ? _c : [];
|
|
58
58
|
if (!(0, fs_1.existsSync)(pluginDistDir)) {
|
|
@@ -35,7 +35,7 @@ var __generator = (this && this.__generator) || function (thisArg, body) {
|
|
|
35
35
|
if (op[0] & 5) throw op[1]; return { value: op[0] ? op[1] : void 0, done: true };
|
|
36
36
|
}
|
|
37
37
|
};
|
|
38
|
-
exports
|
|
38
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
39
39
|
exports.version = void 0;
|
|
40
40
|
var getVersion_1 = require("../utils/getVersion");
|
|
41
41
|
var version = function () { return __awaiter(void 0, void 0, void 0, function () {
|
package/dist/utils/getVersion.js
CHANGED
package/dist/utils/manifest.js
CHANGED
|
@@ -46,7 +46,7 @@ var __asyncValues = (this && this.__asyncValues) || function (o) {
|
|
|
46
46
|
var __asyncDelegator = (this && this.__asyncDelegator) || function (o) {
|
|
47
47
|
var i, p;
|
|
48
48
|
return i = {}, verb("next"), verb("throw", function (e) { throw e; }), verb("return"), i[Symbol.iterator] = function () { return this; }, i;
|
|
49
|
-
function verb(n, f) { i[n] = o[n] ? function (v) { return (p = !p) ? { value: __await(o[n](v)), done:
|
|
49
|
+
function verb(n, f) { i[n] = o[n] ? function (v) { return (p = !p) ? { value: __await(o[n](v)), done: false } : f ? f(v) : v; } : f; }
|
|
50
50
|
};
|
|
51
51
|
var __asyncGenerator = (this && this.__asyncGenerator) || function (thisArg, _arguments, generator) {
|
|
52
52
|
if (!Symbol.asyncIterator) throw new TypeError("Symbol.asyncIterator is not defined.");
|
|
@@ -73,7 +73,7 @@ var __values = (this && this.__values) || function(o) {
|
|
|
73
73
|
var __importDefault = (this && this.__importDefault) || function (mod) {
|
|
74
74
|
return (mod && mod.__esModule) ? mod : { "default": mod };
|
|
75
75
|
};
|
|
76
|
-
exports
|
|
76
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
77
77
|
exports.saveManifest = exports.signManifest = exports.buildManifest = void 0;
|
|
78
78
|
var crypto_1 = __importDefault(require("crypto"));
|
|
79
79
|
var promises_1 = __importDefault(require("fs/promises"));
|
|
@@ -88,76 +88,71 @@ function walk(dir, baseDir) {
|
|
|
88
88
|
return __generator(this, function (_g) {
|
|
89
89
|
switch (_g.label) {
|
|
90
90
|
case 0:
|
|
91
|
-
_g.trys.push([0,
|
|
91
|
+
_g.trys.push([0, 17, 18, 23]);
|
|
92
92
|
_a = true;
|
|
93
|
-
return [4, __await(promises_1
|
|
93
|
+
return [4, __await(promises_1.default.opendir(dir))];
|
|
94
94
|
case 1:
|
|
95
95
|
_b = __asyncValues.apply(void 0, [_g.sent()]);
|
|
96
96
|
_g.label = 2;
|
|
97
97
|
case 2: return [4, __await(_b.next())];
|
|
98
98
|
case 3:
|
|
99
|
-
if (!(_c = _g.sent(), _d = _c.done, !_d)) return [3,
|
|
99
|
+
if (!(_c = _g.sent(), _d = _c.done, !_d)) return [3, 16];
|
|
100
100
|
_f = _c.value;
|
|
101
101
|
_a = false;
|
|
102
|
-
_g.label = 4;
|
|
103
|
-
case 4:
|
|
104
|
-
_g.trys.push([4, , 17, 18]);
|
|
105
102
|
d = _f;
|
|
106
|
-
entry = path_1
|
|
107
|
-
if (!d.isDirectory()) return [3,
|
|
103
|
+
entry = path_1.default.join(dir, d.name);
|
|
104
|
+
if (!d.isDirectory()) return [3, 7];
|
|
108
105
|
return [4, __await(walk(entry, baseDir))];
|
|
109
|
-
case
|
|
110
|
-
case
|
|
106
|
+
case 4: return [5, __values(__asyncDelegator.apply(void 0, [__asyncValues.apply(void 0, [_g.sent()])]))];
|
|
107
|
+
case 5: return [4, __await.apply(void 0, [_g.sent()])];
|
|
108
|
+
case 6:
|
|
109
|
+
_g.sent();
|
|
110
|
+
return [3, 15];
|
|
111
111
|
case 7:
|
|
112
|
+
if (!d.isFile()) return [3, 10];
|
|
113
|
+
return [4, __await(path_1.default.relative(baseDir, entry))];
|
|
114
|
+
case 8: return [4, _g.sent()];
|
|
115
|
+
case 9:
|
|
112
116
|
_g.sent();
|
|
113
|
-
return [3,
|
|
114
|
-
case 8:
|
|
115
|
-
if (!d.isFile()) return [3, 11];
|
|
116
|
-
return [4, __await(path_1["default"].relative(baseDir, entry))];
|
|
117
|
-
case 9: return [4, _g.sent()];
|
|
117
|
+
return [3, 15];
|
|
118
118
|
case 10:
|
|
119
|
-
|
|
120
|
-
return [
|
|
119
|
+
if (!d.isSymbolicLink()) return [3, 15];
|
|
120
|
+
return [4, __await(promises_1.default.realpath(entry))];
|
|
121
121
|
case 11:
|
|
122
|
-
if (!d.isSymbolicLink()) return [3, 16];
|
|
123
|
-
return [4, __await(promises_1["default"].realpath(entry))];
|
|
124
|
-
case 12:
|
|
125
122
|
realPath = _g.sent();
|
|
126
123
|
if (!realPath.startsWith(baseDir)) {
|
|
127
|
-
throw new Error("symbolic link ".concat(path_1
|
|
124
|
+
throw new Error("symbolic link ".concat(path_1.default.relative(baseDir, entry), " targets a file outside of the base directory: ").concat(baseDir));
|
|
128
125
|
}
|
|
129
|
-
return [4, __await(promises_1
|
|
130
|
-
case
|
|
126
|
+
return [4, __await(promises_1.default.stat(realPath))];
|
|
127
|
+
case 12:
|
|
131
128
|
stats = _g.sent();
|
|
132
|
-
if (!stats.isFile()) return [3,
|
|
133
|
-
return [4, __await(path_1
|
|
134
|
-
case
|
|
135
|
-
case
|
|
129
|
+
if (!stats.isFile()) return [3, 15];
|
|
130
|
+
return [4, __await(path_1.default.relative(baseDir, entry))];
|
|
131
|
+
case 13: return [4, _g.sent()];
|
|
132
|
+
case 14:
|
|
136
133
|
_g.sent();
|
|
137
|
-
_g.label =
|
|
138
|
-
case
|
|
139
|
-
case 17:
|
|
134
|
+
_g.label = 15;
|
|
135
|
+
case 15:
|
|
140
136
|
_a = true;
|
|
141
|
-
return [
|
|
142
|
-
case
|
|
143
|
-
case
|
|
144
|
-
case 20:
|
|
137
|
+
return [3, 2];
|
|
138
|
+
case 16: return [3, 23];
|
|
139
|
+
case 17:
|
|
145
140
|
e_1_1 = _g.sent();
|
|
146
141
|
e_1 = { error: e_1_1 };
|
|
147
|
-
return [3,
|
|
148
|
-
case
|
|
149
|
-
_g.trys.push([
|
|
150
|
-
if (!(!_a && !_d && (_e = _b
|
|
142
|
+
return [3, 23];
|
|
143
|
+
case 18:
|
|
144
|
+
_g.trys.push([18, , 21, 22]);
|
|
145
|
+
if (!(!_a && !_d && (_e = _b.return))) return [3, 20];
|
|
151
146
|
return [4, __await(_e.call(_b))];
|
|
152
|
-
case
|
|
147
|
+
case 19:
|
|
153
148
|
_g.sent();
|
|
154
|
-
_g.label =
|
|
155
|
-
case
|
|
156
|
-
case
|
|
149
|
+
_g.label = 20;
|
|
150
|
+
case 20: return [3, 22];
|
|
151
|
+
case 21:
|
|
157
152
|
if (e_1) throw e_1.error;
|
|
158
153
|
return [7];
|
|
159
|
-
case
|
|
160
|
-
case
|
|
154
|
+
case 22: return [7];
|
|
155
|
+
case 23: return [2];
|
|
161
156
|
}
|
|
162
157
|
});
|
|
163
158
|
});
|
|
@@ -169,11 +164,11 @@ function buildManifest(dir) {
|
|
|
169
164
|
return __generator(this, function (_g) {
|
|
170
165
|
switch (_g.label) {
|
|
171
166
|
case 0:
|
|
172
|
-
pluginJson = JSON.parse((0, fs_1.readFileSync)(path_1
|
|
167
|
+
pluginJson = JSON.parse((0, fs_1.readFileSync)(path_1.default.join(dir, 'plugin.json'), { encoding: 'utf8' }));
|
|
173
168
|
manifest = {
|
|
174
169
|
plugin: pluginJson.id,
|
|
175
170
|
version: pluginJson.info.version,
|
|
176
|
-
files: {}
|
|
171
|
+
files: {},
|
|
177
172
|
};
|
|
178
173
|
_g.label = 1;
|
|
179
174
|
case 1:
|
|
@@ -188,22 +183,19 @@ function buildManifest(dir) {
|
|
|
188
183
|
if (!(_f = _g.sent(), _a = _f.done, !_a)) return [3, 6];
|
|
189
184
|
_c = _f.value;
|
|
190
185
|
_d = false;
|
|
191
|
-
|
|
192
|
-
|
|
193
|
-
|
|
194
|
-
return [3, 5];
|
|
195
|
-
}
|
|
196
|
-
sanitisedFilePath = filePath.split(path_1["default"].sep).join(path_1["default"].posix.sep);
|
|
197
|
-
manifest.files[sanitisedFilePath] = crypto_1["default"]
|
|
198
|
-
.createHash('sha256')
|
|
199
|
-
.update((0, fs_1.readFileSync)(path_1["default"].join(dir, filePath)))
|
|
200
|
-
.digest('hex');
|
|
201
|
-
}
|
|
202
|
-
finally {
|
|
203
|
-
_d = true;
|
|
186
|
+
filePath = _c;
|
|
187
|
+
if (filePath === MANIFEST_FILE) {
|
|
188
|
+
return [3, 5];
|
|
204
189
|
}
|
|
190
|
+
sanitisedFilePath = filePath.split(path_1.default.sep).join(path_1.default.posix.sep);
|
|
191
|
+
manifest.files[sanitisedFilePath] = crypto_1.default
|
|
192
|
+
.createHash('sha256')
|
|
193
|
+
.update((0, fs_1.readFileSync)(path_1.default.join(dir, filePath)))
|
|
194
|
+
.digest('hex');
|
|
205
195
|
_g.label = 5;
|
|
206
|
-
case 5:
|
|
196
|
+
case 5:
|
|
197
|
+
_d = true;
|
|
198
|
+
return [3, 3];
|
|
207
199
|
case 6: return [3, 13];
|
|
208
200
|
case 7:
|
|
209
201
|
e_2_1 = _g.sent();
|
|
@@ -211,7 +203,7 @@ function buildManifest(dir) {
|
|
|
211
203
|
return [3, 13];
|
|
212
204
|
case 8:
|
|
213
205
|
_g.trys.push([8, , 11, 12]);
|
|
214
|
-
if (!(!_d && !_a && (_b = _e
|
|
206
|
+
if (!(!_d && !_a && (_b = _e.return))) return [3, 10];
|
|
215
207
|
return [4, _b.call(_e)];
|
|
216
208
|
case 9:
|
|
217
209
|
_g.sent();
|
|
@@ -237,10 +229,10 @@ function signManifest(manifest) {
|
|
|
237
229
|
GRAFANA_API_KEY = process.env.GRAFANA_API_KEY;
|
|
238
230
|
GRAFANA_ACCESS_POLICY_TOKEN = process.env.GRAFANA_ACCESS_POLICY_TOKEN;
|
|
239
231
|
if (!GRAFANA_ACCESS_POLICY_TOKEN && !GRAFANA_API_KEY) {
|
|
240
|
-
throw new Error('You must create a GRAFANA_ACCESS_POLICY_TOKEN env variable to sign plugins. Please see: https://grafana.com/
|
|
232
|
+
throw new Error('You must create a GRAFANA_ACCESS_POLICY_TOKEN env variable to sign plugins. Please see: https://grafana.com/developers/plugin-tools/publish-a-plugin/sign-a-plugin#generate-an-access-policy-token for instructions.');
|
|
241
233
|
}
|
|
242
234
|
if (GRAFANA_API_KEY) {
|
|
243
|
-
console.warn("\u001B[33m%s\u001B[0m", 'The usage of GRAFANA_API_KEY is deprecated, please consider using GRAFANA_ACCESS_POLICY_TOKEN instead. For more info visit https://grafana.com/
|
|
235
|
+
console.warn("\u001B[33m%s\u001B[0m", 'The usage of GRAFANA_API_KEY is deprecated, please consider using GRAFANA_ACCESS_POLICY_TOKEN instead. For more info visit https://grafana.com/developers/plugin-tools/publish-a-plugin/sign-a-plugin');
|
|
244
236
|
}
|
|
245
237
|
GRAFANA_COM_URL = process.env.GRAFANA_COM_URL || 'https://grafana.com/api';
|
|
246
238
|
url = GRAFANA_COM_URL + '/plugins/ci/sign';
|
|
@@ -249,7 +241,7 @@ function signManifest(manifest) {
|
|
|
249
241
|
case 1:
|
|
250
242
|
_c.trys.push([1, 3, , 4]);
|
|
251
243
|
return [4, (0, request_1.postData)(url, manifest, {
|
|
252
|
-
Authorization: 'Bearer ' + token
|
|
244
|
+
Authorization: 'Bearer ' + token,
|
|
253
245
|
})];
|
|
254
246
|
case 2:
|
|
255
247
|
info = _c.sent();
|
|
@@ -272,7 +264,7 @@ function signManifest(manifest) {
|
|
|
272
264
|
exports.signManifest = signManifest;
|
|
273
265
|
function saveManifest(dir, signedManifest) {
|
|
274
266
|
try {
|
|
275
|
-
(0, fs_1.writeFileSync)(path_1
|
|
267
|
+
(0, fs_1.writeFileSync)(path_1.default.join(dir, MANIFEST_FILE), signedManifest);
|
|
276
268
|
return true;
|
|
277
269
|
}
|
|
278
270
|
catch (error) {
|
|
@@ -1,5 +1,5 @@
|
|
|
1
1
|
"use strict";
|
|
2
|
-
exports
|
|
2
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
3
|
exports.assertRootUrlIsValid = exports.getPluginJson = exports.validatePluginJson = void 0;
|
|
4
4
|
var validatePluginJson = function (pluginJson) {
|
|
5
5
|
if (!pluginJson.id) {
|
package/dist/utils/request.js
CHANGED
|
@@ -49,10 +49,12 @@ var __generator = (this && this.__generator) || function (thisArg, body) {
|
|
|
49
49
|
var __importDefault = (this && this.__importDefault) || function (mod) {
|
|
50
50
|
return (mod && mod.__esModule) ? mod : { "default": mod };
|
|
51
51
|
};
|
|
52
|
-
exports
|
|
52
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
53
53
|
exports.postData = void 0;
|
|
54
54
|
var https_1 = __importDefault(require("https"));
|
|
55
|
+
var proxy_agent_1 = require("proxy-agent");
|
|
55
56
|
var url_1 = require("url");
|
|
57
|
+
var agent = new proxy_agent_1.ProxyAgent();
|
|
56
58
|
function postData(urlString, data, headers) {
|
|
57
59
|
return __awaiter(this, void 0, void 0, function () {
|
|
58
60
|
return __generator(this, function (_a) {
|
|
@@ -64,9 +66,10 @@ function postData(urlString, data, headers) {
|
|
|
64
66
|
port: url.port || 443,
|
|
65
67
|
path: url.pathname,
|
|
66
68
|
method: 'POST',
|
|
67
|
-
headers: __assign(__assign({}, headers), { 'Content-Type': 'application/json' })
|
|
69
|
+
headers: __assign(__assign({}, headers), { 'Content-Type': 'application/json' }),
|
|
70
|
+
agent: agent,
|
|
68
71
|
};
|
|
69
|
-
var req = https_1
|
|
72
|
+
var req = https_1.default.request(options, function (res) {
|
|
70
73
|
var chunks = [];
|
|
71
74
|
res.on('data', function (chunk) { return chunks.push(chunk); });
|
|
72
75
|
res.on('end', function () {
|
|
@@ -74,7 +77,7 @@ function postData(urlString, data, headers) {
|
|
|
74
77
|
var results = Buffer.concat(chunks);
|
|
75
78
|
resolve({
|
|
76
79
|
data: results.toString(),
|
|
77
|
-
status: (_a = res.statusCode) !== null && _a !== void 0 ? _a : 200
|
|
80
|
+
status: (_a = res.statusCode) !== null && _a !== void 0 ? _a : 200,
|
|
78
81
|
});
|
|
79
82
|
});
|
|
80
83
|
res.on('error', reject);
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@grafana/sign-plugin",
|
|
3
|
-
"version": "2.0.0",
|
|
3
|
+
"version": "2.0.2-canary.481.f400697.0",
|
|
4
4
|
"main": "index.js",
|
|
5
5
|
"repository": {
|
|
6
6
|
"directory": "packages/sign-plugin",
|
|
@@ -23,7 +23,8 @@
|
|
|
23
23
|
"typecheck": "tsc --noEmit"
|
|
24
24
|
},
|
|
25
25
|
"dependencies": {
|
|
26
|
-
"minimist": "^1.2.2"
|
|
26
|
+
"minimist": "^1.2.2",
|
|
27
|
+
"proxy-agent": "6.3.1"
|
|
27
28
|
},
|
|
28
29
|
"devDependencies": {
|
|
29
30
|
"@types/minimist": "^1.2.2"
|
|
@@ -40,5 +41,5 @@
|
|
|
40
41
|
"engines": {
|
|
41
42
|
"node": ">=18"
|
|
42
43
|
},
|
|
43
|
-
"gitHead": "
|
|
44
|
+
"gitHead": "f40069751aa92d8136651fefac2bf57b1cd15c4d"
|
|
44
45
|
}
|
package/src/utils/manifest.ts
CHANGED
|
@@ -80,11 +80,11 @@ export async function signManifest(manifest: ManifestInfo): Promise<string> {
|
|
|
80
80
|
|
|
81
81
|
if(!GRAFANA_ACCESS_POLICY_TOKEN && !GRAFANA_API_KEY) {
|
|
82
82
|
throw new Error(
|
|
83
|
-
'You must create a GRAFANA_ACCESS_POLICY_TOKEN env variable to sign plugins. Please see: https://grafana.com/
|
|
83
|
+
'You must create a GRAFANA_ACCESS_POLICY_TOKEN env variable to sign plugins. Please see: https://grafana.com/developers/plugin-tools/publish-a-plugin/sign-a-plugin#generate-an-access-policy-token for instructions.'
|
|
84
84
|
);
|
|
85
85
|
}
|
|
86
86
|
if (GRAFANA_API_KEY) {
|
|
87
|
-
console.warn(`\x1b[33m%s\x1b[0m`,'The usage of GRAFANA_API_KEY is deprecated, please consider using GRAFANA_ACCESS_POLICY_TOKEN instead. For more info visit https://grafana.com/
|
|
87
|
+
console.warn(`\x1b[33m%s\x1b[0m`,'The usage of GRAFANA_API_KEY is deprecated, please consider using GRAFANA_ACCESS_POLICY_TOKEN instead. For more info visit https://grafana.com/developers/plugin-tools/publish-a-plugin/sign-a-plugin')
|
|
88
88
|
}
|
|
89
89
|
|
|
90
90
|
const GRAFANA_COM_URL = process.env.GRAFANA_COM_URL || 'https://grafana.com/api';
|
package/src/utils/request.ts
CHANGED
|
@@ -1,4 +1,6 @@
|
|
|
1
1
|
import https, { RequestOptions } from 'https';
|
|
2
|
+
import { ProxyAgent } from 'proxy-agent';
|
|
3
|
+
|
|
2
4
|
import { URL } from 'url';
|
|
3
5
|
|
|
4
6
|
interface Headers {
|
|
@@ -11,6 +13,8 @@ interface Response<R> {
|
|
|
11
13
|
status: number;
|
|
12
14
|
}
|
|
13
15
|
|
|
16
|
+
const agent = new ProxyAgent();
|
|
17
|
+
|
|
14
18
|
export async function postData(urlString: string, data: unknown, headers: Headers): Promise<Response<string>> {
|
|
15
19
|
return new Promise<Response<string>>((resolve, reject) => {
|
|
16
20
|
const url = new URL(urlString);
|
|
@@ -25,6 +29,7 @@ export async function postData(urlString: string, data: unknown, headers: Header
|
|
|
25
29
|
...headers,
|
|
26
30
|
'Content-Type': 'application/json',
|
|
27
31
|
},
|
|
32
|
+
agent,
|
|
28
33
|
};
|
|
29
34
|
|
|
30
35
|
const req = https.request(options, (res) => {
|