cuoral-ionic 0.0.6 → 0.0.8

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 (68) hide show
  1. package/android/build/.transforms/bb54161301273cf9b5b94a21c0fb3f23/transformed/classes/classes_dex/classes.dex +0 -0
  2. package/android/build/.transforms/f1aabffcd8b03aa664e77a79b3e1de5d/transformed/debug/debug_dex/com/cuoral/ionic/CuoralPlugin$1.dex +0 -0
  3. package/android/build/.transforms/f1aabffcd8b03aa664e77a79b3e1de5d/transformed/debug/debug_dex/com/cuoral/ionic/CuoralPlugin$2.dex +0 -0
  4. package/android/build/.transforms/f1aabffcd8b03aa664e77a79b3e1de5d/transformed/debug/debug_dex/com/cuoral/ionic/CuoralPlugin$3.dex +0 -0
  5. package/android/build/.transforms/f1aabffcd8b03aa664e77a79b3e1de5d/transformed/debug/debug_dex/com/cuoral/ionic/CuoralPlugin$4.dex +0 -0
  6. package/android/build/.transforms/f1aabffcd8b03aa664e77a79b3e1de5d/transformed/debug/debug_dex/com/cuoral/ionic/CuoralPlugin$5.dex +0 -0
  7. package/android/build/.transforms/f1aabffcd8b03aa664e77a79b3e1de5d/transformed/debug/debug_dex/com/cuoral/ionic/CuoralPlugin$6.dex +0 -0
  8. package/android/build/.transforms/f1aabffcd8b03aa664e77a79b3e1de5d/transformed/debug/debug_dex/com/cuoral/ionic/CuoralPlugin$InitiateCallback.dex +0 -0
  9. package/android/build/.transforms/f1aabffcd8b03aa664e77a79b3e1de5d/transformed/debug/debug_dex/com/cuoral/ionic/CuoralPlugin$UploadCallback.dex +0 -0
  10. package/android/build/.transforms/f1aabffcd8b03aa664e77a79b3e1de5d/transformed/debug/debug_dex/com/cuoral/ionic/CuoralPlugin.dex +0 -0
  11. package/android/build/.transforms/f1aabffcd8b03aa664e77a79b3e1de5d/transformed/debug/desugar_graph.bin +0 -0
  12. package/android/build/intermediates/compile_library_classes_jar/debug/classes.jar +0 -0
  13. package/android/build/intermediates/javac/debug/classes/com/cuoral/ionic/CuoralPlugin$1.class +0 -0
  14. package/android/build/intermediates/javac/debug/classes/com/cuoral/ionic/CuoralPlugin$2.class +0 -0
  15. package/android/build/intermediates/javac/debug/classes/com/cuoral/ionic/CuoralPlugin$3.class +0 -0
  16. package/android/build/intermediates/javac/debug/classes/com/cuoral/ionic/CuoralPlugin$4.class +0 -0
  17. package/android/build/intermediates/javac/debug/classes/com/cuoral/ionic/CuoralPlugin$5.class +0 -0
  18. package/android/build/intermediates/javac/debug/classes/com/cuoral/ionic/CuoralPlugin$6.class +0 -0
  19. package/android/build/intermediates/javac/debug/classes/com/cuoral/ionic/CuoralPlugin$InitiateCallback.class +0 -0
  20. package/android/build/intermediates/javac/debug/classes/com/cuoral/ionic/CuoralPlugin$UploadCallback.class +0 -0
  21. package/android/build/intermediates/javac/debug/classes/com/cuoral/ionic/CuoralPlugin.class +0 -0
  22. package/android/build/intermediates/runtime_library_classes_dir/debug/com/cuoral/ionic/CuoralPlugin$1.class +0 -0
  23. package/android/build/intermediates/runtime_library_classes_dir/debug/com/cuoral/ionic/CuoralPlugin$2.class +0 -0
  24. package/android/build/intermediates/runtime_library_classes_dir/debug/com/cuoral/ionic/CuoralPlugin$3.class +0 -0
  25. package/android/build/intermediates/runtime_library_classes_dir/debug/com/cuoral/ionic/CuoralPlugin$4.class +0 -0
  26. package/android/build/intermediates/runtime_library_classes_dir/debug/com/cuoral/ionic/CuoralPlugin$5.class +0 -0
  27. package/android/build/intermediates/runtime_library_classes_dir/debug/com/cuoral/ionic/CuoralPlugin$6.class +0 -0
  28. package/android/build/intermediates/runtime_library_classes_dir/debug/com/cuoral/ionic/CuoralPlugin$InitiateCallback.class +0 -0
  29. package/android/build/intermediates/runtime_library_classes_dir/debug/com/cuoral/ionic/CuoralPlugin$UploadCallback.class +0 -0
  30. package/android/build/intermediates/runtime_library_classes_dir/debug/com/cuoral/ionic/CuoralPlugin.class +0 -0
  31. package/android/build/intermediates/runtime_library_classes_jar/debug/classes.jar +0 -0
  32. package/android/build/tmp/compileDebugJavaWithJavac/compileTransaction/stash-dir/{CuoralPlugin$1.class.uniqueId1 → CuoralPlugin$1.class.uniqueId2} +0 -0
  33. package/android/build/tmp/compileDebugJavaWithJavac/compileTransaction/stash-dir/{CuoralPlugin$2.class.uniqueId2 → CuoralPlugin$2.class.uniqueId5} +0 -0
  34. package/android/build/tmp/compileDebugJavaWithJavac/compileTransaction/stash-dir/CuoralPlugin$3.class.uniqueId3 +0 -0
  35. package/android/build/tmp/compileDebugJavaWithJavac/compileTransaction/stash-dir/CuoralPlugin$4.class.uniqueId6 +0 -0
  36. package/android/build/tmp/compileDebugJavaWithJavac/compileTransaction/stash-dir/CuoralPlugin$5.class.uniqueId4 +0 -0
  37. package/android/build/tmp/compileDebugJavaWithJavac/compileTransaction/stash-dir/CuoralPlugin$6.class.uniqueId8 +0 -0
  38. package/android/build/tmp/compileDebugJavaWithJavac/compileTransaction/stash-dir/CuoralPlugin$InitiateCallback.class.uniqueId0 +0 -0
  39. package/android/build/tmp/compileDebugJavaWithJavac/compileTransaction/stash-dir/CuoralPlugin$UploadCallback.class.uniqueId7 +0 -0
  40. package/android/build/tmp/compileDebugJavaWithJavac/compileTransaction/stash-dir/CuoralPlugin.class.uniqueId1 +0 -0
  41. package/android/build/tmp/compileDebugJavaWithJavac/previous-compilation-data.bin +0 -0
  42. package/android/build.gradle +1 -0
  43. package/android/src/main/java/com/cuoral/ionic/CuoralPlugin.java +209 -6
  44. package/dist/bridge.d.ts.map +1 -1
  45. package/dist/cuoral.d.ts +15 -1
  46. package/dist/cuoral.d.ts.map +1 -1
  47. package/dist/cuoral.js +141 -12
  48. package/dist/index.esm.js +218 -46
  49. package/dist/index.esm.js.map +1 -1
  50. package/dist/index.js +218 -46
  51. package/dist/index.js.map +1 -1
  52. package/dist/intelligence.d.ts +4 -0
  53. package/dist/intelligence.d.ts.map +1 -1
  54. package/dist/intelligence.js +19 -0
  55. package/dist/plugin.d.ts +16 -3
  56. package/dist/plugin.d.ts.map +1 -1
  57. package/dist/plugin.js +53 -36
  58. package/dist/types.d.ts +4 -0
  59. package/dist/types.d.ts.map +1 -1
  60. package/dist/types.js +4 -0
  61. package/ios/Plugin/CuoralPlugin.swift +249 -13
  62. package/package.json +1 -1
  63. package/src/bridge.ts +1 -0
  64. package/src/cuoral.ts +158 -14
  65. package/src/intelligence.ts +23 -0
  66. package/src/plugin.ts +70 -37
  67. package/src/types.ts +4 -0
  68. package/android/build/tmp/compileDebugJavaWithJavac/compileTransaction/stash-dir/CuoralPlugin.class.uniqueId0 +0 -0
@@ -55,6 +55,7 @@ dependencies {
55
55
  implementation fileTree(dir: 'libs', include: ['*.jar'])
56
56
  implementation project(':capacitor-android')
57
57
  implementation "androidx.appcompat:appcompat:$androidxAppCompatVersion"
58
+ implementation 'com.squareup.okhttp3:okhttp:4.12.0'
58
59
  testImplementation "junit:junit:$junitVersion"
59
60
  androidTestImplementation "androidx.test.ext:junit:$androidxJunitVersion"
60
61
  androidTestImplementation "androidx.test.espresso:espresso-core:$androidxEspressoCoreVersion"
@@ -32,10 +32,20 @@ import java.io.File;
32
32
  import java.io.IOException;
33
33
  import java.io.PrintWriter;
34
34
  import java.io.StringWriter;
35
+ import java.nio.file.Files;
35
36
 
36
37
  import org.json.JSONObject;
37
38
  import org.json.JSONException;
38
39
 
40
+ import okhttp3.Call;
41
+ import okhttp3.Callback;
42
+ import okhttp3.MediaType;
43
+ import okhttp3.MultipartBody;
44
+ import okhttp3.OkHttpClient;
45
+ import okhttp3.Request;
46
+ import okhttp3.RequestBody;
47
+ import okhttp3.Response;
48
+
39
49
  @CapacitorPlugin(name = "CuoralPlugin", permissions = {
40
50
  @Permission(strings = { Manifest.permission.RECORD_AUDIO }, alias = "audio"),
41
51
  @Permission(strings = { Manifest.permission.WRITE_EXTERNAL_STORAGE }, alias = "storage")
@@ -364,6 +374,12 @@ public class CuoralPlugin extends Plugin {
364
374
  return;
365
375
  }
366
376
 
377
+ // Get upload options
378
+ boolean autoUpload = call.getBoolean("autoUpload", false);
379
+ String sessionId = call.getString("sessionId", "");
380
+ String publicKey = call.getString("publicKey", "");
381
+ String customerId = call.getString("customerId", "");
382
+
367
383
  try {
368
384
  mediaRecorder.stop();
369
385
  mediaRecorder.reset();
@@ -389,11 +405,42 @@ public class CuoralPlugin extends Plugin {
389
405
  isRecording = false;
390
406
  long duration = (System.currentTimeMillis() - recordingStartTime) / 1000;
391
407
 
392
- JSObject ret = new JSObject();
393
- ret.put("success", true);
394
- ret.put("filePath", videoFilePath);
395
- ret.put("duration", duration);
396
- call.resolve(ret);
408
+ // If autoUpload is enabled, upload the video
409
+ if (autoUpload && !sessionId.isEmpty() && !publicKey.isEmpty()) {
410
+ final String filePath = videoFilePath;
411
+ final long finalDuration = duration;
412
+
413
+ uploadRecording(filePath, sessionId, publicKey, customerId, (int) finalDuration, new UploadCallback() {
414
+ @Override
415
+ public void onSuccess() {
416
+ JSObject ret = new JSObject();
417
+ ret.put("success", true);
418
+ ret.put("filePath", filePath);
419
+ ret.put("duration", finalDuration);
420
+ ret.put("uploaded", true);
421
+ call.resolve(ret);
422
+ }
423
+
424
+ @Override
425
+ public void onFailure(String error) {
426
+ JSObject ret = new JSObject();
427
+ ret.put("success", true);
428
+ ret.put("filePath", filePath);
429
+ ret.put("duration", finalDuration);
430
+ ret.put("uploaded", false);
431
+ ret.put("uploadError", error);
432
+ call.resolve(ret);
433
+ }
434
+ });
435
+ } else {
436
+ // No upload, just return file path
437
+ JSObject ret = new JSObject();
438
+ ret.put("success", true);
439
+ ret.put("filePath", videoFilePath);
440
+ ret.put("duration", duration);
441
+ ret.put("uploaded", false);
442
+ call.resolve(ret);
443
+ }
397
444
 
398
445
  // Notify listeners
399
446
  JSObject eventData = new JSObject();
@@ -504,7 +551,9 @@ public class CuoralPlugin extends Plugin {
504
551
  mediaRecorder.setOutputFormat(MediaRecorder.OutputFormat.MPEG_4);
505
552
  mediaRecorder.setOutputFile(videoFilePath);
506
553
 
507
- int bitRate = (int) (6000000 * quality); // Base bitrate 6Mbps
554
+ // Optimized bitrate for screen recordings - 1.5 Mbps = ~11MB per minute
555
+ // 5 minutes = ~54MB (good quality, small size)
556
+ int bitRate = 1500000; // 1.5 Mbps (matches iOS settings)
508
557
  mediaRecorder.setVideoEncoder(MediaRecorder.VideoEncoder.H264);
509
558
  mediaRecorder.setVideoSize(metrics.widthPixels, metrics.heightPixels);
510
559
  mediaRecorder.setVideoFrameRate(30);
@@ -545,4 +594,158 @@ public class CuoralPlugin extends Plugin {
545
594
  ret.put("error", message);
546
595
  return ret;
547
596
  }
597
+
598
+ // Upload callback interface
599
+ private interface UploadCallback {
600
+ void onSuccess();
601
+
602
+ void onFailure(String error);
603
+ }
604
+
605
+ /**
606
+ * Upload recording to Cuoral backend
607
+ */
608
+ private void uploadRecording(String filePath, String sessionId, String publicKey,
609
+ String customerId, int duration, UploadCallback callback) {
610
+ File videoFile = new File(filePath);
611
+ if (!videoFile.exists()) {
612
+ callback.onFailure("File not found");
613
+ return;
614
+ }
615
+
616
+ // Step 1: Initiate recording to get record_id
617
+ initiateRecording(sessionId, customerId, publicKey, new InitiateCallback() {
618
+ @Override
619
+ public void onSuccess(String recordId) {
620
+ // Step 2: Upload video with the record_id
621
+ uploadVideo(videoFile, recordId, publicKey, customerId, duration, callback);
622
+ }
623
+
624
+ @Override
625
+ public void onFailure(String error) {
626
+ callback.onFailure("Failed to initiate recording: " + error);
627
+ }
628
+ });
629
+ }
630
+
631
+ private interface InitiateCallback {
632
+ void onSuccess(String recordId);
633
+
634
+ void onFailure(String error);
635
+ }
636
+
637
+ /**
638
+ * Step 1: Initiate recording session
639
+ */
640
+ private void initiateRecording(String sessionId, String customerId, String publicKey,
641
+ InitiateCallback callback) {
642
+ OkHttpClient client = new OkHttpClient();
643
+
644
+ try {
645
+ JSONObject json = new JSONObject();
646
+ json.put("session_id", sessionId);
647
+ json.put("customer_id", customerId);
648
+
649
+ RequestBody body = RequestBody.create(
650
+ json.toString(),
651
+ MediaType.parse("application/json"));
652
+
653
+ Request request = new Request.Builder()
654
+ .url("https://api.cuoral.com/customer-intelligence/initiate/record")
655
+ .post(body)
656
+ .addHeader("Content-Type", "application/json")
657
+ .addHeader("Accept", "*/*")
658
+ .addHeader("x-org-id", publicKey)
659
+ .build();
660
+
661
+ client.newCall(request).enqueue(new Callback() {
662
+ @Override
663
+ public void onFailure(Call call, IOException e) {
664
+ callback.onFailure(e.getMessage());
665
+ }
666
+
667
+ @Override
668
+ public void onResponse(Call call, Response response) throws IOException {
669
+ if (!response.isSuccessful()) {
670
+ callback.onFailure("Failed with status " + response.code());
671
+ return;
672
+ }
673
+
674
+ try {
675
+ String responseBody = response.body().string();
676
+ JSONObject json = new JSONObject(responseBody);
677
+ String status = json.getString("status");
678
+
679
+ if ("success".equals(status)) {
680
+ String recordId = json.getString("record_id");
681
+ callback.onSuccess(recordId);
682
+ } else {
683
+ callback.onFailure("Invalid response format");
684
+ }
685
+ } catch (JSONException e) {
686
+ callback.onFailure("Failed to parse response: " + e.getMessage());
687
+ }
688
+ }
689
+ });
690
+ } catch (JSONException e) {
691
+ callback.onFailure("Failed to create request: " + e.getMessage());
692
+ }
693
+ }
694
+
695
+ /**
696
+ * Step 2: Upload video to the initiated recording
697
+ */
698
+ private void uploadVideo(File videoFile, String recordId, String publicKey,
699
+ String customerId, int duration, UploadCallback callback) {
700
+ OkHttpClient client = new OkHttpClient.Builder()
701
+ .connectTimeout(60, java.util.concurrent.TimeUnit.SECONDS)
702
+ .writeTimeout(60, java.util.concurrent.TimeUnit.SECONDS)
703
+ .readTimeout(60, java.util.concurrent.TimeUnit.SECONDS)
704
+ .build();
705
+
706
+ RequestBody requestBody = new MultipartBody.Builder()
707
+ .setType(MultipartBody.FORM)
708
+ .addFormDataPart("record_id", recordId)
709
+ .addFormDataPart("console_error", "[]")
710
+ .addFormDataPart("api_response_log", "[]")
711
+ .addFormDataPart("page_view", "[]")
712
+ .addFormDataPart("record_media", "recording.mp4",
713
+ RequestBody.create(videoFile, MediaType.parse("video/mp4")))
714
+ .build();
715
+
716
+ Request request = new Request.Builder()
717
+ .url("https://api.cuoral.com/customer-intelligence/update/record")
718
+ .post(requestBody)
719
+ .addHeader("Accept", "*/*")
720
+ .build();
721
+
722
+ client.newCall(request).enqueue(new Callback() {
723
+ @Override
724
+ public void onFailure(Call call, IOException e) {
725
+ callback.onFailure(e.getMessage());
726
+ }
727
+
728
+ @Override
729
+ public void onResponse(Call call, Response response) throws IOException {
730
+ if (!response.isSuccessful()) {
731
+ callback.onFailure("Upload failed with status " + response.code());
732
+ return;
733
+ }
734
+
735
+ try {
736
+ String responseBody = response.body().string();
737
+ JSONObject json = new JSONObject(responseBody);
738
+ String status = json.getString("status");
739
+
740
+ if ("success".equals(status)) {
741
+ callback.onSuccess();
742
+ } else {
743
+ callback.onFailure("Upload failed");
744
+ }
745
+ } catch (JSONException e) {
746
+ callback.onFailure("Failed to parse response: " + e.getMessage());
747
+ }
748
+ }
749
+ });
750
+ }
548
751
  }
@@ -1 +1 @@
1
- {"version":3,"file":"bridge.d.ts","sourceRoot":"","sources":["../src/bridge.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,aAAa,EAAE,iBAAiB,EAAE,YAAY,EAAE,MAAM,SAAS,CAAC;AAEzE;;GAEG;AACH,qBAAa,YAAY;IACvB,OAAO,CAAC,MAAM,CAAe;IAC7B,OAAO,CAAC,eAAe,CAAoE;IAC3F,OAAO,CAAC,aAAa,CAAkB;IACvC,OAAO,CAAC,YAAY,CAAkC;gBAE1C,MAAM,EAAE,YAAY;IAKhC;;OAEG;IACI,UAAU,IAAI,IAAI;IAgBzB;;OAEG;IACI,YAAY,CAAC,OAAO,EAAE,aAAa,GAAG,IAAI;IAoBjD;;OAEG;IACI,YAAY,CAAC,OAAO,EAAE,aAAa,GAAG,IAAI;IAyCjD;;OAEG;IACI,EAAE,CAAC,IAAI,EAAE,iBAAiB,EAAE,OAAO,EAAE,CAAC,OAAO,EAAE,GAAG,KAAK,IAAI,GAAG,MAAM,IAAI;IAmB/E;;OAEG;IACH,OAAO,CAAC,oBAAoB;IAqC5B;;OAEG;IACH,OAAO,CAAC,GAAG;IAMX;;OAEG;IACI,OAAO,IAAI,IAAI;CAKvB;AAGD,OAAO,CAAC,MAAM,CAAC;IACb,UAAU,MAAM;QACd,MAAM,CAAC,EAAE;YACP,eAAe,CAAC,EAAE;gBAChB,MAAM,CAAC,EAAE;oBACP,WAAW,EAAE,CAAC,OAAO,EAAE,GAAG,KAAK,IAAI,CAAC;iBACrC,CAAC;aACH,CAAC;SACH,CAAC;KACH;CACF"}
1
+ {"version":3,"file":"bridge.d.ts","sourceRoot":"","sources":["../src/bridge.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,aAAa,EAAE,iBAAiB,EAAE,YAAY,EAAE,MAAM,SAAS,CAAC;AAEzE;;GAEG;AACH,qBAAa,YAAY;IACvB,OAAO,CAAC,MAAM,CAAe;IAC7B,OAAO,CAAC,eAAe,CAAoE;IAC3F,OAAO,CAAC,aAAa,CAAkB;IACvC,OAAO,CAAC,YAAY,CAAkC;gBAE1C,MAAM,EAAE,YAAY;IAKhC;;OAEG;IACI,UAAU,IAAI,IAAI;IAgBzB;;OAEG;IACI,YAAY,CAAC,OAAO,EAAE,aAAa,GAAG,IAAI;IAoBjD;;OAEG;IACI,YAAY,CAAC,OAAO,EAAE,aAAa,GAAG,IAAI;IAyCjD;;OAEG;IACI,EAAE,CAAC,IAAI,EAAE,iBAAiB,EAAE,OAAO,EAAE,CAAC,OAAO,EAAE,GAAG,KAAK,IAAI,GAAG,MAAM,IAAI;IAmB/E;;OAEG;IACH,OAAO,CAAC,oBAAoB;IAsC5B;;OAEG;IACH,OAAO,CAAC,GAAG;IAMX;;OAEG;IACI,OAAO,IAAI,IAAI;CAKvB;AAGD,OAAO,CAAC,MAAM,CAAC;IACb,UAAU,MAAM;QACd,MAAM,CAAC,EAAE;YACP,eAAe,CAAC,EAAE;gBAChB,MAAM,CAAC,EAAE;oBACP,WAAW,EAAE,CAAC,OAAO,EAAE,GAAG,KAAK,IAAI,CAAC;iBACrC,CAAC;aACH,CAAC;SACH,CAAC;KACH;CACF"}
package/dist/cuoral.d.ts CHANGED
@@ -40,6 +40,13 @@ export declare class Cuoral {
40
40
  * Track an error manually
41
41
  */
42
42
  trackError(message: string, stackTrace?: string, metadata?: any): void;
43
+ /**
44
+ * Update user profile for the current session
45
+ * Call this after user logs in to update the intelligence session with their profile
46
+ * @param email - User's email address
47
+ * @param name - User's full name
48
+ */
49
+ updateUserProfile(email: string, name: string): Promise<boolean>;
43
50
  /**
44
51
  * Start native screen recording programmatically
45
52
  * @returns Promise<boolean> - true if recording started successfully
@@ -47,11 +54,13 @@ export declare class Cuoral {
47
54
  startRecording(): Promise<boolean>;
48
55
  /**
49
56
  * Stop native screen recording programmatically
50
- * @returns Promise<{filePath?: string; duration?: number} | null> - Recording result or null if failed
57
+ * Recording will be automatically uploaded to the portal
58
+ * @returns Promise<{filePath?: string; duration?: number; uploaded?: boolean} | null> - Recording result or null if failed
51
59
  */
52
60
  stopRecording(): Promise<{
53
61
  filePath?: string;
54
62
  duration?: number;
63
+ uploaded?: boolean;
55
64
  } | null>;
56
65
  /**
57
66
  * Open the widget modal
@@ -73,6 +82,11 @@ export declare class Cuoral {
73
82
  * Clear and end the current session (call before logout)
74
83
  */
75
84
  clearSession(): Promise<void>;
85
+ /**
86
+ * Setup localStorage listener for session changes
87
+ * Widget updates localStorage when creating new session, SDK detects and syncs
88
+ */
89
+ private setupStorageListener;
76
90
  /**
77
91
  * Clean up resources
78
92
  */
@@ -1 +1 @@
1
- {"version":3,"file":"cuoral.d.ts","sourceRoot":"","sources":["../src/cuoral.ts"],"names":[],"mappings":"AAOA,MAAM,WAAW,aAAa;IAC5B,SAAS,EAAE,MAAM,CAAC;IAClB,KAAK,CAAC,EAAE,MAAM,CAAC;IACf,SAAS,CAAC,EAAE,MAAM,CAAC;IACnB,QAAQ,CAAC,EAAE,MAAM,CAAC;IAClB,KAAK,CAAC,EAAE,OAAO,CAAC;IAChB,aAAa,CAAC,EAAE,MAAM,CAAC;IACvB,kBAAkB,CAAC,EAAE,OAAO,CAAC;IAC7B,QAAQ,CAAC,EAAE,OAAO,CAAC;CACpB;AAeD;;GAEG;AACH,qBAAa,MAAM;IACjB,OAAO,CAAC,MAAM,CAAe;IAC7B,OAAO,CAAC,QAAQ,CAAiB;IACjC,OAAO,CAAC,KAAK,CAAC,CAAc;IAC5B,OAAO,CAAC,YAAY,CAAC,CAAqB;IAC1C,OAAO,CAAC,OAAO,CAAgB;IAC/B,OAAO,CAAC,MAAM,CAAC,QAAQ,CAAC,qBAAqB,CAAuC;IACpF,OAAO,CAAC,MAAM,CAAC,QAAQ,CAAC,cAAc,CAAwB;gBAElD,OAAO,EAAE,aAAa;IA2ClC;;OAEG;IACU,UAAU,IAAI,OAAO,CAAC,IAAI,CAAC;IAkBxC;;OAEG;YACW,sBAAsB;IAwCpC;;OAEG;YACW,yBAAyB;IAoCvC;;OAEG;IACI,aAAa,CAAC,MAAM,EAAE,MAAM,EAAE,QAAQ,CAAC,EAAE,GAAG,GAAG,IAAI;IAM1D;;OAEG;IACI,UAAU,CAAC,OAAO,EAAE,MAAM,EAAE,UAAU,CAAC,EAAE,MAAM,EAAE,QAAQ,CAAC,EAAE,GAAG,GAAG,IAAI;IAM7E;;;OAGG;IACU,cAAc,IAAI,OAAO,CAAC,OAAO,CAAC;IAS/C;;;OAGG;IACU,aAAa,IAAI,OAAO,CAAC;QAAC,QAAQ,CAAC,EAAE,MAAM,CAAC;QAAC,QAAQ,CAAC,EAAE,MAAM,CAAA;KAAC,GAAG,IAAI,CAAC;IASpF;;OAEG;IACI,SAAS,IAAI,IAAI;IASxB;;OAEG;IACI,UAAU,IAAI,IAAI;IAMzB;;OAEG;IACI,WAAW,IAAI,OAAO;IAI7B;;OAEG;IACI,YAAY,IAAI,MAAM;IAuB7B;;OAEG;IACU,YAAY,IAAI,OAAO,CAAC,IAAI,CAAC;IA6C1C;;OAEG;IACI,OAAO,IAAI,IAAI;IActB;;OAEG;IACH,OAAO,CAAC,oBAAoB;IAa5B;;OAEG;YACW,eAAe;IAkC7B;;OAEG;YACW,UAAU;IAmBxB;;OAEG;IACH,OAAO,CAAC,oBAAoB;CAuE7B"}
1
+ {"version":3,"file":"cuoral.d.ts","sourceRoot":"","sources":["../src/cuoral.ts"],"names":[],"mappings":"AAOA,MAAM,WAAW,aAAa;IAC5B,SAAS,EAAE,MAAM,CAAC;IAClB,KAAK,CAAC,EAAE,MAAM,CAAC;IACf,SAAS,CAAC,EAAE,MAAM,CAAC;IACnB,QAAQ,CAAC,EAAE,MAAM,CAAC;IAClB,KAAK,CAAC,EAAE,OAAO,CAAC;IAChB,aAAa,CAAC,EAAE,MAAM,CAAC;IACvB,kBAAkB,CAAC,EAAE,OAAO,CAAC;IAC7B,QAAQ,CAAC,EAAE,OAAO,CAAC;CACpB;AAeD;;GAEG;AACH,qBAAa,MAAM;IACjB,OAAO,CAAC,MAAM,CAAe;IAC7B,OAAO,CAAC,QAAQ,CAAiB;IACjC,OAAO,CAAC,KAAK,CAAC,CAAc;IAC5B,OAAO,CAAC,YAAY,CAAC,CAAqB;IAC1C,OAAO,CAAC,OAAO,CAAgB;IAC/B,OAAO,CAAC,MAAM,CAAC,QAAQ,CAAC,qBAAqB,CAAuC;IACpF,OAAO,CAAC,MAAM,CAAC,QAAQ,CAAC,cAAc,CAAwB;gBAElD,OAAO,EAAE,aAAa;IA4DlC;;OAEG;IACU,UAAU,IAAI,OAAO,CAAC,IAAI,CAAC;IAyBxC;;OAEG;YACW,sBAAsB;IA2CpC;;OAEG;YACW,yBAAyB;IAoCvC;;OAEG;IACI,aAAa,CAAC,MAAM,EAAE,MAAM,EAAE,QAAQ,CAAC,EAAE,GAAG,GAAG,IAAI;IAM1D;;OAEG;IACI,UAAU,CAAC,OAAO,EAAE,MAAM,EAAE,UAAU,CAAC,EAAE,MAAM,EAAE,QAAQ,CAAC,EAAE,GAAG,GAAG,IAAI;IAM7E;;;;;OAKG;IACU,iBAAiB,CAAC,KAAK,EAAE,MAAM,EAAE,IAAI,EAAE,MAAM,GAAG,OAAO,CAAC,OAAO,CAAC;IA0C7E;;;OAGG;IACU,cAAc,IAAI,OAAO,CAAC,OAAO,CAAC;IAS/C;;;;OAIG;IACU,aAAa,IAAI,OAAO,CAAC;QAAC,QAAQ,CAAC,EAAE,MAAM,CAAC;QAAC,QAAQ,CAAC,EAAE,MAAM,CAAC;QAAC,QAAQ,CAAC,EAAE,OAAO,CAAA;KAAC,GAAG,IAAI,CAAC;IAiBxG;;OAEG;IACI,SAAS,IAAI,IAAI;IASxB;;OAEG;IACI,UAAU,IAAI,IAAI;IAMzB;;OAEG;IACI,WAAW,IAAI,OAAO;IAI7B;;OAEG;IACI,YAAY,IAAI,MAAM;IAuB7B;;OAEG;IACU,YAAY,IAAI,OAAO,CAAC,IAAI,CAAC;IA6C1C;;;OAGG;IACH,OAAO,CAAC,oBAAoB;IAsB5B;;OAEG;IACI,OAAO,IAAI,IAAI;IActB;;OAEG;IACH,OAAO,CAAC,oBAAoB;IAa5B;;OAEG;YACW,eAAe;IAkC7B;;OAEG;YACW,UAAU;IAmBxB;;OAEG;IACH,OAAO,CAAC,oBAAoB;CAyG7B"}