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.
- package/android/build/.transforms/bb54161301273cf9b5b94a21c0fb3f23/transformed/classes/classes_dex/classes.dex +0 -0
- package/android/build/.transforms/f1aabffcd8b03aa664e77a79b3e1de5d/transformed/debug/debug_dex/com/cuoral/ionic/CuoralPlugin$1.dex +0 -0
- package/android/build/.transforms/f1aabffcd8b03aa664e77a79b3e1de5d/transformed/debug/debug_dex/com/cuoral/ionic/CuoralPlugin$2.dex +0 -0
- package/android/build/.transforms/f1aabffcd8b03aa664e77a79b3e1de5d/transformed/debug/debug_dex/com/cuoral/ionic/CuoralPlugin$3.dex +0 -0
- package/android/build/.transforms/f1aabffcd8b03aa664e77a79b3e1de5d/transformed/debug/debug_dex/com/cuoral/ionic/CuoralPlugin$4.dex +0 -0
- package/android/build/.transforms/f1aabffcd8b03aa664e77a79b3e1de5d/transformed/debug/debug_dex/com/cuoral/ionic/CuoralPlugin$5.dex +0 -0
- package/android/build/.transforms/f1aabffcd8b03aa664e77a79b3e1de5d/transformed/debug/debug_dex/com/cuoral/ionic/CuoralPlugin$6.dex +0 -0
- package/android/build/.transforms/f1aabffcd8b03aa664e77a79b3e1de5d/transformed/debug/debug_dex/com/cuoral/ionic/CuoralPlugin$InitiateCallback.dex +0 -0
- package/android/build/.transforms/f1aabffcd8b03aa664e77a79b3e1de5d/transformed/debug/debug_dex/com/cuoral/ionic/CuoralPlugin$UploadCallback.dex +0 -0
- package/android/build/.transforms/f1aabffcd8b03aa664e77a79b3e1de5d/transformed/debug/debug_dex/com/cuoral/ionic/CuoralPlugin.dex +0 -0
- package/android/build/.transforms/f1aabffcd8b03aa664e77a79b3e1de5d/transformed/debug/desugar_graph.bin +0 -0
- package/android/build/intermediates/compile_library_classes_jar/debug/classes.jar +0 -0
- package/android/build/intermediates/javac/debug/classes/com/cuoral/ionic/CuoralPlugin$1.class +0 -0
- package/android/build/intermediates/javac/debug/classes/com/cuoral/ionic/CuoralPlugin$2.class +0 -0
- package/android/build/intermediates/javac/debug/classes/com/cuoral/ionic/CuoralPlugin$3.class +0 -0
- package/android/build/intermediates/javac/debug/classes/com/cuoral/ionic/CuoralPlugin$4.class +0 -0
- package/android/build/intermediates/javac/debug/classes/com/cuoral/ionic/CuoralPlugin$5.class +0 -0
- package/android/build/intermediates/javac/debug/classes/com/cuoral/ionic/CuoralPlugin$6.class +0 -0
- package/android/build/intermediates/javac/debug/classes/com/cuoral/ionic/CuoralPlugin$InitiateCallback.class +0 -0
- package/android/build/intermediates/javac/debug/classes/com/cuoral/ionic/CuoralPlugin$UploadCallback.class +0 -0
- package/android/build/intermediates/javac/debug/classes/com/cuoral/ionic/CuoralPlugin.class +0 -0
- package/android/build/intermediates/runtime_library_classes_dir/debug/com/cuoral/ionic/CuoralPlugin$1.class +0 -0
- package/android/build/intermediates/runtime_library_classes_dir/debug/com/cuoral/ionic/CuoralPlugin$2.class +0 -0
- package/android/build/intermediates/runtime_library_classes_dir/debug/com/cuoral/ionic/CuoralPlugin$3.class +0 -0
- package/android/build/intermediates/runtime_library_classes_dir/debug/com/cuoral/ionic/CuoralPlugin$4.class +0 -0
- package/android/build/intermediates/runtime_library_classes_dir/debug/com/cuoral/ionic/CuoralPlugin$5.class +0 -0
- package/android/build/intermediates/runtime_library_classes_dir/debug/com/cuoral/ionic/CuoralPlugin$6.class +0 -0
- package/android/build/intermediates/runtime_library_classes_dir/debug/com/cuoral/ionic/CuoralPlugin$InitiateCallback.class +0 -0
- package/android/build/intermediates/runtime_library_classes_dir/debug/com/cuoral/ionic/CuoralPlugin$UploadCallback.class +0 -0
- package/android/build/intermediates/runtime_library_classes_dir/debug/com/cuoral/ionic/CuoralPlugin.class +0 -0
- package/android/build/intermediates/runtime_library_classes_jar/debug/classes.jar +0 -0
- package/android/build/tmp/compileDebugJavaWithJavac/compileTransaction/stash-dir/{CuoralPlugin$1.class.uniqueId1 → CuoralPlugin$1.class.uniqueId2} +0 -0
- package/android/build/tmp/compileDebugJavaWithJavac/compileTransaction/stash-dir/{CuoralPlugin$2.class.uniqueId2 → CuoralPlugin$2.class.uniqueId5} +0 -0
- package/android/build/tmp/compileDebugJavaWithJavac/compileTransaction/stash-dir/CuoralPlugin$3.class.uniqueId3 +0 -0
- package/android/build/tmp/compileDebugJavaWithJavac/compileTransaction/stash-dir/CuoralPlugin$4.class.uniqueId6 +0 -0
- package/android/build/tmp/compileDebugJavaWithJavac/compileTransaction/stash-dir/CuoralPlugin$5.class.uniqueId4 +0 -0
- package/android/build/tmp/compileDebugJavaWithJavac/compileTransaction/stash-dir/CuoralPlugin$6.class.uniqueId8 +0 -0
- package/android/build/tmp/compileDebugJavaWithJavac/compileTransaction/stash-dir/CuoralPlugin$InitiateCallback.class.uniqueId0 +0 -0
- package/android/build/tmp/compileDebugJavaWithJavac/compileTransaction/stash-dir/CuoralPlugin$UploadCallback.class.uniqueId7 +0 -0
- package/android/build/tmp/compileDebugJavaWithJavac/compileTransaction/stash-dir/CuoralPlugin.class.uniqueId1 +0 -0
- package/android/build/tmp/compileDebugJavaWithJavac/previous-compilation-data.bin +0 -0
- package/android/build.gradle +1 -0
- package/android/src/main/java/com/cuoral/ionic/CuoralPlugin.java +209 -6
- package/dist/bridge.d.ts.map +1 -1
- package/dist/cuoral.d.ts +15 -1
- package/dist/cuoral.d.ts.map +1 -1
- package/dist/cuoral.js +141 -12
- package/dist/index.esm.js +218 -46
- package/dist/index.esm.js.map +1 -1
- package/dist/index.js +218 -46
- package/dist/index.js.map +1 -1
- package/dist/intelligence.d.ts +4 -0
- package/dist/intelligence.d.ts.map +1 -1
- package/dist/intelligence.js +19 -0
- package/dist/plugin.d.ts +16 -3
- package/dist/plugin.d.ts.map +1 -1
- package/dist/plugin.js +53 -36
- package/dist/types.d.ts +4 -0
- package/dist/types.d.ts.map +1 -1
- package/dist/types.js +4 -0
- package/ios/Plugin/CuoralPlugin.swift +249 -13
- package/package.json +1 -1
- package/src/bridge.ts +1 -0
- package/src/cuoral.ts +158 -14
- package/src/intelligence.ts +23 -0
- package/src/plugin.ts +70 -37
- package/src/types.ts +4 -0
- package/android/build/tmp/compileDebugJavaWithJavac/compileTransaction/stash-dir/CuoralPlugin.class.uniqueId0 +0 -0
|
Binary file
|
|
Binary file
|
|
Binary file
|
|
Binary file
|
|
Binary file
|
|
Binary file
|
|
Binary file
|
|
Binary file
|
|
Binary file
|
|
Binary file
|
|
Binary file
|
|
Binary file
|
package/android/build/intermediates/javac/debug/classes/com/cuoral/ionic/CuoralPlugin$1.class
CHANGED
|
Binary file
|
package/android/build/intermediates/javac/debug/classes/com/cuoral/ionic/CuoralPlugin$2.class
CHANGED
|
Binary file
|
|
Binary file
|
|
Binary file
|
|
Binary file
|
|
Binary file
|
|
Binary file
|
|
Binary file
|
|
Binary file
|
|
Binary file
|
|
Binary file
|
|
Binary file
|
|
Binary file
|
|
Binary file
|
|
Binary file
|
|
Binary file
|
|
Binary file
|
|
Binary file
|
|
Binary file
|
|
Binary file
|
|
Binary file
|
|
Binary file
|
|
Binary file
|
|
Binary file
|
|
Binary file
|
|
Binary file
|
|
Binary file
|
|
Binary file
|
|
Binary file
|
package/android/build.gradle
CHANGED
|
@@ -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
|
-
|
|
393
|
-
|
|
394
|
-
|
|
395
|
-
|
|
396
|
-
|
|
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
|
-
|
|
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
|
}
|
package/dist/bridge.d.ts.map
CHANGED
|
@@ -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;
|
|
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
|
-
*
|
|
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
|
*/
|
package/dist/cuoral.d.ts.map
CHANGED
|
@@ -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;
|
|
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"}
|