@coralogix/rum-cli 1.1.8 → 1.1.9
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/.eslintignore +1 -0
- package/.eslintrc.js +31 -0
- package/.github/workflows/npm-publish.yml +41 -0
- package/api/rum-api.ts +79 -0
- package/cli/rum-cli.ts +54 -0
- package/cli/theme/index.ts +5 -0
- package/cli/validators/index.ts +14 -0
- package/config/config.ts +31 -0
- package/config/index.js +7 -0
- package/config/index.ts +3 -0
- package/dist/api/rum-api.d.ts +5 -0
- package/dist/api/rum-api.js +98 -0
- package/dist/cli/rum-cli.d.ts +2 -0
- 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/config/config.d.ts +16 -0
- package/dist/config/config.js +16 -0
- package/dist/config/index.d.ts +2 -0
- package/dist/config/index.js +8 -0
- package/dist/model/cli.model.d.ts +1 -0
- package/dist/model/cli.model.js +11 -0
- package/dist/proto-models/com/coralogix/rum/v2/audit_log.d.ts +24 -0
- package/dist/proto-models/com/coralogix/rum/v2/audit_log.js +62 -0
- package/dist/proto-models/com/coralogix/rum/v2/chunk.d.ts +56 -0
- package/dist/proto-models/com/coralogix/rum/v2/chunk.js +330 -0
- package/dist/proto-models/com/coralogix/rum/v2/file.d.ts +26 -0
- package/dist/proto-models/com/coralogix/rum/v2/file.js +140 -0
- package/dist/proto-models/com/coralogix/rum/v2/rum_service.d.ts +72 -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.d.ts +69 -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.d.ts +55 -0
- package/dist/proto-models/com/coralogix/rum/v2/source_code_file_mapping.js +277 -0
- package/dist/proto-models/google/protobuf/descriptor.d.ts +1140 -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 +14 -0
- package/meta.yaml +4 -0
- package/model/cli.model.ts +7 -0
- package/package.json +1 -4
- package/proto-models/com/coralogix/rum/v2/audit_log.ts +76 -0
- package/proto-models/com/coralogix/rum/v2/chunk.ts +391 -0
- package/proto-models/com/coralogix/rum/v2/file.ts +164 -0
- package/proto-models/com/coralogix/rum/v2/rum_service.ts +272 -0
- package/proto-models/com/coralogix/rum/v2/rum_source_map_service.ts +216 -0
- package/proto-models/com/coralogix/rum/v2/source_code_file_mapping.ts +331 -0
- package/proto-models/google/protobuf/descriptor.ts +4715 -0
- package/protofetch.lock +18 -0
- package/protofetch.toml +7 -0
- package/protos/com/coralogix/rum/v2/audit_log.proto +13 -0
- package/protos/com/coralogix/rum/v2/chunk.proto +24 -0
- package/protos/com/coralogix/rum/v2/file.proto +8 -0
- package/protos/com/coralogix/rum/v2/rum_service.proto +23 -0
- package/protos/com/coralogix/rum/v2/rum_source_map_service.proto +19 -0
- package/protos/com/coralogix/rum/v2/source_code_file_mapping.proto +16 -0
- package/protoset.bin +0 -0
- package/services/source-maps/source-maps.service.ts +31 -0
- package/services/source-maps/utils/traverse-folder.util.ts +33 -0
- package/tsconfig.build.json +6 -0
- package/tsconfig.json +25 -0
package/.eslintignore
ADDED
|
@@ -0,0 +1 @@
|
|
|
1
|
+
dist
|
package/.eslintrc.js
ADDED
|
@@ -0,0 +1,31 @@
|
|
|
1
|
+
module.exports = {
|
|
2
|
+
"root": true,
|
|
3
|
+
"parser": "@typescript-eslint/parser",
|
|
4
|
+
"parserOptions": {
|
|
5
|
+
"project": `./tsconfig.json`
|
|
6
|
+
},
|
|
7
|
+
"plugins": [
|
|
8
|
+
"@typescript-eslint"
|
|
9
|
+
],
|
|
10
|
+
"extends": [
|
|
11
|
+
"eslint:recommended",
|
|
12
|
+
"plugin:@typescript-eslint/eslint-recommended"
|
|
13
|
+
],
|
|
14
|
+
"rules": {
|
|
15
|
+
"@typescript-eslint/naming-convention": "error",
|
|
16
|
+
"@typescript-eslint/explicit-module-boundary-types": "error",
|
|
17
|
+
"@typescript-eslint/no-require-imports": "error",
|
|
18
|
+
"@typescript-eslint/prefer-nullish-coalescing": "error",
|
|
19
|
+
"@typescript-eslint/prefer-optional-chain": "error",
|
|
20
|
+
"@typescript-eslint/prefer-string-starts-ends-with": "error",
|
|
21
|
+
"@typescript-eslint/promise-function-async": "error",
|
|
22
|
+
"@typescript-eslint/switch-exhaustiveness-check": "error",
|
|
23
|
+
"@typescript-eslint/type-annotation-spacing": "error",
|
|
24
|
+
"semi": [2, "always"],
|
|
25
|
+
"key-spacing": "error",
|
|
26
|
+
"comma-spacing":["error", {
|
|
27
|
+
"before": false,
|
|
28
|
+
"after": true,
|
|
29
|
+
}]
|
|
30
|
+
}
|
|
31
|
+
};
|
|
@@ -0,0 +1,41 @@
|
|
|
1
|
+
# This workflow will run tests using node and then publish a package to GitHub Packages when a release is created
|
|
2
|
+
# For more information see: https://docs.github.com/en/actions/publishing-packages/publishing-nodejs-packages
|
|
3
|
+
|
|
4
|
+
name: Node.js Package
|
|
5
|
+
|
|
6
|
+
on:
|
|
7
|
+
release:
|
|
8
|
+
types: [created]
|
|
9
|
+
|
|
10
|
+
jobs:
|
|
11
|
+
build:
|
|
12
|
+
runs-on: ubuntu-latest
|
|
13
|
+
steps:
|
|
14
|
+
- uses: actions/checkout@v3
|
|
15
|
+
- uses: actions/setup-node@v3
|
|
16
|
+
with:
|
|
17
|
+
node-version: 18
|
|
18
|
+
- uses: webfactory/ssh-agent@v0.8.0
|
|
19
|
+
with:
|
|
20
|
+
ssh-private-key: ${{ secrets.SSH_PRIVATE_KEY }}
|
|
21
|
+
- run: npm ci
|
|
22
|
+
- run: npm run proto
|
|
23
|
+
- run: npm run build
|
|
24
|
+
publish-npm:
|
|
25
|
+
needs: build
|
|
26
|
+
runs-on: ubuntu-latest
|
|
27
|
+
steps:
|
|
28
|
+
- uses: actions/checkout@v3
|
|
29
|
+
- uses: actions/setup-node@v3
|
|
30
|
+
with:
|
|
31
|
+
node-version: 18
|
|
32
|
+
registry-url: https://registry.npmjs.org/
|
|
33
|
+
- uses: webfactory/ssh-agent@v0.8.0
|
|
34
|
+
with:
|
|
35
|
+
ssh-private-key: ${{ secrets.SSH_PRIVATE_KEY }}
|
|
36
|
+
- run: npm ci
|
|
37
|
+
- run: npm run proto
|
|
38
|
+
- run: npm run build
|
|
39
|
+
- run: npm publish --access public
|
|
40
|
+
env:
|
|
41
|
+
NODE_AUTH_TOKEN: ${{secrets.NPM_TOKEN}}
|
package/api/rum-api.ts
ADDED
|
@@ -0,0 +1,79 @@
|
|
|
1
|
+
import {Client, createChannel, createClient, Metadata} from 'nice-grpc';
|
|
2
|
+
import {envToDomain} from "../model/cli.model";
|
|
3
|
+
import * as pako from 'pako';
|
|
4
|
+
import config from "../config/config";
|
|
5
|
+
import {RED_COLOR} from "../cli/theme";
|
|
6
|
+
import {FileMetadata} from "../proto-models/com/coralogix/rum/v2/file";
|
|
7
|
+
import {
|
|
8
|
+
RumSourceMapServiceDefinition,
|
|
9
|
+
UploadSourceMapsRequest
|
|
10
|
+
} from "../proto-models/com/coralogix/rum/v2/rum_source_map_service";
|
|
11
|
+
|
|
12
|
+
export class RumApi {
|
|
13
|
+
static async uploadSourceMaps(request: UploadSourceMapsRequest, env: string, privateKey: string) {
|
|
14
|
+
|
|
15
|
+
const {maxMessageSize, keepaliveTimeMs, keepaliveTimeoutMs} = config.rumApi;
|
|
16
|
+
|
|
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
|
+
});
|
|
24
|
+
|
|
25
|
+
const client: Client<typeof RumSourceMapServiceDefinition> = createClient(RumSourceMapServiceDefinition, channel);
|
|
26
|
+
|
|
27
|
+
const {files, releaseId, application, repoName, commitHash, user} = request;
|
|
28
|
+
|
|
29
|
+
const compressedFiles: FileMetadata[] = await Promise.all(
|
|
30
|
+
files.map(async (file: FileMetadata) => {
|
|
31
|
+
const compressedChunks = this.compressFileContentChunks(file.content);
|
|
32
|
+
|
|
33
|
+
const size = compressedChunks.length;
|
|
34
|
+
|
|
35
|
+
return {chunkName: file.chunkName, size, content: compressedChunks};
|
|
36
|
+
})
|
|
37
|
+
);
|
|
38
|
+
|
|
39
|
+
const metadata = new Metadata();
|
|
40
|
+
|
|
41
|
+
metadata.set('Authorization', `Bearer ${privateKey}`);
|
|
42
|
+
|
|
43
|
+
await client.uploadSourceMaps({
|
|
44
|
+
files: compressedFiles,
|
|
45
|
+
releaseId,
|
|
46
|
+
application,
|
|
47
|
+
repoName,
|
|
48
|
+
commitHash,
|
|
49
|
+
user
|
|
50
|
+
}, {metadata});
|
|
51
|
+
|
|
52
|
+
} catch (error) {
|
|
53
|
+
throw error;
|
|
54
|
+
}
|
|
55
|
+
};
|
|
56
|
+
|
|
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);
|
|
61
|
+
|
|
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);
|
|
66
|
+
|
|
67
|
+
const isLastChunk = i === totalChunks - 1;
|
|
68
|
+
|
|
69
|
+
deflate.push(chunk, isLastChunk);
|
|
70
|
+
}
|
|
71
|
+
|
|
72
|
+
const {err, msg, result} = deflate;
|
|
73
|
+
|
|
74
|
+
if (err) console.error(RED_COLOR, msg);
|
|
75
|
+
|
|
76
|
+
return result;
|
|
77
|
+
}
|
|
78
|
+
}
|
|
79
|
+
|
package/cli/rum-cli.ts
ADDED
|
@@ -0,0 +1,54 @@
|
|
|
1
|
+
#!/usr/bin/env node
|
|
2
|
+
import {Command} from 'commander';
|
|
3
|
+
import {SourceMapsService} from "../services/source-maps/source-maps.service";
|
|
4
|
+
import {validateEnvironment} from "./validators";
|
|
5
|
+
import {RED_COLOR} from "./theme";
|
|
6
|
+
|
|
7
|
+
const program = new Command();
|
|
8
|
+
|
|
9
|
+
program.name('coralogix-rum-cli').description('cli for upload source maps')
|
|
10
|
+
|
|
11
|
+
const uploadCommand = program.command('upload-source-maps');
|
|
12
|
+
|
|
13
|
+
uploadCommand
|
|
14
|
+
.option('-k, --private-key <privateKey>', 'Private key to authenticate with the API')
|
|
15
|
+
.option('-a, --application <application>', 'Name of the application')
|
|
16
|
+
.option('-r, --release-id <releaseId>', 'ID of the release')
|
|
17
|
+
.option('-f, --folder-path <folderPath>', 'Path to the folder containing the source maps')
|
|
18
|
+
.option('-e, --env <env>', 'Your environment', validateEnvironment)
|
|
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);
|
|
51
|
+
}
|
|
52
|
+
});
|
|
53
|
+
|
|
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/config/config.ts
ADDED
|
@@ -0,0 +1,31 @@
|
|
|
1
|
+
export interface LoggerConfig {
|
|
2
|
+
maxLogSize: number;
|
|
3
|
+
logLevel: string;
|
|
4
|
+
}
|
|
5
|
+
|
|
6
|
+
export interface rumApiConfig {
|
|
7
|
+
maxMessageSize: number,
|
|
8
|
+
keepaliveTimeMs: number
|
|
9
|
+
keepaliveTimeoutMs: number
|
|
10
|
+
chunkSize: number,
|
|
11
|
+
}
|
|
12
|
+
|
|
13
|
+
export interface Config {
|
|
14
|
+
logger: LoggerConfig;
|
|
15
|
+
rumApi: rumApiConfig;
|
|
16
|
+
}
|
|
17
|
+
|
|
18
|
+
const config: Config = {
|
|
19
|
+
logger: {
|
|
20
|
+
maxLogSize: 10000,
|
|
21
|
+
logLevel: 'debug',
|
|
22
|
+
},
|
|
23
|
+
rumApi: {
|
|
24
|
+
maxMessageSize: 400000 * 1024,
|
|
25
|
+
keepaliveTimeMs: 120000,
|
|
26
|
+
keepaliveTimeoutMs: 120000,
|
|
27
|
+
chunkSize: 512 * 1024 // 512 KB chunk size
|
|
28
|
+
}
|
|
29
|
+
};
|
|
30
|
+
|
|
31
|
+
export default config;
|
package/config/index.js
ADDED
|
@@ -0,0 +1,7 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
var __importDefault = (this && this.__importDefault) || function (mod) {
|
|
3
|
+
return (mod && mod.__esModule) ? mod : { "default": mod };
|
|
4
|
+
};
|
|
5
|
+
exports.__esModule = true;
|
|
6
|
+
var config_1 = __importDefault(require("./config"));
|
|
7
|
+
exports["default"] = config_1["default"];
|
package/config/index.ts
ADDED
|
@@ -0,0 +1,5 @@
|
|
|
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
|
+
}
|
|
@@ -0,0 +1,98 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
var __createBinding = (this && this.__createBinding) || (Object.create ? (function(o, m, k, k2) {
|
|
3
|
+
if (k2 === undefined) k2 = k;
|
|
4
|
+
var desc = Object.getOwnPropertyDescriptor(m, k);
|
|
5
|
+
if (!desc || ("get" in desc ? !m.__esModule : desc.writable || desc.configurable)) {
|
|
6
|
+
desc = { enumerable: true, get: function() { return m[k]; } };
|
|
7
|
+
}
|
|
8
|
+
Object.defineProperty(o, k2, desc);
|
|
9
|
+
}) : (function(o, m, k, k2) {
|
|
10
|
+
if (k2 === undefined) k2 = k;
|
|
11
|
+
o[k2] = m[k];
|
|
12
|
+
}));
|
|
13
|
+
var __setModuleDefault = (this && this.__setModuleDefault) || (Object.create ? (function(o, v) {
|
|
14
|
+
Object.defineProperty(o, "default", { enumerable: true, value: v });
|
|
15
|
+
}) : function(o, v) {
|
|
16
|
+
o["default"] = v;
|
|
17
|
+
});
|
|
18
|
+
var __importStar = (this && this.__importStar) || function (mod) {
|
|
19
|
+
if (mod && mod.__esModule) return mod;
|
|
20
|
+
var result = {};
|
|
21
|
+
if (mod != null) for (var k in mod) if (k !== "default" && Object.prototype.hasOwnProperty.call(mod, k)) __createBinding(result, mod, k);
|
|
22
|
+
__setModuleDefault(result, mod);
|
|
23
|
+
return result;
|
|
24
|
+
};
|
|
25
|
+
var __awaiter = (this && this.__awaiter) || function (thisArg, _arguments, P, generator) {
|
|
26
|
+
function adopt(value) { return value instanceof P ? value : new P(function (resolve) { resolve(value); }); }
|
|
27
|
+
return new (P || (P = Promise))(function (resolve, reject) {
|
|
28
|
+
function fulfilled(value) { try { step(generator.next(value)); } catch (e) { reject(e); } }
|
|
29
|
+
function rejected(value) { try { step(generator["throw"](value)); } catch (e) { reject(e); } }
|
|
30
|
+
function step(result) { result.done ? resolve(result.value) : adopt(result.value).then(fulfilled, rejected); }
|
|
31
|
+
step((generator = generator.apply(thisArg, _arguments || [])).next());
|
|
32
|
+
});
|
|
33
|
+
};
|
|
34
|
+
var __importDefault = (this && this.__importDefault) || function (mod) {
|
|
35
|
+
return (mod && mod.__esModule) ? mod : { "default": mod };
|
|
36
|
+
};
|
|
37
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
38
|
+
exports.RumApi = void 0;
|
|
39
|
+
const nice_grpc_1 = require("nice-grpc");
|
|
40
|
+
const cli_model_1 = require("../model/cli.model");
|
|
41
|
+
const pako = __importStar(require("pako"));
|
|
42
|
+
const config_1 = __importDefault(require("../config/config"));
|
|
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
|
+
}
|
|
77
|
+
});
|
|
78
|
+
}
|
|
79
|
+
;
|
|
80
|
+
}
|
|
81
|
+
exports.RumApi = RumApi;
|
|
82
|
+
RumApi.compressFileContentChunks = (fileContent) => {
|
|
83
|
+
const { chunkSize } = config_1.default.rumApi; // 512 KB chunk size
|
|
84
|
+
const deflate = new pako.Deflate();
|
|
85
|
+
const totalChunks = Math.ceil(fileContent.length / chunkSize);
|
|
86
|
+
for (let i = 0; i < totalChunks; i++) {
|
|
87
|
+
const start = i * chunkSize;
|
|
88
|
+
const end = start + chunkSize;
|
|
89
|
+
const chunk = fileContent.subarray(start, end);
|
|
90
|
+
const isLastChunk = i === totalChunks - 1;
|
|
91
|
+
deflate.push(chunk, isLastChunk);
|
|
92
|
+
}
|
|
93
|
+
const { err, msg, result } = deflate;
|
|
94
|
+
if (err)
|
|
95
|
+
console.error(theme_1.RED_COLOR, msg);
|
|
96
|
+
return result;
|
|
97
|
+
};
|
|
98
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoicnVtLWFwaS5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uL2FwaS9ydW0tYXBpLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiI7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7O0FBQUEseUNBQXdFO0FBQ3hFLGtEQUErQztBQUMvQywyQ0FBNkI7QUFDN0IsOERBQXNDO0FBQ3RDLHdDQUF1QztBQUV2Qyx3R0FHcUU7QUFFckUsTUFBYSxNQUFNO0lBQ2YsTUFBTSxDQUFPLGdCQUFnQixDQUFDLE9BQWdDLEVBQUUsR0FBVyxFQUFFLFVBQWtCOztZQUUzRixNQUFNLEVBQUMsY0FBYyxFQUFFLGVBQWUsRUFBRSxrQkFBa0IsRUFBQyxHQUFHLGdCQUFNLENBQUMsTUFBTSxDQUFDO1lBRTVFLElBQUk7Z0JBQ0EsTUFBTSxPQUFPLEdBQUcsSUFBQSx5QkFBYSxFQUFDLHVCQUFXLENBQUMsR0FBRyxDQUFDLEVBQUUsU0FBUyxFQUFFO29CQUN2RCxpQ0FBaUMsRUFBRSxjQUFjO29CQUNqRCw4QkFBOEIsRUFBRSxjQUFjO29CQUM5Qyx3QkFBd0IsRUFBRSxlQUFlO29CQUN6QywyQkFBMkIsRUFBRSxrQkFBa0I7aUJBQ2xELENBQUMsQ0FBQztnQkFFSCxNQUFNLE1BQU0sR0FBaUQsSUFBQSx3QkFBWSxFQUFDLHNEQUE2QixFQUFFLE9BQU8sQ0FBQyxDQUFDO2dCQUVsSCxNQUFNLEVBQUMsS0FBSyxFQUFFLFNBQVMsRUFBRSxXQUFXLEVBQUUsUUFBUSxFQUFFLFVBQVUsRUFBRSxJQUFJLEVBQUMsR0FBRyxPQUFPLENBQUM7Z0JBRTVFLE1BQU0sZUFBZSxHQUFtQixNQUFNLE9BQU8sQ0FBQyxHQUFHLENBQ3JELEtBQUssQ0FBQyxHQUFHLENBQUMsQ0FBTyxJQUFrQixFQUFFLEVBQUU7b0JBQ25DLE1BQU0sZ0JBQWdCLEdBQUcsSUFBSSxDQUFDLHlCQUF5QixDQUFDLElBQUksQ0FBQyxPQUFPLENBQUMsQ0FBQztvQkFFdEUsTUFBTSxJQUFJLEdBQUcsZ0JBQWdCLENBQUMsTUFBTSxDQUFDO29CQUVyQyxPQUFPLEVBQUMsU0FBUyxFQUFFLElBQUksQ0FBQyxTQUFTLEVBQUUsSUFBSSxFQUFFLE9BQU8sRUFBRSxnQkFBZ0IsRUFBQyxDQUFDO2dCQUN4RSxDQUFDLENBQUEsQ0FBQyxDQUNMLENBQUM7Z0JBRUYsTUFBTSxRQUFRLEdBQUcsSUFBSSxvQkFBUSxFQUFFLENBQUM7Z0JBRWhDLFFBQVEsQ0FBQyxHQUFHLENBQUMsZUFBZSxFQUFFLFVBQVUsVUFBVSxFQUFFLENBQUMsQ0FBQztnQkFFdEQsTUFBTSxNQUFNLENBQUMsZ0JBQWdCLENBQUM7b0JBQzFCLEtBQUssRUFBRSxlQUFlO29CQUN0QixTQUFTO29CQUNULFdBQVc7b0JBQ1gsUUFBUTtvQkFDUixVQUFVO29CQUNWLElBQUk7aUJBQ1AsRUFBRSxFQUFDLFFBQVEsRUFBQyxDQUFDLENBQUM7YUFFbEI7WUFBQyxPQUFPLEtBQUssRUFBRTtnQkFDWixNQUFNLEtBQUssQ0FBQzthQUNmO1FBQ0wsQ0FBQztLQUFBO0lBQUEsQ0FBQzs7QUEzQ04sd0JBa0VDO0FBckJrQixnQ0FBeUIsR0FBRyxDQUFDLFdBQXVCLEVBQWMsRUFBRTtJQUMvRSxNQUFNLEVBQUMsU0FBUyxFQUFDLEdBQUcsZ0JBQU0sQ0FBQyxNQUFNLENBQUMsQ0FBQyxvQkFBb0I7SUFDdkQsTUFBTSxPQUFPLEdBQUcsSUFBSSxJQUFJLENBQUMsT0FBTyxFQUFFLENBQUM7SUFDbkMsTUFBTSxXQUFXLEdBQUcsSUFBSSxDQUFDLElBQUksQ0FBQyxXQUFXLENBQUMsTUFBTSxHQUFHLFNBQVMsQ0FBQyxDQUFDO0lBRTlELEtBQUssSUFBSSxDQUFDLEdBQUcsQ0FBQyxFQUFFLENBQUMsR0FBRyxXQUFXLEVBQUUsQ0FBQyxFQUFFLEVBQUU7UUFDbEMsTUFBTSxLQUFLLEdBQUcsQ0FBQyxHQUFHLFNBQVMsQ0FBQztRQUM1QixNQUFNLEdBQUcsR0FBRyxLQUFLLEdBQUcsU0FBUyxDQUFDO1FBQzlCLE1BQU0sS0FBSyxHQUFHLFdBQVcsQ0FBQyxRQUFRLENBQUMsS0FBSyxFQUFFLEdBQUcsQ0FBQyxDQUFDO1FBRS9DLE1BQU0sV0FBVyxHQUFHLENBQUMsS0FBSyxXQUFXLEdBQUcsQ0FBQyxDQUFDO1FBRTFDLE9BQU8sQ0FBQyxJQUFJLENBQUMsS0FBSyxFQUFFLFdBQVcsQ0FBQyxDQUFDO0tBQ3BDO0lBRUQsTUFBTSxFQUFDLEdBQUcsRUFBRSxHQUFHLEVBQUUsTUFBTSxFQUFDLEdBQUcsT0FBTyxDQUFDO0lBRW5DLElBQUksR0FBRztRQUFFLE9BQU8sQ0FBQyxLQUFLLENBQUMsaUJBQVMsRUFBRSxHQUFHLENBQUMsQ0FBQztJQUV2QyxPQUFPLE1BQU0sQ0FBQztBQUNsQixDQUFDLENBQUEiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQge0NsaWVudCwgY3JlYXRlQ2hhbm5lbCwgY3JlYXRlQ2xpZW50LCBNZXRhZGF0YX0gZnJvbSAnbmljZS1ncnBjJztcbmltcG9ydCB7ZW52VG9Eb21haW59IGZyb20gXCIuLi9tb2RlbC9jbGkubW9kZWxcIjtcbmltcG9ydCAqIGFzIHBha28gZnJvbSAncGFrbyc7XG5pbXBvcnQgY29uZmlnIGZyb20gXCIuLi9jb25maWcvY29uZmlnXCI7XG5pbXBvcnQge1JFRF9DT0xPUn0gZnJvbSBcIi4uL2NsaS90aGVtZVwiO1xuaW1wb3J0IHtGaWxlTWV0YWRhdGF9IGZyb20gXCIuLi9wcm90by1tb2RlbHMvY29tL2NvcmFsb2dpeC9ydW0vdjIvZmlsZVwiO1xuaW1wb3J0IHtcbiAgICBSdW1Tb3VyY2VNYXBTZXJ2aWNlRGVmaW5pdGlvbixcbiAgICBVcGxvYWRTb3VyY2VNYXBzUmVxdWVzdFxufSBmcm9tIFwiLi4vcHJvdG8tbW9kZWxzL2NvbS9jb3JhbG9naXgvcnVtL3YyL3J1bV9zb3VyY2VfbWFwX3NlcnZpY2VcIjtcblxuZXhwb3J0IGNsYXNzIFJ1bUFwaSB7XG4gICAgc3RhdGljIGFzeW5jIHVwbG9hZFNvdXJjZU1hcHMocmVxdWVzdDogVXBsb2FkU291cmNlTWFwc1JlcXVlc3QsIGVudjogc3RyaW5nLCBwcml2YXRlS2V5OiBzdHJpbmcpIHtcblxuICAgICAgICBjb25zdCB7bWF4TWVzc2FnZVNpemUsIGtlZXBhbGl2ZVRpbWVNcywga2VlcGFsaXZlVGltZW91dE1zfSA9IGNvbmZpZy5ydW1BcGk7XG5cbiAgICAgICAgdHJ5IHtcbiAgICAgICAgICAgIGNvbnN0IGNoYW5uZWwgPSBjcmVhdGVDaGFubmVsKGVudlRvRG9tYWluW2Vudl0sIHVuZGVmaW5lZCwge1xuICAgICAgICAgICAgICAgIFwiZ3JwYy5tYXhfcmVjZWl2ZV9tZXNzYWdlX2xlbmd0aFwiOiBtYXhNZXNzYWdlU2l6ZSxcbiAgICAgICAgICAgICAgICBcImdycGMubWF4X3NlbmRfbWVzc2FnZV9sZW5ndGhcIjogbWF4TWVzc2FnZVNpemUsXG4gICAgICAgICAgICAgICAgJ2dycGMua2VlcGFsaXZlX3RpbWVfbXMnOiBrZWVwYWxpdmVUaW1lTXMsXG4gICAgICAgICAgICAgICAgJ2dycGMua2VlcGFsaXZlX3RpbWVvdXRfbXMnOiBrZWVwYWxpdmVUaW1lb3V0TXMsXG4gICAgICAgICAgICB9KTtcblxuICAgICAgICAgICAgY29uc3QgY2xpZW50OiBDbGllbnQ8dHlwZW9mIFJ1bVNvdXJjZU1hcFNlcnZpY2VEZWZpbml0aW9uPiA9IGNyZWF0ZUNsaWVudChSdW1Tb3VyY2VNYXBTZXJ2aWNlRGVmaW5pdGlvbiwgY2hhbm5lbCk7XG5cbiAgICAgICAgICAgIGNvbnN0IHtmaWxlcywgcmVsZWFzZUlkLCBhcHBsaWNhdGlvbiwgcmVwb05hbWUsIGNvbW1pdEhhc2gsIHVzZXJ9ID0gcmVxdWVzdDtcblxuICAgICAgICAgICAgY29uc3QgY29tcHJlc3NlZEZpbGVzOiBGaWxlTWV0YWRhdGFbXSA9IGF3YWl0IFByb21pc2UuYWxsKFxuICAgICAgICAgICAgICAgIGZpbGVzLm1hcChhc3luYyAoZmlsZTogRmlsZU1ldGFkYXRhKSA9PiB7XG4gICAgICAgICAgICAgICAgICAgIGNvbnN0IGNvbXByZXNzZWRDaHVua3MgPSB0aGlzLmNvbXByZXNzRmlsZUNvbnRlbnRDaHVua3MoZmlsZS5jb250ZW50KTtcblxuICAgICAgICAgICAgICAgICAgICBjb25zdCBzaXplID0gY29tcHJlc3NlZENodW5rcy5sZW5ndGg7XG5cbiAgICAgICAgICAgICAgICAgICAgcmV0dXJuIHtjaHVua05hbWU6IGZpbGUuY2h1bmtOYW1lLCBzaXplLCBjb250ZW50OiBjb21wcmVzc2VkQ2h1bmtzfTtcbiAgICAgICAgICAgICAgICB9KVxuICAgICAgICAgICAgKTtcblxuICAgICAgICAgICAgY29uc3QgbWV0YWRhdGEgPSBuZXcgTWV0YWRhdGEoKTtcblxuICAgICAgICAgICAgbWV0YWRhdGEuc2V0KCdBdXRob3JpemF0aW9uJywgYEJlYXJlciAke3ByaXZhdGVLZXl9YCk7XG5cbiAgICAgICAgICAgIGF3YWl0IGNsaWVudC51cGxvYWRTb3VyY2VNYXBzKHtcbiAgICAgICAgICAgICAgICBmaWxlczogY29tcHJlc3NlZEZpbGVzLFxuICAgICAgICAgICAgICAgIHJlbGVhc2VJZCxcbiAgICAgICAgICAgICAgICBhcHBsaWNhdGlvbixcbiAgICAgICAgICAgICAgICByZXBvTmFtZSxcbiAgICAgICAgICAgICAgICBjb21taXRIYXNoLFxuICAgICAgICAgICAgICAgIHVzZXJcbiAgICAgICAgICAgIH0sIHttZXRhZGF0YX0pO1xuXG4gICAgICAgIH0gY2F0Y2ggKGVycm9yKSB7XG4gICAgICAgICAgICB0aHJvdyBlcnJvcjtcbiAgICAgICAgfVxuICAgIH07XG5cbiAgICBwcml2YXRlIHN0YXRpYyBjb21wcmVzc0ZpbGVDb250ZW50Q2h1bmtzID0gKGZpbGVDb250ZW50OiBVaW50OEFycmF5KTogVWludDhBcnJheSA9PiB7XG4gICAgICAgIGNvbnN0IHtjaHVua1NpemV9ID0gY29uZmlnLnJ1bUFwaTsgLy8gNTEyIEtCIGNodW5rIHNpemVcbiAgICAgICAgY29uc3QgZGVmbGF0ZSA9IG5ldyBwYWtvLkRlZmxhdGUoKTtcbiAgICAgICAgY29uc3QgdG90YWxDaHVua3MgPSBNYXRoLmNlaWwoZmlsZUNvbnRlbnQubGVuZ3RoIC8gY2h1bmtTaXplKTtcblxuICAgICAgICBmb3IgKGxldCBpID0gMDsgaSA8IHRvdGFsQ2h1bmtzOyBpKyspIHtcbiAgICAgICAgICAgIGNvbnN0IHN0YXJ0ID0gaSAqIGNodW5rU2l6ZTtcbiAgICAgICAgICAgIGNvbnN0IGVuZCA9IHN0YXJ0ICsgY2h1bmtTaXplO1xuICAgICAgICAgICAgY29uc3QgY2h1bmsgPSBmaWxlQ29udGVudC5zdWJhcnJheShzdGFydCwgZW5kKTtcblxuICAgICAgICAgICAgY29uc3QgaXNMYXN0Q2h1bmsgPSBpID09PSB0b3RhbENodW5rcyAtIDE7XG5cbiAgICAgICAgICAgIGRlZmxhdGUucHVzaChjaHVuaywgaXNMYXN0Q2h1bmspO1xuICAgICAgICB9XG5cbiAgICAgICAgY29uc3Qge2VyciwgbXNnLCByZXN1bHR9ID0gZGVmbGF0ZTtcblxuICAgICAgICBpZiAoZXJyKSBjb25zb2xlLmVycm9yKFJFRF9DT0xPUiwgbXNnKTtcblxuICAgICAgICByZXR1cm4gcmVzdWx0O1xuICAgIH1cbn1cblxuIl19
|
|
@@ -0,0 +1,7 @@
|
|
|
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==
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
export declare const validateEnvironment: (env: string) => string;
|
|
@@ -0,0 +1,16 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
+
exports.validateEnvironment = void 0;
|
|
4
|
+
const cli_model_1 = require("../../model/cli.model");
|
|
5
|
+
const theme_1 = require("../theme");
|
|
6
|
+
const validateEnvironment = (env) => {
|
|
7
|
+
const validEnvironments = Object.keys(cli_model_1.envToDomain).join(', ');
|
|
8
|
+
if (!(env in cli_model_1.envToDomain)) {
|
|
9
|
+
const errorMessage = `❌ Invalid environment: ${env}. Possible values are: ${validEnvironments}`;
|
|
10
|
+
console.error(theme_1.RED_COLOR, errorMessage);
|
|
11
|
+
process.exit(1);
|
|
12
|
+
}
|
|
13
|
+
return env;
|
|
14
|
+
};
|
|
15
|
+
exports.validateEnvironment = validateEnvironment;
|
|
16
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiaW5kZXguanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi9jbGkvdmFsaWRhdG9ycy9pbmRleC50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiOzs7QUFBQSxxREFBa0Q7QUFDbEQsb0NBQW1DO0FBRTVCLE1BQU0sbUJBQW1CLEdBQUcsQ0FBQyxHQUFXLEVBQVUsRUFBRTtJQUN2RCxNQUFNLGlCQUFpQixHQUFHLE1BQU0sQ0FBQyxJQUFJLENBQUMsdUJBQVcsQ0FBQyxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsQ0FBQztJQUU5RCxJQUFJLENBQUMsQ0FBQyxHQUFHLElBQUksdUJBQVcsQ0FBQyxFQUFFO1FBQ3ZCLE1BQU0sWUFBWSxHQUFHLDBCQUEwQixHQUFHLDBCQUEwQixpQkFBaUIsRUFBRSxDQUFDO1FBQ2hHLE9BQU8sQ0FBQyxLQUFLLENBQUMsaUJBQVMsRUFBRSxZQUFZLENBQUMsQ0FBQztRQUN2QyxPQUFPLENBQUMsSUFBSSxDQUFDLENBQUMsQ0FBQyxDQUFDO0tBQ25CO0lBRUQsT0FBTyxHQUFHLENBQUM7QUFDZixDQUFDLENBQUE7QUFWWSxRQUFBLG1CQUFtQix1QkFVL0IiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQge2VudlRvRG9tYWlufSBmcm9tIFwiLi4vLi4vbW9kZWwvY2xpLm1vZGVsXCI7XG5pbXBvcnQge1JFRF9DT0xPUn0gZnJvbSBcIi4uL3RoZW1lXCI7XG5cbmV4cG9ydCBjb25zdCB2YWxpZGF0ZUVudmlyb25tZW50ID0gKGVudjogc3RyaW5nKTogc3RyaW5nID0+IHtcbiAgICBjb25zdCB2YWxpZEVudmlyb25tZW50cyA9IE9iamVjdC5rZXlzKGVudlRvRG9tYWluKS5qb2luKCcsICcpO1xuXG4gICAgaWYgKCEoZW52IGluIGVudlRvRG9tYWluKSkge1xuICAgICAgICBjb25zdCBlcnJvck1lc3NhZ2UgPSBg4p2MIEludmFsaWQgZW52aXJvbm1lbnQ6ICR7ZW52fS4gUG9zc2libGUgdmFsdWVzIGFyZTogJHt2YWxpZEVudmlyb25tZW50c31gO1xuICAgICAgICBjb25zb2xlLmVycm9yKFJFRF9DT0xPUiwgZXJyb3JNZXNzYWdlKTtcbiAgICAgICAgcHJvY2Vzcy5leGl0KDEpO1xuICAgIH1cblxuICAgIHJldHVybiBlbnY7XG59Il19
|
|
@@ -0,0 +1,16 @@
|
|
|
1
|
+
export interface LoggerConfig {
|
|
2
|
+
maxLogSize: number;
|
|
3
|
+
logLevel: string;
|
|
4
|
+
}
|
|
5
|
+
export interface rumApiConfig {
|
|
6
|
+
maxMessageSize: number;
|
|
7
|
+
keepaliveTimeMs: number;
|
|
8
|
+
keepaliveTimeoutMs: number;
|
|
9
|
+
chunkSize: number;
|
|
10
|
+
}
|
|
11
|
+
export interface Config {
|
|
12
|
+
logger: LoggerConfig;
|
|
13
|
+
rumApi: rumApiConfig;
|
|
14
|
+
}
|
|
15
|
+
declare const config: Config;
|
|
16
|
+
export default config;
|
|
@@ -0,0 +1,16 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
+
const config = {
|
|
4
|
+
logger: {
|
|
5
|
+
maxLogSize: 10000,
|
|
6
|
+
logLevel: 'debug',
|
|
7
|
+
},
|
|
8
|
+
rumApi: {
|
|
9
|
+
maxMessageSize: 400000 * 1024,
|
|
10
|
+
keepaliveTimeMs: 120000,
|
|
11
|
+
keepaliveTimeoutMs: 120000,
|
|
12
|
+
chunkSize: 512 * 1024 // 512 KB chunk size
|
|
13
|
+
}
|
|
14
|
+
};
|
|
15
|
+
exports.default = config;
|
|
16
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiY29uZmlnLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vY29uZmlnL2NvbmZpZy50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiOztBQWlCQSxNQUFNLE1BQU0sR0FBVztJQUNuQixNQUFNLEVBQUU7UUFDSixVQUFVLEVBQUUsS0FBSztRQUNqQixRQUFRLEVBQUUsT0FBTztLQUNwQjtJQUNELE1BQU0sRUFBRTtRQUNKLGNBQWMsRUFBRSxNQUFNLEdBQUcsSUFBSTtRQUM3QixlQUFlLEVBQUUsTUFBTTtRQUN2QixrQkFBa0IsRUFBRSxNQUFNO1FBQzFCLFNBQVMsRUFBRSxHQUFHLEdBQUcsSUFBSSxDQUFDLG9CQUFvQjtLQUM3QztDQUNKLENBQUM7QUFFRixrQkFBZSxNQUFNLENBQUMiLCJzb3VyY2VzQ29udGVudCI6WyJleHBvcnQgaW50ZXJmYWNlIExvZ2dlckNvbmZpZyB7XG4gICAgbWF4TG9nU2l6ZTogbnVtYmVyO1xuICAgIGxvZ0xldmVsOiBzdHJpbmc7XG59XG5cbmV4cG9ydCBpbnRlcmZhY2UgcnVtQXBpQ29uZmlnIHtcbiAgICBtYXhNZXNzYWdlU2l6ZTogbnVtYmVyLFxuICAgIGtlZXBhbGl2ZVRpbWVNczogbnVtYmVyXG4gICAga2VlcGFsaXZlVGltZW91dE1zOiBudW1iZXJcbiAgICBjaHVua1NpemU6IG51bWJlcixcbn1cblxuZXhwb3J0IGludGVyZmFjZSBDb25maWcge1xuICAgIGxvZ2dlcjogTG9nZ2VyQ29uZmlnO1xuICAgIHJ1bUFwaTogcnVtQXBpQ29uZmlnO1xufVxuXG5jb25zdCBjb25maWc6IENvbmZpZyA9IHtcbiAgICBsb2dnZXI6IHtcbiAgICAgICAgbWF4TG9nU2l6ZTogMTAwMDAsXG4gICAgICAgIGxvZ0xldmVsOiAnZGVidWcnLFxuICAgIH0sXG4gICAgcnVtQXBpOiB7XG4gICAgICAgIG1heE1lc3NhZ2VTaXplOiA0MDAwMDAgKiAxMDI0LFxuICAgICAgICBrZWVwYWxpdmVUaW1lTXM6IDEyMDAwMCxcbiAgICAgICAga2VlcGFsaXZlVGltZW91dE1zOiAxMjAwMDAsXG4gICAgICAgIGNodW5rU2l6ZTogNTEyICogMTAyNCAvLyA1MTIgS0IgY2h1bmsgc2l6ZVxuICAgIH1cbn07XG5cbmV4cG9ydCBkZWZhdWx0IGNvbmZpZztcbiJdfQ==
|
|
@@ -0,0 +1,8 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
var __importDefault = (this && this.__importDefault) || function (mod) {
|
|
3
|
+
return (mod && mod.__esModule) ? mod : { "default": mod };
|
|
4
|
+
};
|
|
5
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
6
|
+
const config_1 = __importDefault(require("./config"));
|
|
7
|
+
exports.default = config_1.default;
|
|
8
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiaW5kZXguanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi9jb25maWcvaW5kZXgudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6Ijs7Ozs7QUFBQSxzREFBOEI7QUFFOUIsa0JBQWUsZ0JBQU0sQ0FBQyIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCBjb25maWcgZnJvbSAnLi9jb25maWcnO1xuXG5leHBvcnQgZGVmYXVsdCBjb25maWc7XG4iXX0=
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
export declare const envToDomain: Record<string, string>;
|
|
@@ -0,0 +1,11 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
+
exports.envToDomain = void 0;
|
|
4
|
+
exports.envToDomain = {
|
|
5
|
+
US1: 'https://ng-api-grpc.coralogix.us:443',
|
|
6
|
+
EU1: 'https://ng-api-grpc.coralogix.com:443',
|
|
7
|
+
EU2: 'https://ng-api-grpc.eu2.coralogix.com:443',
|
|
8
|
+
AP1: 'https://ng-api-grpc.app.coralogix.in:443',
|
|
9
|
+
AP2: 'https://ng-api-grpc.coralogix.com:443',
|
|
10
|
+
};
|
|
11
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiY2xpLm1vZGVsLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vbW9kZWwvY2xpLm1vZGVsLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiI7OztBQUFhLFFBQUEsV0FBVyxHQUEyQjtJQUMvQyxHQUFHLEVBQUUsc0NBQXNDO0lBQzNDLEdBQUcsRUFBRSx1Q0FBdUM7SUFDNUMsR0FBRyxFQUFFLDJDQUEyQztJQUNoRCxHQUFHLEVBQUUsMENBQTBDO0lBQy9DLEdBQUcsRUFBRSx1Q0FBdUM7Q0FDL0MsQ0FBQSIsInNvdXJjZXNDb250ZW50IjpbImV4cG9ydCBjb25zdCBlbnZUb0RvbWFpbjogUmVjb3JkPHN0cmluZywgc3RyaW5nPiA9IHtcbiAgICBVUzE6ICdodHRwczovL25nLWFwaS1ncnBjLmNvcmFsb2dpeC51czo0NDMnLFxuICAgIEVVMTogJ2h0dHBzOi8vbmctYXBpLWdycGMuY29yYWxvZ2l4LmNvbTo0NDMnLFxuICAgIEVVMjogJ2h0dHBzOi8vbmctYXBpLWdycGMuZXUyLmNvcmFsb2dpeC5jb206NDQzJyxcbiAgICBBUDE6ICdodHRwczovL25nLWFwaS1ncnBjLmFwcC5jb3JhbG9naXguaW46NDQzJyxcbiAgICBBUDI6ICdodHRwczovL25nLWFwaS1ncnBjLmNvcmFsb2dpeC5jb206NDQzJyxcbn0iXX0=
|
|
@@ -0,0 +1,24 @@
|
|
|
1
|
+
import _m0 from "protobufjs/minimal";
|
|
2
|
+
export declare const protobufPackage = "com.coralogix.rum.v2";
|
|
3
|
+
export interface AuditLogDescription {
|
|
4
|
+
description?: string | undefined;
|
|
5
|
+
}
|
|
6
|
+
export declare const AuditLogDescription: {
|
|
7
|
+
encode(message: AuditLogDescription, writer?: _m0.Writer): _m0.Writer;
|
|
8
|
+
decode(input: _m0.Reader | Uint8Array, length?: number): AuditLogDescription;
|
|
9
|
+
fromJSON(object: any): AuditLogDescription;
|
|
10
|
+
toJSON(message: AuditLogDescription): unknown;
|
|
11
|
+
create(base?: DeepPartial<AuditLogDescription>): AuditLogDescription;
|
|
12
|
+
fromPartial(object: DeepPartial<AuditLogDescription>): AuditLogDescription;
|
|
13
|
+
};
|
|
14
|
+
type Builtin = Date | Function | Uint8Array | string | number | boolean | undefined;
|
|
15
|
+
export type DeepPartial<T> = T extends Builtin ? T : T extends Array<infer U> ? Array<DeepPartial<U>> : T extends ReadonlyArray<infer U> ? ReadonlyArray<DeepPartial<U>> : T extends {
|
|
16
|
+
$case: string;
|
|
17
|
+
} ? {
|
|
18
|
+
[K in keyof Omit<T, "$case">]?: DeepPartial<T[K]>;
|
|
19
|
+
} & {
|
|
20
|
+
$case: T["$case"];
|
|
21
|
+
} : T extends {} ? {
|
|
22
|
+
[K in keyof T]?: DeepPartial<T[K]>;
|
|
23
|
+
} : Partial<T>;
|
|
24
|
+
export {};
|
|
@@ -0,0 +1,62 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
var __importDefault = (this && this.__importDefault) || function (mod) {
|
|
3
|
+
return (mod && mod.__esModule) ? mod : { "default": mod };
|
|
4
|
+
};
|
|
5
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
6
|
+
exports.AuditLogDescription = exports.protobufPackage = void 0;
|
|
7
|
+
/* eslint-disable */
|
|
8
|
+
const minimal_1 = __importDefault(require("protobufjs/minimal"));
|
|
9
|
+
exports.protobufPackage = "com.coralogix.rum.v2";
|
|
10
|
+
function createBaseAuditLogDescription() {
|
|
11
|
+
return { description: undefined };
|
|
12
|
+
}
|
|
13
|
+
exports.AuditLogDescription = {
|
|
14
|
+
encode(message, writer = minimal_1.default.Writer.create()) {
|
|
15
|
+
if (message.description !== undefined) {
|
|
16
|
+
writer.uint32(10).string(message.description);
|
|
17
|
+
}
|
|
18
|
+
return writer;
|
|
19
|
+
},
|
|
20
|
+
decode(input, length) {
|
|
21
|
+
const reader = input instanceof minimal_1.default.Reader ? input : minimal_1.default.Reader.create(input);
|
|
22
|
+
let end = length === undefined ? reader.len : reader.pos + length;
|
|
23
|
+
const message = createBaseAuditLogDescription();
|
|
24
|
+
while (reader.pos < end) {
|
|
25
|
+
const tag = reader.uint32();
|
|
26
|
+
switch (tag >>> 3) {
|
|
27
|
+
case 1:
|
|
28
|
+
if (tag !== 10) {
|
|
29
|
+
break;
|
|
30
|
+
}
|
|
31
|
+
message.description = reader.string();
|
|
32
|
+
continue;
|
|
33
|
+
}
|
|
34
|
+
if ((tag & 7) === 4 || tag === 0) {
|
|
35
|
+
break;
|
|
36
|
+
}
|
|
37
|
+
reader.skipType(tag & 7);
|
|
38
|
+
}
|
|
39
|
+
return message;
|
|
40
|
+
},
|
|
41
|
+
fromJSON(object) {
|
|
42
|
+
return { description: isSet(object.description) ? String(object.description) : undefined };
|
|
43
|
+
},
|
|
44
|
+
toJSON(message) {
|
|
45
|
+
const obj = {};
|
|
46
|
+
message.description !== undefined && (obj.description = message.description);
|
|
47
|
+
return obj;
|
|
48
|
+
},
|
|
49
|
+
create(base) {
|
|
50
|
+
return exports.AuditLogDescription.fromPartial(base !== null && base !== void 0 ? base : {});
|
|
51
|
+
},
|
|
52
|
+
fromPartial(object) {
|
|
53
|
+
var _a;
|
|
54
|
+
const message = createBaseAuditLogDescription();
|
|
55
|
+
message.description = (_a = object.description) !== null && _a !== void 0 ? _a : undefined;
|
|
56
|
+
return message;
|
|
57
|
+
},
|
|
58
|
+
};
|
|
59
|
+
function isSet(value) {
|
|
60
|
+
return value !== null && value !== undefined;
|
|
61
|
+
}
|
|
62
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiYXVkaXRfbG9nLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vLi4vcHJvdG8tbW9kZWxzL2NvbS9jb3JhbG9naXgvcnVtL3YyL2F1ZGl0X2xvZy50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiOzs7Ozs7QUFBQSxvQkFBb0I7QUFDcEIsaUVBQXFDO0FBRXhCLFFBQUEsZUFBZSxHQUFHLHNCQUFzQixDQUFDO0FBTXRELFNBQVMsNkJBQTZCO0lBQ3BDLE9BQU8sRUFBRSxXQUFXLEVBQUUsU0FBUyxFQUFFLENBQUM7QUFDcEMsQ0FBQztBQUVZLFFBQUEsbUJBQW1CLEdBQUc7SUFDakMsTUFBTSxDQUFDLE9BQTRCLEVBQUUsU0FBcUIsaUJBQUcsQ0FBQyxNQUFNLENBQUMsTUFBTSxFQUFFO1FBQzNFLElBQUksT0FBTyxDQUFDLFdBQVcsS0FBSyxTQUFTLEVBQUU7WUFDckMsTUFBTSxDQUFDLE1BQU0sQ0FBQyxFQUFFLENBQUMsQ0FBQyxNQUFNLENBQUMsT0FBTyxDQUFDLFdBQVcsQ0FBQyxDQUFDO1NBQy9DO1FBQ0QsT0FBTyxNQUFNLENBQUM7SUFDaEIsQ0FBQztJQUVELE1BQU0sQ0FBQyxLQUE4QixFQUFFLE1BQWU7UUFDcEQsTUFBTSxNQUFNLEdBQUcsS0FBSyxZQUFZLGlCQUFHLENBQUMsTUFBTSxDQUFDLENBQUMsQ0FBQyxLQUFLLENBQUMsQ0FBQyxDQUFDLGlCQUFHLENBQUMsTUFBTSxDQUFDLE1BQU0sQ0FBQyxLQUFLLENBQUMsQ0FBQztRQUM5RSxJQUFJLEdBQUcsR0FBRyxNQUFNLEtBQUssU0FBUyxDQUFDLENBQUMsQ0FBQyxNQUFNLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQyxNQUFNLENBQUMsR0FBRyxHQUFHLE1BQU0sQ0FBQztRQUNsRSxNQUFNLE9BQU8sR0FBRyw2QkFBNkIsRUFBRSxDQUFDO1FBQ2hELE9BQU8sTUFBTSxDQUFDLEdBQUcsR0FBRyxHQUFHLEVBQUU7WUFDdkIsTUFBTSxHQUFHLEdBQUcsTUFBTSxDQUFDLE1BQU0sRUFBRSxDQUFDO1lBQzVCLFFBQVEsR0FBRyxLQUFLLENBQUMsRUFBRTtnQkFDakIsS0FBSyxDQUFDO29CQUNKLElBQUksR0FBRyxLQUFLLEVBQUUsRUFBRTt3QkFDZCxNQUFNO3FCQUNQO29CQUVELE9BQU8sQ0FBQyxXQUFXLEdBQUcsTUFBTSxDQUFDLE1BQU0sRUFBRSxDQUFDO29CQUN0QyxTQUFTO2FBQ1o7WUFDRCxJQUFJLENBQUMsR0FBRyxHQUFHLENBQUMsQ0FBQyxLQUFLLENBQUMsSUFBSSxHQUFHLEtBQUssQ0FBQyxFQUFFO2dCQUNoQyxNQUFNO2FBQ1A7WUFDRCxNQUFNLENBQUMsUUFBUSxDQUFDLEdBQUcsR0FBRyxDQUFDLENBQUMsQ0FBQztTQUMxQjtRQUNELE9BQU8sT0FBTyxDQUFDO0lBQ2pCLENBQUM7SUFFRCxRQUFRLENBQUMsTUFBVztRQUNsQixPQUFPLEVBQUUsV0FBVyxFQUFFLEtBQUssQ0FBQyxNQUFNLENBQUMsV0FBVyxDQUFDLENBQUMsQ0FBQyxDQUFDLE1BQU0sQ0FBQyxNQUFNLENBQUMsV0FBVyxDQUFDLENBQUMsQ0FBQyxDQUFDLFNBQVMsRUFBRSxDQUFDO0lBQzdGLENBQUM7SUFFRCxNQUFNLENBQUMsT0FBNEI7UUFDakMsTUFBTSxHQUFHLEdBQVEsRUFBRSxDQUFDO1FBQ3BCLE9BQU8sQ0FBQyxXQUFXLEtBQUssU0FBUyxJQUFJLENBQUMsR0FBRyxDQUFDLFdBQVcsR0FBRyxPQUFPLENBQUMsV0FBVyxDQUFDLENBQUM7UUFDN0UsT0FBTyxHQUFHLENBQUM7SUFDYixDQUFDO0lBRUQsTUFBTSxDQUFDLElBQXVDO1FBQzVDLE9BQU8sMkJBQW1CLENBQUMsV0FBVyxDQUFDLElBQUksYUFBSixJQUFJLGNBQUosSUFBSSxHQUFJLEVBQUUsQ0FBQyxDQUFDO0lBQ3JELENBQUM7SUFFRCxXQUFXLENBQUMsTUFBd0M7O1FBQ2xELE1BQU0sT0FBTyxHQUFHLDZCQUE2QixFQUFFLENBQUM7UUFDaEQsT0FBTyxDQUFDLFdBQVcsR0FBRyxNQUFBLE1BQU0sQ0FBQyxXQUFXLG1DQUFJLFNBQVMsQ0FBQztRQUN0RCxPQUFPLE9BQU8sQ0FBQztJQUNqQixDQUFDO0NBQ0YsQ0FBQztBQVVGLFNBQVMsS0FBSyxDQUFDLEtBQVU7SUFDdkIsT0FBTyxLQUFLLEtBQUssSUFBSSxJQUFJLEtBQUssS0FBSyxTQUFTLENBQUM7QUFDL0MsQ0FBQyIsInNvdXJjZXNDb250ZW50IjpbIi8qIGVzbGludC1kaXNhYmxlICovXG5pbXBvcnQgX20wIGZyb20gXCJwcm90b2J1ZmpzL21pbmltYWxcIjtcblxuZXhwb3J0IGNvbnN0IHByb3RvYnVmUGFja2FnZSA9IFwiY29tLmNvcmFsb2dpeC5ydW0udjJcIjtcblxuZXhwb3J0IGludGVyZmFjZSBBdWRpdExvZ0Rlc2NyaXB0aW9uIHtcbiAgZGVzY3JpcHRpb24/OiBzdHJpbmcgfCB1bmRlZmluZWQ7XG59XG5cbmZ1bmN0aW9uIGNyZWF0ZUJhc2VBdWRpdExvZ0Rlc2NyaXB0aW9uKCk6IEF1ZGl0TG9nRGVzY3JpcHRpb24ge1xuICByZXR1cm4geyBkZXNjcmlwdGlvbjogdW5kZWZpbmVkIH07XG59XG5cbmV4cG9ydCBjb25zdCBBdWRpdExvZ0Rlc2NyaXB0aW9uID0ge1xuICBlbmNvZGUobWVzc2FnZTogQXVkaXRMb2dEZXNjcmlwdGlvbiwgd3JpdGVyOiBfbTAuV3JpdGVyID0gX20wLldyaXRlci5jcmVhdGUoKSk6IF9tMC5Xcml0ZXIge1xuICAgIGlmIChtZXNzYWdlLmRlc2NyaXB0aW9uICE9PSB1bmRlZmluZWQpIHtcbiAgICAgIHdyaXRlci51aW50MzIoMTApLnN0cmluZyhtZXNzYWdlLmRlc2NyaXB0aW9uKTtcbiAgICB9XG4gICAgcmV0dXJuIHdyaXRlcjtcbiAgfSxcblxuICBkZWNvZGUoaW5wdXQ6IF9tMC5SZWFkZXIgfCBVaW50OEFycmF5LCBsZW5ndGg/OiBudW1iZXIpOiBBdWRpdExvZ0Rlc2NyaXB0aW9uIHtcbiAgICBjb25zdCByZWFkZXIgPSBpbnB1dCBpbnN0YW5jZW9mIF9tMC5SZWFkZXIgPyBpbnB1dCA6IF9tMC5SZWFkZXIuY3JlYXRlKGlucHV0KTtcbiAgICBsZXQgZW5kID0gbGVuZ3RoID09PSB1bmRlZmluZWQgPyByZWFkZXIubGVuIDogcmVhZGVyLnBvcyArIGxlbmd0aDtcbiAgICBjb25zdCBtZXNzYWdlID0gY3JlYXRlQmFzZUF1ZGl0TG9nRGVzY3JpcHRpb24oKTtcbiAgICB3aGlsZSAocmVhZGVyLnBvcyA8IGVuZCkge1xuICAgICAgY29uc3QgdGFnID0gcmVhZGVyLnVpbnQzMigpO1xuICAgICAgc3dpdGNoICh0YWcgPj4+IDMpIHtcbiAgICAgICAgY2FzZSAxOlxuICAgICAgICAgIGlmICh0YWcgIT09IDEwKSB7XG4gICAgICAgICAgICBicmVhaztcbiAgICAgICAgICB9XG5cbiAgICAgICAgICBtZXNzYWdlLmRlc2NyaXB0aW9uID0gcmVhZGVyLnN0cmluZygpO1xuICAgICAgICAgIGNvbnRpbnVlO1xuICAgICAgfVxuICAgICAgaWYgKCh0YWcgJiA3KSA9PT0gNCB8fCB0YWcgPT09IDApIHtcbiAgICAgICAgYnJlYWs7XG4gICAgICB9XG4gICAgICByZWFkZXIuc2tpcFR5cGUodGFnICYgNyk7XG4gICAgfVxuICAgIHJldHVybiBtZXNzYWdlO1xuICB9LFxuXG4gIGZyb21KU09OKG9iamVjdDogYW55KTogQXVkaXRMb2dEZXNjcmlwdGlvbiB7XG4gICAgcmV0dXJuIHsgZGVzY3JpcHRpb246IGlzU2V0KG9iamVjdC5kZXNjcmlwdGlvbikgPyBTdHJpbmcob2JqZWN0LmRlc2NyaXB0aW9uKSA6IHVuZGVmaW5lZCB9O1xuICB9LFxuXG4gIHRvSlNPTihtZXNzYWdlOiBBdWRpdExvZ0Rlc2NyaXB0aW9uKTogdW5rbm93biB7XG4gICAgY29uc3Qgb2JqOiBhbnkgPSB7fTtcbiAgICBtZXNzYWdlLmRlc2NyaXB0aW9uICE9PSB1bmRlZmluZWQgJiYgKG9iai5kZXNjcmlwdGlvbiA9IG1lc3NhZ2UuZGVzY3JpcHRpb24pO1xuICAgIHJldHVybiBvYmo7XG4gIH0sXG5cbiAgY3JlYXRlKGJhc2U/OiBEZWVwUGFydGlhbDxBdWRpdExvZ0Rlc2NyaXB0aW9uPik6IEF1ZGl0TG9nRGVzY3JpcHRpb24ge1xuICAgIHJldHVybiBBdWRpdExvZ0Rlc2NyaXB0aW9uLmZyb21QYXJ0aWFsKGJhc2UgPz8ge30pO1xuICB9LFxuXG4gIGZyb21QYXJ0aWFsKG9iamVjdDogRGVlcFBhcnRpYWw8QXVkaXRMb2dEZXNjcmlwdGlvbj4pOiBBdWRpdExvZ0Rlc2NyaXB0aW9uIHtcbiAgICBjb25zdCBtZXNzYWdlID0gY3JlYXRlQmFzZUF1ZGl0TG9nRGVzY3JpcHRpb24oKTtcbiAgICBtZXNzYWdlLmRlc2NyaXB0aW9uID0gb2JqZWN0LmRlc2NyaXB0aW9uID8/IHVuZGVmaW5lZDtcbiAgICByZXR1cm4gbWVzc2FnZTtcbiAgfSxcbn07XG5cbnR5cGUgQnVpbHRpbiA9IERhdGUgfCBGdW5jdGlvbiB8IFVpbnQ4QXJyYXkgfCBzdHJpbmcgfCBudW1iZXIgfCBib29sZWFuIHwgdW5kZWZpbmVkO1xuXG5leHBvcnQgdHlwZSBEZWVwUGFydGlhbDxUPiA9IFQgZXh0ZW5kcyBCdWlsdGluID8gVFxuICA6IFQgZXh0ZW5kcyBBcnJheTxpbmZlciBVPiA/IEFycmF5PERlZXBQYXJ0aWFsPFU+PiA6IFQgZXh0ZW5kcyBSZWFkb25seUFycmF5PGluZmVyIFU+ID8gUmVhZG9ubHlBcnJheTxEZWVwUGFydGlhbDxVPj5cbiAgOiBUIGV4dGVuZHMgeyAkY2FzZTogc3RyaW5nIH0gPyB7IFtLIGluIGtleW9mIE9taXQ8VCwgXCIkY2FzZVwiPl0/OiBEZWVwUGFydGlhbDxUW0tdPiB9ICYgeyAkY2FzZTogVFtcIiRjYXNlXCJdIH1cbiAgOiBUIGV4dGVuZHMge30gPyB7IFtLIGluIGtleW9mIFRdPzogRGVlcFBhcnRpYWw8VFtLXT4gfVxuICA6IFBhcnRpYWw8VD47XG5cbmZ1bmN0aW9uIGlzU2V0KHZhbHVlOiBhbnkpOiBib29sZWFuIHtcbiAgcmV0dXJuIHZhbHVlICE9PSBudWxsICYmIHZhbHVlICE9PSB1bmRlZmluZWQ7XG59XG4iXX0=
|