@coralogix/rum-cli 1.1.1 → 1.1.3
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/README.md +50 -17
- package/api/rum-api.ts +50 -51
- package/cli/rum-cli.ts +41 -72
- package/cli/theme/index.ts +5 -0
- package/cli/validators/index.ts +14 -0
- package/dist/api/rum-api.d.ts +5 -2
- package/dist/api/rum-api.js +41 -36
- package/dist/cli/rum-cli.d.ts +1 -2
- package/dist/cli/rum-cli.js +24 -45
- package/dist/cli/theme/index.d.ts +3 -0
- package/dist/cli/theme/index.js +7 -0
- package/dist/cli/validators/index.d.ts +1 -0
- package/dist/cli/validators/index.js +16 -0
- package/dist/model/cli.model.js +1 -3
- package/dist/proto-models/com/coralogix/rum/v2/audit_log.js +62 -0
- package/dist/proto-models/com/coralogix/rum/v2/chunk.js +330 -0
- package/dist/proto-models/com/coralogix/rum/v2/file.js +140 -0
- package/dist/proto-models/com/coralogix/rum/v2/rum_service.js +233 -0
- package/dist/proto-models/com/coralogix/rum/v2/rum_source_map_service.js +181 -0
- package/dist/proto-models/com/coralogix/rum/v2/source_code_file_mapping.js +277 -0
- package/dist/proto-models/google/protobuf/descriptor.js +3612 -0
- package/dist/services/source-maps/source-maps.service.d.ts +3 -0
- package/dist/services/source-maps/source-maps.service.js +42 -0
- package/dist/services/source-maps/utils/traverse-folder.util.d.ts +2 -0
- package/dist/services/source-maps/utils/traverse-folder.util.js +42 -0
- package/generate-protos.sh +3 -3
- package/model/cli.model.ts +0 -2
- package/package.json +4 -4
- package/services/source-maps/source-maps.service.ts +31 -0
- package/{cli → services/source-maps}/utils/traverse-folder.util.ts +2 -2
- package/dist/cli/utils/traverse-folder.util.d.ts +0 -2
- package/dist/cli/utils/traverse-folder.util.js +0 -42
- package/dist/src/app/proto-models/com/coralogix/rum/v2/audit_log.js +0 -62
- package/dist/src/app/proto-models/com/coralogix/rum/v2/chunk.js +0 -330
- package/dist/src/app/proto-models/com/coralogix/rum/v2/file.js +0 -140
- package/dist/src/app/proto-models/com/coralogix/rum/v2/rum_service.js +0 -233
- package/dist/src/app/proto-models/com/coralogix/rum/v2/rum_source_map_service.js +0 -181
- package/dist/src/app/proto-models/com/coralogix/rum/v2/source_code_file_mapping.js +0 -277
- package/dist/src/app/proto-models/google/protobuf/descriptor.js +0 -3612
- /package/dist/{src/app/proto-models → proto-models}/com/coralogix/rum/v2/audit_log.d.ts +0 -0
- /package/dist/{src/app/proto-models → proto-models}/com/coralogix/rum/v2/chunk.d.ts +0 -0
- /package/dist/{src/app/proto-models → proto-models}/com/coralogix/rum/v2/file.d.ts +0 -0
- /package/dist/{src/app/proto-models → proto-models}/com/coralogix/rum/v2/rum_service.d.ts +0 -0
- /package/dist/{src/app/proto-models → proto-models}/com/coralogix/rum/v2/rum_source_map_service.d.ts +0 -0
- /package/dist/{src/app/proto-models → proto-models}/com/coralogix/rum/v2/source_code_file_mapping.d.ts +0 -0
- /package/dist/{src/app/proto-models → proto-models}/google/protobuf/descriptor.d.ts +0 -0
- /package/{src/app/proto-models → proto-models}/com/coralogix/rum/v2/audit_log.ts +0 -0
- /package/{src/app/proto-models → proto-models}/com/coralogix/rum/v2/chunk.ts +0 -0
- /package/{src/app/proto-models → proto-models}/com/coralogix/rum/v2/file.ts +0 -0
- /package/{src/app/proto-models → proto-models}/com/coralogix/rum/v2/rum_service.ts +0 -0
- /package/{src/app/proto-models → proto-models}/com/coralogix/rum/v2/rum_source_map_service.ts +0 -0
- /package/{src/app/proto-models → proto-models}/com/coralogix/rum/v2/source_code_file_mapping.ts +0 -0
- /package/{src/app/proto-models → proto-models}/google/protobuf/descriptor.ts +0 -0
package/README.md
CHANGED
|
@@ -1,7 +1,13 @@
|
|
|
1
|
-
# Coralogix RUM CLI
|
|
1
|
+
# Official Coralogix RUM CLI
|
|
2
2
|
|
|
3
3
|
The Coralogix RUM CLI is a command-line interface tool that simplifies the process of uploading source maps for your applications to the Coralogix RUM service. This CLI tool provides an easy and efficient way to authenticate with the Coralogix API, specify the application and release information, and traverse a folder to upload the relevant source map files.
|
|
4
4
|
|
|
5
|
+
[](https://www.npmjs.com/package/@coralogix/browser)
|
|
6
|
+
|
|
7
|
+
## Links
|
|
8
|
+
|
|
9
|
+
- [Coralogix Real User Monitoring](https://coralogix.com/docs/real-user-monitoring/)
|
|
10
|
+
|
|
5
11
|
## Installation
|
|
6
12
|
|
|
7
13
|
To install the Coralogix RUM CLI, follow these steps:
|
|
@@ -10,9 +16,21 @@ To install the Coralogix RUM CLI, follow these steps:
|
|
|
10
16
|
2. Run the following command to install the CLI globally: `npm install -g coralogix-rum-cli`
|
|
11
17
|
3. Once the installation is complete, you can use the CLI by running the `coralogix-rum-cli` command in your terminal.
|
|
12
18
|
|
|
13
|
-
##
|
|
19
|
+
## Examples
|
|
20
|
+
|
|
21
|
+
Here are some examples of how to use the Coralogix RUM CLI:
|
|
22
|
+
|
|
23
|
+
1. Upload source maps:
|
|
24
|
+
|
|
25
|
+
- `coralogix-rum-cli upload-source-maps -k <privateKey> -a <application> -r <releaseId> -f <folderPath> -e <env> -c <commitHash> -n <repoName> -o <orgName>`
|
|
26
|
+
|
|
27
|
+
2. Display help:
|
|
14
28
|
|
|
15
|
-
|
|
29
|
+
- `coralogix-rum-cli upload-source-maps --help`
|
|
30
|
+
|
|
31
|
+
## Uplaod source maps
|
|
32
|
+
|
|
33
|
+
To uplaod source maps support the following options:
|
|
16
34
|
|
|
17
35
|
- `-k, --private-key <privateKey>`: Private key to authenticate with the Coralogix API.
|
|
18
36
|
- `-a, --application <application>`: Name of the application.
|
|
@@ -21,37 +39,52 @@ The Coralogix RUM CLI supports the following options:
|
|
|
21
39
|
- `-e, --env <env>`: Your environment.
|
|
22
40
|
- `-c, --commit-hash <commitHash>`: GitHub commit hash (optional).
|
|
23
41
|
- `-n, --repo-name <repoName>`: GitHub repository name (optional).
|
|
24
|
-
- `-
|
|
42
|
+
- `-o, --org-name <orgName>`: GitHub organization name (optional).
|
|
25
43
|
- `-h, --help`: Display help.
|
|
26
44
|
|
|
27
45
|
To use the CLI, execute the following command:
|
|
28
46
|
|
|
47
|
+
## Uploading Source Maps Using a Script
|
|
29
48
|
|
|
30
|
-
|
|
49
|
+
To simplify the process of uploading source maps using the Coralogix RUM CLI, you can create a bash script that automates the task. Follow these steps to set up the script:
|
|
31
50
|
|
|
32
|
-
|
|
51
|
+
1. Create a new file named `upload-source-maps.sh` and open it for editing.
|
|
33
52
|
|
|
34
|
-
|
|
53
|
+
2. Copy and paste the following script into the file, replacing the placeholder values with your actual information:
|
|
35
54
|
|
|
36
|
-
|
|
55
|
+
```bash
|
|
56
|
+
#! /usr/bin/env bash
|
|
37
57
|
|
|
38
|
-
|
|
58
|
+
# Replace these values with your actual information
|
|
59
|
+
REPO_NAME="your-repo-name"
|
|
60
|
+
ORG_NAME="your-github-username"
|
|
61
|
+
APPLICATION="your-application-name"
|
|
62
|
+
ENV="your-environment"
|
|
63
|
+
SOURCE_MAPS_PATH="your-source-maps-path"
|
|
64
|
+
PRIVATE_KEY="your-coralogix-private-key"
|
|
39
65
|
|
|
40
|
-
|
|
66
|
+
# Get the commit hash using git rev-parse
|
|
67
|
+
COMMIT_HASH=$(git rev-parse HEAD)
|
|
68
|
+
|
|
69
|
+
# Calculate short hash for release name
|
|
70
|
+
RELEASE_NAME=${COMMIT_HASH:0:8}
|
|
41
71
|
|
|
42
|
-
|
|
72
|
+
# Run Coralogix RUM CLI to upload source maps
|
|
73
|
+
coralogix-rum-cli upload-source-maps -k "$PRIVATE_KEY" -a "$APPLICATION" -r "$RELEASE_NAME" -f "$SOURCE_MAPS_PATH" -e "$ENV" -c "$COMMIT_HASH" -n "$REPO_NAME" -o "$ORG_NAME"
|
|
74
|
+
```
|
|
75
|
+
|
|
76
|
+
If any of the required arguments are missing, the CLI will display an error message and exit.
|
|
43
77
|
|
|
44
78
|
|
|
45
79
|
Please ensure you provide valid values for the options when using the CLI.
|
|
46
80
|
|
|
47
|
-
|
|
81
|
+
# Available Environments
|
|
48
82
|
|
|
49
83
|
The Coralogix RUM CLI supports the following environments:
|
|
50
84
|
|
|
51
85
|
- AP1
|
|
52
86
|
- AP2
|
|
53
|
-
-
|
|
54
|
-
- PRODUCTION
|
|
87
|
+
- EU1
|
|
55
88
|
- EU2
|
|
56
89
|
- US1
|
|
57
90
|
|
|
@@ -61,13 +94,13 @@ Please use the appropriate environment value when specifying the `-e, --env` opt
|
|
|
61
94
|
|
|
62
95
|
The following options are optional and relate to GitHub information, providing context for source maps:
|
|
63
96
|
|
|
64
|
-
-
|
|
97
|
+
- `-c, --commit-hash <commitHash>`: This option allows you to provide the GitHub commit hash associated with the source maps. Including this hash can help in tracking down issues specific to a particular commit.
|
|
65
98
|
|
|
66
99
|
|
|
67
|
-
-
|
|
100
|
+
- `-n, --repo-name <repoName>`: By specifying the GitHub repository name, you're indicating the repository where the source code is hosted. This information aids in correlating source maps with the correct repository.
|
|
68
101
|
|
|
69
102
|
|
|
70
|
-
-
|
|
103
|
+
- `-o, --org-name <orgName>`: This option enables you to input your GitHub organization user, helping to attribute the source maps to the appropriate organization user.
|
|
71
104
|
Providing these GitHub-related options can enhance the accuracy of source map management and issue tracking within Coralogix RUM. However, they are not mandatory and can be omitted if not applicable.
|
|
72
105
|
|
|
73
106
|
## License
|
package/api/rum-api.ts
CHANGED
|
@@ -2,79 +2,78 @@ import {Client, createChannel, createClient, Metadata} from 'nice-grpc';
|
|
|
2
2
|
import {envToDomain} from "../model/cli.model";
|
|
3
3
|
import * as pako from 'pako';
|
|
4
4
|
import config from "../config/config";
|
|
5
|
-
import {RED_COLOR} from "../cli/
|
|
6
|
-
import {FileMetadata} from "../
|
|
5
|
+
import {RED_COLOR} from "../cli/theme";
|
|
6
|
+
import {FileMetadata} from "../proto-models/com/coralogix/rum/v2/file";
|
|
7
7
|
import {
|
|
8
8
|
RumSourceMapServiceDefinition,
|
|
9
9
|
UploadSourceMapsRequest
|
|
10
|
-
} from "../
|
|
10
|
+
} from "../proto-models/com/coralogix/rum/v2/rum_source_map_service";
|
|
11
11
|
|
|
12
|
+
export class RumApi {
|
|
13
|
+
static async uploadSourceMaps(request: UploadSourceMapsRequest, env: string, privateKey: string) {
|
|
12
14
|
|
|
13
|
-
|
|
15
|
+
const {maxMessageSize, keepaliveTimeMs, keepaliveTimeoutMs} = config.rumApi;
|
|
14
16
|
|
|
15
|
-
|
|
17
|
+
try {
|
|
18
|
+
const channel = createChannel(envToDomain[env], undefined, {
|
|
19
|
+
"grpc.max_receive_message_length": maxMessageSize,
|
|
20
|
+
"grpc.max_send_message_length": maxMessageSize,
|
|
21
|
+
'grpc.keepalive_time_ms': keepaliveTimeMs,
|
|
22
|
+
'grpc.keepalive_timeout_ms': keepaliveTimeoutMs,
|
|
23
|
+
});
|
|
16
24
|
|
|
17
|
-
|
|
25
|
+
const client: Client<typeof RumSourceMapServiceDefinition> = createClient(RumSourceMapServiceDefinition, channel);
|
|
18
26
|
|
|
19
|
-
|
|
20
|
-
"grpc.max_receive_message_length": maxMessageSize,
|
|
21
|
-
"grpc.max_send_message_length": maxMessageSize,
|
|
22
|
-
'grpc.keepalive_time_ms': keepaliveTimeMs,
|
|
23
|
-
'grpc.keepalive_timeout_ms': keepaliveTimeoutMs,
|
|
24
|
-
});
|
|
27
|
+
const {files, releaseId, application, repoName, commitHash, user} = request;
|
|
25
28
|
|
|
26
|
-
|
|
29
|
+
const compressedFiles: FileMetadata[] = await Promise.all(
|
|
30
|
+
files.map(async (file: FileMetadata) => {
|
|
31
|
+
const compressedChunks = this.compressFileContentChunks(file.content);
|
|
27
32
|
|
|
28
|
-
|
|
33
|
+
const size = compressedChunks.length;
|
|
29
34
|
|
|
30
|
-
|
|
31
|
-
|
|
32
|
-
|
|
35
|
+
return {chunkName: file.chunkName, size, content: compressedChunks};
|
|
36
|
+
})
|
|
37
|
+
);
|
|
33
38
|
|
|
34
|
-
|
|
39
|
+
const metadata = new Metadata();
|
|
35
40
|
|
|
36
|
-
|
|
37
|
-
})
|
|
38
|
-
);
|
|
41
|
+
metadata.set('Authorization', `Bearer ${privateKey}`);
|
|
39
42
|
|
|
40
|
-
|
|
43
|
+
await client.uploadSourceMaps({
|
|
44
|
+
files: compressedFiles,
|
|
45
|
+
releaseId,
|
|
46
|
+
application,
|
|
47
|
+
repoName,
|
|
48
|
+
commitHash,
|
|
49
|
+
user
|
|
50
|
+
}, {metadata});
|
|
41
51
|
|
|
42
|
-
|
|
52
|
+
} catch (error) {
|
|
53
|
+
throw error;
|
|
54
|
+
}
|
|
55
|
+
};
|
|
43
56
|
|
|
44
|
-
|
|
45
|
-
|
|
46
|
-
|
|
47
|
-
|
|
48
|
-
repoName,
|
|
49
|
-
commitHash,
|
|
50
|
-
user
|
|
51
|
-
}, {metadata});
|
|
57
|
+
private static compressFileContentChunks = (fileContent: Uint8Array): Uint8Array => {
|
|
58
|
+
const {chunkSize} = config.rumApi; // 512 KB chunk size
|
|
59
|
+
const deflate = new pako.Deflate();
|
|
60
|
+
const totalChunks = Math.ceil(fileContent.length / chunkSize);
|
|
52
61
|
|
|
53
|
-
|
|
54
|
-
|
|
55
|
-
|
|
56
|
-
|
|
62
|
+
for (let i = 0; i < totalChunks; i++) {
|
|
63
|
+
const start = i * chunkSize;
|
|
64
|
+
const end = start + chunkSize;
|
|
65
|
+
const chunk = fileContent.subarray(start, end);
|
|
57
66
|
|
|
67
|
+
const isLastChunk = i === totalChunks - 1;
|
|
58
68
|
|
|
59
|
-
|
|
60
|
-
|
|
61
|
-
const deflate = new pako.Deflate();
|
|
62
|
-
const totalChunks = Math.ceil(fileContent.length / chunkSize);
|
|
69
|
+
deflate.push(chunk, isLastChunk);
|
|
70
|
+
}
|
|
63
71
|
|
|
64
|
-
|
|
65
|
-
const start = i * chunkSize;
|
|
66
|
-
const end = start + chunkSize;
|
|
67
|
-
const chunk = fileContent.subarray(start, end);
|
|
72
|
+
const {err, msg, result} = deflate;
|
|
68
73
|
|
|
69
|
-
|
|
74
|
+
if (err) console.error(RED_COLOR, msg);
|
|
70
75
|
|
|
71
|
-
|
|
76
|
+
return result;
|
|
72
77
|
}
|
|
73
|
-
|
|
74
|
-
const {err, msg, result} = deflate;
|
|
75
|
-
|
|
76
|
-
if (err) console.error(RED_COLOR, msg);
|
|
77
|
-
|
|
78
|
-
return result;
|
|
79
78
|
}
|
|
80
79
|
|
package/cli/rum-cli.ts
CHANGED
|
@@ -1,85 +1,54 @@
|
|
|
1
1
|
#!/usr/bin/env node
|
|
2
2
|
import {Command} from 'commander';
|
|
3
|
-
import {
|
|
4
|
-
import {
|
|
5
|
-
import {
|
|
6
|
-
import {UploadSourceMapsRequest} from "../src/app/proto-models/com/coralogix/rum/v2/rum_source_map_service";
|
|
3
|
+
import {SourceMapsService} from "../services/source-maps/source-maps.service";
|
|
4
|
+
import {validateEnvironment} from "./validators";
|
|
5
|
+
import {RED_COLOR} from "./theme";
|
|
7
6
|
|
|
8
|
-
|
|
9
|
-
export const RED_COLOR = '\x1b[31m%s\x1b[0m';
|
|
10
|
-
|
|
11
|
-
const validateEnvironment = (env: string): string => {
|
|
12
|
-
const validEnvironments = Object.keys(envToDomain).join(', ');
|
|
7
|
+
const program = new Command();
|
|
13
8
|
|
|
14
|
-
|
|
15
|
-
const errorMessage = `❌ Invalid environment: ${env}. Possible values are: ${validEnvironments}`;
|
|
16
|
-
console.error(RED_COLOR, errorMessage);
|
|
17
|
-
process.exit(1);
|
|
18
|
-
}
|
|
9
|
+
program.name('coralogix-rum-cli').description('cli for upload source maps')
|
|
19
10
|
|
|
20
|
-
|
|
21
|
-
}
|
|
11
|
+
const uploadCommand = program.command('upload-source-maps');
|
|
22
12
|
|
|
23
|
-
|
|
24
|
-
|
|
25
|
-
program
|
|
13
|
+
uploadCommand
|
|
26
14
|
.option('-k, --private-key <privateKey>', 'Private key to authenticate with the API')
|
|
27
15
|
.option('-a, --application <application>', 'Name of the application')
|
|
28
16
|
.option('-r, --release-id <releaseId>', 'ID of the release')
|
|
29
17
|
.option('-f, --folder-path <folderPath>', 'Path to the folder containing the source maps')
|
|
30
18
|
.option('-e, --env <env>', 'Your environment', validateEnvironment)
|
|
31
|
-
.option('-c, --commit-hash <commitHash>', '
|
|
32
|
-
.option('-n, --repo-name <repoName>', '
|
|
33
|
-
.option('-
|
|
34
|
-
.
|
|
35
|
-
|
|
36
|
-
|
|
37
|
-
|
|
38
|
-
|
|
39
|
-
|
|
40
|
-
|
|
41
|
-
|
|
42
|
-
|
|
43
|
-
|
|
44
|
-
|
|
45
|
-
|
|
46
|
-
|
|
47
|
-
|
|
48
|
-
|
|
49
|
-
|
|
50
|
-
|
|
51
|
-
|
|
52
|
-
|
|
53
|
-
|
|
54
|
-
|
|
55
|
-
|
|
56
|
-
|
|
57
|
-
|
|
58
|
-
|
|
59
|
-
|
|
60
|
-
|
|
61
|
-
|
|
62
|
-
console.error(RED_COLOR,
|
|
63
|
-
process.exit(1);
|
|
19
|
+
.option('-c, --commit-hash <commitHash>', 'GitHub commit hash (optional)')
|
|
20
|
+
.option('-n, --repo-name <repoName>', 'GitHub Repository name (optional)')
|
|
21
|
+
.option('-o, --org-name <orgName>', 'GitHub user name (optional)')
|
|
22
|
+
.description('Upload source maps')
|
|
23
|
+
.action(async (options) => {
|
|
24
|
+
try {
|
|
25
|
+
if (options.help) {
|
|
26
|
+
program.outputHelp();
|
|
27
|
+
process.exit(0);
|
|
28
|
+
}
|
|
29
|
+
|
|
30
|
+
const {privateKey, application, releaseId, folderPath, commitHash, repoName, orgName, env} = options;
|
|
31
|
+
|
|
32
|
+
const missingArgs = [];
|
|
33
|
+
|
|
34
|
+
if (!privateKey) missingArgs.push('private-key');
|
|
35
|
+
if (!application) missingArgs.push('application');
|
|
36
|
+
if (!releaseId) missingArgs.push('release-id');
|
|
37
|
+
if (!folderPath) missingArgs.push('folder-path');
|
|
38
|
+
if (!env) missingArgs.push('env');
|
|
39
|
+
|
|
40
|
+
if (missingArgs.length > 0) {
|
|
41
|
+
const missingArgsList = missingArgs.map(arg => `- ${arg}`).join('\n');
|
|
42
|
+
const errorMessage = `❌ Missing required arguments:\n${missingArgsList}\nPlease provide the necessary options`;
|
|
43
|
+
console.error(RED_COLOR, errorMessage);
|
|
44
|
+
process.exit(1);
|
|
45
|
+
}
|
|
46
|
+
|
|
47
|
+
await SourceMapsService.upload(application, releaseId, repoName, commitHash, orgName, folderPath, env, privateKey)
|
|
48
|
+
} catch (error) {
|
|
49
|
+
console.error(RED_COLOR, '❌ An error occurred:');
|
|
50
|
+
console.error(RED_COLOR, error);
|
|
64
51
|
}
|
|
52
|
+
});
|
|
65
53
|
|
|
66
|
-
|
|
67
|
-
|
|
68
|
-
request.application = application;
|
|
69
|
-
request.releaseId = releaseId;
|
|
70
|
-
request.repoName = repoName;
|
|
71
|
-
request.commitHash = commitHash;
|
|
72
|
-
request.user = user;
|
|
73
|
-
|
|
74
|
-
await traverseFolder(folderPath, request);
|
|
75
|
-
|
|
76
|
-
await uploadSourceMaps(request, env, privateKey);
|
|
77
|
-
|
|
78
|
-
console.log(GREEN_COLOR, '✅ Source maps uploaded successfully!');
|
|
79
|
-
console.log(GREEN_COLOR, `✅ Total chunk files processed: ${request.files.length}`);
|
|
80
|
-
console.log(GREEN_COLOR, '✅ Processing complete.');
|
|
81
|
-
} catch (error) {
|
|
82
|
-
console.error(RED_COLOR, '❌ An error occurred:');
|
|
83
|
-
console.error(RED_COLOR, error);
|
|
84
|
-
}
|
|
85
|
-
})();
|
|
54
|
+
program.parse(process.argv);
|
|
@@ -0,0 +1,14 @@
|
|
|
1
|
+
import {envToDomain} from "../../model/cli.model";
|
|
2
|
+
import {RED_COLOR} from "../theme";
|
|
3
|
+
|
|
4
|
+
export const validateEnvironment = (env: string): string => {
|
|
5
|
+
const validEnvironments = Object.keys(envToDomain).join(', ');
|
|
6
|
+
|
|
7
|
+
if (!(env in envToDomain)) {
|
|
8
|
+
const errorMessage = `❌ Invalid environment: ${env}. Possible values are: ${validEnvironments}`;
|
|
9
|
+
console.error(RED_COLOR, errorMessage);
|
|
10
|
+
process.exit(1);
|
|
11
|
+
}
|
|
12
|
+
|
|
13
|
+
return env;
|
|
14
|
+
}
|
package/dist/api/rum-api.d.ts
CHANGED
|
@@ -1,2 +1,5 @@
|
|
|
1
|
-
import { UploadSourceMapsRequest } from "../
|
|
2
|
-
export declare
|
|
1
|
+
import { UploadSourceMapsRequest } from "../proto-models/com/coralogix/rum/v2/rum_source_map_service";
|
|
2
|
+
export declare class RumApi {
|
|
3
|
+
static uploadSourceMaps(request: UploadSourceMapsRequest, env: string, privateKey: string): Promise<void>;
|
|
4
|
+
private static compressFileContentChunks;
|
|
5
|
+
}
|
package/dist/api/rum-api.js
CHANGED
|
@@ -35,46 +35,51 @@ var __importDefault = (this && this.__importDefault) || function (mod) {
|
|
|
35
35
|
return (mod && mod.__esModule) ? mod : { "default": mod };
|
|
36
36
|
};
|
|
37
37
|
Object.defineProperty(exports, "__esModule", { value: true });
|
|
38
|
-
exports.
|
|
38
|
+
exports.RumApi = void 0;
|
|
39
39
|
const nice_grpc_1 = require("nice-grpc");
|
|
40
40
|
const cli_model_1 = require("../model/cli.model");
|
|
41
41
|
const pako = __importStar(require("pako"));
|
|
42
42
|
const config_1 = __importDefault(require("../config/config"));
|
|
43
|
-
const
|
|
44
|
-
const rum_source_map_service_1 = require("../
|
|
45
|
-
|
|
46
|
-
|
|
47
|
-
|
|
48
|
-
|
|
49
|
-
|
|
50
|
-
|
|
51
|
-
|
|
52
|
-
|
|
43
|
+
const theme_1 = require("../cli/theme");
|
|
44
|
+
const rum_source_map_service_1 = require("../proto-models/com/coralogix/rum/v2/rum_source_map_service");
|
|
45
|
+
class RumApi {
|
|
46
|
+
static uploadSourceMaps(request, env, privateKey) {
|
|
47
|
+
return __awaiter(this, void 0, void 0, function* () {
|
|
48
|
+
const { maxMessageSize, keepaliveTimeMs, keepaliveTimeoutMs } = config_1.default.rumApi;
|
|
49
|
+
try {
|
|
50
|
+
const channel = (0, nice_grpc_1.createChannel)(cli_model_1.envToDomain[env], undefined, {
|
|
51
|
+
"grpc.max_receive_message_length": maxMessageSize,
|
|
52
|
+
"grpc.max_send_message_length": maxMessageSize,
|
|
53
|
+
'grpc.keepalive_time_ms': keepaliveTimeMs,
|
|
54
|
+
'grpc.keepalive_timeout_ms': keepaliveTimeoutMs,
|
|
55
|
+
});
|
|
56
|
+
const client = (0, nice_grpc_1.createClient)(rum_source_map_service_1.RumSourceMapServiceDefinition, channel);
|
|
57
|
+
const { files, releaseId, application, repoName, commitHash, user } = request;
|
|
58
|
+
const compressedFiles = yield Promise.all(files.map((file) => __awaiter(this, void 0, void 0, function* () {
|
|
59
|
+
const compressedChunks = this.compressFileContentChunks(file.content);
|
|
60
|
+
const size = compressedChunks.length;
|
|
61
|
+
return { chunkName: file.chunkName, size, content: compressedChunks };
|
|
62
|
+
})));
|
|
63
|
+
const metadata = new nice_grpc_1.Metadata();
|
|
64
|
+
metadata.set('Authorization', `Bearer ${privateKey}`);
|
|
65
|
+
yield client.uploadSourceMaps({
|
|
66
|
+
files: compressedFiles,
|
|
67
|
+
releaseId,
|
|
68
|
+
application,
|
|
69
|
+
repoName,
|
|
70
|
+
commitHash,
|
|
71
|
+
user
|
|
72
|
+
}, { metadata });
|
|
73
|
+
}
|
|
74
|
+
catch (error) {
|
|
75
|
+
throw error;
|
|
76
|
+
}
|
|
53
77
|
});
|
|
54
|
-
const client = (0, nice_grpc_1.createClient)(rum_source_map_service_1.RumSourceMapServiceDefinition, channel);
|
|
55
|
-
const { files, releaseId, application, repoName, commitHash, user } = request;
|
|
56
|
-
const compressedFiles = yield Promise.all(files.map((file) => __awaiter(void 0, void 0, void 0, function* () {
|
|
57
|
-
const compressedChunks = compressFileContentChunks(file.content);
|
|
58
|
-
const size = compressedChunks.length;
|
|
59
|
-
return { chunkName: file.chunkName, size, content: compressedChunks };
|
|
60
|
-
})));
|
|
61
|
-
const metadata = new nice_grpc_1.Metadata();
|
|
62
|
-
metadata.set('Authorization', `Bearer ${privateKey}`);
|
|
63
|
-
yield client.uploadSourceMaps({
|
|
64
|
-
files: compressedFiles,
|
|
65
|
-
releaseId,
|
|
66
|
-
application,
|
|
67
|
-
repoName,
|
|
68
|
-
commitHash,
|
|
69
|
-
user
|
|
70
|
-
}, { metadata });
|
|
71
78
|
}
|
|
72
|
-
|
|
73
|
-
|
|
74
|
-
|
|
75
|
-
|
|
76
|
-
exports.uploadSourceMaps = uploadSourceMaps;
|
|
77
|
-
const compressFileContentChunks = (fileContent) => {
|
|
79
|
+
;
|
|
80
|
+
}
|
|
81
|
+
exports.RumApi = RumApi;
|
|
82
|
+
RumApi.compressFileContentChunks = (fileContent) => {
|
|
78
83
|
const { chunkSize } = config_1.default.rumApi; // 512 KB chunk size
|
|
79
84
|
const deflate = new pako.Deflate();
|
|
80
85
|
const totalChunks = Math.ceil(fileContent.length / chunkSize);
|
|
@@ -87,7 +92,7 @@ const compressFileContentChunks = (fileContent) => {
|
|
|
87
92
|
}
|
|
88
93
|
const { err, msg, result } = deflate;
|
|
89
94
|
if (err)
|
|
90
|
-
console.error(
|
|
95
|
+
console.error(theme_1.RED_COLOR, msg);
|
|
91
96
|
return result;
|
|
92
97
|
};
|
|
93
|
-
//# sourceMappingURL=data:application/json;base64,
|
|
98
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoicnVtLWFwaS5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uL2FwaS9ydW0tYXBpLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiI7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7O0FBQUEseUNBQXdFO0FBQ3hFLGtEQUErQztBQUMvQywyQ0FBNkI7QUFDN0IsOERBQXNDO0FBQ3RDLHdDQUF1QztBQUV2Qyx3R0FHcUU7QUFFckUsTUFBYSxNQUFNO0lBQ2YsTUFBTSxDQUFPLGdCQUFnQixDQUFDLE9BQWdDLEVBQUUsR0FBVyxFQUFFLFVBQWtCOztZQUUzRixNQUFNLEVBQUMsY0FBYyxFQUFFLGVBQWUsRUFBRSxrQkFBa0IsRUFBQyxHQUFHLGdCQUFNLENBQUMsTUFBTSxDQUFDO1lBRTVFLElBQUk7Z0JBQ0EsTUFBTSxPQUFPLEdBQUcsSUFBQSx5QkFBYSxFQUFDLHVCQUFXLENBQUMsR0FBRyxDQUFDLEVBQUUsU0FBUyxFQUFFO29CQUN2RCxpQ0FBaUMsRUFBRSxjQUFjO29CQUNqRCw4QkFBOEIsRUFBRSxjQUFjO29CQUM5Qyx3QkFBd0IsRUFBRSxlQUFlO29CQUN6QywyQkFBMkIsRUFBRSxrQkFBa0I7aUJBQ2xELENBQUMsQ0FBQztnQkFFSCxNQUFNLE1BQU0sR0FBaUQsSUFBQSx3QkFBWSxFQUFDLHNEQUE2QixFQUFFLE9BQU8sQ0FBQyxDQUFDO2dCQUVsSCxNQUFNLEVBQUMsS0FBSyxFQUFFLFNBQVMsRUFBRSxXQUFXLEVBQUUsUUFBUSxFQUFFLFVBQVUsRUFBRSxJQUFJLEVBQUMsR0FBRyxPQUFPLENBQUM7Z0JBRTVFLE1BQU0sZUFBZSxHQUFtQixNQUFNLE9BQU8sQ0FBQyxHQUFHLENBQ3JELEtBQUssQ0FBQyxHQUFHLENBQUMsQ0FBTyxJQUFrQixFQUFFLEVBQUU7b0JBQ25DLE1BQU0sZ0JBQWdCLEdBQUcsSUFBSSxDQUFDLHlCQUF5QixDQUFDLElBQUksQ0FBQyxPQUFPLENBQUMsQ0FBQztvQkFFdEUsTUFBTSxJQUFJLEdBQUcsZ0JBQWdCLENBQUMsTUFBTSxDQUFDO29CQUVyQyxPQUFPLEVBQUMsU0FBUyxFQUFFLElBQUksQ0FBQyxTQUFTLEVBQUUsSUFBSSxFQUFFLE9BQU8sRUFBRSxnQkFBZ0IsRUFBQyxDQUFDO2dCQUN4RSxDQUFDLENBQUEsQ0FBQyxDQUNMLENBQUM7Z0JBRUYsTUFBTSxRQUFRLEdBQUcsSUFBSSxvQkFBUSxFQUFFLENBQUM7Z0JBRWhDLFFBQVEsQ0FBQyxHQUFHLENBQUMsZUFBZSxFQUFFLFVBQVUsVUFBVSxFQUFFLENBQUMsQ0FBQztnQkFFdEQsTUFBTSxNQUFNLENBQUMsZ0JBQWdCLENBQUM7b0JBQzFCLEtBQUssRUFBRSxlQUFlO29CQUN0QixTQUFTO29CQUNULFdBQVc7b0JBQ1gsUUFBUTtvQkFDUixVQUFVO29CQUNWLElBQUk7aUJBQ1AsRUFBRSxFQUFDLFFBQVEsRUFBQyxDQUFDLENBQUM7YUFFbEI7WUFBQyxPQUFPLEtBQUssRUFBRTtnQkFDWixNQUFNLEtBQUssQ0FBQzthQUNmO1FBQ0wsQ0FBQztLQUFBO0lBQUEsQ0FBQzs7QUEzQ04sd0JBa0VDO0FBckJrQixnQ0FBeUIsR0FBRyxDQUFDLFdBQXVCLEVBQWMsRUFBRTtJQUMvRSxNQUFNLEVBQUMsU0FBUyxFQUFDLEdBQUcsZ0JBQU0sQ0FBQyxNQUFNLENBQUMsQ0FBQyxvQkFBb0I7SUFDdkQsTUFBTSxPQUFPLEdBQUcsSUFBSSxJQUFJLENBQUMsT0FBTyxFQUFFLENBQUM7SUFDbkMsTUFBTSxXQUFXLEdBQUcsSUFBSSxDQUFDLElBQUksQ0FBQyxXQUFXLENBQUMsTUFBTSxHQUFHLFNBQVMsQ0FBQyxDQUFDO0lBRTlELEtBQUssSUFBSSxDQUFDLEdBQUcsQ0FBQyxFQUFFLENBQUMsR0FBRyxXQUFXLEVBQUUsQ0FBQyxFQUFFLEVBQUU7UUFDbEMsTUFBTSxLQUFLLEdBQUcsQ0FBQyxHQUFHLFNBQVMsQ0FBQztRQUM1QixNQUFNLEdBQUcsR0FBRyxLQUFLLEdBQUcsU0FBUyxDQUFDO1FBQzlCLE1BQU0sS0FBSyxHQUFHLFdBQVcsQ0FBQyxRQUFRLENBQUMsS0FBSyxFQUFFLEdBQUcsQ0FBQyxDQUFDO1FBRS9DLE1BQU0sV0FBVyxHQUFHLENBQUMsS0FBSyxXQUFXLEdBQUcsQ0FBQyxDQUFDO1FBRTFDLE9BQU8sQ0FBQyxJQUFJLENBQUMsS0FBSyxFQUFFLFdBQVcsQ0FBQyxDQUFDO0tBQ3BDO0lBRUQsTUFBTSxFQUFDLEdBQUcsRUFBRSxHQUFHLEVBQUUsTUFBTSxFQUFDLEdBQUcsT0FBTyxDQUFDO0lBRW5DLElBQUksR0FBRztRQUFFLE9BQU8sQ0FBQyxLQUFLLENBQUMsaUJBQVMsRUFBRSxHQUFHLENBQUMsQ0FBQztJQUV2QyxPQUFPLE1BQU0sQ0FBQztBQUNsQixDQUFDLENBQUEiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQge0NsaWVudCwgY3JlYXRlQ2hhbm5lbCwgY3JlYXRlQ2xpZW50LCBNZXRhZGF0YX0gZnJvbSAnbmljZS1ncnBjJztcbmltcG9ydCB7ZW52VG9Eb21haW59IGZyb20gXCIuLi9tb2RlbC9jbGkubW9kZWxcIjtcbmltcG9ydCAqIGFzIHBha28gZnJvbSAncGFrbyc7XG5pbXBvcnQgY29uZmlnIGZyb20gXCIuLi9jb25maWcvY29uZmlnXCI7XG5pbXBvcnQge1JFRF9DT0xPUn0gZnJvbSBcIi4uL2NsaS90aGVtZVwiO1xuaW1wb3J0IHtGaWxlTWV0YWRhdGF9IGZyb20gXCIuLi9wcm90by1tb2RlbHMvY29tL2NvcmFsb2dpeC9ydW0vdjIvZmlsZVwiO1xuaW1wb3J0IHtcbiAgICBSdW1Tb3VyY2VNYXBTZXJ2aWNlRGVmaW5pdGlvbixcbiAgICBVcGxvYWRTb3VyY2VNYXBzUmVxdWVzdFxufSBmcm9tIFwiLi4vcHJvdG8tbW9kZWxzL2NvbS9jb3JhbG9naXgvcnVtL3YyL3J1bV9zb3VyY2VfbWFwX3NlcnZpY2VcIjtcblxuZXhwb3J0IGNsYXNzIFJ1bUFwaSB7XG4gICAgc3RhdGljIGFzeW5jIHVwbG9hZFNvdXJjZU1hcHMocmVxdWVzdDogVXBsb2FkU291cmNlTWFwc1JlcXVlc3QsIGVudjogc3RyaW5nLCBwcml2YXRlS2V5OiBzdHJpbmcpIHtcblxuICAgICAgICBjb25zdCB7bWF4TWVzc2FnZVNpemUsIGtlZXBhbGl2ZVRpbWVNcywga2VlcGFsaXZlVGltZW91dE1zfSA9IGNvbmZpZy5ydW1BcGk7XG5cbiAgICAgICAgdHJ5IHtcbiAgICAgICAgICAgIGNvbnN0IGNoYW5uZWwgPSBjcmVhdGVDaGFubmVsKGVudlRvRG9tYWluW2Vudl0sIHVuZGVmaW5lZCwge1xuICAgICAgICAgICAgICAgIFwiZ3JwYy5tYXhfcmVjZWl2ZV9tZXNzYWdlX2xlbmd0aFwiOiBtYXhNZXNzYWdlU2l6ZSxcbiAgICAgICAgICAgICAgICBcImdycGMubWF4X3NlbmRfbWVzc2FnZV9sZW5ndGhcIjogbWF4TWVzc2FnZVNpemUsXG4gICAgICAgICAgICAgICAgJ2dycGMua2VlcGFsaXZlX3RpbWVfbXMnOiBrZWVwYWxpdmVUaW1lTXMsXG4gICAgICAgICAgICAgICAgJ2dycGMua2VlcGFsaXZlX3RpbWVvdXRfbXMnOiBrZWVwYWxpdmVUaW1lb3V0TXMsXG4gICAgICAgICAgICB9KTtcblxuICAgICAgICAgICAgY29uc3QgY2xpZW50OiBDbGllbnQ8dHlwZW9mIFJ1bVNvdXJjZU1hcFNlcnZpY2VEZWZpbml0aW9uPiA9IGNyZWF0ZUNsaWVudChSdW1Tb3VyY2VNYXBTZXJ2aWNlRGVmaW5pdGlvbiwgY2hhbm5lbCk7XG5cbiAgICAgICAgICAgIGNvbnN0IHtmaWxlcywgcmVsZWFzZUlkLCBhcHBsaWNhdGlvbiwgcmVwb05hbWUsIGNvbW1pdEhhc2gsIHVzZXJ9ID0gcmVxdWVzdDtcblxuICAgICAgICAgICAgY29uc3QgY29tcHJlc3NlZEZpbGVzOiBGaWxlTWV0YWRhdGFbXSA9IGF3YWl0IFByb21pc2UuYWxsKFxuICAgICAgICAgICAgICAgIGZpbGVzLm1hcChhc3luYyAoZmlsZTogRmlsZU1ldGFkYXRhKSA9PiB7XG4gICAgICAgICAgICAgICAgICAgIGNvbnN0IGNvbXByZXNzZWRDaHVua3MgPSB0aGlzLmNvbXByZXNzRmlsZUNvbnRlbnRDaHVua3MoZmlsZS5jb250ZW50KTtcblxuICAgICAgICAgICAgICAgICAgICBjb25zdCBzaXplID0gY29tcHJlc3NlZENodW5rcy5sZW5ndGg7XG5cbiAgICAgICAgICAgICAgICAgICAgcmV0dXJuIHtjaHVua05hbWU6IGZpbGUuY2h1bmtOYW1lLCBzaXplLCBjb250ZW50OiBjb21wcmVzc2VkQ2h1bmtzfTtcbiAgICAgICAgICAgICAgICB9KVxuICAgICAgICAgICAgKTtcblxuICAgICAgICAgICAgY29uc3QgbWV0YWRhdGEgPSBuZXcgTWV0YWRhdGEoKTtcblxuICAgICAgICAgICAgbWV0YWRhdGEuc2V0KCdBdXRob3JpemF0aW9uJywgYEJlYXJlciAke3ByaXZhdGVLZXl9YCk7XG5cbiAgICAgICAgICAgIGF3YWl0IGNsaWVudC51cGxvYWRTb3VyY2VNYXBzKHtcbiAgICAgICAgICAgICAgICBmaWxlczogY29tcHJlc3NlZEZpbGVzLFxuICAgICAgICAgICAgICAgIHJlbGVhc2VJZCxcbiAgICAgICAgICAgICAgICBhcHBsaWNhdGlvbixcbiAgICAgICAgICAgICAgICByZXBvTmFtZSxcbiAgICAgICAgICAgICAgICBjb21taXRIYXNoLFxuICAgICAgICAgICAgICAgIHVzZXJcbiAgICAgICAgICAgIH0sIHttZXRhZGF0YX0pO1xuXG4gICAgICAgIH0gY2F0Y2ggKGVycm9yKSB7XG4gICAgICAgICAgICB0aHJvdyBlcnJvcjtcbiAgICAgICAgfVxuICAgIH07XG5cbiAgICBwcml2YXRlIHN0YXRpYyBjb21wcmVzc0ZpbGVDb250ZW50Q2h1bmtzID0gKGZpbGVDb250ZW50OiBVaW50OEFycmF5KTogVWludDhBcnJheSA9PiB7XG4gICAgICAgIGNvbnN0IHtjaHVua1NpemV9ID0gY29uZmlnLnJ1bUFwaTsgLy8gNTEyIEtCIGNodW5rIHNpemVcbiAgICAgICAgY29uc3QgZGVmbGF0ZSA9IG5ldyBwYWtvLkRlZmxhdGUoKTtcbiAgICAgICAgY29uc3QgdG90YWxDaHVua3MgPSBNYXRoLmNlaWwoZmlsZUNvbnRlbnQubGVuZ3RoIC8gY2h1bmtTaXplKTtcblxuICAgICAgICBmb3IgKGxldCBpID0gMDsgaSA8IHRvdGFsQ2h1bmtzOyBpKyspIHtcbiAgICAgICAgICAgIGNvbnN0IHN0YXJ0ID0gaSAqIGNodW5rU2l6ZTtcbiAgICAgICAgICAgIGNvbnN0IGVuZCA9IHN0YXJ0ICsgY2h1bmtTaXplO1xuICAgICAgICAgICAgY29uc3QgY2h1bmsgPSBmaWxlQ29udGVudC5zdWJhcnJheShzdGFydCwgZW5kKTtcblxuICAgICAgICAgICAgY29uc3QgaXNMYXN0Q2h1bmsgPSBpID09PSB0b3RhbENodW5rcyAtIDE7XG5cbiAgICAgICAgICAgIGRlZmxhdGUucHVzaChjaHVuaywgaXNMYXN0Q2h1bmspO1xuICAgICAgICB9XG5cbiAgICAgICAgY29uc3Qge2VyciwgbXNnLCByZXN1bHR9ID0gZGVmbGF0ZTtcblxuICAgICAgICBpZiAoZXJyKSBjb25zb2xlLmVycm9yKFJFRF9DT0xPUiwgbXNnKTtcblxuICAgICAgICByZXR1cm4gcmVzdWx0O1xuICAgIH1cbn1cblxuIl19
|
package/dist/cli/rum-cli.d.ts
CHANGED