@redocly/cli 0.0.0-snapshot.1755019909 → 0.0.0-snapshot.1757598120
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/auth/device-flow.d.ts +7 -8
- package/lib/auth/device-flow.d.ts.map +1 -1
- package/lib/auth/device-flow.js +5 -6
- package/lib/auth/device-flow.js.map +1 -1
- package/lib/auth/oauth-client.d.ts +13 -10
- package/lib/auth/oauth-client.d.ts.map +1 -1
- package/lib/auth/oauth-client.js +70 -53
- package/lib/auth/oauth-client.js.map +1 -1
- package/lib/commands/auth.d.ts +2 -2
- package/lib/commands/auth.d.ts.map +1 -1
- package/lib/commands/auth.js +5 -6
- package/lib/commands/auth.js.map +1 -1
- package/lib/commands/bundle.d.ts.map +1 -1
- package/lib/commands/bundle.js +7 -2
- package/lib/commands/bundle.js.map +1 -1
- package/lib/commands/join.d.ts.map +1 -1
- package/lib/commands/join.js +28 -26
- package/lib/commands/join.js.map +1 -1
- package/lib/commands/lint.d.ts.map +1 -1
- package/lib/commands/lint.js +6 -1
- package/lib/commands/lint.js.map +1 -1
- package/lib/commands/stats.d.ts.map +1 -1
- package/lib/commands/stats.js +2 -1
- package/lib/commands/stats.js.map +1 -1
- package/lib/index.js +0 -2
- package/lib/index.js.map +1 -1
- package/lib/reunite/api/api-client.d.ts +2 -5
- package/lib/reunite/api/api-client.d.ts.map +1 -1
- package/lib/reunite/api/api-client.js +5 -6
- package/lib/reunite/api/api-client.js.map +1 -1
- package/lib/reunite/api/domains.d.ts +2 -1
- package/lib/reunite/api/domains.d.ts.map +1 -1
- package/lib/reunite/api/domains.js +20 -4
- package/lib/reunite/api/domains.js.map +1 -1
- package/lib/reunite/commands/push-status.d.ts +1 -1
- package/lib/reunite/commands/push-status.d.ts.map +1 -1
- package/lib/reunite/commands/push-status.js +2 -2
- package/lib/reunite/commands/push-status.js.map +1 -1
- package/lib/reunite/commands/push.d.ts +1 -1
- package/lib/reunite/commands/push.d.ts.map +1 -1
- package/lib/reunite/commands/push.js +3 -2
- package/lib/reunite/commands/push.js.map +1 -1
- package/lib/utils/miscellaneous.d.ts.map +1 -1
- package/lib/utils/miscellaneous.js +2 -4
- package/lib/utils/miscellaneous.js.map +1 -1
- package/lib/utils/telemetry.d.ts.map +1 -1
- package/lib/utils/telemetry.js +2 -3
- package/lib/utils/telemetry.js.map +1 -1
- package/package.json +3 -3
|
@@ -1,20 +1,19 @@
|
|
|
1
|
-
export type
|
|
1
|
+
export type Credentials = {
|
|
2
2
|
access_token: string;
|
|
3
|
-
refresh_token
|
|
3
|
+
refresh_token: string;
|
|
4
|
+
expires_in: number;
|
|
4
5
|
token_type?: string;
|
|
5
|
-
expires_in?: number;
|
|
6
6
|
};
|
|
7
7
|
export declare class RedoclyOAuthDeviceFlow {
|
|
8
8
|
private baseUrl;
|
|
9
|
-
private clientName;
|
|
10
|
-
private version;
|
|
11
9
|
private apiClient;
|
|
12
|
-
|
|
13
|
-
|
|
10
|
+
private clientName;
|
|
11
|
+
constructor(baseUrl: string);
|
|
12
|
+
run(): Promise<Credentials>;
|
|
14
13
|
private openBrowser;
|
|
15
14
|
verifyToken(accessToken: string): Promise<boolean>;
|
|
16
15
|
verifyApiKey(apiKey: string): Promise<boolean>;
|
|
17
|
-
refreshToken(refreshToken
|
|
16
|
+
refreshToken(refreshToken?: string): Promise<{
|
|
18
17
|
access_token: any;
|
|
19
18
|
refresh_token: any;
|
|
20
19
|
expires_in: any;
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"device-flow.d.ts","sourceRoot":"","sources":["../../src/auth/device-flow.ts"],"names":[],"mappings":"AAMA,MAAM,MAAM,
|
|
1
|
+
{"version":3,"file":"device-flow.d.ts","sourceRoot":"","sources":["../../src/auth/device-flow.ts"],"names":[],"mappings":"AAMA,MAAM,MAAM,WAAW,GAAG;IACxB,YAAY,EAAE,MAAM,CAAC;IACrB,aAAa,EAAE,MAAM,CAAC;IACtB,UAAU,EAAE,MAAM,CAAC;IACnB,UAAU,CAAC,EAAE,MAAM,CAAC;CACrB,CAAC;AAEF,qBAAa,sBAAsB;IAIrB,OAAO,CAAC,OAAO;IAH3B,OAAO,CAAC,SAAS,CAAmB;IACpC,OAAO,CAAC,UAAU,CAAiB;gBAEf,OAAO,EAAE,MAAM;IAI7B,GAAG;IA0BT,OAAO,CAAC,WAAW;IAeb,WAAW,CAAC,WAAW,EAAE,MAAM,GAAG,OAAO,CAAC,OAAO,CAAC;IAYlD,YAAY,CAAC,MAAM,EAAE,MAAM;IAW3B,YAAY,CAAC,YAAY,CAAC,EAAE,MAAM;;;;;YAiB1B,kBAAkB;YA4BlB,cAAc;YAQd,aAAa;YAsBb,WAAW;CAkB1B"}
|
package/lib/auth/device-flow.js
CHANGED
|
@@ -4,11 +4,10 @@ import { logger } from '@redocly/openapi-core';
|
|
|
4
4
|
import { ReuniteApiClient } from '../reunite/api/api-client.js';
|
|
5
5
|
import { DEFAULT_FETCH_TIMEOUT } from '../utils/constants.js';
|
|
6
6
|
export class RedoclyOAuthDeviceFlow {
|
|
7
|
-
constructor(baseUrl
|
|
7
|
+
constructor(baseUrl) {
|
|
8
8
|
this.baseUrl = baseUrl;
|
|
9
|
-
this.clientName =
|
|
10
|
-
this.
|
|
11
|
-
this.apiClient = new ReuniteApiClient(this.version, 'login');
|
|
9
|
+
this.clientName = 'redocly-cli';
|
|
10
|
+
this.apiClient = new ReuniteApiClient('login');
|
|
12
11
|
}
|
|
13
12
|
async run() {
|
|
14
13
|
const code = await this.getDeviceCode();
|
|
@@ -116,8 +115,8 @@ export class RedoclyOAuthDeviceFlow {
|
|
|
116
115
|
expiresIn,
|
|
117
116
|
};
|
|
118
117
|
}
|
|
119
|
-
async sendRequest(
|
|
120
|
-
url = `${this.baseUrl}${
|
|
118
|
+
async sendRequest(path, method = 'GET', body = undefined, headers = {}) {
|
|
119
|
+
const url = `${this.baseUrl}/api${path}`;
|
|
121
120
|
const response = await this.apiClient.request(url, {
|
|
122
121
|
body: body ? JSON.stringify(body) : body,
|
|
123
122
|
method,
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"device-flow.js","sourceRoot":"","sources":["../../src/auth/device-flow.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,IAAI,EAAE,KAAK,EAAE,MAAM,WAAW,CAAC;AACxC,OAAO,KAAK,YAAY,MAAM,oBAAoB,CAAC;AACnD,OAAO,EAAE,MAAM,EAAE,MAAM,uBAAuB,CAAC;AAC/C,OAAO,EAAE,gBAAgB,EAAE,MAAM,8BAA8B,CAAC;AAChE,OAAO,EAAE,qBAAqB,EAAE,MAAM,uBAAuB,CAAC;AAS9D,MAAM,OAAO,sBAAsB;
|
|
1
|
+
{"version":3,"file":"device-flow.js","sourceRoot":"","sources":["../../src/auth/device-flow.ts"],"names":[],"mappings":"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"}
|
|
@@ -1,15 +1,18 @@
|
|
|
1
1
|
export declare class RedoclyOAuthClient {
|
|
2
|
-
|
|
3
|
-
private
|
|
4
|
-
private
|
|
5
|
-
private
|
|
6
|
-
|
|
7
|
-
constructor(clientName: string, version: string);
|
|
2
|
+
static readonly CREDENTIALS_FILE = "credentials";
|
|
3
|
+
private readonly dir;
|
|
4
|
+
private readonly key;
|
|
5
|
+
private readonly iv;
|
|
6
|
+
constructor();
|
|
8
7
|
login(baseUrl: string): Promise<void>;
|
|
9
8
|
logout(): Promise<void>;
|
|
10
|
-
isAuthorized(
|
|
11
|
-
|
|
12
|
-
private
|
|
13
|
-
private
|
|
9
|
+
isAuthorized(reuniteUrl: string, apiKey?: string): Promise<boolean>;
|
|
10
|
+
getAccessToken: (reuniteUrl: string) => Promise<string | null>;
|
|
11
|
+
private get credentialsPath();
|
|
12
|
+
private saveCredentials;
|
|
13
|
+
private readCredentials;
|
|
14
|
+
private removeCredentials;
|
|
15
|
+
private encryptCredentials;
|
|
16
|
+
private decryptCredentials;
|
|
14
17
|
}
|
|
15
18
|
//# sourceMappingURL=oauth-client.d.ts.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"oauth-client.d.ts","sourceRoot":"","sources":["../../src/auth/oauth-client.ts"],"names":[],"mappings":"AAWA,qBAAa,kBAAkB;
|
|
1
|
+
{"version":3,"file":"oauth-client.d.ts","sourceRoot":"","sources":["../../src/auth/oauth-client.ts"],"names":[],"mappings":"AAWA,qBAAa,kBAAkB;IAC7B,gBAAuB,gBAAgB,iBAAiB;IAExD,OAAO,CAAC,QAAQ,CAAC,GAAG,CAAS;IAC7B,OAAO,CAAC,QAAQ,CAAC,GAAG,CAAS;IAC7B,OAAO,CAAC,QAAQ,CAAC,EAAE,CAAS;;IAYf,KAAK,CAAC,OAAO,EAAE,MAAM;IAUrB,MAAM;IAQN,YAAY,CAAC,UAAU,EAAE,MAAM,EAAE,MAAM,CAAC,EAAE,MAAM,GAAG,OAAO,CAAC,OAAO,CAAC;IAWzE,cAAc,eAAsB,MAAM,KAAG,OAAO,CAAC,MAAM,GAAG,IAAI,CAAC,CAsBxE;IAEF,OAAO,KAAK,eAAe,GAE1B;YAEa,eAAe;YASf,eAAe;YAaf,iBAAiB;IAM/B,OAAO,CAAC,kBAAkB;IAU1B,OAAO,CAAC,kBAAkB;CAS3B"}
|
package/lib/auth/oauth-client.js
CHANGED
|
@@ -1,91 +1,108 @@
|
|
|
1
1
|
import { homedir } from 'node:os';
|
|
2
|
-
import
|
|
2
|
+
import path from 'node:path';
|
|
3
3
|
import { mkdirSync, existsSync, writeFileSync, readFileSync, rmSync } from 'node:fs';
|
|
4
|
-
import
|
|
4
|
+
import crypto from 'node:crypto';
|
|
5
5
|
import { Buffer } from 'node:buffer';
|
|
6
6
|
import { logger } from '@redocly/openapi-core';
|
|
7
7
|
import { RedoclyOAuthDeviceFlow } from './device-flow.js';
|
|
8
8
|
const SALT = '4618dbc9-8aed-4e27-aaf0-225f4603e5a4';
|
|
9
9
|
const CRYPTO_ALGORITHM = 'aes-256-cbc';
|
|
10
10
|
export class RedoclyOAuthClient {
|
|
11
|
-
constructor(
|
|
12
|
-
this.
|
|
13
|
-
|
|
14
|
-
|
|
15
|
-
|
|
16
|
-
|
|
17
|
-
|
|
18
|
-
|
|
19
|
-
|
|
20
|
-
|
|
21
|
-
|
|
22
|
-
|
|
23
|
-
|
|
24
|
-
|
|
25
|
-
|
|
11
|
+
constructor() {
|
|
12
|
+
this.getAccessToken = async (reuniteUrl) => {
|
|
13
|
+
const deviceFlow = new RedoclyOAuthDeviceFlow(reuniteUrl);
|
|
14
|
+
const credentials = await this.readCredentials();
|
|
15
|
+
if (!credentials) {
|
|
16
|
+
return null;
|
|
17
|
+
}
|
|
18
|
+
const isValid = await deviceFlow.verifyToken(credentials.access_token);
|
|
19
|
+
if (isValid) {
|
|
20
|
+
return credentials.access_token;
|
|
21
|
+
}
|
|
22
|
+
try {
|
|
23
|
+
const newCredentials = await deviceFlow.refreshToken(credentials.refresh_token);
|
|
24
|
+
await this.saveCredentials(newCredentials);
|
|
25
|
+
return newCredentials.access_token;
|
|
26
|
+
}
|
|
27
|
+
catch {
|
|
28
|
+
return null;
|
|
29
|
+
}
|
|
30
|
+
};
|
|
31
|
+
const homeDirPath = homedir();
|
|
32
|
+
this.dir = path.join(homeDirPath, '.redocly');
|
|
33
|
+
mkdirSync(this.dir, { recursive: true });
|
|
34
|
+
this.key = crypto.createHash('sha256').update(`${homeDirPath}${SALT}`).digest(); // 32-byte key
|
|
35
|
+
this.iv = crypto.createHash('md5').update(homeDirPath).digest(); // 16-byte IV
|
|
26
36
|
}
|
|
27
37
|
async login(baseUrl) {
|
|
28
|
-
const deviceFlow = new RedoclyOAuthDeviceFlow(baseUrl
|
|
29
|
-
const
|
|
30
|
-
if (!
|
|
38
|
+
const deviceFlow = new RedoclyOAuthDeviceFlow(baseUrl);
|
|
39
|
+
const credentials = await deviceFlow.run();
|
|
40
|
+
if (!credentials) {
|
|
31
41
|
throw new Error('Failed to login');
|
|
32
42
|
}
|
|
33
|
-
this.
|
|
43
|
+
this.saveCredentials(credentials);
|
|
34
44
|
}
|
|
35
45
|
async logout() {
|
|
36
46
|
try {
|
|
37
|
-
this.
|
|
47
|
+
this.removeCredentials();
|
|
38
48
|
}
|
|
39
49
|
catch (err) {
|
|
40
50
|
// do nothing
|
|
41
51
|
}
|
|
42
52
|
}
|
|
43
|
-
async isAuthorized(
|
|
44
|
-
const deviceFlow = new RedoclyOAuthDeviceFlow(baseUrl, this.clientName, this.version);
|
|
53
|
+
async isAuthorized(reuniteUrl, apiKey) {
|
|
45
54
|
if (apiKey) {
|
|
46
|
-
|
|
47
|
-
|
|
48
|
-
const token = await this.readToken();
|
|
49
|
-
if (!token) {
|
|
50
|
-
return false;
|
|
51
|
-
}
|
|
52
|
-
const isValidAccessToken = await deviceFlow.verifyToken(token.access_token);
|
|
53
|
-
if (isValidAccessToken) {
|
|
54
|
-
return true;
|
|
55
|
-
}
|
|
56
|
-
try {
|
|
57
|
-
const newToken = await deviceFlow.refreshToken(token.refresh_token);
|
|
58
|
-
await this.saveToken(newToken);
|
|
59
|
-
}
|
|
60
|
-
catch {
|
|
61
|
-
return false;
|
|
55
|
+
const deviceFlow = new RedoclyOAuthDeviceFlow(reuniteUrl);
|
|
56
|
+
return deviceFlow.verifyApiKey(apiKey);
|
|
62
57
|
}
|
|
63
|
-
|
|
58
|
+
const accessToken = await this.getAccessToken(reuniteUrl);
|
|
59
|
+
return Boolean(accessToken);
|
|
60
|
+
}
|
|
61
|
+
get credentialsPath() {
|
|
62
|
+
return path.join(this.dir, RedoclyOAuthClient.CREDENTIALS_FILE);
|
|
64
63
|
}
|
|
65
|
-
async
|
|
64
|
+
async saveCredentials(credentials) {
|
|
66
65
|
try {
|
|
67
|
-
const
|
|
68
|
-
writeFileSync(
|
|
66
|
+
const encryptedCredentials = this.encryptCredentials(credentials);
|
|
67
|
+
writeFileSync(this.credentialsPath, encryptedCredentials, 'utf8');
|
|
69
68
|
}
|
|
70
69
|
catch (error) {
|
|
71
|
-
logger.error(`
|
|
70
|
+
logger.error(`Failed to save credentials: ${error.message}`);
|
|
72
71
|
}
|
|
73
72
|
}
|
|
74
|
-
async
|
|
73
|
+
async readCredentials() {
|
|
74
|
+
if (!existsSync(this.credentialsPath)) {
|
|
75
|
+
return null;
|
|
76
|
+
}
|
|
75
77
|
try {
|
|
76
|
-
const
|
|
77
|
-
|
|
78
|
-
return decrypted ? JSON.parse(decrypted) : null;
|
|
78
|
+
const encryptedCredentials = readFileSync(this.credentialsPath, 'utf8');
|
|
79
|
+
return this.decryptCredentials(encryptedCredentials);
|
|
79
80
|
}
|
|
80
81
|
catch {
|
|
81
82
|
return null;
|
|
82
83
|
}
|
|
83
84
|
}
|
|
84
|
-
async
|
|
85
|
-
|
|
86
|
-
|
|
87
|
-
rmSync(tokenPath);
|
|
85
|
+
async removeCredentials() {
|
|
86
|
+
if (existsSync(this.credentialsPath)) {
|
|
87
|
+
rmSync(this.credentialsPath);
|
|
88
88
|
}
|
|
89
89
|
}
|
|
90
|
+
encryptCredentials(credentials) {
|
|
91
|
+
const cipher = crypto.createCipheriv(CRYPTO_ALGORITHM, this.key, this.iv);
|
|
92
|
+
const encrypted = Buffer.concat([
|
|
93
|
+
cipher.update(JSON.stringify(credentials), 'utf8'),
|
|
94
|
+
cipher.final(),
|
|
95
|
+
]);
|
|
96
|
+
return encrypted.toString('hex');
|
|
97
|
+
}
|
|
98
|
+
decryptCredentials(encryptedCredentials) {
|
|
99
|
+
const decipher = crypto.createDecipheriv(CRYPTO_ALGORITHM, this.key, this.iv);
|
|
100
|
+
const decrypted = Buffer.concat([
|
|
101
|
+
decipher.update(Buffer.from(encryptedCredentials, 'hex')),
|
|
102
|
+
decipher.final(),
|
|
103
|
+
]);
|
|
104
|
+
return JSON.parse(decrypted.toString('utf8'));
|
|
105
|
+
}
|
|
90
106
|
}
|
|
107
|
+
RedoclyOAuthClient.CREDENTIALS_FILE = 'credentials';
|
|
91
108
|
//# sourceMappingURL=oauth-client.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"oauth-client.js","sourceRoot":"","sources":["../../src/auth/oauth-client.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,OAAO,EAAE,MAAM,SAAS,CAAC;AAClC,OAAO,
|
|
1
|
+
{"version":3,"file":"oauth-client.js","sourceRoot":"","sources":["../../src/auth/oauth-client.ts"],"names":[],"mappings":"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"}
|
package/lib/commands/auth.d.ts
CHANGED
|
@@ -3,9 +3,9 @@ export type LoginArgv = {
|
|
|
3
3
|
residency?: string;
|
|
4
4
|
config?: string;
|
|
5
5
|
};
|
|
6
|
-
export declare function handleLogin({ argv,
|
|
6
|
+
export declare function handleLogin({ argv, config }: CommandArgs<LoginArgv>): Promise<void>;
|
|
7
7
|
export type LogoutArgv = {
|
|
8
8
|
config?: string;
|
|
9
9
|
};
|
|
10
|
-
export declare function handleLogout(
|
|
10
|
+
export declare function handleLogout(): Promise<void>;
|
|
11
11
|
//# sourceMappingURL=auth.d.ts.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"auth.d.ts","sourceRoot":"","sources":["../../src/commands/auth.ts"],"names":[],"mappings":"AAKA,OAAO,KAAK,EAAE,WAAW,EAAE,MAAM,eAAe,CAAC;AAEjD,MAAM,MAAM,SAAS,GAAG;IACtB,SAAS,CAAC,EAAE,MAAM,CAAC;IACnB,MAAM,CAAC,EAAE,MAAM,CAAC;CACjB,CAAC;AAEF,wBAAsB,WAAW,CAAC,EAAE,IAAI,EAAE,
|
|
1
|
+
{"version":3,"file":"auth.d.ts","sourceRoot":"","sources":["../../src/commands/auth.ts"],"names":[],"mappings":"AAKA,OAAO,KAAK,EAAE,WAAW,EAAE,MAAM,eAAe,CAAC;AAEjD,MAAM,MAAM,SAAS,GAAG;IACtB,SAAS,CAAC,EAAE,MAAM,CAAC;IACnB,MAAM,CAAC,EAAE,MAAM,CAAC;CACjB,CAAC;AAEF,wBAAsB,WAAW,CAAC,EAAE,IAAI,EAAE,MAAM,EAAE,EAAE,WAAW,CAAC,SAAS,CAAC,iBAYzE;AAED,MAAM,MAAM,UAAU,GAAG;IACvB,MAAM,CAAC,EAAE,MAAM,CAAC;CACjB,CAAC;AAEF,wBAAsB,YAAY,kBAKjC"}
|
package/lib/commands/auth.js
CHANGED
|
@@ -2,11 +2,10 @@ import { logger } from '@redocly/openapi-core';
|
|
|
2
2
|
import { exitWithError } from '../utils/error.js';
|
|
3
3
|
import { RedoclyOAuthClient } from '../auth/oauth-client.js';
|
|
4
4
|
import { getReuniteUrl } from '../reunite/api/index.js';
|
|
5
|
-
export async function handleLogin({ argv,
|
|
6
|
-
const
|
|
7
|
-
const reuniteUrl = getReuniteUrl(residency);
|
|
5
|
+
export async function handleLogin({ argv, config }) {
|
|
6
|
+
const reuniteUrl = getReuniteUrl(config, argv.residency);
|
|
8
7
|
try {
|
|
9
|
-
const oauthClient = new RedoclyOAuthClient(
|
|
8
|
+
const oauthClient = new RedoclyOAuthClient();
|
|
10
9
|
await oauthClient.login(reuniteUrl);
|
|
11
10
|
}
|
|
12
11
|
catch {
|
|
@@ -18,8 +17,8 @@ export async function handleLogin({ argv, version, config }) {
|
|
|
18
17
|
}
|
|
19
18
|
}
|
|
20
19
|
}
|
|
21
|
-
export async function handleLogout(
|
|
22
|
-
const oauthClient = new RedoclyOAuthClient(
|
|
20
|
+
export async function handleLogout() {
|
|
21
|
+
const oauthClient = new RedoclyOAuthClient();
|
|
23
22
|
oauthClient.logout();
|
|
24
23
|
logger.output('Logged out from the Redocly account. ✋ \n');
|
|
25
24
|
}
|
package/lib/commands/auth.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"auth.js","sourceRoot":"","sources":["../../src/commands/auth.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,MAAM,EAAE,MAAM,uBAAuB,CAAC;AAC/C,OAAO,EAAE,aAAa,EAAE,MAAM,mBAAmB,CAAC;AAClD,OAAO,EAAE,kBAAkB,EAAE,MAAM,yBAAyB,CAAC;AAC7D,OAAO,EAAE,aAAa,EAAE,MAAM,yBAAyB,CAAC;AASxD,MAAM,CAAC,KAAK,UAAU,WAAW,CAAC,EAAE,IAAI,EAAE,
|
|
1
|
+
{"version":3,"file":"auth.js","sourceRoot":"","sources":["../../src/commands/auth.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,MAAM,EAAE,MAAM,uBAAuB,CAAC;AAC/C,OAAO,EAAE,aAAa,EAAE,MAAM,mBAAmB,CAAC;AAClD,OAAO,EAAE,kBAAkB,EAAE,MAAM,yBAAyB,CAAC;AAC7D,OAAO,EAAE,aAAa,EAAE,MAAM,yBAAyB,CAAC;AASxD,MAAM,CAAC,KAAK,UAAU,WAAW,CAAC,EAAE,IAAI,EAAE,MAAM,EAA0B;IACxE,MAAM,UAAU,GAAG,aAAa,CAAC,MAAM,EAAE,IAAI,CAAC,SAAS,CAAC,CAAC;IACzD,IAAI,CAAC;QACH,MAAM,WAAW,GAAG,IAAI,kBAAkB,EAAE,CAAC;QAC7C,MAAM,WAAW,CAAC,KAAK,CAAC,UAAU,CAAC,CAAC;IACtC,CAAC;IAAC,MAAM,CAAC;QACP,IAAI,IAAI,CAAC,SAAS,EAAE,CAAC;YACnB,aAAa,CAAC,mBAAmB,UAAU,UAAU,CAAC,CAAC;QACzD,CAAC;aAAM,CAAC;YACN,aAAa,CAAC,8DAA8D,CAAC,CAAC;QAChF,CAAC;IACH,CAAC;AACH,CAAC;AAMD,MAAM,CAAC,KAAK,UAAU,YAAY;IAChC,MAAM,WAAW,GAAG,IAAI,kBAAkB,EAAE,CAAC;IAC7C,WAAW,CAAC,MAAM,EAAE,CAAC;IAErB,MAAM,CAAC,MAAM,CAAC,2CAA2C,CAAC,CAAC;AAC7D,CAAC"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"bundle.d.ts","sourceRoot":"","sources":["../../src/commands/bundle.ts"],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"bundle.d.ts","sourceRoot":"","sources":["../../src/commands/bundle.ts"],"names":[],"mappings":"AAwBA,OAAO,KAAK,EAAE,eAAe,EAAU,mBAAmB,EAAE,MAAM,aAAa,CAAC;AAChF,OAAO,KAAK,EAAE,WAAW,EAAE,MAAM,eAAe,CAAC;AAEjD,MAAM,MAAM,UAAU,GAAG;IACvB,IAAI,CAAC,EAAE,MAAM,EAAE,CAAC;IAChB,OAAO,CAAC,EAAE,MAAM,EAAE,CAAC;IACnB,MAAM,CAAC,EAAE,MAAM,CAAC;IAChB,GAAG,CAAC,EAAE,eAAe,CAAC;IACtB,YAAY,CAAC,EAAE,OAAO,CAAC;IACvB,KAAK,CAAC,EAAE,OAAO,CAAC;IAChB,QAAQ,CAAC,EAAE,MAAM,CAAC;IAClB,0BAA0B,CAAC,EAAE,OAAO,CAAC;IACrC,qBAAqB,CAAC,EAAE,OAAO,CAAC;IAChC,gBAAgB,CAAC,EAAE,MAAM,EAAE,CAAC;IAC5B,mBAAmB,CAAC,EAAE,MAAM,EAAE,CAAC;CAChC,GAAG,mBAAmB,CAAC;AAExB,wBAAsB,YAAY,CAAC,EACjC,IAAI,EACJ,MAAM,EACN,OAAO,EACP,eAAe,GAChB,EAAE,WAAW,CAAC,UAAU,CAAC,iBAsHzB"}
|
package/lib/commands/bundle.js
CHANGED
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
import { performance } from 'perf_hooks';
|
|
2
2
|
import { blue, gray, green, yellow } from 'colorette';
|
|
3
3
|
import { writeFileSync } from 'fs';
|
|
4
|
-
import { formatProblems, getTotals, bundle, logger } from '@redocly/openapi-core';
|
|
4
|
+
import { formatProblems, getTotals, bundle, logger, } from '@redocly/openapi-core';
|
|
5
5
|
import { dumpBundle, getExecutionTime, getFallbackApisOrExit, getOutputFileName, handleError, printUnusedWarnings, saveBundle, sortTopLevelKeysForOas, formatPath, } from '../utils/miscellaneous.js';
|
|
6
6
|
import { AbortFlowError } from '../utils/error.js';
|
|
7
7
|
export async function handleBundle({ argv, config, version, collectSpecData, }) {
|
|
@@ -15,7 +15,12 @@ export async function handleBundle({ argv, config, version, collectSpecData, })
|
|
|
15
15
|
const aliasConfig = config.forAlias(alias);
|
|
16
16
|
aliasConfig.skipPreprocessors(argv['skip-preprocessor']);
|
|
17
17
|
aliasConfig.skipDecorators(argv['skip-decorator']);
|
|
18
|
-
|
|
18
|
+
if (alias === undefined) {
|
|
19
|
+
logger.info(gray(`bundling ${formatPath(path)}...\n`));
|
|
20
|
+
}
|
|
21
|
+
else {
|
|
22
|
+
logger.info(gray(`bundling ${formatPath(path)} using configuration for api '${alias}'...\n`));
|
|
23
|
+
}
|
|
19
24
|
const { bundle: result, problems, ...meta } = await bundle({
|
|
20
25
|
ref: path,
|
|
21
26
|
config: aliasConfig,
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"bundle.js","sourceRoot":"","sources":["../../src/commands/bundle.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,WAAW,EAAE,MAAM,YAAY,CAAC;AACzC,OAAO,EAAE,IAAI,EAAE,IAAI,EAAE,KAAK,EAAE,MAAM,EAAE,MAAM,WAAW,CAAC;AACtD,OAAO,EAAE,aAAa,EAAE,MAAM,IAAI,CAAC;AACnC,OAAO,
|
|
1
|
+
{"version":3,"file":"bundle.js","sourceRoot":"","sources":["../../src/commands/bundle.ts"],"names":[],"mappings":"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"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"join.d.ts","sourceRoot":"","sources":["../../src/commands/join.ts"],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"join.d.ts","sourceRoot":"","sources":["../../src/commands/join.ts"],"names":[],"mappings":"AAyCA,OAAO,KAAK,EAAE,WAAW,EAAE,MAAM,eAAe,CAAC;AACjD,OAAO,KAAK,EAAE,mBAAmB,EAAE,MAAM,aAAa,CAAC;AAgBvD,MAAM,MAAM,QAAQ,GAAG;IACrB,IAAI,EAAE,MAAM,EAAE,CAAC;IACf,4BAA4B,CAAC,EAAE,MAAM,CAAC;IACtC,2BAA2B,CAAC,EAAE,OAAO,CAAC;IACtC,kCAAkC,CAAC,EAAE,MAAM,CAAC;IAC5C,sBAAsB,CAAC,EAAE,OAAO,CAAC;IACjC,MAAM,CAAC,EAAE,MAAM,CAAC;CACjB,GAAG,mBAAmB,CAAC;AAExB,wBAAsB,UAAU,CAAC,EAC/B,IAAI,EACJ,MAAM,EACN,OAAO,EAAE,cAAc,EACvB,eAAe,GAChB,EAAE,WAAW,CAAC,QAAQ,CAAC,sBAkkBvB"}
|
package/lib/commands/join.js
CHANGED
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
import * as path from 'node:path';
|
|
2
2
|
import { red, blue, yellow, green } from 'colorette';
|
|
3
3
|
import { performance } from 'node:perf_hooks';
|
|
4
|
-
import { BaseResolver, formatProblems, getTotals, detectSpec, bundleDocument, isRef, dequal, logger, isString, isPlainObject, keysOf, } from '@redocly/openapi-core';
|
|
4
|
+
import { BaseResolver, formatProblems, getTotals, detectSpec, bundleDocument, isRef, dequal, logger, isString, isPlainObject, keysOf, isEmptyObject, } from '@redocly/openapi-core';
|
|
5
5
|
import { getFallbackApisOrExit, printExecutionTime, sortTopLevelKeysForOas, getAndValidateFileExtension, writeToFileByExtension, } from '../utils/miscellaneous.js';
|
|
6
6
|
import { exitWithError } from '../utils/error.js';
|
|
7
7
|
import { COMPONENTS, OPENAPI3_METHOD_NAMES } from './split/types.js';
|
|
@@ -74,6 +74,14 @@ export async function handleJoin({ argv, config, version: packageVersion, collec
|
|
|
74
74
|
return exitWithError(`${e.message}: ${blue(document.source.absoluteRef)}.`);
|
|
75
75
|
}
|
|
76
76
|
}
|
|
77
|
+
const [first, ...others] = (documents ?? []);
|
|
78
|
+
const serversAreTheSame = others.every(({ parsed: { paths, servers } }) => {
|
|
79
|
+
// include only documents with paths
|
|
80
|
+
if (!paths || isEmptyObject(paths || {})) {
|
|
81
|
+
return true;
|
|
82
|
+
}
|
|
83
|
+
return servers?.every((server) => first.parsed.servers?.find(({ url }) => url === server.url));
|
|
84
|
+
});
|
|
77
85
|
const joinedDef = {};
|
|
78
86
|
const potentialConflicts = {
|
|
79
87
|
tags: {},
|
|
@@ -82,8 +90,13 @@ export async function handleJoin({ argv, config, version: packageVersion, collec
|
|
|
82
90
|
webhooks: {},
|
|
83
91
|
};
|
|
84
92
|
addInfoSectionAndSpecVersion(documents, prefixComponentsWithInfoProp);
|
|
93
|
+
if (serversAreTheSame && first.parsed.servers) {
|
|
94
|
+
joinedDef.servers = first.parsed.servers;
|
|
95
|
+
}
|
|
85
96
|
for (const document of documents) {
|
|
86
|
-
const openapi = document.parsed
|
|
97
|
+
const openapi = isPlainObject(document.parsed)
|
|
98
|
+
? document.parsed
|
|
99
|
+
: {};
|
|
87
100
|
const { tags, info } = openapi;
|
|
88
101
|
const api = path.relative(process.cwd(), document.source.absoluteRef);
|
|
89
102
|
const apiFilename = getApiFilename(api);
|
|
@@ -106,9 +119,8 @@ export async function handleJoin({ argv, config, version: packageVersion, collec
|
|
|
106
119
|
if (tags) {
|
|
107
120
|
populateTags(context);
|
|
108
121
|
}
|
|
109
|
-
collectServers(openapi);
|
|
110
122
|
collectExternalDocs(openapi, context);
|
|
111
|
-
collectPaths(openapi, context);
|
|
123
|
+
collectPaths(openapi, context, serversAreTheSame);
|
|
112
124
|
collectComponents(openapi, context);
|
|
113
125
|
collectWebhooks(oasVersion, openapi, context);
|
|
114
126
|
if (componentsPrefix) {
|
|
@@ -132,7 +144,7 @@ export async function handleJoin({ argv, config, version: packageVersion, collec
|
|
|
132
144
|
if (withoutXTagGroups && !potentialConflicts.tags.hasOwnProperty('description')) {
|
|
133
145
|
potentialConflicts.tags['description'] = {};
|
|
134
146
|
}
|
|
135
|
-
for (const tag of tags) {
|
|
147
|
+
for (const tag of tags || []) {
|
|
136
148
|
const entrypointTagName = addPrefix(tag.name, tagsPrefix);
|
|
137
149
|
if (tag.description) {
|
|
138
150
|
tag.description = addComponentsPrefix(tag.description, componentsPrefix);
|
|
@@ -189,19 +201,6 @@ export async function handleJoin({ argv, config, version: packageVersion, collec
|
|
|
189
201
|
joinedDef[xTagGroups][indexGroup][Tags].push(entrypointTagName);
|
|
190
202
|
}
|
|
191
203
|
}
|
|
192
|
-
function collectServers(openapi) {
|
|
193
|
-
const { servers } = openapi;
|
|
194
|
-
if (servers) {
|
|
195
|
-
if (!joinedDef.hasOwnProperty('servers')) {
|
|
196
|
-
joinedDef['servers'] = [];
|
|
197
|
-
}
|
|
198
|
-
for (const server of servers) {
|
|
199
|
-
if (!joinedDef.servers.some((s) => s.url === server.url)) {
|
|
200
|
-
joinedDef.servers.push(server);
|
|
201
|
-
}
|
|
202
|
-
}
|
|
203
|
-
}
|
|
204
|
-
}
|
|
205
204
|
function collectExternalDocs(openapi, { api }) {
|
|
206
205
|
const { externalDocs } = openapi;
|
|
207
206
|
if (externalDocs) {
|
|
@@ -212,8 +211,8 @@ export async function handleJoin({ argv, config, version: packageVersion, collec
|
|
|
212
211
|
joinedDef['externalDocs'] = externalDocs;
|
|
213
212
|
}
|
|
214
213
|
}
|
|
215
|
-
function collectPaths(openapi, { apiFilename, apiTitle, api, potentialConflicts, tagsPrefix, componentsPrefix, }) {
|
|
216
|
-
const { paths } = openapi;
|
|
214
|
+
function collectPaths(openapi, { apiFilename, apiTitle, api, potentialConflicts, tagsPrefix, componentsPrefix, }, serversAreTheSame) {
|
|
215
|
+
const { paths, servers: rootServers } = openapi;
|
|
217
216
|
const operationsSet = new Set(OPENAPI3_METHOD_NAMES);
|
|
218
217
|
if (paths) {
|
|
219
218
|
if (!joinedDef.hasOwnProperty('paths')) {
|
|
@@ -227,13 +226,16 @@ export async function handleJoin({ argv, config, version: packageVersion, collec
|
|
|
227
226
|
potentialConflicts.paths[path] = {};
|
|
228
227
|
}
|
|
229
228
|
const pathItem = paths[path];
|
|
229
|
+
const servers = serversAreTheSame
|
|
230
|
+
? pathItem.servers
|
|
231
|
+
: pathItem.servers || rootServers || [];
|
|
232
|
+
if (servers) {
|
|
233
|
+
collectPathServers(servers, path);
|
|
234
|
+
}
|
|
230
235
|
for (const field of keysOf(pathItem)) {
|
|
231
236
|
if (operationsSet.has(field)) {
|
|
232
237
|
collectPathOperation(pathItem, path, field);
|
|
233
238
|
}
|
|
234
|
-
if (field === 'servers') {
|
|
235
|
-
collectPathServers(pathItem, path);
|
|
236
|
-
}
|
|
237
239
|
if (field === 'parameters') {
|
|
238
240
|
collectPathParameters(pathItem, path);
|
|
239
241
|
}
|
|
@@ -252,14 +254,14 @@ export async function handleJoin({ argv, config, version: packageVersion, collec
|
|
|
252
254
|
}
|
|
253
255
|
joinedDef.paths[path][field] = fieldValue;
|
|
254
256
|
}
|
|
255
|
-
function collectPathServers(
|
|
256
|
-
if (!
|
|
257
|
+
function collectPathServers(servers, path) {
|
|
258
|
+
if (!servers) {
|
|
257
259
|
return;
|
|
258
260
|
}
|
|
259
261
|
if (!joinedDef.paths[path].hasOwnProperty('servers')) {
|
|
260
262
|
joinedDef.paths[path].servers = [];
|
|
261
263
|
}
|
|
262
|
-
for (const server of
|
|
264
|
+
for (const server of servers) {
|
|
263
265
|
let isFoundServer = false;
|
|
264
266
|
for (const pathServer of joinedDef.paths[path].servers) {
|
|
265
267
|
if (pathServer.url === server.url) {
|