@coralogix/rum-cli 1.1.17 → 1.1.18
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/.prettierrc +15 -0
- package/README.md +26 -19
- package/api/rum-api.ts +104 -91
- package/cli/commands/delete-source-maps-command.ts +34 -0
- package/cli/commands/index.ts +7 -0
- package/cli/commands/update-source-maps-command.ts +38 -0
- package/cli/commands/upload-source-maps-command.ts +38 -0
- package/cli/rum-cli.ts +13 -47
- package/cli/validators/index.ts +9 -10
- package/config/config.ts +21 -21
- package/consts/consts.ts +16 -0
- package/dist/api/rum-api.d.ts +4 -3
- package/dist/api/rum-api.js +60 -72
- package/dist/cli/commands/delete-source-maps-command.d.ts +2 -0
- package/dist/cli/commands/delete-source-maps-command.js +43 -0
- package/dist/cli/commands/index.d.ts +6 -0
- package/dist/cli/commands/index.js +8 -0
- package/dist/cli/commands/update-source-maps-command.d.ts +2 -0
- package/dist/cli/commands/update-source-maps-command.js +47 -0
- package/dist/cli/commands/upload-source-maps-command.d.ts +2 -0
- package/dist/cli/commands/upload-source-maps-command.js +47 -0
- package/dist/cli/rum-cli.js +14 -55
- package/dist/cli/validators/index.js +5 -6
- package/dist/config/config.js +6 -5
- package/dist/{cli/theme/index.d.ts → consts/consts.d.ts} +2 -0
- package/dist/consts/consts.js +16 -0
- package/dist/models/commands.model.d.ts +29 -0
- package/dist/models/commands.model.js +3 -0
- package/dist/proto-models/com/coralogix/rum/v2/rum_service.d.ts +88 -1
- package/dist/proto-models/com/coralogix/rum/v2/rum_service.js +228 -4
- package/dist/proto-models/com/coralogix/rum/v2/rum_session_recording_service.d.ts +65 -0
- package/dist/proto-models/com/coralogix/rum/v2/rum_session_recording_service.js +182 -0
- package/dist/proto-models/com/coralogix/rum/v2/rum_source_map_service.d.ts +92 -0
- package/dist/proto-models/com/coralogix/rum/v2/rum_source_map_service.js +271 -2
- package/dist/proto-models/com/coralogix/rum/v2/source_map_release.d.ts +13 -0
- package/dist/proto-models/com/coralogix/rum/v2/source_map_release.js +77 -2
- package/dist/services/source-maps.service.d.ts +5 -0
- package/dist/services/source-maps.service.js +80 -0
- package/dist/utils/index.d.ts +6 -0
- package/dist/utils/index.js +115 -0
- package/models/commands.model.ts +31 -0
- package/package.json +5 -3
- package/proto-models/com/coralogix/rum/v2/rum_service.ts +268 -2
- package/proto-models/com/coralogix/rum/v2/rum_session_recording_service.ts +217 -0
- package/proto-models/com/coralogix/rum/v2/rum_source_map_service.ts +322 -0
- package/proto-models/com/coralogix/rum/v2/source_map_release.ts +90 -0
- package/protofetch.lock +2 -2
- package/protofetch.toml +1 -1
- package/protos/com/coralogix/rum/v2/rum_service.proto +16 -1
- package/protos/com/coralogix/rum/v2/rum_session_recording_service.proto +15 -0
- package/protos/com/coralogix/rum/v2/rum_source_map_service.proto +18 -0
- package/protos/com/coralogix/rum/v2/source_map_release.proto +6 -0
- package/protoset.bin +0 -0
- package/services/source-maps.service.ts +96 -0
- package/utils/index.ts +93 -0
- package/cli/consts/consts.ts +0 -2
- package/cli/theme/index.ts +0 -5
- package/dist/cli/consts/consts.d.ts +0 -2
- package/dist/cli/consts/consts.js +0 -6
- package/dist/cli/theme/index.js +0 -7
- package/dist/model/cli.model.d.ts +0 -1
- package/dist/model/cli.model.js +0 -12
- package/dist/services/source-maps/source-maps.service.d.ts +0 -3
- package/dist/services/source-maps/source-maps.service.js +0 -42
- package/dist/services/source-maps/utils/traverse-folder.util.d.ts +0 -2
- package/dist/services/source-maps/utils/traverse-folder.util.js +0 -42
- package/model/cli.model.ts +0 -8
- package/services/source-maps/source-maps.service.ts +0 -31
- package/services/source-maps/utils/traverse-folder.util.ts +0 -33
|
@@ -25,8 +25,9 @@ message GetRumTemplatesRequest {
|
|
|
25
25
|
int64 end_time = 2;
|
|
26
26
|
repeated Filter data_filters = 3;
|
|
27
27
|
repeated Filter metadata_filters = 4;
|
|
28
|
-
bool
|
|
28
|
+
bool is_archive = 5;
|
|
29
29
|
optional string free_text = 6;
|
|
30
|
+
optional string lucene_query = 7;
|
|
30
31
|
}
|
|
31
32
|
|
|
32
33
|
message GetRumTemplatesResponse {
|
|
@@ -42,8 +43,22 @@ message GetSourceMapReleasesResponse {
|
|
|
42
43
|
repeated SourceMapRelease source_map_releases = 1;
|
|
43
44
|
}
|
|
44
45
|
|
|
46
|
+
message GetSourceMapReleasesInternalRequest {}
|
|
47
|
+
|
|
48
|
+
message GetSourceMapReleasesInternalResponse {
|
|
49
|
+
repeated SourceMapRelease releases = 1;
|
|
50
|
+
}
|
|
51
|
+
|
|
52
|
+
message GetReleasesSeriesPointsRequest {}
|
|
53
|
+
|
|
54
|
+
message GetReleasesSeriesPointsResponse {
|
|
55
|
+
repeated ReleasePoint releases_points = 1;
|
|
56
|
+
}
|
|
57
|
+
|
|
45
58
|
service RumService {
|
|
46
59
|
rpc GetMappedStackTrace(GetMappedStackTraceRequest) returns (GetMappedStackTraceResponse) {}
|
|
47
60
|
rpc GetRumTemplates(GetRumTemplatesRequest) returns (GetRumTemplatesResponse) {}
|
|
48
61
|
rpc GetSourceMapReleases(GetSourceMapReleasesRequest) returns (GetSourceMapReleasesResponse) {}
|
|
62
|
+
rpc GetSourceMapReleasesInternal(GetSourceMapReleasesInternalRequest) returns (GetSourceMapReleasesInternalResponse) {}
|
|
63
|
+
rpc GetReleasesSeriesPoints(GetReleasesSeriesPointsRequest) returns (GetReleasesSeriesPointsResponse) {}
|
|
49
64
|
}
|
|
@@ -0,0 +1,15 @@
|
|
|
1
|
+
syntax = "proto3";
|
|
2
|
+
package com.coralogix.rum.v2;
|
|
3
|
+
|
|
4
|
+
message GetSessionRecordingRequest {
|
|
5
|
+
string session_id = 1;
|
|
6
|
+
string application = 2;
|
|
7
|
+
}
|
|
8
|
+
|
|
9
|
+
message GetSessionRecordingResponse {
|
|
10
|
+
bytes session_recordings = 1;
|
|
11
|
+
}
|
|
12
|
+
|
|
13
|
+
service RumSessionRecordingService {
|
|
14
|
+
rpc GetSessionRecording(GetSessionRecordingRequest) returns (GetSessionRecordingResponse) {}
|
|
15
|
+
}
|
|
@@ -12,8 +12,26 @@ message UploadSourceMapsRequest {
|
|
|
12
12
|
repeated FileMetadata files = 6;
|
|
13
13
|
}
|
|
14
14
|
|
|
15
|
+
message UpdateSourceMapRequest {
|
|
16
|
+
string application = 1;
|
|
17
|
+
string release_id = 2;
|
|
18
|
+
optional string commit_hash = 3;
|
|
19
|
+
optional string repo_name = 4;
|
|
20
|
+
optional string user = 5;
|
|
21
|
+
repeated FileMetadata files = 6;
|
|
22
|
+
}
|
|
23
|
+
|
|
24
|
+
message DeleteSourceMapRequest {
|
|
25
|
+
string application = 1;
|
|
26
|
+
string release_id = 2;
|
|
27
|
+
}
|
|
28
|
+
|
|
15
29
|
message UploadSourceMapsResponse {}
|
|
30
|
+
message UpdateSourceMapResponse {}
|
|
31
|
+
message DeleteSourceMapResponse {}
|
|
16
32
|
|
|
17
33
|
service RumSourceMapService {
|
|
18
34
|
rpc UploadSourceMaps(UploadSourceMapsRequest) returns (UploadSourceMapsResponse) {}
|
|
35
|
+
rpc UpdateSourceMap(UpdateSourceMapRequest) returns (UpdateSourceMapResponse) {}
|
|
36
|
+
rpc DeleteSourceMap(DeleteSourceMapRequest) returns (DeleteSourceMapResponse) {}
|
|
19
37
|
}
|
package/protoset.bin
CHANGED
|
Binary file
|
|
@@ -0,0 +1,96 @@
|
|
|
1
|
+
import {
|
|
2
|
+
DeleteSourceMapRequest,
|
|
3
|
+
UpdateSourceMapRequest,
|
|
4
|
+
UploadSourceMapsRequest,
|
|
5
|
+
} from '../proto-models/com/coralogix/rum/v2/rum_source_map_service';
|
|
6
|
+
import { RumApi } from '../api/rum-api';
|
|
7
|
+
import { GRAY_COLOR, GREEN_COLOR, RED_COLOR } from '../consts/consts';
|
|
8
|
+
import { traverseFolder } from '../utils';
|
|
9
|
+
|
|
10
|
+
export class SourceMapsService {
|
|
11
|
+
static async upload(
|
|
12
|
+
application: string,
|
|
13
|
+
version: string,
|
|
14
|
+
repoName: string | undefined,
|
|
15
|
+
commitHash: string | undefined,
|
|
16
|
+
orgName: string | undefined,
|
|
17
|
+
folderPath: string,
|
|
18
|
+
env: string,
|
|
19
|
+
privateKey: string,
|
|
20
|
+
): Promise<void> {
|
|
21
|
+
const request = UploadSourceMapsRequest.create();
|
|
22
|
+
|
|
23
|
+
request.application = application;
|
|
24
|
+
request.releaseId = version;
|
|
25
|
+
request.repoName = repoName;
|
|
26
|
+
request.commitHash = commitHash;
|
|
27
|
+
request.user = orgName;
|
|
28
|
+
|
|
29
|
+
console.log(GRAY_COLOR, '🚀 Uploading source maps...');
|
|
30
|
+
|
|
31
|
+
try {
|
|
32
|
+
await traverseFolder(folderPath, request);
|
|
33
|
+
|
|
34
|
+
await RumApi.uploadSourceMaps(request, env, privateKey);
|
|
35
|
+
|
|
36
|
+
console.log(GREEN_COLOR, '✅ Source maps uploaded successfully!');
|
|
37
|
+
console.log(GREEN_COLOR, `✅ Total chunk files processed: ${request.files.length}`);
|
|
38
|
+
console.log(GREEN_COLOR, '✅ Processing complete.');
|
|
39
|
+
} catch (error) {
|
|
40
|
+
console.log(RED_COLOR, '❌ An error occurred');
|
|
41
|
+
console.error(RED_COLOR, error);
|
|
42
|
+
}
|
|
43
|
+
}
|
|
44
|
+
|
|
45
|
+
static async update(
|
|
46
|
+
application: string,
|
|
47
|
+
version: string,
|
|
48
|
+
repoName: string | undefined,
|
|
49
|
+
commitHash: string | undefined,
|
|
50
|
+
orgName: string | undefined,
|
|
51
|
+
folderPath: string,
|
|
52
|
+
env: string,
|
|
53
|
+
privateKey: string,
|
|
54
|
+
): Promise<void> {
|
|
55
|
+
const request = UpdateSourceMapRequest.create();
|
|
56
|
+
|
|
57
|
+
request.application = application;
|
|
58
|
+
request.releaseId = version;
|
|
59
|
+
request.repoName = repoName;
|
|
60
|
+
request.commitHash = commitHash;
|
|
61
|
+
request.user = orgName;
|
|
62
|
+
|
|
63
|
+
console.log(GRAY_COLOR, '🔄 Updating source maps...');
|
|
64
|
+
|
|
65
|
+
try {
|
|
66
|
+
await traverseFolder(folderPath, request);
|
|
67
|
+
|
|
68
|
+
await RumApi.updateSourceMap(request, env, privateKey);
|
|
69
|
+
|
|
70
|
+
console.log(GREEN_COLOR, '✅ Source maps updated successfully!');
|
|
71
|
+
console.log(GREEN_COLOR, `✅ Total chunk files processed: ${request.files.length}`);
|
|
72
|
+
console.log(GREEN_COLOR, '✅ Processing complete.');
|
|
73
|
+
} catch (error) {
|
|
74
|
+
console.log(RED_COLOR, '❌ An error occurred');
|
|
75
|
+
console.error(RED_COLOR, error);
|
|
76
|
+
}
|
|
77
|
+
}
|
|
78
|
+
|
|
79
|
+
static async delete(application: string, version: string, env: string, privateKey: string): Promise<void> {
|
|
80
|
+
const request = DeleteSourceMapRequest.create();
|
|
81
|
+
|
|
82
|
+
request.application = application;
|
|
83
|
+
request.releaseId = version;
|
|
84
|
+
|
|
85
|
+
console.log(GRAY_COLOR, '🗑️ Deleting source maps...');
|
|
86
|
+
|
|
87
|
+
try {
|
|
88
|
+
await RumApi.deleteSourceMap(request, env, privateKey);
|
|
89
|
+
|
|
90
|
+
console.log(GREEN_COLOR, '✅ Source maps deleted successfully!');
|
|
91
|
+
} catch (error) {
|
|
92
|
+
console.log(RED_COLOR, '❌ An error occurred');
|
|
93
|
+
console.error(RED_COLOR, error);
|
|
94
|
+
}
|
|
95
|
+
}
|
|
96
|
+
}
|
package/utils/index.ts
ADDED
|
@@ -0,0 +1,93 @@
|
|
|
1
|
+
import * as pako from 'pako';
|
|
2
|
+
import { Dirent, promises as fsPromises } from 'fs';
|
|
3
|
+
import { UploadSourceMapsRequest } from '../proto-models/com/coralogix/rum/v2/rum_source_map_service';
|
|
4
|
+
import config from '../config';
|
|
5
|
+
import * as path from 'path';
|
|
6
|
+
import { MB, RED_COLOR } from '../consts/consts';
|
|
7
|
+
import { FileMetadata } from '../proto-models/com/coralogix/rum/v2/file';
|
|
8
|
+
|
|
9
|
+
const { readdir, stat, readFile } = fsPromises;
|
|
10
|
+
|
|
11
|
+
export const traverseFolder = async (folderPath: string, request: UploadSourceMapsRequest): Promise<void> => {
|
|
12
|
+
const stack: string[] = [folderPath];
|
|
13
|
+
|
|
14
|
+
while (stack.length) {
|
|
15
|
+
const currentPath = stack.pop();
|
|
16
|
+
const entries: Dirent[] = await readdir(currentPath!, { withFileTypes: true });
|
|
17
|
+
|
|
18
|
+
await Promise.all(
|
|
19
|
+
entries.map(async (file: Dirent) => {
|
|
20
|
+
const { name } = file;
|
|
21
|
+
const entryPath = path.join(currentPath as string, name);
|
|
22
|
+
const isDotMapFile = file.isFile() && name.endsWith('.js.map');
|
|
23
|
+
|
|
24
|
+
if (file.isDirectory()) stack.push(entryPath);
|
|
25
|
+
else if (isDotMapFile) request.files.push(await getFileMetadata(entryPath));
|
|
26
|
+
}),
|
|
27
|
+
);
|
|
28
|
+
}
|
|
29
|
+
};
|
|
30
|
+
|
|
31
|
+
const getFileMetadata = async (filePath: string): Promise<FileMetadata> => {
|
|
32
|
+
const { size } = await stat(filePath);
|
|
33
|
+
const { name } = path.parse(filePath);
|
|
34
|
+
const content = await readFile(filePath);
|
|
35
|
+
|
|
36
|
+
return { chunkName: name, size, content };
|
|
37
|
+
};
|
|
38
|
+
|
|
39
|
+
export const compressFileContentChunks = (fileContent: Uint8Array): Uint8Array => {
|
|
40
|
+
const { chunkSize } = config.rumApi; // 512 KB chunk size
|
|
41
|
+
const deflate = new pako.Deflate();
|
|
42
|
+
const totalChunks = Math.ceil(fileContent.length / chunkSize);
|
|
43
|
+
|
|
44
|
+
for (let i = 0; i < totalChunks; i++) {
|
|
45
|
+
const start = i * chunkSize;
|
|
46
|
+
const end = start + chunkSize;
|
|
47
|
+
const chunk = fileContent.subarray(start, end);
|
|
48
|
+
|
|
49
|
+
const isLastChunk = i === totalChunks - 1;
|
|
50
|
+
|
|
51
|
+
deflate.push(chunk, isLastChunk);
|
|
52
|
+
}
|
|
53
|
+
|
|
54
|
+
const { err, msg, result } = deflate;
|
|
55
|
+
|
|
56
|
+
if (err) console.error(RED_COLOR, msg);
|
|
57
|
+
|
|
58
|
+
return result;
|
|
59
|
+
};
|
|
60
|
+
|
|
61
|
+
export const validateCompressedFilesSize = (compressedFiles: FileMetadata[], maxCompressedFilesSize: number): void => {
|
|
62
|
+
const compressedFilesSize = compressedFiles.reduce((sum, file) => sum + file.content.length, 0);
|
|
63
|
+
|
|
64
|
+
if (compressedFilesSize > maxCompressedFilesSize) {
|
|
65
|
+
// Convert sizes to megabytes (MB)
|
|
66
|
+
const compressedFilesSizeMB: string = (compressedFilesSize / MB).toFixed(2);
|
|
67
|
+
const maxCompressedFilesSizeMB: string = (maxCompressedFilesSize / MB).toFixed(2);
|
|
68
|
+
|
|
69
|
+
const errorMessage = `
|
|
70
|
+
❌ Error: The total size of compressed files exceeds the maximum allowed size.
|
|
71
|
+
Total Compressed Files Size: ${compressedFilesSizeMB} MB
|
|
72
|
+
Maximum Allowed Size: ${maxCompressedFilesSizeMB} MB
|
|
73
|
+
`;
|
|
74
|
+
|
|
75
|
+
console.error(RED_COLOR, errorMessage);
|
|
76
|
+
process.exit(1);
|
|
77
|
+
}
|
|
78
|
+
};
|
|
79
|
+
|
|
80
|
+
export const checkMissingArguments = <T>(options: T, requiredArgs: (keyof T)[]): void => {
|
|
81
|
+
const missingArgs: string[] = [];
|
|
82
|
+
|
|
83
|
+
requiredArgs.forEach((arg: keyof T) => {
|
|
84
|
+
if (!options[arg]) missingArgs.push(arg as string);
|
|
85
|
+
});
|
|
86
|
+
|
|
87
|
+
if (missingArgs.length > 0) {
|
|
88
|
+
const missingArgsList = missingArgs.map(arg => `- ${arg}`).join('\n');
|
|
89
|
+
const errorMessage = `❌ Missing required arguments:\n${missingArgsList}\nPlease provide the necessary options`;
|
|
90
|
+
console.error(RED_COLOR, errorMessage);
|
|
91
|
+
process.exit(1);
|
|
92
|
+
}
|
|
93
|
+
};
|
package/cli/consts/consts.ts
DELETED
package/cli/theme/index.ts
DELETED
|
@@ -1,6 +0,0 @@
|
|
|
1
|
-
"use strict";
|
|
2
|
-
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
-
exports.MB = exports.KB = void 0;
|
|
4
|
-
exports.KB = 1024;
|
|
5
|
-
exports.MB = 1024 * 1024;
|
|
6
|
-
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiY29uc3RzLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vY2xpL2NvbnN0cy9jb25zdHMudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6Ijs7O0FBQWEsUUFBQSxFQUFFLEdBQUcsSUFBSSxDQUFDO0FBQ1YsUUFBQSxFQUFFLEdBQUcsSUFBSSxHQUFHLElBQUksQ0FBQyIsInNvdXJjZXNDb250ZW50IjpbImV4cG9ydCBjb25zdCBLQiA9IDEwMjQ7XG5leHBvcnQgY29uc3QgTUIgPSAxMDI0ICogMTAyNDsiXX0=
|
package/dist/cli/theme/index.js
DELETED
|
@@ -1,7 +0,0 @@
|
|
|
1
|
-
"use strict";
|
|
2
|
-
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
-
exports.GRAY_COLOR = exports.RED_COLOR = exports.GREEN_COLOR = void 0;
|
|
4
|
-
exports.GREEN_COLOR = '\x1b[32m%s\x1b[0m';
|
|
5
|
-
exports.RED_COLOR = '\x1b[31m%s\x1b[0m';
|
|
6
|
-
exports.GRAY_COLOR = '\x1b[37m%s\x1b[0m';
|
|
7
|
-
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiaW5kZXguanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi9jbGkvdGhlbWUvaW5kZXgudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6Ijs7O0FBQWEsUUFBQSxXQUFXLEdBQUcsbUJBQW1CLENBQUM7QUFFbEMsUUFBQSxTQUFTLEdBQUcsbUJBQW1CLENBQUM7QUFFaEMsUUFBQSxVQUFVLEdBQUcsbUJBQW1CLENBQUMiLCJzb3VyY2VzQ29udGVudCI6WyJleHBvcnQgY29uc3QgR1JFRU5fQ09MT1IgPSAnXFx4MWJbMzJtJXNcXHgxYlswbSc7XG5cbmV4cG9ydCBjb25zdCBSRURfQ09MT1IgPSAnXFx4MWJbMzFtJXNcXHgxYlswbSc7XG5cbmV4cG9ydCBjb25zdCBHUkFZX0NPTE9SID0gJ1xceDFiWzM3bSVzXFx4MWJbMG0nOyJdfQ==
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
export declare const envToDomain: Record<string, string>;
|
package/dist/model/cli.model.js
DELETED
|
@@ -1,12 +0,0 @@
|
|
|
1
|
-
"use strict";
|
|
2
|
-
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
-
exports.envToDomain = void 0;
|
|
4
|
-
exports.envToDomain = {
|
|
5
|
-
EU1: 'https://ng-api-grpc.coralogix.com:443',
|
|
6
|
-
EU2: 'https://ng-api-grpc.eu2.coralogix.com:443',
|
|
7
|
-
US1: 'https://ng-api-grpc.coralogix.us:443',
|
|
8
|
-
US2: 'https://ng-api-grpc.cx498.com:443',
|
|
9
|
-
AP1: 'https://ng-api-grpc.app.coralogix.in:443',
|
|
10
|
-
AP2: 'https://ng-api-grpc.coralogixsg.com:443', // ap-southeast-1 (Singapore)
|
|
11
|
-
};
|
|
12
|
-
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiY2xpLm1vZGVsLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vbW9kZWwvY2xpLm1vZGVsLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiI7OztBQUFhLFFBQUEsV0FBVyxHQUEyQjtJQUMvQyxHQUFHLEVBQUUsdUNBQXVDO0lBQzVDLEdBQUcsRUFBRSwyQ0FBMkM7SUFDaEQsR0FBRyxFQUFFLHNDQUFzQztJQUMzQyxHQUFHLEVBQUUsbUNBQW1DO0lBQ3hDLEdBQUcsRUFBRSwwQ0FBMEM7SUFDL0MsR0FBRyxFQUFFLHlDQUF5QyxFQUFFLDZCQUE2QjtDQUNoRixDQUFBIiwic291cmNlc0NvbnRlbnQiOlsiZXhwb3J0IGNvbnN0IGVudlRvRG9tYWluOiBSZWNvcmQ8c3RyaW5nLCBzdHJpbmc+ID0ge1xuICAgIEVVMTogJ2h0dHBzOi8vbmctYXBpLWdycGMuY29yYWxvZ2l4LmNvbTo0NDMnLCAvLyBldS13ZXN0LTEgKElyZWxhbmQpXG4gICAgRVUyOiAnaHR0cHM6Ly9uZy1hcGktZ3JwYy5ldTIuY29yYWxvZ2l4LmNvbTo0NDMnLCAvLyBldS1ub3J0aC0xIChTdG9ja2hvbG0pXG4gICAgVVMxOiAnaHR0cHM6Ly9uZy1hcGktZ3JwYy5jb3JhbG9naXgudXM6NDQzJywgLy8gdXMtZWFzdC0yIChPaGlvKVxuICAgIFVTMjogJ2h0dHBzOi8vbmctYXBpLWdycGMuY3g0OTguY29tOjQ0MycsICAvLyB1cy13ZXN0LTIgKE9yZWdvbilcbiAgICBBUDE6ICdodHRwczovL25nLWFwaS1ncnBjLmFwcC5jb3JhbG9naXguaW46NDQzJywgLy8gYXAtc291dGgtMSAoTXVtYmFpKVxuICAgIEFQMjogJ2h0dHBzOi8vbmctYXBpLWdycGMuY29yYWxvZ2l4c2cuY29tOjQ0MycsIC8vIGFwLXNvdXRoZWFzdC0xIChTaW5nYXBvcmUpXG59Il19
|
|
@@ -1,42 +0,0 @@
|
|
|
1
|
-
"use strict";
|
|
2
|
-
var __awaiter = (this && this.__awaiter) || function (thisArg, _arguments, P, generator) {
|
|
3
|
-
function adopt(value) { return value instanceof P ? value : new P(function (resolve) { resolve(value); }); }
|
|
4
|
-
return new (P || (P = Promise))(function (resolve, reject) {
|
|
5
|
-
function fulfilled(value) { try { step(generator.next(value)); } catch (e) { reject(e); } }
|
|
6
|
-
function rejected(value) { try { step(generator["throw"](value)); } catch (e) { reject(e); } }
|
|
7
|
-
function step(result) { result.done ? resolve(result.value) : adopt(result.value).then(fulfilled, rejected); }
|
|
8
|
-
step((generator = generator.apply(thisArg, _arguments || [])).next());
|
|
9
|
-
});
|
|
10
|
-
};
|
|
11
|
-
Object.defineProperty(exports, "__esModule", { value: true });
|
|
12
|
-
exports.SourceMapsService = void 0;
|
|
13
|
-
const rum_source_map_service_1 = require("../../proto-models/com/coralogix/rum/v2/rum_source_map_service");
|
|
14
|
-
const traverse_folder_util_1 = require("./utils/traverse-folder.util");
|
|
15
|
-
const rum_api_1 = require("../../api/rum-api");
|
|
16
|
-
const theme_1 = require("../../cli/theme");
|
|
17
|
-
class SourceMapsService {
|
|
18
|
-
static upload(application, version, repoName, commitHash, orgName, folderPath, env, privateKey) {
|
|
19
|
-
return __awaiter(this, void 0, void 0, function* () {
|
|
20
|
-
const request = rum_source_map_service_1.UploadSourceMapsRequest.create();
|
|
21
|
-
request.application = application;
|
|
22
|
-
request.releaseId = version;
|
|
23
|
-
request.repoName = repoName;
|
|
24
|
-
request.commitHash = commitHash;
|
|
25
|
-
request.user = orgName;
|
|
26
|
-
console.log(theme_1.GRAY_COLOR, '🚀 Uploading source maps...');
|
|
27
|
-
try {
|
|
28
|
-
yield (0, traverse_folder_util_1.traverseFolder)(folderPath, request);
|
|
29
|
-
yield rum_api_1.RumApi.uploadSourceMaps(request, env, privateKey);
|
|
30
|
-
console.log(theme_1.GREEN_COLOR, '✅ Source maps uploaded successfully!');
|
|
31
|
-
console.log(theme_1.GREEN_COLOR, `✅ Total chunk files processed: ${request.files.length}`);
|
|
32
|
-
console.log(theme_1.GREEN_COLOR, '✅ Processing complete.');
|
|
33
|
-
}
|
|
34
|
-
catch (error) {
|
|
35
|
-
console.log(theme_1.RED_COLOR, '❌ An error occurred');
|
|
36
|
-
console.error(theme_1.RED_COLOR, error);
|
|
37
|
-
}
|
|
38
|
-
});
|
|
39
|
-
}
|
|
40
|
-
}
|
|
41
|
-
exports.SourceMapsService = SourceMapsService;
|
|
42
|
-
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoic291cmNlLW1hcHMuc2VydmljZS5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uL3NlcnZpY2VzL3NvdXJjZS1tYXBzL3NvdXJjZS1tYXBzLnNlcnZpY2UudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6Ijs7Ozs7Ozs7Ozs7O0FBQUEsMkdBQXVHO0FBQ3ZHLHVFQUE0RDtBQUM1RCwrQ0FBeUM7QUFDekMsMkNBQW1FO0FBRW5FLE1BQWEsaUJBQWlCO0lBQzFCLE1BQU0sQ0FBTyxNQUFNLENBQUMsV0FBbUIsRUFBRSxPQUFlLEVBQUUsUUFBZ0IsRUFBRSxVQUFrQixFQUFFLE9BQWUsRUFBRSxVQUFrQixFQUFFLEdBQVcsRUFBRSxVQUFrQjs7WUFDaEssTUFBTSxPQUFPLEdBQUcsZ0RBQXVCLENBQUMsTUFBTSxFQUFFLENBQUM7WUFFakQsT0FBTyxDQUFDLFdBQVcsR0FBRyxXQUFXLENBQUM7WUFDbEMsT0FBTyxDQUFDLFNBQVMsR0FBRyxPQUFPLENBQUM7WUFDNUIsT0FBTyxDQUFDLFFBQVEsR0FBRyxRQUFRLENBQUM7WUFDNUIsT0FBTyxDQUFDLFVBQVUsR0FBRyxVQUFVLENBQUM7WUFDaEMsT0FBTyxDQUFDLElBQUksR0FBRyxPQUFPLENBQUM7WUFFdkIsT0FBTyxDQUFDLEdBQUcsQ0FBQyxrQkFBVSxFQUFFLDZCQUE2QixDQUFDLENBQUM7WUFFdkQsSUFBSTtnQkFDQSxNQUFNLElBQUEscUNBQWMsRUFBQyxVQUFVLEVBQUUsT0FBTyxDQUFDLENBQUM7Z0JBRTFDLE1BQU0sZ0JBQU0sQ0FBQyxnQkFBZ0IsQ0FBQyxPQUFPLEVBQUUsR0FBRyxFQUFFLFVBQVUsQ0FBQyxDQUFDO2dCQUV4RCxPQUFPLENBQUMsR0FBRyxDQUFDLG1CQUFXLEVBQUUsc0NBQXNDLENBQUMsQ0FBQztnQkFDakUsT0FBTyxDQUFDLEdBQUcsQ0FBQyxtQkFBVyxFQUFFLGtDQUFrQyxPQUFPLENBQUMsS0FBSyxDQUFDLE1BQU0sRUFBRSxDQUFDLENBQUM7Z0JBQ25GLE9BQU8sQ0FBQyxHQUFHLENBQUMsbUJBQVcsRUFBRSx3QkFBd0IsQ0FBQyxDQUFDO2FBQ3REO1lBQUMsT0FBTyxLQUFLLEVBQUU7Z0JBQ1osT0FBTyxDQUFDLEdBQUcsQ0FBQyxpQkFBUyxFQUFFLHFCQUFxQixDQUFDLENBQUM7Z0JBQzlDLE9BQU8sQ0FBQyxLQUFLLENBQUMsaUJBQVMsRUFBRSxLQUFLLENBQUMsQ0FBQzthQUNuQztRQUNMLENBQUM7S0FBQTtDQUNKO0FBekJELDhDQXlCQyIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7VXBsb2FkU291cmNlTWFwc1JlcXVlc3R9IGZyb20gXCIuLi8uLi9wcm90by1tb2RlbHMvY29tL2NvcmFsb2dpeC9ydW0vdjIvcnVtX3NvdXJjZV9tYXBfc2VydmljZVwiO1xuaW1wb3J0IHt0cmF2ZXJzZUZvbGRlcn0gZnJvbSBcIi4vdXRpbHMvdHJhdmVyc2UtZm9sZGVyLnV0aWxcIjtcbmltcG9ydCB7UnVtQXBpfSBmcm9tIFwiLi4vLi4vYXBpL3J1bS1hcGlcIjtcbmltcG9ydCB7R1JBWV9DT0xPUiwgR1JFRU5fQ09MT1IsIFJFRF9DT0xPUn0gZnJvbSBcIi4uLy4uL2NsaS90aGVtZVwiO1xuXG5leHBvcnQgY2xhc3MgU291cmNlTWFwc1NlcnZpY2Uge1xuICAgIHN0YXRpYyBhc3luYyB1cGxvYWQoYXBwbGljYXRpb246IHN0cmluZywgdmVyc2lvbjogc3RyaW5nLCByZXBvTmFtZTogc3RyaW5nLCBjb21taXRIYXNoOiBzdHJpbmcsIG9yZ05hbWU6IHN0cmluZywgZm9sZGVyUGF0aDogc3RyaW5nLCBlbnY6IHN0cmluZywgcHJpdmF0ZUtleTogc3RyaW5nKTogUHJvbWlzZTx2b2lkPiB7XG4gICAgICAgIGNvbnN0IHJlcXVlc3QgPSBVcGxvYWRTb3VyY2VNYXBzUmVxdWVzdC5jcmVhdGUoKTtcblxuICAgICAgICByZXF1ZXN0LmFwcGxpY2F0aW9uID0gYXBwbGljYXRpb247XG4gICAgICAgIHJlcXVlc3QucmVsZWFzZUlkID0gdmVyc2lvbjtcbiAgICAgICAgcmVxdWVzdC5yZXBvTmFtZSA9IHJlcG9OYW1lO1xuICAgICAgICByZXF1ZXN0LmNvbW1pdEhhc2ggPSBjb21taXRIYXNoO1xuICAgICAgICByZXF1ZXN0LnVzZXIgPSBvcmdOYW1lO1xuXG4gICAgICAgIGNvbnNvbGUubG9nKEdSQVlfQ09MT1IsICfwn5qAIFVwbG9hZGluZyBzb3VyY2UgbWFwcy4uLicpO1xuXG4gICAgICAgIHRyeSB7XG4gICAgICAgICAgICBhd2FpdCB0cmF2ZXJzZUZvbGRlcihmb2xkZXJQYXRoLCByZXF1ZXN0KTtcblxuICAgICAgICAgICAgYXdhaXQgUnVtQXBpLnVwbG9hZFNvdXJjZU1hcHMocmVxdWVzdCwgZW52LCBwcml2YXRlS2V5KTtcblxuICAgICAgICAgICAgY29uc29sZS5sb2coR1JFRU5fQ09MT1IsICfinIUgU291cmNlIG1hcHMgdXBsb2FkZWQgc3VjY2Vzc2Z1bGx5IScpO1xuICAgICAgICAgICAgY29uc29sZS5sb2coR1JFRU5fQ09MT1IsIGDinIUgVG90YWwgY2h1bmsgZmlsZXMgcHJvY2Vzc2VkOiAke3JlcXVlc3QuZmlsZXMubGVuZ3RofWApO1xuICAgICAgICAgICAgY29uc29sZS5sb2coR1JFRU5fQ09MT1IsICfinIUgUHJvY2Vzc2luZyBjb21wbGV0ZS4nKTtcbiAgICAgICAgfSBjYXRjaCAoZXJyb3IpIHtcbiAgICAgICAgICAgIGNvbnNvbGUubG9nKFJFRF9DT0xPUiwgJ+KdjCBBbiBlcnJvciBvY2N1cnJlZCcpO1xuICAgICAgICAgICAgY29uc29sZS5lcnJvcihSRURfQ09MT1IsIGVycm9yKTtcbiAgICAgICAgfVxuICAgIH1cbn0iXX0=
|
|
@@ -1,42 +0,0 @@
|
|
|
1
|
-
"use strict";
|
|
2
|
-
var __awaiter = (this && this.__awaiter) || function (thisArg, _arguments, P, generator) {
|
|
3
|
-
function adopt(value) { return value instanceof P ? value : new P(function (resolve) { resolve(value); }); }
|
|
4
|
-
return new (P || (P = Promise))(function (resolve, reject) {
|
|
5
|
-
function fulfilled(value) { try { step(generator.next(value)); } catch (e) { reject(e); } }
|
|
6
|
-
function rejected(value) { try { step(generator["throw"](value)); } catch (e) { reject(e); } }
|
|
7
|
-
function step(result) { result.done ? resolve(result.value) : adopt(result.value).then(fulfilled, rejected); }
|
|
8
|
-
step((generator = generator.apply(thisArg, _arguments || [])).next());
|
|
9
|
-
});
|
|
10
|
-
};
|
|
11
|
-
var __importDefault = (this && this.__importDefault) || function (mod) {
|
|
12
|
-
return (mod && mod.__esModule) ? mod : { "default": mod };
|
|
13
|
-
};
|
|
14
|
-
Object.defineProperty(exports, "__esModule", { value: true });
|
|
15
|
-
exports.traverseFolder = void 0;
|
|
16
|
-
const fs_1 = require("fs");
|
|
17
|
-
const path_1 = __importDefault(require("path"));
|
|
18
|
-
const { readdir, stat, readFile } = fs_1.promises;
|
|
19
|
-
const traverseFolder = (folderPath, request) => __awaiter(void 0, void 0, void 0, function* () {
|
|
20
|
-
const stack = [folderPath];
|
|
21
|
-
while (stack.length) {
|
|
22
|
-
const currentPath = stack.pop();
|
|
23
|
-
const entries = yield readdir(currentPath, { withFileTypes: true });
|
|
24
|
-
yield Promise.all(entries.map((file) => __awaiter(void 0, void 0, void 0, function* () {
|
|
25
|
-
const { name } = file;
|
|
26
|
-
const entryPath = path_1.default.join(currentPath, name);
|
|
27
|
-
const isDotMapFile = file.isFile() && name.endsWith('.js.map');
|
|
28
|
-
if (file.isDirectory())
|
|
29
|
-
stack.push(entryPath);
|
|
30
|
-
else if (isDotMapFile)
|
|
31
|
-
request.files.push(yield getFileMetadata(entryPath));
|
|
32
|
-
})));
|
|
33
|
-
}
|
|
34
|
-
});
|
|
35
|
-
exports.traverseFolder = traverseFolder;
|
|
36
|
-
const getFileMetadata = (filePath) => __awaiter(void 0, void 0, void 0, function* () {
|
|
37
|
-
const { size } = yield stat(filePath);
|
|
38
|
-
const { name } = path_1.default.parse(filePath);
|
|
39
|
-
const content = yield readFile(filePath);
|
|
40
|
-
return { chunkName: name, size, content };
|
|
41
|
-
});
|
|
42
|
-
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoidHJhdmVyc2UtZm9sZGVyLnV0aWwuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi9zZXJ2aWNlcy9zb3VyY2UtbWFwcy91dGlscy90cmF2ZXJzZS1mb2xkZXIudXRpbC50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiOzs7Ozs7Ozs7Ozs7Ozs7QUFBQSwyQkFBa0Q7QUFDbEQsZ0RBQXdCO0FBSXhCLE1BQU0sRUFBQyxPQUFPLEVBQUUsSUFBSSxFQUFFLFFBQVEsRUFBQyxHQUFHLGFBQVUsQ0FBQztBQUV0QyxNQUFNLGNBQWMsR0FBRyxDQUFPLFVBQWtCLEVBQUUsT0FBZ0MsRUFBaUIsRUFBRTtJQUN4RyxNQUFNLEtBQUssR0FBYSxDQUFDLFVBQVUsQ0FBQyxDQUFDO0lBRXJDLE9BQU8sS0FBSyxDQUFDLE1BQU0sRUFBRTtRQUNqQixNQUFNLFdBQVcsR0FBRyxLQUFLLENBQUMsR0FBRyxFQUFFLENBQUM7UUFDaEMsTUFBTSxPQUFPLEdBQWEsTUFBTSxPQUFPLENBQUMsV0FBWSxFQUFFLEVBQUMsYUFBYSxFQUFFLElBQUksRUFBQyxDQUFDLENBQUM7UUFFN0UsTUFBTSxPQUFPLENBQUMsR0FBRyxDQUFDLE9BQU8sQ0FBQyxHQUFHLENBQUMsQ0FBTyxJQUFZLEVBQUUsRUFBRTtZQUNqRCxNQUFNLEVBQUMsSUFBSSxFQUFDLEdBQUcsSUFBSSxDQUFDO1lBQ3BCLE1BQU0sU0FBUyxHQUFHLGNBQUksQ0FBQyxJQUFJLENBQUMsV0FBcUIsRUFBRSxJQUFJLENBQUMsQ0FBQztZQUN6RCxNQUFNLFlBQVksR0FBRyxJQUFJLENBQUMsTUFBTSxFQUFFLElBQUksSUFBSSxDQUFDLFFBQVEsQ0FBQyxTQUFTLENBQUMsQ0FBQztZQUUvRCxJQUFJLElBQUksQ0FBQyxXQUFXLEVBQUU7Z0JBQUUsS0FBSyxDQUFDLElBQUksQ0FBQyxTQUFTLENBQUMsQ0FBQztpQkFFekMsSUFBSSxZQUFZO2dCQUFFLE9BQU8sQ0FBQyxLQUFLLENBQUMsSUFBSSxDQUFDLE1BQU0sZUFBZSxDQUFDLFNBQVMsQ0FBQyxDQUFDLENBQUM7UUFDaEYsQ0FBQyxDQUFBLENBQUMsQ0FBQyxDQUFDO0tBQ1A7QUFDTCxDQUFDLENBQUEsQ0FBQTtBQWpCWSxRQUFBLGNBQWMsa0JBaUIxQjtBQUVELE1BQU0sZUFBZSxHQUFHLENBQU8sUUFBZ0IsRUFBeUIsRUFBRTtJQUN0RSxNQUFNLEVBQUMsSUFBSSxFQUFDLEdBQUcsTUFBTSxJQUFJLENBQUMsUUFBUSxDQUFDLENBQUM7SUFDcEMsTUFBTSxFQUFDLElBQUksRUFBQyxHQUFHLGNBQUksQ0FBQyxLQUFLLENBQUMsUUFBUSxDQUFDLENBQUM7SUFDcEMsTUFBTSxPQUFPLEdBQUcsTUFBTSxRQUFRLENBQUMsUUFBUSxDQUFDLENBQUM7SUFFekMsT0FBTyxFQUFDLFNBQVMsRUFBRSxJQUFJLEVBQUUsSUFBSSxFQUFFLE9BQU8sRUFBQyxDQUFDO0FBQzVDLENBQUMsQ0FBQSxDQUFBIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHtEaXJlbnQsIHByb21pc2VzIGFzIGZzUHJvbWlzZXN9IGZyb20gXCJmc1wiO1xuaW1wb3J0IHBhdGggZnJvbSBcInBhdGhcIjtcbmltcG9ydCB7VXBsb2FkU291cmNlTWFwc1JlcXVlc3R9IGZyb20gXCIuLi8uLi8uLi9wcm90by1tb2RlbHMvY29tL2NvcmFsb2dpeC9ydW0vdjIvcnVtX3NvdXJjZV9tYXBfc2VydmljZVwiO1xuaW1wb3J0IHtGaWxlTWV0YWRhdGF9IGZyb20gXCIuLi8uLi8uLi9wcm90by1tb2RlbHMvY29tL2NvcmFsb2dpeC9ydW0vdjIvZmlsZVwiO1xuXG5jb25zdCB7cmVhZGRpciwgc3RhdCwgcmVhZEZpbGV9ID0gZnNQcm9taXNlcztcblxuZXhwb3J0IGNvbnN0IHRyYXZlcnNlRm9sZGVyID0gYXN5bmMgKGZvbGRlclBhdGg6IHN0cmluZywgcmVxdWVzdDogVXBsb2FkU291cmNlTWFwc1JlcXVlc3QpOiBQcm9taXNlPHZvaWQ+ID0+IHtcbiAgICBjb25zdCBzdGFjazogc3RyaW5nW10gPSBbZm9sZGVyUGF0aF07XG5cbiAgICB3aGlsZSAoc3RhY2subGVuZ3RoKSB7XG4gICAgICAgIGNvbnN0IGN1cnJlbnRQYXRoID0gc3RhY2sucG9wKCk7XG4gICAgICAgIGNvbnN0IGVudHJpZXM6IERpcmVudFtdID0gYXdhaXQgcmVhZGRpcihjdXJyZW50UGF0aCEsIHt3aXRoRmlsZVR5cGVzOiB0cnVlfSk7XG5cbiAgICAgICAgYXdhaXQgUHJvbWlzZS5hbGwoZW50cmllcy5tYXAoYXN5bmMgKGZpbGU6IERpcmVudCkgPT4ge1xuICAgICAgICAgICAgY29uc3Qge25hbWV9ID0gZmlsZTtcbiAgICAgICAgICAgIGNvbnN0IGVudHJ5UGF0aCA9IHBhdGguam9pbihjdXJyZW50UGF0aCBhcyBzdHJpbmcsIG5hbWUpO1xuICAgICAgICAgICAgY29uc3QgaXNEb3RNYXBGaWxlID0gZmlsZS5pc0ZpbGUoKSAmJiBuYW1lLmVuZHNXaXRoKCcuanMubWFwJyk7XG5cbiAgICAgICAgICAgIGlmIChmaWxlLmlzRGlyZWN0b3J5KCkpIHN0YWNrLnB1c2goZW50cnlQYXRoKTtcblxuICAgICAgICAgICAgZWxzZSBpZiAoaXNEb3RNYXBGaWxlKSByZXF1ZXN0LmZpbGVzLnB1c2goYXdhaXQgZ2V0RmlsZU1ldGFkYXRhKGVudHJ5UGF0aCkpO1xuICAgICAgICB9KSk7XG4gICAgfVxufVxuXG5jb25zdCBnZXRGaWxlTWV0YWRhdGEgPSBhc3luYyAoZmlsZVBhdGg6IHN0cmluZyk6IFByb21pc2U8RmlsZU1ldGFkYXRhPiA9PiB7XG4gICAgY29uc3Qge3NpemV9ID0gYXdhaXQgc3RhdChmaWxlUGF0aCk7XG4gICAgY29uc3Qge25hbWV9ID0gcGF0aC5wYXJzZShmaWxlUGF0aCk7XG4gICAgY29uc3QgY29udGVudCA9IGF3YWl0IHJlYWRGaWxlKGZpbGVQYXRoKTtcblxuICAgIHJldHVybiB7Y2h1bmtOYW1lOiBuYW1lLCBzaXplLCBjb250ZW50fTtcbn1cbiJdfQ==
|
package/model/cli.model.ts
DELETED
|
@@ -1,8 +0,0 @@
|
|
|
1
|
-
export const envToDomain: Record<string, string> = {
|
|
2
|
-
EU1: 'https://ng-api-grpc.coralogix.com:443', // eu-west-1 (Ireland)
|
|
3
|
-
EU2: 'https://ng-api-grpc.eu2.coralogix.com:443', // eu-north-1 (Stockholm)
|
|
4
|
-
US1: 'https://ng-api-grpc.coralogix.us:443', // us-east-2 (Ohio)
|
|
5
|
-
US2: 'https://ng-api-grpc.cx498.com:443', // us-west-2 (Oregon)
|
|
6
|
-
AP1: 'https://ng-api-grpc.app.coralogix.in:443', // ap-south-1 (Mumbai)
|
|
7
|
-
AP2: 'https://ng-api-grpc.coralogixsg.com:443', // ap-southeast-1 (Singapore)
|
|
8
|
-
}
|
|
@@ -1,31 +0,0 @@
|
|
|
1
|
-
import {UploadSourceMapsRequest} from "../../proto-models/com/coralogix/rum/v2/rum_source_map_service";
|
|
2
|
-
import {traverseFolder} from "./utils/traverse-folder.util";
|
|
3
|
-
import {RumApi} from "../../api/rum-api";
|
|
4
|
-
import {GRAY_COLOR, GREEN_COLOR, RED_COLOR} from "../../cli/theme";
|
|
5
|
-
|
|
6
|
-
export class SourceMapsService {
|
|
7
|
-
static async upload(application: string, version: string, repoName: string, commitHash: string, orgName: string, folderPath: string, env: string, privateKey: string): Promise<void> {
|
|
8
|
-
const request = UploadSourceMapsRequest.create();
|
|
9
|
-
|
|
10
|
-
request.application = application;
|
|
11
|
-
request.releaseId = version;
|
|
12
|
-
request.repoName = repoName;
|
|
13
|
-
request.commitHash = commitHash;
|
|
14
|
-
request.user = orgName;
|
|
15
|
-
|
|
16
|
-
console.log(GRAY_COLOR, '🚀 Uploading source maps...');
|
|
17
|
-
|
|
18
|
-
try {
|
|
19
|
-
await traverseFolder(folderPath, request);
|
|
20
|
-
|
|
21
|
-
await RumApi.uploadSourceMaps(request, env, privateKey);
|
|
22
|
-
|
|
23
|
-
console.log(GREEN_COLOR, '✅ Source maps uploaded successfully!');
|
|
24
|
-
console.log(GREEN_COLOR, `✅ Total chunk files processed: ${request.files.length}`);
|
|
25
|
-
console.log(GREEN_COLOR, '✅ Processing complete.');
|
|
26
|
-
} catch (error) {
|
|
27
|
-
console.log(RED_COLOR, '❌ An error occurred');
|
|
28
|
-
console.error(RED_COLOR, error);
|
|
29
|
-
}
|
|
30
|
-
}
|
|
31
|
-
}
|
|
@@ -1,33 +0,0 @@
|
|
|
1
|
-
import {Dirent, promises as fsPromises} from "fs";
|
|
2
|
-
import path from "path";
|
|
3
|
-
import {UploadSourceMapsRequest} from "../../../proto-models/com/coralogix/rum/v2/rum_source_map_service";
|
|
4
|
-
import {FileMetadata} from "../../../proto-models/com/coralogix/rum/v2/file";
|
|
5
|
-
|
|
6
|
-
const {readdir, stat, readFile} = fsPromises;
|
|
7
|
-
|
|
8
|
-
export const traverseFolder = async (folderPath: string, request: UploadSourceMapsRequest): Promise<void> => {
|
|
9
|
-
const stack: string[] = [folderPath];
|
|
10
|
-
|
|
11
|
-
while (stack.length) {
|
|
12
|
-
const currentPath = stack.pop();
|
|
13
|
-
const entries: Dirent[] = await readdir(currentPath!, {withFileTypes: true});
|
|
14
|
-
|
|
15
|
-
await Promise.all(entries.map(async (file: Dirent) => {
|
|
16
|
-
const {name} = file;
|
|
17
|
-
const entryPath = path.join(currentPath as string, name);
|
|
18
|
-
const isDotMapFile = file.isFile() && name.endsWith('.js.map');
|
|
19
|
-
|
|
20
|
-
if (file.isDirectory()) stack.push(entryPath);
|
|
21
|
-
|
|
22
|
-
else if (isDotMapFile) request.files.push(await getFileMetadata(entryPath));
|
|
23
|
-
}));
|
|
24
|
-
}
|
|
25
|
-
}
|
|
26
|
-
|
|
27
|
-
const getFileMetadata = async (filePath: string): Promise<FileMetadata> => {
|
|
28
|
-
const {size} = await stat(filePath);
|
|
29
|
-
const {name} = path.parse(filePath);
|
|
30
|
-
const content = await readFile(filePath);
|
|
31
|
-
|
|
32
|
-
return {chunkName: name, size, content};
|
|
33
|
-
}
|