@coralogix/rum-cli 1.1.38 → 1.1.43

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 (143) hide show
  1. package/README.md +2 -0
  2. package/api/base/base.api.ts +48 -56
  3. package/api/dsym/dsym.api.ts +8 -0
  4. package/api/proguard/proguard.api.ts +8 -0
  5. package/api/react-native/react-native.api.ts +8 -0
  6. package/api/source-maps/source-maps.api.ts +8 -0
  7. package/cli/commands/dsym/upload-dsym-command.ts +4 -2
  8. package/cli/commands/proguard/upload-proguard-command.ts +4 -2
  9. package/cli/commands/react-native/upload-react-native-source-maps-command.ts +4 -2
  10. package/cli/commands/source-maps/upload-source-maps-command.ts +4 -2
  11. package/consts/consts.ts +1 -0
  12. package/dist/api/base/base.api.d.ts +10 -9
  13. package/dist/api/base/base.api.js +20 -34
  14. package/dist/api/dsym/dsym.api.d.ts +2 -2
  15. package/dist/api/dsym/dsym.api.js +7 -3
  16. package/dist/api/proguard/proguard.api.d.ts +2 -2
  17. package/dist/api/proguard/proguard.api.js +7 -3
  18. package/dist/api/react-native/react-native.api.d.ts +2 -2
  19. package/dist/api/react-native/react-native.api.js +7 -3
  20. package/dist/api/source-maps/source-maps.api.d.ts +2 -2
  21. package/dist/api/source-maps/source-maps.api.js +7 -3
  22. package/dist/cli/commands/dsym/upload-dsym-command.js +5 -3
  23. package/dist/cli/commands/proguard/upload-proguard-command.js +5 -3
  24. package/dist/cli/commands/react-native/upload-react-native-source-maps-command.js +5 -3
  25. package/dist/cli/commands/source-maps/upload-source-maps-command.js +5 -3
  26. package/dist/consts/consts.js +3 -2
  27. package/dist/grpc-client/grpc-client-factory.d.ts +158 -0
  28. package/dist/models/dsym-commands.model.d.ts +2 -0
  29. package/dist/models/dsym-commands.model.js +1 -1
  30. package/dist/models/proguard-commands.model.d.ts +2 -0
  31. package/dist/models/proguard-commands.model.js +1 -1
  32. package/dist/models/react-native-commands.model.d.ts +2 -0
  33. package/dist/models/react-native-commands.model.js +1 -1
  34. package/dist/models/source-maps-commands.model.d.ts +2 -0
  35. package/dist/models/source-maps-commands.model.js +1 -1
  36. package/dist/proto-models/com/coralogix/blobset/v2/blobset_query_service.d.ts +150 -0
  37. package/dist/proto-models/com/coralogix/blobset/v2/blobset_query_service.js +29 -1
  38. package/dist/proto-models/com/coralogix/blobset/v2/case_file.d.ts +36 -0
  39. package/dist/proto-models/com/coralogix/blobset/v2/case_file.js +161 -0
  40. package/dist/proto-models/com/coralogix/blobset/v2/dsym.d.ts +1 -0
  41. package/dist/proto-models/com/coralogix/blobset/v2/dsym.js +33 -3
  42. package/dist/proto-models/com/coralogix/blobset/v2/entity_metadata.d.ts +47 -0
  43. package/dist/proto-models/com/coralogix/blobset/v2/entity_metadata.js +375 -11
  44. package/dist/proto-models/com/coralogix/blobset/v2/entity_type.d.ts +3 -1
  45. package/dist/proto-models/com/coralogix/blobset/v2/entity_type.js +13 -1
  46. package/dist/proto-models/com/coralogix/blobset/v2/investigation_file.d.ts +36 -0
  47. package/dist/proto-models/com/coralogix/blobset/v2/investigation_file.js +161 -0
  48. package/dist/proto-models/com/coralogix/blobset/v2/proguard.d.ts +68 -0
  49. package/dist/proto-models/com/coralogix/blobset/v2/proguard.js +400 -0
  50. package/dist/proto-models/com/coralogix/rum/v2/ai_assist.d.ts +89 -0
  51. package/dist/proto-models/com/coralogix/rum/v2/ai_assist.js +290 -0
  52. package/dist/proto-models/com/coralogix/rum/v2/application_releases.d.ts +38 -0
  53. package/dist/proto-models/com/coralogix/rum/v2/application_releases.js +180 -0
  54. package/dist/proto-models/com/coralogix/rum/v2/merge_error.d.ts +38 -0
  55. package/dist/proto-models/com/coralogix/rum/v2/merge_error.js +171 -0
  56. package/dist/proto-models/com/coralogix/rum/v2/release_entity_metadata.d.ts +19 -0
  57. package/dist/proto-models/com/coralogix/rum/v2/release_entity_metadata.js +225 -10
  58. package/dist/proto-models/com/coralogix/rum/v2/rum_merge_erros_service.d.ts +197 -0
  59. package/dist/proto-models/com/coralogix/rum/v2/rum_merge_erros_service.js +478 -0
  60. package/dist/proto-models/com/coralogix/rum/v2/rum_service.d.ts +107 -0
  61. package/dist/proto-models/com/coralogix/rum/v2/rum_service.js +385 -2
  62. package/dist/proto-models/com/coralogix/rum/v2/rum_source_map_service.d.ts +94 -1
  63. package/dist/proto-models/com/coralogix/rum/v2/rum_source_map_service.js +300 -2
  64. package/dist/proto-models/com/coralogix/rum/v2/saved_filter.d.ts +5 -1
  65. package/dist/proto-models/com/coralogix/rum/v2/saved_filter.js +25 -1
  66. package/dist/proto-models/com/coralogix/rum/v2/template.d.ts +2 -0
  67. package/dist/proto-models/com/coralogix/rum/v2/template.js +31 -3
  68. package/dist/proto-models/google/protobuf/struct.d.ts +127 -0
  69. package/dist/proto-models/google/protobuf/struct.js +476 -0
  70. package/dist/services/base/base.service.d.ts +1 -1
  71. package/dist/services/base/base.service.js +7 -5
  72. package/dist/utils/upload-mode.utils.d.ts +12 -0
  73. package/dist/utils/upload-mode.utils.js +26 -0
  74. package/dist/utils/version-context.utils.d.ts +20 -0
  75. package/dist/utils/version-context.utils.js +71 -0
  76. package/models/dsym-commands.model.ts +2 -0
  77. package/models/proguard-commands.model.ts +2 -0
  78. package/models/react-native-commands.model.ts +2 -0
  79. package/models/source-maps-commands.model.ts +2 -0
  80. package/package.json +2 -2
  81. package/protofetch.lock +4 -4
  82. package/protofetch.toml +2 -2
  83. package/services/base/base.service.ts +7 -3
  84. package/utils/upload-mode.utils.ts +30 -0
  85. package/utils/version-context.utils.ts +95 -0
  86. package/proto-models/com/coralogix/blobset/v2/audit_log.ts +0 -84
  87. package/proto-models/com/coralogix/blobset/v2/blobset_query_service.ts +0 -36
  88. package/proto-models/com/coralogix/blobset/v2/blobset_service.ts +0 -209
  89. package/proto-models/com/coralogix/blobset/v2/dsym.ts +0 -400
  90. package/proto-models/com/coralogix/blobset/v2/entity_metadata.ts +0 -540
  91. package/proto-models/com/coralogix/blobset/v2/entity_type.ts +0 -56
  92. package/proto-models/com/coralogix/blobset/v2/s3_metadata.ts +0 -154
  93. package/proto-models/com/coralogix/blobset/v2/source_map.ts +0 -418
  94. package/proto-models/com/coralogix/rum/v2/analytics.ts +0 -924
  95. package/proto-models/com/coralogix/rum/v2/audit_log.ts +0 -84
  96. package/proto-models/com/coralogix/rum/v2/chunk.ts +0 -399
  97. package/proto-models/com/coralogix/rum/v2/file.ts +0 -159
  98. package/proto-models/com/coralogix/rum/v2/hide_errors.ts +0 -234
  99. package/proto-models/com/coralogix/rum/v2/release_entity_metadata.ts +0 -699
  100. package/proto-models/com/coralogix/rum/v2/release_entity_type.ts +0 -56
  101. package/proto-models/com/coralogix/rum/v2/rum_hide_errors_service.ts +0 -605
  102. package/proto-models/com/coralogix/rum/v2/rum_react_native_source_map_service.ts +0 -229
  103. package/proto-models/com/coralogix/rum/v2/rum_saved_filters_service.ts +0 -1679
  104. package/proto-models/com/coralogix/rum/v2/rum_sdk_versions.ts +0 -279
  105. package/proto-models/com/coralogix/rum/v2/rum_service.ts +0 -2158
  106. package/proto-models/com/coralogix/rum/v2/rum_session_recording_service.ts +0 -16
  107. package/proto-models/com/coralogix/rum/v2/rum_settings.ts +0 -215
  108. package/proto-models/com/coralogix/rum/v2/rum_settings_service.ts +0 -283
  109. package/proto-models/com/coralogix/rum/v2/rum_source_map_service.ts +0 -905
  110. package/proto-models/com/coralogix/rum/v2/saved_filter.ts +0 -307
  111. package/proto-models/com/coralogix/rum/v2/source_code_file_mapping.ts +0 -358
  112. package/proto-models/com/coralogix/rum/v2/source_map_release.ts +0 -301
  113. package/proto-models/com/coralogix/rum/v2/template.ts +0 -588
  114. package/proto-models/google/protobuf/descriptor.ts +0 -4921
  115. package/protos/com/coralogix/blobset/v2/audit_log.proto +0 -13
  116. package/protos/com/coralogix/blobset/v2/blobset_query_service.proto +0 -12
  117. package/protos/com/coralogix/blobset/v2/blobset_service.proto +0 -18
  118. package/protos/com/coralogix/blobset/v2/dsym.proto +0 -19
  119. package/protos/com/coralogix/blobset/v2/entity_metadata.proto +0 -35
  120. package/protos/com/coralogix/blobset/v2/entity_type.proto +0 -11
  121. package/protos/com/coralogix/blobset/v2/s3_metadata.proto +0 -14
  122. package/protos/com/coralogix/blobset/v2/source_map.proto +0 -30
  123. package/protos/com/coralogix/rum/v2/analytics.proto +0 -57
  124. package/protos/com/coralogix/rum/v2/audit_log.proto +0 -13
  125. package/protos/com/coralogix/rum/v2/chunk.proto +0 -24
  126. package/protos/com/coralogix/rum/v2/file.proto +0 -8
  127. package/protos/com/coralogix/rum/v2/hide_errors.proto +0 -19
  128. package/protos/com/coralogix/rum/v2/release_entity_metadata.proto +0 -44
  129. package/protos/com/coralogix/rum/v2/release_entity_type.proto +0 -11
  130. package/protos/com/coralogix/rum/v2/rum_hide_errors_service.proto +0 -42
  131. package/protos/com/coralogix/rum/v2/rum_react_native_source_map_service.proto +0 -19
  132. package/protos/com/coralogix/rum/v2/rum_saved_filters_service.proto +0 -117
  133. package/protos/com/coralogix/rum/v2/rum_sdk_versions.proto +0 -17
  134. package/protos/com/coralogix/rum/v2/rum_service.proto +0 -144
  135. package/protos/com/coralogix/rum/v2/rum_session_recording_service.proto +0 -4
  136. package/protos/com/coralogix/rum/v2/rum_settings.proto +0 -26
  137. package/protos/com/coralogix/rum/v2/rum_settings_service.proto +0 -23
  138. package/protos/com/coralogix/rum/v2/rum_source_map_service.proto +0 -58
  139. package/protos/com/coralogix/rum/v2/saved_filter.proto +0 -28
  140. package/protos/com/coralogix/rum/v2/source_code_file_mapping.proto +0 -16
  141. package/protos/com/coralogix/rum/v2/source_map_release.proto +0 -18
  142. package/protos/com/coralogix/rum/v2/template.proto +0 -40
  143. package/protoset.bin +0 -0
package/README.md CHANGED
@@ -68,6 +68,8 @@ coralogix-rum-cli upload-proguard -k <privateKey> -a <application> -v <version>
68
68
  - `-c, --commit-hash <commitHash>`: GitHub commit hash (optional).
69
69
  - `-n, --repo-name <repoName>`: GitHub repository name (optional).
70
70
  - `-o, --org-name <orgName>`: GitHub organization name (optional).
71
+ - `--override`: Override existing source maps (optional).
72
+ - `--merge`: Merge with existing source maps, allowing multiple uploads to the same version (optional).
71
73
  - `-h, --help`: Display help.
72
74
 
73
75
  ## Environments
@@ -1,12 +1,13 @@
1
- import { Client, ClientError, Metadata, Status } from 'nice-grpc';
1
+ import { Client, Metadata } from 'nice-grpc';
2
2
  import { BlobSetServiceDefinition, UploadBlobRequest } from '../../proto-models/com/coralogix/blobset/v2/blobset_service';
3
- import { consoleError, createUploadBlobRequestChunks, validateCompressedFilesSize } from '../../utils/shared.utils';
3
+ import { createUploadBlobRequestChunks, validateCompressedFilesSize } from '../../utils/shared.utils';
4
4
  import { GrpcClientFactory } from '../../grpc-client/grpc-client-factory';
5
5
  import { CreateEntityReleaseRequest, RumSourceMapServiceDefinition } from '../../proto-models/com/coralogix/rum/v2/rum_source_map_service';
6
6
  import { EntityType } from '../../proto-models/com/coralogix/blobset/v2/entity_type';
7
7
  import { ReleaseEntityType } from '../../proto-models/com/coralogix/rum/v2/release_entity_type';
8
- import { EntityMetadata } from '../../proto-models/com/coralogix/blobset/v2/entity_metadata';
9
8
  import { ReleaseEntityMetadata } from '../../proto-models/com/coralogix/rum/v2/release_entity_metadata';
9
+ import { EntityMetadata } from '../../proto-models/com/coralogix/blobset/v2/entity_metadata';
10
+ import { getVersionContext } from '../../utils/version-context.utils';
10
11
 
11
12
  export abstract class BaseApi {
12
13
  protected abstract getEntityType(): EntityType;
@@ -18,6 +19,8 @@ export abstract class BaseApi {
18
19
  repoName?: string,
19
20
  commitHash?: string,
20
21
  orgName?: string,
22
+ internalVersion?: number,
23
+ mergedVersions?: number[],
21
24
  ): ReleaseEntityMetadata;
22
25
  protected abstract buildEntityMetadata(
23
26
  application: string,
@@ -25,9 +28,11 @@ export abstract class BaseApi {
25
28
  repoName?: string,
26
29
  commitHash?: string,
27
30
  orgName?: string,
31
+ internalVersion?: number,
32
+ mergedVersions?: number[],
28
33
  ): EntityMetadata;
29
34
 
30
- private async uploadBlob(
35
+ protected async uploadBlob(
31
36
  blobSetClient: Client<typeof BlobSetServiceDefinition>,
32
37
  request: UploadBlobRequest,
33
38
  entityMetadata: EntityMetadata | undefined,
@@ -41,8 +46,8 @@ export abstract class BaseApi {
41
46
  await blobSetClient.uploadBlob(iterableRequest, { metadata });
42
47
  }
43
48
 
44
- private async createEntityRelease(
45
- rumSourceMapClient: Client<typeof RumSourceMapServiceDefinition>,
49
+ protected async createEntityRelease(
50
+ rumClient: Client<typeof RumSourceMapServiceDefinition>,
46
51
  releaseEntityMetadata: ReleaseEntityMetadata | undefined,
47
52
  metadata: Metadata,
48
53
  ): Promise<void> {
@@ -51,37 +56,15 @@ export abstract class BaseApi {
51
56
  releaseEntityMetadata,
52
57
  };
53
58
 
54
- await rumSourceMapClient.createEntityRelease(request, { metadata });
59
+ await rumClient.createEntityRelease(request, { metadata });
55
60
  }
56
61
 
57
- private createGrpcMetadata(privateKey: string): Metadata {
62
+ protected createGrpcMetadata(privateKey: string): Metadata {
58
63
  const metadata: Metadata = new Metadata();
59
64
  metadata.set('Authorization', `Bearer ${privateKey}`);
60
65
  return metadata;
61
66
  }
62
67
 
63
- private async checkEntityReleaseExists(
64
- rumSourceMapClient: Client<typeof RumSourceMapServiceDefinition>,
65
- application: string,
66
- version: string,
67
- metadata: Metadata,
68
- ): Promise<boolean> {
69
- try {
70
- const { exists } = await rumSourceMapClient.isEntityReleaseExists(
71
- { releaseId: version, application, releaseEntityType: this.getReleaseEntityType() },
72
- { metadata },
73
- );
74
- return exists;
75
- } catch (error) {
76
- if (error instanceof ClientError && error.code === Status.PERMISSION_DENIED) {
77
- throw new Error(
78
- `Permission denied while checking entity release. Verify that your private key is correct. Details: ${error.message}`,
79
- );
80
- }
81
- throw error;
82
- }
83
- }
84
-
85
68
  public async upload(
86
69
  request: UploadBlobRequest,
87
70
  application: string,
@@ -91,35 +74,44 @@ export abstract class BaseApi {
91
74
  orgName: string | undefined,
92
75
  env: string,
93
76
  privateKey: string,
77
+ override = false,
78
+ merge = false,
94
79
  ): Promise<void> {
95
- const metadata: Metadata = this.createGrpcMetadata(privateKey);
80
+ const grpcMetadata: Metadata = this.createGrpcMetadata(privateKey);
96
81
  const blobSetClient = GrpcClientFactory.getBlobSetGrpcClient(env, this.getMaxCompressedFileSize());
97
- const rumSourceMapClient = GrpcClientFactory.getRumSourceMapGrpcClient(env, this.getMaxCompressedFileSize());
82
+ const rumClient = GrpcClientFactory.getRumSourceMapGrpcClient(env, this.getMaxCompressedFileSize());
98
83
 
99
- try {
100
- validateCompressedFilesSize(request.data.length, this.getMaxCompressedFileSize());
84
+ validateCompressedFilesSize(request.data.length, this.getMaxCompressedFileSize());
101
85
 
102
- const releaseExists: boolean = await this.checkEntityReleaseExists(rumSourceMapClient, application, version, metadata);
103
-
104
- if (releaseExists) {
105
- throw new Error(`Entity release already exists for releaseId: ${version} and application: ${application}`);
106
- }
107
-
108
- const releaseEntityMetadata: ReleaseEntityMetadata = this.buildReleaseEntityMetadata(
109
- application,
110
- version,
111
- repoName,
112
- commitHash,
113
- orgName,
114
- );
115
-
116
- const entityMetadata: EntityMetadata = this.buildEntityMetadata(application, version, repoName, commitHash, orgName);
117
-
118
- await this.uploadBlob(blobSetClient, request, entityMetadata, metadata);
119
-
120
- await this.createEntityRelease(rumSourceMapClient, releaseEntityMetadata, metadata);
121
- } catch (error) {
122
- throw error;
123
- }
86
+ const { internalVersion, mergedVersions } = await getVersionContext({
87
+ client: rumClient,
88
+ application,
89
+ version,
90
+ releaseEntityType: this.getReleaseEntityType(),
91
+ metadata: grpcMetadata,
92
+ flags: { override, merge },
93
+ });
94
+ const releaseEntityMetadata: ReleaseEntityMetadata = this.buildReleaseEntityMetadata(
95
+ application,
96
+ version,
97
+ repoName,
98
+ commitHash,
99
+ orgName,
100
+ internalVersion,
101
+ mergedVersions,
102
+ );
103
+
104
+ const entityMetadata: EntityMetadata = this.buildEntityMetadata(
105
+ application,
106
+ version,
107
+ repoName,
108
+ commitHash,
109
+ orgName,
110
+ internalVersion,
111
+ mergedVersions,
112
+ );
113
+
114
+ await this.uploadBlob(blobSetClient, request, entityMetadata, grpcMetadata);
115
+ await this.createEntityRelease(rumClient, releaseEntityMetadata, grpcMetadata);
124
116
  }
125
117
  }
@@ -24,6 +24,8 @@ export class DsymApi extends BaseApi {
24
24
  repoName?: string,
25
25
  commitHash?: string,
26
26
  orgName?: string,
27
+ internalVersion?: number,
28
+ mergedVersions?: number[],
27
29
  ): ReleaseEntityMetadata {
28
30
  return {
29
31
  metadata: {
@@ -34,6 +36,8 @@ export class DsymApi extends BaseApi {
34
36
  repoName: repoName || '',
35
37
  commitHash: commitHash || '',
36
38
  orgName: orgName || '',
39
+ internalVersion: internalVersion ?? 0,
40
+ mergedVersions: mergedVersions ? { versions: mergedVersions } : undefined,
37
41
  },
38
42
  },
39
43
  };
@@ -45,6 +49,8 @@ export class DsymApi extends BaseApi {
45
49
  repoName?: string,
46
50
  commitHash?: string,
47
51
  orgName?: string,
52
+ internalVersion?: number,
53
+ mergedVersions?: number[],
48
54
  ): EntityMetadata {
49
55
  return {
50
56
  metadata: {
@@ -55,6 +61,8 @@ export class DsymApi extends BaseApi {
55
61
  repoName: repoName || '',
56
62
  commitHash: commitHash || '',
57
63
  orgName: orgName || '',
64
+ internalVersion: internalVersion ?? 0,
65
+ mergedVersions: mergedVersions ? { versions: mergedVersions } : undefined,
58
66
  },
59
67
  },
60
68
  };
@@ -24,6 +24,8 @@ export class ProguardApi extends BaseApi {
24
24
  repoName?: string,
25
25
  commitHash?: string,
26
26
  orgName?: string,
27
+ internalVersion?: number,
28
+ mergedVersions?: number[],
27
29
  ): ReleaseEntityMetadata {
28
30
  return {
29
31
  metadata: {
@@ -34,6 +36,8 @@ export class ProguardApi extends BaseApi {
34
36
  repoName: repoName || '',
35
37
  commitHash: commitHash || '',
36
38
  orgName: orgName || '',
39
+ internalVersion: internalVersion ?? 0,
40
+ mergedVersions: mergedVersions ? { versions: mergedVersions } : undefined,
37
41
  },
38
42
  },
39
43
  };
@@ -45,6 +49,8 @@ export class ProguardApi extends BaseApi {
45
49
  repoName?: string,
46
50
  commitHash?: string,
47
51
  orgName?: string,
52
+ internalVersion?: number,
53
+ mergedVersions?: number[],
48
54
  ): EntityMetadata {
49
55
  return {
50
56
  metadata: {
@@ -55,6 +61,8 @@ export class ProguardApi extends BaseApi {
55
61
  repoName: repoName || '',
56
62
  commitHash: commitHash || '',
57
63
  orgName: orgName || '',
64
+ internalVersion: internalVersion ?? 0,
65
+ mergedVersions: mergedVersions ? { versions: mergedVersions } : undefined,
58
66
  },
59
67
  },
60
68
  };
@@ -24,6 +24,8 @@ export class ReactNativeApi extends BaseApi {
24
24
  repoName?: string,
25
25
  commitHash?: string,
26
26
  orgName?: string,
27
+ internalVersion?: number,
28
+ mergedVersions?: number[],
27
29
  ): ReleaseEntityMetadata {
28
30
  return {
29
31
  metadata: {
@@ -34,6 +36,8 @@ export class ReactNativeApi extends BaseApi {
34
36
  repoName: repoName || '',
35
37
  commitHash: commitHash || '',
36
38
  orgName: orgName || '',
39
+ internalVersion: internalVersion ?? 0,
40
+ mergedVersions: mergedVersions ? { versions: mergedVersions } : undefined,
37
41
  },
38
42
  },
39
43
  };
@@ -45,6 +49,8 @@ export class ReactNativeApi extends BaseApi {
45
49
  repoName?: string,
46
50
  commitHash?: string,
47
51
  orgName?: string,
52
+ internalVersion?: number,
53
+ mergedVersions?: number[],
48
54
  ): EntityMetadata {
49
55
  return {
50
56
  metadata: {
@@ -55,6 +61,8 @@ export class ReactNativeApi extends BaseApi {
55
61
  repoName: repoName || '',
56
62
  commitHash: commitHash || '',
57
63
  orgName: orgName || '',
64
+ internalVersion: internalVersion ?? 0,
65
+ mergedVersions: mergedVersions ? { versions: mergedVersions } : undefined,
58
66
  },
59
67
  },
60
68
  };
@@ -24,6 +24,8 @@ export class SourceMapsApi extends BaseApi {
24
24
  repoName?: string,
25
25
  commitHash?: string,
26
26
  orgName?: string,
27
+ internalVersion?: number,
28
+ mergedVersions?: number[],
27
29
  ): ReleaseEntityMetadata {
28
30
  return {
29
31
  metadata: {
@@ -34,6 +36,8 @@ export class SourceMapsApi extends BaseApi {
34
36
  repoName: repoName || '',
35
37
  commitHash: commitHash || '',
36
38
  orgName: orgName || '',
39
+ internalVersion: internalVersion ?? 0,
40
+ mergedVersions: mergedVersions ? { versions: mergedVersions } : undefined,
37
41
  },
38
42
  },
39
43
  };
@@ -45,6 +49,8 @@ export class SourceMapsApi extends BaseApi {
45
49
  repoName?: string,
46
50
  commitHash?: string,
47
51
  orgName?: string,
52
+ internalVersion?: number,
53
+ mergedVersions?: number[],
48
54
  ): EntityMetadata {
49
55
  return {
50
56
  metadata: {
@@ -55,6 +61,8 @@ export class SourceMapsApi extends BaseApi {
55
61
  repoName: repoName || '',
56
62
  commitHash: commitHash || '',
57
63
  orgName: orgName || '',
64
+ internalVersion: internalVersion ?? 0,
65
+ mergedVersions: mergedVersions ? { versions: mergedVersions } : undefined,
58
66
  },
59
67
  },
60
68
  };
@@ -14,6 +14,8 @@ export const uploadDsymCommand = () => {
14
14
  .option('-c, --commit-hash <commitHash>', 'GitHub commit hash (optional)')
15
15
  .option('-n, --repo-name <repoName>', 'GitHub Repository name (optional)')
16
16
  .option('-o, --org-name <orgName>', 'GitHub user name (optional)')
17
+ .option('--override', 'Override existing dsym (optional)')
18
+ .option('--merge', 'Merge with existing dsym (optional)')
17
19
  .description('Upload Dsym')
18
20
  .action(async (options: UploadDsymCommandOptions) => {
19
21
  try {
@@ -22,13 +24,13 @@ export const uploadDsymCommand = () => {
22
24
  process.exit(0);
23
25
  }
24
26
 
25
- const { privateKey, application, version, folderPath, commitHash, repoName, orgName, env } = options;
27
+ const { privateKey, application, version, folderPath, commitHash, repoName, orgName, env, override, merge } = options;
26
28
 
27
29
  checkMissingArguments<UploadDsymCommandOptions>(options, ['privateKey', 'application', 'version', 'folderPath', 'env']);
28
30
 
29
31
  const service: DsymService = new DsymService();
30
32
 
31
- await service.upload(application, version, repoName, commitHash, orgName, folderPath, env, privateKey);
33
+ await service.upload(application, version, repoName, commitHash, orgName, folderPath, env, privateKey, override, merge);
32
34
  } catch (error) {
33
35
  consoleError(error);
34
36
  }
@@ -14,6 +14,8 @@ export const uploadProguardCommand = () => {
14
14
  .option('-c, --commit-hash <commitHash>', 'GitHub commit hash (optional)')
15
15
  .option('-n, --repo-name <repoName>', 'GitHub Repository name (optional)')
16
16
  .option('-o, --org-name <orgName>', 'GitHub user name (optional)')
17
+ .option('--override', 'Override existing proguard mapping (optional)')
18
+ .option('--merge', 'Merge with existing proguard mapping (optional)')
17
19
  .description('Upload Proguard mapping file')
18
20
  .action(async (options: UploadProguardCommandOptions) => {
19
21
  try {
@@ -22,13 +24,13 @@ export const uploadProguardCommand = () => {
22
24
  process.exit(0);
23
25
  }
24
26
 
25
- const { privateKey, application, version, folderPath, commitHash, repoName, orgName, env } = options;
27
+ const { privateKey, application, version, folderPath, commitHash, repoName, orgName, env, override, merge } = options;
26
28
 
27
29
  checkMissingArguments<UploadProguardCommandOptions>(options, ['privateKey', 'application', 'version', 'folderPath', 'env']);
28
30
 
29
31
  const service: ProguardService = new ProguardService();
30
32
 
31
- await service.upload(application, version, repoName, commitHash, orgName, folderPath, env, privateKey);
33
+ await service.upload(application, version, repoName, commitHash, orgName, folderPath, env, privateKey, override, merge);
32
34
  } catch (error) {
33
35
  consoleError(error);
34
36
  }
@@ -14,6 +14,8 @@ export const uploadReactNativeSourceMapsCommand = () => {
14
14
  .option('-c, --commit-hash <commitHash>', 'GitHub commit hash (optional)')
15
15
  .option('-n, --repo-name <repoName>', 'GitHub Repository name (optional)')
16
16
  .option('-o, --org-name <orgName>', 'GitHub user name (optional)')
17
+ .option('--override', 'Override existing source maps (optional)')
18
+ .option('--merge', 'Merge with existing source maps (optional)')
17
19
  .description('Upload react native source maps')
18
20
  .action(async (options: UploadReactNativeSourceMapsCommandOptions) => {
19
21
  try {
@@ -22,7 +24,7 @@ export const uploadReactNativeSourceMapsCommand = () => {
22
24
  process.exit(0);
23
25
  }
24
26
 
25
- const { privateKey, application, version, folderPath, commitHash, repoName, orgName, env } = options;
27
+ const { privateKey, application, version, folderPath, commitHash, repoName, orgName, env, override, merge } = options;
26
28
 
27
29
  checkMissingArguments<UploadReactNativeSourceMapsCommandOptions>(options, [
28
30
  'privateKey',
@@ -34,7 +36,7 @@ export const uploadReactNativeSourceMapsCommand = () => {
34
36
 
35
37
  const service: ReactNativeService = new ReactNativeService();
36
38
 
37
- await service.upload(application, version, repoName, commitHash, orgName, folderPath, env, privateKey);
39
+ await service.upload(application, version, repoName, commitHash, orgName, folderPath, env, privateKey, override, merge);
38
40
  } catch (error) {
39
41
  consoleError(error);
40
42
  }
@@ -14,6 +14,8 @@ export const uploadSourceMapsCommand = () => {
14
14
  .option('-c, --commit-hash <commitHash>', 'GitHub commit hash (optional)')
15
15
  .option('-n, --repo-name <repoName>', 'GitHub Repository name (optional)')
16
16
  .option('-o, --org-name <orgName>', 'GitHub user name (optional)')
17
+ .option('--override', 'Override existing source maps (optional)')
18
+ .option('--merge', 'Merge with existing source maps (optional)')
17
19
  .description('Update source maps')
18
20
  .action(async (options: UploadSourceMapsCommandOptions) => {
19
21
  try {
@@ -22,13 +24,13 @@ export const uploadSourceMapsCommand = () => {
22
24
  process.exit(0);
23
25
  }
24
26
 
25
- const { privateKey, application, version, folderPath, commitHash, repoName, orgName, env } = options;
27
+ const { privateKey, application, version, folderPath, commitHash, repoName, orgName, env, override, merge } = options;
26
28
 
27
29
  checkMissingArguments<UploadSourceMapsCommandOptions>(options, ['privateKey', 'application', 'version', 'folderPath', 'env']);
28
30
 
29
31
  const service: SourceMapsService = new SourceMapsService();
30
32
 
31
- await service.upload(application, version, repoName, commitHash, orgName, folderPath, env, privateKey);
33
+ await service.upload(application, version, repoName, commitHash, orgName, folderPath, env, privateKey, override, merge);
32
34
  } catch (error) {
33
35
  consoleError(error);
34
36
  }
package/consts/consts.ts CHANGED
@@ -16,4 +16,5 @@ export const envToDomain: Record<string, string> = {
16
16
  AP1: 'https://ng-api-grpc.app.coralogix.in:443', // ap-south-1 (Mumbai)
17
17
  AP2: 'https://ng-api-grpc.coralogixsg.com:443', // ap-southeast-1 (Singapore)
18
18
  AP3: 'https://ng-api-grpc.ap3.coralogix.com:443', // ap-southeast-3 (Jakarta)
19
+ STG: 'https://ng-api-grpc.app.staging.coralogix.net:443',
19
20
  };
@@ -1,17 +1,18 @@
1
- import { UploadBlobRequest } from '../../proto-models/com/coralogix/blobset/v2/blobset_service';
1
+ import { Client, Metadata } from 'nice-grpc';
2
+ import { BlobSetServiceDefinition, UploadBlobRequest } from '../../proto-models/com/coralogix/blobset/v2/blobset_service';
3
+ import { RumSourceMapServiceDefinition } from '../../proto-models/com/coralogix/rum/v2/rum_source_map_service';
2
4
  import { EntityType } from '../../proto-models/com/coralogix/blobset/v2/entity_type';
3
5
  import { ReleaseEntityType } from '../../proto-models/com/coralogix/rum/v2/release_entity_type';
4
- import { EntityMetadata } from '../../proto-models/com/coralogix/blobset/v2/entity_metadata';
5
6
  import { ReleaseEntityMetadata } from '../../proto-models/com/coralogix/rum/v2/release_entity_metadata';
7
+ import { EntityMetadata } from '../../proto-models/com/coralogix/blobset/v2/entity_metadata';
6
8
  export declare abstract class BaseApi {
7
9
  protected abstract getEntityType(): EntityType;
8
10
  protected abstract getReleaseEntityType(): ReleaseEntityType;
9
11
  protected abstract getMaxCompressedFileSize(): number;
10
- protected abstract buildReleaseEntityMetadata(application: string, version: string, repoName?: string, commitHash?: string, orgName?: string): ReleaseEntityMetadata;
11
- protected abstract buildEntityMetadata(application: string, version: string, repoName?: string, commitHash?: string, orgName?: string): EntityMetadata;
12
- private uploadBlob;
13
- private createEntityRelease;
14
- private createGrpcMetadata;
15
- private checkEntityReleaseExists;
16
- upload(request: UploadBlobRequest, application: string, version: string, repoName: string | undefined, commitHash: string | undefined, orgName: string | undefined, env: string, privateKey: string): Promise<void>;
12
+ protected abstract buildReleaseEntityMetadata(application: string, version: string, repoName?: string, commitHash?: string, orgName?: string, internalVersion?: number, mergedVersions?: number[]): ReleaseEntityMetadata;
13
+ protected abstract buildEntityMetadata(application: string, version: string, repoName?: string, commitHash?: string, orgName?: string, internalVersion?: number, mergedVersions?: number[]): EntityMetadata;
14
+ protected uploadBlob(blobSetClient: Client<typeof BlobSetServiceDefinition>, request: UploadBlobRequest, entityMetadata: EntityMetadata | undefined, metadata: Metadata): Promise<void>;
15
+ protected createEntityRelease(rumClient: Client<typeof RumSourceMapServiceDefinition>, releaseEntityMetadata: ReleaseEntityMetadata | undefined, metadata: Metadata): Promise<void>;
16
+ protected createGrpcMetadata(privateKey: string): Metadata;
17
+ upload(request: UploadBlobRequest, application: string, version: string, repoName: string | undefined, commitHash: string | undefined, orgName: string | undefined, env: string, privateKey: string, override?: boolean, merge?: boolean): Promise<void>;
17
18
  }
@@ -13,6 +13,7 @@ exports.BaseApi = void 0;
13
13
  const nice_grpc_1 = require("nice-grpc");
14
14
  const shared_utils_1 = require("../../utils/shared.utils");
15
15
  const grpc_client_factory_1 = require("../../grpc-client/grpc-client-factory");
16
+ const version_context_utils_1 = require("../../utils/version-context.utils");
16
17
  class BaseApi {
17
18
  uploadBlob(blobSetClient, request, entityMetadata, metadata) {
18
19
  return __awaiter(this, void 0, void 0, function* () {
@@ -22,13 +23,13 @@ class BaseApi {
22
23
  yield blobSetClient.uploadBlob(iterableRequest, { metadata });
23
24
  });
24
25
  }
25
- createEntityRelease(rumSourceMapClient, releaseEntityMetadata, metadata) {
26
+ createEntityRelease(rumClient, releaseEntityMetadata, metadata) {
26
27
  return __awaiter(this, void 0, void 0, function* () {
27
28
  const request = {
28
29
  releaseEntityType: this.getReleaseEntityType(),
29
30
  releaseEntityMetadata,
30
31
  };
31
- yield rumSourceMapClient.createEntityRelease(request, { metadata });
32
+ yield rumClient.createEntityRelease(request, { metadata });
32
33
  });
33
34
  }
34
35
  createGrpcMetadata(privateKey) {
@@ -36,41 +37,26 @@ class BaseApi {
36
37
  metadata.set('Authorization', `Bearer ${privateKey}`);
37
38
  return metadata;
38
39
  }
39
- checkEntityReleaseExists(rumSourceMapClient, application, version, metadata) {
40
+ upload(request, application, version, repoName, commitHash, orgName, env, privateKey, override = false, merge = false) {
40
41
  return __awaiter(this, void 0, void 0, function* () {
41
- try {
42
- const { exists } = yield rumSourceMapClient.isEntityReleaseExists({ releaseId: version, application, releaseEntityType: this.getReleaseEntityType() }, { metadata });
43
- return exists;
44
- }
45
- catch (error) {
46
- if (error instanceof nice_grpc_1.ClientError && error.code === nice_grpc_1.Status.PERMISSION_DENIED) {
47
- throw new Error(`Permission denied while checking entity release. Verify that your private key is correct. Details: ${error.message}`);
48
- }
49
- throw error;
50
- }
51
- });
52
- }
53
- upload(request, application, version, repoName, commitHash, orgName, env, privateKey) {
54
- return __awaiter(this, void 0, void 0, function* () {
55
- const metadata = this.createGrpcMetadata(privateKey);
42
+ const grpcMetadata = this.createGrpcMetadata(privateKey);
56
43
  const blobSetClient = grpc_client_factory_1.GrpcClientFactory.getBlobSetGrpcClient(env, this.getMaxCompressedFileSize());
57
- const rumSourceMapClient = grpc_client_factory_1.GrpcClientFactory.getRumSourceMapGrpcClient(env, this.getMaxCompressedFileSize());
58
- try {
59
- (0, shared_utils_1.validateCompressedFilesSize)(request.data.length, this.getMaxCompressedFileSize());
60
- const releaseExists = yield this.checkEntityReleaseExists(rumSourceMapClient, application, version, metadata);
61
- if (releaseExists) {
62
- throw new Error(`Entity release already exists for releaseId: ${version} and application: ${application}`);
63
- }
64
- const releaseEntityMetadata = this.buildReleaseEntityMetadata(application, version, repoName, commitHash, orgName);
65
- const entityMetadata = this.buildEntityMetadata(application, version, repoName, commitHash, orgName);
66
- yield this.uploadBlob(blobSetClient, request, entityMetadata, metadata);
67
- yield this.createEntityRelease(rumSourceMapClient, releaseEntityMetadata, metadata);
68
- }
69
- catch (error) {
70
- throw error;
71
- }
44
+ const rumClient = grpc_client_factory_1.GrpcClientFactory.getRumSourceMapGrpcClient(env, this.getMaxCompressedFileSize());
45
+ (0, shared_utils_1.validateCompressedFilesSize)(request.data.length, this.getMaxCompressedFileSize());
46
+ const { internalVersion, mergedVersions } = yield (0, version_context_utils_1.getVersionContext)({
47
+ client: rumClient,
48
+ application,
49
+ version,
50
+ releaseEntityType: this.getReleaseEntityType(),
51
+ metadata: grpcMetadata,
52
+ flags: { override, merge },
53
+ });
54
+ const releaseEntityMetadata = this.buildReleaseEntityMetadata(application, version, repoName, commitHash, orgName, internalVersion, mergedVersions);
55
+ const entityMetadata = this.buildEntityMetadata(application, version, repoName, commitHash, orgName, internalVersion, mergedVersions);
56
+ yield this.uploadBlob(blobSetClient, request, entityMetadata, grpcMetadata);
57
+ yield this.createEntityRelease(rumClient, releaseEntityMetadata, grpcMetadata);
72
58
  });
73
59
  }
74
60
  }
75
61
  exports.BaseApi = BaseApi;
76
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiYmFzZS5hcGkuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi9hcGkvYmFzZS9iYXNlLmFwaS50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiOzs7Ozs7Ozs7Ozs7QUFBQSx5Q0FBa0U7QUFFbEUsMkRBQW9IO0FBQ3BILCtFQUEwRTtBQU8xRSxNQUFzQixPQUFPO0lBbUJiLFVBQVUsQ0FDdEIsYUFBc0QsRUFDdEQsT0FBMEIsRUFDMUIsY0FBMEMsRUFDMUMsUUFBa0I7O1lBRWxCLE9BQU8sQ0FBQyxjQUFjLEdBQUcsY0FBYyxDQUFDO1lBQ3hDLE9BQU8sQ0FBQyxVQUFVLEdBQUcsSUFBSSxDQUFDLGFBQWEsRUFBRSxDQUFDO1lBRTFDLE1BQU0sZUFBZSxHQUFHLElBQUEsNENBQTZCLEVBQUMsT0FBTyxDQUFDLENBQUM7WUFFL0QsTUFBTSxhQUFhLENBQUMsVUFBVSxDQUFDLGVBQWUsRUFBRSxFQUFFLFFBQVEsRUFBRSxDQUFDLENBQUM7UUFDaEUsQ0FBQztLQUFBO0lBRWEsbUJBQW1CLENBQy9CLGtCQUFnRSxFQUNoRSxxQkFBd0QsRUFDeEQsUUFBa0I7O1lBRWxCLE1BQU0sT0FBTyxHQUErQjtnQkFDMUMsaUJBQWlCLEVBQUUsSUFBSSxDQUFDLG9CQUFvQixFQUFFO2dCQUM5QyxxQkFBcUI7YUFDdEIsQ0FBQztZQUVGLE1BQU0sa0JBQWtCLENBQUMsbUJBQW1CLENBQUMsT0FBTyxFQUFFLEVBQUUsUUFBUSxFQUFFLENBQUMsQ0FBQztRQUN0RSxDQUFDO0tBQUE7SUFFTyxrQkFBa0IsQ0FBQyxVQUFrQjtRQUMzQyxNQUFNLFFBQVEsR0FBYSxJQUFJLG9CQUFRLEVBQUUsQ0FBQztRQUMxQyxRQUFRLENBQUMsR0FBRyxDQUFDLGVBQWUsRUFBRSxVQUFVLFVBQVUsRUFBRSxDQUFDLENBQUM7UUFDdEQsT0FBTyxRQUFRLENBQUM7SUFDbEIsQ0FBQztJQUVhLHdCQUF3QixDQUNwQyxrQkFBZ0UsRUFDaEUsV0FBbUIsRUFDbkIsT0FBZSxFQUNmLFFBQWtCOztZQUVsQixJQUFJO2dCQUNGLE1BQU0sRUFBRSxNQUFNLEVBQUUsR0FBRyxNQUFNLGtCQUFrQixDQUFDLHFCQUFxQixDQUMvRCxFQUFFLFNBQVMsRUFBRSxPQUFPLEVBQUUsV0FBVyxFQUFFLGlCQUFpQixFQUFFLElBQUksQ0FBQyxvQkFBb0IsRUFBRSxFQUFFLEVBQ25GLEVBQUUsUUFBUSxFQUFFLENBQ2IsQ0FBQztnQkFDRixPQUFPLE1BQU0sQ0FBQzthQUNmO1lBQUMsT0FBTyxLQUFLLEVBQUU7Z0JBQ2QsSUFBSSxLQUFLLFlBQVksdUJBQVcsSUFBSSxLQUFLLENBQUMsSUFBSSxLQUFLLGtCQUFNLENBQUMsaUJBQWlCLEVBQUU7b0JBQzNFLE1BQU0sSUFBSSxLQUFLLENBQ2Isc0dBQXNHLEtBQUssQ0FBQyxPQUFPLEVBQUUsQ0FDdEgsQ0FBQztpQkFDSDtnQkFDRCxNQUFNLEtBQUssQ0FBQzthQUNiO1FBQ0gsQ0FBQztLQUFBO0lBRVksTUFBTSxDQUNqQixPQUEwQixFQUMxQixXQUFtQixFQUNuQixPQUFlLEVBQ2YsUUFBNEIsRUFDNUIsVUFBOEIsRUFDOUIsT0FBMkIsRUFDM0IsR0FBVyxFQUNYLFVBQWtCOztZQUVsQixNQUFNLFFBQVEsR0FBYSxJQUFJLENBQUMsa0JBQWtCLENBQUMsVUFBVSxDQUFDLENBQUM7WUFDL0QsTUFBTSxhQUFhLEdBQUcsdUNBQWlCLENBQUMsb0JBQW9CLENBQUMsR0FBRyxFQUFFLElBQUksQ0FBQyx3QkFBd0IsRUFBRSxDQUFDLENBQUM7WUFDbkcsTUFBTSxrQkFBa0IsR0FBRyx1Q0FBaUIsQ0FBQyx5QkFBeUIsQ0FBQyxHQUFHLEVBQUUsSUFBSSxDQUFDLHdCQUF3QixFQUFFLENBQUMsQ0FBQztZQUU3RyxJQUFJO2dCQUNGLElBQUEsMENBQTJCLEVBQUMsT0FBTyxDQUFDLElBQUksQ0FBQyxNQUFNLEVBQUUsSUFBSSxDQUFDLHdCQUF3QixFQUFFLENBQUMsQ0FBQztnQkFFbEYsTUFBTSxhQUFhLEdBQVksTUFBTSxJQUFJLENBQUMsd0JBQXdCLENBQUMsa0JBQWtCLEVBQUUsV0FBVyxFQUFFLE9BQU8sRUFBRSxRQUFRLENBQUMsQ0FBQztnQkFFdkgsSUFBSSxhQUFhLEVBQUU7b0JBQ2pCLE1BQU0sSUFBSSxLQUFLLENBQUMsZ0RBQWdELE9BQU8scUJBQXFCLFdBQVcsRUFBRSxDQUFDLENBQUM7aUJBQzVHO2dCQUVELE1BQU0scUJBQXFCLEdBQTBCLElBQUksQ0FBQywwQkFBMEIsQ0FDbEYsV0FBVyxFQUNYLE9BQU8sRUFDUCxRQUFRLEVBQ1IsVUFBVSxFQUNWLE9BQU8sQ0FDUixDQUFDO2dCQUVGLE1BQU0sY0FBYyxHQUFtQixJQUFJLENBQUMsbUJBQW1CLENBQUMsV0FBVyxFQUFFLE9BQU8sRUFBRSxRQUFRLEVBQUUsVUFBVSxFQUFFLE9BQU8sQ0FBQyxDQUFDO2dCQUVySCxNQUFNLElBQUksQ0FBQyxVQUFVLENBQUMsYUFBYSxFQUFFLE9BQU8sRUFBRSxjQUFjLEVBQUUsUUFBUSxDQUFDLENBQUM7Z0JBRXhFLE1BQU0sSUFBSSxDQUFDLG1CQUFtQixDQUFDLGtCQUFrQixFQUFFLHFCQUFxQixFQUFFLFFBQVEsQ0FBQyxDQUFDO2FBQ3JGO1lBQUMsT0FBTyxLQUFLLEVBQUU7Z0JBQ2QsTUFBTSxLQUFLLENBQUM7YUFDYjtRQUNILENBQUM7S0FBQTtDQUNGO0FBbEhELDBCQWtIQyIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IENsaWVudCwgQ2xpZW50RXJyb3IsIE1ldGFkYXRhLCBTdGF0dXMgfSBmcm9tICduaWNlLWdycGMnO1xuaW1wb3J0IHsgQmxvYlNldFNlcnZpY2VEZWZpbml0aW9uLCBVcGxvYWRCbG9iUmVxdWVzdCB9IGZyb20gJy4uLy4uL3Byb3RvLW1vZGVscy9jb20vY29yYWxvZ2l4L2Jsb2JzZXQvdjIvYmxvYnNldF9zZXJ2aWNlJztcbmltcG9ydCB7IGNvbnNvbGVFcnJvciwgY3JlYXRlVXBsb2FkQmxvYlJlcXVlc3RDaHVua3MsIHZhbGlkYXRlQ29tcHJlc3NlZEZpbGVzU2l6ZSB9IGZyb20gJy4uLy4uL3V0aWxzL3NoYXJlZC51dGlscyc7XG5pbXBvcnQgeyBHcnBjQ2xpZW50RmFjdG9yeSB9IGZyb20gJy4uLy4uL2dycGMtY2xpZW50L2dycGMtY2xpZW50LWZhY3RvcnknO1xuaW1wb3J0IHsgQ3JlYXRlRW50aXR5UmVsZWFzZVJlcXVlc3QsIFJ1bVNvdXJjZU1hcFNlcnZpY2VEZWZpbml0aW9uIH0gZnJvbSAnLi4vLi4vcHJvdG8tbW9kZWxzL2NvbS9jb3JhbG9naXgvcnVtL3YyL3J1bV9zb3VyY2VfbWFwX3NlcnZpY2UnO1xuaW1wb3J0IHsgRW50aXR5VHlwZSB9IGZyb20gJy4uLy4uL3Byb3RvLW1vZGVscy9jb20vY29yYWxvZ2l4L2Jsb2JzZXQvdjIvZW50aXR5X3R5cGUnO1xuaW1wb3J0IHsgUmVsZWFzZUVudGl0eVR5cGUgfSBmcm9tICcuLi8uLi9wcm90by1tb2RlbHMvY29tL2NvcmFsb2dpeC9ydW0vdjIvcmVsZWFzZV9lbnRpdHlfdHlwZSc7XG5pbXBvcnQgeyBFbnRpdHlNZXRhZGF0YSB9IGZyb20gJy4uLy4uL3Byb3RvLW1vZGVscy9jb20vY29yYWxvZ2l4L2Jsb2JzZXQvdjIvZW50aXR5X21ldGFkYXRhJztcbmltcG9ydCB7IFJlbGVhc2VFbnRpdHlNZXRhZGF0YSB9IGZyb20gJy4uLy4uL3Byb3RvLW1vZGVscy9jb20vY29yYWxvZ2l4L3J1bS92Mi9yZWxlYXNlX2VudGl0eV9tZXRhZGF0YSc7XG5cbmV4cG9ydCBhYnN0cmFjdCBjbGFzcyBCYXNlQXBpIHtcbiAgcHJvdGVjdGVkIGFic3RyYWN0IGdldEVudGl0eVR5cGUoKTogRW50aXR5VHlwZTtcbiAgcHJvdGVjdGVkIGFic3RyYWN0IGdldFJlbGVhc2VFbnRpdHlUeXBlKCk6IFJlbGVhc2VFbnRpdHlUeXBlO1xuICBwcm90ZWN0ZWQgYWJzdHJhY3QgZ2V0TWF4Q29tcHJlc3NlZEZpbGVTaXplKCk6IG51bWJlcjtcbiAgcHJvdGVjdGVkIGFic3RyYWN0IGJ1aWxkUmVsZWFzZUVudGl0eU1ldGFkYXRhKFxuICAgIGFwcGxpY2F0aW9uOiBzdHJpbmcsXG4gICAgdmVyc2lvbjogc3RyaW5nLFxuICAgIHJlcG9OYW1lPzogc3RyaW5nLFxuICAgIGNvbW1pdEhhc2g/OiBzdHJpbmcsXG4gICAgb3JnTmFtZT86IHN0cmluZyxcbiAgKTogUmVsZWFzZUVudGl0eU1ldGFkYXRhO1xuICBwcm90ZWN0ZWQgYWJzdHJhY3QgYnVpbGRFbnRpdHlNZXRhZGF0YShcbiAgICBhcHBsaWNhdGlvbjogc3RyaW5nLFxuICAgIHZlcnNpb246IHN0cmluZyxcbiAgICByZXBvTmFtZT86IHN0cmluZyxcbiAgICBjb21taXRIYXNoPzogc3RyaW5nLFxuICAgIG9yZ05hbWU/OiBzdHJpbmcsXG4gICk6IEVudGl0eU1ldGFkYXRhO1xuXG4gIHByaXZhdGUgYXN5bmMgdXBsb2FkQmxvYihcbiAgICBibG9iU2V0Q2xpZW50OiBDbGllbnQ8dHlwZW9mIEJsb2JTZXRTZXJ2aWNlRGVmaW5pdGlvbj4sXG4gICAgcmVxdWVzdDogVXBsb2FkQmxvYlJlcXVlc3QsXG4gICAgZW50aXR5TWV0YWRhdGE6IEVudGl0eU1ldGFkYXRhIHwgdW5kZWZpbmVkLFxuICAgIG1ldGFkYXRhOiBNZXRhZGF0YSxcbiAgKTogUHJvbWlzZTx2b2lkPiB7XG4gICAgcmVxdWVzdC5lbnRpdHlNZXRhZGF0YSA9IGVudGl0eU1ldGFkYXRhO1xuICAgIHJlcXVlc3QuZW50aXR5VHlwZSA9IHRoaXMuZ2V0RW50aXR5VHlwZSgpO1xuXG4gICAgY29uc3QgaXRlcmFibGVSZXF1ZXN0ID0gY3JlYXRlVXBsb2FkQmxvYlJlcXVlc3RDaHVua3MocmVxdWVzdCk7XG5cbiAgICBhd2FpdCBibG9iU2V0Q2xpZW50LnVwbG9hZEJsb2IoaXRlcmFibGVSZXF1ZXN0LCB7IG1ldGFkYXRhIH0pO1xuICB9XG5cbiAgcHJpdmF0ZSBhc3luYyBjcmVhdGVFbnRpdHlSZWxlYXNlKFxuICAgIHJ1bVNvdXJjZU1hcENsaWVudDogQ2xpZW50PHR5cGVvZiBSdW1Tb3VyY2VNYXBTZXJ2aWNlRGVmaW5pdGlvbj4sXG4gICAgcmVsZWFzZUVudGl0eU1ldGFkYXRhOiBSZWxlYXNlRW50aXR5TWV0YWRhdGEgfCB1bmRlZmluZWQsXG4gICAgbWV0YWRhdGE6IE1ldGFkYXRhLFxuICApOiBQcm9taXNlPHZvaWQ+IHtcbiAgICBjb25zdCByZXF1ZXN0OiBDcmVhdGVFbnRpdHlSZWxlYXNlUmVxdWVzdCA9IHtcbiAgICAgIHJlbGVhc2VFbnRpdHlUeXBlOiB0aGlzLmdldFJlbGVhc2VFbnRpdHlUeXBlKCksXG4gICAgICByZWxlYXNlRW50aXR5TWV0YWRhdGEsXG4gICAgfTtcblxuICAgIGF3YWl0IHJ1bVNvdXJjZU1hcENsaWVudC5jcmVhdGVFbnRpdHlSZWxlYXNlKHJlcXVlc3QsIHsgbWV0YWRhdGEgfSk7XG4gIH1cblxuICBwcml2YXRlIGNyZWF0ZUdycGNNZXRhZGF0YShwcml2YXRlS2V5OiBzdHJpbmcpOiBNZXRhZGF0YSB7XG4gICAgY29uc3QgbWV0YWRhdGE6IE1ldGFkYXRhID0gbmV3IE1ldGFkYXRhKCk7XG4gICAgbWV0YWRhdGEuc2V0KCdBdXRob3JpemF0aW9uJywgYEJlYXJlciAke3ByaXZhdGVLZXl9YCk7XG4gICAgcmV0dXJuIG1ldGFkYXRhO1xuICB9XG5cbiAgcHJpdmF0ZSBhc3luYyBjaGVja0VudGl0eVJlbGVhc2VFeGlzdHMoXG4gICAgcnVtU291cmNlTWFwQ2xpZW50OiBDbGllbnQ8dHlwZW9mIFJ1bVNvdXJjZU1hcFNlcnZpY2VEZWZpbml0aW9uPixcbiAgICBhcHBsaWNhdGlvbjogc3RyaW5nLFxuICAgIHZlcnNpb246IHN0cmluZyxcbiAgICBtZXRhZGF0YTogTWV0YWRhdGEsXG4gICk6IFByb21pc2U8Ym9vbGVhbj4ge1xuICAgIHRyeSB7XG4gICAgICBjb25zdCB7IGV4aXN0cyB9ID0gYXdhaXQgcnVtU291cmNlTWFwQ2xpZW50LmlzRW50aXR5UmVsZWFzZUV4aXN0cyhcbiAgICAgICAgeyByZWxlYXNlSWQ6IHZlcnNpb24sIGFwcGxpY2F0aW9uLCByZWxlYXNlRW50aXR5VHlwZTogdGhpcy5nZXRSZWxlYXNlRW50aXR5VHlwZSgpIH0sXG4gICAgICAgIHsgbWV0YWRhdGEgfSxcbiAgICAgICk7XG4gICAgICByZXR1cm4gZXhpc3RzO1xuICAgIH0gY2F0Y2ggKGVycm9yKSB7XG4gICAgICBpZiAoZXJyb3IgaW5zdGFuY2VvZiBDbGllbnRFcnJvciAmJiBlcnJvci5jb2RlID09PSBTdGF0dXMuUEVSTUlTU0lPTl9ERU5JRUQpIHtcbiAgICAgICAgdGhyb3cgbmV3IEVycm9yKFxuICAgICAgICAgIGBQZXJtaXNzaW9uIGRlbmllZCB3aGlsZSBjaGVja2luZyBlbnRpdHkgcmVsZWFzZS4gVmVyaWZ5IHRoYXQgeW91ciBwcml2YXRlIGtleSBpcyBjb3JyZWN0LiBEZXRhaWxzOiAke2Vycm9yLm1lc3NhZ2V9YCxcbiAgICAgICAgKTtcbiAgICAgIH1cbiAgICAgIHRocm93IGVycm9yO1xuICAgIH1cbiAgfVxuXG4gIHB1YmxpYyBhc3luYyB1cGxvYWQoXG4gICAgcmVxdWVzdDogVXBsb2FkQmxvYlJlcXVlc3QsXG4gICAgYXBwbGljYXRpb246IHN0cmluZyxcbiAgICB2ZXJzaW9uOiBzdHJpbmcsXG4gICAgcmVwb05hbWU6IHN0cmluZyB8IHVuZGVmaW5lZCxcbiAgICBjb21taXRIYXNoOiBzdHJpbmcgfCB1bmRlZmluZWQsXG4gICAgb3JnTmFtZTogc3RyaW5nIHwgdW5kZWZpbmVkLFxuICAgIGVudjogc3RyaW5nLFxuICAgIHByaXZhdGVLZXk6IHN0cmluZyxcbiAgKTogUHJvbWlzZTx2b2lkPiB7XG4gICAgY29uc3QgbWV0YWRhdGE6IE1ldGFkYXRhID0gdGhpcy5jcmVhdGVHcnBjTWV0YWRhdGEocHJpdmF0ZUtleSk7XG4gICAgY29uc3QgYmxvYlNldENsaWVudCA9IEdycGNDbGllbnRGYWN0b3J5LmdldEJsb2JTZXRHcnBjQ2xpZW50KGVudiwgdGhpcy5nZXRNYXhDb21wcmVzc2VkRmlsZVNpemUoKSk7XG4gICAgY29uc3QgcnVtU291cmNlTWFwQ2xpZW50ID0gR3JwY0NsaWVudEZhY3RvcnkuZ2V0UnVtU291cmNlTWFwR3JwY0NsaWVudChlbnYsIHRoaXMuZ2V0TWF4Q29tcHJlc3NlZEZpbGVTaXplKCkpO1xuXG4gICAgdHJ5IHtcbiAgICAgIHZhbGlkYXRlQ29tcHJlc3NlZEZpbGVzU2l6ZShyZXF1ZXN0LmRhdGEubGVuZ3RoLCB0aGlzLmdldE1heENvbXByZXNzZWRGaWxlU2l6ZSgpKTtcblxuICAgICAgY29uc3QgcmVsZWFzZUV4aXN0czogYm9vbGVhbiA9IGF3YWl0IHRoaXMuY2hlY2tFbnRpdHlSZWxlYXNlRXhpc3RzKHJ1bVNvdXJjZU1hcENsaWVudCwgYXBwbGljYXRpb24sIHZlcnNpb24sIG1ldGFkYXRhKTtcblxuICAgICAgaWYgKHJlbGVhc2VFeGlzdHMpIHtcbiAgICAgICAgdGhyb3cgbmV3IEVycm9yKGBFbnRpdHkgcmVsZWFzZSBhbHJlYWR5IGV4aXN0cyBmb3IgcmVsZWFzZUlkOiAke3ZlcnNpb259IGFuZCBhcHBsaWNhdGlvbjogJHthcHBsaWNhdGlvbn1gKTtcbiAgICAgIH1cblxuICAgICAgY29uc3QgcmVsZWFzZUVudGl0eU1ldGFkYXRhOiBSZWxlYXNlRW50aXR5TWV0YWRhdGEgPSB0aGlzLmJ1aWxkUmVsZWFzZUVudGl0eU1ldGFkYXRhKFxuICAgICAgICBhcHBsaWNhdGlvbixcbiAgICAgICAgdmVyc2lvbixcbiAgICAgICAgcmVwb05hbWUsXG4gICAgICAgIGNvbW1pdEhhc2gsXG4gICAgICAgIG9yZ05hbWUsXG4gICAgICApO1xuXG4gICAgICBjb25zdCBlbnRpdHlNZXRhZGF0YTogRW50aXR5TWV0YWRhdGEgPSB0aGlzLmJ1aWxkRW50aXR5TWV0YWRhdGEoYXBwbGljYXRpb24sIHZlcnNpb24sIHJlcG9OYW1lLCBjb21taXRIYXNoLCBvcmdOYW1lKTtcblxuICAgICAgYXdhaXQgdGhpcy51cGxvYWRCbG9iKGJsb2JTZXRDbGllbnQsIHJlcXVlc3QsIGVudGl0eU1ldGFkYXRhLCBtZXRhZGF0YSk7XG5cbiAgICAgIGF3YWl0IHRoaXMuY3JlYXRlRW50aXR5UmVsZWFzZShydW1Tb3VyY2VNYXBDbGllbnQsIHJlbGVhc2VFbnRpdHlNZXRhZGF0YSwgbWV0YWRhdGEpO1xuICAgIH0gY2F0Y2ggKGVycm9yKSB7XG4gICAgICB0aHJvdyBlcnJvcjtcbiAgICB9XG4gIH1cbn1cbiJdfQ==
62
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiYmFzZS5hcGkuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi9hcGkvYmFzZS9iYXNlLmFwaS50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiOzs7Ozs7Ozs7Ozs7QUFBQSx5Q0FBNkM7QUFFN0MsMkRBQXNHO0FBQ3RHLCtFQUEwRTtBQU0xRSw2RUFBc0U7QUFFdEUsTUFBc0IsT0FBTztJQXVCWCxVQUFVLENBQ3hCLGFBQXNELEVBQ3RELE9BQTBCLEVBQzFCLGNBQTBDLEVBQzFDLFFBQWtCOztZQUVsQixPQUFPLENBQUMsY0FBYyxHQUFHLGNBQWMsQ0FBQztZQUN4QyxPQUFPLENBQUMsVUFBVSxHQUFHLElBQUksQ0FBQyxhQUFhLEVBQUUsQ0FBQztZQUUxQyxNQUFNLGVBQWUsR0FBRyxJQUFBLDRDQUE2QixFQUFDLE9BQU8sQ0FBQyxDQUFDO1lBRS9ELE1BQU0sYUFBYSxDQUFDLFVBQVUsQ0FBQyxlQUFlLEVBQUUsRUFBRSxRQUFRLEVBQUUsQ0FBQyxDQUFDO1FBQ2hFLENBQUM7S0FBQTtJQUVlLG1CQUFtQixDQUNqQyxTQUF1RCxFQUN2RCxxQkFBd0QsRUFDeEQsUUFBa0I7O1lBRWxCLE1BQU0sT0FBTyxHQUErQjtnQkFDMUMsaUJBQWlCLEVBQUUsSUFBSSxDQUFDLG9CQUFvQixFQUFFO2dCQUM5QyxxQkFBcUI7YUFDdEIsQ0FBQztZQUVGLE1BQU0sU0FBUyxDQUFDLG1CQUFtQixDQUFDLE9BQU8sRUFBRSxFQUFFLFFBQVEsRUFBRSxDQUFDLENBQUM7UUFDN0QsQ0FBQztLQUFBO0lBRVMsa0JBQWtCLENBQUMsVUFBa0I7UUFDN0MsTUFBTSxRQUFRLEdBQWEsSUFBSSxvQkFBUSxFQUFFLENBQUM7UUFDMUMsUUFBUSxDQUFDLEdBQUcsQ0FBQyxlQUFlLEVBQUUsVUFBVSxVQUFVLEVBQUUsQ0FBQyxDQUFDO1FBQ3RELE9BQU8sUUFBUSxDQUFDO0lBQ2xCLENBQUM7SUFFWSxNQUFNLENBQ2pCLE9BQTBCLEVBQzFCLFdBQW1CLEVBQ25CLE9BQWUsRUFDZixRQUE0QixFQUM1QixVQUE4QixFQUM5QixPQUEyQixFQUMzQixHQUFXLEVBQ1gsVUFBa0IsRUFDbEIsUUFBUSxHQUFHLEtBQUssRUFDaEIsS0FBSyxHQUFHLEtBQUs7O1lBRWIsTUFBTSxZQUFZLEdBQWEsSUFBSSxDQUFDLGtCQUFrQixDQUFDLFVBQVUsQ0FBQyxDQUFDO1lBQ25FLE1BQU0sYUFBYSxHQUFHLHVDQUFpQixDQUFDLG9CQUFvQixDQUFDLEdBQUcsRUFBRSxJQUFJLENBQUMsd0JBQXdCLEVBQUUsQ0FBQyxDQUFDO1lBQ25HLE1BQU0sU0FBUyxHQUFHLHVDQUFpQixDQUFDLHlCQUF5QixDQUFDLEdBQUcsRUFBRSxJQUFJLENBQUMsd0JBQXdCLEVBQUUsQ0FBQyxDQUFDO1lBRXBHLElBQUEsMENBQTJCLEVBQUMsT0FBTyxDQUFDLElBQUksQ0FBQyxNQUFNLEVBQUUsSUFBSSxDQUFDLHdCQUF3QixFQUFFLENBQUMsQ0FBQztZQUVsRixNQUFNLEVBQUUsZUFBZSxFQUFFLGNBQWMsRUFBRSxHQUFHLE1BQU0sSUFBQSx5Q0FBaUIsRUFBQztnQkFDbEUsTUFBTSxFQUFFLFNBQVM7Z0JBQ2pCLFdBQVc7Z0JBQ1gsT0FBTztnQkFDUCxpQkFBaUIsRUFBRSxJQUFJLENBQUMsb0JBQW9CLEVBQUU7Z0JBQzlDLFFBQVEsRUFBRSxZQUFZO2dCQUN0QixLQUFLLEVBQUUsRUFBRSxRQUFRLEVBQUUsS0FBSyxFQUFFO2FBQzNCLENBQUMsQ0FBQztZQUNILE1BQU0scUJBQXFCLEdBQTBCLElBQUksQ0FBQywwQkFBMEIsQ0FDbEYsV0FBVyxFQUNYLE9BQU8sRUFDUCxRQUFRLEVBQ1IsVUFBVSxFQUNWLE9BQU8sRUFDUCxlQUFlLEVBQ2YsY0FBYyxDQUNmLENBQUM7WUFFRixNQUFNLGNBQWMsR0FBbUIsSUFBSSxDQUFDLG1CQUFtQixDQUM3RCxXQUFXLEVBQ1gsT0FBTyxFQUNQLFFBQVEsRUFDUixVQUFVLEVBQ1YsT0FBTyxFQUNQLGVBQWUsRUFDZixjQUFjLENBQ2YsQ0FBQztZQUVGLE1BQU0sSUFBSSxDQUFDLFVBQVUsQ0FBQyxhQUFhLEVBQUUsT0FBTyxFQUFFLGNBQWMsRUFBRSxZQUFZLENBQUMsQ0FBQztZQUM1RSxNQUFNLElBQUksQ0FBQyxtQkFBbUIsQ0FBQyxTQUFTLEVBQUUscUJBQXFCLEVBQUUsWUFBWSxDQUFDLENBQUM7UUFDakYsQ0FBQztLQUFBO0NBQ0Y7QUF6R0QsMEJBeUdDIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgQ2xpZW50LCBNZXRhZGF0YSB9IGZyb20gJ25pY2UtZ3JwYyc7XG5pbXBvcnQgeyBCbG9iU2V0U2VydmljZURlZmluaXRpb24sIFVwbG9hZEJsb2JSZXF1ZXN0IH0gZnJvbSAnLi4vLi4vcHJvdG8tbW9kZWxzL2NvbS9jb3JhbG9naXgvYmxvYnNldC92Mi9ibG9ic2V0X3NlcnZpY2UnO1xuaW1wb3J0IHsgY3JlYXRlVXBsb2FkQmxvYlJlcXVlc3RDaHVua3MsIHZhbGlkYXRlQ29tcHJlc3NlZEZpbGVzU2l6ZSB9IGZyb20gJy4uLy4uL3V0aWxzL3NoYXJlZC51dGlscyc7XG5pbXBvcnQgeyBHcnBjQ2xpZW50RmFjdG9yeSB9IGZyb20gJy4uLy4uL2dycGMtY2xpZW50L2dycGMtY2xpZW50LWZhY3RvcnknO1xuaW1wb3J0IHsgQ3JlYXRlRW50aXR5UmVsZWFzZVJlcXVlc3QsIFJ1bVNvdXJjZU1hcFNlcnZpY2VEZWZpbml0aW9uIH0gZnJvbSAnLi4vLi4vcHJvdG8tbW9kZWxzL2NvbS9jb3JhbG9naXgvcnVtL3YyL3J1bV9zb3VyY2VfbWFwX3NlcnZpY2UnO1xuaW1wb3J0IHsgRW50aXR5VHlwZSB9IGZyb20gJy4uLy4uL3Byb3RvLW1vZGVscy9jb20vY29yYWxvZ2l4L2Jsb2JzZXQvdjIvZW50aXR5X3R5cGUnO1xuaW1wb3J0IHsgUmVsZWFzZUVudGl0eVR5cGUgfSBmcm9tICcuLi8uLi9wcm90by1tb2RlbHMvY29tL2NvcmFsb2dpeC9ydW0vdjIvcmVsZWFzZV9lbnRpdHlfdHlwZSc7XG5pbXBvcnQgeyBSZWxlYXNlRW50aXR5TWV0YWRhdGEgfSBmcm9tICcuLi8uLi9wcm90by1tb2RlbHMvY29tL2NvcmFsb2dpeC9ydW0vdjIvcmVsZWFzZV9lbnRpdHlfbWV0YWRhdGEnO1xuaW1wb3J0IHsgRW50aXR5TWV0YWRhdGEgfSBmcm9tICcuLi8uLi9wcm90by1tb2RlbHMvY29tL2NvcmFsb2dpeC9ibG9ic2V0L3YyL2VudGl0eV9tZXRhZGF0YSc7XG5pbXBvcnQgeyBnZXRWZXJzaW9uQ29udGV4dCB9IGZyb20gJy4uLy4uL3V0aWxzL3ZlcnNpb24tY29udGV4dC51dGlscyc7XG5cbmV4cG9ydCBhYnN0cmFjdCBjbGFzcyBCYXNlQXBpIHtcbiAgcHJvdGVjdGVkIGFic3RyYWN0IGdldEVudGl0eVR5cGUoKTogRW50aXR5VHlwZTtcbiAgcHJvdGVjdGVkIGFic3RyYWN0IGdldFJlbGVhc2VFbnRpdHlUeXBlKCk6IFJlbGVhc2VFbnRpdHlUeXBlO1xuICBwcm90ZWN0ZWQgYWJzdHJhY3QgZ2V0TWF4Q29tcHJlc3NlZEZpbGVTaXplKCk6IG51bWJlcjtcbiAgcHJvdGVjdGVkIGFic3RyYWN0IGJ1aWxkUmVsZWFzZUVudGl0eU1ldGFkYXRhKFxuICAgIGFwcGxpY2F0aW9uOiBzdHJpbmcsXG4gICAgdmVyc2lvbjogc3RyaW5nLFxuICAgIHJlcG9OYW1lPzogc3RyaW5nLFxuICAgIGNvbW1pdEhhc2g/OiBzdHJpbmcsXG4gICAgb3JnTmFtZT86IHN0cmluZyxcbiAgICBpbnRlcm5hbFZlcnNpb24/OiBudW1iZXIsXG4gICAgbWVyZ2VkVmVyc2lvbnM/OiBudW1iZXJbXSxcbiAgKTogUmVsZWFzZUVudGl0eU1ldGFkYXRhO1xuICBwcm90ZWN0ZWQgYWJzdHJhY3QgYnVpbGRFbnRpdHlNZXRhZGF0YShcbiAgICBhcHBsaWNhdGlvbjogc3RyaW5nLFxuICAgIHZlcnNpb246IHN0cmluZyxcbiAgICByZXBvTmFtZT86IHN0cmluZyxcbiAgICBjb21taXRIYXNoPzogc3RyaW5nLFxuICAgIG9yZ05hbWU/OiBzdHJpbmcsXG4gICAgaW50ZXJuYWxWZXJzaW9uPzogbnVtYmVyLFxuICAgIG1lcmdlZFZlcnNpb25zPzogbnVtYmVyW10sXG4gICk6IEVudGl0eU1ldGFkYXRhO1xuXG4gIHByb3RlY3RlZCBhc3luYyB1cGxvYWRCbG9iKFxuICAgIGJsb2JTZXRDbGllbnQ6IENsaWVudDx0eXBlb2YgQmxvYlNldFNlcnZpY2VEZWZpbml0aW9uPixcbiAgICByZXF1ZXN0OiBVcGxvYWRCbG9iUmVxdWVzdCxcbiAgICBlbnRpdHlNZXRhZGF0YTogRW50aXR5TWV0YWRhdGEgfCB1bmRlZmluZWQsXG4gICAgbWV0YWRhdGE6IE1ldGFkYXRhLFxuICApOiBQcm9taXNlPHZvaWQ+IHtcbiAgICByZXF1ZXN0LmVudGl0eU1ldGFkYXRhID0gZW50aXR5TWV0YWRhdGE7XG4gICAgcmVxdWVzdC5lbnRpdHlUeXBlID0gdGhpcy5nZXRFbnRpdHlUeXBlKCk7XG5cbiAgICBjb25zdCBpdGVyYWJsZVJlcXVlc3QgPSBjcmVhdGVVcGxvYWRCbG9iUmVxdWVzdENodW5rcyhyZXF1ZXN0KTtcblxuICAgIGF3YWl0IGJsb2JTZXRDbGllbnQudXBsb2FkQmxvYihpdGVyYWJsZVJlcXVlc3QsIHsgbWV0YWRhdGEgfSk7XG4gIH1cblxuICBwcm90ZWN0ZWQgYXN5bmMgY3JlYXRlRW50aXR5UmVsZWFzZShcbiAgICBydW1DbGllbnQ6IENsaWVudDx0eXBlb2YgUnVtU291cmNlTWFwU2VydmljZURlZmluaXRpb24+LFxuICAgIHJlbGVhc2VFbnRpdHlNZXRhZGF0YTogUmVsZWFzZUVudGl0eU1ldGFkYXRhIHwgdW5kZWZpbmVkLFxuICAgIG1ldGFkYXRhOiBNZXRhZGF0YSxcbiAgKTogUHJvbWlzZTx2b2lkPiB7XG4gICAgY29uc3QgcmVxdWVzdDogQ3JlYXRlRW50aXR5UmVsZWFzZVJlcXVlc3QgPSB7XG4gICAgICByZWxlYXNlRW50aXR5VHlwZTogdGhpcy5nZXRSZWxlYXNlRW50aXR5VHlwZSgpLFxuICAgICAgcmVsZWFzZUVudGl0eU1ldGFkYXRhLFxuICAgIH07XG5cbiAgICBhd2FpdCBydW1DbGllbnQuY3JlYXRlRW50aXR5UmVsZWFzZShyZXF1ZXN0LCB7IG1ldGFkYXRhIH0pO1xuICB9XG5cbiAgcHJvdGVjdGVkIGNyZWF0ZUdycGNNZXRhZGF0YShwcml2YXRlS2V5OiBzdHJpbmcpOiBNZXRhZGF0YSB7XG4gICAgY29uc3QgbWV0YWRhdGE6IE1ldGFkYXRhID0gbmV3IE1ldGFkYXRhKCk7XG4gICAgbWV0YWRhdGEuc2V0KCdBdXRob3JpemF0aW9uJywgYEJlYXJlciAke3ByaXZhdGVLZXl9YCk7XG4gICAgcmV0dXJuIG1ldGFkYXRhO1xuICB9XG5cbiAgcHVibGljIGFzeW5jIHVwbG9hZChcbiAgICByZXF1ZXN0OiBVcGxvYWRCbG9iUmVxdWVzdCxcbiAgICBhcHBsaWNhdGlvbjogc3RyaW5nLFxuICAgIHZlcnNpb246IHN0cmluZyxcbiAgICByZXBvTmFtZTogc3RyaW5nIHwgdW5kZWZpbmVkLFxuICAgIGNvbW1pdEhhc2g6IHN0cmluZyB8IHVuZGVmaW5lZCxcbiAgICBvcmdOYW1lOiBzdHJpbmcgfCB1bmRlZmluZWQsXG4gICAgZW52OiBzdHJpbmcsXG4gICAgcHJpdmF0ZUtleTogc3RyaW5nLFxuICAgIG92ZXJyaWRlID0gZmFsc2UsXG4gICAgbWVyZ2UgPSBmYWxzZSxcbiAgKTogUHJvbWlzZTx2b2lkPiB7XG4gICAgY29uc3QgZ3JwY01ldGFkYXRhOiBNZXRhZGF0YSA9IHRoaXMuY3JlYXRlR3JwY01ldGFkYXRhKHByaXZhdGVLZXkpO1xuICAgIGNvbnN0IGJsb2JTZXRDbGllbnQgPSBHcnBjQ2xpZW50RmFjdG9yeS5nZXRCbG9iU2V0R3JwY0NsaWVudChlbnYsIHRoaXMuZ2V0TWF4Q29tcHJlc3NlZEZpbGVTaXplKCkpO1xuICAgIGNvbnN0IHJ1bUNsaWVudCA9IEdycGNDbGllbnRGYWN0b3J5LmdldFJ1bVNvdXJjZU1hcEdycGNDbGllbnQoZW52LCB0aGlzLmdldE1heENvbXByZXNzZWRGaWxlU2l6ZSgpKTtcblxuICAgIHZhbGlkYXRlQ29tcHJlc3NlZEZpbGVzU2l6ZShyZXF1ZXN0LmRhdGEubGVuZ3RoLCB0aGlzLmdldE1heENvbXByZXNzZWRGaWxlU2l6ZSgpKTtcblxuICAgIGNvbnN0IHsgaW50ZXJuYWxWZXJzaW9uLCBtZXJnZWRWZXJzaW9ucyB9ID0gYXdhaXQgZ2V0VmVyc2lvbkNvbnRleHQoe1xuICAgICAgY2xpZW50OiBydW1DbGllbnQsXG4gICAgICBhcHBsaWNhdGlvbixcbiAgICAgIHZlcnNpb24sXG4gICAgICByZWxlYXNlRW50aXR5VHlwZTogdGhpcy5nZXRSZWxlYXNlRW50aXR5VHlwZSgpLFxuICAgICAgbWV0YWRhdGE6IGdycGNNZXRhZGF0YSxcbiAgICAgIGZsYWdzOiB7IG92ZXJyaWRlLCBtZXJnZSB9LFxuICAgIH0pO1xuICAgIGNvbnN0IHJlbGVhc2VFbnRpdHlNZXRhZGF0YTogUmVsZWFzZUVudGl0eU1ldGFkYXRhID0gdGhpcy5idWlsZFJlbGVhc2VFbnRpdHlNZXRhZGF0YShcbiAgICAgIGFwcGxpY2F0aW9uLFxuICAgICAgdmVyc2lvbixcbiAgICAgIHJlcG9OYW1lLFxuICAgICAgY29tbWl0SGFzaCxcbiAgICAgIG9yZ05hbWUsXG4gICAgICBpbnRlcm5hbFZlcnNpb24sXG4gICAgICBtZXJnZWRWZXJzaW9ucyxcbiAgICApO1xuXG4gICAgY29uc3QgZW50aXR5TWV0YWRhdGE6IEVudGl0eU1ldGFkYXRhID0gdGhpcy5idWlsZEVudGl0eU1ldGFkYXRhKFxuICAgICAgYXBwbGljYXRpb24sXG4gICAgICB2ZXJzaW9uLFxuICAgICAgcmVwb05hbWUsXG4gICAgICBjb21taXRIYXNoLFxuICAgICAgb3JnTmFtZSxcbiAgICAgIGludGVybmFsVmVyc2lvbixcbiAgICAgIG1lcmdlZFZlcnNpb25zLFxuICAgICk7XG5cbiAgICBhd2FpdCB0aGlzLnVwbG9hZEJsb2IoYmxvYlNldENsaWVudCwgcmVxdWVzdCwgZW50aXR5TWV0YWRhdGEsIGdycGNNZXRhZGF0YSk7XG4gICAgYXdhaXQgdGhpcy5jcmVhdGVFbnRpdHlSZWxlYXNlKHJ1bUNsaWVudCwgcmVsZWFzZUVudGl0eU1ldGFkYXRhLCBncnBjTWV0YWRhdGEpO1xuICB9XG59XG4iXX0=
@@ -7,6 +7,6 @@ export declare class DsymApi extends BaseApi {
7
7
  protected getEntityType(): EntityType;
8
8
  protected getReleaseEntityType(): ReleaseEntityType;
9
9
  protected getMaxCompressedFileSize(): number;
10
- protected buildReleaseEntityMetadata(application: string, version: string, repoName?: string, commitHash?: string, orgName?: string): ReleaseEntityMetadata;
11
- protected buildEntityMetadata(application: string, version: string, repoName?: string, commitHash?: string, orgName?: string): EntityMetadata;
10
+ protected buildReleaseEntityMetadata(application: string, version: string, repoName?: string, commitHash?: string, orgName?: string, internalVersion?: number, mergedVersions?: number[]): ReleaseEntityMetadata;
11
+ protected buildEntityMetadata(application: string, version: string, repoName?: string, commitHash?: string, orgName?: string, internalVersion?: number, mergedVersions?: number[]): EntityMetadata;
12
12
  }
@@ -18,7 +18,7 @@ class DsymApi extends base_api_1.BaseApi {
18
18
  getMaxCompressedFileSize() {
19
19
  return config_1.default.rumApi.dsymMaxCompressedFilesSize;
20
20
  }
21
- buildReleaseEntityMetadata(application, version, repoName, commitHash, orgName) {
21
+ buildReleaseEntityMetadata(application, version, repoName, commitHash, orgName, internalVersion, mergedVersions) {
22
22
  return {
23
23
  metadata: {
24
24
  $case: 'dsymMetadata',
@@ -28,11 +28,13 @@ class DsymApi extends base_api_1.BaseApi {
28
28
  repoName: repoName || '',
29
29
  commitHash: commitHash || '',
30
30
  orgName: orgName || '',
31
+ internalVersion: internalVersion !== null && internalVersion !== void 0 ? internalVersion : 0,
32
+ mergedVersions: mergedVersions ? { versions: mergedVersions } : undefined,
31
33
  },
32
34
  },
33
35
  };
34
36
  }
35
- buildEntityMetadata(application, version, repoName, commitHash, orgName) {
37
+ buildEntityMetadata(application, version, repoName, commitHash, orgName, internalVersion, mergedVersions) {
36
38
  return {
37
39
  metadata: {
38
40
  $case: 'dsymMetadata',
@@ -42,10 +44,12 @@ class DsymApi extends base_api_1.BaseApi {
42
44
  repoName: repoName || '',
43
45
  commitHash: commitHash || '',
44
46
  orgName: orgName || '',
47
+ internalVersion: internalVersion !== null && internalVersion !== void 0 ? internalVersion : 0,
48
+ mergedVersions: mergedVersions ? { versions: mergedVersions } : undefined,
45
49
  },
46
50
  },
47
51
  };
48
52
  }
49
53
  }
50
54
  exports.DsymApi = DsymApi;
51
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZHN5bS5hcGkuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi9hcGkvZHN5bS9kc3ltLmFwaS50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiOzs7Ozs7QUFBQSx5RkFBcUY7QUFDckYscUdBQWdHO0FBQ2hHLGlFQUF5QztBQUN6QywrQ0FBMkM7QUFJM0MsTUFBYSxPQUFRLFNBQVEsa0JBQU87SUFDeEIsYUFBYTtRQUNyQixPQUFPLHdCQUFVLENBQUMsZ0JBQWdCLENBQUM7SUFDckMsQ0FBQztJQUVTLG9CQUFvQjtRQUM1QixPQUFPLHVDQUFpQixDQUFDLHdCQUF3QixDQUFDO0lBQ3BELENBQUM7SUFFUyx3QkFBd0I7UUFDaEMsT0FBTyxnQkFBTSxDQUFDLE1BQU0sQ0FBQywwQkFBMEIsQ0FBQztJQUNsRCxDQUFDO0lBRVMsMEJBQTBCLENBQ2xDLFdBQW1CLEVBQ25CLE9BQWUsRUFDZixRQUFpQixFQUNqQixVQUFtQixFQUNuQixPQUFnQjtRQUVoQixPQUFPO1lBQ0wsUUFBUSxFQUFFO2dCQUNSLEtBQUssRUFBRSxjQUFjO2dCQUNyQixZQUFZLEVBQUU7b0JBQ1osV0FBVztvQkFDWCxTQUFTLEVBQUUsT0FBTztvQkFDbEIsUUFBUSxFQUFFLFFBQVEsSUFBSSxFQUFFO29CQUN4QixVQUFVLEVBQUUsVUFBVSxJQUFJLEVBQUU7b0JBQzVCLE9BQU8sRUFBRSxPQUFPLElBQUksRUFBRTtpQkFDdkI7YUFDRjtTQUNGLENBQUM7SUFDSixDQUFDO0lBRVMsbUJBQW1CLENBQzNCLFdBQW1CLEVBQ25CLE9BQWUsRUFDZixRQUFpQixFQUNqQixVQUFtQixFQUNuQixPQUFnQjtRQUVoQixPQUFPO1lBQ0wsUUFBUSxFQUFFO2dCQUNSLEtBQUssRUFBRSxjQUFjO2dCQUNyQixZQUFZLEVBQUU7b0JBQ1osV0FBVztvQkFDWCxTQUFTLEVBQUUsT0FBTztvQkFDbEIsUUFBUSxFQUFFLFFBQVEsSUFBSSxFQUFFO29CQUN4QixVQUFVLEVBQUUsVUFBVSxJQUFJLEVBQUU7b0JBQzVCLE9BQU8sRUFBRSxPQUFPLElBQUksRUFBRTtpQkFDdkI7YUFDRjtTQUNGLENBQUM7SUFDSixDQUFDO0NBQ0Y7QUF0REQsMEJBc0RDIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgRW50aXR5VHlwZSB9IGZyb20gJy4uLy4uL3Byb3RvLW1vZGVscy9jb20vY29yYWxvZ2l4L2Jsb2JzZXQvdjIvZW50aXR5X3R5cGUnO1xuaW1wb3J0IHsgUmVsZWFzZUVudGl0eVR5cGUgfSBmcm9tICcuLi8uLi9wcm90by1tb2RlbHMvY29tL2NvcmFsb2dpeC9ydW0vdjIvcmVsZWFzZV9lbnRpdHlfdHlwZSc7XG5pbXBvcnQgY29uZmlnIGZyb20gJy4uLy4uL2NvbmZpZy9jb25maWcnO1xuaW1wb3J0IHsgQmFzZUFwaSB9IGZyb20gJy4uL2Jhc2UvYmFzZS5hcGknO1xuaW1wb3J0IHsgUmVsZWFzZUVudGl0eU1ldGFkYXRhIH0gZnJvbSAnLi4vLi4vcHJvdG8tbW9kZWxzL2NvbS9jb3JhbG9naXgvcnVtL3YyL3JlbGVhc2VfZW50aXR5X21ldGFkYXRhJztcbmltcG9ydCB7IEVudGl0eU1ldGFkYXRhIH0gZnJvbSAnLi4vLi4vcHJvdG8tbW9kZWxzL2NvbS9jb3JhbG9naXgvYmxvYnNldC92Mi9lbnRpdHlfbWV0YWRhdGEnO1xuXG5leHBvcnQgY2xhc3MgRHN5bUFwaSBleHRlbmRzIEJhc2VBcGkge1xuICBwcm90ZWN0ZWQgZ2V0RW50aXR5VHlwZSgpOiBFbnRpdHlUeXBlIHtcbiAgICByZXR1cm4gRW50aXR5VHlwZS5FTlRJVFlfVFlQRV9EU1lNO1xuICB9XG5cbiAgcHJvdGVjdGVkIGdldFJlbGVhc2VFbnRpdHlUeXBlKCk6IFJlbGVhc2VFbnRpdHlUeXBlIHtcbiAgICByZXR1cm4gUmVsZWFzZUVudGl0eVR5cGUuUkVMRUFTRV9FTlRJVFlfVFlQRV9EU1lNO1xuICB9XG5cbiAgcHJvdGVjdGVkIGdldE1heENvbXByZXNzZWRGaWxlU2l6ZSgpOiBudW1iZXIge1xuICAgIHJldHVybiBjb25maWcucnVtQXBpLmRzeW1NYXhDb21wcmVzc2VkRmlsZXNTaXplO1xuICB9XG5cbiAgcHJvdGVjdGVkIGJ1aWxkUmVsZWFzZUVudGl0eU1ldGFkYXRhKFxuICAgIGFwcGxpY2F0aW9uOiBzdHJpbmcsXG4gICAgdmVyc2lvbjogc3RyaW5nLFxuICAgIHJlcG9OYW1lPzogc3RyaW5nLFxuICAgIGNvbW1pdEhhc2g/OiBzdHJpbmcsXG4gICAgb3JnTmFtZT86IHN0cmluZyxcbiAgKTogUmVsZWFzZUVudGl0eU1ldGFkYXRhIHtcbiAgICByZXR1cm4ge1xuICAgICAgbWV0YWRhdGE6IHtcbiAgICAgICAgJGNhc2U6ICdkc3ltTWV0YWRhdGEnLFxuICAgICAgICBkc3ltTWV0YWRhdGE6IHtcbiAgICAgICAgICBhcHBsaWNhdGlvbixcbiAgICAgICAgICByZWxlYXNlSWQ6IHZlcnNpb24sXG4gICAgICAgICAgcmVwb05hbWU6IHJlcG9OYW1lIHx8ICcnLFxuICAgICAgICAgIGNvbW1pdEhhc2g6IGNvbW1pdEhhc2ggfHwgJycsXG4gICAgICAgICAgb3JnTmFtZTogb3JnTmFtZSB8fCAnJyxcbiAgICAgICAgfSxcbiAgICAgIH0sXG4gICAgfTtcbiAgfVxuXG4gIHByb3RlY3RlZCBidWlsZEVudGl0eU1ldGFkYXRhKFxuICAgIGFwcGxpY2F0aW9uOiBzdHJpbmcsXG4gICAgdmVyc2lvbjogc3RyaW5nLFxuICAgIHJlcG9OYW1lPzogc3RyaW5nLFxuICAgIGNvbW1pdEhhc2g/OiBzdHJpbmcsXG4gICAgb3JnTmFtZT86IHN0cmluZyxcbiAgKTogRW50aXR5TWV0YWRhdGEge1xuICAgIHJldHVybiB7XG4gICAgICBtZXRhZGF0YToge1xuICAgICAgICAkY2FzZTogJ2RzeW1NZXRhZGF0YScsXG4gICAgICAgIGRzeW1NZXRhZGF0YToge1xuICAgICAgICAgIGFwcGxpY2F0aW9uLFxuICAgICAgICAgIHJlbGVhc2VJZDogdmVyc2lvbixcbiAgICAgICAgICByZXBvTmFtZTogcmVwb05hbWUgfHwgJycsXG4gICAgICAgICAgY29tbWl0SGFzaDogY29tbWl0SGFzaCB8fCAnJyxcbiAgICAgICAgICBvcmdOYW1lOiBvcmdOYW1lIHx8ICcnLFxuICAgICAgICB9LFxuICAgICAgfSxcbiAgICB9O1xuICB9XG59XG4iXX0=
55
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZHN5bS5hcGkuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi9hcGkvZHN5bS9kc3ltLmFwaS50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiOzs7Ozs7QUFBQSx5RkFBcUY7QUFDckYscUdBQWdHO0FBQ2hHLGlFQUF5QztBQUN6QywrQ0FBMkM7QUFJM0MsTUFBYSxPQUFRLFNBQVEsa0JBQU87SUFDeEIsYUFBYTtRQUNyQixPQUFPLHdCQUFVLENBQUMsZ0JBQWdCLENBQUM7SUFDckMsQ0FBQztJQUVTLG9CQUFvQjtRQUM1QixPQUFPLHVDQUFpQixDQUFDLHdCQUF3QixDQUFDO0lBQ3BELENBQUM7SUFFUyx3QkFBd0I7UUFDaEMsT0FBTyxnQkFBTSxDQUFDLE1BQU0sQ0FBQywwQkFBMEIsQ0FBQztJQUNsRCxDQUFDO0lBRVMsMEJBQTBCLENBQ2xDLFdBQW1CLEVBQ25CLE9BQWUsRUFDZixRQUFpQixFQUNqQixVQUFtQixFQUNuQixPQUFnQixFQUNoQixlQUF3QixFQUN4QixjQUF5QjtRQUV6QixPQUFPO1lBQ0wsUUFBUSxFQUFFO2dCQUNSLEtBQUssRUFBRSxjQUFjO2dCQUNyQixZQUFZLEVBQUU7b0JBQ1osV0FBVztvQkFDWCxTQUFTLEVBQUUsT0FBTztvQkFDbEIsUUFBUSxFQUFFLFFBQVEsSUFBSSxFQUFFO29CQUN4QixVQUFVLEVBQUUsVUFBVSxJQUFJLEVBQUU7b0JBQzVCLE9BQU8sRUFBRSxPQUFPLElBQUksRUFBRTtvQkFDdEIsZUFBZSxFQUFFLGVBQWUsYUFBZixlQUFlLGNBQWYsZUFBZSxHQUFJLENBQUM7b0JBQ3JDLGNBQWMsRUFBRSxjQUFjLENBQUMsQ0FBQyxDQUFDLEVBQUUsUUFBUSxFQUFFLGNBQWMsRUFBRSxDQUFDLENBQUMsQ0FBQyxTQUFTO2lCQUMxRTthQUNGO1NBQ0YsQ0FBQztJQUNKLENBQUM7SUFFUyxtQkFBbUIsQ0FDM0IsV0FBbUIsRUFDbkIsT0FBZSxFQUNmLFFBQWlCLEVBQ2pCLFVBQW1CLEVBQ25CLE9BQWdCLEVBQ2hCLGVBQXdCLEVBQ3hCLGNBQXlCO1FBRXpCLE9BQU87WUFDTCxRQUFRLEVBQUU7Z0JBQ1IsS0FBSyxFQUFFLGNBQWM7Z0JBQ3JCLFlBQVksRUFBRTtvQkFDWixXQUFXO29CQUNYLFNBQVMsRUFBRSxPQUFPO29CQUNsQixRQUFRLEVBQUUsUUFBUSxJQUFJLEVBQUU7b0JBQ3hCLFVBQVUsRUFBRSxVQUFVLElBQUksRUFBRTtvQkFDNUIsT0FBTyxFQUFFLE9BQU8sSUFBSSxFQUFFO29CQUN0QixlQUFlLEVBQUUsZUFBZSxhQUFmLGVBQWUsY0FBZixlQUFlLEdBQUksQ0FBQztvQkFDckMsY0FBYyxFQUFFLGNBQWMsQ0FBQyxDQUFDLENBQUMsRUFBRSxRQUFRLEVBQUUsY0FBYyxFQUFFLENBQUMsQ0FBQyxDQUFDLFNBQVM7aUJBQzFFO2FBQ0Y7U0FDRixDQUFDO0lBQ0osQ0FBQztDQUNGO0FBOURELDBCQThEQyIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IEVudGl0eVR5cGUgfSBmcm9tICcuLi8uLi9wcm90by1tb2RlbHMvY29tL2NvcmFsb2dpeC9ibG9ic2V0L3YyL2VudGl0eV90eXBlJztcbmltcG9ydCB7IFJlbGVhc2VFbnRpdHlUeXBlIH0gZnJvbSAnLi4vLi4vcHJvdG8tbW9kZWxzL2NvbS9jb3JhbG9naXgvcnVtL3YyL3JlbGVhc2VfZW50aXR5X3R5cGUnO1xuaW1wb3J0IGNvbmZpZyBmcm9tICcuLi8uLi9jb25maWcvY29uZmlnJztcbmltcG9ydCB7IEJhc2VBcGkgfSBmcm9tICcuLi9iYXNlL2Jhc2UuYXBpJztcbmltcG9ydCB7IFJlbGVhc2VFbnRpdHlNZXRhZGF0YSB9IGZyb20gJy4uLy4uL3Byb3RvLW1vZGVscy9jb20vY29yYWxvZ2l4L3J1bS92Mi9yZWxlYXNlX2VudGl0eV9tZXRhZGF0YSc7XG5pbXBvcnQgeyBFbnRpdHlNZXRhZGF0YSB9IGZyb20gJy4uLy4uL3Byb3RvLW1vZGVscy9jb20vY29yYWxvZ2l4L2Jsb2JzZXQvdjIvZW50aXR5X21ldGFkYXRhJztcblxuZXhwb3J0IGNsYXNzIERzeW1BcGkgZXh0ZW5kcyBCYXNlQXBpIHtcbiAgcHJvdGVjdGVkIGdldEVudGl0eVR5cGUoKTogRW50aXR5VHlwZSB7XG4gICAgcmV0dXJuIEVudGl0eVR5cGUuRU5USVRZX1RZUEVfRFNZTTtcbiAgfVxuXG4gIHByb3RlY3RlZCBnZXRSZWxlYXNlRW50aXR5VHlwZSgpOiBSZWxlYXNlRW50aXR5VHlwZSB7XG4gICAgcmV0dXJuIFJlbGVhc2VFbnRpdHlUeXBlLlJFTEVBU0VfRU5USVRZX1RZUEVfRFNZTTtcbiAgfVxuXG4gIHByb3RlY3RlZCBnZXRNYXhDb21wcmVzc2VkRmlsZVNpemUoKTogbnVtYmVyIHtcbiAgICByZXR1cm4gY29uZmlnLnJ1bUFwaS5kc3ltTWF4Q29tcHJlc3NlZEZpbGVzU2l6ZTtcbiAgfVxuXG4gIHByb3RlY3RlZCBidWlsZFJlbGVhc2VFbnRpdHlNZXRhZGF0YShcbiAgICBhcHBsaWNhdGlvbjogc3RyaW5nLFxuICAgIHZlcnNpb246IHN0cmluZyxcbiAgICByZXBvTmFtZT86IHN0cmluZyxcbiAgICBjb21taXRIYXNoPzogc3RyaW5nLFxuICAgIG9yZ05hbWU/OiBzdHJpbmcsXG4gICAgaW50ZXJuYWxWZXJzaW9uPzogbnVtYmVyLFxuICAgIG1lcmdlZFZlcnNpb25zPzogbnVtYmVyW10sXG4gICk6IFJlbGVhc2VFbnRpdHlNZXRhZGF0YSB7XG4gICAgcmV0dXJuIHtcbiAgICAgIG1ldGFkYXRhOiB7XG4gICAgICAgICRjYXNlOiAnZHN5bU1ldGFkYXRhJyxcbiAgICAgICAgZHN5bU1ldGFkYXRhOiB7XG4gICAgICAgICAgYXBwbGljYXRpb24sXG4gICAgICAgICAgcmVsZWFzZUlkOiB2ZXJzaW9uLFxuICAgICAgICAgIHJlcG9OYW1lOiByZXBvTmFtZSB8fCAnJyxcbiAgICAgICAgICBjb21taXRIYXNoOiBjb21taXRIYXNoIHx8ICcnLFxuICAgICAgICAgIG9yZ05hbWU6IG9yZ05hbWUgfHwgJycsXG4gICAgICAgICAgaW50ZXJuYWxWZXJzaW9uOiBpbnRlcm5hbFZlcnNpb24gPz8gMCxcbiAgICAgICAgICBtZXJnZWRWZXJzaW9uczogbWVyZ2VkVmVyc2lvbnMgPyB7IHZlcnNpb25zOiBtZXJnZWRWZXJzaW9ucyB9IDogdW5kZWZpbmVkLFxuICAgICAgICB9LFxuICAgICAgfSxcbiAgICB9O1xuICB9XG5cbiAgcHJvdGVjdGVkIGJ1aWxkRW50aXR5TWV0YWRhdGEoXG4gICAgYXBwbGljYXRpb246IHN0cmluZyxcbiAgICB2ZXJzaW9uOiBzdHJpbmcsXG4gICAgcmVwb05hbWU/OiBzdHJpbmcsXG4gICAgY29tbWl0SGFzaD86IHN0cmluZyxcbiAgICBvcmdOYW1lPzogc3RyaW5nLFxuICAgIGludGVybmFsVmVyc2lvbj86IG51bWJlcixcbiAgICBtZXJnZWRWZXJzaW9ucz86IG51bWJlcltdLFxuICApOiBFbnRpdHlNZXRhZGF0YSB7XG4gICAgcmV0dXJuIHtcbiAgICAgIG1ldGFkYXRhOiB7XG4gICAgICAgICRjYXNlOiAnZHN5bU1ldGFkYXRhJyxcbiAgICAgICAgZHN5bU1ldGFkYXRhOiB7XG4gICAgICAgICAgYXBwbGljYXRpb24sXG4gICAgICAgICAgcmVsZWFzZUlkOiB2ZXJzaW9uLFxuICAgICAgICAgIHJlcG9OYW1lOiByZXBvTmFtZSB8fCAnJyxcbiAgICAgICAgICBjb21taXRIYXNoOiBjb21taXRIYXNoIHx8ICcnLFxuICAgICAgICAgIG9yZ05hbWU6IG9yZ05hbWUgfHwgJycsXG4gICAgICAgICAgaW50ZXJuYWxWZXJzaW9uOiBpbnRlcm5hbFZlcnNpb24gPz8gMCxcbiAgICAgICAgICBtZXJnZWRWZXJzaW9uczogbWVyZ2VkVmVyc2lvbnMgPyB7IHZlcnNpb25zOiBtZXJnZWRWZXJzaW9ucyB9IDogdW5kZWZpbmVkLFxuICAgICAgICB9LFxuICAgICAgfSxcbiAgICB9O1xuICB9XG59XG4iXX0=