@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
package/README.md CHANGED
@@ -1,6 +1,6 @@
1
1
  # Official Coralogix RUM CLI
2
2
 
3
- The Coralogix RUM CLI is a command-line interface tool that simplifies the process of uploading source maps for your applications to the Coralogix RUM service. This CLI tool provides an easy and efficient way to authenticate with the Coralogix API, specify the application and application version information, and traverse a folder to upload the relevant source map files.
3
+ The Coralogix RUM CLI is a command-line interface tool that simplifies the process of uploading rum data . This CLI tool provides an easy and efficient way to authenticate with the Coralogix API.
4
4
 
5
5
  [![npm version](https://img.shields.io/npm/v/@coralogix/browser.svg)](https://www.npmjs.com/package/@coralogix/browser)
6
6
 
@@ -23,27 +23,36 @@ To install the Coralogix RUM CLI, follow these steps:
23
23
 
24
24
  Here are some examples of how to use the Coralogix RUM CLI:
25
25
 
26
- 1. Create source maps:
26
+ ### Web:
27
+
28
+ 1. Upload source maps:
27
29
 
28
30
  - `coralogix-rum-cli upload-source-maps -k <privateKey> -a <application> -v <version> -f <folderPath> -e <env> -c <commitHash> -n <repoName> -o <orgName>`
29
31
 
30
32
  2. Delete source maps:
31
33
 
32
- - `coralogix-rum-cli delete-source-maps -k <privateKey> -a <application> -v <version> -e <env>`
34
+ - `coralogix-rum-cli delete-source-maps -k <privateKey> -a <application> -v <version> -e <env>`
33
35
 
34
36
  3. Update existing source maps:
35
37
 
36
- - `coralogix-rum-cli update-source-maps -k <privateKey> -a <application> -v <version> -f <folderPath> -e <env> -c <commitHash> -n <repoName> -o <orgName>`
38
+ - `coralogix-rum-cli update-source-maps -k <privateKey> -a <application> -v <version> -f <folderPath> -e <env> -c <commitHash> -n <repoName> -o <orgName>`
37
39
 
38
40
  4. Update existing source maps or create a new one if not found:
39
41
 
40
42
  - `coralogix-rum-cli update-source-maps -k <privateKey> -a <application> -v <version> -f <folderPath> -e <env> -c <commitHash> -n <repoName> -o <orgName> -g`
43
+
44
+ ### React Native:
41
45
 
42
- 5. Display help for upload command:
46
+ 1. Upload React Native source maps:
47
+
48
+ - `coralogix-rum-cli upload-react-native-source-maps -k <privateKey> -a <application> -v <version> -f <folderPath> -e <env> -c <commitHash> -n <repoName> -o <orgName>`
49
+
50
+ ### iOS:
51
+
52
+ 1. Upload dSYM files:
53
+
54
+ - `coralogix-rum-cli upload-dsym -k <privateKey> -a <application> -v <version> -f <folderPath> -e <env> -c <commitHash> -n <repoName> -o <orgName>`
43
55
 
44
- - `coralogix-rum-cli upload-source-maps --help`
45
-
46
-
47
56
  ## Options
48
57
 
49
58
  - `-k, --private-key <privateKey>`: Private key to authenticate with the Coralogix API.
@@ -71,9 +80,23 @@ The Coralogix RUM CLI supports the following environments:
71
80
 
72
81
  Please use the appropriate environment value when specifying the `-e, --env` option.
73
82
 
83
+ ## React Native Source maps folder size limit
84
+
85
+ The source map folder size limit is 200MB in this project. Please ensure that it does not exceed this limit.
86
+
74
87
  ## Source maps folder size limit
75
88
 
76
- The source map folder size limit is 100MB in this project. Please ensure that it does not exceed this limit.
89
+ The source map folder size limit is 200MB in this project. Please ensure that it does not exceed this limit.
90
+
91
+ ## Dsym folder size limit
92
+
93
+ The dsym folder size limit is 500MB in this project. Please ensure that it does not exceed this limit.
94
+
95
+
96
+ ## Folder Size Limits
97
+ - **Source Maps (including React Native)**: The source map folder size limit is 200MB. Please ensure that it does not exceed this limit.
98
+ - **dSYM**: The dSYM folder size limit is 400MB. Please ensure that it does not exceed this limit.
99
+
77
100
 
78
101
  ## Integration
79
102
 
@@ -0,0 +1,26 @@
1
+ import { createChannel, createClient } from 'nice-grpc';
2
+ import config from '../../config/config';
3
+ import { envToDomain } from '../../consts/consts';
4
+ import { BlobSetServiceDefinition } from '../../proto-models/com/coralogix/blobset/v2/blobset_service';
5
+ import { RumSourceMapServiceDefinition } from '../../proto-models/com/coralogix/rum/v2/rum_source_map_service';
6
+
7
+ export class ClientFactory {
8
+ private static getGrpcClient<T extends BlobSetServiceDefinition | RumSourceMapServiceDefinition>(serviceDefinition: T, env: string) {
9
+ const { dsymMaxMessageSize, keepaliveTimeMs, keepaliveTimeoutMs } = config.rumApi;
10
+ const channel = createChannel(envToDomain[env], undefined, {
11
+ 'grpc.max_receive_message_length': dsymMaxMessageSize,
12
+ 'grpc.max_send_message_length': dsymMaxMessageSize,
13
+ 'grpc.keepalive_time_ms': keepaliveTimeMs,
14
+ 'grpc.keepalive_timeout_ms': keepaliveTimeoutMs,
15
+ });
16
+ return createClient(serviceDefinition, channel);
17
+ }
18
+
19
+ static getBlobSetGrpcClient(env: string) {
20
+ return this.getGrpcClient(BlobSetServiceDefinition, env);
21
+ }
22
+
23
+ static getRumSourceMapGrpcClient(env: string) {
24
+ return this.getGrpcClient(RumSourceMapServiceDefinition, env);
25
+ }
26
+ }
@@ -0,0 +1,122 @@
1
+ import { EntityType } from '../../proto-models/com/coralogix/blobset/v2/entity_type';
2
+ import {
3
+ EntityMetadata,
4
+ DsymMetadata,
5
+ ReactNativeMetadata,
6
+ SourceMapMetadata,
7
+ } from '../../proto-models/com/coralogix/blobset/v2/entity_metadata';
8
+ import { CreateEntityReleaseRequest } from '../../proto-models/com/coralogix/rum/v2/rum_source_map_service';
9
+ import { ReleaseEntityMetadata } from '../../proto-models/com/coralogix/rum/v2/release_entity_metadata';
10
+ import { ReleaseEntityType } from '../../proto-models/com/coralogix/rum/v2/release_entity_type';
11
+ import { UploadBlobRequest } from '../../proto-models/com/coralogix/blobset/v2/blobset_service';
12
+
13
+ export class RequestBuilder {
14
+ private static createReactNativeMetadata(
15
+ application: string,
16
+ version: string,
17
+ repoName: string | undefined,
18
+ commitHash: string | undefined,
19
+ orgName: string | undefined,
20
+ ): { $case: 'reactNativeMetadata'; reactNativeMetadata: ReactNativeMetadata } {
21
+ return {
22
+ $case: 'reactNativeMetadata',
23
+ reactNativeMetadata: {
24
+ application,
25
+ releaseId: version,
26
+ repoName: repoName || '',
27
+ commitHash: commitHash || '',
28
+ orgName: orgName || '',
29
+ },
30
+ };
31
+ }
32
+
33
+ private static createDsymMetadata(
34
+ application: string,
35
+ version: string,
36
+ repoName: string | undefined,
37
+ commitHash: string | undefined,
38
+ orgName: string | undefined,
39
+ ): { $case: 'dsymMetadata'; dsymMetadata: DsymMetadata } {
40
+ return {
41
+ $case: 'dsymMetadata',
42
+ dsymMetadata: {
43
+ application,
44
+ releaseId: version,
45
+ repoName: repoName || '',
46
+ commitHash: commitHash || '',
47
+ orgName: orgName || '',
48
+ },
49
+ };
50
+ }
51
+
52
+ static buildUploadBlobRequest(
53
+ uploadBlobRequest: UploadBlobRequest,
54
+ entityType: EntityType,
55
+ metadata:
56
+ | { $case: 'reactNativeMetadata'; reactNativeMetadata: ReactNativeMetadata }
57
+ | { $case: 'dsymMetadata'; dsymMetadata: DsymMetadata }
58
+ | { $case: 'sourceMapMetadata'; sourceMapMetadata: SourceMapMetadata },
59
+ ): UploadBlobRequest {
60
+ const entityMetadata: EntityMetadata = { metadata };
61
+
62
+ return { ...uploadBlobRequest, entityType, entityMetadata };
63
+ }
64
+
65
+ static buildCreateEntityReleaseRequest(
66
+ releaseEntityType: ReleaseEntityType,
67
+ metadata:
68
+ | { $case: 'reactNativeMetadata'; reactNativeMetadata: ReactNativeMetadata }
69
+ | { $case: 'dsymMetadata'; dsymMetadata: DsymMetadata }
70
+ | { $case: 'sourceMapMetadata'; sourceMapMetadata: SourceMapMetadata },
71
+ ): CreateEntityReleaseRequest {
72
+ const releaseEntityMetadata: ReleaseEntityMetadata = { metadata };
73
+
74
+ return CreateEntityReleaseRequest.create({ releaseEntityType, releaseEntityMetadata });
75
+ }
76
+
77
+ static createReactNativeUploadBlobRequest(
78
+ uploadBlobRequest: UploadBlobRequest,
79
+ application: string,
80
+ version: string,
81
+ repoName: string | undefined,
82
+ commitHash: string | undefined,
83
+ orgName: string | undefined,
84
+ ): UploadBlobRequest {
85
+ const metadata = this.createReactNativeMetadata(application, version, repoName, commitHash, orgName);
86
+ return this.buildUploadBlobRequest(uploadBlobRequest, EntityType.ENTITY_TYPE_REACT_NATIVE, metadata);
87
+ }
88
+
89
+ static createDsymUploadBlobRequest(
90
+ uploadBlobRequest: UploadBlobRequest,
91
+ application: string,
92
+ version: string,
93
+ repoName: string | undefined,
94
+ commitHash: string | undefined,
95
+ orgName: string | undefined,
96
+ ): UploadBlobRequest {
97
+ const metadata = this.createDsymMetadata(application, version, repoName, commitHash, orgName);
98
+ return this.buildUploadBlobRequest(uploadBlobRequest, EntityType.ENTITY_TYPE_DSYM, metadata);
99
+ }
100
+
101
+ static createReactNativeReleaseRequest(
102
+ application: string,
103
+ version: string,
104
+ repoName: string | undefined,
105
+ commitHash: string | undefined,
106
+ orgName: string | undefined,
107
+ ): CreateEntityReleaseRequest {
108
+ const metadata = this.createReactNativeMetadata(application, version, repoName, commitHash, orgName);
109
+ return this.buildCreateEntityReleaseRequest(ReleaseEntityType.RELEASE_ENTITY_TYPE_REACT_NATIVE, metadata);
110
+ }
111
+
112
+ static createDsymReleaseRequest(
113
+ application: string,
114
+ version: string,
115
+ repoName: string | undefined,
116
+ commitHash: string | undefined,
117
+ orgName: string | undefined,
118
+ ): CreateEntityReleaseRequest {
119
+ const metadata = this.createDsymMetadata(application, version, repoName, commitHash, orgName);
120
+ return this.buildCreateEntityReleaseRequest(ReleaseEntityType.RELEASE_ENTITY_TYPE_DSYM, metadata);
121
+ }
122
+ }
@@ -0,0 +1,61 @@
1
+ import { Client, Metadata } from 'nice-grpc';
2
+ import config from '../config/config';
3
+ import { BlobSetServiceDefinition, UploadBlobRequest } from '../proto-models/com/coralogix/blobset/v2/blobset_service';
4
+ import { consoleError, createUploadBlobRequestChunks, validateCompressedFilesSize } from '../utils/shared.utils';
5
+ import { ReleaseEntityType } from '../proto-models/com/coralogix/rum/v2/release_entity_type';
6
+ import { ClientFactory } from './client/client-factory';
7
+ import { RumSourceMapServiceDefinition } from '../proto-models/com/coralogix/rum/v2/rum_source_map_service';
8
+ import { RequestBuilder } from './client/request-builder';
9
+
10
+ export class DsymApi {
11
+ static async uploadDsym(
12
+ uploadBlobRequest: UploadBlobRequest,
13
+ application: string,
14
+ version: string,
15
+ repoName: string | undefined,
16
+ commitHash: string | undefined,
17
+ orgName: string | undefined,
18
+ env: string,
19
+ privateKey: string,
20
+ ) {
21
+ try {
22
+ const blobSetClient: Client<typeof BlobSetServiceDefinition> = ClientFactory.getBlobSetGrpcClient(env);
23
+ const rumSourceMapClient: Client<typeof RumSourceMapServiceDefinition> = ClientFactory.getRumSourceMapGrpcClient(env);
24
+
25
+ const metadata = new Metadata();
26
+ metadata.set('Authorization', `Bearer ${privateKey}`);
27
+
28
+ validateCompressedFilesSize(uploadBlobRequest.data.length, config.rumApi.reactNativeMaxCompressedFilesSize);
29
+
30
+ const { exists } = await rumSourceMapClient.isEntityReleaseExists(
31
+ { releaseId: version, application, releaseEntityType: ReleaseEntityType.RELEASE_ENTITY_TYPE_DSYM },
32
+ { metadata },
33
+ );
34
+
35
+ if (exists) {
36
+ consoleError(`Entity release already exists for releaseId: ${version} and application: ${application}`);
37
+ return;
38
+ }
39
+
40
+ const updatedUploadBlobRequest = RequestBuilder.createDsymUploadBlobRequest(
41
+ uploadBlobRequest,
42
+ application,
43
+ version,
44
+ repoName,
45
+ commitHash,
46
+ orgName,
47
+ );
48
+
49
+ const iterableRequest = createUploadBlobRequestChunks(updatedUploadBlobRequest);
50
+
51
+ await blobSetClient.uploadBlob(iterableRequest, { metadata });
52
+
53
+ const uploadEntityReleaseRequest = RequestBuilder.createDsymReleaseRequest(application, version, repoName, commitHash, orgName);
54
+
55
+ await rumSourceMapClient.createEntityRelease(uploadEntityReleaseRequest, { metadata });
56
+ } catch (error) {
57
+ consoleError(`Failed to upload dSYMs: ${error}`);
58
+ throw error;
59
+ }
60
+ }
61
+ }
@@ -0,0 +1,67 @@
1
+ import { Client, Metadata } from 'nice-grpc';
2
+ import config from '../config/config';
3
+ import { BlobSetServiceDefinition, UploadBlobRequest } from '../proto-models/com/coralogix/blobset/v2/blobset_service';
4
+ import { consoleError, createUploadBlobRequestChunks, validateCompressedFilesSize } from '../utils/shared.utils';
5
+ import { ReleaseEntityType } from '../proto-models/com/coralogix/rum/v2/release_entity_type';
6
+ import { ClientFactory } from './client/client-factory';
7
+ import { RumSourceMapServiceDefinition } from '../proto-models/com/coralogix/rum/v2/rum_source_map_service';
8
+ import { RequestBuilder } from './client/request-builder';
9
+
10
+ export class ReactNativeApi {
11
+ static async uploadReactNativeSourceMaps(
12
+ uploadBlobRequest: UploadBlobRequest,
13
+ application: string,
14
+ version: string,
15
+ repoName: string | undefined,
16
+ commitHash: string | undefined,
17
+ orgName: string | undefined,
18
+ env: string,
19
+ privateKey: string,
20
+ ) {
21
+ try {
22
+ const blobSetClient: Client<typeof BlobSetServiceDefinition> = ClientFactory.getBlobSetGrpcClient(env);
23
+ const rumSourceMapClient: Client<typeof RumSourceMapServiceDefinition> = ClientFactory.getRumSourceMapGrpcClient(env);
24
+
25
+ const metadata = new Metadata();
26
+ metadata.set('Authorization', `Bearer ${privateKey}`);
27
+
28
+ validateCompressedFilesSize(uploadBlobRequest.data.length, config.rumApi.dsymMaxCompressedFilesSize);
29
+
30
+ const { exists } = await rumSourceMapClient.isEntityReleaseExists(
31
+ { releaseId: version, application, releaseEntityType: ReleaseEntityType.RELEASE_ENTITY_TYPE_REACT_NATIVE },
32
+ { metadata },
33
+ );
34
+
35
+ if (exists) {
36
+ consoleError(`Entity release already exists for releaseId: ${version} and application: ${application}`);
37
+ return;
38
+ }
39
+
40
+ const updatedUploadBlobRequest = RequestBuilder.createReactNativeUploadBlobRequest(
41
+ uploadBlobRequest,
42
+ application,
43
+ version,
44
+ repoName,
45
+ commitHash,
46
+ orgName,
47
+ );
48
+
49
+ const iterableRequest = createUploadBlobRequestChunks(updatedUploadBlobRequest);
50
+
51
+ await blobSetClient.uploadBlob(iterableRequest, { metadata });
52
+
53
+ const uploadEntityReleaseRequest = RequestBuilder.createReactNativeReleaseRequest(
54
+ application,
55
+ version,
56
+ repoName,
57
+ commitHash,
58
+ orgName,
59
+ );
60
+
61
+ await rumSourceMapClient.createEntityRelease(uploadEntityReleaseRequest, { metadata });
62
+ } catch (error) {
63
+ consoleError(`Failed to upload react native source maps: ${error}`);
64
+ throw error;
65
+ }
66
+ }
67
+ }
@@ -1,4 +1,4 @@
1
- import { Client, createChannel, createClient, Metadata } from 'nice-grpc';
1
+ import { Client, Metadata } from 'nice-grpc';
2
2
  import config from '../config/config';
3
3
  import {
4
4
  DeleteSourceMapRequest,
@@ -6,40 +6,32 @@ import {
6
6
  UpdateSourceMapRequest,
7
7
  UploadSourceMapsRequest,
8
8
  } from '../proto-models/com/coralogix/rum/v2/rum_source_map_service';
9
- import { compressFileContentChunks, validateCompressedFilesSize } from '../utils';
10
- import { envToDomain } from '../consts/consts';
11
9
  import { FileMetadata } from '../proto-models/com/coralogix/rum/v2/file';
10
+ import { validateCompressedFilesSize } from '../utils/shared.utils';
11
+ import { ClientFactory } from './client/client-factory';
12
+ import { FileProcessor } from '../utils/file-processor.utils';
12
13
 
13
- export class RumApi {
14
- private static getGrpcClient(env: string) {
15
- const { maxMessageSize, keepaliveTimeMs, keepaliveTimeoutMs } = config.rumApi;
16
-
17
- const channel = createChannel(envToDomain[env], undefined, {
18
- 'grpc.max_receive_message_length': maxMessageSize,
19
- 'grpc.max_send_message_length': maxMessageSize,
20
- 'grpc.keepalive_time_ms': keepaliveTimeMs,
21
- 'grpc.keepalive_timeout_ms': keepaliveTimeoutMs,
22
- });
23
-
24
- return createClient(RumSourceMapServiceDefinition, channel);
14
+ export class SourceMapsApi {
15
+ private static sumFilesSize(files: FileMetadata[]): number {
16
+ return files.reduce((acc, file) => acc + file.size, 0);
25
17
  }
26
18
 
27
19
  static async uploadSourceMaps(request: UploadSourceMapsRequest, env: string, privateKey: string) {
28
20
  try {
29
- const client: Client<typeof RumSourceMapServiceDefinition> = this.getGrpcClient(env);
21
+ const client: Client<typeof RumSourceMapServiceDefinition> = ClientFactory.getRumSourceMapGrpcClient(env);
30
22
 
31
23
  const { files, releaseId, application, repoName, commitHash, user } = request;
32
24
 
33
25
  const compressedFiles: FileMetadata[] = await Promise.all(
34
26
  files.map(async (file: FileMetadata) => {
35
- const content = compressFileContentChunks(file.content);
27
+ const content = FileProcessor.compressFileContentChunks(file.content);
36
28
  const size = content.length;
37
29
  const chunkName = file.chunkName;
38
30
  return { chunkName, size, content };
39
31
  }),
40
32
  );
41
33
 
42
- validateCompressedFilesSize(compressedFiles, config.rumApi.maxCompressedFilesSize);
34
+ validateCompressedFilesSize(this.sumFilesSize(compressedFiles), config.rumApi.sourceMapsMaxCompressedFilesSize);
43
35
 
44
36
  const metadata = new Metadata();
45
37
 
@@ -63,20 +55,20 @@ export class RumApi {
63
55
 
64
56
  static async updateSourceMap(request: UpdateSourceMapRequest, env: string, privateKey: string) {
65
57
  try {
66
- const client: Client<typeof RumSourceMapServiceDefinition> = this.getGrpcClient(env);
58
+ const client: Client<typeof RumSourceMapServiceDefinition> = ClientFactory.getRumSourceMapGrpcClient(env);
67
59
 
68
60
  const { files, releaseId, application, repoName, commitHash, user, generate } = request;
69
61
 
70
62
  const compressedFiles: FileMetadata[] = await Promise.all(
71
63
  files.map(async (file: FileMetadata) => {
72
- const content = compressFileContentChunks(file.content);
64
+ const content = FileProcessor.compressFileContentChunks(file.content);
73
65
  const size = content.length;
74
66
  const chunkName = file.chunkName;
75
67
  return { chunkName, size, content };
76
68
  }),
77
69
  );
78
70
 
79
- validateCompressedFilesSize(compressedFiles, config.rumApi.maxCompressedFilesSize);
71
+ validateCompressedFilesSize(this.sumFilesSize(compressedFiles), config.rumApi.sourceMapsMaxCompressedFilesSize);
80
72
 
81
73
  const metadata = new Metadata();
82
74
 
@@ -90,7 +82,7 @@ export class RumApi {
90
82
  repoName,
91
83
  commitHash,
92
84
  user,
93
- generate: generate?.toString() || undefined
85
+ generate: generate?.toString() || undefined,
94
86
  },
95
87
  { metadata },
96
88
  );
@@ -101,7 +93,7 @@ export class RumApi {
101
93
 
102
94
  static async deleteSourceMap(request: DeleteSourceMapRequest, env: string, privateKey: string) {
103
95
  try {
104
- const client: Client<typeof RumSourceMapServiceDefinition> = this.getGrpcClient(env);
96
+ const client: Client<typeof RumSourceMapServiceDefinition> = ClientFactory.getRumSourceMapGrpcClient(env);
105
97
 
106
98
  const metadata = new Metadata();
107
99
 
@@ -0,0 +1,5 @@
1
+ import { uploadDsymCommand } from './upload-dsym-command';
2
+
3
+ const dsymCommands = { uploadDsymCommand };
4
+
5
+ export default dsymCommands;
@@ -0,0 +1,36 @@
1
+ import { Command } from 'commander';
2
+ import { validateEnvironment } from '../../validators';
3
+ import { checkMissingArguments, consoleError } from '../../../utils/shared.utils';
4
+ import { DsymService } from '../../../services/dsym.service';
5
+ import { UploadDsymCommandOptions } from '../../../models/dsym-commands.model';
6
+
7
+ export const uploadDsymCommand = () => {
8
+ const uploadCommand = new Command('upload-dsym')
9
+ .option('-k, --private-key <privateKey>', 'Private key to authenticate with the API')
10
+ .option('-a, --application <application>', 'Name of the application')
11
+ .option('-v, --version <version>', 'The application version - must match the version used by RUM sdk')
12
+ .option('-f, --folder-path <folderPath>', 'Path to the folder containing the dsym')
13
+ .option('-e, --env <env>', 'Your environment', validateEnvironment)
14
+ .option('-c, --commit-hash <commitHash>', 'GitHub commit hash (optional)')
15
+ .option('-n, --repo-name <repoName>', 'GitHub Repository name (optional)')
16
+ .option('-o, --org-name <orgName>', 'GitHub user name (optional)')
17
+ .description('Upload Dsym')
18
+ .action(async (options: UploadDsymCommandOptions) => {
19
+ try {
20
+ if (options.help) {
21
+ uploadCommand.outputHelp();
22
+ process.exit(0);
23
+ }
24
+
25
+ const { privateKey, application, version, folderPath, commitHash, repoName, orgName, env } = options;
26
+
27
+ checkMissingArguments<UploadDsymCommandOptions>(options, ['privateKey', 'application', 'version', 'folderPath', 'env']);
28
+
29
+ await DsymService.upload(application, version, repoName, commitHash, orgName, folderPath, env, privateKey);
30
+ } catch (error) {
31
+ consoleError(error);
32
+ }
33
+ });
34
+
35
+ return uploadCommand;
36
+ };
@@ -0,0 +1,5 @@
1
+ import { uploadReactNativeSourceMapsCommand } from './upload-react-native-source-maps-command';
2
+
3
+ const reactNativeCommands = { uploadReactNativeSourceMapsCommand };
4
+
5
+ export default reactNativeCommands;
@@ -0,0 +1,42 @@
1
+ import { Command } from 'commander';
2
+ import { validateEnvironment } from '../../validators';
3
+ import { checkMissingArguments, consoleError } from '../../../utils/shared.utils';
4
+ import { ReactNativeService } from '../../../services/react-native.service';
5
+ import { UploadReactNativeSourceMapsCommandOptions } from '../../../models/react-native-commands.model';
6
+
7
+ export const uploadReactNativeSourceMapsCommand = () => {
8
+ const uploadCommand = new Command('upload-react-native-source-maps')
9
+ .option('-k, --private-key <privateKey>', 'Private key to authenticate with the API')
10
+ .option('-a, --application <application>', 'Name of the application')
11
+ .option('-v, --version <version>', 'The application version - must match the version used by RUM sdk')
12
+ .option('-f, --folder-path <folderPath>', 'Path to the folder containing the react native source map')
13
+ .option('-e, --env <env>', 'Your environment', validateEnvironment)
14
+ .option('-c, --commit-hash <commitHash>', 'GitHub commit hash (optional)')
15
+ .option('-n, --repo-name <repoName>', 'GitHub Repository name (optional)')
16
+ .option('-o, --org-name <orgName>', 'GitHub user name (optional)')
17
+ .description('Upload react native source maps')
18
+ .action(async (options: UploadReactNativeSourceMapsCommandOptions) => {
19
+ try {
20
+ if (options.help) {
21
+ uploadCommand.outputHelp();
22
+ process.exit(0);
23
+ }
24
+
25
+ const { privateKey, application, version, folderPath, commitHash, repoName, orgName, env } = options;
26
+
27
+ checkMissingArguments<UploadReactNativeSourceMapsCommandOptions>(options, [
28
+ 'privateKey',
29
+ 'application',
30
+ 'version',
31
+ 'folderPath',
32
+ 'env',
33
+ ]);
34
+
35
+ await ReactNativeService.upload(application, version, repoName, commitHash, orgName, folderPath, env, privateKey);
36
+ } catch (error) {
37
+ consoleError(error);
38
+ }
39
+ });
40
+
41
+ return uploadCommand;
42
+ };
@@ -1,18 +1,17 @@
1
1
  import { Command } from 'commander';
2
- import { validateEnvironment } from '../validators';
3
- import { RED_COLOR } from '../../consts/consts';
4
- import { SourceMapsService } from '../../services/source-maps.service';
5
- import { checkMissingArguments } from '../../utils';
6
- import { DeleteCommandOptions } from '../../models/commands.model';
2
+ import { validateEnvironment } from '../../validators';
3
+ import { SourceMapsService } from '../../../services/source-maps.service';
4
+ import { checkMissingArguments, consoleError } from '../../../utils/shared.utils';
5
+ import { DeleteSourceMapsCommandOptions } from '../../../models/source-maps-commands.model';
7
6
 
8
- export const deleteCommand = () => {
7
+ export const deleteSourceMapsCommand = () => {
9
8
  const deleteCommand = new Command('delete-source-maps')
10
9
  .option('-k, --private-key <privateKey>', 'Private key to authenticate with the API')
11
10
  .option('-a, --application <application>', 'Name of the application')
12
11
  .option('-v, --version <version>', 'The application version - must match the version used by RUM sdk')
13
12
  .option('-e, --env <env>', 'Your environment', validateEnvironment)
14
13
  .description('Delete source maps')
15
- .action(async (options: DeleteCommandOptions) => {
14
+ .action(async (options: DeleteSourceMapsCommandOptions) => {
16
15
  try {
17
16
  if (options.help) {
18
17
  deleteCommand.outputHelp();
@@ -21,12 +20,11 @@ export const deleteCommand = () => {
21
20
 
22
21
  const { privateKey, application, version, env } = options;
23
22
 
24
- checkMissingArguments<DeleteCommandOptions>(options, ['privateKey', 'application', 'version', 'env']);
23
+ checkMissingArguments<DeleteSourceMapsCommandOptions>(options, ['privateKey', 'application', 'version', 'env']);
25
24
 
26
25
  await SourceMapsService.delete(application, version, env, privateKey);
27
26
  } catch (error) {
28
- console.error(RED_COLOR, '❌ An error occurred:');
29
- console.error(RED_COLOR, error);
27
+ consoleError(error);
30
28
  }
31
29
  });
32
30
 
@@ -0,0 +1,7 @@
1
+ import { updateSourceMapsCommand } from './update-source-maps-command';
2
+ import { uploadSourceMapsCommand } from './upload-source-maps-command';
3
+ import { deleteSourceMapsCommand } from './delete-source-maps-command';
4
+
5
+ const sourceMapsCommands = { uploadSourceMapsCommand, updateSourceMapsCommand, deleteSourceMapsCommand };
6
+
7
+ export default sourceMapsCommands;
@@ -1,11 +1,10 @@
1
1
  import { Command } from 'commander';
2
- import { validateEnvironment } from '../validators';
3
- import { RED_COLOR } from '../../consts/consts';
4
- import { SourceMapsService } from '../../services/source-maps.service';
5
- import { checkMissingArguments } from '../../utils';
6
- import { UpdateCommandOptions } from '../../models/commands.model';
2
+ import { validateEnvironment } from '../../validators';
3
+ import { SourceMapsService } from '../../../services/source-maps.service';
4
+ import { checkMissingArguments, consoleError } from '../../../utils/shared.utils';
5
+ import { UpdateSourceMapsCommandOptions } from '../../../models/source-maps-commands.model';
7
6
 
8
- export const updateCommand = () => {
7
+ export const updateSourceMapsCommand = () => {
9
8
  const updateCommand = new Command('update-source-maps')
10
9
  .option('-k, --private-key <privateKey>', 'Private key to authenticate with the API')
11
10
  .option('-a, --application <application>', 'Name of the application')
@@ -17,7 +16,7 @@ export const updateCommand = () => {
17
16
  .option('-o, --org-name <orgName>', 'GitHub user name (optional)')
18
17
  .option('-g, --generate [generate]', 'Update existing release or create a new one if not found (optional)')
19
18
  .description('Update source maps')
20
- .action(async (options: UpdateCommandOptions) => {
19
+ .action(async (options: UpdateSourceMapsCommandOptions) => {
21
20
  try {
22
21
  if (options.help) {
23
22
  updateCommand.outputHelp();
@@ -26,12 +25,11 @@ export const updateCommand = () => {
26
25
 
27
26
  const { privateKey, application, version, folderPath, commitHash, repoName, orgName, env, generate } = options;
28
27
 
29
- checkMissingArguments<UpdateCommandOptions>(options, ['privateKey', 'application', 'version', 'folderPath', 'env']);
28
+ checkMissingArguments<UpdateSourceMapsCommandOptions>(options, ['privateKey', 'application', 'version', 'folderPath', 'env']);
30
29
 
31
30
  await SourceMapsService.update(application, version, repoName, commitHash, orgName, folderPath, generate, env, privateKey);
32
31
  } catch (error) {
33
- console.error(RED_COLOR, '❌ An error occurred:');
34
- console.error(RED_COLOR, error);
32
+ consoleError(error);
35
33
  }
36
34
  });
37
35