@coralogix/rum-cli 1.1.21 → 1.1.24

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 (206) hide show
  1. package/README.md +32 -9
  2. package/api/client/client-factory.ts +26 -0
  3. package/api/client/request-builder.ts +122 -0
  4. package/api/dsym.api.ts +61 -0
  5. package/api/react-native.api.ts +67 -0
  6. package/api/{rum-api.ts → source-maps.api.ts} +15 -23
  7. package/cli/commands/dsym/index.ts +5 -0
  8. package/cli/commands/dsym/upload-dsym-command.ts +36 -0
  9. package/cli/commands/react-native/index.ts +5 -0
  10. package/cli/commands/react-native/upload-react-native-source-maps-command.ts +42 -0
  11. package/cli/commands/{delete-source-maps-command.ts → source-maps/delete-source-maps-command.ts} +8 -10
  12. package/cli/commands/source-maps/index.ts +7 -0
  13. package/cli/commands/{update-source-maps-command.ts → source-maps/update-source-maps-command.ts} +8 -10
  14. package/cli/commands/{upload-source-maps-command.ts → source-maps/upload-source-maps-command.ts} +8 -10
  15. package/cli/rum-cli.ts +17 -7
  16. package/config/config.ts +10 -4
  17. package/consts/consts.ts +2 -0
  18. package/dist/api/client/client-factory.d.ts +355 -0
  19. package/dist/api/client/client-factory.js +31 -0
  20. package/dist/api/client/request-builder.d.ts +33 -0
  21. package/dist/api/client/request-builder.js +58 -0
  22. package/dist/api/dsym.api.d.ts +4 -0
  23. package/dist/api/dsym.api.js +50 -0
  24. package/dist/api/react-native.api.d.ts +4 -0
  25. package/dist/api/react-native.api.js +50 -0
  26. package/dist/api/{rum-api.d.ts → source-maps.api.d.ts} +2 -2
  27. package/dist/api/source-maps.api.js +97 -0
  28. package/dist/cli/commands/dsym/index.d.ts +4 -0
  29. package/dist/cli/commands/dsym/index.js +6 -0
  30. package/dist/cli/commands/dsym/upload-dsym-command.d.ts +2 -0
  31. package/dist/cli/commands/dsym/upload-dsym-command.js +45 -0
  32. package/dist/cli/commands/react-native/index.d.ts +4 -0
  33. package/dist/cli/commands/react-native/index.js +6 -0
  34. package/dist/cli/commands/react-native/upload-react-native-source-maps-command.d.ts +2 -0
  35. package/dist/cli/commands/react-native/upload-react-native-source-maps-command.js +51 -0
  36. package/dist/cli/commands/source-maps/delete-source-maps-command.d.ts +2 -0
  37. package/dist/cli/commands/source-maps/delete-source-maps-command.js +41 -0
  38. package/dist/cli/commands/source-maps/index.d.ts +6 -0
  39. package/dist/cli/commands/source-maps/index.js +8 -0
  40. package/dist/cli/commands/source-maps/update-source-maps-command.d.ts +2 -0
  41. package/dist/cli/commands/source-maps/update-source-maps-command.js +46 -0
  42. package/dist/cli/commands/source-maps/upload-source-maps-command.d.ts +2 -0
  43. package/dist/cli/commands/source-maps/upload-source-maps-command.js +45 -0
  44. package/dist/cli/rum-cli.js +14 -8
  45. package/dist/config/config.d.ts +5 -2
  46. package/dist/config/config.js +6 -3
  47. package/dist/consts/consts.d.ts +1 -0
  48. package/dist/consts/consts.js +3 -2
  49. package/dist/models/dsym-commands.model.d.ts +11 -0
  50. package/dist/models/dsym-commands.model.js +3 -0
  51. package/dist/models/react-native-commands.model.d.ts +11 -0
  52. package/dist/models/react-native-commands.model.js +3 -0
  53. package/dist/models/{commands.model.d.ts → source-maps-commands.model.d.ts} +3 -3
  54. package/dist/models/source-maps-commands.model.js +3 -0
  55. package/dist/proto-models/com/coralogix/blobset/v2/audit_log.d.ts +24 -0
  56. package/dist/proto-models/com/coralogix/blobset/v2/audit_log.js +64 -0
  57. package/dist/proto-models/com/coralogix/blobset/v2/blobset_query_service.d.ts +111 -0
  58. package/dist/proto-models/com/coralogix/blobset/v2/blobset_query_service.js +31 -0
  59. package/dist/proto-models/com/coralogix/blobset/v2/blobset_service.d.ts +67 -0
  60. package/dist/proto-models/com/coralogix/blobset/v2/blobset_service.js +174 -0
  61. package/dist/proto-models/com/coralogix/blobset/v2/dsym.d.ts +58 -0
  62. package/dist/proto-models/com/coralogix/blobset/v2/dsym.js +331 -0
  63. package/dist/proto-models/com/coralogix/blobset/v2/entity_metadata.d.ts +78 -0
  64. package/dist/proto-models/com/coralogix/blobset/v2/entity_metadata.js +459 -0
  65. package/dist/proto-models/com/coralogix/blobset/v2/entity_type.d.ts +9 -0
  66. package/dist/proto-models/com/coralogix/blobset/v2/entity_type.js +47 -0
  67. package/dist/proto-models/com/coralogix/blobset/v2/react_native.d.ts +54 -0
  68. package/dist/proto-models/com/coralogix/blobset/v2/react_native.js +313 -0
  69. package/dist/proto-models/com/coralogix/blobset/v2/s3_metadata.d.ts +30 -0
  70. package/dist/proto-models/com/coralogix/blobset/v2/s3_metadata.js +126 -0
  71. package/dist/proto-models/com/coralogix/rum/v2/analytics.d.ts +1 -1
  72. package/dist/proto-models/com/coralogix/rum/v2/analytics.js +115 -102
  73. package/dist/proto-models/com/coralogix/rum/v2/audit_log.d.ts +1 -1
  74. package/dist/proto-models/com/coralogix/rum/v2/audit_log.js +5 -3
  75. package/dist/proto-models/com/coralogix/rum/v2/chunk.d.ts +1 -1
  76. package/dist/proto-models/com/coralogix/rum/v2/chunk.js +54 -49
  77. package/dist/proto-models/com/coralogix/rum/v2/file.d.ts +1 -1
  78. package/dist/proto-models/com/coralogix/rum/v2/file.js +24 -34
  79. package/dist/proto-models/com/coralogix/rum/v2/hide_errors.d.ts +44 -0
  80. package/dist/proto-models/com/coralogix/rum/v2/hide_errors.js +195 -0
  81. package/dist/proto-models/com/coralogix/rum/v2/release_entity_metadata.d.ts +78 -0
  82. package/dist/proto-models/com/coralogix/rum/v2/release_entity_metadata.js +459 -0
  83. package/dist/proto-models/com/coralogix/rum/v2/release_entity_type.d.ts +9 -0
  84. package/dist/proto-models/com/coralogix/rum/v2/release_entity_type.js +47 -0
  85. package/dist/proto-models/com/coralogix/rum/v2/rum_hide_errors_service.d.ts +198 -0
  86. package/dist/proto-models/com/coralogix/rum/v2/rum_hide_errors_service.js +517 -0
  87. package/dist/proto-models/com/coralogix/rum/v2/rum_react_native_source_map_service.d.ts +69 -0
  88. package/dist/proto-models/com/coralogix/rum/v2/rum_react_native_source_map_service.js +189 -0
  89. package/dist/proto-models/com/coralogix/rum/v2/rum_saved_filters_service.d.ts +480 -0
  90. package/dist/proto-models/com/coralogix/rum/v2/rum_saved_filters_service.js +1420 -0
  91. package/dist/proto-models/com/coralogix/rum/v2/rum_sdk_versions.d.ts +41 -0
  92. package/dist/proto-models/com/coralogix/rum/v2/rum_sdk_versions.js +217 -0
  93. package/dist/proto-models/com/coralogix/rum/v2/rum_service.d.ts +143 -3
  94. package/dist/proto-models/com/coralogix/rum/v2/rum_service.js +595 -127
  95. package/dist/proto-models/com/coralogix/rum/v2/rum_session_recording_service.d.ts +1 -59
  96. package/dist/proto-models/com/coralogix/rum/v2/rum_session_recording_service.js +4 -175
  97. package/dist/proto-models/com/coralogix/rum/v2/rum_settings.d.ts +45 -0
  98. package/dist/proto-models/com/coralogix/rum/v2/rum_settings.js +193 -0
  99. package/dist/proto-models/com/coralogix/rum/v2/rum_settings_service.d.ts +107 -0
  100. package/dist/proto-models/com/coralogix/rum/v2/rum_settings_service.js +214 -0
  101. package/dist/proto-models/com/coralogix/rum/v2/rum_snooze_errors_service.d.ts +261 -0
  102. package/dist/proto-models/com/coralogix/rum/v2/rum_snooze_errors_service.js +698 -0
  103. package/dist/proto-models/com/coralogix/rum/v2/rum_source_map_service.d.ts +93 -1
  104. package/dist/proto-models/com/coralogix/rum/v2/rum_source_map_service.js +325 -42
  105. package/dist/proto-models/com/coralogix/rum/v2/saved_filter.d.ts +55 -0
  106. package/dist/proto-models/com/coralogix/rum/v2/saved_filter.js +267 -0
  107. package/dist/proto-models/com/coralogix/rum/v2/snooze_errors.d.ts +109 -0
  108. package/dist/proto-models/com/coralogix/rum/v2/snooze_errors.js +580 -0
  109. package/dist/proto-models/com/coralogix/rum/v2/source_code_file_mapping.d.ts +1 -1
  110. package/dist/proto-models/com/coralogix/rum/v2/source_code_file_mapping.js +47 -24
  111. package/dist/proto-models/com/coralogix/rum/v2/source_map_release.d.ts +1 -1
  112. package/dist/proto-models/com/coralogix/rum/v2/source_map_release.js +43 -38
  113. package/dist/proto-models/com/coralogix/rum/v2/template.d.ts +14 -1
  114. package/dist/proto-models/com/coralogix/rum/v2/template.js +148 -54
  115. package/dist/proto-models/google/protobuf/descriptor.d.ts +1 -1
  116. package/dist/proto-models/google/protobuf/descriptor.js +537 -427
  117. package/dist/services/dsym.service.d.ts +3 -0
  118. package/dist/services/dsym.service.js +36 -0
  119. package/dist/services/react-native.service.d.ts +3 -0
  120. package/dist/services/react-native.service.js +37 -0
  121. package/dist/services/source-maps.service.js +12 -14
  122. package/dist/utils/file-processor.utils.d.ts +12 -0
  123. package/dist/utils/file-processor.utils.js +196 -0
  124. package/dist/utils/shared.utils.d.ts +9 -0
  125. package/dist/utils/shared.utils.js +62 -0
  126. package/models/dsym-commands.model.ts +11 -0
  127. package/models/react-native-commands.model.ts +11 -0
  128. package/models/{commands.model.ts → source-maps-commands.model.ts} +3 -3
  129. package/package.json +4 -3
  130. package/proto-models/com/coralogix/blobset/v2/audit_log.ts +78 -0
  131. package/proto-models/com/coralogix/blobset/v2/blobset_query_service.ts +30 -0
  132. package/proto-models/com/coralogix/blobset/v2/blobset_service.ts +203 -0
  133. package/proto-models/com/coralogix/blobset/v2/dsym.ts +394 -0
  134. package/proto-models/com/coralogix/blobset/v2/entity_metadata.ts +537 -0
  135. package/proto-models/com/coralogix/blobset/v2/entity_type.ts +44 -0
  136. package/proto-models/com/coralogix/blobset/v2/react_native.ts +361 -0
  137. package/proto-models/com/coralogix/blobset/v2/s3_metadata.ts +148 -0
  138. package/proto-models/com/coralogix/rum/v2/analytics.ts +113 -108
  139. package/proto-models/com/coralogix/rum/v2/audit_log.ts +6 -4
  140. package/proto-models/com/coralogix/rum/v2/chunk.ts +55 -56
  141. package/proto-models/com/coralogix/rum/v2/file.ts +25 -39
  142. package/proto-models/com/coralogix/rum/v2/hide_errors.ts +225 -0
  143. package/proto-models/com/coralogix/rum/v2/release_entity_metadata.ts +537 -0
  144. package/proto-models/com/coralogix/rum/v2/release_entity_type.ts +44 -0
  145. package/proto-models/com/coralogix/rum/v2/rum_hide_errors_service.ts +599 -0
  146. package/proto-models/com/coralogix/rum/v2/rum_react_native_source_map_service.ts +223 -0
  147. package/proto-models/com/coralogix/rum/v2/rum_saved_filters_service.ts +1673 -0
  148. package/proto-models/com/coralogix/rum/v2/rum_sdk_versions.ts +254 -0
  149. package/proto-models/com/coralogix/rum/v2/rum_service.ts +672 -146
  150. package/proto-models/com/coralogix/rum/v2/rum_session_recording_service.ts +1 -208
  151. package/proto-models/com/coralogix/rum/v2/rum_settings.ts +209 -0
  152. package/proto-models/com/coralogix/rum/v2/rum_settings_service.ts +260 -0
  153. package/proto-models/com/coralogix/rum/v2/rum_snooze_errors_service.ts +818 -0
  154. package/proto-models/com/coralogix/rum/v2/rum_source_map_service.ts +369 -46
  155. package/proto-models/com/coralogix/rum/v2/saved_filter.ts +301 -0
  156. package/proto-models/com/coralogix/rum/v2/snooze_errors.ts +656 -0
  157. package/proto-models/com/coralogix/rum/v2/source_code_file_mapping.ts +48 -27
  158. package/proto-models/com/coralogix/rum/v2/source_map_release.ts +44 -44
  159. package/proto-models/com/coralogix/rum/v2/template.ts +161 -59
  160. package/proto-models/google/protobuf/descriptor.ts +551 -464
  161. package/protofetch.lock +21 -2
  162. package/protofetch.toml +6 -1
  163. package/protos/com/coralogix/blobset/v2/audit_log.proto +13 -0
  164. package/protos/com/coralogix/blobset/v2/blobset_query_service.proto +12 -0
  165. package/protos/com/coralogix/blobset/v2/blobset_service.proto +18 -0
  166. package/protos/com/coralogix/blobset/v2/dsym.proto +19 -0
  167. package/protos/com/coralogix/blobset/v2/entity_metadata.proto +36 -0
  168. package/protos/com/coralogix/blobset/v2/entity_type.proto +10 -0
  169. package/protos/com/coralogix/blobset/v2/react_native.proto +23 -0
  170. package/protos/com/coralogix/blobset/v2/s3_metadata.proto +14 -0
  171. package/protos/com/coralogix/rum/v2/hide_errors.proto +19 -0
  172. package/protos/com/coralogix/rum/v2/release_entity_metadata.proto +35 -0
  173. package/protos/com/coralogix/rum/v2/release_entity_type.proto +10 -0
  174. package/protos/com/coralogix/rum/v2/rum_hide_errors_service.proto +42 -0
  175. package/protos/com/coralogix/rum/v2/rum_react_native_source_map_service.proto +19 -0
  176. package/protos/com/coralogix/rum/v2/rum_saved_filters_service.proto +117 -0
  177. package/protos/com/coralogix/rum/v2/rum_sdk_versions.proto +16 -0
  178. package/protos/com/coralogix/rum/v2/rum_service.proto +36 -0
  179. package/protos/com/coralogix/rum/v2/rum_session_recording_service.proto +1 -12
  180. package/protos/com/coralogix/rum/v2/rum_settings.proto +26 -0
  181. package/protos/com/coralogix/rum/v2/rum_settings_service.proto +21 -0
  182. package/protos/com/coralogix/rum/v2/rum_snooze_errors_service.proto +64 -0
  183. package/protos/com/coralogix/rum/v2/rum_source_map_service.proto +20 -1
  184. package/protos/com/coralogix/rum/v2/saved_filter.proto +28 -0
  185. package/protos/com/coralogix/rum/v2/snooze_errors.proto +55 -0
  186. package/protos/com/coralogix/rum/v2/template.proto +6 -0
  187. package/protoset.bin +0 -0
  188. package/services/dsym.service.ts +33 -0
  189. package/services/react-native.service.ts +34 -0
  190. package/services/source-maps.service.ts +12 -14
  191. package/utils/file-processor.utils.ts +176 -0
  192. package/utils/shared.utils.ts +52 -0
  193. package/cli/commands/index.ts +0 -7
  194. package/dist/api/rum-api.js +0 -104
  195. package/dist/cli/commands/delete-source-maps-command.d.ts +0 -2
  196. package/dist/cli/commands/delete-source-maps-command.js +0 -43
  197. package/dist/cli/commands/index.d.ts +0 -6
  198. package/dist/cli/commands/index.js +0 -8
  199. package/dist/cli/commands/update-source-maps-command.d.ts +0 -2
  200. package/dist/cli/commands/update-source-maps-command.js +0 -48
  201. package/dist/cli/commands/upload-source-maps-command.d.ts +0 -2
  202. package/dist/cli/commands/upload-source-maps-command.js +0 -47
  203. package/dist/models/commands.model.js +0 -3
  204. package/dist/utils/index.d.ts +0 -6
  205. package/dist/utils/index.js +0 -115
  206. package/utils/index.ts +0 -93
@@ -2,6 +2,8 @@ syntax = "proto3";
2
2
  package com.coralogix.rum.v2;
3
3
 
4
4
  import "com/coralogix/rum/v2/file.proto";
5
+ import "com/coralogix/rum/v2/release_entity_metadata.proto";
6
+ import "com/coralogix/rum/v2/release_entity_type.proto";
5
7
 
6
8
  message UploadSourceMapsRequest {
7
9
  string application = 1;
@@ -28,12 +30,29 @@ message DeleteSourceMapRequest {
28
30
  string release_id = 2;
29
31
  }
30
32
 
33
+ message CreateEntityReleaseRequest {
34
+ ReleaseEntityType release_entity_type = 2;
35
+ ReleaseEntityMetadata release_entity_metadata = 3;
36
+ }
37
+
38
+ message IsEntityReleaseExistsRequest {
39
+ string application = 1;
40
+ string release_id = 2;
41
+ ReleaseEntityType release_entity_type = 3;
42
+ }
43
+
31
44
  message UploadSourceMapsResponse {}
32
45
  message UpdateSourceMapResponse {}
33
46
  message DeleteSourceMapResponse {}
47
+ message CreateEntityReleaseResponse {}
48
+ message IsEntityReleaseExistsResponse {
49
+ bool exists = 1;
50
+ }
34
51
 
35
52
  service RumSourceMapService {
36
53
  rpc UploadSourceMaps(UploadSourceMapsRequest) returns (UploadSourceMapsResponse) {}
37
54
  rpc UpdateSourceMap(UpdateSourceMapRequest) returns (UpdateSourceMapResponse) {}
38
55
  rpc DeleteSourceMap(DeleteSourceMapRequest) returns (DeleteSourceMapResponse) {}
39
- }
56
+ rpc CreateEntityRelease(CreateEntityReleaseRequest) returns (CreateEntityReleaseResponse) {}
57
+ rpc IsEntityReleaseExists(IsEntityReleaseExistsRequest) returns (IsEntityReleaseExistsResponse) {}
58
+ }
@@ -0,0 +1,28 @@
1
+ syntax = "proto3";
2
+ package com.coralogix.rum.v2;
3
+
4
+ message SavedFilterBasicProperties {
5
+ string name = 1;
6
+ string id = 2;
7
+ Page page = 3;
8
+ }
9
+
10
+ message SavedFilter {
11
+ SavedFilterBasicProperties saved_filter = 1;
12
+ bool is_favorite = 2;
13
+ optional string favorite_id = 3;
14
+ SavedFilterPermission permission = 4;
15
+ }
16
+
17
+ enum Page {
18
+ PAGE_UNSPECIFIED = 0;
19
+ PAGE_ERROR_TRACKING = 1;
20
+ PAGE_USER_SESSION = 2;
21
+ PAGE_WEB_VITALS = 3;
22
+ }
23
+
24
+ enum SavedFilterPermission {
25
+ SAVED_FILTER_PERMISSION_UNSPECIFIED = 0;
26
+ SAVED_FILTER_PERMISSION_PRIVATE = 1;
27
+ SAVED_FILTER_PERMISSION_PUBLIC = 2;
28
+ }
@@ -0,0 +1,55 @@
1
+ syntax = "proto3";
2
+ package com.coralogix.rum.v2;
3
+
4
+ enum SnoozeType {
5
+ SNOOZE_TYPE_UNSPECIFIED = 0;
6
+ SNOOZE_TYPE_TEMPLATE_ID = 1;
7
+ SNOOZE_TYPE_CATEGORY = 2;
8
+ }
9
+
10
+ enum SnoozeCondition {
11
+ SNOOZE_CONDITION_UNSPECIFIED = 0;
12
+ SNOOZE_CONDITION_TIME = 1;
13
+ }
14
+
15
+ enum SnoozeStatus {
16
+ SNOOZE_STATUS_UNSPECIFIED = 0;
17
+ SNOOZE_STATUS_ACTIVE = 1;
18
+ SNOOZE_STATUS_EXPIRING_SOON = 2;
19
+ SNOOZE_STATUS_UPDATED = 3;
20
+ }
21
+
22
+ message Category {
23
+ string key = 1;
24
+ repeated string values = 2;
25
+ }
26
+
27
+ message Categories {
28
+ repeated Category categories = 1;
29
+ }
30
+
31
+ message TimeCondition {
32
+ int64 end_time = 1;
33
+ }
34
+
35
+ message TimeBasedSnooze {
36
+ oneof snooze_details {
37
+ Categories categories = 1;
38
+ string template = 2;
39
+ }
40
+ int64 end_time = 3;
41
+ }
42
+
43
+ message Management {
44
+ SnoozeType snooze_type = 1;
45
+ SnoozeCondition snooze_condition = 2;
46
+ SnoozeStatus snooze_status = 3;
47
+ int64 initial_time = 4;
48
+ int64 expires_time = 5;
49
+ oneof snooze_details {
50
+ string template = 6;
51
+ Categories categories = 7;
52
+ }
53
+ string id = 8;
54
+ }
55
+
@@ -31,4 +31,10 @@ message TemplateResult {
31
31
  Template template = 1;
32
32
  int64 number_of_errors = 2;
33
33
  int64 number_of_users = 3;
34
+ }
35
+
36
+ message TemplateDate {
37
+ string template_id = 1;
38
+ int64 created_at = 2;
39
+ int64 updated_at = 3;
34
40
  }
package/protoset.bin CHANGED
Binary file
@@ -0,0 +1,33 @@
1
+ import { GRAY_COLOR, GREEN_COLOR } from '../consts/consts';
2
+ import { consoleError } from '../utils/shared.utils';
3
+ import { UploadBlobRequest } from '../proto-models/com/coralogix/blobset/v2/blobset_service';
4
+ import { DsymApi } from '../api/dsym.api';
5
+ import { FileProcessor } from '../utils/file-processor.utils';
6
+
7
+ export class DsymService {
8
+ static async upload(
9
+ application: string,
10
+ version: string,
11
+ repoName: string | undefined,
12
+ commitHash: string | undefined,
13
+ orgName: string | undefined,
14
+ folderPath: string,
15
+ env: string,
16
+ privateKey: string,
17
+ ): Promise<void> {
18
+ const request = UploadBlobRequest.create();
19
+
20
+ console.log(GRAY_COLOR, '🚀 Uploading Dsym...');
21
+
22
+ try {
23
+ await FileProcessor.traverseDsymFolder(folderPath, request);
24
+
25
+ await DsymApi.uploadDsym(request, application, version, repoName, commitHash, orgName, env, privateKey);
26
+
27
+ console.log(GREEN_COLOR, '✅ Dsym uploaded successfully!');
28
+ console.log(GREEN_COLOR, '✅ Processing complete.');
29
+ } catch (error) {
30
+ consoleError(error);
31
+ }
32
+ }
33
+ }
@@ -0,0 +1,34 @@
1
+ import { GRAY_COLOR, GREEN_COLOR } from '../consts/consts';
2
+ import { consoleError } from '../utils/shared.utils';
3
+ import { ReactNativeApi } from '../api/react-native.api';
4
+ import { UploadBlobRequest } from '../proto-models/com/coralogix/blobset/v2/blobset_service';
5
+ import { FileProcessor } from '../utils/file-processor.utils';
6
+
7
+ export class ReactNativeService {
8
+ static async upload(
9
+ application: string,
10
+ version: string,
11
+ repoName: string | undefined,
12
+ commitHash: string | undefined,
13
+ orgName: string | undefined,
14
+ folderPath: string,
15
+ env: string,
16
+ privateKey: string,
17
+ ): Promise<void> {
18
+ const request = UploadBlobRequest.create();
19
+
20
+ console.log(GRAY_COLOR, '🚀 Uploading react native source map...');
21
+
22
+ try {
23
+ const totalFiles: number | undefined = await FileProcessor.traverseSourceMapsFolder(folderPath, '.map', request);
24
+
25
+ await ReactNativeApi.uploadReactNativeSourceMaps(request, application, version, repoName, commitHash, orgName, env, privateKey);
26
+
27
+ console.log(GREEN_COLOR, '✅ React native source map uploaded successfully!');
28
+ console.log(GREEN_COLOR, `✅ Total files processed: ${totalFiles || 0}`);
29
+ console.log(GREEN_COLOR, '✅ Processing complete.');
30
+ } catch (error) {
31
+ consoleError(error);
32
+ }
33
+ }
34
+ }
@@ -3,9 +3,10 @@ import {
3
3
  UpdateSourceMapRequest,
4
4
  UploadSourceMapsRequest,
5
5
  } from '../proto-models/com/coralogix/rum/v2/rum_source_map_service';
6
- import { RumApi } from '../api/rum-api';
7
- import { GRAY_COLOR, GREEN_COLOR, RED_COLOR } from '../consts/consts';
8
- import { traverseFolder } from '../utils';
6
+ import { SourceMapsApi } from '../api/source-maps.api';
7
+ import { GRAY_COLOR, GREEN_COLOR } from '../consts/consts';
8
+ import { consoleError } from '../utils/shared.utils';
9
+ import { FileProcessor } from '../utils/file-processor.utils';
9
10
 
10
11
  export class SourceMapsService {
11
12
  static async upload(
@@ -29,16 +30,15 @@ export class SourceMapsService {
29
30
  console.log(GRAY_COLOR, '🚀 Uploading source maps...');
30
31
 
31
32
  try {
32
- await traverseFolder(folderPath, request);
33
+ await FileProcessor.traverseSourceMapsFolderOld(folderPath, request);
33
34
 
34
- await RumApi.uploadSourceMaps(request, env, privateKey);
35
+ await SourceMapsApi.uploadSourceMaps(request, env, privateKey);
35
36
 
36
37
  console.log(GREEN_COLOR, '✅ Source maps uploaded successfully!');
37
38
  console.log(GREEN_COLOR, `✅ Total chunk files processed: ${request.files.length}`);
38
39
  console.log(GREEN_COLOR, '✅ Processing complete.');
39
40
  } catch (error) {
40
- console.log(RED_COLOR, '❌ An error occurred');
41
- console.error(RED_COLOR, error);
41
+ consoleError(error);
42
42
  }
43
43
  }
44
44
 
@@ -65,16 +65,15 @@ export class SourceMapsService {
65
65
  console.log(GRAY_COLOR, '🔄 Updating source maps...');
66
66
 
67
67
  try {
68
- await traverseFolder(folderPath, request);
68
+ await FileProcessor.traverseSourceMapsFolderOld(folderPath, request);
69
69
 
70
- await RumApi.updateSourceMap(request, env, privateKey);
70
+ await SourceMapsApi.updateSourceMap(request, env, privateKey);
71
71
 
72
72
  console.log(GREEN_COLOR, '✅ Source maps updated successfully!');
73
73
  console.log(GREEN_COLOR, `✅ Total chunk files processed: ${request.files.length}`);
74
74
  console.log(GREEN_COLOR, '✅ Processing complete.');
75
75
  } catch (error) {
76
- console.log(RED_COLOR, '❌ An error occurred');
77
- console.error(RED_COLOR, error);
76
+ consoleError(error);
78
77
  }
79
78
  }
80
79
 
@@ -87,12 +86,11 @@ export class SourceMapsService {
87
86
  console.log(GRAY_COLOR, '🗑️ Deleting source maps...');
88
87
 
89
88
  try {
90
- await RumApi.deleteSourceMap(request, env, privateKey);
89
+ await SourceMapsApi.deleteSourceMap(request, env, privateKey);
91
90
 
92
91
  console.log(GREEN_COLOR, '✅ Source maps deleted successfully!');
93
92
  } catch (error) {
94
- console.log(RED_COLOR, '❌ An error occurred');
95
- console.error(RED_COLOR, error);
93
+ consoleError(error);
96
94
  }
97
95
  }
98
96
  }
@@ -0,0 +1,176 @@
1
+ import * as fs from 'fs';
2
+ import { Dirent, promises as fsPromises } from 'fs';
3
+ import * as path from 'path';
4
+ import zlib from 'zlib';
5
+ import { consoleError } from './shared.utils';
6
+ import { UploadBlobRequest } from '../proto-models/com/coralogix/blobset/v2/blobset_service';
7
+ import { UploadSourceMapsRequest } from '../proto-models/com/coralogix/rum/v2/rum_source_map_service';
8
+ import config from '../config';
9
+ import pako from 'pako';
10
+ import { FileMetadata } from '../proto-models/com/coralogix/rum/v2/file';
11
+ import { RED_COLOR } from '../consts/consts';
12
+
13
+ const { readdir, stat, readFile } = fsPromises;
14
+
15
+ export class FileProcessor {
16
+ static async traverseDsymFolder(folderPath: string, request: UploadBlobRequest): Promise<void> {
17
+ try {
18
+ const processDsymFolder = async (dsymFolderPath: string) => {
19
+ const dwarfPath = await FileProcessor.getDwarfPath(dsymFolderPath);
20
+ const content = await readFile(dwarfPath);
21
+ const compressedContent = zlib.gzipSync(content);
22
+ request.data = new Uint8Array(compressedContent);
23
+ };
24
+
25
+ // Check if the folder itself is a .dSYM folder
26
+ if (folderPath.endsWith('.dSYM')) {
27
+ await processDsymFolder(folderPath);
28
+ return;
29
+ }
30
+
31
+ const files: Dirent[] = await readdir(folderPath, { withFileTypes: true });
32
+
33
+ for (const file of files) {
34
+ // Skip .DS_Store and hidden files
35
+ if (file.name === '.DS_Store' || file.name.startsWith('.')) {
36
+ continue;
37
+ }
38
+
39
+ const filePath: string = path.join(folderPath, file.name);
40
+
41
+ if (file.isDirectory()) {
42
+ if (file.name.endsWith('.dSYM')) {
43
+ await processDsymFolder(filePath);
44
+ return;
45
+ } else {
46
+ await FileProcessor.traverseDsymFolder(filePath, request);
47
+ }
48
+ }
49
+ }
50
+ } catch (error) {
51
+ consoleError(`Error traversing directory: ${JSON.stringify(error)}`);
52
+ }
53
+ }
54
+
55
+ static async traverseSourceMapsFolder(
56
+ folderPath: string,
57
+ fileExtension: string,
58
+ request: UploadBlobRequest,
59
+ ): Promise<number | undefined> {
60
+ try {
61
+ const stats = await stat(folderPath);
62
+
63
+ if (stats.isFile() && folderPath.endsWith(fileExtension)) {
64
+ return await this.processSourceMapSingleFile(folderPath, fileExtension, request);
65
+ } else if (stats.isDirectory()) {
66
+ return await this.processSourceMapDirectory(folderPath, fileExtension, request);
67
+ }
68
+ } catch (error) {
69
+ consoleError(`Error traversing directory: ${error}`);
70
+ }
71
+ }
72
+
73
+ private static async processSourceMapSingleFile(filePath: string, fileExtension: string, request: UploadBlobRequest): Promise<number> {
74
+ try {
75
+ const content = await readFile(filePath);
76
+
77
+ const { name } = path.parse(filePath);
78
+
79
+ const fileData = { name, content: content.toString('base64') };
80
+
81
+ const compressedContent = zlib.gzipSync(Buffer.from(JSON.stringify([fileData])));
82
+
83
+ request.data = new Uint8Array(compressedContent);
84
+
85
+ return 1;
86
+ } catch (error) {
87
+ consoleError(`Error processing file: ${error}`);
88
+ throw error;
89
+ }
90
+ }
91
+
92
+ private static async processSourceMapDirectory(folderPath: string, fileExtension: string, request: UploadBlobRequest): Promise<number> {
93
+ const files = await readdir(folderPath, { withFileTypes: true });
94
+ const fileDataList: { name: string; content: string }[] = [];
95
+
96
+ for (const dirent of files) {
97
+ const filePath = path.join(folderPath, dirent.name);
98
+
99
+ if (dirent.isFile() && dirent.name.endsWith(fileExtension)) {
100
+ const content = await readFile(filePath);
101
+ const { name } = path.parse(filePath);
102
+ fileDataList.push({ name, content: content.toString('base64') });
103
+ } else if (dirent.isDirectory()) {
104
+ await this.traverseSourceMapsFolder(filePath, fileExtension, request);
105
+ }
106
+ }
107
+
108
+ const compressedContent = zlib.gzipSync(Buffer.from(JSON.stringify(fileDataList)));
109
+
110
+ request.data = new Uint8Array(compressedContent);
111
+
112
+ return fileDataList.length;
113
+ }
114
+
115
+ private static async getDwarfPath(dsymPath: string): Promise<string> {
116
+ const dwarfPath: string = 'Contents/Resources/DWARF';
117
+ const targetPath: string = path.join(dsymPath, dwarfPath);
118
+ const files = fs.readdirSync(targetPath);
119
+ if (files.length === 1) {
120
+ return path.join(dsymPath, dwarfPath, files[0]);
121
+ } else {
122
+ consoleError(`Expected exactly one file in the directory, but found: ${files.length}`);
123
+ return '';
124
+ }
125
+ }
126
+
127
+ static async traverseSourceMapsFolderOld(folderPath: string, request: UploadSourceMapsRequest): Promise<void> {
128
+ const stack: string[] = [folderPath];
129
+
130
+ while (stack.length) {
131
+ const currentPath = stack.pop();
132
+ const entries: Dirent[] = await readdir(currentPath!, { withFileTypes: true });
133
+
134
+ await Promise.all(
135
+ entries.map(async (file: Dirent) => {
136
+ const { name } = file;
137
+ const entryPath = path.join(currentPath as string, name);
138
+ const isCorrectSuffix = file.isFile() && name.endsWith('.js.map');
139
+
140
+ if (file.isDirectory()) stack.push(entryPath);
141
+ else if (isCorrectSuffix) request.files.push(await FileProcessor.getFileMetadata(entryPath));
142
+ }),
143
+ );
144
+ }
145
+ }
146
+
147
+ static compressFileContentChunks(fileContent: Uint8Array): Uint8Array {
148
+ const { chunkSize } = config.rumApi; // 512 KB chunk size
149
+ const deflate = new pako.Deflate();
150
+ const totalChunks = Math.ceil(fileContent.length / chunkSize);
151
+
152
+ for (let i = 0; i < totalChunks; i++) {
153
+ const start = i * chunkSize;
154
+ const end = start + chunkSize;
155
+ const chunk = fileContent.subarray(start, end);
156
+
157
+ const isLastChunk = i === totalChunks - 1;
158
+
159
+ deflate.push(chunk, isLastChunk);
160
+ }
161
+
162
+ const { err, msg, result } = deflate;
163
+
164
+ if (err) console.error(RED_COLOR, msg);
165
+
166
+ return result;
167
+ }
168
+
169
+ private static async getFileMetadata(filePath: string): Promise<FileMetadata> {
170
+ const { size } = await stat(filePath);
171
+ const { name } = path.parse(filePath);
172
+ const content = await readFile(filePath);
173
+
174
+ return { chunkName: name, size, content };
175
+ }
176
+ }
@@ -0,0 +1,52 @@
1
+ import { MB, RED_COLOR, STREAM_CHUNK_SIZE } from '../consts/consts';
2
+ import { UploadBlobRequest } from '../proto-models/com/coralogix/blobset/v2/blobset_service';
3
+
4
+ export async function* createUploadBlobRequestChunks(request: UploadBlobRequest) {
5
+ const { data } = request;
6
+
7
+ if (!data) return;
8
+
9
+ for (let i = 0; i < data.length; i += STREAM_CHUNK_SIZE) {
10
+ yield {
11
+ ...request,
12
+ data: data.subarray(i, i + STREAM_CHUNK_SIZE),
13
+ };
14
+ }
15
+ }
16
+
17
+ export const consoleError = (message: any): void => {
18
+ console.log(RED_COLOR, '❌ An error occurred');
19
+ console.error(RED_COLOR, message);
20
+ };
21
+
22
+ export const checkMissingArguments = <T>(options: T, requiredArgs: (keyof T)[]): void => {
23
+ const missingArgs: string[] = [];
24
+
25
+ requiredArgs.forEach((arg: keyof T) => {
26
+ if (!options[arg]) missingArgs.push(arg as string);
27
+ });
28
+
29
+ if (missingArgs.length > 0) {
30
+ const missingArgsList = missingArgs.map(arg => `- ${arg}`).join('\n');
31
+ const errorMessage = `❌ Missing required arguments:\n${missingArgsList}\nPlease provide the necessary options`;
32
+ console.error(RED_COLOR, errorMessage);
33
+ process.exit(1);
34
+ }
35
+ };
36
+
37
+ export const validateCompressedFilesSize = (compressedFilesSize: number, maxCompressedFilesSize: number): void => {
38
+ if (compressedFilesSize > maxCompressedFilesSize) {
39
+ // Convert sizes to megabytes (MB)
40
+ const compressedFilesSizeMB: string = (compressedFilesSize / MB).toFixed(2);
41
+ const maxCompressedFilesSizeMB: string = (maxCompressedFilesSize / MB).toFixed(2);
42
+
43
+ const errorMessage = `
44
+ ❌ Error: The total size of compressed files exceeds the maximum allowed size.
45
+ Total Compressed Files Size: ${compressedFilesSizeMB} MB
46
+ Maximum Allowed Size: ${maxCompressedFilesSizeMB} MB
47
+ `;
48
+
49
+ console.error(RED_COLOR, errorMessage);
50
+ process.exit(1);
51
+ }
52
+ };
@@ -1,7 +0,0 @@
1
- import { updateCommand } from './update-source-maps-command';
2
- import { uploadCommand } from './upload-source-maps-command';
3
- import { deleteCommand } from './delete-source-maps-command';
4
-
5
- const commands = { uploadCommand, updateCommand, deleteCommand };
6
-
7
- export default commands;
@@ -1,104 +0,0 @@
1
- "use strict";
2
- var __awaiter = (this && this.__awaiter) || function (thisArg, _arguments, P, generator) {
3
- function adopt(value) { return value instanceof P ? value : new P(function (resolve) { resolve(value); }); }
4
- return new (P || (P = Promise))(function (resolve, reject) {
5
- function fulfilled(value) { try { step(generator.next(value)); } catch (e) { reject(e); } }
6
- function rejected(value) { try { step(generator["throw"](value)); } catch (e) { reject(e); } }
7
- function step(result) { result.done ? resolve(result.value) : adopt(result.value).then(fulfilled, rejected); }
8
- step((generator = generator.apply(thisArg, _arguments || [])).next());
9
- });
10
- };
11
- var __importDefault = (this && this.__importDefault) || function (mod) {
12
- return (mod && mod.__esModule) ? mod : { "default": mod };
13
- };
14
- Object.defineProperty(exports, "__esModule", { value: true });
15
- exports.RumApi = void 0;
16
- const nice_grpc_1 = require("nice-grpc");
17
- const config_1 = __importDefault(require("../config/config"));
18
- const rum_source_map_service_1 = require("../proto-models/com/coralogix/rum/v2/rum_source_map_service");
19
- const utils_1 = require("../utils");
20
- const consts_1 = require("../consts/consts");
21
- class RumApi {
22
- static getGrpcClient(env) {
23
- const { maxMessageSize, keepaliveTimeMs, keepaliveTimeoutMs } = config_1.default.rumApi;
24
- const channel = (0, nice_grpc_1.createChannel)(consts_1.envToDomain[env], undefined, {
25
- 'grpc.max_receive_message_length': maxMessageSize,
26
- 'grpc.max_send_message_length': maxMessageSize,
27
- 'grpc.keepalive_time_ms': keepaliveTimeMs,
28
- 'grpc.keepalive_timeout_ms': keepaliveTimeoutMs,
29
- });
30
- return (0, nice_grpc_1.createClient)(rum_source_map_service_1.RumSourceMapServiceDefinition, channel);
31
- }
32
- static uploadSourceMaps(request, env, privateKey) {
33
- return __awaiter(this, void 0, void 0, function* () {
34
- try {
35
- const client = this.getGrpcClient(env);
36
- const { files, releaseId, application, repoName, commitHash, user } = request;
37
- const compressedFiles = yield Promise.all(files.map((file) => __awaiter(this, void 0, void 0, function* () {
38
- const content = (0, utils_1.compressFileContentChunks)(file.content);
39
- const size = content.length;
40
- const chunkName = file.chunkName;
41
- return { chunkName, size, content };
42
- })));
43
- (0, utils_1.validateCompressedFilesSize)(compressedFiles, config_1.default.rumApi.maxCompressedFilesSize);
44
- const metadata = new nice_grpc_1.Metadata();
45
- metadata.set('Authorization', `Bearer ${privateKey}`);
46
- yield client.uploadSourceMaps({
47
- files: compressedFiles,
48
- releaseId,
49
- application,
50
- repoName,
51
- commitHash,
52
- user,
53
- }, { metadata });
54
- }
55
- catch (error) {
56
- throw error;
57
- }
58
- });
59
- }
60
- static updateSourceMap(request, env, privateKey) {
61
- return __awaiter(this, void 0, void 0, function* () {
62
- try {
63
- const client = this.getGrpcClient(env);
64
- const { files, releaseId, application, repoName, commitHash, user, generate } = request;
65
- const compressedFiles = yield Promise.all(files.map((file) => __awaiter(this, void 0, void 0, function* () {
66
- const content = (0, utils_1.compressFileContentChunks)(file.content);
67
- const size = content.length;
68
- const chunkName = file.chunkName;
69
- return { chunkName, size, content };
70
- })));
71
- (0, utils_1.validateCompressedFilesSize)(compressedFiles, config_1.default.rumApi.maxCompressedFilesSize);
72
- const metadata = new nice_grpc_1.Metadata();
73
- metadata.set('Authorization', `Bearer ${privateKey}`);
74
- yield client.updateSourceMap({
75
- files: compressedFiles,
76
- releaseId,
77
- application,
78
- repoName,
79
- commitHash,
80
- user,
81
- generate: (generate === null || generate === void 0 ? void 0 : generate.toString()) || undefined
82
- }, { metadata });
83
- }
84
- catch (error) {
85
- throw error;
86
- }
87
- });
88
- }
89
- static deleteSourceMap(request, env, privateKey) {
90
- return __awaiter(this, void 0, void 0, function* () {
91
- try {
92
- const client = this.getGrpcClient(env);
93
- const metadata = new nice_grpc_1.Metadata();
94
- metadata.set('Authorization', `Bearer ${privateKey}`);
95
- yield client.deleteSourceMap(request, { metadata });
96
- }
97
- catch (error) {
98
- throw error;
99
- }
100
- });
101
- }
102
- }
103
- exports.RumApi = RumApi;
104
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoicnVtLWFwaS5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uL2FwaS9ydW0tYXBpLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiI7Ozs7Ozs7Ozs7Ozs7OztBQUFBLHlDQUEwRTtBQUMxRSw4REFBc0M7QUFDdEMsd0dBS3FFO0FBQ3JFLG9DQUFrRjtBQUNsRiw2Q0FBK0M7QUFHL0MsTUFBYSxNQUFNO0lBQ1QsTUFBTSxDQUFDLGFBQWEsQ0FBQyxHQUFXO1FBQ3RDLE1BQU0sRUFBRSxjQUFjLEVBQUUsZUFBZSxFQUFFLGtCQUFrQixFQUFFLEdBQUcsZ0JBQU0sQ0FBQyxNQUFNLENBQUM7UUFFOUUsTUFBTSxPQUFPLEdBQUcsSUFBQSx5QkFBYSxFQUFDLG9CQUFXLENBQUMsR0FBRyxDQUFDLEVBQUUsU0FBUyxFQUFFO1lBQ3pELGlDQUFpQyxFQUFFLGNBQWM7WUFDakQsOEJBQThCLEVBQUUsY0FBYztZQUM5Qyx3QkFBd0IsRUFBRSxlQUFlO1lBQ3pDLDJCQUEyQixFQUFFLGtCQUFrQjtTQUNoRCxDQUFDLENBQUM7UUFFSCxPQUFPLElBQUEsd0JBQVksRUFBQyxzREFBNkIsRUFBRSxPQUFPLENBQUMsQ0FBQztJQUM5RCxDQUFDO0lBRUQsTUFBTSxDQUFPLGdCQUFnQixDQUFDLE9BQWdDLEVBQUUsR0FBVyxFQUFFLFVBQWtCOztZQUM3RixJQUFJO2dCQUNGLE1BQU0sTUFBTSxHQUFpRCxJQUFJLENBQUMsYUFBYSxDQUFDLEdBQUcsQ0FBQyxDQUFDO2dCQUVyRixNQUFNLEVBQUUsS0FBSyxFQUFFLFNBQVMsRUFBRSxXQUFXLEVBQUUsUUFBUSxFQUFFLFVBQVUsRUFBRSxJQUFJLEVBQUUsR0FBRyxPQUFPLENBQUM7Z0JBRTlFLE1BQU0sZUFBZSxHQUFtQixNQUFNLE9BQU8sQ0FBQyxHQUFHLENBQ3ZELEtBQUssQ0FBQyxHQUFHLENBQUMsQ0FBTyxJQUFrQixFQUFFLEVBQUU7b0JBQ3JDLE1BQU0sT0FBTyxHQUFHLElBQUEsaUNBQXlCLEVBQUMsSUFB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RSxDQUFDLENBQUM7Z0JBRXRELE1BQU0sTUFBTSxDQUFDLGVBQWUsQ0FBQyxPQUFPLEVBQUUsRUFBRSxRQUFRLEVBQUUsQ0FBQyxDQUFDO2FBQ3JEO1lBQUMsT0FBTyxLQUFLLEVBQUU7Z0JBQ2QsTUFBTSxLQUFLLENBQUM7YUFDYjtRQUNILENBQUM7S0FBQTtDQUNGO0FBdEdELHdCQXNHQyIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IENsaWVudCwgY3JlYXRlQ2hhbm5lbCwgY3JlYXRlQ2xpZW50LCBNZXRhZGF0YSB9IGZyb20gJ25pY2UtZ3JwYyc7XG5pbXBvcnQgY29uZmlnIGZyb20gJy4uL2NvbmZpZy9jb25maWcnO1xuaW1wb3J0IHtcbiAgRGVsZXRlU291cmNlTWFwUmVxdWVzdCxcbiAgUnVtU291cmNlTWFwU2VydmljZURlZmluaXRpb24sXG4gIFVwZGF0ZVNvdXJjZU1hcFJlcXVlc3QsXG4gIFVwbG9hZFNvdXJjZU1hcHNSZXF1ZXN0LFxufSBmcm9tICcuLi9wcm90by1tb2RlbHMvY29tL2NvcmFsb2dpeC9ydW0vdjIvcnVtX3NvdXJjZV9tYXBfc2VydmljZSc7XG5pbXBvcnQgeyBjb21wcmVzc0ZpbGVDb250ZW50Q2h1bmtzLCB2YWxpZGF0ZUNvbXByZXNzZWRGaWxlc1NpemUgfSBmcm9tICcuLi91dGlscyc7XG5pbXBvcnQgeyBlbnZUb0RvbWFpbiB9IGZyb20gJy4uL2NvbnN0cy9jb25zdHMnO1xuaW1wb3J0IHsgRmlsZU1ldGFkYXRhIH0gZnJvbSAnLi4vcHJvdG8tbW9kZWxzL2NvbS9jb3JhbG9naXgvcnVtL3YyL2ZpbGUnO1xuXG5leHBvcnQgY2xhc3MgUnVtQXBpIHtcbiAgcHJpdmF0ZSBzdGF0aWMgZ2V0R3JwY0NsaWVudChlbnY6IHN0cmluZykge1xuICAgIGNvbnN0IHsgbWF4TWVzc2FnZVNpemUsIGtlZXBhbGl2ZVRpbWVNcywga2VlcGFsaXZlVGltZW91dE1zIH0gPSBjb25maWcucnVtQXBpO1xuXG4gICAgY29uc3QgY2hhbm5lbCA9IGNyZWF0ZUNoYW5uZWwoZW52VG9Eb21haW5bZW52XSwgdW5kZWZpbmVkLCB7XG4gICAgICAnZ3JwYy5tYXhfcmVjZWl2ZV9tZXNzYWdlX2xlbmd0aCc6IG1heE1lc3NhZ2VTaXplLFxuICAgICAgJ2dycGMubWF4X3NlbmRfbWVzc2FnZV9sZW5ndGgnOiBtYXhNZXNzYWdlU2l6ZSxcbiAgICAgICdncnBjLmtlZXBhbGl2ZV90aW1lX21zJzoga2VlcGFsaXZlVGltZU1zLFxuICAgICAgJ2dycGMua2VlcGFsaXZlX3RpbWVvdXRfbXMnOiBrZWVwYWxpdmVUaW1lb3V0TXMsXG4gICAgfSk7XG5cbiAgICByZXR1cm4gY3JlYXRlQ2xpZW50KFJ1bVNvdXJjZU1hcFNlcnZpY2VEZWZpbml0aW9uLCBjaGFubmVsKTtcbiAgfVxuXG4gIHN0YXRpYyBhc3luYyB1cGxvYWRTb3VyY2VNYXBzKHJlcXVlc3Q6IFVwbG9hZFNvdXJjZU1hcHNSZXF1ZXN0LCBlbnY6IHN0cmluZywgcHJpdmF0ZUtleTogc3RyaW5nKSB7XG4gICAgdHJ5IHtcbiAgICAgIGNvbnN0IGNsaWVudDogQ2xpZW50PHR5cGVvZiBSdW1Tb3VyY2VNYXBTZXJ2aWNlRGVmaW5pdGlvbj4gPSB0aGlzLmdldEdycGNDbGllbnQoZW52KTtcblxuICAgICAgY29uc3QgeyBmaWxlcywgcmVsZWFzZUlkLCBhcHBsaWNhdGlvbiwgcmVwb05hbWUsIGNvbW1pdEhhc2gsIHVzZXIgfSA9IHJlcXVlc3Q7XG5cbiAgICAgIGNvbnN0IGNvbXByZXNzZWRGaWxlczogRmlsZU1ldGFkYXRhW10gPSBhd2FpdCBQcm9taXNlLmFsbChcbiAgICAgICAgZmlsZXMubWFwKGFzeW5jIChmaWxlOiBGaWxlTWV0YWRhdGEpID0+IHtcbiAgICAgICAgICBjb25zdCBjb250ZW50ID0gY29tcHJlc3NGaWxlQ29udGVudENodW5rcyhmaWxlLmNvbnRlbnQpO1xuICAgICAgICAgIGNvbnN0IHNpemUgPSBjb250ZW50Lmxlbmd0aDtcbiAgICAgICAgICBjb25zdCBjaHVua05hbWUgPSBmaWxlLmNodW5rTmFtZTtcbiAgICAgICAgICByZXR1cm4geyBjaHVua05hbWUsIHNpemUsIGNvbnRlbnQgfTtcbiAgICAgICAgfSksXG4gICAgICApO1xuXG4gICAgICB2YWxpZGF0ZUNvbXByZXNzZWRGaWxlc1NpemUoY29tcHJlc3NlZEZpbGVzLCBjb25maWcucnVtQXBpLm1heENvbXByZXNzZWRGaWxlc1NpemUpO1xuXG4gICAgICBjb25zdCBtZXRhZGF0YSA9IG5ldyBNZXRhZGF0YSgpO1xuXG4gICAgICBtZXRhZGF0YS5zZXQoJ0F1dGhvcml6YXRpb24nLCBgQmVhcmVyICR7cHJpdmF0ZUtleX1gKTtcblxuICAgICAgYXdhaXQgY2xpZW50LnVwbG9hZFNvdXJjZU1hcHMoXG4gICAgICAgIHtcbiAgICAgICAgICBmaWxlczogY29tcHJlc3NlZEZpbGVzLFxuICAgICAgICAgIHJlbGVhc2VJZCxcbiAgICAgICAgICBhcHBsaWNhdGlvbixcbiAgICAgICAgICByZXBvTmFtZSxcbiAgICAgICAgICBjb21taXRIYXNoLFxuICAgICAgICAgIHVzZXIsXG4gICAgICAgIH0sXG4gICAgICAgIHsgbWV0YWRhdGEgfSxcbiAgICAgICk7XG4gICAgfSBjYXRjaCAoZXJyb3IpIHtcbiAgICAgIHRocm93IGVycm9yO1xuICAgIH1cbiAgfVxuXG4gIHN0YXRpYyBhc3luYyB1cGRhdGVTb3VyY2VNYXAocmVxdWVzdDogVXBkYXRlU291cmNlTWFwUmVxdWVzdCwgZW52OiBzdHJpbmcsIHByaXZhdGVLZXk6IHN0cmluZykge1xuICAgIHRyeSB7XG4gICAgICBjb25zdCBjbGllbnQ6IENsaWVudDx0eXBlb2YgUnVtU291cmNlTWFwU2VydmljZURlZmluaXRpb24+ID0gdGhpcy5nZXRHcnBjQ2xpZW50KGVudik7XG5cbiAgICAgIGNvbnN0IHsgZmlsZXMsIHJlbGVhc2VJZCwgYXBwbGljYXRpb24sIHJlcG9OYW1lLCBjb21taXRIYXNoLCB1c2VyLCBnZW5lcmF0ZSB9ID0gcmVxdWVzdDtcblxuICAgICAgY29uc3QgY29tcHJlc3NlZEZpbGVzOiBGaWxlTWV0YWRhdGFbXSA9IGF3YWl0IFByb21pc2UuYWxsKFxuICAgICAgICBmaWxlcy5tYXAoYXN5bmMgKGZpbGU6IEZpbGVNZXRhZGF0YSkgPT4ge1xuICAgICAgICAgIGNvbnN0IGNvbnRlbnQgPSBjb21wcmVzc0ZpbGVDb250ZW50Q2h1bmtzKGZpbGUuY29udGVudCk7XG4gICAgICAgICAgY29uc3Qgc2l6ZSA9IGNvbnRlbnQubGVuZ3RoO1xuICAgICAgICAgIGNvbnN0IGNodW5rTmFtZSA9IGZpbGUuY2h1bmtOYW1lO1xuICAgICAgICAgIHJldHVybiB7IGNodW5rTmFtZSwgc2l6ZSwgY29udGVudCB9O1xuICAgICAgICB9KSxcbiAgICAgICk7XG5cbiAgICAgIHZhbGlkYXRlQ29tcHJlc3NlZEZpbGVzU2l6ZShjb21wcmVzc2VkRmlsZXMsIGNvbmZpZy5ydW1BcGkubWF4Q29tcHJlc3NlZEZpbGVzU2l6ZSk7XG5cbiAgICAgIGNvbnN0IG1ldGFkYXRhID0gbmV3IE1ldGFkYXRhKCk7XG5cbiAgICAgIG1ldGFkYXRhLnNldCgnQXV0aG9yaXphdGlvbicsIGBCZWFyZXIgJHtwcml2YXRlS2V5fWApO1xuXG4gICAgICBhd2FpdCBjbGllbnQudXBkYXRlU291cmNlTWFwKFxuICAgICAgICB7XG4gICAgICAgICAgZmlsZXM6IGNvbXByZXNzZWRGaWxlcyxcbiAgICAgICAgICByZWxlYXNlSWQsXG4gICAgICAgICAgYXBwbGljYXRpb24sXG4gICAgICAgICAgcmVwb05hbWUsXG4gICAgICAgICAgY29tbWl0SGFzaCxcbiAgICAgICAgICB1c2VyLFxuICAgICAgICAgIGdlbmVyYXRlOiBnZW5lcmF0ZT8udG9TdHJpbmcoKSB8fCB1bmRlZmluZWRcbiAgICAgICAgfSxcbiAgICAgICAgeyBtZXRhZGF0YSB9LFxuICAgICAgKTtcbiAgICB9IGNhdGNoIChlcnJvcikge1xuICAgICAgdGhyb3cgZXJyb3I7XG4gICAgfVxuICB9XG5cbiAgc3RhdGljIGFzeW5jIGRlbGV0ZVNvdXJjZU1hcChyZXF1ZXN0OiBEZWxldGVTb3VyY2VNYXBSZXF1ZXN0LCBlbnY6IHN0cmluZywgcHJpdmF0ZUtleTogc3RyaW5nKSB7XG4gICAgdHJ5IHtcbiAgICAgIGNvbnN0IGNsaWVudDogQ2xpZW50PHR5cGVvZiBSdW1Tb3VyY2VNYXBTZXJ2aWNlRGVmaW5pdGlvbj4gPSB0aGlzLmdldEdycGNDbGllbnQoZW52KTtcblxuICAgICAgY29uc3QgbWV0YWRhdGEgPSBuZXcgTWV0YWRhdGEoKTtcblxuICAgICAgbWV0YWRhdGEuc2V0KCdBdXRob3JpemF0aW9uJywgYEJlYXJlciAke3ByaXZhdGVLZXl9YCk7XG5cbiAgICAgIGF3YWl0IGNsaWVudC5kZWxldGVTb3VyY2VNYXAocmVxdWVzdCwgeyBtZXRhZGF0YSB9KTtcbiAgICB9IGNhdGNoIChlcnJvcikge1xuICAgICAgdGhyb3cgZXJyb3I7XG4gICAgfVxuICB9XG59XG4iXX0=
@@ -1,2 +0,0 @@
1
- import { Command } from 'commander';
2
- export declare const deleteCommand: () => Command;