specshield 1.0.13 → 2.0.1

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.
@@ -0,0 +1,115 @@
1
+ 'use strict';
2
+
3
+ const axios = require('axios');
4
+ const { version } = require('../../package.json');
5
+
6
+ const DEFAULT_SERVER = 'https://specshield.io';
7
+ const TIMEOUT = 15000;
8
+
9
+ function buildClient(server, apiToken) {
10
+ const baseURL = (server || DEFAULT_SERVER).replace(/\/$/, '');
11
+ const headers = {
12
+ 'Content-Type': 'application/json',
13
+ 'X-SpecShield-Client': 'cli',
14
+ 'X-SpecShield-Version': version,
15
+ };
16
+ if (apiToken) headers['X-Api-Key'] = apiToken;
17
+ return axios.create({ baseURL, timeout: TIMEOUT, headers });
18
+ }
19
+
20
+ function apiError(err) {
21
+ if (err.response) {
22
+ const data = err.response.data;
23
+ const msg = (data && (data.message || data.error || data.title))
24
+ || `HTTP ${err.response.status}`;
25
+ return new Error(`API error (${err.response.status}): ${msg}`);
26
+ }
27
+ if (err.request) return new Error(`No response from server: ${err.message}`);
28
+ return new Error(`Request failed: ${err.message}`);
29
+ }
30
+
31
+ async function publishProviderSpec(server, apiToken, payload) {
32
+ try {
33
+ const res = await buildClient(server, apiToken).post('/api/bdct/provider-specs', payload);
34
+ return res.data;
35
+ } catch (err) { throw apiError(err); }
36
+ }
37
+
38
+ async function publishConsumerContract(server, apiToken, payload) {
39
+ try {
40
+ const res = await buildClient(server, apiToken).post('/api/bdct/consumer-contracts', payload);
41
+ return res.data;
42
+ } catch (err) { throw apiError(err); }
43
+ }
44
+
45
+ async function verify(server, apiToken, payload) {
46
+ try {
47
+ const res = await buildClient(server, apiToken).post('/api/bdct/verify', payload);
48
+ return res.data;
49
+ } catch (err) { throw apiError(err); }
50
+ }
51
+
52
+ async function listVerifications(server, apiToken, { org, consumer, provider, env, page = 0, size = 20 } = {}) {
53
+ try {
54
+ const params = { page, size };
55
+ if (org) params.orgKey = org;
56
+ if (consumer) params.consumer = consumer;
57
+ if (provider) params.provider = provider;
58
+ if (env) params.env = env;
59
+ const res = await buildClient(server, apiToken).get('/api/bdct/verifications', { params });
60
+ return res.data;
61
+ } catch (err) { throw apiError(err); }
62
+ }
63
+
64
+ async function canIDeploy(server, apiToken, { org, service, version: ver, env } = {}) {
65
+ try {
66
+ const params = { service, version: ver };
67
+ if (org) params.orgKey = org;
68
+ if (env) params.env = env;
69
+ const res = await buildClient(server, apiToken).get('/api/bdct/can-i-deploy', { params });
70
+ return res.data;
71
+ } catch (err) { throw apiError(err); }
72
+ }
73
+
74
+ async function getMatrix(server, apiToken, { org, env } = {}) {
75
+ try {
76
+ const params = {};
77
+ if (org) params.orgKey = org;
78
+ if (env) params.env = env;
79
+ const res = await buildClient(server, apiToken).get('/api/bdct/matrix', { params });
80
+ return res.data;
81
+ } catch (err) { throw apiError(err); }
82
+ }
83
+
84
+ async function listProviderSpecs(server, apiToken, { org, provider, env, page = 0, size = 20 } = {}) {
85
+ try {
86
+ const params = { page, size };
87
+ if (org) params.orgKey = org;
88
+ if (provider) params.provider = provider;
89
+ if (env) params.env = env;
90
+ const res = await buildClient(server, apiToken).get('/api/bdct/provider-specs', { params });
91
+ return res.data;
92
+ } catch (err) { throw apiError(err); }
93
+ }
94
+
95
+ async function listConsumerContracts(server, apiToken, { org, consumer, provider, page = 0, size = 20 } = {}) {
96
+ try {
97
+ const params = { page, size };
98
+ if (org) params.orgKey = org;
99
+ if (consumer) params.consumer = consumer;
100
+ if (provider) params.provider = provider;
101
+ const res = await buildClient(server, apiToken).get('/api/bdct/consumer-contracts', { params });
102
+ return res.data;
103
+ } catch (err) { throw apiError(err); }
104
+ }
105
+
106
+ module.exports = {
107
+ publishProviderSpec,
108
+ publishConsumerContract,
109
+ verify,
110
+ listVerifications,
111
+ canIDeploy,
112
+ getMatrix,
113
+ listProviderSpecs,
114
+ listConsumerContracts,
115
+ };
package/src/cli.js CHANGED
@@ -6,6 +6,7 @@ const compareCommand = require('./commands/compare');
6
6
  const loginCommand = require('./commands/login');
7
7
  const logoutCommand = require('./commands/logout');
8
8
  const contractsCommand = require('./commands/contracts');
9
+ const bdctCommand = require('./commands/bdct');
9
10
 
10
11
  const program = new Command();
11
12
 
@@ -18,6 +19,7 @@ program.addCommand(compareCommand);
18
19
  program.addCommand(loginCommand);
19
20
  program.addCommand(logoutCommand);
20
21
  program.addCommand(contractsCommand);
22
+ program.addCommand(bdctCommand);
21
23
 
22
24
  program.parseAsync(process.argv).catch((err) => {
23
25
  const logger = require('./utils/logger');