@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.
Files changed (69) hide show
  1. package/.prettierrc +15 -0
  2. package/README.md +26 -19
  3. package/api/rum-api.ts +104 -91
  4. package/cli/commands/delete-source-maps-command.ts +34 -0
  5. package/cli/commands/index.ts +7 -0
  6. package/cli/commands/update-source-maps-command.ts +38 -0
  7. package/cli/commands/upload-source-maps-command.ts +38 -0
  8. package/cli/rum-cli.ts +13 -47
  9. package/cli/validators/index.ts +9 -10
  10. package/config/config.ts +21 -21
  11. package/consts/consts.ts +16 -0
  12. package/dist/api/rum-api.d.ts +4 -3
  13. package/dist/api/rum-api.js +60 -72
  14. package/dist/cli/commands/delete-source-maps-command.d.ts +2 -0
  15. package/dist/cli/commands/delete-source-maps-command.js +43 -0
  16. package/dist/cli/commands/index.d.ts +6 -0
  17. package/dist/cli/commands/index.js +8 -0
  18. package/dist/cli/commands/update-source-maps-command.d.ts +2 -0
  19. package/dist/cli/commands/update-source-maps-command.js +47 -0
  20. package/dist/cli/commands/upload-source-maps-command.d.ts +2 -0
  21. package/dist/cli/commands/upload-source-maps-command.js +47 -0
  22. package/dist/cli/rum-cli.js +14 -55
  23. package/dist/cli/validators/index.js +5 -6
  24. package/dist/config/config.js +6 -5
  25. package/dist/{cli/theme/index.d.ts → consts/consts.d.ts} +2 -0
  26. package/dist/consts/consts.js +16 -0
  27. package/dist/models/commands.model.d.ts +29 -0
  28. package/dist/models/commands.model.js +3 -0
  29. package/dist/proto-models/com/coralogix/rum/v2/rum_service.d.ts +88 -1
  30. package/dist/proto-models/com/coralogix/rum/v2/rum_service.js +228 -4
  31. package/dist/proto-models/com/coralogix/rum/v2/rum_session_recording_service.d.ts +65 -0
  32. package/dist/proto-models/com/coralogix/rum/v2/rum_session_recording_service.js +182 -0
  33. package/dist/proto-models/com/coralogix/rum/v2/rum_source_map_service.d.ts +92 -0
  34. package/dist/proto-models/com/coralogix/rum/v2/rum_source_map_service.js +271 -2
  35. package/dist/proto-models/com/coralogix/rum/v2/source_map_release.d.ts +13 -0
  36. package/dist/proto-models/com/coralogix/rum/v2/source_map_release.js +77 -2
  37. package/dist/services/source-maps.service.d.ts +5 -0
  38. package/dist/services/source-maps.service.js +80 -0
  39. package/dist/utils/index.d.ts +6 -0
  40. package/dist/utils/index.js +115 -0
  41. package/models/commands.model.ts +31 -0
  42. package/package.json +5 -3
  43. package/proto-models/com/coralogix/rum/v2/rum_service.ts +268 -2
  44. package/proto-models/com/coralogix/rum/v2/rum_session_recording_service.ts +217 -0
  45. package/proto-models/com/coralogix/rum/v2/rum_source_map_service.ts +322 -0
  46. package/proto-models/com/coralogix/rum/v2/source_map_release.ts +90 -0
  47. package/protofetch.lock +2 -2
  48. package/protofetch.toml +1 -1
  49. package/protos/com/coralogix/rum/v2/rum_service.proto +16 -1
  50. package/protos/com/coralogix/rum/v2/rum_session_recording_service.proto +15 -0
  51. package/protos/com/coralogix/rum/v2/rum_source_map_service.proto +18 -0
  52. package/protos/com/coralogix/rum/v2/source_map_release.proto +6 -0
  53. package/protoset.bin +0 -0
  54. package/services/source-maps.service.ts +96 -0
  55. package/utils/index.ts +93 -0
  56. package/cli/consts/consts.ts +0 -2
  57. package/cli/theme/index.ts +0 -5
  58. package/dist/cli/consts/consts.d.ts +0 -2
  59. package/dist/cli/consts/consts.js +0 -6
  60. package/dist/cli/theme/index.js +0 -7
  61. package/dist/model/cli.model.d.ts +0 -1
  62. package/dist/model/cli.model.js +0 -12
  63. package/dist/services/source-maps/source-maps.service.d.ts +0 -3
  64. package/dist/services/source-maps/source-maps.service.js +0 -42
  65. package/dist/services/source-maps/utils/traverse-folder.util.d.ts +0 -2
  66. package/dist/services/source-maps/utils/traverse-folder.util.js +0 -42
  67. package/model/cli.model.ts +0 -8
  68. package/services/source-maps/source-maps.service.ts +0 -31
  69. 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 isArchive = 5;
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
  }
@@ -10,3 +10,9 @@ message SourceMapRelease {
10
10
  optional string user = 6;
11
11
  optional bool is_upload_succeeded = 7;
12
12
  }
13
+
14
+ message ReleasePoint {
15
+ string release_id = 1;
16
+ string application = 2;
17
+ int64 timestamp = 3;
18
+ }
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
+ };
@@ -1,2 +0,0 @@
1
- export const KB = 1024;
2
- export const MB = 1024 * 1024;
@@ -1,5 +0,0 @@
1
- export const GREEN_COLOR = '\x1b[32m%s\x1b[0m';
2
-
3
- export const RED_COLOR = '\x1b[31m%s\x1b[0m';
4
-
5
- export const GRAY_COLOR = '\x1b[37m%s\x1b[0m';
@@ -1,2 +0,0 @@
1
- export declare const KB = 1024;
2
- export declare const MB: number;
@@ -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=
@@ -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>;
@@ -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,3 +0,0 @@
1
- export declare class SourceMapsService {
2
- static upload(application: string, version: string, repoName: string, commitHash: string, orgName: string, folderPath: string, env: string, privateKey: string): Promise<void>;
3
- }
@@ -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,2 +0,0 @@
1
- import { UploadSourceMapsRequest } from "../../../proto-models/com/coralogix/rum/v2/rum_source_map_service";
2
- export declare const traverseFolder: (folderPath: string, request: UploadSourceMapsRequest) => Promise<void>;
@@ -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==
@@ -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
- }